小编Mic*_*sen的帖子

记录中的多个变体部分

我正在编写一个小工具,使用Delphi XE2对SWF文件进行一些操作.到目前为止,我只是遵循SWF规范,现在我在实现数据结构来表示形状方面遇到了一个小问题.

SWF形状包含许多形状记录.形状记录可以是边缘记录或非边缘记录,并且这两种类型中的每一种都具有两个附加子类型.

具体地,在说明书的第135页,描述了两种非边缘记录类型; EndShapeRecordStyleChangeRecord.在SWF文件中,区分它们的方法是检查所有五个标志位(在TypeFlag之后)是否为0; 如果它们是,它是一个EndShapeRecord,否则它是一个StyleChangeRecord.

为了帮助我稍后处理形状记录,我想使用变量记录将边缘和非边缘记录统一到单个记录类型中.区分不同类型的记录很容易; 嵌套的变体记录允许我轻松地将边缘记录分开,对于非边缘记录,我可以从中声明5个标志StyleChangeRecord并编写一个函数IsEndRecord.

但是,为了使我的源代码尽可能地反映规范,我想更进一步.a StyleChangeRecord中其他字段的存在取决于这5个标志的值,因此我希望能够声明5个变体记录,每个标志一个,其中包含每个标志添加的字段.(我意识到这不会以任何方式影响内存使用,但这不是重点.)

遗憾的是,Delphi似乎不允许每个"级别"允许多个变体部分,并且尝试在同一级别定义这5个变体部分只会引发大量语法错误.

TShapeRecord = record
  case EdgeRecord: Boolean of
    False: (
      case StateMoveTo: Boolean of
        True: (
          MoveBits: Byte;
          MoveDeltaX: Int32;
          MoveDeltaY: Int32;
        );
      case StateLineStyle: Boolean of // << Errors start here
        True: (LineStyle: UInt16);
      //Additional flags
    );
    //Fields for edge records
end;
Run Code Online (Sandbox Code Playgroud)

用稍微简单的术语来说,目标是能够像这样制定一条记录:

TNonEdgeRecord = record
    case StateMoveTo: Boolean of
      True: (
        MoveBits: …
Run Code Online (Sandbox Code Playgroud)

delphi

6
推荐指数
1
解决办法
1117
查看次数

字符串"</ script>"在IE中导致错误

如果我将这段html添加到我的页面:

<script type="text/javascript">
 var s = '</script>'
</script>
Run Code Online (Sandbox Code Playgroud)

IE 7.0显示语法错误(左下角的感叹号):"未终止的字符串常量"

如果我只更改一个字母(任何),则错误消失 - 看起来IE不喜欢这个特定的单词,包括括号.

有什么想法吗?

谢谢,安德烈

html javascript

2
推荐指数
2
解决办法
1253
查看次数

ListActivity完成时未调用onActivityResult

在我正在开发的小应用程序中,我需要能够从数据库表中选择一条记录.

为了做到这一点,我创建的一个子类ListActivity,GameListScreen,它显示的记录,并重写onListItemClick()如下:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    Game g = (Game)getListView().getItemAtPosition(position);
    Intent intent = new Intent();
    intent.putExtra("id", g.getId());
    setResult(RESULT_OK, intent);
    finish();
}
Run Code Online (Sandbox Code Playgroud)

然后,为了发起我的活动,我在我的MainMenu活动中有这个; 一个onClick处理程序Button:

public void openGameClick(View view) {
    Intent intent = new Intent(this, GameListScreen.class);
    startActivityForResult(intent, -1);
}
Run Code Online (Sandbox Code Playgroud)

并在MainMenu课堂上得到结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
        // result is handled here …
Run Code Online (Sandbox Code Playgroud)

android listactivity

2
推荐指数
1
解决办法
3034
查看次数

标签 统计

android ×1

delphi ×1

html ×1

javascript ×1

listactivity ×1