Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 6
Всего онлайн: 6
Зарегистрировано юзеров: 7938
Комментариев на сайте: 698
Новый юзер: Henryfar



Последние комментарии
c
Dennisvoifs прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
Пункт коммерческого учета цена, Ктп комплектные трансформаторные подстанции москва, Производство ктп москва и не только Вы найдете на нашем специализированном сайте: - Вам к нам!https://sviloguzov.ru/
Arthurneime прокомментировал "Урок 53 - Потоки в Delphi, (часть 1/3)":
[img]https://masterfutures.ru/wp-content/uploads/2020/03/14-2.png[/img] Online trading is becoming increasingly popular, as more people learn of the earning potential of platforms such as Broker, a broker which caters to a significant audience of digital traders (12 million and counting). Known for their excellent user interface, as well as fast deposit and withdrawal times, Broker provides multiple features to help traders earn on the markets. This overview will outline just some of the key aspects traders can expect to enjoy whilst working with Broker broker. Online trading is becoming increasingly popular, as more people learn of the earning potential of platforms such as Broker, a broker which caters to a significant audience of digital traders (12 million and counting). Known for their excellent user interface, as well as fast deposit and withdrawal times, Broker provides multiple features to help traders earn on the markets. This overview will outline just some of the key aspects traders can expect to enjoy whilst working with Broker broker. Broker Broker is operated by a dedicated team, whose main priority has always been to provide the best possible user experience, and ultimately satisfaction. Whether experienced in trading or a newcomer, the platform is easy to use and very responsive. The education section deserves special mention, particularly for assisting traders to learn and implement new strategies – which can be tested on the platforms free demo Source: [url=https://bit.ly/35fv3B6/]Broker[/url] https://bit.ly/35fv3B6/ Tags: Broker

Автоматическое сохранение и восстановление свойств формы

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

Создание пустого компонента и пакета
Для начала сделаем "пустышку" для нашего компонента. Для этого вызываем File -> New -> Other:, в диалоге которого выбираем пиктограмму "Component". В появившемся окне заполняем свойства так, как показано на первом рисунке (пути указывайте удобные вам) и нажимаем кнопку "OK".

Теперь, сохраняйте файл компонента и закрывайте его.

Во-вторых, нам потребуется создать пустой пакет, где мы отныне будем размещать компоненты из "Маленьких хитростей". Делается это с помощью пункта меню, в диалоге которого теперь надо выбрать пиктограмму "Package". В окне редактора пакетов (ниже на рисунке) нажмите кнопку "Add" и добавьте недавно созданный файл компонента.

Для проверки нажмите кнопку "Compile", сохраните пакет и возвращайтесь к редактированию компонента, заново открыв его.

Немного проектирования
Следующим номером нашей обширнейшей программы будет вот что: мы определимся с тем, что, как и когда надо сохранять и восстанавливать.

Зная логику работы Delphi-программ, можно уверенно сказать, что сохранять значения следует в обработчике OnDestroy, а восстанавливать в обработчике OnCreate. При этом следует помнить, что во время редактирования формы в IDE ни сохранять, ни восстанавливать ничего не надо.

Оперировать мы будем следующими параметрами: физический размер формы, позиция формы и ее состояние. В этом нам помогут свойства компонента TForm, носящие имена Left, Top, Width, Height и WindowState.

Все параметры мы будем сохранять в ветке HKEY_CURRENT_USER системного реестра. Следовательно, потребуется настроечное свойство, отвечающее за имя ветви, куда сохраняются данные.

Реализация
Напомню, что хитрости маленькие, поэтому не ожидайте чего-то выдающегося. Все очень просто. В процедуре сохранения следует проверить корректность имени ключа реестра, куда будут записаны данные (я сделал минимальную) и, если все хорошо, записать данные. Реализовать это можно вот так:

procedure TgrFormPropSaver.SaveSettings;
var reg: TRegistry;
    frm: TForm;
begin
  if (RegPath = '') then exit;
  try
    reg := TRegistry.Create;
    with reg do
    begin
      RootKey := HKEY_CURRENT_USER;
      OpenKey(RegPath,true);
      frm := TForm(Owner);
      if (frm.WindowState = wsNormal) then
      begin
        WriteInteger('Left',frm.Left);
        WriteInteger('Width',frm.Width);
        WriteInteger('Top',frm.Top);
        WriteInteger('Height',frm.Height);
      end;
      case frm.WindowState of
        wsNormal: WriteInteger('State',1);
        wsMinimized: WriteInteger('State',2);
        wsMaximized: WriteInteger('State',3);
      end;
   end;
  finally
    FreeAndNil(reg);
  end;
end;
Здесь следует пояснить, что, во время состояний формы "максимизирована" и "минимизирована" значения свойств размера и позиции формы могут быть искажены, поэтому я отключил их запись в этих состояниях.

Процедура восстановления также проста, как и сохранения, поэтому я не буду про нее рассказывать.

Вызывать эти процедуры стоит из методов OnCreate и OnDestroy формы, на которой лежит компонент.

Полный текст модуля grFormPropSaver.pas
unit grFormPropSaver;

//**! ----------------------------------------------------------
//**! This unit is a part of Gregor.RU pack project (Gregor.RU
//**! Delphi Components Package).
//**! ----------------------------------------------------------
//**! You may use or redistribute this unit for your purposes
//**! while unit's code and this copyright notice is unchanged
//**! and exists.
//**! ----------------------------------------------------------
//**! URL:  http://www.gregor.ru/
//**! Mail: gregor@gregor.ru
//**! ----------------------------------------------------------
//**! (c) Gregor.RU, 2002. All rights reserved.
//**! ----------------------------------------------------------

{***} interface {***}

uses
  Classes;

type
  TgrFormPropSaver = class(TComponent)
  private
    { Private declarations }
    FRegPath: string;
  protected
    { Protected declarations }
  public
    { Public declarations }
    procedure SaveSettings;
    procedure LoadSettings;
  published
    { Published declarations }
    property RegPath: string read FRegPath write FRegPath;
  end;

procedure Register;

{***} implementation {***}

uses Windows, Forms, SysUtils, Registry;

procedure Register;
begin
  RegisterComponents('Gregor.RU', [TgrFormPropSaver]);
end;

{ TgrFormPropSaver }
procedure TgrFormPropSaver.LoadSettings;
var reg: TRegistry;
    frm: TForm;
begin
  if (csDesigning in ComponentState) or
     (RegPath = '') then exit;
  try
    reg := TRegistry.Create;
    with reg do
    begin
      RootKey := HKEY_CURRENT_USER;
      OpenKey(RegPath,true);
      frm := TForm(Owner);
      frm.Position := poDesigned;
      case ReadInteger('State') of
        1: frm.WindowState := wsNormal;
        2: frm.WindowState := wsMinimized;
        3: frm.WindowState := wsMaximized;
      end;
      frm.Width  := ReadInteger('Width');
      frm.Height := ReadInteger('Height');
      frm.Top    := ReadInteger('Top');
      frm.Left   := ReadInteger('Left');
   end;
  finally
    FreeAndNil(reg);
  end;
end;

procedure TgrFormPropSaver.SaveSettings;
var reg: TRegistry;
    frm: TForm;
begin
  if (csDesigning in ComponentState) or
     (RegPath = '') then exit;
  try
    reg := TRegistry.Create;
    with reg do
    begin
      RootKey := HKEY_CURRENT_USER;
      OpenKey(RegPath,true);
      frm := TForm(Owner);
      if (frm.WindowState = wsNormal) then
      begin
        WriteInteger('Left',frm.Left);
        WriteInteger('Width',frm.Width);
        WriteInteger('Top',frm.Top);
        WriteInteger('Height',frm.Height);
      end;
      case frm.WindowState of
        wsNormal: WriteInteger('State',1);
        wsMinimized: WriteInteger('State',2);
        wsMaximized: WriteInteger('State',3);
      end;
   end;
  finally
    FreeAndNil(reg);
  end;
end;

end.

Также замечу, что я не ставил перед собой задачи сделать абсолютно устойчивый и правильный модуль, а хотел показать способ, полнейшая реализация которого его в рамки "маленьких хитростей" не вписывается.

Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 26 Апреля 2015
Просмотров:


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.