Fazendo um projeto de crowdsourced em Tela - página 14

 
Anatoli Kazharski:

ElementSet, onde você tem que especificar (1) propriedade e valor ou (2) propriedade, modificador e valor.

Sim, é universal em termos de acesso às propriedades de controle.

Geralmente o PropGet/Set é um bom mecanismo para lidar com classes de modelos quando a interface herdada é inicialmente desconhecida.


Mas quero trazer a discussão de volta à minha pergunta original - como posso fazer um "começo rápido" para um programador sobre o esquema de cores dos controles?

E é possível implementar não uma classe funcional (SetBgColor ou SetProp(Enum_Color, ), etc.), mas uma classe mais universal de atributos.
Para que todos os controladores pudessem acessar uma classe universal de atributos e o codificador pudesse facilmente entender qual cor é usada por qual controlador.

Mas tudo isso é o meu raciocínio em relação ao meu esquema. Não excluo que isso ainda vai mudar muito quando eu começar a transição. Portanto, tudo o que escrevi acima pode não ser mais relevante para o tópico em discussão aqui. )

Você deve desenvolvê-lo para uma conclusão satisfatória ) quanto mais os codificadores o entenderem, menor será o limiar para entrar também em suas classes de características.
 
o_O:

Em princípio, concordo que ficará claro que cores tem e o que pode ser mudado.

há uma pergunta então - o tema implica redundância de parâmetros não utilizados?

Sim, é redundante, para todas as variantes. Mas então é conveniente criar um novo tema, repintando e mudando os valores do anterior. Assim como os temas do Windows.

P.S.

E eu sou cético sobre mudanças em massa de alguns valores pelo codificador diferentes daqueles usados no tema atual. Isso me faz lembrar de um projeto Delphi onde a primeira coisa que você tenta fazer é pintar a interface com suas próprias cores que, posteriormente, não muda ao mudar o tema do sistema.

E por que manchar os estilos de design em algum lugar? Herdar uma classe temática de um dos temas existentes e refazer somente aqueles valores nela que precisam ser alterados.

 

existe esta tecnologia CSS

1) conhecido e bem documentado

2) familiar e versátil

3) tags==controles em princípio, o que o torna adequado para nossa tarefa


experimente, deve funcionar como pretendido.

 
o_O:

há uma tecnologia CSS


Depois vá direto para LESS / SCSS (SASS)
 
Igor Volodin:

Depois vá direto para LESS / SCSS (SASS)

ugh, Lass é provavelmente bom, mas não precisamos de sua funcionalidade. não estamos fazendo um intérprete.

Adotamos puramente o princípio de construir e redefinir estilos em cascata^seletiva^pontualmente - a maneira como eles fazem isso.

 

E não deixe de incluir uma opção de design responsivo para diferentes resoluções. Ver Consultas de Mídia no CSS

E algumas partes podem ser fixas em tamanho, enquanto outras podem se esticar o máximo que podem.

 

Prezados membros do fórum, não tenho nenhum desejo de desmotivar ninguém, mas na minha opinião, a tecnologia em discussão é tão complexa que não pode ser implementada por esforços conjuntos dispersos. Não podemos combinar eficazmente estes esforços, pois todos nós diferimos em níveis de compreensão, profissionalismo e abordagens... Também estamos separados por distâncias e até mesmo por países.

Minha conclusão é que esta tecnologia pode ser implementada por um único desenvolvedor que trabalhou longa e duramente nela. Talvez mais de um ano. Mas é improvável que esta pessoa se aproxime desta tecnologia porque ele se esforça demais, tem muita alma e simplesmente se esgota com este trabalho... O projeto é dele e ele tem o direito de não distribuí-lo livremente. (Talvez no início, mas nem sempre).

Creio que esta tecnologia já foi implementada na MQL.

P.S. Embora, mesmo que seja - por que não tentar implementá-lo novamente? ))

 
Igor Volodin:

Por que poderia ser útil:

1. A interface no bitmap é rápida. Tão rápido que é praticamente indistinguível da interface do sistema. Por exemplo, implementei elementos translúcidos com gradientes, emesmo quando eles se movem, eles são suavemente renderizados sem qualquer atraso visível, levando em conta a mistura de cores e o cálculo do canal alfa em outros objetos com gradientes translúcidos.

2. A interface é escalável. Você pode tornar a aplicação mais complexa e não vai diminuir a velocidade devido à eliminação e criação de um grande número de objetos gráficos. Os custos de redesenhar são mínimos, é apenas substituir um quadro, em milésimos de segundo.

3. Você pode criar controles prontos e fornecer a capacidade de criar novos controles, porque você pode fornecer seu próprio pool de eventos, por exemplo:

OnMouseDown - pressionado o LKM

OnMouseUp - pressione o botão do mouse

OnMouseHoverOn - passar o cursor do mouse sobre um objeto

OnMouseHoverOut - move o cursor do mouse para longe do objeto

OnMouseClick - pressione e clique dentro dos limites do objeto

OnMouseDblClick - clique duplo do mouse dentro dos limites do objeto

OnDragStart - evento que ocorre uma vez no início do movimento com o botão esquerdo do mouse pressionado

OnDragMove - evento gerado durante o movimento com o botão esquerdo do mouse

OnDragEnd - evento gerado após mudança com LKM

OnPut - objeto é lançado para outro objeto

OnGet - objeto é jogado em outro objeto

OnFocus - objeto tem foco

OnBlur - objeto perde o foco

OnResize - o objeto mudou de tamanho

OnParentResize - o objeto pai mudou de tamanho

OnKeyPress - uma tecla pressionada

OnChange - valor de um campo alterado

etc.

Você está exagerando um pouco no que se segue:

A velocidade na qual um bitmap é desenhado depende de seu tamanho. Se você redesenhar todo o bitmap representando a janela quando você redesenhar a peça, a resposta será lenta (verificada). A solução óbvia é ter apenas a área do bitmap pintada de novo.

Entretanto, para redesenhar apenas parte do padrão bitmap representando uma janela, você precisa armazenar a máscara digital do bitmap na memória (em uma matriz). Em seguida, você precisa navegar dentro desta máscara, e encontrar o padrão desejado dentro dela. No entanto, leve em conta que pode haver muitas janelas. Agora avalie a quantidade de memória necessária para armazenar as máscaras de todas as janelas. Você poderia criar um sistema prioritário para escolher quais janelas lembrar e quais "esquecer", e quando. No entanto, não é uma coisa fácil de se fazer.

Você tem que entender, redesenhar é reescrever valores em uma matriz, e se você precisar reescrever 1000000 valores (número aproximado de pixels na imagem da janela e no bitmap), não serão "milésimos de segundos", mas segundos. Portanto, você deve desenhar uma janela completamente apenas uma vez, salvá-la na memória e depois, em eventos, redesenhar cada objeto separadamente. Então, a velocidade será muito alta.

Aparentemente, você implementou apenas objetos separados, mas tente criar uma janela e implementar interatividade de seus elementos ali. Você entenderá o que quero dizer.

Quanto aos eventos citados, sua implementação no programa não está conectada com a tecnologia de controle de desenho e deve estar presente em qualquer interface.

 
Реter Konow:

...

Aparentemente, você só implementou objetos individuais, mas tente criar uma janela e implementar a interatividade de seus elementos ali. Você verá o que quero dizer.

...

Leia a partir deste post(link) e veja exemplos de gif-animações lá também.
Обсуждение статьи "Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1)"
Обсуждение статьи "Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1)"
  • www.mql5.com
Включение в проект классов для хранения указателей и обработки событий.
 
Реter Konow:

Você está exagerando um pouco o seguinte:

A velocidade de desenho do bitmap depende de seu tamanho. Se você repintar o bitmap inteiro representando uma janela, a resposta será lenta (testada). A solução óbvia é ter apenas a área da peça a ser repintada.

Entretanto, para redesenhar apenas parte de um desenho de bitmap representando uma janela, você precisa ter uma máscara digital desse bitmap armazenada na memória (em uma matriz). Em seguida, você precisa navegar dentro desta máscara, e encontrar a parte que deseja nela. No entanto, leve em conta que pode haver muitas janelas. Agora avalie a quantidade de memória necessária para armazenar as máscaras de todas as janelas. Você poderia criar um sistema prioritário para escolher quais janelas lembrar e quais "esquecer", e quando. No entanto, esta não é uma tarefa fácil.

Você tem que entender, redesenhar é reescrever valores em uma matriz, e se você quiser reescrever 1000000 valores (número aproximado de pixels na imagem da janela e no bitmap), serão segundos, e não "milésimos de segundo". Portanto, você deve desenhar uma janela completamente apenas uma vez, salvá-la na memória e depois, em eventos, redesenhar cada objeto separadamente. Então, a velocidade será muito alta.

Você provavelmente implementou apenas objetos únicos, mas tente criar uma janela e implementar interatividade de seus elementos lá. Você entenderá do que estou falando.

Quanto aos eventos citados, sua implementação no programa não está relacionada à tecnologia de controle de desenho e deve estar presente em qualquer interface.

Gostaria de fazer um pequeno esclarecimento:

Primeiro criamos uma máscara digital da janela com todos os seus elementos. Depois criamos um bitmap com ResourceCreate(). Temos nossa janela na tabela.

Então movemos o mouse sobre a interface desta janela e pegamos, por exemplo, o evento pontiagudo (_Objeto_Pontuado).

Descreverei duas abordagens de implementação da interatividade de objetos - uma ruim, a outra - melhor:

1. Se a máscara digital de nossa janela não foi salva na matriz após sua primeira criação, então para mudar qualquer detalhe do desenho daquela janela, precisamos recriá-la completamente. Ou seja, é preciso digitalizá-lo novamente. Isto por si só leva tempo porque é necessário inicializar a matriz com os valores de cor dos pixels de todos os padrões de janela para passá-la para ResourceCreate(). Quanto maior a janela e quanto mais detalhes ela contiver, mais demorará (cerca de 250 milissegundos a 2 segundos). E assim, em cada evento de cada elemento. Esta opção é muito defeituosa.

2. Se uma máscara numérica foi armazenada em uma matriz, só precisamos reinicializar aqueles valores que se relacionam com uma parte específica daquela janela. Encontramos essa parte na matriz e reescrevemos seus valores. A seguir, - enviamos a matriz para ResourceCreate() e imediatamente obtemos o resultado.

Essa é na verdade a tecnologia completa. Quase)))

Razão: