vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB & Windows API
Einfacher Code -> Programm stürzt mit der Zeit komplett ab (API-Getpixel) 
Autor: slashmaster
Datum: 06.06.11 06:06

Huhu,

ich habe folgenden simplen Code, um mir die Koordinaten der Maus und die darunterliegende Pixelfarbe auslesen und anzeigen zu lassen. Benötigt werden drei labels (1-3) und ein Timer1

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long

Private Declare Function GetPixel Lib "gdi32.dll" ( _
ByVal hdc As Long, _
ByVal nXPos As Long, _
ByVal nYPos As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Timer1_Timer()
Dim MyMouse As POINTAPI

GetCursorPos MyMouse
Me.Label1.Caption = MyMouse.x
Me.Label2.Caption = MyMouse.y

Me.Label3.Caption = GetPixel(GetDC(0), MyMouse.x, MyMouse.y)
Me.Label3.BackColor = Me.Label3.Caption
End Sub


Wenn das ganze jetzt ne Weile läuft (~ ne Minute), dann funktioniert der Code nicht mehr und das Programm (inkl. Entwicklungsumgebung) schmiert ab. Als intervall habe ich 10ms eingestellt aber selbst, wenn ich es höher stelle schmiert er mit der Zeit ab. Mach ich irgendwas falsch, wenn ja was und wie könnte man es anders machen?

lg
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Code -> Programm stürzt mit der Zeit komplett ab (API-Getpixel) 
Autor: slashmaster
Datum: 06.06.11 06:14

als Ergänzung: nach gewisser Zeit liefert "GetPixel" -1 als Ergebnis. Also er liest die Farbe nicht mehr aus

Das Phänomen habe ich an 3 Rechnern feststellen können, mit unterschiedlichem Arbeitsspeicher, CPU, Betriebssystem
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Code -> Programm stürzt mit der Zeit komplett ab (API-Getpixel) 
Autor: slashmaster
Datum: 06.06.11 07:28

das Problem hat sich erledigt. Wenn man mit GetDC arbeitet muss man dieses auch wieder freigeben ReleaseDC


Danke fürs lesen!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Code -> Programm stürzt mit der Zeit komplett ab (API-Getpixel) 
Autor: ModeratorMartoeng (Moderator)
Datum: 06.06.11 08:55

Richtig, andernfalls läuft der Speicher voll und es führt zu den von Dir beschriebenen Problemen.
10ms-Timer sind übrigens auch nicht so der Knüller.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Einfacher Code -> Programm stürzt mit der Zeit komplett ab (API-Getpixel) 
Autor: Manfred X
Datum: 06.06.11 11:13

Hallo!

Warum erstellst Du den Gerätekontext im Timer-Event?

Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
 
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, _
    ByVal hDC As Long) As Long
 
Private Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long
 
Private Declare Function GetPixel Lib "gdi32.dll" ( _
ByVal hDC As Long, _
ByVal nXPos As Long, _
ByVal nYPos As Long) As Long
 
Private Type POINTAPI
x As Long
y As Long
End Type
 
Dim DC As Long
 
Private Sub Form_Load()
    DC = GetDC(0)
    Timer1.Interval = 200
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    ReleaseDC 0, DC
End Sub
 
Private Sub Timer1_Timer()
    Dim MyMouse As POINTAPI
 
    GetCursorPos MyMouse
    Me.Label1.Caption = MyMouse.x
    Me.Label2.Caption = MyMouse.y
 
    Me.Label3.Caption = GetPixel(DC, MyMouse.x, MyMouse.y)
    Me.Label3.BackColor = Me.Label3.Caption
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel