Delphi Syntax, wie lösbar?

styz

Mitglied
hi,
da wir nun in der schule auch schon mit delphi bzw pascal auf delphi basis :-( anfangen und nun ein kniffelspiel programmieren sollen, bin ich auf folgendes problem gestoßen:

also ich habe editfelder und buttons und und und, die immer Ablage1Edit, Ablage2Edit usw heißen, da ich den Sichtbarkeitszustand ändern , aber keine ehlend lange liste erstellen möchte,würde ich gern wissen ob man sowas wie folgendes schreiben kann:

for i := 1 to 5 do
AblageiEdit.Visible := True
i := i+1;

wenn ich das so aufschreibe sagt mir der compiler das er AblageiEdit nicht kennt. kann man dem compiler nicht irgendwie klar machen das es sich bei i um eine variable handelt?
ich hab mich schon ein bisschen umgeguckt aber nichts dazu gefunden, also entschuldigung das ich hier wegen so ner syntax frage nen thread erstelle =/
 
Zuletzt bearbeitet:

Patrick Kamin

Erfahrenes Mitglied
-

Hallo styz,
sowas ist mit Object Pascal nicht möglich. Du kannst aber eine GroupBox benutzen und dort alle Edit-Komponenten draufpacken. Dann kannst du über die Eigenschaft Controls auf alle Steuerelemente, die sich in der GroupBox befinden, zugreifen. Einfach mal in der Delphi Hilfe nachschauen.
TGroupBox.Controls
 

JoelH

Erfahrenes Mitglied
hmm,

natürlich ist dies möglich, man kann die Komponenten ansprechen wie dynamisch erstellte. Also via FindComponent etc. suchen und dann benamen und zeigen oder auch nicht.

Das geht schon.
 

styz

Mitglied
text editiert :

hmm,

das mit der GroupBox ist gut, schadet dem design auch nicht :)
jedoch find ich die Eigenschaft: Controls nicht, ich schau doch richtig im Objectinspector der GroupBox oder?

edit:

nebenbei, mir ist aufgefallen das diese "random funktion" die pascal hat ja nicht wirklich das gelbe vom ei ist. ich bekomme jedes mal die selben "random" werte raus (also wenn ich das programm neu starte und erneut anfange). ist schon ziehmlich unpraktisch wenn man jedesmal die selben zahlenfolgen rausbekommt.
 
Zuletzt bearbeitet:

JoelH

Erfahrenes Mitglied
hmm,

darum gibbet ja auch randomize time oder wie das heisst. Damit startest du den Zufallsgenerator mit der aktuellen Zeit und da die selten gleich ist wird dir auch nur selten die selbe Zahlenreihe wiederfahren ;)
 

styz

Mitglied
also ich hab das jetzt mal mit der group box machen wollen aber ich find einfach nicht den fehler:

ich hab ne group box so gesetzt das alle editfelder eingeschlossen sind, nur leider hat mein code keine wirkung :

Code:
var Control : TControl;
      i,x          : Integer;
...
for i := 0 to WuerfelBox.ControlCount -1 do
        begin
          Control := WuerfelBox.Controls[i];
          Control.Visible := True;
        end;

er setzt die editfelder einfach nicht sichtbar, gibt aber auch keinen fehler aus :rolleyes:

wenn ich

Control.Text := '0';

schreibe, sagt er mir das "text" ein nicht definierter bezeichner ist (steht ja auch so in der Hilfe datei, nur müsste das ja eigentlich lösbar sein wenn man z.b.

if Control = TEdit then Control.Text = '0';

schreibt, geht jedoch auch nicht :mad:


kann es sein das ich noch irgendwie klar machen muss das die edit felder zur group box gehören sollen?


styz
 

derGugi

Erfahrenes Mitglied
Du musst Delphi sagen, was für ein Control das ist. Zuerst überprüfst du, obs ein TEdit ist. Das machst du mittels if Control is TEdit then (und nicht = ). Dann sagst du, dass das Control ein TEdit ist. (Control as TEDit).text := 'hallo du'
 

styz

Mitglied
hmm okay,sehr umständlich das man eine typumwandlung vornehmen muss auch wenn ja eigentlich klar ist das es ein edit feld ist.

aber das eigentliche problem ist das scheinbar der code keine auswirkungen hat. auch das mit dem .text funktioniert jetzt (danke :)) nur irgendwie wird kein feld sichtbar gesetzt und auch der text wird nicht angezeigt. wie gesagt habe aber keine fehlermeldung bekommen.
 

derGugi

Erfahrenes Mitglied
wahrscheinlich hast du die GroupBox über die TextFelder gelegt. Oder die EditFelder gehören nicht zur GroupBox sondern sind einfach drüber gelegt. Das kannst du ausprobieren indem du ein Textfeld aus der Groupbox zu ziehen versuchst. Wenn es geht, dann gehört es nicht dazu und der Code wird gar nie in deine Schleife reingehen, da ControlCount = 0 ist. (Breakpoints helfen da auch viel....) Am besten machst du einfach erst eine Group box und erstellst darin dann die TextFelder.