![]() |
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. |
Re: Anzeige einer halbtransparenten Grafik auf einem Formula
|
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.
|
Re: Anzeige einer halbtransparenten Grafik auf einem Formula
Achso, das ging aus deinem Post aber leider nicht hervor.
Edit: ich habe ![]() |
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:
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
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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