![]() |
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? |
Re: SplashScreen mit PNG?
Zitat:
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. |
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 ![]() |
Re: SplashScreen mit PNG?
Zitat:
Danach wird die Transpatent Eigenschaft bearbeitet. Und damit ist der "unschöne" Schatten zu sehen. Das wird praktisch mit dem TBitmap der TForm gemacht. |
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). |
Re: SplashScreen mit PNG?
Liste der Anhänge anzeigen (Anzahl: 1)
Hier die versprochene Demo.
Delphi-Quellcode:
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.
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; |
Re: SplashScreen mit PNG?
danke so gehts *g* danke
|
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.
|
Re: SplashScreen mit PNG?
Hallo,
Zitat:
Gruß xaromz |
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.
|
Re: SplashScreen mit PNG?
Hallo,
bau Dir doch einfach eine Ressourcenscript. EInfach eine Textdatei erstellen und Folgendes reinschreiben:
Code:
Das compilierst Du dann mit brc32.exe und fügst die Ressource Deinem Programm hinzu.
SPLASH IMAGE SplashScreen.tif
Gruß xaromz |
Re: SplashScreen mit PNG?
Hab' diese exe nicht. Ich benutz normalerweise den XN Resource Editor welcher auch ansonsten super ist, nur PNGs da streikt er. Naja nicht wirklich, aber führt nicht zum gewünschtem erfolg. Gibt es nicht noch einen anderen Resource Editor (freeware) oder ne möglichkeit das Bild von meinem TImage zu laden?
|
Re: SplashScreen mit PNG?
Hi Jonas,
Die BRCC32.exe solltest Du im Bin-Verzeichnis von Delphi finden ;) mfG mirage228 |
Re: SplashScreen mit PNG?
Das ist auch der Ort wo ich nachgeschaut habe. Anschließend nochmal die komplette Partionion abgesucht. Nicht da. ;)
|
Re: SplashScreen mit PNG?
Zitat:
mfG mirage228 |
Re: SplashScreen mit PNG?
Das mag sein, aber das ändert mein Problem nicht wirklich. Tatsache -> nicht da. Tatsache -> keinen plan wie ich das bild von meinem Image darein laden kann oder min. mit nem Resource Editor richtig importen kann.ö
|
Re: SplashScreen mit PNG?
|
Re: SplashScreen mit PNG?
Liegt das Problem darin, dass du es unbeding mit einem PNG versuchen willst oder liegt es darin, dass der Splashscreen nicht rechteckig sein soll?
Falls es rechteckig ist dann zeichne doch einfach das PNG auf den Canvas der Form und setze die Formgröße auf die größe des PNG's fest.. Kannst du PNGS nicht aufs Canvas zeichnen? Wenn du was anderes meinst tuts mir leid, bin neu hier :D |
Re: SplashScreen mit PNG?
äh, wieso finde ich bei mir keine GR32_PNG? Hab die neuste Version :?
|
Re: SplashScreen mit PNG?
Von was? Von den Graphikkomponenten? Wenn du die hast, dann überprüf mal deine Suchpfade.
|
Re: SplashScreen mit PNG?
Da runterladen und mit in den Graphics32 Ordner hauen.
![]() Bitteschön, Dankeschön, Wiedersehn. |
Re: SplashScreen mit PNG?
Ich möchte auch gerne ein kleines Projekt mit einem halbtransparentem Hintergrund machen...
wie komme ich denn an die hier benutzten Units(uses GR32, GR32_PNG;)dran? |
Re: SplashScreen mit PNG?
|
Re: SplashScreen mit PNG?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich beziehe mich auf dem beitrag #6 (demo von Khabarakh) und möchte diese technik für folgende app: hauptsächlich soll de user 3 formen zur gesicht bekommen: splash, eine grosse und eine kleine form, wobei nach dem verschwinden des splash screens nur mehr die grosse und kleine form zur verfügung steht und zwischen er beliebig wechseln kann. eine übersicht der klassenhierarchie wurde beigelegt. die grünen formen sollen anhand von png backgrounds dargestellt werden und sind nicht quadratisch und besitzen transparenz (grund warum ich mich für diese technik entschieden habe). ich habe bereits versucht diese technik einzubauen, jedoch bleiben die endformen(klein und gross) quadratisch, und nicht z.b. mit abgerundeter ecken. der grund für diese etwas kompliziertere struktur ist, dass die module untereinander kommunizieren können, bzw. die app ist multilanguage ausgelegt. das modul baseform beinhaltet die units pngimage, GR32, GR32_png die dafüt notwendig wären (wie in der demo) und deklariert eine funktion LoadPNG wo genau die funktionalität wie in der OnCreate von der demo drin steht. diese methode wird in der jeweilige oncreate methode von alle 3 besagten formen. was mache ich falsch ? ich würde mich sehr freuen wenn, jemand mir helfen könnte. Danke! |
Re: SplashScreen mit PNG?
Zeige einmal ein wenig Code und/oder Ist-/Soll-Zustand-Bilder. Eigentlich muss nur WS_EX_LAYERED gesetzt werden und nach jeder Veränderung des Bitmaps UpdateLayeredWindow aufgerufen werden, dann sollte alles funktionieren.
|
Re: SplashScreen mit PNG?
Hi, kingflo.
Dein Splash Screen sieht echt klasse aus. :-D Wie hast du das gemacht, dass dieses "HTML,.... im Hintergrund, nur so schwach erscheint und wo hast du die TPNGImage her? Thx, im Voraus. |
Re: SplashScreen mit PNG?
Lies dir sein Posting noch einmal durch und du wirst bemerken, dass der Screenshot überhaupt nicht "echt" ist, sondern höchstwahrscheinlich in einem Grafikprogramm erstellt wurde. Und lies noch ein wenig weiter, dann könntest du sogar zu der Stelle des Threads gelangen, an der ich beschreibe, wie sich so etwas doch realisieren lässt. Und wenn du dann auch noch in deine Addressleiste wechselst und dort "google.de" eintippst, ja... dann könntest du mit etwas Glück sogar TPNGImage finden.
|
Re: SplashScreen mit PNG?
thx. das TPNGImage habe ich gefunden, funzt auch.
Den Rest würde ich dann z.B. einfach über Photoshop machen. Thx. |
Re: SplashScreen mit PNG?
Also, ich habe mir mal deine Demo runtergeladen. Wenn ich die Datei Project1.dpr in meinem Delphi öffnen möchte, meckert er rum, dass im die Datei Project1.res fehlt. Und sry, aber ich bin zwar trotz einiger Delphierfahrungen, aus dem Schulinformatikkurs und ein paar Versuchen zuhause auch noch kein Delphi-Ass und weiß daher leider nicht, wie ich den Text in meine Form einbinde. Ich habe mal durch zufall einen code gefunden, der die Form transparent macht, aber bis auf Button leider auch Images, Panels, etc., die dann auch transparent werden und somit nicht sichtbar. Einfach kopieren geht ja nicht, da meckert Delphi bei jedem dritten Wort: "undeclared identifier"
Folgender Code macht das Formular transparent. [Bis auf Button]
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject); var FullRgn, ClientRgn, ButtonRgn: THandle; Margin, X, Y: Integer; begin Margin := (Width - ClientWidth) div 2; FullRgn := CreateRectRgn(0, 0, Width, Height) ; X := Margin; Y := Height - ClientHeight - Margin; ClientRgn := CreateRectRgn (X, Y, X + ClientWidth, Y + ClientHeight) ; CombineRgn(FullRgn, FullRgn, ClientRgn, RGN_DIFF) ; X := X + Button1.Left; Y := Y + Button1.Top; ButtonRgn := CreateRectRgn (X, Y, X + Button1.Width, Y + Button1.Height) ; CombineRgn(FullRgn, FullRgn, ButtonRgn, RGN_OR) ; SetWindowRgn(Handle, FullRgn, True) ; end; |
Re: SplashScreen mit PNG?
Was spricht denn dagegen, einen Screenshot zu machen, den in ein TImage zu laden über das ganze Form und die PNG drüberlegen.
|
Re: SplashScreen mit PNG?
Zitat:
Ich muss dich allerdings gleich enttäuschen: Ich kann dir gerne näher erklären, wie du einen statischen Splashscreen erstellst, aber auf diesem Windows-Controls einzusetzen ist unmöglich - dazu wirst du auch einige Threads hier im Forum finden. Bisher kenne ich nur eine einzige Library, die so etwas ermöglicht... und die ist nicht für Delphi. [edit] @pillic: Was dagegen spricht? Das Bewegen/Resizen der Form, andere Forms unter der Form, Active Desktop (:stupid:), ... [/edit] |
Re: SplashScreen mit PNG?
Active Desktop seh ich ja ein, aber wieso einen Splash resizen oder bewegen?
|
Re: SplashScreen mit PNG?
Es muss gar keine Aktion des Users sein, eine nette Animation im splash reicht ja schon. Denn statische Splashscreens sind ja ziemlich langweilig ;) .
Abgesehen davon bleibt immer noch das Problem mit darunterliegenden Fenstern bestehen. Gerade Programmierer besuchen ja äußerst selten ihren Desktop, sondern starten ein Programm lieber per Shortcut/Schnellstartleiste, während drei andere Programme schon den Bildschirm bedecken. |
Re: SplashScreen mit PNG?
Also Adobe macht's beim Splash von PS CS3 nicht anders. Hab es gerade mit WinAmp ausprobiert. Ca 20px um den um das Rechteck herum ist ein Schatten.
Der Teil der Laufschrift unter dem Schatten ist stehen geblieben der Rest lief weiter. |
Re: SplashScreen mit PNG?
Dann ist Adobe entweder zu faul, die paar Zeilen aus meinem Sample einzutippen und setzt lieber auf selbst zusammengeflickte Lösungen oder äußerst besorgt um seine Win98-User. Welche Vermutung nun auch immer zutreffen mag, ich greife lieber zur unkomplizierten Lösung. Erst recht, wenn die Form ein wenig komplizierter als ein Splash werden soll.
|
Re: SplashScreen mit PNG?
Liste der Anhänge anzeigen (Anzahl: 1)
Danke Khabarakh für deine Bereitschaft zu helfen !
Anbei das Rumpf der App. zur Beitrag #24 so sollte funktionieren: Der SplashScreen soll mit dem Starten der App angezeigt (Einblendeffekt) werden und für eine definierte Zeit sichtbarsein, dann soll er verschwinden (Ausblendeffekt). Am besten gleich komplett aus dem Speicher, und die MaxiForm soll angezeigt werden (Einblendeffekt). Der User wird dann zwischen MaxiForm MiniForm und Minimized to Tray wechseln können (Ein- und Ausblendeffekt soll immer vorhanden sein). Falls eine eifachere Lösung mit dem SplashScreen machbar ist, würde ich auch sehr dankbar sein. Wie man sehen kann, werden die Teile (sowohl in MaxiForm als auch in Splash) die eigentlich durchsichtig sein sollen, hellgrau dargestellt. Woran liegt das ? |
Re: SplashScreen mit PNG?
Puuh, ich habe jetzt doch ein ganzes Weilchen nach dem verflixten Bug suchen müssen.
Zum Glück habe ich in einem Akt abendlicher Verzweiflung schließlich einmal den Objektinspektor nach irgendwelchen störenden Eigenschaften durchsucht, und auf halbem Wege von "Action" nach "Width" scrollte die Lösung vor meine Augen: AlphaBlend = true. Diese Eigenschaft benutzt natürlich nichts Anderes als Layered Windows, um die Transparenz zu erzeugen, womit jeder eigene Aufruf von UpdateLayeredWindow wirkungslos gemacht wird. Durch simples Zurücksetzen des Wertes auf false erstrahlte endlich das gewünschte PNG in seiner vollen Pracht. Durch den PBlendFunction-Parameter (SourceConstantAlpha) kannst du aber AlphaBlendValue äußerst leicht selbst implementieren; du musst nur daran denken, nach jeder Änderung Update... aufzurufen. |
Re: SplashScreen mit PNG?
wo hast du die AlphaBlend Eigenschaft zurückgesetzt ?
in der uBaseForm oder in den Nachfolger dieser Klasse ? ich habe überall versucht, hat jedoch keinen Erfolg gebracht. als Zusatzinfo: ich kompiliere unter Vista Ultimate + D2007 könntest du bitte eventuell die funktionierende Variante hochladen ? thx a lot |
Re: SplashScreen mit PNG?
hat das wirklich niemand gelöst ?
ich habe jetzt höchstens den Splash richtig anzuzeigen geschafft, aber die MaxiForm funktioniert nicht... wäre sehr dankbar wenn jemand helfen könnte. danke! |
Re: SplashScreen mit PNG?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 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