1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| procedure TListeVals.AffValsSelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
{ AffValsSelectCell est appelée en premier à l'entrée d'une cellule. Si on
vient d'une autre cellule et qu'elle était en cours de saisie, on enregistre
cette valeur dans la cellule précédente et on initialise ColE et RowE aux
valeurs de la nouvelle cellule}
var
Rect: TRect;
begin
if MajMan.Down and ((Acol <> ColE) or (ARow <> RowE)) then
begin
if EditC then {Prise en compte de la cote}
begin
ValPFs[RowE-1].Val.CoteF:= StrToFloat(TxtCote);
EditC:= False;
ColE:= ACol;
RowE:= Arow;
end;
if EditD then {Prise en compte de la date}
begin
ValPFs[RowE-1].Val.Date:= StringToDate(TxtDate, 'DD/MM/YYYY');
EditC:= False;
ColE:= ACol;
RowE:= Arow;
end;
end;
if not MajMan.Down or (ARow > 0) and ((ACol = 3) or (Acol = 4)) then
CanSelect:= True
else
begin
CanSelect:= False;
AffVals.Options:= AffVals.Options-[goEditing];
end;
end;
procedure TListeVals.AffValsGetEditMask(Sender: TObject; ACol,
ARow: Integer; var Value: String);
{Initialisation à l'entrée d'un cellule en mode d'édition}
begin
ColE:= ACol;
RowE:= ARow;
if (ARow > 0) and (ACol = 3) then
begin
TxtCote:= '';
EditC:= True;
EditD:= False;
end;
if (ARow > 0) and (ACol = 4) then
begin
Value:= '00\/00\/0000'; {Masque pour les dates}
TxtDate:= '';
EditC:= False;
EditD:= True;
end;
end;
procedure TListeVals.AffValsKeyPress(Sender: TObject; var Key: char);
{procedure de filtrage de valeur décimale :
- la valeur ne peut commencer que par le signe '-' ou un chiffre,
- tous les autres caractères ne peuvent être que numérique ou le séparateur
décimal,
- le séparateur décimal ne peut apparaître qu'une seule fois.}
var
i: Integer;
SD: Boolean;
begin
if EditC then
begin
if TxtCote = '' then {Si chaîne vide, on accepte que '0' à '9' et '-'}
case Key of
'0'..'9', '-':
else
key:=#0;
end
else
begin
if (Length(TxtCote) = 1) and (TxtCote[1] = '-') then
begin {Si le chaine ne comprend qu'un caractére et que ce soit '-' ...}
case Key of {..le deuxième caractère ne peut être qu'unn chiffre}
#0 .. #31, '0'..'9':
else
key:=#0;
end;
Exit;
end;
for i:= 1 to Length(TxtCote) do
begin {Pour le reste de la chaîne, on ne peut avoir que des chiffres ..}
SD:= False; {.. ou une seul fois le séparateur décimal}
if TxtCote[i] = '.' then {Test de la présence du séparateur décimal}
SD:= True;
if not SD then {Si pas déjà de séparateur décimal, on l'accepte ...}
case Key of
#0 .. #31, '0'..'9', '.':
else
key:=#0;
end
else {Sinon on le refuse}
case Key of
#0 .. #31, '0'..'9':
else
key:=#0;
end;
end;
end;
end;
end;
procedure TListeVals.AffValsSetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
{Selon la colonne, on récupère dans TxtCote ou TxtDate la valeur de la chaîne
en cours de frappe}
begin
if (ARow > 0) and ((ACol = 3) or (Acol = 4)) then
begin
if Acol = 3 then
begin
TxtCote:= Value;
ModifMan:= True;
end;
if Acol = 4 then
begin
TxtDate:= Value;
ModifMan:= True;
end;
end;
end; |
Partager