Quando clicar em ALT F4 abrir um form sem fechar o programa?
Tentei assim, mais ele fechar o programa direto!
Onde estou errando?
Abraços
Function GetStateK (Key: integer): boolean; begin Result := Odd (GetKeyState (Key)); end; procedure TfrmPrincipal.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin If GetStateK (VK_LMENU) And (Key = VK_F4) Then frmFechar.ShowModal; end;
Onde estou errando?
Abraços
Redoctober
Curtidas 0
Respostas
Dopi
23/06/2004
Experimente bloquear o fechamento do Form que recebe o ALT-F4 em CloseQuery.
GOSTEI 0
Minuto
23/06/2004
public
fecha:boolean;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
Function GetStateK (Key: integer): boolean;
begin
Result := Odd (GetKeyState (Key));
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then
begin
form2.ShowModal;
fecha:=false;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If Not fecha Then
Action := caNone Else
Action := caFree;
end;
procedure TForm1.btfecharClick(Sender: TObject);
begin
fecha:=true;
close;
end;
end.
fecha:boolean;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
Function GetStateK (Key: integer): boolean;
begin
Result := Odd (GetKeyState (Key));
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then
begin
form2.ShowModal;
fecha:=false;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If Not fecha Then
Action := caNone Else
Action := caFree;
end;
procedure TForm1.btfecharClick(Sender: TObject);
begin
fecha:=true;
close;
end;
end.
GOSTEI 0
Redoctober
23/06/2004
Tentei mais não consegui nada!!! Quando eu faço a combinação ALT+F4, ele fecha o programa direto.
Veja a minha Unit principal
unit Uprincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ActnMan, ActnColorMaps, ToolWin,
ActnCtrls, ActnMenus, CustomizeDlg, StdActns, ActnList, ComCtrls, ImgList, DB, ADODB, ExtCtrls, Buttons,
XPStyleActnCtrls, WinSock, ScktComp, MSNPopUp, ZAbstractRODataset,
ZAbstractDataset, ZDataset, ZConnection, XPMan;
type
TfrmPrincipal = class(TForm)
ImageList1: TImageList;
Timer1: TTimer;
StatusBar1: TStatusBar;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
Label4: TLabel;
Label3: TLabel;
Label13: TLabel;
Label15: TLabel;
Label14: TLabel;
Label16: TLabel;
Label5: TLabel;
Label6: TLabel;
Shape5: TShape;
Shape6: TShape;
Shape7: TShape;
Shape8: TShape;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label17: TLabel;
Label18: TLabel;
Panel2: TPanel;
Shape1: TShape;
Shape2: TShape;
Panel3: TPanel;
Label2: TLabel;
Shape3: TShape;
Shape4: TShape;
Shape9: TShape;
Shape10: TShape;
Shape11: TShape;
Shape12: TShape;
Shape13: TShape;
Shape14: TShape;
Label19: TLabel;
Label53: TLabel;
Label21: TLabel;
Label51: TLabel;
Label23: TLabel;
Label50: TLabel;
Label25: TLabel;
Label52: TLabel;
ActionManager1: TActionManager;
ActionMainMenuBar1: TActionMainMenuBar;
finalizar: TAction;
consulta: TAction;
empre: TAction;
proce: TAction;
desenvol: TAction;
software: TAction;
zerar: TAction;
configuracao: TAction;
popabrir: TMSNPopUp;
CS: TClientSocket;
CS_A: TClientSocket;
Memo1: TMemo;
ADOConnection1: TZConnection;
ADOQuery11: TZQuery;
Empresa: TZQuery;
QueryBarraStatus: TZQuery;
ADOQuery22: TZQuery;
ADOQuery33: TZQuery;
ADOQuery1: TZQuery;
Image2: TImage;
Image1: TImage;
Label1: TLabel;
XPManifest1: TXPManifest;
Bevel1: TBevel;
procedure Empresa1Click(Sender: TObject);
procedure Processo1Click(Sender: TObject);
procedure Sair1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ConsultarProcesso1Click(Sender: TObject);
procedure Sobre1Click(Sender: TObject);
procedure Software1Click(Sender: TObject);
procedure finalizarExecute(Sender: TObject);
procedure consultaExecute(Sender: TObject);
procedure empreExecute(Sender: TObject);
procedure proceExecute(Sender: TObject);
procedure desenvolExecute(Sender: TObject);
procedure softwareExecute(Sender: TObject);
procedure zerarExecute(Sender: TObject);
procedure CSError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure configuracaoExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure CSConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure CS_AError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure CS_AConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btfecharClick(Sender: TObject);
private
{ Private declarations }
public
fecha:boolean;
{ Public declarations }
end;
var
frmPrincipal: TfrmPrincipal;
nome: string;
implementation
uses UEmpresa, ULogin, UProcesso, UFechar, UConsulta, USobre, UKPI, UTelaConsulta,
Usplash, USoftware, UZerar, UConfiguracaoSistema;
{$R *.dfm}
// Bloquear ALT+F4 inicio
Function GetStateK (Key: integer): boolean;
begin
Result := Odd (GetKeyState (Key));
end;
procedure TfrmPrincipal.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If GetStateK (VK_LMENU) And (Key = VK_F4) Then
begin
frmFechar.ShowModal;
fecha:=false;
end;
end;
procedure TfrmPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
If Not fecha Then
Action := caNone Else
Action := caFree;
end;
procedure TfrmPrincipal.btfecharClick(Sender: TObject);
begin
fecha:=true;
close;
end;
// Bloquear ALT+F4 fim
// FUNÇÃO PARA ABREVIAR NOMES
function AbreviaNome(Nome:String):String;
var
Nomes : Array[1..20] of String;
I, TotalNomes:Integer;
begin
Nome := Trim(Nome);
Result:=Nome;
Nome:=Nome + 32;
I :=Pos(32,Nome);
If I > 0 then
begin
totalNomes:=0;
//Separa todos os nomes
While I > 0 do
begin
Inc(totalNomes);
Nomes[TotalNomes]:=Copy(Nome,1,I-1);
Delete(Nome,1,I);
I := Pos(32,Nome);
end;
If TotalNomes > 2 Then
begin
//Abreviar a apartir do segundo nome, exceto o último
For I := 2 to totalNomes - 1 do
begin
//Contém mais de 3 Letras? ( Ignorar de, da, das , do, dos, etc)
If Length(Nomes[I]) > 3 Then
//Pega apenas a primeira letra do nome é coloca um ponto após
Nomes[I]:=Nomes[I][1] + ´.´;
end;
Result:=´´;
For I := 1 to totalNomes do
Result:=Result+Trim(Nomes[I]) + 32;
Result:=Trim(Result);
end;
end;
end;
function PegaIP:string;
//--> Declare a Winsock na clausula uses da unit
var
WSAData: TWSAData;
HostEnt: PHostEnt;
Name:string;
begin
WSAStartup(2, WSAData);
SetLength(Name, 255);
Gethostname(PChar(Name), 255);
SetLength(Name, StrLen(PChar(Name)));
HostEnt := gethostbyname(PChar(Name));
with HostEnt^ do
begin
Result := Format(´¬d.¬d.¬d.¬d´,
[Byte(h_addr^[0]),Byte(h_addr^[1]),
Byte(h_addr^[2]),Byte(h_addr^[3])]);
end;
WSACleanup;
end;
procedure TfrmPrincipal.Empresa1Click(Sender: TObject);
begin
frmEmpresa.ShowModal;
end;
procedure TfrmPrincipal.Processo1Click(Sender: TObject);
var x: integer;
begin
With Empresa do
Begin
Close;
Sql.Clear;
Sql.Add(´Select * from EMPRESA´);
Open;
end;
Empresa.First;
x:=0;
while not Empresa.Eof do
begin
x:= x + 1;
Empresa.Next;
end;
if x = 0 then begin
ShowMessage(´Não existe empresa cadastrada! Você deve cadastrar pelo menos uma empresa.´);
exit;
end;
frmProcesso.ShowModal;
frmProcesso.ComboBox1.ClearSelection;
frmProcesso.ComboBox1.Text:=´Selecione´;
frmProcesso.ComboBox2.Clear;
frmProcesso.combobox2.Visible:=false;
frmProcesso.Label1.Visible:=false;
frmProcesso.Image2.Visible:=false;
frmProcesso.btn1.Visible:=false;
frmProcesso.btn1.Enabled:=true;
frmProcesso.Btn1.Caption:=´Incluir Novo Processo´;
frmProcesso.Edit1.Text:=´´;
frmProcesso.Edit2.Text:=´´;
frmProcesso.Memo1.Text:=´´;
frmProcesso.Edit1.Enabled:=false;
frmProcesso.Edit2.Enabled:=false;
frmProcesso.Memo1.Enabled:=false;
frmProcesso.SpeedButton1.Enabled:=false;
frmProcesso.SpeedButton2.Enabled:=false;
frmProcesso.Btn4.Enabled:=false;
frmProcesso.Btn3.Enabled:=false;
frmProcesso.Combobox2.Enabled:=true;
end;
procedure TfrmPrincipal.Sair1Click(Sender: TObject);
begin
frmFechar.ShowModal;
end;
procedure TfrmPrincipal.Timer1Timer(Sender: TObject);
begin
ADOQuery11.Close;
ADOQuery11.sql.clear;
ADOQuery11.sql.add(´select * from EMPRESA´);
ADOQuery11.open;
label50.caption := IntToStr(ADOQuery11.recordcount);
ADOQuery11.Close;
ADOQuery22.Close;
ADOQuery22.sql.clear;
ADOQuery22.sql.add(´select * from PROCESSO´);
ADOQuery22.open;
label51.caption := IntToStr(ADOQuery22.recordcount);
ADOQuery22.Close;
ADOQuery33.Close;
ADOQuery33.sql.clear;
ADOQuery33.sql.add(´select * from PROBLEMAS´);
ADOQuery33.open;
label52.caption := IntToStr(ADOQuery33.recordcount);
ADOQuery33.Close;
ADOQuery1.Close;
ADOQuery1.sql.clear;
ADOQuery1.sql.add(´select * from KPI´);
ADOQuery1.open;
label53.caption := IntToStr(ADOQuery1.recordcount);
ADOQuery1.Close;
end;
procedure TfrmPrincipal.ConsultarProcesso1Click(Sender: TObject);
begin
frmConsulta.ShowModal;
end;
procedure TfrmPrincipal.Sobre1Click(Sender: TObject);
begin
frmSobre.ShowModal;
end;
procedure TfrmPrincipal.Software1Click(Sender: TObject);
begin
frmSoftware.ShowModal;
end;
procedure TfrmPrincipal.finalizarExecute(Sender: TObject);
begin
frmFechar.ShowModal;
end;
procedure TfrmPrincipal.consultaExecute(Sender: TObject);
begin
frmTelaConsulta.panel2.Visible:=false;
frmTelaConsulta.panel3.Visible:=false;
frmTelaConsulta.ComboBox1.Clear;
frmTelaConsulta.ComboBox2.Clear;
frmTelaConsulta.ComboBox3.Clear;
frmTelaConsulta.Edit1.Clear;
frmTelaConsulta.Edit2.Clear;
frmTelaConsulta.Edit3.Clear;
frmTelaConsulta.Edit4.Clear;
frmTelaConsulta.Memo1.Clear;
frmTelaConsulta.DBGrid1.CleanupInstance;
frmTelaConsulta.DBGrid2.CleanupInstance;
frmTelaConsulta.ShowModal;
end;
procedure TfrmPrincipal.empreExecute(Sender: TObject);
begin
frmEmpresa.ShowModal;
end;
procedure TfrmPrincipal.proceExecute(Sender: TObject);
begin
frmProcesso.ShowModal;
end;
procedure TfrmPrincipal.desenvolExecute(Sender: TObject);
begin
frmSobre.ShowModal;
end;
procedure TfrmPrincipal.softwareExecute(Sender: TObject);
begin
frmSoftware.ShowModal;
end;
procedure TfrmPrincipal.zerarExecute(Sender: TObject);
begin
frmZerar.ShowModal;
end;
procedure TfrmPrincipal.CSError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
if ErrorCode <> 0 Then ErrorCode := 0;
end;
procedure TfrmPrincipal.configuracaoExecute(Sender: TObject);
begin
frmConfiguracaoSistema.ShowModal;
end;
procedure TfrmPrincipal.FormShow(Sender: TObject);
var F: TForm;
begin
// Carrega a tela de login junto com a tela principal
F := TfrmLogin.Create(Application);
if F.ShowModal = mrCancel then
Close;
end;
procedure TfrmPrincipal.CSConnect(Sender: TObject;
Socket: TCustomWinSocket);
var user: string;
begin
user:=StatusBar1.Panels[0].Text;
CS.Socket.SendText(PegaIp+´-´+AbreviaNome(user));
end;
procedure TfrmPrincipal.CS_AError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode <> 0 Then ErrorCode := 0;
end;
procedure TfrmPrincipal.CS_AConnect(Sender: TObject;
Socket: TCustomWinSocket);
var user: string;
begin
user:=StatusBar1.Panels[0].Text;
CS_A.Socket.SendText(PegaIp+´-´+AbreviaNome(user));
end;
end.
Será que fiz algo errado???
Abraços e valeu a atenção
GOSTEI 0
Redoctober
23/06/2004
Sobre, UP, ARRIBA, etc...
GOSTEI 0