Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [DELPHI] mescolare elementi in listbox

    ciao ragazzi
    ho una listbox con dentro degli elementi come posso farli mescolare?
    con random?

  2. #2
    ti dico a memoria. Dovrebbe esserci una proprietà di TListBox che si chiama Items che è un TStrings.
    Ti crei a run time una TStringList, derivata da TStrings ma di più semplice da tilizzare e la popoli con gli elementi di Items posizionati in maniera random (logicamente devi tenere conto delle celle che occupi).
    Infini sovrascrivvi la proprietà Items con i nuovi elementi.
    ciao
    sergio

  3. #3
    il problema sta nel non ripetere gli items con il random

  4. #4
    la funzione random ti dovrà ritornare l'indice dove scrivere la stringa.
    La via più veloce come programmazione ma non come prestazione è quella di verificare se in corrispondenza di questo indice sulla lista di appoggio esiste già una stringa, se questo fosse ripetere fino a che non si trova una posizione vuota.
    Altrimenti puoi utilizzare una array di interi dove memorizzi gli indici già occupati.
    ciao
    sergio

  5. #5
    Penso che una soluzione migliore, ma altrettanto semplice da realizzare sia la seguente:

    Prima di tutto, come già si diceva, vanno copiati gli elementi dalla TListBox (L) in una TStringList (S).

    A questo punto si esegue un ciclo I da 0 a (L.Count - 1) all'interno del quale verrà fatto:

    - generazione numero casuale (X) compreso tra 0 e (S.Count - 1);
    - copia dell'elemento X della TStringList all'elemento I della TListBox;
    - rimozione (delete) dell'elemento X dalla TStringList.

    Spero di non essermi scordato nulla.

  6. #6

    Ciao

    Ciao io farei così:

    come è stato precedentemente suggerito conviene lavorare su una TStringList già piena di elementi.

    Poi si crea una procedura di mescolamento in cui all'interno di un ciclo si prendono due numeri a Random indicanti le rispettive posizioni e poi si effettua uno Swap (scambio) tra le due posizioni. Lo swap conviene essere una procedura esterna.

    Questo procedimento effettua un certo numero (dipende dal numero di iterazioni) di mescolamenti nella lista. Più iterazioni si faranno e + mischiata sarà la lista.

    Spero di averti aiutato


  7. #7
    ciao ragazzi grazie per le soluzioni
    girando avevo trovato questa bella procedura che va bene per la listbox
    Codice PHP:
    procedure ShuffleStringssl TStringsnIntensity integer );
    var
      
    n1n2n3 integer;
      
    s1         string;
    begin
      
    if(nIntensity)then
      begin
        nIntensity 
    := sl.Count;
      
    end else
      if(
    nIntensity sl.Count)then
      begin
        nIntensity 
    := sl.Count;
      
    end;

      
    Randomize;

      for 
    n1 := 1 to nIntensity do
      
    begin
        n2 
    := RandomnIntensity );
        
    n3 := RandomnIntensity );

        
    s1             := sl.Strings[n3];
        
    sl.Strings[n3] := sl.Strings[n2];
        
    sl.Strings[n2] := s1;
      
    end;
    end
    non mi uccidete adesso ... praticamente ho dovuto lasciare la listbox per una listview quindi dovrei mescolare quest'ultima.. secondo voi adattando questa procedura si può fare?

  8. #8
    girando avevo trovato questa bella procedura che va bene per la listbox
    Non mi sembra però che questa procedura faccia tutto quello che chiedevi, in particolare "non ripetere gli items con il random".

    non mi uccidete adesso ... praticamente ho dovuto lasciare la listbox per una listview quindi dovrei mescolare quest'ultima.. secondo voi adattando questa procedura si può fare?
    Certo, basta che in quel caso tieni conto anche dei subitems di ciascun item.

  9. #9
    lo sto trovando difficoltoso modificarlo

    il tipo che riceve non dev'essere più TStrings?

  10. #10
    il tipo che riceve non dev'essere più TStrings?
    Non direi. Gli items in una TListView sono memorizzati come TListItems, non come TStrings.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.