Discussão do artigo "Interfaces gráficas X: Seleção de texto na caixa de texto multilinha (build 13)"

 

Novo artigo Interfaces gráficas X: Seleção de texto na caixa de texto multilinha (build 13) foi publicado:

Este artigo implementará a possibilidade de selecionar o texto usando várias combinações de teclas e excluir o texto selecionado, da mesma maneira que é feito em outros editores de texto. Além disso, vamos continuar com a otimização do código e prepararemos as classes para avançar para o processo final do segundo estágio da evolução da biblioteca, onde todos os controles serão renderizados como imagens separadas (telas).

Fig. 8. Estrutura da biblioteca no atual estágio de desenvolvimento.

Autor: Anatoli Kazharski

 
Legal! Qual é o status da colagem a partir do buffer?
 
Igor Volodin:
Legal! Qual é o status da colagem a partir do buffer?


Ainda não entrei em contato com os desenvolvedores da servicedesk com essa solicitação.

Provavelmente, é necessário não apenas inserir a partir do buffer, mas também enviar para o buffer, para que você possa transferir texto entre os campos de entrada, se houver essa necessidade.

Provavelmente, precisamos da capacidade de lidar com eventos do sistema causados pelo pressionamento de Ctrl + X (cortar), Ctrl + C (copiar) e Ctrl + V (colar).

 
Você mostrará os novos elementos desenhados no próximo artigo? Isso seria muito curioso:)

Provavelmente você os implementará com base na classe CCanvas?
 
Реter Konow:
Isso vai ser curioso:)
Deixe-me explicar por que estou curioso sobre isso.

Sei, por minha própria experiência em desenvolvimento, que é muito mais fácil e rápido inventar e implementar novos "gadgets" do que consertar e reprojetar os fundamentos de sua tecnologia.

Entretanto, para cada transição para um nível qualitativamente novo, é necessariamente necessário reprojetar os mecanismos básicos. Isso tem consequências graves para todo o sistema. A grande reformulação é o estágio mais perigoso do desenvolvimento. Tudo desmorona quase até o chão e depois é recriado novamente. Nem todo mundo pode se atrever a fazer isso.

Até agora, você só avançou, ou seja, realizou a parte mais fácil do desenvolvimento: inventar coisas novas sobre a base antiga. Não houve reformulações sérias nos mecanismos básicos. Mas agora que a transição para elementos desenhados se tornou urgente, não é possível evitar um redesenho global. Uma interface desenhada requer pelo menos um mapa de objetos, e você não tem um. Mas isso são apenas as flores. A tecnologia é completamente diferente e você não pode fugir dela.

Não sei se você se atreverá a fazer essa reformulação global e como ela será feita. É por isso que estou curioso.

Desejo-lhe boa sorte.
 
Реter Konow:
Você mostrará os novos elementos desenhados no próximo artigo? Isso seria muito curioso:)

Provavelmente você os implementará com base na classe CCanvas?

1. Sim. Todos os elementos acabarão sendo elementos desenhados. Como parte do segundo estágio de desenvolvimento: 1 elemento=1 objeto (tela para desenho).

2. Sim. Assim como todos os elementos que já são desenhados, usamos essa classe CCanvas. Ela já tem métodos prontos para desenhar formas gráficas simples. É uma boa classe que, se não existisse, você mesmo teria de implementar. Nos elementos da biblioteca que já estão desenhados, são usados métodos para desenhar pixel por pixel e linhas, saída de texto, bem como formas como retângulo, retângulo com preenchimento.

 
Реter Konow:
...

Não sei se você decidirá fazer essa redistribuição global e como será para você. É por isso que estou curioso.

A abordagem OOP é muito mais simples do que você descreveu. As alterações no esquema de biblioteca já descrito anteriormente são mínimas. No final, tudo será ainda mais conveniente e muito melhor do que é agora.
 
Anatoli Kazharski:
A abordagem OOP é muito mais simples do que você descreveu. As alterações no esquema da biblioteca já descritas anteriormente são mínimas. No final, tudo será ainda mais conveniente e muito melhor do que é agora.

Essa mesma receita de desenvolvimento de sistema sem seu renascimento interno é completamente desconhecida para mim. É como um graal - eu quero acreditar que existe um, mas é improvável....


É claro que não é muito difícil desenhar um elemento. Quase tudo pode ser desenhado a partir de retângulos (exceto gradiente), mas outro modelo de evento deve ser criado. A função OnChartEvent() não fornecerá mais a fixação de eventos de clique no padrão do elemento desenhado. O Zorder para priorização também não ajudará. Há muito tempo, eu lhe falei sobre a criação de um mapa de objetos e listei suas vantagens, mas você recusou essa solução e, agora, não consegue ir a lugar algum sem ela.


Não há dúvida de que os elementos desenhados têm mais propriedades, e a interação com eles é muito mais complexa. Nessa tecnologia, o sistema deve ser mais holístico e os mecanismos, mais universais. Por exemplo, deve haver uma memória comum para todos os elementos da interface, contendo os valores de todas as suas propriedades. Essa é uma solução mais eficiente do que criar muitas matrizes e variáveis separadas em diferentes estruturas e classes. Todas as convenções de OOP (objetos de referência para acessar variáveis de outras classes das quais você precisa obter o valor de alguma propriedade de algum objeto, por exemplo) só atrasarão e complicarão o trabalho, não o simplificarão. A OOP tem mais uma desvantagem, por isso não me arrependo de não ter a vantagem de usar as classes de outras pessoas, como você faz. Um desenvolvedor que usa em seu desenvolvimento blocos criados por outras pessoas conhece seu desenvolvimento pior do que aquele que criou tudo sozinho e, além disso, está mais limitado na possibilidade de aprimoramento de seu desenvolvimento, não apenas porque o conhece pior, mas também porque não redesenhará os blocos de outras pessoas, já que isso não é fornecido pelo "estilo profissional" de desenvolvimento.


Tudo o que foi dito acima é apenas minha opinião e já terminei.


Verei com interesse o desenvolvimento futuro da biblioteca.

 
Реter Konow:

É claro que desenhar um elemento não é muito difícil. Quase tudo pode ser desenhado a partir de retângulos (exceto gradiente), mas outro modelo de evento deve ser criado. A função OnChartEvent() não fornecerá mais a fixação de eventos de clique nos detalhes do elemento desenhado. O Zorder para priorização também não ajudará. Há muito tempo, eu lhe falei sobre a criação de um mapa de objetos e listei suas vantagens, mas você recusou essa solução e, agora, não está em lugar algum sem ela.

Você está errado, como sempre. Aqui estão alguns exemplos, nos quais, mesmo no modelo atual, não tenho os problemas que você descreveu (veja as animações GIF abaixo). A mesa está desenhada e a interação com ela é um dos elementos mais complicados de todos os existentes, para não dizer o mais complicado. Além disso, esta ainda não é a versão final. Talvez já no próximo artigo haja um código final para essa tabela.


//---

Por favor, mostre-me como você implementou a mesma coisa.

//---

Retag Konow:

... Não há dúvida de que os elementos desenhados têm mais propriedades, e a interação com eles é muito mais complexa. Nessa tecnologia, o sistema deve ser mais holístico e os mecanismos mais universais. Por exemplo, deve haver uma memória comum para todos os elementos da interface, contendo os valores de todas as suas propriedades. Isso é mais eficiente do que criar muitas matrizes e variáveis separadas em diferentes estruturas e classes.

Acho que é muito mais fácil interagir com elementos desenhados. Gradualmente, tudo se tornará o mais universal possível. Na verdade, de artigo para artigo desta série, esse processo deve ser perceptível, se, é claro, você ler com atenção e não apenas olhar as imagens. Você pode criar uma memória compartilhada ou pode simplesmente fornecer acesso fácil de uma classe às propriedades de cada elemento, como eu fiz. Você não pode afirmar categoricamente que deve ser assim e não o contrário. Ninguém deve nada a ninguém. Em seus desenvolvimentos, você pode fazer o que lhe for conveniente. Eu prefiro ter minha própria opinião sobre esse ou aquele assunto. Como minha prática pessoal e experiência de vida me mostram, muito do que os outros dizem está errado. Ao mesmo tempo, não me excluo desse número. Mas não tenho medo de estar errado e, se estiver errado, simplesmente procuro uma maneira de corrigir o erro.

Retag Konow:

... Todas as convenções de OOP (objetos de referência para acessar variáveis de outras classes das quais você precisa obter o valor de alguma propriedade de algum objeto, por exemplo) só atrasam e complicam o trabalho, não o simplificam.

No seu caso - sim, no meu - não. )

Retag Konow:

A OOP tem mais uma desvantagem, pela qual não me arrependo de não ter a vantagem de usar as classes de outras pessoas, como você tem. Um desenvolvedor que usa blocos criados por outras pessoas em seu desenvolvimento conhece seu desenvolvimento pior do que aquele que criou tudo sozinho e, além disso, está mais limitado na possibilidade de aprimorar seu desenvolvimento, não só porque o conhece pior, mas também porque não redesenhará os blocos de outras pessoas, já que isso não é fornecido pelo "estilo profissional" de desenvolvimento.

Nesse caso, comece do zero e por conta própria. Escreva seu próprio sistema operacional, depois escreva um terminal de negociação com a linguagem MQL e, em seguida, comece a desenvolver sua própria biblioteca para criar interfaces gráficas. Depois de ter feito tudo isso, você poderá bater o calcanhar no peito com orgulho. )))

//---

P.S. E para mim a tarefa era:

  1. Praticar programação.
  2. Escrever para mim mesmo uma biblioteca para criar interfaces gráficas com uma qualidade que me satisfizesse.
  3. Compartilhar esse desenvolvimento com a comunidade MQL.
  4. Compensar, pelo menos parcialmente, os custos de mão de obra do desenvolvimento. Agradeço à MQ por apoiar o projeto.

Acho que o resultado foi muito bom. Pelo menos não sou o único a gostar do resultado. :)

 
Anatoli Kazharski:

Anatoly, já expus minha opinião e não quero entrar em outra discussão amarga com você.


Minhas tabelas não estão prontas, mas o exemplo que você demonstrou funciona da mesma forma. A tabela é interativa, há imagens nas células, caixas de seleção e até mesmo as colunas também mudam de largura. É claro que nem tudo funciona perfeitamente ainda.... A aparência é um pouco diferente. A adição de colunas e colunas ainda não foi implementada. Não vou mostrar isso aqui, ou serei banido por causa do PR novamente.

Tudo o que estou falando é sobre a experiência que adquiri no processo de trabalho árduo, e o fato de eu compartilhá-la não deve ser visto como hostil. Afinal de contas, quem mais aqui com você poderá discutir todas essas questões em pé de igualdade?


Boa sorte.

 
Реter Konow:

Anatoly, já expus minha opinião e não quero entrar em outra discussão amarga com você.

Tudo bem, não vou distraí-lo. )

Minhas tabelas não estão prontas, mas o exemplo que você demonstrou funciona da mesma forma. A tabela é interativa, há imagens nas células, caixas de seleção e até mesmo as colunas também mudam de largura. É claro que nem tudo funciona perfeitamente ainda.... A aparência é um pouco diferente. A adição de colunas e colunas ainda não foi implementada. Não mostrarei isso aqui, ou serei banido novamente por causa das relações públicas.

Você tem uma ótima oportunidade de ler artigos sobre esse tópico e até mesmo usar as soluções publicadas no código-fonte de forma fácil e simples, adaptando-as ao seu esquema.

Você pode publicar os resultados em seu blog. Estou acompanhando suas publicações. ;)