Juhu es Funktioniert, also nach den ersten Test scheit es jetzt zu funktionieren wie es soll.
Hier noch mal der Quellcode:
Delphi-Quellcode:
procedure Tfrm_Parts_List.pResetDropHighlight(lv: TListView);
var
i: Integer;
begin
with lv do
for i := 0 to VisibleRowCount-1 do
if i >= Items.Count then
Exit else
if Items[TopItem.Index + i].DropTarget then
begin
Items[TopItem.Index + i].DropTarget := False;
Exit;
end
end;
procedure Tfrm_Parts_List.ltv_ListEndDrag(Sender, Target: TObject; X, Y: Integer);
var
i,z : Integer;
begin
//Alle Fenster nach TListView komponenten durchsuchen
For i := 0 To frmMain.MDIChildCount-1 Do Begin
For z := 0 To frmMain.MDIChildren[i].ComponentCount-1 Do Begin
If frmMain.MDIChildren[i].Components[z] Is TListView Then Begin
With TListView(frmMain.MDIChildren[i].Components[z]) Do Begin
If OwnerData Then Begin
pResetDropHighlight(TListView(frmMain.MDIChildren[i].Components[z]));
End;
End;{with}
End;{if}
End;{for}
End;{for}
end;
Es werden alle Fenster durchlaufen und nach einem virtuellen ListView gesucht und dort die fehlerhaften Markierungen entfernt.
Ich hatte zwar schon mal die Eigenschaft DropTarget entdeckt konnte damit aber nicht so recht was mit anfangen.
Also noch mals vielen Dank marabu. Ich denke das scheint eine gute Lösung zu sein, nicht mehr so brutal wie mein Ansatz
mfg
TUX
Edit: In der Prozedure pResetDropHighlight war noch ein kleiner Fehler, der eine Zugriffsverletztung herbei geführt hat und zwar
muß es VisibleRowCount-1 heißen, da sonst das Ereignis OnData ein Item zeichnen will was nicht existiert.