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

memo 存為 jpg 圖檔時,如何才能使文字自動換行 ?

 
enta
一般會員


發表:34
回覆:43
積分:15
註冊:2003-09-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-13 15:19:43 IP:220.134.xxx.xxx 未訂閱
在 Tmemo 內輸入一篇文章,將文章存入 jpg 圖檔,文字部份卻無法自動換行? 請教高手如何是好 ? procedure TMainForm.BitBtn1Click(Sender: TObject); var Bmp : TBitmap; Jpg : TJpegImage; Pict: TPicture; begin try Bmp := TBitmap.Create; Jpg := TjpegImage.Create; Jpg.LoadFromFile('c:\img.jpg'); Bmp.Assign(Jpg); Bmp.Canvas.Brush.Style := bsClear; Bmp.Canvas.Font.Color := mcolor; Bmp.Canvas.Font.Size := StrToInt(Edit1.text); Bmp.Canvas.Font.Name := FontComboBox1.FontName; Bmp.Width := 250; Bmp.height := 100; Bmp.Canvas.TextOut(10,10, memo1.text); // 存入文字 Jpg.Assign(Bmp); Jpg.SaveToFile('c:\img2.jpg'); InsertPicture := True; finally bmp.Free; jpg.Free; end; Pict := TPicture.Create; try Pict.LoadFromFile('c:\img2.jpg'); Clipboard.Assign(Pict); Editor.PasteFromClipboard; finally Pict.Free; end; end; chang yung chin
------
chang yung chin
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-17 11:43:27 IP:219.80.xxx.xxx 未訂閱
你好:
  依你的例子圖檔的長寬為 100:250, 如一段文字有200個字,每個字需要20 pixels輸出
則你需要自行將該段文字分為 16 次(段)輸出到圖片中。
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-19 00:15:55 IP:61.30.xxx.xxx 未訂閱
Hi enta 您好: 若單純判斷Memo是否有換行
TextOutTop := 10;
for i := 0 to Memo1.Lines.Count - 1 do begin
    Bmp.Canvas.TextOut(10,TextOutTop, memo1.Lines.Strings[i]); // 存入文字
    TextOutHeight := Bmp.Canvas.TextHeight(Memo1.Lines.Strings[i]);
    TextOutTop := TextOutTop   TextOutHeight;
end;
若不管Memo是否有換行, 而是超過長度強制換行
FontWidth := 0;
FontBegin := 1;
FontEnd   := 0;
TextOutTop := 10;
for i := 0 to Length(Memo1.Lines.Text) do begin
    FontWidth := FontWidth   Bmp.Canvas.TextWidth(Memo1.Lines.Text[i]);
    if FontWidth > Bmp.Width then begin
       FontEnd := i - 1;
       Bmp.Canvas.TextOut(10,TextOutTop, Copy(memo1.Lines.Text, FontBegin, FontEnd)); // 存入文字
       TextOutHeight := Bmp.Canvas.TextHeight(Copy(memo1.Lines.Text, FontBegin, FontEnd));
       TextOutTop := TextOutTop   TextOutHeight;
       FontWidth := Bmp.Canvas.TextWidth(Memo1.Lines.Text[i]);
       FontBegin := i;
    end;
end;
if memo1.Lines.Text <> '' then
Bmp.Canvas.TextOut(10,TextOutTop, Copy(memo1.Lines.Text, FontBegin, 10000));
參考一下~~ 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-06-27 0:40:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!