![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
GButton sınıfının örneğini neredeyse bitirdim ama kaçmam gerekiyor. Yarın bitirip sunacağım.
İyi. Gerçekten meraklı. )
İşte olanlar.
Düğmeye basarak veya sabitlemeden sabitlemeyi ayarlamak için düğme arka plana ve ön plana getirilebilir.
CanvasButton.mq5 örnek dosyası, düğmeyi fare ile sürükleme özelliğini uygular. Bunu yapmak için, mavi düğmeyi hareket ettirmek için Ctrl ve kırmızı düğmeyi hareket ettirmek için Shift tuşuna basmanız yeterlidir.
Çünkü GButton sınıfı, CCanvas sınıfının bir alt öğesidir , örnek, CircleWu çemberini kullanarak CCanvas sınıfının işlevlerini kullanma olasılığını gösterir (Bu, OnInit'te uygulanır). Bu, CCanvas sınıfının işlevlerini kullanarak buton üzerine metin yazabileceğiniz anlamına gelir.
Bu sınıf, elbette, nihai olduğunu iddia etmez. Grafikler mükemmel bir şekilde parlamaz ve 3D çok koşulludur, gölgeler uygulanmaz, yürütme hızı optimize edilmez. Ve büyük olasılıkla çok sayıda pürüzlü kenar ve çeşitli kontrollerin olmaması. Bu yüzden kesinlikle yargılamayın.
Biraz daha fazla zaman harcarsanız, elbette bu yapılabilir:
![](https://c.mql5.com/3/128/push.png)
Ben sadece denedim... biri denebilir - yönü belirlemek için.
Canvas.mqh dosyasının orijinal dosyadan farkı yalnızca m_pixels dizisinin genel olarak tanımlanmasıdır.
İşte olanlar.
Düğmeye basarak veya sabitlemeden sabitlemeyi ayarlamak için düğme arka plana ve ön plana getirilebilir.
CanvasButton.mq5 örnek dosyası, düğmeyi fare ile sürükleme özelliğini uygular. Bunu yapmak için, mavi düğmeyi hareket ettirmek için Ctrl ve kırmızı düğmeyi hareket ettirmek için Shift tuşuna basmanız yeterlidir.
Çünkü GButton sınıfı, CCanvas sınıfının bir alt öğesidir, örnek, CircleWu çemberini kullanarak CCanvas sınıfının işlevlerini kullanma olasılığını gösterir (Bu, OnInit'te uygulanır). Bu, CCanvas sınıfının fonksiyonlarını kullanarak buton üzerine metin yazabileceğiniz anlamına gelir.
Bu sınıf, elbette, nihai olduğunu iddia etmez. Grafikler mükemmel bir şekilde parlamaz ve 3D çok koşulludur, gölgeler uygulanmaz, yürütme hızı optimize edilmez. Ve büyük olasılıkla çok sayıda pürüzlü kenar ve çeşitli kontrollerin olmaması. Bu yüzden kesinlikle yargılamayın.
Biraz daha fazla zaman harcarsanız, elbette bu yapılabilir:
Ben sadece denedim... biri denebilir - yönü belirlemek için.
Canvas.mqh dosyasının orijinal dosyadan farkı yalnızca m_pixels dizisinin genel olarak tanımlanmasıdır.
Nikolay, bence, fena değil. Bir başlangıç yapıldı, daha fazla gelişme yapılabilir. Bu tür bir düğmeyi bir anahtar olarak adlandırırdım. Kenarlar boyunca 4 net çerçeve çizgisini ayırırsanız: - üst, sol, açık ve sağ, alt - basılı durum için koyu ve basılı durum için tam tersi, daha da iyi kalite elde edersiniz (sadece açık bir arka plan eklemeniz gerekir) , aksi takdirde siyah grafiğin arka planındaki koyu çizgiler görünmez). Peki, o zaman metin ve resim ayarlanabilir.
Kısacası, iyi deneme. )
. Kenarlar boyunca 4 net çerçeve çizgisini ayırırsanız: - üst, sol, açık ve sağ, alt - basılı durum için koyu ve basılı durum için tam tersi, daha da iyi kalite elde edersiniz (sadece açık bir arka plan eklemeniz gerekir) , aksi takdirde siyah grafiğin arka planına karşı koyu çizgiler görünmez).
Evet, istediğiniz gibi çizebileceğiniz açık. Bu durumda, bir başyapıt elde etmek için yola çıkmadım. Ancak geliştirmek istediğim ilk şey, başlatma sırasında düğme görüntüsünün tüm dizilerini oluşturmak (bu durumda, iki tane) ve ardından her seferinde bir görüntü oluşturmamak için bunları yalnızca ArrayCopy aracılığıyla kopyalamak. Bu, işi önemli ölçüde hızlandıracak, ancak ek RAM tüketimi pahasına. şimdi 16 gig RAM'e sahip bilgisayarlarda yaygın bir durum ve çok sayıda düğme olsa bile, özellikle aynı düğmeler aynı dizileri kullanıyorsa, ek bellek tüketiminin 1-2 MB'yi aşması pek olası değildir. O yüzden sorun olduğunu düşünmüyorum. Ana hız.
Apaçık. Düğmeyle ilgili soruyu gündeme getirdiğimde, bunu tuval yardımıyla yapmanın mümkün olup olmadığını öğrenmek istedim:
basıldı:
basıldı:
Bu örnekte, çerçevenin her bir tarafı birkaç satırdan oluşmaktadır. Çerçevenin her iki tarafında toplam 4 gradyan çizgisi. Her satırın, düğmenin durumuna ve belirtilen çerçeve şekline bağlı olarak kendi gölgesi vardır. CCanvas, belirli kenarlık gradyan çizgileri için renk ayarlama yeteneğine sahipse, yukarıdaki örnek kolayca yapılabilir. Tam olarak bilmek istediğim şey buydu.
Apaçık. Düğmeyle ilgili soruyu gündeme getirdiğimde, bunu tuval yardımıyla yapmanın mümkün olup olmadığını öğrenmek istedim:
basıldı:
basıldı:
Bu örnekte, çerçevenin her bir tarafı birkaç satırdan oluşmaktadır. Çerçevenin her iki tarafında toplam 4 gradyan çizgisi. Her satırın, düğmenin durumuna ve belirtilen çerçeve şekline bağlı olarak kendi gölgesi vardır. CCanvas, belirli kenarlık gradyan çizgileri için renk ayarlama yeteneğine sahipse, yukarıdaki örnek kolayca yapılabilir. Tam olarak bilmek istediğim şey buydu.
Seni anlamıyorum Peter. Sen etten bahsediyorsun, ben de iskeletten. Kemikler olsaydı, et yapılabilir. Örneğimde Basılan, Serbest Bırakılan Durumlar yoksa? GButton sınıfının içine baktınız mı? Peter, benim tavsiyem: her şeyi bırak ve acilen OOP'yi çalış, sınıflar OOP'dir. Sadece projenizde aşırı büyümüş kod denilen bir tavana çarptınız, OOP yardımıyla kolayca üstesinden geliniyor.
))) Peki, bu konuyu neden açtım? ) Şimdi OOP çalışacağım.
Örneğinizde butonlar, click olayları ve bu butonların durumları var. Her şey yolunda. Ama Nikolai, hala ne sorduğumu anlamadım - CCcanvas sınıfında sınır degrade çizgileri için belirli bir renk ayarlamak mümkün mü? Örneğinize bakınca, var olduğunu düşünebilirsiniz... Eğer öyleyse, benim örneğime benzer bir şey çizebilir misiniz? Ben bu sınıfın işlevselliği ile kendi başına çizim yapma kolaylığı ve yeteneği ile ilgileniyorum ve siz sınıfın işlevselliğindeki hız ve iyileştirmelerden bahsediyorsunuz. Bu biraz farklı bir konu.
))) Peki, bu konuyu neden açtım? ) Şimdi OOP çalışacağım.
OOP, Canvas ile değil, daha basit bir şeyle öğrenmeye başlamak daha iyidir.
GButton sınıfının içine baktınız mı?