エディットボックス内のテキストを印刷するにはどうすればいいですか。
できればコードを教えてください。
ビギナーですみません。
印刷の方法は分りませんがエディットボックス内の文字列を取得する方法なら分ります。
[ここをクリックすると内容が表示されます]
僕からも頼みます。印刷の方法誰か教えてください。EditBoxのIDがEditBox1の場合
これで、文字列変数TextにEditBox内の文字列が代入されます。
コード: 全て選択
Dim Text As String
Text=ZeroString(GetWindowTextLength(GetDlgItem(hMainWnd,EditBox1)))
GetWindowText(GetDlgItem(hMainWnd,EditBox1),Text,GetWindowTextLength(GetDlgItem(hMainWnd,EditBox1))+1)
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
konishiさんへ
ありがとうございました。
あの、文字数を表示するコードでお願いがあるのですが、
MainWndのEditBox1の文字数を別のウインドウ(例 ABC)のボタンを押すとABCのEditBox1に文字数を表示するという面倒なものです。
konishiさんは今僕にとってい一番必要としている方です。
お願いです。信じています。
ソースコードをください。
●ABCとは別のウインドウのWindowハンドルのことです。
余計なことかも知れませんが、僕は3日前からCをはじめました。
Cは開発ソフトをそろえるにも高くて小遣い範囲では手が出せません。
しかし、無料でJapa、ビジュアルC、C++、C♯、インストーラー、を
開発できるソフトを見つけました。
ソフト名は、SharpDevelop です。
この情報と引き換えに教えていただければ幸いです。
あの、文字数を表示するコードでお願いがあるのですが、
MainWndのEditBox1の文字数を別のウインドウ(例 ABC)のボタンを押すとABCのEditBox1に文字数を表示するという面倒なものです。
konishiさんは今僕にとってい一番必要としている方です。
お願いです。信じています。
ソースコードをください。
●ABCとは別のウインドウのWindowハンドルのことです。
余計なことかも知れませんが、僕は3日前からCをはじめました。
Cは開発ソフトをそろえるにも高くて小遣い範囲では手が出せません。
しかし、無料でJapa、ビジュアルC、C++、C♯、インストーラー、を
開発できるソフトを見つけました。
ソフト名は、SharpDevelop です。
この情報と引き換えに教えていただければ幸いです。
現在のBBSに変更されてからは印刷に関する質問はまだ出ていませんが
その前に使われていたBBSの頃には,印刷関連の質問が多数出ていました。
その当時の過去ログはここからダウンロードできます。ここから「印刷」
とかのキーワードで検索すると方法が見つかるかもしれません。(自分は
試していないのでわかりませんが)
http://dbp.cool.ne.jp/patio/patio.cgi?mode=view&no=138
その前に使われていたBBSの頃には,印刷関連の質問が多数出ていました。
その当時の過去ログはここからダウンロードできます。ここから「印刷」
とかのキーワードで検索すると方法が見つかるかもしれません。(自分は
試していないのでわかりませんが)
http://dbp.cool.ne.jp/patio/patio.cgi?mode=view&no=138
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
プリンター出力に関する質問が結構いっぱいあるので簡単なサンプルをのせます。
家にプリンターがないので実際に試してはいませんが流れとしては以下のようになります。
エラー処理等は省いています。
まずはMainWnd上にComboBoxとButtonとEditBoxを配置します。
起動するとComboBoxの中にプリンター名が列挙されます。
それを選択して、Buttonを押すとEditBoxに書かれている文字がプリントアウトされるはずです。
プリンターのDCを取得してそのDCにTextOutやFillRect、BitBlt等をする。
ただこれだけです。
たぶんうまくいかないと思うので、プリンターを持っててわかる人、フォローお願いします。
家にプリンターがないので実際に試してはいませんが流れとしては以下のようになります。
エラー処理等は省いています。
まずはMainWnd上にComboBoxとButtonとEditBoxを配置します。
起動するとComboBoxの中にプリンター名が列挙されます。
それを選択して、Buttonを押すとEditBoxに書かれている文字がプリントアウトされるはずです。
[ここをクリックすると内容が表示されます]
流れを簡単に説明すると、画面に描画したことある人にはわかりやすいと思いますが、コード: 全て選択
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Type PRINTER_INFO_2
pServerName As Long
pPrinterName As Long
pShareName As Long
pPortName As Long
pDriverName As Long
pComment As Long
pLocation As Long
pDevMode As Long
pSepFile As Long
pPrintProcessor As Long
pDatatype As Long
pParameters As Long
pSecurityDescriptor As Long
Attributes As Long
Priority As Long
DefaultPriority As Long
StartTime As Long
UntilTime As Long
Status As Long
cJobs As Long
AveragePPM As Long
End Type
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim hHeap As Long
Dim pHeap As Long
Dim pi2 As *PRINTER_INFO_2
Dim hCombo As HWND
Dim any As DWord
Dim count As DWord
hHeap=GetProcessHeap()
hCombo=GetDlgItem(hMainWnd,ComboBox1)
EnumPrinters(PRINTER_ENUM_LOCAL,0,2,0,0,any,count)
pHeap=HeapAlloc(hHeap,NULL,any)
pi2=pHeap
EnumPrinters(PRINTER_ENUM_LOCAL,0,2,pi2,any,any,count)
While count
SendMessage(hCombo,CB_INSERTSTRING,0,pi2->pPrinterName)
count--
pi2=pi2+Len(pi2)
Wend
HeapFree(hHeap,0,pHeap)
End Sub
Sub MainWnd_CommandButton1_Click()
Dim hHeap As Long
Dim hDC As Long
Dim doc As DOCINFO
Dim buf As Long
Dim any As Long
hHeap=GetProcessHeap()
buf=HeapAlloc(hHeap,0,1024)
SendDlgItemMessage(hMainWnd,ComboBox1,CB_GETLBTEXT,SendDlgItemMessage(hMainWnd,ComboBox1,CB_GETCURSEL,0,0),buf)
hDC=CreateDC(0,buf,0,ByVal NULL)
any=SendDlgItemMessage(hMainWnd,EditBox1,WM_GETTEXTLENGTH,0,0)
any++
HeapReAlloc(hHeap,0,buf,any)
ZeroMemory(VarPtr(doc),len(doc))
doc.cbSize=Len(doc)
doc.lpszDocName="印刷ジョブ名"
StartDoc(hDC,doc)
StartPage(hDC)
TextOut(hDC,0,0,buf,lstrlen(buf))
DeleteDC(hDC)
HeapFree(hHeap,0,buf)
End Sub
プリンターのDCを取得してそのDCにTextOutやFillRect、BitBlt等をする。
ただこれだけです。
たぶんうまくいかないと思うので、プリンターを持っててわかる人、フォローお願いします。
すると・・・
A.exeのEditBox1内にあらかじめ何らかの文字列を投下
↓
B.exeのCommandButton1を押す
↓
B.exeのEditBox1に文字列を出力
といった感じでしょうか・・・
B.exeでA.exeのハンドルを100%正確に(ユーザー側の条件に影響されずに)入手するような関数はあるのかもしれませんが、分りません。
もしそれが分れば可能かもしれませんが?(ちなみに、ユーザーが作業を行っているウインドウのハンドルを取得する関数ならForegroundWindow()とかいう関数が在った様な気がしないでもないのですが・・・イグトランスさんかSinryowさんのどちらかを希望しますが、そこら辺のフォローを誰かお願いします。)
↓
B.exeのCommandButton1を押す
↓
B.exeのEditBox1に文字列を出力
といった感じでしょうか・・・
B.exeでA.exeのハンドルを100%正確に(ユーザー側の条件に影響されずに)入手するような関数はあるのかもしれませんが、分りません。
もしそれが分れば可能かもしれませんが?(ちなみに、ユーザーが作業を行っているウインドウのハンドルを取得する関数ならForegroundWindow()とかいう関数が在った様な気がしないでもないのですが・・・イグトランスさんかSinryowさんのどちらかを希望しますが、そこら辺のフォローを誰かお願いします。)
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
Re: すると・・・
> 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がウィンドウハンドル
ですのでそれをグローバル変数に保存等して下さい。
これも試していませんが、理論上はできるはずなので試してみて下さい。
上記の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がウィンドウハンドル
ですのでそれをグローバル変数に保存等して下さい。
これも試していませんが、理論上はできるはずなので試してみて下さい。
>>イグトランス
> ところでぶりっちさんの書き方ではもしかすると2つのウィンドウは実は同じEXEの中であるという可能性も考えられます。
・・・確かにwwww^^;
それなら結構簡単なことになりますね。
> ところでぶりっちさんの書き方ではもしかすると2つのウィンドウは実は同じEXEの中であるという可能性も考えられます。
・・・確かにwwww^^;
それなら結構簡単なことになりますね。
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。
ここ以外の場所では「暇人13世」というHNを主として使用。
に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。