标签: delphi-xe2

如何循环分隔字符串并将字符串的内容分配给本地delphi变量?

我编写了一个Delphi函数,将.dat文件中的数据加载到字符串列表中.然后它解码字符串列表并分配给字符串变量.字符串的内容使用'#'符号作为分隔符.

然后,我如何获取此字符串的内容,然后将其内容分配给局部变量?

// Function loads data from a dat file and assigns to a String List.
function TfrmMain.LoadFromFile;
var 
  index, Count : integer;
  profileFile, DecodedString : string;
begin
  // Open a file and assign to a local variable.
  OpenDialog1.Execute;
  profileFile := OpenDialog1.FileName;
  if profileFile = '' then
    exit;
  profileList := TStringList.Create;
  profileList.LoadFromFile(profileFile);
  for index := 0 to profileList.Count - 1 do
  begin
    Line := '';
    Line := profileList[Index];
  end;
end;
Run Code Online (Sandbox Code Playgroud)

在解码后,var"Line"包含如下所示的内容:

例:

Line '23#80#10#2#1#...255#'.
Run Code Online (Sandbox Code Playgroud)

并非所有分隔符之间的值都是相同的长度,并且每次调用函数LoadFromFile时"Line"的值都会变化(例如,有时一个值可能只有一个数字,接下来的两个或三个等等,所以我不能依赖于复制字符串或数组的函数).

我试图找出循环"Line"内容的方法,将其分配给名为"buffer"的局部变量,然后如果遇到'#'则将缓冲区的值赋给局部变量,将缓冲区重新初始化为''; 然后移动到"Line"中的下一个值,重复下一个参数的过程,每次忽略'#'.

我想我现在已经解决了这个问题太久了,我似乎无法取得任何进展,需要休息一下.如果有人愿意看一看,我欢迎任何关于如何实现这一目标的建议.

非常感谢

KD

delphi loops tstringlist delphi-xe2

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

如果只有一个指针,则释放一个对象

我有一个存储指向某些对象的指针的数组,我想知道如果你只有一个指针,是否可以释放一个对象.例如:

var test_form :Tform;
    p: Pointer;
vartest := Tform.create(nil);
p:=@vartest;
Run Code Online (Sandbox Code Playgroud)

如果在运行时我只有p 可以释放vartest吗?

delphi variables pointers delphi-xe2

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

如何使用Include with Unicode?

我尝试将一些代码从D2007移植到DXE2.这个简化的代码在D2007中编译得很好.在DXE2中显示此错误:

[DCC Warning] Unit1.pas(10): W1050 WideChar reduced to byte char in set expressions.  Consider using 'CharInSet' function in 'SysUtils' unit.
[DCC Error] Unit1.pas(37): E2010 Incompatible types: 'AnsiChar' and 'Char'
Run Code Online (Sandbox Code Playgroud)

可能是一个unicode问题.有人能告诉我为什么会发生这种情况以及我该如何纠正它?

问候

代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TSetOfChar = Set of Char;  // Line 10

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FCharacterSet: TSetOfChar;
  public
    property CharacterSet: TSetOfChar read FCharacterSet write FCharacterSet;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-2007 delphi-xe2

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

在Delphi中实现SQL"Where"构造的最佳方法是什么?

我有带字段的Firebird数据库表(FK - ForeignKey字段):

ID integer,
FACILITY_ID integer, --FK
SERVICE_ID integer, --FK
PROVIDER_ID integer, --FK
SELLER_ID integer, --FK
TARIFF_GROUP_ID integer, --FK
DATE_START date,
N_NORMATIVE_VALUE numeric(15,2),
N_METER_VALUE numeric(15,2),
T_NORMATIVE_VALUE numeric(15,2),
T_METER_VALUE numeric(15,2),
IS_ACTIVE smallint
Run Code Online (Sandbox Code Playgroud)

我想将这个表加载到内存中并在我的Delphi程序中使用它(readonly).我必须搜索所有FK的记录(......其中FACILITY_ID =:FACILITY_ID和SERVICE_ID =:SERVICE_ID等...)

什么是该任务的最佳容器:动态数组或列表或其他什么?以及如何实现此搜索?哈希可能吗?

它不是非常大的表(1000条记录),但将在FOR构造中使用超过100000次迭代.

我正在使用带有IBX和UIB和FB25的Delphi XE2

delphi firebird firebird2.5 delphi-xe2

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

Delphi XE2/XE3和Windows 8平板电脑/手机

是否可以使用Delphi XE2或XE3为Windows 8平板电脑和手机开发应用程序?我认为XE3 ust支持UI.我不确定我们是否可以使用Delphi为Win8平板电脑创建应用程序.我已经阅读过我们需要在Visual Studio中使用Prism XE3的地方.我不想因此而购买/升级到XE3.我相信即使使用XE2我们也可以开发但不确定.

另外,有人知道微软是否接受用Delphi编写的appstore应用程序?

谢谢.

-K

delphi app-store delphi-xe2 windows-8 delphi-xe3

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

删除,添加,编辑stringList

这有点令人困惑,但会尽力解释它.请询问您是否需要更多详细信息.

首先,我有一个叫做TPlayersLike 的课程.

TPlayers = class
   Private
      p : array[1..20] of TStringList;
      function GetPlayer(i:integer): TStringList;

    Public
      Property player[i : integer] : TStringList read GetPlayer;

           constructor Create;   virtual;
    implementation

    uses
    main;
    {constructor}
       constructor TPlayers.Create;
       begin
         p[1] := TStringList.Create;
         p[2] := TStringList.Create;
         p[3] := TStringList.Create;
         p[4] := TStringList.Create;
         p[5] := TStringList.Create;
         p[6] := TStringList.Create;
       end;

     function TPlayers.GetPlayer(i: integer): TStringList;
    begin
      Result := p[i];
    end;
Run Code Online (Sandbox Code Playgroud)

我现在必须FTherePlayers := TPlayers.Create创建这个类.我第一次像这样添加到stringlist

FTherePlayers.Player[strtoint(name2)].Add('posx='+inttostr(posL.x));
Run Code Online (Sandbox Code Playgroud)

或者取出变量

FTherePlayers.Player[1].Add('posx=15');
Run Code Online (Sandbox Code Playgroud)

这似乎没问题,但接下来我尝试更新它

FTherePlayers.Player[strtoint(ID)].Values['posx='] := xpos;
Run Code Online (Sandbox Code Playgroud)

或者取出变量

FTherePlayers.Player[1].Values['posx='] := 12; …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

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

在Delphi中反序列化时显示表单中的访问冲突

我通过序列化和对Delphi的表单及其内容的反序列化编写了以下代码

unit SerAndDeser;

interface

  uses Classes,MainForm,ListOfTables,DataOfTable,SerialForms,sysutils,ActiveX, DatabaseClasses, UnloadProcs;

  procedure Ser();
  procedure Deser();
  function GetGUID(): string;
  function DeleteSymbols(inputstr : string) : string;
implementation

  function GetGUID(): string;
  var
  GUID : TGUID;
  begin
  Result := '';
  if CoCreateGuid(GUID) = 0 then
    Result := GUIDToString(GUID);
    Result := StringReplace(Result, '{', '', []);
    Result := StringReplace(Result, '}', '', []);
    Result := StringReplace(Result, '-', '', [rfReplaceAll]);
  end;

  function DeleteSymbols(inputstr : string): string;
  begin
  Result := '';
    Result := StringReplace(inputstr, '-', '', [rfReplaceAll]);
    Result := StringReplace(Result, ' ', …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

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

从adoquery中删除重复项

我有一个adoQuery,并希望用结果填充列表框,但没有重复.

      with Fdeptlayout.ADOQuery2 do
  begin
    sql.Clear;
         sql.BeginUpdate;
         sql.Add('SELECT');
         sql.Add(' *');
         sql.Add('FROM');
         sql.Add(' `MList`');
         sql.Add(' ORDER BY `Basic Name`');
         sql.EndUpdate;

         open;
  end;

  while not fdeptlayout.ADOquery2.EOF do
    fdeptlayout.ListBox1.Items.Add(fdeptlayout.ADOQuery2['Basic Name']);
end;
Run Code Online (Sandbox Code Playgroud)

目前,这会向列表框中添加350个项目,其中包含大量重复项.这太多了.如何更改查询以从结果中删除重复项?:(任何帮助都会很棒!

delphi delphi-xe2

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

Delphi XE2 - 如何使用Multiselect和Unfiltered Opendialog打开.mp3文件

如何使用未过滤和多选择的opendialog加载到listview只有.mp3文件?我正在使用这种方法:

procedure TForm1.PlayClick(Sender: TObject);
  var i:integer;
  begin
  if opendialog1.execute  then
  begin
  if ExtractFileExt(opendialog1.FileName[i]) ='.mp3' then
  begin
  for I := 0 to opendialog1.files.Count - 1 do
  begin
  listview1.Items.Add.Caption:=extractfilename(opendialog1.Files[i]);
  end;
  end;
  end else
  begin
showmessage(opendialog1.Files[i]);
  end;
  end;
Run Code Online (Sandbox Code Playgroud)

但是我需要一个像这样工作的程序:

如果用户打开具有各种扩展名的文件夹,则opendialog仅添加到扩展名为.mp3的ListView文件.我需要一个不使用过滤器的过程.谢谢!

delphi delphi-xe2

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

为什么我会收到错误实施错误?

我收到一个错误:

[DCC错误] Test.pas(10):E2291缺少接口方法ICoTest64.MyFunc的实现

以下是TLB文件的片段.

// *********************************************************************//
// Interface: ICoTest64
// Flags:     (4416) Dual OleAutomation Dispatchable
// GUID:      {76CF78FE-22A3-4C0B-B1A9-97634A453AE3}
// *********************************************************************//
  ICoTest64 = interface(IDispatch)
    ['{76CF78FE-22A3-4C0B-B1A9-97634A453AE3}']
    function MyFunc(const Range: System.OleVariant): System.OleVariant; safecall;
  end;
Run Code Online (Sandbox Code Playgroud)

这是实施

unit Test;

interface

uses
  SysUtils, ComObj, ComServ, ActiveX, Variants, Office2000, Excel2000, 
  adxAddIn, Test64_TLB,
  System.Classes, adxHostAppEvents, Dialogs, StdVcl;

type
  TCoTest64 = class(TadxAddin, ICoTest64)
  protected
    function MyFunc(var Range: System.OleVariant): System.OleVariant; safecall;
  end;

implementation

function TCoTest64.MyFunc(var Range: System.OleVariant): System.OleVariant;
begin
  Result:= 10;
end;

end.
Run Code Online (Sandbox Code Playgroud)

据我所知 implementation = interface

我正在使用Delphi XE2

怎么了?

delphi delphi-xe2

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