Announcement

Collapse
No announcement yet.

edit[i] in for to do-schleife nutzen

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

  • edit[i] in for to do-schleife nutzen

    hallo leute

    ich möchte folgendes tun:

    <pre>
    for i:= 0 to 5 do
    edit[i].text := 'sowieso';
    </pre>

    ist es denn möglich, den objektnamen auf diese weise oder ähnlich in einer schleife zu nutzen.

    danke für eure hilfe
    tom
    ps.: dieses beispiel hat natürlich nicht funktioniert

  • #2
    (FindComponent('Edit' +IntToStr(i)) AS TEdit).Text<br>
    Probleme von dem Codeschnitzel:<br>
    Gibt es die gesuchte Komponente nicht, wird NIL zurückgegeben. Das prüfe ich hier nicht und es würde im Moment knallen. Des weiteren ist auch nicht sichergestellt, das die gefundene Komp. ein TEdit ist. Wenn's nicht so ist, kommt eine Exception. Aber das kann man bei Bedarf ja alles abfangen.<p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      hallo mario,

      Leider bekomme ich die fehlermeldung: inkompatible typen: 'TColor' und 'TEdit'. kann ich denn nicht auf die color des edit zugreifen ?
      <pre>
      for i := 1 to 4 do
      begin
      if (FindComponent('Ed_textcol' +IntToStr(i)) AS TEdit).Text = '' then
      Tablemaker_Haupt.StringGrid3.Cells[0,1]:=''
      else
      Tablemaker_Haupt.StringGrid3.Cells[0,1] := 'color:'+ ConvertToHtmlColor(FindComponent('Ed_textcol' +IntToStr(i)) AS TEdit).Color+';';
      end;
      </pre>
      danke to

      Comment


      • #4
        sorry mein fehler,

        so ist es richtig. ich hatte einfach nur einen satz klammern zu wenig.
        <pre>
        for i := 1 to 4 do
        begin
        if (FindComponent('Ed_textcol' +IntToStr(i)) AS TEdit).Text = '' then
        Tablemaker_Haupt.StringGrid3.Cells[i-1,1]:=''
        else
        Tablemaker_Haupt.StringGrid3.Cells[i-1,1] := 'color:'+ ConvertToHtmlColor((FindComponent('Ed_textcol' +IntToStr(i)) AS TEdit).Color)+';';
        end;
        </pre>
        ps.: wenn du fehler oder überflüssiges findest, kannst du mir sie gern schreiben.
        danke
        to

        Comment


        • #5
          <pre>

          type
          TForm1 = class(TForm)
          private
          function GetEdit(Index: Integer): TEdit;
          public
          procedure Test;
          property Edit[Index: Integer): TEdit read GetEdit;
          end;<br>

          function TForm1.GetEdit(Index: Integer): TEdit;
          begin
          Result := FindComponent('Edit_' + IntToStr(Index)) as TEdit;
          end;<br>

          procedure TForm1.Test;
          var
          I: Integer;
          begin
          for I := 0 to 10 do
          Edit[I].Text := '';
          end;<br>

          </pre>

          Gruß Hage

          Comment


          • #6
            Hallo Hagen,
            <br>
            ich danke für deine antwort. kannst du mir deine proceduren bitte erklären ? mir scheint es extrem sinnvoll, es so zu tun, wie du, da ich derzeit sehr viel mehr quelltext benötige für meine proceduren.<br>
            <br>
            allerdings habe ich meine edits nicht alle mit edit[i] bezeichnet. vielleicht sollte ich dir beschreiben wie ich es habe. ich habe 4 spalten mit je 10 reihen. also 10 verschiedene editbezeichnungen pro spalte, welche sich nur spaltenbezogen nur durch den anhang 1-4 unterscheiden.
            <br>
            danke dir<br>
            rud

            Comment


            • #7
              OK, also zweidimensional. Ich würde nun auch dieses Design in der property Edit[] anwenden, etwa so:

              <pre>

              type
              TForm1 = class(TForm)
              private
              function GetEdit(X,Y: Integer): TEdit;
              public
              property Edit[X, Y: Integer]: TEdit read GetEdit;
              end;<br>

              function TForm1.GetEdit(X, Y: Integer): TEdit;
              begin
              Result := FindComponent(Format('Edit_%d_%d', [X, Y])) as TEdit;
              end;<br>

              </pre>

              deine Edit's bekommen nun die Namen "Edit_0_0", "Edit_0_1", "Edit_0_2" für die Spalte 0 und zeilen 0..2 und "Edit_1_0" -> "Edit_1_1" -> "Edit_1_2" für Spalte 1 usw.<br>
              Allerdings lohnt sich dann aber auch der Aufwand ein Array[X,Y] of TEdit als privates Feld des TForm1 zu benutzten, also so:

              <pre>

              type
              TForm1 = class(TForm)
              private
              FEdits: array[0..5, 0..5] of TEdit;
              published
              procedure FormCreate(Sender: TObject);
              end;<br>

              procedure TForm1.FormCreate(Sender: TObject);
              var
              X,Y: Integer;
              begin
              // hier wird zum Start einmal das array FEdits gefüllt
              for X := 0 to 5 do
              for Y := 0 to 5 do
              FEdits[X, Y] := FindComponent(Format('Edit_%d_%d', [X, Y])) as TEdit;
              end;<br>

              </pre>

              Im weiteren Verlauf wird dann immer auf das array FEdits zugegriffen, also z.B. FEdits[1, 1].Text := 'Test';

              Gruß Hage

              Comment


              • #8
                Hallo Hagen,

                ich staune immer wieder über Deine eleganten Lösungen!

                Gruß Ul

                Comment


                • #9
                  Danke, ich empfinde es aber gar nicht so "elegant", wie soll man es sonst sauber coden ?<br>
                  Elegant wäre es wenn man im obigen Beispiel z.B.
                  <pre>

                  for X := Low(FEdits) to High(FEdits) do
                  for Y := Low(FEdits[X]) to High(FEdits[X]) do

                  </pre>

                  benutzt hätte. Dann braucht man nur noch die Deklaration von FEdits:.. abändern um eine Spalte/Zeile von Edits hinzufügen zu können. Allerdings der Einfachheit und dem Verständiss halber, habe ich darauf verzichtet.

                  Gruß Hage

                  Comment


                  • #10
                    :-) Noch besser!

                    Ich meinte damit, überhaupt eine Property zu benutzen. Mit einer Schleife wie in Antwort #3 geht es ja auch, aber eben nicht so "elegant".

                    Gruß Ul

                    Comment

                    Working...
                    X