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

Вниз

Найти активный CONTROL и поиграться им   Найти похожие ветки 

 
MaxSit   (2002-09-02 01:23) [0]

Доброй ночи, Мастера!
Созрел (наболел) вопрос. Написан хук, который при нажатии на определенную кобинацию клавиш, считывает информацию с активного приложения, с контрола (например, EDIT и т.п.) на котором установлен фокус, обрабатывет эту информацию и помещает обратно результат.
Непосредственно вопрос: как считать этот проклятый текст и как его обратно запихнуть?

Заранее спасибо.


 
MaxSit   (2002-09-02 02:08) [1]

Задача упрощена за счет функции GETFOCUS, кот. возвращает Handle активного в данный момент окна, но как проверить, что это нужный мне класс и считать текст?


 
MaxSit   (2002-09-02 14:59) [2]

Может, кто поможет !!!
FindControl не работает, так как находится в DLL.
FindVCLWindow не работает, так как использует FindControl.


 
Skier   (2002-09-02 15:03) [3]

>MaxSit
WM_GETTEXT ?


 
MaxSit   (2002-09-02 15:22) [4]

Делаю так:

var Len: Integer;
Hw: HWND;
Text: PChar;
SamText: String;
begin
Hw:=GetFocus;
...
разные проверки
...
Len:=SendMessage(Hw,WM_GETTEXT,0,LongInt(@Text));
SetString(SamText,Text,Len);
end;

Hw -- определяется верно;
Text -- всегда пустой;
SamText -- всегда пустой;

Где я сделал ошибку.


 
Старый Паскалист   (2002-09-02 15:26) [5]

Ты под буфер Text: PChar память не выделил.



 
Skier   (2002-09-02 15:37) [6]

>MaxSit

Text := AllocMem(255);
Len := SendMessage(RequiredControl.Handle,WM_GETTEXT, 255,LongInt(Text));
SetString(SamText,Text,Len);
FreeMem(Text, 255);


 
Skier   (2002-09-02 15:41) [7]

>MaxSit

Окончательно, примерно так :


const
REQUIRED_LENGTH = 255;
var
Len: Integer;
Text: PChar;
begin
Text := AllocMem(REQUIRED_LENGTH);
try
Len:=SendMessage(GetFocus, WM_GETTEXT, REQUIRED_LENGTH, LongInt(Text));
WriteLn(Text);
finally
FreeMem(Text, REQUIRED_LENGTH);
end; //try
end;


 
MaxSit   (2002-09-02 16:02) [8]

Спасибо! Все заработало! Текст читается.

Созрело еще пару вопросов, по возможности ответьте:
1.) Это все касается Edit-подобных классов, а как можно прочитать данные в гриде (значение под фокусом), если в данный момент таблица не редактируется. Может какие идеи есть или наводки.
2.) Как можно узнать по HWND (еще есть строковый ресурс наименования класса компонента), что одним из прародителей данного контрола, есть класс TCustomEdit
(например, MyFindControl is TCustomEdit).

Заранее спасибо.



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

Форум: "Основная";
Текущий архив: 2002.09.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
7-35923
anton_private
2002-06-07 15:57
2002.09.12
Как зарегистрить ActiveX компонет в runtime?


1-35751
alexvanglukhman
2002-08-30 15:59
2002.09.12
Не могу понять что происходит?


1-35700
A7exander
2002-08-29 16:01
2002.09.12
Виснет Дельфя


14-35865
gray_k
2002-08-15 18:17
2002.09.12
где взять


1-35644
zxas
2002-09-01 20:18
2002.09.12
Интересный вопрос !!!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский