Autor |
Beitrag |
Mario Elßner
Hält's aus hier
Beiträge: 10
Win XP, Windows 7 64bit,
RAD Studio XE2
|
Verfasst: Sa 14.09.13 22:56
Hallöle,
hier im Forum gibt es ja schon 2-3 Beiträge über das Thema Farben erkennen und hier gibt es ja ein Script dafür delphi-treff.de/tipp...m-desktop-ermitteln/
Folgende function und abfrage mit Timer benutze ich:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function DesktopColor(const X, Y: integer): TColor; var C: TCanvas;
begin C := TCanvas.Create; try C.Handle := GetWindowDC(GetDesktopWindow); Result := GetPixel(C.Handle, X, Y); finally FreeAndNil(C); end; end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.DesktopColorTimer(Sender: TObject); var CursorPos: TPoint;
begin GetCursorPos(CursorPos); Panel1.Color:= DesktopColor(Mouse.CursorPos.X - Form1.Left, Mouse.CursorPos.Y - Form1.Top); end; |
allerdings habe ich das Problem das die Farbe nicht in in meinem Panel angezeigt wird. Woran liegt das bloß?
Kann mir da jemand weiter helfen was ich falsch mache?
Vielen Dank schon im voraus
|
|
Gerd Kayser
![Gerd Kayser hat insgesamt 77.4% On-Topic und 22.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Gerd Kayser hat insgesamt 77.4% On-Topic und 22.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Gerd Kayser hat insgesamt 77.4% On-Topic und 22.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Gerd Kayser hat insgesamt 77.4% On-Topic und 22.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Gerd Kayser hat insgesamt 77.4% On-Topic und 22.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Gerd Kayser hat insgesamt 77.4% On-Topic und 22.6% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![Gerd Kayser hat insgesamt 77.4% On-Topic und 22.6% Off-Topic Beiträge geschrieben. offtopic star](./graphics/ranks/star_offtopic_full.png)
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: So 15.09.13 06:01
|
|
jaenicke
![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 19277
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 15.09.13 06:59
Sorry, aber das ist doch Blödsinn... wofür der Canvas Overhead? Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function DesktopColor(const X, Y: integer): TColor; var DesktopDC: HDC; begin DesktopDC := GetDC(0); try Panel1.Color := GetPixel(DesktopDC, X, Y); finally ReleaseDC(0, DesktopDC); end; end; |
// EDIT:
Und für häufige Abfragen besser gleich so: 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:
| type TFormX = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure DesktopColorTimer(Sender: TObject); private FDesktopDC: HDC; end;
procedure TFormX.FormCreate(Sender: TObject); begin FDesktopDC := GetDC(0); end;
procedure TFormX.FormDestroy(Sender: TObject); begin ReleaseDC(0, FDesktopDC); end;
procedure TFormX.DesktopColorTimer(Sender: TObject); var CursorPos : TPoint; begin GetCursorPos(CursorPos); Panel1.Color := GetPixel(FDesktopDC, CursorPos.X, CursorPos.Y); end; |
// EDIT2:
Kann es schlicht sein, dass ParentBackground bei dem Panel gesetzt ist, so dass es nur den Hintergrund des Formulars anzeigt? Dann ist die Farbe logischerweise gar nicht zu sehen... das hätte allerdings der Debugger zeigen müssen, wenn die Farbe eigentlich richtig ermittelt wird... (denn korrekt sieht schon der erste Quelltext aus, abgesehen von der etwas seltsamen Positionsberechnung)
|
|
Mario Elßner ![Threadstarter Threadstarter](./graphics/viewtopic/threadstarter.png)
Hält's aus hier
Beiträge: 10
Win XP, Windows 7 64bit,
RAD Studio XE2
|
Verfasst: So 15.09.13 09:57
Ich bedanke mich schon mal bei eurer Hilfe und habe ebenfalls mal eure Varianten Probiert.
Ich habe im Timer interval =1 und ParentBackground = false stehen aber dennoch wird die ermittelte Farbe unter meiner Mouseposition nicht angezeigt.
Woran es liegt kein plan mehr habe auch feste XY Kords gesetzt auch da funktioniert es nicht.
Diese seltsamen Positionsberechnungen sollten eigentlich nur sein das die Kords aus dem aktiven Fenster nur innerhalb den Programms erfolgen soll und nicht vom gesammten Desktop.
|
|
IhopeonlyReader
![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: So 15.09.13 11:29
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function DesktopColor(const X, Y: integer): TColor; var C: HDC; begin C := GetWindowDC(GetDesktopWindow); Result := GetPixel( C, X, Y ); end;
procedure TForm1.DesktopColorTimer(Sender: TObject); var P: TPoint; begin GetCursorPos( P ); if (P.X>Form1.Left) and (P.X<Form1.Left+Form1.Width) and (P.Y>Form1.Top) and (P.Y<Form1.Top+Form1.Height) then Panel1.Color:= DesktopColor( P.X, P.Y); end; |
das funktioniert bei mir einwandfrei!
die if abfrage im timer habe ich eingeführt, da dadurch die farbe des Panels nur geändert wird, wenn die mouse sich auf dem Formular befindet (mit rand)
Nachtrag: Ändere mal manuell im Timer regelmäßig die Farbe und schau ob es passiert. Wenn du es nicht siehst, weißt du immerhin dass es an der Form und nicht an deinem vorliegenem Quelltext liegt.
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|
WasWeißDennIch
![WasWeißDennIch hat insgesamt 97.8% On-Topic und 2.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![WasWeißDennIch hat insgesamt 97.8% On-Topic und 2.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![WasWeißDennIch hat insgesamt 97.8% On-Topic und 2.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![WasWeißDennIch hat insgesamt 97.8% On-Topic und 2.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![WasWeißDennIch hat insgesamt 97.8% On-Topic und 2.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![WasWeißDennIch hat insgesamt 97.8% On-Topic und 2.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![WasWeißDennIch hat insgesamt 97.8% On-Topic und 2.2% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: So 15.09.13 11:48
Da hätte ich auch noch einen Vorschlag:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function DesktopColorAt(P: TPoint): TColor; var DC: hDC; begin DC := GetWindowDC(0); try Result := GetPixel(DC, P.X, P.Y); finally ReleaseDC(0, DC); end; end;
procedure TForm1.Timer1Timer(Sender: TObject); var Mouse: TPoint; R: TRect; begin GetCursorPos(Mouse); GetWindowRect(Handle, R); if PtInRect(R, Mouse) then Panel1.Color := DesktopColorAt(Mouse); end; |
Wie schon erwähnt muss aber ParentBackground des Panels auf false stehen.
|
|
jaenicke
![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![jaenicke hat insgesamt 87.9% On-Topic und 12.1% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 19277
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 15.09.13 11:54
Sonst häng doch einfach mal dein Projekt an. ![;-)](images/smiles/icon_wink.gif)
|
|
IhopeonlyReader
![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png) ![IhopeonlyReader hat insgesamt 96.6% On-Topic und 3.4% Off-Topic Beiträge geschrieben. ontopic star](./graphics/ranks/star_ontopic_full.png)
Beiträge: 600
Erhaltene Danke: 23
Delphi 7 PE
|
Verfasst: So 15.09.13 12:27
Ich gehe davon aus, dass er die Abfrage ob die Maus im Fenster ist falsch gemacht hat und es deshalb nie zum "panelfarbesetzten" kommt.
(sieht man ja an seiner Berechnung ![:D](images/smiles/icon_biggrin.gif) )
_________________ Sucht "neueres" Delphi
Wer nicht brauch was er hat, brauch auch nicht was er nicht hat!
|
|