hi...ich hab folgendes problem:
mein tool sucht in diesem falle (das ist der komplette code) 2 verschiedene bildschirmkoordinaten ab und zeigt mir die farbe der koordinaten als entweder clblue (panel2) oder clmaroon (panel1) sofern die farbe des pixels in der von mir vorgegebenen farbrange liegt. das funktioniert.
solange bis ich mein toolfenster verschiebe, dann wird, wie im timer festgelegt wenn die farbe ausserhalb der festgelegten farbrange liegt die farbe auf grau zurückgesetzt.
wie kann das sein? die koordinaten sollten doch immer noch die gleichen sein oder nicht? wie kann ich das lösen? sobald ich mein toolfenster verschiebe wird eine von beiden farben im panel gelöscht...:S
der timer der dies kontrolliert liegt bei 100ms, änderungen diesbezüglich ändern am ergebnis nichts.
ps: das angezeigte bild von wo ich die farben rauslese ist ein normales jpeg bild, angezeigt in der windows bild und faxanzeige.
muss ich diese erst deklarieren bzw dem tool sagen das es dort zu suchen hat oder gescheit das automatisch wenn es im vordergrund ist?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| procedure TForm1.Timer1Timer(Sender: TObject); var DT: THandle; C: TCanvas; DC : HDC; AColor : Array[1..4] of Byte; begin panel1.color:=clBtnFace; panel2.color:=clBtnFace; DT := GetDC(0); C := TCanvas.Create; C.Handle := DT; ReleaseDC(Handle, DT); C.Free;
begin DC:=CreateDC('DISPLAY',NIL,NIL,NIL); DWord(AColor) := GetPixel(dc,711,426); if (AColor[1] > 220) and (AColor[1] < 228) and (AColor[2] > 221) and (AColor[2] < 229)and (AColor[3] > 223) and (AColor[3] < 231)then panel2.color :=clBLUE; DeleteDC(dc); end;
begin DC:=CreateDC('DISPLAY',NIL,NIL,NIL); DWord(AColor) := GetPixel(dc,568,184); if (AColor[1] > 215) and (AColor[1] < 224) and (AColor[2] > 23) and (AColor[2] < 31)and (AColor[3] > 12) and (AColor[3] < 20)then panel1.color :=clmaroon; DeleteDC(dc); end;
Label1.Caption := 'R: ' + IntToStr(AColor[1]) + '; ' + 'G: ' + IntToStr(AColor[2]) + '; ' + 'B: ' + IntToStr(AColor[3]) + '; ' + 'Hex: ' + IntToHex(DWord(AColor),6);
Label2.Caption := 'TColor: $'+IntToHex(DWord(AColor),8); |
danke!!
---
Moderiert von
Narses: Beiträge zusammengefasst---
mir ist gerade aufgefallen das es NUR funktioniert wenn sich mein programmfenster beim starten des programms relativ in der bildschirm mitte befindet...
wenn ich es in delphi auf poDesigned setze und es am bildschirmrand erscheint beim starten funktioniert es auch nicht :S