hallo,
wie kann ich mit delphi bestimmte pixel auf ihre farbe hin untersuchen?
kann ich mit delphi mausbegeungen und -klicks steuern?
danke für eure hilfe
gruß
corny
hallo,
wie kann ich mit delphi bestimmte pixel auf ihre farbe hin untersuchen?
kann ich mit delphi mausbegeungen und -klicks steuern?
danke für eure hilfe
gruß
corny
Hallo Corny,
Farben kannst Du mit dieser Funktion herausfinden:
function TForm1.DesktopColor(const x,y: integer): TColor;
var
c:TCanvas;
begin
c:=TCanvas.create;
c.handle:=GetWindowDC(GetDesktopWindow);
result:=getpixel(c.handle,x,y);
c.free;
end;
Die Funktion kannst Du z.B. so aufrufen:
procedure TForm1.Button1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
myColor : TColor;
begin
myColor := DesktopColor(Mouse.CursorPos.x, Mouse.CursorPos.y);
end;
Was meinst Du mit
kann ich mit delphi mausbegeungen und -klicks steuern?
Gruß
Manfred
Gruß
Manfred
Hallo Manfred,
vielen Dank für Deine schnelle Antwort! Genau sowas habe ich gesucht.
Ich meine z.B. eine Funktion, die einen Mausklick auf eine spezielle Position auf dem Bildschirm hervorruft.
Gruß,
Corny
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Corny,
Ich meine z.B. eine Funktion, die einen Mausklick auf eine
spezielle Position auf dem Bildschirm hervorruft.
Schau in der Win32s-Hilfe mal nach mouse_event. Da steht: „The mouse_event function synthesizes mouse motion and button clicks.“.
Das sollte genau das sein, was du suchts.
Gruß,
Jochen
hallo,
danke für den tipp mit mouse_event!
in meinem pixelproblem bin ich ein kleines stück weiter - ich habe eine feunktion gefunden, die farbwerte von pixeln ausgibt, die auf dem desktop liegen:
function GetPixel(Pos: TPoint): TColor;
varDC: HDC;
Handle: HWND;begin
Handle:=WindowFromPoint(Pos);
DC:=GetDC(Handle);
ReleaseDC(Handle, DC);end;
was kann ich machen, damit ich auch pixel in aktiven programmfenstern analysieren kann?
gruß,
corny
@JO
@Jo
ich habe nach mouse_event in der delphi hilfe (vers. 7) gesucht, aber nix gefunden!
was ist die win32s hilfe?
gruß
corny
Hallo Corny,
danke für den tipp mit mouse_event!
Diese Hilfe-Datei wird bei der Vollinstalation eigentlich mit installiert. Du solltest sie in der Programmgruppe von Delphi/Hilfe/MS SDK Hilfedateien finden oder im Verzeichnis „C:\Programme\Gemeinsame Dateien\Borland Shared\MSHelp\WIN32S.HLP“ (wenn du die Pfade nicht geändert hast). Außerdem ist (bei mir) im Hilfe-Menü in der IDE ein Eintrag „Windows SDK“, womit du aus der IDE heraus diese Hilfedatei aufrufen kannst. Ich habe hier die Delphi Proffessional. Ich weiß nicht, ob andere Versionen die SDK-Hilfedateien nicht dabei haben, aber das könnte u.a. ein Grund sein, warum du die möglicherweise nicht hast. Melde dich nochmal, wenn du sie nicht finden kannst.
in meinem pixelproblem bin ich ein kleines stück weiter - ich
habe eine feunktion gefunden, die farbwerte von pixeln
ausgibt, die auf dem desktop liegen:
Wenn ich mich recht erinnere, möchtest du mit der Maus über den Bildschirm und dabei irgendwo die Farbe des Pixels unter der Maus angezeigt haben.
Das Hauptproblem hier dürfte sein, die Mausbotschaften abzufangen, die nicht an die Delphi-Applikation gerichtet sind (zB, wenn du deine Maus außerhalb des Anwendungsfensters bewegst). Unter Win 3.x ging das einfach mit SetCapture und ReleaseCapture, was unter NT/XP nicht mehr möglich ist. Aber es gibt einen Trick! Mausbotschaften werden nach den Klicken der linken Maustaste über dem Fenster solange an das Fendetr gesendet, bis die Maustaste wieder losgelassen wird (egal, wohin die Maus zwischendurch bewegt wird).
Du könntest das zB so lösen:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
p: TPoint;
DC: HDC;
col: TColor;
begin
p := ClientToScreen(Point(x,y));
DC := GetDC(0);
col := GetPixel(DC,p.x,p.y);
ReleaseDC(0,DC);
Color := col;
end;
Als Kontrolle zeigt dein Fenster immer die aktuelle Farbe unter der Maus. Klicke mit der linken Maustaste ins Fenster und ziehe dann die Maus über den Bildschirm, dann siehst du, wie die Farbe des Fensters wechselt.
Gruß,
Jochen
hallo,
danke, die hilfedatei gefunden
dieser code
procedure TForm1.Timer1Timer(Sender: TObject);
Var Pt:TPoint; DC:HDC;
begin
GetCursorPos(Pt);
DC:=CreateDC(‚DISPLAY‘,NIL,NIL,NIL);
label1.Caption := inttostr(GetPixel(DC,Pt.x,Pt.y));
End;
liefert auf label1 den farbwert des jeweiligen pixels, auf dem sich die maus befindet! Global und auch auf nicht-delphiprogramm-fenstern
gruß
corny
Hallo!
Das Problem mit einem Timer zu umgehen ist eine super Idee! Ich ärgere mich gerade, dass ich da nicht selbst drauf gekommen bin!
Herzlichen Dank für den Tipp!
Gruß
Jochen