Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];

Вниз

Модальная форма   Найти похожие ветки 

 
cyborg   (2008-04-07 15:34) [0]

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


 
ANB   (2008-04-07 15:48) [1]

Дамс. Лягушка (тоад) ведет себя точно также. И писали ее на делфи. Если честно, даже как юзера напрягает. Посему, стараюсь не пользовать слишком часто модальные формы.


 
Kolan ©   (2008-04-07 15:48) [2]

Каких других? Что-то у меня не получается воспроизвести.
Код создания мод. формы покажи.


 
ANB   (2008-04-07 15:51) [3]


> Kolan ©   (07.04.08 15:48) [2]

ShowMessage("Hello, Kolan !");

Если потом гулять по разным окнам, то иногда залипает приложение.
Чаще проявляется, если запустить что то длительное, в конце которого ты сообщаешь об окончании (мона тупо Sleep(15000);) и в это время перейти на другое приложение.


 
Reindeer Moss Eater ©   (2008-04-07 15:53) [4]

Лечится альттабом.


 
ANB   (2008-04-07 15:58) [5]


> Reindeer Moss Eater ©   (07.04.08 15:53) [4]

Юзером. Пока еще поймет. Я раз навтыкал ShowMessage в поделочной утилитке для себя. У меня ее выпросил спец по работе с клиентами. Опытный до жути.
Я то знал, что бывают залипухи и лечил табом. А этот спец зовет меня через час с воплем, что моя утилита зависла :)


 
cyber-pilot   (2008-04-07 15:58) [6]


> Kolan ©   (07.04.08 15:48) [2]
> Каких других? Что-то у меня не получается воспроизвести.
>
> Код создания мод. формы покажи.


В главной форме создается еще одна

if not Assigned(FDialog) then
   FDialog := TfmDialog.Create(Self);

потом у нее вызывается процедура, в которой вызывается ShowModal

Кстати, эта ошибка возникает очень редко, так что воспроизвести ее сложно.


 
cyber-pilot   (2008-04-07 16:28) [7]

оказывается это довольно частая ошибка http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=68228&pg=1

и нормального решения у нее нет :(


 
Kolan ©   (2008-04-07 16:32) [8]

Я тоже замечал такой глюк, все хотел понять из-за чего он происходит. Вот хотел сейчас, а воспроизвести не получилось.


 
asdf2   (2008-04-08 12:08) [9]

а, если в OnShow формы проверять, есть ли у нее модальные и пхать наверх?


 
Gore   (2008-04-08 12:32) [10]

может при потере фокуса просто ее закрывать?


 
ANB   (2008-04-08 17:15) [11]


> может при потере фокуса просто ее закрывать?

Не поканает, если показом модальной формы приостановлено на середине исполнение процедуры/обработчика. Тады оно дальше пойдет, что не есть хорошо. Плюс часто ошибка проявляется, если приложение УЖЕ не активно при подъеме модальной формы.


> оказывается это довольно частая ошибка http://www.sql.ru/forum/actualthread.
> aspx?bid=20&tid=68228&pg=1
>
> и нормального решения у нее нет :(

Хреноватая инфа. Вот и разработчики лягушки этот глюк не починили.


 
asdf2   (2008-04-08 18:39) [12]

воспроизводство глюка:

unit Unit1;

interface

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

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

var
 Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 n := Screen.FormCount;
 ShowF;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 if (n <> 0) and ( (Screen.FormCount - 1) >= n) then
   Screen.Forms[n].BringToFront;
end;

end.

unit Unit2;

interface

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

type
 TForm2 = class(TForm)
 private
   { Private declarations }
   f: Boolean;
 public
   { Public declarations }
 end;

procedure ShowF;

implementation

{$R *.dfm}

procedure ShowF;
begin
 with TForm2.Create(Application) do
   try
     ShowModal;
   finally
     Free;
   end;
end;

end.

нажать на кнопочку и протащить какое-нть окно


 
Loginov Dmitry ©   (2008-04-08 23:28) [13]

> воспроизводство глюка:


это не воспроизводство глюка, а диверсия какая-то!


 
Anatoly Podgoretsky ©   (2008-04-09 16:15) [14]

> Loginov Dmitry  (08.04.2008 23:28:13)  [13]

Это производство



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

Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
2-1207687754
Riply
2008-04-09 00:49
2008.05.04
Выбор типа структуры для хранения данных и работы с ними.


11-1188466431
Gloomer
2007-08-30 13:33
2008.05.04
Проблемы с минимизацией окна


2-1207590779
иван8511
2008-04-07 21:52
2008.05.04
Перемещение курсора в компоненте Edit


2-1207649935
Семен Кевларвестов
2008-04-08 14:18
2008.05.04
Чем можно скрыть окно ToolTip?


2-1207675052
gefest80
2008-04-08 21:17
2008.05.04
звук





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский