Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Posicionar el Hint de un TListView en la posicion del raton (https://www.clubdelphi.com/foros/showthread.php?t=86976)

aguml 30-10-2014 20:40:30

Posicionar el Hint de un TListView en la posicion del raton
 
Hola amigos, quiero que al colocarme en una fila del ListView me aparezca el InfoTip o Hint para cada fila pero en la posicion del raton ya que me aparece pero en la primera columna aunque el raton este en la ultima columna de esa fila.
Buscando por internet encontré esto que se supone que haria lo que yo quiero pero no se porque ni siquiera entra en el evento OnOver del TListView.
Código PHP:

void __fastcall TForm1::ListViewProcesosInfoTip(TObject *Sender,
      
TListItem *ItemAnsiString &InfoTip)
{
   
InfoTip Item->SubItems->Strings[4];
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ListViewProcesosMouseMove(TObject *Sender,
      
TShiftState Shiftint Xint Y)
{
   
TPoint pt;
   
TLVHitTestInfo lvHitInfo;
   
AnsiString hint;

   
pt ListViewProcesos->ScreenToClient(Mouse->CursorPos);

   
memset(&lvHitInfo0sizeof(lvHitInfo));
   
lvHitInfo.pt pt;

   
//over a sub item!
   
if( -!= ListViewProcesos->Perform(LVM_SUBITEMHITTEST0, (int)&lvHitInfo))
   {
      
//activate hint
      
hint ListViewProcesos->Items->Item[lvHitInfo.iItem]->SubItems->Strings[4];
      
ListViewProcesos->Hint hint;
      
Application->ActivateHint(Mouse->CursorPos) ;
   }
}
//--------------------------------------------------------------------------- 

¿Alguien sabe como hacer eso?

escafandra 30-10-2014 21:01:38

Revisa el evento TApplication::OnShowHint

Saludos.

aguml 30-10-2014 22:29:49

ok pero ¿Por que puede ser que no entre al evento onover del tlistview?

escafandra 30-10-2014 22:37:43

Ese evento no lo tiene el TListView de mi Builder C++ 6

Saludos.

aguml 30-10-2014 22:43:32

perdon, quise decir OnMouseMove

escafandra 31-10-2014 00:06:22

Pues ese evento funciona perfectamante. Mira a ver si lo tienes bien asignado en el inspector de objetos.


Saludos.

aguml 31-10-2014 21:32:50

Pues si, entra en ese evento lo que pasa es que como la funcion es cerrada pues no me daba cuenta. El problema es que sigue sin posicionar el hint donde yo quiero.
Otra cuestion, ¿Y si quiero que muestre el hint solo y unicamente cuando esté sobre los items de la primera columna? Es la que tiene el nombre de archivo y es donde quiero que al ponerme encima del nombre me muestre el nombre con ruta completa pero al ponerme en otra columna no quiero que salga.

Edito:
Lo ultimo que pedia lo he conseguido así:
Código SQL [-]
void __fastcall TForm1::ListViewProcesosInfoTip(TObject *Sender,
      TListItem *Item, AnsiString &InfoTip)
{
   if(ocultarHint == true)
      InfoTip = "";
   else
      InfoTip = Item->SubItems->Strings[4];
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ListViewProcesosMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
   TPoint pt;
   TLVHitTestInfo lvHitInfo;
   AnsiString hint;

   pt = ListViewProcesos->ScreenToClient(Mouse->CursorPos);

   memset(&lvHitInfo, 0, sizeof(lvHitInfo));
   lvHitInfo.pt = pt;

   //over a sub item!
   if( -1 != ListViewProcesos->Perform(LVM_SUBITEMHITTEST, 0, (int)&lvHitInfo) &&
      pt.x < ListViewProcesos->Columns->Items[0]->Width)
   {
      ocultarHint = false;
   }else{
      ocultarHint = true;
   }
}
//---------------------------------------------------------------------------
Pero sigo interesado en lo de hacer que el hint aparezca en la posicion que yo desee.

escafandra 31-10-2014 23:03:54

OnShowHint te permite variar la posición del hint.

Saludos.

escafandra 01-11-2014 01:41:34

De la ayuda de Builder:

Código PHP:

void __fastcall TForm1::DoShowHint(System::AnsiString &HintStrbool &CanShowTHintInfo &HintInfo)
{
  if (
HintInfo.HintControl == SpeedButton3
  {
    
HintInfo.HintColor clAqua;// Changes only for this hint
    
HintInfo.HintMaxWidth 120// Hint text word wraps if width is greater than 120
    
HintInfo.HintPos.+= SpeedButton3->Width// Move hint to right edge
  
}
}

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  
Application->ShowHint true;
  
Application->OnShowHint DoShowHint;


Para obtener la posición del ratón en coordenadas relativas a la pantalla lo haces con la API GetCursorPos
Para convertir esas coordenadas a relativas de una ventana usa ScreenToClient


Saludos


La franja horaria es GMT +2. Ahora son las 11:14:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi