Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
ВнизПеределка ListView. Найти похожие ветки
← →
Black_Tomcat (2008-01-18 14:22) [0]Здравствуйте.
У меня возникла мысль сделать ListView, который может отображать один элемент TListItem, на двух строках, но вот как это сделать я не могу догнать. Вроде все просто надо увеличить Rect TListItem и потом TextOut в половину Rect, но вот как ее увеличить?
← →
sniknik © (2008-01-18 14:28) [1]> но вот как это сделать я не могу догнать.
посмотри код в ЕValueListEditor
← →
Black_Tomcat (2008-01-18 14:41) [2]А где его взять?
Точно не TValueListEditor?
← →
clickmaker © (2008-01-18 14:51) [3]
> как ее увеличить?
высота строки листвью определяется высотой прицепленного imagelist
← →
Black_Tomcat (2008-01-18 14:58) [4]Вот это уже классно.
Спасибо clickmaker сейчас попоробую.
← →
Black_Tomcat (2008-01-18 15:08) [5]Есть одна проблемка, текст находится по центру рисунка, как его сделать по верхнему краю?
← →
sniknik © (2008-01-18 15:16) [6]> Точно не TValueListEditor?
точно он, раскладку неудачно переключил русская Е вместо английской T
так тебе две строки в каком порядке нужно? 2 строки подряд, или 2 рядом (столбцы)?
← →
Black_Tomcat (2008-01-18 15:24) [7]Всмысле две строки друг под другом. У первой должно быть два столбца а у второй один, но шириной как два у пердыдущей.
|Caption |SubItem[0] |
-------------------------
|SubItem[1] |
Жаль что я не умею рисовать в текстовом режиме :-)
← →
sniknik © (2008-01-18 16:14) [8]так, имхо, ничего и не надо менять (высоту строки), просто берешь на себя отрисовку строки, и если есть в ней какой символ разделитель (сам решишь какой) рисуешь строки с разделителем | на определенном растоянии, если нет то можно стандартно отрисовать.
вид будет как раз такой.
← →
Black_Tomcat (2008-01-18 20:38) [9]Нет мне это надо в одном TListItem т.е., когда я выбираю первую или вторую строку они обе выбираются.
Код я написал только вот одна неприятность пришлось кинуть пустой ImageList с размером 60x32. :-) Ну и не пустой что бы значки были. В качестве образца, исходника короче предка. Взят код с Королевтва Delphi "Ответ на вопрос № 50413".
Вот что получилось:
procedure TForm1.ListView1AdvancedCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
var ElemRect: TRect;
PaintRect:TRect;
IconRect:TRect;
begin
if item = nil then
Exit;
With ListView1.Canvas do
begin
Try
//подготовка областей
ListView1.Columns.BeginUpdate;
ElemRect := Item.DisplayRect(drBounds);
IconRect := ElemRect;
PaintRect := ElemRect;
with IconRect do
begin
Left:=Left + 3;
Right:=Left + ListViewImageList.Width;
Top:=Top+Round(((Bottom-Top) / 2) - 16);
Bottom:=Top + ListViewImageList.Width;
end;
ElemRect.Left := ElemRect.Left + ListViewImageList.Width+6;
//Рисуем элементы списка
if Item.Selected then
Brush.Color := clBtnFace
else
Brush.Color := ListView1.Color;
Brush.Style := bsSolid;
FillRect( PaintRect );
//Рисуем иконку
NormalListViewImageList.Draw(ListView1.Canvas,
IconRect.Left,
IconRect.Top,
Item.ImageIndex);
//Выводим Caption
TextOut(ElemRect.Left, ElemRect.Top + 1, item.Caption);
//Выводим SubItems
if Item.Selected then
SetTextColor(ListView1.Canvas.Handle,$0)
else
SetTextColor(ListView1.Canvas.Handle,$828282);
TextOutA(ListView1.Canvas.Handle,
ElemRect.Left,
(Round((ElemRect.Bottom - ElemRect.Top)/3)*2+ElemRect.Top)+2,
PChar(item.SubItems[1]),
Length(item.SubItems[1]));
TextOutA(ListView1.Canvas.Handle,
ElemRect.Left,
Round((ElemRect.Bottom - ElemRect.Top)/3+ElemRect.Top)+2,
PChar(item.SubItems[0]),
Length(item.SubItems[0]));
//Рисуем линии
if Item.Selected then
Pen.Color := RGB(249,177,25)
else
Pen.Color := RGB(20,152,181);
Pen.Width := 2;
Pen.Style := psSolid;
MoveTo(IconRect.Left - 3,ElemRect.Bottom - 2);
LineTo(ElemRect.Right,ElemRect.Bottom - 2);
DefaultDraw := false;
ListView1.Columns.EndUpdate;
Finally
End;
end;//With ListView1.Canvas do
end;
Если, я в чем-то не прав, то подскажите в чем. Код работает правда быстротой не блещет.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.054 c