Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
1-48623
explorer
2003-09-03 08:37
2003.09.15
Секундомер


1-48628
AndreySoft
2003-09-03 00:41
2003.09.15
Как обратиться к заархивированному файлу


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


14-48769
jack128
2003-08-26 12:59
2003.09.15
Именинники 26 августа


1-48629
Jacob
2003-09-02 22:00
2003.09.15
CopyDirectory





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский