線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1811
推到 Plurk!
推到 Facebook!

请问如何使在quickrep的qrdbtext内的中文字自动转行?

尚未結案
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-26 11:43:57 IP:218.18.xxx.xxx 未訂閱
如何使在quickrep的qrdbtext内的中文字自动转行?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-26 12:35:23 IP:210.65.xxx.xxx 未訂閱
Hi:    請將該 QRDBText AutoSize 設為 False,AutoStretch 設為 True 再試試看     -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-26 13:40:58 IP:218.18.xxx.xxx 未訂閱
那样做不行的,我试过了
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-26 14:00:12 IP:210.65.xxx.xxx 未訂閱
Hi :    Sorry!! 我誤解你的意思啦,我想這大概是 QuickReport 的一個 Bug 吧,不過我已經想到一個 Solution,正在測試中,等我好消息。     -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-26 14:22:20 IP:218.164.xxx.xxx 未訂閱
QRdbtext.autosize := false; QRdbtext.autostretch :=true; QRdbtext.wordwrap := true; 然後請記的將QRdbtext的高度拉至兩行以上... TRY TRY SEE 發表人 - chih 於 2003/11/26 16:15:54
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-26 15:00:23 IP:218.18.xxx.xxx 未訂閱
先谢谢你了
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-26 16:14:00 IP:210.65.xxx.xxx 未訂閱
Hi:    我試出來了,不過仍有部分缺陷 程式碼如下:    
procedure TForm1.QRDBText4Print(sender: TObject; var Value: String);
VAR
    I : Integer;
    OriStr : Array[0..1000] OF Char;
    V_Chinese : Boolean;
begin
    IF Not (Sender AS TQRDBText).AutoSize THEN
        BEGIN
            StrPCopy(OriStr,Value);
            V_Chinese := False;
            FOR I := 0 TO Length(Value) - 1 DO
                BEGIN
                    IF ORD(OriStr[I]) > 127 THEN
                        BEGIN
                            V_Chinese := True;
                            Break;
                        END;
                END;
            IF V_Chinese THEN
                Value := ApartString(Value,10)
            ELSE
                Value := Value;
        END;
end;    function TForm1.ApartString(InStr : String ;MaxLen : Integer) : String;
var
    P: Integer;
    S,L : String;
    OriStr : Array[0..1000] OF Char;
    OutStr : String;
begin
    P := 0;
    L := '';
    OutStr := '';
    StrPCopy(OriStr,InStr);
    WHILE P <= Length(InStr) - 1 DO
        BEGIN
            IF ORD(OriStr[P]) > 127 THEN
                BEGIN
                    S := Copy(OriStr,P   1,2);
                    Inc(p)
                END
            ELSE
                BEGIN
                    S := Copy(OriStr,P   1,1);
                END;
            Inc(p);
            IF Length(L   S) > MaxLen Then
                BEGIN
                    OutStr := OutStr   L   #13;
                    L := S;
                END
            ELSE
                BEGIN
                    L := L   S;
                END;
        END;
    OutStr := OutStr   L;
    ApartString := OutStr;
end;
在 TQRDBText 的 OnPrint 事件中重組字串, Function ApartString 主要功能為將列印之字串加入 Enter 強迫 QuickReport 作換行動作,MaxLen 為設定最大可列印之 byte 數,除以 2 即可得到中文字數,若該值可由 TQRDBText 的 Width 與 Font 等相關設定自動算出,那就更完美了,待找到相關資料再行補上,不知到有沒有人知道? -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-28 08:39:26 IP:210.65.xxx.xxx 未訂閱
Hi:    試出了一個更簡單的方法: 1.拉一個 TQRRichText 2.在該 TQRRichText 的 band 的 BeforePrint 事件中,加入以下以下程式碼
procedure TForm1.QRBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
    QRRichText1.Lines.Clear;
    QRRichText1.Lines.Add(Query1.FieldByName(欄位名稱).AsString);
end;
這樣就行啦,試試看 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
系統時間:2024-03-29 10:02:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!