Программирование в среде TEClient Alor trade. Урок 1. Вывод "стакана" (Delphi, TSlot, TSlotTable, Ty |
Автор megabax | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
23.06.2010 г. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Программирование в среде TEClient Alor trade. Урок 1. Вывод "стакана" (Delphi, TSlot, TSlotTable, Type Library).Исходники к уроку можно скачать здесь. Для начала я расскажу, как создать палитру компонентов TEClient. В инструкции по установке TEClietn мы читаем: "Для работы с библиотекой в среде разработки Delphi (5, 6, 7…) следует выбрать Project ® Import Type Library главного меню, а затем из списка доступных библиотек типов выбрать TEClient 1.0 Type Library, убрать отметку из опции Generate Component Wrapper и нажать кнопку Create Unit. Это приведет к созданию файла TEClientLib_TLB.PAS, содержащего интерфейс библиотеки TEClient. После чего необходимо добавить ссылку на этот файл в предложении Uses главного модуля проекта." Если же вы будете следовать этом указанию, то никаких компонентов создано не будет, и работать с библиотекой будет достаточно трудоемко и неудобно. Поэтому я предлагаю альтернативный вариант подключения библиотеки. Шаг 1. Создадим палитру компонентов для TEClient. Для этого идем в меню Component -> Configure Palette*: В открывшемся окне жмем кнопочку Add*: Вводим имя палитры компонентов (например TEClientAlor) и она у нас появляется в списке*: Шаг 2. Делаем все по инструкции, только не снимает галочку "Generate component wrapper"*: После этого у вас должна появится закладка с компонентами TEClient*: Если не появилось, то сделайте еще раз Import Type Library и нажмите кнопочку Install. Если появились компоненты, то можно начинать писать робота. Для начала мы напишем пример, как вывести "стакан". И так, кладем на форму следующие компоненты:
Вот что должно получиться в итоге*: Теперь начнем программировать. Для начала в секцию private объявления формы (путь она будет у нас называться TfrmArbStockBot), вставим поля и методы:
Выше объявления TfrmArbStockBot объявим структуру TOrdersBookStruct:
Далее реализуем процедуру RedrawGrid:
Эта процедура у нас выводит в таблицу (компонент TStringGrid) содержимое стакана, загруженное ранее в массив FOrderBook. Теперь напишем обработчик кнопки btnConnect:
В этом обработчике мы вызываем метод Connect1 у компонента TSlot. В качестве параметров передаем адрес сервера, логин и пароль. Вместо 'fut1.alor.ru' может быть указан другой, например 'trade.alor.ru' или '213.181.12.52'. Перейдем к компоненту TSlotTable. Напишем у него обработчик события OnOpened:
Что бы мы знали, если по какой то причине открыть таблицу не удалось, напишем так же обработчик OnError:
Теперь займемся реализацией событий "от стакана", а именно добавление, удаление и обновление строк в таблице. Как вообще работает "стакан"? Периодически из него удаляются все строки, в этот момент компонент TSlotTable, который связан со стаканом, генерит событие OnClear. Затем "стакан" наполняется. При добавлении каждой строчки происходит событие OnAddRow. Аналогично, если строка удаляется или обновляется, то вызывается генерится событие OnDeleteRow и OnUpdateRow соответственно. Давайте все эти события реализуем:
Очистка "стакана" происходи путем обнуления счетчика строк. Сам буфер при этом мы не очищаем - нет необходимости. При удалении строки мы ее не удаляем а просто метим на удаление, присваивая полб ID значение -1. Если надо добавить строку - ищем ее по ID, если не находим - добавляем в конец путем увеличения счетчика строк на единицу и записывая в буфер в ячейку, равную счетчику строк. Если размер буфера недостаточный - увеличиваем его. При обновлении строки ищем ее по ID и обновляем. Буфер у нас реализован на динамических массивах, подробнее о них здесь. Что бы все это работало, нам необходимо открыть таблицу "стакана". Для этого реализуем обработчик события OnClick кнопочки "Старт":
Здесь мы задаем имена полей и вызываем метод OpenOrderbook - открыть "стакан". Обратите внимание, в последнем параметре после строки GAZR-9.10 идет 16 пробелов. Дело в том, что передавать нужно точное имя бумаги. Точные имена можно получить из таблицы Securities, но до нее мы еще дойдем в будущих уроках. Так же мы инициализируем буфер и счетчик строк:
И, наконец, нам осталось реализовать обновление таблицы стакана на экране. Если обновлять каждый раз, когда происходит событие OnAddRow, OnDeleteRow или OnUpadateRow то таблица будет мерцать и дергаться. Очень мозолит глаза. Поэтому будем обновлять экран ежесекундно, для этого напишем обработчик события OnTime компонента TTimer:
Все, пример готов, можно его тестировать:
Скриншоты, помеченные знаком* , являются цитатами и иллюстрациями программного продукта "Borland Delphi", авторское право на который принадлежит Borland.
Исходники к уроку можно скачать здесь. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее обновление ( 23.02.2013 г. ) |