CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - TListView dodanie grafiki do wybranej celi

TListView dodanie grafiki do wybranej celi

dział ogólny

TListView dodanie grafiki do wybranej celi

Nowy postprzez Darek_C++ » wtorek, 9 listopada 2010, 17:31

Witam ponownie,
czy istnieje możliwość umieszczenia w dowolnej komórce komponentu TListView grafiki np grafiki [*.bmp, *.ico] symbolizującej pasek postępu i podmienianej w wątku na inna.

Napisałem taki prototypowy kod:
KOD cpp:     UKRYJ  
                ListView2->SmallImages = ImageList1;
        TListItem * ElementListy = ListView2->Items->Add();

        ElementListy->Caption = "Pierwsza kolumna";
        ElementListy->SubItems->Add("----1");
        ElementListy->SubItems->Add("----2");
        ElementListy->SubItems->Add("");

        ListView2->Items->Item[0]->SubItemImages[2] = 2;


Ale problem jest taki, że grafika [0] z ImageList1 pojawia się w pierwszej celi Caption :(
Jakie są w tej kwestii możliwości ?

----------
Chodzi o coś takiego jak na załączonej grafice:
Obrazek

Pozdrawiam
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

Wstawianie grafiki do SubItems obiektu typu TListView.

Nowy postprzez Cyfrowy Baron » środa, 10 listopada 2010, 11:34

To zadanie wymaga zastosowania sztuczki z fałszywą kolumną. Zanim jednak przejdę do tego. Jak zapewne się domyślasz najprostszym sposobem dodania grafiki do listy TListView jest użycie TImageList. Tworzysz sobie więc graficzki o wymiarach np. Width = 100; Height = 16, następnie w ImageList1 ustawiasz dokładnie taki rozmiar, czyli ImageList1->Width = 100; ImageList->Height = 16. Oczywiście te wymiary ustawiasz w Object Inspector, a nie w kodzie, gdyż podczas dodawania na etapie programowanie, grafika ulegałaby zniekształcaniu. Następnie dodajesz do ImageList1 przygotowane grafiki i w opcjach dodawania zawsze wybierasz Center lub Stretch nigdy Crop.
Gdy ImageList1 jest już gotowy podłączasz go do ListView1, ale tylko do właściwości SmallImages.
Teraz w ListView1 tworzysz sobie kolumny, ale pierwsza kolumna, która zawsze ma wartość wprowadzaną przez Caption będzie kolumną fałszywą i niewidoczną, czyli ustawiasz jej Width na 0:

column0.png


Kolejne kolumny tworzysz według uznania.
Jak się już zapewne domyślasz, nie możesz używać pierwszej kolumny tabeli, czyli w kodzie wogóle nie wypełniasz właściwości Caption, a zamiast niej wypełniasz kolumnę drugą, czyli SubItems->Add(numer).
Przykładowe wypełnianie może wyglądać tak:

KOD cpp:     UKRYJ  
void __fastcall TForm1::WriteToListView(TListItems *Items)
{
 int c = 0;
 while(Items->Count < 5)
 {
  Items->Add(); /* dodanie wiersza, nie wypełniam Caption, gdyż kolumna jest fałszywa */
  Items->Item[c]->ImageIndex = -1; /* zabezpieczam fałszywą kolumnę przed pobieraniem grafiki z ImageList1 */

  Items->Item[c]->SubItems->Add( (String)(c + 1) ); /* to jest teraz pierwsza kolumna */

  Items->Item[c]->SubItems->Add("");
  Items->Item[c]->SubItemImages[1] = c;

  Items->Item[c]->SubItems->Add("Kolumna 1 - jakis tekst");
  Items->Item[c]->SubItems->Add("Kolumna 2 - jakiś tekst");
  c++;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
 WriteToListView(ListView1->Items);
}


Uzyskałem taki efekt:

sample1.png


Podmiana grafiki w wybranym wierszu jest już banalnie prosta:

KOD cpp:     UKRYJ  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ListView1->Items->Item[2]->SubItemImages[1] = 4;
}
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.

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

Re: TListView dodanie grafiki do wybranej celi

Nowy postprzez Darek_C++ » środa, 10 listopada 2010, 15:34

Cyfrowy Baronie jesteś niezastąpiony ! 8-)
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


  • 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 25 gości