Listview yazılar

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Listview yazılar

Mesaj gönderen hido »

İyi akşamalar...

Listview ile satır rengi uğraşıyorum, ama içinde sıkış kaldım. İki farklı kod var birinde satırdaki yazıları görebiliyorum diğerinde ise yazı hiç göremiyorum...

Bu kodları tercih etmemim sebebi listview deki hücreler arasında 'border' yok fakat satırlardaki yazılarıda göremiyorum yazıları görebilmek için ne yapabilirim...

Kod: Tümünü seç

procedure TMainForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var
  ItemRect: TRect;
begin
  DefaultDraw := False;
  if cdsSelected in State then // selected text
  begin
    Sender.Canvas.Brush.Color := clAqua;
    Sender.Canvas.Pen.Color := clGray;
    Sender.Canvas.Font.Color := clBlack;
  end
  else
  begin
    Sender.Canvas.Font.Color := clBlack;
    Sender.Canvas.Brush.Color := clWhite;
    Sender.Canvas.Pen.Color := clWhite;
    Sender.Canvas.Font.Color := clRed;
  end;
  ItemRect := Item.DisplayRect(drBounds);
  Sender.Canvas.Rectangle(itemRect);
end;
Resim


Bu kodları kullandığımda hücreler arasında 'border' oluşuyor.

Kod: Tümünü seç

procedure TMainForm.ListViewCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
begin
  if (Item.Index mod 2) = 0 then
  begin
    Sender.Canvas.Brush.Color := RGB(248, 248, 255);
  end
  else
  begin
    Sender.Canvas.Brush.Color := RGB(255, 255, 255);
  end;
  if Item.SubItems[3] = 'Mozaik' then
  begin
    Sender.Canvas.Font.Style := [fsBold];
    Sender.Canvas.Font.Color := RGB(255, 0, 0);
    Sender.Canvas.Brush.Color := clAqua;
  end;
end;
Resim
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Listview yazılar

Mesaj gönderen thelvaci »

Çizimi ben yapacağım demişsiniz(OwnerDraw) ve TextOut kullanmamışsınız.
Kullanıcı avatarı
hido
Üye
Mesajlar: 268
Kayıt: 29 Mar 2014 04:32

Re: Listview yazılar

Mesaj gönderen hido »

Bu kodları kendime göre uyarlamdım fakat caption alanını renklendiremedim, bunu nasıl yapabilirim???

Resim

Kod: Tümünü seç

procedure TForm1.ListViewCustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var
  Rect: TRect;
  Boyut, I: Integer;
  Strin: String;
begin
  Boyut := 10;
  with ListView do
  begin
    if SubItem < 1 then
    begin
      DefaultDraw := True;
      Exit;
    end;
    Rect := Item.DisplayRect(drbounds);

    for I := 0 to SubItem - 1 do
    begin
      Rect.Left := Rect.Left + Columns.Items[I].Width;
      Rect.Right := Rect.Left + Columns.Items[I + 1].Width;
    end;

    if (Item.Index mod 2) = 0 then
    begin
      Sender.Canvas.Font.Size := Boyut;
      Sender.Canvas.Pen.Color := RGB(248, 248, 255);
      Sender.Canvas.Font.Color := clBlack;
      Sender.Canvas.Brush.Color := RGB(248, 248, 255);
    end
    else
    begin
      Sender.Canvas.Font.Size := Boyut;
      Sender.Canvas.Pen.Color := RGB(255, 255, 255);
      Sender.Canvas.Font.Color := clNavy;
      Sender.Canvas.Brush.Color := RGB(255, 255, 255);
    end;
    if cdsSelected in State then // selected text
    begin
      Sender.Canvas.Pen.Color := clTeal;
      Sender.Canvas.Font.Style := [fsBold];
      Sender.Canvas.Font.Color := clWhite;
      Sender.Canvas.Brush.Color := clTeal;
    end;

    Canvas.FillRect(Rect);
    Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
    Rect.Left := Rect.Left + 2;
    Rect.Right := Rect.Right - 1;
    Rect.Top := Rect.Top + 5;
    Rect.Bottom := Rect.Bottom - 1;

    if Item.SubItems.Count >= SubItem then
      Strin := Item.SubItems[SubItem - 1];
    Canvas.TextRect(Rect, Strin);
    DefaultDraw := False;
  end;
end;
Cevapla