Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

копирование из spinedit   Найти похожие ветки 

 
Delphist2   (2010-05-26 16:51) [0]

Есть чужое окно со spinedit, хэндл его я получил. С какими параметрами надо вызвать sendmessage чтобы получить значение этого spinedit?


 
12 ©   (2010-05-26 17:13) [1]

function GetTextByHandle(h: tHandle): String;
var
 p : PChar;
begin
 p:=StrAlloc(255);
 SendMessage(h,WM_GETTEXT,WParam(255),LParam(p));
 Result := String(p);
 StrDispose(p);
end;


 
Delphist2   (2010-05-26 18:16) [2]

Сорри, попутал. Хэндл я кажется не получил:
FindWindowEx(h,0,"TcxDBSpinEdit",nil)<>0 возвращает true
Класс контрола я точно знаю (смотрел декомпилятором), само окно я тоже нашел (1-й параметр). Остается 2-й?


 
Delphist2   (2010-05-26 18:22) [3]

то есть false возвращает. Короче, FindWindowEx(h,0,"TcxDBSpinEdit",nil) возвр. 0.


 
Delphist2   (2010-05-26 18:47) [4]

Да, и если контрол стоит на компоненте PageControl, то надо сначала на PageControl хэндл получать?


 
Delphist2   (2010-05-26 18:52) [5]

Но на PageControl не нашел. Там как будто нет компонента TcxDBSpinEdit. Может еще надо хэндл на конкретную страницу PageControlа?


 
Юрий Зотов ©   (2010-05-26 21:07) [6]


> Delphist2   (26.05.10 18:52) [5]

Во всех случаях сначала нужен хэндл родительского окна (у которого, в свою очередь, может быть свое родительское окно - и т.п., вплоть до окна верхнего уровня). Используйте WinSight32 (или аналогичную программу), при выборе окна она покажет всю иерархию его родительских окон.


 
Delphist2   (2010-05-26 23:35) [7]

Сделал, только работает плохо. Если форма с cxDBSpinEdit только что открыта, то он его (cxDBSpinEdit) не видит. Хотя он там есть. Если же переключиться м/у табами один раз, потом обратно на таб где cxDBSpinEdit, то только тогда видит.

При открытии формы активен как раз тот таб, где находится cxDBSpinEdit. Так что отчего проблема, непонятно.


 
Германн ©   (2010-05-27 01:47) [8]


> Delphist2   (26.05.10 23:35) [7]
>
> Сделал, только работает плохо.

Значит плохо сделал.


 
12 ©   (2010-05-27 10:28) [9]

EnumChildWindows
- и достаточно дать только хендл родителя, например, формы.
EnumChildWindows (hStart, @EnumProc, 0);
где
function EnumProc call-back функция

перебираем всех сынков/дочек, обязательно встретим нужного.
Как его идентифицировать?
Я делал по части известного начального значения.
function EnumProc (WD: HWnd; Param: LongInt): Boolean; stdcall;
Begin
 if pos(sMyField,GetTextByHandle(wd))<>0 then

А возможно по классу окну и т.д. Хендл то есть, от него многое можно получить.


 
Юрий Зотов ©   (2010-05-27 11:29) [10]


> 12 ©   (27.05.10 10:28) [9]

1. Тогда уж BOOL, а не Boolean.
2. Зачем делать цикл, если можно обойтись и без него?


 
Delphist2   (2010-05-27 12:43) [11]


> 2. Зачем делать цикл, если можно обойтись и без него?

без цикла же он не видел его почему-то


 
12 ©   (2010-05-27 13:11) [12]


> Тогда уж BOOL, а не Boolean.

спасибо. А это сильно критично? Просто пока и так вроде работает..


> Зачем делать цикл, если можно обойтись и без него?

?

в заблуждение ввело видимо

> перебираем всех сынков/дочек, обязательно встретим нужного.

конечно, там без цикла, там само перебирается..


 
Юрий Зотов ©   (2010-05-27 14:29) [13]

> 12 ©   (27.05.10 13:11) [12]

В прототипе callback"а указано BOOL. Что и неудивительно, потому что WinAPI написан на Си, а BOOL - это родной сишный четырехбайтовый тип.

Дельфишный же тип Boolean - однобайтовый. Поэтому, если указать его, то все будет зависеть от того, как компилятор построит возврат результата. Если однобайтовый результат будет возвращен, как четырехбайтовый, то все будет нормально, а если нет - то получим непредсказуемый и трудноуловимый глюк.

Надежнее на компилятор не полагаться, а явно указать ему, что надо вернуть четырехбайтовый результат.



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

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

Наверх




Память: 0.5 MB
Время: 0.123 c
4-1232550179
Magedon
2009-01-21 18:02
2010.08.27
Как обновить часть экрана?


15-1271237992
Сергей М.
2010-04-14 13:39
2010.08.27
О виртуальной мыши


15-1270632155
ocean
2010-04-07 13:22
2010.08.27
Gigabit net


15-1269507983
iZEN
2010-03-25 12:06
2010.08.27
Локальный линуксокапец


9-1185035010
Evgraf
2007-07-21 20:23
2010.08.27
Подскажите