新規フォームにフォーカスを移動しないためには?

解決


ぷぷ  2004-08-25 20:07:01  No: 10573

いつも参考にさせていただいてます。
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;

よろしくお願いします。


jok  2004-08-25 20:51:37  No: 10574

>TMemo(Sender).SetFocus; //←ここでフォーカスできません。

の直前に  self.SetFocus;  では?


ぷぷ  2004-08-25 21:35:31  No: 10575

TMemo(Sender).SetFocus;
のみだと、文字の入力はTMemoに行えるのですが、
文字カーソル?(縦棒の点滅)が表示されず文字化けします。
TMemo(Sender).SetFocus;の直前にself.SetFocus;
を使用した場合には、文字化けは解消されましたが状況は同じようです。


TtPIPICH  2004-08-25 22:14:11  No: 10576

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;

一瞬表示されますが


TtPIPICH  2004-08-25 22:23:13  No: 10577

あ、Tabキーが..


ぷぷ  2004-08-25 22:32:38  No: 10578

はい。すみません。
タブ移動でもできないと・・・ダメなのです。
Form2が完全に作成された後にフォーカスを戻すことは簡単なのですが・・。
Form2のShowイベントで設定しても有効になりません。


jok  2004-08-25 22:40:32  No: 10579

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;


ぷぷ  2004-08-25 22:52:27  No: 10580

ありがとうございました!
解決しました。


ぷぷ  2004-08-25 22:54:44  No: 10581

すみません。慌てて途中で送信してしまいました。
PostMessage(Handle,WM_APP,0,0);
を使用して解決しました。
ありがとうございました。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加