delphi xe android 字节,Delphi XE LiveBindings - 比特到字节

Sir Rufo..

6

您必须使用BindSource进行绑定.在这个例子中我只使用了TPrototypeBindSource.

没有必要为数据对象提供组件,一个简单的对象就足够了.

unit DataObject;

interface

type

TBits2Byte = class

private

{ Private declarations }

fBit00, fBit01, fBit02, fBit03, fBit04, fBit05, fBit06, fBit07: Boolean;

function bitstate( sfr, bit: Byte ): Boolean;

function ReadByte: Byte;

procedure WriteByte( aByte: Byte );

published

{ Published declarations }

property char: Byte read ReadByte write WriteByte;

property Bit00: Boolean read fBit00 write fBit00;

property Bit01: Boolean read fBit01 write fBit01;

property Bit02: Boolean read fBit02 write fBit02;

property Bit03: Boolean read fBit03 write fBit03;

property Bit04: Boolean read fBit04 write fBit04;

property Bit05: Boolean read fBit05 write fBit05;

property Bit06: Boolean read fBit06 write fBit06;

property Bit07: Boolean read fBit07 write fBit07;

end;

implementation

function TBits2Byte.bitstate( sfr, bit: Byte ): Boolean;

begin

Result := Boolean( ( sfr shr bit ) And $01 );

end;

function TBits2Byte.ReadByte: Byte;

begin

Result :=

{} ( Ord( Bit07 ) shl 7 ) Or

{} ( Ord( Bit06 ) shl 6 ) Or

{} ( Ord( Bit05 ) shl 5 ) Or

{} ( Ord( Bit04 ) shl 4 ) Or

{} ( Ord( Bit03 ) shl 3 ) Or

{} ( Ord( Bit02 ) shl 2 ) Or

{} ( Ord( Bit01 ) shl 1 ) Or

{} ( Ord( Bit00 ) shl 0 );

end;

procedure TBits2Byte.WriteByte( aByte: Byte );

begin

Bit00 := bitstate( aByte, 0 );

Bit01 := bitstate( aByte, 1 );

Bit02 := bitstate( aByte, 2 );

Bit03 := bitstate( aByte, 3 );

Bit04 := bitstate( aByte, 4 );

Bit05 := bitstate( aByte, 5 );

Bit06 := bitstate( aByte, 6 );

Bit07 := bitstate( aByte, 7 );

end;

end.

现在带有绑定的表单

unit Form.Main;

interface

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.Bind.Components,

Data.Bind.ObjectScope, System.Rtti, System.Bindings.Outputs, Vcl.Bind.Editors,

Data.Bind.EngExt, Vcl.Bind.DBEngExt, Vcl.StdCtrls;

type

TForm1 = class( TForm )

Bits2ByteSource: TPrototypeBindSource;

{ OnCreateAdapter -> Bits2ByteSourceCreateAdapter }

CheckBox1: TCheckBox;

CheckBox2: TCheckBox;

CheckBox3: TCheckBox;

CheckBox4: TCheckBox;

CheckBox5: TCheckBox;

CheckBox6: TCheckBox;

CheckBox7: TCheckBox;

CheckBox8: TCheckBox;

Edit1: TEdit;

procedure Bits2ByteSourceCreateAdapter( Sender: TObject; var ABindSourceAdapter: TBindSourceAdapter );

private

{ Private-Deklarationen }

public

{ Public-Deklarationen }

end;

var

Form1: TForm1;

implementation

uses

DataObject;

{$R *.dfm}

procedure TForm1.Bits2ByteSourceCreateAdapter( Sender: TObject; var ABindSourceAdapter: TBindSourceAdapter );

begin

// create the adapter and an instance of the data object

ABindSourceAdapter := TObjectBindSourceAdapter.Create(

{AOwner} Self,

{AObject} TBits2Byte.Create,

{AOwnsObject} True );

ABindSourceAdapter.AutoEdit := True;

ABindSourceAdapter.AutoPost := True;

end;

end.

剩下的工作就是使用生活装订.

使用字段编辑器声明TPrototypeBindSource我命名的所有字段Bits2ByteSource:

Bit00 -> ftBoolean

Bit01 -> ftBoolean

Bit02 -> ftBoolean

Bit03 -> ftBoolean

Bit04 -> ftBoolean

Bit05 -> ftBoolean

Bit06 -> ftBoolean

Bit07 -> ftBoolean

Char -> ftChar

5a7908efa524f16088ed223c7c4d9e6d.png

然后用控件绑定所有字段

6fe3be6eae71df472f805da2dc9c659c.png

准备起飞.

仅举几个:

该TEdit.Text值仅在离开控件后更新.如果您想立即更改该字段,则必须使用设置(VCL)TEdit.OnChange/(FMX)TEdit.OnChangeTracking事件

TLinkObservers.ControlChanged( Edit1 );

或者您将有一个通用的方法

procedure TForm1.ControlChanged( Sender : TObject );

begin

if Sender is TComponent then

TLinkObservers.ControlChanged( Sender as TComponent );

end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值