Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Buttons ohne Rand möglich? (https://www.delphipraxis.net/191662-buttons-ohne-rand-moeglich.html)

Der schöne Günther 7. Feb 2017 18:18


Buttons ohne Rand möglich?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich auf einem VCL-Formular einen
Delphi-Quellcode:
TButton
mit
Delphi-Quellcode:
Top = 0
platziere hat er einen unsichtbaren Rahmen von wohl einem Pixel (siehe Bild): Links ein Button mit
Delphi-Quellcode:
Top = 0
, rechts ein Button in einem Lila
Delphi-Quellcode:
TPanel
das man nicht sehen sollte: Der Button hat
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.

EWeiss 7. Feb 2017 18:21

AW: Buttons ohne Rand möglich?
 
SetWindowRgn?

gruss

Der schöne Günther 7. Feb 2017 18:35

AW: Buttons ohne Rand möglich?
 
So richtig?

Delphi-Quellcode:
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;
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 :(

EWeiss 7. Feb 2017 18:57

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

himitsu 7. Feb 2017 23:43

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:

EWeiss 8. Feb 2017 00:48

AW: Buttons ohne Rand möglich?
 
Zitat:

Zitat von himitsu (Beitrag 1361073)
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:

yep.. wäre eine alternative.
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

Sherlock 8. Feb 2017 06:54

AW: Buttons ohne Rand möglich?
 
Meines Wissens ist ein randloser Button einfach ein
Delphi-Quellcode:
TSpeedButton
mit
Delphi-Quellcode:
Flat := True
.

Sherlock

Der schöne Günther 8. Feb 2017 09:25

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:
Top = 0
aber man sieht trotzdem noch das knallgelbe Formular zwischen der Titelleiste und dem Button. Bei Comboboxen, Edits usw. ist das nicht so.

Der schöne Günther 8. Feb 2017 20:38

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 :?

EWeiss 8. Feb 2017 21:24

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.
Seite 1 von 2  1 2      

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