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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2020, 19:25   #1
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию Delphi - Передача параметров от наследуемой к Родительской форме

Всем доброго здоровья.

Помогите разобраться с передачей переменных от Наследуемых форм в Родительские (если я правильно называю вещи).
Есть форма - она является начальным шаблоном для создаваемых fsMDIChild
Код:
unit child;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.ImageList, Vcl.ImgList,
  acAlphaImageList, Vcl.StdCtrls, sButton, Vcl.ExtCtrls, sPanel;

type
  TFChild = class(TForm)
    sPanel2: TsPanel;
    sClose: TsButton;
    sUpdate: TsButton;
    sEdit: TsButton;
    sDel: TsButton;
    sNew: TsButton;
    sCopy: TsButton;
    sSave: TsButton;
    sAlphaImage_toolbar: TsAlphaImageList;
    procedure sCloseClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FChild: TFChild;

implementation

uses main;

{$R *.dfm}

procedure TFChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  FChild := nil;
end;

procedure TFChild.sCloseClick(Sender: TObject);
begin
  Close;
end;

end.
На "шаблоне" есть кнопка с кодом
Код:
procedure TFChild.FormClose
- который закрывает mdi форму правильно

К примеру я создаю новую форму unit1.pas
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, child;

type
  TForm1 = class(TFChild)

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

end.
В новой форме в Embarcadero нет ничего, пусто. Но в скомпилированной програмем там есть необходимая мне панель... с нужными кнопками, в частности кнопка "Закрыть форму" - и отрабатывает код
Код:
procedure TFChild.FormClose
. Но этот код не этой формы. И повторное открытие формы уже будет с ошибкой....
Так вот вопрос: Что именно нужно писать в коде Родительской формы, чтобы код отработал так, как будто это запрос от дочерней формы? FChild := nil; - чтобы тут было как будто Sender чтоли? Я не понимаю что тут нужно указывать!
Код:
procedure TFChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  FChild := nil;
end;
iskurt вне форума Ответить с цитированием
Старый 26.10.2020, 10:47   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
procedure TFChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  FChild := nil;
end;
в методах НЕ надо использовать ГЛОБАЛЬНЫЕ переменные
FChild := nil;
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 26.10.2020, 14:21   #3
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
в методах НЕ надо использовать ГЛОБАЛЬНЫЕ переменные
FChild := nil;
Подскажите, как правильно организовать это?
iskurt вне форума Ответить с цитированием
Старый 26.10.2020, 18:15   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

что организовать?

для того что бы код формы работал со множеством разных форм (наследников и не только) он ни в коем случае не должен использовать никакие внешние данные (глобальные переменные) напрямую.

чтобы мочь использовать внешние данные их надо извне сохранять в разных специально объявленных внутренних переменных (полях).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 26.10.2020, 18:18   #5
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

Я примерно так и догадывался, по-этому красным и обвел.
Если не сложно, на моём примере привести пример. Если сложно, то тему можно закрывать, буду курить мануалы ))) Видимо не докурил где-то. Сорри
iskurt вне форума Ответить с цитированием
Старый 26.10.2020, 21:10   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Если не сложно, на моём примере привести пример.
пример чего?

то что надо было исправить в коде, уже указано.

а для чего использовалась эта "ненужная" переменная, в коде нет(и скорей всего и не было).
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести координаты курсора на родительской форме SKyzZz C# (си шарп) 2 16.09.2012 19:46
Delphi. Передача параметров в процедуру *stRong* Помощь студентам 1 30.05.2012 19:15
AlphaBlend на родительской форме xrob Компоненты Delphi 13 22.03.2012 22:24
[Delphi] Передача параметров процедуре Язь Помощь студентам 0 09.12.2011 17:38
Передача параметров форме panda88 PHP 4 26.07.2010 11:18