home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / LFC-SW2.LHA / StormWizard / Example-Source / Pascal-Source / Simple / gadgethelp.p < prev    next >
Encoding:
Text File  |  1996-08-31  |  5.2 KB  |  186 lines

  1. { Auslesen und Anzeigen eines Hilfe-Strings. (Gadgethelp.p)
  2.  
  3.   $VER:             1.0 (01.09.96)
  4.  
  5.   Autor
  6.   Pascal-Version:   Falk Zühlsdorff  (EMail: ai036@rz.tu-ilmenau.de)
  7.                     CDproV3.x, APrintV3.x,...,
  8.                     P.U.R.I.T.Y.-Pascal-FD, Amiga Zentrum Thüringen e.V.
  9.  
  10.   ACHTUNG: in den Original OS3.0 Includes fehlt der Eintrag für die
  11.            IDCMP_GADGETHELP (include/intuition/intuition.h). Wie folgt
  12.            die Konstante ergänzen:
  13.  
  14.            IDCMP_GADGETHELP = $04000000;
  15.  
  16. }
  17.  
  18. Program Gadgethelp;
  19.  
  20. USES Exec,Intuition,Utility;
  21. {$incl 'dos.lib','workbench/startup.h','icon.lib','wb.lib','wizard.lib'};
  22.  
  23. CONST WIZARDFILE               = "gadgethelp.wizard";
  24.       WINDOW_MAIN              = 1;
  25.       WINDOW_MAIN_GADGETS      = 4;
  26.  
  27. VAR   surface                  : Ptr;
  28.       screen                   : p_Screen;
  29.       newwin                   : p_NewWindow;
  30.       window                   : p_Window;
  31.       winhandle,helpwinhandle  : p_WizardWindowHandle;
  32.       helpiaddress             : PTR;
  33.  
  34.       gads                     : array[0..WINDOW_MAIN_GADGETS] of p_gadget;
  35.       msg                      : p_IntuiMessage;
  36.  
  37.       tags                     : array[0..2] of tagitem;
  38.       tags2                    : array[0..1] of tagitem;
  39.       flag                     : boolean;
  40.  
  41.  
  42.  
  43.  
  44.       { folgende Variablen dienen dazu den Startpfad des unseres
  45.         Programmes zu ermitteln (dort muß sich das WIZARDFILE befinden) }
  46.  
  47.       WBmsg                    : p_WBStartup;
  48.       hlp                      : integer;
  49.       StartName                : String[108]; {Pfad+Name des Wizardfiles ablegen}
  50.  
  51. PROCEDURE CleanUp; {sauber aufräumen... }
  52. BEGIN
  53.  IF window<>NIL        THEN WZ_CloseWindow(winhandle);
  54.  IF winhandle<>NIL     THEN WZ_FreeWindowHandle(winhandle);
  55.  IF surface<>NIL       THEN WZ_CloseSurface(surface);
  56.  IF screen<>NIL        THEN UnlockPubScreen(NIL,screen);
  57.  IF WizardBase<>NIL    THEN CloseLibrary(WizardBase);
  58.  IF UtilityBase<>NIL   THEN CloseLibrary(UtilityBase);
  59.  IF IntuitionBase<>NIL THEN CloseLibrary(IntuitionBase);
  60. END;
  61.  
  62. BEGIN
  63.  IF NOT FROMWB THEN exit;
  64.  
  65.  {-- besagten Startpfad ermitteln... --}
  66.  
  67.  StartName:='';
  68.  WBmsg:=StartupMessage;
  69.  
  70.  IF WBmsg^.sm_NumArgs>=1
  71.   THEN
  72.    BEGIN
  73.     hlp:=NameFromLock(WBmsg^.sm_ArgList^[1].wa_lock,^StartName,107);
  74.     IF (StartName[Length(StartName)])<>':'
  75.      THEN StartName:=StartName+'/'+WIZARDFILE
  76.      ELSE StartName:=StartName+WIZARDFILE;;
  77.    END
  78.   ELSE exit;
  79.  
  80.  {--  Initialisierung --}
  81.  
  82.  surface:=NIL;winhandle:=NIL;newwin:=NIL;window:=NIL;screen:=NIL;
  83.  
  84.  {-- Library öffnen --}
  85.  
  86.  WizardBase:=OpenLibrary('wizard.library',0);
  87.  IF WizardBase = NIL THEN exit;
  88.  
  89.  {-- Oberflächenbeschreibung laden --}
  90.  
  91.  surface:=WZ_OpenSurfaceA(StartName,NIL,NIL);
  92.  IF surface<>NIL
  93.   THEN
  94.    BEGIN
  95.     {-- Natürlich brauchen wir auch noch einen Screen --}
  96.  
  97.     screen:=LockPubScreen(NIL);
  98.     IF screen<>NIL
  99.      THEN
  100.       BEGIN
  101.  
  102.        {-- windowhandle reservieren, mit dem die Objekte durch die
  103.        wizard.library verwaltet werden                             --}
  104.  
  105.        winhandle:=WZ_AllocWindowHandleA(screen,0,surface,NIL);
  106.        IF surface<>NIL
  107.         THEN
  108.          BEGIN
  109.           Tags[0]:=TagItem(WWH_GadgetArray,Long(^gads));
  110.           Tags[1]:=TagItem(WWH_GadgetArraySize,sizeof(gads));
  111.           Tags[2].ti_tag:=tag_done;
  112.  
  113.           tags2[0]:=TagItem(WA_AutoAdjust,1);
  114.           tags2[1].ti_tag:=tag_done;
  115.  
  116.  
  117.           {-- Objekte anlegen --}
  118.  
  119.           newwin:=WZ_CreateWindowObjA(winhandle,1,^Tags);
  120.           IF newwin<>NIL
  121.            THEN
  122.             BEGIN
  123.  
  124.              {Fenster mi allen Objekten öffnen }
  125.  
  126.              window:=WZ_OpenWindowA(winhandle,newwin,^tags2);
  127.              IF window<>NIL
  128.               THEN
  129.                BEGIN
  130.  
  131.                 {-- IDCMP_GADGETHELP-Intuition-Messages zuschalten --}
  132.  
  133.                 HelpControl(window,HC_GADGETHELP);
  134.  
  135.                 {-- Intuition-Message abfangen ... --}
  136.  
  137.                 flag:=false;
  138.                 REPEAT
  139.                  Msg:=Wait_Port(window^.UserPort);
  140.                  Msg:=Get_Msg(window^.Userport);
  141.                  IF Msg<>NIL
  142.                     THEN
  143.                      BEGIN
  144.                       Reply_Msg(Msg);
  145.                       CASE Msg^.Class OF
  146.                        IDCMP_CLOSEWINDOW: flag:=true;
  147.                        IDCMP_GADGETHELP:
  148.                         IF msg^.iaddress<>NIL
  149.                          THEN
  150.                           SetWindowTitles(window,WZ_GadgetHelp(winhandle,msg^.iaddress),STR(-1))
  151.                          ELSE
  152.                           SetWindowTitles(window,'Außerhalb',STR(-1));
  153.  
  154.                        { IDCMP_GADGETHELP gibt es erst mit V39, vorher wie folgt emulieren...}
  155.  
  156.                        IDCMP_MOUSEMOVE:
  157.                         IF WZ_GadgetHelpMsg(winhandle,PTR(helpwinhandle),PTR(helpiaddress),msg^.mouseX,msg^.mouseY,0)
  158.                          THEN
  159.                           IF msg^.iaddress<>NIL
  160.                            THEN
  161.                             SetWindowTitles(window,WZ_GadgetHelp(helpwinhandle,helpiaddress),STR(-1))
  162.                            ELSE
  163.                             SetWindowTitles(window,'Außerhalb',STR(-1));
  164.                       ELSE;END;
  165.                      END;
  166.  
  167.                 UNTIL flag;
  168.                END;
  169.             END;
  170.          END;
  171.       END;
  172.    END;
  173.  
  174.  CleanUp;
  175. END.
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.