BME MOGI Gépészeti informatika 14. 1. feladat Készítsen alkalmazást, mely a képernyő közepére egy véletlen színnel kitöltött kört rajzol! A színváltást nyomógomb segítségével oldja meg! A rajzolást a form Paint eseménykezelő metódusában valósítsa meg! Biztosítsa a kép helyes megjelenését a form átméretezése esetén is! Oktatási cél: grafikus objektum rajzolásának bemutatása A Form1 osztályba írandó programkód: private int középx = 0, középy = 0; private int sugár = 0; private Color szín = Color.Blue; private void Form1_Load(object sender, EventArgs e) //a jobb alsó sarokhoz rögzítjük a gombot button1.anchor = AnchorStyles.Bottom AnchorStyles.Right; középx = this.clientsize.width / 2; középy = this.clientsize.height / 2; sugár = 2 * Math.Min(középX, középy) / 3; private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = e.graphics; SolidBrush sb = new SolidBrush(szín); g.fillellipse(sb, new Rectangle(középX - sugár, középy - sugár, 2 * sugár, 2 * sugár)); private void Form1_Resize(object sender, EventArgs e) Form1_Load(sender, e); Refresh(); 1
2. feladat private void button1_click(object sender, EventArgs e) Random rnd = new Random(); szín = Color.FromArgb(rnd.Next(256), rnd.next(256), rnd.next(256)); Refresh(); Írjon alkalmazást, mely a felhasználó választása szerint piros, zöld vagy kék színnel, véletlen méretű kitöltött téglalapot, ellipszist vagy kitöltetlen kört rajzol a képernyőre helyezett panelra! A téglalapok alatt ugyanazzal a színnel jelenítse meg a téglalap szót is! Az alakzatok és a színek kombinált listákból legyenek választhatók! A rajzolás egy nyomógomb megnyomására történjen, egy másik nyomógombbal tegye lehetővé a rajzfelület törlését is! Rögzítse a vezérlőket a megfelelő oldalakhoz! Biztosítsa a kép helyes megjelenését a form átméretezése esetén is! Oktatási cél: grafikus objektumok rajzolásának bemutatása, szövegkezelés grafikusan A Form1 osztályba írandó programkód: Pen toll; Font betu; Brush ecset; Color szín; Color[] színek = Color.Red, Color.Green, Color.Blue ; Random rnd = new Random(); int alakzat = 0; int balx = 0, baly = 0, magasság = 0, szélesség = 0; 2
private void combobox1_selectedindexchanged(object sender, EventArgs e) alakzat = combobox1.selectedindex; private void button1_click(object sender, EventArgs e) Rajzol(); private void button2_click(object sender, EventArgs e) panel1.creategraphics().clear(panel1.backcolor); private void Rajzol() int szél = rnd.next(10, szélesség / 5); int mag = rnd.next(10, magasság / 5); Size méret = new Size(szél, mag); int x = rnd.next(szél, szélesség - szél); int y = rnd.next(mag-10, magasság - mag+10); Point pont = new Point(x, y); SizeF szövegméret = new SizeF(); Graphics grafika = panel1.creategraphics(); switch (alakzat) case 0: Rectangle t = new Rectangle(pont, méret); //grafika.drawrectangle(toll, t); grafika.fillrectangle(ecset, t); szövegméret = grafika.measurestring("téglalap", betu); grafika.drawstring("téglalap", betu, ecset, (pont.x + szél / 2) - szövegméret.width / 2, pont.y + mag + szövegméret.height / 2); break; case 1: Rectangle t1 = new Rectangle(pont, new Size(Math.Min(szél, mag), Math.Min(szél, mag))); grafika.drawellipse(toll, t1); break; default: Rectangle t2 = new Rectangle(pont, méret); grafika.fillellipse(ecset, t2); break; private void Form1_Resize(object sender, EventArgs e) magasság = panel1.height; szélesség = panel1.width; panel1.creategraphics().clear(panel1.backcolor); private void combobox2_selectedindexchanged(object sender, EventArgs e) szín = színek[combobox2.selectedindex]; toll = new Pen(szín, 1); 3
ecset = new SolidBrush(szín); private void Form1_Load(object sender, EventArgs e) szín = színek[0]; toll = new Pen(szín, 1); ecset = new SolidBrush(szín); betu = new Font("Courier New", 10); balx = panel1.left; baly = panel1.top; magasság = panel1.height; szélesség = panel1.width; combobox1.items.add("téglalap"); combobox1.items.add("kör"); combobox1.items.add("ellipszis"); combobox1.selectedindex = 0; combobox2.items.add("piros"); combobox2.items.add("zöld"); combobox2.items.add("kék"); combobox2.selectedindex = 0; 3. feladat önálló feldolgozásra Készítsen alkalmazást, mely elvégzi a következő műveleteket az egérpozícióban: a. Az egér mozgatásakor 5 pont hosszúságú, korál színű vonalat rajzol! b. Az egérgomb lenyomásakor 5 pont sugarú, kék színnel kitöltött kört rajzol! c. Az egérgomb felengedésekor 10 pont oldalhosszúságú, piros színnel kitöltött négyzetet rajzol! d. Az egérgombbal történő dupla kattintáskor befejezi / újraindítja a rajzolást! Oktatási cél: rajzolás bemutatása egéresemények bekövetkeztekor 4
A Form1 osztályba írandó programkód: Graphics g; bool rajzoljon = true; private void Form1_MouseDown(object sender, MouseEventArgs e) if (rajzoljon) Rectangle t = new Rectangle(e.X, e.y, 10, 10); g.fillellipse(brushes.blue,t); private void Form1_MouseMove(object sender, MouseEventArgs e) if (rajzoljon) g.drawline(pens.coral,e.x,e.y,e.x+5,e.y+5); private void Form1_Load(object sender, EventArgs e) g = this.creategraphics(); private void Form1_MouseUp(object sender, MouseEventArgs e) if (rajzoljon) Rectangle t = new Rectangle(e.X, e.y, 10, 10); g.fillrectangle(brushes.red, t); private void Form1_MouseDoubleClick(object sender, MouseEventArgs e) if (rajzoljon) 5
g = null; else g = this.creategraphics(); rajzoljon =!rajzoljon; 4. feladat önálló feldolgozásra Írjon alkalmazást, mely egy Label vezérlő betű- és háttérszínét állítja be a felhasználó által megadott színre! A színt generálja vízszintes HScrollBar vezérlők értékeiből, melyek a piros, a kék és a zöld összetevőt adják meg! A betűszín és háttérszín közötti váltást CheckBox vezérlővel oldja meg! Oktatási cél: betű- és háttérszín beállításának, RGB szín generálásának bemutatása A Form1 osztályba írandó programkód: private void hscrollbar1_valuechanged(object sender, EventArgs e) Színez(); private void hscrollbar2_valuechanged(object sender, EventArgs e) Színez(); private void hscrollbar3_valuechanged(object sender, EventArgs e) Színez(); private void Form1_Load(object sender, EventArgs e) hscrollbar1.minimum = 0; hscrollbar1.maximum = 255; hscrollbar1.smallchange = 1; hscrollbar1.largechange = 10; hscrollbar2.minimum = 0; 6
hscrollbar2.maximum = 255; hscrollbar2.smallchange = 1; hscrollbar2.largechange = 10; hscrollbar3.minimum = 0; hscrollbar3.maximum = 255; hscrollbar3.smallchange = 1; hscrollbar3.largechange = 10; private void Színez() if (checkbox1.checked) label1.forecolor = Color.FromArgb(hScrollBar1.Value, hscrollbar2.value, hscrollbar3.value); else label1.backcolor = Color.FromArgb(hScrollBar1.Value, hscrollbar2.value, hscrollbar3.value); 5. feladat önálló feldolgozásra Készítsen alkalmazást, mely diavetítésszerűen jelenít meg képeket! Az időzítést Timer segítségével oldja meg! Oktatási cél: bitképek megjelenítésének és a Timer használatának bemutatása A Form1 osztályba írandó programkód: Image[] kepek=new Image[3]; int sorszám = 0; private void Form1_Load(object sender, EventArgs e) 7
kepek[0]= Image.FromFile ("cica.jpg"); kepek[1] = new Bitmap("petúnia.jpg"); kepek[2] = new Bitmap("rózsa.jpg"); timer1.enabled = true; timer1.interval = 5000; private void timer1_tick(object sender, EventArgs e) sorszám=(sorszám+1)%3; Graphics g = this.creategraphics(); g.clear(this.backcolor); g.drawimage(kepek[sorszám],20, 25, kepek[sorszám].width, kepek[sorszám].height); private void Form1_Paint(object sender, PaintEventArgs e) Graphics g = this.creategraphics(); g.drawimage(kepek[sorszám], 20, 25,kepek[sorszám].Width, kepek[sorszám].height); 6. feladat önálló feldolgozásra Írjon alkalmazást, mely általános párbeszédablakok segítségével megváltoztatja egy címke háttér- és betűszínét, valamint szövegének beállításait! A párbeszédablakok megnyitását nyomógombok segítségével valósítsa meg! Oktatási cél: dialógusablakok használatának bemutatása A Form1 osztályba írandó programkód: private void button1_click(object sender, EventArgs e) ColorDialog clg = new ColorDialog(); clg.color = label1.backcolor; clg.showdialog(); label1.backcolor = clg.color; private void button2_click(object sender, EventArgs e) ColorDialog clg = new ColorDialog(); 8
clg.color = label1.forecolor; clg.showdialog(); label1.forecolor = clg.color; private void button3_click(object sender, EventArgs e) FontDialog ftg = new FontDialog(); ftg.font = label1.font; ftg.showdialog(); label1.font = ftg.font; 9
Gyakorló feladatok grafika 1 1. Készítsen Windows Forms alkalmazást, melyben nyomógombok segítségével rajzol kifestett lila téglalapot, sárga kört és barna ellipszist! A befoglaló téglalapok méretét véletlenszerűen válassza meg, úgy, hogy a grafikus alakzatok elférjenek a formon! Egy negyedik nyomógombbal tegye lehetővé a form törlését! 2. Írjon Windows Forms alkalmazást, amely nyomógombon való kattintással előállít egy véletlen színt az RGB összetevőkből, majd befest egy négyzetet ezzel a színnel! Szövegmezőkben jelenítse meg a színösszetevők értékét is! 3. Tervezzen egy.bmp (bitkép) formátumú képet a Paint programmal, és jelenítse meg egy Windows Forms alkalmazásban! 4. Készítsen Windows Forms alkalmazást, mely a formon történő kattintásra megnyíló párbeszédablakban választott színre változtatja a form hátterét! A formon történő dupla kattintásra állítsa vissza az eredeti háttérszínt! 5. Írjon Windows Forms alkalmazást, amely valamilyen keretszínű, a keretszíntől eltérő színnel kifestett négyzetbe egy, az előző színektől eltérő színűre festett kört rajzol! A színeket három kombinált listából lehessen kiválasztani, bármelyik szín változásakor rajzolja ki újra az alakzatot! 6. Készítsen Windows Forms alkalmazást, mely szabadkézi rajzolást tesz lehetővé a formon! Az egérgomb lenyomásakor és mozgatásakor rajzoljon egyenest, az egérgomb felengedésekor hagyja abba a rajzolást! A vonal színe párbeszédablak használatával legyen beállítható, a vonalvastagságot beviteli mezőben lehessen megadni! 7. Írjon Windows Forms alkalmazást, mely véletlen számú, eltérő színű és sugarú koncentrikus kört rajzol! A körök száma 5 és 20 között változzon, a körök középpontja a form közepe legyen, a sugarakat úgy válassza meg, hogy a legnagyobb kör is elférjen az ablakban! A körök színét egy, a színkódokkal feltöltött konstans tömbből véletlenszerűen válassza ki! 10