![]() |
pixelfarbe außerhalb von form
aloah
ich würde gerne mithilfe eines programms den rgb farbwert eines bestimmten pixels auslesen allerdings soll sich dieser pixel nicht innerhalb des programmes selbst befinden ich hab schon ne bisschen rumgegoogelt und hab dabei nur ne möglichkeit gefunden eine farbe vom desktop auszulesen - allerdings soll sich der auszulesende pixel in einem anderen programm befinden wäre echt doll wenn mir wer dabei helfen könnte... |
Re: pixelfarbe außerhalb von form
Da das desktop auch ein fenster ist, müßte es mit einem anderen fenster genausogehen.
|
Re: pixelfarbe außerhalb von form
das Pixel vom Desktop ermitteln beinhaltet die Programme welche gerade an der Stelle liegen. Man bekommt also streng genommen nicht das pixel vom Desktop sondern das was auf dem Bildschirm an der Stelle ist (mal DirectX etc. ausgenommen).
Wenn du jedoch wirklich das aus einem anderen Programm haben willst dann wäre interessant wie du das Fenster des anderen Programmes ermittelst. Wenn du das Fenster-Handle des anderen Programmes hast kannst du mit dem entsprechenden Befehl das Fenster auf eine eigene Canvas printen lassen und dann von der Canvas das Pixel auslesen. |
Re: pixelfarbe außerhalb von form
hey das scheint so zu gehen... (hätte ichs ma vorher ausprobiert)
hab doch noch mal ne frage also ich hab jetzt folgendes
Code:
kann ich den farbwert irgendwie speichern so das das panel beim start des programmes wieder genau die farbe hat die ich vorher eingelesen habe?
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 c.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var Pos: TPoint; begin GetCursorPos(Pos); Panel1.Color := DesktopColor(Pos.X, Pos.Y); end; |
Re: pixelfarbe außerhalb von form
Ja sicher kannst du einen Farbwert speichern und wieder einlesen. Zum Speichern hast du verschiedene Möglichkeiten: TMemIniFile, TRegistry, ...
Wieder einlesen kannst du den Wert dann im Ereignis OnCreate() deiner Form. Zum Wegschreiben schaue dir mal die Funktion ColorToString() an. Grüße vom marabu |
Re: pixelfarbe außerhalb von form
Zitat:
Delphi-Quellcode:
var Ini: TIniFile;
//Einlesen, OnCreate: Panel1.Color := Ini.ReadInteger('Panel1', 'Color', clBtnFace); //Schreiben, OnClose: Ini.WriteInteger('Panel1', 'Color', Panel1.Color); |
Re: pixelfarbe außerhalb von form
Hallo Martin,
wenn man den Farbwert als String wegschreibt, kann man ihn auch ohne Taschenrechner interpretieren, wenn man mal in die Datei reinschaut. Aus ähnlichen Gründen hat XML seinen Siegeszug rund um die Welt angetreten. marabu |
Re: pixelfarbe außerhalb von form
Zitat:
Delphi-Quellcode:
Man spart sich sonst eben ein paar Umwandlungen und ein wenig Schreibarbeit beim proggen.
var Ini: TIniFile;
//Einlesen, OnCreate: Panel1.Color := StringToColor(Ini.ReadString('Panel1', 'Color', 'clBtnFace')); //Schreiben, OnClose: Ini.WriteString('Panel1', 'Color', ColorToString(Panel1.Color)); Wenn's aber um die bessere Lesbarkeit und Übersicht in der INI geht, dann sollte man es so machen. [OT] Ich finde, man sollte in INI's generell nichts von Hand rumpfuschen und deshalb muss hier auch nichts übersichtlich drin stehen. Deshalb bevorzuge ich die Integer-Variante - meine Meinung :wink: [/OT] |
Re: pixelfarbe außerhalb von form
Martin, dass kannst du in deinem zarten Alter nicht wissen, aber INI-Dateien sind damals speziell als frühe Form der Mensch-Maschine-Schnittstelle erfunden worden. Eher ist das Beschreiben einer INI-Datei durch ein Programm als Sündenfall anzusehen.
Freundliche Grüße marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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