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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2010, 20:01   #1
edmynt
Пользователь
 
Аватар для edmynt
 
Регистрация: 03.06.2009
Сообщений: 83
Радость Файл типа TLabel (Delphi)

Вообще возмножно сохранять ряд компонентов в файл?
Написал прогу по нажатию кнопки, он вроде ето сохраняет в файл с расшинерием dat, а вот по нажатию другой кнопки, прочитать и вывисти на форму- ничего не получается. Подскажите в чем ошибка

Код:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus;

type
  TForm4 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;
  f:file of Tlabel;

implementation

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
  assignFile(f,'1.dat');
  Rewrite(f);
  write(f,Form4.Label1);
  Label1.Destroy;
end;

procedure TForm4.Button2Click(Sender: TObject);
begin
  assignFile(f,'1.dat');
  Reset(f);
  read(f,Form4.Label1);
  label1.Create(TLabel);
  closeFile(f);
end;

end.
edmynt вне форума Ответить с цитированием
Старый 11.02.2010, 20:16   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

а зачем так сохраняешь?
Проще писать в ини-файлы или xml
заголовок - тип компонента, далее в тегах - положение, размер и др нужные данные
твой пример - неправильное исполнение
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 11.02.2010, 21:40   #3
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

2RUSt88 Подход кстати правильный. Почему? Да, потому что быстрей)) А если объектов много (все прога например загружается из файла), от представьте сколько времени уйдет не ее воспроизведение из ини...
2edmynt Имя объекта - ссылка на объект, поэтому что бы сохранить его (объект), нужно немного по другому сохранять и загружать.
Как попробую отпишусь.
psycho-coder вне форума Ответить с цитированием
Старый 11.02.2010, 21:57   #4
edmynt
Пользователь
 
Аватар для edmynt
 
Регистрация: 03.06.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от RUSt88 Посмотреть сообщение
а зачем так сохраняешь?
Проще писать в ини-файлы или xml
заголовок - тип компонента, далее в тегах - положение, размер и др нужные данные
твой пример - неправильное исполнение
Это просто тип тренеровки, изночально я задумал кадировать информации в файлы, чтобы не была доступно посторонним лицам. к примеру как структурированный файл с паролями от браузера.
Мож и вправду немного не правильный подход, но мне понравился этот способ-сохранять объекты в файл
edmynt вне форума Ответить с цитированием
Старый 11.02.2010, 22:19   #5
fikret123
Пользователь
 
Регистрация: 16.03.2008
Сообщений: 26
По умолчанию

ты записываешь в файл и не закрываешь его. Мож поэтому
fikret123 вне форума Ответить с цитированием
Старый 11.02.2010, 22:34   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

fikret123, нет, ошибка не в этом!
правильный ответ дан выше!
Как асболютно верно сказал psycho-coder в пост #3:
Вы сохраняете не объект, а ссылку (адрес) объекта. (обратите на размер создаваемого файла!) Ссылка показывает на текущее размещение объекта в памяти (на определённую структуру). При загрузке из файла, по считанному адресу окажется оказаться всё что угодно - грубо говоря, МУСОР! сохранять объект в файле надо СОВСЕМ по другому. Кстати, есть готовые компоненты, которые могут помочь Вам это сделать.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.02.2010, 22:35   #7
edmynt
Пользователь
 
Аватар для edmynt
 
Регистрация: 03.06.2009
Сообщений: 83
По умолчанию

Да нет, не помогает
edmynt вне форума Ответить с цитированием
Старый 11.02.2010, 22:36   #8
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

psycho-coder почему быстрее?
смотрим сколько строк занимает объект типа label
Код:
    object Label1: TLabel
      Left = 10
      Top = 20
      Width = 28
      Height = 11
      Caption = #1048#1084#1103':'
      Font.Charset = RUSSIAN_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Lucida Console'
      Font.Style = []
      ParentFont = False
    end
оно нам нужно столько лишней информации? а чтение из файла происходит построчно. Вопрос: быстрее считать необходимых 5 строк или 12 строк? а если объектов много?, то пропорционально и многократно увеличивается объём считываемой информации, как же это будет быстрее?
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]

Последний раз редактировалось RUSt88; 11.02.2010 в 22:43.
RUSt88 вне форума Ответить с цитированием
Старый 11.02.2010, 22:38   #9
edmynt
Пользователь
 
Аватар для edmynt
 
Регистрация: 03.06.2009
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
fikret123, Кстати, есть готовые компоненты, которые могут помочь Вам это сделать.
А что за компонент????

ЗЫ ушел спать..завтра прочитаю ответы
edmynt вне форума Ответить с цитированием
Старый 11.02.2010, 23:39   #10
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от RUSt88 Посмотреть сообщение
psycho-coder почему быстрее?
смотрим сколько строк занимает объект типа label
Код:
    object Label1: TLabel
      Left = 10
      Top = 20
      Width = 28
      Height = 11
      Caption = #1048#1084#1103':'
      Font.Charset = RUSSIAN_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Lucida Console'
      Font.Style = []
      ParentFont = False
    end
оно нам нужно столько лишней информации? а чтение из файла происходит построчно. Вопрос: быстрее считать необходимых 5 строк или 12 строк? а если объектов много?, то пропорционально и многократно увеличивается объём считываемой информации, как же это будет быстрее?
Количество строк TLabel, занимает гоораздо больше))

А вот так (пример).
Код:
type
  TLabel = record { пусть будет Label }
  name: String;
  left: Integer;
  ...
  end;

var
  Label1: TLabel;
  f: file of TLabel;
begin
  { Инициализация Label1 }
  Assign(f, 'file.dat');
  Reset(f);
  Write(f, Label1); // Тут записывается одним блоком, память в файл, с размером структуры(класса)
...
  Read(f, Label); // Тут считывается в память структура (класс) с размером структуры(класса).
  Close(f);
end;
А Ваш вариант будет построчно проходить по файлу, парсить его, создавать объект, и т.д.
А мой вариант, просто загрузит объект, со всеми параметрами (положение, текст, методы и свойства и т.д.)

P.S. мой код для наглядности.
psycho-coder вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
файл типа string whatever Помощь студентам 12 16.12.2009 16:23
Запись числа типа инт в ячейку двумерного массива типа char AxenicX Помощь студентам 1 25.09.2009 00:35
Запись структуры TList в файл, проблема с длинными строками типа AnsiString Xardas Общие вопросы Delphi 2 24.05.2009 20:18
Нужен вывод сообщения на экран: ну типа создать файл? Максим-2 Общие вопросы Delphi 7 28.07.2007 14:45