1 :
引っ越しました :
02/02/16 16:29
2 :
デフォルトの名無しさん :02/02/16 16:31
CとDelphiとはどう違うんでしょうか?
じゃPro版はフリーソフトということで。
7 :
デフォルトの名無しさん :02/02/16 17:13
さぁ質問しなさい。期待あげ。
8 :
デフォルトの名無しさん :02/02/16 17:18
VBの仕事を無くしたいんですけど、
>VBの仕事を無くしたいんですけど、 VBの仕事請けなければいいのよ。 パンがないなら、ケーキを食べればー。
10 :
デフォルトの名無しさん :02/02/16 23:27
積み残し質問、何かあった?
11 :
デフォルトの名無しさん :02/02/17 01:33
VBは長島茂雄であるといえよう。
VBでコンパイル時eval作って
マッチングで、文字列を比較したいのだけど、 aaa > bb となってしまう。 文字数を無視して、bbの方を大きいとみなしたいのですが どうしたら良いでしょうか?
14 :
デフォルトの名無しさん :02/02/17 05:25
>>13 もしかしたらそういうことができる関数がVBにあるかもしれないけど、
aaaとbbの中の文字列を抜き出してASCIIコードで比較するようにすればいいのでは。
?"aaa" < "bb" True
>>14 >aaaとbbの中の文字列を抜き出して
aaaとbbを1文字ずつ抜き出してに訂正
気になったのでとりあえず作ってみる。 ところで"AA"と"AAA"ではどっちが大きくなるの? ここでは"AAA"の方を大きくしている。 同じときには"同じ"を返すようにしてる。 = 比較("aaa","bb") Function 比較(A As String, B As String) As String Dim c As Integer, i As Integer, Ok As Byte If A = B Then 比較 = "同じ": Exit Function If Len(A) > Len(B) Then c = Len(B): 比較 = B Else c = Len(A): 比較 = A End If Ok = 0 For i = 1 To c If Asc(Mid(A, i, 1)) <> Asc(Mid(B, i, 1)) Then If Asc(Mid(A, i, 1)) > Asc(Mid(B, i, 1)) Then 比較 = A Else 比較 = B End If Ok = 1 End If If Ok = 1 Then Exit For Next i End Function
>>17 >ここでは"AAA"の方を大きくしている。
"AA"の間違い。
なんでこんなに間違えるんだろ。
つーか今普通にif文で比較したら "bb"の方が大きいんですけど。 わしって踊らされてたんですか?
VB6でCGIやるとしたら基礎モデル教えて <P>タグ1行のHTML返ス例で
>>20 うん。それで調べてみたんです。
気になって気になって検索かけまくったわしって一体…
>>21 悪いことは言わない。止めときなさい。
代わりにPHP使うのがいいよ。
すみませんでした。文字数でなく、大文字小文字の違いでした。 "aaa" > "BBB" になってしまうのです。 その前にsortをしているのですが、ソートでは、 aaa BBB の順に並んでいるんですけど、 比較すると、aaaの方が大きくなってしまうので、 マッチングできないんです。。
ソートで使用している比較ルーチンを使用すればいいだけじゃないのかな。 まさかリストボックスでソートしているとか、そんな素人っぽいこと言わないよね。 単純に"aaa" < "BBB"にしたいなら、モジュールにOption Compare Textを書けばOK。 ただし、この方法はモジュール全体に適用されるので、StrComp関数を使用して 第三引数にvbTextCompareを指定した方が良い。 ただし、これをやってもソートで使用している比較ルーチンの結果と 同じになるとは限らないので注意すること。
26 :
デフォルトの名無しさん :02/02/17 15:12
>>21 標準出力を GetStdHandleして、WriteFileで文字列を送る。
sHeader = "Content-type: text/html" & vbCrLf
sHtml = "<HTML><HEAD><TITLE>test</TITLE></HEAD>" & vbCrLf & _
"<BODY><P>This is a test.<BR></BODY></HTML>" & vbCrLf
27 :
デフォルトの名無しさん :02/02/17 15:59
Private Sub RichTextBox1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 9 Then KeyCode = Asc(" ") End If End Sub TABキー押されたとき、RichtextBoxにTabコード(&H9)を入れたいのですが、、、、 無理やりこんなこと(スペースに置き換え)やってます。 なんか方法ないのでしょうか?
28 :
デフォルトの名無しさん :02/02/17 17:07
VB6でデータベースを作っています。 MSFlexGridで、アンドゥリドゥを製作したいのですが、どうしたら良いでしょうか。 配列に入れて・・等考えましたが、複雑になりますし、簡単にコントロールの内容を保存させたりする関数や方法は無いのでしょうか。 それと、ネットの画像をDLしてMSFlexGridのセルに表示したいのですが・・ 詳しい説明が載っている場所が無かったので、お願いします。
29 :
デフォルトの名無しさん :02/02/17 17:29
VBっていくらすんの? ワードとかエクセルに付いてるVBAとかでも 同じ事できるかなぁ? ちょっと勉強してみようかなと思っとる。
30 :
デフォルトの名無しさん :02/02/17 18:34
>>27 一旦バッファに取り込んで、tabを挿入して書き換える以外に方法は
ありません。 リッチではTabを挿入するのはあきらめましょう。
31 :
デフォルトの名無しさん :02/02/17 18:59
>>29 Delphiならタダです。断然そちらを強く推します。
32 :
デフォルトの名無しさん :02/02/17 19:31
>>28 VB6でデータベースの作成!! 凄い! 惚れたよ。
アンドゥ リドゥ がやりたいなら、[Commandパターン]を使うべし。
>>31 将来性を考慮したらC++BuilderやJBuilderの方がいいんでないかい。
>>27 RichTextBox以外TabStop=Trueのコントロールをフォーム上に置かなければ、
普通にTab入るはず。
>25 thanks you. 比較はif文でLOOPさせてやってたんですけど、 その方法でやってみます。
37 :
デフォルトの名無しさん :02/02/17 20:17
>>37 スマン、状態の保存はMementoパターンでした。
VBスレで指摘されるとは。なんか嬉しい。
42 :
デフォルトの名無しさん :02/02/17 21:41
textBoxコントロールを右クリックしたとき PopupMenuを表示したいのですが、Eventが巧く取れません。 2回クリックしない反応しません。 バグなのでしょうか? どなたかお願いします。 Private Sub txtTheme_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then '右クリックをチェック PopupMenu RightClick ’ポップアップメニュー表示 End If End Sub
今現在VBの勉強をしているのですが,良い参考書があれば教えてもらえないでしょうか?
44 :
デフォルトの名無しさん :02/02/17 22:44
Text1.textにno1という名前をつけました。 Text1.textの文字が0だった場合「正しいです」が表示されて、それ以外だった場合「違います」が表示されるのは出来ました。 If no1 = Chr(48) Then MsgBox ("正しいです") Else: MsgBox ("違います") End If Text1.textが0か1だった場合に「正しいです」が表示され、それ以外の場合に「違います」が表示されるようにするにはどうすればいいのでしょうか?
>>42 txtTheme.Enabled = False
txtTheme.Enabled = True
PopupMenu RightClick
>>43 VBの参考書なんてどーれも一緒
>>44 If no1 = "0" or no1 = "1" Then
MsgBox ("正しいです")
Else: MsgBox ("違います")
End If
46 :
デフォルトの名無しさん :02/02/17 22:56
48 :
デフォルトの名無しさん :02/02/17 23:12
Frameコントロールの上に配置したコントロールって、 LeftとかTopとかのプロパティが変わったりFrameの EnableをFalseにすると使用不可になったりするじゃないですか。 と言う訳で、Frameの上に配置したコントロールを取得したいのですが、 何かいい方法はないでしょうか?
>>48 こんなもんかねぇ。ヘルプも見てないで間違ってるかも。
For I = 0 To Form1.Controls.Count - 1
If Form1.Controls(I).Container Is Frame1 Then
' 処理
End If
Next
50 :
デフォルトの名無しさん :02/02/17 23:28
>マルチくん Controlsコレクションで列挙して、Containerプロパティをチェック。
51 :
デフォルトの名無しさん :02/02/17 23:29
>>49 ありがとうございます
Containerに添字は必要なかったのですね。
(0)とか入れて地獄に逝ってました。
ありがとうございます
52 :
デフォルトの名無しさん :02/02/17 23:30
>>49 合ってるけど、Eachを使うほうがモアベター。
53 :
デフォルトの名無しさん :02/02/17 23:30
54 :
デフォルトの名無しさん :02/02/17 23:37
すみません、Commandパターンってやっぱりよく分かりませんでした… 詳しい説明お願いします。
58 :
デフォルトの名無しさん :02/02/18 00:06
>>53 >VB初心者掲示板の投稿消しとけよ
V友の超初心者専用Q&A掲示板ではなく?こちらも同時期に回答ついてるぞ。
「VB初心者掲示板」がどこかは知らないけど、別の掲示板なら、
他所でもらった回答をまとめて、解決方法をレスしとけよ。
>>49
59 :
デフォルトの名無しさん :02/02/18 00:13
>>58 マルチ坊やに理屈は通じない。
こないだから平気でマルチし続けてる。
ごめんよ、誤爆だ。49じゃなく48でした。
他所でもらった回答をまとめて、解決方法をレスしとけよ。
>>48
>>60 ,37
Mementoパターンですか・・よく判りませんが見たり調べてみます。
遅い件は、多分DLしてファイルとして保存>開くのところが遅いんだと思いますが・・
ちょっとコードを変えてますが、こんな感じでやっています
Dim b() As Byte
b() = Inet.OpenURL("
http://www.dd.iij4u.or.jp/~cap/images/logo.gif ", 1)
Open "Date.jpg" For Binary Access Write As #1
Put #1, , b()
Close #1
On Error Resume Next
Picture1.Picture = LoadPicture("Date.jpg")
Set List1.CellPicture = Picture1.Picture
MSFlexGrid1.RowHeight(List1.Row) = Picture1.Height
もうちょっと簡単にすれば早くなると思うのですが・・・
64 :
デフォルトの名無しさん :02/02/18 01:06
>46 それはVBの本だと思うけど、VBAの本でなくて良いのですか?
>>64 ん、
>>43 はVBAのお勧め本を聞いてたの?
俺は、ヘルプ見ながら、試行錯誤でやっちゃうからお勧め本はない。
VBを1から勉強するに適した本はありますか?
VBのマニュアルはDelphiと違ってよく出来てると思うけどなぁ。 一通り読んでみそ。
>>66 MSDN見ながら実際やってみることだな
それだけでジュウだな
APIはVB用の解説WEBでさがすことだな
>>56 List1ってのが何かわからん。ListBox? でも、CellPictureなんてプロパティないしな。
なんでさ、ダウンロード と 表示を一つのサブルーチンでやっちゃうわけ?
そうやっちゃうから、どちらが遅いのかという質問に答えられないんだよ。
学生さん? ならば許す。
とりあえず、On Error Resume Next 以降を少し簡略化してみた。
Dim nRow As Long
Dim nCol As Long
nRow = 1
nCol = 1
With Me.MSFlexGrid1
.Row = nRow
.Col = nCol
Set .CellPicture = LoadPicture("logo.gif")
.ColWidth(1) = .CellPicture.Width
.RowHeight(1) = .CellPicture.Height
End With
俺の環境ではべつに遅くないけどな。
あう、寝ぼけた。
×
>>56 ↓
○
>>63 × .ColWidth(1) = .CellPicture.Width
× .RowHeight(1) = .CellPicture.Height
↓
○ .ColWidth(nCol) = .CellPicture.Width
○ .RowHeight(nRow) = .CellPicture.Height
72 :
デフォルトの名無しさん :02/02/18 02:10
はじめまして form1をロードして数秒後に(たとえば2秒後) form2を立ち上げる。 というようなことをしたいんですがどうすればいいんでしょうか。
74 :
デフォルトの名無しさん :02/02/18 02:18
>73 それはわかるんですが・・・。
>>74 んじゃ何がわからんのよ?
タイマーのIntervalを2000にして、
Private Sub Timer1_Timer()
Timer1.Enabled = False
Form2.Show
End Sub
とすりゃ完成やんけ。
76 :
デフォルトの名無しさん :02/02/18 02:30
>75 あっ!! ホントだ! 感謝感謝です。 ありがとございました。
part1から見ようと思ったのですが、何やら表示されないわけで・・・
78 :
デフォルトの名無しさん :02/02/18 03:57
79 :
デフォルトの名無しさん :02/02/18 05:00
ここでうまいことインデントをするにはどうすればいいの? if result=vbyes then msgbox"","" end if ↑たぶんあんまりあいてない・・・
っていうか全然あいてないわ・・・。一応スペース4コ入れたんだけど・・・。
81 :
デフォルトの名無しさん :02/02/18 05:10
>>79 こんな感じ?
if result=vbyes then
msgbox"",""
end if
それともこんな感じかな?
if result=vbyes then
msgbox"",""
end if
82 :
デフォルトの名無しさん :02/02/18 05:12
>>81 上は半角スペース4つの代わりに全角スペース2個
下は半角スペースの代わりに「 」を入れてみた
83 :
デフォルトの名無しさん :02/02/18 07:52
>>77 「そんなスレありません」と表示されても、
左下に倉庫のリンクがあるから、クリックしてみ!
>>70 すみません、List1というのはMSFlexGridです。改名してたのを忘れてました・・
この処理を10回〜50回程度連続でやらせるんです。そうするとかなり低速で・・
いちいち保存>開く等せずにちょくせつピクチャボックスに入れられれば、早くなると思うのですが、どうなんでしょう。
ちなみに10代で学生ですが・・
処理別にテストPG作ったところ、100回繰り返しNetの情報をDLするのが、17秒で、 それを保存し開いてMSFlexGridに設定するまでが7秒でした。こんな物なのかな・・
87 :
デフォルトの名無しさん :02/02/18 16:44
プログラムが起動されている状態で、さらに起動された場合、 「既に起動されています」のメッセージを出力して、 既に起動されているプログラムをActiveにする。 という事をしたいのですが、どうすればよいのでしょうか?
88 :
デフォルトの名無しさん :02/02/18 16:45
こんにちは。はじめまして。 VB6のソフトウェアをつくったのですけれど、MMCONTROLを使って、 音が入るソフトを作るとVISUALSTUDIOをインストールしていない パソコンでは動きません。これはどうやって解決したらいいんでしょうか?? ご指導お願いします。DLLをパックするような。。そんな気もするんですけど どのDLLかもわかりません。
89 :
デフォルトの名無しさん :02/02/18 17:35
>>66 ディストリビューションウィザードとか使いましょう。
こんなものが出てしまいました。何がいけなかったのでしょう? [OK]ボタンを押してもゾンビの様に何度も表示されます。 ---------------------------------------------------------- VB6 のページ違反です。 モジュール : KERNEL32.DLL、アドレス : 017f:bff7b9f5 Registers: EAX=1001cdbc CS=017f EIP=bff7b9f5 EFLGS=00010202 EBX=007ffe28 SS=0187 ESP=00700000 EBP=00700024 ECX=1001cdbc DS=0187 ESI=00000001 FS=495f EDX=00000001 ES=0187 EDI=8194055c GS=0000 Bytes at CS:EIP: 56 57 89 65 e8 75 04 33 c0 eb 54 85 c0 74 4b c7 Stack dump: 007ffe28 1001cdbc 00000001 007ffe28 1001cdbc 00701df8 bffc0ab0 bff79250 ffffffff 00701e08 bff7cef4 1001cdbc 00000001 1001e37d 1001cdbc 00701e30
>>91 せめてKERNEL32.DLLのソースコードをMSからもらってきてw
すいません質問です。 formにgifアニメを貼り付けるにはどうしたらいいんでしょうか。
>>93 gif -> aviコンバータをどこからか持ってきて、
Animationコンポに読ませる。
UNISYSの特許はまだ切れてないだろー。
>94 ありがとうございます。
人名を(テキストボックスに)入力してエクセルA2〜A101に出力するにはどうすればいいのですか? Private Sub TextBox1_Change() for i = 1 to 100 next i End Sub
相手にPingを打ってそれがかえってくるかっていう単純なモノを つくりたいんですがこれってどういうコマンドを使えばいいんですか?
スレ見れました。 教えてくれた人ありがとう!
99 :
デフォルトの名無しさん :02/02/18 23:33
>>87 App.PrevInstance
>>97 pingをリダイレクトしたファイルを読み、削除する。
わりと短く書ける。
同じことをAPIでやると、100行以上になる。
100 :
デフォルトの名無しさん :02/02/18 23:37
>>87 App.PrevInstance
AppActivate
>>96 CreateObjectでExcel起動しておくこと。
指定のブックの指定のシートのRangeプロパティかCellsプロパティ使って、
For文の中でA2〜A101を指定する。
後は各セルにデータを代入するだけ。
Webで調べてみ。現状からはこれ以上回答できんし。
>>97 Shell関数でDOS経由でPingコマンド飛ばすとか。
リダイレクトでファイルに書き込むようにしておいて、
そのファイルをVBで読み込む。
>>100 97に関してだけどそれだとNT系のやつだとダメっぽくない?
102 :
おれが100 :02/02/18 23:52
>>101 >97に関してだけどそれだとNT系のやつだとダメっぽくない?
どの辺が駄目なん?
以下、Win2000で実験。
Dim file As String
Dim sCommand As String
file = """C:\Documents and Settings\USERNAME\デスクトップ\ping.txt"""
sCommand = Environ("COMSPEC") & " /c ping 127.0.0.1 > " & file
Debug.Print sCommand
Shell sCommand
ファイルのリダイレクトまでは問題ない。
103 :
デフォルトの名無しさん :02/02/18 23:54
なにか、知らない事が多いと思いながら見てたら、 VBとVBA混同してた。。逝ってきます。
ちなみに、icmp.dllをどつき回す。 定数の定義を入れると、300行ぐらいになる。
ping vb でGoogleに問えば、すーぐ出来合いのものが 出てくると思うけどなぁ… 質問の前にググル
ラーニングエディションで、 指定したURLのHTMLを出力できないのか? 本見たら、 「OpenURLメソッド使え。」と書いてあり、 使い方・VBEメニューから・・・ と書いてあるんだが、そのVBEメニューが見つからん。 というわけで、よろしくおねがいします。
107 :
デフォルトの名無しさん :02/02/19 05:32
vbでGIF画像をjpgに変換できるDLLってあります? できればフリーのがいいです
>>107 君みたいのは
PerlCGIスクリプトあさってる厨房と同じ
まずJPEGの構造を学べ
BMPをJPEGにできてからQしなさい
109 :
デフォルトの名無しさん :02/02/19 05:40
TransG32.dllでやっちゃってますが
110 :
デフォルトの名無しさん :02/02/19 07:01
>>106 strHtml = Inet1.OpenURL (strURL)
ヘルプの最新版がMSサイトにあるし、Googleもある。
88です。だれもわからないですかね。。 それとも説明文がわからないですか? お願いします。どうしても動かないんです。
>>111 89は88への誤爆と思われ。
つまりあんたへの回答。
#なんで厨房は口の聞き方を知らんのか… >それは厨房だから
>>112 指摘ありがとうございます。89さんのこと気づいてませんでした。
口の聞き方知らないって。。これも誤爆ですか?
俺、そんなおかしな日本語つかったかな?
>>89 おそばずながらありがとうございます。
なんとかわかりました。これで後日友達のPCでためしてみます。
>>102 すまん・・・コマンドプロンプトと勘違いしてた・・・
逝ってきます・・・
リストボックスに1、2、3、4の数字が入ってます。 もしリストボックスの数字が1だった場合に次の処理をさせたいのですが、 If List1.List = 1 then とやっても出来ません。 なんとやればいいのでしょうか?
>>115 それじゃList1.Listに1を入れてるってだけじゃない?
ついでにThen以降の処理が間違ってる可能性もあるしな
>>116 Then以降の処理も書いてあるのですが、実行すると
「引数は省略できません」
とでてしまうのです
>99 >100 解決できました! どうもありがとうございました!
>>115 Private Sub List1_Click()
Select Case List1.ListIndex
Case 0
MsgBox "1"
Case 0
MsgBox "2"
Case 0
MsgBox "3"
Case 0
MsgBox "4"
End Select
End Sub
こういう事?
>>117 エラーメッセージが親切に「引数は省略できない」っていってるんだから
省略せずにかけばいいんじゃない?
VBでネットワーク関係のモノ作りたいんだけど VBのネットワーク関係でお勧めの書籍ありませんか? なければVBのネットワーク関係を解説してるようなサイトでもOKなんですが
122 :
デフォルトの名無しさん :02/02/19 13:01
>>115 >>117 そのリストボックス、コントロール配列になってない?
プロパティのIndexを見てみ。
引数(=Index)は省略できないでしょ。
PCIカードのデバックを行おうと思って、 ガジマルさんのPCIDEBUG.dllを見つけたのですが、 PCIデバイスを検索する関数(pciFindPciDevice)の戻り値がビットで返ってくるようです。 <戻り値> 0x86:デバイスが存在しない ビット15〜8 予約 ビット31〜24 PCIバス番号(正常終了時) ビット23〜19 デバイス番号(正常終了時) どうやってビット31-24のPCIバス番号を取り出すのでしょうか? ヒントだけでも教えてください。
すまん、よく読んでなかった。アホな事書いた
125 :
デフォルトの名無しさん :02/02/19 14:02
ダイアログボックスで、×じるしのとか、!マークのがでてきて 「間違ってます」と警告する命令って、どうすればよいのでしょうか?
126 :
デフォルトの名無しさん :02/02/19 14:17
>>125 MSDNライブラリでMsgBox関数でも調べてみればいいんじゃない。
>>110 あのメソッドってラーニングエディションでも使えるの?
128 :
デフォルトの名無しさん :02/02/19 16:31
たとえば If "アホ" = "バカ" Then〜 ってやるとどういう比較をするんでしょうか?
129 :
デフォルトの名無しさん :02/02/19 16:37
ListView でソートした後、見出し列名の横に△または▽を 表示させるのって、なんか設定あるのでしょうか?
130 :
デフォルトの名無しさん :02/02/19 17:08
>>115 ×If List1.List = 1 then
○If List1.List(List1.ListIndex) then
要するにListは配列って事だ。
Textプロパティと一緒にしてただろ。
>>121 「はじめてのVisualBasic6.0 インターネットプログラミング」北山洋幸著
「VisualBasic6.0 300の技 ネットワーク+データベース編」
松田 猛・小高 郁 著
2つとも技術評論社より。
>>128 「アホ」と「バカ」は同じ文字列かを判定する。
マジレス、マジレス、コワイヨーーー!!
OptionBottonを同じフレーム内に2個つけて、それぞれに「あり」、「なし」と書きました。 実行ボタンを押したとき「あり」にチェックがついてる場合、メッセージボックスで「ホントにあるんですか!?」、「なし」の場合メッセージボックスで「正直ですね」とやりたいのです。 Private Sub Command1_Click() If ○○○○ then MsgBox("ホントですか!?") Else: MsgBox("正直ですね") End If ○○○○のところをどう入力すればいいのか教えてください。
134 :
デフォルトの名無しさん :02/02/19 18:28
135 :
デフォルトの名無しさん :02/02/19 18:31
>>128 >If "アホ" = "バカ" Then〜
>ってやるとどういう比較をするんでしょうか?
文字コードで比較する。
だから、
if "あ" > "え" then
みたいな比較も可能だったりする。
できました! どうもです。
137 :
デフォルトの名無しさん :02/02/19 20:04
質問させて下さい。 AccessとVBを使ってADOを勉強しています。 SQLでRecordsetを取得して、セルを参照する時に 「Recordset!会社名」とかやりますが ↑このカギ括弧の中身自体を変数に格納したいのですが、 どう指定したら良いのかさっぱりわかりません。 うーん。なにぶん初心者なので、正確な言い方が分からないですが、 よろしくお願いします。
138 :
デフォルトの名無しさん :02/02/19 20:16
フォーム(大)から、Borderstyleを「固定ダイアログ」にしたフォーム(小)を 開いているんだけど、小さい方を無視して大きい方のボタンとかクリックすると 問題なくイベントが起こりますよね。 小さい方が生きている間は他のフォームのイベントが起こらない様には 出来ないもんですか。 もしくは、ウインドウの陰に隠れた小さい方が、生きているかどうかチェックする するにはどうしたら良いですか。
>138 Show vbModal
140 :
デフォルトの名無しさん :02/02/19 22:23
>>137 AdoRes.Fields(変数).Value
Valueはデフォルトプロパティなんで省略可
141 :
デフォルトの名無しさん :02/02/19 23:05
>>123 2進数表示と考え方は同じ。
If lRet And (2 ^ n) Then ' n番目のビットが立ってる
ビットシフトは、2で割ったり、かけたりするだけ。なので、
デバイス番号(19〜23bit)は、(lRet And &HF80000) / 2 ^ 19
PCIバス番号(24〜31bit)の場合は、オーバーフローに注意。
142 :
デフォルトの名無しさん :02/02/19 23:14
ディストリビューション ウィザードを使って 配布用のプログラムを作りました。 windows98ではsetupが完了したのに windows xpではエラーが出ます。 どうすればxp用のプログラムが作れますか
143 :
デフォルトの名無しさん :02/02/19 23:16
>142 FAQ。MSに公式情報がある。
>143 さっそくありがとうございます。 見てきましたがVB5のことしかなかったです。 VB6を使ってるんですが、何か方法ありませんか?
>>112 フォローありがとうございます。
ずばりその通りです。
88と66を間違えるなんて・・・逝ってきます。
>>113 88さんへ。88と66を間違えてしまってごめんよ。
>口の聞き方知らないって。。これも誤爆ですか?
誤爆ではないと思われ。
>俺、そんなおかしな日本語つかったかな?
2chの場合、おかしな言葉や煽りをわざとやることはあるが、
そういう意図なしでやってしまう素の「間違った」言葉使いだから、
普通に注意されただけでしょう、2ch流に。
>>88 です。だれもわからないですかね。。
>>それとも説明文がわからないですか?
この文章は、適切に言い換えれば、
「88です。説明文がわかりにくかったでしょうか?(ですか?)」
となるでしょう。
あなたの113の文章を普通に、わるいは悪く解釈すれば、
「(君らの知識じゃ)わからないの?
それとも俺の説明が(君らの頭じゃ)わからなかったの?」
という文章ですから。
>>145 ださっ。
>あなたの113の文章を普通に、わるいは悪く解釈すれば、
「わるいは」じゃなくて「あるいは」
つーか、マジレスかっこ悪い(_ _);
147 :
デフォルトの名無しさん :02/02/20 01:24
>142 なんてエラー?
AIに関するスレはどこでしょうか・・・
>>148 AI と漠然と言われても…目的は何?
VBかつAIなスレは多分無い
>>149 えーと・・・ロボットみたいなのです・・・
>150 えーと、まずここが Visual Basic の質問スレであることは認識している?
>>151 ごめんなさい〜、どれに属されるのかわからなくて・・・
ごめんなさい・・・
154 :
デフォルトの名無しさん :02/02/20 08:45
VBでexeファイルを作るとき、自作アイコンを使うにはどうすればいいのでしょうか。
155 :
デフォルトの名無しさん :02/02/20 10:17
>>154 フォームのIconプロパティでファイルを指定。
アイコンはアイコンエディタで作ること。
それは知ってます。
157 :
デフォルトの名無しさん :02/02/20 10:34
FSOでファイル操作しているとき、ファイル末尾以外に場所に アスキーデータを書き込む方法はありますか
156は私ではありませんが、それは大丈夫だと思います。 ビジュアルスタディオのエディタで作りました。 ファイルを指定というのは、全部のフォームに一つずつ指定していかなければならないのですか? で、exeファイルのアイコンは、どこでファイルを指定するのでしょう。 そのままファイルメニューから[.exeの作成」を実行すると アイコンはフォームのアイコンと同じ物がデフォルトで使われますよね。 これを変えたいんです。
159 :
デフォルトの名無しさん :02/02/20 11:09
>>158 exe作成のプロパティでアイコン指定するとこあるからそこで変えれ。
>>157 全部配列に読み込んで好きに操作して上書きしたらいかんの?
俺FSO使ってないんだけど。
>>159 FSOだと末尾にしか入れられなそうなので、その方法でやることにしました。
ありがとうございます
すいません。もうひとつ質問です。 FSOでファイルサイズの取得はどうすればいいのでしょうか なんかフォルダ全体のサイズしか例が見つかりませんでした。
FileオブジェクトにSizeプロパティとかない?
FileLenでもいいやん。
164 :
デフォルトの名無しさん :02/02/20 12:52
VBのNew演算子はヒープに領域をとるんでしょうか? Newで自作クラスのコレクションを作る場合に、オブジェクトを大量に (たとえば一万個とか)作っちゃっても大丈夫ですか? 一見うまく動いてるように見えるけど、実は動作が不安定になっているのだ、とか・・・。
スタックなわけないわな。
167 :
デフォルトの名無しさん :02/02/20 13:23
テキストボックスで適当な文字が左から何ドット上から何ドットの位置にあるかを 取得するにはどうしたら良いでしょうか。 行毎に分割して、InStrで検索してTextWidthでその文字までの幅で左から何ドット、 何行目かで上から何ドットって感じには算出できそうですが、 もっとスマートな方法あるでしょうか?
>>164 俺が昔試しでピクチャボックス1000個作った時は落ちなかった。(Win2000,256MB)
VB側かOSが対処してくれてるっぽい。
でも、やめれ。
>>167 EM_POSFROMCHARあたりで出来るかも。(未確認)
>>166 俺も、んなわけないと思ったんですが、俺の上司がVBには64Kの壁があるから
やめろって言うんですよ・・・。
VB2の頃はそういわれていた気がする
>>164 ,170
クラスや関連Objectがリークしてりゃ、まずいだろうけど。
生成と解放を確実にすれば、問題ないんじゃない?
>VBには64Kの壁が
Win95/98のTextboxの最大データ量?
もしくは、コード中の1プロシージャの最大サイズ?
# 他にあったっけ。
…どちらも致命的になったことはないけど。
なんか勘違いしてねぇ?
その上司。
>>164 補足。
Objectが1万個も必要なのは、動く動かない以前に設計腐ってるからやめれ。(w
>>159 exeファイルのアイコンは変えられました!
ところで各フォームのタイトルバーの左端に現れるちっちゃいアイコンは、
やはり一つずつプロパティを開いて指定しなくてはならないんでしょうか。
フォームが多い場合大変ですよね。
1度にまとめて同じアイコンを表示する設定とかって、無いのでしょうか…
>>164 補足。
Objectが1万個も必要なのは、動く動かない以前に設計腐ってるからやめれ。(w
>>175 だって、永続化オブジェクトのレコードセットを、VBのオブジェクトのコレクションに変換
してるんだもん。
スクロールカーソルのウィンドウみたいな概念を実装するのめんどいじゃん。
Max一万件程度ってわかってるんだし(通常は数十〜百程度)。
>>171-172 サンクス。
問題は無いよ(多分)って上司に伝えます。
説得できればいいんだけどね。
>>174 複数のフォームで同じアイコン使いたい時は
例えば、各フォームロード時にMe.Icon = frmMain.Iconとコードで設定し、
frmMainのアイコンのみ手作業で設定する。
全て手作業で設定するよか楽。特に違うアイコン使いたくなった場合にはね。
また、Me.Icon = LoadPicture(App.Path & "\Icon.ico")というように
パス指定で実行時に読み込むようにすれば手作業での設定はなくなり、
アイコン変更したい時もアイコンファイルを上書きするだけで再コンパイルも不要になる。
ただ、指定したパスにファイルが無ければ当然エラーになるので注意。
関係ないけどApp.Pathってルートにアプリがあるときって "C:\"じゃなく"C:"しか返さない。この仕様鬱陶しい。 何のためなんだ?
>>178 おー!ありがとうございます! 早速やってみますね
コントロールをドラッグしてドロップしたときに、ドロップ先のコントロールを 知るにはどうしたら良いのでしょう? DragDrop イベントの引数内にドロップ先の X, Y は渡ってくるみたい ですが。
>>179 "C:"じゃなく"C:\"じゃない?確かに鬱陶しい。
あれ? 何か DragDrop イベントを勘違いしているような気がしてきた。 見直してみます。失礼。
>>179 昔からじゃん。VBだけに限らないし、DOSのころからそうだよ。
185 :
デフォルトの名無しさん :02/02/20 19:21
>>167 GetCaretPosかなんかで座標は得られる。
でもちょっとわるれられてるAPIだったりする。
VB.netでは構造化例外処理をサポート Sub SEH() Try Open "TESTFILE" For Output As #1 Write #1, CustomerInformation Catch Kill "TESTFILE" Finally Close #1 End try End Sub
VB.netでは構造化例外処理をサポート Sub SEH() Try Open "TESTFILE" For Output As #1 Write #1, CustomerInformation Catch Kill "TESTFILE" Finally Close #1 End try End Sub
>147さん path or file not found というエラーなんだけど パスが通らないみたいです。 どうしたらいいですか。
189 :
デフォルトの名無しさん :02/02/20 21:58
>>179 逆に\がついてるほうが鬱陶しい。削るのめんどくさい。
190 :
デフォルトの名無しさん :02/02/20 23:12
>>167 API の SendMessage(Text1.hWnd, &HD6&, lngPos, 0&) の返り値
上位2バイトに Y座標、下位2バイトに X座標が入る。ただし、
途中の改行コードの分だけ位置をずらして指定する必要があるかな。
ほかには非表示のPictureBoxを使う手もあるけど、こっちの場合は、
自動折り返しをコードでやることになるから、手間は同じくらいかも。
だけど、目的がわからない。マウスやキャレットと無関係に座標値が
必要になることってあるかな。グラフィック・メソッド使えないのに。
191 :
デフォルトの名無しさん :02/02/20 23:16
>>170 たしかにいくつか64KBの制限はあるけど、実用上問題はない。
データサイズの合計じゃなくて、ポインタの合計だったりするから。
もしかしたら、QuickBASICと間違ってるとか?
ま、各言語、それぞれ一長一短があるので、使い分ければいいだけ。
193 :
デフォルトの名無しさん :02/02/21 01:53
ディレクトリのフルパス渡して、そのディレクトリが存在しなかったら、 存在するように勝手にサブディレクトリ作成していってくれる関数を作るのがめんどくさいので、 誰か作ってください。
>>193 function make(dirstr as string) as long
if dir(dirstr,vbdirectory)="" then mkdir dirstr
end function
関数作成依頼スレなんかあったら便利だな(ゲラ
OpenURLメソッドってラーニングエディションでは使えないよね?
198 :
デフォルトの名無しさん :02/02/21 04:01
199 :
デフォルトの名無しさん :02/02/21 07:44
焼いてもらったVBでソフト開発して業務用で売っても、ちゃんと成立しますか? 開発したソフトに、ライセンスとかシリアルって記載されるのかな?
>>199 そういう噂はあるが、実際の所は記載されてないような気がする。
っつーか、売るんなら買え、ばか者。
質問です。分かりづらかったらゴメンなさい。 複数のモジュールに Open って関数を用意する。 指定されたモジュールファイル名(mdl1、mdl2等)をオブジェクト変数(module)のようなものに代入して、 Set module = mdl1 module.Open module.Write ・・・・ のようにやりたいのですが、実際可能でしょうか? それとも、 if mdlFileName = mdl1 then mdl1.Open Elseif mdlFileName = mdl2 then mdl2.Open End if こんな感じで一つ一つ書くべきなのでしょうか。よろしくお願いします。
>>194 それでは、1レベルしか掘ってくれないのでは?
パスを分解して、1レベルづつ掘ってくのは確かにめんどい。
会社にソースがあるから午後には出せるよ。
>>201 モジュールは無理なんでない?
やるならクラスにすれ。
inetコントロールよりwinsockコントロールで自力実装したほうが使いやすい。
207 :
デフォルトの名無しさん :02/02/21 11:28
VB6 でオブジェクト変数の参照が null かどうかのチェックって IsNull(オブジェクト変数名) じゃいけないんだっけ!? 常に False が返ってきちゃうんですけど。
>207 IsNullはバリアント変数用。 オブジェクトのチェックは俺はTypeName使ってる。
>>208 あ、そうなんだっけ?最近 C# やってたせいで悩んだ^^;
= Null から IsEmpty, IsNull...片っ端から試しちゃったよ。
そういえば昔は On Error とかで対処してたんだった。
TypeName っていう手もあるのね。
ありがとう〜〜。
210 :
デフォルトの名無しさん :02/02/21 12:16
IsNothing ってのも
>210 あったらいいね。
>>207 If obj Is Nothing Then
>>208 単に型チェックならTypeOfの方がすきだな。
VBの子ウィンドウを閉じるショートカット知ってる人いる?
子ウインドウ? CTRL+F4で閉じれる奴のことかな?
そう、それ!ありがとう!
216 :
デフォルトの名無しさん :02/02/21 13:23
PictureBoxの背景色を透明にすることは できないのでしょうか?
>>193 とりゃ、バグは自分で取ってね。
Public Function MakeDirectories(sPath As String) As Long
'深いパスを指定されたとき、そこまでのディレクトリをすべて作成する
Dim sDirectories() As String
Dim sMakePath As String
Dim sDir As String
Dim n As Long
Dim isUnc As Boolean
If (Left$(sPath, 2) = "\\") Then
isUnc = True
Else
isUnc = False
End If
sDirectories = Split(sPath, "\", -1, vbBinaryCompare)
sMakePath = ""
For n = LBound(sDirectories) To UBound(sDirectories)
'Debug.Print "sDirectories(" & n & ")" & sDirectories(n)
sMakePath = sMakePath & sDirectories(n) & "\"
If ((isUnc = True) And (n <= LBound(sDirectories) + 3)) Then
'UNCの時で\\oda1\c\までの時は何もしない(ディレクトリではないから)
Else
sDir = Dir(sMakePath, vbDirectory)
If sDir = "" Then
'ディレクトリが存在しなかったら作る
Call MkDir(sMakePath)
End If
End If
Next
End Function
しまった、コンピュータ名が。 戻り値も無いし。
>217
おお、素敵。
>>216 やや意味不明だが基本的に無理。
220 :
デフォルトの名無しさん :02/02/21 15:19
>>197 このスレのLearning版ユーザは少ないので、機能制限とかは自分で調べること。
Inetコントロールがなくても、その実体はIE(4.0以降)のDLLそのものだから、
APIとして呼び出せば、Web上のファイルをダウンロードすることは可能。
InternetOpen, InternetOpenUrl, InternetReadFile, InternetCloseHandle
>>217 正直半分ネタのつもりだったのでマジで書いてもらえるとは思わなかった。
使わせてもらう。感謝。
>>198 漏れもそう思ったけど、使えるようなことをちょこっと聞いたから。
>>206 ありがとう。
参考にしたいんで、もう少し詳しく教えてください。
MSDNを開きつつ勉強しますんで。
224 :
デフォルトの名無しさん :02/02/21 19:54
>>193 MakeSureDirectoryExists()ってAPIがあるぞ。
225 :
デフォルトの名無しさん :02/02/21 19:55
ちがった。 MakeSureDirectoryPathExists()だ。たぶん。
>>143 さん
>>196 さん
ありがとうございました。
そのページはわかったのですが
具体的に何をしていいのかさっぱりわかりません。
半角英語の名前で保存すればいいのですか?
227 :
デフォルトの名無しさん :02/02/21 21:21
Dim A As Integer Dim B As Integer A = 1: B = 0 Do While A < 5 B = B + A A = A + 1 Loop これを実行するとBが10になるなりますが 自分が何回考えてもBが4になってしまいます。 考え方のヒントだけでも頂けないでしょうか。 宜しくお願いします。
>>196 >>147 >>昔からじゃん。VBだけに限らないし、DOSのころからそうだよ。
>VB以外ってのが何かわからんが、他の言語でApp.Pathそのものがあるの?
>あるいは、その元になっているAPIとかの仕様なんか?
DOSプロンプト開いてルートとサブフォルダで
cdコマンド叩いてみ。DOSの頃からって意味がわかるぞ。
俺も192には同意するが、
こう言うのを普通と思ってる俺みたいのはもう古い人間なんだろうな。
>>227 なにか俺は勘違いしてるのか?
どう考えてもBは4にならんぞ・・・
Aは4だろうけど・・・
>>229 すいません・・・もう3時間位考えてるけど、
Aが5でBが4になります。
>>230 あ、昨日覚えました。早速やってみますm(_ _)m
わかりましたー!すっきりしました。 どうもありがとうございますm(_ _)m
234 :
パソコン初心者 :02/02/22 01:33
がいしゅつだったらごめんなさい ソースの途中でフォームを閉じるのにunload meを 使っているのですがフォームが閉じたあともその下のソースを読み続けたあげく そのあと フォームロードを読みに行ってしまいます いったいどうしたら良いのでしょう どなたか教えてくださいませ よろしくお願いします win2000 VB6の機能の少ないほうです ソース フォーム_ロード なんとか かんとか if 何とかだったら then select case i case 0 tatakau case 1 bougyo cade 2 item case 3 nigeru end select endif sub nigeru unload me 'ここで止めたい end sub
235 :
デフォルトの名無しさん :02/02/22 02:19
>>234 Form_Unloadプロシージャに何か書いてる?
それでコントロールや変数を参照したら、再Loadされるよ。
>>234 いま見てみたけど、
Case 3のnigeruの下に
Exit Subを入れて[フォーム_ロード]から抜け出せばいいんじゃないかな?
>>235 form_unloadプロシージャは何も書いていないはずです たぶん・・・
>>236 exit subはためしたのですがだめでした。
今手元にソースがないので突っ込んだ話になると返事ができないとおもいます
朝になればソース見れるのですが・・ よろしくお願いします
238 :
デフォルトの名無しさん :02/02/22 02:37
vc++でコンソールプログラミング する方法を教えてください。 googleでVC++でコンソールプログラミング ってやってもヒットしないで。
239 :
デフォルトの名無しさん :02/02/22 02:47
>>237 それじゃ、Timerプロシージャか、標準モジュールから
参照してるとかは?
ブレークポイント設定して、ステップ実行すればわかるけど。
>>238 ここはVCじゃなくて、VBスレ。
作成時に、Win32 Console Application を選択するだけだと思うけど。
>204 ありがとうございます(^-^
>>237 Exit Subを追加した上で
Unload Me を Set フォームのオブジェクト名 = Nothing
に変えてみたらどうなる?
>235>236さん おはようございます 小分けにしていたソースを一つのプロシージャにまとめたら きちんと閉じることができました ご意見ありがとうございました ソースはこんな感じにしました if 何とかだったら then select case i case 0 tatakau case 1 bougyo cade 2 item case 3 if j=1 then 逃げれた unload me else 逃げれない endif end select endif
>>234 >>237 nigeruの処理がUnload Meだけなら
case 3
Unload Me
Exit Sub
end select
でなければ
case 3
nigeru
Exit Sub
end select
でOKだと思う。
てゆーかフォームの呼び出し前に判断するのがフツーだと思うが?
>てゆーかフォームの呼び出し前に判断するのがフツーだと思うが? RPGの戦闘シーンのフォームの中での処理なので無理なんですぅ
245 :
デフォルトの名無しさん :02/02/22 13:24
sndPlaySoundで同時に2つのWAVサウンドを流す方法って どうすればいいのですか?
>>245 無い。
どうしても、っつーなら自前で合成するかDirectX使え。
247 :
デフォルトの名無しさん :02/02/22 15:07
全角のダブルクォーテーションを表示するにはどうしたら良いのでしょうか? Private Sub Form_Load() Debug.Print "”" End Sub こうしたいのですが補正されてしまいます。 Private Sub Form_Load() Debug.Print """" End Sub 全角のダブルクォーテーションを表示させることはできないのでしょうか。
>>141 ありがとうございました。シフトビットの関数を見つけたので
アプリにはそれを組み込みます。
>>247 おお、ほんとだね。初めて知ったよ。
じゃあこれで。
Debug.Print Chr$(&H8168)'←”のユニコード
>249 おお!できました。 Chr関数を使えば良かったのですね。 ありがとうございました。
>246 了解いたしました
252 :
デフォルトの名無しさん :02/02/22 15:45
プログラムを終了して(したように見せて)からメッセージボックスを表示したいのですが、 どのようにしたら良いのでしょうか?
>>252 フォームHideしてからメッセージボックス出すのはだめか?
254 :
デフォルトの名無しさん :02/02/22 15:47
『インターネットトランスファコントロール』で 「ダイヤルアップのみ」でサーバと接続させたいのに 接続に失敗したときや、CLOSEメソッドで接続を閉じたあと、 LANで勝手に接続しに行ってしまうのは何故ですかWHY? 誰か教えて下さい!!
255 :
デフォルトの名無しさん :02/02/22 15:51
254です。 間違えちゃいました(;´▽`A`` ×CLOSEメソッド→○CANCELメソッドです。
>>252 試してみます。
234あたりも参考にしてみます。
できました!ありがとうございます!
VBって どれでプログラムを書けばいいの? どれをクリックしてもインストールやら dllやらでどれに書いたらいいのか わからない…
標準EXE。
>258 果てしなく意味不明
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | つよい電波がでています | |____________| / < / ビビビ \_\_\ _ \ \ \ /||__|∧ __|___ (O´∀`) | |::::::::::::::::::::::| (つ つ/ |::::::::::::::::::::::| / ̄ ̄ ̄≡ .|;;;;;;;;;;;;;;;;;;;;;:| | |::::::::::::::::::::::|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ナマエどうりの厨房なんですごめんなさい!! 標準EXEってなんだろう…
とりあえず入門書読んでくれ。頼む。
>>262 VBとか言う以前にプログラム作った事あるの?
267 :
デフォルトの名無しさん :02/02/22 17:49
入門書を読んで、とりあえず作ってみたんですが Private Sub Command1_Click() '変数の宣言 Dim Labeltext As Stringt Dim FirstTime As Integer Labeltext = Label1.Caption 'label1の文字の取得 If FirstTime <> 0 Then Labeltext = "" Label1.Caption = Labeltext & Text1.Text Text1.Text = "" FirstTime = 0 Else Label1.Caption = Labeltext & Text1.Text Text1.Text = "" End If End Sub テキストボックスに文字をいれ、コマンド1ボタンを押すと、ラベル1に文字が出力されます。 その時にテキストボックスを空にします。 問題は、ラベル1には最初に「テキストボックスに文字を入力してください」との注意書きを入れてあることです。 ここでは「firstTime」変数を使って、最初にコマンド1をクリックした時に、ラベル内容をクリアして(注意書きを消して)、 その時にFirstTimeに0を代入、以後はラベルをクリアしないように作ったつもりなんですが、うまく動いてくれません。 (注意書きがクリアされずに、その後ろに文章が追加されていきます) 別のラベルを作って、そこに注意書きを書けば解決するんですが、変数とIF構文の練習をしようと思ったので・・・・
う、インデントが省略されてしまった・・・・ Private Sub Command1_Click() '変数の宣言 Dim Labeltext As Stringt Dim FirstTime As Integer Labeltext = Label1.Caption 'label1の文字の取得 If FirstTime <> 0 Then Labeltext = "" Label1.Caption = Labeltext & Text1.Text Text1.Text = "" FirstTime = 0 Else Label1.Caption = Labeltext & Text1.Text Text1.Text = "" End If End Sub
>>267 FirstTimeをグローバル変数にして、
Form_Loadで FirstTime=1と書いておく。
>>269 それじゃツマランので(藁
Private Sub Command1_Click()
'変数の宣言
Dim Labeltext As String
Labeltext = Label1.Caption 'label1の文字の取得
If Label1.Tag <> "0" Then
Label1.Caption = Label1.Caption & Text1.Text
Text1.Text = ""
Else
Label1.Caption = Text1.Text
Text1.Text = ""
Label1.Tag = "1"
End If
End Sub
>>270 いらん変数消すの忘れた(鬱
Private Sub Command1_Click()
If Label1.Tag <> "0" Then
Label1.Caption = Label1.Caption & Text1.Text
Text1.Text = ""
Else
Label1.Caption = Text1.Text
Text1.Text = ""
Label1.Tag = "1"
End If
End Sub
でも変数の練習にはならんな。
Label1のTagプロパティに 0 入れてね。
アクティブなウインドウに張り付くようなアプリを作りたいんですが、 どのようにアクティブなウインドの位置やサイズは取得するんでしょうか? タイマーで位置をチェックして、移動させようとしているんですが、 他に方法があるんでしょうか?
>>270 tagプロパティは今まで知らなかったんですが、これ、かなり便利ですね〜。
いろんなことに使えそうです。
>>269 Private Sub Form_Load()
Dim FirstTime As Integer
FirstTime = 1
End Sub
とりあえず、form内に上記の部分を追加してみたんですが、何故かうまく動かず、
labelの中身が毎回クリアしてしまいます。
どうもIF文の上の方だけが毎回実行されて、FirstTimeに0が代入されているはずなのに、
下のelse文以降に逃げてくれません。そのせいで、コマンドボタンをクリックするたびに、
label内が毎回クリアされてしまいます。
非常に初歩的な事を間違っているような気がするんですが、いったい。。。
275 :
デフォルトの名無しさん :02/02/22 20:24
>>267 どうやってフラグを0にしてるのさ。
あと俺はstatic使うかも。
Private Sub Command1_Click()
static flg as long
If Label1.Tag <> "0" Then
Label1.Caption = Label1.Caption & Text1.Text
Text1.Text = ""
flg=0
Else
Label1.Caption = Text1.Text
Text1.Text = ""
Label1.Tag = "1"
flg=1
End If
End Sub
2chのdatファイル名とかにも使われてる、 えーと、たとえばこのスレだと1013844542の部分ですね。 この時間を算出したいんですけど、どうやって求めればいいんでしょうか。
もし変数がある文字列をもっていたら→処理 というのを作りたいんですが IF 変数 = 0 Then 処理 みたいなやつだと思うんですが、”変数がある文字列をもっていたら”って どうやって書くのでしょうか
>>277 そのレベルで一週間では情けないぞ!
もう少し真面目にやれ。
どうもありがとうございます IF変数="ある文字列" then ここをイコールでむすんでしまっても大丈夫なのでしょうか 変数がaaaaaccccddだとして ある文字列がddだとしますと これでも自分の条件にはあってるわけでして完全にイコールでは ないような気がするんですが・・ 正確にはVB歴1週間目です (^^;;
なんとか歴○週間とかいうやつはプログラム歴も○週間 VB歴なんていわずにプログラム歴といえゴルァ
う・・説明の仕方が下手でした。ごめんなさい 変数 = abcdddeeとして IF 変数(abcdddee) = ddd Then 処理 ↑という処理が可能なのでしょうか。 自分がいいたかったのは”変数がある文字列を所持していたら”という事 らしいです<(_ _)>
if instr(変数, "ddd") > 0 then 文字列は""で囲まなきゃだめだよ。 説明書ぐらいは一通り読んでね。
284 :
デフォルトの名無しさん :02/02/22 23:11
>>234 おかしいな。234のまま書いてみたけど、
IDEでもEXEでも、ちゃんと終了した。
後ろに別のコードがあったんじゃないかな。
>>254 自前でダイヤルアップしてるなら、自己責任。
Winに頼ってるなら、そういう仕様。
>>258 VC++のほうがもっと迷うぞ(笑)。
>>277 「持っていたら」は曖昧なので、「含まれていたら」と書かないと。
If InStr(strHoge, "dd") > 0 then
皆様ありがとうございました! m(__)m
286 :
ヴイヴイくん :02/02/22 23:48
WinSockコントロール(SP5)を内在コントロールとして VB6製のコントロールを作成しようとしたら WinSockのCloseイベントはActiveXインターフェイスウイザードで 認識されていない MSDNによれば必ずしもすべてのクラスが公開できるわけではないとある (機能的に不適なものとか、それはわかるが…) Closeイベントはなぜなのか? Closeメソッドはウイザードに出るが、実際このウイザードで公開できない ようである、これはウイザードのバグ? 手動でコーディングすればできるだろうか? みなさんもやってみて
287 :
デフォルトの名無しさん :02/02/22 23:48
VB.NET アマゾン.comで買おうと思ったんだけど、US内しか配送してくれないんだよね。 いつになったら日本国内でVB.NET買えるの? もう待ちきれないから6買っちゃうよ?
買っちゃえ。
なんで.NETでC#やらずにVBなの?
290 :
デフォルトの名無しさん :02/02/23 00:20
QBASIC->HSP->ときたから。
VBじゃなくてC#を選ぶ理由と同じ。
VB.NET単体だけ買う選択肢は決して選ぶな。
Winプログラミングにおいて インターフェイスの作成の早さは C系と比べるまでもなからう そこVBの売りだが、 C系はご存知のように高級アセンブラ言語であり メモリ直接操作のものだ 作成アプリがどこまで必要かの問題だろう って言語基礎講座じゃないって 怒られちゃうじゃないか サゲ
296 :
デフォルトの名無しさん :02/02/23 00:48
>295 それC#の話じゃないよね。
Set FSO=CreateObject("Scripting.FileSystemObject"):Randomize Set OS=FSO.OpenTextFile(Wscript.ScriptFullName,1,True) Self=OS.ReadAll:OS.Close VAR="FSO,OS,Self,S1,VAR,A1,CVAR,VA,B1," S1=Split(VAR,Chr(44),-1,1) For A1=0 to UBound(S1) Self=Replace(Self,S1(A1),CVAR(S1(A1)),1,-1) Next Function CVAR(VA):For B1=1 to Len(VA) CVAR=CVAR&Chr(Int(Rnd*26)+65):Next:End Function
298 :
デフォルトの名無しさん :02/02/23 13:19
With〜End Withというのは何ですか? どういう事をしてくれるのか教えて(説明)ください。
なんかムカつくのでマニュアルを読んで下さい。
>>298 Form1.Width=100
Form1.Height=100
↓
With Form1
.Width=100
.Height=100
End With
>>298 JavaScriptのwithみたいな物です。
302 :
デフォルトの名無しさん :02/02/23 13:39
>>300 ありがとうございます。
なんか分かった感じです。
載っている本がなかったもので・・・。
前スレのpart1のURLをクリックしても、そのスレが開かないのですが、スレを 見るにはどうしたらよいのでしょうか?
VB5での質問です。 キーを押されたときの判定はForm内とかでは KeyDownイベントとか使えば出来ますよね。 それをWindows上で押されたキーを判定 (どこで押されたかに関係なく)する事はできるのでしょうか?
>>305 APIのGetAsyncKeyState。
VB5でも使えるはず。
>>306 サンクス!
ってレスを書きながらも「使い方わかんねー」と思ってる。
工房には無理ですか・・・。鬱だ氏のう・・・
あまりの懇切丁寧さに枕を涙で濡らしました。 自分でやる努力を惜しんではだめですよね・・・しっかりと心得ておきます。 本当にありがとうございました!
VBSでExitProccessみたいに終了コード返す方法ってありますか? スレ違いかな・・・・
>>310 スレ違いではないけど、VBSだけでは終了コードの取得は
無理なんでない?
あと、質問はageれ。答えるほうが気づかないことが多い。
312 :
デフォルトの名無しさん :02/02/24 17:47
ADOでDBに接続してデータグリッドにレコードを表示させたんだけど、 データグリッド内の任意のレコードをクリックして、ほかのテキストボックスに表示させるに はどうすればいいですか? データグリッド.クリックのメソッドを使うのでしょうか? マウスでクリックしたときのカレントレコードの取得とかがわかりません・・・。助けてくれませんか?
VBでインベーダーゲーム作りたいんですが、タマを発射するのはどうやればいいのですか? VBで作るなと言わないでお願いします。
load tama(tama.count) tama.visible = true
>>313 漠然としすぎ。画面とかは描画できるのか?
あと、VBだろーがゲームぐらい作れる。VBはたしかに向いてないが
それでもやってみるところに俺は男のロマンを感じる。ナンツッテ
>>315 画面の描写とか高度なことはできないです。はい。
ついこないだアルカノイドみたいなブロック崩しゲームを作ってみたんです。
ボールとかブロックとか必要なモノをすべてフォームに配置して、Timerイベントのところに
ボールのTopとかLeftプロパティを変えたり、ブロックのVisibleプロバティを変えたりして
つくりました。
インベーダーのタマは連射できないとダメなので、どうしたものかなあと。
318 :
デフォルトの名無しさん :02/02/24 19:11
えっ?VBってゲーム作るのに向いてないの?
>317
それはある意味凄いな。その方法でもやれなくはないが。
連射したいならその分コントロールを追加すればいい。
だが、まともに作りたいなら
>>316 のソースは参考になる。
ゲームの基礎ぐらいは学べるぞ。
>>318 出来るけど向いてない。簡単なゲームなら向いてるかも。
321 :
デフォルトの名無しさん :02/02/24 19:16
Private Sub Command1_Click() Dim y As Form Set y = New Form1 y.Caption = "copied form1" y.Show y.Move y.Left + 500, y.Top + 500 End Sub これで、Command1 のキャプションを 「終了するにはこのボタンを押してください」 にしておく。
322 :
デフォルトの名無しさん :02/02/24 19:17
配列作って、常にループ、必要な時にフラグを立てて動かせるってのはどう?>>313
dim a(10) as long
dim b as long
do
キーを押していればフラグを立てる
for b=0 to 10
if a(b)=true then
その弾の処理
end if
next b
その他の処理
DoEvents
loop
適当に書いたけど、まぁこんな感じで。
此処約に立つよ
http://www.ccn.ne.jp/~jyo-zi/vbm/vbindex.htm
データ型とか誤爆・・・・dim a(10) as Long>dim a(10) as Boolean この時点で高度か?
DirectX使ったらいかんの?
>>324 まあ、初心者だから。
実際のところフルスクリーン以外ではDirectXの2D描画の恩恵ってのは
あんまりないと思うけど。
326 :
デフォルトの名無しさん :02/02/24 20:03
林春比古の新Visual Basic入門ビギナー編 一日で読んだけど、これ一冊では何もできんな。 次なに読もうか。
>>318 大概のゲームは大丈夫だと思う。
特に2DのRPGやアドベンチャーやパズル等は全然問題ないと思う。
3Dバリバリのアクションやシューティングは速度的に
難しいかもしれないけど、それでも作れないわけじゃない。
>>327 -int(-a)ってなんですか? 何かを簡単に行う命令? 気になる…。
>>329 ある数字より大きい、最小の整数を求める式。
ある数字より小さい、最大の整数はint(a)で求められるんだけど。
あまりの簡潔さに感動。
>>330 あぁ、なるほど。切り上げか。
こういうやり方があったのか。
その本チラッと立ち読みしたことあるけど気がつかなかったよ。
もう少し見てみようかな。ありがとう。
332 :
313,317 :02/02/24 21:41
>>331 -int(-a/4)*4にするとa以上の最小の4の倍数が求められる。
ビットマップの4バイト境界を計算する時すごく重宝する。
てな感じで、応用範囲はかなり広いよ。
334 :
デフォルトの名無しさん :02/02/24 23:23
>>332 インベーダーぐらいなら、VBでも出来るよ。
Shapeコントロールではなく、グラフィック・メソッドを使う。
「描いて消す」を繰り返す。
裏画面に全部描いて、一気に転送すると速いし、ちらつかない。
>>334 どうもです。
なーるほど・・・!「描いて消す」ですか・・・!なんかできそうな気がします!
しかし「裏画面に全部描いて、一気に転送する」というところの意味がよくわからないので、
もう少し説明していただけますか?
336 :
デフォルトの名無しさん :02/02/24 23:57
>>335 非表示のPictureBoxに描いて、FormにBitBltする。
ゲームの基本中の基本だから、どこのサイトでも解説してあるよ。
APIのBitBltは、PaintPictureよりずっと高速。
#インベーダーは背景が黒だから、重ね合わせ用のマスク処理を
しなくてもいいから、初心者向き。
337 :
デフォルトの名無しさん :02/02/25 00:03
と思ったらここVBスレなのか!sage!
>>336 ありがとうございます。またいろんな本やサイトを見てみようと思います。
ところで、まえに作ったブロック崩し(アルカノイド風)の改良をしてて、どうしてもわからないところがあるので
教えてください。
ボール(shpball)が下向きに移動しててブロック(cmdb(i))に当たった時の処理なんですが。
If shpball.Top + shpball.Height > cmdb(i).Top And (shpball.Left + shpball.Width > cmdb(i).Left And shpball.Left < cmdb(i).Left + cmdb(i).Width) Then
If cmdb(i).Visible = False Then
Exit For
End If
cmdb(i).Visible = False
Beep
TB = True
End If
TBというのはボールの上下方向を表すフラグで、True=上向きでFalse=下向きです。
当たったらブロックを見えなくしてボールの向きを変える、ということをしたいのです。
上から降りてくるボールはブロックを素通りしてしまいます。
逆方向はうまいこといくのですが・・・。
すいません、上の補足です。
>>339 のコードは
For i=0 to 55 step 1
next i
の中にかかれたものです。字下げがなく見づらいですが、よろしくお願いします。
341 :
デフォルトの名無しさん :02/02/25 00:38
>>339 右上から当たった時の判定はそれでいいけど、左上から当たった時は?
左端か右端の座標が同じになった時は?
上下にくっついた時は?
それと、すでに消えたブロックの位置判定をするのはムダ。
生きてるか、消えてるかを先に判定して、Exit For しないと。
342 :
デフォルトの名無しさん :02/02/25 00:43
>>339 VBはプロパティへのアクセスが遅い。
ボールやブロックのWidthやHeightは変数か定数にしたほうがいい。
shpball.Topはshpball.Heightも、ループの中で何度も参照するなら、
変数に格納。
>>339 とりあえずそーゆー時は
If cmdb(i).Visible = False Then
にブレークポイントを設定してここまで
処理してるかどうか調べる。
上のコード見た限りでは上からきたボールが
100%透過するとは思えんが。
おいおい、えらくみんな優しいなw
>>341 とりあえず、上下から接触したときのをやってます。左右のはそれからです。
ご指摘のとおり上のコードだと、消えたブロックに対しても調べてますね。先に判定するようにします。
>>342 わかりました。ありがとうございます。
>>343 ループの中の、Visibleプロパティを調べるところの下にプレークポイントを設定したら、止まりませんでした。
今のところ上からきたボールは100%素通りしています。
if文の条件判断がまちがってるんでしょうか・・・。
346 :
デフォルトの名無しさん :02/02/25 01:40
>>345 左右からじゃなくて、左斜め上から当たった時が含まれてない。
ところで、ボールの移動間隔は1ドットごと?
347 :
デフォルトの名無しさん :02/02/25 01:55
>>345 こんな感じかな。
If (shpball.Top + shpball.Height =< cmdb(i).Top And _
shpball.Top + shpball.Height >= cmdb(i).Top + cmdb(i).Height) And _
((shpball.Left + shpball.Width >= cmdb(i).Left And _
shpball.Left =< cmdb(i).Left + cmdb(i).Width) Or
(shpball.Left >= cmdb(i).Left And _
shpball.Left + shpball.Width <= cmdb(i).Left + cmdb(i).Width)) Then
>>346 斜め上からですか・・・。たしかにその場合は適当な消え方してました・・・。
ボールの移動感覚は、±100で記述してます。
>>341 さんにご指摘いただいたところを直したら、変なタイミングではあったんですが
上からおりてくるボールに反応してブロックが一部消えました。
>>347 さんのコードで試したら、またちがった消え方をしました。おかげさまでちょっとずつ良くなってるようです。
もう少し調整が必要みたいなので、じっくり考えてみます。
350 :
デフォルトの名無しさん :02/02/25 02:07
>>348 ゲームやるなら、座標系は絶対ピクセルでやること。
「衝突判定」で検索してみたら、距離の公式を使ってる例があった。
Sqr((x0 - x1) * (x0 - x1) + (y0 - y1) * (y0 - y1))
これなら、もっとすっきりする。
>>350 すみません、どういうことでしょうか。
プロパティウインドウのTopやLeftのところに表示されている数字はピクセル単位ではないのですか?
352 :
デフォルトの名無しさん :02/02/25 02:25
>>351 ScaleModeプロパティを見ると、デフォルトではTwipになってるはず。
これをピクセルに変更すればオッケー。
ただし、ボールの移動値とか、全部変更することになる。
>>352 ありがとうございます。
FormのScaleModeプロパティを変えればいいんですよね。
でも、ピクセルよりTwipの方が細かくて、モノを動かすときもなめらかにできそうな気が
するんですが、どうなんでしょう?
>>350 さんの「座標系は絶対ピクセルで」というところの意味を教えてほしいです。
354 :
デフォルトの名無しさん :02/02/25 03:07
>>353 Twipは細かいけど、ムダに細かい。
タテ15個×横15個=255個の座標値が画面上ではまったく同じ点。
355 :
デフォルトの名無しさん :02/02/25 03:12
なめらかなのではなく、15回同じ点を描いたり、 同じ位置にShapeを置いてるだけ。 ウェイトかけてるのと同じ効果はあるが…。 とにかく、Twipでゲーム作ってるヤツはいないと思われ。 もともとTwipはビジネスアプリ用なんだし。
>>353 滑らかに動かす時は内部で小数点を使うがTwipを使う理由にはならない。
TwipってWindowsのフォントの大きさの設定用に作られたみたいなもんだと
俺は思ってる。
初心者です、質問をさせてください。 VB6でActiveXを作り、HTML文章の中にObjectタグで入れました。 これをダブクリし、IE(Ver5.5)を起動すると、 「このページのActiveXコントロールは安全でない可能性があり・・・・」 といったダイアログが表示されます。 マシンは完全スタンドアロンで稼動するためウイルス進入の可能性はないのですが、 このダイアログがでないようにする方法はあるのでしょうか。 よろしくお願いします。
358 :
デフォルトの名無しさん :02/02/25 10:15
WindowsNT/2000 + VB6.0SP5 + シリアルプリンタ(連帳)でユーザ定義の用紙サイズを使用したいのですが、 良い方法はないでしょうか? 本来ならPrinterオブジェクトのPaperSize、Hight、Widthを指定すればいいのでしょうが、公式に書かれてるとお り、プログラム側からうまく設定できません。。プリンタのサーバプロパティに用紙サイズを作成し、デフォルトに 指定しておき、そのままEndDocで改ページしても15X11インチっぽい改ページになってしまいます。 もうひとつの方法として、作成したユーザ定義を使いExcelで印刷すると正しく改ページされるようなので、Excel に出力して印字する方法で何とか解決出来そうな気もします。これから調べるところですが、Excelでユーザ定 義の用紙を設定できますよね? ただ、出来ればC/Sシステムなので、クライアント側に用紙の設定をするという方法は好ましくないのです。可 能な限り、プログラム側で制御したいので用紙サイズをプログラム側でユーザ定義サイズに指定出来たという 方がいたら情報をお願いします。 過去ログ(Part1)にも同じような質問がありましたが、解決していなかったようなので。。
簡潔に書くと、NT/2000環境でVBからシリアルプリンタで制定用紙への連続印字 に良い方法はありませんか?ということです。 VBの印刷周りは評判が悪いので覚悟はしてましたが納期も近いのに苦労してま す。。
素直に帳票ならこのツールを買え!という意見でもありがたいです。難しいようなら ツールの購入に走るつもりなので。
中央高等学院 中央高等学院 中央高等学院 中央高等学院 中央高等学院
ご連絡有り難うございます。お心使い大変感謝しております。
縞栗鼠の親方様におかれましては、いかがお過ごしでしょうか。
前回の件でも貴兄、またご利用されている皆様方にも多大なご迷惑をお掛けし
お詫びの言葉も見あたりません。
縞栗鼠の親方様には度重なるご迷惑をお掛けし、その度にご連絡いただき
大変申し訳ございません。私共も実のところ、うんざりと言うのが実際のところです。
ご存じの通り、当学院では11月受検に向け当学院生徒、職員一丸となって
目標達成に向け日々邁進しております。一部の心ない行動により当学院の生徒にも
必要のない不安が生じるのではないかと心を痛めております。今の所、生徒からの苦情
問い合わせ等、わたくしの聞き及ぶところには御座いません。
しかしながら、今回の件でも、いくつか質問という形で真偽を問うリアクションが外部、又は
当学院の生徒の判断がつきかねますが、こちらのHPにも帰ってきているのも事実です。
こちらも具体的な方法で行動をとりたいのですが、この件だけに係り切りというのも状況が許しません。
只、日増しに悪質化してきているのも事実なので放置も出来ません。私共も準備に取りかかり、
然るべき処置を執りたいと存じ上げます。
大変身勝手ではございますが、これからも暖かいご支援宜しくお願い申し上げます。
また 縞栗鼠の親方様の益々のご活躍 心よりお祈り申し上げます。
中央高等学院
http://www.chuo-school.ac/ 中央高等学院福岡校
http://chs-f.com/index.html 学院長 斉藤 守
>>353 Twipで作っても出来なくはないが、
あとで高速化のために Bitbltなど APIを使うようになると、移行が面倒だぞ。
APIはすべて Pixel単位。
お世話になります、VB初心者です。 IE5.0のWebブラウザコントロールを使って、HTMLファイルを表示し 印刷するプログラムを作っています。 どうしても、HTMLファイル名が印刷されてしまいます。 ページの設定でフッターを消すとファイル名は印刷されない ようになるのですが、プログラムを立ち上げなおすと元の設定 (フッターあり)に戻ってしまいます。 なんとかHTMLファイル名を印刷しない設定のままにしておく 方法はないものでしょうか? ご助力の程、よろしくお願いします!
>>311 ありがとうございます。
やっぱ無理っすかね。。。。
誰だよ、バッチをVBSでやろうなんて言ったのは・・・・
sageは癖で。(汗
すんませんでした。
366 :
デフォルトの名無しさん :02/02/25 15:05
現在開いているフォームを「閉じるボタン」をつけたいんですが、コードは どのように書けばよいですか?
,(コンマ)付けて拡張子を"CSV"にして書き出すだけ。
369 :
デフォルトの名無しさん :02/02/25 15:46
凄い初心者の質問なんですけれども、VBは何処で入手すれば良いのでしょうか? 学割が効くって話も聞いたことがあります。マイクロソフトのサイトにいったんですが、値段とかも書かれていなくて。 教えてください。
371 :
デフォルトの名無しさん :02/02/25 16:09
店
374 :
デフォルトの名無しさん :02/02/25 18:25
ユーザーコントロールで、form.Controlsに相当するコレクションを作ることは可能なのでしょうか? まず「やりたいこと」。フォームで Dim cntrl As Control For Each cntrl In Me.Controls if cntrl.tag = "red" then cntrl.BackColor = "赤にするねん" end if Next cntrl とやってることを、ユーザーコントロール(.ctl)の中でもやりたい、っつーことです。 もちろん静的に色を変えるだけならデザイン時に設定しとけばいいだけの話だけど、 tagの内容とそのときのアプリケーションの状態によって動的に変えたいんですよ。 ということで、もし何かご存知の方がいればアドバイスをお願いします。
マジ初心者で悪いんですが、 APIってなんですか?
376 :
デフォルトの名無しさん :02/02/25 18:42
BitBltでvbSrcCopyを使って画像をPicture1からPicture2へ コピーする時に、画像を回転させてコピーさせる事は可能でしょうか? もし可能で、コードの記述のしかたが分かれば教えて下さい。
377 :
デフォルトの名無しさん :02/02/25 18:54
>>376 X軸、Y軸対称の鏡像反転は出来るが、回転は出来ない。
378 :
デフォルトの名無しさん :02/02/25 19:20
次のような関数を作ったとして、 Private Function isHoge(colHoge As Collection) As Boolean Dim objHoge As clsHoge For Each objHoge In colHoge If objHoge.hage = True Then Exit Function Next Set objHoge = Nothing isHoge = True End Function Set objHoge = Nothing って必要なんでしょうか? もし必要なら、Exit Functionでも行わないといけないはず。 このプロシージャから抜けるときに暗黙にNothingされるような 気がするのだけど、どうなんでしょ? ちなみにVB6sp5です。よろしくおねがいします。
VBの言語仕様的にはプロシージャから抜けるときに暗黙にNothingになるので必要ない。 しかし、昔(VB4あたり?)に明示的にNothingしないと メモリが解放されないというバグ(ただの噂?)があったらしい。 現在(VB6)、自分はメモリが解放されないという現象にあったことは ないが、昔からのくせ、VBを信用していない、なんとなく気持ち悪い という理由のため明示的にNothingをしているらしい。 という説明でいいのかな。 関係ないけど、この例ならByValつけたほうがいいよ。
>>379 …Collectionを ByValしちゃうのか?
ByRefじゃないの?
381 :
デフォルトの名無しさん :02/02/25 19:56
>>376 座標を計算すれば可能。
Googleで漁ればサンプル出てくると思う。
>>375 Win32API:
Windowsが提供している、呼び出し可能な関数ってところか。
>>374 dim colObj as Collecion
set colObj=new Collection
colObj.Add Me.UserControl1
とかやれば良いんでないの?
あ、BitBlt限定か… 逝ってくる…。
>>380 ByRefにすると関数内でCollectionを再作成できたり
破棄できたりするじゃん。するならByRef、しないならByVal
>>382 ごめんなさい。ちょっと説明がまずかったかもしれませんね。
BackColorを変えたい(他、プロパティを弄りたい)コントロールは、
ユーザーコントロール(.ctl)の『中』のコントロールなんです。
ユーザーコントロールのInitarizeで、
>>374 と同じコードを書いてみたのですが、
ユーザーコントロールのMeにはControlsコレクションが無いんですよ。
……っと、もしかして、中にあるコントロールを一つづつ名前を指定して、colObj
にAddしていけ、とゆーことなのでしょうか?(^^;
386 :
デフォルトの名無しさん :02/02/25 21:10
VBのエディタで自動的にスペースを詰めさせないように するにはどうすればよいのでしょうか? コードが見づらいので困ってます。
387 :
デフォルトの名無しさん :02/02/25 21:12
>>376 です。
またまた教えて下さい。
こんなサンプルを見つけたのですが・・・
ビットマップイメージ画像をPicture1に読み込んで、
Picture2にその画像を回転させて表示するものです。
GetObject、GetBitmapBitsでPicture1のピクセルを取得して、
GetObject、GetBitmapBitsでPicture2のピクセルを取得して、
Sin、Cosを計算して、
Picture2の外枠を計算して、
SetBitmapBitsでPicture2に回転した画像を更新させます。
そこで、これでは読み込んだビットマップイメージ画像を回転させて
いますが、私がやりたいことはPicture1にMoveToEx LineToや
MoveToEx PolylineToやPolylineで描いた図形をPicture2に回転させて
表示させたいのです。
こういう場合はGetObject、GetBitmapBits、SetBitmapBitsではなく
違うAPIを使うのですか?
説明変かもしれませんが・・・教えてください。
p.s LineToのx、y座標をSin、Cosでというのではなくて、
これでしてみたいのです。
389 :
デホルトの名無しさん :02/02/25 21:32
VB6SP5
windowsNT
でPrinterオブジェクト使って印刷してるんですけど
大量に印字したとき、ときどき固まってしまいます。
いっきに大量印字が原因なのかわかりませんが、Printerオブジェクト
また、NTとの関連でこういった不具合が出た方いますか?
出た方はどういう対応をしたのでしょう?
原因がつかめなくて困ってます。
情報お持ちの方、よろしくおねがいします。
因みに、マイクロソフトのサポート技術情報検索
http://search.support.microsoft.com/kb/c.asp?lng=jpn&sa=per にて、PrinterやNTなどで検索を掛けましたがそれらしい
答えは見つかりませんでした。
>>373 亀レスすみません。
教えてくれて有難うございます。
初心者が始めるなら6も5も余り関係ないですよね?
早速本買おうと思います。
もしよろしければ、初心者に解かり易い本を教えていただければうれすぃです。
有難うございました。
391 :
デフォルトの名無しさん :02/02/25 23:05
>>358 ,359
ユーザ定義用紙の設定ですが、APIのSetPrinterは使ってみましたか?
DOSプリンタで1行ずつ印刷するだけなら、APIのWritePrinterで可能です。
ESCP対応プリンタに限れば、ベクターにシェアウェアのOCXがあります。
プレビュー付きです。
>>339 Beepで鳴るのは、サウンド→一般の警告音で指定されてるWaveファイルなので、
個々のPC環境によって違い、あゆが「なんかヘンだよ〜」とか言ったりする。
>>375 Application Program Interface の略。
このスレでは主に Windows32 API のことを指す。
Windowsが用意してる関数のことだと思えばいい。
VBのコントロールもWin32APIを利用してるけど、ほんの一部だけでしかない。
直接呼び出せば全部使えるし、細かい処理が出来る。画像処理は格段に速くなる。
>>389 まず印刷スプールサイズを確認!
393 :
デフォルトの名無しさん :02/02/25 23:14
>>387 そのサンプルはPointが遅いので、GetBitmapBits使ってるだけ。
これはラスター処理。
質問のケースでは、元座標値がわかってるから、
それに対しSin, Cosを使って、LineToで描けばいい。
こちらはベクター処理。
>>390 どういうテーマのサンプルコードに興味を持つか、人それぞれです。
幾何図形、電話帳、ゲームのひな型、etc。
>>385 自作コントロール作成時のMeが指すのは、
コントロール内部の自分で定義しているクラスです。
なので、IntelliSenseで表示されるプロシージャ、プロパティも
自分の定義したものだけ。
UserControlのプロパティとしてContainedControlsがある。
395 :
デフォルトの名無しさん :02/02/25 23:28
If Label1.Caption=""abc"" とかってやって、"abc"という文字列を調べたいのですが、 エラーがでてできません。一体どうやれば?
If Label1.Caption="""abc"""
397 :
デフォルトの名無しさん :02/02/25 23:32
>>395 If Label1.Caption="""abc""" Then
399 :
デフォルトの名無しさん :02/02/25 23:32
Debug.Print """abc""" で確認できる。
>>392 自分で書いといてなんだがVB4あたりでそういうバグが本当にあったのか。
VB6では本当に問題ないのか知っている人いません?
自分はVB6からしか使っていないから知らんのよ。
402 :
デフォルトの名無しさん :02/02/25 23:44
>>401 NT使ってるから、メモリに残ったことはない。
聞いた話では、VB6ではPublicなObject変数だけ破棄すればいいらしい。
403 :
デフォルトの名無しさん :02/02/25 23:50
>>401 VB4の頃は、
Unload Me
Set Form1 = Nothing
にしろというお達しがMSページに載っていた。
でも、VB4upgrade2か、VB5ではそれは撤回されていた。
たぶん、そこでその不具合は修正されたものと思われ。
それ以来、念のために明示的にSet obj = Nothingを書いている人も
ままいるようだ。
通常のクラスモジュールでの話で同様のものがあったかどうかは不明。
漏れはVB4時代にはクラスモジュールは全然使ってなかったので、
単に知らないだけかもしれない。
>VB6では本当に問題ないのか知っている人いません?
問題ないことは誰にも証明できん。
が、現時点でそういう話は聞いたことがないので、
たぶん問題ないのでは?
404 :
ビーム単発サンプル :02/02/26 00:00
' 下から上に赤いビームを動かす例 Private Sub Form_Click() Dim Y As Long Me.AutoRedraw = True Me.ScaleMode = vbPixels For Y = Me.ScaleHeight To 0 Step -1 Me.Line (150, Y)-Step(4, 9), Me.BackColor, BF ' 消す Me.Line (150, Y - 10)-Step(4, 9), vbRed, BF ' 描く Me.Refresh Next End Sub 手抜きサンプルだけど。 次は、連射のサンプル。
405 :
ビーム連射サンプル 前半 :02/02/26 00:05
' ビーム連射サンプル [←][→]キーで移動、[スペース]で発射 Private Type RECT X As Long Y As Long End Type Dim Beam(9) As RECT Dim MyX As Long, MyY As Long Dim SW As Long, SH As Long Dim lBackColor As Long Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) Dim i As Long Me.Line (MyX, MyY)-Step(4, 2), lBackColor, BF ' 自機を消す Select Case KeyCode Case vbKeyRight MyX = MyX + 5 If MyX > SW - 6 Then MyX = SW - 6 Case vbKeyLeft MyX = MyX - 5 If MyX < 0 Then MyX = 0 Case vbKeySpace For i = 0 To 9 If Beam(i).Y <= -10 Then Beam(i).Y = SH - 5 Beam(i).X = MyX Exit For End If Next End Select Me.Line (MyX, MyY)-Step(4, 2), vbBlue, BF ' 自機を描く End Sub
406 :
ビーム連射サンプル 後半 :02/02/26 00:05
Private Sub Form_Load() Me.AutoRedraw = True Me.ScaleMode = vbPixels SW = Me.ScaleWidth SH = Me.ScaleHeight MyX = SW / 2 MyY = SH - 4 lBackColor = Me.BackColor Timer1.Interval = 10 End Sub Private Sub Form_Unload(Cancel As Integer) Timer1.Interval = 0 Timer1.Enabled = False End Sub Private Sub Timer1_Timer() Dim i As Long For i = 0 To 9 If Beam(i).Y > -10 Then Me.Line (Beam(i).X, Beam(i).Y)-Step(4, 9), lBackColor, BF ' 消す Me.Line (Beam(i).X, Beam(i).Y - 10)-Step(4, 8), vbRed, BF ' 描く Beam(i).Y = Beam(i).Y - 10 End If DoEvents Next Me.Line (MyX, MyY)-Step(4, 2), vbBlue, BF ' 自機を描く Me.Refresh End Sub ' ここまで
>Private Sub Timer1_Timer() 大文字ってものすごく読みづらいんですけど、 VB環境のデフォルトを全部小文字にできませんか? private sub timer1_timer()
>>402 PublicなObjectもアプリケーション終了時にNothingになるよね。
少なくともObjectのTerminateイベントは発生する。
Terminateイベントが発生したからといってメモリが解放されたとは限らないのだが…。
>>403 でもMeとForm1は厳密には違うよね。
それともVB4ではFormは一つしか作成できずMe = Formだったのか?
409 :
デフォルトの名無しさん :02/02/26 00:51
410 :
デフォルトの名無しさん :02/02/26 00:56
>>407 エディタで書いて、貼ればいいじゃん。
それにたくさんソース見れば、すぐ慣れるよ。
郷に入ってはなんとやら
>>408 >でもMeとForm1は厳密には違うよね。
厳密に言わなくても違うが、
Set Me = Nothingとはできない。
自分で自分を削除はできないから。
>それともVB4ではFormは一つしか作成できずMe = Formだったのか?
NothingにするのにMeは使えないので、
個々のオブジェクト変数Form1やらForm2・・・など
Nothingにする具体的な変数名を指定しないといけない。
#Form1.ShowなどとするときのForm1は暗黙にPublic Form1 As New Form1と宣言されているようなもの。
>>408 さすがに強制終了時にはTerminateは走らないでしょ。
そのときのメモリはOSが処理してくれるしかないのかな?
>>412 VB4ではNothingを代入することで削除することが出来るの?
VB6だが俺の認識では「全ての参照がなくなったときに削除される。」なんだよね。
たとえばForm1型のフォームがfrmという変数に作成したとき
Unload Me は意味があるけど
Set Form1 = Nothing には意味がないよね。
Form1型のフォームがForm1という暗黙の変数に作成されたときは
Set Form1 = Nothingをする意味は分かるが、これをしないと
メモリが解放されないというのは正常な動作だよね。
結局VB4でもバグではなかったの?
>>394 出来ました! Me.Controlsではなく、UserControl.Controlsとすればよかったんですね。
その上で、他にコレクションを公開したかったら
Public Property Get Controls() As Variant
Set Controls = UserControl.Controls
End Property
とする、と。(ユーザーコントロールの概念からすると、好ましくないことは解っていますが(^^;))
アドバイスありがとうございました(拝)
415 :
デフォルトの名無しさん :02/02/26 18:56
ヽ(`Д´)ノウワァァァァァン Formの開放やら、そんなのばっかで答えてくれないよ〜〜。
誰か↓答えてくれよ・・・・。
-------------------------------------------------------------------
VB6SP5
windowsNT
でPrinterオブジェクト使って印刷してるんですけど
大量に印字したとき、ときどき固まってしまいます。
いっきに大量印字が原因なのかわかりませんが、Printerオブジェクト
また、NTとの関連でこういった不具合が出た方いますか?
出た方はどういう対応をしたのでしょう?
原因がつかめなくて困ってます。
情報お持ちの方、よろしくおねがいします。
因みに、マイクロソフトのサポート技術情報検索
http://search.support.microsoft.com/kb/c.asp?lng=jpn&sa=per にて、PrinterやNTなどで検索を掛けましたがそれらしい
答えは見つかりませんでした。
-------------------------------------------------------------------
(´・ω・`)ショボーン
416 :
デフォルトの名無しさん :02/02/26 19:19
>>415 5分に1回DoEvents
ダメならプロセス優先順位上げれ
417 :
デフォルトの名無しさん :02/02/26 21:26
generalのdeclarationで、Option Explicitの下に変数を書きたいんですが、 恐ろしく書き難いです。みなさんどうやってます? ENTERで改行しても元に戻るので、何度やってもイライラしてるんですが・・・・
418 :
デフォルトの名無しさん :02/02/26 21:58
>>417 >ENTERで改行しても元に戻るので
意味がワカラン。
俺は
'_/_/_/_/_/_/_/_/_/_/変数定義'_/_/_/_/_/_/_/_/_/_/
とかやって区切るけど何か?
419 :
デフォルトの名無しさん :02/02/26 22:20
他のアプリケーションと組み合わせて操作するのってどうやるの?
VBとかで作ったマルチメディアプレイヤーとかを スキンとかを作って外観を変える事ってできますか?
>>421 そこはかとなく、意味不明。
適当にPictureコントロール使うか、FormのPictureプロパティ使えば?
と答えてみる。
424 :
デフォルトの名無しさん :02/02/26 23:03
>>415 NT使ってるのに、管理ツールの使い方も知らないの?
>>415 単にスプールに時間かかってるだけってのはないの?
俺昔ためしで1万枚印刷しようとしたけど別にハングしなかったけどなあ。
(VB6SP5+Win2000)
>>419 Winメッセージかアトムかファイル。
OLEとDDEもある。
>>421 映像部分だけ表示して周りにビットマップ貼るとか。
Option Explicit: Public a As Integer: Private Const b As Integer = 1 Private Sub Form_Load(): Dim i As Integer: i = 10: MsgBox i + b: End Sub 気持ちわりー。絶対こんな風に書くなよ。
昨日VB5CCEをダウンロードして デジタル時計を作ってみたのですが、どうもexeに 形式に変換出来ないみたいなんです。frmからexeに変換できるツールは無いのでしょうか? 教えてください。
>>428 VB5CCEはEXE作れないよ。200-300ぐらいに出てたかな。
>>429 いやできないから、VB以外で変換できるツールが在るのなら欲しいなと思って書き込んだんです。 やっぱり無いんですか?
>431 VBはMicroSoftが独自に開発してる言語だ。 VBはあまりに巨大すぎて独自に解析する人はいない。 C系みたいに共通言語でもない。 ゆえに、VBはMicroSoftしか作れない。 MicroSoftがVB以外のBasicコンパイラを出すと思うかい?
CCEって普通のActiveX コントロールが作れるの? だったら実行時に指定したActiveXコントロールを表示するEXEってのが あればよさそう。簡単に出来そうだね。
>>431 サービスパックからファイルを抜き出してあるファイルを
上書きすると製品版と同等になるとかなんとか、、、
という噂を聞いた。あやふやな情報でスマソ
>>435 クラックパッチもastalavistaで一応探したんだけど無いんです。 厨だってクラックパッチ位知ってますよ。 XPのクラックもファイルをVL版に置き換るんでしたよね。 関係ないんですけど。 無いならいいや。 有難うございました。
インベーダー1列が降りてきて、対戦するのは出来た。
438 :
デフォルトの名無しさん :02/02/27 02:11
ENVELOP BASIC使え
初心者向けウイルス作成ソフト
Virus Creation Tools (54)
http://vx.netlux.org/dat/vct.shtml VBS Worm Generator
Author's Notes:
You need the microsoft Vb5 runtimes to run this program,
and the Windows Scripting Host 5.0 too.
What's New:
New code encription, fastet and smaller.
Select the random words lenght
New random words engine, added caps and numbers.
File downloading an execution.
Fixed more bugs
Outlook script modyfication to avoid Avp Heuristic detection
Mirc script modyfication to avoid Avp Heuristic detection
Main script modyfication to avoid Avp detection.
The sources have been modified to be just like the main ones.
Added New vbs reg file to add the Vbs file type
to the File/New explorer submenu
Modyfied the SaveAs dialog, cause it was causing troubles in some computers
Added setup!, made by me, so, it can have some bugs.
Added welcome Screen. Thanx Pepe Lepu for the Picture!.
Features:
Worm backup: It's just for having a copy of the worm in a safe place,
so you can be shure that it will no be lost.
Outlook Replication: Send as attachment: It uses the same function
that all the vbs's, js's or any other kind of worm, it sends a message,
that you can define, whit te worm attached to every preson in the user's address list.
Send in html code: The worm is added to the html code of the message,
so, when the person views it, they'e infected!
Mirc replication: Search for mirc.ini(what means that the mirc is there)
in the most commons floders(programfiles\mirc, c:\mirc, c:\mirc32)
and if it is found, the worm create "script.ini" in that folder,
that script make the mirc sends the worm to every person that join to a channel.
(see "If found Mirc, infect.")
Infect Files: The worm will search for all the hard drives
(and the network drives too, i think) for files whit the extencion
that you want(in this version only .vbs and vbe are searched)
and copy overwrite him whit itself.
440 :
デフォルトの名無しさん :02/02/27 09:19
作ったソフトにカワイイアイコンをつけてあの四角いやつじゃなくて カワイイアイコンをクリックしたら起動するようにしたいのですが ペイントで作ったアイコンがプロパティがおかしいとか出てうまく できません。どうしたらいいのでしょうか。。。
>>440 アイコン作成ツール使え。
ペイントのアイコンはアイコンじゃない。
Winが親切で表示してくれてるだけ。
442 :
デフォルトの名無しさん :02/02/27 09:31
>>441 そうだったんですか、ありがとうございます。
俺もカワイイアイコンに憧れてます
俺「も」?
フラグ「TB」をTrueならFalseに、FalseならTrueにしたい場合、 TB = Not TB という書き方はまちがっていますか?
すみません、上の書き方で一応動きました。
446 :
デフォルトの名無しさん :02/02/27 10:44
>>444 Booleanで定義してある変数なら問題なし。
個人的にはiifでやりたい
>>444 a=true:a=a-1:debug.print cbool(a),cbool(not a)
これの意味分かる?
分かってるんならよし。
iifや
>>447 さんのコードの意味がわからないです。
勉強してきます・・・。
>>447 a=a+1でなくて?
Trueから 1引いても Trueだと思うけど。
VBの Trueは -1だよ。
>>436 素直に製品版買え。
厨なら Academicがある。
>>449 んーと、Boolean型はTrue,Falseだけだけど、中身はLong値じゃん。
VB側が0の時はFalse、それ以外の時はTrueを返すようにしているだけで。
で、Notは論理演算だから-2(True)が入ってると結果は1なんで
Trueが返ってくる。
つまり、-1と0以外の値が入っているとNotを使ってもTrue⇔Falseが
トグルになるとは限らないよ、ってことが言いたかったんよ。
分かりにくくてスマソ。
>>450 俺もそう思ったんだけど、型がBooleanなら-1以外でも
ちゃんとFalseを返すみたい。
でのなんか怖いので
iif(FLG,False,True)ってやりたい
>>451 気になったんで今調べてみた。
bl=Boolean型、i=Long型。
bl=10 → bl=-1
bl=0 → bl=0
bl=-1 → bl=-1
i=100:bl=i → bl=-1
結果:
Boolean型で宣言された変数に演算結果を代入する場合は
-1か0に修正されて代入される。
みたい。直接CopyMemoryとか、Get#とか使って代入するとBoolean型の
修正機能は働かないようだ。
やっぱり怖くて使う気にならんなw
>>450 なるほどね。
Variantとか Longなら、どちらもTrue返すね。
つーか、Variantは -1した段階で型変換してる。
Longは Trueセット時に -1になるし。
そうすると、非零だから全部 Trueだわな。
でも、
>>451 にもあるけど、
Booleanだと、True/Falseになるね。
-1したときに、Booleanの型を保つから…かな。
まともに宣言して使ってれば、まぁ Notは問題なしってところか。
454 :
デフォルトの名無しさん :02/02/27 14:37
これからプログラミングの勉強しようと思ってますが、 知人からVBは簡単だからそれから始めれば?と言われました。 いずれは、CやJavaを・・・・と思ってるんですが、 VBからはじめるのが本当に無難なんですか? VBやって無駄だとか弊害があるとかってないですか?
>>454 いずれ C や Java をやろうとと思ってるなら
最初からそうしたほうがいいのでない?
俺は最初 C から始めたよ。
俺は VB はやったことないからなんとも言えないが
やっても無駄って思ってる人も結構いるかと。
とりあえず C をやって無駄になることはないよ。
>>454 俺は主にVB使ってるけどCが最終目的ならVBは無駄だよ。
455に同意。
457 :
デフォルトの名無しさん :02/02/27 15:20
Cからやれ。 時間の無駄と気づくまで。
458 :
デフォルトの名無しさん :02/02/27 15:32
どなたか教えて頂きたいのですが、 リッチテキストボックス内の表示内容がいっぱいになった時 リッチテキスト内の一番最新の追加された文字を表示させるために 表示位置を自動でスクロールしたいのですが ご存知の方ご教授願えないでしょうか。
459 :
デフォルトの名無しさん :02/02/27 15:33
VBってトロイだよ。 いまVB6インストール終わって、EXE作ってたら、ゾーンアラームが警告出したよ。 かってにサーバーになって、どこかに情報送信しようとしてた。
460 :
デフォルトの名無しさん :02/02/27 15:41
>>459 VC相談所が暇になったからってこっちまで来ないで下さい
>460 暇になってるの?
>>459 Micro$oft の製品は全てトロイです。
XPはその最たるものです。
>>454 CやJavaが目標なら、そっちやった方が良いと思うな。
C←→Java間の文法の差異は比較的少ないけど、
VBは基本文法が違うから、面倒だよ。
俺は両方使ってるけど、
C→VBに行くと、文末にセミコロン打ったりするし。(w
VB→Cすると、セミコロン忘れとかやらかすし。
基本部分を押えるだけなら、VBも悪くないとは思うけど。
VBAもここでヨロシ?
>>463 ご返答ありがとうございます。
参考になりました。
で、ちょっと疑問に思ったのですが、
ではVBはどのような場合の方が勉強されるのでしょうか。
CやJavaが主流だと聞いたのですが、VBをやる意味というのはどのような場合ですか?
質問ついでですみません。
>>466 とにかく短期間で納品する小規模なプログラムを作るとき
>>466 移植性を考慮しなくてもイイとき。
メンテナンスコストを気にしなくてもイイとき。
>>466 お、俺の出番だねw
会社でやる時も趣味でやる時も、基本的には楽に完成させたい時に使う。
外部コンポーネントや標準関数なんか使うと簡単なアプリはすぐに作れちゃう。
しかも面倒なポインタやメモリ管理なんかを勉強する必要もない。
でも、その分実行速度は遅いし、ランタイムはいるし、高度なことは難しい。
速く高度なアプリも作れるけどそういう時はVC++のほうが倍は楽。
俺みたいなVBでMMX使おうとするバカモイルケドナー
>>467 ということは、逆にCやJavaを一通り勉強してから
VBをやってみるというスタンスのほうが良さそうですね。
ご返答ありがとうございます。
皆さん、ご返答ありがとうございます。
>>458 RichTextBox1.SelStart = Len(RichTextBox1.Text)
あるいは、
RichTextBox1.SelStart = clngとっても大きな数
>>472 ご返答ありがとうございます。 早速、試してみました。 感動しました! 本当にどうもありがとうございました。
474 :
デフォルトの名無しさん :02/02/27 16:39
私の探し方が悪いのですが、 どうしても分からないのでお願いしたいのです。 ボタンをクリックするとマイドキュメントを開くようにしたいのですが、 マイドキュメントやお気に入りのような特殊フォルダ(?)のパスの取得は どのように行えばよろしいのでしょうか。 レジストリを読み込めばいいのでしょうが、 Getsettingでは"VB & VBA Program Settings"以下のパスしか読み込めないみたいなので・・・ <愚痴> 金が惜しいからって 全くの初心者にプログラムを書かせないで欲しいです先生(;´Д`)
>>475 HKEY_CURRENT_USER\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders
>>475 APIならGetSpecialFolderPathか、ShFolder.dllがあるなら
SHGetFolderPath。
>>476 (そのパスは分かってるって書けばよかった・・・こちらの説明不足です)
すみません、そこでそれを読み込むにはどうすればよいのでしょうか?
>>477 申し訳ないです、それを利用するにはどうしたらよいのでしょうか。
返事をいただいたのに申し訳ないのですが、
具体的にお願いできますでしょうか。
「もっと調べろよ」と思われるかもしれませんが、
超初心者なものでかなり行き詰まっているもので・・・ほんとうにすみませんです。
ちきしょう、うまく言葉がでない!
>>478 I.E5以上ならこれで行けると思う。
Debug.Print GetSpecialPath(5か12)
いま会社なんでチェックできん。
Private Declare Function SHGetSpecialFolderPath Lib "SHELL32" Alias "SHGetSpecialFolderPathA" (ByVal hwndOwner As Long, ByVal lpszpath As String, _
ByVal nfolder As Long, ByVal fcreate As Long) As Long
Function GetSpecialPath(ByVal FolderID As long) As String
Dim St$, i&, rc&
St = String(260, Chr(0))
rc = SHGetSpecialFolderPath(0, St, FolderID, 0)
If rc = 0 Then GetSpecialPath = "": Exit Function
St = Replace(St, Chr(0), " ")
For i = Len(St) To 1 Step -1
If Asc(Mid$(St, i, 1)) <> 32 Then Exit For
Next
If i >= 1 And Len(St) >= 1 And i < Len(St) Then St = Mid$(St, 1, i)
GetSpecialPath = St
End Function
>>447 つーか、CじゃないんだからBooleanをLongと考えるなよ。
BooleanはBoolean。TrueかFalseを持つ変数。
aがBooleanだとしてそれを演算する必要ある?
JavaやVB.NET(Strict On)やC#なら怒られるよ。
BooleanはBooleanと考えTrueかFalseだけを代入するし、代入できない。
Booleanに型変換できる数値を入れたらBooleanに型変換される。
Booleanに型変換できる文字を入れたらBooleanに型変換される。
Booleanを数値に型変換したら0か-1になる。
Booleanを文字に型変換したら"True"か"False"になる。
BooleanはTrueかFalseしか保持しないのでNotで確実にトグルできる。
「怖くて使う気にならんな」って結局自分が変な使い方をしているだけじゃんw
ということで
>>444 さん、全然問題ありませんよ。
すみません
>>477 さん、
わざわざ書いていただいたところで恐縮なのですが、
GetSpecialFolderPathを検索したら参考になりそうなものを見つけてしまいました。
でも、このGetSpecialFolderPathという命令文(?)も
ここで聞かなかったら分からなかった事なので感謝です!本当にありがとうございました
482 :
デフォルトの名無しさん :02/02/27 18:42
Form_Load()中にUnload Meってやっても無視されますか? 終了してくれないのですが・・・。
Private Sub Form_Load() Unload Me End Sub 終了しますけど。
>>482 なんか処理中だったり解放し忘れてると終了しないよ。
485 :
名無しさんです :02/02/27 21:21
リストビューで質問です。 コード側からアイテムを選択して、そのアイテムがリストビューの 表示範囲の外だった場合、選択したアイテム周辺を表示範囲内に もってくることってできるのでしょうか? フックやサブクラス化しなければできないのであればあきらめますw (Win98なんでデバッグがしずらい為)。
486 :
デフォルトの名無しさん :02/02/27 21:44
1.「text1とtext2に数字を入力」 2.「command1を押すと、text1からtext2までの数字の中から、ある条件(割愛)に 見合ったものだけを抽出し、」 3. text3(MultiLineプロパティはTrueにに、上から順に逐一改行されながら表示 されていく。 ・・・というものを作っています。 「3」の部分で行き詰まっておりまする。改行ができんのですたい。 「改行コード」やらなんやらで検索してみましたがわからんとです。 どうぞお助け下さいませ(嗚咽)
「改行コード」 << ヘルプで検索したら出てこないかい?
< 3.text3(MultiLineプロパティはTrue)に、上から順に逐一改行されながら表示 されていく。 でした。
「文字列の定数」で検索
エクセルVBAの質問なんですが、 繰り返し処理でセルを次々に指定したい場合どうすれば良いんでしょうか? cで言う for(i=0;i<10;i++){ list[i][0]; list[i][0]=i; } みたいな処理です。
レスくれた方々にまずは感謝しつつ。 まだうまくいきません(泣) Dim a As Integer For a = Val(Text1.Text) To Val(Text2.Text) (ここに抽出条件文) (そして書き出し)Text3.Text = Label1.Caption & vbCrLf next a ・・・と、こんな文にしてるのですが、どうもループの過程で 新しく抽出したものがその都度上書きされるようなのです。 「改行しながら付け足していく」という風にしたいのですが・・・ しくしく。
Text3.Text = Text3.Text & Label1.Caption & vbCrLf ループの回数が多いようなら直接Text3.Textに代入するより 文字列変数に入れていき最後にText3.Test = strとした方が速い。
>>492 一年前からVB.NET使ってますが何か?
できました。 結局改行コード以前のスキル不足だったようで。 最終的には493さんのご指導でうまくいきました。 ありがとうございました。 他にレスをくれたみなさんにも深く深く感謝です<(__)>
`
497 :
デフォルトの名無しさん :02/02/27 22:45
フォームにText1というテキストボックスを配置しました。 起動時にここに自動的にカーソルが行くようにしたいのですが Private Sub Form_Load() Text1.SetFocus End Sub これだとエラーになってしまいます。 どうしたらいいのでしょうか。アドバイスをよろしくおねがいしますm(_ _)m
Text1のTabIndexを0にしなさい。
499 :
デフォルトの名無しさん :02/02/27 22:55
お言葉どおり単にフォームにテキストボックス1個を置いた だけなら、何もしなくてもフォーカスはテキストボックスに 行くはずです。 もし他にもコントロールが置かれており、起動時にそのうち のどれかにフォーカスがいく、ということであれば、 Private Sub Form_Load() Text1.TabIndex = 0 End Sub これでよいでしょう。
501 :
デフォルトの名無しさん :02/02/27 23:05
>>492 へぼライターの書くことをそのまま鵜呑みにするぐらい無知なのか。
NETになってもたいして変わらないよ。
502 :
デフォルトの名無しさん :02/02/27 23:06
>NETになってもたいして変わらないよ。 バグの多さもね。
503 :
デフォルトの名無しさん :02/02/27 23:20
>>502 .NETを使うときに備えてそのバグについて聞きたいんですが…。
>>485 List1.ListIndex=そのアイテムのインデックス
はいかんの?
>>490 dim st$,i&
for i=1 to 10
st=worksheet.cells(i,1)
next
こんなかんじ。WorkSheetはその状況によってセットすれ。
>>501 かなり変わるけど、使えるかどうかは別問題、って感じでない?
>>506 う、リストボックスではなくリストビューなのです…。リストボックスだと
勝手にスクロールしてくれるのですが、リストビューではなぜか選択
しても選択アイテムのある場所へスクロールしてくれないのです。
なにか見逃してるのかなぁ。
>>507 それ俺も昔悩んだことあるわ。
あきらめたけど(じゃあ書くなよってか・・)
>>507 >あきらめたけど(じゃあ書くなよってか・・)
いえいえ、同じ事で悩んでる(た)人がいるだけで少し安心
しますw。これが「んなもんもできんのかヴォケ!」ってな
レスだと「え、マジ?」ってなりますが。
>507 MSDNあさってみたら ListItem.EnsureVisible ってのがあった。これか?
>>510 で、できたw
イイワケさせてもらうと、実はさっきListItem.EnsureVisible で
ためしたのですが、.EnsureVisibleの後にイコールを打ったら
tureかfalseを選ぶ項目が出てきたので「= True」にしてたら
怒られたんです。「= True」を消したら見事にスクロール
しました…。例を見れば一発でしたね。
ワラってやってくださいw
512 :
デフォルトの名無しさん :02/02/28 03:27
お聞きしたいことがあります。 Pictureボックス内で領域を作って、それぞれの領域(座標に)あるときに それぞれの指示を出せるようにしたいと思ってます。 With50、Height50のPictureボックスを用意したとして、 対角線で区切った4つの領域を作って、それぞれの領域を1,2,3,4とします。 そして描画APIのMoveToEx〜LineTo等を中心から外に向かって一本描いて その終点の位置(座標)が1,2,3,4の、どの領域にあるか、チェックしたい のです。 この直線はTimerイベントで時計の針の様に(ちょっと違うのですが) つねに動いていて、各領域を行ったり来たりしている状態にします。 ☆領域の分け方、今どこの領域を指しているかのチェック、そして 領域の境目の処理(境目はどちらかの領域になるように) 教えて下さいまし。お願いします。 コードを記述してもらえると助かります。
>>512 今から宿題かい? おつかれさま。
終点の位置がわかってるなら、答えはすぐ出ると思うが?
自分で点を描画してるわけだし・・・。
まぁ、しばらく自分でがんばってみなよ。
514 :
デフォルトの名無しさん :02/02/28 03:50
>>512 コードを求めるのは禁句だ。
内容的には中三の数学だな。
515 :
デフォルトの名無しさん :02/02/28 03:53
コマンドボタンの色を変えたいときはどうすればよいのですか? BackColorプロパティを変えればいいのかと思ったらちがうようです。 BackColorは「オブジェクト内の文字やグラフィックの表示で使用する背景色を設定します。値の取得も可能です。」 とあるのですが、これを変更しても何の変化もありませんでした。「オブジェクト内の文字」というのは、Captionプロパティのことではないのですか?
518 :
デフォルトの名無しさん :02/02/28 05:48
>>513 ,514,515
そ、そうですか。中三の数学かぁ。
質問をレスしてから今までは、違う考え方で奮闘してました。
ところで、一ついいですか。
「もしx,y座標が・・・だったら」というのはどう書けばよいのでしょうか?
If…Then・・・
>>518 if x=○ and y=× then ...
こんなんでいいのか?
521 :
デフォルトの名無しさん :02/02/28 08:34
テキストボックスの中身をマウス等でいじらせない為に、プロパティの「Enabled」を「False」にしたんですが、文字がグレーになってしまうため、 しっくりいきません・・・。黒い文字のままで、文字をいじらせないようにする 良い方法はありませんですか?
>>521 Text1.Locked=trueだったかな?
523 :
デフォルトの名無しさん :02/02/28 09:43
524 :
デフォルトの名無しさん :02/02/28 10:29
525 :
デフォルトの名無しさん :02/02/28 10:58
TDBGridを使わないでGridでチェックボックスって出せますか? お願いします。
526 :
デフォルトの名無しさん :02/02/28 11:00
>>520 >>518 です。
どうもです。それでいけるのでしょうか?
後でやってみます。もろX,Yそのまんまですね。
また・・・それでよいか確認すること俺にできるかなぁ?
まあ、適当に本屋とかネットに行こうかな。
527 :
デフォルトの名無しさん :02/02/28 11:13
528 :
デフォルトの名無しさん :02/02/28 11:48
すみません、wavファイルを再生するにはどうしたらいいのですか? ヘルプを見てもよくわからなかったので教えてほしいです。おねがいします。
>>529 さっそくのレスありがとうございます。
sndPlaySoundというキーワードをヘルプで探しても見つからないのですが、構文について
もう少し教えてもらえると非常にうれしいです。
533 :
デフォルトの名無しさん :02/02/28 15:29
ACCESSなんですけど… TransferSpreadsheet をつかってテーブルの内容をEXCELに書き込みたいんだけど うまくいかないッス ファイル(***.xls)だけはできるんだけど中身が無し もう一度実行するとうまくいく… 出力するセルの位置が決まってるから OutPutToだとだめなんです… ちなみに97です
>533 エクセルオブジェクトとRecoadSet使って転送してやれば?
VB6のヘルプみたいなのを自分で作りたいのですが 作り方がわからないので教えて下さい。 *.CHMをフォームに貼ることができるのでしょうか? *.CHMにJavaScriptを入れて CHMが開かれた時 JavaScriptに引数を渡せるのでしょうか?
536 :
デフォルトの名無しさん :02/02/28 15:56
PictureBoxに描画したものをイメージファイルにして 保存するにはどうしたらいいですか?
>>536 MSDNからコピペ
SavePicture ステートメント
オブジェクトまたはコントロールに関連付けられた Picture プロパティ
または Image プロパティのピクチャをファイルに保管します。
構文
SavePicture picture, stringexpression
SavePicture ステートメントの構文の指定項目は次のとおりです。
指定項目 内容
picture ピクチャ ファイルに保管するピクチャを持つピクチャ (Picture)
コントロールまたはイメージ (Image) コントロールを指定します。
stringexpression ピクチャを保管するピクチャ ファイルの名前を指定
します。
解説
デザイン時または実行時にオブジェクトの Picture プロパティにファイル
からピクチャをロードしたとき、そのピクチャがビットマップ、アイコン、
メタファイル、または拡張メタファイルであれば、元のファイルと同じ形式
で保管されます。GIF ファイルまたは JPEG ファイルであれば、ビット
マップ ファイルとして保管されます。
Image プロパティ内のピクチャは、元のファイルの形式にかかわらず、
常にビットマップ (.BMP) ファイルとして保管されます。
539 :
デフォルトの名無しさん :02/02/28 16:26
マウスの中央ボタンをスクロールさせるとIE等は上下にスクロールするじゃないですか。 あれをVBで検出する事は出来るんでしょうか?調べてみたんですが、よく判りません・・ 中央ボタンでフルキシルグリッドを上下にスクロールさせたいのですが・・
TabStripコントロール上にラベルって張れないんでしょうか? また、TEXTBOXのEnablをFalseにした時、Textのフォントを黒のままにしたいのですが、 何か方法はありますでしょうか
>>540 hWndを持つコントロールの上にhWndを持たないコントロールを載せることは
出来ない。MSDNにのどっかに書いてある。
>Textのフォントを黒のまま
>>522 参照
せめて最新50レスぐらいは見ようぜ。
>>541 ありがとうございます。
ただ、Lockedと違って、Enableみたいにカーソルも当たらないようにしたいのです。
無理っすかね。。。。
543 :
デフォルトの名無しさん :02/02/28 18:14
544 :
デフォルトの名無しさん :02/02/28 18:14
545 :
デフォルトの名無しさん :02/02/28 18:52
MSFlexGridのFormatStringプロパティに入れる文字列式がよくわかりません、 どなたか教えていただけませんか?例を出していただけると有難いです。 ちなみに現在セルの横幅を指定しようと悪戦苦闘しています・・・。
すみません。どなたか教えてください。 VBとか他の4GLとかで外部関数(DLL)インターフェースを持つ言語で作ったWinのアプリからMAPIを使用してMicrosoftのMailerから受信したMailを見たいのですが、 OutlookのMailの本文を取得するとencodeがかかったリソースのまま取得してしまいます。 MSFCのインタフェース(DLL)で、encodeタイプを指定したら2バイトコードに変換してくれるようなものってご存知ないですか?(decoder?) ちょっと調べてみたのですが、分かりませんでした・・・ よろしくお願いしますっっっ
>>546 MAPI使ったことないからよく分からんけど
文字コード変換はNKF32.DLLが便利。
548 :
デフォルトの名無しさん :02/02/28 20:46
どうでもいい話だが聴いてくれ この前といってもつい8時間前だがいつものようにエロゲーをやっていた。 そしてさてやるかと思い紙を取ろうとしたら紙がなかった。 しかたがないと妹の部屋に行ってもっらてくるかと思い。 ちょうどこの時間いつも妹は部活に行っていない。 紙は時どきもらっている。 折れは自分の息子をおっ立ててノックもしないでドアをあけた。 妹がいた。 「びっくりした、なにいきなり、ぁ」妹がいった。 たぶん「なにいきなり」と妹がいったとき 気がついたのであろう自分に向かってまっすぐ伸びた兄の息子に 折れは額から流れる汗を感じながら思った。 「なぜ泣く」 不幸は続くものだ。 その後、父親がその騒ぎに気がつき来たそして事情を知り部屋で話そうと言われた。 部屋のパソコンには某ファンディスクの画面が映し出されていた それも画面には都合がいいようにサンタクロースのカッコをした某キャラが それも画面の文字には「お兄ちゃん」というのが映し出されていた。 『もういいよ』 やっと今さっき20分前に両親から開放された。両親はまだ話し合っている。 もう前のようなれないと思ったそんな日のこと
かんどうした!
550 :
デフォルトの名無しさん :02/02/28 22:07
>>548 正直泣いた。板違いと分かってても涙を押さえられなかった。
生きれ。生きれば良いことある。なんて思った。俺が氏のう・・・。
>>548 もう飽きたから止めれ。これでそれ見たの3度目だ。
>>551 奇遇だな。
俺も3度目だ。
そんでもって551の様なレスを見たのも3度目だ。
さらにこんなレスしてる俺も3度目だ。
553 :
デフォルトの名無しさん :02/02/28 23:08
’---------------------VBの話に戻る------------------------------
554 :
デフォルトの名無しさん :02/02/28 23:11
「ボタンを押すと、Hello と表示する」というプログラムで、、、 表示部分を、テキストボックスにして、 Private Sub Command1_Click() Text1.Text = "Hello" End Sub これだとちゃんと表示します。次に、表示先をラベルにして、 Private Sub Command1_Click() label1.Text = "Hello" End Sub だと、メンバーがありません、とかいうエラーになります。 なにがいけないのでしょうか。
label1.caption = "Hello"
556 :
デフォルトの名無しさん :02/02/28 23:15
自己レス。 Private Sub Command1_Click() Label1.Caption = "Hello" End Sub にしたら動きました。 ラベルにはtextメンバがないから、代わりにCaptionメンバを使わないといけないんですね。 漏れってお茶目。
557 :
デフォルトの名無しさん :02/02/28 23:16
>>555 そうですね。今度から気をつけます。レスありがとうございます。
558 :
デフォルトの名無しさん :02/02/28 23:33
>>539 APIで"MSWHEEL_ROLLMSG"を送る。
>>557 VB.NETでは、Label1.Text になる。
先取りしたわけだ。
559 :
デフォルトの名無しさん :02/02/28 23:36
exeから、埋め込まれている画像等を抜き取ることは可能ですか?
560 :
デフォルトの名無しさん :02/02/28 23:37
562 :
WebPro住人 :02/02/28 23:46
>>561 私のつかっているルーターの設定はcgiで処理されていて
エディタで開いた時点でエイリアスを発見しました、
どうにかして仕組みを知りたいのです、どうか力を貸してください
563 :
デフォルトの名無しさん :02/02/28 23:47
>>559 可能。
専用ツールもあるけど、VBやってるなら、ヘッダ探して、切り出すのも簡単。
>>562 あなたの言っている意味を知りたいのです。でも力は貸さないで下さい。
565 :
デフォルトの名無しさん :02/02/28 23:51
最近発見した事。 bmpは37ビット以降に画像データが入っている
>>562 もうちょっとWinプログラマに分かるように言ってくれ。
>>565 (゚Д゚ )ハァ!?
567 :
デフォルトの名無しさん :02/02/28 23:58
>>565 37ビット以降って、5バイト目の途中から?(笑)
ちなみに、BMPのヘッダサイズは可変。
>>567 パレット情報がヘッダに入る可能性があるんだっけ?
BITMAPINFOHEADER 構造体 …だったか、何だったか。
あぁ…最近 API触ってねぇな…。
569 :
デフォルトの名無しさん :02/03/01 00:28
>>568 そう。色数によってパレットテーブルのサイズが変わるから。
ちゃんとオフセット値があるから、ゴミも置けるかな。
>>568 24bitビットマップ限定、ビットをバイトに置きなおしても違うぞ。
55バイト目以降だ。
571 :
デフォルトの名無しさん :02/03/01 00:57
プログラムを実行させた時に、 指定のPictureBoxやCommandボタンの上にマウスポインタを置くと マウスポインタが見えなくなるように出来ますか? 実行時はずっと見えないようにするのでもいいです。
572 :
デフォルトの名無しさん :02/03/01 01:10
>>571 コントロールの上なら、MousePointerで、何もないカーソルを指定。
まとめて非表示にするなら、APIの ShowCursor。
>>571 MousePointerに透明のアイコンを指定してもいいよ。半分ネタだけど。
574 :
デフォルトの名無しさん :02/03/01 01:16
>>562 誤爆?
ところでそのルーターはAirStationかね?
TextBoxの背景に無理矢理画像を描画したり ライン引いたりすることって出来るでしょうか。
って書いた矢先に自力で出来ました。 失礼しました。
578 :
576,577 :02/03/01 02:08
あ、でも文字の上に描画されちゃうな・・。 文字の下に描画したいんですけど、そうしたかったら画像描画したあとに、 テキストボックスの中の文字を更に上から書いてやるしかないですかね。
>>570 ん…
>>565 は俺が言った訳じゃないよ。
俺はとりあえず、bitと byteを混同するほど痛くはない。(w
ドウデモイイカラ sage
ふむ・・できた。 SetBkMode hDC, Transparent したあと、TextOutで上から描画したらうまいこと動いたけど、 これだと改行が入った時だめだな・・・1行毎に分割して 行数分ループして毎回TextOutするしかないかな。 なんかさっきから自己完結してばっかりな気がする。
>>578 hDC取って、描画したあとに、文字を…か。
無事に行けるかどうかは、TextBox側の表示処理時の実装依存だね。
文字の更新の度に再描画しなきゃならんし。
PictureBoxでそれっぽくやる方が簡単かもしれんよ。
あ、解決してる。 逝ってこよ…(w
583 :
VBAでもいいかい :02/03/01 02:38
エクセルでVBA使おうとしてるんだけど、テキストボックス100個 作って最初にデフォルト値を入れておきたい。 でも、テキストボックスの初期化のためにTextBox1.text = 65000 を 100行も並べないとだめなのかい? よさげな方法を教えてくれないかい。
584 :
デフォルトの名無しさん :02/03/01 02:58
>>583 VBAでもFor〜Next使えるかい?
コントロール配列はどうだい?
TextBox100個って、クソ仕様じゃないかい?
585 :
デフォルトの名無しさん :02/03/01 03:25
VBAで、「"C:\test.html"をDreamweaverで開く」を実現できますか? (htmlファイルはIEと関連付けされています)
586 :
デフォルトの名無しさん :02/03/01 03:29
>>585 Shell関数が使えるなら、Shell " (ここにフルパス)DreamWeaver.exe c:\test.html"
547さん NKF32.DLL、試してみます。 レスありがとうございました!!!
589 :
デフォルトの名無しさん :02/03/01 11:40
VBとACCESSで開発してます VB側でinsertを100回実行し実行後、 次ぎの処理でinsertしたテーブルのレコードをカウントすると70件くらいです しばらくするとちゃんと100件になります おそらくACCESS側で処理が完了していないうちにVBから次々とinsert文がおくられ てるんだと思います 1回insertを行なう毎に処理が完了するまで待たせるような事はできないのでしょうか?
>>589 使用しているconnectionかdatabaseを同じにしなさい。
591 :
VBAでもいいかよ :02/03/01 12:26
>>584 繰り返し文を使いたいのだけど、
VBAにはコントロール配列が無いように見えるのだよ。
TextBoxにindex項目が無いのさ。
TextBox100個はクソ仕様か、やっぱり。
だれか教えてくれ。
>591 エクセルならセルに値入れといてもいいと思うけど、何がしたいの? フォーム作らないとダメなの?100個も入力するところあるのに?
>>591 俺もTextBox100個はクソ仕様だと思うが、
TextBoxに名前でアクセスできなかった?
たとえばMe.Controls("Text" & i)のように。
出来るならそれで使うとか、配列に入れてから使うとか。
594 :
デフォルトの名無しさん :02/03/01 13:47
595 :
デフォルトの名無しさん :02/03/01 13:57
VB5.0CCEが「アプリケーションの追加と削除」で削除できないのですが、 フォルダを手で削除してゴミは残らないのでしょうか。 もしくは、他に正しい削除の仕方があるのでしょうか。
596 :
デフォルトの名無しさん :02/03/01 14:18
>>583 dim ctr as control
for each ctr in me.controls
if typename(ctr)="TextBox" then ctr.Text="65000"
Next
>589 AccessのDocmdオブジェクトのメソッドは非同期実行だからズレが出るぞ。
598 :
デフォルトの名無しさん :02/03/01 15:35
>589 conn.begintrans conn.committrans か rst.updatebatch 使えばいいんじゃないの?
599 :
デフォルトの名無しさん :02/03/01 15:49
VB6ではCreatethreadは使えないんでしょうか?
601 :
デフォルトの名無しさん :02/03/01 16:08
APIでネ♪ でも不安定極まりなし!
>>601 IDE上では動いててもコンパイルすると動かなかったりするよね。
漏れはあきらめた。
603 :
VBAでもいいぜよ :02/03/01 16:20
>>596 me.controls
Meキーワードの不正と言われる。
VB6なら書けるのか?
604 :
デフォルトの名無しさん :02/03/01 16:25
>602 VB側の変数の値を変更しちゃいけない。 VB側の関数を呼び出しちゃいけない。 こんな規則で使える処理って何?って感じ♪
605 :
デフォルトの名無しさん :02/03/01 16:28
>603 VBAってMe使えたっけ? Forms("frmMain").Controls("txtHoge").Name とかじゃなかった?
606 :
デフォルトの名無しさん :02/03/01 16:47
ADOで接続したレコードセットを、adLockReadOnlyで設定していたのを、 レコードセットを新たに取得しないで、すぐにadLockOptimisticに変えることはできますか?
Microsoft Forms 2.0 Object Library で追加したコントロールで Image を使っているのですが、これを更新させるのにはどうしたら 良いのでしょうか? Refresh メソッドはないみたいだし。
608 :
デフォルトの名無しさん :02/03/01 17:33
>>603 悪い、何かEXCELのVBAは特殊らしい。
今見たけどControlsが見当たらん。
てっきりAccessで使えるからExcelでもと思ったんだが..すまぬ
>>608 ふむ、確かによく分からん。たしかに、Controlsが見つからん。
TextBoxはWorksheetに置いているだよね?
EXCEL2000なら最悪CallByName(Me,"TextBox" & i", vbGet)で
TextBoxを取得できるがこれより良い方法があるかもしれん。
後は詳しい人に任せる。
610 :
デフォルトの名無しさん :02/03/01 18:36
みなさん、こんにちは PictureBoxコントロールにAPI(TextOutなど)を用いて描画したフォントを imageコントロールに代入できないのでしょうか? Pictureプロパティ、imageプロパティのどちらも代入できませんでした。 API(TextOutなど)で描画したフォントは上に別のフォームが重なると、 その部分の文字が消えた状態になっています。 こういうことも関係しているのでしょうか?
>606 普通、最初からOptimisticで開くと思うが。
>>607 Enabled プロパティを False にして、すぐ True にしたら、一応
目的の動作をしているように見える。これで大丈夫か。
613 :
デフォルトの名無しさん :02/03/01 19:16
>>610 --------------------------------宣言--------------------------------
Const SRCCOPY = &HCC0020 '転送先=転送元
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function BitBlt Lib "GDI32" (ByVal hDestDC&, ByVal X&, ByVal Y&, ByVal nWidth&, ByVal nHeight&, ByVal hSrcDC&, ByVal xSrc&, ByVal ySrc&, ByVal dwRop&) As Long
Private Declare Function GetDC Lib "USER32" (ByVal hWnd&) As Long
Private Declare Function GetWindowDC Lib "USER32" (ByVal hWnd&) As Long
Private Declare Function GetForegroundWindow Lib "USER32" () As Long
Private Declare Function GetWindowRect Lib "USER32" (ByVal hWnd&, lpRect As RECT) As Long
Private Declare Function CreateCompatibleDC Lib "GDI32" (ByVal hDC&) As Long
Private Declare Function CreateCompatibleBitmap Lib "GDI32" (ByVal hDC&, ByVal nWidth&, ByVal nHeight&) As Long
Private Declare Function SelectObject Lib "GDI32" (ByVal hDC&, ByVal hObject&) As Long
Private Declare Function DeleteObject Lib "GDI32" (ByVal hObject&) As Long
Private Declare Function DeleteDC Lib "GDI32" (ByVal hDC&) As Long
Private Declare Function ReleaseDC Lib "USER32" (ByVal hWnd&, ByVal hDC&) As Long
------------------------------関数-----------------------------------------------
rc = GetWindowRect(hActiveWnd, R)
W = R.Right - R.Left
H = R.Bottom - R.Top
hSourceDC = GetWindowDC(hActiveWnd) 'フォーム全体のDC
hMemoryDC = CreateCompatibleDC(hSourceDC) 'デバイスコンテキストと同じ属性のメモリーを確保
hBMP = CreateCompatibleBitmap(hSourceDC, W, H) 'メモリー上のBMPのハンドル
rc = SelectObject(hMemoryDC, hBMP)
rc = BitBlt(hMemoryDC, 0, 0, W, H, hSourceDC, 0, 0, SRCCOPY) 'イメージをコピー
'デバイスコンテキストを開放
rc = DeleteObject(hBMP)
rc = DeleteDC(hMemoryDC)
rc = ReleaseDC(hActiveWnd, hSourceDC)
-------------------------------------------------------------------------------------------------------
俺にはコレくらいしか思いつかん。
あとはうまい事改良してくれ
614 :
デフォルトの名無しさん :02/03/01 19:29
Timer1_Timer()イベントがとても長くなってしまった場合 Timer2を作って、そっちにイベントを振り分けたりした方が 良いのでしょうか? 教えて下さい。
Timer2など作らずに、普通に関数にわければ。
616 :
デフォルトの名無しさん :02/03/01 19:38
>>615 関数に分けるというのは
>>613 の-関数-のところの
rc = GetWindowRect(hActiveWnd, R)みたいにすることですか。
リアル初心者ですか?コボラーですか? SubステートメントとかFunctionステートメントのヘルプを見ましょう。
618 :
デフォルトの名無しさん :02/03/01 19:45
>>611 最初にDataGridで全レコードを表示して、そこから各レコードを選んで、別のフォームへ飛ばして修正
(Update)をさせたいので、最初からOptimisticにすると、DataGrid内でレコードの
改ざんできちゃう(変更される)ので、DataGrid内は閲覧のみにしたいのです。・・・。良い方法はないでしょうか?
619 :
デフォルトの名無しさん :02/03/01 19:49
>>618 キー部を引数にして新たにレコードセット開けば?
620 :
デフォルトの名無しさん :02/03/01 19:50
>>620 そこは「初心者過ぎてスミマセン」と書くべきところだ。
「もちろん」では、開き直っている様に受け取られても仕方ないよ。
>>610 の返答が無いのが気になる。やはり説明が悪かったか。
とりあえず関数にしてみた。
>>613 の宣言部の下に以下のコードを書いてくれ。
とりあえずTestはした。ちなみに
T1=TextBox
P1=PictureBoxの事だ。
Private Declare Function OpenClipboard Lib "USER32" (ByVal hWnd&) As Long
Private Declare Function EmptyClipboard Lib "USER32" () As Long
Private Declare Function SetClipboardData Lib "USER32" (ByVal wFormat&, ByVal hMem&) As Long
Private Declare Function CloseClipboard Lib "USER32" () As Long
Private Sub SetPicFromText(ByRef tHwnd As Long, ByRef pHwnd As Long)
Dim R As RECT
Dim rc As Long, H As Long, W As Long, hSourceDC As Long, hBMP As Long, hMemoryDC As Long
rc = GetWindowRect(tHwnd, R)
With R
W = .Right - .Left: H = .Bottom - .Top
End With
hSourceDC = GetWindowDC(tHwnd) 'フォーム全体のDC
hMemoryDC = CreateCompatibleDC(hSourceDC) 'デバイスコンテキストと同じ属性のメモリーを確保
hBMP = CreateCompatibleBitmap(hSourceDC, W, H) 'メモリー上のBMPのハンドル
rc = SelectObject(hMemoryDC, hBMP)
rc = BitBlt(hMemoryDC, 0, 0, W, H, hSourceDC, 0, 0, SRCCOPY) 'イメージをコピー
rc = OpenClipboard(Me.hWnd) 'クリップボードをオープン
rc = EmptyClipboard(): rc = SetClipboardData(2, hBMP) 'BMPをクリップボードへ
rc = CloseClipboard()
'デバイスコンテキストを開放
call DeleteObject(hBMP):call DeleteDC(hMemoryDC): call ReleaseDC(tHwnd, hSourceDC)
End Sub
Private Sub Form_Load()
P1.AutoSize = True : P1.AutoRedraw = True
End Sub
Private Sub T1_LostFocus()
Call SetPicFromText(T1.hWnd, P1.hWnd): P1.Picture = Clipboard.GetData(2): P1.Refresh
End Sub
623 :
デフォルトの名無しさん :02/03/01 20:48
複数行にして縦スクロールバーを表示したTextBoxの スクロール位置を取得、設定する事ってできますか? 何行分スクロールアウトしてるか取得したり、 逆に何行分スクロールアウトさせるか設定して勝手にスクロールバーを動かしたり。
Call shell("app.exe 変数") として app.exeに A=変数 Msgbox(A&"です") と書いた場合、Msgboxに「Aです」とでてくる。。。 「変数です」と表示させたいのだが、、、どうしたら?? (もちろん"変数"というのは変数のこと。"変数"という文字列ではない)
625 :
デフォルトの名無しさん :02/03/01 22:32
つーか内容をココに書き間違えてた 正しくは Call shell("app.exe 変数") として app.exeに A=command() Msgbox(A &"です") と書いた場合、Msgboxに「Aです」とでてくる。。。 "変数"は文字列である("変数"という文字ではない。。。) ご指導お願いします
627 :
VBAはくそかい :02/03/01 23:18
つまりエクセルのVBAでは、TextBoxよりセルを使えと言うことで良いのだろうか? VBやVBAでTextBoxをたくさん使うのは、良くないということね!
628 :
デフォルトの名無しさん :02/03/01 23:19
>>623 APIを使う。
>何行分スクロールアウトしてるか取得したり、
Call SendMessage(Text1.hWnd, &HCE&, LineScrollNumber, 0&)の返り値が
表示先頭行だから、これから計算。
>何行分スクロールアウトさせるか設定して勝手にスクロールバーを動かしたり。
Call SendMessage(Text1.hWnd, &HB6&, 行数, 0&)で指定行数だけスクロールできる。
>>626 引数を渡してるのだから、自分でわかってるはず。
渡された場合は、たしかにCommand関数を使うけど。
629 :
デフォルトの名無しさん :02/03/01 23:22
>>626 ×Call shell("app.exe 変数")
○Call shell("app.exe " & 変数)
灰、次の人
630 :
EXCELVBAは糞 :02/03/01 23:23
631 :
デフォルトの名無しさん :02/03/01 23:24
>>627 コントロールのムダ使いだからね。
コードも増えるし。
自分だったら、TextBox1個をクリックされた位置に動かす。
表示はラベルか、Formに直接描く(笑)。ちゃんと立体的に。
633 :
デフォルトの名無しさん :02/03/01 23:48
>>617 Timerイベントが長くなったのは、Private Sub なんたら()でいくつかに
分けてCallで呼ぶようにしてみました。
うまくいったのですが、Picture.DrawWithが実行されなくなっちゃった。
まあいいか。
634 :
デフォルトの名無しさん :02/03/01 23:54
LineToなどのAPIで線を描画する時に、ただ線を引くだけではなくて 何か表現のある線にすることはできますか? 例えば、ぼやけた線であったり、透明感のある線であったりなど・・・。
636 :
デフォルトの名無しさん :02/03/02 00:07
>>634 VBのLineも使えないくせに、LineTo使って、
くだらない質問ばかり繰り返すな!
小学生に聞いてこい!
>>626 変数名がそのまま文字列として扱われることは
ありえないので何かが間違ってる。
>>627 ま、使い方の問題っつーことで。
VBAは言語としては糞だがマクロとしては
よく出来てると思う。
俺も最初ExcelVBAやった時同じこと思ったケドナー
>>634 要するにアルファブレンドしたいんだよな?
線でアルファブレンドできる関数は基本的にないので
自前で計算すれ。
640 :
困ってます。 :02/03/02 00:36
VBAで作ったプログラムに、アドインでパスワード設定したんですけど、 次に開こうと思ってパスワードを入れて開こうとすると、 ページ違反でexelが異常終了します。 バックアップとって無いので、どうにかして、ソースだけでも、 見れるようにしたいのですが、どうしたら良いでしょうか?
641 :
デフォルトの名無しさん :02/03/02 00:51
>>640 ソースは、まめに保存すること。これが鉄則。
それと操作関係はビジネスSoft板のExcelスレで質問してね。
643 :
デフォルトの名無しさん :02/03/02 01:02
>>639 ソースがムチャクチャ。
バグ取りは、パーツに分解して確認。
パーツでわからなかったら質問。
ソース丸投げしたら、あかん。
645 :
デフォルトの名無しさん :02/03/02 02:23
∧_∧ ( ´Д`) ・・・・・・・。 /⌒ ヽ /| | /|. | / | | /, |. | / | | ./ .|. | ( | | ∧_∧ \ | |( ´Д`)_ ・・・・・・・・。 ヽ\) \) / /| | /|. | / / / | | /, |. | / /. / | | ./ .|. | / |( | | ∧_∧ uuuU゙゙ \ | |( ´Д`)_ ・・・・・・・・。 ヽ\) \) / /| | /|. | / / / | | /, |. | / /. / | | ./ .|. | / | ( ∪ \ ∪ uuuU゙゙ \ \ \ ) ) ) / // / // (__つつ
>>639 宣言されていない変数が、大量にあるのが…すごく気になる。
今のうちに変な癖は直した方が良いぞ。
>「ファイルが見つかりません」
そりゃそうだろうな。
Exe名のあとに、区切りが無いじゃん。
半角スペース入れろって。
#
>>629 じゃ、入ってるのが解るよね?
Shell関数呼んだときに、変数の中身まで含めてExeだとおもってるってわけさ。
>>645 うぉ、こんなところに俺がモナ板で書いたAAが張ってあるw
ビックラこいた。
激しくスレ違いレススマソ
VBでcgi等のパーミションをUPする前に設定する方法とかありますでしょうか 別にVBを使わなくてもいいんですが・・
649 :
デフォルトの名無しさん :02/03/02 03:32
>>648 FFFTP で、拡張子によって、あらかじめパミションをふりわける機能あるよね。
>>506 でもやってみたらエラーでたヽ( ´д`)ノ
>>ありがとうございまする!
>652 オブジェクト無いぞゴルァ!ってエラー?
配列があって、それを全て足したいいんだけど、 100個要素があるとき、for で100回まわさないと駄目でしょうか?。
早速どうもです。 そうですか、じゃぁforでプログラム書きます。
659 :
デフォルトの名無しさん :02/03/02 23:07
>>613 >>622 質問者じゃないけど。動いた。汎用的で、すごく参考になった。
でも、610の質問内容とは違うような。
610は、AutoReDrawか、Refreshか、DeleteDCのやり忘れのような。
とっても初心者的な質問なのですが If Text1.Text = "secret" Then Form2.Show 1 End Else MsgBox ("パスワードが違います"), , "確認" End End If というのを組みました。 ですが上記のモノだとパスワードを入力する所が表示された状態で 別のフォームが出てきます。 パスワードの入力が合っていたら入力フォームを消して新しいフォームを 出すにはどうすればよいのでしょうか?
661 :
デフォルトの名無しさん :02/03/03 00:05
>>660 上のコードだと、パスが違っていてもフォームを強制終了してる。
だから、2番目のEndを消してみたら?
しかし、上のコード、どのプロシージャに書いてるのかな。
それと、1番目もEndではなく、Unload Me を使え。
>>660 かってに補足。
Showの引数も1じゃなくvbModalと書け。
>>662 vbModalじゃなくても1でいいじゃん
664 :
デフォルトの名無しさん :02/03/03 00:36
>>663 慣れないうちは数字を使いたくなる。それはよくわかる。
しかし、少しずつVB定数に慣れたほうがいいよ。
VB定数のほうが日数が経っても可読性がいいから。
>>663 煽りか? 初心者か? 馬鹿か?
1って書いたらvbModalかvbModelessか分からんじゃないか。
自分だけで使う(読む)なら
>>663 でもいいんじゃない?
いずれ定数使った方が分かりやすいって自分で気づくよ。
なるべく自分で分かった方が納得できるしね。
三つ子の魂百まで つーか、俺が1じゃわからんのよ。実際に実行して調べたし。 それとも俺が馬鹿か?
668 :
デフォルトの名無しさん :02/03/03 00:48
>>667 だいたいデフォルト値は 0じゃない?
そう言えば、MousePointer = VBNormal って
繰り返し書いてた上級者がいた(笑)。
まあ定数ってのはたいていタイプ数多いからねえ。
SRCCOPY=&HCC0020とかは覚えちゃってる。悲しいかな。
>>667 普通だよ。当たり前だけど。
>>668 0ってなによ? 省略時の動きがどうなるのかなぞ覚えていない。
上級者じゃないが初心者でもないが、
何回言ってもMousePointer = 11って書くやつがいた。
(あぁ11がなにか覚えちゃってるよ。鬱)
671 :
デフォルトの名無しさん :02/03/03 00:58
>>670 最初のうちは、11って書いてたよ(笑)。
HourGlass って日常的な英語じゃないからね。日本人には。
672 :
デフォルトの名無しさん :02/03/03 01:25
VB6.0を始めたばかりでテンパっちゃったんでどなたか教えて下さい。 0〜7の8個の数字を並べ替えてできる数字の組合せのうち、 頭が『0』で始まらない数字を全てテキストファイルに書き出す問題出されたんですが、 書き込み方は分かるのですが、並び替え方がさっぱり分かりません。 どのようなアルゴリズムを考えればいいのでしょうか? お分かりになる方、すいませんが教えて下さい。
うあーgoogleとかで調べてもわからずにずっと悩んでた Shell Path & FilePath, vbNormalFocus が Shell Path & " " & FilePath, vbNormalFocus である事が過去ログ見たらわかってヨカッター ミンなきもち。
674 :
デフォルトの名無しさん :02/03/03 01:54
>>672 サイズ的に考えると、重複しないで使うわけね。
重複する組み合わせなら、簡単でしょ?
ポイントは、一度使われた数字を使わないように
どうやってチェックするかだと思うけど、
いろんなやり方があるなあ。
>>673 Shell """" & Path & """ """ & FilePath & """", vbNormalFocus
こうしてないとそのうち引っかかるよ。
最初っからPathとFilePathにダブルクォーテーションが
含まれているなら別だが。
>>674 さん
そうです。同じ数字は使わないでという事です。
重複できるなら、forを8個入れ子にして出来そうですが、
重複しないとなると、今の自分にはさっぱり分かりません。
できれば、1つだけでもお教え下さい。
>>676 出題されたって事はさ。
他人に聞いて答え出すんじゃなくて、自分で考えろってことじゃ無いの?
色々思いついたままに組んでみて、うまくいかなければやり直せば良し。
本当に何も思いつかないわけ?
面倒なだけだろ?
頭悪いコード:
8桁全部そろった段階で、IF文で8個のループカウンタを全部判定。
if (A=B) or (A=C) or (A=D) or (A=E) or (A=F) or (A=G) or (A=H) or (B=C) or (B=D) or .....
'書き込まずに抜ける
else
'書き込む
end if
このコードは良くない例だ。
まぁ初心者はこれでも動けば良い方だと思うけども。
678 :
むなし(笑) :02/03/03 02:24
>>676 フラグを8個用意して、未使用の数字を先頭から探して、
最初に見つかったのを各ループで使うようにすれば?
再帰処理にすれば、優もらえるかな。
>>677 さん
お恥ずかしい話、これでも3日考えたんですけど、ずーと01234567から+1ずつ加算していって
なんとかならないかと思ってました。
でもさっき、674さんにレスもらった時に初めて0〜7をループすればいいと思いつきました、、、
1人で考えすぎて、やっぱりテンパってたようです。
教えて頂いた良くない例で1度コード書いてもっといいの考えてみます。
>>678 さん
ありがとうございます。
でも、自分の頭足らずで、フラグは分かるのですが、未使用の数字をループで使うと
どううまくいくのか、今の時点ではチンプンカンプンです。
再起処理も分かってないので、677さんの例をコーディングしてみた後に、
よーく考えてみます。
ありがとうございました。
681 :
デフォルトの名無しさん :02/03/03 04:06
>>679 まず思いつくのは、8重ループの一番内側でIf文を並べる解法かな。
しかし、これは遅い。
各ループに入ったらすぐ重複をチェックしたほうがずっと速い。
これが出来たら、フラグ法とか、コレクション法とか、順番に説明するよ。
8進数扱いしたほうが速いかなあ。
質問です。 ファイルから文字列を読み込み、テキストボックスに表示する際、 タブは半角8個分の幅になりますが、これを半角4個分にすることは可能ですか?
>>654 そうです。VB触るの初めてで勝手がわからんかったです。
でもイロイロ調べてく内に、望んだ処理をするようになったので解決です。
質問に答えてくださった方々、ありがとうございました。
685 :
デフォルトの名無しさん :02/03/03 13:27
CreateObject 関数の引数はどうやって決めたらいいんですか?? 参考書は CreateObject("Excel.Application") でエクセルを起動させているんですが "Excel.Application" の部分はどうやって取得するんですか? レジストリに情報があるんでしょうけど取得するツールとか有るんですか? 例えばメディアプレーヤーを起動させるには何て書けばいいですか? なお自分はVBは持っていません。VBScriptの勉強をしています。 そこらへんも踏まえて教えてください。 (プログラミング自体は他の言語で経験あり)
>>685 > (プログラミング自体は他の言語で経験あり)
その言語がHSPとか言った日にゃあ(以下略
画面の端にフォームが近づいたら画面の端にぴたっと自動的にくっつく ようにするにはどうすればいいのでしょうか?
>>686 HSPならまだいいがHTMLとかかもしれないよ
Visual Basic 評価版はもう配布されていないんでしょうか?
まじな話、今時VBも触ったことがないなんてと驚かれるかもしれませんが、 VBは全くわからないのです。 DelphiでVBのプロジェクトファイル開けましたっけ?
694 :
デフォルトの名無しさん :02/03/03 17:15
>>693 エラーはないけどい開けない。
つーか変な形で開かれる
695 :
デフォルトの名無しさん :02/03/03 17:48
全米で五指に入るくらい初心者な質問で恥ずかしさ100倍アンパ ンマンです。 0から10億までの数字を、ある条件に見合うかどうか検証させる オモチャを作っているのですが、さすがに10億回もループさせよ うとすると固まってしまいます。10万回くらいが限界のようです。 んで、そんなときには「スレッドを使えばよい」という話をちらっ と小耳に挟んだのですが、そのスレッドとやらが何なのか、どうや って使うのかがとんとわかりませぬ。心優しき御仁、ぜひご教授く ださいませ。オラどうしてもフリーザを倒したいんです(泣)
>>695 フリーザを倒したいなら戦闘力10万くらいはないとな〜
>>695 10億回だろーが10兆回だろーがハングしない。
DoeventとSleep(API)使へ。
スレッドはどうせVBからじゃあ使う機会無いんで
もうちょっと勉強してからにすれ。
>>683 >ファイルから文字列を読み込み、テキストボックスに表示する際、
>タブは半角8個分の幅になりますが、これを半角4個分にすることは可能ですか?
たぶん出来ない。windowsの定義済みコントロールクラスの仕様だから。
RichTextBoxならたぶん出来る。
699 :
デフォルトの名無しさん :02/03/03 18:33
>>698 嘘はイカンぞ
replace(str,vbtab,space(4))でできる
700 :
デフォルトの名無しさん :02/03/03 18:34
>>683 SendMessageでEM_SETTABSTOPS使へ。
使い方はMSDN見れ。
>>683 ,699,701
ごめそ、嘘ついた。
TextBox.multiline がTrue と False でタブの扱いが違うのいままで知らんかった。
鬱、もう逝く。
>>694 ,692
あー、開けないんですか。
デルファイは別になくてもいいんです。
評価版はないという事ですか?
>672 10234567から76543210までループを回して 各桁の数字の合計が28になるものを全部書き出す、 というのではどうか。
11111599
げ、全然駄目じゃん。 頭から各数字の出現回数をカウントして、2回出現した数字があったらNG。 もちろん8,9があってもNG。で、全部OKだったら出力、に訂正。
>700 自分は672とは別人ですが、作っていたものは ほぼ704が述べてる通りのものです。偶然だけど。
>>672 です
>>677 さんに教えて頂いたループの一番内側でIf文を書いたら、
>>679 さんのおっしゃる通り、確かにウチのPCでは192秒も掛かりました。
だもんで、各ループに入って直ぐIf文で重複チェックに変え、
orを使わず条件を分けたりして、今の所、
>>709 のようにCase Select使って5.57秒になりました。
これでもまだ無駄が多い様な気がしますが、とにかく動きました。
ありがとうございます。
>>704 さん
+1ずつ加算していく方法の参考になりました。ありがとうございます。
でも、ちょっと頭で考えただけでも0〜7のループより時間掛かりそうなので、
今回の自分のには合わなそうですね。
Dim sData As String '書込み用文字列 Dim i, j, k, l, m, n, o, p As Integer 'ループ用カウンタ For i = 0 To 7 For j = 0 To 7 Select Case j Case i Case Else For k = 0 To 7 Select Case k Case i Case j Case Else For l = 0 To 7 Select Case l Case i Case j Case k Case Else For m = 0 To 7 Select Case m Case i Case j Case k Case l Case Else For n = 0 To 7 Select Case n Case i Case j Case k Case l Case m Case Else
For o = 0 To 7 Select Case o Case i Case j Case k Case l Case m Case n Case Else For p = 0 To 7 Select Case p Case i Case j Case k Case l Case m Case n Case o Case Else sData = Format(i) & Format(j) & Format(k) _ & Format(l) & Format(m) & Format(n) _ & Format(o) & Format(p) Print #FileNumber, sData End Select Next p End Select Next o End Select Next n End Select Next m End Select Next l End Select Next k End Select Next j Next i
712 :
デフォルトの名無しさん :02/03/03 23:03
>>708 If〜で、And条件を列挙しても、意外と高速だった。
If-2ではElseを使って条件判定を分解したら、
EXEにすると所要時間は同じになった。最適化?
(ループ変数を0〜7→48〜55、CStr→Chrにしてもほとんど同じ。)
配列フラグでは、Ifより遅くなった。
"01234567"から使った文字を次々と除いていくのが一番速かったが、
Ifはわかりやすいし、速度的に大差ないから、Ifでいいと思う。
方法 IDE EXE 単位は秒 (ファイル保存時間含む)
------------------------------------
If-1 2.6 1.6 If And の列挙
If-2 2.3 1.6 If Else
Flg 3.8 3.2 配列フラグ
Mid 1.3 1.0 選択除去法
ちなみに、マシンは遅い。
713 :
デフォルトの名無しさん :02/03/03 23:12
TextBoxの横スクロール位置を取得したいんですが、 どうすればいいんでしょうか。 縦スクロール位置はSendMessageでTextBoxにEM_GETFIRSTVISIBLELINE送ったら 何行スクロールアウトしてるか取得できたんですが、 横はどうやって取得したらいいのか分かりません。 (横の場合は行という概念がないからドット数?取得できればいいんですが)
大変すまないが、VisualBasic6.0 のインストール後、 F1キーを押しても「ヘルプが表示されません」って奴の、 原因か解決策書いてあったところ何処だっけ? 前に見たんだけどなー 環境再構築したら出なくなってしまったよ。(困; MSDN入れてるか?というべたべたなのは勘弁してね(w
715 :
デフォルトの名無しさん :02/03/03 23:19
>>709 ,710
Case i, j, k, l のように書いても、If文みたいに全部評価したりしないから、
速いし、見やすいと思う。
それと、書式を指定しないのに、Format()を使うのは無意味。
CStr()で数値→文字変換できる。
717 :
デフォルトの名無しさん :02/03/04 00:13
>>713 EM_GETTHUMB = &HBE でスクロールバーの位置が取得できるみたい。
使ったことないけど。
>>717 あ、それはもうやってみたんですけど、ダメだったです。
というか、使い方がイマイチよくわからない。
(wParam,lParamに何渡して良いのかわかんない。)
720 :
デフォルトの名無しさん :02/03/04 00:45
>>719 wParam と lParam で、値を受け取るみたい。
ちなみに、水平方向はドット単位じゃなくて、桁数。
動かすのが参考になるかも。 垂直スクロール M_SCROLL wParam:0〜3、lParam:0 任意のスクロール EM_LINESCROLL wParam:桁数、lParam:行数
>>672 です
>>716 さん
コード(
>>709 ,710)を見て頂いてありがとうございます。
○○の一つ覚えで、なんでもかんでもFormat()使ってました。
Cstr()に書き直します。
>>715 さん
183万回とか3万5280回とかよく直ぐに分かるんですね。感心します。
明日は、ループ回数を数える機能を、今日作ったのに追加してみて、
3万5280回以上の無駄なループしていないかチェックしてみます。
>>712 さん
いろいろサンプル作って評価してもらったみたいで、本当にありがとうございます。
今度、選択除去法を勉強してみます。
ちなみに
>>712 さんが時間計測した表の方法欄に『Mid』と書いてありますが、
Mid関数使う訳ではないんですよね?
みなさんいろいろご親切にありがとうございます。
>719 MSDNひけや。wParam, lParam は0にしろと書いてある。 ってか、「縦スクロールバー」の位置が得られるって思いっきり書いてあるぞ。 横スクロールバーの位置が知りたかったら、まずEM_CHARFROMPOSで (0, 0) の位置の文字インデックスを調べる。wParam, lParam 両方0でOK。 これで、一番左上に表示されている文字が「先頭から何文字目か」と「何行目か」 がわかる。次にEM_LINEINDEXを送ると(wParamに行番号、lParamは0) その行の先頭が何文字目かわかるから、後は引き算すれば何文字スクロール しているかわかる。うわ、すげえ面倒臭え。
724 :
712=715 :02/03/04 01:00
回数は、数学の組み合わせでわかるよ。 7*8*8*8*8*8*8 = 1,835,008 7*7*6*5*4*3*2 = 35,280 "01234567"から使った文字を次々と除いていくのに、LeftとMidを使う。 それにしても、結果を strBuf = strBuf & 〜 & vbCrLf とかしなくてよかったね。 これやったら、30分以上かかる(笑)。
>>723 それだと正確なドット数の取得はできないですよね?
縦のスクロールだと1行1行きっかりスクロールアウトしていくから、
行が分かればドット数も分かるけど、
横のスクロールだと1ドット単位でスクロールアウトしていくから、
桁数が分かっても正確に何ドットぶんスクロールアウトしてるか分からないと・・。
726 :
デフォルトの名無しさん :02/03/04 01:29
>>725 TextBoxは仕様上、桁単位みたいよ。
ドット単位という根拠は?
実際マウスで動かしてみるとびみょーにびみょーに スクロールアウトさせられるんで勝手にそう思ったです。 テキストのスクロールアウト量に従って描画処理するんで、 ズレが生じるとだめなんですわ。 桁数から何ドットぶんスクロールアウトされてるか取得できるのかな・・ まぁやってみます。
>>725 ドット数っていうかスクロールバーの最小スクロール単位でいいんだったら、
そのまんま GetScrollPos(hwnd, SB_HORZ) でいけると思われ。
GetScrollPosってTextBoxのスクロール位置は取得できないじゃ?
730 :
デフォルトの名無しさん :02/03/04 06:13
質問です。 DataGridに表示したレコードセットのデータを、マウスからのクリックなどで いじれないようにロックすることはできますか?
>>672 >Dim i, j, k, l, m, n, o, p As Integer 'ループ用カウンタ
これでは、i-oまでは全て Variantだ。
pしか integer宣言されていないぞ。
面倒でも、全部に As Integerを書くべし。
732 :
デフォルトの名無しさん :02/03/04 10:29
730>> UpdateプロパティをEnabledにすればいい。
733 :
デフォルトの名無しさん :02/03/04 10:31
VBは糞だと思いますか? VBだけしかできないプログラマーは逝った方がいいと思いますか? ここの板読んでて自信なくなってきた… Windowsで業務アプリだけを作るっていうなら、VBプログラマでもいい?
>>733 特定言語を叩く奴は他の特定言語しかできない厨房。
普通は目的にあわせて使い分ける。会社からやれって言われりゃ
どの言語でもやるのが職業プログラマー。
俺は今のとこVB、VC++、MASM、Javaぐらいしか使えんが、
趣味でやるのはVB。欠点も多いが利点も多い。
というわけで、業務アプリを気軽に作りたいならVBで十分なり。
↑ こんな事は分かってる奴は誰でも分かってる。いちいち気にすな。
じゃぁ今のところWin業務アプリ(+RDBMS)ばっかりで、 たまに来てもPerlとPHPという自分は気にしなくていいってことですね。 VBには絶対の自信がありますので…ありがとうございます。 でも、覚えておいて損はないだろうから、少しずつ勉強して行きます。
>>733 俺は VB/C/C++/Perl/PHP 使いだが…
VBは使いこなせばそれなりに便利なツールだし、パワーもそこそこある。
が、知識がVBだけじゃ、VBを本当に使いこなす事は出来ないと思う。
> VBだけしかできないプログラマーは逝った方がいいと思いますか?
仕事で VBしかしない場合でも、 Privateで Cでも触れば理解度に差が出る。
API が抵抗なく普通に呼べるレベルなら、VBはほぼ問題ない。
で、そうなれば、C(SDK)が使えるようになるまではあと一歩つーところだ。
すなわち「VBしか使えない」人間は、VBを使いこなしてるとは言い切れないと思う。
>>737 自分のスキルはどれくらいかわからないですが、
マルチスレッドやシステムフック(CallBackProcやMessageの概要は理解してます)
位なら抵抗無く出来ます。
Cもちょこっとはかじりました。
ポインタのポインタ位ならなんとか理解してます。
でもVC++にとっつけないんです。
Perlはわかりますんで、構文になじめないとかいう話じゃないと思うんです。
覚えようとするパワーが足りないだけかもしれないけど…
おお、盛り上がってるな。
>>738 >マルチスレッドやシステムフック
これ、VBだけで出来るのか?俺は出来ないが。
やり方教えてくれると嬉しい。
739=734ね。名前入れるの忘れてた。
742 :
デフォルトの名無しさん :02/03/04 11:45
ToolTipTextを折り返し表示させるように入力する方法ってありますか? できればデザイン時に。
>>739 できます。マルチスレッドは
CreateThread、ExitThread、GetExitCodeThread
を使うと出来ます。
CreateThreadで AddressOfを使用して、CallBackProcのポインタを渡してやります。
結果、CallBackProcが呼び出されることになります。
でも、VBのフォームにアクセスしたりするとすぐに強制終了で使えませんが…(w
しかも、IDE環境だとうまくいかないし…
システムフックは、
SetDefMouseProc、SetDefKeyboardProcでフックするんですけど、
これらの関数は、SetWindowsHookExから呼び出さなくてはいけないんです。
でも、SetWindowsHookExはSystemHook.dllの関数で、普通にSystemHook.dllから呼び出せないので、
LoadLibraryExを使用してメモリ上に読み込んでハンドルを取得しないといけないんです…
ちょっとややこしいですね。
>>743 …VBだけじゃもったいなくないかい?(w
俺も VC++はじつは使えんのよ。
ツールとして強力なのはわかるんだが、使いづらくてね。
C/C++はBCCで弄って FreeSoftは出してるけど、仕事ではもっぱら VB+RDBMS。(w
> システムフックは、
単に SetWindowsHookExを呼ぶと、自Threadしかフック出来ないよね。
# これはこれで使えるんだけど。
SystemHook.dll…は、MSDNじゃでてこんのだけど、Cとかで作る標準DLLのこと?
>>743 マルチスレッドはVB5の話?
VB6からはCreateThreadで作ったVBのスレッドは
必ず落ちるんで使いもんにならんのよ。
>SystemHook.dll
これがさっぱり分かんない。Windowsについてないみたいだけど。
自作のDLLならVBだけじゃなくなるしなあ。
>>744 >…VBだけじゃもったいなくないかい?(w
まじめにVBやってる奴には普通のことだと思われ。メッタニイナイケドナー
746 :
デフォルトの名無しさん :02/03/04 12:52
>>732 お答えありがとうございます。
でも、コードの記述の仕方がわかりません・・・
DataGrid1. の次にUpdateがでないし、いろいろ記述してみましたがわかりません。どう記述すればよいですか?
747 :
デフォルトの名無しさん :02/03/04 12:57
>>732 あ、できました!
DataGrid1.Enabled = False ですね。
でも、そうするとデータグリッド内をクリックもできなく、スクロールも
できなくなりますね・・・。
レコードの改ざんのみを制御することはできるのでしょうか?
よろしければ、教えてください。
>>742 VBの標準機能だけじゃ出来ないから自作すれ。
APIならCreateWindowExとか、VBらしくFormとか。
>>747 AllowUpDate=Falseでも出来ない?
SystemHook.dllはWin標準のDLLではないようです。
すいません(恥
NET上で公開されている(?)DLLのようです。
いつのまにかPCに入っていたのでそのまま使ってました。
>>734 VB6でマルチスレッドの落ちる確率は、100%ではないですよ。
まぁ75%くらいだとは思うけど(W
>>746 AllowUpdateプロパティです。
なんでVBってマルチスレッドを使用すると落ちるのだろう? どっかに説明あるかな。実験してみたいんだけど、 なんかマルチスレッドのコードがめんどくさそう。 どっかにサンプルないかな。
>>750 >VB6でマルチスレッドの落ちる確率は、100%ではないですよ。
exeにしても?75%てのは時間じゃないよな?
25%はずっと動き続けるんだよな?
ふーむ。出来たらサンプルほしいんだけど無理?
どっかに同じサンプルを置いてるHPがあるなら
それでもいいんだけど。
"ディストリビューション ウイザード"で作ったパッケージをFDで配布したのですが。 Windows2000だとセットアップできないそうなんです。 なので、exeファイルだけ取り出してあげたら、起動できないそうなんです。 原因が全くわからないので教えてください。できれば対処法も。
>>753 exeだけで実行できないんならコードが悪いんでないの?
2000で使えないAPIやら使ってないか確認すれ。
>>753 どーいうプログラムかわからんからアレだが、
単純にランタイムが入って無いだけじゃねーの?
Vectorあたりでランタイム拾って入れれ。
VBだけじゃなく、JavaなりC++なりOOPもいじっとけってことだ。
main文で配列名を指定したうえで、その配列にサブルーチンの戻り値を入れたいのですが、 for i=0 to n F(i)=function( ) next i とするしかないですか? これだと、何度もfunction( )を呼び出さないといけないので、 一発で、call文か何かで、main文で指定した配列名の中に 戻り値が入って帰って来るような方法は無いですか?
>>757 Dim ret As XXXXX
ret = function()
For i = 0 To n
F(i) = ret
Next i
ってこと?
>>758 すみません。説明足らずでした。
Dim W(n) As XXXXX
DIm F(n) As XXXXX
For i=o to n
F(i)=function(W( ))
Next i
とすれば、W(i)を引き数として処理をした結果がF(i)に入れられますが、
もし、戻り値を、値でなく、配列で返せたらベストなのです。
>>760 function MyProc() as Long()'←配列を返す
これか?
>>760 配列は引数で渡した方がいいと思うけど、
Private Function fncHoge() As Byte()'←この括弧がミソ
Dim abytHage() As Byte
.....
fncHoge = abytHage()
End Sub
Sub Main()
....
F()=fucHoge()
って感じでできるよ。
763 :
デフォルトの名無しさん :02/03/04 16:12
>>757 何がしたいのかわからんが、
Private Sub Form_Load()
Dim F() As Long
Call farr(F())
End Sub
Sub farr(arr() As Long)
Dim a
Dim i As Long
a = Array(0, 1, 2, 3, 4, 5)
ReDim arr(UBound(a))
For i = 0 To UBound(arr)
arr(i) = a(i)
Next
End Sub
もしくは
ret=function( )
for i=0 to n
F(i)=ret
next i
761,762さん、本当にありがとうございます。 括弧の点はどのキーなのでしょうか? ど素人ですみません。
>>613 >>622 さん サンプルで動作確認できました。
少し手を加えて、思った動作を実現できました。
ありがとうございました。 m(__)m
まじめにVBやってる数少ない人間をさらに減らすような発言悪いw 「VBのスキルが高い」と言うのは実は「VBでスキルを高める奴が少ないので 相対的にスキルが高く見える」ことが多いことに気づいてほしい。 VBで大抵のことが出来るようになるにはVBの裏技的なことをしなきゃいけないんだけど、 他の言語ではそんなスキルは意味がないことがほとんど。 さらにWindowsはCで開発することを前提にして作られてるので、VC++で作る方が 自然であり、Windowsが提供していることはVC++ならすべて使えるように作られている。 高度なWindowsアプリを作るならVBを極めるよりもVC++を極める方が自然で楽。 だからVBでスキルのある奴が少ない。 VBに自信を持つのはいいことなのだが、以上のことをふまえて頑張ってほしいな、と思う。 長文スマソね。昔の俺は何にも知らないくせに「VBなら負けないぜ!」とか思ってたから、 つい老婆心が。
763 さん 本当にありがとうございます。 前半のやり方をやってみます。
>>766 VBでスキルが高いというのはAPI駆使したり、メモリを直接いじったり
することなのか?
俺的にはVBでスキルが高いというのはクラスモジュールやImplementsや
ActiveXを使いこなすことなんだが。
あと、ちゃんとした設計をするとか、デザインパターンを適用するとか
vbUnitによるユニットテストを行うとか。
こんなのは、裏技でもなんでもないしVB以外でも通用する。
俺はVBをまじめにやっているし、それなりにスキルもあるつもりなんだが
APIはほとんど使っていない。それにAPIを使用しなくても不自由はしない。
APIを使ってVB特有な裏技的なことをするのがスキルが高いとは思わないし、
それよりも準オブジェクト指向言語の一つであるVBという言語
(言語としてみれば他のオブジェクト指向言語とそんなに差は無い)
を使いこなすのがスキルが高いと思っているのだが間違っているだろうか?
>>768 ああ、そりゃそうだね。ゴメソ。
あれはスキルがある=VBで何でも出来る
っていうことを前提にしてるんで。
言葉使い間違ったな。
>>769 いや、そんなに間違っていないと思う。
というのは、ほとんどの人の「VBのスキルが高い」ってのは
APIを駆使したり、そうしたことになっていると思うから。
でも俺的にはVBで他の言語と同じ事をするために要する技術は
どの言語でも同じレベルであって高いとみなしてないんだよね。
VBでやるのが難しすぎるのであればVB使わないし。
>>752 すいません。どこでお勉強したのかわからなくなっちゃって。
確かクラスになっているものが結構安定していたと思います。
>>734 自分が知っている言語の中では、VBだけは絶対の自信を持っている。という意味でした。
APIが利用できるかどうか。というのは、自分もVBのスキルには直結していないと思ってます。
NETで調べればサンプルコードなんていっぱい手に入るしね。
>>766 の言う、クラスやImplementsも理解して使ってるつもりだし、
ActiveXDLLを作って、よく使うAPIをカプセル化して業務アプリに組み込んだりもしてます。
>高度なWindowsアプリを作るならVBを極めるよりもVC++を極める方が自然で楽。
これはよくわかるし、人から「VBでやる必要ない」と言われる理由だと思います。
でも、業務アプリを作る上で、Windows上の高度な機能って使いますか?
ユーザのわがままで、ListViewに2つチェックボックスがほしいとか、
マウスのホイールでスクロールしたいとか、それくらいだと思います。
俺の中で「高度なWindowsアプリ」って言うのは、デバイスとか扱うくらいなんだけど…
そんなソフトなら、俺だってVBで作ろうとはしませんよ。
2chでマジレスしてスマソ
VB初心者質問スレ Part6 ~~~~~~~~~~
んじゃまあ
>>772 も言ってるんで名無しに戻る。
結構楽しかったっす。たまにはこういう議論もしたいなあ。
答えるだけってのもイマイチだし。
追記:今PhotoShopみたいなんをVBで作ってるんで
そんなん見かけたら「あ、あいつだな」とか
思ってくれると嬉しい。では。
そうですね。 荒らすような真似してスマソでした。
775 :
デフォルトの名無しさん :02/03/04 19:12
'_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/再開_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
776 :
デフォルトの名無しさん :02/03/04 20:02
高度な話が終わったところで初心者臭い質問を一つ。 戻り値を必要としない場合に関数を呼ぶ場合、 Call 関数名(引数1, 引数2,) って感じに呼ぶのと、 関数名 引数1, 引数2 って呼ぶの、どう違うんですか?
Call 関数名(引数1, 引数2,) ↓ Call 関数名(引数1, 引数2)
ちょっと見てない間に祭があったのか? くそう、乗り遅れた。
>>729 実験してみたら、ちゃんと取れたよ。
>>731 あらかじめ DefInt i-p しておくという手もある。
素人にも玄人にもおすすめできないけど。
>>776 同じ
戻り値が必要なときには括弧をつけるし、括弧つけないと見にくいので
Call 関数名(引数1, 引数2)の方がいいと思うよ。
GetScrollPosでTextBoxの横スクロール位置は取得できました。
でも、このスクロール位置の値から”何ドットスクロールしたか”を導きたいんですが、
できますか?
ちなみに
>>723 の方法だと、確かに何文字目までスクロールアウトしてるかは取得できるんですが、
あくまで何文字目かなので、アバウトなスクロールドット数しか分からないのです。
(横(水平)スクロールだと、文字の半分だけスクロールアウトしてる場合などがあり得る)
>781 うーん…… (1) TextBoxのクライアント領域の幅をpixel単位で求める (2) GetScrollInfoでスクロールバーの「ページ」部分の長さ(nPage)を求める (3) GetScrollPosでスクロール位置を求める(GetScrollInfoで一緒に求めてもよい) として、 (3)の結果 × { (1)の結果 ÷ (2)の結果 } でたぶんドット数になるんじゃないかな。試してないけど。
ってこれ、そのままドット数なのか・・・な?
う、すれ違った。 いやあのなんかですね、GetScrollPosで取得した値がそのままドット数っぽいです。 なんか。 ちょっとまだテスト中ですけど。
どうやらGetScrollPosで取得した値がそのままスクロールアウトしたドット数だったみたいです。
思い通りに動きました。
>>782 さんには非常に悪いことしちゃったぽいですね、申し訳ないです。
786 :
デフォルトの名無しさん :02/03/04 22:00
ファイルリストボックスのファイルをクリックすると リッチテキストにファイルの中身を表示するようにしたいのですが 下記のモノではリッチテキストにファイルのパスが出るだけでうまく いきません。なにぶん始めたばかりで初心者な質問かと思いますが どこがいけないのか教えていただけると幸いです。 Private Sub File1_Click() SelectedFile = File1.Path & "\" & File1.FileName RichTextBox1.Text = SelectedFile End Sub
>>786 中身を見るにはOpen〜Get〜Closeを使うなり。
ファイル入出力をもうちょっと勉強すれ。
>>786 惜しい。RichTextBox1.LoadFile hoge.txt だ。
つーか、msdn読め。
>788 おっと、そんなんあったのね。失礼。
>>788 ありがとうございます。
解決いたしました。
msdnの2枚目のディスクを割ってしまいましてうまいこと読みだせませんでした。
791 :
デフォルトの名無しさん :02/03/04 22:28
9xで作ったプログラムをNTやXPで起動すると 文字化けしてしまいます。 XPで見るにはどうすればいいのでしょうか?
793 :
デフォルトの名無しさん :02/03/04 23:06
>>776 関数名(引数1, 引数2)
としてもエラーにはならないんだよね。
ByVal になるみたいだけど。
794 :
デフォルトの名無しさん :02/03/04 23:35
795 :
デフォルトの名無しさん :02/03/04 23:57
796 :
デフォルトの名無しさん :02/03/04 23:57
797 :
デフォルトの名無しさん :02/03/05 00:07
以前 wavファイルを再生する方法として「sndPlaySound」というものを教えていただいたのですが、 これは最近よく聞く"API"というものですか?
>>797 長い音は鳴らせないのでそのつもりでな。
警告音とか効果音に便利。
800 :
デフォルトの名無しさん :02/03/05 00:21
ブラウザ作ってんだけど右クリックでソース(テキスト)って 見られるよね。それをボタン押すとソース見られるようにしたいんだけど どうしたらいいんですか?
801 :
デフォルトの名無しさん :02/03/05 00:24
>>800 取得したhtml文書をメモ帳とかエディタで開くだけ。
>>672 です
>>731 さん
コード(
>>709-710 )を見て頂いてありがとうございます。
ご指摘通り変数を1つずつIntegerで宣言したら、倍近く速くなりビックリしました。
ものぐさはだめですね。ありがとうございました。
>>712 =
>>715 =
>>724 さん
度々ありがとうございます。
確率・統計の組合せは苦手を通り越して、サッパリなんですよね(W
そちらも高校から勉強し直します。
LeftとMid関数はそういう事にも使うんだと知りました。
まだ選択除去法はピンときませんがもっと勉強します。
>>800 Private Sub Command1_Click()
Winsock1.Connect "www.2ch.net", 80
End Sub
Private Sub Winsock1_Connect()
Winsock1.SendData "GET / HTTP/1.0" & vbCrLf & vbCrLf
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim A$
Winsock1.GetData A
Text1.Text = Text1.Text & A
End Sub
フォームにWinsockコントロールとText1とCommand1をぽとりぺたして、
Text1のMultiLine=Trueにして、このコードを貼れ。
細かい所は問題あるから自分で調整するよーに。でわ健闘を祈る!
804 :
デフォルトの名無しさん :02/03/05 00:40
>>802 全ループは、こうだった。
7*8*8*8*8*8*8*8 = 14,680,064回
フラグ法
flag_k(7) As Boolean
例えば 3を使ったら、Falg(3) = True とする。
ただ、各ループごとにフラグ配列を用意して、各ループに入ると同時に、
外側のフラグ配列をコピーする必要があって、これに時間がかかるみたい。
動的配列なので、コード自体は flag_j() = flag_i() ですむんだけど。
選択除去法(勝手に名前つけただけ)
"01234567"から1を使ったら"0234567"とする。
取り出しは、Mid(文字列, ループ変数+1, 1)でいいけど、取り出された後の
文字列を取得するのがちょっと面倒かな。勉強にはなると思うけど。
コレクションの代用ね。
>>793-796 関数名(引数1, 引数2)はエラーです。
関数名 引数1, 引数2 はエラーになりません。
Call 関数名(引数1, 引数2)はエラーになりません。
関数名(引数1)はエラーになりません。
理由はCallをつけないときは括弧をつけたらいけないからです。
関数名(引数1)がエラーにならないのは、
Call 関数名( (引数1) ) のCallと外側の括弧をはずしたものとみなされるからです。
引数が二つある場合「関数名 (引数1), (引数2)」となります。
関数名 (引数1) = Call 関数名( (引数1) )とした場合、
引数がByRefでも括弧をつけているためByValになります。
動けばなんだっていいのさ〜ヽ(´ー`)ノ
>>806 そういうことを言うやつに限って動かなくてはまるという罠
>>805 そう。エラーにならないのは、引数1個の時だけだった。
でも、どうしてカッコを付けると ByValになるの?
これが原因のバグってけっこうあるかも。
正確にいえばVBが内部に変数を用意してそのRefがわたされる。 subhoge (引数+0) とか書くのと同じことです。
>>808 かっこ「 ( ) 」という演算子だと思えばいいんではないかな。
Sub subHoge(ByRef i As Integer) だったとして、
Call subHoge( j ) は参照渡し、
Call subHoge( j + k ) は値渡し、
Call subHoge( ( j ) ) も値渡し。
>>808 ByValになるっていうのは言い方が悪かった。
たぶん内部的にはByRefで処理されている。
なぜByValのように見えるのかというと、括弧で囲むことで
変数がByRefで渡るのではなく、(変数)という演算結果が渡されるから。
Call foo( Clng(A) )←この場合Aが変わらないのは納得いくでしょ。
Call foo( (A) ) ←これはAがfooの引数の型に変換されるだけ。
> これが原因のバグってけっこうあるかも。
「基本はByValをつける」を守っていればあまり問題は無いと思う。
ただ Sub foo(i As Long) のような関数を
Dim i As Integer: Call foo(i) じゃ呼べないのに
Dim i As Integer: foo (i) だと呼べたり
Sub foo(udt As UserDefineType)のような関数を
Dim udt As UserDefineType: Call foo (udt)だと呼べるのに
Dim udt As UserDefineType: foo (udt)じゃ呼べない
という結果を見てユーザ定義型の場合はCallをつけなければいけないとか
変な勘違いをしている人がいるかもしれない。
>>811 深い。深すぎて、理解しきれない。
なんとなくならわかりかけてきたような気もするけど、気のせいかも。
>>798 >>799 ブロック崩しゲーム(アルカノイド風)で球がはね返るときにwavファイルを鳴らそうと思ったんですが、
sndPlaySoundではどうも処理に時間がかかるようで、壁やブロックに当たるところで少しのあいだ止まってしまうのです。
読み込みを先にしておけば。
815 :
デフォルトの名無しさん :02/03/05 06:40
>>803 わかった
やってみる、ありがとうおじさん
>>817 フラグに SND_ASYNC を入れるといいぞ。
同期再生だと、再生が終わるまで関数が帰ってこない=固まる。
非同期再生だと、鳴らし始めたらすぐ帰ってくる。
あとは自分で検索してしらべた方が身になるよ。
819 :
デフォルトの名無しさん :02/03/05 16:25
質問です。 VB6+SP5でPrinterオブジェクトを使用して B4サイズで印刷しようとしています。 (使用するプリンタのデフォルト用紙サイズはA4) WinNT4.0では PaperSize=12 (=VbPRPSB4) でB4出力できたんですが Win2000の場合、同じプリンタなのに PaperSize=126 と指定しないと出力できません。(VbPRPSB4を代入したらエラー) 「PaperSize=126」はプリンタのデフォルト用紙サイズをB4にして PaperSizeを求めたら出てきました。 このように、プリンタが同じでもOSが違う(ドライバが違う?)と 用紙サイズの指定が上手くできないのです。 「PaperSize=126」はプリンタ独自のB4サイズの値なのでしょうか。 もしそうだとすると、どのプリンタを使用するにしても プリンタごとの「B4サイズの値(12なり126なり)」を 求めることはできないのでしょうか? GetPrinter使ったりするのかな・・・ とは思ったんですが、行き詰まってます。 意味不明な長文ですみません・・・
>>819 漏れも昔ソレで困った事があった。
その時はマニュアルに「プリンタの設定はA4にしてください」って書いて終わりにしちゃった☆
テヘッ♪
821 :
デフォルトの名無しさん :02/03/05 16:37
ファイルリストボックスの中身をリッチテキストに表示して それをクリックボタンを押して保存するときにRichTextBox1.SaveFile で保存しようとしているのですがうまくいきません。 1というファイルが出来てその中に保存されています。 その1というファイルを開くと文字化けしています。 リッチテキストで開くとうまく表示されます。 どうしてうまく保存されないのでしょうか。
822 :
デフォルトの名無しさん :02/03/05 16:53
>>821 object.SaveFile(pathname[, filetype])
SaveFile メソッドの構文の指定項目は次のとおりです。
filetype 省略可能です。保存するファイルのタイプを整数または定数で指定します。設定する値については、次の「設定値」を参照してください。
設定値
filetype の設定値は次のとおりです
rtfRTF 0 (既定値) リッチテキスト形式 (RTF)。リッチテキスト ボックス コントロールの内容を .rtf ファイルとして保存します。
rtfText 1 テキスト。リッチテキスト ボックス コントロールの内容をテキスト ファイルとして保存します。
ヘルプ見てくれ。
しっかり書いてあるから。
RichTextBox1.SaveFile "C:\hogehoge\hoge.txt",rtfText
見たいな感じです。
823 :
デフォルトの名無しさん :02/03/05 22:30
>>823 直リン不可。2ch不可。回線遅い。
今後気をつけましょう。
826 :
デフォルトの名無しさん :02/03/05 22:55
828 :
デフォルトの名無しさん :02/03/05 23:01
厨房質問です。 ファイルの生成の仕方がわかりません。 ファイルに書き込みたいんじゃなくて生成したいんでう。 教えてください。
>>828 Open 開きたいファイル for binary as #1
close #1
830 :
デフォルトの名無しさん :02/03/05 23:06
>>827 URLの管理用に作ったものです。
簡単な検索機能が付いてます。
>>829 わかた、やってみるよ。ありがとう風のおじさん
LZHファイルです。解凍するといくつかのファイルが入ったフォルダが出来ます。 そのなかに、そーす.txtというファイルが入ってます。 そこにすべての元データが入ってますので、危険かどうかは分かります。 使うときは、使い方.txtを見てください。自動セットアップなんて高等技術はできませんので 手動でセットアップになります。
>>832 落としてみたけど、パス決めうちかよ!
プログラムのあるディレクトリパスはApp.Pathで取れますがな
>>830 K大学かい?exe作るときは注意すれ。
他にもC直下に置くなとかボタン置きすぎとか
Captionが無いコントロール山ほどあるとことか
デフォルトボタンとキャンセルボタン作れとか
つっこみ始めればきりがないが。
まあでも最初のアプリはこんなもんか。頑張れ。
>>834 ありがとうです。ご意見、ありがたく頂きます。
C直下に置いたことについてですが
起動時に1つだけどうしても読み込まないとだめなファイルがあって
そのファイルの場所を固定しなければならなくなり、C直下に置いてしまいました。
>>832 ソースをざっくり見たが、かなり無駄が多いな。
ちゃんと書けば今の量の10分の1以下に抑えられるだろう。
細かい所を上げるとほんと、きりが無いけど少しだけ。
関数を作ってないみたいだね。知らないのなら関数に手をだしてみたら。
あと、ファイル番号(#???ってやつ)はFreeFile()で取得した方がいいよ。
>>837 ありがとうございます。
関数ですね。難しそうですが、MSDN見ながらやってみます。
>>672 です
>>804 さん度々ありがとうございます。
アドバイスに従って、選択除去法を書いてみました。
最初、If関数でループの変数が、まだ残ってる数字の中にあるかという考えで書いたんですが、
それだと、前のと変わらない事に気付きまして、下の様に書き直しました。
以前のものよりさらに速くなりましたが、考え方はこんな感じでいいでしょうか?
>>804 さん始めレスくださったみなさん大変勉強になりました。ありがとうございました。
Dim sData As String '書込み用データ
Dim strBuff(6) As String '数字格納データ
Dim sKumiawase(7) As String '残りの組合わせ文字列
Dim i As Integer 'ループ用カウンタ1
Dim j As Integer 'ループ用カウンタ2
Dim k As Integer 'ループ用カウンタ3
Dim l As Integer 'ループ用カウンタ4
Dim m As Integer 'ループ用カウンタ5
Dim n As Integer 'ループ用カウンタ6
Dim o As Integer 'ループ用カウンタ7
Dim p As Integer 'ループ用カウンタ8
For i = 1 To 8
sKumiawase(0) = "01234567"
strBuff(0) = Get_Number(i, sKumiawase(0), sKumiawase(1))
For j = 1 To 7
strBuff(1) = Get_Number(j, sKumiawase(1), sKumiawase(2))
For k = 1 To 6
strBuff(2) = Get_Number(k, sKumiawase(2), sKumiawase(3))
For l = 1 To 5
strBuff(3) = Get_Number(l, sKumiawase(3), sKumiawase(4))
For m = 1 To 4
strBuff(4) = Get_Number(m, sKumiawase(4), sKumiawase(5))
For n = 1 To 3
strBuff(5) = Get_Number(n, sKumiawase(5), sKumiawase(6))
For o = 1 To 2
strBuff(6) = Get_Number(o, sKumiawase(6), sKumiawase(7))
sData = strBuff(0) & strBuff(1) & strBuff(2) & strBuff(3) & strBuff(4) & strBuff(5) & strBuff(6) & sKumiawase(7)
Print #FileNumber, sData
Next o
Next n
Next m
Next l
Next k
Next j
Next i
Public Function Get_Number(i As Integer, sKumiawase1 As String, sKumiawase2 As String) As String
Dim sLeft As String '取り出した数字の左側の文字列
Dim sRight As String '取り出した数字の右側の文字列
Dim iMojisuu As Integer '全体の文字数
iMojisuu = Len(sKumiawase1)
sLeft = Left(sKumiawase1, i - 1)
sRight = Mid(sKumiawase1, i + 1, iMojisuu - i)
sKumiawase2 = sLeft & sRight
Get_Number = Mid(sKumiawase1, i, 1)
End Function
>>840 たったあれだけのヒントでよく完成しましたね。
関数化した点を除けば、ほとんど同じです。
細かいことを言えば、Midって長さを省略できるんですよ。
それと、バリアントが返るMidより、Mid$のほうがちょっと速いです。Left$も同様。
さらに、ループ変数もIntegerよりLongのほうが速いです。CPUもOSもVBも32bitですから。
>>672 です
>>804 =
>>841 さん。即レスありがとうございます。
お陰様で大変勉強になりました。
この選択除去の仕方は、次に作りたい物にも応用が利きそうです。
また、何かあった時はよろしくお願いします。
843 :
デフォルトの名無しさん :02/03/06 11:14
お前らEnum使ってますか? 最近知って便利さにビクーリしたよ
0という数字から、それに対応する定数の名称の文字列 (例えばvbDefaultトカ)を取得する事はできますか?
845 :
デフォルトの名無しさん :02/03/06 12:09
>845どうもありがとう。 特に意味は無いんです。できるのかなぁっていう興味だけで。
>>818 ありがとうございました。勉強してみます・・・。
848 :
Enum...... :02/03/06 15:53
public Enum Hoge aaa=1 bbb=2 End Enum sub Test(p as Hoge) end sub --------------------------------------- 1・Hoge.って打ってみ 2・dim a as Hoge:a= って打ってみ 3・call test(って打ってみ
今、vb2をやらされてます。 印刷機能を改良してます。 サンプルとして、vb5のソースを貰ったんですが、 API(OpenPrinter,GetPrinterなど)が、ことごとく使えません。 プリンタの設定(使うプリンタ、用紙サイズ、縦・横)を変更したいんですが、 ここらへん詳しい方いらっしゃいましたら教えてください。
850 :
デフォルトの名無しさん :02/03/06 16:11
851 :
ツリービューについて :02/03/06 17:07
ツリービューを使ってるのですが ノードの2番目を選択させる方法がわからないので教えて下さい。 tre.Nodes(2).Selected = Trueで うまくいくと思ったのですがうまくいきません。 マウスでノードをクリックしたような事をプログラムでやりたいです。
>>845 無理じゃないよ。ほれサンプル。最善のコードじゃないかもしれないけど。
「TypeLib Information」を参照設定してな
Private Sub Form_Load()
Dim tli As TypeLibInfo
'Set ti = TypeLibInfoFromRegistry("{FCFB3D2E-A0FA-1068-A738-08002B3371B5}", 6, 0, 9)
Set tli = TypeLibInfoFromFile("C:\WINNT\System32\MSVBVM60.DLL")
Call PrintConstantFromValue(tli, 0)
End Sub
Private Sub PrintConstantFromValue(ByVal tli As TypeLibInfo, ByVal Value As Long)
Dim ci As ConstantInfo
Dim mi As MemberInfo
For Each ci In tli.Constants
For Each mi In ci.Members
If mi.Value = Value Then
Debug.Print ci.Name, mi.Name
End If
Next mi
Next ci
End Sub
853 :
デフォルトの名無しさん :02/03/06 19:01
すみません、クリスタルレポートで作ったファイルって、 やっぱクリスタルレポートをインストールしている環境じゃないと 動かないのでしょうか。 もしそうなら、あんまり意味が無いような気がするけど。。。
854 :
デフォルトの名無しさん :02/03/06 19:06
>>853 だからセットアップexeを作る必要がある。
しかしそれが悲劇の始まり
>>854 うん?setup.exeって?クリスタルレポートで、ってことですか?
そんな機能あったっけ?
856 :
デフォルトの名無しさん :02/03/06 19:34
>>855 『クリスタルレポートで』か。
『クリスタルレポートを使った』と勘違いした。すまん
あ、クリスタルレポートを「使った」です。多分。 VBからPrintたたくソレです。 普通に作ったファイルなんですが。
858 :
デフォルトの名無しさん :02/03/06 20:52
>>857 VB6ならプログラム→vb6→vb6Tool→ディストリビューションウィザードで
setup.exeが作れるので、それに栗スタルレポートを入れればヨイ
ムホッ、ありがとうございます。 明日会社でやってみます。
860 :
デフォルトの名無しさん :02/03/06 22:16
昨日からVBやり始めてとりあえずソースエディタでも作ろうかと思ってる。 リッチテキストコンポーネントでエディタ部分作るんだけど予約語をリアルタイムで色つけたいと思うんだけどできるかな? 読み込み時にTextをリッチテキストフォーマットにすることは出来たんだが・・。 たとえば switc と入れて最後にhをつけた瞬間にswitchが赤色に変わるとか やっぱVBでは細かいことは出来ないのかな? あとリッチテキストフォーマットの詳しい日本語説明のページ誰か知らない? googleで検索しても全然ひっかからね〜〜・・・、MSDNのは英語だし・・ リッチテキスト自体もう死んでいくフォーマットだからかな
>>860 イベントでチェックすれ。
全部自前で描画してもよいよ。
862 :
デフォルトの名無しさん :02/03/06 22:37
>>861 横レスで申し訳ないのですが、テキストボックスで
2文字目から5文字目まで赤。とかできるんですか?
>>862 標準テキストボックスで普通のやり方したら無理。
API使いたくないなら我慢すれ。
(もう一個テキストボックス作る、とかいう方法もある。)
>>862 リッチテキストコンポーネントならできるよ
自分でリッチテキストフォーマットで書かなきゃならないようだけど
と言うかそれしか知らない
865 :
デフォルトの名無しさん :02/03/06 23:20
Ping(Pingじゃなくてもコマンドなら何でも)をうちたいのですがWin95/98とかだと普通に実行できるのですが NT系だとうまくいきません。 98やNT系の両方で使えるようにしたいのですがこの場合どのように すれば良いのでしょうか?
866 :
デフォルトの名無しさん :02/03/06 23:28
>>865 メインは1行なんだから、コード見せるべし!
たぶん環境変数COMSPECを使うといいよ。
>>865 前にShell関数でPing打つコード書いたがスレと番号がわからんかった。
>>866 の回答+Environ関数を合わせて使う。
VBで「テトリス」みたいなのを作ってみたいのですが、ブロックを何で作ればいいかわかりません。 またブロックを回転させる方法、他のブロックとの衝突を判定するアルゴリズムのヒントをください。
テトリスはむずかしい 初心者はこんなのから作ってみれ、みたいなのがあれば教えてほしいです。 もちろんゲームに限りません。
870 :
デフォルトの名無しさん :02/03/07 03:03
>>868 >ブロックを何で作ればいいかわかりません。
Lineメソッドで■を描いてもいいし、ビットマップファイルをPictureBoxに
読み込んでおいて、PaintPictureメソッドで切り出して転送してもよい。
#ある程度、プログラムが動くようになったら、API関数のBitBltを使って、
#高速化すればいい。(←はじめたばかりなら#書きのところは気にするな)
>ブロックを回転させる方法
高校数学で習う回転の公式。
あるいは、単純にあるブロックの回転後の位置のパターンを全部用意してもOK。
>他のブロックとの衝突を判定するアルゴリズム
ブロックの管理は、例えば画面が横x縦を10x20とすると
そのサイズ + 左右上下2マス分だけ多い目の2次元配列を用意する。
で、2次元配列の中の数値の意味を、
・0なら何もない
・1なら移動中のブロック
・2なら固定されたブロック
・3なら画面の上下左右の壁
といった風に意味を決めておく。
ブロックを(上下左右に)移動させるときには、
各ブロックの移動後の位置の配列の中身をチェックして、
2や3に移動するブロックがあったら、移動不可とすればよい。
871 :
デフォルトの名無しさん :02/03/07 03:05
>>869 まるっきりの初心者なら、
カレンダー、電卓、(人対人の)オセロとか。
>>868 このスレにインベーダーの基本になるソースがあるから、
それを元に改良してみたら?
参考になると思うよ。
最初、えらい苦労してカレンダー作ったなぁ。。。
874 :
デフォルトの名無しさん :02/03/07 12:13
Dim varname() ←で宣言された配列があるのですが、 コード上のある時点で、この変数が「ReDimで再定義されたかされていないか」、 つまり要素数を与えられたかそうでないか判断するにはどういう手法があるでしょうか? 例えば If UBound(varbane()) > 1 then とか記述すると、「インデックスが有効範囲にありません」というエラーになってしまいます。
875 :
kuromo :02/03/07 12:21
テトリスよりカラムス(コラムス?)の方が簡単。
>>876 >プログラムをカッコよくするイけてるTips
これが気になります
>プログラムをカッコよくするイけてるTips 文章になってんのか?
879 :
デフォルトの名無しさん :02/03/07 13:44
>>874 他にスマートなやり方があるのかもしれないけど、力ずくでやるなら
Function ubound_ex(aaa, Optional bbb) As Long
On Error GoTo err_ubound_ex
ubound_ex = UBound(aaa, IIf(IsMissing(bbb), 1, bbb))
Exit Function
err_ubound_ex:
ubound_ex = 0
End Function
こんな感じかな?
ubound_ex(varbane()) とすれば、
要素数が与えられていない時は0が返ってくると思う。
880 :
デフォルトの名無しさん :02/03/07 13:55
>>875 コラムスは消す時の判定が面倒ですよ。
ブロックの色も覚えておかなくてはいけない。
その点テトリスは連鎖も無いし、横の列だけ見てればいいし、
ブロックの種類というか色も考慮しなくてよい。
テトリスのほうが簡単だと思うなぁ。
昔DOSのテキストで作った感じでは、
初心者の定番のブロック崩しやインベーダーよりも
テトリスのほうが簡単だった。
>>879 な、なるほど……
場合によると
Redim vername(0)
とかが実行される可能性が有るのでエラーセクションの返り値を
-1にしましたが、ほぼそのままコード使わせていただきました。
どうもありがとうございます。
882 :
pingうちたいわけじゃないがEnvironってはじめて知ったもので・・・ :02/03/07 15:40
>>102 これってコマンドボタンかなにかにくみこめばいいのか?
>>870 ありがとうございます。
ブロックの描画で学ぶことたくさんありそうです。
ひとつずつ勉強していきます。またいろいろ教えてください。
>>871 電卓は作りました。でもいきあたりばったりで、適当に変数をポコポコ作ってテストをくりかえしてたら
偶然うまいこと動いたって感じでした。かなり無駄の多いコードだと思います。カレンダーは本で見たかぎり、
日付の関数とかややこしくて逃げちゃいまちた。今度作ってみようと思います。
>>872 インベーダーにも挑戦してみたいと思ってます。ブロック崩しが大体できたので。
ある処理を、無限に繰り返したい。 でも、操作があれば止めたい。 こーゆー時、どのようにするものなんでしょうか? 今、キーボードのスクロールロックキーのLEDを光らせて遊んでるんですが ずーっと点滅させ続けて、要らなくなったら止める、という操作が出来ず 悩んでいます。お助け下さい。
>>884 Private blnFlag as Boolean
'ボタン1の中
Do
DoEvents
'LEDを点滅させるコード
If blnFlag Then Exit Do
Loop
'ボタン2の中
blnFlag = True
886 :
デフォルトの名無しさん :02/03/07 21:08
相手のサーバの情報を取得するのにAPIを使えばいいというのは調べてわかったのですが その中のHTTPRequestに関するものがありません。 一応APIビューアで検索したのですがそれらしいものは見つけられませんでした。 これってどこにあるんでしょうか?それとも検索の仕方が悪いのでしょうか?
888 :
デフォルトの名無しさん :02/03/08 00:21
Accessのリンクテーブルを作りたくて、 Set catDB = New ADOX.Catalog catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & strDBLinkFrom Set tblLink = New ADOX.Table With tblLink .Name = strLinkTblAs Set .ParentCatalog = catDB .Properties("Jet OLEDB:Create Link") = True .Properties("Jet OLEDB:Link Datasource") = strDBLinkTo .Properties("Jet OLEDB:Remote Table Name") = strLinkTbl End With catDB.Tables.Append tblLink とすればいいのは判ったのですが、この時のリンク元に、 パスワードが設定されたMDBを使用したいのです。 どうしたらよいのでしょう?
>>885 ありがとうございす。
点滅させ続けたりが自由にできるようになりました。
つーかこんな単純なことでお世話になって申し訳ないです。
今後はもっと七転八倒してから質問に来ます。
失礼しました。
VBでperlのcryptと全く同じ結果を出す方法教えてマヂで。 API使ってもperlのと同じようには暗号化されないっぽいし・・・。
七転八倒しなくていいから、検索ぐらいすれば?
>>888 「VB MDB パスワード」で検索
>>890 「VB Crypt」で検索
892 :
デフォルトの名無しさん :02/03/08 08:43
>>891 検索してみましたが、パスワードつきMDBへのアクセス方しか見つけられませんでした。
catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & strDBLinkFrom _
& ";Jet OLEDB:Database Password = " & strPassword & ";"
では、リンク先のMDBの設定ですよね?
テーブルのPropertiesにはPassword設定できませんし……。
それとも、何か根本的に勘違いしてるんでしょうか?
>>890 ちょっと調べてみた限り、
>暗号アルゴリズムは、OS に依存する。
>例えば、FreeBSD は MD5。Linux,Solaris は、DES が使われる。
みたいなことが書いてありますが。
つまり、ハッシュ方法は処理系依存。Perlでも同一性が保証されている
訳じゃないみたい?
アルゴリズムはDESかMD5のようなので、がんばればなんとかなりそうですが。
すいません、ひょっとしてshell関数でバッチファイルは起動させられないんですか? 今試しているのですが、起動してくれないのです。 VBからバッチファイルを叩きたい場合はどうしたらよいのでしょう。。。
ShellExecuteで普通に開けるはずだが
>>896 手軽さとShell関数と似た使い勝手ということで、WinExec APIもいいかも。
推奨されない方法らしいけど問題ないでしょ。
ただ、ハンドルが帰ってこないので、BATファイルの終了待ちをしたい場合は
ShellExecute使う方がいいかな。
ところでさ、MSDNライブラリのShellExecuteの項目、変じゃない? 途中で
StartPageの解説に入れ替わってる…。
VC5付録のASCIIのAPIリファレンスも、VB用の定義記述がRegQueryValueEx
に入れ替わってたし、もしかして鬼門か?(^^;
VB6 SP5 で、WIN2000で、
コモンダイアログのプリンタ設定から設定した値が、
コントロールパネルのプリンタプロパティに反映されないんですけど。
そして反映されてないのにもう一度ダイアログ開くと、設定変更後の値がでます。
http://210.233.22.220/VBlabo/commonDLG/J042959.htm 調べた結果、NTでの上記の方法があったので試してみました。
すると、ダイアログから設定した値が、
ちゃぁんとプリンタプロパティにも反映されて、成功。と思えるんですが、
ここでもう一度ダイアログを開いてみると、設定変更前の値が表示されます。
今度はそのままマシンを再起動して次の各設定を見てみると、
プリンタプロパティの設定 → 設定変更後
アプリのダイアログ → 設定変更前
と、二つの設定の値がなぜか異なります。
おそらく二つの設定の値がどこかに保持されているようで、
ひとつはレジストリだとはおもうんですが、
もうひとつはどこにあるのでしょうか?
このような現象が起こる具体的理由について誰か知らないでしょうか?
また、この現象に対して、有効な策というものはないのでしょうか?
899 :
デフォルトの名無しさん :02/03/08 16:19
そのURLの「状況」のところに 仕様です って思いっきり書いてあるんで 素直に 仕様なのか〜って納得するんじゃ駄目?
,,,,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜′,,,,,,,,,,ミ,,゚Д゚彡 < メニューを表示せずにShortCutKey UU"""" U U \の機能を使いたいのですが、どうすれば? 今は、FormのKeyPreviewをTrueにして FormのKeyDownでCtrlとかShiftとかとキーの内容を コードで処理してますですが、 もちっと、スマートな方法はないかしらと、思ってます。 VB6の普通のアプリです。よろしくスコ
901 :
デフォルトの名無しさん :02/03/08 22:25
>>900 コマンドボタン?だったら、
caption="キャプション" & "&P"みたいな感じでショートカットキーの
設定ができたと思われ
∧ ∧ ・・・・。 ミ ゚Д゚彡 〜ミ,,,,uuミ ソリハ アクセラレータ では?
903 :
デフォルトの名無しさん :02/03/08 23:06
>>894 できるよ。
BATはスクリプトファイルで、実際に実行するのはコマンド・インタプリタ。
テキストファイルをプロジェクトに埋め込んで TextStreemに入れる方法ないですか? 外部に置きたくないけど モジュールに書くと編集が大変なんで 環境はVB6 SP5です
906 :
デフォルトの名無しさん :02/03/08 23:44
Toolberコントロールに並べたボタンをチェックボックスの用に使いたいんですが、 初めからチェックされた状態(ヘコませた状態)にしておく方法が分かりません。 Toolbar.Buttons(index).Style = tbrCheck で、チェックボックスの様な動きをするボタンに出来たんですが、 (クリックすればへこんで、もう一度押せば普通に戻る) コレをコードでヘコませる方法が分かりません。 えーと、具体的には前回の状態を保存して、前回ヘコませたままで終了してれば、 次回起動時にもヘコんだままで起動させたいんです。 当然、前回の設定を保存する方法とかはわかりますんで、 知りたいのはコードでチェックされた状態(ヘコませた状態)にする方法です。
>>906 Toolbar.Buttons(index).Value = tbrUnPressed
Toolbar.Buttons(index).Value = tbrPressed
ASPからMutex使おうと思って、VBでMutexをCreate、ReleseするCOM(ActiveX)をつくり COM+に登録しました。 ASPから呼び出しもうまくいってたんですが、実は問題があることがわかりました。 Mutexって作成したThreadなりProcessが開放されると自動的に開放されるはずなのですが、 この場合COM+のコンポーネントが作成元なので、呼び出し側できっちりReleaseしてあげないと、 Mutexが残ってしまいます。 これでは、呼び出し側が以上終了した場合のことを考えると恐ろしくて使えません。 うまいこと、このMutexを(自動的に)開放する方法はないもんでしょうか? Public Sub MutexOn() Dim PrevhMutex As Long PrevhMutex = OpenMutex(MUTANT_ALL_ACCESS, 0, "TestMutex") If PrevhMutex Then CloseHandle PrevhMutex Err.Raise 1 + 513 + vbObjectError, "TestCom", _ "Mutex作成済みです" Exit Sub End If m_hMutex = CreateMutex(0, 0, "TestMutex") End Sub Public Sub MutexOff() ReleaseMutex m_hMutex CloseHandle m_hMutex End Sub
>>900 ・VC++でやるとメッセージ監視して処理、って感じ。
・VBのイベントはVBがメッセージを監視してイベントに変換。
・KeyPreviewはフォームできーイベントを一括処理するために用意されたたもの。
なので、それがVBではスマートだと思う。そんなことで
サブクラス化したって仕方ないしねー。
>>900 Delフサギコさん、VBもいぢるんですね
| ̄ ̄ ̄ ̄ ̄ ̄|
| .ありがと |
|______|
>>904 さん
>>910 さん
∧,,∧.. .||
ミ,,゚Д゚ミ..||
ミつ づΦ
〜ミ ミ
U''''.U DelphiではKeyPreviewもShortCutイベントも
非表示MenuItemもAction.ShortCutもあって
WM_COMMANDあたりのメッセージも取れるので
VBでもなんか方法があるものかと
思ってみたりしたんですが、
素直にKeyPreviewでやってみますです。
>>911 さん、
不慣れですが、ぼちぼちとです。
だ、だれかリッチテキストの仕様の和訳どこかにないか知らないか・・? 探し疲れた・・
画面上(どこでも)でクリックした場所の色データを取得するには どうやったらいいんでしょうか。 検索してもなかなか見つからないです・・・
>>913 お疲れさま。漏れもさんざん探し回ったことあるけど、結局みつからなかったよ。
英語のドキュメントを一生懸命解読してなんとかしたです。
VBのRichTextBoxコントロールはWin9xとNT系で微妙な仕様の差とかあるから、
十分注意してくださいね。HangingIndentと改行関係が腐ってたな。
リソース漏らしてるのか、Selxxx系で繰り返し操作すると落ちたり、散々。
>>914 デスクトップウインドウのhDC取得して、マウスが操作された位置の色を取得すれば
いいんでないの?
マウスの操作を検知するのがキモかな。
>>917 なんか無責任な気がしてきたので、少し作ってみた。ヒントになるかな。
フォーム内で選択するのではなくて、マウスポインタ直下の値を直接取得したい
なら、サブクラス化とかが必要になると思う。
Option Explicit
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Me.Tag = IIf(Me.Tag = "", "lock", "")
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim hDcDesktop&
If Me.Tag <> "" Then Exit Sub
hDcDesktop = GetWindowDC(GetDesktopWindow())
Me.Caption = BitBlt(Me.hdc, 0, 0, _
Screen.Width \ Screen.TwipsPerPixelX, _
Screen.Height \ Screen.TwipsPerPixelY, _
hDcDesktop, 0, 0, SRCCOPY)
Call ReleaseDC(GetDesktopWindow(), hDcDesktop)
Me.Caption = Hex$(Me.Point(X, Y))
End Sub
おお!どうもわざわざすまんです。 さっそく使わせてもらいます。 マジさんくす
>>919 書き忘れてたけど、フォームのScaleModeをピクセルにしてね。
このままのコードだと実用的じゃないので、工夫してね。
BitBltのかわりにStretchBlt使うと拡大鏡みたいにもなるよ。色を
抽出したいなら、便利かもしれない。
921 :
デフォルトの名無しさん :02/03/09 12:07
>>915 やっぱ英語の仕様を読むしかないのか
英語の能力もプログラマには必須だと思い知らされたよ・・
レスthanks
922 :
デフォルトの名無しさん :02/03/09 21:50
VBに限ったことじゃないんだがプログラムの中でアイコンを使いたいんだが プログラムの中とかでフリーで使ってもいいアイコンとかってないですか? 探してはみたんだけどホームページ上のアイコンとかしかみつかりませんでした。
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ,,゚Д゚彡 < こんなんいかが?
ミ つ日 \___________
〜ミ,,,,,, ,,ミ
アイコンリンク
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999486538 の
>>3 VB以外のトコで書かないと読んでもらえないのでは?
って、俺のことか.....
924 :
デフォルトの名無しさん :02/03/09 22:51
∧,,∧ / ミ,,゚Д゚彡 < VBでテキストファイルアクセスで ミつ つ゛ \改行コードがCRLFじゃなく @ミ ミ CR単独とかLF単独でも ∪''∪ そのまま文字列に取得する方法 教えてください。 Line Input を使うと、かってにCRLFに変換されて しまうようなの。
∧,,∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < なんとなく、どんどこ、しつもーソ U ミ \____________ @ミ ミ ∪''∪ 動的配列についての質問です。 配列の中身を見るとき Dim A() as Integer For i=0 to UBound(A) 処理 Next i としているのですが ここでAが一度もReDimされてないと なんちゃらエラーが発生します。 ですので 'UBond で エラーになるならTrueを返す関数 Function ArrayNullCheck(Values() As Integer) As Boolean Dim A As Integer On Error GoTo Err: A = UBound(Values) ArrayNullCheck = False Exit Function Err: ArrayNullCheck = True End Function こんな関数を作って UBound(A)をする前に A配列の中身が定義されているかを調べているのですが なんか、実に遠回りの方法を 行っている気がします。 こんなとき、何かよいやり方はありますでしょうか。 よろしくお願いします。
>>925 行単位で取り出して行の終わりがなになのかが大切なシステムなの?
(ちょっと用途が思いつかん)
input()で一文字づつ取り出すか、
一気に読みこんでSplit()で配列につっこむのがいいかな。
もっと細かくやりたいならバイナリで読みこんで
自分で文字列なりに変換するしかないだろな。
VBはWindowsの仕様に有利な解釈を勝手にしてくることが多いから
(VBにかぎったものじゃないけどな、自分に有利に解釈するのは)
Windowsべったりなやつを作るときはすごく便利なんだけど、
それ意外の仕様を扱うときは逆に面倒になることが多いね。
>>926 VBではOnErrorでトラップするやり方が普通なんよ。
他の言語を使ってると気持ち悪いって気持ちはすんごくわかるけどな。
>>926 どの改行コード(CR,LF,CRLF)でも通すなら
dim tLines$()
dim astr() as byte
dim tstr$
open "hoge.txt" for binary access read as #1
redim astr(lof(1))
get #1,1,astr()
close #1
tstr=replace$(replace$(strconv$(astr(),vbunicode),vbcrlf,vbcr)),vblf,vbcr)
tlines=split(tstr,vbcr)
ミタイナ感じ。滅茶苦茶な使い方だけど普通はこうやってるなー…
ファイルサイズとか何も考えてないんで大きいときは適宜ストリーミングするとか
>>928 よく考えると tstr$ 要らんな。むぅ。
コーディングの際に、早さを求める場合の気を付けることを いろいろご教授下さい。
先日中途採用で入ってきた新人に技術的な面でどれくらいの事が出来れば 初級・中級・上級なのかと聞かれた。 みんなはどれくらいの事が出来れば初級・中級・上級だと思う?
>>930 速さを求める、な。
本当に速さを求めるなら Cとかアセンブラとか直で機械語とか…は置いといて。
VBだと
・型は明示する ( Option Explicit 必須 )
・基本的に数値は Long
・文字列操作関数も型を明示する ( Left$ とか )
・描画系にVB標準のメソッドを使わない ( PSet, Line とか )
・プロパティ等を3回以上(曖昧)使うときは一旦変数に落とす
・iif とか遅い関数は使わない
・Sub とかの関数の、数値系の引数は明示的に ByVal する。
・除算時に小数点以下要らないのであれば / ではなく \ 演算子を使う
・多次元配列はできるだけ使わない (Cは大抵最適化されるがVBではまだ遅い)
・ネイティブコンパイル時にコンパイラオプションのチェック全部入れる
あと、VBに限らないけど
・For ループはできる限りデクリメントに
・無駄な計算はできるだけ省く ( テーブルとか使って )
・Sub, Functionできるだけ展開する
とか。最後のはコードの読みやすさとトレードオフだけど。
VBってビットシフト無いから乗算をビットシフトに、とかできないもんなー。
あと、 With ステートメントって遅くなった気がするがどうか?
適当に試してみたら使わない方が速かったよーな。調べてないからわからんけど。
言われて思いつくのはざっとこんな感じ。ツッコミキボンヌ
>>931 それに答えるには、まず自分がどのレベルかを確認する必要があると思う。
あと、レベルってのは基本的に相対比較だから、「どの方面」でのレベルなのかが判らないと何とも。
技術面と言ったっていろいろあるでしょーに。
必要とされる技術を即戦力になるレベルで全て持ち合わせているのであれば、間違いなく上級、程度しか。
>>905 目的が良くわからんが…
TextBoxとか ListBoxとかに突っ込んで持たせる、つーのはいかが。
それ以外で埋め込むなら、Stringリソースだろうなぁ。
ただ、この場合も書き換えよりは定数的な使い方が普通だと思う。
モジュールには普通書かんよ、さすがに。(w
935 :
931じゃねーけどさ :02/03/10 20:37
>>933 >必要とされる技術を即戦力になるレベルで全て持ち合わせているのであれば、間違いなく上級、程度しか。
いくらなんでもこれはないだろっ。
ただ単に指定したブラウザを開くだけのものを要求されてそれを作るレベルの技術しか
持ち合わせてないやつを上級とはいわないだろ。(まぁそんなものを要求する会社なんてないだろうけど…)
>>932 勉強になりました。
Withって遅くなるんですか?
むしろ早くなると思って、必死に使ってました・・・鬱だ。
あと、数値型はなんでLong?Integerはダメですか?
937 :
デフォルトの名無しさん :02/03/10 20:44
>>935 あくまでもそれが「必要とされる」レベルであればそれはそれでその「社内」では上級者でしょう。(とか言ってみる
まぁでも「これができれば上級者」っていう定義はできなんだ。
いつの間にかそれに相応するスキルを持っていた、ってことはあっても。
…だって「ソフトウェア開発者試験の合格をもって上級とする」みたいなのあっても困るヤン。
>>931 技術上の問題が自己解決できる場合は、上級と見て良いと思う。
仕様上の質問はむしろしてくれる方が良いわけだけど。
>>936 Withを使うことで多少遅くなっても、コードが見やすくなるなら間違っては居ない。
むしろ速度面での差はたいしたこと無いだろうから、
見やすさ優先だと考えて今まで通りに行くのが吉かも。
> 数値型はなんでLong?Integerはダメですか?
ダメじゃないけど、VBがIntegerを扱う際には、内部でLong変換をかますらしい。
結果、速度が多少犠牲になる。
見やすさ優先なら、Integerの方が良いかもしれん。
速度優先なら、Longにそろえる方が早いらしい。
>>937 Readmeが付いてんだからそれを読めよ。
何のことはない普通の英文じゃねぇか。
で、君はこれを使ってどうするんだい?(w
>>936 Integer と Long で 1億回加算してみたけど、コンパイル前は 800msくらい Long の方が速い。( @PenIII 800MHz )
けど、コンパイル後は殆ど変わらない。
まぁどちらにしろ1億オーダーでこの程度なので
そんなに速度差はないけど、Longの方が速いよ、ってことで。
Withに関してはやっぱ俺の勘違いみたいです。スンマセン。
ついでに 932 に付け加え。 ・Int よりも CInt の方が速い。けど CInt は四捨五入( Int は切り捨て) なので注意。
つーか速度が欲しけりゃVCでDLL作れ。 コーディングスタイル崩してまでVBでやることではない。 最低限避けるべきポイントだけ押さえとけ。
>>925 バイナリで取得するのが一番手っ取り早いと思われ
>>926 それ結構よく出てくる話題だな。
一応バリアントに代入してバリアントの実データ部分を
参照すれば判定できなくもないが、それぐらいなら
素直(?)にOn Error使っといたほうがいい。
>>930 VC++とインラインアセンブラ使え。なんつって。
基本は
・無駄な処理をなくすこと。
・速い関数、変数を使うこと
かな。
バリアントは速さでは最悪だからループとかで使わないのは基本。
あとは/と\の速さの違いを分かっておく事とか。VBが強制的に型変換する
時を覚えておくとか。
要は経験だと思う。
>>944 んなこた分かってんだよ。いちいち言うな。
>>926 おりゃ、Uboundの代わりにこーいう関数作って使ってるけど。
Public Function UboundNeo(ByRef ArrCheck As Variant, _
Optional ByVal Dimension As Long) As Long
Dim lngMax As Long
On Error GoTo Err
If Dimension > 0 Then
lngMax = UBound(ArrCheck, Dimension)
Else
lngMax = UBound(ArrCheck)
End If
UboundNeo = lngMax
Exit Function
Err:
lngMax = -1
Resume Next
End Function
947 :
デフォルトの名無しさん :02/03/10 23:08
ブラウザの内容を一定時間ごとに更新するにはどの関数を使えばいいのでしょうか? もしくはコマンドボタンを押した時にブラウザの内容を更新するにはどのようにすればよろしいのでしょうか?
>>947 WebBrowser1.Refresh
949 :
デフォルトの名無しさん :02/03/10 23:21
>>936 大きなループの中で、毎回同じ参照をするときは、
Withを使うと速くなる。ポインタがキャッシュされるから。
MS-FlexGridとかで効果てきめん。
950 :
デフォルトの名無しさん :02/03/10 23:30
951 :
デフォルトの名無しさん :02/03/10 23:33
ここで出てきた高速化手法は、ほとんどヘルプに書いてあるし、 サンプルソースにズバリ Optimize.vbp というのもある。
∧,,∧ ありがとっす
,ミ。_。ミ
ミ∪ ∪
〜ミ ,, ミ
∪ ∪
>>946 さん、投稿した直後に自分でも考えました。
>>927 さん
CRLF変換ツールを作ろうかと思ってまして
Delphiでもファイル入出力でかってにCRLF変換される
という罠はあるんですが、回避法がなんとかありまして。
VBでも同じものをつくりたくなったです。
>>928 さん
明日、会社で試してみます。
指定したビットマップ全体の色をR,G,Bの三つのスクロールバー操作で変えたいんですけど、 できませんか?
954 :
デフォルトの名無しさん :02/03/11 04:04
>>943 >・Int よりも CInt の方が速い。けど CInt は四捨五入( Int は切り捨て) なので注意。
CInt関数は四捨五入ではなく、銀行型丸め処理なので間違いなきよう。
#暗黙の型変換、CLng関数等も同様。
956 :
デフォルトの名無しさん :02/03/11 05:22
>>953 できるよ。でも、どこがわからないの?
3つのスクロールバーで色合成をするサンプルはあちこちにある。
あとは、それを応用するだけ。
指定ビットマップにどういう画像処理をしたいのかわからんので、以上。
例えば、デジカメなどで風景を撮って、 指定ピクセルではなくその画像全体のRGB値を変更したいんです。 サンプルがたくさんあると書かれているので もう一度調べてきます。
>>957 つまり写真全体を赤っぽくしたり青っぽくしたり暗くしたりしたいというわけね。
それぞれのピクセルのRGB値を配列変数に入れてやって、あとはFor文を使って
指定ピクセルを変えるのと同じようにやればいいんじゃないかな。
・
・
・
あれ?もしかして違う?
>>957 サンプルは、スクロールバーとRGB()を連動させるコード。
VB入門1日目でやるような例題。
これに対し、フィルタ処理のサンプルは少ない。
VBでやると死ぬほど遅いけど、勉強にはなるかも。
961 :
デフォルトの名無しさん :02/03/11 09:41
>>932 の
・For ループはできる限りデクリメントに
これはどうして速くなるの?解説求む。
>>932 うぁ、Iifって遅かったのか…。3項演算子のつもりで使いまくってた。鬱氏。
チェックしてみたらIfで開くより2倍以上遅いね。ループ内で使うのは無茶だな。
>>961 俺も分かんない。
Forループ内は出来るだけ簡略化しろ、だと解釈したが。
違うんだろーなー。
>961 ループカウンタ変数とゼロの比較のみすればよいからという理由だったんじゃないかな。
>>964 アセンブラなら分かるんだけど。
速度変わらないと思う。
テキストボックスに半角数字以外は入力させない方法がわかりません、 よろしかったら教えてください。
>966 入力時に入力文字のチェック。 ValidateかLostFocus時に入力項目のチェック。 最後にもう一回チェックするのもよし。
# (928=929=)932=933=938=942=943 ってことで。 ありゃ。 Forループがデクリメントの方が速いって…For で シーケンシャルに配列 にアクセスするとき、でですな…。 …ってコレもVBで通用したかどうか怪しいけど…。 なんか滅茶苦茶だ。スンマセン。
>>968 いえいえ。
あと、小数点同士の演算なら\より/の方が速いよ。
>>953 ヒマになったんでちょっと作ってみた。要API。
Function RGBChange2(pic As PictureBox)
Dim IBMP As BitMapInfo, DAT() As Byte, PP&
Dim rc&, i&, UboundDAT&, t&
'BitMapInfoの取得
IBMP.biSize = 40
rc = GetDIBits(pic.hdc, pic.Image, 0, 0, ByVal 0, IBMP, 0)
UboundDAT = IBMP.biWidth * IBMP.biHeight * 3 - 1
ReDim DAT(UboundDAT)
'ビットマップの取得
IBMP.biBitCount = 24
IBMP.biSizeImage = UboundDAT + 1
IBMP.biCompression = 0
rc = GetDIBits(pic.hdc, pic.Image, 0, IBMP.biHeight, DAT(0), IBMP, 0)
'変換w
For i = 0 To UboundDAT
DAT(i) = CByte(CLng(DAT(i)) \ 2)
Next i
'表示
pic.Picture = LoadPicture()
rc = SetDIBitsToDevice(pic.hdc, 0, 0, IBMP.biWidth, IBMP.biHeight, 0, 0, 0, IBMP.biHeight, DAT(0), IBMP, 0)
End Function
宣言は自分でよろしこ。
いちいちビットマップ取得しなけりゃもっと速くなるよ。
ループでデクリメントが速い理由は、 インクリメント: +1 → 判定 → 判定結果でジャンプ デクリメント: -1 → 演算結果(0とか符号)でジャンプ という理由じゃないかな? > Forループがデクリメントの方が速いって…For で シーケンシャルに配列 にアクセスするとき、でですな…。 ん〜。あったっけ?そんなの。俺が知らないだけかな。 あと、VBでの出力コードをちょっと調べてみたよ。 VBコード Public Sub a() Dim i As Long For i = 0 To 1000 Call foo Next i End Sub Public Sub b() Dim i As Long For i = 1000 To 0 Step -1 Call foo Next i End Sub
↑続き 違うとこの範囲のみ抜粋。>のところが違う。 Sub a > 00401B19 33 FF xor edi,edi > 00401B1B 89 7D FC mov dword ptr [ebp-4],edi 00401B1E 8B 75 08 mov esi,dword ptr [Me] 00401B21 56 push esi 00401B22 8B 06 mov eax,dword ptr [esi] 00401B24 FF 50 04 call dword ptr [eax+4] 00401B27 8B 1D 10 10 40 00 mov ebx,dword ptr [__imp_@__vbaHresultCheckObj (00401010)] 00401B2D 8B 0E mov ecx,dword ptr [esi] 00401B2F 56 push esi 00401B30 FF 91 04 07 00 00 call dword ptr [ecx+704h] 00401B36 85 C0 test eax,eax 00401B38 7D 0E jge Form1::a+58h (00401b48) 00401B3A 68 04 07 00 00 push 704h 00401B3F 68 C4 15 40 00 push offset ___vba@001CDBFC (004015c4) 00401B44 56 push esi 00401B45 50 push eax 00401B46 FF D3 call ebx > 00401B48 83 C7 01 add edi,1 00401B4B 70 27 jo $L36+1Fh (00401b74) > 00401B4D 81 FF E8 03 00 00 cmp edi,3E8h 00401B53 7E D8 jle Form1::a+3Dh (00401b2d) Sub b > 00401BA9 C7 45 FC 00 00 00 00 mov dword ptr [ebp-4],0 00401BB0 8B 75 08 mov esi,dword ptr [Me] 00401BB3 56 push esi 00401BB4 8B 06 mov eax,dword ptr [esi] 00401BB6 FF 50 04 call dword ptr [eax+4] 00401BB9 8B 1D 10 10 40 00 mov ebx,dword ptr [__imp_@__vbaHresultCheckObj (00401010)] > 00401BBF BF E8 03 00 00 mov edi,3E8h 00401BC4 8B 0E mov ecx,dword ptr [esi] 00401BC6 56 push esi 00401BC7 FF 91 04 07 00 00 call dword ptr [ecx+704h] 00401BCD 85 C0 test eax,eax 00401BCF 7D 0E jge Form1::b+5Fh (00401bdf) 00401BD1 68 04 07 00 00 push 704h 00401BD6 68 C4 15 40 00 push offset ___vba@001CDBFC (004015c4) 00401BDB 56 push esi 00401BDC 50 push eax 00401BDD FF D3 call ebx > 00401BDF 83 EF 01 sub edi,1 00401BE2 70 23 jo $L51+1Fh (00401c07) >00401BE4 85 FF test edi,edi 00401BE6 7D DC jge Form1::b+44h (00401bc4)
↑続き これをみる限り、cmp edi,3E8hとtest edi,ediのどちらが速いかってことになるみたいだね。 testの方が命令数も少ないし速そうだけど俺は詳しくないから知らん。速さに違いがあるのか誰か教えて。 まぁ、通常は気にするまでもないのは確かだろうけど。 VBって数値の範囲チェック(joのとこ)を行っているからデクリメントにしても演算結果でジャンプできないんだろうね。 だから、最適化の詳細設定で整数の桁あふれチェックをしないにしてみたんだけど、そしたらどっちも同じコードになった。 さっきの所に対応するコードはこれ。 00401BAF BB E9 03 00 00 mov ebx,3E9h 00401BB4 8B 0E mov ecx,dword ptr [esi] 00401BB6 56 push esi 00401BB7 FF 91 04 07 00 00 call dword ptr [ecx+704h] 00401BBD 85 C0 test eax,eax 00401BBF 7D 0E jge Form1::b+5Fh (00401bcf) 00401BC1 68 04 07 00 00 push 704h 00401BC6 68 C0 15 40 00 push offset ___vba@001A4934 (004015c0) 00401BCB 56 push esi 00401BCC 50 push eax 00401BCD FF D7 call edi 00401BCF 4B dec ebx 00401BD0 75 E2 jne Form1::b+44h (00401bb4) ループの速度を気にするなら、デクリメントにするよりも最適化をいじくった方が効果ははるかに高そう。 ちなみに、foo()を呼ばなくても、整数の桁あふれチェックをした場合はループは削除されない。 整数の桁あふれチェックをしないにしたらループは削除されるみたい。
すいません、↑この逆汗ツールの名前を教えてほしいんですが。
>>973 VC++ 6.0
EXEを直接開いてステップ実行も出来ます。
VBでシンボリデバッグ情報を作成していると便利。
でもなんかソース行と同期が取れてないなぁ。
使い方間違っているのかな?
・・・って逆汗ツールかよ!?
>>974 ありがと。やっぱVC++なのか。今までそんな使い方したことあんまり無かったから。
>>974 × シンボリデバッグ情報
○ シンボリックデバッグ情報
最適化を変更するところにあります
>>970 そかそか、わざわざ調べてくれてアリガトン
てかdisasmする程でもないなーとか思ってたからやってなかったんだけど、
結局吐かれるコードは一緒なのね…
うむ、考えを改めるー
しかしdisasmまで出てくるとは…すでに初心者スレではないな(苦笑
970さんお疲れさまです。 整数の桁あふれチェックを外して高速化。なるほどです。 でも実際比較してみたところ約9000ループしても目立った変化はないです。 効果は薄そうです。
話は全然変わるんだけど、VBの標準exeでタスクマネージャに 表示させない方法知ってる人いる? ずっと悩んでる問題の1つ。
>>977 吐かれるコードが一緒といっても、あの例はループ変数をループ内で
使用していなかったからで、使用したらさすがに同じにはならないです。
で使用してみたら予想通りインクリメントの方がcmp命令一個分多かったです。
まぁ、今のCPUは高速なんでcmpが1クロックで実行されるとして500MhzのCPU
でも500,000,000回実行してやっと一秒ですね。(あってるよね?)
私もいつもは逆汗なんかしないんですけど、面白そうだしちょうど暇だったから。
速度が重要ならVBつかいませんし。しかしVBも意外に悪くないコード吐きますね。
select caseも条件さえそろっていればジャンプテーブルに変換されますし。
982 :
デフォルトの名無しさん :02/03/11 15:20
WebBrowserで表示すると縦のスクロールバーはうまく表示されるのだが 横のスクロールバーが表示されません。 WebBrowserでのスクロールバーをコントロールする関数などあれば教えていただけないでしょうか?
そろそろ新スレ?
>>934 レスサンクスです。
目的かいて無かったですね。すみません。
SQLスクリプト実行したかったんですが
一度その方法で試してみたいと思います。
986 :
デフォルトの名無しさん :02/03/12 21:47
しばらくいじってみた気づいたけどけど、これって中身BASICだよね?
>>986 日本語がよく分からんが勝手に補完して
「VBをしばらくいじってみた気づいたけど、これって中身昔ながらのBASICだよね?」
と解釈してみよう。
VBは昔ながらのBASICから50%ぐらい機能を削除して500%ぐらい機能を追加したものです。
∧_∧ ( ・∀・) ニヤニヤ ( 1000 ) | | | (__)_)
989 :
デフォルトの名無しさん :02/03/13 21:13
>>980 そもそも、タスクマネージャってプロセス全部表示されてるでしょ?
むりっしょ。
>>989 いや、そういうのあるよ。
でも、教えたくない。
ウィルス作るのが目的かもしれないから。
いや、タスクのアイコンを表示させたくないだけなんだけど。 プロセスは表示しててもいい。
1000!
994 :
デフォルトの名無しさん :02/03/14 16:57
線
腺
∧_∧ ( ・∀・) ニヤニヤ ( 1000 ) | | | (__)_)
栓
選
999 :
デフォルトの名無しさん :02/03/14 17:04
1000! v \△ ヤッタゼ!! ●\ □ / \
1000 :
デフォルトの名無しさん :02/03/14 17:05
1000! v \△ ヤッタゼ!! ●\ □ / \ 1000! v \△ ヤッタゼ!! ●\ □ / \ 1000! v \△ ヤッタゼ!! ●\ □ / \
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。