Announcement

Collapse
No announcement yet.

StringList beim Programmstart formatieren...?

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

  • StringList beim Programmstart formatieren...?

    Hi!

    Ich habe in meiner Komponente das Problem das ich nicht weis wo ich beim Programmstart dafür sorgen kann das meine StringList formatiert wird.

    Die function heist "FormatStringList" und funktioniert auch ganz ausgezeichnet wenn ich im OnCreate Ereigniss meines Formulars diese Methode aufrufe.

    Gibt es die Möglichkeit das in die Komponente zu verlagern?

    Ich habe was über den "Initialize Abschnitt" gelesen denoch klappt es damit nicht es gibt immer eine Fehlermeldung... undefinierter Bezeichner...

    Für ein Hinweis währe ich dankbar...
    MfG Benny

  • #2
    Im Constructor der Komponente?<p>
    Schöne Grüße, Mario NOac
    Schöne Grüße, Mario

    Comment


    • #3
      Hi Mario,

      ja also im

      Constructor TMyComp.Create;

      klappt das nicht da die Daten noch nicht in der StringListe geladen wurden.

      Dort kann ich zwar Standardwerte festlegen aber meine Daten welche in einer TStringList im Objektinspektor hinterlegt werden kann ich da nicht formatieren lassen.

      Ich habe eine procedure welche die Formaierung übernimmt.

      Dies funktioniert auch bei Aufruf im Create Abschnitt meines Formulars.

      Dieser Aufruf würde ich gerne in die Komponente verlagern.

      Die Komponente funktioniert erst wenn man die Daten formatiert hat.

      Die Format procedure habe ich im public Abschnitt deklariert.

      MfG Benn

      Comment


      • #4
        ...einer TStringList im Objektinspektor?<BR>
        Möglicherweise .Loaded überschreiben.<BR>
        Loaded wird aufgerufen, wenn die Komponente aus dem Stream geladen wurde.<BR>
        Initialize wird aufgerufen, wenn die Unit geladen wird, da existiert deine Komponente noch nicht

        Comment


        • #5
          Was macht die Komponente denn?<p>
          Du könntest die StringList nur über eine property anbieten. Dann könntest Du über eine interne boolsche Variable steuern, ob der Inhalt schon formatiert wurde. Diese boolsche Variable wird beim OnCreate und beim Setzen der StringList auf False gesetzt. <br>
          Dann gibt es eine interne CheckRoutine, die diese Variable prüft und gegebenfalls die Formatierung vornimmt und dann die Variable auf True setzt. Jede Routine, die erst nach der Formatierung funktioniert, braucht dann zu Beginn nur den Check aufrufen.<p>
          Schöne Grüße, Mario Noac
          Schöne Grüße, Mario

          Comment


          • #6
            Hi Ihr beiden, ;-)

            ja die Komponente wertet die Daten aus und visualisiert diese.
            Das klappt auch ganz ausgezeichnet.

            Die StringListe ist über property erreichbar!

            Die Komponent wird von der TGraphicControl Klasse abgeleitet.

            Also es geht ja "manuel" wenn man die Format procedure im Hauptprogramm im create Abschnitt aufruft. Nur wie beschrieben würde ich das gerne in die Komponente verlagern.

            Ich währe für weitere Ideen dankbar...
            MfG Benn

            Comment


            • #7
              Hallo,<p>
              ist meine Idee, das in die Set-Proc der propery zu verlagern, nichts gewesen?<p>
              Schöne Grüße, Mario Noac
              Schöne Grüße, Mario

              Comment


              • #8
                Hi Mario,

                ja sorry nur da weiß ich glaube nicht genau wie Du das meinst.

                Ich schicke mal mein Beispiel...

                <PRE>
                { Protected-Deklarationen }
                procedure SetFStrlBanddat(const strListNew:TStringList);
                { Public-Deklarationen }
                procedure FormatNewData;
                { Published-Deklarationen }
                property Data:TStringList read FStrlData write SetFStrlData;

                procedure TMyComp.SetFStrlData(const strListNew:TStringList);
                begin
                FstrlData.Assign(strListNew);
                FormatNewData;
                end;
                </PRE>

                Das hier klappt nur wenn man nach dem Programmstart die Liste neu zuweist oder aber FormatNewData extern aufruft.

                Nun suche ich aber die Möglichkeit die FormatNewData an einer anderen Stelle in der Komponente aufzurufen so das er auch die Daten in der Liste wenigstens einmal formatiert.

                SetFStrlData wird nicht beim normalen Programmstart angesprungen. ;-(

                MfG Benn

                Comment


                • #9
                  Ah, dann ist dass fehlerhafte Darstellen direkt nach dem Laden ja das einzige Problem... Rein gefühlsmäßig sollte der Tipp mit Loaded weiterhelfen.<p>
                  Schöne Grüße, Mario Noac
                  Schöne Grüße, Mario

                  Comment


                  • #10
                    Hi! ;-)

                    klappt ausgezeichnet... ich kam nur etwas ins straucheln da ich dachte Loaded sei ähnlich Initialize aufzurufen. Dem ist nicht so... naja sorry aber war mein Fehler.

                    Für mich war das neu mit dem Loaded kannte ich noch nicht naja auf jeden Fall funktioniert es hier damit.

                    Ich danke Euch!!!

                    Und hier nun das Beispiel wie es funktioniert...

                    <PRE>
                    { Protected-Deklarationen }
                    procedure Loaded; override;

                    procedure TMyComp.Loaded;
                    begin
                    inherited;
                    FormatNewBandData; {Daten formatieren lassen...}
                    end;
                    </PRE>

                    MfG Benn

                    Comment

                    Working...
                    X