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

print 第二面時,header band 不讓它顯示?

尚未結案
chyap99
一般會員


發表:20
回覆:51
積分:24
註冊:2004-03-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-24 17:00:02 IP:219.93.xxx.xxx 未訂閱
請問怎樣才能做到當print 第二面時, 把detail Band 移到最上面, header band 不讓它顯示? 一定要用Coding 的方法寫!!! 試了ppreport.AbsolutePageCount > 1 ppreport.PageCount > 1 ppreport.PageNo > 1 ppreport.AbsolutePageNo > 1 都不行, 是不是做錯event 了? 我用report builder.
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-25 02:08:18 IP:203.204.xxx.xxx 未訂閱
chyap99 你好 這個需求,應該將HeadBand(Page Head頁首,每一頁的開頭都會列印) 的內容放到Title Band 才行,TitleBand的定義就是,在同一個列印工作中只在第一頁會列印出來以外,在其他各頁皆不會列印,即使你一次印個10頁、100頁,TitleBand總是只印在第一頁。另外與其相對的是結尾TailBand(不知有沒有拼錯),其永遠印在最後一頁的頁尾。 發表人 - chance36 於 2004/04/25 02:08:59
chyap99
一般會員


發表:20
回覆:51
積分:24
註冊:2004-03-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-26 09:17:50 IP:203.106.xxx.xxx 未訂閱
謝謝回复, 其實我是想在第二頁之后把MarginTop set 成0.1,第一頁的Margin Top是0.25 的,該怎么做呢?
Fishman
尊榮會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-26 10:10:54 IP:210.65.xxx.xxx 未訂閱
Hi chyap99,    定義一個全域變數,CurrentPage,然後
1.QuickReport 的 Before 事件,將 CurrentPage 歸零
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
    CurrentPage := 0;
end;    2.Quick Report 的 OnStartPage 事件中,累加 CurrentPage 
procedure TForm1.QuickRep1StartPage(Sender: TCustomQuickRep);
begin
    Inc(CurrentPage);
end;    3.在 Header Band 的 Before Print 事件,判斷是否為第一頁,來決定是否印出 Header Band 
procedure TForm1.QRBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
    IF CurrentPage > 1 THEN
        PrintBand := False
    ELSE
        PrintBand := True;
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
chyap99
一般會員


發表:20
回覆:51
積分:24
註冊:2004-03-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-26 12:35:03 IP:203.106.xxx.xxx 未訂閱
謝謝回复, 我是用report builder 的, 不過跟者Fishman 大大的Concept應該能做到的, 但我不論放什麼去 report 或 heardeBand 的Before Print 事件, run 時都沒反應, 我試放showmessage('try'); 在Before Print 事件, 當print prieview 時都沒有showmessage 出現, 為什么不會去執行Before Print 事件呢?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-26 19:12:59 IP:211.20.xxx.xxx 未訂閱
引言: 我試放showmessage('try'); 在Before Print 事件, 當print prieview 時都沒有showmessage 出現, 為什么不會去執行Before Print 事件呢?
chyap99 你好 1.在beforPrint事件中寫的程式碼,當然不會在PreView的時候執行,它是在真正列印時觸發的。 2.在HeaderBand的BeforGenarate處理應該就可以。 3.MarginTop的屬性值,是在真正列印開始時會用到(不是預覽),用來計算報表實際輸出列表機的位置,在其餘各頁並不會再重新計算參考到MarginTop屬性值。 4.或許你可加入TitleBand設定其高度為0.15(0.25-0.1),裏面不放任何東西,只是要利用其特性來卡位而已。 發表人 - chance36 於 2004/04/26 19:15:25
chyap99
一般會員


發表:20
回覆:51
積分:24
註冊:2004-03-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-26 20:15:17 IP:203.106.xxx.xxx 未訂閱
1.在beforPrint事件中寫的程式碼,當然不會在PreView的時候執行,它是在真正列印時觸發的。 2.在HeaderBand的BeforGenarate處理應該就可以。 -------------------------------------------------------------------- 謝謝大大(Chance36 and Fishman)... 我放 Report.HeaderBand.PrintOnLastPage := False; Report.PrinterSetup.MarginTop := 0.2; 在beforPrint,beforeGenarate,startPage等等事件當我真正列印時 都沒效! 我參考report builder 里的end user reporting demo也是一樣不知如何加入beforPrint,beforeGenarate,startPage等等事件, 因為它是先放一個空的TppReport,run時才選要什麼report(invoice,cusiomer file etc). 該怎么做呢.
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-26 20:46:47 IP:211.20.xxx.xxx 未訂閱
引言: 3.MarginTop的屬性值,是在真正列印開始時會用到(不是預覽),用來計算報表實際輸出列表機的位置,在其餘各頁並不會再重新計算參考到MarginTop屬性值。 4.或許你可加入TitleBand設定其高度為0.15(0.25-0.1),裏面不放任何東西,只是要利用其特性來卡位而已。
chyap99 你好 是該事件沒觸發還是有觸發了但MarginTop設定無效,另外Beforprint是ppReport.BeforPrint還是ppHeaderBand.beforPrint? 請注意引言中的第三點,第一,二點是因應你說要在Beforprint的事件中處理的建議,第三點是提示你,對於MarginTop...等屬性的設定是在ppReport.Print 列印前設定才有效,不是Beforprint(列印前)事件, 最後,如果你的需求只是要第一頁的MarginTop=0.25,在其頁則MarginTop=0.1時,建議你使用第四點的方式試試看。
引言: 我參考report builder 里的end user reporting demo也是一樣不知如何加入beforPrint,beforeGenarate,startPage等等事件, 因為它是先放一個空的TppReport,run時才選要什麼report(invoice,cusiomer file etc). 該怎么做呢.
// 先建立ppHeaderBand.BeforGenerate的事件實體    procedure TForm1.ppHeaderBandBeforeGenerate(Sender: TObject);
begin
  //你要處理的事情
end;    在選定出樣版後,把該事件掛上去
procedure TForm1.SetHeaderBandBeforeGenerate(ppReport:TppReport);
Var
  hb:TppHeaderBand;
  Function GetHeadBand(ppReport:TppReport):TppHeaderBand;
  var
    i : Integer ;
  Begin
    Result := nil ;
    For i:= 0 To ppReport.BandCount-1 Do Begin
      If ppReport.Bands[i] is TppHeaderBand Then Begin
        Result := TppHeaderBand(ppReport.Bands[i]);
      End;
    End;
  End;
begin
  hb:=GetHeadBand(ppReport);//找到HeaderBan
  If hb <> nil Then
    hb.BeforeGenerate:= ppHeaderBand1BeforeGenerate;//掛上BeforeGenerate事件
end;
chyap99
一般會員


發表:20
回覆:51
積分:24
註冊:2004-03-31

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-04-27 15:41:37 IP:203.106.xxx.xxx 未訂閱
引言: 4.或許你可加入TitleBand設定其高度為0.15(0.25-0.1),裏面不放任何東西,只是要利用其特性來卡位而已。 --------------------------------------------------------------------- 謝謝大大! 這真是個很聰明的方法,其實我在做Receipt,要它第二頁在沒有空位下接著Print,雖然現在還是有空位(應該是printer問題),但margin卻輕易set到了. 我都有在ppReport和ppHeaderBand嘗試BeforePrint,BeforeGenerate,OnPageStart等等.但都沒有觸發事件. 在大大的coding里我加了(注意 **) Procedure Form1.BtnPreviewClick(Sender: TObject); //preview button Report.template.DatabaseSettings.Name :=‘Receipt Report’; Report.template.LoadFromDatabase; SetHeaderBandBeforeGenerate(Report); //** Report.print; ** 才能執行到BeforeGenerate的事件,是應該這樣嗎? 程式不會自動執行BeforeGenerate,BeforePrint etc 的事件嗎?那我每次都要做一個好像procedure Form1.SetHeaderBandBeforeGenerate(ppReport:TppReport); 的procedure來乎叫BeforeGenerate etc 的事件嗎? 我有去reportbuilder的website,他給我的意見是用RAP,但我怎樣也弄不出Calc tag 來,我用ReportBuilder Pro 4 edition, 是不是用不到RAP呢?現在是用delphi 3, 不是不要升級去5以上, 但聽說有很多問題所以升級不到.現在很多東西3都用不到我又是初學者, 真慘. 希望我問的問題不會太笨.謝謝指教.
系統時間:2024-05-19 4:50:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!