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:
00747056
Views:
14
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
"Navision is evil that needs to be erazed... to the ground"

Jabber: gorila@dione.zcu.cz
Jabber? Jabbim
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform