Dicas delphi

Disponível somente no TrabalhosFeitos
  • Páginas : 42 (10318 palavras )
  • Download(s) : 0
  • Publicado : 17 de dezembro de 2012
Ler documento completo
Amostra do texto
Dicas de Delphi - Outros
[pic]
Mac Address do adaptador de rede
A função abaixo retorna o Mac Address do adaptador de rede:
function MacAddress: string;
var
Lib: Cardinal;
Func: function(GUID: PGUID): Longint; stdcall;
GUID1, GUID2: TGUID;
begin
Result := '';
Lib := LoadLibrary('rpcrt4.dll');
if Lib 0 then
begin
@Func := GetProcAddress(Lib,'UuidCreateSequential');
if Assigned(Func) then
begin
if (Func(@GUID1) = 0) and
(Func(@GUID2) = 0) and
(GUID1.D4[2] = GUID2.D4[2]) and
(GUID1.D4[3] = GUID2.D4[3]) and
(GUID1.D4[4] = GUID2.D4[4]) and
(GUID1.D4[5] = GUID2.D4[5]) and
(GUID1.D4[6] = GUID2.D4[6]) and
(GUID1.D4[7] = GUID2.D4[7]) then
begin
Result :=IntToHex(GUID1.D4[2], 2) + '-' +
IntToHex(GUID1.D4[3], 2) + '-' +
IntToHex(GUID1.D4[4], 2) + '-' +
IntToHex(GUID1.D4[5], 2) + '-' +
IntToHex(GUID1.D4[6], 2) + '-' +
IntToHex(GUID1.D4[7], 2);
end;
end;
end;
end;
Início
[pic]
Escrever no Bloco de Notas
Problema: 

Gostaria verificar se o bloco de notas está aberto e,caso esteja, escrever um texto a partir de um programa feito em Delphi. Isto é possível? 

Solução: 

Sim, isto é possível. O código abaixo escreve o conteúdo de uma variável no Bloco de Notas caso ele esteja aberto no momento do Click em Button1:
procedure TForm1.Button1Click(Sender: TObject);
var
JanelaPrincipal, JanelaFilha: THandle;
I: integer;
Texto: string;
begin
Texto :='Daniel';
JanelaPrincipal := FindWindow('Notepad', nil);
if JanelaPrincipal > 0 then
begin
JanelaFilha := FindWindowEx(JanelaPrincipal, 0, 'Edit', nil);
if JanelaFilha > 0 then
begin
for I := 1 to Length(Texto) do
PostMessage(JanelaFilha, WM_CHAR, Ord(Texto[I]), 0);
end;
end;
end;

Observações: 

Uma alternativa mais interessante seria abriro Bloco de Notas caso ele ainda não esteja aberto. Mas vou deixar este problema como exercício de fixação.
[pic]
Captions no DBNavigator
Por padrão, o DBNavigator não possui uma propriedade para especificar os captions dos botões, mas isto pode ser resolvido com o código abaixo:
type
TMeuDBNavigator = class(TDBNavigator);

procedure TForm1.FormCreate(Sender: TObject);
const
Legendas:array[TNavigateBtn] of string = (
'Primeiro', 'Anterior', 'Próximo', 'Último',
'Incluir', 'Excluir', 'Editar', 'Salvar',
'Cancelar', 'Atualizar');
var
Botao: TNavigateBtn;
begin
for Botao := nbFirst to nbRefresh do
begin
with TMeuDBNavigator(DBNavigator1).Buttons[Botao] do
begin
Caption := Legendas[Botao];
Layout := blGlyphTop;
end;
end;
end;[pic]
Arredondamento financeiro
É muito comum encontrar programadores Delphi que têm dúvidas sobre como arredondar um valor real para "n" casas após o separador decimal. A princípio parece um problema simples, pois o próprio Delphi já possui uma função que arredonda para o inteiro mais próximo, a qual poderia facilmente ser utilizada para arredondar para qualquer quantidade de casas decimais.Exemplo:
{ x receberá o valor de y arredondado para 2 casas após o separador. }
x := Round(y * 100) / 100;

{ z receberá o valor de y arredondado para 3 casas após o separador. }
z := Round(y * 1000) / 1000;
No entanto dois problemas poderão aparecer com os exemplos acima:
• O arredondamento feito pelo Delphi difere daquele feito pelas calculadores financeiras, bem como bancos de dados comoInterBase e FireBird.
• poderão ocorrer pequenos arredondamentos devido ao modo como o Delphi trata números reais, tais como aparecer 3.9999999... em vez de 4.
A função abaixo resolve estes dois problemas.
{ Esta função faz arredondamento de valores reais para "n" casas
decimais após o separador decimal, seguindo os critérios das
calculadoras financeiras e dos bancos de dados...
tracking img