Fare un progetto in crowdsourcing su Canvas - pagina 31

 
Реter Konow:
Per parafrasare: vi ritroverete con un EA con un'interfaccia, anche se una parte è fatta da me e l'altra da voi. Questo non vi impedirà di mettere insieme le due parti in una sola EA.
Anche se si può andare in un altro modo. Io pubblicherò il costruttore e voi, con il mio aiuto, progetterete la gui di cui avete bisogno. Poi stamperete il nucleo e lo inserirete nel motore, che inserirete nell'Expert Advisor. Questo è ancora meglio, perché immediatamente imparerete come scrivere la grafica nel linguaggio di markup e sarete in grado di correggerla da soli.
 
Comunque, questo è quello che faremo. Pubblicherò il costruttore e insegnerò come progettare la gui su di esso qui. Non c'è ancora una documentazione, quindi se siete interessati, rimanete sintonizzati per il tutorial.

La formazione includerà i seguenti argomenti:

1. Creare una gui funzionale.
2. stile.
3. Stampare e inserire il file del kernel e del motore nell'applicazione (molto semplice - come un inline).
4. Collegare elementi di gui all'applicazione tramite la funzionalità API (il file API viene creato automaticamente).

Aspetta la pubblicazione in questo thread.
 
Реter Konow:
Comunque, questo è quello che faremo. Pubblicherò il costruttore e insegnerò come progettare su di esso qui gui. Non c'è ancora una documentazione, quindi se siete interessati, tenete d'occhio il tutorial.

La formazione includerà i seguenti argomenti:

1. Creare una gui funzionale.
2. Stili di design.
3. Stampare e collegare il file del kernel e del motore all'applicazione (molto semplice - come un inline).
4. Collegare elementi di gui all'applicazione tramite la funzionalità API (il file API viene creato automaticamente).

Aspettatevi la pubblicazione in questo ramo.

Ricevuto!

 
---:

Non ho registrato un video, ma vi mando un esempio.

ci sono 600 elenchi a discesa.

Muovi il mouse - con ogni evento e cambio di colore il CCanvas complessivo viene ridisegnato.

Puoi vedere la dimensione finale nelle proprietà della bitmap - 1500x600 px (rispetto al tuo 800x500 e 250ms di ritardo). Il che equivale a 900.000 pixel, e tutti vengono ridisegnati istantaneamente. Nessun secondo è fuori questione.

Ogni lista è resa prima sulla sua tela nella sua propria dimensione (per non farla traboccare) e poi viene arata sull'insieme. Quindi abbiamo 600 chiamate ResourceCreate per ogni evento del mouse.
Questo significa, come si può vedere dalla velocità di reazione, che i fotogrammi sono sufficienti per mostrare i cartoni animati.

Gli sviluppatori di MT hanno dato uno strumento soddisfacente senza lag (intendo ResourceCreate bitmap)

È possibile vedere questo esempio in open source?

 
Алексей Барбашин:

È triste che il progetto sia andato in modalità chiusa (

Non è andato da nessuna parte.

 
Алексей Барбашин:

È possibile vedere questo esempio in open source?

Cosa non capisci dei kanvas?

1. Reagisce agli eventi come tutti gli altri oggetti grafici. In altre parole, è possibile tracciare le coordinate del mouse mentre si muove, reagire agli eventi di clic del mouse e della tastiera.

2. può cambiare indipendentemente il colore di ogni pixel.

Di cos'altro avete bisogno? E poi ci vuole un po' di cervello e la volontà di perdere un sacco di tempo inutilmente.

 
Ciao.
 
Dmitry Fedoseev:

Cosa non capisci del lavoro con un kanvas?

1. reagisce agli eventi come tutti gli altri oggetti grafici. Cioè, potete tracciare le coordinate del mouse mentre si muove, reagire agli eventi di clic del mouse e della tastiera.

2. può cambiare indipendentemente il colore di ogni pixel.

Di cos'altro avete bisogno? La prossima cosa di cui hai bisogno è un po' di cervello e il desiderio di perdere un sacco di tempo.

Beh kanvas stesso non reagisce agli eventi. E il fatto che si possa cambiare ogni pixel è evidente.

Ero interessato all'implementazione di un ridisegno frammentato della tela.

Ma sembra che molti abbiano deciso di ridipingere completamente la tela anche se deve essere ridisegnata solo in una piccola parte, cioè un singolo controllo.

 
Алексей Барбашин:

Beh, il kanvas stesso non reagisce agli eventi. E il fatto che si possa cambiare ogni pixel è chiaro.

Ero interessato all'implementazione del ridisegno frammentario della tela.

Ma sembra che molti si siano accontentati della riverniciatura completa della tela anche se deve riverniciare solo una piccola parte, cioè un controllo.

La tela stessa non reagisce agli eventi, ma non esiste da sola.

Ridisegno frammentario - vale la pena iniziare a farlo e diventerà più chiaro se c'è un tale obiettivo. Penso che ci dovrebbe essere un array di controlli, ogni controllo ha confini definiti. Quando hai bisogno di ridisegnare un controllo, devi passare attraverso tutti i controlli, vedere cos'altro cade in quest'area e ridisegnare solo quelli. Almeno così.

 
Dmitry Fedoseev:

Il kanvas stesso non è reattivo, ma non esiste da solo.

Ridisegno frammentato - vale la pena iniziare a farlo e diventerà più chiaro se c'è un tale obiettivo. Penso che ci dovrebbe essere un array di controlli, ogni controllo ha confini definiti. Quando hai bisogno di ridisegnare un controllo, devi passare attraverso tutti i controlli, vedere cos'altro cade in quest'area e ridisegnare solo quelli. Almeno così.

È esattamente così che l'ho costruito. Fondamentalmente ho preso la libreria standard come base, perché ha momenti molto ben lavorati di trasferimento di eventi e alcune altre cose. Anatoly crea raggruppamenti per ogni diversa classe di elementi, mentre in quello standard tutto è ridotto a un oggetto di base.

Di conseguenza, WndObject contiene la descrizione completa delle proprietà più comuni di qualsiasi controllo (dimensioni, posizione, colore di sfondo, colore del bordo, spessore del bordo, testo, immagine e così via). Inoltre la stessa classe contiene un riferimento al controllo padre. Cioè, se nessun genitore è specificato per il controllo, allora crea il proprio oggetto kanvas sul grafico, altrimenti viene disegnato sul kanvas del genitore. A seconda della sua posizione (standalone, slave) vengono calcolate anche le coordinate della posizione dell'elemento. Inoltre, lo stesso oggetto ha un array che contiene la descrizione originale dell'area madre occupata dall'elemento. L'idea stessa è la seguente: se solo l'elemento stesso cambia, allora prima che venga ridisegnato, l'area dei pixel viene riempita con la matrice dei pixel genitori, e solo allora viene applicato il nuovo stato del controllo. questo approccio non richiede la ridipintura dell'intera tela ogni volta, perché la ridipintura sta bypassando tutti gli elementi nell'array, e ricorsivamente con elementi annidati. Per il rendering e l'aggiornamento di un controllo particolare, suggeriamo due funzioni: una che disegna sopra il genitore (o su una tela vuota) quando si crea l'intero controllo, e un'altra che aggiorna la visualizzazione del solo controllo dato. Quindi va così.

Ancora "perso" nel modello degli eventi: dopo quali cambiamenti quali strati devono essere ridisegnati.

Nikolai nei suoi esempi mostra che in linea di principio non è necessario preoccuparsi di memorizzare i dati delle aree locali perché la ridipintura dell'intera tela funziona così rapidamente che non c'è bisogno di scendere nei dettagli, è sufficiente ridipingere sempre tutto in una volta.
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
Motivazione: