Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Busquedad en un listview (https://www.clubdelphi.com/foros/showthread.php?t=85419)

eennzzoo 14-03-2014 17:34:55

Busquedad en un listview
 
Hola lo que quiero es cargar un txt en un listview. Y luego de que se carguen todos los datos, buscar uno en particular por su numero de documento.
Con este codigo logro listar el primer registro de un txt. Y no todos.

Código:

void __fastcall TForm1::ShowRegister(const int pp)
{
  TListItem *lItem = ListView1->Items->Add();
  lItem->Caption = TS->Strings[pp];
  lItem->SubItems->Add(TS->Strings[pp+1]+" "+TS->Strings[pp+2]);
}


ecfisa 14-03-2014 23:44:57

Hola eennzzoo.

Te hice un ejemplo donde si se encuentra el documento buscado, pone los datos del ListView en color rojo y negrita.
Código:

...
// Configuración echa en el evento OnCreate para clarificar,
// podes realizala desde el Object Inspector en tiempo de diseño.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  ListView1->Align = alTop;
  ListView1->Columns->Add();
  ListView1->Columns->Add();
  ListView1->Column[0]->Caption = "DOCUMENTO";
  ListView1->Column[0]->Width  = 100;
  ListView1->Column[1]->Caption = "NOMBRE Y APELLIDO";
  ListView1->Column[1]->Width  = 350;
  ListView1->ViewStyle = vsReport;
}

void __fastcall TForm1::btnFileOpenClick(TObject *Sender)
{
  if (OpenDialog1->Execute()) {
    TListItem *it;
    TStrings *TS = new TStringList;

    ListView1->Items->Clear();
    TS->LoadFromFile(OpenDialog1->FileName);
   
    for(int i= 0; i< TS->Count-1; i+= 3) {
      it = ListView1->Items->Add();
      it->Caption = TS->Strings[i];
      it->SubItems->Add(TS->Strings[i+1]+" "+TS->Strings[i+2]);
    }

    delete TS;
  }
}

void __fastcall TForm1::btnBuscarClick(TObject *Sender)
{
  TListItem *it = ListView1->FindCaption(0,
    Trim(EditDoc->Text), true, true, true);
  if (it) ListView1->ItemIndex = it->Index;
}

void __fastcall TForm1::ListView1AdvancedCustomDrawItem(
      TCustomListView *Sender, TListItem *Item, TCustomDrawState State,
      TCustomDrawStage Stage, bool &DefaultDraw)
{
  TCanvas *CV = Sender->Canvas;

  CV->Font->Style = CV->Font->Style >> fsBold;
  CV->Font->Color = clBlack;
  if (Item->Index == Sender->ItemIndex) {
    CV->Font->Style = CV->Font->Style << fsBold;
    CV->Font->Color = clRed;
  }
}


Saludos :)

eennzzoo 15-03-2014 00:02:00

Cita:

Empezado por ecfisa (Mensaje 473829)
Hola eennzzoo.

Te hice un ejemplo donde si se encuentra el documento buscado, pone los datos del ListView en color rojo y negrita.
Código:

...
// Configuración echa en el evento OnCreate para clarificar,
// podes realizala desde el Object Inspector en tiempo de diseño.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  ListView1->Align = alTop;
  ListView1->Columns->Add();
  ListView1->Columns->Add();
  ListView1->Column[0]->Caption = "DOCUMENTO";
  ListView1->Column[0]->Width  = 100;
  ListView1->Column[1]->Caption = "NOMBRE Y APELLIDO";
  ListView1->Column[1]->Width  = 350;
  ListView1->ViewStyle = vsReport;
}

void __fastcall TForm1::btnFileOpenClick(TObject *Sender)
{
  if (OpenDialog1->Execute()) {
    TListItem *it;
    TStrings *TS = new TStringList;

    ListView1->Items->Clear();
    TS->LoadFromFile(OpenDialog1->FileName);
   
    for(int i= 0; i< TS->Count-1; i+= 3) {
      it = ListView1->Items->Add();
      it->Caption = TS->Strings[i];
      it->SubItems->Add(TS->Strings[i+1]+" "+TS->Strings[i+2]);
    }

    delete TS;
  }
}

void __fastcall TForm1::btnBuscarClick(TObject *Sender)
{
  TListItem *it = ListView1->FindCaption(0,
    Trim(EditDoc->Text), true, true, true);
  if (it) ListView1->ItemIndex = it->Index;
}

void __fastcall TForm1::ListView1AdvancedCustomDrawItem(
      TCustomListView *Sender, TListItem *Item, TCustomDrawState State,
      TCustomDrawStage Stage, bool &DefaultDraw)
{
  TCanvas *CV = Sender->Canvas;

  CV->Font->Style = CV->Font->Style >> fsBold;
  CV->Font->Color = clBlack;
  if (Item->Index == Sender->ItemIndex) {
    CV->Font->Style = CV->Font->Style << fsBold;
    CV->Font->Color = clRed;
  }
}


Saludos :)

Hola me salen los siguientes errores:
[C++ Error] buscar.cpp(77): E2316 'ItemIndex' is not a member of 'TListView'
[C++ Error] buscar.cpp(131): E2316 'ItemIndex' is not a member of 'TCustomListView'

ecfisa 15-03-2014 00:31:56

Hola.

Probe el código antes de publicarlo y funciona correctamente, tal vez se deba a versiones distinas de C++ Builder.

Reemplaza el anterior código del evento OnAdvancedCustomDrawItem por este:
Código:

void __fastcall TForm1::ListView1AdvancedCustomDrawItem(
      TCustomListView *Sender, TListItem *Item, TCustomDrawState State,
      TCustomDrawStage Stage, bool &DefaultDraw)
{
  TCanvas *CV = ListView1->Canvas;

  CV->Font->Style = CV->Font->Style >> fsBold;
  CV->Font->Color = clBlack;
  if (Item->Index == ListView1->ItemIndex) {
    CV->Font->Style = CV->Font->Style << fsBold;
    CV->Font->Color = clRed;
  }
}

Si continuas teniendo problemas avisame y te adjunto el los fuentes para que puedas revisarlos con tranquilidad.

Saludos :)

eennzzoo 15-03-2014 00:40:27

Cita:

Empezado por ecfisa (Mensaje 473834)
Hola.

Probe el código antes de publicarlo y funciona correctamente, tal vez se deba a versiones distinas de C++ Builder.

Reemplaza el anterior código del evento OnAdvancedCustomDrawItem por este:
Código:

void __fastcall TForm1::ListView1AdvancedCustomDrawItem(
      TCustomListView *Sender, TListItem *Item, TCustomDrawState State,
      TCustomDrawStage Stage, bool &DefaultDraw)
{
  TCanvas *CV = ListView1->Canvas;

  CV->Font->Style = CV->Font->Style >> fsBold;
  CV->Font->Color = clBlack;
  if (Item->Index == ListView1->ItemIndex) {
    CV->Font->Style = CV->Font->Style << fsBold;
    CV->Font->Color = clRed;
  }
}

Si continuas teniendo problemas avisame y te adjunto el los fuentes para que puedas revisarlos con tranquilidad.

Saludos :)

Sigue igual.

ecfisa 15-03-2014 00:48:16

1 Archivos Adjunto(s)
Hola.

El archivo .zip incluye el codigo fuente y el ejecutable (para probarlo renombralo de .ex_ a .exe).

Saludos :)

eennzzoo 15-03-2014 00:52:22

Cita:

Empezado por ecfisa (Mensaje 473838)
Hola.

El archivo .zip incluye el codigo fuente y el ejecutable (para probarlo renombralo de .ex_ a .exe).

Saludos :)

Que raro me tira los mismos errores.

ecfisa 15-03-2014 22:55:12

Hola.

He probado el código en tres equipos con diferentes S.O. y funciona correctamente. Esto hace que los errores que mencionas, me resulten subjetivos e imposibles de reproducir; al menos sin saber mas datos del entorno y herramientas que estas usando.

Saludos :)

eennzzoo 15-03-2014 23:22:01

Cita:

Empezado por ecfisa (Mensaje 473861)
Hola.

He probado el código en tres equipos con diferentes S.O. y funciona correctamente. Esto hace que los errores que mencionas, me resulten subjetivos e imposibles de reproducir; al menos sin saber mas datos del entorno y herramientas que estas usando.

Saludos :)

Que raro tengo builder 5. Igual gracias.

ecfisa 16-03-2014 18:32:21

Hola eennzzoo.

Encontré un artículo sobre del uso del control TListView que seguramente te será útil: Windows Controls: The List View.

Saludos :)


La franja horaria es GMT +2. Ahora son las 11:33:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi