Показать сообщение отдельно
  #6  
Старый 01.11.2007, 11:13
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Цитата:
Сообщение от aleksnine
Привет.
Несколько вопросов по отрисовке

Есть
Код:
Tlistview - vsreport - OwneкDraw:=true;


1)
Текст вывожу так
Код:
with (sender as Tlistview).Canvas do begin
TextOut(Rect.Left+18 ,Rect.Top+4,Item.Caption);
TextOut(Rect.Left+(sender as Tlistview).Columns.Items[0].Width ,Rect.Top+4,Item.SubItems[0]);
TextOut(Rect.Left+(sender as Tlistview).Columns.Items[0].Width
+(sender as Tlistview).Columns.Items[1].Width,Rect.Top+4,Item.SubItems[1]);
TextOut(Rect.Left+(sender as Tlistview).Columns.Items[0].Width
+(sender as Tlistview).Columns.Items[1].Width+(sender as Tlistview).Columns.Items[2].Width+3,Rect.Top+4,Item.SubItems[2]);
TextOut(Rect.Left+(sender as Tlistview).Columns.Items[0].Width
+(sender as Tlistview).Columns.Items[1].Width+(sender as Tlistview).Columns.Items[2].Width+3
+(sender as Tlistview).Columns.Items[3].Width,Rect.Top+4,Item.SubItems[3]);
TextOut(Rect.Left+(sender as Tlistview).Columns.Items[0].Width
+(sender as Tlistview).Columns.Items[1].Width+(sender as Tlistview).Columns.Items[2].Width+3
+(sender as Tlistview).Columns.Items[3].Width+(sender as Tlistview).Columns.Items[4].Width,Rect.Top+4,Item.SubItems[4]);
TextOut(Rect.Left+(sender as Tlistview).Columns.Items[0].Width
+(sender as Tlistview).Columns.Items[1].Width+(sender as Tlistview).Columns.Items[2].Width+3
+(sender as Tlistview).Columns.Items[3].Width+(sender as Tlistview).Columns.Items[4].Width
+(sender as Tlistview).Columns.Items[5].Width,Rect.Top+4,Item.SubItems[5]);
 end;
Тут все норм кроме одного . Если длина текста больше ширины колонки , то он рисуется на следующую колонку .
Вопрос : Как сделать обрезание текста , чтоб на конце было '...' ?

2) Чередование цвета строк
Делаю так
Код:
  if trunc((i) / 2) < (i / 2) then
  sender.canvas.brush.Color := color1
 else
  sender.canvas.brush.Color := color2;
Вопрос : как раскрасить весь Listview чередованием даже если он пустой . Так делают во многих проигрывателях . Вот что я хочу получить в итоге -

Спасибо .
Не знаю, как с ListView, но вот так можно сделать со StringGrid:
Код:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
if ARow mod 2 = 0 then
begin
StringGrid1.Canvas.Brush.Color:=clSkyBlue;
StringGrid1.Canvas.Rectangle(Rect.Left - 2, Rect.Top - 2, Rect.Right + 1, Rect.Bottom + 1);
StringGrid1.Canvas.Font.Color:=clYellow;
end
else
begin
StringGrid1.Canvas.Brush.Color:=clYellow;
StringGrid1.Canvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
StringGrid1.Canvas.Font.Color:=clSkyBlue;
end;
StringGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, StringGrid1.Cells[ACol, ARow]);
end;
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием