40 / 42 / 15
Регистрация: 24.10.2015
Сообщений: 598
1

Обработчик событий для динамических кнопок

15.06.2017, 17:24. Показов 4951. Ответов 16

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.
Суть вопроса такая:
Необходимо сделать настраиваемую систему АРМ. То есть захожу в настройки, добавляю позиции, для каждой позиции прописываю некие параметры, которые при сохранении для заносятся в БД (mysql, обычный файл, с этим проблем нет).
Так вот, когда открывается программа, создаются динамические кнопки с текстом наименования товара и ценой (из БД)
И вот тут я еще плаваю, не знаю как написать для каждой динамической кнопки свой обработчик, чтобы при нажатии на апельсин подгружалась цена 50р, а при нажатии на ананас 100р.

Среда: delphi Seattle


Заранее признателен за помощь.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2017, 17:24
Ответы с готовыми решениями:

Создание событий для динамических объектов
Здравствуйте, начал изучать динамическое создание объектов. Создал на форме 400 объектов panel....

Обработчик событий для Enter
а где прописывать этот код в ТForm или где???? В обработчике событий OnKeyPress: procedure...

Обработчик событий для нескольких компонентов
В моей программе есть несколько компонентов TEdit, а так же StringGrid. Суть в том, чтобы...

Один обработчик для нескольких кнопок
Вопрос: Как для калькулятора создать один обработчик для цифровых кнопок (0-9), чтобы для каждой...

16
Эксперт Pascal/Delphi
4918 / 2786 / 855
Регистрация: 04.10.2012
Сообщений: 10,148
15.06.2017, 17:27 2
Цитата Сообщение от fidel42rus Посмотреть сообщение
не знаю как написать для каждой динамической кнопки свой обработчик
Присвоение кода
1
40 / 42 / 15
Регистрация: 24.10.2015
Сообщений: 598
15.06.2017, 17:33  [ТС] 3
Спасибо, буду разбираться
0
Эксперт Pascal/Delphi
4918 / 2786 / 855
Регистрация: 04.10.2012
Сообщений: 10,148
15.06.2017, 17:35 4
Цитата Сообщение от fidel42rus Посмотреть сообщение
буду разбираться
там все достаточно просто
1
40 / 42 / 15
Регистрация: 24.10.2015
Сообщений: 598
15.06.2017, 17:36  [ТС] 5
На самом деле это не то что нужно. Как написать единый обработчик для всех кнопок я знаю.
А как сделать для каждой динамической кнопки отдельно, допустим чтобы эта кнопка проверяла значение из базы и выдавала ответ
0
Эксперт Pascal/Delphi
4918 / 2786 / 855
Регистрация: 04.10.2012
Сообщений: 10,148
15.06.2017, 17:39 6
Цитата Сообщение от fidel42rus Посмотреть сообщение
это не то что нужно
Цитата Сообщение от fidel42rus Посмотреть сообщение
сделать для каждой динамической кнопки отдельно
создавайте для каждой кнопки отдельный обработчик. Как создать обработчик?? Пример в архиве.
Цитата Сообщение от fidel42rus Посмотреть сообщение
чтобы эта кнопка проверяла значение из базы
назначайте необходимые действия в обработчике и все.
1
40 / 42 / 15
Регистрация: 24.10.2015
Сообщений: 598
15.06.2017, 17:43  [ТС] 7
Попробую по другому выразиться,в этом примере нужно заранее в коде для каждой динамической кнопки прописать обработчик, а если пользователь в настройках выберет 6 кнопкок, вобьет 6 наименований и цен. Вот как при создании динамической кнопки понять какая за какую отвечает без правки кода
0
3760 / 2264 / 705
Регистрация: 29.05.2013
Сообщений: 9,616
15.06.2017, 20:02 8
Невозможно все варианты событий предусмотреть, т.е. необходим инструмент позволяющий писать код в рантайме. Попробуйте посмотреть в сторону Pascal Script
1
5872 / 4600 / 1448
Регистрация: 14.04.2014
Сообщений: 20,413
Записей в блоге: 20
15.06.2017, 20:21 9
не нужно каждой кнопке свой обработчик
всем кнопкам - один
вы должны узнать, что за кнопка нажата (это параметр Sender)
и найти ту структуру данных, к которой эта кнопка привязана логически
и все, с этого момента о кнопке забываем. просто работаем с данными
1
Эксперт Pascal/Delphi
4918 / 2786 / 855
Регистрация: 04.10.2012
Сообщений: 10,148
16.06.2017, 04:50 10
Цитата Сообщение от krapotkin Посмотреть сообщение
параметр Sender
+1.
1
40 / 42 / 15
Регистрация: 24.10.2015
Сообщений: 598
16.06.2017, 06:53  [ТС] 11
Крапоткин)) не заходил на форум больше 1,5 лет, т.к. осваивал другой язык, а он до сих пор помогает людям ) СПАСИБО


а есть пример какой-нибудь, прочитал кучу мануалов на эту тему, но везде все сводится к but.onclick=procedure... и т.д.
Не встречал еще Sender

Добавлено через 1 минуту
В моей программе осталось только этот момент довести до ума, даже с работой ККМ все отлажено.

Если найду решение сегодня допишу)
0
5872 / 4600 / 1448
Регистрация: 14.04.2014
Сообщений: 20,413
Записей в блоге: 20
16.06.2017, 08:36 12
Лучший ответ Сообщение было отмечено fidel42rus как решение

Решение

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
TMyObject=class
  data1:integer;
  data2:string;
  button:TButton;
end;
 
TMyObjects=class(TObjectlist<TMyObject>)
  function ByButton():TMyObject;
end;
 
TForm1=class(TForm)
...
  List:TMyObjects;
end;
...
 
function TMyObjects.ByButton(b:TButton):TMyObject;
begin
  for i:=0 to Count-1 do
  begin
    result := items[i];
    if result.button = b then
      exit;
  end;
  result := nil;
end;
 
procedure TForm1.FormCreate(Sender:TObject);
begin
  List:=TMyObjects.Create(true);
end;
 
procedure TForm1.AllButtonsClickProc(Sender:TObject);
var button:TButton absolute Sender;
  obj:TMyObject;
begin
  obj:=List.ByButton(button);
  if (obj<>NIL) then
  begin
    showMessage(obj.data2);
  end;
end;
 
procedure TForm1.LoadList();
begin
  /// ..... к-нить цикл
  obj:=TMyObject.Create;
  obj.button := TButton.Create(self);
  obj.button.OnClick :=AllButtonsClickProc;
  list.add(obj);
  /// .....
end;
0
40 / 42 / 15
Регистрация: 24.10.2015
Сообщений: 598
16.06.2017, 12:02  [ТС] 13
спасибо
Решил вопрос так:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//глобальный вар
var
names: string;
 
 
//считываем из файла и по порядку создаем кнопки с именем id из текстового файла.
 
 
procedure TForm1.CustomClick(Sender: TObject);
begin
 
names:=TButton(Sender).Name;
 
//ищем в файле строку, парсим на значения и выводим в соответствующие поля
 
end;
КрАпоткин СПАСИБИЩЕ, ВОТ ПРЯМ БОЛЬШОЕ!!!


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



И напоследок еще вопрос, сейчас я создаю кнопки столбиком, с текстовым значением.
А как бы их создавать в gridlayout. каждую кнопку в отдельную ячейку
0
5872 / 4600 / 1448
Регистрация: 14.04.2014
Сообщений: 20,413
Записей в блоге: 20
16.06.2017, 12:11 14
нет смысла в гридлэйаут
они же программно создаются. не руками ж координатки задавать)))
есть вариант кидать каждую в панель и делать панели Align=top
но координатки все-таки задать изначально надо. например Panel.top :=10000;
а дальше она сама
1
40 / 42 / 15
Регистрация: 24.10.2015
Сообщений: 598
16.06.2017, 14:33  [ТС] 15
как я сам не допер)) спасибо)

Добавлено через 2 минуты
но все таки хочется сеткой накладывать кнопки, в 4 в ряд
0
5872 / 4600 / 1448
Регистрация: 14.04.2014
Сообщений: 20,413
Записей в блоге: 20
16.06.2017, 16:28 16
Delphi
1
2
3
4
5
6
7
8
9
10
11
if btnNumber mod 4 = 0 then
  CreateNewPanel();
CreateButton();
 
procedure CreateButton();
begin
  Button:=TButton.Create(self);
  Button.Parent:=curPanel;
  Button.Align := alLeft;
  Button.Left := 10000;
end;
0
Эксперт Pascal/Delphi
6811 / 4568 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
16.06.2017, 19:46 17
Гомеопат,
1.Уважительно относитесь к другим участникам форума.
https://www.cyberforum.ru/announcement.php?a=3
 Комментарий модератора 
В случае дальнейших нарушений вы будете наказаны.
0
16.06.2017, 19:46
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.06.2017, 19:46
Помогаю со студенческими работами здесь

Напишите обработчик событий для указанных действий
На форме 1 установлены компоненты listbox1, button1 и 2 компонента checkbox. При нажатии на кнопку...

Как вызвать обработчик событий для кнопки в Delphi 7?
похожее нашел,но не уверен что то для кнопки Page Up или Page Down procedure TForm2.bOK(Sender:...

Написать для трех кнопок общий обработчик OnClick для вывода, скрытия/отображения и изменения цвета текста
На форме Form_Lb расположена пустая метка Lb_txt с текстом и три кнопки класса TButton с...

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru