Главная страница
    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-1227442297
Slider007
2008-11-23 15:11
2009.01.18
С днем рождения ! 23 ноября 2008 воскресенье


2-1228464468
1234567
2008-12-05 11:07
2009.01.18
MB_ICONINFORMATION


15-1227012127
NoDt
2008-11-18 15:42
2009.01.18
Вывод пути через матрицу последовательности узлов Алгоритм Флойда


15-1227425906
Solnce
2008-11-23 10:38
2009.01.18
форум загнивает


2-1228249482
ИванН
2008-12-02 23:24
2009.01.18
TSpeedButton





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский