problemas em fechar o formulario principal
31/08/2004
0
- salve a todos os colegas....
- estou fazendo uma travinha simples para o windows, onde no evento oncreate do formulario principal ele trava o windows e deixa só a minha aplicação(trava) ativa.
- para destrava-la, chama-se um outro formulario, onde u usuario digita a sua senha e clica no botao destravar, mas o problema é que o programa trava tudo e destrava tambem, porem o formulario principal nao fecha, e tenho que dar um CTRL+ALT+DEL para finaliza-lo.
- abaixo segue o código do evento oncreate do formulario principal e do botao destravar, do formulario destravar.
- fico grato se alguem puder me ajudar...
--------------------------- FORMULARIO PRINCIPAL---------------------
procedure TPrincipal.FormCreate(Sender: TObject);
var
i:integer;
OldValue : LongBool;
begin
For i := 1 to 8000 do
begin
Splash.PB.Position := Splash.PB.Position + 1;
Splash.Update;
end;
Label_Data.Caption := FormatDateTime(´dddd, dd ´de´ mmmm ´de´ yyy´,Date);
{*************************************TRAVA********************************************}
keybd_event(VK_LWIN, 0, 0, 0); // ---------------------------
keybd_event(Ord(´M´), 0, 0, 0); // minimizar todas as
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0); // aplicações, mesnos a trava
//ShowWindow(Principal.Handle, SW_SHOWNORMAL); // ---------------------------
SystemParametersInfo(97, Word(True), @OldValue, 0); // desabilita o (CTRL+ALT+DEL),(Alt+Tab), (Ctrl+Esc)
ShowWindow(FindWindow(nil,´Program Manager´),SW_HIDE); //Esconder icones do desktop
ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_HIDE); // AutoOcultar a barra de tarefas
{**************************************************************************************}
end;
procedure TPrincipal.Button3Click(Sender: TObject);
begin
Sobre.ShowModal;
end;
procedure TPrincipal.Btn_usuariosClick(Sender: TObject);
begin
Cadastro_usuario.Showmodal;
end;
procedure TPrincipal.Button2Click(Sender: TObject);
begin
end;
{FUNCAO RESPONSAVEL PELO BLOQUEIO DO ALT+F4 }
Function GetStateK (Key: integer): boolean;
begin
Result := Odd (GetKeyState (Key));
end;
procedure TPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If Not fecha Then // ---------------
Action := caNone Else// ALT+F4
Action := caFree; // ---------------
end;
procedure TPrincipal.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then // ALT+F4
fecha := false; // ALT+F4
end;
---------------------------FIM DO FORMULARIO PRINCIPAL------------------
---------------------------FORMULARIO DESTRAVAR------------------------
{FUNCAO RESPONSAVEL PELO BLOQUEIO DO ALT+F4}
Function GetStateK (Key: integer): boolean;
begin
Result := Odd (GetKeyState (Key));
end;
procedure TDestravar.EventoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if GetStateK (VK_LMENU) And (Key = VK_F4) Then
fecha:=true;
end;
procedure TDestravar.BTN_destravarClick(Sender: TObject);
var
user,pass : String;
OldValue : LongBool;
//Key:word;
begin
if Edit_Usu.Text = ´´ then
begin
MessageDlg(´Não foi especificado um usuário!´, mtError, [mbOK], 0);
Exit;
Edit_Usu.clear;
end;
try
Tbl_User.FindKey([Edit_Usu.Text,Edit_Pass.Text]);
except
on exception do
MessageDlg(´Usuário ou Senha especificada é inválida!´,mtError, [mbOK], 0);
end;
user := Tbl_User.FieldByName(´Usuario´).AsString;
Pass := Tbl_User.FieldByName(´Senha´).AsString;
//verifica usuario
if edit_usu.text = Tbl_User.FieldByName(´Usuario´).AsString then
begin
//verifica senha
if edit_Pass.text = Tbl_User.FieldByName(´Senha´).AsString then
begin
{*********************}
{*************************************DESTRAVA*****************************************}
ShowWindow(FindWindow(nil,´Program Manager´),SW_SHOW); // MOSTRA ICONES DO DESKTOP
ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_RESTORE); // RESTAURAR a barra de tarefas
SystemParametersInfo(97, Word(False), @OldValue, 0); // HABILITAR O (CTRL+ALT+DEL),(Alt+Tab), (Ctrl+Esc)
{**************************************************************************************}
Principal.OnKeyDown := EventoKeyDown;
close;
{*********************}
end
else begin
MessageDlg(´Senha especificada é inválida ou inexistente, por favor tente novamente!´,mtError, [mbOK], 0);
Edit_Usu.clear;
Edit_Pass.clear;
Edit_Usu.SetFocus;
end;
end
else begin
MessageDlg(´Usuário ou Senha especificada é inválida ou inexistente, por favor tente novamente!´,mtError, [mbOK], 0);
Edit_Usu.clear;
Edit_Pass.clear;
Edit_Usu.SetFocus;
exit;
end;
end;
procedure TDestravar.Button2Click(Sender: TObject);
begin
Tbl_User.Cancel;
Close;
end;
procedure TDestravar.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then // ALT+F4
fecha := true;
end;
procedure TDestravar.FormClose(Sender: TObject; var Action: TCloseAction);
var
Key: Word;
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then // ALT+F4
fecha := true;
end;
---------------------------- FIM DO FORMULARIO DESTRAVAR--------------
- estou fazendo uma travinha simples para o windows, onde no evento oncreate do formulario principal ele trava o windows e deixa só a minha aplicação(trava) ativa.
- para destrava-la, chama-se um outro formulario, onde u usuario digita a sua senha e clica no botao destravar, mas o problema é que o programa trava tudo e destrava tambem, porem o formulario principal nao fecha, e tenho que dar um CTRL+ALT+DEL para finaliza-lo.
- abaixo segue o código do evento oncreate do formulario principal e do botao destravar, do formulario destravar.
- fico grato se alguem puder me ajudar...
--------------------------- FORMULARIO PRINCIPAL---------------------
procedure TPrincipal.FormCreate(Sender: TObject);
var
i:integer;
OldValue : LongBool;
begin
For i := 1 to 8000 do
begin
Splash.PB.Position := Splash.PB.Position + 1;
Splash.Update;
end;
Label_Data.Caption := FormatDateTime(´dddd, dd ´de´ mmmm ´de´ yyy´,Date);
{*************************************TRAVA********************************************}
keybd_event(VK_LWIN, 0, 0, 0); // ---------------------------
keybd_event(Ord(´M´), 0, 0, 0); // minimizar todas as
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0); // aplicações, mesnos a trava
//ShowWindow(Principal.Handle, SW_SHOWNORMAL); // ---------------------------
SystemParametersInfo(97, Word(True), @OldValue, 0); // desabilita o (CTRL+ALT+DEL),(Alt+Tab), (Ctrl+Esc)
ShowWindow(FindWindow(nil,´Program Manager´),SW_HIDE); //Esconder icones do desktop
ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_HIDE); // AutoOcultar a barra de tarefas
{**************************************************************************************}
end;
procedure TPrincipal.Button3Click(Sender: TObject);
begin
Sobre.ShowModal;
end;
procedure TPrincipal.Btn_usuariosClick(Sender: TObject);
begin
Cadastro_usuario.Showmodal;
end;
procedure TPrincipal.Button2Click(Sender: TObject);
begin
end;
{FUNCAO RESPONSAVEL PELO BLOQUEIO DO ALT+F4 }
Function GetStateK (Key: integer): boolean;
begin
Result := Odd (GetKeyState (Key));
end;
procedure TPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If Not fecha Then // ---------------
Action := caNone Else// ALT+F4
Action := caFree; // ---------------
end;
procedure TPrincipal.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then // ALT+F4
fecha := false; // ALT+F4
end;
---------------------------FIM DO FORMULARIO PRINCIPAL------------------
---------------------------FORMULARIO DESTRAVAR------------------------
{FUNCAO RESPONSAVEL PELO BLOQUEIO DO ALT+F4}
Function GetStateK (Key: integer): boolean;
begin
Result := Odd (GetKeyState (Key));
end;
procedure TDestravar.EventoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if GetStateK (VK_LMENU) And (Key = VK_F4) Then
fecha:=true;
end;
procedure TDestravar.BTN_destravarClick(Sender: TObject);
var
user,pass : String;
OldValue : LongBool;
//Key:word;
begin
if Edit_Usu.Text = ´´ then
begin
MessageDlg(´Não foi especificado um usuário!´, mtError, [mbOK], 0);
Exit;
Edit_Usu.clear;
end;
try
Tbl_User.FindKey([Edit_Usu.Text,Edit_Pass.Text]);
except
on exception do
MessageDlg(´Usuário ou Senha especificada é inválida!´,mtError, [mbOK], 0);
end;
user := Tbl_User.FieldByName(´Usuario´).AsString;
Pass := Tbl_User.FieldByName(´Senha´).AsString;
//verifica usuario
if edit_usu.text = Tbl_User.FieldByName(´Usuario´).AsString then
begin
//verifica senha
if edit_Pass.text = Tbl_User.FieldByName(´Senha´).AsString then
begin
{*********************}
{*************************************DESTRAVA*****************************************}
ShowWindow(FindWindow(nil,´Program Manager´),SW_SHOW); // MOSTRA ICONES DO DESKTOP
ShowWindow(FindWindow(´Shell_TrayWnd´, nil), SW_RESTORE); // RESTAURAR a barra de tarefas
SystemParametersInfo(97, Word(False), @OldValue, 0); // HABILITAR O (CTRL+ALT+DEL),(Alt+Tab), (Ctrl+Esc)
{**************************************************************************************}
Principal.OnKeyDown := EventoKeyDown;
close;
{*********************}
end
else begin
MessageDlg(´Senha especificada é inválida ou inexistente, por favor tente novamente!´,mtError, [mbOK], 0);
Edit_Usu.clear;
Edit_Pass.clear;
Edit_Usu.SetFocus;
end;
end
else begin
MessageDlg(´Usuário ou Senha especificada é inválida ou inexistente, por favor tente novamente!´,mtError, [mbOK], 0);
Edit_Usu.clear;
Edit_Pass.clear;
Edit_Usu.SetFocus;
exit;
end;
end;
procedure TDestravar.Button2Click(Sender: TObject);
begin
Tbl_User.Cancel;
Close;
end;
procedure TDestravar.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then // ALT+F4
fecha := true;
end;
procedure TDestravar.FormClose(Sender: TObject; var Action: TCloseAction);
var
Key: Word;
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then // ALT+F4
fecha := true;
end;
---------------------------- FIM DO FORMULARIO DESTRAVAR--------------
Mahdak
Curtir tópico
+ 0
Responder
Posts
02/09/2004
Macario
olá programador, boa tarde.
acho que seu problema esta com o form Splash
--------------------------- FORMULARIO PRINCIPAL---------------------
procedure TPrincipal.FormCreate(Sender: TObject);
var
i:integer;
OldValue : LongBool;
[color=red:21203fd9b8]begin
For i := 1 to 8000 do
begin
Splash.PB.Position := Splash.PB.Position + 1;
Splash.Update;
end; [/color:21203fd9b8]
acreste essa linha após o for
[b:21203fd9b8]FreeAndnil(Splash);[/b:21203fd9b8]
acho que seu problema esta com o form Splash
--------------------------- FORMULARIO PRINCIPAL---------------------
procedure TPrincipal.FormCreate(Sender: TObject);
var
i:integer;
OldValue : LongBool;
[color=red:21203fd9b8]begin
For i := 1 to 8000 do
begin
Splash.PB.Position := Splash.PB.Position + 1;
Splash.Update;
end; [/color:21203fd9b8]
acreste essa linha após o for
[b:21203fd9b8]FreeAndnil(Splash);[/b:21203fd9b8]
Responder
Clique aqui para fazer login e interagir na Comunidade :)