Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1249386581
b/@.
2009-08-04 15:49
2009.10.04
Тяжело ли переходить от одиночной разработки к колективной...


15-1249331406
Юрий
2009-08-04 00:30
2009.10.04
С днем рождения ! 4 августа 2009 вторник


1-1218781281
dmitry_12_08_74
2008-08-15 10:21
2009.10.04
Как сделать, чтобы иконка в трее делалась видимой


1-1218117173
RAndrey
2008-08-07 17:52
2009.10.04
Access Violation в потоке


15-1249121929
dzmitry[li]
2009-08-01 14:18
2009.10.04
Что за ошибка GPFC00000FD-00432E88-0 ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский