Sunteți pe pagina 1din 13

Ministerul Educaţiei al Republicii Moldova

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatica si Microelectronica

RAPORT
Lucrarea de laborator nr.7
Programarea in Windows (C#)

A efectuat:

A verificat:
lect., univ. Lisnic Inga

Chisinau 2017

Teme:
1. Aplicatii – Windows.
2. Interfaţa GDI.

3. Curbe Bezier.
4. Principiile de lucru cu tastatura.
5. Principiile de lucru cu mouse-ul.
6. Ceasul sistemului Windows

Scopul lucrarii:
1. Studierea bazelor şi principiilor de creare a aplicaţiilor Windows in C#
2. De a studia primitivele oferite de interfaţa GDI
3. De a studia primitivele grafice ce permit afişarea curbelor Bezier şi afişarea acestor curbe cu ajutorul
formulelor.
4. De a studia metodele şi principiile de lucru cu tastatura. Însuşirea modului de prelucrare a mesajelor
parvenite de la tastatură
5. De studiat metodele şi principiile de lucru cu mouse-ul; de însuşit modul de prelucrare a
mesajelor parvenite de la mouse
6. De a studia metodele şi principiile de lucru cu timer-ul

Sarcina de lucru:
1. Creaţi o aplicaţie Windows in C# în centrul zonei client al căreia este afişat un mesaj ”Lucrarea de
laborator al studentului ...”. La redimensionarea ferestrei, mesajul trebuie sa fie afişat în centrul zonei
client.
2. Scrieţi un program in C# care afişează în zona client un desen animat, utilizând toate primitivele
GDI.
3. Scrieţi un program in C# care afişază curba Bezier, utilizând funcţiile GDI standarde şi o curbă
Bezier, afişată după calcule prin formule.
4. De scris un program in C# care în zona clienbt afişează un desen, care poate fi mişcat cu ajutorul
tastelor ← (la stânga), ↑(în sus), →(la dreapta), ↓(în jos). De asemenea, trebuie să fie prevăzute taste
pentru rotirea figurii
5. 1. De modificat programul din lucrarea de laborator nr. 3 astfel ca punctele de control al
curbei Bezier să poată fi deplasate, schimbînd forma curbei în timp real.
2. De modificat programul din lucrarea nr. 4 astfel ca desenul să poată fi mişcat cu ajutorul mouse-lui.
6. De scris un program in C#, care realizează următoarele:
1. un ceas digital (Ora:Min:Sec), utilizând timer-ul pentru reînnoirea la fiecare secundă.
2. un ceas analogic (de desenat ciferblatul şi arcele, utilizând primitivele GDI), utilizând timer-ul pentru
reînnoirea la fiecare secundă

1
Notiuni teoretice
C# deriva din doua dintre cele mai de succes limbaje de programare: C si C++. De asemenea, limbajul
este o “ruda” apropiata a limbajului Java. Pentru o mai buna intelegere a limbajului C# este interesant
de remarcat care este natura relatiilor acestuia cu celelalte trei limbaje mentionate mai sus. Pentru
aceasta, vom plasa mai intai limbajul C# in contextul istoric determinat de cele trei limbaje. De la C,
C# mosteneste sintaxa, multe din cuvintele cheie si operatorii. De asemenea, C# construieste peste
modelul de obiecte definit in in C++. Relatia dintre C# si Java este mai complicata. Java deriva la
randul sau din C si C++. Ca si Java, C# a fost proiectat pentru a produce cod portabil. Limbajul C# nu
deriva din Java. Intre C# si Java exista o relatie similara celei dintre “veri”, ele deriva din acelasi
stramos, dar deosebinduse prin multe caracteristici importante. Limbajul C# contine mai multe
facilitati novatoare, dintre care cele mai importante se refera la suportul incorporat pentru componente
software. C# dispune de facilitati care implementeaza direct elementele care alcatuiesc componentele
software, cum ar fi proprietatile, metodele si evenimentele. Poate cea mai importanta facilitate de care
dispune C# este posibilitatea de a lucra intr-un mediu cu limbaj mixt.

Listingul programului (1)


namespace labnr1._1
{
public static class Program
{
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

Rezultatele obtinute

2
Listingul programului (2)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace labnr2._2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
Pen blackPen = new Pen(Color.Black, 2);
e.Graphics.DrawLine(blackPen, 50, 350, 250, 450);
e.Graphics.FillRectangle(Brushes.Purple, new Rectangle(50, 150, 200, 100));
}

}
}

Rezultatele obtinute

3
Listingul programului (3)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace labnr3._3
{ public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private List<Point> points = new List<Point>
{
new Point { X = 0, Y = 200 },

new Point { X = 75, Y = 275 },

new Point { X = 150, Y = 205 },

new Point { X = 225, Y = 255 },

}.Select(x => Point.Add(x, new Size(100, -70))).ToList();


protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawBeziers(new Pen(Color.Black, 2), points.Select(x =>
x).ToArray());
points.ForEach(x => e.Graphics.FillRectangle(Brushes.Red, x.X, x.Y, 3,
3));

Pen blackPen = new Pen(Color.Black, 2);

Point P1 = new Point(100, 100);

Point P2 = new Point(175, 175);

Point P3 = new Point(250, 105);

Point P4 = new Point(325, 155);


Point[] bezierPoints ={ P1, P2, P3, P4, };

SolidBrush myBrush = new SolidBrush(Color.Black);

for (double t = 0; t < 1; t = t + 0.001)


{
int x = Convert.ToInt32(Math.Pow((1 - t), 3) * P1.X + 3 * t *
Math.Pow((1 - t), 2) * P2.X + 3 * t * t * (1 - t) * P3.X + t * t * t * P4.X);
int y = Convert.ToInt32(Math.Pow((1 - t), 3) * P1.Y + 3 * t *
Math.Pow((1 - t), 2) * P2.Y + 3 * t * t * (1 - t) * P3.Y + t * t * t * P4.Y);
e.Graphics.FillRectangle(myBrush, x, y + 280, 2, 2);
}
}

public void CallOnPaint(PaintEventArgs e) => this.OnPaint(e);


public List<Point> Points => this.points;

}
}

4
Rezultatele obtinute

Listingul programului (4)


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using WPoint = System.Windows.Point;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace labnr4._4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected List<Point> sheep = new List<Point>
{
new Point { X = 0, Y = 0 },
new Point { X = 100, Y = 100 },
new Point { X = 100, Y = 100 },
new Point { X = 100, Y = -100 },
}.Select(x => Point.Add(x, new Size(450, 250))).ToList();
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillPolygon(Brushes.Purple, sheep.ToArray());
sheep.ForEach(x => e.Graphics.FillRectangle(Brushes.Red, x.X, x.Y, 0, 0));

5
}
protected override void OnResizeBegin(EventArgs e)
{
last = Size;
}
private Size last;
protected override void OnKeyDown(KeyEventArgs e)
{
Size diff = new Size();
double angle = 0;
switch (e.KeyCode)
{
case Keys.Up:
diff = new Size(0, -10);
break;
case Keys.Down:
diff = new Size(0, 10);
break;
case Keys.Left:
diff = new Size(-10, 0);
break;
case Keys.Right:
diff = new Size(10, 0);
break;
case Keys.A:
angle = -10;
break;
case Keys.D:
angle = 10;
break;
}
var point = sheep.First();
sheep = sheep.Select(x => Point.Add(x.Rotate(point, angle), diff)).ToList();
this.Invalidate();
}

}
}

Rezultatele obtinute

6
Listingul programului (5)
using labnr4._4;
using FormLab3 = labnr3._3.Form1;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace labnr5._5
{
public partial class FormLab5 : Form1
{
private FormLab3 bezierOnPaint = new FormLab3();
public FormLab5(): base()
{
InitializeComponent();
}
private List<Point> points => this.bezierOnPaint.Points;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
this.bezierOnPaint.CallOnPaint(e);
}
protected Point? clickedPoint = null;
protected override void OnMouseDown(MouseEventArgs e)
{
if (MouseButtons.HasFlag(MouseButtons.Left))
{
const int V = 20;
var clicked = points.FirstOrDefault(
x =>
x.X >= e.Location.X - V &&
x.X <= e.Location.X + V &&
x.Y >= e.Location.Y - V &&
x.Y <= e.Location.Y + V
7
);
if (clicked == null || clicked.IsEmpty)
{
return;
}
clickedPoint = clicked;
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (clickedPoint != null)
{
points[points.IndexOf(clickedPoint.Value)] = e.Location;
this.Invalidate();
clickedPoint = null;
}
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (MouseButtons.HasFlag(MouseButtons.Right))
{
var diff = new Size(
e.Location.X - this.sheep.First().X,
e.Location.Y - this.sheep.First().Y
);
this.sheep = this.sheep.Select(x => Point.Add(x, diff)).ToList();
this.Invalidate();
}
if (clickedPoint != null)
{
lock (points)
{
points[points.IndexOf(clickedPoint.Value)] = e.Location;
clickedPoint = e.Location;
this.Invalidate();
}
}
}
}
}

Rezultatele obtinute

8
Listingul programului (6)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace labnr6._6
{
public partial class Form1 : Form
{
Timer t = new Timer();

int WIDTH = 300, HEIGHT = 300, secHAND = 140, minHAND = 110, hrHAND = 80;

int cx, cy;

Bitmap bmp;
Graphics g;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)


{

bmp = new Bitmap(WIDTH + 1, HEIGHT + 1);

cx = WIDTH / 2;
9
cy = HEIGHT / 2;

this.BackColor = Color.White;

t.Interval = 1000;
t.Tick += new EventHandler(this.t_Tick);
t.Start();
}

private void t_Tick(object sender, EventArgs e)


{

g = Graphics.FromImage(bmp);

int ss = DateTime.Now.Second;
int mm = DateTime.Now.Minute;
int hh = DateTime.Now.Hour;
string time = "";

if(hh < 10)


{
this.Text = "Laboratorul nr.6 - " + hh + ":" + mm + ":" + ss;
}
else
{
this.Text = "Laboratorul nr.6 - " + hh + ":" + mm + ":" + ss;
}
time += ":";

if (mm < 10)


{
this.Text = "Laboratorul nr.6 - " + hh + ":" + "0" + mm + ":" + ss;
}
else
{
this.Text = "Laboratorul nr.6 - " + hh + ":" + mm + ":" + ss;
}
time += ":";

if (ss < 10)


{
this.Text = "Laboratorul nr.6 - " + hh + ":" + mm + ":" + "0" + ss;
}
else
{
this.Text = "Laboratorul nr.6 - " + hh + ":" + mm + ":" + ss;
}
time += ":";
pictureBox1.Text = time;

int[] handCoord = new int[2];

g.Clear(Color.White);

g.DrawEllipse(new Pen(Color.Black, 3f), 0, 0, WIDTH, HEIGHT);

g.DrawString("1", new Font("Arial", 10), Brushes.Black, new PointF(215,


20));
g.DrawString("2", new Font("Arial", 10), Brushes.Black, new PointF(265,
70));
g.DrawString("3", new Font("Arial", 14), Brushes.Red, new PointF(286,
140));
g.DrawString("4", new Font("Arial", 10), Brushes.Black, new PointF(268,
210));
g.DrawString("5", new Font("Arial", 10), Brushes.Black, new PointF(217,
265));

10
g.DrawString("6", new Font("Arial", 14), Brushes.Red, new PointF(142,
280));
g.DrawString("7", new Font("Arial", 10), Brushes.Black, new PointF(73,
263));
g.DrawString("8", new Font("Arial", 10), Brushes.Black, new PointF(22,
212));
g.DrawString("9", new Font("Arial", 14), Brushes.Red, new PointF(0, 140));
g.DrawString("10", new Font("Arial", 10), Brushes.Black, new PointF(20,
71));
g.DrawString("11", new Font("Arial", 10), Brushes.Black, new PointF(70,
22));
g.DrawString("12", new Font("Arial", 14), Brushes.Red, new PointF(138,
2));

handCoord = msCoord(ss, secHAND);


g.DrawLine(new Pen(Color.Red, 1f), new Point(cx, cy), new
Point(handCoord[0], handCoord[1]));

handCoord = msCoord(mm, minHAND);


g.DrawLine(new Pen(Color.Black, 3f), new Point(cx, cy), new
Point(handCoord[0], handCoord[1]));

handCoord = hrCoord(hh % 12, mm, hrHAND);


g.DrawLine(new Pen(Color.DimGray, 5f), new Point(cx, cy), new
Point(handCoord[0], handCoord[1]));

pictureBox1.Image = bmp;

g.Dispose();
}

private int[] msCoord(int val, int hlen)


{
int[] coord = new int[2];
val *= 6;

if (val >= 0 && val <= 180)


{
coord[0] = cx + (int)(hlen * Math.Sin(Math.PI * val / 180));
coord[1] = cy - (int)(hlen * Math.Cos(Math.PI * val / 180));
}
else
{
coord[0] = cx - (int)(hlen * -Math.Sin(Math.PI * val / 180));
coord[1] = cy - (int)(hlen * Math.Cos(Math.PI * val / 180));
}
return coord;
}

private int[] hrCoord(int hval, int mval, int hlen)


{
int[] coord = new int[2];

int val = (int)((hval * 30) + (mval * 0.5));

if (val >= 0 && val <= 180)


{
coord[0] = cx + (int)(hlen * Math.Sin(Math.PI * val / 180));
coord[1] = cy - (int)(hlen * Math.Cos(Math.PI * val / 180));
}
else
{
coord[0] = cx - (int)(hlen * -Math.Sin(Math.PI * val / 180));
coord[1] = cy - (int)(hlen * Math.Cos(Math.PI * val / 180));
}
return coord;
}
11
}
}

Rezultatele obtinute

Concluzii
In urma efectuarii acestei lucrari in C# am facut cunostinta cu crearea aplicatiilor Windows ,crearea
ferestrelor, prelucrarea mesajelor.Am facut cunostinta cu utilizarea timerului, am făcut cunoştinţa cu
cu utilizarea mouse-ului şi utilizarea tastaturii, prelucrarea mesajelor de la acesta si am studiat bazele
şi principiile de functionare a functiilor GDI. Am invatat sa folosim resursele acestei biblioteci pentru
a desena diferite figuri utilizind primitivele GDI.

12

S-ar putea să vă placă și

  • 5555
    5555
    Document7 pagini
    5555
    VicuPopusoi
    100% (1)
  • Subiecte Examen ARC2018
    Subiecte Examen ARC2018
    Document2 pagini
    Subiecte Examen ARC2018
    VicuPopusoi
    Încă nu există evaluări
  • 1111
    1111
    Document5 pagini
    1111
    VicuPopusoi
    Încă nu există evaluări
  • Fegal 8 Finegal 23 Finterv (4-12) : A0 A1 A2 A3 A4 Fint
    Fegal 8 Finegal 23 Finterv (4-12) : A0 A1 A2 A3 A4 Fint
    Document4 pagini
    Fegal 8 Finegal 23 Finterv (4-12) : A0 A1 A2 A3 A4 Fint
    VicuPopusoi
    Încă nu există evaluări
  • Fituici Pentru Examen La Retele de Calculatoare. (Conspecte - MD)
    Fituici Pentru Examen La Retele de Calculatoare. (Conspecte - MD)
    Document25 pagini
    Fituici Pentru Examen La Retele de Calculatoare. (Conspecte - MD)
    VicuPopusoi
    Încă nu există evaluări
  • 123 Asdf
    123 Asdf
    Document5 pagini
    123 Asdf
    VicuPopusoi
    Încă nu există evaluări
  • 8888
    8888
    Document1 pagină
    8888
    VicuPopusoi
    Încă nu există evaluări
  • Desfăşurarea Lucrării
    Desfăşurarea Lucrării
    Document6 pagini
    Desfăşurarea Lucrării
    VicuPopusoi
    Încă nu există evaluări
  • Modeme Inteligente
    Modeme Inteligente
    Document12 pagini
    Modeme Inteligente
    VicuPopusoi
    Încă nu există evaluări
  • 123 Asdf
    123 Asdf
    Document9 pagini
    123 Asdf
    VicuPopusoi
    Încă nu există evaluări
  • 1234 Asd
    1234 Asd
    Document4 pagini
    1234 Asd
    VicuPopusoi
    Încă nu există evaluări
  • Laborator 4 ASDN
    Laborator 4 ASDN
    Document7 pagini
    Laborator 4 ASDN
    RoscaFlorin
    Încă nu există evaluări
  • Rezolvarea Lucrării:: Tabelul de Adevăr Al Comparatorului
    Rezolvarea Lucrării:: Tabelul de Adevăr Al Comparatorului
    Document2 pagini
    Rezolvarea Lucrării:: Tabelul de Adevăr Al Comparatorului
    VicuPopusoi
    Încă nu există evaluări
  • 1234 Asdf
    1234 Asdf
    Document5 pagini
    1234 Asdf
    VicuPopusoi
    Încă nu există evaluări
  • Si 1
    Si 1
    Document7 pagini
    Si 1
    VicuPopusoi
    Încă nu există evaluări
  • Exam
    Exam
    Document10 pagini
    Exam
    VicuPopusoi
    Încă nu există evaluări
  • L4n DV
    L4n DV
    Document5 pagini
    L4n DV
    UnFGB
    Încă nu există evaluări
  • Fituici Pentru Examen La Retele de Calculatoare. (Conspecte - MD)
    Fituici Pentru Examen La Retele de Calculatoare. (Conspecte - MD)
    Document25 pagini
    Fituici Pentru Examen La Retele de Calculatoare. (Conspecte - MD)
    VicuPopusoi
    Încă nu există evaluări
  • Laborator 3 ASDN
    Laborator 3 ASDN
    Document8 pagini
    Laborator 3 ASDN
    Iulian Decuseara
    Încă nu există evaluări
  • Asdn 4
    Asdn 4
    Document7 pagini
    Asdn 4
    VicuPopusoi
    Încă nu există evaluări
  • L4n DV
    L4n DV
    Document5 pagini
    L4n DV
    UnFGB
    Încă nu există evaluări
  • L4n DV
    L4n DV
    Document5 pagini
    L4n DV
    UnFGB
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document7 pagini
    Lab 1
    Ramzes CRIS
    Încă nu există evaluări
  • Laborator 2 ASDN
    Laborator 2 ASDN
    Document7 pagini
    Laborator 2 ASDN
    Iulian Decuseara
    Încă nu există evaluări
  • SDAlab 2 Si 3
    SDAlab 2 Si 3
    Document2 pagini
    SDAlab 2 Si 3
    VicuPopusoi
    Încă nu există evaluări
  • SDAlab 4 Si 5
    SDAlab 4 Si 5
    Document1 pagină
    SDAlab 4 Si 5
    VicuPopusoi
    Încă nu există evaluări
  • SDAlab 6
    SDAlab 6
    Document1 pagină
    SDAlab 6
    VicuPopusoi
    Încă nu există evaluări
  • STAT
    STAT
    Document7 pagini
    STAT
    VicuPopusoi
    Încă nu există evaluări
  • SDA
    SDA
    Document1 pagină
    SDA
    danpk1999
    Încă nu există evaluări
  • Lucrare
    Lucrare
    Document6 pagini
    Lucrare
    VicuPopusoi
    Încă nu există evaluări