小编Wiz*_*ard的帖子

分配给TStringList时丢失数据的字符串

我有这个方法,

var
s : TStringList;
fVar : string;
begin
s := TStringList.Create;
fVar := ZCompressStr('text');

ShowMessage( IntToStr(length(fVar) * SizeOf(Char)) );
//24

s.text := fVar;  

ShowMessage( IntToStr( length(s.text) * SizeOf(Char)) );
//18
end;
Run Code Online (Sandbox Code Playgroud)

ZCompressStr来自http://www.base2ti.com/zlib.htm,第121行从{$ ifndef UNICODE}更改为{$ ifdef UNICODE}以进行编译.

无论如何,如果我使用fVar变量,我可以调用ZDecompressStr,但是一旦我将它移动到字符串列表或备忘录,它似乎松开了那6个字节的数据....如果我尝试在s.text var上使用ZDecompressStr它因缓冲区错误而失败.

delphi string unicode char delphi-2009

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

Delphi 2009 - 检测是否安装了组件

我得到了一些与其他开发人员分享的代码.我有一个很好的调试模块,我通过单元测试,但他没有这个,所以这是一个不断添加和删除代码的战斗.

如果有一种方法可以使用条件(很像Delphi版本或Unicode),那就太好了

  {$IfDef MYComponent}
    MyComponent := TMyComponent.Create;
    MyComponent.Logging := true;
  {$EndIf}
Run Code Online (Sandbox Code Playgroud)

我想我可以设置我的ide定义一些东西,但我想知道是否有办法检测组件是否已安装.....

delphi components delphi-2009

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

Python - 函数中的默认参数

查看python doc http://docs.python.org/library/urllib2.html

urllib2.urlopen(url [,data] [,timeout])

所以,我传入一个url,然后传递可选数据和超时变量(从我如何读取它).

所以,如果我想传递超时,而不是数据......那么数据的默认变量是什么?你做的,

urlopen('http://www.example.com/', , 5)
Run Code Online (Sandbox Code Playgroud)

谢谢 :)

python urllib2

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

将引用/一个位置中的对象传递给样式对象

我有一个很大的应用程序,目前正在设置.为了节省我更改IDE/Object Inspector中的所有按钮,我计划为主要对象执行一些功能,例如

procedure StyleButton(AButton : TButton)
begin
    AButton.Color := clGreen;
    AButton.Font.Style = [fsBold];
end;
Run Code Online (Sandbox Code Playgroud)

等等,然后根据需要将其添加到表单onCreates

StyleButton(Button1); whatever etc
Run Code Online (Sandbox Code Playgroud)

在这样的参数中传递对象没有问题.它只是引用第一个对象吗?

它工作正常,我想不出任何问题,但因为这是一个大型的应用程序,成千上万的用户,我只是想确保没有问题/内存泄漏/资源消耗问题.

也将使用TAdvStringGrid和TEdit/TMemo组件做类似的事情.

然后只允许一个地方更改这些设置.

或者有人有更好的主意?

delphi object pass-by-reference

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

通过扩展类来设置组件样式

从这个问题将参考/一个地方的对象传递给样式对象

我只是想,如果我为我造型的项目创建了一个后代类,那该怎么办?

例如(原谅可怜的代码,不是ide,但你应该明白我的意思)

TStyledButton = class(TButton)
  public 
     constructor Create; //This overrides the main TButton
end;

constructor TStyledButton.Create;
begin
   inherited;
   self.Color := clRed;
end;
Run Code Online (Sandbox Code Playgroud)

然后在我的表单中,我只将Button1作为TStyledButton.

这将删除表单创建中的所有额外代码,以处理设置样式/调用函数以设置样式.

唯一的问题是,如何在设计视图中进行此操作,我是否必须注册此Object(组件?),以便它实际上在设计视图中显示.

delphi object styling

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

快速搜索Tmemo线

我在表单上有一个TMemo,允许用户输入项目列表.人们可以在这里输入很多物品.单击"保存"时,将检查TMemo的内容,然后将其添加到数据库中.

我在TStringList中有第二个列表,我循环并检查它是否包含在TMemo中的任何项目.

在坚果壳中它看起来像这样

....
//slItems = TStringList
//mItems = TMemo
for i := slItems.Count -1 downto 0 do
begin
  if mItems.Lines.IndexOf(slItems[i]) = -1 then
    slItems[i].Delete;
end;
----
Run Code Online (Sandbox Code Playgroud)

所以stringlist循环,检查它是否存在于备忘录中,如果不是从列表中删除.

然而,有200多个项目开始减速很多,而1000则变得非常糟糕.

什么是搜索TMemo的最快方式?

delphi performance tmemo

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

线程安全例程在线程类之外

如果你有一个调用函数的线程,AFAIK是任何全局或VCL组件调用,这使得它不是线程安全的吗?

所以如果你的线程调用了类似的方法

procedure UpdateRow()
begin
    StringGrid1.AddRow(....);
end;
Run Code Online (Sandbox Code Playgroud)

这不是线程安全的.但是如果你有这样的方法

function ParseXML(const XML : String) : string;
var
    xml_parser : TXMLParser;
begin
    xml_parser := TXMLParser.create;
    ... do stuff
    result := xml_parser.something;
    xml_parser.free;
end;
Run Code Online (Sandbox Code Playgroud)

这是线程安全的,只要TXMLParser没有做任何unthread安全的事情.

但是如果两个线程同时调用该方法,它不会抛出异常,因为它们都创建了自己的TXMLParser实例吗?他们得到自己的副本.那是对的吗?

希望有道理:)

delphi multithreading thread-safety

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

以编程方式从表单中创建和删除标签

我在这里得到了一些代码,它可以很好地创建一个标签,但是当我释放标签时,它仍然显示在表单上。即使它已被删除并且不再“分配”。

这是下面的代码。它可以很好地创建标签,但不会删除。没有例外,被分配的人说假。

我也可以用 TRectangle 重现这个。

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
      Lab : TLabel;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Lab := TLabel.Create(Self);
  Lab.Parent := Form1;
  Lab.Text := 'Hello!';
  Lab.Position.X := 30;
  Lab.Position.Y := 40;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FreeAndNil(Lab);
  ShowMessage(BoolToStr(Assigned(Lab), true));
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2 firemonkey

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

表单文本区域中的行结尾

早晨,

当您发布具有文本区域的表单时,使用什么行结尾?\r\n、\n 或类似的本地文件是否取决于操作系统?

我正在尝试查找 RFC 或 W3C 规范或其他内容,还是基于操作系统/浏览器而有所不同?有链接吗?

例如

<textarea name="message">This is
my
message
</textarea>
Run Code Online (Sandbox Code Playgroud)

可不可能是

This is\r\n
my\r\n
message\r\n
Run Code Online (Sandbox Code Playgroud)

或者

This is\n
my\n
message\n
Run Code Online (Sandbox Code Playgroud)

它是基于浏览器/操作系统的标准还是不同的。证明?

我不担心发送到服务器之前的 textarea 内容,而是 PHP/服务器端的实际变量内容。

html php

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

单击TWebbrowser中的声音

从这个答案 CoInternetIsFeatureEnabled在Delphi2010中

有谁知道如何停止咔哒声.当我将它放入一个单独的pas文件中时,这似乎不适用于Delphi XE.有些人失踪了.和其他原因为什么它不会编译所以我有点卡住.

这就是我做的.

unit untUrlMon;

interface

uses
    Windows;

const
  GET_FEATURE_FROM_THREAD = $00000001;
  GET_FEATURE_FROM_PROCESS = $00000002;
  GET_FEATURE_FROM_REGISTRY = $00000004;
  GET_FEATURE_FROM_THREAD_LOCALMACHINE = $00000008;
  GET_FEATURE_FROM_THREAD_INTRANET = $00000010;
  GET_FEATURE_FROM_THREAD_TRUSTED = $00000020;
  GET_FEATURE_FROM_THREAD_INTERNET = $00000040;
  GET_FEATURE_FROM_THREAD_RESTRICTED = $00000080;

  SET_FEATURE_ON_THREAD = $00000001;
  SET_FEATURE_ON_PROCESS = $00000002;
  SET_FEATURE_IN_REGISTRY = $00000004;
  SET_FEATURE_ON_THREAD_LOCALMACHINE = $00000008;
  SET_FEATURE_ON_THREAD_INTRANET = $00000010;
  SET_FEATURE_ON_THREAD_TRUSTED = $00000020;
  SET_FEATURE_ON_THREAD_INTERNET = $00000040;
  SET_FEATURE_ON_THREAD_RESTRICTED = $00000080; 

type
  INTERNETFEATURELIST = (
    FEATURE_OBJECT_CACHING,
    FEATURE_ZONE_ELEVATION,
    FEATURE_MIME_HANDLING,
    FEATURE_MIME_SNIFFING,
    FEATURE_WINDOW_RESTRICTIONS,
    FEATURE_WEBOC_POPUPMANAGEMENT,
    FEATURE_BEHAVIORS,
    FEATURE_DISABLE_MK_PROTOCOL,
    FEATURE_LOCALMACHINE_LOCKDOWN,
    FEATURE_SECURITYBAND,
    FEATURE_RESTRICT_ACTIVEXINSTALL,
    FEATURE_VALIDATE_NAVIGATE_URL,
    FEATURE_RESTRICT_FILEDOWNLOAD,
    FEATURE_ADDON_MANAGEMENT,
    FEATURE_PROTOCOL_LOCKDOWN,
    FEATURE_HTTP_USERNAME_PASSWORD_DISABLE,
    FEATURE_SAFE_BINDTOOBJECT, …
Run Code Online (Sandbox Code Playgroud)

windows delphi twebbrowser

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