Форум: "Основная";
Текущий архив: 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