如何將視窗右上角的縮小以及放大的按鈕關閉? |
尚未結案
|
priest
一般會員 發表:8 回覆:1 積分:1 註冊:2002-12-16 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
cmf
尊榮會員 發表:84 回覆:918 積分:1032 註冊:2002-06-26 發送簡訊給我 |
|
Jeffrey
初階會員 發表:10 回覆:58 積分:38 註冊:2002-04-15 發送簡訊給我 |
|
banson1716
高階會員 發表:55 回覆:182 積分:167 註冊:2002-04-14 發送簡訊給我 |
自己體會調試如下範例
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls; type
TFrmMainForm = class(TForm)
Button1: TButton;
procedure FormPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
Pressed : Boolean;
FocusLost : Boolean;
Rec : TRect;
NovoMenuHandle : THandle;
PT1 : TPoint;
FHintshow : Boolean;
FHint : THintWindow;
FHintText : String;
FHintWidth : Integer;
{ Private declarations }
procedure WMNCPAINT (var msg: Tmessage); message WM_NCPAINT;
procedure WMNCMOUSEDOWN (var msg: Tmessage); message WM_NCLBUTTONDOWN;
procedure WNCLBUTTONDBLCLICK (var msg: Tmessage); message WM_NCLBUTTONDBLCLK;
procedure WMNCHITTEST (var msg: Tmessage); message WM_NCHITTEST;
procedure WMSYSCOMMAND (var msg: Tmessage); message WM_SYSCOMMAND;
public
{ Public declarations } end; var FrmMainForm: TFrmMainForm; implementation {$R *.DFM} { TForm1 } procedure TFrmMainForm.WMNCHITTEST(var msg: Tmessage);
var //按鈕訊息
Tmp : Boolean;
begin
if Pressed then
begin
Tmp:=FocusLost;
PT1.X := Msg.LParamLo - FrmMainForm.Left;
PT1.Y := Msg.LParamHi - FrmMainForm.Top ;
if PTInRect(Rec, PT1) then
FocusLost := False
else
FocusLost := True;
if FocusLost <> Tmp then
InvalidateRect(FrmMainForm.Handle, @Rec, True);
end;
inherited;
end; procedure TFrmMainForm.WMNCMOUSEDOWN(var msg: Tmessage);
begin
PT1.X := Msg.LParamLo - FrmMainForm.Left;
PT1.Y := Msg.LParamHi - FrmMainForm.Top ;
FHintShow := False;
if PTInRect(Rec, PT1) then
begin
Pressed := True;
FocusLost := False;
InvalidateRect(FrmMainForm.Handle, @Rec, True);
SetCapture(TWinControl(FrmMainForm).Handle);
end
else
begin
FrmMainForm.Paint;
inherited;//表格三鈕按下的
end;
end; procedure TFrmMainForm.WMNCPAINT(var msg: Tmessage);
begin //表格外邊
inherited;
end; procedure TFrmMainForm.WMSYSCOMMAND(var msg: Tmessage);
begin
inherited;
end; procedure TFrmMainForm.WNCLBUTTONDBLCLICK(var msg: Tmessage);
begin
inherited;
end; procedure TFrmMainForm.FormPaint(Sender: TObject);
var
Border3D_Y, Border_Thickness, Btn_Width,
Button_Width, Button_Height : Integer;
MyCanvas : TCanvas;
begin
MyCanvas := TCanvas.Create;
MyCanvas.Handle := GetWindowDC(FrmMainForm.Handle);
Border3D_Y := GetSystemMetrics(SM_CYEDGE);
Border_Thickness:= GetSystemMetrics(SM_CYSIZEFRAME);
Button_Width := GetSystemMetrics(SM_CXSIZE);
Button_Height := GetSystemMetrics(SM_CYSIZE);
Btn_Width := Border3D_Y Border_Thickness Button_Height - (2 * Border3D_Y) - 1;
Rec.Left := FrmMainForm.Width - (3 * Button_Width Btn_Width);
Rec.Right := FrmMainForm.Width - (3 * Button_Width 03);
Rec.Top := Border3D_Y Border_Thickness - 1;
Rec.Bottom := Rec.Top Button_Height - (2 * Border3D_Y);
MyCanvas.Free;
end; procedure TFrmMainForm.Button1Click(Sender: TObject);
begin
CLOSE;
end; end.
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
//要在MDI視窗上隱藏最大/最小按鈕,要用Windows API的SetWindowLong函數來改變視窗類型。
備註:要在單一視窗上隱藏最大/最小按鈕,也可以有相同效果!!
// 將以下程式碼加入到MDI視窗(TMDIForm)的OnCreate事件中: procedure TMDIForm.FormCreate(Sender: TObject);
var
l: DWORD;
begin
l := GetWindowLong(Self.Handle, GWL_STYLE);
l := l and not (WS_MINIMIZEBOX);
l := l and not (WS_MAXIMIZEBOX);
l := SetWindowLong(Self.Handle, GWL_STYLE, l);
end; 發表人 - flyup 於 2003/01/30 00:36:13
|
banson1716
高階會員 發表:55 回覆:182 積分:167 註冊:2002-04-14 發送簡訊給我 |
private
procedure CreateParams(var Params: TCreateParams); override;
{ Private declarations } procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.Style := Params.Style and not WS_OVERLAPPEDWINDOW or WS_BORDER //For a MDI child form, setting the BorderStyle to bsNone does not remove the title bar. This does it:
{ Inherited CreateParams( Params ) ;
Params.Style := Params.Style and (not WS_CAPTION) ;} end;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |