Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Курсорные клавиши в Memo на форме внутри dll [Delphi, Windows]


Страницы:   1 2

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. Даже сразу и не придумаешь, как такое СПЕЦИАЛЬНО устроить. Разве что хуками.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо