Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.15;
Скачать: CL | DM;

Вниз

Как создать кнопку в CustomDrawItem для TreeView   Найти похожие ветки 

 
Erik   (2003-09-01 17:03) [0]

Впринципе неплохобы обработать нажатие этой кнопки.


 
KSergey ©   (2003-09-01 17:09) [1]

Проще нарисовать там картинку с изображением кнопки
А то и просто - значек, по которому будет понятно, что "тыкай сюды"
Или в справке про это написать.
А то для кнопки еще и нажание придется отрисовывать.. А оно надо?
А отловить клик именно по картинке - в OnMouseDown

HT := Tree.GetHitTestInfoAt (X, Y);
if ( htOnItem in HT) then вот тут подобрать подходящую константу... На крайний случай - сравнить коодринаты с координатами итема и сделать выводы (я не знаю, это так фантизии - я не ловил именно на картинке, проверять лень)


 
Erik   (2003-09-01 17:18) [2]

Тогда хотябы константу для
DrawFrameControl(TCustomTreeView(Sender).Canvas.Handle, NodeRect, DFC_BUTTON, Style);
DFC_BUTTON - рисует мне CheckBox.


 
Skier ©   (2003-09-01 17:20) [3]

>Erik (01.09.03 17:18)

> DFC_BUTTON - рисует мне CheckBox.

Всё дело в Style


 
Erik   (2003-09-01 17:27) [4]

Да кнопочки я нарисовал, но отрисовку текста придется в ручную делать?? А плюсики тоже самому рисовать?


 
KSergey ©   (2003-09-01 17:30) [5]

Ну текст -это фигня ;) Тем более, раз уж кнопочки есть ;)
А вот про плюсики - не понял
Они должгны были остаться. Иначе что-то не так в коде.

PS: а вы как хотели? Раз - и готовы кнопочки? Не, так не пойдеть, это не наш путь ;)


 
Erik   (2003-09-01 17:59) [6]

Вобщем и текст нарисовал, но с права есть [+] и он нерисуется! Может у кого пример есть рисования в CustomDrawItem?
NodeRect := Node.DisplayRect(True);
ButRect := NodeRect;
DefaultDraw := False;
Style := DFCS_BUTTONPUSH;
with ButRect do
begin
Left := Left + (Node.Level * TTreeView(Sender).Indent);
Right := Left+15;
Top := Top + 2;
Bottom := Bottom - 2;
end;
DrawFrameControl(TCustomTreeView(Sender).Canvas.Handle, ButRect, DFC_BUTTON, Style);
NodeRect.Left := ButRect.Right + 5;
TextOut(NodeRect.Left, NodeRect.Top, Node.Text);


 
Erik   (2003-09-01 18:53) [7]

Хотябы пример кода для заливки а то FillRect меняет фонт.


 
KSergey ©   (2003-09-02 09:07) [8]

Ну вот мой пример рисования в дереве.

procedure TCustomFuncListForAddForm.treeFuncCustomDrawItem(
Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
pNodeData: ^TFuncNodeData;
SelFontColor: TColor;
begin
if (Node.Parent <> nil) AND NOT (cdsSelected IN State)then
begin
pNodeData := Node.Data;
if pNodeData.IsSel then // некое условние, по которому меняю цвет фона узла
begin
SelFontColor := Sender.Canvas.Brush.Color; // ну в отбщем определяю
Sender.Canvas.Font.Color := SelFontColor; // цвет шрифта как фон
Sender.Canvas.Brush.Color := NOT SelFontColor;// а фон - как инверсию
end;
end;
end;


Здесь я не меняю DefaultDraw (т.е. оно остается TRUE), а потому собственно отрисовку не делаю.

В вашем примере что-то непонятное наворочено с пересчетом координат. Node.DisplayRect(True) вроде и так уже дает только область текста узла. Зачем что-то еще пересчитывать?
К стати, при таботе с TreeView надо учитывать, что он не меняет размеры узлов в зависимости от отрисованного текста. И нет возможности эти размеры ему указать. Т.е. вылезать за рамки отведенные им для текста -нельзя. Хотя, может я не до конца что-то делал, но столкнулся именно с таким вот нюансом помнится.
Есть подозрение, что плюсики вы сами затираете.

FillRect меняет фонт.

Меняет шрифт?! Очень странно. Код.


 
Erik   (2003-09-02 11:04) [9]

Мне рисовать разумеется надо. С проблемой плюсиков справился, сначала рисую текст а потом кнопку. Пересчитываю чтобы знать куда вывести кнопку. Вылезать разумеется можно куда угодно, но отвечать за вылезание придется. Тоесть стирать кнопочки мне надо с помощю FillRect.
Если кто подскажет линк как нажатие рисовать? А то самому уже надоело делать(медленно), если есть четкие описания.

P.S.
Менять атрибуты(цвет, фонит и пр) это я и сам без подготовки за 5 мин сделал.


 
Erik   (2003-09-02 11:10) [10]

А вот этот кусок меняет фонт, кто скажет почему?
Если убрать FillRect то все впорядке.
with NodeRect do
begin
NodeRect.Left := NodeRect.Right;
NodeRect.Right := NodeRect.Right + 15;
end;
FillRect(NodeRect);
i := Find(Integer(Node.Data));
if (i <> -1) and (ptrSeadmed^[i].LepAdrID <> LepAdrID) then
begin
Font.Color := clGray;
DefaultDraw := True;
end;



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

Текущий архив: 2003.09.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
14-48697
Всеволод Соловьёв
2003-08-24 00:21
2003.09.15
---|Ветка была без названия|---


1-48490
Cherny Ivan
2003-09-04 16:51
2003.09.15
Filer.DefineBinaryProperty, и вытекающие последствия


7-48805
dm37
2003-06-30 14:35
2003.09.15
RS-232 - RS-485


4-48820
Serhio
2003-07-16 19:20
2003.09.15
Как определить handle окна


1-48627
GreatMaster
2003-09-03 09:19
2003.09.15
D6-7 - юникод русских букв в DFM как отключить?