ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 06:28

全ての表示時間は UTC+09:00 です




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - リスト構造体
作成者 メッセージ
  記事の件名:  すいません  引用付きで返信する
上の質問ですが、一応、自己解決できました。
ご迷惑をおかけして申し訳ございません。
投稿記事 Posted: 2012年6月13日(水) 16:01
  記事の件名:  ご返信ありがとうございます  引用付きで返信する
たかせ様

ご返信ありがとうございます。
引用:
Dim FirstPtr As TREEDATA ではなく
Dim FirstPtr As *TREEDATAで定義してみてください。
なんという醜態……
そりゃそうだと、回答を拝見した時画面にチョップを入れてしました。
すいませんでした。
引用:
②BytePtrと*Byte型の違いについてですが
BytePtrと*Byte型はまったく同じものです。
AB V4.24のBASIC.SBPの28行目~46行目のソースコードに注目してください。
TYPEDEFステートメントを使用しています。
なるほど、ありがとうございました!
TYPEDEFステートメントは……定義付けみたいなものですね……?



何とか進んでいったのですが、今度はリエントラントで躓きました。

ツリービューで、各ノードにリスト構造体を持たせて、情報を管理しています。
リストの中身は、
・ノードのハンドル
・ノードのデータ(テキストデータ)
・次のリストへのポインタ
です。

ツリービューで、アイテムが追加されると、自動的にポインタも作られます。
その時、親ノードを閉じると、子ノードも自動的に消えますが、メモリは開放しません。
それをすべて解放しようとしています。

実験を重ねたところ、
hNext=SendMessage(hTree,TVM_GETNEXTITEM,TVGN_NEXT,hChild)
で、なぜか同列のノードが途中からかえらなくなっているところまでわかりました。
理由はわかりません……
子ノードは5つあるのに、上の関数では3つめまでしかループしていないという状況です。


ちょっと長いですが、おかしな所があればご教授ください。
よろしくお願いいたします。
投稿記事 Posted: 2012年6月13日(水) 01:31
  記事の件名:   引用付きで返信する
水波形さんが実現したいプログラム(ソフト)機能仕様についてはよくわかりませんが、
①FirstPtrを構造体のポインタ変数で定義してみてください。
具体的には
Dim FirstPtr As TREEDATA ではなく
Dim FirstPtr As *TREEDATAで定義してみてください。

②BytePtrと*Byte型の違いについてですが
BytePtrと*Byte型はまったく同じものです。
AB V4.24のBASIC.SBPの28行目~46行目のソースコードに注目してください。
TYPEDEFステートメントを使用しています。

よろしくお願いします。
投稿記事 Posted: 2012年6月09日(土) 21:01
  記事の件名:  リスト構造体  引用付きで返信する
お世話になっております。

今回、ポインタを勉強していて、リスト構造体と言うものを知り、
現在開発しようと思っているツリー型のテキストエディタ(Story Editorに似た感じのもの)に使えると思って考えているのですが、
どうもうまくいきません。

学校ではC言語で習い、何とか課題は提出できたのですが、
自分をごまかしている部分があって完璧には理解できていません。

私の頭の中では、
ツリーのノードの情報をポインタを使って保存していき、
ノードがクリックされた時に参照し表示していく
という図式ができています。

[構造体1] - [構造体2] - [構造体3] - [構造体4]……
これを順に検索していく感じです


グローバル構造体で
コード:
Type TREEDATA									'ツリービューのリスト構造体
	hHandle As HWND								'ノードのハンドル
	buffer As BytePtr							'ノードのデータ
	NextPtr As BytePtr							'次のリストの構造体ポインタ
End Type
を定義し、

グローバル変数で
コード:
Dim FirstPtr As TREEDATA						'ツリーデータの最初のポインタ
を定義。

クリエイトイベントで
コード:
FirstPtr=NULL
とりあえず、追加していこうと
コード:
Sub AddPointer(hHandle As HWND)
	'ツリーのポインタを作成
	Dim pt As TREEDATA
	pt=malloc(SizeOf(TREEDATA))
	pt.hHnadle=hHandle
	pt.NextPtr=FirstPtr

	FirstPtr=pt
End Sub

※引数の「hHandle」はノードのハンドル
と書いたのですが、型が違うと怒られます。
これは、どのような感じで書いていけばいいのでしょうか。


また、調べていて疑問に思ったのですが、
BytePtrと*Byte型の違いは何でしょうか。

ご存じの方がいらっしゃいましたら、ご教授ください。
投稿記事 Posted: 2012年6月09日(土) 02:00

全ての表示時間は UTC+09:00 です


ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean