名前 題名 ▼ Konnoyaさん > こんばんは! > 以下の簡単なサンプルプログラムを組んでみました。 > これを実行すると、不思議な事に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の問題かな? GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link