簡體   English   中英

當鼠標懸停在TListView的子項上時,如何動態更改子項的字體?

[英]How to dynamically change a subitem's font when mouse hover over the subitem of TListView?

出於某種原因,我想在鼠標移到該子項上時突出顯示該子項,將其字體更改為[fsUnderline, fsBold] 但是,當鼠標移開時,子項目的字體將更改為其默認狀態。

但是我不知道如何實現這個功能。 誰能給我些幫助嗎?

是的,在David的建議下,我實現了MouseMove函數,該函數運行:

procedure TCnCustBuildForm.lstTaskMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
var
Rect:TRect;
I, J: Integer;
S: string;
ItemWidth: Integer;
begin
if taskRowNum > 0 then
for J := 0 to lstTask.Items.Count - 1 do
begin
    Rect  := lstTask.Items[J].DisplayRect(drBounds);

    Rect.Left := Rect.Left + lstTask.Columns.Items[0].Width;

    for I := 1 to lstTask.Columns.Count - 2 do
    begin
      S := taskContent[J, I];

      ItemWidth := ListView_GetStringWidth(lstTask.Handle, PChar(S));

      //if ItemWidth > lstTask.Column[I].Width then
      //  ItemWidth := lstTask.Column[I].Width;

      if (taskContent[J, I] = 'error') and (x > Rect.Left) and (y > Rect.Top) and (x < Rect.Left + ItemWidth ) and (y < Rect.Bottom) then
      begin
          TListView(Sender).Cursor := crHandPoint;

          //InvalidateRect(lstTask.Handle, Rect, True);

          if lstTaskMouseMoveTrackingRect <> Rect then
          begin
            InvalidateRect(lstTask.Handle, lstTaskMouseMoveTrackingRect, True);
            InvalidateRect(lstTask.Handle, Rect, True);
          end;
          lstTaskMouseMoveTrackingRect := Rect;
          Exit;
      end;

      Rect.Left := Rect.Left + lstTask.Columns.Items[I].Width;
    end;
end;

TListView(Sender).Cursor := crDefault;
InvalidateRect(lstTask.Handle, lstTaskMouseMoveTrackingRect, True);
end;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM