Delphi-PRAXiS
Seite 3 von 5     123 45      

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 16:11

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:

TonyR 15. Apr 2007 16:38

Re: Maus auf ein Ereignis reagieren lassen
 
Zitat:

Zitat von RXR-Max
Wie kann ich denn rausfinden wie ich machen kann das das mausereignis passiert wenn der cursor auf einer farbe zwischen dem und dem ist...

Da kann ich dir wie gesagt auch nicht weiterhelfen :cry:

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.

TonyR 15. Apr 2007 16:51

Re: Maus auf ein Ereignis reagieren lassen
 
Zitat:

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

Ich hätte da so eine Idee...
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 in diesem Thread!

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???

bitsetter 15. Apr 2007 16:57

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;

RXR-Max 15. Apr 2007 17:01

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?

HannosG 15. Apr 2007 18:58

Re: Maus auf ein Ereignis reagieren lassen
 
Vielleicht so:

Delphi-Quellcode:
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;
"Abs" gibt den Betrag bzw. den Absolut-Wert zurück. Bsp.: Abs(2-7)=5

EDIT: Achja, DesktopDC am Ende noch freigeben. (s. bittsetter)

RXR-Max 15. Apr 2007 19:04

Re: Maus auf ein Ereignis reagieren lassen
 
du bist ein schatz!!! :-D

ää *räusper*. Nein ich bin nicht schwul...

hab herzlichen dank :P

TonyR 15. Apr 2007 19:56

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^^

TonyR 15. Apr 2007 20:09

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:
        R   G   B
oben: 150  255   0
unten: 0   255  150
ergibt: 150 + 0 + 150 = 300
Sehr große Abweichung für kleine sichtbare Abweichung oder?

Edit: Anhang

Edit2: Bild 2 im Anhang...
Code:
        R   G   B
oben:  0  205   230
unten: 0   255  150
ergibt: 0 + 50 + 80 = 120
und hier ist ein deutlicher Unterschied sichtbar...

Edit 3: Mit dem Schnitt bilden geht ja auch net...
300/3 = 100
120/3 = 40
auch eine Verfälschung... :cry:


Toll, oder?

RXR-Max 15. Apr 2007 20:20

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 08:07 Uhr.
Seite 3 von 5     123 45      

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