FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Encontrar un componente
Buenas a todos. A ver si soy capaz de explicarme. Tengo un TPageControl en el que de forma dinámica creo las pestañas y en cada pestaña hay un único TListView que también se crea de forma dinámica.
La creación la hago así: Código:
TListColumn *pColumn; TListItem *pItem; Auxiliar->Close(); Auxiliar->SQL->Text = "SELECT Disco, Cancion, Interprete, Tiempo, Pista FROM Pistas WHERE Registro = :Registro ORDER BY Disco, Pista"; Auxiliar->ParamByName("Registro")->AsInteger = PageControl1->Tag; Auxiliar->Open(); for (; !Auxiliar->Eof; Auxiliar->Next()) { if (PageControl2->PageCount == 0 || PageControl2->ActivePageIndex < Auxiliar->FieldByName("Disco")->AsInteger - 1) { TTabSheet *tPagina = new TTabSheet(PageControl2); tPagina->PageControl = PageControl2; tPagina->Parent = PageControl2; tPagina->Caption = "Disco " + FormatFloat("0", Auxiliar->FieldByName("Disco")->AsInteger); tPagina->Name = FormatFloat("'Disco'0", Auxiliar->FieldByName("Disco")->AsInteger); tPagina->TabVisible = true; PageControl2->ActivePageIndex = Auxiliar->FieldByName("Disco")->AsInteger - 1; lvCanciones = new TListView(tPagina); lvCanciones->Parent = tPagina; lvCanciones->Align = alClient; lvCanciones->BevelKind = bkFlat; lvCanciones->BorderStyle = bsNone; lvCanciones->GridLines = false; lvCanciones->Name = FormatFloat("'Lista'0", Auxiliar->FieldByName("Disco")->AsInteger); lvCanciones->ReadOnly = true; lvCanciones->RowSelect = true; lvCanciones->ShowColumnHeaders = false; lvCanciones->ViewStyle = vsReport; lvCanciones->Columns->Clear(); lvCanciones->Items->Clear(); pColumn = lvCanciones->Columns->Add(); pColumn->Width = 194; pColumn = lvCanciones->Columns->Add(); pColumn->Width = 193; pColumn = lvCanciones->Columns->Add(); pColumn->Alignment = taRightJustify; pColumn->Width = 55; pColumn = lvCanciones->Columns->Add(); pColumn->Width = 0; } pItem = lvCanciones->Items->Add(); pItem->Caption = Auxiliar->FieldByName("Cancion")->AsString.Trim(); pItem->SubItems->Add(Auxiliar->FieldByName("Interprete")->AsString.Trim()); pItem->SubItems->Add(Auxiliar->FieldByName("Tiempo")->AsDateTime.FormatString("n:ss")); pItem->SubItems->Add(Auxiliar->FieldByName("Pista")->AsInteger); } Código:
TComponent *Source; for (int nDisco = 0; nDisco < PageControl2->PageCount; nDisco ++) { Source = this->FindComponent(PageControl2->Pages[nDisco]->Name); TTabSheet *Sheet = static_cast<TTabSheet *>(Source); [...] } Código:
TComponent *Source; for (int nDisco = 0; nDisco < PageControl2->PageCount; nDisco ++) { PageControl2->ActivePageIndex = nDisco Source = this->FindComponent(PageControl2->ActivePage->Name); TTabSheet *Sheet = static_cast<TTabSheet *>(Source); [...] } También he probado con esto: Código:
for (int nDisco = 0; nDisco < PageControl2->ControlCount; nDisco ++) { Source = PageControl2->Controls[nDisco]; if (!Source->ClassNameIs("TTtabSheet")) continue; [...] } Última edición por Angel.Matilla fecha: 08-02-2024 a las 12:50:04. |
#2
|
||||
|
||||
¡¡¡aclarado!!!
Ya sé por qué estaba funcionando mal: Estaba haciendo el FindComponent sobre el formualrio y no sobre el TPageControl.
|
#3
|
||||
|
||||
Sólo como apunte de información general.
FindComponent no es muy eficiente, al contrario es bastante lento. Si lo usas mucho, lo más ágil es guardar una lista con los componentes creados (para eso va muy bien las TObjectList) y luego buscar el componente en esa lista en lugar de recorrerlos todos. Una variante, es usar un TStringList ordenada con el nombre del componente; De esa forma la búsqueda es dicotómica en lugar de secuencial. Más eficiente cuantos más componentes tengamos..
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Donde encontrar componente XMLParser | vejerf | Varios | 0 | 05-03-2007 19:42:00 |
Donde encontrar el componente Quick Report? (delphi7) | tramjauer | Varios | 2 | 05-10-2005 19:46:54 |
Encontrar el enfoque del componente | AGAG4 | Varios | 5 | 14-08-2004 21:17:26 |
donde encontrar el componente RXGIFANIMATOR | viajero2015 | Gráficos | 1 | 30-01-2004 05:31:19 |
Encontrar un componente | tica | Varios | 1 | 29-01-2004 17:47:38 |
|