Галактика и WinAPI

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
ExBallistik
Сообщения: 2
Зарегистрирован: 21 фев 2006, 14:06

Галактика и WinAPI

Сообщение ExBallistik »

доброго времени суток, всем!
подскажите, пожалуйста, как при помощи функций WinAPI заполнить текстовое поле(Edit) в дочернем окне Галактики? до окна добрался, фокус этому контролу передал, а вот текстом поле заполнить не получается. пробовал так:
SetWindowText(WndCh,PChar('Text')) и
PostMessage(WndCh,WM_SETTEXT,0,Integer(PChar('Text')));
ничего не вышло :(. возможно ли вообще это сделать ф-ми WinAPI? если да, то где ошибка? если нет, то как реализовать?
PS: я не программист Галактики, работаю с ней как с обычным приложением (не используя средства Атлантиса), поэтому попрошу отнестись к возможно глупому вопросу лояльно.
WiRuc
Местный житель
Сообщения: 414
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж

Сообщение WiRuc »

Записывать необходимый текст в Clipboard, устанавливать фокус на контрол и передавать сообщение WM_PASTE.
ExBallistik
Сообщения: 2
Зарегистрирован: 21 фев 2006, 14:06

Сообщение ExBallistik »

копирнул в Clipboard, окно открывается, фокус передается, но текст почему то не вставляется автоматом, а только после нажатия Shift+Ins :(. в чем дело? с блокнотом все работает отлично.
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Сообщение KATZ »

Будет работать, например, такой код на Си (hWnd - дескриптор EditBox-а, фокус ввода ему уже передан):

Код: Выделить всё

SendMessage(hWnd, EM_SETSEL, 0, -1);
SendMessage(hWnd, EM_REPLACESEL, FALSE, (LPARAM)pszNewText);
После этого в EditBox-е текст появится, но при смене позиции он не сохранится в таблице БД. Чтобы заставить "Галактику" думать, что текст введен с клавиатуры, к коду надо добавить еще несколько строк:

Код: Выделить всё

PostMessage(hWnd, WM_KEYDOWN, VK_SPACE, 0x00000001);
PostMessage(hWnd, WM_KEYUP, VK_SPACE, 0xC0000001);
PostMessage(hWnd, WM_KEYDOWN, VK_BACK, 0x00000001);
PostMessage(hWnd, WM_KEYUP, VK_BACK, 0xC0000001);
Если в тексте нет русских букв, то его можно даже целиком ввести, посылая на каждый символ пару сообщений WM_KEYDOWN + WM_KEYUP.
san
Местный житель
Сообщения: 412
Зарегистрирован: 28 апр 2005, 11:34
Откуда: Галактика Млечный Путь

Сообщение san »

еще вариант на делфи, wnd-дескриптор окна,s-записываемая строка:
procedure SetWND(wnd : longint;s:string);
var buf:array[0..255]of Char;
i: longint;
begin
s:=oemtoansi(s);
ZeroMemory(@buf,SizeOf(buf));
for i:=1 to length(s) do begin
buf[i-1] := s;
end;
SendMessage(wnd,wm_SetFocus,0,0);
SendMessage(wnd,WM_SETTEXT,0,lparam(@buf[0]));
UpdateWindow(wnd);
SendMessage(wnd,wm_KillFocus,0,0);
end;
timaskraft
Сообщения: 17
Зарегистрирован: 21 май 2008, 11:03
Откуда: Витебск

Re: Галактика и WinAPI

Сообщение timaskraft »

Есть самописное приложение, которое мониторит определенные события. Необходимо отсылать сообщение в галактику о том, что событие произошло.
У меня получилось через WinApi послать в Галактику нажатие клавиши F3 или F4 в свой интерфейс, и обработать cmPick и cmEdit. Но мне бы хотелось организовать обмен через свое событие. Можно ли послать в галактику сообщение из своего приложения посредством функций WinApi, и чтобы галактика отработала какую-нибудь команду, не привязанную к клавиатуре?

Может кто сталкивался - просветите пожалуйста.
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Re: Галактика и WinAPI

Сообщение Masygreen »

Начните терзать ТП. Есть функционал (покрайней мере разрабатывался) как через API запустить интерфейс галактический..
Время ведет!
Ответить