Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ComboBox mit anderem Button-Layout (https://www.delphipraxis.net/147791-combobox-mit-anderem-button-layout.html)

delphitrixer 16. Feb 2010 14:23


ComboBox mit anderem Button-Layout
 
Hallo,

ich suche nach eine Lösung, wie man der Standard-Combobox einen anderen DropDown-Button verpassen kann. Das Grundverhalten sollte also zu 100% von der ComboBox abgeleitet sein. Lediglich das Layout und Design des Buttons möchte ich verändern.

Warum möchte ich das tun: Ich verwende im selben Projekt bereits eine eigene, abgeleitete Komponente in Form eines DropDownGrids die aus einem TComboBtn, TEdit und TStringGrid besteht. Das Problem ist nun aber, dass unter Win Vista/7 der Button der TComboBtn nicht gleich aussieht bzw. dargestellt wird, wie der Button der TComboBox-Komponente. Nun sieht das Layout auf dem Form einfach mies aus, wenn eine CombBox mal so und mal anders aussieht.

Hat jemand einen Ansatz, wie man das am besten bewerkstelligt oder hat eventuell jemand sogar ein Beispiel aufgrund einer ähnlichen Anforderung?

Danke Euch für mögliche Tips.

Gruss
Delphitrixer

delphitrixer 18. Feb 2010 08:13

Re: ComboBox mit anderem Button-Layout
 
Hat niemand einen Tipp oder Ansatz für mich?

DeddyH 18. Feb 2010 08:23

Re: ComboBox mit anderem Button-Layout
 
Vielleicht kannst Du bei MaxComponents spicken. Schau Dir dazu mal das TmxFlatPack an.

Alaitoc 18. Feb 2010 08:28

Re: ComboBox mit anderem Button-Layout
 
Also vll kann dir ThemeServices helfen, ich habe das genutzt um einen SpeedButton nach meinen Wünschen anzupassen.

Delphi-Quellcode:

procedure TThemesDropDownSpeedBtn.Paint;
var
  oThemeDetails: TThemedElementDetails;
  oThemeStyle: TThemedComboBox;
begin
  if ( ThemeServices.ThemesEnabled ) and not (csDesigning in ComponentState) then
  begin
    if Enabled then
    begin
      if (Down) or (FState = bsDown) then
      begin
        oThemeStyle := tcDropDownButtonPressed;
      end
      else
      begin
        if MouseInControl then
          coThemeStyle := tcDropDownButtonHot
        else
          oThemeStyle := tcDropDownButtonNormal;
      end;
    end
    else
    begin
      oThemeStyle := tcDropDownButtonDisabled;
    end;
    oThemeDetails := ThemeServices.GetElementDetails(oThemeStyle);
    ThemeServices.DrawElement(Canvas.Handle, oThemeDetails, ClientRect);
  end
  else
  begin
    inherited;
  end;
end;
Über die Delphi-Reference solltest du über ThemeServices alles wichtige herausfinden können. :)

MfG Alaitoc

delphitrixer 18. Feb 2010 13:39

Re: ComboBox mit anderem Button-Layout
 
Danke Euch für die ersten Tipps. Leider hat weder die MaxComponents noch der Lösungsansatz mit den Themes weitergeholfen.

Die TmXFlatPack leiten zwar eine ComboBox ab und Painten diese neu. Allerdings auf die unschöne Art. Dort wird nur ein Button auf den darunterliegenden, aus der Standard-ComboBox vorhandenen DropDown-Button, darübergesetzt. Das sieht bei einem MouseOver dann etwas hässlich aus. Es ist wohl nicht so einfach, die ComBox in einem anderen Layout darzustellen.

Den Lösungsansatz von Alaitoc mit den Themes habe ich ebenfalls mal versucht auf eine ComboBox anzuwenden. Klappt aber irgendwie überhaupt nicht.

Ist es denn überhaupt möglich, das Design einer CombBox zu ändern, ohne dass man alles gleich selbst zeichnen muss?

Hat das schon einmal jemand versucht?

SirThornberry 18. Feb 2010 13:43

Re: ComboBox mit anderem Button-Layout
 
Zitat:

Zitat von delphitrixer
Hat das schon einmal jemand versucht?

Ja, und mein Ergebnis für mich war, das es das beste war eine völlig eigene Combobox zu erstellen (abgeleitet von TCustomControl) die zu 100% meinen Wünschen entspricht. Einfach nur das Aussehen der vorhandenen Combobox zu ändern war schlichtweg nicht so möglich wie ich es wollte.

delphitrixer 18. Feb 2010 13:51

Re: ComboBox mit anderem Button-Layout
 
Das habe ich leider vermutet. Zeit um eine eigene ComboBox zu bauen habe ich leider nicht. Das wäre mir jetzt zu viel Arbeit.

Ich könnte mein Problem natürlich von der anderen Seite her "aufrollen" und das Layout des TComboBtn an den DropDown-Button einer Standardcombox im Win7-Style anpassen.

Wie stehen die Chancen dafür und hat sich damit (oder ähnlich) schon mal jemand versucht?

Bernhard Geyer 18. Feb 2010 13:54

Re: ComboBox mit anderem Button-Layout
 
Evtl. bietet ja das ElPack genau das was du willst.
Kann mit eigenen (Windows-Unabhängigen) Theming betrieben werden.

Alaitoc 19. Feb 2010 07:27

Re: ComboBox mit anderem Button-Layout
 
Naja mein Beispiel war ja auch vom SpeedButton, du müsstest dir dann das notwendige
schon aus der Delphi-Reference für die Combobox raussuchen.
Im Endeffekt überrschreibe ich ja auch nur die Paint-Methode, hole mir das für das Windows-Theme passende "Bild" des Buttons
und zeichne ihn. Wenn die Themes deaktiviert sind benutze ich halt die normale Paint-Methode.

MfG Alaitoc


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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