13

フォームに TLinkLabel を配置し、有効な HTML リンクを含むキャプションを入力して、素敵な青い下線付きのテキストを取得しました。このプログラムを実行すると、Firefox (デフォルトのブラウザー) が起動し、リンクが自動的に開くことを期待していました。どうやらそうではないようです。

ヘルプファイルには、これを OnLinkClick イベント ハンドラでコーディングする必要があると書かれています。ただし、それを行う方法については何も述べていません。「Link」という文字列値を渡します。「デフォルトのブラウザを起動してリンクを開く」とはどうすればよいですか?

4

6 に答える 6

20

ShellExecute を呼び出すことができます。私はジェネリック呼び出し用にこのメソッドを書きましたが、あなたのケースではうまくいくはずです。

procedure ShellOpen(const Url: string; const Params: string = '');
begin
  ShellAPI.ShellExecute(0, 'Open', PChar(Url), PChar(Params), nil, SW_SHOWNORMAL);
end;

あなたのコードでは、これを呼び出す必要があります

procedure TForm1.LinkLabelClick(Sender: TObject);
begin
  ShellOpen(LinkLabel.Caption);
end;
于 2009-02-12T17:36:33.917 に答える
7

Delphi 2010 に同梱されている TLinkLabel にはさまざまな問題があります。a )コントロールがハイパーリンクとしてレンダリングされず、フォーム上の単純なラベル テキストとしてレンダリングされます。b) Cursor プロパティを設定しても、これがリンクであることを示すようにカーソルが変化しません。c) OnLinkClick イベントがまったく発生しません。私はWindows 7で作業しています。

したがって、私に関する限り、TLinkLabel は本来の機能を果たさず、役に立ちませ。ShellExecute が唯一のソリューションであり、OnClick イベントに配置する必要があります。

于 2010-04-22T13:13:31.537 に答える
5

TLinkLabelリンクのようなラベルを提供します。あなただけがあなたのプログラムでどのようなリンクがどのように振る舞うべきかを知ることができるので、それをリンクのように振る舞わせるのはプログラマーとしてのあなたの仕事です。ラベル内のURLを使用して、ラベルがユーザーのデフォルトのWebブラウザーを自動的に開くようにしたいのですが、リンクが行うのはそれだけではありません。例えば:

  • Internet Explorerは私のデフォルトのブラウザではありませんが、Internet Explorerでリンクをクリックすると、リンクされたページがFirefoxで開くことを期待していません。
  • ヘルププログラムのリンクをクリックすると、リンクされたトピックがWebブラウザではなく、ヘルププログラムに表示されることを期待しています。
  • Eclipseの設定ページは非常に複雑です。あるページの設定は、別のページの設定に関連している場合があります。これらのページには、ユーザーを直接関連ページに誘導するリンクがあります。この場合、URLやHTMLは含まれていませんが、下線付きのテキストが付いたラベルのままです。

一部のプログラムは、新しいウィンドウでリンクを開くか、古いウィンドウを再利用するかを選択できるようにします。どのブラウザが使用されているかを知らずにその機能を実装することはできません。プログラムは、デフォルトのブラウザ設定を無視し、常に特定の設定を使用する選択肢をユーザーに提供する場合があります。そのために、UIコントロールは、プログラムが実行することになっていることについてあまり多くの仮定をすることはできません。

TLinkLabelDelphiに付属しているコントロールを参照していると思います。(私のバージョンにはそのようなコンポーネントはありません。)Delphiコントロールは、.Netクラスライブラリのコントロールを模倣することを目的としていると思います。複数のリンクを保持でき、各リンクは異なることを行うことができます。

URLに対してシェルのデフォルトのアクションを常に実行するコントロールが必要な場合は、別のTLinkLabel;を使用することを検討してください。アレクサンダーバッハによるものは、まさにあなたが期待したことをします。これはDelphi3からのものですが、Delphi 2009を含む、それ以降のすべてのバージョンでも変更されずに機能するはずです。コードを見ると、どのように機能するかがわかります。Cesarの答えShellExecuteが示すように、それは単にを呼び出します。

于 2009-02-13T05:51:13.120 に答える
2

笑、面白いです。そのため、crHandPoint をカーソル、色付き、下線付きのフォントとして設定し、OnClick イベントを標準の TLabel に設定する代わりに、リンク タグを認識し、同じ On(Link)Click イベントを提供する必要があるコンポーネントを用意します :))

それが良いのは、リンクをテキストに埋め込むのが簡単になることと、リンクのシステムスタイルを使用していることだけです...

ps:実際には、に入れSome text with <a href="some URL">link</a>CaptionセットアップOnLinkClickする必要がありますShellExecute...

于 2011-07-31T00:38:00.517 に答える
1

代わりに、 TInternetLabelというコントロールを使用します。クリックするとブラウザーが開くので、OnClick イベントにコードを入れる必要はありません。

于 2011-01-15T14:53:41.317 に答える
1

この解決策を試しましたが、Delphi XE4 で問題が発生しました。これはおそらく、ShellOpen がキャプションの HTML コードを理解していないためです。私にとってうまくいったのは、Cesar Romero (基本コード)、Adam Feistner (キャプションの HTML コード)、および古いソリューションの組み合わせでした。


  • URL を HINT フィールドに入力します。
  • 次の行を変更します: ShellOpen(LinkLabel.Caption); ShellOpen(LinkLabel.Hint)に ;

これは私にとってはうまくいきました。

于 2013-11-17T21:37:47.320 に答える