home *** CD-ROM | disk | FTP | other *** search
- {
- From: bobs@dragons.nest.nl (Bob Swart)
-
- { here is a very small screensaver. It compiles to less than 3Kbytes: }
- {$A+,B-,D-,F+,G+,I-,K-,L-,N-,P-,Q-,R-,S+,T-,V-,W+,X+,Y-}
- {$M 8192,0,8192}
- program ScrnSave;
- {$D SCRNSAVE: Bob Swart}
- uses WinTypes,
- WinProcs;
-
- function MyYield: Boolean;
- var msg: TMsg;
- begin
- while PeekMessage(msg, 0, 0, 0, PM_REMOVE) do
- begin
- if msg.message = WM_QUIT then
- begin
- PostQuitMessage(msg.wParam);
- MyYield := TRUE;
- EXIT
- end
- else
- begin
- TranslateMessage(msg);
- DispatchMessage(msg)
- end
- end;
- MyYield := FALSE
- end {MyYield};
-
-
- function DefSaverProc(hwnd: HWND; msg,wp: Word; lp: LongInt): LongInt; export;
- Const SC_SCREENSAVE = $F140;
- begin
- DefSaverProc := 0;
- case msg of
- WM_CREATE: ShowCursor(FALSE);
- WM_DESTROY: begin
- ShowCursor(TRUE);
- PostQuitMessage(0);
- end;
- WM_SYSCOMMAND: if wp <> SC_SCREENSAVE then { screen saver starten }
- PostMessage(hwnd, WM_CLOSE, 0, 0);
- WM_ACTIVATEAPP: if wp = 0 then PostMessage(hwnd, WM_CLOSE, 0, 0);
- WM_KEYDOWN,
- WM_SYSKEYDOWN,
- { WM_MOUSEMOVE, => I don't like my screensaver to stop on a mousemove }
- WM_LBUTTONDOWN,
- WM_MBUTTONDOWN,
- WM_RBUTTONDOWN: PostMessage(hwnd, WM_CLOSE, 0, 0);
- else
- DefSaverProc := DefWindowProc(hwnd, msg, wp, lp)
- end {case}
- end {DefSaverProc};
-
-
- function WndProc(hwnd: HWND; msg, wp: Word; lp: LongInt): LongInt; export;
- var ps: TPaintStruct;
- X,Y: Integer;
- R,G,B: Byte;
- Dc: HDC;
- begin
- WndProc := 0;
- case msg of
- WM_PAINT:
- begin
- beginPaint(hwnd, ps);
- endPaint(hwnd, ps);
-
- Dc := GetDC(hwnd);
- SetBkMode(Dc,TRANSPARENT);
- X := GetSystemMetrics(SM_CXSCREEN);
- Y := GetSystemMetrics(SM_CYSCREEN);
- while NOT MyYield do
- begin
- R := Random($FF);
- G := Random($FF);
- B := Random($FF);
- SetTextColor(Dc,RGB(R,G,B));
- TextOut(Dc,Random(X),Random(Y),'Bob Swart',9);
- end;
- releasedc(Dc, hwnd)
- end;
- else
- WndProc := CallWindowProc(@DefSaverProc, hwnd, msg, wp, lp)
- end
- end {WndProc};
-
-
- function BlackBox(WndProc: TFARPROC): Integer;
- var msg: TMsg;
- Const wc: TWndClass=();
- begin
- wc.style := CS_OWNDC;
- wc.lpfnWndProc := WndProc;
- wc.hInstance := hInstance;
- wc.hbrBackground := GetStockObject(BLACK_BRUSH);
- wc.lpszClassName := 'BlackBox';
- RegisterClass(wc);
-
- CreateWindow('BlackBox', nil, WS_POPUP+WS_MAXIMIZE+WS_VISIBLE,
- 0, 0, 0, 0, 0, 0, hInstance, nil);
-
- while GetMessage(msg, 0, 0, 0) do DispatchMessage(msg);
- BlackBox := msg.wParam
- end {BlackBox};
-
- function Configure: Integer;
- begin
- Configure :=
- MessageBox(HWnd(0),
- 'Borland Pascal Performance Optimiziation screen saver demo',
- 'DOS/Win Special 94/4',
- mb_OK OR mb_IconInformation)
- end {Configure};
-
-
- begin
- if hPrevInst <> 0 then Halt(1);
- Randomize;
- while ord(CmdLine[0]) <> 0 do
- begin
- if (CmdLine[0] = '-') OR (CmdLine[0] = '/') then
- begin
- Inc(CmdLine);
- case CmdLine[0] of
- 's', 'S': blackbox(@WndProc) { activate };
- 'c', 'C': configure
- end
- end;
- Inc(CmdLine)
- end
- end.