PDA

Ver la Versión Completa : hints con item en lista !!!!!!


david_uh
13-07-2007, 20:37:18
buen día caballeros

tengo una lista con varios items deseo que al seleccionarse un item parezca una etiqueta (hint) diferente por cada item, vi ese truco en algun lugar pero por mas que busco no lo encuentro

gracias por sus aportes

roman
13-07-2007, 20:42:40
Quizá te sirve ver mi componente TComboHintsBox (http://romansg.net/index.php?pg=combohintsbox). Aunque no lo he probado, pienso que debería ser incluso más sencillo con un ListBox. En todo caso, el ejemplo puede servirte para ver como desplegar tus propios hints.

// Saludos

cHackAll
13-07-2007, 20:43:47
procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
ListBox1.Hint := ListBox1.Items[(Y - 1) div ListBox1.ItemHeight];
Application.ActivateHint(Mouse.CursorPos);
end;


0j0: ListBox1.ShowHint := True;

david_uh
13-07-2007, 20:52:33
bien ahi, funciona si pongo el mouse desearia que trabaje con el elemento seleccionado ya sea que este seleccionado por teclado o por instruccuines del programa , es decir que la etiqueta aparezca encima o debajo de el elemento seleccionado

gracias por tu ayuda

cHackAll
13-07-2007, 21:34:38
procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ListBox1.ItemIndex <> -1 then
begin
ListBox1.Hint := ListBox1.Items[ListBox1.ItemIndex];
Application.ActivateHint(Mouse.CursorPos);
end;
end;

procedure TForm1.ListBox1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key in [VK_PRIOR..VK_DOWN] then
begin
Mouse.CursorPos := ListBox1.ClientToScreen(Point(ListBox1.Width div 2, (ListBox1.ItemIndex * ListBox1.ItemHeight) + (ListBox1.ItemHeight div 2)));
ListBox1MouseMove(Sender, [], 0, 0);
end;
end;


No está en el OnKeyDown (pues se vería mejor), porque aún no habría actualizado el ItemIndex... ahora de poder se puede.

david_uh
13-07-2007, 23:24:48
pues nada, al seleccionar un elemento con el teclado desaparece el cursor del mouse, es decir se va a al parte inferior de la pantalla

david_uh
13-07-2007, 23:47:24
bien lo solucione poniendole a la cordenada y el valor del top de la lista

gracias sirvio de mucho

cHackAll
14-07-2007, 00:12:06
...lo solucione poniendole a la cordenada y el valor del top de la lista..

Me alegra que te haya servido, pero me parece que tu solicion a la nueva eventualidad no es la adecuada (anti estética)... prueba reemplazar con ésto:


Mouse.CursorPos := ListBox1.ClientToScreen(Point(ListBox1.Width div 2, ((ListBox1.ItemIndex - Windows.GetScrollPos(ListBox1.Handle, SB_VERT)) * ListBox1.ItemHeight) + (ListBox1.ItemHeight div 2)));