Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Create_resource(string Resource_name
Resource_name - quantas vezes ele muda? quantos recursos estão na memória?
Literalmente alguns. Depende de quantas janelas estiverem abertas. Atualmente estou trabalhando com 1 ou 2 janelas de cada vez. Cada janela tem 3-4 objetos de bitmap. Acontece que são cerca de 8 recursos. (acho que não basta abrandar...)
Atualização do Windows em eventos de interface (agora apenas em cliques, outros eventos desativados). Ao mesmo tempo, ele desacelera imediatamente, não depois de algum tempo. No primeiro clique. Além disso, posso ver claramente uma conexão entre a "potência de frenagem" e o tamanho da janela. Quanto maior a janela, mais lenta é a resposta da imagem.
E também note que ResourceCreate() não chega imediatamente, mas após "preencher" a matriz local com uma imagem, ou seja, após todos os cálculos de cores e inicialização da matriz de imagens. Eu acho que este é o problema.
A fim de chegar a uma conclusão final, vou armazenar a imagem em uma matriz estática ou global. Em eventos de interface, vou atualizar a janela imediatamente enviando ResourceCreate()- sem inicializar a matriz local e chamando ColorToARGB().
Se depois disso o efeito de desaceleração desaparecer - então o problema é o que eu descrevi. Se não - então o problema está em outra coisa.
Amanhã vou tentar verificar isso. Após a experiência, escreverei sobre os resultados.
rodá-lo com um perfilador.
@Peter Konow, por que tantas palavras em inglês no código?
Mudar para russo puro:
#define пока while
#define Печатать Print
void OnStart()
{
целочисленное номер = 0;
пока ( номер < 10 )
{
Печатать( "номер = ", номер, "!" );
номер ++;
}
}
@Peter Konow, por que tantas palavras em inglês no código?
Mudar para russo puro:
#define пустой void
#define пока while
#define Печатать Print
#define Начнем OnStart
пустой Начнем()
{
целочисленное номер = 0;
пока ( номер < 10 )
{
Печатать( "номер = ", номер, "!" );
номер ++;
}
}
Isso é ainda melhor.
#define пустой void
#define пока while
#define Печатать Print
#define Начнем OnStart
пустой Начнем()
{
целочисленное номер = 0;
пока ( номер < 10 )
{
Печатать( "номер = ", номер, "!" );
номер ++;
}
}
Isso é ainda melhor.
acrescentou: mudar 'perda' para 'lucro'.
etc....
#define цлк short // целое короткое
#define цлд long // целое длинное
#define плк float // плавающее короткое
#define пл double // плавающее
#define пст void // пустота
#define исток main
#define вывод Print
#define пока while
пст исток()
{
цл нмр = 0; // сокращение от номер.
пока( нмр < 10 )
{
вывод( "номер = ", нмр, "!" );
нмр ++;
}
}@Peter Konow, por que tantas palavras em inglês no código?
Mudar para russo puro:
#define пока while
#define Печатать Print
void OnStart()
{
целочисленное номер = 0;
пока ( номер < 10 )
{
Печатать( "номер = ", номер, "!" );
номер ++;
}
}
A sugestão é interessante, eu pensei sobre isso. No entanto, há vantagens em combinar dois idiomas.
Se um programa é escrito em apenas um idioma (mesmo se for o idioma nativo), a visão é gradualmente "encoberta" pela monotonia do texto.
A alternância da função russa e dos nomes de variáveis, e dos identificadores em inglês para eventos, propriedades, constantes e operadores, cria o contraste necessário para uma melhor leitura.
Portanto, eu não mudo completamente para o russo. Entretanto, o russo ainda domina, e ajuda muito a navegar em código grande.
Assim, com o início da primeira versão do trabalho de styling.
A implementação do esquema tem este aspecto
**************
enAttrName - lista (expansível) de atributos do elemento a ser renderizado
enum enAttrName // возможные аттрибутов контрола
{
// шрифт
anFontName, // имя
anFontColor, // цвет
anFontSize, // размер
anFontWeight, // толщина
anFontStyle, // стиль
// фон
anBackgroundColor, // цвет
anBackgroundFill, // заливка
// граница
anBorderColor, // цвет
anBorderWidth, // толщина
// выравнивание
anAlign,
anVAlign
по мере необходимости добавлять нужные аттрибуты
};
este atributo é armazenado em uma classe GAttr
{
enAttrName m_attr; // имя аттрибута
// его значение
long lval;
double dval;
string sval;
};
assemelha-se um pouco ao MqlParam, mas, ao contrário dele, é dependente da digitação.
------
então os atributos são agrupados em uma lista GAttrReflect. Esta lista se referirá a um determinado estado de uma determinada classe.
{
GAttr* m_list[]; // список аттрибутов класса для одного некоторого состояния
};
Uma característica importante desta classe é que um atributo não pode ser repetido duas vezes na m_list. Ao atualizar um atributo, ele será sobrescrito, ou um atributo será criado se ele não existir.
-------
Cada controle tem várias listas desse tipo. Cada um deles se refere a um reflexo do estado de um controle. Esta lista de reflexões é expansível.
{
arDefault, // состояние по-умолчанию
arDisable, // недоступен для ввода/неактивный
arTransp, // должен стать прозрачным
arSelect, // выбран
arCheck, // отмечен
arOver, // мышка над объектом
arFocus, // получен фокус ввода
по мере необходимости добавлять новые рефлекты
};
Assim, é possível definir atributos para cada controle (classe) para cada um de seus reflexos.
Uma classe - GAttrClass - armazena a lista de reflexão de uma classe em particular.
{
string m_class; // для какого класса составлен список
GAttrReflect reflect[arLast]; // список рефлектов класса
};
-------
E finalmente, a classe final, GThema, trata de todo o conjunto de classes que existem e são criadas por você.
{
GAttrClass* m_list[]; // список классов
};
Esta classe usa o mesmo princípio da lista de atributos - não podem existir duas classes com o mesmo nome na lista.
Graças à sobrecarga do operador[], podemos especificar convenientemente os nomes dos parâmetros.
g_thema["GButton"][arOver][anFontColor]=XRGB(255, 255, 255);
// или можно так
GAttrClass* at = g_thema["GButton"];
GAttrReflect* vl = at[arDefault];
vl[anFontColor] = XRGB(255, 255, 255);
---------
E finalmente, aqui está como obtemos o parâmetro de interesse do assunto da classe
1. Encontre a classe m_classe requerida na lista
2. Se for encontrado, procure por um reflexo nele,
3. Se for encontrado, então procuramos o atributo
4. Se nenhum atributo for encontrado, então procuramos um reflexo padrão e um atributo nele
Se o atributo não for encontrado no refletor padrão, repita os passos 1-4 para o nome da classe padrão (m_class=NULL), que é comum a todos os elementos.
---------
vantagem da abordagem:
- há sempre uma classe padrão com a qual você pode se dar bem e não criar novas classes.
- você pode usar apenas o padrão arDefault em vez de criar reflexos
- você não precisa especificar nenhuma propriedade em cada controle. Você só precisa adicionar a classe à GThema e copiar
- todos os atributos que não foram especificados na classe no refletor são obtidos hierarquicamente a partir do refletor padrão ou da classe padrão.