Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перемещение между окнами приложения [D6, Win95/98, Win2k]


3asys ©   (2002-11-19 17:10:00) 

Есть главная форма приложения (не MDI). В процессе работы создается еще несколько (произвольное количество) форм. Имена создаваемых форм записываются в StringList. Как дать пользователю возможность перемещаться с одного окна на другое в соответствии с их очередностью в StringList, по комбинации горячих клавиш (Ctrl-F1).
Использование SetActiveWindow и SetFocus эффекта не дают. Может быть кто-нибудь приведет маленький отрывок кода, если не трудно.

С Уважением, 3asys

P.S. Исходников моих перед глазами нет, поэтому не привожу, как я пытался это делать.


Александр Павлов   (2002-11-20 13:20:00) [1]

Вот пример, только что состряпаный, думаю, то, что нужно:

procedure TForm1.Action1Execute(Sender: TObject);
var

tgFirst, tgLast,

tgCurr, i : Integer;
begin

tgFirst := 2; // Первая форма в порядке перемещения
tgLast := 4; // Последняя форма в порядке перемещения

tgCurr := Screen.ActiveForm.Tag;
if tgCurr < tgFirst then tgCurr := tgFirst
else if tgCurr < tgLast then Inc(tgCurr)
else tgCurr := tgFirst;
for i := 0 to Screen.FormCount - 1 do
if Screen.Forms[i].Tag = tgCurr then
begin
Screen.Forms[i].Show;
Break;
end;
end;

Принцип перемещения - по кругу, при достижении последнего окна, показывается первое.

В примере используется св-во Tag форм.
При создании новых форм, св-во Tag необходимо инициализировать инкриментом, например, от единицы и далее.

Строки выделенные курсивом можно вынести за пределы процедуры.

В данном случае приложение с 4мя формами (главная + 3дочерних), св-во Tag первой -1, второй -2 и т.д.

Формы показываются в порядке 2-3-4.


Marcus   (2002-11-19 17:20:00) [2]

попробуй SetForegroundWindow


Игорь Шевченко   (2002-11-19 17:19:00) [3]

BringWindowToTop ?

The BringWindowToTop function brings the specified window to the top of the Z order. If the window is a top-level window, it is activated. If the window is a child window, the top-level parent window associated with the child window is activated.

С уважением,


3asys   (2002-11-19 17:15:00) [4]

P.S. Я определял текущее верхнее окно (GetForegroundWindow), а затем находил следующее после него в списке StringList и пытался сделать его активным (SetFocus, SetActiveWindow). Но результата не получил. Следующее окно активным не становится.

Как решить эту проблему? Любым, пусть другим способом?

С Уважением, 3asys


Наверх

Титульная страница Поиск, карта сайта Написать письмо