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

Вниз

А нет ли такой функции, чтобы преобрзовывать class в string ?   Найти похожие ветки 

 
Кен   (2003-05-23 03:25) [0]

Допустим есть класс :

TObjCube = class(TGLDummyCube)
public
CubeName : String;
MasterObjectNumber : Integer;
Xmin : Double;
Ymin : Double;
end;

Мне надо перевести его в строчку вида :
CubeName="Its Cube 12" Xmin=0.3 Ymin=1.4 MasterObjectNumber=7
Далее я эту строчку сохраняю в файл, а потом при загрузке программы восстанавливаю из неё всю информацию.

Так было бы очень удобно. Где бы взять такие функции ?

Или если их нет, то хотя бы как получить список всех свойств класса и их типы ?


 
Palladin   (2003-05-23 08:08) [1]


> Где бы взять такие функции ?

из головы


> как получить список всех свойств класса и их типы ?

можно только Published

заведи класс предок для всех твоих классов который будет содержать абстрактную функцию AsString и переопределяе ее в каждом классе наследнике...


 
Calm   (2003-05-23 08:29) [2]

см. ClassName, FindClass, RegisterClasses


 
Palladin   (2003-05-23 08:33) [3]


> Calm © (23.05.03 08:29)

и что?


 
Юрий Зотов   (2003-05-23 09:44) [4]

См. ObjectBinaryToText. Класс должен быть таким:

TObjCube = class(TGLDummyCube)
publi shed
property CubeName: String;
...
end;

Еще см. Read/WriteComponent(Res)(File)


 
Calm   (2003-05-23 10:18) [5]


> Palladin © (23.05.03 08:33)

Регистрируем свой класс с помощью RegisterClasses. Для этого наш класс должен быть потомком TPersistent.
Сохраняем в файл объекты и в частности имя класса объекта TObject.ClassName.
При закрузке из файла считываем имя класса и делаем FindClass. Получаем ссылку на класс и создаем такой объект.

Я не прав?


 
Palladin   (2003-05-23 11:06) [6]


> Calm © (23.05.03 10:18)

да прав, просто как сохраняем или как получаем строковое представление? у чела в этом то и вопрос был...


 
Кен   (2003-05-24 04:07) [7]

Calm ©
> см. ClassName, FindClass, RegisterClasses
Смотрел. Но там нет примеров. И там вроде не об этом.
Упростим задачу. Есть две строки :
s1 := "caption";
s2 := "hi world !";


Как выглядел бы код аналогичный :
Form1.caption := "hi world !";

Так неработает :
Form1.s1 := s2;

А как надо ?



Юрий Зотов ©

> TObjCube = class(TGLDummyCube)
> published
> property CubeName: String;
> ...
> end;

Ругается на строчку property CubeName: String;
Пишет [Error] Unit1.pas(59): INDEX, READ or WRITE clause expected, but ";" found

> См. ObjectBinaryToText.
В принципе полезная штука. Но она целиком весь компонент переводит в строки и обратно. А хотелось бы только отдельные свойства. Ну, например, сохранять и восстанавливать только Color.

Можно конечно извернуться и вырезать из строк лишнее, а потом при восстановлении сначала переводить в текст исходный компонент, менять в тексте Color и восстанавливать компонент обратно. Но как-то это по-левому.


 
Calm   (2003-05-24 12:37) [8]



> Calm ©
> > см. ClassName, FindClass, RegisterClasses
> Смотрел. Но там нет примеров. И там вроде не об этом.

Сорри, не совсем внимательно прочитал вопрос.


> > TObjCube = class(TGLDummyCube)
> > published
> > property CubeName: String;
> > ...
> > end;
>
> Ругается на строчку property CubeName: String;
> Пишет [Error] Unit1.pas(59): INDEX, READ or WRITE clause
> expected, but ";" found


2 Кен © (24.05.03 04:07)
Евозникают проблемы подобного рода, то нужно почитать какую-нибудь книгу по основам Delphi.


 
Кен   (2003-05-25 01:37) [9]

Calm ©
> Евозникают проблемы подобного рода, то нужно почитать какую-нибудь
> книгу по основам Delphi.

Это универсальный ответ на все вопросы этого форума. Причём его может давать даже полный идиот.


 
Palladin   (2003-05-25 01:43) [10]


> Кен © (25.05.03 01:37)

какой вопрос, такой ответ


 
k-man   (2003-05-25 11:15) [11]


> Ругается на строчку property CubeName: String;
> Пишет [Error] Unit1.pas(59): INDEX, READ or WRITE clause
> expected, but ";" found

Свойства реализуют механизм доступа к полям.
Обычно делают так создают поле в секции private с префиксом F(Field).
А потом создают общедоступное свойство(public или published)
посредством которого можно обратиться к полю.
В данном случае твой код логичнее сделать так

TObjCube = class(TGLDummyCube)
private:
FCubeName : string;
...
public
property CubeName: String read FCubeName write FCubeName;
...
end;

Хотя, Вполне возможно, что я ошибаюсь.
А насчет записи полей в файл:
Может я чего недопонял, но я бы просто в секции ини файла писал
а потом из них же и восстанавливал.



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

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

Наверх





Память: 0.47 MB
Время: 0.007 c
14-13476
iFot
2003-05-20 17:48
2003.06.05
ini Доки


14-13470
GigoVich
2003-05-03 20:39
2003.06.05
Карточная Игра - Реально то что возможно...


1-13190
Quasar
2003-05-25 01:31
2003.06.05
Вставка символов в позиции курсора в RichEdit


7-13486
ws
2003-04-03 16:19
2003.06.05
Как программно отличить виртуальный CDROM от реального?


3-13092
Patrick
2003-05-19 09:23
2003.06.05
Сброс параметра автоувеличения значения поля.





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