Microsoft Forms 2.0

di il
5 risposte

Microsoft Forms 2.0

Salve a tutti
ho un piccolo problema
sto cercando di "tradurre" un mio programma su access in vb6 sp6
il problema è che utilizzando i combobox della libreria Forms 2.0 mi succede una cosa molto strana
ho due combobox e vorrei che se il fuoco va sulla seconda senza che sia stata già stato selezionato un valore nella prima il fuoco torni sulla prima

molto semplicemente su combobox2_gotfocus()
if combobox1="" or isnull(combobox1) then
combobox1.setfocus
end if

la cosa funziona se clicco sulla freccia della combobox2, il fuoco va sulla prima
mentre se clicco sulla combobox2, intendo proprio nella listbox, il fuoco si sposta ma tutto il form si blocca e non funziona più niente, sinchè non clicco sulla freccia della combobox2 e si sblocca tutto

secondo voi che sto combinando?
grazie

5 Risposte

  • Re: Microsoft Forms 2.0

    Ok
    forse ho risolto
    a quanto capisco il form si inchioda in quanto va in loop passando il fuoco a combo2 automaticamente e combo2 lo ripassa a combo1 da procedura
    per inciso col passaggio del fuoco in automatico, per esempio a selezione dalla lista del combobox, me lo fanno anche i combobox originali di vb6
    intercettando in sublassing l'handler del combo.child e rilevando il passaggio del mouse e del tasto sinistro premuto si risolve il problema causato dal mouse.
    mentre per il TAB, che non viene rilevato dagli eventi keypress ecc.., richiamando GetKeyboardState e SetKeyboardState da User32.dll si può settare TAB a zero e passare il fuoco da procedura.
    sembrerebbe funzionare
    c'è qualche sistema più semplice?
  • Re: Microsoft Forms 2.0

    Non devi usare la FM20.dll , lo dice Microsoft:

    1: Microsoft dichiara espressamente che la libreria Microsoft Forms 2.0 Objects Library (FM20.DLL) non è fatta per essere usata in VB6.0 ma è stata realizzata solo per Office.

    2: nel caso il tuo programma dovesse essere distribuito, non potrai farlo se usa la FM20.DLL, perché non hai diritti di né usarla, né tanto meno di distribuirla.
    Oltretutto la FM20.DLL viene installata con Office, e quasi sempre è diversa in funzione della versione di Office.

    3: la versione distribuita con Visual Basic è assolutamente preistorica, quindi obsoleta.

    Gli stessi controlli (o quasi) li trovi nel Microsoft Windowsless Controls 6.0 (MSWLESS.OCX), che però sembra non essere più supportato da Windows 7 in poi (non la uso, quindi non so quali problemi abbiano).

    A parte quanto sopra, io ho provato il tuo codice (con la FM20.DLL) e a me non crea alcun problema.
    Dato che ho Office 2013 installato io sto usando la versione 15.0.1120.107.
    Tu che versioni usi?

    In ogni caso dovresti usare i controlli intrinseci di Visual Basic 6.0.

  • Re: Microsoft Forms 2.0

    Ciao Gibra
    grazie per la risposta
    so che fm20 ha bisogno di una licenza, ma quello che sto facendo deve girare su un server con winserver 2003, office 2003 e visualstudio 2005 quindi non credo di avere problemi di distribuzione o di software obsoleto dato che l'ambiente è già arcaico
    il mio programma si deve inserire in un programma di gestione aziendale scritto in vb ed al momento l'ho scritto in vba ma quando viene richiamato si porta dietro tutto access per cui ho pensato di giocarmi le ferie (!) traducendolo in vb6, per il futuro "dovremmo" acquisire un nuova versione del programma di gestione scritto in C# e nel caso lo dovrò riscrivere, ma al momento sono combinato così.
    ho provato i combobox di mswless ma lo fa anche con quelle, probabilmente è un problema di winserver 2003 e non delle librerie in sè.
    ora sto usando i controlli di vb6 e con il subclassing credo di avere risolto, con GetComboEditHandle, ComboBoxInfo mi dà tutte le informazioni per gestire direttamente il combobox però il brutto del subclassing è che mi viene piuttosto complesso il debugging e non posso permettermi di inchiodare il server con una gestione sbagliata degli handler.
    anche perchè contemporaneamente uso il subclassing per l'autocompletamento nel combolist, per questo speravo in una soluzione meno complicata.
    capisco però che la soluzione dovrebbe essere più radicale, ma non dipende da me.
    grazie comunque per l'aiuto
    ciao
  • Re: Microsoft Forms 2.0

    Boh, francamente la tua non-risposta non l'ho capita.

    Che tu abbia Office 2003 su un server non ha nessuna importanza, dato che Visual Basic 6.0 non ha nulla a che vedere con l'ambiente MS Access, per cui:

    1. Dimentica tutto ciò che riguarda l'ambiente MS Access.

    2. VB6 funziona in modo completamente differente.

    3. Non è un problema di Windows Server 2003, né di Office 2003 sul server
    Quando esegui un programma da un Client le librerie utilizzate sono quelle del Client, non quelle del server, quindi devono essere installate sul Client (e qui entreremmo in un discorso lungo e complesso che sfocia nell'OT).
    In sostanza, quello che c'è sul server non ha la minima importanza, a parte ovviamenti il database con i dati (ovviamente).

    Resta il fatto che non capisco perché tu non voglia utilizzare i controlli intrinseci di VB6.0...
  • Re: Microsoft Forms 2.0

    Ciao Gibra
    scusa, ho dato per scontate troppe cose.
    la procedura e il mio programma girano su server che ha mf20 dato che ha access con licenza pagata
    tutti gli utenti lavorano in remoto su server
    quando, raramente, lavorano in locale, visto che utilizzano la mia procedura di access, hanno installato anche mf20 con pieno diritto anche in locale
    quello che sto cercando di fare, anche in vista di un possibile passaggio a C#, è di svincolarmi da access e finirla di dovermelo trascinare dietro
    in ogni caso, come ti dicevo, sono tornato ad utilizzare i combo di vb6 ricostruendo tutte quelle funzioni di gestione che vb6 non ha rispetto a quello che gli utenti sono abituati ad utilizzare adesso con il programma in vba, ad es. combobox a più colonne ecc., in modo da evitarmi il "panico da pulsantino spostato"
    però, appunto, l'ho fatto in subclassing e mi interessava sapere se c'era un sistema più semplice, tutto qui
Devi accedere o registrarti per scrivere nel forum
5 risposte