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

Вниз

Как из отдельного потока послать сообщение главной форме?   Найти похожие ветки 

 
Aleksandr.   (2004-08-27 18:44) [0]

Попытался через обычнй ПостМессаге хэндлу главного окна, и программа на них постоянно вываливается.


 
TUser ©   (2004-08-27 18:45) [1]

Послать сообщение хэндлу нельзя.
Ответить на такой вопрос без кода - тоже.


 
Aleksandr.   (2004-08-27 18:57) [2]

Это на приеме работает:

procedure TMainForm.WndProc(var Message: TMessage);
var
 s    : string;
 P    : PChar;
 i    : integer;
begin
 if (Message.Msg=um_UpdatorStart) then begin
   P:=(PChar(Message.LParam));
   s:=StrPas(P);
   StrDispose(P);
   i:=Message.WParam;
   UpdatorStart(s,i);
 end
 else
   inherited
end;


А это на посылке:

procedure TATIUpdator.DoOnStart(const Msg: string; const Cnt: Integer);
var
 P : PChar;
begin
 P:=StrNew(PChar(Msg));
 if FMsgHandle<>0 then
  PostMessage(FMsgHandle,UM_UpdatorStart,Cnt, Integer(P))
end;


 
clickmaker ©   (2004-08-27 19:00) [3]


> Aleksandr.   (27.08.04 18:44)

что значит "вываливается"? текст ошибки?


 
Aleksandr.   (2004-08-27 19:06) [4]

Никакого текста. Никакой обработки. Просто выпадает и все. А если из Делфи - то в окно CPU, и никакой трассировки не позволяет.
Да, код для UpdatorStart:

try
 if Visible then begin
   if NOT Assigned(FPB) then begin
     FPB:=TProgressBar.Create(nil);
     FPB.Parent:=StatusBar;
     FPB.Left:=StatusBar.Left+StatusBar.Panels[0].Width+1+StatusBar.Panels[1].Width+1+StatusBar.Panels[2].Width;
     FPB.Top:=1;
     FPB.Height:=StatusBar.Height-2;
     FPB.Smooth:=true;
     FPB.Cursor:=crSQLWait;
     StatusBar.Cursor:=crSQLWait;
     FPB.Step:=1;
     FPB.Visible:=true;
     FPB.DoubleBuffered:=true;
     FPB.Width:=StatusBar.Width-FPB.Left-3;
     FPB.Anchors:=[akLeft,akRight,akBottom];
     FPB.Position:=0;
     FPB.Perform($0409, 0, clFuchsia);
     FPB.Invalidate
   end;
   if Screen.Cursor<>crSQLWait then
     Screen.Cursor:=crSQLWait;
   if Msg<>"" then
     StatusBar.Panels[2].Text:=Msg;
   if Cnt>0 then
     FPB.Max:=Cnt;
   FPB.Position:=0;
   Application.ProcessMessages
 end
except
  on E:Exception do
    AddLog(E.Message)
end



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

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

Наверх




Память: 0.47 MB
Время: 0.046 c
1-1093429332
P@vel
2004-08-25 14:22
2004.09.12
Bufer


14-1093159148
HSD
2004-08-22 11:19
2004.09.12
эмуляция наличия тяжелых файлов


3-1092391743
Aleksandr.
2004-08-13 14:09
2004.09.12
Как обратиться к Default ADOConnection?


14-1093262735
SPeller
2004-08-23 16:05
2004.09.12
Сеть


1-1093370651
Schummi
2004-08-24 22:04
2004.09.12
Вопрос про package