![]() |
runden Button
Hallo,
ist es möglich einen runden Button zu erstellen? Evtl. ein abgeleitetes Panel o.ä. sentinal |
Re: runden Button
ja :-D
Delphi-Quellcode:
Benutze die Klasse TCustomControl für die komponente
begin
x := (Width - Canvas.TextWidth(Caption)) div 2; y := (Height- Canvas.TextHeight(Caption)) div 2; if Pressed then for i := 1 to 3 do begin // Canvas.Pen.Color := OColor[4-i]; Canvas.Pen.Color := OColor[(i+1) div 2]; Canvas.Arc (i, i, Width-i, Height-i, i, i, i, i); Canvas.Ellipse (3, 3, Width-3, Height-3); Canvas.TextOut (x+1,y+1, Caption+' '); end else for i := 1 to 3 do begin Canvas.Pen.Color := OColor[i]; Canvas.Arc (i, i, Width-i, Height-i, i, i, i, i); Canvas.Ellipse (3, 3, Width-3, Height-3); Canvas.TextOut (x,y, Caption+' '); end; end; |
Re: runden Button
Hallo,
was ist den z.B. OColor? sentinal |
Re: runden Button
hallo arbu man
du schreibst : "Benutze die Klasse TCustomControl für die komponente" wie geht das wo schreibe ich das hinein "TCustomControl" und die komponente ist mir auch nicht klar wo ich die finde ??? mfg vader |
Re: runden Button
du musst dir für den runden Button eine eigene Komponente schreiben.
Diese musst du von der Klasse TCustomControl ableiten ... |
Re: runden Button
hallo,
ok danke mfg vader |
Re: runden Button
Hallo!
Ich war nen Moment nicht da, kann mir hier nochmal jmd. etwas mehr Quellcode zu posten??? sentinal |
Re: runden Button
Hi!
Was willst du denn wissen? Ciao Frederic |
Re: runden Button
Hallo,
naja, irgendwo muss der Code von oben ja eingebaut werden. Also wäre es ganz nett mal zu wissen wo. Normal fängt ein neuer type ja immer mit ner Definition an und muss es eine eigene create geben oder eine onclick etc pp. |
Re: runden Button
Hi!
Es sieht sehr nach der OnPaint aus. Ciao Frederic |
Re: runden Button
die bisher gepostete Variante malt nur etwas rundes. Einen Button wirklich rund machen kannst du so
Delphi-Quellcode:
Anstelle von Button1 kannst du auch jedes anderen WinControl nehmen
var LRgn: HRGN;
begin LRgn := CreateEllipticRgn(0, 0, Button1.Width, Button1.Height); SetWindowRgn(Button1.Handle, LRgn, True); DeleteObject(LRgn); |
Re: runden Button
Also da ist der Button wunderschön rund, aber leider fehlt dann da ja der Rahmen...
Bei dem anderen habe ich mal was versucht, aber ist missglückt. |
Re: runden Button
Hi!
Versuch es mal mit dem Code von SirT. Ciao Frederic |
Re: runden Button
Hol dir das Buch "Delphi für Kids", da stehts drinnen :wink:
|
Re: runden Button
Zitat:
ich brauch das für die Schule... normal mach ich nichts mit Delphi... und bin eigentlich auch der Meinung, dass man keine runde Buttons braucht. |
Re: runden Button
Such halt mal im Internet :!:
|
Re: runden Button
Hi!
SirT hat doch bereits eine Lösung gepostet. Ciao Frederic |
Re: runden Button
Hier mal Source für einen ganze einfachen Runden Button der nur ein OnClick hat.
Delphi-Quellcode:
type
TRundBtn = class(TCustomControl) private fIsDown: Boolean; fNeedsFormSet: Boolean; procedure fDownProc(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure fUpProc(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); public constructor Create(AOwner: TComponent); override; procedure Paint; override; procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; published OnClick; end; constructor TRundBtn.Create(AOwner: TComponent); var LRgn: HRGN; begin inherited; fIsDown := False; color := clRed; OnMouseDown := fDownProc; OnMouseUp := fUpProc; SetBounds(Left, Top, 75, 25); end; procedure TRundBtn.Paint; var LRgn: HRGN; begin if fNeedsFormSet then begin fNeedsFormSet := False; LRgn := CreateEllipticRgn(0, 0, Width, Height); SetWindowRgn(Handle, LRgn, True); DeleteObject(LRgn); end; inherited; if fIsDown then Canvas.Brush.Color := clBlue else Canvas.Brush.Color := Color; Canvas.FillRect(Canvas.ClipRect); end; procedure TRundBtn.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); var LRgn: HRGN; LNeedsResize: Boolean; begin if (AWidth <> Width) or (AHeight <> Height) then LNeedsResize := True; inherited; if LNeedsResize then begin if Parent <> nil then begin LRgn := CreateEllipticRgn(0, 0, Width, Height); SetWindowRgn(Handle, LRgn, True); DeleteObject(LRgn); end else fNeedsFormSet := True; end; end; procedure TRundBtn.fDownProc(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin fIsDown := True; Repaint; end; procedure TRundBtn.fUpProc(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin fIsDown := False; Repaint; end; |
Re: runden Button
Hallo,
ich sagte schon zu dem von SirT, dass dort ja kein Rahmen mehr da ist. Und im Internet habe ich auch schon erfolglos gesucht. Erst danach bin ich ja hierhin gekommen und habe gefragt, ... das macht man doch normalerweise so. sentinal PS: Danke für den Code hier. |
Re: runden Button
Habe nun alles in einer extra Unit eingebaut, uses und implementation und so ergänzt und dann wollte ich einen erzeugen.
Code:
Leider passiert nichts. Sonst ging es immer so. Ich muss zugeben, dass dies meine aktuellen Kenntnisse von Delphi überschreitet, da ich mich normal wenn ich was programmiere/scripte mit anderen Sprachen rumschlagen, die auch nicht in der (Turbo?)Pascal-Art sind.
procedure TForm1.Button1Click(Sender: TObject);
var btn: TRundBtn; begin btn := TRundBtn.Create(Form1); btn.Width := 80; btn.Height := 89; btn.top := 80; btn.left := 89; btn.show; end; sentinal |
Re: runden Button
Hi sentinal,
bau mal nach dem Create die folgende Zeile ein:
Delphi-Quellcode:
Du musst den Parent eines Controls setzen, damit er irgendwo gezeichnet wird.
btn.Parent := Form1
Greetz alcaeus |
Re: runden Button
Autsch, stimmt.
Das war doch noch was... Danke, klappt... supi.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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