academiadocodigo / router4delphi Goto Github PK
View Code? Open in Web Editor NEWFramework para Criação de Rotas de Telas para FMX e VCL
License: MIT License
Framework para Criação de Rotas de Telas para FMX e VCL
License: MIT License
[dcc32 Error] DelphiUP.View.Layouts.Principal.pas(11): E2291 Missing implementation of interface method iRouter4DComponent.Render
Problema detectado apartir da versão 1.0.3 e 1.0.4 ao configurar TPrimeiraTela = class(TForm, iRouter4DComponent) o delphi não compilar fiz o downgrede para a versão 1.0.2 está funcionando perfeitamente.
A ideia da roteirização é boa mas não é a ideal, pois o correto seria ir empilhando cada rota(Tela) chamada e ao chamar o GoBack deve-se desempilhar a rota(Tela) e liberar de memória, pois no teste que fiz ao voltar para a rota(Tela) anterior e avançar para a mesma fechada os campos já vem preenchidos com os dados antigos, o que se torna um erro grave.
Com o empilhamento se resolve este problema e com isto teria que ter um método GoBack passando uma rota(tela) assim se consegue ir desempilhando as rotas(telas) até chegar na rota(tela) passada por parâmetro, com isto conseguimos voltar até a rota(tela) inicial ou até um ponto de fluxo que se deseja.
A função "TRouter4D.Render" não adiciona o formulário renderizado ao "history" de formulários. Dessa forma quando se cria um novo formulário a partir deste, a função TRouter4D.Link.GoBack não funciona.
Para reproduzir por favor siga os passos:
1 - TRouter4D.Render.SetElement(lytMain, lytMain);
2 - Dentro do PageMenu realize um TRouter4D.Link.&To('PageAlvo1');
3 - Dentro do PageAlvo1 realize um TRouter4D.Link.GoBack;
Entendo que a funcionalidade TRouter4D.Render deveria ter o mesmo comportamento da função TRouter4D.Link.&To no que diz respeito à adicionar o Form criado ao histórico "cache" de formulários;
Just my 0.02€, your project, you are the boss. Sounds interesting, but hard to figure out what it does and whats features it has.
-Tee-
Senti a necessidade de poder controlar a lista do History para poder implementar um botão Back num app, ou seja poder chamar a rota anterior da atual. Thulio solicitou que abrisse uma issue.
Decidi arriscar a fazer as alteraçoes e estão funcionando, gostaria poder contribuir com o projeto se é possível, não consegui fazer um pull request.
Fiz uma analise das possíveis soluções e acabei criando uma lista FLIstCacheOrder: TListque é preenchida por um evento OnKeyNotify disparado toda vez que uma Key da FListCache é adicionada ou eliminada.
Aproveitei também e criei uma function BreadCrumb que nos retorna a lista das rotas anteriores a atual.
Não sei se a solução implementada seja a melhor opção, caso achem interessante posso disponibilizar.
procedure TRouter4DHistory.CacheKeyNotify(Sender: TObject; const Key: string; Action: TCollectionNotification);
begin
inherited;
case Action of
cnAdded:
begin
Self.FListCacheOrder.Add(Key);
Self.FIndexCache := Self.FListCacheOrder.Count-1;
end;
cnRemoved:
begin
Self.FListCacheOrder.Remove(Key);
Self.FIndexCache := Self.FListCacheOrder.Count-1;
end;
end;
end;
function TRouter4DHistory.GoBack: string;
begin
if Self.FIndexCache > 0 then
Dec(Self.FIndexCache);
Result := Self.FListCacheOrder[Self.FIndexCache];
end;
function TRouter4DHistory.BreadCrumb(ADelimiter: char = '/'): string;
var i : integer;
begin
Result := '';
if Self.FIndexCache = -1 then
Exit;
Result := Self.FListCacheOrder[Self.FIndexCache];
for i := Self.FIndexCache-1 downto 0 do
begin
Result := Self.FListCacheOrder[i] + ADelimiter + Result;
end;
end;
function TRouter4DHistory.IndexCache: integer;
begin
Result := Self.FIndexCache;
end;
Atualizei o minha versão agora pouco e estou obtendo o seguinte erro:
[dcc32 Error] view.base.pas(16): E2291 Missing implementation of interface method iRouter4DComponent.Render
Os dois metodos estão implementados, pois já estavam funcionando da versão anterior.
O que posso fazer para corrigir?
O componente não está compilação em 64 bits, na versão Delphi 12.1
Erro :
[dcc64 Error] ObjectsMappers.pas(1183): E2251 Ambiguous overloaded call to 'Create'
System.JSON.pas(465): Related method: constructor TJSONNumber.Create(const Currency);
System.JSON.pas(461): Related method: constructor TJSONNumber.Create(const Extended);
Boa tarde Thulio Bittencourt, sobre esta biblioteca eu estava brincando com ele até aprofundei bastante com ele e tentei acrescentar algumas funções a mais, tipo se pudesse trabalha com frames e telas quando eu desse um create de cada formulário. ele criava 1 rotas pra mim e jogava render principal com o frames no panel, até ai tudo bem.
Por exemplo eu tenho 50 telas de consultas fora o cadastro, fazer um template só pra receber todas consultas e bem da hora não da problema nenhuma.
só que tipo não seria mais legal invés de fazer um template ja pronto igual uma consulta normal já pronto, fazer um template só com alguns panel sem nada, ai voce só trabalha com rotas com frames qnd der um create neste formulario no caso aciona a rota, vai criar e acionar outras rotas desses frames que vai trazer pra este template. oque você ia montar basicamente e trabalhar só com frames.
Exemplo: Você tem 3 telas de consultas que estar herdado neste template padrão sem nada somente alguns panel de menu e etc, ai você só cria o frames e ja configura nele e cria as rotas normal igual um TForm.
Quando eu faço esses teste na primeira vez quando eu aciono a rota e crio frames primeira vez ele funciona normalmente só que quando eu saio dessa rota e vou para outro template e volto do mesmo, a rota do template funciona e joga normal mais a outra rota que estava dentro deste template no evento pra acionar outra rota do frames ele ja não reconhece. ele traz o template mais não traz a outra. Mesmo matando e criando novamente ele destrói a existência deste frames, ele fala que iRouter4dComponent não foi implementado mesmo já implementado.
Ai estou preso nisto kkk achei bem legal este framework, se for trabalha com template padrão fazendo telas pronta ja configurado e joga, da pra trabalhar tranquilo assim sem problema. Mas acho que esse framework pode ir mais além de facilitar mais aplicação e trabalha com componentes visuals e fazer telas dinâmicas.
Se em alguma tela tiver um componente Listview com a propriedade ItemAppearance = DynamicAppearance
o componente gera um erro e memory leak ao fechar. Infelizmente não consegui resolver esse bug!
Olá a todos.
Estou com um problema assim:
. tenho um form modelo (layouts basicamente)
. herdei para um onde coloquei um listview - fiz binding para uma query minha (fd) que está em um datamodule. Funcionou.
. mudei mais algumas coisas e fui roda, não trazia os dados. Reparei que no live bindings ele deixa como invalido os campos, eu tenho que tirar o bindsource e refazer...fiz...depois parou novamente.
Estou com alguma coisa errada ou pode ser algum problema ?
Desde já, obrigado pela atenção
Estou tentando tratar quando o usuário clica no botão de voltar ir fazendo a navegação, mas o aplicativo fecha, já tentei configurar no onKeyUp do form porém o aplicativo fecha de qualquer forma, tem como fazer com o aplicativo volte pra ultima tela sem fechar o app?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.