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

Вниз

Нужно напромтив каждого Нода TreeView создать checkbox???   Найти похожие ветки 

 
Relaxxx   (2004-09-01 22:25) [0]

Веренее как создать я знаю:

SetWindowLong(TreeView1.Handle, GWL_STYLE, GetWindowLong(TreeView1.Handle, GWL_STYLE) or $0100);


а вот как узнать свойства чекбокса у нода, например есть галочка или нет, как самому поставить галочку програмно или сделать чекбокс неактивным????


 
Mim1 ©   (2004-09-02 01:05) [1]


> сделать чекбокс неактивным????

К сожелению вы не сможете сделать галочку неактивной, а так же определить нешаманскими способами когда юзер переключил галочку.  
Чтобы можно было делать чекбоксы неактивными надо отрисовывать их самостоятельно или вопрользоваться компонентом который умеет отрисовывать их самостоятельно.


 
Biga   (2004-09-12 12:57) [2]

Чекбоксы в TTreeView.

Понадобилось мне как-то дерево с чекбоксами. Само по себе это не сложно - Яндекс дал мне ну

жную ссылку на второй странице:

 SetWindowLong(TreeView1.Handle, GWL_STYLE,GetWindowLong(TreeView1.Handle, GWL_STYLE) or
TVS_CHECKBOXES);


TreeView1 - это дерево, с которым я работал.
Этой строчкой мы задаём дереву стиль TVS_CHECKBOXES. Все константы берутся из модуля CommCtrl. (Не забудьте uses CommCtrls!)

Далее мне, естественно, захотелось узнать/установить состояние определённого чекбокса. Причём узнать

его в тот момент для меня было важнее. Сколько я не бился, Яндекс отправлял меня на одну и туже фун

кцию TreeView_GetCheckState. А такой функции в CommCtrl не было. Ну и не беда, правда? ;)
Берем где-нибудь файл "CommCtrl.H". Ну и что, что всё на Си? Ищем функцию TreeView_GetCheckState. Вот она:


#define TreeView_GetCheckState(hwndTV, hti) \
  ((((UINT)(SNDMSG((hwndTV), TVM_GETITEMSTATE, (WPARAM)(hti), TVIS_STATEIMAGEMASK))) >> 12) -1)


Осталось только узнать типы параметров функции, тех которые hwndTV и hti. В этом нам поможет сайт Микрософта: (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/treeview/macros/treeview_get checkstate.asp)


Syntax:
UINT TreeView_GetCheckState(
   HWND hwndTV,
   HTREEITEM hItem
);

Parameters:
hwndTV  Handle to the tree-view control.
hItem   Handle to the item.

Returns:
Checked    1
Unchecked  0
No Check Box Image -1


Всё, больше нам ничего и не надо. Переводим это дело на "русский" язык.


function TreeView_GetCheckState(hwndTV:HWND; hItem:HTREEITEM):UINT;
const TVM_GETITEMSTATE = (TV_FIRST + 39); // Этой константы не было в модуле CommCtrl.
     // TVIS_STATEIMAGEMASK = $F000;  // А эти были, я их тут просто так написал
     // TV_FIRST = $1100;             //
begin
 Result:=((UINT(SendMessage(hwndTV, TVM_GETITEMSTATE, WPARAM(hItem), TVIS_STATEIMAGEMASK))) shr 12) -1;
end;


Параметры функции следующие:
hwndTV - Хэндл дерева. У меня TreeView1.Handle;
hItem - Идентификатор узла. Например, у текущего узла это TreeView1.Selected.ItemId . У первого узла TreeView1.Items[0].ItemId;

Возвращает 1 или 0 - выключено или включено, соответственно. Еще может вернуть -1, если что-то не в порядке.

С установкой чуток посложнее. Всё делается через функцию TreeView_SetItemState.


// Эта функция вспомогательная.
function TreeView_SetItemState(hwndTV:HWND;hItem:HTREEITEM;state,stateMask:UINT):UINT;
var _ms_TVi:TTVITEM;
begin
 _ms_TVi.mask := TVIF_STATE;
 _ms_TVi.hItem := hItem;
 _ms_TVi.stateMask := stateMask;
 _ms_TVi.state := state;
 SendMessage(hwndTV, TVM_SETITEM, 0, LPARAM(@_ms_TVi));
end;

//
function TreeView_SetCheckState(hwndTV:HWND;hItem:HTREEITEM;fCheck:Boolean):UINT;
var FCheckW:Word;
begin
 if fCheck then fCheckW:=2 shl 12 else fCheckW:=1 shl 12;
 TreeView_SetItemState(hwndTV, hItem, fCheckW, TVIS_STATEIMAGEMASK)
end;


Использование функции SetCheckState такое:
Как и у первой функции
hwndTV - Хэндл дерева. У меня TreeView1.Handle;
hItem - Идентификатор узла. Например, у текущего узла это TreeView1.Selected.ItemId . У первого узла TreeView1.Items[0].ItemId;
fCheck - в какое состояние надо установить чекбокс. True - включено, False - выключено, соответственно.

Biga.
У меня всё работало, но если что мыльте: BigaSoft@yandex.ru


 
Mim1 ©   (2004-09-12 13:08) [3]


> [2] Biga   (12.09.04 12:57)

А не удалось ли вам сделать чекбокс неактиынм? или отловить момент изменения состояни галочки?


 
Dmitry   (2004-09-14 15:07) [4]

Лучше взять библиотеку Raize2. В ней есть компонент TRzCheckTree. Это как раз то, что надо.


 
xmrz   (2004-09-14 15:15) [5]

Самое простое решение - отрисовывать Bitmap из ресурсов на канве. Событие OnChange и свойство Checked написать через обработчик OnMouseDown OnMouseUp, OnKeyDown и OnKeyUp



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

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

Наверх




Память: 0.48 MB
Время: 0.04 c
14-1094705445
DSK
2004-09-09 08:50
2004.09.26
Как компонент сделать прозрачным?,наследник TWinControl


3-1093926955
HanIP
2004-08-31 08:35
2004.09.26
функция, которая выбирает товары


1-1094663936
Antonmm
2004-09-08 21:18
2004.09.26
Рисование на экране


6-1090148743
mrGrey
2004-07-18 15:05
2004.09.26
Автозаполнение.


1-1095075552
Chizh
2004-09-13 15:39
2004.09.26
Конструкция with...do