1. TEdit в стиле 1С
т.е. при вводе float числа остаются видимыми знаки после разделителя и перепрыгивание через разделитель происходит нажатием точки или запятой или стрелки
добавил процедуры
procedure Tformopl.FloatKeyDown(snd:TEdit; var Key: Word);
var s:string;
begin
s:='';
if Key=46 then
begin
s:=copy(snd.text,snd.SelStart+1,1);
if (s=',') then Key:=0;
if (s='.') then Key:=0;
end;
end;
procedure Tformopl.FloatKeyPress(snd:TEdit; var Key: char;dig:integer);
var a:extended;
s:string;
begin
TryStrToFloat(snd.Text,a);
if (Key in [#8,#13,'-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] ) then
if snd.selstart=0 then
begin
s:=rightstr(snd.Text,dig+1);
if dig>0 then
snd.Text:=Key+s
else
snd.Text:=Key;
Key:=#0;
Snd.SelStart:=Snd.SelStart+1;
end
else
Key:=Key
else
begin
if (Key in ['.', ',']) then
Snd.SelStart:=Snd.SelStart+1;
Key :=#0;
end;
end;
procedure Tformopl.floatChange(snd:TEdit;dig:integer);
var a:extended;
posk,nn:integer;
st:extended;
begin
st:=power(10,dig);
nn:=trunc(st);
posk:=snd.SelStart;
TryStrToFloat(snd.Text,a);
a:=trunc(a*nn)/nn;
snd.Text:=FloatToStrF(a,ffFixed, 15, dig);
snd.SelStart:=posk;
end;
а в методах самого TEdit вызываю эти процедуры
procedure Tformopl.Edit1Change(Sender: TObject);
begin
FloatChange(Edit1,2); // 2- разрядность
end;
procedure Tformopl.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
FloatKeyDown(Edit1,Key);
end;
procedure Tformopl.Edit1KeyPress(Sender: TObject; var Key: char);
begin
FloatKeyPress(Edit1,Key,2);
end;
Есть реализация навороченных заголовков скроллируемых синхронно с гридом, итоговая строка и выделение фиксированных ячеек StringGrid .
кому интересно пишите в мыло
a_maceyko@mail.ru