AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Abgeleitete TCustomCombobox Button ändern

Ein Thema von Getox · begonnen am 12. Mär 2019 · letzter Beitrag vom 12. Mär 2019
Antwort Antwort
Getox

Registriert seit: 28. Dez 2012
97 Beiträge
 
Delphi XE3 Professional
 
#1

Abgeleitete TCustomCombobox Button ändern

  Alt 12. Mär 2019, 08:53
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
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?

Geändert von Getox (12. Mär 2019 um 08:56 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
87 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Abgeleitete TCustomCombobox Button ändern

  Alt 12. Mär 2019, 12:32
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
XE3 ist zu lange her . Gab's da schon Support für Aero und Styles? In Rio hat eine Standard-Combobox mit BevelKind bkNone jedenfalls genau das Aussehen, das Du wohl haben willst (mit dem Windows Theme enabled), eine einfache Linie als Border und den dropdown button ohne eigenen Rahmen.
Peter Below
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
97 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Abgeleitete TCustomCombobox Button ändern

  Alt 12. Mär 2019, 13:39
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

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:
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;
Nach noch ein wenig Recherche bin ich nun auf folgende Lösung gekommen:
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;
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?

Geändert von Getox (12. Mär 2019 um 13:48 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf