Форум: "Основная";
Текущий архив: 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