Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.035 c
14-1080622115
Dmitriy O.
2004-03-30 08:48
2004.04.25
Набираю команду кодеров.


6-1077881008
4ward
2004-02-27 14:23
2004.04.25
работа с TClient/TServerSocket


1-1081157259
NorthMan
2004-04-05 13:27
2004.04.25
что-то не получается сделалать enabled:=false для пункта


1-1081332094
Bond
2004-04-07 14:01
2004.04.25
Крупные элементы управления и текст


3-1080790223
Badboy
2004-04-01 07:30
2004.04.25
Заполнение





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