設定字距問題? |
|
photoboy
一般會員 發表:1 回覆:0 積分:0 註冊:2002-07-05 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 請問各位前輩,從資料庫中撈出的資料 因為要套表列印,有辦法設定資料的字距嗎? (譬如身份證字號F123456789要印成F 1 2 3 4 5 6 7 8 9)我也想知道,我的問題是我的資料有很多,想擠在一頁裡印出,又不想縮小字型,想減少字距以容下更多資料,因為資料拋出到Excel可以縮小字距,在不縮小字型下印出。 在深度論壇有人提用SetTextCharacterExtra(Canvas.Handle,nCharSpace);可控制字距,但是實做不出來,不知有沒有人知道如何控制。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
jumo
一般會員 發表:33 回覆:65 積分:24 註冊:2002-04-17 發送簡訊給我 |
試試看這一段程式碼, 不過要自行改成 Report 列印 unit Unit1; interface uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, shellapi,
StdCtrls, ExtCtrls; type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
function CountChar(BufStr: String): Integer;
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject);
var i, j, k : integer;
BufStr : String;
begin
image1.Picture := nil;
for j:=0 to memo1.Lines.Count-1 do begin
BufStr := memo1.Lines.Strings[j];
SetTextCharacterExtra(image1.Canvas.Handle , 0);
k := CountChar(BufStr);
if k>1 then
begin
i := (image1.Width - image1.Canvas.TextWidth(BufStr)) div (k-1);
if i>=0 then
SetTextCharacterExtra(image1.Canvas.Handle , i);
else
SetTextCharacterExtra(image1.Canvas.Handle , 0); image1.Canvas.TextOut(0, Trunc(j * image1.Canvas.Font.Size * 1.5), BufStr);
end
else
begin
SetTextCharacterExtra(image1.Canvas.Handle , 0);
image1.Canvas.TextOut(image1.Width div 2, Trunc(j * image1.Canvas.Font.Size * 1.5), BufStr);
end;
end;
end; function TForm1.CountChar(BufStr : String):Integer;
begin
Result := 0;
while Length(BufStr)>0 do begin
if Windows.IsDBCSLeadByte(Byte(BufStr[1])) then
BufStr := Copy(BufStr, 3, Length(BufStr)-2)
else
BufStr := Copy(BufStr, 2, Length(BufStr)-1);
Result := Result 1;
end;
end; end.
|
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 試試看這一段程式碼, 不過要自行改成 Report 列印jumo兄: 你的範例確實可使字距加大,不知SetTextCharacterExtra可否用來縮小字距,設成負的好像沒有用,不過還是感謝你的範例,又多學了一招。unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, shellapi, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Image1: TImage; procedure Button1Click(Sender: TObject); private function CountChar(BufStr: String): Integer; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var i, j, k : integer; BufStr : String; begin image1.Picture := nil; for j:=0 to memo1.Lines.Count-1 do begin BufStr := memo1.Lines.Strings[j]; SetTextCharacterExtra(image1.Canvas.Handle , 0); k := CountChar(BufStr); if k>1 then begin i := (image1.Width - image1.Canvas.TextWidth(BufStr)) div (k-1); if i>=0 then SetTextCharacterExtra(image1.Canvas.Handle , i); else SetTextCharacterExtra(image1.Canvas.Handle , 0); image1.Canvas.TextOut(0, Trunc(j * image1.Canvas.Font.Size * 1.5), BufStr); end else begin SetTextCharacterExtra(image1.Canvas.Handle , 0); image1.Canvas.TextOut(image1.Width div 2, Trunc(j * image1.Canvas.Font.Size * 1.5), BufStr); end; end; end; function TForm1.CountChar(BufStr : String):Integer; begin Result := 0; while Length(BufStr)>0 do begin if Windows.IsDBCSLeadByte(Byte(BufStr[1])) then BufStr := Copy(BufStr, 3, Length(BufStr)-2) else BufStr := Copy(BufStr, 2, Length(BufStr)-1); Result := Result 1; end; end; end.
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |