2017年10月13日 星期五

Rich Edit 問答

基礎
來源:MS Rich Textbox Control 5.0
屬性
Appearence 0-rtfFlat 1-rtfThreaD
AutoVerbMenu True False
BackColor
BorderStyle 0-rtfNoBorder 1-rtfFixedSingle
BulletIndent
DataBindings
DataField
DataSource
DisableNoScorll True False



RightMargin 右邊界以twip為單位
SetFontName
SetFontSize
SetLength
SetColor
Text 取得純文字的部分

LoadFile 讀檔
SaveFile 存檔
TextRTF 全部物件
SelRTF 選取物件
SelPrint 列印

讀取和儲存檔案如同一般文字檔
列印比較複雜
a. 先啟動Printer, 用 Printer.Print""; (空白)的方式
b. 用 .SelPrint Printer.hDC 列印
插入圖形
用oleobject.add 插入
RTB1.oleobjects(n).DoVerb可以讓聲音展現,但是如何得知n

重要參考資料來源
MSDN > Books > Platforms > Programming the windows 95 Interface > Part1 > Chapter 5

問答
1.怎樣得知目前的字標示第幾列的第幾個字元?

.SelStart 可以得知游彪在第幾個字元
.GetLineFromChar(.SelStart)可以得知在第幾列
SendMessage(.hwnd, EM_LINEINDEX, 列數, 0&) 可以得知列數之前有幾個字元
綜合而言用以下程式碼
列數 = .GetLineFromChar(.SelStart)+1
ret = SendMessage(.hwnd, EM_LINEINDEX, 列數-1, 0&)
字元數 = .Selstart - ret

2.怎樣得知插入的物件是何種型態?


3. 怎樣得知目前的字標所在位置的字元為何?

用 MID$(.Text, .SelStart+1, 1) 取得,若為空白字元可能為物件

4. 怎樣得知第幾行第幾列的字元為何?
(1)先取得第幾列的所有字元
Function GetLine(Line As Long) As string
  Const MAX_CHAR_PER_LINE = 80
  Const EM_GETLINE = &h400 + 20
  bytelo = MAX_CHAR_PER_LINE AND 255
  bytehi = INT(MAX_CHAR_PER_LINE/256)
  buffer = chr(bytelo) + chr(bytehi) + space$(MAX_CHAR_PER_LINE-2)
  SendMessage(.hwnd, EM_GETLINE, Line, buffer)
  GetLine = buffer
End Function
(2)以Mid$取出第幾個

5.怎樣得知滑鼠的位置在哪一個字元上?

6.怎樣得知目前字標的位置,是在哪個座標?
用API函數GetCaret

7.怎樣製作剪貼、複製、復原等功能?
利用SendMessage函數中的 WM_CUT, WM_COPY, WM_PASTE, WM_UNDO
例如:復原用 SendMessage(.hwnd, WM_UNDO, 0, 0)

8.怎樣知道文件可以印幾頁?


9.怎樣加入頁首、頁尾

10. 怎樣讀入HTML檔案

11. 文字可以使用那些顏色
黑、深藍、綠、綠藍、褐、紫、 橄欖、淺灰
灰、藍、青、淺藍、紅、桃紅、黃、白

12. 可以預覽列印嗎?
可以 用SelPrint Pciture1.hdc


沒有留言:

張貼留言