.NET Logo
Welcome Guest Search | Active Topics | Members | Log In | Register

~ ขอถามเรื่องการใช้ graphic ใน c# แบบนี้ด้วยครับ ~ Options · View
Synchronize
Posted: Tuesday, February 19, 2008 4:52:37 PM
Rank: มือฝึกหัด
Groups: Member

Joined: 2/19/2008
Posts: 3

คือขั้นตอนดังนนี้

1. บนพื้นที่ทำงาน drag เม้าส์จากจุดหนึ่งไปจุดหนึ่ง เพื่อวาดรูปสี่เหลี่ยม

2. ก็จะได้รูปสี่เหลี่ยมมา ... คือขั้นตอนนี้พอจะนึกหลักการทำงาน ออกครับ ... น่าจะจับ event ตอน mouse down หา x,y  แล้วไปจับตอน mouse up อีกที

3. จากนั้น click ที่รูปสี่เหลี่ยม ...

4. ตรงนี้แหล่ะครับ ที่นึกหลักมันไม่ออก ... ว่าจะทำไง ให้พื้นที่ สี่เหลี่ยมที่ click ไป เปลี่ยนสียังไง ... ประมาณว่า มันจะรู้ได้ไงว่าตรงนี้เป็นพื้นที่สี่เหลี่ยมครับ

 

รบกวนขอเทคนิค หรือวิธีการหน่อยครับ แบบคร่าวๆ พอเป็นแนวทางก็ได้ครับ ... ถ้ามีลิงค์ หรือ source ตัวอย่างด้วยก็จะเยี่ยมมาก ... เพราะผมพยายามจะหาด้วย google ก็ไม่รู้จะค้นด้วยคำว่าอะไร

ขอบคุณมากครับ

paedotnet
Posted: Wednesday, February 20, 2008 5:41:10 PM

Rank: มือเทพ
Groups: Member

Joined: 12/6/2007
Posts: 354
Location: bkk

หลังจากที่วาดรูปแล้วต่อไปให้ใส่สี่เมื่อนำเมาส์มาคลิกที่รูปก็ใช้ Region ครับ โดยจะต้องสร้างตัวแปรคลาส ก่อนดังนี้

        Region region;  //สร้าง object ของคลาส Region
        private int x = 0; //กำหนดตัวแปร x เพื่อหาตำแหน่งเริ่มต้นของรูปในแกน x
        private int y = 0; //กำหนดตัวแปร y เพื่อหาตำแหน่งเริ่มต้นของรูปในแกน y

จากนั้นในevent Mouse_Click เขียนดังนี้

  private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            Graphics g = this.CreateGraphics();
            if (region.GetBounds(g).Contains(x, y))  //ตรวจสอบว่าคลิกในตำแหน่งที่กำหนดไว้ในRegion หรือไม่
            {
             
                g.FillRegion(Brushes.Red, region); // ถ้าคลิกในตำแหน่งของรูปสี่เหลียมที่ถูกต้องก็ให้ใส่สีในรูปสีเหลียมนี้
            }
        }

ตรง event ที่ใช้วาดรูปก็ต้องเขียน โค้ดตามด้านล่างนี้ด้วยเพื่อที่จะกำหนด Region ได้

            GraphicsPath gp = new GraphicsPath();
            gp.AddRectangle(new Rectangle(x, y, width, height));
            region = new Region(gp);
            g.DrawRectangle(Pens.Black, x, y, width, height); //วาดรูปกรอบ (Border) ของรูปสีเหลียม

 

 



[With great power comes great responsibility]
Synchronize
Posted: Thursday, February 21, 2008 8:17:01 AM
Rank: มือฝึกหัด
Groups: Member

Joined: 2/19/2008
Posts: 3

ขอบคุณมากครับผม ... มีข้อสงสัยอีกนิดครับ

ตรง  ... if (region.GetBounds(g).Contains(x, y)) ... นี้ ตัวแปล x, y ใช่จับมาจาก MouseEventArgs รึป่าวครับ ..

พอดีผมถามเรื่องนี้ไว้สองที่ ที่นี่และพันทิปด้วย ในพันทิปเค้าบอกว่า ให้เก็บเป็นพิกัดจุดไว้ แล้วมันจะมี API ตัวนึงไว้หา Point in Polygon (ซึ่งผมก็ค้นอยู่นานว่า API นี้ มันตัวไหน) ... ผมดูน่าจะเป็นหลักการเดียวกัน ใช่รึป่าวครับ

เมธอด  this.CreateGraphics();  ไว้ทำอะไรครับ ... แล้วถ้าเกิดวาด สี่เหลี่ยมหลายๆ รูป มันจะ loop เช็กยังไงครับ หรือต้องไปทำ GraphicsPath[] ไว้ข้างนอกก่อน ... คือ ลองไล่ๆ ดูเมธอดใน GraphicsPath ดู มันมีแต่ Add ผมหาที่มัน Get ออกมาไม่ยักกะมี ... แสดงว่า GraphicsPath 1 อันแปลว่ารูปอันเดียวใช่มั้ยครับ ...

 

ถามยาวไปหน่อย ... ขอบคุณมากครับ 

paedotnet
Posted: Thursday, February 21, 2008 10:56:14 AM

Rank: มือเทพ
Groups: Member

Joined: 12/6/2007
Posts: 354
Location: bkk

เมธอด this.CreateGraphics() ก็คล้ายๆกับ e.Graphics ครับ (Graphic g =e.Graphics) ต่างกันที่ e.Graphics จะใช้กับ event Form_Paint แต่ ถ้าไม่ใช่ event นี้ ก็ต้องใช้ this.CreateGraphics() ครับ

ส่วนตัวแปร  x,y ก็มาจาก event ของ Mouse ครับ



[With great power comes great responsibility]
Synchronize
Posted: Friday, February 22, 2008 10:08:45 AM
Rank: มือฝึกหัด
Groups: Member

Joined: 2/19/2008
Posts: 3

ขอบคุณครับ จะเอาไปลองดูก่อนครับ  

Users browsing this topic
Guest


Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.

Main Forum RSS : RSS

YAFVision Theme Created by Jaben Cargman (Tiny Gecko)
Powered by Yet Another Forum.net version 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.


Sponsored by