Текущий архив: 2009.05.10;
Скачать: CL | DM;
Вниз
Не работает Tab в форме Найти похожие ветки
← →
Alex_Y (2009-03-26 12:24) [0]Привет всем.
Столкнулся со следующим:
В dll создаю форму
function ShowInfoDialog(const App : HWND) : HWND; stdCall;
begin
Result := 0;
Application.Handle := App;
with TfmInfo.Create(Application) do
try
Result := Handle;
Show;
except on E: Exception do begin
MessageBox(Application.Handle, pChar(E.Message), MSG_ERROR, MB_OK);
Free;
end; end;
end;
На форме несколько едитов.
Вызываю из другого приложения. Все нормально открывается, работает как надо, но не работают клавиши Tab, Esc и пр., только бип звучит что типа нажатие недоступно.
Хотя если вместо Show сделать ShowModal, то все прекрасно работает.
Мож кто сталкивался? Где я чего мог пропустить, а то голова уже не варит под вечер.
Заранее спасибо.
← →
Сергей М. © (2009-03-26 12:37) [1]
> Где я чего мог пропустить
Чужое приложение попросту знать ничего не знает о том как обрабатывать WM_TAB в твоей форме
← →
Alex_Y (2009-03-26 12:40) [2]а это решаемо?
← →
Сергей М. © (2009-03-26 12:45) [3]Решаемо, но искл-но ректальным способом
← →
Alex_Y (2009-03-26 12:56) [4]например?
← →
Сергей М. © (2009-03-26 13:19) [5]Не надо решать задачу через задний проход.
Вопрос тебе на засыпку: хендл какого окна ты ожидаешь получать параметром в свой ф-ции, если она будет вызвана, например, из приложения, разработанного в среде Visual Suahili ?
← →
clickmaker © (2009-03-26 13:21) [6]> Хотя если вместо Show сделать ShowModal, то все прекрасно
> работает.
ShowModal запускает отдельный цикл обработки сообщений, независимый от основного. Поэтому и работает.
← →
Alex_Y (2009-03-26 13:28) [7]Сергей М.
функция вызывается из конкретного приложения, приходит HWND этого приложения. приложение левое, со своим метаязыком из которого и вызываю
← →
Alex_Y (2009-03-26 13:31) [8]в принципе я оттуда могу даже интерфейс передать (что и делаю) но для данной проблемы это не поможет
← →
Сергей М. © (2009-03-26 13:33) [9]
> приходит HWND этого приложения
Приложения может не создавать ни единого окна, равно как может создавать множество окон, да еще и в разных кодовых потоках.
Так я и задаю вопрос : хэндл какого из окон тебе передает это самое "конкретное левое приложение" ? Или ему фиолетово какой передавать ? Или тебе фиолетово какой ожидать ?
← →
Сергей М. © (2009-03-26 13:35) [10]
> я оттуда могу даже интерфейс передать
Не понял, откуда куда "можешь" и что за интерфейс ?
← →
Alex_Y (2009-03-26 13:36) [11]этого приложения
← →
Сергей М. © (2009-03-26 13:37) [12]
> этого приложения
Чего "этого приложения" ?
← →
Alex_Y (2009-03-26 13:38) [13]идея в чем - есть сторонне приложение, в нем свой макроязык, на этом языке из этого приложения вызываю функию показа моего окна из моей длл.
в мою lkk передаю хэндл этого приложения
← →
Сергей М. © (2009-03-26 13:57) [14]
> в мою lkk передаю хэндл этого приложения
У приложения нет хэндла.
Требуемый в твоей lkk хэндл есть хэндл окна. И не просто какого-то там окна. а некоего "главного окна".
← →
Alex_Y (2009-03-26 14:03) [15]да, так и есть, я это прекрасно понимаю, только чего делать-то?
← →
Сергей М. © (2009-03-26 14:13) [16]Подменять оконную ф-цию переданного окна на свою.
Это и будет ректальным способом)
← →
Alex_Y (2009-03-26 14:21) [17]а как это сделать, если не секрет?
← →
Сергей М. © (2009-03-26 14:22) [18]см. SetWindowLong
← →
Alex_Y (2009-03-26 14:30) [19]понятно, будем пробовать, спасибо за подсказку
Страницы: 1 вся ветка
Текущий архив: 2009.05.10;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.007 c