Form Herdado - Mudança de quot;paiquot;
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
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
Curtidas 0
Respostas
Andremuller
29/03/2005
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?
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
Andremuller
29/03/2005
Esse ´Server?´ no final da mensagem era pra ser Serve?
GOSTEI 0
Gustavo_pacheco
29/03/2005
Já tentei mudar no constructor, mas o form ´pisca´ e é exatamente isso que o usuário não quer :? :(
GOSTEI 0
Andremuller
29/03/2005
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?
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
Gustavo_pacheco
29/03/2005
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:
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... :(
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
Andremuller
29/03/2005
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:
Depois faz a chamada passando a forma como tu quer que o form seja executado, tipo:
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
Gustavo_pacheco
29/03/2005
Eu já havia feito isso no .CREATE:
Então resolvi inverter a situação:
Depois disso começou a dar a mensagem de ACCESS VIOLATION
arrrgggth ...
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
Andremuller
29/03/2005
Tu poderia postar todo o código do teu create, inclusive o cabeçalho do método?
Ficaria melhor de avaliar isso
Ficaria melhor de avaliar isso
GOSTEI 0
Gustavo_pacheco
29/03/2005
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;
GOSTEI 0
Andremuller
29/03/2005
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.
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
Gustavo_pacheco
29/03/2005
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...
Queria tentar resolver chamando o form de outro pai e não mudando o create...
GOSTEI 0
Andremuller
29/03/2005
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
e no form1 fiz as seguintes chamadas
E funciona bem, esse seu ´pisca´ não consigo simular
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
Fred
29/03/2005
acho que nao entendi direito, mas... Porque vc esta usando a propriedade VISIBLE DO FORM??????????????????
GOSTEI 0
Gustavo_pacheco
29/03/2005
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!
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
Gustavo_pacheco
29/03/2005
Fred,
A propriedade VISIBLE é necessária para dar o SHOWMODAL...
A propriedade VISIBLE é necessária para dar o SHOWMODAL...
GOSTEI 0