wilton_educasoft Posted May 28, 2015 Share Posted May 28, 2015 estou criando meu projeto e usando a classe TUniFrame e criando isso dentro de tabs do componente pagecontrol igual ao exemplo megademo em alguns momento preciso estando em um frame, alterar ou ter acesso a algum controle existente em outro uniframe como fazer isso? ex: estou no frmVendas e quero mudar o caption de um botao existe no frmclientes. (claro antes vou fazer um testes para saber se ele foi criado ou seja se esta em alguma das abas.. do pagecontrol. frameClientes.btnteste.caption :='novo caption'; Quote Link to comment Share on other sites More sharing options...
EmpresaMix Posted May 28, 2015 Share Posted May 28, 2015 Uso uma função para retornar o objeto do UniFrame se estiver criado ou crio o uniframe. Mas no form principal, veja se consegue adaptar para usar no frame atual. function TMainForm.NovaAba(FormFrame: TUniFrame; Nome_Action: string):TUniFrame; var TabSheet :TUniTabSheet; FCurrentFrame :TUniFrame; I,C :Integer; begin Mostra_Aluno; Result:=nil; PageControl.Visible:= True; {Verificando se a tela já está aberto e redicerionando a ela} for I := 0 to PageControl.PageCount - 1 do with PageControl do if Pages.Caption = Nome_Action then begin for C := 0 to Pages.ComponentCount-1 do begin if (Pages.Components[c].ClassParent = TUniFrame) then begin {Retorna a Instancia do frame ja existente} Result:=TUniFrame(Pages.Components[c]); break; end; end; PageControl.ActivePageIndex := I; Exit; end; TabSheet := TUniTabSheet.Create(Self); TabSheet.PageControl := PageControl; TabSheet.Caption := Nome_Action; TabSheet.Closable := True; FCurrentFrame:= TUniFrameClass(FormFrame).Create(TabSheet); Result:=FCurrentFrame; with FCurrentFrame do begin Align := alClient; Parent := TabSheet; end; Refresh; PageControl.ActivePage := TabSheet; end; Quote Link to comment Share on other sites More sharing options...
wilton_educasoft Posted May 30, 2015 Author Share Posted May 30, 2015 obrigado, o codigo de criacao do frame dentro do tabsheet eu ja possuo. o seu codigo nao consegui fazer foi a chamada do formulario, isso pq eu uso heranca. entao tenho um formx derivado de TUniFrame e um formY herdado de FormX o problema nao e criar o formulario, e fazer referencia a algum objeto dentro dele, ou ate mesmo passar parametros para o form, ex: setar uma variavel existente nele... e executar um procedimento... veja meu codigo para criar Procedure TFrmPrincipal.InsereTab(NomeForm,Titulo:String); Var Ts : TUniTabSheet; FrC : TUniFrameClass; Fr : TUniFrame; i : Integer; Begin For I := 0 to pgControlMain.PageCount-1 do Begin if pgControlMain.Pages.Caption=Titulo then Begin pgControlMain.ActivePageIndex :=i; Exit; End; End; Ts := TUniTabSheet.Create(Self); Ts.Closable := True; Ts.PageControl := pgControlMain; Ts.Caption := Titulo; FrC := TUniFrameClass(FindClass(NomeForm)); Fr := FrC.Create(Ts); Fr.Name := NomeForm; Fr.Align := alClient; Fr.Parent := Ts; pgControlMain.ActivePage := Ts; end; uso assim InsereTab('TfrmForm1', 'Titulo do Form1'); la no TFrmForm1 eu adiciono initialization RegisterClass(TfrmForm1); -- isso e necessario quando o form e do tipo TUNIFrame. agora como acessar um objeto que existe la no TFrmForm1? frmForm1.botao.caption :='xxxx'; ???? Quote Link to comment Share on other sites More sharing options...
EmpresaMix Posted May 30, 2015 Share Posted May 30, 2015 No caso do meu exemplo eu retorno (RESULT) a instancia do objeto que serve para acessar o objeto. pois no seu exemplo frmForm1 não está criado, voce deve ter uma forma de acessar no seu exemplo o Fr que é a instancia da classe que voce criou. tente no seu exemplo usar Fr.botao.caption:='xxxx' ou TUniFrameMeu(FR).botao.caption:='xxxx' que vai funcionar. voce pode salvar esta instancia Fr em um vetor e acessar fr[1].botao.caption:='xxx' e se tem classes acima da TUniFrame. voce precisa tipar a classe para acessar os objetos criados na sua classe. Exemplo: TUniFrameMEU(fr).botao.caption:='xxx'; ou fazer com o result como fiz assim retorna a instancia da classe criada. FR:=NovaAba(TUniFrameA,'TESTE') TUniFrameMEU(fr).botao.caption:='xxx'; veja se te ajuda. Quote Link to comment Share on other sites More sharing options...
wilton_educasoft Posted June 2, 2015 Author Share Posted June 2, 2015 da para passar um trecho do codigo pronto que voce usa, tipo no click de um botao fazer a referencia a um objeto la do outro frame.. bem como exemplo do uso da chamada do form. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.