/code/ Узнаем координаты положения курсора мыши

Раздел посвящен программированию с использованием Power Basic.
Dark Machine
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 26.05.2004 (Ср) 13:12

/code/ Узнаем координаты положения курсора мыши

Сообщение Dark Machine » 26.12.2006 (Вт) 15:46

Код: Выделить всё
#COMPILE EXE
#INCLUDE "Win32Api.inc"

GLOBAL hDlg AS LONG

CALLBACK FUNCTION CbMain()
  LOCAL Pt AS POINTAPI
  STATIC hTimer AS DWORD
  SELECT CASE CBMSG
    CASE %WM_INITDIALOG
      hTimer = SetTimer (CBHNDL, &hFEED, 25, BYVAL 0)
    CASE %WM_TIMER
       GetCursorPos Pt
       CONTROL SET TEXT CBHNDL, 1001, FORMAT$(Pt.x,"000") + ", " + FORMAT$(Pt.y,"000")
    CASE %WM_DESTROY
      KillTimer CBHNDL, hTimer
  END SELECT
END FUNCTION

FUNCTION PBMAIN () AS LONG
  DIALOG NEW 0, "Cursor test:", , , 100, 50, %WS_SYSMENU TO hDlg
  CONTROL ADD LABEL, hDlg, 1001,"Test",15,10,70,15,,%WS_EX_CLIENTEDGE
  DIALOG SHOW MODAL hDlg , CALL CbMain
END FUNCTION     


[/code]

volo
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 10.12.2004 (Пт) 11:18
Откуда: Soviet Union

Сообщение volo » 27.12.2006 (Ср) 11:54

Добавлю пример определения координат в окне:

Код: Выделить всё


#COMPILE EXE
#INCLUDE "Win32Api.inc"

GLOBAL hDlg AS LONG

CALLBACK FUNCTION CbMain()
  SELECT CASE CBMSG

    CASE %WM_MOUSEMOVE
        LOCAL xpos AS LONG, ypos AS LONG
        xPos = LOWRD(CBLPARAM)';  // horizontal position of cursor
        yPos = HIWRD(CBLPARAM)
        CONTROL SET TEXT CBHNDL, 1001, FORMAT$(xpos,"000") + ", " + FORMAT$(ypos,"000")
  END SELECT
END FUNCTION

FUNCTION PBMAIN () AS LONG
  DIALOG NEW 0, "Cursor test:", , , 200, 250, %WS_SYSMENU TO hDlg
  CONTROL ADD LABEL, hDlg, 1001,"Test",15,10,70,15,,%WS_EX_CLIENTEDGE
  DIALOG SHOW MODAL hDlg , CALL CbMain
END FUNCTION


PBDN
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 21.10.2006 (Сб) 22:10

Сообщение PBDN » 29.12.2006 (Пт) 13:02

Ну и еще один примерчик

Код: Выделить всё
#COMPILE EXE
#DIM ALL
'-------------------------------------------------------------------------------------------------------------------
#INCLUDE "WIN32API.INC"
'
%USEMACROS          = 1   ' Eliminate unnecessary includes
$AppName            = "MousePos"
'-------------------------
%StTxt_X            = 1001
%StTxt_Y            = 1002
%TxtBox_X           = 1003
%TxtBox_Y           = 1004
'-------------------------
'
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
GLOBAL Flag_Work AS LONG      ' -- Flag to stop thread
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'
'##############################################################################
FUNCTION Track (BYVAL hDlg AS DWORD) AS LONG
  DIM   Flag_Work AS GLOBAL LONG
  DIM   XY        AS STATIC POINTAPI
  LOCAL x,y AS LONG
  '
  Flag_Work = 1
  '
  WHILE Flag_Work
       IF GetCursorPos(XY) = %FALSE THEN
            MSGBOX "Can't catch mouse :)", _
                   %MB_SYSTEMMODAL OR %MB_ICONERROR, _
                   "WinAPI->GetCursorPos Error"
            Flag_Work = 0 : PostMessage (hDlg, %WM_SYSCOMMAND, %SC_CLOSE, 0)
            EXIT FUNCTION
       END IF
       IF XY.x<>x THEN x=XY.x : CONTROL SET TEXT hDlg, %TxtBox_X, STR$(x)
       IF XY.y<>y THEN y=XY.y : CONTROL SET TEXT hDlg, %TxtBox_Y, STR$(y)
       SLEEP 1            ' release time for other tasks
  WEND '*********************************************************************
  '
END FUNCTION
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
CALLBACK FUNCTION cbDlg() AS LONG
DIM    Flag_Work AS GLOBAL LONG
STATIC hThread   AS DWORD
LOCAL  lResult   AS LONG
    '
    SELECT CASE CBMSG
        CASE %WM_INITDIALOG
            THREAD CREATE Track(CBHNDL) TO hThread
            '
        CASE %WM_SYSCOMMAND
            IF (CBWPARAM AND &HFFF0) = %SC_CLOSE THEN
               Flag_Work=0
               WaitForSingleObject(hThread,%INFINITE)
               THREAD CLOSE hThread TO lResult
               FUNCTION=0
            END IF
    END SELECT
    '
END FUNCTION
'
FUNCTION PBMAIN()
    LOCAL hDLG AS DWORD
    '-- Creating dialog --------------------------------------------------------------
    DIALOG NEW  %HWND_DESKTOP, $AppName, 100,100, 75, 11, _
      %WS_POPUP OR %WS_CAPTION OR %WS_SYSMENU OR %DS_SYSMODAL OR _
      %WS_CLIPSIBLINGS OR %WS_VISIBLE,_
      %WS_EX_TOPMOST OR %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR _
      %WS_EX_LTRREADING , _
    TO hDLG
    '
    CONTROL ADD LABEL,   hDLG, %StTxt_X, "X:",  2,  1,  8,  7
    CONTROL ADD TEXTBOX, hDLG, %TxtBox_X,  "", 10,  0, 24, 10
    '
    CONTROL ADD LABEL,   hDLG, %StTxt_Y, "Y:", 42,  1,  8,  7
    CONTROL ADD TEXTBOX, hDLG, %TxtBox_Y,  "", 49,  0, 24, 10
    '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    DIALOG SHOW MODAL hDLG, CALL cbDlg()
END FUNCTION
                             


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

    TopList