![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странно работает TOpenDialog .. [D6, XP]
Drowsy © (2009-09-29 04:28:00)Есть несколько форм MainF, F1, F2.
На F2 помещён OpenDialog.
Из MainF вызывается F1.ShowModal;
Из F1 вызывается F2.ShowModal;
После выполнения OpenDialog.Execute c экрана исчезают все окна, кроме
F2. После закытия F2 появляется F1, после закрытия F1 появляется MainF.
Почему такое?
Drowsy (2009-10-05 13:48:00) [1]... + Watch List во время пошагового выполнения не редактируется.
Drowsy (2009-10-05 13:01:00) [2]Ещё фенька : если ошибка возникает вне библиотеки, то если её не обработать в программе, то выбрасывается сообщение об ошибке, в титле которого название библиотеки "C_Graph_DLL" !
Сергей М. (2009-09-30 11:37:00) [3]
> Ухарь (30.09.09 09:39) [35]
Раньше было принято внимательно читать порсты автора:
> Project Options -> runtime packages -> Build with runtime
> packages опция установлена и в проге и в библиотеке
Ухарь (2009-09-30 09:39:00) [4]помнится, раньше было принято в DLL передавать Application и Screen, и там их присваивать в соответствующие глоб. переменные.
Drowsy (2009-09-29 13:31:00) [5]Код DLL - больше десятка юнитов и ещё больше заголовков.
Может по почте?
Юрий Зотов (2009-09-29 13:16:00) [6]Нужен код DLL и формы, которая к ней обращается.
Drowsy (2009-09-29 12:39:00) [7]Может в DLL какие-то опции компиляции нужны особые?
Drowsy (2009-09-29 12:20:00) [8]В Dll, к сожалению.
Если исключить из проекта формы, которые обращаются к Dll, то всё в порядке.
А если, например, 5 форм, вызываемых последовательно F1->F2.ShowModal->F3.ShowModal->F4.ShowModal->F5.ShowModal, где 4-ре первые - "чистые", а 5-ая использует Dll, то начинаются эти проблемы (все иконки си-шные и на панели задач и OpenDialog ...).
Пробовал их и динамически создавать -тоже самое.
Я бы, нафиг, отказался от OpenDialog ("листы" бы задействовал), но хоть бы от иконок избавиться....
Юрий Зотов (2009-09-29 12:06:00) [9]> Drowsy (29.09.09 11:58) [29]
Возможно, дело не в DLL. Попробуйте в программе закомментировать все обращения к DLL - проблемы останутся, или исчезнут?
Drowsy (2009-09-29 11:58:00) [10]Библиотека написана на С++ Builder.
Используется в Дельфи.
Всё, что от неё требуется, это получить строку с названием нестандартного графического файла и Handle канваса.
Она внутри себя расшифровывает файл, и на полученном канвасе отрисовывает.
Почему она при этом корёжит основную прогу (выбрасывает на панель задач иконку формы и OpenDialog после закрытия стирает активные, видимые формы, кроме вызвавшей этот OpenDialog) ?
Drowsy (2009-09-29 11:07:00) [11]А о чём это говорит?
Может совет какой дадите?!
Сергей М. (2009-09-29 11:04:00) [12]
> в Диспетчере задач формы как приложения появляются
И что ?
Это же вовсе не говорит о "запуске еще одной программы (процесса)" ..
Drowsy (2009-09-29 10:48:00) [13]
> третьего не дано
Не дано - запускает (в Диспетчере задач формы как приложения появляются).
А как это исключить?
Сергей М. (2009-09-29 10:36:00) [14]
> как - будто запускает ещё одну программу (процесс)
Что значит "как будто" ?
Либо запускает либо не запускает - третьего не дано)
Drowsy (2009-09-29 10:33:00) [15]Получается так, что если форма использует библиотеку, то её вызов (Show или ShowModal) как - будто запускает ещё одну программу (процесс)...
Сергей М. (2009-09-29 09:00:00) [16]
> даже главного окна, которое ещё к библиотеке не обращается
Обращение к библиотеке, точнее ее загрузка и инициализация, у тебя происходит еще до тогокак рождается самое первое окно.
Drowsy (2009-09-29 08:44:00) [17].... даже главного окна, которое ещё к библиотеке не обращается.
Drowsy (2009-09-29 08:43:00) [18]Тут ещё одна странность : прога на дельфи, а иконки всех окон, мало того, что все вываливаются на панель задач, так они ещё и СИШНЫЕ.
Drowsy (2009-09-29 08:34:00) [19]
> 2. Я спрашивал про TFigures, а не TFigure.
Это у меня очепятка класс один - TFigure
> 4. И самое главное: попробуйте сбилдить (не скомпилировать,
> а именно сбилдить) и Exe, и Dll с run-time пакетами.
У меня Project Options -> runtime packages -> Build with runtime packages опция установлена и в проге и в библиотеке.
Перебилдил всё ещё раз - проблема осталась.
Юрий Зотов (2009-09-29 08:09:00) [20]1. Dll все равно чисто дельфишная, поэтому stdcall можно убрать (и в Exe, и в DLL). Хотя можно и не убирать - главное, чтобы и в Exe, и в DLL было одинаково.
2. Я спрашивал про TFigure s , а не TFigure.
3. Параметр метода - строка, надо использовать ShareMem.
4. И самое главное: попробуйте сбилдить (не скомпилировать, а именно сбилдить) и Exe, и Dll с run-time пакетами.