Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138

    Nuovo programmatore Delphi...

    ciao a tutti
    sono un NeoDelphi e vorrei sapere come gestire le eccezioni in delphi.
    Premetto che conosco un po' la programmazione ma con VB e vorrei imparare ad usare Delphi anche perchè, non me ne vogliano i programm. VB, mi sembra migliore....
    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Le eccezioni sono oggetti estremamente potenti per la gestione degli errori in Delphi.

    Se sei abituato a fare clic su "End" quando il tuo programma VB si blocca per qualsiasi errore, le apprezzerai pienamente.

    Una breve introduzione: quando si verifica un errore inaspettato o una condizione per cui un programma (in generale) non può proseguire, come una divisione per zero o una conversione di tipo impossibile, viene generato un errore. Tale errore, se non opportunamente gestito, provoca la terminazione del programma.

    In Delphi, la gestione degli errori viene affidata alle eccezioni, che non sono altro che oggetti particolari i quali vengono creati al verificarsi di una condizione di errore e ne contengono le informazioni relative.

    Una applicazione Win32 standard realizzata con Delphi incorpora un gestore di eccezioni che è in grado di visualizzare un messaggio quando si verifica un errore e tale errore non viene gestito. Questo previene l'arresto dell'applicazione e, nella maggior parte dei casi, la sussistenza di una situazione non critica che permetta all'applicazione di non interrompersi e di procedere correttamente.

    Il linguaggio Object Pascal mette a disposizione un costrutto in grado di intrappolare le eccezioni per ottenere informazioni su di esse. Il costrutto è try...except.

    Ti riporto un esempio di codice:
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        Valore := StrToInt(Edit1.Text);
      except
        ShowMessage('Impossibile convertire il valore!');
      end;
    end;
    Il seguente codice (non testato) converte il testo contenuto in una casella memorizzandolo in una variabile intera. Se la conversione non va a buon fine, puoi intercettarla come ti ho indicato e visualizzare un messaggio personalizzato. Quando un'eccezione viene gestita in questo modo, viene anche automaticamente deallocata. In caso contrario, è il gestore predefinito dell'applicazione Delphi a prendere il controllo e a visualizzare un messaggio appropriato; l'operazione di conversione non va a buon fine...ma l'applicazione continua a "girare", consentendoci di correggere l'errore nel valore digitato e riprovare.

    Spero di averti dato indicazioni di massima utili per le tue ricerche.

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

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

  3. #3
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138
    utilissimo grazie
    quindi vuol dire che tutte le operazioni che voglio fare e che potrebbero, per un errore di programmazione, di inserimento dati o di attesa di una qualche operazione, causarmi il blocco del programma le devo scrivere dopo l'istruzione try e mi eseguirà il codice immesso dopo except?
    Esistono anche in Delphi quelli che in VB sono i parametri dell'oggetto Err? (es. Err.number?)

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    La differenza tra VB (non .NET) e Delphi nella gestione degli errori è questa: nel caso in cui il programmatore non introduca meccanismi di gestione degli errori, un programma VB si ferma, mentre Delphi non necessariamente.

    In Delphi non è obbligatorio gestire l'errore: se si verifica, viene presentato un messaggio predefinito e lo stack delle chiamate alle procedure e alle funzioni viene annullato (si risale alla ricerca di gestori di errori fino a quello predefinito).

    Per ottenere informazioni sull'eccezione, si usa un costrutto di questo tipo:
    codice:
    try
      // ...
    except
      on E:Exception do
        ShowMessage(E.Message);
    end;
    Con questa struttura, puoi bloccare solo le eccezioni o i gruppi di eccezioni che ti interessano (poichè sono strutturate in classi, cosa che approfondirai probabilmente in un secondo momento); attraverso la variabile E, puoi esplorare le proprietà dell'eccezione, tra cui il messaggio descrittivo che viene normalmente visualizzato da Delphi se non ti occupi di gestire "manualmente" l'errore.

    Ti basta fare qualche prova pratica per accorgerti del funzionamento.
    Consulta anche la Guida in linea per vedere le proprietà di Exception e alcuni esempi di utilizzo.

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

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

  5. #5
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138
    perfetto grazie mille
    Ora vorrei porti una domanda precisa, perchè solitamente voglio arrivarci da solo alle soluzioni, ma stavolta mi sa che è dura.
    Sto costruendo un piccolo applicativo che tramite gli oggetti di fastnet si connetta ad un pop e riceva la posta e tramite smtp spedisca una risposta.
    Se sono già connesso ad Internet non c'è nessun problema: si connette al pop, legge i msg popola la list e mi da l'Output.
    Se però non sono già connesso ovviamente viene richiesta la connessione, parte la connessione remota e comincia la procedura.La cosa che però non funzione è che dopo un pò, e prima della connessione avvenuta, Delphi mi genera un errore e mi blocca il programma(il timeout dell'oggetto è impostato a 100.000 ms).In questo caso sarebbe utile gestire il problema con le eccezioni?E per farlo quali "errori" mi servono e come faccio a saperlo?(Oltre che chiederlo a te?)

    Inoltre altra domanda veloce quali sono le funzioni per gestire e manipolare le stringhe?

    Grazie mille per il tuo tempo

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    La gestione di un errore di quel tipo dipende dal modo in cui viene generato.

    Immagino che richiamerai un metodo per avviare la connessione...il programma ti rimane in attesa (bloccato) fino a quando questa non avviene oppure quando si esaurisce il timeout, giusto?

    In questo caso, puoi racchiudere nel blocco try...except la chiamata al metodo di connessione.

    In caso contrario, supponendo che la connessione avvenga in un thread esterno (quindi separato dal thread primario dell'applicazione), le cose sono un po' più difficili, quindi non saprei...dovrei studiarmi il comportamento del componente.


    Per quanto riguarda la manipolazione delle stringhe, le procedure e funzioni a disposizione sono veramente tante...quindi ti rimando alla Guida in linea. Cerca string manipulation routines e dovresti trovare un elenco completo...basta fare clic per ottenere anche la descrizione.

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

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

  7. #7
    Utente di HTML.it L'avatar di macse
    Registrato dal
    Dec 2002
    Messaggi
    138
    Grazie mille ti ho rubato fin troppo sapere ...
    macse

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.