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

如何對edit做說明

尚未結案
piliswordsman
一般會員


發表:4
回覆:2
積分:1
註冊:2005-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-21 18:37:52 IP:59.104.xxx.xxx 未訂閱
大家好..我現在有edit 1~10 我每個輸入都有範圍限制... 我現在想做mouse 在上面他就會在label1.caption輸出他的說明 離開 則label1.caption上的說明就消失.. 如果一個一個設定..要設10次...不知有沒有比較方便的方法.. 感謝幫忙解惑的各位~~謝謝
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-21 18:57:31 IP:61.71.xxx.xxx 未訂閱
引言: 大家好..我現在有edit 1~10 我每個輸入都有範圍限制... 我現在想做mouse 在上面他就會在label1.caption輸出他的說明 離開 則label1.caption上的說明就消失.. 如果一個一個設定..要設10次...不知有沒有比較方便的方法.. 感謝幫忙解惑的各位~~謝謝
1.利用每一個edit 的 hint properity 就可以做到了, 不需要每一個的寫程式 或者在 lablel.hint 上寫, 不過不能太長就是了 2.我之前有一種做法, 就是把限制說明預設在每一個 edit.text上, 然後在 edit1.onenter 上再撰寫一個 edit1.selectall, 這樣當使用者一進入到這個edit1就會自動把預設值mark起來, 然後我們再做其他的判斷, 當然方便起見, 我建議你採用第1種方式, 只要把hint值填入即可, 但記得該form的showhint必須調整為true, 這樣每一個edit的hint才會顯示出來。
piliswordsman
一般會員


發表:4
回覆:2
積分:1
註冊:2005-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-21 20:56:45 IP:59.104.xxx.xxx 未訂閱
感謝前輩...用了你說的第一種方式已經能夠達到目的.. 不知可不可以寫個小小的例子..教一下你所說的第二種方式呢?? 拜託你囉~~敢謝~~^^
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-21 21:14:17 IP:219.86.xxx.xxx 未訂閱
個人建議 若您範圍限制 指的是數字範圍,倒不如直接使用 TSpinEdit。 提醒使用者,倒不如直接限制使用者輸入。 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-21 22:13:55 IP:211.74.xxx.xxx 未訂閱
引言: 大家好..我現在有edit 1~10 我每個輸入都有範圍限制... 我現在想做mouse 在上面他就會在label1.caption輸出他的說明 離開 則label1.caption上的說明就消失.. 如果一個一個設定..要設10次...不知有沒有比較方便的方法.. 感謝幫忙解惑的各位~~謝謝
  TEdit = Class(StdCtrls.TEdit)
    procedure CMENTER(var Msg:TMessage);message CM_MOUSEENTER;
    procedure CMLEAVE(var Msg:TMessage);message CM_MOUSELEAVE;
  end;
  TForm1 =....    implementation    procedure TEdit.CMENTER(var Msg:TMessage);
begin
  Case Self.Tag of
    0:Form1.Label1.Caption:='This Is Edit1';
    1:Form1.Label1.Caption:='This Is Edit2';
    2:...
  end;
  //if Self.Name='Edit1' then Form1.Label... else
  //if Self.Name='Edit2' then Form1.Lable... else
  //...
end;    procedure TEdit.CMLEAVE(var Msg:TMessage);
begin
  Form1.Label1.Caption:='';
end;    
發表人 - jest0024 於 2005/05/21 22:15:22
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-22 11:39:33 IP:61.71.xxx.xxx 未訂閱
引言: 感謝前輩...用了你說的第一種方式已經能夠達到目的.. 不知可不可以寫個小小的例子..教一下你所說的第二種方式呢?? 拜託你囉~~敢謝~~^^
第2種方式處理起來實在有點麻煩, 不建議你使用, 否則能力不及反而造成日後debug的困擾, 另外採取一種折衷, 也就是你之前的做法, 加一個label
Procedure TEdit1.onEnter(Sender:TObject);
begin
   label1.caption:= 'Edit1限制範圍為.....';
   label1.Update;
end;    // 如果你想在離開該Edit時清除Label, 
Procedure TEdit1.onExit(Sender:TObject);
begin
   label1.caption:= '';
   label1.Update;
end;
其實這個方法與jest0024是很類似的, 只是jest0024的方法比較趨於結構化的設計, 而我個人的做法是比較喜歡土法(只要這樣的方法不影響大太的效率的話), 當然如果你的Edit很多, 我這種做法會蠻耗時間的, 那就請你自個參考使用
jest0024
高階會員


發表:11
回覆:310
積分:224
註冊:2002-11-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-22 21:16:33 IP:211.74.xxx.xxx 未訂閱
CM_MOUSEENTER  <-- 滑鼠移至元件產生事件
CM_MOUSELEAVE  <-- 滑鼠離開元件產生事件    TEDIT並沒提供這二種事件,所以得自己攔劫~:D
//===========================================
亦可借助Hint屬性一用!!這樣只要在Hint上設定便可省去麻煩!!      TEdit = Class(StdCtrls.TEdit)
    procedure CMENTER(var Msg:TMessage);message CM_MOUSEENTER;
    procedure CMLEAVE(var Msg:TMessage);message CM_MOUSELEAVE;
  end;
  TForm1 =....    implementation    procedure TEdit.CMENTER(var Msg:TMessage);
begin
  Form1.Label1.Caption:=Hint;
  //Hint  'ABC\nDEF';
  //Form1.Label1.Caption:=StringReplace(Hint,'\n',#10#13,[rfReplaceAll]); Label1折行!
end;    procedure TEdit.CMLEAVE(var Msg:TMessage);
begin
  Form1.Label1.Caption:='';
end;    
發表人 - jest0024 於 2005/05/22 21:43:54
系統時間:2024-05-20 22:14:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!