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

Вниз

Please wait на время выполнения цикла   Найти похожие ветки 

 
Алексей   (2004-02-17 09:15) [0]

На время выполнения цикла необходимо вывести сообщение что-то типа "Please wait...", которое по завершении цикла закрывается с возможностью прервать цикл. т.е. наподобии окон открываемых в Explorer при копировании-удалении файлов.


 
Внук ©   (2004-02-17 09:24) [1]

Цикл выносится в отдельный поток. Смотри TThread


 
Алексей   (2004-02-17 09:27) [2]

>Внук
Про поток мне всё ясно, задача именно вывести сообщение в основном потоке, в то время как цикл выполняется во вторичном


 
Aleksey ©   (2004-02-17 09:27) [3]

Label1.Caption:="Please wait..."
.......
цикл :)
.......
Label1.Caption:="цикл завершен"


 
alex_*** ©   (2004-02-17 09:29) [4]

Прям уж так необходимы потоки?
Показать немодальное окно с кнопочкой break, по которой будет выставляться флаг, а в цикле через какое-то кол-во итераций делать ProcessMessages и проверять флаг.


 
Алексей   (2004-02-17 09:32) [5]

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


 
alex_*** ©   (2004-02-17 09:36) [6]

что за окно ты хочешь вывести? Стандартные окна типа ShowMessage модальные. А в чем проблемы вывести своё окно?


 
Внук ©   (2004-02-17 09:40) [7]

>>Aleksey © (17.02.04 09:27) [3]
А в чем, собственно, проблема?

Label1.Caption:="Please wait..."
.......
Запуск потока с циклом

В основном потоке цикл
пока не нажмется кнопка отменить (ProcessMessages)
или пока поток не заверштся Sleep(немного)
.......
Label1.Caption:="цикл завершен"

Вообще решений может быть несколько...


 
alex_*** ©   (2004-02-17 09:44) [8]


но не создавать же для этого форму с кнопочкой.

сделай форму с лабелом и кнопкой в рантайм, если не хочешь накидать в дизайнере ))


 
Алексей   (2004-02-17 09:51) [9]

Мне все-таки интересно можно ли не создавая новый обект TForm вывести сообщение в новом окне, а затем его закрыть по окончании цикла не нажимая никаких кнопок. WinAPI??


 
Aleksey ©   (2004-02-17 10:06) [10]

>не создавая новый обект TForm вывести сообщение в новом окне

???

>т.е. наподобии окон открываемых в Explorer

А Explorer эти окна не создает что ли?


 
alex_*** ©   (2004-02-17 10:07) [11]

Что-то я не пойму какая принципиальная разница? Используя Tform.Create неявно вызовется CreateWindowEx WinAPI. Хочешь в лоб вызывай, но зачем?
зы. Если нужного стандартного окна нет, то его надо создать самому. Чудес не бывает.


 
alex_*** ©   (2004-02-17 10:09) [12]

Попробуй вызвать CreateMessageDialog и показать по Show


 
Алексей   (2004-02-17 10:16) [13]

> alex_*** 12
Попробуй вызвать CreateMessageDialog и показать по Show

Уже ближе, а как его закрыть из другого потока?


 
alex_*** ©   (2004-02-17 10:19) [14]

а зачем из другого потока? извести вызывающую форму что поток завершился и она его закроет


 
Алексей   (2004-02-17 10:34) [15]

alex_*** Вы очень конструктивно подсказываете, но я новичок в программировании помогите с кодом, я имею ввиду этот фрагмент:

--> "извести вызывающую форму что поток завершился и она его закроет"


 
alex_*** ©   (2004-02-17 10:39) [16]

Как вариант при открытии потока передавай хендл формы и при зваершении пости WM_USER а на форме лови его. Или через synchronize вызывай метод формы который прикроет окно.


 
Verg ©   (2004-02-17 10:56) [17]

А что - без потоков никак?
Ну например:

unit BackUp;

interface

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

type
// Форма удалена из списка автосоздаваемых
TBackUpForm = class(TForm)
ProgressBar1: TProgressBar;
private
{ Private declarations }
WindowList : Pointer;
ActiveWindow : THandle;
public
{ Public declarations }
procedure Run(FileList : TStringList);
end;

var
BackUpForm: TBackUpForm;

procedure BeginBackup;

implementation

{$R *.DFM}
procedure TBackUpForm.Run(FileList : TStringList);
begin
ReleaseCapture;
ActiveWindow:=GetActiveWindow;
WindowList:=DisableTaskWindows(Handle);
try
Show;
for // длинный цикл// do
begin
// Че-то тут делаем
// В ProgreessBar показываем
Application.ProcessMessages;
end;
finally
EnableTaskWindows(WindowList);
SetActiveWindow(ActiveWindow);
Hide;
end;
end;

procedure BeginBackup;
begin
BackUpForm:=TBackUpForm.Create(Application);
try
BackUpForm.Run(FileList);
finally
BackUpForm.Free;
end;
end;


 
Внук ©   (2004-02-17 11:53) [18]

>>Verg © (17.02.04 10:56) [17]
Можно и левой пяткой за правым ухом почесать :)


 
Verg ©   (2004-02-17 12:02) [19]


> Внук © (17.02.04 11:53) [18]
> >>Verg © (17.02.04 10:56) [17]
> Можно и левой пяткой за правым ухом почесать :)


Да. Также можно и из пушки по воробъям стрелять.


 
Внук ©   (2004-02-17 12:12) [20]

Да нет никакой пушки. Хотелось показать, как нужно писать, чтобы программа не выглядела произведением недоучившегося студента. Впрочем, наверно, это уже идеологический спор :)


 
Fay ©   (2004-02-17 13:10) [21]

>> Хотелось показать, как нужно писать,
И где?


 
Внук ©   (2004-02-17 13:13) [22]

>>Fay © (17.02.04 13:10) [21]
А что, нужен исходный код? Тогда деньги вперед


 
Fay ©   (2004-02-17 13:48) [23]

Я, вроде, не писал, что хочу заплатить деньги за то, в чём совершенно не нуждаюсь. 8)


 
alex_*** ©   (2004-02-17 15:08) [24]

Fay © (17.02.04 13:10) [21]
Ну и нечего просить что не нужно.


 
Fay ©   (2004-02-17 15:17) [25]

2 alex_*** © (17.02.04 15:08) [24]
Я ничего не просил (как успели заметить умеющие читать по-русски). Как и Вашего мудрого совета.



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

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

Наверх




Память: 0.52 MB
Время: 0.028 c
1-93884
tyoma
2004-02-14 20:09
2004.02.29
передача параметров


14-94116
race1
2004-02-09 15:42
2004.02.29
cd cover


1-93988
Настенька
2004-02-17 08:43
2004.02.29
edit


14-94149
Lancelot
2004-02-05 14:39
2004.02.29
Игрушка TRON 2.0


3-93766
suric
2004-02-04 12:10
2004.02.29
TDBGRID. Как форматровать представление данных