喫茶XRAYトップページ

[スレッド全体
]

[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