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

Discussione: [delphi] exception

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315

    [delphi] exception

    Ciao a tutti, ciao Alka,

    ho fatto un programma al quale vorrei attivare una gestione delle EXception, vorrei almeno fare in modo che quando viene sollevata un'eccezione qualsiasi venga visualizato un mio messaggio invece che quello di sistema.

    in pratica alcune eccezioni (dove possibile) le riesco a gestire con try..except, ma vorrei ruiscire ad intercettare quelle particolari quali "invalid input value".

    ho cercato su internet ed ho trovato qualcosa....ma non sono riuscito a capire come scrivere una procedura unica che visualizza la stessa MiaformExcepition in tutto il programma.

    mi potete aiutare?
    grazie
    fulvio

  2. #2
    Utente bannato
    Registrato dal
    Apr 2003
    Messaggi
    1,119
    "giustappunto..."
    interessa anche a me!

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Dalla pagina "Additional" della Palette dei Componenti di Delphi puoi trascinare su un form o su un DataModule il componente TApplicationEvents.

    Questo componente ti permette di intercettare alcuni eventi che riguardano l'applicazione nella sua interezza, tra i quali la generazione di un'eccezione che non viene gestita nella procedura o nel metodo in cui avviene attraverso un costrutto try...except.

    L'evento OnException viene generato quando un'eccezione si verifica e non viene gestita: l'eccezione (oggetto Exception) viene passata come parametro al metodo di gestione dell'evento.

    Questo evento è utile per attività di logging degli errori e altre necessità, come quella di visualizzare un messaggio di errore personalizzato.

    Fai qualche prova...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    Fai qualche prova...


    non c'e' stato niente da provare!!!

    ha funzionato perfettamente subito!

    ho inserito l'oggetto da te suggerito sul mio FrmMain e nell'evento OnException

    codice:
    procedure TFrmMenu.ApplicationEvents1Exception(Sender: TObject;
      E: Exception);
    begin
     ShowMessage(E.ClassName+' errore genetato, messaggio: '+E.Message);
    end;
    e cosi visualizzo il mio messaggio ad ogni eccezzione.

    grazie!!!!

    ciao

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Un'ultima indicazione: se tu dovessi un giorno rimuovere quel componente dal progetto perchè decidi di non utilizzarlo più, ricordati di rimuovere anche i riferimenti alla unit che lo contiene (AppEvnts) poichè tale unit provede ad installare dei "gestori alternativi di eccezioni" che vengono poi utilizzati per catturare gli errori e indirizzarli verso il componente ApplicationEvents.

    In presenza di riferimenti alla unit, questi gestori vengono installati, ma senza un componente ApplicationEvents non è possibile ricevere notifiche da questi, pertanto l'effetto che si nota è la mancanza di messaggi visualizzati a fronte di un errore.

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

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    scusa,....ho un dbedit collegato ad un campo date,...nel quale utilizzo una editmask x l'input del campo.

    viene controllato tutto, ma viene generata una eccezzione che non capisco:

    se immetto una data esatta nel campo es: 17/04/2004 e' ok. nel momento in cui cancello questi numeri (restano solo ' / / ')...viene generata la solita eccezione 'invalid input value.

    come devo fare per poter annullare questo valore?...x lasciare il campo vuoto....


    grazie
    fulvio

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Non è possibile: quando abbandoni un controllo sul quale è stata impostata una maschera per l'input, tale maschera deve essere rispettata affinchè sia possibile abbandonare il controllo.

    Potresti tentare con un "workaround". Supponiamo che il controllo DBEdit contenga inizialmente un valore nullo: se l'utente modifica il campo, allora il valore deve essere valido, in caso contrario *deve* premere ESC per annullare le modifiche e ritornare al valore nullo o al valore valido precedentemente; per rimuovere il contenuto di un campo già inizializzato, manualmente o dall'utente, senza dover modificare quello che appare nella casella di testo, potresti introdurre un pulsante di piccole dimensioni da affiancare alla casella che, una volta premuto, imposti il campo data/ora a NULL con il metodo Clear:
    codice:
      ...
      MyDataSet.FieldByName('DATAORA').Clear;
      ...
    Non ho provato questa soluzione, quindi non ne garantisco la buona riuscita, ma tentare non nuoce.

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

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

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    in questa maniera riesco ad azzerare il campo di input e quindi a non fare verificare l'eccezzione.

    stavo pensando di mettere un controllo nella funzione che gestisce le eccezioni, in pratica vorrei effetuare automaticamente questa operazione
    MyDataSet.FieldByName('DATAORA').Clear;
    al verificarsi dell'eccezione.

    quindi;
    codice:
    procedure TFrmMenu.ApplicationEvents1Exception(Sender: TObject;
      E: Exception);
    begin
      if e.message = '  /  /    ' then 
       begin
       ....
       .....clear
       ....
       end;
    
    end;
    mi manca conoscere il nome del campo su cui avviene l'eccezzione.
    forse lo si puo passare come parametro alla procedura?

    mi sai dire come lo devo leggere o perlomeno come posso effetuare la clear dall'intero della funzione che gestisce l'eccezzione?

    grazie
    fulvio

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Mmm...comprendo benissimo il tuo problema, ma non credo che "globabizzare" e generalizzare il codice di gestione dell'eccezione in modo che faccia la Clear di un campo che magari risiede in un componente appartenente ad un DataModule che potrebbe non essere nemmeno caricato sia una soluzione sicura.

    Insomma, mi sembra che questo approccio complichi molto la struttura del programma e potrebbe produrre degli effetti collaterali in futuro.

    Secondo me, la soluzione che può risolvere in modo elegante il tuo problema è quella di cercare in rete un controllo data aware che permetta di gestire un campo di tipo data/ora, così l'input risulta più intuitivo per l'utente e i controlli sono facilitati.

    Esiste un controllo di questo tipo nella JEDI Visual Component Library.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    scusami Alka,

    mi trovo un attimo in difficolta.

    premetto che nn ho mai installato componenti di terze parti.

    mi sono collegato alla pagina da te linkata ed ho trovato varie cose di cui poter effettuare il download.

    ma cosa devo scaricare in particolare?

    JVCL300BETA1Complete.zip questo file?

    e poi dopo averlo scaricato lo devo installare,...credo che verra creata una ulteriore cartella nel menu palette nel quale avro i nuovi componenti?!

    Tu mi consigli di installarli e utilizzarli tranquillamente?


    grazie
    fulvio

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.