Вниз
Скачать: CL | DM;

Как передать дату в чужое приложение?   Найти похожие ветки 

← →
fmf   (2005-08-03 07:23) [0]

Доброго времени суток.
Ситуация такая:есть некоторое чужое приложение, имеющее компонент типа DateTimePicker.В этот компонент мне нужно передать свою дату.Я делаю так:
h:=FindWindow(nil,"Form");
hd:=FindWindowEx(h,0,"TDateTimePicker",nil);
SendMessage(hd,WM_SETTEXT,0,lparam(LPCTSTR(PChar("23.03.1981"))));
Не работает.Подскажите как надо,плиз.


← →
begin...end ©   (2005-08-03 09:03) [1]

Если Вы уверены, что в чужом приложении используется именно компонент TDateTimePicker (класс окна -- DATETIMEPICK_CLASS), и его хэндл известен, можно использовать сообщение DTM_SETSYSTEMTIME.

uses CommCtrl;

var
 H: HWND;          // Хэндл окна TDateTimePicker
 ST: TSystemTime;  // Дата-время в системном формате
begin
 FillChar(ST, sizeof(ST), 0);
 ST.wDay := 23;
 ST.wMonth := 3;
 ST.wYear := 1981;
 SendMessage(H, DTM_SETSYSTEMTIME, GDT_VALID, Integer(@ST))
end.


← →
Leonid Troyanovsky ©   (2005-08-03 09:23) [2]


> begin...end ©   (03.08.05 09:03) [1]
> Если Вы уверены, что в чужом приложении используется именно
> компонент TDateTimePicker (класс окна -- DATETIMEPICK_CLASS),


У компонента класс окна, как раз, "TDateTimePicker".

--
Regards, LVT.


← →
begin...end ©   (2005-08-03 09:40) [3]

> Leonid Troyanovsky ©   (03.08.05 9:23) [2]

Да, верно.

Но я как-то не учёл главного: поскольку в качестве параметра сообщения используется указатель, а само сообщение отправляется окну чужого процесса, то так просто послать его не удастся.

Поэтому прошу не обращать внимания на [1].


← →
fmf   (2005-08-03 10:26) [4]

Вообще-то приложений два.В одном InqSoft Window Scanner показывает класс окна SysDateTimePick32,а в другом-TDateTimePicker.


← →
Leonid Troyanovsky ©   (2005-08-03 14:49) [5]


> fmf   (03.08.05 10:26) [4]
> Вообще-то приложений два.В одном InqSoft Window Scanner
> показывает класс окна SysDateTimePick32,а в другом-TDateTimePicker.


Да особой разницы нет, если, конечно они способны
обрабатывать DTM_SETSYSTEMTIME, т.е., получены
сабклассированием родного DTP.
Но, на главную проблему указал begin...end © : указатели
на данные в одном процессе невалидны в другом.

Для решения оной проблемы нужно распределить в чужом
приложении буфер, а в LParam сообщения ссылаться на него.
После обработки сообщения буфер можно прочитать.

Например, для ListView
http://groups.google.com/group/fido7.ru.delphi/browse_thread/thread/62f41bf5cf10e5ae/1574140649142b2f?lnk=st&q=lvt+lvm_g etitemcount&rnum=2#1574140649142b2f

--
Regards, LVT.


← →
fmf   (2005-08-11 13:30) [6]

Сейчас передаю так:
h:=FindWindow(nil,"Form");
hd:=FindWindowEx(h,0,"TDateTimePicker",nil);
DateTime_SetFormat(hd,PChar("23.03.1981"));

Передается текст в какой-то левой кодировке.Вопрос:как правильно преобразовать дату?


← →
fmf   (2005-08-11 13:31) [7]

Сейчас передаю так:
h:=FindWindow(nil,"Form");
hd:=FindWindowEx(h,0,"TDateTimePicker",nil);
DateTime_SetFormat(hd,PChar("23.03.1981"));

Передается текст в какой-то левой кодировке.Вопрос:как правильно преобразовать дату?


← →
Leonid Troyanovsky ©   (2005-08-11 14:00) [8]


> fmf   (11.08.05 13:31) [7]
> Сейчас передаю так:


Тебе ж объясняли, что так передать нельзя.

Если хочешь по-простому, изволь:

 2 в активное поле:
 PostMessage(DateTimePicker.Handle, WM_CHAR, Ord("2"), 0);

 Переход к следующему полю:
 PostMessage(DateTimePicker.Handle, WM_KEYDOWN, VK_RIGHT, 0);
 SendMessage(DateTimePicker.Handle, WM_KEYUP, VK_RIGHT, 0);

 Для активации чужого приложения - SetForegroundWindow.
 Для установки фокуса на контрол:
 AttachThreadInput(..,True), Windows.SetFocus,AttachThreadInput(..,False)

--
Regards, LVT.


← →
fmf   (2005-08-11 14:22) [9]

Спасибо.Все заработало.


← →
ANB ©   (2005-08-11 15:19) [10]


> Для установки фокуса на контрол:
>  AttachThreadInput(..,True), Windows.SetFocus,AttachThreadInput(..,False)
- WM_SETFOCUS - заменяет эту конструкцию.
Кстати, теперь мне понятно, почему функция SetFocus для чужих приложений не работает.



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.06 c
1-1127220579
Андре
2005-09-20 16:49
2005.10.09
Чат


1-1126869452
Николай1
2005-09-16 15:17
2005.10.09
Проверить наличие события у компонента


8-1116517391
Expl
2005-05-19 19:43
2005.10.09
Двигать изображение в TImage


4-1123760378
VNavigator
2005-08-11 15:39
2005.10.09
Вызов контекстного меню проводника


6-1118698925
etr
2005-06-14 01:42
2005.10.09
Справка на русском языке по компанентам Indi




   Наверх