Q&A

  • ListView의 컬럼크기를 실행시에 조절할 경우 잔상이 생기는데 어떻게 해야하는지요?
아래 코드와 같이 리스트에서 직접 그려주고 있습니다.
문제는 ListView에 데이터를 표현 한 후에 컬럼 헤더를 마우스로 움직여
조절하게 되면 잔상이 생깁니다.
어떻게 해야 OnwerDraw 가 false일 때 처럼 표현이 되는지요...
좋은 하루 되세요.

procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
  Item: TListItem; Rect: TRect; State: TOwnerDrawState);
var
  Index: Integer;
  ColumnStart: Integer;
begin
  with ListView1 do
  begin
    if odFocused in State then
    begin
      Canvas.Font.Color := clLime;
      Canvas.Brush.Color := clHighlight;
    end
    else
    begin
      Canvas.Font.Color := clBtnText;
      Canvas.Brush.Color := clWindow;
    end;
    Canvas.FillRect(Rect);

    Canvas.TextOut(Rect.Left+1, Rect.Top+1, Item.Caption);
    ColumnStart := Columns[0].Width;
    for Index := 0 to Item.SubItems.Count - 1 do
    begin
      Canvas.TextOut(Rect.Left+ColumnStart+1, Rect.Top+1, Item.SubItems[Index]);
      ColumnStart := ColumnStart + Columns[Index].Width;
    end;
  end;
end;
0  COMMENTS