ab.com コミュニティ

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

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




新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 
作成者 メッセージ
 記事の件名: リスト構造体
投稿記事Posted: 2012年6月09日(土) 02:00 
オフライン

登録日時: 2009年3月29日(日) 15:45
記事: 106
お世話になっております。

今回、ポインタを勉強していて、リスト構造体と言うものを知り、
現在開発しようと思っているツリー型のテキストエディタ(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型の違いは何でしょうか。

ご存じの方がいらっしゃいましたら、ご教授ください。

_________________
↓個人的ソフト置き場
http://www.software.jpn.org/
↓萌えゲー製作とかしていたい
http://www.holygate.jpn.org/


最後に編集したユーザー 水波形 [ 2012年6月13日(水) 16:00 ], 累計 1 回

通報する
ページトップ
 記事の件名:
投稿記事Posted: 2012年6月09日(土) 21:01 
オフライン

登録日時: 2006年2月05日(日) 17:10
記事: 215
お住まい: 東京都
水波形さんが実現したいプログラム(ソフト)機能仕様についてはよくわかりませんが、
①FirstPtrを構造体のポインタ変数で定義してみてください。
具体的には
Dim FirstPtr As TREEDATA ではなく
Dim FirstPtr As *TREEDATAで定義してみてください。

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

よろしくお願いします。


通報する
ページトップ
投稿記事Posted: 2012年6月13日(水) 01:31 
オフライン

登録日時: 2009年3月29日(日) 15:45
記事: 106
たかせ様

ご返信ありがとうございます。
引用:
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つめまでしかループしていないという状況です。


ちょっと長いですが、おかしな所があればご教授ください。
よろしくお願いいたします。

_________________
↓個人的ソフト置き場
http://www.software.jpn.org/
↓萌えゲー製作とかしていたい
http://www.holygate.jpn.org/


通報する
ページトップ
 記事の件名: すいません
投稿記事Posted: 2012年6月13日(水) 16:01 
オフライン

登録日時: 2009年3月29日(日) 15:45
記事: 106
上の質問ですが、一応、自己解決できました。
ご迷惑をおかけして申し訳ございません。

_________________
↓個人的ソフト置き場
http://www.software.jpn.org/
↓萌えゲー製作とかしていたい
http://www.holygate.jpn.org/


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 4 件の記事 ] 

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


オンラインデータ

このフォーラムを閲覧中のユーザー: Bing [Bot] & ゲスト[19人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

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