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

Вниз

set в свойстве object TStringList а   Найти похожие ветки 

 
alsov ©   (2006-07-13 16:27) [0]

Приветствую, Мастера

Вот какой вопрос. Хочу в стринглисте для каждой строки хранить некое множество. Скажем

 TAccessType = (atSelect, atUpdate, atInsert, atDelete);
 TAccessTypes = set of TAccessType;


Простым приобразованием типов делфя не хочет запихивать множество - ругается


AccessTypes := [atSelect, atUpdate];
FList.AddObject("TEST", TObject(AccessType));


Описал следующий тип


 TAccessTypesEx = record
   case byte of
   0: (AccessTypes: TAccessTypes);
   1: (IntAccessType: integer);
 end;


Тогда все компилируется на ура


AccessTypesEx.AccessTypes := [atSelect, atUpdate];
FList.AddObject("TEST", TObject(AccessTypesEx.AccessType));


Причем чтение тоже проходит нормально.

НО все-таки смущения остается!!! Всегда ли такой вариант отработает на ура? Не будет ли непредвиденных глюков с памятью?
И вообще хотелось бы услышать ваше мнение по поводу правильности подхода

Заранее благодарен за любую помощь


 
Джо ©   (2006-07-13 16:33) [1]

А не лучше ли здесь создать свой класс, в который агрегировать два класса TStringList и TList (для хранения TAccessTypes)?


 
Джо ©   (2006-07-13 16:34) [2]

после слова "два класса" — двоеточие.


 
alsov ©   (2006-07-13 16:36) [3]

А в TList множества хранить можно?


 
begin...end ©   (2006-07-13 16:39) [4]

> alsov ©   (13.07.06 16:27) [0]

> Простым приобразованием типов делфя не хочет запихивать
> множество - ругается

Значит, придётся использовать непростое приведение:

FList.AddObject("TEST", TObject(Byte(AccessTypes)))
> Всегда ли такой вариант отработает на ура?
Лично я так вот сразу проблем не вижу. Множество, базовый тип которого имеет мощность 4, занимает в 1 байт. Поэтому в 4 байта (TObject) оно всяко поместится.


 
Джо ©   (2006-07-13 16:39) [5]

> [3] alsov ©   (13.07.06 16:36)
> А в TList множества хранить можно?

TList предназначен для хранения указателей. А указатель может быть на PAccessType = ^TAccessType ;)


 
alsov ©   (2006-07-13 16:52) [6]

begin...end

Спасибо - помогло.

Пробовал FList.AddObject("TEST", TObject(integer(AccessTypes))) - не получалось, а вот то что множество это байт - забыл (а моет и не знал :) )



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

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

Наверх




Память: 0.45 MB
Время: 0.01 c
2-1153293737
ms_odin
2006-07-19 11:22
2006.08.06
Настройка Delphi


1-1150381898
Desdechado
2006-06-15 18:31
2006.08.06
Caption в отчете FastReport 2.5


3-1148986218
Iehbr
2006-05-30 14:50
2006.08.06
Запрос на выборку из дву таблиц


2-1152523701
filh
2006-07-10 13:28
2006.08.06
Подмена инфы о системе


2-1152176819
Crazy monkey
2006-07-06 13:06
2006.08.06
Как перенести данные из одной таблицы в другую





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