Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi SplashScreen mit PNG? (https://www.delphipraxis.net/56517-splashscreen-mit-png.html)

kingflo 7. Nov 2005 09:42


SplashScreen mit PNG?
 
Liste der Anhänge anzeigen (Anzahl: 3)
...mm ich weiß gerade nicht wie ich meine Frage formulieren soll...

Also ich habe ein Bild (ein png) und möchte es als SplashScreen für ein Programm einsetzen. Ich habe mir auch schon TPNGImage installiert.

Problem ist folgendes: wenn ich das Bild auf eine Form Packe sieht es super aus. Jetzt muss das Form aber ja transparent gemacht werden also setze ich TransparentColor auf true und als Value die BGColor farbe. Das doofe ist jetzt, das auf dem Image die BG Farbe aus dem Form auch transparent wird und das Bild aber als PNG schon transparenz hat. Folglich nimmt das Bild Als Farbwert dann auch teilweise das eingestellte BGColor.

Ich weiß das ist jetzt irgendwie doff beschrieben, aber besser formulieren konnte ich es nicht. Am bessten seht ihr euch die Anhänge an dan versteht Ihr villeicht wo mein Problem ist.

Ich bräuchte im Prinzip ne möglichkeit das Image zu zeigen ohne es auf ein Form zu packen oder so....

Hat jemand eventuell eine Idee was ich machen kann, damit das ergebnis so wird wie es sein soll?

MaBuSE 7. Nov 2005 11:02

Re: SplashScreen mit PNG?
 
Zitat:

Zitat von kingflo
Ich bräuchte im Prinzip ne möglichkeit das Image zu zeigen ohne es auf ein Form zu packen oder so....

Zum einen mit der Eigenschaft Transparent kannst Du genau eine Farbe trasparent machen.
Du hast aber einen Schatten. Der Schatten besteht natürlich aus mehreren Abstufungen. Das geht nicht mit Transparent.

Außerdem möchtest Du dass Das Splasch duchsichtig wird.

Dazu kann man die Eigenschaft AlphaBlend verwenden.

Das Image soll aber nicht duchsichtig werden.
Ein einfacher Weg wäre ein weiteres TForm, dass nur das bild beinhaltet und mit Transparenz auch nur dieses anzeigt. (Alphablend := False)

Zeige nun das Splash und lege das Andere Form darüber.

Ist zwar nicht die beste Lösung, sollte aber funktionieren.

Khabarakh 7. Nov 2005 16:02

Re: SplashScreen mit PNG?
 
Aber wird dann nicht der Alphakanal ignoriert (bzw. nicht richtig mit dem Hintergrund geblendet)?
@kingflo: Mit nur einer Form geht es über die API-Funktion MSDN-Library durchsuchenUpdateLayeredWindow. Ich kann heute abend eine kleine Demo dazu machen.

MaBuSE 8. Nov 2005 07:16

Re: SplashScreen mit PNG?
 
Zitat:

Zitat von Khabarakh
Aber wird dann nicht der Alphakanal ignoriert (bzw. nicht richtig mit dem Hintergrund geblendet)?

Das PNG wird auf die TForm gemalt.
Danach wird die Transpatent Eigenschaft bearbeitet. Und damit ist der "unschöne" Schatten zu sehen. Das wird praktisch mit dem TBitmap der TForm gemacht.

Vjay 8. Nov 2005 08:48

Re: SplashScreen mit PNG?
 
Vom rein logischen her wirst du mit einer quasi reinen "WM_PAINT und Alphatransparent"-Lösung keine Chance haben. Die Erklärung dafür steht in den anderen Beiträgen.

Das Einzige was sauber funktionieren wird ist Khabarakhs Vorschlag, muss da was die Praxis anbelangt aber auch passen.
Du weist damit dem Window das PNG zu und Windows kümmert sich um die korrekte Darstellung Pixel für Pixel. TransparentColor und Alphatransparency sind eigentlich nur Untermengen dieser Funktion.
Eine weitere Möglichkeit das ganze auch < Win2k funktionieren zu lassen, ist es wie die meisten Adobe-Produkte zu machen. Erst Screenshot, dann Bild drauf und darstellen (war zumindest früher so).

Khabarakh 8. Nov 2005 15:21

Re: SplashScreen mit PNG?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier die versprochene Demo.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  Alpha: Boolean;
begin
  Bit := TBitmap32.Create;
  LoadPNGintoBitmap32(Bit, ExtractFilePath(ParamStr(0)) + 'test.png', Alpha);

  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 := Bit.Width;
  Size.cy := Bit.Height;

  UpdateLayeredWindow(Handle, 0, nil, @Size, Bit.Handle, @P, 0, @BlendF, ULW_ALPHA);
end;
Ich verwende hier für den Alphakanal die GR32-Lib (ist einfach einfach :wink: ), aber es ist natürlich auch per WinAPI/VCL möglich.

kingflo 10. Nov 2005 07:57

Re: SplashScreen mit PNG?
 
danke so gehts *g* danke

Jonas 31. Dez 2005 13:58

Re: SplashScreen mit PNG?
 
Ich wollte mal fragen ob man das Bild nicht auch irgendwie aus ner Imagelist oder aus nem TImage oderso auslesen lassen kann? Naja ich wollte halt nicht das die datei außerhalb ist sondern mit in meiner exe.

xaromz 31. Dez 2005 14:02

Re: SplashScreen mit PNG?
 
Hallo,
Zitat:

Zitat von Jonas
Ich wollte mal fragen ob man das Bild nicht auch irgendwie aus ner Imagelist oder aus nem TImage oderso auslesen lassen kann? Naja ich wollte halt nicht das die datei außerhalb ist sondern mit in meiner exe.

dann pack doch das Bild als Ressource in die exe und lade Dein Bild dynamisch beim Start.

Gruß
xaromz

Jonas 31. Dez 2005 14:03

Re: SplashScreen mit PNG?
 
Joa das würde ich ja gerne, aber mit dem Resource Editor den ich habe, geht das nicht. Ich kann zwar pngs hinzufügen, doch wandelt er diese dann in bitmaps um.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr.
Seite 1 von 6  1 23     Letzte »    

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