Dec 232017
 
TPW source to load up a splash screen for your windows apps.
File SPLASH.ZIP from The Programmer’s Corner in
Category Pascal Source Code
TPW source to load up a splash screen for your windows apps.
File Name File Size Zip Size Zip Type
SPLASH.PAS 1920 747 deflated
SPLASH.RES 50145 2474 deflated
SPLASH.TXT 6010 2608 deflated
ZILCH.RES 1068 459 deflated
ZWINDOW.EXE 68352 9590 deflated
ZWINDOW.PAS 2145 795 deflated

Download File SPLASH.ZIP Here

Contents of the SPLASH.TXT file



2/10/92

SPLASHSCREEN DEMO

Files: Splash.pas - splashscreen unit source
Splash.res - splashscreen bitmap resource
Zwindow.pas - generic demo program
Zilch.res -resource file for Zwindow.pas
Splash.txt - this file

This small project grew out of looking at the TPW bitmap that
pops up every time you start the program. It is my understanding
that Object Graphics has a method that creates this type of splash-
screen, but rather than buy a library to accomplish this, I hacked
around until I came up with something that worked. The result is
the unit contained in SPLASH.PAS, which pops up a borderless
bitmap window for ten seconds when your program starts. The
window is modeless to the extent that it does not halt tasks in
other currently executing programs, but greys out the parent
program and does not allow the user to close it for the ten
seconds it is onscreen. If the user clicked on the greyed parent
program, he could actually access it while the splashscreen is
visible, but the fact that the parent program appears inactive
would discourage most users from doing so. This is probably
not very memory efficient(as a sizable bitmap resource has
to be loaded into memory every time the parent program
executes) but it is quite slick and professional looking and is
ideal for a shareware announcement. I have to mention that it
drives me crazy that some shareware programmers use timed
system modal dialog boxes that bring ALL Windows processes
to a halt while their announcement displays. A few times I have
loaded these programs while downloading remote data or in the
midst of DDE processes and have lost data (it doesn't exactly
make me want to run for my checkbook and register their programs).
I think this splashscreen method is much more considerate of your
end user.

ABOUT ZWINDOW.PAS
This is a generic TWindow descendent that does nothing except display the
splashscreen. It has a menu with an exit command and an about dialog. I
included this program as a demo of how to add the splashscreen object to
your existing programs. Since the splashscreen is a parentless popup
window, the only way you can keep it from being overlapped by the parent
window is to call it in between the TApplication.Init and .Run methods :

var
ZApp : ZilchApp;

begin
ZApp.Init('ZilchApp');
{this inits the splashscreen object}
Application^.MakeWindow(New(PPicWindow, Init(nil, ws_Popup
or ws_visible and not ws_OverlappedWindow)));
ZApp.Run;
ZApp.Done;
end.
The NIL statement in the splashscreen's init method registers it as a
parentless popup that technically is owned by the application but can act
independently of it. A normal child window would have a "@self" statement
in that position. The _ws parameters define it's behavior and appearance
and are described (in not very much detail) in the TPW Programmer's Ref.
Note: I have tried dozens of combinations of _ws parameters and
this was the only one that gave me the desired results. I hope some of you
will fool around with this a little more- if you come up with other settings
that work, please let me know.
Other than this init statement, all you have to do to use the splashscreen
in your program is to add it to your USES clause.

ABOUT SPLASH.PAS

{TPicWindow}
TPicWindow.Init(AParent : PWindowsObject; AStyle : LongInt);
Begin
TWindow.Init(AParent,'');
with Attr do
begin
Style := AStyle;
X := 110; Y := 100; W := 390; H := 255;
end;
hOpenBmp := LoadBitmap(HInstance,id_OpenBmp);
End;

The TpicWindow constructor contains other parmeters that affect
it's appearance. Using the AStyle:LongInt parameter allows you
to access a child window's ws_style field to change it's width, height,
(W,H) and the location at which it will open(X,Y). When you change
the bitmap resource, be sure to change W and H to the dimensions
of the new bitmap. The final statement loads the bitmap itself.


{WM_Timer}
procedure TpicWindow.WMTimer;
Begin
DeleteObject(hOpenBmp);
KillTimer(hWindow, timer_ID);
TWindow.CloseWindow;
End;

TPicWindow initializes a timer in it's Setup Window method:

SetTimer(hWindow, timer_ID, 10000, nil);
The third parameter( 10000 ) represents 10000 milleseconds, roughly 10
seconds. By using this statement, you can execute a function when
Windows returns a WM_Timer message to the window( hWindow) at
the interval (10000) stated in SetTimer. Here, it closes TPicWindow,
deletes the bitmap resource and and kills the timer itself (The timer is
a global resource that will continue to take up memory if not deleted):

Paint
The paint method is an abbreviated version of the one contained in
TWindow that can display bitmaps of up to 16 colors. A 256 color
bitmap would not display properly here because of the lack of a
palette handling method.

Changing the Bitmap-this must be done on the .res file itself with
a resource editor. If you rename the resource, you also have to
change the id_bitmap statement.

Note : The GetWindowClass and GetClassName functions are
included for compatibility with the Windows MDI interface. They
are not needed for non-MDI apps like the sample program.

Enjoy

Scott Hanrahan[70144,3033]

P.S. -to give credit where due, I would like to mention two books that
have been a great help to me in this and other projects: Turbo Pascal
for Windows 3.0 Programming by Tom Swan, and Programming
Windows by Charles Petzold



 December 23, 2017  Add comments

Leave a Reply