ページ 11

Print

Posted: 2006年2月14日(火) 19:10
by 脱兎
エディットボックス内のテキストを印刷するにはどうすればいいですか。

できればコードを教えてください。

ビギナーですみません。

Posted: 2006年2月15日(水) 23:38
by konisi
印刷の方法は分りませんがエディットボックス内の文字列を取得する方法なら分ります。 僕からも頼みます。印刷の方法誰か教えてください。

konishiさんへ

Posted: 2006年2月16日(木) 00:36
by ぶりっち
ありがとうございました。

あの、文字数を表示するコードでお願いがあるのですが、

MainWndのEditBox1の文字数を別のウインドウ(例 ABC)のボタンを押すとABCのEditBox1に文字数を表示するという面倒なものです。

konishiさんは今僕にとってい一番必要としている方です。

お願いです。信じています。

ソースコードをください。


●ABCとは別のウインドウのWindowハンドルのことです。



余計なことかも知れませんが、僕は3日前からCをはじめました。

Cは開発ソフトをそろえるにも高くて小遣い範囲では手が出せません。
しかし、無料でJapa、ビジュアルC、C++、C♯、インストーラー、を
開発できるソフトを見つけました。

ソフト名は、SharpDevelop です。

この情報と引き換えに教えていただければ幸いです。

Posted: 2006年2月18日(土) 10:08
by Sinryow
現在のBBSに変更されてからは印刷に関する質問はまだ出ていませんが
その前に使われていたBBSの頃には,印刷関連の質問が多数出ていました。

その当時の過去ログはここからダウンロードできます。ここから「印刷」
とかのキーワードで検索すると方法が見つかるかもしれません。(自分は
試していないのでわかりませんが)
http://dbp.cool.ne.jp/patio/patio.cgi?mode=view&no=138

Posted: 2006年2月19日(日) 23:27
by ノッチ
プリンター出力に関する質問が結構いっぱいあるので簡単なサンプルをのせます。
家にプリンターがないので実際に試してはいませんが流れとしては以下のようになります。
エラー処理等は省いています。

まずはMainWnd上にComboBoxとButtonとEditBoxを配置します。
起動するとComboBoxの中にプリンター名が列挙されます。
それを選択して、Buttonを押すとEditBoxに書かれている文字がプリントアウトされるはずです。 流れを簡単に説明すると、画面に描画したことある人にはわかりやすいと思いますが、
プリンターのDCを取得してそのDCにTextOutやFillRect、BitBlt等をする。
ただこれだけです。
たぶんうまくいかないと思うので、プリンターを持っててわかる人、フォローお願いします。

すると・・・

Posted: 2006年2月19日(日) 23:34
by konisi
A.exeのEditBox1内にあらかじめ何らかの文字列を投下
   ↓
B.exeのCommandButton1を押す
   ↓
B.exeのEditBox1に文字列を出力

といった感じでしょうか・・・
B.exeでA.exeのハンドルを100%正確に(ユーザー側の条件に影響されずに)入手するような関数はあるのかもしれませんが、分りません。
もしそれが分れば可能かもしれませんが?(ちなみに、ユーザーが作業を行っているウインドウのハンドルを取得する関数ならForegroundWindow()とかいう関数が在った様な気がしないでもないのですが・・・イグトランスさんかSinryowさんのどちらかを希望しますが、そこら辺のフォローを誰かお願いします。)

Re: すると・・・

Posted: 2006年2月20日(月) 00:17
by ノッチ
> B.exeでA.exeのハンドルを100%正確に(ユーザー側の条件に影響されずに)入手するような関数はあるのかもしれませんが、分りません。

上記のB.exeからA.exeのウィンドウハンドルを取得するのはウィンドウの
テキストが変更される場合、結構大変です。
(グローバルなメモリ領域にハンドルを格納したり、レジストリを使用したり等
もしくは、"notepad - 無題"のように必ず固定の文字列が入るなら簡単ですが)
ですのでウィンドウメッセージを登録する方が簡単(かもしれない)です。
まずは、

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Dim WM_SENDHANDLE As Long

として、MainWnd_Createに

WM_SENDHANDLE=RegisterWindowMessage("MyOriginalMessage")

のようにしてA.exeでもB.exeでもメッセージを登録すると共通のメッセージが
作成されます。
(文字列は例で、上記の文字列は他のアプリケーションとかぶる可能性があるので
自分のハンドルネームを使用したりかぶらないようにして下さい)
これを使用して、B.exeからA.exeのハンドルを知りたい時に

PostMessage(HWND_BROADCAST,WM_SENDHANDLE,hMainWnd,0)

とするとすべてのウィンドウに対してWM_SENDHANDLEが送信されます。
A.exeでWM_SENDHANDLEを受信したら逆にA.exeから

PostMessage(wParam,WM_SENDHANDLE,hMainWnd,0)

のようにしてウィンドウハンドルを送信します。
今度はB.exeでWM_SENDHANDLEを受信した時、そのwParamがウィンドウハンドル
ですのでそれをグローバル変数に保存等して下さい。

これも試していませんが、理論上はできるはずなので試してみて下さい。

Posted: 2006年2月20日(月) 08:12
by イグトランス
ところでぶりっちさんの書き方ではもしかすると2つのウィンドウは実は同じEXEの中であるという可能性も考えられます。

#深読みしすぎですか?

Posted: 2006年2月22日(水) 18:32
by konisi
>>イグトランス
> ところでぶりっちさんの書き方ではもしかすると2つのウィンドウは実は同じEXEの中であるという可能性も考えられます。


・・・確かにwwww^^;

それなら結構簡単なことになりますね。