Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: luca1202 - 06 Gennaio 2010, 22:43:27

Titolo: [risolto]bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 06 Gennaio 2010, 22:43:27
1° problema: volevo sapere se è possibile fare in modo che un bottone una volta premuto resti nello stato di premuto, in poche parole se un utente in un player audio schiaccia il bottone per la modalità shuffle il disegno del bottone rimane premuto ad indicare che è stato premuto (ma va? :-D).
Ho verificato tra le proprietà del bottone ma non mi pare ci sia niente del genere.

2°problema: sono sempre nel mio progetto del player audio e ho implementato la playlist con una listview, ovviamente quando in una listview ho più file audio quando uno termina deve passare all'elemento successivo, per fare questo ho inserito nella funzione che si occupa di gestire il timer uno spezzone di codice che dice che quando Music.Pos = 0 allora significa che lui deve passare all'elemento successivo, e l'ho implementato cosi:
Codice: [Seleziona]
IF Music.Pos = 0 AND IF REPEATS = FALSE THEN
    ListView1.MoveBelow
    timMusic.Enabled = FALSE
    timMusic.Delay = 1000
    timMusic.Enabled = TRUE
    ListView1_Click
    timMusic.Start
  ENDIF

solo che quando faccio quel MoveBelow mi dice che l'elemento successivo è NULL (cosa non vera), ho provato anche con il metodo MoveNext ma il problema rimane lo stesso...
dove sbaglio?
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 06 Gennaio 2010, 23:48:04
1° problema >>non devi usare un button ma un togglebutton
2° prova con con
Codice: [Seleziona]

IF Music.Pos = 0 AND IF REPEATS = FALSE THEN
    IF ListView1.index <> ListView1.Count - 1 THEN
        ListView1.index = ListView1.index + 1
    ELSE
        ListView1.index = 0
    ENDIF
   
    timMusic.Enabled = FALSE
    timMusic.Delay = 1000
    timMusic.Enabled = TRUE
    ListView1_Click
    timMusic.Start
  ENDIF
 
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 07 Gennaio 2010, 08:30:58
1° problema -> risolto :pint:

2° problema -> ho capito come mi suggerisci di risolverlo ed è sensato solo che l'attributo index non c'è per una listview e non c'è un attributo in grado di sostituirlo... cosa ci posso mettere al posto di listview.index?
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: Ceskho - 07 Gennaio 2010, 10:22:31
Prova con

Codice: [Seleziona]
IF Music.Pos = 0 AND IF REPEATS = FALSE THEN 
    IF ListView1.item.key <> ListView1.Count - 1 THEN  
        ListView1.movenext
    ELSE
        ListView1.movefirst
    ENDIF  
     
    timMusic.Enabled = FALSE
    timMusic.Delay = 1000
    timMusic.Enabled = TRUE
    ListView1_Click
    timMusic.Start
  END IF
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 07 Gennaio 2010, 10:31:43
mi restituisce ancora NULL
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 07 Gennaio 2010, 12:52:52
potresti usare una listbox è molto più gestibile
in alternativa prova con:
Codice: [Seleziona]

 IF Music.Pos = 0 AND IF REPEATS = FALSE THEN
    IF ListView1.item.key <> ListView1.Count - 1 THEN  
        ListView1.item.MoveAfter
    ELSE
        ListView1.Item.MoveFirst
    ENDIF  
     
    timMusic.Enabled = FALSE
    timMusic.Delay = 1000
    timMusic.Enabled = TRUE
    ListView1_Click
    timMusic.Start
  END IF
 
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 07 Gennaio 2010, 13:01:25
un altro bel NULL anche cosi!!

siamo sicuri non ci sia un modo?? una listbox è molto molto diversa? se no mi tocca riscrivere mezzo programma :cry:
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: Ceskho - 07 Gennaio 2010, 13:02:39
Puoi allegare i sorgenti che ci diamo un'occhiata per favore?

Così sennò aiutarti ora è difficile..
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 07 Gennaio 2010, 13:03:17
se devi visualizzare solo un testo è identica

ti spiace postare il programma risolvere i problemi con tuitto applicativo funzionante è molto + semplice
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 07 Gennaio 2010, 13:22:17
un attimo, sto provando a sostituire con una listbox... se ho problemi ve lo posto!! grazie comunque!!
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 07 Gennaio 2010, 13:28:56
ricordati il comodo pulsante dell' ide cerca e sostituisci per sostituire la una parola con un altra all' interno di una sub o di un file o dell' intero progetto
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 07 Gennaio 2010, 13:48:20
un errore di questo tipo a cosa è dovuto?
(http://img689.imageshack.us/img689/1968/errorem.png)

per da quello che mi pare di aver capito in rete si tratta di un bug di Gambas... oppure dipende dal mio codice? perchè mi compare a caso, cioè non sempre quando faccio la stessa cosa e non mi segnala un punto preciso del programma in cui c'è un errore...
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 07 Gennaio 2010, 15:50:46
se usi gnome presente in ubuntu 9.10 con gambas >= 2.16 è un bug di gambas , prova ad usare una versione più vecchia di gambas (tipo la 2.13) e prova a vedere se succede ancora
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 08 Gennaio 2010, 12:57:32
sembra essersi risolto, il problema era che in alcuni punti avevo scritto ListBox1.index anzichè ListBox1.Index, corretto quello ha smesso di dare problemi!!

adesso funziona solo che quando deve scorrere tutti gli elementi della playlist è lento perchè lo fa anche graficamente!!
faccio fatica a spiegarvelo, vi allego i sorgenti e provate ad importare una cartella e poi cliccare sulla checkbox e guardate cosa succede!!
c'è modo di evitare questo?
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 08 Gennaio 2010, 13:09:02
posso dire solo una cosa : ti complichi troppo la vita , gambas è molto + semplice!!

ad esempio per salvare la play list puoi fare anche :


stringa=""

for each listbox1.list

 stringa=stringa & listbox1.list
 inc i
next

file.save(percorso e nome file , stringa)

inoltre all' avvio  il programma genera alcuni errori ( se non è ancora presente alcun file di configurazione) che puoi risolvere
modificando le righe:
CheckBox1.Value = setting["checkbox"]
playlist_open_dir = Settings["checkbox/playlist"]

con

    CheckBox1.Value = setting["checkbox",0]
    playlist_open_dir = Settings["checkbox/playlist", 0]

il ",0" serve per dare un valore di default all' impostazione nel caso caricando il prog non ci sia ancora un file di settings
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 08 Gennaio 2010, 13:10:59
per caricare la playlist invece:

stringa=file.load(percorso e nome file)

listbox1.list=split(stringa,"\n")

semplice no?
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 08 Gennaio 2010, 13:23:00
in effetti si...

sono abbastanza inesperto con gambas (nel caso non si fosse capito :oops:)

ti ringrazio per i suggerimenti!! provo con le tue modifiche e poi ti faccio sapere!
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 08 Gennaio 2010, 13:36:50
quando carica la playlist salvata però mi mette tutto su una riga sola!!
non è che quando eseguo questa istruzione
Codice: [Seleziona]
ListBox1.List = Split(imported, "\n")

devo fare un ciclo?
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 08 Gennaio 2010, 13:40:30
ListBox1.List = Split(imported, "\n")

attenzione è \n non n
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 08 Gennaio 2010, 13:42:04
poi questo codice suppone che la play list siastat salvata con un carattere \n a fine di ogni riga, quindi se carichi una playlist che non ha tale carattere non potrà funzionare correttamente
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: luca1202 - 08 Gennaio 2010, 14:05:49
si scusa ho sbagliato a copiarlo ma in realtà nel programma ho scritto bene!!
Codice: [Seleziona]
FOR EACH ListBox1.List 
        name = name & ListBox1.List[i]
        INC i
      NEXT

non è che magari dopo l'istruzione name=....
devo aggiungerne un'altra tipo name=name & "\n"

EDIT: ho provato a fare la modifica ed effettivamente adesso funziona correttamente!!
grazie per la dritta!!

ok ho risolto anche questo problema, metto [risolto] e vi ringrazio tutti ancora per la pazienza e il tempo che mi avete dedicato :2birre:
Titolo: Re: bottone in stato di premuto e passare da un elemento all'altro in una listview
Inserito da: fsurfing - 08 Gennaio 2010, 14:49:22
si hai ragione nella costruzione della playlist bisogna aggiungere il carattere \n