![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Edit и Skrollbar
And7 © (2011-06-14 01:55:00)Делаю калькулятор. В Edit5.Text отображается вычисление и его результат.
Могут быть случаи когда в Edit5.Text вычисление и его результат не помещается. Для этого решил около Edit5.Text установить компонент SkrollBar1 (Properties-Kind-sbHorizontal) чтоб можно было при необходимости прокрутить SkrollBar1 вручную и увидеть весь текст в Edit5.
Вопрос в том что не знаю какой код и в каком событии SkrollBar1 написать, чтоб при прокручивании SkrollBar1 возможно было видеть весь текст в Edit5.
Не уверен но скорей всего это надо в SkrollBar1-Events-Onchange при двойном клике вписать неизвестный мне код
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
?
end;
Если возможно - подскажите.
And7 (2011-06-17 03:09:00) [1]вернее
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then SpeedButton15.Click; // и это работает - выводит правильный результат
And7 (2011-06-17 03:07:00) [2]Отошёл от названия темы (Edit и Skrollbar) в сторону. Но:
В поисках ответа нашёл кое что похожее:
http://forum.vingrad.ru/topic-136306.html
Для начала думаю заменю все кнопки Button на SpeedButton. Проверил SpeedButton фокус не получает.
if key='1' then SpeedButton1.Click; // это работает
if (key='=')then SpeedButton15.Click; // это работает
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then SpeedButton2.Click; // и это работает - выводит правильный результат
Задачу решил.Спасибо всем.
And7 (2011-06-15 21:03:00) [3]Причём этот код для физ.клавиши '=' работает точно без глюков.Ничего не добавляет. Выводит чистый результат.
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
if key='='then Button15.Click;
Но вот как нормально задействовать ещё и Enter ?
And7 (2011-06-15 20:30:00) [4]Если вместо:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then Button15.Click; //нажатие на физ.кл. Enter запускает нажатие на '=' кнопки калькулятора.
end;
поставить:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
if key=#13 then Button15.Click;
то получается то же что и с
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then Button15.Click;
end;
Когда я применял FormKeyDown, то ко второму числу просто добавлялась выделенная мышкой цифра столько раз сколько я нажимал Enter. а результат не выводился.
And7 (2011-06-15 19:43:00) [5]Спасибо. Поставил в Memo1.-Properties-WantReturns = false.
Но не помогло. Более того заметил следующее:
Если на калькуляторе мышкой выделена например цифра 1 то при нажатии Enter цифра 1 добавляется к второму числу, и выводится результат.
Если на калькуляторе мышкой выделена например цифра 2 то при нажатии Enter цифра 2 добавляется к второму числу, и выводится результат.
и.т.д.
Если выделена мышкой кнопка 'очистить' то при нажатии Enter результат очищается.
То есть получается при нажатии Enter вначале выполняется действие выделенной мышкой кнопки в калькуляторе, и далее сразу же активируется кнопка '=' .
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then Button15.Click; //нажатие на физ.кл. Enter запускает нажатие на '=' кнопки калькулятора.
end;
Когда я применял вместо FormKeyUp FormKeyDown, то ко второму числу просто добавлялась выделенная мышкой цифра столько раз сколько я нажимал Enter. а результат не выводился.
Так что думаю здесь не с кнопкой 'очистить' а с Enter надо что-то придумать. Всё таки удобно для вывода результата нажимать на Enter.
Игорь Шевченко (2011-06-15 13:15:00) [6]
> потому что в Memo не срабатывала клавиша Enter (аналог клавиши
> '=')
WantReturns = false
Германн (2011-06-15 02:19:00) [7]
> Это не с кнопкой Enter интересный результат, это с клавишей
> Del такая дурная работа.
>
Точнее с той кнопкой "калькулятора" которая "очистить".
Германн (2011-06-15 01:19:00) [8]
> А вот с кнопкой Enter очень интересный получается результат.
Это не с кнопкой Enter интересный результат, это с клавишей Del такая дурная работа.
And7 (2011-06-15 01:06:00) [9]Со скролбаром всё понятно.Спасибо. А вот с кнопкой Enter очень интересный получается результат. Перепробовал разные коды для клавиши Enter: #13, OnkeyDown. Но почему-то лучше всего сработал вот этот код:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then Button15.Click; //нажатие на физ.кл. Enter запускает нажатие на '=' кнопки калькулятора.
end;
Причём не имеет значения выводится ли результат в Edit или в Memo (с или без скролбара)-везде работает одинаково.
Но вот что интересное получается.В калькуляторе есть клавиша 'очистить'которая равнозначна физической клавише Del на компьютере.
Нажатие Del запускает такой код:
if key=#46 then Button17.Click; //кнопка очищения клавиша Delete
Далее.
Вариант-1: Делаю вычисление.Нажимаю физ.кл.'Enter' или '=' -появляется результат.Далее нажимаю на физ.клавишу 'Del' всё очищается.Далее опять делаю вычисление.Нажимаю физ.кл.'Enter' или '='-появляется результат.
Вариант-2: Делаю вычисление.Нажимаю физ.кл.'Enter'-появляется результат.Далее нажимаю на клавишу 'очистить' в калькуляторе. всё очищается.Далее опять делаю вычисление.Нажимаю Enter-вместо результата всё очищается (а для того чтобы появился результат в этом случае надо нажать на физ. клавиши Shift+Enter или '=').И далее какие бы вычисления ни делал для вывода результата в этом случае надо нажимать Shift+Enter или '=' но до тех пор пока не нажму на любую (кроме 'очистить') из кнопок в калькуляторе (тогда опять результат могу выводить нажатием на 'Enter').
Тут либо думаю надо в кнопке 'очистить' изменить какие то свойства. Либо вообще зделать её невидимой и просто нажимать на физ.клавишу Del либо на соседнюю кнопку (if key=#08 then Button22.Click; //кн. удаление последнего введённого символа(Beckspace)-работает без проблем,дописав в неё(Button22) возможность сразу полного очищения при определённых условиях.
Так вот возможно ли так изменить свойства кнопки 'очистить' чтобы после её нажатия на калькуляторе и следуещем вычислении для вывода результата работала физ.кл.'Enter' (а не Shift+Enter)?
И если знаете, то каким образом это можно cделать?
sniknik (2011-06-14 08:08:00) [10]> Так вот в Memo символ #13 то есть Enter не срабатывает.
KeyDown ?
Anatoly Podgoretsky (2011-06-14 07:42:00) [11]Не нужен "Skrollbar"
And7 (2011-06-14 02:43:00) [12]Раньше было TMemo.И там была горизонтальная прокрутка.Но я заменил Memo на Edit потому что в Memo не срабатывала клавиша Enter (аналог клавиши '=')
Когда клавишу Enter я нажимаю на компьютере то срабатывает такой код:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if (key='=')or (key=#13)then Button15.Click; // нажатие клавиши '='
end;
Так вот в Memo символ #13 то есть Enter не срабатывает. А как заменил на Edit, то Enter заработал.
Пробовал вместо #13 вписать $0D или VK_RETURN .Ничего не работает.
А когда поставил Edit - заработало.
Тут либо ставить скролл для Edit либо что-то придумать с Enter.
Германн (2011-06-14 02:17:00) [13]Заменить TEdit на TMemo - раз плюнуть!
Оба компонента суть одно и тоже.