Форум: "Начинающим";
Текущий архив: 2009.08.23;
Скачать: [xml.tar.bz2];
ВнизСтранное поведение 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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.005 c