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

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

Создание MDI-Child окна в режиме Visible=false [D6]


Страницы:   1 2

TProgrammer ©   (2005-05-25 00:30:00) 

Вопрос в следующем, необходимо создать MDI-Child окно таким образом, чтобы оно при этом не отображалось. И лишь после выполнения определенных действий показать его.
На конструкцию ChildForm.Visible := False; VCL ругается, что MDI-Child нельзя сделать невидимым. Можно ли обойти это ограничение, и если да, то как ?


Gero   (2005-05-25 22:22:00) [1]


> Defunct ©

http://ln.com.ua/~openxs/articles/smart-questions-ru.html

Читать, как говорится, до просветления.


TProgrammer   (2005-05-25 22:15:00) [2]


> Defunct ©   (25.05.05 21:57) [25]

1. Из вопроса видно ? Класс ! Это как ? Но ты прав - я тут часто бываю, вот только регистрироваться не хочу - а ник у меня такой уже давно, хотя и другие были.
2. Ты бы избавил меня от выслушивание твоего дерьма в мой адрес. Лучше бы ты думал, что я Вася.
3. Пишу. Большое и серьезное. И со мной это делает 12 человек - поэтому когда мне нужно убрать форму, это значит мне нужно убрать форму - потому как проектированием этого проекта занимаюсь не я.

p.s. Нервишки следовало бы подлечить тебе, а заодно научиться элементарной вежливости.


Defunct   (2005-05-25 21:57:00) [3]

TProgrammer   (25.05.05 21:44) [23]

Хренов аноним.

1. По вопросу видно, что ты один из завсегдатаев форума, только по какой-то причине прячешь свой реальный ник.
2. Если бы я заметил, что ты полный Вася, я бы тебе вообще ничего не отвечал.
3. Раз уж ты пишешь что-то большое, и возможно даже что-то серьезное, так делай это правильно, а не через ж...

Цитаты все же оставь себе. И в клинику сходи нервишки подлечить.


TProgrammer   (2005-05-25 21:45:00) [4]


> Digitman ©   (25.05.05 10:43) [11]
> Игорь Шевченко ©   (25.05.05 11:26) [15]

Спасибо за все, задача решена.


TProgrammer   (2005-05-25 21:44:00) [5]


> Вчитайся еще раз в ответы [6][7][15].
>
> Потом посмотри какой может быть реализация: [14]

А ты значение слова "некоторые" понимаешь ? Или все-равно - лишь бы написать ? Вчитайся в [11] и [15] - там люди как раз говорили по делу, в отличии от тебя, от которого ничего по делу услышано не было, видимо не по твоему уровню вопрос.
А что касается реализации [14] она вообще неработоспособна в моем случае.
Так что цитата - это именно в твой адрес. Словесный понос надо лечить. А желание выпендриться постараться унять.


Defunct   (2005-05-25 20:14:00) [6]

TProgrammer   (25.05.05 18:16) [19]

>> Тебе в этой ветке все говорят одно и тоже.
> Не все - некоторые пытаются помочь.

Наивный ты парень.
Вчитайся еще раз в ответы [6][7][15].

Потом посмотри какой может быть реализация: [14]


> Если у тебя проблемы с логическим мышлением - можешь списать на телепатию.
> p.s. Есть золотое правило - "Не знаешь - лучше молчи"

Эти цитаты очень к тебе подходят.



> Kolan ©   (25.05.05 18:18) [20]
> Скажите, а чем вы пользуетесь для проектирования


Головой?

> что нужно изучить(литературу) чтобы научится правильно это делать?

Тут так сразу и не ответишь. Много всего + практика..
Сейчас я пользуюсь только MSDN'ом и техн. документацией.


Mx   (2005-05-25 18:32:00) [7]


> TProgrammer   (25.05.05 18:16) [19]

Возможно сотрут за оффтоп, но все же позволю дать тебе совет. Да, здесь могут и полажать просто так от неприятия и насмехаться здесь могут, мне тоже это было неприятно. Но! Если ты хочешь получать ответы, лучше быть благоразумным, спокойно объясни что тебя не устравивает или реально не обращай внимание. Не думай, что ты умнее всех, как не думай и наоборот и вскоре заметишь, что и к тебе относятся нормально. И еще, когда так поступают (в смысле прикалываются), то точно загон. Я, поняв это, избавил свою прогу от много геммороя, чего и тебе советую. Извините за оффтоп.


Kolan   (2005-05-25 18:18:00) [8]


> Defunct ©   (25.05.05 18:04) [18]

Здравствуйте,
Скажите, а чем вы пользуетесь для проектирования и что
нужно изучить(литературу) чтобы научится правильноэто делать?
PS
OffTop Правда :)


TProgrammer   (2005-05-25 18:16:00) [9]


> Отвечать меня побуждает лишь только скука.

Это не ответ, это, извини, словесный понос.


> Во первых, замечу, что интуиция у тебя видимо развита через
> чур, либо ты может быть телепат? Ты оказывается лучше меня
> знаешь, что я знаю, а чего не знаю.

Если у тебя проблемы с логическим мышлением - можешь списать на телепатию.


> Тебе в этой ветке все говорят одно и тоже.

Не все - некоторые пытаются помочь.


> Только тебе не нравится, что я к тебе неуважительно отнесся. Дык, ты не
> дал повода уважительно к тебе относиться.

Лично мне абсолютно пофигу твое отношение. Хотя я отношусь уважительно ко всем, пока они мне не дают повода относиться к ним по-иному.

p.s. Есть золотое правило - "Не знаешь - лучше молчи"


Defunct   (2005-05-25 18:04:00) [10]

TProgrammer   (25.05.05 17:43) [17]

Отвечать меня побуждает лишь только скука.

> ввернуть в проект еще 25 классов, только от того, что не знаешь как убрать форму ?

Во первых, замечу, что интуиция у тебя видимо развита через чур, либо ты может быть телепат? Ты оказывается лучше меня знаешь, что я знаю, а чего не знаю.

Во-вторых: с помощью этих 25 классов возможно ты бы и получил правильно спроектированное приложение. И вопроса, как создать форму, а затем сразу ее скрыть не возникло бы.

В-третьих: "проектирование через ж..." я называю попытку запихнуть в визуальную форму невизуальную оснастку, потом отработать сперва невизуальную оснастку и от результата выполнения НЕ ВИЗУАЛЬНОЙ оснастки показывать либо разрушать созданную форму.

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


> А ты без тени сомнения готов ввернуть в проект еще 25 классов

Кстати, обычно так и поступаю. Вначале проектирую иерархию невизуальных классов (функциональность приложения), если надо 25 классов значит делаю 25, надо больше - делаю больше, и лишь потом уже думаю о формочках и прочем.


TProgrammer   (2005-05-25 17:43:00) [11]


> Defunct ©   (25.05.05 15:59) [16]
> Неприемлемо лишь только из-за лени?

А ты без тени сомнения готов ввернуть в проект еще 25 классов, только от того, что не знаешь как убрать форму ?


> бредовая конструкция как для MDI. И не только.

Сугубо твое мнение, которого я, кстати, не спрашивал.


> PS: любителям решать проблемы через ж.. советовать что-либо
> бесполезно. Уже какой раз убеждаюсь.

Но видимо страдаешь мазохизмом, который заставляет тебя отвечать, но при этом явно мешает думать


Defunct   (2005-05-25 15:59:00) [12]

TProgrammer   (25.05.05 04:45) [2]

Если ты там по существу ничего не заметил, то тут плакать надо.

> придется вводить еще и кучу дополнительных классов, что
> неприемлемо.

Неприемлемо лишь только из-за лени?

> Я уж лучше откажусь от идеи спрятать форму :)
Вот и отказывайся. То что не нуждается в форме, не должно быть включено в класс формы.

> if Container.OpenWizard then
    Container.Show


бредовая конструкция как для MDI. И не только.

PS: любителям решать проблемы через ж.. советовать что-либо бесполезно. Уже какой раз убеждаюсь.


Игорь Шевченко   (2005-05-25 11:26:00) [13]

TProgrammer   (25.05.05 10:57) [13]


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


Обычно, попытки "желать странного", например, создать MDI-форму, не показывая ее, происходят из-за ошибки в проектировании классов. Поэтому мой совет был своего рода попыткой исправить ситуацию. Попробовать сделать сабж можно, например, так:

unit Child;

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

type
 TfChild = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 end;

var
 fChild: TfChild;

implementation

{$R *.DFM}

procedure TfChild.FormCreate(Sender: TObject);
begin
 Exclude(FFormState, fsVisible);
end;

procedure TfChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
end;

end.


и, соответственно, вызов такой:

procedure TfMain.New1Click(Sender: TObject);
begin
 with TfChild.Create (Application) do begin
   Sleep(500);
   Caption := 'Child';
   Show;
 end;
end;


ЮЮ   (2005-05-25 11:07:00) [14]

>Дело в том, что форма-контейнер открывается многостраничным диалогом, в процессе которого параллельно идет формирование самой формы

Тогда, наверное, логичнее не  
 Container := MDIContainerClass.Create(Application);
 Container.OpenWizard;
а просто
 OpenWizard;
а в нем (методе) уже и создавать Container, формировать и показывать


TProgrammer   (2005-05-25 10:57:00) [15]


> Игорь Шевченко ©   (25.05.05 10:45) [12]
> Перенеси метод OpenWizard в другой класс и будет тебе счастье.
> Даром. И никто не уйдет обиженным.

Стругацкие - это конечно здорово, но вот с выносом OpenWizard большие проблемы, иначе этот вопрос и не возник бы. Дело в том, что форма-контейнер открывается многостраничным диалогом, в процессе которого параллельно идет формирование самой формы. Кроме того, разнесение функциональности формы и контейнера усложнит структуру программы, т.к. наряду с довольно длинной иерархией наследников TCustomMDIContainer, придется вводить еще и кучу дополнительных классов, что неприемлемо.
Я уж лучше откажусь от идеи спрятать форму :)


> Digitman ©   (25.05.05 10:43) [11]
> пробуй перекрыть вирт.метод WndProc() класса MDIContainerClass,
> поймать WM_CREATE и там вызывать SetWindowPos()

Спасибо, попробую.


Игорь Шевченко   (2005-05-25 10:45:00) [16]


>  Container := MDIContainerClass.Create(Application);
>  try
>    if Container.OpenWizard then
>      Container.Show
>    else
>      Container.Free;
>  except
>    Container.Free;
>  end;
> ...
>
> Хочеться сделать так, чтобы во время исполнения OpenWizard
> созданная MDI-Child форма не маячила перед глазами.


Перенеси метод OpenWizard в другой класс и будет тебе счастье. Даром. И никто не уйдет обиженным.


Digitman   (2005-05-25 10:43:00) [17]


> Если бы форма еще и не мерцала, при появлении


пробуй перекрыть вирт.метод WndProc() класса MDIContainerClass, поймать WM_CREATE и там вызывать SetWindowPos()


TProgrammer   (2005-05-25 10:38:00) [18]


> novice_man ©   (25.05.05 10:27) [8]
> Ну так делайте как вам хочется. А еще лучше нипишите свою
> "ось" с реализацией всего чего вам захочется. :)

Очень мудрое замечание, и как всегда по теме :) Не надо так обижаться на то, что твой совет оказался не в тему.

p.s. Уважаемые, если нечего сказать, всегда лучше промолчать.


TProgrammer   (2005-05-25 10:36:00) [19]


> Johnmen ©   (25.05.05 10:23) [6]
> А что, чтение F1 по поводу MDIChild окон не авторитетно
> для тебя?

Вполне, если ты еще и намекнешь, что именно я там не заметил, когда читал, то буду очень благодарен, а пока что твой пост ничего нового не привнес.


> Digitman ©   (25.05.05 10:23) [7]
> мало ли чего тебе хочется !)
> упомянутое ограничение введено отнюдь не Борландом из-за
> какого-то его каприза, это - фича MDI-механизма самой ОС

Хотеть не вредно ;) Я понимаю, что это сделано не из-за прихоти Борланда :)
Однако упомянутые "фичи" допускают сделать так:

Container := MDIContainerClass.Create(Application);
try
  SetWindowPos(AdminTreeEditor.Handle, 0, 0, 0, 0, 0, SWP_HIDEWINDOW or SWP_NOSIZE or SWP_NOMOVE or SWP_NOZORDER);
  if Container.OpenWizard then
    SetWindowPos(AdminTreeEditor.Handle, 0, 0, 0, 0, 0, SWP_SHOWWINDOW or SWP_NOSIZE or SWP_NOMOVE or SWP_NOZORDER);
  else
    Container.Free;
except
  Container.Free;
end;
...

Если бы форма еще и не мерцала, при появлении, то это было бы как раз то, что мне нужно.


novice_man   (2005-05-25 10:27:00) [20]

TProgrammer   (25.05.05 10:20) [5]
Хочеться сделать так


Ну так делайте как вам хочется. А еще лучше нипишите свою "ось" с реализацией всего чего вам захочется. :)


Страницы:   1 2

Наверх

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