[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]
{
I 've seen a lot of question here arround, how to
display a bitmap befor starting a program in Windows.
Well, this program shows a bitmap without opening a window.
I 'll send you this program for borland pascal.
(Those who use TPW will have to change the USES declaration)
**************************************************************
* Bitmap befor starting the program without opening a window *
**************************************************************
}
PROGRAM Sample;
USES Wintypes, Winprocs, WinCrt, Objects, OWindows, ODialogs;
{$R BITMAP.RES }
TYPE
PClipWin = ^TClipWin;
TClipWin = OBJECT (TWindow)
Constructor Init (AParent : PWindowsObject; ATitle : PChar;
AMenu : HMenu);
Procedure GetWindowClass (VAR AWndClass : TWndClass); VIRTUAL;
Function GetClassName : PChar; VIRTUAL;
Procedure SetupWindow; VIRTUAL;
END;
TClipApp = OBJECT (TApplication)
Procedure InitMainWindow; VIRTUAL;
END;
{ *** TClipWin *** }
Constructor TClipWin.Init (AParent : PWindowsObject; ATitle : PChar;
AMenu : HMenu);
{ ** The main window in this example is a fixed window
which cannot be resized or moved ** }
BEGIN
Inherited Init (AParent, ATitle);
{ ** The sample main window will be open over the whole screen ** }
Attr.X := -1;
Attr.Y := -1;
Attr.W := GetSystemMetrics (sm_CxScreen) + 3;
Attr.H := GetSystemMetrics (sm_CyScreen) + 3;
Attr.Style := WS_SYSMENU OR WS_MINIMIZEBOX OR WS_MAXIMIZE;
{ ** The menu must be defined in the resource ** }
Attr.Menu := AMenu;
END;
Procedure TClipWin.GetWindowClass (VAR AWndClass : TWndClass);
BEGIN
Inherited GetWindowClass (AWndClass);
{ ** Also the icon of the program must be defined in the resource ** }
AWndClass.HIcon := LoadIcon (HInstance, 'MAINICON');
{ ** This gray background is a standard which is not heavy colored ** }
AWndClass.HBrBackGround := CreateSolidBrush (RGB (128, 128, 128));
END;
Function TClipWin.GetClassName : PChar;
BEGIN
GetClassName := 'Bitmap Sample';
END;
Procedure TClipWin.SetupWindow;
BEGIN
Inherited SetupWindow;
{ ** DeleteMenu kills the menu point 'MOVE / RESIZE'. The windows can
now not be resized or moved. It is fixed ** }
DeleteMenu (GetSystemMenu(HWindow, FALSE), 1, MF_BYPOSITION);
END;
{ *** TClipApp *** }
Procedure TClipApp.InitMainWindow;
BEGIN
CmdShow := SW_SHOWMAXIMIZED;
MainWindow := New(PClipWin, Init(NIL, 'Bitmap Sample Window',
LoadMenu (HInstance, 'MAINMENU')));
END;
VAR
ClipApp : TClipApp;
DC, MemDC : hDC;
Bitmap, OldBitmap : HBitmap;
BM : TBitmap;
Rect : TRect;
H, W : Integer;
Ticks : LongInt;
BEGIN
{ ** !! DISPLAY THe BITMAP BEFOR APPLICATION.INIT !! ** }
{ ** Create the display context ** }
DC := CreateDC('DISPLAY',nil,nil,nil);
{ ** Load the bitmap stored in the resource ** }
Bitmap := LoadBitmap(HInstance, MakeIntResource('STARTBITMAP'));
{ ** Memory context compatibel to the display context ** }
MemDC := CreateCompatibleDC(DC);
{ ** Save the actual context ** }
OldBitmap := SelectObject(MemDC, Bitmap);
{ ** Get the bitmap ** }
GetObject (Bitmap, SizeOf(BM),@BM);
{ ** Get height and width of the screen ** }
H := GetSystemMetrics (sm_CyScreen);
W := GetSystemMetrics (sm_CxScreen);
{ ** Copy the resource bitmap into the memory context and move it
exactly in the middle of the screen !! ** }
BitBlt (DC,W DIV 2-(BM.bmWidth DIV 2), H DIV 2-(BM.bmHeight DIV 2),
BM.bmWidth, BM.bmHeight, MemDC, 0, 0, SRCCopy);
{ ** Holds the system for 5 seconds, to study the bitmap.
5000 = milliseconds ** }
Ticks := GetTickCount;
Repeat
Until ABS (Ticks - GetTickCount) > 5000;
{ ** Remove all bitmaps and contexts ** }
DeleteObject (SelectObject (MemDC, OldBitmap));
DeleteDC (MemDC);
DeleteDC (DC);
{ ** Now start the main window ** }
ClipApp.Init('Bitmap Sample Window');
ClipApp.Run;
ClipApp.Done;
END.
----------------------- CUT IT -- CUT IT -----------------------------
This example will show the resource bitmap befor the main window,
without opening an other window. I made this program as easy as
possible. The palette is not included, but a 256 colored palette will
be added (selectpalette - realizepalette) without difficulties.
Ofcourse a normal bitmap (HDD) could also be used instead of the
resource bitmap
[Back to WIN-OS2 SWAG index] [Back to Main SWAG index] [Original]