Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.09.2013, 11:27
anghela anghela вне форума
Прохожий
 
Регистрация: 02.09.2013
Сообщения: 28
Версия Delphi: Delphi 7
Репутация: 9
Восклицание Ошибка при выводе значения в лейбл

Помогите найти ошибку в коде:
Код:
procedure TForm2_new_schet.But_perevodClick(Sender: TObject);
var dol,evro,sum,rez,dol_pr,evro_pr:single;
begin
  dol:=StrToFloat(Edit_kurs_dol.Text);
  evro:=StrToFloat(Edit_kurs_evro.Text);
  sum:=StrToFloat(Edit15_perevod.Text);
  { If Not TryStrToFloat(Edit15_perevod.Text,sum) then
   begin
    ShowMessage('Вы ввели не корректную сумму');
   // Exit;
    end; }
 if (CB_valuta_per.Text='Рубль') then
  begin
    if (CB_perevod_v.Text='Доллар') then
    rez:=sum/dol;
    Label24.Caption:=FloatToStr(rez) + ' доллара';
    if (CB_perevod_v.Text='Евро') then
    rez:=sum/evro;
    Label24.Caption:=FloatToStr(rez) + ' евро';
  end;
  dol_pr:=StrToFloat(Edit_dol_prod.Text);
  evro_pr:=StrToFloat(Edit_evro_prod.Text);
  if (CB_valuta_per.Text='Доллар') and (CB_perevod_v.Text='Рубль') then
  rez:=sum*dol_pr;
   Label24.Caption:=FloatToStr(rez) + ' рубля';
  if (CB_valuta_per.Text='Евро') and (CB_perevod_v.Text='Рубль') then
  rez:=sum*evro_pr;
   Label24.Caption:=FloatToStr(rez) + ' рубля';
end;
Работает все, только при выводе значений в лейбл он выводит правильно значения типа "столько то рублей", а значения "столько то долларов/столько то евро" он не выводит, а заменяет доллар и евро так же на рубли.

И как сделать проверку поля на символы, типа что введены только цифры? TryStrToFloat почему то не работает
Ответить с цитированием
  #2  
Старый 26.09.2013, 11:37
Аватар для xdessx
xdessx xdessx вне форума
Заблокирован
 
Регистрация: 23.09.2013
Адрес: Астана
Сообщения: 34
Версия Delphi: Delphi 7
Репутация: -1244
По умолчанию

Ты забыл(а) begin поставить:
Код:
procedure TForm2_new_schet.But_perevodClick(Sender: TObject);
var dol,evro,sum,rez,dol_pr,evro_pr:single;
begin
  dol:=StrToFloat(Edit_kurs_dol.Text);
  evro:=StrToFloat(Edit_kurs_evro.Text);
  sum:=StrToFloat(Edit15_perevod.Text);
  { If Not TryStrToFloat(Edit15_perevod.Text,sum) then
   begin
    ShowMessage('Вы ввели не корректную сумму');
   // Exit;
    end; }
 if (CB_valuta_per.Text='Рубль') then
  begin
    if (CB_perevod_v.Text='Доллар') then begin
     rez:=sum/dol;
     Label24.Caption:=FloatToStr(rez) + ' доллара';
    end;
    if (CB_perevod_v.Text='Евро') then begin
     rez:=sum/evro;
     Label24.Caption:=FloatToStr(rez) + ' евро';
    end;
 end;
 dol_pr:=StrToFloat(Edit_dol_prod.Text);
 evro_pr:=StrToFloat(Edit_evro_prod.Text);
 if (CB_valuta_per.Text='Доллар') and (CB_perevod_v.Text='Рубль') then begin
  rez:=sum*dol_pr;
  Label24.Caption:=FloatToStr(rez) + ' рубля';
 end;
 if (CB_valuta_per.Text='Евро') and (CB_perevod_v.Text='Рубль') then begin
  rez:=sum*evro_pr;
  Label24.Caption:=FloatToStr(rez) + ' рубля';
 end;
end;

Для проверки вводимых символов повесь событие на onKeyPress:
Код:
if not (key in ['0..9',#8,#13,'.']) then begin
 Showmessage('Разрешен ввод только цифр!');
 key := #0;
end;

Последний раз редактировалось xdessx, 26.09.2013 в 11:43.
Ответить с цитированием
  #3  
Старый 26.09.2013, 11:45
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

В обработчике, где вводятся суммы найдите событие OnKeyPress и впишите в него следующий код:

Код:
Var k:integer;
begin
if Edit1.Text='0' then 
  if not(key in [',',#8]) then key:=#0;
if key in['0'..'9',',',#8] then //разрешаем вводить только числа
  begin
  if key=',' then //проверка для только одной запятой
    begin
    if Edit1.Text='' then key:=#0;
      For k:=1 to Length(Edit1.Text) do
      begin
      if Edit1.Text[k]=',' then key:=#0;
      end;
    end;
  end else key:=#0;

Это старый "универский" вариант

вместо not(Key in [...]) сейчас используют CharInSet функцию.
А начиная с 2010 delphi у Edit появилось свойство NumbersOnly.
Ответить с цитированием
Этот пользователь сказал Спасибо Uniq! за это полезное сообщение:
xdessx (26.09.2013)
  #4  
Старый 26.09.2013, 11:46
anghela anghela вне форума
Прохожий
 
Регистрация: 02.09.2013
Сообщения: 28
Версия Delphi: Delphi 7
Репутация: 9
По умолчанию

не совсем понятно, что вы имели ввиду. В том месте, куда вы предлагаете поставить end он не нужен. Расчетная часть выполняется правильно, не выводится только текст
Ответить с цитированием
  #5  
Старый 26.09.2013, 11:48
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Цитата:
Сообщение от anghela
не совсем понятно, что вы имели ввиду. В том месте, куда вы предлагаете поставить end он не нужен. Расчетная часть выполняется правильно, не выводится только текст

begin не уследили:
Код:
if (CB_perevod_v.Text='Доллар') then 
begin
     rez:=sum/dol;
     Label24.Caption:=FloatToStr(rez) + ' доллара';
end;
Ответить с цитированием
  #6  
Старый 26.09.2013, 11:51
Аватар для xdessx
xdessx xdessx вне форума
Заблокирован
 
Регистрация: 23.09.2013
Адрес: Астана
Сообщения: 34
Версия Delphi: Delphi 7
Репутация: -1244
По умолчанию

Цитата:
не совсем понятно, что вы имели ввиду. В том месте, куда вы предлагаете поставить end он не нужен. Расчетная часть выполняется правильно, не выводится только текст

Ваш код:
Код:
if (CB_valuta_per.Text='Доллар') and (CB_perevod_v.Text='Рубль') then
  rez:=sum*dol_pr;
  Label24.Caption:=FloatToStr(rez) + ' рубля';
По условию выполняется строчка №2 с расчетами, а строчка №3 выполняется всегда в не зависимости от условия.

Мой код:
Код:
if (CB_valuta_per.Text='Доллар') and (CB_perevod_v.Text='Рубль') then begin
  rez:=sum*dol_pr;
  Label24.Caption:=FloatToStr(rez) + ' рубля';
end;
Все что идет после begin и до end - выполняется только при выполнении условия.
Ответить с цитированием
Этот пользователь сказал Спасибо xdessx за это полезное сообщение:
anghela (26.09.2013)
  #7  
Старый 26.09.2013, 12:25
anghela anghela вне форума
Прохожий
 
Регистрация: 02.09.2013
Сообщения: 28
Версия Delphi: Delphi 7
Репутация: 9
По умолчанию

Цитата:
Сообщение от Uniq!
В обработчике, где вводятся суммы найдите событие OnKeyPress и впишите в него следующий код:

Код:
Var k:integer;
begin
if Edit1.Text='0' then 
  if not(key in [',',#8]) then key:=#0;
if key in['0'..'9',',',#8] then //разрешаем вводить только числа
  begin
  if key=',' then //проверка для только одной запятой
    begin
    if Edit1.Text='' then key:=#0;
      For k:=1 to Length(Edit1.Text) do
      begin
      if Edit1.Text[k]=',' then key:=#0;
      end;
    end;
  end else key:=#0;

Это старый "универский" вариант

вместо not(Key in [...]) сейчас используют CharInSet функцию.
А начиная с 2010 delphi у Edit появилось свойство NumbersOnly.

Не работает. А есть ли какой-нибудь другой вариант?
Ответить с цитированием
  #8  
Старый 26.09.2013, 12:55
bublic1337 bublic1337 вне форума
Прохожий
 
Регистрация: 26.09.2013
Сообщения: 2
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от anghela
Не работает. А есть ли какой-нибудь другой вариант?
О девушк можно увидить ваше фото??

Админ: Пока недельный бан за флуд...

Последний раз редактировалось Admin, 26.09.2013 в 14:18.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter