Вопрос № 29660: Ув Эксперты
у меня к вам вопрос как в прогрессбаре задать обработку процесса
с/у ера...Вопрос № 29675: Здраствуйте эксперты!!!;
Вопросы:
1. Как создать массив обьектов?!(одного типа конечно);
2. Как создать обьект в процессе выполнения программы;
3. Что такое AOwner:Tcomponent;
4. Есть компонент DBGrid подключенный к Базе. как обра...
Вопрос № 29.660
Ув Эксперты
у меня к вам вопрос как в прогрессбаре задать обработку процесса
с/у ера
Отправлен: 16.11.2005, 13:45
Вопрос задал: ERA (статус: Посетитель)
Всего ответов: 6 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: sir henry
Здравствуйте, ERA!
Забудте об этом. Прогрессбар служит ИСКЛЮЧИТЕЛЬНО для индикации текущего значения от TProgressBar.Min до TProgressBar.Max. Процесс - это не следствие работы прогрессбара, Вы все перепутали. Это прогрессбар жестко подчинен какому-либо процессу.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 16.11.2005, 14:01
Отвечает: Ataman N. N.
Здравствуйте, ERA!
Зачем? Ведь можно обрабатывать какое-нибудь условие при установке Position.
Ответ отправил: Ataman N. N. (статус: 2-ой класс)
Отправлен: 16.11.2005, 15:14
Отвечает: Ерёмин Андрей
Здравствуйте, ERA!
Сам процесс помещаете в цикл и в цикле прибавляете к ProgressBar.Position сдвиг, равный шагу:
ProgressBar1.Position := ProgressBar1.Position + 1;
--------- Где найти кpяк под ковpик для однокнопочного мыша?
Ответ отправил: Ерёмин Андрей (статус: Специалист)
Отправлен: 16.11.2005, 15:21
Отвечает: Ujin Antikvar
Здравствуйте, ERA!
Но ведь прогрессбар не упраляет ни какими процесами, а на оборот он зависит от процесса выполняемого программой. Его действие заключается только в отсчете от Min к Max в один шаг. Можно конечно задать что при какой-то Position произойдет то или иное действие, но не более.
А просчет происходит так:
ProgressBar1.Position:=ProgressBar1.Position+1;
Добовляем эту запись либо в цикл или с помощью таймера.
С Уважением,
Ujin Antikvar!!!
--------- "Будущее принадлежит тем, кто верен своей мечте" - Элеонора Рузвельт
Ответ отправил: Ujin Antikvar (статус: 3-ий класс)
Отправлен: 16.11.2005, 15:45
Отвечает: Schmak
Здравствуйте, ERA!
В каком смысле задать обработку процесса?
Наоборот Прогрессбар отображает состояние процесса, просто устанавливайте в progressbar.position нужно значение.
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: 9-ый класс)
Отправлен: 16.11.2005, 16:29
Отвечает: REFERI
Здравствуйте, ERA!
1. Нужно задать шкалу – максимальное значение и минимальное. Напрмер ProgressBar1.Min:=0 и ProgressBar1.Max:=10.
2. Теперь определимся с шагом. Пусть шаг будет равен одному ProgressBar1.Step := 1 , т.е. будет 10 индикатор будет изменяться 10 раз, пока не дойдет до конца.
3. Теперь после выполнения ваших действий в процедуре когда надо сделать шаг пишем ProgressBar1.StepIt . Иногда бывает что прогресс не достигает 100% из-за того что плохо построена процедура, и ProgressBar так и висит, например, на 70 %, тогда в конце можно просто написать ProgressBar1.Position:= ProgressBar1.Max и ProgressBar полностью заполнится.
4. Можно еще работать со св-вом Position – позиция индикатора, например 5 – 50% 2 – 20% . Так еще проще. Тогда не надо никуда шагать, а просто пишем ProgressBar1.Position:= ProgressBar1.Position + i (к-то число).
procedure TMainForm.btnCopyClick(Sender: TObject);
var
SrcFile, DestFile: file;
BytesRead, BytesWritten, TotalRead: Integer;
Buffer: array[1..500] of byte;
FSize: Integer;
begin
{ Assign both the source and destination files to their
respective file variables }
AssignFile(SrcFile, 'srcfile.tst');
AssignFile(DestFile, 'destfile.tst');
// Open the source file for read access.
Reset(SrcFile, 1);
try
// Open destination file for write access.
Rewrite(DestFile, 1);
try
{ Encapsulate this into a try..except so that we can erase the file if
an error occurs. }
try
// Initialize total bytes read to zero.
TotalRead := 0;
// Obtain the filesize of the source file
FSize := FileSize(SrcFile);
{ Read SizeOf(Buffer) bytes from the source file
and add these bytes to the destination file. Repeat this
process until all bytes have been read from the source
file. A progress bar is provided to show the progress of the
copy operation. }
repeat
BlockRead(SrcFile, Buffer, SizeOf(Buffer), BytesRead);
if BytesRead > 0 then
begin
BlockWrite(DestFile, Buffer, BytesRead, BytesWritten);
if BytesRead <> BytesWritten then
raise Exception.Create('Error copying file')
else
begin
TotalRead := TotalRead + BytesRead;
prbCopy.Position := Trunc(TotalRead / Fsize) * 100;
prbCopy.Update;
end;
end
until BytesRead = 0;
except
{ On an exception, erase the destination file as it may be
corrupt. Then re-raise the exception. }
Erase(DestFile);
raise;
end;
finally
CloseFile(DestFile); // Close the destination file.
end;
finally
CloseFile(SrcFile); // Close the source file.
end;
end;
end.
Взято с http://delphiworld.narod.ru/
--------- Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: 2-ой класс)
Отправлен: 17.11.2005, 20:29
Вопрос № 29.675
Здраствуйте эксперты!!!;
Вопросы:
1. Как создать массив обьектов?!(одного типа конечно);
2. Как создать обьект в процессе выполнения программы;
3. Что такое AOwner:Tcomponent;
4. Есть компонент DBGrid подключенный к Базе. как обратиться к информации из ячейки,столбца (например Column[2]), строки на которой был сделан клик;
5. Подскажите графический модуль с его описанием который может передвигать обьект по форме,например TShape.
На все вопросы пожалуйста очень подробные ответы, Не ограничивающиеся данными примерами.С обьяснением! Заранее огромнейшее спасибо!!!
Отправлен: 16.11.2005, 18:15
Вопрос задал: chikanok (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: sir henry
Здравствуйте, chikanok!
1. Сам массив создавать не надо, он объявляется в разделе переменных. Создаются объекты в массиве.
Допустим нужен массив объектов TButton:
var
btn: array[0..9] of TButton; {Это объявление массива из десяти кнопок}
i: integer; {Это служебная переменная, которая будет задействована в цикле при обращении к объекту в массиве}
Begin
{Это цикл, внутри которого создаются компоненты и заполняются его свойства}
For i:=0 To 9 Do
Begin
btn[i]:=TButton.Create(Form1); {Создание компонента на форме}
{Далее, в этом цикле, Вы присваиваете значения тем свойствам, которые нужно изменить, например размеры}
btn[i].Height:=50;
btn[i].Width:=50;
btn[i].Left:=100;
btn[i].Top:=100;
btn[i].Caption:='Кнопка '+IntToStr(i);
End
End;
2. Смотрите пункт 1.
3. Хозяин объекта, т.е. тот, на ком этот объект размещается. Например Form1, это значит объект будет расположен на форме Form1.
4. У DBGrid есть свойство SelectedField, которое указывает на поле таблицы, которое соответствует колонке таблицы и возвращает данные из текущей строки. Например, если надо получить строковое выражение:
Button1.Caption:=DBGrid.SelectedField.AsString;
5. Именно такого как Вы задали нет.
---------------------
Если нужно еще более подробные ответы, то задайте уточняющий вопрос.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 16.11.2005, 18:56
Отвечает: Ataman N. N.
Здравствуйте, chikanok!
Даю ответ на первые два вопроса. Код с коментариями, думаю все будет понятно.
Приложение:
Ответ отправил: Ataman N. N. (статус: 2-ой класс)
Отправлен: 17.11.2005, 14:54