Kleines CustomDrawItem Problem
-
TListView hat die Eigenschaft HideSelection, welche man auf false setzen kann, damit der Eintrag grau angezeigt wird, wenn TListView nicht mehr den Fokus besetzt.
Nun, ich zeichne den Inhalt des TListViews selbst, da fuscht die Eigenschaft leider böse rein, also muss ich diese selbst realisieren.
void __fastcall TForm1::TeListView2CustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State, bool &DefaultDraw) { try { TRect R; AnsiString Text; TeListView2->Canvas->Font->Color = clBlack; TeListView2->Canvas->Brush->Color = ((State.Contains(cdsFocused)) || (State.Contains(cdsSelected)) || (State.Contains(cdsMarked)) || (State.Contains(cdsGrayed))) ? clHighlight : clWindow; ListView_GetItemRect(TeListView2->Handle, Item->Index, &R, LVIR_BOUNDS); TeListView2->Canvas->FillRect(R); // und so weiter
Ich dachte ich hätte alle State abgefragt, aber die Zeile wird clWindow(weiss), wenn ich den Fokus verlasse. Wenn ich den Fokus verlasse wird diese Methode definitiv ausgeführt, das habe ich überprüft. Kann mir jemand weiterhelfen?
Ich möchte also ein anderes Steuerelement auf meiner Form anklicken können und trotzdem den eben ausgewählten Eintrag im TListView weiterhin markiert haben, da ich zu diesem Eintrag Parameter setzen möchte und es doof wäre gar nicht mehr zu sehen.
-
Habs hinbekommen, einfach Item->Selected einsetzen.