Делаем краудсорсовый проект по Canvas - страница 8

 
o_O:

ок.

с CFrame понятно.

---

Я заметил, что вы пошли по пути, когда gui-блоки представлены каждый своим битмапом.

важный момент для читающих и кто уже начал обдумывать:
работа должна происходить только на одном битмапе, с отрисовкой всех элементов gui на нём. С учётом z-order. 
В этом случае появится больше возможностей для отрисовки. (тени, градиенты и тд.)
И упрощается контроль (мы не будем выходить на уровень МТ объектов)

ИМХО, каждое отдельное окно приложения (диалог) должно иметь свой битмап и объект на чарте (не следует даже рассматривать случай, когда несколько экспертов или индикаторов будут "насиловать" один битмап ресурс).
В таком случае, тень от окна можно будет реализовать альфаканалом битмапы и тем самым убрать вычислительную нагрузку на просчёт этой тени.
Все GUI элементы отдельного окна рисуются на его битмапе с учётом Z order и nesting (не знаю как правильно называется вложенность GUI объектов)

События мыши отслеживать через CHARTEVENT_MOUSE_MOVE, в своих проектах именно так и сделал, тормозов не обнаружил.
Использовать другие события без потери качества ввода мыши не получилось.
 
Под свои поделки на MQL, хочу довести GUI библиотеку до аналога WPF, когда в текстовом файле(XML например) описывается разметка и события.

Мне остаётся лишь реализовать события, которые движок GUI будет вызывать согласно описанию в текстовом файле.
 
Zorro:
ИМХО, каждое отдельное окно приложения (диалог) должно иметь свой битмап и объект на чарте (не следует даже рассматривать случай, когда несколько экспертов или индикаторов будут "насиловать" один битмап ресурс).
В таком случае, тень от окна можно будет реализовать альфаканалом битмапы и тем самым убрать вычислительную нагрузку на просчёт этой тени.
Все GUI элементы отдельного окна рисуются на его битмапе с учётом Z order и nesting (не знаю как правильно называется вложенность GUI объектов)

всё верно.

я бы добавил, что не просто "каждый диалог", а конкретно на один эксперт/индикатор - один битмап.  Можно больше, но это уже на усмотрение кодера.

Думаю что когда будет рабочий диалог на битмапе, то добавить модальные окна на нём же или другой диалог рядом на этом же битмапе - дело техники и не принципиально сейчас.

Делаем сначала абстрактную модель без конкретики - какие окна, где расположены и т.д. 

Тогда получится охватить все хоелки и различные модели поведения

 
o_O:

Приветстсвую кодеров.

Есть интересная задача сделать действительно что-то полезное, и думаю что краудсорс будет хорошим вариантом.
Во-первых, результаты работы будут на ранних этапах доступны всем. Во-вторых, сделаем что то новое с использованием MQL. И даже возможно истребуем новые плюшки у разработчиков МТ.

----

Итак, задачач первая и базовая.

1. Нужно сделать класс кнопки (допустим GButton, префикс G чтоб не путать с уже имеющимися).
- кнопка пока простая с текстом (без доп картинок)
- кнопка рисуется на некоторой области канваса
- кнопка имеет событие нажатия.



---
Со времением оформим коды на битбакете.

с интересом слежу, и немного вмешаюсь: imho разработчик (типа меня) вложил-бы в крауд GUI, если этот GUI может рисоваться не только средствами терминала. Поясню - красивый интерфейс, это хорошо, это плюс к продажам..но пока он не отъедает ресурсы. Было-бы идеально иметь GUI библиотеку которая может переключать back-end. Например пока ресурса не жалко - пусть рисуется терминалом по канве (это всякие демки/маркет).  А как только что-то серьёзное - отрисовка через быстрые средства на битмап. Есть-же всякие cairo (не говоря про OpenGL) которые с рисованием справляются легче.

А вообще идеально иметь GUI который проектируется в отдельном приложении и импортируется как XML например. Не дело это расписывать в советнике расположение кнопок и диалоговые формы.
 
Пример, схематично:

Разметка:
<sample>
   <window
     name='Sample'
     caption='Sample'
     x=0
     y=0
     width=320
     height=240
     OnClose='CloseApp'>

     <button caption='Exit' x y width height OnClick='ButtonExitClick'/>    

   </window>

</sample>
Реализация событий:
class SampleCloseAction : public CloseAction
  {
public:
               SampleCloseAction() { SetActionName("CloseApp"); }
   virtual int Execute() { Print('Bye'); return(0); }
  };

class ButtonExitAction : public ButtonClickAction
  {
public:
               ButtonExitAction() { SetActionName("ButtonExitClick"); }
   virtual int Execute() { GUI::WindowClose('Sample'); return(0); }
  };

BaseAction *actions[];

actions[0]=new SampleCloseAction;
actions[1]=new ButtonExitAction;

GUI::WindowCreate('Sample',actions);
 
Maxim Kuznetsov:

А вообще идеально иметь GUI который проектируется в отдельном приложении и импортируется как XML например. Не дело это расписывать в советнике расположение кнопок и диалоговые формы.

вооот ) 

вы подошли к нашей первой задаче которую будем делать после создания элементов.

 
Maxim Kuznetsov:
А вообще идеально иметь GUI который проектируется в отдельном приложении и импортируется как XML например. Не дело это расписывать в советнике расположение кнопок и диалоговые формы.
В таком случае для начала нужно написать быстрый и хороший парсер XML. Весч весьма нужная в хозяйстве. Сам пользуюсь одним вариантом из CodeBase, тормозит на определенных задачах жутко, особенно в новых билдах. Этот парсер весь у меня уже в заплатках и костылях. В общем пишите хороший парсер товарисчи! Удружите всем.  
 
Vasiliy Sokolov:
В таком случае для начала нужно написать быстрый и хороший парсер XML. Весч весьма нужная в хозяйстве. Сам пользуюсь одним вариантом из CodeBase, тормозит на определенных задачах жутко, особенно в новых билдах. Этот парсер весь у меня уже в заплатках и костылях. В общем пишите хороший парсер товарисчи! Удружите всем.  
Может Вы знаете, как сделать рабочий и полностью нарисованный слайдер? В общих чертах хотя бы... Мне бы общую концепцию усвоить.
 
Реter Konow:
Может Вы знаете, как сделать рабочий и полностью нарисованный слайдер? В общих чертах хотя бы... Мне бы общую концепцию усвоить.
К сожалению не подскажу. Это достаточно сложный элемент даже если его создавать на основе обычных примитивов. 
 
Реter Konow:
Может Вы знаете, как сделать рабочий и полностью нарисованный слайдер? В общих чертах хотя бы... Мне бы общую концепцию усвоить.

смотрите в класс CCanvas. все примитивы отрисовки доступны.

во вторых - вы можете загружать bmp для ваших эементов и плюхать их аля BitBlt на канвас

Причина обращения: