Fare un progetto in crowdsourcing su Canvas - pagina 22

 
Nikolai Semko:
Ho quasi finito l'esempio della classe GButton, ma devo scappare. Lo finirò domani e lo presenterò.
Fantastico. Molto interessante. )
 
Реter Konow:
Fantastico. Molto interessante. )


Questo è ciò che si ottiene.


Il pulsante può essere visualizzato sullo sfondo o in primo piano, con o senza funzione di aggancio.

Nel file di esempio CanvasButton.mq5 è possibile trascinare il pulsante con il mouse. Per farlo, basta tenere premuto Ctrl per spostare il pulsante blu e Shift per spostare il pulsante rosso.

Poiché la classe GButton è una discendente della classe CCanvas, l'esempio dimostra la possibilità di usare funzioni della classe CCanvas sull'esempio CircleWu (questo è implementato in OnInit). Quindi, è possibile scrivere del testo sul pulsante usando le funzioni della classe CCanvas.

Questa classe, ovviamente, non pretende di essere pulita. La grafica non brilla di perfezione e il 3D è molto convenzionale; le ombre non sono implementate, la velocità di esecuzione non è ottimizzata. E molto probabilmente ci sono molti bordi grezzi e la mancanza di vari controlli. Quindi non giudicate severamente.

Se si spende un po' più di tempo, ovviamente si può fare:


Stavo solo cercando di... si potrebbe dire - impostare la direzione.


Il file Canvas.mqh differisce da quello originale solo perché l'array m_pixels è definito come pubblico.

File:
GButton.mqh  20 kb
Canvas.mqh  152 kb
 
Nikolai Semko:


Ecco cosa abbiamo ottenuto.


Il pulsante può essere visualizzato sullo sfondo o in primo piano e può essere cliccato o non cliccato.

Nel file di esempio CanvasButton.mq5 è possibile trascinare il pulsante con il mouse. Per farlo, basta premere Ctrl per spostare il pulsante blu e Shift per spostare il pulsante rosso.

Poiché la classe GButton è una discendente della classe CCanvas, l'esempio dimostra la possibilità di usare funzioni della classe CCanvas sull'esempio CircleWu (questo è implementato in OnInit). Quindi, è possibile scrivere del testo sul pulsante usando le funzioni della classe CCanvas.

Questa classe, ovviamente, non pretende di essere pulita. La grafica non brilla di perfezione e il 3D è molto convenzionale; le ombre non sono implementate, la velocità di esecuzione non è ottimizzata. E molto probabilmente ci sono molti bordi grezzi e la mancanza di vari controlli. Quindi non giudicate troppo duramente.

Se spendi un po' più di tempo, ovviamente, puoi farlo:


Stavo solo cercando di... si potrebbe dire - impostare la direzione.


Il file Canvas.mqh differisce da quello originale solo perché l'array m_pixels è definito come pubblico.

Nikolay, secondo me, è venuto bene. Abbiamo fatto un buon inizio e possiamo andare oltre. Chiamerei questo tipo di pulsante una chiave. Se avete 4 linee chiare di cornice: - in alto, a sinistra luce e a destra, il fondo - scuro per lo stato premuto e viceversa, sarà ancora meglio (solo bisogno di aggiungere uno sfondo chiaro, altrimenti le linee scure su un grafico a sfondo nero non saranno visibili). E poi si può impostare il testo e l'immagine.

Comunque, bel tentativo. )

 
Реter Konow:

. Se dividete le 4 linee chiare della cornice lungo i bordi: - in alto, a sinistra chiaro e a destra, in basso scuro per lo stato premuto e viceversa per lo stato premuto, sarà ancora meglio (dovete solo aggiungere uno sfondo chiaro, altrimenti le linee scure non saranno visibili contro la grafica nera).

Sì, è chiaro che si può disegnare come si vuole. In questo caso, non mi sono prefissato di realizzare un capolavoro. Ma la prima cosa che vorrei migliorare, è generare tutti gli array dell'immagine del pulsante (due array in questo caso) e poi copiarli solo attraverso ArrayCopy, in modo da non dover creare un'immagine ogni volta. Questo ridurrà notevolmente il lavoro, ma al costo di un consumo aggiuntivo di RAM, ma perché è ormai comune su computer da 16 GB di RAM, e se ci sono anche molti pulsanti, il consumo aggiuntivo di memoria è improbabile che superi 1-2 MB, soprattutto se gli stessi pulsanti useranno gli stessi array. Quindi non credo che sia un problema. La cosa principale è la velocità.
 
Nikolai Semko:
Sì, è chiaro che si può disegnare come si vuole. In questo caso, non ho fissato un obiettivo per raggiungere un capolavoro. Ma la prima cosa che vorrei migliorare, è generare tutti gli array dell'immagine del pulsante (due array in questo caso) e poi copiarli solo attraverso ArrayCopy, in modo da non dover creare un'immagine ogni volta. Questo ridurrà notevolmente il lavoro, ma al costo di un consumo aggiuntivo di RAM, ma perché è ormai comune su computer da 16 GB di RAM, e se ci sono anche molti pulsanti, il consumo aggiuntivo di memoria è improbabile che superi 1-2 MB, soprattutto se gli stessi pulsanti useranno gli stessi array. Quindi non credo che sia un problema. La cosa principale è la velocità.

Capisco. Quando ho posto la domanda sul pulsante, volevo sapere se era possibile farlo con una tela:


Premuto:

Premuto:

In questo esempio, ogni lato della cornice è composto da diverse linee. Ci sono un totale di 4 linee di sfumatura su ogni lato della cornice. Ogni linea ha una tonalità diversa che dipende dallo stato del pulsante e dalla forma data della cornice. Se CCanvas ha la capacità di impostare il colore su specifiche linee di gradiente della cornice, allora fare l'esempio sopra è facile. Questo è esattamente quello che volevo scoprire.

 
Реter Konow:

Capisco. Quando ho posto la domanda sul pulsante, volevo sapere se era possibile farlo con una tela:


Premuto:

Premuto:

In questo esempio, ogni lato della cornice è composto da diverse linee. Ci sono un totale di 4 linee di sfumatura su ogni lato della cornice. Ogni linea ha una tonalità diversa, che dipende dallo stato del pulsante e dalla forma data della cornice. Se CCanvas ha la capacità di impostare il colore su specifiche linee di gradiente della cornice, allora fare l'esempio sopra è facile. Questo è esattamente quello che volevo scoprire.

Non ti capisco, Peter. Tu parli di carne e io di scheletro. Se avevi delle ossa, potevi coltivare la carne. Il mio esempio non ha gli stati Pressed, Pressed? Avete almeno guardato dentro la classe GButton? Peter, il mio consiglio: lascia tutto e studia urgentemente OOP. Hai appena raggiunto un tetto nel tuo progetto, che si chiama codice gonfiato. È facilmente superabile da OOP.
E con CCanvas si può fare tutto, anche scrivere Windows all'interno della finestra MT5, in piena modalità di emulazione visiva ovviamente :), perché non c'è accesso all'hardware

 
Nikolai Semko:
Non ti capisco, Peter. Tu parli di carne e io di scheletro. Se avevi delle ossa, potevi costruire della carne. Il mio esempio non ha gli stati Pressed, Pressed? Avete almeno guardato dentro la classe GButton? Peter, il mio consiglio: lascia tutto e studia urgentemente OOP. È solo che nel vostro progetto avete colpito un tetto, che si chiama codice gonfiato, è facilmente superabile con l'aiuto di OOP.
E con Canvas si può fare tutto, anche Windows può essere scritto all'interno della finestra MT5.

))) Allora perché ho iniziato questo topic? ) Ora studierò OOP.

Il tuo esempio ha pulsanti, eventi di clic e stati di questi pulsanti. Tutto è a posto. Ma Nikolai, non ho ancora capito cosa stavo chiedendo - c'è un'opzione nella classe CCcanvas per impostare un colore specifico alle linee di sfumatura della cornice? Guardando il tuo esempio, potresti pensare che c'è... Se sì, puoi disegnare qualcosa di simile al mio esempio? Io sono interessato alla facilità e alle possibilità di disegnare in quanto tale usando le funzionalità di questa classe, e tu stai parlando di velocità e miglioramenti alla funzionalità della classe. Questo è un argomento leggermente diverso.

 
Реter Konow:

))) Allora perché ho iniziato questo topic? ) Ora vado a studiare OOP.

È meglio iniziare a imparare l'OOP con qualcosa di più facile, non con Canvas.
 
Vasiliy Sokolov:
È meglio iniziare a imparare l'OOP con qualcosa di più semplice di Canvas.
Hai ragione. Forse è meglio iniziare con un libro di testo. Davvero, OOP è una cosa complicata. È confuso...
 
Nikolai Semko:
Avete almeno guardato dentro la classe GButton?


Ho guardato dentro la classe. Sembra bello, ma non capisco tutto il meccanismo della classe CCanvas. Ecco perché non ho visto la risposta alla mia domanda.