Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.23;
Скачать: CL | DM;

Вниз

Странное поведение ShowModal...   Найти похожие ветки 

 
TheEd   (2009-06-17 17:21) [0]

Господа мастера, заметил одну странность:
из form1 вызываем form2.ShowModal.
form2 появляется, но на form 1 можно переключиться, правда первым кликом. Остальные клики приводят к звуку, определяющему что форма залочена. В результате приходится переключаться на это же приложение Alt+Tab"ом, тогда form2 опять выходит с задних слоёв...
Что то припоминаю раньше пока модальную форму не закроешь, на породившую переключаться не получалось.

зы:
form2 сделал StayOnTop, пытался перехватить message WM_ACTIVATE и сделать SetForeground.


 
turbouser ©   (2009-06-17 17:24) [1]


> TheEd   (17.06.09 17:21)  

Это проблема windows, как ни странно
По моему, здесь так и не нашли решения..


 
Игорь Шевченко ©   (2009-06-17 17:31) [2]


> из form1 вызываем form2.ShowModal.
> form2 появляется, но на form 1 можно переключиться, правда
> первым кликом


странно, я и первым не могу


 
turbouser ©   (2009-06-17 17:34) [3]


> Игорь Шевченко ©   (17.06.09 17:31) [2]

Есть проблема с модальностью. Обсуждалась уже раза 2 здесь на моей памяти.
Решения так и не нашли.


 
Dennis I. Komarov ©   (2009-06-17 17:35) [4]

может SP помогут?


 
turbouser ©   (2009-06-17 17:38) [5]


> Dennis I. Komarov ©   (17.06.09 17:35) [4]
>
> может SP помогут?

нет... sp не помогут..


 
oldman ©   (2009-06-17 17:40) [6]


> Игорь Шевченко ©   (17.06.09 17:31) [2]
> странно, я и первым не могу


И я не могу, что странно...


 
turbouser ©   (2009-06-17 17:42) [7]


> oldman ©   (17.06.09 17:40) [6]

ничего странного.
проявляется сей глюк через раз..
странно, что не сталкивались с таким..


 
Игорь Шевченко ©   (2009-06-17 17:51) [8]

turbouser ©   (17.06.09 17:42) [7]

Пример для демонстрации, что после вызова ShowModal можно кликом попасть на вызывающую форму, не затруднит выложить ?

Windows XP, SP3 если что.

Ну или ссылку на QC, если известная проблема.


 
turbouser ©   (2009-06-17 17:56) [9]


> Игорь Шевченко ©   (17.06.09 17:51) [8]

Попасть на вызывающую форму можно - нет проблем, только диалоговое
окно будет висеть в фоне и толку от этой самой вызывающей формы - 0
пример? да тот же delforexp - форматтер кода.
Если в пустом не сохраненном проекте вызвать диалог форматирования -
будет конфуз..


 
turbouser ©   (2009-06-17 17:58) [10]

Зная сию проблему стараюсь использовать messagedlg c mb_systemmodal
работает железно, может показаться неправильным, однакож альтернативы нет


 
Германн ©   (2009-06-17 17:59) [11]


> Игорь Шевченко ©   (17.06.09 17:51) [8]

Кликом не встречал. А вот со случаями, когда модальная форма иногда оказывается сзади вызывающей встречался.


 
Игорь Шевченко ©   (2009-06-17 18:00) [12]

turbouser ©   (17.06.09 17:56) [9]

Под примером имеется в виду код. Чтобы его можно было скомпилировать, запустить и лично удостоверится в проблеме.
А то мы уже который код пишем приложения в том числе, с модальными окнами, и не знаем о проблеме. Обидно.


 
Игорь Шевченко ©   (2009-06-17 18:01) [13]


> который код


который год


 
turbouser ©   (2009-06-17 18:01) [14]


> Игорь Шевченко ©   (17.06.09 18:00) [12]

Везет :)


 
Игорь Шевченко ©   (2009-06-17 18:03) [15]


> Везет :)


код-то будет ? Можно не код, можно ссылку на QC.

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

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


 
turbouser ©   (2009-06-17 18:03) [16]


> Игорь Шевченко ©   (17.06.09 18:00) [12]

Частенько обычное модальное окошко в мди приложении так зависает..
Какой тут код может быть? Просто диалог.. и все.. и висит..


 
TheEd   (2009-06-17 18:28) [17]

гм. код простейший, и помнится раньше он не глючил:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 form2.ShowModal;
end;

end.

unit Unit2;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Buttons;

type
 TForm2 = class(TForm)
   Label1: TLabel;
   BitBtn1: TBitBtn;
 private
   { Private declarations }
 protected
   procedure OnActivate(var msg : TWMActivate); message WM_ACTIVATE;
 public
   { Public declarations }
 end;

var
 Form2: TForm2;

implementation

{$R *.dfm}

{ TForm2 }

procedure TForm2.OnActivate(var msg: TWMActivate);
begin
 inherited;
(*  if msg.Active = WA_INACTIVE then
   if Visible then
     SetForegroundWindow(Handle);
*)
end;

end.


OnActivate - так, эксперимент, можете не обращать внимания.

Так вот мысль: может дрова видеокарты виноваты - они много нового в поведение окон добавляют, напр. кнопки лишние втискивают в заголовки. Я уже замечал что к примеру в IBExpert эти кнопки расширяют дочерние окна на свою ширину и приходится "доставать" стандартные кнопки закрытия окна из за пределов экрана... :(

возьму пример домой, проверю, там видео-наворотов нет, скорее всего данной глюки не будет. Результат завтра изложу.


 
TheEd   (2009-06-17 18:34) [18]

Не утерпел, у коллеги проверил :)

Так вот - глюка нет! :|
процентов на 95 винаваты дрова видеокарты, не совсем корректно ведущие себя с окнами!


 
Игорь Шевченко ©   (2009-06-17 18:35) [19]


> гм. код простейший, и помнится раньше он не глючил:


описанный эффект на этом коде не наблюдается.

Turbo delphi 2006 professional, все патчи


 
Игорь Шевченко ©   (2009-06-17 18:39) [20]


> процентов на 95 винаваты дрова видеокарты, не совсем корректно
> ведущие себя с окнами!


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

Описанное поведение (вероятно) может наблюдаться, когда установлена масса глобальных хуков. Это предположение.


 
oldman ©   (2009-06-17 20:32) [21]


> Игорь Шевченко ©   (17.06.09 18:39) [20]


А у меня все равно не кликает.
Ты думаешь у них такая уж масса "глобальных хуков"? Бред!
Ошибка в 17-й строке, однозначно.


 
Игорь Шевченко ©   (2009-06-17 21:11) [22]

oldman ©   (17.06.09 20:32) [21]

Видишь ли, оконная подсистема - она беззащитная.
Зато быстрая


 
Virgo_Style ©   (2009-06-18 11:42) [23]

Бывает. Как правило, проявляется, если программа открывает модальное окно, не будучи активной, или если после открытия модального окна переключиться на другую программу, а затем вернуться в свою.

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

Причем с "чужими", несамописными программами такой ерунды afair не случалось.


 
Ганя   (2009-06-18 11:50) [24]

Это не виндовый косяк, а VCL-евский
бывает редко, воспроизводится сложно


 
TheEd   (2009-06-24 19:33) [25]

закономерность кстати обнаружилась, вернее условие при котором глюк возникает:
с дровави карты шли мульки (см. конец поста 17), которые в окно вставляют дополнительные кнопки (типа отправить на монитор 1(2), и т.д.), по-моему n-view зовётся. Когда пошарился в настройках и оключил эти мульки, глюка исчез.



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

Текущий архив: 2009.08.23;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.012 c
15-1245913258
b/@.
2009-06-25 11:00
2009.08.23
К чему может привести частое использование overload функций?


2-1245840591
Sly_Laban
2009-06-24 14:49
2009.08.23
*.doc-файл из RichEdit a


2-1246011562
AndrewG
2009-06-26 14:19
2009.08.23
Получить номер элемента в массиве


15-1245441971
Andy BitOff
2009-06-20 00:06
2009.08.23
119 никому ненужных фактов, хотя....


15-1245866318
Игорь Шевченко
2009-06-24 21:58
2009.08.23
Чем можно распаковать многотомный tar-архив под windows ?