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

    {
    > I need help with the turbo vision handleevent procedure...I can't get a
    > dialog box to handle any events of its own...I got Tapplications
    > handlevent to work for me, but it just won't work in a dialog box.  Please
    > help.

    Normally a dialog can handle some 4 types of events - that is END the dialog
    with the return code of your event - I'm guessing that you want a dialog with
    some ten buttons or something like that ?
    I've designed a dialog decendor that will take up to 16k buttons

    Extract from peldialogs - Copyright 1994 PEL-Data Bor�s Sweden
    Released for public domain on term that origin of code is mentioned in
    credits part of your program !
    }

    unit peldialogs;

    interface

    uses
     Objects,
     Drivers,
     dialogs,
     views,
     pelRegtypes,
     pelobjects,
     msgbox;

    Type
     Ppeldialog = ^Tpeldialog;
     Tpeldialog = object(tdialog)
      endcmds:Ppelwordcollection;
      constructor Init(var Bounds: TRect; ATitle: TTitleStr);
      destructor done;virtual;
      procedure addcmd(cmd:word);virtual;
      procedure HandleEvent(var Event: TEvent); virtual;
     end;

    implementation
    uses
     Dos,    Memory,
     StdDlg,  app,
     peltextlang,
     pelfile, validate, pelvalidate,pelstrings;

    constructor Tpeldialog.Init(var Bounds: TRect; ATitle: TTitleStr);
    begin
     inherited Init(Bounds,ATitle);
     endcmds:=new(Ppelwordcollection,init(5,5));
    end;

    destructor Tpeldialog.done;
    begin
     dispose(endcmds,done);
     inherited done;
    end;

    procedure Tpeldialog.addcmd(cmd:word);
    var
     p:pword;
    begin
     new(p);
        p^:=cmd;
     endcmds^.insert(p);
    end;

    procedure Tpeldialog.HandleEvent(var Event: TEvent);
    var Index: Integer;
    begin
     inherited HandleEvent(event);
     if Event.What = evCommand then begin
      if endcmds^.search(@Event.Command,index) then begin
       if State and sfModal <> 0 then begin
        EndModal(Event.Command);
        ClearEvent(Event);
       end;
      end;
     end;
    end;

    end.
    {
    Use the ppeldialog instead of the pdialog

    Add a call to addcmd() for every command you want the dialog to exit with
    normally a dialog will end for cmok,cmcancel,cmyes and cmno - those dont need
    to be added !
    }

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