[Delphi] Malowanie po ListView

0

Dlaczego przy dodawaniu itema do Listview i jednoczesnym malowani canvasem rysuje mi w kolumnie obok która właściwie nie istnieje, nie wiem dlaczego tak sie dziej, to kod:

procedure TForm1.Button1Click(Sender: TObject);
var
new:tlistitem;
begin
new:=listview1.items.add;
new.Caption:=Edit1.Text;
ListView1.Canvas.Font.Color:=clRed;
ListView1.Canvas.TextOut(ListView1.Left, ListView1.Items.Item[ListView1.Items.Count-1].Top, Edit1.Text);
end;
0

Użyj lepiej OwnerDraw.

0

Kurcze nie bardzo jeszcze kumam ten cały canvas, skopiowałem poparzedni kod do DrawiItem, nic nie rysuje.

procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
  Item: TListItem; Rect: TRect; State: TOwnerDrawState);
begin
ListView1.Canvas.Font.Color:=clRed;
ListView1.Canvas.TextOut(ListView1.Left, ListView1.Items.Item[ListView1.Items.Count-1].Top, Edit1.Text);
end;
0

Kurcze, napisałem tak jak w artykule i dalej nic :(

procedure TForm1.ListView1DrawItem(Sender: TCustomListView;
  Item: TListItem; Rect: TRect; State: TOwnerDrawState);
begin
ListView1.Canvas.Font.Color:=clRed;
LIstView1.Canvas.TextOut(Rect.Left, Rect.Top, Edit1.Text);
end;

EDIT: Juz dziala, nie wiedzialem ze w Listview trzeba zaznaczyc OwnerDraw na True

EDIT2: No tak ale teraz nie chce mi sie zaznaczać item na którym zostało coś namalowane :\

0

To rysuj sobie zaznaczenie. Samo się nie zaznaczy w Owner Draw,

0

Zaznaczenia też można rysować ? Niew wiedziałem, zaraz spróbuje, ale to chyba wtedy w OnClick?

EDIT: Nie moge wykombinować jak namalować to zaznaczenie :(

0

Nie w OnClick, tylko w OnDrawItem :)
Ten przykład zaznacza itema w czterokolumnowym listview, i jeszcze zostawia z lewej strony itema miejsce na ikonę (zmienna offset) :

        if Item.Selected then begin
            offset := 36;
            ListView1.Canvas.Font.Color := clWhite;
            ListView1.Canvas.Brush.Color := clBlack;
            ListView1.Canvas.FillRect(Rect);
            ListView1.Canvas.TextOut(Rect.Left+offset, Rect.Top+2, Item.Caption);
            Offset := ListView1.Columns.Items[0].Width;
            ListView1.Canvas.TextOut(Rect.Left+offset, Rect.Top+2, Item.SubItems[0]);
            Offset := Offset + ListView1.Columns.Items[1].Width;
            ListView1.Canvas.TextOut(Rect.Left+offset, Rect.Top+2, Item.SubItems[1]);
            Offset := Offset + ListView1.Columns.Items[2].Width;
            ListView1.Canvas.TextOut(Rect.Left+offset, Rect.Top+2, Item.SubItems[2]);
        end
        //niezaznaczony
        else begin
            Offset := 36;
            ListView1.Canvas.Brush.Color := clWhite;
            ListView1.Canvas.Font.Color := clBlack;
            ListView1.Canvas.FillRect(Rect);
            ListView1.Canvas.TextOut(Rect.Left+offset, Rect.Top+2, Item.Caption);
            Offset := ListView1.Columns.Items[0].Width;
            ListView1.Canvas.TextOut(Rect.Left+offset, Rect.Top+2, Item.SubItems[0]);
            Offset := Offset + ListView1.Columns.Items[1].Width;
            ListView1.Canvas.TextOut(Rect.Left+offset, Rect.Top+2, Item.SubItems[1]);
            Offset := Offset + ListView1.Columns.Items[2].Width;
            ListView1.Canvas.TextOut(Rect.Left+offset, Rect.Top+2, Item.SubItems[2]);
        end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1