Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Splash Screen PNG
anno2007 - Mi 08.12.10 16:00
Titel: Splash Screen PNG
Hey,
ich benutze Delphi XE. Also kann ich PNG Bilder direkt einbinden.
Jetzt würde ich gerne die Form unsichtbar machen und nur noch das Hintergrundbild als GUI benutzen.
Kann mir da vielleicht jemand einen Ansatz zeigen? Ich habe bis jetzt nur ein Beispiel mit BMP gesehen, mit dem ich allerdings nicht wirklich klar komme und dort wird der Alpha Channel nicht richtig unterstützt.
Wäre echt toll, wenn jemand einen Ansatz hätte.
Vielen dank,
anno2007
Gerd Kayser - Mi 08.12.10 16:32
anno2007 hat folgendes geschrieben : |
| Jetzt würde ich gerne die Form unsichtbar machen und nur noch das Hintergrundbild als GUI benutzen. |
Wenn ich Dich richtig verstanden habe, liegt das Bild auf dem Form1. Dann könnte man bei der Darstellung von Form1 Teile wegschneiden. Beispiel für ein Formular mit abgerundeten Ecken:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.FormCreate(Sender: TObject); var Rechteck : HRgn; begin Rechteck := CreateRoundRectRgn(0, 0, 640, 480, 60, 60); SetWindowRgn(Form1.Handle, Rechteck, True); end; |
In der Hilfe solltest Du unter dem Suchbegriff "CreateRoundRectRgn" Verweise auf weitere Funktionen finden. Damit könnte man dem Formular auch die Form eines Weihnachtsbaumes, eines Kreises oder gar eines Osterhasen geben. ;-)
anno2007 - Mi 08.12.10 17:20
Hey, ja, das ist schonmal ein Anfang. Ja, das Bild liegt auf der Form.
So ähnlich wird das auch hier gemacht:
http://www.delphi-central.com/BitmapShapedForm.aspx
Allerdings funktioniert das mit Alpha Channel nicht. Das erzeugt Kanten, ich bräuchte transparenz.
Ich hab jetzt noch was gefunden:
http://melander.dk/articles/alphasplash2/2/
Allerdings werden dort Bibliotheken benutzt. Ich bekomme nicht mal das Beispiel zum laufen.
Habt ihr noch ne idee?
Xion - Mi 08.12.10 17:30
Kommt drauf an wie lange du den Splash-Screen anzeigen willst, aber ich hab schon gesehen, dass der Splash Screen einfach nur hingemalt wird (sobald man ein Fenster drüberschiebt ist er weg). Das funktioniert, solange du den nicht 1min anzeigen willst.
anno2007 - Mi 08.12.10 21:56
Nee, das soll meine GUI werden.
Also ich will auch noch Controls drauf machen.
Splash Screen war vielleicht bisschen falsch gewählt :).
Gerd Kayser - Do 09.12.10 01:14
anno2007 hat folgendes geschrieben : |
| Habt ihr noch ne idee? |
Meinst Du das in etwa so, wie im folgenden Beispielprogramm? Das Bild zeigt übrigens meine Schäferhündin.
Hier noch der Source dazu:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
| unit Main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls;
type TForm1 = class(TForm) Button1: TButton; Image1: TImage; procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin Close; end;
procedure TForm1.FormActivate(Sender: TObject); begin while AlphaBlendValue < 255 do begin AlphaBlendValue := AlphaBlendValue + 1; Form1.Update; Sleep(20); end; Button1.Visible := true; end;
procedure TForm1.FormCreate(Sender: TObject); var Rechteck : HRgn; begin Rechteck := CreateRectRgn(17, 38, 560, 456); SetWindowRgn(Form1.Handle, Rechteck, True); end;
end. |
anno2007 - Do 09.12.10 14:41
Hmm,
ich meine das eigentlich so wie die Links die ich gepostet habe.
Also ich habe ein PNG mit Alpha Channel, das die GUI darstellen soll.
Allerdings komm ich damit gar nicht klar.
Aber danke schonmal für deine Bemühungen.
Gerd Kayser - Do 09.12.10 15:34
Nachfrage: Also besteht die GUI praktisch nur aus der 7 und dem Schriftzug "Delphi"? Und soll das dann wie in meinem Beispiel eingeblendet werden?
Jann1k - Do 09.12.10 15:54
In meiner Delphi Version hat eine TForm die Eigenschaft TransparentColor und TranspaentColorValue, wenn du BorderStyle auf bsNone setzt, kannst du damit genau das erreichen, was du vorhast. Scheint aber alles nicht sonderlich schnell zu sein.
anno2007 - Do 09.12.10 20:57
@Gerd Kayser
Das "Delphi 7" und der Schriftzug ist einfach ein Bild. Mein Bild später ist eine PNG Datei mit Alpha Channel, die ich als GUI benutzen will. Die Form soll auch nicht eingeblendet werden oder so, ich will nur das Bild als Hintergrund.
Das Bild soll meine GUI sein.
@Jann1k, damit bleibt aber die GUI bei mir irgendwie erhalten.
@elundril, das ist schon genau das was ich suche. Ich bekomme im Moment die gr32 nicht zum laufen unter Delphi XE, aber das bekomme ich schon noch hin.
Meine Hoffnung war halt, dass ich keine externe Bibliothek verwenden muss, weil Delphi PNG ja unterstützt.
Jann1k - Do 09.12.10 21:35
| Zitat: |
| @Jann1k, damit bleibt aber die GUI bei mir irgendwie erhalten. |
Mach mal nen Screenshot wie das aussieht, wenn du TransparentColor auf true setzt und TransparentColorValue auf die farbe deiner TForm (am besten beides auf was unbenötigtes wie clFuchsia setzen).
bummi - Do 09.12.10 23:17
meinst Du in der Art?
http://www.bummisoft.de/download/transtest.zip
ist Resizeable
die entscheidenden Codeteile sind
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| SetWindowLong(handle, GWL_EXSTYLE, exStyle or WS_EX_LAYERED);
With blendFunc do begin AlphaFormat := 1; BlendFlags := 0; BlendOp := AC_SRC_OVER; SourceConstantAlpha := 255 - FAlphaValue; end;
UpdateLayeredWindow(Handle, DC, @DestPoint, @winSize, Fbackimage.Canvas.Handle, @srcPoint,FSheetColor, @blendFunc, 2); |
Allerdings mußt Du Controls dann wenn selbst gemacht präparieren, wenn Fremd reinfaken...
anno2007 - Fr 10.12.10 00:56
Hey,
@Jann1k, es funktioniert nach deiner beschreibung, allerdings funktioniert die Transparenz im Bild nicht.
@bummi, das sieht echt gut aus!
Ich weis nur leider gar nicht wie ich das implementieren soll.
was is blendFunc?
Und wo muss SetWindowLong, UpdateLayeredWindow?
Ich danke echt für eure Gedult :) mit mir habt ihrs schon schwer.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!