サーバレス練習帳

着眼大局着手小局

【delphi】タイトルバーを非表示にしても、フォームをドラッグで移動できるようにする

ちなみに、同時にフォームを半透明にする処理も加えている。

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Menus
  ;

type
  TMainForm = class(TForm)
    PopupMenu1: TPopupMenu;
    TrayIcon1: TTrayIcon;
    MainPanel: TPanel;
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
    //AMovePanel : TplMovePanel;
  public
    { Public 宣言 }
  protected
    procedure WmNCHitTest(var msg: TWmNCHitTest); message WM_NCHITTEST;
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
var
  dwExStyle : Cardinal;
begin
  //半透明処理
  dwExStyle := GetWindowLong( Handle, GWL_EXSTYLE);
  dwExStyle := dwExStyle or WS_EX_LAYERED;
  SetWindowLong( Handle, GWL_EXSTYLE, dwExStyle);
  SetLayeredWindowAttributes(Handle,0,200,LWA_ALPHA);
  //タイトルバー非表示
  Borderstyle :=bsnone;
end;

procedure TMainForm.WmNCHitTest(var msg: TWmNCHitTest);
begin
  //継承元のメッセージの実行
  inherited;
  //これ以降のコードを実行しなければ通常のTPanelと同じ動作となる
  if not (csDesigning in ComponentState) then begin
    //クライアント領域がクリックされた場合
    if Msg.Result=htClient then begin
      //フォーカス移動(文字入力が可能な状態に)してキャプションバーだと思わせる
      SetFocus;
      msg.Result := HTCAPTION;
    end;
  end;
end;
end.

kwikwi.cocolog-nifty.com

blog.fenrir-inc.com