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