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

fastreport barcode ean8/ean13 條碼殘缺問題

答題得分者是:小傑克
xnium
一般會員


發表:27
回覆:26
積分:10
註冊:2007-09-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-08 13:43:55 IP:218.107.xxx.xxx 訂閱
諸位大人,小弟在使用delphi7+fastreport 4.7的時候,有使用到TfrxBarCodeView元件,
type of bar:=EAN13
showtext:=true
zoom:=1.38
此時會發現barcode 的碼文,在倒數第二條部分,變成一半了
上圖

煩請各位先進幫忙看下,謝了先...
------
对岸的菜鸟,但是很喜欢用delphi!
xnium
一般會員


發表:27
回覆:26
積分:10
註冊:2007-09-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-08 16:18:17 IP:218.107.xxx.xxx 訂閱
我做了個demo
delphi.ktop.com.tw/download.php
各位達人請幫忙查看,小弟這廂有禮了
------
对岸的菜鸟,但是很喜欢用delphi!
xnium
一般會員


發表:27
回覆:26
積分:10
註冊:2007-09-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-10 14:37:22 IP:218.107.xxx.xxx 訂閱
繼續期待第三天,
是我的問題問的不好,還是怎樣?為何連無人理會...
有賣fastreport 的大人么?能不能請幫忙把問題提交到原廠啊....
我實在是沒有辦法了....
------
对岸的菜鸟,但是很喜欢用delphi!
xnium
一般會員


發表:27
回覆:26
積分:10
註冊:2007-09-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-11 11:02:47 IP:218.107.xxx.xxx 訂閱
 應該是text的寬度略微寬了點啊,有擋住后面的條碼,
哪位長官幫忙看看源碼,是否有辦法修改呢。。。
------
对岸的菜鸟,但是很喜欢用delphi!
xnium
一般會員


發表:27
回覆:26
積分:10
註冊:2007-09-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-11 13:02:40 IP:218.107.xxx.xxx 訂閱
找到frxBarcode.pas,以下代碼段,看起來是畫出BARCODE,
這里能不能動些手腳呢...
研究中...

[code delphi]
procedure TfrxBarCodeView.Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX,
OffsetY: Extended);
var
SaveWidth: Extended;
ErrorText: String;
DrawRect: TRect;
begin
FBarCode.Angle := FRotation;
FBarCode.Checksum := FCalcCheckSum;
FBarCode.Typ := FBarType;
FBarCode.Ratio := FWideBarRatio;
if Color = clNone then
FBarCode.Color := clWhite else
FBarCode.Color := Color;

SaveWidth := Width;
FBarCode.Text := FText;
ErrorText := '';
if FZoom < 0.0001 then
FZoom := 1;

try
if (FRotation = 0) or (FRotation = 180) then
Width := FBarCode.Width * FZoom
else
Height := FBarCode.Width * FZoom;
except
on e: Exception do
begin
FBarCode.Text := '12345678';
ErrorText := e.Message;
end;
end;

if FHAlign = haRight then
Left := Left SaveWidth - Width
else if FHAlign = haCenter then
Left := Left (SaveWidth - Width) / 2;

BeginDraw(Canvas, ScaleX, ScaleY, OffsetX, OffsetY);
DrawBackground;
if ErrorText = '' then
FBarCode.DrawBarcode(Canvas, Rect(FX, FY, FX1, FY1), FShowText)
else
with Canvas do
begin
Font.Name := 'Arial';
Font.Size := Round(8 * ScaleY);
Font.Color := clRed;
DrawRect := Rect(FX 2, FY 2, FX1, FY1);
// DrawRect := Rect(FX 2, FY 2, FX1-1, FY1);
DrawText(Handle, PChar(ErrorText), Length(ErrorText),
DrawRect, DT_WORDBREAK);
end;
DrawFrame;
end;

[/code]
------
对岸的菜鸟,但是很喜欢用delphi!
xnium
一般會員


發表:27
回覆:26
積分:10
註冊:2007-09-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-11 23:27:39 IP:222.93.xxx.xxx 訂閱
以為這句
DrawRect := Rect(FX 2, FY 2, FX1, FY1);
是關鍵,可是更改之后,重新編譯,還是不見效果,即使改成DrawRect := Rect(FX 2, FY 2, 0, FY1); 都不影響,怎么回事呢,
難道我重新編譯 安裝的不對么
...
------
对岸的菜鸟,但是很喜欢用delphi!
xnium
一般會員


發表:27
回覆:26
積分:10
註冊:2007-09-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-12 22:25:51 IP:222.93.xxx.xxx 訂閱
 小弟在componet >>install packages 畫面,刪除fr相關packages 之后,編輯Source\frxBarcode.pas 之
procedure TfrxBarCodeView.Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX,
OffsetY: Extended);
將以下段MARK,
// DrawText(Handle, PChar(ErrorText), Length(ErrorText),
// DrawRect, DT_WORDBREAK);
猜測應該不會畫出文字部分,
重新編譯,安裝,查看BARCODE 元件,還是能夠畫出文字,這是為何呢?
各位大人,幫下小弟吧...
------
对岸的菜鸟,但是很喜欢用delphi!
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-03-12 23:43:36 IP:59.112.xxx.xxx 訂閱
沒用過,沒元件,沒source 看不出來....DrawText 顯然是那個report 自己寫的function,因為delphi 的 canvas沒這個
至於你改source 沒用, 應該要檢查 delphi 引用路徑中 是否有這個pas 的dcu, 把dcu砍掉重build 才會有用


===================引 用 xnium 文 章===================
小弟在componet >>install packages 畫面,刪除fr相關packages 之后,編輯Source\frxBarcode.pas 之
procedure TfrxBarCodeView.Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX,
OffsetY: Extended);
將以下段MARK,
// DrawText(Handle, PChar(ErrorText), Length(ErrorText),
// DrawRect, DT_WORDBREAK);
猜測應該不會畫出文字部分,
重新編譯,安裝,查看BARCODE 元件,還是能夠畫出文字,這是為何呢?
各位大人,幫下小弟吧...
------
額有朝天骨,眼中有靈光
xnium
一般會員


發表:27
回覆:26
積分:10
註冊:2007-09-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-03-12 23:51:44 IP:222.93.xxx.xxx 訂閱
呵呵 謝謝 兄弟,剛才自己胡亂的修改了  frxBarcod.pas 
procedure OutText;
......
case FTyp of
bcCodeEAN8: // 8 digits, 4 4
begin
TextOutR(3, 3, 30, Copy(FText, 1, 4));
TextOutR(35, 35, BarWidth - 4, Copy(FText, 5, 4));
end;
bcCodeEAN13: // 13 digits, 1 6 6 or 12 digits, 6 6
begin
//if FText[1] <> '0' then
TextOutR(-8, -8, -2, Copy(FText, 1, 1));
TextOutR(3, 3, 44, Copy(FText, 2, 6));
// TextOutR(49, 49, BarWidth - 4, Copy(FText, 8, 6));// 修改前
TextOutR(49, 49, BarWidth - 5, Copy(FText, 8, 6));
end;
......


重新編譯 安裝就可以了,真的很高興謝謝諸位...
------
对岸的菜鸟,但是很喜欢用delphi!
編輯記錄
xnium 重新編輯於 2009-03-12 23:54:36, 註解 無‧
系統時間:2024-04-20 9:36:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!