Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - zufallsausgabe
xan553 - Do 01.02.07 17:24
Titel: zufallsausgabe
hy,
ich habe mir das tut durchgelesen und auch kapiert ^^ keine angst
nun zum thema, ich möchte gerne ein programm schreiben bei dem ich ein paar editfelder habe in die ich etwas eingebe.
wenn ich auf einen button klicke, sonn es die eingaben der editfelder in beliebiger reienfolge in laybels ausgeben
kann ich dies mit "random" bewerkstelligen?
bitte um denkanstoss
Narses - Do 01.02.07 17:36
Moin!
xan553 hat folgendes geschrieben: |
ich möchte gerne ein programm schreiben bei dem ich ein paar editfelder habe in die ich etwas eingebe.
wenn ich auf einen button klicke, sonn es die eingaben der editfelder in beliebiger reienfolge in laybels ausgeben
kann ich dies mit "random" bewerkstelligen? |
Ja. :D
xan553 hat folgendes geschrieben: |
bitte um denkanstoss |
Worüber willst du denn nachdenken? ;)
cu
Narses
xan553 - Do 01.02.07 17:38
über gott und die welt natürlich
und darüber wie ich es mit ramdom bewerkständigen könnte
Narses - Do 01.02.07 17:48
Moin!
Schau dir mal
FINDCOMPONENT an, damit solltest du weiter kommen. ;)
cu
Narses
Blackheart666 - Do 01.02.07 17:59
Wolln mal nicht so sein, aber nachschlagen solltest Du was es mit FindComponent auf sich hat. :wink:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var i:Integer; begin i:=Random(5)+1; Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; end;
procedure TForm1.FormCreate(Sender: TObject); begin Randomize; end; |
xan553 - Do 01.02.07 18:30
ah ok, mit diesem quelltext habe ich mich jetzt auseinandergesetzt,
aber ein prob hab ich noch, ich würde geren verhindern das mir eines meiner labels nichts anzeigt und das mir mehrere labels das selbe anzeigen würde ich auch gerne verhindern
Renegade - Do 01.02.07 18:39
Beispiel:
Du gehst die Edits von a nach z in einer Schleife durch.
Bei jedem Edit ermittelst du per Zufall ein Label
Dann prüfst du ob im Label schon was steht - wenn nein - Label.Caption:=Edit.text
ansonsten neues Label per Zufall ermitteln lassen.
Wenn in den Labels Grundsätzlich schon was steht kann man mit dem Tag-Attribut nochwas anderes in gleicher Art und Weise basteln.
Und ja ich habe ganz bewusst kein Codebeispiel hier gepostet - sollst ja ein bischen dabei lernen.
PS: (Diese Lösung ist nicht ganz fein - sollte aber funktionieren)
PPS: (Diese Lösung ist eigentlich *mist*e - macht aber das was du willst)
PPPS: Wäre schön wenn du selbst rausbekommst wa an dieser Lösung mieß ist!
xan553 - Do 01.02.07 18:53
was daran mieß sein könnte:
ich muss für jedes label eine neue integervariable deklarieren
und wenn ich den code nicht bearbeite, erscheint das ergebniss in der titelleiste des programms
ps habs noch nicht rausbekommen ^^
Renegade - Do 01.02.07 18:55
xan553 hat folgendes geschrieben: |
ich muss für jedes label eine neue integervariable deklarieren |
Wie kommst du darauf?
xan553 hat folgendes geschrieben: |
ps habs noch nicht rausbekommen ^^ |
Dann würde ich meinen Vorschlag erstmal testen!
xan553 - Do 01.02.07 19:13
Renegade hat folgendes geschrieben: |
xan553 hat folgendes geschrieben: |
ich muss für jedes label eine neue integervariable deklarieren |
Wie kommst du darauf? |
wenn ich diesen code benutze:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var Edit:Array[1..4]of TEdit; i:Integer; begin i:=Random(10)+1; label1.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; label2.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; end;
end. |
zeigen mit label1 und 2 immer das selbe an,
benutze ich aber statdessen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var Edit:Array[1..4]of TEdit; i:Integer; i1:integer; begin i:=Random(10)+1; i1:=Random(4)+1; label1.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; label2.Caption:=TEdit(FindComponent('Edit' + IntToStr(i1))).Text; end;
end. |
variieren( hoffe das schreibt man so) meine ergebnisse
udn noch was, ist dein vorschlag für jedes editfeld eine schleife zu machen nicht etwas aufwendig?
xan553 - Do 01.02.07 19:57
also ich hab da mal en paar sachen versucht aber es klappt nichts zum bleistifft:
Delphi-Quelltext
1: 2:
| IF label1.caption = '' then label1.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; |
Blackheart666 - Do 01.02.07 20:00
Den Array kannst Du weglassen, hatt Ich nur vergessen zu löschen.
Und variablen kannst Du zusammenfassen mit Komma getrennt.
var
i,j,k,l:Integer
Renegade - Do 01.02.07 20:13
Ungetestet und nur auf die schnelle da hin geschrieben
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure wuerfeln; var i, n: integer; frei: boolean; begin frei:=false; n:=0; for i:=1 to 5 do begin while Frei<>true do begin n:=random(5)+1; if tLabel(findComponent('Label'+IntToStr(n))).tag<>1 then Frei:=true; end; tLabel(findComponent('Label'+IntToStr(n))).caption:=tEdit(findComponent('Edit'+IntToStr(i))).text; tLabel(findComponent('Label'+IntToStr(n))).tag:=1; frei:=false; end;
end; |
Renegade - Do 01.02.07 20:15
Ach ja - und wäre noch schön wenn du mir jetzt sagen könntest wo die Macke in dem Code ist!
Tip: Ablaufgeschwindigkeit / Unnötige Durchläufe...
Robinator - Do 01.02.07 20:58
Die Macke in dem code ist, dass es unter umständen ewig dauern kann. Mal als Beispiel... du hast 100 labels, eins hat noch keine Caption. Nun kann es verdammt lange dauern, bis du per Random auf die entsprechende Zahl kommst.
Ich hab schonmal in nem anderen Thread geschrieben, wie man nen array mit zufallszahlen befüllt, die nur einmal vorkommen ;)
hier nochmal der code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| Procedure CreateRandomBla; var MyArr : Array of Integer; RandArr : Array[0..X] of Integer; i, ind : integer; Procedure Delete(Index : integer); var i : integer; begin for i := index to Length(MyArr) - 2 do MyArr[i] := MyArr[i + 1]; SetLength(MyArr, Length(MyArr) - 1); end; begin SetLength(MyArr, X + 1); for i := 0 to X do MyArr[i] := i; for i := 0 to X do begin ind := Random(Length(MyArr)); RandArr[i] := MyArr[ind]; Delete(ind); end; end; |
Gruss, Rob
xan553 - Do 01.02.07 21:08
ich glaube nicht das mir der code viel weiter hilft, denn der fehler meines codes liegt denke ich hier
Delphi-Quelltext
1:
| if tLabel(findComponent('label'+IntToStr(n))).tag<>1 |
und da sehe ich keinen zusammenhang
danke trotzdem
Robinator - Fr 02.02.07 00:11
Wer lesen kann ist klar im Vorteil :|
JayEff - Fr 02.02.07 01:04
xan553 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var Edit:Array[1..4]of TEdit; i:Integer; begin i:=Random(10)+1; label1.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; i:=Random(10)+1; label2.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; end; | |
So vielleicht. Warum eigentlich die Abfrage mit dem Tag? Und wo steht sie eigentlich? Du hast bisher nur gesagt, darin läge der Fehler, nicht wo die Zeile eigentlich steht. Ausserdem redest du von "Deinem Code", den leider bisher noch niemand zu gesicht bekommen hat, wodurch dir auch niemand dabei helfen kann.
Renegade - Fr 02.02.07 09:29
Robinator hat folgendes geschrieben: |
Die Macke in dem code ist, dass es unter umständen ewig dauern kann. Mal als Beispiel... du hast 100 labels, eins hat noch keine Caption. Nun kann es verdammt lange dauern, bis du per Random auf die entsprechende Zahl kommst. |
Verräter ;)
Renegade - Fr 02.02.07 09:32
JayEff hat folgendes geschrieben: |
xan553 hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var Edit:Array[1..4]of TEdit; i:Integer; begin i:=Random(10)+1; label1.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; i:=Random(10)+1; label2.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; end; | |
So vielleicht. Warum eigentlich die Abfrage mit dem Tag? Und wo steht sie eigentlich? Du hast bisher nur gesagt, darin läge der Fehler, nicht wo die Zeile eigentlich steht. Ausserdem redest du von "Deinem Code", den leider bisher noch niemand zu gesicht bekommen hat, wodurch dir auch niemand dabei helfen kann. |
So wird das nicht funktionieren, da du - wies der Zufall so will - doppelte Werte erhälst und dafür andere Fehlen. Und genau dieses wird mit der in MEINEM Code verwendeten .tag-Abfrage "ausgeschaltet".
Was er mit dem .tag gmacht haben will - keine Ahnung!
JayEff - Fr 02.02.07 17:10
xan553 hat folgendes geschrieben: |
Renegade hat folgendes geschrieben: | xan553 hat folgendes geschrieben: |
ich muss für jedes label eine neue integervariable deklarieren |
Wie kommst du darauf? |
wenn ich diesen code benutze:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var Edit:Array[1..4]of TEdit; i:Integer; begin i:=Random(10)+1; label1.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; label2.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; end;
end. |
zeigen mit label1 und 2 immer das selbe an,
benutze ich aber statdessen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.Button1Click(Sender: TObject); var Edit:Array[1..4]of TEdit; i:Integer; i1:integer; begin i:=Random(10)+1; i1:=Random(4)+1; label1.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text; label2.Caption:=TEdit(FindComponent('Edit' + IntToStr(i1))).Text; end;
end. |
variieren( hoffe das schreibt man so) meine ergebnisse |
Ich habe meine Antwort nur auf diesen Post bezogen und klar gemacht, dass man trotzdem mit einer Variable auskommt und nicht soviele Variablen wie Labels braucht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!