M mala_hong Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #1 如何根據richedit讀入的文件如rtf文件格式來控制richedit的height值?
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #2 rtf 有多种字体啊,怎么可能这么简单? 如果是普通文本还比较容易,先判断每一行的高度, 用行数乘以高度就得到 richedit 的高度,但是还要 判断是否超过 屏幕的高度 screen.height
M mala_hong Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #3 如果一定要進行多字體控制, 有辦法解決嗎? 如果超過Screen.height又怎樣呢?
U unreal Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #4 还有点小问题,文本不能小于2行。你再完善一下吧。 procedure TForm1.Button2Click(Sender: TObject); var sInfo : tagSCROLLINFO; begin sInfo.cbSize := SizeOf(TScrollInfo); sInfo.fMask := SIF_RANGE; RichEdit1.Height := 0; GetScrollInfo(Richedit1.Handle, SB_VERT, sInfo); RichEdit1.Height := sInfo.nMax + RichEdit1.Font.Size; end;
还有点小问题,文本不能小于2行。你再完善一下吧。 procedure TForm1.Button2Click(Sender: TObject); var sInfo : tagSCROLLINFO; begin sInfo.cbSize := SizeOf(TScrollInfo); sInfo.fMask := SIF_RANGE; RichEdit1.Height := 0; GetScrollInfo(Richedit1.Handle, SB_VERT, sInfo); RichEdit1.Height := sInfo.nMax + RichEdit1.Font.Size; end;
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #5 //如果一定要進行多字體控制, 有辦法解決嗎? 那只有分析 rtf 文件格式了,分析没一行最高的字体的高度, 剩下的类似前面说的了 //如果超過Screen.height又怎樣呢? 那就看不到多余的部分了啊
//如果一定要進行多字體控制, 有辦法解決嗎? 那只有分析 rtf 文件格式了,分析没一行最高的字体的高度, 剩下的类似前面说的了 //如果超過Screen.height又怎樣呢? 那就看不到多余的部分了啊
M mala_hong Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #6 unreal好, 好像不大對勁, 出來的height值遠遠大于實際值.sInfo.nmax值是什么? 值太大. 對于tagSCROLLINFO你能給我詳解嗎? 或再給我詳細一點好嗎? 我看的不是很懂!! beta好, 可以告訴我怎樣控制每一行的字體高度嗎?
unreal好, 好像不大對勁, 出來的height值遠遠大于實際值.sInfo.nmax值是什么? 值太大. 對于tagSCROLLINFO你能給我詳解嗎? 或再給我詳細一點好嗎? 我看的不是很懂!! beta好, 可以告訴我怎樣控制每一行的字體高度嗎?
U unreal Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #7 我说过文本不能小于2行! sInfo.nmax是滚动条的高度。这个方法要比去判断文本的高度方便的多。 因为无论怎样,滚动条的高度是和文本的高度一样的。
M mala_hong Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #8 謝謝unreal, 終于可以了, 太謝謝你了, 再麻煩一下, 是否可以知道每一行 字體的height值?待會給你加分!!!!
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #9 //怎樣控制每一行的字體高度 不是控制,是分析,需要分析rtf源文件,前提是你了解 rtf 文件格式 比如 {/f2/fs20/b program} 表明 用的 f2 字体(font table中定义的),字体大小10号,粗体 显示 program 然后到 font table 中找到:{/fonttbl...{/f2/fmodern Courier New;}} 说明 program 用的 Courier New 字体,字号10,这样你就可以判断他的高度了 麻烦吧,已知字符串极其字体信息,要判断高度还需要另行处理
//怎樣控制每一行的字體高度 不是控制,是分析,需要分析rtf源文件,前提是你了解 rtf 文件格式 比如 {/f2/fs20/b program} 表明 用的 f2 字体(font table中定义的),字体大小10号,粗体 显示 program 然后到 font table 中找到:{/fonttbl...{/f2/fmodern Courier New;}} 说明 program 用的 Courier New 字体,字号10,这样你就可以判断他的高度了 麻烦吧,已知字符串极其字体信息,要判断高度还需要另行处理
M mala_hong Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #10 謝謝beta, 不過我真的對rtf文件格式, 你能給我一舉簡單的例子來說明嗎, 不甚感激!!!
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #11 如果没有单独提取某一行的高度的需要,用unreal的方法比较简单 当然如果一定要单独提取某一行的高度,恐怕就需要分析 rtf 文件了 如果你有那个耐心我可以慢慢给你讲。 我现在上 bbs 很慢,可以在 oicq 上交流, unreal, mala_hong 方便的话留下你们的 oicq 号码 我的:442248
如果没有单独提取某一行的高度的需要,用unreal的方法比较简单 当然如果一定要单独提取某一行的高度,恐怕就需要分析 rtf 文件了 如果你有那个耐心我可以慢慢给你讲。 我现在上 bbs 很慢,可以在 oicq 上交流, unreal, mala_hong 方便的话留下你们的 oicq 号码 我的:442248
M mala_hong Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #12 beta, 不好意思, 我們公司用的是DDN專線上網, 我沒有帳號, 故沒有QQ, 能給我e_mail嗎? 是這樣的, 我公司要我做一個屏保, 要將在word編輯的格式不變在屏保中顯示出來, 在朋友 你們的幫助下, 大部分已完成, 只是文本的滾動是靠timer來控制,故最好知道, 每一行文本 高度, 讓滾動的是一行行的文字,而不是TOP+常量不規則滾動. 還有更好的幫法嗎?
beta, 不好意思, 我們公司用的是DDN專線上網, 我沒有帳號, 故沒有QQ, 能給我e_mail嗎? 是這樣的, 我公司要我做一個屏保, 要將在word編輯的格式不變在屏保中顯示出來, 在朋友 你們的幫助下, 大部分已完成, 只是文本的滾動是靠timer來控制,故最好知道, 每一行文本 高度, 讓滾動的是一行行的文字,而不是TOP+常量不規則滾動. 還有更好的幫法嗎?
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #13 不早说,那就简单了,不需要判断每一行的高度,直接在 ontimer 里面加入: SendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, 1); 就可以了,每次滚动一行,richedit 自己判断行高度
不早说,那就简单了,不需要判断每一行的高度,直接在 ontimer 里面加入: SendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, 1); 就可以了,每次滚动一行,richedit 自己判断行高度
M mala_hong Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #15 不好意思, 可能是讀rtf文本確定的richedit高度原因, 只閃不滾, 還有我是通過整個 richedit從底到頂循環滾動的(像電影字幕一行行從底部出現一直到頂消失后循環), SendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, 1);而是在richedit內滾動, 能實現我上面所說的功能嗎, 能發送消息讀到richedit的跳動的高度嗎? 或更好的辦法?
不好意思, 可能是讀rtf文本確定的richedit高度原因, 只閃不滾, 還有我是通過整個 richedit從底到頂循環滾動的(像電影字幕一行行從底部出現一直到頂消失后循環), SendMessage(RichEdit1.Handle, EM_LINESCROLL, 0, 1);而是在richedit內滾動, 能實現我上面所說的功能嗎, 能發送消息讀到richedit的跳動的高度嗎? 或更好的辦法?
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #16 //只閃不滾? 不会吧,我的richedit滚的很好啊,是不是只有一页,所以滚不动? //像電影字幕一行行從底部出現一直到頂消失后循環 那就现在前面加一页的空行然后开始滚动不就行了? 再试一试吧
M mala_hong Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #17 beta好, 怎樣指定richedit當前行?
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #18 比如你要指定到第10行: richedit1.SelStart := richedit1.Perform(EM_LINEINDEX, 10 - 1, 0); 就可以了
M mala_hong Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #19 beta好, 最后一個問題, 怎樣讓循環滾動?
B beta Unregistered / Unconfirmed GUEST, unregistred user! 2001-02-03 #20 滚动到最后一行了过后,再翻到第一行啊。 至于判断最后一行,可以在 ontimer 时候累加一个变量, 当这个变量达到 richedit1.lines.count 的时候说明 到达了最后一行,你就翻到第一行就可以了。
滚动到最后一行了过后,再翻到第一行啊。 至于判断最后一行,可以在 ontimer 时候累加一个变量, 当这个变量达到 richedit1.lines.count 的时候说明 到达了最后一行,你就翻到第一行就可以了。