Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c