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
Splash Screen Möglichkeiten
Re: Splash Screen Möglichkeiten
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
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
a²+b²=mc²
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Re: Splash Screen Möglichkeiten
Wie meinen?X360 Andy hat geschrieben:Es soll nicht bedienbar sein, DisableWindow finde ich nicht gut.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Re: Splash Screen Möglichkeiten
Wahrscheinlich mag er daran nicht, dass das Fenster weiterhin bedienbar aussieht.Fluid Byte hat geschrieben:Wie meinen?X360 Andy hat geschrieben:Es soll nicht bedienbar sein, DisableWindow finde ich nicht gut.
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.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Re: Splash Screen Möglichkeiten
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):
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
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
EDIT: Durch Links-Gedrücktkannst du es verschieben, um den Effekt zu sehen
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Splash Screen Möglichkeiten
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.
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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Re: Splash Screen Möglichkeiten
Theoretisch ist die Funktion gut, nur das man das Fenster nicht mehr bewegen kann / minimieren macht es unbrauchbar.Fluid Byte hat geschrieben:Wie meinen?X360 Andy hat geschrieben:Es soll nicht bedienbar sein, DisableWindow finde ich nicht gut.
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
Ob's 'ne API gibt... keine Ahnung... aber ohne API und Angabe eines ParentWindow beim Erstellen geht's ohne API.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.

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
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)