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:
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
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
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
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
Giancarlo:
Coloque isso antes do código, que funciona:
const
TTS_BALLOON = $40;
TTM_SETTITLE = (WM_USER + 32);
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
Ai como colocar essa TIP em um icone do systry?
O código é justamente para isso, colocar uma Tip num ícone da SysTray
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...?
ótimo este codigo mas como faço para colocar um icone com uma dica de balão na bandeja do windows ?
ótimo este codigo mas como faço para colocar um icone com uma dica de balão na bandeja do windows ?
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