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
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
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
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.
Hai provato ad usare la funzione Format?
Format('%.12s',['Ciao']);
Stilgar
in questo modo?
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
Oddio, personalmente userei una griglia, così sarebbeto affari del componente allineare le colonne.
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.