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
Muito, muito estranho. Em minha implementação da interface, não tenho uma única chamada para a função ChartRedraw().
Até agora, eu realmente não sabia por que ela é necessária.... Eu trabalho com telas (objetos bitmap) sem ela.
Quando há alguma dúvida, você pode rastrear essa ou aquela necessidade pelos desenvolvimentos da biblioteca padrão. Por exemplo, a classe CCanvas.
//| Atualizar o objeto na tela (redesenhar)|
//+------------------------------------------------------------------+
void CCustomCanvas::Update(const bool redraw)
{
//--- verificação
if(m_rcname==NULL)
return;
//--- atualizar o recurso e redesenhar
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format) && redraw)
ChartRedraw();
}
//---
Se você trabalhar sem ela, em algum momento perceberá que algo não está sendo exibido no momento mais inoportuno.
Konow tag:
Suponha que a função ChartRedraw() seja necessária, - então cada alteração de cada objeto exige o redesenho completo de todos os objetos?
Não sei. O sistema de terminal faz isso. Você pode tentar perguntar aos desenvolvedores do MQ. )
Quando houver dúvidas, você poderá rastrear essa ou aquela necessidade por meio dos desenvolvimentos da biblioteca padrão. Por exemplo, a classe CCanvas.
//| Atualizar o objeto na tela (redesenhar)|
//+------------------------------------------------------------------+
void CCustomCanvas::Update(const bool redraw)
{
//--- verificação
if(m_rcname==NULL)
return;
//--- atualizar o recurso e redesenhar
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format) && redraw)
ChartRedraw();
}
//---
Se você trabalhar sem ela, em algum momento se deparará com o fato de que algo não é exibido no momento mais inoportuno.
Eu não sei. Isso é tratado pelo sistema de terminal. Você pode tentar perguntar aos desenvolvedores. )
Em minha tecnologia, não há carga associada a essas coisas. As alterações de objetos são feitas ponto a ponto. ChartRedraw() não é chamado em lugar algum e não há necessidade disso. Portanto, essa pergunta deve ser feita aos seus desenvolvedores.)
Acredito que a otimização adicional de sua biblioteca depende da solução do problema de redesenhar o gráfico a cada alteração de cada objeto, o que não pode deixar de carregar o processador.
No entanto, meu conselho é: não goste muito de otimizar o código da biblioteca. Isso pode levar a uma reformulação global de todo o conceito de sua tecnologia. )
Em minha tecnologia, não há carga associada a essas coisas. As alterações de objetos são realizadas ponto a ponto. ChartRedraw() não é chamado em lugar algum e não há necessidade disso. Portanto, essa pergunta deve ser feita aos seus desenvolvedores.)
Acredito que a otimização adicional de sua biblioteca depende da solução do problema de redesenhar o gráfico a cada alteração de cada objeto, o que não pode deixar de carregar o processador.
Bem, ninguém mais sabe em que ambiente você está testando, exceto você. Se você não encontrou nenhum problema relacionado ao redesenho, você tem tudo pela frente. Tenho certeza disso, pois já passei por tudo isso há muito tempo. É claro que você manterá silêncio sobre isso porque não mostrará seu código a ninguém.
Entretanto, meu conselho é: não goste muito de otimizar o código da biblioteca. Isso pode levar a uma reformulação global de todo o conceito de sua tecnologia. )
Certifique-se de que você mesmo não precise repensar o conceito de sua tecnologia. )
Bem, ninguém mais sabe, exceto você, em que ambiente você realiza seus testes. Se você não encontrou nenhum problema com o redesenho, então você tem tudo pela frente. Tenho certeza disso, pois já passei por tudo isso há muito tempo. É claro que você manterá silêncio sobre isso porque não mostrará seu código a ninguém.
Apenas certifique-se de não ter que revisar o conceito de sua tecnologia por conta própria. )
Eu realmente não entendo do que você está falando. Você viu meus trabalhos. Em sua implementação, não há problemas com o redesenho, embora não haja nenhuma chamada para ChartRedrow() em nenhum lugar do programa.
Não sei que código devo mostrar para convencê-lo. Diga-me o que mostrar e eu lhe mostrarei.
Aqui está um exemplo da função "localizador" que implementei. (Para provar que não estou apenas inventando coisas).
{
static int Номер_окна,
Номер_последнего_объекта_в_окне,
Прежний_объект,
Прежнее_окно;
//-------------------
//////Alert(" All_open_windows ",All_open_windows);
//Se pelo menos uma janela estiver aberta, entre no loop para procurar a janela onde o cursor está localizado.
//Se nenhuma dessas janelas for encontrada e o contador de interações do loop tiver atingido o número total de janelas, retorne -1,
//o que significa que o cursor está no espaço livre do gráfico.
/Nota: a matriz "número da janela na fila" é indexada a partir de zero e o "contador de todas as janelas abertas" conta a partir de um.
//Assim, o número da célula da matriz que contém o número da janela de acordo com o contador é sempre um a menos que o valor do contador.
if(Всех_открытых_окон > 0)
{
for(int b = 0; b <= Всех_открытых_окон; b++)
{//////Alert("Object_name_under_cursor() number of window search interactions b = ",b);
//Se o número de interações atingir o valor do contador de janelas, isso significa que ultrapassamos a matriz onde os números dessas janelas estão armazenados,
//e, portanto, não encontrou nenhuma janela sob o cursor.
if(b == Всех_открытых_окон)
{
Номер_окна = -1;
//Havia um erro grave porque essas variáveis não eram redefinidas ao sair da zona da janela.
//------------------------------
ОКНО = 0;
ОБЪЕКТ = 0;
ЭЛЕМЕНТ = 0;
ТИП_ЭЛЕМЕНТА = 0;
КАТЕГОРИЯ_ОБЪЕКТА = 0;
ПОДКАТЕГОРИЯ_ОБЪЕКТА = 0;
ПОДГРУППА_ОБЪЕКТА = 0;
КАТЕГОРИЯ_ЭЛЕМЕНТА = 0;
КООРДИНАТА_ОКНА_X = 0;
КООРДИНАТА_ОКНА_Y = 0;
ШИРИНА_ОКНА = 0;
ВЫСОТА_ОКНА = 0;
НИЖНЯЯ_ТОЧКА_ОКНА = 0;
ПРАВАЯ_ТОЧКА_ОКНА = 0;
//-------------------
ТИП_ОКНА = 0;
КАТЕГОРИЯ_ОКНА = 0;
ОКНО_ВСЕГДА_СВЕРХУ = 0;
ОКНО_ПРИКРЕПЛЕНО = 0;
МАТЕРИНСКОЕ_ОКНО = 0;
ЗОНА_ОКНА = 0;
РЕЖИМ_ОТОБРАЖЕНИЯ_ОКНА = 0;
КАТЕГОРИЯ_МАТЕРИНСКОГО_ОКНА = 0;
//------------------------------
НОМЕР_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА = 0;
КАТЕГОРИЯ_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА = 0;
СОБЫТИЕ_СМЕНЫ_СОСТОЯНИЙ_ЭЛЕМЕНТА = 0;
ТЕКУЩЕЕ_СОСТОЯНИЕ_ЭЛЕМЕНТА = 0;
ЭЛЕМЕНТ_АКТИВИРОВАН = 0;
КАНВАС = 0;
//---------------------
if(Иконка_ручки)
{
ObjectDelete(Иконка_ручки);
Иконка_ручки = 0;
}
// return(-1);
}/**/
//------------
/Verificar se a janela está sob o cursor.
if(
X > G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_X]
&& X < G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_X] + G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_X_SIZE]
&& Y > G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_Y]
&& Y < G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_Y] + G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_Y_SIZE]
)
{
//---------------------------
ОКНО = Номер_окна_в_очереди[b];
//---------------------------
ТИП_ОКНА = G_CORE[ОКНО][_W_Properties][_WINDOW_TYPE];
КАТЕГОРИЯ_ОКНА = G_CORE[ОКНО][_W_Properties][_WINDOW_CATEGORY];
ОКНО_ВСЕГДА_СВЕРХУ = G_CORE[ОКНО][_W_Properties][_WINDOW_ALWAYS_ON_TOP];
//------------------------------
КООРДИНАТА_ОКНА_X = G_CORE[ОКНО][_MAIN_FRAME][_X];
КООРДИНАТА_ОКНА_Y = G_CORE[ОКНО][_MAIN_FRAME][_Y];
ШИРИНА_ОКНА = G_CORE[ОКНО][_MAIN_FRAME][_X_SIZE];
ВЫСОТА_ОКНА = G_CORE[ОКНО][_MAIN_FRAME][_Y_SIZE];
НИЖНЯЯ_ТОЧКА_ОКНА = КООРДИНАТА_ОКНА_Y + ВЫСОТА_ОКНА;
ПРАВАЯ_ТОЧКА_ОКНА = КООРДИНАТА_ОКНА_X + ШИРИНА_ОКНА;
//------------------------------
ОКНО_ПРИКРЕПЛЕНО = G_CORE[ОКНО][_W_Properties][_WINDOW_BIND_TO_WINDOW_NUMBER];
МАТЕРИНСКОЕ_ОКНО = ОКНО_ПРИКРЕПЛЕНО;
КАТЕГОРИЯ_МАТЕРИНСКОГО_ОКНА = G_CORE[МАТЕРИНСКОЕ_ОКНО][_W_Properties][_WINDOW_CATEGORY];
ЗОНА_ОКНА = G_CORE[ОКНО][_W_Properties][_WINDOW_ZONE];
//------------------------------
РЕЖИМ_ОТОБРАЖЕНИЯ_ОКНА = G_CORE[ОКНО][_W_Properties][_WINDOW_CURRENT_SIZE_MODE];
//------------------------------
break;
}
}
//-----------------------------------------
if(Прежнее_окно != ОКНО)
{//////Alert("Window_number != WINDOW");
for(int d = 1; d < 500; d++)
{
if(G_CORE[ОКНО][d][_NAME] == 0)
{
Номер_последнего_объекта_в_окне = d - 1;
break;
}
}
// ////Alert("Number_last_object_in_window ",Number_last_object_in_window);// Previous_window = Window;
}
//--------------------------------------------------------------------------------------
/Inicie o ciclo de busca do objeto sob o cursor a partir do último objeto da janela.
/Selecione o primeiro objeto correspondente sob o cursor e verifique se a hora de sua criação
// mais recente do que a última hora de criação registrada de qualquer outro objeto que também esteja localizado
//sob o cursor e verificado anteriormente, é o seu número que a variável global OBJECT aceita.
/No final do loop, o último e mais recente objeto sob o cursor permanece na variável OBJECT.
/Essa abordagem é necessária para determinar não apenas o primeiro objeto encontrado sob o cursor, mas esse objeto
//que pode obscurecer o primeiro objeto encontrado, já que ele foi redesenhado em um evento de alça ou rolagem,
//mas seu número na janela é anterior ao número do objeto sob o cursor, portanto, se interrompermos o loop,
//então simplesmente não chegaremos lá.
//---------------------------------------------------------------------------------------
int Последний_объект_под_курсором;
//--------------------------------------
for(int c = Номер_последнего_объекта_в_окне; c >= 1; c--)
{
if(
((G_CORE[ОКНО][c][_OBJ_TYPE] != Obj_Pixel && !G_CORE[ОКНО][c][_OBJECT_HIDE])
||(
G_CORE[ОКНО][c][_OBJ_TYPE] == Obj_Pixel
&& !G_CORE[ОКНО][c][_OBJECT_HIDE]
&& !G_CORE[ОКНО][G_CORE[ОКНО][c][_GROUP_MAIN_OBJECT]][_OBJECT_HIDE]
))
&& G_CORE[ОКНО][c][_OBJECT_CATEGORY] != _DEC //No lugar dessa entrada, faça com que a propriedade do objeto fique invisível para a função de coordenação.
&& X > G_CORE[ОКНО][c][_X] && X < (G_CORE[ОКНО][c][_X] + G_CORE[ОКНО][c][_X_SIZE])
&& Y > G_CORE[ОКНО][c][_Y] && Y < (G_CORE[ОКНО][c][_Y] + G_CORE[ОКНО][c][_Y_SIZE])
)
{
if(c != 1)Последний_объект_под_курсором = c;
ОБЪЕКТ = c;
//---------------------------------------------------------------
//Defina o foco de elementos, objetos, propriedades e parâmetros.
//---------------------------------------------------------------
ЭЛЕМЕНТ = G_CORE[ОКНО][ОБЪЕКТ] [_GROUP_MAIN_OBJECT];
КАНВАС = G_CORE[ОКНО][ОБЪЕКТ] [_DROWING_CANVAS];
ТИП_ЭЛЕМЕНТА = G_CORE[ОКНО][ЭЛЕМЕНТ][_OBJECT_GROUP];
КАТЕГОРИЯ_ОБЪЕКТА = G_CORE[ОКНО][ОБЪЕКТ] [_OBJECT_CATEGORY];
ПОДКАТЕГОРИЯ_ОБЪЕКТА = G_CORE[ОКНО][ОБЪЕКТ] [_OBJECT_SUBCATEGORY];
ПОДГРУППА_ОБЪЕКТА = G_CORE[ОКНО][ОБЪЕКТ] [_OBJECT_SUBGROUP];
КАТЕГОРИЯ_ЭЛЕМЕНТА = G_CORE[ОКНО][ЭЛЕМЕНТ][_OBJECT_CATEGORY];
//------------------------------
СОБЫТИЕ_СМЕНЫ_СОСТОЯНИЙ_ЭЛЕМЕНТА = G_CORE[ОКНО][ЭЛЕМЕНТ][_OBJECT_CHANGE_STATE_STANDART_EVENT];
ТЕКУЩЕЕ_СОСТОЯНИЕ_ЭЛЕМЕНТА = G_CORE[ОКНО][ЭЛЕМЕНТ][_CURRENT_STATE];
ЭЛЕМЕНТ_АКТИВИРОВАН = ТЕКУЩЕЕ_СОСТОЯНИЕ_ЭЛЕМЕНТА;
//------------------------------
НОМЕР_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА = G_CORE[ОКНО][ОБЪЕКТ][_WON];
КАТЕГОРИЯ_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА = G_CORE[НОМЕР_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА][_W_Properties][_WINDOW_CATEGORY];
//------------------------------
_Имя_объекта_под_курсором = G_CORE[ОКНО][ОБЪЕКТ][_NAME];
//------------------------------
if(!G_CORE[ОКНО][c][_OBJECT_SCROLLED] && ОБЪЕКТ != _MAIN_FRAME)break;
//------------------------------
if(c == 1 && Последний_объект_под_курсором != 0)ОБЪЕКТ = Последний_объект_под_курсором;
if(c == 1 && Последний_объект_под_курсором == 0)ОБЪЕКТ = _MAIN_FRAME;
}
//---------------------------------------------------------------
}
///Alerta("_Object_Name_under_Cursor ",_Object_Name_under_Cursor);
//-----------------------------------------
if(РЕЖИМ_ОТОБРАЖЕНИЯ_ОКНА != _MAXIMIZED_MODE)
{
int Тип_иконки = _NO_ICON;
//Верхний левый уголок-----------------------------------------
if(КАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_CATEGORY_WINDOW_HANDLE || КАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_CATEGORY_WINDOW_RESIZE_HANDLE)
{
//----------------------
if(ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_LEFT_HANDLE || ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_RIGHT_HANDLE)Тип_иконки = _RIGHT_n_LEFT_ARROW;
//-----------------------------------------
if(ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_BOTTOM_HANDLE)Тип_иконки = _UP_n_DOWN_ARROW;
//----------------------------
if(ПОДГРУППА_ОБЪЕКТА == _OBJECT_SUBCATEGORY_4_POINTS_TOOLBAR_HANDLE)Тип_иконки = _CROSSED_ARROWS;
//----------------------------
//Левый верхний уголок-----------------------------------------
if(X >= КООРДИНАТА_ОКНА_X && X <= КООРДИНАТА_ОКНА_X + 6 && Y >= КООРДИНАТА_ОКНА_Y && Y <= КООРДИНАТА_ОКНА_Y + 6)
{
Тип_иконки = _UP_LEFT_to_DOWN_RIGHT_ARROW;
ОБЪЕКТ = 400000;
}
//Левый нижний уголок-----------------------------------------
if(X >= КООРДИНАТА_ОКНА_X && (X <= КООРДИНАТА_ОКНА_X + 5) && Y >= (НИЖНЯЯ_ТОЧКА_ОКНА - 5) && Y <= НИЖНЯЯ_ТОЧКА_ОКНА)
{
Тип_иконки = _UP_RIGHT_to_DOWN_LEFT_ARROW;
ОБЪЕКТ = 500000;
}
//Правый верхний уголок-----------------------------------------
if(X >= (ПРАВАЯ_ТОЧКА_ОКНА - 5) && X <= ПРАВАЯ_ТОЧКА_ОКНА && Y >= КООРДИНАТА_ОКНА_Y && Y <= (КООРДИНАТА_ОКНА_Y + 5))
{
Тип_иконки = _UP_RIGHT_to_DOWN_LEFT_ARROW;
ОБЪЕКТ = 600000;
}
//Правый нижний уголок-----------------------------------------
if(X >= (ПРАВАЯ_ТОЧКА_ОКНА - 5) && X <= ПРАВАЯ_ТОЧКА_ОКНА && Y >= (НИЖНЯЯ_ТОЧКА_ОКНА - 5)&& Y <= НИЖНЯЯ_ТОЧКА_ОКНА)
{
Тип_иконки = _UP_LEFT_to_DOWN_RIGHT_ARROW;
ОБЪЕКТ = 700000;
}
//-----------------------------------------
if(X >= (КООРДИНАТА_ОКНА_X + 6) && X <= (ПРАВАЯ_ТОЧКА_ОКНА - 6) && Y >= КООРДИНАТА_ОКНА_Y && Y <= (КООРДИНАТА_ОКНА_Y + 6))
{
Тип_иконки = _UP_n_DOWN_ARROW;
ОБЪЕКТ = 800000;
}
//-----------------------------------------
if(ОКНО_ПРИКРЕПЛЕНО)
{
if(ЗОНА_ОКНА == 1 || ЗОНА_ОКНА == 10)
{
if((ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_LEFT_HANDLE || ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_RIGHT_HANDLE)
&& ((X >= КООРДИНАТА_ОКНА_X && X <= (КООРДИНАТА_ОКНА_X + 2)) || (X >= ((ПРАВАЯ_ТОЧКА_ОКНА) - 2) && X <= (ПРАВАЯ_ТОЧКА_ОКНА))))
{
Тип_иконки = _MULTI_HANDLE_LR;
}
}
//-----------------------------------------
if(ЗОНА_ОКНА == 6 || ЗОНА_ОКНА == 3)
{
if(ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_BOTTOM_HANDLE && ((Y >= (НИЖНЯЯ_ТОЧКА_ОКНА) - 2) && (Y <= (НИЖНЯЯ_ТОЧКА_ОКНА))))
{
Тип_иконки = _MULTI_HANDLE_UD;
}
}
//-----------------------------------------
if(ЗОНА_ОКНА == 7 || ЗОНА_ОКНА == 4)
{
if((ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_BOTTOM_HANDLE || ОБЪЕКТ == _STANDART_OBJECT_HEAD_DOWN_HANDLE)
&& (((Y >= (НИЖНЯЯ_ТОЧКА_ОКНА) - 2) && Y <= (НИЖНЯЯ_ТОЧКА_ОКНА)) ||(Y >= КООРДИНАТА_ОКНА_Y && Y <= (КООРДИНАТА_ОКНА_Y + 3))))
{
Тип_иконки = _MULTI_HANDLE_UD;
}
}
//-----------------------------------------
if(ЗОНА_ОКНА == 8 || ЗОНА_ОКНА == 5)
{
if(Y >= КООРДИНАТА_ОКНА_Y && Y <= (КООРДИНАТА_ОКНА_Y + 3))
{
Тип_иконки = _MULTI_HANDLE_UD;
}
}
}
//-----------------------------------------
//-----------------------------------------
if(Иконка_ручки != Тип_иконки && Тип_иконки != _NO_ICON)
{
ObjectDelete(Иконка_ручки);
Иконка_ручки = Тип_иконки;
Создать_иконку(Иконка_ручки);
}
Перемещать_иконку_за_курсором();
//------------------------------------------
}
if(Событие_Left_Click && Тип_иконки != _NO_ICON)Перемещение_окна = 1;
//------------------------------------------
if(Иконка_ручки && Тип_иконки == _NO_ICON)
{
ObjectDelete(Иконка_ручки);
Иконка_ручки = 0;
}
//-----------------------------
}
//Corrigir eventos _OBJECT_DISAPPOINTED e _OBJECT_POINTED e se o objeto tiver um script para esses eventos,
//chamar o bloco de comportamento do objeto para implementá-lo.
//-----------------------------------------------------
if(Прежний_объект != ОБЪЕКТ)
{
int Номер_вызываемого_окна_прежнего_объекта = G_CORE[Прежнее_окно][Прежний_объект][_OBJECT_OPEN_CLOSE_WINDOW_FUNCTION];
int Категория_вызываемого_окна_прежнего_объекта = G_CORE[Номер_вызываемого_окна_прежнего_объекта][_W_Properties][_WINDOW_CATEGORY];
int Номер_вызываемого_окна = G_CORE[ОКНО][ОБЪЕКТ][_OBJECT_OPEN_CLOSE_WINDOW_FUNCTION];
int Категория_вызываемого_окна = G_CORE[Номер_вызываемого_окна][_W_Properties][_WINDOW_CATEGORY];
int Сценарий_DISAPPOINTED_прежнего_объекта = G_CORE[Прежнее_окно][Прежний_объект][_OBJECT_DISAPPOINTED];
int Тип_элемента_прежнего_объекта = G_CORE[Прежнее_окно][Прежний_объект][_OBJECT_GROUP];
//---------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
//Realize o comportamento das janelas do menu principal quando o sinalizador "Open_window_menu" estiver definido ---------------------------
//Se o novo objeto sob o cursor for uma guia do menu principal, feche as janelas de menu da guia anterior e abra o menu dessa guia.
//O bloco implementa a abertura e o fechamento sequenciais das janelas de menu quando o cursor se move pelas guias do menu principal.
//-------------------------------------------------------------------------------------------------------------
if(Открыто_окно_меню)
{//////Alert(OBJECT);
//---------------
if(
Открыто_окно[Номер_вызываемого_окна_прежнего_объекта]
&& Категория_вызываемого_окна_прежнего_объекта == _CONTEXT_MENU
&& ОКНО != Номер_вызываемого_окна_прежнего_объекта
)
{
Явление_окон(_CONTEXT_MENU_WINDOWS_TOTAL_CLOSE,_CONTEXT_MENU);
}
//---------------
//////Alert("Called_window_number ",Called_window_number, " Called_window_category ",Called_window_category);
//----------------------------------------------------------------------------------------------------------
if(Категория_вызываемого_окна == _MAIN_MENU && !Открыто_окно[Номер_вызываемого_окна])
{
Явление_окон(_MAIN_MENU_WINDOWS_TOTAL_CLOSE,_MAIN_MENU);
Явление_окон(_WINDOW_OPEN,Номер_вызываемого_окна);
}
//---------------
if(Категория_вызываемого_окна == _CONTEXT_MENU && !Открыто_окно[Номер_вызываемого_окна])
{
Явление_окон(_WINDOW_OPEN,Номер_вызываемого_окна);
}
//---------------
}
//-----------------------------------------------
СОБЫТИЕ = _OBJECT_DISAPPOINTED;
//-----------------------------------------------
if(Сценарий_DISAPPOINTED_прежнего_объекта)
{
if(!((Тип_элемента_прежнего_объекта == _TAB || Тип_элемента_прежнего_объекта == _MENU_ITEM) && Открыто_окно[Номер_вызываемого_окна_прежнего_объекта]))
{
Поведение_объектов(_STOPABLE_SINGLE_PLAY_MODE,_OBJECT_DISAPPOINTED, Прежнее_окно,Прежний_объект);
}
//--------------------------
if(Открыто_окно[_TOOLTIP_WINDOW])Закрыть_окно_Tooltip();
//--------------------------
}
//---------------------------------------------------------
СОБЫТИЕ = _OBJECT_POINTED;
//---------------------------------------------------------
if(G_CORE[ОКНО][ОБЪЕКТ][_OBJECT_POINTED])
{
if(!((ТИП_ЭЛЕМЕНТА == _TAB || ТИП_ЭЛЕМЕНТА == _MENU_ITEM) && Открыто_окно[НОМЕР_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА]))
{
Поведение_объектов(_STOPABLE_SINGLE_PLAY_MODE,_OBJECT_POINTED);
}
//--------------------------
if(G_CORE[ОКНО][ОБЪЕКТ][_TOOLTIP_TEXT])Открыть_окно_Tooltip();
}
//--------------------------
//--------------------------------------------------------------------------------------------------------------
Прежний_объект = ОБЪЕКТ;
Прежнее_окно = ОКНО;
//--------------------------
}
}
}
Eu realmente não sei do que você está falando. Você viu meu trabalho. Em sua implementação, não há problemas com o redesenho, mesmo que não haja nenhuma chamada para ChartRedrow() em nenhum ponto do programa.
O que eu vi em seu trabalho não se encaixa em nenhuma porta. Além disso, pelo que você demonstrou, podemos concluir claramente que você está testando apenas no MetaTrader 4.
Retag Konow:
Não sei que código mostrar para convencê-lo. Diga-me o que devo mostrar e eu o mostrarei.
Você não deve mostrá-lo a mim, mas àqueles para quem você vai vendê-lo. Não quero testar algo que não usaria em meu próprio desenvolvimento. Primeiro, coloque tudo em um nível aceitável e forneça uma descrição detalhada dos recursos de seus desenvolvimentos, pelo menos como é feito no meu caso. Depois disso, poderemos tirar conclusões sobre o que você está fazendo.
Aqui está um exemplo da função "localizador" que implementei. (Para provar que não estou apenas inventando coisas).
Infelizmente, isso não me diz nada. Tudo é aprendido por meio de testes e comparações de métodos diferentes. Verei quando você apresentar a primeira versão de sua biblioteca em modo de demonstração. É claro que não comprarei nada. )
Você está saindo do assunto. Você pode criticar meu trabalho, mas não pode dizer que ele é lento. (Crítica estranha: "de jeito nenhum").
Não vou lhe vender nada pessoalmente, mas vou lhe dar uma chance de usá-lo - sim.
O que você chama de minha "biblioteca" não é realmente uma biblioteca. É um mecanismo fechado e autossuficiente ao qual você não pode conectar o código de outra pessoa e que não pode ser conectado ao seu próprio código.
Agora estou criticando de forma construtiva suas soluções, dando minhas próprias soluções como exemplo. Se você não precisar dela, a discussão está encerrada.
Você está saindo do assunto. Você pode criticar meus trabalhos, mas não pode dizer que eles são lentos. (Crítica estranha: "de jeito nenhum").
Então não se desvie do assunto. Do meu tópico, que descrevi detalhadamente em várias dezenas de artigos. O que isso tem a ver com suas tecnologias fechadas e inacessíveis, que você constantemente anuncia com antecedência, antes de colocá-las à venda?
Não estou dizendo que você tem algo que está diminuindo a velocidade. O que quero dizer é que você não sabe se está desacelerando ou não. Você pode dizer qualquer coisa. Onde estão os arquivos para testes? E onde ele está ficando lento/não está ficando lento? No MetaTrader 4/5? No Windows 7/8/10? Essa é a questão. )
Konow Retag:
É um mecanismo fechado e autossuficiente que não permite que você conecte o código de outra pessoa nem o seu próprio código.
Tenho certeza de que essa é sua maior desvantagem. Novamente, autossuficiente para quem? Somente para você? É muito cedo para fazer tais afirmações para todos. E ele será autossuficiente para os outros somente quando aqueles que o usarão lhe contarem sobre ele.
Retag Konow:
Agora estou criticando suas soluções de forma construtiva, dando minhas próprias soluções como exemplo. Se você não precisa delas, então a discussão está encerrada.
É claro que ela é muito interessante e útil. Especialmente para você e para outros novatos. Ao fazer perguntas e obter respostas para elas, você ajuda outras pessoas a adquirir novos conhecimentos também.
Mas sua crítica sem fornecer nenhum material para confirmar suas afirmações não é construtiva.
Muito obrigado.
1. Bem, então não se desvie do assunto. Do meu tópico, que descrevi detalhadamente em várias dezenas de artigos. O que isso tem a ver com suas tecnologias fechadas e inacessíveis, que você constantemente anuncia com antecedência, antes de colocá-las à venda?
2. Não estou afirmando que você tem algo que está diminuindo a velocidade. O que quero dizer é que você não sabe se está diminuindo a velocidade ou não. Você pode dizer qualquer coisa. Onde estão os arquivos de teste? E onde ele está ficando lento/não está ficando lento? No MetaTrader 4/5? No Windows 7/8/10? Essa é a questão. )
3. Tenho certeza de que essa é sua maior desvantagem. Novamente, autossuficiente para quem? Somente para você? É muito cedo para fazer tais afirmações para todos. E ele será autossuficiente para os outros somente quando aqueles que o usarão lhe disserem isso.
4) É certamente muito interessante e útil. Especialmente para você e para outros recém-chegados. Ao fazer perguntas e obter respostas para elas, você ajuda outras pessoas a adquirir novos conhecimentos também.
5. Mas sua crítica sem fornecer nenhum material para apoiar suas afirmações não é construtiva.
6. Obrigado.
1. desnecessário...
2 O fato de minha implementação não ficar lenta pode ser visto no vídeo.
3. redundante...
4. Isso é correto. É por isso que estou debatendo com você. Do meu ponto de vista, sua solução de redesenhar o gráfico inteiro no evento de cada objeto não é eficiente e causa carga adicional no processador. A otimização depende da solução correta desse problema. Eu não tenho a chamada da função ChartRedrow() (acredite na sua palavra, por favor), e a interface não fica lenta (você pode ver isso no vídeo) e tudo o que precisa ser atualizado.
Por isso, minha sugestão: não use o redesenho constante do gráfico, pois você pode passar sem ele.
5. A prova de que minhas afirmações são justificadas é a minha palavra de que não uso ChartRedrow() e o vídeo em que você pode ver o resultado de passar sem essa função.
6. E obrigado.