Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.02;
Скачать: CL | DM;

Вниз

Edit и Skrollbar   Найти похожие ветки 

 
And7 ©   (2011-06-14 01:55) [0]

Делаю калькулятор. В 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;

Если возможно - подскажите.


 
Германн ©   (2011-06-14 02:17) [1]

Заменить TEdit на TMemo - раз плюнуть!
Оба компонента суть одно и тоже.


 
And7 ©   (2011-06-14 02:43) [2]

Раньше было 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.


 
Anatoly Podgoretsky ©   (2011-06-14 07:42) [3]

Не нужен "Skrollbar"


 
sniknik ©   (2011-06-14 08:08) [4]

> Так вот в Memo символ #13 то есть Enter не срабатывает.
KeyDown ?


 
And7 ©   (2011-06-15 01:06) [5]

Со скролбаром всё понятно.Спасибо. А вот с кнопкой 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делать?


 
Германн ©   (2011-06-15 01:19) [6]


> А вот с кнопкой Enter очень интересный получается результат.

Это не с кнопкой Enter интересный результат, это с клавишей Del такая дурная работа.


 
Германн ©   (2011-06-15 02:19) [7]


> Это не с кнопкой Enter интересный результат, это с клавишей
> Del такая дурная работа.
>

Точнее с той кнопкой "калькулятора" которая "очистить".


 
Игорь Шевченко ©   (2011-06-15 13:15) [8]


> потому что в Memo не срабатывала клавиша Enter (аналог клавиши
> "=")


WantReturns = false


 
And7 ©   (2011-06-15 19:43) [9]

Спасибо. Поставил в 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.


 
And7 ©   (2011-06-15 20:30) [10]

Если вместо:

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 21:03) [11]

Причём этот код для физ.клавиши "="  работает точно без глюков.Ничего не добавляет. Выводит чистый результат.

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
if  key="="then Button15.Click;

Но вот как нормально задействовать ещё и  Enter ?


 
And7 ©   (2011-06-17 03:07) [12]

Отошёл от названия темы (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-17 03:09) [13]

вернее

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=VK_RETURN then SpeedButton15.Click;  // и это работает - выводит     правильный результат



Страницы: 1 вся ветка

Текущий архив: 2011.10.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.008 c
15-1307430272
RGV
2011-06-07 11:04
2011.10.02
Актуальность Delphi.


2-1307627912
Сергей
2011-06-09 17:58
2011.10.02
Автообновление программы - Windows 7 ругается на "обновлятор"


2-1308038648
FIL-23
2011-06-14 12:04
2011.10.02
Бегуший текст в кнопке


2-1308084530
nord13579
2011-06-15 00:48
2011.10.02
GSM-шлюз на Huawei E1550 и voice модеме - проблемы с передачей зв


2-1308015939
vasja666
2011-06-14 05:45
2011.10.02
sql запрос дата