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  Dezactivarea de...
 Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 
 11/18/2010 6:43:58 AM
User is offlineBodanIonescu
36 posts


Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
Intr-un control combo, derularea elemetelor se face sageata sus, sau jos.
Intr-un grid eu sunt obisnuit sa defilez cu tastele saeata sus/jos, iar dak in acest grid am o coloana cu controale combo - apare problema ca fara sa-mi dau seama in loc sa defilez printre inregistrari, defilez printre valorile posibile ale controlului combo - si deci modific involuntar niste valori.
Eu am incercat sa dezactivez tastele Sus/Jos in evenimentul KeyPress al controlului - si functioneaza - problema e ca nu mai functioneaza nici defilarea in grid.
Are cineva vreo solutie?
 11/18/2010 7:55:51 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A)
Solutia consta in inlocuirea actiunilor native la apasarea tastelor up, down, left, right cu actiunile dorite.
In combobox.keypress, daca tasta apasate este una din cele 4, incepi cu o comanda nodefault, apoi, pentru tasta up faci skip-1 in grid.recordsource, pentru tasta down skip in grid.recordsource, pentru left dai comanda keyboard '{backtab}' si '{tab}' pentru right.
Lucrurile se complica putin in cazul in care lista este derulata. Atunci ai nevoie tastele sa functioneze normal. Pentru asta, trebuie sa memorezi undeva starea listei. Exista eventul DropDown, care se produce atunci cand se deruleaza lista, dar nu exista si un event pentru retragerea listei. Trebuie sa resetezi starea la intrarea in combo si la selectia/abandoanrea selectiei din lista.
Poti face o clasa pentru acest combo, sau poti gasi una gata facuta, cautand combo in grid. Vezi si aici: http://www.tightlinecomputers.com/Downloads.htm

Daniel Buduru
 11/19/2010 7:53:21 AM
User is offlineBodanIonescu
36 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
Pai e f. simplu am Creat o proprietate IsDropDown, care o setez pe true in evenimentul DropDown si flase in VAlid.
FUnctioneaza ecelent
EU facusem chestia cu nondefault  - dar apelam apoi keypress gridului (pt. aceleasi taste) - si era o aiureala.
Acum fac efectiv skip si skip -1 daca nu e dropdown
 11/19/2010 8:47:25 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A) Modified By Daniel Buduru  on 11/19/2010 10:02:59 AM)
Atentie si la tastele left si right, si ele schimba pozitia in lista, fara ca lista sa fie derulata.
Proprietatea IsDropDown mai trebuie setata si in click, pentru cazul in care s-a facut o selectie, lista s-a inchis, dar nu s-a parasit controlul. Valid se declanseaza doar la parasirea controlului.


Daniel Buduru
 11/19/2010 9:39:16 AM
User is offlineBodanIonescu
36 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
ahaaaaaaaaa, capcane .
Mersi de precizari, eu nu prea folosesc tastele stanga drepta pt. deplasare intr-un form sau grid - de aceea nu m-am gandit la ele.
Ce nu mai imi place la combo este lipsa unei proprietati readonly - adik sa poti sa intri in control dar fara sa poti modifica ceva.


 11/19/2010 9:48:04 AM
User is offlineBodanIonescu
36 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
Uite, ca am verificat si mie nu se deruleaza valorile declarate in combo, ci pur si simplu trece la urmatorul/anteriorul camp.
Iar cu evenimentul click - e cam naspa sa dai click sa iei mana de pe mouse si sa alegi cu tastele sageti, probabilitatea este f. aproape de zero - e extrem de incomod.

 11/19/2010 9:50:01 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A)
Se poate implementa si readonly, desi utilizatorul s-ar putea sa aiba obiectii.
Trebuie decuplat controlul de la controlsource si memorata valoarea sau pozitia listei la intrare (GotFocus) si repozitionarea listei si recuplat controlul la iesire (LostFocus).
Ar fi indicata si schimbarea culorilor atunci cand e readonly, trebuie atentionat cumva utilizatorul ca lista merge in gol.

Daniel Buduru
 11/19/2010 10:02:14 AM
User is offlineBodanIonescu
36 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
Buna ideeaaaaaaaaaaaaaa!
Pai eu faceam altfel: foloseam clauza when si schimbam culoarea - dar nu pot intra in control ca in celelalte.
Jos palaria!, imi plac solutiile tale.
Eu de-abea acum am reusit sa-mi transfer aplicatia de fpd26  in vfp9 - era prea mare si nu stiam de unde s-o apuc, si cand ma apucam si vdm k nu am spor, ma lasam pagubas - acum am reusit sa ies la liman - in doua luni am transferat toata aplicatia (mai mult 100.000 linii de program - 150 de ferestre de actualizare- 250 de rapoarte).
Pai tinem legatura ca imi chestiile astea de finetze.
Ps. nu prea am inteles de ce sa aiba utilizatorul obiectii

 11/19/2010 10:06:18 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A)
 BodanIonescu wrote
Uite, ca am verificat si mie nu se deruleaza valorile declarate in combo, ci pur si simplu trece la urmatorul/anteriorul camp.
Iar cu evenimentul click - e cam naspa sa dai click sa iei mana de pe mouse si sa alegi cu tastele sageti, probabilitatea este f. aproape de zero - e extrem de incomod.


Se poate sa nu se mai deruleze la left-right. Eu am facut o astfel de clasa inca in vfp3, si sigur la vremea cand am facut eu clasa se comporta asa, altfel nu m-as fi complicat. De atunci, doar am imbunatatit clasa, dar n-am mai verificat cum se comporta combo nativ in versiunile urmatoare.

Evenimentul click se declanseaza la selectia din lista, chiar daca e facuta cu tastele. By design ...


Daniel Buduru
 11/19/2010 4:51:03 PM
User is offlineBodanIonescu
36 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
Mai am o problema care ma incurca foarte rau, k diferrntza intre Fpd26 si vfp9:
In Fpd26 dak deschid aceasi tabela de doua ori  (cu aliasuri diferite) blochez una scriu ceva, regasesc in cea de a doua ce am scris - fara sa fie nevoie sa dau comanda unlock. In vfp nu regasesc in in al doilea alias informati ascrisa in primul pana nu dau comanda Unlock record recno().
Nu se poate corecta acest comportament? Nu mi se pare corect - sunt in acceasi sesiune de date - deci ar fi normal sa regasesc informatia fara sa fie nevoie sa deblochez inregistrarea respectiva!

 11/19/2010 7:40:55 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A)
Daca inregistrarea e blocata manual, cu rlock(), deblocarea cu unlock record e obligatorie.
Vfp face blocarea automata a inregistrarilor, si in help, la Locking Data, se gaseste lista comenzilor care blocheaza automat inregistrarea, tabela sau headerul tabelei. Append, delete si replace se numara printre cele vreo 20 de comenzi listatea acolo
Daca se modifica o inregistrare, se intra automat in record lock. Continutul modificat al inregistrarii se poate vedea abia dupa ce inregistrarea este deblocata, fie cu unlock, fie prin mutarea pointerului.
VFP 3 a introdus bufferingul. Asta e modul de lucru normal. Scrii in buffer, apoi decizi daca ce ai scris se transfera in tabela (tableupdate) sau se arunca (tablerevert). Simplu si extrem de comod.


Daniel Buduru
 11/20/2010 6:05:23 AM
User is offlineBodanIonescu
36 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
Da stiu de buffering - dar nu pot implementa acum in aplicatie acest lucru
(va trebui sa modific foarte mult) - urmeaza atunci cand deja am trecut de acest prim pas si toti clientii mei deja vor lucra in varianta vfp9.
Eu, prefer sa folosesc blocarea cu RLOCk, adik ma asigur ca inregistrarea poate fi blocata si apoi o modific.
Ok mersi pt. informatia cu Locking data - eu am cautat dar nu am gasit :-P.
 11/20/2010 6:19:27 AM
User is offlineBodanIonescu
36 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
Stii am gasit rezolvarea la ce doream este reglata prin Set Lock On - atunci am aceeasi informatie in toate cursoarele deschise.
Normal - cred ca afecteaza performanta lucrului in retea  -dar deocamdata nu asta e problema mea, ci sa sa scap de fpd26.
 11/20/2010 6:40:05 AM
User is offlineBodanIonescu
36 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
M-am grabit cu concluzia (am avut o greseala in codul de test) - nu, nu face set lock on ce vreau eu - este exact cum ai spus, ce vreau eu se intampla dak nu folosesc rlock()
 11/20/2010 2:36:37 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A)
Am testat codul de mai jos atat in FPD cat si in VFP9 si intradevar se comporta diferit, respectiv in FPD se vede acelasi lucru in ambele ferestre iar in VFP modificarea apare in Browse doar dupa Unlock. Si mie mi se pare o lipsa de consecventa si mi s-ar parea corect ca atat timp cat fisierul este deschis unbuffered in aceeasi sesiune, sa vad acelasi lucru in ambele ferestre. Comportamentul este ca si cum fisierele ar fi deschise cu Buffering, desi la Buffering=1 se spune : "Record locking and data writing are identical to earlier FoxPro versions"
Situatia trebuie luata asa cum este si probabil ca te incurca la trecerea directa a programelor din FPD in VFP pentru ca se schimba unele ipoteze si uneori apar surprize.
Solutia de moment este ori sa nu faci Rlock() ori sa dai apoi Unlock. In timp trebuie sa-ti schimbi toata politica de lucru cu fisiere.

CREATE TABLE xxx (Id N(3), Nume c(30))
INSERT INTO xxx ( Id,Nume ) VALUES (1,"Pozitia unu")
INSERT INTO xxx ( Id,Nume ) VALUES (2,"Pozitia doi")
INSERT INTO xxx ( Id,Nume ) VALUES (3,"Pozitia trei")
USE IN xxx
USE xxx SHARED IN 0 ALIAS a
USE xxx SHARED AGAIN IN 0 ALIAS b
SELECT a
GO 2
=RLOCK()
REPLACE nume WITH "Pozitia din mijloc"
SELECT b
BROWSE
UNLOCK
Browse

 11/20/2010 4:01:08 PM
User is offlineNelu Solomon
29 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A)
Buna seara,
problema este de la Set refresh, el influenteaza daca si cum se face refreshul intr-un browse. Trebuie vazut helpul. Refreshul trebuie setat la o valoare mica, eu l-am gasit la 20. Am facut un test cu un tabel deschis in doua sesiuni de vfp diferite cu browse,  la set refresh  to 1 se produce updatarea instantaneu in cel de al doilea browse - la parasirea inregistrarii.
De asemenea trebuie vazut si helpul de la CursorSetProp("Buffering",1). In Help spune destul de categoric ce face el:

1 – Sets row and table buffering off. Record locking and data writing are identical to earlier FoxPro versions. (Default)


 11/20/2010 8:20:00 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A)
Vorbim lucruri diferite. Nu era vorba de sesiuni diferite iar testele le-am facut cu set refresh to 1.
La sesiuni diferite comportamentul este Ok, respectiv daca o inregistrare este blocata intr-o sesiune in cealalta vom vedea modificarile doar dupa deblocare si dupa timpul de refresh, insa pe perioada blocarii nu putem modifica nimic.  Daca nu o blocam vom vedea modificarile imediat dupa referesh.
Daca insa deschidem o tabela de doua ori in aceeasi sesiune comportamentul este cel putin ciudat. In exemplul pe care l-am dat, indiferent ce timp de refresh exista , in primul browse nu vom vedea modificarea inregistrarii doi, atat timp cat ea este blocata in cealalta zona. Chiar mai mult, putem modifica in browse continutul inregistrarii  blocate cu toate ca Buffered=1.
Daca se da Esc inregistrarea se deblocheaza si in al doilea browse vedem ca valoarea modificata a fost inlocuita cu cea din zona in care a fost blocata. Cu alte cuvinte mi-a facut un Tablerevert pe gratis.




 11/20/2010 11:10:31 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A)
Comportamentul constatat se datoreaza blocarii automate a inregistrarii si nu buffering-ului.
Cu buffering=1 VFP se comporta, intr-adevar, la fel ca FPD.
Ce nu e la fel, e automatic locking. Chiar daca in VFP exista si manual locking, comenzile Append, Replace, Delete (si nu numai) fac lock automat pe inregistrare. Si asta nu se poate dezactiva.


Daniel Buduru
 11/21/2010 4:29:19 PM
User is offlineBodanIonescu
36 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (Romania)
 Eugen Gliga wrote
Am testat codul de mai jos atat in FPD cat si in VFP9 si intradevar se comporta diferit, respectiv in FPD se vede acelasi lucru in ambele ferestre iar in VFP modificarea apare in Browse doar dupa Unlock. Si mie mi se pare o lipsa de consecventa si mi s-ar parea corect ca atat timp cat fisierul este deschis unbuffered in aceeasi sesiune, sa vad acelasi lucru in ambele ferestre. Comportamentul este ca si cum fisierele ar fi deschise cu Buffering, desi la Buffering=1 se spune : "Record locking and data writing are identical to earlier FoxPro versions"
Situatia trebuie luata asa cum este si probabil ca te incurca la trecerea directa a programelor din FPD in VFP pentru ca se schimba unele ipoteze si uneori apar surprize.
Solutia de moment este ori sa nu faci Rlock() ori sa dai apoi Unlock. In timp trebuie sa-ti schimbi toata politica de lucru cu fisiere.

CREATE TABLE xxx (Id N(3), Nume c(30))
INSERT INTO xxx ( Id,Nume ) VALUES (1,"Pozitia unu")
INSERT INTO xxx ( Id,Nume ) VALUES (2,"Pozitia doi")
INSERT INTO xxx ( Id,Nume ) VALUES (3,"Pozitia trei")
USE IN xxx
USE xxx SHARED IN 0 ALIAS a
USE xxx SHARED AGAIN IN 0 ALIAS b
SELECT a
GO 2
=RLOCK()
REPLACE nume WITH "Pozitia din mijloc"
SELECT b
BROWSE
UNLOCK
Browse



Normal ca am luat-o asa cum este. Normal ca voi schimba politica - de fapt voi schimba totul, dar in trepte,. La ora asta prioritar pt. mine sa este sa scap de vers de fpd26 - acum lucrez pe surse comune cu #if version()="F" #else #endif ca sa diferentiez cele doua versiuni, si este destuld e greu. odata ce nu mai trebuie sa tin cont ca mai sunt clienti care lucreaza in fpd26 voi putea lucra mult mai lejer.
Ca solutie am preferat sa fac un unlock record recno() si urmat de rlock() ca sa nu imi intre altcineva pe inregistrare pana termin tot ce am de facut acolo - nu e ok, dar nu am alta solutie mai buna.
 11/22/2010 7:28:15 AM
User is offlineNelu Solomon
29 posts


Re: Dezactivarea derularii optiunilor dintr-un combo box cu tastele Up?Dn Arrow
 (N/A)
 Eugen Gliga wrote
Vorbim lucruri diferite...

Corect. M-am grabit cu raspunsul fara sa fiu atent.
  Visual FoxPro  Clase - VCX si PRG  Dezactivarea de...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement