Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 302
от 22.11.2005, 13:48

Администратор:Калашников О.А.
В рассылке:Подписчиков: 248, Экспертов: 47
В номере:Вопросов: 2, Ответов: 8


Вопрос № 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 TForm1.Timer1Timer(Sender: TObject);

begin

ProgressBar1.Position:= ProgressBar1.Position + 1;

end;



Интервал таймера поставить 10



Это простые примеры. Разобравшись можно посмотреть пример чтения файла с прогрессом



procedure TForm1.Button1Click(Sender: TObject);

const

// On Windows replace, myfile with a pathname such as c:autoexec.bat

FName = 'MyFile';

var

F: File;

MyData: array[1..2048] of byte;

BytesRead: LongInt;

begin

AssignFile(F, FName);

try

Reset(F);

ProgressBar1.Max := FileSize(F);

if (ProgressBar1.Max > 10) then

// amount to move when StepIt method called

ProgressBar1.Step := ProgressBar1.Max div 10

else



ProgressBar1.Step := ProgressBar1.Max;

while (ProgressBar1.Position < ProgressBar1.Max) do

begin

// read one Step size chunk of data to buffer

BlockRead(F, MyData, ProgressBar1.Step, BytesRead);

// move the ProgressBar Position using StepIt

ProgressBar1.StepIt; // move by Step amount

end;

finally;

CloseFile(F);

end;

end;



Пример взят из справки Delphi





unit MainFrm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ComCtrls, Gauges;

type
TMainForm = class(TForm)
prbCopy: TProgressBar;
btnCopy: TButton;
procedure btnCopyClick(Sender: TObject);
end;

var
MainForm: TMainForm;

implementation

{$R *.DFM}

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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Архив рассылки
Отписаться
Вспомнить пароль

В избранное