Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2014, 23:31   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
это все таки функция
Я не зря упомянул. Манул кури. OnClose тоже отрабатывает не зависимо от способа выхода. Как там собирался анализировать?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.06.2014, 23:34   #12
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Цитата:
Я не зря упомянул. Манул кури. OnClose тоже отрабатывает не зависимо от способа выхода. Как там собирался анализировать?
хз как анализировать, но, мне интересно почему оно выбивает ошибку на OnClose и OnHide, реализация на OnClose или OnHide и есть правильной.
FleXik вне форума Ответить с цитированием
Старый 08.06.2014, 23:39   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

По твоему коду не видно почему. Гадание на кофейной гуще
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.06.2014, 23:44   #14
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Аватар, ща максимально подробно опишу проблему и дам код, жди

Значит так, есть два sRadioButton

Код:
procedure TForm1.sRadioButton2Click(Sender: TObject);
begin
  Form3.ShowModal;
  //Form3.sEdit1.Clear;

  if Form3.sButton2.Tag=1 then
  Form1.sRadioButton1.Checked:=True;

end;

procedure TForm3.sButton1Click(Sender: TObject);
begin

    if Form3.sEdit1.Text<>'' then
    Form3.Close;
    
  Form3.sButton2.Tag:=0;
  Form1.sRadioButton2.Checked:=True;
end;

procedure TForm3.sButton2Click(Sender: TObject);
begin
  Form3.sButton2.Tag:=1;
  Form3.sEdit1.Clear;
  Form3.Close;
end;


Задача:
1. Если нажата кнопка "Отмена" или нажат красный крестик - Form1.sRadioButton1.Checked:=True; + поле sEdit1 стирается
2. Если поле sEdit1 не пустое (выше в коде проверка) и нажата кнопка "ОК" - Form1.sRadioButton2.Checked:=True;

Все просто, проще не куда, логично было бы сделать именно на OnClose или OnHide т.к по сути другого решения проблемы я не вижу.


P.S на скрине Form1 это Form3 (просто з нуля накидал по-быстрому, в проэкте у меня это окно - Form3)
Изображения
Тип файла: jpg форма.jpg (12.1 Кб, 29 просмотров)

Последний раз редактировалось Stilet; 09.06.2014 в 00:12.
FleXik вне форума Ответить с цитированием
Старый 09.06.2014, 09:22   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

У-у. Стремление к нулю. sButton2Click не нужен. Сделай sButton2.ModalResult:=mrCancel
Код:
procedure TForm1.sRadioButton2Click(Sender: TObject);
begin 
  if Form3.ShowModal=mrOk then sRadioButton2.Checked:=True 
                          else sRadioButton1.Checked:=True;
end;

procedure TForm3.sButton1Click(Sender: TObject);
begin
   if sEdit1.Text='' then ModalResult:=mrCancel else ModalResult:=mrOk;     
end;
PS - код не истина в последней инстанции - просто идею предлагаю без корявых заморочек
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.06.2014 в 09:30.
Аватар вне форума Ответить с цитированием
Старый 09.06.2014, 10:10   #16
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

Аватар, код истина в последней инстанции :D все пашет идеально, благодарочка (весы нажал) + я еще на кнопку sButton2 добавил Form3.Close;

P.S сначала не понял что проверка if Form3.ShowModal=mrOk показывает форму и дополнительно прописал Form3.ShowModal и Form3 два раза открылась, теперь знать буду, еще раз спасибо.
FleXik вне форума Ответить с цитированием
Старый 09.06.2014, 10:20   #17
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  if InputQuery('Моя прога', 'Введите Ваш Возраст', s) then
  begin
    // нажали ОК и в s лежит строка введённая юзером
    // можно попробовать преобразовать s в число с помощью StrToIntDef 
  end
  else
    // нажали отмена или крестик
end;
Советую изучать инструментарий, которым Вы пользуетесь, чтобы не городить заборовелосипедов.
phomm вне форума Ответить с цитированием
Старый 09.06.2014, 10:22   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
я еще на кнопку sButton2 добавил Form3.Close
И зачем? Этот обработчик вообще не нужен - свойство ModalResult кнопки не равное mrNone при клике на неё и приведет к закрытию модальной формы. В модальных формах вообще ни где не нужен в явной форме метод Close
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.06.2014, 11:13   #19
FleXik
Форумчанин
 
Регистрация: 01.11.2012
Сообщений: 770
По умолчанию

phomm, я и использовал InputBox до этого, но,

во-первых - там шрифт окна по стандарту Microsoft Sans Serif а в проэктах я последнее время всегда использую шрифт Tahoma, я люблю чтобы все было идеально поэтому такие мелочи меня сильно бесят.

во-вторых - мне не понравилась длина кнопок "ОК" и "Отмена" в InputBox + у кнопки "ОК" TabStop стояло в True

в третьих - там без InputQuery нельзя было определить какая из кнопок нажата (а мне надо было отслеживать, при этом ModalResult в InputBox не помогал ), а с InputQuery не хотел заморачиваться

Я до конца не хотел делать дополнительную форму, но, пришлось, и результатом я очень-очень доволен, от InputBox отказался и только рад этому.

Цитата:
И зачем? Этот обработчик вообще не нужен - свойство ModalResult кнопки не равное mrNone при клике на неё и приведет к закрытию модальной формы. В модальных формах вообще ни где не нужен в явной форме метод Close
ща посмотрю и отпишусь.

Аватар, Form3.Close нужен, да, без него срабатывает закрытие формы, но на кнопку "Отмена" надо нажать 2 раза чтобы форма закрылась поэтому Form3.Close все таки оставлю.

Последний раз редактировалось FleXik; 09.06.2014 в 11:15.
FleXik вне форума Ответить с цитированием
Старый 09.06.2014, 12:20   #20
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
надо нажать 2
Значит не то сделал. Не нужен там Close и OnClick
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как выключить работу процедуры(выключить\переключить)? IronFist Помощь студентам 7 31.05.2012 20:46
формула дает ошибку WIC Microsoft Office Excel 3 01.12.2010 20:51
Что дает лицензия? misher Свободное общение 52 13.08.2010 21:20
Выключить кнопку chillUA Microsoft Office Excel 1 20.04.2010 21:24
Одну и ту же форму использовать как MDI-child форму и как модальную форму? PrimaryPro Общие вопросы Delphi 2 10.03.2010 20:52