Array
(
)

Disponibilizar os DBEdits autom., será que tem jeito?

Titanius
   - 26 dez 2005

Olá amigos, estou pensando em fazer algo desse tipo:

Teria um Dicionario de dados, no seguinte modelo (resumido)
NOMECAMPO
TAMANHO
TIPO

Pois bem, com isso eu leria este dicionário e montaria a tela (Form) automaticamente, leria tudo de uma tabela, e colocaria os DBEdits, Labels e etc.. tudo automatico, informando o tamanho e Caption e etc.. tudo isso guardado no dicionário de dados.,..


Será que é interessante isso? Alguém já fez algo parecido?

Desde já agradeço...


Eixox
   - 26 dez 2005

Havia um tempo atrás aqui no Fórum, um cara que tentava executar a mesma tarefa.

Acho que alguém indicou algo a ele. Porém, acredito que existe uma certa problemática envolvida em sua questão.

Você não terá somente que criar os campos, mas também deverá se preocupar com o tamanho do formulário, o número de campos inseridos e os seus respectivos tamanhos em pixels. Você deverá colocá-los de alguma forma ordenada em seu form e estabelecer um número mínimo e máximo de componentes para isso.

Existe um ferramenta comercial que faz isso. É ferrada e cada módulo é caríssimo. Você compra em pacotes e define em tempo real a criação da tabela, dos campos, dos tipos e relacionamentos - além disso, ainda pode organizar os elementos na janela de acordo com a sua vontade e também estabelecer a ordem de tabulação.

Realmente a aplicação é ferrada de boa - você ainda pode escolher até o tipo de banco de dados que irá trabalhar.

A sua pergunta é extremamente interessante, até porque nada disso é colocado na revista pelo que posso ver. Seria um artigo interessante e bacana para compor uma das matérias da Clube Delphi.

E outra coisa, já ví fazerem coisas do arco da velha com Delphi, acredito que isso não seria impossível de ser feito. Os próprios Wizards de formulários de banco de dados do Delphi fazem isso. Criam um form padrão para você.

Não ajudei muito, mas dei o pontapé inicial para a discussão


Thomaz_prg
   - 27 dez 2005

Eu fiz algo mais ou menos dessa forma... eu setava no banco qual a tabela que seria usada, qual o Caption do form, e quais campos da tabela eu gostaria que fossem mostrados... eu criava o form, o dataset, o datasource e 1 dbnavigator em tempo de execução a partir de uma matriz (herança). Os campos, eu deixei a cargo de um componente chamado DBPanel. Ele carregava os campos, já colocando os dbedit´s e label´s. Ficou razoável, pois ele não inseria os lookup´s então, só serviu para entrada de dados simples. Acabou compensando por tudo em dll´s e mandar a dll para o cliente, tipo, ele fazia o pedido, eu mando a dll com um script (para ser rodado no banco). O script já insere no menu o novo form.


Thomaz_prg
   - 27 dez 2005

Eu fiz algo mais ou menos dessa forma... eu setava no banco qual a tabela que seria usada, qual o Caption do form, e quais campos da tabela eu gostaria que fossem mostrados... eu criava o form, o dataset, o datasource e 1 dbnavigator em tempo de execução a partir de uma matriz (herança). Os campos, eu deixei a cargo de um componente chamado DBPanel. Ele carregava os campos, já colocando os dbedit´s e label´s. Ficou razoável, pois ele não inseria os lookup´s então, só serviu para entrada de dados simples. Acabou compensando por tudo em dll´s e mandar a dll para o cliente, tipo, ele fazia o pedido, eu mando a dll com um script (para ser rodado no banco). O script já insere no menu o novo form.


Titanius
   - 27 dez 2005

Olá amigos, acho esta discussão muito boa, pois infelizmente hoje nós trabalhamos com tempo curtíssimo, e se cada cliente pedir algo e você ter que mudar a tela toda é foda... Então pensei nisso, você ter algo do tipo Dicionário de Dados, e apartir dele você montar sua tela, claro que tem como montar Lookups, Grids e etc... com algum trabalho extra é lógico, como disso o amigo, já fizeram tanta coisa no delphi, que acredito eu isso ser fácil....

No BDS 2006, tem um componente chamado FlowPanel, que você informa a ele o que você quer criar, e ele monta a tela de acordo com o tamanho e etc.. porém isso é só no BDS2006, eu queria era mesmo montar algo desse tipo, pra ficar livre de Delphi, ou seja, eu poder migrar de um delphi para o outro sem problemas...


thomaz_prg, você poderia nos dar um exemplo de como você fez isso?Seria de grande ajuda.


[]s


Michael
   - 27 dez 2005

Olá!

Eu ia justamente sugerir o uso do TFlowPanel, introduzido no Delphi 2006. Eu já até pensei em incluí-lo em meus frameworks OO, para montar telas de entrada de dados automaticamente, exatamente como vc tbm pensou.

Em relação à versão do Delphi, acredito que ele venha, como toda a VCL, com o código-fonte, e vc pode portanto recompilá-lo em qualquer outra versão, fazendo mudanças, se necessário. E se eu estiver enganado quanto à disponibilidade deste código, basta criar o seu próprio componente. O Delphi 2006 ainda não chegou aqui na empresa, mas quando vier uma das primeiras coisas que vou fazer é ver se estes novos controles têm seus códigos-fonte. Acredito que sim.

[]´s


Titanius
   - 27 dez 2005

Fala michael...

Codigo-fonte ele tem... (eu acho), mas tipo, pelo exemplo que veio com o delphi, quando voce muda a tela, ele fica lento, sei lá.. achei meio lento pra montar a tela e dimensionar os componentes... de qualquer forma, ele é otimo... ele monta os componentes perfeitamente, tem que saber usar.. hehe...

o que eu ainda nao consegui foi fazer os componentes do modo que o label fique acima do TDBEdit, eu consegui colocar ele na frente, agora em cima eu não consegui.. :(

[]s


Titanius
   - 27 dez 2005

Só acrescentando...

Tentei achar o fonte do flowpanel e nao achei.. :(

Queria o fonte, pra tentar compilar ele no Delphi 7, pois todos os meus sistemas estão em Delphi 7, e tá dificil pra caraca mudar os componentes pro BDS2006... Ainda não consegui o ReportBuilder... vamos ver né...

[]s


Michael
   - 27 dez 2005

Na edição deste mês da revista ClubeDelphi o colega Adail Retamal escreveu um artigo falando dos novos componentes da VCL, mostrando em detalhes como configurar o comportamento do TFlowPanel. Acho que vc pode dizer como quer que os controles sejam posicionados, em alguma propriedade style.

Há ainda o TGridPanel, onde vc define linhas e colunas (como uma tabela) e ele coloca cada componente inserido dentro de uma célula. Se o número de componentes for maior do que a quantidade de células disponíveis, ele automaticamente adiciona tantas quanto forem necessárias para comportar tudo. Se vc não conseguir colocar o Label sobre o TDBEdit usando o TFlowPanel, tente este outro componente então.

[]´s


Michael
   - 27 dez 2005

Coloca um TFlowPanel no form, depois vai no código, pressione Ctrl e clique sobre o nome da classe TFlowPanel, na declaração da classe do formulário. O Delphi não abre o código-fonte dele não?

Se bem que sua versão é a trial, certo? Talvez ela não venha com os fontes da VCL...

[]´s


Titanius
   - 27 dez 2005

Olá michael, abrir ele abre.. mais tá em ExtCtrls... e lá tem coisa pra caramba, como não sei absolutamente nada de componente não sei o que eu faço com o codigo
Se quiser eu posso te passar pra vc ver...

[]s


Michael
   - 27 dez 2005

Mande a unit para meu email. michael.clubedelphi@bol.com.br . ;-)

Se tudo estiver ok, compilo aqui no D7 e te mando o DCU. Ou melhor, mando um pacote para vc instalar no seu Delphi.

[]´s


Titanius
   - 27 dez 2005


Citação:
Mande a unit para meu email. michael.clubedelphi@bol.com.br . ;-)

Se tudo estiver ok, compilo aqui no D7 e te mando o DCU. Ou melhor, mando um pacote para vc instalar no seu Delphi.

[]´s


Tá lá Michael... acabo de enviar..

[]s


Michael
   - 27 dez 2005

Kra, procura no fonte da ExtCtrls.pas o identificador TCMControlListChanging. Depois clica nele com Ctrl pressionado e me passa a unit tbm.

Preciso da implementação dele para poder compilar.

[]´s


Titanius
   - 27 dez 2005


Citação:
Kra, procura no fonte da ExtCtrls.pas o identificador TCMControlListChanging. Depois clica nele com Ctrl pressionado e me passa a unit tbm.

Preciso da implementação dele para poder compilar.

[]´s


Acabei de enviar Michael... o coisa de doido esse negócio de componentes tá, vixi... vai entrando em tudo quanto é unit.. hehe... :shock:

Se precisar de mais, pode pedir, ou se preferir envio tudo da pasta de source lá... :D

[]s
Fellipe H.


Martins
   - 27 dez 2005


Citação:

Citação:
Kra, procura no fonte da ExtCtrls.pas o identificador TCMControlListChanging. Depois clica nele com Ctrl pressionado e me passa a unit tbm.

Preciso da implementação dele para poder compilar.

[]´s


Acabei de enviar Michael... o coisa de doido esse negócio de componentes tá, vixi... vai entrando em tudo quanto é unit.. hehe... :shock:

Se precisar de mais, pode pedir, ou se preferir envio tudo da pasta de source lá... :D

[]s
Fellipe H.


Quando vcs terminarem, vcs poderiam publicar o resultado desse trabalho?

Valew!!!


Sourcecode
   - 27 dez 2005

Queria dar uma sugestão, até já pensei em fazer isso, mas nunca tive tempo; criar um componente, que desse pra criar um editor visual do form em si, desenhar, mas isso tudo somente para pegar as posições e tamanhos, aí salvaria isto tudo pra um arquivo, ou banco de dados, e na hora que chamasse uma função por exemplo: AbreTela(´Cadastro_Clientes.xml´); ele criaria um form padrão com o tamanho, componentes e ligações pré-estabelecidos no arquivo ou tabela, vou um pouco além, com isso daria pra alterar as telas no servidor de aplicações e deixar as máquinas clientes atualizadas instantaneamente... apesar de ser um pouco complexo de fazer, seria uma mão na roda pra atualizações, imagina não ter que recompilar nada pra mudar ou criar novas telas? Fica lançado o desafio, qualquer hora eu também implemento isso.


Titanius
   - 28 dez 2005


Citação:
Queria dar uma sugestão, até já pensei em fazer isso, mas nunca tive tempo; criar um componente, que desse pra criar um editor visual do form em si, desenhar, mas isso tudo somente para pegar as posições e tamanhos, aí salvaria isto tudo pra um arquivo, ou banco de dados, e na hora que chamasse uma função por exemplo: AbreTela(´Cadastro_Clientes.xml´); ele criaria um form padrão com o tamanho, componentes e ligações pré-estabelecidos no arquivo ou tabela, vou um pouco além, com isso daria pra alterar as telas no servidor de aplicações e deixar as máquinas clientes atualizadas instantaneamente... apesar de ser um pouco complexo de fazer, seria uma mão na roda pra atualizações, imagina não ter que recompilar nada pra mudar ou criar novas telas? Fica lançado o desafio, qualquer hora eu também implemento isso.


Sourcecode, existe um componente da Greatis que faz exatamente isso, você habilita o editor de form como se fosse do delphi, porémele salva o arquivo como sendo dfm mesmo, mas nada que uma modificação não daria resultado.. :D Mas neste caso precisariamos de um usuário experiente para manuseiar o sistema, desta outra maneira, que estamos vendo, basta adicionar o campo no DDe pronto...


[]s


Michael
   - 28 dez 2005

O componente da Greatis é ótimo, mas pago. Existem outros free e open source.

Sobre o TFlowPanel, Titanius, constatei que dará mais trabalho adaptar o código da VCL do Delphi 2006 do que criar um componente novo diretamente no Delphi 7. A Borland modificou muitas classes usadas pelo componente, adicionando novas propriedades, métodos etc, e fica uma loucura tentar ajustar isso.

Já tinha pensado em criar um TFlowPanel para o Delphi 7, e agora comprovo que esta é a saída. Do mais, não é difícil. Basta aproveitar o código da Borland.

[]´s


Titanius
   - 28 dez 2005

Realmente agora existe um componente da biblioteca JEDI que faz o que o Greatis faz.. muito bom....

quanto ao FlowPanel, realmente deve ser dificil, tah doido... muita coisa... :shock:


Khundalini
   - 28 dez 2005

Qual é esse componente da JEDI VCL que pode ser usado no lugar do TFlowControl? Eu gostaria de saber.

Sds,

Rubem Rocha
Manaus, AM