Domande su OOP in MQL5 - pagina 15

 
Vasiliy Pushkaryov:

Mi scuso per la disinformazione, ho scritto prima che non si può chiamare il metodo Create() in una classe figlia.

Ora, ricontrollato, è possibile. Ma l'accesso al membro privato m_button non era disponibile. Cioè era impossibile controllare, per esempio, lo stato del pulsante: premuto/rilasciato.

Ora con il suggerimento di Igor è possibile.

Non ci sono problemi con i pulsanti, non ricordo, ma questa classe aveva metodi pronti ( non campi ) - per determinare lo stato, se no, controllare IsActive() o PropFlags() o StateFlags() - c'era sicuramente qualcosa di pronto per scoprire cosa sta succedendo al pulsante ora

Vi dirò il secondo trucco con la grafica in MQL - potete scoprire il nome del pulsante ( Name()) e per nome trovarlo e ottenere lo stato tramite ObjectGetInteger() e altre funzioni, ma per evitare di farlo in modo goffo, scrivete nella vostra classe metodi per ottenere le proprietà tramite ObjectGetInteger()


così ;)

PS: anch'io ho lottato con SB - non riuscivo a trovare perché le caselle di controllo diventassero selezionate dopo aver minimizzato e massimizzato il pannello - come se il mouse fosse cliccato sull'oggetto... quando ho capito che non volevo rileggere tutto SB, ho creato il mio gestore, che dopo aver minimizzato il modulo avrebbe impostato tramite ObjectSetInteger() la proprietà dell'oggetto deselezionato per le mie caselle di controllo

 
Igor Makanu:

non c'è nessun problema con le battaglie, non mi ricordo, ma questa classe aveva metodi ready ( non campi ) - per determinare lo stato, se non lo è, allora controlla IsActive() o PropFlags() o StateFlags() - esattamente ciò che era ready lì per scoprire cosa c'è con il pulsante ora

Vi dirò il secondo trucco con la grafica in MQL - potete scoprire il nome del pulsante ( Name()) e per nome trovarlo e ottenere lo stato tramite ObjectGetInteger() e altre funzioni, ma per evitare di farlo in modo goffo, scrivete nella vostra classe metodi per ottenere le proprietà tramite ObjectGetInteger()

così ;)

PS: anch'io ho lottato con SB - non riuscivo a trovare perché le checkbox diventassero selezionate dopo aver minimizzato e massimizzato il pannello - come se il mio mouse fosse cliccato sull'oggetto... Ho deciso che non volevo rileggere l'intera cosa - ho costruito il mio gestore che, dopo aver minimizzato il modulo, ha impostato la proprietà oggetto deselezionato per le mie checkbox tramite ObjectSetInteger().

Anch'io ho incontrato questo problema. Avevo bisogno di colorare la finestra di dialogo con i miei colori. Anche loro si sono rivelati nascosti nella sezione privata. Sono riuscito a risolverlo usando un metodo che utilizza ObjectGetInteger() per dipingere direttamente i pannelli. E dopo aver minimizzato e dispiegato era anche un casino.

Ecco come appare l'intestazione prima di essere minimizzata:


E questo è dopo.


Non sono anche riuscito a trovare perché il colore predefinito viene restituito sui pulsanti di chiusura e di collasso.

 
Vasiliy Pushkaryov:

Ho incontrato anche questo. Avevo bisogno di colorare la finestra di dialogo della SB con i suoi colori. Si è scoperto che erano nascosti anche nella sezione privata. Sono riuscito a risolverlo usando un metodo che usa ObjectGetInteger() per dipingere direttamente il pannello. E dopo aver minimizzato e dispiegato era anche un casino.

Ecco come appare l'intestazione prima di essere minimizzata:


E questo è dopo.


Non sono anche riuscito a trovare il motivo per cui viene restituito il colore predefinito sui pulsanti di chiusura e di collasso.

Ho dato un'altra occhiata allo std locale e mi sono convinto della mia decisione di scrivere la mia libreria)))
 
Vladimir Simakov:
Ancora una volta ho guardato lo std locale e mi sono convinto della giusta decisione di scrivere la mia libreria)))

Ho scritto del momento del pulsante qui, estratto da lì:

Finché si preme il pulsante lentamente, circa una volta al secondo, funziona bene. Inizia a spingere un po' più velocemente e spesso l'evento non viene intercettato.

Avete notato questi problemi nella vostra biblioteca? Vorrei sapere se è l'implementazione di SB o l'architettura di gestione degli eventi e non c'è modo di aggirare il problema?

 
Vasiliy Pushkaryov:

... Vorrei sapere, è questa l'implementazione dell'SB o è l'architettura di gestione degli eventi e non c'è modo di aggirarla?

Potete creare voi stessi un pulsante come oggetto grafico senza usare la libreria e confrontare il suo funzionamento con un pulsante creato con la libreria.

 
Dmitry Fedoseev:

Potete creare voi stessi un pulsante come oggetto grafico senza usare la libreria, e confrontare il suo funzionamento con un pulsante creato usando la libreria.

Grazie per l'idea, farò una prova.
 
Vasiliy Pushkaryov:

Ho scritto qui il momento con i pulsanti, estratto da lì:

Avete notato questi problemi nella vostra biblioteca? Mi piacerebbe sapere se è l'implementazione di SB o l'architettura di gestione degli eventi e non si può aggirare?

Se stai scrivendo per te stesso (non nel mercato), è più facile fare finestre con pulsanti in C# e chiamare da MQL .dll in C# - qualsiasi fantasia con pulsanti, icone, caselle di controllo, ecc. è realizzata in C# in mezz'ora - un'ora, ma ho dovuto cercare su Google materiale per una settimana.

L'unica cosa che dovete fare è guardare la barra che avete nella directory del Terminale e usarla per creare la vostra interfaccia - è la mia esperienza, ho imparato tutto quello che c'è da sapere su di essa

SZS: mi sono appena ricordato, ho messo un semplice pannello nel codebase, non ci sono pulsanti, ma ci sono etichette di testo e il codice è il più semplice possibile. https://www.mql5.com/ru/code/25897

 
Dmitry Fedoseev:

Potete creare voi stessi un pulsante come oggetto grafico senza usare la libreria e confrontare le sue prestazioni con un pulsante creato con la libreria.

Sì, preso da un vecchio lavoro, quando non lavoravo con SB, ho fatto una specie di pulsante di chiusura. Funziona rapidamente:


Si scopre che il problema è nell'implementazione di SB.

 
Vasiliy Pushkaryov:

Sì, preso da un vecchio lavoro quando non lavoravo con SB, ho fatto una specie di pulsante di chiusura. Funziona rapidamente:


Si scopre che il problema è nell'implementazione di SB.

Lalibreria standard implica che i controlli siano creati nel modulo. Non dovrebbero funzionare affatto, proprio così. Almeno, così era una volta.

 
Igor Makanu:

Se stai scrivendo per te stesso (non nel mercato), allora è più facile fare finestre con pulsanti in C# e chiamare da MQL .dll in C# - qualsiasi fantasia con pulsanti, caselle di controllo, ecc. può essere realizzata in C# in mezz'ora - ora, ma ho dovuto cercare su Google materiale per una settimana.

L'unica cosa che dovete fare è guardare la barra che avete nella directory del Terminale e usarla per creare la vostra interfaccia - è la mia esperienza, ho imparato tutto quello che ho bisogno di sapere su di essa

ZS: Sì, mi ricordo, ho messo un semplice pannello in codebase, non ci sono pulsanti, ma ci sono etichette di testo e il codice è il più semplice possibile. https://www. mql5.com/ru/code/25897

No, non conosco C#.

Darò un'occhiata al pannello, grazie.