home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1991
/
05
/
grdlagen
/
txdemo.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-02-15
|
5KB
|
161 lines
(* ------------------------------------------------------ *)
(* TXDEMO.PAS *)
(* Kleine Demonstration einiger M÷glichkeiten *)
(* von Turbo Pascal fⁿr Windows *)
(* (c) 1991 W.Rinke & TOOLBOX *)
(* ------------------------------------------------------ *)
PROGRAM TX_Demo;
{$R TXDEMO}
USES Strings, WinTypes, WinProcs;
CONST
AppName = 'TX_Demo'; (* u.a. Name der Resource *)
CONST
idm_System = 199; (* Handles der Menⁿpunkte *)
idm_Logo = 200;
FUNCTION Logo(Dialog : HWnd; Message, WParam : WORD;
LParam : LongInt) : BOOL; EXPORT;
(* Dient dem Aufbau und der Steuerung des Logo-Fensters *)
(* HWnd -> Window-"Klasse", *)
(* Message und WParam -> Zeiger auf Nachrichten *)
(* BOOL -> neuer Typ speziell fⁿr Windows *)
(* EXPORT -> die Prozedur wird von Windows gesteuert *)
BEGIN
Logo := TRUE;
CASE Message OF (* Jede Prozedur, die vom Programm- *)
(* manager gesteuert wird, mu▀ die *)
(* Messages auswerten. *)
wm_InitDialog:
Exit;
wm_Command:
IF (WParam = IDOK) OR (WParam = IDCANCEL) THEN BEGIN
(* Auswertung des Pushbuttons *)
(* "Diesen Knopf nicht drⁿcken!" *)
EndDialog(Dialog, 1);
(* Oder entsprechende andere Aktionen *)
(* Wichtig: Windows erhΣlt die Steuerung zurⁿck *)
Exit;
END;
END;
Logo := False;
END;
FUNCTION MainWndProc(Window : HWnd; Message, WParam: WORD;
LParam : LongInt) : LongInt; EXPORT;
(* Steuerung des Hauptfensters -- *)
(* vgl. mitgelieferte Demo GENERIC.PAS *)
VAR
LogoProc : TFarProc; (* Zeiger auf "Tochterfenster" *)
DC : HDC;
PS : TPaintStruct;
BEGIN
MainWndProc := 0;
CASE Message OF
wm_Command:
CASE WParam OF (* Auswertung der Menⁿpunkte *)
idm_Logo:
BEGIN
LogoProc := MakeProcInstance(@Logo,hInstance);
(* Tochterfenster erzeugen *)
DialogBox(hInstance, 'ToolboxLogo',
Window, LogoProc);
(* Steuerung ⁿbergeben *)
FreeProcInstance(LogoProc);
(* Fenster schlie▀en und Speicher freigeben *)
Exit;
END;
END;
wm_Destroy: (* "Schlie▀en" angeklickt *)
BEGIN
PostQuitMessage(0);
(* Meldung an den Programm-Manager, *)
(* da▀ die Applikation beendet ist *)
(* Entspricht in etwa "Halt(0)" *)
Exit;
END;
END;
MainWndProc := DefWindowProc(Window, Message,
WParam, LParam);
END;
(* ---------------------------------------------------- *)
(* Die folgenden Prozeduren sind der Kern der *)
(* Windows-Applikation und sehen in vielen Anwendungen *)
(* identisch aus. *)
(* vgl. die mitgelieferten Demos *)
(* ---------------------------------------------------- *)
PROCEDURE InitApplication;
(* Initialisierung, der Fenster, etc. *)
CONST
WindowClass : TWndClass = (
style : 0;
lpfnWndProc : @MainWndProc;
cbClsExtra : 0;
cbWndExtra : 0;
hInstance : 0;
hIcon : 0;
hCursor : 0;
hbrBackground : 0;
lpszMenuName : AppName;
lpszClassName : AppName );
BEGIN
WindowClass.hInstance := hInstance;
WindowClass.hIcon := LoadIcon(0, idi_Application);
WindowClass.hCursor := LoadCursor(0, idc_Arrow);
WindowClass.hbrBackground:= GetStockObject(White_Brush);
IF NOT RegisterClass(WindowClass) THEN Halt(1);
END;
PROCEDURE InitInstance;
VAR
Window : HWnd;
BEGIN
Window := CreateWindow(
AppName, (* Name der Applikation *)
'Erste Windows-Anwendung', (* ▄berschrift *)
ws_OverlappedWindow, (* "Style" des Fensters *)
cw_UseDefault,
cw_UseDefault,
cw_UseDefault,
cw_UseDefault, (* Start-Koordinaten *)
0,
0,
hInstance,
NIL);
IF Window = 0 THEN Halt(1);
(* Bei der Initialisierung ist etwas schiefgelaufen *)
ShowWindow(Window, CmdShow);
(* Zeigt alle Elemente des Fensters *)
UpdateWindow(Window);
(* L÷scht die "Client-Area" -- die ArbeitsflΣche *)
END;
PROCEDURE WinMain;
(* Kern der eigenen Windows-Applikation *)
VAR
Message: TMsg;
BEGIN
IF hPrevInst = 0 THEN InitApplication;
InitInstance;
WHILE GetMessage(Message, 0, 0, 0) DO BEGIN
TranslateMessage(Message);
DispatchMessage(Message);
END;
Halt(Message.wParam);
END;
BEGIN (* "Tribut" an den Pascal-Compiler *)
WinMain;
END.
(* ------------------------------------------------------ *)
(* Ende von TXDEMO.PAS *)