Você está aqui: Delphi ::: Win32 API (Windows API) ::: Tipos de Dados

Algumas funções da API do Windows mostram o tipo de dados LPTSTR. Qual o tipo compatível em Delphi?

Quantidade de visualizações: 11710 vezes
Muitas vezes encontramos funções na API do Windows que possuem parâmetros do tipo LPTSTR. Veja um exemplo:

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

BOOL GetUserName(
  LPTSTR lpBuffer,
  LPDWORD lpnSize
);
Esta função é usada para obter o nome do usuário atualmente logado no sistema. Note que ela possui dois parâmetros:

lpBuffer - Um ponteiro para um buffer de caracteres que receberá o nome do usuário;

lpnSize - Este parâmetro informa, na entrada, o tamanho do buffer de caracteres e, na saída, informa a quantidade de caracteres copiados para o buffer.

Mas, como podemos usar esta função a partir do Delphi se não temos este tipo de dados (LPTSTR) em Delphi?

Para o tipo LPTSTR nós podemos fornecer uma string terminada em null (#0). E a melhor de forma de se fazer isso é declarando uma matriz de Char. Veja:

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

procedure TForm1.Button1Click(Sender: TObject);
var
  buffer: array[0..255] of Char; // um buffer de 256 caracteres
  tamanho: DWORD;
begin
  // vamos informar ao Windows o tamanho do buffer
  tamanho := 256;

  // vamos chamar a função da API do Windows
  if GetUserName(buffer, tamanho) then
    begin
      ShowMessage('O nome de usuário é: ' + buffer);
      // informa a quantidade de caracteres usados. Note que
      // o caractere de término da string também é informado
      ShowMessage('A função usou: ' + IntToStr(tamanho) +
        ' caracteres');
    end
  else
    ShowMessage('Não foi possível obter o nome do usuário');
end;
Um cuidado que devemos ter é nunca fornecer um buffer muito pequeno para as funções da API do Windows que esperam um ponteiro para strings do tipo LPTSTR. Experimente, por exemplo, fornecer uma matriz de apenas dois caracteres para a função GetUserName(). A menos que o nome de usuário no seu computador tenha apenas uma letra, a chamada à função falhará.

Em Delphi o tipo PChar é um ponteiro para uma string terminada em null. Podemos usá-la também, mas, neste caso, somos responsáveis por alocar memória para a string usando a procedure GetMem() e liberá-la explicitamente usando FreeMem(). Veja;

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

procedure TForm1.Button1Click(Sender: TObject);
var
  buffer: PChar; // um buffer do tipo PChar
  tamanho: DWORD;
begin
  // vamos informar ao Windows o tamanho do buffer
  tamanho := 256;

  // vamos alocar a memória suficiente para receber o nome
  // do usuário
  GetMem(buffer, tamanho);

  // vamos chamar a função da API do Windows
  if GetUserName(buffer, tamanho) then
    begin
      ShowMessage('O nome de usuário é: ' + buffer);
      // informa a quantidade de caracteres usados. Note que
      // o caractere de término da string também é informado
      ShowMessage('A função usou: ' + IntToStr(tamanho) +
        ' caracteres');
    end
  else
    ShowMessage('Não foi possível obter o nome do usuário');

  // vamos liberar o buffer alocado dinamicamente
  FreeMem(buffer);
end;

Finalmente podemos declarar o buffer como String, usar a procedure SetLength() para ajustar seu tamanho e convertê-la para PChar antes de enviá-la à função GetUserName(). Veja como isso pode ser feito:

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

procedure TForm1.Button1Click(Sender: TObject);
var
  buffer: String; // um buffer que será convertido para PChar
  tamanho: DWORD;
begin
  // vamos informar ao Windows o tamanho do buffer
  tamanho := 256;

  // aqui há um truque interessante. como não vamos precisar
  // de 256 caracteres para guardar o nome de usuário e não podemos
  // correr o risco de enviar uma string muito pequena, a saída
  // é usar o retorno de GetUserName() para ajustar o tamanho
  // da string depois de enviá-la à função.

  // vamos ajustar o tamanho da string
  SetLength(buffer, tamanho);
  GetUserName(PChar(buffer), tamanho);
  // agora tamanho guarda a quantidade de caracteres usados na função
  SetLength(buffer, tamanho);  // comente esta linha para ver o resultado

  // se o valor de tamanho for 0, então a função falhou
  if tamanho > 0 then
    begin
    ShowMessage('O nome de usuário é: ' + buffer);
      // informa a quantidade de caracteres usados. Note que
      // o caractere de término da string também é informado
      ShowMessage('A função usou: ' + IntToStr(tamanho) +
        ' caracteres');
    end
  else
    ShowMessage('Não foi possível obter o nome do usuário');
end;
Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.

Link para compartilhar na Internet ou com seus amigos:

Delphi ::: VCL - Visual Component Library ::: TListBox

Como obter e exibir todos os itens selecionados em uma TListBox do Delphi de seleção múltipla

Quantidade de visualizações: 14240 vezes
Este trecho de código mostra como podemos obter e exibir todos os itens selecionados em uma TListBox de seleção múltipla. Para executá-lo, coloque uma ListBox, um Memo e um Button em um formulário. Altere a propriedade MultiSelect da ListBox para True, adicione alguns itens e execute. Selecione um ou mais itens e clique no botão para visualizar o resultado. Note que usei um TStringList (classe concreta derivada de TStrings) para armazenar os itens selecionados. Veja o código:

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

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  selecionados: TStringList;
begin
  // para que este exemplo funcione corretamente, a ListBox
  // deverá permitir seleção múltipla
  // ListBox1.MultiSelect := True;
  selecionados := TStringList.Create;

  // vamos obter os itens selecionados na ListBox
  if ListBox1.SelCount > 0 then
    begin
      for i := 0 to ListBox1.Count - 1 do
        begin
          if ListBox1.Selected[i] then
            selecionados.Add(ListBox1.Items[i]);
        end;

        // vamos exibir os itens selecionados em um TMemo
        Memo1.Lines.Clear;
        Memo1.Lines.Add('Os itens selecionados são:');

        for i := 0 to selecionados.Count - 1 do
          Memo1.Lines.Add(selecionados[i]);
    end
  else
    ShowMessage('Nenhum item selecionado.');

  // vamos liberar o TStringList
  selecionados.Free;
end;

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


Delphi ::: Dicas & Truques ::: Strings e Caracteres

Como converter todo o conteúdo de uma string para letras maiúsculas em Delphi usando a função AnsiUpperCase()

Quantidade de visualizações: 17032 vezes
Algumas vezes precisamos converter todo o conteúdo de uma string para letras maiúsculas. Em Delphi isso pode ser feito com o auxílio da função AnsiUpperCase(). Esta função recebe uma string e retorna outra string com todos os caracteres maiúsculos. Veja o exemplo:

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

procedure TForm1.Button1Click(Sender: TObject);
var
  nome: string;
begin
  nome := 'Osmar';

  // vamos converter a string para letras maiúsculas
  nome := AnsiUpperCase(nome);

  // exibe o resultado
  ShowMessage(nome);
end;

Note que esta função suporta caracteres de mais de um byte e com acentuações.

Para questões de compatibilidade, esta dica foi escrita usando Delphi 2009.


Delphi ::: Dicas & Truques ::: Data e Hora

Como retornar o dia do mês para uma determinada data em Delphi usando as funções DayOfTheMonth() e DayOf()

Quantidade de visualizações: 17540 vezes
Em algumas situações precisamos extrair apenas o dia do mês de uma determinada data. Para isso podemos usar as funções DayOfTheMonth() e DayOf(), ambas contidas na unit DateUtils. Estas funções retornam um valor inteiro na faixa de 1 a 31. Veja, por exemplo, como obter o dia do mês da data atual:

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

procedure TForm1.Button1Click(Sender: TObject);
var
  hoje: TDateTime;
  dia_mes: integer;
begin
  // não esqueça de incluir DateUtils no uses

  // vamos receber a data de hoje
  hoje := Now;

  // vamos obter o dia do mês
  dia_mes := DayOf(hoje);

  // vamos exibir o resultado
  ShowMessage('O dia do mês é: ' + IntToStr(dia_mes));
end;

É importante notar que ambas as funções DayOfTheMonth() e DayOf() esperam um valor do tipo TDateTime representando a data cujo mês queremos extrair.

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


Vamos testar seus conhecimentos em Engenharia Civil - Estruturas de Aço e Madeira

O aço no edifício

A estrutura de estabilização da moldura estrutural da edificação da figura abaixo, que caracteriza-se pela criação de configurações triangulares estáveis, ou amarrações diagonais, pode ser chamada de:



A) Estrutura contraventada.

B) Moldura amarrada excentricamente.

C) Moldura resistente a momentos.

D) Paredes de cisalhamento.

E) Nenhuma das alternativas anteriores.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Engenharia Civil - Construção Civil

Locação da obra

Quais equipamentos são considerados de grande importância para a locação de uma obra?

A) Colher de pedreiro, óculos de proteção, protetor auricular e luvas.

B) Trena de plástico, capacete, cimento e calculadora digital.

C) Colher de pedreiro, trena de plástico e régua metálica.

D) Régua metálica, teodolito e trena de plástico.

E) Teodolito, nível de mangueira, trena metálica, linha de náilon e prumo.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Dimensionamento de pilares intermediários

Uma das primeiras etapas ao desenvolver um projeto estrutural é a concepção estrutural. Nessa etapa, é necessário estimar a dimensão dos elementos estruturais e o pré-dimensionamento com base na NBR 6118/2014.

O engenheiro Thiago foi convidado para pré-dimensionar um pilar intermediário de concreto armado.

A seguir, os cuidados tomados por ele:

I. O pilar intermediário foi calculado com base na força atuante centrada.

II. No pilar intermediário, não foi calculado o momento de 2ª ordem.

III. O pilar foi calculado como pilar de canto.

Thiago procedeu corretamente em:

A) I, apenas.

B) I e II, apenas.

C) II, apenas.

D) I e III, apenas.

E) II e III, apenas.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Vantagens e Desvantagens do Concreto Armado

O concreto armado é composto pelo concreto simples e por barras de aço estrategicamente posicionadas no interior do concreto. O trabalho conjunto é garantido pela aderência entre os materiais que o compõem e, com isso, o concreto armado une a resistência à compressão do concreto com a resistência à tração do aço.

Com relação às características do concreto armado, assinale a alternativa correta:

A) O concreto armado tem elevada resistência à compressão e baixa resistência à tração.

B) As armaduras colocadas na parte inferior de vigas de concreto absorvem os esforços de tração de uma peça sujeita à flexão e controlam o aparecimento de fissuras.

C) As armaduras de peças de concreto armado se limitam a absorver os esforços gerados por solicitações normais de tração.

D) É preciso ter cuidado ao utilizar o concreto e o aço em conjunto, já que são materiais distintos.

E) O concreto armado surgiu apenas no século XX, quando passou a ser utilizado também no Brasil.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica

Fórmula de Chézy

Um canal reto e retangular tem 2,1m de largura e 1,2m de profundidade e está com uma declividade de fundo de 3°.

Sendo o fator de atrito igual a 0,022, a vazão para escoamento uniforme será:

A) 23,97m3/s.

B) 25,78m3/s.

C) 30,87m3/s.

D) 37,00m3/s.

E) 37,55m3/s.
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

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais

Linguagens Mais Populares

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



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