Códigos e Dicas
Dicas Delphi – Preencher com ZEROS à esquerda
Salve, salve amigos
// No Evento OnExit de um componente Edit1 por exemplo
Procedure TForm1.Edit1Exit(Sender: TObject);
var x : Integer;
begin
if (edit1.text’ ‘) then
begin x := strtoint(edit1.Text);
edit1.Text:= Format(‘%6.6d’,[x]);
// Definiu o texto como tendo 6 caracteres inteiros, ou seja, 6 números.
// Basta trocar este valor para mais ou menos de acordo com a sua necessidade.
end;
// Na propriedade MaxLength (no object inspector) do edit1,
// defina também o valor com o mesmo número de caracteres usado na codificação acima.
Take care
Dicas Delphi – Retornar as Iniciais de uma String
Salve, salve amigos,
// função retorna as iniciais de uma String. Ex: ‘Saída por Consumo’ vai retornar SPC
Function RetornaIniciais(x: String): String;
var
i:Integer;
aux:String;
iniciais:String;
begin
iniciais:=”;
aux:=Trim(x);
if aux” then
begin
iniciais:=MidStr(aux,1,1);
i:=AnsiPos(‘ ‘,aux);
while i>0 do
begin
iniciais:=iniciais+MidStr(aux,i+1,1);
aux:=midstr(aux,1,i-1)+MidStr(aux,i+1,length(aux));
i:=AnsiPos(‘ ‘,aux);
end;//
while i>0 then
end;
if aux” then
Result:=UpperCase(iniciais);
end;
Take care
Dicas Delphi – Calculo da Idade
// Essa dica é um demostrativo de como se calcular a idade de uma pessoa em anos,
// meses e/ou dias
// 1º Declare na uses a unit DateUtils
// 2º Insira um Button e um Maskedit no Form
// 3º Na propriedade EditMask do Maskedit insira o formato Date e modifique
// no campo Input Mask esse formato para 4 dígitos no ano e dê OK
// 4º No evento OnClick do Button insira o código e execute
Procedure TForm1.Button1Click(Sender: TObject);
var
Ano, Mes: Integer;
Total_dias: Real;
begin
//Descobrir a idade somente em anos, meses ou dias...
ShowMessage(IntToStr(YearsBetween(Date, StrToDate(MaskEdit1.Text))) + ' anos');
ShowMessage(IntToStr(MonthsBetween(Date, StrToDate(MaskEdit1.Text))) + ' meses');
ShowMessage(IntToStr(DaysBetween(Date, StrToDate(MaskEdit1.Text))) + ' dias');
// ou
// Descobrir a idade em anos, meses e dias, complicando um pouco mais...
Total_dias := DaysBetween(Date, StrToDate(MaskEdit1.Text));
Ano := StrToInt(Copy(MaskEdit1.Text, 7, 4));
while Total_dias > 365 do
begin
Total_dias := Total_dias - DaysInAYear(Ano);
Ano := Ano + 1;
end;
Mes := StrToInt(Copy(MaskEdit1.Text, 4, 2));
while Total_dias > 28 do
begin
if Total_dias >= DaysInAMonth(Ano, Mes) then
begin
Total_dias := Total_dias - DaysInAMonth(Ano, Mes);
Mes := Mes + 1;
end
else
break;
end;
Ano := Ano - StrToInt(Copy(MaskEdit1.Text, 7, 4));
Mes := Mes - StrToInt(Copy(MaskEdit1.Text, 4, 2));
if StrToDate(MaskEdit1.Text) <= Date then
ShowMessage(IntToStr(Ano) + ' anos, ' + IntToStr(Mes) + ' meses e ' + FloatToStr(Total_dias) + ' dias')
else
ShowMessage('Impossível realizar cálculo! Data > que a data atual!');
end;
Dicas Delphi – Letreiro Digital – Direita para Esquerda
Salve, salve amigos,
// Coloque um Timer, um Panel e um Label dentro do Panel.
// Dê um duplo clique no Timer e digite o código abaixo:}
if label1.left>= -(label1.Width) then
label1.left:=label1.left-1
else
label1.left := Panel1.width;
// Você pode alterar a velocidade do texto na propriedade Interval do Timer, quanto
//menor o Interval, mais rápido ficará o letreiro.
Take care
Dicas Delphi – Como mudar imagens de acordo com as horas
// Altere o intervalo do timer para 200 ou como preferir.
Procedure TForm1.Timer1Timer(Sender: TObject);
begin
if date > strtodate('10:00:00') then
image1.pictures.loadfranfile('c: estefoto1.jpg');
if date > strtodate('11:00:00') then
image1.pictures.loadfranfile('c: estefoto2.jpg');
end;
Dicas Delphi – Função para inverter um string
Function Inverte (wStr1: String): String;var i: Integer;
begin
Result := '';
for i := Length( wStr1 ) downto 1 do
Result := Result + copy(wStr1,i,1 );
end;
Dicas Delphi – Mudando a cor de fundo de linhas diferentes em um Listbox
Crie uma nova aplicação, insira um Listbox e altere a propriedade Style para lbOwnerDrawFixed, depois clique na propriedade Items (…) e digite alguns valores em linhas diferentes. Copie o código abaixo no evento OnDrawItem do Listbox.
Procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
myColor: TColor;
myBrush: TBrush;
begin
myBrush := TBrush.Create;
with (Control as TListBox).Canvas do
begin
if not Odd(Index) then
myColor := clSilver
else
myColor := clWhite;
myBrush.Style := bsSolid;
myBrush.Color := myColor;
Windows.FillRect(handle, Rect, myBrush.Handle);
Brush.Style := bsClear;
TextOut(Rect.Left, Rect.Top,(Control as TListBox).Items[Index]);
MyBrush.Free;
end;
end;
Não se esqueça de incluir valores no Listbox para que possa ser visto o efeito das cores. Execute a aplicação e veja a o funcionamento.
Dicas Delphi – Limpando Componentes Automaticamente
Por wandinhodelphiweb – http://www.activedelphi.com.br
Uma função que faz a limpeza automática dos componentes da tela, como Edit’s, Memo’s, etc.
Procedure para limpar somente os Edits:
Procedure LimpaEdit;
var
i : Integer;
begin
for i := 0 to ComponentCount -1 do
if Components[i] is TEdit then
TEdit(Components[i]).Text := '';
end;
E agora uma mais genérica, que utiliza a classe TCustomEdit, limpando automaticamente os Memo’s e todos os outros componentes que herdam desta classe:
Procedure LimpaEdit (Form: TForm);
var
i : Integer;
begin
for i := 0 to Form.ComponentCount - 1 do
if Form.Components[i] is TCustomEdit then
(Form.Components[i] as TCustomEdit).Clear;
end;
Dicas Delphi – Criando um Gerador de Senhas
Veja nesta dica um código simples mas bastante útil, que gera senhas aleatórias podendo conter somente numeros, somente letras ou letras e números.
Primeiramente, vamos ao tutorial: insira em um form um Edit, abaixo dele um RadioGroup e depois outro Edit. Nesse RadioGroup, procure pela propriedade
Items no Object Inspector e adicione o seguinte:
Somente números Somente letras Letras e números
Após isso, adicione dois Buttons. No primeiro mude a propriedade Caption para “Gerar” e o segundo “Limpar”.
No OnClick do botao “Gerar” coloque o seguinte código:
Procedure TForm1.Button1Click(Sender: TObject);
const
letras = 'abcdefghijklmnopqrstuvxwyzABCDEFGHIJKLMNOPQRSTUVXWYZ';
numeros = '1234567890';
letrasnumeros = letras + numeros;
var
i: integer;
begin
try
Edit2.Clear;
for i := 1 to StrToInt(Edit1.Text) do
begin
if RadioGroup1.ItemIndex = 0 then
Edit2.Text := Edit2.Text + numeros[random(length(numeros)) + 1]
else if RadioGroup1.ItemIndex = 1 then
Edit2.Text := Edit2.Text + letras[random(length(letras)) + 1]
else if RadioGroup1.ItemIndex = 2 then
Edit2.Text := Edit2.Text + letrasnumeros[random(length(letrasnumeros)) + 1];
end;
except
showmessage('Insira somente números no primeiro Edit');
end;
end;
Dicas Delphi – Varrendo componentes no Delphi
Às vezes, quanto temos vários componentes num mesmo formulário, fica cansativo efetuar operações com todos eles ao mesmo tempo, como também aumenta o número de linhas no nosso código fonte. Esta dica, é uma maneira de como contornar este problema.
Digamos que temos a seguinte situação: Um formulário com 30 TEdits e você que limpar todos eles. Você pode usar o método clear ou definir a propriedade text como nula:
Edit1.text := ”;
//ou
Edit1.Clear;
Até aí tudo bem, o problema é que seriam 30 linhas a mais no código. Não fará diferença ao compilador, porém, fica esteticamente ruim para a manutenção (isso porque são 30 linhas, imagine se tivessemos 100 edits).
Então, como proceder? Simples:
Procedure TForm1.Button1Click(Sender: TObject);
Var
i : integer;
begin
for i := 0 to Self.ComponentCount – 1 do
begin
if UpperCase(Self.Components[i].ClassName) = Uppercase(‘TEdit’);
TEdit(Self.Components[i]).Clear;
end;
end;
Explicando o código:
* Usamos o for para varrer todos os componentes do formulário;
* No if, verificamos se a classe do componente é TEdit, ou seja, verificamos se o componente é um TEdit (ou outro componente, TButton, por exemplo.);
* Caso a condição seja verdadeira, é feito um cast e executado o método clear.
Dicas Delphi – Verifica se o computador está conectado a internet
Verificar se o computador está conectado a internet
Function TfrmMenu.estaConectado: boolean;
var
flags : DWORD;
begin
// verifica se está conectado a internet usando a API do Windows, é preciso declarar a uses WinInet.
if not InternetGetConnectedState(@flags, 0) then
result := false
else
result := true;
end;