Forum » Programiranje » VB in miška koordinate
VB in miška koordinate

marco ::
Pozdrav!
Spodaj je program za VB, ki izpisuje koordinate x,y ,ko premikaš miško.
Koordinate izpisuje do tam kolikšno imam nastavljeno resolucijo zaslona, x=1024 y=767. To je vse OK.
Vprašanje:
Kako pa napisati kodo programa, da nebi bilo omejitve na resolucijo zaslona, da bi prikazoval koordinate še naprej naprimer x= max 10000,y= max 3000 ?
LP,marko
*******************************************************
Option Explicit
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Dim Koordinata As POINTAPI
Private Sub Form_Load()
Timer1.Interval = 1
End Sub
Private Sub Timer1_Timer()
GetCursorPos Koordinata
Label1.Caption = "x: " & Koordinata.X
Label2.Caption = "y: " & Koordinata.Y
End Sub
Spodaj je program za VB, ki izpisuje koordinate x,y ,ko premikaš miško.
Koordinate izpisuje do tam kolikšno imam nastavljeno resolucijo zaslona, x=1024 y=767. To je vse OK.
Vprašanje:
Kako pa napisati kodo programa, da nebi bilo omejitve na resolucijo zaslona, da bi prikazoval koordinate še naprej naprimer x= max 10000,y= max 3000 ?
LP,marko
*******************************************************
Option Explicit
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Dim Koordinata As POINTAPI
Private Sub Form_Load()
Timer1.Interval = 1
End Sub
Private Sub Timer1_Timer()
GetCursorPos Koordinata
Label1.Caption = "x: " & Koordinata.X
Label2.Caption = "y: " & Koordinata.Y
End Sub

darkolord ::
Ko pride do roba, miško premakneš na sredo ekrana (al pa na drugi rob) in potem prištevaš/odštevaš koordinate

marco ::
Sem napravil tako, da premaknem kazalec.
Pride pa do problema, če miško premikam prehitro se kazalec ne vrne na določeno pozicijo, če pa premikam z določeno hitrostjo pa se IF stavek izvede.
Zgleda, da mu IF stavek in klic API funkcije vzame preveč časa.
Kaj storiti?
*******************************************************
'Popravljena koda
Option Explicit
Private Type POINTAPI
X As Long
Y As Long
End Type
'Deklaracija za premik kazalca po zaslonu
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
'Generalna Deklaracija za čitanje pozicije kurzorja_miške
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Dim Koordinata As POINTAPI
Private Sub Form_Load()
Timer1.Interval = 1
End Sub
Private Sub Timer1_Timer()
Dim X As Long, Y As Long, Lega As Long
GetCursorPos Koordinata
Label1.Caption = "x: " & Koordinata.X
Label2.Caption = "y: " & Koordinata.Y
'Tukaj premaknem kazalec
If Koordinata.X = 1000 Then
Lega = SetCursorPos(10, 10)
End If
End Sub
'***********************************************
LP,marko
Pride pa do problema, če miško premikam prehitro se kazalec ne vrne na določeno pozicijo, če pa premikam z določeno hitrostjo pa se IF stavek izvede.
Zgleda, da mu IF stavek in klic API funkcije vzame preveč časa.
Kaj storiti?
*******************************************************
'Popravljena koda
Option Explicit
Private Type POINTAPI
X As Long
Y As Long
End Type
'Deklaracija za premik kazalca po zaslonu
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
'Generalna Deklaracija za čitanje pozicije kurzorja_miške
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Dim Koordinata As POINTAPI
Private Sub Form_Load()
Timer1.Interval = 1
End Sub
Private Sub Timer1_Timer()
Dim X As Long, Y As Long, Lega As Long
GetCursorPos Koordinata
Label1.Caption = "x: " & Koordinata.X
Label2.Caption = "y: " & Koordinata.Y
'Tukaj premaknem kazalec
If Koordinata.X = 1000 Then
Lega = SetCursorPos(10, 10)
End If
End Sub
'***********************************************
LP,marko

darkolord ::
Namesto
Koordinata.X = 1000
daj vsaj
Koordinata.X > 1000
ali pa še bolje
If Koordinata.X > (screen.Width / screen.TwipsPerPixelX) - 50 Then
Koordinata.X = 1000
daj vsaj
Koordinata.X > 1000
ali pa še bolje
If Koordinata.X > (screen.Width / screen.TwipsPerPixelX) - 50 Then

marco ::
-
darkolord hvala program deluje z koordinata.x > 1000.
Logično, ko enkrat veš je čisto enostavno.
LP,marko
darkolord hvala program deluje z koordinata.x > 1000.
Logično, ko enkrat veš je čisto enostavno.
LP,marko
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [VB6] Program Odštevalnik - verjetno preprosta rešitev ampak jest je ne najdem (strani: 1 2 )Oddelek: Programiranje | 5408 (4882) | Nerdor |
» | VB in kk dobit Ip od račnalnikaOddelek: Programiranje | 1248 (1082) | alesrosina |
» | API+VBOddelek: Programiranje | 2156 (1860) | webblod |
» | Odpiranje dat.exe v VBOddelek: Programiranje | 3061 (2854) | webblod |
» | Visual basic Progress barOddelek: Programiranje | 1603 (1536) | Lunik |