Delphi - losovanie cisel, par problemov

Programovacie jazyky, rady, poradňa...
viper1993
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1011
Registrovaný: 28 feb 2008, 16:54
Bydlisko: Prievidza
Kontaktovať používateľa:

Delphi - losovanie cisel, par problemov

Príspevok od používateľa viper1993 »

zdravim, som zaciatocnik v delphi a mam par problemov:

mam program ktory vyzrebuje 20 nahodnych cisel ktore vypise do dvadsiatich Editov.

Prvy problem je ze chcem aby ich vypisovalo postupne t.j. Vyzrebuje cislo do Edit1, pocka sekundu, vyzrebuje cislo do Edit2, pocka atd...
Skusal som pomedzi to podavat Sleep ale vtedy len spocita tie Sleep a po stlaceni tlacidla pocka a potom vylosuje vsetky naraz.

Druhy problem je ze kod mam (vid. dole) a chcem nieco aby som to tam nemusel mat komplet vsetko vypisane od edit1 az po edit20, urcite sa to robi nejako inak ale u mna bolo hlavne ze to fungovalo :)

Kód: Vybrať všetko

unit keno;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Edit17: TEdit;
    Edit18: TEdit;
    Edit19: TEdit;
    Edit20: TEdit;
    Label1: TLabel;
    MainMenu1: TMainMenu;
    About1: TMenuItem;
    About2: TMenuItem;
    Label2: TLabel;
    Label3: TLabel;
    Edit21: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure About2Click(Sender: TObject);
    procedure About1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
var
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t: integer;

implementation

uses Unit2;

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
randomize;
a:= 1 + random(81);
b:= 1 + random(81);
c:= 1 + random(81);
d:= 1 + random(81);
e:= 1 + random(81);
f:= 1 + random(81);
g:= 1 + random(81);
h:= 1 + random(81);
i:= 1 + random(81);
j:= 1 + random(81);
k:= 1 + random(81);
l:= 1 + random(81);
m:= 1 + random(81);
n:= 1 + random(81);
o:= 1 + random(81);
p:= 1 + random(81);
q:= 1 + random(81);
r:= 1 + random(81);
s:= 1 + random(81);
t:= 1 + random(81);



Edit1.Text:= IntToStr(a);
Edit2.Text:= IntToStr(b);
Edit3.Text:= IntToStr(c);
Edit4.Text:= IntToStr(d);
Edit5.Text:= IntToStr(e);
Edit6.Text:= IntToStr(f);
Edit7.Text:= IntToStr(g);
Edit8.Text:= IntToStr(h);
Edit9.Text:= IntToStr(i);
Edit10.Text:= IntToStr(j);
Edit11.Text:= IntToStr(k);
Edit12.Text:= IntToStr(l);
Edit13.Text:= IntToStr(m);
Edit14.Text:= IntToStr(n);
Edit15.Text:= IntToStr(o);
Edit16.Text:= IntToStr(p);
Edit17.Text:= IntToStr(q);
Edit18.Text:= IntToStr(r);
Edit19.Text:= IntToStr(s);
Edit20.Text:= IntToStr(t);


end;

procedure TForm1.About2Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.About1Click(Sender: TObject);
begin
Form2.Show;
end;

end.
Dik za rady.
ⓢⓐⓟⓛⓔⓡ
Star
Star
Používateľov profilový obrázok
Príspevky: 621
Registrovaný: 06 jún 2008, 15:07
Bydlisko: nedaleko od hojko.com

Príspevok od používateľa ⓢⓐⓟⓛⓔⓡ »

neviem ci som ta spravne pochopil, namiesto spleep si mohol pouzit timer http://en.allexperts.com/q/Delphi-1595/ ... imer-1.htm
viper1993
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1011
Registrovaný: 28 feb 2008, 16:54
Bydlisko: Prievidza
Kontaktovať používateľa:

Príspevok od používateľa viper1993 »

nad tym som tiez rozmyslal ale timer dokaze robit len jeden cyklus a ten robi stale dookola v pravidelnom intervale nie?
ⓢⓐⓟⓛⓔⓡ
Star
Star
Používateľov profilový obrázok
Príspevky: 621
Registrovaný: 06 jún 2008, 15:07
Bydlisko: nedaleko od hojko.com

Príspevok od používateľa ⓢⓐⓟⓛⓔⓡ »

ano, ale mozes ho zastavit ja by som si spravil 20 timerov a vzdy by som pripocital jednu sekundu napr. timer1 (1000ms) timer2 (2000ms) atd. a vzdy posledny priakz v timery by bol timer1.destroy tusim..
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

sapler napísal:ano, ale mozes ho zastavit ja by som si spravil 20 timerov a vzdy by som pripocital jednu sekundu napr. timer1 (1000ms) timer2 (2000ms) atd. a vzdy posledny priakz v timery by bol timer1.destroy tusim..
môj bože, 20 timerov, len to nie :D
ⓢⓐⓟⓛⓔⓡ
Star
Star
Používateľov profilový obrázok
Príspevky: 621
Registrovaný: 06 jún 2008, 15:07
Bydlisko: nedaleko od hojko.com

Príspevok od používateľa ⓢⓐⓟⓛⓔⓡ »

hlavné je, že splni ucel :oops:
viper1993
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1011
Registrovaný: 28 feb 2008, 16:54
Bydlisko: Prievidza
Kontaktovať používateľa:

Príspevok od používateľa viper1993 »

no dik vyskusam nieco, ale uz teraz tam mam 20 editov, 20 premennych a este ked pribudne 20 timerov tak to bude zaujimave :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Príspevok od používateľa BX »

Do delphi sa size nevyznam, ale je nejaka moznost robit to cez pole a cyklus FOR, do kazdeho dat nieco v zmysle: "20x urob: new Edit(); pole:=random...; timer..."
:?: :oops: (Ak som vedla tak sory, ale OOP ako OOP :D)
viper1993
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1011
Registrovaný: 28 feb 2008, 16:54
Bydlisko: Prievidza
Kontaktovať používateľa:

Príspevok od používateľa viper1993 »

tak som to nakoniec spravil tak primitivne a to tak ze som spravil tych 20 timerov :D

Kód: Vybrať všetko

unit keno;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Edit17: TEdit;
    Edit18: TEdit;
    Edit19: TEdit;
    Edit20: TEdit;
    Label1: TLabel;
    MainMenu1: TMainMenu;
    About1: TMenuItem;
    About2: TMenuItem;
    Label2: TLabel;
    Label3: TLabel;
    Edit21: TEdit;
    Timer1: TTimer;
    Timer2: TTimer;
    Timer3: TTimer;
    Timer4: TTimer;
    Timer5: TTimer;
    Timer6: TTimer;
    Timer7: TTimer;
    Timer8: TTimer;
    Timer9: TTimer;
    Timer10: TTimer;
    Timer11: TTimer;
    Timer12: TTimer;
    Timer13: TTimer;
    Timer14: TTimer;
    Timer15: TTimer;
    Timer16: TTimer;
    Timer17: TTimer;
    Timer18: TTimer;
    Timer19: TTimer;
    Timer20: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure About2Click(Sender: TObject);
    procedure About1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Timer5Timer(Sender: TObject);
    procedure Timer6Timer(Sender: TObject);
    procedure Timer7Timer(Sender: TObject);
    procedure Timer8Timer(Sender: TObject);
    procedure Timer9Timer(Sender: TObject);
    procedure Timer10Timer(Sender: TObject);
    procedure Timer11Timer(Sender: TObject);
    procedure Timer12Timer(Sender: TObject);
    procedure Timer13Timer(Sender: TObject);
    procedure Timer14Timer(Sender: TObject);
    procedure Timer15Timer(Sender: TObject);
    procedure Timer16Timer(Sender: TObject);
    procedure Timer17Timer(Sender: TObject);
    procedure Timer18Timer(Sender: TObject);
    procedure Timer19Timer(Sender: TObject);
    procedure Timer20Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
var
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,x: integer;
var cakaj: string;
implementation

uses Unit2;

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
randomize;
a:= 1 + random(81);
b:= 1 + random(81);
c:= 1 + random(81);
d:= 1 + random(81);
e:= 1 + random(81);
f:= 1 + random(81);
g:= 1 + random(81);
h:= 1 + random(81);
i:= 1 + random(81);
j:= 1 + random(81);
k:= 1 + random(81);
l:= 1 + random(81);
m:= 1 + random(81);
n:= 1 + random(81);
o:= 1 + random(81);
p:= 1 + random(81);
q:= 1 + random(81);
r:= 1 + random(81);
s:= 1 + random(81);
t:= 1 + random(81);

Timer1.Enabled:= True;
Timer2.Enabled:= True;
Timer3.Enabled:= True;
Timer4.Enabled:= True;
Timer5.Enabled:= True;
Timer6.Enabled:= True;
Timer7.Enabled:= True;
Timer8.Enabled:= True;
Timer9.Enabled:= True;
Timer10.Enabled:= True;
Timer11.Enabled:= True;
Timer12.Enabled:= True;
Timer13.Enabled:= True;
Timer14.Enabled:= True;
Timer15.Enabled:= True;
Timer16.Enabled:= True;
Timer17.Enabled:= True;
Timer18.Enabled:= True;
Timer19.Enabled:= True;
Timer20.Enabled:= True;
end;

procedure TForm1.About2Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.About1Click(Sender: TObject);
begin
Form2.Show;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit1.Text:= IntToStr(a);
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
Edit2.Text:= IntToStr(b);
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
Edit3.Text:= IntToStr(c);
end;

procedure TForm1.Timer4Timer(Sender: TObject);
begin
Edit4.Text:= IntToStr(d);
end;

procedure TForm1.Timer5Timer(Sender: TObject);
begin
Edit5.Text:= IntToStr(e);
end;

procedure TForm1.Timer6Timer(Sender: TObject);
begin
 Edit6.Text:= IntToStr(f);
end;
.
.
.
//TAKTO TO POKRACUJE AZ DO 20

end.
Teraz sa pytam existuje nejaky sposob ako to zjednodusit aby tam nemuselo byt napriklad 20 tych Timer1.Enabled:= True; ale bolo by napriklad nieco ako Timer(x).Enabled:= True; pri com x by bolo od 1 do 20?

//pre K- vravim ze som zaciatocnik, keby viem spravit super prehladny kod tak sa tu nepytam :wink:
Nadeo
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2202
Registrovaný: 04 nov 2006, 19:38
Bydlisko: BA/LV
Kontaktovať používateľa:

Príspevok od používateľa Nadeo »

Ano da, je to jeden zo zakladnych cyklov. To co si napisal je tak trocha ... zbytocne.

/edit, ovela lahsie by to bolo timerom nastavenym na 1sec, a pri kazdom cykle timera by si pripocital 1 k premennej X napr, a ked by dosiahlo X 20, tak jednoducho vypnes timer...
viper1993
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1011
Registrovaný: 28 feb 2008, 16:54
Bydlisko: Prievidza
Kontaktovať používateľa:

Príspevok od používateľa viper1993 »

jj akurat neviem ako sa pise napriklad:
mam toto:

Kód: Vybrať všetko

Edit1.Text:='';
Edit2.Text:='abc';
Edit3.Text:='abc';
Edit4.Text:='abc';
Edit5.Text:='abc';
Edit6.Text:='abc';
Edit7.Text:='abc';
Edit8.Text:='abc';
Edit9.Text:='abc';
Edit10.Text:='abc';
a chcem vediet ako to nahradim niecim takymto:

Kód: Vybrať všetko

for x:= 1 to 20 do begin
Edit(x).Text:='abc'; 
end;
ako to mam napisat aby mi to teraz robilo to co chcem? teraz mi to hodi error. ako mam zapisat to X za Edit? neviem ci do zatvorky alebo ako? da sa to?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

nechce sa mi otvárať delphi aby som to skúsil, ale nejak takto by to malo byť:

Kód: Vybrať všetko

for i:=form1.ComponentCount-1 downto 0 do begin
      if (form1.Components[i].ClassName = 'TEdit') then
        TEdit(form1.Components[i]).text:='abc';
    end;
ale to ti vypíše do všetkých editov. Ak ich máš teda viac ako 20 a chceš to iba do tých 20, tak si to budeš musieť ešte ošetriť
viper1993
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1011
Registrovaný: 28 feb 2008, 16:54
Bydlisko: Prievidza
Kontaktovať používateľa:

Príspevok od používateľa viper1993 »

Tak som sa aj vdaka radam co som nasiel tu zbavil cca 80 zbytocnych riadkov kodu(20 editov, 40 timerov, 20 premennych) a uz mi tam ostava len tych 20 procedur s timermi ktore potrebujem 'skratit'. Poradil by niekto?

Kód: Vybrať všetko

unit keno;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Edit17: TEdit;
    Edit18: TEdit;
    Edit19: TEdit;
    Edit20: TEdit;
    Label1: TLabel;
    MainMenu1: TMainMenu;
    About1: TMenuItem;
    About2: TMenuItem;
    Label2: TLabel;
    Label3: TLabel;
    Edit21: TEdit;
    Timer1: TTimer;
    Timer2: TTimer;
    Timer3: TTimer;
    Timer4: TTimer;
    Timer5: TTimer;
    Timer6: TTimer;
    Timer7: TTimer;
    Timer8: TTimer;
    Timer9: TTimer;
    Timer10: TTimer;
    Timer11: TTimer;
    Timer12: TTimer;
    Timer13: TTimer;
    Timer14: TTimer;
    Timer15: TTimer;
    Timer16: TTimer;
    Timer17: TTimer;
    Timer18: TTimer;
    Timer19: TTimer;
    Timer20: TTimer;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure About2Click(Sender: TObject);
    procedure About1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Timer5Timer(Sender: TObject);
    procedure Timer6Timer(Sender: TObject);
    procedure Timer7Timer(Sender: TObject);
    procedure Timer8Timer(Sender: TObject);
    procedure Timer9Timer(Sender: TObject);
    procedure Timer10Timer(Sender: TObject);
    procedure Timer11Timer(Sender: TObject);
    procedure Timer12Timer(Sender: TObject);
    procedure Timer13Timer(Sender: TObject);
    procedure Timer14Timer(Sender: TObject);
    procedure Timer15Timer(Sender: TObject);
    procedure Timer16Timer(Sender: TObject);
    procedure Timer17Timer(Sender: TObject);
    procedure Timer18Timer(Sender: TObject);
    procedure Timer19Timer(Sender: TObject);
    procedure Timer20Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
var
x,y,z: Integer;
var
  Cisla : array[1..21] of integer;

implementation

uses Unit2;

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);

begin
randomize;
for z:= 1 to 21 do begin
Cisla[z]:= 1 + random(81);
end;

for y:= 0 to form1.ComponentCount-1 do begin
   if (form1.Components[y].ClassName = 'TTimer') then
        TTimer(form1.Components[y]).Enabled:=True;
    end;

end;

procedure TForm1.About2Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TForm1.About1Click(Sender: TObject);
begin
Form2.Show;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit1.Text:= IntToStr(Cisla[1]);
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
Edit2.Text:= IntToStr(Cisla[2]);
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
Edit3.Text:= IntToStr(Cisla[3]);
end;

procedure TForm1.Timer4Timer(Sender: TObject);
begin
Edit4.Text:= IntToStr(Cisla[4]);
end;

procedure TForm1.Timer5Timer(Sender: TObject);
begin
Edit5.Text:= IntToStr(Cisla[5]);
end;

procedure TForm1.Timer6Timer(Sender: TObject);
begin
 Edit6.Text:= IntToStr(Cisla[6]);
end;

procedure TForm1.Timer7Timer(Sender: TObject);
begin
Edit7.Text:= IntToStr(Cisla[7]);
end;

procedure TForm1.Timer8Timer(Sender: TObject);
begin
 Edit8.Text:= IntToStr(Cisla[8]);
end;

procedure TForm1.Timer9Timer(Sender: TObject);
begin
 Edit9.Text:= IntToStr(Cisla[9]);
end;

//TAKTO TO POKRACUJE AZ DO 20

procedure TForm1.Button2Click(Sender: TObject);
begin

for y:= 0 to form1.ComponentCount-1 do begin
      if (form1.Components[y].ClassName = 'TTimer') then
        TTimer(form1.Components[y]).Enabled:=False;
    end;


for x:= 0 to Form1.ComponentCount-1 do begin
      if (Components[x].ClassName = 'TEdit') then
        TEdit(Components[x]).text:='';
    end;

end;

end.
Napísať odpoveď