Fórum Dúvida: Tags como em E-mails ou Fóruns no Delphi/Lazarus #591895

21/03/2018

0

Sou novo com programação.
Tenho dois forms de cadastro de clientes.
Tenho outros dois forms onde cadastro alguns produtos, a quantidade de produtos deve variar mais ou menos por 5 a 30 produtos no máximo (expectativa).

São dois forms, porque uso um pra mostrar os dados e quando clica num botão ('novo' ou 'editar'), abre o form com edits pra cadastrar ou editar.
ps: A exclusão nem abre o form de cadastro.

Cada cliente poderá ter um ou mais produtos, geralmente algo em torno de 5 a 10 (expectativa).
Tenho duas dúvidas.

1º - Como uso a tabela cliente_detalhe com a tabela cliente_principal?
Sei que tem a ver com coisa de chave primária, chave estrangeira, etc. Mas vendo exemplos na internet, não consegui entender de forma didática, só encontro um monte de videoaula de aplicações que usam isso. Seguindo as aulas, consigo fazer, já que uso a estrutura de tabela criada pelo 'professor', os comandos do 'professor', etc.
Criando minha própria aplicação, não consegui fazer isso.

2º - Como faço pra que no form de exibição dos clientes, os produtos apareçam como Tags?
Tipo essas tags em e-mail, fórum, etc. Por exemplo, na minha pergunta eu coloquei a tag 'Delphi'.
Gostaria que aparecesse em quadradinhos, dentro de um campo com a width predeterminada, caso chegue ao final, vá pra linha de baixo e vá descendo por scrollbar (ou não, dependendo eu faço um layout maior).
Feito isso, acredito que eu consigo aplicar cor nelas sozinho.

Ps: Não uso nenhum botão, faço praticamente tudo com panel pra ficar como eu quiser (Aparência e usabilidade).

Detalhei o máximo que acho necessário, se faltou algo, só pedir.
Alexander

Alexander

Responder

Posts

14/04/2018

Beno Silva

Se você tiver usando Delphi, pode usar os próprios templates que tem lá, para gerar forms Master/Detail. Se você não quiser usar o gerador de forms do próprio Delphi, acho que fica melhor assim: Crie um único form pra exibir os dados. Separe ele pra mostrar os dados de clientes e os produtos que ele comprou. Estuda um pouco de SQL. Vai te dar uma noção legal de como exibir teus dados por ordem de data ou numa quantidade específica. Voltando ao form: Escolhe na paleta Data Access (ainda é assim? Faz tempo que não uso Delphi. Só uso Typhon agora, que é a mesma coisa e é free). Seleciona dois TTables e dois TDataSets. Linka um TTable com a tabela de clientes, juntamente com um TDataSet. O outro TTable você linka com a tabela de vendas (que , acredito eu, deva ter um campo cliente), juntamente com o outro TDataSet. Na segunda tabela, você vai em MasterSource e escolhe o primeiro TDataSet. Depois, em MasterField, seleciona o campo de ID/Codigo do cliente. Por fim, seleciona LinkField e escolhe o campo de cliente, que está na tabela de vendas. Acho que é isso que você estava querendo.
Responder

Gostei + 0

20/04/2018

Alexander

Obrigado pela resposta, Beno.
De fato, pra fazer um conteúdo de um conteúdo, posso usar master/detalhe, mas eu já tinha feito isso, queria algo mais visualmente agradável.

Ainda não coloquei definitivamente em prática(mas sim em teste), porém já resolvi meu problema, como pode ver nas imagens anexas.
No número 1 da imagem, você vê exatamente o que eu precisava, fazer aparecer tags, assim como em fóruns, que flutuam na tela e mudam de acordo com o registro selecionado. Isso é feito com a tabela detalhe também (número 2 na imagem), onde salvo inclusive a cor de cada tag dessa (não está aparecendo na tela, fica oculto e só é possível ver na tela de cadastros).

[Tentei inserir as imagens aqui, mas não faço ideia de como fazer rs não tenho costume de usar fórum. Assim que descobrir, edito o post]

Mas o pulo do gato foi:
Quando... o form é criado, insiro novo registro, altero ou excluo, ou interajo com a grid master, ou seja, quando seleciono outro registro.
Eu verifico se existe algum panel com nome X1, se sim, excluo todos com nome X`número`. E mudo a variável `número` pra 1.
Depois disso, ou se não existir, ele conta quantos registros tem na detalhe.
E pra cada registro, ele cria um panel com nome X`número`.
Esse `número` é incrementado cada vez que cria um novo.

Não tenho certeza se ficou confuso, caso seja necessário, posso explicar um pouco melhor.
Gostaria inclusive de dizer que mesmo depois de pesquisar muito por aí, tive que desenvolver esse meu próprio jeito.
Se alguém souber alguma maneira melhor de fazer ou melhorar meu algoritmo em Lazarus v1.8.2 pra windows, aceito sugestões.

Abraço e obrigado pela ajuda anyway.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar