如何将Delphi7 下Bookmark的运用方便地移植到Delphi XE 下

       书签(Bookmark)在对数据集操作中经常会用到。在Delphi7下, 书签的类型是指针,可以通过TStrings 的AddObject方法与数据集的记录想关联。因此,TListBox或TComboBox 要与数据集的记录关联,都采用了这种方法。但在DelphiXE 下,书签的类型是数组了,就不能使用AddObject方法将TListBox或TComboBox与数据集想关联,主要是在DelphiXE下采用新的关联方式。但采用新的方法,修改原有的程序工作量还是很大的,也影响程序的稳定性。为此,采用以下方法只要适当修改原有程序,就能在DelphiXE正常运行。

       假如有个窗体上有控件ListBox1和数据集Dataset1,Dataset1中有字段“Name", 要显示在ListBox1 中,并且每条记录与ListBox1的Item相关联。原来在Delphi7 下,是这样设计的:

  ListBox1.Items.BeginUpdate ;
  ListBox1.Items.Clear ;
  With Dataset1 do
  begin
    First ;
    while not Eof do
    begin
      ListBox1.Items.AddObject(FieldByName('Name').AsString, GetBookMar()) ;
      Next ;
    end;
  end;
  ListBox1.Items.EndUpdate ;

  当选中ListBox1中某条项目后,需要指向Datset1的相关联记录,需要这要操作:

  Dataset1.GotoBoomark(ListBox1.Items.Objects[ListBox1.ItemIndex]) ;

  但在DelphiXE 下,这种方法就行不通了,关联部分需要作以下调整:

Var
   p: ^TBookmark ;
begin
   ListBox1.Items.BeginUpdate ;
   ListBox1.Items.Clear ;
   With Dataset1 do
   begin
       First ;
       while not Eof do
       begin
          New(p) ;
          p^ := GetBookMark() ;
          ListBox1.Items.AddObject(FieldByName('Name').AsString, TObject(p)) ;
          Next ;
       end;
    end;
    ListBox1.Items.EndUpdate ;

end;
 

当选中ListBox1中某条项目后,需要指向Datset1的相关联记录,作以下调整:

Var
  p: ^TBookmark ;

  i: Integer ;
begin
   p := Pointer(ListBox1.Items.Objects[ListBox1.ItemIndex]) ;
   Dataset1.GotoBookmark(p^);

   For i  := 0 to ListBox1.Items.Count - 1 do dispose(Pointer(ListBox1.Items.Objects[i])) ;
end;  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值