Jump to content

ACESSAR OBJETO EM UM UNIFRAME APARTIR DE OUTRO UNIFRAME


wilton_educasoft

Recommended Posts

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';

 

 

 

 

 

Link to comment
Share on other sites

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;
 

 

Link to comment
Share on other sites

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';   ????
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...