Super Dicas Delphi parte VI

 


Cancelar o pressionamento de uma tecla

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = ',' then
Key := #0;
end;

Obs. O exemplo acima cancela o pressionamento de uma virgula em um componente EDIT.


Utilizar o MessageBox com parâmetros

var
Button: Integer;
Mensagem1 : Array[0..79] of Char;
Mensagem2 : Array[0..79] of Char;
begin
StrPCopy(Mensagem1, Edit1.Text + ' ' + Edit2.Text);
StrPCopy(Mensagem2, Edit3.Text + ' ' + Edit4.Text);
Button := Application.MessageBox (Mensagem2,Mensagem1, MB_YESNOCANCEL+
mb_DefButton1+MB_ICONQUESTION);
end;


Retorna a cor de um determinado componente no formato string

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
// Retorna a cor do form
Caption := ColorToString(Form1.Color);
// Muda a cor do form
Form1.Color := StringToColor('clBlack');
end;


Verifica se existe o diretório

procedure TForm1.Button1Click(Sender: TObject);
begin
if DirectoryExists(Edit1.Text) then
Label1.Caption := Edit1.Text + ' exists'
else
Label1.Caption := Edit1.Text + ' does not exist';
end;


Bloquear a tecla Ctrl+Del do DBGrid

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((Shift = [ssCtrl]) and (key = vk_delete)) THEN
Abort;
end;


Para criar uma janela não retangular

Você deve criar uma Região do Windows e usar a função da API SetWindowRgn, desta maneira (isto funciona apenas em
D2/D3): 

var 
hR : THandle; 
begin {cria uma Reigião elíptica} 
hR := CreateEllipticRgn(0,0,100,200); 
SetWindowRgn(Handle,hR,True); 
end; 


Fecha todos os arquivos

var
i: integer;
begin
with Session do
for i:= 0 to DatabaseCount - 1 do
Databases[I].Close;
end;


Hint com quebra de linhas

Para incluir mais de uma linha no Hint você deve utilizar o evento OnMouseMove de cada componente.
Veja abaixo como ficará o código em um Edit por exemplo. 

procedure TForm1.Edit1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Edit1.hint := 'Primeira Linha'+#13+'Segunda Linha'+#13+
'Terceira Linha'+#13+'Quarta Linha';
end; 

Obs. Não esquecer de mudar para TRUE o evento ShowHint.


Imprimir diretamente para a impressora sem passar pelo gerenciador de impressão

procedure TForm1.Button1Click(Sender: TObject);
var
F : TextFile;
i : integer; 

begin
AssignFile(F,'LPT1');
Rewrite(F);
i := 0;
Writeln(F,'Teste de impressao - Linha 0');
Writeln(F,'Teste de impressao - Linha 1');
Writeln(F,#27#15+'Teste de Impressão - Linha 2');
Writeln(F,'Teste de impressao - Linha 3');
Writeln(F,#27#18+'Teste de Impressão - Linha 4');
Writeln(F,'Teste de impressao - Linha 5');
Writeln(F,#12); // Ejeta a página
CloseFile(F);
end;


Fechar um aplicativo Delphi a partir de outro aplicativo Delphi

procedure TForm1.Button1Click(Sender: TObject);
var
Win : THandle; 

begin
Win := FindWindow(nil,'Form1');
if Win <> 0 then
PostMessage(Win,WM_CLOSE,0,0)
else
ShowMessage('Programa não encontrado');
end; 

Obs. No exemplo acima foi utilizado o POSTMESSAGE para enviar uma mensagem WM_CLOSE para a janela principal.


Mostrar o HINT num Panel

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnHint := DisplayHint;
end;
procedure TForm1.DisplayHint(Sender: TObject);
begin
Panel1.Caption := Application.Hint;
end; 

Obs. Não é necessário Atribuir True para o ShowHint


Executando um programa em DOS e fechando sua janela em seguida

Quando você executa um programa DOS no Windows95, sua janela permanece aberta até ser fechada pelo usuário.
Para executar um programa DOS que fecha sua janela após a execução, deve ser especificado "command.com /c programa" na linha de comando. Usando a função da API WinExec para executar um programa chamado progdos.exe, a chamada deve ser: 

WinExec('command.com /c progdos.exe',sw_ShowNormal); 

Obs. Se o programa deve ser executado sem que seja visualizado pelo usuário, o segundo parâmetro deve ser sw_Hide. Deve ser especificada a extensão .com senão o programa não será executado.


Retornar o nome do usuário que está editando o registro

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
try
Table1.Edit;
except on E:EDBEngineError do
if E.Errors[0].ErrorCode = 10241 then
begin
ShowMessage('Mensagem de erro'+E.Errors[0].Message );
ShowMessage( 'Arquivo com erro'+E.Errors[1].Message );
ShowMessage( 'Nome do usuario'+ E.Errors[2].Message );
end;
end;
end;


Retornar o nome do usuário que está com a tabela Exclusiva

procedure TForm1.BitBtn1Click(Sender: TObject); 

begin
try
Table1.Close;
Table1.Exclusive := True;
Table1.Open;
except on E:EDBEngineError do
if E.Errors[0].ErrorCode = 10243 then
begin
ShowMessage('Mensagem de erro'+E.Errors[0].Message );
ShowMessage( 'Arquivo com erro'+E.Errors[1].Message );
ShowMessage( 'Nome do usuario'+ E.Errors[2].Message );
end
end; 

end;


Configuração do BDE para ambiente de rede

Para o seu aplicativo feito em Delphi rodar em rede, você deve instalar o BDE em todas as estações. No BDE de cada estação, você deve colocar no parâmetro NET DIR do drive PARADOX o local onde estão as bases de dados e na PATH do Alias especificar o caminho das base de dados. Mas muita atenção, todas as estações devem estar com a mesma configuração do BDE. Veja o exemplo abaixo para configuração do parâmetro NET DIR do drive PARADOX e o PATH do Alias. 

Estação n.1
NET DIR F:\
Path do Alias F:\DIRETORIO 

Estação n.2
NET DIR F:\
Path do Alias F:\DIRETORIO 

Estação n.3
NET DIR F:\
Path do Alias F:\DIRETORIO 

Não é aconselhável que os aplicativos feitos em Delphi 1, sejam executados no servidor da base de dados, pois o PARADOX apresenta problemas de corrupção de arquivos e índices neste caso. É aconselhável que no servidor você coloque somente as bases de dados. Mas caso você tenha necessidade de utilizar o servidor você pode utilizar uma solução alternativa para o problema do PARADOX, esta solução esta sendo satisfatória na maioria dos casos. Digamos que a letra do drive de rede que você vai acessar o servidor, seja a letra "F:", então, faça o seguinte: Coloque a linha abaixo no arquivo AUTOEXEC.BAT, do servidor. 

SUBST F: C: 

Configure o BDE do servidor para que ele acesse o drive "F:"
Esta linha deverá ser colocada apenas no servidor, com isso você passa a ter em seu servidor, um drive virtual para acessar o
drive C:, evitando o problema do PARADOX.
No Delphi 2 e Delphi 3, você deve utilizar um instalador de programas. No CD do Delphi 2 e Delphi 3 existe um instalador
chamado InstallShield para fazer a instalação e configuração do aplicativo e do BDE. 

Veja abaixo os exemplos da configuração do BDE p/ Delphi 2 e 3: 

Servidor Estação 1
NET DIR \\SERVIDOR\C NET DIR \\SERVIDOR\C
PATH DO ALIAS \\SERVIDOR\C\DIRETORIO PATH DO ALIAS \\SERVIDOR\C\DIRETORIO
LOCAL SHARE TRUE LOCAL SHARE FALSE 

Estação 2 Estação 3
NET DIR \\SERVIDOR\C NET DIR \\SERVIDOR\C
PATH DO ALIAS \\SERVIDOR\C\DIRETORIO PATH DO ALIAS \\SERVIDOR\C\DIRETORIO
LOCAL SHARE FALSE LOCAL SHARE FALSE 

DICA: 
O executável pode ser colocado em cada máquina da rede, diminuindo assim o tráfego de rede.