Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проверить на тип


Страницы:   1 2 3

Bobby Digital ©   (2004-11-24 05:02:00) 

можно ли как то проверить тип данных введных, например в Edit не используя try ... exсept


Leonid Troyanovsky   (2004-11-25 09:56:00) [21]


> ASoft   (25.11.04 07:04) [20]
> GetDataType() это действительно здорово, что еще раз доказывает:
> "создавайте свои типы". Но как быть с проверкой при выходе
> из MaskEdit, ведь событие (ошибка) EDBEditError срабатывает
> раньше, чем проверочная функция? Написать свой обработчик
> ошибок?


Например

http://groups.google.com/groups?selm=41931491%40f1003.n5080.z2.fidonet.ftn

--
С уважением, LVT.


ASoft   (2004-11-25 07:04:00) [22]

GetDataType() это действительно здорово, что еще раз доказывает: "создавайте свои типы". Но как быть с проверкой при выходе из MaskEdit, ведь событие (ошибка) EDBEditError срабатывает раньше, чем проверочная функция? Написать свой обработчик ошибок?


GuAV   (2004-11-25 01:58:00) [23]

Bobby Digital ©   (25.11.04 1:52) [18]
А что зн. выражение  F: double absolute I;


То что переменная F инеющая тип double находится о тому же адресу что и переменная I. В данном случае такая конструкция ошшибочна, поскольку размер переменной F больше чем размер переменной I и поэтому чтение/запись переменной F может привести к чтению/записи посторонних данных.

Не следует пользоваться absolute без нужды.

Здесь можно написать
var
I: integer;
F: double;


Подробнее absolute+F1


Bobby Digital   (2004-11-25 01:52:00) [24]

А что зн. выражение  F: double absolute I;


GuAV   (2004-11-25 01:36:00) [25]

Попробовал. GetDataType('7,8'); - AV. Прикольно.


GuAV   (2004-11-25 01:25:00) [26]

GuAV ©   (25.11.04 1:25) [15]
ЫшяуЩа(Штеупук) = 4

SizeOf(Integer) = 4


GuAV   (2004-11-25 01:25:00) [27]

Юрий Зотов ©   (25.11.04 0:20) [14]

А не кажется ли Вам что

Юрий Зотов ©   (25.11.04 0:20) [14]
F: double absolute I;


- плохой код, учитывая что ЫшяуЩа(Штеупук) = 4 ,а SizeOf(Double) = 8. Вы можете конечно доказать, что ничего не перезаписываете но всё же правильнее было бы I: integer absoulte F;. А ещё правильнее IMHO не экономить одно слово в стеке и объявиь F и I отдельно.


Юрий Зотов   (2004-11-25 00:20:00) [28]

type
 TDataType = (dtInteger, dtFloat, dtString);

function GetDataType(S: string): TDataType;
var
 I: integer;
 F: double absolute I;
begin
 if TryStrToInt(S, I) then
   Result := dtInteger
 else
   if TryStrToFloat(S, F) then
     Result := dtFloat
   else
     Result := dtString
end;


Bobby Digital   (2004-11-24 23:58:00) [29]

мне нужно было различать - Integer Float String
я написал простю функцию ... которая проверяет каждый символ в строке, например, если все цифры то Интежер .. и тд.


Ega23   (2004-11-24 14:28:00) [30]

Самое лучшее - в обработчике OnButtonOKClick :


procedure TFProfs.btnOkClick(Sender: TObject);
var
ss:String;
ProfID:Integer;

begin

if not CheckControlValues then Exit;

NewDataString:=MakeHistDetStr(nil,eProfNam.Text+';'+eProfLab.Text+';'+
                              RQ1.FieldByName('WCfgNam').AsString+';'+cbIsActual.Text,
                              'Название: ;Сокр.: ;АРМ: ;Используется: ','V');

............

ModalResult:=True;
end;

function TFProfs.CheckControlValues: Boolean;
var
ss:string;
Code:Integer;

begin

ss:=eProfNam.Text;
if not CheckOnQuotes(ss,Code) then
 begin
  if eProfNam.CanFocus then eProfNam.SetFocus;
//   PassMessage(Handle,'Символ '+eProfNam.Text[Code]+' является зарезервированым '+CRLF+
//                      ' и не может быть использован',PasMess.capWarning,0);
  Exit;
 end;
eProfNam.Text:=ss;

ss:=eProfLab.Text;
if not CheckOnQuotes(ss,Code) then
 begin
  if eProfLab.CanFocus then eProfLab.SetFocus;
//   PassMessage(Handle,'Символ '+eProfLab.Text[Code]+' является зарезервированым '+CRLF+
//                      ' и не может быть использован',PasMess.capWarning,0);
  Exit;
 end;
eProfLab.Text:=ss;

if eProfNam.Text='' then
 begin
  PassMessage(Handle,PasMess.wrnNamAbs,PasMess.capWarning,0);
  eProfNam.SetFocus;
  Result:=False;
  Exit;
 end;

if eProfLab.Text='' then
 begin
  PassMessage(Handle,PasMess.wrnLabAbs,PasMess.capWarning,0);
  eProfLab.SetFocus;
  Result:=False;
  Exit;
 end;

if Mode=0 then
 begin
  ss:='select ProfNam from Profs where ProfNam=' + ValX(eProfNam.Text);
  QuOpen(DMpas.RQTemp,ss);
  if not DMpas.RQTemp.IsEmpty then
   begin
    DMpas.RQTemp.Close;
    PassMessage(Handle,PasMess.wrnNamExist,PasMess.capWarning,0);
    eProfNam.SetFocus;
    Result:=False;
    Exit;
   end;

  ss:='select ProfLab from profs where proflab=' + ValX(eProfLab.Text);
  QuOpen(DMpas.RQTemp,ss);
  if not DMpas.RQTemp.IsEmpty then
   begin
    DMpas.RQTemp.Close;
    PassMessage(Handle,PasMess.wrnLabExist,PasMess.capWarning,0);
    eProfLab.SetFocus;
    Result:=False;
    Exit;
   end;
 end;

Result:=True;
end;


begin...end   (2004-11-24 14:20:00) [31]


> [10] ASoft   (24.11.04 11:07)


> перехват клавиш Shift-Ins, Ctrl-C...

> Как-то не очень...
> Кто лучше?

Обработчик TEdit.OnChange.


ASoft   (2004-11-24 11:07:00) [32]

Опять Val()...
перехват клавиш Shift-Ins, Ctrl-C...
навесить на Edit свой Popup...
Как-то не очень...
Кто лучше?


ASoft   (2004-11-24 10:53:00) [33]

>А если Copy/Paste? Будет ли работать проверка в таком случае?[8]
Хороший вопрос...


passlight   (2004-11-24 10:49:00) [34]

А если Copy/Paste? Будет ли работать проверка в таком случае?


ASoft   (2004-11-24 10:49:00) [35]

> Может Автор вопроса это имел ввиду? [6]
Кстати, где он, автор?


ASoft   (2004-11-24 10:47:00) [36]

>Тип данных введенных в едит можно не проверять.
Сам когда-то пытался проверять при выходе из Edit, что там: число или текст, использовал ф. Val(). Но потом, просто в KeyPress не разрешал вводить буквы или цифры (в зависимости от нужд). Может Автор вопроса это имел ввиду?


Sandman25   (2004-11-24 10:44:00) [37]

Если подходить строго, у введенных в едит данных тип PChar.


Rutven   (2004-11-24 10:37:00) [38]


> Тип данных введенных в едит можно не проверять.
> Это всегда анси строка.

Браво. :)


Reindeer Moss Eater   (2004-11-24 10:28:00) [39]

Тип данных введенных в едит можно не проверять.
Это всегда анси строка.


ASoft   (2004-11-24 07:37:00) [40]

>Bobby Digital
Если тебе нужно вводить в Edit только цифры или цифры ч/з запятую, то в KeyPress Edit'а можно сразу установить проверку ввода с клавы:)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо