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

Вниз

Хитрые окна   Найти похожие ветки 

 
RedArc   (2003-11-27 22:46) [0]

Здравствуйте!

Столкнулся с вот какой проблемой. Имею два приложения. Одно - главное.
У главного две формы: одна Align=alTop, другая Align=alBottom.
Запускаю из него второе приложение. Оно имеет три формы: одна Align=alLeft, другая Align=alClient и третье Align=alTop.

Так вот, хочется, чтобы при этом формы неглавного приложения вели себя как-будто они являются формами главного приложения. То есть, чтобы формы главного приложения были на экране, а формы неглавного приложения были бы внутри форм главного.

Если ничего не делать, то неглавное приложение закрывает формы главного приложения. Если сделать вот так:

TfMain = class(TForm)
procedure CreateParams(var Params: TCreateParams); override;
private
{ Private declarations }
FlagActiveHauptForm : Boolean;
public
{ Public declarations }
end;

procedure TfMain.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent:=GetDesktopWindow;
Params.ExStyle:=Params.ExStyle or WS_EX_TOPMOST;
end;


тогда формы главного окна перекрывают формы неглавного приложения. Как можно решить данную проблему?

Заранее благадарю за ответ.


 
Ig   (2003-11-27 23:13) [1]

>Так вот, хочется, что бы при этом формы неглавного приложения, >вели себя как-будто они являются формами главного приложения. >То есть, что бы формы главного приложения были на экране, а >формы неглавного приложения, были бы внутри форм главного.

Это, что?!? :)


 
RedArc   (2003-11-28 16:53) [2]

Я делаю менеджер задач в пакете программ.
Задачи менеджера:
1. Помочь настроить пользователю внешний вид модулей в пакете.
2. Помочь пользователю выбрать нужный подграф в графе пакета.
3. Обеспечить взаимодействие между модулями (по просьбе одного модуля стартовать другие модули и передавать между ними управление).

Всё сдела, всё работает. Менеджер имеет несколько окон. Теперь другая задача. Нужно, чтобы главное окно с кнопками именю (alTop) всегда оставалось на экране и не перекрывалось окнами модулей из пакета при их запуске. Точно так же, нужно, чтобы вторичное окно, располагающееся внизу экрана так же было всегда на виду. А все модули пакета располагали бы свои окна между этими двумя окнами менеджера. При этом, пакет может работать на экранах с различным разрешением.

Можно, конечно, просчитывать в модулях размеры выделяемой им области экрана. Но хочется более красивое решение.

Если речь идёт об окнах в одном модуле, то проблем нет. Два окна с атрибутоами alTop размещаются автоматически друг под другом (сверху то окно, которое первым было создано). Но если окна принадлежать разным модулям (под модулем подразумевается EXE-программа со своим графическим интерфейсом), то последнее созданное окно закрывает окно менеджера.

Если я делаю окно менеджера всегда видимым (пример кода приведён выше), то окно модуля "тонет" под ним.

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

Есть три пути решения:
1) Сделать окна менеджера фиксированной высоты и в каждом модуле разворачивать формы в пределах оставшейся области. Но не кузяво.
2) При запуске модулей я имею хэндлы их процессов. Можно из менеджера получить доступ к их окнам (а их больше одного в каждом модуле) и из менеджера настраивать их размеры. Муторно и некузяво.
3) Ограничить для всех процессов область экрана. Красиво и кузяво. Так делал менеджер из пакета ПРОМТ (переводчик текстов). Так делает менеджер Microsoft с быстрым доступом к элементам офиса. То есть, окна менеджеров всегда видны, а остальные программы (все программы, любые) работают только в свободной области и думают, что это и есть весь экран. Вот я это сделать и хочу, но не знаю как.


 
RedArc   (2003-11-28 16:59) [3]

Да вот, так ограничивает экран форма в MS Windows, которая находится (обычно) в самом низу экрана с кнопкой "пуск". Её же можно переместить вверх экрана, влево или вправо. Процессы, запускаемые в Windows не лезут на эту форму, а работают с оставшейся частью экрана как с полным экраном. Собственно, мне нужно, чтобы в менеджере было две таких формы: сверху и снизу экрана. Как это сделать?


 
RedArc   (2003-12-01 17:33) [4]

Ни на одном русском форуме ничего не нашёл. В FAQ то же глухо. На сайтах с MSDN по-русски - тишина. На сайте MicroSoft есть описания, но нет примеров. Однако нашёл форум, где очень много примеров на любой случай жизни. Буду копаться там. Посмотрите, может кому тоже будут интересны эти сайты:

http://www.mamma.com - очень хороший поисковик для программистов
http://www.delphipraxis.net - огромное количество примеров



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

Форум: "Основная";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
11-36589
Ал
2003-03-28 14:12
2003.12.12
Как правильно объявить и вызвать функц., доступную из всех Юнитов


3-36580
Duber
2003-11-19 16:00
2003.12.12
Есть ли СУБД в которых не нужно использовать посредников типа BDE


1-36736
Анна
2003-12-01 17:42
2003.12.12
Открытие других программ из приложения


1-36701
Ил_204
2003-12-02 16:39
2003.12.12
окно Messages


8-36766
F0rest
2003-08-18 20:03
2003.12.12
Формат PSD





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский