4 返信 最新の回答 日時: Feb 1, 2005 10:00 AM ユーザー:(ymgc)

    列幅を設定する方法を教えて下さい。

      FDK を使って、Table の 列幅を一定に指定する 
      プログラムを書きたいのですが、
      それらしいプロパティを見つけられずにいます。

      RealT r = F_ApiGetMetric( docId, cellId, FP_Width );

      どなたか列幅を設定する方法を教えて下さい。
        • 1. Re: 列幅を設定する方法を教えて下さい。
          Level 1
          k-maru様。

          表の列幅は、FO_Tblオブジェクトが全列幅を持ってます。
          プロパティはFP_TblColWidthsで、F_MetricsT型ですよ。
          • 2. Re: 列幅を設定する方法を教えて下さい。
            k-maru様。<br /><br />表の列幅設定部分は、下記のようなロジックになると思います。<br /><br />F_MetricsT colWid;<br />PRealT       colWid1 = 30.0*FV_METRIC_MM;<br />UIntT     ix;<br /><br />colWid = F_ApiGetMetrics(docId,tgroupId,FP_TblColWidths);<br />for(ix=0;ix<colWid.len;ix++){<br />   colWid.val[ix] = (MetricT)colWid1;<br />}<br />F_ApiSetMetrics(docId,tgroupId,FP_TblColWidths,&colWid); //横幅設定
            • 3. Re: 列幅を設定する方法を教えて下さい。
              Level 1
              どうもありがとうございます。
              MetricT の値の単位がよくわかってないのですが、なんとか列幅を変更できました。

              F_MetricsT ms, ms2;
              ms = F_ApiGetMetrics( docId, tblId, FP_TblColWidths );
              ms2.len = ms.len;
              ms2.val = (MetricT*)F_Alloc( sizeof( MetricT ) * ms.len, DSE );

              for ( i = 0; i < ms.len; i++ ) {
              F_Printf( NULL, "%02d:%06x¥n", i,ms.val[i] );
              aCell = this->getCell( 0, i );
              if ( aCell != NULL ) {
              m = aCell->rFontsize * aCell->iWidth * 0x10000;
              if ( m == 0 ) {
              ms2.val[i] = ms.val[i];
              } else {
              ms2.val[i] = m;}
              }
              }
              F_ApiDeallocateMetrics(&ms);
              F_ApiSetMetrics( docId, tblId, FP_TblColWidths, &ms2 );
              F_ApiDeallocateMetrics(&ms2);
              • 4. Re: 列幅を設定する方法を教えて下さい。
                Level 1
                k-maru様。

                MetricTなどの単位系(?)については。
                FDK付属のマニュアル「FDK7.0 Programmer’s Reference」(fdkref.pdf)を見ると良いですよ。

                MetricTに関しては、P.675に解説があります。