![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поток и переменная [D6, Win2k]
denis24 © (2004-12-29 12:57:00)В главной форме создаю поток и форму заставку.Вызываю поток,показываю заставку.По окончанию потока -закрываю форму заставку.Как из цикла в потоке передавать значение переменной-счетчика на форму-заставку,чтобы показывался процесс выполнения этого цикла?
DiamondShark (2004-12-31 15:07:00) [1]С наступающим!
;)
denis24 (2004-12-31 14:56:00) [2]Все разобрался....
Новый год блин...
DiamondShark (2004-12-31 14:53:00) [3]
> блин но я же эту форму создал перед потоком
> TfrmSplash.Create(nil)
А результат куда дел?
denis24 (2004-12-31 14:30:00) [4]спасибо
блин но я же эту форму создал перед потоком
TfrmSplash.Create(nil)
Digitman (2004-12-31 13:31:00) [5]
> Если писать Handle -то access violation
тогда - с Новым Годом !
желаю чтобу в НГ объект frmSplash существовал.
denis24 (2004-12-31 13:22:00) [6]Если писать Handle -то access violation......
Digitman (2004-12-31 13:14:00) [7]
> Пишет что нет свойства windowhandle
SendMessage(frmSplash. Handle, CM_PROGRESS, counter, 0);
denis24 (2004-12-31 13:01:00) [8]Wparam-помогло!
Когда с потока пишу
SendMessage(frmSplash.WindowHandle, CM_PROGRESS, counter, 0);
Пишет что нет свойства windowhandle
Если писать просто frmsplash.handle -'Access violation...'
Как быть с handlom..
Помогите неразумному...
Digitman (2004-12-31 12:42:00) [9]procedure Tfrmsplash.MsgProgress; //!!
begin
.. чего-то там ...
end;
begin...end (2004-12-31 12:25:00) [10]> [10] Anatoly Podgoretsky © (31.12.04 12:23)
В 17-ой? Или в 1-ой? :)
Anatoly Podgoretsky (2004-12-31 12:23:00) [11]Ошибка в другой строке.
begin...end (2004-12-31 12:20:00) [12]> [8] denis24 (31.12.04 12:16)
> wParam
Message.wParam
denis24 (2004-12-31 12:16:00) [13]Разобрался
Теперь еще одно.Что то не то с wparam
procedure Tfrmsplash.MsgProgress(var Message: TMessage);
begin
label1.caption:=inttostr(wParam);
end;
Пишет '('excected but ';' found
denis24 (2004-12-29 18:30:00) [14]const
CM_PROGRESS = WM_USER + 5000;
type
TfrmSplash = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure MsgProgress(var Message: TMessage); message CM_PROGRESS;
.
.
.
procedure Tfrmsplash.MsgProgress(var Message: TMessage); message CM_PROGRESS;
begin
label1.caption:= inttostr(wParam);
end;
Erik1 (2004-12-29 16:26:00) [15]message CM_PROGRESS; нужно только в декларации.
Digitman (2004-12-29 16:21:00) [16]
> denis24 (29.12.04 15:56) [4]
а ты в какую секцию декларации класса влупил эту строчку ?
допустимо было либо в private, либо в protected, либо в public ..
denis24 (2004-12-29 15:56:00) [17]Простите за ламерство...
Пишет
Uknown directive 'message'
в
procedure Tfrmsplash.MsgProgress(var Message: TMessage); message CM_PROGRESS;
begin
...
end;
Что юзать нужно?
Digitman (2004-12-29 14:58:00) [18]
> AlterEgo of WondeRu © (29.12.04 14:37) [2]
можно и PostMessage() ... можно вообще дохрена чего ..
но видимые результаты в конкретной задаче могут сильно отличаться
SendMessage синхронен по определению
PostMessage асинхронен
выводы должен делать тот кто принимает решение о применении того или иного способа нотификации
AlterEgo of WondeRu (2004-12-29 14:37:00) [19]Digitman © (29.12.04 13:18) [1]
SendMessage(Zastavka.WindowHandle, CM_PROGRESS, i, 0);
а может PostMessage? или я не прав? просто в SendMessage бужет ждать завершения MsgProgress, а PostMessage не будет!
Digitman (2004-12-29 13:18:00) [20]например, так :
const
CM_PROGRESS = WM_USER + 5000;
TZastavka = class(TForm)
..
procedure MsgProgress(var Message: TMessage); message CM_PROGRESS;
..
end;
..
var
Zastavka: TZastavka;
..
procedure TZastavka.MsgProgress(var Message: TMessage); message CM_PROGRESS;
begin
ProgressBar.Position := wParam;
end;
..
procedure TMyThread.Execute;
var
i: Integer;
begin
..
SendMessage(Zastavka.WindowHandle, CM_PROGRESS, i, 0);
..
end;