Ajuda, Controle de Form....

Delphi

10/12/2004

Caros amigos estou com o seguinte problema.
Ao mandar um Form Minimizar, eu preciso passar a propriedade FormStyle de fsMDIChild, para fsStayOnTop, e hora que eu mandar restaurar o tamanho, ele deve passar a propriedade de fsStayOnTop para
fsMDIChild novamente. Alguem sabe como posso fazer isso?!

Atenciosamente

Luiz Claudio V. Santos


Luiz.claudio.vieira

Luiz.claudio.vieira

Curtidas 0

Respostas

Jc_analista

Jc_analista

10/12/2004

procedure TFrmmenu.WMSysCommand(var Msg: TWMSysCommand);
var
h:hwnd;
begin
if (Msg.CmdType = SC_MINIMIZE) then
form1.formstyle=fsstayontop;

if (Msg.CmdType = SC_MAMIXIZE) then
form1.formstyle=fsMDIchild;

DefaultHandler(Msg);
end;


GOSTEI 0
Luiz.claudio.vieira

Luiz.claudio.vieira

10/12/2004

Muito Obrigado colega.... :P


GOSTEI 0
Luiz.claudio.vieira

Luiz.claudio.vieira

10/12/2004

Caro amigo, desculpa a ignorância, mas não consegui usar o código! Ele vai em qual form?! O Mae ou o filho?! Como utilizo procedures?!

Um abraço e me desculpe a ignorância mais 1 vez...


GOSTEI 0
Jc_analista

Jc_analista

10/12/2004

Coloque no form mãe.


GOSTEI 0
Luiz.claudio.vieira

Luiz.claudio.vieira

10/12/2004

E pq ele aparece a mensagem de erro ao tentar compilar:
´undeclared indetifier: WMSysCommand´? como resolvo isso?!

Atenciosamente

Luiz Claudio V. Santos


GOSTEI 0
Martins

Martins

10/12/2004

E pq ele aparece a mensagem de erro ao tentar compilar: ´undeclared indetifier: WMSysCommand´? como resolvo isso?! Atenciosamente Luiz Claudio V. Santos


Veja

procedure TFrmmenu.WMSysCommand(var Msg: TWMSysCommand); 
var 
h:hwnd; 
begin 
if (Msg.CmdType = SC_MINIMIZE) then 
form1.formstyle=fsstayontop; 

if (Msg.CmdType = SC_MAMIXIZE) then 
form1.formstyle=fsMDIchild; 

DefaultHandler(Msg); 
end;


Esta é uma procedure [b:93974c331f]WMSysCommand(var Msg: TWMSysCommand);[/b:93974c331f]
então se vc fizer assim:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TFrmmenu = class(TForm)
private
{ Private declarations }

procedure WMSysCommand(var Message : TWMSysCommand) ;

public
{ Public declarations }
end;

var
Frmmenu: TFrmmenu;

implementation

{$R *.dfm}

procedure TFrmmenu.WMSysCommand(var Msg: TWMSysCommand); 
var 
h:hwnd; 
begin 
if (Msg.CmdType = SC_MINIMIZE) then 
frmmenu.formstyle=fsstayontop; 

if (Msg.CmdType = SC_MAMIXIZE) then 
frmmenu.formstyle=fsMDIchild; 

DefaultHandler(Msg); 
end;
end.


Espero q funcione agora!


GOSTEI 0
Luiz.claudio.vieira

Luiz.claudio.vieira

10/12/2004

Ai Martins, agora mudou o erro, esta ocasionando o seguinte erro!

Declaration of ´WMSysCommand´ differs from previous declaration

Desculpa se o erro e coisa banal, e pq eu ainda estou meio verde em procedures...


GOSTEI 0
Massuda

Massuda

10/12/2004

Como WMSysCommand não é uma simples procedure, mas sim um tratador de mensagens do Windows, o jeito correto de declarar essa procedure é
type 
  TFrmmenu = class(TForm)
  private
    procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND; 
    // ...
Tanto WM_SYSCOMMAND como TWMSysCommand são declarados na unit Messages.


GOSTEI 0
Massuda

Massuda

10/12/2004

Declaration of ´WMSysCommand´ differs from previous declaration

Isso está acontecendo porque na interface o argumento está como ´Message´
procedure WMSysCommand(var Message : TWMSysCommand) ; 
e na implementação está como ´Msg´
procedure TFrmmenu.WMSysCommand(var Msg: TWMSysCommand);

Deixe os dois iguais (sugestão: use ´Msg´) que resolve.


GOSTEI 0
Luiz.claudio.vieira

Luiz.claudio.vieira

10/12/2004

Ai galera o codigo compilou mais não funcionou não, ora que minimizo o Form ele não muda a propriedade do mesmo, nem quando eu maximizo... Pq será? :(


GOSTEI 0
Luiz.claudio.vieira

Luiz.claudio.vieira

10/12/2004

Bom amigos, depois de tanto encher o saco de vcs consegui resolver o problema e colocar o codigo pra funcionar, muito obrigado a todos...


GOSTEI 0
POSTAR