1 - Introdução
As funções da API do Windows usam alguns tipos de dados que podem parecer estranhos ao programador Delphi. Estes tipos de dados são todos tirados dos arquivos de cabeçalho em C originais que definem a sintáxe das funções da API do Windows. Em sua maioria, estes novos tipos de dados são tipos Pascal que foram renomeados de modo a se igualar ao tipos originais usados em linguagens de programação para Windows. Isso foi feito para que programadores Windows experientes pudessem entender os tipos de parâmetros e valores retornados de funções, assim como os protótipos dessas funções. A tabela a seguir destaca os principais tipos de dados da API do Windows e seus correpondentes em Delphi (Object Pascal).
2 - Tipos de dados no Windows e em Delphi
As funções da API do Windows usam alguns tipos de dados que podem parecer estranhos ao programador Delphi. Estes tipos de dados são todos tirados dos arquivos de cabeçalho em C originais que definem a sintáxe das funções da API do Windows. Em sua maioria, estes novos tipos de dados são tipos Pascal que foram renomeados de modo a se igualar ao tipos originais usados em linguagens de programação para Windows. Isso foi feito para que programadores Windows experientes pudessem entender os tipos de parâmetros e valores retornados de funções, assim como os protótipos dessas funções. A tabela a seguir destaca os principais tipos de dados da API do Windows e seus correpondentes em Delphi (Object Pascal).
2 - Tipos de dados no Windows e em Delphi
Tipo de Dados Windows
Tipos de Dados Delphi
Descrição
LPSTR
PAnsiChar;
Ponteiro para String
LPCSTR
PAnsiChar;
Ponteiro para String
DWORD
Integer;
Números inteiros
BOOL
LongBool;
Valores Boolean
PBOOL
^BOOL;
Ponteiro para um Boolean
Pbyte
^Byte;
Ponteiro para um byte
PINT
^Integer;
Ponteiro para um integer
Psingle
^Single;
Ponteiro para um Single (ponto-flutuante)
PWORD
^Word;
Ponteiro para um valor de 16 bits (16-bit)
PDWORD
^DWORD;
Ponteiro para um valor de 32 bits (32-bit)
LPDWORD
PDWORD;
Ponteiro para um valor de 32 bits (32-bit)
UCHAR
Byte;
Valores 8 bits (8-bit) - Pode representar caracteres
PUCHAR
^Byte;
Ponteiro para um valor de 8 bits (8-bit)
SHORT
Smallint;
Números inteiros de 16 bits
UINT
Integer;
Números inteiros de 32 bits. Tradicionalmente, era usado para representar inteiros sem sinal, mas o Delphi não possui um verdadeiro tipo sem sinal.
PUINT
^UINT;
Ponteiro para números inteiros de 32 bits.
ULONG
Longint;
Números inteiros de 32 bits. Tradicionalmente, era usado para representar inteiros sem sinal, mas o Delphi não possui um verdadeiro tipo sem sinal.
PULONG
^ULONG;
Ponteiro para números inteiros de 32 bits
PLongint
^Longint;
Ponteiro para um valor de 32 bits (32-bit)
PInteger
^Integer;
Ponteiro para um valor de 32 bits (32-bit)
PSmallInt
^Smallint;
Ponteiro para um valor de 32 bits (32-bit)
PDouble
^Double;
Ponteiro para valores double
LCID
DWORD;
Identificador local
LANGID
Word;
Identificador de linguagem
THandle
Integer;
Um handle para um objeto. Muitas funções da API do Windows retornam um valor do tipo THandle, que identifca este objeto dentro da tabela de objetos internos.
PHandle
^THandle;
Um ponteiro para um handle
WPARAM
Longint;
Um parâmetro de 32 bits para uma mensagem. Em versões iniciais do Windows este valor era 16 bits.
LPARAM
Longint;
Um parâmetro de 32 bits para uma mensagem.
LRESULT
Longint;
Um valor de retorno de 32 bits
HWND
Integer;
Um handle para uma janela. Todos os componentes tipo janela, janelas filhas, janelas principais, etc, tem um handle que o identifica na tabela interna do Windows.
HHOOK
Integer;
Um handle para um hook de sistema instalado no Windows
ATOM
Word;
Um índice para a tabela de atom local ou global para uma string
HGLOBAL
THandle;
Um handle identificando um objeto alocado dinamicamente na memória. No Windows 32, não há distinção entre memória alocada localmente ou globalmente.
HLOCAL
THandle;
Um handle identificando um objeto alocado dinamicamente na memória. No Windows 32, não há distinção entre memória alocada localmente ou globalmente.
FARPROC
Pointer;
Um ponteiro para uma função, geralmente usado como tipo de parâmetro em função que exigem uma função de callback
HGDIOBJ
Integer;
Um handle para um objeto GDI. Pens, contextos de dispositivos, pincéis, etc, possuem um handle um handle que o identifica na tabela interna do Windows.
HBITMAP
Integer;
Um handle para um objeto bitmap do Windows.
HBRUSH
Integer;
Um handle para um objeto brush do Windows.
HDC
Integer;
Um handle para um contexto de dispositivo.
HENHMETAFILE
Integer;
Um handle para um objeto enhanced metafile do Windows.
HFONT
Integer;
Um handle para um objeto fonte lógica do Windows.
HICON
Integer;
Um handle para um objeto ícone do Windows.
HMENU
Integer;
Um handle para um objeto menu do Windows.
HMETAFILE
Integer;
Um handle para um objeto metafile do Windows.
HINST
Integer;
Um handle para um objeto instância.
HMODULE
HINST;
Um handle para um módulo.
HPALETTE
Integer;
Um handle para uma paleta de cores do Windows.
HPEN
Integer;
Um handle para um objeto pen do Windows.
HRGN
Integer;
Um handle para um objeto region do Windows.
HRSRC
Integer;
Um handle para um objeto recurso do Windows.
HKL
Integer;
Um handle para um layout de teclado
HFILE
Integer;
Um handle para um arquivo aberto
HCURSOR
HICON;
Um handle para um objeto mouse cursor do Windows.
COLORREF
DWORD;
Um valor de referência de cor, contendo os valores para o vermelho, azul e verde de uma cor.
Tipos de Dados Delphi
Descrição
LPSTR
PAnsiChar;
Ponteiro para String
LPCSTR
PAnsiChar;
Ponteiro para String
DWORD
Integer;
Números inteiros
BOOL
LongBool;
Valores Boolean
PBOOL
^BOOL;
Ponteiro para um Boolean
Pbyte
^Byte;
Ponteiro para um byte
PINT
^Integer;
Ponteiro para um integer
Psingle
^Single;
Ponteiro para um Single (ponto-flutuante)
PWORD
^Word;
Ponteiro para um valor de 16 bits (16-bit)
PDWORD
^DWORD;
Ponteiro para um valor de 32 bits (32-bit)
LPDWORD
PDWORD;
Ponteiro para um valor de 32 bits (32-bit)
UCHAR
Byte;
Valores 8 bits (8-bit) - Pode representar caracteres
PUCHAR
^Byte;
Ponteiro para um valor de 8 bits (8-bit)
SHORT
Smallint;
Números inteiros de 16 bits
UINT
Integer;
Números inteiros de 32 bits. Tradicionalmente, era usado para representar inteiros sem sinal, mas o Delphi não possui um verdadeiro tipo sem sinal.
PUINT
^UINT;
Ponteiro para números inteiros de 32 bits.
ULONG
Longint;
Números inteiros de 32 bits. Tradicionalmente, era usado para representar inteiros sem sinal, mas o Delphi não possui um verdadeiro tipo sem sinal.
PULONG
^ULONG;
Ponteiro para números inteiros de 32 bits
PLongint
^Longint;
Ponteiro para um valor de 32 bits (32-bit)
PInteger
^Integer;
Ponteiro para um valor de 32 bits (32-bit)
PSmallInt
^Smallint;
Ponteiro para um valor de 32 bits (32-bit)
PDouble
^Double;
Ponteiro para valores double
LCID
DWORD;
Identificador local
LANGID
Word;
Identificador de linguagem
THandle
Integer;
Um handle para um objeto. Muitas funções da API do Windows retornam um valor do tipo THandle, que identifca este objeto dentro da tabela de objetos internos.
PHandle
^THandle;
Um ponteiro para um handle
WPARAM
Longint;
Um parâmetro de 32 bits para uma mensagem. Em versões iniciais do Windows este valor era 16 bits.
LPARAM
Longint;
Um parâmetro de 32 bits para uma mensagem.
LRESULT
Longint;
Um valor de retorno de 32 bits
HWND
Integer;
Um handle para uma janela. Todos os componentes tipo janela, janelas filhas, janelas principais, etc, tem um handle que o identifica na tabela interna do Windows.
HHOOK
Integer;
Um handle para um hook de sistema instalado no Windows
ATOM
Word;
Um índice para a tabela de atom local ou global para uma string
HGLOBAL
THandle;
Um handle identificando um objeto alocado dinamicamente na memória. No Windows 32, não há distinção entre memória alocada localmente ou globalmente.
HLOCAL
THandle;
Um handle identificando um objeto alocado dinamicamente na memória. No Windows 32, não há distinção entre memória alocada localmente ou globalmente.
FARPROC
Pointer;
Um ponteiro para uma função, geralmente usado como tipo de parâmetro em função que exigem uma função de callback
HGDIOBJ
Integer;
Um handle para um objeto GDI. Pens, contextos de dispositivos, pincéis, etc, possuem um handle um handle que o identifica na tabela interna do Windows.
HBITMAP
Integer;
Um handle para um objeto bitmap do Windows.
HBRUSH
Integer;
Um handle para um objeto brush do Windows.
HDC
Integer;
Um handle para um contexto de dispositivo.
HENHMETAFILE
Integer;
Um handle para um objeto enhanced metafile do Windows.
HFONT
Integer;
Um handle para um objeto fonte lógica do Windows.
HICON
Integer;
Um handle para um objeto ícone do Windows.
HMENU
Integer;
Um handle para um objeto menu do Windows.
HMETAFILE
Integer;
Um handle para um objeto metafile do Windows.
HINST
Integer;
Um handle para um objeto instância.
HMODULE
HINST;
Um handle para um módulo.
HPALETTE
Integer;
Um handle para uma paleta de cores do Windows.
HPEN
Integer;
Um handle para um objeto pen do Windows.
HRGN
Integer;
Um handle para um objeto region do Windows.
HRSRC
Integer;
Um handle para um objeto recurso do Windows.
HKL
Integer;
Um handle para um layout de teclado
HFILE
Integer;
Um handle para um arquivo aberto
HCURSOR
HICON;
Um handle para um objeto mouse cursor do Windows.
COLORREF
DWORD;
Um valor de referência de cor, contendo os valores para o vermelho, azul e verde de uma cor.