![]() |
[UpdateLayeredWindow] Vergrößerbare Form realisieren
Hi,
ich habe eine Optionsform, die ich mit einem transparenten Rahmen zeichne lasse. Das mache ich so:
Delphi-Quellcode:
Das Problem hierbei ist nun, dass das Zeichnen der Form nur funktioniert, wenn die Form in der Größe nicht verändert werden kann. Wie kann ich mit diesem Prinzip Sizable Forms erstellen?
procedure TfrmOptionen_Maske.FormCreate(Sender: TObject);
var Alpha : Boolean; ResStream : TResourceStream; begin Bit := TBitmap32.Create; ResStream := TResourceStream.Create(Hinstance, 'BackOpt', PChar('RC_DATA')); try LoadPNGIntoBitmap32(Bit, ResStream, Alpha); finally ResStream.Free; end; SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED {or WS_EX_TRANSPARENT}); BlendF.BlendOp := AC_SRC_OVER; BlendF.BlendFlags := 0; BlendF.SourceConstantAlpha := 255; BlendF.AlphaFormat := AC_SRC_ALPHA; P := Point(0, 0); Size.cx := Bit.Width; Size.cy := Bit.Height; UpdateLayeredWindow(Handle, 0, nil, @Size, Bit.Handle, @P, 0, @BlendF, ULW_ALPHA); Left := frmOptionen.Left; Top := frmOptionen.Top; end; |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Was geschieht denn beim Vergrößern? Passt du währenddessen auch den Parameter "Size" an?
|
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Bisher mache ich noch nichts, da das Bild ja nur in einer fixen Größe vorlag. Ich hatte das Fenster 350x330 groß und dementsprechend war die PNG groß, welche dann auf die Maskenform gezeichnet wurde.
Nun soll sich aber die Größe der Form verändern lassen...und da liegt das Problem. :roll: |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Dann probier es doch einfach mal aus. Übergib Update[...] ein größeres Bitmap und passe entsprechend Size an. Ich habe es noch nie ausprobiert, aber das sollte eigentlich funktionieren, schließlich schafft das WPF auch.
|
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Das Problem ist ja aber, dass ich die neue Größe nicht kenne. Das heisst ein Bild von der neuen Größe muss "erstellt" werden. Länge der Titelleiste und der Rahmen muss ja bei einer größeren Form auch größer sein...weisst du was ich meine?
PS: Was ist WPF? |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Nein, ich verstehe nicht wirklich, was du meinst ;) . Nehmen wir mal an, das Fenster ließe sich durch Ziehen an der unteren rechten Ecke vergrößern. Dann musst dir die Mausposition beim OnMouseDown merken, aus der Differenz zur Position aus jedem OnMouseMove/Up kannst du dann die neue Größe des Fensters errechnen. Dann erstellst du ein Bitmap dieser Größe, füllst es mit deinem Fensterinhalt (wie auch immer dieser gestaltet sein mag) und rufst UpdateLayeredWindow auf.
|
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Okay, ich versuche es mal zu erklären. So ist mein Fenster zur Zeit aufgebaut:
Delphi-Quellcode:
Angenommen ich vergrößere das Fenster nun minimal, dann brauche ich ja schon ein komplett neues Bild, was ich auf die Form zeichne.
Icon ----- X
| | | | | | |----------|
Delphi-Quellcode:
Nun sind es 6 "-" in der Titelleiste anstatt 5. Dass auch der Rahmen "verlängert" werden muss, kann man ja auch erkennen. Ich kann also kein festes Bild nehmen, sondern muss Einzelteile erstellen. Nur wie bekomme ich die als PNG?
Icon ------ X
| | | | | | | | |-----------| Wenn du´s immer noch nicht verstanden hast, kein Problem. Dann versuche ich mal eine Grafik zu machen... |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Zitat:
|
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Okay, klingt logisch...werde ich die Tage mal austesten. Danke schonmal!
|
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Liste der Anhänge anzeigen (Anzahl: 1)
Ich muss nochmal nachfragen: Ich habe in meinem festen Fenster einen Schattenverlauf und somit benötige ja ein 32-Bit Bild als Alpha-Channel. Wie erstelle ich das?
Hier mal ein Teil der Beispielform: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 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-2025 by Thomas Breitkreuz