AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Komponente zur Designzeit die Zweite

Ein Thema von Tonic1024 · begonnen am 4. Dez 2003 · letzter Beitrag vom 5. Dez 2003
Antwort Antwort
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Komponente zur Designzeit die Zweite

  Alt 4. Dez 2003, 16:00
Moin...

Ich habe da noch ein Problem: Nachdem ich Left und Top erfolgreich rausgeschmissen hab, habe ich das gleiche Problem jetzt mit der nächsten Property. Es ist also ein generelles Problem.

Nachdem ich dem Button eine eigene Property zugewiesen habe, nömlich eine zweite Farbe, meckert der Compiler wieder. Und zwar kann er analog zu Left jetzt HighlightedColor vom Typ TColor nicht lesen. Der Button lässt sich auf das Form ziehen und wenn man starten will kommt die Meldung.

Vielleicht kann mir jemand - auch wenn ich normal kein Freund davon bin - einen Codeschnipsel posten, der dokumentiert, wie man einer Komponente eine Property zuweist, die dann auch zur Designzeit verarbeitet werden kann.

Remember: Wenn ich die Klasse zur Laufzeit einbinde und ein Objekt erzeuge gehts...

*völlig fertig und hat keine große Lust mehr*... Danke...
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#2

Re: Komponente zur Designzeit die Zweite

  Alt 4. Dez 2003, 16:08
Zeig du doch mal, wie du es bisher versuchst.
Hast du einen Defaultwert für das Property vergeben? Wenn ja, hast du mal versucht zusätzlich im Constructor einen Wert zuzuweisen?

Ich habs doch richtig verstanden, dass das Property Highligtedcolor im Designer keinen Wert hat und es darum knallt, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: Komponente zur Designzeit die Zweite

  Alt 4. Dez 2003, 17:10
Moin...

Ich glaube so habe ich noch nie mit einem Problem gekämpft...

Sei mir nicht böse, ich poste mal alles...

Das stellt meinen letzten Stand dar... ist schon zig mal wieder umgeworfen und neu gemacht...
Derzeitiges Problem: Komponente wird erzeugt, liegt mit allen Werten (die auch korrekt sind) auf dem Form und wenn die App startet ist nicht das shape sondern der Button zu sehen. Ich dachte, wenn ich den Konstruktor überschreibe, dann erscheint nicht mehr der Button?!?

Delphi-Quellcode:
type
  TBluBtn = class(TButton)
    procedure AnimationTimer(Sender: TObject);
  private
    Form: TForm;
    Panel: TPanel;
    FColor: TColor;
    FCaption: String;
    FOnClick: TNotifyEvent;
    procedure SetColor(const Value: TColor);
    procedure SetCaption(const Value: String);
    procedure DoOnClick(Sender: TObject);
  protected
  public
  published
    constructor Create(AOwner: TComponent);override;
    property HighlightedColor: TColor read FColor write SetColor;
    property Caption: String read FCaption write SetCaption;
    property onClick: TNotifyEvent read FOnClick write FOnClick;
  end;

procedure Register;

var shape: TShape;
    Lbl: TLabel;
    timer: TTimer;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TBluBtn]);
end;

procedure TBluBtn.DoOnClick(Sender: TObject);
begin
  If Assigned(FOnClick) Then
    FOnClick(Self);
end;

constructor TBluBtn.Create(AOwner: TComponent);
begin
  inherited create(AOwner);
  FCaption:='BlueButton';
  Self.Form:=Form;
  Self.Panel:=Panel;

  Self.FColor:=clSkyblue;

  shape:=TShape.Create(Self);
  shape.Shape:=stRoundRect;
  shape.Height:=20;
  shape.Brush.Color:=Self.FColor;
  shape.Pen.Color:=ColorAdjustLuma(Self.FColor,-70,false);

  Lbl:=TLabel.Create(Self);
  Lbl.AutoSize:=true;
  Lbl.Transparent:=true;
  Lbl.Font.Color:=clGray;
  Lbl.Caption:=FCaption;
  LbL.OnClick:=DoOnClick;

  timer:=TTimer.Create(Self);
  timer.Interval:=1;
  timer.OnTimer:=AnimationTimer;
  timer.Enabled:=true;

  shape.Parent:=(AOwner as TForm);
  Lbl.Parent:=(AOwner as TForm);
  Form:=(AOwner as TForm);
  Panel:=nil;

end;


procedure TBluBtn.SetCaption(const Value: String);
begin
  FCaption:=Value;
end;

procedure TBluBtn.AnimationTimer(Sender: TObject);
var pt: TPoint;
    ThisPanel: TPanel;
begin
  ThisPanel:=TPanel.Create(self);
  ThisPanel.Top:=0;
  ThisPanel.Left:=0;

  if Panel <> nil then
    ThisPanel:=Panel;

  GetCursorPos(pt);
  if (pt.X > Form.Left+ThisPanel.Left+shape.Left+4) AND
      (pt.X < Form.Left+ThisPanel.Left+shape.Left+shape.Width+4) AND
      (pt.Y > Form.Top+ThisPanel.Top+shape.Top+23) AND
      (pt.Y < Form.Top+ThisPanel.Top+shape.Top+shape.Height+23) then
  begin
    shape.Visible:=true;
    Lbl.Font.Color:=clBlack;
  end
  else
  begin
    shape.Visible:=false;
    Lbl.Font.Color:=clGray;
  end;
  
  //Weil Left sonst nicht das Objekt neu zeichnet... ist zugegebenermaßen ein bissel unschön
  shape.Brush.Color:=FColor;
  shape.Pen.Color:=ColorAdjustLuma(Self.FColor,-70,false);
  shape.Left:=Self.Left;
  shape.Top:=Self.Top;
  shape.Width:=Lbl.Width+20;
  Lbl.Top:=Shape.Top+3;
  Lbl.Left:=Shape.Left+9;
  Lbl.Caption:=FCaption;
end;

procedure TBluBtn.SetColor(const Value: TColor);
begin
  FColor:=Value;
end;
*säuftz*
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von Treffnix
Treffnix

Registriert seit: 25. Jun 2003
Ort: AC
740 Beiträge
 
Delphi 7 Professional
 
#4

Re: Komponente zur Designzeit die Zweite

  Alt 4. Dez 2003, 17:23


Warum leitest du es denn von TButton ab, wenn du keinen Button willst? Auch wenn du den Konstruktor überschreibst. Mit Inherited rufst du den Konstruktor des Vorgängers ( TButton ) ja trotzdem auf. Und das wirst du auch müssen, sonst wirste ne Menge Exceptions fangen, weil die Eigenschaften nicht richtig initialisiert sind.
Ich hab die Klasse von TButton nicht im Kopf, aber schau doch mal, ob du dich in die Paint-Methode hängen und das zeichnen des Buttons verhindern kannst. Oder du nimmst statt TButton einen Vorfahren desselbigen oder eine ganz andere Klasse.
Zu den Properties schlag mal in der Delphi Hilfe nach und schau dir mal Default bei den Properties an!
Und den Konstruktor bitte im Public-Teil.
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#5

Re: Komponente zur Designzeit die Zweite

  Alt 5. Dez 2003, 08:29
Zitat von Treffnix:
Warum leitest du es denn von TButton ab, wenn du keinen Button willst?
Zuerst hatte ich eine Klasse von TControl abgeleitet. Hat auch funktioniert, nur wurde meine Kompo dann nicht im Reiter angezeigt, weil wohl die Grafiken fehlen. Dann habe ich mir den Button gesucht, weils ja auch einer werden sollte... Hatte auch gehofft, dass sich das Shape irgendwie drüber legt, und der Original-Button dann weg ist.

Zitat von Treffnix:
Auch wenn du den Konstruktor überschreibst. Mit Inherited rufst du den Konstruktor des Vorgängers ( TButton ) ja trotzdem auf. Und das wirst du auch müssen, sonst wirste ne Menge Exceptions fangen, weil die Eigenschaften nicht richtig initialisiert sind.
Genau... Hatte das erst auch schon so und genau das ist passiert. Danke, dass du mir meine Vermutung damit bestätigst.

Zitat von Treffnix:
Ich hab die Klasse von TButton nicht im Kopf, aber schau doch mal, ob du dich in die Paint-Methode hängen und das zeichnen des Buttons verhindern kannst.
Okay, das könnte ich nochmal versuchen...

Zitat von Treffnix:
Und den Konstruktor bitte im Public-Teil.
Ja, wurde schon mal drauf hingewiesen... kommt wohl durch das viele copy and paste..
Wer hat das bloß erfunden.....
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 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