![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
всем привет.пишу лабораторную.примерный смысл таков:имеется две формы, одна создается в режиме Design-Time, другая в Run-Time.На той,что создается в дизайн тайм я размещаю несколько компонентов TShape. Их свойства нужно сохранить в Ini файл и создать такие же объекты на другой форме в Run-Time.проблема заключается в том,что никак не сохранить в ини файл свойство Shape, тк функции для записи в ини файл пишут только числа,даты,строки.решение же должно быть.подскажите пожалуйста,если знаете.
|
|
#2
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Shape1: TShape;
Shape2: TShape;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
resourcestream: TFileStream;
begin
resourcestream:=TFileStream.Create('c:\Downloads\Shape1.dfm', fmCreate);
try
resourcestream.WriteComponentRes('Shape1', Shape1);
resourcestream.WriteComponentRes('Shape2', Shape2);
finally
resourcestream.Free;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
aform: TForm;
resourcestream: TFileStream;
component: TShape;
begin
aform:=TForm.Create(Application);
aform.Width:=Width;
aform.Height:=Height;
aform.Show;
resourcestream:=TFileStream.Create('c:\Downloads\Shape1.dfm', fmOpenRead);
try
component:=TShape.Create(aform);
component.Parent:=aform;
resourcestream.ReadComponentRes(component);
component:=TShape.Create(aform);
component.Parent:=aform;
resourcestream.ReadComponentRes(component);
finally
resourcestream.Free;
end;
end;
end.Последний раз редактировалось NumLock, 06.01.2011 в 11:29. |
|
#3
|
|||
|
|||
|
спасибо.а можно это реализовать не используя потоки?
|
|
#4
|
||||
|
||||
|
можно. ну если умеешь через TIniFile писать/читать числа, то:
Код:
procedure ... var i: Integer; begin i:=Integer(Shape1.Shape); Shape2.Shape:=TShapeType(i); end; |
|
#5
|
|||
|
|||
спасибо большое.у меня все получилось=)выходит, имя класса выступает в роли своеобразного массива?попутно еще хотел бы спросить.а можно как то считать объекты,созданные в режиме design-time?то есть ,грубо говоря, нужно посчитать количество TShape,насаженных на формуПоследний раз редактировалось NKVD, 06.01.2011 в 14:15. |
|
#6
|
||||
|
||||
|
-это называется привидением типов
-чувствуешь разницу: TPen = class(TGraphicsObject) TBrush = class(TGraphicsObject) type TShapeType = (stRectangle, stSquare, stRoundRect, stRoundSquare, stEllipse, stCircle); ? ЗЫ. пока отвечал уже пост отредактировали. получилось не на то ответил ![]() Код:
var
i: Integer;
begin
for i:=0 to ComponentCount-1 do
if Components[i] is TShape then
begin
....
end;
end;Последний раз редактировалось NumLock, 06.01.2011 в 14:20. |