|
Вопрос # 5 002/ вопрос открыт / |
|
Здравствуйте, эксперты!
Как можно создавать на форме компоненты, информация о которых указанна в файле к примеру из такой инфы
object Shape6: TShape
Left = 128
Top = 64
Width = 65
Height = 65
 |
Вопрос задал: Адмирал (статус: Посетитель)
Вопрос отправлен: 6 февраля 2011, 20:12
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: DNK
Здравствуйте, stason!
Баловался в свое время такой штукой. Файл немного надо поправить, ты end в конце забыл. Если нужны только шейпы, то примерно вот так:
const FILE_NAME = 'c.dfm';
procedure TForm1.Button1Click(Sender: TObject);
var FileStream: TFileStream;
BinStream: TMemoryStream;
Shape: TShape;
begin
Shape := TShape.Create(Self);
FileStream := TFileStream.Create(ExtractFilePath(Application.ExeName) + FILE_NAME, fmOpenRead);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(FileStream, BinStream); // Конвертация из текста в бинарный формат
BinStream.Seek(0, soFromBeginning);
BinStream.ReadComponent(Shape); // Читаем свойства объекта
finally
BinStream.Free;
end;
finally
FileStream.Free;
end;
Shape.Parent := Self;
end;
Если же класс объекта заранее неопределён, всё немного сложнее.
 |
Ответ отправил: DNK (статус: Студент)
Время отправки: 22 февраля 2011, 22:51
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 13 февраля 2011, 10:38; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 6 февраля 2011, 20:14 [#1]:
Ctrl + C, Ctrl + V.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Адмирал (статус: Посетитель), 6 февраля 2011, 20:16 [#2]:
а не всё я понял
|
|
min@y™ (статус: Доктор наук), 6 февраля 2011, 20:42 [#3]:
Цитата (Адмирал):
а не всё я понял
Опять тупишь, школота?
"Ctrl + C" - скопировать, "Ctrl + V" - вставить.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
DNK (статус: Студент), 7 февраля 2011, 09:31 [#4]:
Баловался в свое время такой штукой. Файл немного надо поправить, ты end в конце забыл. Если нужны только шейпы, то примерно вот так:
const FILE_NAME = 'c.dfm';
procedure TForm1.Button1Click(Sender: TObject);
var FileStream: TFileStream;
BinStream: TMemoryStream;
Shape: TShape;
begin
Shape := TShape.Create(Self);
FileStream := TFileStream.Create(ExtractFilePath(Application.ExeName) + FILE_NAME, fmOpenRead);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(FileStream, BinStream); // Конвертация из текста в бинарный формат
BinStream.Seek(0, soFromBeginning);
BinStream.ReadComponent(Shape); // Читаем свойства объекта
finally
BinStream.Free;
end;
finally
FileStream.Free;
end;
Shape.Parent := Self;
end;
Если же класс объекта заранее неопределён, всё немного сложнее.
"Digital Networked Knight"
|
|
Amidamaru (статус: 4-ый класс), 12 февраля 2011, 20:24 [#5]:
очень неплохой способ, но если вчитаться в описание метода ReadComponent, то можно создать таким способом любой компонент:
var FileStream: TFileStream;
BinStream: TMemoryStream;
NewCmp: TComponent;
begin
FileStream := TFileStream.Create({имя файла с текстом компонента}, fmShareDenyNone);
try
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(FileStream, BinStream); // Конвертация из текста в бинарный формат
BinStream.Seek(0, soFromBeginning);
NewCmp:=BinStream.ReadComponent(nil); // Будет создан компонент
// и все его дочерние компоненты с заданными свойствами (так написано в хелпе)
finally
BinStream.Free;
end;
finally
FileStream.Free;
end;
NewCmp.Parent := Self;
end;
|
|
DNK (статус: Студент), 13 февраля 2011, 10:38 [#6]:
Amidamaru: TComponent не имеет свойства Parent. В самом широком смысле слова "любой компонент" твой код использовать нельзя. Напоримся на EClassNotFound. Превоночально с помощью RegisterClass или RegisterClasses необходимо зарегистрировать классы, объекты которых предпологается загружать. Даные процедуры рекомендуются прописывать в секцию initialization. Хотя для тех классов, компоненты которых уже присутствуют на форме, это действие не обязательно.
"Digital Networked Knight"
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|