Как сделать убегающую кнопку в delphi

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Школа программирования Delphi

Портал DelphiSchool является бесплатным проектом, обеспечивающим пользователям быстрый и легкий доступ к урокам программирования на Delphi. Сайт позволяет научиться программировать на Делфи любому, кто хочеть писать свои программы, игры, Android приложения, программы для MAC OC или IOS. Кроме уроков Delphi и статей Delphi, на сайте доступны также и видеоуроки. Практически к каждому уроку, пользователю доступен исходник, изучив который, он сможет наглядно посмотреть как работает та или иная программа, написанная на Делфи. Кроме того мы постараемся прилагать к каждому материалу (статье, уроку, видеоуроку) файлы Delphi, которые будут помогать изучить предоставленный материал.

Каждый кто решил написать свою программу, создать свое приложение, научиться программировать и т.д., найдет на DelphiSchool статьи Delphi, уроки Delphi, видеоуроки Delphi, исходники Delphi, файлы Delphi, изучит компоненты Delphi, посмотрит Delphi примеры и многое другое абсолютно бесплатно. Все о Delphi программировании теперь собрано на одном сайте.
DelphiSchool

В прошлом уроке Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 1. Свойства кнопки, мы рассмотрели основные свойства кнопки, и теперь пришло время рассмотреть события кнопки в Delphi и написать свой первый код программы. В конце статьи, если вам что-нибудь останется не понятным, вы можете скачать исходник Delphi и наглядно посмотреть где и как прописан код программы и как она работает.
Давайте откроем созданный нами ранее проект MyFistButton (File | Open | файл MyFistButton.dpr). Выделяем кнопку SendButton и переходим на вкладку Events (События), которая находится в окне объектного инспектора.Как мы уже знаем, за щелчок клавиши мыши отвечает событие OnClick. Поэтому давайте найдем это событие и дважды кликнем на нем левой кнопкой мыши. Delphi создает в редакторе кода процедуру – обработчик события OnClick.По умолчанию этой процедуре присваивается имя в виде имени компонента (в нашем случае имени нашей кнопки SendButton) плюс имя события без приставки On. Таким образом имя нашей процедуры будет SendButtonClick, а созданная Delphi процедура будет выглядеть так:

procedureTForm1.SendButtonClick(Sender: TObject);
begin

В объектном инспекторе, напротив события OnClick также появляется имя процедуры обработчика. Мы можем изменить это имя на любое другое, или же выбрать имя из ниспадающего списка. Но в нашем случае в ниспадающем списке ничего нет, так как мы ничего еще не делали, и похожих обработчиков события у нас нет.



Рисунок. Объектный инспектор в котором отображена процедура обработчика

Давайте теперь создадим обработчик события для кнопки CloseButton. Делаем все так же как и делали для кнопки SendButton, только внутри процедуры напишем команду Close:


Теперь, если мы запустим программу, сделаем кнопку "Закрыть приложение" активной и нажмем на нее, то программа закроется.
Close – это метод формы, поэтому мы могли бы написать немного по другому:

Между первым и вторым примером нет абсолютно никакой разницы.

Если в этом уроке вам что-нибудь не понятно, то ниже вы можете скачать исходник Delphi и наглядно посмотреть где и как прописан код программы и как она работает.

К уроку (статье) Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 2. События кнопки прилагается исходник, посмотрев который, вы можете ознакомиться с полным исходным кодом программы и посмотреть как работает созданная программа. Исходный код сопровождается комментариями, благодаря чему вы сможете легко в нем разобраться. Но я настоятельно рекомендую делать все самостоятельно. Так вы лучше и быстрее усвоите то, о чем говорилось в этом уроке

Для того чтобы получить возможность скачать исходник Delphi к этому уроку, необходимо посетить сайт рекламодателя. После этого, появится ссылка на исходник Delphi к уроку Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 2. События кнопки
Нажмите на эту ссылку Ссылка

Не забывайте писать свои отзывы об уроке Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 2. События кнопки. Ваша информация об уроке Delphi и TButton. Учимся работать с кнопкой в Delphi. Часть 2. События кнопки может помочь другим людям изучить программирование на Delphi. Также не забывайте проставлять рейтинг урока, ведь от этого зависит его попадание в список лучших уроков Delphi

Каждой процедуре отводится один лист.
На листе расположен текст процедуры с цветным выделением длинных операторов и циклов. Из коментариев операторов формируется оглавление. В приложении приведены публикации MatLab.

Программа позволяет наглядно отобразить информацию о процессе заряда.
Основная информация появляется на подгруженном аккумуляторе через некоторое время.
В приложении приведены аналоги на MatLab. Содержание диаграмм MatLab можно реализовать и здесь.

Excel Наименование листов это помещения и полки. На листе ограничиваем ячейки по конфигурации помещения. Записываем в ячейки что лежит. На листе "Список_инвер" нажимаем левый рисунок - все собирается и по алфавиту.
Наводим на нужную ячейку, нажимаем на правый рисунок и мы на листе с подсветкой что искали.


Выделите кнопку и перейдите в объект­ный инспектор. В нем (рис. 7.2) показаны свойства кнопки. Как видите, большинство свойств нам уже знакомо по свойствам формы, поэтому не будем их рассматри­вать. Есть только одно интересное свойст­во— ModalResult, но с ним мы познако- мимся позже.

Давайте изменим заголовок кнопки. За заголовок формы отвечает свойство caption. Здесь то же самое. Найдите свойство caption и измените содержащийся в нем текст на "Нажми меня".

Сразу ИЗМеНИМ И СВОЙСТВО Name у кноп­ки. Ранее говорилось, что любым компо­нентам и формам лучше давать понятные имена. Поэтому давайте с самого начала будем привыкать к нормальному стилю программирования. Найдите свойство

Кнопка (TButton) в Delphi

Name и измените его на MyFirstButton. Пускай имя кнопки пока не отражает никакого смысла, ведь она еще ничего не делает.

Теперь изменим имя формы. Для этого снимите выделение с кнопки (щелкните мышью в любом месте формы). Вверху окна объектного инспектора должна заго­ реться надпись Forml TFormi , как это показано на рис. 7.3. Нужный для редактиро­вания компонент можно выбрать и в этом списке.

Теперь найдите здесь свойство Name (оно должно быть равно Forml) и измените его значение на MainForm (это переводится как главная форма).

Попробуйте запустить программу (нажмите клавишу ). Оболочка Delphi скомпилирует программу и запустит на выполнение. Теперь можно спокойно на­жимать на кнопку, только ничего в этом случае происходить не будет.

Давайте усложним пример и введем реакцию на событие, когда нажимается кнопка. Для этого перейдите на вкладку Events (События) в окне объектного ин­спектора. Когда мы рассматривали события формы, говорилось, что за щелчок клавиши мыши отвечает событие onclick. Для кнопки есть такое же событие. Найдите его (для этого надо перейти на вкладку объектного инспектора Events (События)) и щелкните по нему дважды. Delphi должен создать в редакторе кода процедуру— обработчик события onclick. По умолчанию ей присваивается имя в виде имени компонента (нашей кнопки) плюс имя события без пристав­ки on. В нашем случае получается, что имя процедуры обработчика будет

Procedure TFormi.MyFirstButtonclick(Sender: TObject);

В объектном инспекторе напротив строки onclick также должно появиться имя процедуры обработчика. Вы можете изменить его, просто напечатав новое имя или выбрав уже существующий обработчик из ниспадающего списка в этой же строке. В нашем случае ниспадающий список пуст, потому что мы больше не дела­ли схожих обработчиков событий, и оно у нас пока единственное.

Давайте вернемся в редактор кода и посмотрим, что там создал для нас Delphi? Это процедура MyFirstButtonclick. Ей передается ОДИН параметр Sender объектного типа TObject. В начале выполнения процедуры в переменной sender будет находиться указатель на объект, который вызвал этот обработчик. Это очень важно, потому что вы без проблем можете сделать так, что одна процеду­ра-обработчик сможет обрабатывать нажатия сразу нескольких кнопок или во­обще компоненты разного типа. По содержимому этой переменной можно уз­нать, какой именно компонент сгенерировал событие. Чуть позже вы увидите этот трюк на практике.

Давайте напишем внутри процедуры (между операторными скобками begin и end) команду close. Это метод формы, который закрывает процедуру. Теперь наша процедура должна выглядеть как:

Procedure TFormi.MyFirstButtonclick(Sender: TObject);

Попробуйте запустить программу и нажать на кнопку. Программа закроется.

Так как close — это метод формы, мы могли написать и так:

Procedure TFormi.MyFirstButtonclick(Sender: TObj ect);

Разницы между первым и вторым вариантом нет абсолютно никакой. Так поче­му же в первом случае написано просто close, не указывая имя объекта, метод ко­торого используется? Мы же знаем, что методы нужно вызывать в форме имя_объекта.имя_метода. Все очень просто. Процедура обработчика события отно­сится к объекту Forml (об этом говорит объявление процедуры TForm1.MyFirstButtonclick), и внутри нее можно использовать его свойства и ме­тоды без указания владельца. По умолчанию будет браться Forml. Но если мы за­хотим из этой процедуры закрыть другую форму, например, Form2, то придется указать, что необходим объект именно Form2.

procedure TFormi.MyFirstButtonclick(Sender: TObj ect);

Если мы просто напишем close, то закроется Forml, а не Form2. Когда вы пише­те имя какой-то процедуры, то сначала поиск этого имени осуществляется среди членов класса, внутри которого написан код.

В объектном инспекторе напротив строки onclick также должно появиться имя процедуры обработчика. Вы можете изменить его, просто напечатав новое имя или выбрав уже существующий обработчик из ниспадающего списка в этой же строке. В нашем случае ниспадающий список пуст, потому что мы больше не дела­ли схожих обработчиков событий, и оно у нас пока единственное.

Давайте вернемся в редактор кода и посмотрим, что там создал для нас Delphi? Это процедура MyFirstButtonclick. Ей передается ОДИН параметр Sender объектного типа TObject. В начале выполнения процедуры в переменной sender будет находиться указатель на объект, который вызвал этот обработчик. Это очень важно, потому что вы без проблем можете сделать так, что одна процеду­ра-обработчик сможет обрабатывать нажатия сразу нескольких кнопок или во­обще компоненты разного типа. По содержимому этой переменной можно уз­нать, какой именно компонент сгенерировал событие. Чуть позже вы увидите этот трюк на практике.

Давайте напишем внутри процедуры (между операторными скобками begin и end) команду close. Это метод формы, который закрывает процедуру. Теперь наша процедура должна выглядеть как:

> Нужна кнопка типа TButton или TBitBtn, но только чтобы она при нажатии
> фиксировалась в положении Down а при повторном ее нажатии возвращалась в
> положение Up. Такой себе выключатель. Подходящего контрола мне найти
> пока не удалось.

Что-то ты плохо искал - достаточно стандартнейшего CheckBox-а и 1
строчки кода:

SetWindowLong(CheckBox1.Handle, GWL_STYLE,
GetWindowLong(CheckBox1.Handle, GWL_STYLE) or BS_PUSHLIKE);

Posted via ActualForum NNTP Server 1.3

TSpeedButton
. GroupIndex = 1
. AllowAllUp = True

Пример закрепления окна поверх остальных окон. Через TAction.

> А еще через GetDesktopWindow + GetDC. Прям на рабочем столе. В особо
> извращенной позе.

С этого места, пожалуйста, поподробнее .

Posted via ActualForum NNTP Server 1.3

> Нужна кнопка типа TButton или TBitBtn, но только чтобы она при нажатии
> фиксировалась в положении Down а при повторном ее нажатии возвращалась в
> положение Up. Такой себе выключатель. Подходящего контрола мне найти
> пока не удалось.

Что-то ты плохо искал - достаточно стандартнейшего CheckBox-а и 1
строчки кода:

SetWindowLong(CheckBox1.Handle, GWL_STYLE,
GetWindowLong(CheckBox1.Handle, GWL_STYLE) or BS_PUSHLIKE);
Posted via ActualForum NNTP Server 1.3

Изящное решение подсказали TSpeedbutton, все остальное именно изврат, да еще в какой извращенной форме. Но нашим програмерам не привыкать извращаться. Вот небольшая выдержка из хелпа:

Если GroupIndex > 0 и AllowAllUp = true, то кнопка при щелчке пользователя на ней погружается и остается в нажатом состоянии. При повторном щелчке пользователя на кнопке она освобождается и переходит в нормальное состояние (именно для того, чтобы освобождение кнопки состоялось, необходимо задать AllowAllUp = true). Если свойство Down во время проектирования установлено равным true, то исходное состояние кнопки - нажатое.

Если GroupIndex > 0 и AllowAllUp = true, то кнопка при щелчке пользователя на ней погружается и остается в нажатом состоянии. При повторном щелчке пользователя на кнопке она освобождается и переходит в нормальное состояние (именно для того, чтобы освобождение кнопки состоялось, необходимо задать AllowAllUp = true). Если свойство Down во время проектирования установлено равным true, то исходное состояние кнопки - нажатое.

Читайте также: