VBプログラマ質問スレ(6.0以前) Part36
1 :
デフォルトの名無しさん :
04/07/20 10:20
5 :
デフォルトの名無しさん :04/07/20 11:04
5
6 :
デフォルトの名無しさん :04/07/20 11:10
7 :
デフォルトの名無しさん :04/07/20 11:41
質問です。 ディストリビューションウィザードについてですが、 インストール時のメッセージを変える事は出来ますか? まず最初に、 セットアップ:コピーしています。しばらくお待ちください というウィンドウが出ますが これについては Setup.lst の SetupTitle と SetupText を変更すればいいというのが分かったのですが、 "インストールを開始します"とか"セットアップ完了しました"などのメッセージは変更出来ないのでしょうか? ディストリビューションウィザードではダメ?
WEBカメラを操作するソフトを作りたいのですが 参考になるサイトありませんか? 1分間隔で画像を保存したいのですが
>>7 SETUP1.VBP 開いて改造しろ
又は SETUP1.EXE のリソースを弄れ
>>7 VBインストールしたフォルダ\Wizards\PDWizard\Setup1
の中のSETUP1.RCとかにそれらしき文字列を見える。
オレはやったことないけど、書き換えてみれ。
>>9 その方がいいのかなぁ・・・。
>>10 、
>>11 これいじりたくないなぁ・・・。
他のインストーラでもうちょっと簡単に出来ないかどうか調べてみます。
13 :
デフォルトの名無しさん :04/07/20 12:46
>>12 いじりたくないというか、VBの付属インストーラーをカスタマイズするにはいじるしかない。
コピーして改造が基本。
ヘルプにも若干説明が書かれているはず。
>>8 Google DirectShow カメラ VB
>7 弄りゃいいじゃん。文字列だけなんだから何も起こりゃしないって。
>>7 VB98\Wizards\PDWizard\Setup1
にあるSETUP1.VBPを開いてみた。
setup1.resにメッセージのリソース入ってるやん。
ここ弄るだけでええやん。
19 :
デフォルトの名無しさん :04/07/20 16:12
前スレ997の >Dim i, j as Integer >って書いたらiはIntegerになってくれると、 >勘違いして書いてた次期がオレにあるのは内緒だ。 ぐぐってみたら、結構こう思っている人がいるね。 上の書き方で.NETだとIntegerになってくれるみたいだけど。
20 :
デフォルトの名無しさん :04/07/20 17:05
>>19 Functionとかモジュールの引数とかは どうなるの?
Sub nantoka(i, j as Integer)
の場合 i は?
i はVariant型になるね。
>>20 ついでに言うとi、jともにByRefとなる。
23 :
デフォルトの名無しさん :04/07/20 17:57
ByRefって何だ?
24 :
デフォルトの名無しさん :04/07/20 17:58
変数をすべてVariant型にした場合の弊害を教えてください。
Variant型にすると内容に関わらず変数1個で最小12バイト消費すること。 DLL等の外部関数を使う場合に、特定の型へのポインタを使用する(ByRef で指定されている)場合にVariant型は使えない。(関数がVariant型に対応している場合は別) ByValで指定されている場合も型変換する必要がある。
VBでのstring型について、ご教授していただきたいのですが、 以下のプログラムで、文字列strにasciiコードiの文字を結合 そして、文字列からasciiコードを取得してそれを表示したいと考えています。 結果は、text1の129-159,224-252であるはずの所が全て0になっています。 文字列型での中で制御文字等の扱いはどのようになっているのでしょうか? 加えて、MSCommでのBinaryデータの取り扱いに関しても教えて頂けないでしょうか? Private Sub Command1_Click() Dim i As Byte Dim chars(256) As Byte Dim str As String str = "" '初期化 For i = 0 To 254 str = str & Chr(i) '文字列にASCIIコードiの文字を結合 Next i For i = 0 To 254 chars(i) = Asc(Mid(str, i + 1)) '上の文字列をASCIIコードにして配列に表示 Next i For i = 0 To 254 Text1.Text = Text1.Text & chars(i) & " " 'ASCIIコードを表示する Next i End Sub
>>28 たしか、MSComm.Output って Variant型だったから、
Dim ucaData() As Byte
Dim vPointer As Variant
' ここで送信データを ucaData() に格納。
vPointer = ucaData
MSComm.Output = vPointer
でいけたはず。うろおぼえでスマン。
30 :
デフォルトの名無しさん :04/07/20 20:51
質問です。(VB6) コントロール配列はloadコマンドで新しいコントロールが追加できますが、 例えばpic1(0)というPictureBoxの中にpic2(0)というPictureBoxがある場合、 pic1(1)はloadコマンドで追加できましたが、pic2(1)をpic1(1)の中に 追加する方法がわかりません。どなたか教えてください。
>29 なるほど、MSCommのinput,outputは variant型でしたか。 Cのイメージで、char*だと思っていました(汗 さらに質問なのですが、 Variant型変数(実際は文字列の様に扱っている)に対して それを、Byte型にキャスト(?)するにはどのようにすればいいのでしょうか? 以下のコードでは chars(i) = Mid(str, i + 1, 1) で、型が一致しないというエラーが帰ってくるし、ならばと思い chars(i) = Asc(Mid(str, i + 1, 1)) とすると、28で書いたように、129-159,224-252の区間が0と表示されてしまいます。 Dim i As Byte Dim chars(256) As Byte Dim str As Variant For i = 0 To 250 str = str & Chr(i) Next i Text1.Text = str For i = 0 To 250 chars(i) = Mid(str, i + 1) Next i For i = 0 To 250 Text2.Text = Text2.Text & chars(i) Next i
32 :
デフォルトの名無しさん :04/07/20 21:27
フォーカスをロストさせるには、どうすればいいのでしょうか? よろしくお願いします。
>>30 Set pic2(1).Container = pic1(1)
>>31 &H81 〜 &H9F および &HE0 〜 &HFC のASCIIデータは String型 にすると強制的に別のコードに置き換えられます。
ここらのコードを使いたい場合は Byte(Integerでも可) の配列のみにし、String を使うのは諦めましょう。
>>31 MSCommのOutputは29のとおり。
Inputにかんしては、InputModeプロパティをcomInputModeBinaryにすれば、
バイナリデータとして読める。それをバイト配列に格納すればいい。
>34>35 お返事ありがとうございます。 VBは慣れてないので、どこまで自動でやってくれるのか 理解できてなく。ちょっと戸惑っている所です。 シリアルについてですが、MSCommで受けるのは InputMode=comInputModeBinary inputlen=1 (これも必要なのかな?) にして、リングバッファに格納するという方法で言い訳ですかね? どうも、ありがとうございました。
38 :
デフォルトの名無しさん :04/07/21 09:43
なぜ Dim i, j as Integer のような書き方をしてもエラーにならないのでしょうか? 正式には Dim i as Integer, j as Integer と書けばいいのでしょうか?
39 :
デフォルトの名無しさん :04/07/21 09:47
バリアント型というのは、マイクロソフトがユーザーが何も考えなくてもいいように ということで作られた型なのでしょうか?
バリアント型を使うと大変重たくなるから 止めた方が良いと言う話は過去のものなのでしょうか?
Variant型の最大の欠点は、他人が見た場合に変数宣言だけではそれが何を意味するのか判らない事だ。
42 :
デフォルトの名無しさん :04/07/21 10:09
変数宣言でわかる変数は i だけだ(w
43 :
デフォルトの名無しさん :04/07/21 10:09
>>33 ありがとうございます。思っていることができました。
44 :
デフォルトの名無しさん :04/07/21 10:17
>>32 他のコントロールにセットフォーカスしてやればいい。
45 :
デフォルトの名無しさん :04/07/21 10:20
Formに貼りつけてあるコントロールのタブ順の一覧を表示するには どうしたらいいのでしょうか?
>>45 Formのタイトルバーで右クリックして「タブオーダー」を選ぶ
47 :
デフォルトの名無しさん :04/07/21 10:30
>>46 当方VB6ですが、タブオーダーってのが 表示されません。
48 :
デフォルトの名無しさん :04/07/21 10:48
MSFlexGridのEnabled を Falseにしても、セルの文字が 薄くなりません。 どうしたら EnabledtがFalseというのが 見た目でわかるようにできるのでしょうか?
49 :
デフォルトの名無しさん :04/07/21 11:55
質問です。 ここで聞くのが適切かどうかはわかりませんが… 簡単に言うと2つの郵便番号を元に大まかな距離が知りたいのです。 ので、郵便番号を元に緯度経度がわかるようなデータベースか そういったコンポーネントを知ってる方がいらさいましたら お教えください。
ふぇちゅいん様に相談しる!
53 :
デフォルトの名無しさん :04/07/21 13:10
22歳会社員です。今までディスプレイの解像度を800×600に設定してプログラム を作成していたのですが、近々1024×768に設定しなおして今までのプログラムも 統一することになりました。今までに作ってきたformのコントロールを1024×768 に対応させて大きさを変えるようなミラクルな方法ってありますでしょうか?
>>53 WindowState=最大化 じゃ嫌なの?
>>53 For Each ctl In Controls
With ctl
.Move .Left*1.28, .Top*1.28, .Width*1.28, .Height*1.28
End With
Next ctl
>>53 横着しない
57 :
デフォルトの名無しさん :04/07/21 13:33
58 :
デフォルトの名無しさん :04/07/21 13:42
>>54 >>55 レスありがとう。やってみます。
>>56 これをやるのは自分じゃないんです、社長です。社長が担当したんですが一つ一つ
やっているのが大変そうだったので、何かないかと調べていたんです。
>49 業務に使うんだったら大口の郵便番号はしょっちゅう変わるし、 最近市町村の合併が多いから注意されたし。 >53 年齢と職業は関係ない(w 社長サンに「横着するな」といっときな。 確かに>55の方法で一応は何とかなるが、見た目がダサいことこの上ない。 つーか解像度が小さくなるんなら手直しも必要だろうが、 今回の場合、なぜ手直ししなきゃならんのかサッパリ分からんのだが。
60 :
デフォルトの名無しさん :04/07/21 13:53
>>58 そんなことは ヒマそうな22歳会社員にやらせろ!
61 :
デフォルトの名無しさん :04/07/21 14:04
>>59 変更する理由なんですが、数年前に800×600の解像度でつくったプログラムを納め
た顧客が今回新しく作り直して欲しいと言って来てくれたらしく、これを機会にこ
の顧客用のプログラムの解像度も1024×768に合わせようと思ったみたいです。
>>60 ヒマではないんですが、、、何か方法があれば教えてあげたいと思っただけです。
62 :
デフォルトの名無しさん :04/07/21 15:36
>>61 それって新しく作りなおすことになるのか?
なんか詐欺のような気がするが・・・(w
63 :
デフォルトの名無しさん :04/07/21 15:45
>>62 違います、言葉の使い方がおかしかったです。前のものにいろいろ上乗せするんで
す、だから前のものも当然使えるようにと
えー、だからデフォルトで最大化設定じゃ駄目なのかYO
>>64 それだとコントロールが全部左上に寄ってる感じになる。
テキストボックスとか小さいままだし。
>>65 そんなもん、Resize内でなんとかせい
安易に最大化っていうのもちょっと違うような。
アプリ起動時に解像度を800x600に変更、アプリ終了時に元に戻す
>>66 まあそうなんだけど、けっこう面倒。
53が探してるのはコンバートソフトだと思う。
対象がプロパティだけなら作れそうな気がするんだけど、
コードでいじってるとややこしい。
70 :
デフォルトの名無しさん :04/07/21 16:45
>>55 俺もコレに近いことやったことあるけど、
後で修正が入ったときがキツいんだよね。
実行時にじゃなくて、デザイナでこれと同じことする方法があったら
いいのになーといつも思う。
71 :
デフォルトの名無しさん :04/07/21 16:52
タイトルバーに ○の中に aとか bとか cなどの入った文字を出すことができますでしようか? 今 OSが 98なんですが 2000になったら、ユニコードとかでできるのでしょうか?
>>71 VB.NETならUniocdeにある文字は表示できるんだが、(a)の囲い文字って
Unicodeにあるのか?(1)とかなら表示したぞ
VB.NET+WinXP
74 :
デフォルトの名無しさん :04/07/21 17:29
>>73 ○のaは ユニコード 0x24d0 です。
>>72 できるのかできないのか 聞いてるだけです。
77 :
デフォルトの名無しさん :04/07/21 17:44
>>73 ここは VB6までのスレなので VB6で表示できればいいのですが・・・。
.NETは、使ったことがありません。
>53 理由は分かった。 ただなぁ、他の人も書いてるけどcode内でやるとどこかに無理が出そうだぞ。 もうお客さんに「やる」って言っちゃったんなら泣き泣き徹夜でデザイン修正するしかないと思うが、 (社長がな。藻前は手伝ってやれよ(w) 過去に作った物だし使えない訳ではないんだから、現状のままでいいんじゃねーの? つーか調子こいちゃったっつーか口から出ちゃったっつーか、 そのサイズ変更の分はロハ仕事のスメルがプンプンするんだが、どうよ?(w
>>53 ロジックいじらなくてコントロールを再配置するだけなんだから
すげえ楽じゃん。
これが嫌な奴はプログラマやめるべき。
社長の仕事を奪うようなことするな
>>79 画面内のコントロールとかをてきとーなあんばいでリサイズしてくれるコントロール(?)はあるけど。
グレープシティーかどっか見てみれば?
5万ぐらいだから、あんた1日から2日分だ。
何画面あるかしらんがそろそろ終わってるんじゃないか?
85 :
デフォルトの名無しさん :04/07/22 09:17
22歳だから 一週間分ぐらいじゃないの?(w
コントロールのサイズだけじゃなくて
ボタンの中のフォントとかのサイズを
いちいち変えてたら文字通り日が暮れそう
やっぱり
>>68 か、逆にシステムフォントを
大きい文字に変えるとかじゃないかな。
みなさんたくさんのレスありがとうございました。ただ急ぎの作業ではないので まだ手をつけていません。別な事を任されたので、この作業は社長にがんばって もらうしかないです。
ShellExecuteで
http:// 〜をopenするときにクッキーも渡したい場合
どのようにすればよいでしょうか?
>>89 そういえばそうですね。
でも知ってたら教えてちょ
まずはクッキーの仕組みのお勉強からだろ
>>91 仕組みは知ってますよ。
printf("Set-Cookie:") で吐いてgetenv("HTTP_COOKIE")でゲットします。
ShellExecuteは関連付けに従って実行するだけなんだから、 普通にOSのこまんどぷろんぷととかから逝ければ逝けるよ。 で、クッキーの仕組みをしってるなら、それを実現できるかは判断付くだろ?
>>93 やっぱりできないっすね。
そしたらcreateobjectでIE起動した場合はcookieは制御できますかねー
95 :
デフォルトの名無しさん :04/07/22 14:08
少数点以下に数値あるものだけ小数点を表示させたいのですが どうすればいいですか? format(a,"#.#") にしたら.は無条件に出てしまうので・・・
そうか。わかったぞ。 まずクッキーファイルから値とりだして ソケットで送って帰ってきた値から判断すればいいんだな。
>>95 小数点以下があるか判断してフォーマットする関数を自作する。
>>96 つうかさ、クッキー保管の実装なんてブラウザ側の問題じゃないの?
そこまでやるなら、ブラウザもどきを作れば?
>97 それもそうでしたね。 できますた。ありがとん(・∀・)。
100 :
デフォルトの名無しさん :04/07/22 14:19
100ゲチョ-
VB5をWindowsXP(Pro)で使ってます。 実行ファイルを作るたびに、少しずつサイズが大きくなっていくんですけど、なんででしょう。 無論、ソースは変更していない状態での話です。 だいたい800K前後の実行ファイルで、3Kずつぐらい増えていきます。 で、「完全コンパイル後に開始」を行なったあとで実行ファイルを作ると、 サイズがしぼみます。
102 :
デフォルトの名無しさん :04/07/22 17:35
どうして OptionButton や CheckBox には Labelにある AutoSizw というのが ないのでしょうか?
MsgBox "hoge", vbSystemModal でメッセージを出すと親ウィンドウのタイマーコントロールが 止まってしまいます。 自分でフォームをモードレスで開くしかないでしょうか?
105 :
デフォルトの名無しさん :04/07/22 18:00
ネタなのかな。 EXEにすればちゃんと動くだろ?IDEだと止まるが。
>>108 以外に知らない人多いよ。
前スレでこれが原因のバグに質問者が気づかなくてなかなか
解決しなかったな、たしか。
どっちなのよ?
試すと止まるよ
VB6.0を使っているんですが、 配列の宣言時に初期値を設定したいのですがどのように書けばよいのでしょうか?
出来ません
まじですか・・・?_| ̄|○ 初期値が98個あってもすべて1回1回入れていかないとできないんですかね?
宣言と同時とは言えないが・・・ Dim a As Variant a = Array(1, 2, 3, 4)
>>116 おー、ありがとうございます。
今日VB始めたばっかりで全然わからんかったですよ。
精進します。
初期値が98個って何?
>>119 そのくらいあったら外部ファイルから読み込んだ方が良さそうですね
同じやつだったり規則的なやつならループさせて一つづつ入れてけ。
まったくのランダムな数で決まった数なんですよ。 ちなみに118は僕じゃないです。
だったらfor文で回しながらランダムで生成していけばいいんでないの? そーゆー意味じゃなく?
>>123 決まった数ってランダムで生成できるの?
書き方がおかしかったです_| ̄|○ 98個の値は決まった値なんですが、値に規則性はまったくないです。
>>125 たった98個ならコードで書けばいいじゃん。
ためらう理由がわからない。
98は結構面倒だろ・・・ やっぱ外部ファイルから読む込むのが楽だろうね
面倒かな? ソースとして目ざわりだとは思うけど。
データが二度と変わらないのならソース埋め込みでも許せるが、 そっくり別パターンと入れ替えたいとかいう用途なら絶対外部ファイル。
>113 ん〜とだな、VBの勉強も大事だがtext editorを使いこなす事や、 Excelで演算子や関数を利用して思う様にtextを作成する術を 覚えておくといいかもしれん。 さすれば98個の値が1万個になろうが、またそれをどうしてもcode内に記述せねばならんとしても、 1万個の値が何らかの形にデータ化されているなら慌てる必要は全くなくなる。
結局何に使うんだ?その98個の値。 98個と言えば確か間寛平の一発ギャグ数だったなぁ。アヘアヘ
98といえばPC-9801に決まってるじゃないか。
Win98は無視ですかそうですか
えっとMMOの経験値テーブルです。 1からはじまって最高レベルが99なので98個でした(;´д`)ゞ
ググッたらわかりました。
>>134 あーなるほど。
つまりスライム数匹倒したら
プレーヤーのレベルが低い時はレベルが上がり、
レベルが高い時はレベルが上がらないようにしたいわけだな。
じゃぁレベルが高ければ高いほど次のレベルに上がらないように
経験値を多くすれば良い。
iでループまわして
Exp(i)=i^2
Exp(i)=Exp(i-1)+a 'aは定数
見たいにすればいいんでない?
やっぱ直接コードで書くか、外部ファイルしかないだろ。 規則性無いものを規則的に打ち込もうとするのがそもそも間違い。
113がなんで悩んでるのかわからない。 データのファイルがあれば、代入するコードを別のプログラムで生成できるし。
144 :
デフォルトの名無しさん :04/07/24 13:04
テキストボックスの文字列を「全て選択」したいのですが、 32768バイト以上になると正常な動作をしません。 オーバーフローだと思うのですが、 どなたか解決法教えていただけないでしょうか。 ちなみに、今は下のように書いてます。 text1.SelStart = 0 text1.SelLength = Len(text1.Text) よろしくお願いします。
>>144 そもそもテキストボックスは95系では長さの制限があるわけだが。HELP参照すべし。
>>145 回答ありがとうございます。
>>144 で32768と表記しましたが、65536みたいです。
失礼しました。
ヘルプで見つけることはできませんでしたが、
何かで64kBと聞いたことがあります。
(64kBはWindowsのメモ帳の最大サイズだった気もしますが…)
いずれにしても、テキストボックスの長さの制限は
65536Bよりも大きいと思います。
故に、それに対応したコーディングが必要と思っております。
何かいい方法ご存知でしたらお願いいたします。
どうしてもテキストボックスを使わないといけないの?
>>149 Windowsのメモ帳よりも多機能なメモ帳を作ろうとしております。
文字を入力するエリアとしてテキストボックスを使う必要があります。
>>150 APIですか。
それも視野に入れて検索してみたのですが、
適当なページを見つけることができませんでしたので、
参考になりそうなURLを教えていただけませんでしょうか。
お願いいたします。
>>151 どんな機能つけるんだい?
>>151 試してないけどリッチテキストボックスを使ってみたら?
>>153 必要な機能が思いつき次第、随時拡張という感じですので、
今は基本枠を造っている段階です。
現時点では、文字数のカウント機能を付加させようと思っております。
DoCoMoの携帯にメール送る際に必要性を感じたためです。
Wordでやらずに、わざわざ作るのは、
Wordに貼り付けたりすると、余計なデータが付加されたりし、
文章の体裁が意図しない形式になる恐れがあるためです。
この前も、改行の部分がおかしくなり、変なメールを送ってしまいました…
(たいした機能でなくてすみません…)
>>154 前述のように、リッチテキストの形式を避けたいため、
願わくば、テキストボックスを使用したいところであります。
・・・
という建前もありますが、恥ずかしながら、プログラマとして
経験が浅いため、さしあたり、テキストボックスを使おうかと…
また、追加したコンポーネントを使用すると、
VBの開発環境が無いPC等で使用すると、
別途コンポーネントを入れる必要がありそうなので…
>>155 リッチテキストボックスでもテキスト形式で保存できるよ。
>>156 保存形式よりも、その場での処理内容のほうを問題視しております。
コピー・ペーストの際に、不要なリッチテキストの形式を
付加されると、不都合な場合があるものでして…
(Outlook等、リッチテキストに対応したメールソフトとか…)
>>154 , 156
リッチテキストボックスで、同様の方法ですべて選択
してみたところ、すべて選択することに成功しました。
リッチテキストボックスは普通のテキストボックスよりも
大きい数値を扱えるように設計されているのですね。
しかしながら、普通のテキストボックスでも
なんとかできないものかと考えてしまいます。
何かいい方法はないものでしょうか?
無駄な努力は止めた方がいい。 他の有意義なことに力を注ごう。
>>158 それもそうですね…
いっそのこと、リッチテキストを採用して、
メモ帳ではなく、ワードパッドくらいのものでも…
(初心者にできるかどうか…)
>>159 やっぱり言われてしまいましたか。
でも、無いなら無いとはっきりした意見を聞けたので、
もう割り切ってやるしかないですね。
回答ありがとうございます。
リッチテキストボックスを使用した際に、
VBの開発環境が無いPCで動かそうとしたとき、
そのPCに、何かコンポーネントのモジュールのようなもの
(RICHTXT32.OCX)を追加する必要はあるのでしょうか?
また、それを入手/追加することは容易でしょうか?
>>160 入門書くらい買って来い。インストーラーの作り方書いてるやつもな。
標準のウイザードよりもVSIを入れるのがおすすめ。
ランタイムは他からダウンロードさせるのが今の流行
>>162 うわぁ、目の前で言われたら殴ってるかも
>>161 VSIの話がでてくるとなると、コンパイルしたものを
コピーしただけでは動作しないようですね。
参考にします。ありがとうございました。
>>165 レポート作るのはちょっと厳しそうです…
ごめんなさい(^^;)
作成する際の資料としては有用そうです。
リンク、ありがとうございます。
すいません。また教えて下さい。 ようやくプログラムも完成し、いざディストリビューションウィザードを 使用して配布。。。と思ったのですが、、、 無難にインストールできるマシンとそうでないものがあり困ってます。 出来ない場合、エラーになるのですが、 ['path not found] とメッセージが表示されます。 開発環境はWidowsXP_pro / vb6.0です。 インストールを試みた他のマシンは全てWindowsXP_home or Pro のマシンです。 エラーになるかどうかは特に法則などないようです。
>>168 VSIにしましょう。
また、エラーの法則は全角文字のユーザとかのオチはありませんか?
どーしてMSはVB標準インストーラをVBで作ったんだろ 「Visual C++ は Visual C++ によって作成されました」 みたいなノリかな
「Visual Basic は Visual Basic によって作成されていません」
173 :
デフォルトの名無しさん :04/07/26 10:04
DelphiはDelphiによって作成されています。
174 :
デフォルトの名無しさん :04/07/26 11:10
GetDiskFreeSpaceとGetDiskFreeSpaceEXがありますが GetDiskFreeSpaceでGetDiskFreeSpaceEXの働きをさせようと 思ったらどうすればいいでしょうか?
>>169 ありがとうございました。m(_ _)m
すいません、無知で・・・。
対象PCが全角ユーザーでした_| ̄|O
177 :
デフォルトの名無しさん :04/07/26 13:04
majide
>>174 GetDiskFreeSpaceでGetDiskFreeSpaceExの働きをさせられないからGetDiskFreeSpaceExができたんだろ
179 :
デフォルトの名無しさん :04/07/26 13:17
じゃあどちらも使わずにGetDiskFreeSpaceExに変わる 方法はないの?
>>179 単に「ないの?」と聞かれたらあるよ、としか答えようがないんだが?
デバイス直接叩いて情報集めるとかね。VBでできるかどうか知らんが。
できる方法があるのにそれを使わない方法を聞きたいのなら、背景事情くらい書けや。
でないと↑のような回答しか来ないぞ。
181 :
デフォルトの名無しさん :04/07/26 15:32
グリッドを横スクールさせた場合、左端のセルが 何列目なのか知るには どうしたらいいのでしょうか?
何を使ってるんだよ
183 :
デフォルトの名無しさん :04/07/26 15:58
MSFlexGrid
VB6で開発しております。 実行時エラー28 スタック領域が不足しています。 というエラーが出るのですが、対処法をご存知の方おられませんか? MSの頁を見て、ネスト階層や再帰処理をチェックしましたが、 問題ないようです。 他にチェックする箇所があれば教えていただければ幸いです。 よろしくお願いします。
関数の引数の数多すぎないか? もしくはでか過ぎないか。
あと、関数内で宣言されている自動変数が でか過ぎるとか・・・
>>185 落ちる箇所は単なるサブプロシージャ内ですので、引数はありません。
そのサブプロシージャ内で
LABEL1.caption = TEXT1.text
という箇所があるのですが、必ずココで落ちます。
185=187 追加 プロシージャ内は変数はstring型2個で LABEL1.caption = TEXT1.text は変数宣言の直後です。
>>188 エラーが出たとき、そのString型に入っている変数の容量は確認してみた?
>>189 容量ですか。
中身は確認しましたが、容量はどうやって確認すればよろしいのでしょうか?
中身のほうは問題なく初期化されていました。
追加情報です。
エラーが発生したあと、デバッグボタンを押し、
F5を押すと問題なく実行できます。
さらに、EXEを作って実行すると、
同じタイミングで落ちます。
Doevents LABEL1.caption = TEXT1.text じゃ駄目なのか
Doeventsを加えたらそこで落ちました。
>>192 何かDLLとか使ってメモリ破壊してるんでは?
DLLは多数使っています。 が、問題の位置まではDLLの関数は通過してないようです。 コメントに「絶対テストしてない」って書いてるの見つけちゃった(´Д`;)
>>190 「問題なく」とかいう文言がすげー気になるんだけど、
お前さん的に問題があるかないかはどうでもよくて、プログラム的に問題があるかが問題なの。
スタック不足ってことはメモリを食いつぶしてる可能性が高いわけだから、
>>189 をきちんと確認したほうがいいと思うよ。
お前さんの意図通りに、1MB近い文字列入ってるとかいうパターンじゃないよね?
stringって2ギガまで入るんじゃなかったっけ?
stringの仕様と実際に自動変数用にスタックが残ってるかどうかは別
>194 そのDLLの内部にある関数が再帰だとかで スタック使いまくりという可能性は?
可能ならDLL部分とか、怪しそうな部分を削除して動作確認するか、 問題部分だけを抜き出したテストプログラムを作るとかしたほうが良いのでは? 誰かにサポートを依頼するにしても、単純化したプログラなら問題も判り易いと思う。
いっそのこと捨てちゃえ 大々的にリファクタリングだ
LABEL1とTEXT1のChangeイベントでお互い呼び合っているとか、 そんなんじゃないの?
202 :
デフォルトの名無しさん :04/07/26 18:59
>>189 ,195
エラーが発生したのは変数宣言直後です。
イミディエットでLenBで確認したところ0でした。
>>198 DLLファイルを全部移動させて、関数内でセットする値をイミディエットで設定して
該当箇所を飛ばしても同現象が発生しましたので、
DLL内は問題ないと思います。
185=202
>>202 コールスタック確認した?
たぶん何か値を変更したときにイベントが発生して、そのイベントの中から何か呼んで
ってのを繰り返してスタック食いつぶしたんだと思うよ。
再帰以外でスタック食いつぶすことなんてあんまり無いよ。やたらでかい構造体使って
出てくるかなって程度。
文字列はスタックとは別の領域に確保されるはずだから、あんまり気にしなくてもいいと思う。
たぶん。
>>204 VBだと呼出し履歴ってやつですね。
main
↓
[非Basicコード]
↓
フォームロード
↓
[非Basicコード]
↓
OKボタンイベント
↓
サブプロシージャ
↓
別のサブプロシージャ ←ここで落ちる
フォームをモーダルで開いているのでスタートのmainからずっと続いています。
この作り自体良くないですか?
上で185って書いてるのは全部184ですねm_ _m
自己解決です。 スプレッドに列を追加していたのですが、 ソース側で数値型の列に空文字 "" をセットして初期化していました。 ↓こんな感じです。 Spread1.SetText COL, i, "" COLを追加分ずらして、ちゃんと初期化するようにしたらうまくいきました。 みなさんの意見も場所を絞り込むのに参考になりました。 ありがとうございました。 追記 これはスプレッドのバグって考えていいのかな? スタック消費して落さないし。。。
ある箇所に特定の文字が入っている場合は弾きたいのですが if mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" or mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" then..... 上記のように記述した時「abXcY」などと入ってくると素通りしてしまいます。 andとorの使い方がおかしいのは分かっているのですが、幾ら考えても分かりません。 都合でフォーマットが使えないので、1文字ずつチェックするしかない?のですが・・・・・ 本当に初歩的な質問ですが、よろしくお願いします。
>>207 適用したい条件ってのがよくわからんが、
str="abXcY"の場合、その条件式はFalseになるよ。
>>207 一般的に、論理演算子は最後に処理されます。
また、And と Or だと、Andが優先されます。
従って、この場合だと、
mid(str, 3, 1) <> "X" → False
mid(str, 3, 1) <> "Y" → True
mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" → False
mid(str, 5, 1) <> "X" → True
mid(str, 5, 1) <> "Y" → False
mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" → False
ですから、演算結果はFalseになります。
対処方法としては、全部 Or にするのが楽かな。
カッコ付けた方が楽じゃない?
211 :
デフォルトの名無しさん :04/07/26 21:43
>>207 "X"と"Y"をそれぞれ
InStr関数でチェックしていった方が楽じゃないか?
とりあえず全部ORじゃだめなの?
mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" → 常に偽 mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" → 常に偽 偽 or 偽 でこの条件式は 恒偽
>>213 あ、嘘だ。
<>と=見間違えてた。
スマソ
さすがVB房は論理演算もできないのか・・・・
VBにかぎったことでは無かろう
ほんとに取り出したい条件が何かはよくわからんが、現状では、 if mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" or mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" then strは"abXcY"でない else strは"abXcY"である endif じゃないですか?
たくさんのレスありがとうございます。
適用したい条件は「3文字目と5文字目がXかYの時は真」です。
>>209 氏のレスの
>mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" → False
>mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y" → False
がFalseになるのは分かるのですが、残りがどうしてそうなるのか分かりません・・・・
全部orにすると「abXcY」で真になるような。
括弧で括ると
if (mid(str, 3, 1) <> "X" or mid(str, 3, 1) <> "Y") or
(mid(str, 5, 1) <> "X" or mid(str, 5, 1) <> "Y") then
こうなるのでしょうか
>>215 独学なので論理演算の意味が分からない・・・・・だめぽ。
連続すみません。 分かりにくいですね。 3文字目と5文字目のどちらかにXとYが含まれている場合は真、です。
if not (mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" or mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y") then こうだ
3文字目と5文字目がXかYの時は真 3文字目と5文字目のどちらかにXとYが含まれている場合は真 これらは違うはずだが?
>>222 後者です・・・・・その通りです。
3文字目:X→真
3文字目:Y→真
5文字目:X→真
5文字目:Y→真
これで正しいはず・・・・・何が何だかil||li _| ̄|○ il||li
依頼者が要求仕様を分かってないんじゃ たのまれても作れる訳ないよ
3文字目と5文字目のどちらかにXとYが含まれている場合は真-------- if mid(str, 3, 1) = "X" or mid(str, 3, 1) = "Y" or mid(str, 5, 1) = "X" or mid(str, 5, 1) = "Y") then 3文字目と5文字目がXかYの時は真-------- if not (mid(str, 3, 1) <> "X" and mid(str, 3, 1) <> "Y" or mid(str, 5, 1) <> "X" and mid(str, 5, 1) <> "Y") then あるいは、 if (mid(str, 3, 1) = "X" or mid(str, 3, 1) = "Y") and (mid(str, 5, 1) = "X" or mid(str, 5, 1) = "Y") then
>>224 仰る通りで・・・・情けない限りです。
>>225 を参考に少し頭を冷やして考えてみたいと思います。
板汚し本当に失礼しました。
気にしないでまた来てね
228 :
デフォルトの名無しさん :04/07/27 10:43
ツールバーにある 上下に並べて表示とかは どうすればいいのでしょうか?
>>228 おまえが知りたいのはArrangeメソッドのことか?
basicで二次方程式の解を求めるプログラムを作り、動作させたいんですが、 何か書くためのソフトは必要なのでしょうか?メモ帳で書けますか?
231 :
デフォルトの名無しさん :04/07/27 13:11
メモ帳に書くなら 必要なのはシャーペンだな(w
232 :
デフォルトの名無しさん :04/07/27 14:23
グラフを表示するのに おすすめな OCXなどは どこのやつですか?
234 :
デフォルトの名無しさん :04/07/27 16:53
ADOを使ってmdbにアクセスしています。 アプリ起動時にコネクションを張って、終了時に切断と言う方法です。 SQLの実行は関数でその中でレコードセットを取得しています。 select文を実行してレコードセットに保存後、同じ処理を再度行うと エラーで落ちます。エラーコードは-5031です。 insert文は何度行っても落ちません。(同じ関数でSQLが違うだけ) 何か制限などがあるのでしょうか? select文で作成したレコードセットはセットしなおし時に何かしないといけないとか。 ご教授お願いします。
235 :
デフォルトの名無しさん :04/07/27 17:17
UPDATEしてるのか?
236 :
デフォルトの名無しさん :04/07/27 17:26
UPDATEってSQLのことですか? Update文は使っていません。 Updateメソッドのことですか? 使用していません。
VBのテキストボックスについて質問したいのですが、 現在、デバッグプログラムの為に、 処理データを随時テキストボックスに表示させるという事をやっています。 所が、テキストボックスの文字数が大きくなると 表示速度がかなり遅くなってしまいます。 (場合によっては、メインの処理がタイムアウトしてしまいます) 現在やってるのは、 各関数での処理中は、 string型の変数でまとめて その処理の最後でtext=text+str といった方法でまとめて貼り付けています。 なんとかして、早く出来る方法はないでしょうか?
238 :
デフォルトの名無しさん :04/07/27 18:36
Updateメソッドを使用してみろ。
2〜5個のスペースで区切られた数値の羅列のテキストを csvみたいに一個のカンマで区切るように直すには どう書けばいいのでせう? ちなみにVB6.0です。
Microsoft VBScript Regular Expressionsを参照設定して Dim r As New RegExp r.Pattern = " {2,5}" Debug.Print r.Replace("0123 4567", ",")
>>240 当方、今日生まれて初めてVB触った人間でして。
レスもらっといて何ですが全然わかりませぬ。
もうちっとわかりやすく教えてもらえませんか?
後ひょっとしたら質問が誤解されるかもしれないので
言い直すと、
・データは大体100行5列
・列の区切りがスペース2〜5個(ランダム)
で、このスペースを1個のカンマに直したいと。
こんな意味不明な仕様のテキスト作ったのやつが悪いのか・・・
「正規表現」でぐぐれ
ぐぐってみた。 なるほど。こんなんあったのか。 これで挑んでみます。 どもでした。
ディレクトリの場合は c:\hoge ファイルの場合は c:\hoge\hoge.txt といった文字列が与えられたとき パスがディレクトリを指しているのか, ファイル名を指しているのか判断するには どうしたらよいでしょうか?
247 :
デフォルトの名無しさん :04/07/28 00:00
>>246 質問をもう少し明確にする必要があると思う。
MSのパスの表現の文法上の話をしているのか、(つまり、パス名そのものに
フォルダとファイルを区別する仕組みが存在しているのかどうかを聞いているのか)
それとも与えられた文字列があるシステム上で指示する実態がファイルなのか
フォルダなのかを識別する方法があるのかどうかでは答えが違う。
前者はない。後者はある。
>>247 すいません,後者の方ですね.
パスが指している物の実態がファイルなのかディレクトリなのか判別したいのです.
249 :
デフォルトの名無しさん :04/07/28 00:49
あるクラスAのプロパティとしてクラスBをいくつも(配列として)使いたいのですが、 getやletをどのように記述すればいいのでしょうか? そもそもプロパティにしようとしているのが間違いなのでしょうか? どうかご教授お願いします。
Private m_array() As ClassB '(要ReDim) Public Property Get B(ByVal Index As Integer) As ClassB Set B = m_array(Index) End Property Public Property Set B(ByVal Index As Integer, ByVal NewValue As ClassB) Set m_array(Index) = NewValue End Property
>>251 ありがとうございます。おかげで解決しました。
>.252
collectionを良く知らないので、使うことを思いつきもしませんでした…。
す、すいません自分超初心者なんですが 別の人のプログラム(RS232Cを使って機械を制御する)を書き換えろって言われまして 修正しているのですが 実行時エラー'424' オブジェクトが必要です と出てどうにも行き詰ってしまいました。 デバッグを押すと通信ポートの初期化で突っかかってしまいます。 Private Sub Form_Load() MSComm1.CommPort = 1 <-ココ MSComm1.Settings = "2400,N,8,1" MSComm1.InputLen = 0 MSComm1.PortOpen = True LabAR.Caption = "Auto Repeat - OFF" StartFormat TextHand.Text = "Left" End Sub 是非ヒントをください。m(_ _)m
>>254 スマソ・・・VB良くしらんが、多分こう?
MSComm1.CommPort = "COM1"
あ、全然違った
257 :
デフォルトの名無しさん :04/07/28 12:40
>実行時エラー'424' オブジェクトが必要です 2ch風に翻訳すると、 「MSComm1なんて知るかヴォケ」
むしろ「ぬるぽ」
259 :
デフォルトの名無しさん :04/07/28 13:04
MSComm1関係をインストールしろよ となるのかな?
とりあえず、ヘルプで424を引け。 で、結構パターンがあるから、自分で潰せ。
>>254 ・一度フォームからMSComm1を削除。
・プロジェクト-コンポーネントを開き、Microsoft Comm Control のチェックを消してOK。
・プロジェクト-コンポーネントを開き、Microsoft Comm Control のチェックを付け直してOK。
・フォームにMSCommを設置。(名前はMSComm1)
これでダメならダメかもなぁ。
262 :
デフォルトの名無しさん :04/07/28 17:04
ありがとうございますm(_ _;)m 何とか解決しました。 お手数おかけしました
265 :
デフォルトの名無しさん :04/07/28 18:03
質問者一同 (w
lll
267 :
デフォルトの名無しさん :04/07/28 18:25
eVB で PocketIEを起動させたいのですが、どうすれば良いか全然わかりません。 どなたかご教授願います。
268 :
デフォルトの名無しさん :04/07/28 19:24
最小化で起動させるには、どうしたらいいのでしょうか?
/min
270 :
デフォルトの名無しさん :04/07/28 19:41
>>269 複数あるFormのうち、一つだけを 最小化したいのですが。
271 :
ひみつの検疫さん :2024/12/21(土) 11:11:11 ID:MarkedRes
汚染を除去しました。
273 :
デフォルトの名無しさん :04/07/28 21:00
VB6ですがlabelの文字にKeypressで押した文字を 一文字ずつ上書きせずに増やすにはどうすればいいでしょう? ラベル→| ahy | keypress でaを入力 | ahya |
>>273 らべる.きゃぷしょん = らべる.きゃぷしょん & えー
ありがとうございます 素人な質問ですみませんでした。・゚・(ノ∀`)・゚・。
276 :
デフォルトの名無しさん :04/07/29 10:55
配列が どれぐらいまであるか 調べるにはどうしたらいいのでしょうか? 例 dim a as variant a = split("abc,def,123", ",") の場合、 2 まである(a(2)まで)と いうのが知りたい。
277 :
デフォルトの名無しさん :04/07/29 11:02
ココって VBS.LoveLetter.Aに感染してますか?
>>277 スクリプトの一部が書き込まれているために反応しているだけ
いまごろ何いってんの?って感じだよな。
なにも気にならない人よりはマシかもね
For i = LBound(a) To UBound(a)
284 :
デフォルトの名無しさん :04/07/29 13:15
DAO3.6で SELECT max(項目) From tableA; というSQLを流すと 「FROM 句の構文エラーです。」 となります。 max とか使えないのでしょうか?
285 :
デフォルトの名無しさん :04/07/29 13:17
あ、 SELECT 項目 From tableA; でも同様のエラーが出ました。 テーブル名とかがダメなのかなぁ? 使用できないテーブル名とかありますでしょうか?
セミコロンいらんだろ? SQL*PLUSとかの文区切りとしてのセミコロンだよな。
>>286 SQL文の終端にもセミコロンを要るだろ?
>>287 元質問者?
あんた、私が書いたことを試したの?
289 :
元質問者( :04/07/29 15:44
290 :
デフォルトの名無しさん :04/07/29 15:46
テーブル名を変更したら、問題がなくなった。 セミコロンは、関係ない。
291 :
デフォルトの名無しさん :04/07/29 16:55
■を押して、終了させると VB6自体が終了してしまいます。 なぜなんでしょうねぇ。
●を使いなさい。
DLLとかを使っていてなんかやっちゃってるからとか、 さぶクラス化しておいて、後始末せずに終わってるからとか。
こんにちは VB6でコンソールプログラムを作っているのですが、 コンパイルしたバイナリをコンコールから呼び出しても 別窓が開いてしまいます。 VB5の時はたしかバイナリエディタで0xDCかどこかを書き換えれば よかったように記憶してるんですが、VB6では何か対応策無いでしょうか? よろしくお願いします
295 :
デフォルトの名無しさん :04/07/29 19:23
DAO3.6 ですが、SELECTするときに "Axx0001"のような項目の Axxの中で 右4桁が最大の レコードを取得したいのですが どのようにすればいいのでしょうか? 例 Axx001 Axv002 Axx012 Axs030 Axs080 このとき Axxならば Axx012 のレコード Axsならば、Axs080のレコード を抽出できるようにしたいのです。
SELECT * FROM テーブル WHERE 項目 = (select max(項目) from テーブル where 項目 like 'Axx%')
>>294 /subsystem:console
じゃないかな?
うP
300 :
デフォルトの名無しさん :04/07/30 00:42
VBCCEで作ったプログラムが保存できません。 実行すら出来ないし・・・ 一体どうすればいいんでしょうか。 OSはXPです
いや、そらそうなんですけど… それができないから悩んでるわけで… 保存はいいとしても、実行が出来ないのはツライっす。 どなたか対処法教えてください…orz
>>302 何をどうやってこうなるはずなのにこうなって・・・などの説明をどうぞ。
今の状態だと、馬鹿につける薬は無いとしか。
自分プログラムは触ったばっかりの初心者でして、 何もわからないからとりあえず解説ページにある通り「project1 - UserControl1 (Code)」というウィンドウの中に Private Sub UserControl_Initialize() MsgBox "hello world" End Sub と書き込んで実行ボタン押したんですけど Control projects be run alone. Use File/Add Project to add a Standard Exe project; close the User Control design window; and then place a test instance of the control on Form1 というエラーしか表示されなかったんです。 その解説ページにはどういうふうになるかは自分の目で確認してくださいと書いていたので、 最初はこれでいいのかなとも思ったんですけど、 表示されるときにエラー音とかなるし「hello world」なんてどこにも出てこないしで多分これは違うんだろうなと… 説明不足すみませんでした。
>>304 ・その解説ページを晒すか別のサイトで勉強するか本でも買ってくるかしろ。
・英語は読めるか?エラーメッセージを辞書片手でもいいから読んでみよ。
>>305 ご指摘ありがとうございます。
エラーの英文よく読んだら解決しました。
307 :
デフォルトの名無しさん :04/07/30 09:15
ぷっ ま、たいていは、読んでも わからん場合、質問するんだけどな。
308 :
デフォルトの名無しさん :04/07/30 09:21
ご教授お願いします。 sYear = Right$(Space$(4) & Year(vDate), 4) とすると "プロジェクトまたはライブラリが見つかりません" というエラーが発生します。 傍から観るとあほらしい事かもしれませんが 本気で訳がわからず困っています。 よろしくお願いします。
310 :
デフォルトの名無しさん :04/07/30 10:09
>>308 Dim sYear, vDate As Variant
sYear = Right$(Space$(4) & Year(vDate), 4)
とすると 無問題。
312 :
デフォルトの名無しさん :04/07/30 10:39
VB6でソースをエディットする個所で、インテリマウスのインテリが使えるようにするには どうしたらいいのでしょうか?
313 :
デフォルトの名無しさん :04/07/30 11:26
どこでもホイール、でぐぐる
314 :
デフォルトの名無しさん :04/07/30 11:35
こりゃ便利だ。
315 :
デフォルトの名無しさん :04/07/30 11:40
みんなー 回答ありがとう! (多質問のレスにて)
>>310 なんで sYear,のVariant宣言は省略してるのに後ろのvDateには書いてるの?
317 :
デフォルトの名無しさん :04/07/30 14:51
省略すれば バリアント型。 しかし、宣言しないと エラーになるようなので、とりあえず バリアントと宣言するために 書いただけ。 つーか 後ろのも省略できたのかな? ただ単に知らなかっただけだよな。
318 :
デフォルトの名無しさん :04/07/30 15:07
はじめまして、こんにちは。 現在VB6で社内のクライアントのソフトウエアー稼働率を調べるソフトを計画中でして 以下について分からずツマズイテます。 ?実行中のソフト(電卓やワード。・エクセル)をVBで検出できないか? 教えてください、よろしくお願いします。
320 :
デフォルトの名無しさん :04/07/30 15:32
>>319 どうもありがとう御座いました。
使えそうです!
しかしOutlook Expressが認識しない、、、考えてみます。
321 :
デフォルトの名無しさん :04/07/30 16:10
Formに貼り付けた コントロールをいくつかまとめて グループ化なんてできませんか?
>>321 ユーザーコントロールにするとか
ピクチャーボックスの上に置くとかフレームコントロールの中に置くとか
323 :
デフォルトの名無しさん :04/07/30 19:09
Formが すでに表示しているかどうか知るには、どうしたらいいの?
>>323 FormsでLoadされているモノをあつめて表示中かどうかを見る
326 :
デフォルトの名無しさん :04/07/31 13:49
つまりこういうことだろ? >なんで sYear,のVariant宣言は省略してるのに後ろのvDateには書いてるの?
328 :
デフォルトの名無しさん :04/07/31 14:36
どちらにしろしょうもないので、次の質問ドゾー
>>324 具体的にコーディングは、どうすればいいのでしょうか?
AというFormが 表示されているかどうか知りたいのです。
すでに表示されてるものに対して A.Showとかしても問題は ないかな?
表示していない場合は、そのAに貼り付けた テキストボックスとかに
値をセットしようとするとエラーになるので、表示されていないときは、
セットしないように しようかと思うのです。
330 :
デフォルトの名無しさん :04/07/31 17:00
ラベル表示についてなんですが、 1 表示するデータ 単位 という 内容のものがあったとき 一つのラベルで 3つ分を 入れたらいいのか もしくは、それぞれ 3つに 分けたほうがいいのでしょうか? 表示するデータだけ 随時 変わるのです。 ラベル3つにしたほうが 簡単そうですが、量が多いので ラベルの量とメモリの関係が気になります。 ラベルを1つにすると 表示がズレそうで、余計な気を使いそうです。 どちらに気を使うほうがいいでしょうか?
>>330 量による。
多いのであれば、UIから見直せ。
332 :
デフォルトの名無しさん :04/07/31 17:13
表示だけだからUIは、関係ないと思うが?
…表示もUIのうち。 メモリを圧迫するほどのラベルの量を気にしないといけないほどの 表示量を出すようなユーザーインターフェイスは再考の余地ありと思うが?
コントロールは255個まで配置可能。 コントロール配列にすれば255以上表示可能。 量が多いとリソース不足になる。開発環境がXPや2000で、実行環境が 98やMeの場合、最終段階で悲惨な目に遭うことがある。 1項目3種類の情報を複数項目表示したいなら、グリッドつかったほうがいいかも。
>323 ヒントだけ出してやる。 AというFormが表示された時に「何か」が変わる仕掛けをしておいて、 他からはその「何か」が変わっているかどうかを見る。 >330 要は見た目揃えるかどうか、だと思うがどうよ? ただ数が多いんなら上でも出てるけど、ListViewなり 変更不可にしたTextBoxに整形して表示するなりした方が 見やすくなると思うぞ。
>>323 visibleじゃだめなんだ?
loadはしてそうだもんな
>>323 オリも、最初の質問だけだったらVisibleで良いとおもったんだが
多分
>>323 はForm_Loadイベントの発生条件とフォームの有効期間をちゃんと理解してない希ガス
338 :
デフォルトの名無しさん :04/08/01 11:26
>>330 1つのラベルでも、1つのテキストでもいいが
表示する項目の文字列の加工方法で切り抜けられるんじゃない?
各項目の最大表示桁数(文字数)を揃えればokだと思うが
>323 Formsコレクションを調べれば、LoadされているFormが分かる。 FormのVisibleプロパティを調べれば、表示されているFormがわかる。
>>330 文字列が全部全角文字か、動作環境がXPなら
>>338 の方法でもOK。
動作環境がXP以外で半角文字も使うなら固定ピッチフォントにしないとズレる場合があるので注意。
漏れだったら、Captionの値が固定のLabelをひとつのコントロール配列にして、
Captionの値が変化するLabelも別名のコントロール配列にするかな。
そもそもラベル位いくら貼り付けたってメモリ消費なんて知れたもののような 気がするけど。 Wまあ、in9x環境だと、フォームに貼れるコントロールの上限が結構低かったような 記憶もあるけど。 どうしても気になるなら、フォームかピクチャーボックスに自分で文字 ドローするのが一番根本的な解決だと思う。 VBならAutoRedrawをTrueにしとけば、必要なタイミングで必要な分だけ 書き足すだけでいいからコードも大して大掛かりにはならないし。 もちろんAutoRedrawの裏画面が消費するメモリも気になるならFalseにして OnPaintで全部描画するようにすればいい。
比較的長時間かかる処理を行っている間、 「処理中です」のメッセージをダイアログの様に 表示しておくにはどうしたらよいでしょうか? ダイアログにはキャンセルボタンを配置し、 処理を途中で中止できるとなお良いのですが。
>>342 Modeless でキャンセルボタンをもつフォームを表示して、キャンセルボタンが押されたら、どっかのフラグを立てる。
フォームを表示した側は、処理中に適当なタイミングでフラグを見て立ってたら処理を中止する。
>>342 悪名高いDoEvents の使い方調べるとよろし
345 :
はちみつ六郎 :04/08/01 22:06
リストボックスのHeightプロパティをフォームのリサイズで変えようとすると、 一行ごとの高さで変わっていくためスムーズに見えません… 行の途中までしか見えなくてもいいのでスムーズにリサイズできるようにはならないでしょうか?
347 :
はちみつ六郎 :04/08/01 23:48
>>346 勉強不足でした、申し訳ありません。
ありがとうございます。
>>343-344 サンクスです。
重ねて初歩的な質問で申し訳ないのですが、
モードレスでフォームを表示する方法についてもう少し。
処理開始の直前にフォームをShowメソッド(引数なし)で呼び出して表示し、
処理終了後にUnloadしているのですが、フォームは表示され、処理も中断
せずに行われるのですが、なぜかフォームの中止ボタンが押せない状態に
なってしまいます(タイトルバーの×ボタンも押下不可能)。
まだ何か足りない処理があるのでしょうか?
>>348 処理ループの中にDoEventsが入ってないとか?
>>349 入ってはいたのですが、ロジック的にまずい位置に…。
お騒がせしました。無事解決です。
さすがはVB房
>>336 ,337
unload された場合に そのFormに貼り付けてあるコントロールに
値をセットしようとするとエラーになるので、unloadの時は、
処理を飛ばしたかったのです。
Formsコレクションに入ってれば Loadされているのですね?
>>353 これから、それをどうやってやるのか調べるところです。
お客さんからVBのソース等一式もらったんですが、 VB4かVB5で作ったと思う・・・というだけで詳細が不明です。 どのようにすれば、作成したVBのバージョンが分かるのでしょうか? どなたか教えていただけませんか?
作成されたVBのバージョンを知る意味ってあるの? VB4〜6って関数とか大きく違ったっけ?
357 :
デフォルトの名無しさん :04/08/02 13:27
>>355 VB4で動けば VB4は OK
VB5で動けば VB5は OK
両方OKだったらVB5で開発。
ありがとうございました
*.VBPファイルをメモ帳ででも覗けばわかるかも。 意味ないけど。
6は判るんだけどね。 5にない1行があるから、6->5の戻しはその行を削除しないと5側でエラー。 あとは、参照してるコントロールとかのバージョンで類推するぐらいかな?
361 :
デフォルトの名無しさん :04/08/02 16:05
いきなり上から今更VB6.0でアプリを 開発するように言われました。 急ぎの話なんで 3日ぐらいでVBを理解したいんですけど、 これは読んどけって本はありますか? 向こうは俺に任せれば大丈夫だと勝手に思いこんでるみたいですが VBは実は経験ありません。 経験のある言語 C,C++,Java.COBOL,Perl
>>361 Windowsアプリの経験はあるの?VC++とか。
あるなら、つどこのすれで聞けば問題ない
363 :
デフォルトの名無しさん :04/08/02 16:11
>>361 真っ当な問題解決としては、正直にVBの経験がありませんと告げる事だ
366 :
デフォルトの名無しさん :04/08/02 16:37
>>361 じゃ そこで じゃんじゃん質問してくれ。
既出、なんでもOK。
見かけて、答えられそうだったら回答してあげる。
>>365 告げたら
君なら出来ると言われました(w
Cとかの経験が、生Cなのが、VCなのかで全然話が違う。 Windowsアプリの開発経験があれば、VBはそれほど難しくは無い。 それが無い場合、イベント駆動式とかを理解できれば多分大丈夫。
369 :
デフォルトの名無しさん :04/08/02 17:06
できないと言って、仕事を押し付ける人はいない。 押し付けるときは、ヨイショしまくりが当然。
370 :
デフォルトの名無しさん :04/08/02 17:17
>>368 CはUNIXメインで使ってたんで
VCはやったことないです。
イベントハンドラな言語は
DelphiでWindowsアプリ作ったことあります。
じゃあ結構大丈夫かも。
でも今更なんで6.0なんだ!!!!
.NETやらせろおおおお。
Delphiやったなら3日もいらねー
372 :
デフォルトの名無しさん :04/08/02 17:21
>>371 一応もらったの
明日から3日なんで。
結構楽できそうな気がしてきた。
ありがとうございました。
>>370 じゃあ、簡単にポイントだけ。
・変数宣言は強制するようにオプションをきちんと設定する。
・普通のプログラムと同じようにモジュール化をして、小さい関数を心がける。
・関数の引数はデフォルトで参照渡しなので注意。
・基本的にはVBで出来ること、Windowsでできることをやる。
当然の話のように思われるかもしれないが、無理仕様は受けないというのが正解なので。
・あくまでVBはVBでできることを行う箱庭ツールだということを心がける。
PowerBuilderは糞
375 :
デフォルトの名無しさん :04/08/02 18:04
>>374 オラクルがらみは、作りやすいぞ。
といっても、クソには 近いけど・・・。
どうせ3日しかないのだったら、もう作りながら覚えた方が 少しでもデスマ回避するためにはいいんじゃないか? 開発期間がどのくらいか知らないけど、 VBに慣れた人と同じに考えられていたら死ぬよ。
377 :
デフォルトの名無しさん :04/08/03 10:38
Excelファイルの指定シートの指定セルに値をセットするには どのようにコーディングしたらいいのか教えて下さい。
378 :
デフォルトの名無しさん :04/08/03 10:56
On Error GoToでチェックされる有効範囲についてききたいのですが 使用している Functionの中のエラーもチェックしてくれるのでしょうか?
>>378 プロシージャの中だけで有効。
Functionの中でOn Error GoToを使えばいい。
その結果が呼び出し側でほしかったら、戻り値に入れる。
381 :
デフォルトの名無しさん :04/08/03 11:17
なんか 笑われてますよ?
つまりErr.Raiseを使えって事ですよ
383 :
デフォルトの名無しさん :04/08/03 11:21
VBでユーザーの切り替え時に処理を行うことは可能? VCならできるらしいが......
384 :
デフォルトの名無しさん :04/08/03 11:29
385 :
デフォルトの名無しさん :04/08/03 11:34
三井坂って何ですか? VBに関係してるらしいんですが・・・。
387 :
デフォルトの名無しさん :04/08/03 11:36
388 :
デフォルトの名無しさん :04/08/03 11:43
>>388 やってみてないけど、同じ方法でできないの?
WTSRegisterSessionNotificationっていうAPIを呼んで、
WM_WTSSESSION_CHANGEをサブクラス化して
捕まえればできそうじゃないかい?
390 :
デフォルトの名無しさん :04/08/03 12:03
なんか捕まらないな。まぁ適当に頑張ってみる
ダメなら仕方がないからVCで作るわ......
VCは時間がかかるから嫌いなんだよな〜
C#でも使うか.....
>>386 サンクス
>>381 >>379の説明だけなら、笑っているほうが正しい。
作り的には論外だが、呼び出し先で例外を補足していない場合、呼び出し元の例外処理に入る。
JAVAとかだと明示的に例外をスルーしないとだめだけど、VBはスルーしてしまう。
ただ、最初にも書いたとおり、予期しない動きをするようになるので、仕事のプログラムとしては論外。
392 :
デフォルトの名無しさん :04/08/03 13:02
VBの動きを理解するのに一苦労だよ。
393 :
デフォルトの名無しさん :04/08/03 13:03
394 :
デフォルトの名無しさん :04/08/03 13:30
配列のとり方によりメモリの効率は 変わりますか? 例 a(4,5) と a(20) とした場合、どちらが 効率いいでしょうか? プログラムとしては a(4,5)のほうが 使いやすそうなんですが どうなんでしょうねぇ。
>>394 独り言ですか?
数値を大量に取って実測したりとか、何故しないんですか?
つうか、VBで製造する類の物なら、そういうところでのメモリー効率より、ロジックに忠実に配列定義しろ。
397 :
デフォルトの名無しさん :04/08/03 13:40
>>395 そんなこと言うなら、オマエがやってやれ。
a(4,5) 要素数 5 x 6 = 30 a(20) 要素数 21
399 :
デフォルトの名無しさん :04/08/03 13:56
Sub の引数に値をセットしなおすには どういうふうに宣言を記述すれば よかったでしょうか?
ByRef
401 :
デフォルトの名無しさん :04/08/03 16:11
ByRefって必要なの?
設定によっては省略時ByValの場合もあるしな。
403 :
デフォルトの名無しさん :04/08/03 16:38
ByValとByRefの違いは?
>405 どっちも似たようなもんだから気にせず使え。
ソケット通信で末尾が4桁の数字になっているWEBページを 取得しようと思うのですが 1ページずつ順番に取得していると1時間ほど掛かってしまいます。 winsockコントロールを100個くらいLoadして 一気にコネクション張れば速くなりますか?
とりあえずいくつまでWinsockコントロールがロードできるか 試してみよう
やばいくらい速くなった。ヽ(´ー`)ノ
さすがに100個は多すぎないか?
ラベルとかテキストボックスのキャプションを、部分的に文字属性を変えることってできますか? 該当する文字を赤くしたりしたいんですが。
>>413 他のリッチテキスト等を使ったほうがラク。
>>412 1000個までは大丈夫でした。それ以上は遅くなります。
VBにてACCESS連結のデーターベース作ってるのですが オプションボタンにテーブルのフラグがうまいこと表示できません。 どなたかご教授お願いします。
>>416 Yes/No型をラジオボタンのオンオフに対応させたいってこと?
フォーム上では動くのですが。。 データがレコードと連結しないのです。 ○○○.DataSourceとか○○○.DataFieldみたいな設定がわからないです。
>417・419 すいません。418で説明をいれたつもりだったのですが 私の日本語がおかしかったようで。 申し訳ありません。 >417 そうです。ACCESSのチェックボックスのYes/Noの用にVBのフォームで オプションボタンをクリックすることで0とか1とかをテキストでいれたいのです。 ちなみにオプションボタンは配列コントロールで設置しています。
422 :
デフォルトの名無しさん :04/08/03 23:41
テキストボックスに 8/3 と入力したら、 2004/08/03 と自動的に表示されるにはどうしたら いいんですか? Format関数でしてるんですけど、上手にいきません。 どうかご教授願います。 Private Sub Form_Load() 'フォームを読み込んだ時に txt1 に現在の日付を表示する Me.txt1.Value = Date Me.txt1.Format = "Medium Date"'dd-mmm-yy 形式で表示 End Sub
それはFormat関数じゃなくてFormatプロパティ。 しかもテキストボックスにFormatプロパティは無い。
>>422 ここはVisualBasic6.0までのスレです。他の言語は適切なスレでお願いします。
>421 項目が性別で ”男” ”女” だけなのです。
>>425 チェックボックスを非表示でACCESSに連結させて、オプションボタンのクリックイベントと(めんどくさいので説明略)
427 :
デフォルトの名無しさん :04/08/03 23:56
オプションボタン使いたきゃ面倒くさい事やってないで 普通にUPDATEのSQLなげたら? 更新はUPDATEで処理して 選択状況取得はSELECT文で取得する
428 :
デフォルトの名無しさん :04/08/04 00:05
こんな感じかな? これだとおかしくなるし。 8/3と入力したら自動的に西暦になって欲しいんだけど。 Private Sub dtDate_Change() Me.dtDate = Format(Me.dtDate, "yyyy/mm/dd") End Sub
>426 想像できない使い方です。ちょと興味わいてしまいました。 >427 すでにSQLでとってきた7つのレコードセットを連動させているので SQLなしで進めれたらと思ったのもあります。 でもお話聞く限りでは最もベストな方法ですね。。。 設計自体に難あったかもしれません。 も一度作り直す覚悟でやってみます。 ありがとうございました。
>>428 チェンジでするなよ・・・
せめてLostFocusかKeyDownで改行押された時とかだろ?
431 :
デフォルトの名無しさん :04/08/04 00:18
いや設計うんぬんより質問の仕方が悪い方が問題だよ >うまいこと表示できません。 これじゃあ事象やら不具合がまるっきしわからん こんな部下が来たらとりあえず1時間絞りあげる
>>431 ここまでくると、俺は1時間もそんな奴のために時間を割かないな。
ほかにマシな駒はいくらでもいるし。
byte型の配列をファイルに追記書き込みしたいのですが どのように書けばよいでしょうか? テキストファイルでいうところの open "hoge.txt" for append as #1 print #1, hage close #1 のような感じです。
434 :
デフォルトの名無しさん :04/08/04 00:37
困ってます。皆様できればお教えください。 得意先マスタの登録フォームを作ってます。 テキストボックスに会社コードを入力して新規か修正かを判断したいです。 会社コード入力時に、会社コードの有無を確認し既に存在すれば修正できるように そのレコードの情報(会社コード、会社名、住所、TEL 等)を各テキストボックスに代入したいです。
435 :
デフォルトの名無しさん :04/08/04 00:42
>>433 バイト型?中に入る値はなんですか?
通常だとアペンドモードでファイルを開き配列がある分ループを繰り返して
出力するかな
>>434 レコードセットで抽出条件を会社コードでSELECT文を投げて
EOFがFALSEだったら新規 TRUEだったら更新でどうか?
>>435 winsockのdataarrivalイベントで取得したバイト配列を
そのままファイルに書き込みたいだす。
>>433 Dim hage(0 To 9) As Byte
Open "c:/hoge.dat" For Binary As #1
Seek #1, LOF(1) + 1
Put #1, , hage
Close #1
回答がきたら無視るのがここの伝統か
>>438 そうだ。
このスレ見ただけでもわかるだろう。
441 :
デフォルトの名無しさん :04/08/04 06:02
>>438 たった1時間程度で無視とか判断するなよ。
まあ、この場合は教えて君だろうけど…。
>>441 たった1レス程度で判断するなよ。
まあ、1時間程度じゃなくて、質問>回答>返事無しの流れの事だろう。
>>437 すみません。いつのまにか眠っていました。
ありがとうございます。さっそく試してみます。
444 :
デフォルトの名無しさん :04/08/04 09:08
ディストリビューション ウィザードでセットアップファイルを作成すて インストールを実行すると下記のエラーメッセージが出てしまい全然インストール が出来ません。 ナゼなのでしょうか?教えて下さい。 ※win98とかMEは出来ます。 OS:WIN−XPでMicrosoft Visual Basic 6.0使用 Error Path or File Not Found ↓【OK】クリック セットアップするファイルC:\ocuments and Settings\myst\デスクトップ\cvb\Package\\@ODKOB32.DLL が見つかりません
445 :
デフォルトの名無しさん :04/08/04 09:14
>>416 -1 と0 だったような。
あと True と False でもできたと思う。
>>444 VBの場合、経験則的にインストールするOS毎にEXE、インストーラーを作るってのがあります。
対象のインストーラーを作ったOSはなんでしょうか?
447 :
デフォルトの名無しさん :04/08/04 09:33
>446 はいそうです。 \\@ODKOB32.DLLが\ODKOB32.DLLのパスにならないのが おかしいと思いますがナゼなのでしょか?
>>447 会話になってない。こたえようが無いだろ。
450 :
デフォルトの名無しさん :04/08/04 09:51
>448 失礼しました。 はい、インストールしようとしているパソでパッケージを作成して 実行してます。
>444 ディストリビューション ウィザードってかなり古いから、 通常はMSインストーラーで作っていると思う(win98だと使えなかったと思うけど) MS社に行ってDLサイトでVisualStudioのキーを入れると落とせたはず。 そっちだとWin2000・XPでも入れられる。 誰でもあほみたいに簡単に作れる。
452 :
デフォルトの名無しさん :04/08/04 09:59
>451 行ってきます
453 :
デフォルトの名無しさん :04/08/04 10:21
エクセルファイルが そういうファイルだったみたいです。 どうして そんなファイルができるのでしょうか?
>>453 VBからに限らず、EXCELのファイルサイズって編集範囲に関係なく太るよ。
多分、自分が意図していないセルに対しても範囲選択で書式設定していたりしてるからだと思う。
ただ、確か昔読んだ話だと、単にファイルオープンセーブを繰り返しても太ったような・・・。w
456 :
デフォルトの名無しさん :04/08/04 10:34
>449,451 行ってみたのですが分かりません
>>456 MSの障害報告に対応策そのものが書いてあるじゃん。
何を試行して何が判らないかは書いてくれ。
ほんと、>>456見たいのが自分のしただったら、とりあえず1時間説教だよ。
458 :
デフォルトの名無しさん :04/08/04 10:47
>>457 そういう上司だったら、一時間分の説教をテキストにして
メールしてくれといいたくなるな。
今は 忙しいから、後から 読んでおく。
>>458 =
>>456 だとしたら。
それは忙しいんじゃない。あんたに能力がないから仕事が進んでいないだけだ。
460 :
(つД`)タスケテクダサイ :04/08/04 11:02
ここのスレの人に作ってもらった計算機のプログラムなんですけどこのプログラムの説明とアルゴリズムを教えてください。 出力結果としては3+4*2と入力すると=11とでるようになってます。 どなたか得意な方お願いします。m(__)m #include <stdio.h> #include <conio.h> #define EXPRESSION_MAX 64 double myMath(char *pcExpression, unsigned char ucLength) { char cDecimal = -1; unsigned char ucIndex; double dAns = 0.0;
461 :
デフォルトの名無しさん :04/08/04 11:11
462 :
デフォルトの名無しさん :04/08/04 11:26
456ですが458は私ではありませんので。。。 Visual Basic 6.0 ユーザーは、Setup1.vbp において Setup1.frm の Form_Load イベントを以下のようにカスタマイズすることで回避できます。 と記述してありますがSetup1.vbpって自分で作ったソースの事なんですか?
>>462 違う。VBインストールしたフォルダに入ってるから探せ。
464 :
デフォルトの名無しさん :04/08/04 11:38
TabStripの使い方を教えて下さい。 タブを切り替えたいのですが、マウスでクリックする以外 (コーディングで) タブを切り替えるには どうしたらいいのでしょうか?
>>462 ヘルプのインストーラーのカスタマイズのところを読む。
あのインストーラ自身がVBで作成されてるんですよ。
だから問題もあるわけで・・・。
466 :
デフォルトの名無しさん :04/08/04 12:03
TabStrip1.Tabs(2).Selected = True
467 :
デフォルトの名無しさん :04/08/04 12:05
>462.465 出来ました!助かりました! ありがとう御座いました。
dim buff as string dim total as string open "hoge.txt" for input as #1 do until eof(1) line input #1, buff total = total & buff loop この処理なんですが、一発でファイルの中身を totalに入れることできないでしょうか?
>>468 Line Inputをヘルプで読んで理解し、それから関連項目を見る。
>>469 読んでみました。 しかし、わかりませんでした。
>>470 じゃあ、君には出来ないわけだ。
それを教えても理解できずに書くだけだから、動いてる今の処理でいいじゃん。
Line Inputは改行コードまでを読むって書いてあるでしょ?
だから取れなくて当然、あんたが改行まで持って来いって書いてるんだから。
で、関連項目のReadとかInputは読んだの?で試した?
>>471 Line Inputは改行コードまで読むなんてわかってますよ。 だから一発で読む方法聞いてるのに。
>>472 関連項目の奴らは試したの?
ファイルは無制限に一発読みはできないよ。
少しは自分の頭と手を使えよ。
関連項目の読み込み系のメソッドを全部試して、それで駄目なら聞けばいいじゃん。
即答で判らないってのは、判らないじゃなくて考えたり試したりしてないでしょ?
474 :
デフォルトの名無しさん :04/08/04 13:02
>>472 Delphiだったらできるんだけどなぁ〜
>>474 さすがDelphi
Delphiで作ります。ありがとう。
>>468 Open "hoge.txt" For Binary As #1
total = Input$(LOF(1), #1)
Close
477 :
デフォルトの名無しさん :04/08/04 13:07
DelphiとVBのどちらでもいいという状態なら迷わずDelphiを使う。 どうしてもVBじゃなけゃダメという時だけ やむをえずVBを使う。
>>476 すげー。すげー。まじですげー。
479 :
デフォルトの名無しさん :04/08/04 14:54
そかそか
480 :
デフォルトの名無しさん :04/08/04 16:43
WIN98SE、VB5SP3で 48 65 6C 6C 6F のようなバイト型(バイナリ?)データを s-jisで変換して「Hello」みたいに表示したいのですが、解る方いらっしゃるでしょうか? ぐぐってみたらVB単体だとs-jisは使えないって事で NKF32.DLLを使えば出来るらしいというのを発見したのですが 使用方法がサッパリ解りません・・・。 詳しい方がいらっしゃいましたら、宜しくお願いします。
>>480 SJISならstrconvで変換できるよ
StrConv(hoge, vbUnicode) って感じだな
483 :
デフォルトの名無しさん :04/08/04 17:29
>>481 >>482 こんなに簡単に解決するとは思いませんでした。
的確なアドバイス、有難うございました。
unicodeもs-jisもアルファベットは同じじゃなかったか?
485 :
デフォルトの名無しさん :04/08/04 23:13
>>476 横レスすまんがあんたスゴイな!!ウチのプロジェクトにほしいよ
わりい、ウニの方はアルファベットも2バイトだったわ。 ファイル出力時に勝手にs-jisになるの忘れてて勘違いしてた。
VBで16進数”C8”等の上位数ビットを指定して取り出したいのですが 今は16>2進へ手動で変換してから取り出しているのですが もっと効率の良いやり方って無いものでしょうか?
>>489 今のソースをどう書いているかわからんのに、もっと良いものも糞も無い。
>>489 あぁ、書き方が悪かったですね。すみません。
2進などに分解せずに16進で操作できる方法はありませんか?
と言う事を聞きたかったのです。
>>491 その16進数というのは、文字なのか?
繁栄に文字からビット取り出しするのであれば、16進数文字列から
数値変数に入れておくといい。
繁栄にしないのであれば・・・ていうか、今のソースどうやってんのよ。
>429 16進は文字列ですね。 エラー定義等細かいのを省くと、単純にこんな感じです。 解り辛いかもしれませんが・・・。 頻繁? 初めて聞きますが・・・調べてきます。 その1 Private Sub Command1_Click() Dim strWork As String Dim lngWork As Long Dim lngCut As Long strWork = "&H" & Text1.Text lngCut = Text2.Text lngWork = strWork strWork = NI_SIN(lngWork, lngCut) lngWork = JU_SIN(strWork) Text3.Text = Hex$(lngWork) End Sub
うわ、改行が・・・ その2(続き) Private Function NI_SIN(ByVal lngA As Long, ByVal lngCut As Long) As String Dim lngNum As Long Dim strA As String lngNum = lngA Do strA = CStr(lngNum Mod 2) & strA lngNum = Fix(lngNum / 2) Loop While lngNum > 0 NI_SIN = Mid$(strA, 1, lngCut) End Function Public Function JU_SIN(ByVal strN As String) As Long Dim lngI As Long Dim lngLength As Long Dim lngWork As Long Dim strB As String lngLength = Len(strN) - 1 For lngI = 0 To Len(strN) - 1 Step 1 If Mid(strN, lngI + 1, 1) <> "0" Then lngWork = lngWork + (2 ^ lngLength) End If lngLength = lngLength - 1 Next lngI JU_SIN = lngWork End Function
あぁ、プログラム用語かと思ったら 一度読み返したら意味が解りましたw
Text3.Text = hex(CLng("&h" & "C8") And (2 ^ lngCut)) ってな感じか?
mask = ((2^lngCut)-1)*(2^(8-lngCut)) result = (lngWork and mask) / (2^(8-lngCut)) 32ビットだとオーバーフローするから使えないけど8ビットなら大丈夫かな。
>>497 >>498 なるほど!論理積を使ってビット単位の比較ですか。
AND演算子なんて全然知らなかった。
これだけ短くなるとは凄い。
オーバーフローの方は、8ビット固定なので問題ありません。
目から鱗です。有難うございました。
>>499 正直な感想、ああいうプログラムを書くあなたが凄い。
>>500 ANDも知らないんだから、ビット操作どころかVB初心者なんだろうさ。
初心者が自分の考えを物凄くストレートにコーディングしたらああなるだろ。
ま、概念は解ってるっぽいから直ぐ理解できるんじゃね?
とか言って、おいちゃんも目からウロコだったヨ♪
ビット操作なんて、大学以降仕事でやった記憶ねーし。
皆はそんなに使うのか?
>>501 Windows上でプログラムしていると嫌でもやることになるとおもってた。
制御系なら必須じゃないかな? 他の環境はしらんけど。
VBでもKeyDown/MouseDownのお仲間ではビット演算使うでしょ?
最後の / (2^(8-lngCut)) この部分不要に思えるが。。 いや、もし不要じゃないなら、最初からビット演算なんか不要で 単に2のべき乗の商を求めればいいはずだと思うんだけど?
504 :
デフォルトの名無しさん :04/08/05 13:03
くだらない質問ですみません dim objdll as cls001 set objdll = new cls001 も dim objdll as new cls001 も別に処理的にはどっち使ってもいいんですよね?
別に問題ない。 上の方の書き方は、オブジェクトを使用しない場合はsetしない等の様にソフトを組めばメモリの節約になる利点がある。
506 :
デフォルトの名無しさん :04/08/05 13:58
なるほどありがとうございます。 確かに条件命令の個所は定義とは別にSetされていますし 確実にインスタンスを使用する個所は定義個所でNEWされていました。 納得しました。
507 :
デフォルトの名無しさん :04/08/05 14:04
はじめまして。教えていただきたいのですが、VBで参照設定を選択すると、「システム レジストリへのアクセスエラーが発生しました」 とメッセージが出ます。対象方法はありますでしょうか…。色々と調べてみたのですが、解決策が見つからなくて…。 もし、わかる方がいれば、よろしくお願いいたします。
>>505 別に下の書き方も使わなければ生成されないからメモリを多く食うわけじゃないぞ。
If objdll is Nothing Then みたいなときに下の書き方だとインスタンスが作られて困ったような気が… あと、インスタンスを参照するときに毎回実体があるかの確認が入ってパフォーマンスにわずかながらの影響が… オレの記憶違いならいいんだけど。
すいませんVB.NETすれから誘導されてきました。 学校でVB6.0を使っているのですが 家でやるためにspoke premiumを買うのはやっぱりやめた方がいいでしょうか?
511 :
デフォルトの名無しさん :04/08/05 17:27
>>510 時代は、.NETだ。
安いから買って勉強しろ。
>>511 それはわかるんですが
互換性の問題などはどうなんでしょうか?
何の互換性を懸念しておるのだ?
>>510 VB6.0とVB.NETはまったくの別言語だ。
515 :
デフォルトの名無しさん :04/08/05 18:48
>>513-515 レスありがとうございます。
VB.NETはVB6.0の上位互換のような物だと思っていたのですが全く別物なんですね。
安いんで.NETの方を買おうかと思います。
とんちんかんな事言ってましたら、すいません。 質問です。 VB6.0で、ロードされてないフォームの名前を取得する方法ってありますでしょうか? 調べたのですが、FormsコレクションはLoadされた物しか見れないようなので。 具体例としまして・・・ Form1〜6を作成し、 スタートアップフォームをForm1とし、Form1にListboxを置き、 Form1のForm_Loadイベントにて、Form1〜6の名前をListboxに設定したいのです。 ロードされる前のForm1〜Form6のForm名をConst等で持つというのではなく、自動的(?に 取得すること・・・出来ますか? 教えてくださいませ。
できない。
>517 無理。 とんちんかんではないと思う。 どういう物が作りたいのかサッパリ分からんが、 むしろForm1〜6の名前を別の手段で作成し(Constじゃなく生成するなり何なりで) Form1〜6のLoad時にそれを適用した方がいいんじゃないかと。 この方法じゃどうしてもアカンの?
>518>519 レスありがとうございます。 無理なんですね・・・わかりました。 上司の「フォーム一杯あって、いちいち追加するごとに名前打つのめんどくさいから フォーム名を動的に取得できないかなぁ」という一言が発端でして。 調べても無理っぽいと思ったんですが、個人的判断だけでなく、 ほかの方にも意見を伺いたかったものでして。 無理と明日伝えます。ありがとうございました。
6個くらいでウダウダ言うなんて最近暑いとは言え廃人ですよ。
522 :
デフォルトの名無しさん :04/08/06 00:59
フォームが最小化されたときに 最小化されたというイベントを検出する方法は無いでしょうか?
>>522 リサイズとWindowStateを見るか、メッセージ見るか
>>522 Resizeイベント内でAPIのIsIconic使えばできそう
WindowStateって動的に変わるんだね。表示時の指定だけかと思ってた。
>>523-524 レスありがとうございます。
さしあたり、WindowStateで検討してみます。
っていうか俺が前スレで同じこと質問して解決した。
>>520 動的に云々に該当するかわからないが、一応関数の引数としてフォームを渡すことも可能だからね。
共通的な処理はフォーム名によらずにできる。
>517 なんかアリモノを修正してるっぽいな。上司が面倒臭がり屋なだけか?(w んまぁどうしても、ってならHideしたままLoadして、Formsコレクションの中から >528の方法で処理するしかないんじゃないかな? 「Loadせずにやれ」って言われたら上司をヌッコロしてよし(w
っていうかロードするにはフォーム名を指定しなければいけないわけで
そんなのフォームを変数に格納すればアプリケーションに1回書くだけだろ?
自フォーム内でその変数(配列かな?)に格納する関数を作っておいて hogeAdd(Me)とか書けば、実は1回も書かなくてもコピペだけで
>>533 Formがプロジェクトに1つしかなく、スタートアップに設定されていればな。
535 :
デフォルトの名無しさん :04/08/06 15:22
Format関数について質問があります。 Format( Now, "yyyy") とした場合年が入るはずですが、なぜかyyyyとセットされている 現象がたまにあります。こういう経験のある方いらっしゃいますか? VB4・16bitVerです(w
気のせいだ。
背理、背理触れ、背理法、背理入り触れホッホウ
Do: F = Format(Now, "yyyy"): Loop While F = "yyyy"
VB6.0で.NETのクラスを呼び出して使うにはどのように記述すればいいのでしょうか?
>>539 そうさのぅ
北極で月の地面を掘って温泉を発見する感じだね
541 :
デフォルトの名無しさん :04/08/06 18:27
昔から思っていたのですが、 VBでわざわざサブクラス化する価値ってあるんですかねぇ?
>>541 規模によって違ってくるなぁ。
WM_MOVE拾いたいだけなのにVCで作り直すなんてアホらしいけど、、
標準で用意されていないイベントばっかり使うのに、ずっとVBで
画面作り続けるのもアホらしい。
VBのデバッグ機能殺すほど大規模なものなら使わないほうがマシだと思う。
そうじゃなければ使う。
544 :
デフォルトの名無しさん :04/08/07 00:20
コードのサンプルとかを見ていると、関数の戻り値を使いもしないのに 取得しているのはなぜでしょうか。 たとえば、APIでiniファイルにデータを書き込む場合に Call WritePrivateProfileString(strSection, strKey, strData, striniFn) とはせずに、 lngRet = WritePrivateProfileString(strSection, strKey, strData, striniFn) としているような場合です。
何も考えずにコピペしたからに決まってるだろ。
>>544 俺はデバッグ考えていらなくても一応変数に入れとく。
あと、VBだとCALL付けない時は引数を括弧で括らないことになっているために、
引数が1個で参照渡しの関数の場合、うっかり括弧つけちゃうと
意図せぬ結果になる、という問題を避ける狙いもあるかも。
まあ、その、なんだ、いわゆるYAGNI。
>>549 まさかと思うけど、この通りに作っているわけ?
>>549 大きなサイズのバイナリエディタの作り方としては、これは全く通用しない。
データの読み込みも編集も表示も書き込みも、色々なテクニックが必要だ。
>>549 そこのページにもちゃんと書いてある。
>テストにあまりデカイファイルを使うと激遅いけど(笑)
>>550 >>552 おまい達、549は解らないから聞いておるのに、一体何が言いたのじゃ?
@アドバイスが面倒臭い。
A初心者苛め。
B釣り。
>>549 このソースであえて挙げるとするなら、表示・保存が最大のネック。
処理高速化の一番簡単な近道は、ループ処理を減らす事。
上記のソースを元に大雑把にアドバイスするなら
@テキストボックスに表示するデータを16×16等、適当に固定する。
Aページカウンタを設ける。
で、バイナリモードでファイルを読込後、16×16分のデータだけをテキストボックスに表示。
以降、表示はページ単位で処理する。
データ修正後はページカウンタの値を元に、画面内のバイト範囲だけを修正保存する。
以上の修正が出来れば、実用に耐えられる範囲で使えるじゃろう。
後は自分の創意工夫で。もっと高速化も可能。
データサイズが大きい場合は、全て表示・全て保存と考えるのではなく
表示・保存は必要最低限に。発想の転換が大事。
>>549 いまさらあえて言う必要もないと思うが、一連の処理で何処がボトルネックになっているのか知ることも大事。
>>553 のいうように、表示・保存の処理については改善すべき点がいくつかあって、幾分か高速化が望めるが、
VBに付属の関数がボトルネック場合は、いろいろと厄介だから気をつけること。
三十何年生きてて得た経験則の一つを紹介しよう。 口調が偉そうな奴のアドバイスはたいてい何のアドバイスにもなっていないか、 ひどくどうでもいいことをさも重要であるかのように書いているだけで。
プログラマ業界ってさぁ、
>>553 みたく初心者に親切に的確なアドバイスしてくれる人って貴重でない?
新人を教えるだいたいの人って、ベテランにしかわからん専門用語を並べ立てて
こんな事も解らんのか?まだ解らんのか?頭わりーなってな感じで、素人のレベルに立って考え様としない
俺様特別みたいな考えの人多くて、全然底辺が育たないんだよねぇ。。。俺の会社だけか?
まぁ、新人にも問題ある人多いけどさ。
そして何事もなく次の質問へどうぞ↓
558 :
デフォルトの名無しさん :04/08/08 00:32
VB6.0sp5を使用しています。 デスクトップのアイコンテキストの背景を透明にする方法を 教えてください。よろしくお願いします。
>>558 その質問、「ものすごく馬鹿な質問」を意図している可能性と、
まあありえなくもない質問を意図している可能性があるけど、
「ものすごく馬鹿な質問」に取られることに対する警戒が少しもないところを見ると、
たぶん君はベタに「ものすごく馬鹿な質問」を場違いにもしていると思われる。
ていうか、いまじゃこんな表現力が欠如しているというか、
他人の視点から自分を見れない奴がPGやってるのか?
>>559 君は会社で空気が読めない香具師だと言われているに違いない。
空気を読んでプログラムを作るなんてとても危険だ
私のことで喧嘩しないで
アクティブXがヒント
正式なファイル名を取得するには、どうすればよいのですか。 例えば、"c:\program files"と存在するディレクトリ/ファイルを"C:\Program Files"と改めたいです。 親ディレクトリから検索するのは、効率が悪い気がします。
>>549 手っ取り早かったのは、やっぱり表示と書き込み。
編集しながら文字列変数に入れた上で
TextBoxに入れたり、書き込みすればお手軽。
>>570 素晴らしく簡単で、素晴らしくブルジョワな解決法だな。
>>567 GetLongPathName
ただしc:\program files→c:\Program Filesだったんでドライブ文字は自分で直せ。
>>574 Windowsでは大文字、小文字の違いは無視される。ので、UCase()等を使うのが吉。
つうか、彼は何を基準に”正式な”って言ってるんだろう?
577 :
デフォルトの名無しさん :04/08/09 10:31
テキストボックスに入力するとき、数値のみ入力できるようにしたいのですが、 どのようにすればいいのか 教えて下さい。 入力後チェックではなく、入力(コピペ)できないようにしたいのです。
578 :
デフォルトの名無しさん :04/08/09 10:36
MSFlexGridですが、セルの幅を画面上で変えることができるようにするには、どうしたらいいのでしょうか?
あ、もちろん、実行時です。
>>577 KeyPressでふせげなかったっけ?
>>578 ColWidthとかその辺は?(行列どっちがどっちだっけ?W)
>>580 自分で ColWidthを調整しろってこと?
>>581 ごめん、元文を読み違えてた。オペレータがぐいんぐいんできるようにするのね。
プロパティーページのサイズ変更がそのもの。
そこを変えれば、マウスが境界にいったところでぐいんぐいんできるカーソルになるはず。
>>582 サンクス
AllowUserResizing のことね。
584 :
デフォルトの名無しさん :04/08/09 14:43
KeyPressのイベントでできるの?
>>584 半角数字以外の入力は、すべて例外処理に飛ばすってことでそ。
>>580 具体的にどうすればいいか教えて。
あと、タブとかカーソルは入力OKみたい。
>>584 マウス右クリックでのクリップボードからの貼り付けで文字を流されるから
それだけではダメだ
まともにやるにはメッセージを処理するしかないね。サブクラス化して。 そういうユーザコントロールを作っておくと便利。
わりと大変なのね。 どこかにそういうのないのかな?
そんなことをするなら、VBならばコントロール買ったほうがいいね。 安全だし、安定するし、結果安くつくし。数値専用入力とかなら5万もなく買える。
>>589 リロードしないで590書き込んだ。
コントロール探してるなら、まずグレープシティーを見てみる。
あと、コンポーネントワンとかも。
592 :
デフォルトの名無しさん :04/08/09 15:12
5万円はする内容のものなのか・・・。
593 :
デフォルトの名無しさん :04/08/09 15:14
別にコントロールってわけではなくて、イベントで処理できればいいと思うけどね。
まあ、InputManだとしたら他に色々ついてるし。 そもそも5万なんて、1日かそこらの工数でしょ? 社内共通のコンポーネントとして作るならまだしも、そのプロジェクト専用じゃ、自作じゃ割りが合わん。
595 :
デフォルトの名無しさん :04/08/09 15:34
私のコストは 安いから 一日 1万2千円だ(w
>>595 それはあんたの手取り?それとも会社があんたを外に出すときの値段?
後者だとしたら、手取り半分としてコンビニ以下だよ。w
597 :
デフォルトの名無しさん :04/08/09 15:50
もちろん手取りしか わからんぞ。
>>597 大体2.5から3倍ぐらいすれば外に出している値段になるよ。
(会社によって非効率だったり、ボーナスとの給与比で違うけど)
なんで、あなたの工数がまあ1日4万弱として、その金額で安定したいいのもが作れるならよし。
そうじゃなければ、条件が許すならば市販のコントロールを購入。
599 :
デフォルトの名無しさん :04/08/09 16:21
入力制限って そんなに大変?
>>599 元質問者のレベルを一連のやり取りから見ると、とても市販品以下のコストじゃできないでしょ?
メッセージフックとかになった場合、きちんと知識がないと副作用ありだし。
副作用も含めて経験させればいいじゃん
>>601 まあそうだけどね、選択するのは元質問者でちょっと前で買う気になってるし。
603 :
デフォルトの名無しさん :04/08/09 17:28
表示されていないほかの画面(まだLoadされていないと思われる)の テキストボックスに値をセットすると その画面が表示されてしまいます。 こういうものなのでしょうか? それとも私が何かしているのでしょうか?
>>567 質問者じゃないけど、Windows XPで試したら
GetLongPathNameだと、ちゃんと変換してくれるときと、
元のまま返してくるときがある。
http://www31.ocn.ne.jp/~heropa/vb08.htm ↑の人は、一度GetShortPathNameを使ってから
さらにGetLongPathNameを使ってるんだけど、
何か回りくどいような気もする。
というか、一発で実現するAPIは無さそうっすね。
606 :
デフォルトの名無しさん :04/08/09 18:35
>>577 超適当だけど、こんな感じじゃ駄目なん?
テキストボックスのIMEプロパティも変えからどうぞ。
Private Sub Text1_Change()
Dim curtTmp As Currency
On Error GoTo error
curtmp = CCur(Text1.Text)
Exit Sub
error:
Text1.Text = ""
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8
Exit Sub
Case 48 To 57
Exit Sub
Case Else
KeyAscii = 0
End Select
End Sub
>>577 マスクエディット(MaskEdBox)コントロールなんてのがある。
俺は使ったことないけど。
608 :
デフォルトの名無しさん :04/08/09 19:02
>>607 どのコンポーネントを追加すればいいの?
VBって コンポーネントを追加しないと ある程度のものが使えないから イヤだよねぇ。
>>608 Microsoft Masked Edit Control (MSMASK32.OCX)
いまいち使いにくいので、俺もほとんど使わない。
610 :
デフォルトの名無しさん :04/08/09 19:54
使いにくいのか・・・。残念! マイクロソフトのなんとか斬り〜 って テキトーなのが思い浮かばなかった。
612 :
デフォルトの名無しさん :04/08/09 20:09
>>577 普通のテキストボックスの上に、
>>606 のソース貼り付けたテキストボックス重ねればいーじゃない。
OKなら下のテキストに反映、上は退避。
んでも話の流からして、君には無理そうだ。
5万円? Private Sub Text_Entry_MouseDown(Index As Integer, Button As Integer, _ Shift As Integer, X As Single, y As Single) If Button = vbRightButton Then Dim ret As Long ret = SetCapture(Me.hwnd) End If End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyV And Shift = 2 Then If IsNumeric(Clipboard.GetText) = True Then Me.ActiveControl.Text = Clipboard.GetText KeyCode = 0: Exit Sub End If End If End Sub
>>614 せいぜい500円。
問題点はわかってる?
>>617 ああ。IsNumericはここでは相応しくない。それと・・・
5万円のソース目指すには足りなすぎる。自分で色々ためしてみた?
テキストボックスのチェンジイベントで public strOldtext as string --------------------------------- for i = 1 to len(textbox1.text) if Not(48 <= Asc(Mid(textbox1.text, i , 1)) <= 57) then textbox1.text = strOldtext exit sub end if next strOldtext = textbox1.text --------------------------------- こんなんじゃだめなん?
>>620 プラスやマイナス、小数点にカンマ、その他色々
あそうだね・・・数字だけかと思ってた。 まぁ条件分岐を追加すればいいだけど。 文字が増えるたびに再三同じものをチェックするのは あまり美しくないど。
>>606 , 614
大枠これでいいんじゃないかな。
あとはトライアンドエラーで潰せるレベル。
>>619 >IsNumericはここでは相応しくない
詳しく
>>623 IsNumericの問題は過去スレで論議あり。
621の問題にも通じるものがある。
>>624 プラス、マイナス、小数点にカンマが混じっててもOKなハズだが?
その他色々が混じってて数値とよべるものがある?あ、過去スレね。はいはい。
俺なら見やすさとメンテナンスとか色々ひっくるめて
>>606 と
>>613 の案を取るかなぁ。
>>614 や
>>620 だと、新人とかVB経験浅い人は何やってるか解らないだろうし
修正入った時に弄れそうにない。
>>625 例えば、1E1、&10なんかが、IsNumericだとTrueになる。
>>626 色々ひっくるめてってあんた。
新人だろうと浅かろうと、そんなレベルの低いことを言ってくれるなよ。
>>628 数値として評価できればいいんじゃ・・・
Isnumeric()通した後Clng(), CCur() 等で変換してオケ。
>>630 626の言い分はともかく、悲しいかなそれも現実だ。
ベテランは新人を育ててる時間なんてないしな。
ループにFor文使わず、Gotoで回してた強者もいたし・・・・・新人って怖い。
>>631 おまいさん、プログラマな感覚から離れてみてはどうか?
プログラムのプの字も知らないお客さんが、間違って1Aとか入力しちゃったとしよう。
でだ、エンター押した瞬間に数字に変身よ?何も知らない方としてどう思う?
壊れてんじゃねーの?とか思わん??
勝手に
>>614 を修正するとこうかな。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyV And Shift = 2 Then
If IsNumeric(Clipboard.GetText) = True Then
Me.ActiveControl.Text = CLng(Clipboard.GetText)
'Me.ActiveControl.Text = CCur(Clipboard.GetText)
KeyCode = 0: Exit Sub
End If
End If
End Sub
>>633 「ああ、数値項目なんだな」としか思わんが。
637 :
善人プログラマ :04/08/09 21:46
私の見解を述べさせてもらう。 なぜ世の中にはベテランと新人がいるのかわからん。 このような経験差、能力差がなければ、もっと柔軟で心のこもった ソースが書けるのに、と最近つくづく思う。 やはり教育というのは大事なものだと思う。最近の新人プログラマは 昔のプログラマに比べて圧倒的に基礎力がないというのも 悲しいかな事実だと思う。それにベテランがいらついて、怒鳴りつけられたして 自信のなくした新人が、自分のプライドを守るために、ベテランを憎むようになる。 これでは、本当の意味での心の通い合いというものがまるで生まれない。 ここに社会の混沌を招く一つの要因であるように思う。
>>637 スレ違いとは思うが
無能はいつまでたっても無能
できるやつは教えなくてもできるやつ
入社前までにある程度良質のプログラム書けるやつ以外は入れる必要なし。
逆恨みなんてするアホにつきあう必要無い
なんていうかジョン・レノンのイマジンの世界だな。
ここは
>>557 指摘する典型の人が、盛り沢山集るスレです。
>>639 そんな出来る人間は、底辺の会社になんて見向きもしてくれね〜のさ。。。
底辺の会社は、地道に育てていくしかね〜のさ。
ルールルルルー
643 :
デフォルトの名無しさん :04/08/09 22:42
私の見解を述べさせてもらう。 なぜ世の中には内職商法があるのか。 このような企業、ネットワークがなければ、もっと柔軟でリーズナブルな 職を探せる、と最近つくづく思う。 やはり就職というのは大事なものだと思う。最近の企業は 昔の企業に比べて圧倒的に信用がないというのも 悲しいかな事実だと思う。それに俺のような人間がいらついて、怒鳴りつけて警察に通報されたりして 折角設立した会社が、元をとる前に、警察のブラックリストに載る。 これでは、本当の意味でビジネスというものは、まるで生まれない。 ここに求人案内の存在自体が詐欺行為のほう助として現実にあることが伺える
さすがにあきたな
次の質問の方どうぞ↓
↑お願いします 実行中なのに、EXEのファイル名が変更できてしまいます。 普通は変えられないと思うのですが、何でですか?
できればVBの質問をお願いします。
648 :
デフォルトの名無しさん :04/08/10 01:37
で、結局5万円のコントロール買わなきゃいかんのん?
>>646 EXEファイルは実行前に全てメモリにロードされて実行中は既にEXEファイルは不要になっているから。
651 :
デフォルトの名無しさん :04/08/10 09:59
614ので SetCapture ってあるけど、アレは何?
DLLをレジストしないで、VBから使用する方法ってないでしょうか? CreateObject ("ここにDLLのパス") ↑これだとDLL自体呼び出せませんでした… やっぱりAPIとか使用しないと無理でしょうか?
653 :
デフォルトの名無しさん :04/08/10 10:10
起動時に レジストして、終了時にレジストから削除するとか・・・。
レジストリにキーを揮発性(再起動すると勝手に消える)で 書き込むことってできるんだよな。 これを利用すればレジストリに登録していないかのように 使えるはずなんだが。
655 :
デフォルトの名無しさん :04/08/10 10:22
MSFlexGridで、EnabledをFalseにしたとき、セルの文字を 薄くしたいのですが、どうしたらいいのでしょうか?
656 :
デフォルトの名無しさん :04/08/10 10:24
馬鹿らしい質問かも知れませんが教えてください。 spdSpread. と.まで打つと定数の一覧が表示されるのですが、一瞬で消えてしまいます。 以降 = と打つとTrue False の選択も表示されますがこれもすぐに消えてしまいます。 一瞬で消えられ困っています。 どうすればよいのでしょうか? 教えてください。よろしくお願いいたします。
657 :
デフォルトの名無しさん :04/08/10 10:25
Ctrl+Space で 何度も出せる。
>>657 Ctrl+Spaceで出ました。
しかし種類を選択する間もなく消えてしまいます…。
押しっぱなしだと選択できないです。
うう、定数をあまり覚えてないので辛いです
わからない。誰か速いバイナリエディタのソース書いて下さい。
そんなことより、
>>577 コピペ対策はクリップボード監視でどうでしょうか?
下は特には関係無いけど・・・・・・・
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = Asc("0") Then
Exit Sub
ElseIf KeyAscii = Asc("1") Then
Exit Sub
ElseIf KeyAscii = Asc("2") Then
Exit Sub
ElseIf KeyAscii = Asc("3") Then
Exit Sub
〜〜〜〜〜〜(途中略)〜〜〜〜〜〜〜〜〜
ElseIf KeyAscii = Asc("8") Then
Exit Sub
ElseIf KeyAscii = Asc("9") Then
Exit Sub
Else
KeyAscii = 0
End If
End Sub
話の流れを一切見ずに馬鹿な書き込みをして恥ずかしくないのか? 処理自体が論外なのは、昨晩のやり取りを見れば一目瞭然。 それに、せめてIF-ELSEの連続じゃなくて不等号で一発でやれよ。 文字コードに関して一切理解していないって公言してるソースだぞ。
664 :
デフォルトの名無しさん :04/08/10 13:30
>>663 >下は特には関係無いけど・・・・・・・
何も関係ないようです(w
665 :
デフォルトの名無しさん :04/08/10 13:39
そんなことより誰か655を教えて。
>>653 >>654 サンクスです。
>>654 の揮発性で書き込む関数が、自分が無知なせいか
調べても分からなかったので、
>>653 の方法でいこうと思います。
とりあえずDLLはレジストする事が前提って事ですね。
668 :
デフォルトの名無しさん :04/08/10 15:30
669 :
デフォルトの名無しさん :04/08/10 15:31
Enabledを戻すときは、最初から灰色は 灰色のままだぞ。
671 :
デフォルトの名無しさん :04/08/10 15:41
>>670 たかがBasicでもったいぶるなよ(プ
672 :
デフォルトの名無しさん :04/08/10 15:48
>>671 もったいぶる以前の問題。
できるわけがない。
674 :
デフォルトの名無しさん :04/08/10 19:02
とかいいつつ誰にもできない罠w
675 :
デフォルトの名無しさん :04/08/10 19:16
VBで、Cでいうdeffineってできますか? できるならやり方を教えてください。 よろしくお願いします。
677 :
デフォルトの名無しさん :04/08/10 19:32
HSPで言う #define pr print のことです。 説明にはprはprint命令と同じになる、と書いてます。
>>659 >>606 のKeyPress部と君の書いてる処理の結果はたいして変わらん。
しかし、そのソースが書けるなら
どちらが無駄なく美しいか、一目見て解らんか?何がしたかったんだ?
バイナリだって、
>>553 が簡単に説明してくれている。
参考のソースは16列まで連結してくれているんだから
For文をMAX16行までにすれば良いんだ。
For i=Lbound(byTMP) To Ubound(byTMP)
の部分を
For i=Lbound(byTMP) To 15
と書きかえるだけで、初回表示なら速くなる。
こののままだと永遠に0〜15の表示しか出来ないが
553の言ってる事はこんな感じだ。
クルップボード監視やらが解るなら
後のページカウンタ、保存の部分だって理解できるだろ?
配列の順番を操作するだけだぞ?
#define HOGE_HOGE 0 を Private Const HOGE_HOGE As Integer = 0 みたいに定数の定義はできるけど、マクロとして使うのは無理だと思う。
>>675 Cのなんでもできちゃう置き換えのDefineは無いよ。
C++とかの定数としてのConstはみんな言っているけどConstがある。
他の言語でもそうだけど、型の制限とかも出来ないDefineは避けるべき。
テクニカル(というか自己満足)なソースはDefineを使えば組めるんだけど、
可読性、メンテナンス性を犠牲にするので、Constとかを使うのが普通。
わかりました。 アドバイスしてくれたみなさんありがとうございました!
683 :
デフォルトの名無しさん :04/08/10 22:36
oracle8i + VB6.0 で開発しています。 BBテーブルのレコード(70万件)をAAテーブルにコピーし、同一にしたいです。 毎回 AAテーブルのデータを削除して、もう一度insert するのは大変なので、 前回コピーした差分だけを更新コピーしたいです。 hincdに主キーがかかってる場合、BBからAAにinsert構文があっても、 差分しか追加されないということは、わかりました。 下記のようなコードでいいのでしょうか? INSERT INTO AA(hincd,hinnm) SELECT hincd,hinnm FROM BB;
>>574 >>575 >>605 ありがとうございます。GetLongPathNameは比較的新しいAPIのようですね。
一緒にLB_DIRでロングファイルネームを扱いたかったところだったので、DOSベースの9x系を捨てて2000/XPに限定して動かすことにします。
FindFirstFileで列挙してると、ディスクがガリガリして激しくウルサくて、遅いですね。
>>683 やった結果主キーエラーでしょ?
後のSQLでAに存在しないBという一文を入れないと。(EXISTSで書ける)
で、もともとAにある奴って更新しなくていいの?
普通こういう処理ってあった場合はUPDATE、なければINSERTでしょ?
>>684 98/MeならGetLongPathNameは動くぞ、動かせ。
687 :
デフォルトの名無しさん :04/08/11 13:01
>>685 ありがとう
BBには常に新しい、レコードが発生するんですけど、
AAにはそのBBで発生した(hincd,hinnm)の項目だけを更新したいんですよ。
BBはオフコンからのレプリケーションでオラクルにデータ移行してるんで、
BBのテーブルとAAテーブルを常に同じにしたいです。
688 :
デフォルトの名無しさん :04/08/11 13:08
vsFlexGridの質問なので若干スレ違いとは思いますがよろしくお願いします。 NT4.0(SP6a)、VB6(SP5)でFlexGrid6.0を使用しています。 FlexGridのColComboListプロパティを使って特定の列をコンボボックスに しているのですが、コンボボックスの項目数を表すプロパティComboCountが -1になってしまいます。 設定そのものは成功しているようです。表示させてマウスでセルをクリックすると 指定した内容がちゃんと出てきます。 ですが、内部で項目数を調べ、ある条件に該当する項目を自動的に表示させようと すると、ComboCountが-1なのでエラーが発生してしまいます。 正常なプロパティを得るにはどうしたらいいのでしょうか。
自己解決しました。 一度実体化させてからでないと有効にならないようです。 お騒がせしました。
質問させていただきます。 マウスポインタを窓の裏側にまわす方法はありますでしょうか?
裏側って何だよ
あれでしょ、筋のある側。
説明不足でスマソ たとえ、ば半透明の何かの画像を最前面に表示させっぱなしの状態で マウス操作は画像を無視して(画像の窓の裏側にまわす) 画像がないときと同じように普通の操作はできないかと
>>693 ret = SetCapture(画像の窓の裏側のウインドウ.hwnd)
初心者的な質問で申し訳ないのですが、 変数の宣言で N=3 dim A(N,N) のように変数を用いる方法は無いでしょうか? もしくは、Nのところがプログラムで使用される任意の大きさに対応されるような 宣言の方法は無いでしょうか? Option Explicit を消せと言われればそれまでなんですが・・・
Dim A() Redim A(N,N)
697 :
デフォルトの名無しさん :04/08/12 18:51
質問です。 Private Sub Form_Resize() If WindowState <> vbMinimized Then With WebBrowser1 .Hight = Form1.Height - 1150 ← .Width = Form1.Width - 350 End With End If End Sub 矢印のところに「オブジェクトはこの特性あるいは方法を支援しません」という趣旨のエラーが表示されるんですけど、 この部分はどう改善すればいいんですか?
1150引いてゼロ以下になってるんじゃネーノ?
>>698 いくら数字を低くしてもエラーが出るんですが…
というかそもそもWebBrowserのHightってどうやったら調べられるんですか?
初心者な質問ですみません。
間違えた。FormのHightでした。
ソースにもHightって書いてるんじゃないか?
>>701 あ、ほんとだ。
見落としてました(汗
やっと解決できた…
ありがとうございました。
ネタでしょ?なんかハマグチェみたい。。 でもこれ「ヘイト」って読む奴がマジで多いんだよな。。 このスレにも笑えない奴がいるはず。
ファイル切り貼り処理を行うに当たって、既に同じ名前のファイルがあるとエラーになってしまいます。 その場合は上書きで処理したいのですが、どう書けばいいでしょうか? 現在以下のようなコードで切り貼り処理をしています。 'strOKU_FILE = 切取側ファイルパス 'strUKE_FILE = 貼付側ファイルパス Set FsoFile = fso.GetFile(strOKU_FILE) FsoFile.Move (strUKE_FILE)
707 :
デフォルトの名無しさん :04/08/12 20:03
Visual Basic 6.0 Pro SP6 @ Windows Meで使っているのですが、 物理メモリを指定したサイズ確保して解放するというプログラムって作れませんか? いわゆるめもりーくりーなーのような動作を行いたいのです。 ぐぐっても変数のメモリを解放するといった内容しか出てこなくてお手上げでした。
delete & copy
>>708 作るにしても、VBで作るもんじゃねーよな。
システムコールしたりAPIだけのプログラムじゃないの?
>>710 実を言うとめもりーくりーなーでサイズを与えるとそのサイズ分解放するっていう動作を
別なプログラムから使いたかったんです。
でもそれを実行させるために、めもりーくりーなー本体とdllだけを移動させて実行すると
「ディレクトリ付きで解凍されていない」と怒られたため、だったら自分で作って使えばいいやと思ったわけです。
APIか何かのサンプルでもあればいいのですが・・・。
712 :
デフォルトの名無しさん :04/08/12 23:21
VBで複数の値を返す関数って作れますか? VBは配列とかないみたいなので、うまく複数の値を返せません。 どうしたらいいでしょうか?
配列あるよ・・・。
クラスもあるよ
( д ) ゜ ゜
716 :
デフォルトの名無しさん :04/08/12 23:28
ほんとだ。配列あった。 括弧()で指定するんですね。[]じゃなくて。Thanks.
SQL文は下記のような感じでいいのかな?? INSERT INTO AA(hincd,hinnm) SELECT hincd,hinnm FROM BB WHERE EXISTS (SELECT hincd,hinnm FROM AA WHERE AA.hincd = BB.hincd) AAテーブルとBBテーブルを同データにしたいです。 BBテーブルはオフコンからのレプリケーションテーブルの為 常にユーザー入力があるのですが、AAには無いのです。 どうか尊敬する2CHの尊敬する先輩方、お願いいたします。
>>717 SQLじゃなくてOracleの機能を使ったほうがいいんじゃない?
719 :
サッカー日本がんばれ :04/08/12 23:42
今まで開発はACCESSしかしていなかったのですが、 今回の仕事からVBでしている、ナンチャッテPGです。 フォームで明細画面を作る場合、ACCESSではサブフォームって感じで、 明細行が発生する限り自動で作成してくれてたんですが、 それがVBではできないのでしょうか?? 上記ででていた、配列を使用すればできると聞いてんですが。 職場の先輩に聞くのも、失礼ですし。・・ あんまり聞くと自分で学習する能力がないと思われるから。
ナンチャッテにもほどがある
>>718 ありがとう。
oracleのトリガー機能を使おうと思ったんですけれども
客からレプリケーションに影響がでるのではないかといわれてるんで
だめなんです。
なんとか,VBの中にSQL文を書き込んで処理しなければなりません。
皆さん、お知恵をお貸しください。
>707 すいません。スレ違いだったでしょうか? そのスレは何処ですか?この板のVB.NET質問スレを見てみましたが、それらしいレスは無かったのですが・・・
>>719 >自分で学習する能力がないと思われるから
実際、無いんじゃん。
>>721 影響あるかといわれれば、トリガーで何かあっても相手に影響はないでしょ?
レプリケーションのスナップショットの更新と、こっちのエラーは影響しえない。
725 :
デフォルトの名無しさん :04/08/13 08:56
失礼ながらVBの質問です(^^;) 今、私はVBの改造をしているのですが、仕様をみるところ構造体の中に構造体を 作る内容になっているのですが、そんなこと可能なのですか??
VBそのものを改造してるの?すごいね
あっ、いや、違うんですよ。「VBで改造」です(>_<;) ごめんなさい。。。
>>726 できる。
ところでお前、デフォルトの名無しさんが全部同一人物だと思っているだろ。
えっ!?ひとり芝居なんですか!?
731 :
デフォルトの名無しさん :04/08/13 10:10
VBで作ったActiveX DLLをエクセルVBAで使いたいのですが Excel2002だけインストールされているパソコンでそのDLLを使う場合 ランタイムは必要ですか? Windows2000 VB6.0 Excel2002
いらないんじゃない?
>>732 >>733 テストできるマシンがないので試せませんが
作ったDLLの中にランタイムも含んでいると考えるのが普通でしょうか?
試してみないとわからないということでしょうか///// インストーラにかけてみると登録するコンポーネントがでてくるから わかるかもしれません。 そのコンポーネントはたぶん、.vbpのreferenceだと思いますが。。。 お勧めのインストーラ教えてください
738 :
デフォルトの名無しさん :04/08/14 01:34
VB6で、c:\hoge\hogefileと同名のファイル、ディレクトリの有無をしらべたいのですが、 以下の問題でどうしたらいいか迷っています。 1.Dir関数だと、ファイルが隠し属性のとき、検出できません。 2.GetAttr関数だと、ファイルが存在しない場合、エラーを起こしてしまいます。 2.について、GetAttrがエラーを起こす場合は、ファイルやディレクトリが存在しない場合のみ であれば、On Error Resume Next でエラーを無視しようと思っているのですが、どうなのでしょうか? 何かよい方法があれば、教えてください。
objFoldersColl.Item(index) でナッチさせるのは?
>>738 Dir関数の第二引数にvbHidden を指定すれば隠し属性も検出するぞ。
わかってるかもしれんが、
「ファイル又はディレクトリがあるか?」判断するならいいけど
「ファイルがあるか?」を判断するなら
GetAttrの戻り値にvbDirectoryが含まれていないことも
確認せんといかんぞ。
>>740 調べなおしました。
@ファイルがない、A通常ファイル の場合をOKとして、
Bリードオンリー、Cシステムファイル、Dディレクトリ、E隠しファイル の場合をNGとしたく。
Dir関数を調べたら、↓になりました。(Win2000,VB6sp5)
┌─┬─┬─┬─┬─┬─┐
│@│A│B│C│D│E│処理
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│0│Dir("c:\hoge\hogefile" )
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│1│0│Dir("c:\hoge\hogefile", vbDirectory)
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│1│Dir("c:\hoge\hogefile", vbHidden)
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│0│Dir("c:\hoge\hogefile", vbNormal)
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│0│Dir("c:\hoge\hogefile", vbReadOnly)
├─┼─┼─┼─┼─┼─┼──────────────────
│0│1│1│0│0│0│Dir("c:\hoge\hogefile", vbSystem)
└─┴─┴─┴─┴─┴─┴──────────────────
@とC、AとBの区別がつきません。
そこで、AとBは、
Rtn = GetAttr("c:\hoge\hogefile") And vbReadOnly
で、区別がつきましたが、@とCは、
Rtn = GetAttr("c:\hoge\hogefile") And vbSystem
としたとき、@では、エラーを起こしてしまいます。
↑のとき、GetAttr関数でエラーを起こす=ファイルがないと判断していいんでしょうか?
φルが無い→エラー でないの?
743 :
デフォルトの名無しさん :04/08/14 10:11
オブジェクトを動的生成した後のイベントの実装に関して聞きたいのですが Private WithEvents test As CommandButton Private Sub Command1_Click() Set DynButton = Form1.Controls.Add("VB.CommandButton", "test") End Sub とかでオブジェクトの動的生成した後、 Private Sub test_Click() MsgBox "OK" End Sub とやれば、イベントが取得できることまでは分かったのですが オブジェクト名称を変数にして動的生成を行い、そのオブジェクトの イベントを取得する方法が分かりません。 つまり、n個のオブジェクトを動的に生成したのだが、 n個分のイベントの取得方法が分からないという事です。 動的生成したいオブジェクト ・フレーム、テキストボックス、ラベル、フレキシブルグリッド ※フレキシブルグリッドがオブジェクト動的生成時の配列に 対応していなかったと思います。。 個人的用途で貸借対照表の入力画面を作っているのだが、、、 これが、障害でなかなか先に進めない・・・
>>743 コントロール配列に追加するようにすればいいのでは?
というか、個人的には「コントロールを実行時に動的に生成する必要がある」
というのは単なる思い込みのような気がするんだけど。
動的生成に固執する理由ってあります?
745 :
デフォルトの名無しさん :04/08/14 12:56
Form上のキー入力で、ALTキー+CTLキーが 入力されたのを知りたいのですが、 どうすればいいのでしょうか?
>>745 FormのKeyPreviewをTrueにして
KeyDownでGetKeyboardStateなどの関数で同時押しをしらべたり。
用途によってはキーの状態の変化を見てやらないといかんがね。
747 :
デフォルトの名無しさん :04/08/14 14:11
>>746 そこらへんを具体的にどうすればいいのか教えてください
>>747 キーワードでぐぐるとか、MSDNで調べるとかしてみた?
749 :
デフォルトの名無しさん :04/08/14 14:51
>>748 キーワードでぐぐるとか、MSDNで調べるとかしてみた?
>>743 コントロールをラップするクラスを作って
動的に作成したオブジェクトのそれぞれのイベントは
そのクラス内で受け取るようにすればいけると思うよ。
ラップクラスには識別子を持たせれば
どのオブジェクトでイベントが発生したのかもわかるし。
こんな感じ。 ------------------------------- クラス:cButton Public WithEvents mControl As CommandButton Private mEventHandler As IClickEvent Private mIndex As Long Public Sub Create(ByRef Frm As Form, ByVal Index As Long, ByRef EventHandler As IClickEvent) Set mControl = Frm.Controls.Add("VB.CommandButton", "cButton_" + Format$(Index)) Set mEventHandler = EventHandler mIndex = Index End Sub Private Sub mControl_Click() mEventHandler.OnClick mIndex End Sub ------------------------------- クラス(インターフェース):IClickEvent Public Sub OnClick(ByVal Index As Long) End Sub
つづき ------------------------------- フォーム:適当な名前 Implements IClickEvent Private mBtn(4) As cButton Private Sub Form_Load() Dim x As Long For x = 0 To 4 Set mBtn(x) = New cButton mBtn(x).Create Me, x, Me With mBtn(x).mControl .Move 0, x * .Height: .Caption = "ボタン " + Format$(x): .Visible = True End With Next End Sub Private Sub IClickEvent_OnClick(ByVal Index As Long) MsgBox "Button" + Format$(Index) + " Click" End Sub
>744様 フレーム、テキストボックス、ラベルは、コントロール配列が できたか、、と思うのですが、フレキシブルグリッドが配列に できないようです。。 動的生成にしたい訳は、有価証券報告書の各社の貸借対照表に 柔軟に対応したいからです。。(項目の分け方、記述内容が微妙に 違い、数を明確に定めることが難しい。。) >752様 アドバイス、有難う御座います。 クラスですか。。。当方、クラスとかを使ったことが無いため、、 思いもよりませんでした。。 早速、上記のコードでサンプルを作ってみます。
>>754 VB6で確認しましたが、フレキシブルグリッドのコントロール配列に
実行時に動的に新しいコントロール(つまりフレキシブルグリッド)
追加することできましたよ?
確認したのはこんなコード。
フォームにFlexGridという名前のフレキシブルグリッドを一つ貼り付けて
Indexプロパティを0に設定しておきます。
Private Sub Command1_Click()
Static count As Integer
count = count + 1
Load FlexGrid(count)
With FlexGrid(count)
.Left = FlexGrid(count - 1).Left + 1000
.Top = FlexGrid(count - 1).Top + 1000
.Visible = True
End With
End Sub
756 :
デフォルトの名無しさん :04/08/15 14:22
こんにちわです。手持ちのVBはVer4.0です。 これで、特定のフォルダ内の古くなったフォルダ(例えば作成後5分経過)を消去する プログラムを組みたいと思っています。 タイマーで30秒ごとに起動され、今の時間と比較して、そのフォルダが作成後5分以上 経過していれば消去するような形ですね。 ファイルを消去するものならば、Dirのループ+FileDateTime(pathname)で現在時間と 比較して実行すももの作ったことがありますが、フォルダが作成された日付時間は どうやれば分かるんでしょうか? VB4.0では出来ないんでしょうか? 以上、よろしくお願い致します。m(==)m
758 :
デフォルトの名無しさん :04/08/15 23:54
inetコントロールをつかって、DIRコマンドでディレクトリ名を取得しようと
しているのですが、うまくいきません。
インターネット環境が、ルーターを使ってる場合、特別な設定が
必要なのでしょうか。
ちなみに、プログラムは、イベントプロシージャが次のとおりです。
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim vntGetData As Variant
If State = icResponseCompleted Then
vntGetData = Inet1.GetChunk(1256, icString)
MsgBox vntGetData
End If
End Sub
設定するサブプロシージャが次のとおりです。
Private Sub aak()
With Inet1
.url = "
ftp://ftp.microsoft.com/ "
.Execute , "DIR"
End With
Do While Inet1.StillExecuting = True
DoEvents
Loop
End Sub
>>758 うまくいきませんなんて書かずにどうなるかくらい書きやがって下さいませんかね
は?知りたければ試せって?そうですか。ごもっともでございます。
>>759 実行しても、ディレクトリを取得できないんです。
反応なしで。
761 :
全然わかりません。お教えください。 :04/08/16 05:50
oracle8i + VB6.0 で開発しています。 BBテーブルのレコード(70万件)をAAテーブルにコピーし、同一にしたいです。 毎回 AAテーブルのデータを削除して、もう一度insert するのは大変なので、 前回コピーした差分だけを更新コピーしたいです。 下記のSQLでできるとは思いますが、Oracleのトリガーを使ったほうが安定するのでは ないかと思うんですが、トリガの使い方をネットで検索しているんですがどうもあまり掲載されて ないようです。 よければ皆様お教えください INSERT INTO AA(hincd,hinnm) SELECT hincd,hinnm FROM BB WHERE EXISTS (SELECT hincd,hinnm FROM AA WHERE AA.hincd = BB.hincd)
スレ違いかと思ったが一応VBなんですかね
763 :
デフォルトの名無しさん :04/08/16 06:27
GetAsyncKeyStateで Ctrl+Altをどうやったらわかるのか さっぱし わかりません。 指定するキーコードは いくつなんでしょうか? 二つの場合は、二回 それぞれで調べるのでしょうか?
Altのキーコードが不明です。 あとどのイベントで調べたらいいのでしょうか? Formには いくつかボタンが貼ってある状態です。 フォーカスは、ボタンにあります。
>>761 ORACLEのHPに逝けば、マニュアルを無償でDLできます。
まず、それを見て理解できなければもう一度。
トリガーについては、きちんと理解しないと、トランザクションとの関係やパフォーマンスに問題が出ます。
766 :
デフォルトの名無しさん :04/08/16 09:57
>>761 オラクルのスレにもカキコしてるな
マルチかよ!
767 :
デフォルトの名無しさん :04/08/16 09:58
Formやコードのウィンドウのみを一回で 全部閉じるには どうしらたいいのでしょうか?
>>767 IDEのを?
Ctrl+F4押しっぱなし
inetコントロールのことが馬鹿にもわかるサイトを教えてください。 m(_ _)m
771 :
デフォルトの名無しさん :04/08/16 11:22
>>769 やってみたのか?
やってわかったなら教えてくれ。
>>763 じゃあFormのKeyUPとDownでShift見るだけでもいいよ。
774 :
デフォルトの名無しさん :04/08/16 11:51
>>773 Shiftで ALTキーが 押されてるのかわかるの?
だれか、
>>758 に答えてください。
お願いします。
777 :
デフォルトの名無しさん :04/08/16 11:57
CtrlとAltキーだけが 押されてるのって どうやってわかるのかな?
>>777 きちんとイベント関数のヘルプぐらい嫁。
ビットが立つからそれぞれを見ればわかるだろ?
>>777 Shift And (vbAltMask Or vbCtrlMask)) = (vbAltMask Or vbCtrlMask
>>779 たとえば Aを押しながら CtrlとAltを押す場合
CtrlとAlt以外も押されてるから 無効としたいのだ。
Shiftは 6にしかならんが、どうなんだ?
>>780 ビット演算ってものを理解しろ。
普通にVB使ってるときはこの部分でだけ必要になる。
>776 まずは基本中の基本、「何がどううまくいかなくてどんなエラーメッセージが出るのか」を書いてみれ
>>780 なんだその態度は。
答えはすでに出ているだろうが。
Private Const VK_CONTROL = &H11 'Ctrl Private Const VK_MENU = &H12 'Alt GetAsyncKeyStateだとそれぞれ検出するならいけたみたい。 If (GetAsyncKeyState(VK_CONTROL) <> 0) And (GetAsyncKeyState(VK_MENU) <> 0) Then MsgBox "both" End If
>>784 それじゃ他のキーが押されてる云々ができねーだろ
GetKeyboardStateでしらべりゃいいのに
Call GetKeyboardState(state(0)) If state(VK_CONTROL) And &H80 And _ state(VK_MENU) And &H80 Then MsgBox "こうですか?" End If
>>787 IEにいれたら、フォルダーが表示されてます。
>>788 違うだろ!
他のキー全て見ないとできねえだろ!
If state(VK_CONTROL) And &H80 And _ state(VK_MENU) And &H80 Then For i = 1 To &HFE Step 1 Select Case i Case VK_CONTROL, VK_MENU, VK_HANJA, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU, &HF0, &HF3, VK_ATTN, VK_ZOOM Case Else If state(i) And &H80 Then Label1 = "別のも入ってる" Exit Sub End If End Select Next Label1 = "AltとCtrlのみ?" End If すまん。ちゃんと他のも除去しないとだめなのか。 何か勝手に押されてる事になってるの多いなぁ・・・
792 :
デフォルトの名無しさん :04/08/16 13:22
793 :
デフォルトの名無しさん :04/08/16 13:23
ん?!
>>791 最初の
Case VK_CONTROL, VK_MENU, VK_HANJA, VK_LCONTROL, VK_RCONTROL, VK_LMENU, VK_RMENU, &HF0, &HF3, VK_ATTN, VK_ZOOM
は 何?
>793 えっと、 左Ctrlと左Altだけ押してそれでもまだ押してる状態って 判定されちゃったキーコードを除外していったらこんなことに・・・ 理由は不明(特に定数ないやつなんてMSDNでみたら 「OEM specific」だとか何とか。
795 :
デフォルトの名無しさん :04/08/16 13:34
>>794 右のCtrlとAltを区別しないとすると 別の処理が必要ですか?
797 :
デフォルトの名無しさん :04/08/16 13:42
質問させてください。 VB6で、タスクバーに入ってるウィンドウ(最小化されている)を、 タスクバーをクリックでなく、プログラムから復帰させるにはどうすればいいでしょうか? 別ウィンドウでボタンを押したら開くみたいにしたいのですが…
798 :
デフォルトの名無しさん :04/08/16 13:47
show ?
親画面からボタン押された時に。 子画面(Form2)がモーダルだとこれではムリだけど If Form2.WindowState = vbMinimized Then Form2.WindowState = vbNormal End If
800 :
デフォルトの名無しさん :04/08/16 13:52
話は少し逸れるが、スペイン語キーボードだと右Altキーと左Altキーで別の役割がある。
802 :
761です。 :04/08/16 23:08
オラクルホームページに行ったり、ネットを検索したのですが、 全然見つかりません。 テーブルの内容をそのまま違うテーブルにコピーするトリガーとかって あんまり使わないのかな? スナップショットでもできるとか書いてあるんですが、なんか上手くいかないです。 もう泣きそうです。
オラクルシルバーの俺様に言わせればこんな物、さっぱり分からん。
そんなもの飾りです えらい人にしか騙せんのです
お聞きします。 ショートカットボタン(たとえばF1)とか押したら、 何かしらの動作するようにしたい場合は どのようにすればよいですか?
も一つ簡単な質問ですが お願いします。 初心者的で申し訳ありません。 窓のはじっこにマウスをもっていくと、窓の大きさが変えられるのですが、 これを不可にする方法を教えてください。
>>805 フォームのKeyPreviewをTrueにして、Form_KeyDown()イベントでKeyDownがvbKeyF1であるか評価する
もっとグローバルに監視したいなら、"HotKey VB"とでもしてぐぐること
>>806 BorderStyleを1-固定に。
親切にありがとうございました〜
>>787 今日、AirH”でやったら、ディレクトリが取得できました。
ということは、ルータに遮断されてるってことでしょうか?
ルータを使用している場合、どうすればいいのでしょう。
>>802 それはあなたがトリガーを理解できてないだけじゃん。
マニュアルDLした?で読んだ?
トリガーはレコード単位で追加更新削除なんかがあったときにイベント的に処理する仕組みですよ。
なんで、あなたの考えてる一括コピーじゃありません。
元側が操作されたときに逐次同期をとるような感じになります。
質問だした最初のころに書いたかもしれないが、リネームじゃだめなの?
1.ダミーにデータ挿入
2.現テーブルをリネーム
3.ダミーを現テーブルにリネーム
2−3間が問題になるが、これが一番早いと思うけど。
あと、インデックスなんかがある場合は、その名前はテーブルと独立してるので注意。
812 :
デフォルトの名無しさん :04/08/17 09:03
>>810 ルーターが原因なら、ルーターの設定をしないと。
VBとは 関係ない。
だな、ルーターの説明書を読んで、必要なポートを開ける。
814 :
デフォルトの名無しさん :04/08/17 09:48
Functionを記述する際に 頭に Privateとか Publicをつけなかった 場合は、それらのどちらになるのでしょうか?
>>814 MSDNのFunctionの解説の一番最初の文章に書かれているが。
どうしてそれぐらい調べないの?
816 :
デフォルトの名無しさん :04/08/17 11:02
どうしてMSDNを見ないやつが多いのか? 1.それは見ないのではなく、見れない。 2.インストールしても CD2が要求される。 などからであろう。
817 :
デフォルトの名無しさん :04/08/17 11:12
お聞きしたい事があります。 win2000上でVB6.0 と farpoint spreadデザイナ var6.0を使用しています。 まずはデザイナでデフォルトとして1行2列の表を作っています。 それからプログラム内で行数を増やすために Private Sub Form_Load() With vaSpread1 '既存行への設定 .Row = 1 .Col = 1 .Text = "hed" .Col = 2 .Text = "head2" .MaxRows = 2 .MaxCols = 2 '新規行への設定 .Row = 2 .Col = 1 .Text = "2" .Col = 2 .Text = "naiyoiu2" End With End Sub というプログラムを組んだのですが、実行すると1列目はテキストが設定され 表示されるのですが、表示されるのは1行目だけで2行目が表示されません。 スプレッドのプロパティを始め色々調べてみたのですが解りません。 解決方法をご存知の方よろしくお願いいたします。
818 :
デフォルトの名無しさん :04/08/17 11:21
819 :
デフォルトの名無しさん :04/08/17 11:32
Rowって 0から始まるから MaxRows = 2 だと 多分 0と1行しか有効では ないかと思われ。
>>819 レスサンクスです。
試しに.maxrows=3にしてみましたが、駄目なようです。
821 :
デフォルトの名無しさん :04/08/17 11:55
WIN2000上でVB6.0(SP5)を使用しています。 EXEを実行しているとエラーメッセージとして「8007000E」 というエラーが出ます。このエラーの内容を教えてもらえないでしょうか。 色々調べたのですが、メモリ不足という情報もあったのですが、 実際そうなのでしょうか。確実な事を知りたいので どうかよろしくお願いします。
>>821 Google等で調査済みでしょうから細かいことは言いませんが、普通に考えればメモリ不足です。
それが確実にメモリ不足で発生してるかどうかを他の人に判断させたいならソースを公開するしか無いと思います。
823 :
デフォルトの名無しさん :04/08/17 13:20
どっかで無限ループしてメモリを消費しているに間違いないっ。
824 :
デフォルトの名無しさん :04/08/17 14:36
>>816 指定項目 内容
Public 省略可能です。
すべてのモジュールのすべてのプロシージャから参照できる
Function プロシージャを宣言するときに指定します。
Option Private ステートメントが記述されているモジュール内で
使用した場合、その Function プロシージャは、プロジェクトの
外からは参照できません。
Private 省略可能です。
Function プロシージャを記述したモジュール内のほかの
プロシージャからのみ参照できるプロシージャを宣言するときに指定します。
これのことか?
省略した場合は、どうなるのか書いてないぞ。
825 :
デフォルトの名無しさん :04/08/17 14:39
ADODBを使うには、何をインストールすればいいのでしょか?
>817 | A | B | ----------------- 1 |hed |head2| ----------------- 2 |2 |naiyoiu2| ------------------ デフォルトでは一応こうなった。 何か別のプロパティをSpreadデザイナで 変えてない?
>824 >解説 > >キーワード Public、キーワード Private、またはキーワード Friend を >指定しない場合、Function プロシージャはパブリックが既定値になります。 どう考えてもこっちじゃねーの?
>>824 その下にある、解説の1行目だよ。
ていうかHelp引いたんだったら、一応全文読め。
>>824 815だけど、きちんと”解説”を読めとかいてあるだろ?
なんで>>824の部分だけ読んで、そこまで強気になれるんだ?
たかだかFunctionのヘルプのページぐらい全部読めよ。
以下、ちょっと下も読めないあんたのための抜粋。
解説
キーワード Public、キーワード Private、またはキーワード Friend を指定しない場合、
Function プロシージャはパブリックが既定値になります。
830 :
デフォルトの名無しさん :04/08/17 14:53
ぷっ そんなに引用したいなら聞いた時に出せよ。
>>830 あなたを元質問者として、一応書いておくけれど。
その程度のことを聞くから、誘導・教育を含めてMSDNを読めと書いてるんだよ。
Forループの書き方がわかりませんとか、変数ってなんですか?ってのと同レベルだから、
あんた勉強足りないよ、少しは資料を読みなさいっていうこと。
つうかさ、普通は恥ずかしくて聞けないよな。このレベル。
まあ
>>830 みたいなのは、ここで注意しなくても社会が制裁を加えてく
れるよ。相手にしてもイライラするだけ無駄だからスルーしよう。
833 :
デフォルトの名無しさん :04/08/17 15:37
文字列の変数A、BがあってAにForm名、BにTextBox名が入ってます。 そのAのBに値をセットするには、どうしたらいいのでしょうか? ループとかさせずに一行とかでできる方法を教えて下さい。
つうか、質問の意味がわかってるのか?
>>834 さん。
私はわからんぞ。
1.2行目の文面が何をやりたいのかわからん
2.なぜ3行目でループの話がでてくるかわからん。
ループさせると時間がかかるのではないのかと思うからです。 テーブルに 30個分ぐらいのコントロールのデータをもたせてそれをセット させようと考えているのです。 ループさせるとデバッグも大変かな?と思うのですが・・・。
ま、ループさせればできないこともないからです。 っていうか、そこらへんが見えてないと 835みたいになってしまいますが。 で意味は、いろんなFormがあるので、その変数にFormのテキストボックスに 値をセットしたいという意味です。 テキストボックスも複数あるので、オブジェクト名を変数に入れて処理できないかと 思っているのです。 インデックスを使えば、少しは 簡単になりますが、他に与える修正量が 大きくなるので、インデックスは使えません。 ま、そのテキストボックスの一部は、インデックスを既に使ってますけどね。
つうか、まずてにおはがおかしい。それを注意してくれ。 文面が全然読めない。w オブジェクトを動的に名前で参照する仕組みはこのスレのどっかに話題が出てたはずなのでそこを参照。
839 :
デフォルトの名無しさん :04/08/17 16:05
昔のスレじゃないのか?
840 :
デフォルトの名無しさん :04/08/17 16:07
>つうか、まずてにおはがおかしい。 >文面が全然読めない。w おまえが、おかしすぎ(w
841 :
デフォルトの名無しさん :04/08/17 16:09
>>840 じゃあさ、
>で意味は、いろんなFormがあるので、その変数にFormのテキストボックスに
>値をセットしたいという意味です。
って日本語としてきちんと読めますか?
あと、元質問者へ・・・CallByNameじゃ駄目なの?
>>842 質問者じゃないけどForm名TextBox名からどうやって使うの?
844 :
デフォルトの名無しさん :04/08/17 16:16
>>842 CallByNameの使い方が、いまいちよくわかりません。
最初の質問のあれとしてはCallByNameじゃないですね。ごめん。 オブジェクト名からオブジェクト実体を取得するのはVBでは確かできないはず。 ただ、オブジェクトの参照自体を変数にはできるので、TextBoxへの参照をアプリのグローバル変数として 一括して配列とかで管理はできます。
846 :
デフォルトの名無しさん :04/08/17 16:29
with a .Controls(b).Text =値 end with でOK
847 :
デフォルトの名無しさん :04/08/17 16:34
なおインデックスがある場合は、 .Controls(b).Item(index).Text = となる。
>>846 多分元の質問は、値と入れ先に順番性というか1:1関係を求めてると思うんだが。
849 :
デフォルトの名無しさん :04/08/17 16:37
a = "Form2" b = "Text1" With a .Controls(b).Text = "値" End With できないのだが・・・
>>849 順番性を持たせるには、配列番号で管理するしかないでしょうね。
Formとその中のコントロールで二元配列にして、それぞれの値を定数で全部定義(ベタだなw)
public objCtls[][] as object
public FRM_A as integer = 1
public FRM_A_TXT_A as integer = 1
public FRM_A_TXT_B as integer = 2
で、その二元配列構造と、代入すべき値のテーブル(?)を連携させる。
つうか、元の人がそもそも具体的に何をやりたいのかわからない。
大体において、そういう場合は、根本的に考え方が間違っていて、変な実現案をやろうとして質問しているような。
852 :
pakuchan :04/08/17 16:56
Windowsのログインの制御をVisualBasicのプログラムで行いたいのですが, できないものでしょうか? 具体的には,USBやRS232Cで接続した磁気カード リーダーから磁気カードの内容を読み込むことにより,Windowsへのログイン をおこなうようなシステムを作りたいのですが...
>>852 やろうと思うと、通常のアプリじゃなくて、サービスで動く形になるよね。
あと、ログインの制御ってAPIばりばりでできるのかな?ってぐらいAPI使うと思う。
なので、まずVBで作るものじゃないと思います。
854 :
デフォルトの名無しさん :04/08/17 17:00
>>852 Form2に Text1があれば、できるはず。
なければできない。
できないって、なんかエラー出たの?
>>854 横レスだけどあれはできないでしょ?
文字列変数に対してWithブロックを適用して、その中にコントロールがあるってのは無理がある。
>>850 Dim a As Form
Set a = Form2
ってしてみ
>>856 その"Form2"をオブジェクトじゃなくて、文字列として持っていて、
それをオブジェクトに変換(?)して操作したいんでしょ?
よく見てみたら Formは 文字列でなくても、よかったです。 関数にして呼ぶとき、Formをセットしてあげればできるので 文字列は、テキストボックスだけでいいです。
質問の意味がわからないが、 Dim x As TextBox, y As TextBox Set x = Form2.Text2 Set y = Form3.Text1 x.Text = "あああ" y.Text = "いいい" でいいんじゃないのか?
> 質問の意味がわからないが、 この手の質問は常にオブジェクト指向が破綻しているので仕方ない。
VBでオブジェクト指向を語ること自体(ry
863 :
デフォルトの名無しさん :04/08/17 18:50
VBでオブジェクト指向もどきをすること自体(ry
VB.NETならよかったのにね。プ
865 :
デフォルトの名無しさん :04/08/17 19:16
VB.NETだったら、このスレには、きてないって。
866 :
デフォルトの名無しさん :04/08/17 20:40
右クリックでポップアップメニューを出すには、どうしたらいいのでしょうか?
>>866 マウスのイベントで右クリックを検出してPopupMenuで表示
TreeViewコントロールのフォントをMSゴシックにしても 全角1文字の横幅が半角2文字分の横幅にならず やや半角2文字分の横幅が大きくなってしまいます。何故でしょうか? 環境は、vb6 sp5,win2000です。
>>868 フォントサイズを3の倍数にしてもそうなりますか?
透過GIFをリソースファイルから読み込みたいんですが, どうしたら良いのでしょうか? 保存して、LoadPictureは嫌なのですが。。。
>811さん ありがとう。 マニュアル読んだけど、自分なりに理解して試したんですけど駄目でした。 私が考えてたのは、元に元表からSQL*PLUSでinsert文発行して、それから 発生するデータはトリガーで逐次更新させようと考えてました。 811さんからお教えいただいたリネームも勉強して、問題解決の一つの手段として 考えたいです。 またお教えください。 ありがとうございました。
質問です。 フォームとそれに貼り付けられてるオブジェクト全てを半透明化するにはどうすればいいでしょう?
VBからVCで作ったDLLにRGBQUAD構造体(多次元配列)を渡したいのですが 上手くできません(´・ω・`) どのようにすればいいでしょうか・・・。
>>874 配列の最初の要素をByRefで。
つまり、配列の先頭アドレスを渡す。
>>875 できました!ありがとう。・゚・(ノД`)・゚・。
とおもったら出来てなかった。・゚・(ノД`)・゚・。 //VB側 Declare Function fncTest Lib "test.dll" (ByVal p_rgbquad As Long) As Long Dim rgbquad as RGBQUAD '実体 Dim p_rbgquad as Long 'ポインタ変数 p_rgbquad = VarPtr(rgbquad(0,0)) '先頭のポインタ取得 ret = fncTest(p_rgbquad) '呼び出し //DLL側 TEST_API int __stdcall fncTest(RGBQUAD *rgbquad) { rgbquad[0,0].rgbRed = 255; //これを戻したいです return 0; } といった感じでDLL側に渡す事はできたのですが、 これでは戻り値(rgbquad)を上手く格納できません。 どこがおかしいのでしょうか(´・ω・`)・・・。
>>877 (*rgbquad[0,0]).rgbRed = 255; //これを戻したいです
か
rgbquad[0,0]->rgbRed = 255; //これを戻したいです
でどうだろう?
一度SAFEARRAYも調べた方がよさげ
VC側でデバッガを動かして、 渡された領域がきちんと確保されて、かつVC側で認識できてるでしょうか? それぞれの配列要素にVB側で値を適当に設定してVCで見たときに期待通りに渡ってる? この手の問題って、ヘルプに若干記述があるけど難しいよね。 別策として、共有メモリーとかで情報を受け渡ししてはどうでしょうか?
どうでもいいけどVBの宣言はこうでもいいはず。 Declare Function fncTest Lib "test.dll" (ByRef p_rgbquad As RGBQUAD) As Long
レスありがd。
>>878 アロー演算子を用いた場合、
error C2819: クラス 'tagRGBQUAD' にはオーバーロードされたメンバ 'operator ->' がありません。
error C2227: '->rgbRed' : 左側がクラス、構造体、共用体へのポインタではありません。
となってしまいます。
とりあえずSAFEARRAYについて調べてみようと思います。
>>879 デバッグの仕方がいまいちわからず確認できていませんが、
値を操作できるので渡っていると思います。
デバッグの仕方についてなんですが、VB側でexeを出力するときに
シンボリックデバッグ情報を作成してアタッチしているのですが
シンボリック情報が合致しないとでて上手くいきません。
何か間違っているのでしょうか・・・。
882 :
デフォルトの名無しさん :04/08/18 13:55
>>881 DLL側のデバッグの設定で、実行可能ファイルに対象のVBのEXEを指定するだけ。
その状態でDLLのデバッカを起動すると、VBのEXEが上がるはずです。
あとはDLLをコールする操作をしてあげればVC側でブレークできます。
追記で、詳細はMSDNの DLLのデバックを参照。 あと、MSDNでDLLをキーワードにして出てくる見出しを一通りみといたほうがいいよ。
VB側の宣言も、C側の引数も多次元配列じゃなくない?
>>885 配列の先頭ポインタを渡すからアレでいいとおもうけど。
MSDNのDLLプロシージャに配列を渡すの項とか見る限りはそうおもう。
どうやら先頭の値だけは変更されますが、
他の値がまったく返ってきてないようです。
>>885 さんが言ってる事が関係しそうな感じがします・・・
>>887 ちょこっト前に書いたけど、VB側で多元配列の先の方の要素に値を入れて、
それがきちんとVC側に渡ってる?(=自分が思い描いている領域がきちんと両者で共有されてる?)
あと、MSDNのDLLプロシージャにxxxを渡すシリーズをきちんと読んでみてね。
対象の構造体に文字列とか入ってないですよね?その場合って確かNGです。
rgbquad->rgbRed = 255; だったら値が入るのでは? Dim rgbquad as RGBQUAD ←が配列ではないし Cの関数に多次元配列を渡すんだったら、 fncTest(RGBQUAD **rgbquad) とかじゃないの?
>>877 のコード写し間違ってました(゜Д゜;)
×Dim rgbquad as RGBQUAD '実体
○Dim rgbquad() as RGBQUAD '実体
申し訳ないです(つд`)
>>888 配列の先頭の値しか渡されていないような感じがします。
値は、「255 '・'」みたいな感じになってます。
891 :
デフォルトの名無しさん :04/08/18 15:38
>391 そんでは自作のクラスのプロパティに変な値を突っ込まれたんで Err.Raise したら 突っ込んだ元でキャッチできないのはなんで? モジュールを超える方法は?
Redim rgbquad(x,y) という風にあとから動的に確保しています。
つうか、
>>889 さん指摘の箇所はどうなの?
C側がその通りだとしたら、構造体のポインタ渡しなんだから、言われたとおりの処理してますって状態だよな。
894 :
デフォルトの名無しさん :04/08/18 15:58
教えていただきたい事があります。 他の掲示板でも質問したのですが、流されたようなので質問させて下さい。 環境はwin2000 VB6.0 farpoint SPREADデザイナ ver6.0 です。 スプレッド行の特定の行をクリックしたときに、クリックに対して無反応 (反転も選択もされない)にする事は出来るのでしょうか? 扱い的にはヘッダのような扱いが出来る設定をしたいのです。 行単位で設定したいのですが、ご存知の方がいましたらお願いいたします。
というか、VBのRedimで確保するとメモリ上でCの配列とは違う風になっていそうな予感。 Redimで配列の要素数を変える都度、一旦古い分を破棄してから、 新しい要素分確保するってなわけじゃないんじゃないだろうか?
いや、ゴメン。 MSDN見たらそれは大丈夫そうでした。
>>889 ,893
その場合、VBからはどのような値を渡せばいいのでしょうか。
>>895 わざわざ調べてもらって申し訳ないです(つд`)
いや、待てよ。 「DLL プロシージャがオートメーションの配列データ型を直接受け取らない場合でも、 数値配列であれば、配列全体を渡すことができます」って書いてあるな。 何これ? もう面倒だからオレだったら、 VB側から配列の要素を一つずつループで渡して誤魔化すけどダメ?
多元配列を一気に渡して処理しなければならないなら、ループは難しいでしょ? だとしたら、最初に書いたけど共有メモリ(めもりーまっぷどふぁいる。)で一気にやり取りだよ。
>>898 そこの説明を正しく理解するには、オートメーション(=OLE)をかなり理解していないど駄目です。
数値型がOK言ってるのは、多分VBの他の型がOLEオブジェクトだからです。文字列もBSTR型でしょ?
>>894 デザイナじゃなくてLeave*** イベントでキャンセルするしか思いつかん。
>>901 デザイナ側で初期設定は出来ないのですか…。
レスサンクスでした
>>877 多次元配列なら[0,0]じゃなくて[0][0]じゃないのか?(Cだと[0,0]は[0]と同じ。)
それにCだと多次元配列は最外周以外の添え字を省略できないから、
TEST_API int __stdcall fncTest(RGBQUAD rgbquad[][256])などと固定する必要がある。(ただしVBから多次元配列を渡せないなら使えない)
あるいはTEST_API int __stdcall fncTest(RGBQUAD rgbquad[], unsigned n)として、
rgbquad[x][y]の代わりにrgbquad[x * n + y]とするかしかない。(nは2次元目の要素数)
この場合VBでも1次元配列にしてrgbquad(x * n + y)としていく必要がある。
>>874 //VB側
Declare Function fncTest Lib "test.dll" (rgbq As RGBQUAD) As Long
Dim rgbq(15, 15) As RGBQUAD
Dim i As Long, j As Long
dim ret As Long
ret = TestFunc(rgbq(0, 0))
Text1.Text = ""
For i = 0 To 15
For j = 0 To 15
Text1.Text = Text1.Text & rgbq(j, i).rgbRed & ", "
Next j
Text1.Text = Text1.Text & vbCrLf
Next i
//DLL側
int __stdcall TestFunc(RGBQUAD *rgbq)
{
int i, j;
for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++) {
(rgbq + (16 * i + j))->rgbRed = 16 * i + j;
}
}
return 0;
}
>>905 ×int __stdcall TestFunc(RGBQUAD *rgbq)
○int __stdcall fncTest(RGBQUAD *rgbq)
スマソ。
907 :
デフォルトの名無しさん :04/08/18 17:33
テキストボックスのようなので、表示のみに使いたいのですが、 カーソルがいかない設定か、ほかのコントロールはありますでしょうか?
label
なんとか形に出来そうです。 ありがとうございました。
>>909 できれば、最終的にどうやってできたかご報告くだされ
911 :
デフォルトの名無しさん :04/08/18 18:21
AというFormのソースの中で BというFormを表示せずに Bにあるテキストボックスのテキストに値を入れたいのですが、 どうすればいいのでしょうか?
load formB formB.Text1 = "hoge"
913 :
デフォルトの名無しさん :04/08/18 19:02
なぜ、他のFormのコントロールに値をセットすると そのFormが開くのかが知りたい・・・。
仕様
開かれても表示しなければいいんじゃない?
>>913 まず普通に考えて、実態のないものにセットできっこないじゃない。
で、CとかJAVAなら実体のないものにアクセスしたら、本当にぬる・・・になる。
でもって、VBの場合、VBさんって気が利くからそのオブジェクトをアクセスできるように
親を含めてロードしてくれると。w
ぬるぽ
>913 え、マジでそうなる? 今試してみたけど、Form上のTextBoxに値をセットしただけじゃ、LoadはされるけどShowはされなかったにょ。 VB6.0SP5+Win2K
Form_Loadに、 Me.show が入ってるんじゃないの?
920 :
デフォルトの名無しさん :04/08/18 20:26
教えていただきたい事があります。 環境は win2000 + VB6 です。 あるmdbファイルを、リソースファイルとして保持しておき、フォームからパスワードが通ったときだけ特定のフォルダにインストールするようなアプリケーションを作成しています。 で、ファイルをコピーする部分なのですが、以下のソースでコピーしているのですが、このファイルを開くことができません。 (「データベースの形式’C:\hoge\hoge.mdb’を開くことができません」というエラー。) バイナリエディタで開いてみたところ、、の12バイトに何かが追加されていました。 そこで、頭12バイトを削除してみると、開けるようになりました。 Private Sub Command1_Click() M = LoadResData(101, "CUSTOM") Open "C:\hoge\hoge.mdb" For Binary Access Write As #1 Put #1, , M Close #1 End Sub これは何が原因でこうなっているのでしょう? また回避策はございますでしょうか。 すいませんが、どうぞよろしくおねがいします。
PUTするまえにMの先頭12バイト削除すれば?
922 :
デフォルトの名無しさん :04/08/18 20:33
>>921 ありがとうございます。
それも考えたのですが、なにか根本的な間違いがあるのかなと思いまして・・・。
それなら後学のために知っておきたいと思って、お伺いした次第です。
924 :
デフォルトの名無しさん :04/08/18 21:01
>>923 まさにこの通りですね、納得です。スッキリしました。
本当にありがとうございました。m(_ _)m
ヘルプや書籍を読んでもなかなかファンクションプロシージャを理解できなく いつも標準モジュールにグローバル変数を宣言して値を扱っています。 どのドキュメントやホームページよりも詳しくファンクションプロシージャについて説明してくださいませ。
>>905 のコードほとんどそのままで出来ました。
理屈としては
>>903 が言ってるような感じでしょうか。
>>905 のコードを実行して描画すると黒->赤のグラデーションが表示されます。
>>925 ヘルプや書籍を読め、
それで理解できなければヘルプや書籍を読め、
それでも理解できなければヘルプや書籍を読め。
>>925 ファンクションとは関数である。
引数を与えることによって戻り値が帰ってくる。
これ以上どうやって説明をしろと?
少し勉強して、実際の実務で使うプログラムを組めば、 標準モジュールにパブリックの関数をかいて、そこでグローバル変数を扱う、 なんて発想は絶対出てこなくなるよな。 まあ、それが何故ダメか理解できないで、そういうのを続ける奴は、一生そうなんでしょ? 言語とかの問題じゃなくて、根本的にプログラムを組むべkじゃない人種。
荒れる悪寒なのでトリップつけますた
>>931 つうか、そういう問題じゃない。
For文ってなんで使うんですか?っていうレベルの問題。
言語スレじゃなくて、もっと根本的なプログラムの基礎のスレに逝ってくれ。
では論点をすりかえて、 クラスやファンクションプロシージャを使わないで、 Visible=Falseなフォームやグローバル変数を駆使すれば クラスやファンクションプロシージャと同じ機能を実装したモノをつくれるというのは 正解ですよね。
>933 NG 似たような挙動をさせる事はできるが、同じ機能は無理。 スコープとか生存期間とか諸々の問題があるから。 変な理屈こねくりまわしてないで入門書嫁。
>>933 不正解。
Formは画面のWindowを現すもので、特定の値の集合とかを扱うものではない。
つうか、そういう話はこのスレの話じゃないから、どっか適当なところへ逝ってくれ。
プログラムの一般論の話でしょ?
しかもかなり電波が入ってるか、釣ってるか。
そもそも論点をすり替えようなんて(w
久々に真性が登場ですか。 夏の風物詩でつね。
基本や定石はできないけど 他の人には思いつかないウラワザはよく思いつきます。 結果の出せない天才です。
というわけで、以下皆様無視を。
将来的にはVBやVB.NETでデバイスドライバを開発できるようになるんでしょ? だってVBの予約語などをアセンブラや機械語に変換してからコンパイルするだけだし・・・
941 :
デフォルトの名無しさん :04/08/18 23:43
なんというか中途半端な知識を駆使している新人みたいな理屈だな。
手持ちの材料で勝負しようという意気込みは買うがな。 ビギナーズラックはすぐに枯渇する禁断の技能だよ。
次の質問ドゾー
945 :
デフォルトの名無しさん :04/08/19 00:11
なにをしつもんしようとしていたかおもいだせまんせ
947 :
デフォルトの名無しさん :04/08/19 00:43
948 :
デフォルトの名無しさん :04/08/19 01:41
ひとつ、お願いします。 フォーム上に配置したFileListがあるのですが。 この中にファイル名を表示させた時、縦にファイルが収まらない時は 自然にスクロールバーが出現しますよね。 で、ファイル名が長すぎて横に収まらない場合。途中でちょん切れてしまいます。 横のスクロールバーを出す方法はあるのでしょうか? よろしくお願いしますm(__)m
>>948 「VB リストボックス 横スクロールバー -NET」でぐぐれ
950 :
デフォルトの名無しさん :04/08/19 09:48
VB6.0SP6を使っています。 FORMを最初にロードしたときに一緒に、 Combo1_Click() Form_Resize() 等のイベントが一緒に起動してしまうんですが、 これを抑制する方法はあるのでしょうか?
ありません。 普通はそれらのイベントが起こっても問題ないようソフトを組みます。
952 :
デフォルトの名無しさん :04/08/19 10:17
すみません、VB6.0SP6 なんですが・・・ 自作クラスの Public Property Let プロシージャで Err.Raise(vbObjectError + 513・・・) しても呼び出した側、つまり値を代入した側では ON ERROR GOTO ・・・で取れないもんなのでしょうか?
953 :
デフォルトの名無しさん :04/08/19 10:18
そろそろ次スレ、誰かたてて。
>>950 コンボのアイテムをFormロード中に選択したりして連鎖してるんだろうね。
まあ、ベタな逃げとしては、フォームロード中フラグをグローバルかフォームレベルで保持して、
そのフラグがonなら連鎖したくないイベントはそのイベント関数の頭でチェックして抜けるようにする。
>>950 Loadイベントプロシージャ内において、
Combo1_Click():現在の選択項目に関する変更を行わない。(ex.ListIndex)
Form_Resize():SetWindowPos()をSWP_SHOWWINDOW指定でコール。
956 :
デフォルトの名無しさん :04/08/19 10:41
コマンドボタンのキャプションを複数行で中央そろえで表示したいのですが、 どのようにすればいいのか、どなたか教えて下さい。
>952 取れるよ
958 :
デフォルトの名無しさん :04/08/19 11:11
構造体の中身を一気に初期化する方法を教えてください type SAGE SAGE1 as LONG SAGE2 as STRING SAGE3 as ... .... end type dim s as SAGE s.SAGE1 = 0 ...
959 :
デフォルトの名無しさん :04/08/19 11:13
>>957 なぜか出来ません・・・。
何がしたいかっつーと、DAO で MDB にアクセスするクラスがあって、EXECSQL のエラーを ON ERROR でトラップ、
それをそのまま クラス内で Err.Raise(Err.Number,Err・・・) して呼び出し元でも ON ERROR でトラップ・・・していって
最終的にフォームまで戻したいのです。フォームと アクセスクラスの間には別のクラスもはさまっています。
ON ERROR の処理中に Err.Raise するのがダメなのでしょうか?
Err.Raise する前に ON ERROR Goto 0 してもダメですし・・・。
960 :
デフォルトの名無しさん :04/08/19 11:26
リソースファイル500MBって無謀ですかね? 取り込もうとするとフリーズしちゃうんですが。 こういうときって、みなさんどうされるんでしょう?
961 :
デフォルトの名無しさん :04/08/19 11:52
ON ERROR は、全体でするのではなくて、関数ごとに入れたほうがベスト。
962 :
デフォルトの名無しさん :04/08/19 12:08
>>961 続行不可能なエラーの場合、メッセージを出して End するとしても、ActiveX DLL 内では End 出来ませんよね・・・。
クラスですから、インスタンスを作る側が EXE か DLL かを意識して作るべきでは無いでしょう。
この手のエラー処理は皆さんどのようにされているのでしょうか?
私としてはエラーが発生したらメッセージを出してフォームの「終了」ボタンしか押せなくしたいのです。
継承も無い不完全な VB6 でクラスを使い倒すなって事なんでしょうか・・・。
>ON ERROR の処理中に Err.Raise するのがダメなのでしょうか? なんだ、自分で答えわかってるじゃん。 だったらこんなとこにレスしてる間に(以下略 VB批判する前に、もう少し自分を研鑽するべきじゃないのかと小一時間(以下略
964 :
デフォルトの名無しさん :04/08/19 13:01
初心者に使いやすそうなフリをして実は・・・。
965 :
デフォルトの名無しさん :04/08/19 13:03
961の内容は、 エラーが発生しそうな部分は、関数とかで外だしにして、その関数の 戻り値でエラーが発生したかどうか判断しろっていう意味。 そうすれば、どこでエラーが発生したのか、つかみやすくなる。 全体で、エラートラップをかけると原因解明に 困難をきたす場合がある。
質問が変でしょうか?
>>966 定期的に出る質問だから、過去スレみてくれ。
VBのみではできない。APIを使えばMemsetみたいなことはできる。
>959 多段階のエラートラップも普通にできるはずだけど・・・ On Error中のErr.Raiseも普通にやるし。 どっかでErr.ClearとかResumeNextしてるんじゃねーノ? ステップで実行してみるとかして、期待してない動作をしてる部分を特定すべし。
>>968 こじんまりしたプロジェクト作ってみましたが・・・やっぱり出来ません。
コントロールのプロパティ異常はトラップできるのだから出来てもよさそうなんですが・・・。
'フォームはこんだけ
Private Sub Form_Load()
Dim c As New Class1
On Error GoTo EH
Call c.sss
Stop
End
EH:
Stop
End Sub
'クラスはこれだけ
Option Explicit
Public Function sss()
Err.Raise (vbObjectError + 100)
End Function
なぜなんでしょう?
Call c.sss の次にStopで止まるって事け? こっちでも試してみたけど正常にEH:のStopで止まったぞ。 ちなみに Err.Raise (vbObjectError + 100) のカッコは不要。カッコ付きならCallを付加すべし。
>>969 ?ちゃんとエラートラップできたけど?
ひょっとしてVB上から実行して Err.Raise の行で止まってしまうと騒いでいるだけ?
・・・そういうオチか・・・
すんません、そうみたいです。 EXE作ると上手くいきますね・・・。そういうもんなんですか・・・? 知りませんでした。完敗です。
ツール-オプション-全般-エラートラップ-エラー処理対象外のエラーで中断
つーか、関数の戻り値でエラー返すのってダサいよね
>>975 ありがとうございます。
みなさんプロフェッサーですね・・・。
つうか・・・。 オプションのそこの仕組みをいじらないで、今までどうやってデバックしてたの? エラートラップ内のデバックするときとか、逆にエラー時に止めたい場合とか切り替えないとできないじゃん。
>>967 ありがとうございました。
API使ってまではやりません
980 :
デフォルトの名無しさん :04/08/19 14:32
981 :
デフォルトの名無しさん :04/08/19 14:34
そんなことより誰か 956 を教えて。
>>980 オブジェクト指向では、エラーの情報自身もオブジェクト同士のメッセージのやり取りと考えるので、
エラーを投げるほうがいい。
984 :
デフォルトの名無しさん :04/08/19 14:49
>>979 簡単方法
もう一つ同じ構造体で定義した
変数を用意して、
初期化したい構造体変数 = もう一つの構造体変数
という様に、ぶち込めば初期化される。
>>984 そのダミーを誰が初期化するのかと・・・・。
単純に諦めて構造体初期化関数作ればいいじゃん。
>>985 その初期化って、
別にメモリを解放する意味で言って
いるわけではなかろう。
初期値に戻すという意味だろ。
type SAGE
SAGE1 as LONG
SAGE2 as STRING
SAGE3 as ...
....
end type
dim s as SAGE
s.SAGE1 = 0
その構造体をどういうことに使いたいのかわからんから何とも言えんよね。 クラスモジュールでやった方がいいのかもしれんし。
988 :
デフォルトの名無しさん :04/08/19 15:21
>>982 vbCrLfで改行させてるんだけどさ。
テキトーなところでは 改行できないからね。
>>986 対象の構造体を初期化する場面が、いろいろな場所にある場合、
あなたの考える初期化用変数ってスコープが大きくなりますよね。
それなら、普通に初期化関数を通してもらったほうが安全だとおもうけど。
>>984 一瞬キター!!って思いました
>>985 ですね
>初期値に戻すという意味だろ。
そうですよ
>その構造体をどういうことに使いたいのかわからんから何とも言えんよね。
データベーステーブルの項目入れに使ってます
VBの変数がIsEmptyの状態でデータベースの項目に代入すると
おこられます
>クラスモジュールでやった方がいいのかもしれんし。
できたらワンシートでやりたいです。
関数にするかクラスにするか、ベタに貼り付けるか考えることにします
For i=0 to 100 Ary(i)=i i=i+1 Next 配列Ary(i)に0、1、2、3、4、・・・と入れたいのですが値がくるって代入されてしまいます。 一日考えたりしてもわからなかったのですがお願いします。
992 :
デフォルトの名無しさん :04/08/19 17:36
i=i+1 ←この行要らない 誰か次スレ頼む。
>>990 質問時に初期値の定義を
自分で設定した初期値なのか
VBの変数宣言時にセットされる初期値
なのか書いておけ。
995 :
デフォルトの名無しさん :04/08/19 19:55
995
996 :
デフォルトの名無しさん :04/08/19 20:46
>>958 普通にEraseではダメなのか?
Erase s
997 :
デフォルトの名無しさん :04/08/19 21:37
997
998 :
デフォルトの名無しさん :04/08/19 21:46
うめーーっしゅっ
999
1000 :
デフォルトの名無しさん :04/08/19 21:47
ついでに 999をげっとーっ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。