Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.02.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
upc   (2011-11-17 16:59) [0]

Здравствуйте,
как можно сделать, что бы при OnShow (в случае выполнения определенного условия) форма не могла показаться. Close делать нельзя, так как форма еще не показана и вообще ошибка выдается (Can not change Visible in OnShow or OnHide, или как-то так). Может надо писать код не в OnShow? Но где тогда?


 
Jeer ©   (2011-11-17 17:04) [1]

Ты о главном расскажи, тогда ответы попадут ближе.


 
upc   (2011-11-17 17:08) [2]

Форма может вызываться из многих частей программы, то есть много где делается Show для данной формы.
Но, если одно условие не выполняется, то мне не нужно, что бы она показывалась.
Можно, конечно, везде где делается вызов формы написать это условие и в зависимости от него делать или не делать Show, но это ведь не рационально!
Лучше сделать эту проверку где-нибудь в одном месте...


 
Dennis I. Komarov ©   (2011-11-17 17:13) [3]


> то есть много где делается Show для данной формы.
> Но, если одно условие не выполняется, то мне не нужно, что
> бы она показывалась.

Какие еще могут быть вопросы? Show - Показать


 
upc   (2011-11-17 17:14) [4]

Не писать же мне это условие везде, где делается Show (а показывать форму, как я уже сказал, нужно из разных мест программы).
Лучше написать один раз это условие, но только я не знаю где.


 
Dennis I. Komarov ©   (2011-11-17 17:18) [5]

procedure TryShow...
begin
 if any then YourForm.Show;
end;


Хотя это ректально. Завтра еще что-нить понадобится...


 
upc   (2011-11-17 17:20) [6]

Да, это выглядит криво.
Вот в OnClose есть CanClose - было бы в OnShow CanShow, тогда проблема была бы решена. Нет ли подобного чего-либо?


 
Dennis I. Komarov ©   (2011-11-17 17:24) [7]


> Да, это выглядит криво.

Сам того хотел...


 
upc   (2011-11-17 17:24) [8]

Я ошибся: в OnCloseQuery, а не OnClose.


 
Dennis I. Komarov ©   (2011-11-17 17:35) [9]


> в OnCloseQuery

У тебя должны быть очень веские причины, чтобы его использовать.


 
OW ©   (2011-11-17 17:41) [10]

TCustomForm
CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;

оттуда вызывается DoShow
откуда OnShow

если сесть на это сообщение и гасить?


 
Юрий Зотов ©   (2011-11-17 17:44) [11]

upc   (17.11.11 17:20) [6]
> было бы в OnShow CanShow, тогда проблема была бы решена.
> Нет ли подобного чего-либо?

Если метод Show виртуальный или динамический, то замещаем его и проблема исчезает.


 
Anatoly Podgoretsky ©   (2011-11-17 17:44) [12]

> upc  (17.11.2011 17:08:02)  [2]

Просто не нужно ее создавать


 
Anatoly Podgoretsky ©   (2011-11-17 17:45) [13]

> upc  (17.11.2011 17:14:04)  [4]

Ты в курсе что есть такая языковая конструкция, как PROCEDURE


 
Anatoly Podgoretsky ©   (2011-11-17 17:46) [14]

> upc  (17.11.2011 17:20:06)  [6]

Беда, но НЕТ


 
_Юрий   (2011-11-17 18:41) [15]

procedure TMyForm.ShowIfCan();
begin
 if (conditional)
   then Show();
end;


 
KilkennyCat ©   (2011-11-17 18:55) [16]


> Можно, конечно, везде где делается вызов формы написать
> это условие и в зависимости от него делать или не делать
> Show, но это ведь не рационально!

конечно нет! это просто ужас: вместо myForm.Show придется писать if CanMyFormShow then myForm.Show !
э


> Anatoly Podgoretsky ©   (17.11.11 17:45) [13]

это в паскале есть. а у него гоуту только.


 
upc   (2011-11-17 19:24) [17]

Я думаю вы всё же правы, сделаю отдельно функцией, наверное другого выхода нет.


 
upc   (2011-11-17 19:25) [18]

Не хотелось делать новых функций: вдруг потом забуду через некоторое время, что форму нужно вызывать через какой-нибудь MyShow, а не Show и будут глюки.


 
KilkennyCat ©   (2011-11-17 19:37) [19]

что значит не делать новых функций? как-то же условие показа надо обрабатывать?
единственное, что не надо их везде городить, сделать одну универсальную, с параметрами, если необходимо учитывать откуда и как она вызывается. и все.
а то, что забудешь или нет - ну это не решаемая проблема.
помнить и думать придется. И писать комментарии. И техзадание. и план. и т.д.


 
Jeer ©   (2011-11-17 21:21) [20]

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;


 
Омлет ©   (2011-11-17 22:18) [21]

> 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;


 
upc   (2011-11-17 22:42) [22]

Омлет, спасибо большое! То что надо. Я так понял, это реализация того, что посоветовал Юрий Зотов?


 
Jeer ©   (2011-11-17 23:01) [23]

Остался за кормой вопрос - если форму не надо показывать, может не стоит ее и создавать ?

Хотя.. всяко бывает:
Хамелеон - тот тоже мимикрирует под ситуацию.


 
upc   (2011-11-17 23:13) [24]

А вы ведь правы. Надо мне подумать над этим.
Но, в любом случае, решение для сабжа которое я хотел - нашел.


 
Jeer ©   (2011-11-17 23:19) [25]


> upc   (17.11.11 23:13) [24]
>
> А вы ведь правы. Надо мне подумать над этим.


См.  Jeer ©   (17.11.11 21:21) [20]


 
Dennis I. Komarov ©   (2011-11-18 09:18) [26]


> Омлет ©   (17.11.11 22:18) [21]

Детям спички нельзя давать :)


 
upc   (2011-11-18 22:31) [27]

Это вы к тому, что я, использовав данную реализацию и не поняв до конца как она работает, могу накосячить где-то или не понять из-за чего потом будут глюки? Пишите пожалуйста подробнее, а не эвфемизмами.
То есть лучше всё-таки переделать на метод Jeer"а?


 
Jeer ©   (2011-11-18 23:33) [28]


> То есть лучше всё-таки переделать на метод Jeer"а?


"Бритва" Оккама - "Не множь сущности без необходимости" или, в первоисточнике от Аристотеля - "Принцип достаточного основания".


 
Dennis I. Komarov ©   (2011-11-19 23:36) [29]


> "Бритва" Оккама - "Не множь сущности без необходимости"
> или, в первоисточнике от Аристотеля - "Принцип достаточного
> основания".

Браво! :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.02.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.005 c
2-1321558497
3asys
2011-11-17 23:34
2012.02.26
передача картинки в потоке через сокет


2-1320762578
я
2011-11-08 17:29
2012.02.26
Вывод сообщения на экран


15-1320480875
wl
2011-11-05 11:14
2012.02.26
Предложения по улучшению работы форума


2-1321616574
alex-2011h
2011-11-18 15:42
2012.02.26
DBGrid и ScrollBar


6-1223555585
Alex603081
2008-10-09 16:33
2012.02.26
Соединение по MAC адресу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский