+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: [MsAccess] TreeView VBA

  1. #1
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126

    [MsAccess] TreeView VBA

    Pubblico un Demo in fase di perfezionamento, sul Controllo TREEVIEW sviluppato per sopperire alla mancanza della conversione di MS alla versione 64Bit.

    Nulla di pretenzioso, solo qualche cosa di utilizzabile pur con qualche limite, ma a mio parere estremamente utile.

    Demo:
    VBATreeView2017.zip

    Demo Light:
    VBATreeView2017_L.zip

    Manuale:
    Manuale.zip

    Metteteli nella stessa cartella, ho dovuto spezzare l'allegato per superamento della dimensione massima consentita.

    UPDATE 14-06-2017
    Migliorate le prestazioni, eliminate le Query Esterne per l'aggiornamento, ora sono inglobate nella Form del Treeview.
    Aggiunto un esempio di ComboBox con gli Item Gerarchici e le Icone che sfrutta la medesima Form.

    UPDATE 20-06-2017
    Alcune modifiche logiche e di contenuti del codice per migliorare le prestazioni.
    Implementato l'EDIT RUNTIME in linea... della Caption visibile nel DemoTreeView.

    UPDATE 23-06-2017
    BugFix su EDIT RUNTIME
    Inserito, durante il Drag&Drop la segnalazione del Nodo(Partenza) e Nodo(destinazione) anche su MouseMove...

    UPDATE 27-06-2017
    Inserito il riposizionamento della ScrollBar, di conseguenza Item, dopo il Collapse di un Nodo.
    Inserita la gestione di Menù Contestuale costruito Runtime in LateBinding con RightClick sul singolo Nodo.
    L'edit del Nodo avviene sia per Doppio Click che per Mantenimento di [Shift+LeftButton per 500msec.]

    UPDATE 03-07-2017
    Sistemazioni generiche, migliorato il Drag&Drop nella parte grafica di posizionamento della Form Popup per l'effetto.
    Spostati metodi nella Classe.
    Rimossi campi dalla Tabella principale, ottimizzata la Funzione di ricalcolo.

    UPDATE 11-07-2017
    Tentativi vari di ridurre Latenza e Flikering... non con grandissimi risultati sulla latenza... ma il Flikering discretamente migliorato.
    Ottimizzazioni varie di codice e pulizia.

    UPDATE 11-07-2017
    Realizzata versione LIGHT senza ICONE, ma con rappresentazione gerarchica e SpecialChar per il Nodo.
    Leggero e molto veloce rispetto alla versione standard.

    UPDATE 17-07-2017
    Bug Fix vari... sulla versione LIGHT.
    Ultima modifica di @Alex; 17-07-2017 07:50 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  2. #2
    L'avatar di muttley005
    muttley005 non è in linea Scribacchino
    Post
    1,931
    Ciao Alex, ti segnalo un paio di cose:

    1) se apri l'explorer e annulli l'operazione (a me!!) va in errore dando questo messaggio Cattura.PNG
    e poi questo per 5/6 volte Cattura1.PNG ... ma lo fa anche se seleziono il mio F: ... vedo di capire perchè e ti aggiorno.

    2) a me non appaiono molti dei caratteri che hai utilizzato Cattura2.PNG (l'ho provato su un pc w7 64b con a2013 32b che ha solo caratteri di sistema installati)

    3) la velocità non è il massimo ma ne abbiamo già parlato e sicuramente è come dici tu per la latenza per non avere flikering delle immagini

  3. #3
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Quote Originariamente inviato da muttley005 Visualizza il messaggio
    Ciao Alex, ti segnalo un paio di cose:

    1) se apri l'explorer e annulli l'operazione (a me!!) va in errore dando questo messaggio Allegato 2361
    e poi questo per 5/6 volte Allegato 2362 ... ma lo fa anche se seleziono il mio F: ... vedo di capire perchè e ti aggiorno.
    Purtroppo ho lasciato in terzo piano il dettaglio... ne troveremo altri, allego la modifica alla Sub Click del CommandButton OpenFolder:
    codice:
    Private Sub cmdOpenFolder_Click()
        Dim mN          As mclsNode
        Dim strFolder   As String
        Dim strName     As String
        mTreeView.ClearNodes
    
        strFolder = mFolderDialog
        
        If Len(strFolder) = 0 Then Exit Sub
        strName = Mid$(strFolder, InStrRev(strFolder, "\") + 1, Len(strFolder))
        ' ---------------------------------------------------------
        ' CREA UNA STRUTTRA DI ESEMPIO:
        ' ---------------------------------------------------------
        Set mN = mTreeView.AddRoot(strName, strFolder, 104)
    
    
        Call FillListFiles(mN)
        mTreeView.ExpandeAllNodes
        Set mN = Nothing
    End Sub
    Quote Originariamente inviato da muttley005 Visualizza il messaggio
    2) a me non appaiono molti dei caratteri che hai utilizzato Allegato 2363 (l'ho provato su un pc w7 64b con a2013 32b che ha solo caratteri di sistema installati)
    Non so cosa dire... il font è Calibri o Currier New, o Arial, pertanto sono quelli nativi di Windows, Unicode.

    Quote Originariamente inviato da muttley005 Visualizza il messaggio
    3) la velocità non è il massimo ma ne abbiamo già parlato e sicuramente è come dici tu per la latenza per non avere flikering delle immagini
    Direi che non ho molto su cui lavorare... il REPAINT della SubForm avendo controlli Calcolati, anche non fossero immagini, darebbe in ogni caso origine a Flikering, motivo per cui si adotta il congelamento dello schermo con Application.Echo, e questo di conseguenza implica quella latenza.

    Grazie
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  4. #4
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Inseriti aggiornamenti sostaziali per l'ottimizzazione della Form principale del TreeView.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  5. #5
    Dev-01 non è in linea Scolaretto
    Post
    476
    Ciao Alex,

    onestamente non so quanto possa semplificarti il lavoro ma suppongo che possa essere una buona base dalla quale partire.

    Se non altro, potrai confrontarti con la soluzione esistente (il controllo è costruito in maniera particolare ed offre performance fuori dallo standard).

    FastTree

  6. #6
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Quote Originariamente inviato da Dev-01 Visualizza il messaggio
    Ciao Alex,

    onestamente non so quanto possa semplificarti il lavoro ma suppongo che possa essere una buona base dalla quale partire.

    Se non altro, potrai confrontarti con la soluzione esistente (il controllo è costruito in maniera particolare ed offre performance fuori dallo standard).

    FastTree
    Lo hai usato in Access...?
    Chiedo in quanto è sviluppato con NET per NET... forse mi sfugge qualche cosa, nel caso puoi darci maggiori info...?
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  7. #7
    Dev-01 non è in linea Scolaretto
    Post
    476
    No, non l'ho utilizzato in Access ma poiché (mi è parso di capire) ti stai prendendo la briga di creare un controllo da zero, ho pensato che studiare la tecnica con la quale è stato sviluppato questo controllo poteva esserti utile data la grande mole di dati che è in grado di gestire in tempi "iper-ridottissimi".

    Su CodeProject c'è un articolo dello sviluppatore che spiega la particolarità e le peculiarità di questo controllo (sviluppato da zero e in maniera innovativa) che, forse, potresti decidere di implementare, per quanto possibile, nel tuo TV in modo da renderlo maggiormente performante, sempre che t'interessi.

    Ovviamente sta a te scegliere se dare un'occhiata oppure no e capire se può esserti d'aiuto: la mia è solo una proposta.

  8. #8
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Quote Originariamente inviato da Dev-01 Visualizza il messaggio
    No, non l'ho utilizzato in Access ma poiché (mi è parso di capire) ti stai prendendo la briga di creare un controllo da zero, ho pensato che studiare la tecnica con la quale è stato sviluppato questo controllo poteva esserti utile data la grande mole di dati che è in grado di gestire in tempi "iper-ridottissimi".

    Su CodeProject c'è un articolo dello sviluppatore che spiega la particolarità e le peculiarità di questo controllo (sviluppato da zero e in maniera innovativa) che, forse, potresti decidere di implementare, per quanto possibile, nel tuo TV in modo da renderlo maggiormente performante, sempre che t'interessi.

    Ovviamente sta a te scegliere se dare un'occhiata oppure no e capire se può esserti d'aiuto: la mia è solo una proposta.
    Questo non è un 3D... non ho fatto richieste di aiuto,questo è un Articolo, spero ti sia chiara le differenza.

    Aggiungo solo a chiarimento, che per chi conosce Access ed i suoi LIMITI, è estremamente improbabile pensare di approcciare al metodo usabile in NET... sono 2 cose estremamente diverse... questo per dire che l'approccio di linguaggi veramente OOP non ha nulla a che vedere nè è possibile prendere spunto...

    Per farti capire la prima LIMITAZIONE presente solo in Access è l'impossibilità di CREARE CONTROLLI RUNTIME... che rende ad esempio impossibile proprio anche solo pensare a quell'articolo che guarda caso fa proprio questo, come del resto faceva il TreeView originale...

    Quindi escludendo la creazione di controlli RUNTIME, potrei tappezzare una Form con controlli per poi sfruttarli RUNTIME, è una tecnica... pone dei limiti nel Numero ma anche possibilità di manipolazione, ma grande complessità di allineamento del DataBinding...

    Rimane quindi la gestione maschere continue, con i suoi problemi.

    Entrambi i metodi si scontrano in ogni caso con il linguaggio OOP e la gestione GERARCHICA dei dati che non può e non conviene fare per questioni di lentezza.

    Con Access serve inventarsi qualche ACCROCCHIO che sfrutta quello che Access ti consente di fare... e purtroppo a livello grafico è molto poco.

    Motivo per cui se vuoi partecipare in modo funzionale al 3D, l'idea di pubblicarlo è per collaborare nelle migliorie farsi venire IDEE, in modo CONCRETO sul pezzo... perchè purtroppo NET non porta nessun valore aggiunto in Access.

    Saluti
    Ultima modifica di @Alex; 18-06-2017 13:35 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  9. #9
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Ho spostato diversi METODI nella classe NODE per rimanere il più possibile allineato con l'oggetto NODE.
    L'implementazione più importante è quella di consentire l'EDIT della Caption ONLINE...
    Nel DemoTreeView, selezionando un NODO e facendo DOUBLECLICK, si attiva la modalità di EDIT della Caption.
    Su INVIO viene chiesto se salvare o meno...
    L'edit è delegato ad una Form Popup, non avevo altro metodo per attivare un Oggetto in una Form continua, sicchè usando una POPUP, non aperta in modalità SINCRONA in quanto non è possibile rimuovere la TitleBar se non usando API, cosa che non volevo fare.
    Quindi ho relizzato un LOOP Sincrono di attesa della chiusura...(successivamente userò la proprietà VISIBLE, al fine di leggere la proprietà DIRTY ed evitare il Requery se non sono state apportate modifiche...)

    Nemmeno il Posizionamento della Form POPUP non richiede API di alcun tipo, ma usa solo proprietà NATIVE.

    Il Nuovo Metodo per attivare l'edit è [OpenEditBox()] in fondo alla Form [fTV].
    Ultima modifica di @Alex; 21-06-2017 00:21 
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

  10. #10
    L'avatar di @Alex
    @Alex non è in linea Very Important Person
    Post
    16,126
    Corretti alcuni Bugs sulla gestione EDIT.
    Tecnicamente ho eliminato, pur lasciandola come commento, l'uso delle API per il cambio cursore durante il Drag&Drop.
    Ho sfruttato la Form Popup usate per l'EDIT anche per la visualizzazione durante il MouseMove.
    @Alex
    Il CROSSPOST è VIETATO
    Mirror al vecchio sito WEB(salvare i Demo riassegnando l'estensione (.Zip/.Rar/.Exe in base all'icona...):
    http://mirror.masterdrive.it/alessandrobaraldi/
    Leggi il
    Regolamento del Forum e nel comprenderne la filosofia rispettalo.

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi