deio Postado Maio 10, 2007 Denunciar Share Postado Maio 10, 2007 (editado) oi, gostaria de saber qual seria o comando para quando clicar em um botão criasse um novo page dentro do tabbednotebook, e dentro desse novo page criasse um DBGrid Editado Maio 10, 2007 por deio Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 11, 2007 Denunciar Share Postado Maio 11, 2007 oi, gostaria de saber qual seria o comando para quando clicar em um botão criasse um novo page dentro do tabbednotebook, e dentro desse novo page criasse um DBGriddeio, você utiliza o mesmo método aplicado a qualquer componente - Create. A questão, no caso dos componentes visuais (os descendentes de TWinControl), é que você tem que ajustar a propriedade Parent para apontar para o componente visual que mostrará o mesmo. Segue um ex.:procedure TForm2.Button2Click(Sender: TObject); begin TabbedNotebook1.Pages.Append('Aba '+IntToStr(TabbedNotebook1.Pages.Count)); with TDBGrid.Create(self) do begin Parent := TWinControl(TabbedNotebook1.Pages.Objects[TabbedNotebook1.Pages.Count -1]); Name := 'DBGrid1'; // *** este nome deve ser único Top := 8; Left := 8; Width := TabbedNotebook1.Width - 16; Height := TabbedNotebook1.Height - 16; end; end;Uma perguntinha... Porque você está utilizando o TabbedNoteBook (lá do Windows 3.1 - 16bits)? Acho que seria mais apropriado você utilizar as versões mais recentes TabControl ou PageControl (Windows - 32bits), com muito mais recursos (propriedades, metodos e eventos).Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Maio 11, 2007 Autor Denunciar Share Postado Maio 11, 2007 falta de conhecimento sobre a existência dos mesmos XDsendo assim, como seria o mesmo código para esse componente citado? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 12, 2007 Denunciar Share Postado Maio 12, 2007 O processo é o mesmo que o mencionado anteriormente: cria a guia, define seu parent, cria os componentes a inserir na guia, definindo a mesma como seu parent:procedure TForm3.BtnAddSheetClick(Sender: TObject); var TabSheet :TTabSheet; begin TabSheet := TTabSheet.Create(Self); TabSheet.Name := 'TabSheet'+IntToStr(PageControl1.PageCount +1); // garante nome único TabSheet.Caption := 'TabSheet '+IntToStr(PageControl1.PageCount +1); // efetiva a inserção no componente PageControl (equivale a setar o Parent no outro componente) TabSheet.PageControl := PageControl1; with TDBGrid.Create(self) do begin Parent := TabSheet; Name := 'DBGrid2'; Top := 8; Left := 8; Width := TabSheet.Width - 16; Height := TabSheet.Height - 16; end; end;Outras propriedades a serem inicializadas dependem da necessidade - se necessário consulte o help sobre o componente em questão. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Maio 14, 2007 Autor Denunciar Share Postado Maio 14, 2007 vlw, já ajudou bastante, agora que eu consegui o código para criar, estou tentando fazer o codigo para fechar a aba selecionada, o problema é que a nova aba é criada em tempo de execução e não sei como me referir a este novo componente criado... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 14, 2007 Denunciar Share Postado Maio 14, 2007 vlw, já ajudou bastante, agora que eu consegui o código para criar, estou tentando fazer o codigo para fechar a aba selecionada, o problema é que a nova aba é criada em tempo de execução e não sei como me referir a este novo componente criado...Se você prestou atenção aos comentários, você deve ter observado que deve dar um nome único para cada componente. Posto isso, utilize o método FindComponent(nome_componente) do seu form. Todos os componentes que tiveram como Owner o Form (self) estarão numa lista que poderá ser consultada com este método que retorna um TComponente (declare a variável para receber o retorno, teste se não é nula e depois apenas chame o Free dela) - dê uma olhada no help. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Maio 14, 2007 Autor Denunciar Share Postado Maio 14, 2007 acho que eu não perguntei direito, o componente não existe até que você execute tal função dentro do programa, e se você tentar declará-lo o delphi irá te dizer que ele não existe.Ex:executa o programaclica no button1o programa cria um button3clica no button2 e exclui o button3(esse button3 é criado enquanto você executa o programa, que antes de você executá-lo o componente não existia)espero ter deixado minha dúvida um pouco mais clara :lol: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 15, 2007 Denunciar Share Postado Maio 15, 2007 estou achando é que eu foi quem não explicou direito. :huh: Você não quer excluir um botão que você criou dinamicamente? Então, se você tem o nome dele na criação, você tem como localizá-lo e destruí-lo. Não é isso que você quer? Veja o código a seguir:procedure Form1.Button1Click(Sender :TObject); begin with TButton.Create(Self) do begin Name := 'Button3'; Left := 15; Top := 20; Parent := TabSheet1; end; end; procedure Form1.Button2Click(Sender :TObject); var Componente :TComponent; begin Componente := FindComponent('Button3'); if Assigned(Componente) then Componente.Free; end;Foi isso que eu quiz dizer no outro post Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Maio 15, 2007 Autor Denunciar Share Postado Maio 15, 2007 (editado) agora foi XDmicheus, está dando erro quando eu tento criar mais de um tabsheet, ele diz que já existe um DbGrid com esse nome...sabe aquele exemplo do tabsheet que tu escreveu neste tópico, como ficaria este exemplo pra fechar feito sobre aquele, ou seja, ao clicar num button, ele fecharia a nova aba.como ficaria para ao invés de fechar uma nova aba, ele fechasse a aba selecionada? Editado Maio 15, 2007 por deio Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 15, 2007 Denunciar Share Postado Maio 15, 2007 sabe aquele exemplo do tabsheet que tu escreveu neste tópico, como ficaria este exemplo pra fechar feito sobre aquele, ou seja, ao clicar num button, ele fecharia a nova aba.como ficaria para ao invés de fechar uma nova aba, ele fechasse a aba selecionada?A idéia é a mesma. Entretanto, como sua idéia é "matar" o mesmo e não apenas ocultar, é conveniente que os componentes adicionados à ela não a tenham apenas como Parent (local onde são desenhadas), mas sim, como Owner também. Isso garantirá que ao ser destruída (via método Free), esses componentes que a ela forma adicionados também o sejam.Para acessar a guia ativa (a TabSheet), você deve obter sua instância, que nesse caso seria a guia ativa no PageControl, ou seja, via propriedade PageControl.ActivePage.A forma mais elegante, digamos assim, seria você remover o componente de seu Owner para depois eliminá-lo. Por ex.:var Componente :TComponent; begin Componente := PageControl.ActivePage; PageControl.RemoveComponent(Componente); // remove-o da lista de componentes interna do Owner Componente.Free; end;Mas pelo que me lembro, o método anterior (mais simplista) também resulta na remoção correta do componente. É testar para ver.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 deio Postado Maio 16, 2007 Autor Denunciar Share Postado Maio 16, 2007 (editado) micheus, está dando erro quando eu tento criar mais de um tabsheet, ele diz que já existe um DbGrid com esse nome...falto só essa parte...meu DbGrid principal está com o nome de DbGrid1 mesmo, acho que precisa fazer um contador, que para cada dbgrid criado, adicione +1 no numero dele.Ex : Dbgrid4, Dbgrid5....consegui fazer o programa fechar a aba selecionada XD:(...) procedure Form1.Button2Click(Sender :TObject); var Componente :TComponent; begin Componente := FindComponent('Button3'); if Assigned(Componente) then Componente.Free; end; var Componente :TComponent; begin Componente := PageControl.ActivePage; PageControl.RemoveComponent(Componente); // remove-o da lista de componentes interna do Owner Componente.Free; end; o que eu fiz foi misturar o dois e deu certo e fiz o seguinte : (aprendi a usar essa janelinha XD ) var Componente :TComponent; begin Componente := PageControl.ActivePage; if Assigned(Componente) then Componente.Free; end; Editado Maio 16, 2007 por deio Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Maio 16, 2007 Denunciar Share Postado Maio 16, 2007 micheus, está dando erro quando eu tento criar mais de um tabsheet, ele diz que já existe um DbGrid com esse nome...falto só essa parte...meu DbGrid principal está com o nome de DbGrid1 mesmo, acho que precisa fazer um contador, que para cada dbgrid criado, adicione +1 no numero dele.Ex : Dbgrid4, Dbgrid5....no primeiro post que eu lhe respondi tem a seguinte linha no código:Name := 'DBGrid1'; // *** este nome deve ser únicono post seguinte:TabSheet.Name := 'TabSheet'+IntToStr(PageControl1.PageCount +1); // garante nome únicono seguinte:Se você prestou atenção aos comentários, você deve ter observado que deve dar um nome único para cada componente.e ainda no próximo:Você não quer excluir um botão que você criou dinamicamente? Então, se você tem o nome dele na criação, você tem como localizá-lo e destruí-lo.Acho que esta questão já está respondida, além do que parece-me que você já tem a resposta - por favor preste mais atenção ao ler os comentários. <_< consegui fazer o programa fechar a aba selecionada XDo que eu fiz foi misturar o dois e deu certo e fiz o seguinte :(aprendi a usar essa janelinha XD ) var Componente :TComponent; begin Componente := PageControl.ActivePage; if Assigned(Componente) then Componente.Free; end;Parabéns!!! :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
deio
oi, gostaria de saber qual seria o comando para quando clicar em um botão criasse um novo page dentro do tabbednotebook, e dentro desse novo page criasse um DBGrid
Editado por deioLink para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.