Delphi 買ったけど。。 RSSを登録する

初めてプログラムという物に触れようとして、Delphi を買ったけど全然わからないや。という方の為のメルマガです。

最新号をメルマガでお届けします    
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。
2007/05/27

Delphi 買ったけど。。No.0200 2007/05/27

この記事を取り寄せる

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
           Delphi 買ったけど。。No.0200
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
だも(^O^)/ TERRY です(^-^)
ナンバーからすると今回が200号のようですね。
8年かけてたった200号か!

……ま、いぃか (=∩_∩=)

┏━┓
┃イ┃ンクリメンタルサーチ
┗━┛

私は常用ブラウザに Opera を使っているのですが、ブックマークで(
普通にツリービューなんですが)検索するとインクリメンタルサーチし
てくれるのが気に入っています。
http://hp.vector.co.jp/authors/VA009187/delkedo/operabm001.jpg
http://hp.vector.co.jp/authors/VA009187/delkedo/operabm002.jpg
http://hp.vector.co.jp/authors/VA009187/delkedo/operabm003.jpg

とりあえずこれをやってみましょう(^o^)/

フォームに TEdit ひとつ。TTreeView を二つ貼り付けます。

┏━┓
┃す┃ぐにテストできるように TreeView1 にノードをでたらめに作ります。
┗━┛


procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
const//Object(Data)プロパティの関連先
  Dat='abcdefghijklmnopqrstuvwxyz';
begin
  with TreeView1 do
  begin
//ルートノードに適当に追加
    for i:=0 to 10 do
    begin
      Items.AddObject(nil,IntToStr(i),TObject(i));
    end;
//残りは適当に子供ノード作成
    for i:=11 to 25 do
    begin
      Items.AddChildObject(TTreeNode(Items[Random(i)]),
                           IntToStr(i),TObject(i));
    end;
  end;
end;

これで適当に子供ノードを持ったツリーが作られます。

┏━┓
┃ア┃イテムをクリックしたときに
┗━┛

「どちらのツリービューか」「アイテムの絶対インデックス」「データ」
をわかるようフォームのキャプションに表示します。
TTreeView の OnChange イベントです。

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  Caption:=(Sender as TComponent).Name+' - '+
           IntToStr(Node.AbsoluteIndex)+'/'+Dat[Integer(Node.Data)+1];
end;

┏━┓
┃そ┃して検索
┗━┛

TEdit をWクリックした OnChange イベントに書きます。
procedure TForm1.Edit1Change(Sender: TObject);
var
  i:integer;
begin
  with TreeView2 do
  begin
//空ならやめ。
    if Edit1.Text='' then
    begin
      Items.Clear;
      exit;
    end;
//とりあえずすべてコピー(データ込み)
    Items.Assign(TreeView1.Items);
//最後から逆順に検証
    for i:=Items.Count-1 downto 0 do
    begin
//キャプションだけの比較ならこの一行でOK
//      if AnsiPos(Edit1.Text,Items[i].Text)>0 then Continue;

//今回は一応データも対象
//ヒットしたら何もしないでループ先頭に戻る
      if (AnsiPos(Edit1.Text,Items[i].Text)>0)or
           (AnsiPos(Edit1.Text,Dat[Integer(Items[i].Data)+1])>0) then
              Continue;
//ヒットしないから削除。だが、子供を持っているという事は
//その子供はヒットしたものなので親も殺さない。
      if not Items[i].HasChildren then
           Items.Delete(Items[i]);
    end;
//これ見よがしに展開してみる(^^;
    FullExpand;
  end;
end;


<Tubuyaki>
なぜか Items.BeginUpdate 〜 EndUpdate するとうまくいかなかっ
たのですが、ヘルプを読む限り
「変更されたツリーノードの Index 値は EndUpdate が呼び出される
まで無効です」
これが原因ですかね?
早く処理するには当たり前だと思っていたのですが。
</Tubuyaki>


5月クリア!
そりでは(^.^)/~~

_________________________________________________________________
★わからない点などありましたら、メールしてください。
★メッセージボードはスパム投稿があまりに増えたのでアドレスを少しだ
  け変更しました。私のトップページ
  http://www.vector.co.jp/authors/VA009187/
  から入ってください。

  あるいは↓の「*」を「.」に変更してください。
  http://hpcgi3*nifty*com/teriard/honey/honey-mk2*cgi
*****************************************************************

発行者:TERRY                                   teriard@nifty*com
スパム対策です。               「*」を「.」に変更してください↑

★ 登録 or 解除はこちらから↓
                http://www.vector.co.jp/authors/VA009187/delkedo/
★バックナンバー
                 http://backno.mag2.com/reader/Back?id=0000016258
*****************************************************************
 ★なるべくMSゴシックなどの「等幅フォント」でお読み下さい★
_________________________________________________________________
このメールマガジンは、
・インターネットの本屋さん『まぐまぐ』
  http://www.mag2.com/       ID:0000016258
・melma!
  http://www.melma.com/      ID:m00001349
で発行しています。
_________________________________________________________________

この記事を取り寄せる
最新号をメルマガでお届け
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。

最近の記事

上へ戻る