Ver Mensaje Individual
  #2  
Antiguo 14-12-2017
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 11
aguml Va por buen camino
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 *Senderbool &done)
{
    
TPoint pt;
    
HWND HWL;

    
RECT rcItem,rcLista;

    
GetCursorPos( &pt );
    
HWL WindowFromPointpt );

    if ( 
HWL != )
    {
        
char buff[128];
        
GetClassNameHWLbuffsizeofbuff ) );
        if ( 
StrICompbuff"ComboLBox" ) == 0)
        {
            
int inx;
            if ( 
FInCBox)
            {
                ::
ScreenToClientHWL, &pt );
                
inx LOWORDSendMessageHWLLB_ITEMFROMPOINT0,
                (
LPARAM)MAKELONG(pt.xpt.y)));

                if ( 
inx >= ){
                    
//Aqui muestro la imagen
                    
if(FInCBoxMaps){
                        
MostrarImagenMapa(inx);
                    }

                    
memset(textoHint,'\0',sizeof(textoHint));

                    
//Obtengo la cadena del item
                    
SendMessageHWLLB_GETTEXTinxint(&textoHint));
                    
//Obtengo su posicion en la lista
                    
SendMessageHWLLB_GETITEMRECTinx, (LPARAM)&rcItem);
                    
int largo=SendMessageHWLLB_GETTEXTLEN,inx,0);
                    
//Muestro el hint siempre y cuando sea diferente al que ya se esta mostrando
                    
if(StrIComptextoHinthint->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 FInCBoxFInCBoxMaps;
    
THintWindow *hint;
    
char  textoHint[200];

    
void __fastcall AppIdle(TObject *Senderbool &done);
public:        
// User declarations
    
__fastcall TForm1(TComponentOwner);
};
//---------------------------------------------------------------------------
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
Responder Con Cita