在MAC安装Lazarus 起点 - 我们的第一个Lazarus程序!
安装Lazarus
首先到Lazarus官网,找到合适的版本下载页面,比如Mac的版本:
https://sourceforge.net/projects/lazarus/files/Lazarus%20macOS%20x86-64/Lazarus%203.4/
将三个文件都下载到本地,需要安装这三个文件:
| fpc-src-3.2.2-20210709-macosx.dmg | 2024-05-26 | 50.5 MB | 70 |
|---|---|---|---|
| fpc-3.2.2.intelarm64-macosx.dmg | 2024-05-26 | 274.2 MB | 75 |
| Lazarus-3.4-macosx-x86_64.pkg | 2024-05-26 | 278.1 MB | 155 |
下载后双击安装,如果因为安全原因不允许安装,那么按住shift之后双击进行安装。
启动后,就进入了Lazarus的IDE主界面。
下面开始我们的第一个Lazarus程序!
Lazarus Tutorial/zh CN - Lazarus wiki
起点 - 你的第一个Lazarus程序!
启动后的界面
启动后,桌面上将出现很多窗口:顶部是主菜单,左面是对象观察器,Lazarus源代码编辑器将占据大部分的桌面,而一个预置的Form1窗体将覆盖在源代码编辑器的上面。
如果是中文系统的话,那么默认将是中文界面。如果使用GTK库的话,注意使用GTK2,因为GTK1对中文的支持不好。
创建按钮
在顶部的主菜单上,菜单分隔线的下面有一排标签。如果Standard标签还未被选中,单击选中它。然后找到TButton图标(一个有OK字样的矩形),单击Tbutton图标,然后在Form1窗体上找个宽敞的地方单击一下。一个有着"Button1"标题的矩形按钮就出现了。重复一次,你将获得"Button2"按钮,建议你把它放到Button1的右面。
现在单击Button1选中它,左侧的对象观察器上将出现Button1对象的所有属性。找到名为Caption的属性(你可以在"收藏夹"标签下更方便地找到它),现在这个属性的值是"Button1"。单击显示着"Button1"的方格,把里面"Button1"文本改成"Press",当你按下Enter(或者单击别的方格)后,你会看见Form1窗体上的Button1按钮上的文本变成了"Press"。然后找到对象观察器上的"事件"标签,你会看见可以给Button1关联很多事件(Event),包括OnClick,OnEnter,OnExit等等。选择OnClick右边的空白方格,将出现一个显示"..."(三个点,也就是省略号)的小方格,在这个方格上单击,你将自动跳转到源代码编辑器,同时你的光标会处于一段过程(procedure)代码中:在其中输入:
Button1.caption := 'Press again';
按下F12选中Form1窗体。(发现MAC下按F12无法选中From1窗体,可以在窗口里选择From1窗体)
然后我们来编辑Button2的属性,将Caption修改为"Exit",然后选择OnClick事件,单击那个显示"..."的小方格,你又回到了源代码编辑器,光标位于另一段过程代码的中间:
procedure TForm1.Button2Click(Sender: TObject);begin{输入:}Close;end;
由于中间出现问题,重新新建项目
重新新建项目

按前面的步骤创建按钮
运行程序
现在可以尝试编译这个程序了。最简单的方法是在顶部主菜单中选择"运行",在弹出的子菜单中选择"运行"(你也可以使用快捷键F9,在MAC下是Commond R)。如果一切顺利,你的程序将被编译执行。
所有的编译信息都会出现在底部的"消息"窗口中。最终,一个没有刻度标记(编辑状态下才会出现)的Form1窗口将出现在屏幕上。这是你的应用程序的主窗口,它正等着你去按按钮(以及其他操作)。
尝试下点击Press按钮,你会发现按钮的标签变成了"Press again"。之后你再怎么按,它依然显示"Press again"。
现在点击Exit按钮,窗口将关闭,程序也就终止了(在MAC下按了两次才关闭。。。)。编辑状态下有着丑陋刻度标志的Form1又回到了屏幕上,准备接受更多的修改完善。
现在你应该保存你的工作了(你应该经常这么做!),选择顶部主菜单上的" 工程 > 保存工程 "来保存工程文件。
修改项目
在Form1窗体上选择Press按钮("Button1")。
在"事件"标签中选择OnClick,点击出现的"..."方格,来回到源代码编辑器。
procedure TForm1.Button1Click(Sender: TObject);
{这段代码使用了Button1的Tag属性,使Tag属性在0和1之间转换}beginif Button1.tag =0 thenbeginButton1.caption := 'Press again';Button1.tag := 1end elsebeginButton1.caption := 'Press';Button1.tag := 0endend;
这样按钮1可以来回在Press again和Press之间切换。
调试项目
第三步 常用调试方法
有时候需要一些直接有效的打印出调试内容,比如像VB 下的 Debug.print 可直接在立即窗口中打印出调试内容
可以使用
WriteLn('XXXX ', XXX);
Write('XXXXXX');
但是在网上发现不少新人使用会弹出: project project1 raised exception class 'EInOutError' with message:file not open
异常通知
只需要在文件头部加入预编译指令(Mac下不需要加这句)
{$APPTYPE CONSOLE}
这样调试时会弹出一个类dos对话框,输出调试的内容
(这里没有测试成功,没有找到调试输出的内容)
常用技巧
lazaurs的编辑器蛮强大的,支持代码补全,自动完成,模板编辑,多行缩进注释,选定代码后批量更改里面的单词!
1.代码补全
按下键盘的Ctrl+W键!输入变量后按下这个键就OK啦~
MAC下不行。
2.自动完成
自动完成的快捷键大多数都冲突了,解决方法是打开 工具(T)->选项...->编辑器->键盘映射->CodeTools命令->标识符自动完成 上右键 编辑 ,然后根据实际情况修改吧,我的是再勾选Alt,也就是说,我的热键是Ctrl+Alt+Space!
MAC下是在Lazarus-选项-编辑器-键盘映射-Code Tools-标识符自动完成 上面编辑,默认是Ctrl+Space
3.模板编辑
这个也蛮简单,按下键盘的Ctrl+J,然后输入class,回车!是不是很酷!
Mac下是“代码模版”?
4.多行缩进注释
缩进的:向左 -> Ctrl+U
向右 -> Ctrl+I(选中多行代码更爽)
多行注释:Ctrl+/
5.选定代码后批量更改里面的单词
先选中几行代码(需要修改的代码段),然后点击编辑器左边显示行号左边的那支笔。
这个时候你可以输入b,变量a就全部改为b,还可以按下tab跳到下一个单词。
6.编辑器的高亮
<?xml version="1.0"?> <CONFIG><EditorOptions Version="9"><Display DoNotWarnForFont="Ubuntu Mono" EditorFont="Ubuntu Mono" EditorFontSize="13"><MarkupCurrentWord NoKeyword="False"/></Display><KeyMapping><default Count="1"><Version Value="6"/><Item1 Name="Identifier completion"><KeyA Default="False" Key1="32" Shift1="5"/></Item1></default></KeyMapping><CodeTools CodeTemplateFileName="/home/lht/.lazarus/lazarus.dci" CompletionLongLineHintTypeCompletionLongLineHintType="sclpExtendRightOnly" AutoDelayInMSec="104"/><Mouse><Default Version="1"/></Mouse><Color Version="9"><LangObjectPascal Version="9"><ColorScheme Value="Twilight"/><SchemeTwilight><Space Background="1973790" FrameColor="5000268" FrameStyle="slsDotted" FrameEdges="sfeBottom"/><Number Foreground="7434751"/><String Foreground="7337839"/><Symbol Foreground="clYellow"/><Comment Foreground="clSkyBlue" Style="fsItalic"/><Assembler Foreground="11715098"/><Directive Foreground="22015"/><Case_label Foreground="16541892"/><IDE_Directive Foreground="1478752"/><Reserved_word Foreground="1023473"/></SchemeTwilight></LangObjectPascal><Globals Version="9"><SchemeTwilight><ahaDefault Background="1973790"/></SchemeTwilight></Globals><LangPython Version="9"><SchemeTwilight><Float Foreground="8345087"/><Octal Foreground="16755455"/><Number Foreground="8345087"/><String Foreground="8388522"/><Symbol Foreground="clYellow"/><Comment Foreground="clSkyBlue"/><Hexadecimal Foreground="8345087"/><SyntaxError Foreground="16755285"/><Documentation Foreground="16755370"/><Reserved_word Foreground="43775"/><Non_reserved_keyword Foreground="8366847"/></SchemeTwilight></LangPython></Color><Misc PasExtendedKeywordsMode="True"/><General><Editor TabIndent="True" TabWidth="2"/></General><DividerDraw><LangObjectPascal><TypeSect><TopColor Value="9157119"/></TypeSect><TypeGVar><TopColor Value="9157119"/></TypeGVar><TypeGStruct><TopColor Value="9157119"/></TypeGStruct><TypeProc><TopColor Value="9157119"/></TypeProc><TypeLStruct><MaxDepth Value="1"/><TopColor Value="9157119"/></TypeLStruct></LangObjectPascal></DividerDraw></EditorOptions> </CONFIG>
总结
通过本次实践,对Laraus有了初步了解,可以做一个带按钮的窗体,并在按钮触发代码。
现在存在的问题就是跟踪信息还看不到。另外MAC下窗体布局有点问题。
调试
放置按钮的时候发现按钮位置变动
按钮和鼠标配置不匹配,不明白什么原因,而且后面发现点中按钮2还是现实按钮1的属性,并且无法进入按钮2的事件。总之全乱了。
可以在对象查看器选择按钮1或2。
在按钮Caption里面写的时候报错
每写一个字母,都会弹出一个报错对话框
结合前面那些错误,关闭项目,重新新建项目
在Mac下点击Exit按钮,按了两次才关闭程序
不知道什么原因。好像每个按钮都需要按两次。。。。是不是设定的双击? 大约就是双击,在Mac下。
破案了,是鼠标的问题,用MAC的触摸板就没这个问题了。
小技巧:Laraus里面用大括号来注释
除了用双斜线注释外,还可以用大括号来注释,大括号里可以放多行。
调试时报错expected but "identifier WRITELN" found
编译项目,目标:/Users/skywalk/Documents/project1: 退出代码1,错误: 1
unit1.pas(57,2) Error: Syntax error, ";" expected but "identifier WRITELN" found
前面一句话需要‘;’加上,问题解决。
Free Pascal里面有些语句后面带分号,有些不带,不太明白。。。。
laraus 调试write没有输出怎么办?
暂时没解决。
相关文章:
在MAC安装Lazarus 起点 - 我们的第一个Lazarus程序!
安装Lazarus 首先到Lazarus官网,找到合适的版本下载页面,比如Mac的版本: https://sourceforge.net/projects/lazarus/files/Lazarus%20macOS%20x86-64/Lazarus%203.4/ 将三个文件都下载到本地,需要安装这三个文件: …...
【每日刷题】Day96
【每日刷题】Day96 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. LCP 44. 开幕式焰火 - 力扣(LeetCode) 2. 1022. 从根到叶的二进制数之和 - …...
EGO-Swarm 仿真环境搭建
EGO-Swarm仿真环境搭建 参考教程: https://github.com/ZJU-FAST-Lab/ego-planner-swarm EGO-Swarm是一种分散的异步系统解决方案,用于仅使用机载资源在未知的障碍物丰富的场景中进行多机器人自主导航。 1. 查看系统环境 要运行本仿真程序,…...
【EI会议征稿通知】第九届计算机技术与机械电气工程国际学术论坛(ISCME 2024)
会议官网:www.is-cme.com 一轮截稿时间:2024年8月16日(早投稿,早录用) 大会时间:2024年11月8-10日 大会地点:中国 南京 接受/拒稿通知:投稿后1-2周 收录检索:EI Compend…...
【starRocks-docker 部署问题汇总】
Starrocks系列文章目录 例如:starrocks 常见问题汇总 文章目录 Starrocks系列文章目录前言一、Starrocks-be运行一段时间后,容器无法restart?二、等待后续跟新 前言 starrocks基于docker-compose部署的3节点分布式(3FE,3BE),遇到的问题也都…...
threejs中,如何检测一个模型周边一定范围内的其它模型
在Three.js中,要检测一个模型(我们可以称之为“主体模型”)周边一定范围内的其他物体,你可以通过以下步骤来实现: 1、定义检测范围: 首先,确定你需要检测的范围,这通常是一个以主体…...
UDP端口可达性检测(端口扫描)工具开发
UDP端口可达性检测(端口扫描)工具开发 1、应用场景分析 主机X与主机Y部署在AB双网环境下,两个主机间通过UDP协议进行数据交互。应用程序发送数据时,优先使用A网发送数据,如果A网异常则通过B网发送数据。两个主机应用间没有设置心跳帧 &…...
第三届计算、通信、感知与量子技术国际会议(CCPQT 2024)会议通知
会议信息 大会官网:http://www.ccpqt.org/ 官方邮箱:ccpqt_paper126.com 会议地点:中国珠海 会议时间:2024年10月25日-10月27日 主讲嘉宾 Prof. Trung Q. Duong IEEE Fellow and AAIA Fellow Memorial University of Newfoundl…...
Qt文件读写
Qt中文件读写类简述 包含头文件#include <QFile> 读写模式如下 枚举 文件读写步骤 1 先使用string 类型来接受打开文件的返回值 QFileDialog::getOpenFileName(this,"文件","./"); //打开一个文件 2 构建文件对象 Qfile ff (qstring)接受打…...
发现了一套超厉害的英语资料,绝对YYDS
昨某节目主持人与我闲聊英语学习的事情。 她工作数年,希望提升英文资讯的阅读能力。她主持的是中文节目,但节目对个人的知识广度和深度要求颇高。 现在的知识又太泛太杂,你需要了解国外最新资讯,多获得一手资料,面对节…...
C# new关键字作用
在C#中,当子类定义了与父类同名的字段或者方法时,可以使用new关键字进行隐藏。使用new和不使用new关键字的区别主要在于如何处理字段的隐藏和可访问性。 讲人话就是,假设父类的字段或方法,子类是可以直接访问的(publi…...
Python代码之特征工程基础
1. 什么是特征工程 特征工程是指从原始数据中提取、转换和创建适合于模型训练的数据特征的过程。它是机器学习和深度学习中非常重要的一步,因为好的特征工程可以显著提高模型的性能。特征工程涉及从数据中提取有意义的信息,并将其转换为模型可以理解和使…...
低代码平台:效率利器还是质量妥协?
目录 低代码平台:效率利器还是质量妥协? 一、引言 二、低代码平台的定义和背景 1、什么是低代码平台? 2、低代码平台的兴起 三、低代码开发的机遇 1、提高开发效率 2、降低开发成本 3、赋能业务人员 四、低代码开发的挑战 1、质量…...
大数据-Big Data
1. 简介 1.1. 主要特点 大数据(Big Data)是指规模巨大、复杂多变的数据集合,这些数据集来源于多个不同的源,包括社交媒体、移动设备、物联网、传感器等。大数据的主要特点如下: 数据量大(Volume):大数据的起始计量单位是PB(1024TB)、EB(1024PB,约100万TB)或ZB(…...
Redis的持久化的策略
Redis的持久化的策略 官方文档说明 AOF持久化策略RDB持久化的策略 AOF持久化策略 AOF持久性记录服务器接收到的每个写操作,然后,可以在服务器启动时再次重播这些操作,重建原始数据集,使用与Redis协议本身相同的格式记录命令。…...
【八】Zookeeper3.7.1集成Hadoop3.3.4集群安装
文章目录 1.基本原理2.下载并解压ZooKeeper3.配置环境变量4.配置ZooKeeper5.创建数据目录并初始化myid6.启动ZooKeeper7.配置ZooKeeper集成到Hadoop8.重启Hadoop9.ZooKeeper状态检查 1.基本原理 ZooKeeper 是一个分布式协调服务,用于分布式系统中管理配置信息、命名…...
【C/C++笔记】:易错难点3 (二叉树)
选择题 🌈eg1 一棵有15个节点的完全二叉树和一棵同样有15个节点的普通二叉树,叶子节点的个数最多会差多少个()? 正确答案: C A. 3 B. 5 C. 7 D. 9 解析:普通二叉树的叶子节…...
一篇文章解决Webpack
一:什么是webpack webpack是一个用于现代JavaScript应用程序的静态模块打包工具。本质是一个软件包, 静态模块包括以下:html、css、js、图片等固定内容的文件 二:webpack工作原理 当 webpack 处理应用程序时,它会在内…...
速盾:cdn如何解析php文件中的图片?
CDN(Content Delivery Network)是一种通过分布在全球各地的服务器来加速网络内容传输的技术。CDN通过将内容缓存在离用户最近的服务器上,提供更快的访问速度和更好的用户体验。在解析PHP文件中的图片时,CDN可以起到以下几个方面的…...
如何快速实现MODBUS TCP转Profinet——泗博网关EPN-330
泗博网关EPN-330可作为PROFINET从站,支持与西门子S7-200 SMART/300/400/1200/1500全系列PLC以及具有PROFINET主站的系统无缝对接,而Modbus TCP端,可以与Modbus TCP从站设备、主站PLC、DCS系统以及组态软件等进行数据交互。 通过EPN-330&…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
