Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Хэндл дочернего окна

Автор: Andrey aka Master
Дата сообщения: 21.09.2003 12:30
Помогите. Какой ф-ией можно найти хендл дочернего окна класса edit без caption'a ?
Автор: vito333
Дата сообщения: 21.09.2003 15:57
на чем пишешь?
Автор: ShIvADeSt
Дата сообщения: 22.09.2003 01:40

Цитата:
Помогите. Какой ф-ией можно найти хендл дочернего окна класса edit без caption'a ?

Ты вообще хоть понимаешь что пишешь. Как класс едит может породить дочернее окно? Оно само является дочерним для основной формы, а уж тем более у него никакого caption сроду не было. Максимум свойство Text в Дельфи. Тем более, что если окно дочернее, то его хэндл всегда знает его родитель если только все правильно порождается. Или правильнее сформулируй вопрос или скажи для чего тебе это надо, чтобы можно было понять задачу.
Автор: Andrey aka Master
Дата сообщения: 24.09.2003 12:58
Дочернее окно и имет класс едит ! А родительское окно то тут при чем ... пишу на делфи
Автор: FuzzyLogic
Дата сообщения: 24.09.2003 16:03

Цитата:
А родительское окно то тут при чем ...

При том что оно порождает дочернее окно и всё о нём знает.
Автор: Sleepwalker
Дата сообщения: 24.09.2003 16:14
Editbox1.handle - не устраивает?
Автор: ShIvADeSt
Дата сообщения: 25.09.2003 00:34

Цитата:
Editbox1.handle - не устраивает

Скорее всего Edit1.Handle .

Странно парень программит на ООП а не знает в чем прикол родителей и потомков. Причем если быть все же точнее, то едит это все таки контрол, а не окно. Хотя создается как окно (при помощи CreateWindow(EX) или в ResEditore). Но блин если всякие баттоны едиты называть окнами, то запаришся понимать что человек хочет сказать. . И все равно вопрос остается, какой у едита caption?
Автор: EAS
Дата сообщения: 25.09.2003 01:50
Все равно фиг поймешь, что надо то. Чего-то с формулировкой колбасня
Если подразумевается что-то типа
TEdit1 = class(TEdit)
...
var Edit1: TEdit;
...
Edit1 := TEdit1.Create;
...

То разумеется

Цитата:
Edit1.Handle



Цитата:
если всякие баттоны едиты называть окнами

Ну, окно и в Африке окно, что поделать ...
Автор: Andrey aka Master
Дата сообщения: 02.10.2003 15:03

Цитата:
Цитата:Editbox1.handle - не устраивает

Скорее всего Edit1.Handle


Эдит то принадлежит не кону моей программы а другой !

Добавлено
ой ... =) хотел сказать короче что эдит не в моей проге а в другой
Автор: zorrack
Дата сообщения: 02.10.2003 15:58
Если отойти от споров о том "окно Edit или не окно" и указывать на вещи, которые прямо отрицаются в начальном посте - то совет такой:
Используешь API функцию EnumChildWindows, передаешь хендл родительского окна и указатель на callback-функцию, которая будет вызываться EnumChildWindows.
Дальше в этой функции можешь уже проанализировать класс окна и проверить - то ли это окно, что тебе надо.
Если копать глубже - функция поиска нужного чайлд окна может быть рекурсивной - в таком случае сможешь найти child-окно если у тебя несколько уровней вложенности (например property pages и т.д.)
Сорри, пример могу наваять только на C++ - с Делфи очень давно не работал
Автор: Andrey aka Master
Дата сообщения: 02.10.2003 18:21
ОК. спасибо я посмотрю эту апи в справке мб разберусь
Автор: ShIvADeSt
Дата сообщения: 03.10.2003 02:32
Andrey aka Master

Цитата:
хотел сказать короче что эдит не в моей проге а в другой

Если бы ты сформулировал вопрос как вести текст в чужой едит, то тебе давно бы дали ответ. Это FAQ причем такой древний, как сама Винда. Есть куча решений. Во 99 года
Есть у меня окно, на нем edit1, edit2, memo1. Я пытаюсь в это окно вписать
из
другой программы слова и не получается.
Вот установуи того окна в которое я пытаю вписать слова: edit1:= 'Документ';
edit2:= ''; memo1.Clear; Caption:= 'Hовый документ'....
!!! Почему не работает???
А можно ли узнать, зная хендл окна, все хендлы его компонентов???

=== Cut ===
Var wh,bh:integer; st1,st2,st3:string; st:PChar;
begin
Caption:= '';
st:= 'ku-ku'; st1:= '1111'; st2:= '2222'; st3:= '3333';
wh:= FindWindow(nil, 'Hовый документ'); // Hазвание окна...
Caption:= inttostr(wh);
if wh <> 0 then // Окно нашлось?
begin
// ищем edit1 и находим...
bh:= FindWindowEx(wh, 0, nil, 'Документ');
if bh <> 0 then SendMessage(bh, WM_SETTEXT, 0, LParam(st1));
Caption:= Caption + ' ' + inttostr(bh); // высвечиваем его хендл

bh:= FindWindowEx(wh, 0, nil, '');
if bh <> 0 then SendMessage(bh, WM_SETTEXT, 0, LParam(st3));
Caption:= Caption + ' ' + inttostr(bh);
end;

Автор: Andrey aka Master
Дата сообщения: 03.10.2003 05:11
ShIvADeSt
wh:= FindWindow(nil, 'Загаловок главного окна програссы'); // хендл главного ока
h:=FindWindowEx(wh, 0, nil, '') //хендл эдита

Я так понимаю что эта искомая функция.
Ну чтож спасибо.
Автор: zorrack
Дата сообщения: 04.10.2003 13:30
Andrey aka Master

Цитата:
h:=FindWindowEx(wh, 0, nil, '') //хендл эдита

Или любого другого компонента с пустым Caption
Если нужен именно Edit - нужно специфицировать класс (не помню точно, но вроде 'TEdit' должно канать).
Т.е. меняем nil на 'TEdit' (опять же - возможно необходимо привести к PChar)
Автор: Andrey aka Master
Дата сообщения: 05.10.2003 14:45
вместо нила вставил edit, вместо '' поставил nil все работает норм.
Терь ее этому же контролу нужно послать нажатие клавиша, те сэмулировать нажатие клавиши F12.
Я пробовал посылать сообошение wm_keydown чет не работает. Подскажите как сделать
Автор: ShIvADeSt
Дата сообщения: 05.10.2003 23:42

Цитата:
Я пробовал посылать сообошение wm_keydown чет не работает.

Ты куски кода, которые не работают давай. А то не изветсно, каким путем ты идешь. И вообще по моему в MSDK все популярно объяснено. . Так что давай код, будем вместе прапвитьэ.
Автор: zorrack
Дата сообщения: 06.10.2003 10:27
ShIvADeSt

Цитата:
И вообще по моему в MSDK все популярно объяснено.

Вообще-то наверное имелся ввиду MSDN
Автор: ShIvADeSt
Дата сообщения: 07.10.2003 00:19

Цитата:
Вообще-то наверное имелся ввиду MSDN

Нет вообщето я имел MS SDK но так как я ленивый то писать лишние буквы меня обламывает. (Просто обычно я хэлпом пользуюсь его мне хватает)
Автор: zorrack
Дата сообщения: 07.10.2003 01:07
ShIvADeSt
Вообще то да - было желание туда же тправить человека. Но ведь вспомни - начало программирования под WinAPI - когда первый раз увидел MSDN (не говоря уже про MS SDK) лет 5 назад - перепугался
Тем не менее - по существу - надобно точно знать, что диалог (то-бишь форма) не перехватывает енти сообщения.
Andrey aka Master
Попробуй поставить обработчик нажатия клавиши на всех уровнях вложенности форм/панелей и следи - может кто и цапает перед тобой
Понятно, что поскольку окно не твое - так мониторить не выйдет, но попробую тестовую форму. А если работает (перехват Ф12) - значить обработчик там завернутый.
Тогда попробуй дать фокус окну (эдиту) и пошли последовательность нажатия. Так же будь уверен, что посылаешь информацию, что нажата системная клавиша

Страницы: 1

Предыдущая тема: Перехват закрытия приложения


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.