Pokud to je ve Visual Basic .NET, pravděpodobně zavolání této API funkce zavolá chybu. Ve Visual Basic 6, kde se tyto funkce používaly téměř všude, totiž datový typ Long zabere v paměti 4 bajty (32 bitů), kdežto v .NETu má velikost 8 bajtů (64 bitů). Pokud tedy používáš API funkce ve VB.NET, v deklaraci změňte všechny proměnné typu Long na proměnné typu Integer. Jinak se při zavolání objeví chyba. Pokud to je navíc ukazatel, je ještě lepší použít datový typ IntPtr, který je pro to přímo určen. Protože máš proceduru Form1_MouseDown, usuzuji, že ti stačí sledovat pixely v rámci okna, resp. na daném objektu typu Graphics. Kód bude vypadat třeba takto:
Declare Function GetPixel Lib "gdi32" (ByVal hdc As IntPtr, ByVal x As Integer, ByVal y As Integer) As Integer
Function GetSysColor(ByVal c As Color) As Integer
Return c.R + c.G * 256 + c.B * 65536
End Function
Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
Dim hDC As IntPtr = Me.CreateGraphics.GetHdc()
If GetPixel(hDC, e.X, e.Y) = GetSysColor(Color.LimeGreen) Then
cerna += 1
End If
End Sub
A ještě jedna věc - funkce GetPixel nevrací hodnotu typu Color, která se používá pro barvy, ale číslo Integer, které barvu identifikuje. Proto je v ukázce ještě funkce GetSysColor, která barvu z .NETu převede na kód barvy, který používá Windows. Před porovnáváním tedy musíš .NETovou barvu prohnat touto funkcí a porovnávat ji s výsledkem GetPixel.
|