Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Помощь по среде"
Ответов: 75
Рейтинг: 2
#1: 2017-09-16 15:09:44 ЛС | профиль | цитата
Уважаемые знатоки! Вопрос. Почему у кнопки нет события onEnter ? На пробел оно есть, на Enter - нет. И возможно ли прикрутить такую точку? Я попробовал освоить Паскаль, но не помогло( Там тоже просто Button. Заранее извиняюсь, если дело было не в бобине...
карма: 2

0
vip
#1.1контекстная реклама от партнеров
Ответов: 1376
Рейтинг: 197
#2: 2017-09-16 15:27:45 ЛС | профиль | цитата
Так можно...


Add(MainForm,2953706,217,182)
{
Width=194
Height=92
}
Add(Button,15430286,98,182)
{
Left=8
Top=24
Width=160
Height=22
WinStyle=2
Caption="Вдавить!"
Data=String(Button)
Point(onKeyDown)
link(onClick,7520256:doWork2,[])
link(onKeyDown,15153431:doCase,[])
}
Add(HubEx,7520256,196,182)
{
link(onEvent,2953706:doCaption,[])
}
Add(Case,15153431,147,189)
{
Value=Integer(13)
DataOnTrue=String(Enter)
link(onTrue,7520256:doWork3,[(200,202)])
}
карма: 1

0
Ответов: 75
Рейтинг: 2
#3: 2017-09-16 20:13:05 ЛС | профиль | цитата
Это да, я примерно так и пользую. Через onKeyDown. Только неудобно, лишние элементы. Во всех стандартных приложениях нажатие Enter равнозначно щелчку мышкой. Если элемент в фокусе. А в Button, почему-то, пробел, а не Enter. Поэтому и вопрос, нельзя ли приклеить точечку onEnter. Ведь есть она в Edit.
карма: 2

0
Ответов: 1925
Рейтинг: 172
#4: 2017-09-16 20:32:58 ЛС | профиль | цитата
Почему-то ALL_BUTTONS_RESPOND_TO_ENTER работать не хочет, хотя есть в KOL.

Вот так определяю:
procedure THIButton.Init;
begin
{$DEFINE ALL_BUTTONS_RESPOND_TO_ENTER}
Control := NewButton(FParent,_prop_Caption);
Control.OnClick := _OnClick;
Control.DefaultBtn := _prop_DefaultBtn;
Control.Style := Control.Style or BS_MULTILINE;
inherited;
end;

И бесполезно. Знатоки, в чём тут дело?

--- Добавлено в 2017-09-16 20:45:28

Tri-j, для вас: у кнопки есть св-во DefaulBtn, с которым она реагирует на Enter. Но это кнопка "по-умолчанию", и она может быть только одна на форме. Если вас это интересует - пользуйтесь.

Редактировалось 2 раз(а), последний 2017-09-16 20:45:28
карма: 9
0
Разработчик
Ответов: 26061
Рейтинг: 2120
#5: 2017-09-16 21:19:41 ЛС | профиль | цитата
3042 писал(а):
Знатоки, в чём тут дело?

Я вот лично ХЗ почему?
Проще это безобразие свойством вывести.

Редактировалось 2 раз(а), последний 2017-09-16 21:35:33
карма: 22

0
Ответов: 9906
Рейтинг: 351
#6: 2017-09-16 21:33:09 ЛС | профиль | цитата
nesco писал(а):
Я вот лично ХЗ почему?
А я вот, лично, даже и не знаю - почему это должно "хотеть работать"?
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#7: 2017-09-16 21:36:53 ЛС | профиль | цитата
Galkov писал(а):
А я вот, лично, даже и не знаю - почему это должно "хотеть работать"?

Вроде директива, в таком применении, распространяется только на данный юнит. Так вроде?
карма: 22

0
Ответов: 75
Рейтинг: 2
#8: 2017-09-17 11:59:52 ЛС | профиль | цитата
3042, не помогает почему-то. Всё равно событие даёт только на щелчок или пробел.

Add(MainForm,2953706,196,119)
{
Left=300
Top=200
Width=950
Height=400
Caption="Электронный диктант"
}
Add(Label,5245145,259,63)
{
Left=315
Top=20
Width=253
Height=30
Font=[Times New Roman,14,3,16711680,204]
Caption="Электронный диктант"
}
Add(Label,6695417,265,67)
{
Left=240
Top=125
Width=401
Height=30
Font=[Times New Roman,14,3,16711680,204]
Caption="Выберите файл с текстом диктанта"
}
Add(Button,11815107,266,119)
{
Left=395
Top=205
Width=110
Height=45
Font=[Times New Roman,12,1,0,204]
Caption="ОК"
DefaultBtn=0
link(onClick,4607799:doWork1,[])
}
Add(ChildForm,4607799,336,119)
{
}
BEGIN_SDK
Add(EditMulti,8708439,21,21)
{
WorkCount=1
Width=433
Height=361
link(doWork1,10767367:doShowModal,[(95,27)(95,139)])
}
Add(MainForm,10767367,168,105)
{
Left=300
Top=200
Width=950
Height=400
Visible=1
Caption="Электронный диктант"
Point(doShowModal)
Point(onShow)
link(onShow,9851688:doEvent1,[])
}
Add(Memory,15072473,301,126)
{
link(onData,8008630:doLoad,[(349,132)(349,160)])
}
Add(ODialog,809875,245,126)
{
Filter="Текстовые файлы|*.txt"
Title="Открытие файла"
link(onExecute,15072473:doValue,[])
}
Add(Button,15285802,266,210)
{
Left=75
Top=250
Width=110
Height=45
Font=[Times New Roman,12,1,0,204]
Caption="СТАРТ"
DefaultBtn=0
Point(doSetFocus)
Point(onKeyDown)
}
Add(Button,16422171,266,245)
{
Left=410
Top=250
Width=110
Height=45
Font=[Times New Roman,12,1,0,204]
Caption="ДАЛЬШЕ"
}
Add(Button,16251254,266,280)
{
Left=730
Top=250
Width=110
Height=45
Font=[Times New Roman,12,1,0,204]
Caption="СТОП"
}
Add(Label,15005550,112,42)
{
Left=20
Top=10
Width=183
Height=23
Font=[Times New Roman,10,1,0,204]
Caption="Интервал (в секундах):"
}
Add(Edit,4384330,175,203)
{
Left=215
Top=10
Height=23
Font=[Times New Roman,10,0,0,204]
Text="3"
Alignment=2
ClearAfterEnter=1
link(onEnter,6976567:doWork2,[])
}
Add(Hub,9851688,210,126)
{
link(onEvent1,809875:doExecute,[])
link(onEvent2,6976567:doWork1,[(235,139)])
}
Add(HubEx,6976567,231,210)
{
link(onEvent,15285802:doSetFocus,[])
}
Add(StrList,8008630,364,126)
{
link(FileName,15072473:Value,[(377,114)(342,114)(342,170)(307,170)])
}
END_SDK

карма: 2

0
Ответов: 9906
Рейтинг: 351
#9: 2017-09-17 12:46:29 ЛС | профиль | цитата
Tri-j писал(а):
не помогает

Исходя из этого:
    property DefaultBtn: Boolean index 13
{$IFDEF F_P} read GetDefaultBtn
{$ELSE DELPHI} read fDefaultBtn
{$ENDIF F_P/DELPHI} write SetDefaultBtn;
{* |<#button>
|<#bitbtn>
Set this property to true to make control clicked when ENTER key is pressed.
This property uses OnMessage event of the parent form, storing it into
fOldOnMessage field and calling in chain. So, assign default button
after setting OnMessage event for the form. }
Надо делать по другому, вроде бы:
procedure THIButton.Init;
begin
Control := NewButton(FParent,_prop_Caption);
Control.OnClick := _OnClick;
// Control.DefaultBtn := _prop_DefaultBtn;
Control.Style := Control.Style or BS_MULTILINE;
inherited;
if _prop_DefaultBtn then Control.DefaultBtn := true; // moved down by Galkov...
end;

Но я не очень-то и проверял... А почему нет CancelBtn, если есть DefaultBtn - вообще не знаю...

Редактировалось 4 раз(а), последний 2017-09-17 13:10:04
карма: 9

1
Голосовали:3042
Разработчик
Ответов: 26061
Рейтинг: 2120
#10: 2017-09-17 13:43:09 ЛС | профиль | цитата
Galkov писал(а):
Но я не очень-то и проверял...

Да вроде работает.

Хотел спросить -- стоит ли сделать поддержку отклика на Enter для всех клавиш. Те перевести ALL_BUTTONS_RESPOND_TO_ENTER в компонент и вывести это безобразие свойством, к примеру, RespondToEnter?
карма: 22

0
Ответов: 9906
Рейтинг: 351
#11: 2017-09-17 13:57:04 ЛС | профиль | цитата
nesco писал(а):
Те перевести ALL_BUTTONS_RESPOND_TO_ENTER в компонент и вывести это безобразие свойством, к примеру, RespondToEnter?

Блин...
Вы чего все, с горы упали. Что ли...
В какое место ты собрался засунуть ALL_BUTTONS_RESPOND_TO_ENTER, спрашивается.
Результат будет, если его засунуть в KOL. Или его инклуды, что одно и то же.
И после этого, этот KOL - перекомпилировать.

Это называется пониманием, что такое компиляция. Всего лишь. В принципе, а не только в Дельфи...
Коллеги, это самые-самые основы. Повторюсь: САМЫЕ-САМЫЕ. Еще ДО выбора, с каким языком ты будешь работать.
Без которых и коды-то отрывать противопоказано.
Ну блин . . . . . . . . . . . . . . . . . . . . . . . . . . . .



--- Добавлено в 2017-09-17 13:57:58
BTW

Добавить CancelBtn можно примерно так:

  1. изменить одну строку в INI:
    DefaultBtn=Определяет кнопку по-умолчанию|4|1|True,False,Cancel
  2. изменить пару строк в PAS:
     THIButton = class(THIWin)
    ................
    _prop_DefaultBtn:byte; // изменен тип с boolean на byte
    ................
    end;

    implementation

    procedure THIButton.Init;
    begin
    Control := NewButton(FParent,_prop_Caption);
    Control.OnClick := _OnClick;
    // Control.DefaultBtn := _prop_DefaultBtn;
    Control.Style := Control.Style or BS_MULTILINE;
    inherited;
    Case _prop_DefaultBtn of
    0: Control.DefaultBtn := true;
    2: Control.CancelBtn := true;
    end;
    end;


Редактировалось 6 раз(а), последний 2017-09-17 14:03:32
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#12: 2017-09-17 14:00:06 ЛС | профиль | цитата
Galkov писал(а):
В какое место ты собрался засунуть ALL_BUTTONS_RESPOND_TO_ENTER

Весь код импортировать в компонент (у меня это уже сделано, там кода кот наплакал), а не пытаться засунуть чужую директиву.

Редактировалось 1 раз(а), последний 2017-09-17 14:01:20
карма: 22

0
Ответов: 1925
Рейтинг: 172
#13: 2017-09-18 09:10:42 ЛС | профиль | цитата
Tri-j писал(а):
3042, не помогает почему-то. Всё равно событие даёт только на щелчок или пробел.


И правда! Если на дочке установлена кнопка с DefaultBtn=false, то на главной кнопка с DefaultBtn=true на Enter не реагирует!
UPD: у меня немного другой KOL: VERSION 1.93, pas-файл. Ставил, чтобы редактировать. С оригинальным KOL.dcu действительно работает.
Какая версия hiasm, Tri-j?

--- Добавлено в 2017-09-18 09:13:41

Galkov писал(а):
Исходя из этого:
Надо делать по другому, вроде бы:

А с правкой от Galkova - работает! nesco, пора менять этот кусок кода!

--- Добавлено в 2017-09-18 09:15:49

Galkov писал(а):
Добавить CancelBtn можно примерно так:

Тоже хорошая идея, будет полезно.

nesco писал(а):
Хотел спросить -- стоит ли сделать поддержку отклика на Enter для всех клавиш. Те перевести ALL_BUTTONS_RESPOND_TO_ENTER в компонент и вывести это безобразие свойством, к примеру, RespondToEnter?

Однозначно - стоит

--- Добавлено в 2017-09-18 09:17:08

оффтоп
Ух, сколько идей хороших сразу появилось! Прям радостно становится, что есть ещё порох в пороховницах.

Редактировалось 4 раз(а), последний 2017-09-18 09:21:44
карма: 9
0
Ответов: 8886
Рейтинг: 823
#14: 2017-09-18 10:26:14 ЛС | профиль | цитата
3042 писал(а):
..есть ещё порох в пороховницах..
Эх, блин, а тут один песок остался!
карма: 19

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#15: 2017-09-18 11:16:51 ЛС | профиль | цитата
3042 писал(а):
Однозначно - стоит

Я еще подумаю.
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)