全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4387
推到 Plurk!
推到 Facebook!

報表內容斷行問題?

答題得分者是:Justmade
challenge
一般會員


發表:14
回覆:41
積分:11
註冊:2002-10-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-30 16:09:59 IP:211.74.xxx.xxx 未訂閱
請問各位前輩… 看過前面文章有提到若內容太長自動斷行的做法… 也就是將QRdbtext的autosize設為false、autostretch設為true… 但是試了之後…應該是有斷行…但第二行為空白… 不曉得是什麼原因…? 請各位前輩能指點一下…謝謝!^^
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-30 16:42:40 IP:203.203.xxx.xxx 未訂閱
WordWrap
property WordWrap : Boolean

Applies to

TQRCustomLabel, TQRLabel

Description

The WordWrap property controls how a line of text that is too long to fit in the width of the control is printed. If WordWrap is True the text will be wrapped to a new line. If the AutoStretch property is True this might make the control expand vertically.

If WordWrap is False the text will be clipped. WordWrap is True by Default
附上help的說明,Description的中文翻譯如下:
WordWrap這個屬性用來控制當文字長度超過控制項寬度時的情況,WordWrap設為True時,過長的文字會自動折行到新的一行。如果AutoStretch的屬性也為True時,控制項會以垂直延展的方式來變化。
如果WordWrap的屬性設為False,顯示的文字超過的部分會被截斷無法看到。WordWrap的預設值為True
challenge
一般會員


發表:14
回覆:41
積分:11
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-30 17:02:18 IP:211.74.xxx.xxx 未訂閱
謝謝前輩的說明… 看過說明後… wordwrap設為true…應該是會換行… 但還是看不到第二行的文字… 可它有空第二行的位置出來說…><~~    
引言: 附上help的說明,Description的中文翻譯如下:
WordWrap這個屬性用來控制當文字長度超過控制項寬度時的情況,WordWrap設為True時,過長的文字會自動折行到新的一行。如果AutoStretch的屬性也為True時,控制項會以垂直延展的方式來變化。
如果WordWrap的屬性設為False,顯示的文字超過的部分會被截斷無法看到。WordWrap的預設值為True
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-30 17:33:11 IP:203.203.xxx.xxx 未訂閱
這位女施主,老衲不過問武林中事很久了,前輩這二字對老衲而言:    把我叫太老了啦   < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=8702039&CC=194621"> 發表人 - hahalin 於 2003/03/30 17:34:13 發表人 - hahalin 於 2003/03/30 17:36:20 發表人 - hahalin 於 2003/03/30 17:36:53
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-30 17:38:19 IP:218.16.xxx.xxx 未訂閱
這是因為 Quick Report 的斷行控制只是以西方文字的斷行為基準,即是在空白,Tab等地方斷行。所以當我們用中文字而中間沒空白字元時,Quick Report 便不懂得斷行了。那為甚麼有時下面會留一空白行呢,就是因為 QuickReport 計算到需要斷行預留了空位,但卻不懂在那裡斷而沒斷行所致。 我自己的解決辦法是設個功能每 n 個字自動加入一個空白(用 length / copy 等功能),然後給 QRLabel / QRMemo 來顯示,那 QuickReport 就會斷行了,而 n 的數值因應該Label 能顯示多少個字元而定。
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-30 17:40:14 IP:203.203.xxx.xxx 未訂閱
高手一出手 便知有沒有 小弟也學到了 感謝感謝
challenge
一般會員


發表:14
回覆:41
積分:11
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-30 17:49:32 IP:211.74.xxx.xxx 未訂閱
歹勢啦…< > 把你叫老了… 我不是故意的…< >
引言: 這位女施主,老衲不過問武林中事很久了,前輩這二字對老衲而言: 把我叫太老了啦 < face="Verdana, Arial, Helvetica">
challenge
一般會員


發表:14
回覆:41
積分:11
註冊:2002-10-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-30 17:54:55 IP:211.74.xxx.xxx 未訂閱
呼呼…原來是這樣… 那我試看看嚕… 只是為何要給 > <>< face="Verdana, Arial, Helvetica">引言: 這是因為 Quick Report 的斷行控制只是以西方文字的斷行為基準,即是在空白,Tab等地方斷行。所以當我們用中文字而中間沒空白字元時,Quick Report 便不懂得斷行了。那為甚麼有時下面會留一空白行呢,就是因為 QuickReport 計算到需要斷行預留了空位,但卻不懂在那裡斷而沒斷行所致。 我自己的解決辦法是設個功能每 n 個字自動加入一個空白(用 length / copy 等功能),然後給 QRLabel / QRMemo 來顯示,那 QuickReport 就會斷行了,而 n 的數值因應該Label 能顯示多少個字元而定。
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-30 18:48:07 IP:218.16.xxx.xxx 未訂閱
由於 QRDBText 是直接從數量集元件提取資料的,所以若果你要用 QRDBText 來做,便要做一個 Calculated Field,或是在 OnGetText 做手腳,反而更煩更浪費資源;不如在 Before Print 直接處理後給 TQRLabel 列印更實際。    我剛才找了找幾年前寫的程式,找到這個 :
  function ChiWrap(Memo : String;LineLen : Integer) : String;
  var
    MemoList, ResultList : Tstrings;
    i : integer;
    WS : WideString;
  begin
    MemoList := TStringList.Create;
    ResultList := TStringList.Create;
    try
      MemoList.Text := Memo;
      for i := 0 to MemoList.Count -1 do
      begin
        WS := MemoList[i];
        while Length(WS) > LineLen do
        begin
          ResultList.Add(Copy(WS,0,LineLen));
          WS := Copy(WS,LineLen 1,Length(WS));
        end;
        ResultList.Add(WS);
      end;
      Result := ResultList.Text;
    finally
      MemoList.Free;
      ResultList.Free;
    end;
  end;
這幾年都甚少用 QReport 了,這功能寫得不大好但也沒動力去改善了。 例 : QRLabel1.Caption := ChiWrap(Table1.FieldByName('ChiDesc').AsString,40); 修改 : 再看一看才發現居然沒 Free 了那兩個 StringList 。唉... 發表人 - Justmade 於 2003/03/30 18:54:35
challenge
一般會員


發表:14
回覆:41
積分:11
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-31 00:49:10 IP:211.74.xxx.xxx 未訂閱
我試了之後… 預覽的結果都是同一筆… 也就是只有一筆在重覆show資料… < class="code"> procedure TForm1.Button1Click(Sender: TObject); begin while not form2.Query1.eof do begin form2.QRLabel1.Caption := ChiWrap(form2.Query1.FieldByName('QL_TEXT').AsString,40); next; form2.QuickRep1.preview; end; end;
引言: 由於 QRDBText 是直接從數量集元件提取資料的,所以若果你要用 QRDBText 來做,便要做一個 Calculated Field,或是在 OnGetText 做手腳,反而更煩更浪費資源;不如在 Before Print 直接處理後給 TQRLabel 列印更實際。 我剛才找了找幾年前寫的程式,找到這個 : 這幾年都甚少用 QReport 了,這功能寫得不大好但也沒動力去改善了。 例 : QRLabel1.Caption := ChiWrap(Table1.FieldByName('ChiDesc').AsString,40); 修改 : 再看一看才發現居然沒 Free 了那兩個 StringList 。唉... 發表人 - Justmade 於 2003/03/30 18:54:35
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-31 07:54:15 IP:218.16.xxx.xxx 未訂閱
QRLabel1.Caption := ChiWrap(Table1.FieldByName('ChiDesc').AsString,40); 要寫在那個 QRLabel 的 BeforePrint 事件 或 該 band 的 BeforePrint 事件耶。
challenge
一般會員


發表:14
回覆:41
積分:11
註冊:2002-10-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-31 10:19:12 IP:211.74.xxx.xxx 未訂閱
哈哈…真神奇…可以了耶…^^ 原來function是這樣使用的呀… 都沒自己寫過function說…^^" 謝謝你… <>< face="Verdana, Arial, Helvetica">引言: QRLabel1.Caption := ChiWrap(Table1.FieldByName('ChiDesc').AsString,40); 要寫在那個 QRLabel 的 BeforePrint 事件 或 該 band 的 BeforePrint 事件耶。
系統時間:2024-05-04 16:48:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!