Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0179: Den Mausbereich einschränken

 von 

Beschreibung 

Der Mausbereich kann auf ein vorgegebenes Rechteck festgelegt werden. Dies könnte zum Beispiel ein Formular oder eine PictureBox sein. Es besteht dann via Maus keine Möglichkeit mehr auf andere Objekte zuzugreifen, also Vorsicht.

Update von Eckard Ahlers () am 06. Januar 2004:
Rect ist nun mit Long-Variablen deklariert. Außerdem wurden einige überflüssige Zeilen Code entfernt.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

ClientToScreen, ClipCursor, GetClientRect, OffsetRect

Download:

Download des Beispielprojektes [2,11 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Bildfeld-Steuerelement "Picture1"
' Steuerelement: Schaltfläche "Command1" auf Picture1
' Steuerelement: Schaltfläche "Command2" auf Picture1

Option Explicit

Private Type RECT
    left As Long
    top As Long
    right As Long
    bottom As Long
End Type

Private Type POINTAPI
  x As Long
  y As Long
End Type

Private Declare Sub ClipCursor Lib "user32" (ByVal lpRect As Long)

Private Declare Sub GetClientRect Lib "user32" (ByVal hWnd _
        As Long, lpRect As RECT)
        
Private Declare Sub ClientToScreen Lib "user32" (ByVal hWnd _
        As Long, lpPoint As POINTAPI)
        
Private Declare Sub OffsetRect Lib "user32" (lpRect As RECT, _
        ByVal x As Long, ByVal y As Long)

Private Sub Command1_Click()
    Dim RPic As RECT
    Dim ul As POINTAPI

    Call GetClientRect(Picture1.hWnd, RPic)
    Call ClientToScreen(Picture1.hWnd, ul)
    
    Call OffsetRect(RPic, ul.x, ul.y)
    Call ClipCursor(VarPtr(RPic))
End Sub

Private Sub Command2_Click()
    Call ClipCursor(ByVal 0&)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call ClipCursor(ByVal 0&)
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Ahlers am 04.11.2003 um 14:59

Nachtrag:
Das Setzen von ul.x, ul.y bringt nix, dafür ist die API "ClientToScreen" zuständig
korrekt also:


Private Type RECT
left As Long
top As Long
right As Long
bottom As Long
End Type


Private Sub Command1_Click()
Dim RPic As RECT
Dim ul As POINTAPI

Call GetClientRect(Picture1.hWnd, RPic) 'schreibt Höhe und Breite von Picture1 nach RPic.bottom und RPic.Right
' ul.x = RPic.left 'Das Setzen von ul.x, ul.y bringt nix, dafür ist die API "ClientToScreen" zuständig
' ul.y = RPic.top

Call ClientToScreen(Picture1.hWnd, ul) 'schreibt Left und Top von Picture1 (die Offset-Größen) nach ul.x, ul.y
Call OffsetRect(RPic, ul.x, ul.y) 'verschiebt RPic um ul (d.h. an die Position von Picture1)
Call ClipCursor(RPic)
End Sub

Kommentar von Ahlers am 04.11.2003 um 05:18

Böser Fehler im Mouse-Clip-Tipp:
Der Typ Rect ist falsch deklariert, statt
Private Type RECT
left As Integer
top As Integer
right As Integer
bottom As Integer
End Type
muß es heißen:Private Type RECT
left As long
top As long
right As long
bottom As long
End Type
(So stehts auch im API-Viewer)

Kommentar von DJ am 03.12.2002 um 09:37

Hi,
ich habe den Tipp 0179 bei meinem Programm mit eingebaut und er hat auch wunderbar funktioniert solange ich das Programm unter VB getestet habe. Sobald ich jedoch die EXE kompiliert habe, kam es beim auführen zu Fehlern. Nach längerer Suche wurde der Fehler auf die in dem Tipp aufgeführten SUB's zurückgeführt. Erst als ich die SUB's in Funktionen umgeschrieben habe ist das Programm fehlerfrei gelaufen.

Gruß

DJ

Kommentar von Alejandra am 06.10.2001 um 14:14

Ich habe den Fehler 438, wenn ich das versuche:
Call GetClientRect(Picture.hWnd, RPic)
Kann mir jemand helfen??? :)
Alejandra Rudek