Перейти к публикации

Вызов диалогового окна из другого окна (Block Styler)


AleksandraN

Рекомендованные сообщения

Помогите пожалуйста с проблемой - программа представляет собой диалоговое окно (родительское), в нем несколько кнопок, по нажатию на каждую из них нужно вызвать соответствующие новые окошки (дочерние). Вызов окошка из другого окошка в свое время реализовывался мною с окошками User Interface Stylera и на С (UF библиотека), сейчас хотелось бы использовать NXOpen (Java, но не принципиально) и Block Styler. Подскажите как это реализовать, а то шаблончики, которые генерит User Interface Stylera и Block Styler сильно отличаются и не понятно даже как подступиться. Совсем не понятно как можно различать и обрабатывать нажатие на кнопку Применить в родительском и дочернем окошке. Если дадите кусок кода буду очень благодарна, но порадуют даже общие указания.

Изменено пользователем AleksandraN
Ссылка на сообщение
Поделиться на других сайтах
  • 6 месяцев спустя...


Подскажите в чем ошибка - при нажатии на Apply в dialog1 должно вызваться окно dialog2, но вместо этого - появляется ошибка : Невозможно запустить меню. В UI Styler была настройка того, может ли создаваемое окно вызывать другое окно. Но в BlockStyler ничего подобного не нашла. Хотелось бы понять ошибка связана с настройками диалоговых окон при создании или с кодом.

Ошибка возникает в момент theDialog2.show(); до этого инициализация окна идет нормально.

importjava.rmi.RemoteException;

importnxopen.*;

importnxopen.blockstyler.*;

publicclass dialog1 implementsBlockDialog.Initialize, BlockDialog.DialogShown, BlockDialog.FocusNotify, BlockDialog.KeyboardFocusNotify, BlockDialog.Apply, BlockDialog.Ok, BlockDialog.Update

{

//class members

publicstatic Session theSession = null;

publicstatic UI theUI = null;

static dialog1 thedialog1;

private String theDialogName;

privatenxopen.blockstyler.BlockDialogtheDialog;

privatenxopen.blockstyler.UIBlockgroup0;// Block type: Group

privatenxopen.blockstyler.UIBlocklabel0;// Block type: Label

privatenxopen.blockstyler.UIBlocktoggle0;// Block type: Toggle

public dialog1() throws Exception, RemoteException

{

try

{

theSession = (Session)SessionFactory.get("Session");

theUI = (UI)SessionFactory.get("UI");

theDialogName = "dialog1.dlx";

theDialog = theUI.createDialog(theDialogName);

theDialog.addApplyHandler(this);

theDialog.addOkHandler(this);

theDialog.addUpdateHandler(this);

theDialog.addInitializeHandler(this);

theDialog.addDialogShownHandler(this);

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

thrownew Exception(ex);

}

}

publicstaticvoid main(String [] argv) throws Exception

{

try

{

thedialog1 = newdialog1();

// The following method shows the dialog immediately

thedialog1.show();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

finally

{

if(thedialog1 != null)

{

thedialog1.dispose();

}

}

}

publicstaticfinalintgetUnloadOption()

{

//return BaseSession.LibraryUnloadOption.EXPLICITLY;

returnBaseSession.LibraryUnloadOption.IMMEDIATELY;

// return BaseSession.LibraryUnloadOption.ATTERMINATION;

}

publicstaticvoidunloadLibrary() throwsNXException, RemoteException

{

try

{

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicint show() throwsNXException, RemoteException

{

try

{

theDialog.show();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

return 0;

}

publicvoid dispose() throwsNXException, RemoteException

{

if(theDialog != null)

{

theDialog.dispose();

theDialog = null;

}

}

publicvoid initialize() throwsNXException, RemoteException

{

try

{

group0 = (nxopen.blockstyler.UIBlock)theDialog.topBlock().findBlock("group0");

label0 = (nxopen.blockstyler.UIBlock)theDialog.topBlock().findBlock("label0");

toggle0 = (nxopen.blockstyler.UIBlock)theDialog.topBlock().findBlock("toggle0");

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicvoiddialogShown() throwsNXException, RemoteException

{

try

{

//---- Enter your callback code here -----

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicint apply() throwsNXException, RemoteException

{

interrorCode = 0;

try

{

dialog2.show_dialog2();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

errorCode = 1;

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

returnerrorCode;

}

publicint update( nxopen.blockstyler.UIBlock block) throwsNXException, RemoteException

{

try

{

if(block == label0)

{

//---------Enter your code here-----------

}

elseif(block == toggle0)

{

//---------Enter your code here-----------

}

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

return 0;

}

//------------------------------------------------------------------------------

//Callback Name: ok

//------------------------------------------------------------------------------

publicint ok() throwsNXException, RemoteException

{

interrorCode = 0;

try

{

//---- Enter your callback code here -----

errorCode = apply();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

errorCode = 1;

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

returnerrorCode;

}

publicstaticclass dialog2 implementsBlockDialog.Initialize, BlockDialog.DialogShown, BlockDialog.FocusNotify, BlockDialog.KeyboardFocusNotify, BlockDialog.Apply, BlockDialog.Ok, BlockDialog.Update

{

//class members

static dialog2 thedialog2;

private String theDialogName2;

privatenxopen.blockstyler.BlockDialogtheDialog2;

privatenxopen.blockstyler.UIBlockgroup0;// Block type: Group

privatenxopen.blockstyler.UIBlockbutton0;// Block type: Button

public dialog2() throws Exception, RemoteException

{

try

{

theSession = (Session)SessionFactory.get("Session");

theUI = (UI)SessionFactory.get("UI");

theDialogName2 = "dialog2.dlx";

theDialog2 = theUI.createDialog(theDialogName2);

theDialog2.addApplyHandler(this);

theDialog2.addOkHandler(this);

theDialog2.addUpdateHandler(this);

theDialog2.addInitializeHandler(this);

theDialog2.addDialogShownHandler(this);

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

thrownew Exception(ex);

}

}

publicint show() throwsNXException, RemoteException

{

try

{

theDialog2.show();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

return 0;

}

//------------------------------------------------------------------------------

//Method Name: dispose

//------------------------------------------------------------------------------

publicvoid dispose() throwsNXException, RemoteException

{

if(theDialog2 != null)

{

theDialog2.dispose();

theDialog2 = null;

}

}

publicstaticvoid show_dialog2() throwsNXException, RemoteException

{

try

{

thedialog2 = newdialog2();

// The following method shows the dialog immediately

thedialog2.show();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

finally

{

thedialog2.dispose();

}

}

publicvoid initialize() throwsNXException, RemoteException

{

try

{

group0 = (nxopen.blockstyler.UIBlock)theDialog2.topBlock().findBlock("group0");

button0 = (nxopen.blockstyler.UIBlock)theDialog2.topBlock().findBlock("button0");

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicvoiddialogShown() throwsNXException, RemoteException

{

try

{

//---- Enter your callback code here -----

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

}

publicint apply() throwsNXException, RemoteException

{

interrorCode = 0;

try

{

//---- Enter your callback code here -----

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

errorCode = 1;

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

returnerrorCode;

}

publicint update( nxopen.blockstyler.UIBlock block) throwsNXException, RemoteException

{

try

{

if(block == button0)

{

//---------Enter your code here-----------

}

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

return 0;

}

publicint ok() throwsNXException, RemoteException

{

interrorCode = 0;

try

{

//---- Enter your callback code here -----

errorCode = apply();

}

catch(Exception ex)

{

//---- Enter your exception handling code here -----

errorCode = 1;

theUI.nxmessageBox().show("Block Styler", nxopen.NXMessageBox.DialogType.INFORMATION, ex.getMessage());

}

returnerrorCode;

}

}

}

Ссылка на сообщение
Поделиться на других сайтах

Уважаемая Александра!

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

Да, в старом добром UI_стулере была галочка "Разрешить дочерние диалоги", есть ли таковая в блок-стулере - мне неизвестно.

Еще момент - здесь на форуме немало программистов, которые пишут на С, С#, но вот на Jave - думаю не так много. Да еще и для BlockStyler.

Ссылка на сообщение
Поделиться на других сайтах

"Портянка" - просто соединенные два шаблона, полученные из BlockStylera (для диалогового окна dialog1 и dialog2), а разница в коде для С++, С# и Java минимальная, так что если есть примеры или теория как сделать на любом другом языке (только без старых UI функций, которыми только на С можно пользоваться) , но используя BlockStyler , буду тоже благодарна.

Из коментов при генерации шаблонов понятно только, что в родительском окне dialog1 нужно вызвать дочернее окно dialog2.show_dialog2(); А в dialog2 точко входа должна быть - вызовом из другого диалога (callback ). Работа с NXOpen начиналась с C,C++ такчто если есть идеи (а лучше конечно пример) насчет реализации на других языках, тоже подойдет. В крайнем случае буду делать на С с UIStyler - там уже все понятно, но хотелось бы использовать приемущества BlockStyler и Java. Заранее спасибо за любую помощь.

Ссылка на сообщение
Поделиться на других сайтах

Как оказалось, при вызове дочернего окна при нажатии на свою кнопку, а не на стандартные (ок, применить) все проходит без ошибок. Не понятно только вызов диалога по стандартным кнопкам впринципе не предусмотрен или что-то где-то надо было прописать/исправить?

Далее возникает другая проблема - после закрытия дочернего окна пока не удалось реализовать корректное возвращение в родительское и его закрытие-завершение работы программы. А именно - после закрытия дочернего окна показываю родительское Dialog1.show(), затем нажимаю на OK, окно закрывается, но NX будто не видит что окошки все закрыты, сессия остается в том виде (много не активных кнопок и меню), в каком она была во время работы приложения. Как-то получается что родительское окно и класс не уничтожаются (дело не доходит до dispose). Может кто сталкивался с такой ошибкой? Сейчас пытаюсь уничтожать родительский класс по разному, но все время или остается та же ситуация или возникает ошибка с памятью.

Ссылка на сообщение
Поделиться на других сайтах

Спасибо, попробовала, не получается. Закрадывается подозрение что что-то с классами или доступом не так. Вообще вопрос - UG lock статус, это вообще что такое, потому что в ходе работы менюх он у меня всегда UNLOCK?

В итоге пока так - из родительского окна вызывается дочернее, при этом родительское окно автоматически скрывается (закрывается???) Открывается дочернее, там все корректно отрабатывается, но после его закрытия родительское окно не возврвщается и NX остается в полу-недоступном виде (тут просто делается отмена Ctrl+Z и NX становиться активным). Если же в коде прописать открытие родительского окна после отработки дочернего, то после закрытия родительского не происходит его уничтожения (callback на OK отрабатывает, но диалог не dispose -иться) и тут уже идут ошибки с памятью.

Ссылка на сообщение
Поделиться на других сайтах

На С# применяю this.Activate() после вызова дочерних окон, чтоб родительское всплывало.

И сам вызов дочерних делаю ShowDialog(), а не Show().

Но это не блок-стайлер, а winforms...

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • filsan
      Вот сюда коллаж выложил. Надеюсь смог донести свой вопрос. 
    • mannul
      Ну видимо это величина отвода и так называемый "подбор ступенек", когда после прохода резец движется эквидистантно контуру и подчищает уступ. Настраивается наверное в дополнительных параметрах. И резец перемещается не на 7мм, а на 3.5мм, не забывайте что на токарном X задается как диаметр.
    • gudstartup
      вы сначала определитесь нужны батарейки или нет. для этого посмотрите что у васв параметре 1815 в битах apz apc если apc=1 то у вас абсолютная система позиционирования. далее посмотрите маркировку красных датчиков моторов если там перед цифрой есть большая буква А aiA1000 b и т.д. тогда датчик абсолютный и вам точно нужна батарейка 6в она может подключаться как к каждому приводу та и быть общей для всех и подключаться на разъем cxa2a в этом случае ставят отдельный контейнер для батареек типоразмера D час счетчик держится за счет  внутренних ионисторов в датчиках. значит напряжение батареи не доходит до ваших датчиков и
    • Guhl
      Вы убедились в том, что датчик цанги "разжато/зажато" корректно работает? Или не смотрели в диагностику? Пробовали ли вы пошаговое выполнение цикла смены. Обычно такой режим предусмотрен, как правило, активируется М-кодом. В пошаговом режиме удобно проверять все датчики и кулачки. Инструкция на станок и схема имеются?  
    • gudstartup
      тогда в худшем случае неисправна главная плата где то там проблемы с корпусами bga или переходными межслойнымит отверстиями
    • gudstartup
      предположение что цикл смены инструмента прописан в pmc без разжима цанги не может иметь место. если положение руки отслеживается по кулачкам копира то возможно сигнал приходит слишком поздно а цикл руки непрерывный и из за этого происходит рывок. если же рука позиционируется приводом по датчику положения то до того как начать движение из под шпинделя должна прийти команда на разжим и сработать датчик что инструмент разжат иначе цикл смены закончится ошибкой
    • Rainbow7
      В этом смысле в таком случае ваше утверждение верно. После перетыкания этого разъёма ничего не меняется.
    • Artas28
      Добрый день! Может кто поделиться постами для 5 осей, стол-стол AC и BC? И у спрутов есть какая нибудь библиотека постов, которую можно скачать, имея оплаченную тех-поддержку?
    • gudstartup
      я имел ввиду что она рядом с чпу. а где вы нашли такой разъем на плате чпу? mdi клавиатура подключается к этому разъему и это явно не db9
    • Rainbow7
      Здравствуйте, вопрос по приводу, на станке случилась ситуация, после чего сбились все референтные позиции, чтобы запустить станок, было решено выставить их, но при проверке батарей привода, они не были обнаружены, установили новую батарею в привод, выставили точки, после чего, при включении станка более чем на час, все сбивается. Вопрос, каким способом настраивается привод без батареи, и почему сейчас с батареей, после включения сбрасывается и жалуется на напряжение батареи, хотя она новая.
×
×
  • Создать...