0

VB6またはVB.Netで印刷レイアウトエディターを作成しようとしていますが、開始に役立つ参考記事を探しています。

アイデアは、ユーザーが顧客の住所、請求書番号、行、合計などのボックスを描画できるようにすることで、請求書または明細書のレイアウトの印刷「領域」を定義するためにエディターを使用することです。プログラムは、翻訳方法を理解します。さまざまなボックスの寸法と位置を印刷場所に配置して、レイアウト定義ファイルに保存します。このファイルは、後でアカウントシステムがさまざまなレポートを印刷するために使用します。さまざまな理由で(主にアカウントシステムがWindows以外であるため)、テキストをWordまたは同様の製品に配置して、ドキュメントを印刷することはできません。もちろん、ドキュメントレイアウトファイルは手動で編集できますが、あまり使い勝手がよくありません。

ご想像のとおり、「フォームエディタ」や「レイアウトエディタ」などを検索すると、何百もの無関係な結果が得られます。イライラするのは、非常に関連性の高い記事を見たが、ブックマークを失ったことです。

私は誰かがいくつかのポインタを持っていることを望んでいます。


おかげで、これは私が想像したよりも複雑に聞こえます。vb.netでこれを行う方法がかなり明確だったので、失った元の記事を見つけられたらと思います。

これは印刷されたフォームのレイアウトなので、複雑さを大幅に軽減できると思います。実際には、各印刷領域のサイズと位置、フォント、配置、色の情報、場合によってはグラフィックのファイル名を保存するだけで済みます。ロゴが必要な場合。レイアウト定義ファイルの形式は完全に私の管理下にあります。

4

2 に答える 2

1

まず、使用している言語/ APIについて十分な知識を持っている必要があります。実際、Windows.Forms 、WPF、GTK#などを使用しているかどうかを実際に指定する必要があります。それ。

次に、フォームエディタがフォームを保存するためのフォーマットを考える必要があります。通常、フォームエディタはXMLを使用します。その傾向も追跡したい場合は、VB用の優れたXMLAPIを実際に学ぶ必要があります。

最後に、手順を慎重に計画します。

  1. APIが提供するカスタムテキストフィールドコントロールを使用しますか、それとも手動で描画しますか(その場合は、描画APIを学習する必要があります)。
  2. レイアウト定義ファイルの形式をよく理解してください。

次に、概念実証を開始します。フォームを読み込んだり保存したり、ボタンを追加したりできるシンプルなエディターを作成します。これはおそらく理解するのが最も難しいステップです。イベントやその他のいくつかの処理が必要になる場合がありますが、最終的には機能します(そうでない場合は、もう一度質問することができます)。最後に、レイアウト定義ファイルの出力、新しいコントロール、コントロールの移動/サイズ変更など、必要な機能を追加するだけです。

他に何か(より具体的な指示を含む)が必要な場合は、質問してください。

于 2008-11-26T17:47:56.870 に答える
0

ちょうど10年前のiircであるvb6でこの種のプリントアウトフォームエディタを開発したことを覚えています。悲しいことにソースを見つけることができるかどうかはわかりません。実際、この質問を見つけたのは、別のコードを作成する必要があり、最初からやり直すのではなく、最初から始めるコードを見つけたいと思っていたからです。とにかく、私がそれを実装した方法は、多かれ少なかれ、次のようでした:

  • ページの背景、ライトグリッドの表示、およびマウスイベントへの反応(たとえば、右クリックでメニューを表示する)用の1つのカスタムコントロール。
  • 各フィールドはウィンドウのないカスタムコントロールであり、ライトグリッドも表示されます(固定幅)文字ごとに1つのセルが表示されます。また、マウスイベントに反応して、移動したりサイズを変更したりできるようにしました。ウィンドウレスとは、「hwndがない」という意味です。これは、リソースへの影響を気にせずに多数のコントロールインスタンスを配置できるようにする一種の最適化です。.netを使用する場合はそれほど気にする必要はありませんが、vb6を使用する場合は違いがあります。
  • 選択したフィールドのプロパティを示すvb6のような1つのプロパティグリッド。私の場合、テキストのスタイル(圧縮、展開、太字)と、印刷する値を取得するために実行時に使用される式を設定できます。
  • レイアウトファイルをロードすると、ページのサイズが変更され、ファイル内のすべてのフィールドのフィールドコントロールがインスタンス化されます。
  • 保存すると、ページのプロパティ(サイズ、名前など)が書き出され、次にフィールドのコレクションが列挙され、それらのプロパティが書き出されます。
  • 実際の印刷を行うエンジンで使用されていたため、ファイル形式はすでに修正されているため、xmlは使用しませんでした。xmlは私の生活を楽にするだけで、データファイル形式のカスタムパーサーを作成する必要はありません。
  • 要件はドットマトリックスプリンターのみを処理することでしたが、幸いなことに私は角を切りませんでした。フィールドのより正確な配置とサイズを処理するように簡単に適応させることができました。簡単に言うと、行と列の座標を使用したいという誘惑に抵抗し、代わりにtwipを使用しました。数学についてもう少し考える必要がありましたが、ロケット科学は間違いなくありませんでした。

全体として、それはそれほど難しいことではなく、非常に素晴らしく、「CrystalReports」のフォームエディタに少し似ていました。
さまざまな文字幅でのグリッドスナップ、丸め誤差のためにジャンプせずに圧縮または拡張などのテキストスタイルを変更するときにフィールドのサイズを変更するなど、詳細を正しく理解するために時間を費やしたことを覚えています。これを怖がらせないでください。最初からすべての面倒を見る必要はないことを覚えておいてください。後でそれを行う可能性を妨げないように少し注意してください。

最近では、vb6についてはあまりアドバイスしません。ただし、それが最もよくわかっていて、ターゲットマシンにインストールされている.netフレームワークに依存せずに.exeを生成する必要がある場合を除きます。
代わりに.netを使用することを選択した場合、wpfをまだ知らない場合は、それを学ぶ良い機会になると思います。これにより、windows.formsよりも優れたグラフィックスが得られます。

于 2011-07-11T15:39:26.353 に答える