Einzelnen Beitrag anzeigen

Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: Auf farbveränderungen in anderen programmen reagieren

  Alt 30. Aug 2006, 10:56
kleines Beispiel programm

Delphi-Quellcode:
var
  Form1: TForm1;
  FHdc:HDC;

implementation

{$R *.DFM}
(*
//funktion zum prüfen, ob fenster sichtbar
function WindowVisible(Caption:string):boolean;
var r:TRect;
    hwnd:THandle;
begin
  result:=false;
  if (Caption<>'') then
  begin
    hWnd:=FindWindow(nil,PCHAR(Caption)); //handle des fensters, 0=nicht gefunden
    if hWnd<>0 then
      if isWindowVisible(hWnd) then //winapi zum prüfen, ob sichtbar
        if GetWindowRect(hWnd,r) then //fensterposition holen
          //prüfen ob sichtbar (u.a. position in sichtbereich, muss ggf. angepasst werden)
          if (r.top>-50) and (r.Left>-50) and (r.Left<>r.Right) then result:=true;
  end;
end;

//bei relativen (fensterabhängigen) positionen, das fenster-Rechteck holen,
//und die relativen werte in Absolute umrechnen
//FRelativePosition = relativ zu einem fenster ja/nein
//FWindowTitle = Fenstertitel
//srcRect = definiertes rechteck (relative position)

function GetScreenRect(FRelativePosition:boolean;FWindowTitle:string;srcRect:TRect):TRect;
var r:TRect;
begin
  r:=srcRect; //r initialisieren
  //wenn koordinaten  relativ sein sollen (funktionsparameter) und das durch FWindowTitle
  if (FRelativePosition) and (WindowVisible(FWindowTitle)) then
  begin
    //fensterposition/größe holen
    GetWindowRect(Findwindow(nil,PCHAR(FWindowTitle)),r);
    //absolute position berechnen
    r.Left:=FselRect.Left+r.left;
    r.Top:=FselRect.Top+r.Top;
    r.right:=r.left+(FSelRect.right-FSelRect.Left);
    r.bottom:=r.top+(FSelRect.Bottom-FSelRect.Top);
  end;
  result:=r; 
end;
*)


function GetScreenPixel(x,y:integer):TColor;
begin
  //den farbwert der angegebenen position auf dem bildschirm ermitteln
  result:=GetPixel(FHdc,x,y);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Handle des Bildschirmcanvas holen
  FHdc:=GetDC(0);
end;

procedure TForm1.Button1Click(Sender: TObject);
var p:TPoint;
begin
  //aktuelle Cursorposition holen und in p speichern
  GetCursorPos(p);
  //meine funktion aufrufen, die cursorposition mitgeben und den
  //Rückgabewert der color-eigenschaft des forms zuweisen
  color:=GetScreenPixel(p.x,p.y);
end;
statt der cursorposition kannst du natürlich auch andere Koordinaten nehmen. (siehe auch die auskommentierte funktion zur Bestimmung der Fensterposition/Größe).

//kommentare hinzugefügt und getScreenRect etwas verändert, sowie fehlende Funktion zu Prüfen der Sichtbarkeit hinzugefügt
//ich hoffe, die kommentare helfen weiter

HTH Frank
  Mit Zitat antworten Zitat