gamarrajr Posted April 21, 2012 at 10:51 PM Report #450465 Posted April 21, 2012 at 10:51 PM 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.
petvetbr Posted April 21, 2012 at 11:18 PM Report #450467 Posted April 21, 2012 at 11:18 PM 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
gamarrajr Posted April 22, 2012 at 11:35 AM Author Report #450488 Posted April 22, 2012 at 11:35 AM 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 😛
petvetbr Posted April 22, 2012 at 01:59 PM Report #450518 Posted April 22, 2012 at 01:59 PM Se for possível você compartilhar o código fica mais fácil ajudar pois depende de como o sistema foi implementado. Fernando Lage Bastos - MCP/MCTS/MCPD
gamarrajr Posted April 22, 2012 at 05:49 PM Author Report #450550 Posted April 22, 2012 at 05:49 PM 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(); } }
petvetbr Posted April 22, 2012 at 09:29 PM Report #450598 Posted April 22, 2012 at 09:29 PM 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
gamarrajr Posted April 22, 2012 at 10:02 PM Author Report #450608 Posted April 22, 2012 at 10:02 PM Obrigado 😁 😉
gamarrajr Posted April 23, 2012 at 10:26 AM Author Report #450682 Posted April 23, 2012 at 10:26 AM Obrigado 😁 😉 a borracha esta a dar, o problema e quando volto a desenhar aparece aquilo que eu apagai
petvetbr Posted April 23, 2012 at 01:02 PM Report #450709 Posted April 23, 2012 at 01:02 PM 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
gamarrajr Posted April 24, 2012 at 06:56 PM Author Report #451217 Posted April 24, 2012 at 06:56 PM pessoal alguém sabe fazer caneta C#
petvetbr Posted April 24, 2012 at 07:44 PM Report #451225 Posted April 24, 2012 at 07:44 PM 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
gamarrajr Posted April 24, 2012 at 08:21 PM Author Report #451230 Posted April 24, 2012 at 08:21 PM 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?
petvetbr Posted April 24, 2012 at 09:31 PM Report #451244 Posted April 24, 2012 at 09:31 PM 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
gamarrajr Posted April 25, 2012 at 05:32 PM Author Report #451420 Posted April 25, 2012 at 05:32 PM 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. 😉
petvetbr Posted April 25, 2012 at 05:34 PM Report #451421 Posted April 25, 2012 at 05:34 PM me manda o código atualizado para eu dar uma olhada: petvetbr@gmail.com Fernando Lage Bastos - MCP/MCTS/MCPD
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now