Szoftverfejlesztés .NET platformon - Jegyzet 6. fejezet

A VIK Wikiből

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


70-536 .NET framework 2.0 Application Development Foundation

%TOC{depth="3"}%

<a name="controls">

Windows Forms controlok grafikus tulajdonságai

  • Pozíció: =int Top=, =int Left=, vagy egyben =Point Location=
  • Méret: =Size=
  • Szín: =ForeColor=, =BackColor=. Színt =Color.FromArgb(int r, int g, int b)= hívással lehet definiálni.

Rajzolás egy control területére:

  1. =Graphics= objektum lekérdezése =CreateGraphics()= hívással
    • formra rajzoláskor az =OnPaint()= eseménykezelő =PaintEventArgs= argumentumának

=Graphics= propertyjét szokták lekérdezni

  1. =Pen= és/vagy =Brush= létrehozása
  2. rajzolás

Rajzolás

=System.Drawing= névtér.

Rajzolófüggvények (=Graphics= metódusai):

  • =Clear()=: az egész területet kitölti a megadott színnel
  • =DrawEllipse()=: kört vagy ellipszist rajzol a megadott határoló téglalap belsejébe
  • =DrawIcon()=, =DrawImage()=: ikont vagy képet rajzol ki
  • =DrawLine()=: vonalat rajzol
  • =DrawLines()=: törtvonalat rajzol a megadott =Point[]= elemei közé
  • =DrawPath()=: kirajzolja a paraméterként megadott =GraphicsPath= objektum elemeit
  • =DrawPie()=: körcikket rajzol
  • =DrawPolygon()=: zárt törtvonalat rajzol a megadott =Point[]= elemei közé
  • =DrawRectangle()=, =DrawRectangles()=: téglalapo(ka)t rajzol
  • =DrawString()=: szöveget ír ki a megadott fonttal és ecsettel
  • A legtöbb =Draw= metódusnak van egy =Fill= párja, ami első argumentumaként =Pen= helyett
    Brush
    -t vár

=Pen= létrehozása

  • =new Pen(szín, vastagság)=
  • =SystemPens=: az aktuális Windows téma adott eleméhez kér le egy egység vastagságú pent.

Pl. =SystemPens.Highlight=

  • =Pens=: adott színnel hoz létre egy egység vastagságú pent.

Pl. =Pens.Red=

  • =Pen.DashStyle=: szaggatottság (=Solid=, =Dot=, =Dash=, stb.)
  • =Pen.StartCap=, =Pen.EndCap=: vonal végének stílusa (=Flat=, =Round=, =ArrowAnchor=, stb.)

=Brush= létrehozása

  • =new SolidBrush(szín)=
  • =HatchBrush= (vonalkázott), =LinearGradientBrush= (színátmenet két szín között), =PathGradientBrush= (színátmenet több szín között), =TextureBrush= (textúra)
  • =SystemBrushes=: az aktuális Windows téma adott eleméhez kér le egy ecsetet
  • =Brushes=: adott színű ecset létrehozása

Képek manipulációja

  • =System.Drawing.Image=: képek absztrakt ősosztálya. Támogatja a képek betöltését (=FromFile()=, =FromStream()=), átméretezését (=GetThumbnailImage()=), mentését (=Save(név, ImageFormat)=).
    • Konstruktor helyett a statikus =FromFile()=, =FromStream()= metódusokkal lehet példányosítani
    • Rajzolás rá: =Graphics.FromImage(image)=
    • Megjelenítés: =pictureBox1.BackgroundImage = image;=
    • A =GetThumbnailImage()= hibás file név esetén fura hibaüzeneteket

(pl.

OutOfMemoryException

-t) dob.

  • =System.Drawing.Bitmap : System.Drawing.Image=: bittérkép
    • Pixelek manipulációja: =GetPixel()=, =SetPixel()=
  • =System.Drawing.Imaging.MetaFile : System.Drawing.Image=: vektoros kép
  • =System.Drawing.Icon=:
    • Rajzolás: =Graphics.DrawIcon()=
    • Beépített ikonok: =SystemIcons=, pl. =SystemIcons.Question=

Szöveg kiírása

=graphics.DrawString(szöveg, Font, Brush, x, y)= vagy

graphics.DrawString(szöveg, Font, Brush, RectangleF, StringFormat)

  • =Brush=: a szöveget
    Brush
    -sal kell kiírni, nem
    Pen
    -nel.
  • =Font=: létrehozható pl. =new Font("Arial", 12)= hívással
  • =RectangleF=: floatokból összerakott téglalap. =Rectangle= → =RectangleF= explicit konverzió működik, visszafelé =Round()= metódust kell hívni.
  • =StringFormat.Alignment=: szöveg vízszintes igazítása (=StringAlignment.Near= = bal vagy felső, =StringAlignment.Far= = jobb vagy alsó, =StringAlignment.Center=)
  • =StringFormat.LineAlignment=: szöveg függőleges igazítása
  • =StringFormat.FormatFlags = StringFormatFlags.DirectionVertical=: függőleges szöveg
  • =StringFormat.FormatFlags = StringFormatFlags.NoClip=: ne vágja le a szöveg téglalapon kívülre eső részét

Egy összetettebb példa

private void pictureBox1_Paint(object sender, PaintEventArgs e) {
	 // üres fűszer címke betöltése
	 Bitmap fuszer1bpp = new Bitmap("fuszer.png");

	 // fekete-fehér kép konverziója 24 bitesre, hogy lehessen Graphics objektummal rajzolni rá
	 Bitmap fuszer = new Bitmap(fuszer1bpp.Width, fuszer1bpp.Height, PixelFormat.Format24bppRgb);
	 Graphics g = Graphics.FromImage(fuszer);
	 GraphicsUnit gu = GraphicsUnit.Pixel;
	 g.DrawImage(fuszer1bpp, Rectangle.Round(fuszer1bpp.GetBounds(ref gu)));

	 // felirat fontjának és helyének beállítása
	 Font font = new Font("Monotype Corsiva", 48, FontStyle.Italic);
	 StringFormat sf = new StringFormat();
	 sf.Alignment = StringAlignment.Center;
	 sf.LineAlignment = StringAlignment.Center;
	 Rectangle rect = panel1.ClientRectangle;
	 rect.Height -= 10;

	 // felirat rárajzolása a bitmapre
	 g.DrawString("Fahéj", font, Brushes.Black, rect, sf);

	 // bitmap megjelenítése a PictureBox-ban
	 pictureBox1.BackgroundImage = fuszer;
}

-- Peti - 2007.06.27.