Q&A

  • Listview에서 특정열을 다른 색으로 하고 라인을 클릭했을때 반전처리를 하려..

Listview에서 특정값을 가진 열을 다른 색으로 하고 임의의 라인을 클릭했을때 반전처리를 하려하는데 예문을 보면 각각의 예는 있지만 한번에 처리해주는 예문이 없어서
질문을 올립니다
아래와 같이 이벤트 하나에 두개를 함께 하려니 반전처리때 글자뒤의 칼라가 제대로 처리안되고 글자없는 부분만 반전처리 됩니다
좋은 방안이 없을까요?


procedure TClientForm.ListViewDrawItem(Sender: TCustomListView;
Item: TListItem; Rect: TRect; State: TOwnerDrawState);
var
i,j, ColPos: Integer;
ColRect : TRect;
Index: Integer;
ColumnStart: Integer;
begin
with ListView do  begin
   if Item.SubItems[1]='aaa' then begin
     Canvas.Font.Color := clRed;
     Canvas.Brush.Color := clYellow;
   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 := 0;
   for Index := 0 to Item.SubItems.Count - 1 do
   begin
     ColumnStart := ColumnStart + Columns[Index].Width;
     Canvas.TextOut(Rect.Left+ColumnStart+1, Rect.Top+1, Item.SubItems[Index]);
   end;
   if odFocused in State then
   begin
     if Item.SubItems[1]='aaa' then  Canvas.Font.Color := clRed
     else Canvas.Font.Color := clWhite;
       Canvas.Brush.Color := clHighlight;

   end;
   Canvas.FillRect(Rect);

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

1  COMMENTS
  • Profile
    전명재 2007.04.09 20:42




    텍스트가 출력되면서 (TextOut) 배경을 덮어 버리기 때문입니다.
    TextOut  바로 위에 ..

    Brush.Style := bsClear;
    이 구문을 넣어 주시면 글자만 출력이 되서 배경 색을 유지 할 수 있습니다.
    물론 문자열 출력후에 Brush.Style := bsSolid 였나. 암튼 원래 모드로
    되돌려 주셔야 그 다음 드로잉 작업에 영향이 없습니다.