![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Курсорные клавиши в Memo на форме внутри dll [Delphi, Windows]
Dmitry___ © (2007-04-12 12:23:00)Привет. Что-то не пойму: почему курсорные клавиши нормально перемещают курсор в Memo, когда Memo лежит на форме приложения, и не работают, когда Memo лежит на форме dll. Т.е. работают только клавиши вверх-вниз, а влево-вправо не обрабатываются, даже обработчик OnKeyDown не вызывается. В чём тут дело?
(2008-01-28 18:01:00) [1]Удалено модератором
(2008-01-21 00:24:00) [2]Удалено модератором
(2008-01-10 19:18:00) [3]Удалено модератором
(2007-12-25 02:36:00) [4]Удалено модератором
(2007-12-12 18:10:00) [5]Удалено модератором
(2007-12-12 11:34:00) [6]Удалено модератором
(2007-12-12 04:10:00) [7]Удалено модератором
Golem (2007-11-30 20:35:00) [8]Удалено модератором
Dawn-yi (2007-11-27 10:46:00) [9]Удалено модератором
(2007-10-03 11:50:00) [10]Удалено модератором
(2007-08-08 20:33:00) [11]Удалено модератором
Alex3 (2007-04-16 14:23:00) [12]OK!
Dmitry___ (2007-04-15 23:58:00) [13]
> я решал подобную проблему средствами АПИ
Ух ты! А не поделишься рецептом на мыло, али прямо тут? Мне тоже хоца сделать это на апи, ой как хоца!
За подсказку спасибо, гляну...
alex3 (2007-04-15 23:02:00) [14]===К чему бы это, мой краснокожий брат?
Вопрос поднимался и раньше, я решал подобную проблему средствами АПИ.
А заглянуть в кол, никто не хочет.
alex3 (2007-04-15 22:53:00) [15]Тут у нас, все нормально?
function TControl.GetBoundsRect: TRect;
var W: PControl;
P: TPoint;
begin
Result := fBoundsRect;
if fHandle <> 0 then
begin
GetWindowRect( fHandle, Result );
if fIsControl or fIsMDIChild then
begin
W := fParent; // WindowedParent;
if W <> nil then
begin
P.x := 0; P.y := 0;
P := W.Client2Screen( P );
OffsetRect( Result, -P.x, -P.y );
end;
end;
fBoundsRect := Result;
end;
end;
Какое отношение имеет " W := fParent; // WindowedParent;", к новому, чужому, паренту?
И зачем нам "P := W.Client2Screen( P );", координаты старого?
Не в этом ли причина?
Dmitry___ (2007-04-15 22:17:00) [16]
> Бледнолицые любят наступать на грабли! Причем многократно.
К чему бы это, мой краснокожий брат?
alex3 (2007-04-15 22:05:00) [17]Бледнолицые любят наступать на грабли! Причем многократно.
Dmitry___ (2007-04-15 18:37:00) [18]
> а какая имеено, как в КОЛ или АПИ?
Она одна и та же - что в KOL, что в API не работают стрелочки.
> если форма из dll вызвана модально
Нет, там у меня форма рисуется на канве проги, т.е. прога сама вызывает из плагина процедуру, которая сама создаёт окно и прицепляет к родительскому с помощью SetParent. Окно встраивается в программу (а именно так все плагины и работают в этой программе). Затем регулярно вызывает процедуру Draw из плагина, которая перерисовывает окошко.
Vladimir Kladov (2007-04-15 18:28:00) [19]Или хот-кеями, вот. Но это по меньшей мере странно, сажать хот-кей на стрелки влево-вправо. Хотя чего в жизни не бывает.
Кстати, обратно хот-кей "отбить" можно как раз хуками. Т.к. в пределах одного приложения, то отдельная dll и глобальный хук не нужен, достаточно в пределах опять же приложения. В хуке можно замещать message на свой, при ловле в своем цикле снова возвращать его в правильное значение.
Vladimir Kladov (2007-04-15 18:19:00) [20]Вообще-то, если форма из dll вызвана модально, то нужно ОЧЕНЬ постараться, чтобы перехватить сообщения из того цикла обработки сообщений, который запущен в dll. Даже сразу и не придумаешь, как такое СПЕЦИАЛЬНО устроить. Разве что хуками.