-
-
| .
|
|
|
Posizione del problema.
Dato un semispazio indefinito sulla cui superficie di separazione agiscono una serie di nastri di carico indefiniti, si deve determinare l'incremento delle tensioni verticali (e volendo anche le orizzontali o/e le tangenziali o in generale le tensioni pricipali minime e massime e le direzioni associate) in ogni punto di una definita regione del semispazio.
Fissato un sistema di coordinate x, z, atto a descrivere ogni punto del semispazio ed i punti di applicazione dei carichi, si ottiene lo schema sotto raffigurato.
L'incremento delle tensioni nel generico punto P (x,z) dovuto all'insieme dei carichi presenti sulla superficie limite del semispazio risulta essere la somma degli incrementi dovuti ai singoli carichi.
Per la determinazione dell'incremento tensionale dovuto ad un sistema di carico ci viene in aiuto Boussinnesq. Ecco due immagini che riassumono la soluzione di Boussinnesq nel caso di nastro di carico uniforme o nel caso di nastro di carico a distribuzione triangolare.
Il caso di carico trapezio altro non è che la somma delle due soluzioni. Resterebbe da definire il caso del carico triangolare decrescente, che è ottenibile considerando al posto del punto P(x,z) il punto P'(x',z) speculare rispetto al centro del tratto di applicazione del carico triangolare.
Edited by afazio - 31/7/2012, 16:03
|
|
| .
|
-
| .
|
|
|
Mediante l'applicazione delle soluzioni di Boussinesq siamo in grado di calcolare l'incremento delle tensioni in qualsiasi punto P(x,z). Indichiamo con sigma il valore della tensione nel generico punto.
Possiamo pensare il punto come dotato delle tre coordinate (x,z,sigma) riconducendo il problema grafico del tracciamento delle curve di pari incremento tensionale (isobare) al tipico problema topografico di tracciamento delle curve di livello (isoipse) a partire da un piano quotato, cioè da un insieme più o meno sparpagliato di punti di cui abbiamo rilevato le coordinate planimetriche e la quota. Lo scopo del presente 3d è quello di riuscire a tracciare proprio queste curve di livello (Isobare) per ottenere qualcosa di simile a quanto rappresentato nella figura che segue:
Nella versione che avevo scritto per Excel, sfruttando una funzione trovata in rete ero riouscito ad adattarla per rendere colorato il "bulbo delle pressioni" ottenendo quanto segue:
Per chi fosse interessato, ho preso spunto dal seguente link https://digilander.libero.it/foxes/Plot/Isol_plot.htm
in particolare il foglio Isol.xls di Simoluca Santoro e la macro Mapper sviluppata da Robert de Levie ( www.bowdoin.edu/~rdelevie/excellaneous/ )
Nel sito di Simonluca è anche disponibile un documento in pdf che illustra un algoritmo di calcolo per la determinazione di curve di livello a partire da una griglia regolare di punti. https://digilander.libero.it/foxes/Plot/Iso...llo_Appunti.pdf
Edited by afazio - 31/7/2012, 20:18
|
|
| .
|
-
| .
|
|
|
Cominciamo a scrivere un po' di codice. Certamente ci servirà una funzione che ricevendo i dati relativi ad un carico (coordinate del punto dove vogliamo calcolata la sovratensione, ascissa iniziale e ascissa finale del tratto di applicazione del carico, intensità iniziale ed intensità finale del carico) ci restituisca il valore della tensione indotta nel punto.
Una tale funzione avrà pertanto la struttura tipo:
CODICE Public Function sigmaZ(X As Double, z As Double, xi As Double, xf As Double, qi As Double, qf As Double) As Double
' calcola la tensione indotta in un punto di coordinate x,z ' dovuto ad un carico a distribuzione uniforme, triangolare o trapezia
End Function
Volendo prendere in considerazione la possibilita che il carico sia applicato ad una quota z0 diversa dalla superficie limite, dovremmo pensare di aggiungere il relativo parametro nell'intestazione della funzione:
CODICE Public Function sigmaZ(X As Double, z As Double, xi As Double, xf As Double, qi As Double, qf As Double, zo as double) As Double
' calcola la tensione indotta in un punto di coordinate x,z ' dovuto ad un carico a distribuzione uniforme, triangolare o trapezia ' applicato a quota zo rispetto alla superficie limite.
End Function
In questo modo abbiamo anche stabilito la struttura di composizione del singolo carico. Il singolo carico sarà pertanto definito dai seguenti valori:
xi qi
xf qf
zo
Definisco pertanto un tipo di variabile come segue:
CODICE 'Record tipo del carico Public Type CaricoType xi As Double qi As Double xf As Double qf As Double z0 As Double End Type
stabilisco anche un numero massimo di carichi consentiti attraverso una costante che posso sempre modificare:
Public Const MaxCarichi = 12
e quindi posso inizializzare la variabile destinata a contenere i carichi:
Public Carichi(MaxCarichi) As CaricoType
per richiamarmi un valore dell'iesimo carico farò ricorso alla forma:
valorexi= Carichi(i).xi valoreqi=Carichi(i).qi e cosi via per gli altri campi del record
mentre se voglio attribuire i valori ai vari campi del record del k-esimo carico farò ruicorso alla forma
Carichi(k).xi= valorexi Carichi(k).zo= valorezo
Edited by afazio - 31/7/2012, 16:59
|
|
| .
|
-
| .
|
|
|
Alla funzione sigmaZ() arriva la coppia dei valori qi e qf. Vediamo i casi che possono presentarsi.
Primo caso: qf = qi ricadiamo nel caso di carico a distribuzione uniforme e non abbiamo problemi
Secondo caso: qf > qi . in questo caso il diagramma può decomporsi in un primo diagramma a distribuzione uniforme di intensita pari a qi ed un secondo diagramma a distribuzione triangolare crescente con intesita massima pari a (qf-qi). In questo caso operiamo la somma delle due soluzioni riportate sopra.
Terzo caso: qf < qi Anche in questo caso il diagramma può decomporsi in un primo diagramma a distribuzione uniforme di intensita pari a qf ed un secondo diagramma a distribuzione triangolare ma stavolta decrescente con intensita massima pari a (qi-qf). E' proprio in questo caso che nascerebbe la necessita di dover considerare il punto speculare come prima accennato. Possiamo però pensare di decomporre il diagramma di carico trapezio secondo lo schema che segue:
Possiamo notare che la pare triangolare sarebbe negativa dato che la differenza (qf-qi) in questo caso è negativa e che per essa è possibile continuare ad applicare la formula di Boussinesq relativa al carico a distribuzione triangolare senza dover per forza considerare il punto speculare.
Edited by afazio - 31/7/2012, 22:28
|
|
| .
|
-
| .
|
|
|
Ed allora ecco pronta la prima bozza della funzione che dovremo comunque rivedere per considerare i casi particolari in cui il relativo codice puo' andare in errore.
CODICE Public Function sigmaZ(X As Double, z As Double, xi As Double, xf As Double, qi As Double, qf As Double, zo As Double) As Double
' calcola la tensione indotta in un punto di coordinate x,z ' dovuto ad un carico a distribuzione lineare qualsiasi (costante, triangolare o trapezia) ' applicata alla quota zo dal piano limite
Dim alFa As Double Dim bEta1 As Double Dim betA2 As Double Dim pi As Double
pi = 4 * Atn(1)
' determino gli angoli bEta1 = Atn((X - xf) / (z - zo)) betA2 = Atn((X - xi) / (z - zo)) alFa = betA2 - bEta1
' parte rettangolare sigmaZ = qi * (alFa + Sin(alFa) * Cos(alFa + 2 * bEta1)) / pi
' parte triangolare sigmaZ = sigmaZ + (qf - qi) * ((X - xi) * alFa / (xf - xi) - 0.5 * Sin(2 * bEta1)) / pi
End Function
|
|
| .
|
-
| .
|
|
|
La prima fonte di errore potrebbe essere la divisione per zero nel calcolo degli angoli beta1 e beta2. Infatti per z=zo si ha divisione per zero. bEta1 = Atn((X - xf) / (z - zo)) divisione per zero betA2 = Atn((X - xi) / (z - zo)) divisione per zero
Ma cosa succede quando z=zo? Guardiamo lo schema relativo al carico a distribuzione rettangolare postato qualche post sopra. L'angolo beta va a 90° o a 270° nei casi in cui il punto si trova a destra o a sinistra della stesa del carico ed anche quando si trova tra le estremita della distribuzione. L'angolo alfa va a zero nei casi in di punti esterni alla stesa e a 180° per punti interni alla stesa di carico.
quindi avremo: punti a destra della stesa: beta1 =90, alfa= 0 il valore di sigmaZ è sigmaZ = qi * (alFa + Sin(alFa) * Cos(alFa + 2 * bEta1)) / pi sigmaZ = qi * (0 + 0 * Cos(0 + 2 * 90)) / pi --> risultato zero
punti a sinistra della stesa: beta1 =270, alfa= 0 il valore di sigmaZ è sigmaZ = qi * (alFa + Sin(alFa) * Cos(alFa + 2 * bEta1)) / pi sigmaZ = qi * (0 + 0 * Cos(0 + 2 * 270)) / pi --> risultato zero
punti compresi: beta1 =90° (o 270°), alfa= 180° il valore di sigmaZ è sigmaZ = qi * (alFa + Sin(alFa) * Cos(alFa + 2 * bEta1)) / pi sigmaZ = qi * (pi + 0 * Cos(pi + 2 * 90)) / pi --> risultato qi
Interessante: praticamente nei punti esterni alla stesa di carico e posti sullo stesso piano di applicazione del carico, l'incremento tensionale è nullo, mentre nei punti interni, estremi compresi, l'incremento tensionale è pari proprio all'intensità del carico.
Possiamo quindi correggere il codice inserendo quanto abbiamo qui riscontrato (e che si saremmo anche aspettati da logica).
E' ragionevole aspettarsi che accada la stessa cosa nel caso di carico triangolare e cioè: - nei punti esterni alla stesa del carico l'incremento tensionale è nullo - nei punti interni alla stesa di carico l'incrementot ensionale è pari al valore dell'intensita del carico agente nel punto. Quindi nel caso del carico triangolare (ed anche trapezio) dobbiamo procedere ad interpolazione. Abbastanza semplice.
In fase di correzione del codice, per evitare di incorrere nell'errore di divisione per zero, conviene condurre il controllo di uguaglianza delle quote z e zo a monte di tutto.
Edited by afazio - 3/8/2012, 09:14
|
|
| .
|
-
| .
|
|
|
Altra fonte di errore, sempre "division by zero" è presente nella parte di calcolo delle tensioni da stesa a distribuzione triangolare:
sigmaZ = sigmaZ + (qf - qi) * ((X - xi) * alFa / (xf - xi) - 0.5 * Sin(2 * bEta1)) / pi
in particolare quando la differenza (xf - xi) è pari a zero si verifica inesorabilmente l'errore e la procedura si blocca perdendo tutto quanto.
Questo si verifica quando xf=xi cioè stesa di carico di lunghezza nulla. E' chiaro che questo errore si può manifestare solo se in fase di input dei carichi non si pone attenzione ai numeri dati in input. Possiamo evitarlo semplicemente mediante un minimo di controllo in fase di inserimento dei carichi. Tuttavia è sempre bene "mai dire mai" e cautelarci in ogni caso inserendo un controllo anche nella presente funzione.
Puo anche accadere il caso di stesa di carico negativa cioè xf<xi. In questo caso è come se mettessimo un carico negativo su stesa positiva. E' chiaro che dobbiamo evitare queste aberrazioni dei cui risultati non abbiamo certezza. Questo dobbiamo farlo in sede di input dei carichi.
|
|
| .
|
-
| .
|
|
|
Mettendo sotto forma di codice quanto sopra scritto, perveniamo finalmente alla prima versione della funzione sigmaZ()
CODICE Public Function sigmaZ(X As Double, z As Double, xi As Double, xf As Double, qi As Double, qf As Double, zo As Double) As Double
' calcola la tensione indotta in un punto di coordinate x,z ' dovuto ad un carico a distribuzione lineare (costante, triangolare o trapezia ' ed applicata a quota zo rispetto alla superficie limite
Dim alFa As Double Dim bEta As Double Dim betA2 As Double Dim pi As Double
pi = 4 * Atn(1)
If z = zo Then 'cotrollo l'uguagliana tra le quote z e zo If X < xi Or X > xf Then ' il punto è esterno alla stesa di carico sigmaZ = 0 Else ' il punto è interno alla stesa di carico. Interpolazione tra qi e qf sigmaZ = qi + (qf - qi) * (X - xi) / (xf - xi) End If Else ' le quote z e zo non sono uguali, posso quindi calcolare gli angoli senza incorrere ' nell'errore di divisione per zero ' ---- ' inoltre devo limitare il calcolo al solo caso in cui la stesa di carico sia positiva ' cioè xf>xi If xf - xi > 0 Then bEta = Atn((X - xf) / (z - zo)) betA2 = Atn((X - xi) / (z - zo)) alFa = betA2 - bEta ' parte rettangolare del carico sigmaZ = qi * (alFa + Sin(alFa) * Cos(alFa + 2 * bEta)) / pi ' parte triangolare del carico sigmaZ = sigmaZ + (qf - qi) * ((X - xi) * alFa / (xf - xi) - 0.5 * Sin(2 * bEta)) / pi End If End If End Function
Resta ancora da capire cosa succede quando è z<zo, cioe in punti posti al di sopra della quota di applicazione del carico. Mi aspetterei di trovare valori negativi delle tensioni, ma per decidere se apportare modifiche al codice ed eventualmente quali, mi riservo di condurre dei test numerici sulla funzione sfruttando excel.
to be continued...
|
|
| .
|
-
| .
|
|
|
Test numerico di funzionamento della funzione sigmaZ()
E' sufficiente aprire un nuovo foglio di excel, entrare in modalità progettazione, creare un nuovo modulo e copincollare il codice precedente. Torniamo sul foglio, troveremo tra le funzioni personalizzate proprio la funzione testè incollata, predisponiamoci un format di input di un carico di prova ed altra sezione con l'inserimento delle coordinate di un punto e la determinazione della sigmaZ. Divertiamoci a cambiare le coordinate del punto ed anche i valori dei carichi per vederne il funzionamento
Nella immagine precedente sono riportati i test con carico avente cordinate xf>xi e con punti posti a quota zo a quota inferiore ed a quota superiore Le ascisse dei punti sono tali da essere sia esterni sia interni e sia concidenti con gli estremi della stesa di carico. Ho anche condotto test con xf<xi ed hanno dato valori delle tensioni nulle cosi come previsto nella funzione. Come atteso per valori di z sovrastanti il piano di applicazione del carico, le tensioni sono negative con valore praticamente opposto a quello del punto speculare rispetto alla quota z. Occorrerebbe meglio comprendere il significato fisico di ciò e capire se è sensato o meno, per intanto non pongo alcuna limitazione riservandomi di apportarla se necessario in seguito
Le cose sembrano funzionare perfettamente, ma provando numerosi casi ecco imbattermi nell'errore che farebbe arrestare il programma.
L'errore si verifica quando xi=xf e z=zo ed è ubicato in questa parte del codice:
CODICE If z = zo Then 'cotrollo l'uguagliana tra le quote z e zo If X <= xi Or X >= xf Then ' il punto è esterno alla stesa di carico sigmaZ = 0 Else ' il punto è interno alla stesa di carico. Interpolazione tra qi e qf sigmaZ = qi + (qf - qi) * (X - xi) / (xf - xi) End If Else ' le q....... Manca il controllo If xf - xi >0 che invece ho inserito nella successiva parte di codice.
Correggo. Ed ecco la versione finale corretta.
CITAZIONE Public Function sigmaZ(X As Double, z As Double, xi As Double, xf As Double, qi As Double, qf As Double, zo As Double) As Double
' calcola la tensione indotta in un punto di coordinate x,z ' dovuto ad un carico a distribuzione lineare (costante, triangolare o trapezia ' ed applicata a quota zo rispetto alla superficie limite
Dim alFa As Double Dim bEta As Double Dim betA2 As Double Dim pi As Double
pi = 4 * Atn(1) sigmaZ=0 If z = zo Then 'cotrollo l'uguagliana tra le quote z e zo If xf - xi > 0 Then If X <= xi Or X >= xf Then ' il punto è esterno alla stesa di carico sigmaZ = 0 Else ' il punto è interno alla stesa di carico. Interpolazione tra qi e qf sigmaZ = qi + (qf - qi) * (X - xi) / (xf - xi) End If End If Else ' le quote z e zo non sono uguali, posso quindi calcolare gli angoli senza incorrere ' nell'errore di divisione per zero ' ---- ' inoltre devo limitare il calcolo al solo caso in cui la stesa di carico sia positiva ' cioè xf>xi If xf - xi > 0 Then bEta = Atn((X - xf) / (z - zo)) betA2 = Atn((X - xi) / (z - zo)) alFa = betA2 - bEta ' parte rettangolare del carico sigmaZ = qi * (alFa + Sin(alFa) * Cos(alFa + 2 * bEta)) / pi ' parte triangolare del carico sigmaZ = sigmaZ + (qf - qi) * ((X - xi) * alFa / (xf - xi) - 0.5 * Sin(2 * bEta)) / pi End If End If End Function Questa sarà ritoccata solo per escludere, se ne risulterà necessità, il caso di punti posti al di sopra del piano di applicazione del carico.
saluti
Edited by afazio - 4/8/2012, 09:40
|
|
| .
|
-
| .
|
|
|
Alla ricerca dell'algoritmo
Nei giorni scorsi sono stato alla ricerca di algoritmi e codici vari collegati in qualche modo alla costruzione di curve di livello da piano quotato o da semina di punti (x,y,z). In questa ricerca ho avuto modo di approfondire la questione della triangolarizzazione, della costruzione di un modello digitale del terreno (DTM) e dellla costruzione di curve di livello.
Per chi fosse interessato riporto una serie di link utili:
- Autocurve ed Autosez Programmi in lisp per autocad di Gian Paolo Cattaneo, reperibili presso il forum Cad3d.it con i quali è possibile far disegnare ad autocad curve di livello a partire da un modello DTM del terreno costituito da primitive 3Dface di autocad e da questo estrarre anche sezioni con le relative finche. Direi che il programma è davvero notevole e che almeno limitatamente alla funzione che svolge non ha proprio nulla da invidiare ai programmi commerciali. www.cad3d.it/forum1/showthread.php?t=15092 (autocurve) www.cad3d.it/forum1/showthread.php?t=17601 (Autosez2)
Purtroppo (per me) il codice è scritto in lisp, roba che non mastico.
- DTM DTM - Digital Terrain Model - crea 3Dfaces in autocad da una semina di punti (x,y,Z) ( originally by Daniele Piazza, enhanced by CAD Studio - www.cadstudio.cz ) Anche questo, in linguaggio lisp, è un bel programma ed è stato spunto di parecchie discussioni nei forum dedicati alla scrittura di codice lisp relativo alla triangolarizzazione. per esempio qui www.theswamp.org/index.php?topic=9042.15
- Algoritmo di Delaunay per la triangolazione Per la costruzione del modello digitale del terreno DTM, l'algoritmo fondamentale su cui si basano i vari programmi dedicati al problema della triangolarizzazione di un dominio (quindi anche il problema della mesh di un elemento piastra o anche di un elemento 3d) è quello proposto da Delaunay. Vedere wikipedia per conoscere i fondamenti dell'algoritmo. Molte discussioni sui forum dedicati sviluppano codici finalizzati alla costruzione di un DTM. Tra questi segnalo il blog di Kean Walmsley del team Autodesk
http://through-the-interface.typepad.com/t...-using-net.html
Ecco altro codice lisp di Evgeniy ELpanov che esegue la triangolazione Delauney http://elpanov.com/index.php?id=6
Dal link che segue potete copiare il codice Lisp di Mihai Popescu he converte loriginario codice di Paul Burke scritto in Fortran77, per la triangolazione di una serie sparsa di punti mediante l'algoritmo di Delaunay http://paulbourke.net/papers/triangulate/tri.lisp
-ConRec Una pagina che riporta l'algoritmo ( di Paul Bourke) per la generazione di curve di livello da un piano quotato di tipo regolare, cioe da una griglia di punti disposti regolarmente. DA notare che è praticamente simile a quello del documento che abbiamo visto nel sito di Simonluca Santoro. http://paulbourke.net/papers/conrec/ Sempre da questa pagina è possibile scaricare i codici che traducono l'algoritmo in vari linguaggi (dal fortran77 al visual basic) In particolare, ero interessato ad un codice in VisualBasic ed ho scaricato il seguente. http://paulbourke.net/papers/conrec/conrec_vb.txt Dopo averlo studiato mi sono reso conto che con qualche modifica era utilizzabile allo scopo che mi ero proposto e cioe al disegno delle ISOBARE. Pertanto cosi come scaricato, lho preso e copincollato su un modulo del progetto VBA per le isobare.
Parecchio interessante è anche questa pagina http://paulbourke.net/geometry/.
Edited by afazio - 1/8/2012, 21:37
|
|
| .
|
-
| .
|
|
|
Volendo sfruttare il codice VB copiato dal link che ho dato ( http://paulbourke.net/papers/conrec/conrec_vb.txt ), occorre capire cosa accetta in input la funzione per poter organizzare i dati del nostro programma pronti ad essere ricevuti dalla funzione (o sub).
i dati richiesti sono:
una matrice Z(#,#) con indici zero-based, contenente le quote dei punti ed organizzata per righe e colonne. Se per esempio, nella discretizzazione del semispazio ove costruire le isobare, abbiamo stabilito una griglia composta da 25 linee orizzontali e 40 linee verticali, e se nel punto di intersezione tra la sesta riga e la ottava colonna la quota è pari a 100, l'elemento Z(5,7) conterrà proprio la quota 100
un vettore X(#) con indice inferiore pari a ilb ed indice superiore pari a iub, contenente le ascisse delle rette verticali di suddivisione della griglia
un vettore Y(#) con indice inferiore pari a jlb ed indice superiore pari a jub, contenente le ordinate delle rette orizzontale di suddivisione della griglia
un intero nc contenente il numero delle isobare da disegnare
un vettore contour(#) contenenti le quote delle curve isobare da disegnare.
Dovremo tenere presente di questa organizzazione e cercare di organizzare i nostri dati in maniera similare.
Edited by afazio - 2/8/2012, 20:24
|
|
| .
|
-
| .
|
|
|
A questo punto arrivati, iniziamo a costruirci l'interfaccia in VBA per autocad. Apriamo un nuovo disegno, accediamo all'ambiente di progettazione, inseriamo due nuovi form chiamati rispettivamente: - main dove metteremo tutti i controlli che ci necessiteranno per la gestione dei carichi, della griglia di punti e delle isobare - "InputCarichi" che ci servirà per poter inserire i dati relativi al singolo carico
Inseriamoa nche tre moduli che chiameremo rispettivamente: - "gestione" dove depositeremo il codice che ci permette di gestire i form - "interpolazione" dove depositiamo per adesso il codice che abbiamo prelavato dal web - "sovratensione" dove depositeremo la funzione sigmaZ() che abbiamo gia scritto
Adesso apriamo il form "main" ed inseriamo un controllo "Pagine". Click sulla prima pagina e diamo come caption della pagina "dati", click sulla seconda linguetta e diamo come caption "Punti" Questa seconda pagina ci servirà in fase di sviluppo del codice a depositarvi i dati elaborati per controllo di correttezza.
Nella pagina "dati" inseriamo tre "cornici" dedicate rispettivamente a: - cornice "Discretizzazione sottosuolo" per la gestione della griglia di calcolo - cornice "carichi" per la gestione dei carichi - cornice "Isobare" per la gesrtione delle isobare.
Inseriamo fin da adesso il pulsante di uscita "esci" alla pressione del quale legare il codice:
CODICE Private Sub Btn_Esci_Click() Me.Hide End Sub Questo ci consente di poter uscire dalla finestra senza danni. Inoltre, nel modulo "gestione" inseriamo il codice di ingresso alla finestra:
CODICE Sub avvia() Main.Show End Sub
Iniziamo a prender di mira la gestione dei carichi.
|
|
| .
|
-
| .
|
|
|
Nella gestione dei carichi vogliamo poter fare: - inserire un nuovo carico - editare un carico gia inserito - eliminare un carico inserito Inoltre vogliamo poter vedere la lista dei carichi via via inseriti
Utilizziamo pertanto i tre bottoni "Aggiungi Carico", "Edita", "Elimina" ed una casella di riepilogo che chiamamo "BoxCarichi"
Per poter editare o cancellare un carico della lista occorre che ogni elemento della stessa sia selezionabile (solo uno per volta). Inoltre la lista dovra contenere per ciascun carico immesso le seguenti informazioni:
xi, ascissa inizio carico qi, intensità di inizio carico xf, ascissa fine carico qf, intensità di fine carico zo, profondità di applicazione del carico.
Pertanto il "boxCarichi" dovrà cpossedere 5 colonne, la proprietà listStyle impostata a "fmListStyleoption" e la proprietà multiselect a "fmMultiselctSingle". Inoltre impostiamo, anche in funzione della larghezza del controllo, la larghezza di tutte le colonne a 60 punti. Il tutto è illustrato nella immagine precedente
|
|
| .
|
-
| .
|
|
|
Alla pressione del tasto "Aggiungi carico" dovrà apparire il dialogo dedicato all'input dei dati del carico:
Ovviamente il dialogo "InputCarichi" lo avremo gia predisposto. La sua compilazione è abbastanza semplice e contiene oltre alle etichette, i campi editabili e due bottoni "Annulla" e "Conferma" con ovvio significato e con ovvia diversa funzione.
Per richiamare il dialogo di input dei carichi leghiamo all'evento On_clik del pulsante "aggiungi carico" del dialogo principale il seguente codice:
CODICE Private Sub CArichi_New_Click()
If Num_tot_caRichi = MaxCarichi Then MsgBox (" raggiunto il numero massimo dei carichi" & "(max " & MaxCarichi & ")") else InputCarichi.Show End If
End Sub In questo codice sono: - CArichi_New il nome del pulsante "Aggiungi Carico" - MaxCarichi il numero massimo dei carichi che possiamo aggiungere - Num_tot_caRichi il numero dei carichi inseriti
Queste 'ultime due variabili devono essere pubbliche e definite nel modulo "gestione" prima della chiamata della sub "avvia". Avevo gia definito all'inizio di questo 3d la variabile MaxCarichi.
|
|
| .
|
37 replies since 30/7/2012, 22:08 4646 views
.