![]() |
Button mit eigenem Style
Hi!
Ich möchte einen Button mit einem eigenen Style programmieren. Ich habe in der Hilfe (Delphi 2005 PE) herausbekommen, dass TButton nun aber keinen Canvas besitzt (auch nicht vererbt). Ich dachte mir das ich eine eigene Komponente schreibe, ich weiß aber nicht wovon ich die ableiten soll. Am besten wäre wenn ich nur das Design von dem Button ändern müsste und das die Funktionalität schon da wäre. (Sorry wenn die Frage doof ist, aber ich hab das mit der Komponentenentwicklung noch nicht so richtig geschnallt, ich dachte ich mach das mal praktisch damit ich es verstehe) halinchen |
Re: Button mit eigenem Style
Ich leite solche Komponenten die ich selbst gestalten will von TGraphicControl ab :)
|
Re: Button mit eigenem Style
Danke für die schnelle Antwort. :-D
Ich hab gerade mal geguckt. Der TSpeedButton wäre doch da optimal, oder soll ich meine Komponente lieber komplett von TGraphicControl abeleiten? (Eigentlich müsste ich nur die Ränder und die Farbe anders machen) |
Re: Button mit eigenem Style
Meine Komponente sollte auf WM_paint Messages reagieren.
Nur kommt schon in der IDE eine AV. Kann mir jemand mal sagen was ich grob falsch mache. (Ich schätze es liegt bei WMPaint, darf man da nicht einfach auf den Eigenen Canvas zugreifen? Und stimmt der Constructor?)
Delphi-Quellcode:
unit GraphicControl1;
interface uses SysUtils, Classes, Controls,Graphics,Messages; type TMyButton = class(TGraphicControl) private { Private-Deklarationen } ou,uo,lr,rl,Elo,Ero,Eru,Elu:TBitmap; procedure WMPaint(var Msg: TWMPaint); message WM_Paint; protected { Protected-Deklarationen } public { Public-Deklarationen } constructor Create(AOwner: TComponent);override; destructor Destroy;override; published { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TMyButton]); end; constructor TMyButton.Create(AOwner: TComponent); begin ou := TBitmap.Create; //Bitmaps anlegen und initilisieren uo := TBitmap.Create; lr := TBitmap.Create; rl := TBitmap.Create; Elo := TBitmap.Create; Ero := TBitmap.Create; Eru := TBitmap.Create; Elu := TBitmap.Create; ou.LoadFromFile('ou.bmp'); uo.LoadFromFile('uo.bmp'); lr.LoadFromFile('lr.bmp'); rl.LoadFromFile('rl.bmp'); Elo.LoadFromFile('Elo.bmp'); Ero.LoadFromFile('Ero.bmp'); Eru.LoadFromFile('Eru.bmp'); Elu.LoadFromFile('Elu.bmp'); end; destructor TMyButton.Destroy; begin ou.Free; //Speicher freigeben uo.Free; lr.Free; rl.Free; Ero.Free; Elo.Free; Eru.Free; Elu.Free; end; procedure TMyButton.WMPaint(var Msg: TWMPaint);// message WM_Paint; var i:integer; begin //Canvas komplett überzeichnen Self.canvas.brush.color := $E3DFE0; //Ich glaube hier fängt es schon an mit den Fehlern Self.canvas.brush.Style := bsSolid; Self.canvas.fillrect(rect(0,0,Self.ClientWidth,Self.ClientHeight)); //Hier zeichnet es was For i := 15 to Self.ClientWidth - 15 do begin Self.Canvas.Draw(i,0,ou); Self.Canvas.Draw(i,Self.ClientHeight-uo.Height,uo); end; For i := 15 to Self.ClientHeight -15 do begin Self.Canvas.Draw(0,i,lr); Self.Canvas.Draw(Self.ClientWidth-rl.Width,i,rl); end; end; end. |
Re: Button mit eigenem Style
Ich glaube da muss in der Create Methode noch ein
Delphi-Quellcode:
rein (hab grad kein delphi zur Hand ist nur ne Vermutung)
inherited create;
Edit: Oh mann! Ich hab Delphi mit IE geschrieben :wall: :mrgreen: |
Re: Button mit eigenem Style
Danke :mrgreen: !
Ähm... einen kurzen Augenblick ging es und beim beenden kam wieder eine AV. Ich hab also bei Destroy auch noch ein inherited; gesetzt. Nun sucht Delphi die Bilder auf dem Desktop?!?! Da muss ich erstmal gucken was jetzt wieder nicht stimmt. EDIT: Perfekt, es funzt. Danke :mrgreen: ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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