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

VCL How To - Standard 元件篇

 
bruce0211
版主


發表:157
回覆:668
積分:279
註冊:2002-06-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-04 11:13:48 IP:61.227.xxx.xxx 未訂閱
元件名稱:TMemo 元件的進階使用  文件版本:for BCB 文件作者:bruce0211@yahoo.com.tw 2003/05/02     ■ 取得編輯游標(Edit Cursor)的目前座標    求 y 及 x 座標    int y = Memo1->CaretPos.y; int x = Memo1->CaretPos.x; 或 int y = SendMessage(Memo1->Handle,EM_LINEFROMCHAR,Memo1->SelStart,0); int x = Memo1->SelStart - SendMessage(Memo1->Handle,EM_LINEINDEX,y,0); 或 int y = Memo1->Perform(EM_LINEFROMCHAR, -1, 0); int x = Memo1->SelStart - Memo1->Perform(EM_LINEINDEX, -1, 0);    根據測試 (BCB 5.0) 使用 Memo1->CaretPos.y , Memo1->CaretPos.x 會有 bug , 在某些位置會讀出負值出來 故下面的例子不使用    
//-------------------------------------------------------------------------
//顯示目前編輯座標的函式,本函式可放於 Memo 的 OnClick() 及 OnKeyUp() 事件中
//隨時將目前編輯座標位置顯示在 Label1 中
//-------------------------------------------------------------------------
void __fastcall TForm1::DispPosition()  
{
  int begin_position=1; //座標開始位置(筆者喜歡把第一列看做是 Line 1 而不是 Line 0)
  int y=SendMessage(Memo1->Handle,EM_LINEFROMCHAR,Memo1->SelStart,0);
  int x=Memo1->SelStart - SendMessage(Memo1->Handle,EM_LINEINDEX,y,0);
  
  Label1->Caption="Line:" IntToStr(y begin_position) "   Col:" IntToStr(x);
}
■ 將 MEMO 某列反白 直接在程式碼中做說明 , 使用方法為 若要將 MEMO1 第 5 列整列反白則呼叫 LineIndexTo(5);
void __fastcall TForm1::LineIndexTo(int row)
{
  long TopRow,StartPostion,EndPostion;      //將 Memo 的 View 移到目的行
  TopRow=SendMessage(Memo1->Handle, EM_GETFIRSTVISIBLELINE, 0, 0);  //抓取目前 Memo1 中可視的第一列(Row)列號
  SendMessage(Memo1->Handle, EM_LINESCROLL, 0, row - TopRow);    //向下捲 row - TopRow 列 (若為負值則向上)      //取得 row 頭尾字元位置
  StartPostion = SendMessage(Memo1->Handle, EM_LINEINDEX, row, 0); //取得 Memo 中第 row 列開頭的字元位置
  EndPostion = SendMessage(Memo1->Handle, EM_LINEINDEX, (row   1), 0) - 1 ;      //將所指定的範圍位置反白
  SendMessage(Memo1->Handle, EM_SETSEL, StartPostion, EndPostion);
  //上列程式碼同下
  //Memo1->SelStart=StartPostion;
  //Memo1->SelLength=EndPostion-StartPostion-1;      Memo1->SetFocus();
}
系統時間:2024-05-02 16:49:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!