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 PNG auf Layered Window zeichnen (https://www.delphipraxis.net/112326-png-auf-layered-window-zeichnen.html)

grasmann 18. Apr 2008 18:28


PNG auf Layered Window zeichnen
 
Hallo,

ich habe folgendes Problem:

Ich habe eine Form erstellt die Ich per UpdateLayeredWindow mit einem PNG ausgestattet hab. Jetzt will ich darauf aber noch ein PNG anzeigen lassen, welches natürlich auch richtig auf die Grundform geblendet wird. Leider weis ich nich wie ich das realisiere und hoffe dass mir dabei jemand helfen kann XD.

Ich hab das ganze mit einem TImage32 versucht. Das Bild wird auch angezeigt, allerdings blendet er nich richtig, sprich: Es steht ein hässlicher rosa Rand XD. Ist das mit nem Image32 überhaupt möglich?

So sieht der relevante Code aus:

Delphi-Quellcode:
Bit2 := TBitmap32.Create;
LoadPNGintoBitmap32(Bit2, ExtractFilePath(ParamStr(0)) + 'close_blend.png', Alpha);
bit2.Width := 86;
bit2.Height := 36;

img := timage32.Create(form1);
with img do
  begin
    Left := 112;
    Top := 6;
    Width := 86;
    Height := 36;
    Parent := form1;
    onclick := form1.PNGButton1Click;
    bitmap.Width := 86;
    bitmap.Height := 36;
    Bitmap.DrawMode := dmblend;
    Bitmap.CombineMode := cmblend;
  end;

bitblt(img.Bitmap.Handle,0,0,86,36,bit2.Handle,0,0,SRCCOPY );
Ich mach daran jetzt schon ewig rum XD ... aber ich kriegs einfach nich hin.

Ich hab das ganze auch schon versucht direkt auf die form zu zeichnen. Also so:

Delphi-Quellcode:
bitblt(form1.canvas.Handle,0,0,86,36,bit2.Handle,0,0,SRCCOPY );
Aber auch dann wird das Bild nicht richtig dargestellt, allerdings ist es dann nicht nur ein rosa Rand, sondern die gesamte Grundfläche des PNG´s ist schwarz (also die stellen die eigentlich transparent sein sollten).

Ich weis nich mehr weiter bitte helft mir XD.

turboPASCAL 18. Apr 2008 18:35

Re: PNG auf Layered Window zeichnen
 
Hi,

Auf die Schnelle...

Nicht bitBlt verwenden dondern die Draw- / DrawTo-Funktion der Unit Gr32
verwenden. Grund bitBlt kann kein Alphablend.

grasmann 19. Apr 2008 01:17

Re: PNG auf Layered Window zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für den Tipp. Habs jetzt mit Draw direkt auf das Bild gezeichnet bevor es quasi der Form attached wird:

Delphi-Quellcode:
form1.Label7.Caption := 'Close';
Bit2 := TBitmap32.Create;
LoadPNGintoBitmap32(Bit2, ExtractFilePath(ParamStr(0)) + 'close_blend.png', Alpha);
bit2.Width := 84;
bit2.Height := 58;

bit2.DrawMode := dmblend;
bit2.CombineMode := cmMerge;
Bit2.DrawTo(bit,114,-5);

bit2.free;
Und danach dann halt

Delphi-Quellcode:
UpdateLayeredWindow(Handle, 0, nil, @Size, Bit.Handle, @P, 0, @BlendF, ULW_ALPHA);
Ich denk so is das jetzt die günstigste Lösung.

Der Code ist jetzt sogar kürzer als vorher ... ich dachte eher der würde noch länger werden.

Ich hab das Ergebnis ma angehängt ^^

EDIT: lol ... wenn ich bei google 'delphi png layered' ( ohne Anführungszeichen ) suche, krieg ich den Thread hier an erster Stelle XD ... trifft sich gut ... ich hab mich zu dem Thema dumm und dämlich gesucht ... dabei war die Lösung jetzt so einfach >_<"

OldGrumpy 19. Apr 2008 07:45

Re: PNG auf Layered Window zeichnen
 
Boah, das sieht ja echt heiss aus... Wieviel Aufwand ist das?

Meta777 19. Apr 2008 12:11

Re: PNG auf Layered Window zeichnen
 
huhu...
Aus purer Neugier würde mich der Source auch sehr interessieren ^^ :stupid:
Sieht jedenfalls sehr schnieke aus...

Shalom

lbccaleb 19. Apr 2008 14:10

Re: PNG auf Layered Window zeichnen
 
Zitat:

Zitat von Meta777
huhu...
Aus purer Neugier würde mich der Source auch sehr interessieren ^^ :stupid:
Sieht jedenfalls sehr schnieke aus...

Shalom


dem schließ ich mich auch mal an, währe echt top wenn du den source noch hochladen könntest..

grasmann 19. Apr 2008 15:38

Re: PNG auf Layered Window zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Anleitung für das "Form Picture" hab ich hierher
http://www.delphipraxis.net/internal...ct.php?t=90749

Ich benutz darin die Komponenten PNGImage, Graphics32 und PNGButton, die solltet ihr also unbedint installiert haben

PNGImage
Graphics 32
PNG Button

Ich hab das Ganze auch noch mit´n paar Kommentaren versehen ... hoffe ma dass es im Großen und Ganzen verständlich is


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