Einzelnen Beitrag anzeigen

Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#3

AW: TListView - Problem mit HotTrack und Selektion bei Verwendung AdvancedCustomDrawI

  Alt 29. Jan 2013, 15:28
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ß
Volker Zeller
  Mit Zitat antworten Zitat