Maus auf Farbwert setzen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Fox
Beiträge: 75
Registriert: 08.08.2007 10:14
Kontaktdaten:

Maus auf Farbwert setzen

Beitrag von Fox »

Hi, hab mal wieder ein Problm.
Ich will meine Mauscursor auf einen Bestimmten Farbwert setzen, den ich hiermit ermittle:

Code: Alles auswählen

Procedure GetColorUnderMouse() 
 GetCursorPos_(@CursorPos.POINT ) 
 ProcedureReturn GetPixel_(GetDC_(0),CursorPos\x,CursorPos\y)  
EndProcedure 

Debug Hex(GetColorUnderMouse())
Den Courser kann ich ja mit

Code: Alles auswählen

SetCursorPos_()
auf einen Position setzen, aber wie mache ich das mit dem Farbwert?

Hoffe ihr wisst was ich meine und könnt mir helfen

MfG
Fox
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

willst du mit der maus zu einem punkt mit einer bestimmten farbe springen?
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Der Cursor ist ein Bild und nicht einfach nur eine Farbe. Du musst also ein
Bild zeichnen und es dem Cursor zuweisen. Dazu gibt es auch genügend
Beispiele in der PureArea oder hier im Forum.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Du meinst sowas?

Code: Alles auswählen

Procedure GetColorUnderMouse()
  Protected CursorPos.POINT
  Protected Result.l
  Protected hDC.l
  
  hDC = GetDC_(0)
  GetCursorPos_(@CursorPos.POINT)
  Result = GetPixel_(hDC, CursorPos\x, CursorPos\y)
  ReleaseDC_(0, hDC)
  
  ProcedureReturn Result
EndProcedure

Procedure SetColorUnderMouse(Color.l)
  Protected CursorPos.POINT
  Protected hDC.l
  
  hDC = GetDC_(0)
  GetCursorPos_(@CursorPos.POINT)
  SetPixel_(hDC, CursorPos\x, CursorPos\y, Color)
  ReleaseDC_(0, hDC)
EndProcedure

Debug Hex(GetColorUnderMouse())

t = ElapsedMilliseconds()
While ElapsedMilliseconds() - t < 2000
  SetColorUnderMouse(RGB(255, 0, 0))
Wend
Btw.: Dein Code sollte nach GetDC_() immer schön brav ReleaseDC_() aufrufen, ansonsten wird es sehr speicherfressend wenn du es mehrfach aufrufst.

:freak: :?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Fox
Beiträge: 75
Registriert: 08.08.2007 10:14
Kontaktdaten:

Beitrag von Fox »

hi... also ich meine das so, dass wenn jetzt auf meinem bildschirm der cursor irgendwo ist, und sobald eine icq nachricht eingeht, da blinkt ja dann in der taskleiste der kleine icon, der cursor auf das kleine icon gesetzt wird.
wie mach ich das denn?

Danke euch

Fox
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Um das nochmal Klar zu stellen:
Du willst sobald eine ICQ-Nachricht eintrifft den Coursor auf die Koordinaten der blinkende Meldung setzen, und das ganze an Hand des Farbwertes?
(\/) (°,,,°) (\/)
Benutzeravatar
Fox
Beiträge: 75
Registriert: 08.08.2007 10:14
Kontaktdaten:

Beitrag von Fox »

ja... also das mit icq war nur als beispiel, aber ja sonst stimmt die beschreibung
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Aber dann müsstest du ja den ganzen Bildschirm nach dem Farbwert absuchen :?
(\/) (°,,,°) (\/)
Benutzeravatar
Fox
Beiträge: 75
Registriert: 08.08.2007 10:14
Kontaktdaten:

Beitrag von Fox »

stimmt, aber wie mach ich das denn?
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Is doch Simpel, folgender Code ließt zB die Screen in ein Array ein, aber wie gesagt, schnell is das nich...

Code: Alles auswählen

Width = 1280
Height = 1024

Dim Screen.l(Width,Height)

hDC = GetDC_(0) 
For x = 0 To Width
  For y = 0 To Height
    Screen(x,y) = GetPixel_(hDC, x, y) 
  Next
Next
ReleaseDC_(0, hDC) 
(Das Prinzip GetPixel_(dc,x,y) geht eigentlich schon aus DarkDragons Post hervor)
Zuletzt geändert von KeyKon am 28.03.2008 10:47, insgesamt 1-mal geändert.
(\/) (°,,,°) (\/)
Antworten