ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 10.01.2000

Diese Seite wurde zuletzt aktualisiert am 10.01.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Zurück...


Anzeige

(-hg) mailto:hg_intersectwnd@aboutvb.de

Mit Hilfe einiger weniger, schneller API-Funktionen können Sie spielend leicht feststellen, ob sich zwei Objekte, wie Steuerelemente oder Forms u.ä., überschneiden.


Überschneiden sich zwei Objekte?

Als einzige Voraussetzung müssen diese Objekte über ein Fenster-Handle verfügen (Eigenschaft hWnd), damit Sie über die API-Funktion MSDN-Library - APU GetWindowRectGetWindowRect bequem die umschließenden Rechtecke der Objekte ermitteln können. GetWindowRect liefert praktischerweise die absolute, auf den gesamten Bildschirm bezogene Position, so dass Sie auch problemlos auch aus verschiedenen Forms (oder anderen Containern) stammende Objekte prüfen können.

Die mit GetWindowRect ermittelten Rechtecke werden der API-Funktion MSDN-Library - API IntersectRectIntersectRect übergeben, die im ersten Parameter ein Rechteck zurückgibt, das im Falle einer Überschneidung den von beiden Rechtecken überdeckten Bereich zurückgibt. Überschneiden sich die beiden Rechtecke nicht, ist dieses resultierende Rechteck leer. Mit der API-Funktion MSDN-Library - API IsRectEmptyIsRectEmpty prüfen Sie nun, ob es sich um ein leeres Rechteck handelt oder nicht.

Die Deklarationen lauten:

Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Private Declare Function GetWindowRect Lib "user32" _
 (ByVal hwnd As Long, Rect As RECT) As Long
Private Declare Function IntersectRect Lib "user32" _
 (DestRect As RECT, Src1Rect As RECT, Src2Rect As RECT) As Long
Private Declare Function IsRectEmpty Lib "user32" _
 (Rect As RECT) As Long

Der folgenden Funktion IntersectWindows übergeben sie die beiden zu prüfenden Objekte, und erhalten True zurück, wenn sich diese überschneiden:

Public Function IntersectWindows(Obj1 As Object, _
 Obj2 As Object) As Boolean
  Dim nRect1 As RECT
  Dim nRect2 As RECT
  Dim nRect3 As RECT
  
  GetWindowRect Obj1.hwnd, nRect1
  GetWindowRect Obj2.hwnd, nRect2
  IntersectRect nRect3, nRect1, nRect2
  IntersectWindows = Not (CBool(IsRectEmpty(nRect3)))
End Function

Die Funktion IntersectWindows prüft, ob sich zwei Objekte (Steuerelemente, Forms u.ä.) überschneiden

In dem Progrämmchen zur oben gezeigten kleinen Animation ruft einfach ein Timer auf Form2 alle 100 Milliesekunden die Funktion IntersectWindows auf und übergibt ihr die beiden Forms als Parameter:

Private Sub tmr_Timer()
  If IntersectWindows(Form1, Form2) Then
    Me.BackColor = vbRed
  Else
    Me.BackColor = vbButtonFace
  End If
End Sub


Modul modIntersectWindows (modIntersectWindows.bas - ca. 0,8 KB)






Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer