标签: freepascal

仅使用FPC的GUI

我想知道如何仅使用安装了Lazarus的FPC(Pascal)而不使用Delphi语言(Object Pascsl)来开发GUI应用程序(32位)。谢谢。

user-interface pascal freepascal lazarus fpc

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

Lazarus/FPC上的WM_COMMAND问题

我有MainMenu的表单,我想在用户从菜单中选择一个命令项时拦截.这适用于Delphi:

type
  TForm1 = class(TForm)
    ... // Memo and MainMenu created
  protected
    procedure WMCommand(var Info: TWMCommand); message WM_COMMAND;
  end;


procedure TForm1.WMCommand(var Info: TWMCommand);
begin
  if (Info.ItemID < 10) then
    Memo1.Lines.Add('WMCommand ' + IntToStr(Info.ItemID));
end;
Run Code Online (Sandbox Code Playgroud)

在MainMenu中我添加了一些项目,当我从菜单中选择这些项目时,我的Memo1充满了:

WMCommand 2
WMCommand 3
WMCommand 3
WMCommand 2
WMCommand 5
...
Run Code Online (Sandbox Code Playgroud)

我将此应用程序移植到FPC/Lazarus,但似乎没有调用WM_COMMAND处理程序!当我TForm1.WMCommand在Delphi中设置断点时,Delphi在主表单出现之前停止了很多次.拉扎鲁斯在这个断点上从未停止过.我认为拉撒路的WM_COMMAND已经打破了一些事情,但也许我不知道什么.任何的想法?

我在WinXP上使用Lazarus 0.9.28.2 beta和FPC 2.2.4.

编辑:

使用Winspector我检查了MainMenu生成WM_COMMAND:

WM_COMMAND
    Code: 0
    Control ID: 2
    Control HWND: 0x00000000
    Message Posted
    Time: 09:37:14.0968
Run Code Online (Sandbox Code Playgroud)

我认为在WM_COMMAND消息方法处理中Lazarus/FPC中存在错误并且我报告了它:http://bugs.freepascal.org/view.php?id = 15521

delphi message freepascal lazarus fpc

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

对于Delphi,是否有像Velocity或Freemarker这样的模板引擎?

对于Web应用程序,如果Delphi对象属性和方法可以与HTML代码"连接",将会很有帮助.

在HTML响应构建阶段和请求处理阶段,可以以多种方式使用它:

  • 访问服务器端对象属性值以在HTML代码中输出它
  • 将服务器端对象属性绑定到HTML表单输入字段,以便Web应用程序使用其当前值发送表单HTML,并在客户端提交表单时将该属性设置为输入的值
  • 将HTML表单按钮绑定到服务器端对象方法,该方法将在客户端提交表单时执行

我还没有找到一个原生的Delphi库,这样可以更容易地将这样的HTML添加到Delphi对象绑定中.

我的问题:

是否有用于脚本代码生成的模板引擎,如Apache VelocityFreemarker(参见下面的示例),我可以在Delphi应用程序中使用它?(不在IDE中 - 我不喜欢基于OTA的解决方案,或Delphi代码模板)

模板引擎将Delphi对象绑定到模板并替换脚本变量,并根据对象中的值执行迭代/条件.模板可以嵌套(调用其他模板).

典型的用例是动态生成HTML代码,但也适用于Delphi代码生成器.

速度示例:

<HTML>
<BODY>
Hello $customer.Name!
<table>
#foreach( $mud in $mudsOnSpecial )
   #if ( $customer.hasPurchased($mud) )
      <tr>
        <td>
          $flogger.getPromo( $mud )
        </td>
      </tr>
   #end
#end
</table>
Run Code Online (Sandbox Code Playgroud)

Freemarker示例:

<html>
<head>
  <title>Welcome!</title>
</head>
<body>
  <h1>Welcome ${user}!</h1>
  <p>Our latest product:
  <a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>  
Run Code Online (Sandbox Code Playgroud)

其他类似于我正在寻找的模板引擎是Visual Studio的T4代码生成Smarty.

html delphi template-engine web-applications freepascal

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

Delphi TFrame创建/销毁

如何创建(当我想要显示它)并在主TForm上销毁(当我想隐藏它时)帧?帧'align = alClient.

我试过这个:

表格:

unit main;

interface

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

type
  TFormMain = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    f1: TFrame1;
    f2: TFrame2;
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

procedure TFormMain.FormCreate(Sender: TObject);
begin
  f1 := TFrame1.Create(Self);
  f1.Parent := Self;
end;

end.
Run Code Online (Sandbox Code Playgroud)

第一帧:

unit uFrame1;

interface

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

type
  TFrame1 = class(TFrame) …
Run Code Online (Sandbox Code Playgroud)

delphi freepascal frame lazarus

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

FPC:RTTI记录

这是我第一次访问这个网站.通常,我在旧帖中找到回复没有问题,但我的实际问题没有成功.

我想知道如何使用RTTI函数在运行时知道Lazarus/FPC下记录的属性/成员?我知道如何为一个类(Tpersistent后代和已发布的属性)执行此操作,但不知道如何为FPC执行此操作.一些链接指示如何在Delphi(来自D2010)下进行,但我不知道如何在Lazarus下转置它.

在此先感谢您的帮助和帮助.Salim Larhrib.

凯文:正如我之前所说,这是我的第一个要求.但是我明白.你是对的.这是我的代码

procedure TMainForm.btRecordTHashListClick(Sender: TObject);
var
  pTData    : PTypeData;
  pTInfo    : PTypeInfo;
  TablePtr  : PatableRecord;
  Loop      : Integer;
begin
  // Set of Record pointers + HashList

  // Create Container
  if  not Assigned(FTableRecList) then FTableRecList := TFPHashList.Create;

  // Insert data
  new(TablePtr);
  TablePtr^.description := 'Dictionnaire des tables.';
  FTableRecList.add('atable', TablePtr );

  new(TablePtr);
  TablePtr^.description := 'Dictionnaire des fonctions.';
  FTableRecList.add('afunction', TablePtr );

  new(TablePtr);
  TablePtr^.description := 'Dictionnaire des listes d''option.';
  FTableRecList.add('alist', TablePtr );

  // Read records
  for Loop:=0 to FTableRecList.Count-1 do
  begin
    TablePtr …
Run Code Online (Sandbox Code Playgroud)

freepascal lazarus fpc

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

在FreePascal中相当于C ++ std :: vector,std :: deque和std :: map

什么是等价的std::vectorstd::dequestd::map在ObjectPascal(FreePascal的编译器)?

简单来说:

  • (向量)是一个自动调整大小的连续数组

  • (deque)是阵列的自动调整大小的混合阵列,可提供接近O(1)的随机访问,同时允许从任一端进行O(1)推入/弹出

  • (map,unordered_map)是一个关联数组

delphi containers freepascal

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

如何使用数组为值在Pascal中创建关联数组

我有这个文件:

Bulgaria = Bulgarian
Croatia = Croatian
Austria = Croatian
Czech Republic = Czech
Slovakia = Czech
Denmark = Danish
Germany = Danish
Belgium = Dutch
Netherlands = Dutch
Ireland = English
Malta = English
United Kingdom = English
Estonia = Estonian
Finland = Finnish
Belgium = French
France = French
Italy = French
Luxembourg = French
Austria = German
Belgium = German
Denmark = German
Germany = German
Italy = German
Luxembourg = German
Cyprus = Greek
Greece = …
Run Code Online (Sandbox Code Playgroud)

arrays pascal associative-array freepascal

5
推荐指数
2
解决办法
1355
查看次数

如何将整数整数值转换为3位点分隔字符串

我不敢相信我为此付出了很多努力!希望这是一件容易的事。使用Delphi或Freepascal:

Given the whole integer value "1230", or "1850", how do you format that as a floating point string of 3 digits where the decimal is in the 3rd position, and the trailing digit discarded.

Example

1230 means "v12.3" 1850 means "v18.5"

So I need to convert the first two digits to a string. Then insert a decimal place. Convert the third digit to a string after the decimal place. And discard the zero. I've looked at Format, FormatFloat, Format, …

delphi freepascal string-formatting

5
推荐指数
2
解决办法
182
查看次数

将字符串变量写入剪贴板

我马上就承认,至少可以说,我是帕斯卡尔缺乏经验的.所以,我能得到的任何帮助将不胜感激.:)

作为更大程序的一部分,我需要将一个字符串变量写入剪贴板.我在Lazarus(版本1.0.12)中创建了一个新项目,所以我可以尝试弄清楚如何在没有由额外的,不必要的代码引起的复杂性的情况下这样做,我在下面包含了这些:

program varToClipboard;

uses Clipbrd;

var
    textToCopy:string;

begin
    textToCopy := 'Test text from Pascal';

    Clipboard.AsText := textToCopy;
end.  
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,以及所需的LCLBase依赖项,我在运行编译的EXE时在CMD中收到以下错误:

An unhandled exception occurred at $000000000043D45E :
EAccessViolation : Access violation
  $000000000043D45E  CLIPBOARDREGISTERFORMAT,  line 98 of ./include/lclintf.inc
  $000000000043C35B  PREDEFINEDCLIPBOARDFORMAT,  line 185 of lclintf.pas
  $0000000000415B0C  TCLIPBOARD__SETASTEXT,  line 452 of ./include/clipbrd.inc
  $0000000000401802  main,  line 12 of varToClipboard.lpr
Run Code Online (Sandbox Code Playgroud)

根据文档,我似乎做得很对.尽管如此,我发现文档缺乏时间.

 

另外,我必须做什么才能运行已编译的EXE(只生成并将字符串写入剪贴板)而不会弹出控制台窗口?

clipboard pascal freepascal lazarus

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

为什么这个C到Pascal的转换崩溃?

我有这个C代码:

/*
  WARNING:  The order of this table must also match the order of a table
  located in AcquireResizeFilter() in "resize.c" otherwise the users filter
  will not match the actual filter that is setup.
*/
typedef enum
{
  UndefinedFilter,
  PointFilter,
  BoxFilter,
  TriangleFilter,
  HermiteFilter,
  HannFilter,
  HammingFilter,
  BlackmanFilter,
  GaussianFilter,
  QuadraticFilter,
  CubicFilter,
  CatromFilter,
  MitchellFilter,
  JincFilter,
  SincFilter,
  SincFastFilter,
  KaiserFilter,
  WelchFilter,
  ParzenFilter,
  BohmanFilter,
  BartlettFilter,
  LagrangeFilter,
  LanczosFilter,
  LanczosSharpFilter,
  Lanczos2Filter,
  Lanczos2SharpFilter,
  RobidouxFilter,
  RobidouxSharpFilter,
  CosineFilter,
  SplineFilter,
  LanczosRadiusFilter,
  CubicSplineFilter,
  SentinelFilter  /* a count of all the filters, not a …
Run Code Online (Sandbox Code Playgroud)

delphi pascal freepascal

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