ups, ich glaube ich habe den rahmen mit der gleichen farbe wie der hintergrund gezeichnet
nun habe ich aber noch ein problem...
ich habe es zuerst so gemacht:
wenn das vorherige item markiert ist, soll der obere rahmen nicht gezeichnet werden,
und wenn das untere item markiert ist, soll der untere rahmen nicht gezeichnet werden.
wenn aber die items nacheinander von oben nach unten oder von unten nach oben markiert werden, wird logischerweise immer der untere oder der obere rahmen gezeichnet, und im endeffekt sieht man dann die horizontalen rahmen-linien trotzdem.
dann hatte ich eine andere idee:
wenn das vorherige item markiert ist, soll der untere rahmen vom vorherigen item mit der hintergrundfarbe übermalt werden. klappte aber irgendwie auch nicht, hier der code:
Delphi-Quellcode:
if item.Index > 0 then
if tlistview(sender).Items.Item[item.Index-1].Selected = true then
begin
aVorherRect := tlistview(sender).Items.Item[item.index-1].DisplayRect(drLabel);
Canvas.Pen.Color := listviewItemBackColor;
Canvas.Brush.Color := listviewItemBackColor;
aVorherRect.Left:=aVorherRect.Left+2;
aVorherRect.Right := aVorherRect.Right+6;
canvas.MoveTo(aVorherRect.right, aVorherRect.bottom);
canvas.LineTo(aVorherRect.left, aVorherRect.bottom);
end;
EDIT: ich habe jetzt herausgefunden, dass wenn man mehrere items mit der maus markiert (also so ein gestricheltes viereck zieht), dass die eigenschaft selected der markierten items erst true wird, wenn die maus losgelassen wird. so funktioniert mein code natürlich auch nicht...
aber wenn man mehrere items mit der Shift-taste markiert, funktionierts wunderbar (siehe anhang)