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

ciao
Come faccio a far eseguire un'azione nel caso venga premuto il tasto HELP
"?" ?
if Application.MessageBox('Work in progress',
'Information',  MB_ICONINFORMATION+MB_OK+MB_HELP) =IDHELP then
ShowMessage('help');
Riesco a farlo funzionare con gli altri(IDCANCEL,IDOK) ma non con IDHELP.
Forse perché MB_HELP non chiude la finestra?
grazie
erik



esatto, credo che tu debba intercettare il messaggio WM_HELP
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

non ho approfondito l'argomento quindi esempio rapido, sporco, ma 
funzionante:
(attenzione che ho usato Windows.MessageBox e non Application.MessageBox!!!)
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure WMHelp(var Msg: TWMHelp); message WM_HELP;
  public
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.WMHelp(var Msg: TWMHelp);
begin
  ShowMessage('help me!!!');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  {Windows.}MessageBox(Handle, PChar('Work in progress'),
    PChar('Information'), MB_ICONINFORMATION+MB_OK+MB_HELP);
end;


Grazie!!

 Grazie!!
cmq aspetta a ringraziarmi, visto che non abbiamo risolto granchč: ora ti 
trovi con due finestre di dialogo aperte e non sappiamo come chiudere la 
prima (quella coi bottoni "OK" e "?"). 
Infatti sembra che non sia facile recuperare l'handle della finestra di 
dialogo (quella creata con MessageBox).



Non só se é un buon metodo .. peró funziona
SendMessage(FindWindow(nil,'Information'),WM_CLOSE,0,0);
ciao
erik

 SendMessage(FindWindow(nil,'Information'),WM_CLOSE,0,0);
sì, in effetti credo che sia l'unico metodo possibile. 
Sarebbe stato più bello però poter fare questo:
1. impostare il titolo della dialog box a una stringa "assurda" (nel senso 
che è altamente improbabile che un'altra finestra abbia lo stesso titolo) 
tipo "£$%034545@#";
2. eseguire la FindWindow.
Infatti non si può dare sempre per scontato al 100% che in qualsiasi momento, 
nel sistema, ci sia una ed una sola window col titolo "Information".



Giusto ed é quello che ho pensato subito pure io e quindi ho provato a
chiamare la caption della form "Information"
e anche a Creare/Aprire una cartella con il solito nome ma sembra che
FindWindow prenda l'handle
dell'ultima finestra eseguita.
Quindi apparte alcune strane combinazioni credo si possa escludere la
possibilitá d'errore.
Magari per essere certi si potrebbe inserire uno di quei caratteri
invisibili tipo premendo ALT+0160
che non é un vero e proprio spazio come quello della spaziatrice.
ciao
erik

 prima (quella coi bottoni "OK" e "?"). 
Scusate, ma perchč dovete per forza chiudere la prima? Se mi metto nei panni
dell'utente, premo help perchč non so come comportarmi in quel caso, quindi
leggo la documentazione e in seguito posso scegliere per esempio tra ok e
cancel.
-- 
Lis
ICQ@Home #7317603sette     ICQ@Work #16285702tre
Mercatino: 
http://snurl.com/sito_lis
Aiuta la ricerca contro il cancro: 
http://snurl.com/ida_team

 esempio tra ok e cancel.
verissimo, ma nel caso di cui si stava discutendo c'era una finestra di 
dialogo con due soli tasti: "OK" e "?"


 dialogo con due soli tasti: "OK" e "?"
Per quanto mi riguarda, sempre parlando da utente, preferirei comunque dover
premere io l'ok quando lo riterrò opportuno.
Metti che il messaggio sia qualcosa del tipo: "l'operazione di compattazione
durerà alcuni minuti, premi ok quando vuoi procedere".
Io utente premo help perchè voglio sapere cosa sta per fare, magari mi
occupa la macchina per parecchio tempo e io voglio aspettare un pò perchè
nel frattempo preferisco fare altro
