前のログ | 次のログ |
No.800 RE:リソースが食われる! 投稿者:たくボン [99/11/12(金)5:44分]
久しぶりの書き込みです。
リソースの件ですが、コードが無いためはっきりとは言えませんが、
フォームをバックグラウンドで起動した場合と、Sub Mainのみで
起動した場合で、IME等のクラスの呼び出しに若干違いがあるようです。
VBFocusRT6
msime97main
VBMsoStdCompMgr
VBBubbleRT6
のクラスがフォームモジュールから起動した場合に付加されるクラスです。
(私の環境はVB6+NT4.0SP5です。)
また、CreateProcessの引数ですが、第一引数のlpszImageNameにパス、
第二引数のlpszCommandLineに、モジュール名+引数が一番信頼性の
ある呼び出し方法です。
以下に、api32wh.hlpの注釈を記載しておきます。
--------------------------------------------------------------
作成すべきプロセスがMS-DOSやWindowsベースのアプリケーションである
場合は、 lpszCommandLineに完全なコマンドラインを指定し、 その最初の
要素にアプリケーション名を指定してください。
この方法はWin32ベースのアプリケーションでも正常に動作するので、
lpszCommandLineを設定する上で最も信頼性の高い方法です。
--------------------------------------------------------------
No.799 ActiveXコントロールについて・・・ 投稿者:えらりい [99/11/10(水)18:55分]
はじめまして、VBを始めたばかりのえらりいといいます。
VB5CCEでActiveXコントロールを作成し、Formを追加しての動作チェックは問題ないと思うのですが、
OCXファイルを作成し、Control Padを使ってInsertActiveX〜を選んで貼り付けても何も 表示されません。
他のActiveXコントロールだとうまくいくのですが、今回作ったコントロールに限ってHTMLに 組み込めません。
組み込み後に出てくるプロパティも4種類くらいしかなく、
内には空白ができるだけです。
原因がさっぱりわからないです。どなたかこのような状態になる問題、解決法(?)を
教えてください。お願いします。
No.798 リソースが食われる! 投稿者:ちゃっぱ [99/11/05(金)16:06分]
いつも興味深く拝読させていただいております。
Win95&VB4.0からコマンドラインを利用して
DOSの送信専用のメールソフトを自動実行するというプログラムを作っています。
メールソフトを起動するのにCreateProcessAPIを使っているのですが
多数のメール(200通ぐらい)を一気に送ろうとして下のプログラムを実行して
リソースメーターでシステムリソースを監視していると
時間の経過とともにシステムリソースとユーザーリソースが徐々に食われていき、
しまいには
「システムリソースが不足しています」というメッセージが出てきてしまって
CPUの使用率が100%になったまま、処理を完了することができなくなってしまいます。
これはCreateProcessAPIの使い方(引数等の指定)が正しくないのでしょうか?
ちなみにメールソフトをバッチで動かして多数のメールを送ってみたのですが
その場合はリソースは全然食われませんでした。
また、同じプログラムでダミーのGUIプログラム(フォームをロードしてSleepで3秒待った後で
フォームをアンロードするプログラム)
を起動して終了するまで待ってみたところ
(これも200回ぐらいループさせてみました。)
リソースは全然食われませんでした。
この現象はCreateProcessの呼び出し方が悪いために起こるのでしょうか?
No.797 みゃおさん、ありがとうございました 投稿者:TT [99/11/04(木)22:40分]
みゃおさん、助かりました、TTです。
本当に初歩的なことなんでしょうが、
いろいろ調べたのですが、複雑に説明されてて、
どうつなぐのかが解りませんでした。
”,”でつないだらいいんですね。
ありがとうございました。
No.796 Re:変数の保存について 投稿者:みゃお [99/11/04(木)15:44分]
Write #FileNumber, a, b で書き込んだものを
Input #FileNumber, a, b で読み込めばいいだけでは?
No.795 RE:コマンドラインについて 投稿者:タカ [99/11/04(木)14:26分]
ここのHPの「他のプロセスとの連携」の1番目にある「他の実行形式(*.EXE)ファイルの実行」を
参考にされては?
ちなみに、
>例:sell "C:\Program Files\Microsoft Office\Office\Msaccess.exe
> C:Program Files\abc.mdb"
「shell」の書き間違いですよね???
No.794 MSFlexGridの印刷方法 投稿者:penguin [99/11/04(木)10:06分]
WindowsNT4.0とWindows98でVB6.0(SP3)を使っています。
MSFlexGridを使って、PrintFormで印刷したところ印刷さ
れた紙は真っ黒になってしまい、肝心のデータの部分が分
かりません。
画面には、きちんとデータが表示されているのになぜ、印
刷をすると黒くなってしまうのでしょうか?
正しく印刷するにはどのようにしたら良いのでしょうか。
No.794 JPEGプレビュー付きダイアログボックス 投稿者:ハッチ [99/11/04(木)10:02分]
ファイル選択のダイアログボックスを、JPEGをプレビューしながら ファイル選択できるようにする方法をご存じないでしょうか?
No.793 コマンドラインについて 投稿者:DS [99/11/04(木)0:32分]
こんにちわDSです。
VB5.0からコマンドラインを使用してACCESS97をファイル名を指定して
起動させようとしているのですが、パスの途中に「Program Files」のように途中に
スペースがあると「Program」を「Program.mdb」と認識してしまい、スペースの
後の「Files」を引数として認識されてします。「Program Files」を一つの名前として
認識させる事はできないでしょうか。
例:sell "C:\Program Files\Microsoft Office\Office\Msaccess.exe
C:Program Files\abc.mdb"
No.792 変数の保存について 投稿者:TT [99/11/03(水)23:24分]
みなさんはじめまして、超初心者です。
1つ変数を1つのテキストファイルに保存しているのですが、
複数の変数を1つのテキストファイルに保存し呼び出す方法がわかりません。
どなたか、教えて頂けないでしょうか?
No.791 MSFlexGridのデータ入力時のマスク利用 投稿者:あん [99/11/03(水)22:22分]
はじめまして。
逆引きヘルプのMSFlexGridのデータ入力を参考にさせて戴いてタイムカード入力を作っています。
時間の入力に定型入力をしたいのですが、テキストボックスの代わりにマスクエディットボックスを 利用すると単に置き換えているだけのためかエラーがでます。マスクエディットボックスで、 グリッドに入力する方法はあるのでしょうか。
No.790 コマンドボタンが連打(お礼) 投稿者:タカ [99/11/02(火)9:31分]
「今回匿名」さん、いろいろと教えていただきありがとうございました。
(勉強不足ですいませんでした。もうちょっとちゃんと、勉強しないとだめですね...)
結局、最初に教えていただいたキーおよびマウス操作の削除処理を行うという方向で、 いってみようと思います。
(問題の処理はメニュー画面からshell関数によって他の業務画面を起動しており、 shell関数で起動した画面の終了を待つことはあまりやりたくなかったので... 「他のプログラムの終了をまつ」のは今後の参考にさせて頂きます!!!)
これでなんとか解決できそうです。ず〜っっと悩んでいたので、本当に助かりました。感謝!!
No.789 プログラマ探しております 投稿者:ミレニアム [99/11/02(火)0:58分]
見当違いの書き込みでありましたら申し訳ありません。
VBを用いたプログラミングサークルを結成しております。
基本はゲームではなくビジネスアプリが中心であります。
ゲーム系のサークルはよく見かけますが、ビジネスアプリというのはあまり見かけません。
プログラムの難易度、困難性からポイントが決められており、開発後はシェアウェア等で
販売しポイントに応じた配当を受け取るという仕組みであります。
(総売上の60パーセントを各ポイントに応じて配分する方式です)
空いた時間を利用して、みんなで楽しくプログラミングしてみませんか。
仕様書の作成段階から参加していただく方式で、アイディアを出し合ってより良いアプリ
ケーションを作成しましょう。
興味がありましたらメールにて氏名、年齢、メールアドレス、得意なプログラミング、その他
を明記して返信お願いいたします。
現在プログラム開発はプログラマにとって良い環境とは思われません。
売上の良いプログラムに対してプログラマは相応の収入を確保すべきであり、そうしなければ
プログラム開発中にも熱意を失ってしまうと考えられます。
これまでと違った開発方法で、より良いアプリ構築に頑張りましょう。
見当違いの書き込みでありましたら本当に申し訳ありませんでした。
No.788 郵便番号7桁辞書 投稿者:FT [99/11/02(火)0:38分]
というものが確か窓98に辞書ファイルとして
ついているはずですが、これを利用してVBのフォームから
7桁数字を入れたら住所を表示したいのですけど、、。
API関数があるのでしょうか?
No.787 RE:コマンドボタンが連打(もう一度だけ、お願いします!)投稿者:今回匿名 [99/11/01(月)20:52分]
ソースがないので想像ですが、連打する前に処理が終了していると思われます。
MSDNで、shell関数を調べると、
「Shell 関数はプログラムを非同期的に実行します。したがって、Shell 関数を使用して実行
を開始したプログラムが終了しなくても、Shell 関数の次のステートメントは実行されます。」
ということで、ここのHPの「他のプログラムの終了をまつには」を使用されては?
No.786 コマンドボタンが連打(もう一度だけ、お願いします!) 投稿者:タカ [99/11/01(月)19:32分]
「今回匿名」さん、ありがとうございます。
Command1.Enabled = Falseの間に発生したキー操作が削除されるということなんですね。
しくみがわかったところで、教えていただいたサンプルコードを参考にテストプログラムを、 作ってみました。
test1→test2を呼び出すコマンドボタンCommand1と、 キーおよびマウス操作削除のサンプルコードを貼り付け
・Clickイベントにshell関数でtest2を起動するコードを記述
・Mouserupイベントに、サンプルのコードを貼り付け
test2→test1のコマンドボタンをクリックした時に起動。(FORMを表示するのみ)
ところが...テストのために、test1のコマンドボタンをマウスで連打してみましたが、 直接マウス連打するとtest2が複数画面起動してしまって... じつは全然理解していないのかも...ボタンの処理はもっと時間がかかるもので
ないといけないということなんでしょうか???それとも、考え方が根本的に 間違っているのでしょうか...
本当に申し訳ありませんが、できればもう一度だけ教えていただけないでしょうか。
どうぞ、よろしくお願い致します。
No.785 RE:コマンドボタンが連打されてしまいます(お礼と追加質問)投稿者:今回匿名 [99/11/01(月)18:15分]
>でも、MouseUpイベントにPeekMessage関数を記述することで、何故連打が
>防止できるのでしょうか? Clickイベントが先に発生して処理が走って
>しまうような気がして、どういうしくみで連打を防止できるのか理解でき
>てません。
Me.Enabled=Falseの間に押されたマウスやENTERキーのメッセージは、メッセーキュー
に残り、処理が終わる(Me.Enabled=True)のを待って再び同じ処理を開始します。(これが連打)
マウスイベントはメッセージにより、Mouse_Down->Mouse_Click->Mouse_Upの順に発生
しますので、Mouse_Upイベントは処理が終わる(Me.Enabled=True)まで待つことになります。
従って、Mouse_Upイベントプロシージャで残ったメッセージを削除してしまえば次のClick
イベントは発生しないと思います。
Mouse_UpイベントプロシージャにPeekMessage()を書きたくないなら、Clickイベント
プロシージャのMe.Enabled=Trueの後に書いても同じだと思います。
No.784 コマンドボタンが連打されてしまいます(お礼と追加質問) 投稿者:タカ [99/11/01(月)13:53分]
「今回匿名」さん、ありがとうございます。
でも、MouseUpイベントにPeekMessage関数を記述することで、何故連打が
防止できるのでしょうか? Clickイベントが先に発生して処理が走って
しまうような気がして、どういうしくみで連打を防止できるのか理解でき
てません。(だめな私...)
申し訳ありませんが、できれば連打を防止できるしくみをもう少し教えて
いただけませんでしょうか?
どうぞよろしくお願いします!!!
No.783 シリアル通信関連サンプル 投稿者:やんやん [99/11/01(月)11:13分]
始めまして。シリアル通信関連のサンプルソースコードについて
どうも見つかりませんので、御存知の方はぜひ教えていただきたいと思います。
よろしくお願いいたします。
NO.782 RE:コマンドボタンが連打されてしまいます 投稿者:今回匿名 [99/10/31(日)23:32分]
連打していないのに、連打が発生ということなので基本的な解決にはならないと思いますが、
マウスやENTERキー等の連打により、メッセージキューに残った未処理のマウスとキーボード
のメッセージを読み飛ばしてしまう方法でも防止できると思います。
とりあえず、以下のサンプルを試してみて下さい。
Option Explicit
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Type MSG
hwnd As Long
message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End Type
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" _
(lpMsg As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, _
ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Const WM_KEYFIRST = &H100
Private Const WM_KEYLAST = &H108
Private Const WM_MOUSEFIRST = &H200
Private Const WM_MOUSELAST = &H209
Private Const PM_REMOVE = &H1
Private Sub Command1_Click()
Me.Enabled = False
・・・・・・・
'処理
・・・・・・・
Me.Enabled = True
End Sub
Private Sub Command1_MouseUp(Button As Integer, _ Shift As Integer, X As Single, Y As Single)
Dim tMSG As MSG
Dim lngRet As Long
Do
lngRet = PeekMessage(tMSG, Form1.hwnd, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)
Loop Until lngRet = 0
Do
lngRet = PeekMessage(tMSG, Form1.hwnd, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE)
Loop Until lngRet = 0
End Sub
No.781 コマンドボタンが連打されてしまいます 投稿者:タカ [99/10/26(火)11:06分]
はじめまして。
開発環境 VB5.0(SP3)+Win95で開発しているのですが、
コマンドボタンが自動的に連打される状況が発生して困っています。
マウス、ENTERキー押下等の操作はしていないのに、 問題のコマンドボタンを貼り付けてある画面を終了するまで、
延々コマンドボタンのCLICKイベントに記述されている動作が繰り返されてしまいます。
いくつか画面を立ち上げた後に発生するのですが、毎回発生する現象ではなく、 発生する状況も確定できていません。
どのへんを探ればいいのかもさっぱり見当がつかなくてもう3ケ月くらい悩んでいます。
解決方法もしくは解決の糸口でも結構ですので教えていただければありがたいのですが...
どうぞよろしくお願いします。
No.780 RE:ピクチャーボックスのScaleXXXについて 投稿者:おききん [99/10/24(日)0:41分]
>のですが、ピクチャーボックス自体はリサイズされているのに
>ScaleWidth/ScaleHeightの値が変わっていない様なのです。
うーん、そんな事ないけどな・・・・
ちなみに私が試したソースは
Picture1.ScaleMode = vbPixels
Picture1.AutoSize = True
MsgBox (Picture1.ScaleWidth & " " & Picture1.ScaleHeight)
Picture1.Picture = LoadPicture("c:\無題.bmp")
MsgBox (Picture1.ScaleWidth & " " & Picture1.ScaleHeight)
です、autoredrowもfalseにしてもtrueにしてもちゃんと出ましたが・・・
もしそれでも駄目ならrefreshしても駄目ですかね?
それが駄目ならサービスパックを当ててみるとかどうでしょうか。
では
No.779 ピクチャーボックスのScaleXXXについて 投稿者:くも [99/10/23(土)23:43分]
ピクチャーボックスのプロパティで、AutoSize を True にして、
picture1.picture = LoadPicture("aaa.bmp")
などとして、画像をロードした際にそのピクチャーボックスの
ScaleWidth/ScaleHeightを取得してサイズを取ろうとしている
のですが、ピクチャーボックス自体はリサイズされているのに
ScaleWidth/ScaleHeightの値が変わっていない様なのです。
デバッグすると値が変更されているみたいなんですけど・・・
あちこち見てまわったんですが、解らずじまいで・・
こんな現象について何か回避方法など知っている方、
教えていただけないでしょうか?
よろしくお願いします。
No.778 アクティブレポートについて 投稿者:NORI [99/10/23(土)18:48分]
こんばんわ
アクティブレポートのフォントの使用について教えていただきたいんですけど・・・
プリンターフォントのROMANを使用したいのですが、フォントの種類の中に含まれていません。
アクティブレポートでは使用できないのですか?
分かる方がおられたら教えてください
No.777 コモンダイアログの表示位置 投稿者:ジョーカー [99/10/23(土)14:06分]
コモンダイアログで、開かせたい画面(例:CommonDialog1.ShowPrinter)の表示位置を
自分で設定できないでしょうか?(たとえば、右上とか)
できれば、APIを使わずに。
No.776 Flexgridコントロールについて質問があります。 投稿者:よしくん [99/10/23(土)11:08分]
どうもはじめまして。m(__)m
MsflexgridコントロールとComboBoxコントロールを使用したときの場合に質問があります。
まず、環境はWindows98(セカンドエディション)+VB6(SP3)+IME98の状態です。
(これから書く現象はSP3が入っていなくてもなります。)
Excelのワークシートと同じような物を作っております。
MsflexgridコントロールのKeydownイベントが起きるとコンボボックス
のVisible=Trueにしてコンボボックス.Setfocusをします。
そして、テキスト入力はコンボボックス上で処理をします。
この時ですが、FEPがOFFの状態はそのままコンボボックス上で
キー入力ができますが、FEPON状態でコンボボックスのvisibleを
Trueにし、フォーカスを移動すると、キー入力の表示がされません。
フォーカスを移動しなければフローティングウィンドウが出て入力状態が
できますが・・・・。できればこのようなことはしたくあり
ません。フォーカスが移動して入力が確定された後のFEPONでの
入力はコンボボックス上で行えます。
誰か、回避する方法をお知りの方はお返事お願い致します。
尚、この現象はWin98のセカンドエディションで出ました。製品版
の初期のWin98では起きません。
長々、書いてすみませんでした m(__)m
No.775 ”イベントの連鎖”回避方法を教えて下さい 投稿者:バリアフリー [99/10/22(金)17:53分]
環境:Windows98+VB5+Excel2000
ヘルプからすると“イベントの連鎖”だと思います、Flagをたてるetcと 有りますが回避する方法を教えてください。
(アプリケーション概略)
・FormにOLEコンテナー,スクロールバー,コマンドボタンを配置する。
・データファイルのレコード番号とスクロールバーを同期させる。
・スクロールバーの値を取得しファイルからデータを読み込み、 そのデータによりExcelのGraphシートにグラフを描く。
・グラフをFormのOLEコントロールにコピー,ペーストする。
スクロールバーをクリックすると“イベントの連鎖”が起こります。
Private Sub Form_Load()
OLE1.Visible = False
sIndex = 0
eIndex = mTotalRows& - 1
VScroll1.Min = sIndex
VScroll1.Max = eIndex
VScroll1.LargeChange = 1
VScroll1.SmallChange = 1
VScroll1.Value = sIndex
IJ = VScroll1.Value
EXOpen Excelを起動する
OUDAN_YOMI ファイルからIJ番レコードのデータを読み込む
ZU_HYOJI Excelプロット データ セルにデータを出力、
OLE1.Visible = True
Command1.Enabled = True
Form11.Label1.Caption = ""
End Sub
Private Sub VScroll1_Change()
IJ = VScroll1.Value
Command1.Enabled = False
OUDAN_YOMI
ZU_HYOJI
Command1.Enabled = True
Form11.Label1.Caption = WW
End Sub
No.774 お礼:Wクリックで実行させたいのですが。 投稿者:るる [99/10/21(木)18:49分]
おききんさん、お返事どうもありがとうございました。
コマンドボタンでは、無理だったんですね・・。
ラベル等で工夫しながら作成します。
どうもありがとうございました!
No.773 RE;Wクリックで実行させたいのですが 投稿者:おききん [99/10/21(木)1:42分]
>>クリックではなく、Wクリックで実行させたいのです。
どうやらコマンドボタンにはダブルクリックのイベントは無いみたいですね。
そもそもコマンドボタンのコンポーネントはダブルクリックやってるのは見たことないですが・・
ラベルとかならダブルクリックのイベントあるのでそれにしてみてはどうでしょうか。
但し、ボタンそっくりに形を作るのは難しい(無理?)と思うけど。
それかクリックイベントのところで1回目押した時と二回目押したときのタイムが1秒以内なら
処理を行うっていうようにやれば擬似ダブルクリックを検出できると思います。
No.772 Wクリックで実行させたいのですが。 投稿者:るる [99/10/20(水)17:27分]
初めて書きます。緊張しています。
下記の様に命令するのですが、
クリックではなく、Wクリックで実行させたいのです。
超超初心者なのでわかりやすく説明して頂きたいのですが・・。
どうぞ宜しくお願い致します。
Private Sub Com1_Click()
command1.caption = a
End Sub
No.771 Re:VBからEXCELファイルをCSVにて保存する 投稿者:ひろ [99/10/20(水)16:33分]
みゃおさん、さっそくのレスありがとうございました。
おかげさまで上手くいきました!
年甲斐もなく、頭に血が上ってしまっていたようです。
もう少し、冷静にならなければ・・・
NO.770 Re:VBからEXCELファイルをCSVにて保存する 投稿者:みゃお [99/10/20(水)15:14分]
VBからでも同様に引数を付けられます。参照設定はしてますよね?
案ずるより産むが安し。(漢字これでいいのかなぁ)
No.769 VBからEXCELファイルをCSVにて保存する方法 投稿者:ひろ [99/10/20(水)11:38分]
はじめまして、VB初心者のものです。
VBからEXCELを起動し、CSV形式にて保存して終了するという
単純な動きなのですが、もうすでに3日程、悩んでいます。
filename1 = "sc.xls"
filename2 = "sc.csv"
Set xlapp = GetObject(, "Excel.Application")
Set xlbook = xlapp.Workbooks.Open("" & filename1 & "")
'xlapp.Visible = True
xlbook.SaveAs ("" & filename2 & "")
~~~~~~
VBのヘルプでは「SaveAs」の引数はファイル名のみのようですが
VBAではファイルフォーマットなど様々な引数をつけれるようです。
同様のことをVBからコントロールするには、どのようにすればようのでしょう?
複数の種類の違うシートを、バッチ的に処理したいので、できれば
CSVに変換する部分はEXCELに任せてしまいたいのですが・・。
どうぞよろしくお願いいたします。
No.768 ActiveX?? 投稿者:匿名 [99/10/19(火)19:28分]
以前VB5で作っていたプログラムを、VB6をインストールしたPCでリコンパイルし直し、 それを別のPCで動かしてみたら動かなくなってしまいました。
エラーメッセージは「error no [ 429] ActiveXコンポーネントはオブジェクトを 作成できません。」の後続けて「error no [ 91] オブジェクト変数または Withブロック変数が設定されていません。」とでます。
SQLサーバー接続時にでているみたいです。
このエラーを回避するにはどうしたらよいのでしょうか?
No.767 RE:EXCELのデータをVBで検索 投稿者:おききん [99/10/19(火)10:33分]
エクセルのデータをDAOでアクセスした事は無いですが、的外れかもしれないけど(^^;
もしかしたらエクセルの場合は表名の最後に'$'を付けるのが正しいかもしれないけど、 外して試してみてはどうでしょうか
>sqlStr= "select * from Lterm$ WHERE lTERM上7桁 = '" & 端末一覧.DBCboTblLterm.Text & "'"
sqlStr = "select * from Lterm WHERE lTERM上7桁 = '" & 端末一覧.DBCboTblLterm.Text & "'"
ちょっと気になったので老婆心ならが書き込みしてしまいました。
では
No.766 Re:固定長ファイルの扱い方について 投稿者:ゆう(U) [99/10/18(月)21:09分]
ここの教室などでも紹介されていますが・・・
ユーザー定義型(Type)と固定長文字列変数を使えば簡単です。
※ちょっと注意が要りますが・・・
No.765 RE:レジストリ的な説明 投稿者:おききん [99/10/18(月)16:36分]
ども、おききんです。
VBにもレジストリ操作する関数あるけど(GetSetting等)これは
HKEY_CURRENT_USER\Software\VB and VBA Program Settings以降の階層じゃないと 操作出来ないみたいですね。
そういう場合はWIN32 APIを使ってレジストリを操作した方がいいと思います。
値の形式によって値を取得する方法が違うみたいなので、DWORD形式と 文字列形式の値を取得する方法を作りました。
ソースは以下の通りです。
'------------------------ ここから ------------------------
Option Explicit
'レジストリ共通キー(親キー)
Private Const HKEY_CLASSES_ROOT = &H80000000 'HKEY_LOCAL_MACHINEの一部
Private Const HKEY_CURRENT_CONFIG = &H80000005 'ルートのHKEY_LOCAL_MACHINEのconfig
'構成に関するdisplayサブキーのリンク
Private Const HKEY_CURRENT_USER = &H80000001 '現在のユーザーの設定に対するHKEY_USERのリンク
Private Const HKEY_DYN_DATA = &H80000006 'EnumサブキーとPerfStatsサブキー
Private Const HKEY_LOCAL_MACHINE = &H80000002 'ハードウェア構成、ネットワークプロトコル、
Private Const HKEY_USERS = &H80000003 'ユーザーの作業環境設定とデスクトップの設定
'???
Private Const HKEY_PERFORMANCE_DATA = &H80000004
'レジストリのデータタイプ
Private Const REG_NONE = 0 '未定義のタイプ
Private Const REG_SZ = 1 'NULLで終わる文字列
Private Const REG_EXPAND_SZ = 2 '展開前の環境変数
Private Const REG_BINARY = 3 '任意の形式のバイナリデータ
Private Const REG_DWORD = 4 'ネイティブ形式の32ビット値
Private Const REG_DWORD_LITTLE_ENDIAN = 4 'リトルエンディアン形式の32ビット値
Private Const REG_DWORD_BIG_ENDIAN = 5 'ビッグエンディアン形式の32ビット値
Private Const REG_LINK = 6 '別のサブキーへのシンボリックリンク
Private Const REG_MULTI_SZ = 7 'NULLで終わる文字列のリスト
'キーアクセスオプションを定義する為に必要
Private Const SYNCHRONIZE = &H100000
Private Const READ_CONTROL = &H20000
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Private Const STANDARD_RIGHTS_ALL = &H1F0000
'キーアクセスオプション
Private Const KEY_CREATE_LINK = &H20 '他のサブキーへのシンボリックリンクの作成を許可
Private Const KEY_CREATE_SUB_KEY = &H4 'サブキーの作成を許可
Private Const KEY_ENUMERATE_SUB_KEYS = &H8 'サブキーの列挙を許可
Private Const KEY_NOTIFY = &H10 '変更通知を有効にする(WIN95は未対応)
Private Const KEY_QUERY_VALUE = &H1 'サブキーの値の参照を許可
Private Const KEY_SET_VALUE = &H2 'サブキーの書き込みを許可
'KEY_CREATE_SUB_KEY + KEY_SET_VALUE
Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or _ KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
'KEY_EXECUTE + KEY_NOTIFY
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or _ KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
'KEY_CREATE_LINK + KEY_READ + KEY_WRITE
Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or _ KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or _ KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
'KEY_READ
Private Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
'レジストリAPI
'レジストリのサブキーのオープン
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _ (ByVal hKey As Long, ByVal lpSubKey As String, _ ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
'レジストリのサブキーのクローズ
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
'サブキーの指定の値の取得
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _ (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _ lpType As Long, lpData As Any, lpcbData As Long) As Long
'戻り値
Private Const ERROR_SUCCESS = 0& 'エラー無し
Private Sub Form_Load()
Dim hKeyResult As Long 'キーハンドル
Dim SubKey As String 'サブキー
Dim Value As String '値の名前
Dim lngAnswer As Long '値(DWORDの値用)
Dim strAnswer As String * 50 '値(文字列の値用)
Dim Size As Long '値のサイズ
Dim ret As Long '戻り値
'----------------------------------
'オープンするサブキーの設定
SubKey = "Software\Microsoft\Windows\CurrentVersion\internet Settings"
'レジストリのサブキーのオープン(読み込みのみ)
ret = RegOpenKeyEx(HKEY_CURRENT_USER, SubKey, 0, KEY_READ, hKeyResult)
If ret <> ERROR_SUCCESS Then
MsgBox "エラーコード : " & ret, vbOKOnly, "サブキーのオープン"
Exit Sub
End If
'----------------------------------
'取得する値の名前
Value = "GlobalUserOffline"
'取得する値のサイズを設定
Size = Len(lngAnswer)
'サブキーの指定の値を取得(取得する値はDWORD形式)
ret = RegQueryValueEx(hKeyResult, Value, 0, REG_DWORD, lngAnswer, Size)
If ret <> ERROR_SUCCESS Then
MsgBox "エラーコード : " & ret, vbOKOnly, "値の取得"
Exit Sub
End If
MsgBox "GlobalUserOffline = " & lngAnswer, vbOKOnly, "値の内容 その1"
'取得する値の名前
Value = "User Agent"
'取得する値のサイズを設定
Size = Len(strAnswer)
'サブキーの指定の値を取得(取得する値は文字列形式)
ret = RegQueryValueEx(hKeyResult, Value, 0, REG_SZ, ByVal strAnswer, Size)
If ret <> ERROR_SUCCESS Then
MsgBox "エラーコード : " & ret, vbOKOnly, "値の取得"
Exit Sub
End If
MsgBox "User Agent = " & strAnswer, vbOKOnly, "値の内容 その2"
'----------------------------------
'サブキーのクローズ
ret = RegCloseKey(hKeyResult)
If ret <> ERROR_SUCCESS Then
MsgBox "エラーコード : " & ret, vbOKOnly, "サブキーのクローズ"
Exit Sub
End If
End Sub
'------------------------ ここまで ------------------------
ではでは
No.764 固定長ファイルの扱い方について 投稿者:匿名 [99/10/18(月)0:07分]
初めまして。
固定長ファイルの中の半角カナと漢字の処理の仕方がわからなくて、
大変悩んでおります。よいアドバイスをお願いいたします。
VB5を使用しております。
元のデータ バイト数(5,10,3,5,3,2)
12345アイウエオ 123 5 300
54321富士山 321 5 311
33333柿クケコ 456 5 322
変換後のデータ バイト数(5,10,3,5,3,2)
12345アイウエオ 1230000500300
54321富士山 3210000500311
33333柿クケコ 4560000500322
MID関数を使って処理を行うと、半角カナは問題なく処理できるのですが、
漢字の部分がうまく処理できません。
Open file For Input As #1
Line Input #1,Data
D1 = Left(Data,5)
D2 = Mid(Data,6,10)
D3 = Mid(Data,11,3)
D4 = Mid(Data,16,5)
・
・
処理上の問題と、アドバイスをお願いいたします。
No.763 レジストリ的な質問っす 投稿者:すたっばぁ [99/10/16(土)20:28分]
HKEY_CURRNET_USER\Softwere\Microsoft\Windows\CurrentVersion\internetSettings
のなかの
GlobalUserOffline
のデータのとり方誰か教えてくださいませ。
(インターネットの回線がオンラインかオフラインかを知りたいっす。
ソフト作成ちゅうです。作成に詰まったからおしえてってこと。)
ほかのやり方有ったらおしえてくだ。
No.762 MSFlexグリッドの列を非表示に 投稿者:カフェ [99/10/13(水)21:49分]
Oracleから抜いてきたデータをフレックスグリッド表示しているんですが、
印刷時のみの項目があり、その列は非表示にしたいのです。
列幅を0に設定する以外の方法を探しています。
ご存知の方はメールをいただけませんか。
よろしくお願いします。
No.761 EXCELのデータをVBで検索 投稿者:匿名 [99/10/13(水)17:29分]
はじめまして。
VBは、初心者で、いろいろと本で調べたのですがわからないので
教えて下さい。
ある検索条件に一致したレコードをVBで表示したいのですが、FROM句の構文エラーとなります。
どうしてでしょう。
EXCELのファイル名は Lterm.xls
EXCELのシート名は Lterm
Private Sub Command2_Click()
sqlStr = "select * from Lterm$ WHERE lTERM上7桁 = '" & _ 端末一覧.DBCboTblLterm.Text & "'"
Set ObjDb = OpenDatabase _
("C:\program Files\開発\Lterm.xls", _
False, False, "Excel 8.0;")
Set ObJtb1 = ObjDb.OpenRecordset(sqlStr)
Set DatTblLterm.Recordset = ObJtb1
End Sub
No.760 ラベルコントロール 投稿者:匿名 [99/10/13(水)17:20分]
簡単な質問かもしれませんが・・・
ラベルコントロールをプログラム上でタブコントロールにロード
した場合、どうしても目で確認できません。
ラベルコントロールがラブコントロールの上位にくることはできないのですか?
コンテナーは指定しています。
No.759 re:構造体の宣言 投稿者:あう゛っ! [99/10/08(金)19:17分]
>あう゛っ! さんどうもありがとうございました。
>ばっちりでした。
>そしてまたまた申し訳ないのですが、質問させて頂きます。。
>
>1つのプロシージャ内で構造体を作成しコンパイルすると、
>「固定長文字列型や静的変数のデータの大きさは64KBを越える事ができません」
>というエラーがでます。つまり大きさに制限があり、定義できないということですか?
>basを変えてもだめでした。何か回避策はないでしょうか??至急教えて頂けると嬉しいです!
こ、これは僕の不得意なところです。ゴメンナサイ。
ただ、私が個人的に思うには、そんなに大きな構造体を作るという時点で、
問題がある様な気もします。
まずは、データ構造の見直しをおこなってみては、いかがでしょうか?
こんな回答ですいません。m(__)m
No.758 構造体のサイズ 投稿者:トム [99/10/08(金)15:55分]
1つのプロシージャ内で構造体を作成しコンパイルすると、
「固定長文字列型や静的変数のデータの大きさは64KBを越える事ができません」
というエラーがでます。つまり大きさに制限があり、定義できないということですか?
basを変えてもだめでした。何か回避策はないでしょうか??至急教えて頂けると嬉しいです!
No.757 構造体の宣言 投稿者:トム [99/10/08(金)15:20分]
あう゛っ! さんどうもありがとうございました。
ばっちりでした。
そしてまたまた申し訳ないのですが、質問させて頂きます。。
1つのプロシージャ内で構造体を作成しコンパイルすると、
「固定長文字列型や静的変数のデータの大きさは64KBを越える事ができません」
というエラーがでます。つまり大きさに制限があり、定義できないということですか?
basを変えてもだめでした。何か回避策はないでしょうか??至急教えて頂けると嬉しいです!
No.756 RE:アプリケーションをタスクバーにアイコン表示させる方法。 投稿者:あう゛っ! [99/10/07(木)18:51分]
>最初にLoadされるフォームはアイコン表示されるのですが、
>アプリケーションのボタン操作で2つめのフォームがLoadされると、タスク
>バーからアイコンが消えてしまいました。
現象を整理して順を追うと
1.最初は1つ目のフォーム(以降Form1)に対するアイコンが表示されている。
2.Form1からボタン操作で、2つ目のフォーム(以降Form2)を表示すると
Form1のアイコンが消える。しかも、Form2のアイコンも出ていない。
3.Form2からボタン操作で、Form1を表示してもアイコンは出ない。
以降は、何度ボタン操作してもアイコンが出ない。
という事ですよね。
確信をもって「これだ!!」って言えるものは僕にもわかりません。面目ないm(__)m
しかし、想像として2./3.でのボタン操作時のフォームの表示/非表示が
からんでいる様な気がします。
現在どうやっているのかがわかれば、何かつかめるかもしれませんが・・・
それから、これはハズしていると思うのですが・・・
例えば、Form1からForm2を表示する際に、モーダル表示(Form2.Show vbModal)すると
Form2のアイコンは出ない様です。
しかし両方とも消えてしまうという点で、ハズしてますよね・・・これは(;_;)
どなたかご存知の方、ヘルプお願いします。m(__)m
No.755 RE:アプリケーションをタスクバーにアイコン表示させる方法。 投稿者:まい [99/10/07(木)17:55分]
あう゛っ! さん、即レス大変ありがとうございましたv(^^)V
質問の内容は全く、あう゛っ! さんの解釈どおりですm(__;)m
早速ご指導とおりにやってみました。
すると、最初にLoadされるフォームはアイコン表示されるのですが、
アプリケーションのボタン操作で2つめのフォームがLoadされると、タスク
バーからアイコンが消えてしまいました。
そして、更にボタン操作で初めのフォームをLoadしても、タスクバー
にアイコンは表示されないままでした。
問題のアプリケーションはフォームが2つしかないアプリケーションで、どちらの
フォームのプロパティも、
BorderStyle=2 可変
ShowInTaskbar=True
に設定してあります。
アプリケーション実行時は常にアイコン表示をしたいのですが、どのように
設定すればよろしいのでしょうか?
結局似たような質問の繰り返しになってしまい恐縮ですが、
またアドバイスを宜しくお願いします。
No.754 EXE実行時にWindowsにアイコンを出すには? 投稿者:あう゛っ! [99/10/07(木)16:47分]
>EXEファイルを作成して実行したのですが、画面にアイコンが表示
>されません。(アプリケーションを起動したり、フォルダーを開くと画面の
>下にアイコンが表示されて、そこでサイズの最小化や最大化ができ
>たりしますよね?)
>
>このアイコンを取得(?)するには、どうすれば宜しいのでしょうか?
「アイコンを取得(?)」というのが、どういう意味かわからなかったんですが、(^_^;;
ぜんぜん違う事を言ってたらゴメンナサイ。
画面下のアイコン・・・タスクバーの事でしょうか??
そこにアプリケーション(フォーム)のアイコンが表示されないって事でしょうか??
という事で(?)、タスクバーにアイコンを表示する方法です。
フォームのプロパティで、ShowInTaskbarというのがあります。
ここにTrueを設定すると表示されます。
但し、フォームの BorderStyleプロパティの値によっては無効になりますので、
注意して下さい。詳しくは、ヘルプでShowInTaskbarプロパティを参照してみて下さい。
ホントにぜんぜん違う事だったら、ごめんなさい。m(__)m
No.753 EXE実行時にWindowsにアイコンを出すには? 投稿者:まい [99/10/07(木)15:13分]
システム関係の会社に入社1年目のものです。
VBでOracleサーバーのDBを管理するアプリケーションを作成しました。
EXEファイルを作成して実行したのですが、画面にアイコンが表示
されません。(アプリケーションを起動したり、フォルダーを開くと画面の
下にアイコンが表示されて、そこでサイズの最小化や最大化ができ
たりしますよね?)
このアイコンを取得(?)するには、どうすれば宜しいのでしょうか?
ご存知の方がいらっしゃいましたら、どうか教えてください!!
お願いします。
No.752 re:ラバーバンド 投稿者:あう゛っ! [99/10/07(木)14:30分]
>基本的な質問でとても恥ずかしいのですが、ラバーバンドの書き方を
>教えて下さい。
ラバーの書き方といえば、「描いて消す」でしょうか・・・?(^^;;
他には、実際の描画領域とは別にラバー描画領域を設けて両者を重ねるて
表示するという方法もありますが・・・
一般的に、どっちを使うのが有効なのでしょうね?
>動作的はマウスの左ボタンでラバー開始、2回目のマウスダウンで確定し、矩形を描画したいです。
>どうかよろしくお願いします。
「描いて消す」方法です。
基本的なロジックは下記の様な形でいーんじゃないかと思いますが、ラバーの表示/非表示が
これで良いのかどうか不安です。
標準EXEのフォームモジュールに下記を貼り付けて実行してみて下さい。
どなたか補足があればお願いします。m(__)m
Option Explicit
Private Type tVec
X As Single
Y As Single
End Type
Private tVec_RubberStart(1) As tVec ' ラバー座標
Private bln_RubberMode As Boolean ' ラバーモード
Private Sub Form_Load()
bln_RubberMode = False ' モードの初期化
Me.BackColor = vbBlack
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case Button
Case vbLeftButton ' 左ボタン押下
If (bln_RubberMode) Then
' 描画
Me.DrawMode = vbCopyPen
Me.Line (tVec_RubberStart(0).X, tVec_RubberStart(0).Y)-(X, Y), vbRed, B
bln_RubberMode = False ' ラバーモードOFF
Else
' ラバー座標の設定
tVec_RubberStart(0).X = X
tVec_RubberStart(0).Y = Y
tVec_RubberStart(1).X = X
tVec_RubberStart(1).Y = Y
bln_RubberMode = True ' ラバーモードON
Call RubberDraw
End If
Case Else
Exit Sub
End Select
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If (bln_RubberMode) Then
' ラバーを消す
Call RubberDraw
' ラバー座標の更新
tVec_RubberStart(1).X = X
tVec_RubberStart(1).Y = Y
' ラバーを描く
Call RubberDraw
End If
End Sub
Private Sub RubberDraw()
Dim lngColor As Long
lngColor = vbWhite
Me.DrawMode = vbXorPen
Me.Line (tVec_RubberStart(0).X, tVec_RubberStart(0).Y)- _ (tVec_RubberStart(1).X, tVec_RubberStart(1).Y), lngColor, B
End Sub
No.751 re:ウィンドウサイズを画面サイズに合わせるには 投稿者:あう゛っ! [99/10/07(木)11:20分]
>ウィンドウサイズをPCの画面サイズに合わせるには、どういった命令を
>実行すれば良いのでしょうか?
スクリーンオブジェクトに画面のサイズがありますので、それを使用すれば
良いと思います。
例)
Private Sub Form_Load()
Me.Top = 0
Me.Left = 0
Me.Width = Screen.Width
Me.Height = Screen.Height
End Sub
>又、サイズが小さくなった場合、ウィンドウ内の文字サイズやテキストサイズを
>画面の大きさに合わせるにはどうすれば良いのでしょうか?
フォームのサイズが変更された場合には、Form_Resize()プロシージャが走るので
サイズの変更はそこで行えば良いと思います。
フォーム上のコントロールの大きさに関しては、
Private Sub Form_Load()
Me.Top = 0
Me.Left = 0
Me.Width = Screen.Width
Me.Height = Screen.Height
Me.Picture1.Top = 0
Me.Picture1.Left = 0
Me.Picture1.Width = Me.ScaleWidth
Me.Picture1.Height = Me.ScaleHeight
End Sub
Private Sub Form_Resize()
On Error Resume Next
' Picture1のサイズをフォームに合わせる
Me.Picture1.Width = Me.ScaleWidth
Me.Picture1.Height = Me.ScaleHeight
End Sub
と、こんな感じで良いと思います。
文字サイズに関してですが、これも同様にForm_Resize()で行うと良いと思いますが、
文字サイズはフォントのサイズの事だと思いますので、フォームのサイズによって
フォントサイズの変更を行うことになると思います。
Private Sub Form_Resize()
On Error Resume Next
' Picture1のサイズをフォームに合わせる
Me.Picture1.Width = Me.ScaleWidth
Me.Picture1.Height = Me.ScaleHeight
' 文字サイズ変更
If (Me.ScaleWidth <= 300 ) Then
Me.Text1.FontSize = 10
Else
Me.Text1.FontSize = 14
End If
End Sub
例が悪いかも・・・スイマセン。
どなたかもっと良い方法を知りませんか?(^_^;;
前のログ | 次のログ |
VBレスキュー(花ちゃん)
Visual
Basic6.0 VB6.0