![]() |
Abgeleitete TCustomCombobox Button ändern
Hallo mal wieder,
ich hänge mal wieder an einer Sache. Ich habe eine eigene Combobox von TCustomCombobox abgeleitet. Diese hatte erst diesen 3D-artigen Rahmen, auch wenn ich ctl3d ausschalte. Dafür ist der Dropdown-Button so wie ich das möchte... einfach nur ein Pfeil auf weißem Hintergrund. Jetzt wollte ich aber einen Rahmen um die Combobox haben, der nur eine einfache graue Line ist. Dafür habe ich jetzt im Constructor Bevelkind auf bkFlat gestellt und BevelInner auf bvNone. BevelOuter habe ich auf bvRaised gelassen, da sonst der Rahmen ganz verschwindet. Nun sieht der Rahmen so aus wie ich das will. ABER mit dem umstellen auf bevelKind = bkFlat hat sich nicht nur der Rahmen in die gewünschte Linie verändert. Der Dropdown-Button ist nun auch noch grau hinterlegt und hat einen eigenen Rahmen. Das möchte ich aber nicht. Ich möchte das da einfach nur das Dreieckzeichen rechts in der Combobox auf weißem Grund ohne irgendeine Abtrennung ist... so wie es halt war, bevor ich BevelKind umgestellt habe. Wie kann ich das bewerkstelligen? Vielen Dank :) |
AW: Abgeleitete TCustomCombobox Button ändern
Zitat:
|
AW: Abgeleitete TCustomCombobox Button ändern
Nach etwas längerer Recherche bin ich jetzt auf eine funktionierende Lösung gekommen. Da ich noch nie wirklich mit Canvas gearbeitet habe, war es schon etwas rumgefummel... aber meine Erfahrungen sind wieder angewachsen :D
Ich habe einfach die WMPaint Methode überschrieben. Erst habe ich es mit Rectangle(ClientRect) versucht, aber da wurde auch der Dropdown-Pfeil überbügelt. Mit folgender Lösung ist es genau wie ich will:
Code:
Nach noch ein wenig Recherche bin ich nun auf folgende Lösung gekommen:
procedure TAutoComboBox.WMPaint(var Message: TWMPaint);
var CC: TControlCanvas; begin inherited; CC := TControlCanvas.Create; try CC.Control := Self; CC.Pen.Color := clGray; CC.Pen.Width := 1; CC.MoveTo(ClientRect.Left, ClientRect.Top); CC.LineTo(ClientRect.Right - 1, ClientRect.Top); CC.LineTo(ClientRect.Right-1, ClientRect.Bottom -1); CC.LineTo(ClientRect.Left, ClientRect.Bottom-1); CC.LineTo(ClientRect.Left, ClientRect.Top); finally CC.Free; end; end;
Code:
procedure TAutoComboBox.WMPaint(var Message: TWMPaint);
var CC: TControlCanvas; begin inherited; CC := TControlCanvas.Create; try CC.Control := Self; CC.Brush.Color := clGray; CC.FrameRect(ClientRect); finally CC.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz