Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];

Вниз

Перемещение между окнами приложения   Найти похожие ветки 

 
3asys   (2002-11-19 17:10) [0]

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

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

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


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

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

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

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


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

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.

С уважением,


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

попробуй SetForegroundWindow


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

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

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.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
1-24970
grigoriy99
2002-12-25 16:07
2003.01.09
ActiveX


7-25115
ugin
2002-10-30 15:20
2003.01.09
Работа с LPT


3-24797
Cobalt
2002-12-11 22:57
2003.01.09
Через что работает 1С?


3-24807
Начинающий в АДО
2002-12-15 13:27
2003.01.09
ADO Слетает позиционирование при добавлении и при работе с 2 табл


3-24761
Bocman
2002-12-15 14:25
2003.01.09
LookUpComboBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский