たびたびすみません。
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を表示させたく
ないのです。
DockManagerを差し替えてやればできるかな……と思ってサンプルを探してみたらここの過去ログに答えが。
https://www.petitmonte.com/bbs/answers?question_id=4048
マウスクリックを握りつぶすのはHitTestをoverrideするだけでいいんじゃないかと思ったけど
別口で直接InternalHitTestを呼んじゃっているので、やはりWindowProcを差し替えないとうまくいかないみたいですね。
tttさん、
そのままずばりできました。
ありがとうございました。
ツイート | ![]() |