我想知道如何仅使用安装了Lazarus的FPC(Pascal)而不使用Delphi语言(Object Pascsl)来开发GUI应用程序(32位)。谢谢。
我有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
对于Web应用程序,如果Delphi对象属性和方法可以与HTML代码"连接",将会很有帮助.
在HTML响应构建阶段和请求处理阶段,可以以多种方式使用它:
我还没有找到一个原生的Delphi库,这样可以更容易地将这样的HTML添加到Delphi对象绑定中.
我的问题:
是否有用于脚本代码生成的模板引擎,如Apache Velocity或Freemarker(参见下面的示例),我可以在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.
如何创建(当我想要显示它)并在主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) 这是我第一次访问这个网站.通常,我在旧帖中找到回复没有问题,但我的实际问题没有成功.
我想知道如何使用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) 什么是等价的std::vector,std::deque并std::map在ObjectPascal(FreePascal的编译器)?
简单来说:
(向量)是一个自动调整大小的连续数组
(deque)是阵列的自动调整大小的混合阵列,可提供接近O(1)的随机访问,同时允许从任一端进行O(1)推入/弹出
(map,unordered_map)是一个关联数组
我有这个文件:
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) 我不敢相信我为此付出了很多努力!希望这是一件容易的事。使用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, …
我马上就承认,至少可以说,我是帕斯卡尔缺乏经验的.所以,我能得到的任何帮助将不胜感激.:)
作为更大程序的一部分,我需要将一个字符串变量写入剪贴板.我在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(只生成并将字符串写入剪贴板)而不会弹出控制台窗口?
我有这个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)