Gast JulianB Geschrieben 3. Dezember 2008 Teilen Geschrieben 3. Dezember 2008 Hallo zusammen, ich habe mal eine Frage. Wie kann ich die Parameter eines Items aus einem ListCtrl wieder auslesen. Also zum Beispiel, ich setze ein Item in das ListCtrl: LV_ITEM Item; Item.lParam = (LPARAM) pItem; Item.pszText = LPSTR_TEXTCALLBACK; Item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE | LVIF_INDENT; Item.iItem = nInsertPos; Item.iImage = I_IMAGECALLBACK; Item.iSubItem = 0; Item.iIndent = I_INDENTCALLBACK; Jetzt möchte ich, zum Beispiel bei Doppelklick auf ein bestimmten Eintrag im ListCtrl, das Indentlevel des selektierten Eintrages bekommen, wie geht das? Also: Doppelklick auf Eintrag (wie ich das realisiere weiß ich) und dann Werte des Items abfragen. LV_ITEM iItem = ListCtrl.GetItem(nPos); if(iItem.iIndent = 1) {MessageBox("Indentlevel beträgt 1");} Irgendwie sowas, den Befehl "GetItem" gibt es natürlich nicht, das ist nur der den ich Suche ;-) Ist das realisierbar? Gibt es da irgendeinen Befehl oder muss ich selber bauen? Liebe Grüße, Julian Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast JulianB Geschrieben 3. Dezember 2008 Teilen Geschrieben 3. Dezember 2008 Verdammt, Asche auf mein Haupt. Hätt ich noch 5 min. gewartet, aber wens interessiert: BUG: GetItem und SetItem Do haben Einzugsparameter nicht Liebe Grüße! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
break Geschrieben 15. Dezember 2008 Teilen Geschrieben 15. Dezember 2008 Hallo, das Thema hat sich evtl. erledigt, aber ich würde gern mehr über die Funktion erfahren die du suchst! Der Parameter iIndent, für was ist der gut, ich hab den noch nie benutzt! Ich selber benutze schon GetItem(LVITEM *item); , oder GetItemText(....) aber nur um die lesbaren Daten zu ermitteln! Grüsse break; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast JulianB Geschrieben 16. Dezember 2008 Teilen Geschrieben 16. Dezember 2008 Hallo Break, Der iIndentwert wird gesetzt ( 0 oder 1 ) um in einem LictCtrl in Reportansicht eine Einrückung zu erzwingen. Also als Beispiel: Liste: Eintrag1-Indent=0 --Eintrag2-Indent=1 --Eintrag3-Indent=1 --Eintrag4-Indent=1 --Eintrag5-Indent=1 Eintrag6-Indent=0 Eintrag7-Indent=0 Das ist ganz praktisch wenn du zum Beispiel eine Ordneransicht hast und den Inhalt mit Doppelklick expandieren willst ohne die Ansicht komplett neu zu laden, dann fügst du einfach die neuen Einträge mit einem iIndent=1 hinzu. Ich brauchte diese Funktion, da ich einen Button in meinem Dialog habe, der es mir ermöglicht mit einem Klick alle expandierten Einträge aus dem ListCtrl wieder "einzuklappen", deswegen habe ich nach einer Funktion gesucht die mir den Indentlevel zurück gibt. Ich hoffe das erklärt ein wenig wozu dieser Parameter gut ist, wenn nicht frag ruhig. Liebe Grüße, ein frohes Fest und guten Rutsch, Julian Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
break Geschrieben 16. Dezember 2008 Teilen Geschrieben 16. Dezember 2008 (bearbeitet) Hallo Julian, wenn es das ist was ich meine, dann brauche ich das auch, funktioniert es bei dir? Also, wenn du Einträge mit iIndent einfügst, dann verhalten die sich als ob du eine Liste mit '+' hast, oder? Bsp.: // ausgeklappt: - Item mit iIndent 0 -- Item mit iIndent 1 -- Item mit iIndent 1 -- Item mit iIndent 1 // alle eingeklapt: +Item mit iIndent 0 Ist das so richtig(irgend wie werden bei mir keine Einrückungen erzwungen)? LG break Bearbeitet 16. Dezember 2008 von break Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast JulianB Geschrieben 16. Dezember 2008 Teilen Geschrieben 16. Dezember 2008 (bearbeitet) Richtig, bei einem gesetzten Indentlevel 1 wird das Item im ListCtrl eingerückt angezeigt. Dazu musst du eigentlich nur bei der Eigenschaftszuweisung des Itrems die richtigen Werte setzen: LV_ITEM Item; Item.lParam = (LPARAM) pItem; Item.pszText = LPSTR_TEXTCALLBACK; Item.mask = LVIF_TEXT | LVIF_PARAM | LVIF_IMAGE | [B]LVIF_INDENT[/B]; Item.iItem = nInsertPos; Item.iSubItem = 0; Item.iIndent = [B]1 oder 0[/B]; Danach das Item hinzufügen und die Einrückung müsste geschehen sein, wenn nicht dann poste einfach mal deinen Quellcode ich schaue mir das dann mal an. Natürlich musst du jedem Item das korrekte Indentlevel hinzufügen. Wenn du dein selektiertes Objekt expandierst, dann müssen die nun sichtbaren Items alle ein Indent = 1 bekommen. LG Bearbeitet 16. Dezember 2008 von JulianB Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
break Geschrieben 16. Dezember 2008 Teilen Geschrieben 16. Dezember 2008 Hi, hmm, geht nicht ohne hilfe Also hier ist mein Beispielcode: LV_ITEM Item; Item.mask = LVIF_TEXT | LVIF_INDENT; Item.iIndent = 0; Item.iItem = 0; // erstes item Item.iSubItem = 0; Item.pszText = "Erster"; m_cListCtrl.InsertItem(&Item); // für 2 einrückende items: Item.iIndent = 1; // einrücken Item.iItem = 1; // nächter in der Liste Item.iSubItem = 0; Item.pszText = "Zweiter"; m_cListCtrl.InsertItem(&Item); Item.iIndent = 1; // einrücken Item.iItem = 2; // nächter in der Liste Item.iSubItem = 0; Item.pszText = "Dritter"; m_cListCtrl.InsertItem(&Item); // usw. Mir fällt auf das ich nicht den Wert für lParam gesetzt habe, ich weiß auch nicht woher kommt bei dir pItem? Ist dass das Item was du setzen möchtest hier als Parameter übergeben? Das hier: Item.lParam = (LPARAM) pItem; // pItem?? Danke für deine Hilfe! break; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.