Autor Téma: splashscreen  (Přečteno 6443 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 :)