* * * *

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 19, 2024, 01:52:05 am

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

397 Visitatori, 0 Utenti

Autore Topic: [Risolto] ShowMessage senza bottone  (Letto 3054 volte)

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
[Risolto] ShowMessage senza bottone
« il: Marzo 26, 2020, 01:14:33 pm »
Il titolo dovrebbe dare l'idea di una finestra di messaggio contenente  una nota per l'utente, senza però richiederne l'intervento per andare avanti con l'esecuzione del codice, infatti io mi trovo con questa tipologia di lavoro:
- Avvio del programma
- Emissione Form principale vuota
- missione ShowMessage  di avviso d'attesa (senza pulsante)
- Caricamento dati da DBase SQLite
- Attivazione degli altri oggetti componenti la Form principale
- Cancellazione della ShowMessage (senza pulsante)
- Attesa utente

Ho provato a trovare un qualche strumento grafico che soddisfacesse le mie esigenze, ma senza essere riuscito a trovaerlo.
Ho pensato ad una Label, ma non compare; ho pensato ad casella TEdit che deve attendere la digitazione da parte dell'utente, ma mi obliga a gestire gli eventi KeyDown e Key press, per non tenere conto dell'attività dell'utente fino al termine del caricamento dati dal DB.
Sono, ottimisticamente convinto che debba esserci uno strumento simile allo ShowMessage, ma che possa essere chiuso da codice e non dall'esterno.
E' possibile che non ci sia?
« Ultima modifica: Marzo 21, 2024, 06:38:11 pm da petrusic »
ciao ciao

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:ShowMessage senza bottone
« Risposta #1 il: Marzo 26, 2020, 01:26:25 pm »
Puoi usare una TLabel insieme ad un TTimer.
Lascia la label con la proprietà visible a true. Ed imposti l'interval del timer a 5000 (ovvero cinque secondi)
Poi nell'evento ontimer metti l'interval del timer a 0 (così non riparte una seconda volta) ed imposti la proprietà visible della label a false
Ieri è passato, domani è futuro, oggi è un dono...

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:ShowMessage senza bottone
« Risposta #2 il: Marzo 26, 2020, 03:43:48 pm »
Forse non ho capito.
Potresti creare una form ad hoc al posto di usare show message.
Esiste una propery (FormStyle) che puoi impostare a fsSplash.
Togli tutto quello che possa farla chiudere senza il controllo del programma e dovresti aver ottenuto quello che ti prefiggevi.

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:ShowMessage senza bottone
« Risposta #3 il: Marzo 26, 2020, 03:56:14 pm »
Puoi usare una TLabel insieme ad un TTimer.
...
Grazie. Leggendo il tuo consiglio, ho l'impressione che sia più complicato rispetto a creare una procedura di intercettazione di tasti specifici premuti. Non avevo ancora provato, ma poco fa ho impostato la proprietà  ReadOnly della mia Tedit di prova a True.
Pensavo che, con ReadOnly = True, gli eventi OnKeyDown, OnKeypress e OnKweyUp venissero disabilitati, invece ho provato e continuano a funzionare. In queste condizioni e, visto che dovrò sicuramente sfruttarli per altre occasioni, tanto vale che ci metto mani subito.

Potresti creare una form ad hoc al posto di usare show message.
...
Ho capito, ma non è un pò esagerato scomodare una form ogni volta che si debba avvisare l'utente ad aspettare il ciclo di elaborazione in corso?

Io sto studiando in un colpo solo  Pascal e Lazarus e vorrei costruire, mentre imparo, una metodologia di scrittura di cui appropriarmi correttamente ed a titolo definitivo.
Grazie a tutti e due.
 ;) :D
ciao ciao

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:ShowMessage senza bottone
« Risposta #4 il: Marzo 26, 2020, 03:59:37 pm »
Citazione
- Avvio del programma
- Emissione Form principale vuota
- missione ShowMessage  di avviso d'attesa (senza pulsante)

- Caricamento dati da DBase SQLite
- Attivazione degli altri oggetti componenti la Form principale
- Cancellazione della ShowMessage (senza pulsante)
- Attesa utente
Questa sequenza di operazioni in avvio si prestano bene ad una spash screen. Per questo ti suggerivo una form.
Se devi fare tutte queste opeazioni alla pressione di un tasto, credo, ci sia qualche cosa che mi sfugge..

Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:ShowMessage senza bottone
« Risposta #5 il: Marzo 26, 2020, 04:03:45 pm »
puoi fare qualcosa del genere

Codice: [Seleziona]
- Avvio del programma
- Emissione Form principale vuota
- attesa:= TAttesa.Create(self);
try
- attesa.Show;
- Caricamento dati da DBase SQLite
- Attivazione degli altri oggetti componenti la Form principale
finally
   attesa.Close;
   FreeAndNil( attesa );
end
- Attesa utente
Imagination is more important than knowledge (A.Einstein)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:ShowMessage senza bottone
« Risposta #6 il: Marzo 26, 2020, 04:35:04 pm »
Ecco un breve video: https://youtu.be/QxVcp9cgN_c

Ovviamente l'aspetto è spartano. Serve solo per avere delle indicazioni di massima.
Ieri è passato, domani è futuro, oggi è un dono...

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:ShowMessage senza bottone
« Risposta #7 il: Marzo 26, 2020, 05:13:34 pm »
Questa sequenza di operazioni in avvio si prestano bene ad una spash screen. Per questo ti suggerivo una form.
Se devi fare tutte queste opeazioni alla pressione di un tasto, credo, ci sia qualche cosa che mi sfugge..

Sicuramente sono io a non essere stringato e chiaro.
All'avvio del programma, devo soltanto prendere in carico un paio di colonne di dati da una tabella del DB per caricarle dentro altrettante ComboBox. Sicuramente è un'operazione brevissima, ma per esercizio, vorrei prendere confidenza con gli strumenti di Lazarus.
Durante il caricamento non serve visualizzare il contenuto della Form principale del programma, quindi ho in mente di rimandare tale visualizzazione dopo che sia avvenuto il caricamento delle 2  ComboBox, quindi non occorre che venga premuto alcun tasto. Solo il programma conosce, infatti, l'inizio e la fine delle operazioni di caricamento.
Spero ora di avere chiarito il mio ragionamento.

Avevo, inizialmente, anch'io pensato ad una seconda Form, ma poi ho tralasciato l'idea, perchè, qualora dovessi ripetere tale operazione in altri momenti del programma o in altri programmi, dovrei costruire una gerarchia di Form con passaggio di dati, a volte anche corposi, fra le stesse.

Non ho capito il suggerimento di nomorelogic.  TAttesa che cosa è una classe di tipo Form?
ciao ciao

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:ShowMessage senza bottone
« Risposta #8 il: Marzo 26, 2020, 05:17:35 pm »
Non ho capito il suggerimento di nomorelogic.  TAttesa che cosa è una classe di tipo Form?

si, fai una nuova form e la chiami TAttesa

la istanzi e mostri prima delle operazioni che devi fare e poi la chiudi e la cancelli
Imagination is more important than knowledge (A.Einstein)

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:ShowMessage senza bottone
« Risposta #9 il: Marzo 26, 2020, 05:35:02 pm »
Ecco un breve video: https://youtu.be/QxVcp9cgN_c

Ovviamente l'aspetto è spartano. Serve solo per avere delle indicazioni di massima.
Purtroppo non posso vederlo. Mi dice che il video è privato e che occorre l'autorizzazione per poterlo vedere. Inoltre non sono registrato in YouTube.

ciao ciao

petrusic

  • Hero Member
  • *****
  • Post: 589
  • Karma: +0/-0
Re:ShowMessage senza bottone
« Risposta #10 il: Marzo 26, 2020, 05:45:47 pm »
Un'alternativa che per ora vorrei affrontare è quella di testare la pressione dei tasti, come |Invio|, |Backspace|, ....
 Ho trovato qui
l'uso di una funzione , chiamata VKStringToWord e non ho capito come fare per aggiungerla nel mio programma.
Pensavo ad un pacchetto da fare richiamare a Lazarus stesso per averlo disponibile e richiamabile in qualsiasi programma futuro.
ciao ciao

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:ShowMessage senza bottone
« Risposta #11 il: Marzo 26, 2020, 06:11:17 pm »
Una cosa per volta.
Ti allego un progetto di esempio per la questione di prima.

Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:ShowMessage senza bottone
« Risposta #12 il: Marzo 26, 2020, 06:53:20 pm »
Per i tasti e i nomi. (Non lasciarti trarre in inganno dalla pigrizia di xinyiman  ;D )Usando le unit : LCLType, fgl
Creando un contenitore comodo:
Codice: [Seleziona]
    type
    TKeyNameMap = specialize TFPGMap<word, string>;
  var
    FKeyNameMap: TKeyNameMap;       
Popoli il contenitore
Codice: [Seleziona]
 FKeyNameMap := TKeyNameMap.Create;
  FKeyNameMap.add(VK_0, 'KEY 0');
  FKeyNameMap.add(VK_1, 'KEY 1');
  FKeyNameMap.add(VK_2, 'KEY 2');
  FKeyNameMap.add(VK_3, 'KEY 3');
  FKeyNameMap.add(VK_4, 'KEY 4');
  FKeyNameMap.add(VK_5, 'KEY 5');
  FKeyNameMap.add(VK_6, 'KEY 6');
  FKeyNameMap.add(VK_7, 'KEY 7');
  FKeyNameMap.add(VK_8, 'KEY 8');
  FKeyNameMap.add(VK_9, 'KEY 9');
  FKeyNameMap.add(VK_A, 'KEY A');
  FKeyNameMap.add(VK_ACCEPT, 'KEY ACCEPT');
  FKeyNameMap.add(VK_ADD, 'KEY ADD');
  FKeyNameMap.add(VK_APPS, 'KEY APPS');
  FKeyNameMap.add(VK_ATTN, 'KEY ATTN');
  FKeyNameMap.add(VK_B, 'KEY B');
  FKeyNameMap.add(VK_BACK, 'KEY BACK');
  FKeyNameMap.add(VK_BROWSER_BACK, 'KEY BROWSER_BACK');
  FKeyNameMap.add(VK_BROWSER_FAVORITES, 'KEY BROWSER_FAVORITES');
  FKeyNameMap.add(VK_BROWSER_FORWARD, 'KEY BROWSER_FORWARD');
  FKeyNameMap.add(VK_BROWSER_HOME, 'KEY BROWSER_HOME');
  FKeyNameMap.add(VK_BROWSER_REFRESH, 'KEY BROWSER_REFRESH');
  FKeyNameMap.add(VK_BROWSER_SEARCH, 'KEY BROWSER_SEARCH');
  FKeyNameMap.add(VK_BROWSER_STOP, 'KEY BROWSER_STOP');
  FKeyNameMap.add(VK_C, 'KEY C');
  FKeyNameMap.add(VK_CANCEL, 'KEY CANCEL');
  FKeyNameMap.add(VK_CAPITAL, 'KEY CAPITAL');
  FKeyNameMap.add(VK_CLEAR, 'KEY CLEAR');
  FKeyNameMap.add(VK_CONTROL, 'KEY CONTROL');
  FKeyNameMap.add(VK_CONVERT, 'KEY CONVERT');
  FKeyNameMap.add(VK_CRSEL, 'KEY CRSEL');
  FKeyNameMap.add(VK_D, 'KEY D');
  FKeyNameMap.add(VK_DECIMAL, 'KEY DECIMAL');
  FKeyNameMap.add(VK_DELETE, 'KEY DELETE');
  FKeyNameMap.add(VK_DIVIDE, 'KEY DIVIDE');
  FKeyNameMap.add(VK_DOWN, 'KEY DOWN');
  FKeyNameMap.add(VK_E, 'KEY E');
  FKeyNameMap.add(VK_END, 'KEY END');
  FKeyNameMap.add(VK_EREOF, 'KEY EREOF');
  FKeyNameMap.add(VK_ESCAPE, 'KEY ESCAPE');
  FKeyNameMap.add(VK_EXECUTE, 'KEY EXECUTE');
  FKeyNameMap.add(VK_EXSEL, 'KEY EXSEL');
  FKeyNameMap.add(VK_F, 'KEY F');
  FKeyNameMap.add(VK_F1, 'KEY F1');
  FKeyNameMap.add(VK_F10, 'KEY F10');
  FKeyNameMap.add(VK_F11, 'KEY F11');
  FKeyNameMap.add(VK_F12, 'KEY F12');
  FKeyNameMap.add(VK_F13, 'KEY F13');
  FKeyNameMap.add(VK_F14, 'KEY F14');
  FKeyNameMap.add(VK_F15, 'KEY F15');
  FKeyNameMap.add(VK_F16, 'KEY F16');
  FKeyNameMap.add(VK_F17, 'KEY F17');
  FKeyNameMap.add(VK_F18, 'KEY F18');
  FKeyNameMap.add(VK_F19, 'KEY F19');
  FKeyNameMap.add(VK_F2, 'KEY F2');
  FKeyNameMap.add(VK_F20, 'KEY F20');
  FKeyNameMap.add(VK_F21, 'KEY F21');
  FKeyNameMap.add(VK_F22, 'KEY F22');
  FKeyNameMap.add(VK_F23, 'KEY F23');
  FKeyNameMap.add(VK_F24, 'KEY F24');
  FKeyNameMap.add(VK_F3, 'KEY F3');
  FKeyNameMap.add(VK_F4, 'KEY F4');
  FKeyNameMap.add(VK_F5, 'KEY F5');
  FKeyNameMap.add(VK_F6, 'KEY F6');
  FKeyNameMap.add(VK_F7, 'KEY F7');
  FKeyNameMap.add(VK_F8, 'KEY F8');
  FKeyNameMap.add(VK_F9, 'KEY F9');
  FKeyNameMap.add(VK_FINAL, 'KEY FINAL');
  FKeyNameMap.add(VK_G, 'KEY G');
  FKeyNameMap.add(VK_H, 'KEY H');
  FKeyNameMap.add(VK_HANGUL, 'KEY HANGUL');
  FKeyNameMap.add(VK_HANJA, 'KEY HANJA');
  FKeyNameMap.add(VK_HELP, 'KEY HELP');
  FKeyNameMap.add(VK_HIGHESTVALUE, 'KEY HIGHESTVALUE');
  FKeyNameMap.add(VK_HOME, 'KEY HOME');
  FKeyNameMap.add(VK_I, 'KEY I');
  FKeyNameMap.add(VK_INSERT, 'KEY INSERT');
  FKeyNameMap.add(VK_J, 'KEY J');
  FKeyNameMap.add(VK_JUNJA, 'KEY JUNJA');
  FKeyNameMap.add(VK_K, 'KEY K');
  FKeyNameMap.add(VK_KANA, 'KEY KANA');
  FKeyNameMap.add(VK_KANJI, 'KEY KANJI');
  FKeyNameMap.add(VK_L, 'KEY L');
  FKeyNameMap.add(VK_LAUNCH_APP1, 'KEY LAUNCH_APP1');
  FKeyNameMap.add(VK_LAUNCH_APP2, 'KEY LAUNCH_APP2');
  FKeyNameMap.add(VK_LAUNCH_MAIL, 'KEY LAUNCH_MAIL');
  FKeyNameMap.add(VK_LAUNCH_MEDIA_SELECT, 'KEY LAUNCH_MEDIA_SELECT');
  FKeyNameMap.add(VK_LBUTTON, 'KEY LBUTTON');
  FKeyNameMap.add(VK_LCL_ALT, 'KEY LCL_ALT');
  FKeyNameMap.add(VK_LCL_AT, 'KEY LCL_AT');
  FKeyNameMap.add(VK_LCL_BACKSLASH, 'KEY LCL_BACKSLASH');
  FKeyNameMap.add(VK_LCL_CALL, 'KEY LCL_CALL');
  FKeyNameMap.add(VK_LCL_CAPSLOCK, 'KEY LCL_CAPSLOCK');
  FKeyNameMap.add(VK_LCL_CLOSE_BRAKET, 'KEY LCL_CLOSE_BRAKET');
  FKeyNameMap.add(VK_LCL_COMMA, 'KEY LCL_COMMA');
  FKeyNameMap.add(VK_LCL_ENDCALL, 'KEY LCL_ENDCALL');
  FKeyNameMap.add(VK_LCL_EQUAL, 'KEY LCL_EQUAL');
  FKeyNameMap.add(VK_LCL_LALT, 'KEY LCL_LALT');
  FKeyNameMap.add(VK_LCL_MINUS, 'KEY LCL_MINUS');
  FKeyNameMap.add(VK_LCL_OPEN_BRAKET, 'KEY LCL_OPEN_BRAKET');
  FKeyNameMap.add(VK_LCL_POINT, 'KEY LCL_POINT');
  FKeyNameMap.add(VK_LCL_POWER, 'KEY LCL_POWER');
  FKeyNameMap.add(VK_LCL_QUOTE, 'KEY LCL_QUOTE');
  FKeyNameMap.add(VK_LCL_RALT, 'KEY LCL_RALT');
  FKeyNameMap.add(VK_LCL_SEMI_COMMA, 'KEY LCL_SEMI_COMMA');
  FKeyNameMap.add(VK_LCL_SLASH, 'KEY LCL_SLASH');
  FKeyNameMap.add(VK_LCL_TILDE, 'KEY LCL_TILDE');
  FKeyNameMap.add(VK_LCONTROL, 'KEY LCONTROL');
  FKeyNameMap.add(VK_LEFT, 'KEY LEFT');
  FKeyNameMap.add(VK_LMENU, 'KEY LMENU');
  FKeyNameMap.add(VK_LSHIFT, 'KEY LSHIFT');
  FKeyNameMap.add(VK_LWIN, 'KEY LWIN');
  FKeyNameMap.add(VK_M, 'KEY M');
  FKeyNameMap.add(VK_MBUTTON, 'KEY MBUTTON');
  FKeyNameMap.add(VK_MEDIA_NEXT_TRACK, 'KEY MEDIA_NEXT_TRACK');
  FKeyNameMap.add(VK_MEDIA_PLAY_PAUSE, 'KEY MEDIA_PLAY_PAUSE');
  FKeyNameMap.add(VK_MEDIA_PREV_TRACK, 'KEY MEDIA_PREV_TRACK');
  FKeyNameMap.add(VK_MEDIA_STOP, 'KEY MEDIA_STOP');
  FKeyNameMap.add(VK_MENU, 'KEY MENU');
  FKeyNameMap.add(VK_MODECHANGE, 'KEY MODECHANGE');
  FKeyNameMap.add(VK_MULTIPLY, 'KEY MULTIPLY');
  FKeyNameMap.add(VK_N, 'KEY N');
  FKeyNameMap.add(VK_NEXT, 'KEY NEXT');
  FKeyNameMap.add(VK_NONAME, 'KEY NONAME');
  FKeyNameMap.add(VK_NONCONVERT, 'KEY NONCONVERT');
  FKeyNameMap.add(VK_NUMLOCK, 'KEY NUMLOCK');
  FKeyNameMap.add(VK_NUMPAD0, 'KEY NUMPAD0');
  FKeyNameMap.add(VK_NUMPAD1, 'KEY NUMPAD1');
  FKeyNameMap.add(VK_NUMPAD2, 'KEY NUMPAD2');
  FKeyNameMap.add(VK_NUMPAD3, 'KEY NUMPAD3');
  FKeyNameMap.add(VK_NUMPAD4, 'KEY NUMPAD4');
  FKeyNameMap.add(VK_NUMPAD5, 'KEY NUMPAD5');
  FKeyNameMap.add(VK_NUMPAD6, 'KEY NUMPAD6');
  FKeyNameMap.add(VK_NUMPAD7, 'KEY NUMPAD7');
  FKeyNameMap.add(VK_NUMPAD8, 'KEY NUMPAD8');
  FKeyNameMap.add(VK_NUMPAD9, 'KEY NUMPAD9');
  FKeyNameMap.add(VK_O, 'KEY O');
  FKeyNameMap.add(VK_OEM_1, 'KEY OEM_1');
  FKeyNameMap.add(VK_OEM_102, 'KEY OEM_102');
  FKeyNameMap.add(VK_OEM_2, 'KEY OEM_2');
  FKeyNameMap.add(VK_OEM_3, 'KEY OEM_3');
  FKeyNameMap.add(VK_OEM_4, 'KEY OEM_4');
  FKeyNameMap.add(VK_OEM_5, 'KEY OEM_5');
  FKeyNameMap.add(VK_OEM_6, 'KEY OEM_6');
  FKeyNameMap.add(VK_OEM_7, 'KEY OEM_7');
  FKeyNameMap.add(VK_OEM_8, 'KEY OEM_8');
  FKeyNameMap.add(VK_OEM_CLEAR, 'KEY OEM_CLEAR');
  FKeyNameMap.add(VK_OEM_COMMA, 'KEY OEM_COMMA');
  FKeyNameMap.add(VK_OEM_MINUS, 'KEY OEM_MINUS');
  FKeyNameMap.add(VK_OEM_PERIOD, 'KEY OEM_PERIOD');
  FKeyNameMap.add(VK_OEM_PLUS, 'KEY OEM_PLUS');
  FKeyNameMap.add(VK_P, 'KEY P');
  FKeyNameMap.add(VK_PA1, 'KEY PA1');
  FKeyNameMap.add(VK_PAUSE, 'KEY PAUSE');
  FKeyNameMap.add(VK_PLAY, 'KEY PLAY');
  FKeyNameMap.add(VK_PRINT, 'KEY PRINT');
  FKeyNameMap.add(VK_PRIOR, 'KEY PRIOR');
  FKeyNameMap.add(VK_PROCESSKEY, 'KEY PROCESSKEY');
  FKeyNameMap.add(VK_Q, 'KEY Q');
  FKeyNameMap.add(VK_R, 'KEY R');
  FKeyNameMap.add(VK_RBUTTON, 'KEY RBUTTON');
  FKeyNameMap.add(VK_RCONTROL, 'KEY RCONTROL');
  FKeyNameMap.add(VK_RETURN, 'KEY RETURN');
  FKeyNameMap.add(VK_RIGHT, 'KEY RIGHT');
  FKeyNameMap.add(VK_RMENU, 'KEY RMENU');
  FKeyNameMap.add(VK_RSHIFT, 'KEY RSHIFT');
  FKeyNameMap.add(VK_RWIN, 'KEY RWIN');
  FKeyNameMap.add(VK_S, 'KEY S');
  FKeyNameMap.add(VK_SCROLL, 'KEY SCROLL');
  FKeyNameMap.add(VK_SELECT, 'KEY SELECT');
  FKeyNameMap.add(VK_SEPARATOR, 'KEY SEPARATOR');
  FKeyNameMap.add(VK_SHIFT, 'KEY SHIFT');
  FKeyNameMap.add(VK_SLEEP, 'KEY SLEEP');
  FKeyNameMap.add(VK_SNAPSHOT, 'KEY SNAPSHOT');
  FKeyNameMap.add(VK_SPACE, 'KEY SPACE');
  FKeyNameMap.add(VK_SUBTRACT, 'KEY SUBTRACT');
  FKeyNameMap.add(VK_T, 'KEY T');
  FKeyNameMap.add(VK_TAB, 'KEY TAB');
  FKeyNameMap.add(VK_U, 'KEY U');
  FKeyNameMap.add(VK_UNDEFINED, 'KEY UNDEFINED');
  FKeyNameMap.add(VK_UNKNOWN, 'KEY UNKNOWN');
  FKeyNameMap.add(VK_UP, 'KEY UP');
  FKeyNameMap.add(VK_V, 'KEY V');
  FKeyNameMap.add(VK_VOLUME_DOWN, 'KEY VOLUME_DOWN');
  FKeyNameMap.add(VK_VOLUME_MUTE, 'KEY VOLUME_MUTE');
  FKeyNameMap.add(VK_VOLUME_UP, 'KEY VOLUME_UP');
  FKeyNameMap.add(VK_W, 'KEY W');
  FKeyNameMap.add(VK_X, 'KEY X');
  FKeyNameMap.add(VK_XBUTTON1, 'KEY XBUTTON1');
  FKeyNameMap.add(VK_XBUTTON2, 'KEY XBUTTON2');
  FKeyNameMap.add(VK_Y, 'KEY Y');
  FKeyNameMap.add(VK_Z, 'KEY Z');
  FKeyNameMap.add(VK_ZOOM, 'KEY ZOOM');   
e infine nel gestore della pressione dei tasti (onKeyQualcheCosa)

Codice: [Seleziona]
   if FKeyNameMap.IndexOf(key) > -1 then
    Caption := FKeyNameMap.KeyData[key];


Spero sia abbastanza chiaro.
Stilgar
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:ShowMessage senza bottone
« Risposta #13 il: Marzo 26, 2020, 06:54:46 pm »
A te lascio pensare come fare il contrario :)
Da Stringa il valore numerico :)
String
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Re:ShowMessage senza bottone
« Risposta #14 il: Marzo 26, 2020, 11:04:27 pm »
Ora il video dovrebbe essere visibile.
Ieri è passato, domani è futuro, oggi è un dono...

 

Recenti

How To

Utenti
  • Utenti in totale: 785
  • Latest: gmax
Stats
  • Post in totale: 18771
  • Topic in totale: 2233
  • Online Today: 404
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 397
Total: 397

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.