Интерактивное окно в шаблоне зеннопостера (маленький пример)

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Прочитал я замечательную статью вот эту https://zennolab.com/discussion/threads/sozdanie-i-rabota-s-sobstvennymi-formami-oknami-windows-cherez-snippety-c.13416/
и по мотивам решил тоже творчеством заняться :-)
Решил сделать отдельное интерактивное окно которое работает параллельно потоку шаблона и из которого можно получать данные в шаблон в любое время, а так же передавать данные в окно в любой момент.
сварганил маленький тест. рабочий и в проджект мейкере и в зенопостере. шаблон прикладываю. кому нужен интерактивный интерфейс в своих шаблонах , думаю без труда разбереться.
весь код запихал в общий. вот видео работы.
 

Вложения

Последнее редактирование:

frion-seo

Client
Регистрация
27.02.2011
Сообщения
538
Благодарностей
471
Баллы
63
Круто, только ты забыл снять ограничения на версию ZP.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 103
Благодарностей
132
Баллы
63

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Из переменной в форму - видно, а как наоборот?
о там куча вариантов. самый простой вот , в клик по кнопке
45097

можно сделать эвент на изменение конкретного элемента и прописать считывание данных там.
можно сделать кучу кнопок и на них разные обработчики повесить, сложить там или чо посложнее.
я отсюда начал про формы читать https://zennolab.com/discussion/threads/sozdanie-i-rabota-s-sobstvennymi-formami-oknami-windows-cherez-snippety-c.13416/
там автор прям разжевал так что даже начинающий все поймет :-)
 
  • Спасибо
Реакции: bizzon

Nike59

Client
Регистрация
05.08.2011
Сообщения
122
Благодарностей
122
Баллы
43
На 7.0.9.0 работает. На 5.29 не работает. А так, забавно.
 

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
381
Баллы
63
В целом прикольно, можно найти применение. Интерактивные счетчики на действия выводить, аналитические данные и тд, не говоря уже о смене вектора выполнения шаблонов на лету. Развивай тему.
 
  • Спасибо
Реакции: bizzon

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 103
Благодарностей
132
Баллы
63
о там куча вариантов.
А как сделать чтобы, в форму вопрос, а в не закрываемом инстансе реакция на ответ. Т.е. чтобы форма и инстанс присутствовали интерактивно.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
А как сделать чтобы, в форму вопрос, а в не закрываемом инстансе реакция на ответ. Т.е. чтобы форма и инстанс присутствовали интерактивно.
если надо управлять инстансом , то и шаблон должен разрабатываться по соответствующей логике. Должны быть организованны переменные через которые будет происходить взаимосвязь, в ключевых моментах шаблон должен опрашивать их, где то должно быть ожидание нажатия на кнопку, где то нет. полет фантазии безграничен :-)
вот же я вам отвечал как из формы передать значение
при вызове MyProject.Program.Main(project); передается project
в классе MyForm есть переменная project , которую при создании формы инициализируется переданным значением
45154



и уже потом эта переменная доступна во всех процедурах класса MyForm
и можно напрямую толкать значения в переменные проекта это работает.
45156



но если подходить к работе как с классами , то должна быть отдельная процедура взятия данных из поля и возвращения ее как результат .
на самом деле вариантов много :-)
если шаблону на лету надо считывать значения без ожидания нажатий кнопок, то можно прописать в классе формы процедуру взятия данных из поля и в основном цикле опроса формы ее вызывать
C#:
// в класс формы
        // процедура считывания значения из формы
        public  void get_text(string data1)   
        {
            project.Variables[data1].Value = text_this.Text ;
        }

// обработчик формы
            // основной цикл обновления
            while(    eee.form_this.Visible )
            {
                eee.set_text("date_to_form"); // передаем имя переменной для установки данных в форму
                eee.get_text("date_from_form");  // передаем имя переменной для считывания данных из формы и записывания в переменную проекта
                Thread.Sleep(100);
            }
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 103
Благодарностей
132
Баллы
63
если шаблону на лету надо считывать значения без ожидания нажатий кнопок, то можно прописать в классе формы процедуру взятия данных из поля и в основном цикле опроса формы ее вызывать
Так это можно мерить время ввода текста для продвинутых тестов?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 103
Благодарностей
132
Баллы
63
Одна из фишек теста - определить насколько быстро опрашиваемый начал отвечать и когда закончил.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

DrunkDeath

Client
Регистрация
24.12.2014
Сообщения
589
Благодарностей
402
Баллы
63
Автор, где ты был пару лет назад)
Есть пара идей. Спасибо.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

frion-seo

Client
Регистрация
27.02.2011
Сообщения
538
Благодарностей
471
Баллы
63
на заводе я был пару лет назад :-)
А как быть с многопотоком ? Чтобы одно окно на всех было как- бы.
Первое, что приходит в голову , это отдельный шаб из под которого уже и будет управление всем и вся в связке с бд.
Но возможно есть более элегантное решение ?
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
А как быть с многопотоком ? Чтобы одно окно на всех было как- бы.
Первое, что приходит в голову , это отдельный шаб из под которого уже и будет управление всем и вся в связке с бд.
Но возможно есть более элегантное решение ?
Это единственно решение. потому что для многопотока всегда должен быть один диспетчер. В обычных приложениях всегда запускается сначала основной поток и уже он запускает многопоток и контролит его. А в зенке пошли по принципу свободного творчества. Я всегда делаю отдельный шаблон, который работает в 1 поток и он работает как управляющий.

Были сообщения от админов, что в зенке готовиться что то вроде диспетчера над многопотоком.... но это все как то туманно и хз что там по срокам.
 
  • Спасибо
Реакции: frion-seo

lx2003

Client
Регистрация
15.02.2021
Сообщения
606
Благодарностей
144
Баллы
43
@Phoenix78

Подскажи, пожалуйста, как правильно прописать данный код и что написать в кубике C#, чтобы работало?

Где разместить и как запустить - с "Директивы using и общий код" практическии не работал, не могу разобраться?

Код предназначен, чтобы с помощью WinForms сделать два не модальных окно, которые не закрываются самостоятельно:


С помощью WinForms сделать два не модальных окно, которые не закрываются самостоятельно:
using System;
using System.Drawing;
using System.Windows.Forms;

namespace Exp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Создаем второе окно
Form2 form2 = new Form2();
// Устанавливаем свойства первого окна
this.Text = "Окно 1";
this.Size = new Size(300, 200);
this.StartPosition = FormStartPosition.CenterScreen;
this.FormBorderStyle = FormBorderStyle.FixedSingle;
// Устанавливаем свойства второго окна
form2.Text = "Окно 2";
form2.Size = new Size(300, 200);
form2.StartPosition = FormStartPosition.CenterScreen;
form2.FormBorderStyle = FormBorderStyle.FixedSingle;
// Создаем кнопку на первом окне
Button button1 = new Button();
button1.Text = "Кнопка 1";
button1.Location = new Point(100, 50);
button1.Size = new Size(100, 30);
// Создаем метку на втором окне
Label label1 = new Label();
label1.Text = "Метка 1";
label1.Location = new Point(100, 50);
label1.Size = new Size(100, 30);
// Добавляем элементы управления на формы
this.Controls.Add(button1);
form2.Controls.Add(label1);
// Добавляем обработчик события для кнопки
button1.Click += button1_Click;
// Показываем оба окна
this.Show();
form2.Show(this);
}

// Метод, который вызывается при нажатии на кнопку
void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("Вы нажали на кнопку 1");
}
}
}
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)