如何使对话框关闭按钮失效(150分)(150分)

  • 主题发起人 主题发起人 NeutronDelphi
  • 开始时间 开始时间
N

NeutronDelphi

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使对话框关闭按钮失效?
小弟使尽了一切办法
利用SPY++(.net版本),SetWindowLong,GetWindowLong,
如果能达到效果小弟还有厚礼相送!
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var
WProc: Pointer = nil;

function NewWndProc(Handle: hWnd; Msg, WParam, lParam: Longint): Longint; stdcall;
begin
if Msg = WM_CLOSE then
begin
ShowMessage('I GET IT');
Msg := 0;
end;
Result := CallWindowProc(WProc, Handle, Msg, WParam, lParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
WProc := Pointer(SetWindowLong(Self.Handle,GWL_WNDPROC,Integer(@NewWndProc)));
end;

end.

这个是你想要的吗?
 
拦截WM_SYSCOMMAND消息中的lParam= SC_CLOSE消息就可以实现啊.
 
不是指点击无效,而是要无法点击
 
用这个,保证行!

procedure TxxDialog.FormCreate(Sender: TObject);
begin
EnableMenuItem(GetSystemMenu(Handle, FALSE), SC_CLOSE,MF_BYCOMMAND or MF_GRAYED);
end;
 
将BorderStyle设为bsNone不行吗?
 
不明白意思。
 
这样写:
type
TForm1 = class(TForm)

private
{ Private declarations }
protected
procedure CreateParams(var Params: TCreateParams);override;


public
{ Public declarations }end;

var
Form1: TForm1;
hThread : THandle;

implementation

{$R *.dfm}

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
Inherited CreateParams(Params);
Params.WindowClass.style := CS_NOCLOSE or CS_DBLCLKS;

end;
 
谢谢啦其实,我早已解决!
方法和Adnil兄原理一样修改,系统菜单来实现
ModifyMenu()也是一样大部分分就给他啦!
我想zqw0117兄的方法可能行,也不能不感谢他的好意!
 
后退
顶部