Главная страница
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.064 c
14-1093492515
Zloy
2004-08-26 07:55
2004.09.12
Какой язык подходит для создания собственной ERP-системы???!!!!!


4-1090927960
Sasha73
2004-07-27 15:32
2004.09.12
Как передать данные из одного роцесса в другой ?


4-1090400072
Le!
2004-07-21 12:54
2004.09.12
USB!


14-1092838656
Яшка
2004-08-18 18:17
2004.09.12
Мнение, как движущая сила дискуссий.


4-1088968054
Dio
2004-07-04 23:07
2004.09.12
Enable другого окна