Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TComboBox: Farbe des Markierrahmens ändern (https://www.delphipraxis.net/168127-tcombobox-farbe-des-markierrahmens-aendern.html)

Helmi 6. Mai 2012 19:34

TComboBox: Farbe des Markierrahmens ändern
 
Hallo,

wie kann ich die Farbe des Markierrahmens einer ComboBox beim Fokus ändern?

Bernhard Geyer 6. Mai 2012 20:09

AW: TComboBox: Farbe des Markierrahmens ändern
 
Bei XE2 - Über ein angepasste Theme sollte das möglich sein.

Helmi 6. Mai 2012 20:15

AW: TComboBox: Farbe des Markierrahmens ändern
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1165103)
Bei XE2 - Über ein angepasste Theme sollte das möglich sein.

Ich vergaß zu erwähnen, dass ich keine Themes benutzen kann (wegen der Optik) und die ComboBox selbst zeichne.

Delphi-Quellcode:
procedure TComboBoxFeld.OnComboBoxDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  i_ItemTop: Integer;
  ComboBox : TLabeledComboBox;

begin
  //akt. ComboBox auf Variable laden
  ComboBox := Control as TLabeledComboBox;

  If odSelected in State then
    begin
      //Wenn der Eintrag markiert ist, dann Hintergrund blau und Schriftfarbe weiss
      ComboBox.Canvas.Brush.Color := clHighlight;
      ComboBox.Canvas.Font.Color := clHighlightText;
    end
  else
    begin
      //Hintergrund-Farbe und Font setzen
      ComboBox.Canvas.Brush.Color := ComboBox.Color;
      ComboBox.Canvas.Font.Assign(ComboBox.Font);
    end;

  //ComboBox-Rect füllen
  ComboBox.Canvas.FillRect(Rect);

  //Top der einzelnen Zeilen errechnen
  i_ItemTop := Rect.Top + ((Rect.Height - abs(ComboBox.Font.Height)) div 2) - 1;

  //Text ausgeben
  ComboBox.Canvas.TextOut(Rect.Left + 2, i_ItemTop, ComboBox.Items[Index]);
end;

Gollum 7. Mai 2012 10:13

AW: TComboBox: Farbe des Markierrahmens ändern
 
Hallo,

vielleicht mit der FrameRect-Methode des Canvas-Objekts.

Delphi-Quellcode:
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with TListBox(Control) do
  begin
    Canvas.TextRect(Rect, Rect.Left+1, Rect.Top, Items[Index]);
    if (odSelected in State) then
    begin
      Canvas.Pen.Color:=clRed;
      Canvas.FrameRect(Rect);
    end; // if
  end; // with
end;

Helmi 7. Mai 2012 15:53

AW: TComboBox: Farbe des Markierrahmens ändern
 
Zitat:

Zitat von Gollum (Beitrag 1165151)
vielleicht

leider nein!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz