VBプログラマ質問スレ(6.0以前) Part39
1 :
デフォルトの名無しさん :
04/11/06 19:31:03
∧∧ ( =゚-゚)< >1-3乙。今度こそ良スレになりますように。。。
初めての方へ。 このスレは初心者の質問にも満足に答えられないスレです。 ご了承ください。 ただし、質問に対して回答が分からないくせに書き込む行為は 荒らし行為として取り締まられるので、徐々に治安はよくなって いくと思われます。
>5 オメデトウ!お前がアラシ第一号だ。 何でそんなに粘着するんだ?彼女をVBに取られたのか?(プ
質問する場所間違えたかも・・・ ここに質問した方がよかったかな。 シート1のA1〜A100まで値が入っていたとして、その中から 文字列で「AA」が入ったセルだけををシート2のB列にコピーしたいのですが どうしてもうまくいきません、誰か助けてください
VBAはVBAスレで。 マルチは氏ね。
てか、このスレいつまで続けるの?
11 :
デフォルトの名無しさん :04/11/07 03:25:24
VisualBasic6.0 sp6 timeSetEventを使ってタイマーにしているのですが、 コールバック関数内でDLLを呼び出そうとすると、 VB上では問題ないのですが実行ファイルにするとエラーになってしまいます。 DLLのバグかもと考えたのですが、ためしにコールバック関数内でMsgBox使ってみたら これでもエラーになるようなのでコールバック関数内ではなにか呼び出すようなことはできないのでしょうか?
次のテンプレに入れてくれよ エラーが出た時はエラーメッセージをそのまま書く事 と。
13 :
デフォルトの名無しさん :04/11/07 03:33:47
エラーというかOS(WinXP)の強制終了(Microsoftに送信しますか〜云々)がでます。
↑11です。
>>13 コールバックの中で他の関数呼び出すのはOKだったと思うよ。
他のマルチメディア系のAPIだと、コールバックの中で使えないAPIあったりするから、
もしかしたら、これもあるかもしれんけど。
コールバック関数の定義ミスか、初期化してないバッファへ書き込みに行ったかだとは思うけど、
VB上で正常に動作しているなら前者は無いと思うし、後者は実際のコード見ないとわからないし。
プロジェクトにデバッグシンボルを吐き出せるようにする設定があるから、それをオンにしてから
実行ファイルを作り直して、VCでデバッグ実行して確認したほうがいいかも。
たいがい一発で原因が分かるよ。
DirectXを使うのあった。
http://www.koalanet.ne.jp/~akiya/vbtaste/vbp/ タイトル マルチメディアタイマーを用いたストップウォッチ
ファイル名 StpWch00.lzh
サイズ 9KB
更新日 2002/03/12
今後の予定 ひとまず完成版とさせて頂きます。
分類 VB6で作成したサンプル
機能 マルチメディアタイマーを使ってストップウォッチを組み立てます。
主な内容 API関数timeSetEvent、timeKillEvent、timeGetTimeの使い方。
イベントオブジェクトをDirectXforVBで待ち受ける方法。
注意 DirectX8 for VBを利用しています。
DirectX7 for VBで使用するには、一部修正する必要があります。
DirectXでやってみました。 動くには動くんですが・・・どうもtimeSetEventをコールバックでやるよりも精度が悪いです。 具体的にはメトロノーム作っているのですが。 VBでは限界なんですかね。
>15 「思う」じゃないだろ、「思う」じゃ。 「かもしれん」じゃないだろ「かもしれん」じゃ。 「わからないし」じゃないだろ「わからないし」じゃ。
質問者と一緒に悩んでる回答者多すぎ。 分かる場合だけ回答して、分からない場合は静観する。 こんな簡単なルールが守れないか?
>>20 それは自分で問題を解決した(しようとした)ことがない奴の意見としか思えん。
あるいは、ガッコの宿題的にとにかく問題が解決すればいいと思ってる奴か。
はっきりした回答じゃなくても、ちょっとした情報が問題の解決に
つながる場合だって往々にしてあるんだよ。
>>21 馬鹿かお前
くだらん無駄情報は相手の時間のロスにしかならない
無駄足を踏ませるのが目的なのだよ!!!
だいいいち、グダグダ言ってねえで ただ答えだけ教えろって何様のつもりだよ。
>>22 日曜の昼間からそんな風に面識もない奴煽って楽しいか?
まあ煽りじゃなくて本気かもしれないが。
いずれにしろかわいそうな人ですな。
会社でも遠まわしで的を射ない中身の無い時間だけすぎてゆく会議が得意なんだろう あ、餓鬼か無職かな?
>>21 答えを書く気が無いのなら邪魔だから消えてくれないかな
「答え」ねえ。。 言葉の端に出自が現れますな。
>>29 反論できなくなるとソレですか。
あなた、頭わるいですね。
なぁ、オマエラ。「答えを書け書け君」よ、お前だ。 そんなにイヤなら会社辞めれば? 「SE」とか「PG」という職業に憧れて入ってみたらVBでさえ分からなくて 会社で叩かれ、恥をかいて捌け口を2ちゃんに求めるなんざ愚の骨頂。 頼むからリアルで勉強会でも開いて学び合うとか前向きになるか、 それでもなければ、他でやってくれ。ハッキリ言ってウザイ
>>32 雑談したければ、他のスレ行けばいいんじゃない?
質問があり、それに答える。それの何が悪い?
間違っている情報を相手に与える方が迷惑とは思わない?
無駄足を踏ませるのが目的なのだよ!!!
関係ない雑談は他所でやれ、と 関係ない雑談をするお馬鹿さん。 クレタ人のパラドクスみたいだな。
>24 答え以外に低脳人からほしい情報はない。
>36 いいえ
>31 その前に反論してもらえるようなことを書けるように なった方がいいよ。
ほーら、こんなスレいらねーじゃん。
>34 >>間違っている情報を相手に与える方が迷惑とは思わない? オマエ・・・・ 何様だ?
以上>40の自作自演でした。 End Sub '------------------------------------------------------------------
次の質問ドゾー できればマトモなヤツおながいします
44 :
デフォルトの名無しさん :04/11/07 16:06:51
はじめまして。プログラム初心者です。 Cで作成されたAPIを呼び出す時の質問なのですが、 Date型の引数は、VB側ではどのようにすれば値を取得することが できるのでしょうか? よろしければ、どなたかご回答お願い致します。 環境:VB6(SP5)
服の上から裸を見る方法があるなら是非教えてもらいたいですね
>>44 CにはDate型なんてないよね。構造体かな?
自作DLLがらみの問題の時は、
DLL側の宣言部だけでも掲示してもらわないと
どうしようもないよ。
47 :
デフォルトの名無しさん :04/11/07 18:16:06
>>46 申し訳ございません。私の勘違いでした。よく調べてみると
func_API(ByRef intTime As Long)という感じで、
intTimeにはUTCの時刻が返ってくるようなのですが、
これをVBのDATE型にするにはどのような方法があるのでしょうか?
DateVaue()
49 :
デフォルトの名無しさん :04/11/07 19:12:47
>>48 APIからは「1087440828」のような「経過秒」が返ってくるのですが、
DateValue()で変換することが可能なのでしょうか?
>>49 Dim t As Long
t = 1087440828
Text1.Text = DateAdd("s", t, "1970/1/1")
UTFは知らん。
いかん。UTFじゃなくUTCだよな。書き間違い。 日本国内決め撃ちでよければ、さらに9時間足せばいい。
52 :
デフォルトの名無しさん :04/11/07 20:07:56
>>51 上記の方法でできました!
本当に有難うございます!!
>>18 > DirectXでやってみました。
> 動くには動くんですが・・・どうもtimeSetEventをコールバックでやるよりも精度が悪いです。
> 具体的にはメトロノーム作っているのですが。
精度悪いんかなぁ。まあtimeSetEventよりも余計な処理が入っている分
少しは悪いとは思うが。メトロノームくらいなら十分な気がするんだけど。
どういうことをやって違いがわかった? もはや人間には違いがわかない世界だと思うんだけど。
タイマー内の処理が長すぎたりしない?ソースコードの修正で精度を改善できそうなきがする。
>>17 のサンプルはtimeSetEvent(の別名MMTimeSet)のResolution(分解能)が
5になっているからそのせいじゃない?
あとtimeBeginPeriodで精度をあげることができるのでそれを使うとか。
またバカしかいない
55 :
デフォルトの名無しさん :04/11/07 22:41:37
クラスが作成できなくなりました。 プロジェクトを右クリック→追加でクラスが現れません。 どうすればいいですか?
下痢でVBVBVBVBVBVBVB ってうんこが出る
57 :
デフォルトの名無しさん :04/11/07 23:21:18
数値から漢数字がほしいんですが Format関数あたりで可能でしょうか? Ex. 1→一 2→二 3→三 …
>>57 漢数字と一言で言われてもな
1〜10まででいいのか
壱千萬
十万
壱〇〇〇〇〇〇〇
様々な書き方あるわけだが。
59 :
デフォルトの名無しさん :04/11/07 23:26:27
>>57 うわw
微妙なことしてんなーw
もちろん。わかんねw
>>58 たしかにそうですね・・ほしいのは一から九までです。
Format関数ってけっこう奥深いというかいろいろできるようなので
もしかしたらと思ったんですが…
>>60 For i = 1 To 10
Text1.Text = Text1.Text & Mid("一二三四五六七八九十", i, 1)
Next i
こんなもんでいいじゃん。配列でテーブル持ってもいいし。
念のため 五.荒らしは相手しない。
>>61 あ、それいただきますw
関数作るほどでもないし、どうせループで回してるので
無駄にコードの量増やさずにすみました。
ありがとうございます!
64 :
デフォルトの名無しさん :04/11/07 23:56:39
>>61 横レスだがおまえすげえな!! 感動した
Select case で。。。とか書こうと思ったがやめてよかった
66 :
デフォルトの名無しさん :04/11/08 00:00:39
だらだら書くけど、速度を考えるとSelect Caseの方が いいかもしれない。(内部的にテーブルに変換される) でも配列を使ったほうがもっと良いかな。 最適化の設定にもよりそうだけど。 実際にコンパイルしてやってみないと正確なことはわからんけど。
>>64 何気ないところで(あ、かしこいな)って思う書き方ってありますよね。
すごく勉強になります。
>>67 なるほど・・
コードの見やすさは速度には比例しないんですよね…。
わかってはいるけどけっこうIIfとか多用しちゃってます。。
おいおい、
>>61 みたいなアホなコードで感動しちゃだめだろ。
Chooseつかうでしょ、普通は。
Chooseは結構遅いぞ。だからマイナー感が強い。 >61さんので充分イイと思うが。 マジレスごめん。
Mid("一二三四五六七八九十", i, 1) Choose(i, "一", "二", "三", "四", "五", "六", "七", "八", "九", "十") ・・・まあ、好みだな 1文字じゃなかったらChoose使うかもしれない
72 :
デフォルトの名無しさん :04/11/08 00:39:18
Chooseはグリッドコントロールの項目名割り当てくらいしか 使い道が思い浮かばん。初期化には便利な方法だよな
>>70 いや、確認したわけじゃないが内部の処理を想像すると(Cで実装することを
考えると)Mid$がChooseより遅いとは思えない。
Chooseって内部的には恐らくchar*の配列みたいなもんでしょ?
(誤)遅いとは思えない。 (正)速いとは思えない。
もう配列でいいじゃん
76 :
sage :04/11/08 00:47:42
正直このような軽いロジックは何使おうが己のセンスでかまわんと思う ちゃんと動けば
>>73 内部はそうかもねー
呼び出す時は、Chooseの場合、多ければ多いほどスタック処理が増える事はわかるよね
>>53 普通になんか遅いような・・・って思って計ると遅かったです。あとリズムがよれる。
もちろん1msにしてますが。
タイマー内の処理も簡単です。
timeSetEventだけ(VB上だと問題なく動くので)のときは問題なかったですし。
>>77 スタック処理?
ハードコーディングされてるポインタ配列引くだけでしょ?
>>79 Mid("一二三四五六七八九十", i, 1)
の場合、3個のデータを渡す
Choose(i, "一", "二", "三", "四", "五", "六", "七", "八", "九", "十")
の場合、11個のデータを渡す
Cがわかるなら作ってみてアセンブルリストを見よう。
Win2000 VB6 SP6 です。分かる人いませんか?
a = Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九") Text1.Text = a(n)
おー、配列ってArrayで作れるんだ。
>>55 俺も同じ環境でメニューバーから「参照設定」が消えたり
ツールバーの「オブジェクトブラウザ」や「ツールボックス」とかが勝手に消えたりした。
アプリケーションの追加と削除でアプリケーションの修復をやったけど
完全には戻らなかった。
一旦VBをアンインストールしてから再インストールしたら元に戻ったよ。
まあクラスモジュールを追加したいだけならメニューバーの 「プロジェクト」→「クラスモジュールの追加」でいいな。
キーボードでピアノが弾けるギターフリークス的な音ゲー作ってるんですけど 落ちてきた文字に合わせてキー押すとGOODとか出したいんですけど どうしたらいいですか?
>>86 これだけの情報で
どんな解答を望んでいるんだい?
VB6のエディタで、マウスのスクロールがなぜか使えません。 マイクロソフト純正だったら使えた記憶があるのですが・・・。 皆さん、どのようなマウスを使ってますか? プログラム内容の質問でなくてごめんなさい。
ロジクールはスクロールできるよ
そりゃあロジのマウスドライバ入れたからだべ
>>91 ソフト入れました。
ありがとうございました!
>>92 もしや、記憶にあったのは、ロジクールかもしれませぬ・・・。
画面をVBで作成し、重い処理をする部分をVCで作ったDLLに したいのですが、そんなやり方を紹介しているいいサイトは ありませんか?
>96 ありがとうございます。
98 :
デフォルトの名無しさん :04/11/10 10:59:44
Frameの中にあるコントロールから 抜けるときに 発生するイベントってないでしょうか? つまり、別のFrameに移動する場合とかです。
99 :
デフォルトの名無しさん :04/11/10 11:08:08
>>95 でも、その考えって古くないか?
今それほどCのDLLだから早いって処理は無いと思うが。
ネイティブコンパイルしてる限りは。
>>98 無い。
100 :
デフォルトの名無しさん :04/11/10 11:37:43
ラベルのキャプションや テキストボックスのテキストに ○にaとか使いたいのですが どうすればいいでしょうか? ???? ← 出るかな?
>>100 まず出ていない。w
外字だと思うので、外字とVBをキーワードにしてグーグル様にお願いしてみては?
事例は結構あると思いますよ。
>>100 UNICODEのキャラクタじゃないのか?
それならばWebBrowserに食わせれば出る
>>98 Form_LostFocus
他のアプリに移る時も出てしまうがな
>>103 元質問者のはフレームだぞ。
ようは、特定のコンテナに属するコントロールからロストフォーカスしたときに
コンテナからのロスとフォーカスとして一括で扱えるか?って言うことだと思う。
105 :
98 :04/11/10 16:14:00
やはり無理そうですね。
>>99 私もそう思う。
いろんな言語で書くとメンテナンス性が悪い。
画像処理はDLLに渡すなあ Cだと参考になるソースも豊富だし、速度が桁違い。 全部Cで作れよとつっこまれたら返す言葉は無いが。
108 :
99 :04/11/10 18:00:03
>>107 画像というか、大量のメモリー空間を操作したい処理の場合ですね。
VBだとどうしてもオブジェクト経由でしかメモリーにアクセスできないから。
その点はその通りと思います。
ただ、そういう場合VBでやるなら、コンポーネント買っちまうのが流儀だと思う。
コード書く以前の問題で申し訳ないんですが コード書く場所でマウスロール使えないんですか? 設定のところを一通り見てみたんですが、それらしき項目がなかったので皆さんどうしてるのか気になりました。
110 :
デフォルトの名無しさん :04/11/10 18:16:56
MSCommについての質問です。 使用例にある ' 入力文字列用バッファ。 Dim Instring As String ' COM1 を使用します。 MSComm1.CommPort = 1 ' 9600bps、パリティなし、データ長 8 ビット、およびストップ ビット長 1。 MSComm1.Settings = "9600,N,8,1" ' Input プロパティ使用時に、バッファ全体を読み取るように設定します。 MSComm1.InputLen = 0 ' ポートを開きます。 MSComm1.PortOpen = True ' モデムに AT コマンドを送信します。 MSComm1.Output = "ATV1Q0" & Chr$(13) ' モデムが ' "OK" と応答するのを確認します。 ' データがシリアル ポートに戻るのを待ちます。 Do DoEvents Buffer$ = Buffer$ & MSComm1.Input Loop Until InStr(Buffer$, "OK" & vbCRLF) ' シリアル ポートで "OK" 応答データを読み取ります。 ' シリアル ポートを閉じます。 MSComm1.PortOpen = False を使うと、CPU使用率が100%になるのですが、そうならない方法はありますか? できれば、プロシージャの外に処理を出したくないのですが。
>>109 どこでもホイールというソフトでも入れたらいい
>>110 100%がいやならばOnCommイベントで取るしかないが。
'Sleepするのは邪道?
>>111 うおおお、こんな便利なソフトがあるなんて
助かりました。ありがとうございました。
>>108 市販のコンポーネントを積極的に取り入れるのは賛成なんだけど、
仕事だと使えない場面も多いね。
〜分析というアプリを作る場合は特に。
115 :
デフォルトの名無しさん :04/11/10 20:43:17
>>110 ていうか、まずそのサンプルコピペして一丁あがりって根性を直すべきだと思う。
中身理解してないコードを何の恐怖もなく平気で使える感覚が怖い。
結構どこの会社にも
>>110 みたいな人っているみたいだけど。。
>>116 雑談は他のスレでやれ。
プログラマー板のほうがいいんじゃないか?お前が原因で空気悪い。
Shapeの貼り付けのことで質問なのですが 重なる順序を後から変更することは可能でしょうか プロパティを見てみたのですが、それらしきものを見つけることが出来ませんでした。
>>120 ありがとうございました。
いろいろ実験してみようと思います。
122 :
デフォルトの名無しさん :04/11/11 11:04:26
在庫管理のメニューから呼び出される「商品保守」のForm_Loadプロシージャの部分 なのですが、 Private Sub Form_Load() dat商品.DatabaseName = strDbName dat商品.RecordSource = "SELECT 商品コード,商品名,単価 FROM T_商品" dbg商品.Columns(0).Caption = "コード" dbg商品.Columns(1).Caption = "商品名" dbg商品.Columns(2).Caption = "単価" dbg商品.Columns(0).DataField = "商品コード" dbg商品.Columns(1).DataField = "商品名" dbg商品.Columns(2).DataField = "単価" dbg商品.Columns(0).Width = 300 dbg商品.Columns(1).Width = 4050 dbg商品.Columns(2).Width = 1000 dbg商品.Columns(0).Alignment = dbgRight dbg商品.Columns(1).Alignment = dbgLeft dbg商品.Columns(2).Alignment = dbgRight dbg商品.Columns(2).NumberFormat = "###,#0" dat商品.Refresh End Sub これを実行すると「インデックスが有効範囲にありません」となってしまいます。 アドバイスをお願いします。
Columns()は0〜2まで存在している事は確認済みか? つーかどの行でエラーが出るのかくらい書け。
124 :
122 :04/11/11 11:29:46
お返事有難うございます。 エラーは dbg商品.Columns(2).Caption = "単価" のあたりから出ます。Columns()が0〜2まで存在する事を確認するにはどうすれば 良いのでしょうか? T_商品というテーブルには 商品コード、商品名、単価のカラムがあることは 確認しています。
>>124 123じゃないが、問題はDBのテーブルじゃなく、多分使ってるであろうDBグリッド側です。
そっちのデザイン上、DBグリッドのカラムはどうなっていますか?
あと、実際にDBのカラムが参照されるのは最後のリフレッシュです。
126 :
122 :04/11/11 11:57:17
>>125 御返事ありがとうございます。
コントロールを張りつける画面ではDBグリッドカラムが二つしかない状態です。
これが原因なのですね。色々とデザインの画面をさわってみたのですが、
DBグリッドのカラムを増やすにはどうすれば良いのでしょうか。
>>126 それぐらいはヘルプを読め。それでもわからんかったら、どこがわからんかかいてくり。
とりあえず dat商品.Refresh を dat商品.RecordSource の次に入れてみれ
129 :
122 :04/11/11 12:46:36
>>127 ヘルプのディスクが無いみたいなので、WEBで検索して勉強します。
アドバイス有難うございました。
>>128 dat商品.Refreshの位置をかえたらちゃんと表示されるようになりました!
アドバイス有難うございました。
前スレ終わりそうなのであげ
131 :
デフォルトの名無しさん :04/11/12 11:18:54
一つのプロジェクトファイルの中にFormをどかどか作っていったら コンパイル後 EXEファイルのサイズが2MB近くになってしまいました。 コンパイルにかかる時間もだんだんと長くなってきましたが 実行時は全く問題なく動作します。 開発、実行環境にもよると思うので一概には言えないと思いますが 最大でどれくらいまで大丈夫なものでしょうか? 又は 最大でどれくらいのファイルサイズのEXEを見たことありますか?
>>131 見るだけなら10M20Mはざらですが。
100フォームとか。
まあ、自分じゃ絶対やらないけどね。その前にEXEを分割してしまう。
EXE間の連携とかもある程度ノウハウだし。
そもそも画面設計段階でなんとか考慮するし。
133 :
デフォルトの名無しさん :04/11/12 12:08:36
ポップアップメニューについてお聞きします。 TextBoxを右クリックするとポップアップメニューが出るのですが、 この内容を別のものに変更したいのです。 Text1_MouseDownイベントの中で自分で作ったメニューを if Button = 2 then PopupMenu menuOriginal end if みたいな形で読んでみたのですが、右クリックすると やっぱりデフォルトのポップアップメニューが出てしまいます。 デフォルトのものを出さずに自分が作ったメニューを出すには どうしたらいいのでしょうか?
自己レスです。 デフォルトのメニューを消すにはMouseDownイベントの中で Text1.Enable = False Text1.Enable = True としてやればいいようです。 失礼しました。
136 :
デフォルトの名無しさん :04/11/12 13:54:40
PictureBoxに描画させた円や線をコピーして別の PictureBox2にそのまま全体をペーストするにはどうすればいいのですか?
137 :
デフォルトの名無しさん :04/11/12 13:56:05
コマンドボタンの文字の色を変えるには どうしたらいいでしょうか?
138 :
デフォルトの名無しさん :04/11/12 15:24:19
初心者質問ですいませんが、 form上のTEXTBoxに文字列が入力されたら、Checkボタンが自動的にOnになる としたいのですが、どうしたら良いのでしょうか(VB6)
>>138 TextBoxのChangeイベントに書くよろし。
>>136 Picture2.Picture = Picture1.Image
でイケたけど、そういう問題じゃないのかな?
(両方AutoRedrowをTrueに)
>>137 画像として描画するしかない
142 :
デフォルトの名無しさん :04/11/12 20:35:55
全く、初めてVBを使い始めるんですが、インストールでいきなり困ってます。 back office っていうのをインストールするかきいてきたんですが、これは、インストールする必要はありますでしょうか? ちょっと、アホな質問かもしれませんが、さくっと教えて頂けるとありがたいです。
VB6について分からないので質問します。 typeで構造体を宣言した場合、 この構造体のメンバ変数を一度に初期化するのはどうすればいいでしょう? あと、上の質問に関連してですが、 グローバルな構造体の配列を宣言したいのですが、 これを実現する方法を教えて頂けないでしょうか? C言語で関数外に typedef struct{ int i; char *str }S_var; S_var[]={ 1,"しょぼーん", 2,"しゃきーん" } といった内容をVBで実現する方法です。 よろしくお願いします。
>>143 >この構造体のメンバ変数を一度に初期化するのはどうすればいいでしょう?
初期化するコードを書く。
煽りじゃないよ。これ以外に言いようがない。
構造体じゃなくクラスを使うなら、Initializeに初期化処理を書くという手がある。
>グローバルな構造体の配列を宣言したいのですが、
そのすぐ下に書いていることと全然噛み合ってないけど、答えは出来ない。
>144 お返事ありがとうございます。 言語仕様との事なので、仕方ないですね。 ヒントとして教えていただいた、クラスのInitializeも調べましたが C++でいう(引数無しの)コンストラクタの様なので 私が探しているのとは、違うようです。 構造体配列初期化関数を作る事で対応したいと思います。
Win32APIの引数にするのでもなければ、 あえてクラスを否定して構造体に固執する理由は何もないと思うけど。。 頻繁にコピーでもするのかな?それでも自分のクローン作るメソッド書くだけで、 それがそんなに面倒とも思えない。
VC++で作ったDLLをVBから呼ぶのに、VBでexeを作った後だと exeとdllを同じ場所に置いておけば読んでくれるのですが、 VBからDebugしているときは読み込んでくれません。 dllをどこに置くのが正しいのでしょうか。
>146 質問の構造体を使う目的が、 画面遷移の画面の情報を渡すという為で C言語のテクニック(グローバルな構造体配列を定義する) テーブルを使いたいという物です。 特別、外部プログラムとのやりとりや、コピーするという訳では無いです。 普通は、どの様にして、次画面の情報を画面に渡すのでしょうか? 例となるコード、HP等紹介して頂ければ、幸いです。
>>148 いや、グローバルな構造体配列を「作ること」は出来るよ。(標準モジュールで宣言するだけ。)
出来ないのは、Cみたいに宣言と同時に初期化すること。
>>143 の質問はそういう意図じゃなかったの?だから
>>144 で
「すぐ下に書いていることと全然噛み合ってない」と書いたんですが。
次画面の情報云々は、それだけじゃ漠然としすぎていて誰も何も言いようが
ないと思いますが。
>149 嫌な日本語
>147に追加で質問なのですが、文字列の配列を引数として 渡したい場合、VC側、VB側、それぞれどんな感じで 記述すればよいのでしょうか。
>151 一応試してダメだったソースです。 [VC側] LPCTSTR _stdcall TestFunc(LPCTSTR names[], int n) { return names[2]; } [VB側] Private Declare Function TestFunc Lib "Hello" _ (ByRef names() As String, ByVal n As Long) As String Private Sub Command1_Click() Dim names(5) As String names(0) = "hello" names(1) = "world" names(2) = "aaaaa" names(3) = "bbbbb" names(4) = "ccccc" MsgBox TestFunc(names, 5) End Sub メッセージボックスで aaaaa が出るかなと思ったのですが、 メッセージは空っぽでした。
>152 今試す環境ないけどいけるんじゃない?
>>147 DLLのパス検索順はLoadLibrary()APIの
ヘルプに書いてあるのでいいんでないかな。
オイラはVC++のビルド後の処理でWindowsフォルダにコピーしちまう。
ただこの方法だと一度でもDLLを使用したVBが起動してると
コピーに失敗しちまうから、VBとVCを同時に起動せんように
DLLのデバッグセッションでVB.EXEを起動するようにしてデバッグしてるよ。
文字列配列の受け渡しなんて面倒でやりたくないな。
ちゃんとやるならSafeArray系のAPIを使うんじゃなかったかな。
提示したソースのやり方じゃVB側で困るだろうしね。
>153 VC側をブレークポイントはって覗いてみたのですが、 namesにゴミみたいな値が入っていました。
>154 >文字列配列の受け渡しなんて面倒でやりたくないな。 そうなんですか。数が決まっていない複数の文字列を 渡したいのですが、一般的な方法だとどうやるのでしょうか。
>>155 素人で分からんけど、
ヌル文字で終わらせて見たら?
Char(0)
わかんないけど、 names(0) = "hello" & char(0)
全然? names(0) = "hello" & Chr(0)
VC側で覗いても変化ないの? char(0)→chr(0)はいいよね。
>>152 想像だけど、たぶん、
(1)文字列の配列ではなく、バイト配列の配列を渡すようにする。ただし、
VBは確か配列の配列はできなかったと思うので、バイト配列をメンバにもつ
構造体の配列にする必要がある。
(2)構造体のメンバのバイト配列には、文字列をStrConvでANSIに変換したものを代入。
(3)TestFunc(names, 5)ではなく、TestFunc(names(0), 5)のように配列の最初の要素を
渡すようにする。
これでいけると思う。ひょっとすると(3)だけでもいけるかも。
165 :
デフォルトの名無しさん :04/11/13 02:56:20
どなたか、レジストリを操作できるActiveXをご存知無いですか?
[フォーム] Private Sub Command1_Click() Dim lpfn As Long lpfn = AddressOf EvtProcess End Sub [標準モジュール] Public Sub EvtProcess() MsgBox "hello" End Sub これでコンパイルエラーになってしまうのはなぜでしょうか。
>>167 >AddressOf 演算子は、API プロシージャの呼び出しの中にだけ記述できます。
とあるからでしょうね
蛇足だけど >Basic プロシージャの間でも AddressOf 演算子を使ってプロシージャのポインタを渡せますが、 なので Public Function GetPointer(lngAddressOf As Long) As Long GetPointer = lngAddressOf End Function をモジュールに作って lpfn = GetPointer(AddressOf EvtProcess) みたいに書けばエラーは出ない
>168-169 すいません。ちゃんとドキュメントを読んでませんでした。 ありがとうございました。
>169の続きで質問させてください。 [VC側] void _stdcall TestFunc(void (*func)(int n)) { (*func)(3); } [VB側・標準モジュール] Public Sub EvtProcess(ByVal lCode As Long) MsgBox lCode End Sub Public Function GetAddress(lAddressOf As Long) As Long GetAddress = lAddressOf End Function [VB側・フォーム] Private Declare Sub TestFunc Lib "Hello" (ByVal lpfn As Long) Private Sub Command1_Click() Dim lpfn As Long lpfn = GetAddress(AddressOf EvtProcess) TestFunc lpfn End Sub
>172 こんな感じでVBからDLLのTestFuncを起動し、DLLからVBのEvtProcess 関数を呼ぼうとしているのですが、一応EvtProcessが呼ばれてメッセージ ボックスが出るところまでは行ったのですが、OKをクリックした後 The Value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention. というエラーが出ます。見たところfuncの宣言とEvtProcessの宣言が 食い違っているというような内容だと思うのですが、どこが間違っているか 分かる方がおられましたらご教授ください。
>>173 ESPで怒られてるなら、VBのサブルーチンも__stdcallで呼び出さないとまずそうな。
>174 手探りでやっているので質問しまくってすいません。 VC側を void _stdcall TestFunc(void (* __stdcall func)(int n)) { (*func)(3); } こんな風に変えるということでしょうか。やってはみたのですが、 warning C4229: 旧形式が使用されています : データの修飾子は無視されます。 という警告が出て、状況は変わりませんでした。
void _stdcall TestFunc(void (__stdcall * func)(int n)) こうじゃないか?
OS win2k Ver vb6 サービスパック Pro フォームのWidthを一定値以下にさせないために Private Sub Form_Resize() 'Minサイズ指定 If Form1.Width < 1000 Then Form1.Width = 1000 End IF End Sub としてるのですが動作が挙動不審です もっとエレガントな方法があるなら御教授下さいませ
>>177 動作が挙動不審とは最小化した時の動作のことかな?
WindowStateを見るかOn Error Resume Nextをプロシージャの
先頭に書けばいいと思う。
VB6ですが、 フォーム内でのグローバルな静的変数を定義するには どうすればいいのでしょうか? formのgeneralの所で static i as integer と書いてもプロシージャの外では無効ですというエラーが返ってきます。
>>180 Static変数はプロシージャ内でしか使えません。
つまり、
>>180 のようなことはできません。
詳しくはMSDNの「Static ステートメント」を参照。
代わりにPrivate変数を使いましょう。
>>180 おいおい、グローバルな静的変数って。。
それは「死なない不死身の人」って言ってるのと同じだよ。
自動変数はスコープの外に出ると死ぬ。
スコープの外に出ても死なないのが静的変数。つまり死なない人。
スコープの外がないのがグローバル変数。つまり不死身の人。
>>180 やるとしたら
Private Function GetInstance() As Object
Static obj As Object
If obj Is Nothing Then
Set obj = New Collection
End If
Set GetInstance = obj
End If
みたいなことで代替は出来る。意味があるかはわからんが。
VBのStaticはC/C++のstaticとは機能が違うので、Singletonパターンやりたい場合は、
標準モジュールにグローバル変数定義するしかない。
>182 C++だと クラスのメンバ変数に対して、静的変数があるからね。 VBでもFormはクラスの1つだから 実現できるのではと思った訳です。
>>184 あなたが言っているのはインスタンス生成しなくても存在する変数のことだよね。
VBでは「静的変数」って言えばStaticで宣言される変数のこと。
>>180 の言ってるのはこっちの方だと思うけど。
>176 それもやってみました。コンパイル時の警告は出なく なったのですが、>173のエラーが出る状況は変わりませんでした。
>187 ホントですか?うーん、もう一度やってみます。
>187 ありがとうございます。一歩前進しました。 コールバック関数に整数を渡すことはできたのですが、文字列を 渡すことができません。今書いているコードは [VC側] void _stdcall TestFunc(void (__stdcall *func)(const char *szFileName)) { (*func)("tmp.txt"); } [VB側(フォーム)] Private Declare Sub TestFunc Lib "Hello" (ByVal lEvtProcess As Long) Private Sub Command1_Click() TestFunc (GetAddressOf(AddressOf EvtProcess)) MsgBox "hello" End Sub [VB側(標準モジュール)] Public Function GetAddressOf(lAddressOf As Long) As Long GetAddressOf = lAddressOf End Function Public Sub EvtProcess(ByVal szFileName As String) MsgBox szFileName End Sub これで実行すると、メモリを読めませんでした、という旨のエラーが 発生し、VB自体が終了してしまいました。一応ヘルプ等見ながら自分 なりに正しいと思われるコードになっていると思うのですが、どこか おかしいところがあればご教授ください。
EvtProcessの引数をLongにしてEvtProcess内でStringに変換したらいいと思う。
>190 Longで受け取ると文字列の先頭のアドレスが渡ってくると 思うのですが、「Stringに変換」というのは具体的には どういうコードを書けばよいのでしょうか。 何から何まで質問してしまって申し訳ないのですが、もう少し お願いします。
VB6.0の初心者の者です。VB6.0において、ボタンコントロールでボタンを作ります。作ったボタンをクリック することによって、別のフォームモジュールや別のexeファイルを非表示にしてから、別のフォームモジュール や 別のexeファイルを終了させることが出来るようにするためにはどうしたらよろしい でしょうか。ご教授を誰かお願いします。
>192 分かりにくいよ。AAA.exeとかBBB.exeとかで表現した方が 伝わると思う。
>>191 こうだとどう?
Public Sub EvtProcess(ByRef szFileName() As Byte)
Dim strFileName = StrConv(szFileName, vbUnicode)
MsgBox strFileName
End Sub
>>192 ほら、文章意味不明だから誰もレス不能じゃん。
196 :
デフォルトの名無しさん :04/11/14 22:54:40
SQL実行して得られたレコードセットって戻り値として返せないんですか? すごく不便なんだけど。。 SQLを実行して結果を返すだけの標準モジュールを作って SQL実行する関数を作って、戻り値としてレコードセットを返せれば、 と思ったんですが
普通にできるよ
199 :
196 :04/11/14 23:28:59
すんません。書き方悪かった public function a() as Recordset … a = DoCmd.RunSQL(SQL) end function こういうことです。
Set a = DoCmd.RunSQL(SQL) Set付け忘れて実行時エラー出てるとかそんなオチ?
>>199 Access VBAですね。
RunSQLメソッドは、Recordsetを返しません。
ADODB.Recordsetなら、
・CurrentProject.Connection.Execute
・Recordset.Open
・Command.Execute
あたりで。
DAO.Reocrdsetなら、
・CodeDB.OpenRecordset
・CurrentDB.OpenRecordset
・(DAO.QueryDef).OpenRecordset
などで取得できるので、そっちを使いましょう。
DoCmd って Recordset 返さないだろ。 DAO なら OpenRecordset とか使わんと。
VC++で作ったDLLからクラスをエクスポートしてVBから 利用するってできますか? できるとしたら、どんなコードを書けばよいのでしょうか。
>>203 クラス自体をそのままVBでVCと同じように利用することは不可能です。
(継承とかないから)
VCで作成して機能的に完成しているものであって、それを使用するだけであれば、
COMとかActiveXコントロール化することで可能ではあると思います。
ただ、上記の実装があなたが多分求めてるちょこっと利用するには複雑すぎると思います。
(ちょっと気合入れた学習をしないと、きちんとしたものがつくれないです。)
205 :
デフォルトの名無しさん :04/11/15 10:14:30
>>203 関数を使いたいって話ではないよね。
オブジェクトつくりたいって話だよね。
>>204 ActiveXで普通にいいんじゃない?そんな複雑ではないでしょう。
206 :
デフォルトの名無しさん :04/11/15 10:40:22
VB6.0の質問です。 CommonDialog Controlを使って入力情報をエクセルに保存した後、 自動的にそのエクセルファイルを開いて入力情報を表示させるには どうしたら良いですか?
207 :
デフォルトの名無しさん :04/11/15 10:45:28
>>206 エクセル立ち上がっちゃっていいの?
それとも、エクセルたちあげずに、フォームかなにかで、内容だけ確認できればいいの?
皆さんがメインで使ってるバージョンっていくつですか? 今から6.0で勉強し始めようと思うんですが。
209 :
デフォルトの名無しさん :04/11/15 10:59:48
自分は6.0 Netはごちゃごちゃ感がすきになれないと…食わず嫌いをいいつづけて、触ってない。
>>206 つうか、仕様が判りにくい。
VBの画面入力をExcelファイルに保存して、それをExcelで表示(帳票?)でいいのかな?
普通にExcelオブジェクトを起こして操作すればOK。
起こし方はネットに幾らでも転がってる。
Excelでのセルの操作は、やりたいことをマクロ記録させて、そのソースを自分で解析して書けばいける。
Excelを使用せずにExcelファイルの作成は、市販コンポーネントを使えば可能。
あとSYLK形式とかXMLっていう手もある。
ただ、一般的に表示するにはExcelは必要。(細かくはオープンオフィスとかあるけど・・・)
>>208 勉強なら.netにしとけば。
わざわざVB6を覚える必要はなし、使う必要が出たらやればいいだけ。
言語勉強ならば、あたらしめのもの、普遍的なものがいい。
212 :
デフォルトの名無しさん :04/11/15 11:08:03
>>210 本人いないのに話てもいみないっちゃ意味ないんだが。
データの種類によっちゃ
リストボックスにもっかいもどして確認なんて用途でもいいかもしれんないから、
一般的に表示する…が、質問した本人のやりたいことによってちゃうかもしんない。
つか、もちっとわかりやすく質問してほしいものだ。
213 :
206 :04/11/15 14:25:59
返事遅れてすいません。 VBの画面入力をExcelファイルに保存して、それをExcelで表示したいです。
214 :
206 :04/11/15 14:30:47
CommonDialog ControlでDialogを出してエクセルファイルを収める場所とエクセルファイルの名前を 設定してDialogを閉じた後にそのセーブしたエクセルファイルを自動的に表示したのです。 よろしくお願いします。
215 :
206 :04/11/15 14:33:15
分からないのはDialogを閉じた後の処理です。 よろしくお願いします。
>>214 だから、210に書いたことはスルーですか?
何かそれに関して試したなら話のしようがあるけれど。
それともソースそのものが欲しいっていう類なら、質問じゃなく、ソースくれって書けば?
217 :
デフォルトの名無しさん :04/11/15 14:34:22
>>215 Excelオブジェクトってのは理解してる?それを使えばっていうのが理解できないレベルですか?
それによって回答が全然違うんだけど。
206さん、まずMSDNのCreateObject関数の解説と例を見て、それで判らなければ再度にしてほしい。 そこにもろExcelの起こし方が書いてあるから。
220 :
206 :04/11/15 14:55:41
調べ方も分からないレベルなんで申し訳ありません。 MSDNでCreateObjectを検索ですね。了解しました。
221 :
デフォルトの名無しさん :04/11/15 15:22:06
>>220 うおぉぉぉぉぉぃ。
調べ方もわからないやつは、
>>214 みたいなことやろうとしないでくれ、マジで。
というか
>>214 の前にいくらでも調べなきゃいけないことあったと思うが、
その時々ずーーーーーーと、人に聞いてきたわけだね。
だめだこりゃ。
一応注意書きを。 アプリ−ブック−シート−セル、と階層的になるんだけど、親が死んでも子は死なないから注意を。 Set oBook = oApp.WorkBooks(0) ・・・適当だけど したとき、oAppをNothingしてもoBookは心中せずに残り、多分お約束のミスとしてExcelプロセスが残るということをやるから。 生成・破棄が対にできるように、関数化などきちんとしていけばOKですけど。 まあ、調べ方も判らないというレベルじゃ、多分失敗しますよ。
223 :
デフォルトの名無しさん :04/11/15 15:46:15
206みたいなのが知り合いにいる。。。orz
224 :
盗る猫 ◆SCRKIYBNrs :04/11/15 15:50:48
225 :
デフォルトの名無しさん :04/11/16 00:29:20
フレームというとオプションボタンを入れるフレームしか思いつかないんですが 最近、そうではないプログラムのメインとなるような? フレームがあるそうですが どんなんですか? また、良いサイトがあったら教えてください。お願いします。
226 :
デフォルトの名無しさん :04/11/16 00:30:13
フレームワーク
227 :
デフォルトの名無しさん :04/11/16 00:36:06
便乗でもうしわけないが、 スケールモードをすべてピクセルでやりたいのだが、 コンテナになれるがスケールモードプロパティをもたないオブジェクト(つまりフレーム)の中では、 twipから変更ができません。 これは仕様でしょうがないことなんでしょうか?
そうだ
229 :
デフォルトの名無しさん :04/11/16 00:41:03
そうか。。残念だ。。 では、自前で座標変換functionかましていたのは正解なのか。 ありがとう。
ていうか、なんでそんな面倒なことわざわざするのかな。 システムのdpi変えても頑なにデザイン変えない意地の悪いプログラムが書きたいとか(w
>分からないのはDialogを閉じた後の処理です。 って書いてあるんだからファイルの書き出しじゃなくて Excel の実行の仕方が分からないんだろうと
232 :
デフォルトの名無しさん :04/11/16 09:28:01
>>230 それすごいなwでも無駄だなw
単純にマウス直下のコントロールを取得する関数書きたかっただけですよ。
イベントドリブンから逆行する操作だけどね。
>>231 だからCreateObjectの項を紹介したじゃん。
あそこにそのままが書いてあるんですよ。
MSDNの検索でExcelを検索すれば、VBリファレンス内では10個程度ひっかかる。
その中にあるんだから、最初の彼の調べ不足。
234 :
デフォルトの名無しさん :04/11/16 17:40:46
間違えてAPIスレに誤爆してしました。 質問させてください。 Susieのプラグインで HLOCAL *pHBm : ビットマップデータ本体のメモリハンドルが返される とあるんですが、メモリの内容を見るにはどうすればいいですか?
ちょっと待って
236 :
デフォルトの名無しさん :04/11/16 19:27:26
お疲れ様です お願いします チェックボックスにプログラムからチェックを入れるにはどうしたらいいでしょうか?
238 :
デフォルトの名無しさん :04/11/16 21:31:34
すいません、こういわれたんですけど、ポインタの中身を読むにはどうすればいいんですか?
685 デフォルトの名無しさん sage New! 04/11/16 21:02:05
>>678 戻り値がメモリへのポインタなんだから、それを取得して好きに読めばよい。
取得したポインタの中身を読む方法が分からないんだとしたら、スレ違い。
オレ様の第六感が、お前を相手にしてはいけないと警告している
>>238 CopyMemory APIでVBの変数へコピーする。
>>240 そう言われてわかる人なら最初から聞いてないと思う。
>>238 みたいな人はなんか勘違いしてると思うんだよな。
掲示板で人に聞けることなんて、所詮小手先のことだろう。
根本からわかってない奴に手取り足取り一から教えてくれるお人よしはいない。
あるいはプログラミングなめてるのか。
242 :
デフォルトの名無しさん :04/11/17 09:29:51
>>238 VBから入って、VBのみなら、ポインタってなんだかわからんのではないかい?
C言語の入門書(入門HP)見てきてごらん。たぶんわかるとおもうよ。
それで分からなかったらあきらめたほうがいい。
たぶん、おまいさんがやろうとしてることは、今のおまいさんの実力にみあってないんだよ。
243 :
デフォルトの名無しさん :04/11/17 09:39:23
お願いします VBでDBの中にテーブルがあるかを確認するにはどんな方法がありますか?
244 :
デフォルトの名無しさん :04/11/17 09:54:11
接続先のDBと、接続につかう方式は、何を予定してるのか教えれ。
245 :
デフォルトの名無しさん :04/11/17 10:07:05
>>244 さん
早速ありがとう、ございます
DBはAccessです 接続に使う方式?って感じの初心者ですみません。
246 :
デフォルトの名無しさん :04/11/17 10:12:02
普通に起動して、普通にでてくる、左のツールボックスから、 DATAコンポネートつかって、DataBaseNameプロパティ指定してつかってるのん?
247 :
デフォルトの名無しさん :04/11/17 10:35:41
>>246 さん
またまた、無知なモノにありがとうございます
テキストでフィールドの値をSQL文でとるように書いていますが?って
感じですが?
248 :
デフォルトの名無しさん :04/11/17 10:59:43
およ? SQL文渡して書いてるなら、SQL文で一覧の取得を書いたらいいのでは? SQLの書き方については、んー、範囲外誰かにパス。
249 :
247 :04/11/17 11:08:16
>>248 とりあえず、レスありがとうございました!
がんばってみます
VB6対応のMSDNライブラリの最新版って、いつのですか?
あれー?もしかして Common Control 5.0 のリストビューって チェックボックス付けられない?あとグリッド線とか1行選択 とかもできないのかな。
>251 プロパティでは変えられないみたいだけど、なんか 方法ないのかな。
>>251-252 LVS_EX_GRIDLINESとかLVS_EX_FULLROWSELECTとかを
SendMessageで投げたらできたよ。
>253 ありがとうございます。ちなみにチェックボックスもいけますか?
255 :
デフォルトの名無しさん :04/11/18 08:49:24
VBでコマンドボタンを押すと あらかじめ作ってあるエクセルのあるシートの 印刷プレビュー画面を出す事ができるそうなのですが 具体的にどうやるのでしょうか?
256 :
デフォルトの名無しさん :04/11/18 09:08:34
ググったほうがよっぽど速いと思うが
258 :
デフォルトの名無しさん :04/11/18 11:45:57
ググるにしても、キーワードがわからんでしょう。 …まあ、そのくらいわかれって気もするけど。
>>258 「vb excel プレビュー」
これだけあれば十分
>>258 まあそれも勉強だと思うけど。
言語的な知識は、特定言語に依存しない一般論を知っていれば十分だと思う。
(基本はCなりをやっぱり軽く覚えて、それプラス今風の言語)
個別技術に関しては、今の開発に必要なものなんて全部覚えられっこないよな。
だから、まずグーグル様の活用方法と、あてになるフォーラムなりリンク集を確保することが、技術者に求められる姿勢。
なもんで、質問する前にまず
>>1 は最低でも読むと。
グーグル様にお尋ねするキーワードは試行錯誤で覚えるしかないよな。
Excel VB なんて入れたら論外なのは馬鹿でもわかるだろうから、何を足すかは自分で試せと。
261 :
デフォルトの名無しさん :04/11/18 12:08:52
>>260 Excel VBは誰でも一回は通る道だな(笑
VBAまみれになりまする。
262 :
デフォルトの名無しさん :04/11/18 12:15:46
VB6.0(SP6)使ってます。MSCommを使って、ポート通信するプログラムを作っているのですが、 接続するハードが、送信のみしか対応しておらず、受信要求を受け取ってくれません。 そこで、データが送信されるまで、アイドリングしたいのですが、時間でWaitをしてると、あんまり上手く 動きません。なので、1.通信ポート開ける。2.通信データが送信されるまで待つ。3.ポート閉じる。 の2番をどうコーディングすれば良いのか、教えて下さい。MSCommのプロパティにも良さそうなのが、見当たらないので・・・
263 :
デフォルトの名無しさん :04/11/18 12:17:23
受け取るデータの、型とか、サイズとかいつも一定か、規則性があるんかい?
>>262 OnCommイベントでさばく。
1バイト受信して溜めていけばいい。
265 :
デフォルトの名無しさん :04/11/18 13:02:31
>>263 あります。毎回50バイト長のデータが送られてきます。
>>264 1バイトずつ受信して、それを50回繰り返すと言う事でつか?(毎回50バイト長なので)
>>265 それなら50バイトいっぺんによめばいいだけ。
データ受信したイベント内で、バッファに溜まっているバイト数を数えればいい。
ただ、通信異常などでのズレを考慮するなら、終端文字(があれば)まで1バイト読みのほうが安全だとは思うが。
(ずれたときに50バイト溜まらない可能性と、ずれっぱなしの可能性が出てくる。)
267 :
デフォルトの名無しさん :04/11/18 14:07:07
多角形を描画したいのですが、思った通りの座標に配置できなくて困っています。 Public Type POINTAPI X As Long Y As Long End Type Public Declare Function Polygon Lib "gdi32" (ByVal hDC As Long, lpPoints As POINTAPI, ByVal nCount As Long) As Long Public numPoints As Long Public XY(10) As POINTAPI 上記のようにして、座標を指定して、フォーム上に表示しようとしても異なった位置に 配置されてしまいます。 座標の単位?が違うと思うのですが、どうにもうまくいかず困っています。 アドバイスお願いします。
>>267 twipとかピクセルをMSDNなどで調べて学習。
VBのフォームのモードが何になってるかとか、APIが何を求めてるかとか、変換はきちんと知っておいたほうがいい。
270 :
デフォルトの名無しさん :04/11/18 14:19:45
271 :
デフォルトの名無しさん :04/11/18 14:23:32
>>265 まあ、単純に時間でくるくるまわして、毎回50バイトたまってるかどうか調べてもいいきがするけどねん。
たまってないなら、まだ受信完了してないってことだと思うし。
272 :
デフォルトの名無しさん :04/11/18 14:24:50
>>271 補足。
ただ、どっちにしろ「タイムアウト」の処理加えとかないと、
よきせぬトラブルがあって、50バイト以下のデータが送られたりした時、
あるいは、コネクションは持続したまま、データ転送のみとぎれた時に、フリーズしまっせ。
いつまでも待ち続けるプログラムちゃん。けなげです。
273 :
デフォルトの名無しさん :04/11/18 16:24:30
スレ違いかもしれんが教えください。
ttp://www.geocities.jp/activex_treeview/ ↑OS2000 Vbはインストールされていない端末で
ActiveXを使ったツリービューが見れないだよね。
xp や NTでは見ることが出来たんだが・・・?
どの端末もVbが入っていれば見れます。
Vbなしで見る方法ありますか?
Vbランタイムでは×
ASPスレにも書き込むけど、だれか教えて。何が必要なんだ〜??
凄まじく初心者な質問だと思いますが テキストボックスにある変数を常に最新に表示するということはできないのでしょうか? たとえばx1+x2+x3の結果をtextbox4に表示したいときは どうすればいいのでしょうか x1、x2、x3の値が変わるアクション全てにtextbox4=x1+x2+x3の一文を加えなければならないのでしょうか?
275 :
デフォルトの名無しさん :04/11/18 17:28:32
>>274 イベントドリブンなプログラムの作法にしたがうなら、そう。
全部に書くのが筋かと。
あるいは、Timerか、Do-Loopでまわすかなんかで、時々再計算してあげるって手法で、
見た目十分に常にという最新という状態にできるかと。
どっちをとるかは場合による。
私は、後記の方法が好き。あんまよくないとおもうけどねぇぃ。
計算自体をクラス化。 コンストラクタで表示先のTextBoxの参照を持っておく。 あとは計算とかあるたびにそれを表示するだけで、ある程度は汎用化できると思うが。 値をクラスのプロパティにしてしまえば、値の代入を捕らえられるから一発だと思うけど。 (クラスにしなくても、一連の関数とグローバル変数でもできるけど、おしゃれじゃない)
277 :
デフォルトの名無しさん :04/11/18 17:44:32
ああ、x1,x2,x3は、テキストボックスじゃなくてもいいのか。 なら、クラスでもいいかも。
278 :
de :04/11/18 17:44:53
電卓を作っているのですが、桁数を設定するにはどうしたらいいですか? 無限に入力できてしまい見えなくなってしまうのですが・・・。
279 :
デフォルトの名無しさん :04/11/18 17:45:54
onchangeかなんかで、入力監視してなんとかしる。
280 :
デフォルトの名無しさん :04/11/18 17:46:45
ごめん違うことばと混じった。 changeイベントでした、onchangeってなんだよ。
276だけど、VBのクラスってコンストラクタは引数とれなかったかも(Cいげた勉強中なもんで・・・)
だとしたら初期化専用メンバー関数つくって、そこでTextBoxの参照を渡す。
あとはプロパティーのセットで各変数格納時に計算関数(内部メンバー関数)を呼んで、そこで計算して、
結果をTextBox(の参照)に渡してあげれば。
>>278 単純には、TextBoxのMaxLengthプロパティあたり。
細かくやるなら、ChangeイベントでStaticなりグローバルで入力を確保してLenチェック。
アクセサリに入ってる電卓で二進数の計算をするとき 小数の計算が出来ないのですがどうしてでしょう?
283 :
デフォルトの名無しさん :04/11/18 18:12:06
>>282 その前に言ってることのおかしさに気づけ。
さておき、どうしてもそのようなことがしたいなら、桁キャストして整数(?)にしてから計算すればいいじゃんぬ。
284 :
de :04/11/18 18:21:41
281>> すみません、TextBoxが見つからないのですが・・・。
285 :
デフォルトの名無しさん :04/11/18 18:48:00
286 :
デフォルトの名無しさん :04/11/18 18:58:17
Toolbarコントロールについてお聞きします。 私のソフトではToolbarに登録できるようにしたい機能が最大70種類ほどありまして、 それぞれの機能に相当するアイコンをデザインする余裕がありません。 そこでアイコンなしでキャプション文字だけをToolbarに表示したいのですが、 アイコンのImageListの項目を<なし>に設定すると、 アイコンの部分(16x16?)が空白となって表示されてしまいます。 この空白を消すためにToolbar自体の高さを設定しても反映されません。 文字だけのToolbarというのはどうやったらできるのでしょうか? 最悪、テキストを画像化したアイコンを作成することも考えていますが、 いい方法があれば教えていただけないでしょうか?
287 :
デフォルトの名無しさん :04/11/18 19:02:19
>>286 そういうのは質問の前に手動かしたほうが早いよ。
ぶっちゃけ無理だと思うし。
どうしてもツールバーのボタンじゃなきゃだめってのでなければ、 ツールバーの中にコマンドボタンやオプションボタンを配置するって手もあると思うけどどうかな。
コメントありがとうございます。
>>287 無理なんですか。割と需要はあると思うんですけど。。
アイコン作るのはセンスと時間が要りますから。
>>288 コマンドボタンをツールバーに入れることができるんですか!
それができれば十分です。その方向でトライしてみます。
290 :
デフォルトの名無しさん :04/11/18 23:42:49
教えてください。現在、Win2000+VB6(SP6)で開発中ですが・・・、 VB6のコードで『ディレクトリ+ファイル』のパス名を設定する際、 完成したアプリが98,Meで使用される場合を考慮し 関数で得たディレクトリ名の最後尾に"\"が存在するかどうか、その都度チェックしながら 先頭に"\"の無いファイル名を設定しなければならないのですか? 最もスマートな手段を教えて頂きたいです。 よろしくお願いします。
291 :
290 :04/11/18 23:46:22
すいません追加です。 >関数で得たディレクトリ名の最後尾に"\"が存在するかどうか なければ最後尾に"\"をつけて >先頭に"\"の無いファイル名を設定しなければならないのですか?
>>290 9Xだと最後尾の\があるとなんか問題あるっけ?
それはともかくPathRemoveBackslash APIなんかどうだ。
293 :
290 :04/11/18 23:57:30
私は9xの環境下で開発したことがないので分かりませんが 9x系は"\"付き、NT系は"\"付かないらしいです。 なので最後尾の"\"がダブっても問題がないのか悩んでおりまして・・・。
>>290 それってApp.Pathなんかで取得したパスが、たまたまドライブのルートだと
C:\
みたいに最後に"\"が付くって話と混同してない?
OSの種類と関係ないと思うが。。
自然数同士の除算を減算の繰り返しで計算するプログラムのコードだれかわかりますか? 余りも考慮して。
>254 すいません。自分で試したらうまくいきました。 チェック状態を取得するにはまた別のメッセージを 投げないとダメなんですね。
298 :
デフォルトの名無しさん :04/11/19 08:01:44
>>255 これに似ているのですが
VBからEXCVELのプレビュー画面出そうとすると
「コンポーネントが使用できません」ってエラーがでます。
何がわるいのでしょうか?
WINDOWSXP-SP2
OFFICE2003pro
VB6.0SP6
EXCVEL
>>298 プレビューの前にエクセルのVisibleをTrueにすれ
>>298 おまえはサポセンに電話する素人か?
それとも細木数子に相談しに行く阿呆か?
それで何がわかるんだよ。
プログラマならば、せめてもう少し状況をきちんと説明しろ。
ExcelをCreateなりGetなりでObjectとして生成できているのか?
その上でPreviewを行うコマンドだけが駄目なのか?
ここがサポセンだと思ってる奴は結構いる
303 :
デフォルトの名無しさん :04/11/19 09:54:05
いっぱいいるな。
まあ、そういうやつは、
>>301 のような洗礼を受けるのが常なので、
ダメプログラマーにならないように、もっとイッテヤレ
>>301 誰しも一回は、けちょんけちょんにされて恐れおののいて学習していきますの。
現場を目撃してあういう風になっちゃいけないなとわかる人もいますが。
あたしゃは前者。ちょー初心者の時に
「初心者なんですが〜」から始まって「うごかないんです」「どうでしょう?」という
最悪な質問しましたよ、ええはい。
>>304 まあ、PC○Nに逝って鍛えてもらうのが一番かと。
そういう人に限って、タイトル入力有りの場合の掲示板で。
Title:助けてください。
VB初めて数日の初心者です。
・・・・
よろしくお願いします。
って書くんだよね。
でP○DNだと、皆様から教育的指導が飛ぶと。
>>305 あっこはマジで洗礼ですな。
手厚い教育がほどこされて、半年もすれば、教える側になれますな。
俺が始めた頃はネットといえば草の根BBSの時代だったけど、 こればっかりは昔から構図がかわらんよな。 言われた方は「さっさと答えだけ教えろ」って思うんだろうけど 言う側になると「ふざけてんのか?」って思うもん。 状況/問題点/要望を「他人に」わかるように説明するっていうことが どれだけ大事なのかってことに早く気が付いてほしいな。 なんかえらそうでスマソ。
>>307 えらそうかどうかはさておき…
でも、(※1)そこは質問する時だけじゃなくて、プログラマーとして最低限必要なことだよな。
一般的にも重要だとおもうけど。
一人でつくって、コメントをつけないですむプログラムならいざしらず、
チームでつくりはじめたら、そのあたり正確に人に伝えられない人はやってけないもんな。
---------------------------
状況/問題点/要望を「他人に」わかるように説明するっていうことが ←※1「ソコ」
以下余談
しかし、めぐまれてますな、今からプログラム始める人は。(よいことだと思います)
インターネットない時代は、コミュニティーに紹介で所属するか、
近くに詳しい人がいるか、あとは、本にのってる内容をスクラップしたりetcetc
今日ぶちあたった壁に今日質問できることはまれ、ましてや今日回答をいただけるなんて奇跡に近かったもんな。
>>308 そうなんだよな。
プログラミングだとかプログラマーって狭い範囲のことじゃなくて
「他人」というものを意識できるようになって
初めて自分の行動の幼稚さや浅はかさってものに気づいて恥ずかしくなったよ。
なんかホント今日は朝から飲み屋の終わりみたいな雰囲気になってるな・・
まあ2chの匿名性により、質問に対して敷居が低いことは良いことでもあり、悪いことでもあり。 普通に会社とかで質問するときに、前もってまとめるべきことはまとめて欲しいよね。 何を試行して、どのような結果が出ている。それは最低でも必要。 あと、何がわからないか、自分で判らない状態で書き込むのは如何なものかと。w それこそ細木先生に相談して改名なりしてもらってきたほうが。
VB6を使って,dallasのeepromにデータを送受信したいのですが、どうやればいいのでしょうか?
>>311 範囲でかすぎ。
とりあえず、googleで同じことやってる人がいないかどうか調べてこい。
これをやってるんですが、この部分でつまってます。
これが分かれば先にすすめるのですが、どなたか情報ないでしょうか?
この形でやりなおせ。
つか、よく、310までの流れの直後にそういう質問できるな・・。
314 :
デフォルトの名無しさん :04/11/19 12:35:53
メール欄にageなんて書いてネタであることをどこかにほのめかさずにはいられない
>>310 ってかわいい奴だなw
いやこれ肯定的に言ってるのよ。
こういうのをベタにやってなにか小さな勝利感みたいなのに浸る奴は
むしろ精神病んでると思う。
>>314 311だよな、310が精神的に病んでると言われてしまうと少し傷ついてしまう・・・鬱だ。
dallasのeepromの送受信の媒体はなんだろう。。。。
317 :
困ったくん :04/11/19 18:43:36
>>295 ひょっとして、あなたは北●大の学生?
もれもそうなんだけど・・・
318 :
デフォルトの名無しさん :04/11/19 18:47:11
教えてください VBに三項演算子 またはその代わりになるものってないでしょうか?
ワロタ
教えてください VBに細木数子 またはその代わりになるものってないでしょうか?
>>322 何だそれは
それが面白いつもりか?氏ねよ
325 :
デフォルトの名無しさん :04/11/19 21:14:33
細木数子キボンってんだから氏ねじゃなくて地獄に落とすって返さないと
>>325 HELL:
GoTo HELL
こうか?w
>301 答えられない質問に反応するお前がおかしい。
>302 いや、お前らのレベルじゃそんな使い方はできないから 安心しろ。
>312 このスレ一番のアホはこいつだな。存在不要人間。
330 :
デフォルトの名無しさん :04/11/19 23:06:39
最近VB.NETのスレでは
>>327 みたいな奴ばかりで苦笑する。
>330 でもお前も苦笑の意味を調べた方がいいぞ。
332 :
デフォルトの名無しさん :04/11/19 23:39:25
>332 どう見ても。それも訂正しようがないほど間違っている。 ただ、こんな書き込みをしてしまっているお前の立場からは 一生かかっても理解不能かもしれない。しばらく 国語辞典とにらめっこしてごらん。
334 :
デフォルトの名無しさん :04/11/20 00:52:42
>>333 言語感覚腐ってるのは君のほうだと思うがね。
ま、こういうのはわからない奴は何をいってもわからないだろうけど。
( ・∀・) ニヤニヤ
>335 な
答えだけくれ厨だろ。 多分デスマなんだが無能で出番がなくて、徹夜でいるだけの奴なんだよ。
339 :
デフォルトの名無しさん :04/11/20 10:52:15
textboxにフォーカスを移した時、カーソルが点滅しない(非表示)にすることは 可能でしょうか?textboxの上にLabelを重ねて、textboxのchangeプロシージャ で随時labelのcaptionに上書きしようと考えたのですが、別でもっとシンプル なやり方があるかと思い教えてください
>>339 それって、入力できないコントロールにしてると思うが、
フォーカスを移動する意味があるのか?
340 訂正 よく考えたら入力はできるんでしたね スマン
342 :
デフォルトの名無しさん :04/11/20 11:05:41
>>340 違います、やりたい事の説明ができていませんでした。
やりたい事はtextboxにフォーカスが来てる状態で点滅をなくしたいというこ
とです。点滅が無い状態のtextboxに文字を入力したいと思っています。
343 :
デフォルトの名無しさん :04/11/20 12:01:08
>>342 無理にテキストボックスのキャレットを消そうなんて考えるより(やってやれないことはないと思うが)
表示にはラベルを使ってフォームのKeyPressイベントあたりでCaptionプロパティいじるほうが
簡単じゃないだろうか。
ラベルってフォーカス取れないんじゃないの?
346 :
デフォルトの名無しさん :04/11/20 13:33:03
フォーカスが取れるかどうかなんてのは重要ではないでしょ。 (必要なら)例えば背景色を変えるとかして入力がアクティブになっているように ユーザーに見せかけることは可能なのだから、それで必要十分だと思うが。
そもそもなぜカーソルを非表示にしたいという話になったのだろう。 それが問題だ。
348 :
デフォルトの名無しさん :04/11/20 14:57:23
>>347 頭が固いなあ。
敢えてGUIというかOSのコントロールっぽい雰囲気を殺したい場合だって
想像に難くないと思うけど。
ビジュアルにこだわりたいアプリってのがわからないかな。
別にビジュアルに特段こだわりなくても、Win標準の電卓みたいなUIだって
考えられる。
>>348 そうかなぁ。
VBなんだから凝ったUIってのは二の次に考えてもいいんじゃない?
確かにVBでやるって所に意義を求めるもアリだと思うけど
それなら中途半端はクソUIになりがちだから
「用意されているコントロールの使用」ってのは捨てるべきじゃない?
そういう意味でカーソル非表示の目的を聞いてもいいような気がするけど、
おいらも頭固いのかなぁ。(ちなみに347じゃないよ)
だな
>350 おお、自分で頭の悪さに気付いてるのか。えらいぞ、お前。
>348 別にUIとしておかしいなんて一言も言ってないぞ。 その状況次第ではもっといい方法が出るかもしれないし、って事。 たとえばゲームを作りたいってシーンでそういうのが出たなら、ふつう TextBoxなんか使わず別の方法取るでそ。
ですね。 TextBoxは所詮TextBoxだから、そこから逸脱する仕様を実現するなら、 自分でもどきを作るしかない。 で、VBは正直そういうことには向かない、コントロールを派生できないから。 VCとか.netとか、デルファイとかなら今のTextBoxをベースに派生できる。 あと、確か点滅をなくすことはAPIで可能なはずです。 ただ、仕事場じゃないんで調べようがない。
ActiveXだったら派生できるんじゃないの? InputManみたいに。
356 :
デフォルトの名無しさん :04/11/21 14:11:50
windows2000 VB4.0 テキストボックスに例えば「5」と入力した後ボタンを押すと 入力した5個分テキストボックスを作るようにしたいのですが その場合初めから非表示で用意してあるのを非表示を解除して表示するしかないのでしょうか? 出来れば入力した個数分をその場で作りたいんです。 それが出来るのかどうかも分かりません。
>>356 1個をコントロール配列にしておいて、Load。
>>357 ありがとうございます
今からやってみます
キャレットを消すならHideCaretでそ?
>359 ん?これはどれへの回答?
入力した文字列と同じ名前のPublic変数の値を拾いたいのですが どう処理すれば良いのか分かりませぬ。助けて、ママン。 Public msg As String Private Sub Form_Load() msg = "やらないか?" End Sub Private Sub Command1_Click() MsgBox Text1.Text End Sub こんなんでは勿論ダメでした。力技で If Text1.Text = "msg" Then MsgBox msg elseif Text1.Te....(略) 延々とこんな処理書くのも何か変だと思うです。 何かしら素敵な解決策は無いでしょうか。
>362 ハッシュにすれば?
BitmapファイルをPictureBox等を使わずに、直接扱うにはどうしたら良いんですか?
例えば、Bitmapファイルを読み込んで、その画像の中から●の位置を検出したいとします。 ただ、この画像全体は大きいので、Formには入りきらないのです。 一方、縮小表示では、●が小さくなりすぎます。 こういった処理の場合、どのようにするものなのでしょうか?
>>366 BMPファイルのフォーマットはご存知か?
自力でOPENして画像情報を処理するもよし、非表示にしたPictureBoxを使うもよし、
方法は色々だが、Formに入らないという理由で検出ができないと言うのは理解できない
●とはどんな物で大きさや検出方法はどうやりたいのかyふじこlp
俺は寝るからあとは誰か頼む。
>367 逃げやがった
>369 え?
>362 名前でアクセスする事の是非はともかくとして、お手軽にやりたいなら Collectionを使うのがよいかと。
372 :
デフォルトの名無しさん :04/11/22 09:46:59
373 :
デフォルトの名無しさん :04/11/22 14:09:21
VB6.0の質問です。 dlgSaveFile.ShowOpenで既存のエクセルファイルを開きたいのですが、 ダイアログでファイルを指定して開くボタンを押すとダイアログが閉じて その後何も起きません。何が原因でしょう?
>373 これはネタか?
>373 dlgSaveFileってのは何の変数かぐらい書けよ。
>373 そのダイアログは選択したファイルのファイル名を取得できるだけで 開く機能はないの。 仮に開く機能が付いちゃってたとしたら、開く以外に使えなく なっちゃうだろうが。ちょっとは頭動かせよ。
377 :
デフォルトの名無しさん :04/11/22 14:12:48
>>375 CommonDialogControlの変数です。
378 :
デフォルトの名無しさん :04/11/22 14:16:05
>>376 名を取得したファイルを開く方法を教えていただけたら幸いです。
>>378 Shell ShellExecute ShellExecuteEx
VB6を入手したいんだけどどうしたらいいのかな? 納品用なのでオクとか無しで…
>>380 普通にMSのサイトいけばいんじゃないかと。
それか、たとえば、自分の会社にコンピューター納品してる業者はいないのかい?
そっちに相談するのも手ですよ。
>380 納品用の物を2ちゃんで相談か。 お客さんもかわいそうになぁ
すげーな。ほんと、すげーな。
MSからライセンスだけ買うとかって聞いたことがあるけどな
メディアがあって、ライセンスの追加の場合は、上位を購入でOKなはず。 (現状では特にオフィス97とかでよくある) メディアの入手は正直難しいかもね。大手メーカーの営業とかに知り合いいればなんとかなりそうだけど。
出入りの営業に聞きゃ一発だな。 自分とこでも、ソフト買ってんだろ。客の立場で同じことやってもらってるだけだよ。
みなさんいろいろありがとー ちっちゃな会社なんでMSDN入ってないのよね まずは出入りの営業さんに聞いてみます
>388 なんて会社?
MSDN入ってないってなんだろ。。
>390 それは分かってやれよ。てか、お前は勝手にコピーして インストールしてる口か?
>>391 はヘルプのMSDNと、開発サポート契約としてのMSDNを混同していないか?
>392 そういうわけじゃないんだけど、普段からソフトを手軽に コピーしちゃってるから、そういうの疎くなっちゃってんじゃないの? って感じで。
>>393 意味がわからない。説明してくれないか?
別にMSDN未加入=違法コピーじゃないだろうが。 MS系の開発が主体なら必須に近いしコストパフォーマンスいいけど、 それ以外の業務とかと半々なら、別に入らないでも個別にコンパイラ買えばいいし。 そもそも入って得られる情報っていっても・・・。
>394 ごめん。俺の書き込みに関しては俺も意味が分からなくなってきた。 言いたいことはあったのだが、書いていることは言いたいこととは 全然違ってしまった。
ああ、そういうことか。なっとく、失礼した。(MSDN)
>396 うけるなw まーそういうこともあるか。
なんだったんだ
(ryって何?
real yard
>402 ウソついてんじゃねーよ、このタゴ作が!
なんで俺の名前を知ってるんだよ。おまえはスパーハカーか?
>404 not found
406 :
デフォルトの名無しさん :04/11/24 13:41:00
VB6 Win XP で開発しています コモンダイアログでEXCELファイルを選択させるのですが このEXCELファイルにあるすべてのシート名を取得したいと考えています どのようにすればよいでしょうか?
>>406 えーと、このスレ内で何度も同じようなネタが上がってるので釣りでしょうか?
まず、ファイル名の取得とか、それを元にExcelでファイルを開けていることを前提とします。
その状態でWorkBookオブジェクトからWorkSheetsコレクションを舐めて、それぞれのWorkSheetのNameをみればいいだけ。
前提部分の技術はこのスレにあるからそれを参照。
408 :
デフォルトの名無しさん :04/11/24 14:11:44
オプションボタン・チェックボックスをプログラムの中から追加したいのですが どのようにすればよいでしょうか?
>>408 最近同じ質問があったはず、400程度のスレは読んでみてくれ。
>409 うそつけ。ねーよ。
配列で検索。 それで理解できないんじゃ、作れないよ。
412 :
デフォルトの名無しさん :04/11/24 15:24:14
VB6(SP6) でプログレスバーの出し方がわかりません。過去ログより >ツールバーのコントロールの選択→MicroSoft Progress Bar にて、出すことができると書かれていたのですが、 コントロールの中にMicroSoft Progress Barがありませんでした。 どうすれば良いでしょうか? マイク音量をプログレスバーに出したいと思っています。
>411 根拠は?
>>413 400程度のスレで、>>409-
>>410 間の5分程度しか見ないで無いよといっている人です。
配列で検索すればこのスレに答え書いてありますから、それ見て判らなければプログラマとして論外でしょ。
>414-415 それはオプションボタン・チェックボックスを動的に作る話ではない。 >357を見ても同種の話題だと気付かずに質問しているのだから お前らはレベルを合わせて回答する必要がある。 それができないのであれば回答すべきでない。 プログラマとして論外かどうかはお前らには関係ない。
結論:>414はアホ。
>417 それは違うな。 結論:>414はとてつもなくアホ。救いようがない。
dare ka
>>412 ni kotaete yareyo.
>>416 からまた同一人物の連書き野郎の荒しですか。
で?
>>357 みて判らなければ再度質問すればいいだけ。
いつものように、回答だけ書けってまた暴れるんですか?w
>>412 >>419 |-`).。oO(Microsoft Windows Common Controls 5.0…)
422 :
412 :04/11/24 17:16:26
なんとか自力でプログレスバーを出すことができました。 ただいまマイク入力音量を取得するのに苦戦してます。 >419さん ありがとうございます。
>420 質問スレだからな。お前らは回答だけ書けばいいの。
424 :
412 :04/11/24 17:27:49
>>421 さん
カキコ気づきませんでした。ご返答ありがとうございます。
425 :
412 :04/11/24 18:13:43
ライン入力された音(マイク)の大きさを数値として取り込みたいのですが、 音量の取り込み方がさっぱりわかりません。 詳しい方がいましたらご教授願います。
426 :
デフォルトの名無しさん :04/11/24 19:17:11
VBは長島茂雄であるといえよう。
>426 字が違います。
>>425 適度な短い録音して、最大の値をとればいい
>>428 いや、そもそも音量の数値化の仕方がわからないんじゃまいかと。
俺もわからんが。つか、やったことない。
431 :
412 :04/11/24 20:22:23
>>428 わかりづらくてすみません。
最大音量の値というよりも、音量値の取得の方法がわからず困っています
>>430 コンポーネント等を用いて簡単にできるようなことではなさそうな感じが
してきました。
>>431 逆にコンポネートになってないと、めんどくさそうだけどね。
あとは、MMCとか、APIであっさり該当なものがありそうな気がす。
てゆうか、そうなってないとVBからでは難しいではないかと。(=なんらかのインターフェイスが用意されてると思う)
まあ、せっかくなので調べ見よう。見つけたら書き込みますわ。
回答じゃなくてごめんね。
433 :
412 :04/11/24 20:29:21
>>432 さん
どうもお手数かけましてすみません。
私もわかり次第、書き込みします。
MMCじゃなぃ、MCIだ失礼しましすた。
すいません。訂正します。 へぼい自演なんかしてしまって恥ずかしいです。 精神科に通院中なので許してください。
>434 MMR?
ちょうどよいのがありました。
MCIではなくて、API使うみたいですね。
ttp://tk.no-ip.info/ このサイトの方が、VBでレベルメータ作ってます。
ばっちりVBのソースがついてるので、参考にしてみては?
私はまだ詳しく読んでませんが、winmmのAPI宣言して、そちらをのみを利用して作ってますね。
DirectXとか、MCIとかはなくてもできそうですよ。
>>435 平然と嘘ついてりゃ社会から弾かれるよな
かわいそうに
>438 自覚があるからまだましじゃん?
>>439 自分から病院かよってるから〜なんて言う奴は、
自覚ないよ。
自覚ないっいうか、病院勘違いしてるでしょ、確実に。
ほんとうは、「俺様特殊な病気にかかってることにしたい病」なんだけど、
鬱病ですとか言いたくなっちゃう人んですよ。たぶん。
>435 429になりすましたり自作自演したり、廃人ってほんとにいるんだね。
>441 なるほど
>435 廃人の自作自演って初めて見た どこまでやれるか見てやろう
ばれても自演を黙々と続けるのが廃人の特徴か 明らかに普通のひととは違う
>435 もう稚拙な自作自演はやめたのか
>>435 騙り屋のチキンっぷりをもっと発揮してみ
つうか、釣られすぎですよ。みなさん。
>435 どうせ人間終わってんだから多少インチキしたって構わねーだろ もっと下劣なことやってみな
450 :
412 :04/11/24 21:43:02
>>432 さん
どうもありがとうございます。
まだVBをはじめて3日(C/JAVAの経験はあります)なので、
解読に時間がかかってますが、ありがとうございます。
参考になります。
>449 今槍玉にあげられてるのお前だよ?
452 :
デフォルトの名無しさん :04/11/24 22:12:20
>452 なんで?
454 :
デフォルトの名無しさん :04/11/24 22:22:47
>>453 すぐにピンとこないところが廃人らしいな
>>451 なんかほんと廃人らしいね。
嘘ばれても槍玉とか抜かしてるし、最後疑問形だし。
おもしれーからもっとやれよ
>454-455 アホ。そりゃお前がIEで見てるからだろ。 ちなみに「>」と「>>」の違いは理解してる?
>456 最後が疑問形の理由も分からないんだ。
>457 え?違いあるんですか?
>458 すいません。今分かりました。
>460 どれとどれが自演なの?そしてその証拠は?
465 :
デフォルトの名無しさん :04/11/24 22:42:23
>463-464 もうネタ切れなのね。ご苦労さん。
>465の補足です。 質問に質問で返すのは回答できないからです。
>467 あーそう、誰も君の能力の限界以上のことを要求しないよ。 俺が悪かった。
今すげー勢いで書き込み→あと○○秒待ってを繰り返してるんだろうなぁ。
>>466 >釣り(反応したらバカ)
まだ終わんねーよ、もっと廃人らしい卑しいとこ見せつけてみな
>470 え?俺が相手してあげないとダメなの? 君一人じゃできないの? ん?ボクちゃんは病気だから一人じゃ何にもできないのかな?
472 :
デフォルトの名無しさん :04/11/24 22:47:27
>>466 >釣り(反応したらバカ)
自作自演と騙り屋のおまいをもっと晒してやるよ
>471 うっせーな。友だちいねんだよ。寂しいんだよ。 相手しろや。
>472 どれとどれが自作自演なのかな?俺は答えを知ってるけど。
475 :
デフォルトの名無しさん :04/11/24 22:48:58
>>466 おまいの生き恥もっと晒してやるよ、廃人さんよ
またレス番騙ったら?
>474 >420-474が俺の書き込みだ。文句あるか。
>475 どの辺が生き恥になるんだ?
478 :
デフォルトの名無しさん :04/11/24 22:50:35
>>466 自作自演してインチキもっとしろよ
生き恥晒せ
>477 あー、そうか。お前の相手してるってことが生き恥になるな。 うわー、こりゃ参ったわー。
480 :
デフォルトの名無しさん :04/11/24 22:52:14
>>466 >釣り(反応したらバカ)
廃人のおまいは散々粘着してそのザマか
インチキ野郎、もっとやれ
このスレももう終わりだな。次スレ必要な奴いる?
482 :
デフォルトの名無しさん :04/11/24 22:53:36
>>466 >釣り(反応したらバカ)
ぐずぐずしてねーでもっと卑しいことやれよ
483 :
デフォルトの名無しさん :04/11/24 22:55:08
>>466 >釣り(反応したらバカ)
もう終わりか、精神崩壊野郎が
>466 廃人独特の屁理屈と嫌味が足りねーよ
おい、どうした。もう終わりか。 相手してくれないと泣くぞ。泣くもん。
>485 ごめんな。オジサンもそんなに暇じゃないんだよ。 メンヘル板ってとこに行ってみたらどう?
>>466 自分に都合のいい自作自演もっとやれよ
この卑怯者が
492 :
デフォルトの名無しさん :04/11/24 23:13:40
RELOAD連打して待ってんだよ、さっさとやれ
>493 なんで自分の書き込みにずっとレスしてるの? 自分の中の小さい人と会話してるのかな?
>493 とりあえず気の済むまで一人で続けてて。 1時頃もう1回様子見に来てあげるから。
Dim a, b b = String(20, ChrW(12288)) a = ChrW(12288) & ChrW(9675) & ChrW(32) & ChrW(44) & b & ChrW(9675) & ChrW(62) & vbCrLf & ChrW(12288) & ChrW(47) & ChrW(-29) & ChrW(39) & ChrW(9734) & b & ChrW(-247) & vbCrLf & ChrW(-241) & ChrW(32) & ChrW(62) & b & ChrW(-241) msgbox a a = Replace(a, ChrW(9734) & b, String(15, ChrW(9632))) & vbCrLf & vbCrLf & ChrW(12363) & ChrW(12288) & ChrW(12417) & ChrW(12288) & ChrW(12399) & ChrW(12288) & ChrW(12417) & ChrW(12288) & ChrW(27874) msgbox a
スマソ誤爆
498 :
デフォルトの名無しさん :04/11/24 23:26:51
八行無能
>>494 ひとに擦りつけるのうまいな
自演ばれても平然と続けるあたりが廃人ぽくていい
もっとインチキやれよ
>>494 人間の体をなしてないおまいの廃人っぷりを発揮しろよ
501 :
デフォルトの名無しさん :04/11/25 09:21:52
日付も変わった事ですし、気を取り直して次の質問ドゾー
502 :
デフォルトの名無しさん :04/11/25 10:09:04
TextBoxに長文を表示するプログラムを作成しています。Timerを使って1文字ずつ 順番に表示する事まではできたのですが、文章が枠内に収まりきらない場合、画面 上で見えていない部分にどんどん文字が追加されていきます。文章が全て表示しきれ ばスクロールを使って全文読む事はできるのですが、これを表示の最中枠内に収ま りきらない場合はスクロールを自動的に1段ずらすという事は可能でしょうか? vb6.0を使用しています。
TextBoxならばマルチラインとかを調べる。 そもそもで、リッチテキストボックスにする。 またはPictureBoxに文字を描画するほうが自分で全て制御できそう。
504 :
デフォルトの名無しさん :04/11/25 11:13:27
>>503 マルチラインはTrueに設定しています。
TextBoxでは難しいでしょうか?
>>504 テキストボックスでも、たぶん制御できるけど(前やったことがあるので)
はっきり言うと計算式つくるのめんどいよ。
…というより、テキストボックスってそのあたりシステムにお任せできるのがいいところであって、
あえて、そこを、制御していくなら、
>>503 の言うように、PictureBoxのがよいと思う。
アドベンチャーゲームの台詞のところみたいなのつくりたいんだよね?
506 :
デフォルトの名無しさん :04/11/25 11:27:37
>>505 >アドベンチャーゲームの台詞のところみたいなのつくりたいんだよね
はい、その通りです。以前作成した時はどのような計算式をたてたのですか?
>>506 ピクチャーボックスでやったほうがいいよ。
スクロールはピクチャーボックスを親コンテナにして描画用ピクチャボックスを子にするイメージで。
(見せれば一発なんだが、文章で伝わるか・・・)
文字の縦横はMSDNとかでフォント周りを調べないと駄目。
文字幅とか文字間とかの説明があったはず。
>>502 Text1.SelStart = Len(Text1.Text)
のような処理じゃだめなん?
>>506 Text_LogWindow.SelLength = 0
Text_LogWindow.SelStart = なんちゃら
で、どの部分見せるかっていうのはコントロールできるんだけど、
アドベンチャー的なアレでそれを使おうとすると、まあ、色々あるです。
チャレンジするならやってみて。
>>508 あら、かぶったわ。
単純に最後をつねに、表示しつづけるなら、それでおけだね。
511 :
502 :04/11/25 12:05:53
みなさんレスありがとうございます。早速チャレンジしてみます。
512 :
初心者 :04/11/25 12:29:23
あるINTEGR型の変数の値が、1から100までの中に入っているかどうか知りたいです。 if i=1 or i=2 or 1=3 or 1=4 or・・・ と書く以外に、方法はないのでしょうか
>>512 if ( ( i>=1 ) and ( i<=100 ) ) then
MsgBox "範囲内です。", vbOkOnly, "サンプルプログラム"
end if
>>513 ありがとうございます。早速試してみます
515 :
502 :04/11/25 12:41:31
Timerを使って順に文字を表示していく手法をとっているせいで教えてもらった .SelStartを上手く使えませんでした。スクロールは上手く下にいってくれてい るのですが画面がずっと点滅してスクロールも上下に動き続けているいるような 状態です。恐らくTimerで1文字ずつ順番に表示してしまっているからだと思いま す。
>>515 もう、文字単体ではなく絵と割り切ってピクチャーボックスの実装に移ったほうがいいと思うよ。
TextBoxやLabelはあくまで単体の文字や文字列を入出力する為のコントロール。
見え方より入力しやすさを前提に構成されてるから。
517 :
502 :04/11/25 14:34:35
動作成功しました。 今まではTextBoxに[すでに表示してある文章]+[追加する1文字]を代入していた のですが、教えてもらった.SelStartと.SelTextを使用することで解決しました 。 1文字追加する前に.SelStartで最後の個所に移動し、そこで.SelTextに追加す る文字を代入すると点滅もせずスムーズに文章が表示する事ができました。 TextBoxはあきらめてPictureBoxの手法を探そうと考えていたのですが、なんと かTextBoxのままで済みました。アドバイスを下さったみなさんありがとうござ いました。
518 :
デフォルトの名無しさん :04/11/25 16:56:50
dim Rs as new adors.recordset do until Rs.eof 'リストボックスに代入 lstList.AddItem Rs.Fields("項目") loop リストボックスに値を代入する過程で、MoveNextを書き忘れました。 PauseやBreakが利きません。 タスクマネージャでは応答なしとなっていますが、 プログラム自体は実行されているようです。 大量にリストボックスに行が追加されていますが このリストボックスって制限行というものは持っているのでしょうか? OSはXPでVB6 SP5です。
気にする部分が違うような・・・。 EXE実行ならタスクマネージャから殺す。 デバッカなら、コントロール+ブレークで止まるはず。
>>517 色々あるでしょ?
それはさておき、.SelStartってのは微妙に今回のような使い方のためのプロパティではないので、
本来の意味も勉強しといたほうがいいよん。と添えてみる。
521 :
デフォルトの名無しさん :04/11/25 17:15:04
>>519 VBは使って5年目になる者ですが、
とめることができません・・。
コントロール+ブレークやファンクション+ポーズでも止まりません。
タスクからキックするとおそらくVBごと落ちてしまいます。
522 :
デフォルトの名無しさん :04/11/25 17:25:08
VB 6.0 sp6 Win XP Sp1 です CSVファイルをLine Inputで1行づつ読み込み、Split関数で配列に分割しようとしています 読込んだデータが AAA,BBB,CCC という場合は 配列(0):AAA 配列(1):BBB 配列(2):CCC とうまくいくのですが AAA,"BBB,bbb",CCC という場合次のようになってしまいます 配列(0):AAA 配列(1):BBB 配列(2):bbb 配列(3):CCC これを 配列(0):AAA 配列(1):BBB,bbb 配列(2):CCC というふうに、""で囲まれている場合は無視するようなはできるでしょうか? よろしくお願いします
523 :
デフォルトの名無しさん :04/11/25 17:26:27
VB 6.0 sp6 Win XP Sp1 です CSVファイルをLine Inputで1行づつ読み込み、Split関数で配列に分割しようとしています 読込んだデータが AAA,BBB,CCC という場合は 配列(0):AAA 配列(1):BBB 配列(2):CCC とうまくいくのですが AAA,"BBB,bbb",CCC という場合次のようになってしまいます 配列(0):AAA 配列(1):BBB 配列(2):bbb 配列(3):CCC これを 配列(0):AAA 配列(1):BBB,bbb 配列(2):CCC というふうに、""で囲まれている場合は無視するようなはできるでしょうか? よろしくお願いします
Split関数をつかわない。 まじめに、一文字ずつよみこんで手動で分割してみし。それで解決。 逆だとめんどくさかったんだけどね。
>>521 Alt+ブレークだったかな・・・。
まあ、デバック時に自動西武していないなら、自分の愚かさを呪うしかない。
ちなみに、Listの限界はヘルプみたいほうがいいとおもう。
多分IntegerかLongの限界値かなんかだと思うが、それ以前にリソース使い果たして落ちるとは思う。
どっちにしろ、その落ち方では、デバッカーにもどってくることはないな。
いや、デバッカ上なら無限ループしてもブレーク+なんかで止まったはず。 最近やらんからすっかり忘れてるけど。 なんで元の人、ブレークとなんかを叩きまくれ・・・もう死んでるかな?w
ちゃうちゃう。リソース 使い果たして落ちた場合ねん。 その落ち方じゃ、デバッカにはもどらんだろうな。
それはその通り。 だから、今頃はよっぽど運良く下手で時間の掛かる処理を書いていなければ、なんまんだ。
なむなむなむ、のんのなーもあみんなーも(うろ覚え)
>523 「"」を長さゼロの文字列にReplaceした後にSplitするとか。
VBってオブジェクト名に日本語使えるんだね。 使ってるソース見てちょっとびびったのでカキコ。
>>523 ADOとかSQLが使えるなら、CSVファイルをODBC接続で読み取ると
””を自動的に消してくれるよ。
いや、””を消したいのではなく、””間を1つの文字列として分割したくないんでしょ? 自分でロジック実装、前から順番に Interで ” と ,を両方調べて、 ,が先ならそこまで分割、”が先なら次の”までで分割でいいんじゃないの?
変数一個用意して、1を代入 "がでてきたら、その変数に-1をかける。 て処理を作る。 → "がでてくるたびに、1と-1を繰り返すことになる。 で、 それとは別に ,がでてきたら、その前とその後で分割するって仕組みを作る。 ただし、先に用意した変数が-1の時は、分割せず無視する。 そんな感じではいかが?
>>535 Boolean型使ってもよさそうだな。
InStrです、はい。すみません。
1文字づつ取るなら
>>535 さんのやり方でOKだと思います。
>>534 ADOでCSVに接続すると、""間にカンマや改行があっても分割せずに認識しますよ。
検証の為にサンプルを作ってみました。
ただし、手元にVBがないのでVBSで作りました。
set rs = CreateObject("ADODB.Recordset")
sql = "SELECT * FROM nullpo.csv"
con = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=C:\hoge"
rs.Open sql, con, 0
WScript.Echo ( "[" & rs.Fields(0).Value & "]")
rs.Close
このサンプルだとCSVの1行目を強制的に見出しとして認識するので、
1行目もデータとしてみるために接続文字列を下のように変えてもよいです。
con = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\hoge;" & _
"Extended Properties=""text;HDR=No;FMT=Delimited;"";"
リストビューのカラムヘッダを押せなくすることは可能でしょうか。 立体的なまま押せなくなるのでも、フラットになるのでもどちらでも 構いません。 Common Control のバージョンは5.0です。 リストビューコントロールへのメッセージの投げ方くらいは 分かるので、「このメッセージを調べろ」的な情報を頂ければ 後はなんとか調べてみます。 よろしくお願いします。
540 :
デフォルトの名無しさん :04/11/26 10:04:21
専用用紙で印刷できる範囲が予め決まっている場合のTextBox等の印刷方法につ いての質問です。今まではLen()を使って文字数を調べて一定の文字数以上だった らLeft()とMid()を使って文章を2つに区切って2段に分けて印刷するという方法 でした。しかしこの方法だと全角半角が混ざっていると何だかバランスの悪い状 態で印刷されてしまいます。バランス重視にして2段に分ける場合は文章を半分ず つにしてみたのですが、今度は端に空白ができてしまい文字数をもっと増やして も良いのではという話になってしまいました。 2段に分けて印刷する時はどういうやり方でやっていますか?Left()Mid()を使う 以外でもっと効率の良い方法もあるのでしょうか?
昨日は連続カキコミすみませんでした 皆様 いろいろなアイデアをありがとうございます ADOで接続し参照すると望んでたとおりの結果がでました ありがとうございました
542 :
540 :04/11/26 14:05:21
お願いします。
543 :
デフォルトの名無しさん :04/11/26 14:17:14
教えてください〜〜 HTML HELPをつくってまして VB6から状況にあったHELPページを開こうとしてるのですが コンテキストIDの設定方法がわかりません どこでIDを設定するのでしょう? HELP側でAliasは設定しました。 これとIDとの定義付けがどこかで必要なんですよね。 ご存知の方よろしくお願いします。
544 :
デフォルトの名無しさん :04/11/26 16:11:08
string型の配列内にデータが存在するかを判定したいのですが やはり配列の先頭から検索するしかないのですか? 環境は VB 6.0 SP6 Windows XP Home Edition SP1 です
545 :
浴寳 :04/11/26 16:18:19
浴恊
546 :
欲恊 :04/11/26 16:18:56
欲恊
547 :
デフォルトの名無しさん :04/11/26 17:42:13
VBAから VBを呼び出すには?
Shell "C:\Program Files\Microsoft Visual Studio\VB98\VB6.EXE"
>>547 Shell("VB6.exe")
まあ、VBの何を呼びたいの?モジュール内の関数?フォーム?EXE?
>548-549 ちょっとワラタ
>>540 全角半角を考慮して、1段目をMaxで印刷するやり方が知りたいの?
どなたか>539をお願いします。
興味半分でvbいじりはじめたんだけどvb6コモンダイアログで ファイルセーブのデフォルトのファイルネームって CommonDialog1.FileName = "hogehoge"みたく直接格納していいの? コード内でファイルネームをつけるとダイアログ側でファイルネームを 変更した時に反映されずにそのままデフォルト名が渡されて保存されてしまうんだが・・・ File_Saveに渡した時にファイル名を改めて取り直すとばっかり思ってたんだけど そうじゃないのね?
>>554 >ダイアログ側でファイルネームを変更した時に反映されず
んなこたぁない。ちゃんと反映されるよ。
556 :
デフォルトの名無しさん :04/11/27 05:43:24
もの凄く初心者な質問なのですが宜しいでしょうか? 次のようなテキストファイルがあると仮定します。 左の数字は行番号です。 1| 2ch 2| 3ch 3| 8ch このファイルを1行ずつ 「X」 「Y」 「Z」 に代入したい場合には、 下のようなソースを書けば良いですよね。 | Open "data.ini" For Input As #1 | Line Input #1, X, Y, Z | Close #1 ところが、逆に書き込む場合にはどうすれば良いのでしょうか? 「Print」 を使うと、スペースで区切られてしまいますし、 「Weite」 を使うと、カンマで区切られてしまいます。 改行で区切って書き込むコマンドがあれば教えて下さい。 お願い致します。
配列を返す関数って作れるの? 配列のサイズとかは関数内部で確保すれば いいのかな。
>>556 Print #1, X & vbNewLine & Y & vbNewLine & Z
または
Print #1, X
Print #1, Y
Print #1, Z
お好きな方ドゾー
vbnewlineとvbcrlf、どっち使えばいいの?
561 :
デフォルトの名無しさん :04/11/27 12:47:25
ListVIeewの背景画像を指定すると右上に来ますよね? あれを右下に表示したいんですが、どうすればいいんですか?
×右上 ○左上
>>559 vbCrLfは文字コードCRとLFの組み合わせ、vbNewLineはOSに依存した改行コード。
Office for MacのVBAではvbNewLineとvbCrLfではコードが違うはず。
改行という意味ならvbNewLineの方がふさわしい気がするが
多くの場合vbCrLfが改行として使われている。
>>561 ListViewにピクチャーなんとかっていうそれっぽいプロパティがあるから適当にいじる。
詳しくはヘルプを。
間違えて.NETの方に投稿してしまいました・・・ リストビューのレポートスタイルで、カラムをクリックしてソート したときに▼とか▲をヘッダに出したいのですが、あれはやっぱり オーナードローとかいうものをしないとダメなのでしょうか。 VBでも可能なんでしょうか。
567 :
デフォルトの名無しさん :04/11/28 07:38:26
「Command1」 は、「終了」 というボタンです。 「Command1」 をクリックした時に、「Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)」 と 全く同じ処理をしたいのですが、どうすれば良いでしょうか? 同じ内容をコピペして合計2回書くことも出来るんですが、 複雑化した際に同じものを2つ書くことが非効率な気がして・・・。 お願いします。 -------------------------------------------------------------------------- Private Sub Command1_Click() 〜ここから、下の Sub Form_QueryUnload を呼び出したい。 End Sub -------------------------------------------------------------------------- Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 〜 ここに終了時の処理が書かれている 〜 End Sub
>>558 丁寧な回答ありがとうございます。
Print #1, X
Print #1, Y
Print #1, Z
を使わせて頂きました。
これは便利ですね・・・。
>>567 call Form_QueryUnload
普通に「Unload Me」すれば、QueryUnloadも呼ばれないか?
>>569 本当にありがとうございます。
そのコマンドを知るためにどれだけ苦労したかと思うと 。・゚・(*ノД`*)・゚・
友人が.NETに移行するとかで貰ったVB6なんですけど、インストール時にMSDNのCD要求されて
そんなCD貰ってないから無視したら、ヘルプも見れないんですよね
やっぱり、VB6を購入すると、MSDNのCDが付いているんでしょうか・・・
本当にありがとうございました。
>>570-571 試してみたら、Unload Me でも QueryUnload が呼ばれていました。
今まで下のように書いていたのですが、
そう考えると無限ループになりそうですね。
QueryUnload で Unload Me → QueryUnload を呼び出し → また、Unload Me があって
→QueryUnload を呼び出して・・・・・。
--------------------------------------------------------------------
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
〜ここに終了時の処理〜
Unload Me
End Sub
--------------------------------------------------------------------
でも、何故か無限ループにはなりませんでしたが・・・。
VB君って賢いのかな。
本当にありがとうございました。
573 :
デフォルトの名無しさん :04/11/28 19:47:25
既出だったらマジですいません。 分かれば教えてください。 VB4.0で、特定のフォルダに置かれているVBAが記述されているExcel2000を開きます。 このときマクロの「有効・無効」のポップアップが出てしまうのですが、これを出さないようにVBで制御できますか。 ちなみに、セキュリティーレベルは「中」以上の設定にしておくという条件あり。
>573 >既出だったらマジですいません。 そこまで謝るならなぜ事前に過去ログを調べないんだ?
どなたか>566をお願いしますorz
>>573 そんなことするのはウィルスっぽくてどうかと思うけど。
VBだけで可能か知らないけど、
新しいスレッドを作成してダイアログを定期的に監視させ、
ダイアログが開いたらすかさず閉じさせるっちゅうのはどう?
>>577 573ではないが、おもしろそうな資料をありがとう。
実は私もマクロにデジタル署名をつける実際をしりませんですた。
使わないしなぁ・・・個人でやってる分には。
579 :
デフォルトの名無しさん :04/11/28 22:45:59
色々とレスありがとうございます。 今までEXCEL95を呼び出していたんですけど、今度EXCEL2000を呼び出すことになり、 使用者に「ポップアップが出てそそままEnter押すとマクロ動かないよ!」と言われてしまったため、 先ほど記述の作業が必要になってしまった次第です。 現在、他のVBでの作業に追われて過去ログ調べずに書き込みしちゃいました。 落ち着いたら過去ログ調査します。 >576 >577 ありがとうございます。参考にして挑戦してみます。
書庫内のMP3ファイルのヘッダーを取得する方法を知っている人いない?
>>581 書庫ってなんやねん。ZIPやLHAで圧縮されているファイルのヘッダか?
ファイルを展開するのがいやなら自前で展開ルーチン書くしかなかんべ。
教えてください。 次のようなアプリケーションを作ろうとしています。 「スタートアップをsub mainにして、sub main内でformを明示的にインスタンス生成し、 formがuserによって閉じられたらアプリケーションも終了させる。」 このときインスタンス破棄をどのタイミングでして良いのか分かりません。 生成は次のように行っています。 Sub Main() Set gForm = New frmMain gForm.Show End Sub WM_DESTROYを待って Set gForm = Nothing すべきなんでしょうか?
>583 ネタか?これは。 やれるもんならやってみな。
>>583 まったくわかってない。最初っからやり直し。
>585 このスレは何のスレだ? あほ
なんつーかすげーな。 何語使いなんだ君は。
WinAPIだけで画面作っていた、VC以前のC使いだろうか・・・。 Mainが無いと落ち着かない。メッセージループは理解してる。なのにVBを全く勉強していない。
それにしても、Main関数からスタートさせられるように、 プロジェクトのプロパティ変更できるなら、 …つーか、そもそも、フォーム作成の段階で気づきそうなもんだが。
ご指摘のとおりC&SDKでしか開発していない化石PGです。 form一つで良いならスタートアップをformにしとけば良いと思うのですが、 複数のformを開いて(つまりソース中のgFormをcollectionもしくは配列にして)、 全てのformが閉じられたらアプリケーションの終了としたいのです。
あなたの流儀・知識と、VBでの流儀・VBの振る舞いは違うのですから、 まず、VBのそれらをきちんと覚えることが先決だと思いますが。 付け焼刃で自分の流儀でVBの動作を捻じ曲げると、メンテする人が参ります。 Winアプリの基本線が判ってるんだから、それほど苦労せずにVBを理解できると思いますが。 基本的にVBはクローズされた箱庭ツールと認識してかからないと駄目。
>>590 暗黙のなんちゃらとか、暗黙のインスタンスとか、
そんなものが色々できまくるので、それらを、把握するところまででいいと思われますよ。
VBは、その暗黙のなんとか生成させないようにしようとすると泥沼にはまりますので。
Formで言うと、普通にFormから起動したりloadで呼ぶと、
Form名と同じ名前のインスタンスが暗黙に生成されますねん。
消滅するのは、参照してるものが全部なくなった時。
後は、参照を格納してる変数の寿命がどこで消滅するか把握しとけば、
set ○○=nothing発行必要有無、ENDの発行タイミングはわかると思いますが。
一応MSDNは目を通したんですが、
いまいち参照変数の寿命の部分がよくわからんかったのです。
VBでは「作動中の関数が無く、全てのformがunloadされた段階でアプリケーションのが終了する」
と捕らえているのですが、
>>592 さんの意見からの自分の解釈では
全formがUnloadされる → アプリ終了=変数寿命キター
→ formインスタンス消滅 = set ○○=nothing必要ない
というわけですね?
594 :
デフォルトの名無しさん :04/11/29 12:43:16
>>593 VBはいい加減なもんだから、
細かな事気にする必要は無い。
終了は、「end」 これだけ。
フォームも全部一気に閉じて最強。
ファイルをクローズする必要もフォームを閉じる必要もない訳だ。
なんか、 アプローチの仕方が根本的に違う気がするが・・。 作動中の関数が無くて、すべてのFormがUnloadされた状態で、 どうやってset **=nothingするんですかい? 自分で書いたレスよく読んでみると、なんか変なこといってるのが分かると思いますよ。 コードありきじゃないんですよVBは、オブジェクトありきなんですよ。
オブジェクトありきっつうか、暗黙で生成されるインスタントありき・・ですな。 でも、なんか自分で書いててひねくれた言い方だなって思う。
>>594 いやまあ、それだとたまにプロセスのこるプログラムになっちゃうけどねん。
>>594 元質問者の質問を汲んでないぞ。
複数の同格のフォームを全て表示して、それらが全て終了したらアプリ終了。
ってことをやりたいんだと思う。
私なら設計時点で仮でもいいから、メニューのみのフォームでも作って親をきめるけど。w
>>598 俺もそうするなw
いっそのこと、生成された瞬間にHideでもいいしなw
ぶっちゃけ、そんなもんよVBって。
元質問者の考えで、もし実現するなら以下の方法かな? 隠れた仮メインフォームを作成。 仮メインがロード時に他のフォームを起動、そのインスタンス管理は仮メイン。 各フォームはアンロードイベントで、仮フォームの自分のインスタンスフラグかなんかを落とす。 仮メインはタイマーで回っていて、全てのインスタンスが無くなったら終了。 タイマー云々と仮ー他フォーム連携部分はWindowsメッセージで置き換えも可能。 その場合はサブクラス化で検索。
さすが昼時は人が多いすね。感謝。
>>595 >作動中の関数が無くて、すべてのFormがUnloadされた状態で、
>どうやってset **=nothingするんですかい?
なもんでメッセージループ組んでWM_DESTROY待つんかなと最初は思ったわけです。
やりたいことは
>>598 さんのおっしゃるとおりのことです。
dummy親を作っとくわけですか。。。なんとも効率の(ry
タイマーやVBでのサブクラスがあまり好きでないので
form管理用にスレッドを一つ作って、セマフォとかで管理ってのもありですかね?
>>601 あのさ、VBのやり方って言ってる意味理解してる?
APIごりごり、スレッド使いたい云々だったら、それ用の言語でやればいいだけ。
DelだってVCだってBCCだって何でもあるよ。
VBでやりにくいことをワザワザVBでやるのは無意味。
>>601 いや、なんちゅーか、VBつかわないほうがいいよ。本気の話で。
向いてないと思う。やりたいことと、あなたの気質に。
別に、馬鹿にしてるわけでもなくて、素でいっとるのよ。
>>601 ちゃうちゃう。だから、その発想がそもそもの間違いなんだって。
JavaでもCでも、
メイン関数 → オブジェクトとしてのフォーム管理
↓
多種制御
で、メイン関数ありきでしょ。
VBは。
己の管理
↑
メインフォーム + 他フォーム + 他フォーム
↓ ↓
メインフォームの管理のみ 己の管理
という形か
(つづきます)
続き
>>598 や
>>599 で提案しているように。
メインフォーム → 他子フォーム
↓
各種制御
という形で、
コードはあくまでメインフォームに付属するものなんですよ。
(自動で生成される暗黙のインスタンスをもった)オブジェクトありきなんですな。
そのあたりを勘違いしてるのかと。
もし、マルチで動く監視コンソールみたいのを作りたいなら。 VBで作るなら1本のEXEでマルチスレッドは考えないほうがいい。 複数のEXEでそれそれ別プロレスにしてしまえ。
それかOCXにするかだな。つかいずらいと思うが。 EXE複数に一票。
そもそもVBっつーもんはランタイムの隠し制御は気にせず、 かつ、DLL等はあまり使わずに標準機能で楽しろと。 なるほど。勉強になりました。 &納得できました。有難うございました。
なんかまだ勘違いしてる気がするが、その解釈で問題あるかというと、ない。
教えてください。 TextBoxに入力することが出来ない文字があります。 IME標準では変換せず、IMEバッドの手書きで、 入力させるような文字です。 旧字体というやつだと思います。 入力させる方法はあるのでしょうか?
windows2000以上で、 VBにきっちりサービスパックをあてて、 かつ、テキストボックスのフォントを、該当フォントにしてみたらだめかね? とゆうか、その文字ってのが、何語の何なのかはっきりわかれば、 もうちょっと違うアドバイスができる気がす。
読みは「リュウ」という文字です。 この字「隆」に草冠をつけ、「生」の上に 横棒が追加している文字になります。 SPは3まで当ててあります。
IMEパッドではCJKお構いなしに表示されるからUnicodeに収録されているCK由来の漢字だろう。
蕯
>614 アホ
?
蕯
蕯蕯蕯蕯蕯
文字コードは興味なかった人はほんとわからんよ。 そういぢめてやるな。 まあとりあえず、SP6まで当てることと<実際は、5,6あてるだけ。4までは5に含まれるから。 テキストボックスの表示フォントをUNICODE対応のフォントにかえてみるとか。 それで出たら問題解決。
>>583-608 のあたり、レベル低いやり取りみたいな進行だが
本当はレベル高い話だな。これがVBか、、、
>>619 TextBox自体はUnicodeでの入出力ではなかったような・・・。
プログラム側から取れるのはUnicodeなんだけど、外(=人)とのやり取りはANSIだったような・・・。
>620 は?
外字登録することにしました。 色々とありがとうございました。
お前さんがそれでいいってんならそれでいいや。 人様のPCの外字をいじくるようなことをしなければ。
>624 人様のPCの外字をいじろうが、お前には関係ない。
>>626 Form1という変数で示される、実行と同時に暗黙的に作成されたForm1型のインスタンスを消滅させてるんでないかい?
FormX()っていう変数でForm1型のインスタンス(群)を管理するために。
別にそのままの残しておいてもかまわないっちゃかまわないような気もす。
無駄だけどね。
どうでもいいけど Main 内でモーダルで開くってのはなしなの?
Excelのなかに入っているVisual Basic EditorでVBの勉強を始めたのですが、 ここで作ったものを動かすには、やはりVBのソフトが必要でしょうか?
630 :
デフォルトの名無しさん :04/11/29 20:29:34
VBじゃなくて、Excelが必要。
>>583 つーかさ、何がしたいわけ?
変数ってのはグローバルな物以外は関数を抜けたとき寿命がくる。
VBってのはガベージコレクションを持っているのだから
アプリケーションが終了したらグローバルな物も勝手に消える。
通常ガベージコレクションをもっている言語ってのはC/C++でいう
deleteなんてインスタンスを削除する命令は無い。
あるのはインスタンスを参照している変数をクリアする命令(VBでいえばNothingの代入)
インスタンスはどこからも参照されなくなった時点で勝手に削除される。(というかこれがガベコレなんだが)
Mainから起動したとしても、何もせずともフォームが
すべてUnload(フォームを閉じても同じ)された時点でアプリが終了するようになっている。
(どこからも参照されなくなった時点ではない)
Main関数を抜けてもフォームがLoadされているのならアプリは終了しない。
暗黙に作成された変数がアプリ終了時点で(Unloadされた)フォームを参照していても
ガベコレの動作の設計どおりにアプリ終了時点でクリアされるから問題ない。
これはオブジェクト指向らしいきちんと設計された動き。
まあ要するにゴチャゴチャ言わず For Each frm In Forms Unload frm Next にしとけってこったw
VBよくわかってない奴が変なイメージを植え付けようと
変なことばっかり言っているね。
>>632 とか。
おれは確信犯だってば。 wから読み取ってくれよ。 確信犯という言葉は・・・って指摘は勘弁な。
まだやってるこの話題、、、なんか申し訳ない
>>631 氏
VBてガーベージコレクションがついているのですか。
結構高級言語なんですね。勉強になりました。
ついてません。
>>636 そりゃ、昔のBASICの時代からついてるじゃん。
要するにガベージコレクションがついていないと思って Nothingの代入がインスタンス削除命令(C/C++のdelete)だと勘違いして 自分で削除しなくてはならない。いつどうやってやるのかと悩んだってことでFA?
なんつーか、やっぱりすげぇな。
642 :
デフォルトの名無しさん :04/11/30 05:46:32
というより、今VB6手に入れるの難しいって知ってた? 販売とっくに中止していてプレミアが付いているからね。 でも、VB.NET は使い物にならないじゃん。 Microsoft .NET Framework がインスコされているパソコンじゃないと、 VB.NET で作ったアプリは動かないんだろ? だったら、Windows 2000 や XP のデフォルトの状態じゃあ使えないからね。 VB.NET で作ったソフトをフリーソフトとして配布したとしても、 .NET Framework 入れるのが面倒という理由で使ってもらえないんじゃね? ということで、VB6は必須だな
643 :
デフォルトの名無しさん :04/11/30 06:51:36
「VB6」 の 「Timer」 の 「Interval」 に、 65536ミリ秒以上の値を指定したのですが、 どうすれば良いでしょうか? 約1分ちょっとの時間しか指定できないのならば、 ラーメンタイマーすら作れませんよね。 原始的に、Timerを2つ設置して、 1個が限界になったら、もう1個が作動するみたいな 仕掛けを作るしかないんですか? 教えて下さい。
つり?
>>643 別にTimerを二つおかなくても1分を2回待てば2分。
1000回待てば1000分だろ。
>>645 ユーザーが入力した時間毎に作業をさせたいんですよ。
例えば、「5」分「31」秒と入力したら、その時間毎に・・・。
5分の時点で1分を5回待って、31秒を1回待つようにすれば良いんですよね。
教えていただきありがとうございました。
というか、タイマーに時間制限を設けるなんて不便でしょうがないですよね
65537ミリ秒ごときでオーバーフローなんて20年前のPCじゃないんですから!
そのアプリだけを起動しているのならともかく、 5分も待てば相当誤差が発生するだろうけどな。 俺なら数秒単位のIntervalにして 残り時間が少なくなったときに目標時間までの残り時間をセットする。 たとえば5分31秒なら、10秒ごとに残り時間をチェックして10秒以上 残り時間があれば10秒。10秒を切っていれば残りの秒数とか。
>>647 ありがとうございます。
参考にして一定期間ごとに分割する事にします。
グローバル変数に起動時間を記録。 1秒毎タイマーで起動時間と現在時刻の差を計算。 それだけじゃないの?
>649 解雇
>>647 の取り方にもよるけど、残り時間の管理をタイマーのインターバル値でやったら駄目だよ。
タイマーはあくまで指定時間”以上”の間隔の保証。
だから、25秒を10秒×2+5秒とした場合、その3回のイベント毎に誤差が生じる。
毎秒っていう負荷を気にするならば、残り10分あれば1分毎、それ以下1分まで10秒毎、1分切ったら毎秒(かそれ以下)
っていう間隔で、起動時間との差を取ればいいじゃないですか。
起動時間との差は絶対値だから誤差はほとんど生じない。
653 :
デフォルトの名無しさん :04/11/30 11:34:13
ID , Name 100,佐藤 200,田中 ABC , 木村 という形式のCSV(M_NAME.csv)をADOで読込もうと思ってます SQLに SELECT Name FROM M_NAME.csv WHERE ID = 100 とやると「佐藤」を取得できるのですが ABCのようなコードの場合エラーとなってしまいます 数値型と文字型が混在いているからでしょうか? どんな型でも読込めるような方法はあるでしょうか? よろしくお願いします VBは6.0 SP6 OSはXP HOME SP1です
クオートしたら解決とかそんなオチだったりしない? かなり骨髄レスしてるが。
WEHRE ID='100' じゃないの?
俺もそうだと思う。 それ、100の場合は「例外的に」なぜか「うまくいっちゃってるだけ」だよ。たぶん。
質問お願いします。 VBでうまく文字列のポインタ渡しをする方法はないでしょうか? 状況説明ですが、VBでテキストエディタ作ってます。そのときテキストを 一行ずつ文字列型変数にして、動的配列に持たせています。 ここで、例えば改行等をすると、文字列のコピーを下のループのようにさせています。 'モジュールレベル宣言 Dim m_Buf() as String Dim BufCnt as Long 'BufCntは行数で常にReDim m_Buf(BufCnt)してある '改行されたら ReDim m_Buf(BufCnt) For i = BufCnt to NowIdx + 1 Step - 1 m_Buf(i) = m_Buf(i - 1) '(A) Next i BufCnt = BufCnt + 1 としています。ただこれだと行数が6万行ほどからかなり時間がかかるようになります。 原因は(A)の部分で文字をメモリを再割り当てしているからであるようなので そこで「VBでのString型変数はStrPtr関数の戻り値と同じ値を格納している、 つまり文字列のポインタ」ということを利用して(A)を Call CopyMemory(ByVal VarPtr(m_Buf(i)), ByVal VarPtr(m_Buf(i-1)), 4) もしくわループ自体を Call CopyMemory(ByVal VarPtr(m_Buf(NowIdx + 1)), ByVal VarPtr(m_Buf(NowIdx)), 4 * (BufCnt - NowIdx)) としました。Cでいうポインタ渡しです。結果として文字はコピーされ、速度も高速なのですが、 しかしここで問題発生で、この後m_Buf()の要素にアクセスしようとすると何度目かでメモリエラーになります。 VBで文字のポインタ渡しをうまくできないでしょうか?よろしくおねがいします
>>657 後者の場合、コピーするメモリ領域が重なっているのでCopyMemoryがうまく動かない可能性がある。MoveMemoryにしろ。
但し、それだけで解決するとは思えないがな。
>>657 前の添え字
文字列
次の添え字
なんて構造体?にして
先頭から順に並べるなんてどうなんだろう。
#僕はプログラム書きではないから当てにならんけど。
双方向リストで管理でOKでしょうね。 VBでメモリー操作をやるという発想がまず間違いな訳で。 でも、そもそもリッチテキストボックスとかで、文字列をプログラムが管理して改行とかしてるのか? その辺りって適当にコントロール標準でやってくれるんじゃないの?
>>659 双方向リストやってみます。
>>661 いろいろ特殊機能付けたかったので標準コントロールは使わずに
TextOutで描画してます。
Visual Basic 6.0で開発して、そのプログラムをインストール用にEXE作りました で、そのEXE起動させてみてもインストール出来ません オリジナルのVBじゃないからインストール出来ないんでしょうか?
>>663 インスコ用のソースを見せてもらわんとなんともいえね
とゆうか、オリジナルのVBってなんじゃら? なんとなくわかるようなわからないような。
まさか割れ(ry
668 :
デフォルトの名無しさん :04/12/02 12:01:22
商品売上の明細部分を作成する場合VBでは何を使うとやりやすいでしょうか? Access出身でSubFormが使えない事が分かって、どういうやり方でやるか困っ ています。 参考になるサイト等もあるのでしょうか?
669 :
デフォルトの名無しさん :04/12/02 12:45:25
670 :
668 :04/12/02 13:01:48
>>669 レスありがとうございます。
無理矢理文章での説明になってしまうのですが、今回販売購買のソフトを作成する
ことになりました。私が担当になったのは売上プログラムです。
売上プログラムは顧客名を入力し、何の商品をいくつ購入したかを保存します。
Accessで作業をしていた時は顧客データを入力する所を親Formとし、明細部分には
[オートフォーム:単票形式]で作成したFormをSubFormとして親Formに組み込んで
いました。VBでも同じやり方ができればと考えていたのですが、SubFormは使用で
きないと知り、何とかこれに近い方法を探しています。
私の会社では今まで、FormにTextBoxを並べていました。明細の数が多くなる場合
にはScrolBarを使って、下にずれていっているように見せる方法をとっていました
。
ただもっとシンプルに作成できるのではないかと思い質問しました。
VB6.0使用者です。よろしくお願いします。
説明不十分のところがあれば教えてください。
>670 伝票入力系のOCXを使うがよろし。 うちはDenpyoMan使ってた。
672 :
デフォルトの名無しさん :04/12/02 13:26:29
VB6でCSVを読込んで処理をするプログラムを組んでいます ID,NAME,NO 1,佐藤,100 2,鈴木,A100 3,木村,"100,200" というCSVに対してADOで接続しているのですが 2レコード目以降の「NO」の項目がNULLになってしまいます いろいろ調べたのですが 1レコード目の「NO」の値が数値だからのようです 1レコード目の「NO」を"B111"に変更すると すべて読むことができます データの型に関係なく読み取るような処理はできますでしょうか?
ADOを使用せずに、普通にファイル読み込みを行う。 ADOはDBアクセスを前提にしてるんだから、データに型があることは前提です。
674 :
668 :04/12/02 13:49:46
>>671 情報ありがとうございました。早速上司と話してみたのですが、購入予定は無い
そうです。
VaSpredとMSFlexGridというコントロールはあるのですが、使い方が理解できて
いない状況です。このどちらかを使えば
>>670 のような方法も可能になるのでし
ょうか?
どちらを使用しても可能じゃない。 SpreadはExcelのスプレッドの粗悪品、FrexGridはDataControlとあわせればAccessの一覧表部分だけ再現可能。 AccessはあくまでAccessで、VBで標準のみでUI作るなら、その範囲内で要件を再検討するほうが良いと思うが。
676 :
669 :04/12/02 16:35:01
>>670 さて・・・サブフォームというと
いわゆる一枚の明細に沢山商品名が書いてあることを
メインとサブと考えていいのかな?一般的に
もしそうだとしたら・・・グリッドがどうとか言う前に滅茶苦茶簡単だと思うんだが・・・
なんか勘違いしてたらスマソ
677 :
669 :04/12/02 16:38:40
ゴバ━━━━(゚∀゚)━━━━ク!!!! 一般的なサブフォームの考えっぽ orz ____________________________ | | | 例えばこんな感じで左で顧客データ | | | 右に明細 とかって・・・アカン?(´・ω・`)ショボーン | | | | | | |_____|_____________________|
Denpyomanって6万くらいだべ?せいぜい2〜3人日。 作るアプリの規模がどれくらいかわかんないけど、普通に考えて元は取れるでそ。
>>678 横レスだが、値段の問題じゃなく、こういう市販を嫌う人って多いのよ。
なんでも自分でやるって考えみたいな。
680 :
デフォルトの名無しさん :04/12/02 18:41:12
>>679 俺が昔勤めてた会社も自社専用ライブラリとか作ってやってたよ。
小さな会社だったけど。
そんなもんか。 俺的には外部OCX使って楽してこそのVBだろって思うんだが・・・ データアクセス部分を自前で書いてライブラリにする、とかならともかく、 正直UIには手間掛けたくないなぁ。
まあ考え方は色々だからねえ 後々買ってきたライブラリでは処理できない事にぶつかったり OSのバージョンアップでそのライブラリが使えなくなったり そのライブラリ作った会社がつぶれたりサポートがetc. した場合を言い出したらきりがないが。 俺はあるのなら買ってくる派だが、自社ライブラリは悪いとは思わないな
>>672 set rs = CreateObject("ADODB.Recordset")
sql = "SELECT * FROM kuma.csv "
con = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=C:\hoge"
rs.Open sql, con, 0
rs.MoveFirst
Do Until rs.EOF
WScript.Echo ( "[" & rs.Fields("NO").Value & "]")
rs.MoveNext
loop
rs.Close
おかしいなー。VBSだけどこれで問題なく動くよ。
どんなコードを書いてるの?
あと環境は?
当方WinXPSP1、MDAC2.7。
con = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\hoge;" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited;"";"
もしかしたらこれで正しく動くかも。
685 :
668 :04/12/03 10:56:02
みなさんたくさんのレスありがとうございました。OCXは今までに何個か購入して
使っているのですが、新しく「Denpyoman」を買うつもりはないみたいです。
>>678 さんのいう通り、事務処理系のソフトを作っている自分の会社なら6万円で
も十分に元がとれると思ったのですが、値段が高いそうです。
>>683 さんの教えてくれた「DataRepeater」は興味があるのですが、誰も使った
ことがないので、時間をゆっくりかけて調べて行きたいと思います。
今回の作業に関してはSpreadを使う事になりました。そこでSpreadについて質問
させてください。Spread内でのGotFocusプロシージャとはないのでしょうか?
列が移動する度にステータスバーに何を入力するかを表示したいと考えています。
686 :
デフォルトの名無しさん :04/12/03 11:34:45
2重起動防止の処理としては下記のコードが有効ですよね。 If App.PrepInstance Then End End If でも、先に起動していたほうを(強制)終了することを試みたのですが上手くいきません。 ちなみに次の操作を行いました。 クラス名を"ThunderRT6Main"、キャプションを"App.Title"としてFindWindowでハンドルの取得を試みたのですが、 そこで得たハンドルに"WM_QUIT"を送りつけた。 結果、上手く終了しませんでした。 有効な方法をご存知の方はみえませんか?
ごめんなさい。上の文章では自分でも何を言ってるのかわかりません。 2重起動防止の処理として、先に起動していたほうを(強制)終了したいのですが上手くいきません。 試した処理は下記のとおりです。 ・クラス名を"ThunderRT6Main"、キャプションを"App.Title"としてFindWindowでハンドルの取得 ・取得したハンドルに"WM_QUIT"を送る 有効な方法をご存知の方はみえませんか?
OSは? この手の話は95系とNT系で若干異なる。 まあ、二重起動ってことは、殺される側も自分なんだから、死に易いようにきちんと作ればいいんじゃないのか?
あと、一応 ExitProcessとTerminateProcess が該当するけど、きちんとヘルプ読んで慎重に使用しましょう。
>>688 OSは、2000/XPです。
>殺される側も自分なんだから、死に易いようにきちんと作ればいいんじゃないのか?
ごもっともです。勉強します。
>>689 プロセスIDを取得するとき、ウィンドウハンドルが必要になりますよね。
上記のハンドル取得方法には問題ないのでしょうか?
ベタだけど、アプリ正常起動時にプロセスIDをどっかに出力しておく。 後起動側はインスタンスを確認し、存在したらそのプロセスIDを殺しに行く。
LeaveCell イベント
694 :
668 :04/12/03 12:58:02
>>692 ありがとうございます。成功しました。
Spredでもいろいろできるんですね、まだまだ勉強が必要ですが。
>・クラス名を"ThunderRT6Main"、キャプションを"App.Title"としてFindWindowでハンドルの取得 ハンドルを取得してから、プロセスIDの確認してみます。 とりあえずもう少し悩んでみようと思います。 皆さん、ありがとうございました。
696 :
668 :04/12/03 16:00:04
連続質問で申し訳ないのですが、調べてもわからなかったので教えてください。 SpreadSeetで行ヘッダを選択し、行全体を指定している時に[Delete]キーを 押すと、その行を削除するという動作をさせたいです。 行の削除方法はすぐに見つかったのですが、行全体をしていしているという判 断をどのプロシージャで行えばいいのかわかりません。 ご存知の方がいましたら是非お願いします。
>696 SpreadのOperationModeが「単一選択モード」になってるのなら SelModeIndexプロパティから行番号を得られます。 そうでないのなら、Clickイベントでヘッダがクリックされるたびに その行番号をどっかに保持しておく、ぐらいしか思いつきません。 ごめんなさいね。
>>696 "ActiveRow"っていうプロパティがあったと思ったが…
699 :
デフォルトの名無しさん :04/12/04 03:27:54
VB.NETの質問はここでしていいのですか? 昨日購入し、まだ条件分岐を覚えたレベルです。 binフォルダにあるexeはVBがインストールされているPCでしか使えない。 という事ですが、配布されている方はどうやってexeを作っているのですか? アプリケーションをうまく初期化できませんでした?見たいに表示されるみたいです。 自PCじゃないので詳細なエラーメッセージがわからないのですが、宜しくお願いします。。
>>699 良くない。
>>1 に書いてあるだろ…
相手のPCに.NET Frameworkが入ってないとか…
701 :
668 :04/12/04 09:38:27
>>698 はい、ActiveRowというプロパティは調べました。実際にDelete処理を行う時に
使うつもりです。今自分ができないところは行ヘッダを選択しているのをどうや
って知るかです。行ヘッダを選択してもActiveColは列の1番目を認識していて
、この状態でDelete処理を入れると、単に列の1番目でDeleteキーを押しても行
を削除してしまうのです。
702 :
デフォルトの名無しさん :04/12/04 18:32:11
よろしくお願いします。 @Timerの時間は、最長何分位まで設定可能なのでしょうか? 60数秒に設定したらダメで、60秒(60000)はOKでした。
703 :
デフォルトの名無しさん :04/12/04 18:45:44
MaskEdBoxで、日付型変数(dat)を表示したいのですがうまくいきません MaskEdBox1.Format = "ggge年m月d日" MaskEdBox1.Mask = "#年##月##日" MaskEdBox1.Text = dat MaskEdBox1にdate型変数(dat)を入れようとすると 「実行エラー380 プロパティの値が不正です」と出ます。 .textの位置を.maskの上に持っていくと.textに代入したdate変数の値は失 われます。 1週間悩んでます誰か助けて下さい(涙
>>702 2^16-1 = 65535(ms)
65秒とちょっと。
705 :
702 :04/12/04 19:01:11
>>704 ありがとうございます。
では、65秒以上のタイマーイベントは使えないのでしょうか?
更に長い時間のタイマーを使える方法等ありましたら、
教えていただきたいです。
よろしくお願いします。
706 :
デフォルトの名無しさん :04/12/04 19:07:09
シーケンシャルアクセスファイルについて ただ今、 Dim strbuff As String Open "C:\a.txt" For Input As #1 Line Input #1, strbuff MsgBox strbuff T1.Text = strbuff Close #1 ↑このようにし、テキストボックスをファイルに書き出す事をしています。 この場合、"C:\a.txt"にしておりますが、 ゆくゆくは、実行ファイルと同じディレクトリ内にファイルを作成したい と思っております。 このディレクトリは、あちこちのドライブ&ディレクトリに動かします。 こんな場合でも、ファイル(設定ファイル)を読み書きするにはどのような 記述をすればよろしいのでしょうか? よろしくお願いしますm(__)m
>>705 タイマーイベントの中に static な変数を宣言して数える。
>>705 0.5秒とか0.1秒ごとにtimerで監視して行う
Windowsのタイマーイベントは精度があまりよろしくないので
どのみちこんなやり方しないと誤差がひどくなる
>>706 App.Path & ”\a.txt”
レジストリやDocuments and Settings\usrname のほうがよくない?
>707 解雇
711 :
デフォルトの名無しさん :04/12/04 21:54:44
Longで宣言した変数の下位1バイトだけをとりだして、Byteの変数の移したいのですが、どのようにすればいいのでしょうか?
>711 ネタ?
>>712 ごめんなさい。ネタじゃないんです。
何かすごく基本的なことを忘れてるような気はするんですが…
>713 マスクかけるだけ
716 :
711 :04/12/04 22:34:57
>>714 すいません。マスクってANDとかORのことですよね?
それならもうやってるんですが、どういう風にマスクをかければいいんでしょうか?
OR 255
>717 ごめん。ウソ。AND 255
AND 255
下位1バイトを取り出すってことは 2進で 00000000 00000000 00000000 11111111 ってやつとAND計算すれば、上位3バイトは0になって下位1バイトだけ残る。 といわけで>718が合ってる。
721 :
711 :04/12/04 22:50:34
>>717-720 。・゚・(ノД`)・゚・。 ありがとうございます。できました。
なぜかOR 255 にしてました。
散々悩んでたのが氷解しました。
本当に感謝です。
>>706 >このようにし、テキストボックスをファイルに書き出す事をしています。
チミのソースコードに”ファイルに書き出す”処理は見当たりません。
もう少し日本語勉強してから質問してね(はぁと
723 :
デフォルトの名無しさん :04/12/05 04:31:03
はじめまして。 あるソフトを自動でクリックしつづけるソフトが作りたいのですが。 人間がではなくVBがマウスをクリックする・・・というのは、どうすればできるでしょうか?? メッセージを送ればいいのかなぁ・・・とも思いますが。
>722 ここまで物事が分かってない奴がいるとどうしようもないな。 君はプログラム未経験者かな? 出直してください。
補足 >725は706じゃなくて722のことだよ。
4年前私はマイクロソフトのCOM+2.0の評価メンバーに誘われました。 私の興味はASPの組み込みオブジェクトに興味があったのですがそれでも参加することにしました。 COM+2.0の仕様書を見て私は驚愕しました。 すべての言語の境界がなくなり、さらに便利で強力なクラスが膨大に盛り込まれていたのです。 それは後に.NETと名づけられました。
ネーミングセンスが最悪なわけだが
使用OS:WinXP VBバージョン:VB6(SP5) ADO接続でcsvを読み込み、FlexGridに表示したいのですが、 CN.ConnectionString = "Provider... CN.Open strSQL = SQL文 RS.Open strSQL, CN, adOpenStatic, adLockOptimistic, adCmdText Set FlexGrid.DataSource = RS ↑ この行で「オブジェクト変数またはwithブロック変数が設定されていません」というエラーが出ます。 原因がわかりません・・・。よろしくお願いします。
730 :
デフォルトの名無しさん :04/12/05 14:40:00
写真を保存するデータべースソフトを作ろうと思っています。 フォームにイメージがあり、それに画像を読み込むとします。 例えば、プログラムを起動した後、 img1.bmpという画像を読み込んだとします。 読み込んだ画像を、プログラムを終了したときにセーブし、 次回プログラムを起動したときに自動的に読み込むためには どんな関数を使えばいいでしょうか?
>>729 原因は「オブジェクト変数またはwithブロック変数が設定されていません」ってことです。
エラーの発生する行に「オブジェクト変数」がありますよね?
それが空だってことです。
自分が何をどの様に使っているのかを理解しないといけません。
コードだけを教えてもらったり、どっかからコピーしてきただけでは
それを理解することは難しいでしょう。
自分の書いたコードの全ての行の意味を理解しましょう。
>727 マルチうぜー
734 :
sage :04/12/05 18:31:13
使用OS:WinXP VBバージョン:VB6(SP5) メインのプロジェクトより複数の外部EXEファイル(VBで作成)を起動させ、 メインプロジェクト終了と共に、外部EXEを全て終了させたいのですが どうにもうまくいきません。 APIやレジストリを使えばうまくいくのかもしれませんが、 使ってはいけないとの制限です。(ここらへんは追及しないでください・・・) 色々調べましたが「不可能」という回答もちらほら見かけます・・・。 もし、可能であればご教授願いたく、書き込みしました。 初心者的なことなのかもしれませんが、よろしくお願いします・・・。
うう・・・ ひさびさに書き込んだらageてしまいました・・・ もうしわけありません・・・。
API使っちゃダメなら不可能じゃないか?
>>736 返答ありがとうございます。
Shellで起動してタスクID拾って、メインプロジェクト終了時に
ID調べてSendkey(ALT+F4)とか無理やりやってみたりもしましたが・・・
どうにもできなかったです。(2重起動不可にしてもIDが一意でなくなります)
メインの起動コマンドコントロールをFalseにすれば一意性を保てますが、
外部EXEを単体で終了させると制御が戻ってこないのでFalseのまま・・・
やっぱり不可能なんでしょうか・・・。
マルチうぜー
>>730 そのファイル名をレジストリ、iniファイル、その他任意のファイルに記録するだけ。
>737 あのさ、API使っちゃダメって言ってるけど、そのAPIってのは 何のAPIのことを指している?
>>740 API関数です。
現在ひらかれてるウィンドウのハンドルとか取得できますよね?
他にもAPIっていわれてるモノあるんでしょうか?
初心者なものですいません。
マルチうぜー
APIってのはApplication Programming Interfaceのこと。 Win32APIだけがAPIではありません。 Win32APIを使うな、ということですか? だとしたらやりたいことは実現できないと思います。 追求しないでと言われていますが、どうしてWin32APIを 使ってはいけないのか知りたいです。
>>734 API禁止はたぶん宿題かなんかだからだろう。
さてこういうのはどうだ?但し絶対ありえない原始的な方法。
外部EXEではTimerか何かを使って一定時間ごとにある特定のファイルがあるかを調べ、
あれば自分の名前をファイルに書き込み、自分は終了する。
メインプロジェクト側では終了時にその特定のファイル名を持ったファイルを作り、
そのファイルに終了したいプログラムの名前が全て書き込まれるまで待つ。
その後そのファイルを削除し、自分も終了。
>744 いやすぎるな・・・w
レス遅くなりました。すいません。
>>744 するどいご指摘。そんなかんじです。
744さんの方法もおもしろいですね。
でも、根本的になにか間違ってる気がしてきたので、
少し問題について問い詰めてみようと思ってます。
(実際には外部EXEには手を加えない、なので)
お答えくださった方々、ありがとうございました。
外部EXEをActiveX EXEで作るというのはだめでしょうか? <外部EXE-Class1> Public Sub form_open() Form1.Show End Sub Public Sub form_close() Unload Form1 End Sub <呼び出し側> Private ob As Object Private Sub Form_Load() Set ob = CreateObject("Project1.Class1") End Sub Private Sub Command1_Click() Call ob.form_open End Sub Private Sub Form_Unload(Cancel As Integer) Call ob.form_close End Sub
うざっ
749 :
デフォルトの名無しさん :04/12/06 01:43:41
VBでDBを読み込み、それをある条件で抽出したいのです。 ある条件とは、チェックボックスを用意して、それのチェックで条件が変わります。 例えば、 病気DBがあり、そのDBは、病名フィールドと症状フィールドで1つのレコードとなっており、 チェックボックスは、発熱、頭痛、腹痛、嘔吐、めまい、などの症状があり、チェックされた症状の全てを含む病気レコードを抽出したいのです。 以上のためには、どのようにやる方法があるのでしょうか。 他のところで質問したところ、罵倒を浴びたのでこちらに書かせて頂きます。
750 :
デフォルトの名無しさん :04/12/06 02:07:54
質問です。 VBには、Quick BASICのinkeyに相当する命令ってあるのでしょうか? 例えば、プログラムを実行して、処理の途中で、 画面に"Press any key to continue"と表示して、 何かキーを押すと処理を続けるようにしたいのですが、 VBでも可能でしょうか? もしわかる方がいたら、教えてください。 お願いします。
>>750 ClickイベントとかKeyDownイベントでしょうか。
753 :
749 :04/12/06 02:17:04
DBの形式というのは…Accessであってますか?
>>753 どんな罵声を浴びたか知らぬが、1から10まで手取り足取り教えないといけないのか?
本屋にでも行って入門書買いあさってきてくれ
ざ
756 :
749 :04/12/06 02:35:10
一応5、6冊見たんですけどわからないんですよ。 例として書いてあるのは、チェックボックスが2つとかで、 if使ってどちらかが…て感じだから使えないし。。。 だから、ヒントだけでもと思って質問してみました。
>>756 そうか。あなたにプログラムの才能が無いのはよくわかりました。
近くにソフト会社は無いのですか?そちらに作成してもらって下さい。
758 :
749 :04/12/06 02:43:35
すいません。 あなたのおっしゃるソフト会社に入る為に勉強をしているんです。 何か良い本とかサイトとかヒントとか教えていただけないでしょうか?
そうなのか。_| ̄|○ 適当にがんばってくれ。
>>749 ADOでAccessファイルを読み込む
SQL文で任意のレコードを抽出
てな辺りを調べてみるとか。
761 :
749 :04/12/06 03:22:22
任意のレコードを一つの条件だけで抽出なら既に出来ました。 ただ、今回作っているものは毎回条件が変わるので、そうするとどうすればいいのかわからないんです。
>>752 ありがとうございます。
参考書があっても、どこを見たらいいのかわからない状態だったので、
とても助かりました。
>>761 WHERE条件がわからんの?
チェックされてる時だけ AND 症状 でつなぐ。
764 :
749 :04/12/06 03:43:50
>>763 とりあえず、一つの条件で抽出する時は
Main.rscmdMaster.Filter = "症状 like *頭痛*"
って感じに書いたんですけど、、、
チェックされてる時だけっていうのは、
If Check1.Value = 1 Then
ってのから書き始めるんですか?
766 :
749 :04/12/06 04:09:44
>>765 いやぁ、実はここまではもう行き着いてたんですが、この先がわからないんです。
If Check1.Value = 1 Then
Main.rscmdMaster.Filter = "症状 like *頭痛*"
End If
If Check2.Value = 1 Then
Main.rscmdMaster.Filter = "症状 like *発熱*"
End If
じゃできないですし、入れ子にしても駄目でしたし、、、
文字列を連結したいなら s = s & "a" s = s & "b" ってな感じで出来るで。
スマソ、
>>763 これ間違い。
"OR 症状"
でつながないと駄目だ。
769 :
749 :04/12/06 05:34:25
教えてくださった皆さん。 本当にありがとうございました。 何か出来そうです。 ありがとうございましたm(_ _)m
770 :
749 :04/12/06 06:13:02
すいません、749です。 また新たな問題が… If Check1.Value = 1 Then Ref = Ref & "症状 like '*頭痛*' and " End If If Check2.Value = 1 Then Ref = Ref & "症状 like '*発熱*' and " End If Ref = Replace(Ref, " and ", "") deMain.rscmdMaster.Filter = Ref このように記述したところ、 チェックボックスを1つチェックしただけならきちんと抽出出来るのですが、 2つチェックするとエラーが出ます。 どこが間違ってるのでしょうか?
>>770 エラーならエラーメッセージくらい書け
質問するのはもう少しVBの基本的な使い方覚えてからにしたほうがいい
疑問が出るたびにここで質問するつもりか?
772 :
749 :04/12/06 06:30:43
>>771 すいません。
エラーは、「引数が間違った型、許容範囲外、または競合しています。」です。
これって、基本的な間違いをしてるんですか?
773 :
749 :04/12/06 06:37:11
772の追加で 実行時エラー 3001 です。 度々すいません。
>>773 ちっとは自分で考えろ。
人をあてにするな。
777 :
749 :04/12/06 07:07:07
すいませんすいません。 必要なところまで修正・削除してました。 これが正しいやつです。 Ref = Ref & """" '先頭に「"」を入れる If Check1.Value = 1 Then Ref = Ref & "症状 like '*頭痛*' and " End If If Check2.Value = 1 Then Ref = Ref & "症状 like '*発熱*' and " End If Ref = Ref & """" '最後にに「"」を入れる Ref = Replace(Ref, " and """, """") '最後のandを削除(「 and "」 を「"」に置換) deMain.rscmdMaster.Filter = Ref 771さんのおっしゃるとおり基本的なことが出来てませんでした。 すいませんでした。
757みたいな奴に反応したら負け。俺も負け。
>771 いや、別にあなたのような人には聞いてないのですが。 そんな不快ならあなたが書き込まなければ済む話でしょ? 脳みそは少なめのようですね。
>>779 あなたが解答すれば済む話でしょ?
脳みそは少なめのようですね。
zai
まさか新大阪か?
久々に「ホームラン級のバカだな」って言葉を使いたくなった。
ファイル選択ダイアログの出し方教えてください ぐぐってみまましたがあるようでないみたいです できれば、ツリードライブ検索でネットワーク対応があれば最高です お願いします
まるちはマジでうざい
つか、ageで、マルチかい。 でもって、ぐぐったらやまほど出てくるから。もっかい探せ。 …そのまえに、MSDNにもばっちりかいてあるとおもうぞ。
VB6.0SP6 OSは2000SP4 昨日からプログラム始めましたよろしくお願いします。 コマンドボタンのCaptionをLabel.Alignment=0のように左揃いで出したいのですが そのプロパティがないのでできません。(自動で中央揃いのみ?) なんとかできませんか?デカいボタンが好きなんです。
>>788 台詞の右側に適当に空白つっこんだらだめかね?
解決じゃなくて、回避だけど。これじゃ。
サイズ変更なんかしないんだから、これでいんじゃない?
っていうかMSDNで顧問ダイアログみたけど そんなんじゃない。もっと高機能つーかツリー系のやつ たぶんCreateObject("????.SEHLL") ← こんな感じでつかえた 過去に使ったけど忘れたからきーてるワケ
>>790 SHxx系のAPIを調べる。
あとは自分でどうにかしろ。
>>789 レスありがとうございます。
しかし、Capitionの内容はLogの状況でころころ変わり、
ウィンドウサイズを変更するとそれに合わせて
目的のコマンドボタンの幅も変わるようになってるので
(できるだけボタンを大きく取りたい)
適当な空白数を計算する策は私にとっては難しいです・・、どうかよろしくお願いします
>>790 なんで質問してるのにそんなえらそーなん?
だから、普通にぐぐれば見つかるから探せよ。
高機能でツリーな奴もAPIで一発だろ。そのままずばりを解説したHPもあります。
てめーがサーチ能力もないクズだからみつからねぇワケ。
794 :
初めて4日目の名無しさん :04/12/06 14:32:11
ググるときのキーワードを教えていただけませんか? お願いします><
やかましい、今さら泣いてもおそいんじゃぼけぇぇっっ つか、こんなとこでうだうだやってる間にまじめに探せばみつかるんじゃ、あほがぁぁ SHGetPathFromIDListA これくれてやるから、とっととうせろ、この、くれくれたこらふぇちやろうがぁぁ。
クソまじめに努力するこたぁない! >795に任せりゃケツに答えを突っ込んでくれる!
>>792 なろほろ、そういう用途なら、決めうちではいかんですな。
んじゃ、ひたらす回避路線ですが、コマンドボタンの上にラベルのっけたらだめなの?
まあでも、この程度の奴がSH系のAPIを使うのは非常に危険に思える。 正直、やめといたほうがいい。 ダイアログを自作しちゃったほうがマシにも思える。
>>798 危ないおもちゃを与えてしまった気分満タン。
>>797 ボタンの上にラベルって乗っかるか?
>>792 コマンドボタンのキャプションが変わるっつーインターフェイスに疑問があるが・・・
イメージBOX&ラベルで無理やりつくるか
ピクチャBOXで作るかじゃだめなのか?
>799 君ごときが人に何か与えられるなんて思い上がらない方がいいよ。
VB6(SP5)なんですけど、データベースを使ったソフトを作って配布しようと思っています。 しかし、再配布できるDBエンジンって何があるのかがわからないのですが、どなたか詳しい方は、教えていただけないでしょうか? ちなみに、現在、"Microsoft DAO3.6 Object Library" が参照されていますが、これは再配布できなかったように思います。 また、これ以降(.net)には、再配布可能なDBエンジンはついているのでしょうか? #・・・データベースを使ったソフトを作る場合って、どうするのが一般的なんだろうか・・・
>>800 やってみた。どうあっても後ろに引っ込むな。だめだこりゃ。すまんかった。
>>802 DAO=JETデータベースエンジン=MDBファイルは再配布可能。
あと、MSDEも再配布可能・・・だけどインストール先に十二分以上に確認しないと文句言われます。
(SQLServerそのものですから重い)
>802 DAOは3.5も3.6も再配布可能なパッケージがあるから探せ。 細かいVer.とかサブセット版もあるから注意しろ。 国内サイトじゃほとんどないから海外サイト探せ。 それがダメならADOで組み直せ。 ADOならMDAC入れりゃいいから問題なかろう(MS純正・再配布可能だし) あと肝心のDBの種類が書いてない。それに依存する話なら上記は忘れろ。 >788 まずFormのサイズに合わせてCommandButtonのサイズも変わるというクソな仕様を止めろ。 止められないなら見えない場所にLabelを貼って、AutoSizeをTrueにしろ。 それでLabelのCaptionに適当な文字列ブチ込みゃWidthが文字列に合わせて変わるから、 その数値を元にCommandButtonの幅なりCaptionに突っ込むスペースなり適当に計算しろ。
>795よ、とにかくもらっとくよ SHGetPathFromIDListA ほんとはVBなんでオートメーション系をきぼんぬだったが T H X!
>808 まあまあ、このスレのレベルじゃ期待通りのものが出てくる ことはあまりないから。
このスレにはよく低レベルの煽り厨が出てくるが無視するのがいい。
>>749-759 こらお前ら、飲んでたほっとレモン
キーボードに吹いちまったじゃねーかw
キーボードイベントをメモ帳やwordなどから拾いたいのですが、どうすればよいでしょうか? VBで作ったフォームからキーボードイベントは拾えるのですけど、他のアプリから 拾う方法がわかりませんでした。 どなたかヒントください。宜しく御願い致します。
>802 807だ。 これから作るにしてもDBの種類ぐらい決めておかないとそのうち質問すら出来なくなるぞ。 で、DAOとJETは再配布してもよい。MDACもだ。でなけりゃMSのサイトからDownload出来る訳がなかろう。 俺が書いたDAOは、このページに書いてあるDLL単体じゃなく、インストーラ付きの エンドユーザ向けランタイムパッケージだ。必ずあるから死ぬ気で探せ。 でだ、DAOにしろJETにしろMDACにしろ、いずれかのDBエンジンはOSによって 最初から入ってる/入ってない、もしくは入ってるVer.の違いというものがある。 例えばMDBの場合、Win2k以降ならMDACを入れなくてもADOなら動く(ただしMDACのVer.は古い) そこらへんキッチリ調べておかないと、ユーザに古いDBエンジンを上書きインストールさせる羽目になるぞ。
>814は無視してください。
>>809 だから、DBMSとして、JETでもMSDEでもただで手に入るんだって。
JETは2000前のACCESSのDBMSそのもの。
MSDEは制限つきのSQLServer。
上記に対するミドルウェアとして、DAOでもRDOでもADOでもVBを持っていて、
そこからインストーラーを作成してれば再配布可能。
VB6SP5を使っているのですが、フルパスを渡してそれがファイルなのか フォルダなのかを判別するにはどうしたらいいでしょうか? Dir関数の使用例に 'ビット単位の比較を行い、フォルダかどうかを調べます。 If (GetAttr(Path$) And vbDirectory) = vbDirectory Then Msgbox "これはフォルダです" のようなものがあるのですが、これを使ってみるとなぜかフルパス中に半角スペースが含まれているとエラーになります。 Path$ = """" & Path$ & """" と入れてみましたがやはりエラーになります。
ごめんなさい、SP6でした。
>>818 特にエラーは出なかったが、どんなエラーだ?
>>819 えぇ、そんなはずは・・・、と思ってもう一度ソースを見てみたら
判別する前の状態で半角スペースがあるときは["]を付加してありました。
それを取り除けばできました。
申し訳ないです orz
807だ。 >815 お前は誰だ?(w
再配布可能ファイルとそうでないものはどのように判別できますか/してますか。
>>822 ちゃんと書かれている。TXTを読めばわかる。
>>823 使用範囲を広げた再頒布可能コードってどういうことですか?
TABCTL32.OCXなんですけど。
>>810 まあまあ、その質問の仕方じゃ回答があっただけでも奇跡と思えって話だぞ。
回答の催促に情報小出しつつもらった回答への難癖とぎりぎりまでお礼なし。
しかも、一番最後に「本当は○○がほしかった」おっしゃられる。
最初にそれ言えば一発じゃんよ。
調べるのにつきあってたやつ乙。
了解しました。 dao3.6 + jet4.0 で行こうと思います。 ありがとうございました。
>825が助けふねをだしてくれたようなので 仕切りなおしたいと思います オートメーションで呼び出せる「ファイル選択ダイアログ」はないでしょうか? よろしくお願いします
microsoft common dialog controlみたいな名前のコントロールでいろんなダイアログが使えるよ
糞だなw
助け舟じゃなくダメ出しだよな・・・。 まあ、IEインストールで入れられるActiveXでその類があったように思うけど、自分で調べろって感じかな? SHxxxのAPIのHPとかを見ていったり、そこでのキーワードで再度グーグルしたりすれば、たどり着いたような薄い記憶はある。 まあ、環境限定がAPIの場合より厳しいので使わなかったからうろ覚えだけど。
>>823 どのtxtでしょう?
sp6のredist.txtは見たが、これだけではないよね。
たとえば、cmct2jp.msmが再配布可能かどうかはどこでわかりましょう?
つまり、最初のredist.txtと最新spのredist.txtを見ても 中間のspで再配布可能となったと思われるファイルについては何も分からないけど どこで分かるのか、ね。
>>832 VBのヘルプを再配布とかインストーラをキーに検索して、その辺りを兎に角読む。
>>833 中間のSPのredist.txtを入手して読む。
あるいは
>>834 なにか、最近もらった回答に難癖つけるような物言いする人が多いのね。
>835 ちゃんとメッセージまでかかんとわからんだろ? コマンドボタンに左寄せがないって言ってる椰子にSDKレベルで(ry いやがらせか?
>>836 回答が役に立たたなかったら、率直に伝えた方がよいでしょ。
>>839 難癖つけるような物言い。
言い方があるでしょってお話し。
役にたたなかったら、役に立たないということは正常かと。
VBでADOを使ってアクセスデータベースに接続したいのですが、 SQLに、VBA関数を使ったクエリを表示しようとすると 実行時エラー '-2147217900 (80040e14)' 式に未定義関数 '関数名' があります という、エラーが返ります。 このエラーの対処法を教えていただけないでしょうか?
>841 それだけじゃ何も分かりません。
>841 Accessで慣れると必ずやるんだよな、これ。 対処方法? VBAの関数を使わないクエリにするしかない。 (この場合、DAOでもVBAの関数は使えない) でなければ、素直にAccessで作る。 要件(規模含む)次第だが、この場合、VBを使わないでAccessを 使った方が生産性高いかもな。(どちらも長短がね)
>843 お返事ありがとうございます。 つまり、外部からaccessのクエリを利用するには、 そのSQL分は、標準のSQL関数しか使えないという事でいいでしょうか? 別の実装方法を考えたいと思います。 ありがとうございました。
自己解決しました。お騒がせしました。
VB6.0使用 shellを使って、バッチファイルを呼び出しているのですが、うまくいきません。 バッチファイル内部では別のプログラムを呼び出していて、そのバッチファイルを ダブルクリックで起動した場合は、正常に動くのに対して、 VBから呼び出した場合に、エラーを吐き出し、正常に終了しません。 Dim path As Variant Dim procID As Variant Dim cmd As Variant path = batPath.Caption '実行するバッチファイル格納場所 procID = ID_param.Text '実行パラメータ cmd = cmd & path & " " & procID Shell (cmd), vbNormalFocus プログラムは現在このようになっています。 バッチのエラーから、おそらくVBでのバッチ実行時のパスに問題があるのではないかと 思うのですが、なにか、対処法ありますでしょうか?
>>846 できればエラーの内容を書いてほしいんだけど…。
バッチファイルのパスに空白が含まれているのかも。
試しに path の前後を二重引用符で囲んでみよう。
あと、cmd = cmd & path & " " & procID となってるけど、
cmd は元々空白だから cmd = path & " " & procID
と同じことだよね。これは意図通りなのだろうか。
たぶん問題なかったと思うけど
バッチファイルを Shell 関数に直接渡して実行できるんだっけ?
>>846 こうじゃないの?
Shell (cmd), vbNormalFocus → Shell (cmd, vbNormalFocus)
1.ShellExecuteEXで関連付けでバッチを起動させる。(やったことない) 2.cmd.exe?comか忘れたが、UNIXとかでいうところのShellに引数を与える形式 コマンドプロンプトで CMD /? を実行してみればわかると思う。 Shellに渡すコマンドは・・・。 CMD バッチフルパス オプション でいけると思う。 細かい部分は自分で試してください。
850 :
デフォルトの名無しさん :04/12/08 10:23:06
どこかのサイトで フロントエンドのユーザインタフェースはVBで。 バックエンドのサーバ側はJavaで。 という例を見たのですが、こういうのって最近多いのでしょうか。 VB単体、Java単体で動かすのは理解できるのですが、これらの連携というのがイマイチイメージできません。 VB側からJavaを呼ぶって具体的にどうやるのでしょう? サンプルのコードなんかがあるサイトを教えて下さい。
>>850 良くあるかはしらんが、普通に昔から三階層風に作ることはある。
サーバー側C言語で、クライアント、サーバー間はソケット。
サーバ側は管理プロセスが通信の送受信とその受信したデータのサーバ側プロセス(スレッド)への割り振りを行う。
同じように単にJAVAにしてるだけじゃないの?
上記の管理プロセスは1プロジェクトで作るには豪華すぎるから、売ってるものもあるはず。
(タキシードとかってこの類でしたっけ?)
>>850 VBからJAVAよんでるって発想するとどつぼにはまるかもね。
>>851 さんが書いてくれてるように、
単純に二つのアプリケーション(フロントエンド・バックエンド)がプロセス間通信してるだけだよ。
ソケットでも、ファイルでも、介在するものはなんでもいいんだけど。
たぶん、VBからJAVA、あるいは、JAVAからVBに制御はかけてないと思われ。
あーなるほど。そういう訳ですか。 VB+COMで作る3階層C/Sみたいな仕組みが用意されているのかと思ってました。
>853 この人本当に分かったのか疑問。
VBで自明のバグを列挙しませんか? iif関数 iif(A,B,C)Aが真の場合B,Cを実行する しかし結果はB
はあ? 何が問題なんだ? IIF関数のTrueパートとFalseパートが両方評価されることはバグではなく仕様で明記されてるし。
。・゚・(ノД`)・゚・。
858 :
デフォルトの名無しさん :04/12/08 17:50:09
釣りかな・・・しかし結果がBって。 彼は何をバグと思って、どのような結果が正常だと思ってるんだろうか。
>855 まずお前の日本語をどうにかしろ。
VB5.0の話。 Dir("path\*.*")で、指定したパスに存在する最初のファイル名が得られ、 その後Dir("")を繰り返すと続きのファイル名が得られる。 それはいいとして、、、 どうやら、Dir("path\*.*")はFindFirstFileで Dir("")はFindNextFileに相当するらしい。 で、Dir("")の戻り値が "" だった場合、 自動的にFindCloseが呼ばれてるらしい。 そのため、Dir("path\*.*")だけを繰り返し実行していると FindCloseされず、ハンドルがどんどんリークしてしまう。 昔このせいでハマったことがあった。 とりあえずFind〜系のAPIを直接呼ぶことで回避した。 これって有名な話? VB6.0ではどうなのかな。
>>860 VB6でAPIMonitor使ってみてみたけど、
一回目は開いていないから当然FindCloseはしないとして、
二回目からは前のをFindCloseしているようだよ。
>>861 うおっ、レスはやっ。
そうか、VB6では問題ないのか。あの頃VB6があれば…。
あと、おかげさまでAPI Monitorの存在を知りました。
今まで自分でAPIフックのコードを書いていたよ…。orz
API Monitor使ってみました。これは便利だ。
で、手元にあったVB5.0 SP3で早速試してみたら、
ちゃんとFindCloseしてるじゃん!!
あの当時リークがあったのは間違いないので
SPを当てていないバージョンだったのか、それともVB4だったのか…。
なんにせよ、少なくともSPを当てていれば問題ないようなので
>>860 は忘れてください。>ALL
なんか釣り師みたいになっちゃったな…。
バグではないが、 VB5では INT(100@/1@) がIDE/P-Codeでは100、ネイティブでは99となる。 VB6ではどっちも100。 どっかの掲示板で知って開発環境か実行環境かの判断につかったことがある。 (もちろんジョークでだが)
>>855 詳しく!
なにか問題あるの?
Aが真ならBを
偽ならCを返すんじゃないの?
>>866 他の言語とは動きが違うってこったろ
Aが真ならBだけを実行すればいいのにCまで実行するのは
男の仕様だよな
つうかそういう動作で遅くなるの判ってるから殆どの香具師がIIF使わないんじゃないのか・・・ 醜くなるから漏れは使わないのもあるのだが・・・・
AccessのSQL文の中でたまに使う。VBでは使わん。
バグではなくて私がバカでした ヘルプもろくによんでませんでした、てへ ごめんね、つりじゃないよ >動作で遅くなるの判ってるから殆どの香具師がIIF使わないんじゃないのか・・・ すきか嫌いかで言うと俺は IF 処理 ELSE 処理 END IF ↑嫌い IF 処理 THEN 処理 ↑好き ついでに三項演算子みたいなのもすきだイテレータはこのんで使う主義
IIFって文字列作成(SQL文のWHERE節)とかで使うけどね。 AND条件を羅列するときに、既に条件があればANDをつけるとか。 WHERE A AND B AND C とかで、 WHERE以降のABCがアリ無しあるとき。 IF A <> "" THEN hoge = IIF(hoge <> "", " AND " , "") & SQL条件文 ENDIF 一々IFで書くよ可読性が悪い。 A<>""もIIFでかけるけど、それをやるとIIFが二重になるから避けてる。
>871 なるほど、おいらはIIF関数の使いどころがずれていたみたいだね IF文の代用に使っていたから....... さすがにおいらもIIFの入れ子はしないさ
単純にBOOL->文字列変換と割り切ればいい。 兎に角、両方が評価されるという仕様をきちんと理解してれば問題なし。
>>866 無駄な計算をする。
Private Sub Form_Load()
Dim a As Long, b As Long, c As Long
a = 5
b = 2
c = IIf(a > b, a, Test(a))
End Sub
Private Function Test(c As Integer)
Debug.Print "通過"
End Function
>>874 だから、IIF関数のもっとも基本的な仕様に関して、それを言ってどうするの?
そもそも最初の人の無知が始まりだけどさ。
876 :
デフォルトの名無しさん :04/12/09 16:45:20
すいません、初心者的な質問なのですが MDI親フォームの背景に画像を並べて表示をする事は可能なのですか? 一枚の大きい画像を表示するのはPictureプロパティにセットすれば良いと いうのは分かるのですが、小さい画像をパネル状に並べる事は出来るのでしょうか? 開発環境は OSはWinXp Pro VB6.0のSP4という環境です 方法等分かる方、よろしくお願いします
878 :
デフォルトの名無しさん :04/12/09 17:15:44
>>877 ブラシというのは、gdi32APIを使うと言うことでしょうか?
以前に、単色で塗りつぶしには使った事があるのですが
外部のビットマップファイルを読込んで使えると言うことですか?
>ブラシ プゲラまたいやがらせだな >878 並べて表示の機能を使う
880 :
デフォルトの名無しさん :04/12/09 18:07:16
ちょっとした疑問なんですが変数宣言でdim idx とするとある時とつぜんIDXと大文字になるんです idxは予約語かなにかでしょうか?
881 :
デフォルトの名無しさん :04/12/09 18:10:27
>>879 えっ、ブラシでというのはデマなのですか?
並べて表示というのはどうやるのでしょうか?
詳しいやり方などを教えていただけるとありがたいです
>881 デマかどうか知らんが>ブラシの一言で何か分かったかどうか疑問 結局>881がじらされて面白がってるだけだと 思うよ フォームをブラウザビューにしてHTMLで並べて画像の表示すれば いいんじゃないかと思うがどうかなぁ
>880 どこか他の場所ですでに大文字のIDXという変数が宣言されているのでは。
884 :
デフォルトの名無しさん :04/12/09 21:30:29
初心者ですまそ。 VBAなんかから関数を呼び出す場合、foo(arg1, arg2,..)とか書く場合と foo arg1, arg2, ...とか()を書かない場合がある気がしますが、何の 違いがあるのでしょうか?
885 :
デフォルトの名無しさん :04/12/09 21:31:29
違いはない
Cばっか書いてたから・・・。
VBでは関数の()はあってもなくてもいいのですか。
>>885 氏サンクス。
>>884 Callステートメントの説明読めば理由が分かるよ。
888 :
デフォルトの名無しさん :04/12/09 22:09:58
>>885 いや、確かそうとも言い切れないケースがあったはす。
確か参照渡しの引数を一つ取る関数を括弧をつけて呼び出すと、
括弧をつけたことにより変数の参照ではなく値が渡されてしまい
期待するのと違う結果になる、みたいな話だと思ったが。。
VBに限らないけど、プログラミング言語ってちょっと触ってないと
どんどん忘れていくな。
>873
>873 ExcelのIF関数と同じと思えばいいのかな?
括弧をつけない MsgBox "hoge" MsgBox "hoge", vbOkOnly MsgBox ("hoge") ←─── MsgBox ("hoge"), (vbOkOnly) 括弧をつける Call MsgBox("hoge") n = MsgBox("hoge", vbYesNo) n = MsgBox(("hoge"), (vbYesNo))
>871 WHERE句の最初に必ず満たす条件を つけとけば判定1回づつで済まない? 例: strSQL = "SELECT * FROM TABLE" strSQL = strSQL & " WHERE 1 = 1" If A <> "" Then strSQL = strSQL & " AND " & SQL条件文1 End If If B <> "" Then strSQL = strSQL & " AND " & SQL条件文2 End If
IIf はパフォーマンスが悪いのも問題だが、 IIf(x = 0, 0, 1 / x) みたいな書き方ができなくて不便でもある。
>893さん なんでできないの?
>>894 上で散々話題になってるじゃん。
IIf って結局ただの引数が3つの関数だから、
関数に値が渡されるときに x = 0 のときでも、1 / x まで評価されて
0 除算エラーになってしまう。
>>892 SQL文に余計な条件をつけることで、万が一にパフォーマンス等に影響があったら論外なのでパス。
完全なプログラマ都合じゃん 1=1なんて。
テキストボックスに入力したファイルパスが存在するか調べるにはどうしたらよいですか? c:\test\test.txtのように入力したときとかです
898 :
デフォルトの名無しさん :04/12/10 10:49:02
500とか600の値を時間としてh:nn:ssの形式で表示させていのですけど、 どうすればいいのでしょうか?
>>897 InstrRevで一番右の¥位置を取って、それより左をフォルダパスとして保持。
Dir関数で第二パラメータにvbDirectoryかなんか指定。
>>898 数値は何の値?秒数?文字列?(500は500秒?、5:00?)
900 :
デフォルトの名無しさん :04/12/10 11:04:18
60*60で割った商がH、60で割った商がM、60で割った余りが秒。
VBコードを変換したいのですが正規表現で置換しようと 思っていますが妥当でしょうか?アドバイスよろしくお願いします <次の文字列は右のように変換する> MLdbdata(hDBProc, 1) -> rs1.Field(0).value MLdbdata(hDBProc2, 10) -> rs2.Field(9).value 法則1hDBProcはrs1に読み替える 法則2hDBProc1,10の10は常に-1する
>>904 すでにVBの話じゃないよな? 妥当? 好きなようにやればいい。
>905 わかった。ありがとう 秀丸板さがします
>899 解雇
┐(´-`)┌
マルチスレッドでグローバル変数の値を読んだり書いたりする際に 注意すべきことってありますか?
ADOである名前のテーブルが存在するかどうかはどうやってしらべるのでしょう? SQL="Table Exist('NorthWind')" conn.execute(SQL) みたいなものだと予想してます
>910 え?
>>910 ADOXを使うとか。
ADODB.ConnectionオブジェクトのOpenSchemaメソッドを使うとか。
自己解決してたけどどーも Const adSchemaTables = 20 rc = conn.openschema(adSchemaTables) で、データベース内のいくつものテーブル名はコレクションとしてとりだされるから rc("TABLE_NAME").valueをさらにFor EachとかDo whileで1個ずつとりだせた。 do until rc.eof S+=rc("table_name").value rc.movenext loop debug.print S
>913 さすが
>>909 VBのバージョンは?マルチスレッドの実現方法は?
>915 VB6.0で、実を言うとマルチスレッドと言うか、1つは DLLからのコールバック関数で、もう1つはタイマーイベント なんです。そもそもこれってマルチスレッドって言うんですかね。
>>916 スレッドのIDを表示させてみたら分かる。
>>916 開発環境はOKで、コンパイルするとNGってパターンじゃない?
そもそもVB6は普通のマルチスレッドには対応してなかったと思う。
「動く時はある」だろうけど、やっちゃいけないことではないかと。
VBのマルチスレッド処理は昔のVBマガジンにある。(前世紀かも・・・。w) あと、PCDNとかでサンプルあるかもしれん。 マルチスレッド、出来る出来ないは出来る。でも、わざわざVBでやらんほうがいい。
>919 タイマ使ったらそれだけでマルチスレッドではないの?
>921 マジで。タイマーたくさん作ったらそれぞれ別スレッドで動いてると思ってた。
Windowsのメッセージについてきちんと勉強したほうが良いと思う。 それと、VBのDoEventsと、一般基礎知識としてのプロセスとスレッドの勉強。
>923 そかー。サンクス
>>922 だから、スレッドのIDを表示させてみろって。
>925 どうやるの?
>>926 GetCurrentThreadId
> 解説
> スレッド ID は、そのスレッドが終了するまで、システム上でユニークな(一意の)値となります。
>927 ありがとう。確かに一緒でした。
>927 DLLからのコールバックはスレッドIDが別でした。 というのもDLL内でスレッドを起動しているので当たり前なのですが・・・ というわけでやはりマルチスレッドなのですが、グローバル 変数を読み書きする際に注意する点はあるでしょうか。
>>929 マルチスレッドは、複数の処理が同時に進行する。
例えばグローバル変数を G、ローカル変数を L とするとき、
L=G
L=L+1
G=L
が2つのスレッドで同時に処理されたとしたら、Gの最終的な値は保証できない。
(2人の人間に上記の処理をさせたことを想像してみるといい)
簡単な指針としては、グローバル変数の値を変更するときは
InterlockedIncrement 等の Interlocked 系 API を使う。
処理が複雑で、これらの API を適用できないときは
処理の前後を EnterCriticalSection と LeaveCriticalSection で囲む。
パフォーマンス低下やデッドロックにならないよう使い方に注意すること。
それにしても、VBでやることじゃない気がする。
>931 ありがとうございます。InterlockedExchangeでうまくできそうです。 >932 色々事情がありまして・・・ とにかくありがとうございました。
934 :
デフォルトの名無しさん :04/12/12 14:01:03
31×31の配列idata(i,j)にあるデータをランダムアクセスで 書き込み、読み込みをしたいのですが、これで書き込みしたのを読み込みできません。なぜでしょうか? Sub failsave() Open "c:\back.bin" For Random As #1 Len = LenB(idata(1, 1)) For i = 0 To 30 For j = 0 To 30 k = 1 temp = idata(i, j) Put #1, k, temp k = k + 1 Next j Next i Close #1 End Sub
935 :
デフォルトの名無しさん :04/12/12 14:07:08
>>934 プログラミング以前だね。
まず人に読んで理解してもらえるよう文章を推敲することを覚えるべきだ。
そういうの「片手落ち」って言うんだよ。
演算子\と/はどう違う?
>>934 読み込みが失敗してるなら、
読み込み部分も提示しなきゃどうしようもねぇだろ。
エラーがでてるのかどうなのかも書いてないしな。
っていうか、Option Explicit入れてエラーが出ないコードにしてから
出直して来いって感じだな。(たぶんその辺じゃないかと思うけどさ)
片手落ちっていうか9割落ちだな。必要な情報が1割もねぇ。