![]() |
Re: Maus auf ein Ereignis reagieren lassen
ok die maus soll reagieren wenn der cursor auf einer farbe zwischen der und der ist. das könnte ich ja in hex machen so
Delphi-Quellcode:
.
$B5D4F19E
Aber in delphi gibt es das schlüsselwort 'between' leider nicht dafür. Wie kann ich es denn machen? :wiejetzt: |
Re: Maus auf ein Ereignis reagieren lassen
Zitat:
Aber nochmal zu den Code: Hast du den hier richtig reingepostet??? Weil so kann der nicht funktionieren... Wenn dann so:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; DesktopDC: hDC; Pos: TPoint; implementation {$R *.dfm} function GetPixelFarbe: TColor; begin Result := GetPixel(DesktopDC, Pos.X, Pos.Y); end; procedure TForm1.FormCreate(Sender: TObject); begin DesktopDC := GetDC(0); end; procedure TForm1.Timer1Timer(Sender: TObject); begin GetCursorPos(Pos); if GetPixelFarbe = clGreen then begin mouse_event(MOUSEEVENTF_RIGHTDOWN, Pos.x, Pos.y, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, Pos.x, Pos.y, 0, 0); end; end; end. |
Re: Maus auf ein Ereignis reagieren lassen
Zitat:
Man kann ja die Farbe des Pixels unter der Maus und die gewünschte Farbe in die 3 Grundfarben zerlegen.... und dann subtrahieren und wenn das Ergebnis so ziehmlich bei null ist, dann ist es eine ähnliche Farbe!!! Anregung ![]() Farbe 1: R=120...G=100...B=12 Farbe 2: R=130...G=90...B=10 Ergebnis: R=10...G=10...B=2 --> Farbe ähnlich.... Klick ausführen. Und, wie findes du die Idee??? |
Re: Maus auf ein Ereignis reagieren lassen
Und wenn das Programm beendet wird, sollte man den Speicher auch wieder frei geben:
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin if DesktopDC > 0 then ReleaseDC(0, DesktopDC); end; |
Re: Maus auf ein Ereignis reagieren lassen
sehr gute idee. jedoch sind die farben in zu großem unterschied. hatte ich schon erwähnt das die farben wechseln!!!!!!!!!!?? :lol:
Aber da fällt mir auch noch etwas ein. jetzt musst du mir nur noch sagen wie ich das auf delphi übertrage :lol: du weißt ja... NEULING :spin2: edit: Kann mir denn jemand erkläre wie ich das machen soll? |
Re: Maus auf ein Ereignis reagieren lassen
Vielleicht so:
Delphi-Quellcode:
"Abs" gibt den Betrag bzw. den Absolut-Wert zurück. Bsp.: Abs(2-7)=5
type
TForm1 = class(TForm) Timer1: TTimer; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; DesktopDC: hDC; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin DesktopDC := GetDC(0); end; procedure TForm1.FormDestroy(Sender: TObject); begin If DesktopDC > 0 then ReleaseDC(0, DesktopDC); end; function GetPixelAbweichung(Farbe: TColor): Integer; var DCFarbe: TColor; begin DCFarbe:=GetPixel(DesktopDC, Mouse.CursorPos.X, Mouse.CursorPos.Y); Result:=Abs(GetRValue(Farbe)-GetRValue(DCFarbe)) + Abs(GetGValue(Farbe)-GetGValue(DCFarbe)) + Abs(GetBValue(Farbe)-GetBValue(DCFarbe)); end; procedure TForm1.Timer1Timer(Sender: TObject); begin If GetPixelAbweichung(clGreen)<100 // die Abweichung von der Farbe, z.B. 100. maximale Abweichung wäre 3*255 then begin mouse_event(MOUSEEVENTF_RIGHTDOWN, Mouse.CursorPos.X, Mouse.CursorPos.Y, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, Mouse.CursorPos.X, Mouse.CursorPos.Y, 0, 0); end; end; EDIT: Achja, DesktopDC am Ende noch freigeben. (s. bittsetter) |
Re: Maus auf ein Ereignis reagieren lassen
du bist ein schatz!!! :-D
ää *räusper*. Nein ich bin nicht schwul... hab herzlichen dank :P |
Re: Maus auf ein Ereignis reagieren lassen
Aber nicht den letzten Beitrag von Bitsetter unter den Tisch fallen lassen!!!
Es gehört sich einfach den Speicher wieder freizugeben :wink: Und jetzt ist da die redbox... und die sagt, dass der Hanno das schon geändert hat in seinem Code... Naja... spät, aber gemacht^^ |
Re: Maus auf ein Ereignis reagieren lassen
Liste der Anhänge anzeigen (Anzahl: 2)
Ich hab jetzt aber nochmal was nachgeprüft...
Ob es vielleicht klüger wäre den Schnitt an Abweichungen auszurechnen??? Weil siehe Screenshot (Bild 1): die zwei Farben sehen sich doch ziemlich ähnlich...
Code:
Sehr große Abweichung für kleine sichtbare Abweichung oder?
R G B
oben: 150 255 0 unten: 0 255 150 ergibt: 150 + 0 + 150 = 300 Edit: Anhang Edit2: Bild 2 im Anhang...
Code:
und hier ist ein deutlicher Unterschied sichtbar...
R G B
oben: 0 205 230 unten: 0 255 150 ergibt: 0 + 50 + 80 = 120 Edit 3: Mit dem Schnitt bilden geht ja auch net... 300/3 = 100 120/3 = 40 auch eine Verfälschung... :cry: Toll, oder? |
Re: Maus auf ein Ereignis reagieren lassen
die abweichung könnte noch größer sein, aber ich hab keine ahnung wie ich die jetzt vergrößere. ich lege die farbe dann ja eh fest. Vielleicht mach ich eine TComboBox mit rein das man die farbe selber auswählen kann. :stupid:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz