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
Create_resource (dize Kaynak_adı
Kaynak_adı - ne sıklıkla değişir? bellekte kaç kaynak var?
Kelimenin tam anlamıyla birkaç. Açık pencerelerin sayısına bağlıdır. Şu anda 1-2 pencere ile aynı anda çalışıyorum. Her pencerede 3 - 4 bitmap nesnesi vardır. Bir yerde 8 kaynak çıkıyor. (Bence yavaşlamak yeterli değil...)
Windows, arayüz olaylarında güncellenir (artık yalnızca tıklamalarda, diğer olaylar devre dışı bırakılır). Aynı zamanda, bir süre sonra değil, hemen yavaşlar. İlk tıklamada. Ek olarak, "fren kuvveti" ile pencerenin boyutu arasındaki ilişki açıkça görülmektedir. Pencere ne kadar büyük olursa, resmin tepkisi o kadar yavaş olur.
Aynı zamanda, ResourceCreate() öğesinin hemen ulaşmadığı, ancak yerel diziyi bir görüntü ile "doldurduktan" sonra, yani tüm renk hesaplamalarından ve görüntü dizisinin başlatılmasından sonra dikkate alınmalıdır. Bence sorun bu.
Son bir sonuca varmak için görüntüyü statik veya global bir dizide saklayacağım. Arabirim olaylarında, yerel diziyi başlatmadan ve ColorToARGB() öğesini çağırmadan pencereyi ResourceCreate () öğesine göndererek hemen güncelleyeceğim.
Bundan sonra frenleme etkisi kaybolursa, o zaman bahsettiğim nokta budur. Olmazsa sorun başka yerde...
Bunu yarın kontrol etmeye çalışacağım. Deneyimden sonra sonuçları yayınlayacağım.
profil oluşturucu ile çalıştırın.
@Peter Konow , kodda neden bu kadar çok İngilizce kelime var?
Saf Rusça'ya geçin:
#define пока while
#define Печатать Print
void OnStart ()
{
целочисленное номер = 0 ;
пока ( номер < 10 )
{
Печатать( "номер = " , номер, "!" );
номер ++;
}
}
@Peter Konow , kodda neden bu kadar çok İngilizce kelime var?
Saf Rusça'ya geçin:
#define пустой void
#define пока while
#define Печатать Print
#define Начнем OnStart
пустой Начнем()
{
целочисленное номер = 0 ;
пока ( номер < 10 )
{
Печатать( "номер = " , номер, "!" );
номер ++;
}
}
Yani daha da iyi
#define пустой void
#define пока while
#define Печатать Print
#define Начнем OnStart
пустой Начнем()
{
целочисленное номер = 0 ;
пока ( номер < 10 )
{
Печатать( "номер = " , номер, "!" );
номер ++;
}
}
Yani daha da iyi
eklendi: 'zararı' 'kar' olarak değiştirin
vb...
#define цлк short // целое короткое
#define цлд long // целое длинное
#define плк float // плавающее короткое
#define пл double // плавающее
#define пст void // пустота
#define исток main
#define вывод Print
#define пока while
пст исток()
{
цл нмр = 0 ; // сокращение от номер.
пока ( нмр < 10 )
{
вывод( "номер = " , нмр, "!" );
нмр ++;
}
}@Peter Konow , kodda neden bu kadar çok İngilizce kelime var?
Saf Rusça'ya geçin:
#define пока while
#define Печатать Print
void OnStart ()
{
целочисленное номер = 0 ;
пока ( номер < 10 )
{
Печатать( "номер = " , номер, "!" );
номер ++;
}
}
İlginç bir öneri, düşündüm. Ancak, iki dili birleştirmenin avantajları vardır.
Program sadece bir dilde yazılmışsa (ana dil olsa bile), metnin monotonluğundan dolayı bakış yavaş yavaş "bulanıklaşır".
İşlev ve değişkenlerin Rusça adlarının ve olayların, özelliklerin, sabitlerin ve operatörlerin İngilizce tanımlayıcılarının değişimi, daha iyi okuma için gerekli karşıtlığı yaratır.
Bu nedenle, tamamen Rusça'ya geçmiyorum. Bununla birlikte, Rusça hala hakimdir ve bu, büyük kodlarda gezinmek için çok yardımcı olur.
bu yüzden stillerle çalışmanın ilk versiyonunun inisiyatifiyle.
şema uygulaması şöyle görünür
**************
enAttrName - işlenen öğenin niteliklerinin bir listesi (genişletilebilir)
enum enAttrName // возможные аттрибутов контрола
{
// шрифт
anFontName, // имя
anFontColor, // цвет
anFontSize, // размер
anFontWeight, // толщина
anFontStyle, // стиль
// фон
anBackgroundColor, // цвет
anBackgroundFill, // заливка
// граница
anBorderColor, // цвет
anBorderWidth, // толщина
// выравнивание
anAlign,
anVAlign
по мере необходимости добавлять нужные аттрибуты
};
nitelik GAttr sınıfında saklanır
{
enAttrName m_attr; // имя аттрибута
// его значение
long lval;
double dval;
string sval;
};
MqlParam'a biraz benzer, ancak onun aksine türden bağımsızdır.
------
nitelikler ayrıca GAttrReflect listesinde gruplandırılmıştır. Bu liste, belirli sınıfın belirli durumuna atıfta bulunacaktır.
{
GAttr* m_list[]; // список аттрибутов класса для одного некоторого состояния
};
Bu sınıfın çalışmasının önemli bir özelliği, belirli bir niteliğin m_list listesinde iki kez tekrarlanamamasıdır. Güncelleme sırasında özniteliğin değerinin üzerine yazılacak veya öznitelik yoksa oluşturulacaktır.
-------
Her denetimin bu tür birkaç listesi vardır. Her biri, kontrol durumunun yansımasını ifade eder. Bu yansımalar (yansımalar) listesi genişletilebilir .
{
arDefault, // состояние по-умолчанию
arDisable, // недоступен для ввода/неактивный
arTransp, // должен стать прозрачным
arSelect, // выбран
arCheck, // отмечен
arOver, // мышка над объектом
arFocus, // получен фокус ввода
по мере необходимости добавлять новые рефлекты
};
Buna göre, her kontrol (sınıf), yansımalarının her biri için tanımlanmış niteliklere sahip olabilir.
Class - GAttrClass - belirli bir sınıfın yansımalarının bir listesini saklar.
{
string m_class; // для какого класса составлен список
GAttrReflect reflect[arLast]; // список рефлектов класса
};
-------
Ve son olarak, var olan ve sizin oluşturduğunuz tüm sınıfları yöneten son sınıf GThema .
{
GAttrClass* m_list[]; // список классов
};
Bu sınıfta, nitelikler listesinde olduğu gibi benzer bir ilke uygulanır - listede aynı ada sahip iki sınıf bulunamaz.
Operatör[] aşırı yüklemesi sayesinde, parametre adlarını rahatlıkla belirtebiliriz.
g_thema[ "GButton" ][arOver][anFontColor]=XRGB( 255 , 255 , 255 );
// или можно так
GAttrClass* at = g_thema[ "GButton" ];
GAttrReflect* vl = at[arDefault];
vl[anFontColor] = XRGB( 255 , 255 , 255 );
---------
Ve son olarak, sınıf konusundan ilgilenilen parametreyi nasıl alırız?
1. listede gerekli m_class sınıfını arayın
2. Bulunursa, onda bir yansıma ararız,
3. Bulunursa, bir nitelik arıyoruz
4. Öznitelik bulunamazsa, varsayılan yansıtmayı ve içindeki özniteliği arıyoruz.
5. Öznitelik varsayılan yansımada bulunmazsa, tüm öğeler için ortak olan varsayılan sınıf adı (m_class=NULL) için 1-4 arasındaki adımları tekrarlayın.
---------
yaklaşma avantajı:
- her zaman, prensipte vazgeçilebilecek ve yenilerini oluşturamayacak varsayılan bir sınıf vardır.
- yansıma oluşturamazsınız, ancak yalnızca varsayılan arDefault'u kullanabilirsiniz
- her kontrolde özellikleri ayarlamaya gerek yok. GThema'ya bir sınıf eklemek ve ondan veri almak yeterlidir.
- yansıtmada sınıf için ayarlanmayan tüm nitelikler - varsayılan yansıtmadan veya varsayılan sınıftan hiyerarşik olarak elde edilir.