v(・∀-)b VBプログラマ質問スレ(6.0以前) Part29
1 :
デフォルトの名無しさん :
03/10/06 22:18
乙
4 :
デフォルトの名無しさん :03/10/07 18:50
VB6のDHTMLデザイナ、使いにくい。 外部のHTML読み込んだんですが、イメージが表示されません。 イメージ格納フォルダの場所はどこにすれば? ・・・XP,VB6で開発してるとエラー出まくるんですけど(涙
>1 乙VB
おっと、こっちか。 (*´д`*)の方が好みだが、 誰だよ、わざわざスレ立てなおした香具師は。
7 :
デフォルトの名無しさん :03/10/07 22:50
重複スレすまそ byte配列と文字列を結合させる方法を教えてください。 例えば このような文字列と、 Dim myString As String myString = "-----------------------------7d21cef303f8" & vbCrLf & _ "Content-Disposition: form-data; name=""file0"";" & " filename=" & """" & g_TMPFilePath & g_SysFile & """" & "" & vbCrLf & _ "Content-Type: image/pjpeg" & vbCrLf & _ vbCrLf このようなファイルから取得した画像データ(bytwork:byte配列) ReDim bytwork(FileLen("c:\imagedata.jpg") - 1) As Byte Call ReadFile(hFile, bytwork(0), FileLen("c:\imagedata.jpg"), outFileSize, 0&) Call CloseHandle(hFile) を結合させて、HTTP送信をしたいのですが、 Stringとbyte配列の連結のやり方が良く分かりません。 どなたか教えてください。
>>7 Stringの文字数カウントして画像ファイルのサイズ足してDimして
先頭に文字を入れ込んで
Call ReadFile(hFile, bytwork(文字数+1),・・・
9 :
デフォルトの名無しさん :03/10/07 23:14
つまり、 ReDim bytwork(Len(myString) + FileLen("c:\imagedata.jpg") - 1) As Byte bytework = myString ←うそ臭い Call ReadFile(hFile, bytwork(Len(myString) + 1), FileLen("c:\imagedata.jpg"), outFileSize, 0&) こういうことですか?
>>9 >bytework = myString ←うそ臭い
1文字づつ入れていく
文字列とbyte配列は相互に代入可能だよ。
とっくの昔に試した。
>>13 ということは、UNICODEが入る事もDimで確保したらエラーが出るのも
わかってて書いているんですね。
7ですが、 bytework = myString これやると、VBもろとも落ちてしまいます。 一文字ずつ入れていくやり方を教えてください。
>>15 for i = 0 to len(myStringi)-1
bytework(i) = mid(myStringi,1)
ねくすと
#適当なので自信なし
For i = 0 To Len(b) - 1 bytework(i) = Asc(Mid(myString , i + 1, 1)) Next かな
書籍に載っている「簡易メモ帳」を打ち込んでいたのですがちょっと問題が発生しました。 よければアドバイスを。 いわゆるテキストファイルを読み込んで表示・編集・保存って奴です。 やや大きめのファイルを読み込むと「メモリ不足」と言われます。 ヘルプを見るとどうやら「Text1.Text」で表示できる容量が約32KBまでみたいです。 「Label1.Caption」に変更すると文字数の制限がないらしくうまくいきました。 となるとText1.Textでは表示できないと言うことになるのでしょうか? 以下にサンプルを明記します。
Private Sub Command2_Click() '変数の宣言 Dim openFile As String Dim fileNum As Integer Dim readData As String Dim temp As String 'ファイルの読み込み openFile = "D:\test.txt" fileNum = FreeFile readData = "" Open openFile For Input As #fileNum Do Until EOF(fileNum) 'データを一行ずつ読み込む Line Input #fileNum, temp 'データの追加 readData = readData & temp & vbCrLf Loop Close #fileNum 'データの表示 Text1.Text = readData End Sub
>>19 WIN9x系は制限がある。
リッチテキストでやるか、2000/XPでやるか、色々細工するか、
自作のコントロール作るか。
22 :
デフォルトの名無しさん :03/10/08 00:51
自作のコントロールだと、どうやって作るの?
>>22 すべてグラフィックで書く。とても手間かかるけど。
>>15 落ちているのは次の行のはず。
バイト配列に文字列を代入すると配列は文字列の長さに調整されるからね。
>>21 サンクス。
簡易メモ帳を作っていることからわかるように自作コントロールなんてまだまだ先です(笑
リッチテキストとはなんぞや?、で調べるのに時間がかかってました。
デフォルトでは表示されていないんですね。
上手くいきました。
>>22 ユーザーコントロールだな。ボタン2つとPictureBoxの組み合わせか。
クラスの勉強になるし。漏れはここからクラスに馴染んでいった。
ボタン二つよりも縦のスクロールバーだな。
29 :
デフォルトの名無しさん :03/10/08 01:21
テキスト2個のユーザーコントロールのモノを、配列でForm上に配置する場合、 コントロール間の移動はどうやればいいの?
html文章からテキストを取り出す用途で文字を置換したいと思い 検索したところreplace関数に突き当たりました。 でもこの関数はワイルドカードが使えないですよね? 用はタグを空欄にしたいのですが replace(変数、"<タグ>"、"")ですべてのタグを消去するのはどうかと。 replace関数を使わない方が良いのですか? 何かよい方法があればご教授を。
>>31 ヒントありがとうございます。
replace関数内で正規表現が使えると言うことですか?
それは試してみたのですが上手くいきませんでした。
別に設定してreplaceで置換するのかな?
初歩的な質問させてください。 コンボボックスの内容を丸ごとリッチテキストボックスにコピーするには どのようにすればいいでしょうか?
>>33 RichTextBox1.Text = Combo1.Text
>>34 ありがとうございます。
それは既に試したのですが、その書き方の場合は
コンボボックスに表示されている(一番上の)テキストだけが
リッチテキストボックスにコピーされました。
コンボボックスのすべての内容をコピーしたいのですが、
どのようにすればいいでしょうか?
>>35 For i = 0 To Combo1.ListCount - 1
RichTextBox1.Text = RichTextBox1.Text & Combo1.List(i) & vbCrLf
Next i
>>35 ぬぉぉ、ありがとうございます。
forで回すんじゃないか、とは思ってたんですが、
ListCountというのを知りませんでした。
知ってても思いつくまでに1日かかりそうですが^^;
大変助かりました。ありがとうございました。
大学の卒論でVBを使ってロボットをシミュレートする事になったんだが
1 プログラムを全然組んだことがない俺でもできるか?
2 そもそもVBでロボットをシミュレートできるのか?
なんでVBで作らねばならないかというと
http://www.sun-mitec.co.jp/roboabotto.html を実際に動かすのが命題でこのロボがVBにしか対応していないだろうということから。
卒業がかかっているので死ぬ気でやるつもり。
アソバイス求む(マルチで貼らせてもらいましたすみません、必死なんで)
> 1 プログラムを全然組んだことがない俺でもできるか? しるか。 > 2 そもそもVBでロボットをシミュレートできるのか? できる。つーかそのロボがVBに対応してるんだろ。
「シミュレート」の使い方を間違ってるような気が。 あと付属サンプルプログラムはVB/VC/TCとあるようだが俺の目がおかしいのか?
そのロボットを使って何かをシミュレートするんだろうけど (ロボットそのものなのに、ロボットをシミュレート、ってわけわかんね) 書いてないので言葉通り「そのロボットを動かすのが命題」とすると、 ソース付きサンプルプログラムが付いてるんだから、それで動くだろ。 プログラミングする必要なし。 >VBにしか対応していない 必死すぎてサイトを見る余裕すらないのか・・・
MAPI使うのが嫌で、winsocを利用してのメール送信プログラムを 作ってるんだけど、送信そのものは出来たんだけど、漢字をJISに変換して 送信しようとすると、受け取ったメールで文字化けしてしまう。 たぶん、String変数に無理やりJIS文字を入れてそのままsendしてるから メール受信時に文字化けしてると思うんだけど かといって、SMTPサーバーに対してどうやってsendしてやれば良いのかさっぱりで…。 どなたか、アドバイスください。
VBでロボット制御して加藤鷹の指テクシミュレートか。おめでてーな
げ、winsoc→winsockです。
レスthx VBにこだわっている理由はもう一つ。 研究室にあるソフトがVBしかないからw(もちろんCとかC++はあるんだがVBはこれしかない) 説明不足スマソ。 具体的に書くと「PC上でこのロボを作って(ビジュアル面は無視して駆動システムなどが同じ) 命令させて動いたあかつきにそのプログラムでこのロボが動くか」という証明?見たいな事をする。 教授は教示システムをうんたらかんたらとか言ってた。 とりあえず本買ってやっているんだがグラフィックを動かすプログラムのやり方がなく不安。 VB,VC,TCのどれがやり易いのかそらわからん。今はVBでなんとか普通にプログラム組める レベルになろうとがんばっている所。 どうなんでしょうか
とりあえず基本的な事をやってみます。 ゲームが作れるのであればロボットも作れるのではないかと・・・ とりあえず質問するレベルがまだまだなんで・・・ここいらでお暇します。 スレ汚しスマソー
タイマーをテキストボックスに表示させているのですが セットしても表示が0になります。 EnabledはTrueでIntervalは1000. フォームを開いて約1秒後にテキストボックスの中身が0になるので、インターバルは正常にうごいているようなのですが・・・。
MDBを最適化するルーチンで、中断する機能をつけたいのですが JROのCompactDatabaseをどうやったら中断させられるのかわかりません
>47 何をしたいのかさっぱり。 もしかして、インターバルの残時間が減ってるのを見たいとか…?
>>49 時間や分や秒を表示させたいのに値がすべて0になります。
Private Sub Timer_Timer()
TXT.text = Hour(Timer) & ":" & Minute(Timer)
End Sub
↑
こんな感じなんですが
>47 Timer? Timeでなくて?
あ Hour(Timer) & ":" & Minute(Timer) 此処の話ね。
Hour(Timer)をHour(Now())のようにしたらうごきました。
CreateObject("Excel.Application")を使わない状態で ADOを使用してEXCELからデータを取得したいのですが この場合、データを取得するのにシート名で選択してもでーたをとってこれません どうスレばいいのでしょうか お願いします。
スレタイの顔がキモイのでヤダ。
(用紙名の取得) VB6.0使ってます。 PrinterオブジェクトのPaperSizeプロパティで用紙の番号がかえってきますが、 用紙の名前を取得したいのです。(番号の用紙名) 調べても列挙とかばかりでよい方法がわかりません。 プリンタによっては番号が重複しているものもあります。 (MSDNのPaperSizeプロパティに載ってない番号とか) どなたかお願いします。
57 :
デフォルトの名無しさん :03/10/08 21:46
58 :
デフォルトの名無しさん :03/10/08 23:50
ここで書く質問かは良くわかりませんが... VBからAccessのレポートを開く処理をしているのですが Accessが入ってない客先のPCではエラーになってしまいます。 調べたら 確かにレポート機能はAccess入ってないと使えないという記述はありました。 でAccessのランタイム(正式名称忘れた)入れてみたのですが まだエラーになります。 これはAccess入れるしか手が無いということでしょうか?
>>58 エラーの内容を書かないということは、質問する気が無いという事ですね。
>59 そうです。解決しました。
61 :
デフォルトの名無しさん :03/10/09 07:27
ネットで見つけた「ファイルを開く」ダイアログのAPIを呼び出すのを やってみたのですが、ファイルを選択してString型の変数に取った時、 その変数の内容をみて見ると、 C:\aaaa.txt・・・・・ みたいにフルパスの後ろに「・・・・・」というのが入っています。 1)これは何でしょうか。 2)どうやったら取り除けますか。
>>61 Null文字でしょ。String変数をsとして
s = Left$(s, InStr(s, Chr$(0)) - 1)
で、Null文字から左だけ切り取りなされ。
>>62 ( ´,_ゝ`)
64 :
デフォルトの名無しさん :03/10/09 09:49
なんか固定長の変数から値とって可変長の変数に入れたときにでてくるよね。
>>66 は
>>62 かな?
>>61 なぜ「・・・・・」が出るかというとAPIでは文字列の終わりは
大抵NULL文字(VBではvbNullCharやChr$(0))になる。
それに対してVBの場合は文字列のヘッダに文字数が書かれており
文字列にNULL文字も使えるようになっている。
そのため、APIがNULL文字で文字の終わりを示してもVB側の扱いが違うため
文字列の終わりより後のゴミが表示されているというわけ。
winxp、vb6.0、sp5です。 ActiveReportについて教えてください。 1つのcolumnを1ページに複数列表示したいのですが 可能なのでしょうか? 教えてください。。。
すいません、自己解決しますた
やっぱ厳しいですかね?
71 :
デフォルトの名無しさん :03/10/09 23:27
おせーて下さい プロシージャ内にstatic で宣言した変数を初期化する方法がわかりません これじゃプロシージャ内でstatic宣言する意味がないんですが・・・ VBの仕様ですか?
>>71 仕様です
C++のstaticとも仕様が違うので、Singletonなんて洒落たものも作れません。
>>72 サンクスです
どうりで、調べても出てこないわけだ
プロシージャ内staticは諦めます
というか、宣言で独自に初期化できないVBの仕様っていったい・・・・
>>72 > Singletonなんて洒落たものも作れません。
C++やJavaの実装だけがすべてではありません。
Singletonの作り方はこれにのっているので馬鹿は勉強してください。
[プログラミング本]Visual Basic Design Patterns VB 6.0 and VB.NET(必読!VBでデザインパターン)(昔ネットで配布されていた書籍のβ版?)vbpatterns.zip 13,885,055 78b08f47ec082d19a6e39641a8c83f9f
>>73 プロシージャ内static変数は廃止される方向にある。
JavaとかDelphiとかC#とかVB.NETとか。
変わりにクラスのメンバ変数を使うべし。
76 :
デフォルトの名無しさん :03/10/10 12:00
>>68 Detail のColumnCountプロパティを必要な列数に変えてみなされ
他のColumnが付くプロパティも見ておくように。
詳細はヘルプ見れ
Winsockについて詳しく説明したページって無いですか?
InternetOpenUrlなどを使って、あるHPの入力系を自動的に行うようなアプリを作っています。
基本的には、InternetOpenUrlに送るURLを
strURL="
http://test.cgi?aa=1000&bb=2000 "
の様に加工して処理しています。大体のものはこれで問題なく動いていたのですが、
(前略)
<SCRIPT language="JavaScript"><!--
ChkSubmitFlg = false;
function SubChkSubmit()
{
if( ChkSubmitFlg ){ return false; }
ChkSubmitFlg = true;
return true;
}
//--></SCRIPT></head>
<form method="POST" action="test.cgi" onSubmit="return SubChkSubmit()">
(中略)
<input type=text name="text">
<input type=submit name="aa" value="実行">
<input type=hidden name="bb" value="2000">
という感じのHTML文のsubmit(実行ボタン押下)を処理するために
strURL="
http://test.cgi?text= 「入力されるべき値」&aa=「実行」&bb=2000"
・「入力されるべき値」は、VBで設定します。例えばユーザーIDとか
・実際の処理では「実行」はコード変換しています。
というURLを作って送ったのですが上手く動きません。SubChkSubmit()が関係するのはわかっているの
ですが、どう処理したらいいのかわかりません。誰かわかる方がいたら教えてください。
79 :
デフォルトの名無しさん :03/10/10 15:16
>>78 バケットモニターを使ってブラウザがどんな文字列をpostしているか確かめることから始めてはいかがでしょ?
で、それと同一のpostをするように調整すればよろしい
PictureBoxに画像ファイルをロードし、 例えば円画像でいうと、円上のある点をマウスで外側に ドラッグ&ドロップするとその部分が伸びるというものを 作りたいのですが、どうすればよいのでしょうか。 補間はBスプラインを用います。 よろしくお願いします。 あ、環境はVB6です。
81 :
デフォルトの名無しさん :03/10/10 17:05
ウイン98で動いていたVBアプリをXPにインストールすると 76の実行時エラーが出ます。 何が原因と考えられますでしょうか? どうぞ宜しくお願いします。
>>79 パケットモニターでも良いけど、InetSpyの方が見やすいと思う。
VB6.0なんですが、 テキストボックスに数字を入力して、 それをデータとして保存して、 その後、別のフォームで開いてデータを読み込むには どのようにすればいいのでしょうか?
>>84 VB6.0の入門書は置いているところが少なくなったから、
急いで買いに行ってください。
>>86 お返事ありがとうございます。
多分そうだと思うんですが、どうやったら直りますかね?
厨質申し訳ありませんが、ググってもわからないんです。
宜しくお願いします。
>>87 あんたはアプリを作っている人なのか、それともタダの1ユーザなのか?
作っているのならバグを探してエラーになっているところを見つけて
正しいパスにでも修正してください。
89 :
名無しさん@お腹いっぱい。 :03/10/10 21:08
90 :
名無しさん@お腹いっぱい。 :03/10/10 21:12
>>88 ただ、プログラム自体が立ち上がらないもので・・・
VBは起動するだろ? デフォルトの設定ならエラー個所で止まるだろ? そこらへんのソースを晒せ。
function 関数を学んでいるのですがアドバイスを Dim kotaekakeru As Long Dim kotaetasu As Long kotaekakeru = KakeruTasu(2, 3, kotaetasu) Function KakeruTasu(a As Long, b As Long, c As Long) As Long KakeruTasu = a * b c = a + b End Function 上記にてkotaekakeruが6になるのは理解できますが kotaetasuが5( c = a + b)になるのが理解できない。 C言語のポインタみたいなものですか?
>>92 ByValとByRefを調べてください。
まあポインタに近いけど、アドレス間違いで簡単に落ちるポインタとはちと違う。
C++の参照に最も近い。
95 :
名無しさん@お腹いっぱい。 :03/10/10 21:59
>>91 ライセンスの関係でXPにはNETしか入れてないんです。
しかも変換できない一番安い奴です。
97 :
名無しさん@お腹いっぱい。 :03/10/10 22:09
>>97 修正してコンパイルできないんだろ?無駄だ。
>>93 即レスサンクス。
なんとなく入門書レベルには明記されていない理由がわかった気がする。
いかん。理解したつもりがますますわからなくなってきた。
101 :
名無しさん@お腹いっぱい。 :03/10/10 23:09
ちょっとこんがらがってきた。もう少しアドバイスを。 下のプログラムで「処理1、処理2」の時点では「iVal=ABCDEF」になる(確認済み) でも何でこの処理だけで変数aが変化する訳? ByVal、ByRefの設定により変数aに影響を与えているんだよね。
Sub Test1(iVal As String) iVal = iVal & "DEF" ' 処理1 End Sub Sub Test2(ByVal iVal As String) iVal = iVal & "DEF" ' 処理2 End Sub Sub Main() Dim a As String a = "ABC" Test1 a MsgBox a ' "ABCDEF" を表示する a = "ABC" Test2 a MsgBox a ' "ABC" を表示する End Sub
>>101 98とXPの環境晒してくれたら解決してあげるよ。
じゃなければ多分無理。
>>103 多分理解できてると思うよ。
>>104 あまり理解できてません(汗
ByRefの場合、引数iValを変化させたら呼出元の変数aの値も変わってしまって
ByValの場合だと変化しない
と覚えたらいいのかな?
107 :
名無しさん@お腹いっぱい。 :03/10/11 00:15
>>104 98はVB6で、XPはNETです。
98で作ったVB6のアプリをXPで使おうと思って今回うまくいきませんでした。
VB6で作ったアプリをNETでシコシコ書いた方が良いんでしょうか?
しつこくてゴメンナサイ。
出来ればどちらでも使えるようにしたいんです。
宜しくお願します。
>>107 ・.NETの高いほうを買う
・.NETに移植する
・6.0を手に入れる
・あきらめる
109 :
名無しさん@お腹いっぱい。 :03/10/11 00:24
>>108 キッツーイ条件ですね。
でも検討してみます。ありがとう。
あきらめるな。道はきっとある。(知らんけど。)
111 :
デフォルトの名無しさん :03/10/11 09:17
>>105 その辺がVBの変なところのひとつ。VBやるときは
Private Function hogehoge (ByVal argHoge) As Long
みたいに、その関数のスコープと、引数渡しがByValかByRefか明記する癖をつけとくといいよ。
初心者は値渡ししか使ってはいけません
>>111 何が変なんだろうか...。
ByVal か ByRef かを明記するより、引数の型をきちんと指定するほうが先だと思うが...。
>>114 その割に関数の戻り値はキチンの定義してあるから余計奇妙に見えるよ
Byの意味を知らない人はプログラム以前の問題だ
だめだ。html文書のタグを変換できない。 正規表現を使うのは理解できましたが実際にどう実行してよいのやら。 「文字列 置換 vb 正規表現、etc」で検索してもいまいち。 perlで言うところの~s/<.*?>//gs;みたいに簡単にはいかない。 vb6から使えるようになったreplace関数では駄目なんですか?
replaceはパターンマッチじゃないからな。 VBSで正規表現を使うためのモジュールはあったような気がするが
>>118 プログラムをさらしてみ。Replaceは正しく使えば便利だしみんなちゃんとその関数を使えてるし。
>>120 レスサンクス。
ただプログラムを晒すも何も正規表現による変換が結局わからないのでreplace関数は使ってません。
118の書き込み後なんとか以下のような原始的なやり方でしのいでます。
temp1 = Text1.Text
prePlace = InStr(temp1, "<")
nextPlace = InStr(temp1, ">")
Text1.SelStart = prePlace - 1
Text1.SelLength = (nextPlace - prePlace) + 1
Text1.SelText = ""
"<>"の場所調べてその間の中身を消す。
処理も重く効率の悪いプログラムです。
122 :
v5 ◆Rkxom1fHHc :03/10/12 02:27
Visual Basic 6.0 って、VBの仮想VM上で動いてるんだよね? っていうことは、VBのEXEは完璧なアセンブルではないってこと? VC++(MFC使わない)のEXEは機種依存アセンブルってこと? んー、よく分かんないや。
>>122 訂正。
× Visual Basic 6.0 って
○ Visual Basic 6.0 でコンパイルしたEXEって
>>122 まったく違う。どっからそんな情報を。
P-CODEのことか?
125 :
v5 ◆Rkxom1fHHc :03/10/12 02:56
>>124 まったく違うのか!?スマソ・・・
どこかのサイトに MSVBVM60.DLL の上で中間ファイルとして生成されたEXEファイル
を解析し実行と書いてあった。MSVBVM60 ってことはVB6.0だと思ったから。
処理速度に大きな違いがあるのはここが原因だと思ってた。
VM上で動いたりはしていないって事だよね?
P-CODE生成にすれば仮想VMで動いているようなもんだが、 デフォルトの設定では完璧なマシン語で動いている。 MSVBVM60はただのDLL(MFC32.DLLやKernel32.DLLの同じようなもん)と 考えた方がいい。 処理速度に大きな違いは無いし、違いがあったとしても原因は他にある。 たとえば配列の範囲チェックを厳密におこなっていたり、 数値がオーバーフローしてもマイナスにならないでエラーになったり。 動的にメモリサイズを変更する文字列を使っていたり。 一部は設定で安全性を犠牲にして無効にすることで パフォーマンスを上げることも出来る。
あなたたちにはJAVAが向いています
VBの入門書を終えて応用編や中級編の本をネットで探していたときに思ったのですが これらの本を学び終えた場合、 (用途によるでしょうが)今後はVBを覚えると言うよりもAPIなどの windowsの仕様を覚えると言った感じになるのでしょうか? なんかVBだけではオフィス関連のアプリしか作れないような気がしてきたので。
> なんかVBだけではオフィス関連のアプリしか作れないような気がしてきたので。 それは想像力が足りないだろ。 作りづらいとかはあるがほとんどのジャンルはVBだけで作れるぞ。
130 :
デフォルトの名無しさん :03/10/12 12:55
VBのInetについて3個ほど教えて下さい。 @RequestTimeout=1にして getするのに10秒かかる場合エラーになってしまうのでしょうか? AInet1.Execute , "xxx"と実行して そのまま返ってこないことがありますが 回避できませんでしょうか? BDo While Inet1.StillExecuting DoEvents ' 前の処理が終わるまで待機 Loop ここで無限ループにはまってしまうことがあるのですが 回避できませんでしょうか? よろしくお願いします。
@ためせ AB情報が足り無すぎ
VBで作ったEXEを実行するときに実行引数を与えたいのですが、与える方法を教えて下さい。
プロジェクトのプロパティをよく見る。
コマンドライン引数の部分に com as String,PBcount as boolean こんな風に記載すればいいのでしょうか?
135 :
デフォルトの名無しさん :03/10/12 16:55
134>> ぞんぞん違う ヘルプで Command 見る
列挙型の中に列挙型を持たす事って出来ますか? 例えば、SuperConst.SubConst.Hoge みたいな事をしたいのですが…。
>>136 できない。
何かを中に持てるってことはは構造体に他ならない。
欲しいのは、ローカルスコープを持った列挙型か ?
それなら俺も欲しい。
>>136 別に列挙型の中じゃなくてもいいだろ
SuperConst と SubConst をユーザー定義型で作ればいいだけじゃないのか?
固定値に構造体をつけたいという考え方がまずおかしい
>>134-135 135が書いてるようにCommandを使うのが正解だけど、
134のようなアプローチができたらいいなと思ってるひとは、きっと多いよね。
Sub Mainからはじまるプログラムで、Sub Main(com as String, PBcount as Boolean)
みたいな感じで。
140 :
デフォルトの名無しさん :03/10/12 19:27
MSFlexGridで指定したセルでEnterキーを押したら その内容を取得して textに表示させたいのですが、 やり方がわかりません。 教えてください
オブジェクト変数を参照する時Withを使うのと使わないのとの速度について教えて下さい。 いったん、変数に格納したオブジェクトを参照するのに、連続で変数名を書いたら 遅くなるなんてことは無いですよねぇ? 例としてExcel(おかしなコードでごめんなさい)。 1) Dim objXlApp As Object Set objXlApp = CreateObject("Excel.Application") objXlApp.Workbooks.Add objXlApp.Workbooks(1).Worksheets.Add 2) Dim objXlApp As Object Set objXlApp = CreateObject("Excel.Application") With objXlApp .Workbooks.Add .Workbooks(1).Worksheets.Add End With 速度に差はありますか?
>>141 Withを使ったほうが(ほんのわずかに)早くなるらしい。
>>142 あ、一回で書けずすみません。
オブジェクト変数への参照ってNothingされるまで保持されるんじゃないのですか?
例えば、
Worksheets(1).Range("A1") = "セルA1"
Worksheets(1).Range("A2") = "セルA2"
Worksheets(1).Range("A3") = "セルA3"
これはWithを使った方が早いってのは分かるんですが。
いったん変数に入れてしまえば…ってのが疑問なのです。
正規表現による変換できたーーーー!!!! Dim str1 As String str1 = Text1.Text Dim re As Object Set re = CreateObject("VBScript.RegExp") re.Pattern = "<[^<]*>" re.Global = True Text2.Text = re.Replace(str1, "") 本屋で読んできたけど(笑)帰ってきたら度忘れしてしまって苦労した。 ただ意味をこれから理解しないと。 VBSとはなんぞや?状態ですから。
タグを取り除くのならIEやHTML関連のコンポーネントを 使ったほうが良いかもしれない。 なんたらオブジェクトのInnerTextでテキストだけ取り出せると思うし。
>>145 ガーーーーン
そんないい手があったのか。
実は144のプログラムは不完全。
タグ以外で<>使用していたら当然消される(笑
>>146 タグ以外で<>は使われない。 正しいHTMLなら。
>>130 Inetは無効なアドレスやタイアウト時にはエラーを発するので
On Error Resume Next
や
If Err.Number<>0 Then
をうまくつかい、エラーが出てもきちんと動作する設計にすること。
そうすればInetを使ってインターネット上のあらゆるファイルを集めることに成功する。
>>149 >そうすればInetを使ってインターネット上のあらゆるファイルを集めることに成功する。
あ、そうかhtml文書自体をネットから取れるわけだ、ずっとファイルから読み込んでいた。
正規表現で頭がいっぱいで思いつかなかった。
Inetをこれから覚える段階ですが貴重なアドバイスありがとうございます。
>>150 まさに149のサンプルですね。サンクス。
>>143 単純に、プロパティ(それかメソッド)の呼び出し回数が減るから速くなる、
というのではないかと。
>>141 の場合はほとんどメリット無いけど、階層が深くなれば効果は
出るはずです。。
一旦変数に入れてしまえば・・、と言っている内容は正確に理解はできませんが、
オブジェクトへの参照を変数に保持しとけば、次からそれ経由でアクセスすれば
速くなる、という意味でしたらそうだと思います。
'例1
result = a(1).b(1).c(1).Value
result = a(1).b(1).c(1).Caption
’例2
With a(1).b(1).c(1)
result = .Value
result = .Caption
End With
'例3
Set objWidth = a(1).b(1).c(1)
result = objWith.Value
result = objWith.Caption
上記の例の場合、例1の動作が一番遅く、例2・例3の動作が(たぶん)同じ速度
だと思います。
例2と例3は、 a(1).b(1).c(1) を毎回呼び出す手間を省いているので、その分速く
なっているはずです。
わたしのちんこは可変長です。あなたたちのは固定長だそうですからふべんですね。
私のはLongです。
>>148 Javascriptでも<>は使われない。 正しいHTML無いのJavaScriptなら。
>>155 if(a < b) って書くの ? (藁
いかんいかん、変換されるんだった。
>>155 if(a < b) って書くの ? (藁
Microsoft HTML Object Libraryを使ったタグの消し方。 ・Microsoft HTML Object Libraryを参照設定。 Dim h As New HTMLDocument Dim htmlstring As String htmlstring = "<HTML><HEAD><title>タイトル</title></HEAD><BODY>" & vbCrLf & _ "ボディ<BR>" & vbCrLf & _ "<B>太</B><BR>" & vbCrLf & _ "<a href=www.yahoo.co.jp>ヤフーへのリンク</a>" & vbCrLf & _ "</BODY></HTML>" MsgBox htmlstring h.body.innerHTML = htmlstring MsgBox h.documentElement.innerText IEのHTML解釈エンジンを使用するので変なHTML(タグ以外の用途で<>が使用されたり)でもIEと同じように解釈される。 DOMが構築されるのでリンクを取り出したりと自由自在。 本当はh.body.innerHTMLじゃなくてh.documentElement.innerHTMLに書き込みたいがエラーになる。 body.innerHTMLに書き込んだため、<title>などは無効。今回はたいして問題にならないだろうけど。 ファイルを作らずに完全にHTMLドキュメントを作成する方法は無いのかな?
159 :
デフォルトの名無しさん :03/10/13 14:44
自作のOCXを作っています。 Valueプロパティ(True,False)を付けたので、OptionButtonのように排他で 値を設定できるようにしたいと考えていますが、うまくいかないんです。 どうやったらOptionButton的な動きが出来るのでしょうか。 どなたか教えてくださいm(_ _)m
>158 VBではやった事無いんで外してるかも知れないけど、h.body.parentElement.outerHTMLに書く。
>>159 クリックしたら一回全部Falseにして、
クリックしたものだけTrueにすればいいのでは
>>161 多分その処理をカプセル化したいんでしょ。
漏れも良く分かんね。
For Each ctl In ParentControls If ctl Is UserControl1 Then
「技術評論社のかんたんプログラミングVBコントロール関数編」を読んでいます。 とある例題でエラーが発生。「組み込み可能なISAMドライバは見つかりません。」とのこと。 Excelのデータをデータコントロールを使ってVB上で扱う例題なんだけど 例題ではExcel97で自分の環境はExcel2002。 データコントロールのConnectプロパティをExcel8.0にしているからだと思うのだけど Excel2002でExcel8.0でいいのかな?
>>161-163 レスありがとうございます!お蔭様でそれっぽいことが出来てきました。
が、配置したフレーム毎ではなく、フォーム上のコントロールが全て対象になってしまいます。
もうちょっとがんばってみます。
166 :
デフォルトの名無しさん :03/10/14 00:12
皆様のお力をお借りしてもらえないでしょうか。 現在、DataReportを使用し、伝票を打ち出すPGを作っています。 DataReportのデフォルトのサイズではA4縦幅で設定されるのですが、 同PG内でA4横にした際に「用紙サイズが広すぎる」といったエラーが出てしまいます。 DataReportをA4の横幅にして打ち出す方法をご存知で無いでしょうか。 PGを起動する前にデフォルトで横幅にすれば一応できるのですが、どうしても 同PG内で組まないといけないとのことなので。。 よろしくお願いいたします。 OS:Win2000 VB6.0 Enterprise Edition です。
For Each ctl In ParentControls If ctl.Container Is Me.Container And _ TypeOf ctl Is UserControl1 Then
168 :
デフォルトの名無しさん :03/10/14 18:10
ガイシュツダタラスマソ "Winsock"コントロールを動的追加したいんだけど、 Set Winsock1 = Form.Controls.Add("VB.Winsock", "xxx") の"xxx"の部分ってなに? 無理やり実行すると、 -------------------- msgbox -------------------- 実行時エラー '711': クラスの文字列が不正です。 ProgID VB.Winsock のオブジェクトを参照してください。 -------------------- msgbox -------------------- クラスの文字列ってなんだー!! ヘルプ見てもワカラナーイ いろいろ調べてコマンドボタンの例はのってたんです。 こんな感じでした。 Set Command1 = Form.Controls.Add("VB.CommandButton", "cmdobj") ついでに、"MSComm"も教えてもらえるとチョトシアワセ
>168 Loadを使う。 MSDNに複数使用のサンプルソース載ってるよ。
>>168 MSWinsock.Winsock.1
Winsockを参照設定して、F2を押してオブジェクトブラウザの左上の
<すべてのライブラリ>を変更でライブラリ名がMSWinsockLibとわかったから、
Controls.Add("MSWinsockLib.winsock", "xxx")とするとエラー内容に
正しいProgIDが表示される・・・。激しく無駄なことしている気がする(w
164です。困ったことに未だにわからん。 access2002で製作したファイルはデータコントロールのプロパティconnectを 「access2000」にすればいけるけどExcelはうまくいかん。 「組み込み可能なISAMドライバ」で検索したら「VB6がOfficeXP以前のソフトだからドライバがいる」みたいな 事を書いてあったけど一応サービスパックも当てているんだが。 どなたかアドバイスをお願いします。
172 :
デフォルトの名無しさん :03/10/14 20:26
関数は再帰呼び出しできないの?
174 :
デフォルトの名無しさん :03/10/14 21:22
教えてください。 VB6でWordのファイル扱えますか? Wordで作成した原稿フォーマットの内容を書き換えたいのですが。 例)Word文書内→ ○○様 ↓ VB6プログラムで・・・ ○○様→ 山田太郎様 って書き換えたいんですが・・・
175 :
デフォルトの名無しさん :03/10/14 21:39
初心者向けのVB6のおすすめの書籍を教えてください。
私はなにか勘違いをしていたみたいで・・・
"xxx"の部分が間違っていると思ったら、
"VB.Winsock"の方がダメだったんですねぇ。
いや勉強になりました。
>>169 ご助言ありがとうございます。
ですが今回はコントロールの削除も動的に行ってみたいので
"Add"で頑張ってみます。
>>170 ありがとうございます。
こんな方法があったとは・・・
というよりオブジェクトブラウザって初めて使いました。
よく間違えて開いちゃうことはあったんですけど。
177 :
デフォルトの名無しさん :03/10/14 21:55
>>167 ありがとうございます。
MeにContainerプロパティが無いみたいですね・・・
UserControl.Containerとやっても駄目でした。
引き続き調べてみます。
179 :
デフォルトの名無しさん :03/10/15 00:02
VB6 SP5でdir関数を利用しているのですが、 「ファイル数が多すぎます」って実行時エラーが発生します... どなたか、回避方法をご存知の方、いらっしゃいますか? ファイル数はどんどん増えていくので、どうしても回避したいのですが...
すいません、自己解決しました
181 :
デフォルトの名無しさん :03/10/15 01:34
標準EXEからCreateObjectしたActiveX EXEのクラスで、 Public で定義したユーザー定義型を標準EXEから渡したいのだが、 エラーが表示される。 なんで?
>>178 Me.Extender.Container
リストビューコントロールのヘッダー背景色 の色を変える方法ってありますか? SendMessage()使うんだろうけど、、、 アドヴァイスお願いします。
>>183 自己解決しました。
VB リストビュー サブアイテム 背景
で検索したらHitした。
>>182 やりたかったことがお蔭様で出来ましたです。
ここで教えて貰わなかったら、多分諦めていたと思います。
本当にありがとうましたm(_ _)m
APIの呼び出しについて質問なのですが、ユーザー定義型を参照渡ししている ところにNULL値を指定したいのですが、定義を変えないでやるにはどうすれば いいでしょうか? たとえば、 Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As DEVMODE) As Long の4つ目の引数にNULL値を渡したいのです。 検索したら、 ByVal lpInitData As Long や lpInitData As Any のように定義を変えて実現しているのはいくつか見つかったのですが、 こういう方法しかないんでしょうか?
コマンドプロンプトで、netstat -an > c:\a.txt とか打つと 接続状況とかファイルに書き込むことができますが これをコマンドプロンプトを表示させずに vbからファイルに結果を書き込むにはどうしたらよいのでしょうか? shell "netstat -an > c:\a.txt" とやってみましたが、うまくいきませんでした。 よろしくおねがいします。
Shell Environ("COMSPEC") & " /C " & "netstat -an > c:\a.txt", vbHide
>>188 ありがとうございました、すんなり成功しました。
ちなみに、COMSPEC と /C にはどういう意味があるのでしょうか?
意味などない。
>>189 > や | などの機能はシェルがおこなっている。
シェルはWin9x系ではcommand.com、WinNT系ではcmd.exe
このプログラム名を環境変数COMSPECから取得できる。
cmd /?より
/C "文字列" に指定されたコマンドを実行した後、終了します。
>>191 ( ・∀・)つ〃∩ ヘェー
そんな環境変数あったんだ
193 :
VBAの資格 :03/10/16 20:24
194 :
すご〜く迷い人 :03/10/16 21:46
どなたか教えて下さい。 データベースでコネクション接続後、指定したSQL文でレコードを開き、 RecordCountにて該当するレコード数を収集する事が出来ますが、 この方法ですとレコード数がサーバによって正しく収集出来ない場合があると マイクロソフトのサイトに掲載があったのですが、 RecordCount以外で、正確にレコード数が収集出来る方法ってあるのでしょうか? ちなみに環境はWindowsServer2000のWebサーバと、SQLServer2000のデータベースの2台構成です。 現在、私の環境にて実際にSQL文に該当するレコードが3件あるのに、 RecordCountをResponse.writeで表示すると「-1」が設定されてしまっています・・・。 (同条件で別のマシンで動作させるとRecordCountには3が設定されています・・・。) 皆様のご指摘やアドバイス等、よろしくお願い致します。
select countとかeof=falseの間で数えるとかじゃ駄目すか? recordsetを一回movelastすると、rowcountで取れたりしないですか? ヘタレなもんで的外れな事言ってたらスマソ
196 :
すご〜く迷い人(194カキコ) :03/10/16 22:32
>>195 レスありがとうございます。
的外れでは無いですよ。
大変参考になりました。
私自身、まだ勉強し始めたばかりの初心者ですので、
皆さんにとって当たり前でも、私には凄く勉強になる事ばかりです。
感謝致します。
Textout(API)を使用して、ピクチャーボックス上に文字列を
表示させています(ゲームのシナリオ表示部です)
ttp://www.alpha-net.ne.jp/users2/ei9711/vbkouza/kouza23.html こちらを参考に画像の縮小プログラムを作ったのですが、一つ
どうしても思い浮かばない処理があります。
巨大なフォントサイズでテキストを描画し、それを縮小して文字に
アンチエイリアスをかけたいのですが、描画したテキストの背景が、
描画したオブジェクトの背景色や画像で塗り潰されてしまいます。
縮小し、アンチエイリアスのかかった文字の背景を、と言うかぼかしの
かかった部分を透明化するには、どのようにすればよいでしょうか?
やはりDataReportでは無理なのでしょうか? いろいろなサイトで検索しましたがいまいちやり方がわからないです。。 なんでこんなに使い勝手がわるいんだろう…
>>194 何を使ってるかによるけど、DAOならカウントの仕様です。
DAOの場合、そのあたりのプロパティは、取得したレコードではなく、
それまでにフェッチしたレコード数と言う、使い道がないような値を返してくれます。
200 :
デフォルトの名無しさん :03/10/17 11:39
C/C++ でいう unsigned short 型(USHORT型)のプロパティを取得する ActiveXオブジェクトがあるのですが、VB でそのプロパティにアクセスしようとすると 以下のコンパイルエラーが発生します。 関数またはインターフェイスが予約されているか、 または Visual Basic でサポートされていないオートメーション タイプが 関数で使用されています VB で unsigned short 型(USHORT型)のプロパティにアクセスするには どうすればいいのでしょうか?
>>197 なんかあんまVBと関係ないような気もするが。。。まあいいや。
まず、そもそもTextOut、つーかFontを作成するAPIの指定で
アンチエイリアスが指定できたと思う。TrueTypeフォントならね。
次に、それによる直接描画が何らかの理由で使えないなら、
その便宜上拡大フォントを描画する時に、背景も最終的に
かぶさるものを拡大して描画しておけばいいのではないか?
202 :
デフォルトの名無しさん :03/10/17 12:10
教えてください。 ASPでなんですけどスレ無いしVBでも同じだと思うので こちらに書き込みしてみました。 変数に入ってる文字列の中に機種依存文字が入ってるかどうかのチェックを 正規表現オブジェクトを利用してのパターンマッチングを行うにはどうすればいいんでしょうか? なんとなくは書いてみたんですけどパターンをどう書いても駄目で... strPtn = "\x8E[\xA0-\xDF]|[\xAD\xAE\xF9\xFA\xFB\xFC][\xA1-\xFE]" strPtn = "[\u00A0-\u00FF]|[\u2921-\u2F7E]|[\u7521-\u7E7E]" マッチングしたいのは特殊文字(8540-889E)・縦文字(EB40-EFFC)・外字(F040-)です。 わかられる方おられましたらよろしくお願いします。
>>194 カーソルタイプはどうなってますか?
adOpenKeysetやadOpenStaticならRecordCount使えますけど
それ以外の場合はRecordCountには-1が入るはずです。
DAOならMoveLastしてMoveFirstしてからRecordCountとか
してた気がするなあ...
204 :
すご〜く迷い人(194,196カキコ)→解決! :03/10/17 15:05
>>199 >>203 レスありがとうございます。
>>196 カキコ後に自分自身でもいろいろと調べまして、
データベースサーバに関してはWebサーバとつながっているだけのローカルマシンということで、
レコードを開く前にCursorLocationにローカル指定を意味する3の値を設定したら、
正しいレコード数の値を収集する事が出来ました。
データベースサーバは外部公開しないので、とりあえず今回はこの方法で解決しました。
皆様、いろいろとご親切にアドバイスありがとうございました。
205 :
デフォルトの名無しさん :03/10/17 15:22
入力した文字列(全角ひらがな等)から半角カナ文字を取得することって できますか? 例えばあいうえおという文字列からアイウエオを取得することとか。。 APIについてもいろいろググってみましたがわかりませんでした。 参考サイトやサンプルプログラムがある場所を知っていましたら お願いします。
>>205 全角ひらがな”等”の”等”がなにを指しているのかしらんが、
全角ひらがなからはできる。strconvを調べてみれ。
207 :
デフォルトの名無しさん :03/10/17 15:51
EXEファイルを作るためにコンパイルしたいのですが、 どうすればいいんでしょうか? コンパイルというボタンとかあるんですか? 超初心者ですいません!
あからさますぎるので気が乗らない やりなおし
>>207 メニューの「ファイル」-「〜.EXEの作成」
コマンドラインからを知りたいとか?w nmakeでもできたっけ?
関連付けによると、 C:\Program Files\Microsoft Visual Studio\VB98\vb6.exe "%1" /make だそうです。
もうね、あ(ry
(*´д`*)アハァ?
質問です。 Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub drive1でCドライブやDドライブを選ばせてフォルダ構造をツリー状に 表示する代表的なやり方なんですが どうもCドライブを選択したらルートじゃなくて C:\Program Files\Microsoft Visual Studio\VB98になってしまいます。 VBをインストールしているからだと思うのですがルートを選ばせる方法を教えてください
>>214 Form_Load で「ChDir "C:\"」
217 :
デフォルトの名無しさん :03/10/18 22:04
フォームの数を動的に増やせますか? 例えば、Form1からForm2を複数個表示するようなことは出来るのでしょうか?
mnuEditCopyに切り取りのコマンドを書きたいのですが どうやってかくの?Clipboardの後がわからん。教えてくれ
>>217-218 Dim Forms(...) as Form2
Set Forms(1) = New Form2
Forms(1).Show vbModeless
Set Forms(2) = New Form2
Forms(2).Show vbModeless
...
とやるだけじゃないの ?
>>220 うおっ!出来ました。
かなり検索してたけど、見つからなかった・・・
ありがとうございましたm(_ _)m
質問です。 VBEでマウスのスクロールをできるようにするにはどうすればよいのでしょうか? お願いします。
223 :
デフォルトの名無しさん :03/10/19 00:05
>>223 早速ありがとうございます。
これがあるとないとでは大違いです。
>>223 マウス付属のユーティリティ。
マウスが限定されるがMicrosoftのマウスなら
付属しているIntelliPointで動く。
マイクロソフトと親しいオレはインテリマウスを マイクロソフトからプレゼントされたな。 インテリマウスけっこうでかいよね。
ピクチャーボックスに読み込んだ画像中の線を マウスでD&Dすると、線が伸縮(補間もしたいです)するようにってできますか? 画像処理っぽいのですが、さっぱりです・・。 どなたかよろしくお願いします
>>228 かなりですか・・。
よろしければ、参考になるWebページ等ありましたら
教えていただけませんか?
よろしくお願いします。
>>229 「ビットマップからベクトル」 へ変換して処理する事となりそうな。
詳しくはGoogleに一度聞いてからどうぞ。
>>230 ありがとうございます。
少し勉強してきます。
「visual basic 画像処理プログラミング」風工舎、Rod Steaphens ↑ これがお奨め
フォームの背景の画像をそのまま ピクチャボックスに持って行きたいのですが、 Picture1.Picture = Form1.Picture とやってもうまくいきません。 何かもっと別のことをしなくてはいけないのでしょうか。 教えてください。
>>233 おれの VB6.0 SP5 だとちゃん動作したぞ
Picture1.Picture = Form1.Picture
なんででしょう?
とか思ってもう一回やったらちゃんとできました。
何がおかしかったのでしょうか・・・??
いろいろ、ScaleModeとかいじってたのですが、それが悪かったのですかね・・・?
とりあえず、
>>234 さんお手数おかけしました。
VB.NETとVB6.0を両方インストールするハードディスク容量がなく、 VB6.0の方を選んだオレ
237 :
デフォルトの名無しさん :03/10/20 08:10
数日前か行き詰まっています。どなたか教えて頂けると幸いです。
Private Sub Command1_Click()
Dim isSucess
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "
http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp "
With objIE.Document
.getElementsByName("login").Item(0).Value = "yahooid" ' Yahoo ID
.getElementsByName("passwd").Item(0).Value = "yahoopass" ' パスワード
isSucess = .Forms(0).submit()
End With
End Sub
だと、ユーザーIDとパスワードが入力できて、ログインできるんだけど、
WebBrouwserコントロールを貼り付けて、
Private Sub Command2_Click()
Dim URLocation As String
WebBrowser1.Navigate "
http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp "
WebBrowser1.Document.getElementsByName("login").Item(0).Value = "yahooid" ' Yahoo ID
WebBrowser1.Document..getElementsByName("passwd").Item(0).Value = "yahoopass" ' パスワード
WebBrowser1.Forms(0).submit()
End Sub
と書くと、WebBrowser1.Document.getElementsByName("USER_NAME").Item(0).Value = "overrun"
のところで、「オブジェクト変数またはWithブロック変数が設定されていません。」とでて止まってしまいます。
WebBrowserコントロールの使い方が間違ってるんでしょうか?
238 :
デフォルトの名無しさん :03/10/20 09:05
TCPでdoubleの数値を送るコンソールプログラムを作ってお ります。ですが、send()はchar *でないと遅れないらしく、double をcharに変換できたら・・とおもっております。 そこで、doubleからcharに変換する方法、教えていただけます か? 使用環境 OS:windows98 CPU:1.4GHz ソフト:VC++6.0
>>238 スレタイトルを1000回くらい読んでからにしてくれ。
PDFファイルを表示するプログラムを作成しています。 今はacrobat readerないにある"pdf.ocx"をactive x コントロールとしてフォームに貼り付けて 次のコードを使って表示しています。 Private Sub Command1_Click() dim filepath as string filepath = C:\サンプル\REPORT\REPORT03.PDF" Pdf_main.LoadFile (filepath) ’コントロールにフルパスを渡してこの命令を行いとコントロールに表示 End Sub このコードで表示までできるんですが、 再度表示し続けると、表示速度が遅くなります。 調べてみるとAcroRD32.exeがリソースから終了せず、 (つまりアクロバットリーダーが起動し続けている状態と同じ) メモリから開放されていないようなのです(タスクマネージャーで見ました) 終了したときにAcroRD32.exeを終了させて常に表示する、 もしくはほかの方法で表示やプログラムを終了させても 速度を遅くならないようにするにはどうすればいいのでしょうか。 開発環境は OS:win2000 VB6.0SP5 です。 初心者の長文質問ですみませんがご教授お願いします。
そのOCXの仕様がわからないから適当だけど、LoadFileの対の関数ってないの? ファイルを開放するようなイメージの関数。 上記だけ見ると、ファイルオープンしっぱなしだからじゃないの?って感じが。
>>241 さん
探してみましたが、それらしきものは見つかりませんでした。
ほかの方法としてこのようなことをしてみたんですが、
終了処理中に
Private Sub Form_Unload(Cancel As Integer)
dim obj as object
Set obj = pdf_ctrl.object
Set obj = Nothing
End
End Sub
PDFコントロール内にあるこのobjectという関数をobject宣言した変数に格納し、
それをメモリから開放したんですが、余計遅くなりました(メモリからAcroRD32.exeは終了しましたが。)
>>242 です。間違えましたこっちでして見ました。
×set obj = pdf_ctrl.object
↓
○set obj = pdf_ctrl.Parent
244 :
デフォルトの名無しさん :03/10/20 16:07
>>237 質問しているところのコードがCommand2_Click内にないので、いまいち質問の意味がよく
わからん。よって、以下は推測で答えてみる。
WebBrowser1.Document.getElementsByName("USER_NAME").Item(0)
の、どのレベルでオブジェクトがないって言われているか調べてみ。WebBrowser1は多分ある
よね。以下、
1. WebBrowser1,Documentはあるか(つまり、XMLを読み込めているか、XMLはWell
Formedか、ちゃんとルートがあるか)
2, USER_NAME という要素(エレメント)はあるか
いまのコードの書き方だとかなり階層を辿っているので、どこでエラーが発生している
のかいまいち分かりにくい。XMLの(少なくともデバッグの時は)
Dim TestElement as Object
Set TestElement = WebBrowser1.Document
If (TestElement Is Nothing) Then
MsgBox "WebBrowser1.DocumentはNothingだ"
End If
とか言う風にするなり、もっとかっこ良くラッパークラス作るなりしてデバッグしやすくする方が
吉だと思う。
245 :
デフォルトの名無しさん :03/10/20 17:04
VB6でOLEでExcel2000を操作しています。その中の処理で、 「あるシートの中の数式を全部消したい(値はそのまま残したい)」というのが あるんですが、現在は ・範囲を選択 ・クリップボードにコピー ・値だけ貼り付け という手順を踏んでいます。 これでも動作しているのですが、何百、何千というExcelファイルに対して このような処理を行っていると、クリップボードがしじゅう書き換えられているために、 バックグラウンドでこの処理を動かしておいて、他の作業を行うということができずに 困っています。 そこで、クリップボードを介さずに、Excelシートの式の部分を削除するはないものか と 思ったのですが、ご存知の方、ご教示ください。 下のが現在の処理の抜粋です ' データ選択 Call sheetData.Rows("10:" & CStr(GetMaxRows)).Select ' クリップボードへコピー&値だけにして貼り付け (式の削除) Call xls.Selection.Copy Call xls.Selection.PasteSpecial(Paste:=xlValues)
>>242 連続処理をするならば、イメージ的には・・・。
1.PDFの起動
2.ファイルの起動
3.印刷
4.まだあるなら2へ
5.PDFの終了
とすればいいと思うんだけど。
(クロスしてスレに出てるるEXCELの処理と同じような感じなんだけどね)
>>237 DocumentCompleteイベントが来るまで待て。
>>245 の件ですが、発想の転換で、Excel Applicationの
自動計算をオフにすることで解決しました。というか、むしろ
こっちのほうが正常・スマートなやり方ですね・・・・
xls.Calculation = xlCalculationManual
でも、一気に式を消すような方法があるようでしたら、ものはついで?
なので、今後のためにご教示願います。
┌┬┐ ├┼┤→□ └┴┘ 一枚の画像の中に複数の絵が描いてあり、その中から絵の一枚を取り出すコントロールはなんというやつですか?
>>249 もしかしてレイヤーをイメージしているのか?
単純な絵の中から一枚を取り出すのは難しいと思うが。
>>250 単純なひとつのレイヤーしかない一層の絵です。今日古本屋で立ち読みした本に載ってたんですけど、また見てきてからここに報告してきます。
BitBlt
>>252 自作のプログラムならそうなるところですが、別売のコントロールだとすごく簡単にできちゃうのがわかったんですけど、立ち読みだったのでうろ覚え・・・
BitBltとUserControlで自作すれば?
その別売りのコントロールってなに?
>>254-255 APIはまだ使ったことないのでしばらくはBitBlt保留で。
また本屋行って調べてくるので、コントロール名についてはまたのちほど。
>Dim TestElement as Object > >Set TestElement = WebBrowser1.Document >If (TestElement Is Nothing) Then >MsgBox "WebBrowser1.DocumentはNothingだ" >End If > >とか言う風にするなり、もっとかっこ良くラッパークラス作るなりしてデバッグしやすくする方が >吉だと思う。 やってみたところ、 WebBrowser1.Document.getElementsByName("login") はOKで。 WebBrowser1.Document.getElementsByName("login").Item(0) がだめだった。 ってことはItem(0)という指定方法が間違ってるのか・・・
>>257 ItemをItemsとしてコレクションにするのはどうだ?
初めまして。 バーコードスキャナーの購入を計画しております。 目的はAccessとの連携で在庫管理にでもと。 そこでお聞きしたいのですが VB上でバーコードスキャナーからのデータを簡単に扱えるのでしょうか? そういったコントロールみたいな物があって容易に数値を取り出せればいいのですが。
260 :
デフォルトの名無しさん :03/10/21 01:44
>>259 VB対応と書いてあるバーコードを買えば一発。
レスどうも。 >>VB対応と書いてあるバーコードを買えば一発。 ということは付属のソフトを使えば楽だが、 自作では容易にはいかないと言うことでしょうか? 中古も検討しておりまして 付属品が「本体とドライバー」の場合はどうかと思いまして。
少し解決しました。
ページの読み込みとフォームへの入力を別にすれば動きました。
Private Sub Command1_Click()
WebBrowser1.Navigate "
http://login.yahoo.co.jp/config/login?.lg=jp&.intl=jp "
end sub
Private Sub Command2_Click()
WebBrowser1.Document.getElementsByName("login").Item(0).Value = "yahooid" ' Yahoo ID
WebBrowser1.Document..getElementsByName("passwd").Item(0).Value = "yahoopass" ' パスワード
WebBrowser1.Forms(0).submit()
End Sub
ページの読み込みが完了していないのに、入力しようとしているからだめだったんですかね。
これを一つのボタンでやりたいんですが、
読み込みが終わるまでウェイトをかけることのってどうやればいいんでしょうか?
>>261 製品(バーコードスキャナ+付属品)による。
VB用ライブラリがついていれば簡単にあつかえるし、
C用ライブラリがついていればたぶん使える。
ライブラリが無くて通信ポートでやり取りしろとマニュアルに
やり方が書いてあるかもしれないし、
なにもついていなくて四苦八苦しなければならないかもしれない。
>>262 WebBrowserのプロパティを調べれ
スキャナとのI/Fがキー入力のものを探せば、何もいらないと思うが。
つか最近主流のUSBバーコードリーダは殆どがキー入力
267 :
デフォルトの名無しさん :03/10/21 10:34
>>261 263の言う通りだが、VB対応と書いてあれば259のようにコントロールがついていると言う
意味で付属ソフトを使うと言う意味ではない。
268 :
デフォルトの名無しさん :03/10/21 11:47
APIかVBか迷いましたが、こちらにて質問させていただきます。 フォームにピクチャーボックスとタイマーを貼り付けて拡大鏡を作りました。 しかし、しばらくはうまく動いているようにみえるのですが時間がたつとStretchBltしたところで 「実行時エラー"AutoRedrawイメージを作成できません。"」とのエラーが出てしまいます。 これはメモリ不足?どこかでリリース洩れしてるってことなんでしょうか? APIはAPIビューアの宣言のまま、ピクチャーボックスの設定は AutoRedraw = True hasDC = True ScaleMode = ピクセル としております。 どなたかよろしくお願いいたします。
Private Sub Timer1_Timer() Dim lhDc As Long Dim lRes As Long Dim lCur As Long Dim po As POINTAPI Dim icn As ICONINFO ' タイマーオフ Timer1.Enabled = False ' カーソル情報取得 GetCursorPos po ' ピクチャボックス消去 Picture1.Cls ' デスクトップからピクチャボックスへ拡大表示 lhDc = GetDC(0&) lRes = StretchBlt(Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, _ lhDc, po.x, po.y, Picture1.ScaleWidth / 2, Picture1.ScaleHeight / 2, SRCCOPY) lRes = ReleaseDC(0&, lhDc) ' アイコンをピクチャボックスへ拡大表示 lCur = GetCursor GetIconInfo lCur, icn lRes = DrawIconEx(Picture1.hdc, -(icn.xHotspot * 2), -(icn.yHotspot * 2), lCur, 64, 64, 0&, 0&, DI_NORMAL) ' 表示 Picture1.Refresh ' タイマーオン Timer1.Enabled = True End Sub
270 :
デフォルトの名無しさん :03/10/21 12:41
VBの実行時エラー63てどんなエラーなのでしょうか? 店で発生しているためオペレーションなどがわからず このエラー番号だけ教えられ原因がわかららない状況です. 実行時エラーの一覧などあるのでしょうか? ネット検索、過去ログでも見つからないので わかる方いましたらよろしくお願いします.
271 :
デフォルトの名無しさん :03/10/21 12:46
>>1 の「六. VB情報募集中。」というのはVBについてであれば質問や回答でなくても書き込んでいいということ?
>>270 ヘルプで、1分でわかったが。。。
「レコード番号が不正です。(Error 63)」
GetDCしたもののお片づけは?
ごめん、してあったね。
275 :
デフォルトの名無しさん :03/10/21 13:10
え・・・ ありがとうございました. ヘルプにあるんですね。 いまだに見つからないです・・・ がこの内容で調べてみます. 本当にどうもでした
>>275 普通にErrのDescriptionを見るとか、Error関数にError番号を渡すとか。
どうやらアイコンの描画でつまづいているようです。 ' アイコンをピクチャボックスへ拡大表示 lCur = GetCursor GetIconInfo lCur, icn lRes = DrawIconEx(Picture1.hdc, -(icn.xHotspot * 2), -(icn.yHotspot * 2), lCur, 64, 64, 0&, 0&, DI_NORMAL) この3行をコメントにするとエラーが発生しなくなりました。 う〜ん、DrawIconExの遣い方が間違ってるのでしょうか。。。 仕方がないので(カーソルの形が変わらないのが残念ですが)、 今回はマウスカーソルが差している場所さえわかればいいので カーソル画像(Picture2)とマスク画像(Picture3)を用意しておいて lRes = StretchBlt(Picture1.hdc, 0, 0, Picture3.ScaleWidth * 2, Picture3.ScaleHeight * 2, _ Picture3.hdc, 0, 0, Picture3.ScaleWidth, Picture3.ScaleHeight, SRCPAINT) lRes = StretchBlt(Picture1.hdc, 0, 0, Picture2.ScaleWidth * 2, Picture2.ScaleHeight * 2, _ Picture2.hdc, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, SRCAND) として対処したいと思います。
げっとかーそるでとったハンドルのお片づけとか。
>>278 GetCursorで取ったハンドルもリリース(デリート?)しないと駄目だったのでしょうか?
ヘルプにはなにも書かれていなかったのでとくになにもしなかったのですが…
ただ、GetCursorのヘルプをよくみると
Windows 98 および Windows NT 4.0 SP3 以降:
グローバルカーソルに関する情報を取得するには、
たとえ現在のスレッドがそのカーソルを所有していない場合でも、
GetCursorInfo 関数を使います。
とあるので、他のウィンドウがカーソルを所有しているときには
GetCursorで取ったハンドルが無意味なものだったのかなと思い修正してみました。
' アイコンをピクチャボックスへ拡大表示
pci.cbSize = Len(pci)' pci は CURSORINFO構造体
GetCursorInfo pci
GetIconInfo pci.hCursor, icn
lRes = DrawIconEx(Picture1.hdc, -(icn.xHotspot * 2), -(icn.yHotspot * 2), pci.hCursor, 64, 64, 0&, 0&, DI_NORMAL)
これでちょっと様子を見てみます。
>>279 いや、書いてみただけ・・・、でもまあ、このあたりのAPIって借りたものは返すが基本だったから。
CloseHandleとかはちがうだろうし。
262はレスを無視する場合があるのでおしえな〜い
バーコードスキャナーの件参考になりました。
283 :
デフォルトの名無しさん :03/10/22 04:54
最近作ったツール(VB)ソースのみ(コンパイルは自己責任で)
コメントもないけれど中身は単純なもの。
使い勝手が良いので、うpさせてもらう。
(・∀・)イイ!!と思ったらお好みにカスタマイズして使ってやってくれ。
俺のデスクトップには4つしかアイコンが残らなくなった
http://up.isp.2ch.net/up/618cbe41eb16.lzh 概要:SUSIEみたいな感じで設定したショートカット郡を表示
及び、ショートカットの登録アプリ。いくつかのサンプル設定
探せば便利なフリーソフトぐらいあるかもしれないが
284 :
デフォルトの名無しさん :03/10/22 14:47
DLLのバージョンを調べるコードなのですが、XPでコンパイルしたEXEを98SE上で走らせると「実行時エラー'438' オブジェクトは、このプロパティまたはメソッドをサポートしていません」 エラーが発生、EXEが落ちる、という現象が起こってしまいます。 コーディングでFSOを使用していて、scrrun.dllの場所が98系とNT系で違うのでこの現象が起こってしまうのではないか、 と睨んでいますが、回避方法がわかりません。調べてみたところ、 「VBScriptで標準入出力を処理するには、Windows Script Hostのバージョンが5.1以降の必要があります」 とありまして、困っています。 そこで、クライアントマシンの環境は変更しないとして、 1:FSO使用でコーディング上にて回避可能?またその方法? 2:1は無理でAPI使用にて回避 3:もっといい手がある のどれにあたりますでしょうか? また、どういった方法で実現可能でしょうか? よろしくお願いします。 環境:[クライアント] Windows98SE,VB6標準ランタイム scrrun.dll[ver:5,0,0,3715 , c\windows\system] [コーディング] WindowsXPSP1(フルパッチ),VB6SP5 ソース内でFSOを使用 [ソースの一部] Dim Fso As New FileSystemObject Dim FsoFile As File Dim sMyFile As String Set myFile = Fso.CreateTextFile(sFilePass) myFile.WriteLine (Now & " : " & sWriteMes) myFile.Close Set myFile = Nothing
CreateObjectでFileSystemObjectを生成してみるとかは? 全部Object型でやる。
>285さん Dim Fso As Object Dim FsoFile As File Set Fso = CreateObject("Scripting.FileSystemObject") とやってみたのですが、結果は一諸でした(;´Д`)
文字列の限られた範囲だけを表示するのってどうすればいいんでしょうか? たとえば「DARS」という文字列があったとして、真ん中二文字「AR」のみを他の変数に置き換えたいときとか。
OCXを作成していて、 コントロールモジュールでは UserControl のプロパティを参照したりセットできるのですが、 UserControl.AutoRedraw = True ←こんな感じで しかし新しくクラスを作成しその中で、UserControl のプロパティやメソッドを参照の しかたが解りません教えてください。 今のコード書いておきます。 Public pPaints As cls Public ParentForm As Form Private Sub UserControl_Resize() Set pPaints = New cls Set ParentForm = UserControl.Parent pPaints.PicHei = UserControl.ScaleHeight ←コントロールモジュールなら参照できる pPaints.PicWid = UserControl.ScaleWidth '// スケール取得 UserControl.Scale (0, pPaints.PicHei)-(pPaints.PicWid, 0) '// Y方向を逆にする pPaints.TrgetObj = ParentForm ←ここでいろいろしてみたけどできませんでした。現時点では OCXを貼り付けたフォームを参照してるだけ pPaints.適当な処理 '// メソッド呼び出し End Sub '// クラス側 // Private mTrgetObj As Object Property Let TrgetObj(ByRef Obj As Object) Set mTrgetObj = Obj End Property Public Sub 適当な処理 mTrgetObj.DrawMode = 7 ここでエラー End Sub
>>287 strResult = Mid("DARS",2,2)
斜め読みでもいいから、入門書読んだようがいいかも。
>287 ARを必ず何かに置き換えるのなら replace 今回のみ抜き出すのなら mid 毎回なにかするなら 正規表現 外してたらスマソ
291 :
デフォルトの名無しさん :03/10/22 21:02
Commandボタンで画像を左に表示することってできるんですか? 無理なら画像に文字を入れてやろうと思ってるんですが・・・
>>289 >>290 ありがとうございます。VB、midで検索したところまさしく自分のやりたかったことを教授してくれているページが見つかりました。やはりコード集のようなものを買わなければいけないなと思いました。
293 :
デフォルトの名無しさん :03/10/22 21:29
コード集?ハァ?
VBスレは良く煽り厨が出てくるねw
295 :
デフォルトの名無しさん :03/10/22 22:36
今日はドットネットでプログラムつくったさっ!わっはっはっはっは オマエラ知ってるか?ドットネットではDLL使うとき、DLLのファイル名も指定しないとなんないんだぞ! ところでポケットPCでサーバー/クライアントのシステムって作れるの? ぽけっとPCのODBCとか0040とか聞いたこと無いんだけど
296 :
デフォルトの名無しさん :03/10/22 22:49
氏ね
297 :
デフォルトの名無しさん :03/10/22 22:51
( ´,_ゝ`)...シルカヨ
>>291 サブクラス化すればできるはず。
面倒ならDelphiかBCBのコントロールを
適当にかっぱらってきて再利用w
299 :
デフォルトの名無しさん :03/10/22 23:18
ピクチャーボックスにUnicodeの文字を表示させようとしたのですが、 殆どの文字では正常に表示できるのですがいくつか表示できなかったり別の 文字に置き換わって表示されてしまいます。 例えば、U+5DEE(「差」という文字)を指定すると何故か「移」が表示されてしまいます。 これはどういうことなのでしょうか? 原因が分かる方教えてくだされば幸いです。 Private Sub Command1_Click() Dim hOldFont As Long Picture1.Cls hOldFont = SetFont(Me.hWnd, Picture1.hDC, 26, "SimSun") Call ExtTextOut(Picture1.hDC, 0, 0, 2, ByVal 0&, StrConv(ChrW$(&H5DEE), vbUnicode), 2, 0) Call DeleteObject(SelectObject(hDC, hOldFont)) ' 新しいのを破棄 End Sub Private Function SetFont(ByVal hWnd As Long, ByVal hDC As Long, ByVal nPoint As Long, ByVal lpFontName As String) As Long Dim hFont As Long Call SetMapMode(hDC, 1) hFont = CreateFont(-nPoint * 20 \ Screen.TwipsPerPixelX, 0, 0, 0, 400, 0, 0, 0, 1, 0, 0, 0, 0, lpFontName) Call SelectObject(hDC, hFont) SetFont = SelectObject(hDC, hFont) ' 一つ前のフォントを返す Call SendMessage(hWnd, &H30, hFont, 1) End Function
.NET使えよバーカ。
今まで手動でしていたHP上の複数のhtml文書の結合を自動化しようと思いました。 (主にライバル店舗の商品一覧です(笑) WebBrowserコントロールを使っているのですがうまくいきません。 最初にページを表示してからボタンにより結合処理をすると上手くいくのですが(サンプル1) ページの表示とともに結合処理をすると失敗します。(サンプル2) なんでですかね? 表示より先に結合してしまいます。 スレ見ていたら262当たりのことが関連している気がするのですが… 結合する文書が多数になる場合もあるので、その文書分のコントロールを用意するわけにもいきませんし。 アドバイスを。
(サンプル1) Private Sub Command1_Click() WebBrowser1.Navigate HtmlURL(0).Text 'HP表示 WebBrowser2.Navigate HtmlURL(1).Text End Sub Private Sub Command2_Click() Dim HtmlURLString As String HtmlURLString = WebBrowser1.Document.body.innerHTML & WebBrowser2.Document.body.innerHTML RTextBox1.Text = HtmlURLString 'リッチテキストにhtml文書を表示 End Sub (サンプル2) Private Sub Command2_Click() Dim HtmlURLString As String WebBrowser1.Navigate HtmlURL(0).Text WebBrowser2.Navigate HtmlURL(1).Text HtmlURLString = WebBrowser1.Document.body.innerHTML & WebBrowser2.Document.body.innerHTML RTextBox1.Text = HtmlURLString 'リッチテキストにhtml文書を表示 End Sub
DoEvents入れてみたら?
まだ問題解決できません。だれか答えられる方いませんか?
結局API使用にて解決しましたm(._.)m ペコッ
306 :
デフォルトの名無しさん :03/10/23 00:16
VBでDAOを使ってデータベースにアクセスしているのですが、 ユニークなIDの取得方法が ID Field1 1 a 2 b 3 c 5 d 6 e というテーブルがあったとき、次のIDは"7"ではなく、 "4"を取得したいのですが、方法がありますでしょうか? つまりIDは、数値をどんどん増やすのではなく、削除などで 飛び飛びになってしまった所を埋めていく形にしたいのです。
>>288 なにを言っているのか理解できないのですが・・そうですかアホですか俺は
>>308 自分でも Property Get プロシ−ジャを追加したのですが
うまくいかないです。よろしければコード教えてもらえますか?
こういうこととちゃうんかな。どこでどういうエラーが出るか書いてくれ [class1] Private o As Object Public Property Get obuje() As Object obuje = o End Property Public Property Let obuje(ByVal vNewValue As Object) Set o = vNewValue End Property Public Sub sub1(s As String) o.Caption = s End Sub [form2](別にform1) Private a As Class1 Private b As Class1 Private Sub Command1_Click() a.obuje.Caption = 1 End Sub Private Sub Command2_Click() b.obuje.Caption = 2 End Sub Private Sub Form_Load() Set a = New Class1 Set b = New Class1 a.obuje = Form1 b.obuje = Form1 End Sub
ミスッた。Getがエラー確認のままだ Public Property Get obuje() As Object Set obuje = o End Property
DoEventsって処理を一時中断する関数ですよね。 時間がかかるのは表示の方なのですが…。
WebBrowser1.ReadyStateやWebBrowser1.DocumentCompleteとかを 使ってページがすべて読み込まれるまで待機したら。
301は表示しながら裏で結合したいのだろう がんばれ、時空を歪めれば可能だ
>>310 普通はそれでいけるんです。 オブジェクト型に Obj = Form1.Picture1
みたいにすればクラス内だろうがどこだろうが、 Obj.プロパティ で ピクチャボックスの
プロパティを参照したりセットできたりするのですが、
通常のEXE作成ではなく ActiveX作成でのことなんです。
ユーザーコントロールというものが与えられますよね?
そのユーザーコントロールモジュールの中で、
UserControl.プロパティ はもちろん参照できます。
問題はここからで
ユーザーコントロールモジュールでクラスを生成します。
Set A = クラス
A.ClsObj = UserControl ←ここでユーザーコントロールを代入したいわけです。
310さんの a.obuje = Form1 と同じことです。
<クラス内部>
Property Let ClsObj(ByRef Obj As Object)
Set ClsObj = Obj
End Property
Public Sub メソッド()
ClsObj.プロパティ ←ここでメソッドやプロパティがないみたいなこと言われたり
します
End Sub
ようは クラス内でユーザーコントロールを参照したいのに、フォームやピクチャーボックスみたいに
オブジェクト型変数=Form1
オブジェクト型変数.プロパティ みたいに参照できないということなんですが
この説明でなんとなくわかりましたでしょうか?
>>314 処理を早くするために次ページを読ませながら
HTMLを加工したことならあるけどね。
環境変えれってのは勘弁で…
>WebBrowser1.ReadyStateやWebBrowser1.DocumentCompleteとかを >使ってページがすべて読み込まれるまで待機したら。 アドバイスありがとうございます。 WebBrowserでヘルプ見たのに見逃しておりました。 何となく形になってきたので明日にでも試してみます。
>>315 言いたいことは解った。やりたいことは判らん。
文にしようとするとゲルニカのようになる要望というものはあるものだし
どいつが実体を持ってて、どいつがどいつの親でと・・俺はお手上げだ。
不都合がなければソースを丸めてうp。
でなければ、その分野の達人を待ちつつ、独自に色々試すよりないか
第一感 可能。なんか見落としがあるんだろう
320 :
デフォルトの名無しさん :03/10/23 02:37
format("0.0", 0.05) でPCによって返ってくる値が 0か0.1なんですが、なぜでしょう? 開発はVB6 SP5です。 ちなみに winxp => 0 win2k => 0.1 win98SE => 0 でした。仕様かな?
format(expression,[format],... (XP) ?format("0.0",0.05) & " : " & format(0.05,"0.0") 0.05 : 0.1
あれ? 仕様です。となっていたと思ったけどSP1で修正されました。になっているね。
>321 delphiとごっちゃになってた須磨祖 >322 さんきゅ 今まで書いたFormat文は、無かったことにします。
>>286 解決したみたいだからあれだけど、それでは片手落ちだよ。
全てのFileSystemObject関連をObject型にしないと。=参照設定を外す。
326 :
デフォルトの名無しさん :03/10/23 13:43
VB6.0で現在時刻を正確に(ミリ秒まで)取得するのはどうすれば良いんでしょうか?
>>326 API使わないとムリ。GetLocalTimeだと思われ。
そのものズバリのサンプルも、ググれば出てくるよ。
328 :
デフォルトの名無しさん :03/10/23 15:49
質問です。 MSHFlexGridコントロールを使っているのですが、 マウス左クリック→ドラッグで、グリッドがスクロールしてしまいます。 これをスクロールさせない方法はあるでしょうか? いちおうScrollイベントやMouseMoveイベントを拾って、TopRowを設定するということをしたんですが、 これだと、マウスの動かし方によっては、動いて戻ってる様子がチラッチラッと見えるときがあるんです。 できればチラチラせずにスクロールさせないようにしたいのですが。 ここでReDrawもつかってみましたが、チラチラはしないものの、表示行の先頭行や最後行の残像が、 表示行全体に移ってしまうみたいな結果になってしまいました。 なんとかうまいことやる方法はないでしょうか。
329 :
デフォルトの名無しさん :03/10/23 17:44
VB6.0でWinNTやWin2000のサービスプログラムって作れますか? 作れるのでしたら、プログラムのサービスへの登録方法を教えて下さい。
MSDNにサービスとして登録する方法かツールがあった気がする。
>>331 リソースキットのSRVANYですな。
「桜時計を サービス化」などでぐぐると色々でてくるけど、VBアプリにも
使えるのかしらん。人柱きぼん
WebBrowserコントロールを使ったhtml文書の結合なんですが DocumentCompleteを使うことで上手くいきました。 と思ったのですが新たな問題が… 一度保存して終了した後に再度読み込んで起動すると 「実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されていません。」 といったエラーが。 何故?? 以下に結合処理などをのぞいたサンプルを。
Private Sub Command1_Click()
WebBrowser1.Navigate "
http://www.google.co.jp/ "
End Sub
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Text1.Text = WebBrowser1.Document.body.innerHTML
End Sub
-----
Command1_Click()ではなくてForm_Load()にすると問題ないのですが…
>>306 ID全件検索直後にRecordsetを渡せば、最小空き番号を返す関数を作ってみた。
Private Function GetAvailableMinNum(RS As DAO.Recordset) As Long
Dim lngCnt As Long
lngCnt = 1
Do Until RS.EOF
If RS!ID > intCnt Then Exit Do
lngCnt = lngCnt + 1
RS.MoveNext
Next
RS.MoveFirst
GetAvailableMinNum = lngCnt
End Function
>>334 回答じゃないけど、Microsoft HTML Object Libraryを参照設定して
Dim html As IHTMLDocument3
Set html = WebBrowser1.Document
とかやるとアーリーバインディングになってコード補完も使えるから便利だよ。
>>335 それだとデータが多くなって大きなIDが削除されると検索に時間がかかるから
削除IDを入れるテーブルを作ったほうが良いかも。
あと思いただけで詳しいアルゴリズムは考えてないけど、
二分探索の応用っぽいやりかたで高速に空きIDを探索できるかも。
データが全部埋まっていればデータ数と最後のIDは同じ。
そうでなければ半分の位置を調べてそのIDが半分かどうか、
そうでなければ・・・みたいに。
修正・・・ Private Function GetAvailableMinNum(RS As DAO.Recordset) As Long Dim lngCnt As Long lngCnt = 1 Do Until RS.EOF If CLng(RS!ID) > lngCnt Then Exit Do lngCnt = lngCnt + 1 RS.MoveNext Loop RS.MoveFirst GetAvailableMinNum = lngCnt End Function
>>337 読まずに
>>338 を書いてしまいましたm(_ _)m
「二分探索」について勉強してみます。
>>333 うろ覚えだけどDocumentCompleteは読み込みエラー時とかにも発生したと思う。
んで、Webbrowser1.DocumentがNothingになっていてとか。
どこのオブジェクトがないのか、そのときのWebbroserの各プロパティは
どうなっているのかとか調べてください。
>>339 でもカーソルを前後にちょこちょこ移動しなくちゃならないから
逆に遅くなるかもね。削除IDテーブルを作る方が簡単で速度も速いと思う。
343 :
デフォルトの名無しさん :03/10/24 00:16
Javaスレでも聞いたのですが OLE/COM以外のアプリケーションに対して バックグラウンドでsendkeysのような処理をしたいのですが これを実現するメソッドを所持している言語ってありますか?
PictureBoxに二次曲線が書けるようになれば、すぐできるようになるとおもふ
二分探索とかクイックソートとか。 プログラマの基礎項目からは外れてしまったのですか? プログラマ入門は プログラミング+アルゴリズム+専門語学力(設計書の理解) プログラミング入門は 標準入出力>ファイル操作>ポインタ(参照と実体)の理解 アルゴリズム入門は 順検索>泡ソート>二分探索>Qソート
プロパティ見たけどわからなかった・・・ Do While WebBrowser1.Busy DoEvents Loop よくわからないけどこれでいけた。
木陰様で何とか形にはなりました。 ただHPのページによってはフレームを使っていないにもかかわらず 二度以上取得していたりしてまだまだ課題が多い状態です。(いったいなぜ?) >うろ覚えだけどDocumentCompleteは読み込みエラー時とかにも発生したと思う。 >んで、Webbrowser1.DocumentがNothingになっていてとか。 >どこのオブジェクトがないのか、そのときのWebbroserの各プロパティは >どうなっているのかとか調べてください。 どうも私もそんな気がして最初はabout:blankにして回避しております。 各プロパティの状況はどうやって調べれるのでしょうか? まだ入門書レベルの知識なため理解できておりません。 よければアドバイスを。 ちなみにつたないサンプルで恐縮ですがこんな感じでプログラムしました。
Private Sub Command1_Click()
WebBrowser1.Navigate URLName(URLNum)
'Command1.Enabled = False
End Sub
Private Sub Form_Load()
URLNum = 0
URLName(0) = "about:blank"
URLName(1) = "
http://www.yahoo.co.jp "
URLName(2) = "
http://www.google.co.jp "
URLName(3) = "
http://www.infoseek.co.jp "
WebBrowser1.Navigate URLName(URLNum)
RText1.Text = ""
End Sub
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
URLData = URLData & WebBrowser1.Document.body.innerHTML
If URLNum = 0 Then
URLNum = URLNum + 1
Exit Sub
ElseIf URLNum >= 3 Then
RText1.Text = "<html>" & vbCrLf & "<body>" & vbCrLf & URLData & vbCrLf & _
"</body>" & vbCrLf & "</html>"
Exit Sub
Else
URLNum = URLNum + 1
WebBrowser1.Navigate URLName(URLNum)
End If
End Sub
一部字数の関係上削除しております。
> 各プロパティの状況はどうやって調べれるのでしょうか? 素直に、Debug.Print Webbrowser1.プロパティでもしたら?
よくわからんけどDoEventsでOKというのは、地雷の可能性大だな。 DoEventsってのが、どういうものかを考えれば、ほんとにそれでいいか、代替があるか判断できると思うけど。
>345 探索もソートもDBにお任せで実装はおろかアルゴリズムも 知らないプログラマはそうとう多いんじゃないかな。
.NETに厨房が移ったおかげか ずいぶんまともなスレになってきたな
>>351 最近はどの言語もSTLとか探索やソートのライブラリがついているからねぇ。
自己解決しました。 やはりユーザーコントロールはプロパティ、メソッドを マッピングしなければいけないみたいです。 OCXを使う側に公開する為にマッピングするものと思っていたらけど、 OCX作成の段階でマッピング(外部に公開)しないと、クラスはおろか標準モジュール からも呼べないみたいです。お騒がせしました。
>>353 でも、DBの場合は、素直に提供されている機能つかったほうがいいと思うなぁ。
もちろん、アルゴリズムなどは分かった上でだけど。
>>354 (
>>309 ) 解決したようで
個人的にマッピングどうのって言葉知らずで解らないが。
exe+actx+ocxのスパゲッティを造ってみたので一応うp
ちょっとやそっとの客の要望なら作り方しだいで解決できるだろう
「Project1.exeを2〜3重に実行するとあっちやらこっちやら参照するアプリ」
ttp://up.isp.2ch.net/up/2d5578f8d682.lzh (当然ながらレジストリに登録されないと動かせない、
あとでゴミを消す手段を知らない場合はactxやocxはお勧めできない)
>>309 サンプル作成どーも。
目を通して、参考にしてみます。
マッピングは、ようはユーザーコントロールにプロパティやメソッドを追加することです。
ユーザーコントロールにコマンドボタンを貼り付けたとして、そのボタンのプロパティを
ユーザーコントロールのプロパティとして外部に公開することをマッピングというそうです。
ActiveX作成なんてやったことなかったから困惑しましたがなんとかいけそうです。
>>309 じゃなくて
>>357 でした・・・
自分に宛ててどうする・・・
連夜の徹夜明けで頭がアフォになってました。
すいません。
360 :
デフォルトの名無しさん :03/10/24 17:44
typeでConstしたいんですが、どう記述すればいいのか教えてください。 イメージはこんな感じです。 Private Type XXX Const AAA As String = "A" Const BBB As String = "B" End Type Public YYY As XXX
Enum
enumは大文字小文字が固定されないので、 ダミーの関数を作成し、dim で同じ名称を定義するのをお勧めする
素直にクラスモジュルー使っとけ!!
vb6はどこでDLできますか? windowsダウンロードコーナーに行ってもリンク切れてました(泣
切れてたページってどこ? MSDNに入ればダウンロードできるのかな?
Visual Basic .NET 2003 をDLしたが意味なかった MSDNいっても似たような奴がいっぱいありすぎぃ
似たようなのってなんだ?
369 :
デフォルトの名無しさん :03/10/25 05:27
教えてください〜(泣 VB6使ってます。 デザイナモジュールファイルをプロジェクトに取り込むにはDoしたらいいですか? クラス {XXXXX-XXXXX}(コントロール XXXXX) はロードされていません。 というエラーが出ます。 よろしくお願いします。
370 :
デフォルトの名無しさん :03/10/25 10:49
質問なんですが、 コマンドボタンの文字の色とか変えるのにはどうすればいいのですか?
371 :
デフォルトの名無しさん :03/10/25 12:14
IEのインターネットオプションの設定内容を変更するプログラムを 作りたいんですが、どんなAPIを使ったらいいか分かりません。 知ってる人がいたら教えてください。
>>371 インターネットオプションのどこ?
場所によってAPIを使ったりレジストリを使ったり。
セキュリティとかを変えるのはCOM使ってと面倒だったような。
資料少ないし。
悪巧み?
設定勝手に変えられたらこまるじゃん?
いや、画像表示をON/OFFしたいだけなんで。 インターネットオプションの「詳細設定」の中のパラメータを変える方法が 分かりません。 InternetSetOption()というwininet.dllのAPIはインターネットオプションの 一部のパラメータを変えられるんですが、画像のON/OFFはできません。
>>375 レジストリのアクセス方法聞いたら悪巧みになるのか?
380 :
デフォルトの名無しさん :03/10/25 12:39
>>379 ありがとう。RegMonもいいけど、レジストリ差分取得ソフトがあるので
そっちでやってみます。
レコードセットに排他ロックをかけるのはLockType=2とするだけなので簡単ですが、 Access.mdbというmdbファイル自身に排他ロックをかけるにはどのようなプログラムにすればよいのでしょうか?
>>383 当方ADOしかできないのでADOのヘルプをみてそのキーワードを調べてみます。
>>383 ADOで排他ロックをかけながらデータベースに接続するにはどうしたらいいんでしょうかね・・
ADOのconn.open の引数には
conn.open 接続文字列、ユーザID、パスワード、同期・非同期
という引数しかなく排他ロックを指定してopenできないみたいです。
ファイルシステムオブジェクトにも 排他ロックをかけるメソッドがなかったし・・
違うディレクトリに移してから接続して、終了したら元に戻せば排他。
>>387 それも考えましたが、最終手段にしてみます。
今現在ASPのサーバサードスクリプトでVB Scriptを使っていて、
多数がアクセスするデータベースにアクセスのmdbファイルを使っていて、
ある一人がアクセスしている間はロックをかけてしまえばほかの人がmdbにアクセスできないので
mdbが壊れないというわけです。
ADO.NETやSQL Serverをつかわないで、ファイルにロックをかける方法を模索しています。
ADOのStreamオブジェクトにModeプロパティがあり、 それには排他できる設定がありますが、 でもそれはOpenしたメモリ内のStreamにロックをかけるという意味で Open元のファイルにロックをかけるという意味ではないようなのですがどうでしょうか?
>>390 ありがとうございます。
ファイルシステムオブジェクトに排他ロックをかけるメソッドがあったら
どんなファイルでも1人しかアクセスできないようにできてよかったのにな。
ファイルをゴミ箱に送るにはどうすればいいでしょうか?
393 :
デフォルトの名無しさん :03/10/26 01:35
>>392 APIにある。
SHFileOperation
悪いが後は調べてくれ。
395 :
デフォルトの名無しさん :03/10/26 11:29
教えてください。 1.常に最大化でサイズ変更は不可にしたい。 2.最小化ボタンをつけて、使わないときはそれで小さくする。 Borderスタイルで、「固定」で、WindowStyleで、「最大化」とやると 起動時は最大化になるが、タイトルバーをダブルクリックすると、元のサイズに 戻っちゃいますよね?これがちょっと困るので・・・ 一応過去ログ探しましたが、該当の質問が見当たらなかったので、 質問させてください。すいませんが、よろしくお願いします。
396 :
デフォルトの名無しさん :03/10/26 12:39
テキストボックスから、10進数若しくは16進数を入力し、 10進数を16進数に、16進数を10進数に変換したいのですが、 どうすればよいでしょうか?
397 :
デフォルトの名無しさん :03/10/26 13:37
すみません、分かる方はいらっしゃいませんか…?
>>299
400 :
デフォルトの名無しさん :03/10/26 16:29
質問です。 限られた範囲内で、イメージを表示して、はみ出した部分はスクロール で見れるようにしたいんです。 (例えば、外枠は640*480でイメージが1024*768の場合とか。) で前にも似たようなコトをやったんだが、 ピクチャコントロールを2つ重ねて、外側のピクチャ〜の範囲内で、 イメージを表示させたもう1つのピクチャ〜をスクロールさせて表示 させるって方法で上手くいったんだけど、 今回は、拡大・縮小も入れたくて、ピクチャ〜よりイメージコントロールが よさげだと思ったので、外枠をピクチャ〜で、実際のイメージの表示は イメージコントロールを使ったわけなんだけど、イメージの表示で、 Set imgScanImg.Picture = LoadPicture(ファイル名) で、コントロールに表示されないんです。 フォームに直接イメージコントロールを貼り付けてやってみたら 表示できるんで、ピクチャ〜の中にコントロールをセットしているのが 間違っているのかな?と思うんですが・・・ わかりづらくて、ごめんなさい。 どなたかわかる人いたら教えてください。
401 :
デフォルトの名無しさん :03/10/26 20:12
VB6.0を使っているのですが、 command1を押したときにText1.Textに入力した数字を Val関数で数値化して、その数値を1000で割って、 その余剰を求めたいのですが、どうやって余剰を出すのかわかりません。 初歩的な質問かと思いますが、漏れの持ってるテキストに載ってませんでした。 ググってもみたのですが、載っているサイトはみつかりませんでした。 Val(Text1.Text)のあとから一文字も進みません お願いします
あまりはMOD
403 :
デフォルトの名無しさん :03/10/26 20:23
Val(Text1.Text) ↑ を変数に置き換える 型はstring意外なら何でもいいよ。
訂正:
余剰じゃなくって剰余みたいです
123456の場合
1000で割って
123.456になりますが、
456を取り出したいです
>>402 MODってどうやって使えばいいのでしょうか?
406 :
デフォルトの名無しさん :03/10/26 20:29
名に作ろうとしてるんすか。
> 余剰じゃなくって剰余みたいです どっちも正しい。 関数とかじゃなくて+-/*と同じ演算子なので 123456 MOD 1000で456になる。
408 :
デフォルトの名無しさん :03/10/26 20:30
ちなみ O=mod(text1.text) form1.caption=○
>>404 プログラムの問題じゃないので、
紙と鉛筆を使って考えてください。
初心者の質問すると叩くアンチVB厨の多いスレだな。
>>403 変数ですか
Aとかでいいのでしょうかねぇ
>>405 >>1 にもMSDNとありましたが、
漏れにはMSDNが何かわからなかったのでスルーしますた スマソ
>>406 簡易パスワードでつ
>>407-408 おぉ なるほど 勉強になりました
ありがとうございます
スレ汚しすみませんでした
412 :
デフォルトの名無しさん :03/10/26 20:36
\ わ っ は っ は ! / \ / 人 人 人 人 (__) (__) (__) (__) (__) (__) (__) (__) (・∀・ )(´∀` )( ・∀・)( ´∀`) l  ̄l ̄ ̄Ul ̄U ̄U ̄Ul ̄U ̄Ul ̄U ̄U ̄l\ l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄l\l l ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l\l l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄ ̄l ̄ ̄l\l
415 :
デフォルトの名無しさん :03/10/26 20:38
a as integer でいいよ。 古本買うことをお勧めします。 vb6.0以降なら何とかなるっす。
>>415 本屋のキャンペーンが12月にあるので
それまで月刊誌以外は買わずに
12月になったら
VBの逆引き辞書など、まとめ買いする予定です
418 :
デフォルトの名無しさん :03/10/26 20:41
401
419 :
デフォルトの名無しさん :03/10/26 20:42
がんがれ
今更VBかよ…
リモートホストのIPを抜き出すのは どうしたらいいんでしょうか? WINDOWSXP、VB6.0、SP5です。
423 :
デフォルトの名無しさん :03/10/26 21:34
意味わかりません
www.yahoo.co.jp→IPってことだろ?
>>401 ですが、
皆様のお陰で
簡易パスワードチェッカーとパスワード生成ソフトが出来ました
ありがとうございました。
426 :
デフォルトの名無しさん :03/10/27 00:12
>>400 普通に出来るが?(表示だけなら)
Image1.Picture = LoadPicture(ファイル名)
もちろん表示後のストレッチも。
あと、コンテナにフレーム使ってもいいし。
もしかして、もっと高度な話なの?(ならゴメン)
オートリドローというオチだとか
428 :
デフォルトの名無しさん :03/10/27 00:39
質問というか意見というか。 MsgBox関数で MsgBox "しばらくお待ち下さい。", , "タイトル" とか str = MsgBox("しばらくお待ち下さい。", , "タイトル") になるのはわかる。 でもMsgBox("しばらくお待ち下さい。", , "タイトル") と括弧つけたら何でエラーになるんだよ!
Call MsgBox("しばらくお待ち下さい。", , "タイトル") MsgBox ("しばらくお待ち下さい。"), , (("タイトル"))
>>430 レスサンクス。
普通は括弧付きだろ、っていう考えだったため
Call MsgBox("しばらくお待ち下さい。", , "タイトル")
見て納得。
ちなみにVB入門書で初めて自作関数を作るときに
Call [関数名] (引数1,引数2,…) と
[関数名] 引数1,引数2 が同じ事を説明していなくて迷った経験がある。
VB6 & ADO & .mdb なのですが とある主キーをもつレコードが あれば、データを更新 なければ追加 としたいのですが、あるかないかを判断するにはどうしたらいいのでしょうか?
>>432 SQL文でやるなら、Updateを投げて結果0件ならInsert。
434 :
デフォルトの名無しさん :03/10/27 17:10
VB6(on XPpro)を使用してます。 フォームにコントロールを貼り付けてPGを作成していました。 何個か、似たような項目が出来たので、フレームにまとめて しまいたいのです。 最初にフレームを貼り付けてから、後からコントロールをその フレーム内に作成すると、問題なくグループ化されます。 しかし、フレームを作って、既存のコントロールをドロップし ても、グループ化出来ません。 手間がかかるので既存(デザイン済)のコントロールを流用し たいのですが、分かりません。出来そうな気がするのですが・
ソフトを起動したときにタスクマネージャーに表示されないようにしたいのですが、 どうすればいいのでしょうか? ググで調べた結果 TaskVisibleプロパティを弄ればいいみたいですが、 フォームのプロパティでVisibleをTrueからFalseにしても、 表示されてしまいます。 OSはWinXPproです
ShowInTaskbar
>>436 それをTrueにしてもFalseにしても
タスクマネージャーに表示されてしまいます
ずっと ググで検索してるのですが
どうやらタスクマネージャーに表示させないのは無いようです
そこで、
タスクマネージャー自体を終了させて、
それ以降、再起動するまでタスクマネージャーを起動させれないようにするには
どうすればいいのでしょうか?
↑VC++でのソースコードは大体わかるのですが、VBはわかりません
>>438 ありがとうございます。
・切り取る
・フレームを選択して、ターゲットを当てる
・貼り付け
でOKでした。
なんて可哀想なんだ ・゚・・゚・(つ∀^)・゚・
自作のコントロールの配列があります。 ある条件で、(例えばコントロール内のTextBoxの文字数が3を越すと)次のコントロールに Focusが移るようにするには、どうしたらいいんでしょうか?
>>443 1.自作コントロール側で親フォームをたどって兄弟を探してそいつにバトンタッチ。
2.普通にChangeイベント辺りを実装して、FormのControlsから次のタブ順のコントロールを探す。
445 :
デフォルトの名無しさん :03/10/28 11:21
-----HTML抜粋 <SCRIPT TYPE="text/VBScript"> Sub Hoge() SAMPLE.KNAME = "テスト" End Sub </SCRIPT> </HEAD> <BODY onload="Hoge"> <OBJECT ID="SAMPLE" classid="clsid:XXXXXXXXXXXXXXXXXXX"> <param name="KNAME" value="TESTTESTTEST"> ←この行があると何も表示しない </OBJECT> </BODY> -----VBソースより抜粋 Public Property Get KNAME() As String KNAME = labKNAME.Caption End Property Public Property Let KNAME(ByVal New_KNAME As String) labKNAME.Caption() = New_KNAME PropertyChanged "KNAME" End Property
>>442 お前その顔は笑ってるだろ。笑ってるな、確かに笑ってる・・・。
チキショーみんなしてバカにしやがって(^Д⊂
448 :
デフォルトの名無しさん :03/10/28 18:18
VB6.0 タブキー押下でイベントを実施したいのですが、コードが分かりません。 KeyDown, KeyUp, KeyPressはタブキーを認識しないと見ました。 タブキー押下時のイベントは、どこに書けばいいのでしょうか? (イベントはすでに書いているので、どのプロシージャに書けばいいのか教えていただけますでしょうか?)
>>448 TextBoxで試したけど、KeyDownでおもいっきりとれるじゃん。
>>448 あと、タブの場合、デフォルトの動作(次コントロールへフォーカス)があるので、
喧嘩しないように注意しなよ。
Private Sub Form_KeyDown(KeyCode As Integer) If KeyCode = vbKeyReturn Or KeyCode = VbKeyTab Then ' フォーカス移動 If ActiveControl.Name = "txt***" Or ActiveControl.Name = "txt****" Then Call Check End If Call FocusNextControl(Me) KeyCode = 0 Exit Sub End If End Sub なんですが、タブキー押しても、このプロシージャにイベントが来ないんですよ。
452 :
デフォルトの名無しさん :03/10/28 20:15
>>451 別のコントロールにフォーカスがあったらフォームイベントでは取れないよ。
キーボードフックでもやるしかないんじゃない?
453 :
デフォルトの名無しさん :03/10/28 20:18
すごい初歩的質問なんですが、、 例えば数字を”000354”みたいに0を前詰して表示したい場合に、 VBではどんな関数があるんでしょうか? Formatではできなさそうだったので。 Cだったら sprintf(buf, "%06d", num); こんな感じなんですが。
Format$(354, "000000")
455 :
デフォルトの名無しさん :03/10/28 20:20
>>453 Format(buf, "000000")
456 :
デフォルトの名無しさん :03/10/28 20:21
457 :
デフォルトの名無しさん :03/10/28 20:30
>>451 そのフォームに載ってるコントロールの数が少なければ、
全てのコントロールのKeyDownイベントハンドラの中で
Form_KeyDownをコールさせるようにすることもできる。
あんまり頭いい方法じゃないけど。
458 :
デフォルトの名無しさん :03/10/28 23:35
VB6ってXPでまともに動作します? VB6終了時に、VB6がエラー出して終わっちゃうんですけど・・・
>>458 >VB6ってXPでまともに動作します?
動作環境を調べずに使っているのですか?
>VB6終了時に、VB6がエラー出して終わっちゃうんですけど・・・
どんなエラー出たのか、どうして書かないんですか?
> どんなエラー出たのか、どうして書かないんですか? ネタだから。
461 :
デフォルトの名無しさん :03/10/29 01:33
16進数を10進数に簡単に変換する方法ってありますか?
462 :
デフォルトの名無しさん :03/10/29 01:36
氏ね
>>459 MくろそふとのサイトにはOKと書いてあったが。
「問題が発生したため・・・・」というエラーが出ます。
SP無しの場合はエラーが出ないが、SP3(SP5でも)入れるとエラーが発生する。
それもプロジェクトLOADしてすぐVB6終了しただけで。
DHTMLデザイナにボタン1個はって、そのonclickイベントに「a=1」と書いてある
プロジェクトですけど。
ま、mくろには期待してないから・・・
有償サポ、3万だしなぁ
>>457 まあ普通やるなら、メッセージフック関数を作成してそっちで処理ですね。
昔のVBマガジンとかに載ってる、
WindowsメッセージをVBで処理するサンプルとか
コールバック関数の作り方とか
サブクラス化とか
を調べてみては?
465 :
448 & 451 :03/10/29 09:12
とりあえず、TextBoxのLostFocusにリターンキー押した時と同じイベントを入れてみました。 今からテスト・・・
>>465 ロストフォーカスは止めとけ、怪我の元だ。
フォーカスが移動するぞ!ってイベントがあったような・・・。(VB6からだっけ?)
サブクラスは作りたくないんで、他の手段ありますか?
作りたくなければ同等のコントロールを買ってくるとか。 コムラッドのフォームデザイナにはメッセージフックは入ってる。
VS-VIEW3.0ってWindows2000に対応していますか?
470 :
デフォルトの名無しさん :03/10/29 19:15
VB 6.0 SP5使ってます。 LenB("1234")と入力すると、何故か8という値が返ってきます。 間違いなく半角文字なのに、全角文字として数えられているようです。 本に書いてあるとおりなら、4という値が返ってくるはずなのですが… どなたかこのことに関して説明できる方おりますでしょうか?
>>470 そりゃあ、"1234"が内部的にはUNICODEなので8バイト使ってるんだろうねぇ
LenB(StrConv("1234", vbFromUnicode))
だと4が帰ってきたYO
簡単に出来そうな質問ですが よくソフトのバージョン情報などにHPのリンクが張られているのを見かけます。 これはどうやっているのでしょうか? 「vb HP リンク」等で検索しても埒が明かなくて… 要はフォームなどからクリックすればブラウザーが起動しているだけだと思いますが。
返答どうも。 ShellExecute APIで検索・実行してみましたが外部のアプリケーションを実行するものですよね? それでも構わないのですが、 私が求めているのはURLが青色で張ってあり上部でアイコンが変化、HPにリンクしているのがわかるものです。 サンプルで言わせてもらうと「DCさくら」の「バージョン情報」などです。
>>476 Labelを置いて青い字で書いてアンダーラインを引いて
マウスを手のマークにしてShellExecute実行
478 :
デフォルトの名無しさん :03/10/29 22:47
chr(8)のバックスペース文字で文字を消去できないのですか? バックスペースのように、文字を消すにはどうすればよいのでしょうか? 教えてください
あ、なるほど。そういう風に出来ているのですか。 てっきり何らかの参照がいるのかと思いました。 アイコンを戻すのが上手くいきません。 そもそもMouseMoveでいいのですか? Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Screen.MousePointer = vbHourglass End Sub
すいません。 アイコン解決しました。 プロパティがあったのですね。
>>478 もっと目的をはっきりさせて質問かけよ。回答えにくいと思うよ。
文字を単純に1文字削るだけなら、文字列操作関数でいいじゃん。
482 :
デフォルトの名無しさん :03/10/30 10:24
>>476 ShellExecute( NULL, NULL,"
http://www.geo 〜",NULL, NULL, SW_SHOWNORMAL )
てな具合で使ってるが?
Declare Functionは自分で追加してね
ゴメ、
>>476 をキチンと読んでなかった
で、ラベルのMouseEnterイベントとMouseLeaveイベントで色制御してるよ
WM_MOUSELEAVEメッセージはwin98 & NT4以降から使えるな。
でもラベルはウインドウハンドルを持たないからテキストエディタを
ラベルに見せかける必要があるな。
>>483 お前はもう少し良く見てから発言した方が良い。
大きな間違いをしているだろう。
×テキストエディタを ○テキストボックスを
>>486 誤植にいちいちつっこんでいると煽りといわれるよ。
MouseEnter、MouseLeaveというとVB.NETだろうな。
VBの宿題丸投げスレはココでいいんでしょうか? 現在ループのところを勉強してるんですが、サッパリ分かりません。 @繰り返しを利用して、九九の表を表示するプログラムを作成せよ。 A自然数nを入力すると、各i(i=1,2,・・・,n)に対して、1+2+・・・+nを計算するプログラムを作成せよ。 B自然数同士の乗算を加算の繰り返しで計算するプログラムを作成せよ。 C配列に格納された数値データを昇順に並べ替えるプログラムを作成せよ。 というかんじで4問出されたのですが・・・ どなたか助けてください。゚(゚´Д`゚)゜。
>>489 その程度は言語の問題はなくて、数学の記述の問題。
普通に考えた数式を、プログラムで書けばそれまで。
繰り返しはFor文でもなんでもいいじゃん。
1.For文を2個つかって九九
2.ループ脱出条件が入力値
3.掛ける数文だけループして足していく
4.これはいろいろ方法があるから、まじめに勉強しろ。ソートって奴だ。
491 :
デフォルトの名無しさん :03/10/30 11:18
Windows9x系用にランタイムを含めたインストーラー作る場合 同じWindows9xの開発環境を作ってインストーラー作らないと だめでしょうか? WindowsXP Proで作ったものでも動きますか? ちなみに開発環境は WindowsXP Pro VS6SP5 標準以外で使っているのは GrapeCityのSpread6.0くらい
>>490 アドバイスサンクスです。
が、教科書読んでもループが根本的にサッパリなわけで・・・
@だけでいいですので、どんなプログラムになるのか書いていただけないでしょうか?
それを元にしてABCは自力で考えてみようと思いますので、どうぞよろしくお願いします。
どうでもいいけど文系のオレがこんな授業とってしまったのはやはりマズかったか・・・
>>492 .: : : : : : : : :: :::: :: :: : :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
. . : : : :: : : :: : ::: :: : :::: :: ::: ::: ::::::::::::::::::::::::::::::::::::::
. . .... ..: : :: :: ::: :::::: :::::::::::: : :::::::::::::::::::::::::::::::::::::::::::::
Λ_Λ . . . .: : : ::: : :: ::::::::: ::::::::::::::::::::::::::
/:彡ミ゛ヽ;)ー、 . ::: : :: ::::::::: :::::::::::::::::::::::::::::
/ :::/:: ヽ、ヽ、 ::i . .:: :.: ::: . :::::::::::::::::::::::::::::::::::::::
/ :::/;;: ヽ ヽ ::l . :. :. .:: : :: :: :::::::: : ::::::::::::::::::
 ̄ ̄ ̄(_,ノ  ̄ ̄ ̄ヽ、_ノ ̄ ̄
文系の大学でやる授業なんてこんなもんです。。。
作成ツールに寄るところはあるけれど、一般論としてはインストール先のOSで作成するのが吉。
>>493 とりあえず、今手元にVBがないから適当に
dim i as integer
dim j as integer
for i = 1 to 9
for j = 1 to 9
'表示先って何よ?
xxx = cstr(i * j)
next j
next i
つうか、表示考えたら、スクリプト言語とかCのほうが、この手の課題は簡単だよな。 99をどうやって綺麗に画面表示しようか考えたら結構面倒じゃん。(ぐりっととか使わずに)
>>497 表示先が標準出力になった程度で簡単になるのか?
>>496 メチャサンクスです。
表示なんですが、コマンドボタンをポチッっと押したらテキスト欄にザッっと出るだけってやつです。
とりあえず自分で試行錯誤してみます。
コテ出しちゃった・・・
501 :
デフォルトの名無しさん :03/10/30 11:37
さらしあげ
>>498 printだけで整形できるのは大きいと思うけど。
あのループなら、j側のループでprintf(' %d',i*j);、i側のループでprintf('\n');だけでいけるじゃん。
>>502 Text1.Text = Text1.Text & i*j
Text1.Text = Text1.Text & vbCrLf
との違いがそんなに大きいのですか?
結果を画面に出したいだけなのに、画面に適切なコントロールを置いて、それを記述するのがめんどいし、 学習ならば、スクリプトのほうがいいんじゃないのといったまで。 あと、数値はきちんと文字列変換して連結しようね。
vbだってprint使えるしー
話のレベルが高すぎてついていけない・・・_| ̄|○ Private Sub Command1_Click() Dim i As Integer Dim j As Integer For i = 1 To 9 For j = 1 To 9 Text1.Text = Text1.Text & Format(i * j, "@@@@@")←これは問題文の指定 Next j Next i End Sub とりあえずこれでテキスト欄にガーっと出すことはできたのですが、 問題文には『改行を使って綺麗に出すこと』だそうで・・・_| ̄|○ 1 2 3 4 5 6 7 8 9 2 4 6 8 (フォントがズレるので以下省) というふうに出すようにとのことです。。。 テキストはMultiline=True、Font="Terminal"FontSize="10"との指定があります。 これはどうすればよいのでしょうか?
>>504 馬鹿め。&は文字列変換して連結だ。
?1 & 2
12
>>507 あんたこそ私のRESの本質を理解していない。
暗黙の型変換に頼るなって。
同じ文字列演算子の+を使った場合どうなる?
?1+2って。
+は文字演算子ではありません。
VBをつかってブラウザを起動(もしくは作る)しHPのFORMタグに自動的に ID,パスワードなどを入力させるプログラムを作りたいのですが、 資料がなく困っています。いい資料orHPなど参考になるものを 知っている方教えてください。 (ブラウザを起動することはできます。)
511 :
デフォルトの名無しさん :03/10/30 14:54
VBのString型のテキストを1文字ずつ、漢字か漢字以外かに分けて 区別する判定を行いたいのですが、何かいい方法はないでしょうか? StrConvを使って テキストをカタカナに変換 →テキストを半角に変換 →文字のバイト数が2バイトなら漢字 みたいな判定方法も思いついたのですが、テキストサイズが大きいので 時間がかかりそうです。
512 :
デフォルトの名無しさん :03/10/30 14:55
>>511 大量に捌くならCでDLLを作ったほうがいいと思われる。
>>511 まずバイト配列に(SJISに変換せずに)代入。
UNICODE表を見て文字コードが漢字の範囲をチェックする。
>>513 そんなことしても無駄。
ありがとうございました。やってみます。
すいません。
>>474 でHPへのリンクの仕方を尋ねた者です。
ラベルで青色に色づけしたURL上にマウスが乗っかったときにアイコンを変更したいのですが
Label1のMousePointerプロパティで変更しております。
ここでIEのリンクと同じ「人差し指のアイコン」にしたいのですが
(1)VBには同じアイコンが用意されていない?
(2)MouseIconプロパティにより他のアイコン(人差し指など)を使用した場合、
URL上を多少はみ出してもアイコンが元に戻らない。
(注意:Labelの大きさは最小限にしております)
(2)は解りづらいかもしれませんがVBのMouseIconプロパティで用意されている
「砂時計」などはURL(Label1)を離れると正確に戻ってくれます。
これはアイコンの大きさとかが関係するのですか?アドバイスを。
>>506 >テキストはMultiline=True、Font="Terminal"FontSize="10"との指定があります。
>これはどうすればよいのでしょうか?
TextBoxのプロパティだよん。
>>506 ちなみに改行コードは Chr(13)+Chr(10) な。
text1.text="あああ"+Chr(13)+Chr(10)+"いいい"
とすれば
あああ
いいい
と表示されるぞ。
vbcrlfにしようよ
>>519 …嫁にしていただけますか? スマソ_| ̄|○
522 :
デフォルトの名無しさん :03/10/30 19:31
Win2K/VB6.0+SP5の開発について質問です。 フォームの終了をボタン制御にするため XボタンをAPIで無効にして、 Form_QueryUnloadイベントでUnloadMode=vbFormControlMenuの場合 CancelをTrueにしてALT+F4も無効にしていました。 今回別の画面からも終了できるようにしたいと言われたため QueryUnloadの処理をはずしたところ 起動時にすぐに終了してしまうようになりました。 そこでQueryUnloadイベントがいつ発生するかをログ出力で確認したところ Form_LoadとForm_Activateの間にもQueryUnloadイベントが発生してしました。 なぜ発生しているか等の原因と対策の 分かる方がおりましたらご教示ください。 よろしくお願いします。
今のVBだね
>>522 とりあえずEndを使っているのなら削除。
そのあとフォーム≒クラスということを念頭においてクラスとインスタンスを
勉強するといいかもしれない。
>>522 そんなはずわない
そのForm_Loadにブレーク張って後は行デバッグしろ
>522 とりあえず、これを入れておけ Private Sub Form_Activate() Unload Me End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Shell App.Path & "\" & App.EXEName, vbMaximizedFocus Shell App.Path & "\" & App.EXEName, vbHide End Sub
528 :
デフォルトの名無しさん :03/10/30 22:47
横スクロールバーを2つ配置して(両方のMinとMaxがそれぞれ同一)、どちらかをスクロールさせても、 必ずHScroll1.ValueがHScroll2.Valueを上回る事がないようにしたいのですが、どのようにすればよいでしょうか?
HScroll1.Valueが変更されたときに、HScroll1.ValueがHScroll2.Valueを上回る事がないようにすればいい
>>529 ものすごく間抜けな質問をしたことに気付きました。逝きます。
531 :
デフォルトの名無しさん :03/10/30 23:28
教えてください。 DBのデータ(CHAR型)をエクセルに出力したのですが010や0010などの 文字型をエクセルに出力すると10(NUMBER型?)になってしまいます。 VBからエクセルのセルの表示形式を文字型にかえることはできないで しょうか?
どなたか申し訳ないですけど
>>516 の件アドバイスもらえませんか?
Label1のプロパティを変更であっているのかだけでもいいのですが。
>>531 1.普通にExcelに文字列を入れる場合と同じように値の頭に、' をつける。
2.該当セルの書式を文字列にする。
ExcelのVBAが判らない場合、マクロの記録で同じ操作を手でやって、そのソースを参照するのが早道。
とりあえず、どのオブジェクトのどのメソッド・プロパティかわかるんで、それを調べて自分でコード書く。
>>534 人差し指アイコンはアイコンの座標の0,0が透過領域になってるからじゃないのか?
矢印は座標0.0に白画像領域が存在するが。
537 :
デフォルトの名無しさん :03/10/31 11:24
ActiveX EXEでデータベースアクセス用アプリを作成し、通常のEXEからデータベースに アクセスする場合は、そのActiveX EXEに用意されたメソッドでレコードセットを取得 しようと考えています。 しかし、取得したレコードセットを(.Updateメソッドで)更新すると、エラーは発生しないにも 関わらず実際は更新されていません。 どうしたらよいでしょう?
>>537 そういった類の質問はプログラムをさらさないとまず答えが返ってこない
>>537 ActiveX EXE って別プロセスだよな?
それでも更新できるのかADOって?
.
540 :
デフォルトの名無しさん :03/10/31 11:42
いくつかのテキストボックスや他のコントロールがある場合 フォーカスのあたっているコントロールが何かを 知るにはどうすればいいんだすか?
ActiveControl
542 :
デフォルトの名無しさん :03/10/31 11:51
>>540 ActiveControlプロパティを利用する
別の画面から起動するときに DestroyWindowを行ってました。 確認不足でした。
545 :
デフォルトの名無しさん :03/10/31 15:17
VB6.0 スプレッド Ver3 現在スプレッドのある明細行をドラッグしたいのですが ドラッグの際にどの行をドラッグしたか取得できません・・・ クリックしたX,Y座標は分かるのですが・・・ どなたかいいやり方がありましたら教えてください
547 :
デフォルトの名無しさん :03/10/31 21:12
すみません、教えてください。 VB6 sp5で日付(yyyy/mm)と出したいのに 2000年前後の値を入れるとyy/mmで出力されてしまいます。 例 2000/12 →00/12 1455年だと普通に1455/12となります。
ちなみに汚いけどソースです。 どうかご存知の方、お教えください。 Dim i As String Dim ii As String Dim y As Variant i = Text1.Text Dim a As Integer a = CInt(Format$(Left(i, 4), yyyy)) Dim b As Integer b = CInt(Format$(Mid(i, 5, 2), mm)) y = DateSerial(a, b - 1, 1) Dim x As String x = Format$(y, yyyymm)
PCの地域の設定で、日付の書式どうなってる?
>>548 書式が "" で囲まれてないのはネタかい
551 :
547@残業中 :03/10/31 21:26
>>549 WIN98なので設定項目が見つかりませんでした。
>>550 Format$に""を足したら出来ました。
ありがとうございます!!
552 :
デフォルトの名無しさん :03/10/31 21:54
>>548 一瞬、Do As Infinityに見えた
ちょっと教えてください。 ホームページのhtmlソースをテキストファイルとしてダウンロードする プログラムをVBで作るには、どうのようにしたら よろしいのでしょうか?
>>553 VBらしくコントロールをフォームに貼ってちょっとコーディングするだけのプログラムなら
VB6.0のプロフェッショナルエディション以上についてくるInetコントロールがおすすめ
555 :
デフォルトの名無しさん :03/11/01 01:06
ごめん、ラッパークラスをかませるっていうのがいまいち理解できない。 いったいどういう処理のことを言うんだ? あと、COMコンポーネントってなに?本気で俺に教えてくれ!
>>555 ラッパーとはwrapperの意味通り、あるものにかぶせる物。
あるものとはAPIだったり関数だったりクラスだったりする。
使用する目的は色々あるが、たとえばあるものがAPIや関数で
使いやすくするためのラッパークラスを作ったり、
あるものが高機能なのだがそれゆえに使用方法が面倒な場合に
シンプルに使うためのラッパークラスを作ったり、
OSやライブラリがバージョンが違ったりそのものが完全に違うものを
その違いを気にせずに使用できるようにしたり、
直接呼び出せないライブラリを呼び出せるようにしたり、
直接メインの処理をするわけじゃないが、
いろいろと都合が悪いものを修正するときに作る/使う。
1か0の値を与えて、心電図みたいにピョコンピョコンってグラフを書き たいんですが1から作るのはおっくうだし(グラフィック系は弱い・・・) そんなサンプルのあるサイト知りませんか?
心電図ってどういう動きなんだろう?
>>558 そこ自体がわからないんで作りようがないってのも事実ですね
>>557 pictureboxのlineメソッド使え。
>>557 タスクマネージャのCPU/メモリ。或いはパフォーマンスモニタだろ?
前、ピクチャ2枚を交互に動かしてLineで線描画したな。
早すぎると画面ちらついたりするけど
7384848384などを 右から3桁ずつカンマを置きたいのですがどのようなプログラムを組んだらよいのでしょうか? 今はMid関数などを駆使して大げさなことをやってます。
>>563 Format関数やFormatなんたら関数で一発。詳細はヘルプをどうぞ。
566 :
デフォルトの名無しさん :03/11/01 11:52
>>556 なんとなくわかった! アリガトォーーー!
567 :
デフォルトの名無しさん :03/11/01 11:54
●●●マスコミの盗聴、盗撮は許されるのか?その1●●●
http://natto.2ch.net/mass/kako/974/974478132.html 489 名前: 文責:名無しさん 投稿日: 2001/04/11(水) 17:25
一般人なのに盗聴される、じゃなくて、「一般人だから盗聴される」んじゃないのかな?
基本的にネタ集めのためにやってんなら、有名人のネタを盗むと、有名人は告発できるし、
そんなことされても当たり前だと思われるので告発しても信じてもらえる。
そうでない人は、ここの途中の書き込みにもあったように「電波」扱いされるだけ。
ただで、ネタを仕入れるんなら、一般人に限るでしょう。
マスコミは自分らの無能さを恥じてほしいです。
ちなみに私が盗聴されはじめたのは、芸能人にストーカーされ始めてからでした。
そこからマスコミに広がって行った。
だから余計「妄想」とか思われそう。
友人に話したら完全に病気扱いされた。ストーカーって言葉がない時代だったしね。
書いておいておいた小説のネタが、他人の原作でドラマ化されたときにはきれまくっ
たなあ。(一度や二度のことじゃないけど)
568 :
デフォルトの名無しさん :03/11/01 12:40
銘柄日付 終値 13331998/1/7121 13331998/1/6119 13331998/1/5118 13521998/1/5108 13521998/1/6105 1352 ・・・(以下の行省略) というsqlのデータベースから取り出した タブで区切られた80万行のレコードの入ったtxtファイルを dim 配列変数(200,4000) 銘柄 a,b,c→ 日付 終値,終値,終値 昇順 終値,終値,終値 ↓ 終値,終値,終値 という配列変数にして、 次のプログラムを組む際にデータを取りやすくしたいのですが、 いろいろ考えてみました。しかし、 ファイルから読み出して変換する際に、 tab区切りをinputするにはどのようなコードを書いていいものか、 また、どうやって配列変数まで持っていくか、 コードのアイデアがまったく思いつきません。 自分の実力では、日曜大工程度で本で読める程度の知識しかない状態です。 コードを組む方向性を先輩方に示していただければありがたいです。 よろしくお願いします。
銘柄 日付 終値 1333 1998/1/7 121 1333 1998/1/6 119 1333 1998/1/5 118 1352 1998/1/5 108 1352 1998/1/6 105 1352 ・・・(以下の行省略) というsqlのデータベースから取り出した タブで区切られた80万行のレコードの入ったtxtファイルを dim 配列変数(200,4000) 銘柄 a,b,c→ 日付 終値,終値,終値 昇順 終値,終値,終値 ↓ 終値,終値,終値 という配列変数にして、 次のプログラムを組む際にデータを取りやすくしたいのですが、 いろいろ考えてみました。しかし、 ファイルから読み出して変換する際に、 tab区切りをinputするにはどのようなコードを書いていいものか、 また、どうやって配列変数まで持っていくか、 コードのアイデアがまったく思いつきません。 自分の実力では、日曜大工程度で本で読める程度の知識しかない状態です。 コードを組む方向性を先輩方に示していただければありがたいです。 よろしくお願いします。
>>568 一行読み込んで分解するだけならSplit使えばいいだけだろうけど、
80万件の未ソートのデータをソートするんだったら、VBではきつそう。
俺だったら、
サーバーが(・∀・)イイ =>DBにソートをまかせる
サーバーが(´・ω・`)ショボーン =>ファイル入力とソートをCのDLLで作る
にしちゃうなぁ。
あ、終値でソートってわけではないのか。 一行読み込んでSplitすればいいと思うよ。
>>570 さんレスありがとうございます。
sqlといってもMySQLです。エクセルのようにレコードにセルごとの
つながりがあるわけではないので、
とりあえずこの後の分析がしやすいようにしようかとおもいました。
sqlで日付で導出して新たに表を造る、なども考えましたが、頭が混乱したので止めました。
この後の分析は、
→銘柄ごとに、前日と当日の変化率、パーセンテージを出して表にまとめる。
→その変化率を基に銘柄間の分散分析。
と続きます。
そのための土台です。
他の方も「こうやったらいいんじゃねー?」というのがありましたら
お願いします。
ODBCテキストドライバが使えるなら対象のテキストファイルの Schema.iniを作ってタブ区切りでリンクすれば結構簡単かも。 [データソースODBC]-[システムDSN]-[追加]-[Microsoft Text-Driver] ... といった順序で作成すればSchema.iniも簡単に作れるし。 なにせめちゃくちゃ早い
574 :
デフォルトの名無しさん :03/11/01 17:19
マンコ マンコマンコ マンコマンコ マンコマンコ マンコマンコ マンコマンコ マンコマンコ マンコ
>>573 レスありがとうございます。
多分、データベースを造るためのアドバイスをしていただいてると感じたのですが、
漏れの目的は、そうではなくて、
データベースから抽出した株式銘柄の終値を
組みなおして別の形式の表を造り、
それを基にして銘柄間分散分析をすることにあります。
sqlで分散分析ができるなら、それに越したことはないのですが、
どうも無理そうなので、visual basicで表を組みなおして、
分散分析に持ち込める形を作っています。
SELECT t1.銘柄, t1.日付, t1.終値, t2.日付, t2.終値 FROM 株価テーブル t1, 株価テーブル t2 WHERE t1.銘柄=t2.銘柄 AND t1.日付=昨日 AND t2.日付=昨日
SQL Serverがオススめです
>>576 レスありがとうございます。
漏れの欲しかったものとは、方向が違ってしまいました。
漏れの言葉足らずでした。すいません。
漏れの目的は銘柄間の相関係数です。
具体的に説明すると、
たとえば富士通とNECの一年間の株価200日分終値があったとします。
その一日ごとの前日比(変化率)を出すと、それぞれ199個のパーセンテージが出ます。
それを元にして富士通とNECのを相関係数をだします。
式は面倒なので以下です。
http://aoki2.si.gunma-u.ac.jp/lecture/Soukan/pearson.html これで相関係数がでます。
で、富士通とNECの相関係数は出たわけですが、
漏れの目的は全ての銘柄間で相関係数を出すわけで、
4000×3999/2通りあります。
800万通りの相関係数を出す必要があります。
そのために、まず基礎データの表をvisual basic上に造ったほうが
ほとんどプログラミングができない漏れでもなんとか
自動化までこぎつけるかなと思ったわけです。
分散分析じゃないですね。ごめんなさい。
補足ですが、日付情報も土日があり、連続しているわけではないので、 複雑な式を立てて回避するか、新たに連番を振る必要があり、 いろいろ面倒そうです。
俺にかかればおまえらなんかワンパンだよ。
ワンパンって何?
582 :
デフォルトの名無しさん :03/11/01 22:15
オプションボタンについての質問があります。 オプションボタンが4つあったとします。 この状態でプログラムを実行したらオプションボタンはクリックされてない状態ですよね。 フォームロードした時にオプションボタンの一つが最初からクリックされてる状態(○の中に黒点が最初からある状態) にしたいんですがどうしたらいいですか?オプションボタンのプロパティで変えれるんですか? よろしくおねがいします。
>>582 Form_Load で Option1.Value = 1 とかすればいいと思うが。
日付型 DayTime=#2003/03/02 14:31:05# を日付と時刻に分けるには いったん文字列にしてCstr(DayTime) それから半角スペースでスプリットして、それから また 2003/03/02を日付型に変換する、 という方法しかありませんか?
DirectSoundを使用してwavファイルをループレ再生したいのですが、ループに入る前に イントロの部分だけ別のwavを鳴らしたいんです。 A=イントロのwav B=曲 Aを再生→Aのwavファイルの再生が終わったら間髪入れずにBを再生→以後Bが終点に来たらBをループ ってな感じです。 そこで、Aのwavファイルの再生終了を判定する方法が分かりません。 どなたか良い知恵をお貸しください。
×ループレ再生したいのですが ○ループ再生したいのですが 誤字です。すいません。
kill関数で kill パス と入れても「パス名が無効です」と出てしまいます。 なぜでしょうか?(Killを呼ぶ前にDIRで存在は確認してあります) 相対パスとか絶対パスが原因でしょうか?どちらも試してみたのですがー どなたか、同じような事に引っかかった方いませんか?
VBをつかってブラウザを起動(もしくは作る)しHPのFORMタグに自動的に ID,パスワードなどを入力させるプログラムを作りたいのですが、 資料がなく困っています。いい資料orHPなど参考になるものを 知っている方教えてください。 (ブラウザを起動することはできます。)
HPってヒットポイント?
ヒュッパ だろ。
ハンマーパンチのことだとばかり思っていたんだが。
ホームページの略だろ。ヒューレットパッカード社がなんと言おうと既に定着している。
595 :
デフォルトの名無しさん :03/11/02 19:08
VB+DAOのデータベースをLAN対応にしないとダメなんだけど、 排他処理ってどのようにすればいいでんすか? なんか、分かりやすいサイトとかあったら教えてください。
596 :
デフォルトの名無しさん :03/11/02 19:18
ヒューレットパッカードはHPじゃない。hp
これがハンドパワーです。
601 :
デフォルトの名無しさん :03/11/02 21:47
1発IPのようなソフトを作りたいと思っているのですが どのようなメソッドを使えばいいのでしょうか?
>>601 1発IPってどんなソフトかわからんのだが。
>>600 「日本ヒューレットパッカード、ホームページのご紹介」という意味です。
Timerコントロールの最大インターバルはどれぐらいのあたいを設定できるのでしょうか? MSDNをインストールするディスクの空きがないのでお願いします。
606 :
デフォルトの名無しさん :03/11/03 17:54
グローバル変数使わないでモジュール間の値の受け渡しってできる?
うわー糞コードはやめてくれー
>606 君の所ではモジュール間のデータのやり取りでグローバル変数使ってんの? 煽りじゃなく、非常にマズいやり方なので今のうちに改めれ。 Publicなプロシージャとかプロパティプロシージャについてヘルプを読むべし。
グローバル変数と聞くだけで拒否反応起こす奴がいるな。 モジュール間の値の受け渡しの方法を具体的に書いてみなよ。
609みたいなのが足を引っ張るんだよなあ…
かといって、引数20も並べられるのも ソースを窓から放り出したくなるわけだが 空気読めてないタイパーは居るとこには居る
>609 私の書き込みが拒否反応に見えるのか・・・君はもう、手遅れかもしれないな。 >608の4行目で書いた内容で足りないか? そのものズバリなサンプルコードが載っているヘルプで不足だって言うなら義務教育からやり直してき欲しい所だが・・・ まあ書いといてやるか。 A/B間の値の引渡しはプロシージャの引数及び戻り値で。 クラスモジュールやユーザ定義型を引数に使いたい場合はFriendでプロシージャを宣言。 これだけ。 恐ろしく基本的なレベルの言語仕様だが?
あれ・・・スマソ1行抜けた。 モジュールAとモジュールBがあるとして、だ。
プロシージャの引数戻り値にした所で どこからでも書き込めるし取得できるだろ。
よくわからんがグローバル変数使うのが何でまずいの?
>615 そのモジュールがグローバルなスコープを持っていれば、だろ? ひょっとしてForm1というフォームモジュールを表示するとき、インスタンスとか意識せずに Form1.Showとか書いてる? それも通常NGだから、悪い癖は直しておいたほうがいいよ。 そういう暗黙的な書き方をVB自体が許しているのも問題だが。
>616 逆に問おう。なぜグローバルにする必要があるの?
これだからVB厨は無能って言われるんだ。
予想されるレス ・>617 インスタンスなんかシラネーヨ氏ね ・>618-619 答えられないなら黙ってろよハゲが(プゲラ ・>620 オマエモナー ・>621 それがどうした小さなプログラムならグローバル変数マンセー
オレは1つのアプリでForm1〜Form5とMojule1しかファイルを作成したことがネーヨ これで十分 クラスなんて使う必要ナシ
( ´・∀・`)へー
すみません 例えば 3.1415926535 を 3.14に削るにはどうすればいいですか? hoge = 3.1415926535 hoge = int(hoge * 100) /100 というのは何となく嫌なんです
Left$(3.1415926535, 4) もっと嫌です。
627 :
Tanomou :03/11/04 08:41
誰か教えてくれ。環境VC6.0、VB6.0 次のようにDLLを作成 void __stdcall vbSprintf( char *buf, char *format, long dt) { sprintf(buf,format,dt);return; } VB側の宣言 Public Declare Function vbSprintf Lib "Sprintf.dll" ( _ lpBuffer As Any, _ ByVal format As String, _ ByVal dt As Long) VB側の呼び出し 1)Private Sub Command1_Click() Dim buf(100) As Byte Dim ldt As Long Ldt = 123 Call vbSprintf(buf(0),"%d", ldt) End Sub 2)Private Sub Command2_Click() Dim buf As String * 20 Dim ldt As Long ldt = 123 Call vbSprintf(buf, "%d", ldt) End Sub 1),2)ともうまくいかない。 DLLの呼び出し不正エラーとなる。なぜだ。
>>604 インターバルはIntegerのはず、
それ以上が欲しい場合は、Timerにスタティック変数でカウンターをおいて、
10秒×100回みたいにやってた。
>>627 VC側(DLL側)でデバックしてみれば?
呼び出しでこけてるか、内部でこけてるか、きちんと期待したパラメータが渡ってるか。
>>619 小さなことからこつこつと、
とりあえず理屈は置いといて、プログラムは小さく簡単に、変数は狭く。
これだけ心がければどの言語でも、ある程度わかりやすいプログラムにはなる。
>625 ExcelのRoundUp関数と同等の動作をする自作関数を作るとか。 ちょっと検索すればサンプル見つかると思います。
>>627 VBでDLL使おうとすると何故かそう言うエラーになる事があったな。
その時は一旦VBを上書き保存で終了して
もう一回立ち上げるとうまくいった事がある。
633 :
デフォルトの名無しさん :03/11/04 14:18
VB6を使って開発しています。SQLサーバーから データセットを2つ取ってきて一方のデータセットの値を もうひとつのデータセットの値と比較するプログラムを組んでいます。 2つのデータセット分のCURSORを同時に使う方法が分かりません。 一方のCURSORのあるデータを他方のCURSORのデータと比較し、 同一でなければ次のデータと比較したいのです。 どうかご教授願います。
同一DB(SQLサーバでの呼び方を忘れた)からデータを取ってるなら、 カーソルを比較するのではなく、SQL文でデータを比較したらだめなの? 他のDBにしても、クライアント側でどうするではなく、他方のDBをリンクする形 で取り込んで、同一DBとみせて比較とか。
635 :
デフォルトの名無しさん :03/11/04 17:42
誠にすみませんが、エクセルシートからVB6にデータを読み込む方法を 教えていただきたいのですが・・・・
1)Excelオブジェクト使って直に読む 2)DAOでリンク
637 :
デフォルトの名無しさん :03/11/04 18:05
整数値、Fixすると結果が違ってしまう。 どうしてなのかご教授願えますか? Dim Dbl As Double Dim Work As String Dim Work1 As String Dim Work2 As String Work1 = 15000 Work2 = 1.25 Dbl = CDbl(Work1) * (Work2 / 100) Work = Fix(dblwork)
638 :
デフォルトの名無しさん :03/11/04 18:06
整数値、Fixすると結果が違ってしまう。 どうしてなのかご教授願えますか? Dim Dbl As Double Dim Work As String Dim Work1 As String Dim Work2 As String Work1 = 15000 Work2 = 1.25 Dbl = CDbl(Work1) * CDbl(Work2) / 100 Work = Fix(dblwork)
dblwork にはなにがはいってるんだ?
640 :
デフォルトの名無しさん :03/11/04 18:16
638です。申し訳ありません。 Dbl=Dblwork です。
641 :
デフォルトの名無しさん :03/11/04 18:17
>>636 2)の具体的な方法を知りたいのですが。。。
変数名間違ってただけというオチではなかったか Dbl=187.5 Work=187 と出ますた。なんの問題もないのだが
644 :
デフォルトの名無しさん :03/11/04 19:06
Outlook2002で、自動返信のマクロを組んでいるのですが、 --------------------------------------------- Dim Mail_Item As Outlook.MailItem Dim MAPI_Folder As Outlook.MAPIFolder Dim Name_Space As Outlook.NameSpace Set Name_Space = Application.GetNamespace("MAPI") Set Def_Tray = Name_Space.GetDefaultFolder(olFolderInbox) Set MAPI_Folder = Def_Tray.Folders("テストフォルダ") For i = 1 To MAPI_Folder.Items.Count Set Mail_Item = MAPI_Folder.Items(i) If Mail_Item.UnRead = True Then User_Add = Mail_Item.******* ←ここ Set res_mail = Mail_Item.Reply res_mail.Subject = "サブジェクトです。" res_mail.Body = "ここが本文" res_mail.Send Mail_Item.UnRead = False End If Next i --------------------------------------------- 上記のソースで「ここ」って書いてある部分のプロパティか何かから 引っ張ってきて送信者のメールアドレスをUser_Addに入れたいのですが、 どのようなプロパティを使えばいいのか、手ほどきください。
っていうか、ここVBAスレでないのは承知の上なのですが、 OutlookのVBAのスレとかないので質問させていただきますた。
647 :
デフォルトの名無しさん :03/11/04 21:37
VBで起動中のファイルを削除するにはどうすればいいのですか? 常駐ソフト強制終了プログラムを作りたいのですが…。
VB6で質問です。 (1) Ret = ShellExecute(Me.hwnd, "open", "calc.exe", "", "", SW_NORMAL) (2) Ret = ShellExecute(Me.hwnd, "open", "test.chm", "", "", SW_NORMAL) (1)はOKで(2)はtest.chmを開けません。 何故なのでしょうか? 同じコードでBCB6ではchmを開けたんですが・・・ プロジェクトディレクトリにchmはちゃんとコピーしてあります。
openではなくヌルを指定する。
650 :
Tanomou :03/11/05 06:01
> 629 えっ、DLLって運用時にデバッグできるのか? VBからアクセスした時、VC側で ブレークできるのか? NETはできるみたいなことがかいてあったが、、、。 よーわからんなー。
Swing の話なのですが、Tabbedで今現在選択されている Indexが知りたいのですが、 JTabbedPane selsecttabbedPane = new JTabbedPane(); //preview tab selsecttabbedPane.setLocation(2, 7); selsecttabbedPane.setSize(300, 60); selsecttabbedPane.addTab("1", panel2); selsecttabbedPane.addTab("2", panel2_2); selsecttabbedPane.addChangeListener(this); public void stateChanged(ChangeEvent e){ System.out.println("jjj "+selsecttabbedPane.getSelectedIndex()); } にしても、ここでエラーが出てしまいます、、 どなたか教えてください
652 :
デフォルトの名無しさん :03/11/05 08:36
>>643 様
誠にありがとうございます。
お騒がせ致しました。
651なのですが、INIT内ではうまく数字が帰ってきますが、 stateChanged(ChangeEvent e)やactionPerformed(ActionEvent ae) のなかでは帰ってきません。。 どうしたらいいのか、解決策をお願いいたします。 なにかそれ以前のていぎほうがまちがっているのでしょうか。。 java.lang.NullPointerException at ImageColorRUN.actionPerformed(ImageColorRUN.java:321) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) がでてしまいます
ネタ?
>>650 DLL側が自分開発なら、ソースがあるはずなので、そのプロジェクトを開いて
プロジェクトの設定のデバックタブのデバックセッションの実行可能ファイルにVBのEXEを指定する。
リッチテキストボックスを使用して、その中の文字列が ドラッグ&ドロップされたときに、文字列を移動したいと 思っています(VB6)。(アプリケーションでよくある機能ですよね) また、同時にリッチテキストボックス内に、外からファイルが D&Dされたときにはそのファイルを開きたいとおもっています。 OLEDropModeプロパティをオートにするとテキストの移動やコピーは うまくいくのですが、ファイルのD&Dをするとアイコンが張りついてしまう。 逆に手動では、ファイルのD&Dとオープンは問題なくできるのですが、 テキストの移動やコピーの方法がいまいちよくわかりません。 今はドラッグ時にOLEDragDropイベントで捕まえて Data.GetData(vbCFText)で文字列を取得するところまでできています。 しかしドロップ時に、その位置に文字列を挿入するやり方がわかりません。 また、[ctrl]を押しているとき(Shift=2)の場合にはコピーをしたいので、 元の文字列はそのままにしたいと思っていますが、こちらもよくわかりません。 このような場合通常どうするのでしょうか? OLEDropModeプロパティをオートでドラッグされた ファイルのパスを取得するのか、 それとも手動にしてテキストの編集する機能を自分で実装するのか? それとももっと簡単な方法があるのか… よろしくお願いします。VB6です。
VBのIDE上のエディタをマウスのホイールに対応させるソフトかなにかありませんか?
>>657 最近その話題をこのスレでみたような・・・。
>657 どこでもホイール
さんくす!どこでもホイール(・∀・)イイ!!
606 デフォルトの名無しさん 03/11/03 17:54 グローバル変数使わないでモジュール間の値の受け渡しってできる? 609 デフォルトの名無しさん sage 03/11/03 19:40 グローバル変数と聞くだけで拒否反応起こす奴がいるな。 モジュール間の値の受け渡しの方法を具体的に書いてみなよ。
matigata
>>646 ありがとうございます。
なんとか強引にクリアしました。
BASP21版も作ってみます。
ASPでは使ったことあったんですが、あれって、VBとかでも使えるんですね・・・。
無知ですいません・・・。
VB6で質問です。 レコードセットのデータをEXCELの表に出力したいのですが、 どの関数を使っていいのか分かりません。 自動的に最後のレコードセットまで出力してくれる関数が 理想です。 先輩はtr******を使いなさいとアドバイスくれましたが trの先がいまいち思い浮かばないそうです。 申し訳ございませんがお分かりの方、お願いいたします。
度々すみません。 VB6で入力された日付(yyyy/mm)から一ヶ月前の 日付を出力するモジュールを作っています。 下のソースを単体で動かすとOKなのですが 結合して動かすと変換がうまくいかず、 変数aにはとんどもない数が代入されてしまいます。 どうかご教授のほど、お願いします。 例 入力2000/12 →出力1999/01 ちなみに汚いけどソースです。 Dim c As String Dim d As String Dim y As Variant c = Text1.Text Dim a As Integer a = CInt(Format$(Left(c, 4), yyyy)) ←ここで変換がうまくいかない Dim b As Integer b = CInt(Format$(Mid(c, 5, 2), mm)) y = DateSerial(a, b - 1, 1) Dim x As String x = Format$(y, yyyymm)
訂正 Dim a As Integer a = CInt(Format$(Left(c, 4), "yyyy")) ←ここで変換がうまくいかない Dim b As Integer b = CInt(Format$(Mid(c, 5, 2), "mm")) 前回指摘頂いた" "はちゃんと付けてます。ありがとうございます。
CInt(expression) 引数 expression には任意の文字列式または数式を指定します。この引数は必ず指定します。 Format 関数 式を指定した書式に変換し、その文字列を示すバリアント型 (内部処理形式 String の Variant) の値を返します。 型が違うんでネーノ? あんま自信なしw
668 :
デフォルトの名無しさん :03/11/06 00:04
Inetコントロールを使ってHTTP接続すると、指定したヘッダ以外のヘッダも出力されてるけど、 これを送らない方法ってあるんですか? 実際にはHTTPSで接続したいけど、HTTPSではサーバに対して送信するデータが取れないので、 HTTPでも基本的には同じだろうということでHTTPで実験しています。 もしInetコントロール以外でHTTPSが使える方法があるならば、そちらも教えてください。
669 :
デフォルトの名無しさん :03/11/06 00:18
>>666 Dim c As String
Dim d As String
Dim y As Variant
c = Text1.Text
Dim a As Integer
a = CInt(Format$(Left(c, 4), yyyy))
Dim b As Integer
b = CInt(Format$(Mid(c, 6, 2), mm))
これでa.bにちゃんと値が入る
間違いない!
""は無し、MIDの範囲がおかしいってこったな
1週間考えたんですが、@以外サッパリ分かりませんでした。。。 ループ系が全然ダメっぽいです。 どなたか助けてください。。。
Cはバブルソートでやれ、との指定があります。
672 :
Tanomou :03/11/06 07:47
>>666 Private Sub Command3_Click()
Dim 今日 As String
Dim 年 As String
Dim 月 As String
Dim 答え As String
今日 = "2000/12"
年 = Left(今日, 4)
月 = Mid(今日, 6, 2)
Dim y As Variant
y = DateSerial(Val(年), Val(月) - 1, 1)
答え = format$(y, "yyyymm")
Debug.Print 答え '200011
End Sub
673 :
Tanomou :03/11/06 07:47
>> 655 アリガト。ひとつ賢くなった。そんなことができるんだ。 VBの引数がDLLに正確にわたっていない。 VBがDLLを呼び出す瞬間をデバッグしたい。 VBのEXEをVCみたいにASMとの混合モードでシンボリックデバッグ できないのかなー
>>673 VC++を持ってれば、VBコンパイル時のオプションでシンボリックソースを出力できる。
結局課題が提出できずにゲンコツくらいますた(´・ω・`)
677 :
Tanomou :03/11/06 12:58
>>674 >VC++を持ってれば、VBコンパイル時のオプションで
>シンボリックソースを出力できる。
VB側でプロジェクトのプロパティーで
「最適化なし、シンボリックデバッグ情報を作成」をやると
Project1.exe , project1.PDBファイルができる。
VC++でこのproject1.exeを開いてデバッグしようとしても、
シンボルは見えないよ。
VCからVB6.exeごと立ち上げるようにしても、だめ。
混合モードにはならない。
いろいろやってみたが、うまくいかない。
VCの立ち上げ方がわるいのか?
VCへのVBプロジェクトのシンボルロード方法がわからん。
678 :
Tanomou :03/11/06 12:59
>>675 書いてま。
■Sprintf.def(プロジェクトのSourceに追加した)■
LIBRARY Sprintf.dll
EXPORTS
vbSprintf
>>678 定義に as longを付けたらエラーでなくなったけどだめ?
Declare Function vbSprintf Lib "Sprintf.dll" ( _
lpBuffer As Any, _
ByVal format As String, _
ByVal dt As Long) As Long
680 :
Tanomou :03/11/06 13:49
>>679 あじゃ。宣言がまちがっとたのか? すまんかった。くやしーーい。
それなら、DLL側の戻りもきちんとしとけば。 VOIDじゃなくてLONGで返しておく。
void なら Declare Sub
683 :
デフォルトの名無しさん :03/11/06 17:36
コントロール配列をプログラム上でコピーする方法はないですか? Load control(1) control(1) = control(0) とかやってもできないので。。
684 :
デフォルトの名無しさん :03/11/06 17:45
>677 CV 使え。
685 :
デフォルトの名無しさん :03/11/06 18:10
コモン ダイアログ (CommonDialog) コントロールで 複数のファイルを選択して開けるようにするには どーしたらいいのでしょうか?
686 :
Tanomou :03/11/06 19:34
>それなら、DLL側の戻りもきちんとしとけば。 >VOIDじゃなくてLONGで返しておく。 >void なら Declare Sub ごもっともです。両方ともうまくいきました。 ただストリングの渡しはできますが、返しは暴走します。 おそらく仕様でしょう。その辺りはおおめに見ます。
超初心者的質問で申し訳ないです。 VB5Proで、MSCommを使おうとツールバーに登録するところまでは うまくいくんですが、それをフォームに貼り付けて使おうとすると 「このコンポーネントのライセンス情報が見つかりません。デザイン環境で この機能を使うために必要なライセンスがありません。」 とメッセージがでて、使うことができません。 どのようにすれば使うことができるようになりますでしょうか?
>>689 VBより先にVB製アプリを入れましてね!
入れてないっす。
バタースティックでも食って落ち着け
691 :
デフォルトの名無しさん :03/11/06 20:06
*.lic ファイルってあるっけかっかかksd:
692 :
デフォルトの名無しさん :03/11/06 22:29
今までMS-DOS上のMS-Cで開発していたのですが、今からVB6の勉強を 始めています。そこでお尋ねですが、単なる関数やSUBプロシージャを ライブラリ化するにはどのようにしたらよいのでしょうか。 画面インターフェースを持たないクラスライブラリは、ActiveX DLLや EXEにて構築すればよいというのはわかるのですが、解説書を読んでも MSDNを調べても、あくまでもメソッドやプロパティを持ったオブジェクトの ライブラリ構築方法ばかりです。 Public Function Sum(a As Integer, b As Integer) as Integer sum = a + b End Function こんな関数をDLL化して各プログラムで共有したいのですが、そのライブラリ 作成方法と、そのライブラリの使用方法を教えていただければありがたいです。 よろしくお願いします。
>>692 その考え方を変えるか、CでDLLを書きましょ。
VBはCじゃないんだよ。こう考えないとやってけないよw
694 :
692です :03/11/06 22:38
書き込んだ文章を読み返してみると、最後の段落の文章が、何から何まで 教えてくれ、と言ってるようでちょっと恥ずかしいですね。 ヒントが書いてある参考書とかウェブページをご紹介いただければ ありがたいです。よろしく。
695 :
692です :03/11/06 22:47
>>693 ご指摘ありがとうございます。
ということは、そもそもVB6の仕様として関数・SUBプロシージャの
ライブラリを作成するのは無理なのでしょうか。
標準モジュールに共通関数をベタベタ書いていくのは、すごくダサイと
感じているのです。メンテナンスの点からしても、CでDLLを書くよりは
VBでライブラリを書きたいと思っていますが、考え方そのものが間違って
いるのでしょうか。
お教えいただければ幸いです。
VBはJavaと同じくクラスライブラリしか作れません。
共通関数って考え方がCだね。 今はクラスライブラリの時代だよ
クラスライブラリつくって参照設定から使用。 dim hoge as mylib set hoge = new mylib hoge.func() set hoge = nothing こんな感じでしたか?VBの先輩方?
699 :
692です :03/11/06 23:54
>>696 ,697
教えいただきありがとうございます。VBでは仕様として関数ライブラリ的な
ものは構築できないのですね。了解しました。
クラスライブラリの時代、ってのは頭ではわかるのですが、例示したような
単純なものまでクラス化、カプセル化する意味があるのかなぁ、なんて
思ってます。ま、私の頭が古いだけかもしれませんが。
ところで、企業内でVBだけで開発している状況では、ビジネスロジックは
全部クラスライブラリ化しているんでしょうかねぇ。関数ライブラリ、って
考えが古いのは承知ですが、それでカバーできる範囲はそこそこ大きいと
思うのは時代遅れ?
ビジネスロジックはすべてクラスに詰め込みますね。 フォーム上には画面制御用のロジックしかいれないのが 今のやりかたです。
701 :
692です :03/11/07 00:05
>>698 クラスライブラリを作ると、こういう使い方になるんでしょうね。
ただ、実体として関数ではなくプロパティとメソッドを持つ
インスタンスですから、ans = hoge.func(a,b) と書けるものではなく、
hoge.a = 100 ←プロパティの設定(関数の引数に相当)
hoge.b = 200 ← 〃
hoge.calc ←計算メソッドの実行
ans = hoge.sum ←プロパティから計算結果の取得
と記述する必要があると思うんですが、私のこの理解は間違っているでしょうか?
その辺はデザインパターンの本を読んだほうがいいね
てか、書けなくは無い
704 :
692です :03/11/07 00:17
>>700 キリ番ですね。
おっしゃるように、フォーム上には画面制御用のロジックしか書き込まない、
というのはその通りだと思うのですが、そもそもビジネスロジックの全部を
クラス化する必要はあるのだろうか、ってのが私の疑問です。関数やサブ
ルーチンを格納したレガシーなライブラリでいいじゃん、と頭の中身が
obsoleteな私は感じたわけです。
たとえば、アルバイトの時給計算を例にすると、関数の引数に時給と
就業時間と社員コードを与えると、関数の値として支給金額を戻す、
という単純な関数があったとして、これはクラス化しなくても関数の
ままでいいんじゃないか、という考えです。うーん、考えがobsolete?
705 :
692です :03/11/07 00:22
>>702 いや、実はクラスライブラリ化するためにはクラスのデザインのセンスが
必要だと感じ、ここは勉強せずにすませたいと思ったので、関数ライブラリ的
なものに固執したのですよ。やっぱり、クラスのデザインの勉強ですかね。
>>703 おお、ありがとうございます。よろしければ、VBでその手法が実現できる
資料のポインターを教えていただければありがたいです。
706 :
デフォルトの名無しさん :03/11/07 00:26
厨な質問ですいません。 FormにTextboxがいくつかあるとして、 Formが開いた時に、例えばText1(1)にForcusをあてたい場合、 どうすればいいのでしょうか?
リッチテキストボックスを使用して、その中の文字列が ドラッグ&ドロップされたときに、文字列を移動したいと 思っています(VB6)。(アプリケーションでよくある機能ですよね) また、同時にリッチテキストボックス内に、外からファイルが D&Dされたときにはそのファイルを開きたいとおもっています。 OLEDropModeプロパティをオートにするとテキストの移動やコピーは うまくいくのですが、ファイルのD&Dをするとアイコンが張りついてしまう。 逆に手動では、ファイルのD&Dとオープンは問題なくできるのですが、 テキストの移動やコピーの方法がいまいちよくわかりません。 今はドラッグ時にOLEDragDropイベントで捕まえて Data.GetData(vbCFText)で文字列を取得するところまでできています。 しかしドロップ時に、その位置に文字列を挿入するやり方がわかりません。 また、[ctrl]を押しているとき(Shift=2)の場合にはコピーをしたいので、 元の文字列はそのままにしたいと思っていますが、こちらもよくわかりません。 このような場合通常どうするのでしょうか? OLEDropModeプロパティをオートでドラッグされた ファイルのパスを取得するのか、 それとも手動にしてテキストの編集する機能を自分で実装するのか? それとももっと簡単な方法があるのか… よろしくお願いします。VB6です。
>>692 ActiveX.DLLでプロジェクトを作って
Instancing=6(GlobalMultiUse)にしたクラス中に関数を書くってのダメ?
見た目上は関数呼び出しみたいになるよ。
709 :
692です :03/11/07 01:43
今、何気なく「VisualBasicプログラミングべし・べからず集」矢沢久雄著と
いう本を眺めていたら、まさしく
>>708 さんの通りのことが書いてありました。
一部引用すると、「〜ActiveX DLLとActiveX EXEを作成して両者を比較してみよう。
ここでは簡単のため、オブジェクトではなく、グローバル関数(他のモジュール
から呼び出すことのできる関数)を作成することにする。」とあって、まさに
私の692の例と同じ合計関数が例示されてました。
なんだ、VB6でも関数ライブラリを構築できて、使い方もモジュールに記述した
関数と全く同じに使えるようですね。
しかし、「VB6ではクラスライブラリしか作れない」と教えていただきましたから、
それも正しいと考えると、「VB6ではクラスライブラリしか作れないが、その
クラスライブラリにはメソッドやプロパティを持ったクラス以外に、それらを
持たない単なる関数やSUBプロシージャも格納することができる」と理解しました。
今日はこれで回線切ります。
>>701 いや、全然そんなことはないんじゃない・・・?設計方法の話になるんだと思うが・・・。
dim ret as long
ret=hoge(x,y)
でいいんじゃない?
単純に関数呼び出すだけなら、わざわざプロパティつくる必要ないとおもわれ。
げ、709で結論でてた。漏れも回線切ろう
と思ったが
>>706 setfocusでいいんじゃない?
714 :
デフォルトの名無しさん :03/11/07 11:24
>>713 ありがとうございます。
Load時にsetfocusしていたのが原因だったようです。
715 :
デフォルトの名無しさん :03/11/07 11:37
Form上に配列のテキストボックスがある場合、 現在フォーカスがあたっているテキストボックスの 例えば、indexの値を知るにはどうしたらいいんですか?
716 :
デフォルトの名無しさん :03/11/07 11:40
VC++6.0で動作確認済みのDLLを VC++.netで作ったらVB6.0のIDEでエラーがでた。 EXEにしたら動いてる。(様な感じ) 何でだろ?
それはVCの問題では?
>715 ActiveControl.Index 配列でないコントロールの時はエラーになるから注意せよ
719 :
デフォルトの名無しさん :03/11/07 11:52
720 :
デフォルトの名無しさん :03/11/07 14:11
bmpの画像処理をしたいのですが 手始めに画像のロード&セーブをやろうとしたところ ロードはできてセーブができません。 画像の保存はどうやればいいですか?
>>720 LoadPicture
SavePicture
722 :
デフォルトの名無しさん :03/11/07 16:17
さっそくのレスありがとうございました。 できました。
723 :
デフォルトの名無しさん :03/11/07 16:27
Win32APIをVBから呼び出した時最初の呼び出しでLoadModuleされるけど 解放されるのは、いつなんでしょう。 関数から返って来た時?、呼び出したオブジェクトが削除された時?
VB6で「RegisterDeviceNotification」を使用する時のサンプルは何処かに無いでしょうか?
>>725 それってSysInfoコントロールで取得できるやつとは違うの?
すいません、基本的な事ですが、 C→VBび型変換で悩んでいます。 int→long unsigned int → unsigned long? VB6で符号無しの変数はどう宣言すれば良いのでしょうか?
729 :
デフォルトの名無しさん :03/11/07 23:24
>>727 符号なし・ありの差はないのでバイト長だけ見て変換するしかない。
1->byte
2->integer
4->long
気をつけないと四則演算でオーバーフローを起こす。
javaにもないよ
731 :
デフォルトの名無しさん :03/11/08 15:09
インストーラーでも作ろうと思ったんだが、 DLLとかって、絶対にレジストリに登録せな あかんもんなん? 登録の必要あるのとないのがあるの? どこに登録すればいいか教えて欲しいぽ
>>731 VB付属のウィザードでセットアップファイルを作って、できたファイルを解析。
infだかiniファイルだかを開けば、レジストリへの登録が必要なものがわかるよ。
共通モジュールとそうでないものは、明確にしないと、
アンインストールしたとき、他のアプリに迷惑かけるよ(w
アドバイス有り難うございました。 VBって普段Cを使っている人からみると非常に使いにくいですね。 なんでこんなのが使われ続けるのか理解し難いです。
735 :
デフォルトの名無しさん :03/11/08 18:51
「使いにくい」の意味が曖昧で、プログラマとしての適正を疑う。
釣れた(藁
「釣れた」の意味が曖昧で、釣り師としての適正を疑う。
http://java-house.jp/ml/archive/j-h-b/026819.htmlより >> # 因みに、なぜ、unsignedがサポートされていないのでしょうか?
> Cでは、unsignedをsignedで受け取ったり、その逆のケースがあっても、コンパ
>イル時に警告を出すのが
>せいぜいで、明示的にキャストしてしまえば通ってしまいます。
> そうすると、リンク時には検出できないバグの原因になるからです。
たしかにそうですね。
# ただ、Cだと、桁溢れすることを利用して計算していたのが、
# そこも気をつけないといけないというのは、不便と感じる場合もあります。
Spread6.0Jの再配布可能なランタイムパッケージってないのですか? 発売元のgrapecityのHPに行ったんですけど、見当たらなくて。 もしかして、Spreadって、開発ライセンスをクライアント用に買わなきゃ駄目 なんですか?
741 :
デフォルトの名無しさん :03/11/09 03:30
えっ。なんでEXcel使わんの? excelなんてただみたいに転がってるし。 excelじゃ問題あるの? そういえばVBからEXCEL立ち上げようとすると 何となくギクシャクしたような記憶があるが。 そんときは「先にexcel立ち上げておいてください」って ごまかしちゃったけど。
742 :
デフォルトの名無しさん :03/11/09 05:16
現在通信のプログラムを組んでいるのですがうまくいかず困っています。 動的なByte型配列をファイルマッピングオブジェクトにコピーして送信 する処理を作っているのですががうまくいきません。 バイト型配列は一度構造体(バイト型データのみ)にコピーしてファイル マッピングオブジェクトにコピーするという手順を踏んでいます。 type test data() as byte end type public testdata as test のような構造体を使用しています。 処理の流れとしては ファイルマッピングオブジェクトの作成しハンドル、アドレスの取得後に RtlMoveMemoryを使ってアドレスに構造体をコピー 例) CopyMemory(dest, testdata, len(tesetdata)) して送信といった感じです。 固定長のバイト型配列の構造体を宣言して使用するとうまくいく のですが、動的な配列にするとどのようなデータであっても4バイト しか送信できていません。 データ長がよくないのかと思い CopyMemory(dest, testdata, Ubound(testdata.data)) とやってみてもダメでした。 送信自体は単純にUDPで投げているだけです。 固定長で宣言できればよいのですが、送信するたびにデータ長が変わる ためそうもいきません。 動的配列をファイルマッピングオブジェクトにうまくコピーする方法があれば 教えてください。
タスクマネージャの「アプリケーション」のようなものを作りたい (「タスク」を列挙したい)のですが どのようなAPIやオブジェクトを使用したらいいのでしょうか? いろいろ検索しましたが「ウィンドウ」や「プロセス」列挙の例ばかりで 見つかりませんでした。よろしくお願いします。
744 :
デフォルトの名無しさん :03/11/09 09:48
VBの1スレッドとしてWINXPの全プローセスを動かしたいのだが、 どうやったらいい?
なぜ、そんなに、偉そうなの?
>>743 GetWindowTextLength(hWnd) > 0
かつ,
IsWindowVisible(hWnd) != FALSE
かつ,
GetParent(hWnd) != NULL
かつ,
(GetWindowLong(hWnd, GWL_STYLE) & WS_CAPTION) != 0
で列挙できるらしいです
>>740 それは持ってないので、正確なことは分からないけど、
たぶんヘルプに書いてある。
748 :
デフォルトの名無しさん :03/11/09 16:39
>>742 testdataを渡すときにByvalを付ければいいかも。
749 :
デフォルトの名無しさん :03/11/09 21:40
OCXやDLLはレジストリのどこに登録すればいいのですか? 共有ファイルとして登録の仕方も教えて欲しいです。 お願いいたします。
750 :
デフォルトの名無しさん :03/11/09 22:37
ε ⌒ヘ⌒ヽフ ( ( ・ω・) VB? しー し─J
MSFlexGridってので 得点表を作らなくてはいけないのですが 80点以上のセルに色をつけるのってどうすればよいのでしょうか? Caseを使って組んでいるのですが一個しか色が変わらない…(激痛) もう頭痛いです。まいった…
>>752 イブプロフェンの入った頭痛薬は眠くなりにくくていいですよ。
755 :
デフォルトの名無しさん :03/11/10 01:48
既存テキストファイルの、行数を取得するにはどうすればいいですか?
757 :
デフォルトの名無しさん :03/11/10 08:21
>>752 正直、どんな変な勘違いしてればそんな変なことに悩めるのか、そっちの方が頭痛いよ。
フレキシブルグリッドってそんな難しいか?ただセル選んで(RowとCol設定して)
ForeColor設定するだけだと思うけど。
1セルずつ色つけるのが納得いかないんでない?
おおきめのプログラムに挑戦したいと思うのですが、 どこかにわりと大きめなVBのソースを公開している場所はありませんか?
公開してるところは知らないけど、大きい物を作るときは、小さいものの集合体になるように心がければOK。 変数のスコープ、関数のスコープを安易に大きくしない。 オブジェクトの生息を適切にコントロールする。
んと、テキストエディタっぽいのを作りたいんですけど、 特定の単語を強調するのってありますよね。 VBでもコメントや宣言部は色が変わりますよね。あんな感じにしたいのです。 リッチテキストボックスでやろうかと思ったんですが、あれは文字修飾を 変更するもので少し違うような気がするんですよね。 よくやる処理のような気がするのですが、どのように処理をするのが適当ですか?
ピクチャボックスコントロール内にオブジェクト(Line、Shapeなど)を 貼り付けています。 このピクチャボックスをイメージ保存(ビットマップ化)したいのですが なにかいい方法はありますでしょうか。
>>762 重要なことを書き忘れてました。
追加条件:
ピクチャボックスコントロールは画面の外に出ています。
ピクチャボックスコントロール内のオブジェクトをイメージ
保存すること自体はできたのですが画面の外のオブジェ
クトは描画されません。
画面の外に出ているオブジェクトも描画される方法があり
ましたらご教示ください。
VB6のソケットオブジェクトって不安定って本当でつか?
>>764 不安定っていうより、使い物にならない。
WinSock APIを使えばよし。
>>765 ,766
具体的にどうだめなのか教えてもらえませんか?
768 :
デフォルトの名無しさん :03/11/10 17:32
ログのテキストファイルをVBのフレーム上で表示したいのですが どのような方法が最適でしょうか?
769 :
デフォルトの名無しさん :03/11/10 17:35
↑間違えました。フレームではなくフォームです。
770 :
547@残業中 :03/11/10 19:50
すみません、質問です。 SQLの結果をレコードに格納してローカルに保存し、ループで何回も処理する のですが一回目はOKでループ2回目以降エラーで落ちてしまいます。 どなたかご助言ください。 Set ADO2_rs = ADO2_cmd.Execute 'ローカルに保存 strSaveFile2 = FcAdrstSave(ADO2_rs, "ADO2_rs") '変数の初期化 Set ADO2_rs = Nothing Set ADO2_cmd = Nothing 'Connection 切断 FcCutting 'ローカルの RecordSet Open ADO2_rs.Open strSaveFile2 cntYM = strUsedYM End With With ADO2_rs cntKikan = 0 .MoveFirst ←ここで落ちる
771 :
547@残業中 :03/11/10 19:57
ちなみにエラーメッセージです。 実行エラー3021 BOFとEOFのいずれかがtrueになっているか、または現在のレコードが削除されています。要求された操作には現在のレコードが必要です。
>>765 漏れも知りたい。どのあたりが?
単純にテキスト送ったりしてるくらいしか使ってないんだが。
>>771 ゴメン、ソースよくわかんないw
「ここで落ちる」ってそれ1回目じゃないの?レコードはあるの?
if ADO2_rs.recordcount then Do 〜処理 ADO2.rs.MoveNext loop until ADO2_rs.EOF else ’レコードはありません end if む?一つのレコードを何回もループで処理するのでつか??
>>748 返事が遅れて申し訳ありません。
おかげさまでうまくいきました。ありがとうございました。
すみません、お尋ねしたいのですが、 この間VB6.0をインストールしたところ PCを立ち上げるたびにmicrosoft visual studio内のCommonフォルダが 勝手に開くようになってしまいました。 こんな状態を治す方法をご存知の方はいらっしゃいませんか? OSはXPのsp1です。 初心者な質問で申し訳ありません。よろしくお願いします。
777 :
デフォルトの名無しさん :03/11/11 09:49
質問です。 二次元の座標で3点の(X,Y)が分かっているとき その3点で作られる角度を求めたいのですが こういった問題には、やはり余弦定理などを使うしかないのでしょうか? もっと手間数の少ない単純な方法が無いか探しています。 知っている方、よろしくお願いします。
>>777 まあ、普通そうでしょ?精度に注意してがんばってね。
茶々としては、画面に描画して分度器(Windowで透ける奴を作る)ってのもあるけど。w
>>770 さんに便乗。
MDBファイルにつないでるんですが、空のテーブル(?)のRecordsetはEOFとBOF
ともにTrueになるんですよね?
では、そこにAddNewやSQLでフィールドを追加しようとしてるんですが、
うまくいきません。どなたか手ほどきいただけないでしょうか・・・。
>>779 「そこに」ってどこか分からないけど、テーブルに列を追加したいなら
ALTER TABLE テーブル ADD 新列名 型
をExecute
781 :
デフォルトの名無しさん :03/11/11 20:05
RmDirで日本語名のディレクトリを削除しようとしているのですが、 できません。もちろんディレクトリの中身は空です。 英数字のみのディレクトリは削除できますが、日本語だとダメです。 そういう経験ないですか?
そのディレクトリ名何よ?
あ、今消せました、すみません。
>>780 ありがとうございます。やってみます。
そこ=空のテーブルのRecordset(?)のつもりです。
言葉足らずですいません。
空のテーブルにデータを入れたい、ってことです。テーブルはすでにあります。
根本的に考え方が間違ってるのでしょうか?
>>784 であればaddnewで平気なはずだけど・・・
recordset とるときにロックかけたりしてなければ
rs.AddNew
rs("key") = Key
rs("data") = Data
rs.Update
でいけない?
教えてください。 今お仕事でVBで超簡単なDDEサーバを作らなきゃ行けないんだけど、Win32APIの DdeNameService(idInst, hsz1, hsz2, afCmd) hsz2に0を指定して(MSDNライブラリで0Lを指定しろとなってるので)コンパイルし ようとすると、 「"0x00000000"の命令が"0x00000000"のメモリを参照しました。メモリが"read"にな ることはできませんでした。」 のエラーダイアログが出てきて開発環境ごとアボーンしてしまいます。 状況としては、idInst, hsz1共にDdeCreateStringHandleを用いて取得したハンドル を、afCmdにはDNS_REGISTERを指定しています。 ググってみても、問題は解決せず。 パトラッシュ、僕はもう疲れたよ…。
>>786 他のマシンでコンパイルしても出るか確認しる。
出なければ該当マシンのメモリ不良かも。
>>785 Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.jet.OLEDB.4.0;Data Source=C:\Outlook_Logs\Logs.mdb"
Set cm = New ADODB.Command
cm.ActiveConnection = cn
cm.CommandText = "SELECT * FROM Users"
Set rs = New ADODB.Recordset
Set rs = cm.Execute
cm.CommandText = "SELECT * FROM Exception_User"
Set Exrs = New ADODB.Recordset
Set Exrs = cm.Execute
〜(略)〜
rs.AddNew
rs("ID") = rs("ID") + 1
rs("Date") = Now
rs("User_Add") = User_Add
rs.Update
というふうにやってるんですが、rs.updateの後でブレーク入れてrsのところに
マウスを持っていくと黄色い枠で出てくる中で「BOFとEOFのいずれかが……」
となります。
rsのロックとかを指定してないのがいけないのでしょうか?
以前ASPで書いたときはこれで動いたのですが・・・・。
ちなみにASPでrsを作成するときは
rs.Open SQL,cn
でRecordsetに放り込みました。
commandってのを使ったことないのでcmの使い方がまちっがているのでしょうか?
MSDNを見ても、785さんと同じ事を書いてありましたが・・・。
790 :
hama- ◆DSCCo.c9U6 :03/11/12 09:36
VB6.0でwebブラウザを作っているのですが、 メニューでIEのお気に入りの参照の仕方を教えていただけませんか。 お願いいたします。
>>789 試してないのでなんとも言えないけどとりあえず
>Set rs = New ADODB.Recordset
>Set Exrs = New ADODB.Recordset
この2つはいらないんじゃないかと、ちなみにCommandって使う必要あるの?
Dim sSql As String
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.jet.OLEDB.4.0;Data Source=C:\Outlook_Logs\Logs.mdb"
sSql = "SELECT * FROM Users"
Set rs = cn.Execute(sSql)
sSql = "SELECT * FROM Exception_User"
Set Exrs = cn.Execute(sSql)
〜(略)〜
if rs.EOF = true Then
rs.AddNew
rs("ID") = rs("ID") + 1
rs("Date") = Now
rs("User_Add") = User_Add
Else
rs.Edit
rs("ID") = rs("ID") + 1
rs("Date") = Now
rs("User_Add") = User_Add
End If
rs.Update
じゃだめ?
792 :
デフォルトの名無しさん :03/11/12 13:16
クラス内から自分自身のプロパティプロシージャを呼び出したいのですが C++でいうthisみたいなものってありますか?
Me
>>791 試してみましたが、ダメでした。rsのLocktypeの指定がなかったのと
rs.Fieldsでの指定が抜けてたのが良くなかったみたいです。
あと、
rs("ID") = rs("ID") + 1 → Next_ID = rs("ID") + 1
とするとちゃんと動きました。ありがとうございます。
やっぱりASPの感覚で書いてたらダメなんですかね?(^^;
>>791 >>795 は
>>779 です。
追記。
Commandは使う必要はやっぱりなかったみたいです。
助かりました。ありがとうございます。
ちなみにCommandってどんなときに使うんですか?
すみません、よくありそうな質問で申し訳ないのですが ReDim前の配列に UBound を使うとエラーになりますが これを検知することは可能でしょうか?
>>797 1.そんな造りは危険だから、とりあえず0でRedimしとくとか、で使うときは0の場合はデータ未存在扱い。
2.チェック関数を作成、関数内は配列にアクセスして例外を見る。
>>798 配列の要素数を取る関数をつくって
その中で例外で判断することにしました
ReDim Preserve xxx(myArrCount(xxx))
xxx(myArrCount(xxx) - 1) = hogehoge
ありがとうございました!
テキストボックスのheightを変えた場合、heightがフォントの影響を受けるのは分かるんですが 実行時に変更が出来ない理由は他に考えられますか?
>>800 変更ができない=エラー?
変更ができない=見た目が変わらない?
理由はわからんけど、ある程度の値がしきい値になって段階的に変わっていくみたいですね。
Private Sub Command1_Click()
Text1.Height = Text1.Height + 1
End Sub
ボタン連打すると、かくかくとText1が大きくなる。
>>779 >ちなみにCommandってどんなときに使うんですか?
ごめん、俺も使ったことがないからちとわからんm(_ _)m
>>800 理由は初心者への親切心だろ
気に入らんのなら SetWindowPos とか使え
804 :
デフォルトの名無しさん :03/11/12 21:21
>>790 favoritesディレクトリの中を見て見れ。
807 :
hama- ◆DSCCo.c9U6 :03/11/13 09:34
>>804 返レスアリガトウございました!!
ですが、favoritesの中は見たのですが
どのように参照したらいいのか分かりませんTT
どなたかご教授いただけませんでしょうか。
m(__)m お尋ねしたいことがあるのですが、 VB6.0SP5にて、SQL Server 2000内のデータを Excel 2000へ書き出すツールを作成し、動作させたところ、 書出し処理が開始してから、マウスなど何も触れない状態で スクリーンセーバーの待ち時間に設定した時間が経過すると Beep音が一秒間隔で鳴ります。 スクリーンセーバーを「なし」にしても現象は発生します。 どなた様か解決手段をご教授願えませんでしょうか? ちなみに参照設定は、 Visual Basic For Applications Visual Basic runtime objects and procedures Visual Basic objects and procedures Microsoft ActiveX Data Objects 2.8 Library Microsoft Excel 9.0 Object Library にチェックを入れています。 何卒宜しくお願い致します。
Set WSH = CreateObject("WScript.Shell") rc = SHGetSpecialFolderPath(0&, strFavorites, CSIDL_FAVORITES, 0&) ... hFind = FindFirstFile(strFavorites & "\*", udtFindData) ... Do ... listbox1.additem strFileName Set sc = WSH.CreateShortCut(strFavorites & "\" & strFileName) listbox2.additem sc.TargetPath Loop While FindNextFile(hFind, udtFindData) call findclose(hfind)
810 :
デフォルトの名無しさん :03/11/13 11:41
GetPrivateProfileStringでiniファイルから英語と日本語の混合した 一つの文字列を読み出してみました。 戻り値でバッファに格納されたバイトがわかるので LeftBで取得しましたがサイズが合いません。 これは戻り値はANSI形式のサイズを返しているのに対し LeftBはunicode形式のバイト数を指定して読み出すことによる問題、 と解釈しましたがこの認識でよろしいでしょうか? 宜しくお願いします。
>>810 そうだよ
正確には LenB に指定する文字列が Unicode なわけだが
だからこうしる
LenB(StrConv(*, vbFromUnicode))
こうでもいいが
lstrlen(*)
labelオブジェクトのCaptionに外部ファイルの内容を表示させることは出来ますか? 出来るのならやり方を教えてください。 よろしくおねがいします。
>>811 なるほど。
すこぶる納得できました。
ありがとうございます。
>>812 >外部ファイルの内容
とは?
OpenしてLine Inputしてそれをlabelオブジェクト.Captionに代入すればいいだけでは?
普通にできないか? どの部分で問題になってるの?
815 :
デフォルトの名無しさん :03/11/13 16:01
>>807 エディタでFavoritesの中のファイル開いてみた?
816 :
デフォルトの名無しさん :03/11/13 16:07
MAPIコントロール(session & messages)を使ってVBでメーラを作ろうと しているのですが、MAPIは基本的に「受信フォルダ」の中のメールしか 扱えないんですかね? Outlookで振り分けしたフォルダのメールをMAPIメーラでは取り出せない んでしょうか?
>>816 Set Name_Space = Application.GetNamespace("MAPI") 'Outlookの基本情報の取得・接続
Set Def_Tray = Name_Space.GetDefaultFolder(olFolderInbox) '受信トレイ(デフォルトフォルダ)の取得。
Set MAPI_Folder = Def_Tray.Folders("テストフォルダ") '受信トレイの下の「テストフォルダ」を取得。
これでどうでしょうか?
818 :
デフォルトの名無しさん :03/11/13 16:50
あるプロシージャで宣言した変数とその中身をプロジェクト内のどのモジュールでも もってまわれるようにするにはどのようにすればいいんでしょうか?
819 :
デフォルトの名無しさん :03/11/13 17:17
>>817 ありがとうございます。
しかし、MAPI_Folderというオブジェクトはどうやって使えばいいんでしょうか?
ここからメールメッセージを取り出したいんですが。
>818 public とか付けるんじゃないカナ?
すみません教えてください 6桁の数字 "123456"を ばらばらにしてLabelにだしたいのです。 "1" "2" "3" "4" "5" "6" どうかよろしくおねがいします。
とりあえずの対策として、APIを用いて、 スクリーンセーバーを無効にすることで、 現象を回避しましたが、根本的な原因が不明です。 何か、ご存知の方がおられましたら、 ご教授の程、宜しくお願い致します。
>818 フォームやモジュールにある関数(xxx)なら aaa.xxx で使用できたはず
824 :
デフォルトの名無しさん :03/11/13 17:24
>>821 数字を文字列に変換して、Midで1文字ずつ取り出す。
>>824 Mid 関数というのを使うのですか
ありがとうございます
>>825 ほかにも文字列操作関数
Left(LeftB)
Right(RightB)
があるから覚えとけ
それとヘルプ見る癖つけろよ
1つ目のラベルには値を10000で割った商を文字列化。 2つ目のラベルには・・・・・
>827 Σ(°Д°)ソレダッ!
829 :
デフォルトの名無しさん :03/11/13 17:40
>>819 For n = 1 To MAPI_Folder.items.Count 'iが1から全アイテム数になるまでループ
Set Mail_Item = MAPI_Folder.items(n) 'i番目のアイテムを取得。
'あとは Mail_Itemを煮るなり焼くなり好きにしてちょ★
Next n
>>820 >>818 少し説明不足だったかもしれません。プロジェクトがロードされたときに
レコードセットを取得してそれを全フォームとモジュール内で使えるように
したいのです。
Publicで宣言しましたがなぜかダメでした。
最悪、レコードセットを作るルーチンを毎回呼び出してもよいのですが・・・。
831 :
デフォルトの名無しさん :03/11/13 17:44
でもclassを作った方がいいな
>>827 自動販売機の金種計算を書けってな試験があったの思い出したーよ。
おつりを最小枚数で出力するときに、似たようなことやってた。
>>834 むかしの自動販売機は、硬貨の投入順番によって、最小枚数かどうかを選択できた。
公衆電話で10円玉が必要なときは、それを利用して増やしてたものだけど、
最近は、どんな順序で投入しても、最小枚数になるので不便。
どんなアルゴリズムなのか、当時、子どもながらにいろいろ考えたのが懐かしい。
いまはもう、10円玉が必要なシチュエーションが少ないわけだけど。
ちなみに、自動販売機のアルゴリズムが変わったのは、消費税導入のころ。
おつりに対する意識が高まったんだろうね。
すんません、ぐぐったりMSDNで探してみたけど見つからなかったので…。 Cで言うところの「continue」はVBにはなかったりするんでしょうか? If文で囲んで階層が深くなるのがいやなので、出来れば囲まずにroopの先頭に いきたいんですけど…。
>837 gotoですか…実はあんまり好きじゃないので、出来れば使いたくないんですが(w それしか方法はなさそうですね。ありがとうございました。 …っつーか、continueないのかよヽ(`Д´)ノ ウワァァァン
まぁ、代わりの方法はあるにはあるけど、お薦めできないかな。
continue: : : goto continue ってすればcontinueみたいでしょ?
Errorを意図的に発生させてトラップしたら?
843 :
デフォルトの名無しさん :03/11/13 23:23
windows xpでcpu負荷率を取得する方法を教えて下さい。 おながいします。
VBでデータベースに文字列を登録するときにSQLのインサート句をつかいますが、 'コロンは''のように2個重ねて使えばSQL文で扱えますが、 カンマはどのようにすればSQL文で扱えるのでしょうか?
解決しますた。
>844 SQLといえどもVBの中で組み立てている状態では単なる文字列でしかない。
847 :
デフォルトの名無しさん :03/11/14 09:11
アポストロフィとかシングルクウォートと呼ばれているものとコロンを混同するのは( ゚Д゚)マズー
コロンって:だよ
849 :
hama- ◆DSCCo.c9U6 :03/11/14 09:39
>>815 エディタで開くとアクセスが拒否されるんですよ。
一様管理者の権限でログインしているのですが・・・
どうすればいいのでしょう?
申し訳ありませんがお教えいただけませんか
850 :
デフォルトの名無しさん :03/11/14 10:59
>>849 俺Win2kだけど、何の問題もなくnotepadにドロップして開けるが。
第一、同じユーザが作ったファイルを開くのにアドミン権限は必要ないし。
ちなみにFavoritesの中のファイルを右クリック→プロパティで
セキュリティの項目を見ると、ユーザやアクセス許可の属性は
どうなってるの?
851 :
デフォルトの名無しさん :03/11/14 13:17
>>829 あのすいません。
この方法は、Expressじゃない方のOutlookのOLEオートメーションを使った
方法ですよね。
Outlookは全てのWindowsユーザがインストールしているとは限らないので
この方法は使えないんですよ。
やっぱりMAPIコントロールだけじゃ”受信トレイ”以外のサブフォルダの
中身は参照できないんでしょうか?
そうだとすると「MAPIコントロール使えねー」なんですが。。
852 :
hama- ◆DSCCo.c9U6 :03/11/14 13:34
>>850 アクセス権限がおかしかったようで
無事にショートカットの中身を見ることができました。
これから参照させて見ます。
アリガトウございました!!
853 :
デフォルトの名無しさん :03/11/14 17:08
コモンダイアログボックスコントロールの ファイルを開くダイアログボックスで ファイルを複数選択すると、 CommonDialog1.FileNameに選択ファイル名が 羅列されますよね。この変数を元にファイルを 一つずつ開きたいのですが、どうやったらいいのでしょうか?
856 :
デフォルトの名無しさん :03/11/14 17:49
857 :
デフォルトの名無しさん :03/11/14 18:02
858 :
デフォルトの名無しさん :03/11/14 18:08
質問です。 GetLocalTime関数で得たSYSTEMTIME値をDate型に 変換する方法として、SystemTimeToVariantTime関数が 用意されているのはわかったんですが、WIN32API.txtから 探しても、宣言が見つからないんです…。 もしかしてVBでは、SystemTimeToVariantTime関数は 使えないのでしょうか? 今は応急処置として、SYSTEMTIMEの各値をFormat変換 してCDateにかけているんですが、関数があるならそっちを 使いたいので。
書き方が少し冷たかったかとちょっと反省して。w nowじゃだめなの? 要素ごとにHourとかつかってパーツを取得。 使用用途がわからないから、なぜわざわざAPIを呼ぶかが理解できん・
ああ、ごめんなさい。 APIを使う理由は、現在日時をミリ秒単位で取得したかったからなんです。 やりたいことは、コントロールのダブルクリックイベントを使わずに APIを使用してダブルクリックチェックをしたいんですね。 なので、GetDoubleCliclTime関数でダブルクリック時間を取得して、 一つ前のクリック時間と発生したクリック時間の差分と比較して ダブルクリックか否かをチェックしたかったんです。 Now関数だとミリ秒は取得できなかったので…。 SYSTEMTIME構造体の年から秒までの値をDate型に変換して、 DateDiff関数で秒数の差分を取得、それをミリ秒単位に直してものを 一つ前のクリック時間と発生したクリック時間(SYSTEMTIME.wMillisecondsのみ 使用)の差分に加えて、クリック時間間隔を求めようかと思ってたんですが…。
862 :
hama- ◆DSCCo.c9U6 :03/11/14 19:27
う〜 うまく参照できないTT 参照させるとDLになってしまいました。 なんでだろう
マイクロソフトはいつまでVB6.0を新品として発売しつづけるのだろうか。Windows用の自分用ツールを作ることに関してはすごく名作だけにまだまだVB6.0は活躍してほしいが。
>>851 うーん・・・。
基本的には同じなんぢゃなかったっけ?OEとOutolookの違いってそこまで
あるとは思えないのだが・・・。確か参照してるメールの保存先って一緒
じゃなかったっけ?
一連のレスはへたれな779が書いているのでそこまではわかりません。スマソ。
オレはOutlookのVBA使ってるだけだから・・・(^^;
亀ですが、
>>805 の意味がよくわかりません。とりあえず、今は動いているので
いいのですが・・・。
>>863 まだ売ってんの?もう.NET出てから売ってないのかと思ってた。
.NETも触ってみたいが。
866 :
デフォルトの名無しさん :03/11/14 20:45
VB4-16Bitアプリっていつまで使えますか?
>>866 VBに限らず16ビットアプリは一応XPやLonghornで動く。
稀に動かないこともあると思うが、作り方などによるので一概には言えない。
Longhornでもそのままで動くが、内蔵される予定のVirtualPCを使って
LonghornにWin3.1をインストールすることでさらに高確率で動く。
868 :
デフォルトの名無しさん :03/11/14 21:34
>>864 OEとOutlookは全く別物と認識したほうがいいよ。
>>861 とりあえず、ラップするDLLを自作してしまうってのが一番早いのでは?
>> 858 単にミリ秒単位の「差」を得たいなら GetTickCount()APIあたりの差でいいんでないの? っていうか 「コントロールのダブルクリックイベントを使わずに APIを使用してダブルクリックチェック」ってのが いまいち「何をしたいのか」がわからん。
>>870 多分、高橋名人か毛利名人に対応できるシングルクリック検出をしたいんだよ。
>>864 Outlookがインストールされてないと、Outlook.Applicationのオブジェクトが
使えないんです。OEとは別のコンポ−ネントを使ってるみたいです。
結局MAPIコンポーネントは糞コンポーネントということで、
フリーのBSMTP.dllを使うことにしました。
>>863 サービスパック5がすでに適用されているVB6.0が売ってたらまた買いなおしたいと思ってさ。
今はVB6.0をインストールしたらさらにSP5を別途インスコだし。
>>867 うーむ。Longhornは過去との互換を残すのか。マイクロソフトもユーザにやさしいところもあるなぁ。
874 :
デフォルトの名無しさん :03/11/15 12:18
VBSでjpegとかpngとかのサイズ(高さと幅)を取得する素敵な方法はありませんか?
javaなら簡単
Dim 1 As Integer For l = 0 To 1000 Next ここでエラーがでるんですけど、本とか調べても間違ってないし・・・
>>876 > Dim 1 As Integer
↑の宣言でエラーがでるだろうが。
>>876 質問する時は出たエラーメッセージくらい書け。
ヤベ ワラタ
ちなみに、0から1000をくり返したら1001回実行するぞ。
へぇー
1ooo
1∽1
885 :
デフォルトの名無しさん :03/11/15 22:41
VB6です。コレクションをプロパティとして持つクラスを作ったのですが、 値の設定がうまくいきません。 collectionAをclassAのコレクションとしてクラスビルダで作成し、 classBのプロパティAにcollectionAを設定しました。 つまり、 classA プロパティ proA as integer collectionA proAのコレクション classB プロパティ proB as collectionA という状況です。ここまではエラーもなくできました。 しかし、値を設定するところで困っています。例えば、 dim B as new classB しといて、 B.proB.addとかしようとすると、そこで 実行時エラー91 オブジェクト変数またはWithブロック変数が設定さえれていません。 が発生します。 コレクションをプロパティとして持つクラスなんてそもそもできないのでしょうか? それとも、値の設定の仕方がまずいのでしょうか? どなたかご教授ください。よろしくお願いします。
>> 885 よくわからんが、 ClassB中のClassAコレクションのインスタンスは きちんと作ってあるのかい? 再現するコードを載せてみ。
>>787-788 レスthx!
原因がわかりました。
DdeNameService()
を指定する前に宣言する関数の記述方法を間違えていたのが原因でした。
DdeInitialize()関数の宣言なんだけど、
lRet = DdeInitialize(lPidInst, _
DdeCallbackProc(0, 0, 0, 0, 0, 0, 0, 0), _
CBF_SKIP_CONNECT_CONFIRMS Or APPCLASS_STANDARD, _
0)
↑なカンジに記述してました。
どうぞ罵ってくれい
>885 文面からするとClassBに Property Get proB() As CollectionA とプロシージャを宣言して、外部からこのCollectionAを操作したいって事? プロパティの宣言等を省略して書いちゃってるからワケワカメ。 >886さんの書いているように中身を晒したほうが良いかも。
886さん 山太郎さん レスありがとうございます。質問が仕方が悪かったです。 すみません。 886さんの書かれていることがエラーの原因っぽいのですが、 どこでどうインスタンス化するのか分かりません。 やりたいことは山太郎さんの書かれている通りなんですが。 コードはこんな感じです。 ---------------------------------------------ClassA.cls Private mvarPropertyA As Integer Public Property Let PropertyA(ByVal vData As Integer) mvarPropertyA = vData End Property Public Property Get PropertyA() As Integer PropertyA = mvarPropertyA End Property
890 :
885 続き :03/11/16 12:46
---------------------------------------------CollectionA.cls Private mCol As Collection Public Function Add(PropertyA As Integer, Optional sKey As String) As ClassA Dim objNewMember As ClassA Set objNewMember = New ClassA objNewMember.PropertyA = PropertyA If Len(sKey) = 0 Then mCol.Add objNewMember Else mCol.Add objNewMember, sKey End If Set Add = objNewMember Set objNewMember = Nothing End Function Public Property Get Item(vntIndexKey As Variant) As ClassA Set Item = mCol(vntIndexKey) End Property Private Sub Class_Initialize() Set mCol = New Collection End Sub Private Sub Class_Terminate() Set mCol = Nothing End Sub
891 :
885 続き :03/11/16 12:47
---------------------------------------------ClassB.cls Private mvarPropertyB As CollectionA Public Property Set PropertyB(ByVal vData As CollectionA) Set mvarPropertyB = vData End Property Public Property Get PropertyB() As CollectionA Set PropertyB = mvarPropertyB End Property ---------------------------------------------Module1.bas Sub main() Dim B As ClassB B.PropertyB.Add 1 'エラー End Sub 'エラー91 オブジェクト変数またはWithブロック変数が設定さえれていません。
892 :
デフォルトの名無しさん :03/11/16 13:34
>>885 エラーメッセージまんまだと思いますよ。
つまり「Bってオブジェクト変数はオブジェクトを参照してない(つまり=Nothing)よ」
ってことでしょう。(New忘れてませんか?)
ついでに、いくら問題を提示するためのサンプルコードといっても可読性悪すぎませんか?
目的不明のクラスAだのコレクションAだのが出てくるコードって
読んでると頭痛くなってくるのは私だけ?
893 :
885 続き :03/11/16 16:08
>>892 レスありがとうございます。頭痛くさせて申し訳ありません。
コードはクラスビルダで自動生成したまんまで、見にくくてすみません。
コレクションAはクラスAのコレクションで、クラスBのプロパティとして
コレクションAを設定したい、という質問でした。
さて、891の最後、ClassBに関して、Newを書くのを忘れていました。実際は、
Dim B as New ClassB
としたのですが、やはり、891で書いたようなエラーが出ます。
しつこくて申し訳ありませんが、よろしくお願いします。
>>891 Private mvarPropertyB As CollectionA
を
Private mvarPropertyB As New CollectionA
にしないとまずいような。
ステップ実行とか使えるようになったほうがいいかもしれんね。
>>894 ご指摘の通りでした。確かにNewしとかないと
mvarPropertyBがどこも参照しないですね。
ステップ実行ちゃんと活用するようにします。勉強になりました。
ありがとうございました。
他のレスを下さった方々も、ありがとうございました。
896 :
デフォルトの名無しさん :03/11/16 20:51
ウインドウのサイズを800×600に固定したいのですが どうすればいいでしょうか。
>>896 サイズを変更したいの? サイズを変更できないようにしたいの?
どちらにしても、ヘルプを参照すればわかるレベルだと思うけど(汗
>>897 すいません。
フォームのサイズでした。
800×600から変更できないようにしたいんです。
>>898 フォームのプロパティのBorderStyleを、固定に。固定にも種類があるけど、用途による。
>>899 どうもです。
MDIフォームにBorderStyleがないんです。。。
>>900 MDIは固定にできないよ。無理にやるならAPIで。
902 :
デフォルトの名無しさん :03/11/17 00:04
VB6で作成したプログラムをWin98のマシンに入れたら、インターネットエクスプローラの動作がおかしくなりました。 (別ウインドウを開く様なときにエラーになってしまう) どのような事が原因として考えられるでしょうか?
VB6製のプログラムが複数立ち上がってたときに、ウインドウクラス名やウインドウキャプション以外で確実に見分ける方法ってありますか? 例えば多アプリのウインドウを子ウインドウ化して取り込むプログラムで、 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long Private Sub MDIForm_Load() Dim TargethWnd As Long Dim OldParent_hWnd As Long TargethWnd = FindWindow("ThunderRT6Main", vbNullString) OldParent_hWnd = SetParent(TargethWnd, MDIForm1.hWnd) End Sub って書いた場合とか。 クラス名が "ThunderRT6Main" 固定である以上、複数立ち上がってた時にどう挙動するのか疑問なんですが。
WM_SIZEイベントを拾ってキャンセルすればいいね
質問です。ランダムアクセスでファイルを扱うために、構造体(そう言わないの かな?)を宣言しますよね。 その中で固定長文字列をString*100みたいに宣言するじゃないですか、 その*100で100文字保持できる変数という事になるのでしょうか? 全角文字とか半角文字とかでやはり変わるのでしょうか? 私が試してみたら100文字は保持できず、何文字入るか試してみても よくわからん中途半端な文字数になってしまいました。 どなたか分かりやすく教えていただけると有難いです。 よろしくおねがいします。
>>906 そこって判りにくい仕様の部分だったような。
VB内部はUNICODEで1文字1Stringなんだけど、ファイルIOとかはバイト換算だったような。
pictureプロパティに独自形式の画像をぶち込む方法ってありますか? pictureboxにpsetで1ピクセルづつ描くのはあまりに原始的で。 独自形式とは画像とそれに関するデータを加えたフォーマットにする予定なので 結果的にpictureプロパティには256色bmpが入ってる状態と同じであれば良いです。
bitblt
実行してform1が開いた五秒後にform1が閉じて form2が自動的に開くプログラムわかりますか? 教えてください
>>909 bitbltでファイル読み込みできますか?
>>911 ファイルの読込みから解らんのかい(笑
それぐらい自分でやろうよ。
適当な配列にビットマップを入れたら
SetDIBitsToDevice()あたりを使えばPSetでやるよりめちゃくちゃ速く
画像をPictureBoxに表示できるよ。
>>912 レスサンクスです。
いつもLoadPicture使ってたもので、
こういうのにはめちゃくちゃ弱くて。
>>910 Form1のアンロードに Form2.Show を入れよう
Form2のアンロードには Form1.Show を入れよう
VB6.0製アプリで最新のPCが処理速度速すぎで フリーズするなんてことありますか?
基本的にはない。 ただ、トリッキーにタイミング依存するプログラムを書いてるとしたらあるかもしれないけど。 って、VB6で時間とるのにループ回して勘定してるプログラムとかあったら見てみたい。 何十万回ループすれば1秒だ?w
やっぱりないですよねー 不思議だ
CPUのせいじゃなくて、OSとか環境差じゃないの?
920 :
デフォルトの名無しさん :03/11/18 11:44
DoEventsを多用すると、タイミング依存の問題が発生しやすい。
OSかも! っていうかDoEventsを使ってます!これ?
でも、Doeventsは単にOSに処理をお返しします!だけだから。 副作用はあるけど、フリーズはしにくいとは思う、というかこれでフリーズするなら、 現状動いているものでもフリーズするはず。
VB6.0で.NETのクラスライブラリをインポートする方法を教えてください。 インポートしたあとはそのクラスのメソッドなども使えますよね?
>>924 普通に使えないと考えるのが当たり前だろ?
なぜ使えると思えるの?
>>925 たとえばFileSystemObjectはVBのものじゃないがVBに組み込んで使えるじゃないか
VB6でリストビューのlvwReportで履歴を表示するものを作っています。 日付けの列見出し項目をクリックしたときに、日付けを昇順・降順で 並び替えるようにしたいのですが、コントロールパネルの日付け表示指定が 一桁表示の場合、データがきちんと並び替えをしません。テキストで並び替えを しているのだから仕方ないとは思うのですが、何か方法はあるのでしょうか? できれば表示する日付けは、コントロールパネルに沿った書式にしたいので、 Format関数で強制的に2桁表示するのは、嫌なのですよ…。
928 :
デフォルトの名無しさん :03/11/18 15:24
VBScriptでちょっとしたWebの巡回ツールを作りたいのですが、 下記のようなボタンが2つあるときにA_Buttonの方をクリックさせるには どのようにしたらいいのですか?".Submit"が使えなくて立ち往生しました。 <input type="image" name="A_SUBMIT" src="./A_SUBMIT.gif" alt="ログイン"> <input type="image" name="B_CANCEL" src="./B_CANCEL.gif" alt="やめる"> 枯れた質問なのかもしれませんがお願いします。
>>927 日付表示列とは別に、ソート用の2桁日付列(非表示)を作ればよい。
930 :
デフォルトの名無しさん :03/11/18 17:42
自分自身(Appオブジェクト)以外のプログラム(xxx.exe実行可能ファイル)が実行されているかどうかを調べるにはどうすればよいのでしょうか?
タイピングをつくるためのプログラムって どうやって作ればいいんですか? 一文字ずつ比較させていくの?
>929 いろいろ試していましたが、非表示にする方法がさっぱりです…。 >930 GetWindowAPIとGetNextWindowAPIを使えば何とかなるかも?
933 :
デフォルトの名無しさん :03/11/18 18:25
>932 レスをありがとうございます。しかし、むずかしそうですね。GetWindowAPIは、僕のMSDNではグレーアウトされていて使えないみたいです。
>933 >僕のMSDNではグレーアウトされていて使えないみたいです。 MSDNのアクティブサブセットをプラットフォームSDKや全てのトピックを 選択しても見れないのか? というより、オンラインで見れるだろうよ……。
935 :
デフォルトの名無しさん :03/11/18 18:53
フォーム上に lstvListView というリストビューがあるとして、 Sub Main() Debug.Print pstrListItem(lstvListView.ListItems(1), "node") End Sub Function pstrListItem(lsti as listItem, ByVal strKey as String) pstrListItem = lsti.SubItems(lsti.Parent.ColumnHeaders(strKey).Index - 1) End Function とゆーよーな関数を作りたいのですが、ListItem から親の ListView(Parent) を得る方法が判りません。 過去ログは一応参照してみたのですが。 誰か教えて……。 #そんな方法はない!?
スライダーコントロールのBackColorを変更する方法ってあります?
naiyo
そうなんですか。 そこだけ、灰色になっちゃって、かっこ悪いのに。。。
939 :
デフォルトの名無しさん :03/11/18 21:17
WebBrowserで開いたURLがフレーム使ってるとき、 フレーム内の(子の)HTMLのフォームに対してSendKeysしたいんだけど どうやっても子にフォーカスが行かないんですが 何かいい方法ありませんか?
WebBrowserを使っているのなら、 DOMを操作したほうがいいよ。
942 :
デフォルトの名無しさん :03/11/18 22:58
DOMっすか? 手でIE操作する代わりにちょこちょこっとドロップダウンを操作して フォームを実行したいだけなのに、、、
943 :
デフォルトの名無しさん :03/11/18 23:19
VBScriptを使って、そのwebページにアクセスしてきた人の MACアドレスを取得することはできるのでしょうか? VBScriptからWindows Script Hostを使って コンピューター名を取得することは出来たのですが… コンピューター名はすぐ変えることが出来てしまうので MACアドレスが取得できればと思っています またMACアドレス以外でも各コンピューターで 一意の簡単に変えられない値が取得できればいいので なにかお知恵をお貸しいただけませんか?
944 :
PG1.75年生 :03/11/18 23:26
お疲れ様です。 ここ1年Delphiも使ってるんですけど、 DelphiのFor文にある、Continueにあたるものって、 VBに存在するのでしょうか? 初心者過ぎて申し訳ないのですが、有無だけ教えてください。
>>943 目的は?
イントラ?
ルータを越えるようならMACアドレス取得しても意味ないし。
>>943 やる気とネタさえあればMACアドレスも詐称できまつ。
948 :
デフォルトの名無しさん :03/11/19 00:50
>>945 仕事しないでいたずらをしてるアルバイトさんの特定です
ルーターを越えるんですが…VBScriptでMACアドレスを取得して
それをクッキーに入れて(クッキーが有効でないと仕事ができなくなってます)
それを使って何をしたかをログに取ろうかと思っているのですが…
>>947 MACアドレスが変更できることは知っています
ただ…コンピューター名を変えることほどは手軽にできないかなぁと思って
何か他にコンピューターを特定する一意の値はありませんか?
>>948 まあネットワーク越しのデータに信憑性を求めるのは酷ってもんだし。
そういう要望なら各クライアントに「一定時間毎にスクリーンショッ
トを撮って、鯖に送る」みたいなスパイウェア組んでもいいんでない?
950 :
デフォルトの名無しさん :03/11/19 01:13
>>949 スパイウェアですか
実はプログラムはphpとPerlぐらいしか書けないので
JavaScriptかVBScriptで何とかならないものかなと考えていたのですが
どなたか何かよいアイディアいただけないでしょうか
キーロガーを仕込めば
954 :
デフォルトの名無しさん :03/11/19 08:48
>>953 キーロガーですか
アルバイトさんが使っているPCには
できれば何も入れずに済ませたいなと思っています
そこでアクセスしてくるHTMLにVBScriptで
何かを書いて実現できないかなと思った次第です
>>954 いったいどんなアルバイトなんだい?
話が見えない。
>>954 推測ですが、HTMLを常に開いていて、そのHTMLに対して入力をするアルバイトですか?
957 :
デフォルトの名無しさん :03/11/19 09:28
質問です。 VB6.0、スプレッドシート3.0という環境なのですが、 スプレッドのセルを、エクセルのセルみたく結合したいのですが、 スプレッド3.0ではできないのでしょうか? 6.0の試供品版ではできるんですけど・・・
958 :
デフォルトの名無しさん :03/11/19 11:32
>>948 MACアドレスが欲しいIPアドレスを指定してarp発行
それをログにとればすむだろ。
レス多いね。
>>932 非表示にできないんだ。俺は全然使わないんで知らんかった。すまん。
列幅をゼロにすればとりあえず見えなくなる。
でもそれだとマウス操作で列幅を変えられるので、それが嫌なら
オンデマンドでソート用の列を追加・ソート後削除だな。
事前にVisible、SortedをFalseにするのも忘れずに。
960 :
PG1.75年生 :03/11/19 12:22
>>946 レス遅れました。すみません。
やはりContinueは無いようですね・・・
GOTOか、エラートラップを使うしか無いっスね。
ありがとうございました。
HTMLにActiveXコントロールを埋め込めば、どんな恐ろしいことでもできる。
うーん仕事でVBやるってんで昨日から勉強始めたんだが Cと比べると危険なニオイがぷんぷんする言語だなぁ・・・ 代入と比較演算子が同じだったり、関数へ引数渡すのがデフォで参照渡し になるとか・・・なんかバグがわらわら出そうだ
>959 再びレスどうもです。 まったく同じことを考えたんですよ。>見出しwidth値0 ただ、仰っているとおりドラッグで幅変更してしまうので、 イベント毎に強制的に値0を代入していこうかとも思ったんですが、 どうやらListViewにはLVN_COLUMNCLICKイベントしかないらしく、 スタイル属性にもよさげなものはなかったのです…。 仕方がないので、人間の心理をついて隠し見出しをTOPにもってこようかと 思ってます。 >オンデマンドでソート用の列を追加・ソート後削除だな。 >事前にVisible、SortedをFalseにするのも忘れずに。 ↑のやりかたも面白そうですが、見た目が悪くなりそうなので やめておきます。ご教授感謝します。
>962 C→VBプログラマで一番きついのは、インクリメントがないことだ。
>>963 パフォーマンスに影響するorコード書きが面倒だからってならわかるけど、
見た目重視ならむしろ後者じゃないかと思うのだが・・・。
結論出した後に悪いが、誤解があるかもなので一応レス。
>965 どうやら自分が理解していないっぽいんので、もう少しお付き合いください。 visibleプロパティはListViewのでいいんですか? ColumnHeaderには visibleプロパティはないですし。 日付け項目のクリック時に、新規に2桁表示の日付け項目を追加、 新規日付項目をSortKeyに設定、並べ替え後、新規日付項目を削除…と 思っていたんですが、SortedとVisibleをFalseにする理由がわからないのです…。 お馬鹿ですみません。
リストボックスコントロールに表示する内容を、右クリックですべて選択 し、コピーしてクリップボードに遅れる(普通の右クリックコピー)ように するにはどうすればよいでしょうか? そういう事ができるようになるプロパティとかありましたっけ? 調べたんですけどなかなか出てこないので、どなたかしっていたら 教えて下さい。
>967 MouseDownで右クリック判定→ListBox.ListCount-1を 最大値としてForループ→ListBox.Selected(i) = trueで 全て選択→Clipboardオブジェクトに、選択したテキストを 追加でいいんじゃないだろうか?
DTPicker.MinDateに値を設定しても、ドロップダウン カレンダーで MinDateに指定した日付よりも前の日付が指定できてしまいます。 なにか他に設定するところがあるのでしょうか?
そろそろ次スレ?
イノベイションとはどういう意味ですか?
VBScriptの質問です Response.addheader("Content-Disposition","filename=" & filename) Basp21.BinaryRead(FilePath) Response.BinaryWrite file のようにファイルを出力しています。(主にPDF) このプログラムへのアンカーで右クリックして保存すると ファイル名は「filename」で指定したとおりになります。 しかし、PDFファイルのとき、左クリックしすると AcrobatReaderでファイルが開かれるのですが、そこから 保存するとファイル名がソースファイル名になってししまいます。 何かよい方法ありませんか?
_| ̄|○
こんばんは 最近までVBAをやっていましたが、卒業してVBを勉強したいと思っています。 そこでマイクロソフトのVisual Basicをオークションで買おうと思いますが、 時々ユーザー登録できないものなど海賊版らしきものがちらちら目に付きますが、 ユーザー登録できないと何かデメリットがあるのですうか?
>>954 具体的な仕事内容が見えないと的確な助言は望めないでつ。
つーか、フリーのスパイなりスニッファなり使った方が効果的だよ。
この手のソフトはよっぽど綿密に作らないと帯域を無駄使いするっぽい。
>>976 フリーでダウンロードできるVB5 Control Creation SP2で、しばらく
練習しつつ安い出物を見つけたまい。少なくとも海賊版や登録移譲がで
きないのはやめとけ。
>>977 フリーでダウンロードできるVB5 Control Creation SP2で、しばらく
練習しつつ安い出物を見つけたまい。少なくとも海賊版や登録移譲がで
きないのはやめとけ。
何故ですか?
1000取り開始?
>>978 趣味にしろ実益にしろプログラマとして活動するんなら、きちんと対価
と敬意を払って正規版ソフトウェアを手に入れようって意味だったんだ
が。こういう考えはハードボイルドでつか?(´・ω・`)
>>917 きょうびのコンパイラでは、空ループは最適化されて、なにもやらないんじゃないかな(汗
>>981 半分正解。VBでも空ループは最適化されて何もしない。
ただし、整数の桁あふれチェックを削除している場合。
デフォルトでは、空ループでもループに使用するインデックスが
桁あふれする可能性があり、それをチェックするために削除されない。
VB.NETやC#でも桁あふれをチェックしていると思うけどどうなっているのかな?
初期値と終了値のみのチェックになっているのかな?
さすがに某言語のように桁あふれをおこすと急にマイナスの値になって
無限ループということにはならないと思うけど。
イノベーションって???
>>966 ListViewに限らず、リスト系コントロールの値を複数変更する時、
変更処理の間Visible=Falseにしておくと高速化&ちらつき防止になる。
変更処理の直前にFalseにすれば、大概見ため上Visible=Falseにならずに済む。
(間にRefresh、DoEventsを入れなければ)
Sorted=Falseも高速化のため。
あの・・・ Formにコントロール貼り付け為の点々って 消せないのでしょうか?
えー どうやって?
つーる、おぷしょん、ぜんぱん、ぐりっどのせってい、ぐりっとのひょうじ
ありがとうございます