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

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

Yukarıdakilere dayanarak, yapı öğesinin belirli bir diyalog kontrolü olduğu, kendi özelliklerini içerdiği ve iç içe kontroller içerebileceği anlaşılabilir. Böyle bir evrensel kontrolün özellikleri, yalnızca geliştiricinin hayal gücü ile sınırlıdır.

Tabii ki, yapıya yükselemezsiniz, ancak çok boyutlu bir dizideki kontrollerin özelliklerini tanımlayabilirsiniz, ancak bu başlangıçta uygun maliyetli değildir, çünkü bazı özelliklerin hangi dizinde saklandığını açıkça hatırlamanız gerekir. Ve bir dizi heterojen veri türleri içeremez. Prosedürel programlamada bir kontrol elemanını sadece yapılar aracılığıyla tanımlamanın mümkün olduğu ortaya çıktı. Yani, bir yapı elemanı belirli bir kontrol elemanıdır, yani kendi özelliklerine sahip belirli bir diyalog nesnesidir.

Standart kitaplıkta Include, anahtar/değer arabirimini uygulayan CHashMap sınıfını içeren bir Genel klasöre sahiptir.
Bir nesne, herhangi bir türden bir dizi değere sahip olabilir. Harita ağacının bir yürütme karmaşıklığı olmasına rağmen, oldukça hızlı çalışır.
Belki özellikleri anlatmak için bile uygun, genel olarak denemeniz gerekiyor.
Veya bu kitaplıktan görev için daha uygun olan başka bir sınıf türü kullanın.

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

Tekrar okudum, yani. bu dizide bilgi depolamak için bir piksel dizisine eşit bir dizi saklamayı öneriyorsunuz (sizin durumunuzda, işleme için "hangi işlev numarası" kullanılmalıdır). ?

 
Maxim Kuznetsov :

o zaman bir ters çöp olacak - arayüzü programa bağlamak için. Örneğin, kesinlikle bir zaman damgasına ve bir fiyata bağlı bir düğme yapın.

işte uçuşta yazılmış ayrı bir GUI - tüm tablolar, sekmeler, menüler ve ıslıklarla. C# veya hatta BASIC'te. Ve grafiğin içinde - bu, harici uygulamalar için önemli bir sorundur.

Ve neden o zaman arayüzü grafiğe bağlıyorsunuz?
Sonuçta, ilgili işlevlerden herhangi bir veriyi, aynı zaman damgalarını ve fiyatı doğrudan alabilirsiniz.

 
Alexandr Andreev :

Tekrar okudum, yani. bu dizide bilgi depolamak için bir piksel dizisine eşit bir dizi saklamayı öneriyorsunuz (sizin durumunuzda, işleme için "hangi işlev numarası" kullanılmalıdır). ?

Bana sorarsanız, ben böyle bir şey teklif etmedim. Hiçbir şey önermedim.)) Sadece görüşlerimi biraz anlattım. Aynı fikirde olmayabilirsiniz.

 
Реter Konow :

Prensip olarak, türleri genelleştirmek mümkündür. Nesne özelliklerinin büyük çoğunluğu int türünde olsaydı, kötü bir şey olmayacağı sonucuna vardım. Diğer tüm (çift, grafik nesnelerinin özelliklerinde pratik olarak yoktur) kısaltılmış türler, basitleştirme uğruna reddettim. Belleğin "aşırı harcanması" o kadar önemsizdir ki, onu düşünmenin bir anlamı yoktur. Tabii ki, profesyonelliği yükseltmek uğruna, hiçbir şekilde böyle bir küfüre gidemezsiniz))) Ama şimdi 21. yüzyıl ve yangın beni tehdit etmiyor.))

Nesnelerin adlarını numaralandırdım ve bunları genel nesne özellikleri satırına koydum.

Farklı bir veri tipine ihtiyaç duyduğum tek yer kontrollerin parametreleriydi. Orada, parametrelerin özelliklerini depolayan ikinci bir çekirdek oluşturdum ve değerlerin kendisi, herhangi bir şeye kolayca aktarabileceğim (daha doğrusu parametre özelliklerinde yazılanlara) dize türündedir.

not. "Bir kontrolün parametresi", ELEMAN TARAFINDAN KONTROL EDİLEN PARAMETRE anlamına gelir.

Tüm kontrolleri ve tüm özelliklerini içeren global dizinin, kontrollerin tüm farklı özelliklerinin toplamına eşit bir derinlik boyutuna sahip olduğu ortaya çıktı. Yani, eleman bazı özelliklere ihtiyaç duymasa bile, dizi her zaman tekdüze olduğundan, bu hücreler yine bu dizide olacaktır.

Ancak sürpriz, dizinin kendisinin tekdüzeliğidir. Bu bağlamda, bir yapının kullanımı haklı olmaktan daha fazlasıdır, çünkü bu durumda özelliklerin her biri, birleşim de dahil olmak üzere kendi türüne göre tanımlanabilir.

Yapıları kullanmak, özelliklerin depolanmasını gerçekten basitleştirir, kendinizi bir türle sınırlamanıza veya bir şeyi reddetmenize gerek yoktur. Dizeden diğer veri türlerine dönüşümler ile uğraşmanıza gerek yok... Yapı başlangıçta tüm bu kısıtlamaları kaldırır.

Bu global dizi, özelliklerin ve koordinatların kendilerine ek olarak, aynı zamanda elemanların tabi olma sistemini de depolamalıdır. Çizimimizde Caption nesnesi değiştiyse, butonlar da başlık alanında yer aldığından yeniden çizime tabidir. Yani, herhangi bir "orta" kontrol elemanı değiştiyse, üzerindeki her şeyi yeniden çizmek gerekir. Piotr, nesne bağımlılık yapısını nasıl saklıyorsunuz?
 
Алексей Барбашин :

Tüm kontrolleri ve tüm özelliklerini içeren global dizinin, kontrollerin tüm farklı özelliklerinin toplamına eşit bir derinlik boyutuna sahip olduğu ortaya çıktı. Yani, eleman bazı özelliklere ihtiyaç duymasa bile, dizi her zaman tek tip olduğundan, bu hücreler yine bu dizide olacaktır.

Ancak sürpriz, dizinin kendisinin tekdüzeliğidir. Bu bağlamda, bir yapının kullanımı haklı olmaktan daha fazlasıdır, çünkü bu durumda özelliklerin her biri, birleşim de dahil olmak üzere kendi türüne göre tanımlanabilir.

Yapıları kullanmak, özelliklerin depolanmasını gerçekten basitleştirir, kendinizi bir türle sınırlamanıza veya bir şeyi reddetmenize gerek yoktur. Dizeden diğer veri türlerine dönüşümler ile uğraşmanıza gerek yok... Yapı başlangıçta tüm bu kısıtlamaları ortadan kaldırıyor.

Çekirdek matristir. Nesnelerin tüm özelliklerini içerir.

Yönteminizi seçebilirsiniz. Ancak, gui'yi yıllarca incelediğimde, başka hiçbir yolun gelişen bir sistemin işlevselliğinde benzer bir artış sağlayamayacağı sonucuna vardım. Maksimum basitlik ve verimlilik mükemmelliktir.


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

...Peter, nesne bağımlılık yapısını nasıl saklarsın?

Koordinat bağımlılıklarını kastediyorsanız, o zaman çekirdekte de.

Özel bir nesne koordinat bağımlılığı işleyicim var. Her türlü bağımlılıkla çalışır.
 
Roman :

Ve neden o zaman arayüzü grafiğe bağlıyorsunuz?
Sonuçta, ilgili işlevlerden herhangi bir veriyi, aynı zaman damgalarını ve fiyatı doğrudan alabilirsiniz.

uygulama arayüzünün (kullanıcının ne üzerinde çalıştığı) tek bir pencere ile sınırlı olmamasına bağlıdır.

Ticaretten mi bahsediyoruz?

Eh, etkileşimli öğelerin çizelgeye (ve bunların bağlantılarına) harici yollarla yerleştirilmesi neredeyse çözülemez ve bu neredeyse ana ve en önemli şeydir.

Tekrar ediyorum: harici diyalogların/formların çizilmesi kolaydır. Ve grafiğin içinde, terminalin özellikleri olmayan öğeler ve belirli bir grafik - neredeyse hiçbir şey.

 
Реter Konow :
Çekirdek matristir. Nesnelerin tüm özelliklerini içerir.

Yönteminizi seçebilirsiniz. Ancak, gui'yi yıllarca incelediğimde, başka hiçbir yolun gelişen bir sistemin işlevselliğinde benzer bir artış sağlayamayacağı sonucuna vardım. Maksimum basitlik ve verimlilik mükemmelliktir.


Bir matris, döngülerin iç içe geçmesidir ve iç içe döngüler zamandır. IMHO, alay yok, sadece mantıklı akıl yürütme.

 

Peter, şu ortaya çıkıyor: çekirdek, küresel bir eleman özellikleri matrisinden, global bir eleman değerleri matrisinden, bir global bağımlılık matrisinden, bir global resim matrisinden oluşur ...

Biraz daha özellik eklemeniz gerekirse, matrislerin boyutu artar.

Hücrelerin adları olmadığından, mülk erişimleri kesinlikle dizine göre gerçekleştirilir.

Yapıda en az alan adlarına hitap etmek mümkündür.

Peter, sen... bir dev...

Örneğin, şöyle görüyorum (basitleştirilmiş):

 class CControl : public CObject

{

public :

         int ПозицияХ;

         int ПозицияY;

         int Длина;

         int Ширина;

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

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

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

}

Fiili bir "sınıf", global dizinizdeki belirli bir dizedir, yalnızca daha "insan" bir yüzünde. Sınıflar, dizinle değil, adla erişilebilen bir dizi anlaşılabilir özellik ile kendi veri nesnelerini oluşturmak üzere tasarlanmıştır. Bir sınıf yalnızca genel bir tür oluşturucudur.

Bu nedenle, hemen hemen tüm kontrollerin sahip olduğu en yaygın özellikleri içeren temel bir kontrol oluşturuyoruz.

Temel olarak, özel nesneler oluşturabilirsiniz:

 class CButton : public CControl 

{

public :

         string Заголовок;

         int Image[];

}

Yani, takip eden her bir kontrol tipi, temel tipe gerekli özellikleri basitçe ekler.

Ve daha önce yazdığım gibi, ana özellikler temel denetleyicide depolandığından, imlecin "isabetinin" kontrole geçişi, bir veri türü kontrol edilirken gerçekleştirilir: CControl. İstenen nesneyi bulduktan sonra, programın noktası zaten nesnenin kendisinde olduğundan program hemen bu nesnenin özelliklerine erişir, tıpkı döngünüzde olduğu gibi program dizinin istenen satırındadır.