31/08/2004

problemas em fechar o formulario principal

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


Mahdak

Respostas

01/09/2004

Mahdak

sobe
------

pessoal, é urgente...


Responder Citar

02/09/2004

Mahdak

sobe


Responder Citar

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]


Responder Citar