x window file

Upload: pawanmonu2009

Post on 07-Apr-2018

249 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/4/2019 X Window File

    1/31

    X-Window Lab

    INDEX

    S No. Topics Page

    No.

    Date Remarks Faculty

    Sign.1. Introduction of X-Window 2

    2. The X Server 4

    3. Program to create 200*200

    size windows10

    4. Using X-lib of server to write

    a program to create text box of

    given size

    11

    5. Create menu bar and menu

    item

    14

    6. To implement various drag

    and drop based GUI

    components in Visual Basic

    18

    7. To implement a multiple

    windows application

    21

    Marudhar Engg. College Page 1

  • 8/4/2019 X Window File

    2/31

    X-Window Lab

    X Window Overview

    The X Window System was originally developed in the early 1980s, and

    encompassed from the beginning many of the windowing capabilities that we now

    take for granted. While in a number of ways X was (and still is) command-line

    oriented, the capability of moving away from the command line was inherent from

    the very beginning in the architecture of the system. The advent of the desktop

    graphical user interface (GUI) didnt require a major redesign of the X Window

    System. The X server still communicates with the X client via the X protocol over a

    network, and a window manager is still being used to manage the client application

    windows. The basics havent changed, just the frills. In 1993, MIT turned control of

    X over to the X Consortium to continue development. In 1997, the X Consortium

    transferred control of X over to another consortium, the Open Software Foundation

    (OSF), which in turn became The Open Group. Ownership and development of X

    remains with The Open Group today.

    X Architecture Overview

    The X Window System is based on the client/server model. The system is

    divided into two parts:

    The X display server: Provides display capabilities, manages the display

    hardware, and manages user input.

    X client applications: Application programs that perform specific tasks.

    Client/server technology as used by X may seem backwards at first glance.

    Generally, people think of servers as remote machines like file servers, news

    servers, or mail servers. We might choose to run a client on a remote machine for

    any number of reasons. Generally, however, the remote machine offers some

    feature unavailable on our local machine: a bigger or faster processor, a different

    architecture better suited to a particular task, application software not available

    locally, or maybe files server capabilities. X allows we to take advantage of these

    remote features and to see the results on our local display. One of the most

    significant features of X is that it was specifically designed to work across a

    Marudhar Engg. College Page 2

  • 8/4/2019 X Window File

    3/31

    X-Window Lab

    network. The client and the server communicate via the X Protocol, which can

    run locally or over a TCP/IP or DECnet (for historical reasons) network in a way

    that is transparent to the user. Our local Linux system will run an X display

    server and some local clients; other clients may be run across the network. Its all

    the same to we sitting at our display. In a sense, the server acts as intermediary

    between client application programs and the local display hardware and input

    devices (generally a keyboard and mouse or other pointing device).

    When we enter input using the keyboard or mouse, the server intercepts

    the input as a sequence of events and notifies the relevant client application.

    Likewise, clients make requests that are communicated to the hardware display

    by the server. For example, a client may request that a window be moved or that

    text be displayed in the window. X was designed to make the software

    independent of the hardware. Special graphics terminals, known as X terminals,

    were developed to run X. Nowadays, depending on the type of system were

    running Linux on, our X display is likely to be a standard PC or Macintosh

    monitor. As a windowing system, X allows us to work with multiple programs,

    each running in a separate window.

    Marudhar Engg. College Page 3

  • 8/4/2019 X Window File

    4/31

    X-Window Lab

    Figure: The software architecture of Xt Intrinsics(xlib)-based applications

    The X Server

    The X server is the program that manages the hardware interface to the display.

    The server accepts user input from devices such as the keyboard and the pointer

    and sends that input to the relevant client applications; the server also keeps track

    of client output and updates the display to reflect that output. Each physicaldisplay (which may be multiple screens) has only one server program running.

    User input and several other types of information pass from the server to a client

    in the form of events. An event is a packet of information that tells the client

    something it needs to act on, such as keyboard input. Actions such as moving the

    pointer or pressing a key cause inputevents to occur. The server intercepts each

    event and passes it on to the client. When a client program receives a meaningful

    event, it processes the event and then responds with a requestto the server for

    some sort of action affecting the display. For example, the client may request that

    a window be resized to particular dimensions. The server responds to the client

    request updating the appropriate window on the display. However, its important

    to know that the window manager interprets this data. The window manager is

    responsible for the look and feel of the display and decides how the client

    window should be displayed.

    The X client-server model and network transparency

    X is based on a client-servermodel. An X server program runs on a computer

    with a graphical display and communicates with various client programs. The

    server accepts requests for graphical output (windows) and sends back user input

    (keyboard, mouse).

    Marudhar Engg. College Page 4

    http://en.wikipedia.org/wiki/Client-serverhttp://en.wikipedia.org/wiki/Client-serverhttp://en.wikipedia.org/wiki/Client-server
  • 8/4/2019 X Window File

    5/31

    X-Window Lab

    In X Window, the server runs on the user's computer, while the clients may run

    on a different machine. This is the reverse of the common configuration of client-

    server systems, where the client runs on the user's computer and the server runs

    on a remote computer. This reversal often confuses new X users. The X Window

    terminology takes the perspective of the program, rather than the end-user or the

    hardware: the remote programs connect to the X server display running on the

    local machine, and thus act as clients; the local X display accepts incoming

    traffic, and thus acts as a server.

    In this example, the X server takes input from a keyboard and mouse and

    displays to a screen. A web browserand a terminal emulator run on the user's

    workstation, and a system updater runs on a remote server but is controlled from

    the user's machine. Note that the remote application runs just as it would locally.

    The communication protocol between server and client runs network-

    transparently: the client and server may run on the same machine or on different

    ones, possibly with different architectures and operating systems. A client and

    server can communicate securely over the Internet by tunneling the connection

    over an encrypted connection.

    The X Protocol, Xlib, and Toolkits

    Marudhar Engg. College Page 5

    http://en.wikipedia.org/wiki/Web_browserhttp://en.wikipedia.org/wiki/Terminal_emulatorhttp://en.wikipedia.org/wiki/Terminal_emulatorhttp://en.wikipedia.org/wiki/Communication_protocolhttp://en.wikipedia.org/wiki/Computer_networkhttp://en.wikipedia.org/wiki/Computer_architecturehttp://en.wikipedia.org/wiki/Operating_systemhttp://en.wikipedia.org/wiki/Computer_securityhttp://en.wikipedia.org/wiki/Internethttp://en.wikipedia.org/wiki/Tunneling_protocolhttp://en.wikipedia.org/wiki/Image:X_client_server_example.pnghttp://en.wikipedia.org/wiki/Web_browserhttp://en.wikipedia.org/wiki/Terminal_emulatorhttp://en.wikipedia.org/wiki/Communication_protocolhttp://en.wikipedia.org/wiki/Computer_networkhttp://en.wikipedia.org/wiki/Computer_architecturehttp://en.wikipedia.org/wiki/Operating_systemhttp://en.wikipedia.org/wiki/Computer_securityhttp://en.wikipedia.org/wiki/Internethttp://en.wikipedia.org/wiki/Tunneling_protocol
  • 8/4/2019 X Window File

    6/31

    X-Window Lab

    At the lowest level, the server and the client programs communicate using the X

    Protocol. In general, however, only programmers writing X server software need

    to use the X Protocol directly. For writing X clients, programmers use libraries,

    which are archives of commonly used functions. As an X user, we dont need to

    be concerned about libraries and toolkits; however, well see the terms and

    should know what they mean.Xlib is the lowest-level library for writing X client

    applications. Xlib defines an interface to the X Protocol, with a one-to-one

    correspondence between X protocol requests and Xlib library functions. Writing

    a program in Xlib is time-consuming and laborious; rather than having to go

    through that process, programmers use toolkits written on top of Xlib. A toolkit is

    a set of programming libraries and widgets for programming in X. A widget is

    best described as a graphical component, such as a menu, command button,

    dialog box, or scrollbar. Programmers use toolkits not only because its easier

    than writing from scratch,but also so their applications have a uniform look and

    feel with other applications.

    Building an X Application in MS Visual Studio

    To create and build our X application (i.e. to create an executable) in MS Visual

    Studio 6.0, we can use the following procedure:

    1 Create an empty MS Visual C project:

    a) On the File menu of MS Visual Studio C++, click New and then click the

    Projects tab.

    b) In the main window of this tab, select either Win32 Application (for a GUI

    application) or Win32 Console Application (for a console application).

    c) Specify a location for the project. We can browse for a location or type one

    directly into the field.

    d) Specify a project name and click OK.

    e) In the resulting dialog box, choose to create an empty project and click Finish.

    Scan the resulting new project information to make sure it is correct and click

    OK.

    2 Customize the project to work with the LabF XDK:

    Marudhar Engg. College Page 6

  • 8/4/2019 X Window File

    7/31

    X-Window Lab

    a) On the Project menu, click Settings and then click the C/C++ tab. In the upper

    left of the tab, from the Settings For drop-down list, select All Configurations.

    (All of the subsequent settings described in this procedure, regardless of the tab

    on which they are located, should be for All Configurations).

    b) Also on the C/C++ tab, from the Category drop-down list, select Code

    Generation. From the Use run-time library drop-down list, select Multithreaded

    DLL.

    c) Still on the C/C++ tab, from the Category drop-down list, select Preprocessor.

    In the Additional include directories field, type the LabF XDK include path (the

    location at which we have installed the LabF XDK include files).

    d) Click the Link tab of the Settings dialog box. From the Category drop-down

    list, select Input. In the Additional library path field, type the LabF XDK lib path

    (the location at which we have installed the LabF XDK lib files).

    e) When finished, click OK to save the settings and close the dialog box.

    3 On the Project menu, click Add To Project and then Files. Add all source files

    to our project.

    4 On the Project menu, click Settings and then click the Link tab. From the

    Category drop-down list, select Input. In the Object/library modules field, type

    the names of the necessary libraries for our X client.

    When finished, click OK to save the settings and close the dialog box.

    5 On the Build menu, click Build ProjectName (where ProjectName is the name

    for our project that MS Visual Studio automatically inserts into the menu item).

    6 On the Build menu, click Execute ProjectName (where ProjectName is the

    name of our project that MS Visual Studio automatically inserts into the menuitem).

    NOTE :- To compile any of the examples on a UNIX system without using

    imake, use the following command line:

    cc -O -o filename filename.c -lXm -lXt -lX11

    Marudhar Engg. College Page 7

  • 8/4/2019 X Window File

    8/31

    X-Window Lab

    A Simple X Toolkit ApplicationSome application code that uses the X Toolkit will go a long way to illustrate the

    basic concepts introduced above.

    Figure shows the actual window created by a minimal hello, world Toolkit

    applicationxhello, and Example shows the code for it.xhello simply displays the

    string hello in a window.

    Figure :. xhello: appearance on screen

    Most window managers add a decorated border above or surrounding the

    window; this is not part of the application. Likewise, the placement of the widget

    on the screen depends on the window manager. Since no coordinates are

    specified as resources for the widget, most window managers will require the

    user to place it interactively. Some window managers can be configured to place

    new windows at an arbitrary default location.

    The Code

    Below Example shows the code forxhello.c.

    Example: xhello.c: a minimal "hello, world" application

    / * xhello.c - simple program to put up a banner on the display */

    /** Header file required for all Motif programs is .* In other Xt-based widget sets:

    * #include * #include */

    #include /* Standard Motif definitions *//** Public header file for widgets actually used in this file.*/

    #include /* Motif Label Widget */main(argc, argv)int argc;char **argv;{

    XtAppContext app_context;

    Marudhar Engg. College Page 8

  • 8/4/2019 X Window File

    9/31

    X-Window Lab

    Widget topLevel, hello;/* Register the default language procedure */

    XtSetLanguageProc(NULL, (XtLanguageProc)NULL, NULL);/* Initialize the Xt Intrinsics */topLevel = XtVaAppInitialize(

    &app_context, /* Application context */

    "XHello", /* Application class */NULL, 0, /* command line option list */&argc, argv, /* command line args */NULL, /* for missing app-defaults file */NULL); /* terminate varargs list */

    /* Create a widget */hello = XtVaCreateManagedWidget(

    "hello", /* arbitrary widget name */xmLabelWidgetClass, /* widget class from Label.h */topLevel, /* parent widget */NULL); /* terminate varargs list */

    /** Create windows for widgets and map them.*/XtRealizeWidget(topLevel);/* * Loop for events.*/XtAppMainLoop(app_context);

    }

    Marudhar Engg. College Page 9

  • 8/4/2019 X Window File

    10/31

    X-Window Lab

    *****************************************************************

    ***

    Program to create 200*200 size windows*****************************************************************

    ***

    #include

    int main( int argc, char *argv[] ){

    GtkWidget *window;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    gtk_widget_show (window);

    gtk_main ();

    return 0;

    }

    Output:

    Marudhar Engg. College Page 10

  • 8/4/2019 X Window File

    11/31

    X-Window Lab

    *********************************************************************

    Using X-lib of server to write a program to create textbox of given size*****************************************************************

    ****

    #include

    #include

    #include

    static void enter_callback( GtkWidget *widget,

    GtkWidget *entry )

    {

    const gchar *entry_text;

    entry_text = gtk_entry_get_text (GTK_ENTRY (entry));

    printf ("Entry contents: %s\n", entry_text);

    }

    static void entry_toggle_editable( GtkWidget *checkbutton,

    GtkWidget *entry )

    {gtk_editable_set_editable (GTK_EDITABLE (entry),

    GTK_TOGGLE_BUTTON (checkbutton)->active);

    }

    static void entry_toggle_visibility( GtkWidget *checkbutton,

    GtkWidget *entry )

    {

    gtk_entry_set_visibility (GTK_ENTRY (entry),

    GTK_TOGGLE_BUTTON (checkbutton)-

    >active);

    Marudhar Engg. College Page 11

  • 8/4/2019 X Window File

    12/31

    X-Window Lab

    }

    int main( int argc,

    char *argv[] )

    {

    GtkWidget *window;

    GtkWidget *vbox, *hbox;

    GtkWidget *entry;

    GtkWidget *button;

    GtkWidget *check;

    gint tmp_pos;

    gtk_init (&argc, &argv);

    /* create a new window */

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);gtk_widget_set_size_request (GTK_WIDGET (window), 200, 100);

    gtk_window_set_title (GTK_WINDOW (window), "GTK Entry");

    g_signal_connect (G_OBJECT (window), "destroy",

    G_CALLBACK (gtk_main_quit), NULL);

    g_signal_connect_swapped (G_OBJECT (window), "delete_event",

    G_CALLBACK (gtk_widget_destroy),

    G_OBJECT (window));

    vbox = gtk_vbox_new (FALSE, 0);

    gtk_container_add (GTK_CONTAINER (window), vbox);

    gtk_widget_show (vbox);

    entry = gtk_entry_new ();

    gtk_entry_set_max_length (GTK_ENTRY (entry), 50);

    g_signal_connect (G_OBJECT (entry), "activate",

    G_CALLBACK (enter_callback),

    (gpointer) entry);

    gtk_entry_set_text (GTK_ENTRY (entry), "hello");

    tmp_pos = GTK_ENTRY (entry)->text_length;

    gtk_editable_insert_text (GTK_EDITABLE (entry), " world", -1, &tmp_pos);

    gtk_editable_select_region (GTK_EDITABLE (entry),

    0, GTK_ENTRY (entry)->text_length);gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0);

    gtk_widget_show (entry);

    hbox = gtk_hbox_new (FALSE, 0);

    gtk_container_add (GTK_CONTAINER (vbox), hbox);

    gtk_widget_show (hbox);

    check = gtk_check_button_new_with_label ("Editable");

    gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);

    g_signal_connect (G_OBJECT (check), "toggled",

    Marudhar Engg. College Page 12

  • 8/4/2019 X Window File

    13/31

    X-Window Lab

    G_CALLBACK (entry_toggle_editable), (gpointer) entry);

    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);

    gtk_widget_show (check);

    check = gtk_check_button_new_with_label ("Visible");

    gtk_box_pack_start (GTK_BOX (hbox), check, TRUE, TRUE, 0);

    g_signal_connect (G_OBJECT (check), "toggled",

    G_CALLBACK (entry_toggle_visibility), (gpointer) entry);

    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), TRUE);

    gtk_widget_show (check);

    button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);

    g_signal_connect_swapped (G_OBJECT (button), "clicked",

    G_CALLBACK (gtk_widget_destroy),

    G_OBJECT (window));

    gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0);

    GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);gtk_widget_grab_default (button);

    gtk_widget_show (button);

    gtk_widget_show (window);

    gtk_main();

    return 0;

    }

    Output:

    Marudhar Engg. College Page 13

  • 8/4/2019 X Window File

    14/31

    X-Window Lab

    *****************************************************************

    ***

    Create menu bar and menu item*****************************************************************

    ***

    #include

    #include

    /*-- This function allows the program to exit properly when the window is closed

    --*/

    gint destroyapp (GtkWidget *widget, gpointer gdata)

    {

    g_print ("Quitting...\n");gtk_main_quit();

    return (FALSE);

    }

    /*-- This function allows the program to exit properly when the window is closed

    --*/

    gint ClosingAppWindow (GtkWidget *widget, gpointer gdata)

    {

    g_print ("Quitting...\n");

    gtk_main_quit();

    Marudhar Engg. College Page 14

  • 8/4/2019 X Window File

    15/31

    X-Window Lab

    return (FALSE);

    }

    int main (int argc, char *argv[])

    {

    /*-- Declare the GTK Widgets used in the program --*/

    GtkWidget *window;

    GtkWidget *menuFile;

    GtkWidget *menuEdit;

    GtkWidget *menuHelp;

    GtkWidget *menubar;

    GtkWidget *menu;

    GtkWidget *menuitem;

    GtkWidget *vbox;

    GtkWidget *text;

    gchar *buffer = "Go to the file menu and select Exit to close the application.";

    /*-- Initialize GTK --*/

    gtk_init (&argc, &argv);

    /*-- Create the new window --*/

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    /*-- Create the vbox --*/

    vbox = gtk_vbox_new(FALSE, 0);

    /*-- Create a text area --*/text = gtk_text_new(NULL, NULL);

    /*-- Set text area to be editable --*/

    gtk_text_set_editable(GTK_TEXT (text), TRUE);

    /*-- Connect the window to the destroyapp function --*/

    gtk_signal_connect(GTK_OBJECT(window), "delete_event",

    GTK_SIGNAL_FUNC(destroyapp), NULL);

    /*-- Create the menu bar --*/

    menubar = gtk_menu_bar_new();

    /*-- Add the menubar to the vbox --*/

    gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);

    gtk_widget_show(menubar);

    /*-- Add the text area to the window --*/

    gtk_container_add(GTK_CONTAINER(vbox), text);

    /*-- Add the vbox to the main window --*/

    gtk_container_add(GTK_CONTAINER(window), vbox);

    Marudhar Engg. College Page 15

  • 8/4/2019 X Window File

    16/31

    X-Window Lab

    /*---------------- Create File menu items ------------------*/

    menuFile = gtk_menu_item_new_with_label ("File");

    gtk_menu_bar_append (GTK_MENU_BAR(menubar), menuFile);

    gtk_widget_show(menuFile);

    /*-- Create File submenu --*/

    menu = gtk_menu_new();

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuFile), menu);

    /*-- Create New menu item under File submenu --*/

    menuitem = gtk_menu_item_new_with_label ("New");

    gtk_menu_append(GTK_MENU(menu), menuitem);

    gtk_widget_show (menuitem);

    /*-- Create Open menu item under File submenu --*/menuitem = gtk_menu_item_new_with_label ("Open");

    gtk_menu_append(GTK_MENU(menu), menuitem);

    gtk_widget_show (menuitem);

    /*-- Create Exit menu item under File submenu --*/

    menuitem = gtk_menu_item_new_with_label ("Exit");

    gtk_menu_append(GTK_MENU(menu), menuitem);

    gtk_signal_connect(GTK_OBJECT (menuitem), "activate",

    GTK_SIGNAL_FUNC (ClosingAppWindow), NULL);

    gtk_widget_show (menuitem);

    /*---------------- End File menu declarations ----------------*/

    /*---------------- Create Edit menu items --------------------*/

    menuEdit = gtk_menu_item_new_with_label ("Edit");

    gtk_menu_bar_append (GTK_MENU_BAR(menubar), menuEdit);

    gtk_widget_show(menuEdit);

    /*-- Create File submenu --*/

    menu = gtk_menu_new();

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuEdit), menu);

    /*-- Create Undo menu item under Edit submenu --*/

    menuitem = gtk_menu_item_new_with_label ("Undo");

    gtk_menu_append(GTK_MENU(menu), menuitem);

    gtk_widget_show (menuitem);

    /*-- Create Copy menu item under File submenu --*/

    menuitem = gtk_menu_item_new_with_label ("Copy");

    gtk_menu_append(GTK_MENU(menu), menuitem);

    gtk_widget_show (menuitem);

    Marudhar Engg. College Page 16

  • 8/4/2019 X Window File

    17/31

    X-Window Lab

    /*-- Create Cut menu item under File submenu --*/

    menuitem = gtk_menu_item_new_with_label ("Cut");

    gtk_menu_append(GTK_MENU(menu), menuitem);

    gtk_widget_show (menuitem);

    /*---------------- End Edit menu declarations ----------------*/

    /*---------------- Start Help menu declarations ----------------*/

    menuHelp = gtk_menu_item_new_with_label ("Help");

    gtk_menu_bar_append (GTK_MENU_BAR(menubar), menuHelp);

    gtk_widget_show(menuHelp);

    /*-- Create Help submenu --*/

    menu = gtk_menu_new();

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuHelp), menu);

    /*-- Create About menu item under Help submenu --*/

    menuitem = gtk_menu_item_new_with_label ("About");gtk_menu_append(GTK_MENU(menu), menuitem);

    gtk_widget_show (menuitem);

    /*---------------- End Help menu declarations ----------------*/

    /*-- Add some text to the window --*/

    gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, buffer,

    strlen(buffer));

    /*-- Set window border to zero so that text area takes up the whole window --*/

    gtk_container_border_width (GTK_CONTAINER (window), 0);

    /*-- Set the window to be 640 x 480 pixels --*/

    gtk_window_set_default_size (GTK_WINDOW(window), 640, 200);

    /*-- Set the window title --*/

    gtk_window_set_title(GTK_WINDOW (window), "Text Area");

    /*-- Display the widgets --*/

    gtk_widget_show(text);

    gtk_widget_show(menuitem);

    gtk_widget_show(menuFile);

    gtk_widget_show(menuEdit);gtk_widget_show(menuHelp);

    gtk_widget_show(vbox);

    gtk_widget_show(window);

    /*-- Start the GTK event loop --*/

    gtk_main();

    /*-- Return 0 if exit is successful --*/

    return 0;

    }

    Marudhar Engg. College Page 17

  • 8/4/2019 X Window File

    18/31

    X-Window Lab

    output:-

    *****************************************************************

    ****To implement various drag and drop based GUI

    components in Visual Basic

    *****************************************************************

    ****

    Option Explicit

    Dim Deposit As Single

    Dim Interest As Single

    Marudhar Engg. College Page 18

  • 8/4/2019 X Window File

    19/31

    X-Window Lab

    Dim Months As Single

    Dim Final As Single

    Const vbKeyDecPt = 46

    Private Sub cmdCalculate_Click()

    Dim IntRate As Single

    Dim IntNew As Single

    Dim Fcn As Single, FcnD As Single

    'Read the four text boxes

    Deposit = Val(txtDeposit.Text)

    Interest = Val(txtInterest.Text)

    IntRate = Interest / 1200

    Months = Val(txtMonths.Text)

    Final = Val(txtFinal.Text)

    'Determine which box is blank

    'Compute that missing value and put in text box

    If Trim(txtDeposit.Text) = "" Then'Deposit missing

    Deposit = Final / (((1 + IntRate) ^ Months - 1) / IntRate)

    txtDeposit.Text = Format(Deposit, "#####0.00")

    ElseIf Trim(txtInterest.Text) = "" Then

    'Interest missing - requires iterative solution

    IntNew = (Final / (0.5 * Months * Deposit) - 1) / Months

    Do

    IntRate = IntNew

    Fcn = (1 + IntRate) ^ Months - Final * IntRate / Deposit - 1

    FcnD = Months * (1 + IntRate) ^ (Months - 1) - Final / Deposit

    IntNew = IntRate - Fcn / FcnDLoop Until Abs(IntNew - IntRate) < 0.00001 / 12

    Interest = IntNew * 1200

    txtInterest.Text = Format(Interest, "##0.00")

    ElseIf Trim(txtMonths.Text) = "" Then

    'Months missing

    Months = Log(Final * IntRate / Deposit + 1) / Log(1 + IntRate)

    txtMonths.Text = Format(Months, "###.0")

    ElseIf Trim(txtFinal.Text) = "" Then

    'Final value missing

    Final = Deposit * ((1 + IntRate) ^ Months - 1) / IntRate

    txtFinal.Text = Format(Final, "#####0.00")End If

    End Sub

    Private Sub cmdClear_Click()

    'Blank out text boxes

    txtDeposit.Text = ""

    txtInterest.Text = ""

    txtMonths.Text = ""

    txtFinal.Text = ""

    End Sub

    Marudhar Engg. College Page 19

  • 8/4/2019 X Window File

    20/31

    X-Window Lab

    Private Sub cmdExit_Click()

    End

    End Sub

    Private Sub txtDeposit_KeyPress(KeyAscii As Integer)

    'Only allow number keys, decimal point, or backspace

    If (KeyAscii >= vbKey0 And KeyAscii = vbKey0 And KeyAscii = vbKey0 And KeyAscii

  • 8/4/2019 X Window File

    21/31

    X-Window Lab

    OUTPUT :-

    *****************************************************************

    ****

    To implement a multiple windows application

    Marudhar Engg. College Page 21

  • 8/4/2019 X Window File

    22/31

    X-Window Lab

    *****************************************************************

    ****

    To implement multiple window application we are using a simple notepad

    application. Which performs traditional wordprocessing function like text file

    creation, modification, deletion, saving text file and priting it plus many more

    usual function like find and window arrangement(casecad, horizontally,

    vertically).

    CODING :-

    Option Explicit

    Public DocColl As New Collection

    Public CollKeyIndex As Integer

    Private Sub MDIForm_Load()

    Me.Height = Screen.Height * 0.75

    Me.Width = Screen.Width * 0.75

    Me.Move (Screen.Height - Me.Height) / 2, (Screen.Width - Me.Width) / 2

    AddForm

    End Sub

    Marudhar Engg. College Page 22

  • 8/4/2019 X Window File

    23/31

    X-Window Lab

    Public Sub DisplayLineNumber()

    Dim LineNum As Integer

    With frmMain.ActiveForm.txtDocument

    If .SelStart > 0 Then

    LineNum = .GetLineFromChar(.SelStart)

    End If

    frmMain.StatusBar1.Panels("Text").Text = "Line: " & CStr(LineNum + 1)End With

    End Sub

    Private Function AddForm() As frmDocument

    Set AddForm = New frmDocument

    AddForm.Show vbModeless

    End Function

    Private Sub MDIForm_Terminate()

    Set DocColl = Nothing

    End Sub

    Private Sub mnuEditColor_Click()

    CommonDialog1.Flags = cdlCCFullOpen

    CommonDialog1.ShowColorfrmMain.ActiveForm.txtDocument.SelColor = CommonDialog1.Color

    End Sub

    Private Sub mnuEditCopy_Click()

    CopyTextToClipboard

    SetupCSMenus

    End Sub

    Private Sub mnuEditCut_Click()

    CopyTextToClipboard

    DeleteSelectedText

    SetupCSMenus

    End Sub

    Private Sub mnuEditDelete_Click()DeleteSelectedText

    SetupCSMenus

    End Sub

    Private Sub mnuEditFind_Click()

    frmFind.Show vbModal

    End Sub

    Private Sub mnuEditFont_Click()

    CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects

    CommonDialog1.ShowFont

    With frmMain.ActiveForm.txtDocument

    .SelFontName = CommonDialog1.FontName.SelFontSize = CommonDialog1.FontSize

    .SelBold = CommonDialog1.FontBold

    .SelItalic = CommonDialog1.FontItalic

    .SelStrikeThru = CommonDialog1.FontStrikethru

    .SelUnderline = CommonDialog1.FontUnderline

    .SelColor = CommonDialog1.Color

    End With

    End Sub

    Private Sub mnuEditPaste_Click()

    Dim Text As String

    Dim ClipboardText As String

    Dim SelStart As Long

    Marudhar Engg. College Page 23

  • 8/4/2019 X Window File

    24/31

    X-Window Lab

    If Clipboard.GetFormat(vbCFText) Then

    If frmMain.ActiveForm.txtDocument.SelLength > 0 Then

    DeleteSelectedText

    End If

    Text = frmMain.ActiveForm.txtDocument.Text

    SelStart = frmMain.ActiveForm.txtDocument.SelStart

    ClipboardText = Clipboard.GetTextfrmMain.ActiveForm.txtDocument.Text = Left(Text, SelStart) & ClipboardText &

    Right(Text, Len(Text) - SelStart)

    frmMain.ActiveForm.txtDocument.SelStart = SelStart

    Else

    SetupCSMenus

    End If

    End Sub

    Private Sub mnuEditSelectAll_Click()

    frmMain.ActiveForm.txtDocument.SelStart = 0

    frmMain.ActiveForm.txtDocument.SelLength =

    Len(frmMain.ActiveForm.txtDocument.Text)

    SetupCSMenusEnd Sub

    Private Sub mnuEditTimeDate_Click()

    Dim Text As String

    Dim SelStart As Long

    If frmMain.ActiveForm.txtDocument.SelLength > 0 Then

    DeleteSelectedText

    End If

    Text = frmMain.ActiveForm.txtDocument.Text

    SelStart = frmMain.ActiveForm.txtDocument.SelStart

    frmMain.ActiveForm.txtDocument.Text = Left(Text, SelStart) & Format(Now, "Short

    Time") & " " & Format(Now, "Short Date") & Right(Text, Len(Text) - SelStart)

    frmMain.ActiveForm.txtDocument.SelStart = SelStartSetupCSMenus

    End Sub

    Private Sub mnuEditWordWrap_Click()

    mnuEditWordWrap.Checked = Not mnuEditWordWrap.Checked

    End Sub

    Private Sub mnuFileClose_Click()

    Unload frmMain.ActiveForm

    End Sub

    Private Sub mnuFileExit_Click()

    End

    End SubPrivate Sub mnuFileNew_Click()

    AddForm

    End Sub

    Public Sub SetupCSMenus()

    Dim Found As Boolean

    Dim I As Integer

    For I = 0 To Forms.Count - 1

    If Forms(I).Name = "frmDocument" Then

    If Forms(I).objDocument.Closing = False Then

    Found = True

    Exit For

    End If

    Marudhar Engg. College Page 24

  • 8/4/2019 X Window File

    25/31

    X-Window Lab

    End If

    Next I

    mnuFileClose.Enabled = Found

    mnuFileSave.Enabled = Found

    mnuFileSaveAs.Enabled = Found

    mnuFilePrint.Enabled = Found

    Toolbar1.Buttons("Save").Enabled = Found' enable / disable Select All, TimeDate, WordWrap and Find _

    edit menus according to whether or not there is an active document

    mnuEditSelectAll.Enabled = Found

    mnuEditTimeDate.Enabled = Found

    mnuEditWordWrap.Enabled = Found

    mnuEditFind.Enabled = Found

    If Found = False Then

    mnuEditCopy.Enabled = False

    mnuEditCut.Enabled = False

    mnuEditDelete.Enabled = False

    mnuEditPaste.Enabled = False

    mnuEditWordWrap.Checked = FalseElse

    If frmMain.ActiveForm.txtDocument.SelLength > 0 Then

    mnuEditCopy.Enabled = True

    mnuEditCut.Enabled = True

    mnuEditDelete.Enabled = True

    Else

    mnuEditCopy.Enabled = False

    mnuEditCut.Enabled = False

    mnuEditDelete.Enabled = False

    End If

    If Clipboard.GetFormat(vbCFText) Then

    mnuEditPaste.Enabled = TrueElse

    mnuEditPaste.Enabled = False

    End If

    End If

    End Sub

    Private Sub CopyTextToClipboard()

    Clipboard.SetText frmMain.ActiveForm.txtDocument.SelText

    End Sub

    Private Sub DeleteSelectedText()

    Dim Text As String

    Dim SelStart As LongDim SelLength As Long

    Text = frmMain.ActiveForm.txtDocument.Text

    SelStart = frmMain.ActiveForm.txtDocument.SelStart

    SelLength = frmMain.ActiveForm.txtDocument.SelLength

    frmMain.ActiveForm.txtDocument.Text = Left(Text, SelStart) & Right(Text, Len(Text)

    - (SelStart + SelLength))

    frmMain.ActiveForm.txtDocument.SelStart = SelStart

    End Sub

    Private Sub mnuFileOpen_Click()

    Dim Cancel As Boolean

    On Error GoTo ErrorHandler

    Cancel = False

    Marudhar Engg. College Page 25

  • 8/4/2019 X Window File

    26/31

    X-Window Lab

    CommonDialog1.Filter = "Rich Text files (*.rtf)|*.rtf|" & _

    "Text files (*.txt)|*.txt|All files (*.*)|*.*"

    CommonDialog1.CancelError = True

    CommonDialog1.Flags = cdlOFNHideReadOnly Or _

    cdlOFNFileMustExist

    CommonDialog1.ShowOpen

    If Not Cancel ThenIf UCase(Right(CommonDialog1.FileName, 3)) = "RTF" Then

    frmMain.ActiveForm.txtDocument.LoadFile CommonDialog1.FileName, rtfRTF

    Else

    frmMain.ActiveForm.txtDocument.LoadFile CommonDialog1.FileName, rtfText

    End If

    frmMain.ActiveForm.objDocument.DocName = CommonDialog1.FileName

    frmMain.ActiveForm.objDocument.Changed = False

    End If

    Exit Sub

    ErrorHandler:

    If Err.Number = cdlCancel Then

    Cancel = TrueResume Next

    End If

    End

    End Sub

    Private Sub mnuFileSave_Click()

    With frmMain.ActiveForm

    If .objDocument.DocName = "Untitled" Then

    mnuFileSaveAs_Click

    Else

    If UCase(Right(.objDocument.DocName, 3)) = "RTF" Then

    .txtDocument.SaveFile .objDocument.DocName, rtfRTF

    Else.txtDocument.SaveFile .objDocument.DocName, rtfText

    End If

    .objDocument.Changed = False

    End If

    End With

    End Sub

    Private Sub mnuFileSaveAs_Click()

    Dim Cancel As Boolean

    On Error GoTo ErrorHandler

    Cancel = False

    CommonDialog1.DefaultExt = ".rtf"CommonDialog1.Filter = "Rich Text files (*.rtf)|*.rtf|" & _

    "Text files (*.txt)|*.txt|All files (*.*)|*.*"

    CommonDialog1.CancelError = True

    CommonDialog1.Flags = cdlOFNHideReadOnly Or _

    cdlOFNOverwritePrompt

    CommonDialog1.ShowSave

    If Not Cancel Then

    With frmMain.ActiveForm

    If UCase(Right(CommonDialog1.FileName, 3)) = "RTF" Then

    .txtDocument.SaveFile CommonDialog1.FileName, rtfRTF

    Else

    .txtDocument.SaveFile CommonDialog1.FileName, rtfText

    Marudhar Engg. College Page 26

  • 8/4/2019 X Window File

    27/31

    X-Window Lab

    End If

    .objDocument.DocName = CommonDialog1.FileName

    .objDocument.Changed = False

    End With

    End If

    Exit Sub

    ErrorHandler:If Err.Number = cdlCancel Then

    Cancel = True

    Resume Next

    End If

    End Sub

    Private Sub mnuHelpAbout_Click()

    frmAbout.Show vbModal

    End Sub

    Private Sub mnuToolsOptions_Click()

    frmOptions.Show vbModal

    End Sub

    Private Sub mnuWindowArrangeIcons_Click()frmMain.Arrange vbArrangeIcons

    End Sub

    Private Sub mnuWindowCascade_Click()

    frmMain.Arrange vbCascade

    End Sub

    Private Sub mnuWindowTileHorizontally_Click()

    frmMain.Arrange vbTileHorizontal

    End Sub

    Private Sub mnuWindowTileVertically_Click()

    frmMain.Arrange vbTileVertical

    End Sub

    Private Sub Toolbar1_ButtonClick(ByVal TheButton As Button)Select Case TheButton.Key

    Case "New"

    mnuFileNew_Click

    Case "Open"

    mnuFileOpen_Click

    Case "Save"

    mnuFileSave_Click

    End Select

    End Sub

    Find Form:-

    Marudhar Engg. College Page 27

  • 8/4/2019 X Window File

    28/31

    X-Window Lab

    CODING :-

    Option Explicit

    Private Sub cmdCancel_Click()

    Unload Me

    End Sub

    Private Sub cmdFind_Click()

    Dim DocumentObject As clsDocument

    Dim FindResults As Integer

    For Each DocumentObject In frmMain.DocColl

    FindResults = InStr(DocumentObject.DocumentForm.txtDocument.Text,

    txtFind.Text)

    If FindResults > 0 ThenDocumentObject.DocumentForm.ZOrder

    DocumentObject.DocumentForm.txtDocument.SelStart = FindResults - 1

    DocumentObject.DocumentForm.txtDocument.SelLength = Len(txtFind.Text)

    Exit For

    End If

    Next DocumentObject

    Unload Me

    End Sub

    Document Form:-

    Marudhar Engg. College Page 28

  • 8/4/2019 X Window File

    29/31

    X-Window Lab

    CODING:-

    Option Explicit

    Public objDocument As clsDocument

    Dim CollKey As Integer

    Private Sub Form_Activate()

    frmMain.SetupCSMenus

    frmMain.DisplayLineNumber

    End Sub

    Private Sub Form_Load()

    Set objDocument = New clsDocument

    frmMain.DocColl.Add objDocument, CStr(frmMain.CollKeyIndex)

    CollKey = frmMain.CollKeyIndexfrmMain.CollKeyIndex = frmMain.CollKeyIndex + 1

    Set objDocument.DocumentForm = Me

    objDocument.DocName = Me.Caption

    End Sub

    Private Sub Form_Resize()

    Me.txtDocument.Top = 0

    Me.txtDocument.Left = 0

    Me.txtDocument.Width = Me.ScaleWidth

    Me.txtDocument.Height = Me.ScaleHeight

    End Sub

    Marudhar Engg. College Page 29

  • 8/4/2019 X Window File

    30/31

    X-Window Lab

    Private Sub Form_Unload(Cancel As Integer)

    If objDocument.Changed Then

    Select Case MsgBox("The text in the " & objDocument.DocName & _

    " file has changed." & Chr(13) & Chr(13) & _

    "Do you want to save the changes ?", _

    vbExclamation Or vbYesNoCancel, frmMain.Caption)Cancel = True

    End Select

    End If

    If Cancel = False Then

    objDocument.Closing = True

    End If

    frmMain.SetupCSMenus

    If Cancel = False Then

    frmMain.DocColl.Remove CStr(CollKey)

    Set objDocument = Nothing

    frmMain.StatusBar1.Panels("Text").Text = ""

    End IfEnd Sub

    Private Sub txtDocument_KeyPress(KeyAscii As Integer)

    objDocument.Changed = True

    End Sub

    Private Sub txtDocument_MouseUp(Button As Integer, Shift As Integer, X As Single, Y

    As Single)

    frmMain.SetupCSMenus

    End Sub

    Private Sub txtDocument_SelChange()

    frmMain.DisplayLineNumberEnd Sub

    Help Form:-

    CODING :-Option Explicit

    Private Sub cmdOK_Click()

    Unload Me

    End Sub

    Private Sub Form_Load()

    Me.Move (Screen.Height - Me.Height) / 2, (Screen.Width - Me.Width) / 2

    Marudhar Engg. College Page 30

  • 8/4/2019 X Window File

    31/31

    X-Window Lab

    End Sub