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

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

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

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

Сообщение Alex2013 » 07.01.2024 23:36:32

Интересно надежно ли формы при наследовании подхватывают ресурсы из описания в 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:
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

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

Сообщение ogorodov » 09.01.2024 10:57:18

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

С событиями все просто ... если нету inherited выполняется код только дочерней формы ... если есть то обеих форм.
Код: Выделить всё
procedure TfrmChild.GroupBoxParentClick(Sender: TObject);
begin
  inherited;
  ShowMessage('GroupBoxParentClickChild');
end;

Все ресурсы на дочерних формах можно перезалить.
Писал в багтрекер Lazarus реакции никакой :cry: (пока непонятно это игнор или просто времени не хватает а может уже есть решение просто я не знаю)
Так что кто хочет воспользоваться вариантом наследования форм имейте в ввиду. Пример прилагаю ...
InteridedForms.zip
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось ogorodov 09.01.2024 15:21:30, всего редактировалось 2 раз(а).
ogorodov
новенький
 
Сообщения: 37
Зарегистрирован: 22.10.2009 11:32:07

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

Сообщение sts » 09.01.2024 14:14:10

в dfmе для этого есть специальный костыль, странно почему в лазарусе не сделано.
в текстовом виде выглядит так:
Код: Выделить всё
object Label1: TLabel [1]

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

Добавлено спустя 13 минут 37 секунд:
кстати в /lazarus/examples/translation/*.lfm
такое наблюдается
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

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

Сообщение Alex2013 » 09.01.2024 17:28:17

В общем вот пример (Заготовка под очередной рефакторинг онлайн кинотеатра "Лесхоз" из которой выкинул все лишнее ) .
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-файле именно как "форма с ресурсами" .
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 122

Рейтинг@Mail.ru
cron