Você está aqui: Delphi ::: Win32 API (Windows API) ::: Formulários e Janelas |
Aprenda a usar a função EnumWindows() da API do Windows para listar todas as janelas de alto-nível abertas no momentoQuantidade de visualizações: 13157 vezes |
A função EnumWindows() da API do Windows pode ser usada para listar todas as janelas de alto-nível abertas no momento (ainda que não visíveis na tela). Veja sua assinatura:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam ); Note que esta função requer um ponteiro para uma função de Callback a ser definida em nosso código Delphi. Podemos ainda usar o parâmetro lParam para passar uma referência a um determinada controle do formulário, tal como um TMemo ou TListBox. Veja a assinatura para a função de Callback: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam ); Note que esta função de Callback é chamada para cada janela encontrada e nos permite acesso à janela sendo listada no momento por meio do parâmetro hwnd, que é um handle para a janela. Novamente podemos usar o parâmetro lParam para acessar o TMemo ou TListBox passado pela função EnumWindows. Vamos ao código agora. Veja como listar todas as janelas de alto-nível ativas no momento. Note que vamos exibir apenas as janelas que contenham um título (remova esta condição caso queira listar todas): ---------------------------------------------------------------------- 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 EnumWindowsProc(Wnd: HWND; memo: TMemo): BOOL; stdcall; const MyMaxName = 256; MyMaxText = 256; var ClassName: string; WindowText: string; begin // vamos obter o nome de classe da janela SetLength(ClassName, MyMaxName); SetLength(ClassName, GetClassName(Wnd, PChar(ClassName), MyMaxName)); // vamos obter o título da janela SetLength(WindowText, MyMaxText); SetLength(WindowText, SendMessage(Wnd, WM_GETTEXT, MyMaxText, lParam(PChar(WindowText)))); // vamos exibir apenas as janelas que contenham título if WindowText <> '' then begin memo.Lines.Add('Nome da classe: ' + ClassName + ' - Título: ' + WindowText + ' - Handle: ' + IntToStr(Wnd)); end; // vamos passar para a próxima janela Result := True; end; procedure TForm1.Button1Click(Sender: TObject); begin // vamos listar todas as janelas de alto-nível em um TMemo EnumWindows(@EnumWindowsProc, lParam(Memo1)); end; Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
![]() |
Delphi ::: VCL - Visual Component Library ::: TListBox |
Como obter e exibir todos os itens selecionados em uma TListBox do Delphi de seleção múltiplaQuantidade de visualizações: 14305 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 ::: VCL - Visual Component Library ::: TStringGrid |
Como usar o evento OnDrawCell para controlar o desenho das células em um TStringGrid do DelphiQuantidade de visualizações: 16143 vezes |
O evento OnDrawCell, definido originalmente na classe TCustomDrawGrid, é disparado quando uma determinada célula do TStringGrid precisa ser desenhada. Este evento possui a seguinte assinatura:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- property OnDrawCell: TDrawCellEvent; O tipo Grids.TDrawCellEvent apresenta, no Delphi 2009, a seguinte lista de parâmetros: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- TDrawCellEvent = procedure(Sender: TObject; ACol, ARow: Longint; Rect: TRect; State: TGridDrawState) of object; Vamos ver cada um destes parâmetros separadamente: Sender - Representa a grid na qual a célula está sendo desenhada; ACol, ARow - Índices da coluna e linha na qual a célula está sendo desenhada; Rect - Localização da célula na área de desenho (canvas); State - Um objeto Grids.TGridDrawState que indica se a célula possui o foco (gdFocused), está selecionada (gdSelected) e se a mesma é uma célula fixa (gdFixed). Células fixas permanecem vísiveis quando as barras de rolagem são acionadas. Veja um trecho de código no qual usamos o evento OnDrawCell para colorir de amarelo o fundo de uma determinada célula do TStringGrid: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var conteudo: String; begin // vamos obter o conteúdo da célula conteudo := StringGrid1.Cells[ACol, ARow]; // vamos colorir a célula na segunda linha e terceira // coluna com o fundo amarelo if (ACol = 2) and (ARow = 1) then begin StringGrid1.Canvas.Brush.Color := clYellow; StringGrid1.Canvas.FillRect(Rect); StringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, conteudo); end; end; Para este exemplo deixei o valor da propriedade DefaultDrawing do TStringGrid como true. Isso faz com que o fundo da célula seja pintado antes que o evento DrawCell seja chamado e o efeito 3D das células fixas seja exibido ou o retângulo de foco ao redor da célula que possui o foco no momento seja desenhado após o evento. Experimente executar o exemplo com o valor false para a propriedade DefaultDrawing para ver o resultado. Veja agora um trecho de código no qual definimos a cor vermelha para o texto das células cujo valor inteiro seja menor que 10: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var conteudo: String; begin // vamos obter o conteúdo da célula conteudo := StringGrid1.Cells[ACol, ARow]; // vamos definir a cor vermelha para o texto das células // contendo valores menores que 10 if (conteudo <> '') and (StrToInt(conteudo) < 10) then begin StringGrid1.Canvas.Font.Color := clRed; StringGrid1.Canvas.FillRect(Rect); StringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, conteudo); end; end; Tenha cuidado para que o valor da célula possa ser convertido para inteiro por meio do uso da função StrToInt(). Caso a conversão não for possível, uma exceção do tipo EConvertError será lançada. |
Delphi ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como calcular o cosseno de um ângulo em Delphi usando a função Cos() - Calculadora de cosseno em DelphiQuantidade de visualizações: 1187 vezes |
Em geral, quando falamos de cosseno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função cosseno disponível nas linguagens de programação para calcular o cosseno 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 cosseno. 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 cosseno é a razão entre o cateto adjascente e a hipotenusa, ou seja, o cateto adjascente dividido pela hipotenusa. Veja a fórmula: \[\text{Cosseno} = \frac{\text{Cateto adjascente}}{\text{Hipotenusa}} \] Então, se dividirmos 30 por 36.056 (na figura eu arredondei) nós teremos 0.8320, que é a razão entre o cateto adjascente e a hipotenusa (em radianos). Agora, experimente calcular o arco-cosseno de 0.8320. O resultado será 0.5881 (em radianos). Convertendo 0.5881 radianos para graus, nós obtemos 33.69º, que é exatamente o ângulo em graus entre o cateto adjascente e a hipotenusa na figura acima. Pronto! Agora que já sabemos o que é cosseno na trigonometria, vamos entender mais sobre a função cos() 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 com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Add('Cosseno de 0 = ' + FloatToStr(Cos(0))); Memo1.Lines.Add('Cosseno de 1 = ' + FloatToStr(Cos(1))); Memo1.Lines.Add('Cosseno de 2 = ' + FloatToStr(Cos(2))); end; Ao executar este código Delphi nós teremos o seguinte resultado: Cosseno de 0 = 1 Cosseno de 1 = 0,54030230586814 Cosseno de 2 = -0,416146836547142 Note que calculamos os cossenos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função cosseno mostrada abaixo: ![]() |
Desafios, Exercícios e Algoritmos Resolvidos de Delphi |
Veja mais Dicas e truques de Delphi |
Dicas e truques de outras linguagens |
Códigos Fonte |
![]() 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 |
![]() 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 |