He estado liado con ello pero no doy con el modo y tengo muchas dudas que no se como solucionar.
Esto es lo que tengo para controlar el evento de desplazarse por la lista y mostrar los Hints:
Código PHP:
//Funcion que controla el evento de desplazamiento del raton sobre los items del combobox de los mapas
void __fastcall TForm1::AppIdle(TObject *Sender, bool &done)
{
TPoint pt;
HWND HWL;
RECT rcItem,rcLista;
GetCursorPos( &pt );
HWL = WindowFromPoint( pt );
if ( HWL != 0 )
{
char buff[128];
GetClassName( HWL, buff, sizeof( buff ) );
if ( StrIComp( buff, "ComboLBox" ) == 0)
{
int inx;
if ( FInCBox)
{
::ScreenToClient( HWL, &pt );
inx = LOWORD( SendMessage( HWL, LB_ITEMFROMPOINT, 0,
(LPARAM)MAKELONG(pt.x, pt.y)));
if ( inx >= 0 ){
//Aqui muestro la imagen
if(FInCBoxMaps){
MostrarImagenMapa(inx);
}
memset(textoHint,'\0',sizeof(textoHint));
//Obtengo la cadena del item
SendMessage( HWL, LB_GETTEXT, inx, int(&textoHint));
//Obtengo su posicion en la lista
SendMessage( HWL, LB_GETITEMRECT, inx, (LPARAM)&rcItem);
int largo=SendMessage( HWL, LB_GETTEXTLEN,inx,0);
//Muestro el hint siempre y cuando sea diferente al que ya se esta mostrando
if(StrIComp( textoHint, hint->Caption.c_str()) != 0)
{
//Necesito saber cuando estoy dentro de la lista del combobox y cuando no para mostrar el hint o hacerlo desaparecer
//Necesito indicarle tanto la posicion donde mostrarse como el tamaño justo
rcLista.left=pt.x; //Necesito la posicion donde se debe mostrar el hint ya que esto me lo muestra arriba del todo de la pantalla
rcLista.top=pt.y; //Necesito la posicion donde se debe mostrar el hint ya que esto me lo muestra arriba del todo de la pantalla
rcLista.right=rcLista.left + (largo * 6); //Necesito el ancho justo de lo que ocupa el texto porque esto no funciona asi
rcLista.bottom=rcLista.top + (rcItem.bottom - rcItem.top); //Necesito el alto justo de lo que ocupa el texto
hint->Caption=textoHint;
hint->Color=clInfoBk;
hint->ActivateHint(rcLista,textoHint);
}
}
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBoxMapasDropDown(TObject *Sender)
{
hint= new THintWindow(ComboBoxMapas->Handle);
FInCBoxMaps = true;
FInCBox = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBoxMapasCloseUp(TObject *Sender)
{
delete hint;
ComboBoxMapas->Hint = ComboBoxMapas->Items->Strings[ComboBoxMapas->ItemIndex];
FInCBoxMaps = false;
FInCBox = false;
MostrarImagenMapa(ComboBoxMapas->ItemIndex);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBoxsDropDown(TObject *Sender)
{
hint= new THintWindow(ComboBoxMapas->Handle);
FInCBox = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBoxsCloseUp(TObject *Sender)
{
delete hint;
ComboBoxMapas->Hint = ComboBoxMapas->Items->Strings[ComboBoxMapas->ItemIndex];
FInCBox = false;
}
//---------------------------------------------------------------------------
Y en el .h:
Código PHP:
class TForm1 : public TForm
{
__published: // IDE-managed Components
...
...
void __fastcall ComboBoxMapasCloseUp(TObject *Sender);
void __fastcall ComboBoxMapasDropDown(TObject *Sender);
void __fastcall ComboBoxsDropDown(TObject *Sender);
void __fastcall ComboBoxsCloseUp(TObject *Sender);
private: // User declarations
...
...
//Para mostrar imagenes cuando me mueva por el ComboBox de mapas
bool FInCBox, FInCBoxMaps;
THintWindow *hint;
char textoHint[200];
void __fastcall AppIdle(TObject *Sender, bool &done);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Me muestra los Hints pero me los muestra arriba del todo de la pantalla en vez de debajo del item de la lista o encima o al lado como hace windows normalmente. Ademas no se como ponerle el ancho correcto para que coja todo el texto del Item. ¿Alguien que pueda ayudarme?
He visto un post donde Roman comenta sobre el tema y de ahi me he guiado un poco:
https://www.clubdelphi.com/foros/sho...429#post523429
Tambien hablaba de que habia creado un componente que hacia esto pero al intentar descargarlo de los enlaces no puedo entrar en su pagina con lo que no puedo descargarlo y seria interesante tener un componente ya hecho que me hubiese ahorrado muchos dolores de cabeza