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 eigene Klasse Button (https://www.delphipraxis.net/134315-eigene-klasse-button.html)

Phiennes 19. Mai 2009 22:49


eigene Klasse Button
 
Hi,

ich möchte unter anderem einen eigenen Button erstellen, der aus einem Image und einem Label besteht.
Wie ich eine Klasse von TImage ableite, steht in meinem schlauen Buch, aber wie kann ich ein Label mit einbinden und das in einer externen Unit?

Also kurz gesagt: Wie kann man zwei Komponenten in einer Komponente vereinen?

Ich habe überall gesucht, finden tue ich nichts.


lG Phiennes

Satty67 19. Mai 2009 22:53

Re: eigene Klasse Button
 
Ich weis nicht, welche Delphi Version Du hast. Bei Delphi 5 ist ein SpinEdit im Samples-Ordner, der das schön zeigt.

Zusammengefasst wird im Constructor (Create) der Haupkomponente (hier wohl der Button) dynamisch die weiteren Controls erzeugt.

Phiennes 19. Mai 2009 22:59

Re: eigene Klasse Button
 
Danke ich probier' das mal aus (hab Delphi 7 prof.), wenn ich auf Probleme stoße, melde ich mich nochmal =).

Phiennes 19. Mai 2009 23:45

Re: eigene Klasse Button
 
Hmm irgendwie komme ich doch nicht weiter^^.

Das Label wird einfach nicht angezeigt.

Delphi-Quellcode:
unit bkButton;

interface

uses
  SysUtils, Classes, Controls, Graphics, StdCtrls;

type
  TbkButton = class(TCustomControl)
  private
    { Private-Deklarationen }
    Pressed: byte;
    BLabel: TLabel;
  protected
    { Protected-Deklarationen }
    procedure Paint; override;
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); Override;
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('bkModule', [TbkButton]);
end;

constructor TbkButton.Create(AOwner: TComponent);
VAR xw,yw:Integer;
begin
  xw:=200;
  yw:=22;
  inherited Create (AOwner);
  Pressed:=0;
  SetBounds(0,0,xw,yw);

  BLabel:= TLabel.Create(self);
  BLabel.Caption:='bkButtonX';
end;

procedure TbkButton.Paint;
begin
  canvas.brush.color:=clred;
  canvas.Rectangle(0,0,width,height);
 
  BLabel.Left:=2;
  BLabel.Width:=width-4;
  BLabel.Top:=round(height/2)-6;
  BLabel.Height:=13;
  BLabel.Alignment:=taCenter;
  BLabel.Transparent:=false;
  BLabel.Visible:=true;
  BLabel.Color:=clGreen;
  BLabel.Enabled:=true;
end;

end.
habs rausgefunden es fehlte:
Delphi-Quellcode:
 BLabel.parent:= self;

BAMatze 20. Mai 2009 07:33

Re: eigene Klasse Button
 
Setz mal den Parent des Labels.

Versuch es mal so:
Delphi-Quellcode:
BLabel := TLabel.Create(nil);
BLabel.Parent := Self;

MfG
BAMatze

quendolineDD 20. Mai 2009 07:52

Re: eigene Klasse Button
 
Und vielleicht noch ein
Delphi-Quellcode:
BLabel.Visible := true;

BAMatze 20. Mai 2009 08:28

Re: eigene Klasse Button
 
Zitat:

Zitat von quendolineDD
Und vielleicht noch ein
Delphi-Quellcode:
BLabel.Visible := true;

Stimmt, dass hätte ich auch noch ergänzen können bei meinem Quellcode :lol:

Phiennes 20. Mai 2009 10:16

Re: eigene Klasse Button
 
danke^^

I3estii 9. Sep 2015 13:18

AW: eigene Klasse Button
 
Hey Leute,

bin auch gerade an einer Button-Komponente dran.(Nach diesem Beispiel), wie krieg ich es hin dass wenn ich mit der Maus das Label treffe, trotzdem der Button ausgeführt wird?

Edit: Gelöst

Delphi-Quellcode:
Canvas.TextOut(round(width/2-Canvas.TextWidth(Caption)/2), round(height/2)-6, Caption);


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 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