Hola.
Cita:
Empezado por aguml
Tengo un problema con tu codigo, tengo 18 listboxs que requieren hacer eso y no veo una solucion buena crear 18 funciones, una para cada, y no se me ocurre como hacer que todas tengan la misma funcion y funcione solo con el listbox que la use en ese momento.
|
Así es, pero lamentablemente omitiste ese "pequeño" detalle en tu primer mensaje...
Otra opción:
.h
Código PHP:
class TMyListBox : public TListBox
{
private:
int _index;
TWndMethod _oldWndProc;
TNotifyEvent _vScroll;
protected:
virtual void __fastcall WndProc(TMessage &msg) {
if (msg.Msg == WM_VSCROLL && _vScroll) {
_index = GetScrollPos(this->Handle, SB_VERT);
_vScroll(this);
}
TListBox::WndProc(msg);
}
public:
__fastcall TMyListBox(TComponent *Owner) : TListBox(Owner) {
_oldWndProc = this->WindowProc;
}
__property TNotifyEvent OnVerticalScroll = {read = _vScroll, write = _vScroll};
__property int CurrentIndex = {read = _index};
__fastcall ~TMyListBox() {
this->WindowProc = _oldWndProc;
}
};
.cpp
Código PHP:
...
TMyListBox *lb1; // *lb2,...,*lb18
void __fastcall TForm1::FormCreate(TObject *Sender)
{
lb1 = new TMyListBox(this);
lb1->Parent = this;
lb1->Items->CommaText = "cero,uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve";
lb1->Height = 22;
lb1->Left = 100;
lb1->Top = 50;
lb1->Font->Size = 9;
lb1->OnVerticalScroll = ListBoxVScroll;
}
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete lb1;
}
Dado el grado de reusabilidad que puedas darle en lo futuro, podrías convertirlo en componente para así realizar las inicializaciones en tiempo de diseño.
Salida:
Saludos