Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Как синхронно изменять параметры в нескольких окнах? Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Чичиков
Гость





СообщениеДобавлено: Вт Янв 22, 2008 11:29 am Ответить с цитатой Вернуться к началу

Доброго времени суток.
Ситуация:
На одной странице (Sheet) расположено несколько окон по одному инструменту (например в одном "цена+сигналы" (с параметрами), в другом- к примеру, эквити).
Код первого окна (TC_1)- находится в Custom.
В коде второго содержится:
.....
#include "C:\.........путь......\Custom\TC_1.afl";
Plot (equity(........; (это все работает нормально)
.....
Далее: При изменении параметров через "диалог" Parameters, обновляется (пересчитывается+перерисовывается) только окно, из которого был вызван "диалог". В других окнах параметры не меняются, что не очень удобно, особенно если параметров много...

Соответственно вопрос: можно ли сделать так, чтобы при изменении параметров одного окна, автоматически (синхронно) изменялись параметры в других окнах, с последующим обновлением окон.
ID
Советник


Зарегистрирован: 07.01.2008
Сообщения: 370

СообщениеДобавлено: Вт Янв 22, 2008 12:05 pm Ответить с цитатой Вернуться к началу

---------------------------------------------------------------


Последний раз редактировалось: ID (Вт Янв 22, 2008 1:15 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Янв 22, 2008 12:39 pm Ответить с цитатой Вернуться к началу

Это как два пальца. Функции STATICVARSET() и STATICVARGET().
Позже напишу подробнее, сейчас некогда

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Янв 22, 2008 12:54 pm Ответить с цитатой Вернуться к началу

Первое окно
Код:
period = Param("Period", 5, 2, 10, 1);
StaticVarSet("period", period);
Plot(StochD(period, 3, 3), _DEFAULT_NAME(), colorRed, styleLine);

Второе окно
Код:
period = StaticVarGet("period");
period = Nz(period, 5); // Если период не определен, то 5
Plot(RSI(period), _DEFAULT_NAME(), colorBlue, styleLine);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Чичиков
Гость





СообщениеДобавлено: Вт Янв 22, 2008 1:21 pm Ответить с цитатой Вернуться к началу

Благодарю за ответ. Попробую применить...

Удачи Олегу, проекту AmiSite.ru и всем форумянам!
Чичиков
Гость





СообщениеДобавлено: Ср Янв 30, 2008 2:51 am Ответить с цитатой Вернуться к началу

Попробовал приведенный пример. работает. Спасибо еще раз...
(Кстати, то что я называл "окнами", в Хелпе называется, как я понял, "подокнами"; поэтому несколько изменю термины.)
Есть здесь маленькие "тонкости", поэтому напишу подробнее:
при изменении параметров мышкой (например передвигание скролеров мышкой и.т.д.) "вживую" изменяется только подокно из которого был вызван "диалог" Parameters (далее-"главное" подокно). Для перерисовки остальных подокон надо "щелкать" мышкой в любое из подокон ("диалог" Parameters закрывать необязательно). При изменении параметров с клавиатуры -нужен "двойной" щелчок в подокна (т.к первый применяет новое значение параметра к главному подокну (равносильно нажатию ОК но без закрытия "диалога") второй щелчок мышкой вызывает обновление (перерисовку) остальных подокон.


При применении в изначально изображенной ситуации, т.е. когда:
-------------------------------------------------
На одной странице (Sheet) расположено несколько подокон по одному инструменту (например в одном "цена+сигналы" (с параметрами), в другом- к примеру, эквити).
Код первого подокна (TC_1)- находится в Custom.
(Ввод параметров в первом подокне)
В коде второго содержится:
.....
#include "C:\.........путь......\Custom\TC_1.afl";
Plot (equity(........;

--------------------------------------------
Тут все несколько сложнее: т.к. ввод параметров из-за наличия #include можно производить как из первого так и из второго подокна, то, судя по всему наличие Param(..... в первом подокне ( соответственно через #include и во втором) блокирует применение передаваемого через STATICVARSET() - STATICVARGET() параметра.

Пока выход найден следующий:
Param(.... и STATICVARSET() перенесены во втрое подокно ( перед #include) ,STATICVARGET() - в первое.
Соответственно "рулим" только из второго подокна (где эквити).
Но в конечном итоге: это как раз и удобно т.к. при рулежке (мышкой)из этого подокна "вживую" меняется эквити, что по большому счету и требовалось...
(соответственно для перерисовки первого подокна( например при нахождении "интересной" картины по эквити) просто щелкаем мышкой за пределы "диалога" ).

Недостаток такого варианта- после открытия страницы надо щелкнуть мышкой в подокно для перерисовки первого подокна в соответствии с параметрами, сохраненными в "диалоге" Parameters.

Возможно есть более "элегантные" способы решения - надо еще подумать.
Чичиков
Гость





СообщениеДобавлено: Сб Фев 02, 2008 12:41 am Ответить с цитатой Вернуться к началу

В разобранном выше примере есть еще один недостаток:
Если код первого подокна содержит Plot, то индикаторы во второе окно через #include не переносится, что как раз и требуется.
А если мы применяем PlotShapes, то Shapes-значки отображаются в обоих подокнах- во втором- вокруг "0",что несколько мешает просмотру.
Все попытки избежать отображения значков во втором подокне пока ни к чему не привели. Может кто подскажет как быть..
Или с учетом того что в переводе хелпа написано "PlotShapes - Чертит стрелки или другие значки в любом подокне.": слова "в любом подокне" это приговор для моего начинания избежать "переползания" значков через #include?
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Сб Фев 02, 2008 3:40 pm Ответить с цитатой Вернуться к началу

Вообще Томаш не рекомендует использовать функцию #include. Может имеет смысл отказаться от её использования и просто скопировать нужный код в индикатор заменив #include. Тогда можно внести в него нужные изменения.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen