こんばんは!
以下の簡単なサンプルプログラムを組んでみました。
これを実行すると、不思議な事にTPanelのべベル線が透明になってしまいます。
条件としては、FormのCreate時でパネルを生成、BevelKindをフラットにする。
かつ、パネルを重ね合わせた時だけこの現象が起きます。
パネルを重ね会わなければこの現象は起きません。
[開発環境1]
OS:Windows7
Delphi:Delphi XE8
[開発環境2]
OS:Windows7
Delphi:RAD Studio 10.1 Berlin Starter
[VCL]コード
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;
const
PANEL_NUM = 5;
type
TForm1 = class(TForm)
procedure FormCreate ( Sender : TObject );
procedure FormDestroy( Sender : TObject );
procedure WMNCHITTEST( var Msg : TWMNCHITTEST ); Message WM_NCHITTEST;
private
{ Private 宣言 }
PanelList : Array of TPanel;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate( Sender : TObject );
var
lc1 : Integer;
begin
// フォームの設定(設計時)
// Self.BorderStyle は bsNone;
// Self.Position は poScreenCenter;
SetLength( PanelList, PANEL_NUM );
for lc1 := Low( PanelList ) to High( PanelList ) do
begin
PanelList[ lc1 ] := TPanel.Create( Self );
PanelList[ lc1 ].Name := 'Panel' + lc1.ToString;
PanelList[ lc1 ].Parent := Self;
PanelList[ lc1 ].BevelInner := bvNone;
PanelList[ lc1 ].BevelKind := bkFlat;
PanelList[ lc1 ].BevelOuter := bvNone;
PanelList[ lc1 ].ShowCaption := FALSE;
PanelList[ lc1 ].Width := 51; // ←ワザとパネルが1ドット重なる様に+1
PanelList[ lc1 ].Height := 50;
PanelList[ lc1 ].Left := 50 + ( lc1 * 50 );
PanelList[ lc1 ].Top := 50;
PanelList[ lc1 ].Visible := TRUE;
end;
end;
procedure TForm1.FormDestroy( Sender : TObject );
var
lc1 : Integer;
begin
for lc1 := Low( PanelList ) to High( PanelList ) do
begin
PanelList[ lc1 ].DisposeOf;
end;
end;
procedure TForm1.WMNCHITTEST( var Msg : TWMNCHITTEST );
var
Pos :TPoint;
begin
GetCursorPos( Pos );
Pos := ScreenToClient( Pos );
if Pos.Y < 32 then
Msg.Result := HTCAPTION
else
Msg.Result := HTCLIENT;
end;
end.
フォームのBorderStyleがbsNoneなので、
WM_NCHITTESTでフォームの上32ドットでウインドウを動かせる様にしてあります。
なんで透明になっちゃうんだよ〜といいつつ悩んでしまいました。
解決できたのですが、どうして発生するのかは不明。
ご存知の方がいましたらお教え下さい(汗
[開発環境1] と [開発環境2] のどちらでも発生したので、これってWindowsの問題かな?
|