Creare una libreria grafica da zero

Alexandr Andreev  

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

GUI in crowdsourcing. Test beta aperto.

Alexey Barbashin, 2020.03.07 21:25

"ma forse è più facile fare tutto in oggetti" - questo è più che logico

"Sì, certo, ci faremo parzialmente affidamento". - allora subito siamo corretti:

class CCoordPBase

Наследуемся от CObject, то есть:

class CCoordPBase : public CObject

Хотя наверное можно и по другому:

class Control : public CObject

CObject è la classe base di tutti gli oggetti nella libreria degli sviluppatori. Fatto per analogia con C++ e C#. L'oggetto base (tipo) in Sharp è Object.

Le coordinate e le dimensioni sono proprietà del controllo, così come il colore del bordo, il colore e lo spessore, i raggi degli arrotondamenti, le icone e il testo.

Dobbiamo prima definire che tipo di controllo è elementare e poi descrivere le proprietà di base.

Naturalmente, alcune delle proprietà definite in precedenza potrebbero non essere utilizzate nei discendenti, non è un problema, ma è meglio rendere quella di base la più universale.

Ecco un esempio di un semplice controllo universale:

Contiene sfondo, bordo, raggio, icona, testo

Se hai bisogno di un'etichetta, non specifichi sfondo, bordo e icona; se hai bisogno di un pannello, il contenuto non è specificato; se hai bisogno di un pulsante immagine, si specifica solo l'icona; se hai bisogno di un pulsante con un'immagine, si specificano sfondo, bordo e immagine.

Cioè, questa composizione è abbastanza universale per la maggior parte dei controlli.


Capisco, la domanda sul cambiare lo stile al passaggio con il salvataggio delle coordinate... anche se è già abbastanza chiaro

Esiste un biliotec standard per controllo?

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

L'essenza diCObject è di digitare tutti gli oggetti.

Per esempio, abbiamo bisogno di una libreria di liste (lista di elementi, casella combinata, lista di controllo, e così via). Per ogni tipo di elementi possiamo creare un diverso tipo di array, questo è quello che ha fatto Anatoly, oppure possiamo usare uno strumento già pronto:CArrayObj

Cioè, molti pezzi di codice non hanno bisogno di essere inventati, sono già lì, basta prenderli e usarli.

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

Lo capisco, la domanda è come cambiare lo stile al passaggio del mouse mantenendo le coordinate... anche se sembra essere già chiaro

C'è un bilio standard sul controllo?

La libreria standard degli sviluppatori può essere presa come base, non ci vedo niente di imbarazzante, la loro gerarchia.

Naturalmente da lì dovremmo buttare tutto ciò che riguarda la costruzione diretta, ma lasciare il sistema di trasferimento degli eventi - è davvero universale!

Con questa tecnologia, non importa a quale classe appartenga anche il controllo più complesso, gli eventi saranno passati attraverso il sistema tipizzato dell'oggetto elementare.

Il controllo di base sarà disegnato nel CControls sottostante, dopo di che sarà generato l'evento OnPaint(). Questo permetterà all'utente di ridisegnare/ridisegnare i controlli figli e in generale permetterà all'utente di ridisegnare il controllo come vuole.

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

Avanti!!!!!

e stavo pensando di fare una semplice interazione

dove inseriremo posizionamenti come a sinistra dell'ultimo oggetto in caso di linea o colonna

Quindi scriveremo un controllore universale

È esattamente così che si dovrebbe fare: scrivere l'interazione elementare.

Un controller di base all'inizio non deve avere tutte le proprietà necessarie, basta uno sfondo.

Dopo tutto, per rendere il controllo stesso, conterrà la funzione corrispondente. Così, quando si aggiunge qualsiasi proprietà, dovremo modificare solo una funzione.

Secondo la gerarchia degli elementi?

CObject è un tipo di base

classe CControl : public CObject - il controllo base della libreria stessa

classe CContainerControl : public CControl - il controllo del gruppo. Uno dei suoi campi sarà un array di controlli annidati. Potete vedere un esempio nellalibreria standard CWndContainer.

Alexandr Andreev  
Алексей Барбашин:
Sasha, visto che hai già iniziato a codificare, fai un progetto open source in MQL, potrai svilupparlo insieme e condividerlo con gli altri. Chissà, forse ce ne sarà qualcuno.

Sono in attesa per ora... guardando le librerie standard.... c'è un sacco di roba inutile

Non so se ce ne sono molti, ma sarebbe meglio scrivere il proprio codice... o ereditare

CChartObject

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
Alexandr Andreev  
Алексей Барбашин:
Sasha, visto che hai già iniziato a codificare, fai un progetto open source in MQL. Chissà, forse ce ne sarà qualcuno.

Penso che sia un po' presto per partire da zero, dobbiamo prima costruire qualcosa

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

Sono in attesa per ora... guardando le librerie standard.... c'è un sacco di roba inutile

(anche se non molto)) ma è meglio che tu scriva il tuo controllo... o si può ereditare

CChartObject

No, no!!!

Guarda attentamente!

Questo controller è proprio la strada per il nulla! Non abbiamo bisogno di oggetti grafici discreti! Abbiamo bisogno di disegnare su tela - è l'unico modo per ottenere sviluppo e possibilità più ampie.

E il fatto che si debba fare il proprio controller principale - questo è sicuro.

La libreria standard divide le proprietà e gli stati tra CWndObject e CWnd, mentre noi dobbiamo unire tutto in un solo controllo.

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

No, no!!!

Guarda attentamente!

Questo controller è la via per il nulla! Non abbiamo bisogno di oggetti grafici discreti! Abbiamo bisogno di disegnare su kanvas - è l'unica cosa che ci darà sviluppo e ampie possibilità.

E il fatto che si debba fare il proprio controller principale - questo è sicuro.

Le proprietà e gli stati nella libreria standard sono divisi tra CWndObject e CWnd, e abbiamo bisogno di unire tutto in un controllo.

Ho passato un quarto d'ora cercando di creare un progetto e si è rivelato creato, ora sto guardando come renderlo pubblico

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

Penso che sia un po' presto per iniziare con una tabula rasa.

Sono sicuro che non è una buona idea iniziare da zero.

Persone molto intelligenti hanno speso molto tempo e conoscenza per fare la stessa libreria standard o quella di Anatoly.

La gente ha speso tempo e conoscenza e sarebbe sciocco non usarla.

Dovremmo semplicemente prendere il meglio, dal nostro punto di vista, in entrambi e costruirne uno nuovo.

Dobbiamo imparare dagli errori degli altri. Faremo il nostro).

Motivazione: