Консультация № 49990
23.07.2006, 21:11
0.00 руб.
0 5 3
Добрый день! Подскажите пожалуйста как при развертывании формы (State=wsMaximized) оно не развертывалось на весь экран, а чтобы сверху экрана оставалось свободное место, там бы отображалась главная форма программы, пример такой работы можно увидеть в самой Delphi.
Программа пишется в Delphi 7. MDI формы не рекомендовать.
Спасибо.

Обсуждение

Неизвестный
23.07.2006, 21:30
общий
это ответ
Здравствуйте, -=4G=-!

procedure TForm1.FormPaint(Sender: TObject);
begin
if Form1.WindowState=wsMaximized then
begin
Form1.Height:=Form1.Height-100;
Form1.Top:=100;
end;
end;
Неизвестный
23.07.2006, 21:43
общий
Полностью согласен. Что тут еще можно предложить, если вы не хотите использовать стандартные средства - только через ж...утко неудобные способы =)
Неизвестный
23.07.2006, 22:33
общий
это ответ
Здравствуйте, -=4G=-!
Если Вы заметили,в случае максимизации окна, то в том же Делфи, это окно разворачивыается на весь экран. Внизу код, который не позволяет дочерней форме разворачиваться на всю высоту экрана (насчет ширины думаю разберетесь сами).
Удачи!

Приложение:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight, MaxWidth, MaxHeight: Integer); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation uses unit2;{$R *.dfm}procedure TForm1.FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight, MaxWidth, MaxHeight: Integer);begin// устанавливаем для главного окна константы размеров MinWidth := 0; MinHeight := 100; MaxWidth := Screen.Width+5; MaxHeight := 100;end;procedure TForm1.Button1Click(Sender: TObject);begin // Создаем окно Application.CreateForm(TForm2, Form2); Form2.Visible := True;end;end.-----------------------------------------------------------------------------unit Unit2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm2 = class(TForm) procedure FormResize(Sender: TObject); procedure FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight, MaxWidth, MaxHeight: Integer); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementation uses Unit1;{$R *.dfm}procedure TForm2.FormResize(Sender: TObject);begin // указываем верхнюю позицию окна self.Top := Form1.Top + Form1.Height;end;procedure TForm2.FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight, MaxWidth, MaxHeight: Integer);begin // Максимально разрешенная высота окна MaxHeight := Screen.Height - (Form1.Top + Form1.Height+30);end;end.
Неизвестный
23.07.2006, 22:48
общий
По поводу ответа Mo-skin. Попробуйте использовать такой обработчик OnPaint - и посмотрите, что будет, если Ваше окно будет несколько раз перерисовываться в режиме wsMaximized - его высота будет постоянно уменьшаться на 100.
Неизвестный
24.07.2006, 17:31
общий
это ответ
Здравствуйте, -=4G=-!

Есть у формы свойство Constraints, у него надо выставить MaxHeight. Поведение получите, как у главного окна Delphi. Для оставления места сверху поставьте обработчик OnResize и там устанавливайте свойство Top в нужное Вам значение

Приложение:
ство
Форма ответа