掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ドラッグ&ドロップでファイル名とフルパスを取得してデータベースに格納するには? (ID:21513)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ListBox自身にはフルパス格納 ListBoxのOnDrawItemで、ファイル名のみ描画する。 ・・・ってのはどうですか? もしくは、別途StringListを用意し、TListBoxはファイル名のみ、StringListにはフルパスを格納し、Indexを合わせて使用する。 AddObjectでString型が使えないのは、ぶっちゃけ、String型は勝手にメモリを 確保・破棄してくれるPChar型だからであり、とあるメソッド内出宣言した変数は、 そのメソッド内でしか使えない(スコープ・・・でいいんか?)から、 AddObjectしたメソッド以外の場所でアクセスしようとしても、すでに開放されたあとの メモリを参照するからエラーになる。 誰か・・・丁寧な説明希望する orz ちなみに、TUnitDBのFFileNameやFFilePathのインスタンスは、どこで生成しているのやら? クラスは、Createしないと使えませんよ。 var DB : TUnitDB; begin //クリエイト DB := TUnitDB.Create; //終わったら破棄 DB.Free; end; ついでに言うなら、クラス内に宣言したクラス型の変数は、そのクラス内で生成・破棄(Create,Free)するのが吉。 外に任せると、思いがけないことになる可能性があるでしょう。 type TUnitDB = class public FFileName: TStrings; FFilePath: TStrings; public constructor Create; destructor Destory; override; procedure Add(const S: String); end; constructor TUnitDB.Create; begin inherited Create; FFileName := TStringList.Create; FFilePath := TStringList.Create; end; destructor TUnitDB.Destory; begin FFileName.Free; FFilePath.Free; inheirted Destory; end; タイプミスは大目に見てください。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.