Lucrarea 8

Crearea controalelor personalizate si a meniurilor

1. Crearea controalelor personalizate

2. Crearea machetelor de formulare

3. Meniuri

Exemplu:
Se va trata evenimentul onOpen pentru formularul de vizualizare studenti.

PROCEDURE Form_OnOpen
  meniuStud = new MENU(this);
  DEFINE MENU navigare OF meniuStud;
    PROPERTY;
    Text "&Navigare"
  DEFINE MENU mnUrm OF meniuStud.navigare;
    PROPERTY;
    Text "&Urm",;
    OnClick {;SKIP}
  DEFINE MENU mnPrec OF meniuStud.navigare;
    PROPERTY;
    Text "&Prec",;
    OnClick {;SKIP-1}
  DEFINE MENU mnLinie OF meniuStud.navigare;
    PROPERTY;
    Text "",;
    Separator .T.
  DEFINE MENU mnIesire OF meniuStud.navigare;
    PROPERTY;
    Text "&Iesire",;
    OnClick {;form.Close()}
RETURN

4. Meniuri tip lista (meniuri popup)

Exemplu:
Se va trata evenimentul onOpen pentru formularul de vizualizare studenti.

PROCEDURE Form_OnOpen
  NEW POPUP(this,"pop")
  form.pop.Top = 0
  form.pop.Left = 0
  DEFINE MENU urm OF form.pop;
    PROPERTY;
    Text "&Urm",;
    OnClick {;SKIP}
  DEFINE MENU prec OF form.pop;
    PROPERTY;
    Text "&Prec",;
    OnClick {;SKIP-1}
  DEFINE MENU linie OF form.pop;
    PROPERTY;
    Text "",;
    Separator .T.
  DEFINE MENU iesire OF form.pop;
    PROPERTY;
    Text "&Iesire",;
    OnClick {;form.Close()}
  form.PopupMenu = form.pop
RETURN

5. Probleme propuse
P1. Rulati exemplele prezentate în acest capitol.

P2. Studiati codul generat la salvarea unui control personalizat, respectiv la salvarea unui machete de formular.

P3. Creati meniuri popup pentru câteva din elementele de interfata pentru un formular de vizualizare masini (tabela - date masini.dbf, respectiv binary masini.dbt). Pentru aceasta se vor trata urmatoarele evenimente pentru fiecare control în parte:

* OnOpen - creaza meniup popup corespunzator obiectului;

* OnRightMouseDown - deschide meniul ajustând pozitia lui în punctul unde s-a apasat butonul:

Procedure control_onRightMouseDown(flags, col, row)
* Seteaza pozitia meniului popup - meniul edit_pop a fost creat pe
* evenimentul control_onOpen

form.edit_pop.top = row + this.top
form.edit_pop.left = col + this.left
* Seteaza în popup o referinta la controlul curent
* pentru a se face revenirea tot pe el.

form.edit_pop.active = this
form.edit_pop.open()

Obs: pentru tratarea evenimentului in fereastra principala nu se vor mai aduna this.top si this.left la coordonatele cursorului.


s.l. dr. ing. Dan Pescaru '2004