Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-93767
Anna
2004-02-04 12:58
2004.02.29
Проблема выбора


8-94039
Rasil
2003-10-30 02:15
2004.02.29
Как узнать расширение у видео файла.


1-94008
Настенька
2004-02-17 08:45
2004.02.29
последний символ в label


1-93981
Aliev
2004-02-17 12:27
2004.02.29
Как делать что все формы были на таскбаре?


6-94056
mix.4ever
2003-12-05 12:31
2004.02.29
Удаленный десктоп





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский