お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"<ハイパーリンク>マウスカーソルを手の形に"



過去ログを参考にさせて頂いて、ハイパーリンクを進めます。
今回は、ウェブブラウザでURLのところへマウスカーソルを持っていくと手
の形に変わる動作を真似てみます。
長くなるので、今回はとりあえず Nifty-URLのみに対応します。

ハイライト表示の時に定義した集合型定数を今回も利用しますので、前のコー
ド(手直し版)に今回のコードを追加して下さい。



{前略}

function TForm1.GetNifUrl(P: Integer): string;
// この関数は TForm1のプライベートなメンバーです。
// 引数Pで指定した位置に Nifty-URL文字列があればそれを返します。
// なければ長さ0の文字列を返します。
var
  S, Tmp: string;
begin
  Result:= '';
  S:= RichEdit1.Text;
  repeat                           //ループ処理で文字列を後方検索
    if S[P]= 'n' then Break else   //URLの先頭文字(n)で抜ける
      if not (S[P] in NifUrlChar) then Exit;
    Dec(P);
  until False;
  S:= Copy(S, P, 30);             //先頭からURLを含む文字列を切り出す
  P:= 1;
  if Pos('nifty:', S)<> P then Exit; //先頭に'nifty:'が含まれていな
  Tmp:= '';                          //ければ処理をやめる
  repeat                             //ループ処理で前方検索
    if not (S[P] in NifUrlChar) then Break;
    Tmp:= Tmp + S[P];            //有効な文字を蓄積して URLを形成する
    Inc(P);
  until False;
  if Pos('/MES/', Tmp) = 0 then Exit; // 会議室でない場合は無視する
  Result:= Tmp;
end;

// マウスイベントからGetNifUrl関数を呼び出します。
procedure TForm1.RichEdit1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  CaretPos: Integer;
  aPos: TPoint;
begin
  aPos.x:= X;
  aPos.y:= Y;
  // マウスポインタが指す文字の位置を取得する
  CaretPos := RichEdit1.Perform(EM_CHARFROMPOS, 0, Longint(@aPos));
  // マウスポインタが URLの上にあったら手の形に変える
  if GetNifUrl(CaretPos + 1) = '' then
    RichEdit1.Cursor:= crDefault else RichEdit1.Cursor:= crHandPoint;
end;

      ★ AvalonU使うならログブラウザ「えるつぅ」公開中 ★
      AvalonないとNIFTYできない(^^) H-Triton Since 1996

Original document by H-Triton        氏 ID:(QZV11422)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum