私はTGroupBoxのDelphiネイティブコントロールから継承し、そのペイントメソッドをオーバーライドして四角形を描きました。透明なグループボックス
procedure TclTransparentGroupBox.CreateParams(var params : TCreateParams);
begin
inherited;
Params.ExStyle := params.ExStyle or WS_EX_TRANSPARENT;
end;
Createパラメータをオーバーライドした後、Paintメソッドは次のようになります。
procedure TclTransparentGroupBox.Paint;
begin
// Draw the rounded rect to show the group box bounds
Canvas.Pen.Color := clWindowFrame;
Canvas.RoundRect(5, 15, ClientRect.Right - 5, ClientRect.Bottom - 5, 10, 10);
if Caption <> EmptyStr then
begin
Canvas.Brush.Style := bsClear;
Canvas.TextOut(10, 0, Caption);
end;
end;
私が直面している大きな問題は、透明なグループボックスの上にラベルがほとんどないことです。フォームを開くと、ラベルは見た目がよく見えますが、テキストが変更されると、ラベルのいくつかの境界矩形が表示されます。これは透明な箱の上に奇妙に見えています。
フォームのサイズを変更しても、グループボックス自体が消えます。フォーカスを別のアプリケーションに変更してアプリケーションを戻すと、グループボックスが描画されます。
私は描画に関して何か不足していますか?私は世話をする必要があるすべてのWindowsメッセージ???コントロールを透明にするには、事前 ラーフル
あなたは 'WM_ERASEBKGND'メッセージを扱っていますか? – RRUZ
「透明」という言葉があいまいであると感じたのは私だけですか? 「契約」として、透明コントロールのルールは何ですか? –
@Warren、あなたは「透明」という言葉にはいかない?完全に可視の親の背景(ウィンドウの下にあるすべてのウィンドウがこのスタイルのコントロールによって覆い隠されていない場所)を完全に半透明にします。 – TLama