Hallo,
Zitat:
Problem 1:
In der ListView sollte HotTrack aktiv sein - in meiner ListView der HotTrack erscheint kurz und dann verschwindet. Wenn man kein AdvancedCustomDrawItem verwendet, dann der HotTrack ist die ganze Zeit sichtbar (wenn der Mauszeiger über dem Text ist).
Füge doch mal folgendes vor dem Canvas.Lock in Deine Methode DrawShortedCaption ein:
Delphi-Quellcode:
if cdsHot in State then
Exit;
Sender.Canvas.Lock;
Zitat:
Problem2:
Ich möchte gerne, dass die Selektion mit der Maus erfolgt in dem ganzen Spaltenbereich. Die ListView reagiert aber auf Mausklicks genauso, wie ohne AdvancedCustomDrawItem. ListView erlaubt den Selektionsbereich abzufragen Item.DisplayRect( drSelectBounds ), gibt es vielleicht die Möglichkeit den Selektionsbereich festzusetzen? Wenn nicht, wie kann man trotzdem so was erreichen?
Mir ist im Moment keine Möglichkeit geläufig, die Spaltenbreite auf eine fixe Breite trimmt. Du kannst aber mal versuchen, ob folgender Code Dein Problem lösen würde.
Delphi-Quellcode:
TmyListView =
class(TListView)
private
procedure MouseMove (Shift: TShiftState; X, Y: Integer);
override;
procedure TmyListView.MouseMove (Shift: TShiftState; X: Integer; Y: Integer);
var
i : TListItem;
begin
inherited MouseMove (Shift, X, Y);
if X < Columns [0].Width
then
begin
i := GetItemAt (4, Y);
// das mit der 4 ist nicht schön, vielleicht Intervall-Halbierung
if Assigned (i)
then
SendMessage (
Handle, LVM_SETHOTITEM, i.
Index, 0)
end
end;
Gruß