Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2009, 22:47   #1
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию WriteComponent и ReadComponent

Подскажите, пожалуйста. Вот так можно вывести свойство формы и объектов которые лежат на форме. Как можно по этим данным построить форму и объекты, которые на ней должны лежать?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var memsourcestream, memdeststream:TmemoryStream;
begin
memsourcestream:=Tmemorystream.Create;
try
  memdeststream:=Tmemorystream.Create;
    try
      memsourcestream.WriteComponent(Form1);
      memsourcestream.Seek(0, soFromBeginning);
      ObjectBinaryToText(memsourcestream, memdeststream);
      memdeststream.Seek(0, soFromBeginning);
      memo1.Lines.LoadFromStream(memdeststream);
     finally
      memdeststream.Free;
     end;
finally
memsourcestream.Free;
end;
end;
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 16.12.2009, 09:34   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

>>> . <<<
Код:
var
 ComponentIdx: integer;
  ms: TMemoryStream;
  fs: TFileStream;
begin
 for ComponentIdx := self.ComponentCount-1 downto 0 do
  self.Components[ComponentIdx].Free;
 try

  ms := TMemoryStream.Create;
  fs := TFileStream.Create('1.txt', fmOpenRead);
  try
    ObjectTextToBinary(fs, ms);
    ms.Seek(0, soFromBeginning);
    ms.ReadComponent(self);
  finally
    ms.Free;
    fs.free;
  end;

 except end;
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.12.2009, 15:44   #3
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

Как можно обращаться к компонентам если я создаю новую форму. я могу (вернее знаю как) обращаться к компонентам к последней созданной форме но как к предыдущим если формы я создаю так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 ComponentIdx: integer;
  ms: TMemoryStream;
  fs: TFileStream;
  f:tform;

begin
Application.CreateForm(TForm, F);


 for ComponentIdx := f.ComponentCount-1 downto 0 do
  f.Components[ComponentIdx].Free;
 try

  ms := TMemoryStream.Create;
  fs := TFileStream.Create('1.txt', fmOpenRead);

  try
    ObjectTextToBinary(fs, ms);
    ms.Seek(0, soFromBeginning);
    ms.ReadComponent(f);
  finally
    ms.Free;
    fs.free;
  end;

 except end;
 f.Show
end;
И если можно объясните почему не добавляются события вернее как их добавить
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 16.12.2009, 16:03   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
И если можно объясните почему не добавляются события вернее как их добавить
потому-что этот метод создает точную копию dfm файла, а это всего-лишь дизайн...

...вы по ссылке ходили, прочитали внимательно о чем там речь... может вам стоит подойти к вашей задаче с другой стороны, чем ваc не устраивает inifiles?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.12.2009, 16:28   #5
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

мне нужно создавать не определённое кол-во форм и в них компоненты. пусть все данные через ини фили но как мне можно обращаться к компонентам на формах да и к самим формам
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 16.12.2009, 17:34   #6
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

ага как к ним обращаться я понял вернусь тогда к предыдущему вопросу: если можно объясните почему не добавляются события. если я правильно понимаю то события не добавляются потому что создаваемый компонент их просто не находит если так то куда нужно прописать процедуру что он ее нашел
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 16.12.2009, 17:42   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

где вы в конструкторе события увидели? вот сохраненный <1.txt>
Цитата:
object Form2: TForm2
Left = 523
Top = 260
Width = 243
Height = 106
Caption = 'Form2'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object SpeedButton1: TSpeedButton
Left = 16
Top = 16
Width = 23
Height = 22
end
end
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.12.2009, 17:50   #8
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

если у кнопки есть событие то оно записывается OnClick = Button3Click если нет то нет
Код:
object Form1: TForm1
  Left = 262
  Top = 251
  Width = 1020
  Height = 464
  ActiveControl = Button3
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Visible = True
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  OnMouseUp = FormMouseUp
  PixelsPerInch = 96
  TextHeight = 13
  object Button3: TButton
    Left = 8
    Top = 320
    Width = 75
    Height = 25
    Caption = 'Button3'
    TabOrder = 0
    OnClick = Button3Click
  end
end
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]

Последний раз редактировалось Volt; 16.12.2009 в 17:57.
Volt вне форума Ответить с цитированием
Старый 16.12.2009, 17:53   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

омг... не сохранився.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 16.12.2009, 17:59   #10
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

я предполагаю что так но почему то не работает
Код:
type
  Tf1 = class(TForm)
  procedure a(Sender: TObject);
  private
    { Private declarations }
  public

    { Public declarations }
  end;

var
  Form1: TForm1;
  f:tf1;

implementation

{$R *.dfm}

procedure TF1.a(Sender: TObject);
begin
showmessage('îê');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 ComponentIdx: integer;
  ms: TMemoryStream;
  fs: TFileStream;
begin

Application.CreateForm(tform, f);

 for ComponentIdx := f.ComponentCount-1 downto 0 do
  f.Components[ComponentIdx].Free;
 try

  ms := TMemoryStream.Create;
  fs := TFileStream.Create('c:\1.txt', fmOpenRead);

  try
    ObjectTextToBinary(fs, ms);
    ms.Seek(0, soFromBeginning);
    ms.ReadComponent(f);
  finally
    ms.Free;
    fs.free;
  end;

 except end;
 f.Show;

end;
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WriteComponent\ReadComponent Airou Общие вопросы Delphi 2 03.05.2008 19:37