Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

Создание MDI-Child окна в режиме Visible=false   Найти похожие ветки 

 
TProgrammer   (2005-05-25 00:30) [0]

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


 
Defunct ©   (2005-05-25 01:02) [1]

> Вопрос в следующем, необходимо создать MDI-Child окно таким образом, чтобы оно при этом не отображалось. И лишь после выполнения определенных действий показать его.


ну просто смешно порой становится от желания некоторых сделать что-то через з..цу.

Что же тебе мешает вначале выполнить "определенные" действия, а потом создать MDIChild без всякого дополнительного гемора с невидимостью.


 
TProgrammer   (2005-05-25 04:45) [2]


> Defunct ©   (25.05.05 01:02) [1]
> ну просто смешно порой становится от желания некоторых сделать
> что-то через з..цу.

Посмейся, может полегчает. Но если знаний не хватает сказать по существу, то лучше промолчать.


 
novice_man ©   (2005-05-25 08:08) [3]

Запрети автоматическое создание MDIChild формы (Project -> Options -> Forms ("перенести" форму в область "Available form")). В обработчике закрытия формы поместить Action := caFree например:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;


И создавать/уначтожать форму по мере необходимости.


 
TProgrammer   (2005-05-25 10:13) [4]


> Запрети автоматическое создание MDIChild формы

Так у меня формы и так создаются динамически. И она далеко не одна такая.


> В обработчике закрытия формы поместить Action := caFree
> например

А это-то зачем ???


 
TProgrammer   (2005-05-25 10:20) [5]

Еще раз, что нужно. Есть код:


...
 Container := MDIContainerClass.Create(Application);
 try
   if Container.OpenWizard then
     Container.Show
   else
     Container.Free;
 except
   Container.Free;
 end;
...

Хочеться сделать так, чтобы во время исполнения OpenWizard созданная MDI-Child форма не маячила перед глазами.


 
Johnmen ©   (2005-05-25 10:23) [6]

>TProgrammer

А что, чтение F1 по поводу MDIChild окон не авторитетно для тебя?


 
Digitman ©   (2005-05-25 10:23) [7]


> Хочеться сделать так


мало ли чего тебе хочется !)

упомянутое ограничение введено отнюдь не Борландом из-за какого-то его каприза, это - фича MDI-механизма самой ОС


 
novice_man ©   (2005-05-25 10:27) [8]

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


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


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


> 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;
...

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


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


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

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

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


 
Digitman ©   (2005-05-25 10:43) [11]


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


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


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


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


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


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


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

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


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

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


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

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

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


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

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;


 
Defunct ©   (2005-05-25 15:59) [16]

TProgrammer   (25.05.05 04:45) [2]

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

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

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

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

> if Container.OpenWizard then
    Container.Show


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

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


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


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

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


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

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


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

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


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

TProgrammer   (25.05.05 17:43) [17]

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

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

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

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

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

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


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

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


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


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

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


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

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


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

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


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

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

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


 
Kolan ©   (2005-05-25 18:18) [20]


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

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


 
Mx ©   (2005-05-25 18:32) [21]


> TProgrammer   (25.05.05 18:16) [19]

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


 
Defunct ©   (2005-05-25 20:14) [22]

TProgrammer   (25.05.05 18:16) [19]

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

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

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


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

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



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


Головой?

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

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


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


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

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


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


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

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


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

TProgrammer   (25.05.05 21:44) [23]

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

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

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


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


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

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

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


 
Gero ©   (2005-05-25 22:22) [27]


> Defunct ©

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

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



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.036 c
4-1114075002
Separator
2005-04-21 13:16
2005.06.14
USB HID устройства, как с ними работать


1-1117524388
sofs
2005-05-31 11:26
2005.06.14
Мемо


14-1116788413
Qwertyk
2005-05-22 23:00
2005.06.14
Тотализаторы(попытка № 2 :) )


3-1115211791
pavel_guzhanov
2005-05-04 17:03
2005.06.14
Как в базу данных поместить картинку?


1-1117200144
ctranik
2005-05-27 17:22
2005.06.14
Как просканировать весь реестр





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский