Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить текст из ячеек 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-а прочитаешь...


Наверх

Титульная страница Поиск, карта сайта Написать письмо