TTreeViewのノードの再編集を促すには?

解決


みみ  2006-01-06 23:26:07  No: 19516

お世話になります。

今、TTreeViewを使用しているのですが、
NODEの編集を行った直後のonEditedイベントでNODEのテキストのチェックを行おうと考えております。
チェック自体は、onEditedイベントのパラメータ:Sを使用して加納なのですが、エラーだった場合、このノードを編集状態にしたいと思っています。

そこで、以下の様にコードを書いたのですが、TreeViewのノードの表示がおかしくなってしまいます。

procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
  var S: string);
begin
  //チェックを行いエラーだったら再編集
  if (チェック条件) = エラー then
  begin
    S := Node.Text;  //テキストを戻す
    Node.EditText;   //再編集状態にする
  end;
end;

イベントがグルグル回る?などと考えてみたもののさっぱりわかりません。
どなたか、このようなことをやったことのある方、ご教授願えますか。

よろしくお願いします。


これはどうかなー、べただけど  2006-01-06 23:34:18  No: 19517

TTreeView:SaveToStreamを使用して編集前のデータを隠し持っておく。
間違いが起きた時点でTTreeView:LoadFromStreamで差し戻す
こんな説明でわかるかな?


みみ  2006-01-07 00:09:55  No: 19518

前の値自体は、Node.Textで取得可能なのでSに入れてあげれば値は戻せるのです。
Node.EditTextを実行した時に、変な表示(文字数分真っ白でその後ろにカーソルがいる状態)になってしまうのです。
本来なら、テキストが反転して編集状態になると思っているのですが。。。

ちなみに、当方Delphi2005です。バージョンは関係ないかな・・・。


にしの  2006-01-07 09:13:28  No: 19519

Delphi-MLにありました。
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=068052

//Node.EditText;   //再編集状態にする
PostMessage(Node.TreeView.Handle, TVM_EDITLABEL, 0, Integer(Node.ItemId));
これでいけるかと。

ちなみに、Delphi7でも再現しました。


みみ  2006-01-20 03:39:26  No: 19520

遅くなってもう押し分けありません。

MLを参照しました。
TVM_EDITLABELというのは、MLに出てくるMessageForDelayのことだと思うのですが、
TVM_EDITLABELの定義はどこにあるのでしょう・・・。
調べてみたもののなにかunitを追加する必要があるのかわかりませんでした。


みみ  2006-01-20 03:57:10  No: 19521

自己解決しました。
const TVM_EDITLABEL = WM_USER + 100;
というような定義が必要だったのですね。

アドバイスありがとうございました。


みみ  2006-01-20 04:20:35  No: 19522

解決と書いたのですが、、、
constで定義すればいい!と浮かれて解決を押してしまいました。
実際、定義する値が違うようで、EDIT状態になってくれませんでした。
定義する値は何なのでしょう。


みみ  2006-01-20 04:30:58  No: 19523

一人でレスを増やしてすいません。。。

const TVM_EDITLABEL = 4417;  //0x1100+ 0x40 (TV_FIRST + TVM_EDITLABELW by CommCtrl.h)

で対応できました。

これでいいのかなぁ。。。

こういう使い方じゃダメ!と言う方いましたら、レスをお願いします。


にしの  2006-01-20 04:54:53  No: 19524

usesに、CommCtrlを追加すればOKです。
Delphiのバージョンによってはないかもしれませんが。
# Delphi7Proには入っています


みみ  2006-01-20 05:06:06  No: 19525

にしのさん、ありがとうございます。

ComCtrlsとCommCtrlは違うのですね。。。

無事解決できました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加