Delphi-PRAXiS

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/)
-   -   Delphi Button mit eigenem Style (https://www.delphipraxis.net/86287-button-mit-eigenem-style.html)

halinchen 12. Feb 2007 11:00


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

Angel4585 12. Feb 2007 11:07

Re: Button mit eigenem Style
 
Ich leite solche Komponenten die ich selbst gestalten will von TGraphicControl ab :)

halinchen 12. Feb 2007 11:10

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)

halinchen 12. Feb 2007 15:07

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.

Tormentor32 12. Feb 2007 15:27

Re: Button mit eigenem Style
 
Ich glaube da muss in der Create Methode noch ein
Delphi-Quellcode:
inherited create;
rein (hab grad kein delphi zur Hand ist nur ne Vermutung)

Edit: Oh mann! Ich hab Delphi mit IE geschrieben :wall: :mrgreen:

halinchen 12. Feb 2007 15:39

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 11:15 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