V některých programech lze v gridu či jeho ekvivalentech doubleclickem na rozdělovací čáře sloupců nastavit maximální šířku sloupce pro viditelný text. Není to zas tak složité, jak to vypadá.
Vlastní kód lze vložit do metody DblClick() objektu Header přímo ve vizuálním návrhu či v programové definici třídy sloupce/hlavičky.
Navíc je udělán tak, aby jej bylo možno spustit ihned.
Metoda DblClick() - zdrojový kód:
LOCAL liMRow, liMRowMax,liSele,liRecno,liHeight,liRow,lolbl,liRelRow,lcSource,loColumn,liMax,luVal,lcType *** Tento kód lze nahradit metodou SplitLineHitTest() liMRow=MCOL(Thisform.Name,3) && pozice myši liMRowMax=OBJTOCLIENT(This,2)+This.Parent.Width+1 && Pozice sloupce + šířka sloupce převedeno na formulář * Pokuď seš mimo IF ! BETWEEN(liMRow,liMRowMax-5,liMRowMax+5) RETURN && Pak se vrať ENDIF *** Metoda SplitLineHitTest() IF EOF(This.Parent.Parent.RecordSource) && Pokud tam není ani záznam RETURN && Pak se vrať ENDIF liSele=SELE() && Uschovej si oblast lolbl=CREATEOBJECT("label") && Pomocný objekt SELE (This.Parent.Parent.RecordSource) && Skoč na tabulku *** Tento kód lze nahradit metodou GetVisibleRow() WITH This.Parent.Parent liHeight=.Height-.HeaderHeight-IIF(INLIST(.ScrollBars,1,3),16,0) liRow=INT(liHeight/.RowHeight) ENDWITH *** Metoda GetVisibleRow() liRelRow=This.Parent.Parent.RelativeRow && Relativní řádek loColumn=This.Parent && Aktivní sloupec lcSource=loColumn.ControlSource && Zdroj dat * Zjištění typu položky lcType=TYPE("EVAL(lcSource)") * Překopíruj údaje do labelu lolbl.FontName=loColumn.FontName lolbl.FontSize=loColumn.FontSize lolbl.FontBold=loColumn.FontBold lolbl.FontItalic=loColumn.FontItalic * Nyní projdu viditelný řádky a zjistím šířku textu liRecno=RECNO() && Zjisti původní větu SKIP -1*(liRelRow-1) && Skoč na začátek viditelného obsahu liMax=0 SCAN NEXT liRow * Jen pokud to není General pole luVal=IIF(lcType#"G",EVAL(lcSource),"") && Načti údaj lolbl.Caption=IIF(ISNULL(luVal),".NULL.",; IIF(lcType="C",RTRIM(luVal),; IIF(lcType="M","Memo",; IIF(lcType="L",IIF(luVal,"T","F"),; IIF(lcType="I",LTRIM(STR(luVal,20)),; IIF(lcType$"Y,N,F,B",ALLT(STR(luVal,20,4)),; IIF(lcType="D",DTOC(luVal),; IIF(lcType="T",TTOC(luVal),"General")))))))) lolbl.Width=TXTWIDTH(lolbl.Caption,lolbl.FontName,lolbl.FontSize,IIF(lolbl.FontBold,"B","")+IIF(lolbl.FontItalic,"I","")) IF lolbl.Width+4>liMax liMax=lolbl.Width+4 ENDIF ENDSCAN IF liMax>0 && Pokud tam něco je loColumn.Width=liMax && Pak nastav novou šířku ENDIF GO liRecno && Skoč na původní větu SELE (liSele)
Tento zdrojový kód nemá programovou chybu, pouze logickou. Jak by vypadal zdrojový kód, který by onu logickou chybu odstranil ?
<< Předchozí díl | Následující díl >> |