Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

Você está aqui: Delphi ::: VCL - Visual Component Library ::: TEdit

Como retornar a quantidade de caracteres no texto de um TEdit do Delphi usando a função SendMessage() da API do Windows e a mensagem WM_GETTEXTLENGTH

Quantidade de visualizações: 10973 vezes
Em algumas ocasiões gostaríamos de obter o tamanho do texto de um TEdit usando apenas as funções da API do Windows. Para isso podemos usar a função SendMessage() em combinação com a mensagem WM_GETTEXTLENGTH.

A função SendMessage() da API do Windows possui a seguinte assinatura em C/C++:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

LRESULT SendMessage(          
  HWND hWnd,
  UINT Msg,
  WPARAM wParam,
  LPARAM lParam
);

No arquivo Windows.pas podemos encontrar o protótipo e corpo desta função convertidos para Object Pascal:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

// Protótipo
{$EXTERNALSYM SendMessage}
function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; 
  lParam: LPARAM): LRESULT; stdcall;

// Implementação
function SendMessage; external user32 name 'SendMessageW';

Quando usamos a mensagem WM_GETTEXTLENGTH para obter a quantidade de caracteres no texto de um TEdit, o retorno da função SendMessage() é um valor inteiro contendo a quantidade de caracteres na caixa de texto. Os parâmetros wParam e lParam não são usados, ou seja, podemos fornecer o valor 0 para os mesmos. Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
  tamanho: Integer;
begin
  // vamos obter a quantidade de caracteres na caixa de texto
  tamanho := SendMessage(Edit1.Handle, WM_GETTEXTLENGTH, 0, 0);

  // vamos exibir o resultado
  ShowMessage('O edit contém ' + IntToStr(tamanho) + ' caracteres.');
end;

Ao executar este exemplo teremos uma mensagem com um conteúdo parecido com:

O edit contém 10 caracteres.

Link para compartilhar na Internet ou com seus amigos:

Delphi ::: Dicas & Truques ::: Matemática e Estatística

Delphi para matemática - Como arredondar valores de ponto-flutuante para cima usando a função Ceil()

Quantidade de visualizações: 16783 vezes
A função Ceil(), presente na unit Math, é útil quando queremos arrendondar valores de ponto-flutuante (valores com casas decimais) para cima, ou seja, para o menor inteiro maior ou igual ao valor fornecido. Veja um exemplo:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm2.Button1Click(Sender: TObject);
var
  valor: Real;
  resultado: Integer;
begin
  // uses Math

  valor := 8.3;

  // vamos arredondar o valor para cima
  // o resultado será 9
  resultado := Ceil(valor);

  // exibe o resultado
  ShowMessage('O valor arredondado para cima é: ' +
    IntToStr(resultado));
end;

Note que os valores 8.0001, 8.3, 8.1, 8.99, etc, serão todos arredondados para 9. No entanto, 8.0 é arredondado para 8.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid

Como aplicar cores alternadas às colunas de um TDBGrid do Delphi (efeito zebrinha)

Quantidade de visualizações: 9602 vezes
Em algumas situações gostaríamos de aplicar o efeito zebrinha, ou seja, aplicar cores alternadas às colunas de um controle TDBGrid. Esta técnica é muito útil quando temos grids com várias colunas e queremos facilitar a visualização dos dados por parte dos usuários.

A forma mais comum de se aplicar cores alternadas às colunas do DBGrid é por meio do evento OnDrawColumnCell. Veja o trecho de código abaixo:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm3.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  grid: TDBGrid;
begin
  // obtém um referência ao DBGrid
  grid := sender as TDBGrid;

  // o número da coluna é par?
  if Odd(DataCol) then
    grid.Canvas.Brush.Color := clWhite
  else
    grid.Canvas.Brush.Color := clYellow;

  // vamos terminar de colorir a célula
  grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Execute este código e verá que a primeira coluna é pintada de branco, a segunda de amarelo, a terceira de branco e assim por diante. Note que neste código eu não tratei a seleção de células, na qual a cor do texto se iguala ao branco do fundo da célula. Veja mais dicas nesta seção para saber como realizar esta tarefa você mesmo.

Fique atento ao fato de que este código aplica as cores alternadas às colunas mesmo se estas forem colunas persistentes com cores já definidas por meio do Object Inspector.

Esta dica foi escrita e testada no Delphi 2009.


Delphi ::: Fundamentos da Linguagem ::: Estruturas de Controle

Delphi para iniciantes: Como usar o laço de repetição for do Delphi

Quantidade de visualizações: 22109 vezes
O laço for do Delphi (linguagem Object Pascal) é usado quando queremos que um determinado bloco de instruções seja executado um determinado número de vezes. Na maioria das vezes a execução deste laço é controlada por uma variável de controle, que deve ser declarada antes de seu uso.

Veja um laço for que contará de 0 até 10 (incluído):

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer; // variável de controle
begin
  for i := 0 to 10 do
    begin
      ShowMessage(IntToStr(i)); // mostra a mensagem 10 vezes
    end;
end;

Veja que o valor da variável de controle i começa em 0 e é incrementado a cada iteração até que seu valor seja igual a 10, o que faz com que a execução do laço seja interrompida. A variável de controle de um laço for deve ser do tipo ordinal (inteiro, caractere, Boolean, enumerações ou sub-faixas) e não pode ser alterada dentro do laço. Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer; // variável de controle
begin
  // este laço for pretende exibir os números pares de 0 a 10
  for i := 0 to 10 do
    begin
      ShowMessage(IntToStr(i));
      i := i + 2;  // vamos ter problemas aqui
    end;
end;

Ao tentarmos compilar este código teremos o seguinte erro:

[DCC Error] Unit1.pas(107): E2081 Assignment to FOR-Loop variable 'i'

Este erro nos informa que não é possível atribuir valor a uma variável de controle dentro do laço for. Se quisermos que o laço "conte" de trás para frente, podemos substituir a palavra-chave to por downto. Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm1.Button3Click(Sender: TObject);
var
  i: Integer; // variável de controle
begin
  // este laço for conta de 10 até 0
  for i := 10 downto 0 do
    begin
      ShowMessage(IntToStr(i));
    end;
end;


Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


Delphi ::: VCL - Visual Component Library ::: TComboBox

Como usar a propriedade Items da classe TComboBox do Delphi

Quantidade de visualizações: 13190 vezes
A propriedade Items da classe TComboBox representa um objeto da classe TStrings, a classe base para objetos que representam uma lista de strings. Isso quer dizer que podemos acessar a propriedade Items e usar todos os métodos e propriedades da classe TStrings, tais como Add(), Clear(), Delete(), Exchange(), etc.

Veja, por exemplo, como usar o método Add() para adicionar um novo item no ComboBox:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
begin
  // vamos adicionar um novo item ao ComboBox
  comboBox1.Items.Add('Arquivo de Códigos');
end;

É possível obter um referência à propriedade Items para manipular os itens do ComboBox indiretamente. Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
var
  lista: TStrings;
begin
  // vamos obter a lista de itens do ComboBox
  lista := comboBox1.Items;

  // vamos adicionar um novo item à lista
  lista.Add('Arquivo de Códigos');
end;

Esta técnica é útil quando queremos inserir itens em um TComboBox a partir de uma função ou procedure. Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

// procedure personalizada para inserir itens em um TComboBox
procedure inserirItensComboBox(lista: TStrings);
begin
  lista.Add('Arquivo de Códigos');
  lista.Add('Osmar J. Silva');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // vamos chamar a procedure que adiciona os itens no ComboBox
  inserirItensComboBox(ComboBox1.Items);
end;

Para finalizar, veja como escrever uma função personalizada que constrói e retorna uma lista de strings. Note como usamos o objeto TStrings retornado para preencher o ComboBox:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

// função personalizada que constrói e retorna uma lista
// de strings
function obterLista: TStrings;
var
  lista: TStringList;
begin
  lista := TStringList.Create;
  lista.Add('Arquivo de Códigos');
  lista.Add('Osmar J. Silva');

  Result := lista;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // vamos obter a lista de strings
  ComboBox1.Items := obterLista;
end;

Observe que, embora o retorno seja TStrings, no corpo da função nós construímos um objeto da classe TStringList. Isso acontece porque TStrings é uma classe abstrata e, portanto, não podemos chamar seu construtor. Como TStringList herda de TStrings e é uma classe concreta, esta é a escolha mais óbvia.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


Delphi ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como calcular o seno de um número ou ângulo em Delphi usando a função Sin()

Quantidade de visualizações: 12837 vezes
Em geral, quando falamos de seno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função seno disponível nas linguagens de programação para calcular o seno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria.

No entanto, é sempre importante entender o que é a função seno. Veja a seguinte imagem:



Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles.

Assim, o seno é a razão entre o cateto oposto (oposto ao ângulo theta) e a hipotenusa, ou seja, o cateto oposto dividido pela hipotenusa. Veja a fórmula:

\[\text{Seno} = \frac{\text{Cateto oposto}}{\text{Hipotenusa}} \]

Então, se dividirmos 20 por 36.056 (na figura eu arredondei) nós teremos 0.5547, que é a razão entre o cateto oposto e a hipotenusa (em radianos).

Agora, experimente calcular o arco-cosseno de 0.5547. O resultado será 0.9828 (em radianos). Convertendo 0.9828 radianos para graus, nós obtemos 56.31º, que é exatamente o ângulo em graus entre o cateto oposto e a hipotenusa na figura acima.

Pronto! Agora que já sabemos o que é seno na trigonometria, vamos entender mais sobre a função Sin() da linguagem Delphi. Esta função, incorporada por padrão à linguagem, recebe um valor numérico (Extended) e retorna um valor Extended, ou seja, também numérico) entre -1 até 1 (ambos inclusos). Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add('Seno de 0 = ' + FloatToStr(Sin(0)));
  Memo1.Lines.Add('Seno de 1 = ' + FloatToStr(Sin(1)));
  Memo1.Lines.Add('Seno de 2 = ' + FloatToStr(Sin(2)));
end;

Ao executar este código Delphi nós teremos o seguinte resultado:

Seno de 0 = 0
Seno de 1 = 0,841470984807897
Seno de 2 = 0,909297426825682

Note que calculamos os senos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função seno mostrada abaixo:




Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid

Como criar colunas persistentes o controle TDBGrid do Delphi

Quantidade de visualizações: 11373 vezes
Quando conectamos um TDBGrid a uma fonte de dados TDataSource, automaticamente ocorre a criação de colunas no grid, cada uma correspondendo a um dos campos da tabela para a qual o TDataSet (e suas classes derivadas) está apontando. Estas colunas criadas automaticamente são chamadas de DINÂMICAS, ou contrário das colunas PERSISTENTES.

Porém, na maioria das vezes, nós queremos personalizar a aparência das colunas em tempo de design (o que também pode ser feito em tempo de execução). Queremos alinhar ou alterar os títulos, mudar a fonte e cores, etc. Fazemos isso clicando com o botão direito no controle DBGrid e acessando a opção Columns Editor (ou dando duplo clique na propriedade Columns). Isso fará com que a propriedade State do objeto TDBGridColumns do DBGrid seja mudada para csCustomized, o que indica que o Delphi montará as colunas baseado em nossas configurações e não mais automaticamente de acordo com os nomes dos campos da tabela.

Siga os seguintes passos para criar colunas persistentes para o controle DBGrid:

a) Selecione o DBGrid no formulário;

b) Acesse o editor Columns dando duplo-clique na propriedade Columns no Object Inspector;

Isso bastará para que o list box de Columns exiba as colunas persistentes já existentes. Quando o editor Columns é mostrado pela primeira vez, esta lista estará vazia porque o grid está em seu estado padrão, contendo apenas colunas dinâmicas.

Podemos criar colunas persistentes para todos os campos do dataset de uma só vez, ou podemos criar as colunas persistentes para cada campo individualmente.

Siga os passos abaixo para criar colunas persistentes para todos os campos:

a) Chame o editor Columns e escolha a opção Add All Fields. Note que se o grid não estiver associado a nenhum data source, a opção Add All Fields estará desabilitada. Associe o grid com o data source que estiver conectado a um dataset ativo antes de escolher a apção Add All Fields.

b) Se o grid já possuir colunas persistentes, uma caixa de diálogo perguntará se você quer excluir as colunas existentes ou apenas acrescentar as novas colunas. Se você escolher Yes, todas as colunas persistentes serão removidas e todos os campos do dataset atual serão inseridos como colunas, obedecendo sua ordem no dataset. Neste caso os títulos das colunas serão os nomes dos campos na tabela. Se você escolher No, as colunas persistentes serão mantidas e as novas colunas serão adicionadas.

C) Clique o botão Close para aplicar as colunas persistentes no DBGrid e fechar a caixa de diálogo.

Siga os passos abaixo para criar colunas persistentes individualmente:

a) Escolha o botão Add no editor Columns. A nova columa será selecionada na list box. Esta nova coluna receberá um número sequencial e um nome padrão (por exemplo, 0 - TColumn). Para associar um campo da tabela com esta nova coluna, ajuste sua propriedade FieldName no Object Inspector.

b) Para definir o título para a nova coluna, expanda a propriedade Title no Object Inspector e ajuste sua propriedade Caption.

c) Feche o editor Columns para aplicar as colunas persistentes no grid e fechar a caixa de diálogo.

Se o um DBGrid possui apenas colunas dinâmicas, nós podemos excluí-las em tempo de execução simplesmente mudando o valor da propriedade Columns.State para csCustomized. Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm3.Button3Click(Sender: TObject);
begin
  // vamos alterar o valor da propriedade State para csCustomized
  DBGrid1.Columns.State := csCustomized;
end;

Este trecho de código faz com que as colunas dinâmicas sejam excluídas e colunas persistentes sejam criadas para cada um dos campos do dataset ao qual o grid está ligado. Após isso, novas colunas podem ser adicionadas em tempo de execução usando código parecido com:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm3.Button3Click(Sender: TObject);
begin
  // vamos alterar o valor da propriedade State para csCustomized
  DBGrid1.Columns.State := csCustomized;

  // vamos adicionar uma nova coluna
  DBGrid1.Columns.Add;
end;

Esta dica foi escrita e testada no Delphi 2009.


Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet

Como usar a propriedade Bof para verificar se estamos no primeiro registro do TClientDataSet do Delphi

Quantidade de visualizações: 11135 vezes
Em algumas situações gostaríamos de verificar se já estamos no primeiro registro do TClientDataSet, ou seja, estamos percorrendo todos os registros do dataset de trás para frente e queremos saber se já estamos no primeiro. Para isso podemos usar a propriedade Bof da classe TClientDataSet. Esta propriedade retorna true se estivermos no primeiro registro e false em caso contrário.

Veja um trecho de código no qual usamos um laço while para percorrer todos os registros de um TClientDataSet de trás para frente. Note o uso da propriedade Bof para finalizar as iterações do laço:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

procedure TForm3.Button4Click(Sender: TObject);
begin
  // vamos percorrer todos os registros do TClientDataSet
  // de trás para frente
  ClientDataSet1.Last; // vamos para o último registro
  // e agora disparamos um laço While
  while not ClientDataSet1.Bof do
    begin
      // vamos mostrar em um TMemo os valores do primeiro
      // campo de cada registro
      Memo1.Lines.Add(ClientDataSet1.FieldByName('id').AsString);
      // vamos mover para o registro anterior
      ClientDataSet1.Prior;
    end;
end;


A propriedade Bof é verdadeira quando:

a) Abrimos um dataset.

b) Efetuamos uma chamada ao método First (primeiro) do dataset.

c) Chamamos o método Prior (anterior) do dataset e a chamada falha porque o registro atual já é o primeiro registro no dataset.

d) Efetuamos uma chamada ao método SetRange em uma faixa de dados ou dataset vazio.

Esta dica foi escrita e testada no Delphi 2009.


Delphi ::: Dicas & Truques ::: Bilbiotecas Estáticas (obj) e Dinâmicas (DLLs)

Como criar DLLs usando Delphi? É possível criar DLLs para o Windows usando Delphi?

Quantidade de visualizações: 12833 vezes
As DLLs (Dynamic Link Libraries - Bibliotecas de Vínculo Dinâmico) são arquivos compilados bem similares aos arquivos .exe que estamos acostumados a criar em Delphi. Uma DLL contém rotinas, recursos ou ambos. Mas, não pode ser executada por si só, ou seja, se dermos duplo-clique em uma DLL nada acontecerá.

Isso acontece porque uma DLL é desenvolvida para ser usada juntamente como outros aplicativos e/ou outras DLLs. No ambiente Windows encontramos muitas DLLs. Na verdade, o Windows e sua Win32 API é uma coleção de DLLs. Se olharmos nos diretórios System ou System32 encontraremos várias delas, incluindo kernel32.dll, gdi32.dll, user32.dll, shell32.dll, comctl32.dll, entre outras.

Mas, para que servem as DLLs? É possível desenvolver aplicações Windows sem usá-las? Vamos às respostas.

As DLLs existem com o propósito de compartilhar código entre aplicações. Isso quer dizer que uma mesma DLL pode estar sendo usada por vários programas ao mesmo tempo. E isso é verdade no ambiente Windows. Todos os programas de interface gráfica escritos em Delphi, C, C++, etc e que usam os componentes gráficos do Windows estão de alguma forma fazendo uso de códigos disponíveis em DLLs do sistema. Sem o aproveitamente de tais códigos os executáveis ficariam enormes, visto que cada um teria que implementar as rotinas de desenho e diretivas de criação de janelas. Ao aproveitar as funcionalidades disponíveis nas DLLs do sistema esta tarefa se torna muito mais fácil.

Mas, além de usar DLLs de terceiros com códigos já prontos e devidamente testados, você também pode criar suas próprias DLLs. O motivo disso é que você pode querer compartilhar algumas de suas rotinas entre os vários aplicativos que você desenvolve. A maior vantagem disso é que, ao atualizar ou corrigir o código em uma DLL você estará certo de que todas as aplicações que fazem uso desta DLL automaticamente perceberão e tirarão proveito da atualização.

Entre as vantagens do uso de DLLs podemos citar:

a) Podemos compartilhar rotinas e códigos entre várias aplicativos;

b) Ao mantermos boa parte de nossos códigos em DLLs nós conseguimos economizar memória e espaço em disco;

c) Outros desenvolvedores poderão usar nossas rotinas e lógica mesmo sem ter acesso aos nossos códigos-fontes;

d) Podemos usar códigos escritos em outras linguagens em nossos programas Delphi. Isso quer dizer que uma DLL escrita em C/C++ poderá ser usada em um programa Delphi sem qualquer problema. A prova disso é que as DLLs do Windows são escritas em C/C++.

Hora de criar sua primeira DLL em Delphi. Consulte outras dicas nesta seção para aprender a fazê-lo.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


Vamos testar seus conhecimentos em JavaScript

Analise o seguinte código JavaScript

document.write(typeof typeof 1);

Qual é o resultado de sua execução?

A) number

B) NaN

C) string

D) true

E) 1
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Instalações Hidráulicas Prediais

Dimensionamento de Redes de Distribuição de Água

Qual o número de habitantes se deve atingir para que um bloco populacional que hoje é atendido pela tubulação de 150 mm de diâmetro, e cada habitante consome em média 300 L/dia, tendo uma vazão no sistema de 6,5 L/s, ao qual ainda consegue atender bem atualmente? Busque consultar a tabela da norma ABNT que indica a vazão máxima para cada diâmetro de tubulação.



A) 5000 habitantes

B) 5520 habitantes

C) 3000 habitantes

D) 652 habitantes

E) 2256 habitantes
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Vigas a flexão simples: seções retangulares

O dimensionamento de vigas retangulares armadas à flexão leva em consideração a resistência do concreto à compressão e a resistência do aço à tração. Nesse caso, a viga está simplesmente armada e é composta por armadura principal e armadura construtiva. Dependendo do domínio em que a seção da viga se encontra, pode ser necessário também considerar a resistência do aço à compressão, quando a viga é composta por armadura dupla.

Considere uma viga retangular de concreto com largura de 14cm, concreto C30, e que a agressividade ambiental do local é classe III. Considere também que essa viga deve resistir a uma solicitação por um momento fletor de 95,50kN.m.

Nesse caso, qual é a altura mínima da viga para que não seja necessária armadura dupla?

A) 35cm.

B) 40cm.

C) 45cm.

D) 50cm.

E) 55cm.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Hidrologia

A Bacia Platina é uma das principais bacias do país. Em relação às suas características, marque a alternativa correta.

A) É formada pelas bacias dos rios Paraná, Paraguai, Araguaia e Tocantins.

B) Está localizada no Brasil, Argentina, Chile e Paraguai.

C) Possui a maior usina hidrelétrica totalmente brasileira.

D) Apresenta baixo aproveitamento econômico de sua área.

E) É a bacia brasileira com maior capacidade instalada de geração de energia.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em JavaScript

Como arredondar o valor 7.25 para o inteiro mais próximo em JavaScript?

A) Math.rnd(7.25)

B) Math.round(7.25)

C) rnd(7.25)

D) round(7.25)
Verificar Resposta Estudar Cards Todas as Questões

Desafios, Exercícios e Algoritmos Resolvidos de Delphi

Veja mais Dicas e truques de Delphi

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 25 usuários muito felizes estudando em nosso site.