![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как спрятать 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]судя повсему нет... (((
маздай...