|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.08.2007, 11:10 | #1 |
Форумчанин
Регистрация: 27.07.2007
Сообщений: 123
|
Эмуляция механического счетчика
На форме 3 ListBox'a. У всех св-во Items числа от 0 до 9.
Нужно чтобы был организован счетчик - по типу обычного счетчика для подсчета электронэнергии.Но возникает ошибка при пере ходе цифр от 89 к 90 - получается число 190 вместо 90, потомучто этот алгоритм реализован для разрядов (т.е. единицы,десятки и сотни). Существует условие - нельзя сравнивать числа арифметическими действиями!!!, только как текст или логическими операциями. Вот листинг процедура сидит на таймере(это не суть). procedure TForm1.Button1Click(Sender: TObject); var TEXT_1:string; TEXT_2:string; TEXT_3:string; procedure MoveItems(List:TListBox); // простое перемещение в листбоксе var q:string; begin q := List.Items.Strings[0]; List.Items.Delete(0); List.Items.Add(q); end; begin TEXT_1 := Listbox1.Items.Strings[0]; MoveItems(ListBox1); if TEXT_1 = '9' then begin //ошибка возникает здесь!!!! при переходе 89-90 т.к. //оба разряда равны 9: 89 - единицы и (при добавлении единицы) 90 // MoveItems(ListBox2); TEXT_2 := Listbox2.Items.Strings[0]; if (TEXT_1 = '9') and (TEXT_2='9') then begin MoveItems(ListBox3); TEXT_3 := Listbox3.Items.Strings[0]; end; end; end; кто сможет решить буду очень благодарен!!!
Ну что ж… Жизнь иногда такие фертеля выкидывает, что и фантасту не приснится…
|
19.08.2007, 20:17 | #2 |
Пользователь Подтвердите свой е-майл
Регистрация: 07.08.2007
Сообщений: 22
|
Я бы на твоем месте попробовал бы следующий вариант:
procedure MoveItems(List : TListBox); var q : string; begin q:=List.Items.Strings[0]; List.Items.Delete(0); List.Items.Add(q); end; procedure Schetchik; begin MoveItems(Form1.ListBox1); if Form1.ListBox1.Items[0]='0' then MoveItems(Form1.ListBox2) else exit; if Form1.ListBox2.Items[0]='0' then MoveItems(Form1.ListBox3) else exit; if Form1.ListBox3.Items[0]='0' then begin MoveItems(Form1.ListBox1); MoveItems(Form1.ListBox2); end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Schetchik; Label1.Caption:='Показания счетчика: '+ListBox3.Items[0]+ListBox2.Items[0]+ListBox1.Items[0]; end; |
20.08.2007, 00:20 | #3 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
С таким же успехом можно написать функцию делающую все арифметические вычисления и вынести ее в отдельный модуль
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Эмуляция | Mago | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 27.07.2008 23:33 |
Собрать статистику счетчика. | Djonson | PHP | 1 | 01.03.2008 18:35 |
Эмуляция консоли... | Sota | Общие вопросы C/C++ | 4 | 20.01.2008 01:04 |
Эмуляция клавиш | UnD)eaD)Snake | Win Api | 1 | 04.11.2007 18:07 |