Newsgroup: it.comp.lang.delphi
Titolo: D2007 - Campi numerici punto=virgola

Salve a tutti.
mi sorge un problemino che non riesco a risolvere.
Sembra stupido, ma haime ci sto perdendo troppo tempo.
Dopo aver ricompilato dei sorgenti da D5  a D2007 mi sono accorto che quanto 
utilizzo i dbedit con dei campi numerici (il database č Dbase con BDE) non 
mi funziona piů il punto del tastierino numerico per gestire i decimali.
Se lo schiaccio non fa la virgola tanto per intenderci.
Con D5 avevo risolto modificando il file DBCtrls.pas cosě come esposto sotto 
e tutto filava liscio
procedure TDBEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
// Aggiunte per punto trasformato in virgola nei campi numerici
  if (key=#46)  and (FDataLink.Field is TNumericField)
  or (key=#46)  and (FDataLink.Field is TCurrencyField)
  or (key=#46)  and (FDataLink.Field is TFloatField)
  then key:=#44;
//
  if (Key in [#32..#255]) and (FDataLink.Field <> nil) and
    not FDataLink.Field.IsValidChar(Key) then
  begin
    MessageBeep(0);
    Key := #0;
  end;
  case Key of
    ^H, ^V, ^X, #32..#255:
      FDataLink.Edit;
    #27:
      begin
        FDataLink.Reset;
        SelectAll;
        Key := #0;
      end;
  end;
end;
Ora, mi son detto facciamo la stessa cosa con D2007.
Detto fatto, piů semplice di cosě.
Ma come diavolo si fa a fare in modo che D2007 ricompili il file DBCtrls.pas 
e crei il nuovo .DCU ?
Ho provato a rinominare il file DBCtrls.dcu (in tutti i punti del mio HD in 
cui l'ho trovato), ma niente di fatto.
Sembra che non gliene freghi nulla.
Ho preso il file DBCtrls.pas, l'ho salvato nella cartella in cui ci sono gli 
altri sorgenti del programma che sto ricompilando e poi con shift+F11 l'ho 
aggiunto alle altre unit, ma nulla cambia.
Nelle opzioni di compilazione del programma ho flaggato "Build with runtime 
packages" e non posso toglierlo.
Se lo faccio il programma non compila proprio piů iniziando a dare errori 
vari su librerie di terze parti che non vi elenco (per ora)
Secondo me mi sto perdendo in un bicchiere d'acqua, perň fra un poco affogo.
C'č qualche anima pia che mi lancia un salvagente ?
Grazie in anticipo
Marco C.


Nel tuo programma main, in fondo, prova con questa.....
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
initialization
  DECIMALSEPARATOR:='.';
  THOUSANDSEPARATOR:=',';
end.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Ciao
C. 


Grazie per la risposta.
La soluzione sarebbe molto valida se chi usa la procedura gradisse che i 
decimali fosseso con il punto e le migliaia con la virgola, ma non č cosě 
nel mio caso.
In piů questa soluzione mi blocca alcuni controlli all'interno della 
procedura sulle varie quadrature contabili.
Mi serve proprio che tutto funzioni con le regole italiane.
Grazie
Ciao
Marco C.

Salve a tutti .
Non sono ancora riuscito nel mio intento e quindi confido in voi.
Per ora ho risolto così, ma la soluzione oltre a non piacermi non soddisfa 
le mie esigenze.
Ho creato un nuovo package , vi ho inserito la unit riportata qui sotto, 
l'ho compilato ed installato.
Ora ho un nuovo componente che fa quello che io voglio, cioè se digito il 
punto lo sostiuisce con la virgola.
Lo potro usare solo con i campi numerici.
E' una schifezza, lo so, ma di  meglio non so fare.
Ora a me però rimane il problema che per tutta la mia procedura che devo 
convertire da D5  a D2007 , mi toccherebbe sostituire gli attuali DBEdit di 
campi numerici con i decimali con il nuovo componente che ho creato DBEditPV 
(PV sta per punto=virgola)
Io la mia buona volontà ce la ho messa, ma non è che mi aiutereste a 
risolvere il problema con qualche spiegazione un poco più articolata.
Grazie in anticipo
Marco Camozzi
unit DBEditPV;
interface
uses
  SysUtils, Classes, Controls, StdCtrls, Mask, DBCtrls, DB;
type
  TDBEditPV = class(TDBEdit)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
     procedure KeyPress(var Key: Char); override;
  published
    { Published declarations }
  end;
procedure Register;
implementation
procedure Register;
begin
  RegisterComponents('Samples', [TDBEditPV]);
end;
procedure TDBEditPV.Keypress(var Key: Char);
begin
   if (key=#46)
   then key:=#44;
   inherited;
end;
end. 

A beneficio di chi in futuro possa averne bisogno (magari sono l'unico
incropito, ma non si sa mai)
Variante per gestire solo i campi numerici
unit DBEditPV;
interface


procedure Register;
implementation


   if (key=#46)
   then begin
           if  (Field.DataType = ftCurrency)
           or (Field.DataType = ftFloat)
           or (Field.DataType = ftInteger)
           then key:=#44;
        end;
   inherited;
end;
end.