Ja, hur kan man göra detta? Hej Ja, tack får man väl säga... Fast det hjälpte mig inte 100%-igt... Igen Ett alternativt: Tack, jag vill inte klaga men tänk på att jag verkligen är denna nybörjare vi alla nån gång varit? Hej Hej Nu har jag skickat iväg ett mail till dig med en exempelfil, där jag visar hur jag inte fått det att fungera :) Hoppas du kan hjälpa mig... Hej Sedärja, nu fungerar det ju utmärkt, vad jag inte fattar nu är hur sjutton jag ska kunna fånga färger från hela skärmen? Det borde väl gå... /Molle Nja Igen Andreas skrev Oj, vilket utbrott :) "User Definde Type" som jag tror det kallas är en datastruktur. Jo, lite, lite... Men jag förstår inte hur jag ska kunna använda det i praktiken, skulle du kunna bemöda dig att skicka över en exempelfil kanske? /Molle Option Explicit Hej Jag älskar dig med SvenPon... *Puss, puss* Jahaja, skulle det isf räcka med att lägga in den koden? Eller ska jag ha med det däringa Option Explicit bör du placera längst upp i alla moduler. Tvingar dig att deklarera alla variabler. Vilket hjälper mycket. Helst om man stavat fel i ett variabelnamn. Är det någon som har gjort ett program på detta redan? Kanske nån som kan skicka en exempelfil? Tack /MolleHämta RGB från musens position
Programmet ligger och lurar i verkligheten och när man sedan flyttar på muskraken så ska något försöka fundera ut vilka Röd/Grön/Blå-färger som döljer sig under musen... Nån som kan? Tack /MolleSv: Hämta RGB från musens position
Grundläggande sen får du mixtra själv.
OBS viktigt Form1 i det här fallet skall ha ScaleMode Pixel
Du kan använda Picture1 på samma sätt .Inte Image som ej har hDC
Option Explicit
Private Declare Function GetPixel Lib "gdi32" _
(ByVal hDC As Long, ByVal x As Long, _
ByVal y As Long) As Long
'Modulnivå
Dim RGBColor As Long
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
RGBColor = GetPixel(Form1.hDC, X, Y)
Label1.BackColor = RGBColor
End Sub
mvh
SvenSv: Hämta RGB från musens position
För det första var den väldigt dålig på att känna av rätt... Den visade bara svart, och grått...
För det andra är jag en nybörjarnybörjare, så lite förklaringar skulle inte sitta fel...
Jag vill egentligen, även om det kanske inte framgick att den ska visa på tre olika labels Röd färg, grön färg och blå färg...
Och i textform då också :) Tackar /MolleSv: Hämta RGB från musens position
Lägg in en färglad bild i Form1.Picture och testa detta
Option Explicit
Private Declare Function GetPixel Lib "gdi32" _
(ByVal hDC As Long, ByVal X As Long, _
ByVal Y As Long) As Long
Dim RGBColor As Long
Dim RGBStr As String
Private Sub Form_Load()
Form1.ScaleMode = 3 'Pixel
End Sub
Private Sub Form_MouseMove(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
RGBColor = GetPixel(Form1.hDC, X, Y)
RGBStr = Hex$(RGBColor)
Label1 = Val("&H" & Right$(RGBStr, 2))
Label2 = Val("&H" & (Mid$(RGBStr, 3, 2)))
Label3 = Val("&H" & Left$(RGBStr, 2))
Label4.BackColor = RGBColor
DoEvents
End Sub
mvh
SvenSv: Hämta RGB från musens position
'Module: Module1 -------------------
Public Type RGB
Red As Byte
Green As Byte
Blue As Byte
Reserved As Byte
End Type
Private Type RGBLong
RGB As Long
End Type
Public Function ToRGB(Color As Long) As RGB
Dim RGBLong As RGBLong
RGBLong.RGB = Color
LSet ToRGB = RGBLong
End FunctionSv: Hämta RGB från musens position
Jag testade det andra förslaget jag fick från Sven och det fungerade, med två problem: Det visar färgekoderna, men bara en gång... Hur uppdaterar man så att det blir nån gång i sekunden?
Och sen så klarar den ju fortfarande bara från den bilden, jag vill ju ha från hela skärmen... Tack! /MolleSv: Hämta RGB från musens position
>Det visar färgekoderna, men bara en gång...
Den visar väl nya värde så fort du flyttar musmarkören ?
Undrar
SvenSv: Hämta RGB från musens position
Okidoki
Kontrollera att koden ligger i Form1.MouseMove
och att ScaleMode är 3 Pixel.
Du kan ju testa att också lägga koden i MouseUp
Då får du nya värde varje gång du klickar
någonstans i bilden
OBS om du har bilden i en Picture1 så får du givetvis
använda dennas MouseMove och hDC Pixel
mvh
SvenSv: Hämta RGB från musens position
Sv: Hämta RGB från musens position
Den har gått i retur som RGBRetur.zip
Du måste skriva koden i Picture1 om det är där bilden ligger
mvh
SvenSv: Hämta RGB från musens position
Sv: Hämta RGB från musens position
Det blir lurigare.Förslag gör en Capture av den skärm
du är intresserad av,ta in den i en Picture eller Form
Det är kontrollens hDC som styr,Screen har inte detta propertie.
mvh
SvenSv: Hämta RGB från musens position
>Ett alternativt:
'Module: Module1 ------------------- osv osv.
SVAMMEL ! Hur faen skall en nybörjare få detta att fungera ?
DSSv: Hämta RGB från musens position
Jag förstår absolut inte saker som:
'Module: Module1 ------------------- osv osv.
Men om ni menar att jag ska göra en modul och där i skriva:
Public Type RGB
Red As Byte
Green As Byte
Blue As Byte
Reserved As Byte
End Type
Och sen skriva i Koden:
Private Type RGBLong
RGB As Long
End Type
Public Function ToRGB(Color As Long) As RGB
Dim RGBLong As RGBLong
RGBLong.RGB = Color
LSet ToRGB = RGBLong
End Function
Kan ni väl beskriva det lite tydligare? Det är ungefär bara det som behövs... /MolleSv: Hämta RGB från musens position
Public Type RGB
Red As Byte
Green As Byte
Blue As Byte
Reserved As Byte
End Type
Om man deklarerar en variabel som rgb(Dim r as RGB). har den Red, Green, Blue och Reserved som medlemmar:
Dim r as RGB
r.Red = 0
r.Green = 0
r.Blue = 0
r.Reserved = 0
UDT(User Definde Type) är en specifikation hur datat skall lagras. Så data för RGB tar fyra byte varav första byten är Red andra är Green, osv....
Nu finns det ett rätt okänt kommando i VB som heter LSET vilket överför data mellan UDT'er. En long är fyra byte. En färg lagras i en long. Om vi tarr och överför det värdet till fura enskilda bytes så får vi Röd, Grön, blå och en extra byte som inte används...
Hoppas det är lite klarrare nu... :O)Sv: Hämta RGB från musens position
Sv: Hämta RGB från musens position
Private Declare Function GetPixel Lib "gdi32" _
(ByVal hDC As Long, ByVal X As Long, _
ByVal Y As Long) As Long
Public Type RGB
Red As Byte
Green As Byte
Blue As Byte
Reserved As Byte
End Type
Private Type RGBLong
RGB As Long
End Type
Public Function ToRGB(Color As Long) As RGB
Dim RGBLong As RGBLong
RGBLong.RGB = Color
LSet ToRGB = RGBLong
End Function
Private Sub Form_Load()
ScaleMode = vbPixel
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Color as Long
Dim RGB as RGB
Color = GetPixel(hDC, X, Y)
RGB = ToRGB(Color)
Label1 = RGB.Red
Label2 = RGB.Green
Label3 = RGB.Blue
Label4.BackColor = Color
Refresh
End SubSv: Hämta RGB från musens position
När man ser Andreas utläggning kommer man att tänka på
"Mycket skrik för lite ull sa kärringen när hon klippte grisen"
SvenSv: Hämta RGB från musens position
Har för mig att det är det snabbaste sättet att i vb bryta ut RBG värdena... Snabare en binär AND. Vilket jag skulle rekomendera som nybörjar lösning. Förstår faktist inte varför du konvertera det till en hexadecimal sträng och plockar or stycken för att sedan konvertera det till tal. Jag förstår bara inte...
Mitt nybörjar exempel...
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Red As Byte
Dim Green As Byte
Dim Blue As Byte
Dim Color As Long
Color = Point(X, Y)
Red = Color And vbRed
Green = (Color And vbGreen) / &H100&
Blue = (Color And vbBlue) / &H10000
End SubSv: Hämta RGB från musens position
"Option Explicit
Private Declare Function GetPixel Lib "gdi32" _
(ByVal hDC As Long, ByVal X As Long, _
ByVal Y As Long) As Long"
också?
Jag känner mig rätt dum, men den som inget frågar han får heller inget veta eller hur man nu ska säga... /MolleSv: Hämta RGB från musens position
Private Declare Function GetPixel Lib "gdi32" _
(ByVal hDC As Long, ByVal X As Long, _
ByVal Y As Long) As Long"
Är en API dekleration. Om du vill "fång" kordinater inom vb i t.ex ett formulär eller i en picture box är det nog bekvämare att använda sig av Point metoden.
Fördelen med GetPixel är att du kan skicka hDC för skrivbordet och på så sätt hämta en pixel från hela skärmen. Sv: Hämta RGB från musens position