Splash Screen Möglichkeiten

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Splash Screen Möglichkeiten

Beitrag 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
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Splash Screen Möglichkeiten

Beitrag 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
a²+b²=mc²
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Re: Splash Screen Möglichkeiten

Beitrag von Fluid Byte »

X360 Andy hat geschrieben:Es soll nicht bedienbar sein, DisableWindow finde ich nicht gut.
Wie meinen?
Windows 10 Pro, 64-Bit / Outtakes | Derek
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Splash Screen Möglichkeiten

Beitrag 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.
"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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Splash Screen Möglichkeiten

Beitrag 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
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
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Splash Screen Möglichkeiten

Beitrag 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.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: Splash Screen Möglichkeiten

Beitrag 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
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Splash Screen Möglichkeiten

Beitrag 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. :mrgreen:

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