Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.08.14;
Скачать: CL | DM;

Вниз

Вводить только одну запятую   Найти похожие ветки 

 
Basilisk   (2011-04-30 11:18) [0]

Такая ситуация:
есть stringgrid, прописано,чтобы поля принимали только цифры,бэкспэйс и запятую,но запятых можно поставить несколько,а как сделать чтобы вводить только одну запятую? и при удалении её снова можно было бы вводить запятую


 
Jeer ©   (2011-04-30 11:47) [1]

Считать запятые ?


 
Basilisk   (2011-04-30 11:49) [2]

да,но простой счетчик(флаг) не подойдет..ведь если я ввожу счетчик,то придется обнулять его при нажатии бэкспэйс,а что если я удалю не запятую


 
sniknik ©   (2011-04-30 12:04) [3]

не мудри. просто просматривай уже введенный текст в проверке ввода/изменении.


 
Basilisk   (2011-04-30 12:07) [4]

sniknik
а пример можно?


 
Jeer ©   (2011-04-30 12:28) [5]


> а пример можно?


Не в состоянии пройти по символам строки сравнить с символом #44 ?
Тогда тебе в другую сторону.


 
sniknik ©   (2011-04-30 12:54) [6]

if (Key = ",") and Pos(",", EditText) > 0 then raise Exception.Create("Много запятых!").


 
sniknik ©   (2011-04-30 13:09) [7]

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
 with TStringGrid(Sender) do
   if (Key = ",") and (Pos(",", Cells[Col, Row]) > 0) then raise Exception.Create("Много запятых!");
end;


хотя, это будет очень неудобно пользователю... (ну вот вижу я что не там поставил, и курсор там где нужно, естественно сначала ставишь вторую а после сдвигаешься и удаляешь первую). вообще когда программа считает себя "умнее" пользователя, такая долго не "живет". (если она конечно не навязанная государством ... типа "эгаиса", а на конкурентной основе)


 
Inovet ©   (2011-04-30 13:16) [8]

Это весеннее обострение с запятыми регулярно возникает.

а так не может быть:
-113,45
-123,45e-2
+123,45e+2
?

Недавалки вводить запятые - зло. Проверяй после заполнения поля, и в случае ошибки, поднимай исключение.


 
Anatoly Podgoretsky ©   (2011-04-30 13:53) [9]

> Basilisk  (30.04.2011 11:18:00)  [0]

Ну и пусть ставит, никакого зла в этом нет, лишь бы результат был
правильный. Не стоит третировать пользователей.


 
Dennis I. Komarov ©   (2011-05-03 13:27) [10]

А я вот точку люблю ]:->


 
Рамиль ©   (2011-05-03 14:24) [11]


unit NumEdit;

interface

uses
 Windows, Messages, SysUtils, Classes, Controls, StdCtrls, ExtCtrls;

type
 TNumberType = (ntInteger, ntFloat);
 TNumEdit = class(TCustomLabeledEdit)
 private
   FLastValue: string;
   FLastCarPos: integer;
   FNumberType: TNumberType;
   procedure SetNumberType(const Value: TNumberType);
 protected
   procedure Change; override;
   function CheckNum(Value: string): boolean; dynamic;
   procedure KeyDown(var Key: word; Shift: TShiftState); override;
 public
   constructor Create(AOwner: TComponent); override;
 published
   {Опубликовать по аналогии с TEdit}
   property NumberType : TNumberType read FNumberType write SetNumberType;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Additional", [TNumEdit]);
end;

{ TNumEdit }

procedure TNumEdit.Change;
begin
 inherited;
 if not CheckNum(Self.Text) then
 begin
   if Self.Text <> "" then
   begin
     Self.Text := FLastValue;
     Self.SetSelStart(FLastCarPos);
   end;
 end;
end;

function TNumEdit.CheckNum(Value: string): boolean;
var
 OutValExt: extended;
 OutValInt: integer;
begin
 Result := true;
 case FNumberType of
   ntInteger: Result := TryStrToInt(Self.Text, OutValInt);
   ntFloat: Result := TryStrToFloat(Self.Text, OutValExt);
 end;
end;

constructor TNumEdit.Create(AOwner: TComponent);
begin
 inherited;
 Self.Text := "";
 FLastValue := "";
 FLastCarPos := 1;
 FNumberType := ntInteger;
end;

procedure TNumEdit.KeyDown(var Key: word; Shift: TShiftState);
begin
 inherited;
 FLastValue := Self.Text;
 FLastCarPos := Self.GetSelStart + Self.GetSelLength;
end;

procedure TNumEdit.SetNumberType(const Value: TNumberType);
begin
 FNumberType := Value;
end;

end.


 
Рамиль ©   (2011-05-03 14:25) [12]


> {Опубликовать по аналогии с TEdit}

Вернее с TLabeledEdit



Страницы: 1 вся ветка

Текущий архив: 2011.08.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
2-1304524929
Drowsy
2011-05-04 20:02
2011.08.14
Массив виртуальных функций класса.


6-1240487526
ZERAM
2009-04-23 15:52
2011.08.14
idHHP и charset


15-1303381182
xayam
2011-04-21 14:19
2011.08.14
AdSense или Sape ?


15-1303317238
stas
2011-04-20 20:33
2011.08.14
Regexp из C# в Delphi


15-1303562654
И. Павел
2011-04-23 16:44
2011.08.14
Нужно ли так распинаться?