![]() |
GetPixel gibt fehlerhaften Wert zurück
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe folgenden Code:
Delphi-Quellcode:
Der bei Show ausgeführt wird. Diese TEdits haben folgende Position:
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; 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 ;) ) |
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?
|
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... |
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 ;)
|
Re: GetPixel gibt fehlerhaften Wert zurück
Zitat:
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... |
Re: GetPixel gibt fehlerhaften Wert zurück
Hat keiner eine Idee?
|
Re: GetPixel gibt fehlerhaften Wert zurück
Haste schonmal versucht ein Pixel zu zeichnen?
Also statt Auszulesen einen setzen und nachsehn wo das landet. |
Re: GetPixel gibt fehlerhaften Wert zurück
Vielleicht hilft das ja:
Delphi-Quellcode:
So bekommt TCanvas seine Pixel :)
function TCanvas.GetPixel(X, Y: Integer): TColor;
begin RequiredState([csHandleValid]); GetPixel := Windows.GetPixel(FHandle, X, Y); end; Gruß Neutral General |
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:
versuch es mal so:
GetPixel(GetWindowDC(GetDesktopWindow), ...);
(ich hoffe ich irre mich grad nicht, aber gab GetDC(0) nicht das DesktopHandle zurück?)
Delphi-Quellcode:
GetPixel(GetDC(0), ...);
|
Re: GetPixel gibt fehlerhaften Wert zurück
Also bei mir funktioniert
Delphi-Quellcode:
wunderbar.
procedure TForm1.Button1Click(Sender: TObject);
var hDesk : HWND; hdcDesktop : HDC; begin hDesk := GetDesktopWindow; hdcDesktop := GetWindowDC(hDesk); Form1.Color := GetPixel(hdcDesktop, 81, 961); end; 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 07:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz