Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Странно работает TOpenDialog .. [D6, XP]


Страницы:   1 2

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".
У меня...
Да что там ещё говорить?
У меня вообще ничего нет из того, что приведено в сабже!
Но одно знаю точно. У тебя ошибка в программе.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо