» »

Delphi - kako prepreči prečiti več zaporednih klikov gumba

Delphi - kako prepreči prečiti več zaporednih klikov gumba

civava23 ::

V Delphiju sem napisal preprost program , na katerem uporabniki s pritiskom na enega od gumbe gumb zaganjajo posamezne podprograme iz CD.
Problem pa se pojavi, ker se nekateri podprogrami zaradi velikosti nalagajo nekaj sekund iz CD, uporabniki pa medtem živčno pritiskajo na gumb za start, tako da zaganjajo program večkrat in samo še podaljšujeo potrebni čas zagona

Kako bi v spodnjo kodo za zagon vgradil nekakšno blokado - timeout, da sprejme program samo 1 klik (zagon ukaza open ) npr. vsakih 5 sekund

Je to mogoče ?



procedure TForm1.Button2Click(Sender: TObject);
begin
ShellExecute(Handle, 'open',
'Prog1.exe',nil,nil,SW_SHOWNORMAL);
end;

end.

krho ::

Na formo daj še en Timer, nastavi ga na x ms
v Form private section dodaj
dontStart: Boolean;

v form OnCreate dodaj
dontStart := False;

--
procedure TForm1.Button2Click(Sender: TObject);
begin
if not dontStart then begin
dontStart := True;
Timer1.Enabled := True;
ShellExecute(Handle, 'open', 'Prog1.exe',nil,nil,SW_SHOWNORMAL)
end;
end;

v onTimer dogodek dodaj

Timer1.Enabled := False;
dontStart := False;

end.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

LoneWolf ::

Jezes no, ne s tezkim topnistvom nad bolho... Pusti timerje in sistemske resource tam, kjer jih res kdo rabi. Tole se da cisto enostavno s kaksnim GetTickCount pogledat, koliko casa je poteklo od zadnjega klika na gumb.
Cisto prava moznost pa je seveda drugje kot igranje s timerji - preden zazenes nov proces, pogledas ce kak tak proces ze tece in ga ne zaganjas po nepotrebnem se enkrat.

civava23 ::

Hvala za odgovor obema.

LoneWolf, bi bil pripravljen mogoče napistati, kako naj bi ta GetTickCount izgledal v obstoječem programu za zagon ?

Hvala !

krho ::

@LoneWolf: Ok Tvoja rešitev je preprostejša. Timerji so bili prva stvar ki mi je pač padla napamet.

@fonziz:
v Form private section dodaj
firstAppStartTime: Longword;


v form OnCreate dodaj
firstAppStartTime := 0;



procedure TForm1.Button2Click(Sender: TObject);
begin
//time is in ms
if GetTickCount - firstAppStartTime > 5000 then begin
firstAppStartTime := GetTickCount;
ShellExecute(Handle, 'open', 'Prog1.exe',nil,nil,SW_SHOWNORMAL);
end;
end;
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

LoneWolf ::

Ce se ze gremo...

if GetTickCount - firstAppStartTime > 5000 then begin

Tole crkne na vsakih 49.7 dneh uptime-a masine. Mogoce je za uporabnika relevantno, mogoce ne. Nekateri tudi pustijo laufat Winse po dva meseca neprekinjeno. Programerji le moramo biti malo bolj temeljiti.

@fonziz, ti se pa zamisli. Resno.

Zgodovina sprememb…

  • spremenil: LoneWolf ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Delphi - izdelava igre

Oddelek: Programiranje
81098 (871) Nextor
»

[VB6] Program Odštevalnik - verjetno preprosta rešitev ampak jest je ne najdem (strani: 1 2 )

Oddelek: Programiranje
515024 (4498) Nerdor
»

RichEdit komponenta- tiskanje

Oddelek: Programiranje
6816 (727) mile
»

Delphi problem- MessageDlg

Oddelek: Programiranje
6848 (778) c3R4R
»

Delphi problem- zapiranje programa

Oddelek: Programiranje
71097 (1043) c3R4R

Več podobnih tem