首頁(yè) 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱英語(yǔ) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語(yǔ) | 成人英語(yǔ)三級(jí) | 申碩英語(yǔ) | 攻碩英語(yǔ) | 職稱日語(yǔ) | 日語(yǔ)學(xué)習(xí) | 法語(yǔ) | 德語(yǔ) | 韓語(yǔ)
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問(wèn) | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱 | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語(yǔ)學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

2011計(jì)算機(jī)等級(jí)考試Delphi:Delphi圖形圖像編程

本章將介紹以下內(nèi)容:TCanvas,TPen,TBrush,TColor對(duì)象的方法及屬性; 繪圖功能的實(shí)現(xiàn);TImage,TPicture,TBitBtn,TBitmap部件的方法及屬性;圖像觀測(cè)及處理。

  5.2.3 繪圖功能的實(shí)現(xiàn)

  繪圖軟件常根據(jù)用戶的要求改變繪圖工具。Graphex.dpr例程中,當(dāng)用戶按下某個(gè)按鈕時(shí),可選擇繪圖工具中的畫筆或畫刷,在程序類型說(shuō)明部分定義了五種繪圖工具。

  type

  TDrawingTool = (dtLine,dtRectangle,dtEllips,dtRoundRect,dtPolygon);

  當(dāng)選中某種按鈕,則選中了相應(yīng)的繪圖工具,如:

  procedure TForm1.LineButtonClick(Sender: TObject);

  begin

  DrawingTool := dtLine;

  end;

  procedure TForm1.RectangleButtonClick(Sender: TObject);

  begin

  DrawingTool := dtRectangle;

  end;

  procedure TForm1.EllipseButtonClick(Sender: TObject);

  begin

  DrawingTool := dtEllipse;

  end;

  procedure TForm1.RoundRectButtonClick(Sender: TObject);

  begin

  DrawingTool := dtRoundRect;

  end;

  procedure TForm1.PolygonButtonClick(Sender: TObject);

  begin

  DrawingTool :=dtPolygon;

  end;

  DrawShape過(guò)程定義了每種繪圖工具的動(dòng)作:

  procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);

  begin

  with Image.Canvas do

  begin

  Pen.Mode := AMode;

  case DrawingTool of

  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) div 2, (TopLeft.Y - BottomRight.Y) div 2);

  dtPolygon:Polygon([Point(0,0),TopLeft,BottomRight]); end;

  end;

  end;

  程序剛運(yùn)行時(shí),只有一個(gè)工具欄。當(dāng)用戶單擊畫筆和畫刷時(shí),則出現(xiàn)相應(yīng)的工具欄,如圖5.4。其代碼如下:

  procedure TForm1.PenButtonClick(Sender: TObject);

  begin

  PenBar.Visible := PenButton.Down;

  end;

  procedure TForm1.BrushButtonClick(Sender: TObject);

  begin

  BrushBar.Visible := BrushButton.Down;

  end;

  在設(shè)計(jì)繪圖程序時(shí),還要解決一些問(wèn)題。如為了在鼠標(biāo)移動(dòng)時(shí)能觀測(cè)圖形的變化,我們定義了OnMouseMove事件。但會(huì)出現(xiàn)這樣的現(xiàn)象,當(dāng)鼠標(biāo)進(jìn)入繪圖區(qū)時(shí),用戶未按下鼠標(biāo)鍵,畫布上卻出現(xiàn)繪制的圖形,這是我們不希望看到的。其原因是沒有對(duì)鼠標(biāo)按鈕是否按下進(jìn)行判斷。因此在窗體對(duì)象中定義了drawing的域,當(dāng)鼠標(biāo)按鈕按下時(shí),drawing 設(shè)置成真值。只有drawing為真,鼠標(biāo)移動(dòng)才執(zhí)行繪圖功能;當(dāng)鼠標(biāo)鍵松開時(shí),drawing設(shè)置成假,鼠標(biāo)移動(dòng)將不執(zhí)行繪圖動(dòng)作。

  另外一個(gè)問(wèn)題是, 我們希望得到的是鼠標(biāo)按鈕按下和松開這兩點(diǎn)所形成的圖形,但OnMouseMove卻把鼠標(biāo)軌跡上各點(diǎn)與起始點(diǎn)所形成的所有圖形畫在屏幕上,這同樣是我們不希望看到的,為了解決這些問(wèn)題,程序定義了鼠標(biāo)的三個(gè)事件:

  procedure TForm1.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;

  procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

  begin

  if Drawing then

  DrawShape(Origin, Point(X, Y), pmCopy);

  Drawing := False;

  end;

  procedure TForm1.FormMouseMove(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用來(lái)記錄鼠標(biāo)當(dāng)前位置。當(dāng)下次鼠標(biāo)移動(dòng)時(shí), 就能在上次鼠標(biāo)繪制的圖形上畫一個(gè)形狀、大小一樣的圖形,并把畫筆顏色設(shè)置成PmNotXor,使上次繪制的圖形顏色變成了屏幕顏色,從而達(dá)到“橡皮擦”的效果。

  將畫筆、畫刷的Style屬性設(shè)置成用戶希望的值,可實(shí)現(xiàn)對(duì)畫筆和畫刷風(fēng)格的選擇。

  procedure TForm1.SetBrushStyle(Sender: TObject);

  begin

  with Image.Canvas.Brush 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 TForm1.SetPenStyle(Sender: TObject);

  begin

  with Image.Canvas.Pen 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;

  相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試試題及答案解析專題
       預(yù)告:名師解析2010年9月計(jì)算機(jī)等級(jí)考試試題答案
       2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間及入口
       2010年9月計(jì)算機(jī)等考成績(jī)查詢短信免費(fèi)提醒開通
文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。