Ĺ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
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?