Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.04;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.019 c
15-1249035025
Mixa
2009-07-31 14:10
2009.10.04
Нужно написать ПО для флешки


15-1248955155
Galera
2009-07-30 15:59
2009.10.04
Tool для Delphi


15-1249286693
cwl
2009-08-03 12:04
2009.10.04
Аудионаркотики


15-1249450605
Kerk
2009-08-05 09:36
2009.10.04
В России начали подделывать китайские авто


15-1249310183
pasha_golub
2009-08-03 18:36
2009.10.04
Вызов Free (Destroy) внутри метода объекта