Seite 1 von 1
Splash Screen Möglichkeiten
Verfasst: 17.10.2010 12:09
von X360 Andy
Hallo PB Gemeinde,
ich habe ein Programm was ca. 20-30 Sekunden braucht zum laden, in der Zeit soll ein Splash Screen angezeigt werden.
Sowas habe ich bisher immer mit einem Extra Fenster realisiert, Grafisch.
Nun suche ich eine neue bessere Möglichkeit dem Benutzer zu zeigen das mein Programm etwas laden muss.
Ich würde gern ein transparentes Bild im Hauptfenster anzeigen was das Ganze Programm etwas dunkler macht während es lädt, Problem macht mir die Transparenz.
Es soll nicht bedienbar sein, DisableWindow finde ich nicht gut.
ImageGadget über das gesamte Fenster und mit HideGadget ein und ausblenden soweit eigentlich kein Problem.
Aber kennt ihr noch weitere Möglichkeiten sowas zu realisieren ?
Win only.
Gruß Andereas
Re: Splash Screen Möglichkeiten
Verfasst: 17.10.2010 13:31
von Kiffi
ich kenne eigentlich nur Programme, die den Splash-Screen alleine
anzeigen und nach dem Ladevorgang erst das Hauptfenster öffnen
(beispielsweise GIMP).
Wäre auch wesentlich weniger Aufwand als die von Dir überlegte Methode.
Grüße ... Kiffi
Re: Splash Screen Möglichkeiten
Verfasst: 17.10.2010 13:37
von Fluid Byte
X360 Andy hat geschrieben:Es soll nicht bedienbar sein, DisableWindow finde ich nicht gut.
Wie meinen?
Re: Splash Screen Möglichkeiten
Verfasst: 17.10.2010 13:47
von c4s
Fluid Byte hat geschrieben:X360 Andy hat geschrieben:Es soll nicht bedienbar sein, DisableWindow finde ich nicht gut.
Wie meinen?
Wahrscheinlich mag er daran nicht, dass das Fenster weiterhin bedienbar aussieht.
Ich würde wie Kiffi auch vorschlagen, ein extra Lade-Fenster anzuzeigen, bevor das Hauptfenster erscheint, denn das macht am meisten Sinn. Wozu sollte man 30 Sekunden (ist übrigends eine ziemlich lange Ladezeit wenn du mich fragst...) die Bedienelemente sehen, wenn man sie sowieso nicht benutzen. Außerdem macht es jedes andere große Programm genauso, sei es Photoshop, Video-Bearbeitung & Co.
Re: Splash Screen Möglichkeiten
Verfasst: 17.10.2010 13:48
von STARGÅTE
Tachchen,
habe gestern etwas ähnliches gesucht.
Nämlich wie ich ein LadeBild auf dem Desktop anzeige mit voller 32-Bit unterstützung (Alpha)
Quelle:
http://www.purebasic.fr/english/viewtop ... 12&t=39079
Hier ein verkleinertes Beispiel (wenn man das Bild schon vorher anpasst):
Code: Alles auswählen
Procedure WindowBackground(Window.i, Image)
Protected WindowID.i = WindowID(Window)
Protected ImageID.i = ImageID(Image)
Protected HDC.i = CreateCompatibleDC_(#Null)
Protected Object.i = SelectObject_(HDC, ImageID)
Protected Size.Size
Size\cx = ImageWidth(Image)
Size\cy = ImageHeight(Image)
Protected Point.Point
Protected Blend.BLENDFUNCTION
Blend\SourceConstantAlpha = 255
Blend\AlphaFormat = 1
SetWindowLong_(WindowID, #GWL_EXSTYLE, GetWindowLong_(WindowID, #GWL_EXSTYLE) | #WS_EX_LAYERED)
UpdateLayeredWindow_(WindowID, 0, 0, @Size, HDC, @Point, 0, @Blend, 2)
SelectObject_(HDC, Object)
DeleteDC_(HDC)
EndProcedure
InitNetwork()
ReceiveHTTPFile("http://data.unionbytes.de/bg.png", GetTemporaryDirectory()+"bg.png")
UsePNGImageDecoder()
LoadImage(1, GetTemporaryDirectory()+"bg.png")
OpenWindow(1, 0, 0, 256, 256, "Fenster",#PB_Window_ScreenCentered)
WindowBackground(1, 1)
Repeat
Select WaitWindowEvent()
Case #WM_LBUTTONDOWN
SendMessage_(WindowID(1), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
Case 258
End
EndSelect
ForEver
Wie du siehst, kann man beim Ladebild einen Bereich dann zu 50% transparent machen oder so, und dieses Fenster dann auf dein echtes legen ...
EDIT: Durch Links-Gedrücktkannst du es verschieben, um den Effekt zu sehen
Re: Splash Screen Möglichkeiten
Verfasst: 17.10.2010 14:46
von GPI
Mit Alpha-Sachen würd ich aufpassen, die können ziemlich resourcen Fressen (thema Netbooks).
Alternativvorschlag: Wie wäre es, wenn du das Hauptfenster verstecksts, sollange es nicht benutzbar ist. Das geht sowohl beim erstellen mit #pb_window_-Irgendwas (namen vergessen) als auch mit HideWindow()
Der VOrteil ist sogar, das wenn du ein Fester versteckst, es aufbaust, dann erst sichtbar machst, das es schneller geht, weil nicht dauernt neu gezeichnet werden.
Zum Flash-Screen - bitte unterlieg der Versuchung das als Sticky/Always on Top zu machen - es gibt nichts nervigeres.
Re: Splash Screen Möglichkeiten
Verfasst: 19.10.2010 20:36
von X360 Andy
Fluid Byte hat geschrieben:X360 Andy hat geschrieben:Es soll nicht bedienbar sein, DisableWindow finde ich nicht gut.
Wie meinen?
Theoretisch ist die Funktion gut, nur das man das Fenster nicht mehr bewegen kann / minimieren macht es unbrauchbar.
Ich habe nun eine Lösung gefunden indem ich einfach ein halb Trans. Bild inkl. Schrift über das Fenster zeige.
Problem dabei ist nur das wenn man ein Gadget im "Hintergrund" drückt, das dieses über dem Bild angezeigt wird.
Gibt es eine (API) Möglichkeit einen art "Z-Index" zu bestimmen ? So dass das Bild immer im Vordergrund ist, egal was der Benutzer drückt.
Die Ladezeit kommt durch verschiedene Schnittstellen zustande ( FTP ; COM ; und andere API´s - 20.000 Zeilen) , die Benutzer kennen es aber nicht anderes.
Lieber das Programm am Anfang viel rechnen lassen, damit es später ohne Verzögerung funktioniert.
Gruß Andreas
Re: Splash Screen Möglichkeiten
Verfasst: 22.10.2010 07:09
von Regenduft
X360 Andy hat geschrieben:Gibt es eine (API) Möglichkeit einen art "Z-Index" zu bestimmen ? So dass das Bild immer im Vordergrund ist, egal was der Benutzer drückt.
Ob's 'ne API gibt... keine Ahnung... aber ohne API und Angabe eines ParentWindow beim Erstellen geht's ohne API.
Code: Alles auswählen
OpenWindow(0,0,0,400,400, "0", #PB_Window_SystemMenu)
OpenWindow(1,0,0,400,400, "1", #PB_Window_SystemMenu, WindowID(0)) ; <- guckst Du hier: ParentID. ;-)
While WaitWindowEvent() <> #PB_Event_CloseWindow
Wend
Wenn Du Fenster 0 oder 1 fleißig verschiebst wirst Du feststellen, dass Fenster 1 immer im Vordergrund ist.