PDA

Visualizza versione completa : [VB6] Tre Domande in Una


Jamester
04-07-2009, 12.26.50
Risalve :) quest'oggi ho 3 domande da porvi.

1) C'e' un modo per mettere a disposizione un blocco di condizioni che vengano verificate sia se premo un pulsante sia se premo un altro o che si attivi qualunque cosa io faccio senza doverle riscrivere per ogni pulsante?

2) Ci sarebbe un sistema che controlla su tipo 10 form diverse se ci sono delle label con una colorazione impostata da me e che in caso affermativo le salvi in un file di testo una sotto l'altra?

3) Tenendo conto del codice seguente:


If Command2.Caption = 169 Then Command2.BackColor = &H80FFFF
If Command3.Caption = 169 Then Command3.BackColor = &H80FFFF
If Command4.Caption = 169 Then Command4.BackColor = &H80FFFF
If Command5.Caption = 169 Then Command5.BackColor = &H80FFFF
If Command6.Caption = 169 Then Command6.BackColor = &H80FFFF
If Command7.Caption = 169 Then Command7.BackColor = &H80FFFF
If Command8.Caption = 169 Then Command8.BackColor = &H80FFFF
If Command9.Caption = 169 Then Command9.BackColor = &H80FFFF
If Command10.Caption = 169 Then Command10.BackColor = &H80FFFF
If Command11.Caption = 169 Then Command11.BackColor = &H80FFFF
If Command12.Caption = 169 Then Command12.BackColor = &H80FFFF
If Command2.Caption = 169 Or Command3.Caption = 169 Or Command4.Caption = 169 Or Command5.Caption = 169 Or Command6.Caption = 169 Or Command7.Caption = 169 Or Command8.Caption = 169 Or Command9.Caption = 169 Or Command10.Caption = 169 Or Command11.Caption = 169 Or Command12.Caption = 169 Then
Call MsgBox("Puoi rollare le seguenti nano:" & vbCrLf & "" & vbCrLf & "169 - FIXER" & vbCrLf & "Root reducer (self)" & vbCrLf & "Master Escapologist" & vbCrLf & "------------------------------------------------------------" & vbCrLf & "169 - FIXER" & vbCrLf & "Fixer smg and burst buffs" & vbCrLf & "Frenzy of Shells" & vbCrLf & "------------------------------------------------------------" & vbCrLf & "169 - FIXER" & vbCrLf & "Gridding" & vbCrLf & "Re-Matrix Grid Vector" & vbCrLf & "------------------------------------------------------------" & vbCrLf & "169 - FIXER" & vbCrLf & "Damages Boost" & vbCrLf & "Semi-Sentient Augmentation Cloud ", vbOKOnly + vbInformation + vbApplicationModal + vbDefaultButton1, "FIXER - NANO ALERT")
Command2.BackColor = &HFFFF80
Command3.BackColor = &HFFFFC0
Command4.BackColor = &HFFFF80
Command5.BackColor = &HFFFFC0
Command6.BackColor = &HFFFF80
Command7.BackColor = &HFFFFC0
Command8.BackColor = &HFFFF80
Command9.BackColor = &HFFFFC0
Command10.BackColor = &HFFFF80
Command11.BackColor = &HFFFFC0
Command12.BackColor = &HFFFF80
End If


C'e' un modo per evitare che il messagebox riporti tutti i risultati? nel senso vorrei fare un opzione che escluda alcuni tipi di risultati in modo tale che non vengano sempre segnalati dei risultati che l'utente non vuole.

LoryOne
04-07-2009, 15.10.47
Si è possibile, ma devi utilizzare gli array (o insiemi) di controlli.
Posiziona il primo command button su un form, poi fai copia ed incolla.
VB ti chiederà se creare un doppione dell'oggetto da incollare ogni volta che riproporrai l'operazione incolla: Ogni doppione sarà identificato da un indice numerico (index) es: command(index) ed ogni evento ad esso associato avrà lo stesso identificatore, in modo che tu possa agire su uno specifico elemento dell'array, o su utti gli elementi di cui esso si compone, attravervo istruzioni di iterazione del tipo for [each] ... to ... next, do ... loop, while ... wend.

La creazione di array di oggetti può essere eseguita anche in runtime ... :)
A dire il vero, potresti evitare di utilizzare gli array, ma questo è il metodo più semplice e veloce da eseguire.
Agendo senza array, dovresti intendere (come in realtà è) una form come un contenitore di oggetti di tipologia differente.
es:

dim obj as object

for each obj in form
select case typeof(obj)
case ...
....
case else
....
end select
next

Jamester
04-07-2009, 15.14.32
Si è possibile, ma devi utilizzare gli array (o insiemi) di controlli.
Posiziona il primo command button su un form, poi fai copia ed incolla.
VB ti chiederà se creare un doppione dell'oggetto da incollare ogni volta che riproporrai l'operazione incolla: Ogni doppione sarà identificato da un indice numerico (index) es: command(index) ed ogni evento ad esso associato avrà lo stesso identificatore, in modo che tu possa agire su uno specifico elemento dell'array, o su utti gli elementi di cui esso si compone, attravervo istruzioni di iterazione del tipo for [each] ... to ... next, do ... loop, while ... wend.

La creazione di array di oggetti può essere eseguita anhe in runtime ... :)

:wall: ovviamente e' troppo pretendere un listato cn la spiegazione di dove metterlo...

Io sono del parere che queste cose vadano spiegate con esempi pratici. Se mi devi rispondere cosi come hai risposto nell'altro post, evita per piacere perchè nn so tu cn che spirito lo fai ma io mi arrabbio molto cosi :anger: se poi è questo che vuoi ottenere beh...

LoryOne
04-07-2009, 15.21.41
Non t' inc@zz@re Jamester, io non ho intenzione di fartelo apposta.
Internet è pieno di esempi pratici.
Io ti fornisco indicazioni utili che tu puoi recepire, oppure buttare nel cesso. :)

Jamester
04-07-2009, 17.50.00
Se sono venuto qui è xche e' un forum dedicato a questo. Se io ti ripeto che per me quello che dici è arabo, perchè dunque continui con questa linea? nn capisco ma non ti è + semplice scriverlo sto benedetto codice? Se capissi cosa cercare e cosa chiedere ti pare che starei qui a farlo?

LoryOne
04-07-2009, 18.49.47
Come pensi che io possa sostituirmi al manuale di VB6 ?
Tu cerca gli argomenti proposti, poi fai un copia-incolla nel tuo listato degli esempi pratici riportati ed ottieni quello che tu vorresti da me.
Semplice no ?
Io ti ho dato l'aiuto che ti serve per cercare gli argomenti sul manuale utente.
E' chiaro che se uno non sa cosa cercare no sa neanche come copiare l'esempio, qui ti do ragione.
Io non ho il manuale sotto mano, ne VB6 installato, ma tu si.

Jamester
04-07-2009, 19.31.32
Sarò cieco ma sl manuale di FRANCESCO BALENA della MONDADORI DI 1104 pagine non c'e' ombra di qualcosa chiamato array. Su internet viene usato un array quandi si parla tipo di insieme di dati tipo i giorni della settimana. La cosa non risolve il mio problema di usare un codice e di non ripeterlo in ogni pulsate. Quindi non vedo altra via che riscrivere lo stesso codice altre 2 volte in totale 3 dato che ...stranamente nessuno sa risolvere il problema con uno stramaledetto listato :inkaz:

LoryOne
05-07-2009, 15.10.49
Dubito che Francesco Balena non abbia trattato l'argomento array, anche perchè è basilare qualunque linguaggio tu utilizzi.
E' probabile che lo abbia fatto sotto altra nomenclatura e si sia adoperato a carcar di far intendere i giorni di una settimana come elementi singoli di un array di 7 elementi identici per natura: Il concetto è questo.
Poichè ti ho scritto che una form è un contenitore di oggetti, intendere ogni oggetto come elemento singolo di un array, non si discosta molto dall'intendere una settimana come insieme di 7 giorni.
Per quanto attiene l'esempio che cerchi per assolvere al compito che ti sei posto, ragionando a modo tuo son certo che non riuscirai mai a trovarne uno per ogni occasione, poichè un esempio è sempre fine a se stesso. E' il concetto che sta alla base che devi capire e farne il corretto uso ogni volta che tale concetto trova applicazione nell'attività che devi svolgere.
La programmazione è solo in minima parte meccanica; la cosa potrà anche sembrarti strana, ma è così.

Jamester
06-07-2009, 15.23.20
Non c'e' nessuno che mi sappia risolvere il mio primo quesito?

Lo riscrivo un po' diversamente:

C'e' un modo per mettere a disposizione un blocco di condizioni che vengano verificate sia se premo un pulsante sia se premo un altro o che si attivi qualunque cosa io faccio senza doverle riscrivere per ogni pulsante?

Esempio:


If Command12.Caption = 126 Then
Command12.BackColor = &H80FFFF
End If

If Command2.Caption = 126 Or Command3.Caption = 126 Or Command4.Caption = 126 Or Command5.Caption = 126 Or Command6.Caption = 126 Or Command7.Caption = 126 Or Command8.Caption = 126 Or Command9.Caption = 126 Or Command10.Caption = 126 Or Command11.Caption = 126 Or Command12.Caption = 126 Then

' Attiva
If Clicksaver_Opzioni.Check17.Value = 0 Then
Call MsgBox("Puoi rollare le seguenti nano:" & vbCrLf & "" & vbCrLf & "126 - FIXER" & vbCrLf & "Single Snare" & vbCrLf & "Gravity Bindings", vbOKOnly + vbInformation + vbApplicationModal + vbDefaultButton1, "FIXER - NANO ALERT")
GoTo Tornanormale
End If

' Disattiva
If Clicksaver_Opzioni.Check17.Value = 1 Then
GoTo Alert
GoTo Tornanormale
End If


L'ho accorciato perchè sarebbe molto più lungo. Il goto alert e tornanormale sono 2 funzioni che si trovano all'interno dello stesso codice del pulsante con questa sintassi:


Tornanormale:
Command2.BackColor = &HFFFF80
Command3.BackColor = &HFFFFC0
Command4.BackColor = &HFFFF80
Command5.BackColor = &HFFFFC0
Command6.BackColor = &HFFFF80
Command7.BackColor = &HFFFFC0
Command8.BackColor = &HFFFF80
Command9.BackColor = &HFFFFC0
Command10.BackColor = &HFFFF80
Command11.BackColor = &HFFFFC0
Command12.BackColor = &HFFFF80
Exit Sub


Quindi vorrei che sia il primo listato sia il secondo fossero a disposizione non di un solo pulsante ma di tutta la form cosi qualunque pulsante premo, si va a richiamare sta chilometrica funzione senza doverla riscrivere. Pregherei gentilmente di scrivermi il codice in modo tale che io debba solo copiarlo e incollarlo o che sia quantomeno capibile da chi non e' un esperto. Grazie.

zemas
06-07-2009, 16.13.41
Ciao Jamester,
non so' se hai risolto l'enigma cmq ti do' una dritta semplice,
puoi assegnare al tuo "Command12" un valore "index" e creare a sua volta
x "Command12(i)".

In questo modo puoi scrivere una sola volta le condizioni in comune.


Non so se sono stato chiaro, ma prova e vedrai che è una cosa molto semplice.

Jamester
06-07-2009, 17.06.25
Hmm non credo...Cmq e' molto + complicato di quanto sembri. Le caption degli 11 pulsanti cambiano in funzione di un numero presente in una textbox. Il codice che ho postato è un esempio preso dal command12 ma sono presenti anche tutti gli altri command dal command2 al command 12. Ora tutta questa sfilza interminabile di codice c'e' solo su un pulsante. Ma io vorrei far si che questo codice funzionasse anche se premo un pulsante + e uno - che servono a cambiare il text1 rispettavamente di +1 e -1 senza doverlo riscrivere. Il codice postato (il primo blocco) è presente in un commandbutton chiamato Calcolo_Istantaneo. Quindi potrei tipo racchiudere tutto sto casino in una funzione disponibile per tt la forma che venga richiamata cosi come ho mostrato nel secondo blocco di codice sl che in questo caso queste 2 piccole sottofunzioni sono all'interno del pulsante stesso e io vorrei qualcosa che me lo rendesse per tt la form come accade tipo Alert: etc etc ma nn so come

LoryOne
07-07-2009, 17.35.00
Non è che tu sia stato molto chiaro, ma penso di avere capito che aldilà degli array a te manchi proprio la concezione di sub procedure. Una sub procedure è un sottoprogramma, ossia un raggruppamento di istruzioni richiamabili allo stesso modo con cui tu fai saltare il tuo programma con l'istruzione Goto Label (o etichetta).
GoTo è l'istruzione di salto, l'etichetta è il nome della subprocedure.
L'esecuzione del programma procede dalla prima istruzione che si trova sotto la label, fino al raggiungimento di un nuovo salto o al termine della sequenza.
Questo è il concetto esposto in maniera semplicistica, anche perchè in maniera un po meno semplicistica, quando ci si trova in presenza di una chiamata ad una subprocedure, il processore termina di eseguire il programma principale, memorizza dove si trova all'interno del programma, esegue la subprocedure per poi riprendere nuovamente il programma principale dal punto di memorizzazione non appena raggiunge la fine del sottoprogramma.
La subprocedure può trovarsi ovunque nel programma e questo implica che la sua chiamata debba essere riconoscibile, ma esistono dei limiti: La subprocedure può essere Public, Private o Friend.
Un programma (o progetto in VB) può essere composto da form, moduli, classi, librerie e la dichiarazione della subprocedure varia in base alla tipologia degli elementi di cui si compone il progetto...

miciomao
07-07-2009, 17.52.43
Creati una funzione pubblica con il codice che hai già scritto e richiamala da ogni tasto con Call NomeTuaFunzionePubblica

Jamester
07-07-2009, 22.42.51
Ho risolto in effetti provando a fare private sub xxxxxx e richiamandola semplicemente scrivendo il nome della procedura. cn il sistema usato da me qualcosa nn andava in quanto pareva che la procedura arrestasse completamente le altre condizioni. Cosi facendo invece pare andare tutto bene. Pero' si poteva dirlo subito. Ci sono arrivato cercando su internet e per caso mi si e' accesa la lampadina. Cmq grazie per il tempo che mi avete dedicato questo non lo posso non ammettere :)