Вопрос № 91631: Здравствуйте! Как значение Timer1.interval генерировать рандомайзом, а не с заданным интервалом.
..Вопрос № 91733: Здравствуйте Уважаемые эксперты!Вопрос у меня в следующем,у меня есть код сохранения StringGrid в Excel файл
***********************************************************
{ Without OLE }
procedure XlsWriteCellLabel(XlsStream: TStream; cons...
Вопрос № 91.631
Здравствуйте! Как значение Timer1.interval генерировать рандомайзом, а не с заданным интервалом.
Отправлен: 16.06.2007, 14:57
Вопрос задал: Rosmag (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Troyan
Здравствуйте, Rosmag!
В событиях OnCreate и Timer1Timer просто прописываете:
Timer1.Interval:=Random(m)+n;
Где m и n - целочисленные переменные. При этом значение Timer1.Interval будет от n до (m-n).
--------- Цени законы своего сердца, иди на обгон! Будь человеком, не запачкай свою совесть!
Ответ отправил: Troyan (статус: Студент)
Ответ отправлен: 16.06.2007, 15:03 Оценка за ответ: 5
Отвечает: Ерёмин А.А.
Здравствуйте, Rosmag!
Во-первых, один раз во время работы программы (обычно при запуске) нужно инициализировать генератор случайных чисел, иначе числа будут псевдослучайными. Делается это одной командой:
Randomize;
Ну а затем используется функция Random для генерации случайных чисел. Пример:
Timer1.Interval:=Random(3000) + 2000; - случайный интервал от 2 до 5 секунд. Функции Random() передаётся граница интервала для выбора случайных чисел.
Удачи!
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин А.А. (статус: Академик) Россия, Тула WWW:Программирование на DELPHI ---- Ответ отправлен: 16.06.2007, 15:13 Оценка за ответ: 5
Отвечает: Градов Юрий Михайлович
Здравствуйте, Rosmag!
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Interval:=Random(1000);
end;
--------- Глаза боятся - руки делают!
Ответ отправил: Градов Юрий Михайлович (статус: Студент)
Ответ отправлен: 16.06.2007, 15:40 Оценка за ответ: 5
Отвечает: CjJoker
Здравствуйте, Rosmag!
uses
Math;
Timer1OnTimer(Sender: TObject);
begin
Randomize();
//
// Ваш код, в таймере
//
Timer1.Interval:= RandomFrom(2000, 5000);
end;
Ответ отправил: CjJoker (статус: 2-ой класс)
Ответ отправлен: 17.06.2007, 09:35 Оценка за ответ: 5
Вопрос № 91.733
Здравствуйте Уважаемые эксперты!Вопрос у меня в следующем,у меня есть код сохранения StringGrid в Excel файл
***********************************************************
{ Without OLE }
procedure XlsWriteCellLabel(XlsStream: TStream; const ACol, ARow: Word;
const AValue: string);
var
L: Word;
const
{$J+}
CXlsLabel: array[0..5] of Word = ($204, 0, 0, 0, 0, 0);
{$J-}
begin
L := Length(AValue);
CXlsLabel[1] := 8 + L;
CXlsLabel[2] := ARow;
CXlsLabel[3] := ACol;
CXlsLabel[5] := L;
XlsStream.WriteBuffer(CXlsLabel, SizeOf(CXlsLabel));
XlsStream.WriteBuffer(Pointer(AValue)^, L);
end;
function SaveAsExcelFile(AGrid: TStringGrid; AFileName: string): Boolean;
const
{$J+} CXlsBof: array[0..5] of Word = ($809, 8, 00, $10, 0, 0); {$J-}
CXlsEof: array[0..1] of Word = ($0A, 00);
var
FStream: TFileStream;
I, J: Integer;
begin
Result := False;
FStream := TFileStream.Create(PChar(AFileName), fmCreate or fmOpenWrite);
try
CXlsBof[4] := 0;
FStream.WriteBuffer(CXlsBof, SizeOf(CXlsBof));
for i := 0 to AGrid.ColCount - 1 do
for j := 0 to AGrid.RowCount - 1 do
XlsWriteCellLabel(FStream, I, J, AGrid.cells[i, j]);
FStream.WriteBuffer(CXlsEof, SizeOf(CXlsEof));
Result := True;
finally
FStream.Free;
end;
end;
// Example:
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveAsExcelFile(StringGrid1, 'c:MyExcelFile.xls') then
ShowMessage('StringGrid saved!');
end;
***********************************************************
всё хорошо работает,но я хотел бы что бы таблица сохранялась бы в автоформате,а то мне приходится после сохранения файла выставлять в Excel автоформат и пересохранять файл,возможно ли это если да то как?
Отправлен: 17.06.2007, 11:53
Вопрос задал: GAZOT (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Кайгородов Сергей Александрович
Здравствуйте, GAZOT!
Думаю,если использовать шаблон Excel, то возможно.
Хотя, можно и при помощи кода отформатировать диапазон ячеек:
...
Cell1 := WorkBook.WorkSheets[1].Cells[1, 1]; // левая верхняя ячейка
Cell2 := WorkBook.WorkSheets[1].Cells[1, 1]; // правая нижняя
Range:= WorkBook.WorkSheets[1].Range[Cell1, Cell2]; // создаем объект Range
и далее форматирование диапазона
Range.Font.Bold:=1;
Range.Font.Italic:=0;
Range.Font.Size:=10;
Range.Font.Color:=clNavy;
WorkBook.WorkSheets[1].Columns.Item[i].Autofit; // а это - подгонка i-го столбца под ширину содержимого
Ответ отправил: Кайгородов Сергей Александрович (статус: 1-ый класс)
Ответ отправлен: 17.06.2007, 13:05 Оценка за ответ: 3 Комментарий оценки: меня интересует сохранение в Excel в автоформате а не форматирование диапазона ячеек