![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странное поведение ShowModal...
TheEd © (2009-06-17 17:21:00)Господа мастера, заметил одну странность:
из form1 вызываем form2.ShowModal.
form2 появляется, но на form 1 можно переключиться, правда первым кликом. Остальные клики приводят к звуку, определяющему что форма залочена. В результате приходится переключаться на это же приложение Alt+Tab'ом, тогда form2 опять выходит с задних слоёв...
Что то припоминаю раньше пока модальную форму не закроешь, на породившую переключаться не получалось.
зы:
form2 сделал StayOnTop, пытался перехватить message WM_ACTIVATE и сделать SetForeground.
TheEd (2009-06-24 19:33:00) [1]закономерность кстати обнаружилась, вернее условие при котором глюк возникает:
с дровави карты шли мульки (см. конец поста 17), которые в окно вставляют дополнительные кнопки (типа отправить на монитор 1(2), и т.д.), по-моему n-view зовётся. Когда пошарился в настройках и оключил эти мульки, глюка исчез.
Ганя (2009-06-18 11:50:00) [2]Это не виндовый косяк, а VCL-евский
бывает редко, воспроизводится сложно
Virgo_Style (2009-06-18 11:42:00) [3]Бывает. Как правило, проявляется, если программа открывает модальное окно, не будучи активной, или если после открытия модального окна переключиться на другую программу, а затем вернуться в свою.
Однако никаких закономерностей типа "делай раз, делай два, делай три - вот он, баг" выявить не удается. Может возникнуть, может не возникнуть.
Причем с "чужими", несамописными программами такой ерунды afair не случалось.
Игорь Шевченко (2009-06-17 21:11:00) [4]oldman © (17.06.09 20:32) [21]
Видишь ли, оконная подсистема - она беззащитная.
Зато быстрая
oldman (2009-06-17 20:32:00) [5]
> Игорь Шевченко © (17.06.09 18:39) [20]
А у меня все равно не кликает.
Ты думаешь у них такая уж масса "глобальных хуков"? Бред!
Ошибка в 17-й строке, однозначно.
Игорь Шевченко (2009-06-17 18:39:00) [6]
> процентов на 95 винаваты дрова видеокарты, не совсем корректно
> ведущие себя с окнами!
Я тебе открою страшный секрет - дрова видеокарты к окнам обычно отношения не имеют. Ни малейшего. К окнам имеют отношения всякие улучшайзеры, иногда они поставляются вместе с дровами производителями видеокарт.
Описанное поведение (вероятно) может наблюдаться, когда установлена масса глобальных хуков. Это предположение.
Игорь Шевченко (2009-06-17 18:35:00) [7]
> гм. код простейший, и помнится раньше он не глючил:
описанный эффект на этомкоде не наблюдается.
Turbo delphi 2006 professional, все патчи
TheEd (2009-06-17 18:34:00) [8]Не утерпел, у коллеги проверил :)
Так вот - глюка нет!:|
процентов на 95 винаваты дрова видеокарты, не совсем корректно ведущие себя с окнами!
TheEd (2009-06-17 18:28:00) [9]гм. код простейший, и помнится раньше он не глючил:
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 эти кнопки расширяют дочерние окна на свою ширину и приходится "доставать" стандартные кнопки закрытия окна из за пределов экрана... :(
возьму пример домой, проверю, там видео-наворотов нет, скорее всего данной глюки не будет. Результат завтра изложу.
turbouser (2009-06-17 18:03:00) [10]
> Игорь Шевченко © (17.06.09 18:00) [12]
Частенько обычное модальное окошко в мди приложении так зависает..
Какой тут код может быть? Просто диалог.. и все.. и висит..
Игорь Шевченко (2009-06-17 18:03:00) [11]
> Везет :)
код-то будет ? Можно не код, можно ссылку на QC.
Что касается форматирования, то я не знаю, как там вызывается диалог, поэтому не могу судить.
Впрочем здесь есть автор вопроса, его наверняка не затруднит выложить
Игорь Шевченко (2009-06-17 18:01:00) [12]
> который код
который год
turbouser (2009-06-17 18:01:00) [13]
> Игорь Шевченко © (17.06.09 18:00) [12]
Везет :)
Игорь Шевченко (2009-06-17 18:00:00) [14]turbouser © (17.06.09 17:56) [9]
Под примером имеется в виду код. Чтобы его можно было скомпилировать, запустить и лично удостоверится в проблеме.
А то мы уже который код пишем приложения в том числе, с модальными окнами, и не знаем о проблеме. Обидно.
Германн (2009-06-17 17:59:00) [15]
> Игорь Шевченко © (17.06.09 17:51) [8]
Кликом не встречал. А вот со случаями, когда модальная форма иногда оказывается сзади вызывающей встречался.
turbouser (2009-06-17 17:58:00) [16]Зная сию проблему стараюсь использовать messagedlg c mb_systemmodal
работает железно, может показаться неправильным, однакож альтернативы нет
turbouser (2009-06-17 17:56:00) [17]
> Игорь Шевченко © (17.06.09 17:51) [8]
Попасть на вызывающую форму можно - нет проблем, только диалоговое
окно будет висеть в фоне и толку от этой самой вызывающей формы - 0
пример? да тот же delforexp - форматтер кода.
Если в пустом не сохраненном проекте вызвать диалог форматирования -
будет конфуз..
Игорь Шевченко (2009-06-17 17:51:00) [18]turbouser © (17.06.09 17:42) [7]
Пример для демонстрации, что после вызова ShowModal можно кликом попасть на вызывающую форму, не затруднит выложить ?
Windows XP, SP3 если что.
Ну или ссылку на QC, если известная проблема.
turbouser (2009-06-17 17:42:00) [19]
> oldman © (17.06.09 17:40) [6]
ничего странного.
проявляется сей глюк через раз..
странно, что не сталкивались с таким..
oldman (2009-06-17 17:40:00) [20]
> Игорь Шевченко © (17.06.09 17:31) [2]
> странно, я и первым не могу
И я не могу, что странно...