Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.054 c
15-1340605991
OldMBr
2012-06-25 10:33
2013.03.22
SendMessage


15-1328787124
Медвежонок Пятачок
2012-02-09 15:32
2013.03.22
о старом....


15-1351679340
AV
2012-10-31 14:29
2013.03.22
Com(_to_(USB)). Безобразие..


2-1330436797
brother
2012-02-28 17:46
2013.03.22
сохранение published в ini


2-1336031343
igorium
2012-05-03 11:49
2013.03.22
Как узнать язык Windows (русский или нет)