![]() |
|
|
|
|
#1
|
|||
|
|||
|
Есть формы, на каждой кнопка со св-ом ModalResult= mrYes
Образовалась странная, наверняка детская, проблема при вызове одной из форм. Код:
begin
if SomeFRM.ShowModal = mrYes then
begin
.....
end;
end;Если поставить брейк на if SomeFRM.ShowModal = mrYes then, то в одном случае, он срабатывает (как и задумано) после клика по кнопке и попадает в блок с условием, а в ином случае сразу при вызове формы, и, соответственно, результат не ждет. Где что забыл? OnClose etc ни где не обрабатывается. Последний раз редактировалось nixon232, 12.03.2018 в 16:52. |
|
#2
|
||||
|
||||
|
По идее Вы не должны получить ModalResult, так как форма показанная с помощью ShowModal будет ждать своего закрытия и соответственно дальнейший код вызвавшей ее процедуры продолжен не будет. Где-то, что-то, вероятнее всего, у Вас не так написано.
|
|
#3
|
|||
|
|||
|
В том, то и вопрос, что не так. Такое ощущение, что форма создается повторно, хотя ранее создана уже
Код:
SomeFRM := TSomeFRM.Create(self); Причем, если прописать переменную, то проблема уходит. Но в этом же проекте работает код и без переменной. По этому, хочется понять причину Код:
var r: TModalResult;
begin
r:= SomeFRM.ShowModal;
if r= mrYes then
begin
....
end;
end;Последний раз редактировалось nixon232, 13.03.2018 в 12:35. |
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
|||
|
|||
|
Попробую, но что-то мне подсказывает, что в новом проекте будет все хорошо.
|
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
|||
|
|||
|
Цитата:
К тому же я писал, что в проблемном случае Бряк срабатывает как бы при открытии модальной формы. То есть мы по сути не ждем модалку как если бы прописали SomeFRM.Show, a не ShowModal. Так что там никакой Close не перекрывается. На форме 2 события и 3 кнопки. Ничего не обычного OnCreate, Кнопка Save с MrYes, и таким кодом Код:
var
ini: tinifile;
begin
ini := tinifile.Create(ExtractFilePath(Application.ExeName) + 'data.ini');
try
ini.WriteInteger();
...
finally
ini.Free;
end;
end;Вот собственно все, что есть на модальной форме. В OnCreate Главной формы Код:
SomeFRM := TSomeFRM.Create(self); Application.OnRestore := AppRestore; Application.OnMinimize := AppHide; .... LoadFromINIparam; // Заполняем SomeFRM с того же data.ini ... end; Последний раз редактировалось nixon232, 13.03.2018 в 21:25. |
|
#8
|
||||
|
||||
|
Цитата:
Код:
SomeFRM:= TSomeFRM.Create(Self); try SomeFRM.ShowModal; finally SomeFRM.Free; end; Код:
procedure TSomeFRM.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageDlg('Закрыть окно, уверены?',
mtConfirmation, [mbOk, mbCancel], 0) = mrCancel then
CanClose:= false;
end; |
|
#9
|
|||
|
|||
|
Ну я ее (модалку) так и создаю, но по своим причинам не освобождаю. В этом же и вопрос чего в одном куске кода оно работает хорошо, а в другом не ждет модальный ответ
Код:
begin if SomeFRM.ShowModal = mrYes then begin ..... end; end; Код:
var r: TModalResult;
begin
r:= SomeFRM.ShowModal;
if r= mrYes then
begin
....
end;
end; |
|
#10
|
||||
|
||||
|
Суть вопроса ясна. Но Вы так и не привели минимальный пример для воспроизведения косяка. Догадки строить - неблагодарное дело. Вам тут (и на любом другом портале) насочинять могут тысячи причин. Упростите и себе и нам процедуру поиска ответа на ваш вопрос - предоставьте код на тесты.
|