Newsgroup: it.comp.lang.delphi
Titolo: Aiuto su Splash Screen

Ho 'rubato' questa funzione:
--------------------------------------
const
  SplashWidth = 320;
  SplashHeight = 200;
  ProgramCaption = 'Splash demo';
var
  DesktopDC, MemDC:hDC;
  Bitmap: hBitmap;
  WindowClass: TWndClass;
type
  TSplash = class(TObject)
  private
    procedure Paint;
  public
    FDefWndProc: Pointer;
    FHandle: THandle;
    constructor Create;
    property DefWndProc: Pointer read FDefWndProc write FDefWndProc;
  end;
var
  Splash: TSplash;
function SplashWndProc(Window: HWND; Message, wParam, lParam: Longint):
Longint; stdcall;
begin
  if Message = $F then Splash.Paint; { $F = wm_Paint message}
  Result := Windows.DefWindowProc(Window, Message, wParam, lParam);
end;
constructor TSplash.Create;
begin
  WindowClass.lpfnWndProc := @SplashWndProc;
  WindowClass.hCursor := LoadCursor(0, IDC_Wait);
  WindowClass.hbrBackground := 0;
  WindowClass.hInstance := hInstance;
  WindowClass.lpszClassName := 'XS';
  Windows.RegisterClass(WindowClass);
  FHandle := CreateWindowEx(ws_ex_ToolWindow, 'XS', '', ws_Popup or
ws_Visible,
    GetSystemMetrics(sm_CXFullScreen) div 2 - SplashWidth div 2,
    GetSystemMetrics(sm_CYFullScreen) div 2 - SplashHeight div 2,
    SplashWidth, SplashHeight, 0, 0, HInstance, nil);
  Paint;
end;
procedure TSplash.Paint;
begin
  DesktopDC := GetDC(FHandle);
  MemDC := CreateCompatibleDC(DeskTopDC);
  Bitmap := LoadBitmap(hInstance, 'SPLASH');
  SelectObject(MemDC, Bitmap);
  BitBlt(DesktopDC, 0, 0, SplashWidth, SplashHeight, MemDC, 0, 0, srcCopy);
  DeleteObject(Bitmap);
  DeleteObject(MemDC);
end;
begin
  Application.Initialize;
  Application.Title := 'Seven';
  Splash := TSplash.Create;
  Application.CreateForm(TdmDati, dmDati);
  Application.CreateForm(TqrPrev, qrPrev);
  Application.CreateForm(TqrMsg, qrMsg);
  Application.CreateForm(TfrmUser, frmUser);
  Splash.FreeInstance;
  Application.Run;
--------------------------------------
Adesso ho il problema che se minimizzo la form principale sullo schermo mi
rimane la form dello splash non più ridisegnata insomma quello che ci passa
sopra lei cattura..
Come posso fare per togliermela di mezzo..
L'idea è parte lo splash, mi parte la form princ, appena è partita elimino
lo splash.
Ciao e grazie
--
Simone
Honda S2000 driver Blu/black 240cv
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.419 / Virus Database: 235 - Release Date: 13/11/2002

Simone wrote:
[CUT]
Vedi se questo link ti puo' essere utile (in fondo alla pagine ci sono due 
o tre link):
http://delphi.about.com/library/weekly/aa030999.htm
-- 
Ciao,
   Stefano

sopra lei cattura..
http://www.geocities.com/andrealaforgia/splash.zip

> Ho 'rubato' questa funzione:
Per rubato intendo che l'ho preso come esempio da un esempio su 
torry.net
messo li apposta per essere riutilizzato....
Piccola precisazione perchè credo che avete frainteso...
Ciao ora provo i suggerimenti ma io non vorrei creare la form a design-time
ma a run-time come l'esempio e poter utilizzare un file .res in modo da
poterlo riutilizzare in ogni mio programma senza fare modifiche....
Ci provo poi vi dico.. per il momento grazie..


ma a run-time 
Il mio codice la crea a run-time.

[CUT]
Grazie comunque ho trovato basta inserire questa bela righetta di codice e
pluf... la form sparisce....
Windows.DestroyWindow(Splash.FHandle);
Nel senso di creare a run-time intendo dire: nel tuo progetto (grazie) la
Form2 viene aggiunta al programma come Unit e ha dentro anche una image, nel
caso di quello trovato su torry il prg non prevede nessuna form addizionale
e tutto viene creato a run-time creo e disegno la form mentre il prog sta
girando....
Comunque grazie ancora per l'interessamento


girando....
Probabilmente non ci stiamo capendo.  Neanche nel progetto Delphi che
ti ho fatto vedere io viene creato nulla a design-time, ma il form
viene creato a run-time.  Non ti far trarre in inganno dal fatto che
c'e` una unit aggiunta al progetto, in sostanza il programma fa
esattamente cio` che fai tu usando le API, solo che e` mascherato
perche` vengono usate le classi VCL (a design-time esiste solo una
classe, a run-time esiste l'istanza della classe).  Per quanto
riguarda l'immagine, per semplicita` l'ho inclusa nel form, ma puoi
anche caricarla a run-time.  Generalmente io non tendo a complicarmi
la vita con le API, se posso ottenere lo stesso (migliore ?) risultato
usando le caratteristiche predefinite di Delphi.

[CUT]
Scusa non avevo capito ora riguardando il programma ho capito, ma quello che
volevo far capire io è che con il codice di Torry prendo faccio CTRL-C da un
progetto faccio CTRL-V su un'altro progetto, gli cambio il file res in prima
della compilazione e il gioco è fatto, come dal tuo esempio, funzionale
molto più veloce e 'semplice' non riesco a fare questa procedura in 2 sec,
ma devo creare la form e adattarla di volta in volta...
Spero di esseremi spiegato su cosa mi serviva....
CIAO e ancora grazie....


Spero di esseremi spiegato su cosa mi serviva....
Capisco, in ogni caso, puoi tenere le unit relative al form in una tua
cartella, le includi al nuovo progetto, copi e incolli il codice del
sorgente del progetto e il gioco e` fatto.


Effettivamente non hai tutti i torti..........
Grazie ancora
--
Simone
Honda S2000 driver Blu/black 240cv


 sorgente del progetto e il gioco e` fatto.
E se volessi scrivere sulla splash una label con le varie dll e form che si
stanno caricando?
Magari con una progressbar.... la funzione sleep non andrebbe piu' bene, no?
Ciao