[Back to OOP SWAG index] [Back to Main SWAG index] [Original]

    {
    670: Messaging Between Two Dialogs/Update Backgroung
       Pascal   All       TI-09/30/94

    it demonstrates how to broadcast messages to background windows and update
    information without changing the selected dialog.

      PRODUCT  :  Pascal                                 NUMBER  :  670
      VERSION  :  All
           OS  :  DOS
         DATE  :  September 30, 1994                       PAGE  :  1/1

        TITLE  :  Messaging Between Two Dialogs/Update Backgroung

    {
       This program will create two modeless dialog boxes and will
       allow only one dialog to be created at any time.

       Additionally, it demonstrates how to broadcast messages to
       background windows and update information without changing
       the selected dialog.

    }
    {$X+}

    Program DialogCommunication;

    uses Objects, Drivers, Views, Menus, Dialogs, App, Crt;
    const
      cmDialog1 = 100;
      cmDialog2 = 101;
      cmDialog1Button = 200;
      cmDialog2Button = 201;

    type

     PHelloApp = ^THelloApp;
      THelloApp = object(TApplication)
        procedure MakeDialog;
        procedure HandleEvent(var Event: TEvent); virtual;

        procedure InitMenuBar; virtual;
        procedure InitStatusLine; virtual;
      end;

      PMyDialog1 = ^TMyDialog1;
      TMyDialog1 = object(TDialog)
        procedure MakeDialog2;
        procedure HandleEvent(var Event:TEvent); virtual;
      end;

      PMyDialog2 = ^TMyDialog2;
      TMyDialog2 = object(TMyDialog1)
        procedure HandleEvent(var Event:TEvent); virtual;
      end;

    procedure TMyDialog1.HandleEvent(var Event: TEvent);
    var
      AreYouThere: PView;
    begin
      TDialog.HandleEvent(Event);

      if Event.What = evCommand then
        begin
          case Event.Command of
             cmDialog1Button:
               begin
                 AreYouThere:= Message(DeskTop, evBroadcast,
    cmDialog2, nil);
                 if AreYouThere = nil then
                    MakeDialog2
                  else
                    ClearEvent(Event);
               end
          else
            Exit;
          end;
            ClearEvent(Event);
        end;
    end;

    procedure TMyDialog1.MakeDialog2;
    var
      Dialog2: PMyDialog2;

      R: TRect;
      Button: PButton;
    begin
      R.Assign(1,1,40,20);
      Dialog2:= New(PMyDialog2, init(R,'Dialog2'));
      R.Assign(10,10,20,12);
      Button:= New(PButton,Init(R,'Beep', cmDialog2Button,
    bfdefault));
      Dialog2^.Insert(Button);
      DeskTop^.Insert(Dialog2);
    end;

    procedure TMyDialog2.HandleEvent(var Event: TEvent);
    begin
      case Event.Command of
        cmDialog2: begin
                     sound(2000); delay(10); nosound;
                     Title:=newstr('Hello world');

                     ReDraw;
                     ClearEvent(Event);
                   end;
      end;
      TDialog.HandleEvent(Event);
      if Event.What = evCommand then
        begin
          case Event.Command of
             cmDialog2Button: begin
                                Sound(1000); delay(100); NoSound;
                              end;
          else
            Exit;
          end;
            ClearEvent(Event);
        end;
    end;

    { THelloApp }

    procedure THelloApp.MakeDialog;
    var
      R:TRect;

      Button1: PButton;
      Dialog1: PMyDialog1;
    begin
      R.Assign(25, 5, 65, 16);
      Dialog1:= New(PMyDialog1, init(R,'Dialog1'));
      R.Assign(16, 8, 38, 10);
      Button1:= New(PButton, Init(R,'Call Dialog2', cmDialog1Button,
    bfDefault));
      Dialog1^.Insert(Button1);
      DeskTop^.Insert(Dialog1);
    end;

    procedure THelloApp.HandleEvent(var Event: TEvent);
    begin
      TApplication.HandleEvent(Event);
      if Event.What = evCommand then
        begin
          case Event.Command of
             cmDialog1:begin

                         MakeDialog;
                       end;
          else
            Exit;
          end;
            ClearEvent(Event);
         end;
    end;

    procedure THelloApp.InitMenuBar;
    var
      R: TRect;
    begin
      GetExtent(R);
      R.B.Y := R.A.Y + 1;
      MenuBar := New(PMenuBar, Init(R, NewMenu(
        NewSubMenu('~O~pen Dialogs', hcNoContext, NewMenu(
          NewItem('~D~ialog1','', 0, cmDialog1, hcNoContext,
          NewLine(
          NewItem('E~x~it', 'Alt-X', kbAltX, cmQuit,
            hcNoContext, nil)))), nil))));

    end;

    procedure THelloApp.InitStatusLine;
    var
      R: TRect;
    begin
      GetExtent(R);
      R.A.Y := R.B.Y-1;
      StatusLine := New(PStatusLine, Init(R,
        NewStatusDef(0, $FFFF,
          NewStatusKey('', kbF10, cmMenu,
          NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit, nil)), nil)));
    end;

    var
      HelloWorld: THelloApp;

    begin
      HelloWorld.Init;
      HelloWorld.Run;
      HelloWorld.Done;
    end.

    DISCLAIMER: You have the right to use this technical information
    subject to the terms of the No-Nonsense License Statement that

    you received with the Borland product to which this information
    pertains.
    PACHXA296:PACHXA296

[Back to OOP SWAG index] [Back to Main SWAG index] [Original]