小编ZzZ*_*mbo的帖子

Unicode字符串上的Length()vs Sizeof()

引用Delphi XE8帮助:

对于单字节和多字节字符串,Length返回字符串使用的字节数.UTF-8的示例:

   Writeln(Length(Utf8String('1¢'))); // displays 3
Run Code Online (Sandbox Code Playgroud)

对于Unicode(WideString)字符串,Length返回字节数除以2.

这引起了一些重要问题:

  1. 为什么处理上的差异根本就存在?
  2. 为什么Length()没有做它预期的事情,只返回参数的长度(如,元素的数量),而不是在某些情况下给出字节大小?
  3. 为什么它声明它将结果除以2(Unicode(UTF-16)字符串?AFAIK UTF-16最多为4字节,因此会产生错误的结果.

delphi delphi-xe8

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

由于缺少“make”,Cpanm 无法安装任何模块

我最近安装了 XAMPP。到目前为止一切都很好,但有一件事让我无法休息:我无法通过 cpanm 获取任何模块。典型的安装日志如下所示:

cpanm (App::cpanminus) 1.6005 on perl 5.016003 built for MSWin32-x86-multi-thread
Work directory is C:\Users\2B86~1/.cpanm/work/1448496711.6352
You have LWP 6.04
You have C:\Users\boss\AppData\Local\Atlassian\SourceTree\git_local\bin\tar.exe, C:\Users\boss\AppData\Local\Atlassian\SourceTree\git_local\bin\gzip.exe and C:\Users\boss\AppData\Local\Atlassian\SourceTree\git_local\bin\bzip2.exe
You have C:\Users\boss\AppData\Local\Atlassian\SourceTree\git_local\bin\unzip.exe
Searching DateTime::Tiny on cpanmetadb ...
--> Working on DateTime::Tiny
Fetching http://www.cpan.org/authors/id/A/AD/ADAMK/DateTime-Tiny-1.04.tar.gz
-> OK
Unpacking DateTime-Tiny-1.04.tar.gz
Entering DateTime-Tiny-1.04
Checking configure dependencies from META.yml
Checking if you have ExtUtils::MakeMaker 0 ... Yes (6.64)
Configuring DateTime-Tiny-1.04
Running Makefile.PL
-> OK
Checking dependencies from MYMETA.json ...
Checking if you have ExtUtils::MakeMaker 0 ... Yes …
Run Code Online (Sandbox Code Playgroud)

cpanm

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

在Flutter中获取Android活动结果

我有一个第三方Android控件,不能直接在Flutter中使用。我把它放在一个Android活动中。然后,使用来自https://flutter.io/docs/development/platform-integration/platform-channels#step-3b-add-an-android-platform-specific-implementation-using-kotlin的信息,我可以成功启动活动并在那里执行一些操作。唯一不起作用的部分是将结果发送回活动。

颤振代码:

void showDialog() async
    {
        try {
            final Map<String, List<double>> result = await platform.invokeMethod('show_dialog',
                <String, String>{
                    'address': widget.user.address
                });
            widget.user.address = result.keys.toList()[0];
        } on PlatformException catch (e) {
            print('Failed to pick address: ${e.message}.');
        }
    }
Run Code Online (Sandbox Code Playgroud)

Android代码:

class MainActivity: FlutterActivity() {
  private val CHANNEL = "dialog"
  private lateinit var _result: MethodChannel.Result
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    GeneratedPluginRegistrant.registerWith(this)
    MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
      if (call.method == "show_dialog") {
          _result = result
          val intent = Intent(this@MainActivity, DialogActivity::class.java)
          intent.putExtra("address", …
Run Code Online (Sandbox Code Playgroud)

android flutter

5
推荐指数
1
解决办法
1523
查看次数

Glide:支持的文件类型

就是这样:该库支持哪些确切的文件格式?该文档没有具体说明这一点,对此事含糊其辞:

Glide 支持获取、解码和显示视频静止图像、图像和动画 GIF

特别令人感兴趣的是它支持哪些视频格式(如果有的话)(什么是视频静态?)。

android file-format android-glide

3
推荐指数
1
解决办法
2302
查看次数

课程成员的任务不会更改

我有以下设置:

//code from unit
...
TObjectList<T:TObject>=class(TObject)
private
  function GetItem(Name: string): T;
  function GetItemByIndex(Index: Integer): T;
public
  property Items[Name:string]:T read GetItem;default;
  property Item[Index:Integer]:T read GetItemByIndex;
end;

...
{ TObjectList<T> }

function TObjectList<T>.GetItem(Name: string): T;
begin
Result:=T(FindComponent(Name));
end;

function TObjectList<T>.GetItemByIndex(Index: Integer): T;
begin
Result:=T(Components[Index]);
end;
...
TStringEval=record
private
  FValue:string;
public
  function AsString:string;
  function AsInteger:Integer;
  function AsFloat:Double;
  function AsBoolean:Boolean;
  function AsDateTime:TDateTime;
  function AsHex:string;
  procedure SetValue(const S:string);overload;
  procedure SetValue(const I:Integer;const AsHex:boolean=false);overload;
  procedure SetValue(const F:Double);overload;
  procedure SetValue(const B:Boolean);overload;
  procedure SetValue(const D:TDateTime);overload;
...
TConsoleVariable=class(TConsoleCommand)
...
  property …
Run Code Online (Sandbox Code Playgroud)

delphi

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

无法在字符串中使用撇号

所以我花了一个小时试图让它发挥作用.我正在对TWebBrowser进行一些测试,所以我可以在项目中应用我的发现.我想测试不同的加载内容的方法(URL,LoadFromStrings()和EvaluateJavaScript()).问题是,我无论如何都不能将一个简单的字符串传递给最后一个方法而不会被错误地包含在撇号中.

procedure TForm1.FormCreate(Sender:TObject);
const S='<span style="color:red">ABC</span><span style="color:green">ABC</span><span style="color:blue">ABC</span>';
begin
WebBrowser1.LoadFromStrings('<html><body><div id="target">[x]</div></body></html>','');
WebBrowser1.EvaluateJavaScript('document.getElementById("target").insertAdjacentHTML('+
'"beforend",'#39+S+#39');');
end;
Run Code Online (Sandbox Code Playgroud)

看到#39?如果没有它们,字符串将完全没有撇号发送,因此生成的JavaScript脚本无效.如果它们仍然存在,我会在字符串的每一端都有两个撇号,但仍然会弄乱脚本.这是什么?

delphi delphi-xe8

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

“System.CopyArray”与“System.Copy”?

除了第一个只处理数组的明显区别之外,它们不做同样的事情吗?我一直在阅读这两个功能的帮助页面,但不明白什么时候应该使用一个而不是另一个以及为什么。Internet 搜索似乎表明,如果不使用循环编写,则仅将第二个用于数组复制目的。

arrays delphi delphi-10.4-sydney

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

运行时包加载与静态链接

所以,我有一个自己写的运行时包.如果包是静态链接的,则使用的项目具有对导出数据的完全访问权限,因为编译器完全了解从中导入的内容,对不对?但也可以通过LoadPackage()动态加载包.但是,如何使用类导入的复杂数据结构呢?除了使用FindClass('TSomeClass')和调用RTTI来操作导入类的实例之外,我找不到一种可行的方法.

delphi

0
推荐指数
1
解决办法
580
查看次数

使用指针数学解析字符串的无限循环

我有一个处理类似C的字符串的例程,导致通常的Delphi字符串:

class function UTIL.ProcessString(const S: string): string;
var
  SB:TStringBuilder;
  P:MarshaledString;
  procedure DoIt(const S:string;const I:Integer=2);
  begin
  SB.Append(S);
  Inc(P,I);
  end;
begin
SB:=TStringBuilder.Create;
P:=PChar(S);
while P<>nil do
  begin
  if P^<>'\' then DoIt(P^,1) else
    case (P+1)^ of
    '\','"':DoIt((P+1)^);
    #0,'n':DoIt(sLineBreak);
    't':DoIt(#9);
    else DoIt('\'+(P+1)^,2);
    end;
  end;
Result:=SB.ToString;
SB.Free;
end;
Run Code Online (Sandbox Code Playgroud)

问题是循环从不退出.调试显示该行while P<>nil do未评估为False,因为在处理结束时P为'',因此代码尝试对其执行超范围操作.由于我没有在Delphi中找到关于指针数学的任何简明文档,所以我很可能在这里有错.

编辑:我已经重写了这个功能,所有内容都是这样读的:

class function UTIL.ProcessString(const S: string): string;
var
  SB:TStringBuilder;
  P:PChar;
  C:Char;
begin
SB:=TStringBuilder.Create;
P:=PChar(S);
  repeat
  C:=P^;
  Inc(P);
    case C of
    #0:;
    '\':
      begin
      C:=P^;
      Inc(P);
        case C of
        #0,'n':SB.Append(sLineBreak);
        '\','"':SB.Append(C);
        't':SB.Append(#9);
        else …
Run Code Online (Sandbox Code Playgroud)

delphi pointer-arithmetic delphi-xe8

-1
推荐指数
1
解决办法
239
查看次数