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); } }
/// <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("Источник данных не открыт."); } }
/// <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("Источник данных не открыт."); } }