Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida Com Código...


deio

Pergunta

com a ajuda do pessoal do fórum consegui um comando que cria tabsheets, e dgrids dentro do mesmo, só que agora eu preciso de um código que me diga o último DbGrid criado e adicione +1 no numero do seu nome, e coloque o resultado "DbGrid"+ (numero +1) em uma string.

Ex: último dbgrid criado "DbGrid7", a variável recebe "DbGrid8".

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Olá deio!

Tudo bom ?

Não sei se a idéia seria esta: você tem um TabSheet e através de algum comando são criadas n DBGrids dentro do TabSheet.

Existe algum número limite de DBGrids, por exemplo: o máximo de DBGrids existentes para cada TabSheet é 100 ?

Se não existir tal limite, é legal pensar na hipótese de utilizar um WHILE.

É por aí ou viajei muito ? ;D

Abraços ^_^

Link para o comentário
Compartilhar em outros sites

  • 0

hm...

acho que expliquei meio torto...

tenho um comando que cria tabsheets novos, e cada tabsheet tem um dbgrid, o problema é que o comando que cria o dbgrid está dentro do que cria tabsheets novos, como o pagecontrol (que é onde o tabsheet fica) tem um comando chamado pagecount, é facil da um novo nome pra cada tabsheet criado, é só colocar pagecount +1.

no caso do dbgrid, eu precisaria ou criar um contador sendo que o primeiro valor dele seria 2, pois já teria um tabsheet inicial com um dbgrid1 dentro dele, e dar inttostr do resultado desse contador e colocar numa variável como 'DbGrid' + inttostr(variável).

ou criar um comando que conte qntos dbgrid eu tenho e ao criar um nome aumentasse o valor ao lado do nome dgbrid (Ex : DbGrid3 vira DbGrid4)...

acho que dessa vez eu tenha explicado direito ¬¬'

Editado por deio
Link para o comentário
Compartilhar em outros sites

  • 0

deio, vou dar uma dica que não é a melhor do mundo mas é bem simplista, mas pode envolver alguns ajustes.

Crie uma variável do tipo TStringList, a cada classe de objeto instanciado, verifica na lista se a classe existe. Se existe você poderá obter o número do próximo; Se não existe, você poderá incluí-la. Utilize neste caso a propriedade Objects para armazenar o contador.

O exemplo a seguir pode ajudar a entender:

var
  Idx  :Integer;
  CompNum :LongInt;
  CompList :TStringList;
begin
  Idx := StringList.IndexOf(nome_classe);
  if Idx = -1 then
  begin
    CompNum := 0;
    Idx := StringList.AddObjects(nome_classe, Pointer(CompNum));   // inicializa com o primeiro válido, neste caso 1
  end;

  CompNum := LongInt(StringList.Objects[Idx]);  // obtém número na lista
  Inc(CompNum);  // gera novo
  StringList.Objects[Idx] := Pointer(CompNum);   // guarda o novo número
  <componente>.Name := <componente>.ClassName +IntToStr(CompNum);
  ...
end;

Talvez, como conveniência, fosse interessante prefixar o nome da classe com alguma coisa (tipo um 'MyDBGrid', 'MyButton', ...), porque isso evitaria qualquer conflito de nome com os componentes que você possa ter adicionado em design-time.

Outra solução, com um custo de processamento maior, digamos assim, seria desenvolver um algorítmo para varrer a lista de componentes (Form.Components) verificando a Classe do componente (se de acordo com a que você quer inserir), e obtendo o número que ao final do seu nome foi adicionada. Devem ser verificados todos os componentes, por isso acho mais custoso.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

está dando erro, o programa disse que "nome_classe" não foi identificado...

acho que um contador simples já deve resolver, pois o problema está no número que segue o nome "DbGrid", então (acho eu) que se fizer um contador simples, que toda vez que execute a função ele vá somando 1 ao resultado, é só na hora de colocar assim : name : 'DbGrid'+ inttostr(contador);

Editado por deio
Link para o comentário
Compartilhar em outros sites

  • 0
está dando erro, o programa disse que "nome_classe" não foi identificado...
deio, assim você "me quebra"!!!

Eu coloquei o que podemos chamar de um pseudo-código. Este nome_classe, é o nome da classe que você está criando, seja ela TDBGrid, TTabSheet, TButton, T.... Vai depender do seu programa, eu só dei a idéia - não o código pronto! <_<

acho que um contador simples já deve resolver, pois o problema está no número que segue o nome "DbGrid", então (acho eu) que se fizer um contador simples, que toda vez que execute a função ele vá somando 1 ao resultado, é só na hora de colocar assim : name : 'DbGrid'+ inttostr(contador);
Ótimo! Isso deve resolver sim. Eu é que sugeri algo muito amplo/avançado, desculpe.

Abraços

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...