Aを押下時、Tmemoに"xyz"と表示させたいのですが、"xyza"と表示されてしまいます
具体的には、
if chr(Key) = 'A' then
Memo1.SelText := 'xyz' + #13#10;
と、書いています
deleteを使おうかとも思ったのですが、なんか幼稚な気がして・・・・
スマートな方法ありませんか?
Key := 0;
>Key := 0;
私もこの方法を考えてやってみたんですが、、、
どこに入れても駄目だったんですけど、どこに入れればいいんですか?><
ちなみに、KeyDownです
Aとaは違うのはわかっていますか?
>Aとaは違うのはわかっていますか?
これは文字コード的にということでしょうか??
それならわかっていますが・・・
あまり、スマートな方法ではありませんが...
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;
ってな感じでどうでしょう?
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
でどうでしょうか?
単純にこれでは?
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;
おっと失礼
begin
if (Key = 'A') or (Key = 'a') then
は
begin
if (Key = 'A') then
でした。
KeyDownイベントだと、皆さんが言う通りに書いても思い通りに動かないんですよ・・・
実際はShiftとかAltとかをからめたいので、KeyDownで書きたいんですけど・・・
やっぱりフラグですかねぇ・・・^^;
であれば、KeyDownはそのままで
Memo1KeyPressに
if Key = 'A' then
key := #0;
だけ入れるって言うのはどうでしょ?
これでどうでしょう?
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;
ツイート | ![]() |