[ anakin14 @ 12.04.2011. 19:19 ] @
u vba je bio application.screenupdating true/false

kada hocete da sakrijete neki proces.

Kako to izvesti u VB .net?

Hteo sam da mi glavna forma ima oppacity na 70% ali da mi controle nemaju, i to sam izveo tako sto prvo zovem glavnu formu koja je prazna i ima opacity 70% a posle nje odmah zovem drugu formu koja je transparentna preko prve forme i na njoj su kontrole. To je jedini nacin da se izvede da forma bude poluprovidna a kontrole ne, medjutim prilikom startovanja hocu da izbegnem flashiranje zbog toga sto se forme pojavljuju jedna za drugom.]

kako da ovo izvedem?

puno hvala!!!
[ mish_ns @ 12.04.2011. 19:35 ] @
Jesi probao ovo:

http://www.vbforums.com/showthread.php?t=596609

Javi jel uspelo.
Pozdarv
[ anakin14 @ 12.04.2011. 19:44 ] @
ali to je za opacity 0 - da forma bude kompletno transparetna. meni treba da forma bude poluprovidna - opacity 70% a da controle ne budu.
[ mish_ns @ 12.04.2011. 19:59 ] @
Hmm. A jesi probao da umesto 0 stavis 0.70. Jel to utice i na formu i na kontrole?
[ Shadowed @ 12.04.2011. 22:02 ] @
Zeznuto je izvesti to sto hoces. Mozes ili preko API-a praviti per-pixel alpha ili raditi aplkaciju kao WPF pa iskljuciti border i staviti allowtransparency na true. Onda mozes da se zezas kako hoces (ali neces imati title bar i one dugmice za minimize, maximize i close, moraces ih sam praviti).
[ anakin14 @ 13.04.2011. 00:39 ] @
Citat:
mish_ns: Hmm. A jesi probao da umesto 0 stavis 0.70. Jel to utice i na formu i na kontrole?


opacity u vb-u utice na sve, i na controle i na formu tako da je to nemoguce.

Citat:
Shadowed: Zeznuto je izvesti to sto hoces. Mozes ili preko API-a praviti per-pixel alpha ili raditi aplkaciju kao WPF pa iskljuciti border i staviti allowtransparency na true. Onda mozes da se zezas kako hoces (ali neces imati title bar i one dugmice za minimize, maximize i close, moraces ih sam praviti).


pa i ovako sam iskljucio border, nije mi potreban, hocu da simuliram full screen, ali opet nemoguce je staviti poluprovidnost na formu a controle na toj istoj formi da budu neprovidne.

moje pitanje je kako da na onaj nacin na koji sam izveo izbegnem da korisnik gleda crtanje jedne pa druge forme nego da se to preskoci i prikaze odjednom.
[ Shadowed @ 13.04.2011. 07:24 ] @
Ne znam odgovor na tvoje konkretno pitanje, ali ono sto hocu da ti kazem je da jeste moguce ono sto si prvobitno hteo.

[att_img]
[ anakin14 @ 13.04.2011. 11:09 ] @
@Shadowed

Da, to je upravo ono sto trazim, a u brzini citanja nisam video da di pricao o WPF aplikaciji.
[ Shadowed @ 13.04.2011. 11:30 ] @
Dakle, ako ti nije problem da koristis WPF, a ne bi trebalo da bude - na toj slici ti je i primer kako da uradis (imas kod pokazan). Bitno je samo da boji dodas alfa deo. Na slici je malo odseceno, boja je #808080a0. Prve dve cifre su alfa u hex-u (dakle, ovo je 50% providno).
[ anakin14 @ 13.04.2011. 15:58 ] @
ako moze samo jos jedno brzo pitanje posto vidim da radis sa WPF-om

kako da namestim da mi bude windowstate bude maximized, da nemam border, ali da mi forma ne prelazi preko taskbara. Znaci fakticki maximized forma ali ne fullscreen.
[ Shadowed @ 13.04.2011. 16:53 ] @
Ne znam da li ces to moci. To nema veze sa WPF-om i uopste tvojim programom vec sa taskbar-om koji u toj situaciji pretpostavlja da applikacija hoce fullscreen pa se sam skloni.
[ anakin14 @ 13.04.2011. 16:55 ] @
ne skloni se, glavna forma je transparentna pa se task bar vidi ispod, ali ga je aplikacija prekrila/
[ Shadowed @ 13.04.2011. 18:34 ] @
Na to sam mislio, skloni se iza :)
[ Boris B. @ 16.04.2011. 10:57 ] @
U wpf-u koristi SystemParameters.WorkArea, to ti vrati pravougaonik koji predstavlja korisnu povrsinu desktopa (fullscreen minus taskbar i dokovani prozori). U winformsu koristi Screen.WorkingArea. Postavi onda samo left, top, width i height tvog glavnog prozora na odgovarajuce parametre tog pravougaonika.
[ anakin14 @ 17.04.2011. 15:11 ] @
odlicno, to mi je trebalo.

Ali kako sad da obavestavam program o tome da sam pomerio taskbar da bi refreshovao kod kojim se on prilagodjava tom pravougaoniku.
Ono sto sam uspeo je da prilikom inicijalizacije pocetnog prozora da ga namestim kako treba, ali sta sad kada korisnik u toku rada programa pomera taskbar ili ga resize-uje?
[ Boris B. @ 17.04.2011. 17:09 ] @
Za maksimizovane forme se okida Layout event kada se workingarea promeni, ali kao sto si napisao ne koristis maksimizovu formu.

Mislim da ne postoji nikakav direktan nacin da pratis promene radne povrsine. Probaj da se nakacis na evente kao sto su Moved, Resized, itd. pa vidi koji se okida kada pomeras taskbar. Ako ti nista ne pomogne napravi jednostavan thread koji proverava workingarea i ako se promenio okida sinhronizovani event (i obavezno Sleep( > 0) da ti ne pojede sve cikluse procesora).

I pazi na jos jednu stvar, a to je da ne zoves direktno iz moved/resized i slicnih eventova bilo sta sto pomera/resizuje formu, nego koristi nesto kao BeginInvoke(new Action( ()=> { Size = newsize; Location = newloc });)

[ anakin14 @ 19.04.2011. 15:24 ] @
Code:

    Private Sub MainWindow_LayoutUpdated(sender As Object, e As System.EventArgs) Handles Me.LayoutUpdated
        w1.Left = SystemParameters.WorkArea.Left
        w1.Top = SystemParameters.WorkArea.Top
        w1.Height = SystemParameters.WorkArea.Height
        w1.Width = SystemParameters.WorkArea.Width

    End Sub

    Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        w1.Left = SystemParameters.WorkArea.Left
        w1.Top = SystemParameters.WorkArea.Top
        w1.Height = SystemParameters.WorkArea.Height
        w1.Width = SystemParameters.WorkArea.Width

    End Sub


interesantna stvar da mi promena kasni za jedno resizovanje taskbara.

Znaci kada startujemo aplikaciju, prozor se uglavi tacno kako treba
kada promenimo prvi put poziciju taskbara, nista se ne desava
kada promenimo drugi put poziciju taskbara , prozor se promeni u velicinu u koju je trebao prvi put da se promeni.
i tako dalje, uvek kasni za jednu "promenu"

a ne razumem cemu sluzi LAyoutupdated za maximizovane forme, jer cim je maximizovana taskbar je otisao ispod i nista ne moze da se promeni?
[ Boris B. @ 20.04.2011. 08:41 ] @
Izgleda da se prvo se okida LayoutChanged pa tek onda azuriraju vrednosti u SystemParameters. Probaj sa ovim:

Code:

    Private Sub MainWindow_LayoutUpdated(sender As Object, e As System.EventArgs) Handles Me.LayoutUpdated
        BeginInvoke(New InvokeDelegate(AddressOf UpdateLayout))
    End Sub


    Private Sub UpdateLayout()
        w1.Left = SystemParameters.WorkArea.Left
        w1.Top = SystemParameters.WorkArea.Top
        w1.Height = SystemParameters.WorkArea.Height
        w1.Width = SystemParameters.WorkArea.Width
    End Sub


BeginInvoke bi trebalo da doda pozivanje UpdateLayout delegata na kraj message loopa.

Citat:
anakin14: a ne razumem cemu sluzi LAyoutupdated za maximizovane forme, jer cim je maximizovana taskbar je otisao ispod i nista ne moze da se promeni?

To je cudno, ako taskbar nije na autohide maksimizovana forma ne bi trebalo da je preko taskbara. Jel imas mozda TopMost=true ili sl?
[ anakin14 @ 21.04.2011. 12:23 ] @
Citat:
Boris B.: Izgleda da se prvo se okida LayoutChanged pa tek onda azuriraju vrednosti u SystemParameters. Probaj sa ovim:

Code:

    Private Sub MainWindow_LayoutUpdated(sender As Object, e As System.EventArgs) Handles Me.LayoutUpdated
        BeginInvoke(New InvokeDelegate(AddressOf UpdateLayout))
    End Sub


    Private Sub UpdateLayout()
        w1.Left = SystemParameters.WorkArea.Left
        w1.Top = SystemParameters.WorkArea.Top
        w1.Height = SystemParameters.WorkArea.Height
        w1.Width = SystemParameters.WorkArea.Width
    End Sub


BeginInvoke bi trebalo da doda pozivanje UpdateLayout delegata na kraj message loopa.


To je cudno, ako taskbar nije na autohide maksimizovana forma ne bi trebalo da je preko taskbara. Jel imas mozda TopMost=true ili sl?


tvoj code ne radi u WPF-u

posto jos ne poznajem wpf dobro probao sam da ga zamenim sa:
Code:

 Private Sub MainWindow_LayoutUpdated(sender As Object, e As System.EventArgs) Handles Me.LayoutUpdated
        w1.Dispatcher.BeginInvoke(New Action(AddressOf UpdateLayout))
    End Sub


    Private Sub UpdateLayout()
        w1.Left = SystemParameters.WorkArea.Left
        w1.Top = SystemParameters.WorkArea.Top
        w1.Height = SystemParameters.WorkArea.Height
        w1.Width = SystemParameters.WorkArea.Width
    End Sub

   


i opet radi isto, uvek kasni za jednu promenu

a sto se tice maximizovane forme, nije topmost ali cudna se stvar desava
kada se windowstate stavi na normal, i forma maksimizuje na dugme onda ne predje preko taskbara, ali kada se windowstate stavi na maximized a pritom iskljuce dugmici za minimize i maximize forma ode preko taskbara. Verovatno to odredjuje borderstyle, posto ja zelim da ga podesim na "none" a da mi pritom maximize form ne predje preko task bar-a

[Ovu poruku je menjao anakin14 dana 21.04.2011. u 16:18 GMT+1]
[ Boris B. @ 23.04.2011. 11:11 ] @
Hmm, izgleda da se azuriranje systemparametars desi bas daleko od layoutchanged. Probaj ovo dole, sigurno radi:
Code (csharp):

        private void WindowLayoutUpdated(object sender, EventArgs e) { UpdateLayout(); }

        public void UpdateLayout()
        {
            new Thread(() =>
                       {
                           Thread.Sleep(100);
                           Dispatcher.Invoke(new Action(() =>
                                                             {
                                                                 Width = SystemParameters.WorkArea.Width;
                                                                 Height = SystemParameters.WorkArea.Height;
                                                                 Left = SystemParameters.WorkArea.Left;
                                                                 Top = SystemParameters.WorkArea.Top;
                                                             }));
                       }).Start();
        }
 


Prevedi samo u VB
[ anakin14 @ 23.04.2011. 11:53 ] @
Code:
 Private Sub MainWindow_LayoutUpdated(sender As Object, e As System.EventArgs) Handles Me.LayoutUpdated
        UpdateLayout()
    End Sub


    Private Sub UpdateLayout()


        Thread.Sleep(100)
        Dispatcher.Invoke(New Action(Function()
                                         w1.Left = SystemParameters.WorkArea.Left
                                         w1.Top = SystemParameters.WorkArea.Top
                                         w1.Height = SystemParameters.WorkArea.Height
                                         w1.Width = SystemParameters.WorkArea.Width
                                     End Function))
    End Sub


nadam se da sam samo preveo kako treba, jer je wpf isto malo razlicit od vb.net

ovaj kod radi ali opet kasni.
[ Boris B. @ 23.04.2011. 20:14 ] @
Ne radi jer ti fali thread, nisi dobro preveo:
Code:

Thread.Sleep(100)
    Private Sub MainWindow_LayoutUpdated(sender As Object, e As System.EventArgs) Handles Me.LayoutUpdated
        Dim thread as New Thread(AddressOf UpdateLayout)
        thread.Start()
    End Sub


    Private Sub UpdateLayout()
        Thread.Sleep(100)
        Dispatcher.Invoke(New Action(Function()
                                         w1.Left = SystemParameters.WorkArea.Left
                                         w1.Top = SystemParameters.WorkArea.Top
                                         w1.Height = SystemParameters.WorkArea.Height
                                         w1.Width = SystemParameters.WorkArea.Width
                                     End Function))
    End Sub



Ne znam VB, proveri ono Dim...., mozda radi samo sa thread = New...
[ Shadowed @ 23.04.2011. 20:20 ] @
Dim Variable As New MyType()
i
Dim Variable = New MyType()
i
Dim Variable
Variable = New MyType()

Su ista stvar. Bar koliko se ja secam VB-a :)
[ anakin14 @ 23.04.2011. 23:58 ] @
opet isto - radi ali kasni.

Hvala vam puno, ici cu na maximized pa kud puklo!

by the way - uopste mi nije jasno zasto se vb u winformsu i u wpf-u razlikuju? da li se i c# razlikuje?
[ Shadowed @ 24.04.2011. 01:10 ] @
Kako se VB razlikuje? o_O
[ anakin14 @ 24.04.2011. 12:03 ] @
razlikuje se i to dosta, ne moze se prosto kopirati kod iz VB winforms u VB wpf.
primer je i na pocetku ove teme:
u wpf-u se koristi SystemParameters.WorkArea
a u winforms-u Screen.PrimaryScreen.WorkingArea

nije sintaksa jezika razlicita, ali su kontrole itekako razlicite
[ Shadowed @ 24.04.2011. 13:26 ] @
Sad je jasnije sta si mislio. Samo se koriste razlicite klase, sto je i normalno. Sam VB je isti. Isto vazi i za C#. S' tim da u C#-u kada radis u WPF-u koristis iste klase koje koristis i u VB kada radis u WPF-u. Isto vazi i za WinForms.
Inace, mozes ti korititi iste klase i u wpf-u. Samo dodaj odgovarajuce reference na projekat. Mozes cak i kombinovati WPF i WinForms. OK, ovo poslednje mozda nisam trebao da ti kazem :]
[ anakin14 @ 24.04.2011. 14:09 ] @
:D

definitivno nisi trebao ovo poslednje da mi kazes :)
[ Boris B. @ 24.04.2011. 17:35 ] @
Kako bre opet kasni? Jel si stavio ono thread.Start? Probaj da povecas Thread.Sleep(100) na npr. Thread.Sleep(1000). Radi 100% napravio sam ceo projekat i probao, doduse u c#.