* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 16, 2026, 10:05:41 am

Inserisci il nome utente, la password e la durata della sessione.

328 Visitatori, 0 Utenti

Autore Topic: TTrayIcon: OnClick e OnDblClick  (Letto 2576 volte)

bonmario

  • Hero Member
  • *****
  • Post: 1454
  • Karma: +11/-1
TTrayIcon: OnClick e OnDblClick
« il: Marzo 13, 2026, 08:32:25 am »
Ciao a tutti,
ho un programma, che gira solo su Windows, in cui, quando clicco sulla sua TrayIcom, se il form è visualizzato, viene nascosto, se è nascosto viene visualizzato.
Fino a qui, tutto ok.
Mi hanno chiesto di fare in modo che quando si fa "doppio click" sulla sua icona, parta un comando.
Io l'ho fatto, ma la maggior parte delle volte, quando si fa "doppio click", è come se lui vedesse 2 "click semplici", quindi è come se cliccassi una volta, e poi ancora un'altra volta.
Anche mettendo in debug un blocco nella "OnDblClick", la maggior parte delle volte di lì non ci passa proprio.
Che voi sappiate, la OnClick e la OnDblClick sono incompatibili tra di loro, oppure c'è un bug?

Grazie, Mario

DragoRosso

  • Scrittore
  • Hero Member
  • *****
  • Post: 1737
  • Karma: +53/-0
  • Prima ascoltare, poi decidere
Re:TTrayIcon: OnClick e OnDblClick
« Risposta #1 il: Marzo 13, 2026, 09:00:00 am »
Quello del double click è sempre stato un argomento un pò ostico da gestire.
In effetti se c'è l'evento OnClick definito, quello OnDoubleCLick è molto più difficile da ottenere.

"Click" e "Double click" sono differenziate solo dalle differenti tempistiche sui tempi di pressione / rilascio del tasto. E in generale, il OnClick viene sempre e comunque lanciato.

Nel pannello di controllo (nelle varie impostazioni del mouse) c'è un settaggio dedicato a Windows proprio per discriminare queste tempistiche.
Però, detto spassionatamente, io non uso il "Double Click" nelle mie applicazioni e sconsiglio di usarlo a maggior ragione se viene usato lo "OnClick".

Se devi per forza gestirlo, ti consiglio di inserire un timer e scatenare da programma l'azione legata al "Click" o al "Double Click" in base al fatto che il timer abbia esaurito il suo tempo senza che il doppio click sia avvenuto.

Questo provoca una latenza apparente sull'azione a seconda del tempo che inserisci: se per esempio tu attendi il doppio tocco entro 0,5 secondi dal primo ciò cignificherà che anche il click normale sarà ritardato di 0,5 secondi (cioè l'azione che viene eseguita abbinata al Click semplice è ritardata come quella abbinata al doppio click).

Esempio (editato)
se si vuole distinguere anche il controllo su cui è avvenuto si può aggiungere una variabile globale in cui si inserisce il controllo su cui si stà "agendo"
Codice: [Seleziona]
var
  VariePressioni: integer = 0;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  inc(VariePressioni);
  Timer1.Enabled := true;  //<---- timer settato a 200 millisecondi
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  case VariePressioni of
     1: begin
          //Un click
        end;
     2: begin
          //Due click
        end;
     3: begin
          //Tre click
        end;
  end;
  VariePressioni := 0;
end;
« Ultima modifica: Marzo 13, 2026, 09:39:52 am da DragoRosso »
:) Ogni alba è un regalo, ogni tramonto è una conquista :)

bonmario

  • Hero Member
  • *****
  • Post: 1454
  • Karma: +11/-1
Re:TTrayIcon: OnClick e OnDblClick
« Risposta #2 il: Marzo 13, 2026, 09:35:58 am »
Grazie, interessante la tua soluzione !

Nel frattempo, ho proposto a chi mi ha chiesto il "doppio click", di fare "tasto destro", e da lì scegliere la voce desiderata che, al momento sarebbe anche l'unica ! Anche perché da quello che mi diceva stamattina, ho idea che prossimamente ne vorrebbe altre e, con un menù dedicato, la cosa sarebbe più elegante.
Se non gli andasse bene la mia soluzione, implementerò la tua

Grazie !!!

 

Recenti

How To

Utenti
Stats
  • Post in totale: 20264
  • Topic in totale: 2441
  • Online Today: 339
  • Online Ever: 1080
  • (Novembre 10, 2025, 06:15:39 am)
Utenti Online
Users: 0
Guests: 328
Total: 328

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.