HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Vonszolható ikon kontrol készítése


Példaprogram letöltése

20937 bájt

A Windows rendszer jól ismert és számtalan formában használatos elemei az ikonok. Miért ne használhatnánk hasonló megoldásokat alkalmazásainkban is? Cikkünkben elkészítünk egy kontrolt, mely azonos funkciókkal és tulajdonságokkal rendelkezik, mint egy Windows-os ikon: vonszolható, felirata módosítható, valamint az ikon által megjelenített kép tetszőleges képpel helyettesíthető.

A mellékelt alkalmazásban a kontrolunk a Panel kontrol keretein belül tetszőleges helyre vonszolható, a kontrolra jobb egérgombbal kattintva a felirata módosítható, valamint új kép helyezhető el az eredeti kép helyére. Ehhez a Form nyomógombjára kell kattintani, és a felbukkanó Open File ablakban megkeresni a kívánt képet.
A kontrol property-jei
A kontrol a következő tulajdonságokkal rendelkezik, melyeket szerkesztési időben is elérhetünk.
  • Text: a kontrol felirata, mely alapesetben a Name property értéke.
  • Image: a megjelenített kép.
  • ImageList: a kontrolhoz rendelhető képlista.
  • ImageIndex: a kontrolhoz rendelt képlista itt megadott indexű eleme lesz a megjelenített kép.
A kontrol feliratának módosítása
A kontrol feliratának módosításához egy saját osztályú kontrolt használunk, az osztály neve MyTextBox. A szövegmező kontrol az ikon kontrolunk feliratának a helyén jelenik meg, addig rejtve marad.
A szövegmező kontrol figyeli, hogy ENTER-t, vagy ESC billentyűt ütöttük-e le, és ennek megfelelően frissíti, vagy veti el a változtatásokat.
A felirat javításakor úgy járunk el, hogy a szövegmező pontosan a kontrol feliratának területe fölött jelenjen meg. A megjelenéskor a Text property-jének értéke az eredeti felirat lesz, míg a mező eltüntetésekor a mezőben megadott szöveg lesz adott esetben a felirat.
A kontrol metódusai
A kontrol rendelkezik néhány belső függvénnyel, melyeket az eseménykezelőkben használunk. Lássuk ezek jellemzőit sorban.
  • ImageDuringDrag: a függvény egy kissé változtat a kontrol által megjelenített képen vonszolás közben. Nem teszünk mást, mint kicsit elhalványítjuk a képet a vonszolás ideje alatt. Ekkor úgy járunk el, hogy a betöltött képet pixelenként lekérdezzük, és a pixelek színének egyik összetevőjének értékét – ahol lehet – 128-cal csökkentjük.
  • SetImage: a metódusban megvizsgáljuk, hogy a betöltendő kép tulajdonságai megfelelnek-e a szükséges követelményeknek, és elhelyezzük azt a kontrolban.
  • SetRegion: a metódusban felosztjuk a kontrol felületét részterületekre (régiókra), melyek majd a képet és a feliratot tartalmazzák.
  • NewSize: a függvényt mindig meghívjuk, amikor csak módosítjuk a kép feliratát, vagy a megjelenített képet. A metódusban a képet a kontrol felső, a feliratot pedig a kontrol alsó szegmensébe igazítjuk.
A kontrol rendelkezik egy sor eseménykezelővel, melyek közül talán az OnPaint eseménykezelő a legfontosabb a megjelenítés szempontjából. Ebben a metódusban csak azt vizsgáljuk, hogy a kontrol engedélyezett-e vagy sem. Amennyiben az Enabled property értéke TRUE, akkor a Graphics osztály DrawImage és DrawString metódusaival, ellenkező esetben a ControlPaint.DrawImageDisabled és ControlPaint.DrawStringDisabled metódusokkal rajzoljuk ki a feliratot és a képet.
g.DrawImage(bmp,imagerect.Location);
...
g.DrawString(Text,Font,new SolidBrush(SystemColors.HighlightText),textrect,sf);
Vagy pedig:
ControlPaint.DrawImageDisabled(g,bmp,(int)imagerect.X, (int)imagerect.Y,BackColor); ControlPaint.DrawStringDisabled(g,Text,Font,SystemColors.GrayText,textrect,sf);
A vonszolás kezdetekor az OnMouseDown eseménykezelőben beállítunk egy Offset értéket, mely a kurzor pozíciójának aktuális értéke, az egyes koordinátákat negatív előjellel megadva.
offset = new Point(-e.X,-e.Y);
Az OnMouseMove metódusban ezeket használjuk fel a pozíció meghatározásához.
Point p = Parent.PointToClient(MousePosition);
p.Offset(offset.X,offset.Y);
Location = p;
Ennek eredményeképpen a kontrol megragadásakor az egér mozgását követve valósul meg a vonszolás.

Cikksorozat



Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 612. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |