从专业人员到超级专业人员的任何问题 - 1。 - 页 22

 
int start()
  {
//----
   int massa=100,shag=10,kol=4;
   perebor(massa,shag,kol);
//----
   return(0);
  }
//+------------------------------------------------------------------+
void perebor(int massa, int shag, int kol)
   {
   int massiv[];
   ArrayResize(massiv,kol);
   int x=kol;
   int handle = FileOpen("test.csv",FILE_WRITE,' ');
   
   recurs(massa,shag,massiv,x,kol,handle);
   FileClose(handle);
   }
void recurs  (int massa, int shag, int & massiv[], int x, int kol, int handle)
   { 
   int i,y;
   for(i=0;i<=massa;i+=shag)
      {
      if(x-1>0)
         {
         massiv[kol-x]=i;         
         recurs(massa-i,shag,massiv,x-1,kol,handle);                  
         }
      else
         {
         massiv[kol-x]=massa-i;
         for(y=0;y<kol;y++)
            {            
            FileWrite(handle,y," - ",massiv[y]);
            }
         return;   
         }   
      }
   } 
 
非常感谢您提供的代码。不过我很难理解它是如何工作的:)
 
你正确地写道,该问题应以递归方式解决。有一定数量的元素。只要该元素不是最后一个,该函数就会以先前迭代中所有增量的值减少的质量值进入自身。在最后一个元素上,只需计算最后的剩余量并打印。
 

我在功能上缺少什么,以至于按钮不可见?

它是DLL中的一个函数。

#define IDB_BUTTON   6500

//------------------------------------------------------------------
int __stdcall CreateBtn(int hWnd)
{
  HWND wnd=(HWND)hWnd; // хендл окна чарта
  HWND pwnd=GetParent(wnd); // получили родителя для создания кнопки
  ShowWindow(wnd, SW_HIDE); // скрыли чарт
  // создали кнопку
  HWND btn=CreateWindow("Button", "DLL BUTTON", WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, 
                15, 15, 100, 100, pwnd, (HMENU)IDB_BUTTON, (HINSTANCE)GetModuleHandle(NULL), NULL);
  ShowWindow(btn, SW_SHOW); // показали кнопку
  UpdateWindow(btn);

  // нарисовали на ней текст (для проверки что окно кнопки существует)
  HDC hdc = GetDC(btn);
  TextOut(hdc, 0, 0, (LPSTR)"String", 6);
  ReleaseDC(btn, hdc);
  RECT Rect; 
  GetWindowRect(btn,  &Rect); // получили размер
  return(Rect.right-Rect.left);  // вернули для проверки размера
}

当从脚本中调用函数 时,一切都很顺利。

顶部的图表显示了文本"String",函数本身返回正确的按钮宽度数字100

但这个按钮是不可见的。

-------------

ZS
找到了问题所在--忘记做UpdateWindow
谢谢大家 :)


 
如何在MT5中禁用图表上的新闻????
 
parkhomenko:
如何禁用MT5中显示在图表上的新闻????

这里 最了解
 

你对如何从MT4调用 "记事本 "有什么想法吗?

我厌倦了将数据存储在.txt中,然后用手打开它(用鼠标)。 我想在完成计算后打开记事本文件 ...МТ4\experts\files\data.txt。

谢谢

 
#import "shell32.dll"
   int ShellExecuteA(int hwnd, string oper, string prog, string param, string dir, int show);
#import

ShellExecuteA(0, "Open", "notepad.exe", "data.txt", TerminalPath()+"\\experts\\files", 3);
[Deleted]  

如何按条件将加号改为减号?

从小说界看来,如果加号或减号有一个int整数类型的值,你可以设置int pl = +;))

也许有一个选项.......

if(......) + ; else -;
 
Martingeil:

如何通过条件将加号改为减号?



选择S=1或S=-1,然后将所需值乘以S

比如说像这样。

double S(bool b) 
{
  if (b) return(1); else return(-1); 
}

a=123;
Print(a*S(a<0))
Print(a*S(a==123))