Fare un progetto in crowdsourcing su Canvas - pagina 8

 
o_O:

OK.

il CFrame è chiaro.

---

Ho notato che hai intrapreso il percorso in cui i blocchi della gui sono rappresentati ciascuno dalla propria bitmap.

un punto importante per coloro che leggono questo e che hanno già iniziato a pensarci:
dovrebbe lavorare solo su una bitmap, con tutti gli elementi della gui resi su di essa. Compreso l'ordine z.
In questo caso, ci saranno più possibilità di rendering. (ombre, gradienti, ecc.)
E il controllo è semplificato (non andremo al livello degli oggetti MT)

IMHO, ogni singola finestra di applicazione (dialogo) dovrebbe avere la propria bitmap e il proprio oggetto sul grafico (non considerare nemmeno il caso in cui più EA o indicatori "violentano" una singola risorsa bitmap).
In questo caso, l'ombra di una finestra può essere implementata come una bitmap a canale alfa e quindi rimuovere il carico computazionale del calcolo di questa ombra.
Tutti gli elementi GUI di una singola finestra sono disegnati sulla sua bitmap considerando l'ordine Z e l'annidamento (non so come chiamare correttamente l'annidamento degli oggetti GUI)

Monitorare gli eventi del mouse attraverso CHARTEVENT_MOUSE_MOVE, l'ho fatto nei miei progetti, nessun ritardo trovato.
Non è stato possibile utilizzare altri eventi senza perdere la qualità dell'input del mouse.
 
Per i miei progetti MQL, voglio portare la libreria GUI all'analogo di WPF, dove markup ed eventi sono descritti in un file di testo (per esempio XML).

Mi resta solo da implementare gli eventi che il motore GUI chiamerà secondo la descrizione del file di testo.
 
Zorro:
IMHO, ogni singola finestra di applicazione (dialogo) dovrebbe avere la propria bitmap e il proprio oggetto sul grafico (non considerare nemmeno il caso in cui più EA o indicatori "abusano" di una risorsa bitmap).
In questo caso, l'ombra di una finestra può essere implementata come una bitmap a canale alfa e quindi rimuovere il carico computazionale del calcolo di questa ombra.
Tutti gli elementi GUI di una singola finestra sono disegnati sulla sua bitmap considerando l'ordine Z e la nidificazione (non so come chiamare la nidificazione degli oggetti GUI)

questo è corretto.

Aggiungerei che non solo "ogni dialogo", ma specificamente una bitmap per esperto/indicatore. Più è possibile, ma è a discrezione del codificatore.

Penso che quando si ha un dialogo funzionante sulla bitmap, allora aggiungere finestre modali sulla stessa bitmap o un altro dialogo sulla stessa bitmap è una questione di tecnica e non è cruciale in questo momento.

Prima di tutto, facciamo un modello astratto senza specifiche, per esempio quali finestre si trovano dove, ecc.

Allora sarete in grado di coprire tutte le diverse caratteristiche e comportamenti

 
o_O:

Saluti ai codificatori.

C'è un compito interessante per fare qualcosa di veramente utile, e penso che il crowdsourcing sarebbe una buona opzione.
In primo luogo, i risultati saranno disponibili a tutti nelle prime fasi. In secondo luogo, faremo qualcosa di nuovo usando MQL. E forse chiederemo anche agli sviluppatori di MT nuove chicche.

----

Quindi ecco il primo e fondamentale compito.

1. Dobbiamo fare una classe di pulsante (diciamo GButton, con il prefisso G per non confondersi con quelli esistenti).
- Finora il pulsante è semplice con del testo (nessuna immagine extra)
- il pulsante è disegnato su una certa area del canvas
- il pulsante ha un evento click.



---
Col tempo renderemo i codici sul bitbucket.

Lo sto seguendo con interesse e vorrei interferire un po': imho gli sviluppatori (come me) investirebbero in GUI affollate, se questa GUI può essere disegnata non solo per mezzo del terminale. Mi spiego: una bella interfaccia grafica è buona, è un vantaggio per le vendite... ma non sta ancora consumando risorse. Sarebbe ideale avere una libreria GUI che possa commutare il back-end. Per esempio, mentre non sono troppo anale sulle risorse - lasciate che sia disegnato da terminale su tela (demo/mercato), ma appena qualcosa di serio - disegnatelo tramite strumenti veloci su bitmap. Ci sono tutti i tipi di cairo (per non parlare di OpenGL) che gestiscono il disegno più facilmente.

La GUI ideale è progettata in un'applicazione separata e importata come XML per esempio. Non è una buona idea descrivere la posizione dei pulsanti e delle forme di dialogo in un EA.
 
Esempio, schematico:

Layout:
<sample>
   <window
     name='Sample'
     caption='Sample'
     x=0
     y=0
     width=320
     height=240
     OnClose='CloseApp'>

     <button caption='Exit' x y width height OnClick='ButtonExitClick'/>    

   </window>

</sample>
Realizzazione di eventi:
class SampleCloseAction : public CloseAction
  {
public:
               SampleCloseAction() { SetActionName("CloseApp"); }
   virtual int Execute() { Print('Bye'); return(0); }
  };

class ButtonExitAction : public ButtonClickAction
  {
public:
               ButtonExitAction() { SetActionName("ButtonExitClick"); }
   virtual int Execute() { GUI::WindowClose('Sample'); return(0); }
  };

BaseAction *actions[];

actions[0]=new SampleCloseAction;
actions[1]=new ButtonExitAction;

GUI::WindowCreate('Sample',actions);
 
Maxim Kuznetsov:

In generale, sarebbe ideale avere una GUI progettata in un'applicazione separata e importata come XML per esempio. Non è una buona idea scrivere il layout dei pulsanti e delle forme di dialogo nell'Expert Advisor.

lì )

si arriva al nostro primo compito, che faremo dopo aver creato gli elementi.

 
Maxim Kuznetsov:
In generale, sarebbe ideale avere una GUI progettata in un'applicazione separata e importata come XML per esempio. Non è una buona idea scrivere layout di pulsanti e moduli di dialogo in un EA.
In questo caso, prima di tutto, si dovrebbe scrivere un parser XML veloce e buono. È una buona cosa da avere in casa. Io stesso uso una versione di CodeBase, è troppo lento per alcuni compiti, specialmente per le nuove build. Ho già tutti questi cerotti e stampelle. In generale, scrivete un buon parser compagni! Rendilo facile per tutti.
 
Vasiliy Sokolov:
In questo caso, dovreste iniziare a scrivere un parser XML veloce e buono. È una cosa molto utile da avere in casa. Io stesso sto usando una versione di CodeBase, ma è davvero lento su alcuni compiti, specialmente nelle nuove build. Ho già tutti questi cerotti e stampelle. In generale, scrivete un buon parser compagni! Rendilo facile per tutti.
Forse sapete come fare un cursore completamente funzionante e completamente disegnato? In termini generali almeno... Vorrei afferrare il concetto generale.
 
Реter Konow:
Forse sapete come fare un cursore funzionante e completamente disegnato? In termini generali almeno... Vorrei imparare il concetto generale.
Sfortunatamente, non posso. È un elemento piuttosto complicato anche se lo si crea sulla base di normali primitive.
 
Реter Konow:
Forse sapete come fare un cursore completamente funzionante e disegnato? In termini generali almeno... Vorrei imparare il concetto generale.

Guarda la classe CCanvas. tutte le primitive di rendering sono disponibili.

In secondo luogo, puoi caricare bmp per i tuoi vuoti e mischiarli a la BitBlt sulla tela.