TreeView->Node: Probleme bei der Zuweisung von Icons



  • Hallo,

    In einem TreeView soll eine Verzeichnisstruktur dargestellt werden. Dabei sollen die unterschiedlichen Datei- bzw. Verzeichniseigenschaften durch Icons, die den Knoten zugewiesen werden, veranschaulicht werden.

    Bis zu einer Größe von einigen Hundert Einträgen (Knoten) funktioniert auch alles wunschgemäß. Bei mehr als 1000 Einträgen dauert die Zuweisung der Icons jedoch mehrere Sekunden. (Ich benutze Icons in der Größe von 766 Bytes.)

    Anbei der Zuweisungscode:

    TTreeNode *CurItem = TreeView1->Items->GetFirstNode();
        while(CurItem){
    
            CurItem->ImageIndex = CurItem->AbsoluteIndex % 4 + 1; // provisorisch
            CurItem = CurItem->GetNext();
        }
        TreeView1->Repaint();
    

    Hat jemand eine Idee, wo das Problem liegt?

    Gruß
    Leo



  • Hallo zusammen,

    habe leider noch immer keine Antwort auf meine Frage.

    Daher wäre ich dankbar für Rückmeldung, ob die Frage zu unklar rüberkommt oder ob das Problem zu ungewöhnlich ist oder ...

    Besten Dank!

    Gruß
    Leo



  • Leo Freitag schrieb:

    Hallo zusammen,

    habe leider noch immer keine Antwort auf meine Frage.

    Daher wäre ich dankbar für Rückmeldung, ob die Frage zu unklar rüberkommt oder ob das Problem zu ungewöhnlich ist oder ...

    Besten Dank!

    Gruß
    Leo

    Deine Frage ist schon klar, es ist halt ein besch.... Problem. Ich habe hier eine Treeview mit mehreren tausenden Objekten deren Status grafisch durch Icons angezeigt wird. Der Benutzer kann durch Klicken auf einen Tabcontrol diese nach Kostenstelle oder nach Standort sortieren. Macht er das ein paar mal kommt es ebenfalls zu diesen Pausen die mehrere Sekunden dauen. Habe ein paar Stunden gesucht aber nichts gefunden. Muss wohl irgendwie in der Treeview liegen. Ich hoffe dass die Benutzer sich auf eine Einstellung einschiessen und da nicht immer wechseln...



  • Die Eigenschaft 'TreeNode::AbsoluteIndex' ist intern linear implementiert, d.h. es durchläuft einfach alle Vorgängereinträge bis zur Wurzel.

    Dauert es denn auch solange, wenn man z.B.

    CurItem->ImageIndex = rand()%4 + 1;
    

    verwendet?

    Da du in der Schleife sowieso alle Einträge durchläufst, kannst du ja selber eine Zählvariable verwenden.


Anmelden zum Antworten