Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.035 c
14-1094098942
Viking
2004-09-02 08:22
2004.09.26
О браузере...


4-1092735230
surkis
2004-08-17 13:33
2004.09.26
Cлужбы и БД


14-1094642824
kand
2004-09-08 15:27
2004.09.26
Есть ли жизнь во Вселенной?


14-1094377822
Baron
2004-09-05 13:50
2004.09.26
Кто играл на деньги


1-1094910547
InfMag
2004-09-11 17:49
2004.09.26
Прозрацный фон текста





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