Announcement

Collapse
No announcement yet.

Komponente mit __published property TIcon* Icon, "Ungültiger Pfad einer Eigenschaft"

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

  • Komponente mit __published property TIcon* Icon, "Ungültiger Pfad einer Eigenschaft"

    Hallo, ich bin etwas verzweifelt, da ich folgendes Problem weder verstehen noch lösen kann.

    Ich habe eine Komponente programmiert, die unter anderem eine Eigenschaft Icon wie in folgender Beispielklasse implementiert:

    Code:
    class TBeispiel : pulblic TComponent
    {
       private:
                     TIcon * FIcon;
    
       protected:
                     virtual void __fastcall SetIcon( TIcon* AIcon )
                     {
                             if ( FIcon )
                                    FIcon->Assign( AIcon );
                     }
    
       public:
                     __fastcall TBeispiel( TComponent AOwner ) : TComponent( AOwner )
                     {
                           FIcon = new TIcon();
                           
                           // Grundinitialiserung des Icons
                           FIcon->Assign( Application->Icon );
                     }
         
                     __fastcall ~TBeispiel()
                     {
                         if (FIcon) delete FIcon;
                     }
    
        __published:
                     
                     __property TIcon * Icon = {read=FIcon, write=SetIcon };
    
    };
    Damit tritt folgendes Problem auf: Wenn ich das Package mit dieser Komponente in einem Testprojekt im selben Projektverzeichnis einbinde, eine Komponenteninstanz, z.B. mit Namen ClTest, auf einer Form plaziere und im Objektinspector die Eigenschaft editiere, bekomme ich wie zu erwarten das Anwendungicon der Test.exe angezeigt. Wenn ich ein anderes Icon über den Objektinspecotr zuweise, wird dies dort korrekt geladen und auch in die dfm der Testform geschrieben.

    Starte ich die Test-Exe jedoch, wird nicht der Wert ClTest->Icon.data aus der DFM gelesen, sondern die Eigenschaft enthält immer noch das Anwendungs-Icon aus der Initialisierung im Konstrukor.

    Nun wird es ganz komisch: Ich binde das Package in ein Projekt ein und plaziere die Komponente auf einer Form des Projekts, daß ganz woanders liegt. Das Verhalten zur DesignTime ist gleich, wenn ich jedoch das Projekt kompiliere und starte bekomme ich noch beim Konstrukoraufruf der TForm-Basisklasse meiner Projektform den Fehler "Fehler beim Lesen von ClTest->Icon.data: Ungültiger Pfad für Eigenschaft".
    Andere Properties, die Strings oder numerische Werte kapseln, funktionieren jedoch einwandfrei.

    Ich arbeite mit BCB 5 Prof.

    Nach 3 Tagen Inet und Durchforsten diverser Foren bin ich inzwischen komplett verzweifelt und würde mich über hjede Hilfe freuen.

    Danke vorab, Sven
    Zuletzt editiert von Sven Schottke; 26.02.2008, 18:10.

  • #2
    Ein Teil hat sich erledigt...

    Nun wird es ganz komisch: Ich binde das Package in ein Projekt ein und plaziere die Komponente auf einer Form des Projekts, daß ganz woanders liegt. Das Verhalten zur DesignTime ist gleich, wenn ich jedoch das Projekt kompiliere und starte bekomme ich noch beim Konstrukoraufruf der TForm-Basisklasse meiner Projektform den Fehler "Fehler beim Lesen von ClTest->Icon.data: Ungültiger Pfad für Eigenschaft".
    Dieses Problem hat sich erledigt: Ich hatte noch den Header der ursprünglichen Klasse, die noch keine Package-Komponente war, noch im Projekt-Inlcude-Pfad. Was das allerdings miteinenander zutun hat.... daß weiß nur Borland.

    Leider besteht das Problem mit der nicht persistenten Icon-Zuweisung immer noch.

    Sven

    Comment


    • #3
      __property TIcon * Icon = {read=FIcon, write=SetIcon, stored=true};

      Versuch mal
      Christian

      Comment


      • #4
        Hallo Herr Marquardt,

        leider hilft das das store-attribut in der property-deklaration auch nichts.
        Laut Dokumentation ist dieses auch per default auf true gesetzt.

        Ich kann mir nur vorstellen, daß es etwas damit zu tun hat, daß der "Pfad"-Eintrag für eine solche Property in der dfm auf Klassenname->Eigenschaftsname.data lautet und nicht wie z.b. bei einer simplen String-Eigenschaft auf Klassenname->Eigenschaftsname.

        So wird bei Initialisierung der Komponenteninstanz nicht erkannt, daß die Eigenschaft "Icon" sich im Gegensatz zur Komponentendefinition geändert hat.

        Gibt es vielleicht irgendwo im Netz ein Tutorial, wo auch mal erklärt wird, wie eine Komponente mit einer Image-, Glyph- oder Icon-Eigenschaft ausgestattet wird. Selbst die Handbücher von Borland geben zu dem Thema nischt her.

        Ich bin derzeit ein ganz klitzekleinwenig frustriert...

        Trotzdem danke erstmal für die Antwort.

        Sven

        Comment


        • #5
          ich hatte da bislang keine Probleme.......

          Habe ma ein Grid gemacht, mit Bildern für up- und down sortieren, keine Probleme
          Christian

          Comment

          Working...
          X