Display a MFC Modal Dialog with CListBox in TestStand
I want to display a MFC Modal Dialog with a CListBox element, but I can't fill the listbox with data.
Here are some commands of my program:
SequenceContext seqContext;
Engine engine;
seqContext.AttachDispatch(seqContextDisp, FALSE);
engine.AttachDispatch(seqContext.GetEngine());
HWND parentHwnd = (HWND)engine.GetAppMainHwnd();
CSearch_Line_Window_Dialog dlg(CWnd::FromHandle(parentHwnd));
dlg.m_SearchLineWindow_Listbox.m_hWnd = parentHwnd;
(without this command I get the error "Debug Assertion Failed", because of ASSERT(::IsWindow(m_hWnd)))
dlg.m_SearchLineWindow_Listbox.AddString("Hallo");
dlg.DoModal();
seqContext = NULL;
engine = NULL;
The dialog with the emtpy listbox appears, b
ut without any text. I tried the same by using NotifyStartOfModalDialogEx and NotifyEndOfModalDialog. The example "MFC_Modal_Dialog" opens only a dialog without elements.
I hope you can help me to solve my problem.
Thank you.
I've about the same problem and tried to implement your solution but can't get it to run. I always receive an assertion failure.
I try to fill the ComboBox in a dialog with items at runtime. (use VC++ and MFC-DLL)
the header of my dialog:
class DlgSelectECU : public CDialog
public:
DlgSelectECU(CWnd* pParent = NULL);
BOOL OnInitDialog();
//{{AFX_DATA(DlgSelectECU)
enum { IDD = IDD_DLGSELECTECU_DIALOG };
CComboBox m_ECUList;
CStringList m_StringList;
//}}AFX_DATA
//{{AFX_VIRTUAL(DlgSelectECU)
protected:
virtual void DoDataExchange(CDataExchange*pDX);
//}}AFX_VIRTUAL
protected:
DECLARE_MESSAGE_MAP()
the implementation of my dialog:
DlgSelectECU:lgSelectECU(CWnd* pParent /*=NULL*/)
: CDialog(DlgSelec
tECU::IDD, pParent)
//{{AFX_DATA_INIT(DlgSelectECU)
//}}AFX_DATA_INIT
BOOL DlgSelectECU:nInitDialog()
POSITION pos = m_StringList.GetHeadPosition();
while (pos)
m_ECUList.AddString(m_StringList.GetNext(pos));
return true;
void DlgSelectECU:oDataExchange(CDataExchange* pDX)
CDialog:oDataExchange(pDX);
//{{AFX_DATA_MAP(DlgSelectECU)
DDX_Control(pDX, IDC_COMBO_ECU, m_ECUList);
//}}AFX_DATA_MAP
my dll function TestStand calls looks like that:
EXPORT CALLBACK SelectECU(char ECUs[1024])
AFX_MANAGE_STATE(AfxGetStaticModuleState());
DlgSelectECU Dlg;
Dlg.m_StringList.AddTail("ITEM 1");
if (Dlg.DoModal() == IDOK)
// do something
Running the sequence file in TestStand and calling the dll function descriped above causes an assertion failure each time I try to add anything to the StringList. Why? And what am I doing wrong? Is there
a documentation about how to write dlls with MFC elements
for use with TestStand using other tools than LabWindows/CVI? Everything I found so far is rather crude.
Thanks!
Similar Messages
-
Plugin fails to display modal dialog with ActiveX'ed bean
I have first posted this in the ActiveX bridge group, and have gotten no response. Since the plugin group also has posts on modal dialogs, thought this is also correct to post here. Both plugin and ActiveX'ed beans use beans.ocx for display.
I have a bean wrapped as ActiveX with sun.beans.ole.Packager. The bean provides a method, which ultimately will pop up a modal confirm dialog (JOptionPane.showConfirmDialog(.)).
If the method is triggered solely from within the bean, say via a click on a bean's button, all is well.
If the method is triggered from its host (VB form), the
- the call is done on the main thread. The confirm dialog shows, but when I click on one of its buttons, the app hangs.
- If I try to pass the call into the event dispatch thread (SwingUtilities.invokeAndWait(.)), the confirm dialog somewhat pops up, but does not paint completely and the app hangs.
- If I try to pass the call into the event dispatch thread with SwingUtilities.invokeLater(.) all is well, the confirm dialog pops up, I can click on its buttons, etc. but the function returns to VB too early, which is not what I want since I need the answer.
- I have tried the following:
entry method determines it is not on the event dispatch thread.
Tries itself with invokeLater(.), yields the current thread and calls wait(.).
The method invoked later will execute in the event dispatch thread, popup the confirm dialog and when finished will do a notifyAll(.).
Unfortunately, what happens is that the entry thread (the main thread) puts the invokeLater into the event dispatch queue, yields itself and wait()'s. And waits and waits. In the meantime, the dispatch thread will get to the point where it wants to show the confirm dialog, but will then hang. If I time out the wait in the main thread, then the confirm dialog is popped up immediately after the wait finishes with the time-out.
Sooo, this tells me that there is some strange synchronization going on which causes something like a deadlock. Is there any good approach to triggering modal dialogs from a native app hosting the ActiveX'ed bean??
I have found many entries on probs with modal dialogs in the plug-in, which relate to applets. But no solution yet.
Some keywords that I have came across are:
- the event dispatch queue can be flushed and "empty events" can be posted into it. Also, the invokeAndWait(.) will register a "conditional" message pump on the event queue that seems to work until the locking condition is no longer valid. Any experience with these? Any way to manipulate (a) main thread, (b) event dispatch queue, (c) event dispatch thread to resolve the apparent deadlock?
- There seems to be some difference in locking when the parent process is VB/COM as when it is Java. I have the impression that the main thread has some lock until the call made from VB/COM is fully completed and the call stack cleaned up. Can anyone confirm this? And/or suggest a way around it?
SylviaSylvia - I found your posting because I have a similar problem in which a JavaBean wrapped using the Packager needs to call a Visual Basic event subroutine from a thread other than the main thread.
This, I have discovered, is not supported in VB unless you use special thread marshalling calls (not available to the Java bean) or event queuing calls (ditto, afaik).
My point is that this may be related to your problem. Check this Microsnot document on their public support site:
Q196026 -
Java help dialog invoked from modal dialog with webstart
Hi,
we have an application where we invoke a Help window from a modal dialog. It works fine if ran from IDE but doesn't work if ran from a webstart loader. The problem is to be able to set decorations (exit/minimize) for this help window but since this window is null (from printouts) it never goes to lines where decorations are set. The help dialog is displayed by calling super.setDisplayed(true) but it is not setting variables "frame" or "dialog" of DefaultHelpBroker class.
I am sure it doesn't sound very clear but if you had a similar problem with web start messing up something please let me know.
thanks.
private static void initHelp()
ClassLoader loader = HelpFactory.class.getClassLoader();
try
URL url = HelpSet.findHelpSet(loader, HELPSETNAME);
helpSet = new HelpSet(loader, url);
helpBroker = new DefaultHelpBroker(helpSet)
public void setActivationWindow(Window window)
if (window instanceof Dialog)
Dialog d = (Dialog) window;
if (d.isModal())
super.setActivationWindow(window);
return;
super.setActivationWindow(null);
public void setDisplayed(boolean b)
//no exception here and shows dialog with no decorations
super.setDisplayed(b);
System.out.println("d: " + dialog);//prints null here
System.out.println("d: " + frame); //prints null here
if (b)
if (dialog != null)//since this is true, it never sets decorations
dialog.hide();
dialog.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
dialog.show();
helpBroker.setFont(new Font("Verdana", Font.PLAIN, 12));
helpListener = new HelpListener(helpBroker);
catch (HelpSetException e)
e.printStackTrace();
}sorry guys, i should've posted it either in the web-start or on javahelp forums. I'll do it right now.
never mind :-) -
Trying to make up a Modal Dialog with customized event dispatcher
Hello everyone.
I try to make up a ModalDialog class with customized event dispatcher in order to wait an invoker.
But it fails :-(
import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventDispatchChain;
import javafx.event.EventHandler;
import javafx.event.EventTarget;
import javafx.event.EventType;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.stage.Window;
import javafx.stage.WindowEvent;
import com.sun.javafx.stage.WindowEventDispatcher;
import java.util.ArrayList;
public class ModalDialog extends Stage {
ArrayList<Button> buttons;
int rc;
Stage stage;
Event event;
EventDispatchChain tail;
public ModalDialog( Window owner, String title ){
initModality( Modality.APPLICATION_MODAL );
initOwner( owner );
initStyle( StageStyle.UTILITY );
setTitle( title );
stage = this;
public void setContents( Group group, ArrayList<Button> buttons ){
BorderPane root = new BorderPane();
Scene scene = new Scene(root);
setScene(scene);
root.setCenter( group );
this.buttons = buttons;
HBox buttonPane = new HBox();
buttonPane.setSpacing(10);
for( int i=0 ; i<buttons.size() ; i++ ){
buttons.get(i).setOnAction( actionHandler );
buttonPane.getChildren().setAll( buttons );
root.setBottom( buttonPane );
public int show( double screenX, double screenY ){
setX( screenX ); setY( screenY );
show();
MyWindowEventDispatcher dispatcher = new MyWindowEventDispatcher( stage );
setEventDispatcher( dispatcher );
while(true){
event = dispatcher.dispatchEvent( event, tail );
EventType<? extends Event> type = event.getEventType();
if( type==WindowEvent.WINDOW_HIDDEN ){
break;
return( rc );
EventHandler<ActionEvent> actionHandler = new EventHandler<ActionEvent>() {
public void handle( ActionEvent e ){
EventTarget src = e.getTarget();
rc = buttons.indexOf( src );
stage.hide();
class MyWindowEventDispatcher extends WindowEventDispatcher {
public MyWindowEventDispatcher( Window window ){
super( window );
public Event dispatchEvent( Event event, EventDispatchChain tail) {
ModalDialog.this.event = dispatchCapturingEvent( event );
ModalDialog.this.tail = tail;
return( event );
}A sample code to invoke ModalDialog
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
public class WindowEvent06 extends Application {
Stage mainStage;
public void start(Stage stage) throws Exception {
Group root = new Group();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("WindowEvent06");
mainStage = stage;
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(WindowEvent e){
ModalDialog dialog = new ModalDialog( mainStage, "Question" );
Button yes = new Button( "Yes" );
Button no = new Button( "No" );
ArrayList<Button> buttons = new ArrayList<>();
buttons.add(yes); buttons.add(no);
Label msg = new Label( "Really Exit ?" );
Group groupInDialog = new Group();
groupInDialog.getChildren().add( msg );
dialog.setContents( groupInDialog, buttons );
int ans = dialog.show( 300, 300 );
System.out.println("returned from a modal dialog");
if( ans == 1 ){
e.consume(); // this blocks window closing
stage.show();
public static void main(String[] args) {
launch(args);
}Hi,
The logic what you follows is some what in the right direction but need to have some changes.
What I would say is, first consume the windowClose event. Then open the dialog box and close the parent accordingly.
So after refactoring your code.
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class ModalDialog extends Stage {
Stage owner;
Stage stage;
BorderPane root;
public ModalDialog( Stage owner, String title){
root = new BorderPane();
stage = this;
this.owner = owner;
initModality( Modality.APPLICATION_MODAL );
initOwner( owner );
initStyle( StageStyle.UTILITY );
setTitle( title );
setContents();
public void setContents(){
Scene scene = new Scene(root,150,150);
setScene(scene);
Group groupInDialog = new Group();
groupInDialog.getChildren().add( new Label("Really Exit ?") );
root.setCenter( groupInDialog );
Button yes = new Button( "Yes" );
yes.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent paramT) {
stage.close(); // Closing the pop up.
owner.close(); // Closing the parent stage also.
Button no = new Button( "No" );
no.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent paramT) {
stage.close(); // Closing the pop up only
HBox buttonPane = new HBox();
buttonPane.setSpacing(10);
buttonPane.getChildren().addAll(yes,no);
root.setBottom(buttonPane);
stage.show();
}And the main class to check this implementation is
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
public class WindowEvent06 extends Application {
public void start(final Stage stage) throws Exception {
Group root = new Group();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setTitle("WindowEvent06");
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
public void handle(final WindowEvent e){
e.consume(); // Consuming the event by default.
new ModalDialog( stage, "Question");
stage.show();
public static void main(String[] args) {
launch(args);
}I hope the above code will give you some idea what i mean. :)
Happy Coding !!
Regards,
Sai Pradeep Dandem.
Edited by: Sai Pradeep Dandem on Jan 20, 2012 4:03 AM -
Hi,
I have an ALV on suppose screen 3000, I have created a button in the tool bar to call another ALV, but my question is, can we display ALV in modal dialog box screen(because the requirement is to display ALV as a popup)
So when i changed the screen type to normal screen, my alv is coming,,but when i change the screen type to modal dialog box, then no ALV is being displayed in the output. Only blank screen is displayed.
Can you please help me.
Thanks.Hello
The problem is that you have to take into account that the ALV in the popup (or modal dialogbox) is displayed on a different screen level:
level 0 = main screen
level 1 = 1st popup
level 2 = 2nd popup
We have up to 9 screen level available.
The following sample report ZUS_SDN_ALV_IN_POPUP is a variant of my sample report ZUS_SDN_TWO_ALV_GRIDS.
Depending on whether you mark P_POPUP or not the second ALV grid is additionally displayed on a popup.
*& Report ZUS_SDN_ALV_IN_POPUP
*& Thread: ALV in modal dialog box
*& https:||<a class="jive_macro jive_macro_thread" href="" __jive_macro_name="thread" modifiedtitle="true" __default_attr="762642"></a>
*& Screen '0100' contains no elements.
*& ok_code -> assigned to GD_OKCODE
*& Flow logic:
* PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
* PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
REPORT zus_sdn_alv_in_popup.
TYPE-POOLS: abap.
DATA:
gd_okcode TYPE ui_func,
gd_repid TYPE syst-repid,
" containers and ALV grids for main screen
go_docking TYPE REF TO cl_gui_docking_container,
go_splitter TYPE REF TO cl_gui_splitter_container,
go_cell_top TYPE REF TO cl_gui_container,
go_cell_bottom TYPE REF TO cl_gui_container,
go_grid1 TYPE REF TO cl_gui_alv_grid,
go_grid2 TYPE REF TO cl_gui_alv_grid,
" container and ALV grid for popup
go_docking3 TYPE REF TO cl_gui_docking_container,
go_grid3 TYPE REF TO cl_gui_alv_grid,
gs_layout TYPE lvc_s_layo.
DATA:
gt_knb1 TYPE STANDARD TABLE OF knb1,
gt_knvv TYPE STANDARD TABLE OF knvv.
PARAMETERS:
p_popup AS CHECKBOX DEFAULT ' '.
* CLASS lcl_eventhandler DEFINITION
CLASS lcl_eventhandler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING
e_row
e_column
es_row_no
sender.
ENDCLASS. "lcl_eventhandler DEFINITION
* CLASS lcl_eventhandler IMPLEMENTATION
CLASS lcl_eventhandler IMPLEMENTATION.
METHOD handle_double_click.
* define local data
DATA:
ls_knb1 TYPE knb1.
CHECK ( sender = go_grid1 ).
READ TABLE gt_knb1 INTO ls_knb1 INDEX e_row-index.
CHECK ( ls_knb1-kunnr IS NOT INITIAL ).
IF ( p_popup = abap_true ).
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'POPUP'
* IMPORTING
* rc =
ELSE.
* Triggers PAI of the dynpro with the specified ok-code
* * CALL METHOD cl_gui_cfw=>set_new_ok_code( 'DETAIL' ). " not on 4.6c
CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'DETAIL'
* IMPORTING
* rc =
ENDIF.
ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_eventhandler IMPLEMENTATION
START-OF-SELECTION.
" Select data
SELECT * FROM knb1 INTO TABLE gt_knb1
WHERE bukrs = '1000'.
PERFORM init_controls.
* Display data
gs_layout-grid_title = 'Customers'.
CALL METHOD go_grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'KNB1'
is_layout = gs_layout
CHANGING
it_outtab = gt_knb1
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
gs_layout-grid_title = 'Customers Details (Sales Areas)'.
CALL METHOD go_grid2->set_table_for_first_display
EXPORTING
i_structure_name = 'KNVV'
is_layout = gs_layout
CHANGING
it_outtab = gt_knvv " empty !!!
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
gs_layout-grid_title = 'Customers Details (Sales Areas)'.
CALL METHOD go_grid3->set_table_for_first_display
EXPORTING
i_structure_name = 'KNVV'
is_layout = gs_layout
CHANGING
it_outtab = gt_knvv " empty !!!
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Link the docking container to the target dynpro
gd_repid = syst-repid.
CALL METHOD go_docking->link
EXPORTING
repid = gd_repid
dynnr = '0100'
* CONTAINER =
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Link the docking container to the popup
gd_repid = syst-repid.
CALL METHOD go_docking3->link
EXPORTING
repid = gd_repid
dynnr = '0200'
* CONTAINER =
EXCEPTIONS
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* NOTE: dynpro does not contain any elements
CALL SCREEN '0100'.
* Flow logic of dynpro (does not contain any dynpro elements):
*PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
*PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
END-OF-SELECTION.
*& Form INIT_CONTROLS
* text
* --> p1 text
* <-- p2 text
FORM init_controls .
* Create docking container
CREATE OBJECT go_docking
EXPORTING
parent = cl_gui_container=>screen0 " main screen -> level 0 !!!
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Create splitter container
CREATE OBJECT go_splitter
EXPORTING
parent = go_docking
rows = 2
columns = 1
* NO_AUTODEF_PROGID_DYNNR =
* NAME =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Get cell container
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_cell_top.
CALL METHOD go_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_cell_bottom.
* Create ALV grids
CREATE OBJECT go_grid1
EXPORTING
i_parent = go_cell_top
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* Set event handler
SET HANDLER: lcl_eventhandler=>handle_double_click FOR go_grid1.
CREATE OBJECT go_grid2
EXPORTING
i_parent = go_cell_bottom
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
" Create container and grid for popup.
* Create docking container
CREATE OBJECT go_docking3
EXPORTING
parent = cl_gui_container=>screen1 " !!! popup !!!
ratio = 90
EXCEPTIONS
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
" NOTE: Starting from a main dynpro (screen level 0) the first popup
" (or modal dialogbox) is on level 1 !!!
" Using cl_gui_container=>screen0 fails to display ALV grid.
CREATE OBJECT go_grid3
EXPORTING
i_parent = go_docking3
EXCEPTIONS
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " INIT_CONTROLS
*& Module STATUS_0100 OUTPUT
* text
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'. " contains push button "DETAIL"
* SET TITLEBAR 'xxx'.
* Refresh display of detail ALV list
CALL METHOD go_grid2->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*& Module USER_COMMAND_0100 INPUT
* text
MODULE user_command_0100 INPUT.
CASE syst-dynnr.
WHEN '0100'.
CASE gd_okcode.
WHEN 'BACK' OR
'END' OR
'CANC'.
SET SCREEN 0. LEAVE SCREEN.
* User has pushed button "Display Details"
WHEN 'DETAIL'.
PERFORM entry_show_details.
WHEN 'POPUP'.
PERFORM entry_show_details.
go_grid3->refresh_table_display( ). " required
CALL SCREEN '0200' STARTING AT 5 5
ENDING AT 150 30.
WHEN OTHERS.
ENDCASE.
WHEN '0200'.
set screen 100. leave screen.
ENDCASE.
CLEAR: gd_okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT
*& Form ENTRY_SHOW_DETAILS
* text
* --> p1 text
* <-- p2 text
FORM entry_show_details .
* define local data
DATA:
ld_row TYPE i,
ls_knb1 TYPE knb1.
CALL METHOD go_grid1->get_current_cell
IMPORTING
e_row = ld_row.
READ TABLE gt_knb1 INTO ls_knb1 INDEX ld_row.
CHECK ( syst-subrc = 0 ).
SELECT * FROM knvv INTO TABLE gt_knvv
WHERE kunnr = ls_knb1-kunnr.
ENDFORM. " ENTRY_SHOW_DETAILS
Regards
Uwe -
How to create modal dialog to suspend menu activity until process completes
I have a Swing application with several tabs, buttons, and menu items.
When the user pushes some of the buttons, a background process is kicked off that may take some time to complete.
When the process is finished, I get notification from a socket that the process has completed.
I then display a dialog that notifies the user that the process has completed.
All this is in place.
What I need to do is to block the user from pushing any other buttons, selecting tabs or menu items while the process is in progress.
My thought was to display a modal dialog with a message and no buttons to remove it,
and then have the application dispose the dialog when I get the completion response.
Is there a way to do this with a JOptionPane or some variant or do I need to create a modal dialog from scratch?
Any suggestions?I was playing around with this a bit and I think it can be done.
In the main class of my application, I have a variable
public JFrame mainFrame;
mainFrame = this.getFrame():
In the page where I want to disable the application, I have the following:
parent.mainFrame.setEnabled(false);
(parent is a reference to the main class)
When I get a response back from the socket, I can set
parent.mainFrame.setEnabled(true);
This seems to do what I want, but the fly in the ointment is that it disables the entire application.
If I don't get a response, then the application is hung.
Can't use the "X" button to close the application.
I think I can work on some refinements from the clues given to make it work.
Thanks for the feedback. -
Clicking a frame in the taskbar that has an open modal dialog
hi guys,
ive written a small application which openes several dialogs. since i need to pass it to less experienced users who dont know how to use alt+tab (on windows) i have a question:
if there is an open modal dialog with my frame as owner and it isnt activated / on top of the screen a click onto the taskbar icon (the frame) should bring up the dialog with the frame in the background.
testing this results in a behaviour i didnt expect - not the modal dialog with the frame in the background pops up but the frame without showing up the dialog.
since dialogs dont get an entry in the taskbar the 0815-user doesnt know how to get back the dialog. and even worse - he cant do anything anymore (modal dialog..).
how can i fix that problem?
thanks in advancelol
got the problem
i added the owner of the dialog - but in a different class ;)
my test case was still null -
Can't have multiple modal dialogs? What am I doing wrong?
The following applet is a VERY stripped down version of what I am writing. I have an applet which creates modal dialog in which a user will enter data, then if the user tries to close without saving, I pop up another modal dialog to ask the user to save. Everything is fine that far, then, when the user dismisses that dialog, for example (with Cancel) or pressing the X, things look fine, it goes back to the first modal dialog, but that dialog is no longer modal! I can access the underlying applet. Here is a VERY stripped down version. What am I doing wrong? Help! Thanks!
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.lang.*;
import java.net.*;
import javax.help.*;
import javax.swing.*;
import java.util.*;
public class SherlockApplet extends JApplet
public void init()
// get root frame of applet
Component component = this;
while (component.getParent() != null)
component = component.getParent();
Frame appletFrame = (Frame) component;
// create a modal dialog with the root frame as the parent
JDialog firstModalDialog = new JDialog(appletFrame);
firstModalDialog.setModal(true);
firstModalDialog.setSize(200, 200);
// create another modal dialog with the first dialog as the parent
final JDialog secondModalDialog = new JDialog(firstModalDialog);
secondModalDialog.setModal(true);
secondModalDialog.setSize(100, 100);
// add a listener to pop up the second modal dialog when we try to close the first
firstModalDialog.addWindowListener(
new WindowAdapter()
public void windowClosing(WindowEvent e)
secondModalDialog.show();
// make sure not to close the first dialog if the user clicks the X
firstModalDialog.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
// show the first dialog
firstModalDialog.show();
}Good call dchsw, I tried 1.4.1_01 jre and it worked. If you run it with 1.3.0_01 jre you will see my problem. The problem for us is, we are stuck with 1.3.0_01 for our next release at least, due to Sun's decision to change event handling for java 1.4 jre and not make it backward compatible. I might have to hack my way around this one. Any other suggestions?
Thanks -
Maximize button in a modal dialog
Dear All,
I have requirement. I want to show a maximize button in a modal dialog which has the same maximizing functionality of a frame. I find the JDialog which is a secondary window and doesn't have API to add/remove buttons directly to the title bar as in JInternalFrame. I show a table in a popup modal dialog. But when the no of columns is more, the user might find difficult to traverse the table. Instead if the maximize button is there he can maximize the dialog to see all the columns in one shot. So, what all i need is a modal dialog with a maximize button in the title bar. This is quite urgent!. Thanks for any thoughts, ideas or code snippets.
wbr,
Srinivasan SamiveluHi Srinivasan,
Have you got any solution for this.
If so,please let me know.I am facing similar problem.
Thanks in advance -
[solved] Gnome 3.14.2 Modal dialogs not working
Hi,
updated today and found out that the modal password prompts in Gnome 3 do not work anymore. Does anybody know anything about this?
I´m experiencing following behaviour:
Whenever a gnome modal dialog with an input field appears the dialog will freeze after submitting the data. The only action left to click is the cancel action (or the escape key) which of course also cancels the data submission and also cancels the data submission the process.
I would love to debug this, unfortunately Google hasn´t provided anything useful yet...
Last edited by justforgetme (2015-01-10 15:21:58)Ok, so apparently the Modal dialog not working was based on gdk-pixbuf2 dhaving wrong caches or something.
When consulting journalctl about gnome in general I discovered that my system had lost the ability to comprehend the svg format. One ddg query later i was here again just in another topic viewtopic.php?pid=1491839 -
How to display non modal dialog box in a Dll call from TestStand implemented in visual c
Dear Jason F.
Applications Engineer
National Instruments
Hello
I did the same way you told me
the non modal dialog appeared and
system hangs and
giving the error message
""SeqEdit.exe-Application Error
The instruction at �0x047fc5b0� referenced memory at �0x047fc5b0�. The memory could not be �read� ""
please solve my problem
and thanks for yours early response
you can email me at
[email protected]Hi Mkehret,
Does your dialog have ActiveX controls on it? If your DLL dialog uses ActiveX controls and is not programmed in a certain manner it can hang because of a conflict in the threading model used by the TestStand Engine that is calling into your DLL and the model that is required by the MFC ActiveX Container. If you are using ActiveX controls in your dialog, you need to make special considerations for the threading model MFC dialogs that use ActiveX controls need in order to work properly. The example under \Examples\MFCActiveXContainerDlg illustrates how to appropriately handle this situation as well as explaining why it is necessary.
Note: The above example displays the dialog as modal, but this is irrelevant to the problem I am describing.
Again for information on properly creating a dialog class object and displaying it as non-modal refer to the information on MSDN that I referred you to in this post:
http://exchange.ni.com/servlet/ProcessRequest?RHIVEID=101&RPAGEID=135&HOID=506500000008000000E98A0000&USEARCHCONTEXT_CATEGORY_0=_8_&USEARCHCONTEXT_CATEGORY_S=0&UCATEGORY_0=_8_&UCATEGORY_S=0
If your dialog does not use ActiveX controls or after trying the programming method illustrated in the "MFCActiveXContainerDlg" example TestStand still hangs when calling your DLL, try calling your DLL from another environment just to make sure whether the DLL works at all. If the DLL works properly when called by another environment (e.g. VB, VC++, LabVIEW, or CVI), please submit a MINIMAL and REPRODUCEABLE example source project for your DLL for us to look at (please exclude all unnecessary code not required to reproduce the specific problem of displaying the dialog, and include all files necessary to build your dll with any
specific instructions needed to do so).
Jason F.
Applications Engineer
National Instruments
www.ni.com/ask -
Module Pool - Error message on a Modal Dialog screen with input
Hello All,
I have a modal dialog screen which is called on F4 help of a input field. This dialog screen has radio buttons on it to select. On selection, we check if the user is authorized to that option. If not, raise and error message with command MESSAGE msgid.....
When the error message pops-up and when clicked ok on it, the radio buttons on the modal dialog screen gets disabled. I want to have the modal dialog box to be able to accept the new radio button as input.
Can anyone please suggest.
Thanks,
SmitaPut all of your Radio buttons in the CHAIN ... ENDCHAIN with one module.
CHAIN.
FIELD rb1.
FIELD rb2.
FIELD rb3.
MODULE check_chain ON CHAIN-REQUEST. "<< implement logic in check_Chain
ENDCHAIN.
If you want, you can even disable the options before displaying the screen. Do all necessary checks in the PBO and based on that disable the options.
Regards,
Naimesh Patel -
ActiveX controls disappear when VI is loaded in a Sub-Panel with Start Modal Dialog usage
Hi,
I have a subpanel in a VI (VI1) in which another VI (VI2) is loaded. VI1 is used as a module for an Action step in TestStand. VI2 has ActiveX controls like ExpressionEdit and Adobe PDF reader etc. VI1 loads VI2 in a sub-panel and calls Start Modal Dialog.vi. I have set 'Show front panel when called' to true for VI1 so that the VI pops up when the sequence is run. When the sequence runs and when the Start Modal Dialog VI is called from VI1, all ActiveX controls in VI2 (loaded in the sub-panel) disappears. Here is the screenshot of the frontpanel of VI1 when the sequence is run:
This problem occurs in TestStand 4.2.1, TestStand 2010 and TestStand 2010 SP1 (as far as I have tested. May occur in older versions too). In the attached file, VI1 is 'ExprEdit Test.vi' and VI2 is 'SubpanelLoad.vi'. The attached sequence is developed in TestStand 2010 SP1.
How can this issue be solved?
Thank you,
Ganesh Kumar
Solved!
Go to Solution.
Attachments:
Subpanel Load ExpressionEdit problem.zip 23 KBHi,
An update on this issue: I tried changing the order of loading the VI in the SubPanel and the start modal dialog. I called start modal dialog and then loaded the VI (VI2) in the SubPanel. When I ran the sequence, the activeX controls did not disappear (I was pretty sure that the ActiveX controls in VI2 would not disappear since I am calling Start Modal Dialog before loading the VI in the Subpanel). Then I just changed the sequence of operations back to the previous order (loading the Subpanel with the VI and then calling the Start Modal Dialog). When I ran the sequence, the activeX controls where still displayed. But when I ran the sequence with the VI1 backup (that I had taken before making all these modifications) the activeX controls were not displayed. I a nutshell, I now have 2 versions whose codes are the same. But when I run the sequence with action steps for these VIs, the activeX controls disappear when the unmodified backup VI runs and does not disappear when the modified VI is run. I have attached the files that I used along with the sequence file. The details are as follows:
ExprEdit Test (Not Working).vi - The unmodified backup VI for which the ActiveX controls disappear.
ExprEdit Test (Working).vi - The modified VIs in which the ActiveX Controls do not disappear (But same code as ExprEdit Test (Not Working).vi).
ExpreEdit Test.seq - The sequence file containing 2 action steps one each for theabove mentioned VIs.
SubpanelLoad.vi - The VI that contains activeX controls and is loaded in the SubPanel.
Note that the sequence is created in TestStand 4.2.1.
Thank you,
Ganesh Kumar
Attachments:
Subpanel Load ExpressionEdit problem.zip 36 KB -
[Mac/CC 2014] modal dialogs can't be displayed
Hi everybody,
I have ported a plugin from CS6 to CC2014, which works fine for almost everything, except one. Modal dialogs seems not to work anymore. For example, this code:
CAlert::InformationAlert(PMString("Hey, display me!"));
makes InDesign freezing. More precisely, InDesign displays a while rectangle, which seems to be the modal dialog. But there is nothing more, juste this white rectangle. I can move it, but can't interact with it. As it is a modal dialog, the application refuses all further interaction, and I can't close that modal.
I have noticed this behavior was the same with, for example, a Yes/No modal dialog. I suppose this happens on every modal dialog types.
Is there anything that can cause a modal dialog not to be able to display correctly?
Some pieces of informations on versions :
OS : Mac OS 10.9.4
InDesign : 10.1.0.71
Thanks to anybody providing any piece of advice.
RémiMust have opened my eyes after waking up...
I think I guessed what happens. This modal dialog is called from a model plugin, which works in CS6. I guess Adobe has removed support on anything that is UI-related in model plugin. But instead of generating an error, it makes some mess. I'll try to move the piece of code surrounding the modal dialog call to my UI plugin and see what happens. -
Help with modal dialog returning a value to the calling page
Greetings,
Apex Version: 4.1.0.0.32
What I am trying to do is to create a modal dialog that is called from a form page. The dialog will present the user with an IR report that will allow the him to select a row and return a value from that row to a field on the calling page. I have it working in Firefox, but I get an error using IE 8. I hope someone can show me why it is not working in IE.
Here is how I am doing it:
From the calling page:
Created a button
Action: Redirect to URL
URL Target: javascript:var rc = window.showModalDialog('f?p=&APP_ID.:70:&SESSION.::&DEBUG.:::','','resizable:yes;center:yes;dialogWidth:1000px;dialogHeight:500px;');
On the called page:
The called page is an IR report where the query returns this as one of the columns:
*(Note: I had to put a dot '.' in front of the onclick to get it to show in this thread. It is not there in my real code.)*
select
<a href="#" name="z" style="color:blue; text-decoration:underline;" .onclick="javascript:passBack(''' || LOT_NO ||''');">Select</a>' SelectThis
, column1
, column2
from sometablename;This resolves the anchor to:
<a .onclick="javascript:passBack('232158');" href="#">Select</a>Here is the Javascript function that is called from the anchor onclick:
function passBack(passVal1)
opener.document.getElementById("P75_ITEM1").value = passVal1;
close();
}When I run this in Firefox, it works as expected. I click on the button on the parent page. The modal dialog is opened and the IR report is displayed. I click on one of the links in the report and it returns the correct value back to the calling page and closes the modal dialog.
When I run it in IE8, it fails. I click on the button on the parent page. The modal dialog is opened and the IR report is displayed. I click on one of the links in the report and I get this error: “opener.document is null or not an object”.
I hope that is clear and that someone can help.
Thanks
LarryA quick google search determines that window.opener doesn't exists when using window.showModalDialog
Suggestions range from using window.open instead of window.showModalDialog to using dialogArguments instead of window.opener
Try the following:
In the parent page define a getPopupValue() function:
function getPopupValue(){
var dr = window.showModalDialog('f?p=&APP_ID.:70:&SESSION.::&DEBUG.:::','','resizable:yes;center:yes;dialogWidth:1000px;dialogHeight:500px;');
if ( (dr != undefined) && (dr != '') && (dr != false) ){
$x("P75_ITEM1").value = dr;
}Change the button url to call the function:
javascript:getPopupValue(); On the popup page change the passback function to:
function passBack(passVal1)
returnValue = passVal1;
close();
}
Maybe you are looking for
-
How does one mount , inspect , verify , and possibly repair a Time Capsule hard drive with Disk Utility ? My 500Gb 1st gen Time Capsule ( used wireless with Airport) has quit backing up new data . ( iMac Core2Duo, Snow Leopard) . TC says it need
-
[SOLVED] Configure keyboard with HAL
Hi I'm using HAL with the new xorg-server 1.6 and since the upgrade, the keyboard delay before starting to repeat a keypress has become longer. I'm not sure what caused this, but now I'd like to know how I configure this with HAL. I configured the m
-
ITunes 8 Missing Features In Advanced Preferences!?
After installing iTunes 8 I noticed that I can no longer "see" the "General" "Importing" and "Burning" tabs usually listed under the "Advanced" tab!!?? If you have noticed the same thing, were you able to find a fix? T.Y. M
-
hi friends, i generated a list and now i need to change the values in the list, and then this changes should be seen in database, could anyone could help me
-
Did latest OSX update. Nothing major, just a camera caompatability update but my Bluetooth quit working after the update. For awhile it was just not available but after a couple of restarts it was there but would not recognize any of my devices.