請教關於 PostMessage 問題 |
缺席
|
blue
中階會員 ![]() ![]() ![]() 發表:170 回覆:136 積分:81 註冊:2002-04-15 發送簡訊給我 |
Hi, 各位先進大家好:
請教關於 PostMessage 問題: 我想將 一些子Form 在需要用到套進主 Form 中的 PageControl中 其中需要傳送訊息(接收自Com port的Bar code reader資料), 程式如附, 可是卻無法正常傳送(如果子Form是單獨產生可以傳), 不知是何原因? 謝謝! unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Constants, Vcl.ComCtrls, FireDAC.UI.Intf, FireDAC.VCLUI.Wait, FireDAC.Stan.Intf, FireDAC.Comp.UI; type TForm1 = class(TForm) btnSendMsg: TButton; PageControl1: TPageControl; TabSheet1: TTabSheet; tabWindow: TTabSheet; btnExecLogin: TButton; btnAlone: TButton; procedure btnSendMsgClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnExecLoginClick(Sender: TObject); procedure btnAloneClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses Globals, Helper, Login; procedure TForm1.btnSendMsgClick(Sender: TObject); var CurHandle: HWND; begin CurHandle := _CurHandle; if CurHandle <> 0 then begin System.Classes.TThread.CreateAnonymousThread( procedure begin PostMessage(CurHandle, WM_BARDATA, 0, LParam(PChar('00MED62'))); end).Start end; end; procedure TForm1.btnExecLoginClick(Sender: TObject); begin THelper.Login; end; procedure TForm1.FormCreate(Sender: TObject); begin THelper.SetParent(Self, tabWindow); end; end. unit Login; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Constants, Vcl.StdCtrls; type TLogin = class(TObject) public class procedure Execute(Owner: TComponent; Parent: TWinControl); end; TfmLogin = class(TForm) Label1: TLabel; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } procedure WMBarData(var msg: TMessage); message WM_BARDATA; end; var fmLogin: TfmLogin; implementation {$R *.dfm} uses Globals, Unit1; {==============================================================================} class procedure TLogin.Execute(Owner: TComponent; Parent: TWinControl); var f: TfmLogin; s: string; RegKey: String; begin f := TfmLogin.Create(Owner); f.Parent := Parent; f.BorderStyle := bsNone; f.Align := alClient; f.WindowState := wsMaximized; f.Show; end; procedure TfmLogin.FormCreate(Sender: TObject); begin _CurHandle := Self.Handle; end; procedure TfmLogin.WMBarData(var msg: TMessage); begin ShowMessage(PChar(msg.LParam)); Label1.Caption := PChar(msg.LParam); end; end. unit Helper; interface uses System.Classes, Vcl.Controls; type THelper = class(TObject) private public class procedure SetParent(Owner: TComponent; Parent: TWinControl); class procedure Login; end; implementation uses Login; var FParent : TWinControl = nil; FOwner : TComponent = nil; /////////////////////////////////// THelper //////////////////////////////////// class procedure THelper.SetParent(Owner: TComponent; Parent: TWinControl); begin FOwner := Owner; //Main Form FParent := Parent; //Main Form 中的 tabWindow end; {==============================================================================} // Unit Login class procedure THelper.Login; begin TLogin.Execute(FOwner, FParent); end; end. unit Globals; interface uses System.Classes, Winapi.Windows; var _CurHandle: HWND; // 依 _StationID 取自 Table Cabinet 相對應的 藥號,以逗號區隔 implementation end. unit Constants; interface uses Winapi.Messages; const WM_SHOWFORM = WM_USER 100; WM_LOGIN = WM_USER 200; WM_CHANGEPASSWORD = WM_USER 300; WM_CHECKSETTING = WM_USER 301; WM_SHOWMENU = WM_USER 400; WM_BARDATA = WM_USER 500; implementation end. |
blue
中階會員 ![]() ![]() ![]() 發表:170 回覆:136 積分:81 註冊:2002-04-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |