Pulsante telefono all interno di una maschera

di il
11 risposte

Pulsante telefono all interno di una maschera

Ciao
in una maschera dove compare il numero di telefono vorrei associarlo al pulsante telefono per telefonare con un click
Attualmente il pulsante prende il valore di ogni campo mentre si scorrono i campi e quando arrivo a quello del telefono posso attivare la chiamata
Quello che invece vorrei e che non so fare è associare il pulsante telefono esclusivamente al campo telefono.
Chi mi da qualche suggerimento!
Grazie per l attenzione

11 Risposte

  • Re: Pulsante telefono all interno di una maschera

    Non so come tu riesci a telefonare e/o manipolare quei dati che hai detto, potresti mostrare il tuo codice?
    Per prelevare il valore dal campo [numero telefono] ti basta il semplice
    Me![numero telefono]
    Un po' di precisione: non puoi avere due controlli nella stessa maschera con lo stesso nome (telefono). Chiarisci questo dettaglio.
  • Re: Pulsante telefono all interno di una maschera

    Ho creato in automatico la maschera e nella maschera compaiono i vari campi del Db e tra questi il telefono
    Ho aperto la maschera come struttura e ho inserito il pulsante telefono
    Se sono con il mouse sul campo nome e clicco sul pulsante telefono. mi compone il nome
    Devo posizionarmi sul campo telefono e quindi cliccare sul pulsante telefono perché componga il numero
    Vorrei non scorrere tutti i campi ma associare di default il valore del telefono alla funzione del pulsante
    Non ho scritto neanche una riga di codice
    Grazie
  • Re: Pulsante telefono all interno di una maschera

    bertolino ha scritto:


    nella maschera compaiono i vari campi ...e tra questi il telefono

    bertolino ha scritto:


    Ho aperto la maschera come struttura e ho inserito il pulsante telefono
    È impossibile avere nella stessa maschera un campo (casella di testo) che si chiama "telefono" e un pulsante che si chiama "telefono".

    Io provo a chiamare il campo [Telefono] e il pulsante ComponiTelefono. Poi...non so come si fa a inviare comandi che attivano una tua applicazione che fa funzionare il telefono. Più semplicemente posso mostrare un messaggio che evidenzia tale numero telefono, direi così
    Private Sub ComponiTelefono_Click()
    MsgBox "Questo è il numero telefono selezionato " & Me!Telefono
    End Sub
    Ovviamente ti mostrerà il Telefono del "record corrente", quello cioè dove è posizionato il cursore. Non sappiamo nemmeno se sei in maschera singola o maschera continua.

    bertolino ha scritto:


    Se sono con il mouse sul campo nome e clicco sul pulsante telefono. mi compone il nome
    Come fa a comporre un nome? Che vuol dire "compone il nome"?

    bertolino ha scritto:


    Non ho scritto neanche una riga di codice
    Come fai ad affermare che il clic pulsante "compone il nome" oppure "compone il numero"?
  • Re: Pulsante telefono all interno di una maschera

    Bertolino,
    chiarisci meglio l'operazione che hai condotto, in modo automatico con la auto-composizione, perché si potrebbe intendere che si è posto un pulsante di comando che fra le varie opportunità offre l'icona del telefono che associa al bottone il seguente codice:
    
    Private Sub btnTelefono_Click()
    On Error GoTo Err_btnTelefono_Click
    
        Dim stDialStr As String
        Dim PrevCtl As Control
        Const ERR_OBJNOTEXIST = 2467
        Const ERR_OBJNOTSET = 91
        Const ERR_CANTMOVE = 2483
    
        Set PrevCtl = Screen.PreviousControl
        
        If TypeOf PrevCtl Is TextBox Then
          stDialStr = IIf(VarType(PrevCtl) > V_NULL, PrevCtl, "")
        ElseIf TypeOf PrevCtl Is ListBox Then
          stDialStr = IIf(VarType(PrevCtl) > V_NULL, PrevCtl, "")
        ElseIf TypeOf PrevCtl Is ComboBox Then
          stDialStr = IIf(VarType(PrevCtl) > V_NULL, PrevCtl, "")
        Else
          stDialStr = ""
        End If
        
        Application.Run "utility.wlib_AutoDial", stDialStr
    
    Exit_btnTelefono_Click:
        Exit Sub
    
    Err_btnTelefono_Click:
        If (Err = ERR_OBJNOTEXIST) Or (Err = ERR_OBJNOTSET) Or (Err = ERR_CANTMOVE) Then
          Resume Next
        End If
        MsgBox Err.Description
        Resume Exit_btnTelefono_Click
        
    End Sub
    
    che opera eseguendo "utility.wlib_AutoDial", stDialStr ove quest'ultimo è la stringa del numero di telefono che viene composto.

    Per informazioni nel merito:
    https://support.microsoft.com/en-us/kb/14885
    http://stackoverflow.com/questions/16237240/identifying-vba-code
    http://www.access-programmers.co.uk/forums/showthread.php?t=19938

    http://www.pcreview.co.uk/threads/is-there-an-utility-wlib_autodial-replacement.3315789/
    http://microsoft.public.it.office.access.narkive.com/nSVmgUie/documentazione-x-gestire-chiamate-telefoniche
    http://www.hwupgrade.it/forum/archive/index.php/t-546599.html
    https://bytes.com/topic/access/answers/191677-preferred-phone-dialer-access
  • Re: Pulsante telefono all interno di una maschera

    Chiedo scusa delle tante imprecisioni
    Infatti Willy questo è il problema e dovrò quindi intervenire nella funzione affinché crei la condizione che associ esclusivamente il campo telefono all esecuzione della funzione stessa
    Provo a vedere se ci riesco
    Grazie ancora
  • Re: Pulsante telefono all interno di una maschera

    Azzardo una mia interpretazione di quel codice, semplificandolo così
    Private Sub btnTelefono_Click()
    Dim stDialStr As String
    stDialStr = Me!Telefono
    Application.Run "utility.wlib_AutoDial", stDialStr
    End Sub
    fidandomi ciecamente che "utility.wlib_AutoDial" effettui automaticamente la chiamata.

    Nel fare un test, mi appaiono delle finestre che mi chiedono di impostare il modem. Io non ho approfondito, ma mi pare di capire che funziona.
  • Re: Pulsante telefono all interno di una maschera

    bertolino ha scritto:


    Chiedo scusa delle tante imprecisioni
    Infatti Willy questo è il problema e dovrò quindi intervenire nella funzione affinché crei la condizione che associ esclusivamente il campo telefono all esecuzione della funzione stessa
    Provo a vedere se ci riesco
    Grazie ancora
    Uno sviluppatore di norma non si affida a LIBRERIE di cui non conosce il proseguo ed il mantenimento... motivo per cui questa LIB a mio avviso è poco interessante... oltre che rischiosa della funzionalità dell'applicativo.

    Leggendo in giro vengono riportate parecchie anomalie di Crash e di NON funzionalità in caso di distribuzione del Runtime, se poi si è Version Dependent... ancora peggio, ma l'invocazione con il Metodo RUN di application in questo caso è in LATEBINDING quindi andrebbe bene.
    Declare Function TAPI_Make_Call Lib _
    "tapi32.dll" Alias "tapiRequestMakeCall" _
    (ByVal stNumber As String, _
    ByVal stDummy1 As String, _
    ByVal stDummy2 As String, _
    ByVal stDummy3 As String) As Long
    
    TAPI_Make_Call "3399898988", "", "", ""
    Ovviamente serve essere certi che il Numero di telefono sia corretto(non giusto) dal punto di vista sintattico quindi io metterei uno TRIM per eliminare eventuali spazzi vuoti...

    Tuttavia nello specifico del tuo problema, io non sono riuscito a capire quale sia il problema contingente...
    Non c'è possibilità che il VBA sbagli controllo se scrivi codice indirizzato al controllo che contiene il Numero di Telefono... quindi non usare Screen.ActiveControl, ma solo Me!NomeTextBoxTelefono.Value e questo funzionerà sia in Maschera singola che continua(Sul Record attivo) e ti eviti complicazioni di controllo sinceramente inutili.
  • Re: Pulsante telefono all interno di una maschera

    Rimango stupito e contento da così tanti aiuti e spudoratamente ne approfitto.
    Ho un db Ms access che utilizzo per contattare potenziali fornitori e vi sono vari campi tra cui anche quello del telefono, per velocizzare le telefonate ed usare la cuffia collegata al Pc al posto di comporre ogni volta il numero ho provato a creare una maschera con i dati della tabella.
    Ho creato la maschera con l'autocomposizione e poi sono andato in modalità struttura, da qui in modalità guidata "creazione guidata pulsante di comando", ho selezionato tra le cateogir "varie" e poi azioni "composizione automatica".
    Fino a qui tutto Ok funziona ed è stato facile (la mia prima maschera), ora succede che quando apro la maschera per utilizzarla il primo elemento o diciamo la prima casella d'input della maschera è l'id della tabella, il nome del fornitore e via di seguito.
    Quindi devo scorrere il cursore su tutti i vari elementi fino ad arrivare al telefono.
    Quello che mi piacerebbe e mi sembra che il "saggio" mi abbia suggerito la risposta, è che tale composizione automatica fosse esclusiva dell'emento telefono in maniera di non dovermi posizionare sullo stesso per avere come input il numero.
    L'ultimo post "Declare Function TAPI_Make_Call Lib _" non ho competenze adeguate e tengo a precisare che non programmo in access e non conosco il visual basic e
    "Private Sub btnTelefono_Click()
    Dim stDialStr As String
    stDialStr = Me!Telefono
    Application.Run "utility.wlib_AutoDial", stDialStr
    End Sub"
    Dovrò studiare dove porla se qualcuno non me lo suggerisce!
    Prolisso..eh !
    Grazie
  • Re: Pulsante telefono all interno di una maschera

    OsvaldoLaviosa,
    la funzione che viene fornita in auto-composizione si basa sull'opportunità di esaminare il controllo precedente prima che si sia attivato il pulsante, con la icona del telefono, in modo da offrire un passaggio (fra controllo precedente, del numero telefonico, ove è il focus ed il successivo, il pulsante di comando, preposto alla chiamata telefonica) in modo automatico ed indipendente dalle maschere impiegate.
    Ridurlo ad una semplice assegnazione di stringa per la chiamata tramite modem può essere fuorviante per una serie di ragioni:
    - la stringa presente nel formato phone number
    https://support.office.com/en-us/article/Control-data-entry-formats-with-input-masks-E125997A-7791-49E5-8672-4A47832DE8DA
    devhut.net/2010/06/22/ms-access-phone-number-format/
    - i codici AT del modem che dovrebbero inizializzare la chiamata (come ad esempio per l'uscita nel centralino) con conseguente variazione della stringa da fornire.
    Inoltre semplificare il codice, ad esempio non inserendo la gestione degli errori, è riduttivo e oltre che essere poco professionale comporta l'inconveniente per l'utente di ricevere i messaggi di errore (non gestiti) come quelli di impostare il modem che magari possono essere fuorvianti per un utente finale non preposto allo sviluppo.

    Mi trovo d'accordo con quanto riportato da Alex sull'impiego di codice per quanto possibile indipendente da LIB esterne, magari affidandosi a features fornite direttamente dal sistema operativo, che dialoghi con il modem per la comunicazione ad un livello astratto (per quanto possibile) del dispositivo impiegato.

    In merito alla Utility.wlib_autodial è da tenere presente che non è una vera e propria LIB, ma piuttosto del codice posto nel file UTILITY.MDA che è, appunto, un file MDA (Access Add-in) quale componente aggiuntivo, fornito con Access (prima della versione 2007).
    Basta accedervi e vedere maschera ad_frmAutoDial; per avere un esempio di composizione del numero telefonico in chiamata ( ma essendo protetto, non è possibile visionare o modificare il codice).
    Infatti il codice che viene fornito nella auto-composizione del pulsante di comando si appoggia a questo; pertanto viene effettuata la chiamata telefonica, tramite una funzione ("wlib_autodial") che è sempre nel file MDA, all'interno del modulo di classe "Utils" e questa funzione apre il modulo "acr_frmautodial" che è appunto la form che si attiva attraverso il comando:
    Application.Run "utility.wlib_AutoDial", stDialStr
    Qualsiasi utente interessato può aprire il file UTILITY.MDA presente nella directory di installazione di Office, come ad esempio:
    C:\Programmi\Microsoft Office\Office10\UTILITY.MDA
    e visionare l'interfaccia presente.

    Dal momento che la vera e propria comunicazione telefonica con il modem avviene tramite il sistema operativo è chiaramente preferibile, per un utente evoluto, by-passare il file MDA e, magari, appoggiarsi alle librerie fornite per il dialogo con il dispositivo.
    In tal modo ci si rende indipendenti dalle versioni di Access e ci si adegua maggiormente alle variazioni seguite dal sistema operativo.

    In tal caso si può impiegare la libreria dinamica Tapi32.DLL (Telephony Application Programming Interface) quale componenete COM delle API fornite dal sistema operativo Microsoft Windows:


    Dal punto di vista pratico, sulla scia di Alex, per similari esempi sulle funzioni basate sulle TAPI si possono vedere questi link:
    acceseros.zoomblog.com/archivo/2005/09/05/tip-Autodial-de-Access.html
    yqcomputer.com/11_21004_1.htm
    ennius.altervista.org/free/ifvba91.htm

    Al riguardo delle possibili problematiche legate a TAPI e TSPI si può vedere il seguente link che offre molti riferimenti:
    i-b-a-m.de/Andreas_Marschall's_TAPI_and_TSPI_FAQ.htm

    In merito alla documentazione sull'impiego delle librerie per la comunicazione telefonica si possono vedere seguenti testi:

    https://books.google.it/books?id=3M_mIvtdGqUC&pg=PA229&lpg=PA229&dq=tapi32.dll&source=bl&ots=5VoyxcDSCm&sig=M_6gIq4XNNV_oBD9FgKoklXCRlA&hl=it&sa=X&ved=0ahUKEwjl2oyvifvPAhUIMBoKHT5dBCM4ChDoAQgjMAE#v=onepage&q=tapi32.dll&f=false
    https://books.google.it/books?id=YMas7A3E65MC&pg=PA255&lpg=PA255&dq=tapi32.dll&source=bl&ots=qA_y3n1avy&sig=BIC-ffMb7jN0OagoRWhTxwFe6iA&hl=it&sa=X&ved=0ahUKEwjz4NvHivvPAhUJNhoKHXIbCws4FBDoAQgsMAI#v=onepage&q=tapi32.dll&f=false
    iasj.net/iasj?func=fulltext&aId=75229

    Per quanto sopra esposto, penso, Bertolino che tu, ora, abbia una ampia panoramica degli elementi conoscitivi per procedere in autonomia.
  • Re: Pulsante telefono all interno di una maschera

    Più di così !!!
    Vi ringrazio per l'aiuto e per i suggerimenti.
    Avevo scaricato uno script in vbscript che già mi aveva incastrato con varie dll esterne da installare per usare TAPI.
    Vado a leggere quello che mi hai indicato come già avevo iniziato quando mi avevi risposto ieri e cerco una soluzione congeniale al mio problema
    Grazie per la cortesia e i numerosi links suggeriti.
    Saluti
  • Re: Pulsante telefono all interno di una maschera

    TAPI non vanno installate... sono distribuite con Windows.... quindi le trovi già.
    L'unica attenzione eventuale è la compilazione condizionale del codice per i 64bit se serve.
Devi accedere o registrarti per scrivere nel forum
11 risposte