È possibile? - pagina 8

 
Vitaly Muzichenko #:

Da qualche parte sul forum un codice funzionante completo su mql4 e mql5

L'ho scritto circa un anno fa.

In quale thread, o come si cerca?

 
Andrey Sokolov #:

In quale argomento, o come si cerca?

Ecco la grande questione della ricerca primitiva del sito, altrimenti l'avrei trovata io stesso.

 
Probabilmente questo?
 
Vasiliy Pushkaryov #:
Immagino che sia questo?

Grazie

 
Andrey Sokolov #:

Grazie

C'è una versione rivista e la fonte nell'ultimo post di questo thread
 
Andrey Sokolov #:

Ciao, potresti mostrarmi come hai fatto?

Emette i dati dall'array alle etichette nell'area client della barra di scorrimento ad un offset uguale all'offset di questa barra di scorrimento. Potete usare CScrollV dalla libreria standard come barra di scorrimento. Array - una lista con tutti gli elementi. Etichette - area per visualizzare gli elementi della lista. Cosa c'è di così complicato lì...? Se lo si desidera, qualsiasi programmatore che abbia familiarità con l'OOP può farlo.

 
Mihail Matkovskij #:

Emette i dati dall'array alle etichette nell'area client della barra di scorrimento ad un offset uguale all'offset di questa barra di scorrimento. Potete usare CScrollV dalla libreria standard come barra di scorrimento. Array - una lista con tutti gli elementi. Etichette - area per visualizzare gli elementi della lista. Cosa c'è di così complicato lì...? Se lo si desidera, qualsiasi programmatore, che ha familiarità con OOP può farlo.

Avete avuto a che fare con lo scorrimento da SB? In qualche modo non sono riuscito a farlo funzionare separatamente sul grafico, senza il pannello client. Se avessi una domanda, potrei chiedere come usarlo.

Forum sul trading, sistemi di trading automatico e tester di strategie

Come creare un pannello grafico di qualsiasi complessità e come funziona".

Vasiliy Pushkaryov, 2021.12.21 10:12

Sto cercando di creare una barra di scorrimento verticale senza alcun collegamento al pannello, solo sul grafico, ma non funziona.

Per esempio con checkbox questo codice dà una reazione al clic del mouse. La casella di controllo appare e scompare.

#include <Controls\CheckBox.mqh>
CCheckBox Chbox;
//+------------------------------------------------------------------+
void OnInit()
{
  Chbox.Create(0, "MyCheckBox", 0, 20, 20, 100, 40);
  ChartRedraw();
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
  Chbox.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+


Ma con lo scorrimento verticale - nessuna reazione ai clic del mouse.

#include <Controls\Scrolls.mqh>
CScrollV Scroll;

void OnInit()
{
  Scroll.Create(0, "MyScrollV", 0, 20, 20, 40, 200);
  ChartRedraw();
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
  Scroll.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+

Per favore, chi sa come far funzionare questo elemento combinato sul grafico?


 
Vasiliy Pushkaryov #:

Avete avuto a che fare con lo scorrimento del SB? Per qualche motivo non sono riuscito a farlo funzionare separatamente sul grafico, senza il pannello client. Forse puoi aiutarmi?


Ci sono molte sfumature. La casella di controllo funziona (visivamente) perché è OBJ_BITMAP_LABEL, e il suo stato viene cambiato dal terminale. Il suo clic può essere tracciato come il clic di qualsiasi etichetta Bitmap in OnChartEvent. Ma la libreria standard ha il proprio modello di eventi basato su eventi personalizzati. Sono generati in void CAppDialog::ChartEvent enumerando il CArrayObj CWndContainer::m_controls se il componente CScrollV è stato aggiunto alCAppDialog. Poi vengono generati eventi come ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS e ON_DRAG_END. Nel tuo caso i componenti non sono stati aggiunti a CAppDialog, quindi non vengono generati eventi. Come aggirare questo meccanismo e forzare la generazione di eventi personalizzati senza CAppDialog non ci ho pensato. Ho bisogno di analizzare il codice sorgente in modo più dettagliato.

Potete provare a creare un componente basato sulla classe CWndContainer. E aggiungere elementi ad esso. Non ci sono elementi visivi (come in CDialog e CAppDialog), ma sono presenti tutti i meccanismi necessari per il corretto funzionamento degli elementi UI.
 
Mihail Matkovskij #:

Ci sono molte sfumature. Il segno di spunta OnCheckBox funziona (visivamente) perché è OBJ_BITMAP_LABEL, e il suo stato viene cambiato dal terminale. Il suo clic può essere tracciato come qualsiasi clic di etichette Bitmap in OnChartEvent. Ma la libreria standard ha il proprio modello di eventi basato su eventi personalizzati. Sono generati in void CAppDialog::ChartEvent enumerando il CArrayObj CWndContainer::m_controls se il componente CScrollV è stato aggiunto alCAppDialog. Poi vengono generati eventi come ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS e ON_DRAG_END. Nel tuo caso i componenti non sono stati aggiunti a CAppDialog, quindi non vengono generati eventi. Come aggirare questo meccanismo e forzare la generazione di eventi personalizzati senza CAppDialog non ci ho pensato. Ho bisogno di analizzare il codice sorgente in modo più dettagliato.

Potete provare a creare un componente basato sulla classe CWndContainer. E aggiungere elementi ad esso. Non ci sono elementi visivi (come in CDialog e CAppDialog), ma sono presenti tutti i meccanismi necessari per il corretto funzionamento degli elementi UI.
Grazie per aver descritto i meccanismi di CAppDialog e per aver suggerito di metterlo in un contenitore. Quando avrò più tempo, proverò a sperimentare.
Motivazione: