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  Clase - VCX si PRG  Dimensionare co...
 Dimensionare coloana grid
 
 9/26/2009 12:59:58 AM
User is offlineEugen Gliga
1038 posts
1st




Dimensionare coloana grid
 (N/A)
Incerc sa fac o dimensionare cat mai exacta a coloanelor unui grid in functie de marimea campurilor afisate si de tipul fontului, astfel incat probabilitatea sa se vada tot sirul sa fie cat mai mare.
Am incercat sa folosesc latimea medie a caracterelor obtinuta cu Fontmetric(6) inmultita cu un coeficient determinat experimental, insa datorita faptului ca acest coeficient este si el dependent de marimea campului, in cazul in care campurile difera mult ca marime, eroarea creste. Formula pe care am folosit-o este urmatorea, insa are trebui sa folosesc un Icase in loc de Iif, pt marirea preciziei.

       ThisForm.GrdGrid1.Columns[Ix].Width=Fsize(Fields(Ix))*Fontmetric(6,"Verdana",10,"B")*Iif(Fsize(Fields(Ix))<5,1.6,1.3)

Ce alte solutii ar mai fi ?



 9/26/2009 2:37:36 AM
User is offlineGrigore Dolghin
3521 posts
www.class-software.eu
1st






Re: Dimensionare coloana grid
 (N/A)
Grid.AutoFit()?
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 9/26/2009 3:14:57 AM
User is offlineEugen Gliga
1038 posts
1st




Re: Dimensionare coloana grid
 (N/A)
Poate ca nu stiu eu sa folosesc aceasta metoda. Din cat am observat, Autofit, potriveste coloanele la dimensiunea hederului. Am de exemplu o coloana cu un camp de 20 caractere cu captionul hederului "Denumire". Pe o pozitie am 20 de "I" iar pe alta 20 de "M". Pozitia cu M este cam dubla ca lungime decat cea cu I. Daca folosesc Grid.Autofit, coloana se dimensioneaza astfel incat nu vad nici jumatate din I-uri. Poate ar trebui sa umplu captionul hederelor cu spatii pana ajunge la dimensiunea campului.




 9/28/2009 12:44:24 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Dimensionare coloana grid
 (N/A) Modified By Daniel Buduru  on 9/28/2009 12:02:00 PM)
 Eugen Gliga wrote
Am incercat sa folosesc latimea medie a caracterelor obtinuta cu Fontmetric(6) inmultita cu un coeficient determinat experimental, insa datorita faptului ca acest coeficient este si el dependent de marimea campului, in cazul in care campurile difera mult ca marime, eroarea creste. Formula pe care am folosit-o este urmatorea, insa are trebui sa folosesc un Icase in loc de Iif, pt marirea preciziei.

       ThisForm.GrdGrid1.Columns[Ix].Width=Fsize(Fields(Ix))*Fontmetric(6,"Verdana",10,"B")*Iif(Fsize(Fields(Ix))<5,1.6,1.3)

Coeficientul poate ramane constant daca se tine cont de grid.gridlinewidth si de textbox.margin
Un exemplu, care tine cont de column.inputmask:

loGrid= ThisForm.GrdGrid1
lnMargin=2
lnGap=IIF(BITAND(loGrid.Gridlines,2)=2,1,0)*loGrid.GridLineWidth+lnMargin
lnK=1.3
FOR EACH loColumn IN loGrid.Columns foxobject
    lnWidth=EVL(EVL(LEN(loColumn.InputMask),FSIZE(JUSTEXT(loColumn.ControlSource),loGrid.RecordSource)),10) &&daca fsize returneaza 0 ...
    loColumn.Width=lnGap+ FONTMETRIC(6,loColumn.FontName, loColumn.FontSize, IIF(loColumn.FontBold,'B',''))*lnK*lnWidth
NEXT

Codul de mai sus ar trebui completat cu tratarea coloanelor de tip varchar, de tip date si datetime, si al coloanelor care au in controlsource o expresie


Grid.AutoFit() stabileste latimea coloanelor la maximul dintre latimea textului din header si latimea textului din coloana. Daca metodaeste apelata pe un grid nepopulat, latimea coloanelor e dictata de latima textului din header.


Daniel Buduru
 9/29/2009 3:36:44 AM
User is offlineEugen Gliga
1038 posts
1st




Re: Dimensionare coloana grid
 (N/A)
Exemplul mi-a fost foarte util, insa in cazul meu TextBox.Margin este 0 iar GridLineWidth este 1 si per total lnGap=1, influenta fiind foarte mica. Mai exact, pt un camp C(3) folost pt unitate de masura, cu lnK=1.3, la "BUC" se vede doar jumate din C iar la "MMC" se vede doar MM. Pana la urma am ajuns experimental la urmatoarea formula:

    loColumn.Width=lnGap+ FONTMETRIC(6,loColumn.FontName, loColumn.FontSize, IIF(loColumn.FontBold,'B','')) * (lnK+1.5/lnWidth) * lnWidth



 9/29/2009 1:44:39 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Dimensionare coloana grid
 (N/A)
Dimensionarea coloanei in functie de numarul de caractere din camp nu poate fi decat aproximativa, daca fontul este proportional.
FONTMETRIC(6...) returneaza latimea media a unui caracter. FONTEMTRIC(7,...) latimea maxima a unui caracter. In cazul fontului Verdana, 10, Bold raportul dintre latimea maxima si cea medie este de 4.14, ceea ce este destul de mult.
TXTWIDTH() returneaza latimea unui text dat raportat la latimea medie.
? TXTWIDTH("BUC','Verdana',10,'B')/LEN("BUC") && 1,428
? TXTWIDTH("MMC','Verdana',10,'B')/LEN("MMC") && 1,619
Poate un coeficient diferit pentru caracter si numeric?
Pentru numeric s-ar putea lua TXTWIDTH("0",...) - care e 1,28 pentru verdana 10 bold), iar pentru caracter TXTWIDTH("A",..) , 1,43


Daniel Buduru
 9/29/2009 2:45:05 PM
User is offlineGrigore Dolghin
3521 posts
www.class-software.eu
1st






Re: Dimensionare coloana grid
 (N/A)

Sa fiu sigur ca am inteles: se da un grid. Tot ce stim despre el este ca va contine niste texte. Tot ce stim despre textele alea e numarul maxim de caractere, dar nu stim daca intr-adevar vor fi atat de lungi; poate vor avea numai 2-3 litere, in loc de 150 cat e lungimea campului.

Si totusi, vrem sa redimensionam coloanele alea.

Hm. Eu unul cred ca ce vrei tu nu se poate (ma rog, nu in felul asta). Daca e atat de critica treaba, eu unul as folosi grid.AutoFit() - (asta redimensioneaza coloanele tinand cont de latimea textelor afisate in grid - subliniez "afisate" - e posibil ca mai jos sa fie un text mai lat, care va fi afisat trunchiat), sau as itera prin inregistrari, folosind GetTextExtentPoint32 pentru a obtine latimea EFECTIVA in pixeli a fiecarui text din setul de date din grid, apoi as redimensiona coloanele gridului functie de valoarea maxima obtinuta. Si cu asta, basta.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 9/29/2009 9:06:32 PM
User is offlineEugen Gliga
1038 posts
1st




Re: Dimensionare coloana grid
 (N/A)
O sa fiu mai clar. Se da un form cu un grid care poate avea drept recordsource diverse cursoare cu numar variabil de coloane si campuri de tip caracter numeric sau data, de lungimi cuprinse intre 1 si 40. Se cere dimensionarea optima a coloanelor si implicit a gridului si a formului astfel incat sa se vada cat mai multa informatie si daca este posibil sa se evite scroll-ul orizontal. Binenteles ca se fac compromisuri. Daca revin la exemplul dat, in cazul unui camp Char(3) ( uzual o prescurtare, de ex. UM), in general toate cele trei caractere sunt ocupate iar probabilitatea sa am doua caractere late este destul de mare si ar fi deranjant sa vad doar doua din ele. As accepta in schimb sa vad in unele cazuri minim 2.5 caractere. In cazul unui camp Char(40), ( uzual o denumire sau un nume ), ponderea cazurilor in care toate cele 40 de caractere sunt ocupate este mica iar in aceste cazuri latimea in pixeli a textului se apropie de latimea medie calculata cu Fontmetric(6,...), iar faptul ca nu vad ultimele caractere ar fi acceptabil, daca in schimb nu trebuie sa fac scroll orizontal. In final am ajuns la urmatorul compromis pt campuri de tip caracter:
loColumn.Width=Fontmetric(6,...)*Fsize(FieldX)*(2.3+1.5/Fsize(FieldX)), insa la cei doi coeficienti se mai poate lucra.


 10/14/2009 1:37:34 AM
User is offlineedyshor
1450 posts
1st




Re: Dimensionare coloana grid
 (N/A)
poti sa iei in considerare maxim-ul de ocupare al campului, poate nici o inregistrare nu ocupa mai mult de 30 char din dimensiunea de 40 char a campului :)
 10/15/2009 12:07:12 PM
User is offlinePetre Popescu
253 posts
4th


Re: Dimensionare coloana grid
 (Romania) Modified By Petre Popescu  on 10/15/2009 11:10:25 AM)
Un articol pe tema dimensiunii in functie de font:

Finding the length of a string in a specific font

Edit:

http://weblogs.foxite.com/andykramek/archive/2009/05/18/8455.aspx#comments

  Visual FoxPro  Clase - VCX si PRG  Dimensionare co...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement