-
Здравствуйте, Мне нужно получить ЛистВью с высокими строками, но с мелким шрифтом внутри. Для этого я задал ему шрифт 22 пункта, а в OnCustomDrawItem устанавливаю более мелкий шрифт.
with Sender.Canvas do
begin
Font.Size := 12;
В результате я получаю почти то, что надо, но только текст находится в верхнем левом углу ячеек. Как изменить позицию текста? Можно было бы вручную отрисоавть надпись, но в событие не передается Rect и я не знаю как это сделать без него. Вполне возможно, что я вообще пошел по неверному пути, может есть способ лучше?
-
> Здравствуйте, Мне нужно получить ЛистВью с высокими строками, > но с мелким шрифтом внутри.
Что за ячейки у T TListView? Как понять: с высокими строками, но с мелким шрифтом внутри.
> В результате я получаю почти то, что надо, но только текст > находится в верхнем левом углу ячеек. Как изменить позицию > текста? Можно было бы вручную отрисоавть надпись, но в событие > не передается Rect и я не знаю как это сделать без него. >
Как я понял текст через канву хочешь выводить canvas.TextOut(x, y, ‘TEXT’) – где x позиция текста по горизонтали, где y по вертикали
> Вполне возможно, что я вообще пошел по неверному пути, может > есть способ лучше?
Да, вопрос надо было в "Начинающим" задовать
-
-
> canvas.TextOut(x, y, ‘TEXT’) – где x позиция текста по горизонтали, > где y по вертикали
Так это тебе неподходит чтоли? если через Rect: TRect
canvas.TextOut(Rect.Left, Rect.Top, ‘TEXT’)
-
У ЛисьВью в событие Rect не передается
procedure TCalibrationScreen.CalibrationListViewCustomDrawItem(
Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
var DefaultDraw: Boolean);
-
Я, честно не понимаю как эделать сабж.
ЗЫ Перенестие в Начинающие.
-
Когда я обошёлся написанием собственного компонента-аналога, в котором можно было изголяться как попало при отрисовке элементов.
-
> Kolan © (17.11.08 10:06) [4]
> У ЛисьВью в событие Rect не передается
Item.DisplayRect?
-- Regards, LVT.
-
Спасибо Леонид, откуда брать рект понятно. Все равно что-то не получается. Я использую одну функцию для двух обработчиков. Вот так выглядит вызов: 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 попадаеют нужные строки.
-
> Kolan © (18.11.08 16:25) [8]
> Все равно что-то не получается. Я использую одну функцию
В demos есть пара примеров с TListView, в т.ч. и с виртуальным. Если не сумеешь разобраться, то настаивай на перемещение к "Начинающим", или в "Основную" - вдруг там есть эксперт по этому вопросу ;)
-- Regards, LVT.
|