• ベストアンサー

C++Builderでペイントソフト

C++Builder6でペイントソフトを作成しています。 そこで,UNDOを実装したいのですが, どのように作成したらよいのか分かりません。 色々と調べてみたのですが,あまりヒットしませんでした。 参考になるサイトなどがありましたら教えて頂けませんか。

noname#78422
noname#78422

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.1

UNDO処理は、メモリを使ってゴリゴリとコーディングするしかありません。 基本は「何かを書き換える時は、書き換え前の状態をメモリに退避しておいてから、書き換えを行う。UNDOで元に戻す時は、メモリに退避した物を元の場所へ書き戻す」です。 具体的には、以下のようにコーディングする事になります。 ・通常の状態では 1.ユーザーがキャンパスを書き換えるアクションを行おうとした場合は、書き換え前のキャンパスの全内容をメモリに退避する。 2.その後、ユーザーが行ったアクションをキャンパスに反映させる。 3.UNDOが可能な状態にする。 ・UNDOを行われたら 1.退避しておいたメモリ内容をキャンパスに戻す。 2.キャンパスを元に戻す以外の「つじつま合わせ」もする。 3.UNDO出来ない状態にする。 何を何処にどう退避させるかは、それぞれのソフトの作り方次第なので、これと言った決まりはありません(つまり「何を何処にどう退避させれば良いの?」と言う質問には回答出来ません) なお、通常の状態でメモリへ退避するのは、毎回ではなく「ペンツールから塗り潰しツールに変えた後とか、違うツールで描画しようとした瞬間」とか「ユーザーが明示的にメモリ退避を行った(メニューに「メモリへ退避」とかの項目を設置しておく)時」の方が良いです。UNDOで1ピクセルだけとか、1アクション分だけしか戻らないんだったら意味が無いので。

noname#78422
質問者

お礼

構造がよく分かりました。 ありがとうございました。

その他の回答 (2)

回答No.3

> draw系とpaint系では処理が違うのですか? draw系では絵そのものではなく、操作、たとえば "太さ3の赤いペンで(0,0)から(20,40)に線を引く" なんてのを順に記憶しておきます。 ですから最後の操作を削除し、最初から操作の列を再現することでUNDOが実現できます。

noname#78422
質問者

お礼

そうなんですか! 分かりました。 ありがとうございます。

回答No.2

> 基本は「何かを書き換える時は、書き換え前の状態をメモリに退避しておいてから、書き換えを行う。UNDOで元に戻す時は、メモリに退避した物を元の場所へ書き戻す」です。 paint系はそうかも知れんけど、draw系であれば'操作の並び'を記憶しておけばいい。

noname#78422
質問者

お礼

draw系とpaint系では処理が違うのですか?

関連するQ&A

  • C++builderで拡張子変換ソフトを作ろうと

    C++builderで、mp4をmp3に変換したりmp4をmpgなどに変換するプログラムを作ろうとしています。 しかし、私にそのような技術がありません。なので調べてみましたが全然ヒットしませんでした。 何かヒントになるようなサイトありませんか?また、本でもいいのでネットに売ってたらぜひ教えて欲しいです。

  • C++ Builderについて

    以前から、C言語、C++などをやっていて、最近になって、C++Builder(Version 5.0)を使ってみようと思いました。すこしいじってみたのですが、さまざまなことを簡単にできそうな気がしました。しかしながら、正直なところ分からないことだらけです。ネット上で初心者向けの本を購入したのですが、内容は薄く、自分が目的とするものに達するには十分ではありませんでした。探し方が悪いのか、本もさほど見つかりませんでした・・・・。 また、様々なサイトも見てみたのですが、やはりC++Builderの初歩的な使い方もいまいち分かっていないせいか、わけがわかりません。一応、購入した本で勉強しているのですが・・・・。 できることなら、初歩的なことから、詳しく様々なことが分かり易く載っている本等は無いでしょうか?C言語のときは、ぶ厚い本で勉強しました。そのような本もたくさんあったように思われます。C++Builderには無いのでしょうか?それともCやC++などをみっちりやらなければ、使えないって事なのでしょうか?

  • C++Builder

    卒業研究で昨日からC++Builderを使うようになったのですが、まったくわかりません。 「慣れれば普通にプログラム作るより簡単だ」と教官はいいいますが… それで昨日課題が出ました。 C++Builderでサイコロを作成し、クリックすれば数字が変わる用にしろ との事。 ずっとやってるのですが…ランダムに数字を表示するのってどうゆうの使うんですか? …もぅ初歩的な質問ですいません… 穴があったら入りたい…

  • VC++ と C++Builder

    C++の基本的な構造は理解していて、Win32APIを勉強しようとVC++でプログラミングを始めた者です。参考書は猫でもわかるWindowsプログラミングを見ながら勉強しています(難しくてあまり理解出来ていませんが)。 しかし、機能が多すぎたりと使いこなす自信がありません。 C++Builderに変えてみようかと思っているのですが、VC++とC++Builderの違いを教えて下さい。漠然としすぎていてアホっぽい質問ですが・・。 VC++とC++Builderのプログラムの書き方の大きな違いなどはあるのでしょうか? また、みっちり調べたつもりですが無償のBorlandC++Builderが見あたらないのですが・・・。

  • 「Borland C++ Builder 5」で作成したプログラムについて

    「Borland C++ Builder 5」で作成したプログラム(コンポーネント使用)を、Builderを起動せずフリーソフトのようにWindows上で実行させるにはどうすればよいのでしょうか。

  • 簡単なペイントソフトを作っているのですが・・・

    winXP、C++Builder4を使用しています。 Canvasなどを使って、マウスを押し続けているときにだけ描線が描かれるプログラムを書きました。 次に追加したいのが、ペイントソフトなどにある「消しゴム」のような機能(描かれた線を消す)なんですが、何をどう使えばいいのかわかりません。 また、消しゴム機能が出来たら、次に指定した範囲の線分を移動させる機能を作りたいと考えています。あわせて、どのようにすればいいか教えていただきたいです。 初心者のつまらない質問かもしれませんが、お知恵を拝借させてください。よろしくお願いします。

  • C++Builder初心者の勉強法

    C++Builder初心者です。 プログラムといえばVBをかじった経験しかありません。 そんな初心者がC++Builderを理解したいのですが、 C++Builderは参考書籍が少なく困っています。 VC++のものを読んでも参考になるのでしょうか? また、VC++を読んだ場合、注意点等あるでしょうか?

  • Borland C++Builder 6で初心者に参考になるサイトを教えてください。

    Borland C++Builder 6で初心者に参考になるプログラムの書き方が解るサイトを教えてください

  • C++BuilderでRandomFromのヘッダファイル

    C++BuilderでRandomFromのヘッダファイルと 使い方を教えていただけませんか ヘルプを見ても例などがのっていなく hpで調べてもヒットするものが少なく困っています よろしくお願いいたします

  • C++builder6で作成したソフトの実行

    C++builder6で作ったソフトを全く関係の無いパソコンで実行出来ないで困っています、 何か必要なファイルを添付しなければならないのでしょうか、そのファイルは幾つで その名前は何でしょうか、教えて頂ければ幸いです、宜しくお願いします。

専門家に質問してみよう