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

Присвоение значения переменной

29.03.2018, 12:18. Показов 3506. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Динамически создается кнопка в GroupButton
Так же есть массив buttonmassinfo, в котором указаны данные. в стринговом массиве buttonmassinfo[2][i] указано что-нибудь типа ClickButton1(self)

Как заставить строчку присвоения "onclick" съесть без ругани данные

Delphi
1
2
3
4
GroupSButton.Items.Add();
          GroupSButton.Items.Items[GroupSButton.Items.Count-1].Caption:=  buttonmassinfo[1][i];
          GroupSButton.Items.Items[GroupSButton.Items.Count-1].Hint:=  buttonmassinfo[0][i];
          GroupSButton.Items.Items[GroupSButton.Items.Count-1].OnClick:=  buttonmassinfo[2][i];
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.03.2018, 12:18
Ответы с готовыми решениями:

Присвоение значения в combobox из файла
Здравствуйте! Есть файл конфигурации к игре .txt: ################# #### Quality #### ################# #1-Very low #2-Low ...

Присвоение дробного значения MaskEdit
Имеется дробное значение в переменной, максимум знаков до запятой - 9, после запятой - 2. Но может быть и меньшее количество. Если...

Присвоение переменным значения из Edit
У меня 2 дополнительные формы, на которых расположены окна Edit, на одной форме 3 окна, значения 2-х из них присваивается переменным,...

8
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
29.03.2018, 13:53
зачем в строковый массив заносить имя процедуры?

у тебя есть куча разных обработчиков и ты их назначаешь разным объектам?
ну так сделай правильный массив
a: array of TNotifyEvent и заполни его ссылками на обработчики
1
-5 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 139
29.03.2018, 14:01  [ТС]
DenNik, Создать отдельный массив функций - хорошая идея, Спасибо.
А может тогда можно как то стринг конвертировать в TNotifyEvent?
или чтонибудь типа
Delphi
1
GetProcAddress(0 , 'MaFunction');
нашел в сети идею, еще не пробовал
Delphi
1
2
3
4
5
6
7
8
9
Var
  MyNewEvent : procedure Of Object;
begin
  @MyNewEvent := MethodAddress(Edit1.Text);
  If @MyNewEvent<>nil Then
    Panel1.OnClick := MyNewEvent; 
  Else
    Panel1.OnClick := nil;
end;
Что думаете о таком методе?
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
29.03.2018, 15:02
Цитата Сообщение от 2icER Посмотреть сообщение
Что думаете о таком методе?
я думаю и никак не могу придумать, для чего нужно предоставлять пользователю возможность ввода названия какого-то метода, которое [название] существует только в исходном коде...
0
-5 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 139
29.03.2018, 15:15  [ТС]
DenNik,
Это была просто идея, как вытащить из массива информацию
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
Var
  MyNewEvent : procedure Of Object;
begin
 
          GroupSButton.Items.Add();
          GroupSButton.Items.Items[GroupSButton.Items.Count-1].Caption:=  buttonmassinfo[1][i];
          GroupSButton.Items.Items[GroupSButton.Items.Count-1].Hint:=  buttonmassinfo[0][i];
  @MyNewEvent := MethodAddress(buttonmassinfo[2][i]);
  If @MyNewEvent<>nil Then
    GroupSButton.Items.Items[GroupSButton.Items.Count-1].OnClick:= := MyNewEvent; 
  Else
    GroupSButton.Items.Items[GroupSButton.Items.Count-1].OnClick:= := nil;
end;
Так очевидней?
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
29.03.2018, 15:48
Delphi
1
2
3
4
var e:TNotifyEvent;
 
e:=button1.Onclick; // ну или e:=@button1.Onclick
button2.OnClick := e;
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
29.03.2018, 16:31
Лучший ответ Сообщение было отмечено 2icER как решение

Решение

Цитата Сообщение от 2icER Посмотреть сообщение
идея, как вытащить из массива информацию
а с какой целью было ранее записано в строковый массив название метода? чтобы потом заморачиваться с преобразованием и проч...
хочешь делать красиво, ну так делай красиво:

Pascal
1
2
3
4
5
6
7
8
TMyItem = record
  Caption: string;
  Hint: string;
  Event: TNotifyEvent;
end;
 
var
  a: array of TMyItem;
заполняешь массив и работаешь с ним без костылей
1
-5 / 0 / 1
Регистрация: 13.03.2014
Сообщений: 139
30.03.2018, 10:28  [ТС]
DenNik,
Хорошая мысль. Опробуем. Спасибо.
0
 Аватар для krapotkin
6847 / 4674 / 1463
Регистрация: 14.04.2014
Сообщений: 20,660
Записей в блоге: 21
30.03.2018, 11:06
но class всегда лучше record, если у нас динамические создания-удаления
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.03.2018, 11:06
Помогаю со студенческими работами здесь

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

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

Поиск слова в тексте и присвоение переменной этого слова
Здравствуйте. Помогите пожалуйста решить проблему. Есть файл index.html в нем есть слово, допустим &quot;Армагедон&quot;. Нужно найти это...

Задание значения переменной
у меня есть список вопросов в массиве,как сделать так что бы при нажатии на одну и туже кнопку менялся вопрос? например: procedure...

Вывод значения переменной на форме
Здравствуйте! Как можно по другомо вывести вот это значение во дабустим мне нужно в верхнем углу Zoloto:=1; WriteLn(Zoloto); ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru