Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];
ВнизMdi Окна (модальное окно) Найти похожие ветки
← →
fics) (2009-08-01 14:29) [0]Уважаемые мастера помогите разобраться с следующей задачей:
Есть MDI приложение. Из одного из окон приложения по кнопке вызываю след. процедуру:
procedure TServKardF.SpeedButton1Click(Sender: TObject);
var
sh: TEditKardF;
begin
sh := TEditKardF.Create(Application);
//SendMessage(sh.Handle, ??);
end;
у TEditKardF.FormStyle = fsMDIForm
как можно TEditKardF сделать модальным?
Заранее спасибо
← →
MonoLife © (2009-08-01 14:59) [1]FormStyle = fsNormal?
← →
MonoLife © (2009-08-01 15:00) [2]sh.showmodal
← →
fics) (2009-08-01 15:05) [3]
> MonoLife © (01.08.09 15:00) [2]
Этого окно нет в автокреэйте
← →
Anatoly Podgoretsky © (2009-08-01 15:46) [4]> fics) (01.08.2009 15:05:03) [3]
Ну и что, что нет - это нормально.
← →
fics) (2009-08-01 15:50) [5]
> Anatoly Podgoretsky © (01.08.09 15:46) [4]
Это не правильно:
> MonoLife © (01.08.09 15:00) [2]
> sh.showmodal
← →
fics) (2009-08-01 16:03) [6]
> Anatoly Podgoretsky © (01.08.09 15:46) [4]
class EInvalidOperation with message "Cannot make a visible window modal".
Уже созданое окно нельзя сделать модальным
← →
Anatoly Podgoretsky © (2009-08-01 16:14) [7]> fics) (01.08.2009 16:03:06) [6]
Тебе дали ответы, а ты даже и не пытаешься их понять.
← →
fics) (2009-08-01 16:21) [8]
> Anatoly Podgoretsky © (01.08.09 16:14) [7]
ну что ж не такой видать умный как другие
//родительское окно
procedure TServKardF.FormActivate(Sender: TObject);
begin
if ((EditKardF <> nil) and (EditKardF.Showing)) then
EditKardF.SetFocus;
end;
вот мое решение, а где ваш ответ не вижу?
← →
sniknik © (2009-08-01 16:22) [9]> Уже созданое окно нельзя сделать модальным
ну так не создавай его предварительно, в чем проблема?
← →
fics) (2009-08-01 16:23) [10]ну не совсем удачное, но пойдет пока
← →
sniknik © (2009-08-01 16:24) [11]> вот мое решение
твое "решение" делает что угодно но только не чилд Mdi модальным...
← →
fics) (2009-08-01 16:27) [12]
> sniknik © (01.08.09 16:22) [9]
> ну так не создавай его предварительно, в чем проблема?
а как правильно? не поленитесь плз на пару строчек, не пойму хоть убей
← →
Anatoly Podgoretsky © (2009-08-01 16:29) [13]> fics) (01.08.2009 16:21:08) [8]
А у нас как сел, так и слез.
← →
sniknik © (2009-08-01 16:42) [14]>> ну так не создавай его предварительно, в чем проблема?
> а как правильно?
как правильно НЕ создавать форму???
ну, можно наверное поставить пустую строчку вместо строчки создания... хотя, я уже весь в сомнениях, а правильно ли это? или правильнее будет эту строчку удалить совсем нафиг?... нет, это неразрешимый вопрос, пойду напьюсь с горя. :)
← →
fics) (2009-08-01 16:57) [15]
> sniknik © (01.08.09 16:42) [14]
procedure TServKardF.SpeedButton1Click(Sender: TObject);
var
sh: TEditKardF;
begin
sh := TEditKardF.Create(Application);
end;
Кода создание Формы в автокреэйте нет и не было, создается только по SpeedButton1Click
на счет какой удаляймой строчки ты "весь в сомнениях"?
← →
fics) (2009-08-01 17:00) [16]
> sniknik © (01.08.09 16:42) [14]
procedure TServKardF.SpeedButton1Click(Sender: TObject);
var
sh: TEditKardF;
begin
//удалил
end
А так че та вообще не работает ((((, может поставить обратно?
← →
MonoLife © (2009-08-01 17:01) [17]
> fics) (01.08.09 16:03) [6]
В дизайнере TEditKardF.FormStyle=fsNormal, убрать из автосоздания в Forms (ctrl+shift+f11). Создавать динамически и показывать showmodal.. как-то так..
← →
fics) (2009-08-01 17:08) [18]
> MonoLife © (01.08.09 17:01) [17]
да не работает этот код!:
sh := TEditKardF.Create(Application);
sh.showmodal;
← →
MonoLife © (2009-08-01 17:12) [19]а в дизайнере TEditKardF.FormStyle=fsNormal??
← →
fics) (2009-08-01 17:13) [20]
> MonoLife © (01.08.09 17:12) [19]
все пробовал и fsNormal тоже
← →
fics) (2009-08-01 17:14) [21]
> MonoLife © (01.08.09 17:12) [19]
правда вызываеться TEditKardF, тоже из чилд окна
← →
MonoLife © (2009-08-01 17:16) [22]Создай новую форму, fsStyle не трогай.
Скопируй содержимое из TEditKardF в новую форму.
Далее Application.CreateForm(TНоваяФорма, НоваяФорма);
НоваяФорма.showmodal
← →
fics) (2009-08-01 17:32) [23]
> MonoLife © (01.08.09 17:16) [22]
если этот код на 100% должен работать? то у меня он не работает
тут что-то не то: вот НоваяФорма.сaption := "asd" работает
так наверное просто нельзя...
← →
sniknik © (2009-08-01 17:40) [24]> да не работает этот код!:
> sh := TEditKardF.Create(Application);
> sh.showmodal;
тяжелый случай... нужно вызывать программиста.procedure TForm1.Button1Click(Sender: TObject);
var
sh: TForm;
begin
sh := TForm.Create(Application);
sh.showmodal;
end;
все работает. если предварительно не "шалить руками" там где не надо.
убери все свои "художества" создай новую форму и пробуй с ней.
← →
sniknik © (2009-08-01 17:48) [25]> так наверное просто нельзя...
и все программы что создают формы по мере надобности значит не работают... т.е. ни одна из моих с хотя бы десятком форм (хоть одна да не нужна) не работает, о боже! что делать то? неровен час пользователи это заметят и меня с работы попрут... ;))
← →
fics) (2009-08-01 18:17) [26]
> sniknik © (01.08.09 17:40) [24]
Откуда я мог знать что если пару раз поменять руками форм стайл а потом вернуть его обратно в fsNormal - то это больше никогда работать не будет.
Это получается глюк чистой воды, а не шальные руки, но буду теперь знать
← →
fics) (2009-08-01 18:18) [27]
> Anatoly Podgoretsky © (01.08.09 16:14) [7]
получается что нет
← →
fics) (2009-08-01 18:29) [28]
> fics) (01.08.09 18:17) [26]
причем даже после перезагрузки компьютера!
← →
Игорь Шевченко © (2009-08-01 18:38) [29]
> Это получается глюк чистой воды, а не шальные руки, но буду
> теперь знать
это глюк рук
← →
Anatoly Podgoretsky © (2009-08-01 18:44) [30]> fics) (01.08.2009 18:17:26) [26]
Правильно, во всех грехах вини Дельфи
← →
Юрий Зотов © (2009-08-01 19:53) [31]> fics) (01.08.09 18:17) [26]
> Откуда я мог знать что если пару раз поменять руками форм
> стайл а потом вернуть его обратно в fsNormal - то это
> больше никогда работать не будет.
Из анализа текста сообщения об ошибке. Там сказано, что видимую форму нельзя сделать модальной - значит, осталось только подумать, с какой это такой радости форма со стилем fsNormal вдруг стала видимой? Ведь по умолчанию Visible у форм равно False. Смотрим в Object Inspector - и видим, что Visible действительно равно True (это было автоматически выставлено, когда мы меняли FormStyle на fsMDIChild, потому что дочерняя форма невидимой быть не может). Значит, ставим Visible=False - и все прекрасно работает.
> Это получается глюк чистой воды, а не шальные руки
Ну, во-первых, все-таки шальные руки. Вы же знали, что будете показывать форму модально - так зачем же было делать ее дочерней?
А во-вторых, невнимательность и невдумчивость. Кто мешал прочитать сообщение об ошибке, точно его перевести, потом подумать, с чего это форма вдруг стала видимой, а потом внимательно посмотреть в Object Inspector?
Но никаких глюков, как видим. Все сделано логично и все работает именно так, как и должно работать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c