Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#1: 2014-07-12 15:47:13 ЛС | профиль | цитата
Слушай, nesco, надоело мне шаманить со своими кодами....
Обновишь чего-нибудь, а через месяц поймаешь...

Предложение КОНКРЕТНО такое:

1) В INI-файлах убрать св-во KeyPreview из MainForm и SimpleForm. Убрать метод doKeyBack из MainForm, SimpleForm и Memo. И поместить их (особаченное свойство KeyPreview и метод doKeyBack) в файлы WinControl.INI и SimpleWinControl.INI.

2) В кодах - убрать из Memo реализацию _work_doKeyBack. За ненадобностью.

Все абсолютно просто, и безобидно. И сто раз проверено.
карма: 9

1
Голосовали:Tad
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 26061
Рейтинг: 2120
#2: 2014-07-13 02:05:37 ЛС | профиль | цитата
Galkov, а можно хоть какой-то тестовый примерчик, чтобы проверить правильность переноса
карма: 22

0
Ответов: 9906
Рейтинг: 351
#3: 2014-07-13 09:06:02 ЛС | профиль | цитата
А что проверять-то ты хочешь, nesco

Если КОД НЕ МЕНЯЕТСЯ. ВАБЩЕ.
Весь функционал, как уже сказано, сделан сто лет назад. Еще ДО появления поля Inherit в INI-файлах.
Расположен в Win.pas
И во всех контролах активно работает. Потому-что, даже если пользователю не дали (шаманством в INI файлах) изменить KeyPreview -- так он устанавливается в TRUE в конструкторе (Win) по дефолту.

А до внедрения этого функционала (вроде, ты должен помнить), события onKeyDown на MainForm не возникали, если один из дочерних контролов оказывался в фокусе.

Я же тебе говорю, что если KeyPreview работает в MainForm - значит будет работать и в других контролах.
Если doKeyBack работает в Memo - значит, ровно также, будет работать во всех остальных.
Ошибок компиляции же нет.

И ничего никуда не переносится - оно с самого зарождения там стоит. Просто, правильно было бы - разрешить пользоваться функционалом, который есть.
Без рукосуйства

Существо предложения в этом и состоит: убрать необходимость рукосуйства, коль скоро потребуется этот функционал. И при этом:
Все абсолютно просто, и безобидно. И сто раз проверено.


------------ Дoбавленo в 09.06:
Ну, и если честно, само свойство KeyPreview предназначено было (мною) не для того, чтобы запретить owner-у перехватывать клавиатуру дочерней формы (MainForm.KeyPreview=False).
А для того, чтобы на форме (или панели) можно было перехватить/запретить клавиши с трех Edit-ов, а с Memo -- не перехватывать.
На этих трех Edit-ах KeyPreview=True, а на Memo - KeyPreview=False.
К примеру, конечно же.

И что в проверке-то - и не нуждается. Сто раз проверено...
карма: 9

1
Голосовали:Konst
Разработчик
Ответов: 26061
Рейтинг: 2120
#4: 2014-07-14 13:39:28 ЛС | профиль | цитата
Перенес
карма: 22

0
Ответов: 9906
Рейтинг: 351
#5: 2014-07-14 18:25:26 ЛС | профиль | цитата
УРА

------------ Дoбавленo в 18.25:
Ну вот... Мелочь, а приятно
Add(Edit,12199166,336,112)
{
Top=50
Width=555
Height=23
Align=4
Font=[Lucida Console,12,1,0,204]
Text="min(arccos(1/2^.5), %1+%2, %1-%2)"
ClearAfterEnter=1
Point(doSelectAll)
Point(doKeyBack)
Point(onKeyDown)
link(onKeyDown,1898297:doCheckMask,[])
}
Add(KeyMask,1898297,385,126)
{
@Hint=#6:Ctrl+A|
Ctrl=1
Key=65
link(onTrue,5060688:doEvent1,[(424,139)(424,167)(298,167)(298,132)])
AddHint(-10,-28,43,13,@Hint)
}
Add(Hub,5060688,308,126)
{
link(onEvent1,12199166:doSelectAll,[])
link(onEvent2,12199166:doKeyBack,[])
}
При этом, без doKeyBack -- окно подмигивает (у меня, по крайней мере - под XP)

И все это - "без единой строчки кода"
карма: 9

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