Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизПотеря модальности Найти похожие ветки
← →
Kurtevich © (2004-11-19 21:23) [0]Открываю окно вызовом ShowModal(), в этом окне в свою очередь есть кнопки, которые открывают другие окна, тоже ShowModal(). При этом когда такое окно закрывается, то первое окно уже не модально - то есть можно спокойно переходить в другие окна приложения. Самое интересное, что это действует не со всеми - одно окно после открытия-закрытия оставляет модальность первого, в то время как два других - нет. С чем это может быть связано?
← →
KilkennyCat © (2004-11-20 15:59) [1]с ошибкой...
код в студию
← →
ламер © (2004-11-21 15:28) [2]наверняка, где-то выполняется EnableWindow().
← →
Kurtevich © (2004-11-22 20:18) [3]Что касается EnableWindow() - не знаю, может она где-то и вызывается... в глубинах VCL... но не в том тексте, что передо мной... я не настолько умный, чтоб пользоваться функциями WinAPI. А по-поводу кода в студию - эт запросто! ;)
1. Это тот случай, где все в порядке:procedure TFSearch.PriceDetailToolButtonClick(Sender: TObject);
begin
if fenPriceDetSelect = ciNotSelect then exit;
FEPriceDet := TFEPriceDet.Create(self);
try
FDM.PriceDetailTable.MasterFields := cFldPresenceID;
FDM.PriceDetailTable.MasterSource := FRDM.RPresenceDataSource;
FEPriceDet.Caption := FEPriceDet.Caption + " - " + FRDM.RPresenceTableManufacName.AsString
+ " " + FRDM.RPresenceTableName.AsString;
FEPriceDet.ShowModal();
fbPriceSelected := ( FEPriceDet.FormResult = mrOk );
fsPriceDetID := FEPriceDet.PriceDetID;
fsPriceDetCLI_ID := FEPriceDet.PriceDetCLI_ID;
fsPriceDetCliName := FEPriceDet.PriceDetCliName;
fcPriceDetNatOutPrice := FEPriceDet.PriceDetNatOutPrice;
fcPriceDetNatInPrice := FEPriceDet.PriceDetNatInPrice;
finally
FDM.PriceDetailTable.MasterSource := NIL;
FDM.PriceDetailTable.MasterFields := "";
FEPriceDet.Free();
end;
if fbPriceSelected then Choice();
end;
2. Здесь все херооооово:procedure TFSearch.AddFindToolButtonClick(Sender: TObject);
var vbPresen: boolean;
begin
FAddSearch := TFAddSearch.Create(self);
try
vbPresen := true;
if ActiveControl = DBGrid then
begin
if NOT FRDM.ARPresenceTable.Empty then
FAddSearch.Search_NRM_NAME := FRDM.RPresenceTable_NRM_NAME.AsString
else vbPresen := false;
end
else if ActiveControl = AnalogDBGrid then
begin
if NOT FRDM.ARAnalogTable.Empty then
FAddSearch.Search_NRM_NAME := FRDM.RAnalogTable_NRM_NAME.AsString
else vbPresen := false;
end
else if ActiveControl = FindComboBox then
FAddSearch.Search_NRM_NAME := StrToKey(FindComboBox.Text, FRDM.Authorized);
if vbPresen then
begin
FAddSearch.Seek();
FAddSearch.ShowModal();
end;
finally
FAddSearch.Free();
end;
end;
3. И еще один нездоровый глюк:procedure TFSearch.DistFindToolButtonClick(Sender: TObject);
begin
if ( FRDM.ARPresenceTable.Empty ) then exit;
FDistSearch := TFDistSearch.Create(self);
try
if FDistSearch.NumPos > 0 then FDistSearch.ShowModal();
finally
FDistSearch.Free();
end;
end;
Такое... Если понадобятся коды классов этих форм - в следующий раз возможно... Но надеюсь уже здесь вы найдете массу ошибок... Очень надеюсь.
← →
Kurtevich © (2004-11-23 15:58) [4]Ну эт... так че... никаких идей? :(
← →
cae © (2004-11-23 16:15) [5]Попробуй создавать окна так :
FEPriceDet := TFEPriceDet.Create(Application);
← →
Kurtevich © (2004-11-23 20:08) [6]Не-а... Та же фигня... :(
← →
Piter © (2004-11-23 23:26) [7]Kurtevich © (23.11.04 20:08) [6]
проект большой? Можешь кинуть исходник на piter007 ~ newmail.ru и четко по пунктам объяснить что надо делать, чтобы получить такую-то проблему.
Вполне вероятно отвечу здесь.
← →
ЮЮ © (2004-11-24 02:57) [8]>Что касается EnableWindow() - не знаю, может она где-то и вызывается... в глубинах VCL...
попробуй создавать модальнык формы с параметрои nil, дабы не извещать owner-а при уничтожении
З.Ы. переменные-указатели на экземпляры модальных форм догичнее поместить как локальные пересенные этих методов. Нет никакого смысла в глобальности этих переменных.
← →
ASoft (2004-11-24 04:59) [9]Попробовал только что насоздавать кучу модальных форм, в т.ч.одна из которых, создана в дизайне. Модальность сохраняется везде нормально. Метод создания: (пример)
Application.CreateForm(TForm2, form2);
Form2.ShowModal;
form2.Free;
Но это при том, что в модальных формах ничего не происходит. Попробуй проверить STEP"ом все что происходит в модальной форме после ShowModal, возможно, (у меня бывало) при какой-то, неопределяемой ошибке, выполняется Finally (Form2.Free), но модальная форма остается видимой, только ее модальность теряется.
← →
Kurtevich © (2004-11-25 21:37) [10]:((( Ниче не помагает, я в шоке.
переменные-указатели на экземпляры модальных форм догичнее поместить как локальные пересенные этих методов. Нет никакого смысла в глобальности этих переменных.
Насчет этого согласен, из-за этих глобальных переменных бывают проблемы, но так оно уже повелось... Впадлу переделывать... И ксати в данном случае локальность тоже не помагает...
Вот кусочек функции, в которой трабла, потому что когда я ее комментирую все пучком... Я поубирал неинтересные места где работа только с таблицами. Вдруг найдете здесь чего-нить?
procedure TFAddSearch.Seek();
var vsStorageAnalogsOldIndName: string;
vsIndex: string;
vsANALOG_ID: string;
vbPosFound: boolean;
begin
FWait := TFWait.Create(self);
FWait.MessageLabel.Caption := "Ïîäîæäèòå, ïîæàëóéñòà! Èäåò ïîèñê ïîçèöèé â áàçå äàííûõ ...";
FWait.Show();
FWait.Update();
vsStorageAnalogsOldIndName := FRDM.StorageAnalogsTable.IndexName;
FRDM.StoragePresenceTable.DisableControls();
FRDM.StoragePresenceTable.AutocalcFields := false;
// FRDM.ARAnalogTable.LiteSave();
try
тут неинтересно
if (FRDM.StoragePresenceTable_NRM_NAME.AsString = vs_NRM_NAME) then
begin
StorAnalogStatusPanel.Color := clLime;
StorAnalogStatusShape.Brush.Color := clLime;
StorAnalogStatusLabel.Font.Color := clWindowText;
StorAnalogStatusLabel.Caption := "Íàéäåíî..."
end
else
тут тоже неинтересно
if FRDM.StoragePresenceTable.GotoKey() then
begin
StorAnalogStatusPanel.Color := clYellow;
StorAnalogStatusShape.Brush.Color := clYellow;
StorAnalogStatusLabel.Font.Color := clBlack;
StorAnalogStatusLabel.Caption := "Íàéäåíî ÷åðåç àíàëîã...";
end;
break;
end;
FRDM.StorageAnalogsTable.Next();
end;
end
else
begin
StorAnalogStatusPanel.Color := clRed;
StorAnalogStatusShape.Brush.Color := clRed;
StorAnalogStatusLabel.Font.Color := clYellow;
StorAnalogStatusLabel.Caption := "Ïîçèöèÿ íå íàéäåíà!.."
end;
end;
finally
и здесь неинтересно
FWait.Hide();
FWait.Free();
end;
end;
Хотя вобще надо начинать комментировать по частям и запускать... Я как-то таким методом засек одну неуловимую ошибку, которая не провлялаяь в дебаге, а состояла в вызове TIniFile.ReadString, когда в качестве значения по умолчанию передавалась строка, начинающаяся с пробела, то все вылетало! :)) Именно из-за пробела. Я был в шоке.
← →
Kurtevich © (2004-11-25 22:02) [11]А, все, извините - нашел!
Дело в этой самой FWait, а точнее в ее Show(). Если без этого, то все как надо. :)) Собственно здесь это был единственный реальный вариант...
Всем спасибо за участие. :))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c