Jump to content
Sign in to follow this  
FortRoss

Вопросы по созданию приборов на С++

Recommended Posts

Спасибо, Сергей, за ответ, но может кто из знающих все же подскажет=)

Share this post


Link to post
Share on other sites

Определение статической переменной:

ID id_agr72_sprite_y = -1;

 

В инициализации (лучше всего в module_init()):

// проверяем есть ли L:переменная, если нет - создаем
if((id_agr72_sprite_y = check_named_variable("agr72_sprite_y")) == -1)
   id_agr72_sprite_y = register_named_variable("agr72_sprite_y");

 

Чтение:

agr72_sprite_y_cbvar = get_named_variable_value(id_agr72_sprite_y);

 

Запись:

set_named_variable_value(id_agr72_sprite_y, agr72_sprite_y_cbvar);

 

// id_agr72_sprite_y - числовой идентификатор данной переменной

// agr72_sprite_y_cbvar - некая переменная C.

 

В деинициализации (лучше в module_deinit()):

unregister_all_named_vars ();

 

Лучше всего все ID и нэймы L:переменных запихнуть в массив структур (который инициализировать сразу же при определении, так удобней) и уже оперировать с ним (тут уже многие операции можно будет производить в циклах).

Можно сделать связанный список структур или класс, например, LVars, содержащий связанный список экземпляров классов, например, LVar.

Edited by serg_p
  • Upvote 1

Share this post


Link to post
Share on other sites

Спасибо Сергей! Приятно, когда есть отзывчивые люди.

Share this post


Link to post
Share on other sites

Был вопрос про SimConnect в отдельной ветке.

 

Вот небольшой пример.

Мож пригодится.

Это для FSX.

 

Определены классы для работы с L:переменными, класс-родитель всех систем, пример топливной системы, пример системы управления центровкой.

 

Все файлы cpp - отдельно-компилируемые модули (далее по тексту просто модули).

 

Модуль sim (sim.h и sim.cpp) - все дела связанные с симконнектом. Там подробные комментарии (в файлах sim.h и sim.cpp). SimConnect.dll загружается явным образом из предопределенного места. Соответственно все вызовы функций SimConnect-а - через указатели, которые получаются через вызов функции API - GetProcAddress(). Прибегнуть к такому варианту зугрузки SimConnrect-а заставили постоянные траблы у пользователей с симконнектом.

SimConnect.dll от FSX+SP1 лежит в fsx_gau\for_sim\panel\SimConnectSP1\

 

Уровень логики полностью отвязан от приборов визуализации. Но для того, что бы произошла инициализация - необходимо прописать в Panel.cfg хотя бы один прибор из dll. В примере это невидимый прибор - LogicLevel. Определен в главном модуле (main.cpp).

 

В main.rc определны свойсва dll.

Там все "NO NAME" и "No copyright".

Я специально все убрал.

 

Проект сделан в VC++ 2008.

 

Все из SDK для FSX + SP1

 

В проекте используется только одна конфигурация - Release. Debug я удалил. Но я изменил параметры компиляции так, что при компиляции и сборке генерится отладочная информация. Вся она записывается в файл fsx_gau.pdb. В fsx_gau.dll прописан только путь к fsx_gau.pdb. Такой вариант, по моему мнению, более удобен по сравнению с работой в двух конфигурациях проекта. Всегда есть релизная dll и всегда есть возможность ее отладить. Для отладки нужен только pdb файл. Естественно пользователям его не даем. Даем только dll. Но здесь есть минус. Пришлось отключиь оптимизацию. Помню читал статейку про то, что оптимизация - зло. Для меня было достаточно убедительно. Правда ссылку потерял. Это конечно все спорно, но я выбрал этот вариант работы и все gau делаю именно так, с генерацией отладочной информации и отключенной оптимизацией.

Edited by serg_p

Share this post


Link to post
Share on other sites

Уровень логики полностью отвязан от приборов визуализации. Но для того, что бы произошла инициализация - необходимо прописать в Panel.cfg хотя бы один прибор из dll. В примере это невидимый прибор - LogicLevel. Определен в главном модуле (main.cpp).

 

Серёга, до сих пор? Можно же сделать как в кишках девятки с инициализацие в модуле и вклиниванием в общую цепь обновления гауг. Вроде даже обсуждали это уже. Я точно помню, что Денис говорил, что в десятке симконектом это можно сделать штатно.

Share this post


Link to post
Share on other sites

Свой модуль, в FSX, ты должен класть инсталлером в определенное место и еще обязательно прописать его в xml файле, где прописываются внешние, по отношению к симу, модули. Т.е. твой инсталлер должен будет корректно модифицировать этот xml файл. Ну шо бы сим знал, что ету dll надо загружать при старте. Плюс твой модуль будет висеть всегда в памяти, нужен он, ненужен, он будет там пока не умрет сим.

 

Для меня все это зло!

 

Мне легче dll положить в папку Panel (ну или в предопределенную папку внутри папки модели) и прописать одну строчку с фейковым прибором в Panel.cfg (если в dll нет ни одного видимого прибора) и все, уровень логики заработал.

 

Тут принцип простой. Если в dll есть хотя бы один прибор, пусть даже невидимый, причем не важно, где в Panel.cfg он прописан, то этого достаточно, что бы сим загрузил эту dll и выполни ее инициализацию. После загрузки срабатывает module_init(), инициализируется SimConnect, происходит подписка на системное событие Frame - все, моя логика заработала и заработала совершенно независимо от уровня представления.

 

Т.е. достаточно просто добавить одну строку в Panel.cfg, не важно куда, и моя dll будет работать, как надо и загружаться только с моей моделью. Более того, повторюсь, если в dll есть хотя бы один видимый прибор, то фейковый, невидимый прибор уже не нужен.

 

 

Так, кстати, у меня сейчас работает и тушка в FS9. 5 gau (это сложилось исторически). Фейковые приборы тут даже и не нужны, я их все поубивал, ибо в каждой из gau куча видимых приборов. Т.е. загрузка и инициализация моих dll (gau) обязательно произойдет, а при их инициализации и запуск моего уровня логики (вклинивание в цепочку). Естественно все это ща в тушке работает не через симконнект, а сам знаешь чрез что. Более того, если я захочу все причесать и свести весь уровень логики в одну dll уровня логики, то и в этом случае я не буду ее делать как модуль. Мне не трудно прописать одну строку в Panel.cfg и при этом получить независимый уровень логики загружающийся вместе с моей моделью.

 

Ну и скажи, накой мне городить в тушке модуль?

 

Если конечно у меня не возникнет необходимость "ожить" до загрузки моей модели. Тут да - без модуля не обойтись!

 

Правда в связи с FSX смущает немного одно обсоятельство. Если у тебя, например, 3 dll, то в этом случае будут открыты три сессисии SimConnect-а. Но я думаю (я точно не проверял), что это совсем не накладно. Так шо особо-то причиной городить модуль,это обстоятельство тоже не может быть.

 

 

Ну а вообще, лучше все пробовать самому, а не говорить, что вот Денис говорил, а ты до сих пор. Т.е. попробуй сам и тогда ты точно будешь знать ценость любого совета для себя и соответственно для конкретного контекста.

Edited by serg_p

Share this post


Link to post
Share on other sites

Ну а вообще, лучше все пробовать самому, а не говорить, что вот Денис говорил, а ты до сих пор. Т.е. попробуй сам и тогда ты точно будешь знать ценость любого совета для себя и соответственно для конкретного контекста.

 

Нуууу, не ругайся. Про части, называемые модуль в понятии сима, ты прав. Но я так обычную гаугу обозвал и попробовал на девятке такой "модуль". Грузится на ура только с тем самолётом, где используется, выгражуется тоже вместе с самолётом и иницилизации не надо через невидимый прибор. А как твой способ при загрузке полёта сразу ВК? Пойми мне правильно, я противник подходов "загрузи самолёт, вылези из него, залезь в цессну". Я не думаю, что эйсы в десятке сделали другое что-то, просто сделали доступ к этой цепочке документированым и всё. Но опять же, могу быть не прав, десятку в книжках видел.

Share this post


Link to post
Share on other sites

Если уровень логики крутится не CalBack-ом прибора, а обработчиком события (что в FS9, что в FSX) - логика систем работает вне зависимости от того работают ли приборы или нет. Т.е. это означает, что вне зависимости от того, где ты загрузился в 2D или в ВК, твоя топливная система, гидросистема, курсовая система и т.д. - будут работать, тока надо потыкать тумблера. Т.е. здесь не получится так, что загрузившись в ВК, тебе обязательно надо показать главную панель, что бы все закрутилось.

 

Так у меня в примере.

 

Так сейчас у меня в тушке.

За исключение прибора ККП и озвучки экипажа. Думаю, даст Бог - доделаю. Сейчас делаю сохранение/восстановление состояния систем. Данные сначала запихиваю в map (контейнер map из STL, а затем сбрасываю в файл. При загрузке - из файла в map. Переменная в map-е ищется по ключу, по своему найму (поиск очень быстрый, в одноразовом событии загрузки полета - вполне все к месту). Далее извлекается Value и присваивается соответствующему полю, переменной.

 

STL - обалденная вещь. Жалею, что поздно ее для себя открыл.

Edited by serg_p

Share this post


Link to post
Share on other sites

Ах вот почему у меня логика да и вообще все начинает работать только после переключения в 2D.

Вовремя прочитал, теперь надо думать как пользоваться обработчиком событий...

Edited by seyco

Share this post


Link to post
Share on other sites

Если уровень логики крутится не CalBack-ом прибора, а обработчиком события (что в FS9, что в FSX) - логика систем работает вне зависимости от того работают ли приборы или нет. Т.е. это означает, что вне зависимости от того, где ты загрузился в 2D или в ВК, твоя топливная система, гидросистема, курсовая система и т.д. - будут работать, тока надо потыкать тумблера. Т.е. здесь не получится так, что загрузившись в ВК, тебе обязательно надо показать главную панель, что бы все закрутилось.

 

 

А у меня так и получилось, пока все 2D панели с тумблерами не откроешь (тумблеры уже включены из памяти cfg-а), приборы не хотят работать, даже после того, как всю логику работы перенес из одного прибора в логику симконнекта.

 

...

 

Проблему решил просто - открыл, закрыл все панели (кроме 1-й) в инициализации.

Edited by seyco

Share this post


Link to post
Share on other sites

Это не решение.

 

Собственно это решение первое, что приходит в голову. Но это - не решение.

 

Тогда уж вот так:

пост #56

 

Но это тоже не решение.

Единственно правильное решение "вклится в цепочу".

Как?

Для FSX все показано и рассказано.

Здесь.

Для FS9 решение есть, но это через личку.

Причем, за неимением времени - передача библиотеки и небольшой пример.

Share this post


Link to post
Share on other sites

Если уровень логики крутится не CalBack-ом прибора, а обработчиком события (что в FS9, что в FSX) - логика систем работает вне зависимости от того работают ли приборы или нет. Т.е. это означает, что вне зависимости от того, где ты загрузился в 2D или в ВК, твоя топливная система, гидросистема, курсовая система и т.д. - будут работать, тока надо потыкать тумблера. Т.е. здесь не получится так, что загрузившись в ВК, тебе обязательно надо показать главную панель, что бы все закрутилось.

 

Я вернусь к этой теме, когда перелезу на десятку. Как в девятке знаю, давно уже всё отвязали, всё крутится вне зависимости от способа загрузки самолёта и т.п.

 

STL - обалденная вещь. Жалею, что поздно ее для себя открыл.

 

STL - удобная вещь, не более. А скажи-ка мне, в какой файл ты сохраняешь это всё? В файл полёта или в отдельный? И на каком этапе происходит загрузка? Спрашиваю так ехидно, потому что сам малость посидел над этой темой (хотя и девятке).

Share this post


Link to post
Share on other sites
... STL - удобная вещь, не более. А скажи-ка мне, в какой файл ты сохраняешь это всё? В файл полёта или в отдельный? И на каком этапе происходит загрузка? Спрашиваю так ехидно, потому что сам малость посидел над этой темой (хотя и девятке).

Я тоже это сейчас делаю в девятке (в ПТ Ту-154М). Узнаю имя полета, используя недокументированные возможности, ну, ту, классную библиотечку (причем, получаю полное имя файла). А дальше к этому полному имени просто прибавляю расширение .pt154msave и соответственно сбрасываю туда map при сохранении полета. При загрузке читаю свой файл (имя которого отличается от имени файла полета расширением) и закидываю в map.

 

Здесь собственно все прозрачно.

Единственное, есть две трудности, которые непреодолимы при использовании штатного SDK:

1. Получить имя файла текущего полета;

2. Сесть на событие сохранение полета.

Но все это позволяет преодолеть, как говорилось выше - "золотая библиотека" (для FS9).

Edited by serg_p

Share this post


Link to post
Share on other sites

А у меня так и получилось, пока все 2D панели с тумблерами не откроешь (тумблеры уже включены из памяти cfg-а), приборы не хотят работать, даже после того, как всю логику работы перенес из одного прибора в логику симконнекта.

...

 

Проблему решил просто - открыл, закрыл все панели (кроме 1-й) в инициализации.

 

Пересмотрел полностью весь проект - от отсутствия опыта конечно много накосячил, ночь убил на пересмотр и отладку проекта. Вот теперь не надо панели открывать, все начинает работать через несколько секунд после загрузки самолета.

 

Но появился еще вопрос, на который сам пока не могу найти ответ.

В отрисовки приборов есть такая строка:

 

PELEMENT_HEADER tank_2_list_2[] = {&tank_2_03.header, NULL};

 

еще можно писать так:

 

PELEMENT_HEADER tank_2_list_2[] = {(PELEMENT_HEADER)&tank_2_03, NULL};

 

Объясните пожалуйста, в чем разница?

 

В СДК есть пример:

 

 

PELEMENT_HEADER cs_sliders_list[] = {&cs_slider_trim.header, &cs_slider_ailerons.header, &cs_slider_elevator.header, &cs_slider_rudder.header, NULL};

 

Если я правильно понял, это обозначение последовательности отрисовки деталей или нет?

Share this post


Link to post
Share on other sites
... PELEMENT_HEADER tank_2_list_2[] = {&tank_2_03.header, NULL};

 

еще можно писать так:

 

PELEMENT_HEADER tank_2_list_2[] = {(PELEMENT_HEADER)&tank_2_03, NULL};

 

Объясните пожалуйста, в чем разница? ...

PELEMENT_HEADER tank_2_list_2[] = {&tank_2_03.header, NULL};

Это определение статической переменной, которая тут же и инициализируется. Т.к. tank_2_list_2[] - это массив, то инициализация здесь производится не одним значением, а списком значений. NULL - это тоже значение. По этому значению симулятор определяет, что это конец массива. Стандартная практика в C.

 

{(PELEMENT_HEADER)&tank_2_03, NULL};

и

{&tank_2_03.header, NULL};

Это одно и тоже, за исключением того, что в верхней строке - явное приведение типа указателя, это хорошая практика, приведение типов осуществлять самому, т.е. явно. & - операция взятия адреса.

 

seyco

Это последний раз, когда я разъясняю элементарщину. И других программеров, жаждущих Вам объяснять элементарные вещи, Вы здесь не увидите. По этому еще раз настоятельно рекомендую Вам пройти, какую-нибудь книгу, прорешав все примеры, где поэтапно разжевываются все элементарные понятия. Без этого Вы будете постоянно спотыкаться.

 

Вот например

C++. Бархатный путь

 

На эту книгу я наткнулся, введя сейчас в гугле: "книга C++ элементарные понятия".

 

Про нет времени - не аргумент.

Тут либо делать на XML, на котором мало чего можно сделать, причем все делается через задницу, или использовать инструмент профессионалов, т.е. C/C++. В случае с C/C++ - все сложно, но других путей MS нам не дал. Было бы все по-другому, если бы было так, например: приборы описывались бы в XML, а логику их работы можно было бы реализовать в lua, это бы было бы здорово. Но в FS9/FSX - не так.

Edited by serg_p

Share this post


Link to post
Share on other sites
...

В СДК есть пример:

 

 

PELEMENT_HEADER cs_sliders_list[] = {&cs_slider_trim.header, &cs_slider_ailerons.header, &cs_slider_elevator.header, &cs_slider_rudder.header, NULL};

 

Если я правильно понял, это обозначение последовательности отрисовки деталей или нет?

А вот на такие вопросы уже и не грех ответить.

 

Да, это список указателей на визуальные элементы. Используется симом в процессе обхода дерева приборов и их визуальных элементов. В каждом визуальном элементе есть указатель на next список визуальных элементов. Собственно из таких списков (в виде инициализированного статического массива, оканчивающегося элементом NULL) и строится дерево приборов и их визуальных элементов в dll (в gau). Ну и соответственно это дерево строится gau-писателем ведь не просто так. Именно через него сим осуществляет доступ к каждому визуальному элементу при прорисовке и именно имея указатели на приборы и их визуальные элементы сим 18 раз в секунду вызывает CallBack-функции всех приборов и визуальных элементов, если конечно они определены.

 

 

Важный момент.

Правильное построение дерева приборов и их визуальных элементов имеет очень важное значение (вернее будет - правильное построение поддеревьев (сучьев, веток, листьев), визуальных элементов в каждом приборе). Но это уже другая тема.

 

Почему именно дерево?

Потому, что это действительно дерево.

 

Корень вот:

// This is the module's export table.
GAUGESLINKAGE Linkage =
{
   0x00000013,
   module_init,
   module_deinit,
   0,
   0,
   0x800,
   {
	 GAUGE_TABLE_ENTRY(&gaugehdr_isd1)
	 GAUGE_TABLE_ENTRY(&gaugehdr_isd2)
	 GAUGE_TABLE_ENTRY(&gaugehdr_kurs_mp_selekt)
....

 

Корень - структура Linkage. Далее список сучьев - приборов (после после 0x800). Ну а далее в каждом приборе, ветвление визуальных элементов.

Edited by serg_p

Share this post


Link to post
Share on other sites

Спасибо Сергей за ответы, сорри, если не совсем точно могу задать свой вопрос.

 

PELEMENT_HEADER tank_2_list_2[] = {&tank_2_03.header, NULL};

Это определение статической переменной, которая тут же и инициализируется. Т.к. tank_2_list_2[] - это массив, то инициализация здесь производится не одним значением, а списком значений. NULL - это тоже значение. По этому значению симулятор определяет, что это конец массива. Стандартная практика в C.

 

{(PELEMENT_HEADER)&tank_2_03, NULL};

и

{&tank_2_03.header, NULL};

Это одно и тоже, за исключением того, что в верхней строке - явное приведение типа указателя, это хорошая практика, приведение типов осуществлять самому, т.е. явно. & - операция взятия адреса.

 

Здесь я просто засомневался в синтаксисе, для чего эти строки я прекрасно понимаю.

 

Вот например

C++. Бархатный путь

 

На эту книгу я наткнулся, введя сейчас в гугле: "книга C++ элементарные понятия".

 

 

Спасибо за ссылку, большой объем информации, самый полный для меня на сегодня.

Для меня интернет - огромная помойка, думаю не только для меня, и когда ищешь то, что тебе нужно, обязательно вылезет куча хлама, а в нём найти что-то нужное весьма затруднительно.

Вот то, что я читал и практиковал, может кому сгодится:

http://shatalov.su/r.../cpp_primer.php

http://kvodo.ru/category/lessons

http://gendocs.ru/v3...33/лекции_по_cс

http://iguania.ru/

http://www.cppstudio...-vybora-if-else

 

Для подключения звука:

http://www.gamedev.r.../ds_usage_basic

http://exelab.ru/pro...=zart126<br />http://subscribe.ru/...54450.html#ds41

 

Естественно нигде нет полной информации для самостоятельного нормального обучения. Не думайте, что я "халявщик" и ничего не делаю для изучения. Для правильной обработки полученной информации нужен опыт в работе С++, просто примеры - этого мало. Нужен контроль, хоть какой-то. А то понял не совсем так и потом понеслось... Да и память у человека не компьютерная. Для переваривания каши в голове - практика, практика и еще раз практика. Появляются знания, появляются вопросы... Почитаешь форумы по С++, иногда волосы дыбом, хоть бы раз попал на форумы, где могут грамотно дать ответ на конкретный вопрос, а то и вовсе отправляют книги читать. Вот и приходится спрашивать тонкости для меня, для вас профи - элементарщина.

Edited by seyco
  • Upvote 1

Share this post


Link to post
Share on other sites

Ну да, соглашусь, в русском инете - сплошные какие-то ублюдки. Неужели человечество вымерает?

(Хотя, кое-где встречаются люди, из-за которых еще теплится свет.)

 

Хорошая книга - вот верный друг. И лучше в твердой копии.

Конечно вопрос, где найти.

Но, как ни странно, этот сраный тырнет может в этом помочь.

Правда тут есть одна трудность. Если ты еще слаб в теме, то трудно определиться с тем, что именно тебе подходит. Тут конечно очень могут помочь советы тех кто знает. Но можно и самому наткнуться на стоящее. Так бывает. У меня не раз было. Я очень желал хорошую книгу по интересующей теме и она находилась.

 

До определенного времени для меня Windows API был темный лес.

Пока мне не посоветовали почитать:

Джеффри РИХТЕР, Создание эффективных WIN32-приложений с учётом специфики 64-разрядной версии Windows

(Два издания этой книги я скачал из интернета)

Я бы этому человеку крепко пожал бы руку, ели бы довелось встретится.

 

По поводу програмирования для сима, Андрей icebear в свое время говорит про книгу Грифитcа (не знаю, правильно ли я пишу имя). То же, как я понял из его слов очень полезная книга для программистов работающих с симом.

 

Еще есть сайт:

http://www.fsdeveloper.com/

Кажется тут видел не раз самого Доусона (того, кто написал фсупик)

Наверное еще есть сайты. Не раз натыкался на интересные вещи работая с поиском в гугле.

Единственное - они все на английском.

 

Ну и некоторые вещи (причем, думаю что важные) можно найти здесь.

 

Если вспомню или наткнусь на полезные книги - обязательно напишу.

Edited by serg_p

Share this post


Link to post
Share on other sites

коммент по поводу очередности загрузки - с SimConnect может взаимодействовать и "приборная" dll, запись для нее в конфиге коннекта не нужна, записи в конфиге коннекта нужны для внешних библиотек, которые будет грузить сам коннект. Загружена же приборная dll будет при загрузке модели, тогда же будет дернут ее module_init, в котором и надо проинициализировать интерфейс с коннектом. Так что невидимый прибор - лишняя сущность

Share this post


Link to post
Share on other sites

Денис, Вы, похоже, имеете в виду случай, когда в dll есть видимые приборы и они прописаны в Panel.cfg. Тут да, сим загрузит dll, прочтет Linkage, выгребет из него указатель module_init() и запустит ее. Но ведь может быть так, что в данной dll нет ни одного видимого прибора, ну, например, просто не надо. В этом случае потребуется сделать один фейковый, невидимы прибор и писать его в Panel.cfg.

 

Т.е. тут собственно вопрос, откуда сим узнает, что нужно загрузить данную dll, если из нее в Panel.cfg, запускаемой модели не прописан ни один прибор и если данная dll не прописана в DLL.xml? Тут по-любому нужен либо один фейковый прибор, что бы сим загружал dll при загрузке полета с данной моделью, либо необходимо прописать dll в DLL.xml, что бы сим ее грузил при собственном старте. Я лично других вариантов не знаю и в SDK для FSX не видел. Мож пропустил.

 

А вариант, когда нет надобности делать в dll видимые приборы - реально возможен. Я сделал для Никиты (для Ту-144) dll, код которой читает некоторые L:переменные и пишет через SimConnect в переменные некоторых топливных баков и в некоторые Payload Stations (PAYLOAD STATION WEIGHT:index). Здесь потребовалось сделать один невидимый прибор и прописать его в Panel.cfg, что бы FSX загружал dll при старте полета с Ту-144. Собственно случай dll без единого видимого прибора вполне возможен и в серьезном приборном комплексе, когда весь уровень логики сконцентрирован в одной dll, а визуализация происходит исключительно в ВК через 3D приборы (собственно идеальный вариант ВК для самолетов с будильниками), ну или посредством XML приборов.

Edited by serg_p

Share this post


Link to post
Share on other sites

День добрый. Для реализации множества систем ЛА потребовалось большое количество панелей (2D). В gauges.h и мануале SDK (Event IDs) нашел использование только 9ти панелей. Подскажите пожалуйста, если возможно, как открывать и закрывать панели с номером больше [Window08]?

 

И вот еще вопрос:

trigger_key_event (KEY_PANEL_1, 0); - с помощью этой команды происходит открытие / закрытие панели №1,

trigger_key_event (KEY_PANEL_ID_OPEN, 0); - а вот здесь не могу понять как открыть нужную панель?

Share this post


Link to post
Share on other sites

День добрый. Для реализации множества систем ЛА потребовалось большое количество панелей (2D). В gauges.h и мануале SDK (Event IDs) нашел использование только 9ти панелей. Подскажите пожалуйста, если возможно, как открывать и закрывать панели с номером больше [Window08]?

 

И вот еще вопрос:

trigger_key_event (KEY_PANEL_1, 0); - с помощью этой команды происходит открытие / закрытие панели №1,

trigger_key_event (KEY_PANEL_ID_OPEN, 0); - а вот здесь не могу понять как открыть нужную панель?

 

в panel.cfg создаешь к примеру

 

[Window16]

Background_color=0,0,0

size_mm=690,276

visible=0

position=0

sizeable=1

ident=10016

 

gauge00=gauge!name, 0, 0

 

в гауге

 

#define IDENT_P16 (IDENT_USER+16)

 

panel_window_open_ident(IDENT_P16);

panel_window_close_ident(IDENT_P16);

Edited by fsfreelancer

Share this post


Link to post
Share on other sites

в panel.cfg создаешь к примеру

 

[Window16]

Background_color=0,0,0

size_mm=690,276

visible=0

position=0

sizeable=1

ident=10016

 

gauge00=gauge!name, 0, 0

 

в гауге

 

#define IDENT_P16 (IDENT_USER+16)

 

panel_window_open_ident(IDENT_P16);

panel_window_close_ident(IDENT_P16);

 

Огромное спасибо, Работает! Теперь когда нет ограничений в окнах, можно в проект добавить много полезного... Например надпись "пауза" в середине экрана, когда пользователь ее жмет (не всегда сразу заметно дефолтную в углу экрана).

Edited by seyco

Share this post


Link to post
Share on other sites

Огромное спасибо, Работает! Теперь когда нет ограничений в окнах, можно в проект добавить много полезного... Например надпись "пауза" в середине экрана, когда пользователь ее жмет (не всегда сразу заметно дефолтную в углу экрана).

 

ага. главное не забудь ident менять в окнах, пользовательские начинаются с 10000. и еще помоему есть какое-то ограничение на количество этих окон. количество не скажу, не помню.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...