Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];

Вниз

Создание множества   Найти похожие ветки 

 
Satirus   (2002-04-18 23:19) [0]

Вопрос такой:
У меня есть 13 чекбоксов, которые находятся в GroupBox"e
У каждого есть своё название, которое совпадает с одним из возможных значений определенного типа TdomWhatToShow, который определен как TdomWhatToShow = set of TdomNodeType;
то есть является множеством. На форме других чекбоксов нет, тоесть можно проверять тип компонента и если он TCheckBox, то добавлять к нему (если отмечен) или отнимать из опредаляемого множества если не отмечен. Предложите наиболее оптимальный алгоритм/решение.
Вот наброски
var nodeFilter:TdomWhatToShow = [];
procedure SomeCheckBoxOnClick(Sender:TObject);
begin
if Sender is TCheckBox then
if sender.checked then nodeFilter:=nodeFilter + TdomWhatToShow (sender.Caption)
else nodeFilter:=nodeFilter-TdomWhatToShow(sender.Caption);
end;

но это немного не работает...


 
kull   (2002-04-19 00:16) [1]

Нет! Строку привести к множеству это черезчур...
И потом sender.checked, мне кажется, сразу не работает.

Можно через таги попробовать типа

TdomWhatToShow(TCheckBox(sender).Tag), но это тоже некрасиво...


 
kull   (2002-04-19 00:19) [2]

Т.е. в каждый таг предварительно записать значение соответствующего элемента множества: Tag := Integer(элемент)


 
Satirus   (2002-04-19 13:35) [3]

kull-> Ну а как быть с обработчиком?... А элементы ты имеешь ввиду значения типа TdomWhatToShow?


 
Satirus   (2002-04-19 14:06) [4]

Вот работает таким макаром
if (Sender is TCheckBox) and
(TCheckBox(Sender).Checked) then edit3.Text:=TCheckBox(sender).Caption;
Теперь осталось лишь произвести приведение к другому типу, и вот с этим-то какраз и неувязочка...
То есть

var nodeFilter:TdomWhatToShow = [];
...
TdomWhatToShow = set of TdomNodeType;
TdomNodeType = = (ntUnknown,
ntElement_Node,
ntAttribute_Node,
ntText_Node,
ntCDATA_Section_Node,
ntEntity_Reference_Node,
ntEntity_Node,
ntProcessing_Instruction_Node,
ntComment_Node,
ntDocument_Node,
ntDocument_Type_Node,
ntDocument_Fragment_Node,
ntNotation_Node);

Каждый чекбокс называется как одно из значений типа.
Вопрос, к какому из типов производить приведение: к TdomWhatToShow или к TdomNodeType.
Но если переменная типа TdomWhatToShow, то при приведении к TdomNodeType получается Invalid typecast.


 
Бурундук   (2002-04-19 14:09) [5]

Установка тэгов в значения, соответствующие заголовкам:
(uses TypInfo)

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
dnt: Integer; //TdomNodeType;
begin
for i := 0 to ComponentCount-1 do
begin
if Components[i] is TCheckBox then
dnt := GetEnumValue(TypeInfo(TdomNodeType),
TCheckBox(Components[i]).Caption);
if dnt <> -1 then Components[i].Tag := dnt;
end;
end;

Обработчик:

var
GlobalSet: TdomWhatToShow; // или что у тебя там

procedure TForm1.CheckBox1Click(Sender: TObject);
var dnt: Integer;
begin
dnt := (Sender as TComponent).Tag;
if (Sender as TCheckBox).Checked then
Include(GlobalSet, TdomNodeType(dnt))
else
Exclude(GlobalSet, TdomNodeType(dnt)) ;
end;


 
Satirus   (2002-04-19 16:35) [6]

Бурундук-> Спасибо за код. Он мне оказался очень кстати



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

Форум: "Основная";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
3-2444
vitnt2000
2002-04-10 14:26
2002.05.02
Подключение к InterBase без драйверов


1-2541
Yuraz
2002-04-18 11:08
2002.05.02
Поиск, подсчёт, вывод на экр переменных в перловском файле ($var)


6-2637
Андре
2002-01-31 14:26
2002.05.02
Vypress Chat


1-2588
YurikVN
2002-04-16 00:45
2002.05.02
EXE из EXE


6-2638
cypher
2002-02-19 00:49
2002.05.02
HOST - IP





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