Форум: "Начинающим";
Текущий архив: 2011.08.14;
Скачать: [xml.tar.bz2];
ВнизВводить только одну запятую Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.004 c