小编Joh*_*ica的帖子

Delphi优化IndexOf功能

有人可以帮我加速我的Delphi函数在不使用二进制搜索的情况下在字节数组中查找值.

我把这个函数称为数千次,是否可以用汇编来优化它?

非常感谢.

function IndexOf(const List: TArray< Byte >; const Value: byte): integer;
var
  I: integer;
begin
  for I := Low( List ) to High( List ) do begin
   if List[ I ] = Value then
    Exit ( I );
  end;
  Result := -1;
end;
Run Code Online (Sandbox Code Playgroud)

数组的长度约为15项.

arrays delphi for-loop function inline-assembly

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

使用这样的例外是否有风险?

我有以下功能

function calculate(s:string):integer;
begin
  try
    strtoint(s);
    do_something;
  except
    result:=-1;    
  end;
end;
Run Code Online (Sandbox Code Playgroud)

使用这样的例外会有什么后果吗?

delphi exception

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

随机生成问题

我知道这是一个古老的东西,在我发布之前我已经像每个网站一样搜索答案,但我找不到解决方案

我正在使用C# - Windows Forms

我有这个代码:

char[] options = { 'a', 'l', 'w' };
Run Code Online (Sandbox Code Playgroud)

我也有这个功能:

static Random rand = new Random();
    static char OptionPicker(char[] options)
    {
        rand = new Random();
        return options[rand.Next(0, 2)];
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我想浏览一个字符数组并在每个数组上执行前一个函数时

我选择了相同的选项,它没有得到randomed?

你能告诉我怎么做吗?最好的祝福.

c# random

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

有关如何在delphi中使用Win32 API函数的示例的最佳位置

好吧,我一直在Delphi中尝试使用Win32 API,我不确定在哪里查看使用它们的示例.查看MSDN如何仅显示C++示例.

我已经通过Delphi 7的帮助文件挖了好......我有点困惑所以我只是粘贴我找到的工作代码和帮助文件显示给我的代码,我不明白它是如何转换成我的工作代码...除非我正在使用的代码是如何被屠杀的.

所以这里是我正在尝试使用SetConsoleTextAttribute函数的代码

----我知道的代码可以改变颜色----

begin
   SetConsoleTextAttribute(GetStdHandle(
                          STD_OUTPUT_HANDLE),
                          FOREGROUND_RED OR
                          BACKGROUND_BLUE);

  Writeln('Red text on a blue background !');
  ReadLn;
end.
Run Code Online (Sandbox Code Playgroud)

----------结束工作代码---------------------

--------现在这里是官方delphi文档中的一个剪辑-----

BOOL SetConsoleTextAttribute(

    HANDLE hConsoleOutput,  // handle of console screen buffer  
    WORD wAttributes    // text and background colors 
   );   
Run Code Online (Sandbox Code Playgroud)

参数

hConsoleOutput

标识控制台屏幕缓冲区.句柄必须具有GENERIC_READ访问权限.

wAttributes

指定前景色和背景色属性.可以指定以下值的任意组合:FOREGROUND_BLUE,FOREGROUND_GREEN,FOREGROUND_RED,FOREGROUND_INTENSITY,BACKGROUND_BLUE,BACKGROUND_GREEN,BACKGROUND_RED和BACKGROUND_INTENSITY.例如,以下值组合在黑色背景上生成白色文本:

FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE

------结束德尔福的帮助------

有人可以告诉我,我脑子里的哪个气缸没有开火吗?

delphi console winapi

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

在Delphi中将文件复制到剪贴板

我正在尝试将文件复制到剪贴板.互联网上的所有例子都是一样的.我使用的是http://embarcadero.newsgroups.archived.at/public.delphi.nativeapi/200909/0909212186.html,但它不起作用.

我使用Rad Studio XE,然后传递完整的路径.在模式调试中,我收到一些警告,例如:

Debug Output:
Invalid address specified to RtlSizeHeap( 006E0000, 007196D8 )
Invalid address specified to RtlSizeHeap( 006E0000, 007196D8 )
Run Code Online (Sandbox Code Playgroud)

我不确定我的环境是否相关:Windows 8.1 64位,Rad Studio XE.当我尝试粘贴剪贴板时,没有任何反应.此外,使用监视工具查看剪贴板,此工具显示错误.

代码是:

    procedure TfrmDoc2.CopyFilesToClipboard(FileList: string);
    var
      DropFiles: PDropFiles;
      hGlobal: THandle;
      iLen: Integer;
    begin
      iLen := Length(FileList) + 2;
      FileList := FileList + #0#0;
      hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,
        SizeOf(TDropFiles) + iLen);
      if (hGlobal = 0) then raise Exception.Create('Could not allocate memory.');
      begin
        DropFiles := GlobalLock(hGlobal);
        DropFiles^.pFiles := SizeOf(TDropFiles);
        Move(FileList[1], (PChar(DropFiles) …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe

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

如何在 DBGrid 中显示与数据库中不同的值?

问题

在此处输入图片说明

我有DBGdrid并且有ID's从 MS Access 数据库显示的列。如何将它们更改为真实值,例如item name, client name, employee name

我有代码(测试代码,我只是尝试从表中获取所有项目名称,我可以将它们保存到数组或变量中,并更改DBGrid显示 id 的值),但我不知道如何更改DBGrid值字段。

procedure TForm2.Button1Click(Sender: TObject);
var i,j:integer; mas:string;
begin
Button1.Enabled := false;
Button2.Enabled := true;
Button3.Enabled := true;

Form1.ADOQuery1.SQL.Text := 'SELECT * FROM items_specification';

Form1.ADOQuery1.Open;
j:= Form1.ADOQuery1.RecordCount;
Form1.ADOQuery1.Close;

i:=1;

repeat
Form1.ADOQuery1.SQL.Text := 'SELECT * FROM items_specification WHERE item_id = :ID';
Form1.ADOQuery1.Parameters.ParamByName('ID').Value := i;
Form1.ADOQuery1.Open;
mas:= Form1.ADOQuery1['item_name'];
Form1.ADOQuery1.Close;
inc(i);
ShowMessage(mas) ;
until (i = j+1);
Run Code Online (Sandbox Code Playgroud)

也许您对如何解决问题有任何建议,我将不胜感激。

在 MS Access 中,我已经查找以 …

database delphi dbgrid

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

如何生成安装程序应用程序delphi xe7

我刚刚完成了一个小的delphi xe7应用程序,它需要一些dll文件才能工作.我应该如何创建应用程序安装程序.exe以在其他PC中安装此类应用程序?

delphi delphi-xe7

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

将单元用于标准Windows应用程序和firemonkey移动应用程序

我正在将Delphi Xe5用于Windows和Firemonkey移动应用程序.

我在我的项目组中有两个不同项目的单元.(Windows应用程序和Firemonkey移动应用程序)

1.)如何确定Delphi Xe5的版本?或者,版本是什么?

2.)有没有办法确定Win 32应用程序之间.赢得64应用程序和Firemonkey移动应用程序

3.)在代码中,如何根据应用程序的类型告诉编译器使用哪个版本的Dialogs.那就是VCL.Dialogs(Windows App)与FMX.Dialogs(Firemonkey移动应用程序)

谢谢

delphi vcl firemonkey delphi-xe5

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

如何在不声明200个变量的情况下执行此操作?

我认为我的问题有一个解决方案,但我找不到,你能帮助我吗?

我想做这样的事情:

var
  a, b, c: string;
  d: integer;
begin
  a := StringGrid1.Cells[1,1];
  b := StringGrid1.Cells[2,1];
  c := StringGrid1.Cells[3,1];
  d := StrToInt(a) + StrToInt(b) + StrToInt(c);
  StringGrid1.Cells[4,1] := IntToStr(d);
end;
Run Code Online (Sandbox Code Playgroud)

但现在我需要声明200个字符串变量,就像在这个例子中一样.无论如何,这是一个"捷径"吗?

这是我试过的循环:

var
  x: integer;
begin
  for x := 1 to 200 do 
  begin 
    Form2.StringGrid1.Cells[3,209] := IntToStr(x);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi string variables pascal

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

如何在没有EAbort的情况下中止?

有没有办法在不引发EAbort异常的情况下中止方法的执行?

这是一个问题:

....

try
  i := strtoint(Edit1.Text);
  if not (i=10) then
  begin
    showmessage('Value for I must be 10 !');
    sysutils.abort;
  end;
except
  showmessage('Wrong Value for i !');
end;

showmessage('Execution continue ...');

...
Run Code Online (Sandbox Code Playgroud)

在这个示例中,如果i的值为5,程序执行将不会中止...它将显示消息"我必须为10的值!",然后消息"i的值错误!" (因为引发了EAbort异常)然后消息"Execution continue ...".我知道如何解决这种情况,但我需要没有EAbort异常的sysutils.abort的通用解决方案.

delphi exception

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

用php写一个borland数据库引擎

我需要从php编写一个borland数据库引擎(dbase).我知道这不是推荐的,可能是个坏主意,但我必须将我的数据链接到只能读取dbase文件的软件.

所以任何人都知道如何从头开始创建一个来自php的borland db?

php dbase

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

java中的主要方法错误

class PrintMsg
{
  public static  void main(String a[])
  {
    System.out.print("\n THE IS MAIN BLOCK");
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码编译成功但我无法在JVM中执行它.发生此错误:

在类PrintMsg.Main中找不到的主要方法,请将main方法定义为:public static void main(String [] args)

我需要更改什么来修复错误?

java compiler-errors

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

a = i ++; 'a`等于`i`?

在此代码段,做什么价值观ai 有分别,为什么?

int i = 1;
int a = i++;
Run Code Online (Sandbox Code Playgroud)

难道a == 1还是a == 2

c

-8
推荐指数
2
解决办法
757
查看次数