Benim yaklaşımım. Çekirdek - Motor. - sayfa 60

 
Igor Makanu :

...

ancak olay modelinin Windows'ta nasıl çalıştığını biliyorsanız ve form tasarımcıları (yapıcılar) ile derleyicilerle çalışma deneyiminiz varsa, o zaman her şey her yerde aynıdır.

Not: Sharp'ı hayatımda üç kez görüyorum, ancak Delphi altında çok fazla deneyimim oldu, hiçbir fark görmüyorum, her şey bire bir çalışıyor, ne işe yaramıyor, ilk defa googles

Windows olay modelinin nasıl çalıştığını hatırlamıyorum. Derleyiciler ve tasarımcılarla uzun süre deneyim sahibi oldu.

Oluşturulan formu Application on MT ile bağlayıp sorunu çözmem gerekiyor. Kolay olduğunu söyledin.

 
Georgiy Merts :

Göstermiyor, aynı zamanda ilkelerini oldukça net bir şekilde açıklıyor. Onlara itiraz ediyorlar ve “yol yanlış” diyorlar.

Üstelik sadece yazar için değil, itiraz edenler için “yanlış”. Tavuk beyinli olan ve kimlerin nerede ve hangi nesneleri yarattıklarını, nerede ve kime atıfta bulunduğunu, dizideki her bir hücrenin ne anlama geldiğini, nereden değiştirilebileceğini, nereden değiştirilemeyeceklerini hatırlayamayanlar... öfkeli. Programdaki birkaç bin nesneyi ve bağlantıyı kolayca hatırlamak için hafızalarını eğitmek yerine - aptallar, kendilerine erişim haklarını kesiyorlar, bir tür ayrımlar, bazı arayüzler, bir tür polimorfik işlevler tanımlıyorlar ... çarlık rejiminde olduğu gibi kendinize eziyet edin, ha ...

Erişteleri hafızanın dikliği hakkında sallayın. Bazen bu forum diyalogunun başlığının iki sayfa derinliğe kadar izlenmediği gözlemleniyor. Ayrıca, hafızanın bize söylemeye çalıştıkları kadar harika çalışması için çok fazla inkar var.

 
Dmitry Fedoseev :

Sorunu çözmeye yardımcı olun.

  1. Düğmelere ve onay kutularına basma olayını MT5'e göndermek gerekir.
  2. Formdaki bir onay kutusunun veya düğmenin durumunu programlı olarak değiştirmeniz gerekir.
Nasıl yapılır?
 

Bir Windows formu var. Başlıyor ve çalışıyor. Düğmelere ve onay kutularına basılır.

Şimdi MT5 ile bağlanmak için bir DLL'ye ihtiyacınız var. Kim bilir nasıl yapılır?

 
Реter Konow :

Sorunu çözmeye yardımcı olun.

  1. Düğmelerin ve onay kutularının tıklanması olayını MT5'e göndermek gerekir.
  2. Formdaki bir onay kutusunun veya düğmenin durumunu programlı olarak değiştirmeniz gerekir.
Nasıl yapılır?

2. Dün Igor bir örnek oluşturdu. Örnek, içe aktarılan bir dll'de bulunan bir sınıfın yönteminin bir uzmandan nasıl çağrılabileceğini gösterir. Yani, onay kutusunun durumunu değiştiren c# içinde bir fonksiyon (yöntem) yazmak gerekir. Onay kutusu özelliği nasıl değiştirilir, yöntemin adını hatırlamıyorum, açılır listede gezinmek kolay, onay kutusunun adını girmeniz gerekiyor, noktaya basın ...

1. bilmiyorum. Muhtemelen değil. Zamanlayıcıdan dll fonksiyonlarını çağırmak ve onay kutularının durumunu izlemek gereklidir. Ancak bir düğmeye basmak gibi olaylara gelince, muhtemelen bir dizi yapın, olayları içine koyun. Ancak, kontrollerle görsel olarak çalışmanın avantajı göz önüne alındığında, bu zor değil.

 
Реter Konow :

C# yüklendi. Projeyi açtı. Bir form oluşturdum ve ona iki buton ve üç onay kutusu ekledim.

İşte editördeki kod:

Soru: Neden bir düğmenin işlevi var ve ikinci düğmenin ve onay kutularının işlevleri nerede?

Bu kodu buldum:

Ve MT5 ile ara bağlantı için nasıl kullanılır?

İkinci düğmenin gerekli olduğunu göstermek gerekir - üzerine çift tıklayın, ardından kod açılacak ve işlev eklenecektir. Orada, ileride başka bir şaşırtıcı keşif bekliyor - düğme daha sonra formdan kaldırılırsa , proje bir hatayla derlenir, kodu bir dosyadan kendiniz silmeniz gerekir, ancak kendi yazdığınızdan değil.

 
Dmitry Fedoseev :

2. Dün Igor bir örnek oluşturdu. Örnek, içe aktarılan bir dll'de bulunan bir sınıfın yönteminin bir uzmandan nasıl çağrılabileceğini gösterir. Yani onay kutusunun durumunu değiştiren c# içinde bir fonksiyon (yöntem) yazmak gerekir. Onay kutusu özelliği nasıl değiştirilir, yöntemin adını hatırlamıyorum, açılır listede gezinmek kolay, onay kutusunun adını girmeniz gerekiyor, noktaya basın ...

1. bilmiyorum. Muhtemelen değil. Zamanlayıcıdan dll fonksiyonlarını çağırmak ve onay kutularının durumunu izlemek gereklidir. Ancak bir düğmeye basmak gibi olaylara gelince, muhtemelen bir dizi yapın, olayları içine koyun. Ancak, kontrollerle görsel olarak çalışmanın avantajı göz önüne alındığında, bu zor değil.

TAMAM.

Yani ihtiyacın var:

  1. DLL oluşturun.
  2. DLL'yi form ile Windows uygulamasına bağlayın.
  3. Dll'deki düğmelere ve onay kutularına tıklama olaylarını yayınlayan yöntemler yazın.
  4. Bir Windows uygulamasında düğmelerin ve onay kutularının durumlarını değiştiren yöntemler yazın.
  5. DLL'de paylaşılan bellek oluşturun. Böylece MT5'ten erişirken, düğmelerin ve onay kutularının durumunu değiştirme bayrağı ayarlanır. Ardından, Windows uygulaması paylaşılan belleğe erişti, bayrakları okudu ve onlardan bir veya başka bir form öğesinin durumunu değiştirmenin gerekli olduğunu öğrendi.
  6. İşlev çağrısı bayraklarını okumak veya alanlara metin girmek için MT5'teki zamanlayıcıdan DLL'ye döngüsel bir çağrı yazın.

    Ya yüzlerce element varsa?

    Paylaşılan hafıza nasıl düzgün bir şekilde organize edilir?

    Ya formdaki öğelerin yalnızca basılı/basılmış durumunu değil, rengini de (örneğin düğmeler için) değiştirmeniz gerekirse?

    Formdaki giriş alanlarındaki metni MT5'ten programlı olarak değiştirmeniz gerekirse ne olur?


     
    Dmitry Fedoseev :

    Ancak bir düğmeye basmak gibi olaylara gelince, muhtemelen bir dizi yapın, olayları içine koyun. Ancak, kontrollerle görsel olarak çalışmanın avantajı göz önüne alındığında, bu zor değil.

    Genelde daha kolay yaparım:

    1. kullanıcı formdaki düğmeye bastı - hemen OnClick () işleyicisine girdi, Button1.Disable'ı yaptılar;

    2. o zaman MT5'e kalmış, borsa orada nasıl organize edilecek, OnTick'te () buton tıklamalarını yoklamayı seviyorum - her neyse, bir onay olana kadar hiçbir şey yapmayacağız, orada nötr bir değer ayarlayabilirsiniz. zamanlayıcıda yaklaşık 300 ms, hiçbir kullanıcı frizleri fark etmeyecek ve MT5 gecikmeyecek


    ama örneğimin özü şu ki, şimdi MT5'te paneli 2 tıklamayla görselleştirebiliyorsunuz, düğme işleyicileri .dll'de çalışıyor ve genel olarak, arayüz komut dosyasının bir kısmı bir forma, aynı tablolara, veri işlemeye aktarılabilir. .. evet, hepsi bu

    en değerli şey görselleştirme geliştirme zamanından tasarruf , form tasarımcısının yardımıyla her şey birkaç saat içinde yapılır;)


    Peter Konow'un fotoğrafı.

    DLL'de paylaşılan bellek oluşturun. Böylece MT5'ten erişirken, düğmelerin ve onay kutularının durumunu değiştirme bayrağı ayarlanır. Ardından, Windows uygulaması paylaşılan belleğe erişti, bayrakları okudu ve onlardan bir veya başka bir form öğesinin durumunu değiştirmenin gerekli olduğunu öğrendi.

    İşlev çağrısı bayraklarını okumak veya alanlara metin girmek için MT5'teki zamanlayıcıdan DLL'ye döngüsel bir çağrı yazın.

      Ya yüzlerce element varsa?

      Paylaşılan hafıza nasıl düzgün bir şekilde organize edilir?

      Yine yanlış yerde bir yerde acı çektin, peki, tüylü 2000'lerden çık! .... bir nedenden dolayı 2000'lerin sizin için sınır olmadığını düşünüyorum))))

      kusura bakma umarım?

       
      Igor Makanu :

      Genelde daha kolay yaparım:

      1. kullanıcı formdaki düğmeye bastı - hemen OnClick () işleyicisine girdi, Button1.Disable'ı yaptılar;

      2. o zaman MT5'e kalmış, borsa orada nasıl organize edilecek, OnTick'te () buton tıklamalarını yoklamayı seviyorum - her neyse, bir onay olana kadar hiçbir şey yapmayacağız, orada nötr bir değer ayarlayabilirsiniz. zamanlayıcıda yaklaşık 300 ms, hiçbir kullanıcı frizleri fark etmeyecek ve MT5 gecikmeyecek


      ama örneğimin özü şu ki, şimdi MT5'te paneli 2 tıklamayla görselleştirebiliyorsunuz, düğme işleyicileri .dll'de çalışıyor ve genel olarak, arayüz komut dosyasının bir kısmı bir forma, aynı tablolara, veri işlemeye aktarılabilir. .. evet, hepsi bu

      en değerli şey görselleştirme geliştirme zamanından tasarruf, form tasarımcısının yardımıyla her şey birkaç saat içinde yapılır;)


      Yine yanlış yerde bir yerde acı çektin, peki, tüylü 2000'lerden çık! .... bir nedenden dolayı 2000'lerin sizin için sınır olmadığını düşünüyorum))))

      kusura bakma umarım?

      Alınma ama durumun böyle olmaması üzücü.

      EN BASİT örneği alıyor ve karmaşıklığın artmayacağına inanarak onu tahmin ediyorsunuz. Bu hata.

      Verdiğin en basit örnek bile yanlış. Çünkü oluşturulan forma ek olarak bir DLL de oluşturmanız gerekiyor. Ve sonra DLL içinde bir ORTAK bellek oluşturun.

      Form öğelerinin sayısındaki artış ve programın MT5'teki işlevselliğinin karmaşıklığı ile bu etkileşim GERÇEKTEN yüklenmiş ve karmaşık hale gelir.

      Bunu pratikte test ettim.

       
      Реter Konow :

      TAMAM.

      Yani ihtiyacın var:

      1. DLL oluşturun.
      2. DLL'yi form ile Windows uygulamasına bağlayın.
      3. Dll'deki düğmelere ve onay kutularına tıklama olaylarını yayınlayan yöntemler yazın.
      4. Bir Windows uygulamasında düğmelerin ve onay kutularının durumlarını değiştiren yöntemler yazın.
      5. DLL'de paylaşılan bellek oluşturun. Böylece MT5'ten erişirken, düğmelerin ve onay kutularının durumunu değiştirme bayrağı ayarlanır. Ardından, Windows uygulaması paylaşılan belleğe erişti, bayrakları okudu ve onlardan bir veya başka bir form öğesinin durumunu değiştirmenin gerekli olduğunu öğrendi.
      6. İşlev çağrısı bayraklarını okumak veya alanlara metin girmek için MT5'teki zamanlayıcıdan DLL'ye döngüsel bir çağrı yazın.

        Ya yüzlerce element varsa?

        Paylaşılan hafıza nasıl düzgün bir şekilde organize edilir?

        Ya formdaki öğelerin yalnızca basılı/basılmış durumunu değil, rengini de (örneğin düğmeler için) değiştirmeniz gerekirse?

        Formdaki giriş alanlarındaki metni MT5'ten programlı olarak değiştirmeniz gerekirse ne olur?


        Etkinliklerle çalışmayı uygun şekilde düzenlerseniz, kontrol sayısı sorun olmaz. Bunun gibi bir şey yapabilirsiniz: dll'de bir veya iki dizi, biri nesne adı için, ikincisi olay türü için. Dll'de aynı isim ve olay tipinde iki parametreli bir fonksiyon yazın. İstenen her olay işleyicisinden, olayların dizilere yerleştirilmesi için bu işlevi çağırın. Başka bir yöntem, uygun olduğu veya ortaya çıktığı gibi - başvuruya göre aynı diziler veya başka bir değişkenin yanı sıra - dizideki olay sayısıyla EA'nın zamanlayıcısından bir olayı izlemektir. Bu yöntemi çağırdıktan sonra dizileri temizleyin.

        Ya da belki tek dizi ile daha kolay, c#'da event nesnesi var, onlardan dizi yapabilir. Her bir olay işleyicisinden kendi başınıza işlevi çağırmamak ve bir şekilde icat etmek de mümkün olabilir. Ama önemli değil, her halükarda, bir arayüz oluşturma olanakları ve mevcut olan tüm c# gücüyle karşılaştırıldığında önemsiz bir şey.

        Neden: