Delphi 5 - comando dopo taskbar

di il
25 risposte

25 Risposte - Pagina 2

  • Re: Delphi 5 - comando dopo taskbar

    gabbiano ha scritto:


    Strana cosa, tra i WM_SYSCOMMAND esiste:

    SC_CLOSE, SC_CONTEXTHELP, SC_DEFAULT, SC_HSCROLL, SC_KEYMENU, SC_MAXIMIZE, SC_MINIMIZE, SC_MOUSEMENU, SC_MOVE, SC_RESTORE, SC_SIZE ecc ecc ecc

    ma non esiste un "SC_RESTOREFROMTASKBAR" (è un nome inventato da me come esempio), ovvero quando l'applicazione è minimizzata nella taskbar e poi la si fa riapparire cliccando sul pulsante sulla taskbar relativo all'applicazione.
    che io sappia è SC_RESTORE, però dovresti dirci il motivo di tale domanda.
  • Re: Delphi 5 - comando dopo taskbar

    Le tre icone in alto a destra, tipiche di ogni finestra sono: (da sinistra a destra)

    Minimizza (con l'icona di un underscore)
    Riduci/Massimizza (se ridotto è un quadrato ...e se massimizzato sono due quadratini sovrapposti)
    Chiudi (è una X)

    SC_RESTORE funziona solo quando "riduco" da un "massimizza" (e quindi quando uso il Riduci/Massimizza)

    MA... se uso il "Minimizza" (ovvero il pulsante con l'underscore) e quindi l'applicazione rimane presente solo come pulsante nella taskbar ...E POI, clicco sul pulsante della taskbar per far riapparire l'applicazione ...SC_RESTORE non va
  • Re: Delphi 5 - comando dopo taskbar

    gabbiano ha scritto:


    Le tre icone in alto a destra, tipiche di ogni finestra sono: (da sinistra a destra)

    Minimizza (con l'icona di un underscore)
    Riduci/Massimizza (se ridotto è un quadrato ...e se massimizzato sono due quadratini sovrapposti)
    Chiudi (è una X)

    SC_RESTORE funziona solo quando "riduco" da un "massimizza" (e quindi quando uso il Riduci/Massimizza)

    MA... se uso il "Minimizza" (ovvero il pulsante con l'underscore) e quindi l'applicazione rimane presente solo come pulsante nella taskbar ...E POI, clicco sul pulsante della taskbar per far riapparire l'applicazione ...SC_RESTORE non va
    Qui di seguito gli eventi interessati :

    SC_RESTORE = quando clicchi sull'icona con i 2 quadratini
    SC_MAXIMIZE = quando clicchi sul quadrato grande
    SC_MINIMIZE = quando clicchi sull'underscore

    ma nessuno di questi viene attivato fai riapparire l'applicazione dalla taskbar, per fare ciò devi utilizzare l'evento onPaint che viene scatenato nel tuo caso, anche se non conosco realmente le tue esigenze. Come già accennato l'evento onPaint è sempre da valutare nel suo utilizzo.

    Altre soluzioni non mi vengono in mente.
  • Re: Delphi 5 - comando dopo taskbar

    Vedi? lo dicevo io "strana cosa".

    le mie esigenze sono molto semplici, le ho esposte più volte durante il thread:

    mi deve comparire uno ShowMessage, quando (come hai scritto tu) "riappare l'applicazione dalla taskbar"

    sì, in effetti l'onPaint sembra essere l'unico, anche se crea problemi.

    in ogni caso ho già risolto con onShow (after system tray) e con il Restore (after maximize) visto che anche in quei casi avevo bisogno che si appalesasse lo ShowMessage.

    grazie Doctorj. grazie a tutti, passo e chiudo
  • Re: Delphi 5 - comando dopo taskbar

    gabbiano ha scritto:


    Le tre icone in alto a destra, tipiche di ogni finestra sono: (da sinistra a destra)

    Minimizza (con l'icona di un underscore)
    Riduci/Massimizza (se ridotto è un quadrato ...e se massimizzato sono due quadratini sovrapposti)
    Chiudi (è una X)

    SC_RESTORE funziona solo quando "riduco" da un "massimizza" (e quindi quando uso il Riduci/Massimizza)

    MA... se uso il "Minimizza" (ovvero il pulsante con l'underscore) e quindi l'applicazione rimane presente solo come pulsante nella taskbar ...E POI, clicco sul pulsante della taskbar per far riapparire l'applicazione ...SC_RESTORE non va
    Sei sicuro di questo?
    Prova a creare un'applicazione con solo la form e solo la procedure WMSysCommand e poi prova a iconizzarla (minimizza) e successivamente clicca sulla taskbar per vedere cosa succede. A me così funziona e il WParam del WMSysCommand è SC_RESTORE
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
      TForm1 = class(TForm)
      private
        { Private declarations }
        procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
    begin
      if (Message.CmdType and $FFF0 = SC_RESTORE) then
        ShowMessage('ciao');
      inherited;
    end;
    
    end.
  • Re: Delphi 5 - comando dopo taskbar

    Provato. sempre le stesse procedure. mi funziona solo quando lo Riduco da Massimizzato, e non "successivamente alla cliccata sulla taskbar". dovrò testarla su un altro pc, evidentemente il problema è il mio vecchio windows xp, non so
  • Re: Delphi 5 - comando dopo taskbar

    L'unica differenza tra il tuo e il mio source è la presenza di Variants nelle Uses. se lo aggiungo mi da l'errore nel variants.pas
  • Re: Delphi 5 - comando dopo taskbar

    Ah beh se ancora usi XP allora si spiegano le "stranezze".
    Ti confermo che su w7 e w10 32 e 64 bit si comporta come ti ho detto
  • Re: Delphi 5 - comando dopo taskbar

    Metti sulla form vuota un TMemo e modifica la funzione in modo da mettere nel memo il messaggio scatenato, qualcosa tipo:
    
    function TForm1.Myfunction(s: String): Boolean;
    begin
      Memo1.Lines.Add(s);
    end;
    ......
    
      case Message.CmdType and $FFF0 of
        SC_RESTORE: Myfunction('Sys _ Rest');
        SC_MINIMIZE: Myfunction('Sys _ Min');
        SC_MAXIMIZE: Myfunction('Sys _ Max');
      else
        Myfunction('Mex:' + Message.CmdType.ToString);
      end;
      inherited;
    

    W.
  • Re: Delphi 5 - comando dopo taskbar

    Procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
    begin
    case Message.CmdType and $FFF0 of
    SC_RESTORE: Memo1.Lines.Add('Sys _ Rest');
    SC_MINIMIZE: Memo1.Lines.Add('Sys _ Min');
    SC_MAXIMIZE: Memo1.Lines.Add('Sys _ Max');
    else
    Memo1.Lines.Add('Mex: ' + inttostr(Message.CmdType));
    end;
    inherited;
    end;



    questo è il testo del TMemo:



    Mex: 61458 <-- questo è il Move
    Mex: 61448 <-- questo è il Size
    Sys _ Min <-- questo è il minimizza nella taskbar (e non "dalla taskbar")
    Sys _ Max
    Sys _ Rest <-- questo è un restore da massimizzato (cioè un Riduci)



    il "restore from taskbar" non da alcun messaggio
  • Re: Delphi 5 - comando dopo taskbar

    gabbiano ha scritto:


    Procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
    begin
    case Message.CmdType and $FFF0 of
    SC_RESTORE: Memo1.Lines.Add('Sys _ Rest');
    SC_MINIMIZE: Memo1.Lines.Add('Sys _ Min');
    SC_MAXIMIZE: Memo1.Lines.Add('Sys _ Max');
    else
    Memo1.Lines.Add('Mex: ' + inttostr(Message.CmdType));
    end;
    inherited;
    end;



    questo è il testo del TMemo:



    Mex: 61458 <-- questo è il Move
    Mex: 61448 <-- questo è il Size
    Sys _ Min <-- questo è il minimizza nella taskbar (e non "dalla taskbar")
    Sys _ Max
    Sys _ Rest <-- questo è un restore da massimizzato (cioè un Riduci)



    il "restore from taskbar" non da alcun messaggio
    Come suggerito da f3rr0 è un comportamento con versioni di windows antecedenti a windows 7.
Devi accedere o registrarti per scrivere nel forum
25 risposte