Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Pixel auf Form ermitteln (https://www.delphipraxis.net/85834-pixel-auf-form-ermitteln.html)

Thorben_K 5. Feb 2007 17:35


Pixel auf Form ermitteln
 
Hallo

ich möchte herraus finden welche Farbe ein Pixel auf meinem Form hat.

Dies geht ja bekanntlich mit
Delphi-Quellcode:
Form1.Canvas.Pixels[x,y]
das probleme ist nun leider das wenn an der stelle z.b. ein Button liegt, er sagt das das ausserhalbe deine bereichs liegt (er gibt -1 zurück) was ja auch verständlich ist, weil das Pixel befindet sich ja auf der Canvas des buttons. Nun habe ich die Forum suche bemüht und diesen COde hier gefunden:

Delphi-Quellcode:
function getColor(x, y: LongInt): TColor;
var canvas: TCanvas;
begin
  canvas:=TCanvas.Create;
  try
    canvas.Handle:=GetWindowDC(GetDesktopWindow);
    Result:=canvas.pixels[X , Y
  finally
    canvas.Free;
  end;
end;
Das Probleme ich bekomm die Pixelangaben in relation meines Formulars und nicht des gesamten Bildschirmes. also habe ich es dann so versucht

Delphi-Quellcode:
function TForm1.getColor(x, y: LongInt): TColor;
var canvas: TCanvas;
begin
  canvas:=TCanvas.Create;
  try
    canvas.Handle:=GetWindowDC(GetDesktopWindow);
    Result:=canvas.pixels[X + Form1.left , Y + Form1.Top];
  finally
    canvas.Free;
  end;
end;
Aber meine "Test" lieferten eine Falsche Farbe, hat einer eine bessere Idee oder weiss was ich falsch mache?

Danke euch schonmal :D

sirius 5. Feb 2007 17:47

Re: Pixel auf Form ermitteln
 
Folgende Schritte würde ich wagen:

1. An der besagten Stelle einen Punkt zeichnen, damit man weis, wo man ist
2. Könnte noch borderwidth, die Titlebar oder sonstiges ein Problem beim abstand darstellen
3. Fängt der Bildschirm bei 0 an, oder :gruebel:

shmia 5. Feb 2007 18:01

Re: Pixel auf Form ermitteln
 
Delphi-Quellcode:
function TForm1.getColor(x, y: LongInt): TColor;
var canvas: TCanvas;
  p : TPoint;
begin
  // vom Koordinatensystem des Formulars ins System des Screens umsteigen
  p := Self.ClientToScreen(Point(x,y));
  canvas:=TCanvas.Create;
  try
    canvas.Handle:=GetWindowDC(GetDesktopWindow);
    Result:=canvas.Pixels[p.x, p.y];
  finally
    canvas.Free;
  end;
end;

Thorben_K 5. Feb 2007 18:07

Re: Pixel auf Form ermitteln
 
super danke dir der Code geht :D

marabu 5. Feb 2007 19:00

Re: Pixel auf Form ermitteln
 
Hallo,

Canvas wird für die Farbermittlung aber nicht wirklich gebraucht:

Delphi-Quellcode:
function GetColor(ptScreen: TPoint): TColor;
begin
  with ptScreen do
    Result := GetPixel(GetWindowDC(GetDesktopWindow), X, Y);
end;
Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 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 by Thomas Breitkreuz