Страница 2 из 6
Добавлено: 11 апр 2005, 11:53
Игорь Акопян
Подозреваю наличие сторонних компонент под Д3, которые придётся искать под Д6...
ЗЫ. А мне пока и Д5 хватает... :-P
Добавлено: 11 апр 2005, 17:02
Volk
Я вот не знаю функция как пишится "Если Button1 нажата то" Я пробовал if Button1.Click then и пробовал ещё кое что а только вот чёто не получается! Мне жто надо для калькулятора вот там при нажатии на кнопку + происходит вачисление а "если нажата кнопка = то показать результат" ПОДСКАЖИТЕ пожалуйсто. И ещё вот какая функция западает "передвинуть каретку(курсор для печатания) с Edit1 на Edit2. Тоже как это сделать??? Заранее СПАСИБО ВСЕМ!!!!!!
Добавлено: 11 апр 2005, 17:53
Хыиуду
Volk писал(а):Я вот не знаю функция как пишится "Если Button1 нажата то" Я пробовал if Button1.Click then и пробовал ещё кое что а только вот чёто не получается! Мне жто надо для калькулятора вот там при нажатии на кнопку + происходит вачисление а "если нажата кнопка = то показать результат"
То есть, я так понял, есть, скажем, два Edita, между ними кнопки: Button1 - "+", Button2 - "-" и так далее? И работать будет как простой калькулятор, то есть, скажем, ввели в эдит 2, нажали +, ввели во второй 3, нажали, скажем, *, в первом эдите появилось 5, второй освободился, ввели в него 7, нажали =, в первом появилось 35? Я правильно понял?
Если правильно, то можно создать переменную Operation типа char, и процедуру
Код: Выделить всё
procedure form1.operationclick(]
Вот так вот все хитро. А при нажатии кнопки "=" проверяешь, какая у тебя стоит операция: если + - складываешь содержимое эдитов, если - - вычитаешь и т.д.
Добавлено: 11 апр 2005, 21:31
Volk
Нет немного не так ты понял у меня есть 3 эдитора один на другом в первый ввёл первое число нажал "+" он скрылся и показался второй Edit в нём ввёл второе число нажал равно и показался третий вот как мне сделать такую процедуру чтоб описать там два этих слова "если нажата кнопка "=""????? Вот этот код для кнопки +
procedure TForm1.BPClick(Sender: TObject);
var
index2:Integer;
Sum:Integer;
EndCount:integer;
begin
Edit1.Visible:=False;
Edit2.Visible:=True;
Sum:=0;
EndCount:=StrToInt(Edit1.Text);
index2:=StrToInt(Edit2.Text);
Sum:=EndCount+index2;
if pressed.BR then
КАК МНЕ ЕЁ СЮДА ВСТАВИТЬ ЧЁ НАДО ПИСАТЬ?????
Edit3.Text:=IntToStr(Sum);
end;
и потом набор в Edit я осуществляю как кнопками клавы так и кнопками формы там 1,2,3... И вот я прописал чтоб каждая кнопка при нажатии переводится в определённое число и вводится в Edit1 но это хлам тогда не получается для других вот как мне сделать так чтоб число вводилось только там где стоик каретка курсора???? короче калькулятор должен работать как калькуль из стандартных в Windows XP Спасибо всем!!!!!
СМОТРИ ДАЛЬШЕ НА стр.2!!!!!!!
Добавлено: 12 апр 2005, 01:25
Игорь Акопян
Рекомендую несколько пересмотреть алгоритм.
1. Положи на форму
единственный TEdit. Сразу пропадёт геморрой с позиционированием и видимостью.
2. При нажатии на кнопку (цифири) сохраняй значение в переменной (если там пусто - первый операнд, если нет - второй)
3. При нажатии на кнопку операции сохраняй в переменной код этой операции, и если операндов 2 выполняй её.
4. Очень советую почитать и разобраться с ActionList и TAction. С их помощью можно очень легко манипулировать самыми разными свойствами контролов...
5. И, наконец, (хоть я и не модератор) заключай код в своих постах в тэг "code" (вместо кавычек - квадратные скобки) - так ты сохранишь форматирование - легче будет людям прочитать, понять и ответить

Добавлено: 12 апр 2005, 14:29
Volk
Да пробовал вчера с одним Эдитом и переменные записовал всё как положенно. Только вот когда вводиш второе число он стерает первое не только с глаз но и с памяти и выполняет действие только со вторым. Т.е. складывает его само с собой. А вот какой вопрос как на языке Pascal будит звучать условие "если Edit1 содержит текст (или число) то"?????? И ещё сто раз уже спрашивал чёто ни кто не ответил как будит звучать в паскале прцедура перевода каретки набора символов (курсора этого мигающего) с Edit1 на Edit2?????? Помогите ПОЖАЛУЙСТО!!! Спасибо всем заранее.
Добавлено: 12 апр 2005, 16:51
Игорь Акопян
если Edit1 содержит текст (или число) то
if Edit1.Text = 'qwe' then // если нужны только цифры - то лучше MaskEdit посмотреть
прцедура перевода каретки
Вообще-то это называется перемещение фокуса ввода, например так:
Edit2.SetFocus

Добавлено: 12 апр 2005, 17:46
Volk
Слушай а почему у меня не получается кнопка деления на калькуляторе? Вроде всё правильно. Вот смотри:
procedure TForm1.BRClick(Sender: TObject);
var
Del:Integer;
D:integer;
D2:integer;
Edit2.Visible:=False;
Edit1.Visible:=True;
D:=StrToInt(Edit1.Text);
D2:=StrToInt(Edit2.Text);
Del:=D/D2;
if Label1.Left=104 then
Edit1.Text:=IntToStr(Del);
end;
А делф мне выдаёт что типа команда Del:=D/D2; неверная! Чё тут нетак и где ошибка???? Заранее спасибо!
Добавлено: 12 апр 2005, 18:05
Игорь Акопян
Del := D div D2; // целочисленное деление
Я конечно понимаю, что ты для простоты калькулятор целых чисел делаешь, но "как-то это неатмосферно" (с)

Добавлено: 12 апр 2005, 20:01
RoKon
. Только вот когда вводиш второе число он стерает первое не только с глаз но и с памяти и выполняет действие только со вторым. Т.е. складывает его само с собой.
Что еще за глупости? Храни значения аргументов в разных переменных. Проверь видимость переменных, похоже в процедуре нажатия кнопки их объявил еще(или только), глобальными сделай для модуля.
Результат деления есть дробная переменная, не integer.
OTELLO, какой еще ApplicationEvents? Может еще OnIdle обработать штобы нажатие клавиши поймать??? У формы свойство KeyPreview, его переводишь в истину, а в событии формы OnKeyPress в зависимости от значения переменной Key: Char делаешь соответствующие действия.