Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: [DELPHI] KeyPress

  1. #1

    [DELPHI] KeyPress

    Ciao, dovrei scrivere una funzione che mi ritorna VERO se viene premuto un tasto della tastiera, FALSO in caso contrario.
    Qualcuno sa darmi qualche dritta?
    ...NO ONE IS INNOCENT ANYMORE...

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    In quale contesto? In una normale applicazione Windows? :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    si ho trovato l'evento keydown dell'oggetto form, solo che se ho il fuoco su un'altro oggetto (sempre all'interno del form), l'evento non si verifica.
    ...NO ONE IS INNOCENT ANYMORE...

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da rotteninside
    si ho trovato l'evento keydown dell'oggetto form, solo che se ho il fuoco su un'altro oggetto (sempre all'interno del form), l'evento non si verifica.
    Imposta la proprietà KeyPreview del form a True.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Ho provato ma nulla...
    ...NO ONE IS INNOCENT ANYMORE...

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da rotteninside
    Ho provato ma nulla...
    Probabilmente, la proprietà KeyPreview si applica unicamente per l'evento OnKeyPress e non per OnKeyDown. Qual è il tuo scopo?

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    è una funzione che se viene premuto il tasto da TRUE e se no da FALSE.
    In effetti è un po' poco come spiegazione ma me la sono trovata così e devo tradurla in DELPHI, era scritta in professional pascal ma non ho un sorgente di come venisse usata. Appena i miei colleghi me li trovano posso darti spiegazioni più dettagliate. La funzione originale era questa:

    codice:
    function KEYPRESSED:boolean;
      var C_KEY_RESULT:longint;
      begin
        C_KEY_RESULT:=kbhit();
        if C_KEY_RESULT = 1 then KEYPRESSED:=true
        else KEYPRESSED:=false;
    end;
    ...NO ONE IS INNOCENT ANYMORE...

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Appunto. Ti ho chiesto in quale ambito ci stavamo muovendo perchè la tua sembra essere una vecchia funzione Pascal relativa ad un programma DOS. In Windows, non c'è l'attesa per l'accettazione di un tasto bensì un thread che controlla i messaggi in coda e genera un evento specifico quando il tasto viene premuto.

    La mia domanda era specifica a cosa dovrebbe poi servire quella funzione.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  9. #9
    Purtroppo non mi hanno ancora dato nulla, io ho provato a scrivere una variabile globale che si chiama KEYPRESSED, e poi ho fatto un ciclo :
    codice:
    While KEYPRESSED = False do
    begin
       //istruzioni
    end;
    quando premo un qualsiasi pulsante la mia variabile viene settata a TRUE, quindi mi aspetto di uscire dal ciclo, eppure è come se l'evento KeyDownEvent non venisse sentito. Come mai?
    ...NO ONE IS INNOCENT ANYMORE...

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da rotteninside
    quando premo un qualsiasi pulsante la mia variabile viene settata a TRUE, quindi mi aspetto di uscire dal ciclo, eppure è come se l'evento KeyDownEvent non venisse sentito. Come mai?
    Se non inserisci una chiamata ad Application.ProcessMessages nel ciclo, l'applicazione sarà impegnata ad eseguire il ciclo stesso e non potrà proseguire nell'elaborazione dei messaggi in arrivo, tra cui probabilmente è presente anche quello relativo alla pressione del tasto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.