喫茶XRAYトップページ

[スレッド全体
]

[953] Re5:プレビューフォームをコピーして使用する方法返信 削除
2006/10/20 (金) 21:49:46 Mr.XRAY
▼ takiさん

新規プロジェクトを作成して,plPrevfrmのコピーを作成し,保存した状態
では,プロジェクトマネージャーは以下のようになりますね.

ProjectGroup1
 - Project1.exe
   Unit1.pas
     Unit1.dfm
   Unit2.pas
     Unit2.dfm   --- これがコピーしたplPrevFormA

> この時に、PLPREVFRM.pasのままで良かったのでしょうか?
名前を変更したフォームのユニットは,何もしなければUnit2.pasだと思います.
これを保存します.元のPLPREVFRMはコピーしたので使用しません(継承フォーム
を使用する時はマネージャに表示されます).

plPrevのオブジェクト・インスペクタのFormNameプロパティでリストから
plPrevFormAを選択します.


[954] Re6:プレビューフォームをコピーして使用する方法返信 削除
2006/10/20 (金) 23:15:38 taki
▼ Mr.XRAYさん

>    Unit2.pas
>      Unit2.dfm   --- これがコピーしたplPrevFormA


やり直してみました。

ファイル→新規作成→VCLフォームアプリケーションWin32
Form1(unit1)が表示される。

ファイル→新規作成→その他→項目カテゴリは操作フォーム
右ペインの「印刷プレビューフォーム」を選択して、
ラジオボタンが「コピー」であることを確認してOKボタンをクリック
すると、PLPREVFRM.pasが表示されます。
オブジェクト・インスペクタのNameプロパティはplPrevFormです。

XRAYさんの説明ではunit2になるのでしょうか。
プロジェクトに名前をつけて保存にすると、やはりPLPREVFRM.pasに
なっています。

どこで間違ったのかなぁ・・・

今日はここまでにします。


[955] Re7:プレビューフォームをコピーして使用する方法返信 削除
2006/10/21 (土) 00:12:45 Mr.XRAY
▼ takiさん

うむむ,失礼しました.Delphi7で作成したプロジェクトをD2006(D2005は今回
動作確認の対象外となっています)で開いていました(テストは全てD7のプロジ
ェクトを開いて実行しましたので...).
以下の手順でやってみて下さい.D2006で確認しました.
継承フォームだとunit2.pasとなるようです.

(1)新規Win32プロジェクト作成
(2)[ファイル][新規作成][その他]でplPrevfrmのコピー作成
(2)そのコピーのNameプロパティをplPrevfrmAとする
(3)IDEのまん中の[plPrevfrm]をクリックして,
   [ファイル][名前を付けて保存]でplPrevfrmAとする
(4)同じフォルダに[プロジェクトに名前を付けて保存]
(5)Form1にTButtonとTplPrevを配置
(6)Buttonクリックイベントを以下のコードにする.

実際にはプレビューフォームはCreateして利用した方がいいでしょう.

//usesにplPrevfrmAが必要(なければIDEが訊いてきます)
procedure TForm1.Button1Click(Sender: TObject);
begin
     plPrev1.FormName:='plPrevfrmA';
     plPrevFormA.plPrev:=plPrev1;
     plPrev1.BeginDoc;
     try
       plPrev1.TextOutRT(1000,600,'喫茶XRAY')
     finally
       plPrev1.EndDoc;
     end;
     plPrev1.ShowModal;
end;

何故かオブジェクト・インスペクタでFormNameプロパティが動作しませんね.
プロパティエディタの仕様が変更になったのかな.後で確認しておきます.
直接タイプすればOKのようです.1文字タイプする度にエラーがでますが(^_^;)

>今日はここまでにします。
お疲れ様でした.


[958] Re8:プレビューフォームをコピーして使用する方法返信 削除
2006/10/21 (土) 11:16:48 taki
▼ Mr.XRAYさん

お手数をおかけしてすみません。

> 継承フォームだとunit2.pasとなるようです.

D2005でもunit2.pasになりました。今は関係ないけど。
 
> (1)新規Win32プロジェクト作成
> (2)[ファイル][新規作成][その他]でplPrevfrmのコピー作成
> (2)そのコピーのNameプロパティをplPrevfrmAとする
> (3)IDEのまん中の[plPrevfrm]をクリックして,
>    [ファイル][名前を付けて保存]でplPrevfrmAとする


当方がD2005の為か、うまくいきません。

ファイルに名前を付けて保存しようとすると「フォームまたは
モジュールplPrevFrmAはすでにプロジェクトに登録されています」
のメッセージが出て保存できません。
ファイル名をplPrevFormA(oを追加)すると保存できますが・・・

う〜ん。やはり私が意味を理解せずに使い方だけを知ろうと
しているのが間違いなのでしょうね。(T_T)

[959] Re9:プレビューフォームをコピーして使用する方法返信 削除
2006/10/21 (土) 11:41:02 Mr.XRAY
▼ takiさん

> >    [ファイル][名前を付けて保存]でplPrevfrmAとする
>
> 当方がD2005の為か、うまくいきません。
>
> ファイルに名前を付けて保存しようとすると「フォームまたは
> モジュールplPrevFrmAはすでにプロジェクトに登録されています」
> のメッセージが出て保存できません。


D2006で新規に作成してplPrevFrmAとしたらたまたまうまくいったのでそう
書いたのですが,D5,D6,D7も同じメッセージがでます.

私の場合,添付のサンプルのをみるとわかりまが,ユニットにはほとんど
最後にUnitとつけています.
今回の場合ですと,plPrevFrmAというフォームのユニットをplPrevFrmAUnit.pas
としたらどうでしょう.

このフォーム名と同じユニット名をつけて保存できないのはDelphiの仕様です.
多分D2006から変更されたのでしょう.
またD2006以前でも,フォームの名前変更前にユニット名をつけて保存すると
同じにはできます.
おそらく多くの方がフォームに名前を付けてから保存するのではないかと思い,
添付のサンプルではそのようにしています.
takiさんのようなことにならないように.(^_^;)

# D2005は既にPCから削除してしまいましたので,確認できません.
# あしからず.

[960] Re9:プレビューフォームをコピーして使用する方法返信 削除
2006/10/21 (土) 13:49:08 Mr.XRAY
▼ takiさん

> う〜ん。やはり私が意味を理解せずに使い方だけを知ろうと

プレビューフォームだからと言って特別なことはありません.
普通のFormをコピーして使用するのと同じです.
名前をつけて保存も,そのFormに別の名前をつけて,もちろんユニット名も
変更して保存するのと同じです.
(FormのNameプロパティだけの変更ではユニットのコピーにはなりません)


[961] Re10:プレビューフォームをコピーして使用する方法返信 削除
2006/10/21 (土) 14:32:57 taki
▼ Mr.XRAYさん

できました。

コピーで作成したフォームにボタンを付けて既存のボタンのイベントの
コードを貼り付けたら、ページの変更もできました。

ありがとうございます。

今、気が付いたのですが、PLPREVFRMとplPrevとは違うものだったの
ですよね。(当たり前!)

何かその辺が混乱してしまっていたようです。(^_^;)

最後に(・・・になったら良いのですが)、実際はプレビューフォームを
Createして利用した方がいい の理由を教えてください。

よろしくおねがいします。

[962] Re11:プレビューフォームをコピーして使用する方法返信 削除
2006/10/21 (土) 14:50:40 Mr.XRAY
▼ takiさん

>今、気が付いたのですが、PLPREVFRMとplPrevとは違うものだったの
>ですよね。(当たり前!)


印刷プレビュー制御そのものはTplPrevです.TplPrevは基本的には,印刷コ
ードを0.1mm単位で書くためのCanvasを提供しています.
でもそれだけでは,プレビュー画面を利用者が作成しなければなりません.

そこでプレビューフォームのTplPrevfrmも提供しているわけです.
そうすれば,DLした方が簡単な印刷コードを書くことにより,実際のその
印刷プレビューをすぐに見ることができます.
いやなら,プレビューフォームの提供をやめますけど... (^_^)

今回のTakiさんの場合,プレビューフォームを自分で別に用意したことに
なります.いまのところ私が作成したもののコピーですが.

> 最後に(・・・になったら良いのですが)、実際はプレビューフォームを
> Createして利用した方がいい の理由を教えてください。


オブジェクトは必要になったら生成して,必要なくなったら解放する,という
使い方がいいのではないかということです.
そうすればリソースの節約にもなります.
使用しないオブジェクトがあれば,その分メモリを使用しますからね.

ex.
  AForm:=TForm.Create(Sefl);
  try
    if AForm.ShowModal then begin
      //
    end;
  finally
    FreeAndNil(AForm); //ここでAFormが使用していた分のメモリが使える
  end;

[963] Re12:プレビューフォームをコピーして使用する方法返信 削除
2006/10/21 (土) 16:21:55 taki
▼ Mr.XRAYさん

> いやなら,プレビューフォームの提供をやめますけど... (^_^)

いえいえ 末永くご提供を・・・。

> オブジェクトは必要になったら生成して,必要なくなったら解放する,という
> 使い方がいいのではないかということです.
> そうすればリソースの節約にもなります.


うん!? なにやら、以前にも同じような質問をしたような気がします。

以前の内容をもう一度読み直します。
ありがとうございました。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82