public void PutDdeData(byte[] data) { DataReceived = DateTime.UtcNow; using (XlTable xt = new XlTable(data)) ProcessTable(xt); }
// ********************************************************************** public override void ProcessTable(XlTable xt) { sb.Clear(); for(int row = 0; row < xt.Rows; row++) { for(int col = 0; col < xt.Columns; col++) { xt.ReadValue(); switch(xt.ValueType) { case XlTable.BlockType.Float: sb.Append(xt.FloatValue.ToString().PadLeft(vspace)); break; case XlTable.BlockType.String: sb.Append(xt.StringValue.PadLeft(vspace)); break; default: sb.Append(xt.ValueType.ToString().PadLeft(vspace)); break; } } sb.AppendLine(); } Data = sb.ToString(); updated = true; }
// -------------------------------------------------------------- protected override PokeResult OnPoke(DdeConversation dc, string item, byte[] data, int format) { using (XlTable xt = new XlTable(data)) ((XlDdeChannel)dc.Tag).ProcessTable(xt); return(PokeResult.Processed); }
// Обработчик данных public override void ProcessTable(XlTable xt) { // Поступили новые данные из таблицы, настроенной для экспорта // в "Рабочую книгу" trades. // Все переданные данные содержатся в переменной xt, являющейся // экземпляром класса XlTable, который содержит методы для их // распаковки. // xt.Rows - кол-во строк, xt.Columns - кол-во столбцов в полученной // таблице. Для чтения одной ячейки таблицы служит метод // xt.ReadValue(), который после своего вызова устанавливает // свойства xt.ValueType - тип прочитанных данных и xt.*Value - // значение в ячейке. От Квика поступают данные двух типов: // XlTable.BlockType.Float (double в C#) // XlTable.BlockType.String (в C# тоже string) // Отобразим всю полученную информацию for(int row = 0; row < xt.Rows; row++) { for(int col = 0; col < xt.Columns; col++) { xt.ReadValue(); switch(xt.ValueType) { case XlTable.BlockType.Float: Console.Write("D:{0}\t", xt.FloatValue); break; case XlTable.BlockType.String: Console.Write("S:{0}\t", xt.StringValue); break; default: Console.Write("{0}:{1}\t", xt.ValueType, xt.WValue); break; } } Console.WriteLine(); } }
// ********************************************************************** // Обработчик данных public override void ProcessTable(XlTable xt) { // Учитывая, что это простой пример, в очередь будем // класть уже готовую для отображения строку. for(int row = 0; row < xt.Rows; row++) { sb.Clear(); for(int col = 0; col < xt.Columns; col++) { xt.ReadValue(); switch(xt.ValueType) { case XlTable.BlockType.Float: sb.Append(xt.FloatValue); break; case XlTable.BlockType.String: sb.Append(xt.StringValue); break; default: sb.Append(xt.ValueType); sb.Append(":"); sb.Append(xt.WValue); break; } sb.Append("\t"); } sb.AppendLine(); Queue.Enqueue(sb.ToString()); } }
public abstract void ProcessTable(XlTable xt);
protected abstract void ProcessTable(XlTable xt);
public override void ProcessTable(XlTable xt) { // Поступили новые данные из таблицы, настроенной для экспорта // в "Рабочую книгу" quotes. // Ничего не будем делать, только обозначим это событие. Console.Write("."); }
// ********************************************************************** protected override PokeResult OnPoke(DdeConversation dc, string item, byte[] data, int format) { //if(format != xlTableFormat) // return PokeResult.NotProcessed; using(XlTable xt = new XlTable(data)) ((XlDdeChannel)dc.Tag).ProcessTable(xt); return PokeResult.Processed; }