VBプログラマ質問スレ(6.0以前) Part53
2 :
デフォルトの名無しさん :2007/08/21(火) 22:26:25
[VB6、WindowsXP] リストボックスにカーソルがある時に ↑↓キー以外にも←→キーでも選択行が変わりますが ←→キーで選択行を変更したくない場合は どのようにすれば良いのでしょうか? プロパティかなにかで止められないでしょうか?
ヒント:keydownイベント
>>3 キーダウンイベント有無関係ナシに
リストボックスのIndexは移動しないか?
イベントで動いた分強制的に戻すなら・・・
KeyDownイベントで「お前なんか無かったことにしてやるー」とするのが簡単
6 :
デフォルトの名無しさん :2007/08/22(水) 17:31:43
>>4 はい。キーイベント関係なしに動きます。
強制的に戻そうにも、タイミング的にどうすれば良いものか。。。
実はずっと探してはいたのですが、リストボックスコントロールの
制御後にイベントを発生させることができれば可能だとは思います。
しかし、コーディング的にはすっきりしません。
別の方法も模索中ですが、横スクロールバーを追加すると、
←→を押していると左右に少しずつ移動し(格好悪い)て、
一番端に来るとやっぱり上下に移動してしまいます。。。
この方法ではできませんでした。
なんとかならないものでしょうか(泣)
7 :
デフォルトの名無しさん :2007/08/22(水) 17:35:07
>5 なかったことにしてやりたいですw もしかして私は何か間違ってるでしょうか? KeyDownとは無関係にリストボックスの上下移動をしているように思います
はぁ… 結構頻出なんだけどな Option Explicit Private WithEvents lstbox As ListBox Private Sub Form_Load() Dim i As Long Set lstbox = Me.Controls.Add("VB.ListBox", "lstox") With lstbox .Move 0, 0, 3000, 5000: .Visible = True For i = 1 To 100: .AddItem i: Next End With End Sub Private Sub lstbox_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyLeft Then KeyCode = 0 End Sub
9 :
2 :2007/08/22(水) 19:44:02
>>8 申し訳ありません。
いろいろやって、自分でも結論が出ました^^;
やはり間違っていたようで、キーイベントで拾って処理する事ができました。
おっしゃる通り、keycodeを0にすれば良かったです。
昨日から何度も目にしていたのですが、リストボックスの制御する事で
頭がいっぱいになっておりました><;
本当に申し訳ありませんでした。
COM コンポーネントを生成するのに New するのと CreateObject を使うのと、何か違いはあるのでしょうか? パフォーマンスに差があったりしますか?
プロジェクトのプロパティの「デバッグ」タブに 「使用中のブラウザに表示する」というチェックボックスがありますが、 これは何なんでしょうか?
[VB6、WindowsXP] VBでCOMコンポーネントを作成していて DLLが置いてあるディレクトリにあるファイルを読み込む必要があるのですが 自分がインストールされているディレクトリのパスを取得する方法はありますでしょうか?
つ「Appオブジェクト」 〜〜〜(App.Path)
15 :
デフォルトの名無しさん :2007/08/24(金) 00:15:46
フォームからフォーカスが外れたときなのですが、 LostFocusイベントで取得するのはムリでしょうか?
ブレークポイント置いて調べりゃいい
ASPから使うActiveX DLLを開発しています。 できることならWebサーバにもVBを入れてこのDLLをデバッグしたいのですが、 本番サーバと環境に違いが出てしまうので、サーバにはインストールできません。 ASPからDLLが呼びだされたときに、他のマシンにインストールしたVBを使って フックしてデバッグすることはできないでしょうか?
18 :
デフォルトの名無しさん :2007/08/24(金) 16:36:31
[VB6,WindowsXP] 一度読み込んだ写真を再度表示する際は、 高速に表示できるような処理を行いたいと考えています。 どなたかご存知であれば、ヒントご教示願います。 [詳細] フォルダから読み込んだ写真ファイルをリストボックスに表示させ、 リストボックスの選択した写真をイメージプロパティに表示させています。 (2メガ程度の写真を数百枚扱います) 一度読み込んだ写真を再度表示する際に、Image1.Picture = LoadPicture(List1) としていますが、これだと再読み込みになってしまい表示が遅いです。 Image1.Pictureの値には「923075963」のような数値が入っているので、 これを使えないかと思い、いろいろ調査してみましたが、わかりませんでした。
>>18 VB6に向かない仕事だと思う。
またVB6以外を使うとしても根本的は解決法はない。
せいぜい「直前にみた画像」を数枚メモリにキャッシュしておく程度の
工夫しかできないと思う。
というか、数メガ程度の画像の読み込みが遅いってことはそもそもないと思うんだけどどうだろう。
どうでもいいけど言葉は正確に使うべきだし使おうとすべきだ。
君の文章にはやたらと「読み込んだ」という表現が出てくるが、
いったいどういう意味でその「読み込んだ」という言葉を使っているのだろう。
20 :
18 :2007/08/24(金) 21:06:25
>>19 レスありがとうございます
そうですか。解決法は無いのですか。。。><
>というか、数メガ程度の画像の読み込みが遅いってことはそもそもないと思うんだけどどうだろう。
これは300K程度の軽いものに比べて遅いという意味です。
自作のPGで、一度表示した写真を
Set Image2.Picture = Image1.Picture
のように別のイメージプロパティからセットすると、表示が早かったので
Image1.Pictureの情報がメモリか何かに格納されているのでは無いかと思いました。
それならフォルダ内の写真をメモリに先読みすれば良いのかなと思った次第です。
>いったいどういう意味でその「読み込んだ」という言葉を使っているのだろう。
Image1.Picture = LoadPicture(List1)のような事を指しています。
「読み込んだ」だと表示されていない印象を受けるので、「表示」と書けば良かったと思います。
結果として、私の思っていたような事はできないものとして、
裏処理として、写真枚数だけイメージプロパティを追加する処理を
試してみたいと思います。(非常に重くなりそうな予感ですが。。。)
どうもありがとうございました。(^^)
>>18 Pictureオブジェクトをコレクションか何かで持っておいて
set image1.picutre = obj
とかやればいいんじゃない?
でも、これだと数百枚x2Mじゃ問題あるので
キャッシュアルゴリズムやリングバッファのようなものを実装する必要があるかな
22 :
18 :2007/08/24(金) 21:11:01
間違えましたw イメージプロパティ追加じゃなくて、メモリにキャッシュでしたw
あれ、なんか書き込んでる最中に解決してたかw
24 :
18 :2007/08/24(金) 21:13:19
>>21 キャッシュアルゴリズムやリングバッファですか〜
早速調査してみます。
レスありがとうございます(^^)
25 :
18 :2007/08/24(金) 21:14:46
>>23 どうやらそのようですw
後は私のがんばり次第という事で、締めくくりたいと思います(^^)
こいつの言い方、すごくムカつくな
27 :
デフォルトの名無しさん :2007/08/24(金) 23:48:07
VBのテキストボックスに入力した情報をエクセルで出力するにはどうすれば良いですか?
藻前等前スレ埋めれ。 まだ952だぞ。
31 :
デフォルトの名無しさん :2007/08/25(土) 22:21:50
[VB6、WindowsXP] Dim a(,) As Integer a= New Integer(,) {0,300,400,400,500,600,700,800} {400,500,700,800,1000,1200,1300,1500} {700,1000,1300,1600,2000,2000,2000,2000} {1300,2000,2000,2000,2000,2000,2000,2000} ローカルレベルでこのように配列を宣言したのですが ・配列初期化子の次元が少なすぎます。 ・構文エラーです。 とエラーが出てしまいます。 この宣言、初期化の仕方のどこがおかしいのでしょうか?
33 :
デフォルトの名無しさん :2007/08/25(土) 22:33:07
>>32 え〜と間違えましたVB2005です。すみません
VBは2005になってもやっぱり _ で継続行にしないといかんのな。 そろそろやめてほしい。
35 :
デフォルトの名無しさん :2007/08/26(日) 01:02:07
VB勉強しはじめて間もない者です。 配列には数値以外にも画像を格納する事ができるんですよね? .gif画像を格納したいんですけど 数値を格納する時と違ってどのように書けばよいのでしょうか。
>>35 今からでも遅くは無い
VBはやめとけ
他の言語にしろ
37 :
デフォルトの名無しさん :2007/08/26(日) 01:17:43
初心者です。 クラスとコレクションの違いを教えてください。
39 :
デフォルトの名無しさん :2007/08/26(日) 01:21:12
>>36 やめたほうがいいと思う理由はなんですか?
>>35 >>37 初心者ということが、決して免罪符にならにということは覚えておいた方がいい
とりあえず、オブジェクト指向の本を読んでクラスについて勉強を
コレクションはとりあえず、忘れてOK
41 :
デフォルトの名無しさん :2007/08/26(日) 02:56:17
>>41 つ「GetObject」 「gif フォーマット」
>>41 その書き方だと何をしたいのかがわからないんだよ
初心者だから説明のしかたがわからないというのはわかるんだけど
配列にgifファイルをどのような形で保存したいと思っているのか?
pictureオブジェクト?ファイル内容をそのまま?展開したビットマップ?
せめて、その配列を用いて何がしたいのかを書いてくれ
というか、初心者が(基本的な内容の学習を欠いたまま)「自分のやりたいこと」に向かって 直線的に進もう、という態度がそもそも間違い。
IDEでデバッグ実行しているとき以外にもなんらかの方法で Debug.Printの出力を表示させることはできないでしょうか?
>>45 debug.printはやったこと無いのでわからんが
OutputDebugStringなら出力できるよ
VC6持ってればの話だけど
実行時にならどこかにログを吐かせるんだが。そうじゃないのかな?
OutputDebugStringはできたので、Debug.Printも同様な方法があるんじゃないかと 思って聞いてみたのですが。 Debug.Printを入れた時と消したときで、コンパイルしてできたexeファイルに差異がありますし。
49 :
デフォルトの名無しさん :2007/08/27(月) 22:54:45
ちょっとお尋ねしたいのですが、 VB6で特定のフォームを表示しているフォームのすぐ背面に 持ってくることは可能でしょうか? ウインドウズ任せでなく、任意の表示順にしたいのですが、 なかなかいい方法が見つからなくて困っています。 よろしくお願い致します。
50 :
デフォルトの名無しさん :2007/08/27(月) 23:01:14
VBでサムネイルを作る最も良い方法を教えてください。 よろしくお願いします、
>>49 win32APIのSetWindowsPosを使う
>>50 まず、そのサムネイルはどのような形でVBから扱えるのかを教えて
>>前スレ998 終わったスレは邪魔にしかならない。 とっととDAT落ちするように埋めることの何が悪い。 今後もアクセスされるべき重要な情報があれば、 とっくにどっかの誰かが引用なりなんなりしてるわ。
980越えていれば24時間ほど書き込み無ければ自動的に落ちるが中途半端に埋める馬鹿で延命 遅いスレで950で次を立てると両方のスレでグダグダ 次スレを立てるタイミングを考えろ糞野郎って事だ
まあまあ VBを愛する者同士仲良くしようZE☆
57 :
デフォルトの名無しさん :2007/08/30(木) 21:14:38
すみません、ちょっとお伺いしたいのですが、例えばフォームにテキストボックスを2つ(Text1、Text2)、 マスクエディットコントロールを2つ(MaskEdBox1、MaskEdBox2)を貼り付けただけのものを起動させ、 別途作ったプログラムからAPIを使ってこのフォームのコントロールに値を入力したいと考えています。 その場合まずFindWindowでフォームのウインドウハンドルを取得して、その子ウインドウ(コントロール) のハンドルをGetWindowで取得するところまではできたのですが、取得したハンドルが4つのコントロール のどれにあたるのかの判別方法がよくわからないのです。 GetWindowTextを使うとテキストボックスであればデザイン時に設定しておいたTextプロパティの値が取得 できるようなのですが、マスクエディットコントロールにはTextプロパティが無いようなので何も取得出来ず、 判別が出来ませんでした。 今はGetWindowPlacementでウィンドウの描画位置を取得して何とか判別できるようになったのですが、これ だとフォームのデザインを変更するたびに別途作ったほうのプログラムも修正しなければなりません。 もし何かもっとスマートなやり方がお解かりになる方がおりましたらどうかご教授願えないでしょうか? どうぞよろしくお願い致します。
>>57 長いからななめ読みし貸してない
とりあえずMSDNはみた?
>>57 >もし何かもっとスマートなやり方がお解かりになる方がおりましたらどうかご教授願えないでしょうか?
君は一つ一つの文を短くしたほうが良いよ。
>>57 一つ聞きたいけど、MaskEdBoxに値を入力しているのはどうやってやってるの?
GetWindowTextが出来ないんじゃ、SetWindowTextも出来ないのでは?
>>57 VB側プログラムが普通の作りなら
GetWindowLong(hwnd, GWL_ID)
で特定できる可能性はある
VB側プログラムを自由に変更できるならSetPropでプロパティを付けておけばよい
特定するだけなら、62の方法でいいな もしくはGetWindowLongで、UserDataを与えておくとか
間違えた、SetWindowLong
65 :
57 :2007/08/31(金) 19:42:01
>>61 SetWindowTextは別アプリに対しては使えないそうです。別アプリの場合はSendMessageのWM_SetTextで
やるみたいです。
でも確かにマスクエディットにはTextプロパティがないので、仕方がないのでSendMessageのWM_KeyDown
で1文字ずつ送ろうと思ってます。まだ試していませんが。。。
>>62 おっしゃられているウインドウのIDというのが難しくてよくわかりません。
ここのサイト(
ttp://www.winapi-database.com/Window/Class/GetWindowLong.html )でGetWindowLongのサン
プル(マウスカーソルの位置にあるウインドウの情報を得るもの)をダウンロードして、コントロールを色々貼り付
けてテストしましたが、GWL_IDはテキストボックスだとText1とText2でそれぞれ違う値になるのですが、コンボボ
ックスだと全部同じ値になってしまい、これだと判別出来ないのでは?と思いました。というかそもそもウインドウ
のIDというものがどういう使われ方をするものなのかがわからないのでそれ以前の問題なのですが。。。
>>63 同じ理由でUserDataというのもよくわかりませんw
できればフォーム側のプログラムに手は加えたくないです。
お答え頂いたみなさんどうもありがとうございます。
ご提示頂いた方法を調べる過程で色々と勉強になりました。
一応GetWindowPlacementでやりたいことは実現出来ているので、もっと良い方法は気長に探そうと思います。
67 :
デフォルトの名無しさん :2007/09/01(土) 18:35:45
[XP,VB6] 初心者質問で申し訳ありませんが、調べてもわからなかったので、 教えて頂けますか? [質問] FORM_LOADの時にsetfocusすると 「プロシージャ呼び出し、または引数が不正」となり処理中止します。 ある条件の場合はフォーカスを変えたいのですが、 この場合、tabindexなどを全て変更したりする必要があるのでしょうか? また別の方法があるでしょうか? これに付随して、IMEプロパティもオフにしたいのですが、 リストビューに存在しないので設定方法がわかりませんでした。 宜しくお願い致します。
>>67 Load時はまだオブジェクトが出来ていな状態だから、
TabIndexを一番低い値にするとか、
ロードした後にsetfocusするとかしかない
>>67 もしくはForm_Activeで出来るかな。試してないのでよろしく
form.show form.setfocus
71 :
67 :2007/09/02(日) 04:31:38
>>68 >>69 >>70 みなさんありがとうございます。
70さんの方法で、
Form1.Show
ListView1.SetFocus
とすれば、ロード時のセットフォーカス実現できました!
showすれば良かったのですね^^
ありがとうございました!
72 :
デフォルトの名無しさん :2007/09/02(日) 16:27:07
フォルダにあるテキストをリストボックスに表示しているのですが<BR> リストボックスでテキストをダブルクリックして表示させることはできますか?<br> また、サンプルプログラムとかありますか?
>>72 > フォルダにあるテキストをリストボックスに表示しているのですが<BR>
> リストボックスでテキストをダブルクリックして表示させることはできますか?<br>
> また、サンプルプログラムとかありますか?
フォルダにアルテキストを(リストボックスに)表示させているのに、
なんで、ダブルクリックして表示させにゃならんの?不思議
>>72 意味不明だからもうちょっと分かり易く、やりたいことを具体的に日本語でOK。
75 :
デフォルトの名無しさん :2007/09/02(日) 23:53:12
イントラネットに接続されている機器のIPアドレスをMacアドレスを 指定して習得したいのですが可能ですか? サンプルなどありましたら、提供していただけると助かります。
>>75 参考:
rarpに対応して撥ねない機器なら、rarpを使ってできるかも?
>>72 リストボックス内にテキスト形式のファイル名でもリスト表示しているのか?
でテキストボックスに選択したテキストファイルの内容を表示?
つ「DblClickメソッド」
優しすぎるか?
ファイルの削除にKILLコマンドを使うのはお薦めできないらしいのですが どのような理由か教えてください。
>>78 よく分からないけど、指定されたファイルがなかったら or 削除出来なかったらエラーが出るくらいしか思いつかん
on error 〜で引っかけて対処しておけばエラーで止まることもないから俺は使ってるけど
そういえば、VBでKillコマンドって使ったこと無いな なんかkillっていうと、プロセスの強制終了ってイメージがある
>>78 今の今まで聴いたことが無い
ソース見せてくれ
そういえばなにげにFSOつかうよな・・・・ 確かFSOは条件少し指定できたっけ? 忘れたが
83 :
78 :2007/09/04(火) 09:17:33
>>79-81 レスありがとうございます。
>>79 ファイルが無いとか、ロックされているケースは私もon error で対処しています。
これだけの問題ならKILLを使いたいと思います。
>>81 「kill vb ファイル 削除 (お勧めしません)」 でググってみて下さい。
ちなみにそのサイトでは、
System.IO.File クラスの Delete メソッドを使用する事がお薦めのようです。
この方法は、Microsoft Scripting Runtimeにチェックを入れたり、
インスタンスの生成や、使用後の参照の開放等、手続きが面倒なので
KILLを使いたいのですが深刻なバグがあるのなら、
Deleteを使用した方が良いと思い、質問させて頂きました。
すいません間違えました。
>>82 さんの言うFSOでした。
正 FileSystemObject (FSO) の DeleteFile メソッドを使用する事がお薦めのようです。
誤 System.IO.File クラスの Delete メソッドを使用する事がお薦めのようです。
Killで問題になるとすればユニコードのみの文字を使ったファイル名かな
FSOはWindowsScriptHostについてくるコンポーネントだっけ? VB6標準のじゃないってことを理解して使ってればOKだけど 客先に入れたら動かんってことも結構ある。
>>86 インストーラー作れば問題ないな
というか、VBで作ったソフトの場合インストーラー必須じゃない?
ライセンス上問題だと思いますが。。
FSOは再配布出来ないのか じゃあ、IExx必須とやるしかないな
あの、日本語を指摘するかたはそれでもプログラマーですか コードの「読み」書きが最も大切だと習わなかったのですかね
仕様と違ってたらそのプログラムは使えん。
日本語が不自由な奴が仕様を正しく理解できるとは思えん。
>>90 みたいなプログラマーはいらん。
フォルダ単位を実行する時はFSOで 内部で作る作業ファイルとかはKILLだな KILLは確かに好ましくないって聞いてるけど 楽なんだよな('A`)
>>89 WSH単体のインストーラも公開されている。
しかもWindows 98/2k以上には何らかのバージョンがインストール済みなので、
バージョンの違いに頭を抱えなくて済むならそれでいい。
>>91 その言い草はなんです!
あなたみたいなプログラマー(かどうかも疑わしい)こそいりません
>System.IO.File クラスの Delete メソッドを使用する事がお薦めのようです。 VB6じゃない
ごめん後のレス見てなかった
98 :
デフォルトの名無しさん :2007/09/05(水) 12:00:52
[XP,VB6] 宜しくお願いします エクスプローラからフォルダをVBで作成したツールにドラッグし、 ツール側で内容を読み込んでいるのですが、 ドラッグされた際に、エクスプローラよりも背面になっています。 なんとか前面に表示させたいのですが、良い方法があればお教え願えますか?
常にウインドウを手前に表示したいってこと? Win32APIのSetWindowPosできたはず VB6 SetWindowPosでぐぐればサンプルみつかる
>>98 ドラッグ先の自作アプリが手前にあり、エクスプローラが後ろにいる状態で
エクスプローラのファイルをドラッグ&ドロップしても、自アプリが後ろに来ちゃうって事?
それとも、一度エクスプローラをカレントにしてからと言う事?
普通にどこかのコントロールにSetFocusすればいいはず
102 :
98 :2007/09/06(木) 12:32:23
返事遅れて申し訳ありません 常に前面では無く、エクスプローラから フォルダをドラッグされて、処理する場合に前面に表示したかったのです あと100さんのご質問の答えとしてはカレントにしてからとなります 結果として101さんのお答えで実現できました! みなさんありがとうございました^^
103 :
デフォルトの名無しさん :2007/09/07(金) 10:18:00
VB2005について質問があるのですが、どのスレッドで聞けばよろしいでしょうか? 初心者です。
104 :
デフォルトの名無しさん :2007/09/07(金) 12:16:03
[XP、VB6] 質問があります。 現在イメージボックスを使用して画像を表示しているのですが、 画像の上に文字を表示して保存したいと考えています。 ピクチャーボックスであればすぐできると思いますが、 こちらだとボックスの大きさがコロコロ変わるので困ります。 (Stretchのようにサイズ変更されずに圧縮してくれれば良いのですが) 宜しくお願い致します。
イメージボックスって何?Imageコントロールの事か?
107 :
104 :2007/09/07(金) 12:57:22
>>105 すいません。Imageコントロールの事です^^;
>>107 ピクチャーボックスを使えば、すぐ出来るとの事なので
画面表示にはImageコントロールを使って
ピクチャーボックスをvisible=falseにして、文字描画と保存処理を行えばよいのでは?
pictureオブジェクトは、set picturebox.picture = image.pictureで共有できる
ただ、文字を書き込むってAPI使わんでもスグ出来たかどうかちょっと疑問だが
109 :
104 :2007/09/08(土) 07:04:47
>>108 レスありがとうございます。
実は一度考えた方法なのですが、ピクチャーボックスの幅が自動で
大きくなってしまったり、元の画像の大きさを縮小したりできなかったので
諦めていました。
ピクチャーボックスへの文字描画は
Picture1.CurrentX = 800 'X座標
Picture1.CurrentY = 30 'Y座標
Picture1.Picture = Image1.Picture '画像取り込み
Picture1.Print "2007/09/08 06:58:14" '文字表示
とかやれば一応文字が反映されています。
あとはsavepictureかなにかやれば良いのだろうと思います。
もう一つ問題があって、現在Imageコントロールを使っていると言いましたが
写真を一枚一枚処理するのでは無く、複数枚の写真をいっきに処理
しなければなりません。なのでピクチャーボックスで一つずつ処理する方法では
実現が難しいという事もあります。(でも、できない事は無いと思います)
>>109 事前に処理するファイルパスを変数に入れておいてループ取り出しながら繰り返せばいいんでなくて?
絶対に複数の画像を同時に処理しなければならない理由とかあるの?
質問があります。 VBScriptで時刻を表示させる時に 午前10時以前でも "9:xx:xx" ではなく "09:xx:xx" と、ゼロを入れて2桁で時間を表示したいのですが、なにか表示形式指定のオプションみたいなものがあるのでしょうか? それとも時間、分、秒と別々に取得して自前の関数で補正しないとだめでしょうか?
>>109 その方法で、ビットマップに文字列が保存されるかなぁと疑問だったんだが出来るならいいけど
複数枚の写真が、動画のようなもので時間的に余裕が無いということだろうか?
それともバッチ処理のように、ファイルを連続でということなら
>>110 が書いているような方法で良い訳だが
ちなみに時間短縮ならAPIを使って、DCを自分で作って(CreateCompatibleDCなど)
そこにimage.picture.handleを選択して(SelectObject)
文字列を書き込んで(TextOut など)
って事をすれば良い
こうするととりあえず、DCを画像ごとに生成する必要が無いのでちょっとは早くなるかも
>>111 VBSはformat使えないし、formatdatetimeがヘボだから
自分で関数作るのがいいかもね
>>113 レスどうもありがとうございます。
なるほど〜そうですか。そしたらこんな感じで自分で作ってみました
今までは
MsgBox ( Time )
で実行結果 "9:12:34"だったのを、
MsgBox( Right( "0" & Hour( time ) ) & ":" & Right( "0" & Minute( time ) ) & ":" & Right( "0" & Second( time ) ) )
として、実行結果"09:12:34"になるようにしました
とりあえずこれで^^;
どうもありがとうございました
Right(xxx,2)では?と一応突っ込んでおくがw
116 :
114 :2007/09/08(土) 11:57:16
あ〜 失礼しました^^; おっしゃるとおり MsgBox( Right( "0" & Hour( time ),2 ) & ":" & Right( "0" & Minute( time ),2 ) & ":" & Right( "0" & Second( time ),2 ) ) でした! あとちなみに MsgBox FormatDateTime( Time, vbShortTime ) & ":" & Right( Minute( Time ), 2 ) でもなりました もう少し短くならないかな^^;
>>116 Windowsの”地域と言語のオプション”で左右されそうな希ガス
>>116 短くするよりも、精度上げた方がいいけどね
time関数は一度しか使わないで、戻り値を変数に入れてからの方が良いよ
119 :
114 :2007/09/08(土) 12:13:05
>>117-118 まじですか
そしたら
Dim aTime
aTime = Time
で、
MsgBox( Right( "0" & Hour( aTime ),2 ) & ":" & Right( "0" & Minute( aTime ),2 ) & ":" & Right( "0" & Second( aTime ),2 ) )
って感じにしました
勉強になりますm(_ _)m
>>109 一応、ピクチャボックスに書き加えたものまで含めて保存したい場合は、
Picture1.PictureでなくてPicture1.Imageの方を保存ね。
121 :
デフォルトの名無しさん :2007/09/08(土) 19:03:46
VBから他の言語へ「とらば〜ゆ」するのって、簡単ですか? 基本的なアルゴリズムが理解できてとOSの知識があればOKだと思うんですが。
>>121 問題ないんじゃない
PCの知識も必要かもしれないが
VBしかできない奴のほうがどうかしてる
>121 他の言語に移行できないヤツはVBも理解できていない
インターネット トランスファコントロールで 動画ファイルをダウンロードするのはどうしたらいいのですか? text,jpg,zipなんかはできるんですけど なぜか動画は同じ方法ではダウンロードできません もしかしたらこのコントロールではむりですか 参考になるヒントなど教えてください。
動画にも色々あるんだが
すまん .flvファイルです
>>127 flvか
ダウンロードの方法は、保存支援サイトが何をやってるか見ればわかるだろう
やりかたは変わらない。 DL厨対策に動画のURLの取得が一筋縄でいかないようになっているだけ。
なるほどこのコントロールでできるのですか もう少しじっくりコードを見直してみます。
VB6からVB2005に以降したのですが、 VB6のときにあった、ディストリビューションウィザードがなくなって セットアップディスクが作成できなくて困ってます。 別のツールかなにかで作るのでしょうか? お勧めがあったら教えてください。
>>131 VSI (Visual Studio Installer)
133 :
132 :2007/09/09(日) 11:27:41
ごめんこれはVB6だった。 VB2005は知らんです。
134 :
109 :2007/09/09(日) 18:07:15
>>110 >>112 >>120 レスありがとうございます。
申し訳ありません。話がややこしくなってしまいました。
いっきに処理しなければならないのは忘れて下さい。
私が勘違いしていました。
おっしゃる通りバッチのような感じで処理できます。
ポイントとしては、
・現在Imageコントロールを使っているので、Imageで文字描画できないか
・Pictureボックスしか無ければ、仕方ないけど、ImageのStrechみたいな
ボックスの大きさを固定しつつ圧縮する技はないか
以上2点です。
Pictureボックスの大きさを気にするのには理由があります。
処理する前にどの位置に日付を描画するのかを目視したいからです。
写真によっては文字の位置や色なども変えなければ見えませんので。
その為、ボックスの大きさは常に一定で、
Imageのような画像のサイズ圧縮が必要になります。
>>134 自分はImage嫌いなのでPictureを二つ用意する。一つは非表示で元画像(等倍)。
表示用にはStretchBltかスクロールバーで表示する。
136 :
134 :2007/09/10(月) 10:04:06
>>135 レスありがとうございます。
基本的な事で申し訳ありませんが、
ピクチャー1のAutoSizeをTrueにすると、
写真が大きい場合、ピクチャー1が画面上からはみ出るのですが
これをピクチャー2にコピーしてもうまくいきません。
また、AutoSizeをFalseにすると、写真が小さく表示され、やはり無理です。
どのように対処されていますか?
ステータスバーのSimpleTextの文字色、変える方法ってある?
>>136 元画像AutoSize=True
手法1(Stretch):StretchBltを使って表示画像に転送
手法2(ScrollBar):表示位置(原点)を保持しておいてスクロールバーを移動させるたびにBitBlt
手法1の場合完結しているが小さい場合に見づらい。
手法2の場合どんなサイズでも擬似的に表示できる。その代わり制御が少し面倒。
他にも色々あるだろうけど、原寸そのままに表示できない場合は、小さくするか
一部だけ表示させるしかないでしょ。
VB6で、WinSockコントロールを使ってのソケット通信について質問します フォームにWinSockコントロールを複数貼り付けたり Win32APIのWinSock関係を直接操作したりすることなく 複数クライアントとの同時通信などと言うものは可能なのでしょうか? WinSockコントロールはひとつのインスタンスでひとつのコネクションしかもてなかったと思うのですが・・・ いかがなものでしょうか
>139 でけます。 WinSockコントロールを配列にして扱うサンプルがMSDNにあるでよ
>>140 ありがとうございます
MSDN漁って見つけることができました。
142 :
136 :2007/09/12(水) 00:43:16
>>138 色々と情報を頂いて、頑張ってはみたのですが、
私では実現できないようですので、残念ですが今回は諦めます。
お時間頂いてありがとうございました。
143 :
デフォルトの名無しさん :2007/09/12(水) 23:11:43
今VBで2chに書き込むプログラム作ろうとしているのですが、どうにも駄目です。 winsockを使用して作ってます。 スレの取得はできるようになったのですが、書き込みの方法がわかりません。 特にクッキーの設定の部分がわかりません。 助けてください。
>>143 本当にやる気があるならmonazillaで調べて自分で解決してください
俺はそこで調べて誰にも聞かずにdat取得、スレ書き込みまでできました(スレたてはテストの都合上作成も試みていない)
Dim a As New WshShell a.Run "lame.exe -b 192" みたいな感じでコマンドプロンプトで実行させるプログラム自体は起動できるんですが、 実行中はコマンドプロンプトに制御が移ってしまうのが嫌で、 VB側で実行中のパラメータとかを直接受け取ることって何の関数を使えば出来ますか? コマンドライン型のアプリケーションを完全にこっちで制御したいんです
>>147 自作プログラムなら幾らかやりようがあるけど、既製品はまず無理。
作るときは製品のドキュメントをよく読んでいくしかない。
>>150 それなら出来るんですけど、自分のしたいことはコマンドライン型のEXEを、
実行中にパラメータを取得したいんです。具体的にはLameなら実行中のパーセンテージを
こっち側のプログラムで取得して、自作のフォームにプログレスバーとして表示したり、完全に制御したいんです。
>>149 既製品は無理なんですか?それはVBの限界ってことでですかね?
例えば変換君のフロントエンドなんかは、ffmpegのパラメータを実行中に取得してるみたいで・・・同じことをしたいんですが、
VBではどんなAPIを使用しても不可能ですか?
>>151 そりゃきっとVBで可能だとしても、やるとかえって大変ですよ。
他の開発言語・ツールを使った方がいいと思います。
え?なにがいいかって?馬鹿野郎よくググれ。
LAMEの画面出力は、プログラムから解析されるような出来になっていないので、 そういう用途ならLAME_ENC.DLLか何かを使ったほうがいいと思う。 VBからどれくらい扱えるかはわからないけど。
154 :
デフォルトの名無しさん :2007/09/16(日) 14:38:44
フォルダにあるテキストのテキスト名をリストボックスに表示して、 テキスト名を選択したときにテキストの内容をテキストボックスに 標示させたいのですが、パスがわかりません。
>>154 何をしたくて何が分からないのか分かりません
>>154 つ「App.Path」
つ「CommonDialogBox」
157 :
デフォルトの名無しさん :2007/09/16(日) 15:49:28
>>155 >>156 回答ありがとうございます。
デスクトップ上にあるフォルダの中のファイルをListViewで表示してます。
ListViewで表示しているファイル名をStreamReaderを使用してテキストの内容を
ラベルに表示させたいです。
ファイル名を時間にしていますので、ファイル名のパスを指定できません。
>157 > ファイル名を時間にしていますので、ファイル名のパスを指定できません。 ???
ゆとりは理由にならない根拠で結果を導き出すから困る 取り付く島がないじゃないか
160 :
デフォルトの名無しさん :2007/09/16(日) 16:38:23
パス名を現在の時間にしており、変更しているからです。
変更しているのは誰? 自身のプログラム内なら、ファイル名生成のルーチンから ファイル名を横取って来ればいい。
162 :
デフォルトの名無しさん :2007/09/16(日) 17:03:47
VB2005を使用してます。 複数あるプログラムをボタンをクリックした時にCheckboxにチェックが あるときは起動してチェックがないときは起動しないプログラムを 作成したいのですが、方法とコードなどありましたら、ご教授ください。
163 :
デフォルトの名無しさん :2007/09/16(日) 17:07:24
>>161 回答ありがとうございます。
また、ListViewで選択しているファイルののパスを指定する場合の
方法はありますでしょうか?
165 :
デフォルトの名無しさん :2007/09/16(日) 21:33:42
PINGを定期的に行う、プログラムを作成したいのですが、 いいサンプルプログラムとかありますか?
連休中の宿題か? ガキでなければキチガイばっかりだなw
>>163 ListViewにファイル名を入れる時はどうやってそのファイル名を取得したの?
俺がListViewにファイル名を入れる時は、そのファイル群が置いてあるフォルダを指定し、
検索してフルパスを取得し、ファイル名だけ抜き出して表示させるが
この過程においてファイルのパスが分からないという問題は起きないわけだが
どう考えてパスが分からないと導き出した?
これで意味が分からないならもう一度勉強し直した方がいいよ
168 :
デフォルトの名無しさん :2007/09/17(月) 10:47:43
ググったりしましたがわからなかったので質問です。 私はDEL使いなんですが、会社で前任者が作ったVBソフトのメンテをやることになりました。 内容はimageコントロールの画像の表示方法に関することです。 なにしろ、VBはVBA程度の知識しかないので カードデータベース風の情報管理ソフトです。 フォームにimageコントロール(以下イメコン)があります。 利用者は自分で撮影したデジカメ写真をフォームに登録して表示させることができます。 しかし、stretch=trueにするとイメコンのサイズに変形されるしfalseにすると一部分しか表示されません。 そこで、フォーム上のイメコンのサイズで収まるようにアスペ比を一定に縮小させる、または、元サイズのままスクロールできるようにしたいんですが、 どうすればいいんですか? それと、imageコントロールとpictureコントロールの違いって何ですか?
>>168 アスペクト比一定なら、元画像の縦横サイズとImageの縦横それぞれの倍率を取って倍率の小さい方で
縦横同じ倍率で縮小すればいい。
スクロールする場合は表示位置(x,y)を保持して、スクロールバーの値が変わったときに表示サイズの
縦横分だけ抜き出して表示。スクロールバーの値の範囲は0から元画像の幅−表示サイズの幅
>imageコントロールとpictureコントロールの違い
これくらいは自分で調べてくれ
170 :
デフォルトの名無しさん :2007/09/17(月) 13:26:51
>>168 IPictureDispに画像を保持してRenderメソッドでPicturBoxに描く。
質問です。[VB6,WindowsXP] ボタンを押して始まる処理の中で、DoEventとSleepを使ってかなり長いループを作って これを実行している最中に右上の[×]で終了させるとボタンの処理が遠い世界に旅立つので フォームのQueryUnloadで「End」を書いて終了させているのだけど、何か間違っている気がしてならないです。 これで問題はないものでしょか?
>>171 End命令は即座にVBの実行を停止する命令で、FormのunloadやTerminate、
オブジェクトのTerminateイベントの処理をすべてバイパスする。
ActieX(COM)のアンロード処理も省かれるので、
アウトプロセスサーバーを使ってる場合にActiveX.EXEのプロセスが終了しない。
これらのことが問題にならないなら使っていいよ。
>>172 ありがとうございます〜
えーと、やっているのはAPIによるPCIボードのアクセスとシリアルの入出力。
シリアルは閉じるとして、APIのほうはClose命令があるのでソレを発行しておけばよいかな…
あと万全を期すため?
EndをQueryUnloadからUnload最後に移動かしら。
「これからこのプログラムは強制終了するお」っていうのをフラグ立てて、 遠い世界へ旅立つループ処理に教えてあげてループ処理を抜けさせるようにすれば?
>>174 その時は遠い世界へ旅立つループ処理が終わるのを待ってあげないとダメなので本末転倒なんだぜ?
>>173 自分の場合メッセージボックスを出してループだけ抜けさせて、Unloadイベントをキャンセル。
改めてユーザー側にもう一度終了させるようにした。
下手に一括でやろうとしてプロセスが残るより安心。
>>174-176 あー。ループのほうでトラップ(?)するというのはスッポリ抜けてたす。
ループでフラグ立て→[×]→フラグでUnloadキャンセル→ループ内で「フラグ消し→Unload Me→Exit sub」
とやってみた。
それっぽくなった。
こっちのほうが幸せっぽいかな。
遠い世界に旅だつ、とかなんの意味だかさっぱり分からん。 ダメな奴は本当なにやらしてもダメだな。人に通じる文章すらちゃんと書けないのか。 ループでDoEventsなんて、VBプログラマが嘲笑されるときのネタの定型だぞw しかもなんでSleepかますの? Sleepの意味分かってるのかねw
は?DoEventsはループの中でしかつかわねーしアホか
しかし
>>178 さんは昔からずーっとこのスレでがんばってるなあ。
久しぶりにのぞいてみたけど健在で驚いたよ。
181 :
デフォルトの名無しさん :2007/09/21(金) 09:34:37
>>169 ありがとう。
画像を定比で縮小することはできた。
だけど、スクロールバーで足踏み。
スクロールバーを動かすと確かに図形も動くけど、元の画像がそのまま移動するだけ。
つまり画像を左にスクロールすると、右側には、今まで見えていなかった画像が現れるのではなく、ただのブランクになる
もうわけわからん〜
デバイスの安定待ちとかの十数msもタイマーか何かに逃げないといけないものなのか?
MsgWaitForMultipleObjectsは使うがSleepは使わないな
184 :
169 :2007/09/21(金) 12:11:18
>>181 手抜き説明。書き殴りだからあっているかどうか不明
[Form1]
'元画像をPicture1に表示、表示用画像にPicture2を用意
'簡単のためScaleModeはPixelで統一
'スクロールバーの値を利用する
Private Sub HScroll1_Change()
'HScroll1の値の範囲は0からPicture1.Width-Picture2.Width
Bitblt Picture2.hdc,0,0,Picture2.Width,Picture2.Height, _
Picture1.hdc,HScroll1.Value,VScroll1.Value, _
vbSrcCopy
End Sub
Private Sub VScroll1_Change()
'VScroll1の値の範囲は0からPicture1.Height-Picture2.Height
Bitblt Picture2.hdc,0,0,Picture2.Width,Picture2.Height, _
Picture1.hdc,HScroll1.Value,VScroll1.Value, _
vbSrcCopy
End Sub
元画像と表示画像、スクロールバーの値について適当な絵と値を書いて考えてみれ
これでカネ稼ぐんだろうから、少しは苦労しなよ。こんなのは基礎だぞ〜
VB6.0でFarPoint SPREAD 3.0を使ってプログラムしています SpreadPreviewを貼り付けたフォームでKeyPreviewをTrueにして フォームのKeyDownイベントをトラップしていると SpreadPreviewにフォーカスが有る時に 一度しか押していないキーのイベントが2度発生してしまいます この症状の解決方法などご存知の方はいらっしゃいませんでしょうか
>>185 そういう質問はメーカーに問い合わせるのが先だ
KeyDownとKeyUpが走っちゃうって話?
188 :
185 :2007/09/21(金) 15:01:14
>>186 確かに・・・orz
>>187 KeyDownしかプロシージャ追加して無いんで、KeyUpは関係ないと思いたいんですが・・・
189 :
デフォルトの名無しさん :2007/09/22(土) 01:20:02
>>184 丁寧にすまん。 じっくり勉強させてもらうわ。
だけど、
> これでカネ稼ぐんだろうから、少しは苦労しなよ。こんなのは基礎だぞ〜
いや、だから、俺はdel使いであってVBなんて知らないの。
ただ前任者の尻ぬぐいをしてるだけだって。
190 :
184 :2007/09/22(土) 17:31:37
>>189 Bitbltの変数足りないかも分からんのでヘルプ見直しておくれ。すまん
>前任者の尻ぬぐいをしてるだけだって
よーく分かるwだが、調べれば結構載っているからな。がんばり〜
191 :
デフォルトの名無しさん :2007/09/22(土) 23:47:04
>いや、だから、俺はdel使いであってVBなんて知らないの。 >ただ前任者の尻ぬぐいをしてるだけだって。 回答になってねぇよwwwww DEL使いとかじゃなくって社会人かどうか疑いたくなるなwwww
>>191 だよなwwwww
俺もお前のこと疑うぜwwwwwwwwwうぇwww
193 :
デフォルトの名無しさん :2007/09/23(日) 15:23:34
>>192 だよなwwwww
俺もお前のこと疑うぜwwwwwwwwwうぇwww
194 :
189 :2007/09/23(日) 21:59:28
>>191 > 回答になってねぇよwwwww
> DEL使いとかじゃなくって社会人かどうか疑いたくなるなwwww
すれちになるからあまり深入りしたくないが、ニートのおまえには言われたくねーよ。
うちは別にソフトベンダーでも何でもなくて、業務用アプリを担当部署ごとに作ってるだけ。
仕様書も何もなく放置されていたバグだらけのソフトを、君もプログラミングできるなら何とかしてくれ
っていわれてメンテする羽目になっただけだ。
>>194 「del使い」じゃなくて「DEL使い」って逝っちゃってるんだから,見逃してやろうぜ・・・
196 :
デフォルトの名無しさん :2007/09/23(日) 22:17:24
const int * a; const * int a; * const int a; int * const a; * int const a; 違いを教えて下さい
その前にVBとcの違いを知るべきではないだろうか
>196 書き方が違うだけで全て同じものです
199 :
デフォルトの名無しさん :2007/09/23(日) 23:10:46
>>198 ありがとうございました。
なぞが解けました
cdeclプログラム(BSD用バイナリ配布)をみれ
つうか んっとにカスばっかりだな お前らのうちどんだけが本当のPGとかSEなんだよw
だってVBスレだよ
ネタ質問には全力ボケで返す、基本だろ?空気嫁よw
205 :
デフォルトの名無しさん :2007/09/24(月) 17:42:14
VB5.0でフォルダ名の変更ってどうやってやるのでしょうか?? フォルダ名をリネームするプログラムを作りたいんです ファイル名の変更は出来たんだけど・・・ どなたか教えてください
FilesystemObjectつかえばいいんじゃね?
>>205 nameステートメント使えばいいんでね?
208 :
デフォルトの名無しさん :2007/09/24(月) 21:20:42
イントラネット内に接続されているコンピュータのIPアドレスを 取得したいのですが可能でしょうか? iphlpapi.dllを使用すれば可能とのことだったのですがコードが 分かりません。
209 :
デフォルトの名無しさん :2007/09/24(月) 23:50:22
使用環境はExcel VBAなんですが、Excelのスレだとスレ違いになるっぽいのでこちらに質問します。 フォルダパスの文字列の"開始"という文字を"完了"に置き換えたいのですが 現在はパス名をセルに一度書き込んでから エクセルのReplace関数でセルの文字を置き換え、それをコピー先のパス名として変数に代入する みたいな感じでやってます。 コードはこんな感じです。 Cells(1, 1).Value = myStDir Cells(1, 1).Replace What:="完了", Replacement:="開始" myEnDir = Cells(1, 1).Value myFso.CopyFolder myEnDir, myStDir, True これでも動く事は動くんですが、VB上で変数の文字列の一部を置換する事はできるんでしょうか。
ヘルプ見ろよ。 VBの文字列関数なんて数が知れてるじゃないか
できました・・・・ myEnDir = Replace(myStDir, "完了", "開始") 何かReplaceはVBで使えないって思い込んでました・・申し訳ない・・
>>208 どんな感じのネットワークかわからんから,正直何も言えない
まあpingが通るなら単純にネットワーク内に存在する可能性のあるのIPアドレスにpingを送ってみればいいかもな
VB6.0の本が売ってません。
つブックオフオンライン
216 :
デフォルトの名無しさん :2007/09/25(火) 17:07:49
PCサロン板でこちらを紹介していただいてやってきました。 InputMan7.0を購入して、今まで使用していたVer6.5から7.0に移そうと移 行ツールを試してみたのですが、できるコントロールとできないコントロ ールにわかれてしまいました。 BOC社のサイトで調べてみるとTab上にあるコントロールは認識しないよう なFAQを見つける事ができ、最新版をDLすれば解決するとありました。 早速DLして再度移行ツールを実行してみたのですが、やはりエラーになり 思うような結果が得られませんでした。 この他に、上手く移行できたものでも勝手にフォントサイズが変わってし まう(小さくなる)という現象がおきてしまいました。 何か原因をご存知の方がいましたら是非教えてください。 OSはVISTAでVBは6.0です。
BOC社に問い合わせるのが先
> OSはVISTAでVBは6.0です。
>>218 言いたい事はわかるけど気になったからBCC社のHP見てきた
>[必要システム]
>Visual Basic 6.0日本語版(Windows 95/98/Me/NT 4.0/2000/XP/Server 2003/Vista)
一応Vista対応謳ってるから
>>217 でFAだな。
VB6/ADODBのしっかりしたリファレンスのサイトか本ありませんか?
ソース中にUnicode文字列リテラルを入れるにはどう書けばいいんでしょうか? IDEのテキストエディタにU+9B73などをコピペすると化けてしまったんですが…
>>221 VBってコンパイラもエディタもS-JISしか対応してないんじゃないの?
むしろそんなことができたら怖いと思うがw
>>223 MSDNって読みづらくないですか?
でも、なんとか頑張って読んでみようと思います。
ありがとうございました。
>>224 辞書引くのって難しくないですか?
まで読んだ
リファレンスとして使いにくいと思うのは少数派?
229 :
デフォルトの名無しさん :2007/09/27(木) 15:41:03
すみません。 ちょっとお聞きします。 任意の期間を設定して、その期間内はForm1へ 期間外はForm2へ としたいのですが、どうすればいいのでしょうか?
何を言ってるんだお前は
ifかSelectでダメなのか? ???
232 :
229 :2007/09/27(木) 16:57:07
本当にすみません。 もうちょっと勉強して出直します><
VB6には連想配列はないですか?
Collection使えばいいんじゃね?
Dictionaryでもいいんじゃね?
Dictionary は Microsoft Scripting Runtime を参照設定すると 使えますぜ?
mscorlib.dllを参照設定するとHashtableが使えますぜ?
いやいや専用クラスをイチから自作が最強っしょ?
そこでVB8のとうじょうです
Dim test As New Collection test.Add "テスト","test" For Each test2 In test Debug.Print test2 Next この時に、"テスト"は取れますが"test"を取得する方法がわかりません。
CollectionからKeyを取得する方法はありません
それではRecordsetを使いましょうか?
243 :
デフォルトの名無しさん :2007/09/28(金) 23:24:36
外部に依存してもいいならScripting.Dictionaryとかでおk イヤならCollection2つ使って自作
244 :
デフォルトの名無しさん :2007/09/29(土) 18:00:06
[VB6 WindowsXP]
VB6&CAPICOMについて質問させてください。
VB6からCAPICOMを利用して、
ファイルの復号化を行おうとしています。
アルゴリズムはAESで、
暗号化は別の言語で施されており、
暗号化時に使用した
鍵とベクトルの情報はわかっている状態です。
MSDNや
ttps://www.netacademia.net/tudastar/default.aspx?upid=2781 こちらのサイトのサンプルを見ながら
復号化ロジックをVB6で実装しようとしているのですが、
なかなかうまくいきません。
サンプルを見た限りでは
鍵の設定は SetSecretメソッドで行っているようなのですが、
ベクトルの設定はどこで行えばよいのでしょうか。
何卒ご教授のほどよろしくお願いいたします。
245 :
baka ◆Jgn6bakat. :2007/09/29(土) 19:02:56
1
246 :
デフォルトの名無しさん :2007/10/03(水) 18:53:58
MSFlexGridで行ごとに囲っている線の太さを変えることは可能でしょうか? すべての線の太さは指定できるのですが、 4行単位で線を太くしようとしてもうまくいきません。 お手数おかけしますが、ご教授よろしくお願い致します。
>>246 オーナードローに対応していればオーナードローで
標準だと出来ないと思っている
248 :
デフォルトの名無しさん :2007/10/04(木) 18:04:17
VB6.0なのですが、アプリケーション初回起動時から30日たつとパスワード 入力しないと起動できなくなるようにしたいのですが、どのようにすれば いいでしょうか?どなたかお助けを下さい。
>>248 アプリケーションの最初の画面で
「初回起動時から30日たちましたか?」
「はい」 −>「パスワードを入れてください」
>>248 初回起動時にレジストリか適当な隠しファイルに日時を格納しといて
毎回毎回起動時に参照してきゃいいだけだろ
251 :
デフォルトの名無しさん :2007/10/05(金) 09:57:53
>>250 ありがとうございます。
初回起動時というのはどのように判断させればいいのでしょうか?
>>251 真性の馬鹿か?
レジストリ使うならレジストリ上にキーがなかったら初回起動とかって分かるだろ。
253 :
デフォルトの名無しさん :2007/10/05(金) 10:14:41
>>253 すみません。初心者でレジストリを参照とかさせた事がないもんで。
ファイルを使用してなんとかやってみます。
254 :
デフォルトの名無しさん :2007/10/05(金) 10:22:38
>>252 すみません。教えていただきたいのですが、
レジストリを参照する場合ですが、HKEYLOCAL_MACHINEのSOFTWAREの
MicrosoftのVisualVasicの中のKEYになるんでしょうか?
それらしいKEYが見当たらないのですが。
>>254 きみが自分で追加しようとするKEYのことだろ?
初回起動時→レジストリに書き込んでいない 状態で起動し、レジストリにKEYを挿入し初回起動日を入れる
2回目以降→初回に書き込んだ日付との差が初回起動からの日数
てことだろ?
初回起動時から30日たったらパスワードとかいうプログラム作成以前に Windowsとかもっと基本的なPCの知識を身につけたほうがいいと思うぞ。
257 :
デフォルトの名無しさん :2007/10/05(金) 14:21:55
すみません。 お聞きしたいことがあるんですが、 VB6でOLEを使わずに、Office製品を制御する方法ってありますか? 考えとしては、Office(Excel,Word)製品の名前をフォーム内の左側にリストボックスで表示させ、 右側にリストボックスから選択されたExcelやWord等を立ち上げて使用したいのですが。 丁度ギコナビとか、そのような感じでOfficeを制御できればと思っています。
259 :
デフォルトの名無しさん :2007/10/05(金) 23:13:13
vb6
260 :
デフォルトの名無しさん :2007/10/05(金) 23:17:33
途中で書き込んでもた VB6でMDBを操作してる。 で、MDB中のテーブルに含まれるイメージデータを個別のイメージファイルに取り出そうとしてる。 tbl : id, name, adrs, section, img... で、レコード毎に SavePicture rs.field(3).value, id.bmp みたいな処理にしてるんだけど、固まってしまう。 レコードセットとかちゃんとしてるし、他のフィールドデータをテキストで取り出すのはうまくいってる。 どうやればいいんですか?
261 :
デフォルトの名無しさん :2007/10/06(土) 16:42:07
VB6.0で作ったプログラムはVistaの次のOSでも動きますか? 開発環境はXPで動かすので、作ったプログラムだけが将来のOSで動けばいいんですが。 ドットネットはもう風前の灯火なので、いまさら乗り換えるつもりはないです。
>>261 マイクロソフトに聞けばいいんじゃね?
マイクロソフト以外にVistaの次のOSについて詳しく知ってるやついないし
>>260 テーブルにはバイナリデータが入ってんの?
なら、byte配列で取得したあと、
Openステートメントを使ってバイナリモードで書き込みするとか。
264 :
260 :2007/10/06(土) 23:45:37
>>263 はぁ、バイト単位で読み取らなきゃいけないんだ? 試してみるわ。
テーブルの定義を見る方法がわからないんだけど、フォームのピクチャコントロール?には、フィールド値からLoadPictureステートメントで呼び出して表示してるから、
外部保存もSavePictureでいけるかなと思ったんだけど。
MSDNのSavePictureのヘルプ見ても、適当な例が載ってないんだよな
>>246 msflexgridは使い勝手が悪いからサードパーティを購入することを勧める。
出来る事ならの話やけど、この時期に新規って事は無いよな。メンテだろうな。
太線にしたければ、1行おきにrowheightを変更して背景色を灰色にしてみれば?
こんな回避手段も可能だったかな?
昔、泣かされた事を思い出すなぁ。ってか・・・まだVB6以前って使ってるのか現役で?
凄いな!
266 :
265 :2007/10/07(日) 05:46:31
↑4行おき
>>264 TypeName(rs.Field("img").Value) = "Byte()"
ってことなんでないの?
268 :
267 :2007/10/08(月) 00:13:31
>バイト単位で ってところが引っ掛かっただけなんだけどさ。 イメージデータってことは普通に考えてバイナリのフィールドなんだろうし。
シリアライズされたオブジェクトかもしらんよ?
270 :
デフォルトの名無しさん :2007/10/08(月) 17:14:36
VB6.0の入門書を探してこのスレを読んだのですが、
>>227 の本は中々良さそうですけど、もう絶版なんですね。
ヤフオクとか見てもないようだし、アマゾンのマーケットプレイスだと
定価より高い上に送料がかかるのでなんだか買う気がしません。
古本とかでもかまわないのですが、現在さほど高くなく入手できる
お薦めの本があればどなたか教えていただけないでしょうか。
今更入門するなボケ
>>270 言い方は違うが
>>271 に同意
別の言語習得したほうがいいだろ。それに古本じゃ自力で探さないと無理だな。
お勧めしてもあるとは限らないし。
273 :
デフォルトの名無しさん :2007/10/08(月) 23:24:15
>>270 VBAならまだVB6互換だからAccessやExcelのVBAの本で勉強すれば?
これなら今から習得しても充分メリットはある。
VB6は既に過去の言語と思われているけれど企業システムでは未だ第1線の現役だったりする。
それになんだかんだ言ってもRADの一つの完成形だと思う。
.NETになって一貫性のない言語になってしまったので.NETのプログラミングをするなら
迷わずC#をお薦めする。
#VB6の参考書ならウチに沢山ある処分に困っているので引き取ってもらって
使ってもらえるのならありがたい。
274 :
270 :2007/10/09(火) 13:44:51
>>273 いろいろありがとうございます。とても参考になりました。
なるほど、VBAの本という手もあったんですね。
C#は.NETな仕事が自分の手元まで来れば提案してみたいと思います。
VB6の参考書の件については、譲っていただけるのであれば嬉しいです。
よろしければメールアドレス欄の方までメールをお願いします。
まあ実際は本屋さんに行くと今でも普通にVB6の本売ってるんだけどね。
でもまあ言葉はきついけど
>>271 の言うとおりだなあ。
276 :
260 :2007/10/09(火) 21:47:13
>>263 他皆様方
何とか解決できました。皆様ありがとうございました。
参考までにフロー。
dim BufferSize as long
dim Buff() as byte
フィールドのサイズ → BufferSize
getchunkでデータ取得 → Buff
出力ファイル、バイナリモードで開く
put # でBuffを出力
ファイル閉じる
って感じ。
277 :
デフォルトの名無しさん :2007/10/10(水) 19:54:25
マルチディスプレイについて質問なんですが、.netのほうだと、 System.Windows.Forms.Screen.AllScreens という方法で得られるようですが、VB6の場合はどのようにするのでしょうか?
278 :
デフォルトの名無しさん :2007/10/10(水) 23:19:21
Windows scriptにあるsplit関数を使いたいのですが 参照設定で何を選択すれば使えるようになりますでしょうか
splitってVB6にもあるだろw VB5なら自分で書けよ。 大して難しくないでしょ
[VB?、WindowsXP] まだ始めてもいないので、大雑把な質問をさせてください。 インターネットエクスプローラーで、あるサイトに飛び、そこでユーザー名とパスワードを入力する。 この単純な作業をワンクリックで実行させたいのですが、VBでそのようなことは可能でしょうか? 可能であるなら、頑張って勉強しようと思います。 ご存知の方、どうか宜しくお願いします。
281 :
デフォルトの名無しさん :2007/10/11(木) 17:23:36
>>280 可能 .NETでも余裕
引数つきでIEを起動してSendKeysのWaitモードを使うのが一般的かな
今更入門するなボケ
VB2.0開発環境を作ることになったのですが、 どんなPCを用意すればいいでしょうか Win98/Meくらいまでなら、動作しますか? たぶんインストールすら無理だろうと思いつつも、 既存のVB6や2005の環境等が壊れるのが恐くて、 Xpや2000へのインストールは試してません・・・
virtual pcでok
>>287 古いプログラムのメンテ用としか思えないがwww
289 :
285 :2007/10/13(土) 08:54:57
VB2.0の必須動作条件などを探してみたのですが、 見つからなくて・・・ どなたか情報や実績お持ちじゃないでしょうか
>>289 OSはWin3.1だろうからCPUは486DX,RAM8-16MB,画面はVGA-XGAだろ。
>>289 会社にVB2の箱があるから書くよ
■アプリケーションソフトの作成に必要なシステム
コンピュータ本体 80286以上を搭載しWindowsが稼働するパーソナルコンピュータ
基本ソフトウェア Windows 3.0A/3.02/3.1(リアルモードでは動作しません)
最小稼働メモリ プロテクトメモリ4MB以上
ハードディスク 14MB以上の空き容量が必要
フロッピーディスクドライブ 3.5インチ(2HD)または5インチ(2HD)
その他 Windowsに準じた日本語入力システム
本体に接続可能でWindowsに対応したマウス
うちでの実績は担当外だから詳しくわからないけど、開発環境はWindows95。
運用環境はWindows98のはず。
2000/XPはビートリーブ関係の問題で使えないとのことだった。
292 :
289 :2007/10/13(土) 10:11:25
すみません、わざわざありがとうございます 助かりました Windows95を準備して当たってみます
VB6でファイルを操作するときのエラー処理について質問します。 あるメソッドで、ファイルのオープン時にエラーが発生する可能性と、その他のコードでエラーが発生する 可能性があるとします。このとき、On Error Gotoを使ってエラーハンドリングする場合、次のように書きました。 Sub Foo() Dim fn as Integer Dim fileOpened as boolean fn = freefile On Error Goto MyExit open "filename" for input as #fn fileOpened = true ' エラートラップされる可能性のあるコード MyExit: if fileOpened then close #fn end if End Sub これを次のように書くと何か問題あるでしょうか? Sub Foo() Dim fn as Integer fn = freefile On Error Goto MyExit open "filename" for input as #fn ' エラートラップされる可能性のあるコード MyExit: close #fn End Sub 長々と書きましたが、つまりは「close #0を実行すると何が起こるのか?」がわからないということなんです。
>>293 そうするとファイルオープン時のエラーに対処できないんじゃ?
53だっけ?57?
まぁ50番台にしとく
On Error Goto 0あったほうがよくね?
出力バッファに残ってるデータの出力と、ファイルハンドルの開放なので、 開いてない番号指定してCloseしても何も起こらない。 Sub Foo() Dim fn as Integer fn = freefile close #fn End Sub エラートラップはそのモジュールと、そこから呼ばれる下位モジュール だけで有効じゃなかったっけ? 下位モジュール呼ぶ前にエラートラップ外したい段階でOn Error Goto 0 いれればいいんでね? 暗黙の初期化とはいえ、上の文の方でOn Error前に fileOpened = false が無いのが気になる。
296 :
293 :2007/10/16(火) 10:08:21
>>294 エラーの種類によらず、何かのエラーが起こったら処理を中断して終了するので、特にファイルオープンエラー
の場合かどうかを調べなくてもいいんです。
On Error Goto 0は
>>295 さんの言うとおり、いらないと思います。
>>295 情報ありがとうございました。ひとつのメソッドで複数のファイルを操作するとき、オープン済みフラグを
使用すると煩雑になるので困っていました。
オープン済みフラグは無しで行きます。
それと初期化の件ですが、やっぱりあったほうがいいですかね…。
Functionのdefaultの戻り値はFalseで、ローカルな数値系の変数の初期値は0、BooleanならFalseという
のを使いまくりです…
>>296 VB6のデフォルト値は信頼できるから、どんどん使っていいよ。
>>296 まぁ、エラートラップが1個ならそれでいいかもね
でもエラー内容をCALL元に帰すにしろ、帰さないにしろ
MyExit:内で
エラークリアはしておいた方がいいと思うがな
エラークリアとか必要ないし
300 :
デフォルトの名無しさん :2007/10/18(木) 08:27:55
>>292 > Windows95を準備して当たってみます
今時のPCで作業するんなら、XP+仮想化ソフト上のWin95という方法もあるよ。
301 :
デフォルトの名無しさん :2007/10/18(木) 22:27:38
質問がありますので宜しくお願いします。 TreeView(VB6仕様)でノードを追加している間、処理の高速化のために再描画処理を回避させたい(=追加処理が終わってからいっぺんに再描画させたい)のですが上手くいきません。 以下の2パターンで試してみたのですが効果がありませんでした。 ・パターン1 Ret = LockWindowUpdate(TreeView1.hwnd) ↓ TreeView1にNodeを追加する処理・・・ ↓ Ret = LockWindowUpdate(0&) ・パターン2 Ret = PostMessage(TreeView1.hwnd, WM_SETREDRAW, False, Byval CLng(0)) ↓ TreeView1にNodeを追加する処理・・・ ↓ Ret = PostMessage(TreeView1.hwnd, WM_SETREDRAW, True, Byval CLng(0)) 両パターン共、戻り値には1が来るのでエラーにはなっていないと思うのですが・・・(?_?;) 何卒宜しくお願いしますm(__)m
VBを使って簡単なフラクタル画像を作ろうと思っているのですが、円を使ったフラクタルが作れなくて困っています。 コッホ曲線は自分で作ることができました。 どなたかヒントだけでも教えてもらえないでしょうか? よろしくお願いしますm(_ _)m
で、具体的にどこのヒントがほしいの?
対応するEnd Ifに移動する機能ってないですよね? そんなアドインとかありますか?
>>306 UXGAでも見れないくらい深く長い谷が存在する
ある表示中のフォームのハードコピーを、 プリントできるサイズに縮小して印刷する方法はありますか? IrfanViewの印刷で言うところのBest fit to page (aspect ratio)です。
>308 mcopyみたいな外部アプリを使ったほうが楽でないかい?
VB6で、他アプリケーションのフォームのラベル等を 英語から日本語に書き換えるアプリを作っています。 で、チェックボックスのラベルの書き換えを行うときに躓きました。 SendMessage hWndX, &HC, 0, ByVal "あいうー" でラベルの文字は変わるのですが、 この時ラベルの幅が無駄に広く、隣にテキストボックスが 有るのですが、このテキストボックスの上にラベルの空白になっている部分が重なって、 テキストボックスが隠れてしまいました。 チェックボックスのZオーダーを下げるか、 チェックボックスのラベルの幅を小さく出来れば解決できると思ったのですが、 SendMessageで送れるコマンドでサイズを変更するとかZオーダーを変更する方法はありますでしょうか? お願いします。
312 :
デフォルトの名無しさん :2007/10/31(水) 15:18:35
vb6で例えば金額が1234円ってあれば切り上げで1300円と答えを出したいのですがどうしたらいいでしょうか?初心者な質問ですみません 例 1234円⇒1300円 1299円⇒1300円 1300円⇒1300円 1301円⇒1400円 にしたいのですが・・・
金額が4桁固定なのか、桁変わるのか知らんが 4桁なら dim Mony as long Mony=金額入れる msgbox int(((Mony /100) +0.9999)) *100 こんなんじゃダメかな?
>>312 数式考えれ
((x-1)\100+1)*100
315 :
デフォルトの名無しさん :2007/10/31(水) 15:44:14
VB6.0、SPREAD3.0Jなんですが 以前まで表示されていた列のデータが、急に表示されなくなりました。 全てではなく、特定の1、2列程度。 プログラムは変更しておらず、デバッグするとSetTextで データのセットはしていました。 プログラムの修正をしていないのにも関わらず、今まで表示されていたものが 表示されなくなる原因がつかめません。
>>315 >、急に表示されなくなりました。
って一言で書いて歩けど、絶対に、絶対に、絶対になにかしているから結果が変わった。
それは文章に出てきていないし、俺たちが分かるものじゃない。
がんばれとしかかけないぞ
>>315 レコードとかから取ってきてるんだろうけど
ヴァリアントの変数に入れてる?
入れてなかったら、ヴァリアントの変数に一旦収納するかしてみ
MSFlexGridなんですが、カンマ区切りの数字を 正しくソートする方法はありますか? .sortに、flexSortGenericAscendingや、flexSortStringAscendingや flexSortNumericAscendingなども設定してみたんですが、 いまいち法則性がわからない結果になってしまいます。 .colを間違っているとかは無いとは思うのですが。
319 :
315 :2007/10/31(水) 16:16:14
プログラムの修正はしていません。 何もしていないのに表示されなくなるってことは 環境周りかとも思うのですが。 WindowsUpdateを定期的に実行しています。 あと、Variant型にはしてないです。 でも今までそれで表示されてたんですよね。 一応Variantに変換してセットしてみたんですが、 やはり表示されませんでした。
320 :
デフォルトの名無しさん :2007/10/31(水) 16:17:05
313さん.314さんお答えの方ありがとうございました! うまくできました。本当にありがとうございます
321 :
デフォルトの名無しさん :2007/10/31(水) 16:52:16
>>318 追記ですが、Format(price, "##,###,###")
のような処理をした文字列です。
これのFormatの処理をやめて、数字としてソートすると正常に
ソートができます。
322 :
デフォルトの名無しさん :2007/10/31(水) 16:56:39
なんどもすいません 312の質問でSQLで書くのは可能なことでしょうか? 同じような質問ばかりですみません・・
323 :
313 :2007/10/31(水) 16:57:53
>>320 おーいす
ちなみに0.9999の箇所を0.8000とかに変えると
1捨2入とかもできるぞ〜
あと100の値は繰り上げ用の桁な(繰上げする桁が百の位だったので)
10^(ベキ)n(繰り上げる桁数)とかすると良い
>>319 ソース見てないからなんとも言わんが
ちゃんとデータ収納されてるの?
あと変数にマウスオーバーした時の値(黄色い枠が表示されるじゃん)が「”」で囲われてるか?
>>321 それって・・ホラ
新しいフォルダ(1)
新しいフォルダ(10)
新しいフォルダ(2)
・・・
見たいな感じじゃね?
326 :
デフォルトの名無しさん :2007/10/31(水) 17:14:46
>>324 いえ、そういうような法則性は一切見られません。
1,096,400 1,199,240 1,201,250 1,757,620 1,360,810
1,800,190 1,052,100
みたいな感じになってしまいます。
>>321 なら非表示の列に数字を突っ込んでソートさせれば?
328 :
デフォルトの名無しさん :2007/10/31(水) 17:25:21
>>326 さらに試してみると、毎回ソート結果が微妙に入れ替わるようです。
ただ、数字の塊として見ると、ある程度までは並んでいます。
>>326 プライスってことは、その前に商品コードや品名・規格・単位などあるんですよね?
それでソートされているのでは?
正の整数のみなら 先頭を空白で埋めて全ての値の文字数を合わせて文字列ソート
皆さんありがとうございます。
>>329 プライスの列だけでソートしてみているのですが、おかしくなるようです。
>>330 なるほど、そういうやり方もあるのですね。
>>324 さんのいうようなケースであればそれでいいとは思います。
ただ、今回の場合は、結果が不定な感じで法則性が
よくわかりませんでしたので、
>>327 さんのやりかたを試してみました。
.ColWidth(列) = 0で、列を非表示にした列に、元の数字を入れて、
そちらでソートしてみたところ、うまくいきました。
本当はもうちょっと検証すべきかもしれないのですが、
とりあえずはこのやり方でやってみたいと思います。
少し法則性がわかったかもしれません。 1,234,567や2001/12/23の場合、,や/という異物より まずは手前の数字部分だけでソートができていて、 異物以降は不定になるという事かもしれません。 今見てみると、カンマ区切りの数字以外でも、 上記のような日付も似たような不思議な挙動になっています。
>>332 イミディエイトウィンドウで
? val("1,234,567")
? val("2001/12/23")
するとソートされている順序がわかるかと。
VB6で、flashのactiveXコントロールを使用してswfファイルの再生は出来たのですが、 flvファイルの再生が出来ません。 swfファイルと同じファイル指定方法ではダメなのでしょうか?
VB6.0sp6について質問です 新規でプロジェクトを作成し、保存しようとすると C:\Program Files\Microsoft Visual Studio\VB98 がデフォルトで表示されます これを d:temp 等に変えることはできますでしょうか? よろしくお願いします
>>334 Flash(というよりSWF)を作る際に、FLV再生する機能が使えるということなので、
FlashでのFLV再生では、各自(ニコニコやYouTubeなど)がFLVを再生するSWFを作っている。
ちなみにコーデックとスプリッタが揃っている(WMPで再生できる)環境なら、
ActiveMovieなどでAVIやMPEGなどと同様に再生できる。
>>335 vb6.exeのショートカットを作って作業フォルダ変更
338 :
デフォルトの名無しさん :2007/11/02(金) 10:13:13
VB6(SP6)を使っています。 FlexGridのソートについての質問ですが、 2列をキーにしてソートする場合 .Col = x .ColSel = y .Sort = flexSortStringAscending でできるのですが、 3列をキーにしてソートする方法はあるのでしょうか?
>>338 隠しフィールドに任意の列数文の値を文字列化(と桁数合わせて)してそれでソート
340 :
as :2007/11/02(金) 14:30:58
よろしくお願いします。 VB6で作成したシステムをC:\Program Files\aaaとC:\Program Files\bbb にインストールしました。 1つのまったく同じシステムですが状況によってDBの接続先を変えたくてです。 DBの接続先はiniファイルを見て判断しています。 プログラムのiniファイルの参照パスはapp.path\SystemName.iniです。 このときaaaフォルダにインストールしたexeを実行しても bbbフォルダにインストールしたexeを実行しても 後からインストールした方のiniファイルを見に行ってしまい結局同じDBを参照してしまいます。 app.pathをやめて./SystemName.ini と ./を使うことも考えましたが./はシステム操作中にカレントディレクトリが 変わってしまうことがあるっぽいということを聞いたのでやめました。 自分だけが使うなら都度iniファイルを書き変えるのですが使う人が素人ばかりなのでそういうわけにもいきません。 何かいい解決方法はないでしょうか?よろしくお願いいたします。
>>340 プロジェクトがABC.vbpなら、それをコピってABC2.vbpを作る
2つのプロジェクトから別個にABC.exeとABC2.exeを作って
インストーラもそれぞれ別個に作る
C:\Program Files\aaa フォルダ: 実行(仮).exe SystemName.ini SystemNameの中身(仮):Datapath=c:\Data\DataA.mdb C:\Program Files\bbb フォルダ: 実行(仮).exe SystemName.ini SystemNameの中身(仮):Datapath=c:\Data\DataB.mdb ってこと? app.pathで取った情報の終端に既に「\」があって C:\Program Files\aaa\\SystemName.ini こんな風になってる事はない?
343 :
as :2007/11/02(金) 16:46:05
ご回答ありがとうございます。 システムはEXEを起動してメニューを表示し 各機能はDLLを呼ぶ形で実行しています。 メニュー画面から Set l_obClass = CreateObject("aaaProg1.class_aaaProg1") l_obClass.Show_aaaProg1 と aaaProg1.dll を呼ぶ この場合、DLLも名前を変えて作成し直し上記プログラムも Set l_obClass = CreateObject("bbbProg1.class_bbbProg1") l_obClass.Show_bbbProg1 のように修正するべきなのでしょうか? プロジェクトをコピーしてABC2.exeを作りましたが現象がかわりませんでした。 重ね重ね申し訳ございませんが、よろしくお願いいたします。
かわいそう。 プログラミングしてる人も、提供される人も・・・。
345 :
as :2007/11/02(金) 17:11:14
>>342 様
ご回答ありがとうございます。
まったくそのような感じです。
ステップ実行して確認してみましたが\\とはなっていませんでした。
そもそもiniファイルをどうやって読んでる(オープンしてる)のだ?
347 :
as :2007/11/02(金) 17:35:30
>>346 様
APIのGetPrivateProfileString関数を使って読んでいます。
>>343 DLLも各aaaとbbbにあるん?
てか
EXEで取得したAppPathの文字列をDLLに渡したら?
参照設定辺りでうにゃうにゃになってるんでね?
>>347 ・オープンしようとしているiniファイルのパスを確認
・GetPrivateProfileStringを抜けたときに取得された値を確認
・それぞれのiniファイルのエントリが本当に正しいか確認
しろ。
それから、iniファイルだけが違うインストーラを作るのは、VBのプロジェクトをコピーする必要ないぞ。
どのインストーラ作成ツールを使ってるのか知らないけど、iniファイルを入れ替えるだけでいい。
同じActiveX DLLを使おうとしてるなら、同じものを複数の場所にインストールすることはできない。 後からインストールした情報で上書きされる。
351 :
as :2007/11/02(金) 18:33:30
みなさまありがとうございます。
>>350 様のおっしゃったことが
まさに当てはまっているような気がしますので、DLLも名前を変えて
つくり直しています。
つか、exeを2つに分ける必要無いだろ…常考… iniに記すSectionかKeyを分けて接続先を変えればいいだけじゃないか…
VB6.0のエディタでは、矩形選択できますか?
無理でしたか。文字列選択を矩形でできたら便利だなあと思ったことがあったので。 ありがとうございました。
そんなアドインもあった気がする が、標準でないなら無理だな
矩形が必要だったことがついぞ記憶に無い
358 :
デフォルトの名無しさん :2007/11/18(日) 15:26:36
えっとプログラムを作るのにまずいるソフトとかあるのですか?まったくの初心者ですが、真剣にやってみようと思っているので教えてください><;
本屋行って良さそうな本を探し、買い、それを盲信して読む。
保守ageしたいからってそんな書き込みしなくても。 【真剣な質問だった場合】 このスレに書き込んでるんだったら、Windows と Visual Basic が要ります。 Visual Basic 2005 Express Edition だったら Microsoft のサイトから ただで入手できます。 ていうかスレ違いのような気がするので総合質問スレッドへお願いします。
362 :
デフォルトの名無しさん :2007/11/19(月) 03:38:17
みなさんありがとうございました。スレ違いだったみたいですみません><がんばってみます!
Dim 変数 As String Do until データがEOF 変数 = 変数 & データ & vbCrLf データ次の行へ Loop こういう処理の流れでできるだけ早くできる方法って何になりますか? 現状データが5000件くらいになると処理が遅くなってきまして・・・
すいません、VB6.0です。
>>363 5000くらいなら文字列を配列&改行で持っておいて最後にJoinのほうがマシじゃない?
>>364 いつもはVB SourceBookの「文字列を高速に連結するクラス」を使ってる。
同じようなものが「VB 文字列 高速 連結」で検索すると見つかる。
ありがとうございます。見つけることができました。 処理速度が尋常じゃなく向上してなんとかなりそうです。
つ StringBuilder
370 :
デフォルトの名無しさん :2007/11/19(月) 19:13:45
設定が読み込まれません。 Windowsのスタートアップに登録してWindows起動時にプログラムが 起動すると設定が読み込まれていません。 一度、プログラムを終了してから再度起動すると設定が読み込まれます。 設定の保存方法はXMLファイル(app.config)になります。 使用しているVBのバージョンはVB2005です。
今既存のソースを保守してるんですけど 違うフォームに同じ名前のpublic変数がありまして この場合の挙動ってどうなるか知りたいのですがどうなるんでしょうか? いっそのことprivateに変えられたらいいけどソース書いたの辞めた人だし かといって挙動を追うのも面倒だorz
それぐらいも試せない奴が保守するんだ・・・
>>374 フォーム側が優先されるんじゃなかったけ?
ローカル>自public>他public
>>374 全部テストして値確認するのも面倒だし現状ちゃんと動いてるから
ぶっちゃけ今のままでも良いといえば良いんだよね。
無駄な変数とか探してたらそういうのがあったから出来たら直したいと思っただけで。
>>375 なるほど。ということはprivateに直してもよさげな気がしました。
ありがとうございます。
>>373 CreateObject("System.Text.StringBuilder")
>>378 .NET Framework必須じゃね?
動いてるものには触らない
それがたとえ整理しきれていない糞ソースだったとしてもだ
触りたくてもソースがねーよwww サーセンwwww
VB6で作成した実行ファイルで、単体だけで一応どんなPCでも動くんでしたっけ? 日本語の文字化けはVB6jp.dll同じフォルダに入れておけばいいのは前に教えてもらったんですが
使うDLL/OCXは必要
最低でもMSVBVM60.DLLがあれば一応動くはず
>>385 それってWindowsに標準でインストされてるじゃん
98はVB5のそれがあるけどVB6のそれはなかった気がする
>>387 ググってみたが、過去の情報ではMSVBVM60.DLLは元々はないみたいだね。
でも俺も外部のDLLやOCLを利用しない、基本的なプログラムだけでEXE作って
ZIPで中にVB6jp.dllだけ入れて会社の支店に配布したけど、特にランタイムもなにもインストールせず
使えてたようなんだけど何でだ?OSは2000とXPのみだけど、今はもうWindowsUpdateに組み込まれてるのか…
それは冗談で言ってるのか?頭が悪いのか?
>>388 それ以前に組み込まれている可能性もあるし
SP2いれたら勝手に入ったかとおもう
参照設定やCreateobjectを使わないで、表示言語も英語にしとけば 間違いなく実行ファイルだけでどのPCでも動くな。OSが98以前は分からんが。
つまり2000とXPなら大丈夫ってこと?
確かめてないから知らないけどつまり、 Win98にVB5は入っているがVB6は入ってない 2000/XPの場合はSPによるらしいがいつの間にかVB6が入っている ってことじゃね?適当なパーティション用意して調べた方が早そうだな 仮想PCの方がいいか
396 :
デフォルトの名無しさん :2007/11/29(木) 16:50:10
[VB6.0] フォント設定ウィンドウで文字セットのリストボックスで任意の言語を設定できるようになってますが 同じ事をFont.Charsetプロパティで行うにはどうすればいいのでしょうか? ヘルプを見ても0,2,128,255の値しか載ってませんでした
>>396 Googleで wingdi.h SHIFTJIS_CHARSET
でいいんじゃないかな
398 :
デフォルトの名無しさん :2007/11/29(木) 21:18:28
あんあん
399 :
デフォルトの名無しさん :2007/11/29(木) 21:24:56
Dim ti As Integer Private Sub Command1_Click() Image1.Visible = True Timer1.Enabled = True Text1.Text = Time ti = 0 Text2.Text = "" Text3.Text = "" End Sub
400 :
デフォルトの名無しさん :2007/11/29(木) 21:25:57
Private Sub Command2_Click() Text2.Text = Time Text3.Text = Str(ti) Timer1.Enabled = False Image1.Visible = False End Sub Private Sub Command3_Click() End End Sub Private Sub Text1_Change() End Sub Private Sub Timer1_Timer() ti = ti + 1 End Sub 質問ですが、このソースでクリア(空白?)の >>Text2.Text = "" Text3.Text = "" 等は書いても書かなくてもいいのでしょうか?
自分の思ったように書けよ
402 :
デフォルトの名無しさん :2007/11/29(木) 21:34:58
ではなくても…宜しいでしょいかね?
403 :
デフォルトの名無しさん :2007/12/01(土) 00:52:43
おっはよー。 VB6のActiveXコントロールをWebページに組み込んで、 複数ファイルのアップロードをしようと画策しています。 BFUpコントロールが理想に近いものでしたが、 警告ダイアログが出たり、ファイルごとにパラメータを変えたりできないのでちと断念しました。 アップロードされたファイルを受け取るサーバ側の処理はすでにできておるので、あとはVBでコントロールを作成するのみです。 httpのputっぽいイメージでアップロードさえできればあとはこっちで何とかするんで、 VBによるhttpアップロード処理が書かれたサンプルがあるサイトはありませんか。 もしくは検索キーワードを教えてくれると喜びます。
404 :
403 :2007/12/01(土) 20:19:52
自己解決。 BASP21にバイナリ吐きとソケット通信があったんでそれを使用。 皆さんありがとうございました。
[VB6.0] 1ヶ月前から手が付けられなくすごく困っています VB6.0でつくったソフトウェアを公開したのですが、他のPCではほとんどがエラーで終了してしまうそうです、 こちらでどうなってるのか見たいのですが仮想マシンを入れるようなお金は無く、 友達に協力してもらおうと思っていたのですが友達の環境(VB6.0導入済み)では問題なく動いてしまい、参考になりません 色々調べてみて「Dependency Walker」を使い、出されたDLLをEXEのフォルダに入れるというのを見つけたのですが、それで動作するのかまったく検討が付きません どうすれば他のXPで動くようにできますか? (ディストリビューションウィザードは使いたくありません)
俺は必要なDLLとかはEXEのリソースに組み込んで、 ファームが表示される前にシステムフォルダにコピーしたりregsvrでレジストリ登録したりしてる
取りあえず「Dependency Walker」で表示されたDLLを相手のPCにインストールしてもらえれば動くのでしょうか? それがよく判らないのでどうしようもない・・・ これらが用事されました 「ADVAPI32.DLL;GDI32.DLL;KERNEL32.DLL;MSVBVM60.DLL; MSVCRT.DLL;NTDLL.DLL;OLE32.DLL;OLEAUT32.DLL;RPCRT4.DLL;USER32.DLL」
それだけなら今のXPで普通に動くと思うんだけどなぁ。EXEだけで。 Formに日本語表示させてるならVB6JP.dllがないと文字化けするくらいで。
あんあん
>>410 どうでもいいけど、ページ開いて本文にリンクがないのにまず萎え。
メニューからSoftwareを開いて、そこにダウンロードリンクがないのが萎え。
moreをクリックして、そこにもダウンロードリンクがないのが萎え。
なので、ダウンロードしてない。
>>410 ソフトの表部分には、カスタム OCX を使ってるんだよね?
ドキュメントを見ると、Office XP Web コンポーネントらしいけど
こいつが、MSComCtl.ocx を使っている。
Vector あたりで、VB のランタイムを落としてきてインストールすれば
動きそうな気がする。
あー
>>412 は違うかも。
OWC.DLL をフォルダにコピーするだけじゃだめ。
regsvr32 でレジストリに登録しなきゃたぶん動かない。
ディストリビューションウィザードじゃなくて、msiでインストーラ作れよ
というかOCXとか外部DLL使うのを極力減らす方向で頑張った方がいいんじゃない?
ディストリビューションウィザードで とりあえずコンポーネントの依存性だけでも 確認するのが先決じゃね?
>>414 それが嫌だって言ってるから相談してるんじゃんか。
インストーラーじゃなくっても、リソースに組み込んで
LoadResDataで起動時最初にコピーしてregsvr32で登録するようにすれば大丈夫
なんだ、ディストリビューションウィザードを使いたくないんじゃなくて、 インストーラを作りたくないのか。
Windows XP以降でしか使えなくしろと? つか、なんでインストーラ作りたくないんだよ?
数々の協力ありがとうございます、HPの方は生まれて初めて作ったので多少不安な部分があります、これから改善していこうと思っています、今は勘弁してくださいw 説明が間違っていました「ディストリビューションウィザードを使いたくない」ではなく「インストーラを作りたくないです」 理由はあまり好かれる形じゃないと思ったことが理由です、なので、できればZIPで一まとめにしたいと考えています 動作問題の解決として「OWC.DLL」のレジストリ登録をできるようにしてみます、 コンポーネントの依存性についてなんですが「Dependency Walkerで使用されたDLL調べる」ということとは違うことでしょうか? コンポーネント依存性についてネット検索してみたのですが依存性の調べ方がイマイチ判りませんでした、どのように調べるのでしょうか? 長文失礼しました
コンポーネントの依存性の調べ方を読み落としていました すいません、m(_ _)m
>>420 あんまVBとは関係ない話題だけど、製品じゃなくってフリーソフトで
インストール必須の仕様だとそれだけで使いたくなくならない?俺だけ?
んじゃ、インストーラ不要なように作るか、違う言語で作れよ
行儀の悪い事するからVistaで動かなくなるんだ 素直に作れよ
素直に考えると.net移行が正解
Vectorとかに転がってるVB6のRuntimeセットをダウンロードさせればいいんじゃね。
.net(苦笑)
もういまどき2000以下のやつはそういないし だいたいランタイムはインストールされてるだろ ない奴は別途ダウンしてもらえばいいと思うぞ 業務ならインスコしてもらえばいいだけだしな でも・・・俺も.netに移行したほうがいいと思うんだが・・・・
色々どうもw .Net移行も考えたことありましたが趣味で作ってるだけなんですw それにプログラム作り始めて1年、本も読まず完全独学でがんばっています
音声読み上げで困っています。 開発言語:VB6.0 OS:Win2000 Voice Text コントロールを使用して音声を読み上げる際に使用される 音声辞書を編集することは可能でしょうか? (ユーザー辞書を作成し、それを元に読み上げをさせる方法等) 出来れば、辞書の登録や編集もVBで行いたいのですが。 具体的には、デフォルトのままで、"11A" を読み上げさせると、 "ジュウイチアンペア" と読みます。 これを、"イチイチエイ" と読ませたいのです。 フリーのソフト等で辞書登録してその通りに読ませることが出来るもの があるので、何かしら方法があると思うのですが。。。
>>431 音声辞書の仕様はすでに把握していて
それをどうすればVBで出来るのかって話なんだろうな?
辞書の仕様についてVBスレで質問してるんなら帰れ
だが断る
431です。 どうすればVBで出来るかというところが知りたかったのですが、 辞書の仕様を分かっているのかと言われると分かっていないので 勉強しなおしてきます。 失礼しました。
そこで初音ミクですよ。 流暢な歌声でデスマプロジェクトも和む。
プログラムの話ではないんですが、現在XP HOME SP1を使用して趣味レベルでVB6.0を活用しています。 ところがPCの調子が悪く、買い換えようと思ってるんですが、現在はXP SP2か、Vistaしか販売していないようです。 XP SP2でも、Vistaでも、VB6.0は問題なく動作するものでしょうか? マイクロソフトのページだと、Vistaでも動作する、とあるのですが……XP SP2に関してはページが見つかりませんでした。 XP SP2だと、win98あたりのツールが使えない等の話を聞いていたので、SP1のまま使用し続けていたのですが、 こういうのはただの取り越し苦労でしょうか? とりあえずVB6.0の動作だけでも、教えていただければと思いレスしました。 よろしければ、どなたかお教えください。
>>436 既に回答レスついてるが、俺も VB6+XPsp2 だけど、全く問題ない。
むしろ、Vista環境に変えたとき今までのソースがそのまま使えるかどうかの方が気になる。
Vistaでも問題ない。 ソースは探せばある。
あー、VB6そのものがVistaで動くかどうかといえば、ちゃんと動くという話であって、 今までVB6で作ったアプリがVistaで何の問題もなく動くというわけではない。念のため。
>>440 あれ?VistaでIDEの動作保証はされてないんじゃなかったっけ?
VB6, Vistaでぐぐると、トップに表示されるページくらい読もうぜ。
>>442 読んでも分かんないから教えてくれって言ってるのか?
は?俺は教えてくれなんて言ってないが。
VB6で、イミディエイトウィンドウの内容をコードで消すことはできますか? 実行するごとにCtrl+A、Delは疲れました・・・
>>445 Debug.Printしなきゃいい
つか、わざわざ消す意味がわからんが
447 :
デフォルトの名無しさん :2007/12/11(火) 15:50:36
>>445 できるよ。アドイン作ってCtrlA,DelをSendKeys
別件質問ですが、
Application.VBE.SelectVBComponents.CodeModule.CreateEventProc("Click", "Button")
ここの、Buttonコントロールに何のイベントがあるか、コードが存在すればMemberで所得できますが、
未知の状態でイベントを列挙する方法ありますか。
449 :
デフォルトの名無しさん :2007/12/11(火) 19:02:01
>>448 やろうとしていることは似てます。全てのイベントプロシージャにdebug.print "Proc_EventName"
としたいのです。その例のように、すでに存在していれば、Membersを使えばできます。
存在しないときはMembersにはないので、そのときどうするかと言う方法が知りたいです。
Buttonとかならせこせき書き写せばいいが、WithEvensにしたときなど全て網羅するのは
大変なのでソース中で知りたいわけです。
450 :
デフォルトの名無しさん :2007/12/11(火) 21:19:22
VB6で配列の一部分を別の配列にコピーする方法を教えてください。 C言語のmemcpyのような感じで、反復を使わなくても良い方法です。 よろしくです。
Clone
452 :
450 :2007/12/11(火) 21:34:57
453 :
436 :2007/12/11(火) 22:41:21
>>437-440 ご回答ありがとうございました。
これで新PCへの乗り換えも安心して出来ます。
vistaは他の多くのソフトの動作が怪しいようですので、とりあえずはまだXP SP2で行こうと思います。
454 :
デフォルトの名無しさん :2007/12/11(火) 22:51:32
Oracle Database 10g R2に附属のODBCドライバは VB5 SP3のRDO経由接続は問題ないでしょうか? Oracle7.3からの移行を考えていますがVB5のRDOのバージョンで 10g R2附属のDBCのバージョンが相性が悪いという事はないでしょうか? VB6でRDOのバージョンが上がっているのでVB5のRDOは最新のODBCに 対応しているのかいないのかを知りたいのです。どなたかご教授ください。
455 :
デフォルトの名無しさん :2007/12/12(水) 00:02:59
>>448 私がばかでした。できそうですので勉強してみます。
456 :
デフォルトの名無しさん :2007/12/12(水) 23:26:54
[VB6.0WIN2000] ORACLEから抽出したデータをEXCELに出力するPGが、遅くて使い物になりません。 具体的にはこんな感じです。 ・VBからSQLを実行し、データを抽出。(RecordSetで持たせる。) ・1行EXCELに出力したらmovenextして、EOFになるまでひたすらループ。 配列を使えば良い気もするけど、EXCELに出力するときに遅ければ意味がないのかな? ちなみに1000行出力するのに、4分かかります。 高速化する良い方法ってありますか??
てかEXCELでなくてCSVではだめなのか? EXCELのSHEET1にSHEET2を参照するようにして 吐き出したCSVをSHEET2に取り込むような処理書いてみるとか DoEventとかループの中に書いてると極端に遅くなるがその辺はどうだろう?
すいません。 知らないなら黙っててください。
>>457 Excelをデータベースとして扱ってみたら?
461 :
デフォルトの名無しさん :2007/12/13(木) 00:43:20
>>457 Excelの出力時、1セル毎に吐き出していて、更に、表示更新がON(プロパティ名は忘れた。。)
の場合、遅いよ
表示更新を出力時に止める(終わったら戻す)か、配列に格納して、セル範囲に代入で激速だ
やってみれ
462 :
457 :2007/12/13(木) 01:11:31
>>458 指摘通りDoEvents使ってます。
ありがとう。
>>460 500000件ほどデータがあるので、EXCELに入らないのです。
>>461 配列に格納→EXCEL代入は良さそうですね。明日調べてみます。
俺は答を知っているので、この回答の全てが頓珍漢であることだけは言っておく ヒントはExcel側にある
>>462 > 500000件ほどデータがあるので、EXCELに入らないのです。
遅いとかそんなんじゃなくて不可能じゃないのか?!
流石にその件数でDoEvents けしちゃったらキャンセルボタンとかも使えなくなるだろうし 適当な変数でも持ってループ10回に一回と加の割合でつかうとか対策取るのがお勧め
クリップボードを使えば速いよ
>>457 市販コンポーネントのExcel Creator使うと高速。
>457 Excelをどうやって使ってるのさ? Set xlsApp = New Excel.Application みたいな感じ? debugで止めてみればわかるが、これだとExcelの起動もデータの書き出しもめちゃ遅です。 おいらは>457使った。 速かったよ。
てす
471 :
デフォルトの名無しさん :2007/12/16(日) 07:36:29
VB6.0で質問です ある時間が来るごとにbeep音を鳴らすというプログラムを作りたくて それも一定間隔の時間ではなく、最初は実行して10分後、次はそ5分後に beep音を鳴らすの繰り返し、要するに、実行してから 10分→5分→10分→5分→10分→5分→10分→5分・・・・・・ という時間間隔でbeep音を鳴らすようなことは可能ですか? もしやり方分かる方が頂けると助かります よろしくお願いします
>>471 Option Explicit
Private WithEvents Timer As VB.Timer
Private timerEventAtTime As Date
Private Sub Form_Load()
Set Timer = Me.Controls.Add("VB.Timer", "Timer")
With Timer
.Interval = 500 '.5[s](詳しくはサンプリング周波数とかみて)
.Enabled = True
End With
Call onEventAtTime
End Sub
Private Sub Timer_Timer()
If DateDiff("s", Now, timerEventAtTime) = 0 Then Call onEventAtTime
End Sub
Private Sub onEventAtTime()
Static flag As Boolean
flag = Not flag
Call Beep
If flag Then
timerEventAtTime = DateAdd("s", 10, Now) '逢えて秒.
Else
timerEventAtTime = DateAdd("s", 5, Now)
End If
End Sub
簡単な質問には親切に答えるおまいらカワユス
簡単な質問と単純な質問はちがう 簡単な答えと単純な答えも違う
477 :
デフォルトの名無しさん :2007/12/16(日) 17:50:36
VB6.0での質問です。 VBのプログラム内であるexe(Aとします)をshellで起動した後、 Aに対してkeycodeを送りたいのですが、どうしたらいいのでしょうか? 普段はAをキーボード操作にて使用しているのですが、ある計測器からの、 COMポートからの信号によって特定のキー操作と同じ動作をAにさせたいのです。 shellでAを呼び出したときプログラムのIDを取得して、そのIDに対して何とか すればいいのではという想像はつくのですが、実際のやり方がわかりません。 どうぞよろしくお願いします。
appactivate
SendInput
keybd_event
482 :
◆MWwfaua4zc :2007/12/17(月) 04:19:03
あ
483 :
◆J7zvtF5pA2 :2007/12/17(月) 04:20:15
あ
484 :
デフォルトの名無しさん :2007/12/17(月) 04:21:19
#羽曳野最強
a
oo4oを使って、oracleと接続。テーブルの中身をsqlでOradynasetにセットして、内容を出力してるんだけど、timastamp型の項目をOrafieldメソッドのValueプロパティで出そうとすると、「オブジェクトはメソッドまたはプロパティをサポートしてない」って言われる。 OraTimestampとか使わずにダイナセットから取りだす方法ってある?
excel vbaスレだとスレ違いになりそうなので、こちらで質問す。 今現在、instr関数を使って「""」の含まれている文章を検索するにはどうすればいいんすか? 具体的には、検索文字列で「<p class="TXT12"><a class="video" href="watch/sm」というのを使いたいんですけど "<p class="TXT12"><a class="video" href="watch/sm" とすると、"<p class="の部分で閉じてしまって「コンパイルエラー:修正候補:ステートメントの最後」というのが出てしまう。 なんか良い方法あったら教えて欲しいっす。
"<p class=""TXT12""><a class=""video"" href=""watch/sm"
自己解決しました。質問する前にもうちょっとググれ俺……
490 :
489 :2007/12/20(木) 17:42:49
491 :
デフォルトの名無しさん :2007/12/20(木) 21:19:51
超初心者です。クラスのコードを読んでいると、下記のような 構文に出会いますが・・・ Public Property Get〜()AS〜 文 End Property や、 Public Property Let〜()AS〜 文 End Property で使用されている、「Get」や「Let」キーワードの意味が理解できません。 「どのような意味」で 「どのような場合」に 「どのように使用する」のかが、???です。 ご親切な方、教えて下さい。
つか、Propertyにカーソルを合わせてF1押せ
既知かもしれんがググっても判らんかったんで教えて VB6なんですが DIM ST as String ST = StrConv("ル",vbUnicode) ST = StrConv(ST,vbFormUnicode) でSTが"ル"に戻らないの? "ア"でやると戻るのだか
文字列リテラルを一旦、変数に代入するとうまく動く感じがする。俺も聞きたいくらいだが。 Dim ST As String ST = "ル" ST = StrConv(ST, vbFromUnicode) ST = StrConv(ST, vbUnicode)
>>495 レスありがとう
それもやってみたけどダメだったのよー
だいたいunicodeに変換した段階で0x8145になるのはなぜ?
"ル"をunicodeで表すと0xEB30でしょ
"メ"も"ロ"も0x8145になるけどなんで
>>494 ひんと:VB6のString型の内部表現はそもそもUnicode
ちなみに
>>495 は上手くいった
正直、いまさらVB6触ってる人間って少なくとも数年はVB6やってる連中のはずだと思うが、 それがこんな基本も知らないのかよ、という感が否定できん。
なにそのお前の狭い常識の押し付け。 EXCELのVBAから入って、最近VB6をやり始めた人もたくさんいる
そういう人間が絶対「いない」とは言わないが、 メジャーなケースとは「絶対に」想定できんけどな。
つい一昨日までVB6.0触ってた まぁ、今「Microsoft Visual Basic 2008 Express Edition」の無償配布やってるから乗換えたけど。 2008はVB6より扱いやすいきがする
,NET(苦笑)
と、VB6にかじりつくしかないオッサンゾンビは苦笑した
ここはカンマに突っ込んだら負け・・・なのか・・・
しーっ! みちゃいけません
Meで開発環境が動かせないのは痛いから.netには移行出来ない
ArrayListの使いやすさだけで乗り換える価値はある
508 :
デフォルトの名無しさん :2007/12/23(日) 19:41:51
509 :
デフォルトの名無しさん :2007/12/23(日) 23:42:36
VB6.0での質問です 図形をマウスでドラッグしてフォーム内を 自由に動かせれるようにしたいのですがどうしたらいいでしょうか? リサイズは必要ありません
初歩的な質問です ActiveXコントロールのボタンを押し DLLのプロシージャを起動させたいのですがうまくいきません 同じプロジェクトグループ内にあります コントロール click() DLLプロシージャ名.呼び出し(引数無) ↑このDLLプロシージャ名がDLLのものと認識されていません
511のものですがそろそろ寝ます 端的に、コントロールボタンからDLLプロシージャを呼び出す表記を教えていただければ幸いです
DLLってプロジェクトに登録できるの? クラスか何かと根本的に勘違いしてない?
>>511 > DLLプロシージャ
そもそもこんな言葉初耳なわけだが
515 :
509 :2007/12/24(月) 12:36:33
フォーム内に長方形の図形があり、それをドラッグ&ドロップすれば離した場所に図形が移動する という動作をさせたいです。 ワードやエクセルのオートシェイプみたいな操作といえば分かりやすいかもしれません ただ長方形は初めからサイズが決まっているので図形のはしっこを掴んでサイズを変える機能は必要はありません
516 :
509 :2007/12/24(月) 12:42:18
あ、サイズが決まっているというのは常に一定の大きさというわけではなく、長さがその都度変わります
その長方形がShapeコントロールなら、 Form_MouseDownでクリックされた箇所が長方形の内側ならフラグON、 長方形の左上からカーソル位置までの距離を取っておき、 Form_MouseMoveでフラグがONならShape1.Move Form_MouseUpでフラグOFF でいいんでない?
良回答認定
>>513-514 もっと噛み砕くとコントロールにはボタンだけが配置されていて
それが押されるとDLL内で処理を行って結果を保持。
その結果をテキストボックスに返すといった具合です。
現在ボタンから呼び出し方法で詰まっているところ。
なにぶん素人なのでご容赦ください
そのDLLはActiveXDLLなの?それとも普通のDLL?
このスレくると、ああ下には下がいるな、と安心できて精神衛生上とても助かるよw 本当に実に貴重なスレだ。
それはあまりに性格が悪いと思うよ。
最底辺のお前が言っても・・・
うわぁ。本当に性格悪いなぁ。逆にかわいそうになるよ。
>>520 コントロールもDLLもVB6のものです。
そのコントロールを標準exeに貼り付けています。
コントロールのボタンクリック() ←コントロール内に記述
DLL内プロシージャ名 ←○○.プロシージャ名
えんど
クラスメソッドのような使い方になるのですかね。
とにかくここの連結が謎です
>>525 なあ、本気でその日本語他人に通じると思ってるの?
無茶苦茶変だぞ君の日本語。
例えば「そのコントロール」って何のことだよ
ActiveX DLLだとすると参照設定して dim hoge as new hoge.c_hoge call hoge.methodhoge() みたいな感じ
528 :
509 :2007/12/24(月) 21:12:06
>>517 ありがとうございます
早速使わせていただきます
>>525 謎です、って、どんなDLLを作ったんだよw それが分からなきゃ、使いようがないだろ。
DLLのユーザーコントロールが自前の処理を持ってたら、何もしなくていいのかもしれんし。
取り込み方が分からないって意味なら、
>>527 。 参照設定すれば補助入力に反応するようになる。
ふぉふぉふぉっ ぶいびーとな
Public Class Form1
Const LINK_URL As String = "
http://www.google.co.jp "
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
WebBrowser1.Navigate(New Uri(LINK_URL))
Catch
MessageBox.Show("表示できません", "エラー")
End Try
End Sub
Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
WebBrowser1.Document.All.GetElementsByName("q")(0).InnerText = TextBox1.Text '例1
WebBrowser1.Document.Forms(0).InvokeMember("submit")
End Sub
End Class
これだとgoogleにアクセスしまくりなんですが、どうしたらよいでしょうか?
すいません、質問なのですが 実行中と表示させたフォームがあり、キャンセルボタンがついています。 裏で別フォームが実行しているプログラムをキャンセルしようと考えています。 しかし、裏の処理が重いせいなのか自分で調べて見つけたDoEventsという命令では思ったようにキャンセル処理が実行できません。 そこで、このDoEvents以外にこういったことを実行できる方法はあるのか教えていただきたいです。 環境はVB6.0 SP5.0 OSはXP SP2です。 よろしくお願いします。
自分で調べた見つけてDoEventsという命令を使って書いたコードをここに晒してみ
538 :
デフォルトの名無しさん :2007/12/27(木) 17:09:06
"両肩もち"の検索結果 5 件中 1 - 5 件目 (0.74 秒) (このスレがトップwww)
最近ググルに反映されるのが驚くほどはやいな 2chって集中的に走査されてるのかな
モヴェは典型的なチンカスだな
542 :
デフォルトの名無しさん :2007/12/29(土) 14:51:05
ステータスバーコントロールで右下をつかんでウィンドウサイズを変える部分って あれを無効にするようなプロパティとかありましたっけ? なんか見つかんない(´・ω・`)
まず 「ステータスバーコントロールで右下をつかんでウィンドウサイズを変える部分」 が見つかりません。 ステータスバー消して試してみたら?
>>540 2chレスは5分もたたない内にインデックス化されてたりしてビビる
>>542 プロパティ名はド忘れしたが、
デザイン時のプロパティウインドウに「可変」とか表示されてるのを
「実線」だか「固定」だかにすりゃいいんじゃなかったか?
VB2005もここでよろしいのでしょうか? テキストボックスに入力した数の次に大きい素数を探すプログラムを作成しているのですが、 よくわかりません。 Whlie・For文、if文程度であればわかります。 どなたか教えていただけませんか?
548 :
546 :2008/01/01(火) 10:39:37
>>547 申し訳ありません。
初心者ですのでソフトはどれが新しいかわかりませんでした。
出直してきます。
>>548 日本語でプログラミング「なでしこ」
とても便利です。(日本語なので、プログラムを覚えるだけ)
みなさん、スレ違いですいませんでした。
僕も覚えたいのでプログラムを教えてください
552 :
デフォルトの名無しさん :2008/01/02(水) 16:05:55
>>545 設定はFormに依存みたいですね
ありがとうございました
>>521 そのとおり
これだけ下がいれば、まだ俺も給料もらえるって安心できるよな。
おめーらわかんねーだろうけど、年とると物覚え悪くなるし、
何より新しいものに挑戦してやろうっていう気力がわかなくなる。
新しい言語やらなんやらの習得が苦痛以外の何者でもないんだよ。
VB6から動けない俺に絶望し、VB6すらわからんお前らを見て、まだ大丈夫だって希望を感じる。
できました! ありがとうございます!
555 :
デフォルトの名無しさん :2008/01/03(木) 01:36:01
VB6.0 WinXP Proです。 ウィンドウに付けたメニューをポップアップした際に、 特定のメニュー項目にカーソルを合わせた状態でイベントを起こしたいのですが。 具体的には、例えばメニューにウィンドウで開いたファイルの履歴を作り、 そのファイルについての何かしらの情報をカーソル合わせた時に、 エディットボックスか何かにテキスト入力してポップアップさせたい、、というようなことです。 デフォルトのMenuイベントではClickしか無いので、 どうにかメニューポップアップ時のカーソルイベント発生か何かで実現する方法ありませんでしょうか・・・? 出来れば、まだ実用段階ではない自作イベントやサブクラス化でない方法を探してるのですが。。(VC++で出来てVBではまだやってない) ご教授よろしくお願いします。
556 :
デフォルトの名無しさん :2008/01/03(木) 12:47:46
VB6.0ってエントリポイントどこにあるの
558 :
デフォルトの名無しさん :2008/01/03(木) 13:13:55
>>557 標準EXEで作るアプリケーション。
c言語だったらmainがエントリポイントだけどVB6ではどれかな
プロジェクトの設定で、スタートアップを フォームに設定したら、VBの内臓エントリポイント、 あるいは、そのフォームのForm_Loadといえなくもない プロシージャで設定したら、そいつ。
560 :
デフォルトの名無しさん :2008/01/03(木) 13:22:15
561 :
556 :2008/01/03(木) 13:46:59
スタートアップをSub Main()に変更して Sub Main() Call MsgBox("main") End Sub って書いて実行したんだが スタートアップフォームまたはSub Mainが必要です って怒られるんだが何でだろ
Sub Mainはモジュールファイルのほうに書かないといかんよ。 Formファイルに書いたりすると怒られる。
564 :
556 :2008/01/03(木) 13:52:57
565 :
デフォルトの名無しさん :2008/01/04(金) 14:56:41
ひとつずつ戻値をチェックしろ。エラーの場合はGetLastErrorで詳細を。
なぜそこで訊かない?
ポップアップってなに?
ポップ的な物がアップする物です
その説明でなんとなくわかったぜ。ツールチップテキストのことか
ブラウザでブロックしているものかと思った
エディットボックスってなに?
ググレクズ
生意気なやつめ
VB6で Private Sub Form_Load() Set mDb = OpenDatabase("Rental.mdb") End Sub 上記のようにフォームロードしたときにRental.mdbを開くようにしたいのですが プロジェクトと同じ場所にファイルを置くのでは開けないのでしょうか?
>>575 OpenDatabaseって何?
ファイル名だけでなんかデータベースを開こうとしているけど
相対パス指定になるよね?
内部でどういう処理を行って絶対パスに直しているかわかる?
app.pathじゃないのか? それか勝手にenvironとかみたいなかんじで何かのパスを取ってきてるかも? っていうか、ググレカス
知ったかぶりしてカッコつけたけど、ちょっと恥ずかしくなったぜ
>>576 返信ありがとうございます。
OpenDatabaseはこれです。
ttp://monjyu.biz/monjyu/bord/sen1/msg/221.html 情報を小出し・後出しにして申し訳ありませんが
これは大学の課題で、大学のパソコンでは上記の方法でRental.mdbを開けたのですが
このプロジェクトのフォルダごとコピーし家のパソコンでやったら実行できなくなってしまい
"実行時エラー '3024':
ファイル '<Rental.mdb>' が見つかりませんでした。"
となってしまいます。
Rental.mdbはプロジェクトと同じフォルダに置いておけば実行できると言われていたのですが…
>ファイル名だけでなんかデータベースを開こうとしてるけど〜
ファイル名だけでは通常開けないものなのでしょうか…?
プロジェクトと同じフォルダにおくことによって相対パス扱いになると思っていたのですが。
(htmlなんかだと同じフォルダのものなら xxx.htmlなどでリンクできますし…)
どうやって絶対パスに直してるか、などはまったく分かりません。
>>579 んー,ちょっとイミディエイトウィンドウで
print curdir
ってやってカレントディレクトリ表示させてみ?
(面倒だったら絶対パス指定して実行させてもかまわないのでは?
>>580 C:\Program Files\Microsoft Visual Studio\VB98
と出ました。
プロジェクトがおいてあるフォルダはマイドキュメント内のフォルダです。
カレントディレクトリが間違っていたと言うことでしょうか。
>>581 まぁだいたいそんなかんじ
一旦IDEでプロジェクト保存して,エクスプローラから保存したプロジェクトを開けばカレントディレクトリはプロジェクトのあるディレクトリになるよ
面倒なら ChDir 関数でカレントディレクトリを移動するんだな
>>582 ありがとうございます!できました!
カレントディレクトリが大学→自宅にしたのに変わってなかったのが原因だったんですかね?
ともかく、これで課題を続けることが出来ます。
本当にありがとうございました!
どうでもいいじゃん、そんなこと。 気にスンナ
VB6.0です。質問お願いします。 web上の画像を最終的にPictureBoxに表示させたいのですがやり方がわかりません。 WebBrowserを使ってweb画像を表示させBitBltでコピーさせようと思ったのですが、 WebBrowserのデバイスコンテキスト?がわからなくて上手くいきませんでした。 BitBltを使わない方法でも構いませんので、わかる方いらっしゃいましたらよろしくお願いします。
tempなりに落として普通に表示させればいいじゃん
>>589 保存せずに表示させる方法が知りたかったのですが、別に保存して最後に消すんでも構わない気がしてきました。
そちらの方法を探してみます。ありがとうございました。
WebBrowserだって一旦ファイルとして保存しているんだし、それでいい。
ピクチャーボックスの中にラベルやコマンドボタンなどのコントロールを入れて、 そのピクチャーボックスの中にある画像データやコントロールなどを一つの画像としてデータを取得するとか出来ないでしょうか。
595 :
592 :2008/01/12(土) 00:48:43
ああ、すいませんなんとかなりそうです。失礼しました
WinXPとWin2000で、環境変数が変わった事をブロードキャストで通知して OSの再起動やログオフをせずに環境変数を反映させたいんです。 Microsoftのサイトには SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue); て書いてあるんだけど、VBSでdwReturnValueの定義から書いた場合はどうなるんでしょうか?
598 :
デフォルトの名無しさん :2008/01/15(火) 10:43:21
カラー選定ダイアログボックスで選択した色をHTMLで使う #RRGGBB形式に変換するにはどうすればいいですか? いくら調べてもよくわかんないんです。><
599 :
598 :2008/01/15(火) 11:21:07
10進数を16進数に変換したらできました。^^;;;;
あれ HTMLってBGRじゃなかったっけ?
601 :
598 :2008/01/15(火) 13:26:11
>>600 RGB形式でした。
しかたないから、16進数に変換したあと、置換しました。^^;
>>602 コード丸ごとコピペかw
オープンして大丈夫なのかねこれ
Access2003を使用してアプリをつくっています。
AccessデータベースのほうにIEのC:から始まるexeパスを入れていて
String型変数strのほうにデータベース接続してIEのexeパスをいれます。
やりたいことはデータベースからひっぱてきたブラウザのexeパスを格納した変数str
と事前にHPのアドレスが格納されたurlを使ってProcess()によるブラウザ、HP起動です。
Dim proc As New Process()
proc.StartInfo.FileName = str
'urlには事前に
http:からはじまるYahooのアドレスの文字列が格納されているものとします 。
proc.StartInfo.Arguments = url
proc.Start()
こうするとproc.Start()のところで指定されたファイルが見つかりませんというエラーが表示されてしまいます。
試しに
proc.StartInfo.FileName = "C:\Program Files\Internet Explorer\iexplore.exe"
proc.StartInfo.Arguments = "
http://www.yahoo.co.jp/ "
こう変更すると正常にIEでヤフーのHPが表示されます。
データベースからひっぱてくるブラウザのexeパスではエラーになる。。
どう修正すれば
目的通りにブラウザ起動ができるようになるんでしょうか。。
長々しくなってすいません。
>>605 そこまで試したなら、proc.Start() でブレイクして変数の値を確認すれば、
原因が掴めそうなもんだが・・・。
おそらく、UNICODE辺りが原因なんじゃないかなと推測。
たぶん、CreateProcessと同様の制限で、 ファイル名を「"」で囲まないとダメなんじゃなかろーか。 proc.StartInfo.FileName = """" & "c:\program files..." & """"
609 :
デフォルトの名無しさん :2008/01/17(木) 09:11:50
VB6でCheckListBoxって使えませんか?
使えるよ
611 :
デフォルトの名無しさん :2008/01/17(木) 16:22:28
winxp、vb6.0sp6、ActiveReport2.0Proで帳票を開発しております。 columncountで列が変わるたびに線を引くことは可能でしょうか? ___ ___ | | | | | | | | | | | |  ̄ ̄ ̄  ̄ ̄ ̄ このような形にしたいのですが。現在は、 ___ | | | | | | | | | | | |  ̄ ̄ ̄ このような形にしかなりません。 わかる方がおられましら、ご回答の程お願いします。
612 :
611 :2008/01/17(木) 16:30:16
ちょっとはみ出てますね。。。 実際は最大で長方形の線が4つになる予定です。 その後、改ページという感じ
改ページイベントで纏めて処理すりゃいいんじゃないの? つか、外部OCXは回答が得られにくいと思うので念のため。
614 :
611 :2008/01/17(木) 16:56:19
>>613 回答ありがとうございます。
>改ページイベントで纏めて処理すりゃいいんじゃないの?
そういう手もあったか
ちょっと実践してみます。
>つか、外部OCXは回答が得られにくいと思うので念のため。
やっぱりそうなんですね。
google(日本)でもMSNでも「ActiveReport columnCount」の検索結果が50件程度でしたから。。。
他にも方法あるよーって方がいましたらお教え願います。
やたらと罫線で四方を囲みたがるのは日本の習慣で、 西欧の帳票だとヘッダーや合計の下付罫線くらいしか使わない。 特に縦方向の罫線はほとんど使われないので、 ActiveReportのような洋モノのソフトはそういう罫線が引けないことが多い。 ActiveReportで何が出来るかを把握する前にデザイン決めたらダメダメだよ。
いや、手段を自ら限定しちゃうような検索キーはダメだろ・・・ 例えば、「ActiveReport 罫線」 とかをメインキーにした方が情報は絶対増えるよ。
617 :
611 :2008/01/17(木) 17:30:23
>>615 >ActiveReportで何が出来るかを把握する前にデザイン決めたらダメダメだよ。
間違いないと思う。
>>616 そっちをメインキーにすれば良かった。。。
「ActiveReport 罫線」で検索してみます。
さっきのキーは、事例があればと思いメインキーにしてました。
意外とないものですね。
このスレでもPart29あたりにチラッとあった程度でしたから。
618 :
609 :2008/01/17(木) 20:39:21
>>610 VB6でCheckListBoxを使うには
どうすればよいでしょうか?
>>618 ActiveX.OCX版のCheckListBoxをインストールすれば良いんだよ
これはVB専用ではなく汎用コントロールなので、これ以上はここで聞かないでね
VBでリアルタイム処理のプログラムって作ることできないんですか?
>>622 カーネルレベルのことを言っているのなら
無理
624 :
609 :2008/01/18(金) 07:58:44
標準の機能の中では 使えないという結論に達しました。 ありがとうございました。
随時更新されるテキストファイルを、随時読み込むにはどうすればいいでしょうか
Timerコントロールを使う
627 :
625 :2008/01/18(金) 17:36:50
ありがとうございます。やってみます。
FileSystemWatcher
FindNextChangeNotification ReadDirectoryChangesW
630 :
625 :2008/01/19(土) 10:16:35
0.5秒ごとに変数の中身を一式更新する簡単な方法でならできました。 随時更新されるテキストファイルを随時一行ずつ変数の中に入れたいのですが、 今の方法だと、非効率的な気がします。FileSystemWatcherはVB.NETの関数だそうですね。 使い方勉強してきます
631 :
デフォルトの名無しさん :2008/01/19(土) 11:04:29
VB6はマルチスレッド行けますか?
いけません、ダメです、おやめになって!
IDがvb6だから来たんだけど、ここIDでないですね・・・
>>633 出たとしても、普通は板ごとに変わるよ。
ごめn、恥ずかしいから帰る(ノ∀`)
ID 出なくてよかったな
この際、帰らずに住人になっちゃえ。
ピクチャーボックスで画像の上に、複数の文字を指定の場所に表示させたりさせなかったりしたいんだけど、 ピクチャーボックス複数宣言してないと無理?
文字ってのが画像じゃないなら、 普通に透明のラベルコントロール貼り付けてVisible切り替えとか。
文字の数が、不確定なので。。。画像だったらできますか?
文字が画像だと透過処理が必要だろうし、テキストより面倒。 実行時にコントロールを動的作成すれば不確定でも対応できるけど、 コントロールを複数使うのが嫌なら、 API使うなりして、DCに直接描画していくしかないんじゃないかな。
>>633 帰って来た
でも俺VB2008ですね orz
html文の練習の為に、TextBox1に書いたhtml文をButton1クリックで、 ブラウザに表示させるような物を作りたいのですが、 どのようにすれば実現可能でしょうか? よろしくお願いします
645 :
デフォルトの名無しさん :2008/01/20(日) 23:50:24
>>643 delphiなら、コード3行追加するだけでできるよ。
646 :
643 :2008/01/21(月) 02:36:15
>>644 説明不足でした、すいません。
ブラウザは自作ではありません。
Webbrowserコントロールに表示できるようにしたいのです。
>>646 Button1をクリックしたときに一時ファイルとしてTextBox1の内容を拡張子.htmlで保存
その保存したファイルのパスをWebブラウザにナビゲートでおk
648 :
643 :2008/01/21(月) 13:22:50
>>647 ありがとうございます。
早速試してみたいと思います。
webbrowser.navigate "about:blank" webbrowser.docunment.write "<html>hello<html>" 見たいな感じでできない?
Vista対応事例は出てきてますか? 素直に.net移行が無難でしょうか。
一応動くことは動くよ 但し無難というなら.NETの方が無難なのは間違いない
いやそんなこと人に尋ねて回る奴の書くコードはツールの如何にかかわらず不安だろう
>652 ごめんなさい とりあえずふいんきだけでも知りたくて・・・ 検索してきます
.NET(嘲笑)
この"ふいんき"はマジっぽいな。
先ほどVB 6.0 で誤って無限ループつくって実行したら、実行ファイルだけでなくVBごと固まってしまい。 これは、セーブしてないソースがまるごと無くなる瞬間では?とドキドキして実行ファイルを強制終了したら VBごと落ちやがりました。 今日やったソースがパーです。。実行前にセーブしない私が悪いんでしょうか?
>>656 誰しも一回は経験することだ
過ちから学べばいいジャマイカ
>>657 困った事に、7〜8年位前VB3.0で同じようなことやらかしたの
いま、またVB使っているのですがまた同じ過ちを繰り返してます。、、、何かVB使うとストレスが溜まります。
>>656 ctrl + breakも効かなかったのか。
ご愁傷様。
>>658 じゃあ,自分はどMなんだ,と割り切るしかないのジャマイカ?
VB5 NT,2000,XP 10年強使ってる(らしい)業務アプリなんだが いきなりフォントサイズが変わる現象が頻発しています。 コマンドボタンだったり、MsFlexGrid内の値だったり。 変わるキッカケが全く分からず、一定でもない。 おそらくデフォルトのフォントに変わってるみたいなのですが、 調べてもそれらしい事が分かりません。 どなたか、似た現象に会ったことありませんか?
>>661 フォントが壊れた事はあるけど、OSが2000以降の端末で起きたことはないなー。
端末によっては再現しなかったりはしない?
>>662 端末依存はおそらくないと思います。
どの端末でも不定期ですが発生します。
ただ、今感じている範囲だと、
印刷物を出力すると・・・な印象があります。
(完全に個人的な感想ですが)
そんじゃ普通にバグでしょ。
>>664 やっぱりバグなんだろーなー
わからん。
なにせ、全く同じ結果になる処理を続けて行っても
起こったり起こらなかったりなもので・・・。
もちょっと考えてみます。
最近はわからんけど昔はシステムリソースが少なくなると フォントがデフォルトフォント(やや大きく細く見えるフォント)になる現象があったよ。 フォントってでかいからね。 ループ内でフォントやフォントサイズを切り替えまくると メチャクチャ処理が遅くなるとかあるし。 まぁWIN98の頃の話だけどさ。
667 :
デフォルトの名無しさん :2008/01/24(木) 12:28:00
VBでボタンを押すと人数の平均が表示されるプログラムを作りたいのですが どのようなすればいいでしょうか?例のソースを書いて戴けたら幸いです。
>>667 Private Sub Command1_Click()
Me.Text1.Text = "人数の平均"
End Sub
669 :
デフォルトの名無しさん :2008/01/24(木) 12:58:21
レスありがたいのですが…厳密に言うと、そのコマンドを押して 人数の平均結果を数字で出力したいのですが…参考書にも載っていなく困ってます
>>669 なんの平均だよ?w
誰にも答えようがないだろ、それじゃあ。
質問すらまともに出来ないのなら、諦めて下さい。
>>667 平均値を計算するには
元となる何らかのデータの集合が必要な訳だが、
それは君の脳から直接吸い上げればいいのかね?
674 :
ガノタ :2008/01/24(木) 13:25:41
>>673 ということは、サイコフレームの開発から始める必要がありますな。
違う違う、
>>667 は、これから自分がどういう行動を取ったら良いのか、
そのものズバリが載っている参考書が無くて困ってるんだよ。
とりあえず、ここで何て訊いたら良いかが分かる参考書を紹介してあげてはどうだろう?
【質問内容】 「ボタンを押すと人数の平均が表示されるプログラム」 ↓ 【厳密に言うと】 「コマンドを押して人数の平均結果を数字で出力したい」 【質問の答え】 宿 題 は 自 分 で や れ
いまどき宿題をVB6で出すところも無いだろう常識的に考えて
>>677 同意www
>>667 平均の計算方法なら、
数値全部足してから、
数値の個数で割り算するんだお。
ま、電卓かEXCELでやれYo www
>>677-678 ヒント1:.NET教えられる教師や講師は希少
ヒント2:.NETを生徒が使う端末分購入できる高校・大学は希少
Win2000もチラホラ出始めた、まだまだ98SE隆盛の時代に
コンピュータ基礎と銘打って
・MS-DOSの一太郎や花子
・FMTOWNSやPC9821
・BASIC言語
なんて授業してた大学もあるんだ
>>680 それこそヒント1に引っかかるんじゃね?
.NETってw
683 :
669 :2008/01/24(木) 19:07:15
遅スレ、すんまそです 学校の宿題です、なので仕様書とかもありません
>>683 宿題は自分でやれwww
仕様書は自分で書け。
>>683 正直でよろしい。 何を作るか決めて、調べても方法が分からなかったらまたおいで。
学校でVB教えてる所ってあったんだな。
687 :
669 :2008/01/24(木) 19:37:38
騙されるな 入門に最適ではない そんな馬鹿な事を言う奴な殴ってやれ
まあいまさらVBなのはいいとして、ライセンス関係はどうなってるんだろうなw
MSDNにまだあるんじゃなかった?
ダウングレード権が行使できるだろう。
>>690 MSDNってVLでも一人頭結構高額だと思うけどw
>>688 んなこたーない。 初心者にとって使い易いのは間違いない。
文字の"0"と、数字の 0 が全くベツモノだと説明したトコで、コンピュータ初心者にはハァ?だろ。
VBを使えるようになったヤツが、プログラミング全般に自信を持つのは確かに間違いだが。
N88→VBと経験した上でCに触れた。 文字列の扱いに関して、VBって非常に便利なんだと痛感した。
しかしポインタが理解できずに挫折。 が抜けてるな
ポインタなんて理解する必要もないけどね
どうせ習うならJAVAやCを習ったほうがいいじゃないか VBなんて古典は時間の無駄 古典の学者にでもなるつもりかね
VBAとして使う分には便利。
699 :
694 :2008/01/24(木) 23:02:31
>>695 やっぱ挫折する人って多いんかな。
Cに慣れきった今となっては、VBの方が煩わしく感じるけど。
UI部分を作るなら便利だよ、VBは。 低レベルな高級言語とでも言おうか。 データ処理については、Cで書き直すだけで10倍早くなることもザラだけど。 もちろん、VBしか知らないと、API一つ使いこなせないだろうけど、 VBを活用できない、ってのもプログラマとしてどうかという気はする。
VBAは今の形のままずっと残るんかな?
これからVB.NETでずっと頑張っていこうと考えているけど、 やっぱりCが使えないと、社会に出て行けない?
出て行けないことは無いが選択肢は減るだろうね。
どういう風に減るのか教えて欲しい。 VBでは出来ないことがCではたくさんできるとか?
世の中どーしてもVC++が強い もらうソースが大抵VC++とかCだ 手の込んだことをしようとするとVBではつらい つらいだけで出来なくはないが、DLLを別途用意とか… と。 通りすがりの制御系方面プログラマですた
親切にありがとう。 今度はVC++かC#を触ってみようと思う、 でもやっぱりVB.netの方が楽しい
>>704 そうじゃなくて、言語で作るものの方向性が違う。
C系は、データ制御や、高速処理系。
VBは、モジュールの呼び出しやデータの表示、高速開発(すぐ作れる)系。
で、VBは使えるようになるまでが早いので、多くの企業で使われてるが、
制御系や組み込み系の処理はできないので、その方面の業種が選択肢から消える。
VBだけやってた人がCを使いこなすのは、その逆の場合より比較的(かなり?)難しい。
また、Cの方が、メモリの番地単位まで厳密に操作できるから、
コンピュータのデータの仕組みを理解しやすいってのはある。初めてだと取っ付き難いけどね。
初心者ならVBより情報処理の資格でも勉強しとけ 資格自体に意味は無いが、最低限の知識は得られる
モバイル開発だとVCしか選択肢が無いケースも。
>>707 の言ってることはヨタだから信じるなよ
いつの時代の話だよそれw
15年ズレてるよ
今の時代はこれ ↓
VBS
そして、
>>711 が最新の業界事情を紹介!
↓↓↓
Delphi7
要するにポイントは、15年前まではVBが良く使われてました、ってことで。
ハァ?(笑)
そんな話より宿題の件が異様に気になるw
人数って何の人数なのかとか。
ユーザに入力させんのか、ランダムなのか、固定値なのか。
ボタンを押したらどこに平均値が表示されるのか。
TextBoxかLabelか。
はたまたForm上にPenで描画(笑)するのか。
>>669 氏は宿題できたのだろうかw
>>719 諦めて遊んでるか、出来る奴のファイルコピーさせてもらってんじゃね?
質問させてください。 最大値と最小値をボタンを押した時に表示させたいのですが、どうしたらいいですか? 友達に教えてもらって、平均値はでるようになりました。
平均出せたんなら最小や最大も簡単だろ 一度、5個くらいの数字を紙に書いて、どうやったら最小と最大が出せるか、考えてみなよ
さすがに釣りの臭いがしてきた。 テラ香バシス
>722 MsgBox("目視で最大値を確認してください")
>>726 深読みしすぎじゃね?
つMsgBox("最大値")
>>726 ,727
別にダイアログに出す必要ないだろ。
Debug.Print "最大値" & "最小値"
でいいんジャマイカ。
>>726 ワロタwww
まぁ単純な比較演算もできないならそれしかないかもなww
何でみんなそんなに冷たいんだよ。
>>722 VBAのコードが知りたいなら、こんな感じだ。 適当な場所に書いて使うといい。
MsgBox "最大値: " & WorksheetFunction.Max(Range("A1:IV65536"))
MsgBox "最小値: " & WorksheetFunction.Min(Range("A1:IV65536"))
>>730 質問が高度すぎて答えられないからだよ。
質問内容に肝心な情報が無いからだろw
>>730 宿題なんだしVBAは無いだろ多分w
軽くエスパーすると最大値、最小値の"表示方法"が分からないんじゃなくて
最大値、最小値の"抽出方法"が分からないんじゃないかと。
平均値の"表示方法"が分かってんなら、
値を表示するまでに至れりゃできるんだろうし。
で、質問の中にある値の情報が"人数"とかいうどうでもいい単位情報しかない。
しかも仕事でもなく単なる宿題ときてる。
つまり確実に授業で教えてもらい済み。
やる気がないから覚えられないのか、
覚える気がはなっから無いのか分からんが、
人に教えてもらおうとするならもうちょいわかりやすい文章書くだろ。
つまりこいつは教えてもらいたいんじゃなく、
代わりに宿題やって欲しいだけなんだ。
これじゃこっちとしても教える気失せるっての。
734 :
722 :2008/01/29(火) 02:01:06
また遅スレでごめんなさい。。。
出来れば自分でやりたいのですが、授業のペースが早くてついていけていません
VBは6です、VBAかどうかはわかりません
>>730 ありがとうございます
貼り付けてみたんですが、エラーになってしまいました。。。
if分でどう書くかわかりますか?
>>733 すいません、もっとわかりやすい文章がかけるようになります
人数とは店舗Aに来るひと月の人数ということです
入力された値から、最大値と最小値を出します
>>734 730はネタだったんだろうけど、それすら全く通じないレベルみたいだな・・・
正直、オマイは他人に質問して回答が得られるレベルにはないと思う。
それこそ、ヒマなヤツにコードをまるごと書いて貰わないとムリ。
その教えてもらった友達とやらに頼れ。
どうしてもココでってんなら、その平均値の出し方を書いてみろよ。説明聞くより早い。
736 :
722 :2008/01/29(火) 02:39:59
Private Sub cmdAvr_Click() Dim dblAvr As Double dblAvr = (txtM1.Text + txtM2.Text + txtM3.Text + txtM4.Text + txtM5.Text + txtM6.Text + txtM7.Text + txtM8.Text + txtM9.Text + txtM10.Text + txtM11.Text + txtM12.Text) / 12 MsgBox ("平均は" & dblAvr & "人です。") End Sub 平均はこれで出るようになりました 最大値はif分を使うようにらしいですが、107人より28人のほうが大きくなったりします 助けてください
>>736 とりあえず,悪いけど日本語勉強してね.(はぁと
あと,どう見ても文法が怪しいんだけど,VB6でいいのな?
確認だけど,
「txtM1〜txtM12までのテキストボックスに書かれた数値(意味としては人数)の最大値と最小値を得たい」
でいいの?
それならこんな感じ
private sub cmdMinMac_Click() '←最大と最小を表示するボタンをクリックしたときに実行されるメソッド
dim i as long, min as long, max as long
dim ary(1 to 12) as long
for i=1 to 12: ary(i)=clng(me.controls("txtM" & i)): next
min=ary(1): max=ary(1)
for i=2 to 12
if min>ary(i) then min=ary(i)
if max<ary(i) then max=ary(i)
next
msgbox "最小は" & min & " 最大は" & max & "人です"
end sub
dblMax = CDbl(txtM1.Text) If CDbl(txtM2.Text) > dblAvr Then dblMax = CDbl(txtM2.Text) End If If CDbl(txtM3.Text) > dblAvr Then dblMax = CDbl(txtM3.Text) End If : って感じで、テキストボックスの数だけ並べれば、考え方通りのロジックは完成する。 最後に残るのが最大値。 最小値は、IF文の条件の不等号を逆にするだけ。 このコードと睨めっこしてれば、 頭の中の論理を、プログラム文法に直すだけだと分かると思うんだけど。簡単でしょ?
配列を習ってないとイヤな設問だな
MDBにいったん突っ込んで、 SQLでAvg関数、Min関数、Max関数で抽出するのが楽だなwww
Option Strict Off ってことか。
>740 やめろよそんな事言ったらSQLスレとかまで出張しそうだぞw
743 :
デフォルトの名無しさん :2008/01/30(水) 00:28:56
隠しリストボックスをソート済みコンテナとして使えば?
みなさんありがとうございました テキストボックスをコントロール配列で書くのが正しかったようです ここで質問していたことがバレてしまったので、もうここでは質問できません。。。 ひとに聞くのもスキルのうち、といわれお咎めはありませんでしたが。。。 毎日ありがとうございました
勉強にはなっただろうな あと、先生、ここ見てるってことかな? 先生よ、古い言語なんていまごろ教えるな!変なクセがついた奴が会社に入ってきたって迷惑なんだよ! 教える頭がなければ辞めてしまえ!
どうでもいいけど、何だってこう上から目線なんだろうな、こういうヤツって。
普段は下なんじゃないの?
上のいない人なんてねえよ
749 :
デフォルトの名無しさん :2008/01/30(水) 08:28:15
質問です。よろしくお願いします。 VB6でOLEオブジェクトとしてMSGraph2000をフォームに作成しています。 データの読み込みは下記コードできたのですが、読み込むまで20秒以上かかってしまします。 Open "C:\Book1.csv" For Input As #1 For lRowCnt = 2 To 100 For lColCnt = 1 To 15 Input #1, lValue oDataSheet.Cells(lRowCnt, lColCnt).Value = lValue Next lColCnt Next lRowCnt Close #1 これでは遅すぎるので、 データシートにインポートか貼り付け、あるいは読み込んだ状態を保存して 終了する方法はないでしょうか?
>>749 具体的にどの処理が遅いのかをチェック汁。
何となく、CELL一つ一つに値をセットしながら
ループ回してるのが問題のように思われ。
oDataSheetに配列でデータ渡しする方法無いのか?
無効にしてループまわして有効にすればいいんだよ
752 :
デフォルトの名無しさん :2008/01/31(木) 10:31:33
>>751 無効にしてから有効とは??
いったいどんなプロパティーを書くんでしょうか?
753 :
デフォルトの名無しさん :2008/02/01(金) 10:58:14
VB6.0でTWAIN機器(スキャナ)を動かし 画像を取り込みjpgファイルとして保存するプログラムを作りたいのですが TWAINのAPIについて色々調べるのですが 今いちワカリマセン。 どなたかご教授ください。
754 :
デフォルトの名無しさん :2008/02/01(金) 10:58:50
VB6.0でTWAIN機器(スキャナ)を動かし 画像を取り込みjpgファイルとして保存するプログラムを作りたいのですが TWAINのAPIについて色々調べるのですが 今いちワカリマセン。 どなたかご教授ください。
ググれ
VB6 【画面仕様】 FormにPictureBoxを配置 それをコンテナにしてTextBox1とTextBox2を配置 CausesValidationは全てTrue TextBox1のValidateイベントで入力チェックが必要 【問題点】 TextBox1からTextBox2へフォーカスが移動する際には、Validateイベントが発生します しかし、親コンテナのPictureBoxをクリックすると、Validateイベントが発生せずに、 TextBox1からフォーカスが外れ(LostFocus→PictrueBoxのGotFocus発生)、 その後TextBox2をクリックすると、フォーカスが移動できてしまいます Microsoftのサポート情報でVB6のValidateイベントは、 「ユーザーが入力できるコントロール」の間でしか働かない・・・ という仕様なのは確認できましたが、上記【画面仕様】のままで フラグやLostFocusイベントは使わない方向で、 これを回避することはできないのでしょうか
>>754 Okwave池。
ポイント稼ぎたいバカがソースまで出してくれる。
759 :
756 :2008/02/01(金) 17:13:35
>>758 それはCausesValidationをFalseに設定したコントロールを含む場合なので、
全てのコントロールでTrueである場合は当てはまらないと思ったのですが、
根は同じということでしょうか・・・
760 :
758 :2008/02/01(金) 18:29:17
>>759 いや、関連がありそうなんで貼ってみただけ。
それはそうと、試しにやってたら、
TextBox→PictureBoxの場合もValidateイベント発生したよ。
>754 NewtonのImageKitでも使えば?
762 :
デフォルトの名無しさん :2008/02/01(金) 22:26:18
>>754 10年くらいまえに、まさにそんなプログラムを作ったw
763 :
デフォルトの名無しさん :2008/02/02(土) 06:45:36
教えてください OSはXP Pro,VB6.0、サービスパックはわかりません 質問はShell関数を使ってExeファイルを実行しておいて、その戻り値のタスクIDを取っておき タイマーで1分後に取っておいたタスクIDを使用して実行したタスクをKillしたいのですが なにか良い方法はありますでしょうか?宜しくお願いします
自分で答え言ってるじゃん。 それ以上何が聞きたいんだ?
だから Shell関数を使ってExeファイルを実行しておいて、その戻り値のタスクIDを取っておき タイマーで1分後に取っておいたタスクIDを使用して実行したタスクをKill する良い方法を知りたいんだろ Shell関数を使ってExeファイルを実行しておいて、その戻り値のタスクIDを取っておき タイマーで1分後に取っておいたタスクIDを使用して実行したタスクをKill すればいいと思う
俺もそう思う
具体的なコードが知りたいのなら、Shell, CreateProcess, TerminateProcessでぐぐれ
768 :
609 :2008/02/03(日) 11:38:43
Vistaで開発したのですが、 そのプログラムをWindows2000の環境で 実行したところなぜかテキスト、ボタン等に 表示する漢字部分が表示されなくなりました。 具体的にはボタンのCaptionに「実行(&S)」と設定したところ 開発環境のVistaでは「実行(S)」と表示され、 そのexeをWin2000にコピーし、実行したところ 「(S)」しか表示されません。 ボタンのフォントは既定値のMS Pゴシックです。 これはどうしてでしょうか?
769 :
デフォルトの名無しさん :2008/02/03(日) 14:27:33
その2000はvb6が動く環境なんだよな?ランタイムがなかったりしないよな?
771 :
768 :2008/02/03(日) 18:29:18
>>769 そもそもWin2000で検証している目的は
特別な追加ランタイム「無し」で動くかどうかを
検証するために動作検証を行うのが目的です。
実行環境はWindows2000で、ランタイム等を
入れることができないためです。
SP+パッチは最新です。
VP6の動作に必要なランタイムを調べたのですが
明確なDLL等の資料が見つかりませんでしたので
実際Windows2000環境(ランタイムなし)でテストした結果、
漢字が表示されないという結果になりました。
今のところ漢字の表示以外に不具合等はありませんので
最悪
>>770 の通り漢字を表示しないことで回避したいと思います。
ですが、漢字が表示するに越したことはないので
質問するに至りました。
漢字を表示するためにランタイムが必須なのでしょうか?
なにか違和感があるのですが。。
VB6で作成したソフト=ランタイム必須でしょうか?
とりあえず漢字以外の動作に問題ないのですが。。
VisualStduioInstaller使えば必要なDLL群をマージモジュールの形で 見繕ってくれたはず。 日本語が表示されないのは、vb6jp.dllだったかな。。。
>VP6の動作に必要なランタイムを調べたのですが >明確なDLL等の資料が見つかりませんでしたので 正直に「そんなこと面倒でやってられっか俺様の質問に黙って答えろや」と言えよ。 嘘ばっかりだな。
vb6jp.dllだな。システムフォルダにコピーするように組めばおk
VB6で作成したソフト=ランタイム必須だ 無駄な時間を割くなボケ
776 :
768 :2008/02/03(日) 19:42:39
>>772 そうなんですか、
VisualStduioInstallerについては知識がないですので
今から調べてみます。
>>773 いや、調べて見つかればわざわざ2000環境用意する方が
めんどくさいですよ。
実際VB6の開発環境の必要環境の情報ばかりで
動作環境については調べにくかったです。
少なくとも私にはですが。
まぁ私の言い訳はおいておいて、
もし情報ありましたらその情報へナビゲートしてもらえると
今後の勉強になるのでありがたいです。
検索ワード等でも結構です。
>>774 ずばりの回答ありがとうございます。
今回は実行環境にDLLやランタイムを導入することが不可能のため、
日本語表示については諦めたいと思います。
>>775 基本的にランタイム必須という考えは
同意なんですが、
ランタイムに依存するコードを書かなければ
ランタイムすら必要なく、実行ファイルのみで
動作するというのは驚きでした。
そんな目的のためにVB6を選ぶなんて本末転倒だな。
2000にはVBの英語版ランタイムが最初から入ってたと思うが >ランタイムに依存するコードを書かなければ >ランタイムすら必要なく、実行ファイルのみで >動作するというのは驚きでした。 どうしてそうなる
781 :
768 :2008/02/03(日) 20:30:19
>>777 すみません、どういう意味でしょうか?
ちなみに運用環境にランタイムの組み込みが難しい状況で
どの言語で開発すればよいか悩んだのですが、
とりあえずVB6で作ってみて動かなけりゃ
Cでやってみようか、くらいに軽く考えてみました。
今のところフォントがおかしいくらいで動作に問題なさそうなので
VB6で行きたいと思います。
今後のメンテナンスを考えると今更VB6感はありますが。
>>778 そうなんですか、
だから動くわけですね。
ランタイム無しで動く、という解釈は間違いで
英語版ランタイムが入ってるから動くんですね。
英語版なのでvb6jp.dllが入っていないのも納得できます。
漢字が消える、という解釈をしていまして
文字化けという発想はなかったです。
文字化けで検索すればよかったんですね。
ちなみに同じことを思いましてvb6jp.dllを同一フォルダにおいて実行しましたが
読み込んでもらえなかったらしく文字化けのままでした。
>>779 すみません、考えが甘かったですね。
まさか2000に初めから英語版とはいえ
VB6ランタイムが入っているとは思いもよりませんでしたので。。
いちおう、手持ちのW98でためしてみたけど、システムにDLLがなくても、 カレントに、MSVBVM60.dllとVB6JP.DLLがあれば日本語を表示するVB6アプリが 動いた。動作保証とかは知らない。これって一種のSxS?
783 :
768 :2008/02/03(日) 21:27:44
>>782 いけました!?
ということで再度Wndows2000にて動作検証しました。
結論
MSVBVM60.dllとVB6JP.DLLの2つを
実行ファイルと同じフォルダにおくことで
日本語表示ができました。
あと余談ですが
>>778 のリンクで
「Visual Basic で作成した実行可能ファイル(以下 EXE ファイル)を起動すると、Visual Basic のデフォルトである MS Pゴシック サイズ 9pt に設定された TextBox などのコントロールに表示される2バイト文字が、文字化けすることがあります。」
とあったので単純にフォントを8や10に変更したところ
別途DLLを入れなくてもexeのみで日本語が表示できました。
今回は同じフォルダにおくことで
DLLが読み込まれると言うことがわかりましたので
運用環境でこのプログラムを使う時は
サーバー上にexeを配置する時に同じフォルダに
ごっそりランタイムもコピーしておこうと思います。
ありがとうございました。
>今回は同じフォルダにおくことで >DLLが読み込まれると言うことがわかりました これは基本知識ではないのかw まぁ解決してよかったよ
XP proのVB6.0です。 SetLayeredWindowAttributesを使ってフォームを透明にしたのですが 透明にする前のフォームの描画域をクリックしても フォームではなくその下にあるもの(ファイルなりフォルダなり)に触ってしまいます。 フォームを透明にしながらもそのフォームを触れるようにできる方法はあるでしょうか?
透明にするんじゃなくて、フォームに"その下のウィンドウの様子"を描画してしまえ。
>785 Alphaを0ではなく1にする。
昔のVB(4?)のプログラム眺めてるんですが N=INT(7*X) N=INT(2*X) N=IP(1.3*X) のIPの意味がわからくて悩んでます。 IPて何でしょう。
789 :
デフォルトの名無しさん :2008/02/06(水) 14:51:50
独自のメソッドとかじゃないの? 定義へ移動とかしてみた?
きっとIPアドレスの事だよ!
791 :
788 :2008/02/06(水) 14:52:54
agewasuremasita
792 :
788 :2008/02/06(水) 15:02:02
ageてごめんなさいorz
>>789 回答ありがとうございます
やってみます
>>790 IPアドレスは思いつきませんでした
やってみます
793 :
デフォルトの名無しさん :2008/02/06(水) 15:04:31
ageたらいけないとかいつの時代のルールw 質問があったらあげた方が見てもらいやすいし、むしろ積極的にあげるべきではないのか。
794 :
790 :2008/02/06(水) 15:12:04
>792 ちょww
796 :
デフォルトの名無しさん :2008/02/07(木) 13:39:20
板参考させてもらいました
797 :
デフォルトの名無しさん :2008/02/08(金) 00:42:32
[VB6、WindowsXP]です。
DLLを参照設定の件での質問です。
自作のDLLをc:\windows\system32に保存し、参照設定して使っています。
自分の環境で使っている分には問題ないのですが、
別のマシンのHドライブにexeをコピーし、DLLをc:\windows\system32に移すと
「H:\windows\system32\****.dllが見つからない」というエラーが出てしまいます。
環境を変えてもDLLを正しく使えるようにするには、どうしたら良いでしょうか。
補足:自作DLLとはマウスホイールのイベントを拾うためのもので、
http://support.microsoft.com/kb/308636/ja (アクセス97でマウスホイールを無効にする方法)
を少しいじったものです。
>>797 regsvr32で再登録。
XP以降ならmanifestでサイドバイサイドという手もなくはない。
799 :
797 :2008/02/08(金) 01:34:19
>798 回答ありがとうございます。 regsvr32で調べて見ました。 regsvr32 c:\windows\system32\****.dll んな感じで試してみます。
800 :
デフォルトの名無しさん :2008/02/09(土) 14:21:31
[WindowsXP SP2,VB6] VB初心者です。 恐縮ながら、質問させていただきます。 今自分は、フォームのコマンドボタン1をクリックするとファイルを開くダイアログボックスが表示されて 開いたファイルの内容をフォーム上のテキストボックス1に表示されるというプログラムを 作成しています。 このとき開くファイルをShift-JIS形式のバイナリデータとして、テキストボックス1に全て表示させたいのですが どのようにコードを記述すればよろしいのでしょうか? 超初心者的な質問で申し訳ありません。
>>800 >Shift-JIS形式のバイナリデータ
ってなんだろ?そのまま、メモ帳で開いたように文字を表示したいのか?HEX表示したいのか?
802 :
800 :2008/02/09(土) 14:43:58
>>801 すいません、誤記してしまいましたorz...
HEX(16進数)表示です。
例えば、バイナリエディタでファイルを開くと
表示される『00 3C FE …』とかの16進数データです。
>>800 > どのようにコードを記述すればよろしいのでしょうか?
IDE開いてフォームにボタン貼り付けて,ボタンをダブルクリックしてその中でコーディングすればいいんじゃね?
あとコモンダイアログは標準コントロールじゃないのでなんかしないといけなかった気がする
804 :
800 :2008/02/09(土) 15:30:47
>>803 コモンダイアログは
メニューのプロジェクト→コンポーネントから、コントロールタブ内の『Microsoft Common Dialog Control 6.0』にチェック入れて
フォーム内に配置すれば使用可能になりました。
あとどのようにコードを記述するのかじゃなく、『どのような内容のコードを記述するのか』と
質問すべきでした。すみません。
ちなみに自分は、
Private Sub Command1_Click()
Dim myData As Byte
CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Binary As #1
Get #1, , myData
Close #1
Text1.Text = myData
End Sub
って記述して行き詰ってます。
ふと。 ウィザード使ってファイルの読み書き有りにすると 開くところまでのソースはできるので流用するとラクいよ。 コードみて思うことは、EOFまで読む、HEX関数、などなどいろいろ覚えたいところ。 Dim Dat As Integer Dim DatStr As String Dim DatTemp As String Open FileName For Binary As #1 Do While Not EOF(1) Get #1, , Dat DatTemp = Right$("000" + Hex$(Dat), 4) DatTemp = Right$(DatTemp, 2) + "," + Left$(DatTemp, 2) + "," DatStr = DatStr + DatTemp Loop Close #1 Text1 = DatStr Getで取ると4桁で出てきてコードが上位下位逆になってるからなおして分割してる。
>804 一文字分しか表示されないから困ってんだろ?そこまでちゃんと書け。 それすら理解できてないのなら、随分と長い話になるぞ。 Byte型は1バイトだから、Get一回じゃ1バイトしか読まないんだ。 ファイルのケツまで読むのなら、その分ループ回してGetし続けなきゃならん。 HEXで表示したかったらHEX$で変換しれ。 つか、頭から順番に読むだけなんだから、InputB$が使いやすくないか?
あ。Shift-JISの決まり上、コレ要らんか。 DatTemp = Right$("000" + Hex$(Dat), 4)
808 :
800 :2008/02/09(土) 17:12:46
>>805 コード流用させていただきましたところ、うまく出来ました。
ちゃんとテキストボックスに16進数1バイト区切りで表示されました。
ほんとありがとうございます。
まだまだ学ぶことは多々ありますが、これからがんばっていきます。
>>806 自分の質問力不足でした。ほんとすみませんでした。
InputB$っていうのもあるんですね?わかりました調べてみます。
>>807 そのコードを省くとテキストボックスが空欄というか、スペースになってしまいました。
>>804 ダイアログでキャンセルボタン押したらエラーになるね(笑)
あと、FreeFile使うことをオススメする
810 :
デフォルトの名無しさん :2008/02/09(土) 23:32:17
IPアドレスを変更するプログラムを作成しました。 IPアドレス変更処理の直後に PCをシャットダウンしたいと思います。 これ自体は簡単にできたのですが、 この実行ファイルをファイルサーバー上に配置しています。 XPでは正常に動作したのですが、 2000だとファイルサーバーと通信できないIPに 変更した後、シャットダウン前に 「〜.exeにエラーが発生しました、エラーログを作成しています」 という意図のエラーメッセージが表示され、 シャットダウンが行われません。 自分の中では実行ファイルは全てメモリに読み込まれ メモリ上で実行されるため ファイルサーバーとの通信が切断されたとしても IP変更処理の直後のシャットダウン処理が実行されるのでは? と思うのですが勘違いしていますでしょうか? また、これを回避し、2000でもIP変更処理の直後に シャットダウンを実施させるよい方法はないでしょうか? よろしくお願いします。
>>808 あ、いやいや
DatTemp = Right$("000" + Hex$(Dat), 4)
これまるまる省くんじゃなくて
DatTemp = Hex$(Dat)
にする。
桁数がふらつくと不定長な文字列になるから・・・
ってか、流用だけじゃなく、何してるか調べるとそのまま覚えやすいと思うぞなもし
>>800 Private Sub Form_Load()
Call CommonDialog1.ShowOpen
Text1.Text = fun_GetHexString(fun_GetBinaly(CommonDialog1.FileName))
End Sub
>>813 の続き
========== 指定のファイル名からバイナリデータを取得(Byte配列を返す)
Private Function fun_GetBinaly(ByVal strFileName As String) As Byte()
On Error GoTo ERROR_HANDLER:
Dim intFreeFile As Integer
'---------------------------------------------------
intFreeFile = FreeFile()
Open strFileName For Binary As #intFreeFile
fun_GetBinaly = InputB(LOF(intFreeFile), #intFreeFile)
Close #intFreeFile
On Error GoTo 0
Exit Function
ERROR_HANDLER:
On Error GoTo 0
End Function
>>814 の続き
'========== Byte配列から16進数を文字列として返す
Private Function fun_GetHexString(ByRef bytData() As Byte) As String
Dim strJoin() As String, lngBound As Long, c As Long
'---------------------------------------------------
lngBound = UBound(bytData)
ReDim strJoin(0 To lngBound)
For c = 0 To lngBound
strJoin(c) = Right$(String$(2, "0") & Hex$(bytData(c)), 2)
Next c
fun_GetHexString = Join$(strJoin, Space$(1))
End Function
空白が入るの嫌だったら、Join$(strJoin, Space$(1))をJoin$(strJoin)に。
816 :
815 :2008/02/10(日) 10:33:04
空白消すのは、 Join$(strJoin) じゃなくて Replace$(Join$(strJoin), Space$(1), "") でした
結局キャンセル押したらエラーになる気がした
>>817 あ〜うぜぇな。
そんなちんけな揚げ足取るんじゃねーよ。
コモンダイアログ使った奴ならわかんだろが。
お前が代わりに書いてやれよ。
If Len(CommonDialog1.FileName) > 0 Then
Text1.Text=処理
Endif
Len()って負の値を返すのか。
仕様では最大文字列サイズが2GBだから最大1G文字で負にはならないな LenBなら負の値もあり得るということになる
ゼロ
822 :
810 :2008/02/10(日) 20:04:42
>>811 すみません、
どの辺の情報が足りないでしょうか?
>>822 だってその情報だけじゃ手元で再現できないじゃん,何一つ.
VB6SP5 WindowsXP 今まで使われていたOCXが事情により使えなくなるため、 まったく同じ機能とインターフェースをもった新しいOCXを作成しています。 これを実装する際、旧OCXを使用しているアプリをコンパイルしなおさないようにしたいため、 新OCXのGUIDを、旧OCXのGUIDと同じものにしたいのですが、 これは可能なのでしょうか? 可能であれば方法を教えていただけないでしょうか。 よろしくお願いします。
OCXは 同じVB6でつくってるの?
826 :
824 :2008/02/10(日) 22:57:08
>>825 旧OCXもVB6です。
しかし、その時のPCはすでに手元にないため、
その他の開発環境が全く同じかどうかはわからないです。
828 :
800 :2008/02/11(月) 02:00:34
>>812 様
あっ、仰られるとおりにしましたら出来ました。
そうですね、教わったコードをよく理解できず流用させてもらい、成功したって感じですが
具体的にこのコードは『何をやっているのか?』を理解できてないと、他への応用も利かなくなるだろうし
面白味もないと思います。
本日参考書を購入してきたので、これからしっかり勉強していきたいと思います。
>>813 〜816・818様
ご丁寧に説明して下さり、ほんとありがとうございます。感激ですw
早速コードの勉強をさせていただきます^^
>>817 様
本日購入してきた参考書に、キャンセル押された時のエラーを回避する方法が2通り載ってました。
いずれも818様のコードとは異なるものでした。
結果を導き出すコードはワンパターンだけではないとわかり、奥が深いなぁと感じました。
...すみません、初心者なもので^^;
それと一応検索はしてみましたが、もしVB6を学習する上でこのサイトはオススメだというサイトがあれば
ぜひ教えて頂けないでしょうか?
参考書と併用していけば、効率よく学習できると思ったので。
よろしければお願いしますm(u_u)m
830 :
810 :2008/02/11(月) 02:52:02
>>823 わかりました。
問題の部分は以下です。
Call IP変更
MsgBox "完了"
Call シャットダウン
Win2000環境で実行するとまず、「完了」と表示され次に
「〜.exeにエラーが発生しました、エラーログを作成しています」 のエラー発生で
強制終了し、シャットダウンは実施されません。
「IP変更」メソッド内でIPし、
「シャットダウン」メソッド内でシャットダウンを行います。
メソッドの内部については問題なさそうなので
今回は割愛しますが、必要そうなら言ってくだされば載せます。
疑問は2点です。
1.そもそもネットワークの向こうに配置した実行ファイルで
IPを変更した場合、IP変更部分以降は
実行されないのか?
設計的にまずいのか?
XPの検証環境は自由に使えないので何とも言えませんが、
IP変更→シャットダウンは正常に機能しました。
自分の想像ではWin2000であろうがXPであろうが
実行ファイルを実行した直後にメモリにロードされるので
実行ファイルにとってはどこから実行されたかなんて
相対パスでファイルを読み込んでいない限り
問題ないと思っています。
2.今回の対処方法
Win2000であろうがXPであろうが
IP変更直後にシャットダウンを実施したい
よろしくお願いします。
>>830 守秘する必要があるかもしれないけれど,やっぱりそれでも情報不足な感じ.
だって,たとえば「フォームを表示した直後に Call シャットダウン をするプロジェクト」を作ったりしてみた?
多分シャットダウン程度なら権限があればマトモにシャットダウンが実行されて電源が切れる状態になると思う.
問題を切り分けていく過程として,
ちょっとトイレ.
ひんと:ウィンドウズのIPの変更は「ネットワーク中に同じIPが存在するかどうかをRARPみたいなので確かめる」だったはず・・・ローカルで閉じてないんだよな
─――┬─――┬― | W.C | |∧∧ |コンコン 入ってますか? |( )シ. || | | ―――┴| |―┴― ノ∪∪ ─――┬─――┬― | W.C | |∧∧ |< 今、出てるとこ〜 |( ) | || | | ―――┴| |―┴― ノ∪∪
833 :
810 :2008/02/11(月) 03:19:37
>>831 レスありがとうございます。
守秘義務もなにも
コピペで作っただけなので載せるのは大丈夫なんですけど、
各メソッドが単一ではきちんと動作していますので
関係ないと思っていますので掲載していません。
切り分けについてはIP変更処理で
ネットワークに支障のないIPに変更した場合は
正常に動くため、各メソッドには問題がないと考えています。
OK:192.168.1.10→192.168.1.11
NG:192.168.1.10→192.168.2.11
サブネットマスクは共に255.255.255.0です。
OKの場合はもちろんシャットダウンも実施されます。
各メソッドに問題ある可能性がありますか?
834 :
810 :2008/02/11(月) 03:36:42
すみません
>>833 の検証結果でちょっとおかしい部分が出てきましたので
今しばらくお待ち下さいませ。
ちょっと検証してきます。
実行ファイルや画像ファイルはファイルマッピングに近い仕掛けで メモリ中に読み込まれるのでファイルはオープンされたままの状態になる。 メモリの状態によっては破棄可能なコードやデータは一旦破棄して 再び使用するとき再読み込みが発生することになる。 一方破棄出来ない領域はページング対象になる。
836 :
824 :2008/02/11(月) 13:00:01
>>827 情報ありがとうございます。
ただ、これは私が探していたのとあ少し違うようでした。
再登録は再登録なのですが、
その際に新OCXのGUIDを旧OCXのGUIDと同じものに変更して登録したい。
OCXをレジストリ登録する際に任意のGUIDで登録できるのか?
という感じです。
838 :
810 :2008/02/11(月) 15:56:27
>>810 >>833 >>834 再度検証してきました。
Win2000環境では実行ファイルをネットワークの先から実行した場合
同じIPに設定し直しても
「〜.exeにエラーが発生しました、エラーログを作成しています」
となることがわかりました。
情報混乱させてすみません。
>>835 そうなんですか。
ということはやはりIPを変更する処理をサーバー上の実行ファイルで
実行させるのは仕様的にまずいわけですね。
※変更後IPが通信に問題がないものだとしても
IPが変わる瞬間にいったんサーバーと切断されるため
>>830 の疑問1については納得できました。
ありがとうございます。
疑問2の
サーバー上に配置された実行ファイルを実行して
Win2000であろうがXPであろうが IP変更直後にシャットダウンを実施したい
こちらはどうやって実装すればよいでしょうか?
いったんローカルに落として実行、などは最後にローカルにファイルが
残ってしまうのでちょっと難しい環境です。
テンポラリフォルダで実行すればいいじゃん。 しかるべきレジストリに記述しておけば、 再起動直後にWindowsが消してくれるでしょ。 あと、Editbinつかって、ExeにSWAPRUNを付与する手もあるはず。
840 :
810 :2008/02/11(月) 21:10:00
>>839 テンポラリフォルダで実行して
レジストリに記述してWindowsに自動で
消させるって具体的にはどうすればよいでしょうか?
検索ワードとかありましたら
お教え下さい。
Editbinについては調べますね、
ありがとうございます。
841 :
824 :2008/02/11(月) 21:32:50
>>837 情報ありがとうございます。
いま作成している新OCXはバイナリ互換で作成を行っているのですが、
旧OCXのプロジェクトやソースを流用して作成しているわけではないので、
この設定で解決には至りませんでした。
仕様を踏襲しているだけで、プロジェクト自体は全く別物なので。
>>841 プロジェクトのプロパティでバイナリ互換をとる対象を選択するようになっているようだけど、
これを使えばいいのと違うの?
っていうか、面倒だし泥臭くてカッコは悪いかもしれないけど
そもそも旧プロジェクトのコードだけ書き換えれば済む話なんじゃないの?0
843 :
810 :2008/02/13(水) 00:30:31
>>840 Editbinでうまくいきました。
最初は動作に変化がありませんでしたが、
同じ階層においてあるランタイムに対して実行したところ
うまく動作しました。
ありがとうございました。
日本語でおk
847 :
デフォルトの名無しさん :2008/02/14(木) 06:56:54
たすけてください。><;;;;;
無効ではないデータをセットしてからCancelUpdateすればいいだけじゃないか
mysqlとvb6のプログラムを作っているのですが SQL文を飛ばすときに配列の処理がわからなくて困ってます。 Dim d As String Dim g As String Dim ii As Integer For ii = 0 To 118 Step 1 d = Text1(ii).Text ←textの配列が119個ある g = "g_" & (ii + 1) ←mysqlのフィールド Next ii mysql = "insert into g_table (" & g & ") values(" & d & ")" 全項目 119項目全て更新する。 コレだと g=119 しか保存されないのですが、変数を当てる場合caseで認識させるしかないのでしょうか?
850 :
デフォルトの名無しさん :2008/02/14(木) 11:53:08
>>849 なんのためにForで回してるんだw
Forの中でクエリ実行させろよw
d = d & Text1(ii).Text ←textの配列が119個ある g = g & "g_" & (ii + 1) ←mysqlのフィールド こんな感じで あとカンマも必要
ブレイクポイント確認するだけで済むような質問を投げるヤツの何と多い事か・・・
>>849 です。
出来ました。ありがとうございます。
Dim mysql As String
Dim id As Integer
Dim d As String
Dim g As String
Dim ii As Integer
For ii = 0 To 118 Step 1
'd = Text1(ii).Text
'g = "g_" & (ii + 1)
If ii = 0 Then
d = Text1(ii).Text
g = "g_" & (ii + 1)
Else
If ii <> 0 Then
d = d & "," & Text1(ii).Text '←textの配列が119個ある
g = g & "," & "g_" & (ii + 1) '←mysqlのフィールド
'd = d & Text1(ii).Text '←textの配列が119個ある
'g = g & "g_" & (ii + 1) '←mysqlのフィールド
mysql = "insert into g_table (g_id," & g & ") values(" & id & "," & d & ")"
Text1ってテキストボックスなのかw
>>853 Next無いのにできたのか
凄いなそれは
857 :
846 :2008/02/14(木) 18:30:13
>>848 日中ネットにつなげなかったので、長時間考えて同じ考えにいたりました。^^;;;;
ありがとうございました。m(_ _)m
858 :
デフォルトの名無しさん :2008/02/14(木) 20:17:43
859 :
846 :2008/02/14(木) 20:46:28
>>858 きちんと礼を書いてるから問題ないだろ?
860 :
デフォルトの名無しさん :2008/02/16(土) 13:23:45
VBどころかプログラムも超初心者です。 二次元配列を使って配列の中の数字を全てかけ算したものを メッセージとして出力したいのですが、どうやればいいのでしょうか? 配列の箱?は9こで、0〜2です。(0.0)(0,1)(0,2)(1,0)・・って感じです。 よろしくお願いします。
>>860 Dim MyNumber(8, 1)
Dim myFig as Double
Dim i As Integer
Dim j As Integer
On Error Goto tagErr_Msg
For i = 0 to 8
For j = 0 to 1
myFig= myFig * MyNumber(i,j)
Next j
Next i
label1.Caption = "計算結果 = " & Cstr(myFig)
Exit Sub
tagErrMsg:
MsgBox Err.Description & ", Err No =" & _
Cstr(Err.Number),Vbexcramation + vbOkOnly
>>861 ありがとうございます!
9つの箱って言い方悪かったです。すいません。
(0,0)(0,1)(0.2)(1,0)(1,1)(1,2)(2,0)(2,1)(2,2)の9つで
3×3の表の中身を全部かけ算するイメージなんです。
863 :
861 :2008/02/16(土) 16:26:01
>>862 あ、スマン、一カ所間違いに気づいた。
Forループに入る前にmyFig=1するべき。
じゃないと解はずっと0。
Private sub subCalcMatrix()
Dim MyNumber(2, 2) As Integer
Dim myFig as Double
Dim i As Integer
Dim j As Integer
On Error Goto tagErr_Msg
myFig=1
For i = 0 to 2
For j = 0 to 2
myFig= myFig * MyNumber(i,j)
Next j
Next i
Label1.Caption = "計算結果 = " & Cstr(myFig)
Exit Sub
tagErr_Msg:
MsgBox Err.Description & ", Err No =" & _
Cstr(Err.Number),Vbexcramation + vbOkOnly
End Sub
突然の質問で失礼します。 WinXP(SP2)、VB6(SP6)の環境でプログラム開発をしています。 最近、ActiveReports 2.0J(SP1)を使い始めたのですが レポートの設定を変更するとエラーが出たりVBごとフリーズしたりします。 例えば、ActiveReportsのサンプルプログラムでも デザイナを開いて、ファイル > ページ設定 の Printer Settings から 用紙サイズをデフォルトプリンタからA4に、 印刷の方向をプリンタの規定値から縦か横に変更。 この状態で実行するとフリーズするか、 「問題が発生したため、Visual Basicを終了します。〜」のエラーで強制終了されます。 まれにエラーが出ずに実行できるときもあります。 コードの方で Printer.PaperSize、PageSettings.PaperSize や Printer.Orientation、PageSettings.Orientation を変更するようにして実行すると 一度は表示されるのですが、何度か表示と閉じるを繰り返しているうちに エラーで強制終了となります。 変な質問で恐縮ですが、何か解決策ご存知でしたら教えてください。 よろしくお願いします。
>884 社外品は素直にそこに聞くのが一番さ
866 :
デフォルトの名無しさん :2008/02/16(土) 18:55:12
Ver6.0でテキストボックスに10個の数字を入力し大きい順に並べ替えてテキストボックスに出力するプログラムってわかりますか?
わかりますよ
868 :
デフォルトの名無しさん :2008/02/16(土) 19:35:54
教えて下さると嬉しいです
>>866 区切りは "," な
Dim Sep as Variant
Dim i as Long , j as Long
Dim Cnt as Long , Result as Long
Sep = Split(Text1.Text , ",")
For i = 0 to 9
For j = 0 To 9
Cnt = i
Result = Sep(i)
If Sep(i) < Sep(j) Then
Result = Sep(j)
Cnt = j
End If
Next
Sep(Cnt)=0
Text2.Text = Text2.Text & Iif(Text2.Text = "" , "" , ",") & Result
Next
If Sep(i) < Sep(j) Then -------誤 If Result < Sep(j) Then -------正
>869とほぼ同じだが。 Dim strNumber() As String Dim intDelimit As Integer Dim strExc As String Dim i As Integer Dim c As Integer strNumber = Split(Text1.Text, ",") intDelimit = UBound(strNumber) For c = 0 To intDelimit For i = (c + 1) To intDelimit If CInt(strNumber(c)) < CInt(strNumber(i)) Then strExc = strNumber(c) strNumber(c) = strNumber(i) strNumber(i) = strExc End If Next i Next c Text2.Text = Join$(strNumber, ",")
>>864 最初に、メーカーのドキュメントは確認した?
綺麗な環境を作ってから試してみてもダメなら、メーカーにメールを投げるしかないね。
特殊なエラーっぽいし、業務用ocxを触ってる住人の絶対数も多くはないと思うから。
>>869 870に修正してもソートされてないみたいだけど・・・?
>>865 、
>>872 レスありがとうございます。864です。
別の比較的新しいプリンタを開発機に接続して、
そちらをデフォルトで使う設定にしてみたところ、
レポートの設定を変更しても安定して動作するようになりました。
古い方のプリンタで強制終了される現象は未解決のままなので
とりあえずメーカーには報告しておこうと思います。
(プリンタによって動いたり動かなかったりするのは怖いなぁ…)
どうもお騒がせ致しました。
>871 横槍みたいで申し訳ありませんが、 > intDelimit = UBound(strNumber) > For c = 0 To intDelimit ・・・ > Next c の様にUBoundをループの外に出す書き方はよく拝見します。 For c = 0 To UBound(strNumber) ・・・ Next c の様に書かない理由はどういうものでしょうか? 私が思いつくのは↓の三つくらいですが。 1)Uboundを使うことで生じるデメリット(速度低下)は、 一時変数を増やすことで生じるデメリット(可読性低下)を上回るから 2)コンパイラはループの外に出せるかどうか判断しないので、人間がやらないとダメ 3)ループの途中で配列のサイズが変わるかもしれない危険を避けるため よろしくお願いします。 (>871さんのコードを例にしてしまいましたが、>871さんを揶揄するものでは決してありません。)
>>875 感覚的なものじゃない?
871のように書いておけば、あなたの挙げたような問題を意識する必要がないから。
Arrays.sort()
>>875 はずれ。最初に一度しか評価しないので、一時変数使う意味ない
すみません。>875です。 私は仕事で必要なプログラムをたまに書く程度のアマチュアです。 以前社内で使っているプログラムを変更させられたことがあるのですが、 それがN88BasicをそのままVBに移行したようなプログラムで、 一時変数使いまくりで(私には)分かりにくく、理解するのにすごく苦労しました。 結局一時変数をほぼ全滅させて、簡潔なプログラムにすることにしました。 で、分かりやすくなったおかげで、プログラムの変更もスムーズにできたわけです。 そんな理由で、私の中では一時変数はGOTO文並の悪役だったので、 プロフェッショナルな皆さんも、一時変数は慎重にそれ相応な理由を持って 使うんだろうと勝手に想像していました。 >876さんのレスを見て、慣れている方は一時変数くらい屁でもないのかな?と思いました。 >878さん、ありがとうございます。不勉強でした。 スレ違いみたいですので、これで終わりにします。 申し訳ありませんでした。
>879 プロシージャースコープの変数ならズンドコ使っちゃっていいんじゃね
iとかcとか意味不明のループの時点で見る気が失せる
MS08-008版のoleaut32.msmはマイクロソフトのサイトからダウンロードできないんでしょうか
全角数字が使われてる時点で見る気が失せる
そもそもVBのソース自体見る気が失せる。糞ソースの確率100%だし。
>881 ループカウンタなんてカウンタ以上の意味ないんだから、 単にiで良いんじゃないの? Dim intLoopCounter as Integer って方が萎えるな。
>>885 まったく同意
あと、無意味にVBを貶める発言もちょっと引くわ
VB6は今でも、簡単なツール作るために使うこと多いし
COMで作ったDLLの保守、デバッグの用ならVB6ほど使いやすいツールは無いぜ
つーかVS2005はノートPCで使うにはあまりにも重過ぎる
使える人はともかく、入門には薦めないがな
入門には方向性によってVB2008orVC#2008かVC++2008を勧めるが、 余裕があればVB6はできるだけやっといたほうがいい 社会にはVB6の資産・遺産・負債が膨大にあるし、現役で使われることもまだまだ多い 「仕事にありつく」ことを考えたら、「VB6がわかる」ことはかなりウェイト大きい VB6を捨てさせることしか頭にないようなレスは、MSの工作員かと思っちゃうよ
質問です VB6.0で帳票アプリケーションを製作中です。 帳票にはクリスタルレポートを使用します。 入力データは固定長のテキストファイルで一レコード3200Byte。 レコード長は最大でも60くらいです。 入力レコードを元に編集、ソートなどが多少は発生しますが、 殆どそのままクリレポの方に投げて帳票印刷する単純なプログラムです。 [レコードを全てバッファに読み込み]→[ソート、編集後に印刷]→[終了] としたいだけなのですが、 一度エクセルなどに取り込んだ方がいいのでしょうか? 作業用のツールですがパフォーマンス重視との担当の要望です。 VBははじめてなのでアドバイス頂けたらと思います。
エクセルを経由させる理由がわからないとなんとも言えんけど、 エクセルを起動させるのに結構時間かかるよ。
891 :
デフォルトの名無しさん :2008/02/20(水) 18:26:28
質問です。(Win2000, VB6 sp3, (.Netは使用できません)) コンソールAppを作成しているのですが、Sub Mainがすぐに終了してしまい困っています。 ソースで説明しますと、以下のソースのExeを作成してdos窓から実行すると、 処理が完了していないにも関わらず、Exeが終了してしまいます。 試しに、WaitForSingleObjectに自分のハンドルを渡しINIFINITEで実行したのですが、 それでも抜けてしまいます... どなたかご存知の方ご教授くださいませ。 Private Sub Main call OtherModule.Run() '糞重い処理 End Sub --- Private Sub Main call OtherModule.Run() '糞重い処理 call WaitForSingleObject(App.hInstance, -1) 'APIは定義済 End Sub
>>890 ありがとうございます。
テキストベースのレコードをソートするイメージを持ったとき、
エクセルでやった方がいいのかな?と思いまして。
読み込んだレコードを配列に入れちゃってソートした後に印刷かければ問題ないですか。
了解です。
893 :
891 :2008/02/20(水) 18:32:54
891です
>>891 の説明が少し間違っていました。
Sub Mainでコールした処理はタスク上は動作しています。また、正常に処理を終えます。
しかし、Mainがすぐに終了するため、見かけ上はすぐに終わるように見えます。
処理が終了するまでMainを抜けない方法を教えてください。
よろしくお願いします。
VB6ってメソッド呼んだ後、メソッド内の処理終わらなくても制御返ってくるの?
謎々みたい
896 :
891 :2008/02/20(水) 19:06:42
>>894 基本的にそのようなことはないです。
ですが、Sub Mainだけは(さらにFormが絡まなければ)別のように思えます。
なんとなく、Sub Mainは子プロセスを作成して、さっさと終了しているように思えます。
自分も初めてSub MainのCUIベースのアプリ作っていて、戸惑っているところです。
>>891 VB6の場合フォームなしでもSUBSYSTEMのタイプは必ずWINDOWSになるのですぐに制御が戻る。
VC6も入れてるならEDITBINが使えるはずだから修正してみたら。
EDITBIN /SUBSYSTEM:CONSOLE hoge.exe
898 :
891 :2008/02/20(水) 19:38:28
>>897 できました!レスサンキューです!
「Windowタイプ」という物があるとは...とても勉強になります。
本当にありがとうございました。
>>891 こういうのもある。
start /wait hoge.exe
>>888 M$がサポート打ち切るのに捨てるもなにも捨てるしかないだろう?
でもそんな直ぐに捨てられることは無いんじゃないか それに捨てられるかはMSが決めることじゃないし
いいかげん目を覚ませ 女の腐ったような奴だな
903 :
デフォルトの名無しさん :2008/02/20(水) 23:02:02
VB.NetでC#のusingやC++のusing namespaceに相当する文はないのでしょうか?
905 :
デフォルトの名無しさん :2008/02/20(水) 23:07:54
すいません、数分前に自己解決しました。 こんなのに2時間以上検索を続けていた私は何なのでしょう・・・ ありがとうございます。
所詮は一ベンダーの作った言語。標準化を進めなかったのが 運の尽き。ていうか、ひょっとしてGUIの標準規格って作ったら ニーズあるんじゃまいか
安心汁 Office Basicとして何度でもよみがえるさ!
908 :
デフォルトの名無しさん :2008/02/21(木) 09:20:31
VB6ってフリーで配布してないの?
サポートが終了しちゃうから配布はしないと思う、 そのかわりでVistaでいろいろ出来るようにとVS2008EEとかが無料なんじゃないかな 今度はVS2008Proが無料になるみたいだし
VB.NET以降は言語としては別物だしライブラリが豊富とは言え 作れるアプリはVB6より重いしVB6はまだまだ需要あるんだよなあ VB6のユーザーがVisual Studioで全く同じように扱えるようにも出来りゃ移行するやつ増えそうだけど
いいかげん目を覚ませ 女の腐ったような奴だな
VB6も、重い重いといわれていた時代がありました
Visual Basic(笑)
VB舐めんな
VB6は初心者向けだけどVB2008はプロ志向なんだよなー エラーメッセージもわかりにくいし
916 :
デフォルトの名無しさん :2008/02/21(木) 14:39:36
VB6でCSVファイルを読み込み、splitでカンマ区切りをしてデータを表示させるとき、 データの中にカンマが含まれていて、うまく表示できません。 何かいい方法はありませんか?
>>916 InputステートメントでCSVファイルを読み込んでください
918 :
デフォルトの名無しさん :2008/02/21(木) 14:55:57
>>917 Inputステートメントで読み込むとEOF関数で末端を検知するように
しているにも関わらず、実行時に「これ以上データがありません」と
エラーを起こしてしまいます。なぜでしょうか??
>>918 ちゃんと値を読み込む直前にEOFでチェックしてる?
再現できないYo
920 :
デフォルトの名無しさん :2008/02/21(木) 15:07:26
>>919 Do Until EOF(1)
Input #1, aa, bb,…
という風に直前にしているのですが、、、(汗
VB6 & XPSP2です。 自作DLLが突如動かなくなってしまいました。 アプリから呼ぼうとすると「430(クラスはオートメーションまたは予測したインターフェイスをサポートしていません)が出ます。 DLLのソースを開いたら、バージョン間の互換性が取れないというエラーが出てしまいました。 確かにマイナーバージョンを初めて1上げましたので、バージョンが違うと判断されたのでしょうか。 バージョン間の互換性をバイナリに設定しなおしたりバージョンを元に戻しても430エラーは止まりません。 MSDNライブラリでは、古いレジストリ情報を手動で削除しろとありますが、 レジストリエディタを開いてもどこに自作DLLの情報があるのか探しきれません。 どういう方針でどこから手をつければよいのでしょうか? よろしくお願いします。
>>912 つかさ、CSVファイルは、タブ区切りじゃなくて、カンマ区切りなんでしょ?
それで、データの途中にカンマがあるって仕様が破綻してないかい?
データ長が等しいなら、バイナリで単位長さずつ読み出すとか考えられるが
そのデータ構造を誰が考えたのかしらんが、自分で作ったなら再考したほうがいいよ
>>921 エラー内容(括弧内)でググッるとトップがm$のサポートページに飛ぶんだけど
その内容見て理解できる?
出来なかったらもう一度質問して
>>922 カンマ区切りの正しいフォーマットは知らないが,ダブルクウォートで囲まれた文字シーケンス中のカンマは読み飛ばしてくれるよ.
>>920 それはCSVのフォーマットがおかしいってことだな.
代案
・CSVの横幅(列長)が揃うようにフォーマットを厳密に規定
・1項目ずつ読み取る
926 :
>>916 :2008/02/21(木) 17:43:02
>>925 なぜかダブルクウォートでかこまれたカンマを読み飛ばしてくれなくて困っています。
1項目ずつ読み取るっていうのは具体的にはどういうふうにするんですかね?
ADOでCSVを読むといいよ。 カラム内のカンマや改行も解釈してくれるから楽だよ。
>>925 VBのinputにダブルクオートエスケープはあったっけ?
もしかしたらこっちの勘違いかもしれん
>>925 ちょっと試してみた
確かに、ダブルクオートによるカンマエスケープは利くね
なるほど、意外と便利だな
csv調べたら、2005年にRFC4180でしっかり仕様付けされてるんだねw なかなか為になったよ
>924 ありがとうございます。そこは読んでいました。 「不用意に外部インターフェイスを変更してはいけない」理由がそれだと理解しています。 クラスのパブリックメソッドやパブリックプロパティには変更を加えていません。 実際にコード上で変更がないのですが、バージョン互換のチェックが外れてしまったのかもしれません。 ただ実際に変更していない以上、ヘルプにあるように >この問題を回避するには、古い DLL あるいは EXE のレジストリ情報を手動で削除する必要があります。 レジストリを変更して、ローカルサーバーの汎用一意識別子 (UUID) とインターフェイスを 元に戻せないものかと思って質問した次第です。 またオートメーションやバージョン互換については、何となく分かった気になって使っていますが、 理解度としては中途半端だと思っています。
936 :
861 :2008/02/21(木) 22:06:06
>>920 え。
Do
Loop Until EOF(1)
ではないかい?
>935 あー、2003の頃は5000円だったSpokeがロハになったって話か。
>>926 Do
Input #1, aa
if EOF(1) then Exit Do
Input #2, bb
if EOF(1) then Exit Do
...
Loop
みたいなかんじ
というかそもそもCSVに書かれてあるデータのフォーマットがおかしいんだから
読み込みの方で対処するのはおかしいんだがな
Excelが吐くのがCSVのデファクトスタンダードだからなー。 パーザを手抜きしてるのが悪い気がするナー。
で、遅いのでどうにかなりませんかという質問が出て・・・
少々時間をロスする方法だが LineInputした1行をForでまわして1文字づつチェック。 いらない文字を捨て、必要な文字列だけ抜き出したら駄目なんかい?
>>942 ちなみに元の質問がそんな感じのを聞いていたけど
Inputで読み取るように誘導してるおれ
>>940 あ、これは一応enumを変えているのか、失礼
まったくコードを変更していないということから考えるとおかしいんだよなぁ
>>933 スマン
>>921 をちゃんと読んでなかった・・・・
そのdllが参照しているほかのCOM(ocx,dllなど)が何かしらの理由で
バージョンが古くなったりおかしくなってる可能性が高い
正常に動いていたバージョンからエラーが起きるようになった時までにインストールしたアプリが
dllが参照しているcomオブジェクトに何かしらの影響を与えたと思われる
ちなみに
今手元の開発環境にはmsdnを入れていないので古いレジストリ情報を手動で削除〜と書いてある理由が分からないが
VBで作ったある程度大きなactivexdllを手動で削除するというのは、結構面倒くさいのでよほどのことがないとやらないよ
VB6で作られてる優良アプリってなにがある?
>>921 DLL のバックアップはないんだろうか。
・・・あったら聞きにこないかw
>>936 0件のときどうすんの?
gotoでやり過ごす
>>947 if 0<= FileLen("ファイル名") then:ファイルサイズが0の場合の処理。
てかんじでファイルサイズを参照してからDo に入れば良いのでないかい?
950 :
949 :2008/02/22(金) 09:54:43
あ、ごめ、<の向きが逆だった。。orz
>945 >947 呼び出し側の参照設定をやり直して再コンパイルしましたが、エラーが止まりません。 諦めて、コンパイル時にDLLの名前を少し変えて完全に別物とすることにしました。 (プロジェクト名他はそのままで) 例えば AAA.DLL→AAA1.DLL そうしたら、エラーが出なくなりました。 呼び出し側はAAA.DLLを参照したままなんですけど・・・??? まあ呼び出し側を変更せずに動くようになったので、 当面の問題は解決したということにしたいと思います。 が、私がActiveXを十分に理解しないでいるのが一番の敗因だと思いますので もっとよく勉強して次に備えようと思います。ありがとうございました。 ちなみに、自作DLLは、元々EXEで使っていたものをDLLにしたものです。 EXEのコードはほぼそのままで、mainに引数を渡すパブリックメソッドを一つ書いただけのクラスを被せています。 ですから、外部インターフェイスは変わりようがないのです(中身は変更を加えています)。 そのパブリックメソッドでエラートラップをかけると430エラーを返します。 トラップを外すと、呼び出し側で13エラー「型が一致しません」が発生します。 「型が一致しません」でもググりましたが、 バージョン互換の問題で発生しているケースが結構ありました。
>>949 >>920 のように書けばいいと思うんだ。
ループの終了条件を後ろに持っていく意図がつかめない。
あと、オープン済みのファイルに対してなら、FileLen 関数より
Lof 関数使ったほうがいいと思う。
953 :
949 :2008/02/22(金) 11:17:09
>ループの終了条件を後ろに持っていく意図がつかめない EOFの検出してから再度ファイルにアクセスしてしまうというのが問題の発端のじゃないかい? >あと、オープン済みのファイルに対してなら、FileLen 関数より >Lof 関数使ったほうがいいと思う。 おれが言いたかったのはオープン前の話。
>EOFの検出してから再度ファイルにアクセスしてしまうというのが問題の発端のじゃないかい?
問題の解決になっていないのは置いとくが、
そもそも終了条件を後ろにもっていくのはおかしい。
0件のときどうする、なんてのは少なくとも
>>936 の頭には
無いように見えたから指摘したまで。
>おれが言いたかったのはオープン前の話。
>>949 からは、そうは感じ取れなかった。スマンな
956 :
デフォルトの名無しさん :2008/02/22(金) 20:13:04
String変数にクラスの名前が入っていて、 そのクラスのインスタンスを作成したいんですが、 どのようにすればいいでしょうか?
>>956 Dim clsObject As Object
Select Case クラスの名前
Case "犬"
set clsObject = New TeacupChihuahua
Case "猫"
set clsObject = New AmericanShort
Case "スベスベマンジュウガニ"
set clsObject = New SilkyBunCrab
End Select
>>957 それはわかるんですが、クラスの数が多く、
クラスの入れ替わりも多いので、
ひとつの記述でできたらと考えています。
何か良い方法はありませんか?
そんなときのためのIDispatch Object o = CreateObject( ObjectName )
961 :
デフォルトの名無しさん :2008/02/24(日) 13:02:41
別テーブルに同じ名前のフィールド名があるんですが、これをExcelで表現しようと格闘中です。 VB6.0でどのように表現すればいいのでしょうか? 具体的に テーブル名 A B フィールド名 Fname Fname があるとします。これをExcelで帳票を作りたいと思っています。 "SELECT a.Fname, b.Fname FROM A a, B b WHERE a.delf = false としたのですが Sub Makeline(rs, row) Cells(row, 1) = rs("a.Fname") Cells(row, 2) = rs("b.Fname") と書き込んでもエラーが出ます。 この場合、どのように書けばいいのでしょうか? 知ってる方がいましたら、教えて下さい。 ヨロシクお願いします。
select a.fname hoge1, b.fname hoge2 from rs("hoge1") rs("hoge2")
963 :
961 :2008/02/24(日) 14:26:34
>>962 select文でエラーが出てしまいます。
from以下は同じでいいんですよね?
hogeを指定しなくていいんでしょうか?
じゃあ select a.fname as hoge1, b.fname as hoge2 from
965 :
961 :2008/02/24(日) 15:19:30
>>964 おお!できました。ありがとうございます。
おかげ様で上司に怒られなくて済みそうです。
966 :
961 :2008/02/25(月) 13:07:47
961です。 昨日はさりがとうございました。&またお尋ねしたいことがあります。 今度は7箇所くらいのテーブルから各々のフィールドを読み込み、帳票を作成しております。 962さんから教えていただいた内容で出来るのですが物凄く時間がかかります。 だいたい1時間くらいかかってしまいます。 SELECT以下の文字が多すぎて読み込みに時間がかかるようです。 もう少し短時間で終わるようにできませんか?
DBMSは何?
>>966 文字が多すぎるせいじゃないと思うよ。
インデックスとか張れば速くなるんじゃない?
969 :
961 :2008/02/25(月) 13:57:30
>>967 PostgreSQLです。
>>968 多すぎじゃないんですか?
でもインデックスの張り方がわからない・・・
ちょっとググってきます。
SELECTが遅いんじゃなくてExcelが遅いんじゃねーかと思ったり
>>966 当然、エクセルの画面描写をとめてるよね?
972 :
961 :2008/02/25(月) 14:30:15
Excelのせいなのかな?
>>971 止めています。データ自体は大した量ないんです。
>>972 セルに1個づつデータセットしてないか?
2次元配列作ってRangeオブジェクトに対して一気にセットしてみ
974 :
961 :2008/02/25(月) 15:20:01
>7箇所くらいのテーブルから
単にSQL文じゃないのか? テーブル7つ結合してるわけじゃないだろうけど。
>>961 SQLが返るのは早くて、編集に時間が掛かってるの? どこが遅いのか切り分けないと。
>>975 だな。
EXCELの操作で遅いなら、
Excel Creator使うと高速になるし、
自分で書いてるデータ処理が遅いなら、
ロジック晒せば高速化も出来るだろ。
経験上、データ取ってくるところより、
・取得データをレコードセットのまま操作している
・EXCELのセル1つ1つにデータセットしている
なんてことしてるとやたら遅くなる。
この流れはテンプレ化すべきだと思うんだ
978 :
デフォルトの名無しさん :2008/02/26(火) 17:21:11
任意に項目(数量)が追加、削除されるリストボックスの値の合計値を得たいのですが、 list1.list(1)+list1.list(2)… とやると合計値ではなく連結した文字列になってしまいます。 かといって Cint(list1.list(1))+Cint(list1.list(2))… とすると型エラーが出てしまいます。 もしよろしければアドバイスお願いします。
>978 > list1.list(1)+list1.list(2)… > とやると合計値ではなく連結した文字列になってしまいます。 listプロパティはストリングだから、+はストリング同士の連結の演算子になっちゃう。 だから型変換すれば良いのだが、 > Cint(list1.list(1))+Cint(list1.list(2))… > とすると型エラーが出てしまいます。 俺んとこのVB6はそんなエラー出さないよ。 リストボックスに入ってる値をよ〜く確認してみたら? Listにデータが何個入ってるのか知らないけど、 整数型に変換できない値がどこかにあるんでしょ。
ループで回してやれば、具体的に何番目のデータで型変換に失敗するのか、 デバッグ時に確認しやすいだろ。つか、普通にループ回せ。 Dim i As Integer, sum As Integer For cnt = 0 To List1.ListCount - 1 Let sum = sum + List1.List(i) Next i
×For cnt = 0 To List1.ListCount - 1 ○For i = 0 To List1.ListCount - 1 orz
数値変換できるかどうかは IsNumeric関数使うといい。
IsNumericは使うなよ!
え、なんでなんで?
少しは考えろよ 常識だろこんなの
ありがとうございます。 まさに項目の計算で for i = 0 to listcount としたのが不味かったみたいでした。 listcount-1 にしたら問題なく動作しました。 こんな簡単な事だったとはorz
あるあるww
>>984 IsNumeric 関数は、可能な限り数値として認識しようとするから
全角の数字や、一部の特殊文字(\とか)が許されてしまう。
それを踏まえて使うぶんにはいいが、業務プログラムだと許されない事が
多いんじゃないかな。
IsDate 関数も同じような動きをしていて、
? IsDate("2008/2/27")
? IsDate("27/2/2008")
? IsDate("2/27/2008")
3つとも 2008/02/27 と認識されて True を返す。
? IsNumeric("¥1,234") True ? "¥1,234" * 2 2468 ? CLng("¥1,234") 1234 IsNumericは通った後にC〜系の型変換使えば何の問題もない。 ? Format("2008/2/27","yyyy/mm/dd") 2008/02/27 ? Format("27/2/2008","yyyy/mm/dd") 2008/02/27 ? Format("2/27/2008","yyyy/mm/dd") 2008/02/27 IsDateは通った後にFormat関数で整えれば何の問題もない。
>989 >988が言いたいのは そもそも2008年2月27日を意図して27/2/2008と打つ奴はイネーだろって話じゃないの? データ入力者が微妙に打ち間違えたとき、トンでもない日付に解釈されちゃったら エラーで拾えないだろってことでそ?
>>990 >データ入力者が微妙に打ち間違えたとき
もう少し、よく考えた方がいいぞ。
ノートで4100と入力しようとして4e100と入力されてオーバーフローおこしたのはどこのどいつだい?
お前さんの失敗談乙
入力のときKeyPressのイベントかなんかで数字キーのみに限定し、 かつC変換かけるときOn Errorで網張っとくのが普通だわな。 自分の不出来さを晒すなんて(ry
KeyPressで文字を弾いてマウスのコピペにやられちゃったのはどこのどいつだい?
>>996 あのさ、マジレスすると、お前プログラマ辞めた方がいいよ。
お前の言ってることは、とりあえず全部回避する方法が有る、
にもかかわらず、お前は知らないだろ。
知らないなら知らないでもいい、初心者スレなのだから。
だがお前みたいに知ったかぶってる奴はいつか、
誰も助けてくれない状況で他人に多大な迷惑かけるようなミスをやる。
ここでアドバイスしている連中がIsNumericだけで計算に値を渡すような日曜プログラマみたいなことしないよ。
だといいね。
>>996 >KeyPressで文字を弾いてマウスのコピペにやられちゃったのはどこのどいつだい?
てのの答えが以下なような気がw
>>994 >かつC変換かけるときOn Errorで網張っとくのが普通だわな。
必要であれば入力された文字数も数えるし、値変換する前に数字だけかどうかforで回してチェックしたりもするw。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。