Autor Beitrag
xan553
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Do 01.02.07 17:24 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 01.02.07 17:36 
Moin!

user profile iconxan553 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

user profile iconxan553 hat folgendes geschrieben:
bitte um denkanstoss

Worüber willst du denn nachdenken? ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
xan553 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 01.02.07 17:48 
Moin!

Schau dir mal Suche in: Delphi-Forum, Delphi-Library FINDCOMPONENT an, damit solltest du weiter kommen. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Do 01.02.07 17:59 
Wolln mal nicht so sein, aber nachschlagen solltest Du was es mit FindComponent auf sich hat. :wink:

ausblenden 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;


Zuletzt bearbeitet von Blackheart666 am Do 01.02.07 20:01, insgesamt 1-mal bearbeitet
xan553 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: 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!

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
xan553 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Do 01.02.07 18:55 
user profile iconxan553 hat folgendes geschrieben:

ich muss für jedes label eine neue integervariable deklarieren

Wie kommst du darauf?


user profile iconxan553 hat folgendes geschrieben:

ps habs noch nicht rausbekommen ^^

Dann würde ich meinen Vorschlag erstmal testen!

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
xan553 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Do 01.02.07 19:13 
user profile iconRenegade hat folgendes geschrieben:
user profile iconxan553 hat folgendes geschrieben:

ich muss für jedes label eine neue integervariable deklarieren

Wie kommst du darauf?


wenn ich diesen code benutze:

ausblenden 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Do 01.02.07 19:57 
also ich hab da mal en paar sachen versucht aber es klappt nichts zum bleistifft:

ausblenden Delphi-Quelltext
1:
2:
IF label1.caption = ''
    then label1.Caption:=TEdit(FindComponent('Edit' + IntToStr(i))).Text;
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: 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

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Do 01.02.07 20:13 
Ungetestet und nur auf die schnelle da hin geschrieben


ausblenden 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;

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: 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...

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: 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:

ausblenden 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

_________________
erare humanum est
xan553 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
if tLabel(findComponent('label'+IntToStr(n))).tag<>1					


und da sehe ich keinen zusammenhang

danke trotzdem
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Fr 02.02.07 00:11 
Wer lesen kann ist klar im Vorteil :|

_________________
erare humanum est
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Fr 02.02.07 01:04 
user profile iconxan553 hat folgendes geschrieben:

ausblenden 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//neue Zufallszahl
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Fr 02.02.07 09:29 
user profile iconRobinator 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 ;)

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."
Renegade
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 358

Win XP Pro, Win 7 Beta
BDS 2006
BeitragVerfasst: Fr 02.02.07 09:32 
user profile iconJayEff hat folgendes geschrieben:
user profile iconxan553 hat folgendes geschrieben:

ausblenden 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//neue Zufallszahl  
  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!

_________________
Sokrates (468 v.Chr. - 399 v.Chr.)
"Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen."