AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls ComboBox: Optik von csOwnerDrawFixed ähnlich wie csDropDownList
Thema durchsuchen
Ansicht
Themen-Optionen

ComboBox: Optik von csOwnerDrawFixed ähnlich wie csDropDownList

Offene Frage von "Keks"
Ein Thema von Schorschi5566 · begonnen am 5. Feb 2011 · letzter Beitrag vom 25. Feb 2014
Antwort Antwort
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

ComboBox: Optik von csOwnerDrawFixed ähnlich wie csDropDownList

  Alt 5. Feb 2011, 10:28
Hallo DP,

der Titel sagt es eigentlich, was ich möchte.

Mit eingeschalteten Laufzeit-Themes sehen ComboBoxen mit csDropDownList recht nett aus (Hintergrund mit Verlauf).

Zwischen diesen Boxen habe ich aber eine, bei der csOwnerDrawFixed als Style benötigt wird.

Gibt es 'ne Möglichkeit, den Hintergrund der Combobox genauso "malen" zu lassen als wäre sie eine csDropDownList?

Danke im Voraus.


Grüße,
Uwe
Angehängte Grafiken
Dateityp: jpg screenshot.jpg (6,6 KB, 37x aufgerufen)
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks

Geändert von Schorschi5566 ( 5. Feb 2011 um 11:01 Uhr)
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: ComboBox: Optik von csOwnerDrawFixed ähnlich wie csDropDownList

  Alt 5. Feb 2011, 16:41
Jetzt isses schon etwas besser aber ich bekomme das entsprechende TRect nicht völlig über die Komponente.

Hier ist mal ein bissel Code. Vielleicht fällt ja jemandem ein, wie man das hinkriegen könnte...

Delphi-Quellcode:
procedure TCheckComboBox.DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  sOut : String;
  Details: TThemedElementDetails;
  ARect : TRect;
begin
  SetLength(Selected, TComboBox(Control).Items.Count);
  with TComboBox(Self).Canvas do
  begin
    FillRect(rect);

    ARect.Left := Rect.Left + 1;
    ARect.Right := Rect.Left + 13;
    ARect.Bottom := Rect.Bottom;
    ARect.Top := Rect.Top;

    if not (odComboBoxEdit in State) then
    begin
      if not (odSelected in State) and (Selected[Index]) then
        DrawFrameControl(Handle, ARect, DFC_BUTTON,
          DFCS_BUTTONCHECK or DFCS_CHECKED or DFCS_FLAT)
      else if (odFocused in State) and (Selected[Index]) then
        DrawFrameControl(Handle, ARect, DFC_BUTTON,
          DFCS_BUTTONCHECK or DFCS_CHECKED or DFCS_FLAT)
      else if (Selected[Index]) then
        DrawFrameControl(Handle, ARect, DFC_BUTTON,
          DFCS_BUTTONCHECK or DFCS_CHECKED or DFCS_FLAT)
      else if not (Selected[Index]) then
        DrawFrameControl(Handle, ARect, DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_FLAT);

      TextOut(ARect.Left + 15, ARect.Top, TComboBox(Control).Items[Index]);
    end

// um den folgenden Part geht es...


    else // Text bei geschlossener ComboBox ohne Checkmarks
    begin
      sOut := '';
      for i := 0 to Items.Count - 1 do
      begin
        if Selected[i] then
          sOut := sOut + ItemsShort[i] + Separator;
      end;
      sOut := StrTrimRight(sOut, Char(Separator));
      ARect := Self.ClientRect;
      ARect.Top := ARect.Top - 1;
      ARect.Bottom := ARect.Bottom + 1;
      ARect.Left := ARect.Left - 1;
      ARect.Right := ARect.Right;
      Details := ThemeServices.GetElementDetails(tbPushButtonNormal);
      ARect := ThemeServices.ContentRect(Handle, Details, ARect);
      ThemeServices.DrawEdge(Handle, Details, ARect, EDGE_RAISED, BF_RECT);
      ThemeServices.DrawElement(Handle, Details, ARect);
      ARect.Left := ARect.Left + 4;
      ARect.Top := ARect.Top + 2;
      ThemeServices.DrawText(Handle, Details, sOut, ARect, BF_FLAT, BF_FLAT);
    end;
  end;
end;
Habe schon Bevels und dergleichen deaktiviert aber ich komme nicht in die linke obere Ecke...(siehe Screenshot)


Grüße,
Uwe
Miniaturansicht angehängter Grafiken
screenshot2.jpg  
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#3

AW: ComboBox: Optik von csOwnerDrawFixed ähnlich wie csDropDownList

  Alt 21. Feb 2014, 15:27
Ich habe die gleiche Frage. Hast Du damals eine Lösung gefunden?
Oder weiß sonst noch jemand Rat?
Letztlich will ich nur die ausgeklappten Zeilen etwas umgestalten, nicht aber das Aussehen der auf der Form platzierten Komponente verändern.
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#4

AW: ComboBox: Optik von csOwnerDrawFixed ähnlich wie csDropDownList

  Alt 25. Feb 2014, 12:24
Kann wirklich keiner helfen?
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:42 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