недеља, 27. децембар 2015.

MBS: Svaki sistem treba da ima Picture Editor


Većina programerskih primera i stvari kada učite programiranje ne obuhvataju mnogo slike jer rad sa slikama nije jednostavan kao sa drugim tipovima promenjivi. Svaka slika mora da se pretvori u binarni kod da bi se čuvala u bazi podataka i da se binarni kod pretvori u BitmapImage da bi se slika prikazala u Image kontroli. Da bi stvar bila još komplikovanija, Image kontrola u WPF nije isto što i PictureBox kontrola u Windows Form aplikacijama. Ali jedno je sigurno, danas skoro svaki sistem zahteva rad sa slikama i pošto ne želite stotine puta da pišete kod za unos slike neophodno je da od prvog Window-a napravite Picture Editor Window; koji će biti posrednik između slika koje hoćete da unesete u vaš sistem sa računara, ali i skladištenih slika u bazi podataka koje hoćete da snimite u vaš računar. Inače bez Picture Editor-a bi ste morali stalno ponovo pisati kod za ulaz i izlaz slike u sistem kad god je ona potrebna u celom sistemu. Ovako jednostavno pozovete Picture Editor gde god vam treba unos slike.

( Picture Editor window u MBS-u )

Kao što vidite na slici, Picture Editor Window u MBS-u je pravljen da mu izgled bude crne boje ali providan. Da bi ste to izveli neophodno je da podesite Window prvo na totalnu providnost:

WindowStyle="None"
AllowsTransparency="True"
Background="Transparent"

Rezultat toga je Window automatski gubi naslovnu traku i ControlBox opcije. Što znači da će te vi to morati isprogramirati. U mnogim kompanijama na poslovnim projektima ovakve stvari se ne rade jer poslovna logika nalaže da se prate standardi i da se vodi računa da neki ljudi ne vide baš jasno i sve boje. Međutim, vi programirate vaš sistem namenjen vama, kako god vi hoćete i bez podešavanja WindowStyle na None, vi ne možete napraviti providan Window. Izbor je samo na vama. Imajte samo u vidu kako Picture Editor Window jednom napravite, on takođe treba da ima isti stil za sve vaše programe koji su deo sistema. Druga bitna stvar,  MBS Window-i nisu zamišljeni da im se širina i dužina mogu razvlačiti, već zbog svoje lične ljubavi prema perfekciji, sve je fiksirano. MBS umesto Grid kontrola isključivo koristi Canvas kontrole gde se tačno zna na kojoj je svaki elemenat pozicioniran. Umesto ControlBox-a, MBS ima TextBlock kontrolu sa tekstom koji je sličan slovu T, ali je u pitanju jedan karakter iz Character Map-a. Vi naravno možete uvesti kakav god vi želite simbol čisto radi inovativnosti. Ili umesto karaktera koristi neku sliku. U MBS-u vi takođe možete kliknuti na simbol i desnim tasterom miša. Tada dobijate efekat minimiziranja Window-a. Sve je do vas kako ste vi to zamislili.

Kako da pomeram celi window i zašto dobijam grešku kad kliknem desnim tasterom miša?

MBS svakom Window-u obezbeđuje pomeranje celog Window-a, tako što kliknete levim tasterom miša na Window i držeći levi taster miša vi pomerate vaš Window po celom ekranu. Poenta MBS-a je da su svi njegovi Window-i fleksibilni i da odlično rade i sa ostalim programima u računaru. Mislim kad unosim neke informacije u sistem, npr. ja mogu istovremeno pored svog Window-a držati otvoren Internet browser i sa copy - paste unositi informacije u svoj sistem. U MBS-u Window-i trebaju da sve informacije unose što jednostavnije, sa minimalnom mogućnošću pravljenja grešaka prilikom unosa podataka. Da bi ste mogli pomerati vaš Window, unesite sledeći kod i nećete imati grešku:
 
private void Canvas_MouseDown(object sender, MouseButtonEventArgs e)
{
// You must check is there mouse left button clicked or DragMove() will make error
       if (Mouse.LeftButton == MouseButtonState.Pressed) DragMove();

}

Jednostavno morate proveriti da li je taster levog miša pritisnut pre nego izvršite pomeranje Window-a. MBS pored providnog Window-a i improvizovanog ControlBox-a sadrži i Image kontrolu za sliku koja će predstavljati ikonu, zatim TextBlock za naslov Window-a, Image kontrolu za sliku koju unosite ili iznosite iz sistema i 4 dugmadi. Stilove za dugmad trebate pisati u posebnom xaml fajlu samo za vaše stilove i taj fajl trebate da pozivate iz App.xaml fajla, ovako:

<Application.Resources>
        <ResourceDictionary Source="MbsStyle.xaml" />

</Application.Resources>

Tako, kad vam trebaju ponovo stilovi u drugom projektu, vi samo kopirate fajl sa stilovima u svoj projekat i pozovete ga u vaš program. Stilovi se piše samo jednom, ali se mogu menjati i prepravljati kako god vi želite. Nemojte da mešate DataTemplate sa stilovima i da njih pišete u fajl sa stilovima.

Kako da pišem stilove?

Na Internetu imate već napisanih stilova koje možete samo uključiti u vaš projekat. MBS sadrži svoje vlastite koje su još u izradi. Sa novim projektima i kontrolama u MBS-u dolaze i novi stilovi. Međutim da bi ste vi pravili svoje stilove, neophodno je da već imate napisan neki kod nekog stila prema Microsoft standardima, zatim mu menjati boje koje želite. Jedino tako vam se neće dešavati da vam je na primer ListBox u vašem sistemu providan u Window-su 7 dok u Windows-u 8.1 nije. U MBS-u stil za dugmad definiše pored providnosti dugmadi, okvira dugmadi i posebne Trigger-e. Npr. natpis na dugmetu mora biti crvene boje ako je dugme nedostupno. Takođe kad kursor miša prelazi preko dugmadi, pozadina dugmeta je zelene boje što naglašava da se dugme može kliknuti. Da se razumemo, ukoliko vi savladate i koristite Bland for Visual Studio 2015, vaši stilovi mogu biti profesionalni i animirani poput igrica. Tada jednostavno kopirate stil koji ste napravili i animirali u vašu datoteku sa stilovima. Tada ne pišete kod za stilove. MBS za početak koristi i kodira stilove ali u budućnosti su moguće promene. MBS je sistem koji se često menja. 



( Stil za dugmad boje natpis u crveno kad nisu dostupna )

Picture Editor na pritisak dugmeta Add, otvara OpenFileDialog i moguće je otvoriti slike *.bmp *.jpg i *.png formata. Takođe Save dugme može da usnimi sliku na računar u svim navedenim formatima. MBS za početak pretpostavlja da će raditi samo sa tri navedena Image formata i da mu drugi nisu potrebni. Dugme Delete briše sliku sa Image kontrole, podešava auto propertije na ništa, dok dugme OK zatvara window ali kao Dialog Window. Celi Picture Editor Window je Dialog Window jer se nikad ne poziva samostalno, već samo kad ga pozove neki drugi Window

private void buttonOk_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;

}      

Ovo ne važi za zatvaranje Window-a klikom levim tastera miša na improvizovani ControlBox. On uvek koristi metodu Close() bez obzira da li se radi o Dialog Window-u. MBS sadrži uglavnom Dialog Window-e.

Kako misliš, podešava auto propertije na ništa? 

Svaki Picture Editor treba da sadrži najmanje 4 javna propertija. Ona vam služe da pošaljete i da prihvatite sliku od Window-a koji poziva Window. Kao što sam već naveo Image kontrola nije PictureBox kontrola iz Windows Form-i i definitivno ne možete uzeti sliku iz Image kontrole kao što možete iz PictureBox-a. Image kontrola samo prikazuje sliku i ništa više. Čak joj treba dodavati i okvir.

// Properties for transfer the image and limiting the size of the image
public BitmapImage ImageSend { get; set; }
public BitmapImage ImageReceive { get; set; }
public int ImageHeight { get; set; } = 500;
public int ImageWidth { get; set; } = 500;

Pored slanja slike vi trebate da šaljete i koliko je dozvoljena dimenzija slika u pikselima. MBS ne dozvoljava tamo gde vam treba slika 500 x 500 piksela, da stavite sliku veći dimenzija. Auto propertiji koje vidite su pisani u C# 6.0 tako da im možete dodeliti vrednosti, u navedenom slučaju defaultna vrednost je 500 x 500 kao minimalna vrednost, mada u sistemu je ona 0 x 0. Ne dozvoljava nikakav unos slike ako Picture Editor nije pozvao neki drugi Window. Vi možete vašem Picture Editor-u dograditi i druge razne korisne mogućnosti poput zoom-iranja slike, rotiranja, pretvaranja slike u crno belu, mogućnost rezanja slike i što god želite. MBS ide od pretpostavke da vi u sistem unosite slike koje su već obrađene u Photoshop-u jer Photoshop je za mene savršen program za obradu slika.

Srećno sa programiranjem!