Programmer 的進程 - 由 VB6 開始
		Xojo / RealBasic 相關文件及程式庫 => Xojo / RealBasic 範例及函式庫 => Topic started by: admin on August 09, 2012, 12:17:38 AM
		
			
			- 
				筆者曾經說過一個RealBasic 在Windows平檯下非常嚴重問題, 就是關於列印時選擇印表機, 在Realbasic 開發的軟件下, 每次列印必須開啟PageSetupDialog 設定相關列印設定, 才能生成Graphics 物件, 如需省略選擇印表機的部份, 必須預先儲存之前已設定好的SetupString, 然後留給以後直接列印時使用, 在Mac 的環境下, 儲存這個SetupString 並沒有什麼大問題, 但在Windows 環境下可能因為內部編碼的分別, 當直接載入已儲存的SetupString 便會立即當掉Realbasic 的軟件, 問了很多網友及Realbasic 的支援人員也沒有答覆, 花了兩年時間找答案, 到了最後還是自己解決問題 !
 
 http://forums.realsoftware.com/viewtopic.php?f=1&t=35483 (http://forums.realsoftware.com/viewtopic.php?f=1&t=35483)
 
 儲存已設定好的頁面設定,印表機選項等相關選項, 留待下次列印時, 不用重新設定
   Dim f as FolderItem
 Dim stream as BinaryStream
 Dim ps As New PrinterSetup
 dim enc as TextEncoding
 dim base, varnt, form,strLength as int64
 dim g as graphics
 dim tmpSetupString as  string
 
 If ps.PageSetupDialog then
 tmpSetupString=ps.SetupString
 enc=tmpSetupString.Encoding
 if enc = nil then
 enc = GetTextEncoding(0, 0, 0)
 end if
 
 base = enc.base
 varnt = enc.variant
 form = enc.format
 tmpSetupString=EncodeBase64(tmpSetupString,0)
 strLength = lenB(tmpSetupString)
 
 f=GetFolderItem("d:\printersetup.dat")
 
 If f<> Nil Then
 stream=BinaryStream.Create(f,True)
 stream.WriteInt64(base)
 stream.WriteInt64(varnt)
 stream.WriteInt64(form)
 stream.WriteInt64(strLength)
 stream.Write tmpSetupString
 stream.Close
 End if
 
 End If
 
 載入已儲存的 PrinterSetup.setupstring 資料
   Dim f as FolderItem
 Dim stream as BinaryStream
 Dim ps As New PrinterSetup
 dim enc as TextEncoding
 dim base, varnt, form,strLength as int64
 dim g as graphics
 dim tmpSetupString as  string
 f=GetFolderItem("d:\printersetup.dat")
 
 If f<> Nil Then
 stream=BinaryStream.Open(f, False)
 base = stream.ReadInt64
 varnt = stream.ReadInt64
 form = stream.ReadInt64
 strLength = stream.ReadInt64
 
 tmpSetupString = stream.read(strLength, encodings.UTF8)
 stream.close
 if tmpSetupString <> "" then
 enc = GetTextEncoding(base, varnt, form)
 tmpSetupString = DecodeBase64(tmpSetupString, enc)
 end if
 
 ps.SetupString=tmpSetupString
 
 g = OpenPrinter(ps)
 
 if g <> nil then
 // if the report runs successfully
 
 g.textSize = 72
 
 g.drawLine  0,0,g.width-1,0
 g.drawLine 0,0,0,g.height-1
 g.drawLine g.width-1,g.height-1,0,g.height-1
 g.drawLine g.width-1,g.height-1,g.width-1,0
 
 g.foreColor = rgb(150,150,150) //watermark-ish
 
 g.drawString "1",(g.width-g.stringWidth("1"))/2,(g.height/2)+(g.textHeight/2)
 
 //send this last page to the printer, move to the next
 g.nextPage
 
 //start our drawing routines again
 g.foreColor=rgb(0,0,0)//black again
 
 g.drawLine 0,0,g.width-1,0
 g.drawLine 0,0,0,g.height-1
 g.drawLine g.width-1,g.height-1,0,g.height-1
 g.drawLine g.width-1,g.height-1,g.width-1,0
 
 g.foreColor = rgb(150,150,150) //watermark-ish
 g.drawString "2",(g.width-g.stringWidth("2"))/2,(g.height/2)+(g.textHeight/2)
 End If
 End If