Sábado, Janeiro 15, 2005

Dicas balão para componentes

Uma outra maneira de criar uma dica balão para os componentes é criar uma janela do tipo Tooltips_Class32 e atribuí-la ao componente desejado, usando a mensagem TTM_ADDTOOL. A criação desta janela de dica é feita com a função CriaTooltip:


function CriaToolTip(WndParent: HWnd;
TipoIcone : Integer; Titulo : PChar) : HWND;
begin
// Cria a janela balão
Result := CreateWindowEx(0, 'Tooltips_Class32', nil,
TTS_ALWAYSTIP or TTS_BALLOON, Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT), WndParent, 0, hInstance, nil);
// Traz a janela para a frente
if Result <> 0 then begin
SetWindowPos(Result, HWND_TOPMOST, 0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE);
// Configura o título e ícone da dica
if (TipoIcone > 3) or (TipoIcone < 0) then
TipoIcone:= 0;
SendMessage(Result, TTM_SETTITLE, TipoIcone,
Integer(Titulo));
end;
end;

Para atribuir a janela de dica a um componente, usamos a função AdicionaToolTip:

procedure AdicionaToolTip(Window, ToolTip: HWND;
Texto: PChar);
var
Rect: TRect;
ti: TToolInfo;
begin
if (Window <> 0) then begin
GetClientRect(Window, Rect);
// Preenche a estrutura TToolInfo
FillChar(Ti,Sizeof(TToolInfo),0);
ti.cbSize := SizeOf(TToolInfo);
ti.uFlags := TTF_SUBCLASS;
ti.hInst := hInstance;
ti.hwnd := Window;
ti.Rect := Rect;
ti.lpszText := Texto;
// Atribui a dica
SendMessage(ToolTip, TTM_ADDTOOL, 0, Integer(@ti));
end;
end;

O código para criar e atribuir a dica balão é:

procedure TForm1.FormCreate(Sender: TObject);
var
ToolTip : HWND;
begin
ToolTip := CriaToolTip(Form1.Handle, 1, PChar(Application.Title));
AdicionaToolTip(Memo1.Handle, ToolTip, 'Texto da dica');
AdicionaToolTip(Listbox1.Handle, ToolTip, 'Dica da ListBox');
end;

Note que, embora o texto da dica pode ser atribuído à dica relativa ao componente, o título é atribuído à janela da dica. Assim, se criamos apenas uma janela de dica, usando-a para todos os componentes, teremos apenas um título. Se quisermos títulos diferentes para cada dica, devemos criar novas janelas de dica com CriaToolTip.

12 Comentários:

At 8:56 AM, Anônimo disse...

O código é até bom... Mas funciona apenas com componentes que possuem a propriedade "handle". Como atribuir uma dica "balão" a um componente do tipo TLabel, por exemplo?

Grato,

Cristian

 
At 8:41 AM, Giancarlo faccio Hammes disse...

bah.... eu não consegui........
pra mim ( não sei se falta alguma unit ou oque, mas acho que é só a windows ) o delphi não reconhece os tipos TTS_BALLOON ou TTS_ALWAYSTIP... etc e tal.......
se puderem me ajudar

 
At 8:41 AM, Giancarlo faccio Hammes disse...

bah.... eu não consegui........
pra mim ( não sei se falta alguma unit ou oque, mas acho que é só a windows ) o delphi não reconhece os tipos TTS_BALLOON ou TTS_ALWAYSTIP... etc e tal.......
se puderem me ajudar

 
At 8:13 AM, Bruno disse...

Cristian:

Com este código não há muito o que fazer, uma opção é usar o TStaticLabel ao invés do TLabel, pois o TStaticLabel tem um handle. Para fazer dicas balão para qualquer componente, você tem que criar um componente derivado de THintWindow que seja desenhado no formato de dicas balão

 
At 8:17 AM, Bruno disse...

Giancarlo:

Coloque isso antes do código, que funciona:

const
TTS_BALLOON = $40;
TTM_SETTITLE = (WM_USER + 32);

 
At 4:29 PM, zk disse...

falta uma constante
TTS_ALWAYSTIP = $01;

mesmo assim:
Unit1.pas(58): Undeclared identifier: 'TToolInfo'

q lixo de codigo
peguem esse:
http://www.swissdelphicenter.ch/en/showcode.php?id=1587

abraço

 
At 6:48 PM, Andre disse...

Ai como colocar essa TIP em um icone do systry?

 
At 3:53 PM, Bruno disse...

O código é justamente para isso, colocar uma Tip num ícone da SysTray

 
At 9:15 AM, Anônimo disse...

Bom dia.
Como fazer para uma aplicação que está rodando ao lado do relógio, exibir uma mensagem TollTip, igual as atualizações do windows tipo:
As atualizações estão prontas, clique aqui para instalar...?

 
At 6:05 PM, anlopes disse...

ótimo este codigo mas como faço para colocar um icone com uma dica de balão na bandeja do windows ?

 
At 6:05 PM, anlopes disse...

ótimo este codigo mas como faço para colocar um icone com uma dica de balão na bandeja do windows ?

 
At 9:28 PM, João Batista disse...

Olá! amigos se vocês queres uma boa dica para surgir balões de qualquer componente, envie um email para jb.73@hotmail.com, e eu vou diser para vocês como faser surgir balões até mesmo no windows 98. não perca tempo escrevendo códigos complexos. evite isso com apenas o componente aviso_flutuante que eu mesmo desenvolvi. entrem em contato comigo e eu lhes direi como usar esse magnífico componente que eu fiz exclusivamente para isso.
Caso vocês queira, podem me adicionar!
Grato, João Batista.

 

Postar um comentário

<< Home