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

Phoenix78

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

Вложения

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

frion-seo

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

Phoenix78

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

bizzon

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
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
Благодарностей
121
Баллы
43
На 7.0.9.0 работает. На 5.29 не работает. А так, забавно.
 

ТРОН

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

bizzon

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
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 088
Благодарностей
126
Баллы
63
если шаблону на лету надо считывать значения без ожидания нажатий кнопок, то можно прописать в классе формы процедуру взятия данных из поля и в основном цикле опроса формы ее вызывать
Так это можно мерить время ввода текста для продвинутых тестов?
 

Phoenix78

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

bizzon

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

Phoenix78

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

DrunkDeath

Client
Регистрация
24.12.2014
Сообщения
568
Благодарностей
380
Баллы
63

Phoenix78

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

frion-seo

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

Phoenix78

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

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

lx2003

Client
Регистрация
15.02.2021
Сообщения
485
Благодарностей
130
Баллы
43

lx2003

Client
Регистрация
15.02.2021
Сообщения
485
Благодарностей
130
Баллы
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");
}
}
}
 

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