引き続きお世話になります。
Memo1.SelTextの初期化についての質問です。
下記のことを実現したいと思っております。
①Memo1の任意の文字列を選択
↓
②Editに文字列をコピー
↓
③②をGoogle検索
文字列が選択されていない状態の時は
④Editが空白の時は、Google(キーワードなしで)のみ起動
し、
もし、Editに文字列が入力をされていた(直接キーワード入力)場合は
③②をGoogle検索
ちなみに、①〜③は出来たのですが、
④が出来ません。調べてみますと、Memo1.SelTextに直前まで選択していた値が
入力されているようです。
①②Edit1.Text:=Memo1.SelText;
③SURL:='https://www.google.com/search?hl=ja&output=search&q=' + HTTPEncode(UTF8Encode(Edit1.Text));
ShellExecute(Application.Handle,'open',Pchar(SURL),NiL,NiL,SW_SHOW);
ここまでは出来ました。
そこで、SelTextを初期化しようと思って、
Memo1.SelText:='';//←これで初期化しようとしましたが、これだと選択していないのに、直前の選択テキストが
Memo1から消えてしまいます。
さらに、以下のコードに変更してみましたが、
Memo1.SetFocus;//←この状態でもMemo1.SelTextに文字列が入った状態になっているようです。
SelTextの初期化が可能ではないのでしたら、文字列が選択されている
かどうかを判定する方法がありましたら教えていただけましたら助かります。
単純に Edit1 の文字列を調べてNULLなら通常起動で良いのでは?
if Edit1.Text = '' then
begin
ShellExecute( HWND( Self ), 'open', PChar( 'https://www.google.co.jp/' ), '', '', SW_SHOWNORMAL );
end else
begin
・・・
end;
KONNOYAさん
書込みありがとうございます。
Edit1.Textは、Memo.SelTextから代入されるために選択が解除されて
いないとNULLにならないので、
下記で実現は出来ると思ったのですが、SelTextの選択の解除が
出来ずに困っているということです。
SetFocusだけでは解除できないようでSelTextの解除はどのように
行うのでしょうか?
If Memo1.SelText='' then
begin
SURL:='https://www.google.com/search?hl=ja&output=search&q=';
end
else
begin
Edit1.Text:=Memo1.SelText;
SURL:='https://www.google.com/search?hl=ja&output=search&q=' + HTTPEncode(UTF8Encode(Edit1.Text));
Memo1.SetFocus;
end;
ShellExecute(Application.Handle,'open',Pchar(SURL),NiL,NiL,SW_SHOW);
end;
どのトリガ(イベント)で memo1 から Edit1 への文字列コピーを行っていますか?
Memo1.SetLength := 0;
は、どうでしょう?
間違えました失礼。
Memo1.SelLength := 0;
でした。
KONNOYAさん
>Memo1.SelLength := 0;
一部コードを追加修正しましたが、上記で目的を達成できました。
グーグルでさんざん検索したのですが、探せなかったので大変
助かりました。ありがとうございました。
ツイート | ![]() |