powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите новичку.Нужно закрыть дочерную форму.......
18 сообщений из 18, страница 1 из 1
Помогите новичку.Нужно закрыть дочерную форму.......
    #32131546
Фотография Megazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня MDI приложение . По событию создается дочерная форма типа TChild_1,
по другому событию создается форма типа TChild_2 и тд.

Вопрос
1) Как закрыть дочерную форму а не свернуть ( Destroy ?А как узнать имя нужной формы ?).
2) Как запретить создаваться форме пока существуеть хотябы один ее екземпляр !

Заранее благодарен !
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32131553
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.

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


2.
Код: 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.
//проверка существования
function TfrmMDI.CheckJournal(const NeedCreate: boolean): TfrmRequestJournal;
var
  Counter: integer;
  Exists: boolean;
begin
  Exists := False;
  Result := nil;
  for Counter :=  0  to MDIChildCount -  1  do begin
    if MDIChildren[Counter] is TfrmRequestJournal then begin
      Exists := True;
      Result := MDIChildren[Counter] as TfrmRequestJournal;
      Break;
    end;
  end;
  if (not Exists) and NeedCreate then
    Result := TfrmRequestJournal.Create(Self);
end;

//создание

procedure TfrmMDI.acDocJournalExecute(Sender: TObject);
var
  Journal: TfrmRequestJournal;
begin
    Journal := CheckJournal(ccNeedTrue);
    Journal.Init;
end;
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32131569
Фотография Megazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо !
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132371
Фотография Megazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый pkarklin , прости меня за то что опять отрываю тебя ,но 1-й ответ я схавал (спасибо),а со вторым не могу разобратся , кучу ошибок вываливает. Может маленький комментарий ???
Плиз!
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132377
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>кучу ошибок вываливает

Ды тыб хоть что за ошибки написал. Вот их и попробую прокоментировать. :-)
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132394
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно
Код: plaintext
1.
   Undeclare identifier:'TfrmRequestJournal'  :))))))
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132404
Фотография Megazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну не надо так со мной ..... я хоть и не спец ,а функцию прописать смогу
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132408
mitritch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
public
function FormExist (FormCaption : string): boolean;
function ActivateMDIClass(MDIClass : TMDIClass) : TForm;
function GetMDIClassIndex(MDIClass : TMDIClass) : Integer;
function MDIClassIsActive(MDIClass : TMDIClass) : Boolean;

-------------------------------

//##########################################################
function TMainForm.FormExist(FormCaption : string): boolean;
var
i : integer;
begin
if MainForm.MDIChildCount <> 0 then
For i := 0 to MainForm.MDIChildCount - 1 do
begin
if MainForm.MDIChildren .Caption = FormCaption then begin
Result := True;
Break;
end
else Result := False;
end
else Result := False;
end;

function TMainForm.ActivateMDIClass(MDIClass: TMDIClass): TForm;
var
i : Integer;
begin
i := GetMDIClassIndex(MDIClass);
if i = -1 then Result := MDIClass.Create(Application)
else Result := MDIChildren;
Result.Show;
Result.BringToFront;
end;

function TMainForm.GetMDIClassIndex(MDIClass: TMDIClass): Integer;
var
i : Integer;
begin
Result := -1;
for i := 0 to MDIChildCount-1 do
if MDIChildren.ClassType = MDIClass then Result:=i;
end;

function TMainForm.MDIClassIsActive(MDIClass: TMDIClass): Boolean;
begin
Result := GetMDIClassIndex(MDIClass) <> -1;
end;
//////////////////////////////////////////////////////////////////

procedure TMainForm.ChildFormsClose;
var
i : integer;
begin
if TMainForm.MDIChildCount <> 0 then
For i := 0 to MainForm.MDIChildCount - 1 do MainForm.MDIChildren.Close;
end;

//############################################################################
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132419
Фотография Megazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Function needs result type
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132433
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>ну не надо так со мной ..... я хоть и не спец ,а функцию прописать смогу
в декларации забыл результат написать для функции
function MyFunction(Param : ParamType) : ResultType
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132466
Фотография Megazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
function ActivateMDIClass(MDIClass : TMDIClass) : TForm;
Код: plaintext
Undeclared indentifier:'TMDIClass'
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132502
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит я угадал насчет ошибки )))))
в самый верхний USES воткни имя модуля где описана форма TMDIClass
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132511
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 LexusR

TMDIClass у mitritch - это ссылка на класс. А вот как она объявлена, можно только догадаться. Наверняка у него есть базовая форма TfrmMDIChild и в ней есть объявление типа

Код: plaintext
TMDIClass = class of TfrmMDIChild
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132512
mitritch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл!!! Не обращай внимание на критику, я сам так начинал.

uses
Windows, Messages ...;

type
TMDIClass = class of TForm;

P/S: Хотя критика заставляет развиваться.
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132516
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот и mitritch. У него немного проще, чем я предполагал.
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132528
Фотография Megazoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за понимание mitritch .....
У меня просто больше не к кому обратится кроме как форум ......
Всегда профи в онлайне , а я только учусь .... вот и приходится вам надоедать , вы уж извените ....
А может через месяц другой и чем - нибудь помогу :-))))
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132531
mitritch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 pkarklin

Прошу прошения, но идея подсмотрена где то и когда то.
...
Рейтинг: 0 / 0
Помогите новичку.Нужно закрыть дочерную форму.......
    #32132537
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 mitritch

>Прошу прошения, но идея подсмотрена где то и когда то.

Да какое тут прощение, все мы где-то когда-то что-то подсмотрели. :-) А ссылками на класс сам всегда пользуюсь. Без них было бы очень жутко да и такой стройности в проекте не получалось, как например, создание базового журнала документа, который мог бы создавать заранее не известные формы документов. Тут только через ссылку на класс базового документа можно выкрутиться. Да как класно все получается. Вот за это я и люблю Delphi.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите новичку.Нужно закрыть дочерную форму.......
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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