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

memo如何加換行字元?

尚未結案
benson5033
一般會員


發表:44
回覆:47
積分:18
註冊:2004-08-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-18 16:06:05 IP:210.62.xxx.xxx 未訂閱
當我在memo上輸入字串時,游標會一直往後跑,當到最右邊時碰壁後就會跳到下一行繼續下去(我沒按enter鍵),有沒有辦法再它跳到下一行時自動加上換行字元?
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-19 00:21:58 IP:203.204.xxx.xxx 未訂閱
Hi~benson5033 參考如下寫法於Memo1Change事件中加入~  
 
void __fastcall TForm1::Memo1Change(TObject *Sender)
{
  if(Memo1->CaretPos.x>=20) //為你目前游標的位置可填上你的memo元件的"寬度"
    keybd_event(VK_RETURN,0,0,0); //模擬按下enter
}
//不要用c的換行字元\n~否則複製memo元件內容會有不正常的字產生
發表人 - rogan321 於 2005/01/19 00:26:22
benson5033
一般會員


發表:44
回覆:47
積分:18
註冊:2004-08-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-19 09:44:25 IP:210.62.xxx.xxx 未訂閱
引言: Hi~benson5033 參考如下寫法於Memo1Change事件中加入~
 
void __fastcall TForm1::Memo1Change(TObject *Sender)
{
  if(Memo1->CaretPos.x>=20) //為你目前游標的位置可填上你的memo元件的"寬度"
    keybd_event(VK_RETURN,0,0,0); //模擬按下enter
}
//不要用c的換行字元\n~否則複製memo元件內容會有不正常的字產生
發表人 - rogan321 於 2005/01/19 00:26:22
這個方法是可以,但是如果我不是直接keyin,是用複製貼上的方法的話就 不行了,怎麼辦呢?
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-20 03:47:16 IP:203.204.xxx.xxx 未訂閱
Hi~benson5033 ~直接寫個範例你參考看看~  重點就是抓ctrl+V的動作~ 同樣的如果抓右鍵的貼上也可如下處理
 
#include 
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include "Clipbrd.hpp"
TForm1 *Form1;
int startPos=0;
int nowPos=0;
bool clip=false;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{    startPos=Memo1->Text.Length();//開始的字串長度
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1Change(TObject *Sender)
{
    if(Memo1->CaretPos.x>=20&&clip!=true)
    {
     keybd_event(VK_RETURN,0,0,0);
     startPos=Memo1->Text.Length(); //更動後的字串長度
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
   if((Shift.Contains(ssCtrl))&&(Key=='v'||Key=='V'))
   {
     clip=true;           //偵測貼上的動作
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Memo1KeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
    if(clip)
    {
     nowPos=Memo1->Text.Length();  //貼上後的長度
     Memo1->SetFocus();
     if(nowPos>startPos)
      {
        int tmp=nowPos-startPos;   //貼多長的字串
        int len=22;                //設定memo的寬度要加上換行字元
        if(tmp>len)                //此演算只考慮由第一列開始貼起
        { int tmp2=startPos-1;    //以及無考慮剛開始無換行字元的存在
           while(tmp2SetFocus();
            Memo1->SelStart=tmp2; //移動游標
            Memo1->Text=Memo1->Text.Insert("\r\n",tmp2); //插入換行
           }
         }
       }
       clip=false;
    }
}
m8815010
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-21 00:29:48 IP:203.73.xxx.xxx 未訂閱
引言:
引言: Hi~benson5033 參考如下寫法於Memo1Change事件中加入~
 
void __fastcall TForm1::Memo1Change(TObject *Sender)
{
  if(Memo1->CaretPos.x>=20) //為你目前游標的位置可填上你的memo元件的"寬度"
    keybd_event(VK_RETURN,0,0,0); //模擬按下enter
}
//不要用c的換行字元\n~否則複製memo元件內容會有不正常的字產生
發表人 - rogan321 於 2005/01/19 00:26:22
這個方法是可以,但是如果我不是直接keyin,是用複製貼上的方法的話就 不行了,怎麼辦呢?
    benson5033你好:    這個問題相當的不好處理,在找到較佳解之前、之後都還是不太好做,以下將細細分析一下!    首先,因為元件本身有自動換行的能力(當遇到輸入字串會碰到>  >!    所以你的問題簡單一點,也是可以一行解決的(>//在你編輯完>> >    所以上述雖可一行解決,但卻不是最佳解法,你還必需自已把問號去掉,可以自已寫程式,也可以先將>這個 >!            發表人 - 
        
xfile
初階會員


發表:21
回覆:80
積分:25
註冊:2004-10-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-21 14:53:55 IP:220.130.xxx.xxx 未訂閱
引言:
引言: Hi~benson5033 參考如下寫法於Memo1Change事件中加入~ 發表人 - rogan321 於 2005/01/19 00:26:22
這個方法是可以,但是如果我不是直接keyin,是用複製貼上的方法的話就 不行了,怎麼辦呢?
複製貼上還是會改到 memo ,所以還是在 OnChange 裡面判斷就好了, 先判斷改變後的 Memo 有幾行,用 Memo->Lines->Strings[] 長度來決定行末,再設定 Memo->SelStart 到該處,插入 '\n' 以上只是我的想法,還沒實作過
系統時間:2024-11-25 16:43:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!