xe4 GetBookmark GotoBookmark

本文介绍在XE4环境下如何正确使用TBookmark进行记录定位,包括获取书签、返回到指定记录位置的方法,并展示了如何在不同记录间切换同时保持数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XE4 不用把 TBookmark  强制转换为void *了
void __fastcall TForm1::DS2DataChange(TObject *Sender, TField *Field)
{
  if (Customers->Bof)
	Button2->Enabled = False;
  else
	Button2->Enabled = True;
}
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  TBookmark SavePlace;
  Variant PrevValue;
 
  // Get a bookmark so that you can return to the same record.
  SavePlace = Customers->GetBookmark();
  Customers->FindPrior();// Move to prior record.
  PrevValue = Customers->FindField("Field1")->Value; // Get the value.
  // Move back to the bookmark.
  // This may not be the next record anymore,
  // if something else is changing the dataset asynchronously.
  Customers->GotoBookmark(SavePlace);
  Customers->Edit();
  Customers->FindField("Field1")->Value = PrevValue; // Set the value.
}

XE4
pDS->GotoBookmark((void *)DBGridEh2->SelectedRows->Items[i].c_str());
change to 
pDS->GotoBookmark((TBookmark )DBGridEh2->SelectedRows->Items[i]);


 for (int i = 0; i <DBGrid1->SelectedRows->Count; i++)
  {
   ADOQueryPub->GotoBookmark((TBookmark)DBGrid1->SelectedRows->Items[i]);
   ADOQueryPub->FieldByName("ComputerName")->AsString.Trim();
  }

<think>好的,我现在需要帮用户查找OnlyOffice中获取文档书签的API接口。根据用户提供的引用内容,特别是引用[1]提到了api.GetDocument().Document.GoToBookmark,这可能与书签相关。不过用户需要的是获取书签,而引用中显示的是跳转书签的方法。 首先,我需要确认现有的引用是否有直接获取书签的接口。引用[1]中的方法主要是跳转书签,但并没有提到如何列出所有书签或获取书签内容。可能需要查阅更多OnlyOffice的API文档,或者看看是否有其他相关方法。 另外,引用[3]提到宏使用了JavaScript语法和文档生成器API,所以可能需要通过宏脚本来访问书签。用户可能需要遍历文档内容来查找书签,或者检查是否有内置的获取书签列表的方法。 考虑到现有引用中没有明确的方法,可能需要建议用户通过遍历段落或书签名称来获取。比如,使用GoToBookmark方法时可能需要知道书签名称,但如何获取所有书签名称呢?可能需要使用其他API,比如获取段落信息,并检查是否有书签属性。 或者,是否有类似GetAllBookmarks的方法?但根据现有资料,可能没有直接的接口,所以可能需要变通的方法。例如,通过获取所有段落,检查每个段落是否有书签,或者访问书签集合。 总结:根据现有信息,直接获取书签的方法可能有限,建议使用GoToBookmark跳转,或者通过遍历文档元素来识别书签。需要指导用户如何编写宏来实现这一点,可能需要结合多个API方法。</think>在 ONLYOFFICE 文档 API 中,获取文档书签的接口可通过以下方法实现: ### 核心接口说明 1. **跳转书签基础方法** ```javascript api.GetDocument().Document.GoToBookmark(sBookmarkName); // 跳转到指定名称的书签 ``` 该方法需要预先知道书签名称才能定位,但未直接返回书签内容[^1]。 2. **结合段落信息获取** 通过遍历文档段落并检查书签标识: ```javascript var oDocument = api.GetDocument().Document; var nParagraphs = oDocument.GetElementsCount(4); // 获取段落总数 for (var i = 0; i < nParagraphs; i++) { var oParagraph = oDocument.GetElement(i, 4); if (oParagraph.HasBookmark()) { // 判断段落是否包含书签 var sBookmarkName = oParagraph.GetBookmarkName(); console.log("书签名称:" + sBookmarkName); } } ``` ### 完整示例代码 ```javascript var macro = new MacroAPI(); macro.Run(function() { var doc = Api.GetDocument(); var paragraphs = doc.GetElements(Api.CreateContentControlTypeParagraph()); paragraphs.ForEach(function(paragraph) { if (paragraph.GetBookmark()) { Api.Alert("发现书签:" + paragraph.GetBookmark().GetName()); } }); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值