全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1607
推到 Plurk!
推到 Facebook!

請教關於 PostMessage 問題

缺席
blue
中階會員


發表:169
回覆:136
積分:81
註冊:2002-04-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2019-10-05 11:30:47 IP:125.227.xxx.xxx 未訂閱
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
中階會員


發表:169
回覆:136
積分:81
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2019-10-05 14:29:57 IP:125.227.xxx.xxx 未訂閱
已解,原因是
f := TfmLogin.Create(Owner);
f.Parent := Parent;
f.BorderStyle := bsNone;

f.Parent := Parent; --> 會造成 Handle 改變
謝謝!
系統時間:2024-04-29 19:14:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!