Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.026 c
1-1126704476
Wolferio
2005-09-14 17:27
2005.10.09
*.xls и *.doc (Внутрення структура файлов)


1-1127287764
CaptainAlex
2005-09-21 11:29
2005.10.09
Дочернее не MDI окно, как сделать?


3-1124775527
Layner
2005-08-23 09:38
2005.10.09
Простой вопрос по RAISERROR


14-1126793840
SergP.
2005-09-15 18:17
2005.10.09
WIN_XP и модем


3-1124777864
SimKa
2005-08-23 10:17
2005.10.09
Удаление индексов