Você está aqui: Delphi ::: Win32 API (Windows API) ::: Passos Iniciais

O que são funções de Callback do Windows (Windows Callback Functions) e como usá-las em programas Delphi

Quantidade de visualizações: 11435 vezes
O Delphi é um dos ambientes mais amigáveis quando o assunto é chamar funções da API do Windows ou localizadas em DLLs. O problema é que, muitas vezes, as funções da API do Windows, tais como EnumFontFamilies, exigem que o programador forneça um ponteiro para um função. No caso de EnumFontFamilies, esta função será chamada para cada fonte encontrada e que pertença à família de fontes especificada. Veja sua assinatura na documentação da API do Windows:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

int EnumFontFamilies(
  HDC hdc,                        // handle to DC
  LPCTSTR lpszFamily,             // font family


Então, nós chamamos a função EnumFontFamilies() e esta, por sua vez, chama a função fornecida para o parâmetro lpEnumFontFamProc a cada fonte encontrada. É aqui que nossa discussão reside. O parâmetro lpEnumFontFamProc recebe um ponteiro para uma função definida pelo programador e tal função é chamada de função de Callback.

Note que a maioria das funções de enumeração do Windows nos permitem fornecer dados adicionais por meio do parâmetro lParam. Além disso, nós somos os responsáveis pela criação da função de Callback no Delphi. Veja um trecho de código no qual listamos todas as fontes pertencentes a uma determinada família de fonte:

----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------

// função de Callback usada para listar as fontes de
// uma determinada família de fontes
function EnumFontFamProc(var elf: TEnumLogFont;
  var ntm: TNewTextmetric;
  FontType: Integer; Memo: TMemo): Integer; stdcall;
begin
  if FontType = TRUETYPE_FONTTYPE then
    memo.Lines.Add('Nome: ' + elf.elfFullName)
  else
    memo.Lines.Add('Nome: ' + elf.elfLogFont.lfFaceName);

  Result := 1;
end;


Estude este código atentamente e note como usamos o parâmetro lParam da função de Callback para passar a referência a um Memo. Esta técnica nos permite acessar elementos do formulário a partir da função de Callback.

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

Link para compartilhar na Internet ou com seus amigos:

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 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
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

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á 66 usuários muito felizes estudando em nosso site.