キー入力


もしもしポンタ  2005-10-27 15:18:41  No: 18304  IP: 192.*.*.*

Aを押下時、Tmemoに"xyz"と表示させたいのですが、"xyza"と表示されてしまいます
具体的には、
if chr(Key) = 'A' then
    Memo1.SelText := 'xyz' + #13#10;
と、書いています

deleteを使おうかとも思ったのですが、なんか幼稚な気がして・・・・

スマートな方法ありませんか?

編集 削除
スマートかな?  2005-10-27 15:32:38  No: 18305  IP: 192.*.*.*

Key := 0;

編集 削除
もしもしポンタ  2005-10-27 15:46:27  No: 18306  IP: 192.*.*.*

>Key := 0;
私もこの方法を考えてやってみたんですが、、、
どこに入れても駄目だったんですけど、どこに入れればいいんですか?><

ちなみに、KeyDownです

編集 削除
3K  2005-10-27 16:07:21  No: 18307  IP: 192.*.*.*

Aとaは違うのはわかっていますか?

編集 削除
もしもしポンタ  2005-10-27 16:22:36  No: 18308  IP: 192.*.*.*

>Aとaは違うのはわかっていますか?
これは文字コード的にということでしょうか??
それならわかっていますが・・・

編集 削除
masayan  2005-10-27 16:36:43  No: 18309  IP: 192.*.*.*

あまり、スマートな方法ではありませんが...

var
  KeyNull : Boolean;

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  KeyNull := False;

  if Chr(Key) = 'A' then
  begin
    Memo1.SelText := 'xyz' + #13#10;
    KeyNull := True;
  end;
end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if KeyNull then Key := #0;
end;

ってな感じでどうでしょう?

編集 削除
3K  2005-10-27 16:48:57  No: 18310  IP: 192.*.*.*

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key = 'A')  or (Key = 'a') then
  begin
    Key := #0;
    Memo1.selText := 'xyz' + #13#10;
  end;
end;

対象はあくまでも「A」です。
「a」も必要ならなら  if (Key = 'A') or (Key = 'a') then

でどうでしょうか?

編集 削除
?  2005-10-27 16:51:11  No: 18311  IP: 192.*.*.*

単純にこれでは?
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = Chr(65) then //Aのアスキーコード
    begin
      Key := #0;
      Memo1.SelText := 'xyz' + #13#10;
    end;
end;

編集 削除
3K  2005-10-27 16:55:18  No: 18312  IP: 192.*.*.*

おっと失礼
begin
  if (Key = 'A')  or (Key = 'a') then

begin
  if (Key = 'A') then
でした。

編集 削除
もしもしポンタ  2005-10-27 16:59:58  No: 18313  IP: 192.*.*.*

KeyDownイベントだと、皆さんが言う通りに書いても思い通りに動かないんですよ・・・
実際はShiftとかAltとかをからめたいので、KeyDownで書きたいんですけど・・・

やっぱりフラグですかねぇ・・・^^;

編集 削除
3K  2005-10-27 17:26:12  No: 18314  IP: 192.*.*.*

であれば、KeyDownはそのままで
Memo1KeyPressに
if Key = 'A' then
    key := #0;
だけ入れるって言うのはどうでしょ?

編集 削除
Basser  2005-10-28 10:15:10  No: 18315  IP: 192.*.*.*

これでどうでしょう?

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  Msg: TMsg;
begin
  if (Chr(Key) = 'A') and PeekMessage(Msg, Memo1.Handle, WM_CHAR, WM_CHAR, PM_NOREMOVE) and
     (Chr(Msg.wParam) in  ['A', 'a']) and PeekMessage(Msg, Memo1.Handle, WM_CHAR, WM_CHAR, PM_REMOVE) then
    Memo1.SelText:= 'xyz';
end;

編集 削除