internal void Set(TwCapability cap)
        {
            try {
                switch (cap.ConType)
                {
                case TwOn.One:
                    var _genericValue = cap.GetValue();
                    var _oneValue     = _genericValue as TwOneValue;
                    if (_oneValue != null)
                    {
                        this.SetCore(TwTypeHelper.CastToCommon(_oneValue.ItemType, TwTypeHelper.ValueToTw <uint>(_oneValue.ItemType, _oneValue.Item)));
                    }
                    else
                    {
                        this.SetCore(_genericValue.ToString());
                    }
                    break;

                case TwOn.Range:
                    for (var _range = cap.GetValue() as TwRange; _range != null; _range = null)
                    {
                        this.SetCore(
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.MinValue)),
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.MaxValue)),
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.StepSize)),
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.DefaultValue)),
                            TwTypeHelper.CastToCommon(_range.ItemType, TwTypeHelper.ValueToTw <uint>(_range.ItemType, _range.CurrentValue)));
                    }
                    break;

                case TwOn.Array:
                    for (var _array = cap.GetValue() as __ITwArray; _array != null; _array = null)
                    {
                        this.SetCore(_array.Items);
                    }
                    break;

                case TwOn.Enum:
                    for (var _enum = cap.GetValue() as __ITwEnumeration; _enum != null; _enum = null)
                    {
                        this.SetCore(_enum.Items, _enum.DefaultIndex, _enum.CurrentIndex);
                    }
                    break;

                default:
                    throw new DataSourceException(TwRC.Failure, TwCC.BadValue);
                }
            } catch (Exception ex) {
                throw new DataSourceException(TwRC.Failure, TwCC.BadValue, ex.Message);
            }
        }
Пример #2
0
 /// <summary>
 /// Возвращает значение для указанного capability (возможность).
 /// </summary>
 /// <param name="capability">Значение перечисления TwCap.</param>
 /// <returns>В зависимости от значение capability, могут быть возвращены: тип-значение, массив, <see cref="Twain32.Range">диапазон</see>, <see cref="Twain32.Enumeration">перечисление</see>.</returns>
 /// <exception cref="TwainException">Возбуждается в случае возникновения ошибки во время операции.</exception>
 public object GetCap(TwCap capability) {
     if((this._TwainState&StateFlag.DSOpen)!=0) {
         using(TwCapability _cap=new TwCapability(capability)) {
             TwRC _rc=this.DsCap(this._appid,this._srcds,TwDG.Control,TwDAT.Capability,TwMSG.Get,_cap);
             if(_rc==TwRC.Success) {
                 switch(_cap.ConType) {
                     case TwOn.One:
                         _TwOneValue _one_val=(_TwOneValue)_cap.GetValue();
                         return Twain32._Convert(_one_val.Item,_one_val.ItemType);
                     case TwOn.Range:
                         return Range.CreateRange((_TwRange)_cap.GetValue());
                     case TwOn.Array:
                     case TwOn.Enum:
                         object _val=_cap.GetValue();
                         TwType _item_type=(TwType)_val.GetType().GetProperty("ItemType").GetValue(_val,null);
                         object[] _result_array=new object[(int)_val.GetType().GetProperty("NumItems").GetValue(_val,null)];
                         object _items=_val.GetType().GetProperty("ItemList").GetValue(_val,null);
                         MethodInfo _items_getter=_items.GetType().GetMethod("GetValue",new Type[]{typeof(int)});
                         for(int i=0;i<_result_array.Length;i++) {
                             _result_array[i]=Twain32._Convert(_items_getter.Invoke(_items,new object[] { i }),_item_type);
                         }
                         if(_cap.ConType==TwOn.Array) {
                             return _result_array;
                         } else {
                             return Enumeration.CreateEnumeration(
                                 _result_array,
                                 (int)_val.GetType().GetProperty("CurrentIndex").GetValue(_val,null),
                                 (int)_val.GetType().GetProperty("DefaultIndex").GetValue(_val,null));
                         }
                         
                 }
                 return _cap.GetValue();
             } else {
                 throw new TwainException(this._GetStatus());
             }
         }
     } else {
         throw new TwainException("Источник данных не открыт.");
     }
 }
Пример #3
0
 /// <summary>
 /// Возвращает флаги, указывающие на поддерживаемые источником данных операции, для указанного значения capability.
 /// </summary>
 /// <param name="capability">Значение перечисдения TwCap.</param>
 /// <returns>Набор флагов.</returns>
 /// <exception cref="TwainException">Возбуждается в случае возникновения ошибки во время операции.</exception>
 public TwQC IsCapSupported(TwCap capability) {
     if((this._TwainState&StateFlag.DSOpen)!=0) {
         using(TwCapability _cap=new TwCapability(capability)) {
             TwRC _rc=this.DsCap(this._appid,this._srcds,TwDG.Control,TwDAT.Capability,TwMSG.QuerySupport,_cap);
             if(_rc==TwRC.Success) {
                 return (TwQC)((_TwOneValue)_cap.GetValue()).Item;
             } else {
                 return 0;
             }
         }
     } else {
         throw new TwainException("Источник данных не открыт.");
     }
 }