0

データがいっぱいになった直後に仮想リストビューにデータを保存したい。Savedialog を使用してデータを保存すると、機能します。ListviewOnData イベントで保存手順を呼び出すと、「ファイルを作成できません...」というエラーが表示されます。ここで私の観察を再現します。

procedure TForm6.savefileList(AListView: TListView; sFileName: string);

begin
F:= TFileStream.Create(sFileName, fmCreate or fmOpenRead);
...                                                       
...
F.free;

end;

Procedure Tform6.SavevirtualistinSaveDialog;// A buttonClick calls this procedure
begin
If SaveDialog1.execute then
savefilelist(listview1, savedialog1.FileName);; // It works and save data in sfilename.
..
end;

procedure TForm6.ListView1Data(Sender: TObject; Item: TListItem);
begin


with ld do begin     
...
...
// filling data in virtual list

end;
             // Right after filling data, I call Dosavelist procedure.
Dosavelist; //error line " Can not Create file", If I annotate this line
            // and call SavevirtualistinDialog in another buttonClick event, 
            //the data can be saved.

end;

Procedure Tform6.Dosavelist;
begin
savefilelist(listview1, extractfilepath(application.exename)+'list.tmp');
end;

データが入力された直後にリストビュー(仮想モード)でデータを保存することを期待しています。しかし、それはエラーを引き起こします。

それを解決する方法。前もって感謝します。

新しい編集:

listview1data イベントから Dosavelist を削除し、listview を追跡する別の関数に配置します。できます。それで解決です。助けてくれてありがとう。

//My complete savefilelist para is:

savefilelist(listview1, extractfilepath(application.exename)+'list.tmp'); 

//In SavevirtualistinSaveDialog procedure, the complete save code line is: 

savefilelist(listview1, savedialog1.FileName);

または Dosavelist プロシージャがそこで呼び出されない可能性がありますか? どこ?仮想リストビューの入力が完了した瞬間をキャプチャするにはどうすればよいですか? ListviewData イベントの直後にあるイベントがわかりません。

ありがとうございました。

4

1 に答える 1

1

これは、絶対ファイル パスを指定していないかのように聞こえます。次に、Windows は、ファイルを保存するときに現在の作業ディレクトリに依存します。保存ダイアログがこのディレクトリを設定するので、すべてが機能します。ListviewOnData イベントで、cwd が正しく設定されていない可能性があります。

于 2011-01-26T07:28:11.337 に答える