喫茶XRAYトップページ


[6144] TListviewについて返信 削除
2012/7/4 (水) 16:38:56 sato
質問があります(これでいいですか)
FormにListview1とButton1、Button2をおき
ListView1.Visible:=False;
Itemも設計時に設定しておき

Button1Clicで
ListView1.Items.Clear;
ListView1.Visible:=True;
としてもItemは消えません、
Button2Clicで
ListView1.Visible:=True;
ListView1.Items.Clear;
とすると消えます。
理由が分かりません。どなたか教えていただけませんか。
Delphi7、WinXPです。

[6145] Re:TListviewについて返信 削除
2012/7/4 (水) 16:58:24 igy
試してみたところ、こちらでは、
Button1、Button2 いずれもItemは消えました。

ListViewのViewStyleはvsReport.
Delphi7 Pro(Update適用済み), WindowsXp SP3

▼ satoさん
> 質問があります(これでいいですか)
> FormにListview1とButton1、Button2をおき
> ListView1.Visible:=False;
> Itemも設計時に設定しておき
>
> Button1Clicで
> ListView1.Items.Clear;
> ListView1.Visible:=True;
> としてもItemは消えません、
> Button2Clicで
> ListView1.Visible:=True;
> ListView1.Items.Clear;
> とすると消えます。
> 理由が分かりません。どなたか教えていただけませんか。
> Delphi7、WinXPです。


[6147] Re2:TListviewについて返信 削除
2012/7/4 (水) 17:46:29 Mr.XRAY
> 試してみたところ、こちらでは、
> Button1、Button2 いずれもItemは消えました。


当方でも消えました.
サンプルプログラム集の[320]の
01_起動中のアプリケーションのリスト1 ウィンドウタイトルで取得
で,ボタンを2つ追加してやってみました.
ViewStyleを変えてみましたが,全て消えました.

procedure TForm1.Button2Click(Sender: TObject);
begin
  ListView1.Visible:=True;
  ListView1.Items.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ListView1.Items.Clear;
  ListView1.Visible := True;
end;

Windows XP(SP3) + Delphi 7 Pro (Build 4.453) です.
さて,何なんでしょうね?

>質問があります(これでいいですか)

ハハハッ.もしかして,ご教授願いますのスレッドを意識していますね.
あまり堅苦しく考えることないと思います.
話す相手が目の前にいると思って,その人に語りかけるつもりで
書いてみると,やわらかい感じになると思いますよ.
ネット上では,年齢,性別関係なく,みんな仲間ですから.
「教授」を意識するのであれば,大学の講義で,「教授」に質問する
つもりで,とか...

[6148] Re3:TListviewについて返信 削除
2012/7/4 (水) 18:00:38 Mr.XRAY
>Itemも設計時に設定しておき

ということなので,新規プロジェクトにListViewを配置して,
Itemを,設定時に4つ追加してやってみましたが,
やはり,消えますね.
といっても,元々Visible := False ですから,何も見えません (^^;
謎です.

[6150] Re4:TListviewについて返信 削除
2012/7/4 (水) 22:31:38 たてぐや
▼ みなさん

 ちょうどTlistviewを使ったものを書いていたところです。私のところでも
Listview1.Items.Clearで消えました。
 Delphi6じゃ参考にならないかもしれませんが、OSはWindowsXP SP3です。

[6153] Re5:TListviewについて返信 削除
2012/7/4 (水) 23:18:44 Mr.XRAY
>  Delphi6じゃ参考にならないかもしれませんが、

ハハハッ,おそらく関係ないと思いますけど.
う〜ん.何でしょう.例えば,既存のプロジェクトを使ってテストして,
何かが悪さしているとか?

[6155] Re6:TListviewについて返信 削除
2012/7/5 (木) 07:15:56 Mr.XRAY
ListView1のプロパティ(オブジェクト・インスペクタで)をいろいろ変更
してテストしてみたんですが,現象確認できない.
なぜ? どぼちて...

[6157] Re7:TListviewについて返信 削除
2012/7/5 (木) 09:32:14 sato
マスター! 朝早くから申し訳ありません。
igyさん、たてぐやさん、ありがとうございます。
わ・わ・分かりました。
ListView1のReadOnlyが「True」になっていました。
「False」に変えると、「お見事」でした。
出入り禁止にならないように、努力のあとも見せないと。ということで。
ListView1.Items.BeginUpdate;
ListView1.Items.Clear;
ListView1.Items.EndUpdate;
ListView1.Visible:=True;
とやると、ReadOnlyがTrueでもItemsは消えました。

ただ、現象はこうなんですが、「初心者の」私には理屈がサッパリです。
識者の方どうか「●●●」ください。(どこかで見たような)


[6158] Re8:TListviewについて返信 削除
2012/7/5 (木) 10:15:03 igy
質問の最後あたりに、この「識者の方」という表現がまれに使われることがありますが、
これ、「ご存知の方」とかのほうが、私の場合、返信しやすいですね。
(私は識者じゃないから、答えれないのかな・・・とか考えてしまいます。)
まあ、それでも返信する場合、最初に
“識者ではありませんが・・・”とに入れるんですけどね。

▼ satoさん
> ただ、現象はこうなんですが、「初心者の」私には理屈がサッパリです。
> 識者の方どうか「●●●」ください。(どこかで見たような)


[6159] Re8:TListviewについて返信 削除
2012/7/5 (木) 15:16:50 Mr.XRAY
▼ satoさん

> わ・わ・分かりました。

ど・ど・どもくらないで.お・おっ・落ち着いて.
「どもくるなら,しゃべくるな!」というのが,昔の漫才のネタに
ありました.

> ListView1のReadOnlyが「True」になっていました。

おおっ,なるほど.


> とやると、ReadOnlyがTrueでもItemsは消えました。

で,TListViewですが,

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListView1.Items.Clear;
  ListView1.Visible :=True;
end;

のListView1.Items.Clear;は内部で,

  if Owner.HandleAllocated then ListView_DeleteAllItems(Handle);
  (OwnerはListViewで,Handleは,ListViewのItemsのハンドル)

を実行しています.この時,親(Owner)が非表示だと,HandleAllocatedがFalseに
なるようです.したがって,itemsはクリアれないことになります.

一方,

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListView1.Clear;  //ItemsがないClearメソッド
  ListView1.Visible :=True;
end;

とすると,クリアされます.これは,ListView1.Clear;が内部で,
Items.BeginUpdate;を呼び出しています.BeginUpdateは,事実上
HandleAllocatedをTrueにします.
したがって,Itemsがクリアされる,という仕組みのようです.


次に,質問の仕方を「ご教授」いたしましょう(笑).
igyさんも書いている通り.「識者の方」というのは,私の場合も同じです.
一歩引いてしまいます.
「初心者なんですが」というのもいらない思います.
ただ,単に「どうしてなんでしょうか?」とか,
方法はないでしょうか.でいいと思います.

「初心者」を名乗って,「基本的なことで申し訳ないのですが」
と書いている人がいますが,
初心者なのに,何で,それが基本的なのか分かるの?
となってしまいます.初心者なら,基本的なのか,難しいのか分かるわけ
ないだろう? ってね.


話のついでに.
「windows7でZeosLibコンポーネントが使用出来ない。」
http://www.freeml.com/delphi-users/2567/latest

これもレスが付きにくいですね.
まず,ZeosLibコンポというのが分かりません.
で,Googleで調べようとしたら,同じような人がいたみたいで,
入力欄に,ZeosLib Delphiが候補にでてきました(質問された本人かも知れませんが).
いくつか開いてみましたが,よく理解できませんでした.

また,「どなたか同じ様な状況になったことがある方」
というのもマイナスですね.
これだと,このコンポを使ったことがある人以外は,答える資格がないような
印象を与えてしまいます.
たとえ使ったことがなくても,調べてレスしてくれる方はいるものです.
igyさんもそうだと思うのですが,私もそういうレスの方が多いですからね.
何でも,全て知っていて,経験している人なんて,この世の中にいないと
思いますよ.

だから,今回の質問の内容も,こうやって,数人の方が実際にやって,
確認しているのだと思います.
おそらく,このスレッドを見ている方で,実際にやっている人もいるのでは
ないかと思います.

コミュニティの場というのは,基本的に相互扶助,情報交換の場だと,
私は思っています.
だから,「識者」にサポートしてもらう場でもないし,まして「教授」する場
でもないと考えています.

では,以上をもちまして,質問の仕方の「教授」を終了させていただきます.

[6166] Re9:TListviewについて返信 削除
2012/7/5 (木) 22:11:28 Mr.XRAY
> .... 省略
> したがって,Itemsがクリアされる,という仕組みのようです.


これは,Form.Createの時点でVisibleがFalseのときの現象ですが,
これがバグといえるのか,仕様なのかは,ちょっと判断できません.

[6168] Re10:TListviewについて返信 削除
2012/7/6 (金) 13:56:14 sato
▼マスター、みなさん ありがとうございます。
よく分かりました。
これからは、ListView1.Clear;を使うようにします。
>識者の方どうか「●●●」ください。(どこかで見たような)
申し訳ありませんでした。
暖かい店内の空気につられて、つい軽い冗談のつもりでしたが、お騒がせしました。




[6170] Re11:TListviewについて返信 削除
2012/7/6 (金) 14:28:19 sato
▼マスター
しつこくすみませんが、
procedure TForm1.Button1Click(Sender: TObject);
begin
  ListView1.Clear;  //ItemsがないClearメソッド
  ListView1.Visible :=True;
end;
の場合は、ListView1.ReadOnlyがTrueでも
Clearできるのは、
>これは,ListView1.Clear;が内部で,
>Items.BeginUpdate;を呼び出しています.

からなのでしょうか。よろしくお願いします。

[6171] Re12:TListviewについて返信 削除
2012/7/6 (金) 16:12:05 Mr.XRAY
▼ satoさん

> >Items.BeginUpdate;を呼び出しています.
> からなのでしょうか。よろしくお願いします。


だと思います.

INCM/CMT
Cyclamen v3.82