Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Grid columns autofit
Message
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
00747053
Message ID:
00747562
Views:
15
Hi, Martin!

Why you use "_Screen.TextWidth" when there is a TxtWidth() function? This makes code quite heavy.

Also, take a look to file#9970 and article VFP Grids Part III that explains how it works. There is a header class with DblClick code to auto fit column. Also, that header class takes care that autofit is fired only when double click on resizing area of header (standard behavior in most applications), not anywhere on the header.

HTH.

>Hi Soykan,
>
>Insert code into method header.DblClick() every column..
>
>IF !This.Parent.Parent.SplitLineHitTest(This)
>   RETURN
>ENDIF
>
>LOCAL liSele,liRecno,liHeight,liRow,lolbl,liRelRow,;
>      lcSource,loColumn,liMax,luVal,lcType
>IF EOF(This.Parent.Parent.RecordSource) && pokud tam není ani záznam
>   RETURN && pak se vra
>ENDIF
>
>liSele=SELE() && uschovej si oblast
>WITH This.Parent.Parent
>SELE (.RecordSource) && skoè na tabulku
>liHeight=.Height-.HeaderHeight-IIF(INLIST(.ScrollBars,1,3),16,0)
>liRow=INT(liHeight/.RowHeight)
>liRelRow=.RelativeRow && relativní øádek
>ENDWITH
>loColumn=This.Parent && aktivní sloupec
>lcSource=loColumn.ControlSource && zdroj dat
>
>loControl=EVAL("loColumn."+loColumn.CurrentControl)
>lcType=TYPE("loControl.Value")
>
>* nyní projdu viditelný øádky a zjistím šíøku textu
>liRecno=RECNO() && zjisti pùvodní vìtu
>
>LOCAL ARRAY laFont(6)  && ZMÌNA VELIKOSTI OBJEKTU DLE NADPISU
>* USCHOVÁNÍ INF. O FINTU NA SCREENU
>laFont(1)=_SCREEN.FontName
>laFont(2)=_SCREEN.FontSize
>laFont(3)=_SCREEN.FontBold
>laFont(4)=_SCREEN.FontItalic
>laFont(5)=_SCREEN.FontStrikethru
>laFont(6)=_SCREEN.FontUnderline
>
>IF !PEMSTATUS(loControl,"PropAsColumn",5) OR ;
>    PEMSTATUS(loControl,"PropAsColumn",5) AND;
>    !loControl.PropAsColumn
>   * NASTAVENÍ INF. FontU NA SCREENU DLE OBJEKTU
>   _SCREEN.FontName=loControl.FontName
>   _SCREEN.FontSize=loControl.FontSize
>   _SCREEN.FontBold=loControl.FontBold
>   _SCREEN.FontItalic=loControl.FontItalic
>   _SCREEN.FontStrikethru=loControl.FontStrikethru
>   _SCREEN.FontUnderline=loControl.FontUnderline
>ENDIF
>
>SKIP -1*(liRelRow-1) && skoè na zaèátek viditelného obsahu
>liMax=0
>
>DO CASE
>   CASE lcType='C' && øetìzec
>        SCAN NEXT liRow
>             IF PEMSTATUS(loControl,"PropAsColumn",5) AND loControl.PropAsColumn
>                * NASTAVENÍ INF. FontU NA SCREENU DLE OBJEKTU
>                _SCREEN.FontName=IIF(EMPTY(loColumn.DynamicFontName),loColumn.FontName,EVAL(loColumn.DynamicFontName))
>                _SCREEN.FontSize=IIF(EMPTY(loColumn.DynamicFontSize),loColumn.FontSize,EVAL(loColumn.DynamicFontSize))
>                _SCREEN.FontBold=IIF(EMPTY(loColumn.DynamicFontBold),loColumn.FontBold,EVAL(loColumn.DynamicFontBold))
>                _SCREEN.FontItalic=IIF(EMPTY(loColumn.DynamicFontItalic),loColumn.FontItalic,EVAL(loColumn.DynamicFontItalic))
>                _SCREEN.FontStrikethru=IIF(EMPTY(loColumn.DynamicFontStrikethru),loColumn.FontStrikethru,EVAL(loColumn.DynamicFontStrikethru))
>                _SCREEN.FontUnderline=IIF(EMPTY(loColumn.DynamicFontUnderline),loColumn.FontUnderline,EVAL(loColumn.DynamicFontUnderline))
>             ENDIF
>
>             luVal=EVAL(lcSource)
>             luVal=IIF(ISNUL(luVal),".NULL.",RTRIM(luVal))
>             liy=_SCREEN.TextWidth(luVal)+4 && VÝPOÈET ŠÍØKY V ZÁVISLOSTI NA ZDA OBJEKT MÁ OKRAJ
>             IF liy>liMax
>                liMax=liy
>             ENDIF
>          ENDSCAN
>
>   CASE lcType='M' && øetìzec
>        IF PEMSTATUS(loControl,"PropAsColumn",5) AND loControl.PropAsColumn
>           * NASTAVENÍ INF. FontU NA SCREENU DLE OBJEKTU
>           _SCREEN.FontName=IIF(EMPTY(loColumn.DynamicFontName),loColumn.FontName,EVAL(loColumn.DynamicFontName))
>           _SCREEN.FontSize=IIF(EMPTY(loColumn.DynamicFontSize),loColumn.FontSize,EVAL(loColumn.DynamicFontSize))
>           _SCREEN.FontBold=IIF(EMPTY(loColumn.DynamicFontBold),loColumn.FontBold,EVAL(loColumn.DynamicFontBold))
>           _SCREEN.FontItalic=IIF(EMPTY(loColumn.DynamicFontItalic),loColumn.FontItalic,EVAL(loColumn.DynamicFontItalic))
>           _SCREEN.FontStrikethru=IIF(EMPTY(loColumn.DynamicFontStrikethru),loColumn.FontStrikethru,EVAL(loColumn.DynamicFontStrikethru))
>           _SCREEN.FontUnderline=IIF(EMPTY(loColumn.DynamicFontUnderline),loColumn.FontUnderline,EVAL(loColumn.DynamicFontUnderline))
>        ENDIF
>        luVal="Memo"
>        liMax=_SCREEN.TextWidth(luVal)+4 && VÝPOÈET ŠÍØKY V ZÁVISLOSTI NA ZDA OBJEKT MÁ OKRAJ
>
>   CASE lcType='L' && logická hodnota
>        SCAN NEXT liRow
>             IF PEMSTATUS(loControl,"PropAsColumn",5) AND loControl.PropAsColumn
>                * NASTAVENÍ INF. FontU NA SCREENU DLE OBJEKTU
>                _SCREEN.FontName=IIF(EMPTY(loColumn.DynamicFontName),loColumn.FontName,EVAL(loColumn.DynamicFontName))
>                _SCREEN.FontSize=IIF(EMPTY(loColumn.DynamicFontSize),loColumn.FontSize,EVAL(loColumn.DynamicFontSize))
>                _SCREEN.FontBold=IIF(EMPTY(loColumn.DynamicFontBold),loColumn.FontBold,EVAL(loColumn.DynamicFontBold))
>                _SCREEN.FontItalic=IIF(EMPTY(loColumn.DynamicFontItalic),loColumn.FontItalic,EVAL(loColumn.DynamicFontItalic))
>                _SCREEN.FontStrikethru=IIF(EMPTY(loColumn.DynamicFontStrikethru),loColumn.FontStrikethru,EVAL(loColumn.DynamicFontStrikethru))
>                _SCREEN.FontUnderline=IIF(EMPTY(loColumn.DynamicFontUnderline),loColumn.FontUnderline,EVAL(loColumn.DynamicFontUnderline))
>             ENDIF
>             luVal=EVAL(lcSource)
>             luVal=IIF(ISNUL(luVal),".NULL.",IIF(luVal,'T','F'))
>             liy=_SCREEN.TextWidth(luVal)+4 && VÝPOÈET ŠÍØKY V ZÁVISLOSTI NA ZDA OBJEKT MÁ OKRAJ
>             IF liy>liMax
>                liMax=liy
>             ENDIF
>        ENDSCAN
>
>   CASE lcType='I' && Integer hodnota
>        SCAN NEXT liRow
>             IF PEMSTATUS(loControl,"PropAsColumn",5) AND loControl.PropAsColumn
>                * NASTAVENÍ INF. FontU NA SCREENU DLE OBJEKTU
>                _SCREEN.FontName=IIF(EMPTY(loColumn.DynamicFontName),loColumn.FontName,EVAL(loColumn.DynamicFontName))
>                _SCREEN.FontSize=IIF(EMPTY(loColumn.DynamicFontSize),loColumn.FontSize,EVAL(loColumn.DynamicFontSize))
>                _SCREEN.FontBold=IIF(EMPTY(loColumn.DynamicFontBold),loColumn.FontBold,EVAL(loColumn.DynamicFontBold))
>                _SCREEN.FontItalic=IIF(EMPTY(loColumn.DynamicFontItalic),loColumn.FontItalic,EVAL(loColumn.DynamicFontItalic))
>                _SCREEN.FontStrikethru=IIF(EMPTY(loColumn.DynamicFontStrikethru),loColumn.FontStrikethru,EVAL(loColumn.DynamicFontStrikethru))
>                _SCREEN.FontUnderline=IIF(EMPTY(loColumn.DynamicFontUnderline),loColumn.FontUnderline,EVAL(loColumn.DynamicFontUnderline))
>              ENDIF
>              luVal=EVAL(lcSource)
>              luVal=IIF(ISNUL(luVal),".NULL.",LTRIM(STR(luVal,20)))
>              liy=_SCREEN.TextWidth(luVal)+4 && VÝPOÈET ŠÍØKY V ZÁVISLOSTI NA ZDA OBJEKT MÁ OKRAJ
>              IF liy>liMax
>                 liMax=liy
>              ENDIF
>        ENDSCAN
>
>   CASE lcType$'Y,N,F,B' && numerická hodnota
>        SCAN NEXT liRow
>             IF PEMSTATUS(loControl,"PropAsColumn",5) AND loControl.PropAsColumn
>                * NASTAVENÍ INF. FontU NA SCREENU DLE OBJEKTU
>                _SCREEN.FontName=IIF(EMPTY(loColumn.DynamicFontName),loColumn.FontName,EVAL(loColumn.DynamicFontName))
>                _SCREEN.FontSize=IIF(EMPTY(loColumn.DynamicFontSize),loColumn.FontSize,EVAL(loColumn.DynamicFontSize))
>                _SCREEN.FontBold=IIF(EMPTY(loColumn.DynamicFontBold),loColumn.FontBold,EVAL(loColumn.DynamicFontBold))
>                _SCREEN.FontItalic=IIF(EMPTY(loColumn.DynamicFontItalic),loColumn.FontItalic,EVAL(loColumn.DynamicFontItalic))
>                _SCREEN.FontStrikethru=IIF(EMPTY(loColumn.DynamicFontStrikethru),loColumn.FontStrikethru,EVAL(loColumn.DynamicFontStrikethru))
>                _SCREEN.FontUnderline=IIF(EMPTY(loColumn.DynamicFontUnderline),loColumn.FontUnderline,EVAL(loColumn.DynamicFontUnderline))
>             ENDIF
>             luVal=EVAL(lcSource)
>             luVal=IIF(ISNUL(luVal),".NULL.",NumToChar(luVal))
>             liy=_SCREEN.TextWidth(luVal)+4 && VÝPOÈET ŠÍØKY V ZÁVISLOSTI NA ZDA OBJEKT MÁ OKRAJ
>             IF liy>liMax
>                liMax=liy
>             ENDIF
>        ENDSCAN
>
>   CASE lcType='D' && datum
>        SCAN NEXT liRow
>             IF PEMSTATUS(loControl,"PropAsColumn",5) AND loControl.PropAsColumn
>                * NASTAVENÍ INF. FontU NA SCREENU DLE OBJEKTU
>                _SCREEN.FontName=IIF(EMPTY(loColumn.DynamicFontName),loColumn.FontName,EVAL(loColumn.DynamicFontName))
>                _SCREEN.FontSize=IIF(EMPTY(loColumn.DynamicFontSize),loColumn.FontSize,EVAL(loColumn.DynamicFontSize))
>                _SCREEN.FontBold=IIF(EMPTY(loColumn.DynamicFontBold),loColumn.FontBold,EVAL(loColumn.DynamicFontBold))
>                _SCREEN.FontItalic=IIF(EMPTY(loColumn.DynamicFontItalic),loColumn.FontItalic,EVAL(loColumn.DynamicFontItalic))
>                _SCREEN.FontStrikethru=IIF(EMPTY(loColumn.DynamicFontStrikethru),loColumn.FontStrikethru,EVAL(loColumn.DynamicFontStrikethru))
>                _SCREEN.FontUnderline=IIF(EMPTY(loColumn.DynamicFontUnderline),loColumn.FontUnderline,EVAL(loColumn.DynamicFontUnderline))
>             ENDIF
>             luVal=EVAL(lcSource)
>             luVal=IIF(ISNUL(luVal),".NULL.",DTOC(luVal))
>             liy=_SCREEN.TextWidth(luVal)+4 && VÝPOÈET ŠÍØKY V ZÁVISLOSTI NA ZDA OBJEKT MÁ OKRAJ
>             IF liy>liMax
>                liMax=liy
>             ENDIF
>        ENDSCAN
>
>   CASE lcType='T' && datum a èas
>        SCAN NEXT liRow
>             IF PEMSTATUS(loControl,"PropAsColumn",5) AND loControl.PropAsColumn
>                * NASTAVENÍ INF. FontU NA SCREENU DLE OBJEKTU
>                _SCREEN.FontName=IIF(EMPTY(loColumn.DynamicFontName),loColumn.FontName,EVAL(loColumn.DynamicFontName))
>                _SCREEN.FontSize=IIF(EMPTY(loColumn.DynamicFontSize),loColumn.FontSize,EVAL(loColumn.DynamicFontSize))
>                _SCREEN.FontBold=IIF(EMPTY(loColumn.DynamicFontBold),loColumn.FontBold,EVAL(loColumn.DynamicFontBold))
>                _SCREEN.FontItalic=IIF(EMPTY(loColumn.DynamicFontItalic),loColumn.FontItalic,EVAL(loColumn.DynamicFontItalic))
>                _SCREEN.FontStrikethru=IIF(EMPTY(loColumn.DynamicFontStrikethru),loColumn.FontStrikethru,EVAL(loColumn.DynamicFontStrikethru))
>                _SCREEN.FontUnderline=IIF(EMPTY(loColumn.DynamicFontUnderline),loColumn.FontUnderline,EVAL(loColumn.DynamicFontUnderline))
>             ENDIF
>             luVal=EVAL(lcSource)
>             luVal=IIF(ISNUL(luVal),".NULL.",TTOC(luVal))
>             liy=_SCREEN.TextWidth(luVal)+4 && VÝPOÈET ŠÍØKY V ZÁVISLOSTI NA ZDA OBJEKT MÁ OKRAJ
>             IF liy>liMax
>                liMax=liy
>             ENDIF
>        ENDSCAN
>
>   CASE lcType='G' && general ( objekt )
>        IF PEMSTATUS(loControl,"PropAsColumn",5) AND loControl.PropAsColumn
>           * NASTAVENÍ INF. FontU NA SCREENU DLE OBJEKTU
>           _SCREEN.FontName=IIF(EMPTY(loColumn.DynamicFontName),loColumn.FontName,EVAL(loColumn.DynamicFontName))
>           _SCREEN.FontSize=IIF(EMPTY(loColumn.DynamicFontSize),loColumn.FontSize,EVAL(loColumn.DynamicFontSize))
>           _SCREEN.FontBold=IIF(EMPTY(loColumn.DynamicFontBold),loColumn.FontBold,EVAL(loColumn.DynamicFontBold))
>           _SCREEN.FontItalic=IIF(EMPTY(loColumn.DynamicFontItalic),loColumn.FontItalic,EVAL(loColumn.DynamicFontItalic))
>           _SCREEN.FontStrikethru=IIF(EMPTY(loColumn.DynamicFontStrikethru),loColumn.FontStrikethru,EVAL(loColumn.DynamicFontStrikethru))
>           _SCREEN.FontUnderline=IIF(EMPTY(loColumn.DynamicFontUnderline),loColumn.FontUnderline,EVAL(loColumn.DynamicFontUnderline))
>         ENDIF
>         luVal='General'
>         liMax=_SCREEN.TextWidth(luVal)+4 && VÝPOÈET ŠÍØKY V ZÁVISLOSTI NA ZDA OBJEKT MÁ OKRAJ
>ENDCASE
>
>_SCREEN.FontName=laFont(1)
>_SCREEN.FontSize=laFont(2)
>_SCREEN.FontBold=laFont(3)
>_SCREEN.FontItalic=laFont(4)
>_SCREEN.FontStrikethru=laFont(5)
>_SCREEN.FontUnderline=laFont(6)
>
>GO liRecno && skoè na pùvodní vìtu
>IF liMax>0 && pokud tam nìco je
>   loColumn.Width=liMax && pak nastav novou šíøku
>ENDIF
>SELE (liSele)
>
>
>and add method SplitLineHitTest() to grid:
>
>* Zjistí, zda se myš (v okamžiku kliknutí na header) nachází nad èarou oddìlující sloupce
>LPARAM loHeader
>
>LOCAL liMRow, liMRowMax
>liMRow=MCOL(Thisform.Name,3) && pozice myši
>liMRowMax=OBJTOCLIENT(loHeader,2)+loHeader.Parent.Width+1 && pozice sloupce + šíøka sloupce pøevedeno na formuláø
>* pokuï seš mimo
>RETURN BETWEEN(liMRow,liMRowMax-5,liMRowMax+5)
>
>
>If you add property PropAsColumn into control (your classes texbox, combbox etc.) and set it to .T., then autofit respect dynamic properties on column.
>
> MartinJ
>
>>Hi All,
>>how can I autofit of grid columns
>>
>>TIA
Vlad Grynchyshyn, Project Manager, MCP
vgryn@yahoo.com
ICQ #10709245
The professional level of programmer could be determined by level of stupidity of his/her bugs

It is not appropriate to say that question is "foolish". There could be only foolish answers. Everybody passed period of time when knows nothing about something.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform