AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Auf farbveränderungen in anderen programmen reagieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auf farbveränderungen in anderen programmen reagieren

Ein Thema von ghost007 · begonnen am 29. Aug 2006 · letzter Beitrag vom 30. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#1

Auf farbveränderungen in anderen programmen reagieren

  Alt 29. Aug 2006, 23:58
Hallo,
ich frage mich folgendes.

Wir nehmen einmal an ich hab ein programm das an einer bestimmten stelle im fenster einen runden kreis hat, der entweder rot oder grün ist, je nach programm status. Jetzt will ich ein programm schreiben, welches per timer z.B. alle 5 sekunden schaut welche farbe der kreis hat, oder der mittelpunkt des kreises, und dann demensprechend reagiert.
Ist so etwas möglich?
Wenn ja, wo sollte ich ansetzten, wie macht man sowas?

Danke schon mal

MfG - Ghost
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
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
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#3

Re: Auf farbveränderungen in anderen programmen reagieren

  Alt 30. Aug 2006, 12:59
Danke für deine antwort.
Da ich aber seit längerer Pause wieder delphi programmiere, blick ich den quellcode nich so.
Könntest du vielleicht ein paar Kommentare einfügen?

MfG - Ghost
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#4

Re: Auf farbveränderungen in anderen programmen reagieren

  Alt 30. Aug 2006, 13:21
wenn ich das so sagen darf.
DU bist genial

Ich befass mich jetzt erst mal mit den auskomentierten funktionen.
Aber 1 frage hätte ich noch, wie komm ich an die koordienaten in dem anderen fester/programm?
gibt es die möglich keit mir die maus koordinaten anzeigen zu lassen?

MfG - Ghost
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: Auf farbveränderungen in anderen programmen reagieren

  Alt 30. Aug 2006, 13:28
du rufst die funktion GetScreenRect z.B. so auf:

Delphi-Quellcode:
r:=rect(10,10,20,20); //rechteck innerhalb des fensters
r:=GetScreenRect(true,'Delphi',r);//delphi ist der text in der titelzeile des fensters
nun stehen in r die absoluten Koordinaten
wenn z.B. das fenster 'Delphi' an position 100,100 ist (bildschirmkoordinaten), stünde in r am Ende rect(110,110,120,120)

zu 2.
Delphi-Quellcode:
GetCursorPos(p);
label1.caption:=InttoStr(p.x)+','+IntToStr(p.y);
Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#6

Re: Auf farbveränderungen in anderen programmen reagieren

  Alt 30. Aug 2006, 13:33
die zahlen in klammern hinter dem "rect" legen die größe des rechtecks fest, von dme die koordinaten genommen werden, oder?

MfG - Ghost
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

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

Re: Auf farbveränderungen in anderen programmen reagieren

  Alt 30. Aug 2006, 13:40
erst werden dem r die korrdinaten des (relativen) rechtecks zugewiesen (die zahlen in der klammer (left,top,right,bottom)) siehe hilfe zur rect-funktion.
diese koordinaten werden der Funktion GetScreenRect übergeben, welche die absolute (bildschirm-) Position daraus errechnet und zurückgibt. Diese Funktionsrückgabe wird wieder r zugewiesen.

das meintest du doch, oder?

Gruß Frank
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#8

Re: Auf farbveränderungen in anderen programmen reagieren

  Alt 30. Aug 2006, 14:00
genau das

danke

Hab jetzt dann erstma was zu tun
Werd ma alles was du gepostet hast checken und versuchen zu verstehen.

MfG - Ghost

[EDIT]
Ich hab in dem anderen programm einen roten balken, der je nach verstrichener zeit grau wirt, also wie ne progressbar erst rot dann von rechts nach links grau, bis er schließlich ganz grau ist.
Wie kann ich testen wann er ganz grau ist?
nehm ich da am besten den pixel ganz links und schau wann der grau is, oder gibts ne bessere lösung?
[/EDIT]
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#9

Re: Auf farbveränderungen in anderen programmen reagieren

  Alt 30. Aug 2006, 15:05
zu deiner mauspositions funktion:
von welcher art muss die variable p sein?
da kommt bie mir volgender fehler:
Zitat:
Undeclared Identifier: 'p'
[EDIT]
hat sich erledigt
[/EDIT]
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#10

Re: Auf farbveränderungen in anderen programmen reagieren

  Alt 30. Aug 2006, 21:59
Also,
ich weiß nun an welchen koordinaten ich die farbe hole.
Blos die farbe ist fast jedes mal wenn ich sie hole ein kleine wenig anders d.h. ein wenig heller oder ein wenig dunkler.
Damit ich sie aber abgleichen kann, müsste sie immer gleich sein.
Um das problem zu lösen hab ich mir überlegt, das ich mir den rot anteil aus der farbe suche und dann für einen bestimmten bereich an rotanteilen dann die funktion freigebe.

Nun meine frage:
Wie komme ich an den rotanteil in einer farbe

MfG - Ghost
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 Uhr.
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