Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.10.2007, 11:17
aleksnine aleksnine вне форума
Начинающий
 
Регистрация: 08.03.2007
Сообщения: 151
Репутация: 12
По умолчанию Listview отрисовка

Привет.
Несколько вопросов по отрисовке

Есть
Код:
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 чередованием даже если он пустой . Так делают во многих проигрывателях . Вот что я хочу получить в итоге -

Спасибо .
Ответить с цитированием
  #2  
Старый 29.10.2007, 20:38
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

1) юзай Canvas.TextRect;
2) не проще ли вместо
Код:
if trunc((i) / 2) < (i / 2) then
писать
Код:
if Odd(i) then
........
Т.е. четные строки одним цветом, нечетные другим.
Чтоб закрасить все строки в событии OnCustomDraw дорисовывай пустые стоки.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием
  #3  
Старый 29.10.2007, 21:44
aleksnine aleksnine вне форума
Начинающий
 
Регистрация: 08.03.2007
Сообщения: 151
Репутация: 12
По умолчанию

Чтоб закрасить все строки в событии OnCustomDraw дорисовывай пустые стоки.
Извини , как понять дорисовывай ?

Последний раз редактировалось aleksnine, 29.10.2007 в 21:49.
Ответить с цитированием
  #4  
Старый 29.10.2007, 23:46
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

Ну я так понял, что ты отрисовываешь тока строки где есть чета (т.е. те - которые заполнены), ну вот остальные можно закрасить в OnCustomDraw. Если не так обьясни поточней.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием
  #5  
Старый 30.10.2007, 00:12
aleksnine aleksnine вне форума
Начинающий
 
Регистрация: 08.03.2007
Сообщения: 151
Репутация: 12
По умолчанию

Все понял . Уже к вечеру голова не соображает вообще .
Спасибо.
Ответить с цитированием
  #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. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:29.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter