3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как сделать кнопку выхода в делфи

Закрытие формы нажатием Escape в Delphi

Для удобства работы оператора многооконной программы иногда полезно сделать функционал закрытия текущей формы по нажатию клавиши Escape. Стандартный выход нажатием мышкой на кнопке выхода окна (крестик в верхнем правом углу) иногда действительно может быть менее удобным, чем одна клавиша на клавиатуре. Это может быть, например, при заполнении последовательно нескольких форм с переходами на второстепенные формы для выбора каких-то дополнительных значений или настроек.

Реализовать эту функцию не сложно. Создадим новую программу с пустой формой. Далее добавим для события OnKeyPress формы программный код, выполняющий закрытие формы (метод Close). Причем, перед ним должно быть условие, проверяющее, что была нажата именно клавиша Escape. Без такого условия программа будет закрываться при нажатии на любую клавишу. Вот пример готового кода:

procedure TMyForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #27 then Close;
end ;

Здесь, Key – это переменная, содержащая код нажатой клавиши; #27 код символа Esc; Close – команда закрытия формы.

Если сейчас запустить программу и нажать Esc, программа, как и планировалось, закроется. Однако, еще не все. Если сейчас добавить на форму любой компонент, то фокус программы будет передан ему. Это значит, что пока на форме нет ничего, то запуская программу, события клавиатуры и мыши срабатывают именно для формы и наша программа корректно работает. Но, если активным будет какой-либо другой компонент (фокус), то по нажатию кнопки на клавиатуре будет срабатывать событие OnKeyPress этого компонента, а не формы.

Установив сейчас компонент Edit на форму и запустив программу, можно убедиться, что нажатие на Esc не дает никакого результата. Ведь для события OnKeyPress нашего Edit не было ничего указано.

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

Читать еще:  Как сделать продухи в фундаменте

Следовательно, нужно сделать так, чтобы форма реагировала на событие OnKeyPress, не мешая этому же событию срабатывать в других компонентах. Для этого нужно настроить свойство формы KeyPreview. Это логическое свойство как раз отвечает за порядок обработки событий клавиатуры. По умолчанию оно равно False (Ложь). Это значит, что событие обрабатывается текущим активным компонентом. Присваивая этому свойству значение True (Истина), мы указываем, что в начале события клавиатуры будут выполняться обработчиками событий формы, а затем активным компонентом.

Т.к. в инспекторе объектов этого свойства формы нет, можно настроить его программно, на событие создания формы OnCreate. Добавим в программу такой код:

procedure TMyForm.FormCreate(Sender: TObject);
begin
MyForm.KeyPreview := True;
end ;

Теперь, при запуске программы (если быть точным, то при создании формы), свойству формы KeyPreview будет присвоено значение True.

После такой доработки, программа будет корректно закрываться по нажатию на Escape при любых имеющихся компонентах в окне. Причем, даже тогда, когда какие-то из них будут содержать свои процедуры на событие OnKeyPress, они так же будут правильно выполняться.

Закрытие формы нажатием Escape в Delphi

Для удобства работы оператора многооконной программы иногда полезно сделать функционал закрытия текущей формы по нажатию клавиши Escape. Стандартный выход нажатием мышкой на кнопке выхода окна (крестик в верхнем правом углу) иногда действительно может быть менее удобным, чем одна клавиша на клавиатуре. Это может быть, например, при заполнении последовательно нескольких форм с переходами на второстепенные формы для выбора каких-то дополнительных значений или настроек.

Реализовать эту функцию не сложно. Создадим новую программу с пустой формой. Далее добавим для события OnKeyPress формы программный код, выполняющий закрытие формы (метод Close). Причем, перед ним должно быть условие, проверяющее, что была нажата именно клавиша Escape. Без такого условия программа будет закрываться при нажатии на любую клавишу. Вот пример готового кода:

Читать еще:  Как сделать сыр из творога в микроволновке

procedure TMyForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #27 then Close;
end ;

Здесь, Key – это переменная, содержащая код нажатой клавиши; #27 код символа Esc; Close – команда закрытия формы.

Если сейчас запустить программу и нажать Esc, программа, как и планировалось, закроется. Однако, еще не все. Если сейчас добавить на форму любой компонент, то фокус программы будет передан ему. Это значит, что пока на форме нет ничего, то запуская программу, события клавиатуры и мыши срабатывают именно для формы и наша программа корректно работает. Но, если активным будет какой-либо другой компонент (фокус), то по нажатию кнопки на клавиатуре будет срабатывать событие OnKeyPress этого компонента, а не формы.

Установив сейчас компонент Edit на форму и запустив программу, можно убедиться, что нажатие на Esc не дает никакого результата. Ведь для события OnKeyPress нашего Edit не было ничего указано.

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

Следовательно, нужно сделать так, чтобы форма реагировала на событие OnKeyPress, не мешая этому же событию срабатывать в других компонентах. Для этого нужно настроить свойство формы KeyPreview. Это логическое свойство как раз отвечает за порядок обработки событий клавиатуры. По умолчанию оно равно False (Ложь). Это значит, что событие обрабатывается текущим активным компонентом. Присваивая этому свойству значение True (Истина), мы указываем, что в начале события клавиатуры будут выполняться обработчиками событий формы, а затем активным компонентом.

Т.к. в инспекторе объектов этого свойства формы нет, можно настроить его программно, на событие создания формы OnCreate. Добавим в программу такой код:

Читать еще:  Как сделать ракушку из волос

procedure TMyForm.FormCreate(Sender: TObject);
begin
MyForm.KeyPreview := True;
end ;

Теперь, при запуске программы (если быть точным, то при создании формы), свойству формы KeyPreview будет присвоено значение True.

После такой доработки, программа будет корректно закрываться по нажатию на Escape при любых имеющихся компонентах в окне. Причем, даже тогда, когда какие-то из них будут содержать свои процедуры на событие OnKeyPress, они так же будут правильно выполняться.

Пишем программы на Delphi. «Бегающая» кнопка

Многие начинающие программисты мечтают написать программу «шутку». В рунете есть очень много шуточных программ.
Например «Бегающая» кнопка. Сегодня я опишу как написать такую программу.

Создание формы

Для начала создадим форму для приложения:
File >> New >> Application

Далее создадим текст где и будет наш вопрос: Нажмите на кнопку «А».

Текстовую строку создали, отлично!

Сейчас создадим две кнопки:

Нам нужно изменить текст строки и текст кнопки. Нажмём на кнопкутекст. В окошке «Object Inspector» ищем вкладку «Caption». Там мы меняем текст кнопкитекстовой строки.
Создание формы окончено.

Написание кода программы

Мы начнём с кнопки «Да». Клацните два раза по кнопке. Там мы увидим форму, где можно ввести наш код. Там мы введём код:

Когда приложение запуститься, при нажатии на «Да» выскочит сообщение: «Я знал что ты идиот».

Перейдём к кнопке «Нет». Клацните два раза по кнопке. В форме введём:

Вы спросите: «А где код „убегающей“ кнопки?». А это самое интересное. Переходим в окошко «Object Inspector». Там будет вкладочка «Events». Во вкладке ищем: «On MouseMove» и клацаем по пустому полю два раза.

В этом поле вводим:

Внимание: Перед «begin» введите


Ну и всё! Наша программа готова! Нажимаем кнопку «Play» которая находиться на панели, и радуемся!

Я приложил исходник этой программы в случае если что то не получиться: Скачать

Источники:

http://space-base.ru/library/?book=98
http://space-base.ru/library/?book=98
http://korzh.net/2009-12-pishem-programmy-na-delphi-begayushhaya-knopka.html

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector