Anzeige von Scrollbalken im TListBox wird nicht refresht!



  • Hallo alle zusammen,

    ich habe seit längerem ein Problem.
    Im Formular habe ich TListBox und mit Methode OnDrawItem() werden die Strings mit Symbolen angezeigt. Nach gewissen Anzahl der Strings wird der Vertikale scrollbalken auch angezeigt.

    Problem: Wenn ich den Formular nach rechts verschiebe, so dass der Balken nicht mehr in Sicht auf dem Bildschirm ist und dann das Formular wieder zurück ins Bildschirm reinziehe, wird der Scrollbalken mal zu Hälfte angezeigt , mal gaar nicht, mal volkommen , also wird nicht neu gezeichnet. Ich habe schon mit Refresch() mit Repaint() zusätzlich versucht leider bisher ohne sichtbaren Erfolg.

    Hat jemand schon das Problem gehabt?
    Über jede Antwort würde ich mich freuen.



  • Kann es sein, daß du mit OnDrawItem den Scrollbalken übermalst (z.B. Canvas->FillRect)? Zeig doch mal deine Methode.



  • Danke für Tip,

    Mit Methode OnDrawItem() hat es offensichtlich nichts zutun, ohne Methode nur mit reinen Strings bei Style->Standard ist das gleiche Ergebnis, hatte gerade ausprobiert! Ich verstehe nicht, warum!



  • Villeicht liegt es am BDS2006, das bei mir unter WindowsXP Home installiert ist?



  • Hallo alle zusammen,

    Poblem mit dem Refresh von Skrollbalken besteht weiterhin. Mit der Windows version hat es nicht zutun.

    Meine OnDrawItem() Methode:

    void __fastcall THauptF::lb1DrawItem(TWinControl *Control, int Index,
          TRect &Rect, TOwnerDrawState State)
    {
        SHFILEINFO shinfo;
        String filename = lb1->Items->Strings[Index];
    
        SHGetFileInfo(filename.c_str(), NULL, &shinfo, sizeof(shinfo),
        SHGFI_SMALLICON|SHGFI_ICON);
    
        TIcon *myicon = new TIcon();
        myicon->Handle = shinfo.hIcon;
    
        lb1->Canvas->FillRect(Rect);
    
    	if(myicon->Handle)
    		lb1->Canvas->Draw(Rect.left +  2, Rect.Top +
    		((Rect.Height()- myicon->Height)/16), myicon);
    	else
    		lb1->Canvas->Draw(Rect.left +  2, Rect.Top +
    		((Rect.Height()- myicon->Height)/16), Image1->Picture->Icon);
    
        lb1->Canvas->TextOutA(Rect.left + (myicon->Width)-12, Rect.top +
    	((Rect.Height() - lb1->Canvas->TextHeight(lb1->Items->Strings[Index])) / 2),
        lb1->Items->Strings[Index]);
    
    	delete myicon;
    }
    

    Übermale ich die Balken wirklich?
    Hat die Methode Auswirkung der Art?


Anmelden zum Antworten