Search  
Tuesday, May 22, 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  Intrebare Combo...
 Intrebare Combo Box Button
 
 12/8/2011 10:07:24 AM
User is offlineSaiSaijo
21 posts


Intrebare Combo Box Button
 (N/A)
Salutari !

   Am inceput sa invat fox pro de  o saptamana deci sunt un "ultra" incepator, asa ca va rog, aveti rabdare cu mine :)
Vrea sa introduc intr-un field de tip DATE dintr-un tabel, o data de nastere folosind 3 butoane de tip Combo Box (adica cam ca la orice formular de inregistrare al unui user).
Initial m-am gandit sa introduc manual luni... apoi zilele.. si apoi anii ?! Atunci mi-am dat seama ca probabil nu manual se face un astfel de buton. Ca sa nu mai vorbim de regulile (cate zile are o anumita luna, care sunt anii bisecti, etc.)

Cum se face un astfel de buton ? :)

Multumesc in avans pt raspunsuri.
 12/8/2011 11:23:18 AM
User is offlineMarian Dobre
398 posts
3rd


Re: Intrebare Combo Box Button
 (N/A)
De ce te complici cu butoane? Leaga campul respectiv la un textbox pe formular si aceasta modalitate de lucru va sti sa-ti trateze referirile la an bisect si celelalte.

Orice putere omeneasca este un compus de rabdare si de timp. Balzac
 12/8/2011 11:38:38 AM
User is offlineSaiSaijo
21 posts


Re: Intrebare Combo Box Button
 (N/A)
 Marian Dobre wrote
De ce te complici cu butoane? Leaga campul respectiv la un textbox pe formular si aceasta modalitate de lucru va sti sa-ti trateze referirile la an bisect si celelalte.


Pt ca asta e tema pe care am primit-o :) Chiar asta trebuie sa fac. Prin textbox stiu sa fac deja, dar acum incerc printr-un combo box. Sunt totusi uimit ca nu reusesc sa gasesc deja pe net intrebarea si solutia asta, pt ca pe aproape orice site cu inregistrare de user, selectarea varstei se face printr-un combobox de luna, zi, an...


 12/8/2011 12:38:24 PM
User is offlineDaniel Buduru
2329 posts
1st




Re: Intrebare Combo Box Button
 (N/A)
Exista un control ActiveX, DatePicker, in MSCOMCTL.OCX, control care poate fi ditribiut impreuna cu aplicatiiler vfp - vezi redist.txt in folderul vfp. Acest control permite atat introducerea datei, cat si selectarea ei dintr-un calendar drop-down.

Daca vrei sa faci asta cu combo, si sa tii cont de numarul de zile din luna, adopta formatul ISO pentru data - an, luna, zi. Astfel, cand ajungi la combo pentru zi poti calcula deja cate zile trebuie sa aiba luna respectiva.
Poti face asta in combo.when sau combo.gotfocus, iar numarul de zile din luna il poti afla cu formula urmatoare:
nrzile=DAY(Gomonth(Date(an, luna, 1),1)-1), unde an si luna sunt valorile din cele doua combo - atentie totusi la tipul variabilelor, fara controlsource combo.value e de tip caracter si va trebui sa faci un cast la numeric.
Verifici daca combo.listcount=nrzile. Daca difera, setezi combo.rowsource astfel incat sa corespunda cu numarul de zile al lunii.

Problema e prea simpla pentru a o gasi deja discutata pe forumuri.

Intrebarea mea : dupa ce criteriu ai incadrat problema ta la Meniuri si generatoare de meniuri?

Daniel Buduru
 12/8/2011 2:23:06 PM
User is offlineSaiSaijo
21 posts


Re: Intrebare Combo Box Button
 (N/A)
Multumesc foarte mult pentru raspuns. Am sa incerc varianta cu combo, sper sa nu ma incurc undeva.

Imi cer scuze ca am postat gresit... nici eu nu-mi dau seama exact de ce am ales aici.. Poti muta threadul in sectiunea corecta cu scuzele mele.

Sunt incepator absolut in programare(o saptamana), asa ca problema mea nu era clar "prea simpla" pentru mine.

Din pacate nu prea am gasit carti in format electronic (engleza sau romana) destinate persoanelor care incep programarea cu fox pro. Majoritatea se asteapta sa ai deja o baza in alt limbaj de programare si sunt altfel prea avansate pt mine. Asta rezulta intrebari stupide din partea pentru altii.
P.S. daca stiti o astfel de carte nu ezitati sa-mi spuneti numele ei. Multumesc!
 12/12/2011 7:54:59 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Intrebare Combo Box Button
 (N/A) Modified By Grigore Dolghin  on 12/13/2011 5:44:16 PM)
Combobox-ul are o metoda numita InteractiveChange() si este locul unde trebuie sa scrii codul care vrei sa se execute atunci cand utilizatorul selecteaza un item din combobox.

Pentru cel de ani si de luni nu-s probleme - le populezi cu ComboBox.AddItem() (uite-te in help). Problema e la cel de zile fiindca numarul lor variaza. Locul in care trebuie sa populezi combo-ul de zile este InteractiveChange-ul combo-ului de luni (pentru ca numarul de zile variaza functie de luna selectata. Un caz particular il reprezinta luna februarie, unde trebuie sa tii cont si de anul selectat din combo-ul de ani, ca daca e bisect... stii tu.).

Pentru codul din cmbLuni.InteractiveChange ai putea incerca o smecherie. VFP stie deja toate regulile alea si ai putea sa-l pui pe el sa faca socotelile astea in locul tau si sa interceptezi erorile:

local DataCorecta As Boolean

ThisForm.cmbZile.Clear()
For i = 1 To 31
    Try
        ldTestDate = date(cmbAn.value, cmbLuna.value, i)
        DataCorecta = .T.
    Catch
    EndTry

    If DataCorecta
        ThisForm.cmbZile.AddItem(Transform(i),i)
        DataCorecta = .F.
    End If
End For

Ideea e sa incerci sa creezi date calendaristice de la 1 pana la 31 ale lunii selectate in combo, oricare ar fi ea. Evident, unele sunt incorecte (31 aprilie, de exemplu) dar de treaba asta o sa se ocupe Try...Catch, care o sa intercepteze eroarea si o sa-ti ramana numai zilele cu care se pot construi date calendaristice corecte. Si crede-ma ca cele 31 de iteratii se vor executa mai repede decat orice eventual calcul cu IF...ENDIF, CASE si altele pe care l-ai face ca sa implementezi singur regulile alea.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 12/13/2011 11:40:42 AM
User is offlineDaniel Buduru
2329 posts
1st




Re: Intrebare Combo Box Button
 (N/A)
O varianta si mai rapida:

in cboZi.init:
* Se creeaza o proprietate adays, de tip array, care se incarca cu numere de la 1 la 31
this.addproperty('adays[31]')
local lni
for lni=1 to 31
  this.adays[lni]=lni
next
* se configureaza combobox-ul pentru a utiliza array-ul creat ca sursa pentru lista
this.rowsourcetype=5
this.rowsource='this.adays'
this.firstelement=1
this.style=2 &dropdown list

in cboZi.GotFocus
*se stabileste numarul de elemente din lista
this.NumberOfElements=DAY(GOMONTH(Date(evl(cast(thisform.cboAn.value as int),year(date())),evl(cast(thisform.cboluna.value as int),1),1),1)-1)
*evl(valoare1, valoare2) returneaza valoare2 daca valoare1 e empty.
*in acest mod, nu se genereaza o eroare daca nu este nimic selectat in cboAn sau cboluna
*cast(thisform.combo.value as int) transforma valoarea din combo in integer, indiferent ce tip ar avea
*cboAn, cboLuna, cboZi sunt cele 3 combobox-uri

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

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement