Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1302671702
TUser
2011-04-13 09:15
2011.08.14
Открытое письмо В. А. Садовничему


2-1304106723
novichek
2011-04-29 23:52
2011.08.14
idHttp RSConnectionClosedGracefully


2-1304580718
LDV
2011-05-05 11:31
2011.08.14
variable required


1-1261468556
Neket
2009-12-22 10:55
2011.08.14
GEO- компанент


15-1303194418
OW
2011-04-19 10:26
2011.08.14
ничего себя тенденция на сайты второго уровня





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский