GARANTIR DESCONTO

Fórum Form Herdado - Mudança de quot;paiquot; #274420

29/03/2005

0

Oi galera;

Existe alguma forma de mudar o ´pai´ do form, ao criá-lo?

Exemplo: eu uso uma tela de GRID que, hora será chamada como fmMDIChild e hora deverá ser chamada como fsNORMAL, para poder dar showmodal.

Tem como trocar:
[b:bd59283c58]De[/b:bd59283c58] :arrow: TfmGrTipo = class(TfmMasterGrid)
[b:bd59283c58]Para[/b:bd59283c58] :arrow: TfmGrTipo = class(TfmMasterGrid[b:bd59283c58]ONLINE[/b:bd59283c58])

Valew


Gustavo_pacheco

Gustavo_pacheco

Responder

Posts

29/03/2005

Andremuller

acho que até daria pra fazer isso passando esse parâmetro no construtor da classe, mas não acho que seja uma boa idéia.

Não daria pra fazer algo do tipo

TfmGrTipo = class(TfmMasterGrid)
TfmGrTipoOnLine = class(TfmGrTipo)

Ou se isso for um caso comum para diversos forms eu faria da seguinte forma: passaria no construtor de TfmMasterGrid a forma como quero que ele seja executado e então essa função estaria implementada pra todos os forms, ou pega um ancestral ainda mais baixo.

Server?


Responder

Gostei + 0

29/03/2005

Andremuller

Esse ´Server?´ no final da mensagem era pra ser Serve?


Responder

Gostei + 0

30/03/2005

Gustavo_pacheco

Já tentei mudar no constructor, mas o form ´pisca´ e é exatamente isso que o usuário não quer :? :(


Responder

Gostei + 0

30/03/2005

Andremuller

O que você muda no construtor o ancestral ou a visualização?

Se for a visualização não faz muito sentido ele piscar porque a atualização é feita antes do show.

O que seria o piscar, ele aparece, desaparece e depois aparece novamente?


Responder

Gostei + 0

30/03/2005

Gustavo_pacheco

A principio eu só tinha o MASTERGRID do tipo FSMDICHILD para forms normais, com botão inclui, exclui, etc.

Então precisei que esses forms fossem utilizados para pesquisas , porém chamando com showmodal; só que para isso o form deveria ser do tipo FSNORMAL e o VISIBLE FALSE

No Create eu fiz assim:

if xPesquisa = true then
  fmGrTipo.formstyle := fsnormal;
  fmGrTipo.visible := false;
  fmGrTipo.showmodal
end;


Nessa de visible true/false é que ele pisca...

Então resolvi criar um MASTERGRIDONLINE já com as propriedades default, mas não consigo mudar o PARENT do grid em tempo de execução... :(


Responder

Gostei + 0

30/03/2005

Andremuller

agora entendi, o que você fez não foi escrever o construtor, foi colocar isso no evento OnCreate.

Olha só, a minha dica foi a seguinte:

Reescreve o construtor, como no exempo que segue:
type
  TForm2 = class(TForm)
  private
    { Private declarations }
  public
    constructor Create(AOwner: TComponent; AFormStyle: TFormStyle); reintroduce;
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

{ TForm2 }

constructor TForm2.Create(AOwner: TComponent; AFormStyle: TFormStyle);
begin
  inherited Create(AOwner);
  FormStyle := AFormStyle;
end;


Depois faz a chamada passando a forma como tu quer que o form seja executado, tipo:
  Form2 := TForm2.Create(Application, fsNormal);
  try
    Form2.ShowModal;
  finally
    FreeAndNil(Form2);
  end;



Responder

Gostei + 0

30/03/2005

Gustavo_pacheco

Eu já havia feito isso no .CREATE:

  if xSearch then
  begin
    FormStyle := fsNormal;
    Visible := false;
    Position := poScreenCenter;
  end;


Então resolvi inverter a situação:
  if not xSearch then
  begin
    FormStyle := fsMDIChild;
    Visible := true;
    Position := poMainFormCenter;
  end;


Depois disso começou a dar a mensagem de ACCESS VIOLATION

arrrgggth ...


Responder

Gostei + 0

30/03/2005

Andremuller

Tu poderia postar todo o código do teu create, inclusive o cabeçalho do método?

Ficaria melhor de avaliar isso


Responder

Gostei + 0

30/03/2005

Gustavo_pacheco

Lá vai:

constructor TfmMasterGrid.Create(Search:boolean=false;KeyAtu:integer=0);
begin
  xCreated := false;
  xKeyManut := 0;
  LimpaCampos;
  xKeyAtu := KeyAtu;
  xSearch := Search;
{
  if xSearch then
  begin
    FormStyle := fsNormal;
    Visible := false;
    Position := poScreenCenter;
  end;
}
  if not xSearch then
  begin
    FormStyle := fsMDIChild;
    Visible := true;
    Position := poMainFormCenter;
  end;

  inherited Create(Application);
  xConteudoPesq := ´´;
  xColuna := nil;
  HabBarrasSkin(self);
end;



Responder

Gostei + 0

30/03/2005

Andremuller

tu por acaso não devia estar executando o

inherited Create(Application);

antes de mais nada?

tem que ver em que ponto em específico está dando o acces violation, talvez seja porque tu está tentando acessar um atributo do form antes dele estar criado.


Responder

Gostei + 0

30/03/2005

Gustavo_pacheco

Vix... Piscou MENOS, mas agora meu form ficou totalmente preto...

Queria tentar resolver chamando o form de outro pai e não mudando o create...


Responder

Gostei + 0

30/03/2005

Andremuller

Mudar a herança não vai ter como e não sei mais como lhe ajudar.
Fiz a seguinte aplicação
criei um form2 com o seguinte construtor

constructor TForm2.Create(ANormal: Boolean);
begin
  inherited Create(Application);
  if ANormal then
  begin
    FormStyle := fsNormal;
    Position := poScreenCenter;
    Refresh;
    ShowModal;
  end
  else
  begin
    FormStyle := fsMDIChild;
    Position := poMainFormCenter;
  end;
end;


e no form1 fiz as seguintes chamadas

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(True);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Form2 := TForm2.Create(False);
end;


E funciona bem, esse seu ´pisca´ não consigo simular


Responder

Gostei + 0

30/03/2005

Fred

acho que nao entendi direito, mas... Porque vc esta usando a propriedade VISIBLE DO FORM??????????????????


Responder

Gostei + 0

30/03/2005

Gustavo_pacheco

Beleza cara, valeu mesmo...

Deve ser então algum outro problema de componentes (eu uso skin, vou ver com o suporte deles)

Mas de qq forma obrigadão pela força!


Responder

Gostei + 0

30/03/2005

Gustavo_pacheco

Fred,

A propriedade VISIBLE é necessária para dar o SHOWMODAL...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar