Главная страница
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.043 c
1-1093862827
TEXHAPb
2004-08-30 14:47
2004.09.12
Как запретить редактировать текст ячейки в TStringGrid


3-1092639235
Руслан
2004-08-16 10:53
2004.09.12
ODA Error: пишет при создании dbf файла


3-1092806801
fedor
2004-08-18 09:26
2004.09.12
Как грамотно обновить таблицу, запрос...


1-1093722417
Сергей.
2004-08-28 23:46
2004.09.12
Узнать имя активного компонента


1-1093417806
Рамиль
2004-08-25 11:10
2004.09.12
Перехват максимизации окна