Newsgroup: it.comp.lang.visual-basic
Titolo: tempi

scusate la mia ignoranza
Io ho un periodo di tempo pari a 30 minuti
ess: dalle 10,00 alle 10,30
in questo intervallo dovrei estrappolare i ninuti a caso
naturalmente senza avere dei doppioni
io ho provato con randomize,ma dopo 2 settimane
di prove ho fatto solo un buco nel'acqua .
spero nel vostro aiuto GRAZIE 1000 

 naturalmente senza avere dei doppioni
domanda cattiva:
ma tu, le risposte ai tuoi post, le leggi?
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 ha scritto nel messaggio
news:8hHmd.349076$35.15...@news4.tin.it...

Sinceramente non ho capito cos'è che ti blocca...
Per ottenere una sequenza di numeri casuali senza ripetizione devi
necessariamente gestire lo scarto dei numeri già usciti in precedenza. Per fare
ciò hai molte alternative (array, collection etc), tutte più o meno
concettualmente equivalenti: occorre "segnarsi da qualche parte" che un numero è
già uscito. Per farla difficile devi simulare un processo stocastico con memoria
(cosa che la funzione Rnd NON è... almeno in teoria), cioè in cui la probabilità
di un'uscita dipende dalle uscite precedenti (in questo caso aumenta).
Nell'esempio che segue ho usato un ListBox per raccogliere gli orari casuali.
Dim StartTime   As Date
Dim EndTime     As Date
Dim RandomTime  As Date
Dim i           As Integer
Dim Range       As Integer
Dim Delay       As Integer
    StartTime = #10:00:00 AM#
    EndTime = #10:30:00 AM#
    ' Ampiezza escursione in minuti
    Range = DateDiff("n", StartTime, EndTime)
    Randomize
    For i = 1 To 10
        ' Estraggo il "ritardo" in minuti
        ' come numero casuale compreso
        ' tra zero e l'escursione del range
        Delay = Int(Rnd * (Range + 1))
        ' L'orario casuale si ottiene sommando il ritardo
        ' all'orario di partenza
        RandomTime = DateAdd("n", Delay, StartTime)
        ' Se non è ancora uscito, lo aggiungo!
        If FindListStringExact(List1, CStr(RandomTime)) < 0 Then
            List1.AddItem CStr(RandomTime)
        End If
    Next i
Naturalmente devi definire:
Const LB_FINDSTRINGEXACT = &H1A2
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Function FindListStringExact(lst As ListBox, ByVal Item As String) As
Long
     FindListStringExact = SendMessage(lst.hWnd, LB_FINDSTRINGEXACT, -1, ByVal
Item)
End Function
HTH
Bye
Raf

Io ho fatto come mi hai detto ma nella list1 non vedo niente
e errori non me ne da dove ho sbaliato?
"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:cnfh9c$gnl$1...@alix.livenet.it...


 e errori non me ne da dove ho sbaliato?
Strano. Ti assicuro che l'ho provato e funziona. Prova a seguire passo-passo il
codice, probabilmente per qualche motivo la funzione FindListStringExact
restituisce un valore >= 0 (sarei curioso di sapere quale) anche se la listbox è
vuota, pertanto l'IF fallisce e non aggiunge nulla.
Bye
Raf


in efetti la funzione FindListStringExact
è vuota
e ovviamente ho provato anche il passo-passo
ma niente da fare
tutto vuoto
forse sbaglio a dichiarare qualcosa, o lo metto nel posto
sbaliato ? ""Const LB_FINDSTRINGEXACT = &H1A2 ""
"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:cng0t0$n57$1...@alix.livenet.it...


 sbaliato ? ""Const LB_FINDSTRINGEXACT = &H1A2 ""
Intendi che la funzione restituisce zero sempre? Strano...
Prova a memorizzare in una stringa l'orario, prima di aggiungerlo alla listbox,
ossia
Dim sTime As String
   ...
        sTime = Format(RandomTime, "hh:nn")
        ' Se non è ancora uscito, lo aggiungo!
        If FindListStringExact(List1, sTime) < 0 Then
        ...
Bye
Raf
P.S. Per favore, quota meglio il testo dei precedenti messaggi. Ossia appendi la
tua risposta sotto al testo precedente. Così nel complesso dovrebbe apparire
come una "conversazione"
Grazie!

dimmi se ho fatto tutto giusto !
Private Sub Command2_Click()
Dim StartTime   As Date
Dim sTime As String
Dim EndTime     As Date
Dim RandomTime  As Date
Dim i           As Integer
Dim Range       As Integer
Dim Delay       As Integer
    StartTime = #10:00:00 AM#
    EndTime = #10:10:00 AM# ' Ampiezza escursione in minuti
    Range = DateDiff("n", StartTime, EndTime)
    Randomize
    For i = 1 To 10
        ' Estraggo il "ritardo" in minuti come numero
        'casuale compreso tra zero e l'escursione del range
        Delay = Int(Rnd * (Range + 1))
         'L'orario casuale si ottiene sommando
         'il ritardo all'orario di partenza
        RandomTime = DateAdd("n", Delay, StartTime)
        sTime = Format(RandomTime, "hh:nn")
        ' Se non è ancora uscito, lo aggiungo!
        ''If FindListStringExact(List1, CStr(RandomTime)) < 0 Then
        If FindListStringExact(List1, sTime) < 0 Then
            List1.AddItem CStr(RandomTime)
        End If
    Next i
End Sub
Private Function FindListStringExact(lst As ListBox, ByVal Item As String) 
As Long
Const LB_FINDSTRINGEXACT = &H1A2
FindListStringExact = SendMessage(lst.hwnd, LB_FINDSTRINGEXACT, -1, ByVal 
Item)
End Function

 End Function
Hai dichiarato l'API SendMessage?
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
   (ByVal hwnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByRef lParam As Any) As Long
Il resto è tutto giusto!
Bye
Raf

"Rafunk"
quando arrivo qui  "If FindListStringExact(List1, sTime) < 0 Then"
mi fa la Function ritorna su end if
ma la list1 non si riempie
Scusa o io sono proprio imbranato, o mi manca qualcosa
qualche dll o simili
scusami se ti rompo , ma sono abastanza limitato un vb 


Vai tranquillo...
Sospetto che vi sia un runtime error non gestito, altrimenti non mi spiego come
farebbe l'if a fallire!
Sostituisci la funzione FindListStringExact con questa:
Private Function FindListStringExact(lst As ListBox, ByVal Item As String) As
Long
Const LB_FINDSTRINGEXACT = &H1A2
Dim ret As Long
    On Error GoTo Errors
    ret = SendMessage(lst.hWnd, LB_FINDSTRINGEXACT, -1, ByVal Item)
    If ret >= 0 Then
        Debug.Print "Trovato '" & Item & "' alla posizione " & ret
    End If
Quit:
    FindListStringExact = ret
    Exit Function
Errors:
    MsgBox Err.Description, vbExclamation
    Resume Quit
End Function
Cosa succede ora quando fai girare il programma?
Appaiono dei messagebox oppure delle scritte nella finestra Immediate?

Ho fatto come mi hai descritto
nessun messaggio di errore msgbox e la list1 sempre vuota
ho installato win xp  home edition + sp2
ciao 

ebug.Print "Trovato '" & Item & "' alla posizione " & ret
qui mi dice "Trovato '10.02' alla posizione 0"
mi cambia l'ora ma la posizione rimane a 0
a ri ciao

 ha scritto nel messaggio
news:PV3nd.356886$35.16...@news4.tin.it...

In pratica l'API SendMessage ritorna sempre ZERO... come se la stringa che le
passi in Item venisse sempre trovata nel listbox, come primo elemento, anche se
il listbox č vuoto.
Tutto ciň č inspiegabile...
Idee alternative:
1) Provare definendo "Const LB_FINDSTRING = &H18F" e cambiare cosě la funzione:
ret = SendMessage(lst.hWnd, LB_FINDSTRING, -1, ByVal Item)
2) Cambiare approccio nella ricerca, utilizzando un tradizionale ciclo for al
posto di SendMessage
for i=0 to list1.ListCount-1
   if list1.List(i) = Item Then
        ret = i
        Exit For
   endif
next i
Naturalmente č piů lento...
Ciao

Scusami mi sembra di essere lo sfigato del paese
Ho provato tutti e due gli esempi
UN ENORME BUCO NEL'ACQUA
non so più cosa fare
forse perchè non conosco a fondo tutte le funzioni in vb6
forse io sono troppo zuccone, fatto stà che non riesco
a concludere niente e questo mi dispiace
no so piu che pesci pigliare.
comunque ti ringrazio vivamente dei tuoi consigli
e del tempo che hai perso per darmeli
comunque se hai altre soluzioni fammele sapere, che saranno
sempre gradite
ciao
Claudio

 Claudio
Ciao
Raf