Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

вывод информации   Найти похожие ветки 

 
Drema   (2004-12-25 00:26) [0]

Возникла такая проблема:

В моей программе есть процедура, которая выполняется долго.
Я хочу перед началом выполнения вывести сообщение типа Please Wait...
И делаю это просто:

Procedure Button1click(...);
....
label1.caption="Please Wait...";
<действия>

....

Ну и в результате надпись "Please Wait..." появляется уже после нескольких
секунд томительного ожидания, во время которых выполнялись <действия>.

Как же заставить все это работать правильно?


 
aus   (2004-12-25 00:29) [1]

Procedure Button1click(...);
....
label1.caption="Please Wait...";
Application.ProcessMessages;
<действия>


 
Cosinus ©   (2004-12-25 00:55) [2]

<from DelphiWorld.narod.ru>
[>>>>>>>>>>]

Мне также понадобился логотип для одного из моих клиентов, поэтому я загрузил файл из публичной библиотеки и включил в свое приложение модуль, позволяющий выводить логотип при загрузке программы. В этом модуле было около 150 строк кода, но у меня свое понятие относительно количества необходимого для этого дела кода, поэтому я просто удалил лишнее, для которого просто не нашел применения.

После моего хирургического вмешательства осталось всего пять или шесть строк кода, вплетенных в скелет формы. После сравнения моего кода с демо-проектом, поставляемым с Delphi (MastApp), я понял, что мой код много проще.

Я не хочу обвинять автора в том, что он плохо сделал свою работу. Без его помощи этого кода просто бы не существовало. Я нахожу, что изучение чужого кода всегда существенно расширяет и дополняет багаж программиста.

Код производит впечатление, что создание окошка с логотипом в Delphi плевое дело. Ну за дело: сначала, с помощью редактора, создайте форму (лучшим решением будет создание нового проекта в отдельном каталоге) и установите лучшие, на ваш художественный взгляд, значения таких свойств, как позиция, размеры и границы. Затем создайте обработчик события OnDeactivate и добавьте единственную строчку кода, в которой мы освобождаем форму. И, последнее, добавьте секцию initialization с тремя строчками кода, которые создают, выводят и обновляют форму.

Для того, чтобы использовать новое окошко с логотипом, скопируйте получившийся .PAS-файл в каталог с проектом, в котором вы намереваетесь его использовать, и вставьте ссылку на модуль в самую верхнюю часть секции uses. НЕ добавляйте форму к проекту.

Ниже приведен пример кода (форма имеет имя SplashForm, модуль обозван как SPLASH). Мой код добавлен между закомментаренных блоков {>>вставить} и {<<конец вставки}, весь остальной код генерируется Delphi.

type
 TSplashForm = class(TForm)
   [...labels, bitmaps, и пр., добавляется редактором Delphi...]
   procedure FormDeactivate(Sender: TObject);
 end;

var
 SplashForm: TSplashForm;

implementation

{$R *.DFM}

{ Это шаманское место. Application.Run в нашем случае
вызывает программу деактивации.}

procedure TSplashForm.FormDeactivate(Sender: TObject);
begin
 {>>вставить}
 Free;
 {<<конец вставки}

end;

{>>вставить}

initialization
 begin
   SplashForm := TSplashForm.Create(nil);
   SplashForm.Show;

   { Я не уверен, но причина наличия здесь Update в том,
   что, как мне кажется, приложение пока не может работать
   c очередью своих сообщений}

   SplashForm.Update;
 end;
 {<<конец вставки}
end.



В головном модуле после строчки USES (.DPR-файл) просто добавьте "SPLASH," (не заключайте это в кавычки). Это все. Никакой головной боли с таймерами, никаких запусков отдельных приложений. Логотип быстро появляется и остается до тех пор, пока приложение не начнет свою работу.
[>>>>>>>>>>]

<PS Мне понравилось, как работает код... Но если кто-то из мастеров объяснит, почему так делать не следует или, как вариант, как сделать лучше, то я буду очень благодарен:)))>


 
Drema   (2004-12-25 01:05) [3]

СПАСИБО!! Ура! заработало!


 
Leonid Troyanovsky ©   (2004-12-25 16:03) [4]


> Cosinus ©   (25.12.04 00:55) [2]
> <PS Мне понравилось, как работает код... Но если кто-то
> из мастеров объяснит, почему так делать не следует или,
> как вариант, как сделать лучше, то я буду очень благодарен:)))>


Зависит от.
Самый простой вариант состоит из небольшой формы без бордюра,
fsStayOnTop, содержащей TAnimate(f.e.: clock.avi) Align := alClient, Active := True.

Эта форма удаляется из списка автоматически создаваемых,
а показывается кодом из слегка измененного .dpr


program ProjectX;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1},
 ..
 UnitX in "UnitX.pas" {SplashForm};

{$R *.res}

begin
 with TSplashForm.Create(nil) do
 try
   Show;
   Application.Initialize;
   Application.CreateForm(TForm1, Form1);
   ..
 finally
   Free;
 end;
 Application.Run;
end.


--
С уважением, LVT.



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
1-1104141631
Aleksandr.
2004-12-27 13:00
2005.01.16
Как у главного меню поменять цвет?


1-1103741143
Senjer
2004-12-22 21:45
2005.01.16
Forma


4-1101630782
Alexis
2004-11-28 11:33
2005.01.16
Найти принадлежащие процессу окна...


1-1102341741
MouseAlexander
2004-12-06 17:02
2005.01.16
Проблема с ловушками...


6-1098888843
boban
2004-10-27 18:54
2005.01.16
Приложение видит, юзер - нет. Как сделать ?