007wan |
Отправлено: 21 Ноября, 2019 - 09:30:01
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Я уже давал пример, где 3 программы связываются с другой, при этом для каждой программы выделен свой массив. Это я уже знаю, но это не актиально и то, что я писал вышел. Теперь я понял, что лучше сделать по другому.
Проблема была в том, что текст из буфер брался от всех программа и одновременно добавлялся в буфер параллельно, но теперь я знаю как решить эту проблему.
Как сделать такую модель(я покажу как это вижу я):
В буфер главной программы в диалог пишется текст(при запуске программы он именно такой по дефолту):
Для примера (Отобразить) Цитата:
Main_Program|Editing_Rights;
Program_1|Function_1: 0;
Program_2|Function_1: 0;
где Main_Program, Program_1, Program_2 к какой программе относится, имеет значение константы(статическое) и не изменяется, но должно это читаться;
где Editing_Rights - это права на редактирование для данной программы, имеет знрачения 0,1,2.
0 - означает, что редактирование разрешено только для главной программы.
1 - означает, что редактирование разрешено только для первой exe программы.
2 - означает, что редактирование разрешено только для второй exe программы.
Где Function_1 - это значение функции. Имеет так же 2 значения:
0 - функция отключена.
1 - функция включена.
Принцип работы основан не на параллельном редактировании, а на последовательном, что гораздо лучше.
ПРИНЦИП работы:
Как я и говорил при запуске в буфер пишется дефолтный текст, но не такой который выше, это для примера, а вписывается такой текст:
Текст в буфер при запуске главного (Отобразить) Цитата:
Main_Program|0;
Program_1|0;
Program_2|0;
PS: Забыл указать, что в диалоге должны 2 кнопки "Получить окно1" и "Получить окно2".
При нажатии на "Получить окно1".Как мы уже знаем, что редактирование имеет значение "0", значит можно редактировать только главной программе, следовательно она пишет в буфер текст для Program_1 вместо "0" ставит "1", а уже потом для Main_Program вместо "0" ставит "1". Так как у каждой программы(Main_Program, Program_1, Program_2) стоит таймер, определяющий какая цифра стоит в Main_Program, то в зависимости от положения цифры можно будет писать тот или иной текст в буфер, а потом переключать "Управление редактированием для программ"(ту саму переменную, что бы давать управление другой программе).
Если всё правильно сделано должен выйти текст, когда нажали кнопку "Получить окно1"
Текст в буфер при нажатии на кнопку "Получить окно1" (Отобразить) Цитата:
/*
Сначала проверяется у каждой программы в реально времени какая цифра стоит в
Main_Program, если 0, то редактирование разрешено для Main_Program, если 1, то для Program_1, если 2, то для Program_2
Далее в зависимости для КАКОЙ программы разрешено редактирование, то ей можно изменять буфер:
Путём получения текста с этого буфера заменяет фрагмент текста, например, "Function: 0" на "Function: 1"
*/
Main_Program|1;
Program_1|1;
Program_2|0;
(Добавление)
Простым языком: буфер изменяется последовательно, последовательно от каждой программы.
(Добавление)
Парсинг не исключен.
(Добавление)
Хотел дополнить, что в начале запуска Main_Program не просто так в значении 0, а будет это до тех пор, пока кнопка не будет нажата "Получить окно1" или втрая, а уже потом изменит на 1...2...и снова 0.(Отредактировано автором: 21 Ноября, 2019 - 09:30:48) |
|
|
nmf234 |
Отправлено: 21 Ноября, 2019 - 23:42:18
|
Прохожий
Покинул форум
Сообщений всего: 18
Дата рег-ции: Июнь 2019
Репутация: 0
|
доброго! Ранее я писал о том, что меседжбоксы появляются позади хрома, а нужно поверх. Я заметил вот что: если запускать код через редактор то этой проблемы нет, но я собрал и использую exe, и тут то эта проблема и появляется (несколько раз пересобирал, код и exe идентичны).
На всякий, прикрепил "рабочую зону" бота. он поочередно выполняет код то во вкладке слева, то справа.
в том числе и диалог (showdialog (0, "Диалог", 555, 250, 266, 199, 1, 1) тоже появляется позади.
[img](для просмотра ссылки Вам необходимо авторизоваться) /img](Отредактировано автором: 21 Ноября, 2019 - 23:49:56) |
|
|
Zireael |
Отправлено: 22 Ноября, 2019 - 12:19:27
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: что бы читал из буфера так как задам текст
Что записано, то и читает.
CODE:char c[100];
strcpy(#c[0], "123"+formatic(13)+formatic(10)+"456"); // строка
messagebox(format(#c[0]));
writebuffer(#c[0], size(#c[0])); // записали в буфер
sleep(100);
char c2[100];
readbuffer(#c2[0], 100); // прочитали
messagebox(format(#c2[0])); |
|
|
007wan |
Отправлено: 22 Ноября, 2019 - 12:28:50
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: что бы читал из буфера так как задам текст
Что записано, то и читает.
CODE:char c[100];
strcpy(#c[0], "123"+formatic(13)+formatic(10)+"456"); // строка
messagebox(format(#c[0]));
writebuffer(#c[0], size(#c[0])); // записали в буфер
sleep(100);
char c2[100];
readbuffer(#c2[0], 100); // прочитали
messagebox(format(#c2[0])); А ressettextout выводит строчкой.
(Добавление)
Dantes3000 пишет: 007wan , наверно потому что надо записывать formatic(13) +( 10)? Сократил, а так там на пару символов более) |
|
|
|