读书人

学习PASCAL初记(一)

发布时间: 2013-03-22 09:49:50 作者: rapoo

学习PASCAL小记(一)

最近学上了PASCAL,以前一直觉得应用程序没有什么用处了的了,特别是像DELPHI的界面那些东西。以前一直用的JAVA与JSP什么的,觉得网页很好,也很直观什么的,客户端多爽,java又有这么多的架构什么的,还是免费的。当公司要我们学习delphi开始,我在想这么一个问题,学习这个有用吗?这个东西都过了这么多年的了,过时了有用吗?

当我踏入去的第一步,我的想法改变了,挺喜欢那种感觉,一般的时候我总想挑战自己,去学习一些之前我没有学习过的东西。此次也不例外,开始了挑战自己的学习方法论。

第一个例子,记事本。这个还真没有给我带来多少挑战,以前学习过VB,那个思想还没有忘记。很快就过去了。新的发现为,delphi里面有很多控件,全都是封装好的,我很喜欢,不用去考虑他们的实现细节,一拉一拖完成了记事本。在打开与保存的那里的确遇到了问题。我让同学给我测试,自己开发的东西,无论怎样也没有发现会出现这种或那种的错误。我耐心去修改每个考虑不周的的问题,完善自己的程序。发觉我在对待这个问题上我成熟了很多。很久以前我不喜欢听到这样的说,可是现在我变得很喜欢听到这样的话,因为这样我会进步一大步的。

第二个例子,我做了一个八皇后问题的界面展示。

?做的过程中,让我很烦恼,不是来自八皇后的算法,是来自界面的绘画。Canvas,这个东西,我找了它很久,看了一本书,由于看得快,没有理解这个东西,它究竟是一个什么东西来的,以为是一个可可视控件类。在那个工具栏中找呀找呀,最后还是没有找到它。很着急也很苦恼,上天就是用Canvas来的惩罚我来了,从晚上8点弄到11点,就是为了找到它。后来,偶然发现,它是很多控件的属性,天呀!!!!很多组件都有这个属性,有了Canvas就可以用它来画图了。最后终于画出来了一个格子。对于canvas中,还有各种设置什么的,就用一个叫pen的东西的来设置,这段代码一辈子都记得它,让我多么的苦恼呀。

procedure TMainFrm.DrawTable;

var

? localStep,j,step:integer;

begin

? step := 50 ;

? MainFrm.PaintBox1.canvas.pen.width:=2;

? MainFrm.PaintBox1.canvas.pen.color:=clred;

? localStep := 20 ;

???? for j:=0 to 8 do

???? begin

?????? MainFrm.PaintBox1.canvas.moveto(20,localStep);

?????? MainFrm.PaintBox1.canvas.lineto(420,localStep);

?????? localStep := localStep + step ;

??? end;

??? localStep := 20 ;

??? for j:=0 to 8 do

???? begin

????????? MainFrm.PaintBox1.canvas.moveto(localStep,20);

????????? MainFrm.PaintBox1.canvas.lineto(localStep ,420);

????????? localStep := localStep + step ;

??? end;

end;

接下来的一步就是多线程了,一边查一边学,delphi的多线程就是麻烦,总是说我的内存有问题,嘻嘻,其实我没有用好,特意做了一个多线程的例子去研究了一下。

unit Main;

interface

uses

? Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

? Dialogs, StdCtrls, TSTTRD;

type

? TForm1 = class(TForm)

??? Edit1: TEdit;

??? Edit2: TEdit;

??? Button1: TButton;

??? Button2: TButton;

??? procedure Button2Click(Sender: TObject);

??? procedure Button1Click(Sender: TObject);

? private

??? { Private declarations }

? public

??? { Public declarations }

? end;

var

? Form1: TForm1;

implementation

{$R *.dfm}

var

?? newThread: TTstthread;

procedure TForm1.Button1Click(Sender: TObject);

begin

??????? newThread := TTstThread.Create(False);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

?? newThread.Resume ;

end;

end.

线程类:

unit TSTTRD;

interface

uses

? Classes;

type

? TTstThread = class(TThread)

? private

? ??protected

??? procedure Execute; override;

? end;

implementation

uses SysUtils, Main;

procedure TTstThread.Execute;

var

? i: integer;

begin

? for i := 0 to 2000000 do

? begin

??? Form1.Edit1.Text := IntToStr(i);

??? Form1.Edit2.Text := IntToStr(self.ReturnValue)? ;

??? self.Suspend ;

? end;

end;

end.

另外有一个不得不提一下,就是图片的加载与显示:

procedure? TMainFrm.DrawQueenPicture(ALocalX : Integer; ALocalY : Integer);

var

??? queenMap:tbitmap;

begin

??? queenMap:=tbitmap.Create;

??? queenMap.loadfromfile('d:\queen.bmp');

??? MainFrm.paintbox1.canvas.Draw(ALocalX, ALocalY, queenMap);

??? queenMap.Free ;

end;//procedure end

1 楼 kidneyball 5 小时前 LZ用delphi哪个版本? 2 楼 美丽的小岛 3 小时前 kidneyball 写道LZ用delphi哪个版本?
刚开始用过delphi0.7,不太好用。现在用2007.

读书人网 >编程

热点推荐