Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - MainMenu и выход из программы

Ответить
Настройки темы
Delphi - MainMenu и выход из программы

Пользователь


Сообщения: 108
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Добрый день. В проге имеется главное меню, и конечно же стандартная менюшка "Выход", все, что надо сделать при нажатии на эту клавишу, это выполнить Form.Close, но вот в чем проблема, если прописать в обработчике нажатия Close или Form.Close, то компилятор ругается, будто нет соответствующей процедуры и если запустить прогу вывалится AV.
Создавать же обработчик и в нем писать одну единственную команду Close бред... Как быть?

Отправлено: 05:25, 09-02-2013

 

Пользователь


Сообщения: 108
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата lxa85:
ovashdima, это нарушение принципов ООП. Я завтра картинку нарисую для наглядности. Некорректное взаимодействие объектов. »
Спасибо за ответ, значит нельзя. А вот картинка, почему нарушает очень не помешает.

Отправлено: 00:05, 10-02-2013 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата novashdima:
Вот все, что есть в документации »
А так: Vcl.Menus.TMenuItem.OnClick - XE3 API Documentation?

Отправлено: 01:24, 10-02-2013 | #12


Пользователь


Сообщения: 108
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
А так: Vcl.Menus.TMenuItem.OnClick - XE3 API Documentation? »
Эм... то есть вместо процедуры обработки я могу ввести WM_COMMAND?

Последний раз редактировалось novashdima, 10-02-2013 в 01:59.


Отправлено: 01:46, 10-02-2013 | #13


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Я постарался выделить существенную часть:
Цитата:
Delphi

property OnClick: TNotifyEvent read FOnClick write FOnClick stored IsOnClickStored;

Отправлено: 02:03, 10-02-2013 | #14


Пользователь


Сообщения: 108
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Я постарался выделить существенную часть: »
Ага, то есть свойство OnClick-а TNotifyEvent, что являет собой строку-название обработчика, но получается, что Form.Close - функция, но тогда вопрос, почему я могу указать имя произвольной функции в качестве TNotifyEvent, а другую функцию, которая по идее TNotifyEvent - не могу???

Отправлено: 02:44, 10-02-2013 | #15


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Procedural Types (Delphi) - RAD Studio XE3
Events Are Properties - RAD Studio XE3

Во всяком случае — имя, не строку. Почему «по идее»? Как определили? Каков код?

novashdima, я пробовал Delphi один раз, в третьей версии, лет пятнадцать назад . Не стесняйтесь излагать подробно и приводить код, на форуме достаточно просвещённого народа, чтобы помочь.

Отправлено: 05:24, 10-02-2013 | #16


Пользователь


Сообщения: 108
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Во всяком случае — имя, не строку »
Я думал имя это строка...
Цитата Iska:
Почему «по идее»? »
Эм... свойство у event у нас получается типа TNotifyEvent , которая является именем обработчика (функции). При этом свойством одного event указать функцию-обработчик другого event у меня не получилось, может попробовать свойством event назначить свойство другого компонента, то есть свойство OnClick у MainMenu назначить Form.OnClose?

Раз так просите привожу конкретный пример:
Код: Выделить весь код
Есть ExitFileItem: TMenuItem
ExitFileItem.OnClick = ExitProgram

procedure TMainForm.ExitProgram(Sender: TObject);
begin
  Close;
end;
Все, что надо, это значение свойства ExitFileItem.OnClick присвоить в Object Inspector MainForm.Close|MainForm.CloseQuery|Exit|Application.Terminate|Halt|WM_Close|WM_Quit... может еще какие способы закрыть приложение есть, я все что знал сказал)
п.с. при этом все, что меня интересует, так это то, почему я значением свойства могу указать MyFunction
Код: Выделить весь код
type 
   TMainForm = class(TForm)
      procedure MyFunction(Sender: TObject);
То есть процедура у нас MainForm.MyFunction(Sender) и все отлично, а вот указать MainForm.Close(Sender) я не могу, вопрос - почему?

Цитата Iska:
Не стесняйтесь излагать подробно и приводить код, на форуме достаточно просвещённого народа, чтобы помочь. »
Русскоязычные форумы отличаются тем, что в процессе обсуждения проблемы сначала все скажут, какой ТС лох, что он тут забыл, ему в раздел новички или вообще с этого форума, через постов 15-20 начнут обсуждать суть темы и или окажется, что никто не знает, что делать или подскажут вариантов 5 минимум решения проблемы) На англоязычных форумах/чатах если задашь вопрос, то тебе сразу прямо ответят, дадут линк, объяснят что к чему и пожелают удачи)

Последний раз редактировалось novashdima, 10-02-2013 в 06:29.


Отправлено: 06:08, 10-02-2013 | #17


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата novashdima:
Русскоязычные форумы отличаются тем, … »
Что делать , «у каждого свои недостатки». Впрочем, я лично видел всякое.


Цитата novashdima:
а вот указать MainForm.Close(Sender) я не могу, вопрос - почему? »
Возможно, не тот тип? Впрочем, как я писал выше, мои знания давно устарели. Подождём более опытных коллег.

Отправлено: 09:56, 10-02-2013 | #18


Старожил


Сообщения: 295
Благодарности: 30

Профиль | Отправить PM | Цитировать


Так... ТС, напиши в обработчике нажатия на пункт меню команду Application.Terminate, и всё. Только так, а не всякими Form1.Close, можно корректно завершить работу всего приложения.

А если нужно просто закрывать текущую форму, надо приучаться писать Self.Close, ибо если в будущем планируешь стать программистом, тебе, возможно, придётся создавать большое количество идентичных форм с разными именами, поэтому ты никакими FormXXX.Close не отделаешься.

Цитата:
На англоязычных форумах/чатах если задашь вопрос, то тебе сразу прямо ответят, дадут линк, объяснят что к чему и пожелают удачи)
Ты бы лучше вместо чтения англоязычных форумов почитал бы Help к Delphi и хорошие книжки по ней. Да и английский бы заодно выучил, прежде чем дезинформировать нас таким высказыванием.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:12, 10-02-2013 | #19


Пользователь


Сообщения: 108
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Любезный:
ТС, напиши в обработчике нажатия на пункт меню команду Application.Terminate, и всё »
---------------------------
Error
---------------------------
'Application.Terminate' is not a valid identifier.
---------------------------
OK Help
---------------------------
Цитата Любезный:
FormXXX.Close »
У меня в программах не бывает 100 форм, я обхожусь 5-10 и всегда использовал FormXXX.Close или FormXXX.Hide и все было нормально.
Цитата Любезный:
Self.Close »
Что дает Self передавая его в качестве параметра Sender и в таком варианте?

Цитата Любезный:
Ты бы лучше вместо чтения англоязычных форумов почитал бы Help к Delphi »
Все, что было написано в хелпе я приложил, и теперь расскажите, где там написано о том, что можно писать Application.Terminate или о чем еще надо.

Цитата Любезный:
хорошие книжки »
Читал я две книжки, там и про ООП написано и про сами языки, но нигде не написано, что именно можно указывать значением свойства Event

Цитата Любезный:
Да и английский бы заодно выучил, прежде чем дезинформировать нас таким высказыванием. »
У меня среднее знание английского, понять пойму, рассказать - посложнее будет, да и вообще какое ваше дело?
Никто не дезинформирует, это чистейшая правда, пройдитесь по форумам, к нас чтобы выяснить какую-то мелочь надо будет пол часа доказывать, что ты не верблюд.

Последний раз редактировалось novashdima, 10-02-2013 в 17:13.


Отправлено: 16:54, 10-02-2013 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - MainMenu и выход из программы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - Выход в интернет из автоматического задания (программы) thundersilence Windows Server 2008/2008 R2 0 21-09-2012 10:27
VBA - выход из цикла иоанн Программирование и базы данных 2 26-05-2009 22:24
Visual Basic .NET - отследить выход из программы StePashKo Программирование и базы данных 2 07-10-2006 16:32
MainMenu DelphiLesson Программирование и базы данных 2 14-09-2003 16:01
Выход из KDE karlison Общий по Linux 8 03-02-2003 09:42




 
Переход