无边框窗体如何拖动改变大小和显示外边框

问答知识库用户 |浏览283次
收藏|2014/05/17 22:00
如题

满意回答

2014/05/17 22:00

拦截WM_NCHITTEST消息;
参考代码:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;
type
  TPanel = Class(ExtCtrls.TPanel)
    procedure WMNchist(var Msg: TMessage); message WM_NCHITTEST;
  end;
  TForm1 = class(TForm)
    pnl1: TPanel;
  private { Private declarations }
  protected
    procedure WMNchist(var Msg: TMessage); message WM_NCHITTEST;
  public { Public declarations } end;
var
  Form1: TForm1;
implementation

procedure TForm1.WMNchist(var Msg: TMessage);
var
  MouseX, MouseY: integer;
begin
  MouseX := LOWORD(Msg.LParam);
  MouseY := HIWORD(Msg.LParam);
  if (MouseX >= Left + Width - 2) and (MouseY >= Top + Height - 2) then
    Msg.Result := HTBOTTOMRIGHT
  else if (MouseX <= Left + 2) and (MouseY <= Top + 3) then
    Msg.Result := HTTOPLEFT
  else if (MouseX <= Left + 2) and (MouseY <= Top + Height - 2) then
    Msg.Result := HTBOTTOMLEFT
  else if MouseX >= Left + Width - 2 then
    Msg.Result := HTRIGHT
  else if MouseY >= Top + Height - 2 then
    Msg.Result := HTBOTTOM
  else if MouseX <= Left + 2 then
    Msg.Result := HTLEFT
  else if MouseY <= Top + 2 then
    Msg.Result := HTTOP
  else
    Inherited;
end; { TPanel }
procedure TPanel.WMNchist(var Msg: TMessage);
begin
  Inherited;
  Msg.Result := HTTRANSPARENT;
end;
end.

热心网友

其他回答(0)
0人关注该问题
待解决问题



+1
 加载中...