![]() |
Runde Schaltflächen
Hallo,
kennt jemand eine Komponente, mit der man seinem Programm (z. B.) runde Schaltflächen verpassen kann? Grüsse Frank |
So spontan würde ich sagen, das man das sehr gut mit Images machen kann. Einfach Images erstellen, die so aussehen wie die gewünschte Schaltfläche und die Hintergrundfarbe des Images als unsichtbar einstellen!
Hab das selber noch nie gemacht. Aber es Müsste so gehen! Gibt sicher auch noch bessere Lösungen! Bin selbst noch ANfänger in Delphi! Steffen! |
Hi,
im alten Delphi-Forum war darüber was zu finden. Gehen tut es schon. Vielleicht erinnert sich sonst noch jemand daran. Gruß Hansa |
Also es ging ziemlich einfach, nicht so kompliziert, wie Fedderle schreibt. Leider weiß ich trotzdem nicht, wie es genau ging.
Gruß Hansa |
Hi Frank, versuch mal das:
Delphi-Quellcode:
Gruß, Sebastian
var
rgn : hRgn; begin rgn := CreateEllipticRgn(10,10,Button1.Width,Button1.Height); SetWindowRgn(Button1.Handle,rgn,true) |
Ok! Gebe zu. Da war meine Methode doch viel komplizierter.
Geht das auch mit der ganzen Form. Also, das ich ne Runde Form erstellen kann? Steffen! |
Hallo Leute,
vielen Dank für Eure Antworten. Ich hab in der Zwischenzeit etwas rumprobiert, aber nichts davon gefällt mir. Ich hab noch einen Komponentensatz für Flat-Buttons etc., dann werd ich eben den nehmen. Grüsse Frank |
Zitat:
Noch ein paar möglichkeiten: Explosion:
Delphi-Quellcode:
Schatteneffekt:
Var
P:Array[0..24] of TPoint; CLFRgn:HRgn; Begin P[0]:=Point(0,0); P[1]:=Point(50,Form1.Height div 6); P[2]:=Point(0,2*(Form1.Height div 6)); P[3]:=Point(50,3*(Form1.Height div 6)); P[4]:=Point(0,4*(Form1.Height div 6)); P[5]:=Point(50,5*(Form1.Height div 6)); P[6]:=Point(0,Form1.Height); P[7]:=Point(Form1.Width div 6,Form1.Height -50); P[8]:=Point(2*(Form1.Width div 6),Form1.Height); P[9]:=Point(3 *(Form1.Width div 6),Form1.Height -50); P[10]:=Point(4*(Form1.Width div 6),Form1.Height); P[11]:=Point(5 *(Form1.Width div 6),Form1.Height -50); P[12]:=Point(Form1.Width,Form1.Height); P[13]:=Point(Form1.Width-50,5*(Form1.Height div 6)); P[14]:=Point(Form1.Width,4*(Form1.Height div 6)); P[15]:=Point(Form1.Width-50,3*(Form1.Height div 6)); P[16]:=Point(Form1.Width,2*(Form1.Height div 6)); P[17]:=Point(Form1.Width-50,Form1.Height div 6); P[18]:=Point(Form1.Width,0); P[19]:=Point(5*(Form1.Width div 6),50); P[20]:=Point(4*(Form1.Width div 6),0); P[21]:=Point(3*(Form1.Width div 6),50); P[22]:=Point(2*(Form1.Width div 6),0); P[23]:=Point(Form1.Width div 6,50); P[24]:=Point(0,0); CLFRgn:=CreatePolygonRgn(P,24,Alternate); SetWindowRgn(Form1.Handle,CLFRgn,True); End;
Delphi-Quellcode:
Schöne Titelleiste:
Var
CLFRgn:HRgn; CLFRgnTmp:HRgn; Begin CLFRgn:=CreateRectRgn(0,0,Form1.Width-10,Form1.Height-10); CLFRgnTmp:=CreateRectRgn(10,10,Form1.Width,Form1.Height); CombineRgn(CLFRgn,CLFRgn,CLFRgnTmp,RGN_OR); SetWindowRgn(Form1.Handle,CLFRgn,True); End;
Delphi-Quellcode:
Rechteck auf rechteck:
Var
CLFRgn:HRgn; CLFRgnTmp:HRgn; Begin CLFRgn:=CreateRectRgn(0,0,Form1.Width,Form1.Height); CLFRgnTmp:=CreateRectRgn(10,10,Form1.Width-10,30); CombineRgn(CLFRgn,CLFRgn,CLFRgnTmp,RGN_DIFF); CLFRgnTmp:=CreateRectRgn((Form1.Width div 2)-5,10,(Form1.Width div 2)+10,30); CombineRgn(CLFRgn,CLFRgn,CLFRgnTmp,RGN_OR); CLFRgnTmp:=CreateRectRgn(10,18,Form1.Width-10,22); CombineRgn(CLFRgn,CLFRgn,CLFRgnTmp,RGN_OR); CLFRgnTmp:=CreateRectRgn(12,12,Form1.Width-12,28); CombineRgn(CLFRgn,CLFRgn,CLFRgnTmp,RGN_OR); SetWindowRgn(Form1.Handle,CLFRgn,True); End;
Delphi-Quellcode:
Trapezformen hätte ich noch, musst nur sagen auf welcher Seite die schmale Seite sein soll...
Var
CLFRgn:HRgn; CLFRgnTmp:HRgn; Begin CLFRgn:=CreateRectRgn(0,30,Form1.Width-30,Form1.Height); CLFRgnTmp:=CreateRectRgn(Form1.Width-80,0,Form1.Width,60); CombineRgn(CLFRgn,CLFRgn,CLFRgnTmp,RGN_OR); SetWindowRgn(Form1.Handle,CLFRgn,True); End; Grüsse, Daniel :hi: |
Werden bei der Titelleiste auch die Systemeinstellungen berücksichtig? Also manche haben eine dickeren rand eingstellt, manche einen dünneren und so wieter.
Wenn man WM_NCPAINT abfängt, bekommt man übrigens auch einen HDC auf den nonClient-Bereich des Fensters. Und wenn die Nachricht kommt, muß man auch zeichnen. |
Zitat:
Grüsse, Daniel :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 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-2025 by Thomas Breitkreuz