全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1975
推到 Plurk!
推到 Facebook!

Memo物件有辦法字型顯示不同顏色

尚未結案
jiew
一般會員


發表:13
回覆:7
積分:4
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-26 10:21:25 IP:61.219.xxx.xxx 未訂閱
請問..Memo物件有辦法字型顯示不同顏色嗎?當編輯文字檔遇到特定字元時 TKS & RGDS 發表人 - taishyang 於 2004/02/26 13:30:37
GaryKao99
中階會員


發表:46
回覆:102
積分:54
註冊:2002-08-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-26 10:58:31 IP:210.201.xxx.xxx 未訂閱
可以試試RichEdit嗎? RichEdit物件如同WordPad Memo物件如同NodePad ~~~~~~~~~~~~~~~~~~~~~~ 我什麼都會, 就兩樣不會 就是 這個也不會, 那個也不會
axsoft
版主


發表:681
回覆:1056
積分:969
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-26 12:06:35 IP:61.218.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-26 12:11:55 IP:61.218.xxx.xxx 未訂閱
Richedit也是可以做到的    
Unit1.cpp    //---------------------------------------------------------------------------    #include 
#pragma hdrstop    #include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::FormCreate(TObject *Sender)
{
   SendMessage(RichEdit1->Handle, EM_SETSEL, 0, 0);
   SendMessage(RichEdit1->Handle, EM_SCROLLCARET, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   int x;
   String str;       str = "one";
   for(x = 1; x <= RichEdit1->Text.Length(); x++)
   {
      if(RichEdit1->Text.SubString(x, str.Length()) == str)
      {
         RichEdit1->SelStart = x - 1;
         RichEdit1->SelLength = str.Length();
         RichEdit1->SelAttributes->Color = clRed;
      }
   }       str = "two";
   for(x = 1; x <= RichEdit1->Text.Length(); x++)
   {
      if(RichEdit1->Text.SubString(x, str.Length()) == str)
      {
         RichEdit1->SelStart = x - 1;
         RichEdit1->SelLength = str.Length();
         RichEdit1->SelAttributes->Color = clBlue;
      }
   }       str = "three";
   for(x = 1; x <= RichEdit1->Text.Length(); x++)
   {
      if(RichEdit1->Text.SubString(x, str.Length()) == str)
      {
         RichEdit1->SelStart = x - 1;
         RichEdit1->SelLength = str.Length();
         RichEdit1->SelAttributes->Color = clGreen;
      }
   }       SendMessage(RichEdit1->Handle, EM_SETSEL, 0, 0);
   SendMessage(RichEdit1->Handle, EM_SCROLLCARET, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   int i, repos = 0;
   String str;       for(i = 0; i < Edit1->Text.ToInt(); i++)
      repos = repos + RichEdit1->Lines->Strings[i].Length() + 2;
   str = RichEdit1->Lines->Strings[Edit1->Text.ToInt()];
   RichEdit1->SelStart = repos;
   RichEdit1->SelLength = str.Length();
   RichEdit1->SelAttributes->Color = clFuchsia;
}
//---------------------------------------------------------------------------    Unit1.h    //---------------------------------------------------------------------------    #ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include 
#include 
#include 
#include <Forms.hpp>
#include 
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
   TRichEdit *RichEdit1;
   TButton *Button1;
   TButton *Button2;
   TEdit *Edit1;
   void __fastcall FormCreate(TObject *Sender);
   void __fastcall Button1Click(TObject *Sender);
   void __fastcall Button2Click(TObject *Sender);
private: // User declarations
public:  // User declarations
   __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
/*生活是一種藝術,用心生活才能享受生活*/
發表人 - axsoft 於 2004/02/26 12:13:37
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-27 17:59:27 IP:61.63.xxx.xxx 未訂閱
引言: 請問..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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-28 10:27:27 IP:211.76.xxx.xxx 未訂閱
感謝各位大大幫忙 不甚感激... 因之前專案設計不理想,若改用其他元件將便得非常不便 那假設只是執行中,要變更Memo的顯示顏色,有辦法嗎? ex: 按下ctrl產生*號字元,並將之後的字串為綠色(僅一行) Have a nice weekend ^^
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-28 10:52:58 IP:61.63.xxx.xxx 未訂閱
引言: 感謝各位大大幫忙 不甚感激... 因之前專案設計不理想,若改用其他元件將便得非常不便 那假設只是執行中,要變更Memo的顯示顏色,有辦法嗎? ex: 按下ctrl產生*號字元,並將之後的字串為綠色(僅一行) Have a nice weekend ^^
jiew你好< >: 能不能將你的問題說清楚一點< >?比如說run起來以後還要key in data到Memo裏面嗎?還是只是show出已經先設定好的字串。然後你的按下ctrl……這個例了我也不是很懂耶!
jiew
一般會員


發表:13
回覆:7
積分:4
註冊:2003-06-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-28 11:21:45 IP:211.76.xxx.xxx 未訂閱
感謝大大幫忙.. 只要類似Richedit物件,可以更改字行顯示顏色即可 Memo也有這種功能嗎?? RichEdit1->SelAttributes->Color = clFuchsia; Thanks a lot!!
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-02-28 11:36:26 IP:61.63.xxx.xxx 未訂閱
引言: 感謝大大幫忙.. 只要類似Richedit物件,可以更改字行顯示顏色即可 Memo也有這種功能嗎?? RichEdit1->SelAttributes->Color = clFuchsia; Thanks a lot!!
jiew你好< > : 就是沒有啊< >!所以我們才會建議換元件,或是像我的範例程式一樣,用自已繪的(很麻煩)!
系統時間:2024-11-23 1:56:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!