Form filho ocupando toda a area de trabalho do form pai
Olá, antes de mais nada quero dizer que procurei mas não encontrei pelos foruns o que eu preciso e por isso estou postando aqui.
vou explicar o que eu estou precisando.
Tenho um form que e do tipo fsMDIForm, e nele eu tenho um menu, uma StatusBar e futuramente uma barra de Botões, e os outros forms são todos do tipo fsMDIChild, o que eu preciso e o seguinte. Quando um form filho e aberto eu quero verificar o tamanho da tela do form pai que é o principal da aplicação e dimencionar o form filho [b:dd64195479]sem que o mesmo seja maximizado[/b:dd64195479], no tamanho da area de trabalho do form pai.
vou explicar o que eu estou precisando.
Tenho um form que e do tipo fsMDIForm, e nele eu tenho um menu, uma StatusBar e futuramente uma barra de Botões, e os outros forms são todos do tipo fsMDIChild, o que eu preciso e o seguinte. Quando um form filho e aberto eu quero verificar o tamanho da tela do form pai que é o principal da aplicação e dimencionar o form filho [b:dd64195479]sem que o mesmo seja maximizado[/b:dd64195479], no tamanho da area de trabalho do form pai.
Godzilla_xf
Curtidas 0
Respostas
Massuda
12/09/2007
Acho que isso deve funcionar. Inclua no seu form fsMDIChild...
type TSeuFormFilho = class(TForm) public procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; ... end; ... procedure TSeuFormFilho.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); var MainForm: TForm; Rect: TRect; begin if Showing then begin MainForm := Application.MainForm; // Obtem o retângulo da área cliente MDI Windows.GetWindowRect(MainForm.ClientHandle, Rect); // Ajusta a nova posição ALeft := Rect.Left; ATop := Rect.Top; AWidth := Rect.Right - Rect.Left; AHeight := Rect.Bottom - Rect.Top; end; inherited SetBounds(ALeft, ATop, AWidth, AHeight); end;
GOSTEI 0
Godzilla_xf
12/09/2007
Acho que isso deve funcionar. Inclua no seu form fsMDIChild...
type TSeuFormFilho = class(TForm) public procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; ... end; ... procedure TSeuFormFilho.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); var MainForm: TForm; Rect: TRect; begin if Showing then begin MainForm := Application.MainForm; // Obtem o retângulo da área cliente MDI Windows.GetWindowRect(MainForm.ClientHandle, Rect); // Ajusta a nova posição ALeft := Rect.Left; ATop := Rect.Top; AWidth := Rect.Right - Rect.Left; AHeight := Rect.Bottom - Rect.Top; end; inherited SetBounds(ALeft, ATop, AWidth, AHeight); end;
Olá, muito obrigado Massuda, pelo apoio, so que eu não entendi uma coisa.
eu usei a procedure que vc me passou que erda da da procedure SetBounds, so que o que eu não entendi e quando eu vou chamar ela, e que parametros eu passo para a mesma, por que da forma com eu fiz:
[b:540375816d]SetBounds(0,0,Application.MainForm.ClientWidth,Application.MainForm.ClientHeight);[/b:540375816d]
eu acredito que estou fazendo algo de errado, por que ele ajusta ao tamanho da area cliente do meu form pai, porem como eu tenho componentes do tipo [b:540375816d]TMainMenu, TTollBar e TStatusBar[/b:540375816d], o form pai cria umas barras de rolagem. o eu precisava que isso não acontese-se.
se o Sr. puder me ajudar ficarei grato, muito obrigado.
GOSTEI 0
Massuda
12/09/2007
...o que eu não entendi e quando eu vou chamar ela, e que parametros eu passo para a mesma
Você não precisa chamar a procedure, ela será chamada automaticamente. Não testei, me diga qual é o resultado.GOSTEI 0
Godzilla_xf
12/09/2007
Você não precisa chamar a procedure, ela será chamada automaticamente. Não testei, me diga qual é o resultado.
Olá, eu tentei [b:e11ab62e13] sem fazer [/b:e11ab62e13] a chamada da procedure e não acontece nada. e ai tentei chamá-la e passar os parâmetros e ai fica como citei acima
GOSTEI 0
Massuda
12/09/2007
Por favor, esqueça o que eu postei antes. Como eu disse, não testei :oops: . Experimente isto......chame PosicionarForm passando o form fsMDIChild como parametro logo após criar o form fsMDIChild.
procedure PosicionarForm(AForm: TForm); begin var Rect: TRect; begin Windows.GetWindowRect(Application.MainForm.ClientHandle, Rect); InflateRect(Rect, -2 * GetSystemMetrics(SM_CXBORDER), -2 * GetSystemMetrics(SM_CYBORDER)); OffsetRect(Rect, -Rect.Left, -Rect.Top); AForm.BoundsRect := Rect; end;
GOSTEI 0
Godzilla_xf
12/09/2007
Por favor, esqueça o que eu postei antes. Como eu disse, não testei :oops: . Experimente isto......chame PosicionarForm passando o form fsMDIChild como parametro logo após criar o form fsMDIChild.
procedure PosicionarForm(AForm: TForm); begin var Rect: TRect; begin Windows.GetWindowRect(Application.MainForm.ClientHandle, Rect); InflateRect(Rect, -2 * GetSystemMetrics(SM_CXBORDER), -2 * GetSystemMetrics(SM_CYBORDER)); OffsetRect(Rect, -Rect.Left, -Rect.Top); AForm.BoundsRect := Rect; end;
Olá, Massuda, como eu posso te agradecer, funcionou perfeitamente, muito obrigado mesmo. era o que eu precisava, vlw mesmo.
até ++++
GOSTEI 0