Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.08.2012, 12:16
colanah colanah вне форума
Прохожий
 
Регистрация: 03.08.2012
Сообщения: 4
Репутация: 10
По умолчанию сортировка окон

есть 8 окон
имеющие в своем названии одинаковые символы например "ААА"

для одного окна делаю так:
Код:
функция FindWindowByTitle возвращает handle окна имеющего совпадение по названию или части названия...

function FindWindowByTitle(WindowTitle: string): Hwnd;
var
  NextHandle: Hwnd;
  NextTitle: array[0..260] of char;
begin
  // Get the first window
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
  while NextHandle > 0 do
  begin
    // retrieve its text
    GetWindowText(NextHandle, NextTitle, 255);
    if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
    begin
      Result := NextHandle;
      Exit;
    end
    else
      // Get the next window
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
  end;
  Result := 0;
end;

и потом обращаюсь к этому окну и делаю там с ним свои дела( помещаю скрин окна на форму и выравниваю)

begin
h1:= FindWindowByTitle('ААА')
  if h1 <> 0 then // if we found
  SetWindowPos(h1,HWND_TOP,0,0,502,362,SWP_SHOWWINDOW);
  ....
Админ: Пользуемся тегами для оформления кода!

а как сделать тоже для 8ми окон имеющих в своем названии одинаковые символы "ААА" и потом расположить их друг за другом?)

Последний раз редактировалось Admin, 03.08.2012 в 15:10.
Ответить с цитированием
  #2  
Старый 03.08.2012, 12:40
MiraLaklamon MiraLaklamon вне форума
Новичок
 
Регистрация: 07.06.2012
Сообщения: 59
Версия Delphi: 6, 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от colanah
есть 8 окон
имеющие в своем названии одинаковые символы например "ААА"

для одного окна делаю так:

функция FindWindowByTitle возвращает handle окна имеющего совпадение по названию или части названия...

function FindWindowByTitle(WindowTitle: string): Hwnd;
var
NextHandle: Hwnd;
NextTitle: array[0..260] of char;
begin
// Get the first window
NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
while NextHandle > 0 do
begin
// retrieve its text
GetWindowText(NextHandle, NextTitle, 255);
if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
begin
Result := NextHandle;
Exit;
end
else
// Get the next window
NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
end;
Result := 0;
end;

и потом обращаюсь к этому окну и делаю там с ним свои дела( помещаю скрин окна на форму и выравниваю)

begin
h1:= FindWindowByTitle('ААА')
if h1 <> 0 then // if we found
SetWindowPos(h1,HWND_TOP,0,0,502,362,SWP_SHOWWINDO W);
....

а как сделать тоже для 8ми окон имеющих в своем названии одинаковые символы "ААА" и потом расположить их друг за другом?)
Можно например переделать функцию FindWindowByTitle, чтобы она возвращала хэндл не первого попавшегося окна, а массив хэндлов.
Ответить с цитированием
  #3  
Старый 03.08.2012, 13:33
colanah colanah вне форума
Прохожий
 
Регистрация: 03.08.2012
Сообщения: 4
Репутация: 10
По умолчанию

и как ее переделать , что бы на выходе получались хэндлы содержащие в названии "ААА"?)
Ответить с цитированием
  #4  
Старый 03.08.2012, 13:43
MiraLaklamon MiraLaklamon вне форума
Новичок
 
Регистрация: 07.06.2012
Сообщения: 59
Версия Delphi: 6, 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от colanah
и как ее переделать , что бы на выходе получались хэндлы содержащие в названии "ААА"?)
Примерно так:
Код:
type
  THwndList = array of HWND;

procedure FindWindowByTitle(WindowTitle: string; out HwndList: THwndList);
var
  NextHandle: Hwnd;
  NextTitle: array[0..260] of char;
begin
  HwndList:=nil;
  // Get the first window
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
  while NextHandle > 0 do
  begin
    // retrieve its text
    GetWindowText(NextHandle, NextTitle, 255);
    if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
    begin
      SetLength(HwndList, Length(HwndList)+1);
      HwndList[High(HwndList)] := NextHandle;
    end
    else
      // Get the next window
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
  end;
end;
Ответить с цитированием
  #5  
Старый 03.08.2012, 14:11
colanah colanah вне форума
Прохожий
 
Регистрация: 03.08.2012
Сообщения: 4
Репутация: 10
По умолчанию

а как потом обращаться к элементам этого массива , во первых его же надо задать в var:

HwndList: array[0..10] of THwndList;

и выглядеть это обращение будет так? (пишет ошибки про несовпадающие типы параметров)

HwndList[1] := FindWindowByTitle('ААА',HwndList);
Ответить с цитированием
  #6  
Старый 03.08.2012, 14:16
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Радость

Цитата:
Сообщение от colanah
а как
нужно почитать в файле справки про Dynamic arrays
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 03.08.2012, 14:16
MiraLaklamon MiraLaklamon вне форума
Новичок
 
Регистрация: 07.06.2012
Сообщения: 59
Версия Delphi: 6, 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от colanah
а как потом обращаться к элементам этого массива , во первых его же надо задать в var:

HwndList: array[0..10] of THwndList;

и выглядеть это обращение будет так? (пишет ошибки про несовпадающие типы параметров)

HwndList[1] := FindWindowByTitle('ААА',HwndList);
Нет. Задавать его нужно так:
Код:
var
  HwndList: THwndList;
PS Прочитай (в справке или в книге) про динамические массивы.
Ответить с цитированием
Этот пользователь сказал Спасибо MiraLaklamon за это полезное сообщение:
colanah (03.08.2012)
  #8  
Старый 03.08.2012, 14:18
colanah colanah вне форума
Прохожий
 
Регистрация: 03.08.2012
Сообщения: 4
Репутация: 10
По умолчанию

ok, спасибо пошел разбираться)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:22.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025