お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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

"HTMLのタグを選択する"




メモコンポーネントなどから、HTML形式のタグを選択します。
要は<から>までを選択します。タグ以外の部分の場合、
タグからタグまでの範囲を選択します。
ダブルクリック時などに使えば便利かと思います。
ただ、SelStartプロパティをどこかに取っておく必要があるです。



//キャレット位置からタグを選択する------------------------------------------------
procedure SelectTag(Sel: Integer); //Selはキャレット位置(SelStartの値)
var
  Memo: TMemo; //対象となるメモコンポーネント
  S: String;
  nStart,nEnd: Integer;
begin
  Memo := Memo1;

  Memo.SelStart := Sel;
  Memo.SelLength:= 0;
  if Copy(Memo.Lines.Text, Sel+1, 1) = '>' then
    S := Copy(Memo.Lines.Text, 1, Sel)    // S := キャレットより左側の文字列
  else
    S := Copy(Memo.Lines.Text, 1, Sel+1); // xxx|<Tag> という場合に <Tag>を選
                                          //択できるように1文字多くとる

  nStart := LastDelimiter('<>', S);
  if nStart > 0 then begin
    if S[nStart]='<' then begin
      //キャレットより左の'<'を見つけたぞ
      // S := キャレットより右側の文字列
      S := Copy(Memo.Lines.Text, Sel+1, Length(Memo.Lines.Text));
      nEnd := Pos('>', S);
      if nEnd > 0 then begin
        //キャレットより右の'>'を見つけたぞ
        nEnd := nEnd + Sel;
        Memo.SelStart := nStart - 1;
        Memo.SelLength:= nEnd - nStart + 1;
      end;
    end
    else
    if S[nStart]='>' then begin
      //これは、タグじゃなくて文字列だなっ
      // S := キャレットより右側の文字列
      S := Copy(Memo.Lines.Text, Sel+1, Length(Memo.Lines.Text)); 
      nEnd := Pos('<', S);
      if nEnd > 0 then begin
        //キャレットより右の'<'を見つけたぞ
        nEnd := nEnd + Sel;
        Memo.SelStart := nStart;
        Memo.SelLength:= nEnd - nStart - 1;
      end;
    end;
  end;
end;

============================================================================
Kaz 16:02 98/03/02

Original document by Kaz/Ina  氏 ID:(KGH10462)


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

Copyright 1996-2002 Delphi Users' Forum