0

ここで助けが必要です...
Delphi 7 にグラフィック フィールドを持つ Paradox テーブルがあります。これで: http://www.swissdelphicenter.ch/torry/showcode.php?id=772 Delphi のデモから biolife.xml のような XML ファイルを作成できますが、グラフィック フィールドはありません。私は追加しました:
ftGraphic: Result := '"bin.hex" SUBTYPE="Graphic"';
コードで、しかし何も... XMLファイルの終わり:

Im=" /></ROWDATA></DATAPACKET>
Im=" の後はイメージ コードである必要がありますが、空であり、引用符も閉じませんでした。私が使用するグラフィック フィールドの場合:

image1.Picture:= nil;
panel1.PaintTo(image1.Canvas.Handle,0,0);
table1.edit;
table1.FieldByName('Im').Assign(image1.Picture.Bitmap);    
table1.Post;

私が欲しいのは、デルファイから「biolife.xml」のような XML ファイルを作成することです。それで、何か考えはありますか?

4

1 に答える 1

3

リンクする記事は、.xml のようなファイルではなく、プレーンな XML ファイルを記述しますBiolife.xml。グラフィックはプレーン XML ファイルに保存できません (書き込み時にエンコードし、読み取り時にデコードする必要があります)。グラフィックはバイナリ データであり、標準の XML には適していないため (また、文字列に格納してからTFileStream.

Biolife.xmlグラフィックファイルではありません。これはTClientDataSet(略して CDS) であり、XML 形式で保存されます。XML 拡張子が付いていますが、リンク先の記事が作成しているような単純な XML ファイルとはかけ離れています。

(これが TLDR の場合は、Short Answerとマークされたさらに下の段落までスキップしてください。)

TClientDataSetバイナリ形式または XML 形式でファイルに永続化 (保存) できるメモリ内データセットです。つまり、これは特殊なタイプのデータベースです。(詳細については、私の回答のさらに下を参照してください。)

Paradox には、格納して直接使用できるグラフィックスの種類に制限がありますが、TGraphicFieldそれらが手に負えなかったものを覚えていません。(Paradox は、Borland Database Engine (BDE) を介してアクセスされます。Paradox は、10 年以上前から廃止されており、1990 年代半ばの Delphi 1 以降は使用していません。TGraphicField)TGraphicField.SetFieldTypeメソッドの Delphi 7 ヘルプ ファイルに保存します。受け入れられると思われる唯一の実際の画像ファイルftGraphicは、ビットマップである です。

Delphi 7のFishFactsデモは、ストレージ メカニズム IIRC に Paradox データベースを使用するため、Paradox グラフィックスを操作する方法を示しています。これは、C:\Program Files\Borland\Delphi7\Demos\DB\FishFactsWindows XP の既定のインストールのフォルダーにあります。BioLife.cdsディレクトリには(.cdsはバイナリ形式のTClientDataSetストレージの既定の拡張子)もありますC:\Program Files\Borland Shared\Data

つまり、Biolife.xmlファイルに.XML拡張子が付いていることに惑わされないでください。を介してアクセスする場合を除いて、ほとんど役に立たない特別な形式のファイルですTClientDataSet。(メモ帳などのテキスト エディターで開きます。通常の XML ファイルは構造が明確で読みやすいのに対し、CDS XML ファイルは整理整頓されていません。

Borland Developer サイトにはTClientDataSet、Cary Jensen による使用に関する記事がいくつかありました。Cary Jensen は、Delphi でのデータベース プログラミングに関する本や記事をいくつか書いています。彼は、 likeA ClientDataSet in Every Database Applicationを使用したい場合は、それで始まる優れたシリーズを書きました。TClientDataSetBiolife.xml

簡単な答え: グラフィックを ParadoxTGraphicFieldに保存する場合は、実際のグラフィック イメージをサポートされている形式でそのフィールドに保存するか、実際のグラフィック ファイルを作成してLoadFromStreamまたはで保存しますLoadFromFile。ただし、実際のグラフィック ファイル (ビットマップなど) である必要があります。それは、フィールドに入れたいものだけではありません。

投稿したコードに基づいて機能するものの例:

var
  Bmp: TBitmap;
  BmpField: TGraphicField;
begin
  BmpField := table1.FieldByName('Im') as TGraphicField;
  Bitmap := TBitmap.Create;
  try
    Bitmap.Width := Panel1.Width;
    Bitmap.Height := Panel1.Height;
    Panel1.PaintTo(Bitmap.Canvas.Handle, 0, 0);
    table1.Edit;
    BmpField.Assign(Bitmap);
    table1.Post;
  finally
    Bitmap.Free;
  end;
end;

TClientDataSetlikeを使用しBiolife.xmlてデータを保存する場合は、次の方法で開始します。

You can find TClientDataSeton the Component Palette in the Data Accesstab in Delphi 7. 他の と同じように機能します。TDataSetつまり、永続フィールドの定義、データの挿入/削除/編集、フィルター、インデックスの作成などを行うことができます。

使い方の基本は簡単です。フォームにドロップして、ファイル名を割り当てるだけです。それを右クリックしFields Editor...、ポップアップ メニューから選択します。が表示されたら右クリックし、[ ]Fields Editorを選択しますNew Field。他のデータセットと同様に、保存するフィールドとそのタイプを定義します。CDS に必要なすべてのフィールドを追加するまで繰り返します。次に、を閉じて、もう一度Field Editor右クリックします。以前にはなかっTClientDataSetたオプションが表示されます。Create Datasetそれを選択すると、新しいデータセットが作成されます。

Locateこれで、インデックスの作成、レコード (行) の挿入、編集、および削除、検索 (を使用)、フィルターなど、通常どおり使用できます。TDataSource他のデータセットと同様に、 などの任意のデータ対応コントロールに( を介して) 接続できますTDBGrid。また、「通常の」XML では非常に難しい、グラフィック フィールドやメモ フィールドを作成することもできます。CDS がすべてのエンコードとデコードを処理します。

于 2013-06-29T01:09:21.117 に答える