Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];

Вниз

Курсорные клавиши в 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 вся ветка

Форум: "KOL";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.004 c
2-1240321320
Franzy
2009-04-21 17:42
2009.06.07
Как узнать, какие библиотеки (dll) использует программа?


2-1239854707
Чипырик
2009-04-16 08:05
2009.06.07
OpenPictureDialog.InitialDir


15-1238776244
Pavia
2009-04-03 20:30
2009.06.07
Конвертация кодировок.


2-1240321156
Toha
2009-04-21 17:39
2009.06.07
Анализ имени файла на коректность


15-1236792104
Сергей М.
2009-03-11 20:21
2009.06.07
О цифровых пиано





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский