Форум: "Основная";
Текущий архив: 2003.09.15;
Скачать: [xml.tar.bz2];
ВнизКак создать кнопку в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c