delphi: var in objekt

    • delphi: var in objekt

      Also ich möchte Labels und Editfelder anzeigen lassen, sobald der in einem bestimmten Editfeld eingetragene Wert die Nummer des Labels/Editfelds erreicht. Da es hier um Anzahl von Tracks einer CD geht, brauche ich Zahlen bis ~20, da wäre ein Array schon praktisch. Daher:

      procedure TForm1.EditAnzahlChange(Sender: TObject);
      var a,i: integer;
      begin
      a:=strtoint(editanzahl.Text);
      for i:=1 to a do
      begin
      inttostr(i);
      edit.show;
      label[i].show;
      end;
      end;

      Mir ist klar, dass das so nicht funktioniert, aber kann mir jemand sagen, wie ich sowas machen kann? Suche mich schon dumm und dämlich und probiere rum, komme aber auf kein Ergebnis...

      Edit: Aufgrund von Langeweile hab ich bis 10 jetzt die ausführliche Form gemacht, die halt ewig lang ist, aber an sich funktioniert.
      Und hier gibts ein Problem:
      Solange eine Zahl im editfeld steht, variiert die Anzahl der editfelder und labels wie gewollt. Sobald man aber alle Zahlen im Feld löscht, kommt die Fehlermeldung: '' is not a valid integer value
      aber wenn das feld leer ist, soll einfach keins der felder sichtbar sein, wie mach ich das also?

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Riku55 ()

    • Sichtbar/Unsichtbar ist die Sparte visible.

      Ich würde mit case arbeiten. Wenn i einen bestimmten Wert annimmt, soll bestimmtes Editfeld visible werden.

      case i of
      1: Edit1.visible:=true;
      2: Edit2.visivle:=true;
      end;

      Um das vorher angezeigte Editfeld unsichtbar zu machen, solltest du vor der Abfrage von i alle anderen Editfelder unsichtbar machen.
    • Original von Fuchspower
      Sichtbar/Unsichtbar ist die Sparte visible.

      Ich würde mit case arbeiten. Wenn i einen bestimmten Wert annimmt, soll bestimmtes Editfeld visible werden.

      case i of
      1: Edit1.visible:=true;
      2: Edit2.visivle:=true;
      end;

      Um das vorher angezeigte Editfeld unsichtbar zu machen, solltest du vor der Abfrage von i alle anderen Editfelder unsichtbar machen.


      ah, case spart jedenfalls schonmal ne menge schreibarbeit, danke xD
      ändern lässts sich auch, prima.

      Nur habe ich immer noch ein Problem:
      wenn das editfeld mit der Anzahl leer ist (bzw. leer wird, am Anfang ist es ja auch leer, und da passiert noch ncihts), erhalte ich eine Fehlermeldung, da '' eben kein gültiges integer ist. Is ja soweit richtig und verständlich, aber wie umgehe ich das?

      Edit: Ich habs jetz so gelöst:
      if editanzahl.Text= '' then editanzahl.text:=inttostr(0);
      vermeidet immerhin den Error und hat auch die gewünschte Wirkung, dass die Felder wieder unsichtbar werden. Bin aber für andere Vorschläge dennoch offen.
    • Original von Riku55
      Edit: Ich habs jetz so gelöst:
      if editanzahl.Text= '' then editanzahl.text:=inttostr(0);
      vermeidet immerhin den Error und hat auch die gewünschte Wirkung, dass die Felder wieder unsichtbar werden. Bin aber für andere Vorschläge dennoch offen.


      Da die leeren Felder nicht angezeigt werden sollen, sehe ich kein Problem darin.
    • Original von Fuchspower
      Original von Riku55
      Edit: Ich habs jetz so gelöst:
      if editanzahl.Text= '' then editanzahl.text:=inttostr(0);
      vermeidet immerhin den Error und hat auch die gewünschte Wirkung, dass die Felder wieder unsichtbar werden. Bin aber für andere Vorschläge dennoch offen.


      Da die leeren Felder nicht angezeigt werden sollen, sehe ich kein Problem darin.


      joa, stimmt eigentlich xD
      hab mich inzwischen auch damit angefreundet, noch ein editanzahl.SelectAll; hinzugefügt, damits benutzerfreundlicher wird.
      Passt, danke :)

      Edit:
      Durch meinen Lehrer in Informatik habe ich jetzt eine deutlich kürzere Variante gefunden. Wens interessiert:
      for i:=1 to a do
      begin
      (Findcomponent ('Edit' + inttostr(i)) as TEdit).Visible:=true;
      (Findcomponent ('Label' + inttostr(i)) as TLabel).Visible:=true;
      end;

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Riku55 ()