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 [XP-Manifest] Rahmen eines Buttons (https://www.delphipraxis.net/142382-%5Bxp-manifest%5D-rahmen-eines-buttons.html)

Alaitoc 27. Okt 2009 08:38


[XP-Manifest] Rahmen eines Buttons
 
Morgen DP-Community :-D ,
ich hab meine eigene TreeviewCombobox - Komponente fast vollständig fertig!
Äußerlich wirkt sie auch zu 100% wie eine normale Combobox, zumindest
solange die XP-Theme deaktiviert ist. Wenn sie aktiviert ist hat jeder Button
so einen häßlichen Rahmen um sich (in der Farbe des Hintergrundes) und ich habe
keine Ahnung wie ich den entfernen kann :o

Vll. habt ihr ja eine Idee oder Alternative dazu :)

MfG Alaitoc

Sherlock 27. Okt 2009 08:42

Re: [XP-Manifest] Rahmen eines Buttons
 
Dazu müsste man eventuell wissen, wie Du denn Deine Komponente hergestellt hast.

Sherlock

Alaitoc 27. Okt 2009 08:54

Re: [XP-Manifest] Rahmen eines Buttons
 
Die Komponente besteht aus nem TPanel, wo ein TEdit und ein TSpeedbutton draufliegen.
Dann gibts natürlich noch die anderen Sachen für den Treeview, aber das sollte hier
ja dann nebensächlich sein.

Sherlock 27. Okt 2009 08:57

Re: [XP-Manifest] Rahmen eines Buttons
 
Liste der Anhänge anzeigen (Anzahl: 2)
Na, dann kommt der Rahmen also vom TSpeedButton. Muss grad mal sehen, wie der so "gethemed" reagiert, ich nutze den sonst gar nicht.

Edith findet, daß der Button ganz chic aussieht (das kleine Glyphlein hab ich einfach mal so reingetan).

Sherlock

Alaitoc 27. Okt 2009 09:15

Re: [XP-Manifest] Rahmen eines Buttons
 
Soweit ich das sehe reagiert der genau wie der TButton, habe zumindest
keinen Unterschied feststellen können.

Schlecht aussehen tut er soweit ja nicht, nur ist halt der weiße Rahmen störend...

Zur Zeit versuche ich es so:

Panel.BevelInner := bvNone;
Panel.BevelOuter := bvNone;
Panel.BorderStyle := bsSingle;
Panel.Ctl3D := False;

Und verstecke den Rahmen des Buttons mit Top - 1, Left + 1 und sowie
der entsprechenden Größe.
Wobei dann nun das Panel nen schwarzen Rand hat x.x

OldGrumpy 27. Okt 2009 10:38

Re: [XP-Manifest] Rahmen eines Buttons
 
Es gibt einen gravierenden Unterschied zwischen TButton und TSpeedButton: TSpeedButton hat kein Fensterhandle da es kein Windows-Control ist (siehe auch die unterschiedlichen Parentklassen von TSpeedButton und TButton). Das hat mir auch schon ein paar schlaflose Nächte bereitet und letzten Endes dazu geführt, mir selber ein paar Controls zu bauen :)

Klaus01 27. Okt 2009 10:46

Re: [XP-Manifest] Rahmen eines Buttons
 
Guten Morgen,

versuche mal folgendes:
z.B. beim TPanel

Delphi-Quellcode:
  ParentBackGround := true;
Grüße
Klaus

Alaitoc 27. Okt 2009 10:58

Re: [XP-Manifest] Rahmen eines Buttons
 
Liste der Anhänge anzeigen (Anzahl: 1)
ParentBackGround hat bei mir nur bewirkt, dass der Button zumindest keinen grauen
sondern nur einen weißen Rahmen hat.

Also hier mal ein Bild zur aktuellen Situation:

1. Aktuelles Design im XP-Style
2. Aktuelles Design ohne XP-Style
3. Gewünschtes Design im XP-Style (also so in etwa)

Edith hätte sonst noch anzubieten das der Rahmen richtig ist, aber der Button mit nem weißen Rahmen drum rum im Panel liegt. ^^

Alaitoc 27. Okt 2009 13:43

Re: [XP-Manifest] Rahmen eines Buttons
 
So ich hab mein Panel nun mit nem Canvas erweitert und versuche mal den Rahmen halt manuell zu zeichnen,
die Frage die sich mir dabei aber stellt...welche Farbe nutzt eine normale Combobox im XP-Style? :o

MarcoWarm 27. Okt 2009 13:51

Re: [XP-Manifest] Rahmen eines Buttons
 
Zitat:

Zitat von Alaitoc
...welche Farbe nutzt eine normale Combobox im XP-Style? :o

keine Farbe als solche. Der XP/Vista Stil wird mittels Themes gezeichnet
Delphi-Referenz durchsuchenTThemedComboBox
Damit kannst du auch den Button korrekt gethemed zeichnen.

Gruß
Marco

Alaitoc 27. Okt 2009 14:13

Re: [XP-Manifest] Rahmen eines Buttons
 
Äh hm naja im Endeffekt brauche ich ja nur die Rahmenfarbe der Combobox,
da ich ja nicht direkt ne Combobox habe sondern eher ein Panel wo nen
Button und nen Eingabefeld draufliegen...

Werd mir das aber mal anschauen mit den Themes, vll krieg ich die Informationen da raus :o

MarcoWarm 27. Okt 2009 14:31

Re: [XP-Manifest] Rahmen eines Buttons
 
Zitat:

Zitat von Alaitoc
Äh hm naja im Endeffekt brauche ich ja nur die Rahmenfarbe der Combobox

Es ist ja nicht eben nur EINE Farbe. Je nach Theme kann das auch ein Verlauf ... halbtransparent ... irgendwas sein

Gruß
Marco

Alaitoc 27. Okt 2009 14:40

Re: [XP-Manifest] Rahmen eines Buttons
 
Hmhm, wenn ich das richtig verstehe muss ich aber nu dann alle Controls selbst erstellen?
Also nen eigenen Combobox-Button mit den Themes z.b.?

MarcoWarm 27. Okt 2009 14:44

Re: [XP-Manifest] Rahmen eines Buttons
 
Also wenn es nicht ganz "original" aussehen muss, kannst du den Button auch so drin lassen, wie bisher und den Rahmen um das Control mittels dem teEditTextNormal Element zeichnen.

Gruß Marco

Alaitoc 27. Okt 2009 14:55

Re: [XP-Manifest] Rahmen eines Buttons
 
Klappt soweit wunderbar, zumindest mit dem Rahmen...jedoch habe ich nun das Problem, dass der Button
sich immer über den Rahmen legt...mal schauen was ich da mache ^_°

Btw sagt Edith schonmal vielen Danke :)

MarcoWarm 27. Okt 2009 15:02

Re: [XP-Manifest] Rahmen eines Buttons
 
Zitat:

Zitat von Alaitoc
Klappt soweit wunderbar, zumindest mit dem Rahmen...jedoch habe ich nun das Problem, dass der Button
sich immer über den Rahmen legt...mal schauen was ich da mache ^_°

Btw sagt Edith schonmal vielen Danke :)

den button einfach alignwithmargins setzen :-)

Off topic:
wer ist Edith???

Gruß
Marco

Alaitoc 27. Okt 2009 15:07

Re: [XP-Manifest] Rahmen eines Buttons
 
Hab mir grad überlegt den Button auch selbst zu zeichnen, da er sonst auch bei den unterschiedlichen Themes merkwürdig aussieht ^_^


Offtopic:

Edith = Edit

Also hatte den Beitrag editiert ;)

Alaitoc 27. Okt 2009 16:37

Re: [XP-Manifest] Rahmen eines Buttons
 
So habs jetzt einfach mal so gemacht:

Delphi-Quellcode:

{ TThemesSpeedButton }

//******************************************************************************
//* Paint
//******************************************************************************

procedure TThemesSpeedButton.Paint;
var
  coDetails: TThemedElementDetails;
  coThemeStyle: TThemedComboBox;
begin
  if ( ThemeServices.ThemesEnabled ) and not (csDesigning in ComponentState) then
  begin
    if Enabled then
    begin
      if (Down) or (FState = bsDown) then
      begin
        coThemeStyle := tcDropDownButtonPressed;
      end
      else
      begin
        if MouseInControl then
          coThemeStyle := tcDropDownButtonHot
        else
          coThemeStyle := tcDropDownButtonNormal;
      end;
    end
    else
    begin
      coThemeStyle := tcDropDownButtonDisabled;
    end;
    coDetails := ThemeServices.GetElementDetails(coThemeStyle);
    ThemeServices.DrawElement(Canvas.Handle, coDetails, ClientRect);
  end
  else
  begin
    inherited;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 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 by Thomas Breitkreuz