Jump to content

Recommended Posts

Posted

Pessoal mais uma vez obrigado pela ajuda que tem dado, para eu poder aprender esta linguagem de programação  😛

Tenho uma duvida estou a fazer um programa tipo paint mas nao consigo fazer uma borracha, alguém me pode dar uma ajudinha, estou a usar o Form para pintar.

Posted

Eu nunca tentei, mas imagino que seja possível fazer uma borracha simplesmente pegando um forma em volta da posição onde o mouse se encontra e mudar a cor de todos os pixels desta área para a cor de fundo selecionada.

Fernando Lage Bastos - MCP/MCTS/MCPD

Posted

Eu nunca tentei, mas imagino que seja possível fazer uma borracha simplesmente pegando um forma em volta da posição onde o mouse se encontra e mudar a cor de todos os pixels desta área para a cor de fundo selecionada.

esta muito difícil de fazer  😛
Posted

Se for possível você compartilhar o código fica mais fácil ajudar pois depende de como o sistema foi implementado.

 

namespace Informatica4everDavidPereira
{
    public partial class ProgramaInformatica4ever : Form
    {
        //vai buscar a Class1
        private ArrayList ds;
        private Point mold;
        private Point mcur;
        private int mshape;
        private float mwidth;
        private Color mcolor;
        string codigo = "";
        public ProgramaInformatica4ever()
        {
            InitializeComponent();
            ds = new ArrayList();
            mshape = 0;
            mwidth = 1;
            mcolor = Color.Black;
            // Para fazer DoubleBuffer 
            this.SetStyle(

  ControlStyles.AllPaintingInWmPaint |

  ControlStyles.UserPaint |

  ControlStyles.DoubleBuffer, true);
        }

        private void ProgramaInformatica4ever_Load(object sender, EventArgs e)
        {
            Form1 f1 = new Form1();
            this.Hide();
            // Para colocar em full screen.
            int w = Screen.PrimaryScreen.Bounds.Width;
            int h = Screen.PrimaryScreen.Bounds.Height;
            this.Location = new Point(0, 0);
            this.Size = new Size(w, h);
            toolStrip2.Visible = false; 
        }


        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            mshape = 0;
        }

        private void toolStripButton11_Click(object sender, EventArgs e)
        {
            //Fecha O Form filho(ProgramaInformatica4ever) e Abre novamente o Form Pai
            Close();
            Form1 form1;
            form1 = new Form1();
            form1.Show();
        }

        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            mshape = 1;
        }

        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            mshape = 2;
        }

        private void toolStripButton4_Click(object sender, EventArgs e)
        {
            ColorDialog dlg = new ColorDialog();
            dlg.Color = mcolor;
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                mcolor = dlg.Color;
            }

        }

        private void toolStripButton5_Click(object sender, EventArgs e)
        {
           
        }

        private void toolStripButton6_Click(object sender, EventArgs e)
        {
            mwidth = 1;
        }

        private void toolStripButton7_Click(object sender, EventArgs e)
        {
            mwidth = 2;
        }

        private void toolStripButton8_Click(object sender, EventArgs e)
        {
            mwidth = 5;
        }

        private void toolStripButton9_Click(object sender, EventArgs e)
        {
            mwidth = 7;
        }

        private void toolStripButton10_Click(object sender, EventArgs e)
        {
            mwidth = 10;
        }


        private void ProgramaInformatica4ever_MouseUp(object sender, MouseEventArgs e)
        {
            this.Cursor = Cursors.Default;
            Class1 a = new Class1(mold, mcur, mshape, mwidth, mcolor);
            ds.Add(a);

        }
        //Para fazer o rectagulo
        private Rectangle rec(Point p1, Point p2)
        {
            Rectangle a = new Rectangle();
            a.X = (p1.X > p2.X ? p2.X : p1.X);
            a.Y = (p1.Y > p2.Y ? p2.Y : p1.Y);
            a.Width = Math.Abs(p1.X - p2.X);
            a.Height = Math.Abs(p1.Y - p2.Y);
            return a;
        }

        private void ProgramaInformatica4ever_Paint(object sender, PaintEventArgs e)
        {
            foreach (Class1 a in ds)
            {
                draw(e.Graphics, a.old, a.cur, a.shape, a.width, a.color);
            }
            draw(e.Graphics, mold, mcur, mshape, mwidth, mcolor);

        }


        private void draw(Graphics e, Point mold, Point mcur, int mshape, float mwidth, Color mcolor)
        {
            Pen p=new Pen(mcolor, mwidth);
            // Para ficar mshape0 line ; mshape1 Rectangulo ; mshape2 circulo
            switch (mshape)
            {
                case 0:

                    e.DrawLine(p, mold, mcur);
                    break;
                case 1:
                    e.DrawRectangle(p, rec(mold, mcur));
                    break;
                case 2:
                    e.DrawEllipse(p, rec(mold, mcur));
                    break;
               
            }
        }

        private void ProgramaInformatica4ever_MouseDown(object sender, MouseEventArgs e)
        {
            this.Cursor = Cursors.Cross;
            if (e.Button == MouseButtons.Left)
            {
                mold = e.Location;
            }
        }

        private void ProgramaInformatica4ever_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                mcur = e.Location;
                Invalidate();
            }
        }
Posted

Fiz uma versão somente para a borracha para testar, mas acho que dá para você utilizar como base:

public partial class Form1 : Form
    {
        private bool pressionado;
        private int tamanhoBorracha = 5;
        public Form1()
        {
            InitializeComponent();
            this.SetStyle(

ControlStyles.AllPaintingInWmPaint |

ControlStyles.UserPaint |

ControlStyles.DoubleBuffer, true);


        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            pressionado = true;
        }

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            pressionado = false;
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (pressionado)
            {
                using (var g = this.CreateGraphics())
                {
                    int x = e.Location.X-tamanhoBorracha/2;

                    int y = e.Location.Y-tamanhoBorracha/2;

                    int height = tamanhoBorracha;

                    int width = tamanhoBorracha;

                    Rectangle rectangle = new Rectangle(x, y, width, height);

                    System.Drawing.SolidBrush brush = new SolidBrush(Color.White);

                    g.FillRectangle(brush, rectangle);

                }
            }
        }
    }

Fernando Lage Bastos - MCP/MCTS/MCPD

Posted

Provavelmente eh porque o método do evento Paint esta redesenhando a tela. Em um programa tipo paint o normal é desenhar o objeto na tela e apaga-lo da memoria. Por isto que utilizei o bloco using no meu código. Se quiser fazer do jeito que esta precisa mudar o código da borracha para adicionar os rectangles criados por ela na sua lista de objetos. Porem isto pode fazer o programa utilizar mais memória e ficar lento  conforme o usuário for fazendo o desenho.

Fernando Lage Bastos - MCP/MCTS/MCPD

Posted

Tente fazer, mas é semelhante à borracha, só que ao invés de apagar, você vai desenhar a cor. É a mesma rotina da borracha, muda só o tamanho do retângulo e a cor.

Fernando Lage Bastos - MCP/MCTS/MCPD

Posted

Provavelmente eh porque o método do evento Paint esta redesenhando a tela. Em um programa tipo paint o normal é desenhar o objeto na tela e apaga-lo da memoria. Por isto que utilizei o bloco using no meu código. Se quiser fazer do jeito que esta precisa mudar o código da borracha para adicionar os rectangles criados por ela na sua lista de objetos. Porem isto pode fazer o programa utilizar mais memória e ficar lento  conforme o usuário for fazendo o desenho.

como fazes isto?
Posted

Da mesma forma que eu fiz a borracha no meu código, você faz o código para as outras ferramentas como o rectangulo. No evento mouse_up por exemplo, ao invés de adicionar o formato para uma lista como você está fazendo, você simplesmente faz o desenho e pronto. Não armazena o objeto e nem refaz ele no evento Paint.

Fernando Lage Bastos - MCP/MCTS/MCPD

Posted

Da mesma forma que eu fiz a borracha no meu código, você faz o código para as outras ferramentas como o rectangulo. No evento mouse_up por exemplo, ao invés de adicionar o formato para uma lista como você está fazendo, você simplesmente faz o desenho e pronto. Não armazena o objeto e nem refaz ele no evento Paint.

ainda não consegui resolver aquele bug da borracha, esta sempre acontecer cada vez que apago quando volto a escrever aparece  o desenho  que apagai.  😉

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.