![]() |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Zitat:
Warum klar kannst du die größe verändern. Unten in der rechten Ecke MouseDown und ziehen. gruss Emil |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Zitat:
|
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
@EWeiss: Okay, sorry, hatte ich nicht gesehen.
Habe nun das Problem gefunden. Man muss die Größe unter Picture.Graphic noch anpassen, dann geht es:
Delphi-Quellcode:
Danke an alle, die mir bei der Problemlösung geholfen haben :) :thumb:
Image1.Picture.Graphic.Width := Image1.Width;
Image1.Picture.Graphic.Height := Image1.Height; |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Nun kommt es wieder zum Problem mit der Transparenz :cry:
Ich kann auf das Bit vom Typ TBitmap32 nicht zeichnen :-( Wenn ich auf das Canvas zeichnen möchte kommt die Meldung "Zeichnen auf Leinwand nicht erlaubt". Wie mache ich das denn nun? |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Zitat:
Du hast ne Form und willst dieser ein aussehen ala Vista spendieren ? oder was! Wenn ja dann mach dir ein standart Picture in dem sich einzelne bereiche der Pictures welche du auf die Form setzen willst befinden. Dann kannst du über 2 API's auf ein Image kopieren. Das geht dann über BitBlt und StretchBlt gruss Emil |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Zitat:
|
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Okay, danke für den Hinweis, dass ich direkt auf die Funktionen Draw und DrawTo zugreifen muss.
Das habe ich nun gemacht und bin dann nach dem gewohnten Schema vorgegangen, doch leider ist es wohl nur "oberflächlich" gezeichnet werden. Die Form jedenfalls bleibt leer. Hier der Code:
Delphi-Quellcode:
procedure TfrmMain_Maske.FormCreate(Sender: TObject);
var Alpha : Boolean; I : Integer; ObenLinks, ObenMitte, ObenRechts, RandLinks, RandRechts, UntenLinks, UntenMitte, UntenRechts : TBitmap32; ObenLinksStream, ObenMitteStream, ObenRechtsStream, RandLinksStream, RandRechtsStream, UntenLinksStream, UntenMitteStream, UntenRechtsStream : TResourceStream; begin // Hintergrundbild erstellen Background := TBitmap32.Create; Background2 := TBitmap32.Create; // Formkacheln erstellen ObenLinks := TBitmap32.Create; ObenMitte := TBitmap32.Create; ObenRechts := TBitmap32.Create; RandLinks := TBitmap32.Create; RandRechts := TBitmap32.Create; UntenLinks := TBitmap32.Create; UntenMitte := TBitmap32.Create; UntenRechts := TBitmap32.Create; try // Formkacheln laden ObenLinksStream := TResourceStream.Create(Hinstance, 'ObenLinks', PChar('RC_DATA')); ObenMitteStream := TResourceStream.Create(Hinstance, 'ObenMitte', PChar('RC_DATA')); ObenRechtsStream := TResourceStream.Create(Hinstance, 'ObenRechts', PChar('RC_DATA')); RandLinksStream := TResourceStream.Create(Hinstance, 'RandLinks', PChar('RC_DATA')); RandRechtsStream := TResourceStream.Create(Hinstance, 'RandRechts', PChar('RC_DATA')); UntenLinksStream := TResourceStream.Create(Hinstance, 'UntenLinks', PChar('RC_DATA')); UntenMitteStream := TResourceStream.Create(Hinstance, 'UntenMitte', PChar('RC_DATA')); UntenRechtsStream := TResourceStream.Create(Hinstance, 'UntenRechts', PChar('RC_DATA')); LoadPNGIntoBitmap32(ObenLinks, ObenLinksStream, Alpha); LoadPNGIntoBitmap32(ObenMitte, ObenMitteStream, Alpha); LoadPNGIntoBitmap32(ObenRechts, ObenRechtsStream, Alpha); LoadPNGIntoBitmap32(RandLinks, RandLinksStream, Alpha); LoadPNGIntoBitmap32(RandRechts, RandRechtsStream, Alpha); LoadPNGIntoBitmap32(UntenLinks, UntenLinksStream, Alpha); LoadPNGIntoBitmap32(UntenMitte, UntenMitteStream, Alpha); LoadPNGIntoBitmap32(UntenRechts, UntenRechtsStream, Alpha); // FormSkin in Kacheln auf die Form zeichnen // Oben links Background.Draw(0,0, ObenLinks); // Oben Mitte for I := ObenLinks.Width to Self.ClientWidth-ObenRechts.Width do Background.Draw(I,0, ObenMitte); // Oben Rechts Background.Draw(Self.ClientWidth-ObenRechts.Width,0, ObenRechts); finally ObenLinksStream.Free; ObenMitteStream.Free; ObenRechtsStream.Free; RandLinksStream.Free; RandRechtsStream.Free; UntenLinksStream.Free; UntenMitteStream.Free; UntenRechtsStream.Free; end; SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED {or WS_EX_TRANSPARENT}); // WS_EX_TRANSPARENT macht das Fenster für Mausklicks transparent BlendF.BlendOp := AC_SRC_OVER; BlendF.BlendFlags := 0; BlendF.SourceConstantAlpha := 255; BlendF.AlphaFormat := AC_SRC_ALPHA; P := Point(0, 0); Size.cx := Background.Width; Size.cy := Background.Height; UpdateLayeredWindow(Handle, 0, nil, @Size, Background.Handle, @P, 0, @BlendF, ULW_ALPHA); Left := 0; Top := 0; end; |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Hatte die LoadPNGIntoBitmap32 - Aufrufe im Quellcode vergessen...dachte schon das Problem sei nun gelöst, aber leider gelingt mir das "Zusammensetzen" einer PNG-Datei mit anschließendem Zeichnen über UpdateLayeredWindow immer noch nicht. :cry:
Wenn jemand eine Idee hat einfach posten! |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
*push* :(
Keiner eine Idee oder eine Erklärung warum das nicht funktioniert? :cry: |
Re: [UpdateLayeredWindow] Vergrößerbare Form realisieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
so, ich bin inzwischen etwas weiter gekommen. Soweit funktioniert das Zeichnen, aber der Alpha-Kanal ist irgendwie nicht richtig. Sind das wommöglich die falschen Alpha-Bilder? Habe mal ein Beispiel geschrieben. Vielleicht kann sich das mal einer ansehen und mir einen Tipp geben, woran das liegt, dass das Bild nicht richtig transparent angezeigt wird. Wäre super, danke! Noch eine Info zum Beispiel: Mit den Pfeiltasten "Hoch" und "Runter" wird die Form in der Größe verändert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 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