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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2012, 19:22   #1
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию Контроль кликов по button

Здравствуйте всем) помогите в проблеме, на форме есть более 20 кнопок, нужно вести учет нажатия по button т.е при нажатии по любой кнопке на форме нужно что бы счетчик увеличивал число которое будет находиться в edit на +1 как можно это реализовать ?
niva622 вне форума Ответить с цитированием
Старый 03.08.2012, 19:43   #2
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Вводите глобальную переменную.
Инициализируете ее нулевым значением.
В обработчике событий onclick у каждой кнопки задаете инкремент данной переменной и здесь же соответственно меняете свойство text у edit'a на значение этой переменной
Базиля вне форума Ответить с цитированием
Старый 03.08.2012, 20:25   #3
niva622
Форумчанин
 
Регистрация: 31.12.2006
Сообщений: 114
По умолчанию

Огромное спасибо, очень помогло...
niva622 вне форума Ответить с цитированием
Старый 03.08.2012, 22:02   #4
GSirr
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 42
По умолчанию

Цитата:
Вводите глобальную переменную.
Инициализируете ее нулевым значением.
В обработчике событий onclick у каждой кнопки задаете инкремент данной переменной и здесь же соответственно меняете свойство text у edit'a на значение этой переменной
Это очень плохой совет, который учит очень плохому стилю программирования.

1) Глобальные переменные это плохо. Почему.
Вместо глобальных переменных стоит использовать property для класса формы.
2) Вешать событие на каждую кнопку? Ужас. Создайте одно событие и привяжите ко всем визуальнм компонентам.

Для того что бы не быть голословным, я подготовил пример, взять который можно по этой ссылке: http://g-sirr.ru/q3w/TestProject.zip
GSirr вне форума Ответить с цитированием
Старый 03.08.2012, 23:44   #5
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

GSirr
У человека ведь изначально не стояла задача гнаться за рациональностью подхода к решению поставленной задачи
А так, конечно же полностью с вами согласен.
Но насчет глобальных переменных, собственно ничего уж страшного такого я и не увидел - если их здесь использовать.
Тем более человек только осваивается - зачем ему раньше времени прыгать выше своей головы?
Базиля вне форума Ответить с цитированием
Старый 03.08.2012, 23:49   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Но насчет глобальных переменных, собственно ничего уж страшного такого я и не увидел - если их здесь использовать.
очень просто, формы итак достаточно, ибо форма должна быть независимым классом, и к этому лучше привыкать сразу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.08.2012, 15:27   #7
InternetStranger
php / delphi
Форумчанин
 
Аватар для InternetStranger
 
Регистрация: 10.06.2007
Сообщений: 175
По умолчанию Ну вы, блин, даете ))

Цитата:
Сообщение от GSirr Посмотреть сообщение
2) Вешать событие на каждую кнопку? Ужас. Создайте одно событие и привяжите ко всем визуальнм компонентам.
А зачем ему на форме 20 кнопок с одним и тем же обработчиком? Не то что практическим, тут даже академическим смыслом не пахнет Или в delphi можно навешать очередь обработчиков на одно событие?

Цитата:
Сообщение от GSirr Посмотреть сообщение
Это очень плохой совет, который учит очень плохому стилю программирования.
1) Глобальные переменные это плохо. Почему.
Ну почему сразу плохо )). Вот сама форма, например, объявлена глобально.
И вообще, господа, кто вас так учил нерационально оперативу расходовать! Давайте тогда уж учить человека смолоду жить правильно. Накопленное значение можно хранить в самом Edit'е в текстовом виде, а в обработчиках его прям там и увеличивать. Целых 4 байта экономия как-никак ))
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
InternetStranger вне форума Ответить с цитированием
Старый 04.08.2012, 17:13   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Вот сама форма, например, объявлена глобально.
потому что она создается автоматически, только вот, применять из обработчиков самой формы обращение к ней, нельзя.
ибо форма станет привязанной к самой себе, и две формы не выйдет создать.

а потом сыпется куча вопросов изза этого.
проходили, лучше уже сразу привыкать.

Цитата:
И вообще, господа, кто вас так учил нерационально оперативу расходовать! Давайте тогда уж учить человека смолоду жить правильно. Накопленное значение можно хранить в самом Edit'е в текстовом виде, а в обработчиках его прям там и увеличивать. Целых 4 байта экономия как-никак ))
а по делу никак?
Цитата:
А зачем ему на форме 20 кнопок с одним и тем же обработчиком? Не то что практическим, тут даже академическим смыслом не пахнет Или в delphi можно навешать очередь обработчиков на одно событие?
на крайняк создаеться метод, который увеличит значение счетчика(со всеми вытекающими)и будет вызван в обработчиках кнопок.
тут надо по задаче смотреть, ТС то молчит.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.08.2012, 18:28   #9
InternetStranger
php / delphi
Форумчанин
 
Аватар для InternetStranger
 
Регистрация: 10.06.2007
Сообщений: 175
По умолчанию

Прошу прощения, просто развеселило. Поймите правильно, я не собирался с вами спорить, ибо тоже вижу в глобальности опасность возникновения неявных проблем. Но зло же не в глобальных переменных, а в их использовании не по назначению. Так что GSirr, по-моему, перегибает палку.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
на крайняк создаеться метод, который увеличит значение счетчика(со всеми вытекающими)и будет вызван в обработчиках кнопок.
По-моему, наиболее правильный способ )

ps: Я собственно чего сказать-то хотел.
Помнится, за goto настолько часто били по пальцам, что нынче из менее опытных программистов, мало кто может внятно сказать почему именно )) Бить начали только тогда, когда стало возможно заменить goto на Break/Continue (были введены, если не ошибаюсь только в TP7.0). Глобальные в частных случаях по-прежнему нужны, и так вот сразу категорично бить не стоит. Инкапсуляция, по-моему, довольно громоздкий способ борьбы с глобальностью, да и не очень дружелюбный для тех, кто помоложе ))
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
InternetStranger вне форума Ответить с цитированием
Старый 05.08.2012, 08:41   #10
GSirr
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 42
По умолчанию

InternetStranger, там же есть вложение, которое можно скачать и посмотреть.
Цитата:
А зачем ему на форме 20 кнопок с одним и тем же обработчиком?
То есть ему нужно 20 (SIC!) одинаковых процедур в коде? Ну а потом достанется такая поделка скажем, тебе, для модернизации. Вот лично мне рефакторить такое не улыбнется. Это я в том плане - что ситуация, когда в онклик нескольких кнопок описаны одинаковые полотна кода, вместо ссылок на процедуры в designtime. Поэтому Delphi и не любят - порог вхождения низкий, а на форумах говорят, как сделать так "что бы работало", вместо того что бы сказать как "что бы работало и как правильно".

А по поводу глобальных переменных Пепел Феникса прав, Это я и имел ввиду.
GSirr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет кликов prod JavaScript, Ajax 1 19.10.2011 10:35
Как привязать компоненту TComboBox к Button, чтобы при нажатии Button, данные из ComboBox вводились в TstringGrid Marta_ Помощь студентам 2 15.10.2011 01:02
Автоматизация кликов по окну sincemix Общие вопросы Delphi 10 03.08.2010 13:19
обработка кликов в treeview CraZZy RabbIt Общие вопросы Delphi 2 28.03.2009 22:28
Отлов кликов мыши LAFUDR Помощь студентам 9 24.05.2008 01:32