Memo物件有辦法字型顯示不同顏色 |
尚未結案
|
jiew
一般會員 發表:13 回覆:7 積分:4 註冊:2003-06-11 發送簡訊給我 |
|
GaryKao99
中階會員 發表:46 回覆:102 積分:54 註冊:2002-08-23 發送簡訊給我 |
|
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
jiew您好: 建議您使用synedit http://synedit.sourceforge.net/
SynEdit is an advanced multi-line edit control, for Borland Delphi, Kylix (Kylix is supported into latest cvs) and C++Builder.
It supports Syntaxt Highlighting and code completion, it does include exporters for html and rtf.
/*生活是一種藝術,用心生活才能享受生活*/ |
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
Richedit也是可以做到的
Unit1.cpp //--------------------------------------------------------------------------- #include /*生活是一種藝術,用心生活才能享受生活*/發表人 - axsoft 於 2004/02/26 12:13:37 |
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 請問..Memo物件有辦法字型顯示不同顏色嗎?當編輯文字檔遇到特定字元時jiew你好: 硬要在TMemo上使文字多色彩應該是可以"硬做的"!其實我的觀念還是一樣,就是這些元件的字其實都是繪上的,那如果你覺得它繪的不好(比如說 >: < href="http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44818">http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44818! 嗯,這裡提供一段測試程式,可以讓顯示在Memo上的字多色彩,但注意的是: 這個例子只是將欲先設定好的文字多彩顯示,如果你要的是在Memo上一邊編輯一邊切換字體的色彩,那難度就會提高了,要將本程式大翻修了,所以如果你真的要在 >!> <>> ~~ <>< class="code"> private: // User declarations void __fastcall MemoWndProc(TMessage&); TWndMethod OldMemoWndProc; public: // User declarations ~~ In Unit.cpp TForm1 *Form1; int i=1; AnsiString MemoShow[]={"Don't dream it's over!", "三民主義統一中國", "這是我的測試", "特戰862旅", "小甜甜布蘭妮", "How deep is you love", "You're the inpiration!", "這個也不會", "那個也不會", "Painting the TMemo"}; AnsiString FontFace[]={"細明體", "標楷體", "Arial", "Webdings", "Impact", "Lucida Console"}; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { OldMemoWndProc=Memo1->WindowProc; Memo1->WindowProc=MemoWndProc; } //--------------------------------------------------------------------------- void __fastcall TForm1::MemoWndProc(TMessage& Message) { if (Message.Msg==WM_PAINT) { Form1->Caption=i; i++; Memo1->Invalidate(); OldMemoWndProc(Message); HDC dc=GetDC(Memo1->Handle); int FstVsblLne; FstVsblLne=SendMessage(Memo1->Handle,EM_GETFIRSTVISIBLELINE,0,0); RECT rect; rect.left=0; rect.right=(Memo1->Width)/2; rect.top=0; rect.bottom=21; TFont* Fnt=new TFont; Fnt=Memo1->Font; for (int Lne=FstVsblLne;Lne<10;Lne++) { //這一行是多字體,但會閃爍,還在想另解 //Fnt->Name=FontFace[rand()%6]; SetTextColor(dc,RGB(rand()%256,rand()%256,rand()%256)); SelectObject(dc,Fnt->Handle); DrawText(dc,MemoShow[Lne].c_str(),-1,&rect,NULL); SetTextColor(dc,RGB(rand()%256,rand()%256,rand()%256)); rect.left+=(Memo1->Width)/2; rect.right=Memo1->Width; DrawText(dc,MemoShow[Lne].c_str(),-1,&rect,NULL); rect.top+=21; rect.right=(Memo1->Width)/2; rect.bottom+=21; rect.left=0; } DeleteObject(Fnt); ReleaseDC(Memo1->Handle,dc); return; } OldMemoWndProc(Message); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Memo1->Font->Size=12; for (int i=1;i<=10;i++) Memo1->Lines->Add("\n"); } //---------------------------------------------------------------------------嗯,對,如果直接key字上去Memo的話,會跟繪上去的有抵觸,這就上述的問題,所以還是不太建議這樣硬繪,工太細了,直接換元件比較快。That's all! 發表人 - |
jiew
一般會員 發表:13 回覆:7 積分:4 註冊:2003-06-11 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
|
jiew
一般會員 發表:13 回覆:7 積分:4 註冊:2003-06-11 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |