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

Вниз

Как TreeView сделать с чекбоксами ? (+)   Найти похожие ветки 

 
Дельфист   (2004-04-05 19:34) [0]

Всем добрый день.

Подскажите пож-та как это сделать.
Теоретически я представляю (давно где то даже видел исходники
подобного) что выставляется стиль компонента "TVS_CHECKBOXES",
но вот как потом считать свойство Checked для каждого узла?

Буду очень рад, если подкинете пример кода.
Большое спасибо всем!

Слава.


 
Malkolinge ©   (2004-04-05 19:42) [1]

У ноды есть свойство Selected


 
Дельфист   (2004-04-05 20:27) [2]

При чем тут Selected? Я говорю про Checked вообще-то.

Объясню подробнее:

1. устанавливаю стиль отображения обычного TTreeView
с "чекбоксами"


procedure TForm1.Button1Click(Sender: TObject);
var
  Style: Integer;
begin
  Style := GetWindowLong(TreeView1.Handle, GWL_STYLE);
  Style:= Style or TVS_CHECKBOXES;
  SetWindowLong(TreeView1.Handle, GWL_STYLE, Style);
end;


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

Внимание, вопрос:
как мне узнать состояние чекбокса для кокнкретного узла?
т.е. отмечен он "галочкой" или нет.


 
Suntechnic ©   (2004-04-05 23:49) [3]

См. макросы TreeView_SetCheckState и TreeView_GetCheckState


 
Camypau   (2004-04-05 23:58) [4]

можно намного проще сделать
рисуешь свои картинки для чекбоксов , а потом используешь свойство stateimages


 
Дельфист   (2004-04-06 12:20) [5]

2 Suntechnic ©   (05.04.04 23:49) [3]
окей, попробую.

2 Camypau   (05.04.04 23:58) [4]
Спасибо, вот такого копеешного решения не надо.
хотя бы потому, что реакция на пользовательские
действия разные если через свои картинки и еслиъ
по человески.


 
Дельфист   (2004-04-06 12:20) [6]

2 Suntechnic ©   (05.04.04 23:49) [3]
окей, попробую.

2 Camypau   (05.04.04 23:58) [4]
Спасибо, вот такого копеешного решения не надо.
хотя бы потому, что реакция на пользовательские
действия разные если через свои картинки и еслиъ
по человески.


 
Дельфист   (2004-04-06 12:20) [7]

сорри, случайно продублировалось.


 
Дельфист   (2004-04-06 12:26) [8]

2 Suntechnic ©   (05.04.04 23:49) [3]

Ты прикололся что-ли? :) Или где это смотреть? в каком модуле?


 
[lamer]Barmaglot ©   (2004-04-06 13:15) [9]

Да нет он не прикалывался просто такая возможномть появляется после установки IE-5.0 см. здесь: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/treeview/macros/treeview_getc heckstate.asp
А вообще самый правильный и надежный метод: Camypau   (05.04.04 23:58) [4]


 
NAlexey ©   (2004-04-06 14:26) [10]

>Дельфист   (06.04.04 12:20) [5]
С чего это ты вдруг взял что это "копеечное" решение. Вполне нормальное решение если его правильно реализовать.


 
Дельфист   (2004-04-06 15:56) [11]

2 [lamer]Barmaglot ©   (06.04.04 13:15) [9]

открой свою ссылку сам для начала.

"Page Cannot Be Found

We apologize for the inconvenience, but the page you are seeking cannot be found in this location."

вот что у меня получилось.

2 NAlexey ©   (06.04.04 14:26) [10]
там по моему разница есть в реакции "нормального" чекбокса
и "самодельного". не помню в чем точно, когда-то я так
уже делал, не понравилось.

хочется стандартного чекбоснутого дерева.


 
Дельфист   (2004-04-06 16:05) [12]

2 lamer]Barmaglot ©

ты вот это хотел наверное написать :)

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/treeview/macros/treeview_getc heckstate.asp


 
Дельфист   (2004-04-06 16:06) [13]

к-хм, не понял, а чегой-то текст ссылки обрезается???


 
xmrz   (2004-04-06 16:56) [14]

>>Дельфист

Можно и без stateimages, а отрисовывать bmp из ресурсов OnDraw. Решение очень гибкое, работает быстро и адаптируется под любые конкретные задачи. Сам так делал.

>>как мне узнать состояние чекбокса для кокнкретного узла?
>>т.е. отмечен он "галочкой" или нет

Создаёшь свою структуру связанную с Node.Data и там определяешь свойство checked.


 
FOX ©   (2004-04-06 17:14) [15]

Попробуй такой вариант:

function TForm1.IsChecked( aNode: TTreeNode; var isChecked: boolean): boolean;
var item: TTVItem;
begin
 item.mask := TVIF_STATE;
 item.hItem := aNode.ItemId;
 result := bool(SendMessage( aNode.Handle, TVM_GETITEM, 0, Longint(@item)));
 if result then isChecked := (item.state and $2000) = $2000;
end;



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

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

Наверх




Память: 0.5 MB
Время: 0.057 c
1-1081690986
Kalista
2004-04-11 17:43
2004.04.25
Добавление событий компаненту


4-1071588254
Vasiliy
2003-12-16 18:24
2004.04.25
Как на время отключить только клавиатуру


14-1080808718
Rule
2004-04-01 12:38
2004.04.25
Пробелмма с установкой программ инсталлшеилда


7-1077969009
Duk
2004-02-28 14:50
2004.04.25
asm


8-1073681437
Ракал
2004-01-09 23:50
2004.04.25
Как работать с Direct Sound?