|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
专业性的服务。有的ASP商提供垂直型的应用服务,针对某一特定行业提供应用服务。
画直线时,用户只要在松开鼠标才干瞥见直线,对直线的变更不克不及举行及时观察。这是由于鼠标挪动时程序没有举行某种应。Delphi界说了OnMouseMove事务来呼应鼠标挪动。以下代码可以使用户随时观察直线的变更:
procedureTForm1.FormMouseMove(Sender:Tobject)
begin
Drowto(X,Y);
Moveto(origin);
end.
origin是肇端点。
5.2.3画图功效的完成
画图软件常依据用户的请求改动画图工具。Graphex.dpr例程中,当用户按下某个按钮时,可选择画图工具中的画笔或画刷,在程序范例申明部分界说了五种画图工具。
type
TDrawingTool=(dtLine,dtRectangle,dtEllips,dtRoundRect,dtPolygon);
中选中某种按钮,则选中了响应的画图工具,如:
procedureTForm1.LineButtonClick(Sender:TObject);
begin
DrawingTool:=dtLine;
end;
procedureTForm1.RectangleButtonClick(Sender:TObject);
begin
DrawingTool:=dtRectangle;
end;
procedureTForm1.EllipseButtonClick(Sender:TObject);
begin
DrawingTool:=dtEllipse;
end;
procedureTForm1.RoundRectButtonClick(Sender:TObject);
begin
DrawingTool:=dtRoundRect;
end;
procedureTForm1.PolygonButtonClick(Sender:TObject);
begin
DrawingTool:=dtPolygon;
end;
DrawShape历程界说了每种画图工具的举措:
procedureTForm1.DrawShape(TopLeft,BottomRight:TPoint;AMode:TPenMode);
begin
withImage.Canvasdo
begin
Pen.Mode:=AMode;
caseDrawingToolof
dtLine:begin
MoveTo(TopLeft.X,TopLeft.Y);
LineTo(BottomRight.X,BottomRight.Y);
end;
dtRectangle:Rectangle(TopLeft.X,TopLeft.Y,BottomRight.X,BottomRight.Y);
dtEllipse:Ellipse(TopLeft.X,TopLeft.Y,BottomRight.X,BottomRight.Y);
dtRoundRect:RoundRect(TopLeft.X,TopLeft.Y,BottomRight.X,BottomRight.Y,
(TopLeft.X-BottomRight.X)div2,(TopLeft.Y-BottomRight.Y)div2);
dtPolygon:Polygon([Point(0,0),TopLeft,BottomRight]);end;
end;
end;
程序刚运转时,只要一个工具栏。当用户单击画笔和画刷时,则呈现响应的工具栏。其代码以下:
procedureTForm1.PenButtonClick(Sender:TObject);
begin
PenBar.Visible:=PenButton.Down;
end;
procedureTForm1.BrushButtonClick(Sender:TObject);
begin
BrushBar.Visible:=BrushButton.Down;
end;
在计划画图程序时,还要办理一些成绩。如为了在鼠标挪动时能观察图形的变更,我们界说了OnMouseMove事务。但会呈现如许的征象,当鼠标进进画图区时,用户未按下鼠标键,画布上却呈现绘制的图形,这是我们不但愿看到的。其缘故原由是没有对鼠标按钮是不是按下举行判别。因而在窗体工具中界说了drawing的域,当鼠标按钮按下时,drawing设置成真值。只要drawing为真,鼠标挪动才实行画图功效;当鼠标键松开时,drawing设置成假,鼠标挪动将不实行画图举措。
别的一个成绩是,我们但愿失掉的是鼠标按钮按下和松开这两点所构成的图形,但OnMouseMove却把鼠标轨迹上各点与肇端点所构成的一切图形画在屏幕上,这一样是我们不但愿看到的,为懂得决这些成绩,程序界说了鼠标的三个事务:
procedureTForm1.FormMouseDown(Sender:TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:Integer);
begin
Drawing:=True;
Image.Canvas.MoveTo(X,Y);
Origin:=Point(X,Y);
MovePt:=Origin;
OriginPanel.Caption:=Format(Origin:(%d,%d),[X,Y]);
end;
procedureTForm1.FormMouseUp(Sender:TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:Integer);
begin
ifDrawingthen
DrawShape(Origin,Point(X,Y),pmCopy);
Drawing:=False;
end;
procedureTForm1.FormMouseMove(Sender:TObject;Shift:TShiftState;X,
Y:Integer);
begin
ifDrawingthen
begin
DrawShape(Origin,MovePt,pmNotXor);
MovePt:=Point(X,Y);
DrawShape(Origin,MovePt,pmNotXor);
end;
MovePt用来纪录鼠标以后地位。当下次鼠标挪动时,就可以在前次鼠标绘制的图形上画一个外形、巨细一样的图形,并把画笔色彩设置成PmNotXor,使前次绘制的图形色彩酿成了屏幕色彩,从而到达“橡皮擦”的效果。
将画笔、画刷的Style属性设置成用户但愿的值,可完成对画笔和画刷作风的选择。
procedureTForm1.SetBrushStyle(Sender:TObject);
begin
withImage.Canvas.Brushdo
begin
ifSender=SolidBrushthenStyle:=bsSolid
elseifSender=ClearBrushthenStyle:=bsClear
elseifSender=HorizontalBrushthenStyle:=bsHorizontal
elseifSender=VerticalBrushthenStyle:=bsVertical
elseifSender=FDiagonalBrushthenStyle:=bsFDiagonal
elseifSender=BDiagonalBrushthenStyle:=bsBDiagonal
elseifSender=CrossBrushthenStyle:=bsCross
elseifSender=DiagCrossBrushthenStyle:=bsDiagCross;
end;
procedureTForm1.SetPenStyle(Sender:TObject);
begin
withImage.Canvas.Pendo
begin
ifSender=SolidPenthenStyle:=psSolid
elseifSender=DashPenthenStyle:=psDash
elseifSender=DotPenthenStyle:=psDot
elseifSender=DashDotPenthenStyle:=psDashDot
elseifSender=DashDotDotPenthenStyle:=psDashDotDot
elseifSender=ClearPenthenStyle:=psClear;
end;
end;
5.3图象工具概述
5.3.1TGraphic工具
TGraphic工具是TBitmap,TIcon,Tmetafile工具的基类。假如晓得图象的详细范例(如位图,图标元文件),则应将图象储存在响应范例的工具中(如TBitmap,TIcon,Tmetafile),不然应当利用可储存任何图象范例的TPicture工具。
5.3.2TPicture工具
TPicture工具能够保留位图、图标或元文件。Graphic属性中包含图象的范例;图象的高度和宽度分离界说在Height,Width属性中;挪用LoadFromFile办法,能够从文件中装载一幅图象:
procedureTForm1.FormCreate(Sender:TObject);
begin
BitBtn1.Glyph.LoadFromFile(TARTAN.BMP);
end;
要保留一个位图,则要用SaveToFile办法;要把图象复制到剪切板,能够挪用TClipboard工具的Assign办法。
5.3.3TImage部件
TImage部件用以在窗体中显现图象,它的Picture属性保留着要显现的图象,这是一个TPicture工具。AutoSize,Stretch属性是用来调治部件与图象的巨细的。当AutoSize为真值时,TImage部件将依据它所包括的图象的巨细来调剂本身的巨细;当AutoSize为假值时,不管图象有多年夜,部件将坚持计划时的巨细。假如部件比图象小,那末只要一部分图象是可见的。当Stretch为真值时,位图象将依据部件的巨细调剂本身的巨细,当部件巨细改动时,元文件也做响应变更。Stretch属性对图标没有感化。
5.3.4TBitmapObject(位图工具)
位图工具包括一个位图图象,有HBITMAP,HPALETE句柄,可主动办理调色板。位图工具也有画布属性。位图的Palette属性用来把持位图的色彩映照,它包含256种可显现的色彩。假如使用程序用远景色绘制位图,Palette属性的色彩将被到场Windows体系调色板,别的色彩被映照到体系调色板已存在的色彩。假如使用程序用本人的色彩绘制位图,而别的程序已占据体系调色板,位图的色彩将被映照到体系调色板中。
假如Monochrome属性设置成假,位图将显现成黑色,反之显现成口角色。
挪用Draw和StretchDraw办法可在画布上绘制位图。
5.4图象工具的使用
本章例程中,单击(文件|扫瞄)菜单项,将弹出一个图象扫瞄窗体。假如用户在窗体当选择文件列表框的图形文件,窗体右上角的图象部件大将呈现此文件所代表的图象;若选择“镌刻效果”按钮中反省框,窗体中的减速按钮和位图按钮大将呈现位图。
以下代码是将图象文件装载至图象部件上:
procedureTImageForm.FileListBox1Click(Sender:TObject);
var
FileExt:string[4];
begin
FileExt:=UpperCase(ExtractFileExt(FileListBox1.Filename));
if(FileExt=.BMP)or(FileExt=.ICO)or(FileExt=.WMF)then
begin
Image1.Picture.LoadFromFile(FileListBox1.Filename);
Label1.Caption:=ExtractFilename(FileListBox1.Filename);
if(FileExt=.BMP)then
begin
Label1.Caption:=Label1.Caption+
Format((%dx%d),[Image1.Picture.Height,Image1.Picture.Width]);
ViewForm.Image1.Picture.Bitmap:=Image1.Picture.Bitmap;
ViewAsGlyph(FileExt);
end;
ifFileExt=.ICOthenIcon:=Image1.Picture.Icon;
ifFileExt=.WMFthen
ViewForm.Image1.Picture.Metafile:=Image1.Picture.Metafile;
end;
end;
这个历程起首判别文件范例,假如是图象文件,则将图象装载至图象部件上,并在标签上列出文件称号。假如是位图文件,还将显现其巨细。
在减速按钮和位图按钮中显现位图的代码以下:
procedureTImageForm.CheckBox1Click(Sender:TObject);
begin
ViewAsGlyph(UpperCase(ExtractFileExt(FileListBox1.Filename)));
end;
procedureTImageForm.ViewAsGlyph(constFileExt:string);
begin
ifCheckBox1.Checkedand(FileExt=.BMP)then
begin
SpeedButton1.Glyph:=Image1.Picture.Bitmap;
SpeedButton2.Glyph:=Image1.Picture.Bitmap;
SpinEdit1.Value:=SpeedButton1.NumGlyphs;
BitBtn1.Glyph:=Image1.Picture.Bitmap;
BitBtn2.Glyph:=Image1.Picture.Bitmap;
end;
end;
窗体中有一个反省框用来查验图象部件的Strecth属性的效果。当此反省框被选中时,Stretch设成真值,图象将依据部件巨细调剂本身巨细。代码以下:
procedureTImageForm.StretchCheckClick(Sender:TObject);
begin
Image1.Stretch:=StretchCheck.Checked;
end;
在这个窗体中,用户能够在屏幕和打印纸上调剂图象部件的巨细、地位。调剂图象的代码以下:
procedureTViewForm.SpinEdit1Change(Sender:TObject);
begin
IMage1.Height:=105+SpinEdit1.Value*5;
IMage1.Width:=105+SpinEdit1.Value*5;
end;
procedureTViewForm.SpinEdit2Change(Sender:TObject);
begin
Image1.Left:=40+SpinEdit2.Value*20;
end;
procedureTViewForm.SpinEdit3Change(Sender:TObject);
begin
Image1.Top:=96+SpinEdit3.Value*10;
当用户按下标有“全尺寸”字样的按钮时,另外一个窗体将显现。
图象打印代码以下:
procedureTViewForm.Button1Click(Sender:TObject);
begin
Printer.BeginDoc;
Printer.Canvas.Draw(Trunc(1.5*Image1.Left),Trunc(1.5*Image1.Top),Image1.Picture.Graphic);
Printer.EndDoc;
end;
Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。 |
|