Search  
Saturday, February 11, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Meniuri si generatoare de meniuri  Meniuri...
 Meniuri
 
 2/3/2009 7:54:07 PM
User is offlinedanilea
197 posts
5th


Meniuri
 (N/A)
Buna seara,
1.Vizavi de folosirea meniurilor generate cu Menu Designer,VFP9 SP2.
In diverse stadii ale unei aplicatii,apelez o forma care are un meniu specific ei.
Meniul il apelez cu DO NUME_MENIU in Load-ul formei.
Daca forma este Modala meniul este inactiv;daca este modeless,meniul este activ dar...
daca folosesti forma modeless si nu ti-ai terminat treaba cu ea,programul poate continua
sa faca altceva si eu nu vreau asta(de aceea folosesc forme Modale).
Poate sa ma indrume cineva,pas cu pas,sa urmez un pricipiu care sa ma scoata din impas?
S-au o documentatie de studiat.
2.Am facut un test,incercind sa rezolv problema de mai sus,astfel:
- Am un Main.prg care cuprinde:
SET SYSMENU SAVE
SET SYSMENU TO
DO FORM FORM1
READ EVENTS

* form1: ShowWindow = 2; WindowType = 0; in LOAD-ul formei: DO Meniu1 with this,.T.
* meniu1: este generat cu Menu Designer; pe General Option->Location:Replace si bifata
optiunea Top-Level Form
In Meniu1 am un submeniu din care apelez o forma cu: DO form Form2 pe Rezult=Command .
* form2: ShowWindow = 1; WindowType = 1; in LOAD-ul formei: DO Meniu2
* meniu2: este generat cu Menu Designer; pe General Option->Location:Append
Se deschide Form1 si se incarca Meniu1,care este activ .
Cind apelez linia de submeniu,se deschide Form2,Meniu1 se dezactiveaza dar Meniu2 nu se
adauga la Meniu1.
Am observat ca sub Form1,dispare meniul system si apare Meniu2(care este si activ).Nu ma dumiresc
de ce se intimpla asa.
Cind o sa aveti careva dintre Dv. o fereastra,poate ma indrumati cu un sfat concret.
Va multumesc.
 2/3/2009 11:49:46 PM
User is offlineDaniel Buduru
2143 posts
1st




Re: Meniuri
 (Romania)
Gasesti aici o solutie pentru activarea menu-ului intr-un form modal:
http://vfpdev.narod.ru/download/menmform.zip


Daniel Buduru
 2/10/2009 8:45:50 PM
User is offlinedanilea
197 posts
5th


Re: Meniuri
 (N/A)
Buna seara Dl.Buduru,
Va multumesc pentru sfat.L-am incercat si functioneaza pe o forma modala.
Am insa o problema si nu stiu cum sa o rezolv.
Am o forma modala.Ca sa nu muncesc atita pe meniul atasat acestei forme,
l-am creat cu Menu Designer si din MPR am luat ce-mi trebuie.
Din exemplul de pe adresa ce am primit-o de la Dv.,musai ca in:
LOAD sa generezi PAD-urile:
DEFINE PAD _2ko0r59et OF _MSYSMENU PROMPT "Meniu FormaMea" COLOR SCHEME 3 ;
KEY ALT+M, "" ;
skip for iif(type('_screen.activeform')='O' and pemstatus(_screen.activeform,'ModalMeniu',5),;
_screen.activeform.ModalMeniu(),.T.)
ON PAD _2ko0r59et OF _MSYSMENU ACTIVATE POPUP meniu1
In metoda ModalMeniu generezi popup,bar:
DEFINE POPUP meniu1 MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF meniu1 PROMPT "Initializarea sesiunii de lucru" ;
SKIP FOR m.InitializareSL=.T.
DEFINE BAR 2 OF meniu1 PROMPT "Comunicare date pentru sesiunea curenta de lucru" ;
SKIP FOR InitializareSL=.F.
ON SELECTION BAR 1 OF meniu1 Do V1 in validare
ON SELECTION BAR 2 OF meniu1 ;
DO _2ko0r59f8 ;
IN LOCFILE("\UTI\PROGRAME\VALIDARE" ,"MPX;MPR|FXP;PRG" ,"WHERE is MENIU1?")
RETURN .F.
Meniul se genereaza frumos,este activ dar...imi ignora conditia din SKIP FOR ...!!!??? Variabila InitializareSL exista,este initializata in
functie de context si ...pauza vizavi de meniu,SKIP FOR.
Daca forma este modeless si lansez meniul(ca sa zic asa,clasic) in load-ul formei cu DO MENIU1.MPR totul este bine.
 2/11/2009 9:33:14 AM
User is offlineDaniel Buduru
2143 posts
1st




Re: Meniuri
 (N/A)
Prin design, menu-ul este inactiv actunci cand o forma modala este activata.
Se poate ocoli acest comportament in diferite moduri, iar metoda expusa in acel link este una din ele.
Pentru ca menu-ul sa fie activ, trebuie sa fie definit dupa activarea formului modal.
Am gasit o solutie care permite activarea unui menu normal. Incerc sa atasez un exemplu. Dupa desfacerea arhivei, se ruleaza cu DO FORM modlaform.

Daniel Buduru
modalform.zip 
 2/11/2009 9:42:35 AM
User is offlineDaniel Buduru
2143 posts
1st




Re: Meniuri
 (N/A) Modified By Daniel Buduru  on 2/11/2009 5:41:47 PM)
La descarcare, atasamentul are tot lunginea 0 ...
Menu-ul :

* *********************************************************
* ModalForm.mpr
* *********************************************************

DEFINE PAD _modal OF _MSYSMENU PROMPT "Modal Form" COLOR SCHEME 3 ;
    AFTER _MSYSTEM ;
    KEY ALT+M, ""
ON PAD _modal OF _MSYSMENU ACTIVATE POPUP modalform

DEFINE POPUP modalform MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF modalform PROMPT "Initializare" ;
    SKIP FOR pemstatus(_screen,'lvar',5)=.T. and _screen.lvar=.t.
DEFINE BAR 2 OF modalform PROMPT "comunicare date" ;
    SKIP FOR pemstatus(_screen,'lvar',5)=.f. OR _screen.lvar=.f.
ON SELECTION BAR 1 OF modalform onmenu('INIT')
ON SELECTION BAR 2 OF modalform onmenu('COM')
* **************************************************

Procedura onmenu:
* **************************************************
* onmenu.prg
* **************************************************
LPARAMETERS p1
DO CASE
CASE UPPER(p1)='INIT'
_screen.AddProperty('lvar',.t.)
CASE UPPER(p1)='COM'
MESSAGEBOX('Comunicare date')
_screen.AddProperty('lvar',.f.)
endcase
* ************************************************

Formul modal :
**************************************************
*-- Form:         modalform
*-- ParentClass:  form
*-- BaseClass:    form
*-- Time Stamp:   02/11/09 08:38:04 AM
*

DEFINE CLASS modalform AS form


    Top = 0
    Left = 0
    Height = 400
    Width = 500
    DoCreate = .T.
    Caption = "modal form"
    WindowType = 1
    Name = "ModalForm"


    PROCEDURE setmenu
        DO modalform.mpr
        UNBINDEVENTS(this,'paint',this,'setmenu')
    ENDPROC


    PROCEDURE Destroy
        RELEASE PAD _modal OF _MSYSMENU
        POP MENU _msysmenu
    ENDPROC


    PROCEDURE Init
        PUSH MENU _msysmenu
        BINDEVENT(this,'paint',this,'setmenu',1)
    ENDPROC


ENDDEFINE
*
*-- EndDefine: modalform
**************************************************


Daniel Buduru
 2/12/2009 9:15:43 PM
User is offlinedanilea
197 posts
5th


Re: Meniuri
 (N/A)
Buna seara Dl.Buduru,
Pot sa spun ca am rezolvat problema mea datorita Dv. si exemplului postat.
Va multumesc pentru ajutor.
Acum:
1.Forma este : WindowType = 1-Modal ; ShowWindow = 1-In Top-Level Form
2.Am adaugat formei metoda SetMenu in care am:
DO MENIU1.MPR
UNBINDEVENTS(this,'paint',this,'setmenu')
3.In Init:
BINDEVENT(this,'paint',this,'setmenu',1)
4.In MENIU1.MPR,pe SKIP FOR am o variabila care in functie de context este .F. s-au .T.
Meniul functioneaza perfect.
 2/14/2009 8:20:32 PM
User is offlinedanilea
197 posts
5th


Re: Meniuri
 (N/A)
Buna seara Dl.Budurau,
Am o situatie curioasa.
In toate formele modale in care am meniuri specifice am procedat ca mai sus.
Am insa o forma la care nu este activ meniul specific la prima activare a formei.
Daca ies si reintru pe forma respectiva,mi se activeaza meniul sau
daca intru pe alta forma cu meniu specific si apoi intru pe forma cu "probleme",
meniul este activ.
Poate mai este o chichita pe care nu o stiu...
Multumesc.
 2/15/2009 10:25:26 AM
User is offlineDaniel Buduru
2143 posts
1st




Re: Re: Meniuri
 (N/A)
Pentru ca un menu sa nu fie dezactivat la activarea unei forme modale, menu-ul trebuie definit dupa activarea formei.
Lansarea menu-ului in form.activate nu da rezultate intotdeauna, asa ca am ales sa il leg de paint, dar sa fie rulat o singura data, de aceea UNBINDEVENTS dupa rulare.
Nu pot spune de ce se comporta asa acea forma, fara sa vad codul. Se comporta ca si cand menu-ul este activat inainte de setarea atributului modal al formei.
Pot insa sugera doua metode de depanare:

1. Introducerea unui contoar, care sa ruleze menu-ul nu la primul paint, ci la al doilea sau al treilea.
In form.setmenu:
IF !pemstatus(thisform,'iContor',5)
    thisform.AddProperty('iContor',0)
Else
    thisform.iContor=thisform.iContor+1
endif
IF thisform.iContor<2 && se schimba aici numarul de iteratii
   return
endif

*..... codul original aici.
Este posibil ca menu-ul sa nu apara de la inceput.
O alta varianta este aceea de a pune codul de mai sus dupa rularea menu-ului si inainte de UNBINDEVENTS, ceea ce va face ca menu-ul sa fie rulat de mai multe ori.

2. Reconstruirea formei, pornind de la clasa parinte (sau clasa de baza, daca nu e subclasat). Am avut cateva situatii in VFP9 cand o clasa nu a mai functionat corect, si nici macar eliminarea codului compilat din vcx si recompilarea clasei nu au rezolvat problema. In schimb, crearea unei clase noi, intr-o alta biblioteca, si aducerea cu copy/paste a a metodelor si obiectelor din vechea clasa au rezolvat-o.


Daniel Buduru
 2/15/2009 6:37:32 PM
User is offlinedanilea
197 posts
5th


Re: Re: Meniuri
 (N/A)
Buna seara Dl.Buduru,
Am pus codul Dv.inainte de codul original si merge.Am incercat de multe ori si merge.
Multumesc.
Precizez: toate formele care au meniul lor specific apartin aceleasi clase; meniul specific
este lansat o singura data si in acelasi mod.
Acum singurul lucru ce ma deranjeaza la meniurile create cu Menu Designer sint fonturile
si aspectul dar...din ce am citit pe forum singura modalitate de a schimba ceva este din
sistemul de operare(fonturile).
 2/15/2009 6:51:49 PM
User is offlineDaniel Buduru
2143 posts
1st




Re: Re: Meniuri
 (N/A)
Forma la care menu-ul nu se activeaza de la inceput contine ceva care o deosebeste de celelalte, fie un obiect, fie un bug.
Crearea unei noi forme si copierea obiectelor din cea veche, cu copy/paste, ar trebui sa elimine acel bug. Daca si noua forma are acelasi comportament, deosebirea consta intr-unul din obiectele instantiate. Este un test pe care l-as face, chiar daca problema s-a rezolvat prin decalarea definirii menu-ului la al treilea paint..

Fontul menu-ului _msysmenu este, intr-adevar, cel definit in sistemul de operare si nu poate fi schimbat din VFP.
Fontul din menu-ul popup se poate insa defini:
DEFINE POPUP modalform MARGIN RELATIVE SHADOW FONT 'courier',12 COLOR SCHEME 4

Daniel Buduru
  Visual FoxPro  Meniuri si generatoare de meniuri  Meniuri...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement