![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не дать показаться форме
upc © (2011-11-17 16:59:00)Здравствуйте,
как можно сделать, что бы при OnShow (в случае выполнения определенного условия) форма не могла показаться. Close делать нельзя, так как форма еще не показана и вообще ошибка выдается (Can not change Visible in OnShow or OnHide, или как-то так). Может надо писать код не в OnShow? Но где тогда?
Dennis I. Komarov (2011-11-19 23:36:00) [1]
> "Бритва" Оккама - "Не множь сущности без необходимости"
> или, в первоисточнике от Аристотеля - "Принцип достаточного
> основания".
Браво! :)
Jeer (2011-11-18 23:33:00) [2]
> То есть лучше всё-таки переделать на метод Jeer'а?
"Бритва" Оккама - "Не множь сущности без необходимости" или, в первоисточнике от Аристотеля - "Принцип достаточного основания".
upc (2011-11-18 22:31:00) [3]Это вы к тому, что я, использовав данную реализацию и не поняв до конца как она работает, могу накосячить где-то или не понять из-за чего потом будут глюки? Пишите пожалуйста подробнее, а не эвфемизмами.
То есть лучше всё-таки переделать на метод Jeer'а?
Dennis I. Komarov (2011-11-18 09:18:00) [4]
> Омлет © (17.11.11 22:18) [21]
Детям спички нельзя давать :)
Jeer (2011-11-17 23:19:00) [5]
> upc (17.11.11 23:13) [24]
>
> А вы ведь правы. Надо мне подумать над этим.
См. Jeer © (17.11.11 21:21) [20]
upc (2011-11-17 23:13:00) [6]А вы ведь правы. Надо мне подумать над этим.
Но, в любом случае, решение для сабжа которое я хотел - нашел.
Jeer (2011-11-17 23:01:00) [7]Остался за кормой вопрос - если форму не надо показывать, может не стоит ее и создавать ?
Хотя.. всяко бывает:
Хамелеон - тот тоже мимикрирует под ситуацию.
upc (2011-11-17 22:42:00) [8]Омлет, спасибо большое! То что надо. Я так понял, это реализация того, что посоветовал Юрий Зотов?
Омлет (2011-11-17 22:18:00) [9]> upc (17.11.11 19:25) [18]
type
TForm1 = class(TForm)
public
procedure Show;
end;
procedure TForm1.Show;
begin
if A <> B then
inherited Show;
end;
Jeer (2011-11-17 21:21:00) [10]if (A=B) and (B=D) or (E=F) then
with TfmMy.Create(Self) do
try
FormStyle := fsNormal;
Visible := False;
ShowModal;
finally
Release;
end;
Оформляем (A=B) and (B=D) or (E=F) функцией и вуаля
Function DoFromShow(A,B,C,D,E,F): boolean;
KilkennyCat (2011-11-17 19:37:00) [11]что значит не делать новых функций? как-то же условие показа надо обрабатывать?
единственное, что не надо их везде городить, сделать одну универсальную, с параметрами, если необходимо учитывать откуда и как она вызывается. и все.
а то, что забудешь или нет - ну это не решаемая проблема.
помнить и думать придется. И писать комментарии. И техзадание. и план. и т.д.
upc (2011-11-17 19:25:00) [12]Не хотелось делать новых функций: вдруг потом забуду через некоторое время, что форму нужно вызывать через какой-нибудь MyShow, а не Show и будут глюки.
upc (2011-11-17 19:24:00) [13]Я думаю вы всё же правы, сделаю отдельно функцией, наверное другого выхода нет.
KilkennyCat (2011-11-17 18:55:00) [14]
> Можно, конечно, везде где делается вызов формы написать
> это условие и в зависимости от него делать или не делать
> Show, но это ведь не рационально!
конечно нет! это просто ужас: вместо myForm.Show придется писать if CanMyFormShow then myForm.Show !
э
> Anatoly Podgoretsky © (17.11.11 17:45) [13]
это в паскале есть. а у него гоуту только.
_Юрий (2011-11-17 18:41:00) [15]
procedure TMyForm.ShowIfCan();
begin
if (conditional)
then Show();
end;
Anatoly Podgoretsky (2011-11-17 17:46:00) [16]> upc (17.11.2011 17:20:06) [6]
Беда, но НЕТ
Anatoly Podgoretsky (2011-11-17 17:45:00) [17]> upc (17.11.2011 17:14:04) [4]
Ты в курсе что есть такая языковая конструкция, как PROCEDURE
Anatoly Podgoretsky (2011-11-17 17:44:00) [18]> upc (17.11.2011 17:08:02) [2]
Просто не нужно ее создавать
Юрий Зотов (2011-11-17 17:44:00) [19]upc (17.11.11 17:20) [6]
> было бы в OnShow CanShow, тогда проблема была бы решена.
> Нет ли подобного чего-либо?
Если метод Show виртуальный или динамический, то замещаем его и проблема исчезает.
OW (2011-11-17 17:41:00) [20]TCustomForm
CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
оттуда вызывается DoShow
откуда OnShow
если сесть на это сообщение и гасить?