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

Вниз

1 копия формы в MDI приложении   Найти похожие ветки 

 
K_Lock   (2009-09-27 19:47) [0]

Господа, подскажите пожалуйста с таким вопросом:

есть MDI приложение, для открытия формы используется:
Form1 := TForm1.Create(self);

для закрытия:  Action := caFree;

Каждый вызов:  Form1 := TForm1.Create(self);  создает новую копию формы.

Вопрос: как реализовать открытие только 1 копии формы? )
Заранее спасибо.


 
Inovet ©   (2009-09-27 20:34) [1]

> [0] K_Lock   (27.09.09 19:47)
> Каждый вызов:  Form1 := TForm1.Create(self);  создает новую
> копию формы.
>
> Вопрос: как реализовать открытие только 1 копии формы? )

Пройтись по дочерним и проверить не создана ли уже форма такого класса
MDIChildren, MDIChildCount


 
K_Lock   (2009-09-27 20:59) [2]

Inovet, спасибо за ответ.

и как обычно, хорошая мысля, приходит опосля =)

пришел к такому варианту:

if Form1 = nil then
 begin
   Form1 := TForm1.Create(self);
 end;
-------
Action := caFree;
Form1 := nil;


 
oldman ©   (2009-09-27 21:00) [3]

Локальная переменная := флаг/счетчик???


 
Рамиль ©   (2009-09-28 12:43) [4]

Неправильное решение, несущее в себе потенциальные проблемы. Надо как в [1]


 
Ухарь   (2009-09-28 14:30) [5]


> Неправильное решение, несущее в себе потенциальные проблемы.
>  


Вот уже несколько лет делаем так (обниливание глоб. переменной) - ни одной проблемы. Можно поинтересоваться, что нас ждет?


 
Leonid Troyanovsky ©   (2009-09-28 14:50) [6]


> Ухарь   (28.09.09 14:30) [5]

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

Глобальный кризис.

--
Regards, LVT.


 
MsGuns ©   (2009-09-28 14:51) [7]

>Ухарь   (28.09.09 14:30) [5]
>Вот уже несколько лет делаем так (обниливание глоб. переменной) - ни одной проблемы. Можно >поинтересоваться, что нас ждет?

При АККУРАТНОЙ работе - ничего плохого.
Но в конце концов найдется огурец, который по непониманию ли, по спешке ли, по какой другой причине ли, но не сделает обниливание - тогда будет AV.
И что самое гадкое, это вылезет в самый неподходящий момент. Например, в приложении, в котором ..сят дочерних форм, из которых одна (например) пользователями открывается крайне редко. И вот именно ее и захочет открыть шеф клиента в самый ответственный момент :)


 
Рамиль ©   (2009-09-28 14:56) [8]

Или объявит свою переменную.


 
Ухарь   (2009-09-28 15:00) [9]


> MsGuns ©   (28.09.09 14:51) [7]


Если речь идет о том, чтобы все дочерние формы вели себя аналогично, то тогда действительно опасно, при условии что список типов форм будет расширяться, и тогда  требуется общий механизм, по типу [1].
если речь о конкретной форме - то ничего страшного. Код уже написан, "огурцам" ничего дополнительного понимать не нужно.


 
MsGuns ©   (2009-09-28 15:04) [10]

И еще про MDI
Такой интерфейс чрезвычайно удобен в случаях, когда требуется одновременное отображение нескольких ОДНОТИПНЫХ форм - простейший пример - редактор иконок в самой делфе.
Если же приложение имеет много РАЗНЫХ форм с разным функционалом, то предпочтительнее обячный интерфейс с "автономными" панелями управления. К тому же в MDI весьма гормоздко организовывать модальность.
У меня есть одно старое бухгалтерско-складское приложение, сделанное на MDI с редактированием документов, справочников и т.д. Так вот из всех инсталляций до сих пор работает только в двух конторах и только потому, что с ним общаются опытные старые работники, при которых оно ставилось и которые обучались специально. Все остальные клиенты либо перешли на другое ПО, либо покупали это же, но переработанное под удобный, модальный интерфейс.


 
Leonid Troyanovsky ©   (2009-09-28 15:08) [11]


> Рамиль ©   (28.09.09 14:56) [8]

> Или объявит свою переменную.

Или вовсе не объявит.

--
Regards, LVT.


 
K_Lock   (2009-09-29 10:08) [12]


> У меня есть одно старое бухгалтерско-складское приложение,
>  сделанное на MDI с редактированием документов, справочников
> и т.д.
> Все остальные клиенты либо перешли на другое ПО, либо покупали это же, > но переработанное под удобный, модальный интерфейс.


Я вот все думаю отказаться от mdi, но не могу придумать оформление главной формы.
Есть база с десятком справочников, журналов документов, старая версия оформлена в аксессе - есть 1 менюшка из которой все вызывается в стиле mdi, необходимо все это переделать, но с минимальным визуальным отличием.

Если не mdi, то кроме менюшки я не могу придумать, что там показывать, оставить его пустым и все журналы открывать модально ? как то грубо.
Если просто show, то главная форма болтается непонятно как (например если не развернута не весь экран).
Делайть фреймы и заполнять ими главную форму ? А если нужно будет 2 справочника открыть ?


 
Ухарь   (2009-09-29 10:14) [13]


> MsGuns ©   (28.09.09 15:04) [10]


> переработанное под удобный, модальный интерфейс.


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


 
Ухарь   (2009-09-29 10:18) [14]


> Я вот все думаю отказаться от mdi, но не могу придумать
> оформление главной формы.


Можно сделать в виде табов, а-ля FireFox, с возможностью закрытия табов


 
MsGuns ©   (2009-09-29 13:09) [15]

>Ухарь   (29.09.09 10:14) [13]
>под модальным интерфейсом что понимается? модальные окна, вызываемые одно из другого?

Ну в общем-то да. Но основная технология основана на принципе невозможности до завершения работы с одним документом открыть другой. За исключением случаев когда при работе с документом нужно посмотреть например в справочники. Так вот и сам документ, и справочник должны отображаться модально. Т.Е. пока не завершил редактирование, например, приходной накладной, невозможно открыть другой документ, пока на закрыл справочник, открытый из накладной, нельзя перейти к накладной, пока не завершил правку в справочнике (тоже через модальную форму естественно), нельзя перейти к справочнику и т.д. Своеобразная "этажерка" из форм, построенная по принципу стэка.
Как показывает практика, такая работа наилучшим образом понятна пользователю и не позволяет запутаться в "окнах", что так легко сделать в MDI-приложении


 
Ухарь   (2009-09-29 13:47) [16]


> MsGuns ©   (29.09.09 13:09) [15]


Очень неудобно. Именно из-за невозможности открыть другой документ, пока не закончена работа с первым.  А перенести блок данных из одного в другой, тем же драг-н-дропом?
ИМХО, тупиковая парадигма.


 
MsGuns ©   (2009-09-29 14:51) [17]

На вкус и цвет..


 
Юрий Зотов ©   (2009-09-29 14:53) [18]

> MsGuns ©   (29.09.09 13:09) [15]

MDI-интерфейс, в котором модальны только диалоги (настроек и пр.), а любые рабочие MDIChild окна умеют дочиться друг к другу (слева, справа, снизу, сверху, в виде табов - как угодно). Очень удобно. Юзер сам составляет себе какой угодно интерфейс, одной лишь мышкой. Ею же легко  переносятся данные - и это подтвердит каждый, кому приходилось заполнять банковские реквизиты в предлагаемом Вами модальном интерфейсе.


 
Игорь Шевченко ©   (2009-09-29 15:14) [19]

MDI - вполне нормальная и удобная технология.


 
Жорж   (2009-09-29 20:09) [20]


> Юрий Зотов ©   (29.09.09 14:53) [18]


> умеют дочиться друг к другу


А какой инструмент использовать? Родной то механизм вроде сильно глючный? Или у меня устаревшая информация?

ЗЫ. имеется в виду Delphi, а не Java :-)


 
Юрий Зотов ©   (2009-09-29 21:06) [21]

> Жорж   (29.09.09 20:09) [20]

Родного такого механизма нет, писали сами.



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

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

Наверх





Память: 0.5 MB
Время: 0.006 c
1-1224595590
dmitry_12_08_73
2008-10-21 17:26
2009.11.15
Неприятные последствия команды винды "Свернуть все окна"


1-1224835215
@!!ex
2008-10-24 12:00
2009.11.15
BMP выравнивание относительно чего?


2-1254138111
timekiller
2009-09-28 15:41
2009.11.15
Распознать virtual PC


15-1253162942
@!!ex
2009-09-17 08:49
2009.11.15
Отказано в доступе к массиву.


15-1253179997
dort12
2009-09-17 13:33
2009.11.15
Может кто делал??





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