| | |
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
Autor | Správa |
---|
Registrovaný: 29.05.11 Prihlásený: 29.05.11 Príspevky: 6 Témy: 1 |
Dobrý deň.
Prosím vás potreboval by som poradiť.
Robím program, ktorý zobrazuje obrázky.Využívam pri tom aj Timer. Chcem aby si užívateľ sám zadal, po kolkých sekundách sa majú obrázky zmeniť no neviem ako na to.
Zatial som napísal toto:
var
Form1: TForm1;
implementation
var tm: integer = 0;
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
V:integer;
begin
Timer1.Enabled:=false;
tm:= tm+1;
V:=StrToInt(Edit1.Text);
if tm = 1 then image1.Picture.LoadFromFile('1.bmp');
if tm = (2*V+1) then image1.Picture.loadfromfile('2.bmp');
if tm = (3*V+1) then image1.Picture.loadfromfile('3.bmp');
if tm = (4*V+1) then image1.Picture.loadfromfile('4.bmp');
if tm = (5*V+1) then image1.Picture.loadfromfile('5.bmp');
if tm = (6*V+1) then image1.Picture.loadfromfile('6.bmp');
if tm = (7*V+1) then close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
end.
Možno že je to úplne zle, neviem, prosím vás pre to o radu ako to dosiahnuť.
|
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 29.05.2011 12:35 | |
|
Ved uz len za riadok:
Kód: V:=StrToInt(Edit1.Text); pridaj: Kód: Timer1.Intervar := V * 1000;
Urcite by som ti to ale oporucil este supnut do bloku try/except ak by bolo zadane nespravne cislo.
|
|
Registrovaný: 29.05.11 Prihlásený: 29.05.11 Príspevky: 6 Témy: 1 | Napísal autor témy petercvm: 29.05.2011 14:11 | |
|
Diki moc ale aj tak mi to nejde ked spustim program tak mi hned vyskoci chyba .... nevedel som ako to mam sem dat tak tu je link co mi vyskoci: http://imageshack.us/photo/my-images/807/chyba.jpg/
Vedel by si mi s tym pomoct?
...no a to co si mi odporucil tak nanestastie neviem ako sa to robi...
|
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 29.05.2011 14:30 | |
|
Ved prave to je chyba, ktora vznikne pri konverzii, co si mal obalit do bloku try/except. Nemam po ruke Delphi a uz dlho som v nom nerobil, takze skusim iba tak naslepo:
Kód: var Form1: TForm1;
implementation var tm: integer = 0;
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject); var V:integer; begin
tm:= tm+1;
try V:= StrToInt(Edit1.Text); except on E:exception do begin ShowMessage( 'Neplatne cislo!' ); Timer1.Enabled := false; exit; end; end;
Timer1.Intervar := V * 1000;
if tm = 1 then image1.Picture.LoadFromFile('1.bmp'); if tm = (2*V+1) then image1.Picture.loadfromfile('2.bmp'); if tm = (3*V+1) then image1.Picture.loadfromfile('3.bmp'); if tm = (4*V+1) then image1.Picture.loadfromfile('4.bmp'); if tm = (5*V+1) then image1.Picture.loadfromfile('5.bmp'); if tm = (6*V+1) then image1.Picture.loadfromfile('6.bmp'); if tm = (7*V+1) then close;
end;
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=true; end;
end.
Na zaciatku nastav v Object Inspectore Timer1.Enabled na false, ak nemas. Potom po kliknuti na Button1 sa spusti Timer1. Tie if-y si mozes zmenit na prepinac case, bolo by to prehladnejsie a tomu prepinaniu obrazkov som trocha nepochopil ako to riesis, takze som ti do toho nic nemenil.
|
|
Registrovaný: 12.10.06 Prihlásený: 25.04.24 Príspevky: 20312 Témy: 79 Bydlisko: Banska Byst... | Napísal shiro: 29.05.2011 14:32 | |
|
taka chyba hodne casto skace, ked program spustis napr. s prazdnym polom na zadavanie a nemas osetrenu vynimku.
A k tomu try/except...delphi ma tak fasa spravenu napovedu aj s prikladmi, ze to musi chapat kazdy.
_________________ Ryzen 7 3700X | SilentiumPC Fera 3 | Asrock X570M Pro4 | Patriot Viper 4 Blackout 16GB DDR4-3600 CL17 | Gainward RTX4060 Ti Pegasus 8GB | Samsung 970evo Plus 250GB NVMe | Corsair MP510 1TB NVMe | Samsung 980 Pro 2TB NVMe | Corsair RM550x | 32" Samsung ViewFinity S60UA | 3x Noctua NF-S12B redux 1200 PWM Xiaomi Mi 9 Lite 64GB |
|
Registrovaný: 29.05.11 Prihlásený: 29.05.11 Príspevky: 6 Témy: 1 | Napísal autor témy petercvm: 29.05.2011 14:48 | |
|
diki moc ... pomohlo to ... a hlavne to, ze som v Object Inspectore nastavil Timer na false ..... ale aj tak mi to nejde dobre - obrazky nehadze
Chcem to proste tak, ze ked si zadam do editu napr 2, tak kazde dve sekundy sa mi zobrazi iny obrazok, a ked prejdu vsetky tak sa program sam ukonci --- pomozete este?
|
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 29.05.2011 14:54 | |
|
Jasne, ze pomozeme. To som ti pisal, ze nechapem tomu postupu, ako ich menis. Uprav toto:
Kód: if tm = 1 then image1.Picture.LoadFromFile('1.bmp'); if tm = (2*V+1) then image1.Picture.loadfromfile('2.bmp'); if tm = (3*V+1) then image1.Picture.loadfromfile('3.bmp'); if tm = (4*V+1) then image1.Picture.loadfromfile('4.bmp'); if tm = (5*V+1) then image1.Picture.loadfromfile('5.bmp'); if tm = (6*V+1) then image1.Picture.loadfromfile('6.bmp'); if tm = (7*V+1) then close; na toto: Kód: if tm = 1 then image1.Picture.LoadFromFile('1.bmp'); if tm = 2 then image1.Picture.loadfromfile('2.bmp'); if tm = 3 then image1.Picture.loadfromfile('3.bmp'); if tm = 4 then image1.Picture.loadfromfile('4.bmp'); if tm = 5 then image1.Picture.loadfromfile('5.bmp'); if tm = 6 then image1.Picture.loadfromfile('6.bmp'); if tm = 7 then begin Timer1.Enabled := false; tm := 0; exit; end;
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14572 Témy: 66 Bydlisko: Žilina |
s delphi nerobím, ale jedna vec mi nedá pokoj - prečo Fico neodporúčaš použiť "else if"? Alebo ešte lepšie "switch", keďže tento príklad si o to priam žiada...? V teórii by mali byť oba prípady rýchlejšie ako toto.. (jasné, možno v tomto konkrétnom prípade by to bolo zanedbateľný zisk, ale nie je lepšie sa to naučiť raz a poriadne?)
_________________ C#, PHP, ... |
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 29.05.2011 15:06 | |
|
Fico píše: Tie if-y si mozes zmenit na prepinac case, bolo by to prehladnejsie a tomu prepinaniu obrazkov som trocha nepochopil ako to riesis, takze som ti do toho nic nemenil.
Nenapisal som mu presnu syntax, lebo som si nebol isty, aka je - som "preuceny" na C syntax.
|
|
Registrovaný: 29.05.11 Prihlásený: 29.05.11 Príspevky: 6 Témy: 1 | Napísal autor témy petercvm: 29.05.2011 15:46 | |
|
Obrazky vsak stale nejdu same od sema .... ked vsak klikam na tlacidlo po hodne dlhej chvili sa zmenia ... ale naozaj musim dost dlho klikat .... neviete co by s tym mohlo byt ?
Tu je cely zdrojovy ako ho mam:
var
Form1: TForm1;
implementation
var tm: integer = 0;
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var
V:integer;
begin
Timer1.Enabled:=false;
tm:= tm+1;
try
V:= StrToInt(Edit1.Text);
except
on E:exception do begin
ShowMessage( 'Neplatne cislo!' );
Timer1.Enabled := false;
exit;
end;
end;
Timer1.Interval := V * 1000;
if tm = 1 then image1.Picture.LoadFromFile('1.bmp');
if tm = 2 then image1.Picture.loadfromfile('2.bmp');
if tm = 3 then image1.Picture.loadfromfile('3.bmp');
if tm = 4 then image1.Picture.loadfromfile('4.bmp');
if tm = 5 then image1.Picture.loadfromfile('5.bmp');
if tm = 6 then image1.Picture.loadfromfile('6.bmp');
if tm = 7 then begin
Timer1.Enabled := false;
tm := 0;
exit;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
end.
|
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 29.05.2011 15:59 | |
|
1.) Videl si niekde v mojom kode, aby som ti tam dal do tela timer-u, aby sa ti hned po starte vypol?
Kód: procedure TForm1.Timer1Timer(Sender: TObject); var V:integer; begin Timer1.Enabled:=false;
Cize odstran riadok Timer1.Enabled:=false; a pozri si este raz pozornejsie, ako som ti to napisal predtym.
2.) Ked vkladas nejaky kod tu na forum, tak ho cely oznac a hore na paneli mas znacku "code", klikni na nu aby bol kod lepsie citatelny.
|
|
Registrovaný: 29.05.11 Prihlásený: 29.05.11 Príspevky: 6 Témy: 1 | Napísal autor témy petercvm: 29.05.2011 16:18 | |
|
Aha dakujem skusim to .... to som mal ja najprv tak spravene no potom som to musel v objectinpexctore vypat a zabudol som to dat prec ... vdaka za radu budem to tak robit // pridané po 16 minútach od posledného príspevkudiki moc uz to slape jak hodinky
...este by som mal jednu otazku ... mam jeden Form na nom edit a tlacitko. do editu si zadam nejaku hodnotu. Ked kliknem na tlacitko tak sa mi vyvola druhy Form. na nom mam dalsie tlacitko, pod ktorym mam uz program. ako mam urobit aby si program zobral hodnotu z editu, ktory je na prvom Form-e?? Da sa to vobec nejako? alebo ten edit musim mat len na tom forme kde mam aj tlacitko s programom
|
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 29.05.2011 16:25 | |
|
Jasne, da sa to. Do uses jednoducho pridaj unit s druhym formularom, teda napr sme v Unit2:
Kód: uses Form1; a potom snim pracuj napr takto: Kód: procedure TForm2.Button1Click(Sender: TObject); var nejake_data: string; begin nejake_data := Form1.Edit1.Text; end;
Nieco podobne sa riesilo tu, mrkni na to:
http://www.pcforum.sk/post-vp1035469.html#1035469
|
|
Registrovaný: 29.05.11 Prihlásený: 29.05.11 Príspevky: 6 Témy: 1 | Napísal autor témy petercvm: 29.05.2011 17:27 | |
|
Diki ide to. ... heh ale ved to je pochopitelne
|
|
| Stránka: 1 z 1
| [ Príspevkov: 14 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|