Você está aqui: Delphi ::: Win32 API (Windows API) ::: Formulários e Janelas

Como usar a função FindWindow() da API do Windows para retornar o handle de uma determinada janela de alto-nível

Quantidade de visualizações: 22180 vezes
A função FindWindow() da API do Windows é muito útil quando precisamos obter o handle de uma determinada janela de alto-nível (esta função não nos permite localizar janelas-filhas). Veja sua assinatura:

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

HWND FindWindow(          
  LPCTSTR lpClassName,
  LPCTSTR lpWindowName
);

Esta função possui dois parâmetros:

lpClassName - É um ponteiro para uma string terminada em null que especifica o nome de classe ou um átomo de classe criado por uma chamada anterior à função RegisterClass() ou RegisterClassEx(). O átomo deve estar no valor de baixa-ordem (low-order) de lpClassName e o valor de alta-ordem (high-order) deve ser zero.

Se lpClassName apontar para uma string, ele especifica o nome de classe da janela. O nome de classe pode ser qualquer nome registrado anteriormente com uma chamada à RegisterClass() ou RegisterClassEx(), ou qualquer nome de classe dos controles pré-definidos.

Se lpClassName for null, a funções encontrará todas as janelas cujos títulos sejam iguais ao parâmetro lpWindowName.

lpWindowName - É um ponteiro para uma string terminada em null que especifica o nome da janela, ou melhor, o título da janela. Se este parâmetro for null, todas as janelas serão consideradas e a função FindWindow() retornará a primeira janela da lista.

Veja um trecho de código no qual obtemos um handle para a janela do Bloco de Notas.

----------------------------------------------------------------------
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
  hNotepadWindow: HWND;
begin
  hNotepadWindow := FindWindow('notepad', nil);
  ShowMessage('O handle da janela é: ' + IntToStr(hNotepadWindow));
end;
Note que, se houver várias janelas do Bloco de Notas abertas, a função retornará apenas o handle para a primeira janela ou, mais comumente, a última janela a estar ativa. Desta forma, abra algumas janelas do Bloco de Notas e vamos fechar uma delas com o seguinte 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
  hNotepadWindow: HWND;
  tituloJanela: array[0..255] of Char;
  tamTituloJanela: Integer;
begin
  hNotepadWindow := FindWindow('notepad', nil);
  tamTituloJanela := 256; 

  // vamos fechar a janela com o handle obtido
  // primeiro obtemos o título da janela a ser fechada
  GetWindowText(hNotepadWindow, tituloJanela, tamTituloJanela);
  ShowMessage('Vou fechar a janela do Bloco de Notas com o título: ' +
     tituloJanela);
  // vamos fechar a janela
  SendMessage(hNotepadWindow, WM_SYSCOMMAND, SC_CLOSE, 0);
end;
Vejamos agora como encontrar uma janela fornecendo apenas o nome da janela (ou melhor, seu título). 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
  hNotepadWindow: HWND;
  classeJanela: array[0..255] of Char;
  tamClasseJanela: Integer;
begin
  // vamos localizar e fechar uma janela baseado apenas em seu título
  hNotepadWindow := FindWindow(nil, 'Sem título - Bloco de notas');
  tamClasseJanela := 256;

  // encontramos a janela?
  if hNotepadWindow <> 0 then
    begin
      // vamos obter o nome de classe da janela
      GetClassName(hNotepadWindow, classeJanela, tamClasseJanela);

      // vamos perguntar ao usuário se ele deseja mesmo fechar a janela
      if Application.MessageBox(PChar('Deseja mesmo fechar a janela com o nome de classe: ' +
        classeJanela + '?'), 'Fechar', MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = ID_YES then

        begin
          // vamos fechar a janela
          SendMessage(hNotepadWindow, WM_SYSCOMMAND, SC_CLOSE, 0);
        end;
    end
  else
    begin
      ShowMessage('Não foi possível obter o handle da janela');
    end;
end;
Neste último trecho de código nós encontramos a janela de acordo com o título fornecido e em seguida usamos a função GetClassName() da API do Windows para obter o nome de classe de janela.

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

Link para compartilhar na Internet ou com seus amigos:

Delphi ::: Imagens, Gráficos e Cores ::: TBitmap (A classe TBitmap)

Computação gráfica em Delphi - Como usar a classe TBitmap do Delphi

Quantidade de visualizações: 16455 vezes
A classe TBitmap encapsula um bitmap Windows (HBITMAP, um handle para um bitmap), incluindo sua paleta (HPALETTE, um handle para uma paleta de cores).

Esta classe herda de TGraphic e é usada para criar, manipular (redimensionar, rolar, rotacionar, pintar, etc) e armazenar imagens na memória e como arquivos em disco.

A classe TBitmap contém muitas propriedades e métodos úteis. Entre seus métodos podemos citar LoadFromFile(), usado para carregar uma imagem bitmap a partir do disco e guardá-la em memória como um objeto TBitmap. Veja o trecho de código abaixo:

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

procedure TForm2.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  // vamos criar o bitmap
  bmp := TBitmap.Create;

  // vamos carregar a imagem e guardá-la no bitmap
  bmp.LoadFromFile('foto.bmp');

  // vamos desenhar o bitmap no formulário
  // começando nas coordenadas x = 0; y = 0 a partir
  // do canto superior esquerdo da área cliente do formulário
  Form2.Canvas.Draw(0, 0, bmp);

  // vamos liberar o bitmap
  bmp.Free;
end;

Aqui nós carregamos o bitmap foto.bmp e o desenhamos na superfície do formulário usando o método Draw() do Canvas do formulário.

É possível também redimensionar o bitmap ao desenhá-lo no formulário. Veja este novo trecho de código:

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

procedure TForm2.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
  retang: TRect; // um objeto TRect
begin
  // vamos criar o bitmap
  bmp := TBitmap.Create;

  // vamos carregar a imagem e guardá-la no bitmap
  bmp.LoadFromFile('foto.bmp');

  // vamos redimensionar o bitmap na memória de
  // acordo com o retângulo abaixo
  retang.Top := 0;
  retang.Left := 0;
  retang.Right := 200;
  retang.Bottom := 150;

  // vamos desenhar o bitmap usando o método
  // StretchDraw da classe TCanvas
  Form2.Canvas.StretchDraw(retang, bmp);

  // vamos liberar o bitmap
  bmp.Free;
end;

Aqui nós usamos um objeto do registro (record) TRect para criar um retângulo especificando o tamanho do bitmap e fornecemos tal retângulo, juntamente com o bitmap, para o método StretchDraw() da classe TCanvas. Este método redimensiona a imagem antes de desenhá-la na superfície do formulário.

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


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

Como retornar a quantidade de itens em uma TListBox do Delphi usando a propriedade Items.Count

Quantidade de visualizações: 13040 vezes
Em algumas situações nós precisamos obter a quantidade de itens em uma TListBox. Isso pode ser feito por meio da propriedade Count do objeto Items, uma instância da classe TStrings. Esta propriedade contém um valor inteiro que representa a quantidade de elementos na ListBox. 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
  quant: Integer;
begin
  // vamos adicionar dois itens na TListBox
  ListBox1.Items.Add('Item 1');
  ListBox1.Items.Add('Item 2');

  // vamos obter a quantidade de itens
  quant := ListBox1.Items.Count;

  // exibe o resultado
  ShowMessage('Quantidade de elementos: ' + IntToStr(quant));
end;

É possível também obter a quantidade de itens em uma TListBox acessando a propriedade Count da classe TCustomListBox. Esta propriedade é herdada pela classe TListBox. Veja:

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

quant := ListBox1.Count;


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


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

Como retornar o item selecionado em uma ListBox do Delphi usando a propriedade ItemIndex

Quantidade de visualizações: 20253 vezes
O item selecionado em uma TListBox pode ser obtido fornecendo-se o índice do ítem selecionado como índice para a propriedade Items (do tipo TStrings) da ListBox. Veja como isso é feito no trecho de código abaixo:

----------------------------------------------------------------------
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
  item_selecionado: String;
begin
  // vamos obter o item selecionado na ListBox
  item_selecionado := ListBox1.Items[ListBox1.ItemIndex];

  // mostra o resultado
  ShowMessage('O item selecionado é: ' + item_selecionado);
end;

Contudo, este código provocará uma exceção do tipo EStringListError com a mensagem "List index out of bonds(-1)" se nenhum item estiver selecionado na ListBox. Para evitar tal erro, certifique-se de verificar se algum item foi selecionado antes de tentar obtê-lo. 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
  item_selecionado: String;
begin
  // vamos obter o item selecionado na ListBox
  if ListBox1.ItemIndex > -1 then
    begin
      item_selecionado := ListBox1.Items[ListBox1.ItemIndex];

      // mostra o resultado
      ShowMessage('O item selecionado é: ' + item_selecionado);
    end
  else
    ShowMessage('Nenhum item selecionado.');
end;

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


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