Napisano 7 Marzec 201015 l Cześć ! Czy jest osoba, która zna ten język i napisała by za darmo jakieś elementy programu lub tłumaczyła to i owo ? To nie są trudne rzeczy bo do szkoły. Chodzi o programowanie obiektowe w visualu. Nizej link do "RYSOWNIKA" strasznie niedopracowany ale tylko na tyle potrafiłęm :( Nie wiem jak zrobić cofanie operacji itp. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing.Drawing2D; using System.IO; namespace RYSOWNIK { public partial class Rysownik : Form { private Point d = Point.Empty; private Point c = Point.Empty; private Graphics g; private Point p = Point.Empty; public Pen pioro; public Color kolorek; bool shouldPaint = false; string plik = ""; public Rysownik() { InitializeComponent(); imgObrazek.Image = new Bitmap(1300,650); Bitmap bmp = new Bitmap(imgObrazek.Image); g = Graphics.FromImage(bmp); Color kolorek = Color.Black; pioro = new Pen(kolorek, 1); Graphics objGraphics = this.imgObrazek.CreateGraphics(); this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.imgObrazek_MouseDown); this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.imgObrazek_MouseUp); this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.imgObrazek_MouseMove); } public void button1_Click(object sender, EventArgs e) { ColorDialog dialog = new ColorDialog(); dialog.Color = Color.Black; kolorek = dialog.Color; podglad.BackColor = dialog.Color; dialog.Color = podglad.BackColor; dialog.ShowDialog(); podglad.BackColor = dialog.Color; pioro.Color = dialog.Color; kolorek = dialog.Color; } private void Rysownik_Load(object sender, EventArgs e) { g.Clear(Color.White); imgObrazek.Refresh(); } private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { } private void imgObrazek_Click(object sender, EventArgs e) { } private void Czysc_Click(object sender, EventArgs e) { g.Clear(Color.White); imgObrazek.Refresh(); } private void a1_MouseClick(object sender, MouseEventArgs e) { pioro.Color = a1.BackColor; kolorek = a1.BackColor; } private void a2_MouseClick(object sender, MouseEventArgs e) { pioro.Color = a2.BackColor; kolorek = a2.BackColor; } private void a3_MouseClick(object sender, MouseEventArgs e) { kolorek = a3.BackColor; pioro.Color = a3.BackColor; } private void a4_Click(object sender, EventArgs e) { kolorek = a4.BackColor; pioro.Color = a4.BackColor; } public void imgObrazek_MouseDown(object sender, MouseEventArgs e) { g.SmoothingMode = SmoothingMode.AntiAlias; int x; x = Convert.ToInt32(textBox1.Text); pioro.Width = x; if (e.Button == MouseButtons.Left) p = e.Location; shouldPaint = true; if (e.Button == MouseButtons.Right) c = e.Location; if (e.Button == MouseButtons.Right) g.DrawLine(pioro, p, c); imgObrazek.Refresh(); } public void imgObrazek_MouseMove(object sender, MouseEventArgs e) { try { int x, y, z; x = Convert.ToInt32(textBox1.Text); y = Convert.ToInt32(textBox2.Text); z = Convert.ToInt32(textBox3.Text); pioro.Width = x; podglad.BackColor = pioro.Color; if (checkBox1.Checked == true) { if (e.Button == MouseButtons.Left) if (shouldPaint) { Graphics graphics = CreateGraphics(); Color kolorek = podglad.BackColor; g.FillEllipse(new SolidBrush(kolorek), e.X, e.Y, z, y); imgObrazek.Refresh(); } } else { g = Graphics.FromImage(imgObrazek.Image); if (e.Button == MouseButtons.Left) { g.SmoothingMode = SmoothingMode.AntiAlias; g.DrawLine(pioro, p, e.Location); p = e.Location; imgObrazek.Refresh(); } if (e.Button == MouseButtons.Right) { c = e.Location; System.Drawing.Graphics graphicsObj; graphicsObj = this.CreateGraphics(); g.SmoothingMode = SmoothingMode.AntiAlias; g.DrawLine(pioro, p, c); imgObrazek.Refresh(); } } } catch { MessageBox.Show("Litere debilu !? LITERE ?!"); Application.Exit(); } } public void textBox1_TextChanged(object sender, EventArgs e) { } private void imgObrazek_DoubleClick(object sender, EventArgs e) { } private void imgObrazek_MouseUp(object sender, MouseEventArgs e) { shouldPaint = false; } private void textBox3_TextChanged(object sender, EventArgs e) { } private void textBox2_TextChanged(object sender, EventArgs e) { } private void checkBox1_CheckedChanged(object sender, EventArgs e) { } private void nowyToolStripMenuItem_Click(object sender, EventArgs e) { g.Clear(Color.White); imgObrazek.Refresh(); } private DialogResult czyZapisac() { DialogResult odp = MessageBox.Show("Chcesz zapisać zmiany?", "Rysownik", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation); if (odp == DialogResult.Yes) zapiszToolStripMenuItem_Click(null, null); return odp; } private void otwórzToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult odp = czyZapisac(); if (odp == DialogResult.Cancel) return; plik = ""; openFileDialog1.Multiselect = false; if (openFileDialog1.ShowDialog() == DialogResult.OK) { StreamReader sr = null; try { sr = new StreamReader(openFileDialog1.FileName); textBox1.Text = sr.ReadToEnd(); } finally { if (sr != null) sr.Close(); } } } private void zapiszToolStripMenuItem_Click(object sender, EventArgs e) { if (plik != "") { SaveFileDialog dialog = new SaveFileDialog(); StreamWriter sw = new StreamWriter(saveFileDialog1.FileName); imgObrazek.Image.Save(dialog.FileName); sw.Close(); } } private void openFileDialog1_FileOk(object sender, CancelEventArgs e) { } private void imgObrazek_Click_1(object sender, EventArgs e) { } private void fontDialog1_Apply(object sender, EventArgs e) { } private void zapiszJakoToolStripMenuItem_Click(object sender, EventArgs e) { SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "bmp|*.bmp|jpeg|*.jpeg"; dialog.ShowDialog(); if (dialog.FileName != "") imgObrazek.Image.Save(dialog.FileName); } private void tłoToolStripMenuItem_Click(object sender, EventArgs e) { ColorDialog dialog = new ColorDialog(); dialog.ShowDialog(); Color tlo = dialog.Color; g.Clear(tlo); imgObrazek.Refresh(); } private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) { } private void zamknijToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } private void cofnijToolStripMenuItem_Click(object sender, EventArgs e) { imgObrazek.Undo(Refresh()); } } } http://eros.vlo.gda.pl/~nvidia/misiak/
Napisano 7 Marzec 201015 l z tego co widac z kodu to mazesz po bitmapie, cofanie operacji mozesz w takim wypadku zrobic tylko jako zapamietanie snapshota z bitmapa, nie masz obiektowej konstrukcji obiektow rysuowanych :( zrob sobie arraya z bitmapami i przechowuj snapshoty, powiedzmy 10 ostatnich i bufor okrezny fifo
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto