TListBox::OnDrawItem - Wie bekomme ich den Rahmen weg?



  • Hallo,

    ich habe die OnDrawItem-Methode der TListBox-Komponente verwendet und mich stört nun aber, dass er immernoch diesen blöden Rahmen um das aktuell ausgewählte Item zieht - hier meine Methode:

    void __fastcall TfMain::lbCheatListDrawItem(TWinControl *Control,
          int Index, TRect &Rect, TOwnerDrawState State)
    {
            int y=Rect.Top+lbCheatList->ItemHeight/2-lbCheatList->Canvas->TextHeight("O")/2;
            lbCheatList->Canvas->Font->Assign(lbCheatList->Font);
            if(State.Contains(odSelected))
            {
                    lbCheatList->Canvas->Pen->Color=clSelRow[Index&1];
                    lbCheatList->Canvas->Font->Color=clSelRowText[Index&1];
            }
            else
            {
                    lbCheatList->Canvas->Pen->Color=clRow[Index&1];
                    lbCheatList->Canvas->Font->Color=clRowText[Index&1];
            }
            lbCheatList->Canvas->Brush->Color=lbCheatList->Canvas->Pen->Color;
            lbCheatList->Canvas->Rectangle(Rect);
            lbCheatList->Canvas->TextOut(64-9-lbCheatList->Canvas->TextWidth(IntToStr(Index+1)),y,Index+1);
            lbCheatList->Canvas->Pen->Color=lbCheatList->Canvas->Font->Color;
            lbCheatList->Canvas->MoveTo(64,Rect.Top);
            lbCheatList->Canvas->LineTo(64,Rect.Bottom);
            lbCheatList->Canvas->TextOut(72,y,lbCheatList->Items->Strings[Index]);
            y.~int();
    }
    

    Wie bekomme ich diesen Rahmen weg?

    - Windoof



  • Hallo,

    Vielleicht BorderStyle auf bsNone setzen oder Dein Rectangle etwas grösser zeichnen.



  • Nein, nicht den Rahmen der ListBox an sich, sorry, hab mich falsch ausgedrückt. Ich meinte diese Rahmen wenn du etwas auswählst, da siehst du (bei Standard-LBs) dieses Blau und einen Rahmen drum, dieses Punktierte... das will ich weghaben, das gefällt mir nicht 😉

    - Windoof



  • Hallo,

    und einen Rahmen drum, dieses Punktierte... das will ich weghaben, das gefällt mir nicht

    Das dürfte dann wohl der Fokusrahmen sein. Defokusiere die ListBox und der Rahmen sollte verschwinden.

    Bis dann denn,
    🙂
    Nash



  • Das Problem ist: Ich kann die ListBox nicht defocusieren, da es das einzige zu focusierende Element ist... es muss doch eine Möglichkeit geben diesen Focusrahmen auch ohne zu defocusieren wegzubekommen, alles andere ist eine unprofessionelle "Lösung".



  • Hallo

    das Rechteck wird mit TCanvas::DrawFocusRect() gezeichnet, und damit kann man den auch wieder wegmachen, wenn man genau weiß, für welches Rechteck er gezeichnet wurde.

    bis bald
    akari



  • Hallo,

    Windoof schrieb:

    ... alles andere ist eine unprofessionelle "Lösung".

    Oh, Entschuldigung... 🙄
    Na dann würde ich sagen, mach keine halben Sachen und schreibe die ListBox komplett neu, dann kannst Du bestimmen, wann und ob der Fokusrahmen gezeichnet werden soll.

    Bis dann denn,
    🙂
    Nash



  • Das wiederum ist ein zu großer Aufwand... obwohl ich schonmal mit dem Gedanken gespielt habe auch den Scrollbalken zu verändern... dazu allerdings müsste ich wirklich die ListBox neu schreiben... mal schaun... wenn ich mal Langeweile hab vielleicht.


Anmelden zum Antworten