Announcement

Collapse
No announcement yet.

Nach nit visueller Komponente suchen???

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

  • Nach nit visueller Komponente suchen???

    Hallo,

    wie kann ich nach einer selbst definierten nicht visuellen Komponente suchen?

    z.B.

    Eine Komponente TAuto die ich 100mal vererbt habe.
    Die Unit in der die Komponente definiert ist, ist in fast allen Units meines Projektes über die Use-Klause eingebunden.
    Wie kann ich nun einer Variable "helpAuto, mit einem Zähler, die einzelnen Komponenten zuweisen.
    z.B.
    var helpAuto:Tauto
    for i:1 to 100 do begin
    helpAuto:=Tauto(FindComponent(‘Auto’+IntToStr(i)))
    end,
    Funktioniert leider nicht. helpAuto ist immer nil.

    Was habe ich falsch gemacht. Wie kann ich der Variable „helpAuto“ die einzelnen Komponenten zuweisen?

    Danke Michael

  • #2
    Hallo Michael,

    FindComponent ermittelt ja die Komponente ausschließlich an Hand Ihres Namens (string!). Wenn Du also Deine Komponenten nicht "Auto1", "Auto2" usw. genannt hast, bleibt der Wert immer nil.

    Es ist aber nicht ganz klar, was Du eigentlich bezwecken möchtest.

    Gruß Ul

    Comment


    • #3
      Hallo Uli,

      ich habe meine Autos Auto1,Auto2 usw bennant!

      Ich möchte die Eigenschafte per Schleife lesen u. beschreiben.

      Danke Michae

      Comment


      • #4
        Hallo Michael,

        befinden sich denn die Komponenten auf demselben Formular, von dem aus Du sie ansprichst?

        Beispiel (3 Panels auf einem Formular):

        <pre>
        procedure TForm1.Button1Click(Sender: TObject);
        var search : TPanel;
        i : integer;
        begin
        for i := 1 to 3 do
        begin
        search := TPanel(FindComponent('panel' + inttostr(i)));
        showmessage(search.name);
        end;
        end;
        </pre>

        Gruß Ul

        Comment


        • #5
          Hallo Uli,

          genau das ist mein Problem, die Komponenten befinden sich eben nicht auf im selben Formular. Die Komponenten sind in einer Unit definiert und über die use-Klausel in die jeweiligen Units mit Formen eingebunden.

          Was Du mir beschrieben hast, habe ich in meiner Frage (ganz oben) beschrieben funktioniert aber bei meiner selbst definierten Komponente nicht.

          Gruss
          Michae

          Comment


          • #6
            Hallo Michael,

            Alle Komponenten sind ja in irgendeiner Unit definiert, das Formular ist dann eben der Owner der Komponente (create(self)).

            Wie man "FindComponent" für die ganze Anwendung einsetzen kann, ist mir leider nicht bekannt.

            Viel Erfolg..

            Comment


            • #7
              <font face="Arial">
              Hi&nbsp;Michael.<br>
              Ihr&nbsp;habt&nbsp;etwas&nbsp;entscheidendes&nbsp; vergessen.<br>
              <br>
              &quot;TVImage&nbsp;:=&nbsp;FindComponent('TV'+IntT oStr(i)+'Image')&nbsp;as&nbsp;TImage;&quot;<br>
              <br>
              Dann&nbsp;klappt&nbsp;es&nbsp;auch&nbsp;mit&nbsp;d em&nbsp;suchen.<br>
              <br>
              for&nbsp;i&nbsp;:=&nbsp;1&nbsp;to&nbsp;16&nbsp;do& nbsp;begin<br>
              &nbsp;&nbsp;&nbsp;Cam&nbsp;:=&nbsp;FindComponent(' Cam'+IntToStr(i))&nbsp;as&nbsp;TImage;<br>
              &nbsp;&nbsp;&nbsp;TVImage&nbsp;:=&nbsp;FindCompone nt('TV'+IntToStr(i)+'Image')&nbsp;as&nbsp;TImage;< br>
              &nbsp;&nbsp;&nbsp;if&nbsp;(Cam&nbsp;&lt;&gt;&nbsp; nil)&nbsp;and&nbsp;(TVImage&nbsp;&lt;&gt;&nbsp;nil )&nbsp;then&nbsp;begin<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cam.Picture.As sign(BMPNoCam);<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TVImage.Pictur e.Assign(JPGLogoSmall);<br>
              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TVImage.Align& nbsp;:=&nbsp;alClient;<br>
              &nbsp;&nbsp;&nbsp;end;<br>
              end;<br>
              <br>
              Viele&nbsp;Gr&uuml;&szlig;e<br>
              &nbsp;&nbsp;Harald&nbsp;Binder<br>
              <br>
              </font&gt

              Comment


              • #8
                Hallo Harald,

                FindComponent('TV'+IntToStr(i)+'Image') as TImage;

                ist m.E. dasselbe wie:

                TImage(FindComponent('TV'+IntToStr(i)+'Image'));

                Daher sehe ich nicht, wie es nun mit dem Suchen klappen soll :-

                Comment


                • #9
                  Hi Uli.<br>
                  Du hast recht. Ich habe nicht richtig hingeschaut.<br>
                  <br>

                  Die Methode FindComponent gibt an, ob der Komponente eine bestimmte Komponente untergeordnet ist.<br>
                  Ist die Komponente den einer anderen Komponente untergeordnet??<br>
                  Auto1.Parent := Form1; oder so<br>
                  Vieleicht funktioniert es wenn Ihr beim erstellen der Komponenten<br>
                  gleich einer anderen Komponente unterordnet. <br>

                  Gruß<br>
                  Harald Binde

                  Comment

                  Working...
                  X