[ unisoft @ 09.12.2008. 02:26 ] @
Mene zanima kako da promenim boju ( inace standardna boja je PLAVA ) menia.Mislm na meni koji se pravi Menu Editora ( ovako se zove kontrola u VB 6 ) ili preko MenuStripa ( ovako se zove kontrola u VB 2008 Visual Studia 2008 ) .Kada napravimo bilo kakav meni - kada FOCUS ima odreceno polje menia ONO SE BOJI PLAVOM BOJOM. ( ovako je kod svih programa.Na primer kada kliknemo na meni FILE programa Word,Excel,Internet Explorer,VB ... oni se boje plavo - njihova pozadina )

E mene zanima da li ta boja moze nekako da se promeni.Da li se ona menje svojstvima meni-a ili vec to mora da se odradi codom.Ako mora zamolio bih nekoga ko to zna da mi to odradi ili barem meni da da neka usmerenja kako se to radi.Ja cu pokusati da to uradim sa ( 'usmerenjima') ,jer sam jos uvek kako ja smatram pocetnik.Dobro u odnosu na one koji nikada nisu videli VB a i ne znaju sta je VB za njih sam PROFESIONALAC !!! .


Ako nije probelm da mi to objasnite kao se radi u Vb 6 i u VB 2008 .Ovo kazem jer postoji dosta razlika izmedju ove dve verzije programa - ne samo u svojstvima ( propertis ) neke kontrole vec i u programiranju samih kontrola.Ja sam se u ovo uverio mnogo puta iako sam pocetnik jos uvek - barem tako smatram u VB .

Toliko od mene do sledeceg problema kojeg budem imao.
Pozdrav !!! i moderatori forum vam je ekstra

[Ovu poruku je menjao unisoft dana 09.12.2008. u 03:38 GMT+1]
[ Nevena79 @ 10.12.2008. 04:41 ] @
Mozda je i izvodljivo tako nesto, ne znam ali to se obicno podesava u Windows-ovim postavkama. Desni klik na desktop--> Properties --> Appearance i tu podesavas takve stvari, e sad u kodu...ne znam kako mada u sustini sve je u programiranju moguce.
[ unisoft @ 11.12.2008. 02:06 ] @
Pazi ovako mozda me ti nisi razumela ne pravim ja meni kao sto imamo na taskbaru kada kliknemo na START u Windows operativnim sitemima.Ja mislim na MENI bilo kog programa.On se nalazi u TOP algiment toga programa ... kao sto su FILE,EDIT,VIEW,FAVORITES,TOOLS,HELP ( ovako je u IE7 )

Pazi meni treba EXE fajl.Zato sto ce se on pokretati na nekom drugom racunaru gde nema instaliran VB vec samo operativni sistem ima ugradjen EXE citac. ( to mu dodje nesto kao PDF citac za PDF dokumente a u ovom slucaju je citac za EXE).Meni ne treba da bude plave boje-na primer ja hocu da mi pozadina bude crvene boje ali na svim racunarima na kojima se pokrece.

Kao sto zanmo svaki korisnik racunara voli da podesi na primer datum i vreme u obliku koji on zeli -- dd,mm,yy HH,mm,ss i ovde postji bezbroj kombinacija.To svi znamo.E sada pozadine MENI-a mogu se menjati preko tema koje instaliramo na svom racunaru.Ali te teme menjeju pozadine svih MENI_a.

Na primer ne bi bilo zgodno da ako pravimo neki program da meni PREGLED,STAMPAJ ( poznatije FILE , VIEW , TOOLS )... budu iste boje to jest njihove pozadine .Kada kliknemo na meni File pojavi se padajuca lista sa OPEN,SAVE,SAVE AS,PRINT .

Kada bilo ko ima FOCUS , dal OPEN, SAVE ... da podesim da imaju razlicite boje.U Windows,Internet Explorer 7 kada kliknemo na meni FILE otvori se padajuca lista i kako pomeramo misa preko OPEN,SAVE... imaju kao pozadu plave boje pravugaonik....

Meni treba da kada ja taj moj program sauvam u EXE i na bilo kom racunaru ga pokrenem pozadina menia ostane ista.


Gore sto sam spomenuo problem vezan za datum i vreme resavamo sledecim kodom - E SADA DA SE MOZDA NEKAKO SLICNO NE RESAVA I OVAJ MOJ PROBLEM SAMO SA DRUGIM KODOVIMA ZA BOJU POZADINE


For example:

Format (#17/04/2004#, "Short Date") would return '17/04/2004'
Format (#17/04/2004#, "Long Date") would return 'April 17, 2004'
Format (#17/04/2004#, "yyyy/mm/dd") would return '2004/04/17'



VBA Code
The Format function can be used in VBA code. For example:

Dim LValue As String

LValue = Format (now(), "yyyy/mm/dd") OVDE SMO UMESTO NOW() mogli da koristimo i dateadd ako zelimo za neki drugi broblem ...

Licno sam ovo isprobao i funkciija- kod je 100% ispravan,radi

e sada ovo promenljivu LValuve dodelimo necemu sto mi zalimo da nam prikazuje vrem i datum u obliku koji mi zelimo bez obzira na podesavanja racunara.

Ja sam ovo na primer dodeli LABEL1 kontroli na formi.

Label1.text=LValue



POMOC !!!
[ stefanpn @ 11.12.2008. 09:10 ] @
Quote: "...operativni sistem ima ugradjen EXE citac..." - LOL

Baci pogled na ...wikipedia.org/wiki/Executable, ...wikipedia.org/wiki/EXE ili ...wikipedia.org/wiki/Executable_and_Linkable_Format.

E sad posto si naucio nesto o izvrsnim datotekama, evo ti primera:

Code:


' Treba ti forma, dugme ( na koje ces kasnije da kliknes :) ), jedna stavka u meniju i jedna u podmeniju

Option Explicit
 
Private Const MIM_BACKGROUND As Long = &H2

Private Const MIM_APPLYTOSUBMENUS As Long = &H80000000
Private Type MENUINFO

    cbSize As Long

    fMask As Long

    dwStyle As Long

    cyMax As Long

    hbrBack As Long

    dwContextHelpID As Long

    dwMenuData As Long

End Type

Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function SetMenuInfo Lib "user32" (ByVal hMenu As Long, mi As MENUINFO) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
       
Private Sub Command1_Click()

Dim mi As MENUINFO

    With mi

        .cbSize = Len(mi)

        .fMask = MIM_BACKGROUND

        .hbrBack = CreateSolidBrush(&HFF) ' <-Ovde menjas boju za glavni meni

        SetMenuInfo GetMenu(Me.hWnd), mi

        .fMask = MIM_BACKGROUND Or MIM_APPLYTOSUBMENUS

        .hbrBack = CreateSolidBrush(&HFFFFFF) '<- Ovde za podmeni

        SetMenuInfo GetSubMenu(GetMenu(Me.hWnd), 0), mi

    End With

    DrawMenuBar Me.hWnd

End Sub



"Pravljenje" izvrsne (EXEcutable) datoteke se naziva kompajliranje.
VB6 i VB2008 su jako razliciti da si pitanje za 2008-icu trebao da postavis u .NET forumu.
[ unisoft @ 11.12.2008. 10:15 ] @
OK.Hvala na odgovoru ali mogu li ta te zamolim za SAMO JOS JEDNU STVAR.Dobro nisam bas tek pocetnik,po dosta sam odmako od toga ali ovo je ...

pa te zbog toga molim DA EDITUJES TVOJ POST AKO TI NIJE PROBLEM I DA MI ISPOD SVAKOG REDA KODA NAPISES STA RADI,ZA STA SLUZE TE FUNKCIJE KOJE SI KORISTIO U TOM REDU KODA ....

Molim te samo jos ovo da mi uradis jer kao sto sam pisao u ranijim postovima kojima sam postavljao MENI NIJE CILJ DA JA SAMO OVO PREKOPIRAM U MOJE KODOVE_MOJ PROGRAMCIC VEC MI JE CILJ DA OVO RAZUME I DA UMEM DA VRSIM PREPRAVKE - a naravno ako se budu javljali neki problemi da ih uspesno otklonim.

Neko bi rekao covek mu dzabe uradio,ovaj mu nista nije platio,niti ja tebe znam a ni ti mene ,A ON MU TRAZI JOS.
Hvala tebi jos jednom sto si mi ovo odradio ALI MENI KAO POCETNIKU U VB OVO NE ZNACI MNOGO JER OVO JA NISTA NE RAZUMEM.Poznate su mi neke stvari ako deklarsianje promenljivih,funkciju LEN znam iz Excela,znam za sta sluzi Option Explicit,a sve ovo ostalo je za mene NEPOZNATO.

PA TE MOLIM DA ZBOG TOGA EDITUJES TVOJ POST I ISPOD SVAKOGA REDA KODA NAPISES PO MOGUCSTVU DETALJNIJE OBAVESTENJE.ovo ce sigurno trebati i nekim drugim forumasima pa da mogu i oni da se snadju.

A da jos samo jedna stvar : dobro ne smatram sebe za nekog velikog matematicara ali ovo sto si ti mi napisao prelazi moju LOGIKU.Mene zanima kako si ti stefane ovo uspeo da napises.Iz koje si knjige ovo naucio da radis.Milsim da ces razumeti sa ovim pitanjem sta sam te pitao ...

Pozdrav i hvala ti mnogo jos jednom.zzzz
[ stefanpn @ 11.12.2008. 11:37 ] @
Nisam procitao ni jednu jedinu knjigu napisanu o Visual Basicu. Ja sam ucio eksperimentisanjem i analiziranjem raznih primera, poceo sam sa verzijom 4.0. Basic sam vec poznavao od ranije (QBasic, C64 i Spectrum) tu sam procitao po nesto ali se ne secam naslova bio sam 3. ili 4. razred osnovne skole.

API funkcije ces najlakse pohvatati uz pomoc API-GUIDE-a (dosta primera) ili API Text Viewer-a koji dolazi uz Visual Studio 6.

Posto deklarisanje promenljivih znas, ovako deklarises [url=http://sr.wikipedia.org/sr-el/funkcija_(programiranje)]funkcije[/url] koje pozivas iz dinamickih biblioteka:

Code:

Private Declare Function [function name] Lib [library] ([arg1], [arg2]) As [return type]


Biblioteka i f-ja u njima ima puno, tako da bi najbolje bilo da preuzmes neku dokumentaciju sa interneta, Googlaj malo.

Code:


    ' Predpostavljam da ti ovaj deo nije jasan

    With mi '<- 1*

        .cbSize = Len(mi) ' <- Broj bajtova koji su nam potrebni da bi sacuvali promenjivu (u ovom slucaju tip) smesta u polje mi.cbSize
        .fMask = MIM_BACKGROUND ' mi.fMask je maska koja pokazuje na sta ce se odnositi sledeca operacija

        .hbrBack = CreateSolidBrush(&HFF) ' Posto WIN32 API radi malo drugacije nego sam VB6,
ne mozemo direktno upisati vrednost za odredjenu boju vec moramo napraviti "cetku" koja ce sadrzati informaciju o boji.

        SetMenuInfo GetMenu(Me.hWnd), mi ' Vrednost mi cemo prekopirati na meni koji se nalazi na formi sa handle-om Me.hWnd
        
        ' Dalje se sve ponavlja, samo za podmenije.
        
        .fMask = MIM_BACKGROUND Or MIM_APPLYTOSUBMENUS ' <- Predpostavljam da ti je http://en.wikipedia.org/wiki/Or - logicka disjunkcija[/url] poznata
        .hbrBack = CreateSolidBrush(&HFFFFFF) ' Umesto hexa vrednosti mozes koristiti funkciju RGB([rr], [gg], [bb]) ako ti je lakse da radis tako.

        SetMenuInfo GetSubMenu(GetMenu(Me.hWnd), 0), mi

    End With

    DrawMenuBar Me.hWnd

End Sub



1* Statement block to allow implicit access to fields in a user defined type variable

Syntax

Code:

With user_defined_var

    statements

End With


Description

The With...End With block allows the omission of the name of a user defined variable when referring to its fields. It's a shorthand to save typing and avoid cluttering the source. With can also be used with dereferenced pointers, as the second example shows.

Example:
Code:


Type rect_type
    x As Single
    y As Single
End Type

Dim the_rectangle As rect_type
Dim As Integer temp, t

With the_rectangle
    temp = .x
    .x = 234 * t + 48 + .y
    .y = 321 * t + 2
End With

[ Eurora3D Team @ 11.12.2008. 12:25 ] @
Prvo , pisao sam odgovor pre ovog Stefanovog drugog odgovora tako da je svaka slicnost nenamerna :)
Drugo , uzeo sam kao osnovu Stefanov prvi kod i napravio generalan kod za menjanje boje menija koji moze da se lako ubaci u programe kao modul ... testiran je
Trece, nisam nikad do sad radio menjanje boje menija u VB6 :) ... nije mi trebalo
Ovaj kod treba da se ubaci u prazan modul (u VB6 Project -> Add Module pa Copy/Paste)
Komentari su u kodu
Code:


' Module MenuColor.bas

Option Explicit
Private Const MIM_BACKGROUND As Long = &H2 ' konstanta
Private Const MIM_APPLYTOSUBMENUS As Long = &H80000000 ' konstanta

'Struktura MENUINFO , strukture su kompeksan tip podataka ...
Private Type MENUINFO
    cbSize As Long
    fMask As Long
    dwStyle As Long
    cyMax As Long
    hbrBack As Long
    dwContextHelpID As Long
    dwMenuData As Long
End Type

'WinApi funkcije
'U WinApi-ju se manje vise sve radi preko handlera, pocetnici handlere mogu da zamisljaju kao svojevrstan ID objekta
'I svaki objekat (npr. prozor, menu itd. ima drugi handler)

'Dobijanje menu handlera za window hWnd
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long

'Dobijanje submeni handlera , hMenu je hendler meni-a a nPos pozicija , prva pozicija je 0, itd.
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long

'Funkcija menja hMenu, mi ja MENUINFO struktura koja opisuje menu
Private Declare Function SetMenuInfo Lib "user32" (ByVal hMenu As Long, mi As MENUINFO) As Long

'Kreiranje objekta za bojenje
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long

' Iscrtava menu bar , parametar hWnd je handle prozora na kojem je menu
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long

'************************************************************************
' Subrutina SetMenuColor sluzi za menjanje boje menija i submenija na odredjenom prozoru
'
' hWnd ---------------------- window handler forme na kojoj je menu
' MenuBackColor ----------- boja pozadine celog menija, ako je manje od nula boja se ne menja
' SubMenuBackColor ------- boja pozadine sub menija, ako je manje od nula boja se ne menja
'
'************************************************************************

Public Sub SetMenuColor(hWnd As Long, MenuBackColor As Long, SubMenuBackColor As Long)

Dim hMenu As Long ' menu handler
hMenu = GetMenu(hWnd) ' trazimo menu handler od windowsa
If hMenu = 0 Then Exit Sub ' nemamo nista ... moramo da izadjemo iz procedure

Dim mnui As MENUINFO ' deklarisemo promenljivu

' ovo cesto mora da se uradi u WinApi-u pre nego sto struktura moze da se upotrebi ...
' opisuje velicinu strukture u bajtovima
mnui.cbSize = Len(mnui)

If Not MenuBackColor < 0 Then ' ako vrednost boje nije manja od nule pokusavamo da je promenimo
mnui.fMask = MIM_BACKGROUND ' zanima nas boja pozadine
mnui.hbrBack = CreateSolidBrush(MenuBackColor) ' podesavamo je u strukturi
SetMenuInfo hMenu, mnui ' i menjamo MENUINFO za glavni menu hMenu
End If

If Not SubMenuBackColor < 0 Then ' ako vrednost boje za submenu nije manja od nule pokusavamo da je promenimo
mnui.fMask = MIM_BACKGROUND Or MIM_APPLYTOSUBMENUS ' zanima nas boja pozadine submenija
mnui.hbrBack = CreateSolidBrush(SubMenuBackColor)  ' podesavamo je u strukturi
'Ovde cemo da napravimo petlju koja ce da oboji sve submenije
'Posto nemamo broj submenije idemo dok ne dodjemo do NULL handlera
Dim hSubMenu As Long, i ' hSubMenu submenu handler, i broj za poziciju
i = 0
hSubMenu = GetSubMenu(hMenu, i) ' trazimo submenu handler od windowsa
While hSubMenu ' dok je hSubMenu > 0
SetMenuInfo hSubMenu, mnui ' i menjamo MENUINFO
i = i + 1
hSubMenu = GetSubMenu(hMenu, i) ' trazimo submenu handler od windowsa
Wend
End If

TheEnd:
DrawMenuBar hWnd ' ovde iscrtavamo novi meni sa novim podatcima
End Sub

Ovaj kod je za Formu

Code:

Private Sub Form_Load()
' Vrednosti za boje menija mozes da dobijes u properties editoru
' Npr. promeni boju pozadine forme u onu koja ti ovde treba i kopiraj vrednost boje
SetMenuColor Me.hWnd, -1, &HFF0000
End Sub





[Ovu poruku je menjao Eurora3D Team dana 11.12.2008. u 21:18 GMT+1]
[ unisoft @ 11.12.2008. 13:31 ] @
Sta da kazem ostao sam bez reci.


HALA PUNO i pozdrav !!! Ivan
[ stefanpn @ 11.12.2008. 16:35 ] @
Tebe bas nije mrzelo da objasnjavas.

Svaka cast.


P.S. Sto se tice slicnosti, koliko ja znam, da nam se objasnjenja jako razlikuju to bi znacilo da jedan od nas prica pogresno.

Iste funkcije sa istim argumentima uvek daju isti rezultat.
[ Eurora3D Team @ 11.12.2008. 17:48 ] @
Nije me mrzelo ... nisam odavno poslao odgovor na VB6 forumu pa da nadoknadim :)
Slazem se ... cinjenice su cinjenice ... jedino se razlikuje stil pisanja
poz
P.S. @Stefane svaka cast i tebi ... i ti si napisao dosta