标签: freepascal

Lazarus 中的 Var 声明

我在 lazaus (2.0.6) 中声明变量时遇到了奇怪的行为

如果我使用以下序列声明变量,程序会通过给出 SIGSEGV 错误来停止执行,如果我将初始值分配给 TabCellContent var 的第二个字段,则会弹出错误

TabReadActive: Boolean;
ShCol: Array[0..6] of Boolean;
TabCellContent: Array [0..6] of Array [1..50] of TCellContent;
Run Code Online (Sandbox Code Playgroud)

但是如果我将“TabReadActive”放在 Array 的声明下方,则程序正常运行而不会出错

ShCol: Array[0..6] of Boolean;
TabCellContent: Array [0..6] of Array [1..50] of TCellContent;
TabReadActive: Boolean;
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过同样的行为?这是什么原因?

variables freepascal declaration sequence lazarus

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

delphi中如何从列表框的特定行获取文本

我想从特定行获取文本。

前任。

列表框内容:

第 0 行 字符串 1

第 1 行 字符串 2

第 3 行 字符串 3

如何从每个示例的第 1 行获取文本?

我尝试这样做:

(listbox1.Items.Objects[1] as TText).Text

但会产生随机访问冲突......

还有别的办法吗?

delphi freepascal

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

如何将“对过程的引用”从 Delphi 翻译为 Lazarus?

免责声明:我要求“拉撒路”,因为我并不真正关心mode Delphimode ObjFPC......

我正在将一些代码从“Delphi 11”翻译到 Lazarus 并发现了这些:

TProc = reference to procedure(const AControl: TControl);
....
proc := MyProcedure;
Run Code Online (Sandbox Code Playgroud)

如果我是正确的,这似乎是对事件回调方法的一些托管引用。

我如何在 Lazarus 下做出等价的东西?

delphi freepascal lazarus

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

FreePascal中的月份名称

输入:月份名称(1月/ 2月/ .../12月)

产量:季节(冬/春/夏/秋)

冬季:12月至2月

春天:3月 - 5月

夏季:6月 - 8月

秋天:9月 - 11月

我试过了:

Program Months;

var
  Month:String;

begin
  writeln('Insert month name:');
  readln(Month);

  if Month = 'March' or Month = 'April' or Month = 'May' then

    begin
    writeln(Month,' is Spring month');
    end

    ...
    etc   
    ...

end.
Run Code Online (Sandbox Code Playgroud)

但是这个程序没有用.

pascal freepascal

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

为什么我的内联不能达到我的预期?

我对Pascal了解并且无法理解这个汇编函数出了什么问题:

{$ASMMODE intel}
function SomeType.doSomething : boolean; assembler;
var i : integer; // for testing
asm
   mov EAX, field
   mov i, EAX // line 42
   and EAX, 4
   mov i, EAX
    //...
end;
Run Code Online (Sandbox Code Playgroud)

课堂宣言:

type
    SomeType = class(TObject)
    private
        field : integer;
        function doSomething : boolean;
    // ...
    end;
Run Code Online (Sandbox Code Playgroud)

field(一个类的字段SomeType)为4调用此方法之前,所述IDE(拉扎勒斯)将向我报告i在管线42分配8(参照线以上编号).

是否有关于内联装配的东西,我错过了?

为什么字段的值没有EAX正确存储和/或加载?

更新:我想我可能会瞄准64位.

freepascal

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

将字符串更改为整数 - pascal

我不知道“xa”如何在 pascal 中转换为 10。我只是使用:

Val('xa',value,return);
Run Code Online (Sandbox Code Playgroud)

并且 value = 10,return = 0。我只是一个新手,有人可以解释一下吗?我知道这不会喜欢只是一个字符的 ASCII 原因。

我正在使用 Free Pascal :)

我在 Free Pascal 中进行了测试,当使用xa,0xa$xa. 所以,我认为它理解像“$”、“0”这样的特殊字符而不调用它。那正确吗?

delphi pascal freepascal turbo-pascal

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

浮点运算总和不动

嗯,好的坏的和丑的
为什么round(cargof)留在那里2

uses crt;

type 
    trail_type = (blue ,desert ,white);
    fruit_class = (none ,apple ,pineapple);
type
    ontherun = Record
    trail : trail_type;
    cargo : Integer;
    miles : Integer;
end;
Var 
    b : File of ontherun;
    rec : ontherun;
    rec_b : array[1..3] of ontherun;
    k , cargo , load , xload , miles , run : Integer;
    cargof  : Double;
    fruit : fruit_class;

begin
        cargof := 0;
        Repeat
            cargof := 0.04*cargof + 2.0;
            Writeln(round(cargof)); 
        Until cargof > …
Run Code Online (Sandbox Code Playgroud)

pascal freepascal

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

lazarus/pascal用当前日期写文件名

我需要编写一个文件名包含当前日期的文件..一切都在日期之外,它给出了一个类异常'run error(3)'

(importo.text是TEdit的文本..但我想这是无关紧要的)

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

...

var
  contributo:real;
  f:textfile;
...
  datee: string;

...

contributo:= (StrToInt(importo.text)/ 100)*4;

  datee:= DateToStr(Date);

  assignfile(f,'fattura minimi n.'+n.text+' '+datee+'.txt');
  rewrite(f);

  writeln(f,'Giovanna Migliore');
  ...

  closefile(f);
Run Code Online (Sandbox Code Playgroud)

delphi pascal freepascal lazarus

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

如何在Object Pascal中查找字符是否是字母数字或下划线在Delphi编译器和FPC中工作?

互联网上有类似或相同的问题,但答案对我不起作用.我们开发了多平台产品,它在Delphi的编译器和FPC下编译.首先,我用过:

Uses:
  System.Character;
Run Code Online (Sandbox Code Playgroud)

Character.TCharacter.IsLetterOrDigit(..)
Run Code Online (Sandbox Code Playgroud)

,但它不能在FPC下编译,所以根据其他一些消息来源,我用过:

Uses:
  Character;
Run Code Online (Sandbox Code Playgroud)

TCharacter.IsLetterOrDigit(..)
Run Code Online (Sandbox Code Playgroud)

相反,但仍然不能在FPC下编译.

有人能找到一种代码可以在Delphi编译器和FPC上工作的方法吗?我没有FPC设置与我的项目一起工作,所以我无法弄清楚,如何修复代码在FPC中工作(我只能通过构建服务器以复杂的方式测试它)并且可以'找到方法,怎么做.

我也想用正则表达式编写它,但是同事们说,这对他们来说太复杂了.

delphi compilation freepascal alphanumeric

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

帕斯卡的功能步骤

我有以下代码,结果是42,但是为什么呢?答案必须是13,因为7+6=13

program HelloWorld;

function F (a : integer) : integer;
begin
  if (a = 1) or (a = 2) then
    F := 2
  else
    F := F(a-1) + F(a-2);
end;

begin
  WriteLn(F(8));
end.
Run Code Online (Sandbox Code Playgroud)

delphi pascal freepascal

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

如果抛出特定异常,如何使我的 FreePascal 应用程序以特定代码退出?

我的程序有一个ESyntaxError类,我这样使用:

\n\n
raise ESyntaxError.Create(Message)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我将该ESyntaxError类定义如下:

\n\n
ESyntaxError = class(Exception)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我观察到,如果ESyntaxError.Create(Message)调用了该代码,我的程序\xe2\x80\x99s 退出代码将设置为1. 但在这种情况下我希望将其设置为65.

\n\n

我尝试这样做:

\n\n
ExitCode := 65;\nraise ESyntaxError.Create(Message);\n
Run Code Online (Sandbox Code Playgroud)\n\n

...但是我的应用程序仍然只是以 退出1,而不是65\xe2\x80\x94 我猜是因为内置Exception类总是重置ExitCode1?(Don\xe2\x80\x99t 确实知道 \xe2\x80\x99 是这种情况,并且在异常文档中没有看到任何明确说明这一点,但我从我在这里观察到的行为推断出这一点)。

\n\n

或者,如果我想让程序具有非1/非0退出状态,我是否应该以其他方式处理这个问题而不是基于它Exception

\n

pascal freepascal exception exit-code

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

我的pascal作业需要修复此代码

我被分配了要编写的程序。这是说明

问题解决与编程

  1. 保险公司对根据NMTRO进行的研究可以更好地为客户提供帮助的软件感兴趣。该软件应进行试运行,每天最多可接待30位客户。

您需要编写一个伪代码或绘制流程图,以接受客户的信息(名字,姓氏,性别,汽车型号,汽车类别,保险公司,TOC,是否已安装防盗设备,Premium和汽车价值)。根据电子表格部分任务B中给出的计算标准,为每个客户计算补偿金。

最后,您将要:计算完全综合保险的车辆数量b。找到最高的车辆成本c。计算安装防盗机制的所有者的比例d。提示用户输入客户名称,并搜索并显示客户信息,包括要支付的赔偿金。

  1. 设计并实现一个跟踪表,该表接受6个成员的数据(与电子表格相同的数据)。该表应跟踪汽车,TOC,保费,防盗安装和保险付款的价值。应计算所有客户的总保费

这是代码`

VAR
     First_Name, Last_Name, Model, Insurance_company, stop: array[1..30] of string;
     Compensation, V_O_C, P_O_A, A_O_C: array [1..30] of real;
     Gender: array [1..30] of char;
     T_O_C, Premium, X, Count, CountA, Highest, Category: array [1..30]of integer;
     Antitheft_installed: array [1..30] of boolean;

Begin
   Count:=0;
   CountA:=0;
   Highest:=0;
    FOR X = 1 to 30 DO
   Repeat
   Writeln ('Please enter First_Name');
   Readln (First_Name[X]);
   Writeln ('Please enter Last_Name');
   Read Last_ Name [X]
   Writeln ('Please enter Gender, M or F');
   Readln Gender[X]
   Until …
Run Code Online (Sandbox Code Playgroud)

pascal freepascal

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

如何使用while运算符从字符串中删除空格?帕斯卡尔

我有文本,我需要从文本的开头和文本的结尾删除空格.我只能用while do operator来做.我怎样才能做到这一点?这是程序代码

     program RandomTeksts;
     uses crt;
     var
     t:String;
     l, x, y:Integer;

    const tmin=1; tmax=30;
    label
    Start,
    end;
    begin
    Start:
    clrscr;
    writeln('write text (from ',tmin,' to ',tmax,' chars): ');
    readln(t);
    l:=length(t);

    if (l<tmin) or (l>tmax) then
    begin
    writeln('Text doesn't apply to rules!');
    goto end;
    end;
    clrscr;
    begin
    randomize;
    repeat
    x:=random(52+1);
    y:=random(80+1);
    textcolor(white);

    gotoxy(x,y);
    writeln(t);

    delay(700);
    clrscr;
    until keypressed;
    end;
    ord (readkey)<>27 then
    goto Start;
    end:
    end.
Run Code Online (Sandbox Code Playgroud)

pascal freepascal

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