Tuval harika! - sayfa 22

 
Nikolai Semko :

Dikkat et Peter, 6 renkten oluşan bir çoklu gradyanı nasıl uyguladığıma.

p 0'dan 1'e değiştiğinde

 uint Grad( double p)
  {
   static uint Col[ 6 ]={ 0xFFFF0000 , 0xFFFF00FF , 0xFF0000FF , 0xFF00FFFF , 0xFF00FF00 , 0xFFFFFF00 };
   p=p* 5 ;
   int n=( int )p;
   if (n== 5 ) return Col[ 5 ];
   double k= 1 -p+( int )p;
   argb c1,c2;
   c1.clr=Col[n];
   c2.clr=Col[n+ 1 ];
   return ARGB( 255 ,c2.c[ 0 ]+ uchar (k*(( int )c1.c[ 0 ]-( int )c2.c[ 0 ])+ 0.5 ),
               c2.c[ 1 ]+ uchar (k*(( int )c1.c[ 1 ]-( int )c2.c[ 1 ])+ 0.5 ),
               c2.c[ 2 ]+ uchar (k*(( int )c1.c[ 2 ]-( int )c2.c[ 2 ])+ 0.5 ));
  }

Tehdit, aşırı renkte bir kusur olmasına rağmen, henüz düzeltmek için ellere ulaşmadı.

Çok orjinal. ) p rastgele bir kullanıcı numarası mı yoksa bir parametreyle mi ilişkili?

Bu ne için?

p=p* 5 ;

Gerekli numarayı bir kerede göndermek mümkündür. Bu satırdan sonra p artık orijinal değerine dönmez.

Burada:

 double k= 1 -p+( int )p;

yazılabilir:

 double k= 1 -p+n;

ve neden onun yerine kullanmıyorsun

 int n=( int )p;
 int n=MathRound(p);

?

ARGB işlevi normal bir CCanvas işlevi mi yoksa sizinki mi?

 
Nikolai Semko :

Tehdit, aşırı renkte bir kusur olmasına rağmen, henüz düzeltmek için ellere ulaşmadı.

Sabit:

 uint Grad( double p)
  {
   static uint Col[ 6 ]={ 0xFF0000FF , 0xFFFF00FF , 0xFFFF0000 , 0xFFFFFF00 , 0xFF00FF00 , 0xFF00FFFF };
   if (p> 0.9999 ) return Col[ 5 ];
   if (p< 0.0001 ) return Col[ 0 ];
   p=p* 5 ;
   int n=( int )p;
   double k=p-n;
   argb c1,c2;
   c1.clr=Col[n];
   c2.clr=Col[n+ 1 ];
   return ARGB( 255 ,c1.c[ 2 ]+ uchar (k*(c2.c[ 2 ]-c1.c[ 2 ])+ 0.5 ),
                   c1.c[ 1 ]+ uchar (k*(c2.c[ 1 ]-c1.c[ 1 ])+ 0.5 ),
                   c1.c[ 0 ]+ uchar (k*(c2.c[ 0 ]-c1.c[ 0 ])+ 0.5 ));
  }

Yukarıda yazdığım kod.

 
Реter Konow :

ARGB işlevi normal bir CCanvas işlevi mi yoksa sizinki mi?

ARGB, CCanvas'tan bir tanımdır. Öğrenmek için isme tıklayın ve Alt+G tuşlarına basın

Peter Konow'un fotoğrafı.

Bu ne için?

5 renk sayısıdır -1

 
Реter Konow :

ve neden onun yerine kullanmıyorsun

Çifte ihtiyacım olmadığında bu seçeneği tercih ediyorum çünkü çok daha hızlı çalışır.
 
Nikolai Semko :

ARGB, CCanvas'tan bir tanımdır. Öğrenmek için isme tıklayın ve Alt+G tuşlarına basın

5 renk sayısıdır -1

TAMAM. Eleştirmiyorum sadece soruyorum. Renklerle çalışmakta harikasın.

 
Реter Konow :

Renklerle çalışmakta harikasın.

Bu sadece bir hobi :)
 
Artyom Trishkin :

Kabul ediyorum. Ancak başka türlü ihtiyaç duyan bir kullanıcı kategorisi var.

Ve tuval göstergesinin döndürülen verileri 512'den fazlaysa? Tamponlar burada yardımcı olmaz. Ve kullanıcılar sadece programlarındaki göstergelerden veri almak isterler. Ve onları bir danışmanın gövdesine inşa etmek istemiyorlar (baykuşa pişman olacağım - çıngıraklar olmadan uçmasına izin verin ...). Ve sadece görünür olanlardan değil, istenen herhangi bir çubuktan veri almak istiyorlar. Ve haklı. Ve sadece tembellik ve her şeyi kolay ve basit bir şekilde alma arzusuyla değil, aynı zamanda aracın gereksinimleriyle de haklı.

Nikolay Semko :

Programcı olmayan kullanıcıların büyük çoğunluğundan bahsediyorsak, kullanıcıların ya bir baykuşa ya da bir göstergeye ihtiyacı vardır. Bir baykuş için göstergeye ihtiyaçları yoktur.

Ben sadece fikir vermesi için bilgi verdim, empoze etmeden. Neyin comme il faut olduğuna ve neyin comme il faut olmadığına programcıların kendileri karar vermelerine izin verin. Ancak kişisel olarak, bazı noktaların farkına vardıktan sonra, Uzman Danışmanlarımda iCustom işlevini pek kullanmayacağım.

Belki de pek haklı değilim.

Piyasadan böyle bir tuval tamponsuz gösterge satın alan veya indiren kullanıcının, verilerini Uzman Danışmanında kullanmak isteyeceğini varsaymak oldukça mantıklıdır.

O zaman kaynak üzerinden okunan bu göstergenin üreticisi tarafından özel olarak oluşturulmuş bir yapı üzerinden bir değişim kurmak bana en mantıklı görünüyor.

Bu nedenle programcı, tuval tamponsuz göstergesinde bu yapının kaynakta sürekli olarak güncel tutulduğuna dikkat etmeli ve kullanıcıya, kullanıcı olayları kullanılarak veya her birinin gelişiyle bu yapının okunacağı bir içerme dosyası sağlamalıdır. işaretleyin (zamanlayıcıyı kullanın, bunun makul olacağını düşünmüyorum).

Ve sonra kullanıcının Uzman Danışmanına yalnızca bir kod satırı #include... eklemesi gerekir ve bu yapı göstergeden gelen gerçek verilerle her zaman elinizin altında olur.

Bunu klasik iCustom kullanımından bile daha uygun görüyorum. yapı, uygun şekilde adlandırılmış değişkenler ve çeşitli türlerde veri dizileri içerebilir (ve yalnızca klasik bir göstergenin arabelleklerinde olduğu gibi çift tipte değil) ve kullanıcının arabellek numarasının ne anlama geldiğiyle uğraşmasına gerek yoktur ve bu, aşağıdakiler için yeterlidir: gösterge verilerine tam rahat erişime sahip olmak için programına yalnızca bir kod satırı eklemesi.

ZY Özellikle, MQ'daki kaynakların, gösterge arabelleklerinin yanı sıra pratik olarak aynı şekilde uygulandığından neredeyse eminim.

 
Nikolai Semko :

Belki de pek haklı değilim.

Piyasadan böyle bir tuval göstergesi satın alan veya indiren kullanıcının, Uzman Danışmanındaki verilerini kullanmak isteyeceğini varsaymak oldukça mantıklıdır.

O zaman kaynak üzerinden okunan bu göstergenin üreticisi tarafından özel olarak oluşturulmuş bir yapı üzerinden bir değişim kurmak bana en mantıklı görünüyor.

Bu nedenle programcı, tuval tamponsuz göstergesinde bu yapının kaynakta sürekli olarak güncel tutulduğuna ve kullanıcıya, kullanıcı olayları kullanılarak bu yapının okunacağı bir içerme dosyası sağladığına dikkat etmelidir.

Ve sonra kullanıcının Uzman Danışmanına yalnızca bir kod satırı #include... eklemesi gerekir ve bu yapı göstergeden gelen gerçek verilerle her zaman elinizin altında olur.

Bunu klasik iCustom kullanımından bile daha uygun görüyorum. yapı, uygun şekilde adlandırılmış değişkenler ve veri dizileri içerebilir ve kullanıcının arabellek numarasının ne anlama geldiği ile uğraşmasına gerek yoktur ve göstergeye tam rahat erişim için programına yalnızca bir kod satırı eklemesi yeterlidir. veri.

ZY Özellikle, MQ'daki kaynakların, gösterge arabelleklerinin yanı sıra pratik olarak aynı şekilde uygulandığından neredeyse eminim.

Bir kaynak aracılığıyla veri aktarma mekanizması son derece basittir. Daha çok iki program arasındaki "iletişim" yöntemiyle ilgili. Bir program yazar, diğeri okur. Bu nedenle, verisini (göstergeyi) kaynağa yazan programın belirtilen mesaj formatına uyması ve okuyan programın bu formatı "bilmesi" gerekir. O zaman programlar arası iletişim evrensel ve etkili olacaktır.

 
Реter Konow :

Bir kaynak aracılığıyla veri aktarma mekanizması son derece basittir. Daha çok iki program arasındaki "iletişim" yöntemiyle ilgili. Bir program yazar, diğeri okur. Bu nedenle, verisini (göstergeyi) kaynağa yazan program mesaj formatına bağlı kalmalı ve okuyan program bu formatı "bilmelidir". O zaman bu iletişim evrensel ve uygulanabilir olacaktır.

Eh, elbette olacak. Sonuçta, alıcı ve verici parçalar, bu göstergeyi kendisi geliştiren yalnızca bir geliştirici tarafından yapılır.

Bir kaynak aracılığıyla değişim mekanizması o kadar basit değildir. Bu belirli beceriler gerektirir. Bunda da bu yöntemin avantajını görüyorum çünkü. bu, daha gelişmiş programcıların ayrıcalığı olacaktır.

Tehdit Peter, bir ay önce bunun son derece basit ve gerekli olduğunu düşünmüyordun. Mesajımı duyduğuna ve dikkate aldığına sevindim. :))

 
Nikolai Semko :

Eh, elbette olacak. Sonuçta, alıcı ve verici parçalar, bu göstergeyi kendisi geliştiren yalnızca bir geliştirici tarafından yapılır.

Bir kaynak aracılığıyla değişim mekanizması o kadar basit değildir. Bu belirli beceriler gerektirir. Bunda da bu yöntemin avantajını görüyorum çünkü. bu, daha gelişmiş programcıların ayrıcalığı olacaktır.

Tehdit Peter, bir ay önce bunun son derece basit ve gerekli olduğunu düşünmüyordun. Mesajımı duyduğuna ve dikkate aldığına sevindim. :))

Evet Nikolai, kaynakların programlar arasında veri alışverişi için çok verimli bir yöntem olduğu kanıtlandı ve kullanımları bana bahsettiğin birliklere (ve Vasily'ye de) dayanıyor. Bu yüzden ikinize de teşekkür ederim.

Verileri bir kaynağa aktarma ve ondan okuma mekanizması oldukça basittir, ancak evrensellik için çabalıyorsa mesaj formatı karmaşık bir konudur. Sorunu belirli bir gösterge için çözerseniz, her şey basittir.

Neden: