20 Truques e Dicas de Delphi – Parte 1

Nesta publicação apresentaremos 20 Truques e Dicas de Delphi que certamente irão ajudar você aprender e se desenvolver nesta linguagem de programação.

Dicas, macetes e truques de Delphi
20 Truques e Dicas de Delphi – Parte 1

Como saber o path da aplicação em Delphi

Para saber o path da aplicação no Delphi utilize a seguinte linha:

ExtractFilePath( Application.ExeName )

Localizando valores por proximidade em uma tabela em Delphi

Muitas vezes, necessitamos encontrar registros em uma tabela que sejam próximos ou idênticos a um determinado valor, para isso, podemos utilizar uma das rotinas a seguir.

A primeira solução requer uma chave primária na tabela e a segunda permite a localização sem o uso de chaves primárias (Versão superior 2):

NomeDaTabela.FindNearest([Valor]);

Troque Valor pela variável que contém o código (só procura na chave primária).

ou então:

NomeDaTabela.Locate (‘Campos’, ‘Valores’,[Opções]);

onde Campos são os campos a procurar (separados por ponto-e-vírgula), Valores são os valores
respectivos a cada campo (também separados por ponto-e-vírgula) e Opções são as opções de busca: loPartialKey permite encontrar registros que comecem com o texto digitado, e loCaseInsensitive ignora a diferença entre maiúsculas e minúsculas (ex: Renato Sanches e RENATO SANCHES).

Verificando ano bissexto pelo Delphi : Dicas de Delphi

Para verificar se um ano bissexto no Delphi, utilize e a função abaixo:

function AnoBis(Data: TDateTime): Boolean;

{Verifica se um ano é bisexto, retornando True em caso positivo}

var
 Dia,Mes,Ano : Word;
 begin
 DecodeDate(Data,Ano,Mes,Dia);
 if Ano mod 4 <> 0 then
 AnoBis := False
 else
 if Ano mod 100 <> 0 then
 AnoBis := True
 else
 if Ano mod 400 <> 0 then
 AnoBis := False
 else
 AnoBis := True;
 end;



Função que retorna a idade de uma pessoa em Delphi

A Função escrita em Delphi a seguir retorna a idade de uma pessoa:

function idade(Nascimento,DataAtual:string):Integer;
 var
 idade,dian,mesn,anon,diaa,mesa,anoa:word;
 begin
 decodedate(StrToDate(DataAtual),anoa,mesa,diaa);
 decodedate(StrToDate(Nascimento),anon,mesn,dian);
 idade := anoa – anon;
 if mesn > mesa then
 begin
 idade := idade;
 end;
 if(mesn > mesa) and (dian > diaa)then
 begin
 idade := idade;
 end;
 result := idade;
 end;

Função Delphi que insere a barra invertida de diretório após o nome especificado

Nesta dica de Delphi, apresentamos a função a seguir que insere a barra invertida de diretório após o nome especificado

function BarraInvert(value:string):string;
 begin
 if (value[length(value)]<>’\’) then
 begin
 result := value + ‘\’;
 end
 else
 begin
 result := value;
 end;
 end;

Retorna os programas que estão abertos na memória : Dicas de Delphi

A função Delphi a seguir retorna os programas que estão abertos na memória.

Function EnumWindowsProc (Wnd: HWND; lb: TListbox): BOOL; stdcall;
// listbox1.clear;
// EnumWindows( @EnumWindowsProc, integer(listbox1));
var
caption: Array [0..128] of Char;
begin
Result := True;
if IsWindowVisible(Wnd) and ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) or
(HWND(GetWindowLong(Wnd, GWL_HWNDPARENT)) = GetDesktopWindow)) and
((GetWindowLong(Wnd, GWL_EXSTYLE) and WS_EX_TOOLWINDOW) = 0) then
begin
SendMessage( Wnd, WM_GETTEXT, Sizeof( caption ),integer(@caption));
lb.Items.AddObject( caption, TObject( Wnd ));
end;
end;

Como fazer um TMemo receber um arquivo texto ? : Dicas de Delphi

Para fazer com que um componente TMemo receba o conteúdo de um arquivo texto, utilize o seguinte comando:

Memo1.lines.loadfromfile(‘Arquivo.txt’);



Função em Delphi que retorna o IP

Esta Função Delphi retorna o seu número de IP, desde que você esteja conectado com a internet.

Inclua na seção uses: WinSock

function GetLocalIP : string;

type

TaPInAddr = array [0..10] of PInAddr;

PaPInAddr = ^TaPInAddr;

var

phe : PHostEnt;

pptr : PaPInAddr;

Buffer : array [0..63] of char;

I : Integer;

GInitData : TWSADATA;

begin

WSAStartup($101, GInitData);

Result := ”;

GetHostName(Buffer, SizeOf(Buffer));

phe :=GetHostByName(buffer);

if phe = nil then Exit;

pptr := PaPInAddr(Phe^.h_addr_list);

I := 0;

while pptr^[I] <> nil do begin

result:=StrPas(inet_ntoa(pptr^[I]^));

result := StrPas(inet_ntoa(pptr^[I]^));

Inc(I);

end;

WSACleanup;

end;

Zeros à esquerda : Dicas de Delphi

Esta função em Delphi insere Zeros à esquerda

Function InsertZeros(nInt,nTam:Integer):String;
Var
X: String;
nI: Integer;
Begin
For nI := 1 To nTam Do X := X + ‘0’;
Begin
X := X + IntToStr(nInt);
End;
Result := Copy(X,Length(X) – nTam + 1,nTam)
End;

Troca a virgula pelo ponto em um valor Float : Dicas de Delphi

Esta função Delphi troca a virgula pelo ponto em um valor Float

function TrocaVirgPPto(Valor: string): String;
var i:integer;
begin
if Valor <> ‘ ‘ then
begin
for i := 0 to Length(Valor) do
begin
if Valor[i]=’.’ then
begin
Valor[i]:=’,’;
end
else if Valor[i] = ‘,’ then
begin
Valor[i]:=’.’;
end;
end;
end;
Result := valor;
end;

Executa uma url com o Browser padrão : Dicas de Delphi

Esta procedure Delphi executa uma url com o Browser padrão.

procedure ExploreWeb(page:PChar);
// Requer a ShellApi declarada na clausua uses da unit
var
Returnvalue : integer;
begin
ReturnValue := ShellExecute(0, ‘open’, page, nil, nil,SW_SHOWNORMAL);
if ReturnValue <= 32 then
begin
case Returnvalue of
0 : MessageBox(0,’Error: Out of memory’,’Error’,0);
ERROR_FILE_NOT_FOUND: MessageBox(0,’Error: File not found’,’Error’,0);
ERROR_PATH_NOT_FOUND: MessageBox(0,’Error: Directory not found’,’Error’,0);
ERROR_BAD_FORMAT : MessageBox(0,’Error: Wrong format in EXE’,’Error’,0);
else
MessageBox(0,PChar(‘Error Nr: ‘+IntToStr(Returnvalue)+’ inShellExecute’),’Error’,0)
end;
end;
end;



Verificar a impressora, antes de uma impressão

Como montar uma rotina em Delphi para verificar a impressora, antes de uma impressão

Esta função serve para verificar se a impressora está pronta, antes de iniciar uma impressão.
A função retorna true se a impressora está pronta para imprimir.

Function PrinterOnLine : Boolean;
Const
PrnStInt : Byte = $17;
StRq : Byte = $02;
PrnNum : Word = 0; { 0 para LPT1, 1 para LPT2, etc. }
Var
nResult : byte;
Begin (* PrinterOnLine*)
Asm
mov ah,StRq;
mov dx,PrnNum;
Int $17;
mov nResult,ah;
end;
PrinterOnLine := (nResult and $80) = $80;
End;

Exemplo de utilização:

If not PrinterOnLine then ShowMessage(‘Atenção! Verifique a Impressora…’);

Obtendo o nome do computador do windows

A função Delphi a seguir obtém o nome do computador através do Registry do Windows.
(Não esqueça de adicionar a unit Registry a cláusula uses de seu projeto)

Uses Registry;

function getcomputer : string;
var registro : tregistry;
begin
registro:=tregistry.create;
registro.RootKey:=HKEY_LOCAL_MACHINE;
registro.openkey(‘System\CurrentControlSet\Services\VXD\VNETSUP’,false);
result:=registro.readstring(‘ComputerName’);
end;

Adicionando à hora atual, um número determinado de horas

A Função Delphi abaixo adiciona à hora atual, um número determinado de horas:

function AdicionaHora(TimeAdd: Integer) : String;
Var
 Horas,Min,SomaHoras,SomaMin : Integer;
 S, S1 : String;
begin
 Horas := Strtoint(Copy(TimetoStr(Time),1,2))+ TimeAdd;
 Min := Strtoint(Copy(TimetoStr(Time),4,2))+ TimeAdd ;
 SomaHoras := SomaHoras+Horas;
 SomaMin := SomaMin + Min;
If SomaMin > 59 Then
 begin
 if SomaMin mod 60 = 0 Then
 begin
 Somahoras := Somahoras+(Somamin div 60);
 Somamin := 0;
 end
 else
 begin
 SomaHoras := SomaHoras + (SomaMin div 60);
 SomaMin := SomaMin mod 60;
 end;
 end;
If Somamin = 0 Then
 begin
 S := ’00’;
 end
 else
 begin
 S := InttoStr(Somamin);
 end;
If Length(InttoStr(SomaHoras)) = 1 Then
 begin
 S1 := Concat(‘0′,InttoStr(Somahoras));
 end
 else
 begin
 S1 := InttoStr(Somahoras);
 end;
Result := Concat(S1,’:’,S,’:00′);
end;

Converte um número decimal em algarismos romanos

Função Delphi a seguir converte um número decimal em algarismos romanos:

function DecToRoman( Decimal: LongInt ): String;
const
Romans: Array[1..13] of String = ( ‘I’, ‘IV’, ‘V’, ‘IX’, ‘X’, ‘XL’, ‘L’,
‘XC’, ‘C’, ‘CD’, ‘D’, ‘CM’, ‘M’ );
Arabics: Array[1..13] of Integer =( 1, 4, 5, 9, 10, 40, 50, 90, 100,
400, 500, 900, 1000);
var
i: Integer;
scratch: String;
begin
scratch := ”;
for i := 13 downto 1 do
while ( Decimal >= Arabics[i] ) do
begin
Decimal := Decimal – Arabics[i];
scratch := scratch + Romans[i];
end;
Result := scratch;
end;

Trunca um número definido de casas decimais em um valor float

A função Delphi a seguir trunca um número definido de casas decimais em um valor float

function TruncVal(Value: Double; Casas: Integer): Double;
var
sPot: String;
iPot: Integer;
x: Integer;
begin
sPot := ‘1’;
for x := 1 to Casas do sPot := sPot + ‘0’;
begin
iPot := StrToInt(sPot);
end;
Result := StrToInt(IntToStr(Trunc(Value * iPot))) / iPot;
end;



Rotina de resgate das variáveis de ambiente DOS

A função Delphi a seguir resgata variáveis de ambiente DOS

Function GetDOSEnvVar(const VarName:String):String;
Var
Len:Integer;
pDosEnv:PChar;
Begin
result :=”;
Len := Length(VarName);
PDosEnv := GetEnvironmentStrings;
If (StrLIComp(PDosEnv, @VarName[1], Len) = 0) And (PDosEnv[Len] =’ ‘) Then
Begin
Result := StrPas(PDosEnv + Len + 1);
Break;
End;
Inc(PDosEnv, StrLen(PDosEnv) + 1);
End;

Uma rotina para verificar erros em toda a aplicação

Para tratar erros de forma genérica em aplicações escritas em Deplhi, em todo o seu programa, insira no método ON CREATE do formulário principal a linha:

Application.OnException:=RotinaGeral;

RotinaGeral é uma procedure na qual deverá constar o código para verificar e enviar as mensagens de erro do seu sistema.

Como desligar, reiniciar, resetar ou dar logout no sistema ?

Para desligar, reiniciar, reiniciar ou dar logout no sistema, use a função ExitWindowsEx, como abaixo:

ExitWindowsEx (uFlags, 0);

onde uFlags é o tipo de reinicialização que vai ocorrer.

Valores de uFlags:

EWX_FORCE – Força todos os processos a terminar.
Ao invés de aparecer a mensagem “A aplicação não está respondendo”, ele força o programa que não responde a finalizar.

EWX_LOGOFF – Faz “logout” do sistema, ou seja, volta à tela de login (a que pede nome e senha)

EWX_POWEROFF – Desliga o computador
(caso o computador não tenha o recurso de auto-desligamento, ele fecha todos os programas e informa que o sistema pode ser desligado).

EWX_REBOOT – Reinicializa o computador (o equivalente a pressionar Ctrl+Alt+Del)

EWX_SHUTDOWN – Fecha todos os programas e informa ao usuário que é seguro desligar o computador.

A função retorna True se funcionar, ou False em outro caso Usuários NT: verifique se o usuário tem o direito a desligar o computador em sua lista de privilégios.

Convertendo a 1ª letra de um edit para maiúsculas

Este truque de Delphi é útil para ser utilizado no cadastramento de nomes.

Se o operador do sistema esquecer de colocar a primeira letra de um nome em minúscula, automaticamente a letra ficará maiúscula.

Para que isto ocorra, coloque um objeto edit no formulário e no seu evento OnChange insira o seguinte código:

var
Variavel : Integer;
begin
With Edit1 do
if Text <> ” then
begin
OnChange := NIL;
Variavel := SelStart;
Text := UpperCase(Copy(Text,1,1))+LowerCase(Copy(Text,2,Length(Text)));
SelStart := Variavel;
OnChange := Edit1Change;
end;
end;

📒 Livros sobre o Delphi

Veja mais livros sobre desenvolvimento de aplicações em Delphi, acessando aqui!

Materiais e leituras que recomendamos para você:



Obrigado

Espero que estas dicas de Delphi tenham sido úteis e tenha lhe ajudado a aumentar seus conhecimentos na linguagem de programação Delphi / Pascal.

Se você gostou, compartilhe estas dicas com um amigo ou participe de nossas redes sociais.

Conhece outras dicas de Delphi ?

Envie para nós em nossa página do Facebook.

Caso queira nos incentivar a criar mais conteúdos como este, prestigie nossos anunciantes.

Um Grande Abraço e até a próxima dica!

Posts Similares