線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2781
推到 Plurk!
推到 Facebook!

如何控制RichEdit 的文字底色

答題得分者是:hagar
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-29 14:23:28 IP:61.221.xxx.xxx 未訂閱
請問大家 我知道用RichEdit1.SelAttributes.Color := clRed; 可以改變文字的顏色 但是RichEdit 是否可以控制文字的底色 謝謝
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-03 19:01:01 IP:202.39.xxx.xxx 未訂閱
http://www.lmc-mediaagentur.de/dpool/tips/1012.htm    --- 每個人都是一本書
banson1716
高階會員


發表:55
回覆:182
積分:167
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-03 20:02:22 IP:218.162.xxx.xxx 未訂閱
form1上放一button,richedit,在richedit輸入一些字後,反白你要的字 (可以選一個或以上),按button.就可單獨變色了..不過以後所打的字都 會變成這個顏色,可自行修改程式,再變一次顏色..就可變回來了. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TCharFormat = record cbSize: UINT; dwMask: Longint; dwEffects: Longint; yHeight: Longint; yOffset: Longint; crTextColor: TColorRef; bCharSet: Byte; bPitchAndFamily: Byte; szFaceName: array[0..LF_FACESIZE - 1] of AnsiChar; end; TForm1 = class(TForm) Button1: TButton; RichEdit1: TRichEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure changecolor(a,b,c:byte); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.changecolor(a,b,c:byte); var CharFormat : TCharFormat; const EM_GETCHARFORMAT=WM_USER 58; const EM_SETCHARFORMAT=WM_USER 68; Const SCF_SELECTION = $1 ; begin ZeroMemory(@CharFormat, SizeOf(TCharFormat)); with CharFormat do begin cbSize := SizeOf(TCharFormat); {先取得原本char的charfotmat} RichEdit1.Perform(EM_GETCHARFORMAT, 1, LParam(@CharFormat)); {更改顏色} crTextColor:=rgb(a,b,c); RichEdit1.Perform(EM_SETCHARFORMAT, SCF_SELECTION, LParam(@CharFormat)); end; RichEdit1.SetFocus; RichEdit1.SelLength := 0; end; procedure TForm1.Button1Click(Sender: TObject); begin changecolor(255,44,55); end; end.
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-05 08:55:29 IP:61.221.xxx.xxx 未訂閱
banson兄 您提供的方法我試不出來ㄝ 我試過更改a,b,c的參數 但是還是不會改變文字底色 我再試試 hagar兄提供的方法 謝謝
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-05 09:21:35 IP:218.16.xxx.xxx 未訂閱
Rich Text Format (RickEdit 使用的格式) 應是根本不支援文字底色的 ?? 連 WordPad 都做不到耶... Hagar 版主提供的應是如何改變選取文字時的底色而不是真的改變文字底色,一離開便還原了。 banson1716 兄提供的應是另類的改變文字顏色方法,效果應跟 RichEdit1.SelAttributes.Color := rgb(a,b,c); 沒甚麼分別罷 ? 這應是 Rick Text 格式跟本沒這種格式的問題,不大可能在 RichEdit 解決。 你可試找找有沒有 HTML Editor 是使用 HTML格式的那便有可能做得到。
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-05 09:50:24 IP:61.221.xxx.xxx 未訂閱
>>你可試找找有沒有 HTML Editor 是使用 HTML格式的那便有可能做得到。 Justmade兄 我在深度歷險找到一個元件 TRichView component can contain: - background bitmap, - text with various fonts and colors, - hypertext, - pictures, - pictures from Image Lists, - any Delphi controls. It can be printed and saved as plain text or html file. 我想這樣應該可以做到了吧 謝謝您喔
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-05 11:26:18 IP:61.221.xxx.xxx 未訂閱
突然想到 用ListBox是否可以達到功能要求呢
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-05 11:35:32 IP:202.39.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=16230 內有 TRxRichEdit 可達到此功能. TListBox 的話 將 TListBox.Style 設為 lbOwnerDrawFixed 然後在 TListBox 的 OnDrawItem Event 中 更改每個 Item 的字型/顏色與底色.    --- 每個人都是一本書
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-05 12:09:45 IP:61.221.xxx.xxx 未訂閱
>TListBox 的話 >將 TListBox.Style 設為 lbOwnerDrawFixed >然後在 TListBox 的 OnDrawItem Event 中 >更改每個 Item 的字型/顏色與底色. 我用 ListBox1.Canvas.Brush.Style := bsSolid; Listbox1.Canvas.Brush.Color := clRed; 可以達到畫底色的功能 但是只有有文字的部分畫底色 無法達到整行都畫的效果ㄝ
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-05-05 12:33:19 IP:202.39.xxx.xxx 未訂閱
指定完顏色後,  最後加一句 ListBox1.Canvas.FillRect(Rect);    --- 每個人都是一本書
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-05-05 15:26:54 IP:61.221.xxx.xxx 未訂閱
不好意思 我試了一下 好像無法單獨更改每個 Item 的字型/顏色ㄝ 我是用 ListBox1.Canvas.Font.Color := clRed; ListBox1.Canvas.TextOut(ARect.Left, ARect.top, ListBox1.Items[Index]);
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-05-05 16:06:06 IP:202.39.xxx.xxx 未訂閱
由 Index 這個參數來做判斷, 例:
begin
  case Index of
    0: ListBox1.Canvas.Font.Color := clRed;
    1: ListBox1.Canvas.Font.Color := clBlue
    // ...
  end;
  // ...
end;
--- 每個人都是一本書
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-05-05 16:10:50 IP:61.221.xxx.xxx 未訂閱
原來要在 ListBox1DrawItem裡面 判斷每一行Index 再個別去設定每一Item的Canvas.Font.Color 哇 那ListBox不就每次OnDrawItem時 所有的Item全部都重畫一次
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-05-05 16:15:51 IP:61.221.xxx.xxx 未訂閱
而且我還要另外記住每一個Item的Font.Color 才能再每次重畫的時候指定給ListBox1.Canvas.Font.Color
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-05-05 16:16:08 IP:61.221.xxx.xxx 未訂閱
而且我還要另外記住每一個Item的Font.Color 才能再每次重畫的時候指定給ListBox1.Canvas.Font.Color
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-05-05 16:16:28 IP:61.221.xxx.xxx 未訂閱
而且我還要另外記住每一個Item的Font.Color 才能再每次重畫的時候指定給ListBox1.Canvas.Font.Color
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-05-05 16:28:53 IP:202.39.xxx.xxx 未訂閱
1.小弟測了一下, 並非所有的 Item 都會重繪,  只有顯示在 ListBox1 上的才會重繪 要捲動 ScrollBar 才出現的 Item 不會重繪 2.您說的要記住每個 Item 的字型 除了以 Index 判斷外, 或以 Item 的值做條件了.    --- 每個人都是一本書
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-05-05 17:08:00 IP:61.221.xxx.xxx 未訂閱
ListBox要放BitMap or Icon 可以用 ListBox1.Canvas.Draw(Rect.Left, Rect.Top, AIcon); 那如果要在RichEdit上放BitMap or Icon 的話 該用什麼方法呢
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-05-05 17:11:59 IP:61.221.xxx.xxx 未訂閱
大概就是這樣啦
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-05-05 17:15:45 IP:202.39.xxx.xxx 未訂閱
參考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=21053    --- 每個人都是一本書
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-05-05 17:23:09 IP:61.221.xxx.xxx 未訂閱
可是RichEdit沒有Canvas呀 ???
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-05-05 17:36:15 IP:202.39.xxx.xxx 未訂閱
引言: 可是RichEdit沒有Canvas呀 ???
搞錯了, 小弟以為您要用 TListBox http://delphi.ktop.com.tw/topic.php?topic_id=16230 這個聯結用 Rxlib 的元件 下載後使用 RxRichEdit 可達到您的要求 可改變字型/顏色/底色, 也可以插入 Image. --- 每個人都是一本書
Nelson Lo
一般會員


發表:35
回覆:87
積分:24
註冊:2003-04-04

發送簡訊給我
#23 引用回覆 回覆 發表時間:2003-05-05 17:48:30 IP:61.221.xxx.xxx 未訂閱
了解 還是要用元件 本來想自己把方法學起來的 謝謝您 hagar兄
系統時間:2024-05-17 3:22:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!