home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 05 / grdlagen / txdemo.pas < prev    next >
Pascal/Delphi Source File  |  1991-02-15  |  5KB  |  161 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      TXDEMO.PAS                        *)
  3. (*       Kleine Demonstration einiger M÷glichkeiten       *)
  4. (*             von Turbo Pascal fⁿr Windows               *)
  5. (*             (c) 1991 W.Rinke & TOOLBOX                 *)
  6. (* ------------------------------------------------------ *)
  7. PROGRAM TX_Demo;
  8.  
  9. {$R TXDEMO}
  10.  
  11. USES Strings, WinTypes, WinProcs;
  12.  
  13. CONST
  14.   AppName = 'TX_Demo';          (* u.a. Name der Resource *)
  15.  
  16. CONST
  17.   idm_System = 199;             (* Handles der Menⁿpunkte *)
  18.   idm_Logo   = 200;
  19.  
  20.  
  21.   FUNCTION Logo(Dialog : HWnd; Message, WParam : WORD;
  22.         LParam : LongInt) : BOOL;  EXPORT;
  23.   (* Dient dem Aufbau und der Steuerung des Logo-Fensters *)
  24.   (* HWnd -> Window-"Klasse",                             *)
  25.   (* Message und WParam      -> Zeiger auf Nachrichten    *)
  26.   (* BOOL -> neuer Typ speziell fⁿr Windows               *)
  27.   (* EXPORT -> die Prozedur wird von Windows gesteuert    *)
  28.   BEGIN
  29.     Logo := TRUE;
  30.     CASE Message OF   (* Jede Prozedur, die vom Programm- *)
  31.               (* manager gesteuert wird, mu▀ die  *)
  32.               (* Messages auswerten.              *)
  33.       wm_InitDialog:
  34.     Exit;
  35.       wm_Command:
  36.     IF (WParam = IDOK) OR (WParam = IDCANCEL) THEN BEGIN
  37.       (* Auswertung des Pushbuttons                   *)
  38.       (* "Diesen Knopf nicht drⁿcken!"                *)
  39.       EndDialog(Dialog, 1);
  40.       (* Oder entsprechende andere Aktionen           *)
  41.       (* Wichtig: Windows erhΣlt die Steuerung zurⁿck *)
  42.       Exit;
  43.     END;
  44.     END;
  45.     Logo := False;
  46.   END;
  47.  
  48.  
  49.   FUNCTION MainWndProc(Window : HWnd; Message, WParam: WORD;
  50.                LParam : LongInt) : LongInt; EXPORT;
  51.   (* Steuerung des Hauptfensters --                       *)
  52.   (* vgl. mitgelieferte Demo GENERIC.PAS                  *)
  53.   VAR
  54.     LogoProc : TFarProc;   (* Zeiger auf "Tochterfenster" *)
  55.     DC       : HDC;
  56.     PS       : TPaintStruct;
  57.   BEGIN
  58.     MainWndProc := 0;
  59.     CASE Message OF
  60.       wm_Command:
  61.     CASE WParam OF       (* Auswertung der Menⁿpunkte *)
  62.       idm_Logo:
  63.         BEGIN
  64.           LogoProc := MakeProcInstance(@Logo,hInstance);
  65.         (* Tochterfenster erzeugen *)
  66.           DialogBox(hInstance, 'ToolboxLogo',
  67.             Window, LogoProc);
  68.         (* Steuerung ⁿbergeben *)
  69.           FreeProcInstance(LogoProc);
  70.           (* Fenster schlie▀en und Speicher freigeben *)
  71.           Exit;
  72.         END;
  73.     END;
  74.       wm_Destroy:               (* "Schlie▀en" angeklickt *)
  75.     BEGIN
  76.       PostQuitMessage(0);
  77.            (* Meldung an den Programm-Manager,    *)
  78.            (* da▀ die Applikation beendet ist     *)
  79.            (* Entspricht in etwa "Halt(0)"        *)
  80.       Exit;
  81.     END;
  82.     END;
  83.     MainWndProc := DefWindowProc(Window, Message,
  84.                  WParam, LParam);
  85.   END;
  86.  
  87.   (* ---------------------------------------------------- *)
  88.   (* Die folgenden Prozeduren sind der Kern der           *)
  89.   (* Windows-Applikation und sehen in vielen Anwendungen  *)
  90.   (* identisch aus.                                       *)
  91.   (* vgl. die mitgelieferten Demos                        *)
  92.   (* ---------------------------------------------------- *)
  93.  
  94.   PROCEDURE InitApplication;
  95.     (* Initialisierung, der Fenster, etc. *)
  96.   CONST
  97.     WindowClass : TWndClass = (
  98.       style         : 0;
  99.       lpfnWndProc   : @MainWndProc;
  100.       cbClsExtra    : 0;
  101.       cbWndExtra    : 0;
  102.       hInstance     : 0;
  103.       hIcon         : 0;
  104.       hCursor       : 0;
  105.       hbrBackground : 0;
  106.       lpszMenuName  : AppName;
  107.       lpszClassName : AppName );
  108.   BEGIN
  109.     WindowClass.hInstance := hInstance;
  110.     WindowClass.hIcon     := LoadIcon(0, idi_Application);
  111.     WindowClass.hCursor   := LoadCursor(0, idc_Arrow);
  112.     WindowClass.hbrBackground:= GetStockObject(White_Brush);
  113.     IF NOT RegisterClass(WindowClass) THEN Halt(1);
  114.   END;
  115.  
  116.  
  117.   PROCEDURE InitInstance;
  118.   VAR
  119.     Window : HWnd;
  120.   BEGIN
  121.     Window := CreateWindow(
  122.       AppName,                    (* Name der Applikation *)
  123.       'Erste Windows-Anwendung',  (* ▄berschrift          *)
  124.       ws_OverlappedWindow,        (* "Style" des Fensters *)
  125.       cw_UseDefault,
  126.       cw_UseDefault,
  127.       cw_UseDefault,
  128.       cw_UseDefault,              (* Start-Koordinaten    *)
  129.       0,
  130.       0,
  131.       hInstance,
  132.       NIL);
  133.     IF Window = 0 THEN Halt(1);
  134.       (* Bei der Initialisierung ist etwas schiefgelaufen *)
  135.     ShowWindow(Window, CmdShow);
  136.       (* Zeigt alle Elemente des Fensters *)
  137.     UpdateWindow(Window);
  138.       (* L÷scht die "Client-Area" -- die ArbeitsflΣche *)
  139.   END;
  140.  
  141.  
  142.   PROCEDURE WinMain;
  143.     (* Kern der eigenen Windows-Applikation *)
  144.   VAR
  145.     Message: TMsg;
  146.   BEGIN
  147.     IF hPrevInst = 0 THEN InitApplication;
  148.     InitInstance;
  149.     WHILE GetMessage(Message, 0, 0, 0) DO BEGIN
  150.       TranslateMessage(Message);
  151.       DispatchMessage(Message);
  152.     END;
  153.     Halt(Message.wParam);
  154.   END;
  155.  
  156. BEGIN                  (* "Tribut" an den Pascal-Compiler *)
  157.   WinMain;
  158. END.
  159. (* ------------------------------------------------------ *)
  160. (*                 Ende von TXDEMO.PAS                    *)
  161.