Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Вниз

Помогите показать окно SHOWMODAL в MDI приложении...   Найти похожие ветки 

 
Layner ©   (2004-03-13 14:54) [0]

С одной формой в MDI приложения это у меня получилось, сам не пойму как, показывается, т.е. вызывается из формы имеющей стиль fsMDIChild:

Application.CreateForm(Tfabout, fabout);
fabout.ShowModal;

и закрывается

procedure Tfabout.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
 fabout:=nil;
end;

Всё без проблем... о вот выполнить тоже самое, но с вызовом из главной формы MDI приложения, т.е. со стилем fsMDIForm, не получается, пишет ошибка вызова showmodal...
Подскажите, в этом может быть проблема? Из за стилей формы? Или что то я допускаю где-то ошибки :(

Да, само окно fabout имеет стиль fsNormal.


 
Юрий Зотов ©   (2004-03-13 15:12) [1]

Форма со стилем Child быть модальной не может по определению. С другими стилями - пожалуйста, без проблем. Что Вы и наблюдаете.


 
Layner ©   (2004-03-13 17:12) [2]

Юрий, спасибо, но может я не так выразился, и не это хотел узнать, у меня не получалось показать модальное окно в MDI приложении... а дело всего лишь в том, что (fsNormal это само сабой) надо на форме, которая модальная, поставить Visible=False. И все получится!


 
nikkie ©   (2004-03-13 17:24) [3]

>Layner
все проще.
with TAboutForm.Create(nil) do try
 ShowModal;
finally
 Free;
end;

FormClose обрабатывать не надо, выставлять Visible=False не надо.


 
Юрий Зотов ©   (2004-03-13 18:11) [4]

> Layner ©   (13.03.04 17:12) [2]

См. [3]. И уберите TAboutForm из списка автосоздаваемых форм.


 
Defunct ©   (2004-03-13 20:00) [5]

> Layner ©   (13.03.04 17:12) [2]
Ммм.. А можно поинтересоваться для какой цели требуется удалять модальную форму? Это форма - сообщение "о программе", так может имеет смысл хранить ее в памяти постоянно, то же самое и с формами настроек программы. Может достаточно использовать ShowModal, Hide?


 
Юрий Зотов ©   (2004-03-13 20:15) [6]

> Defunct ©   (13.03.04 20:00) [5]
> для какой цели требуется удалять модальную форму?

Чтобы не занимать память, очевидно. Тем более, малозначащей формой. Тем более, формой, на которой ничего не требуется хранить.


 
Defunct ©   (2004-03-13 21:03) [7]

Юрий Зотов ©   (13.03.04 20:15) [6]
100Kb памяти IMHO не столь велика плата за нормальное, быстрое отображение формы. А что если форма "о программе" содержит какой-то JPG рисунок, тогда при каждом создании этот рисунок придется распаковывать заново.

Для MDI приложения 100Kb, даже 1Mb - не критично.

> Тем более, формой, на которой ничего не требуется хранить.
эээ, а фотографию автора!! ;)


 
Юрий Зотов ©   (2004-03-13 21:16) [8]

> Defunct ©   (13.03.04 21:03) [7]

Вам приходилось писать СЕРЬЕЗНЫЕ проекты?
Просто интересно...


 
Defunct ©   (2004-03-13 21:44) [9]

Юрий Зотов ©   (13.03.04 21:16) [8]
> Вам приходилось писать СЕРЬЕЗНЫЕ проекты?
Вопрос поставлен некорректно, чтобы я ни ответил Вы все равно останетесь при своем мнении. Разве что предоставить вам рецензии, но не вижу в этом смысла. Вы ж не работодатель.

Если скажу "да" Вы поверите?
Если скажу "нет" Вы поверите.
Что бы Вы хотели услышать?

В анкете указан ICQ# буду рад пообщаться с вами вживую

PS: Вы, надеюсь, прекрасно знаете, что подавляющее большинство СЕРЬЕЗНЫХ проектов нельзя "писать" в них можно участвовать.


 
Sergey Masloff   (2004-03-13 22:26) [10]

Defunct ©   (13.03.04 21:03) [7]
>Юрий Зотов ©   (13.03.04 20:15) [6]
>100Kb памяти IMHO не столь велика плата за нормальное, быстрое >отображение формы.
Ну дык она и отобразится без МАЛЕЙШИХ тормозов. А вот что в 99% запусков приложения форма эбаута не понадобится можно утверждать с очень высокой долей вероятности.
 А с другой стороны 100 кб там мегабайт здесь и глядишь P4 с 500 Мб RAM уже невесело заработал... ;-)


 
Defunct ©   (2004-03-13 22:48) [11]

Sergey Masloff   (13.03.04 22:26) [10]
MDI приложение - это по определению большая программа. 100Kb для такой программы - ни что.
Btw и MFC приложение держит форму About всегда в памяти. В 99% случаев, About содержит не только (C) Tolik Agranovich, но и важную информацию о службе поддержки, лицензировании и т.п.

> Ну дык она и отобразится без МАЛЕЙШИХ тормозов
Не вам судить, попробуйте разместить какой-нибудь большой JPG на форме и поэксперементируйте, создавать ее и просто открывать.

> А с другой стороны 100 кб там мегабайт здесь и глядишь P4 с 500 Мб RAM уже невесело заработал... ;-)

Это по большей части относится к VCL, уж количество хлама там, никак не сравнится с одной формой About.

PS: Ставьте в About функцию, которая показывает количество занятой приложением памяти, а не процент свободных "мифических системных ресурсов", тогда от About польза будет.


 
Юрий Зотов ©   (2004-03-13 22:53) [12]

> Defunct ©   (13.03.04 21:44) [9]

> Вопрос поставлен некорректно,
Вполне четко поставлен вопрос.

> чтобы я ни ответил Вы все равно останетесь при своем мнении.
Разве это важно?

> Вы ж не работодатель.
Ошибаетесь.

> Если скажу "да" Вы поверите?
Поверю.

> Если скажу "нет" Вы поверите.
Поверю.

> Что бы Вы хотели услышать?
Правдивый ответ.

> В анкете указан ICQ# буду рад пообщаться с вами вживую
Увы, я не пользуюсь Аськой.

> подавляющее большинство СЕРЬЕЗНЫХ проектов нельзя "писать" в
> них можно участвовать.
Можно и писать. Когда несколько человек пишут, а остальные - участвуют. Так часто бывает.


 
Sergey Masloff   (2004-03-13 23:11) [13]

Defunct ©   (13.03.04 22:48) [11]
Sergey Masloff   (13.03.04 22:26) [10]
>MDI приложение - это по определению большая программа. 100Kb >для такой программы - ни что.
Не знаю откуда у Вас такие сведения.

>Btw и MFC приложение держит форму About всегда в памяти. В 99% >случаев, About содержит не только (C) Tolik Agranovich, но и >важную информацию о службе поддержки, лицензировании и т.п.
И что? Повод при каждом запуске ее открывать? У Вас пользователи при каждом запуске в службу поддержки звонят? У меня, слава богу, нет хотя звонков в службу поддержки конечно хватает.

>> Ну дык она и отобразится без МАЛЕЙШИХ тормозов
>Не вам судить, попробуйте разместить какой-нибудь большой JPG >на форме и поэксперементируйте, создавать ее и просто открывать.
Большой ЖПЕГ на форме эбаут? Если бы кто-то у кого-то из моих увижу такое - будут проблемы. И не у меня ;-)

>Это по большей части относится к VCL, уж количество хлама там, >никак не сравнится с одной формой About.
С VCL не все так плохо как кажется на первый взгляд.

>PS: Ставьте в About функцию, которая показывает количество >занятой приложением памяти,
Зачем???? Если мне захочется посмотреть объем занимаемой памяти я воспользуюсь перфомэнс каунтерами, в крайнем случае инструментами от сисинтерналс написанными специалистами в своей области а свои усилия сосредоточу на полезной функциональности программы.

P.S. Да и по поводу не мне судить тоже странное заявление. Нет, меряться я ничем не собираюсь но просто звучит смешно довольно...


 
Defunct ©   (2004-03-13 23:48) [14]

Юрий Зотов ©   (13.03.04 22:53) [12]
>>>Вам приходилось писать СЕРЬЕЗНЫЕ проекты?
>> Что бы Вы хотели услышать?
>Правдивый ответ.
Да, приходилось.

>> подавляющее большинство СЕРЬЕЗНЫХ проектов нельзя "писать" в
>> них можно участвовать.
> Можно и писать. Когда несколько человек пишут, а остальные -
> участвуют. Так часто бывает.
Бывает и такое: все что-то пишут, только не у всех код попадает в проект.

Sergey Masloff   (13.03.04 23:11) [13]
Не понял что Вы там хотели сказать. И как это связано с About формой.


 
Sergey Masloff   (2004-03-14 00:00) [15]

Defunct ©  
Я понял, Вы из Borland. Признавайтесь RCDATA -> SPLASHHIGH1 в Delphi7 - Ваша работа? ;-))


 
nikkie ©   (2004-03-14 02:08) [16]

>Btw и MFC приложение держит форму About всегда в памяти.
BTW это неправда. только что проверил.
впрочем и без этого доводы [10] Sergey Masloff просты и понятны.


 
Defunct ©   (2004-03-14 03:07) [17]

nikkie ©   (14.03.04 02:08) [16]
Информация к размышлению:
Если открыть и закрыть 20 раз подряд окно About приложения Delphi32.exe, 200k памяти просто теряется из-за некорректного освобождения памяти (утечка памяти 10кб). Скажите, может было бы проще держать 100Kb форму постоянно открытой? Не экономней ли это было бы?


 
Германн ©   (2004-03-14 03:34) [18]

2 Defunct ©   (14.03.04 03:07) [17]
Т.е. вы хотите сказать, что "утечки памяти" есть вполне нормальное следствие работы Win32- приложений?


 
Defunct ©   (2004-03-14 04:08) [19]

Германн ©   (14.03.04 03:34) [18]
> Т.е. вы хотите сказать, что "утечки памяти" есть вполне нормальное следствие работы Win32- приложений?


Нет, но раз уж всеми уважаемый Delphi32 себе такое позволяет.. Я для себя давно решил: в собственных проекта все About статически хранить однократно созданными, чуть что они выгрузятся в своп.

От себя добавлю, когда я пользуюсь компилятором с языка высокого уровня, лично меня не волнует следующее:

- Объем занимаемой приложением памяти.
- Мелкие утечки памяти. (меньше 10% от объема приложения)

Меня волнует только следующее:

- реализация поставленных в ТЗ задач.
- достижение максимально возможной производительности
- приятный интерфейс

И уж поверьте, конечному пользователю абсолютно чихать занимает ваша программа в памяти 56Mb или 57Mb, чуть что напишете в сист. требованиях на один MB больше. (не думаю, что ваши программы стоят дешевле чем планка 128Mb DDR памяти).

Хотите сэкономить память - откажитесь от VCL, и от Delphi.

PS Щас придет Игорь Шевченко, скажет что место таким программам в Recycle Bin и в дополнение напишет LMD. ;)


 
Юрий Зотов ©   (2004-03-14 09:20) [20]

> Defunct ©   (14.03.04 03:07) [17]

> Если открыть и закрыть 20 раз подряд окно About приложения
> Delphi32.exe, 200k памяти просто теряется из-за некорректного
> освобождения памяти (утечка памяти 10кб).

Это не утечка. Так работает BMM и правильно делает. Сверните и снова разверните Delphi - увидите.


 
Michail Dalakov ©   (2004-03-14 10:33) [21]

To [19]
>   лично меня не волнует следующее:
> - Объем занимаемой приложением памяти.(1)
> - Мелкие утечки памяти. (меньше 10% от объема приложения)(2)

По поводу (1).
У нас ребята написали виртуальный супермаркет. Едея в том, чтоб сразу находить нужный товар, ну конечно можно и просто ходить по магазину и все расматривать.
Принцип организации был такой при ходьбе из базы подчитывались
текстуры, объекты и т.д. вообщем вся необходимая хрень. Что бы было меньше тормозов все это держалось в памяти на локальном компьютере. Программа отлично работала при разработке, тесте и
не очень больших магазинах. Но о ужас как она заработала в одном
из крупнейших супермаркетах, когда своп достиг 4Г. Это конечно было решено. Но попробуйте разрешить это сказав, что для нормальной работы программы вам необходимо вам на клиентских машинах нужно памяти не менее 4Г.

Добиться огромного размера работающей програмы совсем несложно, не освобождайте формы, не закрываете компоненты содержащие наборы данных (например для ускоренной прорисовки какого нибудь дерева) и т.д. и в реальной ситуации вы увидите что есть что.

Так что, что ни говори а размер имеет значение и большое

По поводу (2).
Неправильное утверждение. Если есть утечки памяти, память занимаемая приложением будет непрерывно увеличиваться, что повлечет за собой необходимость перезапуска приложения. Представтье себе написаный сервер у которого есть утечки памяти и который обслуживает сотни клиентов, т.е. клиенты с очень большой частотой подключаются и отключаютя (с целью освободить ресуры), я думаю что если в таком приложении будут утечки, то такой сервер проживет совсем не долго.
А сервера по определению должны работать 7х24. Так что утечка тоже имеет значение


 
Defunct ©   (2004-03-14 11:04) [22]

Michail Dalakov ©   (14.03.04 10:33) [21]
Хорошие примеры

> Но попробуйте разрешить это сказав, что для нормальной работы программы вам необходимо вам на клиентских машинах нужно памяти не менее 4Г.

> т.е. клиенты с очень большой частотой подключаются и отключаютя (с целью освободить ресуры), я думаю что если в таком приложении будут утечки, то такой сервер проживет совсем не долго.


Приведенные примеры навели меня на такой ответ:
Это все будет оговорено в ТЗ, а соответственно будет решено, постольку задачи из ТЗ решать обязательно. Возможно не на Delphi, но уж когда задачами программы является "Обеспечить то-то, то-то на такой-то платформе с таким-то кол-вом памяти и такой-то производительностью", а особенно отдельным пунктом включено работа 24/7 без возможности контроля машины, тут применяются другие языки, другие подходы.

> Что бы было меньше тормозов все это держалось в памяти на локальном компьютере

Освобождать ресурсы безусловно надо, но как вы сами заметили имеет смысл хранить некоторые формы постояно - ибо ускоряет. ;)

Я ж не выступаю с таким заявлением: не удаляйте MDIChild, его как-раз вместе со всем содержимым надо убить при первой же возможности причем корректно и без утечек памяти.
Ну а About ... господа, не будьте столь мелочными.


 
Defunct ©   (2004-03-14 11:11) [23]

Michail Dalakov ©   (14.03.04 10:33) [21]
Сопоставив ваш пример про 4Гб текстур с формой About, я вспомнил анекдот, довольно уместный в данной ситуации, чтобы прояснить мою точку зрения:

Аврам говорит жене:
- Сара, я заработал 50 копеек за 10 минут.
- Как?
- Бежал за автобусом


 
Sergey Masloff   (2004-03-14 13:02) [24]

Defunct ©   (14.03.04 11:04) [22]
>Ну а About ... господа, не будьте столь мелочными.
Ну если разве что About... Ладно уж, делайте как нравится ;-))


 
Юрий Зотов ©   (2004-03-14 13:53) [25]

Ни фига себе мелочь - завесить напостоянно метровую форму, которая понадобится, в лучшем случае, в одном из 100 запусков для показа максимум на полминуты. Блин, тут за каждый килобайт бьешься, а там - метр налево, метр направо - по фигу. Система большая, память виртуальная, юзер богатый, ОЗУ дешевое, своп быстрый. И пусть работает медведь, у него четыре лапы.

И главное, во имя чего? Чтобы практически ничего не значащая форма раз в год появилась на полсекунды быстрее.

Да таких "программистов" штрафовать надо. Из зарплаты. Что кстати, в некоторых конторах и практикуется (и правильно!).


 
Defunct ©   (2004-03-14 14:58) [26]

Юрий Зотов ©   (14.03.04 13:53) [25]
> Ни фига себе мелочь - завесить напостоянно метровую форму, которая понадобится, в лучшем случае, в одном из 100 запусков для показа максимум на полминуты
А то не мелочь? У вас поди висит NAV или AVP полезности от которого не более чем от этой подвешенной формы.

> Блин, тут за каждый килобайт бьешься
На Delphi? с VCL компонентами? ;)

> там - метр налево, метр направо - по фигу.
Да так и есть, первое время с опаской выделял память по 64k по привычке, подсчитывал сколько байт должна занимать программа, но как увидел размер, генерируемый компилятором с включенной оптимизацией, где тупо добавляются команды MOV EAX,EAX, то плюнул на это все. Хуже чем уже сделано не сделаешь.

Скажу често, создав первую программу на Delphi я просто обалдел, она побила все мыслимые рекорды того времени, я просто не мог понять что можно ТАКОГО напихать в 500Kb, и получить в результате окошко с кнопкой? И это когда загрузчик в BOOT секторе занимает всего каких-то 300 байт, а то же самое окошко с кнопкой можно сделать и 100 байтами кода. Для чего же тогда остальные 499.9 Kb?

> Система большая, память виртуальная, юзер богатый, ОЗУ дешевое, своп быстрый. И пусть работает медведь, у него четыре лапы.
Это вопрос не к разработчикам прикладного ПО (хотя и к ним тоже), а к разработчикам оборудования, ОС и компиляторов.

> И главное, во имя чего? Чтобы практически ничего не значащая форма раз в год появилась на полсекунды быстрее.
Не значаших форм не бывает, их делают невзрачными и незначащими, те кто пишет программу, когда память критична можно вообще без About обойтись, достаточно и Project Version Info.

Да таких "программистов" штрафовать надо. Из зарплаты. Что кстати, в некоторых конторах и практикуется (и правильно!).
Ага штрафовать за то, что ТЗ выполнено, за то, что программа не тормозит. Да кому какое дело до 100Kb? Может мне религия запрещает уничтожать About?


 
Игорь Шевченко ©   (2004-03-15 13:59) [27]


> Может мне религия запрещает уничтожать About?


Сменить нафиг такую религию.
Редко используемые формы не должны
а) занимать память в программе (а память они займут при автосоздании)
б) не замедлять инициализацию приложения своим созданием.

---
LMD


 
Anatoly Podgoretsky ©   (2004-03-15 14:54) [28]

Программа как раз тормозит.


 
Defunct ©   (2004-03-15 15:41) [29]

Defunct ©   (14.03.04 04:08) [19] > PS Щас придет Игорь Шевченко, скажет что место таким программам в Recycle Bin и в дополнение напишет LMD. ;)

Игорь Шевченко ©   (15.03.04 13:59) [27]
---
LMD


Провокация удалась :)
Всем спасибо за внимание



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.041 c
14-1078889519
Думкин
2004-03-10 06:31
2004.04.04
С днем рождения! 10 марта.


1-1079694625
*light*
2004-03-19 14:10
2004.04.04
Обработка нажатия нескольких кнопок


1-1079321290
PIA
2004-03-15 06:28
2004.04.04
Почему программа из Delphi не запускается на других компах


7-1074033240
KyRo
2004-01-14 01:34
2004.04.04
Виртуальная машина


11-1057167313
BelchonokH
2003-07-02 21:35
2004.04.04
не закрывается windows





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