Newsgroup: it.comp.lang.delphi
Titolo: Difficile

Provo a fare una domanda difficile, probabilmente solo per me..
In una applicazione, ho una specie di scadenziario che, in presenza di 
scadenze imminenti, apre una finestra e ne mostra l'elenco e un estratto.
Funziona tutto bene, ma ovviamente se l'utente non apre il programma perchè 
è occupato con altro, possono sfuggirgli delle cose urgenti. Pertanto vorrei 
disancorarlo dal programma principale e fare in modo che la finestra venga 
aperta (o un avviso emesso) in modo indipendente.
Come si fà una cosa del genere ? Occorre un programma che parta all'avvio 
del computer per esempio ? C'è qualcuno che mi può indirizzare ? Grazie 

 ha scritto nel messaggio 
news:4cab5c25$0$27178$4faf...@reader4.news.tin.it...

Mi spiego un pò meglio: so come introdurre nel registro di windows 
l'applicazione che voglio avviare all'avvio. Non so come far sì che questa 
predisposizione avvenga senza intervento utente (per esempio potrei 
immaginare che lo fà il programma la prima volta che viene avviato). Vorrei 
mantenere la gestione dello scadenziario all'interno del programma 
principale, ma vorrei che l'utente sapesse che ci sono delle scadenze e 
emettere un messaggio per questo, con la possibilità contestuale di avviare 
il programma principale per la visione dei dettagli e la eventuale gestione. 
Non ho le idee molto chiare.. 

 ? Grazie
Come hai già intuito, un programma che faccia una cosa del genere esiste 
e si chiama servizio. Con delphi si possono implementare facilmente dei 
servizi di windows.
Se il mondo dei servizi ti spaventa, puoi anche fare solo un exe che 
viene lanciato ad ogni avvio del computer, si nasconde nella tray bar ed 
emette le notifiche quando necessario.
Per lanciare un programma all'avvio del computer devi scrivere una 
chiave nel registro di windows, un'articolo lo spiega qui:
http://delphi.about.com/od/delphitips2009/qt/delphi-vista-registry-run-on-startup.htm
Esempi di come scrivere e gestire i servizi win32 ne trovi tanti qui 
dentro, cerca nei post morde + servizio oppure vai a vedere su torry, su 
delphi3000
http://www.delphi3000.com/articles/article_3379.asp?SK=tservice
oppure
http://www.delphi3000.com/Search/Default.asp?Task=Search&SK=tservice&SC=1&RPP=25&ORDERBY=1
oppure
http://www.google.ch/search?q=delphi+tservice
ecc..
avevo anche scritto una unit per gestire tutti i servizi in un colpo 
solo ma non ricordo se l'ho postata sul ng oppure è rimasta abbandonata 
tra i solchi dell'HD del posto dove lavoravo anni addietro..
-- 
morde
D5,D6,D7
QT 4.7.0 - MingW- QT Creator 2.1

 viene lanciato ad ogni avvio del computer, si nasconde nella tray bar
..continuo a non capire queste paure su thread e servizi...
A.

 e si chiama servizio.
Alternativa semplice:
lanci un programmino all'avvio di windoZe o, meglio, all'avvio del
login utente, che si limita a mostrare le scadenze/allarmi di cui
parli e a fornire un pulsante per il lancio dell'applicazioni FULL.
Nel programma FULL, poi, in un form per la cfg. metti un pulsante del
tipo "installa autorun windoze". Nell'evento ci metti quanto indicato
nel link sotto per settare il registry in modo appropriato:
http://www.chami.com/tips/delphi/112796D.html
Ciao,
Gp
--
GP engineering and software
in...@gpsoftware.it
http://www.gpsoftware.it/

 ha scritto nel messaggio 
news:edc0c855-dccc-4df3...@c10g2000yqh.googlegroups.com...






Allora, so come far eseguire un programma all'avvio di windows, quindi 
potrei estrapolare dal mio programma principale la parte che si occupa di 
verificare se ci sono cose da segnalare e farne un programma separato che 
all'avvio di Windows fà questo controllo.
Ma questo non risolve tutto e mi chiedo come fare quanto segue:
- questo nuovo programma che verifica le condizioni, potrebbe non trovarle. 
In questo caso non dovrebbe nemmeno apparire all'utente. Come si fà questo ?
- se invece le condizioni ci fossero, il programma dovrebbe dare un segnale, 
o mostrare una sintesi o qualcosa, ma soprattutto contestualmente dovrebbe 
dare all'utente la possibilità di avviare il programma principale. Ma come 
chiudo quello che ha dato il segnale?  ( Se lancio un exe da un programma, è 
vero che ne posso eseguire un altro, ma alla fine torno al chiamante. O no 
?).

 chiamante. O no ?).
Ma non è più semplice se nel tuo programma prevedi il passaggio di un 
determinato parametro dalla riga di comando e, quando il programma viene 
avviato con il parametro (avvio di Windows) visualizza le scadenze e 
consente all'utente di proseguire con l'uso del programma oppure di 
chiuderlo; se invece viene avviato normalmente (senza parametro) si 
comporta come di consueto.
In questo modo hai sempre un solo software da gestire.
Giuseppe

 Giuseppe
Potrebbe essere un'idea. Ma vorrei non mostrare nulla all'utente se le 
condizioni non sono verificate. Quindi le domande sono due:
- Cosa occorre in un programma Delphi per gestire un parametro ?
- Si può evitare di mostrare la finestra d'avvio se le condizioni non si 
verificano? 

 verificano?
Ad entrambe le domande trovi risposta googland sul ng.
ciao


 ha scritto nel messaggio 
news:4cadcb1f$1...@news.x-privat.org...

E' possibile che non so come cercarlo. Io il newsgroup lo seguo con Windows 
Mail e la ricerca qui con <Trova> trova qualcosa sulla prima domanda e 
niente sulla seconda. Probabilmente per questa non so bene come porre la 
domanda. Potrei, per esempio, mettere nella unit .dpr il test delle 
condizioni prima che avvenga lo show del mainForm ?
Andando su google, c'è un indirizzo preciso per questo newsgroup ? 

 Andando su google, c'è un indirizzo preciso per questo newsgroup ?
http://groups.google.com/group/it.comp.lang.delphi/topics


 ha scritto nel messaggio 
news:4cade2e3$1...@news.x-privat.org...

Se posso mettere nella unit del progetto il test delle condizioni, allora 
non serve un programma separato. Ma nella unit.dpr non ci sono le sezioni 
uses, interface, etc. Infatti ho proivato a mettere un if , il richiamo alla 
funzione di test e uno showmessage e mi dà errore su tutto.
Quale struttura deve avere in questo caso il .dpr  ?
Normalmente ha:
Program MyProg;
  uses
    .... tutti i pas
 {$R *.RES}
  begin
    ....
  end.

 ha scritto nel messaggio 
news:4cade2e3$1...@news.x-privat.org...

Sto provando a inserire la logica nel .dpr. Ho provato ad agiungere alcune 
unit di Delphi  (windows, sysutils, etc.) in testo alla sezione uses dove 
sono elencati i .pas e funziona. Ho provato a richiamare una funzione 
contenuta in un'altra unit e viene eseguita fino a che non trova degli 
statements che trattano un dataset (una TTable definita in questa unit) e 
qui da Access violation. Forse perchè la TTable è conosciuta solo dopo 
creato il form di questa unit? A questo punto non so proseguire.
Anche volendo riprodurre questa funzione nel .dpr, come posso definire qui 
una TTable ? 

 posso definire qui una TTable ?
Normalmente devi eseguire il codice dopo aver creato il MainForm ma prima 
di visualizzarlo, così da avere i componenti creati ed inizializzati.
Se il test ti indica che puoi proseguire con l'applicazione visualizzi il 
MainForm e prosegui normalmente, altrimenti esci dall'applicazione ed hai 
finito senza aver fatto vedere nulla all'utente.
Per evitare di visualizzare automaticamente il MainForm usa 
Application.ShowMainForm.
Trovi qualcosa in: 
http://delphi.about.com/od/delphitips2008/qt/no_main_form.htm
Però ti consiglio di leggerti la relativa documentazione della Borland/
Codegear/Embarcadero/ChiSaràIlProssimo
Giuseppe

Allora,
1) Sai come lanciare un programma in autostart
2) Lanci il tuo _unico_ programma in autostart con il parametro /
quello_che_vuoi.
3) La faccio semplice (si può fare meglio):
Nell'evento OnCreate del tuo form principale controlli questo param.
Se non c'e' prosegui normalmente. Se c'e' fai i tuoi controlli.
Se i controlli indicano che che non ci sono allarmi, lanci un bel
application.exit. Se invece devi mostrare a video qualcosa, fai un bel
showmessage('controllare le scadenze!') e poi fai proseguire il
programma normalmente come quando lo lanci senza il param a linea di
comando.
