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

Вниз

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

 
Drowsy ©   (2012-02-28 16:22) [0]

На главной форме, после клика по кнопке вызывается процедура расчёта, довольно продолжительная, по окончанию которой вызывается функция, в которой вызывается модальная форма

function TFlotSection.MayBegin(const Trans : TIBTransaction = nil): TmbResult;
var
 fWidProFlo : TfmWidProFlo;
begin
 try
   needNewTransaction := not Assigned(Trans);
   if needNewTransaction then
      trCreateSection := TIBTransaction.Create(nil)
    else
      trCreateSection := Trans;

    try
      if needNewTransaction then
        CreateNilTransaction(trCreateSection,  dmDataModule.Database);

      result := inherited MayBegin(trCreateSection);

      if  result = mbContinue then
      begin
        Quer := TIBQuery.Create(nil);
        fWidProFlo := TfmWidProFlo.Create(nil);
        try
          Quer.Transaction := trCreateSection;
          Quer.Database := Quer.Transaction.DefaultDatabase;
          Quer.SQL.Add("select ");
          Quer.SQL.Add(" flotcalc_sec.operation_name, ");
          Quer.SQL.Add(" flotcalc_sec.obor_res_code, ");
          Quer.SQL.Add(" flotcalc_sec.flmlength, ");
          Quer.SQL.Add(" pmf.name ");
          Quer.SQL.Add(" from flotcalc_sec");
          Quer.SQL.Add("    inner join pmf on ((flotcalc_sec.obor_res_code = pmf.code) and ");
          Quer.SQL.Add(" (Sec_Code = " + IntToStr(Sec_Code) +")) Order By flotcalc_sec.Code ;");
          Quer.Open;
          fWidProFlo.DBG.DataSource.DataSet := Quer;
          fWidProFlo.ShowModal;
          Quer.Close;
          case fWidProFlo.ModalResult of
            mrOk :
            begin
              result := mbReCreate;
              DeleteSection_and_Acad(trCreateSection);
            end;
            mrCancel :
            begin
              result := mbContinue;
            end;
          end;
        finally
          Quer.Free;
          fWidProFlo.Release;
          fWidProFlo := nil;
        end;
      end;

      case result of
        mbContinue, mbReCreate :
          trCreateSection.Commit;
        else
          trCreateSection.Rollback;
      end;
    except
      on E : Exception do
      begin
        if trCreateSection.Active then trCreateSection.RollBack;
        result := mbNot;
        Raise;
      end;
    end;

 finally
   if needNewTransaction then
   begin
     trCreateSection.Free;
   end;
 end
end;

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

пошёл расчёт => переключился на другие программы=>
рачёт закончился=>возвращаюсь =>мод.окна не видно=> переключился на другую программу => возвращаюсь =>мод.окно видно.


 
Ega23 ©   (2012-02-28 17:34) [1]


> рачёт закончился=>возвращаюсь =>мод.окна не видно=>


нажал alt+tab - видно


 
Anatoly Podgoretsky ©   (2012-02-28 17:57) [2]

> Drowsy  (28.02.2012 16:22:00)  [0]

Ошибку ищи в fWidProFlo


 
Drowsy ©   (2012-02-28 18:13) [3]


> Anatoly Podgoretsky ©   (28.02.12 17:57) [2]
>
> > Drowsy  (28.02.2012 16:22:00)  [0]
>
> Ошибку ищи в fWidProFlo


fWidProFlo - самая обычная
Может быть какие-то опции формы нужно установить?

type
 TfmWidProFlo = class(TForm)
   Panel2: TPanel;
   Panel1: TPanel;
   DBG: TDBGridEh;
   DataSource1: TDataSource;
   Button1: TButton;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 fmWidProFlo: TfmWidProFlo;

implementation

{$R *.dfm}

end.

object fmWidProFlo: TfmWidProFlo
 Left = 180
 Top = 130
 Width = 1054
 Height = 546
 Caption = "Øèðèíà ïðîëåòîâ ôëîòàöèè."
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -13
 Font.Name = "MS Sans Serif"
 Font.Style = [fsBold]
 KeyPreview = True
 OldCreateOrder = False
 Position = poDefault
 PixelsPerInch = 96
 TextHeight = 16
 object Panel2: TPanel
   Left = 0
   Top = 432
   Width = 1046
   Height = 80
   Align = alBottom
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clLime
   Font.Height = -13
   Font.Name = "MS Sans Serif"
   Font.Style = [fsBold]
   ParentFont = False
   TabOrder = 0
   object Button1: TButton
     Left = 680
     Top = 32
     Width = 113
     Height = 25
     Caption = "Îáíîâèòü"
     Font.Charset = DEFAULT_CHARSET
     Font.Color = clRed
     Font.Height = -13
     Font.Name = "MS Sans Serif"
     Font.Style = [fsBold]
     ModalResult = 1
     ParentFont = False
     TabOrder = 0
   end
 end
 object Panel1: TPanel
   Left = 0
   Top = 0
   Width = 1046
   Height = 432
   Align = alClient
   Caption = "Panel1"
   TabOrder = 1
   object DBG: TDBGridEh
     Left = 1
     Top = 1
     Width = 1044
     Height = 430
     Align = alClient
     AllowedOperations = []
     DataSource = DataSource1
     FooterColor = clWindow
     FooterFont.Charset = DEFAULT_CHARSET
     FooterFont.Color = clWindowText
     FooterFont.Height = -13
     FooterFont.Name = "MS Sans Serif"
     FooterFont.Style = [fsBold]
     TabOrder = 0
     TitleFont.Charset = DEFAULT_CHARSET
     TitleFont.Color = clWindowText
     TitleFont.Height = -13
     TitleFont.Name = "MS Sans Serif"
     TitleFont.Style = [fsBold]
   end
 end
 object DataSource1: TDataSource
   Left = 400
   Top = 144
 end


 
sniknik ©   (2012-02-28 19:54) [4]

> fWidProFlo := TfmWidProFlo.Create(nil);
fWidProFlo := TfmWidProFlo.Create(self);


 
Anatoly Podgoretsky ©   (2012-02-28 22:25) [5]

var
fmWidProFlo: TfmWidProFlo;

Убери


 
Loginov Dmitry ©   (2012-02-28 23:39) [6]


> после клика по кнопке вызывается процедура расчёта, довольно
> продолжительная, по окончанию которой вызывается функция,
>  в которой вызывается модальная форма


Осуществляется ли визуализация текущего состояния вычислений? Если да, то какими средствами?


 
Drowsy ©   (2012-02-29 00:16) [7]


> Loginov Dmitry ©   (28.02.12 23:39) [6]
>
>
> > после клика по кнопке вызывается процедура расчёта, довольно
> > продолжительная, по окончанию которой вызывается функция,
>
> >  в которой вызывается модальная форма
>
>
> Осуществляется ли визуализация текущего состояния вычислений?
>  Если да, то какими средствами?
>


Нет. Она и не нужна. Собирался позже какой-нибудь "бегунок" на время расчёта (секунд 15) запускать.


 
Drowsy ©   (2012-02-29 00:18) [8]


> sniknik ©   (28.02.12 19:54) [4]
>
> > fWidProFlo := TfmWidProFlo.Create(nil);
> fWidProFlo := TfmWidProFlo.Create(self);
>

это я пробовал - не помогает.


 
Drowsy ©   (2012-02-29 00:22) [9]


> Anatoly Podgoretsky ©   (28.02.12 22:25) [5]
>
> var
> fmWidProFlo: TfmWidProFlo;
>
> Убери
>


Почему?
Если все формы, которые в модальном режиме будут запускаться,
создавать "автокрейтом", то программа полчаса грузиться будет.


 
sniknik ©   (2012-02-29 00:54) [10]

> создавать "автокрейтом"
и иметь ту же переменную локальным дублем, не то же самое. или в модуле убрал?


 
sniknik ©   (2012-02-29 00:58) [11]

> это я пробовал - не помогает.
... D6 видимо ...
попробуй так
SetWindowLong(fmWidProFlo.Handle, GWL_HWNDPARENT, self.Handle);
после создания


 
Drowsy ©   (2012-02-29 01:41) [12]


> sniknik ©   (29.02.12 00:54) [10]
>
> > создавать "автокрейтом"
> и иметь ту же переменную локальным дублем, не то же самое.
>  или в модуле убрал?
>


они разные
глобальная fmWidProFlo
локальная fWidProFlo

согласен, что можно глобальную инициировать, но сомневаюсь, что это
решит проблему. (утром попробую)


> sniknik ©   (29.02.12 00:58) [11]
>
> > это я пробовал - не помогает.
> ... D6 видимо ...
> попробуй так
> SetWindowLong(fmWidProFlo.Handle, GWL_HWNDPARENT, self.Handle);
>
> после создания
>


Обязательно попробую и доложусь.


 
Drowsy ©   (2012-02-29 10:10) [13]

SetWindowLong(fWidProFlo.Handle, GWL_HWNDPARENT, ParentForm.Handle);
- то, что нужно.

Николай, спасибо!


 
Drowsy ©   (2012-02-29 10:14) [14]

P.S.
Это получается, что SetWindowLong надо ко всем динамически создаваемым мод. формам цеплять?!


 
sniknik ©   (2012-02-29 16:42) [15]

только если есть проблема из топика, не знаю почему, но такое случается и в D6 чаще чем в D7. а вообще редко, очень... (зависит наверное от радиуса кривизны рук, а так как на D6 я очень давно не сидел, то и помню с ним было больше случаев :)
вообще такого быть не должно.

+ можно создавать форму не так как ты, а так как в *.dpr (тоже может исправит проблему), один раз, при первом обращении, и не освобождать постоянно.


 
Drowsy ©   (2012-02-29 18:05) [16]


> sniknik ©   (29.02.12 16:42) [15]

я и сам впервые столкнулся.
а за решение ещё раз спасибо - сам бы долго не дотумкал .



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

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

Наверх




Память: 0.5 MB
Время: 0.093 c
15-1344019767
popoko
2012-08-03 22:49
2013.03.22
google map


15-1351492704
oldman
2012-10-29 10:38
2013.03.22
Задачка. Ответа я не знаю.


2-1335937740
Александр_12
2012-05-02 09:49
2013.03.22
Возможно ли управлять PowerPoint


15-1342270401
Студент_1234
2012-07-14 16:53
2013.03.22
Напомните функцию, которая реагирует на Input.


15-1340134086
Artem
2012-06-19 23:28
2013.03.22
Посоветуйте надежный Android телефон





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