powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как написать общую для всех форм процедуру закрытия формы?
15 сообщений из 40, страница 2 из 2
Как написать общую для всех форм процедуру закрытия формы?
    #32357655
Hel975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня Дельфи 5. Мож поэтому?
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357669
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот тестовые формы
проверь у себя соответствие взаимосвязи форм и uses-ы
главная
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ActnList, Menus,ExtCtrls;
type
  TForm1 = class(TForm)
    ActionList1: TActionList;
    Button1: TButton;
    acCloseForm: TAction;
    procedure Button1Click(Sender: TObject);
    procedure acCloseFormExecute(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation

uses Unit2, Unit3;

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(self) do
   begin
     Show;
   end;
end;
procedure TForm1.acCloseFormExecute(Sender: TObject);
begin
  acCloseForm.ac
  TForm(TPanel(TButton(TAction(sender).ActionComponent).Parent).Parent).Close;
end;
end.

дочерняя
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
unit Unit2;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Buttons;
type
  TForm2 = class(TForm)
    Panel1: TPanel;
    SpeedButton1: TSpeedButton;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form2: TForm2;
implementation

uses Unit1;

{$R *.dfm}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;
end.
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357674
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
соответственно

SpeedButton1.Action := Form1.acCloseForm
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357678
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотри в Helpe
может правда у Delphi5 нет e TAction свойства ActionComponent
или оно по другому называется
или есть что-нить в этом же роде
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357684
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или попробуй к нему обратиться через базовый компонент типа
Код: plaintext
1.
2.
3.
4.
procedure TForm1.acCloseFormExecute(Sender: TObject);
begin
  TForm(TPanel(TButton(TBasicAction(sender).ActionComponent).Parent).Parent).Close;
end;
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357688
Hel975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 5-м нет, в 7-м есть. Сейчас попробую
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357695
Hel975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь выдает ошибку - Access violation at ...
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357702
Hel975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через базовый тоже выдает Access violation. Ладно следаем по-тупому. Скопирую ваш код.
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357720
Hel975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш пример пошел. Буду разбираться со своим проектом. Спасибо.
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357757
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть еще вариант -
у кнопок в дочерних формах не выставлять свойство Action
а Action вызывать на OnClick
при этом передавая в Action идентификатор формы типа так
Код: plaintext
1.
2.
3.
4.
5.
procedure TForm2.SpeedButton1Click(Sender: TObject);
begin
  Form1.acCloseForm.Tag := Integer(Pointer(Self));
  Form1.acCloseForm.Execute;
end;

такой обработчик во всех дочерних формах одинаковый
а в главной закрываешь форму по переданному идентификатору
Код: plaintext
1.
2.
3.
4.
procedure TForm1.acCloseFormExecute(Sender: TObject);
begin
  TForm(Pointer(TComponent(sender).Tag)).Close;
end;
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357789
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
procedure TForm1.acCloseFormExecute(Sender: TObject);
begin
  TForm(TComponent(sender).Tag).Close;
end;
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357801
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ создаю actionlist, расположил его в главной форме и хочу, что во всех дочерних формочках по нажатию кнопочки Close, вызывался этот action. Так вот мне нужно написать процедуру для этого action. У меня MDI приложение.

Я вот как я делаю. На главной MDI форме есть акшен acClose, к которой привязан пункт меню и кнопка на тулбаре. В обработчике OnUpdate написано:

Код: plaintext
1.
2.
3.
procedure TfrmMDI.acCloseUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled := (ActiveMDIChild <> nil);
end;


Дабы действие было доступно, когда открыта хотя бы одна дочерняя форма.

А в обработчике OnExecute:

Код: plaintext
1.
2.
3.
procedure TfrmMDI.acCloseExecute(Sender: TObject);
begin
  ActiveMDIChild.Close;
end;


Чтоб все формы уничтожались при закрытии все дочернии я наследую от базовой TfrmBaseMDIChild. В обработчике OnClose которой написано:

Код: plaintext
1.
2.
3.
procedure TfrmBaseMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;


Все, что касается acClose тянеться еще с 4 Delphi. В 7 есть стандартный акшен TWindowClose, который делает тоже самое, но без написания обработчиков.
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357807
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а Sendmessage ???
____
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357862
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 JibSkeart

автора Sendmessage ???

Всмысле послать сообщение текущей активной дочерней форме?! :-) Нет, теоретически и так можно. Но, IMHO, мой вариант проще.
...
Рейтинг: 0 / 0
Как написать общую для всех форм процедуру закрытия формы?
    #32357892
Hel975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 LexusR второй вариант не катит, я пытаюсь не писать лишнего кода.

2 pkarklin
И изящно, и просто.
ч.т.д
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как написать общую для всех форм процедуру закрытия формы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]