windows下消息机制

http://bbs.csdn.net/topics/310039952


unit CHILDWIN;


interface


uses Windows, Classes, Graphics, Forms, Controls, StdCtrls, Messages,SysUtils;


type
  TMDIChild = class(TForm)
    Memo1: TMemo;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Memo1Click(Sender: TObject);
  private
    procedure WMcopydata(var MSG: TMessage);message wm_copydata;
    { Private declarations }
  public
    { Public declarations }
  end;


implementation


uses MAIN;


{$R *.dfm}


procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;


procedure TMDIChild.Memo1Click(Sender: TObject);
var
  Data: COPYDATASTRUCT;
  MsgText: Pchar;
begin
  MsgText := Memo1.Lines.GetText;
  with Data do
  begin
    dwdata := 100;
    lpdata := msgtext;
    cbdata := Length(msgtext);
  end;
  sendmessage( MainForm.Handle,WM_COPYDATA, MainForm.Handle,Integer(@data));
end;
procedure TMDIChild.WMcopydata(var MSG: TMessage);
var
  data: COPYDATASTRUCT;
  s: string;
begin
  data := pcopydatastruct(MSG.LParam)^;
  with data do
  begin
    s := '数据类别代码:'+ IntToStr(dwdata) + #13 +
       '消息实际数据:' + pchar(lpData);
  end;
  Memo1.Lines.Add(s);
end;


end.



unit MAIN;


interface


uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
  StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
  ActnList, ToolWin, ImgList;


type
  TMainForm = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    FileNewItem: TMenuItem;
    FileOpenItem: TMenuItem;
    FileCloseItem: TMenuItem;
    Window1: TMenuItem;
    Help1: TMenuItem;
    N1: TMenuItem;
    FileExitItem: TMenuItem;
    WindowCascadeItem: TMenuItem;
    WindowTileItem: TMenuItem;
    WindowArrangeItem: TMenuItem;
    HelpAboutItem: TMenuItem;
    OpenDialog: TOpenDialog;
    FileSaveItem: TMenuItem;
    FileSaveAsItem: TMenuItem;
    Edit1: TMenuItem;
    CutItem: TMenuItem;
    CopyItem: TMenuItem;
    PasteItem: TMenuItem;
    WindowMinimizeItem: TMenuItem;
    StatusBar: TStatusBar;
    ActionList1: TActionList;
    EditCut1: TEditCut;
    EditCopy1: TEditCopy;
    EditPaste1: TEditPaste;
    FileNew1: TAction;
    FileSave1: TAction;
    FileExit1: TAction;
    FileOpen1: TAction;
    FileSaveAs1: TAction;
    WindowCascade1: TWindowCascade;
    WindowTileHorizontal1: TWindowTileHorizontal;
    WindowArrangeAll1: TWindowArrange;
    WindowMinimizeAll1: TWindowMinimizeAll;
    HelpAbout1: TAction;
    FileClose1: TWindowClose;
    WindowTileVertical1: TWindowTileVertical;
    WindowTileItem2: TMenuItem;
    ToolBar2: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton9: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton10: TToolButton;
    ToolButton11: TToolButton;
    ImageList1: TImageList;
    N1231: TMenuItem;
    procedure FileNew1Execute(Sender: TObject);
    procedure FileOpen1Execute(Sender: TObject);
    procedure HelpAbout1Execute(Sender: TObject);
    procedure FileExit1Execute(Sender: TObject);
    procedure N1231Click(Sender: TObject);
  private
    { Private declarations }
    procedure CreateMDIChild(const Name: string);
    procedure WMcopydata(var MSG: TMessage); message WM_copydata;
  public
    { Public declarations }
  end;


var
  MainForm: TMainForm;


implementation


{$R *.dfm}


uses CHILDWIN, about;


procedure TMainForm.CreateMDIChild(const Name: string);
var
  Child: TMDIChild;
  hld: THandle;
begin
  { create a new MDI child window }
  hld := Self.Handle;
  Child := TMDIChild.Create(Application);
  Child.Caption := Name;
  if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
end;


procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
  CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
end;


procedure TMainForm.FileOpen1Execute(Sender: TObject);
begin
  if OpenDialog.Execute then
    CreateMDIChild(OpenDialog.FileName);
end;


procedure TMainForm.HelpAbout1Execute(Sender: TObject);
begin
  AboutBox.ShowModal;
end;


procedure TMainForm.FileExit1Execute(Sender: TObject);
begin
  Close;
end;


procedure TMainForm.WMcopydata(var MSG: TMessage);
var
  data: COPYDATASTRUCT;
  s: string;
begin
  data := pcopydatastruct(MSG.LParam)^;
  with data do
  begin
    s := '数据类别代码:'+ IntToStr(dwdata) + #13 +
       '消息实际数据:' + pchar(lpData);
  end;
  ShowMessage(s);
end;


procedure TMainForm.N1231Click(Sender: TObject);
var
  data: COPYDATASTRUCT;
  str: PChar;
  i : Integer;
begin


  str := '裴晓斌给你发送了消息,你收到了么';
  data.dwData := 200;
  data.lpData := str;
  data.cbData := Length(str);
  for i:= 0 to MDIChildCount-1 do begin
    SendMessage(MDIChildren[i].Handle,WM_COPYDATA,MDIChildren[i].Handle,Integer(@data));
  end;
end;


end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值