Entwickler-Ecke

Multimedia / Grafik - farbe einer komponente auf unsichtbarer form


Ironwulf - So 19.02.12 15:27
Titel: farbe einer komponente auf unsichtbarer form
heyho, ich bins mal wieder

ich starte mit aus einem programm heraus ein anders, mit dem parameter SW_HIDE
in dem anderen programm (ebenfalls von mir[also kann ich auch dort drin rumschreiben]) läuft eine twebbrowser komponente, wie kann ich in dem webbrowser eine farbe an einer bestimmten pixelposition erkennen? es ist leider nicht möglich den quelltext auszulesen und so an den farbwert zu kommen...

thx :)


jaenicke - So 19.02.12 15:45

Wenn das Formular, auf dem die TWebBrowser Komponente liegt, unsichtbar ist, wirst du da wenig Erfolg haben. Die wird dann nämlich nicht immer überhaupt dargestellt. Dementsprechend kommst du auch nicht unbedingt an die Farbwerte. Von Hardwarebeschleunigung und/oder Flash mal ganz abgesehen.

Ansonsten sollte das ganz normal über Canvas des Formulars gehen (Pixels[x, y] für einzelne oder Scanline für mehrere Pixelwerte).


Ironwulf - Di 21.02.12 13:21

na gut dacht ich mir schon fast das das nicht so einfach ist, aber fragen kost ja nix ;D
hab das ganze jetz ganz anders gelöst, zwar noch unschöner als die variante gewesen wäre aber macht ja nix, wenns läuft dann läufts ;D


bummi - Di 21.02.12 14:43

vielleicht hilft die das

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:
29:
30:
31:
32:
33:
34:
35:
36:
uses ActiveX;

procedure WebBrowserScreenShot(const AWebBrowser: TWebBrowser; bmp:TBitMap) ;
var
  viewObject : IViewObject;
  rect       : TRect;

begin
  Assert(Assigned(AWebBrowser.Document));
  AWebBrowser.Document.QueryInterface(IViewObject, viewObject);
  if Assigned(viewObject) then
    try
        rect := Classes.Rect(00, AWebBrowser.Width, AWebBrowser.Height);

        bmp.Height := AWebBrowser.Height;
        bmp.Width  := AWebBrowser.Width;

        viewObject.Draw(DVASPECT_CONTENT, 1nilnil, Application.Handle, bmp.Canvas.Handle, @rect, nilnil0) ;
    finally
      viewObject._Release;
    end;
end;

procedure TForm2.FormDblClick(Sender: TObject);
var
 bmp:TBitMap;
begin
  bmp:=TBitMap.Create;
  try
   Webbrowser1.visible := false;
   WebBrowserScreenShot(Webbrowser1,bmp);
   Image1.picture.bitmap.assign(bmp);
  finally
    bmp.Free;
  end;
end;