[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 02/01 06:17 / Filesize : 260 KB / Number-of Response : 964
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

VBプログラマ質問スレ(Ver.6.0 まで) part57



1 名前:デフォルトの名無しさん mailto:sage [2011/04/30(土) 01:50:27.76 ]
ここは Visual Basic 〜6.0 の質問スレです。
質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。

VB.NETは別物なので専門スレで、VBA、APIの質問もそれぞれのスレで。

○ 質問者の心得
 一.質問する前にMSDNやGoogle、過去ログにも目を通してみる。
 二.VBScript、インストーラーなどはこのスレでOK。
 三.質問は第三者にもわかりやすいよう簡潔かつ具体的に。
 四.荒らしは相手しない。

○ 回答者の心得
 一.答えられない質問は無駄に罵倒せずスルー。無理するな。
 二.代用法を強制しない。
 三.回答する上で必須ではない情報をむやみに聞き返さない。
 四.荒らしは相手しない。
 五.VB情報募集中。
 六.回答は質問者が理解できるよう具体的に。

MSDN Online Japan ホーム
 www.microsoft.com/japan/msdn/default.asp
Visual Studio 6.0 Service Pack 6
 msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp6/default.aspx
Google
 www.google.co.jp/

※「まず自分で調べる」クセを身につけよう。

910 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 19:32:45.32 ]
>>908
COM操作に特化したってのはまあ同意できる面もなくはないが
VB6はべつにofficeに特化してるわけではない

VBAはVBのサブセット的な位置づけで、VBAが実質officeの操作に特化してるというなら
同意できる面もなくはない

とりあえずお前がVBとVBAの区別ができてないのが良くわかった

911 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 20:06:07.35 ]
VB5CCEの話とごっちゃになってそう

912 名前:デフォルトの名無しさん [2012/01/09(月) 20:43:37.75 ]
初心者ですが、Visual Basicを始めるにあたって周りに教えてくれる方がいません
簡単な物理計算をして、それを表示できるだけでいいのですがお勧めの指導書などありますか?

913 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 21:17:08.01 ]
答え : いまの時点でVBを0から始める馬鹿はいない

914 名前:デフォルトの名無しさん [2012/01/09(月) 21:20:21.49 ]
>>913
すいません、始めなければならないんです
0からでも

915 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 21:22:13.19 ]
>>914
現在入手可能な、お勧めの指導書はありません。
0からオンラインヘルプを頼りに始めるのが良いと思います。

916 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 21:22:50.93 ]
まあ落ち着け

VBとVB.netは別物だぞ
まずこれを理解してないと会話が成り立たない

917 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 21:28:54.17 ]
単純な計算と表示だったら他のBASICの入門サイトなどで代用できるよ
N88互換のBASICも生きてるものがあるだろうし、そっちから攻めるといいんじゃないかな

918 名前:デフォルトの名無しさん [2012/01/09(月) 21:29:07.72 ]
>>915
そうなんですか?オンラインヘルプか...
>>916
自分が使っているのはVisual Basic2010express editionなのでVB.netとはちがいますよね?;



919 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 21:32:41.26 ]
せつこ、それどっとねっとや

920 名前:デフォルトの名無しさん [2012/01/09(月) 21:35:03.64 ]
>>919
え、そうなんですか?
なんということでしょう...

921 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 01:47:17.97 ]
>>910
VB6とVBAの違いっていっても大してねーじゃん。平等に(ry

僕が言いたいのはVB6自体、COMを扱う、つまり主にofficeを扱うために作られたような言語でしょ?
そりゃ、それ以外の用途にも使えるかもしれないよ?でも向いている訳じゃないだろ。
VB6はVBAと違ってGDIを直接触らなくてもグラフィックを描画出来るかもしれないが、それもおまけみたいなものだし。

922 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 02:01:34.36 ]
>>921
えとさ、COMってOfficeの事じゃないよ
1から勉強しなおしたほうがいいんじゃない?

923 名前:デフォルトの名無しさん [2012/01/10(火) 02:48:07.37 ]
一口にVBって言っても色々あるようですね
少し書店などで立ち読みしただけでは初心者には組めそうにないと思ったので...
やはり大学の授業や講座などを受けるべきなんでしょうか

924 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 03:24:27.84 ]
>>922
揚げ足とりすぎ
COMとofficeは表裏一体だろ。もちろんoffice意外に使えないわけじゃないけどさ、使わないだろ?それ以外だとIE周りとか?
COMはofficeとVBのための技術といっても過言じゃないし、VBはCOMを扱うための言語、
ならVBはofficeのための言語って言っても差し支えねーじゃん。VB6、COM、Officeこいつらは三つ子の兄弟だよ。

>>923
何をしたいかによる。大学っていっても情報専門の学科以外での授業なんて、中学生の部活でちょっとやる程度のことしかしないよ。
新しくVB6を始めるのはあり得ないが、VB.netなら特に苦も無く学べるんじゃない?
全く経験が無いならC#の方が取っつきやすいとは思う。どっちもほとんど同じものだからどっち選んでも良いけど。

とりあえずここはVB6スレであってVB.netはスレ違だ

925 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 03:33:55.59 ]
Officeのための言語ならここまで広まらなかっただろうな

926 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 03:37:49.57 ]
>>924
だからさ、Windowsのあらゆる部分にCOMは使われてるの。
マルチメディア関係、サウンド、動画、もほとんど
COMだぞ。

927 名前:デフォルトの名無しさん [2012/01/10(火) 03:51:52.39 ]
>>924
なるほど...
聞いた感じかなり難しそうですね
CもVBもあまりかわらないものなんですか?


928 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 04:34:58.35 ]
>>924
揚げ足でも何でもなくて本当にお前の理解不足だから
そのていどの理解力でCOMがどうこう言うのはやめれ



929 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 13:10:03.82 ]
>>926
そうらしいね
レジストリのクラスIDとして登録されてるのがCOM?

930 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 13:20:37.77 ]
DirectXもCOMだよ

931 名前:デフォルトの名無しさん mailto:sage [2012/01/10(火) 14:38:22.59 ]
>>927
CとVBは全く別だよ。C#とVB.netは同じ.netだから、同じように扱えるし、書き方もにてるから
C#の知識がないVB.netの人でもC#のコードが読めるし、逆も読めるよ。
blogs.wankuma.com/jeanne/archive/2007/02/26/64122.aspx このあたりにまとめてある

そしてC言語とC#、VB6とVB.netはまるで別だよ。 もうすこし調べたり考えたりしてから書いた方が良い。
要は「英語と中国語では文法(ゴジュン?)が似てる」っていうのを「ラテン語と韓国語はあまりかわらないものなんですか?」って返してるようなもの
それにスレ違だって。

932 名前:デフォルトの名無しさん mailto:sage [2012/01/11(水) 03:43:44.63 ]
COMはwindowsの中核を成す技術仕様だぞえ
officeはそれに準拠してるというだけだよ
それにCOM自体はUNIXなんかにも実装されとる
個人法人問わず自作のCOMコンポーネントが大量に配布されてるじゃん
officeとVBだけってんじゃあ勿体無さすぎだなぁ

>>927
VBでって事はwindowsは確定だとして、簡単な物理計算と表示だけで良いのなら
Excelに関数かマクロ突っ込むだけで事足りるんじゃなかろうか?

933 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 18:15:32.51 ]
コンピュータ動かすんやからCもVBも.NETもJavaも全部ほとんど一緒やろ!
似たようなもんやで〜〜
全部IFとかFORとかそんなんやん!!どや?


934 名前:デフォルトの名無しさん mailto:sage [2012/01/12(木) 18:18:56.80 ]
Javaにforってあるん?

935 名前:デフォルトの名無しさん [2012/01/13(金) 00:34:01.99 ]
すみません、VB上でWin32APIのSleepを使って、現在のスレッドを
1000ms(1秒)一時停止させる処理を入れたいのですが、その際、
下記のようなソースの場合、DoEventsが実行されるタイミングは、
Sleep 1000でスレッドが停止して1秒たち、再度一時停止していた
スレッドが再開した後でしょうか?

それとも、Sleep 1000で1秒間分のスレッド一時停止が開始された
直後にDoEventsが実行されるのでしょうか?

やりたいことは、Sleep 1000でストップしている間に、他のスレッド
で発生してたまったWindowsメッセージを処理させたいと思っています。

---以下ソースの一部---

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
  Sleep 1000
  DoEvents
End Sub


936 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 01:10:41.27 ]
>>935
「それとも」って接続詞の使い方間違ってない?
どっちも同じ意味にしか聞こえんけど....


937 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 01:22:59.63 ]
ああ、>>935の意味がやっと分かったw
要するに>>935はスレッドが何か全然分かってないんだね。

コード(当然DoEventsを含む)が実行されるということは、そのスレッドが
制御を持ってる(ブロックされてない)ということ。

〜が実行されるのは眠った後ですか?なんて質問は愚問過ぎ。
実行されない状態を作るのがSleepなんだよw

938 名前:935 [2012/01/13(金) 01:23:04.80 ]
>>936
わかりにくくてすみません。。

Sleepで一時停止中か、一時停止しスレッドが開始した後か
という意味です。



939 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 01:25:11.09 ]
停止中はどのような命令も実行されないわけですが

940 名前:935 [2012/01/13(金) 01:25:28.49 ]
>>937
ありがとうございます
やはり、Sleepが実行されて、そのスレッドが止まると、
当然次の処理であるDoEventsも停止中は、実行されない
と言うことですね。

であれば、DoEventsするスレッドを別に立てるしかないという
ことでしょうか?

941 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 01:32:12.87 ]
>>940
いやまず最終的に何がしたいのか書かないと何とも言えんと思うけど....

「(重い)処理」を別スレッドでやるのなら普通はDoEventsなんて必用ないですよ。
DoEventsは、UIスレッドで(ビジーループ的な)重い処理を実行しても
UIが無反応になることを避けたい場合だけに使うんですよ。

942 名前:935 [2012/01/13(金) 01:50:55.91 ]
>>941
説明不足ですみません。

>>935は一例としてあげたソースになります、実際には、、

UI(Form)に配置したTextBoxに時計表示を出して、それを1秒ごとに更新して
表示させたいのですが、同時に3秒ごとに別の処理の繰り返しをしたいと思っています。
その際、3秒待つのに単純にSleep 3000という行を追加すると、UIの時計更新が止まって
しまうので、3秒待っている間でもForm上の時計表示は動かしたままにしておきたいと
思い質問しました。

ちなみに、UIスレッドとは、Formのソース内に書かれているプロシージャ群の
処理が実行されるスレッドということでしょうか?

943 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 05:47:47.09 ]
x秒ごとに処理したいのにスレッドを止める必要ないでしょ
だいたい処理が瞬間に終わるわけでもあるまいし。
インターバルを設定できるTimerってのがあるんだけど

944 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 07:19:27.57 ]
VB6でマルチスレッドってActiveXを使うやり方?

945 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 08:53:01.02 ]
できた

Private cnt As Integer

Private Sub Form_Load()
  cnt = 0
  Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()

  cnt = cnt + 1
  Label1.Caption = cnt
  
  If cnt Mod 3 = 0 Then
    Shell "notepad" '重い処理
  End If

End Sub


946 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 09:21:22.64 ]
VBは1つのスレッドで、DoEventsによって並列処理を
しているように見せているだけ。
Sleepしたらそのスレッドは止まるのだから、VBプログラムの全てが止まる。
DoEventsでそういうことをやっているとデッドロックしやすい。
DoEventsをSwitchToThreadを同じようなものだと思っていると痛い目を見る。
非同期処理したいのであれば、Timerを使うべき。

947 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 09:38:57.77 ]
マルチスレッドがやりたいならvb.netを使ったほうがいいよ
vb6でやるならマルチプロセスでやったほうがいいな

948 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 14:16:45.68 ]
ActiveXExeのスレッドでマルチスレッドをやってみたことはある。

非同期で処理しようと思ったら、結局別スレッドで作成した
FormにTimerをおいて、そこから処理をスタートさせなければならない。

メソッドやプロパティはオブジェクト側のスレッドで同期して実行されるので
別スレッドのオブジェクトを呼び出しまくると、全然並列処理にならないw



949 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 18:56:07.60 ]
>>934
あるよ。
FOR EACH的なものまである。

>>933
制御文レベルだとどれも似たようなもん。
しかし、それをもってほとんど一緒というお前はまだまだ素人。

950 名前:デフォルトの名無しさん mailto:sage [2012/01/13(金) 19:08:54.62 ]
>>942
Sleep 3000 は、3秒間何も出来ません、の意味。
やるんなら

Private Sub Timer1_Timer() 'インターバルを1000にしておく
  Static cnt As long
  
  If cnt = 0 Then
    'ここに3秒ごとの処理を入れる
  End If
  
  Text1.Text = Format(DateTime.Now(),"yyyy/mm/dd hh:nn:ss")
  
  cnt = cnt + 1
  If 3 <= cnt Then
    cnt = 0
  End If
End Sub


>>945
それだとcntが32768でオーバーフローになる

951 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 16:29:09.18 ]
VisualBasicEditor(VB6 や OfficeVBA のエディタ部分)の
初期フォントの決定ルールを教えて欲しいです。分かる方、いますでしょうか。
日本語環境なら、MS ゴシック、英語環境ならCourier Newのようです。

オプションダイアログからフォント設定を変更した後ならレジストリに記録されてましたが、
インストール後からフォント変更するまでは、レジストリには項目がありませんでした。

知りたい理由は、VisualBasicEditor上に同じフォントで文字を描画したいからです。
同じフォントで描画ができればいいので、稼働中のVisualBasicEditorのフォント名などの情報や
HFONT、LOGFONTなどを取得する方法がありましたら、そちらの方が適切に思うのですが、
VBEウィンドウに対してGetDC、GetWindowDCした後、GetTextFaceなどでは駄目でした。

初期フォントや稼働中フォントの取得方法が分かる方、どうぞよろしくお願いします。

952 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 16:58:49.24 ]
ここってやっぱりVB.NET扱ってませんよね(´・ω・`)?

953 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 18:48:29.76 ]
>>952
扱ってたら>>1に「VB〜6.0の」なんて書いてありませんよね。日本語理解できてますか(´・ω・`)?

954 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 19:18:03.31 ]
>>953
いるよねぇ。こういう一言多いやつ

955 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 19:34:06.91 ]
やっぱり扱ってませんでしたか
お騒がせしました(´・ω・`)

956 名前:デフォルトの名無しさん mailto:sage [2012/01/14(土) 20:21:19.59 ]
>>955
もう見てないと思うが、.netはここ

VB.NET質問スレ(Part38)
toro.2ch.net/test/read.cgi/tech/1325083428/

957 名前:デフォルトの名無しさん [2012/01/27(金) 04:15:41.25 ]
>>951
VBインストール直後はフォント情報がレジストリにないということは
レジストリ読んでみて、登録されてなかったら、そのデフォルトフォントにすればいいのでは?

レジストリ読むAPIはAPIビューアの定義は間違いだらけだから気をつけて
あれってVB5の時から間違ったままだから、初心者に諦めさせるように故意に間違えてるんだろか

958 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 09:32:31.10 ]
APIの引数はByVal As Longで宣言して
StrPtrとVarPtrで渡す時代



959 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 00:24:21.02 ]
>>957
レス感謝です。もうレスは無いかと半ば諦めてました。

今のところ、まずはレジストリから取得するようにしています。
デフォルトフォントはOSの言語で決まるようだったので、できれば決め打ちではなく、
VB6と同じような何らかの決定ルールに従いたいと思ってました。
(英語版VB6を日本語版WinXPで試したところ、MS ゴシックがデフォルトフォントになりました)

詳細は読めなかったのですが、中国のサイトでソフトが紹介されているのを見つけたので、
少数ながら、海外にもユーザーがいるみたいなので、それもフォントを決め打ちにしたくない理由の1つです。

色々試してみて、どうやらレジストリから取得しているわけではなさそうなのですが…。

960 名前:デフォルトの名無しさん [2012/01/28(土) 08:35:49.31 ]
そうねぇ、外国のOSならMSゴシックはないよねぇ
とするとWindowsのどこかに・・

フォント名が定義されてるレジストリは余りないようだけど
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
あたりはどうでしょ
こんなのを別のフォント名に変えてVBを新規インストールしてみて
その変えたフォントになるかどうか
ま、人に配布するソフトはそんな推測で作っちゃいけないよね

961 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:50:30.26 ]
>>960
VB6新規インストールは行っていないものの、
レジストリ上の"MS ゴシック"、"MS Gothic"、"msgothic.ttc"を
別のものに変えて試してみたのですが空振りでした。

色々試してみたところ、VB6については、OSの言語に依存しているのではなく、
[コントロールパネル]-[地域と言語のオプション]-[詳細設定]-[Unicode 対応でないプログラムの言語]
の設定に依存していることが分かりました。
また、この項目で「中国語(香港)、(マカオ)、(シンガポール)」を選択すると、
VBEで使用するフォントが必要な状況になるとVB6が強制終了してしまうことが分かりました。
内部でベタで持ってるのかもしれませんね…。

とりあえず、レジストリから取得、取得できない場合はベタ書きにしようと思います。

962 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 23:31:01.21 ]
961に誤りがあったので、誰かが変に参考にしないように訂正を。

[Unicode 対応でないプログラムの言語]の設定を
「中国語(香港)、(マカオ)、(シンガポール)」にするとVB6が強制終了すると書きましたが
それは英語版VB6の話で、日本語版VB6の場合は問題ありませんでした。

963 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 21:47:40.78 ]
会社で仕事関係の一切の情報持ち出し、持込禁止になってから止めてたんだけど、PCにVB6インストールしようかなあ。
久しぶりに触りたくなってきた。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<260KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef