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

Вниз

Сохранить текст из ListBox на чужой форме   Найти похожие ветки 

 
LOX   (2003-12-30 13:51) [0]

Имеется TListBox, на чужой форме, я знаю его Handle, Window Proc.
Как мне сохранить из этого ListBox"a текст в файл или хотябы в буфер обмена(в текстовом виде).


 
YuRock   (2003-12-30 14:28) [1]


var
i: Integer;
pStr: PChar;
...
for i := 0 to SendMessge(hList, LB_GETCOUNT, 0, 0) - 1 do begin
pStr := StrAlloc(SendMessge(hList, LB_GETTEXTLEN, i, 0));
SendMessge(hList, LB_GETTEXT, i, Integer(pStr))
...
// Работай со строкой pStr, как хочешь
...
StrDispose(pStr);
end;


P.S. Можно для скорости выделить статический массив (типа pStr: Array[0..1023] of Char), тогда не нужно выделять/удалять память и получать размер строки (только надо быть уверенным, что текст в итемах будет меньше)


 
LOX   (2003-12-30 15:50) [2]

Оказывается, что я неправильно узнал handle listbox"a.
Плиз, подскажите как узнать.
А так всё работает с моим Listbox.


 
YuRock   (2003-12-30 16:04) [3]

А как ты его узнавал? Что у тебя есть для того, чтобы узнать handle listbox"a?


 
LOX   (2003-12-30 16:20) [4]

Я давно нашёл программу MHOOK, через неё я узнаю имя класса.
Вот ссылка если надо:
http://m.vistcom.ru/hook.rar


 
LOX   (2003-12-30 17:25) [5]

Кто может ПОМОГИТЕ!!


 
YuRock   (2003-12-30 17:57) [6]

> Вот ссылка если надо
Не понял, это кому надо?


 
LOX   (2003-12-30 18:06) [7]

Ну, мож кому надо.


 
YuRock   (2003-12-30 18:09) [8]

Так кому (и главное - чем) помочь?


 
LOX   (2003-12-30 18:12) [9]

Ну как она определяет класс и всё такое.


 
YuRock   (2003-12-30 18:15) [10]

GetWindowClass() (если ты про класс окна) определяет класс.


 
LOX   (2003-12-30 18:21) [11]

Ты лучше решить проблему помоги.


 
YuRock   (2003-12-30 18:25) [12]

Какую проблему? Найти окно (ListBox) по хендлу окна, на котором он лежит?


 
LOX   (2003-12-30 18:28) [13]

Да.


 
YuRock   (2003-12-30 19:10) [14]


// hWindow - хендл окна-предка listbox"a
function GetListBox(hWindow: HWND): HWND;
var
hCur: HWND;
cCur: String;
cClass: Array[0..260] of Char;
begin
Result := 0;
hCur := GetWindow(hWindow, GW_CHILD);
while hCur <> 0 do begin
GetClassName(hCur, @cClass, 260);
cCur := UpperCase(String(cClass));
if (cCur = "LISTBOX") or (cCur = "TLISTBOX") then begin
Result := hCur;
Exit;
end;

hCur := GetWindow(hWindow, GW_CHILD);
end;
end;


Предупреждаю, ф-ция GetListBox вернет хендл первого созданного листбокса в окне.


 
LOX   (2003-12-31 09:30) [15]

Проблема в том что на окне 2 ListBox и они находятся на панели.


 
Digitman   (2003-12-31 11:18) [16]


> на окне 2 ListBox


окно идентифицируется по комбинации его имени, имени его класса и хэндлу родительского окна

если такая комбинация тебе заранее известна, то ты найдешь искомое окно, иначе - нет

если тебе известен хэндл окна целевой формы, и родителем окна панели является именно форма (предположим, что это единственная панель на форме), то тебе необходимо сначала перечислить все доч.окна формы с пом. EnumChildWindows(), среди перечисленных найти хэндл окна искомой панели по имени класса "TPanel", для найденного хэндла перечислить все доч.окна окна-панели (снова - EnumChildWindows), и теперь среди печисленных доч.окон панели найти нужное окно с именем класса "TListBox" и каким-либо иным доп.признаком, идентифицирующим именно нужное окно лист-бокса

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


 
LOX   (2003-12-31 12:05) [17]

А какие параметры функции писать.


 
Digitman   (2003-12-31 12:14) [18]

The EnumChildWindows function enumerates the child windows that belong to the specified parent window by passing the handle of each child window, in turn, to an application-defined callback function. EnumChildWindows continues until the last child window is enumerated or the callback function returns FALSE.

BOOL EnumChildWindows(

HWND hWndParent, // handle to parent window
WNDENUMPROC lpEnumFunc, // pointer to callback function
LPARAM lParam // application-defined value
);


Parameters

hWndParent

Identifies the parent window whose child windows are to be enumerated.

lpEnumFunc

Points to an application-defined callback function. For more information about the callback function, see the EnumChildProc callback function.

lParam

Specifies a 32-bit, application-defined value to be passed to the callback function.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.

Remarks

The EnumChildWindows function does not enumerate top-level windows owned by the specified window, nor does it enumerate any other owned windows.


 
Digitman   (2003-12-31 12:14) [19]

The EnumChildProc function is an application-defined callback function that receives child window handles as a result of a call to the EnumChildWindows function.

BOOL CALLBACK EnumChildProc(

HWND hwnd, // handle to child window
LPARAM lParam // application-defined value
);


Parameters

hwnd

Identifies a child window of the parent window specified in EnumChildWindows.

lParam

Specifies the application-defined value given in EnumChildWindows.



Return Values

To continue enumeration, the callback function must return TRUE; to stop enumeration, it must return FALSE.


 
LOX   (2003-12-31 12:48) [20]

Я это уже находил в инете на русском.
Плиз, пример использования.


 
Digitman   (2003-12-31 12:53) [21]


> Я это уже находил в инете на русском


и что тебе там непонятно ? конкретно ?


 
LOX   (2003-12-31 13:10) [22]

А легче использовать findwindow и findWindowEx.
Всё! Получилось!ВСЕМ СПАСИБО и С НОВЫМ ГОДОМ!



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

Форум: "WinAPI";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
3-12282
Andreich
2004-02-06 15:34
2004.03.05
Как добавить фотографию в поле Graphic?


14-12525
Думкин
2004-02-12 06:08
2004.03.05
С днем рождения! 12 февраля.


1-12337
LaidBack
2004-02-25 14:56
2004.03.05
Как расположить панель выше главного меню?


7-12558
don
2003-12-16 10:32
2004.03.05
Печать пакета документов


14-12521
nv-vetal
2004-02-12 15:57
2004.03.05
Как вытянуть из dpk файлы pas програмно?





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