Newsgroup: it.comp.lang.delphi
Titolo: Ripristino applicazione 2

Ciao a tutti,
   forse ho trovato l'inghippo !!!!
 
Quello che riporto e' il sorgente di un progetto nuovo dove c'e' solo una 
form vuota.
di fatto quando viene eseguito si vede solo, appunto, una form vuota con i 
bottoncini di sistema.
 
program Project1;
 
uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
 
In questo caso tutto funziona benissimo, in accordo a quanto detto nella 
precedente discussione, quando la form viene abbassata o nascosta (mostra 
desktop), andando a cliccare nella title bar essa riappare.
 
Ma basta fare una piccola modifica di questo tipo
 
program Project1;
 
uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Run;
 
end.
 
dove
 
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, 
System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
 
type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
procedure run;
 
implementation
 
{$R *.dfm}
procedure run;
begin
  Form1:=TForm1.Create(Nil);
  try
   Form1.ShowModal;
  finally
   Form1.Free;
  end;
end;
 
end.
 
il tutto non funziona piu'.
 
Dato che io uso questa seconda strada da, praticamente, sempre ..... come mi 
devo comportare per avere il funzionamento corretto della title bar ???
 
Grazie per l'interesse
 
Ciao
 
Daniele
 
 
--- news://
freenews.netfront.net/
 - complaints: 
ne...@netfront.net
 ---

> Dato che io uso questa seconda strada da, praticamente, sempre ..... 
 
A parte che a ME questa tecnica fa vomitare..
Perche fai cosi? 
 
A.
 

 il tutto non funziona piu'.
 
Direi che manca tutto ciò che fa Application.run.
Ovvero, iirc, la gestione dei messaggi di sistema all'applicazione, il
che, imho, è *male*.
 
Direi che puoi facilmente ovviare identificando il messaggio che il
sistema invia quando clicchi sul pulsante della (non applicazione)
minimizzata e gestendolo nella coda di messaggi della form.
 
O, più opportunamente (imvho), lasciando all'applicazione ciò che è
dell'applicazione e ad una sua finestra ciò che le è proprio.
 
Saluti
Paolo Arosio

 il tutto non funziona piu'. 
 
La differenza e' evidente: non invochi Application.Run e non
chiami Application.CreateForm, quindi in pratica non colleghi 
in nessun modo la form all'oggetto Application. Non hai nemmeno
messo Application come owner della form quando la crei...
 
Quando windows invia all'applicazione i messaggi necessari a
riaprire le form, chiaramente Application non sa a chi deve 
inoltrarli. Suppongo che Application.MainWindow sia = nil.
 
Direi che devi ripristinare il collegamento. Se vuoi
tenere la procedura Run nella unit separata dal .dpr 
ti conviene togliere la tua creazione della form e metterci 
tutto il codice normalmente generato da delphi 
 
 
ciao
Giacomo 
 

Ciao a tutti,
    grazie per le risposte .....
 
Ho modificato il tutto e ..... va !
 
Grazie ancora per il sostegno.
 
Ciao
 
Daniele
 
PS: In effetti ci potevo arrivare ...... !!!!
