Newsgroup: it.comp.lang.delphi
Titolo: ho 2 problemi, mi potete aiutare?

Io ho fatto un programma in delphi che modifica la risoluzione a
seconda di chi fa il login in windows XP, funziona tutto alla
meraviglia ma ci sono 2 punti che non riesco a fixare:
1) Quando uno fa il logout il programma, mentre si chiude, non esegue
le operazioni che gli dico, mentre se uno lo chiude manualmente
funziona tutto come deve, il logout di windows non chiude le
applicazioni? se non lo fa come fanno alcuni programmi a dire "non hai
salvato, vuoi salvare?" bloccando il logout?
2) Come ho detto il progamma modifica la risoluzione di windows, e la
ristabilisce al logout { o per meglio dire alla chiusura dal
programma... } se il PC viene usato non sucedono problemi, ma se il PC
viene lasciato inativo e parte lo screenserver non so perke
quest'ultimo rimette la risoluzione che cera prima del cambiamento {
esempio 800x600 } e quando il screensaver viene bloccato la
risuluzione rimane inalterata, avevo pensato a inserire un tasto
"restore" sul programma ma non è molto comodo... non c'è modo di
impedire allo screensaver di rimpostare la risoluziome?
Spero di essere stato chiaro se volete + detagli chiedete, vi posso
anche fornire il codice {sono poche righe... } ma non volevo
apesantire il messagio...
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
ICQ     : 67552596
-----------------------------------------------
Founder of MediaPlayer Project
http://mpp.iwebland.com

 salvato, vuoi salvare?" bloccando il logout?
Il tuo codice dovrebbe rispodnere all'evento OnCloseQuery.
Tu come fai?
Ciao
Massimiliano

 salvato, vuoi salvare?" bloccando il logout?
Ciao,
devi intercettare wm_endsession e wm_queryendsession.
Per la seconda domanda non so darti una risposta ma mi viene spontanea una
domanda: se lo screen saver rimette la risoluzione originaria, per logica il
sistema al nuovo riavvio, anche se alla chiusura della sessione non
reimposti la risoluzione come era prima, dovrebbe avviarsi con il suo
settaggio originario. Sei sicuro di usare le funzioni appropriate per il
cambio di risoluzione?
Ciao
Giuseppe


wrote:

Io uso la form close... uhm OnCloseQuery... che dif c'è?
cioè so che OnCloseQuery risponde "Posso chiudere la finestra" ma io
NON voglio far comparire il messagio "Vuoi salvare?" voglio salvare
punto e basta


cambio di risoluzione?
qui ti devo incolare un po' di codice :D  { cosa che volevo evitare }
piccolo record:
type
  TSR = Record
    Width  : Cardinal;
    Height : Cardinal;
  End;
funzione incriminata:
Function ChangeRes ( Width, Height : Cardinal ) : Boolean;
Var Dev : TDevMode; Chng : Integer;
Begin
  Dev.dmSize       := SizeOf(Dev);
  Dev.dmPelsWidth  := Width;
  Dev.dmPelsHeight := Height;
  Dev.dmFields     := DM_PELSWIDTH OR DM_PELSHEIGHT;
  Chng := ChangeDisplaySettings(Dev,0);
  ChangeRes := ( Chng = DISP_CHANGE_SUCCESSFUL) OR
(Chng=DISP_CHANGE_RESTART)
end;
funzione che cambia la risoluzine:
Procedure Scambia ( New : TSR; Var Old : TSR );
Begin
  Old.Width  := GetSystemMetrics( SM_CXSCREEN );
  Old.Height := GetSystemMetrics( SM_CYSCREEN );
  If NOT ChangeRes ( New.Width, New.Height )
    Then ShowMessage ( 'Impossibile cambiare risoluzione' );
End;
i cambiamenti di risoluzini li faccio in
procedure TForm1.FormCreate(Sender: TObject);
begin
  LoadSettings ( Defaut );
  Scambia ( Defaut, Old );
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Scambia ( Old, Defaut );
  SaveSettings ( Defaut );
end;
Load e Save Settings lavorano  con i registri di windows, mantendo un
valore di defaut per ogni utente


 ho la + pallida idea di come funzioni...
TForm1 = Class(TForm)
Private
Procedure MyEndSession(var MSG:TMessage); Message wm_EndSession;
end;
Implementation
Procedure TForm1.MyEndSession(var MSG:TMessage);
begin
...
end;
Dentro la procedura metti quel che ti serve e quel che il messaggio ti
impone di fare.
Per il dettaglio dei due messaggi, wm_QueryEndSession e wm_EndSession, dai
un'occhiata all'SDK di Windows fornito col tuo Delphi.
QueryEndSession ti chiede se Windows può essere chiuso. Se solo
un'applicazione dice di no, Windows non si chiude. EndSession viene chiamato
durante la fase di chiusura... proprio qui devi fare tutte le operazioni di
salvataggio dati e chiudere la tua applicazione.
Per la questione della risoluzione video, scusami, ma sono l'ultima persona
di cui puoi fidarti.
Non so cosa facciano le routines di modifica da te postate, ma, allo stesso
modo di come hai ricavato la risoluzione video con GetSystemMetrics, puoi
tentare di impostarla con SetSystemMetrics.
Ciao
Giuseppe