Search  
Friday, May 25, 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  Clase - VCX si PRG  ControlSource p...
 ControlSource pentru CommandButton
 
 11/15/2011 3:59:41 PM
User is offlinestefan_JKSL
62 posts


ControlSource pentru CommandButton
 (N/A)
Salutate. Va rog sa ma ajutati intr-o problema, daca se poate. Doresc sa creez o clasa pentru un CommandButton care sa contina o proprietate asemanatoare celei de la TextBox si anume ControlSource. Mai exact doresc ca prin setarea acestei proprietati (ControlSource) pe o coloada dintr-un tabel, proprietatea Caption a butonului meu sa se seteze automat dupa valoarea din tabel printr-un simplu refresh. Banuiesc ca pentru a schimba si culoarea butonului in functie de o valoare dintr-un tabel se poate aplica acelasi rationament. Cred ca este posibil prin folosirea lui BINDEVENT() insa nu prea inteleg cum functioneaza aceasta comanda. Multumesc anticipat pentru orice raspuns. Cu respect, Stefan
 11/15/2011 7:10:03 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: ControlSource pentru CommandButton
 (N/A)
 stefan_JKSL wrote
Salutate. Va rog sa ma ajutati intr-o problema, daca se poate. Doresc sa creez o clasa pentru un CommandButton care sa contina o proprietate asemanatoare celei de la TextBox si anume ControlSource. Mai exact doresc ca prin setarea acestei proprietati (ControlSource) pe o coloada dintr-un tabel, proprietatea Caption a butonului meu sa se seteze automat dupa valoarea din tabel printr-un simplu refresh. Banuiesc ca pentru a schimba si culoarea butonului in functie de o valoare dintr-un tabel se poate aplica acelasi rationament. Cred ca este posibil prin folosirea lui BINDEVENT() insa nu prea inteleg cum functioneaza aceasta comanda. Multumesc anticipat pentru orice raspuns. Cu respect, Stefan


Proprietatile native ale claselor vfp, cum ar fi value, controlsource, backstyle, si altele, chiar daca sunt adaugate unor clase care nu le au, nu functioneaza la fel ca cele native.

Poti realiza ceea ce doresti agatand una din proprietatile dynamic ale coloanei pe care nu le utilizezi in mod obisnuit, de ex DynamicFontUnderline. In aceasta proprietate apelezi o procedura sau o metoda - a gridului sau a formului), procedura care sa seteze ceea ce doresti.
Proprietatile Dynamic sunt evaluate pentru fiecare linie a gridului, la fiecare refresh comandat sau intern al gridului.

De ex, daca pui butonul in coloana 2 a gridului:

Grid.Column2.DynamicFontUnderline=SetDynamic(this)

Procedure SetDynamic
lparameters toGrid
toGrid.Column2.Command1.Caption=evaluate(toGrid.Colum2.ControlSource)

O alta varianta este sa utilizezi o clasa derivata dintr-un control care are proprietatea BackStyle. Aceasta proprietate este accesata pentru fiecare linie a gridului, daca respectivul control se gaseste intr-o coloana.
Setezi BackStyle_acces pentru aceasta clasa, iar in aceasta metoda pui codul care sa seteze ce anume doresti.
Poti realiza un command button dintr-un container, un label, ceva linii si cod corespunzator

Daniel Buduru
 11/16/2011 7:35:55 AM
User is offlinestefan_JKSL
62 posts


Re: ControlSource pentru CommandButton
 (N/A) Modified By stefan_JKSL  on 11/16/2011 8:43:11 AM)
Nu doresc sa-l integrez intr-un grid. Cand am spus tabel m-am referit la dbf nu la grid. Scuze pentru exprimarea inexacta. Mai concret doresc sa realizez o diagrama pentru hotel. Un tabel (dbf) retine numarul camerei si starea (1-libera, 2-ocupata, 3-murdara, 4-rezervata) iar ca reprezentare grafica a camerelor am ales CommandButton. Doresc ca generarea formului sa se faca automat in functie de nr. de camere si de starea acestora. Ori de cate ori intervine o modificare in dbf form-ul sa-mi afiseze diagrama actualizata. Nu sunt multe camere si pot sa le definesc manual insa conducerea doreste ca, la nevoie, sa adauge camere virtuale si asta imi strica planurile.
 11/16/2011 10:24:55 AM
User is offlineMarian Dobre
398 posts
3rd


Re: ControlSource pentru CommandButton
 (N/A)
Nu cred ca este cea mai buna solutie cea cu atasarea unui buton fiecarei camere. Un grid, un combobox sau un listbox ar fi mai bine. Daca vine un alt client si are un hotel cu mai multe camere dai peste o situatia similara cu cea a camerele virtuale. Este posibil ca sa apara si o alta valoare a camerei. De exemplu renovarea.Ideea este sa utilizezi un obiec care se comporta la fel indiferent cate inregistrari ai in tabela careia il atasezi.

Orice putere omeneasca este un compus de rabdare si de timp. Balzac
 11/16/2011 12:09:51 PM
User is offlinemmarius28
139 posts
5th


Re: ControlSource pentru CommandButton
 (N/A)

 stefan_JKSL wrote
Nu doresc sa-l integrez intr-un grid. Cand am spus tabel m-am referit la dbf nu la grid. Scuze pentru exprimarea inexacta. Mai concret doresc sa realizez o diagrama pentru hotel. Un tabel (dbf) retine numarul camerei si starea (1-libera, 2-ocupata, 3-murdara, 4-rezervata) iar ca reprezentare grafica a camerelor am ales CommandButton. Doresc ca generarea formului sa se faca automat in functie de nr. de camere si de starea acestora. Ori de cate ori intervine o modificare in dbf form-ul sa-mi afiseze diagrama actualizata. Nu sunt multe camere si pot sa le definesc manual insa conducerea doreste ca, la nevoie, sa adauge camere virtuale si asta imi strica planurile.

Cred ca este o idee buna sa dai cat mai multe detalii despre ce doresti sa faci. In felul acesta ti se pot da si solutii alternative la problema ta, nu numai raspunsuri tehnice (ex cum sa legi controlsource-ul din grid cu commandbuton.caption)

Poti sa faci un tabel cu camerele si cu informatii de genul (id, nume, left_pos, top_pos), unde:
nume = numele camerei
left_pos = offset fata de marginea din stanga a formularului
left_pos = offset fata de marginea de sus a formularului

Apoi scanezi tabelul cu camerele si le desenezi pe formular:

Select camere

Scan

   lcNume = nume && 101

   lcCameraName = "oCamera" + Alltrim(Str(Id))

   Thisform.AddObject(lcCameraName, "commandbutton")

   loCamera = Thisform.&lcCameraName

   loCamera.Caption = lcNume && 101

Endscan

Bineinteles ca ar fi mai indicat sa folosesti propria clasa in loc de "commandbutton". Poti sa gasesti un exemplu in HELP la "AddObject Method"

 11/16/2011 2:03:16 PM
User is offlinestefan_JKSL
62 posts


Re: ControlSource pentru CommandButton
 (N/A) Modified By stefan_JKSL  on 11/16/2011 3:18:27 PM)
Solutia asta am aplicat-o si eu insa doream sa creez o clasa pe baza "commandbutton" care sa-si ia valorile din "dbf" iar eu dupa o modificare in tabel doar sa-i dau un refresh si diagrama-i gata :D De exemplu daca se doreste diagrama pentru o zi anume : set filter to zi_cazare = {^2011-11-01} ThisForm.Refresh && Abracadabra... diagrama-i gata Asa cum e acum la fiecare refresh trebuie sa execut si metoda de desenare a butoanelor. Este bine si asa insa doream o solutie mai eleganta mai putin cod si, de ce nu, mai putina munca.
 11/16/2011 2:10:12 PM
User is offlinestefan_JKSL
62 posts


Re: ControlSource pentru CommandButton
 (N/A)
 Marian Dobre wrote
Nu cred ca este cea mai buna solutie cea cu atasarea unui buton fiecarei camere. Un grid, un combobox sau un listbox ar fi mai bine. Daca vine un alt client si are un hotel cu mai multe camere dai peste o situatia similara cu cea a camerele virtuale. Este posibil ca sa apara si o alta valoare a camerei. De exemplu renovarea.Ideea este sa utilizezi un obiec care se comporta la fel indiferent cate inregistrari ai in tabela careia il atasezi.
Butoanele se deseneaza singure cu AddObject Method scanand nomenclatorul camerelor iar starea camerelor la fel se coloreaza singure scanand cazarile din ziua respectiva. Daca apare un client cu camere mai multe nu e nicio problema.
 11/16/2011 3:23:37 PM
User is offlinemgabi
135 posts
5th


Re: ControlSource pentru CommandButton
 (N/A)
Daca vrei o diagrama a camerelor "fixa" cu toate camerele, in care sa schimbi aspectul fiecarui buton in functie de filtre/modificari de stare ... atunci construiesti diagrama la initializarea formului, apoi pe refresh-ul butonului pui codul pentru setarea aspectului.

Daca insa vrei o diagrama dinamica, in care sa apara doar camerele filtrate, atunci chiar tb. sa o desenezi la fiecare refresh. Desenarea o pui intr-o metoda si o apelezi chiar din refresh-ul formului.

Eu asa as face, mai mult, as lucra cu Commandgroup,  este mai usor sa stergi obiectul grup.


 11/16/2011 3:28:03 PM
User is offlinemmarius28
139 posts
5th


Re: ControlSource pentru CommandButton
 (N/A)

 stefan_JKSL wrote
ThisForm.Refresh && Abracadabra... diagrama-i gata

Am inteles acum - doresti un buton magic :)

Cum era vorba? "stiinta este magie care functioneaza" sau "magia este stiinta care nu s-a explicat". Vad ca stiinta este, vrei sa o faci magie :)

Solutia de mai sus am aplicat-o si eu, cu niste adaptari. La modificarea starii unei camere, actualizez doar controlul camerei respective, ca sa nu trebuiasca sa redesenez tot.

Redesenarea starii unei camere poti sa o incapsulezi in control (commandbutton), dar nu cred ca si popularea initiala cu camere, sau la schimbarea zilei curente.

Asa de curiozitate si fara nici un subinteles, cum crezi face un grid sa se lege de un tabel? Are un cod scris pe undeva. Dar daca nu vezi codul ai putea sa spui ca face Abracadabra :D

 11/16/2011 4:05:04 PM
User is offlinestefan_JKSL
62 posts


Re: ControlSource pentru CommandButton
 (N/A)
abracadabra este doar in form... clasa CommandButton face toata munca dar saracu' form nu stie. pentru el este chiar abracadabra. eu pentru clasa am cerut ajutor : ControlSource pentru CommandButton
 11/16/2011 9:25:21 PM
User is offlineMarian Dobre
398 posts
3rd


Re: ControlSource pentru CommandButton
 (N/A)
In principiu daca desenez un form de dimensiune 600x500 si pe el introduc un grid, dimensiunea lui nu se schimba indiferent cate inregistrari vei avea in talelul legat la grid..Daca in schimb adaug programatic cate un buton pentru fiecare camera mai mult ca sigur form-ul trebuie redimensionat. Intrebarea este cat de mare poti sa-ti permiti sa faci form-ul pentru a vedea toate camerele hotelului, eventual o parte a acestora cur ar fi camerele de pe un etaj.
Evident ca daca lucrezi pe formulare care incap pe ecran fara a fi nevoit sa adaugi bare de defilare, ideea cu butoane de comanda este una mai usor de urmarit.

Orice putere omeneasca este un compus de rabdare si de timp. Balzac
 11/17/2011 8:04:37 AM
User is offlinestefan_JKSL
62 posts


Re: ControlSource pentru CommandButton
 (N/A)
 Marian Dobre wrote
In principiu daca desenez un form de dimensiune 600x500 si pe el introduc un grid, dimensiunea lui nu se schimba indiferent cate inregistrari vei avea in talelul legat la grid.
Pentru a folosi un grid trebuie sa generez un tabel temporar in care sa pun toate camerele. Sa presupunem ca am 8 etaje si 93 camere. Numarul de camere pe etaj variaza de la 4 la 14 (apartamente, camere, garsoniere). In acest caz se genereasa un tabel cu 14 coloane iar fiecare rand va reprezenta un etaj. In tabel voi avea 126 de campuri dar numai 93 de camere. Va trebui sa colorez cumva campurile care nu au camera asociata. Nu stiu daca in grid pot colora un doar un camp si nu prea pot atasa si alte informatii campului in afara de numarul camerei. Butonul este mai flexibil. Pot creea o clasa cu cateva proprietati cum ar fi : nr_camera, id_camera, stare, client... etc. As fi vrut sa stiu daca pot lega un buton de o inregistrare dintr-un dbf. M-am gandit sa pun in metoda refresh a butonului tot codul de colorare in functie de proprietatile mai sus mentionate iar pe form cand dau refresh sa se execute si refreshul clasei mele. pentru asta banuiesc ca trebuie sa folosesc bindevent() dar aici m-am impotmolit. nu prea am inteles din help-ul visualfox cum se foloseste si mai ales daca poate sa faca ce vreau eu.
 11/17/2011 10:43:32 PM
User is offlineMarian Dobre
398 posts
3rd


Re: ControlSource pentru CommandButton
 (N/A)

1. Tabela cu camerele hotelului va contine atatea inregistrari cate camere sunt in hotel.

2. Un tabel temporar poate fi o vedere care se incarca automat la deschidere sa cu ceea ce ai filtrat atunci cand ai construit-o (aici este chiar recomandata utilizarea vederilor parametrizate).

3. Formularul va contine o metoda numita Reinprospatare() in care parcurgi tabela (vederea). Pentru fiecare inregistrare vei genera butonul caruia ii vei asocia proprietatile in functie de valorile inregistrarii. Metoda se va termina cu un ThisForm.Refresh().

4. In metoda Init() a formularului vei apela aceasta metoda.

5. Formularul va mai contine un Timer din care se va apela aceasta metota pentru ca eventualele actualizari facute pe o alta statie de lucru sa se poata vedea si pe statia curenta.

 

Dupa cum vezi nu am pomenit nimic de o clasa din care sa instantiez butoanele formularului. In cazul acestei constructii sunt prea putine proprietati care ar fi comune (eventual latimea si inaltimea) tuturor butoanelor ca sa se justifice crearea clasei. Restul proprietatilor le stabilesti in functie de valorile din tabela.

La urma urmei din tabela ce proprietati ei pentru un buton ? Numarul camerei pe care il pui in Caption, (eventual concatenat cu numele clientului) si starea camerei care va genera BackColor-ul Proprietatile Top si Left  evident ca vor fi calculate pentru fiecare buton in parte.

 

Sugestii

a) Proprietatea Themes = .T. a butonului se va folosi pentru camera ocupata si Themes = .F. pentru camera neocupata.

b) Proprietatea ToolTipText a butonului ocupat va contine numele clientului.


Orice putere omeneasca este un compus de rabdare si de timp. Balzac
  Visual FoxPro  Clase - VCX si PRG  ControlSource p...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement