Sıfırdan bir grafik kitaplığı oluşturma

 
ders
 

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Kitle kaynaklı GUI. Açık beta testi.

Alexey Barbashin , 2020.03.07 21:25

"ama her şeyi nesnelerde yapmak daha kolay olabilir" - bu mantıklı olmaktan daha fazlasıdır

"Evet, elbette, kısmen buna güveneceğiz." - o zaman hemen düzeltiriz:

 class CCoordPBase

Наследуемся от CObject, то есть:

class CCoordPBase : public CObject

Хотя наверное можно и по другому:

class Control : public CObject

CObject, geliştirici kitaplığındaki tüm nesnelerin temel sınıfıdır. C++ ve C# ile kıyaslanarak yapılmıştır. Sharpe'da temel nesne (tür) Object'tir.

Koordinatlar ve boyutlar zaten öğenin (kontrolün) özellikleridir, ayrıca tabanın rengi , çerçevenin rengi ve kalınlığı, yuvarlama yarıçapları, simge ve metin.

İlk önce, kompozisyon açısından temel olarak hangi tür kontrolü ele alacağımızı belirlemelisiniz ve bundan dans edin, yani temel özellikleri tanımlayın.

Tabii ki, daha önce tanımlanmış özelliklerden bazıları torunlarda daha fazla kullanılmayabilir, bu artık bir sorun değil, ancak temeli en evrensel hale getirmek daha iyidir.

Uzaklara bakmamak için, en basit evrensel kontrolün örnek bir örneği:

Arka plan, kenarlık, yarıçap, simge, metin içerir

Etiket almanız gerekiyorsa arka plan, kenarlık ve simge belirtilmez, Panel gerekiyorsa içerik belirtilmez, resim düğmesi gerekiyorsa yalnızca simge belirtilir, bir resim gerekli, daha sonra arka plan, çerçeve ve resim belirlenir..

Yani, böyle bir bileşim çoğu kontrol için oldukça evrenseldir.


bununla açık, koordinatları korurken vurgulu stili değiştirme sorunu ... zaten açık gibi görünse de

Standart bir kontrol kütüphanesi var mı?

 

CObject'in özü, tüm nesneleri yazmaktır.

Örneğin, bir liste kitaplığına ihtiyacımız var (eleman listesi, birleşik giriş kutusu, kontrol listesi vb.). Her eleman tipi için Anatoly'nin yaptığı gibi kendi dizi tipimizi oluşturabiliriz veya hazır bir araç kullanabilirsiniz: CArrayObj

Yani birçok kod parçasının icat edilmesine gerek yok, zaten varlar, alın ve kullanın.

 
Alexandr Andreev :

bununla açık, koordinatları korurken vurgulu stili değiştirme sorunu ... zaten açık gibi görünse de

Standart bir kontrol kütüphanesi var mı?

Temel olarak, standart kütüphaneyi geliştiricilerden alabilirsiniz, bunda, hiyerarşilerinde utanç verici bir şey görmüyorum.

Tabii ki, doğrudan inşaatla bağlantılı her şey oradan atılmalıdır, ancak olay aktarım sistemi bırakılmalıdır - gerçekten evrenseldir!

Bu teknolojiye göre, en karmaşık kontrol elemanı bile hangi sınıfa ait olursa olsun, olaylar yazılı bir temel nesne sistemi aracılığıyla iletilecektir.

Ana kontrolün çizimi, temel CControls'de gerçekleştirilecek ve ardından OnPaint() olayı oluşturulacaktır. Bu, torunları bitirmenize/yeniden çizmenize izin verecek ve genellikle kullanıcıya kontrolü istediği gibi yeniden çizme fırsatı verecektir.

 
Alexandr Andreev :

Haydi!!!!!

ve hemen temel bir etkileşimi dosyalamayı düşündüm

bir satırda veya bir sütunda sıralanması durumunda önceki nesnenin solunda sözde konumlandırma yapacağımız yer

genel olarak, evrensel bir kontrol yazıyoruz

Bunu tam olarak böyle oluşturmanız gerekir: temel bir etkileşimi dosyalayın.

Başlangıç seviyesindeki temel kontrol, gerekli tüm özelliklere sahip olmak zorunda değildir, sadece bir arka plan yeterli olacaktır.

Sonuçta, kontrolün kendisini çizmek için ilgili işlevi içerecektir. Bu nedenle, herhangi bir özellik eklerken, yalnızca tek bir işlevin tamamlanması gerekecektir.

Öğe hiyerarşisine göre mi?

CObject - temel tür

class CControl : genel CObject - kitaplığın kendisinin temel kontrolü

class CCContainerControl : genel CControl - grup kontrolü. Alanlarından biri bir dizi iç içe kontrol olacaktır. CWndContainer standart kitaplığında bir örnek görebilirsiniz.

 
Sasha, zaten kodlamaya başladığınıza göre, MQL'de açık bir proje yapın, ortak geliştirme yapmak mümkün olacak ve isteyenler buna bağlanabilir. Kim bilir belki vardır.
 
Алексей Барбашин :
Sasha, zaten kodlamaya başladığınıza göre, MQL'de açık bir proje yapın, ortak geliştirme yapmak mümkün olacak ve isteyenler buna bağlanabilir. Kim bilir belki vardır.

ara verdiğimde ... standart kitaplıklara bakıyorum .... bir sürü ekstra şey var

çok olmasa da))) ancak kendi denetleyicinizi yazmanız daha doğru olur ... iyi, ya da hemen miras alın

CChartObject

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Алексей Барбашин :
Sasha, zaten kodlamaya başladığınıza göre, MQL'de açık bir proje yapın, ortak geliştirme yapmak mümkün olacak ve isteyenler buna bağlanabilir. Kim bilir belki vardır.

Bence sıfırdan çok erken, önce bir şeyler atmalısın

 
Alexandr Andreev :

ara verdiğimde ... standart kitaplıklara bakıyorum .... bir sürü ekstra şey var

çok olmasa da))) ancak kendi denetleyicinizi yazmanız daha doğru olur ... iyi, ya da hemen miras alın

CChartObject

Hayır hayır!!

Dikkatli bak!

Bu kontrol hiçbir yere giden yol değil! Ayrık grafik nesnelerine ihtiyacımız yok! Tuval üzerine çizim yapmanız gerekiyor - sadece bu gelişme ve bol fırsatlar sağlayacaktır.

Ve kendi ana kontrolünüzü yapmanız gerektiği gerçeği açık.

Standart kitaplıkta, özellikler ve durumlar CWndObject ve CWnd arasında bölünür, ancak her şeyi tek bir kontrolde birleştirmemiz gerekir.

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

Hayır hayır!!

Dikkatli bak!

Bu kontrol hiçbir yere giden yol değil! Ayrık grafik nesnelerine ihtiyacımız yok! Tuval üzerine çizim yapmanız gerekiyor - sadece bu gelişme ve bol fırsatlar sağlayacaktır.

Ve kendi kontrolünüzü yapmanız gerektiği gerçeği açık.

Standart kitaplıkta, özellikler ve durumlar CWndObject ve CWnd arasında bölünür, ancak her şeyi tek bir kontrolde birleştirmemiz gerekir.

Çeyrek saat boyunca bir proje oluşturmaya çalıştım - ve ortaya çıkmak için yaratıldı, şimdi onu nasıl halka açık hale getireceğime bakıyorum

 
Alexandr Andreev :

Bence sıfırdan çok erken, önce bir şeyler atmalısın

Eminim sıfırdan ve buna değmez.

Çok zeki insanlar aynı standart kütüphaneyi ya da Anadolu kütüphanesini yapmak için çok zaman ve bilgi harcamışlardır.

İnsanlar zaman ve bilgiyi boşa harcadılar ve onu kullanmamak aptallık olur.

Sadece bizim açımızdan her ikisinde de en iyisini alıp yeniyi toplamanız gerekiyor.

Başkalarının hatalarından ders almanız gerekir. Kendimizi yaratacağız :)

Neden: