熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:Delphi圖形圖像編程(二)[2]

2013-11-23 17:51:58  來源: Delphi編程 

  另外一個問題是 我們希望得到的是鼠標按鈕按下和松開這兩點所形成的圖形但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;

  這個過程首先判斷文件類型如果是圖像文件則將圖像裝載至圖像部件上並在標簽上列出文件名稱如果是位圖文件還將顯示其大小

[]  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25244.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.