Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi problem mit GetDC bzw. AColor (https://www.delphipraxis.net/158121-problem-mit-getdc-bzw-acolor.html)

rhodan 6. Feb 2011 20:54

problem mit GetDC bzw. AColor
 
hallo,

kleines problem.
wenn ich den befehl GetPixel nur einmal ausführe hier, wird die farbe auf dem screen richtig erkannt, asuche ich allerdings auch noch nach der ZWEITEN koordinate, wird selbst die erste nicht richtig erkannt (sprich das panel färbt sich nicht blau).

muss ich jedes mal bevor ich ne neue koordinate absuche den DC neu holen? oder liegt das problem bei AColor und ich muss die erst releasen bevor ich die zweite koordinate suche oO ?

Code:
procedure TForm1.Button2Click(Sender: TObject);
var
dc:hdc;
AColor : Array[1..4] of Byte;
hwnd:hwnd;
...

begin
...

   DC := GetDC(hwnd);

  //blau

  DWord(AColor) := GetPixel(dc,410,412);

if (AColor[1] > 0) and (AColor[1] < 15)and (AColor[2] > 35) and (AColor[2] < 60) and (AColor[3] > 240) then
  begin
  panel1.color :=clblue;
  end;


 
  DWord(AColor) := GetPixel(dc,460,412);
  if (AColor[1] > 0) and (AColor[1] < 15)and (AColor[2] > 35) and (AColor[2] < 60) and (AColor[3] > 240) then
  begin
  panel2.color :=clblue;
  end;

danke

Bummi 6. Feb 2011 21:39

AW: problem mit GetDC bzw. AColor
 
Der DC wird durch GetPixel nicht ungültig...hast Du mal den Rückgabewert auf CLR_INVALID überprüft $FFFFFFFF, gegf. passen die Koordinaten nicht.

rhodan 6. Feb 2011 22:48

AW: problem mit GetDC bzw. AColor
 
die koordinaten passen. wenn ich
Code:
  DC := GetDC(game_hwnd);

  //blau

  begin
  DWord(AColor) := GetPixel(dc,460,412);
  if (AColor[1] > 0) and (AColor[1] < 70)and (AColor[2] > 15) and (AColor[2] < 60) and (AColor[3] > 240) then

  panel1.color :=clblue;
  end;
alleine laufen lasse funktioniert es, und wenn ich stattdessen (andere koordinaten)

Code:
 DC := GetDC(game_hwnd);

  //blau

  begin
  DWord(AColor) := GetPixel(dc,410,412);
  if (AColor[1] > 0) and (AColor[1] < 70)and (AColor[2] > 15) and (AColor[2] < 60) and (AColor[3] > 240) then

  panel1.color :=clblue;
  end;
laufen lasse funktioniert es auch, nur wenn die pixelabfrage wie im ersten post NACHeinander läuft kommt murks raus - es tut sich nämlich gar nichts, bzw. die panels werden nicht blau gefärbt auch wenn die koordinaten diese farbe haben

Aphton 6. Feb 2011 23:46

AW: problem mit GetDC bzw. AColor
 
WAS kommt den raus?
Lass doch einfach anzeigen. Wenn es gleiche Werte sind oder die Werte sich nicht verändert haben kannst du ja auf ein Fehler schließen!
Übrigens, das Handle hat den Namen "~game~" - kann es nicht sein, dass sich die Farbe an diesem Punkt im Spielfenster verändert?

Blup 7. Feb 2011 09:03

AW: problem mit GetDC bzw. AColor
 
Ist das angesprochene Fenster auch sichtbar und die abgefragte Position nicht verdeckt oder außerhalb des auf dem Monitor dargestellten Bereichs?

Stellt sich noch die Frage, ob das wirklich das richtige Fensterhandle ist. Buttons haben eventuell ein eigenes Handel.

rhodan 7. Feb 2011 20:24

AW: problem mit GetDC bzw. AColor
 
hmm...

ne da ist nichts verdeckt, ich hab das selbe gerade nochmal mit nem großen bild probiert was einfach in 2 verschiedene farben in der mitte geteilt ist..

würdet ihr auf dem selben weg 2 pixelkoordinaten suchen nacheinander? ich vermute eher das ich einfach einen kleinen fehler im code habe..und AColor wird auch "reseted" bei der zweiten getpixel abfrage? vielleicht hab ich den code einfach doof geschrieben bzw muss da nur was umstellen? :oops:

rhodan 9. Feb 2011 20:10

AW: problem mit GetDC bzw. AColor
 
natürlich lag das problem bei mir, code war ok.
danke trotzdem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 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