Fórum Form Herdado - Mudança de quot;paiquot; #274420
29/03/2005
0
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
Curtir tópico
+ 0Posts
29/03/2005
Andremuller
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?
Gostei + 0
29/03/2005
Andremuller
Gostei + 0
30/03/2005
Gustavo_pacheco
Gostei + 0
30/03/2005
Andremuller
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?
Gostei + 0
30/03/2005
Gustavo_pacheco
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... :(
Gostei + 0
30/03/2005
Andremuller
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;
Gostei + 0
30/03/2005
Gustavo_pacheco
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 ...
Gostei + 0
30/03/2005
Andremuller
Ficaria melhor de avaliar isso
Gostei + 0
30/03/2005
Gustavo_pacheco
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;
Gostei + 0
30/03/2005
Andremuller
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.
Gostei + 0
30/03/2005
Gustavo_pacheco
Queria tentar resolver chamando o form de outro pai e não mudando o create...
Gostei + 0
30/03/2005
Andremuller
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
Gostei + 0
30/03/2005
Fred
Gostei + 0
30/03/2005
Gustavo_pacheco
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!
Gostei + 0
30/03/2005
Gustavo_pacheco
A propriedade VISIBLE é necessária para dar o SHOWMODAL...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)