Forum » Programiranje » 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.
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.
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
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.
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 !
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
v form OnCreate dodaj
@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
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.
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Delphi - izdelava igreOddelek: Programiranje | 1164 (937) | Nextor |
» | [VB6] Program Odštevalnik - verjetno preprosta rešitev ampak jest je ne najdem (strani: 1 2 )Oddelek: Programiranje | 5250 (4724) | Nerdor |
» | RichEdit komponenta- tiskanjeOddelek: Programiranje | 887 (798) | mile |
» | Delphi problem- MessageDlgOddelek: Programiranje | 922 (852) | c3R4R |
» | Delphi problem- zapiranje programaOddelek: Programiranje | 1154 (1100) | c3R4R |