 
			
				01.11.2007, 11:13
			
			
			
		  
	 | 
	
		
		
		
			  | 
			
			
				
				
				 Продвинутый 
				
				
			 | 
			  | 
			
				
				
					Регистрация: 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;  
  
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	 |