Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.01.18;
Скачать: [xml.tar.bz2];

Вниз

Ручная отрисовка ячеек TListView, позиция текста.   Найти похожие ветки 

 
Kolan ©   (2008-11-17 09:02) [0]

Здравствуйте,
 Мне нужно получить ЛистВью с высокими строками, но с мелким шрифтом внутри.

Для этого я задал ему шрифт 22 пункта, а в OnCustomDrawItem устанавливаю более мелкий шрифт.

 with Sender.Canvas do
 begin
   Font.Size := 12;

В результате я получаю почти то, что надо, но только текст находится в верхнем левом углу ячеек. Как изменить позицию текста? Можно было бы вручную отрисоавть надпись, но в событие не передается Rect и я не знаю как это сделать без него.

Вполне возможно, что я вообще пошел по неверному пути, может есть способ лучше?


 
AIK ©   (2008-11-17 09:22) [1]


> Здравствуйте,  Мне нужно получить ЛистВью с высокими строками,
>  но с мелким шрифтом внутри.


Что за ячейки у T TListView? Как понять: с высокими строками, но с мелким шрифтом внутри.


> В результате я получаю почти то, что надо, но только текст
> находится в верхнем левом углу ячеек. Как изменить позицию
> текста? Можно было бы вручную отрисоавть надпись, но в событие
> не передается Rect и я не знаю как это сделать без него.
>


Как я понял текст через канву хочешь выводить canvas.TextOut(x, y, ‘TEXT’) – где x позиция текста по горизонтали, где y по вертикали


> Вполне возможно, что я вообще пошел по неверному пути, может
> есть способ лучше?


Да, вопрос надо было в "Начинающим" задовать


 
Kolan ©   (2008-11-17 09:26) [2]

> Как понять: с высокими строками, но с мелким шрифтом внутри.

http://www.ksoftware.ru/files/other/ListView.gif

>Да, вопрос надо было в "Начинающим" задовать
Случайно ошибся форумом, туда и хотел.


 
AIK ©   (2008-11-17 09:48) [3]


> canvas.TextOut(x, y, ‘TEXT’) – где x позиция текста по горизонтали,
>  где y по вертикали


Так это тебе неподходит чтоли?
если через Rect: TRect

canvas.TextOut(Rect.Left, Rect.Top, ‘TEXT’)


 
Kolan ©   (2008-11-17 10:06) [4]

У ЛисьВью в событие Rect не передается

procedure TCalibrationScreen.CalibrationListViewCustomDrawItem(
 Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
 var DefaultDraw: Boolean);


 
Kolan ©   (2008-11-17 14:54) [5]

Я, честно не понимаю как эделать сабж.

ЗЫ
 Перенестие в Начинающие.


 
Dimka Maslov ©   (2008-11-17 15:57) [6]

Когда я обошёлся написанием собственного компонента-аналога, в котором можно было изголяться как попало при отрисовке элементов.


 
Leonid Troyanovsky ©   (2008-11-17 16:18) [7]


> Kolan ©   (17.11.08 10:06) [4]

> У ЛисьВью в событие Rect не передается

Item.DisplayRect?

--
Regards, LVT.


 
Kolan ©   (2008-11-18 16:25) [8]

Спасибо Леонид, откуда брать рект понятно.

Все равно что-то не получается. Я использую одну функцию для двух обработчиков.

Вот так выглядит вызов:
procedure TCalibrationScreen.CalibrationListViewCustomDrawItem(
 Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
 var DefaultDraw: Boolean);
begin
 inherited;
 DrawCalibrationListViewItems(Sender, Item);
end;

procedure TCalibrationScreen.CalibrationListViewCustomDrawSubItem(
 Sender: TCustomListView; Item: TListItem; SubItem: Integer;
 State: TCustomDrawState; var DefaultDraw: Boolean);
begin
 inherited;
 DrawCalibrationListViewItems(Sender, Item, SubItem);
end;


Вот сама функция отрисовки.
procedure DrawCalibrationListViewItems(Sender: TCustomListView;
 Item: TListItem; SubItemIndex: Integer);
var
 Measurement: TCalibrationMeasurement;
 Rect: TRect;
 S: string;
begin
 with Sender.Canvas do
 begin
   if TObject(Item.Data) is TCalibrationMeasurement then
   begin
     Measurement := TCalibrationMeasurement(Item.Data);
     if Assigned(Measurement) then
     begin
       if Measurement.Measurement.ID = -1 then
       begin
         Font.Color := clBlack
       end
       else
         if Measurement.Measurement.DefectDescription <> "" then
           Font.Color := clRed
         else
           Font.Color := clGreen;
     end;
   end;

   Rect := Item.DisplayRect(drBounds);
   if (SubItemIndex < 0) or (SubItemIndex > (Item.SubItems.Count-1)) then
     S := Item.Caption
   else
     S := Item.SubItems[SubItemIndex];

   Font.Size := 10;
   FillRect(Rect);
   TextOut(Rect.Left+20, Rect.Top+20, S);

 end;
end;


Результат (http://www.ksoftware.ru/files/other/ListView2.gif) странный. Как видите, сместилася текст только первой колонки, то есть самого айтима. Суб айтимы не отрисовались все кроме последнего. Хотя я, в отладчике, виже, что в S попадаеют нужные строки.


 
Leonid Troyanovsky ©   (2008-11-19 19:47) [9]


> Kolan ©   (18.11.08 16:25) [8]

> Все равно что-то не получается. Я использую одну функцию

В demos есть пара примеров с TListView, в т.ч. и с виртуальным.
Если не сумеешь разобраться, то настаивай на перемещение
к "Начинающим", или в "Основную" -
вдруг там есть эксперт по этому вопросу ;)

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.01.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.005 c
15-1226943419
Маэстро
2008-11-17 20:36
2009.01.18
Почему не дают больничный когда депрессия?


15-1227097144
Труп Васи Доброго
2008-11-19 15:19
2009.01.18
Тип данных


2-1228715571
lex123
2008-12-08 08:52
2009.01.18
Соединение с интернет


8-1185194618
Longli
2007-07-23 16:43
2009.01.18
Ультразвук


2-1228245696
GGGG
2008-12-02 22:21
2009.01.18
Переопределение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский