有人可以帮我加速我的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项.
我有以下功能
function calculate(s:string):integer;
begin
try
strtoint(s);
do_something;
except
result:=-1;
end;
end;
Run Code Online (Sandbox Code Playgroud)
使用这样的例外会有什么后果吗?
我知道这是一个古老的东西,在我发布之前我已经像每个网站一样搜索答案,但我找不到解决方案
我正在使用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?
你能告诉我怎么做吗?最好的祝福.
好吧,我一直在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
------结束德尔福的帮助------
有人可以告诉我,我脑子里的哪个气缸没有开火吗?
我正在尝试将文件复制到剪贴板.互联网上的所有例子都是一样的.我使用的是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) 问题
我有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 中,我已经查找以 …
我刚刚完成了一个小的delphi xe7应用程序,它需要一些dll文件才能工作.我应该如何创建应用程序安装程序.exe以在其他PC中安装此类应用程序?
我正在将Delphi Xe5用于Windows和Firemonkey移动应用程序.
我在我的项目组中有两个不同项目的单元.(Windows应用程序和Firemonkey移动应用程序)
1.)如何确定Delphi Xe5的版本?或者,版本是什么?
2.)有没有办法确定Win 32应用程序之间.赢得64应用程序和Firemonkey移动应用程序
3.)在代码中,如何根据应用程序的类型告诉编译器使用哪个版本的Dialogs.那就是VCL.Dialogs(Windows App)与FMX.Dialogs(Firemonkey移动应用程序)
谢谢
我认为我的问题有一个解决方案,但我找不到,你能帮助我吗?
我想做这样的事情:
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) 有没有办法在不引发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的通用解决方案.
我需要从php编写一个borland数据库引擎(dbase).我知道这不是推荐的,可能是个坏主意,但我必须将我的数据链接到只能读取dbase文件的软件.
所以任何人都知道如何从头开始创建一个来自php的borland db?
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)
我需要更改什么来修复错误?
在此代码段,做什么价值观a和i 有分别,为什么?
int i = 1;
int a = i++;
Run Code Online (Sandbox Code Playgroud)
难道a == 1还是a == 2?