OBJ_TEXT nesnesinde metni birden çok satırda görüntülemek mümkün mü? - sayfa 7

 
Реter Konow :
Kesinlikle.

Ben de kendimi şaşırttığım şeyle sizi şaşırtmak istiyorum.))) Birkaç ayrı satırı tek bir kaynağa aktarmak mümkün mü, böylece kaynağı okurken, ondan sadece seçilen satırı okuyabilirsiniz.

Bir resim için TextOut () kullanılarak birkaç satır oluşturulabilir, ancak böyle bir kaynağı okuma girişimleri başarısız oldu. Sadece ilk satır okunur.

 
Alexey Viktorov :

Ben de kendimi şaşırttığım şeyle sizi şaşırtmak istiyorum.))) Birkaç ayrı satırı tek bir kaynağa aktarmak mümkün mü, böylece kaynağı okurken, ondan sadece seçilen satırı okuyabilirsiniz.

Bir resim için TextOut () kullanılarak birkaç satır oluşturulabilir, ancak böyle bir kaynağı okuma girişimleri başarısız oldu. Sadece ilk satır okunur.

Bir görüntüden metin kaydetmeye veya okumaya çalışmanın bir anlamı yoktur. Dizeleri yukarıda açıkladığım gibi yazmak için kaynağı kullanın ve ardından onu CharArrayToString ile geri alın. Ardından, dizeyi sınırlayıcıya bölün ve aralarında ihtiyacınız olanı bulun. (Bu nedenle, dizgiyi kaydetmeden önce, onu bir karakterle alt dizgilere ayırın).
 
Реter Konow :
Bir görüntüden metin kaydetmeye veya okumaya çalışmanın bir anlamı yoktur. Dizeleri yukarıda açıkladığım gibi yazmak için kaynağı kullanın ve ardından onu CharArrayToString ile geri alın. Ardından, dizeyi sınırlayıcıya bölün ve aralarından ihtiyacınız olanı bulun. (Bu nedenle, dizgiyi kaydetmeden önce, onu bir karakterle alt dizgilere ayırın).

Evet, resimden okumak gibi bir arzum yoktu. Resim hakkında sadece birkaç satırda yazma örneği olarak söyledim.

Bir alt dize çekin, çok kolay. Kolay yollar aramıyoruz. :))) Yardımlarınız için teşekkürler.

 
Alexey Viktorov :

Evet, resimden okumak gibi bir arzum yoktu. Resim hakkında sadece birkaç satırda yazma örneği olarak söyledim.

Bir alt dize çekin, bu çok kolay. Kolay yollar aramıyoruz. :))) Yardımlarınız için teşekkürler.

Verileri bir kaynakta nasıl depolayacağınızı ve geri alacağınızı zaten biliyorsanız, bir alt diziyi çıkarmak çok zor değildir. Bu başlı başına basit bir görevdir. Önce dizeyi bir kaynakta saklamayı ve ardından oradan almayı deneyin. Ardından, dizeyi alt dizelere bölmek için bir işlev ekleyin ve ihtiyacınız olanı arayın.
 
Реter Konow :
Verileri bir kaynakta nasıl depolayacağınızı ve geri alacağınızı zaten biliyorsanız, bir alt diziyi çıkarmak çok zor değildir. Bu başlı başına basit bir görevdir. Önce dizeyi bir kaynakta saklamayı ve ardından oradan almayı deneyin. Ardından dizeyi alt dizelere bölmek için bir işlev ekleyin ve ihtiyacınız olanı arayın.

Yardımın için teşekkürler Peter. Tellerle çalışmayı yıllar önce öğrendim. Ve senin yardımınla, kaynağı nasıl kaydedeceğimi ve dün nasıl okuyacağımı buldum. Aklıma çılgın bir sms geldi, denemem lazım gibi... ama bu sms nasıl yapılır yolda kayboldu, düşüncelerimde kayboldu.

Şimdi, kaynakları oluşturmak için iki boyutlu ve tek boyutlu diziler arasındaki farkın ne olduğunu anlamaya çalışıyorum. Bu konuda tecrübeniz, fikriniz var mı?

 
Alexey Viktorov :

Yardımın için teşekkürler Peter. Tellerle çalışmayı yıllar önce öğrendim. Ve sizin yardımınızla, kaynağı nasıl kaydedeceğimi ve dün nasıl okuyacağımı buldum. Aklıma çılgın bir sms geldi, denemem lazım gibi... ama bu sms nasıl yapılır yolda kayboldu, düşüncelerimde kayboldu.

Şimdi, kaynakları oluşturmak için iki boyutlu ve tek boyutlu diziler arasındaki farkın ne olduğunu anlamaya çalışıyorum. Bu konuda tecrübeniz, fikriniz var mı?

Dürüst olmak gerekirse, hiçbir zaman bir kaynakta iki boyutlu bir dizi saklamadım. Sınırlı olmadığı için her zaman tek boyutlu çalışıldı. Verileri depolamak için, elbette gerekli olmasa da, tek boyutlu daha iyidir. Hangi verilere ve hangi formatta bakılıyor. Dizeleri depolamak için yalnızca tek boyutlu bir dizi kullanın, çünkü iki boyutlu, CharArrayToString ve StringToCharArray işlevlerine gönderilemez. Bu nedenle, evrensellik için, verilerinizin herhangi birini tek boyutlu bir dizide depolamak için bir mekanizma geliştirmenizi tavsiye ederim. Ancak, aynı türden dize olmayan veriler için 2B kullanmayı deneyebilirsiniz. Bundan ne çıkacağı ilginç olacak.
 

Daha önceki birkaç sayfayı okudum ve görevin kaynaktan sadece küçük bir satır okumak olduğunu anladım. Bu dize 64 karakterden azsa, birleşimlerle çitlemenin ve verileri bir kaynağa kaydetmenin bir anlamı yoktur. OBJPROP_TEXT nesnesinin açıklama özelliğine istediğiniz dizeyi yazmanız yeterlidir:

ObjectSetString (chartID,label_name, OBJPROP_TEXT ,"Dizeniz");

Ve bu şekilde geri alın:

string Str = ObjectGetString (chartID,label_name, OBJPROP_TEXT );


Ve bu kadar.))

 
Alexey Viktorov :

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

Kitaplıklar: Ticaret İşlemleri

fxsaber , 2018.09.20 16:23

 // Пример хранения/обмена данными через Ресурсы внутри Терминала
#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166

void OnStart ()
{  
   const RESOURCEDATA< int > ResourceINT( "::int" ); // Ресурс для обмена int-ами. const - как доказательство, что ничего не пишется в объект класса
  
   int ArrayINT[] = { 1 , 2 , 3 };
   int Num = 5 ;
  
  ResourceINT = ArrayINT;  // Ресурс хранит массив.
  ResourceINT += Num;      // Добавили в ресурс еще значение .
  ResourceINT += ArrayINT; // Добавили массив.
  
   int ArrayINT2[];  
  ResourceINT.Get(ArrayINT2); // Считали данные из ресурса.
   ArrayPrint (ArrayINT2);       // Вывели: 1 2 3 5 1 2 3

  ResourceINT.Free();                // Удалили данные из ресурса
   Print (ResourceINT.Get(ArrayINT2)); // Убедились, что данных нет: 0

   const RESOURCEDATA< MqlTick > ResourceTicks( "::Ticks" );  // Ресурс для обмена тиками. const - как доказательство, что ничего не пишется в объект класса
   MqlTick Tick;
  
   if ( SymbolInfoTick ( _Symbol , Tick))
     for ( int i = 0 ; i < 3 ; i++)
      ResourceTicks += Tick; // Добавили в ресурс тики

   MqlTick Ticks[];
  ResourceTicks.Get(Ticks); // Считали данные из ресурса.
   ArrayPrint (Ticks);         // Вывели.
  
   // Это полное имя ресурса для обращения из другой программы
   const string NameOut = StringSubstr ( MQLInfoString ( MQL_PROGRAM_PATH ), StringLen ( TerminalInfoString ( TERMINAL_PATH )) + 5 ) + "::Ticks" ;  
   Print (NameOut); // Вывели полное имя ресурса.
  
   const RESOURCEDATA< MqlTick > Resource(NameOut); // Ресурс для доступа к данным (read-only) из другой программы
  
   MqlTick TicksOut[];
  Resource.Get(TicksOut); // Считали данные из ресурса.
   ArrayPrint (TicksOut);   // Вывели.
  
  Resource.Free();   // Не получится повлиять на данные read-only-ресурса.
   Print ( _LastError ); // ERR_INVALID_PARAMETER - Ошибочный параметр при вызове системной функции.
}

 
Реter Konow :

Daha önceki birkaç sayfayı okudum ve görevin kaynaktan sadece küçük bir satır okumak olduğunu anladım. Bu dize 64 karakterden azsa, birleşimlerle çitlemenin ve verileri bir kaynağa kaydetmenin bir anlamı yoktur. OBJPROP_TEXT nesnesinin açıklama özelliğine istediğiniz dizeyi yazmanız yeterlidir:

ObjectSetString (chartID,label_name, OBJPROP_TEXT ,"Dizeniz");

Ve bu şekilde geri alın:

string Str = ObjectGetString (chartID,label_name, OBJPROP_TEXT );


Ve bu kadar.))

Kesinlikle bu şekilde değil. Görev, birkaç bilgi satırı görüntülemekti. Bence... Bunu tuvalle ortaya çıkarmayı çok istedim. Satırlardan biri bir tarih içeriyor. Bu tarih sadece netlik için değil, program tarafından yeniden başlatıldıktan sonra bile kullanılmalıdır. Bir şekilde kurtarılması gerekiyor gibi görünüyor. Burada hile yapmaya başladım, kolay yollar aramıyoruz. Tarihi saklamanın bir yolu grafiksel bir nesne kullanmak olduğundan, neden aynı kaynağı kullanmayasınız. MT'yi yeniden başlattıktan sonra kaynak okunur, ancak bilgisayarı yeniden başlattıktan sonra henüz kontrol etmedim. Ana şey, kaynakları ve sendikaları çözmemdir. Ve sonra kafama çılgın SMS geldi. Her şeyi sildiğim anda faydalı çalışmalara devam edeceğim.

 
Alexey Viktorov :

Kesinlikle bu şekilde değil. Görev, birkaç bilgi satırı görüntülemekti. Bence... Bunu tuvalle ortaya çıkarmayı çok istedim. Satırlardan biri bir tarih içeriyor. Bu tarih sadece netlik için değil, program tarafından yeniden başlatıldıktan sonra bile kullanılmalıdır. Bir şekilde kurtarılması gerekiyor gibi görünüyor. Burada hile yapmaya başladım, kolay yollar aramıyoruz. Tarihi saklamanın bir yolu grafiksel bir nesne kullanmak olduğundan, neden aynı kaynağı kullanmayasınız. MT'yi yeniden başlattıktan sonra kaynak okunur, ancak bilgisayarı yeniden başlattıktan sonra henüz kontrol etmedim. Ana şey, kaynakları ve sendikaları çözmemdir. Ve sonra kafama çılgın SMS geldi. Her şeyi sildiğim anda faydalı çalışmalara devam edeceğim.

İyi. Daha sonra kaynakları ve birlikleri geliştirmeye devam edin. Onlar aracılığıyla, yalnızca herhangi bir veriyi hızlı bir şekilde kaydetmek ve depolamak için değil, aynı zamanda bu verileri farklı programlar arasında gerçek zamanlı olarak ve diski yüklemeden değiş tokuş etmenin evrensel bir yolu açılır.

Neden: