Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 2
Регистрация: 26.08.2013
Сообщений: 381
1

разделение окна

01.09.2013, 10:21. Просмотров 1334. Ответов 7
Метки нет (Все метки)


Всем доброго времени суток , я тут по такому вопросу , нужно разделить кнопки чужого окна на цифры , и потом по выбранной цифре выделить или сразу нажать

пример : открыли игру запер сразу или по нажатию спец кнопки все кнопки разделились на цифры и далее я в программе вожу цифру что мне надо и это кнопку с той цифрой нажимается ... так же и с другими окнами ...

как такое можно реализовать ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2013, 10:21
Ответы с готовыми решениями:

Удержание окна с текущими введенными значениями после диалогового окна (с предупреждением)
Здравствуйте, есть маленькая задачка. Форма добавления ТС, открывается с основной формы. Нужно...

Дочерние окна сворачивать в пределах главного окна (Delphi 7)
Здравствуйте, подскажите как сделать чтоб дочернее окно при свертывании не уходило на панель задач...

поиск и разделение
есть прооцедура: procedure TForm1.Button1Click(Sender: TObject); var keys:TStringList;...

разделение изображения
Добрый день, нужна помощь. Нужно разделить изображение на 16 равных частей. Помогите пожалуйста

7
13062 / 5848 / 1705
Регистрация: 19.09.2009
Сообщений: 8,807
01.09.2013, 11:52 2
Здесь можно применить API функции: EnumWindows() и, возможно - FindWindow() и (или) FindWindowEx(). Сначала, надо найти главное окно приложения (окно верхнего уровня). Это можно сделать с помощью вызова FindWindow(), если точно известен текст в заголовке искомого окна. Если известна только часть текста в заголовке окна, то для поиска можно применить EnumWindow(). Затем, имея хандл окна верхнего уровня, можно найти дочерние окна. Кнопки, на самом деле, тоже являются окнами - дочерними окнами относительно окна, на котором они расположены. Их можно найти по имени класса или (и) по тексту на них, тоже с помощью EnumWindow(). Или, если количество кнопок заранее известно и известен текст на них, то их можно найти через последовательность вызовов FindWindowEx().
0
1 / 1 / 2
Регистрация: 26.08.2013
Сообщений: 381
01.09.2013, 11:56  [ТС] 3
Mawrat, а если не известен текст на кнопках ? мне сам каптион не надо менять , просто рядом или сверху него написать цифру ...

например с windows speech recording там можно посмотреть пример , открыл сапер или нажал на пуск хоп сверху кнопок появились цифры вот так мне нужно ... но как сделать хз вот и обращаюсь к вам
0
13062 / 5848 / 1705
Регистрация: 19.09.2009
Сообщений: 8,807
01.09.2013, 12:05 4
Цитата Сообщение от vuasya Посмотреть сообщение
открыл сапер или нажал на пуск хоп сверху кнопок появились цифры вот так мне нужно
Другие тексты в кнопки записать можно. Но вот как ещё дорисовать что-то - это лучше, наверное, обратиться в раздел Delphi и WinAPI. Там может быть ребята подскажут.
0
1 / 1 / 2
Регистрация: 26.08.2013
Сообщений: 381
01.09.2013, 23:34  [ТС] 5
Mawrat, спасибо , щас обращусь

Добавлено через 10 часов 27 минут
Mawrat, не , там тоже молчат .... вот смотри примерно как я хочу вот пример видео на ютубе : http://www.youtube.com/watch?v=jgPVOHeA7LM
начать смотреть с 1:42 (пример с игрой сапер)

может знаешь ?

Добавлено через 57 минут
может как то вывести опред номер кнопки ...и там дальше уже по нему работать ?
0
13062 / 5848 / 1705
Регистрация: 19.09.2009
Сообщений: 8,807
01.09.2013, 23:52 6
Можно сделать так. В заданном окне найти все кнопки (через EnumWindow()) и сопоставить им числа. Потом, в своей программе можно пользователю предоставить интерфейс, через который по номерам можно будет воздействовать на кнопки в целевом окне. Интерфейс может быть тоже в виде кнопок с номерами. Кнопки интерфейса создаются динамически.

Можно и рисовать в чужом окне - залить области кнопок определённым цветом фона и потом прорисовывать номера в тех областях. Здесь надо будет получить контекст устройства (окна) через GetDC(), выполнить рисование по нужным координатам, потом, освободить контекст ReleaseDC(). Чтобы позже убрать нарисованное, надо послать окну сообщение на перерисовку - WM_PAINT. Это делается с помощью функций SendMessage() или PostMessage().
0
пофигист широкого профиля
4289 / 2809 / 796
Регистрация: 15.07.2013
Сообщений: 16,303
01.09.2013, 23:54 7
Цитата Сообщение от vuasya Посмотреть сообщение
там тоже молчат
Молчат потому что эта задача не столь простая. И готовых решений для любых программ тут нет. А уж что касается игр, то это вообще своя отрасль.
0
1 / 1 / 2
Регистрация: 26.08.2013
Сообщений: 381
02.09.2013, 21:02  [ТС] 8
Mawrat,northener, смотри , можно использовать такую функцию :
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function EnumChildProc(Wnd: hWnd; lParam: LongInt): Boolean; stdcall;
var
  Buff: array[0..MAXCHAR - 1] of Char;
begin
 
  Result := True;
  GetClassName(Wnd, Buff, MAXCHAR);
 
  if String(Buff) = PChar(lParam) then
 
     // Result := Succeeded(SendMessage(Wnd, BM_CLICK, 0, 0));   //нажатие кнопки
      Result := Succeeded(SendMessage(Wnd, WM_SETTEXT, 0, Integer(PChar('1111'))));    //замена текста
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
begin
  S := 'Button'; //тип кнопки
  EnumChildWindows(FindWindow(nil, 'окно'), @EnumChildProc, Integer(@S[1]));//названия окна
end;
1.как бы туда прицепить еще и чтоб действовало по названию кнопок ? , а не первую кнопку брала сразу
2.можно ли как то узнать первоначальный текст кнопок ? например : функция
Result := Succeeded(SendMessage(Wnd, WM_SETTEXT, 0, Integer(PChar('1111')))); заменяет текст на нужный , а как бы сделать чтоб они не заменяла , а добавляла ? т.е нынешний текст + свой

поможешь сделать ?

Добавлено через 18 минут
нашел полегче способ
Delphi
1
2
3
H1:=FindWindow(nil,'Запуск программы');//хэндл проги
H2:=FindWindowEx(H1,0,'Button','ОК');//хэндл кнопки
SendMessage(H2,BM_CLICK,0,0);//нажать на кнопку
но вот остается 2 вопрос ... сделать нынешний текст + свой
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2013, 21:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Разделение значений
Доброе время суток уважаемые программисты! Помогите решить столь не простую для новичка задачку)...

Разделение чисел
Здравствуйте! Задача такая в memo записаны данные в таком формате: 51-31-45-1 мне необходимо...

Разделение строки
Здравствуйте. Подскажите как можно разделить строку до точки и фразу после точки и до конца строки...

Разделение текста
Есть строка "site.com;login;password" Как это разделить на 3 разных переменных?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.