Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 23

Выяснить, какая из 5-ти кнопок нажата

26.01.2012, 10:19. Показов 2399. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
На форме 5 кнопок.
В коде процедура: procedure TForm1.EditorKeyPress(Sender: TObject; var Key: Char);
Я хочу в этой процедуре предложить несколько вариантов действий с условием, что если нажата кнопка1 - такой-то вариант действий, если кнопка2... и т.д.
Как написать это условие для проверки какая кнопка нажата?
Извините за длинное изложение, хочу избежать непонимания.
Заранее спасибо за ответ.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.01.2012, 10:19
Ответы с готовыми решениями:

SpeedButton: узнать какая из кнопок нажата
Есть 5 кнопок SpeedButton, AllowAllUp выставлены в true, GroupIndex у всех 1 , как узнать какая нажата?

Как узнать какая из кнопок нажата?
<?php $all_album_bd = mysqli_query($connection,"SELECT `id_album`,`name_album` FROM `album`"); // получаем альбомы из базы...

Как определить какая кнопка из кучи кнопок нажата?
Здравствуйте! Не хотелось бы вешать код на каждую кнопку, если их допустим 480 =)) Как можно все объединить, допустим так: Private...

13
 Аватар для NIch
401 / 312 / 74
Регистрация: 17.03.2010
Сообщений: 1,119
26.01.2012, 11:35
Один из вариантов.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const
  Act1 = 1;// Метка действия
  Act2 = 2;
var
  Act : byte;// Переменная действия
// Нажатие на 1-ю кнопку
OnButton1Click;
begin
  Act := Act1;// Действие 1
end;
// Нажатие на 2-ю кнопку
OnButton2Click;
begin
  Act := Act2;// Действие 2
end;
// Кнопка выполнить действие
OnButtonClick;
begin
  case Act of// В зависимости от метки выполнить нужное действие
    Act1: Action1;
    Act2: Action2;
  end;
end;
0
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 23
26.01.2012, 12:01  [ТС]
Во первых спасибо!
Во вторых, я правильно понял, что вы предложили сразу два варианта: с кейсом и без?
Или все как написано воспринимать?

Добавлено через 6 минут
И всё это внутри procedure TForm1.EditorKeyPress(Sender: TObject; var Key: Char);?
0
 Аватар для NIch
401 / 312 / 74
Регистрация: 17.03.2010
Сообщений: 1,119
26.01.2012, 12:36
Цитата Сообщение от writer53 Посмотреть сообщение
вы предложили сразу два варианта: с кейсом и без?
Нет это один вариант.
Возможно я не совсем понял задачи.
Что будешь писать тут?
Цитата Сообщение от writer53 Посмотреть сообщение
TForm1.EditorKeyPress(Sender: TObject; var Key: Char);
И как будешь предлагать действия?
Цитата Сообщение от writer53 Посмотреть сообщение
предложить несколько вариантов действий
Я предложил вариант, например как в фотошопе при нажатии на кнопку выбирается нужный инструмент.
0
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 23
26.01.2012, 12:52  [ТС]
Я хочу нажать на Button1. procedure EditorKeyPress(Sender: TObject; var Key: Char); проверит, что я нажал именно на Button1 и далее все символы будут вводится как прописные, плюс еще набор настроек.
Если я нажму на Button2, то эта процедура проверит, что Button2 и другой набор настроек.

Добавлено через 4 минуты
Вопрос в том как написать условие проверки какая нажата клавиша, что конкретно вставить после пресловутого if (ифа, на всякий случай вдруг абракадабра выскочит) перед набором действий.
0
 Аватар для NIch
401 / 312 / 74
Регистрация: 17.03.2010
Сообщений: 1,119
26.01.2012, 12:55
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Глобально
const
  Act1 = 1;// Метка действия
  Act2 = 2;
var
  Act : byte;// Переменная действия
// Далее описание процедур
// Нажатие на 1-ю кнопку
procedure Button1Click(Sender : TObject);
begin
  Act := Act1;// Действие 1
end;
// Нажатие на 2-ю кнопку
procedure Button2Click(Sender : TObject);
begin
  Act := Act2;// Действие 2
end;
// Реакция на нажатие клавиши
procedure EditorKeyPress(Sender: TObject; var Key: Char); 
begin
  case Act of// В зависимости от метки выполнить нужное действие
    Act1: Action1;// Тут нужные тебе настройки
    Act2: Action2;
  end;
end;
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
26.01.2012, 12:58
можно так
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.Button1Click(Sender: TObject);
begin
case (sender as tbutton).Tag of
1:showmessage('кнопка 1');
2:showmessage('кнопка 2');
3:showmessage('кнопка 3');
end;
end;
и эту процедуру привязать ко всем кнопкам. а для каждой кнопки установить TAG типа 1....
0
 Аватар для NIch
401 / 312 / 74
Регистрация: 17.03.2010
Сообщений: 1,119
26.01.2012, 13:03
Это да, но нужно данные настройки сохранить, т.е. при нажатии в эдит, обработчик должен знать какая кнопка была нажата последней.
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
26.01.2012, 13:11
в этом случае можно использовать одну глобальную переменную. ее значение и будет сохранятся последним при нажатии. вариантов много
0
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 23
26.01.2012, 13:13  [ТС]
А вот проверки просто: if нажата Button1 then, что так нельзя?
Я нигде не могу именно это найти. Или это безграмотно?
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
26.01.2012, 13:16
writer53, если много кнопок то проверок будет куча. такое годится при 2-3 проверках. а больше... время работы увеличится
0
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 23
26.01.2012, 13:21  [ТС]
Кнопок всего пять. Всё что будет делать это приложение - это работать с текстом.
0
1866 / 1186 / 192
Регистрация: 27.03.2009
Сообщений: 4,603
26.01.2012, 13:22
я понимаю. тогда код получится
Delphi
1
2
3
4
if button1 then 1
if button2 then 2
if button3 then 3
...
0
0 / 0 / 0
Регистрация: 26.01.2012
Сообщений: 23
26.01.2012, 14:02  [ТС]
Всем спасибо.
Я сделал так: создал глобальную переменную, в обработке клика на каждой кнопке присвоил глобальной переменной своё значение, и затем в обработчике клика на любую кнопку сделал проверку глобальной переменной, ну и реакцию какую где надо.
Еще раз всем спасибо за доброжелательные суждения и мнения!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2012, 14:02
Помогаю со студенческими работами здесь

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

Показать модальный диалог с N кнопок и проверить какая из них нажата
кнопки не являются по смыслу подобными DialogResult'ам, т.е. возвращать DialogResult.Ok и т.д. отпадает (и их больше чем 7). решается...

Как отловить, какая из кнопок была нажата, и какую функцию запустить в гриде?
В гриде есть несколько кнопок (в Templete columns). скажем btnDeleteAll, btnDeleteOne, btnAddUser и т.п. На клик по каждой из них должна...

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

Какая кнопка нажата?
На форме есть 60 кнопок SpeedButton, как определить какая из них нажата? при этом записать номер кнопки в значение "int"......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru