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.
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ê:
- 5 Dicas de Desenvolvimento Delphi
- 6 Dicas de desenvolvimento Delphi
- Solução para erro Oracle : [FATAL] [DBT-06103] The port (5.500) is already in use
- Como listar as maiores tabelas ou objetos Oracle
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!