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