![]() |
|
|
#1
|
|||
|
|||
|
Подскажите пожалуйста, можно ли вообще так сделать, чтобы все подчиненные формы при перемещеении их не выходили за границы главной формы. как это можно сделать, если вообще возможно?
главная форма будет в развернутом состоянии, и не будет изменятся, только сворачиваться. подчиненные формы различных размеров, и при перемещении могут заходить за границы главной формы. |
|
#2
|
|||
|
|||
|
Что подразумевается под подчиненными формами?
|
|
#3
|
|||
|
|||
|
формы, которые запускаются при нажатии на определенные пункты меню с главной формы
|
|
#4
|
|||
|
|||
|
приложение MDI? MDI child формы имеете ввиду?
|
|
#5
|
|||
|
|||
|
нет. мне преподша посоветовала сделать обычные формы
получается у меня приложение не то? |
|
#6
|
|||
|
|||
|
Я вообщем делала так, создала несколько форм. сделала переходы и все. при запуске делфи спрашивал, какая из форм будет главной, что то вроде этого.
|
|
#7
|
|||
|
|||
|
Код:
procedure TForm1.Timer1Timer(Sender: TObject); begin If Form2.Left<Form1.Left then Form2.Left:=Form1.Left; If Form2.Top<Form1.Top then Form2.Top:=Form1.Top; if Form2.Left+Form2.Width>Form1.Left+Form1.Width then Form2.Left:=Form1.Left; if Form2.Left+Form2.Width>Form1.Left+Form1.Width then Form2.Width:=Form1.Width; if Form2.Top+Form2.Height>Form1.Top+Form1.Height then Form2.Top:=Form1.Top; if Form2.Top+Form2.Height>Form1.Top+Form1.Height then Form2.Height:=Form1.Height; end; |
|
#8
|
||||
|
||||
|
а зачем таймер? есть же message WM_WINDOWPOSCHANGING; да и не красиво будет по таймеру окно назад двигать. проще сразу не дать ему выезжать за границы главной формы.
Код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
procedure WMWINDOWPOSCHANGING(var Message: TMessage); message WM_WINDOWPOSCHANGING;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.WMWINDOWPOSCHANGING(var Message: TMessage);
begin
if PWindowPos(Message.LParam).x<Application.MainForm.Left then
PWindowPos(Message.LParam).x:=Application.MainForm.Left;
if PWindowPos(Message.LParam).y<Application.MainForm.Top then
PWindowPos(Message.LParam).y:=Application.MainForm.Top;
if PWindowPos(Message.LParam).x+PWindowPos(Message.LParam).cx>Application.MainForm.Left+Application.MainForm.Width
then PWindowPos(Message.LParam).x:=Application.MainForm.Left+Application.MainForm.Width-Width;
if PWindowPos(Message.LParam).y+PWindowPos(Message.LParam).cy>Application.MainForm.Top+Application.MainForm.Height
then PWindowPos(Message.LParam).y:=Application.MainForm.Top+Application.MainForm.Height-Height;
Message.Result:=DefWindowProc(Handle, Message.Msg, Message.WParam, Message.LParam);
end;
end. |
|
#9
|
|||
|
|||
|
Хороший вариант.
|
|
#10
|
|||
|
|||
|
Спасибо огромное! то что надо
![]() |