Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1245979790
belmol
2009-06-26 05:29
2009.08.23
опять blob, stream & array


15-1245307503
an-petroff
2009-06-18 10:45
2009.08.23
Веб-сервер должен писать в Interbase DB, а не хочет!


15-1245250048
Empleado
2009-06-17 18:47
2009.08.23
Если бы у наших маленьких детей был свой форум, какие бы темы ...


15-1245338304
Tirael
2009-06-18 19:18
2009.08.23
скорость игрушки


1-1212645024
EgorovAlex
2008-06-05 09:50
2009.08.23
Есть TAction и он назначен кнопке в тулбаре и пункту меню,





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский