Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: Nicola - Dicembre 30, 2014, 10:35:19 pm

Titolo: Problema su visualizzazione stringhe (Risolto)
Inserito da: Nicola - Dicembre 30, 2014, 10:35:19 pm
Avrei un problema di questo tipo: dato un file di record come visualizzarlo in maniera dinamica? cioè non sapendo a priori quante di quante righe sarà composto il file, dovrà essere possibile, visualizzare 10 o 20 o mille righe; pensavo di utilizzare il Memo, in questo modo:
questo è il record
Codice: [Seleziona]
Cespite = record
    DataFatt:string [10];
    NumFatt:string[20];
    Prot:integer;
    Fornit:string [50];
    Descrizione:string [60];
    Costo:real;
    Fondo:real;
    Residuo:real;
    CodCat: CategoriaCespite;
    PercAmm:integer;
    PercDet:integer;
    DataVend:string[10];
    ValVend:real;
    Plusv:real;   
e questo è come lo visualizzo
Codice: [Seleziona]
while not eof (Fileces) do begin
                             read (FileCes,cs);testo:='';
                             txt:=copy(cs.datafatt,1,2)+'/'+copy(cs.datafatt,3,2)+'/'+copy(cs.datafatt,5,4);
                             NormaStr(txt,12);
                             testo:=txt+'| ';
                             txt:=cs.numfatt;
                             NormaStr(txt,30);
                             testo:=testo+txt+'| ';
                             showmessage ('after '+txt+' '+inttostr(length(txt)));
                             MVista.Lines[idx]:=testo;

                             idx:=idx+1;
                             MVista.Lines[idx]:=linea;
MVista è il Memo;
i problemi sono due:
1. non credo che sia il Memo il modo migliore per visualizzare (ma non me ne vengono in mente altri);
2. ho cercato di allineare e rendere le stringhe tutte della stessa lunghezza con questa funzione
Codice: [Seleziona]
procedure NormaStr (Var ris:string; quan:integer);
 var rs,app:string;
     q,x,y,i:integer;
 begin
 rs:='';app:=ris;
 x:=quan-length(ris);i:=0;
 for i:=1 to x do rs:=rs+' ';
 y:=0;
 for i:= x+1 to quan do begin
                        y:=y+1;
                        rs:=rs+copy(app,y,1);
                        end;

  ris:=rs;
end;             
eppure il risultato non quadra, infatti il risultato è quello allegato  :(, come vedete l'ultima stringa con numero fattura alfanumerico, non si allinea.
Grazie per l'aiuto.
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: Stilgar - Dicembre 30, 2014, 10:51:35 pm
Hai provato ad usare la funzione Format?
Codice: [Seleziona]
Format('%.12s',['Ciao']);

Stilgar
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: Nicola - Dicembre 30, 2014, 11:04:26 pm
in questo modo?
Codice: [Seleziona]
read (FileCes,cs);testo:='';
                             txt:=copy(cs.datafatt,1,2)+'/'+copy(cs.datafatt,3,2)+'/'+copy(cs.datafatt,5,4);
                             Format ('%.12s',[txt]);
                             testo:=txt+'| ';
                             txt:=cs.numfatt;
                             Format ('%.30s',[txt]);
                             testo:=testo+txt+'| ';

                             MVista.Lines[idx]:=testo;
però il risultato è questo
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: Nicola - Dicembre 30, 2014, 11:05:17 pm
Mi par di capire che indipendentemente dal problema al punto 2 la soluzione Memo sia in ogni caso corretta, giusto?
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: Stilgar - Dicembre 31, 2014, 11:41:49 am
Oddio, personalmente userei una griglia, così sarebbeto affari del componente allineare le colonne.

Codice: [Seleziona]
read (FileCes,cs);
MVista.Lines.add(
Format('%.2s/%.2s/%.4s|%.12s|%30s',
[copy(cs.datafatt,1,2)
,copy(cs.datafatt,3,2),
copy(cs.datafatt,5,4),
cs.numfatt,
]));
Nel tuo caso avrei fatto in questo modo.
Ma è una questione di gusti.

Stilgar
PS:
Buon anno a tutti.
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: Nicola - Dicembre 31, 2014, 11:52:28 am
Se lo dici tu sicuramentea griglia  Sarà più comoda, il problema è che nn so quale sia  componente da utilizzarw😢
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: Legolas - Dicembre 31, 2014, 12:30:23 pm
Ad esempio, una StringGrid:

Palette "Additional"->"TStringGrid"  :)
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: El Salvador - Dicembre 31, 2014, 03:50:07 pm
Perchè non usare un TVirtualTreeview (http://wiki.lazarus.freepascal.org/VirtualTreeview), utilizzato come ListView (quindi gli elementi si trovano tutti al primo livello) a colonne (cosi l'utente può ordinare le varie voci utilizzando le colonne)?
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: Stilgar - Gennaio 01, 2015, 10:20:08 pm
EL Salvador, hai ragione, ma per "iniziare" abbiamo suggerito componente semplici e basilari ;)
L'appetito vien mangiando e a complicarsi la vita c'è sempre tempo :D

Stilgar
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: Nicola - Gennaio 01, 2015, 10:21:36 pm
Si infatti, per me è gia' l'Everest StringGrid, anche perchè non è che ci siano molte guide (o almeno non le trovo), quindi vado con prove e tentativi,  ;D
Titolo: Re:Problema su visualizzazione stringhe
Inserito da: Nicola - Gennaio 01, 2015, 11:34:19 pm
Vi ringrazio per l'aiuto, direi che il risultato è decisamente migliore sia dal punto di vista della visualizzazione, che della gestione a livello di programmazione. Vi ringrazio veramente tanto, non ci sarei mai riuscito.