Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Narciso - Gennaio 06, 2017, 08:54:38 am

Titolo: Ancora problemi con Tlist e puntatori
Inserito da: Narciso - Gennaio 06, 2017, 08:54:38 am
Ho iniziato male usando le tlist che mi sembravano pių comode, ma non riesco a gestirle..
Spiego qual č il problema:

ho una tlist che contiene dei puntatori ad un record chiamato tlezione

 Listalezioni: Tlist;   
type
   ptlezione=^tlezione;
   tlezione=record
      compresenza:boolean;
      nomecompresenza:string[255];
      num:integer;
      materia:tmateria;
      classe:tclasse;
      durata:integer;
      docente:tdocente;
      peso:integer;
      quadrovincoli:tquadro;
      attiva:boolean;
      end;

sto cercando di duplicare gli elementi della tlist che visualizzo in una listview (allegato 1)
(chissā come mai non riesco ad inserire immagini nel messaggio...MHA)
attivo la procedura da un popupmenu (allegato 2)
la procedura č questa:
#
procedure TFormdatilezione.MenuItem2Click(Sender: TObject);
var tot,max,x:integer;
    newl:ptlezione;
begin
 new(newl);
for x:= 0 to listview1.Items.Count-1 do begin
 if listview1.items
 newl:=listalezioni.items
 newl^.num:=listalezioni.count;
 listalezioni.Add(newl);
 end;

end;
mostralista;
tot:=contaorelezionitotali;
max:=(listaclassi.Count)*o.giorniasettimana*o.maxorealgiorno;
if tot>max then showmessage('Hai inserito troppe ore di lezione');
end;

Il problema č che modifico anche gli item che ho preso da copiare e non solo i nuovi. (allegato 3)
Se fate caso hanno gli stessi numeri di ordine.

Avete mica un'idea su come fare a duplicare gli item delle tlist senza modificare gli item di origine?





Titolo: Re:Ancora problemi con Tlist e puntatori
Inserito da: Narciso - Gennaio 06, 2017, 09:07:23 am
avrete capito che non sono riuscito nemmeno a postare il codice.... leggibile...
Non capisco come fate a inserire il codice... ho provato a inserire l'hasctag, ma non ha funzionato... Bho
Titolo: Re:Ancora problemi con Tlist e puntatori
Inserito da: SB - Gennaio 07, 2017, 08:26:31 am
Provo a risponderti anche se il codice č risultato poco chiaro.
Devi tenere presente che i puntatori puntano ad un'area di memoria e quando copi un puntatore semplicemente ne copi il valore (indirizzo) e non l'area di memoria puntata.
Se il puntatore si riferisce ad una struttura con membri allocati dinamicamente (stringhe, ecc) di questi copi il valore del riferimento, non l'elemento puntato.
Quindi quando vai a modificare la "copia" in realtā stai accedendo ancora all'originale.
La soluzione č fare una copia delle strutture membro a membro (o almeno di quei membri ad allocazione dinamica lasciando i rimanenti alla copia di default)

Titolo: Re:Ancora problemi con Tlist e puntatori
Inserito da: nomorelogic - Gennaio 07, 2017, 08:51:26 am
avrete capito che non sono riuscito nemmeno a postare il codice.... leggibile...
Non capisco come fate a inserire il codice... ho provato a inserire l'hasctag, ma non ha funzionato... Bho

il bottoncino con l'hashtag (o cancelletto) non fa altro che inserire all'interno del memo in cui scrivi il tuo post una coppia di tag "code" aperto/chiuso per l'inserimento del codice.

fai questa prova:

1) clicca con il mouse all'interno dell'area di scrittura
2) clicca sul bottoncino col cancelletto
3) posiziona il cursore tra la le 2 parentesi "][" che separano il tag di apertura da quello di chiusura e scrivi del codice
4) clicca su anteprima
Titolo: Re:Ancora problemi con Tlist e puntatori
Inserito da: Narciso - Gennaio 09, 2017, 11:29:28 am
Nomerologic.... io ci sto provando... ma cliccando sul pulsante con l'hashtag... non appare nulla nell'area di scrittura...
nessun simbolo .. a dir la verita', non funziona nessun pulsante...
Titolo: Re:Ancora problemi con Tlist e puntatori
Inserito da: Narciso - Gennaio 09, 2017, 11:35:42 am
Codice: [Seleziona]
 
var tot,max,x:integer;
    oldl,newl:ptlezione;
    lez1,lez2:tlezione;
    listaselezionate:tstringlist;
begin
listaselezionate:=tstringlist.Create;

for x:= 0 to listview1.Items.Count-1 do
 if listview1.items[x].Selected then  listaselezionate.Add(listview1.Items[x].Caption);


for x:=0 to listaselezionate.count-1 do begin
lezioneattiva:=strtoint(listaselezionate.strings[x]);
mostradatilezioneattiva(lezioneattiva);

bitbtn4.click;
                                       end;
listaselezionate.free;


mostralista;
end;                     

L'ho poi risolta cosi'....la procedura...
e per l'Inserimento dei tag... ho cambiato browser... edge non va.. firefox si'
Titolo: Re:Ancora problemi con Tlist e puntatori
Inserito da: Stilgar - Gennaio 09, 2017, 03:11:28 pm
Citazione
L'ho poi risolta cosi'....la procedura...
e per l'Inserimento dei tag... ho cambiato browser... edge non va.. firefox si'
Codice: [Seleziona]
[ code ]
Il tuo codice
[/code ]
Titolo: Re:Ancora problemi con Tlist e puntatori
Inserito da: nomorelogic - Gennaio 09, 2017, 06:52:20 pm
e per l'Inserimento dei tag... ho cambiato browser... edge non va.. firefox si'

edge non va?
non me lo sarei mai aspettato... come godo  :D :D :D