Страница 1 из 1
"связка" пользовательских блоков
Добавлено: 23 окт 2018, 09:27
pan
все известна проблема лишнего хлама в блоках пользователя, а если не хлама, то проблематичность разделения большого кода на маленькие блоки.
Возникла такая идея.
Вопрос к [ref=#00aa00]support[/ref], можно ли сделать такую вещь как "привязывание" (не знаю как правильней назвать) блоков друг к другу.
смысл такой: привязанные блоки получают индекс переменной
screenshot_18-10-23_09-22-31.png
такой же как у основного блока.
можно будет разбивать большие блоки на отдельные части в случае когда не подходит вариант "использовать в проекте один раз"
а наоборот нужно будет много копий с разными именами переменной.
надеюсь идею донёс и она реализуема

"связка" пользовательских блоков
Добавлено: 23 окт 2018, 10:04
kalobyte
я тоже думал о чем-то таком
например сделать какие-то макросы, типа если блок а используется, то в блоке б использовать только часть кода, а другая часть уже есть в блоке а
"связка" пользовательских блоков
Добавлено: 23 окт 2018, 14:24
Dev1
Тут больше проблема в самой структуре программы. Я так понимаю все базовое зашито в одном файле. А лучше было бы каждый блок по отдельности в своей папке и в своей категории. Например как в HiAsm... Там каждый элемент(блок) состоит из файл конфигурации, файла исполняемого(код) и иконка для панели выбора. Из программы можно каждый блок редактировать конфигурацию и по отдельности код. Можно добавь входа, выхода, доп свойства, изменять код на свое усмотрение и получается элемент под ваши нужды.
Пример обычной кнопки:
[spoiler]
hiasm.jpg
[/spoiler]
Файл INI
[spoiler]
Код: Выделить всё
[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|
[/spoiler]
Файл с кодом не буду приводить, думаю и так понятно о чем речь.
Подобная структура избавляет от пользовательских блоков и от лишнего хлама в коде.

"связка" пользовательских блоков
Добавлено: 23 окт 2018, 15:40
pan
[ref]Dev1[/ref], тут уж не до жиру. хотя бы ради удобства, чтоб не городить блоки из кучи входов/выходов.
если программа при компиляции каждый раз назначает переменным разные индексы, почему бы указанным блокам не брать
индекс от другого.
это уже намного упростило бы создание блоков

"связка" пользовательских блоков
Добавлено: 23 окт 2018, 16:36
Dev1
Про эти дубли еще на старом форуме много говорили, но пока без изменений. Я предложил(тихо свистнул и ушел...) другой подход к решению многих проблем. Но это скорее всего практически новая программа. А так предложения были разные, уже не помню что именно предлагали, да и Сергей вроде отвечал.

"связка" пользовательских блоков
Добавлено: 23 окт 2018, 17:31
pan
[ref]Dev1[/ref], тема не совсем про дубли.
про возможность разнесения кусков кода принадлежащему какому то одному устройству.
"связка" пользовательских блоков
Добавлено: 26 окт 2018, 11:58
Naladchik
pan писал(а): 23 окт 2018, 09:27...то проблематичность разделения большого кода на маленькие блоки...
pan писал(а): 23 окт 2018, 17:31про возможность разнесения кусков кода принадлежащему какому то одному устройству.
Все, кто пробовал писать раздельные блоки, натыкались на проблему с передачей значения переменной из одного блока в другой.
Нашел на такое решение (для кого то может и очевидное, но я об этом не знал).
1. Все внутренние переменные, необходимые для взаимодействия блоков друг с другом декларируются в начальном блоке, ставится галка "Разрешено использовать в проекте только один раз". (Так как "один раз" то ID переменным не присваивается).
2. В последующих блоках, где нужно взаимодействие с другими блоками вставляются имена переменных, задекларированные в начальном блоке.
3. Так как в последующих блоках эти переменные уже не декларируются (задекларированы ранее) то, соответственно, ID им также не присваивается.
4. Profit. Последующие блоки используются столько раз, сколько нужно. Можно получить систему блоков, использующих один набор переменных.
test.flp
"связка" пользовательских блоков
Добавлено: 26 окт 2018, 13:08
Андрей
Naladchik писал(а): 26 окт 2018, 11:58Нашел на такое решение
Так такое решение и ежу понятно)))
В основном блоке создаем переменную, и потом во всей программе и в других блоках ее используем!
"связка" пользовательских блоков
Добавлено: 26 окт 2018, 13:22
pan
[ref]Naladchik[/ref],
это и так известно.
а вот когда нужно несколько экземпляров основных блоков ..
"связка" пользовательских блоков
Добавлено: 26 окт 2018, 15:02
Naladchik
Андрей писал(а): 26 окт 2018, 13:08Так такое решение и ежу понятно)))
Значит я даже до ежа не дотягиваю, так как такой вариант только сегодня обнаружил.
pan писал(а): 26 окт 2018, 13:22а вот когда нужно несколько экземпляров основных блоков ..
тогда декларируется не переменная а массив и в последующих блоках индекс переменной в массиве задается через параметры пользователя.
test_array.flp
"связка" пользовательских блоков
Добавлено: 26 окт 2018, 15:35
pan
это было предложено для удобства многих других пользователей.
и для того, что бы код в проектах был более читаем.
может еще кто-то по другому обходит это. х.з
сам я давно буковками пишу..
"связка" пользовательских блоков
Добавлено: 26 окт 2018, 16:13
Naladchik
pan писал(а): 26 окт 2018, 15:35это было предложено для удобства многих других пользователей.
Чем мой вариант не удобен? какие недостатки?
pan писал(а): 26 окт 2018, 15:35и для того, что бы код в проектах был более читаем.
Почему Вы считаете что в Вашем случае с "привязками" код будет более читабелен чем в моем с индексами, в чем разница?
[spoiler]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;
}[/spoiler]
"связка" пользовательских блоков
Добавлено: 26 окт 2018, 16:40
pan
я не собираюсь дискуссировать на тему что и куго лучше.
тема была про другое.
что б это было штатно.
не придумывать костыли.
не править код при "другом" количестве блоков" чем вы предусмотрели.
и это было предложение в новый функционал. и судя по всему вы против такой идеи, либо надо было вас писать сюда
делимся опытом
"связка" пользовательских блоков
Добавлено: 26 окт 2018, 17:16
Naladchik
[ref=#ff8000]pan[/ref]
и все таки есть пару вопросов, отписал в личку.