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

如何得知memo上的字被選取

 
aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-27 18:44:34 IP:211.23.xxx.xxx 訂閱
大家好~
我想請問一下~
要如何得知memo上的字被選取
因為我想寫像Word上的
Cut(剪下)&Copy(複製)的功能
這二個功能平常Enabled是false
在User選取字後
Enabled才會等於true
所以我想知道如何寫??
謝謝
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-12-27 20:24:50 IP:211.22.xxx.xxx 未訂閱
//---------------------------------------------------------------------------

#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::Button1Click(TObject *Sender)
{
if ( this->Memo1->SelLength > 0 )
ShowMessage(this->Memo1->SelText);
}
//---------------------------------------------------------------------------
aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-28 08:30:19 IP:211.23.xxx.xxx 訂閱
感謝~Stallion
你的程式碼是按上一個button後判斷字是否被選取
可是Word上的Cut&Copy
只要使用者選取memo上的任何文字
Enabled就會從false變成true
所以~不知道該怎麼寫才好~
謝謝
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-12-28 09:49:01 IP:61.219.xxx.xxx 未訂閱
void __fastcall TForm1::Memo1Change(TObject *Sender)
{
if ( this->Memo1->SelLength > 0 ) // 如果有文字被選取
{
ShowMessage(this->Memo1->SelText);
// 看你要做什麼事情
}
}
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-28 10:06:16 IP:211.23.xxx.xxx 訂閱
感謝~pcboy2
我試過了~好像不行
因為 選取memo上的 字並不會觸發 Memo1Change
只有在memo上key字就會觸發 Memo1Change
些時this->Memo1->SelLength =0 (因為我還沒選取字)
所以不會有ShowMessage出現
axsoft
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-12-28 10:23:53 IP:61.219.xxx.xxx 未訂閱
請先在Form1上放入Memo1及Popmenu1 , 然後將Memo1的Popmenu屬性設為Popmenu1
下面的Code你試試吧!
unit1.H
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include < Classes.hpp >
#include < Controls.hpp >
#include < StdCtrls.hpp >
#include < Forms.hpp ><br />#include < Menus.hpp >
#include < Clipbrd.hpp >
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
TPopupMenu *PopupMenu1;
TMenuItem *Copy;
TMenuItem *N1;
TMenuItem *Patse;
void __fastcall FormCreate(TObject *Sender);
void __fastcall CopyClick(TObject *Sender);
void __fastcall PatseClick(TObject *Sender);
void __fastcall FormShow(TObject *Sender);
private: // User declarations
void __fastcall AppMessage(tagMSG &Msg, bool &Handled);
public: // User declarations
__fastcall TForm1(TComponent* Owner);


};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

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::AppMessage(tagMSG &Msg, bool &Handled)
{ if(Msg.message==WM_MOUSEMOVE){
if( Memo1->SelLength > 0 )
Copy->Visible=true;
else
Copy->Visible=false;
}
}


void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnMessage = AppMessage;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CopyClick(TObject *Sender)
{
Clipboard()->Clear();
Clipboard()->SetTextBuf(Memo1->SelText.c_str());
Patse->Visible=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::PatseClick(TObject *Sender)
{
if( Clipboard()->HasFormat(CF_TEXT) == true )
{
char TextBuf[MAX_PATH 1];
Clipboard()->GetTextBuf( TextBuf, MAX_PATH );
Memo1->SelText = TextBuf;
Patse->Visible=false;
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormShow(TObject *Sender)
{
Copy->Visible=false;
Patse->Visible=false;
}
---------------------------------------------------------------------------



nickcai2002
一般會員


發表:3
回覆:20
積分:24
註冊:2004-11-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-12-28 10:26:27 IP:59.125.xxx.xxx 訂閱
利用事件 =>(1)Memo1KeyUp (2)Memo1MouseUp 應該能解決你的問題
ex:
void __fastcall TForm1::Memo1KeyUp(TObject *Sender, WORD &Key,
TShiftState Shift)
{
Label1->Caption=Memo1->SelLength; //使用方式和pcboy2一樣
}
void __fastcall TForm1::Memo1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
Memo1KeyUp(Sender,0,Shift);
}


===================引 用 文 章===================
感謝~pcboy2
我試過了~好像不行
因為 選取memo上的 字並不會觸發 Memo1Change
只有在memo上key字就會觸發 Memo1Change
些時this->Memo1->SelLength =0 (因為我還沒選取字)
所以不會有ShowMessage出現

aconxu
一般會員


發表:18
回覆:41
積分:11
註冊:2006-12-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-12-28 11:04:13 IP:211.23.xxx.xxx 訂閱
謝謝大家的回答~
感謝~
系統時間:2024-05-03 13:00:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!