Newsgroup: it.comp.lang.delphi
Titolo: ini e altre problematiche - RAVE

Il problema che sono veramente newbie
In pratica in un file ini registro quanto segue:
[Etichetta1]
Labelleft=16
Labeltop=80
I valori (16 e 80 di left e top) sono quelli di una label situata sul form 
(simulo a video un'etichetta)
Quando poi...mando i parametri a Rave, devo dividerli per 50 per ottenere la 
proporzione sull'etichetta da stampare....
Per farlo, vi chiedevo in un mess precedente...come salvare e leggere da ini 
dei valori in 3 decimali...purtroppo ora sono incastrato nella dichiarazione 
della variabile, per essere float la devo dichiarare come double ?
Ho provato i vostri suggerimenti ma mi st� incartando alla grande...
Il risultato finale dev'essere scrivere e leggere riportando a rave:
[Etichetta1]
Labelleft=0.320
Labeltop=1.6
Ma non ci riesco.

 della variabile, per essere float la devo dichiarare come double ?
Si e no. Puoi definire variabili float come "single" o come
"double" (piu' altri
formati di uso piu' raro) .
Se cerchi nell'help troverai una pagina dove vengono spiegati
i tipi di dati disponibili in delphi: interi, reali, stringhe
eccetera.
Nell'help di delphi 2006 devi cercare "simple types", nelle altre
versioni
non so dirti.
ciao
Giacomo

 Labeltop=1.6
Se nei regional settings e' scritto che il separatore per i decimali
e' la virgola, il tentativo di convertire tramite sstrtofloat la
stringa "0.320" genererebbe una eccezione..
Un trucco potrebbe essere salvare i valori come integer
moltiplicandoli per 10^n dove n e' il numero di decimali che ti
serve. ..Nel tuo caso per 3 cifre decimali userai 1000 (10 alla terza)
Quindi, scriverai con WriteInteger la trunc di (TuoValore*1000): 320.
Poi quando leggi scriverai:
intValue := ReadInteger(bablabla..) ... = 320
TuoValore := IntValue/1000 ... = 0.320
ovviamente TuoValore sara un float di qualche tipo.
A.

 ha scritto nel messaggio 
news:f8663f45-767f-41eb...@a31g2000yqn.googlegroups.com...


 stringa "0.320" genererebbe una eccezione..
A meno che non si imposti un DecimalSeparator fisso durante le
trasformazioni:
var
  OldDecimalSeparator: Char;
...
  OldDecimalSeparator := DecimalSeparator;
  try
    DecimalSeparator := '.';
    ...
    ... // operazioni di trasformazione
    ...
  finally
    DecimalSeparator := OldDecimalSeparator;
  end;
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Esiste qualche connettore per assorbire i vostri dati mentali ? :P
Sei sicuro di volerlo usare?


 trasformazioni:
Ovvio ma preferisco applicare il kiss..
A.

 Ovvio ma preferisco applicare il kiss..
Il "kiss", in questo caso, significherebbe salvare il valore cos� com'�.
Il problema dell'adottare convenzioni come quella che suggerisci � che
l'unit� di misura � sconosciuta all'umano che si trovi a leggere quel
file. Si rischia quindi di far interpretare 320 esattamente per 320 e non
0.32 o 3.2 o altro.


Che Laforgia sia con te
Sono pronto per il connettore mentale...cavetteria platino per fa scorrere i
bit alla grande... :P
In ordine di grandezza voglio (e qui creo simpatie e non) hihihihi:
Laforgia
Salvati
Desgli Esposti
Comunque, che ci crediate o no..ho usato entrambi i metodi per scrivere
decimali su ini..ma non c'� stato verso di ottenerli. :(
Prendo il valore campo.left, lo devo dividere per 50 e scrivere il risultato
su un'ini...
Laforgia...aiutami....
"Andrea Laforgia" <x...@xx.xx> ha scritto nel messaggio 
news:he94sk$qg4$1...@news.newsland.it...


Facci vedere il tuo codice.


Eccolo:
Ho provato a dichiarare in double e a fare writefloat e read float...ma 
ahime...con scarsi risultati:
-------------------------------------------------------------------------------
Dalla Unit3 scrivo le coordinate dei campi (top e left) su INI file tramitte 
un TButton:
------------------------------------------------------------------------------- 
UNIT3
  private
    { Private declarations }
  public
  FileIni : TmemInifile;
  itleft, ittop: Double;
  end;
procedure TForm3.Button2Click(Sender: TObject);
begin
   FileIni := TmemInifile.Create('data.ini');
  try
    begin
        //Scrivi
        itleft:=it.left div 50;
        ittop :=it.top div 50;
        FileIni.WriteFloat('Eti1','itleft',itleft);
        FileIni.WriteFloat('Eti1','ittop',ittop);
        FileIni.UpdateFile;
     end;
   finally
   FileIni.Free;
  end;
end;
-------------------------------------------------------------------------------
Dalla Unit1 invece, leggo i dati per mandarli come parameters alla stampa 
Rave (vers.5 - old):
------------------------------------------------------------------------------- 
UNIT1
procedure TForm1.BitBtn2Click(Sender: TObject);
 var
  test:boolean;
  FileInix : TmemInifile;
  itleftx, ittopx: String;
begin
   FileInix := TmemInifile.Create('data.ini');
        Rvproject1.ClearParams;
        Rvproject1.open;
        Rvproject1.close;
   try
        FileInix.ReadString('Eti1','itleft',itleftx);
        FileInix.ReadString('Eti1','ittop',ittopx) ;
        RvProject1.SetParam('itleft',itleftx);
        RvProject1.SetParam('ittop',ittopx);
   finally
   FileInix.Free;
   RvProject1.Execute;
 end;
-------------------------------------------------------------------------------
"Andrea Laforgia" <x...@xx.xx> ha scritto nel messaggio 
news:he9q7c$cf$1...@news.newsland.it...


 
Qui devi utilizzare *ReadFloat* controparte di WriteFloat.
Ciao.

 Perch� lo vuoi salvare come un Double?


 Se provo ad aggiustare come hai riportato te sotto, ottengo errore.
Puoi dirci quale errore? Puoi postare il codice modificato?
Ciao.

> riportato � frutto di frustrazione,


 
Io, in versione *Integer* non lo trovo, puoi ri-postarlo?
Ciao.

> il codice � 3 o 4 messaggi sopra in versione (integer)


 
Questo ï¿œ lo stesso codice per cui ti ho giï¿œ dato i suggerimenti.
Mi spiace, non riesco ad aiutarti di piï¿œ.
Ciao.

         FileInix.ReadString('Eti1','ittop',ittopx) ;
Il secondo problema e' qui: oltre al fatto di usare string al
posto di variabili reali, non stai usando correttamente la
funzione ReadString (o ReadFloat, non cambia).
Leggi attentamente l'help di delphi relativo a quelle funzioni, il
terzo parametro *non* e' la variabile in cui ti mette il
risultato...
ciao
Giacomo