Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2018, 12:55   #1
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию Сделать активным окно

Всем привет. Собственно столкнулся с такой проблемой - не могу никак ввести окно на передний план. (((

Что сделано:

Получаю список окон функцией и заносится все в ComboBox

Код:
.............
Form1.ComboBox1.Items.AddObject(cp1251ToUTF8(caption), TObject( Wnd ));

..............
Далее, в Coombox выбираю из списка нужный заголовок окна и пытаюсь его развернуть:

Код:
var h : integer;
....
    h  := Integer(Form1.ComboBox1.ItemIndex);
    BringWindowToTop(h);  
...........
Но окно не разворачивается , если я правильно понимаю, то функции BringWindowToTop надо передать Handle окна, который из себя представляет целочисленное число. Вот это число я и пытался получить из компонента ComboBox. Нашел такую статью, но она не сильно помогла https://www.thoughtco.com/store-a-st...object-1058392

Что не так делаю??? Может вообще не ту функцию пытаюсь использовать? Спасибо
Максим_maks вне форума Ответить с цитированием
Старый 17.04.2018, 13:02   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Хэндл не просто целое число и уж тем более оно не равно индексу строки комбобокса какой-то проги.
p51x вне форума Ответить с цитированием
Старый 17.04.2018, 14:08   #3
Filka
Форумчанин
 
Регистрация: 29.10.2015
Сообщений: 272
По умолчанию

Код:
var
  H: HWND;
//...
  with ComboBox1 do
    H := HWND(Items.Objects[ItemIndex]);

  if IsIconic(H) then
    ShowWindow(H, SW_RESTORE);
  SetForegroundWindow(H);
//...
Filka вне форума Ответить с цитированием
Старый 17.04.2018, 22:25   #4
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Filka Посмотреть сообщение
Код:
var
  H: HWND;
//...
  with ComboBox1 do
    H := HWND(Items.Objects[ItemIndex]);

  if IsIconic(H) then
    ShowWindow(H, SW_RESTORE);
  SetForegroundWindow(H);
//...
Спасибо, все работает. Если не сложно чуть-чуть пояснения - почему именно такая запись

Код:
 with ComboBox1 do
    H := HWND(Items.Objects[ItemIndex]);

, а не вида

Код:
  H:=HWND(ComboBox1.Items.Objects[ItemIndex]);
Максим_maks вне форума Ответить с цитированием
Старый 18.04.2018, 02:05   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Максим_maks Посмотреть сообщение
Спасибо, все работает. Если не сложно чуть-чуть пояснения - почему именно такая запись

with ComboBox1 do
H := HWND(Items.Objects[ItemIndex]);

, а не вида

H:=HWND(ComboBox1.Items.Objects[ItemIndex]);
А прочитать хоть какой-нибудь учебник лень?

Последний раз редактировалось northener; 18.04.2018 в 02:07.
northener вне форума Ответить с цитированием
Старый 18.04.2018, 12:33   #6
Максим_maks
Пользователь
 
Регистрация: 18.01.2015
Сообщений: 51
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
А прочитать хоть какой-нибудь учебник лень?
Учебники читаю, но как что-то чуть-чуть в требуется сделать не по учебнику, сразу начинаются приключения.

Вот например:

Код:
begin
    Application.Minimize;
    time:=strtoint(edit1.Text);
    Timer5.Enabled:=True;

    with ComboBox1 do
          H := HWND(Items.Objects[ItemIndex]);
             if IsIconic(H) then
                 ShowWindow(H, SW_RESTORE);
                 SetForegroundWindow(H);
                 Windows.SetFocus(H);
             end;
По таймеру создается файл с картинкой. Если выбран заголовок 1-й раз все работает, как только ты вибарешь другое окно и по истечении определенного времени снова нужно сделать скрин выбранного окна - конструкция вида:

Код:
with ComboBox1 do
          H := HWND(Items.Objects[ItemIndex]);
             if IsIconic(H) then
                 ShowWindow(H, SW_RESTORE);
                 SetForegroundWindow(H);
                 Windows.SetFocus(H);
             end;
не устанавливает фокус на старом окне. В книгах про такое не будет. (
Максим_maks вне форума Ответить с цитированием
Старый 19.04.2018, 02:42   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Ну тогда просто из чистого любопытства вопрос.
А нафига нужно по таймеру создавать файл с картинкой чего-то там?
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать активным окно. Winexcel Общие вопросы Delphi 7 26.01.2014 17:42
MainMenu сделать элемент активным lu_una Общие вопросы Delphi 3 19.11.2012 06:01
После запуска окно неактивно и активным никак не делается D][mon Общие вопросы Delphi 2 02.11.2010 12:50
Как сделать mail активным? Rebel123 Общие вопросы Delphi 3 02.09.2009 19:29
Сделать список активным ALev Microsoft Office Excel 3 02.07.2009 16:53