Autor Téma: splashscreen  (Přečteno 6444 krát)

Vladimír

  • Host
splashscreen
« kdy: 05-07-2012, 11:21:23 »
Zdravím potřeboval bych pomoci se svojí aplikací
pokouším se do mé aplikace dát splashscreen ale pokaždě, když jí zapnu tak se nejdříve zobrazí forma, na které má být obrázek ale ten se ani nestihne načíst a aplikace se hned zapne.
Hlavní co mě vadí, že se zobrazí ta forma, chtěl bych aby se zobrazil jen obrázek a ne forma, na který se pak načte obrázek v mém případě se ani nenačte, protože start aplikace je moc rychlý.

zde zasílám aplikaci i se zdrojovým kódem
http://www.ulozto.cz/xr3ESWv/nechapu-rar

Děkuji všem za vaše odpovědi, už vážně nevím co s tím lámu si stím hlavu už druhý den projížděl jsem anglický stránky ale nikde tenhle problém neměli tak netušim kde může být chyba :(

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:splashscreen
« Odpověď #1 kdy: 05-07-2012, 12:00:28 »
to není žádná forma, ale formulář. Zajímalo by mě, kam na takové nesmysly lidi chodí.

Pokud je aplikace moc rychlá, tak ten splashscreen asi nemá význam - ten se dává proto, aby člověk nemusel koukat do prázdna, než se ten moloch načte.

Pokud chceš, aby byl obrázek chvíli vidět, tak třeba použít timer a po nějaké době formulář s obrázkem zavřít.

Pokud nechceš vidět okraje, tak si nastav borderStyle formuláře na bsNone, pak by se měl zobrazovat jenom jeho obsah bez okrajů, titulku, tlačítek atd.

Vladimír

  • Host
Re:splashscreen
« Odpověď #2 kdy: 05-07-2012, 12:19:00 »
teďka je ta aplikace rychla ale časem se zpomalí proto tam chci ten splashcreen ano chci aby byl ten obrázek vidět ale nechci aby byl vídět prazdnej formulář než se ten obrázek načte
(za tu formu se omlouvám)
a ten border style o tom vim to jsem si na internetu našel

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 256
  • Karma: 3
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:splashscreen
« Odpověď #3 kdy: 05-07-2012, 12:46:04 »
Neni treba pouzivat timer, staci prikaz Sleep()

Vladimír

  • Host
Re:splashscreen
« Odpověď #4 kdy: 05-07-2012, 14:23:12 »
díky všem funkce sleep pomohla jsem si neuvědomil že bych do uses mohl napsat windows aby ta funkce fungovala ......
a co se týče toho spoždění tak jsem to vyřešil černou obrazovkou :)

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:splashscreen
« Odpověď #5 kdy: 05-07-2012, 14:34:49 »
Neni treba pouzivat timer, staci prikaz Sleep()

předtím to chce ale zavolat něco překreslení, jinak se to objeví až po sleepu. A stejně bych tam sleep nedával - aplikace nebude reagovat (pokud není sleep v jiném threadu, ale to pak zas nemá v tomhle případě smysl)

Offline Jan Fiala

  • Hrdina
  • ****
  • Příspěvků: 256
  • Karma: 3
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:splashscreen
« Odpověď #6 kdy: 05-07-2012, 20:23:24 »
předtím to chce ale zavolat něco překreslení, jinak se to objeví až po sleepu. A stejně bych tam sleep nedával - aplikace nebude reagovat (pokud není sleep v jiném threadu, ale to pak zas nemá v tomhle případě smysl)

Prekresleni tam musi byt v kazdem pripade, i v pripade toho timeru.
Sleep jsem navrhnul pro testovaci ucely, aby se splashscreen ukazal, dokud bude aplikace stale "zatim hodne rychla". Ma stejny vyznam jako timer, ktery se mi tam zna v tomto pripade zbytecny.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1173
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:splashscreen
« Odpověď #7 kdy: 05-07-2012, 21:05:17 »
vpohode lze zobrazit splash a za 10s pomoci timeru zobrazit hlavni form bez toho, aniz by aplikace zamrzla jako u sleep

Offline surad

  • Nováček
  • *
  • Příspěvků: 38
  • Karma: 0
    • www.instaluj.cz
Re:splashscreen
« Odpověď #8 kdy: 06-07-2012, 12:06:44 »
Já to kdysi řešil takto (žádný timer ani sleep, opravdový start programu):

soubor: finance.dpr

program Finance;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Hlavni_Formular},
  ...

{$R *.RES}

{$E exe}

begin

  FormLoad := TformLoad.Create(Application);
  FormLoad.Show    (* Úvodní startovací okno *);
  Formload.Update ;


  Application.Initialize;
  Application.Title := 'Finanční manažer';
    FormLoad.Gauge.AddProgress (1); // frmload je spashscreen s progressbarem
    FormLoad.Gauge2.Position := FormLoad.Gauge2.Position +1; // melo by jit resit i pomoci ProgressBar1.NextStep;
  Application.CreateForm(TDataModule12, DataModule12); // vytvori se form
    FormLoad.Gauge2.Position := FormLoad.Gauge2.Position +1;
  Application.CreateForm(THlavni_Formular, Hlavni_Formular);
   ....


  FormLoad.Hide ; // skryti formulare
  FormLoad.Free ;   // uvolneni z pameti

  Application.Run; //a spusti se aplikace
end.


Radek Szurman

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:splashscreen
« Odpověď #9 kdy: 07-07-2012, 17:21:33 »
nevím, ale jako programátor bych se ke Sleep nikdy nesnížil, pokud to teda není ve threadu.  Takto se načítání app prodlouží vždy o daný čas.
Jo, už si vzpomínám, kdy jsem použil sleep. Měl jsem Command line applikaci a aby se hnedka nezavřelo cmd.exe okno, tak jsem tam dal nakonec sleep.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1559
  • Karma: 37
    • Pepak.net
Re:splashscreen
« Odpověď #10 kdy: 09-07-2012, 05:54:05 »
Jo, už si vzpomínám, kdy jsem použil sleep. Měl jsem Command line applikaci a aby se hnedka nezavřelo cmd.exe okno, tak jsem tam dal nakonec sleep.
To se už od dob Turbo Pascalu řeší takhle:
Kód: Delphi [Vybrat]
  1. Write('Stiskni ENTER...'); Readln;
Případně sofistikovaněji takhle:
Kód: Delphi [Vybrat]
  1. if DebugHook <> 0 then
  2.   begin
  3.   Write('Stiskni ENTER...');
  4.   Readln;
  5.   end;
« Poslední změna: 09-07-2012, 06:00:03 od pepak »

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1559
  • Karma: 37
    • Pepak.net
Re:splashscreen
« Odpověď #11 kdy: 09-07-2012, 05:58:59 »
Já to kdysi řešil takto (žádný timer ani sleep, opravdový start programu):
soubor: finance.dpr

Takhle to sice jde, ale znamená to, že se splashscreen zobrazí až v poměrně pozdní fázi programu. Lepší je mít formulář splashscreenu*) v samostatné unitě, instanci vytvořit a zobrazit v její sekci initialization a zničit někde v MainForm.OnShow**). Protože pak se splashscreen zobrazí velmi brzo (ještě než se začne spouštět hlavní program [=to, co je mezi begin a end v projektu], se spustí initialization všech unit, a to v pořadí, jak jsou unity postupně používány v [vnořených] uses sekce interface).

*) Je jedno, jestli jako DFM nebo jako ručně vytvářený formulář.
**) Samozřejmě zařídit, aby to zničení proběhlo jen při prvním OnShow, tj. nejlépe pomocí FreeAndNil.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1173
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:splashscreen
« Odpověď #12 kdy: 09-07-2012, 08:29:10 »
priznam se, ze  to zobrazuju stejne jak surad, a ukaze se to hned pri startu ;)

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1559
  • Karma: 37
    • Pepak.net
Re:splashscreen
« Odpověď #13 kdy: 09-07-2012, 10:05:58 »
priznam se, ze  to zobrazuju stejne jak surad, a ukaze se to hned pri startu ;)
To je samozřejmě otázka toho, jak moc unit používáš a jak moc složité sekce initialization mají. V mnoha případech si klidně vystačíš s implementací splashscreenu ve zdrojáku projektu. Obecně ale, pokud chci, aby se splashscreen zobrazil co nejdříve, bych ho měl mít v initialization některé unity, která se používá co nejdříve.

(A to mi připomíná, je vhodné celou práci se splashscreenem dát do try-except, aby případný problém se splashscreenem neznefunkčnil celou aplikaci.)

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:splashscreen
« Odpověď #14 kdy: 09-07-2012, 10:19:58 »
Možná by jste nepotřebovali tyto věci řešit, pokud by jste formuláře vytvářeli dynamicky :)

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1173
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:splashscreen
« Odpověď #15 kdy: 09-07-2012, 10:55:24 »
2 pepak:
ahaa, jo, ja initialization nepouzivam vubec ... proto to nema vliv :D

2 fala:
to sice jde, ale abys potom nekde nezapomel neco vytvorit, tak je to potreba vic hlidat ;)

Offline Fala

  • Plnoletý
  • ***
  • Příspěvků: 168
  • Karma: 2
    • Verze Delphi: XE2
    • Software pro poskytování technické podpory
Re:splashscreen
« Odpověď #16 kdy: 09-07-2012, 11:12:29 »
2 fala:
to sice jde, ale abys potom nekde nezapomel neco vytvorit, tak je to potreba vic hlidat ;)
tak pokud používáš datamoduly, tak je to trochu komplikovanější. Záleží na programovací technice.

RomanZ

  • Host
Re:splashscreen
« Odpověď #17 kdy: 10-07-2012, 10:14:01 »
Splashscreen je prasárna, jako uživatel je nesnáším.

Program, který startuje třeba 30 nebo 60 sekund, zasviní na tu dobu plochu splashscreenem. Jenže já mám přeci na ploše ikony a další okna, se kterými bych po tu dobu mohl pracovat. Ale to ne, splashscreen se zásadně dělá bez okrajů a zmenšovacích ikon, takže nejde po ploše potahat ani minimalizovat.

Akorát to otravuje lidem život.

Vývojáři by měli respektovat, že jejich program není na uživatelově počítači sám a že uživatel může a chce současně pracovat s dalšími.

A k tomu timeru, sleepu a podobným nesmyslům: když spouštím program, tak to přeci dělám proto, abych s ním mohl pracovat. Proč mám při každém spuštění zbytečně dlouho čumět na obrázek, který už jsem předtím stokrát viděl? Jestli už tam splash být musí, tak ať tam je skutečně jen tu nezbytnou dobu do spuštění programu. Že ho uživatel nestihne celý přečíst nemusí vadit. Dejte do programu do menu volbu "about", která zobrazí stejný obrázek, pokud se uživatel bude chtít kochat. Stejně by v každém programu taková volba měla být, neboť někde musíte uživateli ukázat verzi, autora, licenční podmínky apod.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:splashscreen
« Odpověď #18 kdy: 10-07-2012, 12:36:39 »
Proč splashscreen - některé aplikace startují dlouho, třeba desítky vteřin. Pak je dobré alespoň vědět, že se to spustilo. Že to nejde přesunout je zajímavý postřeh, ale minimálně se dá použít Ctrl-D a minimalizovat všechna okna. Nicméně když se spouští tyhle molochy, tak člověk stejně většinou nechce dělat nic jiného.

Offline < z >

  • Administrátoři
  • Guru
  • *****
  • Příspěvků: 1173
  • Karma: 44
    • Verze Delphi: 7, 2010
Re:splashscreen
« Odpověď #19 kdy: 10-07-2012, 14:21:13 »
2 RomanZ:
osobne taky splashscreen nemusim, ale je potreba nejak uzivatele informovat,
ze opravdu ten program spustil ... nekdy proste kliknes a nic, poklikas nekolikrat ...
a za 30 vterin tam mas 10x spusteny program ;)
takze jen neco maleho (progress), neco jako "on-top" a obri obrazek pres celou obrazovku bych taky nemusel ;)

hlucheucho

  • Host
Re:splashscreen
« Odpověď #20 kdy: 10-07-2012, 14:39:21 »
2 RomanZ:
osobne taky splashscreen nemusim, ale je potreba nejak uzivatele informovat,
ze opravdu ten program spustil ... nekdy proste kliknes a nic, poklikas nekolikrat ...
a za 30 vterin tam mas 10x spusteny program ;)
takze jen neco maleho (progress), neco jako "on-top" a obri obrazek pres celou obrazovku bych taky nemusel ;)

tak tohle zažívám s Google Chrome krátce po spuštění Windows :(

hu