Форум: "Основная";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизКак 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c