| Цитата | Дак в том то и дело что не получается передать указатель на структуру
|
Да ну?
| Код | unit Unit19;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
const MY_MESS = WM_USER + 1; C_MSG_STATUS = 0;
type TMYMessageStruct = record MsgState: Integer; Cmd: Integer; DialogState: Integer; end; PMYMessageStruct = ^TMYMessageStruct;
type TForm19 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } procedure OnMyMessage(var Msg: TMessage); message MY_MESS; public { Public declarations } end;
type TMessageThread = class(TThread) private { Private declarations } FWndHandle: THandle; protected procedure Execute; override; constructor Create(WndHandle: THandle); end;
var Form19: TForm19;
implementation
{$R *.dfm}
constructor TMessageThread.Create(WndHandle: THandle); begin inherited Create; FWndHandle := WndHandle; end;
procedure TMessageThread.Execute; var MyMsgStruct: PMYMessageStruct; begin FreeOnTerminate := True;
New(MyMsgStruct); MyMsgStruct^.MsgState := C_MSG_STATUS; //те вывод сообщений в статус бар MyMsgStruct^.Cmd := 00005; MyMsgStruct^.DialogState := 0; //не используется при C_MSG_STATUS //ShowMessage(IntToStr( PMyMessageStruct(@MyMsgStruct)^.Cmd )); SendMessage(FWndHandle,MY_MESS,0,LPARAM(MyMsgStruct)); end;
procedure TForm19.FormCreate(Sender: TObject); begin TMessageThread.Create(Handle); end;
procedure TForm19.OnMyMessage(var Msg: TMessage); var P: PMyMessageStruct; begin P := PMYMessageStruct(msg.lParam); ShowMessage(IntToStr(P^.Cmd)); end;
end.
|
Добавлено через 3 минуты и 32 секунды
| Цитата | Ну это как бы само сабой подразумевается. Взрослому человеку не нужно постоянно напоминать что нужно мыть руки выйдя из туалета smile
|
New, PostMessage таит в себе теоретические проблемы освобождения памяти т.к. может быть 1) несколько обработчиков на сообщение 2) сообщение может не дойти (RecreateHandle или оно закрылось). В этом случае память будет потеряна - я хотел на всякий случай уберечь человека от такого |