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

有關KeyDown此一event

尚未結案
ammon
一般會員


發表:5
回覆:11
積分:3
註冊:2002-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-28 10:45:43 IP:61.31.xxx.xxx 未訂閱
站長, 你好: 想請教一個問題,有關我在程式中使用TLabeledEdit此一元件,並在KeyDown此一event下了如下語法: procedure TForm1.LabeledEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Ord(Key) = VK_Return then begin xxx xxx end; end; 但是在run time狀態下,我去攔按下enter的動作時,似乎都沒有進此一event中,找了許久,不清楚為何有此一現象發生,但是,當我獨立使用新的application來開發,貼上新的Tlabelededit元件時,在keydown event就可以抓到,不曉得有可能導致影響的原因為何? 謝謝! ammon .^_^.
------
ammon .^_^.
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-28 11:07:26 IP:210.58.xxx.xxx 未訂閱
Hi ammon 兄您好: 1.設中斷點在if Ord(Key) = VK_Return then這一行,測試程式是否有進入, Key的值是多少 2.請問您的Tlabelededit是否有放在哪一個元件上面. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
ammon
一般會員


發表:5
回覆:11
積分:3
註冊:2002-06-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-28 11:13:22 IP:61.31.xxx.xxx 未訂閱
Miles, 你好:    1.我有在此處設立中斷點,不過在按下enter時,他根本沒進入這個event的procedure。 2.我是放在TPanel上的    ammon    
引言: Hi ammon 兄您好: 1.設中斷點在if Ord(Key) = VK_Return then這一行,測試程式是否有進入, Key的值是多少 2.請問您的Tlabelededit是否有放在哪一個元件上面. 我不是高手, 高手是正在銀幕前微笑的人.
------
ammon .^_^.
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-28 17:32:24 IP:210.58.xxx.xxx 未訂閱
Hi ammon : 1.檢查程式碼裡是否有將LabeledEdit1.OnKeyDown指定到別的Procedure 2.建議您先拉一個新的TLabeledEdit, 將舊的殺掉指定相關Event再試一次. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
ammon
一般會員


發表:5
回覆:11
積分:3
註冊:2002-06-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-11-28 17:58:48 IP:61.31.xxx.xxx 未訂閱
Miles,你好:    1.這個部分,我確定過了好幾次,是沒有錯的。因為我同樣有另一個LabeledEdit1也發生此問題。 2.我也刪除過,重新在貼元件過,結果仍然相同。    Ammon    
引言: Hi ammon : 1.檢查程式碼裡是否有將LabeledEdit1.OnKeyDown指定到別的Procedure 2.建議您先拉一個新的TLabeledEdit, 將舊的殺掉指定相關Event再試一次. 我不是高手, 高手是正在銀幕前微笑的人.
------
ammon .^_^.
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-11-29 11:02:03 IP:210.58.xxx.xxx 未訂閱
Hi ammon兄: 我自己是的結果都是可以的, 以前遇到過的狀況是用TDBCtrlGrid上面放TDBEdit, TDBEdit的OnKeyDown會跑到TDBCtrlGrid裡去跑, 這應該是正常現象, 但你現在說的情形我試了試倒是不會, 最後的建議是請您看一下DFM裡面的資料,在你的 TLabeledEdit 是否有OnKeyDown = LabeledEdit1KeyDown這行. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
ammon
一般會員


發表:5
回覆:11
積分:3
註冊:2002-06-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-11-29 11:21:21 IP:61.31.xxx.xxx 未訂閱
Miles,你好:    DFM的資料,我昨天也確認過了,裡頭確實有相對應的資料,所以應該不是這個問題,不過我今天從新撰寫之後,發現相同的步驟,到了我貼上另一個元件,同時做了些變化之後,就有狀況發生了,我先在panel上貼了labelededit,並在他的keydown event寫了showmessage('123'),接著一直貼上其他我要的元件,在貼上最後一個元件TBitBtn(***很重要的動作,將他的屬性KIND變動,這時在去RUN,你就會發現labelededit的keydown 嗝屁了,完全無作用了)    測試到這邊時,我覺得這...真是詭異,算是delphi 6的bug嗎? 本來剛好要上網站POST,就看到你的回覆了,真是謝謝你的幫忙。    Ammon    
引言: Hi ammon兄: 我自己是的結果都是可以的, 以前遇到過的狀況是用TDBCtrlGrid上面放TDBEdit, TDBEdit的OnKeyDown會跑到TDBCtrlGrid裡去跑, 這應該是正常現象, 但你現在說的情形我試了試倒是不會, 最後的建議是請您看一下DFM裡面的資料,在你的 TLabeledEdit 是否有OnKeyDown = LabeledEdit1KeyDown這行. 我不是高手, 高手是正在銀幕前微笑的人.
------
ammon .^_^.
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-11-29 11:56:36 IP:210.58.xxx.xxx 未訂閱
ammon兄, 果然如此, 被你測出來了 看一下下面的程式, TBitBtn.SetKind, 設定TBitBtn.Kind時會做到

procedure TBitBtn.SetKind(Value: TBitBtnKind);
begin
  if Value <> FKind then
  begin
    if Value <> bkCustom then
    begin
      Default := Value in [bkOK, bkYes];
      Cancel := Value in [bkCancel, bkNo];
    
      if ((csLoading in ComponentState) and (Caption = '')) or
        (not (csLoading in ComponentState)) then
      begin
        if BitBtnCaptions[Value] <> nil then
          Caption := LoadResString(BitBtnCaptions[Value]);
      end;
    
      ModalResult := BitBtnModalResults[Value];
      TButtonGlyph(FGlyph).Glyph := GetBitBtnGlyph(Value);
      NumGlyphs := 2;
      FModifiedGlyph := False;
    end;
    FKind := Value;
    Invalidate;
  end;
end;
當我們將Kind設成bkOK, bkYes他會自動將Default property設成True 導致我們按下Enter時會直接按到該按鈕,因此只要將Default改成False就好了 Good Luck 也謝謝你讓我知道這一點^^ 我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2002/11/29 11:58:56
------


我不是高手, 高手是正在銀幕前微笑的人.
ammon
一般會員


發表:5
回覆:11
積分:3
註冊:2002-06-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-11-29 13:16:53 IP:61.31.xxx.xxx 未訂閱
Miles,    設限在BitBtn.Kind=bkOK, bkYes時,按下enter就被截走,是直接去把api32的呼叫給阻斷嗎?因為在程式中,似乎很難看出他寫在哪裡,在印象中,若是Form為parent而有許多子元件者,可以在Form上設定KeyPreview來將按下任何鍵先行在Form的event做判斷,而他BiBtn的作法倒是讓人感到不解,不是嗎?    Ammon    
引言: ammon兄, 果然如此, 被你測出來了 看一下下面的程式, TBitBtn.SetKind, 設定TBitBtn.Kind時會做到

procedure TBitBtn.SetKind(Value: TBitBtnKind);
begin
  if Value <> FKind then
  begin
    if Value <> bkCustom then
    begin
      Default := Value in [bkOK, bkYes];
      Cancel := Value in [bkCancel, bkNo];
    
      if ((csLoading in ComponentState) and (Caption = '')) or
        (not (csLoading in ComponentState)) then
      begin
        if BitBtnCaptions[Value] <> nil then
          Caption := LoadResString(BitBtnCaptions[Value]);
      end;
    
      ModalResult := BitBtnModalResults[Value];
      TButtonGlyph(FGlyph).Glyph := GetBitBtnGlyph(Value);
      NumGlyphs := 2;
      FModifiedGlyph := False;
    end;
    FKind := Value;
    Invalidate;
  end;
end;
當我們將Kind設成bkOK, bkYes他會自動將Default property設成True 導致我們按下Enter時會直接按到該按鈕,因此只要將Default改成False就好了 Good Luck 也謝謝你讓我知道這一點^^ 我不是高手, 高手是正在銀幕前微笑的人. 發表人 - miles 於 2002/11/29 11:58:56
------
ammon .^_^.
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-11-29 13:43:30 IP:210.58.xxx.xxx 未訂閱
Hello ammon: 這應該是屬於流程控制的問題, 我們可以做個實驗, 在Form上放一些TBitBtn及一些TEdit, TLabelEdit, TMaskEdit之類, 將每個TBitBtn.Default都設成True, 裡面可以寫一些如ShowMessage('BitBtn1');之類的, 程式跑動後你在每一個Edit之類的地方按Enter他都會執行到TBitBtn最後一個設定Default為True的OnClick事件中, 我想它的用意大致上是這樣, 我輸入了很多查詢的條件在各Edit中, 我不管在哪個Edit裡按Enter都要直接以各Edit為條件查詢出資料,所以都要直接執行到查詢鈕也就是TBitBtn.Default最後設為True的按鈕. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-06-08 17:43:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!