Ver Mensaje Individual
  #6  
Antiguo 15-12-2017
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 11
aguml Va por buen camino
Me gusta mas la otra opcion y he estado liado con ello intentando adaptar el codigo y he llegado a esto:
Código PHP:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    
//Necesario para el desplazamiento automatico de los listbox de Armas2 y Armas3
    
TListBox *LB;
    
_oldwndProc ListBoxCatArmaChris1->WindowProc;
    
    for(
int i=0GroupBoxInventarioChris->ControlCounti++){
        if(
GroupBoxInventarioChris->Controls[i]->ClassNameIs("TListBox")){
            
LB static_cast<TListBox*>(GroupBoxInventarioChris->Controls[i]);
            if(
LB){
                
LB->WindowProc newWndProc;
                
LB->ItemIndex  0;
            }
        }
    }
    for(
int i=0GroupBoxInventarioSheva->ControlCounti++){
        if(
GroupBoxInventarioSheva->Controls[i]->ClassNameIs("TListBox")){
            
LB static_cast<TListBox*>(GroupBoxInventarioSheva->Controls[i]);
            if(
LB){
                
LB->WindowProc newWndProc;
                
LB->ItemIndex  0;
            }
        }
    }
}
//-------------------------------------------------------------------------

void __fastcall TForm1::newWndProc(TMessageMessage)
{
    if(
Message.Msg == WM_VSCROLL)
        
vertScroll(LBActual);
    
_oldwndProc(Message);
}
//-------------------------------------------------------------------------

void __fastcall TForm1::vertScroll(TObject *Sender)
{
    
TPanel *Panel;
    
TGroupBox *GB;
    
TComboBox *CB;
    
AnsiString nombreCB;
    
TPoint pt;
    
HWND HWL;

    
GetCursorPos( &pt );
    
HWL WindowFromPointpt );
    ::
ScreenToClientHWL, &pt );

    for(
int i=0TabControl1->ControlCounti++){
        if(
TabControl1->Controls[i]->ClassNameIs("TPanel") && TabControl1->Controls[i]->Visible==true){
            
Panel static_cast<TPanel*>(TabControl1->Controls[i]);
            if(
Panel->Name == "PanelArmas2"){
                
GB GroupBoxInventarioChris;
            }else if(
Panel->Name == "PanelArmas3"){
                
GB GroupBoxInventarioSheva;
            }
            
//char buff[128];
            //GetClassName( HWL, buff, sizeof( buff ) );
            
LBActual = (TListBox*)GB->ControlAtPos(pt,false,true);
            
LBActual->Selected[GetScrollPos(LBActual->HandleSB_VERT)] = true;
            
nombreCB="ComboBox"+LBActual->Name.SubString(11,LBActual->Name.Length());
            
CB static_cast<TComboBox*>(GB->FindChildControl(nombreCB));
            
RellenarCombo(CB,LBActual->ItemIndex);
            break;
        }
    }
}
//-------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
    
TListBox *LB;
    for(
int i=0GroupBoxInventarioChris->ControlCounti++){
        if(
GroupBoxInventarioChris->Controls[i]->ClassNameIs("TListBox")){
            
LB static_cast<TListBox*>(GroupBoxInventarioChris->Controls[i]);
            if(
LB){
                
LB->WindowProc _oldwndProc;
            }
        }
    }
    for(
int i=0GroupBoxInventarioSheva->ControlCounti++){
        if(
GroupBoxInventarioSheva->Controls[i]->ClassNameIs("TListBox")){
            
LB static_cast<TListBox*>(GroupBoxInventarioSheva->Controls[i]);
            if(
LB){
                
LB->WindowProc _oldwndProc;
            }
        }
    }
}
//------------------------------------------------------------------------- 
El primer problema es que desaparecen todos los ListBox menos el primero y al cerrar la aplicacion da una excepcion incluso despues de salir del evento OnDestroy.
El segundo problema es que no soy capaz de obtener el ListBox actual. Intenté con el evento OnMouseMove del ListBox pero al usar el scroll de este no entra en ese evento asi que lo estoy intentando como ven en el codigo, atraves de la posicion en el GroupBox pero no retorna el Puntero al ListBox aunque he podido ver que la clase es TListBox con las dos lineas que tengo comentadas. Por otro lado LBActual ya no hace falta pasarla como parametro y podria estar en la funcion vertScroll ya que solo hago uso de ella ahi.
¿Como puedo hacer para saber cual ListBox es el que llama a la funcion? ¿Y para solucionar lo de los ListBox que desaparecen?

Última edición por aguml fecha: 15-12-2017 a las 22:04:21.
Responder Con Cita