TForm
Code: |
private Procedure WMSize( Var msg: TWMSize ); Message WM_SIZE; ... Procedure TChildForm.WMSize( Var msg: TWMSize ); Begin inherited; If msg.SizeType = SIZE_MINIMIZED Then ... End; |
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Так как MDI-приложения всегда объединяют меню дочерних окон с главным меню родительского окна, вы можете установить определенное значение для указания позиции элементов меню в новой, объединенной строке меню. Это называется индексом группы. Но работает оно только для видимых пунктов меню.
Так, например, если ваше MDI-меню имеет:
[Файл] [Вид] [О программе] (со значениями индексов групп 1 5 10) (Значения не имеют никакого значения (извините за невольный каламбур), они используются только лишь для сортировки),
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Code: |
constructor TMainForm.Create(AOwner: TComponent); begin Inherited Create(AOwner); SetWindowLong(ClientHandle, GWL_EXSTYLE, GetWindowLong(ClientHandle, GWL_EXSTYLE) or WS_EX_CLIENTEDGE); SetWindowPos(ClientHandle, 0, 0, 0, 0, 0, swp_DrawFrame or swp_NoMove or swp_NoSize or swp_NoZOrder); end; |
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Когда во время разработки вы устанавливаете "DataSource"-свойство в БД-компонентах для указания на модуль данных, VCL во время выполнения приложения будет пытаться создать связь с существующим TDataModule, основываясь на его свойтсве Name. Так, если вы добавите модуль данных к вашему проекту и переместите его в свойстве проекта из колонки автоматически создаваемых форм в колонку доступных, вы сможете разработать форму, содержащую элементы управления для работы с базами данных, после чего несколькими строчками кода можете создать экземпляр формы, имеющий экземпляр собственного модуля данных.
С помощью Репозитория создайте "standard MDI application" (стандартное MDI-приложение), в котором модуль TMDICHild будет похож на приведенный ниже. Добавленные строки имеют комментарий {!}. Хитрости спрятаны в конструкторе create и задании другого порядка следования операторов.
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Если вам просто нужно отобразить всплывающие подсказки от элементов управления вашей дочерней формы, то сделайте это в вашей главной форме.
Объявите следующую процедуру в классе вашей главной формы:
Code: |
private {============================================================} { Процедура, вызываемая приложением всякий раз, когда } { приложение хотело бы показать всплывающую подсказку. } { Добавляет хинт на панель статуса. } {============================================================} procedure ShowHint(Sender : TObject); |
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Code: |
var ProjectWindow: TWndProject; begin If ProjectActive=false then begin LockWindowUpdate(ClientHandle); ProjectWindow:=TWndProject.Create(self); ProjectWindow.Left:=10; ProjectWindow.Top:=10; ProjectWindow.Width:=373; ProjecTwindow.Height:=222; ProjectWindow.Show; LockWindowUpdate(0); end; end; |
Используйте LockWindowUpdate перед созданием окна и после того, как создание будет завершено.
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
перевод одноимённой статьи с delphi.about.com)
Что такое MDI?
MDI расшифровывается как multiple document interface (многодокументный интерфейс). В приложениях с MDI, в основном (родительском) окне можно окрыть более одного дочернего окна. Данная возможность обычно используется в электронных таблицах или текстовых редакторах.
Каждое MDI приложение имеет три основные составляющие:
Одну (и только одну) родительскую форму MDI, Одну и более (обычно больше) дочерних форм MDI, и основное меню MDI.
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Автор: Richard Cox
Проблема, с котороя я столкнулся, заключается в том, что нижняя часть дочерней формы загораживает панель состояния родительской формы...
У меня была аналогичная проблема -- она проявлялась при условии, когда свойство главной формы WindowState устанавливалось на wsMinimized.
Вот мое решение: добавьте этот небольшой метод к вашей главной форме:
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Обрабатывайте событие OnClose для формы и выставляйте в нем параметр Action в caFree. Дело в том, что его значение по умолчанию
для MDI Child форм caMinimize. Кстати, если сделать Action := caNone, то форму нельзя будет закрыть
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Code: |
procedure TFormX.FormCreate(Sender: TObject); Var r: TRect; client: HWND; Begin client := application.mainform.clienthandle; Windows.GetClientRect( client, r ); MapWindowPoints( client, HWND_DESKTOP, r, 2 ); BoundsRect := r; End; |
- Подробности
- Родительская категория: TForm
- Категория: MDI приложения
Страница 3 из 8