其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

DELPHI基础教程:Delphi图形图像编程(二)[2]


发布日期:2022年12月25日
 
DELPHI基础教程:Delphi图形图像编程(二)[2]

另外一个问题是 我们希望得到的是鼠标按钮按下和松开这两点所形成的图形但OnMouseMove却把鼠标轨迹上各点与起始点所形成的所有图形画在屏幕上这同样是我们不希望看到的为了解决这些问题程序定义了鼠标的三个事件

procedure TFormFormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X Y: Integer)

begin

Drawing := True;

ImageCanvasMoveTo(X Y)

Origin := Point(X Y)

MovePt := Origin;

OriginPanelCaption := Format(Origin: (%d %d) [X Y])

end;

procedure TFormFormMouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X Y: Integer)

begin

if Drawing then

DrawShape(Origin Point(X Y) pmCopy)

Drawing := False;

end;

procedure TFormFormMouseMove(Sender: TObject; Shift: TShiftState; X

Y: Integer)

begin

if Drawing then

begin

DrawShape(Origin MovePt pmNotXor)

MovePt := Point(X Y)

DrawShape(Origin MovePt pmNotXor)

end;

MovePt用来记录鼠标当前位置当下次鼠标移动时 就能在上次鼠标绘制的图形上画一个形状大小一样的图形并把画笔颜色设置成PmNotXor使上次绘制的图形颜色变成了屏幕颜色从而达到橡皮擦的效果

将画笔画刷的Style属性设置成用户希望的值可实现对画笔和画刷风格的选择

procedure TFormSetBrushStyle(Sender: TObject)

begin

with ImageCanvasBrush do

begin

if Sender = SolidBrush then Style := bsSolid

else if Sender = ClearBrush then Style := bsClear

else if Sender = HorizontalBrush then Style := bsHorizontal

else if Sender = VerticalBrush then Style := bsVertical

else if Sender = FDiagonalBrush then Style := bsFDiagonal

else if Sender = BDiagonalBrush then Style := bsBDiagonal

else if Sender = CrossBrush then Style := bsCross

else if Sender = DiagCrossBrush then Style := bsDiagCross;

end;

procedure TFormSetPenStyle(Sender: TObject)

begin

with ImageCanvasPen do

begin

if Sender = SolidPen then Style := psSolid

else if Sender = DashPen then Style := psDash

else if Sender = DotPen then Style := psDot

else if Sender = DashDotPen then Style := psDashDot

else if Sender = DashDotDotPen then Style := psDashDotDot

else if Sender = ClearPen then Style := psClear;

end;

end;

图像对象概述

TGraphic对象

TGraphic对象是TBitmap TIconTmetafile对象的基类如果知道图像的具体类型( 如位图 图标元文件) 则应将图像贮存在相应类型的对象中( 如TBitmapTIconTmetafile)否则应该使用可贮存任何图像类型的TPicture对象

TPicture对象

TPicture对象可以保存位图图标或元文件Graphic属性中包括图像的类型图像的高度和宽度分别定义在HeightWidth属性中调用LoadFromFile方法可以从文件中装载一幅图像

procedure TFormFormCreate(Sender: TObject)

begin

BitBtnGlyphLoadFromFile(TARTANBMP

end;

要保存一个位图则要用SaveToFile方法要把图像复制到剪切板可以调用TClipboard对象的Assign方法

TImage部件

TImage部件用以在窗体中显示图像它的Picture 属性保存着要显示的图像 这是一个TPicture对象AutoSizeStretch属性是用来调节部件与图像的大小的当AutoSize 为真值时TImage部件将根据它所包含的图像的大小来调整自身的大小当AutoSize为假值时不论图像有多大部件将保持设计时的大小如果部件比图像小 那么只有一部分图像是可见的当Stretch为真值时位图像将根据部件的大小调整自身的大小当部件大小改变时元文件也做相应变化Stretch属性对图标没有作用

TBitmap Object(位图对象)

位图对象包含一个位图图像有HBITMAPHPALETE句柄可自动管理调色板位图对象也有画布属性位图的Palette属性用来控制位图的颜色映射它包括种可显示的颜色 如果应用程序用前景色绘制位图Palette 属性的颜色将被加入Windows系统调色板其它颜色被映射到系统调色板已存在的颜色如果应用程序用自己的颜色绘制位图而其它程序已占有系统调色板位图的颜色将被映射到系统调色板中

如果Monochrome属性设置成假位图将显示成彩色反之显示成黑白色

调用Draw和StretchDraw方法可在画布上绘制位图

图像对象的应用

本章例程中单击(文件|浏览)菜单项将弹出一个图像浏览窗体如果用户在窗体中选择文件列表框的图形文件窗体右上角的图像部件上将出现此文件所代表的图像若选择雕刻效果按钮中检查框窗体中的加速按钮和位图按钮上将出现位图

以下代码是将图像文件装载至图像部件上

procedure TImageFormFileListBoxClick(Sender: TObject)

var

FileExt: string[];

begin

FileExt := UpperCase(ExtractFileExt(FileListBoxFilename))

if (FileExt = BMP) or (FileExt = ICO) or (FileExt = WMF) then

begin

ImagePictureLoadFromFile(FileListBoxFilename)

LabelCaption := ExtractFilename(FileListBoxFilename)

if (FileExt = BMP) then

begin

LabelCaption := LabelCaption +

Format( (%d x %d) [ImagePictureHeight ImagePictureWidth])

ViewFormImagePictureBitmap := ImagePictureBitmap;

ViewAsGlyph(FileExt)

end;

if FileExt = ICO then Icon := ImagePictureIcon;

if FileExt = WMF then

ViewFormImagePictureMetafile := ImagePictureMetafile;

end;

end;

这个过程首先判断文件类型如果是图像文件则将图像装载至图像部件上并在标签上列出文件名称如果是位图文件还将显示其大小

[] [] []

               

上一篇:DELPHI基础教程:Delphi图形图像编程(二)[3]

下一篇:DELPHI基础教程:文件管理(一)[4]