ListView1 automatyczne ustawienia scrola

dział ogólny

ListView1 automatyczne ustawienia scrola

Nowy postprzez Darek_C++ » czwartek, 15 lipca 2010, 19:40

Witam ponownie,
do wyszukania pozycji w ListView1 używam takiego kodu:
Kod: Zaznacz cały
void __fastcall TForm1::Button3Click(TObject *Sender)
{
   //Wyszukaj
   for(int ii=0; ii < ListView1->Items->Count; ii++)
   {
      String adres;
      adres = ListView1->Items->Item[ii]->SubItems->Strings[0].Trim();
      if(adres.Pos(Edit3->Text.Trim())>0)
      {
         ListView1->Items->Item[ii]->Selected = true;
                        ListView1->Scroll(0,(ii*14)); //Dodane jako rozwiÄ…zanie
         ShowMessage("Znaleziono: "+ (String) ii);
         ListView1->SetFocus();
         return;
      }

   }
}

Po wyszukaniu dana pozycja zostanie zaznaczona ListView1->Items->Item[ii]->Selected = true;
Pytanie brzmi czy jest sposób aby automatycznie przesunąć scrol tak aby zaznaczona pozycja ustawiła się na górze ? Czyli chodzi o to, że jak jest lista długa trzeba ręcznie przesuwać scrolem w poszukiwaniu zaznaczonej pozycji i chciałem to wyeliminować :)

-----
Rozwiązanie jakie sam znalazłem to ListView1->Scroll(0,(ii*14));
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
PodziÄ™kowaÅ‚ : 66
OtrzymaÅ‚ podziÄ™kowaÅ„: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: ListView1 automatyczne ustawienia scrola

Nowy postprzez Cyfrowy Baron » piÄ…tek, 16 lipca 2010, 09:52

RozwiÄ…zaniem problemu jest funkcja MakeVisible(BOOL):

Kod: Zaznacz cały

   for
(int ii = 0; ii < ListView1->Items->Count; ii++)
   {
      String adres;
      adres = ListView1->Items->Item[ii]->SubItems->Strings[0].Trim();
      if(adres.Pos(Edit3->Text.Trim()) > 0)
      {
        ListView1->Items->Item[ii]->Selected = true;

        if(ListView1->Selected) ListView1->Selected->MakeVisible(false);

         ShowMessage("Znaleziono: "+ (String) ii);
         ListView1->SetFocus();
         return;
      }

   }
 


Jeżeli chcesz zaznaczać nie tylko pierwszą kolumnę lecz cały wiersz, to właściwość RowSelect obiektu ListView1 ustaw na true. Uprzedzając ewentualne pytanie, obiekt typu TListView nie obsługuje zaznaczania SubItems (kolejnych kolumn) bez zaznaczenia pierwszej kolumny.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Darek_C++
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości