Fare un progetto in crowdsourcing su Canvas - pagina 37

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

Da quanto sopra si può capire che un elemento di struttura è un controllo di dialogo specifico, contiene le proprie proprietà e può contenere controlli annidati. L'insieme delle proprietà di un tale controllo universale è limitato solo dall'immaginazione dello sviluppatore.

Naturalmente, possiamo evitare la struttura e descrivere le proprietà dei controlli in un array multidimensionale, ma non è inizialmente conveniente perché dobbiamo ricordare chiaramente quale indice del controllo memorizza ogni proprietà. E l'array non può contenere tipi di dati eterogenei. Risulta che la descrizione dell'elemento di controllo nella programmazione procedurale è possibile solo attraverso le strutture. Cioè, l'elemento struttura è un controllo concreto, cioè l'oggetto concreto del dialogo con le sue proprietà.

Nella libreria standard, c'è una cartella Generic nella cartella Include, che contiene la classe CHashMapche implementa l'interfaccia del tipo chiave-valore.
Un singolo oggetto può avere un insieme di valori di qualsiasi tipo. Anche se l'albero delle mappe richiede tempo per essere eseguito, funziona abbastanza velocemente.
Potrebbe anche funzionare per descrivere le proprietà, dovrebbe provare in generale.
Oppure usate un altro tipo di classe di questa libreria, che è più adatto al compito.

Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
  • www.mql5.com
Библиотека содержит классы и интерфейсы для определения шаблонных коллекций, которые, в свою очередь, дают пользователю возможность создавать строго типизированные коллекции. Они обеспечивают большее удобство и высокую производительность работы с данными, чем обычные типизированные коллекции.
 

Rileggilo, cioè proponi di memorizzare un array uguale a un array di pixel, per memorizzare informazioni in questo array (nel tuo caso "quale numero di funzione" dovrebbe essere usato per l'elaborazione). ?

 
Maxim Kuznetsov:

Poi ci sarà l'inverso: collegare l'interfaccia al grafico. Per esempio, fate un pulsante che sia strettamente legato all'ora e al prezzo.

Una GUI separata può essere scritta in pochissimo tempo - con tutte le tabelle, schede, menu e fischietti. In C# o anche in BASIC. E all'interno del grafico è un problema significativo per le applicazioni esterne.

E poi perché legare l'interfaccia al grafico?
Dopo tutto, è possibile ottenere qualsiasi dato, come i timestamp e i prezzi, direttamente dalle relative funzioni.

 
Alexandr Andreev:

Rileggilo, cioè proponi di memorizzare un array uguale a un array di pixel, per memorizzare informazioni in questo array (nel tuo caso "quale numero di funzione" dovrebbe essere usato per l'elaborazione). ?

Se lo chiedi a me, non ho suggerito niente del genere. Non ho suggerito assolutamente nulla)). Ho solo descritto un po' il mio punto di vista. Siete liberi di non essere d'accordo.

 
Реter Konow:

In linea di principio, è possibile generalizzare i tipi. Sono arrivato alla conclusione che non succederà nulla di male, se la maggior parte delle proprietà degli oggetti saranno di tipo int. Tutti gli altri tipi abbreviati (il doppio è praticamente assente nelle proprietà degli oggetti grafici) li ho scartati per motivi di semplificazione. Il "superamento" della memoria è così insignificante che non ha senso pensarci. Naturalmente, non possiamo andare per un tale sacrilegio per amore della professionalità))). Ma siamo nel 21° secolo e non mi sento minacciato dai falò).

Ho reso i nomi degli oggetti come numeri, e li ho messi nella serie generale delle proprietà degli oggetti.

L'unico posto dove avevo bisogno di un tipo diverso di dati erano i parametri di controllo. Lì ho creato un secondo kernel, che memorizza le proprietà dei parametri, e i valori stessi in tipo stringa, che posso facilmente ridurre a qualsiasi cosa (più precisamente, a ciò che è scritto nelle proprietà del parametro).

SUGGERIMENTO: per "parametro dell'elemento di controllo" si intende il PARAMETRO GESTITO DALL'ATTREZZATURA.

Si scopre che l'array globale, che contiene tutti i controlli e tutte le loro proprietà, ha una profondità di dimensione pari alla somma di tutte le diverse proprietà dei controlli. Cioè, anche se alcune proprietà del controllo non sono necessarie, queste celle saranno ancora in questo array, poiché l'array è sempre uniforme.

Ciò che è sorprendente, tuttavia, è l'uniformità dell'array stesso. A questo proposito, l'uso di una struttura è più che giustificato, perché in questo caso ogni proprietà può essere descritta da un proprio tipo, compresa l'unione.

L'uso delle strutture semplifica davvero la memorizzazione delle proprietà, non devi limitarti a un tipo o rinunciare a qualcosa. Non avete a che fare con conversioni da stringhe ad altri tipi di dati... Una struttura elimina tutte queste limitazioni fin dall'inizio.

Oltre alle proprietà e alle coordinate stesse, questo array globale dovrebbe anche memorizzare il sistema di subordinazione degli elementi. Se l'oggetto Caption nel nostro disegno è cambiato, anche i pulsanti devono essere ridisegnati, poiché si trovano sul campo dell'intestazione. Quindi, se un qualsiasi controllo "centrale" è cambiato, tutto quello che c'è sopra dovrebbe essere ridisegnato. Peter, come memorizzi la struttura di dipendenza degli oggetti?
 
Алексей Барбашин:

Si scopre che l'array globale, che contiene tutti i controlli e tutte le loro proprietà, ha una profondità di dimensione pari alla somma di tutte le diverse proprietà dei controlli. Cioè, anche se alcune proprietà non sono necessarie per un elemento, queste celle saranno ancora in questo array, perché l'array è sempre uniforme.

Ciò che è sorprendente, tuttavia, è l'uniformità dell'array stesso. A questo proposito, l'uso di una struttura è più che giustificato, perché in questo caso ogni proprietà può essere descritta da un proprio tipo, inclusa l'unione.

L'uso delle strutture semplifica davvero la memorizzazione delle proprietà, non devi limitarti a un tipo o rinunciare a qualcosa. Non avete a che fare con conversioni da stringhe ad altri tipi di dati... Una struttura elimina tutte queste limitazioni fin dall'inizio.

Il kernel è la matrice. Contiene tutte le proprietà degli oggetti.

Potete scegliere il vostro metodo. Ma, nel corso degli anni di gui, sono giunto alla conclusione che nessun altro metodo darà una crescita altrettanto potente nella funzionalità di un sistema in evoluzione. La massima semplicità ed efficienza è la perfezione.


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

...Peter, come memorizzi la struttura di dipendenza degli oggetti?

Se intendi coordinare le dipendenze, anche nel kernel.

Ho un gestore speciale per le dipendenze degli oggetti coordinati. Funziona con tutti i tipi di dipendenze.
 
Roman:

E poi perché legare l'interfaccia al grafico?
Dopotutto, è possibile recuperare direttamente qualsiasi dato, gli stessi timestamp e prezzo, dalle relative funzioni.

al fatto che l'interfaccia dell'applicazione (ciò con cui l'utente opera) non è limitata a una singola finestra.

Stiamo parlando di commercio, vero?

Bene, il posizionamento degli elementi interattivi sul grafico (e il loro legame) è quasi impossibile da risolvere con mezzi esterni.

Di nuovo, le finestre di dialogo/forme esterne sono facili da disegnare. Ma all'interno di un grafico, gli elementi senza le specifiche del terminale e del grafico specifico sono quasi impossibili da disegnare.

 
Реter Konow:
Il nucleo è la matrice. Contiene tutte le proprietà degli oggetti.

Potete scegliere il vostro metodo. Ma, nel corso degli anni di gui, sono giunto alla conclusione che nessun altro metodo darà una crescita altrettanto potente nella funzionalità di un sistema in evoluzione. La massima semplicità ed efficienza è la perfezione.


La matrice è un loop annidato e i loop annidati sono il tempo. Imho, nessun sarcasmo, solo un ragionamento logico.

 

Peter, ottieni quanto segue: il nucleo consiste nella matrice globale delle proprietà degli elementi, matrice globale dei valori degli elementi, matrice globale delle dipendenze, matrice globale delle immagini...

Se è necessario aggiungere altre proprietà, allora la dimensionalità delle matrici viene aumentata.

L'accesso alle proprietà avviene rigorosamente tramite indici, perché le celle non hanno nomi.

Almeno i nomi dei campi sono accessibili con una struttura.

Peter, tu sei... gigante...

Io, per esempio, la vedo così (semplificata):

class CControl : public CObject

{

public:

        int ПозицияХ;

        int ПозицияY;

        int Длина;

        int Ширина;

        color ЦветОсновы;

        color ЦветБордюра;

        int ТолщинаБордюра;

}

Una "classe" de facto è una stringa specifica nel vostro array globale, solo con un volto più "umano". Le classi sono progettate per creare i propri oggetti di dati, con un insieme di proprietà comprensibili a cui si può accedere per nome piuttosto che per indice. Una classe è solo un costruttore di tipo universale.

Quindi, creiamo un controllo di base che contiene le proprietà più comuni, che quasi ogni controllo ha.

È possibile creare oggetti specializzati basati su di esso:

class CButton : public CControl 

{

public:

        string Заголовок;

        int Image[];

}

Cioè, ogni tipo di controllo successivo integra semplicemente il tipo base con le proprietà richieste.

E poiché, come ho scritto prima, le proprietà di base sono memorizzate nel controllo di base, la traversata per "colpire" il cursore nel controllo è fatta controllando un tipo di dati: CControl. Avendo trovato l'oggetto desiderato, il programma ha immediatamente accesso alle proprietà di quell'oggetto, poiché il punto del programma è già nell'oggetto stesso, proprio come nel vostro ciclo il programma si trova sulla linea dell'array desiderato.