Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Maus auf ein Ereignis reagieren lassen (https://www.delphipraxis.net/90311-maus-auf-ein-ereignis-reagieren-lassen.html)

RXR-Max 15. Apr 2007 10:08

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:

TonyR 15. Apr 2007 10:13

Re: Maus auf ein Ereignis reagieren lassen
 
Zitat:

Zitat von RXR-Max
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:

Bloß der Vollständigkeit halber: DesktopDC ist eine Variable :zwinker:

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?

RXR-Max 15. Apr 2007 10:25

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:

RXR-Max 15. Apr 2007 11:25

Re: Maus auf ein Ereignis reagieren lassen
 
Hat denn jetzt jemand noch eine Lösung? Egal was ich ausprobiere es funzt einfach nicht!?

TonyR 15. Apr 2007 11:47

Re: Maus auf ein Ereignis reagieren lassen
 
Gib mal ein biss'l CODE!
Kann jetzt aber erst mal nicht helfen... weil: Formel 1

bitsetter 15. Apr 2007 13:22

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.

RXR-Max 15. Apr 2007 13:49

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:
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.
Und da ist er auch schon... :gruebel:

RXR-Max 15. Apr 2007 13:53

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

TonyR 15. Apr 2007 14:39

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:
var
  Pos: TPoint;
begin
  GetCursorPos(Pos);
einfügen, oder Pos gleich global deklarieren, um auch in Timer1Timer darauf zugreifen zu können!!

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;

RXR-Max 15. Apr 2007 15:40

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:
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.
Jo sieht es gerade aus und es funzt. Aber dat mit der Farbe geht nicht. :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz