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

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

Mdi Окна (модальное окно) [D7, XP]


Страницы:   1 2

fics) ©   (2009-08-01 14:29:00) 

Уважаемые мастера помогите разобраться с следующей задачей:

Есть MDI приложение. Из одного из окон приложения по кнопке вызываю след. процедуру:

procedure TServKardF.SpeedButton1Click(Sender: TObject);
var
 sh: TEditKardF;
begin
 sh := TEditKardF.Create(Application);
 //SendMessage(sh.Handle,  ??);
end;

у TEditKardF.FormStyle = fsMDIForm

как можно TEditKardF сделать модальным?
Заранее спасибо


Юрий Зотов   (2009-08-01 19:53:00) [1]

> fics)   (01.08.09 18:17) [26]

> Откуда я мог знать что если пару раз поменять руками форм
> стайл а потом вернуть его обратно в  fsNormal -  то это
> больше никогда работать не будет.

Из анализа текста сообщения об ошибке. Там сказано, что видимую форму нельзя сделать модальной - значит, осталось только подумать, с какой это такой радости форма со стилем fsNormal вдруг стала видимой? Ведь по умолчанию Visible у форм равно False. Смотрим в Object Inspector - и видим, что Visible действительно равно True (это было автоматически выставлено, когда мы меняли FormStyle на fsMDIChild, потому что дочерняя форма невидимой быть не может). Значит, ставим Visible=False - и все прекрасно работает.

> Это получается глюк чистой воды, а не шальные руки

Ну, во-первых, все-таки шальные руки. Вы же знали, что будете показывать форму модально - так зачем же было делать ее дочерней?

А во-вторых, невнимательность и невдумчивость. Кто мешал прочитать сообщение об ошибке, точно его перевести, потом подумать, с чего это форма вдруг стала видимой, а потом внимательно посмотреть в Object Inspector?

Но никаких глюков, как видим. Все сделано логично и все работает именно так, как и должно работать.


Anatoly Podgoretsky   (2009-08-01 18:44:00) [2]

> fics)  (01.08.2009 18:17:26)  [26]

Правильно, во всех грехах вини Дельфи


Игорь Шевченко   (2009-08-01 18:38:00) [3]


> Это получается глюк чистой воды, а не шальные руки, но буду
> теперь знать


это глюк рук


fics)   (2009-08-01 18:29:00) [4]


> fics)   (01.08.09 18:17) [26]

причем даже после перезагрузки компьютера!


fics)   (2009-08-01 18:18:00) [5]


> Anatoly Podgoretsky ©   (01.08.09 16:14) [7]

получается что нет


fics)   (2009-08-01 18:17:00) [6]


> sniknik ©   (01.08.09 17:40) [24]

Откуда я мог знать что если пару раз поменять руками форм стайл а потом вернуть его обратно в  fsNormal -  то это больше никогда работать не будет.
Это получается глюк чистой воды, а не шальные руки, но буду теперь знать


sniknik   (2009-08-01 17:48:00) [7]

> так наверное просто нельзя...
и все программы что создают формы по мере надобности значит не работают... т.е. ни одна из моих с хотя бы десятком форм (хоть одна да не нужна) не работает, о боже! что делать то? неровен час пользователи это заметят и меня с работы попрут... ;))


sniknik   (2009-08-01 17:40:00) [8]

> да не работает этот код!:

> sh := TEditKardF.Create(Application);
> sh.showmodal;
тяжелый случай... нужно вызывать программиста.

procedure TForm1.Button1Click(Sender: TObject);
var
 sh: TForm;
begin
 sh := TForm.Create(Application);
 sh.showmodal;
end;


все работает. если предварительно не "шалить руками" там где не надо.
убери все свои "художества" создай новую форму и пробуй с ней.


fics)   (2009-08-01 17:32:00) [9]


> MonoLife ©   (01.08.09 17:16) [22]

если этот код на 100% должен работать? то у меня он не работает

тут что-то не то: вот НоваяФорма.сaption := 'asd' работает

так наверное просто нельзя...


MonoLife   (2009-08-01 17:16:00) [10]

Создай новую форму, fsStyle не трогай.
Скопируй содержимое из TEditKardF в новую форму.
Далее Application.CreateForm(TНоваяФорма, НоваяФорма);
НоваяФорма.showmodal


fics)   (2009-08-01 17:14:00) [11]


> MonoLife ©   (01.08.09 17:12) [19]

правда вызываеться TEditKardF, тоже из чилд окна


fics)   (2009-08-01 17:13:00) [12]


> MonoLife ©   (01.08.09 17:12) [19]

все пробовал и fsNormal тоже


MonoLife   (2009-08-01 17:12:00) [13]

а в дизайнере TEditKardF.FormStyle=fsNormal??


fics)   (2009-08-01 17:08:00) [14]


> MonoLife ©   (01.08.09 17:01) [17]


да не работает этот код!:

sh := TEditKardF.Create(Application);
sh.showmodal;


MonoLife   (2009-08-01 17:01:00) [15]


> fics)   (01.08.09 16:03) [6]

В дизайнере TEditKardF.FormStyle=fsNormal, убрать из автосоздания в Forms (ctrl+shift+f11). Создавать динамически и показывать showmodal.. как-то так..


fics)   (2009-08-01 17:00:00) [16]


> sniknik ©   (01.08.09 16:42) [14]


procedure TServKardF.SpeedButton1Click(Sender: TObject);
var
sh: TEditKardF;
begin
//удалил
end

А так че та вообще не работает ((((, может поставить обратно?


fics)   (2009-08-01 16:57:00) [17]


> sniknik ©   (01.08.09 16:42) [14]


procedure TServKardF.SpeedButton1Click(Sender: TObject);
var
sh: TEditKardF;
begin
sh := TEditKardF.Create(Application);
end;

Кода создание Формы в автокреэйте нет и не было, создается только по SpeedButton1Click

на счет какой удаляймой строчки ты 'весь в сомнениях'?


sniknik   (2009-08-01 16:42:00) [18]

>> ну так не создавай его предварительно, в чем проблема?
> а как правильно?
как правильно НЕ создавать форму???

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


Anatoly Podgoretsky   (2009-08-01 16:29:00) [19]

> fics)  (01.08.2009 16:21:08)  [8]

А у нас как сел, так и слез.


fics)   (2009-08-01 16:27:00) [20]


> sniknik ©   (01.08.09 16:22) [9]


> ну так не создавай его предварительно, в чем проблема?


а как правильно? не поленитесь плз на пару строчек, не пойму хоть убей


Страницы:   1 2

Наверх

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