Главная страница
    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.01 c
1-48511
Фагот
2003-09-02 11:34
2003.09.15
Outlook


1-48566
Man
2003-08-27 21:21
2003.09.15
вызов одинаковых окон МДИ приложения


6-48666
Виль
2003-07-13 14:53
2003.09.15
FTP- сервер на ПК ответ на модемное диалаповское соединение.


3-48458
Vorobyev Sergey
2003-08-22 14:11
2003.09.15
Как правильно записать Blob в TStream в UDF ?


14-48741
Steven
2003-08-27 17:54
2003.09.15
ModelMaker





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский