"связка" пользовательских блоков

В данный форуме Вы можете создавать темы посвящённые расширению функционала программы или сайта. После рассмотрения Ваше предложение будет перенесено в соответствующее место
Ответить
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

"связка" пользовательских блоков

#1

Сообщение pan » 23.10.2018{, 09:27}

все известна проблема лишнего хлама в блоках пользователя, а если не хлама, то проблематичность разделения большого кода на маленькие блоки.
Возникла такая идея.
Вопрос к support, можно ли сделать такую вещь как "привязывание" (не знаю как правильней назвать) блоков друг к другу.
смысл такой: привязанные блоки получают индекс переменной
screenshot_18-10-23_09-22-31.png
screenshot_18-10-23_09-22-31.png (958 байт) 1640 просмотров
такой же как у основного блока.

можно будет разбивать большие блоки на отдельные части в случае когда не подходит вариант "использовать в проекте один раз"
а наоборот нужно будет много копий с разными именами переменной.

надеюсь идею донёс и она реализуема :wizard:

kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22.10.2016{, 14:22}
Репутация: 28

"связка" пользовательских блоков

#2

Сообщение kalobyte » 23.10.2018{, 10:04}

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

Аватара пользователя
Dev1
Майор
Сообщения: 1026
Зарегистрирован: 12.07.2016{, 18:04}
Репутация: 59
Откуда: Гондурас

"связка" пользовательских блоков

#3

Сообщение Dev1 » 23.10.2018{, 14:24}

Тут больше проблема в самой структуре программы. Я так понимаю все базовое зашито в одном файле. А лучше было бы каждый блок по отдельности в своей папке и в своей категории. Например как в HiAsm... Там каждый элемент(блок) состоит из файл конфигурации, файла исполняемого(код) и иконка для панели выбора. Из программы можно каждый блок редактировать конфигурацию и по отдельности код. Можно добавь входа, выхода, доп свойства, изменять код на свое усмотрение и получается элемент под ваши нужды.
Пример обычной кнопки:
СпойлерПоказать
hiasm.jpg
Файл INI
СпойлерПоказать

Код: Выделить всё

[About]
Version=1.0
Author=Dilma

[Type]
Class=WinElement
Info=Кнопка с картинкой
Inherit=WinControl
Interfaces=ControlManager

[Edit]
Class=Button
Caption=Caption
Color=Color

[Property]
Width= |1|55
Height= |1|20
Frame=Показывать рамку|4|0|True,False
FrameColor=Цвет рамки|8|clGray
Caption=Нaдпиcь нa кнoпке|2|Push
Data=Дaнныe, выдaвaeмыe в пoтoк coбытиeм onClick|3
Flat=Вид кнопки|14|0|True,False
+@Bitmap=Определяет картинку по умолчанию|11|

[Methods]
onClick=Сoбытиe пpoиcxoдит вcякий paз пpи нaжaтии нa кнoпкy и выдает в поток значение свойства Data, если оно было задано ARG(Data)|2|
doCaption=Уcтaнaвливaeт надпись на кнопке|1|
Файл с кодом не буду приводить, думаю и так понятно о чем речь. :senile:
Подобная структура избавляет от пользовательских блоков и от лишнего хлама в коде. :fie:
Win10-64 FLProg v7.5.2 Portable :fie:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

"связка" пользовательских блоков

#4

Сообщение pan » 23.10.2018{, 15:40}

Dev1, тут уж не до жиру. хотя бы ради удобства, чтоб не городить блоки из кучи входов/выходов.
если программа при компиляции каждый раз назначает переменным разные индексы, почему бы указанным блокам не брать
индекс от другого.
это уже намного упростило бы создание блоков :wizard:

Аватара пользователя
Dev1
Майор
Сообщения: 1026
Зарегистрирован: 12.07.2016{, 18:04}
Репутация: 59
Откуда: Гондурас

"связка" пользовательских блоков

#5

Сообщение Dev1 » 23.10.2018{, 16:36}

Про эти дубли еще на старом форуме много говорили, но пока без изменений. Я предложил(тихо свистнул и ушел...) другой подход к решению многих проблем. Но это скорее всего практически новая программа. А так предложения были разные, уже не помню что именно предлагали, да и Сергей вроде отвечал. :senile:
Win10-64 FLProg v7.5.2 Portable :fie:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

"связка" пользовательских блоков

#6

Сообщение pan » 23.10.2018{, 17:31}

Dev1, тема не совсем про дубли.
про возможность разнесения кусков кода принадлежащему какому то одному устройству.

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

"связка" пользовательских блоков

#7

Сообщение Naladchik » 26.10.2018{, 11:58}

pan писал(а):
23.10.2018{, 09:27}
...то проблематичность разделения большого кода на маленькие блоки...
pan писал(а):
23.10.2018{, 17:31}
про возможность разнесения кусков кода принадлежащему какому то одному устройству.
Все, кто пробовал писать раздельные блоки, натыкались на проблему с передачей значения переменной из одного блока в другой.
Нашел на такое решение (для кого то может и очевидное, но я об этом не знал).
1. Все внутренние переменные, необходимые для взаимодействия блоков друг с другом декларируются в начальном блоке, ставится галка "Разрешено использовать в проекте только один раз". (Так как "один раз" то ID переменным не присваивается).
2. В последующих блоках, где нужно взаимодействие с другими блоками вставляются имена переменных, задекларированные в начальном блоке.
3. Так как в последующих блоках эти переменные уже не декларируются (задекларированы ранее) то, соответственно, ID им также не присваивается.
4. Profit. Последующие блоки используются столько раз, сколько нужно. Можно получить систему блоков, использующих один набор переменных.
test.flp
(27.06 КБ) 71 скачивание
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
Андрей
Рядовой
Сообщения: 31
Зарегистрирован: 11.01.2018{, 19:32}
Репутация: 0

"связка" пользовательских блоков

#8

Сообщение Андрей » 26.10.2018{, 13:08}

Naladchik писал(а):
26.10.2018{, 11:58}
Нашел на такое решение
Так такое решение и ежу понятно)))
В основном блоке создаем переменную, и потом во всей программе и в других блоках ее используем!

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

"связка" пользовательских блоков

#9

Сообщение pan » 26.10.2018{, 13:22}

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

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

"связка" пользовательских блоков

#10

Сообщение Naladchik » 26.10.2018{, 15:02}

Андрей писал(а):
26.10.2018{, 13:08}
Так такое решение и ежу понятно)))
Значит я даже до ежа не дотягиваю, так как такой вариант только сегодня обнаружил.
pan писал(а):
26.10.2018{, 13:22}
а вот когда нужно несколько экземпляров основных блоков ..
тогда декларируется не переменная а массив и в последующих блоках индекс переменной в массиве задается через параметры пользователя.
test_array.flp
(65.12 КБ) 62 скачивания
Win10-64. FLProg Portable.
Изображение

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

"связка" пользовательских блоков

#11

Сообщение pan » 26.10.2018{, 15:35}

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

сам я давно буковками пишу..

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

"связка" пользовательских блоков

#12

Сообщение Naladchik » 26.10.2018{, 16:13}

pan писал(а):
26.10.2018{, 15:35}
это было предложено для удобства многих других пользователей.
Чем мой вариант не удобен? какие недостатки?
pan писал(а):
26.10.2018{, 15:35}
и для того, что бы код в проектах был более читаем.
Почему Вы считаете что в Вашем случае с "привязками" код будет более читабелен чем в моем с индексами, в чем разница?
СпойлерПоказать
int value[ 2 ]; // основной блок, где 2 это количество экземпляров "второстепенных" блоков

int In_138513001_1;
int out_93054384_1;
int out_93054384_2;
int In_138513001_2;
int _gtv1; //1_value_out
int _gtv2; //2_value_out
void setup()
{
}
void loop()
{
//Плата:1
In_138513001_1 = 5; // 1-й экземпляр блока In, индекс 0
value [ 0 ] = In_138513001_1 ;

out_93054384_1 = value [ 0 ] ; // 1-й экземпляр блока Out, индекс 0
_gtv1 = out_93054384_1;

In_138513001_2 = 10; // 2-й экземпляр блока In, индекс 1
value [ 1 ] = In_138513001_2 ;

out_93054384_2 = value [ 1 ] ; // 2-й экземпляр блока Out, индекс 1
_gtv2 = out_93054384_2;

}
Win10-64. FLProg Portable.
Изображение

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

"связка" пользовательских блоков

#13

Сообщение pan » 26.10.2018{, 16:40}

я не собираюсь дискуссировать на тему что и куго лучше.
тема была про другое.
что б это было штатно.
не придумывать костыли.
не править код при "другом" количестве блоков" чем вы предусмотрели.

и это было предложение в новый функционал. и судя по всему вы против такой идеи, либо надо было вас писать сюда делимся опытом

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

"связка" пользовательских блоков

#14

Сообщение Naladchik » 26.10.2018{, 17:16}

pan
и все таки есть пару вопросов, отписал в личку.
Win10-64. FLProg Portable.
Изображение

Ответить

Вернуться в «Новые»