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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.12.2010, 16:14
whitehustle whitehustle вне форума
Прохожий
 
Регистрация: 18.12.2010
Сообщения: 17
Репутация: 12
По умолчанию Вопрос по калькулятору

В общем, тут нужно сделать, чтобы поле (edit1) очищалось, когда вводишь новое число, уже после исчислений. Например, после того как А+В=С, то остается С, и при вводе А дополняется к С. Втыкаю в другие коды и не врубаю %)

Если писать где кнопки (0-9) edit1.clear, то получается что нельзя работать с числами, где больше 1 символа.

Помогите , братва
Ответить с цитированием
  #2  
Старый 18.12.2010, 17:24
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

После вычислений ставишь глобальный флаг, и по нажатии кнопок 0..9 если установлен флаг то сбрасываешь его и делаешь edit1.Clear.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 18.12.2010, 17:49
whitehustle whitehustle вне форума
Прохожий
 
Регистрация: 18.12.2010
Сообщения: 17
Репутация: 12
По умолчанию

Цитата:
Сообщение от Bargest
После вычислений ставишь глобальный флаг, и по нажатии кнопок 0..9 если установлен флаг то сбрасываешь его и делаешь edit1.Clear.

1) а можно подробнее узнать, что за flag, а то так и не усек?)

2) т.е. на каждую кнопку отдельно прописывать?
у меня вот так там сделано

Цитата:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text+'1';
end;

3) в конце прописывал flag:=false, потом edit1.clear, так он удаляет всё. то это на кнопке = стоит у меня всё.
похоже я очередной раз не догнал, что надо сделать
Ответить с цитированием
  #4  
Старый 18.12.2010, 18:22
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

1)
Код:
var flag:boolean;
2) Лучше всего сделать так по событию Edit1Change:
Код:
begin
 if flag then
 begin 
  Edit1.Text:=Edit1.Text[length(Edit1.Text)];
  flag:=false;
 end;
end;
3)
Код:
//после вычислений
flag:=true;
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 18.12.2010, 18:32
whitehustle whitehustle вне форума
Прохожий
 
Регистрация: 18.12.2010
Сообщения: 17
Репутация: 12
По умолчанию

спасибо большое, всё работает

но вопрос про flag остается открыт) что это за штука, как я понял, то что-то вроде для перебора?)
Ответить с цитированием
  #6  
Старый 18.12.2010, 19:16
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

flag - это обычная переменная, которая имеет два значения: 0 или -1 (то бишь True or False). Она нужна, чтобы понять, когда надо очистить едит.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #7  
Старый 19.12.2010, 12:10
whitehustle whitehustle вне форума
Прохожий
 
Регистрация: 18.12.2010
Сообщения: 17
Репутация: 12
По умолчанию

А, всё, понял. Благодарности )
Ответить с цитированием
  #8  
Старый 23.12.2010, 17:30
whitehustle whitehustle вне форума
Прохожий
 
Регистрация: 18.12.2010
Сообщения: 17
Репутация: 12
По умолчанию

Кстати, теперь у меня косяк появился, что когда жму на действия, и на С после уже исчислений, появляется ошибка " Access violation at address 00456F80 in module 'Kalk2.exe'. Read of address FFFFFFFFF. "
Гугл молчит об этом.

На кнопках со знаками такой код

Код:
begin
if Edit1.Text <> '' then
x:=StrToFloat(Edit1.Text);
z:='+';
Edit1.Clear;
end;

и синим выделяет эту строчку
Код:
  Edit1.Text:=Edit1.Text[length(Edit1.Text)];

а тут это , если что

Код:
var
  Kalkulator: TKalkulator;
  x, y, rezultat: real;
  flag: boolean;
  z: char;
__________________
Новичок в этом деле.
Ответить с цитированием
  #9  
Старый 23.12.2010, 18:06
Аватар для EvilRussian
EvilRussian EvilRussian вне форума
Начинающий
 
Регистрация: 21.12.2010
Адрес: Россия, Красноярский край
Сообщения: 177
Репутация: 22
По умолчанию

Ну, во-первых, ты флаг-то на 0 сбрасываешь при нажатии "С"?
Во-вторых, рекомендую затариться EurekaLog - мегавещь, все ошибки как на ладони.
Ну а в третьих... какая строчка стоит перед подсвечиваемой?

З.Ы. и не 0 или -1, а 1 или 0, то есть Истина (True) или Ложь (False).
__________________
Если не ты, то кто?
(с) Терри Пратчетт

Не забывайте ставить плюсы и говорить спасибо!
Ответить с цитированием
  #10  
Старый 23.12.2010, 18:09
whitehustle whitehustle вне форума
Прохожий
 
Регистрация: 18.12.2010
Сообщения: 17
Репутация: 12
По умолчанию

Цитата:
Сообщение от EvilRussian
Ну, во-первых, ты флаг-то на 0 сбрасываешь при нажатии "С"?
Во-вторых, рекомендую затариться EurekaLog - мегавещь, все ошибки как на ладони.
Ну а в третьих... какая строчка стоит перед подсвечиваемой?

З.Ы. и не 0 или -1, а 1 или 0, то есть Истина (True) или Ложь (False).

1. Нет
2. скачиваю
3.
Код:
begin
 if flag then
 begin
  Edit1.Text:=Edit1.Text[length(Edit1.Text)];
  flag:=false;
  end;
  end;

во, теперь прописал перед edit1.clear flag:=false и пашет)
вечно недочеты в самом простом
Спасибо в очередной раз)
__________________
Новичок в этом деле.

Последний раз редактировалось whitehustle, 23.12.2010 в 18:12.
Ответить с цитированием
  #11  
Старый 23.12.2010, 18:14
Аватар для EvilRussian
EvilRussian EvilRussian вне форума
Начинающий
 
Регистрация: 21.12.2010
Адрес: Россия, Красноярский край
Сообщения: 177
Репутация: 22
По умолчанию

Сбрасывать на false нужно, но, похоже, баг не из-за этого.
Что-то я не могу понять, где глюк. Может кинешь исходники (естественно в архиве), я посмотрю.
__________________
Если не ты, то кто?
(с) Терри Пратчетт

Не забывайте ставить плюсы и говорить спасибо!
Ответить с цитированием
  #12  
Старый 23.12.2010, 18:18
whitehustle whitehustle вне форума
Прохожий
 
Регистрация: 18.12.2010
Сообщения: 17
Репутация: 12
По умолчанию

но бага больше нету
__________________
Новичок в этом деле.
Ответить с цитированием
  #13  
Старый 23.12.2010, 18:35
Аватар для EvilRussian
EvilRussian EvilRussian вне форума
Начинающий
 
Регистрация: 21.12.2010
Адрес: Россия, Красноярский край
Сообщения: 177
Репутация: 22
По умолчанию

Тогда радуйся!
Поздравляю!

З.Ы. И скромно так: поста-а-а-авь плюсик ^_^ (весы справа сверху)
__________________
Если не ты, то кто?
(с) Терри Пратчетт

Не забывайте ставить плюсы и говорить спасибо!
Ответить с цитированием
  #14  
Старый 23.12.2010, 18:41
kalinochkind kalinochkind вне форума
Прохожий
 
Регистрация: 06.06.2010
Сообщения: 15
Репутация: 12
По умолчанию

Лучше так:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text+tcontrol(sender).caption;
end;
И на всех кнопках делаешь обработчик onclick - BitBtn1Click
Ответить с цитированием
  #15  
Старый 23.12.2010, 18:53
whitehustle whitehustle вне форума
Прохожий
 
Регистрация: 18.12.2010
Сообщения: 17
Репутация: 12
По умолчанию

Цитата:
Сообщение от EvilRussian
Тогда радуйся!
Поздравляю!

З.Ы. И скромно так: поста-а-а-авь плюсик ^_^ (весы справа сверху)


Цитата:
Сообщение от kalinochkind
Лучше так:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Edit1.Text:=Edit1.Text+tcontrol(sender).caption;
end;
И на всех кнопках делаешь обработчик onclick - BitBtn1Click
попробую так тоже)
__________________
Новичок в этом деле.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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