Наследование форм.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Наследование форм.

Сообщение Alex2013 »

Интересно надежно ли формы при наследовании подхватывают ресурсы из описания в LFM?
То есть я имею модуль с готовой формой (частично созданной визуально).

Код: Выделить всё

unit XForm;
type
TFormX = class(TForm)
  ...
 end;
implementation

{$R *.lfm}
...
и подключив его к другому модулю и пишу что-то вроде этого:

Код: Выделить всё

unit MFormUnit;
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,XForm;
type
  { TMForm }
  TMForm = class( TXForm )
   ...
  end;
...
implementation
{$R *.lfm}
end.
Честно говоря я думал что придется или дергать элементы из полностью проинициализированной, но скрытой формы TFormX или создавать её почти полностью "не визуально".
Но оказалось что все и так работает (То есть все что было в TFormX полностью перешло в TMForm + добавилось содержимое TMForm ) Единственная но легко решаемая проблема это использование переменной FormX в методах TFormX и "глобальных" функциях модуля XForm;.

Однако, все это хорошо но не вылезет ли этот фокус где-то боком? :idea:
ogorodov
новенький
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

Сообщение ogorodov »

Привет Однополчане.
По поводу форм наследования ... Еще в прошлом году наскочил на баг ... В дочерней форме нельзя родительский компонент поднять выше компонента из дочерней формы. (В Delphi XE2 все работает)
Screen002.png
С событиями все просто ... если нету inherited выполняется код только дочерней формы ... если есть то обеих форм.

Код: Выделить всё

procedure TfrmChild.GroupBoxParentClick(Sender: TObject);
begin
  inherited;
  ShowMessage('GroupBoxParentClickChild');
end; 
Все ресурсы на дочерних формах можно перезалить.
Писал в багтрекер Lazarus реакции никакой :cry: (пока непонятно это игнор или просто времени не хватает а может уже есть решение просто я не знаю)
Так что кто хочет воспользоваться вариантом наследования форм имейте в ввиду. Пример прилагаю ...
InteridedForms.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось ogorodov 09.01.2024 14:21:30, всего редактировалось 2 раза.
sts
энтузиаст
Сообщения: 519
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

в dfmе для этого есть специальный костыль, странно почему в лазарусе не сделано.
в текстовом виде выглядит так:

Код: Выделить всё

object Label1: TLabel [1] 
у унаследованного Label1 меняется порядок (с 0 на 1)

Добавлено спустя 13 минут 37 секунд:
кстати в /lazarus/examples/translation/*.lfm
такое наблюдается
Alex2013
долгожитель
Сообщения: 3211
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

В общем вот пример (Заготовка под очередной рефакторинг онлайн кинотеатра "Лесхоз" из которой выкинул все лишнее ) .
Rf2_0001.7z
(Обратите внимание на то что я закомментировал инициализацию формы TFormRollUp в LesxozRF2.lpr .)

Вроде работает (причем можно редактировать "наследуемые компоненты" в TMainForm через "инспектор объектов" )
Вообщем "неожиданно но приятно".( Однако, непонятен механизм этого фокуса так что "мучают меня смутные сомнения")

Добавлено спустя 7 минут 44 секунды:
Зы
Видимо дело в этом
LesxozRF2.lpi

Код: Выделить всё

  ...
    <Units Count="3">
      <Unit0>
        <Filename Value="LesxozRF2.lpr"/>
        <IsPartOfProject Value="True"/>
      </Unit0>
      <Unit1>
        <Filename Value="rollupform.pas"/>
        <IsPartOfProject Value="True"/>
        <ComponentName Value="FormRollUp"/>
        <HasResources Value="True"/>
        <ResourceBaseClass Value="Form"/>
        <UnitName Value="RollUpForm"/>
      </Unit1>
      <Unit2>
        <Filename Value="mainformunit.pas"/>
        <IsPartOfProject Value="True"/>
        <ComponentName Value="MainForm"/>
        <HasResources Value="True"/>
        <ResourceBaseClass Value="Form"/>
        <UnitName Value="MainFormUnit"/>
      </Unit2>
    </Units>
...
То есть просто подключить модуль с формой "для подхвата ресурсов" мало нужно что бы он был прописан в lpi-файле именно как "форма с ресурсами" .
Ответить