Форум: "Начинающим";
Текущий архив: 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