Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi pixelfarbe außerhalb von form (https://www.delphipraxis.net/72868-pixelfarbe-ausserhalb-von-form.html)

any_key 8. Jul 2006 11:53


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...

mkinzler 8. Jul 2006 11:56

Re: pixelfarbe außerhalb von form
 
Da das desktop auch ein fenster ist, müßte es mit einem anderen fenster genausogehen.

SirThornberry 8. Jul 2006 11:56

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.

any_key 8. Jul 2006 12:07

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:
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;
kann ich den farbwert irgendwie speichern so das das panel beim start des programmes wieder genau die farbe hat die ich vorher eingelesen habe?

marabu 8. Jul 2006 13:24

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

Martin K 8. Jul 2006 13:34

Re: pixelfarbe außerhalb von form
 
Zitat:

Zitat von marabu
Wieder einlesen kannst du den Wert dann im Ereignis OnCreate() deiner Form. Zum Wegschreiben schaue dir mal die Funktion ColorToString() an.

Oder einfach als Integer speichern, z.B. in einer INI-Datei:
Delphi-Quellcode:
var Ini: TIniFile;

  //Einlesen, OnCreate:
  Panel1.Color := Ini.ReadInteger('Panel1', 'Color', clBtnFace);

  //Schreiben, OnClose:
  Ini.WriteInteger('Panel1', 'Color', Panel1.Color);

marabu 8. Jul 2006 13:52

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

Martin K 8. Jul 2006 14:05

Re: pixelfarbe außerhalb von form
 
Zitat:

Zitat von marabu
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

Ja natürlich, es geht auch so:
Delphi-Quellcode:
var Ini: TIniFile;

  //Einlesen, OnCreate:
  Panel1.Color := StringToColor(Ini.ReadString('Panel1', 'Color', 'clBtnFace'));

  //Schreiben, OnClose:
  Ini.WriteString('Panel1', 'Color', ColorToString(Panel1.Color));
Man spart sich sonst eben ein paar Umwandlungen und ein wenig Schreibarbeit beim proggen.
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]

marabu 8. Jul 2006 16:12

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 04:41 Uhr.

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