[ bacter @ 17.12.2004. 22:22 ] @
Programirao sam aplikaciju u kojoj bi trebao koristiti ikone unutar menija, pored teksta, tacnije ispred teksta MenuItem-a. U MenuItem members nema opcije za dodavanje ikone pa me zanima da li neko od Vas zna kako da smjestim te ikone.
Bio bi koristan i link ako ne moze objasnjenje, engleski jezik nije problem.
Hvala unaprijed!
[ m.petrovic @ 18.12.2004. 00:07 ] @
Proces kreiranja menija u .Net-u nazalost ne podrzava standardno dodavanje ikona... Srecom, tu nam pomaze GDI+.

Dodavanje ikona se vrsi u tri koraka:

1. Podesi se OwnerDraw property za stavke menija na "true". Nakon ovoga jos uvek se moze videti meni u design okruzenju i menjati se, po zelji, njegov Text property.

2. Sada moramo videti koliko nam stavke u meniju zauzimaju prostora, kako bi smo unapred planirali prostor za stavku sa slikom (handl-ujemo MeasureItem event):

Code:
private void mnu_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e)
{
    // kreiras mnuItem koji predstavlja trenutnu stavku u meniju
    MenuItem mnuItem = (MenuItem)sender;

    Font menuFont = new Font("Tahoma", 8);

    // Izmeri se koliko je pixela potrebno da se prikaze tekst
    // Dodamo 30 piksela (u ovom slucaju) na sirinu kako bi smo ostavili prostora za sliku
    e.ItemHeight = (int)e.Graphics.MeasureString(mnuItem.Text, menuFont).Height + 5;
    e.ItemWidth = (int)e.Graphics.MeasureString(mnuItem.Text, menuFont).Width + 30;
}

Mozes koristiti ovaj jedan event handler za premeravanje svih stavki, odn. ne moras da pises poseban handler za svaku stavku u meniju posebno.

3. Iscrtamo tekst i sliku (DrawItem event):

Code:
private void mnu_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
    // kreiras mnuItem koji predstavlja trenutnu stavku u meniju
    MenuItem mnuItem = (MenuItem)sender;

    // Ovo je za "highlighted background" ukoliko je stavka selektovana
    // U suprotnom je default siva pozadina
    e.DrawBackground();

    // Preuzmemo sliku iz ImageList kontrole
    Image menuImage = imgMenu.Images[mnuItem.Index];

    // Iscrtamo sliku.
    e.Graphics.DrawImage(menuImage, e.Bounds.Left + 3, e.Bounds.Top + 2);
    // Iscrtamo tekst uz dodatu boju...
    e.Graphics.DrawString(mnuItem.Text, e.Font, new SolidBrush(e.ForeColor), e.Bounds.Left + 25, e.Bounds.Top + 3);
}



I to je to... Nadam se da ce pomoci. Ukoliko je nesto nejasno, pitaj...

[ NeznamTkoSam @ 18.12.2004. 16:47 ] @
http://www.codeproject.com/vb/net/vsnetstylemenusvb.asp