![]() |
Re: Maus auf ein Ereignis reagieren lassen
Danke. Aber das weiß ich doch nicht das ich das deklarieren muss. Es gibt einiges an Funktionen die ich nicht vorher deklarieren muss oder? :gruebel:
|
Re: Maus auf ein Ereignis reagieren lassen
Zitat:
Aber ich kanns versthehen, dass du da noch nicht ganz dahinter stehst... Aber dann musst du ja auch noch nicht solche schweren Sachen machen, oder? |
Re: Maus auf ein Ereignis reagieren lassen
Übung macht den Meister. Funzt mit dem Mausklick und so aber der macht immer den Klick egal welche Farbe ich eingestellt habe und nur auf dem Desktop. Das soll aber in jeder Anwendung gehen und nicht nur auf dem Desktop. Und vor allem soll es auf Farbe reagieren. :wiejetzt:
Ich wusste nicht DesktopDC eine Variable ist :lol: |
Re: Maus auf ein Ereignis reagieren lassen
Hat denn jetzt jemand noch eine Lösung? Egal was ich ausprobiere es funzt einfach nicht!?
|
Re: Maus auf ein Ereignis reagieren lassen
Gib mal ein biss'l CODE!
Kann jetzt aber erst mal nicht helfen... weil: Formel 1 |
Re: Maus auf ein Ereignis reagieren lassen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe mal ein Beispiel angehängt, wo ein Mausklick ausgelöst wird, wenn man die Maus bewegt und sich darunter eine rote Farbe befindet. Das ganze funktioniert mit einem Hook, eventuell kannst du ja da was von gebrauchen. |
Re: Maus auf ein Ereignis reagieren lassen
oha hast du den schon gehabt oder hast du dir ganze arbeit extra für mich gemacht? :cheers:
Bestimmt kann ich es gebrauchen, aber ich bin ja noch neuling und dachte es gibt eine einfachere lösung weil ich bei deinem quellcode noch garnicht so durchsteige. Ih werd wohl noch ein paar jahre üben müssen. :stupid: :wall: an tonyr: ich schick gleich mal was ich jetzt moentan habe...
Delphi-Quellcode:
Und da ist er auch schon... :gruebel:
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; implementation {$R *.dfm} function GetPixelFarbe: TColor; var Pos: TPoint; begin GetCursorPos(Pos); Result := GetPixel(DesktopDC, Pos.X, Pos.Y); end; procedure TForm1.FormCreate(Sender: TObject); begin DesktopDC := GetDC(0); end; procedure TForm1.Timer1Timer(Sender: TObject); var x, y: integer; begin if GetPixelFarbe = clGreen then mouse_event(MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, x, y, 0, 0); end; end. |
Re: Maus auf ein Ereignis reagieren lassen
Lässt sich ja auch compilieren aber was gescieht hab ich ja schon geschriben. der mausklick wird immer auf dem desktop simu obwohl er niht grün ist.
oha sorry doppelpost |
Re: Maus auf ein Ereignis reagieren lassen
1. Frage: Welches Interval hast du im Moment im Timer???
2. Sache: In der Timer-Prozedur hast du die Variablen X und Y...diese sind immer 0! Ich dachte, du willst den Mausklick dort ausführen, wo die Farbe ist :wink: Da musst du entweder nochmal das
Delphi-Quellcode:
einfügen, oder Pos gleich global deklarieren, um auch in Timer1Timer darauf zugreifen zu können!!
var
Pos: TPoint; begin GetCursorPos(Pos); 3. Ein weiteres Problem ist, dass du dir ganz sicher sein musst, welche Farbe es nun sein soll! Ich hoffe du weist, dass die ganze Sache nicht funktioniert, wenn die Farbe unter der Maus auch nur eine winzige Farbnuance anders ist!!! ClGreen ist also in dem Fall auch nicht sehr empfehlenswert! Lieber eine Farbangabe im Hexadezimalstil verwenden (Wie z.B. "FFFFFF")... Optimal wäre natürlich ein Farbbereich... aber da bin ich überfragt, was die Realisierung angeht... [Da weis vielleicht ein anderer bescheid!?] So... nun werd ich mir mal deinen Code ansehen Bitsetter! PS: Juhuuuu... Alonso ist bloß Fünfter :thumb: Edit: Noch was gaaanz wichtiges!! Warum vergisst du das begin und end für den Block im OnTimer???
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var x, y: integer; begin //hier musst du das mit dem Getcursor noch machen ;-) if GetPixelFarbe = clGreen then begin //dieses hier meine ich mouse_event(MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, x, y, 0, 0); end; end; |
Re: Maus auf ein Ereignis reagieren lassen
OK ich habe jetzt eine Änderung vorgenommen, he. Und erst hat es nicht gefunzt und dann hab ich nochmal etwas geändert und es funzt. Aber leider geht das mit der Farbe nicht da hast du recht. Das heisst ich habs mal mit schwarz ausprobiert, und das muss dann wirklich auh richrig schwarz sein.
Delphi-Quellcode:
Jo sieht es gerade aus und es funzt. Aber dat mit der Farbe geht nicht. :(
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; x, y: integer; implementation {$R *.dfm} function GetPixelFarbe: TColor; begin GetCursorPos(Pos); Result := GetPixel(DesktopDC, Pos.X, Pos.Y); end; procedure TForm1.FormCreate(Sender: TObject); begin DesktopDC := GetDC(0); end; procedure TForm1.Timer1Timer(Sender: TObject); begin if GetPixelFarbe = clBlack then begin mouse_event(MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, x, y, 0, 0); end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 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