Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не изменяется размер наследуемой формы 
V
    Опции темы
TechnoMag
Дата 2.12.2014, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



При выходе из программы сохраняются актуальные размеры и позиция формы.
При входе, эти данные читаются, но только форма TMainForm не изменяет свои размеры.

Код

TMyCustomForm = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    FWindowMaximized: boolean;
    FWindowTop: integer;
    FWindowLeft: integer;
    FWindowWidth: integer;
    FWindowHeight: integer;
    procedure SetWindowPosition;
    procedure Load;
    procedure Save;
  public
    { Public declarations }
     procedure DoCreate; override;
    property WindowTop: integer read FWindowTop write FWindowTop;
    property WindowLeft: integer read FWindowLeft write FWindowLeft;
    property WindowWidth: integer read FWindowWidth write FWindowWidth;
    property WindowHeight: integer read FWindowHeight write FWindowHeight;
    property WindowMaximized: boolean read FWindowMaximized write FWindowMaximized;
  end;

//var
//  MyCustomForm: TMyCustomForm;

implementation

{$R *.dfm}

procedure TMyCustomForm.FormCreate(Sender: TObject);
begin
  inherited;
  Load;
  if WindowMaximized then
    self.WindowState := wsMaximized
  else
    SetWindowPosition;
end;

procedure TMyCustomForm.FormDestroy(Sender: TObject);
begin
  Save;
  inherited;
end;

procedure TMyCustomForm.Load;
var
  Config: TMemIniFile;
begin
  Config := TMemIniFile.Create(ExtractFilePath(ParamStr(0)) + '\config.ini');
  try
    WindowMaximized := Config.ReadBool(self.ClassName, 'Maximized', false);
    WindowTop := Config.ReadInteger(self.ClassName, 'Top', 10);
    WindowLeft := Config.ReadInteger(self.ClassName, 'Left', 10);
    WindowWidth := Config.ReadInteger(self.ClassName, 'Width', 1024);
    WindowHeight := Config.ReadInteger(self.ClassName, 'Height', 768);
  finally
    Config.Free;
  end;
end;

procedure TMyCustomForm.DoCreate;
begin
  inherited;
end;

procedure TMyCustomForm.Save;
var
  Config: TMemIniFile;
begin
  Config := TMemIniFile.Create(ExtractFilePath(ParamStr(0)) + '\config.ini');
  try
    Config.WriteBool(self.ClassName, 'Maximized', WindowMaximized);
    Config.WriteInteger(self.ClassName, 'Top', Top);
    Config.WriteInteger(self.ClassName, 'Left', Left);
    Config.WriteInteger(self.ClassName, 'Width', Width);
    Config.WriteInteger(self.ClassName, 'Height', Height);
    Config.UpdateFile;
  finally
    Config.Free;
  end;
end;

procedure TMyCustomForm.SetWindowPosition;
begin
  Top := WindowTop;
  Left := WindowLeft;
  Width := WindowWidth;
  Height := WindowHeight;
end;

end.


TMainForm = class(TMyCustomForm)
// ....
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  inherited;
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  inherited;
end;

PM MAIL ICQ   Вверх
Poseidon
Дата 3.12.2014, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Файл смотрел? Все туда нормально сохранилось? FormCreate срабатывает при запуске? В Load считывание нормально происходит? Тут под отладкой надо смотреть что не так делается. Скинь проектом. На первый взгляд вроди все нормально должно быть.


Это сообщение отредактировал(а) Poseidon - 3.12.2014, 09:31


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
TechnoMag
Дата 3.12.2014, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



Все смотрел,  сохранение происходит нормально, FormCreate отрабатывает, Load считывает. При присвоении считанных с файла размеров ничего не происходит.

Это сообщение отредактировал(а) TechnoMag - 3.12.2014, 10:17
PM MAIL ICQ   Вверх
БелАмор
Дата 3.12.2014, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



Вчера вечером сделал по вашему коду тестовый проект.
Всё нормально работает.
Насколько я понимаю, проблема в назначении событий.
Выложите здесь dfm на обе формы.

А вообще, события, назначаемые в инспекторе, лучше не использовать в формах-предках, поскольку на всю цепочку наследников хранится только один указатель на процедуру-обработчик, кроме того, есть ещё куча всяких нюансов.
В вашем случае лучше использовать конструкторы и деструкторы вместо FormCreate и FormDestroy.
Но это потом, сначала надо разобраться с текущим кодом.

Update
Конечно-же, не pdf, а dfm.
Исправил.

Это сообщение отредактировал(а) БелАмор - 3.12.2014, 12:22
PM   Вверх
БелАмор
Дата 3.12.2014, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 10.6.2010
Где: Россия

Репутация: 7
Всего: 17



PM   Вверх
TechnoMag
Дата 3.12.2014, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.3.2010

Репутация: нет
Всего: нет



Спасибо. Проблема действительно крылась в событиях, и в свойстве форм Position.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.