引用Delphi XE8帮助:
对于单字节和多字节字符串,Length返回字符串使用的字节数.UTF-8的示例:
Run Code Online (Sandbox Code Playgroud)Writeln(Length(Utf8String('1¢'))); // displays 3对于Unicode(WideString)字符串,Length返回字节数除以2.
这引起了一些重要问题:
我最近安装了 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) 我有一个第三方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) 就是这样:该库支持哪些确切的文件格式?该文档没有具体说明这一点,对此事含糊其辞:
Glide 支持获取、解码和显示视频静止图像、图像和动画 GIF
特别令人感兴趣的是它支持哪些视频格式(如果有的话)(什么是视频静态?)。
我有以下设置:
//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) 所以我花了一个小时试图让它发挥作用.我正在对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脚本无效.如果它们仍然存在,我会在字符串的每一端都有两个撇号,但仍然会弄乱脚本.这是什么?
除了第一个只处理数组的明显区别之外,它们不做同样的事情吗?我一直在阅读这两个功能的帮助页面,但不明白什么时候应该使用一个而不是另一个以及为什么。Internet 搜索似乎表明,如果不使用循环编写,则仅将第二个用于数组复制目的。
所以,我有一个自己写的运行时包.如果包是静态链接的,则使用的项目具有对导出数据的完全访问权限,因为编译器完全了解从中导入的内容,对不对?但也可以通过LoadPackage()动态加载包.但是,如何使用类导入的复杂数据结构呢?除了使用FindClass('TSomeClass')和调用RTTI来操作导入类的实例之外,我找不到一种可行的方法.
我有一个处理类似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)