![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить текст из ячеек TstringGrid в чужом окне? Handle я знаю. [D5]
Shmel © (2001-11-06 01:07:00)Как получить текст из ячеек TstringGrid в чужом окне? Handle я знаю.
Shmel (2001-11-09 23:48:00) [1]Вот млин, никто не знает, а ведь делают как то!!!
Пришлось с помощью Kleptomania + MacrosExpert эту задачу решать :(
А хотелось бы черыз API. Какие перспективы открываются :)
Если кто-то нароет что нибудь по EnumProps, скиньте мне, жжутко интересно. (только стандартного описания из Help не надо :)
Shmel (2001-11-08 21:09:00) [2]Ну неужели никто с EnumProps не работал !!! Повешусь :(
Shmel (2001-11-07 18:43:00) [3]прошу прощения уважаемые мастера, чуть расшифрую:
Есть TWincontrol (Что-то типа TDrawGrid (а может Tlist хитрый)) на него Handle, весь облом что он ReadOnly :(
Я тут порыл похожую задачу на Api, но она на C++ , я его не могу транслировать в Delphi (не понимаю :
comp=(TWinControl*)h;
TPropInfoList* List;)
Прошу прощения за длинный пример (он берет текст из Assemblera):
Как это сделать.
1) Внедрить dll
2) По описанному ранее способу получить указатель на форму.
3) Получить список компонент с свойствами.
4) Поменять у DisassemblerView1 свойство OnKeyDown (у него нет на это событие
обработчика)
5) В этом событии написать такой код:
AnsiString s2=GetStrProp(Sender,type);//Значение нужного свойства
// оно в данном случае будет SelectedDisassembly
//Функцию - обработчик надо воткнуть в класс VCL для того, чтобы избавиться от closure!
//Дело в том, что указатель на KeyDown1 на самом деле 8 байт.
// 4 - адрес функции, 4 - сам объект
class TC: public TCustomControl //Какой нибудь класс
{
public:
__fastcall TC(TComponent* Owner);
void __fastcall KeyDown1(TObject *Sender, WORD &Key,
TShiftState Shift);
};
__fastcall TC::TC(TComponent* Owner): TCustomControl(Owner){}
TPropInfo* type;
void __fastcall TC::KeyDown1(TObject *Sender, WORD &Key,
TShiftState Shift)
{
AnsiString s2=GetStrProp(Sender,type);//Значение нужного свойства
// оно в данном случае будет SelectedDisassembly
//Теперь например вывод на экран этой строки
HDC dc = GetDC(0);
TextOut(dc,20,40,s2.c_str(),s2.Length());
ReleaseDC(0,dc);
}
Свойства у DisassemblerView1 следующие(значения их я вывел через integer, для
упрощения)
....
TopAddress(Тип Integer) = 2012871136
Visible(Тип Boolean) = 1
Width(Тип Integer) = 469
SelectedDisassembly(Тип String) = 88 //самая главная
//Функция получения указателя на control
//Handle должен быть формы
//Считается, что dll уже внедрена
BOOL CALLBACK WinPropProc(
HWND hwndSubclass, // handle of window with property
LPCSTR lpszString, // property string or atom
LPARAM DATA) // data handle
{
TCHAR tchBuffer[4096]; // expanded-string buffer
HANDLE h=GetProp(hwndSubclass,lpszString);
TWinControl* comp;
comp=(TWinControl*)h;
AnsiString s=lpszString;
comp=(TWinControl*)h;
try{
int I, J;
TComponent* C;
String CompName, PropName;
//В TTypeKinds внесены все варианты, чтобы получить все свойства
TTypeKinds k;k
Alien (2001-11-06 15:35:00) [4]> DMN © (06.11.01 10:20)
Вы на название форума сморели? Забудьте приставку Tx...
DMN (2001-11-06 10:20:00) [5]:) A что, TStringGrid - это не TWinControl? Вполне... И клавиши ему можно слать... А в процессе редактирования он создает child control TInplaceEdit, который вполне можно добыть с помощью EnumChildWindows. А кладет он в этот TInplaceEdit содержимое текущей ячейки, которое добывается при помощи WM_GETTEXT... Сдается мне, ничего невозможного пока нет?..
Alien (2001-11-06 06:54:00) [6]>DMN © (06.11.01 03:03)
Вы что издеваетесь?... какие "ячеички", какие TInplaceEdit-ы в WinAPI?
DMN (2001-11-06 03:03:00) [7]Если н допускает редактирование - надо слать ему стрелочки, обходя ячейку за ячейкой, искать хэндл TInplaceEdit"а, сидящего внутри этого грида и читать текст из него...
Alien (2001-11-06 01:18:00) [8]Ничего тебе этот хэндл не даст. В WinAPI нет никаких TStringGrid-ов. Твоя постановка задачи равносильна примерно следующей: "Имеется картинка Bitmap у которой в правом нижнем углу что-то написано(читай нарисовано). Как мне это прочитать?" Если знаешь ответ на этот вопрос, тогда и из своего grid-а прочитаешь...