Messages (Delphi)
Contents
Description
This is an example demonstrating the usage of the SendGetIntMessage, SendStructMessage, SendGetStructMessage, and SendTextMessage message functions. This example uses four buttons and six text edit boxes as follows:
- Button1 SendGetIntMessage
- Button2 SendStructMessage
- Button3 SendGetStructMessage
- Button4 SendTextMessage
- IntEdit for int inputs
- StructEdit1 & StructEdit2 for struct inputs (ints)
- GetStructEdit1 & GetStructEdit2 for struct inputs (ints)
- TextEdit for text input
Code
const
  WM_INTMSG = WM_USER + 100;
  WM_STRUCTMSG = WM_USER + 101;
  WM_GETSTRUCTMSG = WM_USER + 102;
  WM_TEXTMSG = WM_USER + 103;
type
  TMyIntMessage =  record
    Msg: Cardinal;
    MsgFiller: TDWordFiller; 
    WParam: ^Integer;
    LParam: ^Integer;
    Result: LRESULT;
  end;
 
  TMyTextMessage =  record
    Msg: Cardinal;
    MsgFiller: TDWordFiller; 
    WParam: Integer;
    LParam: String;
    Result: LRESULT;
  end;
 
  MStruct = packed record
    m_a : Integer;
    m_b : Integer;
  end;
 
  TMyStruct = record
    Msg : Cardinal;
    MsgFiller: TDWordFiller;
    WParam : Integer;
    LParam : ^MStruct;
    Result : LRESULT;
  end;
  TForm4 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    IntEdit: TEdit;
    StructEdit1: TEdit;
    GetStructEdit1: TEdit;
    TextEdit: TEdit;
    StructEdit2: TEdit;
    GetStructEdit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure UserIntHandler(var msg: TMyIntMessage); message WM_INTMSG;
    procedure UserStructHandler(var msg: TMyStruct); message WM_STRUCTMSG;
    procedure UserGetStructHandler(var msg: TMyStruct); message WM_GETSTRUCTMSG;
    procedure UserTextHandler(var msg: TMyTextMessage); message WM_TEXTMSG;
  end;
var
  Form4: TForm4;
implementation
{$R *.dfm}
{ TForm4 }
procedure TForm4.Button1Click(Sender: TObject);
var
  wparam : Integer;
  lparam, lbase : Integer;
begin
  wparam := 0;
  lparam := StrToIntDef(IntEdit.Text,0);
  lbase := lparam;
  SendGetIntMessage(Handle, WM_INTMSG, wparam, lparam);
  if lbase <> lparam then
  begin
    MessageDlg('Value modified by handler function: ' + IntToStr(lparam), mtInformation, [mbOK], 0);
    IntEdit.Text := IntToStr(lparam);
  end;
end;
procedure TForm4.Button2Click(Sender: TObject);
var
  wparam : Integer;
  lparam : MStruct;
begin
  wparam := 0;
  lparam.m_a := StrToIntDef(StructEdit1.Text,0);
  lparam.m_b := StrToIntDef(StructEdit2.Text,0);
  SendStructMessage(Handle, WM_STRUCTMSG, wparam, lparam);
end;
procedure TForm4.Button3Click(Sender: TObject);
var
  wparam : Integer;
  lparam, lbase : MStruct;
begin
  wparam := 0;
  lparam.m_a := StrToIntDef(GetStructEdit1.Text,0);
  lparam.m_b := StrToIntDef(GetStructEdit2.Text,0);
  lbase := lparam;
  SendGetStructMessage(Handle, WM_GETSTRUCTMSG, wparam, lparam);
  if lbase.m_a <> lparam.m_a then
  begin
    MessageDlg('Struct modified by handler function: ' +
                IntToStr(lparam.m_a) + ' ' + IntToStr(lparam.m_b),
                mtInformation, [mbOK], 0);
    GetStructEdit1.Text := IntToStr(lparam.m_a);
    GetStructEdit2.Text := IntToStr(lparam.m_b);
  end;
end;
procedure TForm4.Button4Click(Sender: TObject);
var
  wparam : Integer;
  lparam : UnicodeString;
begin
  wparam := 0;
  lparam := TextEdit.Text;
  SendTextMessage(Handle, WM_TEXTMSG, wparam, lparam);
end;
procedure TForm4.UserGetStructHandler(var msg: TMyStruct);
begin
  MessageDlg('Struct msg received: ' + IntToStr(msg.LParam^.m_a) +
             ' '  + IntToStr(msg.LParam^.m_b), mtInformation, [mbOK], 0);
  msg.LParam^.m_a := msg.LParam^.m_a + 50;
  msg.LParam^.m_b := msg.LParam^.m_b + 50;
end;
procedure TForm4.UserIntHandler(var msg: TMyIntMessage);
begin
  MessageDlg('Int msg received: ' + IntToStr(msg.LParam^),
              mtInformation, [mbOK], 0);
  msg.LParam^ := msg.LParam^ + 50;
end;
procedure TForm4.UserStructHandler(var msg: TMyStruct);
begin
  MessageDlg('Struct msg received: ' + IntToStr(msg.LParam^.m_a) +
             ' '  + IntToStr(msg.LParam^.m_b), mtInformation, [mbOK], 0);
end;
procedure TForm4.UserTextHandler(var msg: TMyTextMessage);
begin
  MessageDlg('Text msg received: ' + msg.LParam, mtInformation, [mbOK], 0);
end;
Uses
- Winapi.Messages.SendGetIntMessage ( fr | de | ja )
- Winapi.Messages.SendStructMessage ( fr | de | ja )
- Winapi.Messages.SendGetStructMessage ( fr | de | ja )
- Winapi.Messages.SendTextMessage ( fr | de | ja )