Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.05;
Скачать: CL | DM;

Вниз

А нет ли такой функции, чтобы преобрзовывать 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
3-13014
lightix
2003-05-15 16:35
2003.06.05
программно выставить значение DBLookupComboBox...


1-13208
Программер
2003-05-26 14:37
2003.06.05
Как сделать Fullscreen


4-13509
alex134
2003-04-05 18:13
2003.06.05
GetProcessHeaps


14-13455
Renegate
2003-05-20 09:02
2003.06.05
Отстойная винда...


3-13101
Алекс
2003-05-19 11:07
2003.06.05
Простой SQL запрос