forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Форма ввода данных и команда (http://forum.boolean.name/showthread.php?t=13612)

Programmer-man 29.10.2010 15:17

Форма ввода данных и команда
 
На форме есть FormAddTextField и Command.
Проблема в том, что, при нажатии OK, когда FormAddTextField пустой, мидлет виснет.
Мой код:
PHP код:

var d: real; 
id_2: integer; 
ok: command; 
    . . . 
begin 
  id_2 
:= FormAddTextField('Поле ввода', '', 10, 5); 
  
ok := CreateCommand(' OK', CM_BACK, 1); 
  
AddCommand(OK); 
   while 
GetClickedCommand <> OK do delay(100); 
  
d := StringToReal(FormGetText(id_2), 10);
end; 

Как решить проблему? Заранее благодарен!

odd 29.10.2010 19:12

Ответ: Форма ввода данных и команда
 
У меня всё нормально работает. Может проблема не в этом?

PHP код:

Program stars;
var 
d: real; 
id_2: integer; 
ok: command; 

begin
    ShowForm
;
    
id_2 := FormAddTextField('Поле ввода', '', 10, 5); 
    
ok := CreateCommand(' OK', CM_OK, 1); 
    
AddCommand(ok); 
    while 
GetClickedCommand <> ok do delay(50); 
    
d := StringToReal(FormGetText(id_2), 10);
end. 


ViNT 29.10.2010 20:08

Ответ: Форма ввода данных и команда
 
Так он и должен виснуть :)
Когда поле пустое, он пытается преобразовать пустую строку в число и обламывается.
Нужно
d := StringToReal(FormGetText(id_2), 10);
заменить на
PHP код:

S:=FormGetText(id_2);
if 
s<>'' then 
 d
:=StringToReal(s, 10); 


Programmer-man 29.10.2010 22:44

Мидлет и мобильник
 
Большое спасибо за ответы.
Приведу полный код :
PHP код:

program x2;
var
  
d: real;
  
id_1, id_2, i: integer;
  
ok, next, clicked: command;

begin
  ShowForm
;
  
repeat
    ok 
:= CreateCommand('  %', CM_BACK, 1);
    
next := CreateCommand('Далi', CM_SCREEN, 1);
    
d := 0;
    
repeat
      ClearForm
;
      
i := FormAddString('Час: ' + trunc(d / 100) + '.' + trunc(frac(d / 100) *100) + ' хв. ');
      
id_1 := FormAddTextField('Кiлькiсть, шт.', '', 10, 5);
      
id_2 := FormAddTextField('Норма, хв.', '', 10, 5);

      
AddCommand(ok);
      
AddCommand(next);
      
repeat clicked := GetClickedCommand;
        
delay(100);
      
until clicked <> EmptyCommand;

      if (
FormGetText(id_1) <> '') and (FormGetText(id_2) <> '') then
        d 
:= d + StringToReal(FormGetText(id_1), 10) * StringToReal(FormGetText(id_2), 10);

    
until clicked = ok;

    
repeat
      ClearForm
;
      
id_2 := FormAddTextField('Продуктивний час, хв.', '470', 10, 5);
      
AddCommand(OK);
          
      while 
GetClickedCommand <> OK do delay(100);

    
until FormGetText(id_2) <> '';

    
d := d / StringToReal(FormGetText(id_2), 10);

    
ClearForm;
    
i := FormAddString('Ваш результат: ' + trunc(d) + '.' + trunc(frac(d) * 100) + '%');

    
ok := CreateCommand('Повтор', CM_BACK, 1);
    
next := CreateCommand('Вихiд', CM_SCREEN, 1);

    
AddCommand(ok);
    
AddCommand(next);
    
repeat clicked := GetClickedCommand;
      
delay(100);
    
until clicked <> EmptyCommand;
  
until clicked = next;
end. 

На эмуляторе идет нормально, но на телефоне виснет в процессе выполнения. (siemens c65)
MIDlet type = Classic MIDlet
MIDP version = MIDP1.0
Как приучить телефон к мидлету?

odd 29.10.2010 23:45

Ответ: Форма ввода данных и команда
 
Для начала попробуй MIDP 2.0 поставить. Так как у тебя используются числа с плавающей запятой, а их в MIDP 1.0 не было.

Programmer-man 30.10.2010 13:50

Ответ: Форма ввода данных и команда
 
MIDP 2.0 тоже виснет.:"(
На других мобильниках все оk. С сименсом не дружит.


Часовой пояс GMT +4, время: 14:43.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot