* * * *
30 Visitatori, 1 Utente

Autore Topic: ShowMessage senza bottone  (Letto 177 volte)

petrusic

  • Newbie
  • *
  • Post: 40
  • Karma: +0/-0
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?
ciao ciao

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 2800
  • Karma: +9/-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: 2071
  • Karma: +5/-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

  • Newbie
  • *
  • Post: 40
  • 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: 2071
  • Karma: +5/-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: 2244
  • Karma: +10/-2
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: 2800
  • Karma: +9/-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

  • Newbie
  • *
  • Post: 40
  • 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: 2244
  • Karma: +10/-2
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

  • Newbie
  • *
  • Post: 40
  • 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

  • Newbie
  • *
  • Post: 40
  • 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: 2071
  • Karma: +5/-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: 2071
  • Karma: +5/-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: 2071
  • Karma: +5/-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: 2800
  • Karma: +9/-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

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

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.