Canvas üzerinde bir kitle kaynaklı proje yapma - sayfa 8

 
o_O :

TAMAM.

CFrame ile açıktır.

---

GUI bloklarının her biri kendi bit eşlemiyle temsil edildiğinde yola çıktığınızı fark ettim.

okuyucular ve şimdiden düşünmeye başlayanlar için önemli bir nokta:
iş, üzerinde tüm gui öğelerinin oluşturulmasıyla birlikte yalnızca bir bitmap üzerinde yapılmalıdır. z-sırasını dikkate alarak.
Bu durumda, işleme için daha fazla fırsat olacaktır. (gölgeler, gradyanlar, vb.)
Ve kontrol basitleştirildi (MT nesneleri seviyesine gitmeyeceğiz)

IMHO, her ayrı uygulama penceresinin (iletişim kutusu) grafikte kendi bitmap'i ve nesnesi olmalıdır (birkaç Uzman Danışman veya göstergenin bir bitmap kaynağına "tecavüz ettiği" durumu düşünmemeliyiz bile).
Bu durumda, pencereden gelen gölge, bitmap'in alfa kanalı olarak uygulanabilir ve böylece bu gölgenin hesaplanmasındaki hesaplama yükünü ortadan kaldırabilir.
Ayrı bir pencerenin tüm GUI öğeleri, Z sırası ve yuvalama dikkate alınarak bit eşleminde çizilir (GUI nesnelerinin yuvalanmasının doğru olarak ne dendiğini bilmiyorum)

CHARTEVENT_MOUSE_MOVE üzerinden fare olaylarını takip edin, projelerimde tam da bunu yaptım, herhangi bir fren bulamadım.
Fare girişinin kalitesini kaybetmeden diğer olayları kullanmak mümkün değildi.
 
MQL'deki zanaatlarım için, işaretleme ve olaylar bir metin dosyasında (örneğin XML) açıklandığında GUI kitaplığını bir WPF analoğuna getirmek istiyorum.

Bana kalan tek şey GUI motorunun çağıracağı olayları metin dosyasındaki açıklamaya göre uygulamak.
 
Zorro :
IMHO, her ayrı uygulama penceresinin (iletişim kutusu) grafikte kendi bitmap'i ve nesnesi olmalıdır (birkaç Uzman Danışman veya göstergenin bir bitmap kaynağına "tecavüz ettiği" durumu düşünmemeliyiz bile).
Bu durumda, pencereden gelen gölge, bitmap'in alfa kanalı olarak uygulanabilir ve böylece bu gölgenin hesaplanmasındaki hesaplama yükünü ortadan kaldırabilir.
Ayrı bir pencerenin tüm GUI öğeleri, Z sırası ve yuvalama dikkate alınarak bit eşleminde çizilir (GUI nesnelerinin yuvalanmasının doğru olarak ne dendiğini bilmiyorum)

her şey doğru.

Bunu sadece "her diyalogu" değil, özellikle bir uzman/gösterge için - bir bitmap için eklerdim. Daha fazlası mümkündür, ancak bu kodlayıcının takdirindedir.

Bitmap üzerinde çalışan bir iletişim kutusu olduğunda, buna kalıcı pencereler veya aynı bitmap üzerinde yakındaki başka bir iletişim kutusu eklemenin bir teknik meselesi olduğunu ve şimdi önemli olmadığını düşünüyorum.

İlk önce, belirli olmayan soyut bir model yaparız - hangi pencereler, nerede oldukları vb.

O zaman tüm çapkınları ve çeşitli davranışları örtmek mümkün olacaktır.

 
o_O :

Merhaba kodlayıcılar.

Gerçekten faydalı bir şey yapmak için ilginç bir görev var ve bence kitle kaynak kullanımı iyi bir seçenek olacak.
İlk olarak, çalışmanın sonuçları erken aşamalarda herkese açık olacaktır. İkinci olarak, MQL kullanarak yeni bir şey yapalım. Hatta belki de MT geliştiricilerinden yeni özellikler talep edeceğiz.

----

Yani, ilk ve temel görev.

1. Bir button sınıfı yapmanız gerekiyor (GButton diyelim, var olanlarla karıştırılmaması için G öneki).
- düğme metinle hala basittir (ek resimler olmadan)
- düğme, tuvalin bazı bölgelerine çizilir
- düğmede bir tıklama olayı var.



---
Zamanla, kodları bitbucket üzerinde yayınlayacağız.

İlgiyle takip ediyorum ve biraz müdahale edeceğim: imho bir geliştirici (benim gibi) bir GUI kalabalığına yatırım yapar, eğer bu GUI sadece terminal aracılığıyla çizilemezse. Açıklayayım - güzel bir arayüz, iyi, satış için bir artı .. ama şimdiye kadar kaynakları tüketmiyor. Arka uçları değiştirebilen bir GUI kitaplığına sahip olmak ideal olacaktır. Örneğin, kaynak üzücü olmasa da - terminal tarafından tuval üzerine çizilmesine izin verin (bunlar her türlü demo / pazardır). Ve ciddi bir şey olur olmaz - bir bitmap üzerinde hızlı bir şekilde çizim yapmak. Ayrıca, çizimle daha kolay başa çıkan her türlü Kahire (OpenGL'den bahsetmiyorum bile) vardır.

Genel olarak, ayrı bir uygulamada tasarlanmış ve örneğin XML olarak içe aktarılmış bir GUI'ye sahip olmak idealdir. Expert Advisor'da butonların ve diyalog formlarının yerlerini açıklamanın amacı bu değildir.
 
Örnek, şematik olarak:

İşaretleme:
 <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>
Olayların uygulanması:
 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 :

Genel olarak, ayrı bir uygulamada tasarlanmış ve örneğin XML olarak içe aktarılmış bir GUI'ye sahip olmak idealdir. Expert Advisor'da butonların ve diyalog formlarının yerlerini açıklamanın amacı bu değildir.

yuh)

Elementleri oluşturduktan sonra yapacağımız ilk görevimize geldiniz.

 
Maxim Kuznetsov :
Genel olarak, ayrı bir uygulamada tasarlanmış ve örneğin XML olarak içe aktarılmış bir GUI'ye sahip olmak idealdir. Expert Advisor'da butonların ve diyalog formlarının yerlerini açıklamanın amacı bu değildir.
Bu durumda ilk adım hızlı ve iyi bir XML ayrıştırıcı yazmaktır. Vesch ekonomide çok gereklidir. Ben kendim CodeBase'den bir seçenek kullanıyorum, özellikle yeni yapılarda belirli görevleri çok yavaşlatıyor. Bu ayrıştırıcıya zaten tüm yamalarda ve koltuk değneklerinde sahibim. Genel olarak, iyi bir ayrıştırıcı tovarischi yazın! Herkesi mutlu et.
 
Vasiliy Sokolov :
Bu durumda ilk adım hızlı ve iyi bir XML ayrıştırıcı yazmaktır. Vesch ekonomide çok gereklidir. Ben kendim CodeBase'den bir seçenek kullanıyorum, özellikle yeni yapılarda belirli görevleri çok yavaşlatıyor. Bu ayrıştırıcıya zaten tüm yamalarda ve koltuk değneklerinde sahibim. Genel olarak, iyi bir ayrıştırıcı tovarischi yazın! Herkesi mutlu et.
Belki çalışan ve tamamen çizilmiş bir kaydırıcıyı nasıl yapacağınızı biliyorsunuzdur? Genel anlamda en azından... Genel kavramı öğrenmek istiyorum.
 
Реter Konow :
Belki çalışan ve tamamen çizilmiş bir kaydırıcıyı nasıl yapacağınızı biliyorsunuzdur? Genel anlamda en azından... Genel kavramı öğrenmek istiyorum.
Maalesef tavsiyede bulunamam. Bu, sıradan ilkeller temelinde oluşturulmuş olsa bile oldukça karmaşık bir unsurdur.
 
Реter Konow :
Belki çalışan ve tamamen çizilmiş bir kaydırıcıyı nasıl yapacağınızı biliyorsunuzdur? Genel anlamda en azından... Genel kavramı öğrenmek istiyorum.

CCanvas sınıfına bakın. tüm işleme ilkelleri mevcuttur.

ikincisi - öğeleriniz için bmp yükleyebilir ve bunları tuval üzerine BitBlt olarak tokatlayabilirsiniz

Neden: