![]() |
| ||
|
|
Новости |
Поиск |
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-09-29 07:50:00) [21]
> stdcall - зачем?
stdcall в библиотеке указан, я его и здесь воткнул, иначе не работает.
> TFigures - что это?
TFigure - это "аналог" класса библиотеки.
TFigire = class
public
function ReadFigureparams (S : String ): integer; virtual; stdcall; abstract;
end;
Figure : TFigure;
Юрий Зотов (2009-09-29 07:22:00) [22]TFigures - что это?
Юрий Зотов (2009-09-29 07:20:00) [23]stdcall - зачем?
Юрий Зотов (2009-09-29 07:17:00) [24]> WS_EX_TOOLWINDOW
WS_EX_APPWINDOW, конечно.
Drowsy (2009-09-29 07:17:00) [25]Сами формы нет, но хендлы имаджей и пейнт боксов Dll получает параметром дя отрисовки - типа такого:
procedure DrawFigure(TPB : HDC ; Figure : TFigures;
x : real;y : real ;const angle : integer =0);
stdcall; external 'C_GRAPH_DDL.dll' name
'@DrawFigure$qqspvr8Entitiesddi';
вызываю
DrawEntity(PntBox.Canvas.Handle, Dryers , 0, 0, 0);
DrawEntity(Imag.Canvas.Handle, Dryers , 0, 0, 0);
Юрий Зотов (2009-09-29 07:04:00) [26]> Drowsy (29.09.09 06:59) [12]
Похоже, дело в DLL. Формы F1 и F2 не в ней ли живут?
Drowsy (2009-09-29 06:59:00) [27]Dll самопальная. Из кодов С++ её "странслировал"
Drowsy (2009-09-29 06:57:00) [28]Я стили не менял и, честно говоря, не знал про WS_EX_TOOLWINDOW.....
Просто New Form из меню вызывал.
Сейчас посмотрю, спасибо!
Юрий Зотов (2009-09-29 06:54:00) [29]> Drowsy (29.09.09 06:49) [8]
> Некоторые функции из Dll
Оба-на! Какая-такая DLL? О самом главном - молчим?
Юрий Зотов (2009-09-29 06:52:00) [30]> Drowsy (29.09.09 06:42) [7]
Окнам форм cтавится стиль WS_EX_TOOLWINDOW? Зачем?
Drowsy (2009-09-29 06:49:00) [31]Некоторые функции из Dll получают параметрами хэндлы пэйнтбоксов из форм моей проги - может тут причина??
Drowsy (2009-09-29 06:42:00) [32]
> 1. Формы TF1 и TF2 - убрать из AutoCreate.
> 2. Глобальные переменные F1 и F2 - удалить.
Это уже делал.
> 3. Проверить код всех обработчиков событий OnShow и OnClose,
> включая события диалога.
Сейчас буду пробовать.
Есть в этом проекте ещё одна странность, которая, видимо, может быть по-причинам связана с этой : при вызове форм на панели задач выскакивают ярлычки с тайтлами форм.
Юрий Зотов (2009-09-29 06:33:00) [33]> Drowsy (29.09.09 06:16) [3]
Воспроизвел Вашу ситуацию искусственно:
procedure TMainF.FormDblClick(Sender: TObject);
begin
F1 := TF1.Create(nil);
try
F1.ShowModal
finally
F1.Free
end
end;
procedure TF1.FormDblClick(Sender: TObject);
begin
F2 := TF2.Create(nil);
try
F2.ShowModal
finally
F2.Free
end
end;
procedure TF2.FormDblClick(Sender: TObject);
begin
OpenDialog.Execute
end;
procedure TF2.OpenDialogShow(Sender: TObject);
begin
F1.Hide;
MainF.Hide
end;
procedure TF2.OpenDialogClose(Sender: TObject);
begin
MainF.Show;
F1.Show
end;
Выводы:
1. Формы TF1 и TF2 - убрать из AutoCreate.
2. Глобальные переменные F1 и F2 - удалить.
3. Проверить код всех обработчиков событий OnShow и OnClose, включая события диалога.
Drowsy (2009-09-29 06:25:00) [34]На F2 висит пэйнтбокс, графика на который выводится функциями из библиотеки DLL. Может это быть причиной?
Drowsy (2009-09-29 06:18:00) [35]
> Сильно удивился и проверил. Все сделал точно как Вы описали.
> Ничего никуда не исчезает. D7, XP.
Я тоже пробовал с "пустыми" формами - всё нормально и красиво...
Drowsy (2009-09-29 06:16:00) [36]Конечно ошибка.
На формах наворочено много компонентов типа TPanel, TPaintBox, TSpeedButton....
Некоторые создаются динамически.
Пробовал размещать Dialog на разные формы, но при вызове из формы F2,
результат тот же - все формы, кроме F2, исчезают с экрана.
Все коды здесь привести просто невозможно.
В каком направлении хоть искать еррор, может есть какие - то предположения?
Юрий Зотов (2009-09-29 06:11:00) [37]> Drowsy (29.09.09 04:28)
Сильно удивился и проверил. Все сделал точно как Вы описали. Ничего никуда не исчезает. D7, XP.
Вывод напрашивается - где-то что-то перемудрено.
Германн (2009-09-29 04:57:00) [38]
> Почему такое?
>
А х.з.
У меня нет "MainF, F1, F2"
У меня не "на F2 помещён OpenDialog".
У меня...
Да что там ещё говорить?
У меня вообще ничего нет из того, что приведено в сабже!
Но одно знаю точно. У тебя ошибка в программе.