Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi GetPixel gibt fehlerhaften Wert zurück (https://www.delphipraxis.net/74798-getpixel-gibt-fehlerhaften-wert-zurueck.html)

xZise 8. Aug 2006 21:44


GetPixel gibt fehlerhaften Wert zurück
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe folgenden Code:
Delphi-Quellcode:
procedure TfrmEId3.FormShow(Sender: TObject);
var
  hDesk : HWND;
  hdcDesktop : HDC;
  i : Byte;
begin
  hDesk := GetDesktopWindow;
  hdcDesktop := GetWindowDC(hDesk);

  for i := 0 to xiBg.ControlCount - 1 do begin
    if xiBg.Controls[i] is TEdit then begin
      (xiBg.Controls[i] as TEdit).Color := GetPixel(hdcDesktop, 71, xiBg.Controls[i].Top);
    end;
  end;
end;
Der bei Show ausgeführt wird. Diese TEdits haben folgende Position:
Top = 32 + (Edit - 1) * 16
Left = 72

Das sind 7 Edits die alle untereinander angeordnet sind.
Alle sind auf einem "xiPanel", welches eine Farbverlauf hat und mit diesem Code wollte ich den Pixelfarbwert von Edit.Top und Edit.Left - 1 (immer 71) nehmen... Nun funktioniert das auch schon einigermaßen ( :D )... Siehe Anhang... Ich kann mit das eigentlich nicht erklären... (Das 1. Edit kann man nicht erkennen ;) )

Sascha L 9. Aug 2006 06:50

Re: Farben spielen verrückt
 
Ich habe gerade kein Delphi offen, sodass ich mir die Funktion GetPixel anschauen kann, aber kann es vllt. sein dass du den übergebenen Wert (Koordinaten) erst mit ClientToScreen umrechnen lassen musst?

xZise 9. Aug 2006 08:40

Re: Farben spielen verrückt
 
Nein das ist es leider nicht!
Ich habe Top/Left der Form auf 0 gesetzt (fsNone) und es geht immernochnicht :( Schade...

Sascha L 9. Aug 2006 11:26

Re: GetPixel gibt fehlerhaften Wert zurück
 
Naja, auch wenn du es auf 0,0 setzt, ist es ja nun keine richtige Lösung. Wenn GetPixel die Koordinaten des Bildschirms meint, dann MUSST du die Umrechnungs-Funktion verwenden ;)

xZise 23. Aug 2006 07:42

Re: GetPixel gibt fehlerhaften Wert zurück
 
Zitat:

Zitat von Sascha L
Wenn GetPixel die Koordinaten des Bildschirms meint, dann MUSST du die Umrechnungs-Funktion verwenden ;)

Nicht immer!

Wenn Point(0, 0) die Koos des Fensters ist, dann muss ich es nicht umrechnen.

Was mir aufgefallen ist: Die Farbe, ist die Farbe der Fenster dadrunter. (Also sozusagen, das was man ohne den Fenster sehen würde)

Vielleicht liegts daran, dass das Fenster nicht die Mainform ist?

PS: Scheiß T-Online... Weil ich umgezogen bin habe ich 2 Wochen kein I-Net :( Total Müll, wenn man Programmiert...

xZise 25. Aug 2006 12:14

Re: GetPixel gibt fehlerhaften Wert zurück
 
Hat keiner eine Idee?

himitsu 25. Aug 2006 13:34

Re: GetPixel gibt fehlerhaften Wert zurück
 
Haste schonmal versucht ein Pixel zu zeichnen?

Also statt Auszulesen einen setzen und nachsehn wo das landet.

Neutral General 25. Aug 2006 13:40

Re: GetPixel gibt fehlerhaften Wert zurück
 
Vielleicht hilft das ja:

Delphi-Quellcode:
function TCanvas.GetPixel(X, Y: Integer): TColor;
begin
  RequiredState([csHandleValid]);
  GetPixel := Windows.GetPixel(FHandle, X, Y);
end;
So bekommt TCanvas seine Pixel :)

Gruß
Neutral General

himitsu 25. Aug 2006 13:52

Re: GetPixel gibt fehlerhaften Wert zurück
 
So hat er es ja schon (GetPixel).

Das RequiredState([csHandleValid]); sorgt nur dafür, daß ein entsprechendes Handle zur Verfügung steht ... anwenden kann und braucht er sowas aber nicht (beim Desktop).


hmmm, im Moment machst du es ja so:
Delphi-Quellcode:
GetPixel(GetWindowDC(GetDesktopWindow), ...);
versuch es mal so:
(ich hoffe ich irre mich grad nicht, aber gab GetDC(0) nicht das DesktopHandle zurück?)
Delphi-Quellcode:
GetPixel(GetDC(0), ...);

Neutral General 25. Aug 2006 14:05

Re: GetPixel gibt fehlerhaften Wert zurück
 
Also bei mir funktioniert

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  hDesk : HWND;
  hdcDesktop : HDC;
begin
  hDesk := GetDesktopWindow;
  hdcDesktop := GetWindowDC(hDesk);
  Form1.Color := GetPixel(hdcDesktop, 81, 961);
end;
wunderbar.
Nur ich glaube es liegt wirklich daran das wenn Controls[i].Top = 0... Dann kann die y Koordinate die du suchst 500 sein. Du musst es wirklich umrechnen.

Gruß
Neutral General


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:39 Uhr.
Seite 1 von 2  1 2      

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