掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DBGridの列データ自動保存、自動読込 (ID:30339)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
いつも参考にしています。 コンポーネントの作成について相談させてください。 TDBGridColumnsのメソッドに LoadFromFile と SaveToFile がありますが, このメソッドを TDBGrid作成時と破棄時に 組み込み 列データの保存と呼び出しを自動で行えるように実装したいと考えています(プロパティで切替可能) 現在,作成時は CreateWnd メソッドを,終了時は Destroy メソッドを override を行って処理をしています。 ただこのままだとプロジェクトを開いた時と終了する時に,CreateWndとDestory が動くみたいで, 開く時は下記のエラーが発生します。 フォーム作成中にエラーが発生しました。_1.Columns の読み込み中のエラー : TColumn.Expanded の読み込み中のエラー : リストのインデックスが範囲を超えています (0) 終了する際はエラーは出ないのですが,設計時の列データが保存されてしまいます。 (設計時は無効にするコンパイラ指令があったりする?) 何か対処法又は,良い手法があれば教えて頂けると幸いです。 コンポーネントを作成するのは初めてで考え方が間違っている所もあると思います。 よろしくお願いします。 ===================================================================== unit MyDBGrid; interface uses SysUtils, Classes, Controls, Grids, DBGrids; type TMyDBGrid = class(TDBGrid) private FColumnSave: Boolean; { Private 宣言 } procedure SetColumnSave(const Value: Boolean); protected { Protected 宣言 } procedure CreateWnd; override; public { Public 宣言 } destructor Destroy; override; published { Published 宣言 } property ColumnAutoSave: Boolean read FColumnSave write SetColumnSave default False; end; procedure Register; implementation procedure Register; begin RegisterComponents('Data Controls', [TMyDBGrid]); end; { TMyDBGrid } procedure TMyDBGrid.CreateWnd; begin inherited; if FColumnSave then begin if FileExists('Col_' + Owner.Name + Name + '.dat') = True then begin Columns.LoadFromFile('Col_' + Owner.Name + Name + '.dat'); end; end; end; destructor TMyDBGrid.Destroy; begin if FColumnSave then begin Columns.SaveToFile('Col_' + Owner.Name + Name + '.dat'); end; inherited; end; procedure TMyDBGrid.SetColumnSave(const Value: Boolean); begin FColumnSave := Value; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.