小弟正在开发一个VCL程序,为了美化界面去掉了边框,并用拦截消息的方法是窗口可以移动,但问题就来了,任何Timage无法响应Click事件,代码如下:unit Main;interfaceuses
Windows, Messages, System.SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, acPNG, ExtCtrls, StdCtrls, sSkinManager,
sButton, Vcl.Buttons, Vcl.ComCtrls, FileCtrl, sGauge;type
TFrmMain = class(TForm)
Image4: TImage;;
procedure FormMouceDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);//Enable move form procedure Image4Click(Sender: TObject);
private
procedure WMNCHITTEST(var M:TWMNCHITTEST); message WM_NCHITTEST;
public
{ Public declarations }
end;var
FrmMain: TFrmMain;implementation{$R *.dfm}
{$R PakWizard_addition.res}
var
step_n:integer; //Step Number
chk_input:integer;//0=Error,1=Writted
chk_output:integer;//0=Error.1=Writted
cancel_execute:integer;//0=Normal;1=Stop
//------[This part is used to enable move form]------------------------------
procedure TFrmMain.IniterTimer(Sender: TObject); //Draw Window
var
hr :thandle;
begin
hr:=createroundrectrgn(0,0,width,height,5,5);
setwindowrgn(handle,hr,true);
init;
Initer.Enabled:=False;
end;procedure TFrmMain.FormMouceDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
inherited;
ReleaseCapture;
SendMessage(self.Handle, WM_SYSCOMMAND,SC_MOVE+HTCAPTION, 0);
end;procedure TfrmMain.WMNCHITTEST(var M:TWMNCHITTEST);
begin
inherited;
if M.Result=HTCLIENT then //HTCLIENT??? HTCAPTION??
begin
M.Result:=HTCAPTION;
end;
end;procedure TFrmMain.Image4Click(Sender: TObject);
begin
ShowMessage('Test!');//这里没有任何响应
end;end.
Windows, Messages, System.SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, acPNG, ExtCtrls, StdCtrls, sSkinManager,
sButton, Vcl.Buttons, Vcl.ComCtrls, FileCtrl, sGauge;type
TFrmMain = class(TForm)
Image4: TImage;;
procedure FormMouceDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);//Enable move form procedure Image4Click(Sender: TObject);
private
procedure WMNCHITTEST(var M:TWMNCHITTEST); message WM_NCHITTEST;
public
{ Public declarations }
end;var
FrmMain: TFrmMain;implementation{$R *.dfm}
{$R PakWizard_addition.res}
var
step_n:integer; //Step Number
chk_input:integer;//0=Error,1=Writted
chk_output:integer;//0=Error.1=Writted
cancel_execute:integer;//0=Normal;1=Stop
//------[This part is used to enable move form]------------------------------
procedure TFrmMain.IniterTimer(Sender: TObject); //Draw Window
var
hr :thandle;
begin
hr:=createroundrectrgn(0,0,width,height,5,5);
setwindowrgn(handle,hr,true);
init;
Initer.Enabled:=False;
end;procedure TFrmMain.FormMouceDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
inherited;
ReleaseCapture;
SendMessage(self.Handle, WM_SYSCOMMAND,SC_MOVE+HTCAPTION, 0);
end;procedure TfrmMain.WMNCHITTEST(var M:TWMNCHITTEST);
begin
inherited;
if M.Result=HTCLIENT then //HTCLIENT??? HTCAPTION??
begin
M.Result:=HTCAPTION;
end;
end;procedure TFrmMain.Image4Click(Sender: TObject);
begin
ShowMessage('Test!');//这里没有任何响应
end;end.
procedure TBaseFrm.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
self.perform(WM_SYSCOMMAND, $F012, 0);
end;
procedure TBaseFrm.img_minClick(Sender: TObject);
begin
PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;
ReleaseCapture;
Perform(WM_syscommand, $F012, 0);就可以了!
self.perform(WM_SYSCOMMAND, $F012, 0);
这个是拖拽
PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
点击