Announcement

Collapse
No announcement yet.

Graphic Get Bitmap

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Graphic Get Bitmap

    Does anyone know why I would get a compile error 426 "Variable Expected" with this PBWin9 code:

    Code:
    Local hImage as DWord, iResult&
    keybd_event(%VK_SnapShot, 1, 0, 0)  'active dialog to clipboard 
    Clipboard Get Bitmap To hImage, iResult&
    The keybd_event appears to put a bitmap on the clipboard - I can paste it into other programs.

    Help says 426 might be from using a reserved variable name. I used several names, but still get the error.

    I dropped the "TO" (which Help says is optional) and the compile error goes away, but then iResult& gets a 0 during execution, indicating the operation was unsuccessful.
    Last edited by Gary Beene; 21 Mar 2009, 03:12 PM.

  • #2
    Uh, hmm. "Quote" keybd_event(%VK_SnapShot, 1, 0, 0)
    Well, it works, but not quite THAT fast, I got it to work by inserting a Sleep 100 right after sending the virtual keystroke.
    Am not seeing how to get it to work on the active window however.
    Code:
    #PBFORMS CREATED V1.51
    '------------------------------------------------------------------------------
    ' The first line in this file is a PB/Forms metastatement.
    ' yadayada
    '------------------------------------------------------------------------------
    
    #COMPILE EXE
    #DIM ALL
    
    '------------------------------------------------------------------------------
    '   ** Includes **
    '------------------------------------------------------------------------------
    #PBFORMS BEGIN INCLUDES
    %USEMACROS = 1
    #IF NOT %DEF(%WINAPI)
        #INCLUDE "WIN32API.INC"
    #ENDIF
    #IF NOT %DEF(%COMMCTRL_INC)
        #INCLUDE "COMMCTRL.INC"
    #ENDIF
    #INCLUDE "PBForms.INC"
    #PBFORMS END INCLUDES
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Constants **
    '------------------------------------------------------------------------------
    #PBFORMS BEGIN CONSTANTS
    %IDC_GRAPHIC1     = 1001
    %IDD_DIALOG1      =  101
    %IDM_EDIT_PASTE   = 1003
    %IDM_FILE_EXIT    = 1002
    %IDR_ACCELERATOR1 =  103
    %IDR_MENU1        =  102
    #PBFORMS END CONSTANTS
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Declarations **
    '------------------------------------------------------------------------------
    DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
    DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
    DECLARE FUNCTION AttachMENU1(BYVAL hDlg AS DWORD) AS DWORD
    DECLARE FUNCTION AttachACCELERATOR1(BYVAL hDlg AS DWORD) AS DWORD
    DECLARE FUNCTION ASSIGNACCEL(tAccel AS ACCELAPI, BYVAL wKey AS WORD, BYVAL _
        wCmd AS WORD, BYVAL byFVirt AS BYTE) AS LONG
    #PBFORMS DECLARATIONS
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Main Application Entry Point **
    '------------------------------------------------------------------------------
    FUNCTION PBMAIN()
        PBFormsInitComCtls (%ICC_WIN95_CLASSES OR %ICC_DATE_CLASSES OR _
            %ICC_INTERNET_CLASSES)
    
        ShowDIALOG1 %HWND_DESKTOP
    END FUNCTION
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** CallBacks **
    '------------------------------------------------------------------------------
    CALLBACK FUNCTION ShowDIALOG1Proc()
    LOCAL hImage    AS DWORD
    LOCAL Result    AS LONG
    
        SELECT CASE AS LONG CBMSG
            CASE %WM_INITDIALOG
                ' Initialization handler
    
            CASE %WM_NCACTIVATE
                STATIC hWndSaveFocus AS DWORD
                IF ISFALSE CBWPARAM THEN
                    ' Save control focus
                    hWndSaveFocus = GetFocus()
                ELSEIF hWndSaveFocus THEN
                    ' Restore control focus
                    SetFocus(hWndSaveFocus)
                    hWndSaveFocus = 0
                END IF
    
            CASE %WM_COMMAND
                ' Process control notifications
                SELECT CASE AS LONG CB.CTL
                    CASE %IDM_EDIT_PASTE
                        keybd_event(%VK_SnapShot, 0, 0, 0)
                        SLEEP 100
                        CLIPBOARD GET BITMAP hImage, Result
                        #DEBUG PRINT "Result="& FORMAT$(Result) &" hImage="& HEX$(hImage, 8)
                        GRAPHIC ATTACH CB.HNDL, %IDC_GRAPHIC1
                        GRAPHIC COPY hImage, 0
                        GRAPHIC ATTACH hImage, 0
                        GRAPHIC BITMAP END
                    CASE %IDM_FILE_EXIT
                        DIALOG END CB.HNDL
    
                END SELECT
        END SELECT
    END FUNCTION
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    '   ** Dialogs **
    '------------------------------------------------------------------------------
    FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
        LOCAL lRslt AS LONG
    
    #PBFORMS BEGIN DIALOG %IDD_DIALOG1->%IDR_MENU1->%IDR_ACCELERATOR1
        LOCAL hDlg  AS DWORD
    
        DIALOG NEW hParent, "Dialog1", 243, 164, 201, 133, %WS_POPUP OR _
            %WS_BORDER OR %WS_THICKFRAME OR %WS_CAPTION OR %WS_SYSMENU OR _
            %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX OR %WS_CLIPSIBLINGS OR _
            %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK OR %DS_NOFAILCREATE OR _
            %DS_SETFONT, %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR _
            %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
        CONTROL ADD GRAPHIC, hDlg, %IDC_GRAPHIC1, "", 0, 0, 200, 120, %WS_CHILD _
            OR %WS_VISIBLE, %WS_EX_STATICEDGE
    
        AttachMENU1 hDlg
    
        AttachACCELERATOR1 hDlg
    #PBFORMS END DIALOG
    
        DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt
    
    #PBFORMS BEGIN CLEANUP %IDD_DIALOG1
    #PBFORMS END CLEANUP
    
        FUNCTION = lRslt
    END FUNCTION
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    FUNCTION AttachMENU1(BYVAL hDlg AS DWORD) AS DWORD
    #PBFORMS BEGIN MENU %IDR_MENU1->%IDD_DIALOG1
        LOCAL hMenu   AS DWORD
        LOCAL hPopUp1 AS DWORD
    
        MENU NEW BAR TO hMenu
        MENU NEW POPUP TO hPopUp1
        MENU ADD POPUP, hMenu, "File", hPopUp1, %MF_ENABLED
            MENU ADD STRING, hPopUp1, "Exit" + $TAB + "Alt+F4", %IDM_FILE_EXIT, _
                %MF_ENABLED
        MENU NEW POPUP TO hPopUp1
        MENU ADD POPUP, hMenu, "Edit", hPopUp1, %MF_ENABLED
            MENU ADD STRING, hPopUp1, "Paste" + $TAB + "Ctrl+V", %IDM_EDIT_PASTE, _
                %MF_ENABLED
    
        MENU ATTACH hMenu, hDlg
    #PBFORMS END MENU
        FUNCTION = hMenu
    END FUNCTION
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    FUNCTION AttachACCELERATOR1(BYVAL hDlg AS DWORD) AS DWORD
    #PBFORMS BEGIN ACCEL %IDR_ACCELERATOR1->%IDD_DIALOG1
        LOCAL hAccel   AS DWORD
        LOCAL tAccel() AS ACCELAPI
        DIM   tAccel(1 TO 2) AS ACCELAPI
    
        ASSIGNACCEL tAccel(1), %VK_F4, %IDM_FILE_EXIT, %FVIRTKEY OR %FALT OR _
            %FNOINVERT
        ASSIGNACCEL tAccel(2), ASC("V"), %IDM_EDIT_PASTE, %FVIRTKEY OR %FCONTROL _
            OR %FNOINVERT
    
        ACCEL ATTACH hDlg, tAccel() TO hAccel
    #PBFORMS END ACCEL
        FUNCTION = hAccel
    END FUNCTION
    '------------------------------------------------------------------------------
    
    '------------------------------------------------------------------------------
    #PBFORMS BEGIN ASSIGNACCEL
    FUNCTION ASSIGNACCEL(tAccel AS ACCELAPI, BYVAL wKey AS WORD, BYVAL wCmd AS _
        WORD, BYVAL byFVirt AS BYTE) AS LONG
        tAccel.fVirt = byFVirt
        tAccel.key   = wKey
        tAccel.cmd   = wCmd
    END FUNCTION
    #PBFORMS END ASSIGNACCEL
    '------------------------------------------------------------------------------
    Furcadia, an interesting online MMORPG in which you can create and program your own content.

    Comment


    • #3
      >I dropped the "TO" (which Help says is optional) and the compile error goes away

      So "optional" means you get your choice of not using it - or not using it?

      Cool. Keeps number of decisions to a minimum.

      MCM
      Michael Mattias
      Tal Systems (retired)
      Port Washington WI USA
      [email protected]
      http://www.talsystems.com

      Comment


      • #4
        Michael,

        Yep, Help says optional, except that using it is when the compile error happens.

        From Help, syntax:
        Code:
        CLIPBOARD GET BITMAP  [TO] ClipVar [, ClipResult]
        Colin,

        I use
        Code:
        keybd_event(%VK_SnapShot, 0, 0, 0) 'screen on clipboard
        
        keybd_event(%VK_SnapShot, 1, 0, 0)  'active dialog on clipboard
        for the two options (dialog or screen capture)
        Last edited by Gary Beene; 21 Mar 2009, 05:30 PM.

        Comment


        • #5
          Colin,

          I used the 1,0,0 in your code - worked fine to capture dialog.

          But when I put the TO back into your code, I get the same compile error message as I got with my code.

          Neither puts the bitmap into the graphic control.

          I also simply tried using another app to copy an image to the clipboard, thinking keyb... might somehow be incompatible? But same answer - Clipboard Get Bitmap gives a 0 (failure) return code.
          Last edited by Gary Beene; 21 Mar 2009, 05:45 PM.

          Comment


          • #6
            Michael,

            Your droll comment made me realize that I didn't tell you that with or without the TO, the Clipboard Get Bitmap fails - one in compilation, the other in execution.

            In the following code, the goal was to save an image of the dialog, but the file never gets saved. That's when I used the TO so I could get a result code, which is where I get the failure 0 result.

            Code:
            Sub SaveDialogImage
                  Local hImage As Dword, iResult&
                  temp$ = EXE.Path$ + "gbfind.bmp"
                  'put dialog on clipboard
                  Sleep 500
                  keybd_event(%VK_SnapShot, 1, 0, 0)  'active dialog to clipboard
                  'save clipboard to file
                  Clipboard Get Bitmap hImage   'get handle to bitmap
                  Graphic Attach hImage, 0       'attach to handle
                  Graphic Save temp$
            End Sub
            One might guess I'm missing something trivial, but my Saturday mind hasn't found anything obvious so far.
            Last edited by Gary Beene; 21 Mar 2009, 05:46 PM.

            Comment


            • #7
              Colin,

              I played with your code more.

              The keyb... function works fine - it can capture either dialog or full screen.

              But using Clipboard Get Bitmap works only when the full screen is captured. I can get the full screen to display in the graphic control in your code, but not the captured dialog image.

              That's that same results you tried to tell me - I misunderstood your message on 1st reading.

              I guess I'll have to think on it more. It's not obvious what's wrong.

              Comment


              • #8
                Your droll comment made me realize that I didn't tell you that with or without the TO, the Clipboard Get Bitmap fails
                How would you know WITH the 'TO?' That program never compiled!

                FWIW, I don't understand your call parameters to keybd_event, especially param two, either one or zero.... my SDK doc shows...
                Syntax
                Code:
                VOID keybd_event(  
                    BYTE bVk,
                    BYTE bScan,
                    DWORD dwFlags,
                    PTR dwExtraInfo
                );
                Parameters

                bVk
                [in] Specifies a virtual-key code. The code must be a value in the range 1 to 254. For a complete list, see Virtual-Key Codes.
                bScan
                This parameter is not used.
                dwFlags
                [in] Specifies various aspects of function operation. This parameter can be one or more of the following values.
                KEYEVENTF_EXTENDEDKEY
                If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).
                KEYEVENTF_KEYUP
                If specified, the key is being released. If not specified, the key is being depressed.
                dwExtraInfo
                [in] Specifies an additional value associated with the key stroke.
                If I go by that, you could put your grandma in param two and it would not make any difference.

                Also, not the pressed/released status (param three). Maybe you need to specify a RELASE to get the copy to happen. (KEYEVENTF_KEYUP)

                Me, I'd call keybd_event twice, once for press, once for release. I think that's what happens when you use fingers instead of code.
                Michael Mattias
                Tal Systems (retired)
                Port Washington WI USA
                [email protected]
                http://www.talsystems.com

                Comment


                • #9
                  @MM: Nail on the head:
                  Code:
                                      keybd_event(%VK_SnapShot, 1, 0, 0)
                                      DIALOG DOEVENTS
                                      SLEEP 100
                                      keybd_event(%VK_SnapShot, 1, %KEYEVENTF_KEYUP, 0)
                                      DIALOG DOEVENTS
                                      SLEEP 500
                  Furcadia, an interesting online MMORPG in which you can create and program your own content.

                  Comment


                  • #10
                    Colin,

                    Thanks for the updated code.

                    I put the new code in the original code you posted. It seems to work only in debug mode, and not in normal execution mode. In normal mode, the dialog image does not appear in the graphic control.

                    Is that what you saw?
                    Last edited by Gary Beene; 21 Mar 2009, 08:50 PM.

                    Comment


                    • #11
                      Michael,

                      The questions with my keyb_event code aside, the image of interest was on the clipboard - as demonstrated by the fact that after the PowerBASIC apps completed, the expected image was on the clipboard and could be manually pasted into other programs.

                      It was with the Clipboard Get Bitmap (either with-TO getting a compile error or without-TO returning a 0 result code) that things stalled.

                      Was your focus on the keyb_event function indicating a thought that if the keyb_event code was corrected, that the Clipboard Get Bitmap would then work? Or were you just starting at the top and working your way down?

                      I do appreciate the response!
                      Last edited by Gary Beene; 21 Mar 2009, 09:28 PM.

                      Comment


                      • #12
                        Gary, mod:
                        Code:
                        keybd_event(%VK_SnapShot, 1, 0, 0)
                        DIALOG DOEVENTS
                        SLEEP 100
                        keybd_event(%VK_SnapShot, 1, %KEYEVENTF_KEYUP, 0)
                        DIALOG DOEVENTS
                        SLEEP 2000
                        CLIPBOARD GET BITMAP hImage, Result
                        MSGBOX "Result="& FORMAT$(Result) &" hImage="& HEX$(hImage, 8)
                        And the MsgBox comes up with -1, but the hImage comes up zero.
                        I have the ClipBook Viewer up as well, so I'm seeing the window appear in the clipboard, so it IS getting the snapshot.
                        Furcadia, an interesting online MMORPG in which you can create and program your own content.

                        Comment


                        • #13
                          This seems to work ok. (Sans TO - which looks like bug !)
                          Code:
                          STATIC hImage    AS DWORD
                          ...
                          CASE %IDM_EDIT_PASTE
                                  KeyBd_Event %VK_SnapShot, 1, 0, 0       ' Capture active window
                                  Do Until Result
                                      Dialog DoEvents 
                                      CLIPBOARD GET BITMAP hImage, Result
                                  Loop
                                  #DEBUG PRINT "Result="& FORMAT$(Result) &" hImage="& HEX$(hImage, 8)
                                  GRAPHIC ATTACH CB.HNDL, %IDC_GRAPHIC1
                                  GRAPHIC COPY hImage, 0
                                  GRAPHIC ATTACH hImage, 0
                                  GRAPHIC BITMAP END
                          Other options for VK_SnapShot
                          Code:
                           '          KeyBd_Event %VK_SnapShot, 1, 0, 0                 ' active window | - Version > 4 Win2k^
                           '          KeyBd_Event %VK_SnapShot, 0, 0, 0                 ' whole screen  |
                                    keybd_event %VK_MENU, 0, 0, 0                     '+ active window  | - Version =< 4
                                    keybd_event %VK_SNAPSHOT, 0, 0, 0                 '  whole screen   |
                                    keybd_event %VK_SNAPSHOT, 0, %KEYEVENTF_KEYUP, 0  '  whole screen   |
                                    keybd_event %VK_MENU, 0, %KEYEVENTF_KEYUP, 0      '+ active window  |
                          Last edited by Dave Biggs; 22 Mar 2009, 04:09 AM. Reason: Add info on VK_SnapShot
                          Rgds, Dave

                          Comment


                          • #14
                            I'm missing something here. Isn't this code supposed to create an image of the dialog and put it in the Clipboard? I tried all 3 versions above (2 Colin, 1 Dave) and none do that.(clicking Edit/Paste) What they do is pop up my screen capture program (CaptureWizPro.exe).

                            What am I missing? Or is that the point?

                            ==================================
                            “If liberty means anything at all
                            it means the right to tell people
                            what they do not want to hear.”
                            George Orwell.
                            ==================================
                            It's a pretty day. I hope you enjoy it.

                            Gösta

                            JWAM: (Quit Smoking): http://www.SwedesDock.com/smoking
                            LDN - A Miracle Drug: http://www.SwedesDock.com/LDN/

                            Comment


                            • #15
                              Gösta,

                              Sounds like CaptureWizPro.exe has installed a hook on your system. Does it pop up when you press the Print Scrn button on your keyboard?

                              Gary's program simulates a Print Scrn button press to load up the clipboard with a bitmap image then shows that image on a graphic control.
                              Rgds, Dave

                              Comment


                              • #16
                                Originally posted by Dave Biggs View Post
                                Gösta,

                                Sounds like CaptureWizPro.exe has installed a hook on your system. Does it pop up when you press the Print Scrn button on your keyboard?
                                That's what it does alright. Good observation Dave.

                                ================================================
                                "Not everything that can be counted counts,
                                and not everything that counts can be counted."
                                Albert Einstein (1879-1955)
                                ================================================
                                It's a pretty day. I hope you enjoy it.

                                Gösta

                                JWAM: (Quit Smoking): http://www.SwedesDock.com/smoking
                                LDN - A Miracle Drug: http://www.SwedesDock.com/LDN/

                                Comment


                                • #17
                                  I expanded the core of the test program to include getting text off the clipboard, and putting a bitmap on the clipboard.

                                  Needed a means to load a bitmap into the program, so added a DISPLAY function to call up a load bitmap.
                                  Code:
                                  CASE %IDM_FILE_OPEN
                                      Filter = "Bitmap Images"& CHR$(0) &"*.bmp"& CHR$(0) & CHR$(0)
                                      DISPLAY OPENFILE CB.HNDL, , , "Open Bitmap", EXE.PATH$, Filter, _
                                          "", "", %OFN_FILEMUSTEXIST TO FileName, Result
                                      IF Result > 0 THEN
                                          GRAPHIC BITMAP LOAD FileName, 0, 0, 0 TO hImage
                                          GRAPHIC ATTACH CB.HNDL, %IDC_GRAPHIC1
                                          GRAPHIC COPY hImage, 0
                                          GRAPHIC ATTACH hImage, 0
                                          GRAPHIC BITMAP END
                                      END IF
                                  A means to copy this bitmap to the clipboard:
                                  Code:
                                  CASE %IDM_EDIT_COPY
                                      CLIPBOARD RESET
                                      CONTROL HANDLE CB.HNDL, %IDC_GRAPHIC1 TO hImage
                                      CLIPBOARD SET BITMAP hImage, Result
                                      MSGBOX "Result="& FORMAT$(Result) &" hImage="& HEX$(hImage, 8)
                                  Debug Run: Result=0 hImage=001205D8
                                  Compiled: Result=0 hImage=001B0430

                                  As can be seen, according to the result, both modes fail to copy to the clipboard, and with the ClipBook Viewer open, I fail to see a bitmap appear there.

                                  Text test was a simple "get it from the clipboard" action:
                                  Code:
                                  CASE %IDM_EDIT_GETTEXT
                                      CLIPBOARD GET TEXT cText, Result
                                      MSGBOX "Result="& FORMAT$(Result) &" cText="& cText
                                  And the message box does display the text it gets from the clipboard, as verified when ClipBook is displaying text in the clipboard.

                                  For the extra menu and accelerator elements, get the source from the attached Zip file.

                                  But the observation is that currently, the CLIPBOARD function seems to be a bit broken.
                                  Attached Files
                                  Furcadia, an interesting online MMORPG in which you can create and program your own content.

                                  Comment


                                  • #18
                                    Code:
                                    CASE %IDM_EDIT_COPY
                                        CLIPBOARD RESET
                                        CONTROL HANDLE CB.HNDL, %IDC_GRAPHIC1 TO hImage
                                        CLIPBOARD SET BITMAP hImage, Result
                                        MSGBOX "Result="& FORMAT$(Result) &" hImage="& HEX$(hImage, 8)
                                    As can be seen, according to the result, both modes fail to copy to the clipboard, and with the ClipBook Viewer open, I fail to see a bitmap appear there.
                                    Darn, this syntax is confusing as hell, where "cliphndl" might be a handle to a bitmap, a handle to a control or a handle to a window....
                                    CLIPBOARD SET BITMAP ClipHndl [, ClipResult]
                                    ..
                                    A GRAPHIC BITMAP, specified by ClipHndl, is stored on the CLIPBOARD. The GRAPHIC BITMAP may be a GRAPHIC CONTROL, GRAPHIC WINDOW, or GRAPHIC BITMAP. When passing a GRAPHIC CONTROL to the Clipboard, use CONTROL GET HANDLE to obtain the handle to the GRAPHIC CONTROL
                                    Maybe hImage (in this case a control handle) must be ATTACHed for CLIPBOARD SET BITMAP to work?

                                    MCM
                                    Michael Mattias
                                    Tal Systems (retired)
                                    Port Washington WI USA
                                    [email protected]
                                    http://www.talsystems.com

                                    Comment


                                    • #19
                                      @MM, tried that, didn't make a difference.

                                      BUT!

                                      This did:
                                      Code:
                                      CASE %IDM_EDIT_COPY
                                          CLIPBOARD RESET
                                          ' CONTROL HANDLE CB.HNDL, %IDC_GRAPHIC1 TO hImage
                                          GRAPHIC BITMAP NEW 256, 256 TO hImage
                                          GRAPHIC ATTACH hImage, 0
                                          GRAPHIC COPY CB.HNDL, %IDC_GRAPHIC1
                                          CLIPBOARD SET BITMAP hImage, Result
                                          GRAPHIC BITMAP END
                                          MSGBOX "Result="& FORMAT$(Result) &" hImage="& HEX$(hImage, 8)
                                      With issues, namely the ClipBook is NOT displaying the results, but the results can be pasted into Word. What ClipBook is reporting is:

                                      "ClipBook Viewer cannot display the information in its current format or there is not enough memory to display it. Quit one or more applications to increase the available memory, and then try again."

                                      Right, 2gig ram with a 100gig swap, ...

                                      Let me think where I got a construct that retrieves raw data from the clipboard and I'll post the alleged headers, ClipBook is at least reporting that the information in the clipboard IS a bitmap.
                                      Furcadia, an interesting online MMORPG in which you can create and program your own content.

                                      Comment


                                      • #20
                                        That was interesting:
                                        Code:
                                        biSize=40
                                        biWidth=96
                                        biHeight=-96
                                        biPlanes=1
                                        biBitCount=32
                                        biCompression=0
                                        biSizeImage=36864
                                        biXPelsPerMeter=0
                                        biYPelsPerMeter=0
                                        biClrUsed=0
                                        biClrImportant=0
                                        It's making a Top Down bitmap on the clipboard.
                                        Furcadia, an interesting online MMORPG in which you can create and program your own content.

                                        Comment

                                        Working...
                                        X