Announcement

Collapse
No announcement yet.

Wann hat eine Komponente einen Namen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wann hat eine Komponente einen Namen

    Hallo,
    ich brauche für eine Anwendung eine spezielle Komponente. So weit kein Problem, ich leite mir meine Komponente von zB TPanel ab.

    Zur DesignTime verteile ich nun mehrere Komponenten auf meinem Formular:
    Komp1, Komp2 und Komp3 (Alle vom Typ MeineKomponente)

    Beim Create der Komp1 (und Komp2...) sollen sich diese Komponenten Werte aus INI Dateien holen und sich sozusagen umkonfigurieren (Top. Left, Caption....)

    Aber...es geht nicht

    Speziell im Create meiner Komponente brauche ich den Namen der Komponente.

    also nichts leichter als das (denke ich):
    (MeineKomponente ist von TPanel abgeleitet)

    constructor MeineKomponente.create(aOwner : Tcomponent);
    begin
    inherited create(aOwner);
    showmessage ( self.name );
    .....

    ..und was wird mir angezeigt: Nichts! bzw: ''
    Wie kann es sein, dass sich die Komponente sozusagen noch gar nicht kennt?

    Ab wann kann ich auf die Eigenschaften einer Komponente denn zugreifen?
    Ich hoffe, irgendjemand kann mir helfen, sonst muss ich mir einen anderen Mechanismus überlegen.

    Danke schon mal,

  • #2
    Ich hab's nicht ausprobiert, aber vermutlich kannst du Loaded überschreiben und darin den Namen auswerten.
    <p>Ehrlich gesagt kann ich mir auch nicht recht vorstellen, was du mit den Ini-Dateien bezweckst. ;-)
    <br>Vielleicht erfüllt ja auch ein etwas anderer Ansatz seinen Zweck, z.B. könntest Du die Ini-Dateien nicht automatisch im Laufzeitcode der Komponente laden, stattdessen müsste der Komponentennutzer einen Menüpunkt "Initialisieren" im Designtime-Kontextmenü deiner Kompo aufrufen (den du dort einfügst, indem du einen Komponenteneditor schreibst).
    <br>Oder du legst einen Satz fertig konfigurierter Instanzen deiner Komponente in der Objektgalerie ab und lässt dafür die Ini-Dateien ganz weg.
    <p>Uli

    Comment


    • #3
      Korrekt, man muß .Loaded; überschreiben und darin als erstes inherited Loaded; aufrufen. Der Name einer Komponente, so wie alle published Eigenschaften werden ja während der Designzeit vergeben. Somit müssen diese Werte in der DFM gespeichert werden. Wird eine DFM geladen, wird zuerst die Komponente erzeugt, also .Create() aufgerufen, erst nachdem .Create() zurückgekehrt ist werden die Eigenschaften aus der DFM in die Komponente übertragen. Nachdem dies für JEDE Komponente im Form erledigt wurde, werden alle .Loaded; Methoden der Komponenten aufgerufen um eine eventuelle Nachbearbeitung durchzuführen. D.h. .Loaded ist der Zeitpunkt den du brauchst.

      Gruß Hage

      Comment


      • #4
        Danke, genau so funktioniert es!.
        Vielen Dank und einen erfolgreichen Ta

        Comment

        Working...
        X