Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135

    [Delphi] - Delphi 2005, l'evento Keypress non riconosce piu l'enter della tastiera.

    Sto facendo un prog su delphi 2005, vcl x win 32.

    fino a pochi minuti fa l'evento key press di una text, alla pressione dell'invio (o enter), cmq del codice ASCII #13 eseguiva la procedura..

    ora, alla pressione dell'invio... sembra non generi nessun carattere ascii.. non viene neanche riconosciuto, come fosse un ctrl o uno shift..

    che è mai successo!?

    su delphi 7 non ha mai dato questo problema

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Io ho effettuato una prova su Delphi 2005 e pare che funzioni benissimo.
    codice:
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then
      begin
        ShowMessage('INVIO!');
        Key := #0;
      end;
    end;
    Metti un punto di interruzione nel codice dell'evento e verifica che il programma "passi in quel punto" quando premi il tasto.

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

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

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    Originariamente inviato da alka
    Io ho effettuato una prova su Delphi 2005 e pare che funzioni benissimo.
    codice:
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then
      begin
        ShowMessage('INVIO!');
        Key := #0;
      end;
    end;
    Metti un punto di interruzione nel codice dell'evento e verifica che il programma "passi in quel punto" quando premi il tasto.

    Ciao!
    all'inizio anche a me funzionava... ma non ho toccato niente della edit o della form... ora invece no.

    alka il problema è che non se move...

    cioè...

    se io premo ctrl o shift x esempio, il pc non riconosce nessun tasto premuto, ok?
    con l'invio ora mi fa lo stesso.. non lo vede con #13, ma lo vede come nessun tasto premuto...come se io non premessi nente...

    con gli altri tasti funziona...passa dal codice....


  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da Oasis81
    alka il problema è che non se move...
    Sì, questo era già chiaro da prima, ma è necessario capire il perchè.

    Originariamente inviato da Oasis81
    con l'invio ora mi fa lo stesso.. non lo vede con #13, ma lo vede come nessun tasto premuto...come se io non premessi nente...
    con gli altri tasti funziona...passa dal codice....
    Prova a postare il *tuo* codice.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    Originariamente inviato da alka
    Sì, questo era già chiaro da prima, ma è necessario capire il perchè.


    Prova a postare il *tuo* codice.
    il mio codice è uguale al tuo:

    codice:
    if key= #13 then
    begin
    non capisco, proprio non lo vede piu come un tasto..
    mentre con delphi 7 si...

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da Oasis81
    il mio codice è uguale al tuo [...]
    Io intendevo TUUUUUTTO il codice dell'evento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    Originariamente inviato da alka
    Io intendevo TUUUUUTTO il codice dell'evento.
    ah...ehm... è lunghetto
    cmq su un nuovo progetto va... su questo no..
    anche se prima su questo progetto andava e ora no.. va beh ti posto tutto ... ti metto tutto tutto fino alla fine della rpocedura.

    codice:
    if key= #13 then
    begin
    
    
    gaccessi2.Visible := false;
    gante2.Visible := false;
    noteoperatori2.Visible := false;
    gante2.Visible := false;
    gnoteante2.Visible := false;
    gcomp2.Visible := false;
    gnotecomp2.Visible :=false;
    gtel2.Visible :=false;
    gnotetel2.Visible :=false;
    gporte2.Visible :=false;
    gnoteporte2.Visible :=false;
    
    
    If numordine.Text  = ''   Then
        showmessage ('Inserire il numero dell''ordine!!' );
    
    with dmprod do
    begin
    
    tdataord.Text := '';
    tdatacons.Text :='';
    ocsatinquery.Close;
    ansadidquery.Close;
    ansaindquery.Close;
    dmdb.Sviluppi.Close;
    dmdb.Sviluppi_accessi.Close;
    
    prodquery.close;
    prodQuery.Parameters.Items[0].Value := numordine.Text;
    prodquery.Open;
    
    if prodquery.RecordCount = 0 then
       begin
        showmessage('Ordine non inserito ');
        prodquery.Close;
        ocsatinquery.Close;
        ansadidquery.Close;
        ansaindquery.Close;
        dmdb.Sviluppi.Close;
        dmdb.Sviluppi_accessi.Close;
            chkcabina.Checked :=false;
            chkoperatori.Checked :=false;
            chksospensioni.Checked  :=false;
            chkante.Checked  :=false;
            chktelai.Checked :=false;
            chkimbotti.Checked  :=false;
            chkporte.Checked  :=false;
            chkcompstd.Checked :=false;
            chkcomprei.Checked :=false;
            chkaccessori.Checked :=false;
            chkindexp.Checked :=false;
            chkelementi.Checked :=false;
            chkbottoniere.Checked :=false;
            chkante.Checked := false;
            chkmatelettrico.Checked :=false;
            chklinee.Checked :=false;
            chkmeccbravo.Checked :=false;
            chkcaricounico.Checked :=false;
            chkmatelebravo.Checked :=false;
            chkquadro.Checked:=false;
            chktempchius1.Checked:=false;
            chkcorrsx.Checked:=false;
            chkcorrdx.Checked:=false;
            chkcorrpost.Checked:=false;
            chkspecsx.Checked:=false;
            chkspecdx.Checked:=false;
            chkspecpost.Checked:=false;
            chkparasx.Checked:=false;
            chkparadx.Checked:=false;
            chkparapost.Checked:=false;
            tdesforope1.Text :='';
            tdesforncab.Text :='';
            tdescab.Text := '';
            tvia.Text :='';
            tdataord.Text := '';
            tdatacons.Text := '';
            tnsett.Text := '';
            tnumcomm.Text := '';
            tcliente.Text := '';
            tdest.Text := '';
            tcodcli.text:='';
            tdest.Text := '';
            tcoddest.Text := '';
            tviadest.Text := '';
            tacccorr.Text := '';
            tcap.Text := '';
            tcitta.text := '';
            trifcli.text := '';
            tprov.Text := '';
            tcapdest.Text := '';
            tcittadest.Text := '';
            tprovdest.Text := '';
            tdesportata.Text := '';
            tdestipoope1.Text := '';
            tdesmodope1.Text := '';
            tdesluceope1.Text := '';
    
        exit;
       end
    else
    begin
    
    ocsatinquery.Parameters.Items[0].Value := numordine.Text ;
    ocsatinquery.Open;
    
    
    {-------Converte la stringa Data nel formato gg/mm/aaaa--------}
    
    str1:= Rightstr(PRODQUERYOCHOCDT.Text,4);
    anno:=(leftstr(PRODQUERYOCHOCDT.Text,4));
    mese:=(Leftstr(str1,2));
    giorno:=(rightstr(str1,2));
    dat:=((giorno)+'/'+(mese)+'/'+(anno));
    strtodate(dat);
    
    {-------Converte la stringa Consegna nel formato gg/mm/aaaa-----}
    str2:= Rightstr(PRODQUERYOCHDTRC.Text,4);
    annocons:=(leftstr(PRODQUERYOCHDTRC.Text,4));
    mesecons:=(Leftstr(str2,2));
    giornocons:=(rightstr(str2,2));
    datacons:= (giornocons)+ ('/') + (mesecons) + ('/') +  (annocons);
    Data:=StrToDate(datacons)  - 7;
    Week:=WeekOf(Data);
    
    {-------PROD (OCSAORH) QUERY---------Dati Ordine------------}
    
    tDataOrd.Text  := dat ;
    tdatacons.Text   :=datacons  ;
    tNumComm.Text  := PRODQUERYOCHCOMM.Value  ;
    tCodCli.Text  :=PRODQUERYOCHCLII.Value ;
    tCodDest.Text := PRODQUERYOCHCLID.Value ;
    tRifCli.Text  := PRODQUERYOCHOCNO.Value ;
    tnsett.Text  := inttostr(week);
    
    
    
    {-------ANSADID QUERY---------}
    ansadidquery.Parameters.ParamByName('codcli').Value :=PRODQUERYOCHCLII.Value ;
    ansadidquery.Open;
    tcliente.Text := AnsadidqueryANINCO.Text ;
    
    {--------------ANSAIND QUERY-------Indirizzo Cliente-------}
    ansaindquery.Parameters.ParamByName('codcli').Value :=PRODQUERYOCHCLII.Value ;
    ansaindquery.Open;
    tvia.Text:= ansaindqueryINVIA.Value ;
    tCap.text := ansaindqueryINCAP.Value;
    tcitta.Text  := ansaindqueryINCIT.Value ;
    tProv.Text  := ansaindqueryINPRO.Value ;
    
    {-----------OCSATIN QUERY---------Indirizzo Destinatario---------}
    
    tDest.Text  := OCSATINQUERYOCIRASO.Value ;
        tviaDest.Text  := OCSATINQUERYOCIVIA.Value;
        tCapDest.Text  := OCSATINQUERYOCICAP.Value ;
        tcittadest.Text  := OCSATINQUERYOCICIT.Value ;
        tProvDest.Text  := OCSATINQUERYOCIPRO.Value;
    
    end;
    end;
    
    tacccorr.Text := '1A';
    
    {-------CERCA SE C'E' UNO SVILUPPO GIA PRESENTE--------------}
    
    with dmdb do
    begin
    sviluppi.close;
    sviluppi.ParamByName('numord').Value := numordine.Text;
    sviluppi.Open;
    
    sviluppi_accessi.close;
    sviluppi_accessi.ParamByName('numord').Value := numordine.Text;
    sviluppi_accessi.ParamByName('numacc').Value := leftstr(tacccorr.Text,1);
    sviluppi_accessi.Open;
    
    end;

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Se posso azzardare un'opinione, credo che - a livello di principio - sia errato affidare ad un keypress una serie così vasta di operazioni da eseguire.

    In secondo luogo, ho verificato che l'evento funziona correttamente, quindi mi viene da pensare che ci sia qualcos'altro, a livello di controlli esterni oppure di form, che previene l'esecuzione dell'evento "assorbendo" il tasto e offrendo il proprio comportamento al posto di quello definito dal codice che hai postato.

    In sostanza, è possibile che esista una condizione per cui ha senso che il tuo codice non venga eseguito, ma per qualche motivo in Delphi7 funzionava in ogni caso mentre in Delphi2005 no... ad esempio, esistono pulsanti con la proprietà Default impostata a True? il form ha la proprietà KeyPreview impostata a True? vi sono nel tuo codice altre routine legate alla pressione di un determinato tasto?

    Verifica queste condizioni...

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

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

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    135
    Originariamente inviato da alka
    Se posso azzardare un'opinione, credo che - a livello di principio - sia errato affidare ad un keypress una serie così vasta di operazioni da eseguire.

    In secondo luogo, ho verificato che l'evento funziona correttamente, quindi mi viene da pensare che ci sia qualcos'altro, a livello di controlli esterni oppure di form, che previene l'esecuzione dell'evento "assorbendo" il tasto e offrendo il proprio comportamento al posto di quello definito dal codice che hai postato.

    In sostanza, è possibile che esista una condizione per cui ha senso che il tuo codice non venga eseguito, ma per qualche motivo in Delphi7 funzionava in ogni caso mentre in Delphi2005 no... ad esempio, esistono pulsanti con la proprietà Default impostata a True? il form ha la proprietà KeyPreview impostata a True? vi sono nel tuo codice altre routine legate alla pressione di un determinato tasto?

    Verifica queste condizioni...

    Ciao!

    incredibile...
    era uno stupido tasto che era default impostato a true.. non so perchè e non so come mai dava fastidio..
    grazie

    cmq,vorrei discutere un attimo sul fatto di non affidate tutto quel codice alla pressione di un tasto...

    ti spiego: il programma in totale son 9000 righe di codice..

    quello che cè alla pressione del tasto, è semplicemente aprire 4 query, le tabelle sviluppi e verificare se c'è gia uno sviluppo.

    il tutto viene eseguito molto velocemente e senza nessun problema..

    come l'avresti strutturato tu? con procedure o function?

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Originariamente inviato da Oasis81
    incredibile...
    era uno stupido tasto che era default impostato a true.. non so perchè e non so come mai dava fastidio..
    grazie
    Evidentemente, la priorità è stata aggiustata in Delphi2005, provocando l'effetto collaterale che hai riscontrato.

    Originariamente inviato da Oasis81
    come l'avresti strutturato tu? con procedure o function?
    Diciamo che non avrei affidato l'esecuzione di tutte quelle operazioni ad un evento OnKeyPress.
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.