ďťż

Ładny brzuch

Witam, mam taki funkcję:
function SetPrivilege(PrivilegeName: string; Enable: Boolean): Boolean; var tpPrev, TP: TTokenPrivileges; Token: THandle; dwRetLen: DWord; begin Result := False; OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token); TP.PrivilegeCount := 1; if LookupPrivilegeValue(nil, PChar(PrivilegeName), TP.Privileges[0].LUID) then begin if Enable then TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else TP.Privileges[0].Attributes := 0; dwRetLen := 0; Result := AdjustTokenPrivileges(Token, False, TP, SizeOf(tpPrev), tpPrev, dwRetLen); end; CloseHandle(token); end;
I kod z zamknięciem komputera:
SetPrivilege('SeShutdownPrivilege', True); ExitWindowsEx(EWX_POWEROFF or EWX_FORCE,0); SetPrivilege('SeShutdownPrivilege', False);
Jak teraz opóźnić ten proces o np. 10 sekund? Tzn. gdy wywołam np. ten kod poprzez Button1 to chciałbym, aby w np. Labelu (lub jakimś innym komponencie) został wyświetlony pozostały czas (czyli od 10 w dół liczenie...). Czy można takie coś zrobić?

I co mogę wpisać w Button2, aby ten proces anulować?

Z GÓRY DZIĘKUJE ZA ODPOWIEDZI!




Witam, mam taki funkcję:
function SetPrivilege(PrivilegeName: string; Enable: Boolean): Boolean; var tpPrev, TP: TTokenPrivileges; Token: THandle; dwRetLen: DWord; begin Result := False; OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token); TP.PrivilegeCount := 1; if LookupPrivilegeValue(nil, PChar(PrivilegeName), TP.Privileges[0].LUID) then begin if Enable then TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else TP.Privileges[0].Attributes := 0; dwRetLen := 0; Result := AdjustTokenPrivileges(Token, False, TP, SizeOf(tpPrev), tpPrev, dwRetLen); end; CloseHandle(token); end;
I kod z zamknięciem komputera:
SetPrivilege('SeShutdownPrivilege', True); ExitWindowsEx(EWX_POWEROFF or EWX_FORCE,0); SetPrivilege('SeShutdownPrivilege', False);
Jak teraz opóźnić ten proces o np. 10 sekund? Tzn. gdy wywołam np. ten kod poprzez Button1 to chciałbym, aby w np. Labelu (lub jakimś innym komponencie) został wyświetlony pozostały czas (czyli od 10 w dół liczenie...). Czy można takie coś zrobić?

I co mogę wpisać w Button2, aby ten proces anulować?

Z GÓRY DZIĘKUJE ZA ODPOWIEDZI!

timer

Instrukcja sleep powoduje przerwanie działania programu możesz zrobić tak po kliknięciu na button na labelu jest wyświetlana liczba 10 następnie instrukcja sleep i znowu label caption ustawiasz na 9 itd...


timer
Nowości mi nie powiedziałeś... Tylko jak go użyć?



globalna zmienna integer np. "doKonca"
timer na 1000ms
w button1
doKonca := 30 (czy ile tam sobie chcesz sekund) timer1 niech zacznie tykać
w onTicku:
doKonca := doKonca - 1; jeżeli doKonca = 0 to zamknij system
w button2
timer1 niech przestanie tykać


globalna zmienna integer np. "doKonca"
timer na 1000ms
w button1
doKonca := 30 (czy ile tam sobie chcesz sekund) timer1 niech zacznie tykać
w onTicku:
doKonca := doKonca - 1; jeżeli doKonca = 0 to zamknij system
w button2
timer1 niech przestanie tykać

Ok, Dzięki! Wszystko działa jak należy :) Tylko teraz powiedz mi jak wyświetlić ten pozostały czas w jakimś komponencie?

jakisKomponent.Caption := IntToStr(doKonca);?


jakisKomponent.Caption := IntToStr(doKonca);?
No kodzik działa, ale jak zrobić, żeby mi odliczało? Bo teraz to jak ustawiłem 20, to cały czas pisze 20 :(

Wstawiłeś to pewnie do zdarzenia, które jest wywoływane raz, po kliknięciu. Czas pozostały do wyłączenia zmienia się przy każdym tyknięciu timera, które wywołuje się 20 razy. Wniosek?

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •