Autor Beitrag
rhodan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28



BeitragVerfasst: Mi 02.02.11 00:36 
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?


ausblenden volle Höhe Delphi-Quelltext
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..4of 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] > 220and (AColor[1] < 228and (AColor[2] > 221and (AColor[2] < 229)and (AColor[3] > 223and (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] > 215and (AColor[1] < 224and (AColor[2] > 23and (AColor[2] < 31)and (AColor[3] > 12and (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 user profile iconNarses: 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


Zuletzt bearbeitet von rhodan am Mi 02.02.11 01:12, insgesamt 1-mal bearbeitet
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: Mi 02.02.11 12:53 
Moin...
2 Sachen auf den ersten schnellen Blick.
Zitat:
(das ist der komplette code)

...glaub ich nicht. :zwinker:
- dann überprüfe mal deine begin / end ... ein wenig unverständlich
- kann es sein, daß die Koordinaten relativ zum Bildschirm festgelegt sind. Sollten die nicht relativ zum Fenster sein ?