标签: pascal

当值仅使用默认名称时,如何在Inno Setup中获取注册表值?

我正在尝试使用Inno Setup的Pascal脚本从Windows注册表(在本例中为Google Sketchup)获取应用程序的安装目录,以便我可以在那里安装插件.

注册表项没有名称,它在Regedit中只有"(默认)".

我试过这个:

RegQueryStringValue( HKLM, 'SOFTWARE\Google\Google Sketchup 6', '(Default)', pluginLoc );
Run Code Online (Sandbox Code Playgroud)

但它没有返回值.有什么建议?

windows registry pascal inno-setup

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

排序7个整数数组的最快方法是什么?

这是分析扑克几率的程序的一部分,特别是德州扑克.我有一个我很满意的程序,但它需要一些小的优化才能完美.

我使用这种类型(当然还有其他类型):

  type
    T7Cards = array[0..6] of integer;
Run Code Online (Sandbox Code Playgroud)

在决定如何对其进行排序时,此数组有两件事可能很重要:

  1. 每个项目都是0到51之间的值.没有其他值可以.
  2. 没有重复.决不.

有了这些信息,对这个数组进行排序的绝对最快的方法是什么?我使用Delphi,所以pascal代码将是最好的,但我可以读取C和伪,虽然有点慢:-)

目前我使用quicksort,但有趣的是,这几乎不比bubblesort快!可能因为项目数量很少.排序几乎占该方法总运行时间的50%.

编辑:

Mason Wheeler问为什么有必要进行优化.一个原因是该方法将被称为2118760次.

基本的扑克信息:所有玩家都获得两张牌(口袋),然后五张牌被发给牌桌(第一张牌被称为翻牌圈,第三张被称为翻牌圈,第二张牌是转牌圈,最后一张牌是河牌圈.每位玩家选择五张牌卡来弥补他们的手)

如果口袋里有两张牌,P1和P2,我将使用以下循环来生成所有可能的组合:

for C1 := 0 to 51-4 do
  if (C1<>P1) and (C1<>P2) then
     for C2 := C1+1 to 51-3 do
       if (C2<>P1) and (C2<>P2) then
         for C3 := C2+1 to 51-2 do
           if (C3<>P1) and (C3<>P2) then
             for C4 := C3+1 to 51-1 do
               if (C4<>P1) and (C4<>P2) then
                 for C5 := C4+1 to 51 do
                   if (C5<>P1) and (C5<>P2) then …
Run Code Online (Sandbox Code Playgroud)

delphi sorting algorithm pascal

10
推荐指数
3
解决办法
3090
查看次数

从动态数组字符串中移动()以插入/删除项目

使用System.Move()从字符串数组中插入/删除项目并不像从其他简单数据类型中插入/删除它那么容易.问题是...字符串是在Delphi中计算的引用.在引用计数数据类型上使用Move()需要更深入的内部编译器行为知识.

有人可以在这里解释为实现这一目标所需的步骤,或者更好地使用一些代码片段,或者指导我在互联网上提供一个很好的参考?

哦,请不要告诉我使用"懒惰但缓慢的方式",也就是说,对于循环,我知道.

delphi pascal

10
推荐指数
2
解决办法
3万
查看次数

数组从Delphi 5.0 Pascal中的0或1开始?

我想在Delphi 5.0中做一个ArrayList.所以我找到了这个代码的解决方案:

var arr: array of String;
Run Code Online (Sandbox Code Playgroud)

好的,但每次我添加的东西我都这样做:

var
    Form1: TForm1;
    var arr : array of String;

procedure TForm1.Button1Click(Sender: TObject);
var aux :string;
var len:integer;
begin
    len := Length(arr) + 1;
    SetLength(arr, len);
    arr[len-1] := 'abc' + IntToStr(len);
    Button1.Caption := arr[len-1]; // just to writeout something
end;
Run Code Online (Sandbox Code Playgroud)

我是一名C++程序员,我对Pascal一无所知.我总是听说Pascal索引从1开始,而不是0.在上面的过程中我做arr [len-1]因为0索引开始.

有没有比Pascal数组更好的方法?和C++一样std::vector吗?

arrays delphi pascal

10
推荐指数
3
解决办法
2万
查看次数

构建跨平台的Delphi应用程序

我下载了Lazarus,但也使用过Embarcadero Delphi IDE.我有一个关于构建跨平台Delphi应用程序的问题.

如何在win32环境下构建它们?我从Lazarus网站上阅读了wiki,它解释了如何做,但我仍然不明白.是否可以在win32环境下为Linux和MacOS构建和编译应用程序?如果有可能,有人可以逐步解释如何准确地做到这一点.

编辑: 现在是时候讨论新的XE2版本的Delphi IDE我认为:)

谢谢

delphi pascal cross-platform cross-compiling lazarus

10
推荐指数
2
解决办法
2636
查看次数

如何确定在Delphi程序中使用哪些库我没有源代码?

我有一个Windows .exe文件,但它的源代码丢失了.开发人员没有责任离开我们公司.我认为这是一个delphi/pascal程序.开发人员使用了很多库,但我不确定哪些库.有没有一个工具可以告诉我哪些库用于制作这个exe?

delphi pascal exe libraries

10
推荐指数
3
解决办法
3025
查看次数

Delphi通过引用或值/副本传递参数

背景1

var text:String;

text:='hello';

myFunc(text);
Run Code Online (Sandbox Code Playgroud)

上下文2

function myFunc(mytext:String);
var textcopy:String;
begin

    textcopy:=mytext;

end;
Run Code Online (Sandbox Code Playgroud)

myFunc从Context1调用Context2,局部变量mytext指向Context2之外的内存?或者在mytext范围内有自己的内存空间,并用相同的内容填充/复制text?我可能遗漏了一些非常基本的东西,因为我收到了一个access violation错误.

有没有办法明确指定一个函数是应该通过引用还是通过值接收参数,然后像C一样复制?我不确定我是怎么做的.

delphi pascal pointers pass-by-reference

10
推荐指数
3
解决办法
3万
查看次数

在Delphi中解析一行的最快方法是什么?

我有一个庞大的文件,我必须逐行解析.速度至关重要.

一行示例:

Token-1   Here-is-the-Next-Token      Last-Token-on-Line
      ^                        ^
   Current                 Position
   Position              after GetToken
Run Code Online (Sandbox Code Playgroud)

调用GetToken,返回"Here-is-the-Next-Token"并将CurrentPosition设置为令牌最后一个字符的位置,以便为下次调用GetToken做好准备.令牌由一个或多个空格分隔.

假设文件已经在内存中的StringList中.它很容易适合内存,比如200 MB.

我只担心解析的执行时间.什么代码将在Delphi(Pascal)中产生绝对最快的执行?

delphi parsing pascal token

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

Delphi中重复的setter逻辑

对于类的每个setter,我必须实现一些事件逻辑(OnChanging,OnChanged):

procedure TBlock.SetWeightIn(const Value: Double);
var OldValue: Double;
begin
  OldValue := FWeightIn;
  DoOnChanging(OldValue, Value);
  FWeightIn := Value;
  DoOnChanged(OldValue, Value);
end;

procedure TBlock.SetWeightOut(const Value: Double);
var OldValue: Double;
begin
  OldValue := FWeightOut;
  DoOnChanging(OldValue, Value);
  FWeightOut := Value;
  DoOnChanged(OldValue, Value);
end;
Run Code Online (Sandbox Code Playgroud)

你能否建议一种方法来实现这一点,而不必为每个setter重复所有这些行?

delphi pascal delphi-2006

9
推荐指数
2
解决办法
363
查看次数

如何在Pascal中打印制表符?

我试图在所有Internets中找出在Pascal中打印简单选项卡的特殊字符.我必须在CLI程序中格式化一个表,这将非常方便.

pascal special-characters

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