Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите новичку.Нужно закрыть дочерную форму....... / 18 сообщений из 18, страница 1 из 1
02.04.2003, 10:24
    #32131546
Megazoid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
У меня MDI приложение . По событию создается дочерная форма типа TChild_1,
по другому событию создается форма типа TChild_2 и тд.

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

Заранее благодарен !
...
Рейтинг: 0 / 0
02.04.2003, 10:31
    #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
02.04.2003, 10:46
    #32131569
Megazoid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
Большое спасибо !
...
Рейтинг: 0 / 0
03.04.2003, 10:16
    #32132371
Megazoid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
Уважаемый pkarklin , прости меня за то что опять отрываю тебя ,но 1-й ответ я схавал (спасибо),а со вторым не могу разобратся , кучу ошибок вываливает. Может маленький комментарий ???
Плиз!
...
Рейтинг: 0 / 0
03.04.2003, 10:22
    #32132377
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
>кучу ошибок вываливает

Ды тыб хоть что за ошибки написал. Вот их и попробую прокоментировать. :-)
...
Рейтинг: 0 / 0
03.04.2003, 10:34
    #32132394
LexusR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
Наверно
Код: plaintext
1.
   Undeclare identifier:'TfrmRequestJournal'  :))))))
...
Рейтинг: 0 / 0
03.04.2003, 10:42
    #32132404
Megazoid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
ну не надо так со мной ..... я хоть и не спец ,а функцию прописать смогу
...
Рейтинг: 0 / 0
03.04.2003, 10:43
    #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
03.04.2003, 10:47
    #32132419
Megazoid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
Function needs result type
...
Рейтинг: 0 / 0
03.04.2003, 10:58
    #32132433
LexusR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
>>ну не надо так со мной ..... я хоть и не спец ,а функцию прописать смогу
в декларации забыл результат написать для функции
function MyFunction(Param : ParamType) : ResultType
...
Рейтинг: 0 / 0
03.04.2003, 11:16
    #32132466
Megazoid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
function ActivateMDIClass(MDIClass : TMDIClass) : TForm;
Код: plaintext
Undeclared indentifier:'TMDIClass'
...
Рейтинг: 0 / 0
03.04.2003, 11:49
    #32132502
LexusR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
значит я угадал насчет ошибки )))))
в самый верхний USES воткни имя модуля где описана форма TMDIClass
...
Рейтинг: 0 / 0
03.04.2003, 11:55
    #32132511
pkarklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите новичку.Нужно закрыть дочерную форму.......
2 LexusR

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

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

uses
Windows, Messages ...;

type
TMDIClass = class of TForm;

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

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

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

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


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