ListCtrl: Probleme mit Bild in SubItem



  • Hallo zusammen,

    aus der Hilfe und der FAQ hab ich das ganze Thema mit ImageList und dergleichen durchgeforstet. Das scheint er auch zu machen, nur zeigt er mir kein Bild als SubItem in einem Report an, wie muss ich das lösen?

    Hier mein Ansatz:

    //alle Bilder zur ImageList der ListControl hinzufügen
    CBitmap bitmap_red;
    CBitmap bitmap_green;
    CBitmap bitmap_yellow;
    CBitmap bitmap_blue;
    
    CImageList m_ImageList; 
    m_ImageList.Create(24,24,ILC_COLOR24,1,1);
    
    //rotes rechteck
    bitmap_red.LoadBitmap(IDB_BITMAP_RED);
    m_ImageList.Add(&bitmap_red , RGB(0,0,0));
    //grünes rechteck
    bitmap_green.LoadBitmap(IDB_BITMAP_GREEN);
    m_ImageList.Add(&bitmap_green , RGB(0,0,0));
    //gelbes rechteck
    bitmap_yellow.LoadBitmap(IDB_BITMAP_YELLOW);
    m_ImageList.Add(&bitmap_yellow , RGB(0,0,0));
    //blaues rechteck
    bitmap_blue.LoadBitmap(IDB_BITMAP_BLUE);
    m_ImageList.Add(&bitmap_blue , RGB(0,0,0));
    
    m_List_Aufgaben.SetImageList(&m_ImageList,LVSIL_NORMAL); 
    
    LVITEM lvi;
    lvi.mask =  LVIF_TEXT;
    lvi.iItem = 0;
    lvi.iSubItem = 0;
    lvi.pszText = "Test";
    m_List_Aufgaben.InsertItem(&lvi);
    
    m_List_Aufgaben.GetItem(&lvi);
    lvi.mask =  LVIF_IMAGE;
    lvi.iSubItem = 1;
    lvi.iImage = 0;
    m_List_Aufgaben.SetItem(&lvi);
    

    Wie gesagt die Bilder sind ordnungsgemäß in der Image List aber erzeigt sie nicht an.

    Schon mal vielen Dank

    Ranger


  • Mod

    Verwende statt LVSIL_NORMAL bitte LVSIL_SMALL.



  • Vielen Dank für die Schnelle Antwort, aber es hat leider nichts gebracht, er macht jetzt zwar die Zeilen dicker, was so aussieht als wenn er es anzeigen wollte, denn die Bilder haben 24x24 Pixel, aber sehen kann man das Bild nicht. Hab ic da noch einen Fehler? Er versucht es anscheinend anzuzeigen, denn wie gesagt die höhe der eingetragenenZeile ist größer geworden.

    Grüße, Ranger



  • hast du "LVS_EX_SUBITEMIMAGES" gesetzt ?
    und ist bei position 0 in der imagelist auch ein gueltiges bild ?

    BTW:
    m_ImageList.Create(24,24,ILC_COLOR24,1,1);
    das 1,1 bedeutet das die imagelist anfaengt 1 image zu besitzen und kann nur um 1 erhoeht werden
    zudem - ist die m_ImageList noch gueltig wenn du die funktion verlaesst ? wenn die lokal ist und die funktion wird beendet, wird diese zerstoert und so auch die bilder - die muessen durchweg bekannt sein {also als objektmember}



  • Jupp, das war es erstmal.
    Vielen Dank.



  • was war es nu genau ? wuerde mich interessieren {=



  • Ich hab 1. die Extended Style nicht gesetzt gehabt und die Image list war nur local und keine Membervariable des Objektes.

    Jetzt hab ich noch ein kleines Problem egal, was ich eingebe, es erscheint in dem 1. Subitem ein rotes Feld und danach der Txxt "Test", also Bils 1 wird immer in Subitem 0 angezeigt, die restliche Ansteuerung funzt wie erhofft.

    Code:

    LVITEM lvi;
    lvi.mask =  LVIF_TEXT;
    lvi.iItem = 0;
    lvi.iSubItem = 0;
    lvi.pszText = "Test";
    m_List_Aufgaben.InsertItem(&lvi);
    
    m_List_Aufgaben.GetItem(&lvi);
    lvi.mask =  LVIF_IMAGE;
    lvi.iSubItem = 3;
    lvi.iImage = 3;
    m_List_Aufgaben.SetItem(&lvi);
    

    Wäre schön, wenn ich das auch noch hinbekommen könnt.

    Viele Grüße,
    Rangers



  • bei
    lvi.iImage = 3;
    musst du halt immer sagen welches item genutzt werden soll

    imagelist
    add(aha) == 0
    add(oho) == 1
    add(ihi) == 2
    add(ehe) == 3

    using:
    lvi.iImage = 3; == ehe
    lvi.iImage = 1; == oho

    usw usw
    du musst halt beim einstellen des items sagen welches bild - das geschiet nicht automatisch
    die richtigen nummern bekommst du beim Add zurueck
    ich machs immer so das ich beim abspeichern es auch in eine map schmeiss
    "name" "pos"
    und dann
    getImagePos("name") return find("name").pos

    btw - alles nur pseudo hier {o;



  • Danke Dir Evil.

    Das mit der Bildliste hab ich so auch verstanden, aber es gibt ein Problem. Ich habe versucht in der Spalte 1, also SubItem 0, Text einzustellen und das Bild in eine hintere Spalte zu setzen. Sobald ich in irgendeinem SubItem mask auf LVI_IMAGE setze hat die erste Spalte automatisch das Bild mit dem Index 0. Die Subitemgeschichte ist ja 1 basierter Index. Sollte ich die Spalte 0 eventuell breite 0 machen um das zu steuern?

    Viele Grüße, Ranger


Anmelden zum Antworten