ドッキング時のX(閉じる)を消すには


ahsan  2008-10-16 01:40:54  No: 32226

たびたびすみません。
PanelにFormがドッキングされている状態で、
Panelの上部にForm着脱用のバー表示以外に
X(閉じる)が、表示されています。
これを表示させない方法はどうすればよいのでしょうか?
現状の具体的なサンプルプログラムは、
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation
uses
  unit2;

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  Form2.Show;
  Form2.ManualDock(Panel1,nil,alNone);
end;

end.

unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caNone;
end;

end.
です。
unit1のPanel1のDockSite=True
unit2のForm2のDragKind=dkDock,DragMode=dmAutomatic
unit2のForm2のBorderIcons=[],BorderStyle=bsToolWindow
です。
unit2のButton1,2は貼り付けただけで、なにもしません。
unit2のTForm2.FormCloseで、Action:=caNoneしているので、
Panel1のX(閉じる)をクリックしても閉じないのですが、
そもそも閉じたくないので、このPanel1のXを表示させたく
ないのです。


ttt  2008-10-17 05:41:44  No: 32227

DockManagerを差し替えてやればできるかな……と思ってサンプルを探してみたらここの過去ログに答えが。
https://www.petitmonte.com/bbs/answers?question_id=4048

マウスクリックを握りつぶすのはHitTestをoverrideするだけでいいんじゃないかと思ったけど
別口で直接InternalHitTestを呼んじゃっているので、やはりWindowProcを差し替えないとうまくいかないみたいですね。


ahsan  2008-10-17 17:26:41  No: 32228

tttさん、
そのままずばりできました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加