Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как спрятать MDIChild [D7, WinXP]


Alien_D ©   (2004-12-17 10:56:00) 

Народ, подскажите, как спрятать MDIChild...
Чтоб его небыло видно на главной форме...
Возможно вообще такое???


asvt   (2004-12-17 19:12:00) [1]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)//MDI- форма
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation
uses unit2;
{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
// Если не создана то создается
if not Assigned(Form2) then Form2:= TForm2.Create(Application);

Form2.FormStyle:=fsMDIChild;
Show;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Caption:= 'Show';
end;

end.

___________________________________________________________

unit Unit2;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm2 = class(TForm)// child forma
   Button1: TButton;
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
Form2:= nil;// не забудь занилить
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
FormStyle:=fsNormal;
Hide;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
Button1.Caption:='Hide';
end;

end.


Суслик   (2004-12-17 17:49:00) [2]


> Вот эти две строчки переставь.

не в этом дело, если установить fmmdichild, то окно покажется автоматически


TUser   (2004-12-17 17:48:00) [3]


> Jann ©   (17.12.04 15:40) [14]

Вот эти две строчки переставь.

>  Form2.formstyle := fsmdichild;
>  Form2.Visible := true;


Jann   (2004-12-17 15:40:00) [4]

изначально в форме 2 formstyle равен fsNormal, свойство visible равно false. в основной форме 1, есть кнопка у которой в обработчике click записано
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
 Form2.formstyle := fsmdichild;
 Form2.Visible := true;
end;
в итоге форма 2 не появляется, а только одна ругань
"Cannot create form. MDI forms are currently active."


Суслик   (2004-12-17 15:08:00) [5]


>  [12] Jann ©   (17.12.04 14:58)

должна показываться
я проверял...
Что-то у тебя не так.


Jann   (2004-12-17 14:58:00) [6]

>Alien_D   (17.12.04 14:18) [8]

> Суслик ©   (17.12.04 11:01) [3]
> Не уверен, что получится, но "папитка не питка" (с)

>Получилось... все... пасиба, друк...

а как получилось?
я пишу в обработчике onclick
 Form2.formstyle := fsmdichild;
 Form2.Visible := true;
а форма 2 не открывается


TUser   (2004-12-17 14:51:00) [7]

Ну пусть она не будет mdi
WindowState:=wsMinimized;
formstyle:=fsNormal;
hide


Суслик   (2004-12-17 14:46:00) [8]


>  [9] TUser ©   (17.12.04 14:44)

дла mdi?
а ты попробуй...


TUser   (2004-12-17 14:44:00) [9]

visible:=false


Alien_D   (2004-12-17 14:18:00) [10]


> Суслик ©   (17.12.04 11:01) [3]
> Не уверен, что получится, но "папитка не питка" (с)

Получилось... все... пасиба, друк...


Alien_D   (2004-12-17 11:36:00) [11]


> akhmadey   (17.12.04 11:03) [4]
> Да, возможно. чтобы при загрузке дочерняя форма не появлялась
> на главной, нужно в опциях проекта убрать эту форму из списка
> автоматически создаваемых. Project-Options вкладка Forms
> убираем из списка AuoCreate Forms в список Avalible Forms,
> а в событии OnClose, если не ошибаюсь, дочерней формы пишем:
>   Action:=caFree;

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


Суслик   (2004-12-17 11:12:00) [12]


> Ну и вопрос к автору: а зачем такая форма нужна (невидимая
> пользоватолю) ?

я не автор, но вопрос полагаю вызван тем, чтобы можно было прятать mdi формы, а потом показывать, а потом опять пратять.

---------
Автору.
Я проверил, что говорил - вроде работает.


ЮЮ   (2004-12-17 11:11:00) [13]

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

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

Ну и вопрос к автору: а зачем такая форма нужна (невидимая пользоватолю) ?


akhmadey   (2004-12-17 11:03:00) [14]

Да, возможно. чтобы при загрузке дочерняя форма не появлялась на главной, нужно в опциях проекта убрать эту форму из списка автоматически создаваемых. Project-Options вкладка Forms убираем из списка AuoCreate Forms в список Avalible Forms, а в событии OnClose, если не ошибаюсь, дочерней формы пишем:
  Action:=caFree;


Суслик   (2004-12-17 11:01:00) [15]

Не уверен, что получится, но "папитка не питка" (с)


Суслик   (2004-12-17 11:01:00) [16]

Я не пробовал именно это делать, но пробовал делать обратное - создавать mdi форму невидимой, потом показывать на экране.

Попробуй FormStyle сделать fsnormal, затем hide. Когда нужно показать, то делай обратное действие: formstyle = fsmdichild.


Alien_D   (2004-12-17 10:58:00) [17]

судя повсему нет... (((
маздай...


Наверх

Титульная страница Поиск, карта сайта Написать письмо