いつも参考にさせていただいてます。
Form1のTMemoコンポ−ネントにEnterした時に、Form2を作成、表示する
処理を行っていますが、このときにForm2にフォーカスが移動してしまいます。
Form1のTMemoコンポ−ネントにフォーカスを残した状態にすることはできますでしょうか?
--------------------
implementation
uses Form2;
var
Frm2: Form2;
procedure TForm1.Memo1Enter(Sender: TObject);
begin
if (Assigned(Frm2) = False) or
(Frm2.Showing = False)) then
begin
Frm2 := TForm2.Create(Self);
Frm2.Show;
TMemo(Sender).SetFocus; //←ここでフォーカスできません。
end;
end;
よろしくお願いします。
>TMemo(Sender).SetFocus; //←ここでフォーカスできません。
の直前に self.SetFocus; では?
TMemo(Sender).SetFocus;
のみだと、文字の入力はTMemoに行えるのですが、
文字カーソル?(縦棒の点滅)が表示されず文字化けします。
TMemo(Sender).SetFocus;の直前にself.SetFocus;
を使用した場合には、文字化けは解消されましたが状況は同じようです。
var
hoge:boolean;
procedure TForm1.Memo1Enter(Sender: TObject);
begin
hoge:=true;
if (Assigned(Frm2) = False) or
(Frm2.Showing = False) then
begin
Frm2 := TForm2.Create(Self);
Frm2.Show;
end;
end;
procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if hoge then
begin
self.SetFocus;
end;
hoge:=false;
end;
一瞬表示されますが
あ、Tabキーが..
はい。すみません。
タブ移動でもできないと・・・ダメなのです。
Form2が完全に作成された後にフォーカスを戻すことは簡単なのですが・・。
Form2のShowイベントで設定しても有効になりません。
OnEnter でフォーカスを変更するのはまずいようです。
以下でうまくいきました
{ Private 宣言 }
public
procedure WMApp(var Msg:TMessage);message WM_APP;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses
Unit2;
procedure TForm1.Memo1Enter(Sender: TObject);
begin
if not Assigned(Form2) then Form2 := TForm2.Create(Self);
if not Form2.Showing then
begin
Form2.Show;
PostMessage(Handle,WM_APP,0,0);
end;
end;
procedure TForm1.WMApp(var Msg: TMessage);
begin
SetFocus;
Memo1.SetFocus;
end;
ありがとうございました!
解決しました。
すみません。慌てて途中で送信してしまいました。
PostMessage(Handle,WM_APP,0,0);
を使用して解決しました。
ありがとうございました。
ツイート | ![]() |