Форум: "Прочее";
Текущий архив: 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