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 Komponente zur Designzeit (https://www.delphipraxis.net/12785-komponente-zur-designzeit.html)

Tonic1024 4. Dez 2003 08:53


Komponente zur Designzeit
 
Moin...

Dank der großen Unterstützung der DP habe ich es geschafft meine erste eigene Komponente zu "backen". Ist ein Button und funkt zur Laufzeit in allen Funktionen prächtig.

Das I-Tüpfelchen wäre ja nun, wenn der auch zur Designzeit brauchbar wäre - isser nämlich noch nicht... :wink:

Woran mag das liegen: Wenn ich die Komponente installiere, dann erscheint das Symbol auch im Reiter und ich kann es auf das Form ziehen. Im OI zeigt er aber keine Werte an (Top, Left, etc.) und wenn ich die App starte, kommt eine Fehlermeldung: "Fehler beim Lesen von Btn.Left" (sinngemäß).

Delphi-Quellcode:
type
  TBtn = class(TButton)
    procedure AnimationTimer(Sender: TObject);
  private
    FLeft: Integer;
    FTop: Integer;
    [..]
    procedure refresh();
  protected
  public
  published
    constructor Create(Form: TForm; Panel: TPanel = nil);
    property Left: Integer read FLeft write SetLeft;
    property Top: Integer read FTop write SetTop;
    [..]
  end;
Muss ich für den OI noch extra Propertys schaffen oder muss ich FLeft mit Grundwerten ausstatten? WIE und vor allem WANN ließt der OI denn die propertys (z.B. Left) aus?

Hoffe jemand weiss...

Treffnix 4. Dez 2003 08:59

Re: Komponente zur Designzeit
 
Wenn du eine Komponente aufs Formular ziehst, wird zunächst einmal der Constructor und bei Bedarf die Paint-Methode ausgeführt. Du könntest also noch im Constructor Werte vergeben.

Robert Marquardt 4. Dez 2003 09:48

Re: Komponente zur Designzeit
 
Schmeiss Top und Left raus. Die hast du naemlich schon von TButton geerbt.

Tonic1024 4. Dez 2003 10:55

Re: Komponente zur Designzeit
 
@Treffnix: Grundwerte im Constructor hatte ich probiert, ändert nichts... Es gibt dann zwar die Werte, aber die Meldung, dass sie nicht gelesen werden können, bleibt.

@Robert: Ich habe die Komponente als TComponent entwickelt und versuche sie jetzt auf TButton umzustricken damit ich die Grafiken für den Reiter habe... Wenn ich aber die Probertys Left und Top entferne kann ich sie auch nicht mehr nutzen...

Wenn ich sie erben will muss ich sie dann trotzdem eintragen, und wenn ja, wie?

Robert Marquardt 4. Dez 2003 11:38

Re: Komponente zur Designzeit
 
Da Left und Top bei TButton schon published sind, musst du garnichts machen.
Probier es doch einfach aus.

Tonic1024 4. Dez 2003 12:02

Re: Komponente zur Designzeit
 
Hab ich doch längst probiert... ich sehe die property im Autovervollständigen und weise einen Wert zu. Nur wie ich in der Klasse wieder darauf zugreifen kann weiss ich nicht...

Vielleicht sollte ich dabei sagen, dass ich ein guter Theoretiker bin - wenn du weisst was ich meine :?

Ich mach Delphi erst seit drei Monaten...:) Hab vorher viel anderes Zeug gemacht und lerne, wie ich finde, recht schnell... Aber manchmal hakt es einfach...

Treffnix 4. Dez 2003 12:25

Re: Komponente zur Designzeit
 
Also, wenn dein Button von TButton abgeleitet ist, müssten die Properties Left und Top automatisch vererbt werden, wenn du sie in deiner Ableitung nicht neu deklarierst, da sie ja in TButton schon published sind. Du könntest aber auch noch versuchen sie im Published-Teil extra durchzureichen.

Delphi-Quellcode:
published
  [..]
  Property Left;
  Property Top;
...

MyRealName 4. Dez 2003 12:28

Re: Komponente zur Designzeit
 
ist zwar nur en schönheitsfehler, aber Konstruktoren macht man public...
der Unterschied zw. Public und Published ist ja nur, daß man published-Variablen im OI sieht, Public aber ned. desweiteren werden published gestreamed, public ned...

Tonic1024 4. Dez 2003 12:42

Re: Komponente zur Designzeit
 
RIESEN BRETT VORM KOPF!!!!

Okay... hab an der völlig falschen Stelle gesucht, und Ihr habt natürlich alle recht...
geht nun. Property Left habe komplett rausgeschmissen. Ich konnte ja left zuweisen, logisch.

Nun benutze ich aber als Schaltfläche ein Shape. Dem Shape muss ich natürlich das auch zuweisen...

Delphi-Quellcode:
shape.left:=self.left //ganz schlimmer Newbee-Fehler
Wie konnte ich das nur übersehen..? Naja, Komponenten sind mir halt immernoch recht fremd... :?

Jetzt taucht aber ne neue Frage auf...
Komponente installiert - TBluBtn undefiniert... Wiso?

schonwieder ein neuer Thread... :oops:


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