Announcement

Collapse
No announcement yet.

Zur Laufz. prüfen ob die Komponente eine best. Eigenschaft besitzt?

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

  • Zur Laufz. prüfen ob die Komponente eine best. Eigenschaft besitzt?

    Hallo,

    ich habe einige eigene Komponenten abgeleitet und diesen die Eigenschaft AutoTextGroup gegeben.
    Nun wollte ich zur Laufzeit prüfen ob die aktive Komponente diese Eigenschaft besitzt, um eine Initialisierung durchzuführen.

    Da traf ich auf die Frage: Gibt es eine Möglichkeit festzustellen ob eine Komponente von unbekanntem Typ die Eigenschaft x besitzt?

  • #2
    Hallo Swen,

    soweit ich weiß, kann man zur Laufzeit nicht feststellen welche Eigenschaften eine Komponente hat. Allerdings geht der "umgekehrte" Weg, d.h. Du kannst feststellen ob die unbekannte Komponente der "Nachfahre" einer bestimmten Komponente ist (z.B. <b>if UnbekannteKomponente is TMyComponente then ...</b>).

    Tschüß

    Torste

    Comment


    • #3
      Ja, gibts:

      <pre>

      uses TypInfo;<br>

      function HasProperty(C: TObject; const PropName: String): Boolean;
      begin
      Result := (C <> nil) and (GetPropInfo(C.ClassInfo, PropName) <> nil);
      end;<br>

      </pre>

      Gruß Hage

      Comment


      • #4
        Hi Torsten,

        dieser Weg erfordert allerdings, daß die Prüf-Procedure alle meine Nachfahren kennt. <br>Wenn ich irgendwann eine neue TMyComponent erschaffe muß ich diese Procedure wieder anfassen und die neue TMyComponent in die Prüfkette mit einpflegen. <p>Und dies möchte ich vermeiden.

        Trotzdem danke

        Comment


        • #5
          Hi,

          klasse, genau das habe ich gesucht. <br>Übrigends ein interessante Unit dies TypInfo

          Comment


          • #6
            Hi Swen

            Was ist mit "Prüf-Procedure" und "Nachfahre von TMyComponent" gemeint ?

            Die funktionen der Unit "TypInfo" stehen jederzeit zur Verfügung und arbeiten direkt auf der RTTI von TObject. Damit können alle Objecte abgedeckt werden, auch solche dies noch garnicht gibt. TypInfo ist der Grund für den alltäglichen Preis den wir zahlen, wenn wir uns die Größe der generierten EXE Files anschauen

            Gruß Hage

            Comment


            • #7
              Hi Hagen,<p>Prüf-Procedure soll die Procedure sein, die prüft ob das aktive Control die Eigenschat x besitz.<br>Mit Nachfahren meine ich meine abgeleiteten Controls (TMyDBEdit, TMyDBMemo, ...).<p>Findest Du wirklich, daß die größe der Exe bei den heutigen Rechnersystemen noch interessant ist? Unser Client hat z. Z. ca 10 MB. Das öffnen dieser Exe steht aber in keinem Verhätnis zu der Zeit, die die Datenbankzugriffe über das Netz benötigen. ;

              Comment


              • #8
                Hi

                Mich störts weniger. Ich meinte ja nur das die vielen guten Möglichkeiten, wie eben RTTI und deren TypInfos und damit schließlich auf die Features der DesignTime, ihren Platz fordern. Es wird sich immer beklagt über die EXE Größen, den Vorteil bemerken die wenigsten bewusst.

                Gruß Hage

                Comment


                • #9
                  Hi,<br>>p>kannst Du Dir vorstellen, daß die Anzahl der WinControls, zur Laufzeit für Probleme sorgen kann?<p>Auf unserer Personal-Form haben wir 174 TControls, davon 122 TWinControls. Unsre Kunden-From hat etwa genausoviele TWinControls. Und damit ist auf einem Win89-System mit 128MB auch schon fast schicht, Ressourcen im Keller. Noch ein zwei kleine Formulare und das wars mit Windows.<br>Beim "großen" Windows (nt, 2000) macht das keine Probleme :

                  Comment


                  • #10
                    Hi

                    Jo, das ist ein generelles Problem vom 16Bit Windows
                    Das USER und GDI Interface ist intern alt und arbeitet auch heutzutage noch mit 16Bit Limits. Z.b. kann das USER Interface all Fensterhandles nur in 2x 64Kb speichern, d.h. für ALLE Fenster im System stehen nur 2x64Kb für deren Strukturen und Handles zur Verfügung, danach ist Schicht im Schacht.

                    Bei 2000/NT gibts solche Probleme nicht, da das USER Interface komplette anders arbeitet.

                    Gruß Hage

                    Comment

                    Working...
                    X