Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Anzeige einer halbtransparenten Grafik auf einem Formular (https://www.delphipraxis.net/96237-anzeige-einer-halbtransparenten-grafik-auf-einem-formular.html)

Zwixx 20. Jul 2007 15:06


Anzeige einer halbtransparenten Grafik auf einem Formular
 
Hi,

es wurde hier schon des öfteren über transparente Controls gesprochen, aber ich habe leider nichts gefunden was zu meinem Problem passt. Ich habe ein Formular, wo Panels, Edits, ... drauf sind. Nun möchte ich das ich dynamisch an diesen Editierfeldern ein Grafikelement zeichnen kann. Das funktioniert auch soweit ganz gut.

Allerdings habe ich das Problem das dadurch das ich dazu ein Panel benutze die Grafik als Rechteckiger Bereich angezeigt wird. Ich hätte es aber gerne das nur die Grafik angezeigt wird und alles darum transpanrent ist.

Gibt es eine Möglichkeit, das ein Panel eine andere Form als die rechteckige Form annimmt? Ich habe schon mit einem Transparenten Panel experimentiert, das funktioniert aber nicht korrekt, da mit der Zeit Grafikfehler entstehen.

Namenloser 20. Jul 2007 15:08

Re: Anzeige einer halbtransparenten Grafik auf einem Formula
 
Hi,

hast du dir mal Delphi-Referenz durchsuchenTImage und davon insbesondere die Eigenschaft Delphi-Referenz durchsuchenTransparent angeschaut?

Zwixx 20. Jul 2007 15:10

Re: Anzeige einer halbtransparenten Grafik auf einem Formula
 
Ja, leider bringt das aber nichts, da ein TImage kein TWinControl ist und deswegen nicht über andere Komponenten gezeichnet werden kann. Ein TImage besitzt kein WindowsHandle, deswegen kann es immer nur auf dem Element gezeichnet werden, das den Parent des TImage hat. Ich muss aber Teilweise über mehrere Panels hinweg zeichnen, da diese Nebeneinander sind.

Namenloser 20. Jul 2007 15:14

Re: Anzeige einer halbtransparenten Grafik auf einem Formula
 
Achso, das ging aus deinem Post aber leider nicht hervor.

Edit: ich habe das hier bei den Schweizern gefunden, vielleicht hilft dir das ja ein bisschen weiter. Du könntest z.B. per Scanline das Bild durchgehen und dann mit CreateRectRgn und CombineRgn (hieß das nicht so?) eine geeignete Form zusammenbasteln und dem Panel zuweisen.

Zwixx 23. Jul 2007 08:07

Re: Anzeige einer halbtransparenten Grafik auf einem Formula
 
Danke

hat mich noch ein wenig fummelei gekostet, aber jetzt funktioniert es.

für diejenigen, die das gleiche Problem haben... hier wie ichs gelöst habe:

Delphi-Quellcode:
procedure TForm.Button8Click(Sender: TObject);
var
  x, y : Integer;
  rgn, rgn2 : THandle;
  function icotobmp(Icon: TIcon): tbitmap;
  begin
    result := TBitmap.create;
    result.Width := Icon.Width;
    result.Height := Icon.Height;
    result.Canvas.Draw(0, 0, Icon);
  end;
begin
  rgn := CreateRectRgn(0, 0, pnl.Width, pnl.Height);

  with icotobmp(img.Picture.Icon) do
  begin
    for x := 0 to img.Width do
      for y := 0 to img.Height do
      begin
        if Canvas.Pixels[x, y] = Canvas.Pixels[0, 0] then
        begin
          rgn2 := CreateRectRgn(x, y, x+1, y+1);
          CombineRgn(rgn, rgn, rgn2, RGN_XOR);
          DeleteObject(rgn2);
        end;
      end;
    Free;
  end;
  setwindowrgn(pnl.Handle, rgn, True);
  deleteObject(rgn);
end;
Nachtrag: wie ich inzwischen herausgefunden habe, ist Icon.Width/Height nur ein 'Näherungswert'... deshalb aufpassen was man an Höhe und Breite des Icons hat... wenn man direkt ein Bitmap hat ist das eh egal


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 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