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

Вниз

Курсорные клавиши в Memo на форме внутри dll   Найти похожие ветки 

 
Dmitry___   (2007-04-12 12:23) [0]

Привет. Что-то не пойму: почему курсорные клавиши нормально перемещают курсор в Memo, когда  Memo лежит на форме приложения, и не работают, когда Memo лежит на форме dll. Т.е. работают только клавиши вверх-вниз, а влево-вправо не обрабатываются, даже обработчик OnKeyDown не вызывается. В чём тут дело?


 
Dmitry___   (2007-04-13 14:56) [1]

Ау!

Моржет, кто-то знает решение?


 
Dmitry___   (2007-04-13 14:56) [2]

Ау!

Может, кто-то знает решение?


 
mdw ©   (2007-04-13 17:54) [3]

И не только мемо, но едит и т.д., и не только влево-вправо, но и таб. Если только Владимир не поленится разобраться с этим. Я в свое время ковырялся, но не к чему так и не пришел.


 
Dmitry___   (2007-04-13 18:27) [4]

Да, mdw, совершенно верно. Такая проблема имела место, когда я писал плагин на чистом WinAPI. Тогда я копал в цикле обработки сообщений, но ничего не добился.

Владимир, помогите нам пожалуйста!


 
Vladimir Kladov   (2007-04-13 21:38) [5]

Состряпайте минимальный пример VCL-приложение + memo в dll, как оно по-вашему будет. или достаточно бросить memo на тот пример, что есть в demo?


 
Dmitry___   (2007-04-13 22:31) [6]

ОК, Владимир, сейчас сделаю примерчик


 
Dmitry___   (2007-04-13 23:35) [7]

Так-так, выяснилились кое-какие подробности. В моём VCL-демо всё работает как надо... А в программе, для которой предназначена моя dll, возникает такая вот дурацкая проблема. Программа написана на сях. Именно в ней и проявляется эта бага с курсорными клавишами. Причём, в VCL-вариантах тех же плагинов, всё работает!

Хорошо, ставим вопрос по другому. Кто знает\подозревает\догадывается, где тут лежат грабли? Может, и г.mdw выскажется по этому поводу? Что-то я не понимаю...


 
Vladimir Kladov   (2007-04-14 08:46) [8]

Я открыл DemoModalVCLapp2KOLdll, бросил Memo, запустил. Все стрелки работают.


 
mdw ©   (2007-04-14 10:15) [9]

У меня была проблема со стрелками, когда KOL Panel c контролами из DLL встраивалась в VCL форму. Я так понял что проблема в конфликте двух обработчиках: Application и Applet. Правда почему вверх-вниз работают, а влево-вправо нет??
Я тогда решил проблему использованием VCL:)).


 
Dmitry___   (2007-04-14 12:09) [10]

Блин, что же делать? Не охота как-то переделывать под VCL :( Плагин всего в пару сотен строк кода, и на KOL выходит 18 кб всего с упаковкой, а VCL раздует до 150 как минимум, и то с upx-ом... Ладно, решение буду искать по-тихоньку


 
Vladimir Kladov   (2007-04-14 12:47) [11]

Наверное, вы не очень внимательно прочитали, что я написал. У вас просто что-то расходится с демой, причем существенно.


 
Dmitry___   (2007-04-15 17:32) [12]

Да нет, Владимир, я всё понял. Но дело не в этом. Я же делаю связку VCL+DLL с нуля, и всё работает. Потом гружу только что созданный и проверенный плагин в программу, для которой он предназначен, и всё возвращается к тому, с чего начали - клавиши влево-вправо не работают. Я подозреваю, что дело тут в обработке сообщений с клавиатуры, которую выполняет программа, под которой работает длл-ка. Видимо, эти сообщения уходят куда-то налево. С другой стороны, такой же плагин, написанный на VCL, работает как положено. Такая же ситуация наблюдалась, когда я писал плагин на api, я так и не понял, почему сообщения не доходят. Их просто нет, и всё. Не понимаю...
Это я не к тому, что виноват KOL, вовсе нет, просто такая трабла уже достала порядком...


 
homm ©   (2007-04-15 17:48) [13]

> Такая же ситуация наблюдалась, когда я писал плагин на api

а какая имеено, как в КОЛ или АПИ?


 
Vladimir Kladov   (2007-04-15 18:19) [14]

Вообще-то, если форма из dll вызвана модально, то нужно ОЧЕНЬ постараться, чтобы перехватить сообщения из того цикла обработки сообщений, который запущен в dll. Даже сразу и не придумаешь, как такое СПЕЦИАЛЬНО устроить. Разве что хуками.


 
Vladimir Kladov   (2007-04-15 18:28) [15]

Или хот-кеями, вот. Но это по меньшей мере странно, сажать хот-кей на стрелки влево-вправо. Хотя чего в жизни не бывает.

Кстати, обратно хот-кей "отбить" можно как раз хуками. Т.к. в пределах одного приложения, то отдельная dll и глобальный хук не нужен, достаточно в пределах опять же приложения. В хуке можно замещать message на свой, при ловле в своем цикле снова возвращать его в правильное значение.


 
Dmitry___   (2007-04-15 18:37) [16]


> а какая имеено, как в КОЛ или АПИ?

Она одна и та же - что в KOL, что в API не работают стрелочки.

> если форма из dll вызвана модально

Нет, там у меня форма рисуется на канве проги, т.е. прога сама вызывает из плагина процедуру, которая сама создаёт окно и прицепляет к родительскому с помощью SetParent. Окно встраивается в программу (а именно так все плагины и работают в этой программе). Затем регулярно вызывает процедуру Draw из плагина, которая перерисовывает окошко.


 
alex3   (2007-04-15 22:05) [17]

Бледнолицые любят наступать на грабли! Причем многократно.


 
Dmitry___   (2007-04-15 22:17) [18]


> Бледнолицые любят наступать на грабли! Причем многократно.

К чему бы это, мой краснокожий брат?


 
alex3   (2007-04-15 22:53) [19]

Тут у нас, все нормально?

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 );", координаты старого?
Не в этом ли причина?


 
alex3   (2007-04-15 23:02) [20]

===К чему бы это, мой краснокожий брат?
Вопрос поднимался и раньше, я решал подобную проблему средствами АПИ.
А заглянуть в кол, никто не хочет.


 
Dmitry___   (2007-04-15 23:58) [21]


> я решал подобную проблему средствами АПИ


Ух ты! А не поделишься рецептом на мыло, али прямо тут? Мне тоже хоца сделать это на апи, ой как хоца!

За подсказку спасибо, гляну...


 
Alex3   (2007-04-16 14:23) [22]

OK!


 
имя   (2007-08-08 20:33) [23]

Удалено модератором


 
имя   (2007-10-03 11:50) [24]

Удалено модератором


 
Dawn-yi   (2007-11-27 10:46) [25]

Удалено модератором


 
Golem   (2007-11-30 20:35) [26]

Удалено модератором


 
имя   (2007-12-12 04:10) [27]

Удалено модератором


 
имя   (2007-12-12 11:34) [28]

Удалено модератором


 
имя   (2007-12-12 18:10) [29]

Удалено модератором


 
имя   (2007-12-25 02:36) [30]

Удалено модератором


 
имя   (2008-01-10 19:18) [31]

Удалено модератором


 
имя   (2008-01-21 00:24) [32]

Удалено модератором


 
имя   (2008-01-28 18:01) [33]

Удалено модератором



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

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

Наверх




Память: 0.54 MB
Время: 0.011 c
2-1240403175
devidart
2009-04-22 16:26
2009.06.07
Сортировка таблици


15-1238740799
CaptainAlex
2009-04-03 10:39
2009.06.07
Outlook plugin


4-1210775223
re_qas
2008-05-14 18:27
2009.06.07
ADSI в DLL


15-1238736040
@!!ex
2009-04-03 09:20
2009.06.07
Как сделать счетчик скачивания файла?


15-1238588488
Кое кто
2009-04-01 16:21
2009.06.07
Интересная задача