[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]