Buttons ohne Rand möglich?
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich auf einem VCL-Formular einen
Delphi-Quellcode:
mit
TButton
Delphi-Quellcode:
platziere hat er einen unsichtbaren Rahmen von wohl einem Pixel (siehe Bild): Links ein Button mit
Top = 0
Delphi-Quellcode:
, rechts ein Button in einem Lila
Top = 0
Delphi-Quellcode:
das man nicht sehen sollte: Der Button hat
TPanel
Delphi-Quellcode:
.
Align = alClient
Mit anderen Komponenten wie einem Edit oder einer Combobox besteht das Problem nicht. Was kann man tun? Auf Windows 10 ebenso wie in einer Windows 7-VM. |
AW: Buttons ohne Rand möglich?
SetWindowRgn?
gruss |
AW: Buttons ohne Rand möglich?
So richtig?
Delphi-Quellcode:
Es hat leider keine Auswirkungen. Wenn ich die Region kleiner mache (oder z.B. zu einem Kreis) kommt raus was man erwarten würde. Mache ich es hingegen größer hat das keine sichtbaren Auswirkungen :(
procedure TForm10.Button2Click(Sender: TObject);
var newRegion: HRGN; buttonRect: TRect; begin // buttonRect := Button1.ClientRect; // Oder BoundsRect? buttonRect.Inflate(+1, +1); // Bei -1 kommt raus was man erwartet newRegion := CreateRectRgn( buttonRect.Left, buttonRect.Top, buttonRect.Right, buttonRect.Bottom ); {TODO -oGünther -cGeneral : HRGN später löschen?} Win32Check( SetWindowRgn(Button1.Handle, newRegion, True) <> 0 ); end; |
AW: Buttons ohne Rand möglich?
Also ich habe keinen Rahmen mehr unter Verwendung von Manifest und SetWindowRgn.
Beides sind Button. Ich vermute mal das bei dir die Flags für die Button verändert werden müssen. WS_CLIPSIBLINGS und (WS_CLIPCHILDREN nur Hauptanwendung TForm als Beispiel) andernfalls bleiben die Rahmen bestehen. Wobei zweites nicht zwingend nötig. EDIT: Bin mir jetzt nicht 100% sicher aber buttonRect scheint nicht das richtige zu sein um die Höhe\Weite des Control inklusive der Border zu erhalten. Versuch es mal mit GetSystemMetrics gruss |
AW: Buttons ohne Rand möglich?
Und da wir hier über was Aktuelleres (Seattle) reden, könnte man auch auf die Idee mit 'nem VCL-Style eines randlosen Buttons kommen. :stupid:
|
AW: Buttons ohne Rand möglich?
Zitat:
Wobei man aber berücksichtigen muss das die Styles auch entsprechende Ressourcen benötigen.. Die Styles halt. Ob sich das lohnt für einen Button? Wenn man sie ansonsten nicht benötigt. gruss |
AW: Buttons ohne Rand möglich?
Meines Wissens ist ein randloser Button einfach ein
Delphi-Quellcode:
mit
TSpeedButton
Delphi-Quellcode:
.
Flat := True
Sherlock |
AW: Buttons ohne Rand möglich?
Falls ich mich schlecht ausgedrückt habe: Ich meine keine gemalten Pixel-Ränder, sondern optische "Abstände": Auf dem Bild oben hat der Button
Delphi-Quellcode:
aber man sieht trotzdem noch das knallgelbe Formular zwischen der Titelleiste und dem Button. Bei Comboboxen, Edits usw. ist das nicht so.
Top = 0
|
AW: Buttons ohne Rand möglich?
Ich merke grade: Eine WinForms-Anwendung macht das genauso. Ich dachte ich müsste die VCL beschuldigen, aber das scheint dann wirklich so in den Windows Common Controls drin zu sein, oder?
Schrecklich :? |
AW: Buttons ohne Rand möglich?
Ich behaupte einfach mal das der Button Rahmen 2 Pixel und der Rahmen bsp. für ein Memo 1 Pixel beträgt.
Das kannst du aber über GetSystemMetrics heraus finden. Auf dem Anhang sehr gut zu sehen der Rahmen der um den Button gezogen wird. Im vergleich dazu das Memo.. Zum Abschluss noch ohne Visuelle Style. Nach dem vergleich must du davon ausgehen das dieses Problem durch die Style verursacht wird. Das erste Pixel wird durch die Style Transparent gezeichnet. Das meine Behauptung stimmt kannst du am letzten Bild sehen da habe ich den WS_BORDER Style zum Button addiert wie du siehst sitzt der Button exakt auf 0 was auch richtig ist. Ich denke ohne Ownerdraw wirst du das nicht ändern können. Oder aber zu jedem Button den Style WS_BORDER addieren was meiner Meinung nach bescheiden aussieht. Das letzte was mir noch einfällt wäre die Button aus den Themes auszuschließen..
Delphi-Quellcode:
SetWindowTheme(ButtonHandle, '' , '');
Ich muss das zum Beispiel bei meinen ToolTips machen damit ich diese andersfarbig auslegen kann. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 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