Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

копирование из 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.067 c
2-1267513524
MAX
2010-03-02 10:05
2010.08.27
текст на MessageDlg


2-1271079259
noob_one
2010-04-12 17:34
2010.08.27
Можно ли в delphi2007 объявить функцию в одном файле (модуле)


2-1270752495
Vincero
2010-04-08 22:48
2010.08.27
Иконки 256х256 в Delphi


4-1237968794
Новичок
2009-03-25 11:13
2010.08.27
Зависание меню после установки хука


10-1164625334
ga3
2006-11-27 14:02
2010.08.27
фреймы вложенные в другие фреймы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский