Newsgroup: it.comp.lang.c++
Titolo: System tray & C++Builder

Ciao,
Come posso fare in una applicazione creata col Builder per
1. togliere il pulsante dell'applicazione dalla taskbar (ie. per
   avere solo la finestra aperta senza il pulsante sotto)
2. avere solo un'iconina nel system tray quando l'applicazione
   viene ridotta ad icona
?
Bye,
    Wiz
E' un cretino illuminato da lampi di imbecillita'.

   viene ridotta ad icona
Bastera` gestire WM_SIZE (con wParam pari a
SIZE_MINIMIZED) nascondendo la finestra (e,
naturalmente, chiamare Shell_NotifyIcon cosi` da
aggiungere l'icona al tray e ottenere le callback
relative alle azioni di mouse dell'utente sull'icona).
Alex

    viene ridotta ad icona
Gestisci il messaggio WM_SIZE (l'evento OnResize credo proprio che venga
attivato solo per il resize vero e proprio, non per la riduzione a icona) usando
la funzione API Shell_NotifyIcon.
Volendo, trovi anche componenti freeware completi di sorgenti (ma scritti in
Object Pascal) sui principali siti dedicati a Delphi (ad esempio Torry's Delphi
Pages 
http://www.torry.ru
)
Saluti
Paolo

>    viene ridotta ad icona
 PA> Gestisci il messaggio WM_SIZE (l'evento OnResize credo proprio che
 PA> venga attivato solo per il resize vero e proprio, non per la riduzione
 PA> a icona) usando la funzione API Shell_NotifyIcon.
potresti dirmi come?
Ho provato a fare l'override di WndProc() nel mio oggetto TForm,
ma non arriva mai un messaggio WM_SIZE con Message.WParam ==
SIZE_MINIMIZE (<- o quello che e' :)
Inoltre, quando la finestra viene minimizzata non viene invocato
nemmeno il metodo Hide() ne' Resize().
Ho provato ad aggiungere un BEGIN_MESSAGE_MAP/END_MESSAGE_MAP col
messaggio WM_SIZE e una mia funzioncina, ma anche quella non
viene chiamata per la minimizzazione...
<sigh>
Bye
    Wiz
Il coraggio non mi manca... e' la paura che mi frega!


Gia`, non avevo tenuto conto della solita window nascosta rappresentata
dall'istanza gobale di TApplication (l'oggetto Application): e` questa che in
realta` viene minimizzata, il Form principale viene semplicemente nascosto. In
realta` l'evento da gestire e` Application->OnMinimize.
Puoi definire un gestore come metodo del Form:
void __fastcall TMyForm::Minimize(TObject* Sender)
{
    ..........
}
e nel costruttore del form lo assegni ad Application:
__fastcall TMyForm::TMyForm(TComponent* Owner)
: TForm(Owner)
{ 
    Application->OnMinimize = Minimize;
    ............
}
A proposito di gestione di messaggi: in casi come questi conviene usare
l'utility WinSight fornita con BCB per vedere quali messaggi vengono
effettivamente mandati alle varie windows
Ciao
Paolo

Ciao Paolo Aiello, guarda che scrivevi il 29-Gen-99 17:43:58 riguardo Re: System tray & C++Builder:
 PA> rappresentata dall'istanza gobale di TApplication (l'oggetto
 PA> Application): e` questa che in realta` viene minimizzata, il Form
 PA> principale viene semplicemente nascosto. In realta` l'evento da
 PA> gestire e` Application->OnMinimize.
Si, questo dopo un paio di tentativi l'avevo trovato nel manuale.
Ora m'e' rimasto solo un problemino: quando mi arriva il
messaggio perche' l'utente ha clickato sulla mia icona nel system
tray io faccio Application->Restore(); solo che la mia finestra
principale viene aperta *dietro* alle altre...
Anche con BringToFront() dopo Restore() non cambia nulla...
Bye
    Wiz
Vado a cambiarmi. Per fortuna ho conservato lo scontrino.

 Anche con BringToFront() dopo Restore() non cambia nulla...
Ma BringToFront lo usi con Application o col Form principale? Con Application
non dovrebbe avere effetto, col Form dovrebbe funzionare.
Se dovessi avere ancora problemi, riscrivi, ma INCLUDI IL CODICE.
Ciao
Paolo

> Anche con BringToFront() dopo Restore() non cambia nulla...
 PA> Ma BringToFront lo usi con Application o col Form principale? Con
ho provato con entrambi
 PA> Se dovessi avere ancora problemi, riscrivi, ma INCLUDI IL CODICE.
ora non l'ho su questo comp...
Bye,
    Wiz
Microsoft: Come rendere impossibile l'ovvio attraverso l'inutile.