با سلام
می خواستم بدونم چه جوری میشه یک فرم داشت که دکمه Minimize و Maximize داشته باشه ولی Close رو نداشته باشه. با تغییر خاصیت borderIcons هم به نتیجه نرسیدم چون وقتی biSystemmenu رو False می کنم هر سه دکمه حذف می شود
با سلام
می خواستم بدونم چه جوری میشه یک فرم داشت که دکمه Minimize و Maximize داشته باشه ولی Close رو نداشته باشه. با تغییر خاصیت borderIcons هم به نتیجه نرسیدم چون وقتی biSystemmenu رو False می کنم هر سه دکمه حذف می شود
با کد زیر مینوانی که نوار بالای صفحه را از بین ببری و با یک PANEL و چند sPEEDbTN خودت آنرا طراحی کنی
public
procedure CreateParams(var Params: TCreateParams);override;
{ Public declarations }
end;
var
Frm_DafKol: TFrm_DafKol;
Count : LongInt;
implementation
{$R *.DFM}
procedure TFrm_DafKol.CreateParams(var Params: TCreateParams);
begin
inherited ;
Params.Style := WS_POPUP or WS_BORDER;
end;
سلام
از کد زیر برای کاری که خواستی استفاده کن
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
flag : uint;
appsysmenu : thandle;
begin
appsysmenu := getsystemmenu(handle, false);
flag :=mf_grayed; // set flage to mf_enabled to re-enable it
enablemenuitem(appsysmenu, sc_close,mf_bycommand or flag);
end;
end.
با سلام
با استفاده از میسیج هم میتونی در حالیکه دکمه closeهنوز enable این کار رو بکنی و حتی با زدن اون دکمه پیام بدی. میسیج مورد نظر که باید هندل کنی فکر کنم WM_CHiTest یا یه چیزی شبیه به این که اولین مسیج فرم که میتونی تو یونیت فرم اون رو پیدا کنی بعد به ازای Result های مختلف از جمله زدن دکمه close برای فرمت برنامه بویسی.
با وجود دکمههای Minimize و Maximize دکمه Close رو نمیشه برداشت ولی اون رو میشه غیر فعال کرد.
برای این منظور باید متد CreateParams فرم رو بصورت زیر بارگذاری کنی:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WindowClass.style := Params.WindowClass.style or CS_NOCLOSE;
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var
hwndHandle : THANDLE;
hMenuHandle : HMENU;
begin
hwndHandle := FindWindow(nil, 'Untitled - Notepad');
if (hwndHandle <> 0) then begin
hMenuHandle := GetSystemMenu(hwndHandle, FALSE);
if (hMenuHandle <> 0) then
DeleteMenu(hMenuHandle, SC_CLOSE, MF_BYCOMMAND);
end;
end;