◆VB初心者質問スレ Part5

このエントリーをはてなブックマークに追加
1引越しました
前スレはこちら。
  Part1 = http://piza.2ch.net/test/read.cgi?bbs=tech&key=968328471&ls=50
  Part2 = http://piza2.2ch.net/test/read.cgi?bbs=tech&key=990793224&ls=50
  Part3 = http://pc.2ch.net/test/read.cgi/tech/1000523122/
  Part4 = http://pc.2ch.net/test/read.cgi/tech/1006922992/

Win32 API関連スレ
  http://pc.2ch.net/test/read.cgi/tech/1006783012/l50

心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調てみる。
参.VBScript もこのスレでOK。
四.インストーラーなどの質問もOK。
複数のコントロールが重なっている状態で、
ZOrderを使い、前面・背面移動を切り替えた場合に
各コントロール毎に表示されている重なり位置は取得できるのでしょうか?

すいません、ちょっと伝わらないと思ったので補足します。

コントロールはまったく同じではないのですが、
部分的に重なっているものとします。

最前面側
「コントロールC」
「コントロールA」
「コントロールB」
最下面側

上のような状態で重なっているものとして、
コントロールA = 1
コントロールB = 2
コントロールC = 0
の様な、ZOrderに対応した値を取得することは可能なのでしょうか?

m(_ _)m よろしくおねがいします
ネットワークに繋がっているPCがいくつかあるとします。
たとえばPC001・PC002・PC003の3台。
で、このネットワークに入れるユーザがいつくかあるとします。
たとえばHOGE・WOW・MAO・AFOなど

やりたいことは、各パソコンから相互に自分以外のパソコンにログインしている
ユーザ名がわかるようにしたいのです。
たとえば、PC001を使用している人は、PC002と3に今ログインしているユーザ名
を取得したい。

自分のパソコンにログインしているユーザ名は簡単に取得できますが、
ネットワークに繋がったパソコンの現ログインユーザ名は取得できないのでしょうか

よろしくお願いします。
仮に取得できないとしても、自分のPCにログインしている人を
返すようなサーバソフトを作ればいいと思うが。
>>2
コントロールがウインドウハンドルを持っていると仮定するとして、
APIのGetTopWindowでZが一番上のhWndを取得。
んで、それを目的のコントロールのhWndと比較。
GetNextWindowで次のZ順位のウインドウを探して、繰り返し。

これで一応実現できると思う。
目的のコントロールのhWnd突っ込んだらZが出るよーな関数でも
作ればいいんじゃないかな。
もっと簡単そうな方法は知らない。
6デフォルトの名無しさん:02/01/10 13:38
>>3
ログインしているユーザ名が外部から知られてしまうというのは
どうなのだろうか、、、

>>4 のようにサーバソフトと、各クライアントからサーバへユーザ名を
申告するようなものを作れば良いとおもうのですが
72:02/01/10 14:42
>>5さん レスありがとうございます。

具体的な方法で答えていただき、大変参考になりました。

重なりで使用するコントロールを調べたところ、
ハンドルを持ってるコントロールもありますが、
持ってないコントロールもありました。

とりあえず、ハンドルが取得できるものだけでも
この方法で試してみます。

ありがとうございます。
WinSockコントロールを使用して簡単な通信アプリを作っています。
ポート番号は、1024番以降であれば好きに使ってよいのでしょうか?
>>8
10000以上にしましょう
>>8
http://www.iana.org/assignments/port-numbers
The Dynamic and/or Private Ports are those from 49152 through 65535
ってあるから、まぁ50000以上にするのが無難かもしれないけど、10000以上なら
隙間が空きまくりなので問題ないでしょ。いちおうかぶらないよう気をつけて。

#9801がRFCに登録されてたのは驚いた。
11デフォルトの名無しさん:02/01/10 15:51
日付を入力して、その日がその月の第何週かをしらべたいのですが
どうもうまくいきません
Datepart関数をつかったのですが
1月1日から数えて第○週となってしまいます
その月だけの指定はどのようにおこなうのでしょうか?
それとも根本的に間違ってるのでしょうか?
128:02/01/10 16:03
>9 >10
サンクスっす。
>>11
月初めの日と、目的の日、双方の年始めからの週を取得し、
差を求めればいいような気がするが。
143:02/01/10 17:51
ありがとうございます。
では>>4のやり方で実現するつもりですが、このソフトが完成しインストールする際
そのパソコンにログインするすべてのユーザのスタートアップに、ソフトの
ショートカットを入れるにはどうしたらよいでしょうか。

もうVB自体の質問ではない気もしますが、よろしくお願いします。
おそらく、ProgramMenuFolder のようなWindowsの特殊フォルダを指定する
ようなキーワードがあるのだろうとは思うのですが、見つけられませんでした。

ちなみにインストーラはWindows Installerを使っています。
15Part4 の 960:02/01/10 18:08
>>Part4 の 954 解決できたか?
おいおいいい関数あるじゃねぇか!!(^^;
思いっきり Split関数の関連項目にあったよ。鬱死!

<html>
 <script language="VBScript">
  <!--
   Dim A()  '別に静的でもいい
   Dim B   '()はつけないで宣言
   Dim intI

   ReDim A(3)
   A(0) = 1
   A(1) = 2
   A(2) = 3
   A(3) = 4

   A(2) = vbNullChar 'Null はだめ。vbNullChar ならOK。

   B = Filter(A, vbNullChar, False)

   For intI = LBound(B) To UBound(B)
    MsgBox B(intI) 'これでどうでしょう?ゴルァ
   Next
  -->
  </script>
</html>

これでどうよ?
16デフォルトの名無しさん:02/01/10 18:51
>>14
ttp://homepage1.nifty.com/Wan/vbtool/vbtool.htm
これを応用されてはどうでしょうか

CSIDL_COMMON_STARTUP
これを使えばAll Usersのスタートアップフォルダが
取得できそうです
1716:02/01/10 19:06
失礼
ご質問の内容と違っていましたね
初心者向けの解説サイトってないですか?
自分で見つけたところはどこも制作途中で終わってしまっているもので…
19デフォルトの名無しさん:02/01/10 22:21
>>18
終わっているサイトが多いのではなく、検索の仕方、検索エンジンが悪いのかと。
Google (ttp://www.google.com/) がよいかと。
検索単語を半角スペース区切りで指定したらよいかと。
ex :「VB_Forms_コレクション_初心者」とか書けばよいかと。
ではさようならかと。
20デフォルトの名無しさん:02/01/10 23:53
>10
プロバやルータやFWの設定で、大きいポート番号を
無条件で拒否してる場合もある。
21デフォルトの名無しさん:02/01/11 00:12
エクセルのタイトルバーの右端にある×(閉じる)ボタンを
非表示にするにはどうすればいいんでしょうか?
ツールバーにある閉じるボタンは非表示にできるけど
その上のタイトルバーにあるもう一つができないです。
詳しい方助けてください。
22デフォルトの名無しさん:02/01/11 00:26
>21
板違いだから、こっちのExcelスレ逝ってみたら?
http://pc.2ch.net/bsoft/
2338:02/01/11 00:26
>>21
シラネーよ、ボケ!死ね!!
24デフォルトの名無しさん :02/01/11 00:37
何で?VBAでも出来るんじゃないの?
25デフォルトの名無しさん:02/01/11 00:37
>>23 お前が市ね!!!!!!!!!!!!!
>21
電車に飛び込んでください。
27デフォルトの名無しさん:02/01/11 00:40
21は高卒
28デフォルトの名無しさん:02/01/11 00:42
>詳しい方助けてください。
助けても見返りがないと...
ダメな奴は何をやってもダメのいい例>21
つーか、質問の仕方がよくない。
30デフォルトの名無しさん:02/01/11 01:31
>3
NetWkstaUserEnumか、NetUserEnum。
31デフォルトの名無しさん:02/01/11 06:26
雰囲気がこわいけど・・ちょいと便乗させて。
ウインドウの最小化は表示、最大化は非表示とかできませんか?
21=31
333:02/01/11 10:01
ネットワークに繋がっているパソコンにログインしているユーザ名を
取得するプログラムを以下で見つけました。
ttp://www.codeguru.com/system/AC_NTSrv.shtml

が、さっぱり解りません。。。。日本語はないですかね。。。
>>31
デザイン時にFormのプロパティで設定できます。Excelだった?
>>33
翻訳してみれば?

ttp://www.excite.co.jp/world/url/
36uja:02/01/11 10:41
スレ違ってたらごめんなさい。OUTLOOKのVBAについてです。
他人の予定をVBAで取得するときは、下記のようなプログラムでできたのですが
Dim myNameSpace As NameSpace
Dim myRecipient As Recipient
Dim shceduleFolder As MAPIFolder
Set myNameSpace = Application.GetNamespace("MAPI")
Set myRecipient = myNameSpace.CreateRecipient("ユーザー名")
Set shceduleFolder = myNameSpace.GetSharedDefaultFolder(myRecipient, 9)
Msgbox shceduleFolder.Items(1).body

その中の定期的な予定を取得するのがうまくいきません。
shceduleFolder.Items.IncludeRecurrences
のプロパティ値をTrueにしてやれば、定期的な予定も展開されると
MSDNには書いてあるのですが、それに従ってやっても
定期的な予定は、周期の一番最初の予定しかみることができません。
なにか知ってる方がいらっしゃいましたらアドバイスをお願いします。
DBにMySQL使って開発した方いませんか?
わざわざMySQLなんて使わないと思います。
ほかにもっといいものがあると思います。
少なくとも私個人としてはそう思います。
ファイルが存在するか調べるのにDir関数って使いますよね。
ファイルが存在していれば大文字でファイル名が返される"はず"ですが、
どういうわけか小文字で返されました。こういうことってあるんでしょうか?
>>39
大文字で返すなんて、どこに書いてあったの?
なんか新スレになってから、ちょっと変な質問が増えたね
4239:02/01/12 12:33
>>40
VisualBasic6.0例文事典 ステートメント・関数編
という本。MSDNは入れてないし今手元にない。

以前作成したプログラムでは確かに大文字で返してましたが、
単に大文字のパスをDir関数に入れてただけかも…
>>37
漏れ貧乏だからMySQL使ってる
小文字だと何か問題が起きるソフトを作ってるの?
4539:02/01/12 17:50
>>44
いえそんなことはないです。ただ本に書いてあったことが気にかかっただけです。
小文字だろうが大文字だろうが、Ucase関数で全て大文字に変換してしまえば
なんら問題はないでしょうが。(ただのファイルチェックルーチン)
Windowsってファイル名の大文字小文字って関係あるんか?
>>45
>小文字だろうが大文字だろうが、Ucase関数で全て大文字に変換してしまえば
>なんら問題はないでしょうが。(ただのファイルチェックルーチン)

全角アルファベットのときに問題あります。
ヘルプの「UCase関数, ファイル名の操作」に載っています。
全角って最初に逝ってくれ...
49デフォルトの名無しさん:02/01/13 13:19
こにちわー。
うんと、PictureBox自体を回転させようと思っているのですが、
PictureBoxは斜めに表示できないと聞きました。
ということは不可能なことなんですか?
>>49
PictureBox自体を回転させるのは無理やろな。
PictureBox内の画像を回転させるなら中学数学で可能だけど。
5139(45):02/01/13 15:07
>>47
なるほど全角アルファベットがありましたね。参考になりました。
問題解決したのでみなさんお世話様です。んでは。
52デフォルトの名無しさん:02/01/13 15:30
>>50
はーい、わかりました。
53デフォルトの名無しさん:02/01/13 15:57
Windowsアプリケーションをインストールする時なんかに
よく[参照]ってボタンを押してインストールフォルダを指定しますよね。
その時に使われる、

C:\
|-Documents and Settings
|   -Administrator
|       -Application Data
|       -My Documents
|-Program Files
|-RECYCLER
|-WINNT

↑なんかこんな、クリックしたら開いていくツリーみたいなのを
VBで作れないですか?
54デフォルトの名無しさん:02/01/13 16:32
2Dの上から見下ろす形のレースゲームで見るような、
スクロール(らしきでもよい)画面を作りたいです。
マウスまたはキーなどで直進するように入力したら、画面は下へ流れ、
横へ入力したら、円を描くような感じで画面が回転しているように
流れます。(方向転換っていたらいいのかな?)
画面の動きがわかりやすい様に、線など描きながら見れるようなのが
いいです。

サンプルとか、出来る方がいらっしゃいましたら教えて頂きたいです。
55デフォルトの名無しさん:02/01/13 17:43
>>53
Private Sub cmdPath_Click()
    
    Dim typBrowseInfo As BROWSE_INFO
    Dim lFoldPointer As Long
    Dim sPathName As String

    With typBrowseInfo
        .hwOwner = frmMain.hWnd
        .lRoot = CSIDL_DESKTOP
        .sTitle = "フォルダを選択してください"
        .lOptions = BIF_RETURNONLYFSDIRS Or BIF_DONTGOBELOWDOMAIN
    End With

    lFoldPointer = SHBrowseForFolder(typBrowseInfo)

    sPathName = String$(256, vbNullChar)

    Call SHGetPathFromIDList(lFoldPointer, sPathName)

    CoTaskMemFree lFoldPointer

    If Left(sPathName, 1) <> Chr(0) Then
        txtPath.Text = LCase(sPathName)
    End If

End Sub
56デフォルトの名無しさん:02/01/13 17:44
>>53
Option Explicit

Public Declare Function SHBrowseForFolder Lib "shell32.dll" _
        Alias "SHBrowseForFolderA" _
       (lpBROWSEINFO As BROWSE_INFO) As Long

Public Declare Function SHGetPathFromIDList Lib "shell32.dll" _
        Alias "SHGetPathFromIDListA" _
       (ByVal pidl As Long, ByVal pszPath As String) As Long

Public Declare Sub CoTaskMemFree Lib "ole32" (ByVal pv As Long)

Public Type BROWSE_INFO
    hwOwner As Long
    lRoot As Long
    lDspName As Long
    sTitle As String
    lOptions As Long
    lfn As Long
    lParam As Long
    lImage As Long
End Type

Public Const CSIDL_DESKTOP = &H0            '仮想デスクトップ
Public Const CSIDL_PROGRAMS = &H2           'プログラムグループ
Public Const CSIDL_CONTROLS = &H3           'コントロールパネル
Public Const CSIDL_PRINTERS = &H4           'プリンタ
Public Const CSIDL_PERSONAL = &H5           'My Documents
Public Const CSIDL_FAVORITES = &H6          'お気に入り
Public Const CSIDL_STARTUP = &H7            'スタートアップ
Public Const CSIDL_RECENT = &H8             '最近使ったファイル
Public Const CSIDL_SENDTO = &H9             '送る
Public Const CSIDL_BITBUCKET = &HA          'ごみ箱
Public Const CSIDL_STARTMENU = &HB          'スタートメニュー
Public Const CSIDL_DESKTOPDIRECTORY = &H10  'デスクトップフォルダ
Public Const CSIDL_DRIVES = &H11            'ドライブ
Public Const CSIDL_NETWORK = &H12           'ネットワーク
Public Const CSIDL_NETHOOD = &H13           'NetHood
Public Const CSIDL_FONTS = &H14             'フォント
Public Const CSIDL_TEMPLATES = &H15         'テンプレート
VB5のネイティブコードコンパイルで、「シンボリックデバッグ情報を作成」を
選択して「.pdb」ファイルを作ると、VC5のデバッガで、シンボル付きの
逆アセンブラ状態でデバッグ出来たのだけど、VB6で同じ様にコンパイルすると、
VC5でシンボル情報がありませんって言う警告が出るんです。
これってbugなのでしょうか?
MSDNにはVC++(5.0以降のバージョン)またはそれと互換性のあるデバッガでデバッグできます。
と書いてあるのですが…。
58デフォルトの名無しさん:02/01/13 19:08
Shift-JisとAsciiコードって何が違うのですか?
59デフォルトの名無しさん:02/01/13 19:15
6058:02/01/13 20:06
>>59
ありがとう。大好き
>>54
参考にならんだろうけど、こんなかんじ?(←→で回転、↑で進むかんじ)
Private Const MM = 20
Private mx&(MM), my&(MM)
Private mpx&, mpy&, mpd&, wx&, wy&, rr#

Private Sub Form_Load()
Me.AutoRedraw = True
Me.ScaleMode = vbPixels
wx = Me.ScaleWidth: wy = Me.ScaleHeight
rr = 3.14159 / 180
Dim t&: For t = 0 To MM: mx(t) = Rnd * wx: my(t) = Rnd * wy: Next
mpd = 0: mpx = wx / 2: mpy = wy / 2: draw
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyLeft Then mpd = (mpd + 10) Mod 360
If KeyCode = vbKeyRight Then mpd = (mpd + 350) Mod 360
If KeyCode = vbKeyUp Then
mpx = mpx + 10 * Cos((mpd + 90) * rr)
mpy = mpy - 10 * Sin((mpd + 90) * rr)
End If
draw
End Sub

Sub draw()
Dim t&, x&, y&
Me.Cls: Me.PSet (wx / 2, wy / 2)
For t = 0 To MM
x = (mx(t) - mpx) * Cos(mpd * rr) - (my(t) - mpy) * Sin(mpd * rr)
y = (my(t) - mpy) * Cos(mpd * rr) + (mx(t) - mpx) * Sin(mpd * rr)
Me.Line -(wx / 2 + x, wy / 2 + y)
Next: Me.Refresh
End Sub
62デフォルトの名無しさん:02/01/13 23:06
>57
VB6とVC6の組み合わせなら、ちゃんとデバッグできたよ。
63デフォルトの名無しさん:02/01/13 23:16
>>61
どうもありがとうございます。
やってみます☆
64デフォルトの名無しさん:02/01/14 01:00
Olectra Chartってどうなんでしょうか
人から貰ったプログラムのグラフ描画部分に、これが使われてたから
試用版DLしてきたんですけど、買う価値あり?

ちなみにVB今からスタート予定・・・
65デフォルトの名無しさん:02/01/14 01:11
>64
使ったことない。趣味では必要ない。。
でも、グラフ使って仕事するなら、買えば?
66デフォルトの名無しさん:02/01/14 06:39
MoveToExとLineToを使って線を書きたいのですが、
それぞれのAPIを書いて、POINTAPIって書いた後、どうすればよいか
良くわかりません。
PictureBOXに線を描く簡単な例を教えて頂きたいです。
おねがいします☆
67デフォルトの名無しさん:02/01/14 07:22
>>66
ttp://www.netlaputa.ne.jp/~stadt/vb/index.html
ここのメタファイル関係あたりではどうでしょう
68デフォルトの名無しさん:02/01/14 10:17
>>67
いってきまーす。
69デフォルトの名無しさん:02/01/14 10:22
ディストリビューションウィザードを使って配布しようと思うんですが、
その時、フォントもインストールするようにしています。

しかし、インストールが終了したあとシステムを起動しても、なぜか
インストールしたはずのフォントが無効になっています。

インストールされてないのかな? と思ってコントロールパネルから
フォントを開いて見ると、ちゃんと追加されています。

その後、もう1回システムを起動したら、今度はフォントがしっかり表示
されていました。

インストールが終わったら、再起動しないといけないんでしょうか?
インストール終了後、自動で再起動させる方法があったら教えてください。

よろしくお願いします。
70デフォルトの名無しさん:02/01/14 22:24
今クイズのプログラムを作ってて、全部クイズが終わった後に結果出力を
指定のフォルダのテキストファイルを作りたい場合、
どのようなプログラムにすればいいのでしょうか?
過去ログから自分なりにつくってみましたが、手直しお願いいたします。
(たくさんあると思いますが)

プログラムが"C:\Program Files\MyProg"にあって
C:\Program Files\MyProg\shousai\index.txt"にファイルを作成したい
しようと思っています。

Private Sub command1_Click()

Dim intFileNum As Integer
Dim strFullPath As String 'フルパス
Dim strSoutaiPath As String '相対パス

strSoutaiPath = "\shousai\index.txt"
strFullPath = App.Path & strSoutaiPath

intFileNum = FreeFile()
Open strFullPath For Output As #intFaileNum

Print #1, "詳細出力"
Print #1, "クイズ正答率" & seitouritu & "%"
Print #1, "正解数" & seikaisuu & "問"
Print #1, "問題数" & mondaisuu & "問"
(中略)
Close #1

End Sub
71デフォルトの名無しさん:02/01/14 23:21
>69
再起動する必要がある。
Win9x系か、NT系か、書いてないけど、APIの
ExitWindowsEx、InitiateSystemShutdownあたりを使う。

>70
As #intFaileNum のタイプミス以外はいちおうオッケー。

"クイズ正答率" & CStr(seitouritu) & "%" とかなら、
あんまり厨房あつかいされなくなるかな。
72デフォルトの名無しさん:02/01/14 23:38
浮動小数から長整数へキャストする時の、小数点以下の切り捨てってどうやるんですか?
C++だとdoubleからlongへのキャスト時に勝手に小数点以下を切り捨ててくれるけど、VBで同じような感じでCLngすると値が丸められちゃうよね?
消費税算出みたいな小数点以下の切り捨てを行わなければならない時にすごく困るんだけど・・・。

あ、ちなみにInt関数やFix関数はNG。Integerでは箱が小さすぎるから・・・
73強引:02/01/14 23:53
R=503.9564:? Clng(R)+(Clng(R)>R)
74デフォルトの名無しさん:02/01/15 00:05
さらに強引

strNum = CStr(dblNum)
strNum = Left$(strNum, Instr(1, strNum, ".") - 1)
lngNum = CLng(strNum)
7572:02/01/15 00:09
73のやり方すごい。Trueが-1であることを利用したってことね?
74はピリオドがないと落ちますね・・・

thanx!!
76デフォルトの名無しさん:02/01/15 00:18
>>70
こらこら、何のためにFreeFile()を呼び出している?
Print #1って書きたくないからだろ?
(他の部分で既にに#1が開かれていたりした場合エラーになるので)
たまたまFreeFileが1になってるから、動いてるだけだよ。

その他は別にいいんじゃない?
7771:02/01/15 00:24
>76
あ、ほんとだ。そこは見落とした(汗)。
78デフォルトの名無しさん:02/01/15 00:30
>>72
MSDNには、Int()やFix()がInteger型を返すとは書いてないよ。
> Int、Fix 関数
> 指定した数値の整数部分を返します。

Dim i As Integer
Dim n As Long
Dim d As Double
d = 70000.123
'i = Int(d) 'オーバーフロー
n = Int(d)
Debug.Print "i=" & i & " n=" & n

「結果」
i=0 n=70000
79デフォルトの名無しさん:02/01/15 00:30
>Int関数やFix関数はNG。Integerでは箱が小さすぎるから・・・
「Fix 関数および Int.関数は引き渡された値と同じデータ型で常に値を返します。」
80STRCAT:02/01/15 00:34
case WM_KEYDOWN:
if(wParam==VK_SPACE){
strcat(moji, "あ\n");
hDC = GetDC(hWnd);
GetClientRect(hWnd, &rt);
DrawText(hDC, moji, strlen(moji) &rt, DT_WORDBREAK);
ReleaseDC(hWnd, hDC);
}

スベース押すたびに「あ\n」が増えると思うのに
1回しか「あ\n」が増えないのはどうして?
>>80
moji はどこで宣言してる?
82STRCAT:02/01/15 00:40
LRESULT CALLBACK WndProc(HWND 省略){
char *moji = "あ\n";
83STRCAT:02/01/15 00:43
#include <iostream.h>
main(){
char *str = "a";
int i = 1;
strcat(str,"b");
cout << str << '\n';
switch(i){
case 1:
strcat(str,"c");
cout << "case の結果は等しかった" << '\n';
break;
default:
cout << "case の結果は異なってた" << '\n';
}
cout << str << '\n';
getchar();
}

switchの中ではグローバルが通用しないかと思ったけど、↑を
やったらabcになった。問題なしだ。
Winプログラムではなぜかうまくいってない。
84STRCAT:02/01/15 00:49
LRESULT CALLBACK WndProc(HWND 省略){
 char *moji = "あ\n";
 strcat(moji, "い\n");

 switch (msg){
  case WM_KEYDOWN:
   if(wParam==VK_SPACE){
    strcat(moji, "う\n");
    hDC = GetDC(hWnd);
    GetClientRect(hWnd, &rt);
    DrawText(hDC, moji, strlen(moji), &rt, DT_WORDBREAK);
    ReleaseDC(hWnd, hDC);
 }

これなら、あ\nい\nう になるけど、再びスペースを押しても
  あ\nい\nう\nう\n
でなく、
  あ\nい\nう\n
なのだ。
不思議。
case の中では strcat( ) が1回しか実行されない?
>>84
WndProcはメッセージが来るたびにOSから呼び出される。
その最初で、初期化してるのだから、何度やっても同じ結果になるのはあたりまえ。
char *moji = "あ\n";
の行をコメントアウトし、
TCHAR moji[80];
を#includeの下あたりに書いてみそ。
86STRCAT:02/01/15 02:08
分かったー!!
そうだったのかー。
WndProc( ) は高速で何度も発生していることが分かったよ。
ありがと〜。
87STRCAT:02/01/15 02:19
#includeの下あたりに書いても動いた。
つまり、int APIENTRY WinMain( ) の前。
WndProc( ) の中の case WM_CREATE: でもいいよね。

よくあるソース

LRESULT CALLBACK WndProc(HWND 省略){

 HDC hDC;
 PAINTSTRUCT ps;
 char *str = "abc";

 switch (msg){
 case WM_PAINT:
  hDC = BeginPaint(hWnd, &ps);
  TextOut(hDC,0,0,str,3);
  EndPaint(hWnd, &ps);
 break;

これは

 HDC hDC;
 PAINTSTRUCT ps;
 char *str = "abc";

が何度も実行されるから無駄がある。

LRESULT CALLBACK WndProc(HWND 省略){

 switch (msg){
 case WM_CREATE:
  HDC hDC;
  PAINTSTRUCT ps;
  char *str = "abc";
 break;
 case WM_PAINT:
  hDC = BeginPaint(hWnd, &ps);
  TextOut(hDC,0,0,"abc",3);
  EndPaint(hWnd, &ps);
 break;

とした方がいいと思ったけど、こういうソースを
見かけないのはどうして?
88デフォルトの名無しさん:02/01/15 02:22
こばんわー。
今、こんな感じで線を描いているます。
コマンドボタンを押すと線を描くのですが、

そうではなくて、マウスを動かして、ある座標の範囲を
示したら一定の加速度を得て、そして速度が出て、
勢いを増しながら線が描かれていくのをやりたいと思っています。
とりあえず線を描く方向は一方向でいいので、
速度をつけたいです。
出来るでしょうか?
よろしければお願いします。

BitBlit
POINT構造体
MoveToEx
LineTo

Dim hdc1 As Long, hdc2 As Long 'デバイスコンテキスト
Dim pw As Long, ph As Long 'コピー元の領域の幅,高さ
Dim sx As Long, sy As Long 'コピー先の始点
Dim p As POINTAPI

Private Sub Command1_Click()
pw = 1000&: ph = 1152& 'PictureBoxのサイズ
sx = CLng(Text1.Text)
sy = CLng(Text2.Text)
Timer1.Enabled = Ture
End Sub

Private Sub Timer1_Timer()
hdc1 = PicOriginal.hdc
hdc2 = PicDisplay.hdc

MoveToEx hdc2, pw \ 2, ph \ 2, p
LineTo hdc2, pw \ 2 + sx, ph \ 2 + sy
BitBlt hdc1, -sx, -sy, pw, ph, hdc2, 0&, 0&, vbSrcCopy
BitBlt hdc2, 0&, 0&, pw, ph, hdc1, 0&, 0&, vbSrcCopy
End Sub
今ブラウザーを作っているのですが、TextBoxに入力されたURLが無効な
アドレスだった時の処理の仕方で詰まってます。

無効なアドレスが入力された場合、"***に接続できませんでした"と表示
されるようにしたいのですが、無効なアドレスか有効なアドレスかを判定
するには、どうしたらいいのでしょうか?
>>87
WndProcが何度も呼び出されるって書いたよね。
一度、WndProcを抜けると、ここで宣言された変数は開放されてなくなっちゃうの。
だから、WM_CREATEでいくら宣言してあっても、
WM_PAINTに行く場合は、宣言されていないことになってしまう。

変数のスコープについて勉強しましょう。
あと、激しくスレ違いなので、
「□□□VC 初心者質問スレ 2□□□」 へ逝こう。
俺も気づかんかった。
91デフォルトの名無しさん:02/01/15 10:17
>>89
まずURLの形がしっかりとしているか文字列チェック
次に実際にGETして、ヘッダをチェックする。
92デフォルトの名無しさん:02/01/15 11:06
色を計算で自動生成したいのですが、どういう風にやればよいかイメージが湧きません。
折れ線グラフの線の色で、項目数(色数)は不定で上限がなく、
なるべく色同士の違いがわかるように設定したいのですが…
93名無しさんです:02/01/15 12:54
初めてツリービューを使ってるのですが、削除した
ノードのindexって開放されずに残ったままなんで
しょうか?
ノードに納まってる変数の内容を保存しようと思って
ノードの最初のindexを参照したら削除や追加をした
後に限って「削除されてます」って怒られるのですが。
それともなにか他に問題があるのでしょうか?
94意外と初心者(w:02/01/15 15:25
>>93
よくわかんない(それならレスするなちゅーねん)けど、
削除したノード分のインデクスって詰められない?勝手に。
Index を使わないで Key だったら勝手に詰められても識別できるんじゃない?
9594:02/01/15 15:26
Sub の方か・・・ごめん間違い。
逝ってきます・・・。
96デフォルトの名無しさん:02/01/15 15:46
垂直スクロールバーがついたテキストボックスを使っていて、表示しきれないとき
勝手にスクロールさせてケツを表示させるため、以下のようなコードを書いています。
txtHoge.SelStart = Len(txtHoge.Text)

ところが、大体65535文字くらいになるとこれが効かなくなります。
どうもSelStartは65535以下までしか受け付けてくれないようです。
この場合、どうしたらいいでしょうか
>>96
テキストボックスってそれくらいしかはいらないんじゃなかったっけ
98デフォルトの名無しさん:02/01/15 16:43
自己参照構造体とは何ですかね?
100デフォルトの名無しさん:02/01/15 17:51
DAO3.6を使っていますが、DBの最大容量はいくつですか
また、Windowsそのものの1ファイルあたりの最大容量はいくつですか
101デフォルトの名無しさん:02/01/15 18:11
chr$(number) と chr(number)
Left$() と Left()
の違いがまったく分かりません。
102デフォルトの名無しさん:02/01/15 18:23
フォームの名前を取得して
その取得した名前を引数にしてサブルーチンを動かしたんですが…

call S_test(me.form)

sub S_test(A_frmname as form)

end sub

これじゃうまくいかなかったんです
どうやってやるの?
1038:02/01/15 18:23
>101
戻り値の型。
>102
何がどううまくいかなかったのかを明確に書くとよいと思われ。
105102:02/01/15 19:19
修正

call S_test(me.name)

sub S_test(A_frmname as form)

end sub

でした
me.nameでフォームの名前を取得して
その名前で処理したいんですけど
me.nameで型が違うってエラーが出てしまいます
106デフォルトの名無しさん :02/01/15 19:23
ダイアログにFixedsysとかのシステムフォントを使うと、
W2kで画面表示が崩れるのですが(文字が欠けたり、はみ出したり)、
プログラムの変更なしに対応させることが出来るでしょうか?
一応あちこち調べてWin2Kの固定ピッチフォントの問題のアップデートもしたけどだめでした。

システムフォントのFixedsysをMSPゴシックに変えたいのですが、
どうすればよろしいでしょうか?
107106:02/01/15 19:25
ちょっと説明が足りませんでしたが、
w2k以前のバージョンのwindowsで作成したアプリを
W2kで動かす場合です。
108名無しさん ◆MZ2000oY :02/01/15 19:32
>>105
Call S_test(me)

Sub S_test(A_frmname as form)

だとなんかマズイのか?
109デフォルトの名無しさん:02/01/15 19:49
VB6のコマンドボタンについて教えてください。
コマンドボタンの文字の色を変えたいのですが、どこを変更すれば
いいのでしょうか?
コマンドボタンのプロパティー内にBackColorという項目があり、
そこにボタンの文字という設定があるみたいなんですが、選択して
変更してもボタンの表面の色しか変わらないんです。
どなたか教えてください;-;
>>100
> DAO3.6を使っていますが、DBの最大容量はいくつですか
DBに拠るでしょ。

> また、Windowsそのものの1ファイルあたりの最大容量はいくつですか
ファイルシステムに拠るでしょ。
FAT16:1GB
FAT32:2GB
NTFS:4TB
だっけか。NTFSはバージョンによって違うかも。
つーか、このくらい自力で調べろと言いたい。
>>105
> sub S_test(A_frmname as form)
> sub S_test(A_frmname as String)
かな。
>>109
この質問ってほんとよく見かけるなぁ。
コマンドボタンコントロールにはそういう機能はない。
その仕様は普通じゃないってことだ。

どうしてもっていうなら
Styleプロパティを1にしたチェックボックスなどで代用するのが定石。
Clickイベント時Value=0とすればボタンとほとんどかわらなんよ。
113109:02/01/15 21:20
>112
レスありがとうございます。
そういう仕様なんですね。
うむむぅ、残念です。
ありがとうございました。m(_ _)m
114名無し:02/01/15 21:31
jpgファイルの名前の部分を
あるCGIファイルの名前と、中身の一部分の文字と置き換えをする

という単純な作業の繰り返しをどうにかして
プログラムにする事はできないでしょうか
或はそのようなフリーソフトなどを知っている人がいらっしゃったら
教えていただけると嬉しいです。
115デフォルトの名無しさん:02/01/15 22:03
ADOの勉強してます。
VBから、あるMDBファイルのテーブル名を全て取得したいのですが、
どのようにしたら良いですか?
116デフォルトの名無しさん:02/01/15 23:36
>>101
103の指摘のように戻り値の型の違いもあるが、
(気持ち$ありのが速い。最近のマシンなら数万回程度のループでは計測不能なほどだが)
NULLを受け付けるかどうかという違いもある。
後は、昔のBASICの名残。

>>102
108同様
>call S_test(me.name)
をcall S_test(me)
とする方が普通のやり方でしょう。

どうしても名前でやりたいなら、
>sub S_test(A_frmname as form)
をsub S_test(A_frmname as String)
とした上でこのプロシージャの中では、
Formsコレクションでオブジェクトの参照を取得すればOK。
あげっぱなしだ
118デフォルトの名無しさん:02/01/15 23:59
for (wp = start; wp->next != NULL; wp =wp-> next)

(wpは変数)
どういう意味ですかね?
リストを終端まで辿る処理だろ。 つか、それのどこがVBだ。
120デフォルトの名無しさん:02/01/16 00:17
バイト配列に対するMid・Left・Rightライクな操作って、
ループで1バイトずつ処理するしかないですか?
いったん文字列に変換すると、変わる制御コードがあるから。
>>120
RtlMoveMemoryあたりのAPIを使うと楽。
間違うと簡単に落ちるけどねw
(実行前にソースは保存しとけよ)
12293:02/01/16 00:57
>>94
Keyも考えたんですが、ノードのKeyって数字が使えない
(数字のみかな?)ので不便なんです。
もうちと試行錯誤してみます…。
123120:02/01/16 00:57
>121
ひえ〜〜〜!
たかが数十バイトの処理で落ちたくないですぅ。
124120:02/01/16 01:01
Cの初級問題とかでアルゴリズムがあるか探してみます。
いちおう自作してみたけど、エラー処理が若干不安なので(笑)。
125120:02/01/16 01:11
ここを見つけたけど、かえってむずかしい?
ttp://www.threeweb.ad.jp/~satou/delphi5.htm
12694:02/01/16 03:30
>>122
Key でいいんならプレフィックス文字を適当に付けて
例えば "Z1" とか "Z0000001" とかしといて Mid$ とかで "Z" 以下取ってくれば?
それを数値型にしちゃえば Index と同じような感覚で扱えるのでは?
127105:02/01/16 10:18
>>108
>>111
>>116
ありがとうございました
うまくいきました〜
128こまねずみ:02/01/16 10:28
WSHでファイルを開きたいだけなんだけど、
必ず「スクリプト設定ファイル "C" が不正です。」
と、なって実行できないのです。

厨房質問だとおもうけど、どなたか助けて〜。
129こまねずみ:02/01/16 12:38

自己解決しました。
130デフォルトの名無しさん:02/01/16 14:29
ルートディレクトリのパスだけが判明していて、
その中の子ディレクトリの中にあるファイルを探したいのですが、
どうしたら良いでしょう?
子ディレクトリは階層も名前も不明です。
131130:02/01/16 14:30
バッチ処理なので、コモンダイアログも使えないのです。。。
132デフォルトの名無しさん:02/01/16 14:31
>>130
前スレに全てのファイルをリストアップするコードがあったよ。
133132:02/01/16 14:36
134130:02/01/16 14:44
>>132
ありがとうございます!
前スレですね?探してみます。

参考URLの方も確認します。
ありがとうございました。
135デフォルトの名無しさん:02/01/16 15:44
cでいう%って何でしたっけ?
136デフォルトの名無しさん:02/01/16 16:04
>>135
mod ?
137デフォルトの名無しさん:02/01/16 19:54
text1.textにかいてある文字が数字か英語か2バイト文字か判断したいのですが、どのようにやったらいいのかわかりません……
LenBとStrConvでどうぞ。
139デフォルトの名無しさん:02/01/16 20:11
>>137
Midとかで1文字ずつ切り出して、Ascでコードを調べるとか
英語かどうかはわからないと思いますよ。ローマ字かも
知れないし。
141デフォルトの名無しさん:02/01/16 21:57
エクセルでVBAを昨日まなびはじめたばかりなのですが・・・
エクセルなどからVBAでIEを操作したいのですが、
IEのオブジェクト構造に関する
リファレンスはどこにあるのでしょうか?
>141
たしかOffeceのCDのどっかにあった。
143デフォルトの名無しさん:02/01/16 22:08
>>141
http://msdn.microsoft.com/library/default.asp

「Web Development」の辺り。(多分
144デフォルトの名無しさん:02/01/16 22:12
すみません・・・>>115なんですけど・・・
MSDNライブラリ見すぎても、やっぱ無理です・・・
ヒントだけでも、ひとつ。
145141:02/01/16 22:14
>>142
それは、やはりヘルプファイル形式の拡張子でOfficeのCDロムを
直接検索して、1個1個見ていけばいいのでしょうか?

>>143
できれば、日本語が・・・(泣)
(でもたどってみたものの、(英語を読み違えてなければ)見つかりませんでした)

根本的な疑問として、同じ立場の場合、ふつうの人はどうしているんでしょう?
146デフォルトの名無しさん:02/01/16 22:26
>>145
オブジェクトブラウザ使ってる
147デフォルトの名無しさん:02/01/16 22:29
VB6のLearning Editionを買ってきたんですけど、
セットアップができません。

CD-ROMルートにあるsetup.exeを実行すると、
vs60wiz.exeのエラーとなってしまいます。
実験的にACMBOOT.exeからセットアップを行おうとしてみたものの、
途中でsetup.exeから実行するようにとの指示が出て終了です。
マイクロソフトのサポートページにあった
http://support.microsoft.com/default.aspx?scid=http%3a%2f%2fwww.microsoft.com%2fJAPAN%2fsupport%2fkb%2farticles%2fj046%2f7%2f41.asp
をやってみましたがセットアップは出来ないままなのです。


OSはWindows XP Professionalです。
>>140
>英語かどうかはわからないと思いますよ。ローマ字かも
>知れないし。
もしかして、例えば「age」っていうのが英単語かローマ字日本語か見分けたいの?
そりゃ絶対むり。2chじゃ「上げ」だが普通は英単語で年齢のことだ。
Wordなんかのスペルチェックでも「上げ」とは絶対解釈しない。
149141=145:02/01/16 22:50
>>146
すいません、オブジェクトブラウザ使う場合、
IEでAtt+F11できないから、
やはりエクセルとかのアプリからIEで「参照設定」して、オブジェクトブラウザに
表示させるんですよね・・・?
でも、どれを参照設定すればいいんでしょうか?
「Internet Explorer〜」とか「Microsoft Internet Explorer〜」を探したものの、
見つからないのですが?
あるいは何か勘違いしてます?
150デフォルトの名無しさん:02/01/16 22:54
>>149
shdocvw.dll
MSHTML.TLB
IE関係いじるときはこの2つを参照設定してる
>>144
ADOだけじゃ無理かも。
何のDBに接続してるの? Access? SqlServer?
>>144
これでどうや。
ADOXはMicrosoft ADO Ext. ? for DDL and Securityを参照設定やで。

Dim ax As New ADOX.Catalog
Dim tb As ADOX.Table

ax.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source= データベース名.mdb;"

For Each tb In ax.Tables
Debug.Print tb.Name
Next
153144:02/01/16 23:52
>>151
ありがとうございます。
Accessに接続してます。いろいろやってみたいっすね。

>>152
やってみたら出来ました!
ちなみに、これってクエリーも釣れてしまうんですね。
うーむ。よく調べてみます。ありがとう。
154困った名無しさん:02/01/16 23:55
教えてくんでスマソ。

仕事先での案件で、VB使うことになってインストールしたら、
F1キーで「ヘルプを表示できません」ってメッセージが出るんです。
MSDNは単独(プログラムメニューから)見ることができる。

今まで何も考えずにインストールしてて、ヘルプが表示されないなんて
事無かったよ。

因みに、w2k Server環境でVB6のエンタープライズ。
MSDNはカスタムでフルインストール。
自分の環境(w2k pro)で同じ構成で問題ないのになぁ。

突っ込まれる前に、googleと過去ログ(初心者質問スレ)は見てみました。
他の過去ログは何故か404で見ることができない。

あとMSDNも目を通した(w
155141=145=149:02/01/16 23:56
>>150
ありがとうございます。無事表示できました。
しかし、ヘルプが表示されないのですが・・・ヘルプは存在しないということでしょうか?
だとしたらどうやって各メンバの意味をみなさん知っているのでしょう?
(まぁ、shdocvw.dllの1部は、説明がオブジェクトブラウザに書いてあるようですが・・・)
156困った名無しさん:02/01/16 23:57
書き忘れ。

んで対応策とか細かくFAQとか有る場所があったら
教えてください。

解決策そのものズバリは特に歓迎(w
157デフォルトの名無しさん:02/01/17 00:38
158155:02/01/17 02:11
>>157
いやいやありがとうございます。なかなか参考になります。がんばってみます。
159144=153:02/01/17 18:54
>>152
なんだかデータベースに書き込み行おうとすると、
ロックされて書き込めないのですが、カタログ使うと、こうなる仕様ですか?
160デフォルトの名無しさん:02/01/17 22:35
VBのディストリビューションウィザードでSetupを作成したんですが、
インストール対象がWindowsXPの場合、DLLやOCXが正常にインスト
できないようです。直接System32フォルダに放り込んでもダメです。
なにかいい方法があったら教えてください m(_ _)m
COM系なら、regsvr32(または同等機能)を実行してないとか。
162お願いします:02/01/17 22:53
REDIM を使って配列エリアを拡張した場合、使い終わったら
ERASE を使って解放してあげないと、いわゆるメモリリーク
となってしまうのでしょうか?
>>162
ならない
164お願いします:02/01/17 23:00
>> 163
ありがとうございます。
C言語の malloc 見たいに、解放してあげないといけないのかと
思ってました。
165演算ベンチ:02/01/17 23:32
ここに VB4.0 と VC6.0 の演算速度比較が載ってますが、
ttp://www.wombat.or.jp/tomoyashuttle/shtml/colum/vbspeed1.htm

バージョンが違うし、整数型だけだし、PCも旧式。>Pentium133,32MB

VB6.0のネイティブ・コンパイルで、実数型だと、どうなりますか?
166デフォルトの名無しさん:02/01/18 00:03
VBのsendkeyで、windowskeyを押すことはできないのでしょうか?
ttp://www.asahi-net.or.jp/~yy6m-wd/kuma/tip/vb.htm#sendkey
などを見ても、winkeyは載ってない。。。
167デフォルトの名無しさん:02/01/18 00:04
プログラムが横にながくなって見にくいです。
途中で改行させることってできますか?
初歩的な質問ですんません。
168デフォルトの名無しさん:02/01/18 00:07
>166
たしかwinkeyだけはダメだったと思う。

>167
半角スペースと半角アンダーバーで改行できる。

169167:02/01/18 00:12
>168
どもありがとうございます。
170168:02/01/18 00:20
>166
Ctrl+EscでWindowsKeyと同じメニューが出せるけど、
こんなもん出してどうするの?
目的はホットキー?

>>167
文末を _にすれば次の行は前の行の続きとされる。
 if (ながーい条件とか) and _
   (ながーい条件とか) then

アンダーバーの前に必ずスペース空けること。
何行にもできるけど、限界はある。
っていうかヘルプ見てみ。サンプルとかで一杯でてくるから。
172166:02/01/18 00:32
>>170
そうです。ホットキーです。
Powertoys for Windows XP を入れたら、
バーチャルデスクトップ機能としてWin+1〜4でデスクトップを入れ替えられるようになったので、
OS起動後にVBSでその辺の処理を自動処理したいと思って。
「Win+■」=「Ctrl+Esc+■」だったららくなんですけどね。。。
173デフォルトの名無しさん:02/01/18 00:35
ExcelからVBA使って、IEを動かしてるのですが、
VBAを使ってIEを動かしてウェブサーバのBASIC認証を通ることは可能でしょうか?
174167:02/01/18 01:22
もう一つ質問したいです。
text1.textに2つの数字を入力して、label1.captionにtext1.textの数字の左側の数字を出したいんですが、やりかたがわからないんです。
教えていただけないでしょうか?
>>174
数字二文字(="01")ならleft()、mid()
任意数値を区切り文字で入力ならsplit()を
HELPで当たるが良いと思われ。
>>160
ターゲットと同じOS、環境でインストール環境を作っては?
VBは普通そうすると思う。
177デフォルトの名無しさん:02/01/18 13:38
1行に1つ数値が書き込まれたテキストファイルがあり、これをソートしたい。
数値は小数部分があるものもあり、また桁もそろっていません。(10.5とか-9849848.1514142など)
誤ったデータはないもとします。(ABCとか、121あ12など)
このテキストファイルは約1GB程あるとします。

もし、このデータをソーティングするとしたらどのようにしますか
178デフォルトの名無しさん:02/01/18 13:45
>>177
少しずつ読み込んで、シェルソートとかしたら?
途中経過はテンポラリファイルに書き出すとかして。
 
前のスレあたりにも、同じような内容の質問があったような・・・
前スレを見てみましたが、結論は出てないようですね
180デフォルトの名無しさん:02/01/18 14:30
>>179
アレはファイルにいったん書き出すのがヤダとかいうから
解決してないのでは?
181177:02/01/18 14:39
少しずつ読み込んでソートしていったら、読み込んだ分がソートされてしまうのでは
ないのでしょうか?
結合するときにまたソーとするのですか?
182デフォルトの名無しさん:02/01/18 14:58
>>181
シェル・ソートってそういうときのために
ある方法だったような・・・記憶が曖昧でスマソ

確か部分数列ごとにソートして収束させていく
というアルゴリズムだと思います。
183182:02/01/18 15:01
やっぱ無理みたい
184182:02/01/18 15:04
遅くても良いならランダムアクセスファイルにして、
レコード番号を配列代わりに使えばできなくはないけど
B-treeとして書き出していくとかどうよ?
一種の簡易DBになっちまうが。
186160:02/01/18 16:37
>>176
レスありがとうございます! XPをサブマシンに導入して、
試してみます。ありがとうございました。
>>177
ヲレならDBにぶち込む。

貴方の問題は1GBのデータをソートする事なのか、
そのソートしたデータを使って何かの処理を行う事なのか?
後者なら先ずは動く事、早くするのはそれからの事。
188デフォルトの名無しさん:02/01/18 17:36
>>181
マージソートの要領で結合しながらソートすればいいと思います。
189まちゅ ◆VcvMACHU :02/01/18 18:17
たぶん、188さんと同じようなことかもしれないけど、
1GBのファイルを分割してバブルソートしてはどうかな?
たとえば10MBくらいのファイルを100個作って番号を振っておく。
まずファイル1と2を読み込んでソート。
20MBくらいならオンメモリでできるでしょう。
ソート後にファイル1と2に半分づつ書き戻す。
次は、ファイル2と3を読み込んでソート・・・てな具合にやれば出来そうな気が。
190177:02/01/18 19:50
色々な考え方があるものですね。
アルゴリズムについてあまり知識がないので勉強になります。

私は>>184さんと>>185さんのやり方は、どういうものなのか
理解できませんでした。すいません。。。

>>187さんの方法はDBに一旦全部格納して、SQL文でソートさせて抽出しそれを
ファイルにまた書き出すということでしょうか。それが最も簡単だと思います。
ただもしも、DBに入れられる限界を超えてしまったとしたら、できなくなってしまいます。

>>188さんと>>189さんの方法ですと、少しずつに分けてソートすることが
私にもできそうな気がしてきました。まだ考え方がうまくまとまらないのですが
もっと勉強しようと思います。
191デフォルトの名無しさん:02/01/18 23:31
単純に分割するのではなく、数値の範囲で分割すれば
再ソートする必要はなくなる。
スワップしまくりのDBより速く結果が出る。
>>165
>ここに VB4.0 と VC6.0 の演算速度比較が載ってますが、
>ttp://www.wombat.or.jp/tomoyashuttle/shtml/colum/vbspeed1.htm
>
>バージョンが違うし、整数型だけだし、PCも旧式。>Pentium133,32MB

VB4はP-CODEコンパイルしかないしね。

後、根本的に計測の仕方に違いすぎですね。
・OSがWin95
→計測タイミングでかなり揺らぎがでる。何度か計測した上での平均なのかどうか不明。
・VB側のa,b,AnsがInteger
→VCでintなら、VBではLong。
・VB側の時間計測が精度の低いTimer
→VC側をGetTickCountでやるならVBも同じに。timeGetTimeの方がいいけど。
・終了時間の取得がVCではまず変数に入れてから。
→VB側もt1を宣言して、一旦変数に入れてからに。後、t0、t1共に宣言して。

>VB6.0のネイティブ・コンパイルで、実数型だと、どうなりますか?
両方持ってて暇な人実験きぼんぬ。
でかいファイルのソート方法

(1)入力ファイルをワークファイル0にコピー
 (入力ファイルを残さないなら不要)
(2)ワークファイル1とワークファイル2を書き込みでオープン。
 (中身は消す)ワーク0は読み込みでオープン。
(3)X=1とする。
(4)ワーク0から一件読み込む
(5)前回のデータより小さいならX=X+1(X=3ならX=1)
(6)読み込んだデータをワークXに出力
(7)ワーク0の最後まで(4)から繰り返す
(8)ワーク2の件数が0なら終了。
(9)全てのワークをクローズして
  ワーク1ワーク2を読み込みでオープンしなおす。
  ワーク0は書き込みでオープン。
(10)ワーク1とワーク2から一件づつよみこむ。
(11)読み込んだデータで小さい方をワーク0に出力
  書き込んだ方は新しいデータを読み込む。
  もしワークの最後まで来たならデータを最大値(99999999とか)にしておく。
(12)ワーク0以外の全てのワークが空になるまで(11)から繰り返す。
(13)全てのワークをクローズして(2)から繰り返す。

これがファイルソートの基本中の基本のマージソート(2ファイル)。
ワークを増やせば効率がよくなる。
HDDに元データと同じくらいの余裕(これがなきゃ出力できんわな)と
数件のレコードを保存するメモリがあれば
どんな量でもソートできる。

ちなみにこれは改良の余地がかなりある。
(2)〜(7)までを分配フェーズ、(9)〜(12)を統合フェーズというが
はじめに大小関係が成り立っているデータの塊を
フィボナッチ数でワークに分配しておき
分配と統合を同時に行えるようにするポリフェーズソートとか。
興味があるならアルゴリズムの書籍を読め(古いやつな)。

ちなみにいまどきこんなソート誰もやらん。
DBにつっこんで終わり。
194デフォルトの名無しさん:02/01/19 10:15
ラベルに縦方向センタリングスタイル(SS_CENTERIMAGE)をつけたいのですが、
hwndプロパティが無いので、SetWindowLongが使えません。
コントロールサイズそのままで、ラベルに縦方向センタリングをつける方法って
何かありませんか?

195デフォルトの名無しさん:02/01/19 10:30
コレクションって内部でどういう実装になってるの?
ハッシュ? ツリー?

For Each 〜 Next でコレクションの中身を取り出すと、
ちゃんと入れた時と同じ順番で出てくるのが不思議なんだけど…。

ひょっとして、リスト構造?
196PentiumIII 866MHz:02/01/19 11:24
VisaulBasic6Ent.
-------------------------
Option Explicit

Public Declare Function GetTickCount Lib "kernel32" () As Long

Sub Main()

Dim i As Long
Dim a As Integer, b As Integer
Dim Ans As Integer
Dim t0 As Long

  a = 16: b = 8
  t0 = GetTickCount
  For i = 0 To 10000000
    Ans = a + b
    Ans = a - b
    Ans = a * b
    Ans = a \ b
  Next i
  MsgBox ("Time: " & CStr(GetTickCount - t0))

End Sub
-------------------------
平均 220ms


=============================


Delphi6 Personal
-------------------------
program SpdDel;
uses
Windows;

{$APPTYPE CONSOLE}
var
I,A,B,Ans,T0,T1:Integer;
begin
  A:=16; B:=8;
  T0 := GetTickCount;
  for I:=0 to 100000000 do
  begin
    Ans := a + b;
    Ans := a - b;
    Ans := a * b;
    Ans := a div b;
  end;
  T1 := GetTickCount;
  write('Time:');
  write(T1-T0);
end.
-------------------------
平均 234ms
キーワード:"ドキュン"
文章(例):
ドキュンばっかり珍走団。ケモジャケモジャ。マリオと
オマリー。ドキュンちゃんと食パンマン。VBVBVBVBVBVB

上の文章からキーワードを含む文である、"ドキュンばっかり珍走団。",
"ドキュンちゃんと食パンマン。"を切り取りたいのですが、どうしたら
いいのでしょうか?
キーワードを含む文の長さは不定で複数あります。
へー、デルファイって、API宣言せずに使えちゃうんだ。
便利そう。 := はいただけないが。
正規表現で、
ドキュン[^。]*。
とか。
200デフォルトの名無しさん:02/01/19 16:47
ユーザーがテキストボックスに数字を入れるようにしました。
それで2バイト文字は入力できないようにしたいんですが、どのようにやるんでしょうか?
マウス右クリック→貼り付け、[CTRL+V]の貼り付けもやれないようにしたいんですが、できるでしょうか?
201でく:02/01/19 17:10
プログラムやる上でアルゴリズムは勉強した方がいいですか?
>200
2byte数字は1byte数字に変換するようにすると良いですよ。
2byte文字を弾くのは、1byte文字を弾くのと同じようにやればいいかと。
>>201

必要なときに必要なアルゴリズムを勉強すればいい。
何を作るかによるが、必要になることは少ない。
時間を持て余しているならUMLの勉強をお勧めする。
204パン:02/01/19 20:38
スマートと言うか、皆さんのだったらどういった方法を取られるか聞かせて頂けますか?

今からやろうとしてるのが、帳票や伝票の枠内に数値を印字していきたいのですが、
キャラクター?を設定してズレを防ぎながら作っていくのは気が遠くなりそうなので、

フォーム上にTEXTを並べて微調整していこうとしたら、
A4の用紙だとフォームでは狭すぎて印刷が出来ませんでした。

エクセルやワードをかいして印字する方法や、
アクセスにはフォームエディタみたいなウィザードが用意してあると聞いたこともあります。

行間など環境が変わっても左右されにくいのは、どういった方法でしょうか。

地道な作業なので、確実な手段でして行きたいので、みなさんでしたらどういった手段をとられますか?
宜しくお願いします。
-------------------
OS WinMe
VB6.0 Pro
MS Office
スキル 夜鍋の1年間てーど
-------------------

205197:02/01/19 21:44
>>199さん、レスありがとうございました。
早速、参考書片手にやっています。
試しに、Split関数でキーワードを含む文を***で埋めようとしてみたんですが、
"ドキュン[^。]*。"だと、"***ばっかり珍走団。"という風に
文全体で無く、キーワード部分しか埋めてくれません。
Splitじゃなくて他の関数を使わないと無理ですか?
206コピペ厨房:02/01/19 22:50
>>204
> 今からやろうとしてるのが、帳票や伝票の枠内に数値を印字していきたいのですが、
> キャラクター?を設定してズレを防ぎながら作っていくのは気が遠くなりそうなので、

市販品を使ってよければ、ActiveReportとか使うと簡単にできますよ。
Excelを利用可能であれば、それを使うというのもあります。

207デフォルトの名無しさん:02/01/19 23:06
>197
strIn = 例文
strOut = ""
strWork = Split(strIn, "。")
For Each strLine in strWork
 If InStr(strLine, "ドキュン") Then strOut = strOut & strLine & "。"
Next

199の正規表現を使うなら、コンポーネントを追加しないと。
208デフォルトの名無しさん:02/01/19 23:09
>204
テキストを並べるのは、DOS時代のやり方。
VBなら印字位置を0.01ミリ単位で指定できるじゃん。
209ごるぁ:02/01/19 23:19
204はマルチ
はわわー
>>204
帳票、伝票等をお手軽に済ませたいなら
Excel、Accessを活用する事をお勧め。
211VB超初心者厨房:02/01/19 23:49
ユーザーフォーム、ワークシート、モジュールなどを活用した
プログラムを作成したいのですが、超初心者でもできそうな
ものはないですか?
212165:02/01/20 01:08
>192
レスどうも。
よく考えたら、Cの場合、ループ内で値が変化しないなら、
コンパイル時に定数を入れてしまう可能性とかもありますね。

>196
Delphi6も。ありがとうございます。

#VCのベンチもお願いします。>持ってる人
イントラネット嬢での話なのですが、winsockコントロール、あるいはそれに
相当するAPIを用いるC/Sのプログラムを作成し、サーバプログラムをNTserverに
配置、作成したクライアントプログラムを用いてサーバプログラムと通信する場合、
NT側のクライントライセンスの追加購入の必要はあるのでしょうか?
ちなみにクライアント側へは、ファイル共有等のネットワーククライアント関連
のインストールはしていません。

>196
Delphi最適化してると使われてないAnsがらみのコード削除しちゃうよ。
定数の代入すらやらないはず。

バブルソートでもやってみたら>ベンチマーク
>>213
>イントラネット嬢
ちと萌えるな
216173:02/01/20 03:25
以下は、>>173の再掲なのですが
>ExcelからVBA使って、IEを動かしてるのですが、
>VBAを使ってIEを動かしてウェブサーバのBASIC認証を通ることは可能でしょうか?
回答がないところを見ると、便利なやり方はないけど、
perlでやるみたいに1つ1つサーバにhttpで話かければいけるのでしょうか?
#VBやりはじめなのではずしてる可能性大?
217デフォルトの名無しさん:02/01/20 03:33
>216
Userプロパティ使えばいけると思うけど、VBAにはないの?

もしなければ、http://ユーザ名:パスワード@www.hoge.co.jp/
とかは通らない?
218デフォルトの名無しさん:02/01/20 03:35
>214
Delphiはそこまで最適化?
そう言えば、昔のCは、使われてない変数に警告出してたな。
219213:02/01/20 03:49
>>215
あはは…本当ですね。
気付かなんだ。会社で隠語で使えそう。
「オッパイ出してるイントラネット嬢」とか
「超難解イントラネット嬢の隠しバイト」とか。

関係ない話ですいません…質問は至ってマジメというか
業者にアホみたいなライセンス数見積もりで出されたので
ちょっと?って感じなんですよ。ご回答お待ちしております。
>>218
Delphiは知らんけど、弟分のBCBでもそんな感じに最適化される。
デバッグする時にそういう無意味な変数にbreak point張ると
何事も無かったかのように素通りしてくれるよ。
板違いネタスマソ。
>>219
そんなのMSに直接問い合わせれば?
ライセンス料って結構いいかげんというか
運用形態に拠って変わってこないかい?

NT Serverの事は良くしらんけど、
Oracleとかは馬鹿みたいな金額取られるよ>追加ライセンス
>>219
仕事なら221の言う通りMSに聞いて根拠にするのが一番だけど、
ソケット使うだけでライセンス発生するなら
IISでサイト開いてるところは万単位のライセンスが必要になると思うぞ(藁

そのC/Sシステムが何をやっているかによって変わってくる。
223196:02/01/20 13:51
>214
適当にやってみたけど
-------------------------
Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Const SAMPLE = 1000

Private Sub Command1_Click()
  Dim I As Long
  Dim J As Long
  Dim sTmp As String
  Dim lTime As Long
  
  Dim A(SAMPLE)
  
  For I = 0 To SAMPLE
    A(I) = List1.List(I)
  Next I
  
  lTime = GetTickCount
  For I = 0 To SAMPLE - 1
    For J = SAMPLE To I + 1 Step -1
      If A(J) < A(J - 1) Then
        sTmp = A(J)
        A(J) = A(J - 1)
        A(J - 1) = sTmp
      End If
  Next J, I
  Caption = CStr(SAMPLE) & "Samples Time:" & CStr(GetTickCount - lTime) & "msec"
  
  List2.Clear
  For I = 0 To SAMPLE
    List2.AddItem A(I)
  Next I
  
End Sub

Private Sub Form_Load()
  Dim I As Long
  For I = 0 To SAMPLE
    List1.AddItem Format$(Rnd, "0.000000")
  Next I
End Sub
------------------------------------------------
こんなコードで
VBは330msec, Delは100msec位だった。
224デフォルトの名無しさん:02/01/20 14:34
>>223
Delのコードは?

>Dim A(SAMPLE)
Variant型かい!Singleにしましょう。速さ全然違うから。

>Caption = CStr(SAMPLE) & "Samples Time:" & CStr(GetTickCount - lTime) & "msec"
終了時間もまず一旦変数に入れてから後処理してね。
22550のVB爺:02/01/20 14:54
VB6(SP5)インストールしたら、今まで何ら問題なかったExcel VBA UserForm
上のDataGridが座標が(0,0)で表示されるようになった。UserFormのInitialize
でDataGrid.Visible=Falseにしておくと、この症状が出るようなんだけど、何か解決
方法はないだろうか。
226でく:02/01/20 15:44
VBプログラマーになる上で、何が出来たら一人前といえますか?
プロパティーや関数、メソッドなどは全て覚えなければいけませんか?
227197:02/01/20 16:35
>>207さん
アドバイスのお陰で出来ました!
ありがとうございました。
228196:02/01/20 16:55
>>223
ソースとバイナリをここにUPから適当に遊んでくれぃ。

http://r1.ugfree.to/~angriff/596.lzh

しかし、Delのexeはでかいよぉ(w
229VBer:02/01/20 19:10
ウィンドウに対してAlt+PrintScreenを押すとイメージがクリップボードに入りますが、
これをVBから他ウィンドウへ対して実行したい時は、
どのメッセージを送ればよろしいでしょうか?

Spyを使って調べながら・・・・

ret = PostMessage(hWnd, WM_SYSKEYDOWN, &H12, &H60310001)
ret = PostMessage(hWnd, WM_SYSKEYUP, &H2C, &HE0540001)
ret = PostMessage(hWnd, WM_KEYUP, &H12, &HC0380001)

を送ってみましたが、上手くクリップボードへ入ってくれませんでした・・・・。
230デフォルトの名無しさん:02/01/20 19:27
>>229
keybd_eventでどうぞ。
231デフォルトの名無しさん:02/01/20 21:23
この様な回転の為のサブプロシージャを書いた後、
Private Sub rotateZ(p() As point3D, s As Integer, e As Integer, _
rz As Single)
以下・・・。

その後Callステートメントで呼び出す時、どう書けばいいんですか?
Call rotateZ・・・この後カッコを付けて、p() As・・・と全部書けばいいんですか?
232あじゃぱ:02/01/20 23:05
VBのよい参考書があれば教えてください.
MSDN>232
>>233
基本ではあるが良いとはお世辞にも以下略。
235デフォルトの名無しさん:02/01/20 23:19
>>226
全部覚える必要はないよ。使わないものも多いから。
でも、AccessやExcelとの連携やSQL操作の仕事が一番多いかな。

>>231
いちおう対応する変数は全部必要。型宣言は不要だけど。
236デフォルトの名無しさん:02/01/20 23:21
>>231
ネタ…?

Dim buff_p() As point3D
Dim s, e, rz As Integer

<初期化、計算処理>

Call rotateZ(buff_p, s, e, rz)
237デフォルトの名無しさん:02/01/20 23:28
>>236
えーっと。サブプロシージャを見つけて、
使おうとしたのですが、どうすればよいのか分かんなかったのです。
説明するのに頭の部分だけで良かったのかどうか分からないのですが、
やってみます。ありがとうございます。
238デフォルトの名無しさん:02/01/20 23:40
>>236
ネタ…?
それじゃ、s と eがバリアントだけど。
239デフォルトの名無しさん:02/01/20 23:42
>>236
rzはSingleだし。

それに、呼び出し側で同じ変数名使うかな。
面倒くさい時は使うか…。

240デフォルトの名無しさん:02/01/20 23:43
>>237
人に聞く前にまずやってみて、ばんばんエラーを出すほうが
覚えていくもんだよ。
>>226
>VBプログラマーになる上で、何が出来たら一人前といえますか?

自分で考えること。
自分で調べること。
自分で実験すること。

>プロパティーや関数、メソッドなどは全て覚えなければいけませんか?
そんなの全部覚えてるやつはおらん。
(長いことやってれば、どのコントロールにどんな感じのプロパティやメソッドが
あるのか知ってるし、似たようなコントロールなら予測もできるけど)

・はじめてのコントロールを使うときは、まずヘルプでそのコントロールの
プロパティ、メソッド、イベントに一通り目を通す。
・使ったことのない関数を使うときも、ヘルプで使い方を調べる。
さらに、その関数を使った小さな実験プログラムを作って自分の目で
動作確認をする。

VBに限らずプログラミングの基本中の基本。
242デフォルトの名無しさん:02/01/21 05:47
フォームのBoaderStyleを「可変」に設定しておいて、フォームを小さく
していくと、あるところでListBoxなどが「プロシージャの呼び出し、また
は引数が不正です」なるエラーを出てしまいます。タイトルバーしか表示
されないというところまでフォームを小さくするためには、どうしたらいい
のでしょうか。
243デフォルトの名無しさん:02/01/21 06:22
>242
そんなこと、今まで誰もやってないと思われ。
ListBoxを不可にするとか、不可視にするとかは?
その動作は、「高速ダウンローダー2001」をおもいだしすな、ぁ。
245242:02/01/21 06:49
>>243さん、レスありがとうございます!
242で書くべきでしたが、フォームのリサイズの際にListBox
のサイズも変更されるように、次のような記述をしています。

List1.Move 120, 120, Me.ScaleWidth - 240, Me.ScaleHeight - 240

これで、List1のHeightが240に達すると先のエラーを吐いて
しまうようです。ご指摘の通り、不可視にすればエラーを回避
できました。次の記述を加えてみました。

If List1.Height < 250 Then
List1.Visible = False

一応の解決を見ました。ありがとうございました! ところで、

> そんなこと、今まで誰もやってないと思われ。

これはどういう意味なのでしょうか。もしかして、他にもっと
いい方法があるのでしょうか。ご指導いただけると助かります。
重ね重ねよろしくお願いします!
>>242
もしかして、Form_Resize で、そのリストボックスの高さとか幅を、
フォームサイズに合わせてない?
高さや幅の値が<0になってエラーになってるだけと思うが。

ちゃんとチェックしてマイナスにしないようにするのが良いが、
手抜きとしてはこんなんもアリ(笑

Private Sub Form_Resize

 On Error Resume Next '//手抜き

 List1.Height = Me.ScaleHeight - List1.Top

End Sub
247デフォルトの名無しさん:02/01/21 07:56
>>240
お返事ありがとうございます。
昨日は睡魔に負けてしまいました。
わからないことがまだ沢山あるので、その時はお願いします。
248名無しさんです:02/01/21 10:41
枠無しにフォームのサイズを変更してるアプリって
ありますよね?例えば付箋関係なんかが良くやって
ますが、あれって自力で枠周辺を監視して処理して
いるのでしょうか?だとしたら具体的にどういった処理
が必要になるのでしょうか?
249VB使い:02/01/21 10:52
>>248
サブクラス化+メッセージ監視で出来るよ。
サンプルはWebに山ほどある。
250248:02/01/21 11:01
>>249
サブクラス化しなきゃできないですかね〜。
当方開発環境がwin98なのでサブクラス化すると
ステップ実行したりエラー出たら落ちたりするんで
できればサブクラス化はしたくないのです…。
NT系だとサブクラス化しても問題無いと聞きますが。
251VB使い:02/01/21 11:30
>>250
まあ、サブクラス化はめんどくさいからな。
俺も完成寸前にしか動作させない。

んじゃこれ使ってみれ。
1.フォーム作ってフォームのコードに貼り付ける。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SendMessage Form1.hwnd, &hA1, 11, 0
End Sub
2.実行してフォームをドラッグする。

あとはMSDNでWM_NCLBUTTONDOWNとか見れ。
252250:02/01/21 11:45
早速試しました。なるほど、とりあえず右方向だけですが
サイズ変更できました。あとは外周マウス座標をなんとか
すればイケそうですね。MSDNでちとイロイロ調べてみます。
サンクスでした。
253250:02/01/21 11:46
あ、>>251 のVB使いさんへの返信です。
254242:02/01/21 17:17
>>246さん、レスありがとうございます!
自宅に帰ったらさっそく試してみたいと思います。
ありがとうございましたm(_ _)m
255デフォルトの名無しさん:02/01/21 18:09
>>238
C, C++ とかぶってしまった。

>>239
スマソ、宣言よく見てなかった…。
256デフォルトの名無しさん:02/01/21 20:44
VB6、今日から使い始めたんですけど、
SVGA(800×600)対応のフォームを作ろうとしたら、
XGA以上のディスプレイで設計しないといけないんですか?
>255
マ板で叩かれてた人かい?

http://pc.2ch.net/test/read.cgi/prog/1010916886/
258デフォルトの名無しさん:02/01/21 20:58
いまVB6.0とVC6.0をインストールしています。

VisualStudioのSPですが、最新版だけ当てるのは
駄目なのでしょうか?

よろしくおねがいします。
259デフォルトの名無しさん:02/01/21 20:59
>>256
プロパティウィンドウで設定できるのは画面のサイズまでだったと思うので、
実行時にフォームのサイズを合わせれば一応できますが・・・

でも、実行する度に画面いっぱいいっぱいで開発効率が非常に悪いのは
言うまでもないでしょう。
260デフォルトの名無しさん:02/01/21 21:00
>>258
最新版にはそれまでの修正が全部含まれてます。
261258:02/01/21 21:06
>>260
ということは最新版だけで良いんですね。
ありがとうございました。
262257:02/01/21 21:06
>257ですけど、>256へのレスでした。
263256:02/01/21 21:08
>>259
なるほど、できないことはないんですね。
月末、XGAのノートPCが到着するから、
それまで違う部分を作ることにします。
ありがとうございました。

>>262
ちがいます(w
264デフォルトの名無しさん:02/01/21 21:42
お世話になりますm(_ _)m

現在、ダイアログを作成してるんですが、親のフォームからの
値の取得をどうやるかで悩んでいます。いまは、わざわざLabel
コントロールに値をいったん格納し、それを

 AAA = Form1.Label1.Caption

などといったふうに読み出しています。この方法でも問題なく
処理はできるんですが、今一スマートさにかけるような気がし
ています。コントロールを作ることで余計なメモリも食ってし
まうような気もしますし。。。プロシージャやフォーム単位を
超えた、プロジェクト内で自由に使用できる変数の設定って可
能なんでしょうか。よろしくお願いします。
>>264
新たに、「標準」モジュールを作って、そこに

  Public 変数名 as 型

と宣言すべし。全モジュールより参照できる。
こんな場合なら、構造体を使うのがベターだな。
オブジェクト指向っぽくないが、VBなので気にするな(w
266デフォルトの名無しさん:02/01/21 22:32
>>264
フォームモジュールの先頭に
Public AAA As String
とすれば、外部からはForm1.AAAでそれにアクセスできます。

また、変数自体はPrivateにしておいて、
PublicなPropertyプロシージャを作ればリードオンリーにしたり、
入力チェックをしたり、細かいアクセス制限もできます。
その場合もぷろぱてぃ名がAAAならば、
Form1.AAAでアクセスできます。
267264ではないですが:02/01/21 22:34
>>265
>構造体を使うのがベター

それってもしかしてclassのことですか?
VBのclassがわからなくて、ある人は「C言語の構造体のようなもの」だといってました。
C言語もよく知らないんですが、VBでclassを使うといいのは どんな時ですか?
268あじゃぱ:02/01/21 22:36
これからVBを学ぼうかと思っているのですが、
皆さんはVBを一通りこなせるようになるのにどれくらいの時間がかかりましたか?
さらにプロレベルになるのにどれくらいかかりましたか?
269265じゃない:02/01/21 22:53
>>267
>それってもしかしてclassのことですか?

クラスと構造体は別。構造体にあたるものはVBではユーザ定義型と呼ばれるよ。
クラスはクラスモジュールに記述する。

>VBのclassがわからなくて、ある人は「C言語の構造体のようなもの」だといってました。
>C言語もよく知らないんですが、VBでclassを使うといいのは どんな時ですか?

クラスはあるデータのまとまり(プロパティ)とそれらを操作するメソッドで構成されてる。
クラスはいくらでも量産することができる。標準モジュールだとこうはいかない。
実際に使ってみないと実感わかないと思うよ。
270デフォルトの名無しさん:02/01/21 22:54
>>268
それ聞いてなんかの参考になるん?
271あじゃぱ:02/01/21 23:01
>270
参考までにとしか言いようがないです.
まあ早く覚えて就職したいと考えているので、参考までに他の人は
どれくらいなのかなと思ったので.
272267:02/01/21 23:24
>>269
ありがとうございます。むずかしいですね・・・。
ある人は「クラスは概念だから説明しづらい」とも言ってました。
参考書なんかにもなかなか載ってないし・・・。
どんな時に必要になるのか、まだよくわかりません。
>>269さんはどうやって勉強しましたか?
273 :02/01/21 23:29
VBランタイムをDLしたいんですがうまくいきません
助けてください
274デフォルトの名無しさん:02/01/21 23:31
>271
早い人は早いし、遅い人は何年たってもダメ。

たとえば何年勉強すれば、英語しゃべれるようになる?
275デフォルトの名無しさん:02/01/21 23:36
テキストフィールド間をEnterキーで
移動させる方法を教えてください。
お願いします。
276269:02/01/21 23:40
VBページでクラスを扱っているところ。
ttp://www.interq.or.jp/www-user/komurak/main.html
ttp://homepage1.nifty.com/CavalierLab/lab/
http://www.gj.il24.net/~nakasima/

とりあえず1番目がお勧め。
3番目はある程度わかるようになってからの方がいいかな。
277デフォルトの名無しさん:02/01/21 23:48
>275
超FAQ。
SetFocusで移動。KeyCode=0でBeep音対策。
入力チェックには、Validateなんかおすすめ。
>>268
>皆さんはVBを一通りこなせるようになるのにどれくらいの時間がかかりましたか?
サラからでもひと月も毎日使っていれば普通の人なら理解できるよ。
うちの会社にいる茶髪ねーちゃんでも出来たもん。

>さらにプロレベルになるのにどれくらいかかりましたか?
プロっつーてもピンキリあるからなぁ・・・

「VB」を覚えようとするな「プログラミング」を覚えろ。
「プログラミング」はすぐには身につかん。経験が絶対必要。
本気でプロになるつもりなら、とにかく作れ。なんでもいいから作れ。
プログラムだけでなくソースも他人に見せて叩かれろ。
他人に見せられないようなソースは売り物にならん。

↑は俺の言葉じゃないけど、間違ってないと思うよ。
279デフォルトの名無しさん:02/01/22 00:52
>>277
ありがとうございました。
text1からtext2に移動させるとしたら、これで良いのでしょうか?
とりあえずはうまくいったのですが.....

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
Text2.SetFocus
End If
End Sub

それと、色々調べてる時にEnterキー移動はあまりお勧めできない
って書いてあったりするのですが、何か問題があるのでしょうか?
もしよろしければ教えていただけませんか?
>278
そして、勉強している間は給料の文句は言うな

もお忘れなく。
VBと関係無いんでsage
281デフォルトの名無しさん:02/01/22 01:01
>>279
Windowsの標準はTabでフォーカス移動だから。
標準から外れるからには棘の道を進む覚悟が必要。
282デフォルトの名無しさん:02/01/22 01:02
>279
KeyPressはキーを押した後なので、それより前のKeyDownに書くほうがベター。
キーイベントの発生順序は、KeyDown → KeyUp → KeyPress なのだ。

さらに、KeyAscii = 0 の後に、
Text1.Enabled = False
Text1.Enabled = True
の2行を入れるのがM$推奨だったりする。

WindowsがTABキーで次項目に移動する仕様になってるから。
操作の統一という意味でお勧めできないというだけ。

Enterで移動するのはDOSの仕様で、これに慣れてる中年クライアントの
希望が実際に多い。ExcelもEnterによるセル移動を捨ててないしね。
283264:02/01/22 01:13
>>265 >>266さん、ご回答ありがとうございます!
さっそく作りかけのプログラムを書き換えます。ありがとう
ございました!
284デフォルトの名無しさん:02/01/22 01:14
>>281
>>282
ありがとうございました。
TabキーがMS標準なんですね。
エクセルやアクセスを使っているとEnterキーが
標準のように思ってました。
色々と勉強になりました。
285267:02/01/22 03:09
>>276(269)
クラスについてのサイト紹介、ありがとうございました。勉強してみます。

あと>>279さんのご質問に関しての>>282さんのレスについてなんですけど、

>さらに、KeyAscii = 0 の後に、
>Text1.Enabled = False
>Text1.Enabled = True
>の2行を入れるのがM$推奨だったりする。

のところの意味がわからないんです。これはどういうことでしょうか?
286VB使い:02/01/22 04:49
>>285
M$=MicroSoft(ややUG,2ch用語)
287デフォルトの名無しさん:02/01/22 06:31
>285
Enabled=Falseにすれば、次のコントロールにフォーカスが移る。
その後で、Enabled=Trueに戻せばいいってこと。
これに対しSetFocusだと、フォーカスの順番を無視できてしまう。
ただ、それだけの違い。

作成過程の都合=コントロールを貼り付けた順番のままで、
フォーカスの順番なんてまったく考慮してないアプリもあるけどね。
288てちゅや:02/01/22 17:20
Public Sub HogeHoge(aryParam() As Long)
For i = LBound(aryParam) To UBound(aryParam)
'aryParamを使った処理
Next
End Sub

動的配列を引数に使った上記のような関数を作成しているのですが
この関数の呼出しもとで以下の

Erase aryData
Call HogeHoge(aryData)

の様に Erase でメモリ開放をおこなってしまうと

LBound(aryParam) 及び UBound(aryParam)

の所で「実行時エラー'9' インデックスが有効範囲にありません」
が出てしまいます。
これの回避に IsArray() で判定してみたりしたんですが、
Erase をしていても宣言時に Xxxx() としていると配列扱いです。

どうやってメモリが確保してあるか判定すればいいのか分からないです。
もしかして、On Error ステートメントで実行時エラー判定させる
しか方法はないのでしょうか?

よろしくお願いします_(._.)_
289はぢめてのVB6:02/01/22 18:23
高度な質問の中すみません
単純なゲーム形式のプログラムを作りたいのですが

「あっちむいてほい」の逆の形式で、Rnd関数で提示した方向(ピクチャで)に対応して
キーボードの←↑↓→を押す。
正解なら正解の回数をカウントしてもう1度
不正解なら正解するまでそのまま(正解以外の入力を受け付けない)
(できればタイマーで時間制限つき)

KeyDOwnイベントと正解をカウントするってところでつまづいてます。
手元に参考書になるものが少ないので是非皆さんの力を借りて完成させたいのです。

290バァ:02/01/22 18:44
>289
ウp希望
291デフォルトの名無しさん:02/01/22 19:26
ウp?
292VB使い:02/01/22 19:41
>>288
つまり、動的配列の初期化/未初期化の判定をしたいんだよな?
・・・たぶん無理。

一応、On Error〜か、Redimの後に必ず初期化するか、ファイルに書き込んで
サイズを調べるとか方法があるけど一番いいのは初期化だと思う。
あとバリアントに入れてメモリをチェックするって方法があるかも。今ちょっと分からんが。
他に知ってる人キボーン。

>>289
もうちょっと具体的に頼む。
>>291
それだけじゃ答えようがないから、
今どんなふうにやってるのか示せ(コードをupしろ)ってことだろ。たぶん。

嫌われる質問の仕方の見本みたいな書き方だからな。
「つまづいてる」って言われても289にしか状況がわからん。
「こういうエラーが出る」とか「こうしたいのにこうなってしまう」って具合な
問題点を示してくれないと答える側はいやなもんさ。
せっかく答えても「すいません、質問の仕方がわるかったです〜」みたいに
なる場合が多いからな。
294285:02/01/22 22:19
>>286
>>287
ありがとうございます。よくわかりました。
ただあとひとつだけ。
>SetFocusだと、フォーカスの順番を無視できてしまう。

とありますが、それを無視できてしまうことの問題というのがいまいちピンとこないのです。
EnterとTabとを押した場合でフォーカスがうつる順番がちがってしまうということでしょうか。
295VB使い:02/01/22 22:39
>>294
SetFocusを使うとどこでもフォーカス飛ばせるんだけど
それはWindowsの行儀に反してるから順番どおりにフォーカスを
移動するようにしてね。
とMicosoftが主張してるってこと。
296285:02/01/22 22:48
>>295
なあるほど。ありがとうございました。

また疑問ができたのでお願いします。
ひとつのプロシージャの中で、まったく関係のないループ処理が複数ある場合、
ループカウンタとして使用する変数を たとえば Dim i As Integerと宣言したら、
そのiを使い回していいんでしょうか。
それともそのループごとにわかりやすいように別に作るほうがいいんでしょうか。
プロの方はどうされているのか 教えてください。
297デフォルトの名無しさん:02/01/22 23:43
>>288
VB使いさんと同じで、バリアントで受けるぐらいしか案がない。

>>289
KeyDownより、←↑↓→をキャプションにしたコマンドボタン4個の
ほうがVBらしいかも。まず、そっちで作ってみたら?

>不正解なら正解するまでそのまま(正解以外の入力を受け付けない)
最悪でも4回押せば正解になっちゃうの?

>296
変数名とかは好みの問題かも。
使い捨てループには iを使うけど、intLoopとか使ってる人も。
要は、後で見てもわかりやすいほうを選べばオッケー。
298VB使い:02/01/22 23:53
>>296
俺は使い回ししてるな。
For〜Nextのネストレベルで変数名を同じものにして。

どっちにしろ一番大事なのは常にそうする、ということ。
(会社でやるなら会社に合わせる。)その時々でいちいち変えると
どんなにいい手法でもデバッグがめんどくさい。
299デフォルトの名無しさん:02/01/23 00:00
>>288
SafeArray〜のAPIで調べられるけど、
エラートラップを使ってチェックする関数を自作する方が間違いなく楽でシンプル。

>>296
>ループカウンタとして使用する変数を
>たとえば Dim i As Integerと宣言したら、そのiを使い回していいんでしょうか。

その変数がたいした意味がない場合、あるいは、同じ意味のときは使いまわす。
そうでない場合は、別々の変数にする。

でも、基本的に2つ以上のFor文が出てきたら、機能分割して、
その部分がプロシージャにならないか検討する余地あり。
300299:02/01/23 00:05
>>296
追加。
296>ひとつのプロシージャの中で、まったく関係のないループ処理が複数ある場合、

関係のないループで同じ変数を使いまわす場合は、

299>その変数がたいした意味がない場合、あるいは、同じ意味のときは使いまわす。
の中のその変数にたいした意味がない場合だな。

For文の場合そもそもが単純明快なループのみに絞った方がわかりやすいと思うので、
i,jで十分だと思う。制御変数自体に意味があるなら、意味のある変数名にした上で、
Do〜Loopを検討した方がいいかも。
301デフォルトの名無しさん:02/01/23 01:03
以下の3つについてお願いします。m(_ _)m
1)imageでpngファイルを表示することは可能でしょうか?
2)imageでjpgファイルを表示することは可能でしょうか?
3)pictureでpngファイルを表示することは可能でしょうか?
−)pictureでjpgファイルを表示することは可能ですね。
302VB使い:02/01/23 01:11
>>301

2○

-そうですね。
ありがとうございました。
304デフォルトの名無しさん:02/01/23 01:18
>301
pngはDLLかOCXを使うと表示できる。

305はぢめてのVB6:02/01/23 01:25
>>290-93
ほんとにすみませんでした。
>>297
画面にはピクチャ以外何も表示したくないのでキー操作専用にしたかったのです。
>最悪でも4回押せば正解になっちゃうの?
それは数をこなすことでなんとかしたいです。

とりあえず、自力で形になるくらいまではこぎ着けたのですが、

ピクチャが表示されっぱなしだと、切り替わった際に「ピクチャの形の違い」で
判別しやすかったのでピクチャー1回ごとにを消せるようにしたいです。
(正解して次に切り替わる際に若干消えている時間が欲しい)

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

'キーの入力方向に対してaに値を入れる

If KeyCode = vbKeyUp Then a = 1
If KeyCode = vbKeyDown Then a = 2
If KeyCode = vbKeyLeft Then a = 3
If KeyCode = vbKeyRight Then a = 4
If KeyCode = vbKeyZ Then a = 0 'スタートボタンとして設定

'iをランダムに変化させて1〜4に対応したピクチャを表示

Select Case i
Case 1
Picture1.Picture = Picture2.Picture
Case 2
Picture1.Picture = Picture3.Picture
Case 3
Picture1.Picture = Picture4.Picture
Case 4
Picture1.Picture = Picture5.Picture
End Select

' a = iを正解とし 正解数をxとして設定し、政界した場合にはカウントする

If a = i Then x = x + 1

'正解した場合のみ次のiを決定する

If a = i Then i = Rnd * 3 + 1


'正解数を表示する

Label2.Caption = x

Randomize

If KeyCode = vbKeyX Then End 'ENDボタンとして設定

End Sub
306はぢめてのVB6:02/01/23 01:31
>>290-293でしたスマソ
やはりタイマーでしょうか?
手元に教科書やなんかあればいいんですが・・・
307>305:02/01/23 01:52
>If KeyCode = vbKeyUp Then a = 1
ここは、次のブロックみたいに、Select Case で書いたほうが見やすいし、
キーの連打にも対応できる。

>Picture1.Picture = Picture2.Picture
ピクチャボックスは配列化しちゃおう。
 Picture1(0).Picture = Picture1(i).Picture

>Randomize
これはフォームをロードする時に1回だけ実行すればいい。

>If KeyCode = vbKeyX Then End 'ENDボタンとして設定
これは上の入力部と同じところに書いたほうがいい。
Endは強制終了だから、使用禁止。Unload Me を使う。

>(正解して次に切り替わる際に若干消えている時間が欲しい)
3秒待ちは、こんな感じ。
  Dim Wait As Date
  Wait = Now
  While DateDiff("s", Wait, Now) < 3
    DoEvents
  Wend
308デフォルトの名無しさん:02/01/23 02:01
画像のロードの仕方で以下のやり方で間違っているのはどこでしょうか?
テキストですと同じ方法でロードできるのですが。。。

Dim strBuff_zu As String
Dim intFileNum_zu As Integer
Dim strFullPath_zu As String 'フルパス
Dim strSoutaiPath_zu As String '相対パス

strSoutaiPath_zu = "\tekisei\toi" & i & "\gazou.jpg"
strFullPath_zu = App.Path & strSoutaiPath_zu
intFileNum_zu = FreeFile()
Open strFullPath_zu For Input As #intFileNum_zu
Line Input #intFileNum_zu, strBuff_zu

Close #intFileNum_zu

Image1.Picture = LoadPicture("\strBuff_zu"
309デフォルトの名無しさん:02/01/23 02:09
>308
画像を読み込むだけなら、LoadPictureの1行だけでいい。
()の中にはパスを入れる。EXEと同じフォルダなら、ファイル名だけでも可。

上のブロックは、テキストファイルを読み込む時のやり方で、画像とは関係ない。
310296:02/01/23 07:37
>>297-300
ありがとうございました。
311デフォルトの名無しさん:02/01/23 12:34
VBでユーザー定義関数同士間でCでいう関数ポインタみたいにできないですか?
できるならばやり方ご存知の方お願いします!!
312VB使い:02/01/23 12:49
>>311
関数ポインタで関数を呼び出したいってこと?
313デフォルトの名無しさん:02/01/23 15:00
今、exeファイルのアイコン上に任意のファイルをドラッグ&ドロップして、
そのファイルのパスを取得したいのです。
でも、command関数を使っても、ファイル名が8文字までしか認識されません。
しかも、WinMeだとフルパス認識出来るのに、Win98SE以下だと駄目なのです。
APIを使っても、まずファイル名をプログラム内で指定しないと駄目ですし、
どうしようか、手詰まりになっています。
わかる方いらっしゃいましたら教えていただけないでしょうか?
以下、コードです。

Dim args1, args2 As String
Dim nn As Integer
args1 = Command()
nn = Len(args1)
args2 = Mid(args1, 1, nn)
Open "C:\My Documents\Doc検索\minami.txt" For Output As #1
Print #1, args2
'Print #1, nn
Close #1
ret = Shell("C:\Program Files\FileMaker\ファイルメーカーPro 5.5\ファイルメーカーPro.exe C:\My Documents\Doc検索\Docu検索01.fp5", 1)
End
End Sub
314311:02/01/23 15:43
>>312
 ソウッス(・∀・)!!
315VB最高:02/01/23 16:37
VBをやるのにフローチャートはいりますか?
というよりフローチャートってなんですか?
316VB使い:02/01/23 16:51
>>314
VBはポインタを扱えないので、まぁ基本的に無理ってことで。

ただ、無理やりやるなら
1.アセンブラで関数のポインタに飛ぶコードを書いてVTableを自作し、
VtableにアセンブラコードとポインタをいれてOleaut32のDispCallFuncを
呼び出す
2.クラスを作成しインスタンス化した後Vtableのアドレスを書き換える

とかいう方法があるけどどちらも無理矢理なんでC使えるならDLLを作ることを
お勧めする。

一応1のサンプル。(DispCallFuncについてはまだよく知らないので)

Option Explicit
Private Declare Function DispCallFunc Lib "oleaut32.dll" ( _
ByVal VtblObject As Long, _
ByVal FunctionOffset As Long, _
ByVal CallConv As Long, _
ByVal ReturnType As VBA.VbVarType, _
ByVal ArgsCount As Long, _
ByRef ARefArgsType As Integer, _
ByRef ARefArgs As Long, _
ByRef RefResult As Variant) As Long
Function Func1() As Long
MsgBox ("(・∀・)ウマクイッタ!")
End Function
Sub main()
Dim pFunc As Long
pFunc = GetAddress(AddressOf Func1)
MyCall pFunc'ココがポインタ使ってるとこ。
End Sub

Function GetAddress(Functions As Long) As Long
GetAddress = Functions
End Function

Private Function MyCall(ByVal FunctionPointer As Long) As Long
Dim cd(0 To 7) As Byte 'アセンブラコード
Dim pTable As Long
Dim TableOb(0 To 1) As Long

cd(0) = &H59: cd(1) = &H58: cd(2) = &H51: cd(3) = &HFF: cd(4) = &H60: cd(5) = &H4
pTable = VarPtr(cd(0))
TableOb(0) = VarPtr(pTable)
TableOb(1) = FunctionPointer
DispCallFunc VarPtr(TableOb(0)), 0, 4, vbLong, 0, 0, 0, 0
End Function
317VB使い:02/01/23 17:03
>>313
もしかしてMYDOCU~1とかになるってことならDOS名なんで
VBの標準関数ならそのまま使えるぞ。

>>315
フローチャートってのはプログラムの流れを図にしたもの。
昔は機械語直接書いてたんでそういうのが必要だった。
今は・・・まあ書いたほうが分かりやすいがめんどくさい。

316訂正。
(DispCallFuncについてはまだよく知らないので)

(DispCallFuncについてはまだよく知らないのであんまり信用しちゃダメ。)
318デフォルトの名無しさん:02/01/23 17:58
>>317
言葉が足りませんでした。
ドラッグ&ドロップしたファイルのパス名をそのままファイルメーカーに新規レコード
として入力させたいのですが、どうしてもそのまま~付のファイル名として
入力してしまいます。
これを、そのままのファイル名として入力したいのです。

ついでながら、Win98SE以下だと、ファイルメーカーにレコードとして入力すら
出来ない状態です。
WinMeだと、このコードでもうまく行くんですけど。
319デフォルトの名無しさん:02/01/23 18:03
上記のは313の発言です。
なんか名前を入れると、エラーが出るもんで...
カエレ!っていわれるだろうけど>>316みたいなのが普通のVBのテクなのか?
VB.NETを待ち望むのも無理は無いと思うよ。ところで実はVBは使った事は
無いんだが、ハックしなくてもCOMのシンクイベントみたいなやり方で
できるんじゃないの?<関数ポインタ
321Delフサギコ:02/01/23 18:38
VBでASPアプリを作成しているんですが
画像ファイル(JpegとかPNGとか)
を動的に作成したいと思っています。

メモリ上で画像を描画する方法は
VBではあるのでしょうか?

VBで無理ならActiveXDLLをVBと接続して
描画させてやらなきゃいけないのかなと
考えてます。

とりあえず可能か不可能かを知りたいのと
わかりやすいリンク先とかありましたら
教えてクラサイ

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧    オシエテクン デス
  ミ,, ゚Д゚彡
   〃  つ旦~~
 〜ミ,,,n,,n[ ̄ ̄ ̄.]
        ̄ ̄ ̄
322VB使い:02/01/23 18:38
>>318
Shellの代わりにAPIのShellExecuteを使ってみては?

>>320
もっと簡単に出来るんなら俺も教えて欲しいよ(;´Д`)
323VB使い:02/01/23 18:42
>>321
メモリの画像を表示したいならSetDIBitsToDeviceで。(Delは違うのか?)
324Delフサギコ:02/01/23 19:00
デルはそういうクラス(TBitmap)があるので…

SetDIBitsToDeviceってAPIかな?

>メモリの画像を表示したいなら
なんか微妙に違うような....
Webアプリでグラフみたいなので
動的に画像ファイルを作成したいの。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧    サンクスコ
  ミ,,゚Д゚彡∬
   〃  つ旦O
 〜ミ,,,n,,n[ ̄ ̄ ̄.]
        ̄ ̄ ̄
325308:02/01/23 19:12
>>308のようなケースで、動画(MPEG)をロードするには
どうすればいいのでしょうか?
どなたかお願いいたします。
CreateDIBSectionでつくって、DCに対して描画して、
そのメモリを、PNG、JPGに変換して、出力とか。
327デフォルトの名無しさん:02/01/23 19:35
お助けください(; ;)

func1 op1, op2

Sub func1(r1 as OptionButton, r2 as OptionButton)
r1.value = ...
End Sub

てなことをやりたいのですが、呼び出し時に「型が違います」云われてしまいます……
何が間違っているのでしょう……
328デフォルトの名無しさん:02/01/23 19:50
はじめまして

http://mbs.jp/maji/
ここのHPにある投票フォームをソースで表示してどこかイジって
クリックするとある選択肢に投票されるプログラムを作りたいんですがわかりません。
私は全くそういう知識がなく、この板にくるのも初めてです。
どうかアドバイスお願いします。
329327:02/01/23 20:49
解決しました……関数宣言 Variant にしてみました……
なんか納得いかない……
330VB使い:02/01/23 20:50
>>327
op1の宣言と、Setを使ってるかをチェックしてみれ。

>>324
俺ASPって今知ったんだけど、ASPからVBって使えるの?
VBScriptみたいなもんなんかなあ?
331デフォルトの名無しさん:02/01/23 21:03
>>330
VBでコンポーネントを作って、それをASPから呼び出すんさ。
>>320
絶対普通じゃないと思われ(藁
っていうかVBでは関数ポインタなんて使わないように設計する。
333VB使い:02/01/23 22:10
>>331
微妙にスレ違いだけどASPで使うVBコンポーネントって
ActiveXEXEだけ?標準EXEもいけるのかなあ?・・・無理か。

>>332
賛成w
ま、こんなこともできるっつーことで。
334VB使い:02/01/23 22:27
>>328
ネットの基礎知識とJavaScriptとHTMLを勉強しましょう。
335デフォルトの名無しさん:02/01/23 23:21

>どうしてもそのまま~付のファイル名として入力してしまいます。
>これを、そのままのファイル名として入力したいのです。

Win95、98はそういう仕様だったような。

Dir関数にショートファイルネームのパスをかけると
ファイル名がロングファイルネームで返ってくるのを利用して、
パスを階層ごとに変換かけてロングファイルネームのパスに変換しよう。
Webで検索すればそういう関数を公開しているところはいっぱいあるよ。
APIにロングネームに変換する関数もあるけど、IEのバージョン依存だったと思う。

ところで、
>ret = Shell("C:\Program Files\FileMaker\ファイルメーカーPro 5.5\ファイルメーカーPro.exe C:\My Documents\Doc検索\Docu検索01.fp5", 1)
ret = Shell("""C:\Program Files\FileMaker\ファイルメーカーPro 5.5\ファイルメーカーPro.exe"" ""C:\My Documents\Doc検索\Docu検索01.fp5""", 1)
じゃないとまずくない?
適当なEXEを作って、Program.exeという名前にして、Cドライブ直下に置くと・・・・

>>320
>カエレ!っていわれるだろうけど>>316みたいなのが普通のVBのテクなのか?
普通のテクじゃないでしょ。
元質問のVBでポインタを扱いたいっていう発想にそもそも無理があるからね。
そういう無茶ありなら、ポインタ経由でデータを読み出したり、書き出したりも
できなくはない。実用性はないけど。

>>327
>func1 op1, op2

>
>Sub func1(r1 as OptionButton, r2 as OptionButton)
>r1.value = ...
>End Sub
>てなことをやりたいのですが、呼び出し時に「型が違います」云われてしまいます……

op1、op2の型がわからないけど、
両方ともOptionButton型でなければエラーになる。
参照渡しでは厳密に型が一致しなければエラーになるよ。
integerとかLongとかそういうのであれば型変換関数をかませばいいけど、
オブジェクトそれぞれ固有の型への変換関数はVB6以前にはないから正確な型以外渡せない。

Sub func1(ByVal r1 as OptionButton,ByVal r2 as OptionButton)
にしてあれば、op1が例えばOptionButtonの入ったObject型でもControl型でもVarinat型でも
暗黙の型変換で対処してくれる。
336デフォルトの名無しさん:02/01/23 23:44
>>313
>Dim args1, args2 As String
この書き方だと、args1はバリアントになる。

>nn = Len(args1)
>args2 = Mid(args1, 1, nn)
args1 = args2 とまったく同じだけどいいの?

>ファイル名が8文字までしか認識されません。
ショートネームでもフルパスはフルパスなんだけど。
どうしてもロングネームにしたかったら、APIのGetLongPathName。
FileSystemObjectでも出来るし。

>>325
Microsoft ActiveMovie Contorol を使う。
337デフォルトの名無しさん:02/01/24 00:22
>>311
関数ポインタじゃなくVBらしくオブジェクトを使う。

'Form1
Option Explicit

Private WithEvents m_My1 As clsMy '関数ポインタの代り
Private WithEvents m_My2 As clsMy '関数ポインタの代り

Private Sub Form_Load()
Set m_My1 = New clsMy
Set m_My2 = New clsMy
End Sub

Private Sub Command1_Click()
Call foo(m_My1)
End Sub
Private Sub Command2_Click()
Call foo(m_My2)
End Sub

'関数ポインタ経由で呼び出される関数の代り
Private Sub m_My1_func()
Debug.Print "My1"
End Sub

'関数ポインタ経由で呼び出される関数の代り
Private Sub m_My2_func()
Debug.Print "My2"
End Sub

'関数ポインタ経由で関数呼び出しをする代り
Public Sub foo(ByVal My As clsMy)
My.DoFunc
End Sub


'clsMy
Option Explicit

Public Event func()

Public Sub DoFunc()
RaiseEvent func
End Sub
338デフォルトの名無しさん:02/01/24 03:38
>>321 >>324
ASPでVBSを使っていて、JPGやPNGの画像ファイルを
動的に生成したいということでしょうか?

VBでは、APIが呼べますが、VBSでは無理かと思います。

ActiveXDLLが完成したら、その、DLL僕にもちょうだい。(w
DIBなら作れそうだけど、JPGで保存となると、私にはお手上げ。
339これはどう?:02/01/24 07:09
>>321
Doodle2 VBS用画像描画・変換COMコンポーネント
http://www.vector.co.jp/soft/winnt/prog/se219120.html

VBA/WSH/ASPなどのWindows Scripting環境で、CreateObjectして使用
BMP・JPEG・GIF・PNGファイルの読み込み・書き込み(相互変換)をサポート
直線、丸、四角、ベジエ曲線などの基本的な図形の描画
文字をグラフィックとして表示できます(TrueType可)
簡易的な画像縮小・拡大機能、コントラスト調整、ガンマ補正機能
340デフォルトの名無しさん:02/01/24 08:50
>>337
多態って知ってる? オブジェクト指向勉強せい!
341デフォルトの名無しさん:02/01/24 08:51
>>333
ActiveX-DLLもいける。標準EXEを使いたいなら、EXEファイルを
呼び出すコンポーネントを使えばよい
342Delフサギコ:02/01/24 09:13
    ∧,,∧     / ̄ ̄ ̄ ̄ ̄
   ミ    ミ  < とっても・・・
   ミ    つ   \_____
   ミ @ ミ
   '∪'''∪'

ピキューン      + / ̄ ̄ ̄ ̄ ̄
 +   ∧,,∧    <  感謝>>338-339
   ミ,゚Д゚ ,,ミ     \_____
((  ⊂ .  つ   ))
 +  ミ   ミ   
    ''とノ''  +

キュピィィィン   +   / ̄ ̄ ̄ ̄ ̄
     ∧,,∧   < レスくれた人、ありがd
    ミ,, ゚Д゚ミ .  \_____
    ミ  つ つ ))
 +   ミ ⊂.ミ
     ''∪''''
343338:02/01/24 09:31
>>339
ThanX 世の中には、太っ腹な人がいるもんですねぇ。
344VB使い:02/01/24 09:51
>>341
なるほど。アリガd
345_:02/01/24 13:57
コレクションで大文字・小文字を区別させたいのですが
どうすればいいのでしょうか?
346313:02/01/24 14:48
VB使い様、336様
>args1 = args2 とまったく同じだけどいいの?
見なおしてみて、気付きました。(汗

>ファイル名が8文字までしか認識されません。
ショートネームでもフルパスはフルパスなんだけど。
どうしてもロングネームにしたかったら、APIのGetLongPathName。
FileSystemObjectでも出来るし。

なんとか、[GetLongPathName]にて取得できました。
いろいろご指導ありがとうございました。
347デフォルトの名無しさん:02/01/25 00:28
>>345
それ自体できません。

コレクションクラスを作成して、
内部的には前に「_」付けて区別するようにAdd、Item、Removeに細工しよう。

348デフォルトの名無しさん:02/01/25 01:52
今調べたら、
Microsoft Visual Studio 6.0 Enterprise Edition
のアカデミック版を買えば3万5千円で済むらしい。放送大学に入ってこれ買えばいいか。
よかったら教えて下さい。
1.VBだけでマルチスレッドアプリケーションを作れるのか?
2.コンパイルした結果できたバイナリはランタイムDLLなしで、EXEファイルだけで使えるのか?
>>349
1.VB5の頃は、APIのCreateThreadで、出来たみたいですが、
私がVB6で試した限りは、IDEが落ちました。
VCで作った方が256倍は楽です。

2.ランタイムは必要です。新規プロジェクトで試してみたら、
ASYCFILT.DLL COMCAT.DLL MSVBVM60.DLL OLEAUT32.DLL
OLEPRO32.DLL VB6JP.DLL VB6STKIT.DLL
がディストリビューションウィザードによって追加されました。
Windows2000以降は、ランタイムが付属らしいので、
他のコンポーネントを使わない限りは、動くらしいです。(未確認)
351 :02/01/25 02:29
>>350さんありがとうございます。
やはりそれならばすべてVCでやった方がいいかもしれませんね。
352デフォルトの名無しさん:02/01/25 02:32
>>350
最低限必要なのは MSVBVM60.DLLだけ。
日本語を表示するには、VB6JP.DLLも必要。
あとのDLLはオートメーション用だったり、いろいろ。
ネットで配布されてる標準セットだけでオッケー。
353349:02/01/25 02:34
>>352さん情報ありがとうございます。
354デフォルトの名無しさん:02/01/25 04:15
>>349
>1.VBだけでマルチスレッドアプリケーションを作れるのか?

VB.NETだったら楽勝!
355デフォルトの名無しさん:02/01/25 06:36
テキストファイルのスペース、改行などを全部詰めて、一面文字を
ビッシリ詰めたいのですが、どうしたら良いかさっぱり分かりません。
よろしければ例を交えて教えていただけませんでしょうか。
(お暇であれば、できるだけコメントを入れていただけると嬉しいです。。。)
よろしくお願いいたします。
356デフォルトの名無しさん:02/01/25 06:54
>>355
テキストのサイズにもよるけど、
 
Replace(strBuff, " ", "")
Replace(strBuff, vbCrLf, "")
 ・
 ・
 ・
 
って感じに
357デフォルトの名無しさん:02/01/25 06:54
>355
意味不明。
スペースを詰めるというのは、行頭・行末のスペースを削除?
改行を詰めるというのは、空行を削除?
それなら、フリーソフト使っときなさい。
358355:02/01/25 08:31
わかりにくくてスミマセン。
空行を詰めると共に、文章の間に挟まったスペースも取り除きたいのです。
--------------
あああ
あああ  あああああ

あああ  あ
ああああああ

----↓これをこうしたい----------

あああああああああああああああああああああ

>>356さんのやり方でやってみます。ありがとう。
359あれ?:02/01/25 11:44
>>358じゃないけど、実験がてらExcelで
Worksheets("Sheet1").Range("B2").Replace What:=vbCrLf, Replacement:=""
とかやってみたけど詰まらないな。
識者の方に任せるわ。
>359
Excelの改行ってCrのみじゃなかったっけか?
361VB使い:02/01/25 11:56
>>359
セルの中のvbCrLfを置換しようとするからまずいのでは?
っつーか、>>355が言ってるのはVBだろ。たぶん。
362VB使い:02/01/25 11:57
>>360
あああかぶった。
363359:02/01/25 12:32
今Excelしか無くってさー。(実はExcelのことほとんど分からないんだけど…)
>>360
vbCrだけにしても駄目ダタヨ。
364VB使い:02/01/25 12:35
>>363
VbLfだーよ。
365359:02/01/25 12:37
でけた。サンクth。
366359:02/01/25 12:44
ちなみに大量の文章でやってみようと思ったら、セル内にペーストできないな。
一つのセルに書き込める文字数を超えているってこと?
だったら俺的には役にたたんな、これ。

何か大量の文章でできるすべあるかな?
367VB使い:02/01/25 12:47
>>366
ExcelはReplaceメソッドはあってもReplace関数は無いからな。
(2000以降出来るようになったんだっけ?)

自前で書いたほうが早いと思われ。
368359:02/01/25 12:53
>>367
いちいちまったくだ。がしかし、Excelの勉強もしたくなった。
>>358に感謝。ま、帰ってから考えるとするよ。
暇な人、ヒントでも書いておいてくれるとうれしいな。
369デフォルトの名無しさん:02/01/25 13:18
>>367
2002だけど、Replace関数あるみたい
370VB使い:02/01/25 13:30
>>368
頑張れー。ヽ(´ー`)ノ

>>369
サンクスコ。2000からか?使えるの。
今使ってるの97だからなあ。
VBでローカルマスィ-ンのIPアドレス取得しる方法教えて〜
372デフォルトの名無しさん :02/01/25 13:46
あああ
373デフォルトの名無しさん:02/01/25 13:50
374デフォルトの名無しさん:02/01/25 13:53
VBでスプレッド3.0を使用している者で、質問なんでが、
例えばスプレッドが10列あったとして、最初の2列を固定列にして、
残りの8列をスクロールバーでスクロールした時に、
「灰色領域」が出てくるので、その「灰色領域」を出さないようにしたいのですが
出さない方法を知ってる方教えてください。
375デフォルトの名無しさん:02/01/25 19:42
DAOでデータベース開く際、mdb以外のDBも読み込めますよね。
色々試しているんですが、テキスト形式のものだとカンマ区切りはちゃんと読めるのに
スペース区切りでは区切りとみなされず1つになってしまい、ダメでした。

スペース区切りテキストファイルのデータは読み込めないのでしょうか
376 >>375:02/01/25 20:37
Arr()=split(格納文字,space(1))
377息子:02/01/25 21:17
すみませぬ。質問よいですかい?
Text1の内容を自動的にクリップボードに貼っつけるのがやりたいんだけど、
クリップボードの扱い方がさっぱり。どうしたら良いのやら?
378>>377:02/01/25 21:23
Private Sub Command1_Click()
Call VB.Clipboard.SetText(Text1.Text)
End Sub
Private Sub Command2_Click()
MsgBox VB.Clipboard.GetText
End Sub
379デフォルトの名無しさん:02/01/25 21:25
CとPerlはそれなりに使っていて、C++は触った程度です。
(Javaは1.1.3でHelloWorld書いてみただけ)
VBを新たに覚えなければならなくなりそうなんですが、
もし、初心者がはまりそうな注意点が有ったら教えてください。

あと、事務処理の分野ではVBってよく使うものなんでしょうか?
380>>379:02/01/25 21:59
>初心者がはまりそうな注意点
GotFocus
LostFocus
DoEvents

>事務処理の分野ではVBってよく使うものなんでしょうか?
Yes
381379:02/01/25 22:13
>>380
どうもありがとう。
382デフォルトの名無しさん:02/01/25 22:40
>>379
>もし、初心者がはまりそうな注意点が有ったら教えてください。
はまりそうな点というより知っておいた方がいいキーワード

Option Explicit
ByValとByRef
383デフォルトの名無しさん:02/01/25 22:46
DBやるんなら、NullとvbNullとvbNullStringとvbNullCharの違いを
しっておいたほうがいいかも。Null以外使わなきゃいいだけだけど。
>379
IsNull関数の存在。
385解説君:02/01/25 22:56
>Option Explicit
変数の宣言を強制する。必須。
>ByRef
参照渡し。値のポインタを投げる。
ポインタは当然スタックに詰まれるので、再帰を繰り返すと
スタックオーバーフローを起こす。

>Null
まんまNull。DBのフィールドなどに多く見られる。

>vbNull
"1"。意味不明。用途不明

>vbNullString
空文字(Nullではない)。Empty。
VB関数の戻りに多く見られる。

>vbNullChar
文字コード0のスペース。
Cで言う\0。
APIの戻りにこれが含まれている場合多し。
386デフォルトの名無しさん:02/01/25 23:20
age
387デフォルトの名無しさん:02/01/25 23:25
>>382-385
ありがとうございます。本当に助かります。
388デフォルトの名無しさん:02/01/25 23:35
>>374
市販ソフトのことは、ベンダーに直接質問したほうがいいです。
かならずメールで返事くれますので。

>>378
送るときは、直前にClearしないと、失敗する時もあります。

>>379
データベースにSQLを投げたり、力業をCで書いたDLLにやらせたり。
事務分野の仕事は多いです。
っていうか、事務分野以外ではあまり出番がない(笑)。
389デフォルトの名無しさん:02/01/26 02:06
>>385
>>ByRef
>参照照渡し。値のポインタを投げる。
内部的なことを言うなら、
「実引数(プロシージャに引数として渡す変数)のアドレスの
 コピーが作成され、そのアドレス経由で実引数の値にアクセスする。
そのため、その値を書き換えると実引数として渡された変数の値が書き換わる。」
が正確かな。

とりあえず、VBをはじめる人はプロシージャの引数はByValで
指定すべしと覚えておいてもらえばOK。

>ポインタは当然スタックに詰まれるので、再帰を繰り返すと
>スタックオーバーフローを起こす。

スタックに積まれるのは、ByRefとは全然関係ないけど(^^;

>>vbNull
>1"。意味不明。用途不明

VarType関数にNullもしくはNullの入った変数を渡したときの戻り値。

>>vbNullString
>文字(Nullではない)。Empty。

Emptyはバリアント型の初期値の値。IsEmpty関数で判定可能。
文字列用のNULLポインタ。API関数の引数に主に使用する。

>VB関数の戻りに多く見られる

俺の知る限りでは、InputBox関数の戻り値くらいなんだけど他にもある?
Debug.Print vbNullString=""はTrueを返すけど、本質的には別物。

特にメリットがあるというほどではないけど、
InputBox関数では次のようなことができる。
Dim s As String
s = InputBox("キャンセルしたのか、空文字列なのかを判断できます。")
If StrPtr(s) = 0 Then
Debug.Print "キャンセル"
ElseIf s = "" Then
Debug.Print "未入力です。"
Else
Debug.Print "入力した文字列は""" & s & """"
End If

>>vbNullChar
>文字コード0のスペース。
スペースじゃなくて、ヌル文字。
390389:02/01/26 02:09
補足。
>文字列用のNULLポインタ。API関数の引数に主に使用する。
これはvbNullStringの説明ね。
391デフォルトの名無しさん:02/01/26 02:23
ヌル関係は、とくに覚えなくてもいいということで(笑)。
392デフォルトの名無しさん:02/01/26 08:50
全くの初心者向けに簡単なゲームを作るチュートリアルが載っているサイトってありませんか?
393デフォルトの名無しさん:02/01/26 08:52
パール厨房です。こんにちは。
この度課題でVBでオセロゲームを作るはめになりました。
VBは全く知りません。とりあえず明日の5時までが期限なのですが
出来ますでしょうか?皆さんが無理だと言ったら単位はあきらめます。
>>393
何マス?
マス少なきゃ何とかなるとは思うけど。

てきとーに動けばいいなら、それこそオセロのロジックなんて
腐るほど転がってるから、ちょっといじれば直ぐに出来るが。

ソース解説出来なきゃならないならどうかなぁ…
>>392
>>393
・・・・
おいおい、板違いだって。
そういう初心者はPC初心者板にでも逝ってくれ。
この板で言う初心者というのは自分一人でもある程度プログラムができて、
どうしてもわからない人のことなんだよ。
というか、そういう質問は自分の力で解決するべきじゃないのか?
最近の高校生や大学生はすぐに本とかネットとかに頼る傾向があるみたいだな・・・
10年後の日本が心配だよ。全く・・・
396デフォルトの名無しさん:02/01/26 09:14
>>394
マスは現実のオセロと同じマス数です。あとCPU側の思考ルーチンは
先生のほうで用意してあるみたいです。
>>395
すいません。まあちょっと冗談まじりの質問なんで勘弁です。

さっきVBの初心者本見たけど。。
VBメンソクセェヽ(`д´)ノパールのほうが余計なこと書かなくていいし楽だよ。。
397VB使い:02/01/26 09:20
>>392
ほれ。
http://www.google.com/search?hl=ja&q=%8F%89%90S%8E%D2+%83Q%81%5B%83%80+%8D%EC%82%E8%95%FB+VB+or+Basic&lr=
あとせめてどれぐらいの初心者か書いてくれ。

>>393
才能があるか努力がうまい奴なら出来るだろう。
>>396
>CPU側の思考ルーチンは先生のほうで用意してあるみたいです。

それを自分で作ったオセロにどう組み込むのか。
ソースで提供されて組み込むのか?クラス化でもされてんのか?

今から勉強しながらコーディングするとして、
人対人のをただひっくり返すのでなければ
明日までには出来ない方に100vbp
399デフォルトの名無しさん:02/01/26 09:31
>>397
ありがとうございます。
一応、全くの初心者と書いたんですが。

>>395
すみませんでした。
次からはPC初心者板に行きます。
400VB使い:02/01/26 09:38
>>399
初心者にもPC初心者、プログラム初心者、VB初心者とかがあるからね。
ま、頑張れ。
401399:02/01/26 09:54
プログラム知識ゼロという意味で書きました。
本当にすみませんでした。以後気を付けます。
402393:02/01/26 10:33
皆さん聞いてください!!!
単位はあきらめました!
ヒャッホー潔い俺、カコ(・∀・)イイ!
努力しないのカコワルイ
404VB使い:02/01/26 10:53
どーでもいいや。腹減ったし。
あと一日ってとこまで放って置いて何言ってんだオマエ。
そんなことしてたら何の言語やっても身につかんぞ。

MSDN引きながら死ぬ気でやってみろ。
406393:02/01/26 11:13
うぅ。。自分が情けない。。
とりあえず就職を有利にする為にパール以外にも言語を覚えたいので
というか高い金出してVB6を買ってしまったので独学でこつこつ
勉強したいと思います。。レポートは無理です。初心者本を読めば読むほど無理です。。
VBなんだからとりあえず見た目だけ作ってみれや。
コーディングする必要はないから。
それがVBのいいとこじゃねーか。

それが出来たら、まずどう動かそうか考えろ。
そうして、一番機能の少ないところからコーディングしろ。

初めに4つコマ描写するだけでもいーじゃねーか。
初心者本なんて一から読んでても始まらない。
とりあえず作り始めろ。MSDNで理解できないところが出てきたら
ここに書いて聞け。

明日の5時って17時?もしかしたらできるかもなー。
408VB最高:02/01/26 17:27
初心者なんですが、データコントロールを使ってエクセルのデータを
編集したいのですが、プロパティーのコネクトでエクセル8.0を選び
データベースネームでエクセルのデータを選びそのあとのレコードソースを
選択するところでエラーが出てしまします.これは何故ですか?
409仕様書無しさん:02/01/26 17:47
>>408
Data Environment使え
410VB最高:02/01/26 20:23
Data Environment ってなんですか?
データコントロールのプロパティーにはなかったんですが。

>>410
メニューの[プロジェクト]の中にあるっしょ。
後はWebで調べれば一発さ。
413VB最高:02/01/26 21:06
web調べるというのはMSDNで調べるという事ですか?
私はMSDNはインストールしていないのでできません。
他に方法はないのでしょうか?
そもそも「組み込み可能なISAMドライバが見つかりません」というのはどういう意味ですか?
414デフォルトの名無しさん:02/01/26 21:17
メッセージボックスを表示して終わるプログラムってできないでしょうか?
>>414
くめう゛ぁいいじゃん。
>web調べるというのはMSDNで調べるという事ですか?
>私はMSDNはインストールしていないのでできません。
いやしくも、Windowsプログラマなら、MSDNはインストールしとくべきだし、
msdn.microsoft.com
www.microsoft.com/japan/developer/library/
のくらいはブクマクに入っているべきだ。
そういう意味で、アンタは最低。
417VB使い:02/01/26 21:42
>>413
Webで調べるっつーのはこういうこと。
http://www.google.co.jp/search?q=%91g%82%DD%8D%9E%82%DD%89%C2%94%5C%82%C8ISAM%83h%83%89%83C%83o%82%AA%8C%A9%82%C2%82%A9%82%E8%82%DC%82%B9%82%F1&hl=ja&lr=

あと、マルチはやめれ。

>>414
1.標準モジュールに以下を記述。
Sub Main()
MsgBox("ヽ(´ー`)ノ")
End Sub

2.プロジェクトの設定で、スタートアップをSub Mainに変更。

3.実行
418デフォルトの名無しさん:02/01/26 22:34
bmpなどの画像で透明色を使う方法がわかりません。
簡単な方法があれば教えてください。
>>418
簡単な方法はありません。
420VB使い:02/01/26 22:44
>>418
好きなやつをどぞ。
1.XORとANDでマスクデータとカラーデータをBiBlt(PaintPicture)で転送。
2.AlphaBlendなどのAPIを使う
3.自前で計算w
421VB最高:02/01/27 16:20
エクセルのデータの取り込みがいまだに出来ません。誰か助けて―。
データコントロールのプロパティーの設定でいくらやってもできねえ。
Recordsourceで▼押したら「組み込み可能なISAMドライバは見つかりません」
とかでるし。マイクロソフトのサポートみてものってねえし。
422デフォルトの名無しさん:02/01/27 17:15
>>421
オートメーションでやれば? ISAMうんぬんは、Jet周りのインストールが
うまくいってない可能性あり。
423VB最高:02/01/27 18:09
>422
何度も申し訳ありませんが、オートメーションというのはどういう意味なのですか?
Jet周りのインストールがうまくいってないというのはどういう意味ですか?
質問ばかりで申し訳ありません.
424デフォルトの名無しさん:02/01/27 18:39
visual basic ってワードとかエクセルに付いてますか?
>>423
http://www.microsoft.com/JAPAN/support/kb/articles/J052/6/03.asp
見れば大体見当つく。
ヘルプの検索をまともに出来ない奴は身につかない。
開発の質問てのは、〜〜してみましたがうまくいきません。ってのを言う。
〜ってなんですか?って聞かれても、大抵の人間は自分で調べろと言うぞ。
調べて理解できないなら聞け。

>>424
VBAなら使えるべ。

426424:02/01/27 19:23
VBAとVBの違いって何でしょう?
427VB使い:02/01/27 19:26
>>426
VBのいいところ
●ネイティブコンパイルが出来る
●exe単体で配布できる(ランタイムもいるけどたいてい入ってる。)
●速い。
●自由度がVBAに比べると高い。

VBAのいいところ
●Officeのデータをいじりやすい。

てな感じ。

まあ大体一緒だけどねー。
428424:02/01/27 19:33
大変参考になりました!
有難うございます!
429 :02/01/27 20:01
>>426
VBAってのは、VB for Application。すなわち、(Excelなどの)アプリケーションに
依存したもの、ってこと。

アプリケーションがなければ、それ単体で動作することはできない。VBは、
それ単体で動作する。

そういう根本的な違いを理解しましょう。
430デフォルトの名無しさん:02/01/27 21:26
タイムスタンプを変更する処理が必要なプログラムを作っているのですが、
肝心の「タイムスタンプ変更」がどうやってやるのかさっぱり見当つきません。
そういうDLLあるいは関数のようなものは存在しませんか?
431 :02/01/27 22:29
>>430
APIのSetFileTime()を使え
>>431
ありがとう。setfiletimeでgoogle検索したらサンプル見付かったよ!
433デフォルトの名無しさん:02/01/28 02:41
次スレ立てるときに1のテンプレートに
 
「宿題・課題は自分でやりましょう」
 
っていれようよ
434デフォルトの名無しさん:02/01/28 02:51
プログラミング言語(Perl)の問題が分かりません!!    
誰か教えてください!!ちなみに問2−4(問題1ページ目)
の(c)と(d)はこう書かれています!!

(c)if /\. \. ./   (d)if /[a-zA-Z]+\$/

★問題1ページ目
http://isweb40.infoseek.co.jp/photo/moheaven/perl_1.jpg

★問題2ページ目
http://isweb40.infoseek.co.jp/photo/moheaven/perl_2.jpg

では宜しくお願いします!!明日の夕方5時頃までにお願いします!!
BMPの拡張子をjpgにしただけのバカはperlなんて無理だろ。
436デフォルトの名無しさん:02/01/28 03:28
>>434
なぜPerlの問題をここで聞く?
ネタ?
 
この時期になると「明日の5時まで」って言うのが増えるね。
437デフォルトの名無しさん:02/01/28 03:34
>>436
こういうのに限って前日まで何もやってないんだよな
438 :02/01/28 04:52
以前 classに関しての質問をさせていただいたものです。
classを理解していないと仕事はできないというようなことを聞いたんですが、
プロとしてやっていくにあたって classのほかに知っておくべきこととかありますか?
>>434
プログラミング言語にPerlを採用している学校なんてさっさとやめちまえ。
440 :02/01/28 08:23
>>438
「わからないこと」を自分で調べる能力。
>438
せめて基本情報に出てくるレベルの会話ができる事。
442名無しさんです:02/01/28 10:51
変数の文字列をshellで立ち上げたアプリ(メモ帳など)
に送る(貼り付け?)様にしたい時、shellの後にctrl+vを
sendkeyしてるのですが、一つ目が立ちあがった時は
うまく行くのですがアプリによっては二つ目以降の
ウインドウがアクティブにならずに貼り付け失敗して
しまいます。

何かウマイ方法(上とは全く別の方法でも可)は
ありませんか?
443デフォルトの名無しさん:02/01/28 10:58
sell FileName,vbNormalFocus
sleep 3000
444442:02/01/28 11:38
>>443
3秒ですか。待ち時間は短くても大丈夫かな?
試してみます。
>>379
Cを知ってると90%くらいの確率でこれをやってしまうと思われ
C
 int i, j;
VB
 ×Dim i, j As Integer
 ○Dim i As Integer, j As Integer
上の宣言だとiはVariant型になってしまう。気を付けてなー

>>374
なんで「灰色領域」が出ては駄目なのか小一時間(略
顧客がそれを直せと言ってるなら仕方ないが、自分で見た目が悪いと
思ってるだけなら、直す必要はないと思うがどうか?
ちなみに、Excelでさえ右端までスクロールさせると「灰色領域」が表示されるぞ
とりあえず出ない様に回避するには、
・右端の列の幅を、Spreadの内部幅 - 固定領域の幅に合わせる
のが確実だと思われ。
他に、表示されている列に合わせてSpread自体の幅を変えるプロパティだったか
メソッドがあった記憶があるけど、漏れは忘れたので調べてくれ。
無かったらスマソ
446デフォルトの名無しさん:02/01/28 14:10
Split関数を使って文字列を分割する際、スペースでもカンマでもタブであっても
区切りたく、またそれぞれの文字が複数あっても区切りたい場合どうしたらいいでしょうか
447デフォルトの名無しさん:02/01/28 15:04
>>446
split(replace(replase(str,vbtab,","),space(1),","),",")
448446:02/01/28 17:22
>>447
ありがとうございます。
replaseという関数自体はじめて知りました。。。
449デフォルトの名無しさん:02/01/28 18:55
VBのコマンドボタンをクリックするだけで、
・HTMLファイルをNetscapeに関連づけ。
・標準で使うブラウザをNetscapeに。
・デスクトップのIEのアイコンを削除。
・IEのプロキシ設定を空白に。
みたいなことは出来ますか?なにせ、わけあってIEを使わせたくないのです。
バッチファイルみたいなのでやるべきでしょうか(やり方分かりませんが…)?
450デフォルトの名無しさん:02/01/28 19:07
>>449
レジストリを書き換えるだけだと思いますが
451449:02/01/28 19:46
>>450
よろしければ、その方法を教えてもらえませんか?
452 :02/01/28 19:55
何でも聞かないで、RegMonでも使って監視してみなよ。
453デフォルトの名無しさん:02/01/28 19:57
>>451
たとえば「IEのプロキシ設定を空白に」という部分は
拡張子がregのファイルを作って以下の内容をコピペ
(Windows2000の場合)

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"ProxyEnable"=dword:00000000
"ProxyServer"=""

↑最後に改行を忘れないように
あとはShellとかで"regedit /S xxxxx.reg"を実行する
454デフォルトの名無しさん:02/01/28 21:08
教えてください

どうしてそんなに知識を無料放出出来るのですか?
455デフォルトの名無しさん:02/01/28 21:09
>>454
些細な知識だから
456VB使い:02/01/28 21:16
>>454
VBだから

関係ないけどAPIMon.exeってXPで使えた人いる?
>>101
戻り値の型が違う。
>>454
それくらいの知識で金とれるかいw
2ch系プログラマのオレらにだってミジンコ並みのプライドはあるぞww
>>454
暇つぶし。
460DOSマソ:02/01/29 05:57
すみません厨房質問です・・・
DOSプロンプトから起動できるVBアプリ作ったんですが(Command関数使って)
メッセージをDOSプロンプト内に表示する方法ってありますか?
普通にMSGBOX使うとDOSで動かしているのにいきなり別のウィンドウがでてきて
うざいんですが・・・
461 :02/01/29 07:01
★浜崎あゆみ、ライブで足の不自由なファンを吊るし上げ★

人気歌手・浜崎あゆみが、ファンに暴言を吐いた。
最前列で座っている足の不自由なファンに対し、
「前の方、座らないで下さ〜い」「どう思う?座ってたよ今!」
「一番前で観てんのに座ってたよ〜?」「感じ悪いね〜」
と、そのファンに暴言の雨あられ。会場はあゆ支持の歓声を上げ、
ついにはそのファンはその場で泣き出してしまう。
あゆは気にせず、自分のニューアルバムの話を切り出した。
このファンは熱心なあゆファンで、当日も最前列に座っていた。

★実際の音声
http://www.geocities.co.jp/Milano-Cat/2976/ayu_CDL_MC.mp3(2.28MB)
http://www.geocities.co.jp/Playtown-Dice/5199/ayu_CDL_MC.mp3(78.8KB)

★実際の映像
ttp://isweb40.infoseek.co.jp/computer/imode85/cgi-bin/up/upload/009.mpg
(直リンだと見えないのでコピペして下さい)

詳しくはこちら↓
http://choco.2ch.net/news/
http://tv.2ch.net/ami/
462 :02/01/29 08:38
>>460
これ、実は面倒くさい。リンクオプションを変えてConsoleアプリに
しちゃうって方法もあるけど、WSHで作るのが楽かな。
463DOSマソ:02/01/29 10:58
自己レス。
ConsoleWriteを使う方法がわかりました。
DOSマンセ(ボソ
464デフォルトの名無しさん:02/01/29 10:58
ある文字列の中に A が含まれているとして、これを B に変換したいです。
A は1文字であっても、 AAAAAA のように複数個連続していても B 1つにしたいです。
どうやったら簡単にできますか
465デフォルトの名無しさん:02/01/29 11:44
do while Instr(1,str,"AA")>0
str=replace(str,"AA","A")
loop
466続き:02/01/29 11:45
str=replace(str,"A","B")
467464:02/01/29 13:27
本当に簡単にできる方法ですね。
わたしはもっと長々書きました。
468デフォルトの名無しさん:02/01/29 13:37
どんなコードを書いたのか見てみたい
469デフォルトの名無しさん:02/01/29 13:37
VBからoutlookを起動し、添付ファイル付のmailを作成ってどうやればいいですか?
470デフォルトの名無しさん:02/01/29 13:40
VBからoutlook expressを起動し、添付ファイル付のmailを作成する方法を教えてください
471名無しさん:02/01/29 13:57
Outlook なのか OE なのかはっきりせよ(w
472469:02/01/29 14:08
すみません
MS-Outlookです
473デフォルトの名無しさん:02/01/29 14:11
VB6SP5+SQLServer2000SP1で開発する場合は、
MDACのバージョンは2.7で問題無しですか?
MDAC2.5ではいかんですよね?
教えてくん。
474名無しさん:02/01/29 14:14
最新版入れ解きゃ問題ない>MDAC
475名無しさん:02/01/29 14:15
CDO使えばできる>Outlook
476デフォルトの名無しさん:02/01/29 14:16
>474
ありがとうございます。
最新版入れときまっす。
477469:02/01/29 14:35
すみません、CDOってなんですか?
MSDN検索してもわかりませんでした。
アクセス2000が入ったマシンで開発したソフトを
アクセス97が入ったマシンで実行できますか

もちろんDBにアクセスを使っています
479デフォルトの名無しさん:02/01/29 15:09
VBでチョンボといったらズバリ何だと思いますか
480デフォルトの名無しさん:02/01/29 15:18
>>479
Option Explicit
を入れない
481デフォルトの名無しさん:02/01/29 15:23
DoEVENTS

魔界の入り口
>478
Access2kに「旧バージョンへ変換」ってコマンドがあるから、
それを使用して変換すれば97でもOKだよ
483VB使い:02/01/29 18:26
>>478
VBは簡単だと心から思うこと
484VB使い:02/01/29 19:20
483間違い。>>479です。鬱氏。
>>479
FormをFrom
>>479
pりヴぁて
487475:02/01/30 01:57
このあたりを参考にするとよい。英語ソース中心になっちゃうけど>CDO
http://www.outlookexchange.com/
http://www.google.com/search?q=CDO+Outlook&hl=ja&lr=
488475:02/01/30 01:58
あ、だけどExchangeつかってなくてOutlook単体だったら
VBでOutlookのオブジェクトモデルつつけばもっと楽にできるはず。
スマソ当方Exchange経由での経験しかない>CDO
489475:02/01/30 01:59
あ、あとメール送信オブジェクトってってセキュリティアップデートでかなり制約
かかってる。まあリサーチしてみ>CDO
490デフォルトの名無しさん:02/01/30 09:11
参照設定で別のソフトウェアのライブラリを参照してVBから動かしているとき、
呼び出したソフトの処理が終わっていない状態でVBの方のウィンドウをクリック
してりすると
「コンポーネントが応答しないため、この操作を完了できません。
[切り変え]を選択してコンポーネントをアクティブにしてから
問題を解決してください。」
というエラーダイアログがでて来ます。これが出ないようにはできませんか
491デフォルトの名無しさん:02/01/30 10:32
>490
ムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリ
リムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリム
ムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリ
リムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリム
ムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリ
リムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリム
ムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリ
リムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリムリム
>>490
出さないようにはできないが、これでメッセージの内容を変える事は出来るよ

App.OleRequestPendingMsgText = "ちょっと待てや(゚Д゚)ゴルァ"
App.OleRequestPendingMsgTitle = "動かせません( ̄ー ̄)ニヤリ"
App.OleRequestPendingTimeout = 2000
493490:02/01/30 12:17
そんなワザがあったんですか!!
それでも十分OKです。ありがとう
494469:02/01/30 12:43
>475
ありがとうございます。
参考しにしてみます。
495475:02/01/30 12:52
死ぬなよ>CDO
496デフォルトの名無しさん:02/01/30 22:06
TreeViewコントロールにエクスプローラー風にディレクトリを表示するコードを是非教えてください!
分かる方、よろしくお願いします。
497デフォルトの名無しさん:02/01/30 22:32
FORMがあって、その子FORMがあったとして、
ウインドウの後ろに隠れたりで、子FORMが画面から消えた時に
まだ生きているか知るにはどうしたら良いですか。
498デフォルトの名無しさん:02/01/30 22:33
がいしゅつかもしれませんが、、
コンパイルオプションの”ネイティブコードコンパイル”と”P-Codeコンパイル”の違いってなんでしょ?
”P-Codeコンパイル”でコンパイルしてたらまずい?
>>497
今VBないから自信ないけどformsコレクションでいけるんじゃないかな

500デフォルトの名無しさん:02/01/30 23:49
>>496
海外のサイトにサンプルがある。
検索すれば見つかるけど、ソース長いよ。

>>497
Formsコレクション

>>498
P-Codeは、疑似コード(pseudo-code)のこと。CPUは直接実行できない。
ソースと機械語の中間だから、中間コードとも言われてた。

これに対し、ネイティブコードは直接実行できるから、速い。

VBはバージョン4ぐらいまでP-Codeしか吐けなかったから、
他言語ユーザからずっとバカにされてきた。
ふつうは何も気にしないで、ネイティブのままでオッケー。

現在あえてP-Codeにするメリットがあるとしたら、サイズが小さくなること。
リソースなしでもEXEで1MB越えたら、P-Codeにする余地はあるかもね。
VBがネイティブコードで速いなんて思ってるやつは無知
VBは遅いのは外部ライブラリ呼び出しのため。

もちろんあえてP-Codeにすることもないがな。
>VBがネイティブコードで速いなんて思ってるやつは無知
そだね。
ネイティブコードにして速くなるのは、主に数値演算処理の部分で
その速度差はほんとに微々たるものだから、相当ヘビーな数値計算でも延々させてないと
他の部分でのオーバーヘッドの影に隠れてほとんど差がでないよ。

>もちろんあえてP-Codeにすることもないがな。

P-Codeにするメリットは開発環境と同じ動作をすること。
ネイティブの場合は、開発環境と動作は同じではないので、
細々としたところで動作の違いがでることがある。
変な動作をするなと思ったら、P-Codeを試してみる価値あり。
ぴーコードってなんか語彙が情けないんですが、
ひょっとして放送禁止でしたか?
>>503
是。正式名称ティンココード。
505デフォルトの名無しさん:02/01/31 00:29
>>501
P-Codeの質問だったから、しょうがない。
CもVBもネイティブコードなのに、どうして速度が違うの?
って質問されたら、ふれたけど。

>>502
数値演算だけじゃなくて、配列の参照とかもかなり違う。

高速化のためトリッキーなコードを書いて、開発環境で確認。
自信を持ってコンパイルしたら、実際はほとんど効果がなかった(笑)。
戻った?
>>445

> ×Dim i, j As Integer
> ○Dim i As Integer, j As Integer
>上の宣言だとiはVariant型になってしまう。気を付けてなー

379ではありませんが、このワナにはまってました。
どうもありがとう。

どうりでString型なのにファイルからIPアドレスを読み込むと
192.168で切れてしまうわけだ・・・
508デフォルトの名無しさん:02/01/31 13:34
ApiのGetPrivatePlofileStringとかってByvalで値を渡すじゃないですか・
なんで変数に値が格納されるの?

Byvalって値変わらないんじゃないの?
509 :02/01/31 14:56
>>508
ポインタの勉強をしましょう。
510デフォルトの名無しさん:02/01/31 15:38
>>479
>>486ワラタ
俺がよくやるのは えんぢf
511デフォルトの名無しさん:02/01/31 16:00
塩Dいf

スペースが入るから変換されるのよね
512デフォルトの名無しさん:02/01/31 16:03
>>509
( ゚Д゚)ハァ!!
Byvalは値渡しだろ?ポインタ関係ないじゃん。
Byrefなら解るけどさ。

#てめぇが勉強してこい猿
513抵抗Mω ◆rbbbbbbg :02/01/31 16:03
どうやったらプロジェクトをEXEファイルにできるんですか
514 :02/01/31 16:41
>>512
はぁ。Cの文字列ってわかる? 文字の配列を指すポインタなんだよ。
>>512
MSDNライブラリで、以下の項目を読みませう
「DLL, DLL プロシージャに文字列を渡す」
理解できたら、DLL プロシージャに**を渡す」を全部読んでくれ・・・

>>514
それだけでは512には理解できないと思われ

>>513
[ファイル]−[****.exe の作成]をクリック
# ネタニマジレス カコワルイイ
516関係ないが:02/01/31 16:50
>( ゚Д゚)ハァ!!
と( ゚Д゚)ハァ!?
些細に見えて実は結構大きな違いなんだな。
つか、上のは違和感ありすぎ。
>516
昨日の祭り知らない?ネタ?
518抵抗Mω ◆rbbbbbbg :02/01/31 17:15
>>515
それが選択不能になってます
519 :02/01/31 17:20
>>515
だからポインタの勉強しないとね。一から教えてられんし。

>>518
VB5CCEだったりして・・・
520抵抗Mω ◆rbbbbbbg :02/01/31 17:22
>>519
ふーん
やっぱり世の中タダは無いのね。

死のう
>>518
他に書き忘れたことがあったら今のうちに全部書いときなさい
522512ですが:02/01/31 17:30
>>515
ありがとうございます。

要するにbyValでもbyRefでもポインタを投げるのですね。
それでByRefで投げるとString型のヘッダ情報まで投げてしまい、
結果としてString型を壊してしまうので文字情報のポインタのみを
投げるByValを使う。というように理解しました。

本当にありがとうございました。
523デフォルトの名無しさん:02/01/31 17:36
>>511
あそっか。
ENDIFって打っても勝手にスペース入れてくれるから
俺はいつもスペース入れないで打ってる。
って人あまりいないよね、やっぱ。
524>>522:02/01/31 18:04
>値渡し
>プロシージャに引数として変数を渡す方法の 1 つ。
>値渡し (値による引き渡し) で変数をプロシージャに渡すと、
>元の変数のコピーが作成され、呼び出されたプロシージャに渡されます。
>したがって、呼び出されたプロシージャ内で渡された変数の値を変更しても、
>呼び出し側のプロシージャが参照する元の変数の値は変更されません。

VB厨はコレだから困る
525 :02/01/31 18:09
>>524
API呼び出しのときと、そうでないときでは話が違うのよ。
526デフォルトの名無しさん:02/01/31 19:40
ログ見たんですけど、
Accessのテーブルの存在を確認するのがありましたが、
同様にフィールドの存在を確認する方法を教えてください。
お願いします。
527 :02/01/31 20:31
>>526
どんな方法使ってるかわからないけど、DAOならFieldオブジェクトで。
つか、Select * でレコードセットを取得して、レコードセットの中の
フィールドを確認するのが楽かも。
528526:02/01/31 20:55
>>527
どうもです。
こないだ始めたばっかりで、ADOの本見ながらやってます。
AccessにはSQLでレコードセット取得してやって…ると思います(汁
SELECT * FROM tableで全部取得するのは理解出来ますが、
その状態で現在、レコードセットが握ってるフィールドが何と何か
知る術が分かりません…。
529デフォルトの名無しさん:02/01/31 22:30
クラス内にタイマイベント書けないっすか?
530デフォルトの名無しさん:02/01/31 22:41
dim TBLNames() as string
dim i as long
dim Max as long
mAX=Adores.Fields.count-1
redim TBLNames(MAX)
for i=0 to MAX
TBLNames(i)=Adores.Fields(i).Name
next i
531デフォルトの名無しさん:02/01/31 23:00
13は今何処にいるのだろう...
[メアド必見]
http://pc.2ch.net/test/read.cgi/prog/1012381593/l50
532デフォルトの名無しさん:02/01/31 23:53
ねーねー
今知ったんだけど、VB5CCEってゆーのを使うと、タダでVBの勉強ができるらしいんだ。
これってどうよ?EXEは作れないけど。
>>532
SPをダウンロードして、ゴニョゴニョする(した)。
アンチMSでない先達の方々限定で質問

フォームを破棄したいんだが、こんなカンジで

unload MyForm
set MyForm = Nothing

コレよくサンプルとかでみかける書き方だと思うのだ。
でもUnloadイベントプロシージャとかQuery_Unloadイベントプロシージャで
Cancel=Trueで返したらUnloadされず、参照だけが解放されちゃうよね。
ミステリーでナンカ危険。
どうしたらアンロードを確実にやれる?

Unloadやってみてformsの中を確認ってのはなし。汚エから。
環境はVB6でいいや。さあ
535デフォルトの名無しさん:02/02/01 02:26
>>522
>要するにbyValでもbyRefでもポインタを投げるのですね。
あくまでByValは値渡し、ByRefは参照渡し。

ByVal指定のときは、型が違っても変換可能な型なら暗黙に変換してくれます。
UNICODEのBSTR型からSJISのLPTSTR型へ変換してくれてるのさ。
536デフォルトの名無しさん:02/02/01 02:27
>>529
>クラス内にタイマイベント書けないっすか?

フォームからTimerコントロールを渡してやる形でよければ、書けるよ。

Private WithEvents m_objTimer as Timer

Public Sub SetTimer(ByRef objTimer As Timer)
Set m_objTimer = objTimer
End Sub

Private Sub m_objTimer_Timer()
'ここに記述
End Sub

>>534
>unload MyForm
>set MyForm = Nothing

この記述はVB4時代の不具合回避への遺物だと思われ。
VB5以降では不要。

>Cancel=Trueで返したらUnloadされず、参照だけが解放されちゃうよね。
set MyForm = Nothing
この記述をUnloadステートメントの直後じゃなく、
Unloadイベントに書けばいいだけかと。

というか古いサンプルで見かけるものも普通そう書かれているはずだが・・・。
要は、そのサンプルが間違いだな。
537デフォルトの名無しさん:02/02/01 17:17
Excelのシートをスクロールさせるには、どうしたらよいのでしょうか?
538デフォルトの名無しさん:02/02/01 17:17
VB組み込みのDrive&Dir&FileListBoxって使えないですよね。
もっと良いコントロール探しているのですが、
皆さん、これ使ってるとかこれオススメとかありませんか?
539デフォルトの名無しさん:02/02/01 17:24
DBコンボの「▼」をクリックしたときに出る
ムダな空白行を取り除くにはどうしたらいいでしょう。
カッコ悪いことこの上ないです。
よろしくお願いします。
540VBマスター:02/02/01 17:44
正直VBなんて製品版買ったってたいしたこと出来ないから
フリーのVB5CCEで十分。
金はもっと有意義なことに使おう。
http://www.microsoft.com/JAPAN/developer/vbasic/Controls/Download.htm
541うぐぅ:02/02/01 19:01
>>538

コモンダイアログw
>>540
きみがへたれなだけ。
543デフォルトの名無しさん:02/02/01 22:49
なんでVB5なのですか
違いが解らないのですか
それでマスターなのですか
恥を知りませんか
レスは糞でもいいのですか
ネタですか
楽しいですか
何歳ですか
もっと控えめになれませんか
死んでもらえますか
ダメですか
そこをなんとかお願いできませんか
>>536
>>Cancel=Trueで返したらUnloadされず、参照だけが解放されちゃうよね。
>set MyForm = Nothing
>この記述をUnloadステートメントの直後じゃなく、
>Unloadイベントに書けばいいだけかと。

残念。ここでいうMyFormはデフォルトのフォームじゃなくて
set MyForm = new MyHome
で生成したものなのだあ。
よってもし、おっしゃるやり方をUnloadイベントプロシージャでやるとなると
set Me = Nothing
となる。やってみると当然だがだめ。
一応ひっかけたつもりはなかったがゴメン
他の回答ないか〜。

次の話題
毎度悩むのだが
フォームの中に閉じるとか終了ボタンとかを設けるというのは
業務プログラムのデフォのデフォだと思うのだが、
これらのボタンと同じことをシステムメニューの閉じるでもやりたい。
でもできない。システムメニューの閉じるはUnload Meとでも直結しているかの
振る舞いだからなー?

大抵散々プログラムをこねくり回した挙句に
システムメニューの閉じるを使用不可とかにしている。でもAPIのお世話に
なっている時点で負け決定な上に、カッコー悪い。いかにもブイビーってカンジ。
他の衆ラはどやってんの?
漏れならプロパティ追加して回避する
MsgBoxで「はい」を押したときにTerminateが動いているから大丈夫だと思う
っていうか、Set MyForm = Nothing しなくてもきちんとTerminateは流れるなぁ・・・
まぁ、おまじない程度に考えて、あまり気にしないほうが(・∀・)イイ!
むしろ、Form上の何らかのボタンで画面が閉じられて、MyFormがNothingになったかどうか
IsNothing(MyForm)でチマチマ調べるのがメンドクセーと思う

--- Form1.frm ---
Option Explicit
Dim mblnNoExit As Boolean
Public Property Get NoExit() As Boolean
 NoExit = mblnNoExit
End Property
Private Sub Form_Load()
 mblnNoExit = True
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
 If MsgBox("--- 終了 ---", vbYesNo) = vbYes Then
  mblnNoExit = False
 Else
  MsgBox "--- 再開 ---", vbCritical
  Cancel = True
 End If
End Sub
Private Sub Form_Terminate()
 Debug.Print "Terminate"
End Sub

--- Module1.bas ---
Option Explicit
Sub main()
 Dim MyForm As Form1
 Set MyForm = New Form1
 MyForm.Show
 Unload MyForm
 If Not MyForm.NoExit Then
  Set MyForm = Nothing
 End If
End Sub
546538 :02/02/02 13:11
>>541
ダイアログ形式ではなくてフォームに組み込みたいんですよ。
Exolorerのような表示ができるocxはフリーソフトで見つけたのですが
もっと機能が充実してる(フォルダの追加等ができたり
特定の拡張子を含むフォルダのみを表示できたり)のは無いかなと思って。
547475:02/02/02 15:56
そそのOCXホシイ!
どこでダウソできますか?
548デフォルトの名無しさん:02/02/02 16:05
う〜ん。やはりフォームの動きを分かっていない人が多そうだな。
VB初心者質問スレなのでしかたないのか。

本当はちゃんと説明したいとこなんだが、こんな所に書ける量じゃ
ないのでヒントだけ。

フォームはクラスとほぼ同じ動きをする。
本来フォームはSet MyForm = New Form1として作成する。
Form1.Showが動くのは暗黙にPublic Form1 As New Form1という宣言があるため。
フォームはロードされるとFormsコレクションに参照が追加される。
フォームはアンロードされるとFormsコレクションに参照が削除される。
Loadが発生するのはフォームがロードされたとき
Unloadが発生するのはフォームがアンロードされたとき。
Unload Form1はForm1の暗黙のインスタンスをアンロードしている。
Unload MeはForm1のインスタンスである自分をアンロードしている。
Set Form1 = Nothingは暗黙の変数にNothingを代入している。
Set Me = NothingはMeは変数ではないので意味ない。
フォームのプロパティまたはフォームのコントロールを参照するとロードされる。
Initializeが発生するのはインスタンスが作成されたとき。
Terminateが発生するのは参照している変数がすべてなくなったとき。
スコープを抜けた変数は自動的にNothingになる。
Nothingの変数にNothingを代入しても何も起こらない。
変数にNothingを代入しない限り勝手にNothingになることはない。
アンロードと参照の解放は違う。
Formsの中にはForm1が二つ以上入ることがある。

MSDNの「Visual Basic フォームの有効期間」とかFormsコレクションとか
クラスについて調べると良い。

これらを理解すると
unload MyForm
set MyForm = Nothing
がどういう意味なのかわかるよ。
>>548
545じゃダメなのか

550548:02/02/02 18:40
ダメとは言わない。
だがNoExitにかかわるコードは意味が無い。
全部なくしても同じように動くし、
If Not MyForm.NoExit Then
  Set MyForm = Nothing
End If

Set MyForm = Nothing
と書き換えても問題ない。

# と思う。
# >>545>>544の答えとして書いていると思うが、ちょっと
# 理解できなかった。間違って解釈してたらゴメン。
つかさ、NoExitってFormのパブリック変数だべ?
なんでFormが解放されてからも参照が続くのか理解できんのだが。

俺は
for Each frmObj In VB.Forms
Unload frmObj
next
Set MyForm=Nothing

ってやるかも。
552548:02/02/02 19:25
>>551
アンロードとNothingを代入するのは意味が違う。
Nothingを代入してもFormが消えるとは限らない。
Formが消えるのは、Formsも含めて、全ての参照がなくなったとき。
アンロードとはFormsから参照を削除すること。
Unload MyFormでアンロードされてもMyFormは生きている。
MyFormアンロードされて、MyFormがNothingになるかスコープから
削除された時点でFormは消える。
553デフォルトの名無しさん:02/02/02 19:48
1000レコードが格納されたリザルトセットが
存在するとして、そのリザルトセットの
内容をそのまま、コレクションオブジェクトに再格納します。
その場合、元となったリザルトセットと1000レコードが格納されたコレクションは
どちらが、メモリを多く消費しているのでしょうか?
リザルトセットは、内部にヴァリアントを多く抱えているので、
メモリ消費量が大きいような気がしますが。
このような、メモリ使用量を測定するようなAPIもしくは方法を探しています。
DBから取得したレコードはやはりコレクションに格納したほうがいいのでしょうか?
リザルトセットのままでもいいような気がするのですが。
1000レコード中か目標の1レコードを取得するのにかかる
時間は、やっぱりコレクションのほうが早いのでしょうか?
また、コレクションは、JAVAのようにインデックスに
ハッシュテーブルを作成しているのですか?

色々聞いてしまって申し訳ありません。
554デフォルトの名無しさん:02/02/02 20:38
AA〜ZZまでの全ての文字列のパターンを組み、
それひとつひとつをCSVに追加保存したい。

VBでこれをやるのはムリですか?
555デフォルトの名無しさん:02/02/02 21:32
>>554
2重forで実現可能です。
VBでやっても無駄コードが増えるだけ
557質問者っすけど...:02/02/02 22:32
>>548
>MSDNの「Visual Basic フォームの有効期間」とかFormsコレクションとか
>クラスについて調べると良い。
>
>これらを理解すると
>unload MyForm
>set MyForm = Nothing
>がどういう意味なのかわかるよ。

いやMSDNのそれはヒントがないか何度も読みなおしたのだが、
オレ的にはどうしようもないとしか読めなかったよん。
読解力が不足している?

というか548さん的には
>unload MyForm
>set MyForm = Nothing
においてunloadイベントをキャンセルした、させられたときに
その直後のset..Nothingによって、フォーム資源は解放されないまま
制御のためのインスタンスへの参照が解放されてしまう非常事態を回避スル?

ウンチクとか仕組みとか技術解説は模範回答の後希望
つーか、初心者連中とかハッキリ書いちゃうところがドキュソだな。
558デフォルトの名無しさん:02/02/02 22:48
「goo」で全くレスがつかなかった質問です。

入力されたパスワードを暗号化するのに、MD5やSHA-1などの
一方向性ハッシュ関数を使いたいと思っています。

MD5に関してはC言語のソースがRFCで公開されているのですが、
正直言って読んでもさっぱり解りませんでした。

VBから利用できるハッシュ関数のサンプル・DLLなど公開されているところは
ありませんか?
無い。
560デフォルトの名無しさん:02/02/02 23:09
>>559

          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          | そんなことゆわずにお願いしまプ〜
   Λ_Λ  ∠___________
  (;´Д`)
 ( ( つ ⊂ ))
   〉 〉く く
( (__)(_.)) ...ガクガク
561デフォルトの名無しさん:02/02/02 23:23
>>558
32文字とかではダメ?
google「VB ハッシュ関数」の1番目。
562デフォルトの名無しさん:02/02/02 23:30
ROMから吸い出したデーターを画像表示させたいんだが
Line文章で色つき箱を書いたんだがとても遅く
実用に耐えられない・・・。
できれば、ビットマップとして扱いたいんだが・・・。
563デフォルトの名無しさん:02/02/02 23:39
>>562
BoxFullのLineでやった?

それと、裏画面に描いて、オモテに転送するっていうのは常識だと思うけど。
あるいは、描画中リフレッシュをやめるか、回数を間引きする。

564デフォルトの名無しさん:02/02/02 23:49
>>563
その通り!!
裏画面で書いて表に転送するのは常識ですか・・・。
VBやって3週間、奥深いねぇー。
うーん、難しい
565デフォルトの名無しさん:02/02/02 23:53
>>564
業務系じゃなくて、ゲーム系の常識ね。すまそ。

でも、VBのLineBFはそんなに遅くないはずなんだけど。
おかしいなあ。まさかTwips座標系でやってるとかはないよね。
最小限再現できるコードを見せてもらうほうが話は早いんだけど。
>>561
ありがとうございます!
blowfishモジュールも一緒にもらってきました。
567デフォルトの名無しさん:02/02/03 00:01
>>565

Dim bydata() As Byte
Dim g As Integer

Open "c:\rom\ep-rom.bin" For Binary As #1
ReDim bydata(1 To LOF(1))
Get #1, , bydata()
Close #1
x = x + 3
kosu = kosu + 1
Picture1.Line (75 * kosu + tate, 75 * yoko)-(75 * kosu + tate + 50, 75 * yoko + 50), RGB(bydata(-2 + x), bydata(-1 + x), bydata(0 + x)), BF
If kosu = 16 Then kosu = 0: yoko = yoko + 1
If yoko = 16 Then kosu = 0: tate = tate + 500: yoko = 0

こんな感じ・・・・。
568デフォルトの名無しさん:02/02/03 00:13
>>
右下角の座標は、-Step(50,50)のほうがいいね。
でも、本当に51×51ドットサイズなの?
RGB値は、ユーザ定義型にすれば一気に読めるかなあ。
そんなことで速くはならないけど。
569デフォルトの名無しさん:02/02/03 00:16
>>568
ありがとう!!
うーん、ユーザー定義型ですか?
それってなに?
自分が想像するにromには色情報がはいっていると見ているんです。
多分256色・・・。
570デフォルトの名無しさん:02/02/03 00:19
>569
VBのユーザ定義型は、Cで言うと構造体のこと。
一度に3バイト代入できても、見た目がすっきりするだけかな。

上のコードが何回ループするの?
ROMってゲーム機のROM?

571デフォルトの名無しさん:02/02/03 00:21
>>570
ループはそうだな1Mビット程度
パチンコの画像ROMなんだな・・・。

572デフォルトの名無しさん:02/02/03 00:33
>>571
それなら、メモリ上にDIBビットマップ配列を作って、一気に転送すると
速いけど、さすにがVB歴3週間ではちょっと面倒かも。
でも、コンバートは一度やればいい(?)から、時間かかってもいいじゃん。
573デフォルトの名無しさん:02/02/03 00:36
>>572
ちなみにどのようにすればいいのかな?
574デフォルトの名無しさん:02/02/03 00:41
1Mビット=128Kバイト
RGB各1バイトとすると、3で割るから4500万回ループ?
Refresh回数を1000回に1回とかに減らすと劇的に速くなるよ。
575デフォルトの名無しさん:02/02/03 00:43
576デフォルトの名無しさん:02/02/03 00:43
>>574
分からないけど、ありがとう!!
そろそろ寝ます。
577デフォルトの名無しさん:02/02/03 00:44
パチンコの画面は小さいはずだから、やっぱりVBのスケールモードが
PixelじゃなくてTwipsになってるんじゃないのかな?
578デフォルトの名無しさん:02/02/03 00:49
>>576
BMPの内部格納はふつうと逆で、右下から左上の順だからね。
よく分からんけど、Formもプロセス終了時には開放されるんでしょ。
Endってかいとくのは、ダメ?
>>553
実際に情報を格納しておくのは、
コレクションじゃなくて、クラスのインスタンスでは?
コレクションは、インスタンスへの参照を保持しているだけ。

メモリーの使われ方は、インスタンスの配列を作って、
そのアドレスを表示させれば分かると思うけど、VarPtrでできるかなあ。
あとは、パフォーマンスモニタで、Process - Private Bytes - そのExeのプロセス
で多少はメモリーの使われ具合が把握できる。

コレクションのキーの実装は、たぶんハッシュだと思うが、
速いかどうかは、自分でテストしてみるのが一番良い。
581580:02/02/03 01:30
VarPtr(オブジェクト型)をやっても、参照のポインタがとれるだけでした。
つまり、4バイトずつ、ずれていくだけ。
582oyj:02/02/03 01:37
このたび独自のブラウザを作成したいと思い
ネットのさまざまな場所で調べましたが、
IEの文字のサイズを変更する方法と
お気に入りを操作する方法がわかりませんでした。

IEの文字のサイズを変更する方法ですが
ExecWBを使って変更しようとしましたが
現在のサイズを取得することしかできませんでした。

お気に入りの操作は[Favorites]フォルダを見つけることで
独自ででも作れるのですが何かもっとスマートな方法があれば
知りたいと思っています。

知っている方がいましたら教えてください。

開発環境
Win98SE
VB6LE
IE5.00
IEのコンポーネントを使うだけで、独自のブラウザーか、おめでてーな
584oyj:02/02/03 02:30
あくまでも「目的ができたらそれで良し」なもんで。
585デフォルトの名無しさん:02/02/03 08:19
1.23456789012346E+19という数値を"12345678901234567890"という文字列に
変換するにはどうすればよいのでしょうか。
586585:02/02/03 09:54
すいません、頭の悪いことを口走りました。ごめんなさい。
>>558
md5 dll vb でGoogle検索しる。
手っ取り早く言うとココだな。
http://userpages.umbc.edu/~mabzug1/cs/md5/md5.html
>このたび独自のブラウザを作成したいと思い
> ネットのさまざまな場所で調べましたが、
> IEの文字のサイズを変更する方法と
> お気に入りを操作する方法がわかりませんでした。
donutのソース嫁。
589oyj:02/02/03 14:03
DonutはVC++で作られていますが
それがVBででも生かせすのですね。
アドバイスありがとうございます。
590デフォルトの名無しさん:02/02/03 14:40
>>587
どうもありがとうございました!
早速使用してみましたが・・・
>>561のモジュールと結果が違うのはどうしてなんでしょう?
>>590
561のやつにはバグがある予感。
とゆーか、10進数で出てくるな…。DLLの方は16進数だ。
MD5って16進数表現だったような気が。
592デフォルトの名無しさん:02/02/03 19:25
>>591
作者氏は「忠実に移植」したと言ってますが。。。

>MD5って16進数表現だったような気が。
なるほど、DLLの方が信頼性高いかな?
システムフォルダにコピーする必要があるのが残念ですが
593デフォルトの名無しさん:02/02/03 21:09
msgboxを表示させるときにbeep音がなりますけど、あれって鳴らさないようにすることって
できますか?
594デフォルトの名無しさん:02/02/03 22:30
VCCE5を勉強したいのですが、これってVB5の本でいいのですか?
それと、VB.NETはまだ無料でダウンロードできますか?
595デフォルトの名無しさん:02/02/03 22:38
>>593
耳せんをする
レジストリいじればなんとかなった気が。
>>592
いま簡単に検証してみたけど、処理そのものはあってるよ。
ただ、出力が10進数になってるだけで。
451行目を
strMD5 = strMD5 & Right("0" & LCase(CStr(Hex(bytRV(j)))), 2)
にとすれば、RFC1321の奴と同じ出力が得られるよ。
# HexとLCaseかませただけね

>>591
MD5の出力は本来は「128bit長の整数」で、
一般的に見る形式はそれを16バイトの配列と解釈し、
個々のバイトを16進数表記にした文字列をして表現してるだけ。
だから、10進数で表現してもそれはそれで間違いじゃないので念のため。
598デフォルトの名無しさん:02/02/03 23:07
>>582
IE の shdocvw.dll にある DoAddToFavDlg と DoOrganizeFavDlg
>>597
> にとすれば、RFC1321の奴と同じ出力が得られるよ。

おお、確かに!ではこちらを使わせていただこう。
勉強になりました。
>>593
よくある方法として、MsgBox を改造したい場合
Form で自作する。
601593:02/02/04 02:13
>>600
やっぱり素ではできないんですね。
自作することにします。
ありがとうございました。
602デフォルトの名無しさん:02/02/04 05:29
友達のVB(プロフェッショナル版・ライセンス取得)でソフトを作成して、
友人の名前ではなく自分の名前でフリーソフトとして公開したら違法ですか。
(あくまで、私の名前で)
その場合、私、友人、両方、誰が悪人になりますか?
開発した環境は友人のパソコンです。友人に許可も取っています。
そのソフトからVBのIDやライセンス保持者の名前はわかるんでしょうか。
友人は、俺が許可しているんだから大丈夫といっていますが怪しいです?
知りたいのは、IDが作成ソフトから確認できるのかということです。
603デフォルトの名無しさん:02/02/04 05:55
>>602
例えば他人のパソコンを借りて作成しても
著作権は作った人のもの。だから別に関係無いんじゃね?
604デフォルトの名無しさん:02/02/04 06:07
>602
たしかIDで同定することは可能だったと思う。
ただし、フリーソフトのIDをいちいち調べて、登録ユーザかどうか
チェックすることはしない。ウィルスとかでない限り。

まあ、使用許諾違反であることは間違いないから、
実名ではなく、ハンドルで公開したら?

605ミタカ:02/02/04 09:21
Function abc(i as integer) as String
      Select Case i
      Case 1  abc = “いし”
      Case 2  abc = “はさみ”
      Case 3  abc = “かみ”
      Case Else  abc = “???”
       End Select
End Functionの時、
abc(0),abc(1),abc(2),abc(3),abc(4),abc(5),abc(6),abc(7),abc(8),abc(9)
のように値を設定した時の関数の値を教えてください。
>>605
あちこちにおんなじこと書くなよ。
自分さえ答えがよければそれでいいのか?
一回質問したら、何時間か待ってろよ。
607デフォルトの名無しさん:02/02/04 09:29
VB6.0を使って人達へ、
VB.NETになって泣くなよ。

言語そのものじゃなくて、プログラミングとその概念を学習しとけよ。
>>605
自分でやってみれば?
>607
.NETになって泣く人はVB6.0を使えてない人だし。
ってか初心者スレなんで煽りはご勘弁願いたい
>>607
VBとVC++を使ってる俺はどうしたらいいですか?
611デフォルトの名無しさん:02/02/04 10:45
>>602
それが違法だってんなら友達の家でゲームやるのも違法になるのでは。
VBを入れてるパソが一台だけなら2人同時には使えないわけじゃん。
俺は問題無いと思うけど?
そのVBを自分のパソに入れて使ったら間違いなく違法だけど。

所有する全てのマシンにソフト入れてるけど
同時使用数を調べてその数だけライセンス買ってるって会社もあるよ。
612デフォルトの名無しさん:02/02/04 10:54
>>547 ここです。
SHTree エクスプローラと同じツリー表示を得るためのActiveXコントロール
http://www.vector.co.jp/soft/win95/prog/se112351.html

で、>>538に答えてくれる人!だれかいませんか・・・?
613デフォルトの名無しさん:02/02/04 14:38
VBを覚えたらバイナリエディタなどで表示される内容を
理解できますかいな?
>>613
???
VBとは関係ないんじゃない?
>>613
EXEやDLLなら86系の機械語を勉強せれ
JPG,GIFとかなら規格書を読め
XLSやPDFならソフト作ったメーカーに聞け
>>615
>XLSやPDFならソフト作ったメーカーに聞け
本当に教えてくれるの?
617 :02/02/04 19:38
Excelのフォーマットなら過去に公開されてるし、PDFもSDKがある。
>>616
615は無料で教えてくれるとは言ってないw
MSを買い取ればマンツーマンで教えてもらえるんじゃない?ww

619デフォルトの名無しさん:02/02/04 22:37
>>611
>それが違法だってんなら友達の家でゲームやるのも違法になるのでは。

使用許諾契約書(LICENSE.TXT)を読みなさい。
このライセンスはMSと客の間の契約だから、他のソフトウェアはまったく無関係。

>VBを入れてるパソが一台だけなら2人同時には使えないわけじゃん。

ちなみに、普通に市販されているVBのライセンス形態は1人の人に対して
ライセンスを許諾している。だから、何台にでもインストールしてよいが、
使用できるのはただ一人。同時だとか同時じゃないとかは関係なし。

>俺は問題無いと思うけど?
(藁)

>所有する全てのマシンにソフト入れてるけど
>同時使用数を調べてその数だけライセンス買ってるって会社もあるよ。

当然、ライセンス形態が違えば、また話は違ってくる。
620611:02/02/05 09:25
使用許諾契約書(LICENSE.TXT)を読みなさい。

 読みたくない(W
 わかりやすく要約してくれてありがと。
 そっかー、何台にでもインストールしていいんだ。
 いい事聞いた。
621助けて@女性社員:02/02/05 10:53
VB6でリンカに送られてるコマンドラインを
「/SUBSYSTEM:windows,4.0」からこれを「/SUBSYSTEM:CONSOLE」にしろといわれたのですが
これってどうやるのでしょうか?
622 :02/02/05 11:28
>>621
Link.exe とかって名前の実行ファイルを作って、それから真のリンカ
を呼び出せばいいんじゃない?
623:02/02/05 11:34
はじめまして。
今、DOSプロンプトから起動するプログラムを作っているのですが、
VBからDOSプロンプトへエラーメッセージなどの文字を出力する
方法がわかりません。
どなたか教えていただけないでしょうか?
624デフォルトの名無しさん:02/02/05 11:40
>>621
API使ってる?WirteConsoleとか。
WriteConsoleだったら、lpBufferに格納してるのが出力されてると
思うんですが。

的はずれだったらスマン。
625:02/02/05 12:12
どうもーつかってますー
だけど新しいコンソールウィンドウが開いちゃうんですよ・・・

今使っているDOS窓でメッセージ表示させたいのですが
626 :02/02/05 12:19
>>623 >>621の方法を使うか、VBSでも使え。
何の雑誌だったかわすれたけど
VBのアカデミックパックを自分の子供(幼稚園児)名義で買えるか?
って企画があった。
結論から言うとMSのライセンスは幼稚園生でもかまわないが
電話を含むサポートは本人からしか受け付けないというオチだった。
628名無しさん:02/02/05 13:51
621の方法がDOSと関係あるの?
電話で、どうやって本人だと確認するんだ?
>>627
サポートが受けられる受けられない以前に、子供以外は使っちゃいかんとおもうが。
MSのサポートなんかイラネぇよ!
ってやつは幼稚園児に買わせてもいいってことか
632名無しさん:02/02/05 14:55
スマソ便乗。>>621ってコンソールに文字列表示するのと関係あるの?
というかコンパイルとかビルドってIDE以外でやったことないが・・・
633デフォルトの名無しさん:02/02/05 15:06
visual basicでsocksについて解説してるサイトないですか?
634VBは久しぶり:02/02/05 15:36
TrueDBGridの7.0を使っています。このバージョンは初めてです。

設計時のプロパティ画面ンから、列の幅を数値で指定しようと思ったのですが、
Columnのプロパティにwidthがありません。7.0になって動作が変わったのでしょうか?

635デフォルトの名無しさん:02/02/05 15:38
VBで作ったバイナリって、IDが埋め込まれてるの?
どのマシンで作ったか、ってわかっちゃうの?
じゃーゲーツをバカにするソフトとか作ると、ヤクザが家にきちゃう?
今まで知らなかったのかよ。そんなの常識
637デフォルトの名無しさん:02/02/05 16:31
某社のGridコントロールを使った独自ライブラリを使っているんですが、、
今回画面を出さないバックエンド処理なので
Gridコントロールをダミーのクラスに置き換えてコンパイルしようとしました。

そしたら※印んところでコンパイルエラーになるじゃないですか。
GridコントロールはControlを継承してやればいいとあたりを付けて
Helpや検索してみたんですがVBじゃ「継承はできない」って、、、

もともとのGridコントロールってどうやって作ったんでしょう?(謎)
Gridコントロール使ってる個所全部#IFで囲むのは
数が多くて避けたいのですが。

Function Hoge_NewGrid&( grd As Grid)

  Fuga_NewGrid& = Core_NewGrid(grd) '←※

End Function

Function Fuga_NewGrid&( grd As Control)
'略
End Function
638 :02/02/05 16:36
>>637
なぜにLongを返そうとしてるの? つか、何がやりたいのかぜんぜんわからん。
639デフォルトの名無しさん:02/02/05 16:51
Excel VBAについて質問なんですが、

Sheet2のA50のセルに値があるか?
 あれば、(次の行)A51のセルに値があるか?
  あれば、(次の行)A52のセルに値があるか?
   あれば、・・・・
なければ、終了。

で、A50-E50から値のあった行までをコピーする。
(A53まで値があれば、A53-E53まで)

そしたらSheet1のA50を選択してペーストする

という動作をやりたいのですが。。
640デフォルトの名無しさん:02/02/05 16:51
>>637
いや、Gridをダミーに入れ替えてコンパイルを通したいだけなんですけど、、
何をしているのかは私も不明、、

っていうか今回上の関数二つとも使わないので
「#IF」で囲んで殺してしまってもいいんですが
似たような関数がたくさんあるので手動でたくさんの個所をいじると
バグ作り込みそうで恐いのです。
641637 640:02/02/05 16:53
>>640 の>637へのリンクは>>638へ読み替えてください
642デフォルトの名無しさん:02/02/05 19:04
VBで作ったバイナリに、個別のIDが組み込まれていて、誰が作ったか追跡できるって本当なの?
ソースはある?
643 :02/02/05 19:07
>>640
コンパイルエラーが出る理由は、関数に値を設定しようとしてるからでは?
Control型の代わりに使うんだったら、Object型だね。
644 :02/02/05 19:08
>>642
うそに決まってんじゃん
>642
それどころか、遺伝子情報が埋め込まれるから作った人間も追跡できるよ。
DNA、とか…
>>625
VBで作られたウィルスがニュースにならないのはそのIDを元にして
簡単に犯人を特定できるから。
広まる前にタイーホされちゃうんだよ。裏では有名な話。
648633:02/02/05 21:28
socks…
649デフォルトの名無しさん:02/02/05 21:51
VB製のウイルスってランタイムいるんですか?
>>637
よー分からんのですが、クラスにControlのインターフェイス持たせたいなら
Implements Control
ってやるよろし
>>637
言ってることがさっぱりわからん。
コントロール作りたいならコントロールのプロジェクトを選べばいいと思うが。
>>649
いる
653VBA初心者:02/02/05 22:49
>>639
Sub main()
Dim lngI As Long
Dim varTmp As Variant
Dim strSel As String

lngI = 50
varTmp = Worksheets("Sheet2").Cells(lngI, 1).Value

Do Until varTmp = ""
lngI = lngI + 1
varTmp = Worksheets("Sheet2").Cells(lngI, 1).Value
Loop

Worksheets("Sheet2").Select
strSel = "E" & CStr(lngI - 1)
Range("A50:" & strSel).Select
Selection.Copy

Worksheets("Sheet1").Activate
Range("A50").Select
ActiveSheet.Paste
End Sub
654デフォルトの名無しさん:02/02/05 23:09
>625
標準ウィンドウハンドルの取得を間違えてるだけでは?

>635,642
同定(=identify)できるだけって書いたろ?!
ほかで何かを公開してなかったら、どこの誰かまではわからない。

>649
Win98以降、ランタイムは最初から入ってる。
>>654
>Win98以降、ランタイムは最初から入ってる。
それはVB5までの(標準)ランタイムね。

Win95,NT4.0時ではVB2ランタイム。
WinMe以降はVB6ランタイムまで入っている。
ちなみにSPは当たってないからウィルス作るときはSPのバージョンにも気をつけよう。
タマーニ動かないことあります.
最新はSP5ね。
657仕様書無しさん:02/02/06 01:56
VBって何ビットなんですか?
658名無しさん:02/02/06 02:06
スマソ便乗。>>621ってコンソールに文字列表示するのと関係あるの?
というかコンパイルとかビルドってIDE以外でやったことないが・・・
>>621 >>658
リンカにSUBSYSTEMの指定をするのは、Cでの話。
多分、Cができる人にからかわれただけだと思う。

APIのWriteConsoleが正解。
MSDNがなぜか開けなくなってしまったんですが・・・
分かる人いたらお願いします。

VB6
WindowsXP
661:02/02/06 02:35
しかしAPIのWriteConsoleを使うと新しいコンソールウィンドウがひらいちゃうんですよ。。。
今使っているコンソール内にメッセージを表示させたいんです。。。
>>660
XPの再インストールとかしてみた?
663デフォルトの名無しさん:02/02/06 02:50
>>660
昔同じ問題にあったことがある・・・・
あー・・・・。。教えてあげたいが解決方法が思いだせん。。
直接MSDNは開けるのかな?
関連付け設定みたいなの見直せればいいけどね。
664660:02/02/06 02:51
>>662
やっぱりそれしかないんですかね?
665デフォルトの七誌さん:02/02/06 02:55
666660:02/02/06 02:56
うーん。
ていうか、VBからMSDNを開こうとすると、[応答なし]になります。
667デフォルトの名無しさん:02/02/06 03:03
PCを再起動してみてMSDNだけを起動してみては?
668 :02/02/06 03:04
>>659
おいおい。VB Magazineにも紹介された、伝統的な技だぞ
669660:02/02/06 03:09
>>667
MSDNフォルダ開いてみたんですが、
どれを起動すればいいのか分からないんですが・・・
670デフォルトの名無しさん:02/02/06 03:15
>>669
ん?スタートメニューからいけるとおもうけど。。
どうもVBとMSDN再インストールしたほうがよさそうかなぁ
671660:02/02/06 03:23
>>662,>>663,>>667,>>670

みなさんありがとうございました。
一度MSDNを単独で開き、
VBからもう一度開いてみたら問題なく開けました。
これで、安心してプログラム書けます。
672565:02/02/06 03:26
>>668 さん
すみませんどうやってやるのでしょうか?
673565:02/02/06 03:44
すみませんどうやってやるのでしょうか?その設定の変え方?
674デフォルトの名無しさん:02/02/06 07:02
>>661
どうやってるのかわからんが、ハンドルを取得できてないだけでは?
DOS窓の設定をいじれるなら、クリップボード経由で送るのが厨房向き。

675デフォルトの名無しさん:02/02/06 08:47
VB6 Enterprise +SP5ですが、
ここに参照設定でExcelのLibraryを組み込んで、
オブジェクトブラウザでExcelのクラスとかをどんなのがあるのかな〜、
ってヘルプを見ようとするとヘルプがありません、となります。
MSDNはちゃんと組み込んでるつもりなんですが、
あ、Excel2002だからかな?誰か分かる人います?
676659:02/02/06 09:34
むむ、リンカにオプションを指定する方法があるの?
調べたけど、
http://www.alpha-net.ne.jp/users2/kone/back/nikkib2.html
[99/11/20 VBでCGI編 ]
> どうやらリンカに「/SUBSYSTEM:CONSOLE」が送られてることが
> 原因らしいのでVBでリンカに送られてるコマンドラインを調べてみると・・・
> やっぱり「/SUBSYSTEM:windows,4.0」になってた・・・
> これを「/SUBSYSTEM:CONSOLE」にし、さらにコンソールウインドウを
> 作成する必要がないんでAllocConsoleおよびFreeConsoleを外す。

>>622
> Link.exe とかって名前の実行ファイルを作って、それから真のリンカ
> を呼び出せばいいんじゃない?

この組み合わせでできるのか?

677659:02/02/06 09:37
>>621
> 621 名前:助けて@女性社員 投稿日:02/02/05 10:53
> VB6でリンカに送られてるコマンドラインを
> 「/SUBSYSTEM:windows,4.0」からこれを「/SUBSYSTEM:CONSOLE」にしろといわれたのですが
> これってどうやるのでしょうか

そもそも、これを教えてくれた人は、
なぜ、詳しいやり方を教えてくれなかったんだろ?
678 :02/02/06 10:22
>>676
IDEだから、オプションを変更する方法はありません。面倒だから、VB7使えば?
editbinでsubsystemを書き換えればいいのでわ?
680ななし:02/02/06 10:23
http://www.alpha-net.ne.jp/users2/kone/back/nikkib2.html
このサイトみてやり方わからなかったんじゃないの?
検索するとこのサイトしかひっかからんぞ
681ななし:02/02/06 10:24
それにしてもやりかたわからないな
システムの環境変数いじればいいのか?
682ななし:02/02/06 10:24
このサイトの掲示板で質問してみるか…?
683デフォルトの名無しさん:02/02/06 10:42
Webでいろいろ探して見たのですが、よくわからないので質問があります。
他のアプリケーションのIME入力を制御することは出来ますか?
例えば、自作のVBアプリケーションからWindowsのメモ帳のIME入力のON,OFF切り替えを行うなどしたいのですが、どうも上手くできません。
どなかたお力を貸して欲しいです。
684名無しさん:02/02/06 12:10
すみません誰か621さんのやりかたを詳しく教えてください!
どうやってSUBSYSTEM:CONSOLEにするのでsか?
>>653さんへ
見事に出来ました。どうもありがとございました。
686659:02/02/06 14:00
お、とりあえず Link.exeを置き換えたら、こんなのが取れた。
"C:\_VB\LinkDummy\LinkDummy.OBJ"
"C:\_VB\LinkDummy\Link.OBJ"
"C:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB"
/ENTRY:__vbaS
/OUT:"
C:\_VB\LinkDummy\Link.exe"
/BASE:0x400000
/SUBSYSTEM:WINDOWS,4.0
/VERSION:1.0
/INCREMENTAL:NO
/OPT:REF
/MERGE:.rdata=.text /IGNORE:4078

Link.Exeのダミープロは、入れ替えが面倒だからVBで作らんほうがいいな。失敗。
687名無しさん:02/02/06 14:03
入れ替えってどうやるのですか?お願いします!
688 :02/02/06 14:12
Link.exeってのがあるだろ? それを別の名前で保存すればいい。
で、

Sub Main()
  msgbox Command
End Sub

とかってすれば、何が渡されてるかわかる。で、そのコマンドラインを引数に、
Shellで起動してやればいいんじゃないか?

Shell "Link.exe" & Replace(Command, "WINDOWS、4.0", "CONSOLE")
無視されてるし...
コマンド打つのは嫌い?
>editbin /subsystem:console foo.exe
690デフォルトの名無しさん:02/02/06 15:29
>>684
ファイル→exeの作成→オプション→実行可能ファイルの作成→コマンドライン引数で、
/SUBSYSTEM:CONSOLE
かな。

引数の種類は、VB本体と同じフォルダでDOS窓を開き「LINK /?」を実行すればわかる。
691デフォルトの名無しさん:02/02/06 15:30
>>683
メモ帳のIMEをONにするにはハンドルを取得し、APIのImmSetOpenStatus等を使う。
しかし、どうしてメモ帳?  自作の入力用フォームならIME制御が簡単なのに。
692659:02/02/06 15:37
>>689
そんなコマンドがあったのか、DummyLink.exe作っちゃったよ。

1.VBのC:\Program Files\Microsoft Visual Studio\VB98\Link.exeをLINKORIG.EXE にリネーム
2.下のやつLink.cで保存し、をコンパイルして、Link.exeを作る。(cl Link.c)
3.コンパイルしたLink.exe をC:\Program Files\Microsoft Visual Studio\VB98\ にコピー
4.VBのプロジェクトを開き、メジャーバージョンを999に変更する。
5.コンパイルしてEXEを作る。
6.俺はまだテストしてないよ。

<Link.cで保存しる>

#include <stdio.h>
#include <process.h>
#include <string.h>

/**
* Link.exe(VbLinkDummy)
* メジャーバージョンが999の時だけSUBSYSTEMをCONSOLEにする。
**/
int main(int argc, char ** argv)
{
  char szCommand[8192];
  int n;
  int isConsole = 0;
  FILE * fp;

  for (n = 0; n < argc; n++){
    if (0 == _strnicmp(argv[n], "/VERSION:999", 12)){
      isConsole = 1;
    }
  }
  
  strcpy(szCommand, "LINKORIG.EXE");
  for (n = 1; n < argc; n++){
    printf("argv[%d]=%s\n", n, argv[n]);
    strcat(szCommand, " ");
    if ((0 == _strnicmp(argv[n], "/SUBSYSTEM:", 11)) &&
      (isConsole == 1)){
      strcat(szCommand, "/SUBSYSTEM:CONSOLE");
    }else{
      strcat(szCommand, argv[n]);
    }
    
  }
  fp = fopen("VbLinkDummy.log", "a");
  fprintf(fp, "szCommand=%s\n", szCommand);
  fclose(fp);
  
  system(szCommand);
  return 0;
}
693名無しさん:02/02/06 15:51
SUBSYSTEMの件、できました!皆さんありがとう!
EDITBINってこのマシンにはないですが探して見ます!
694659:02/02/06 16:06
成功したらやり方ぐらい書けや、ボケ!
695デフォルトの名無しさん:02/02/06 18:22
Excel VBAで質問です。
xslファイルと同じディレクトリにある固定のファイルをいつも
外部データの取り込みから開きたいのですがうまくいきません。
何故でしょうか。
デスクトップで二つをファイルを操作している時は正常ですが
他のフォルダへ二つを移動してやると
「ファイルが移動または名前が変更されていないことを確認し、
再度実行してください。」と出ます。
696695:02/02/06 18:24
With Selection.QueryTable
.Connection = "TEXT;aiueo.csv"  ←(.\aiueo.csv でもダメでした)
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.Refresh BackgroundQuery:=False ←(エラーはこの行と言われます)
End With
ActiveWorkbook.Path を使うんじゃダメ?
>>695
EXCELでマクロを記録して、それを参考にVBへ移植しる
700デフォルトの名無しさん:02/02/06 19:53
>691さん、ありがとうございました。
しかし、InputContextがうまく取得できていないようでIMEを切り替えることが
できません。

lgHWnd = FindWindow("Notepad", vbNullString)
lgIMEHandle = ImmGetContext(lgHWnd)
Call ImmSetOpenStatus(lngIMEHandle, 1)

と、やっているのですがどこがマズイのでしょうか
701デフォルトの名無しさん:02/02/06 20:08
エクセルでデータを入力してるのですが、
     A  B  C
1列目 a  b  c
2列目 d  e  f
3列目 g  h  i
)以下続く。

と書いてある内容の1つのファイルから
a_b_c.txt d_e_f.txt g_h_i.txt・・・ というように列ごとに
テキストファイルを書き出すことはできますか?
マクロを組んだことがないのでよく分からんのです。
教えて君でスマソ
702 :02/02/06 20:23
>>700
たしか、自アプリ以外のコンテキストハンドルはとれないはず。
AttachInputThread()してもダメかな?

>>701
Range("A1").Value で、A1の値が取得できる。ということで、順番に
取得しながら連結していけばおっけー。
703 :02/02/06 20:52
>>702
AttachThreadInput()だった。鬱死
>>701
エクセルVBA質問&研究板
http://pc.2ch.net/test/read.cgi/bsoft/1008219498/l50
API関数ReadFileでバイト配列にテキストファイルを読み込み、
それをテキストボックスに表示したいんですが、どうすればいいのでしょうか。
えーと、バイト配列にテキストファイルを読み込むまでは出来てます。
バイト配列に入ってるデータをテキストとして、テキストボックスに表示したいです。
706 :02/02/06 21:52
>>705
バイト配列は、そのままString型の文字列に設定できます。つまり、
Text1.Text = b() という感じで。

Unicode変換する必要があるかもしれないけど。
707705:02/02/06 22:02
うーん、Text1.Text = b()ってやってみましたが駄目でした。
Unicode変換って、StrConv関数でいいんですか?
708 :02/02/06 22:03
>>707
どうダメだった? 文字化けしてるなら、StrConvでUnicode変換でいけるかと。
709705:02/02/06 22:08
なーんも表示されません。
Text1.Text = StrConv(b(), vbUnicode)
ってやっても何も表示されません。
b()はウォッチウィンドウで見て確かにデータ入ってますし、
WriteFileで書き込んでみたらちゃんと目的のテキストが保存されてるので、
b()が実は空っぽとか、そういうことはないと思います。
710700:02/02/06 22:46
>>702
AttachInputThreadの使い方がわからん。
サンプル希望です。
情けないっす。
711705:02/02/06 22:52
すみません、よくわかりませんがちゃんと表示されるようになりました。
どこも弄ったつもりないんだけど・・・今まで何が悪かったのか分からない・・・。
ま、動いてるから良しとします。
ありがとうございました。
712701:02/02/06 22:54
>>704 向こうに移動しました。自分は全くわからないからなぁ・・・
713 :02/02/06 23:08
>>710
自スレッドは、GetCurrentThread()、相手スレッドはGetWindowThreadProcessId()
で取得できる。で、3番目の引数にアタッチすることを示す1を指定すればおっけー。

つか、検索すればサンプル見つかるだろ。アクティブウィンドウ変更では
基本的な処理だし。
714デフォルトの名無しさん:02/02/06 23:13
すみません、テキストボックスの右揃えとか左揃えとかを指定するのはAlignmentプロパティではないのですか?
右揃えにならないんですが・・・。
>>714
確か環境によってなったりならなかったりするはず。
(VBバージョンかOSバージョンによる)
「古いのを使ってるせいです。仕様です」と言いきるか(諦めるか)、
MultiLine=Trueでやるのが定説。
716714:02/02/06 23:38
>>715
おおっ、MultiLine = Trueでやったらできましたあ!ありがとうございます!
しかし複数行入力できることで別の問題も起きてきますね・・・。まあなんとか対処法を
考えてみます。
ちなみに環境ですが、OS:Win95/VB:6.0(Enterprise Edition)です。
717 :02/02/06 23:39
>>714
OSバージョン。Windows95と、WindowsNT4.0SP2以前はそうなる。
718714:02/02/06 23:42
>>717
ああ、やはりそうなんですか・・・。Win95・・・。
なんかこれ以外にも制限うけたりしますか?
>>675
>ここに参照設定でExcelのLibraryを組み込んで、
>オブジェクトブラウザでExcelのクラスとかをどんなのがあるのかな〜、
>ってヘルプを見ようとするとヘルプがありません、となります。

Excelインストールするときに、Excel VBAのヘルプもインストールした?
デフォルトはインストールされんと思う。
#Excel2002でもそうだったかどうかは知らんけど。
720デフォルトの名無しさん:02/02/07 01:10
VBAで以下の構文を実行すると、オブジョクトが設定されてません
と4行目がエラーになるんですけど、どこを
どう直したら良いでしょうか?
シートの選択までは、出来ているんですけど。

Kinou_No = "1-01"
Worksheets(1).Activate
Worksheets(1).Range("a1").Activate
Cells.Find(What:=Kinou_No).Activate
>>720

Findメソッドのヘルプに
||検索の条件にあてはまるセルが見つからなかった場合は、Nothing を返します。
って書いてあるから、検索結果なしなんじゃないの。
722名無しさんです:02/02/07 01:34
良くあるメジャーなタブブラウザなどはセキュリティレベルや
画像音楽ON/OFFなどと言った機能をソフト側で切り替えら
れるようになってますが、あれはどうやってるのでしょうか?
723D店長:02/02/07 05:01
あるサイトを見て以来、PCを起動すると
「エラーが発生したのでExplorer.exeを終了します」
ってなって、デスクトップが表示されなくなったんですけど。
これってウィルスですか?
マジ困ってます。
(このカキコは友人のPC借りて書いてます)
なんでVBの質問スレで聞くねん。
725DOSマソ:02/02/07 07:54
おかげさまでVBでコンソールアプリができました。
ありがとうございます。
726675:02/02/07 09:48
>>719
ありがd!おっしゃる通りでした!
727DOSマソ:02/02/07 09:51
あとVB6ではいろいろ面倒なことが多いから
VB.NETに移行することにしました。
皆さんもそうしましょうよ(無責任
728デフォルトの名無しさん:02/02/07 10:40
FORMを含まないモジュールのみでEXEを作る場合
そのEXEのICONって変えられないんですか?
729 :02/02/07 10:42
>>728
変えられる。リソースでアイコンを追加して、ID_APPICONにするんだったけかな。
730728:02/02/07 10:53
>>729
ありがとうございます。
すいません、もうちょっと詳しく教えてください。
リソースファイルの追加までは、やってるんですけど
>>ID_APPICONにするんだったけかな。
ここの部分がいまいち分かりません。

リソースの定義を
1 ID_APPICON "aaaaa.ico"
とかかな?と思ってやってみたんですけど、駄目だったし...
プロジェクトのプロパティにID_APPICONと設定するとこもなさそうだし...

へんな事言ってたらごめんなさい。
731MSCommとunicode:02/02/07 11:32
VB5で39文字の半角文字列をMSCcommで送信するのですが、
MSCommに渡す直前にlenBで実際の長さを調べると倍の78バイト、
(これはUNIcodeの為だと思うのですが)
この文字列を実際に相手側が受信すると39バイトで受信されているようなのですが
どうしてでしょうか?Winsockを使用しても同じ現象です。
UnicodeからANSIに勝手に変換されているのでしょうか?
結果OKではあるのですが、理由が知りたいのでわかる人、教えて!
7322重引用符:02/02/07 12:09
すんません、VBで文字列の中に”を入れたい場合は
"を""で表して、
Msg = " 彼はいった。 ""こんにちは"" "
って書けますよね? この事ってHelpの何処かに
記述ありますか? 改めて探してみると見つからない。
733名無しさん:02/02/07 12:14
使わないフォーム追加して、フォームのアイコン設定して
そのアイコンつかえばいいじゃん
嗚呼VB
735デフォルトの名無しさん:02/02/07 12:50
>>732
わかってるならヘルプ見る必要ないじゃん
736 :02/02/07 13:06
737デフォルトの名無しさん:02/02/07 13:26
VBでFTPを使うのってWININETってのを使えばいいんですか?
他にもっと簡単な方法とかってありますか?
738 :02/02/07 13:53
>>737
Inetコントロールでどう?
739デフォルトの名無しさん:02/02/07 13:59
文字列の中からカンマの位置を取得したいのですが

strLine = "1999,2000,2001"
intBasyo = InStr(0, ",", strLine)

じゃダメでした。
何か方法はありませんか?お願いします。
>>739
こうか?
MsgBox InStr("1999,2000,2001", ",")
741MSCommとunicode:02/02/07 14:08
>>739
strLine = "1999,2000,2001"
intBasyo = InStr(1, strLine, ",")

だと思うけど
742737:02/02/07 14:19
>738
どうも、MSDNみてみます
743デフォルトの名無しさん:02/02/07 14:28
>>740
>>741

どうもすみませんでした。。。
744デフォルトの名無しさん:02/02/07 15:07
エクセルのマクロでエクセルを開くと自動実行するようにしました。
ですが、エクセルを開いた時に毎回、
「このファイルはマクロを含んでいます。マクロを有効にしますか?」
というダイアログが出て、OKを押すと実行されます。
有無を言わさず、自動実行したいのですがどうすれば良いでしょうか。
>>744
エクセルの設定変えれ。
クイズを作りたいので
サンプルキボンヌ
747デフォルトの名無しさん:02/02/07 15:18
>>745
すいません、どのようにですか?
あと他の人が別のパソコンで開いてもダイアログが出ないようにしたいので
マクロに記述できたら一番良いのですが。
748デフォルトの名無しさん:02/02/07 15:20
すいません、わかりました。
セキュリティのとこですね。
これをマクロに記述は出来ないでしょうか。
・・・でも良く考えたらセキュリティの為に自分で設定出来るのだから
マクロで設定出来たらウイルスとか間単に実行出来ちゃいますよね。
それ考えたら無理っぽいか。。
749710:02/02/07 15:42
>>713さん返答感謝です。
おかげでスレッドのアタッチは出来るようになりましたが
元々の目的である、VBアプリから他のアプリのIMEを切り替える事は
スレッドをアタッチしても出来ませんでした。

マクロソフトを作っているのですが、他のアプリに"abcde"と送りたいとき
そのアプリのIMEがONだと"あbcでf"となってしまうので困っています。
なにかいい知恵はないでしょうか?
直接WM_CHARとかで送るとか。
751 :02/02/07 16:27
WM_SETTEXTで送るとか。
752745:02/02/07 16:40
>>748
そゆこと。
753737:02/02/07 16:58
>738さん
ファイル転送できました。ありがとうございました。
754デフォルトの名無しさん:02/02/07 16:59
ThisWorkbookのPrivate Sub Workbook_Open()にある変数を
標準モジュールのModule1にある、Sub あいうえお()の
中で使いたいのですが、引数のやり方が解りません。御願いします。
755754:02/02/07 17:00
Excel VBAです
>>748
少し主旨から外れますが、こんな感じのウィルスがあった
ということで、参考になるかもしれません。
 
・VBSでレジストリの書き換えとEXCELの立ち上げを行う。
 そのあとVBSが自分自身を消す。
・バッチファイルでREGファイルを実行してレジストリを書き換え、
 EXCELを立ち上げる。そのあとVBSが自分自身を消す。
>>756 の訂正

・バッチファイルでREGファイルを実行してレジストリを書き換え、
 EXCELを立ち上げる。そのあとバッチファイルがREGファイルと
 自分自身を消す。
758デフォルトの名無しさん:02/02/07 17:19
>>440禿同
759デフォルトの名無しさん:02/02/07 17:53
>>752
いや、そのやりかたも判らないです。
SendMessageで送るんだろうとやってみたが、
上手くいかなかったし、スレッドアタッチしてもダメだった。
検索しても見つからないのは探し方がマズイのだろうか……。鬱。
760Winsock:02/02/07 18:23
MScommを使ってテキストモードで送信するとUNICODEから
ANSI(ASCII)に変換され送信されるのは
わかったのですが、Winsockもそうなのでしょうか?教えてください
761デフォルトの名無しさん:02/02/07 18:33
質問なのです。
MSDNのサンプルについてた「Taborder」に、
「複数項目を選択、それを一番上or下まで移動」
ってな機能をつけたいのです。
複数選択はMultiSelect=1or2でいいとして、移動部分がイマイチなのです。

とりあえずコマンドボタンを1コ追加して

Private Sub cmdTop_Click()
Dim i As Integer
Dim iCount As Integer

iCount = 0
With lstTabIndex
For i = (.ListCount - 1) To 0 Step -1
If (.Selected(i) = True) Then
.AddItem .List(i), 0
.RemoveItem i + 1
iCount = iCount + 1
End If
Next i
For i = 0 To (iCount - 1)
.Selected(i) = True
Next i
End With
End Sub

とかやってみたんですが、選択項目が連続していると
順番が入れ替わったりするのです。

どうか教えてほしいのです。
762デフォルトの名無しさん:02/02/07 18:42
>>761
内部でソートして、全部きれいに入れ直すのが吉
頑張ればできるかもしれないが、誰にもメンテできない難解なソースに
なるのが関の山。
763デフォルトの名無しさん:02/02/07 20:00
>>735
いや、この書き方が正式にサポートされているのか、裏技なのか
知りたいのですが。
昔は c$=chr$(&h22) っていうのをくっつけたもんだが。
764761:02/02/07 21:15
>>762
それもそうですね。
なんとかエレガントなコードを、とか考えてたですが、
少々野暮ったくても確実に動く方がいいですね。

ありがとうです。
765デフォルトの名無しさん:02/02/07 21:48
質問です
クリスタルレポートで帳票を出力するプログラムをやっているのですが
普通に出す分にはできたのですが、以下の2点ができないものかと悩
んでいます。

1、フォームにコントロールを貼り付けてレポートのプレビューを出して
  いるが、プレビューを閉じるまでVBの方の処理を止めていたい。

2、クリスタルレポートのDB(mdb使用)の参照先パスを変更したい。

1はステータス、2はレコードソースを何とかすればいいのではとは
思っているんですが・・・・
ちなみにVB6、クリスタルレポート6使用です。
766名無しさん:02/02/07 23:14
エクセルVBAを再度勉強しようと、
「かんたんプログラミングエクセル2000VBA基礎編(他にコントロール.関数編、応用編)、大村あつし著」技術評論社
を購入したんですが、アクセス(アクセスでのマクロ)でこの程度の本はありますか?
767デフォルトの名無しさん:02/02/07 23:47
ActiveXコントロールのListviewコントロールを貼り付け、
ファイルリスト代わりに使っています。

主項目にファイル名、副項目にファイルサイズと更新日付を表示しています(以下のように)
    ' p(As String)はファイル名が入っている
    Set lv = ListView1.ListItems.Add(, , p)
    lv.SubItems(1) = (FileLen(p) / 1023) & "KB" 'ファイルサイズ
    lv.SubItems(2) = Format(FileDateTime(p), "yyyy/mm/dd h:mm") '更新日付

つぎにカラムヘッダがクリックされるとソートされるように設定しました。

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)
    ListView1.SortKey = ColumnHeader.Index - 1

    ' Sorted プロパティを真 (True) に設定してリストを並べ替えます。
    ListView1.Sorted = True
End Sub

問題はファイルサイズで、SubItems(index)がString型のためソートすると以下のようになってしまいます。
(昇順)
100KB
150KB
1KB
55KB

なんとか数値型と見なしてソートしたいのですが、良い方法はないでしょうか?
1KB->0001KBとするとか。
>>767
ListViewのSort機能にやってもらおうと思ってたら無理。
場合によってはソートキーの前にスペース入れて
長さをそろえることによって済ませられるかもしれんが。
あるいは隠しカラムにソートできるデータを入れる。
770デフォルトの名無しさん:02/02/08 00:22
>>768
それは真っ先に考えたのですが、やはりあまりにも見づらいかと思い断念しました。

>>769
>場合によってはソートキーの前にスペース入れて
なるほど。試してみます。

>あるいは隠しカラムにソートできるデータを入れる
これもよさげな案ですね。
隠しカラムとはどうすれば出来るのでしょう
771770:02/02/08 00:42
とりあえずやってみました。

まず隠しカラム(width=0のカラム)を作る

    Dim x As ColumnHeader
    Set x = ListView1.ColumnHeaders.Add(, , "ファイル名", ListView1.Width / 3)
    Set x = ListView1.ColumnHeaders.Add(, , "サイズ", ListView1.Width / 5, 1)
    Set x = ListView1.ColumnHeaders.Add(, , "サイズ", 0, 1) '隠しカラム
    Set x = ListView1.ColumnHeaders.Add(, , "更新日時", ListView1.Width / 4, 1)
    ListView1.View = lvwReport

クリックされたColumnHeaderがファイルサイズの場合、SortKeyに2を代入

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)
    If ColumnHeader.Index = 2 Then
        ListView1.SortKey = 2
    Else
        ListView1.SortKey = ColumnHeader.Index - 1
    End If
End Sub

実行してみたところ上手く動作しました・・・が、隠しカラムが列境界線ダブルクリックで
簡単に開いてしまうところが難点・・・
772 :02/02/08 00:50
>>771
ソートロジックを置き換えるメッセージがあるから、それを使って
独自のソートを行えばおっけー。日付型のソートを行うサンプルが
MSDNライブラリにあったはず。
773770:02/02/08 00:55
>>772
ListviewのSortedプロパティを使わずにソートする、ということですか?
具体的にどうすればよいのでしょう?
774デフォルトの名無しさん:02/02/08 01:30
>>761
' 拡張選択可で、選択項目を上に移動

Private Sub cmdTop_Click()
  Dim i As Integer
  Dim iCount As Integer
  iCount = 0
  With lstTabIndex
    i = .ListCount - 1
    Do While i > 0
      If .Selected(i) = True Then
        .AddItem .List(i), 0
        .Selected(0) = True
        .RemoveItem i + 1
        iCount = iCount + 1
      Else
        i = i - 1
      End If
      If i = iCount - 1 Then Exit Do
    Loop
  End With
End Sub
ListBoxのチェックを、
デフォルトでチェックしている状態にするには、どうしたらいいんでしょうか。
初歩的なことかもしれませんが、
知っている人がいたら教えてください。
776デフォルトの名無しさん:02/02/08 02:42
>>775
上にヒントがある。
っていうか、ヘルプでリストボックスのプロパティ全部見れ!
777775:02/02/08 02:52
補足。
Styleプロパティ?で、
チェック項目の表示の仕方はわかったんですが・・・
778デフォルトの名無しさん:02/02/08 06:30
チョー基本的な質問で大変申し訳ないが……

VB6って、フレームの中にラベル貼り付けられないの?(^^;
今、ラベルとコンボボックスを一緒にカット&ペーストしたら、コンボボックスは中に入ってラベルは下に隠れるっつー奇怪な動作をした。
VB4や5はこんな動作しなかったよーな記憶があるんですが、なんか設定、見落としてますかね?(^^;
779775:02/02/08 07:39
>>776
分かりません。
どのプロパティーを使うかだけでもいいんで、
教えてください。
教えて君でスマソ。
780 :02/02/08 08:29
>>773
だから、MSDNライブラリ見ろ、って言ってんのに。Knowledge Baseで
↓のトピックだよ。

HOWTO: Sort a ListView Control by Date
Q170884
781775:02/02/08 08:31
解決しました。
知識ある方々、迷惑をおかけして申し訳ありませんでした。
これからは、なるべく自分で解決するように努力します。
というわけで、sage。
782デフォルトの名無しさん:02/02/08 09:13
始めて一ヶ月程度の者ですが
クラス、コレクションの使い方を覚えるのに良い本はありますか?
783 :02/02/08 10:20
>>782
ヘルプ見てサンプル作れ。で、わかんなかったら、再度質問。
784778:02/02/08 10:50
……ダメだ、どーしてもラベルコントロールがフレームの中に入らない。下に隠れてしまう。

なんで? どうしてこんな動作するんだ?(^^; どこぞプロパティ設定し忘れてるのか? でもデフォルトのまんまだぞ(T_T)
785超初心者:02/02/08 10:59
ある関数において、コントロール名とプロパティを引数にしたいのですが
型指定はどのように指定すればよいのでしょうか?

#テキストボックスならば TXT**.Text 、ラベルなら LBL**.Caption と
#いうように使い分けたいのです
786Midnight:02/02/08 11:06
>784
新規プロジェクト作成→
 フレーム、ラベル、コンボを作成→
  ラベルとコンボを切り取り→
   フレームをクリックし、貼り付け

ってやってみたが、普通にフレームに載ったよ。
当方VB6SP5。
787778:02/02/08 11:09
>>786
……ねぇ(^^; 
VB6は初めてだけど、VB4でも5でもこーやって作ってきたのに……
何が原因なんだろ?
>787 OSから再インストールを推奨(w
789778:02/02/08 11:14
>>788
……おひ(^^;
790 :02/02/08 11:15
>>785
無理。Object型で渡して、関数側で型判断するしかない。
791778:02/02/08 11:19
……もしかして、ユーザーコントロールの編集してることに関係してるのかな?
もはや、そのくらいしか原因が思いつかない……。
>791
フレームをクリックで選択してから貼り付けてるか?
繰り返すが「フレームをクリックで選択してから」貼り付けてるか?
793超初心者:02/02/08 11:31
>790
そうなんですか。ありがとうございます。
794778:02/02/08 11:34
>>792
……もちろん……と、思い立って、ラベルを一枚だけカット&ペーストしてみたら……ちゃんと入った。

<Font Size="+5">なんだこの動作は!!</Font>
漏れもコピペすると裏に回るときがよくある
それ以来コピペやめた
すいません。厨房質問ですがお願いします

半角全角の混じったファイルをgetで読んでいます
space(5)を放り込んだ可変長文字列に読み込んでいるんですが、
5文字分読み込まれてしまいます。
getのHelpには
「文字列変数の持つ値の文字数と同じバイト数を読み込みます。」
とあるんですが、何かを勘違いしているんでしょうか?
VB5です
797761:02/02/08 13:28
>>774
おお、動いた。
ありがdです。
798778:02/02/08 13:30
>>795
しかし、コンボボックスだけ張り付く(しかも複数)っつーのがよくわからん(^^;
799デフォルトの名無しさん:02/02/08 14:40
MSFlexGrid内の項目をテキストボックスの用に入力できるようにすることはできますか?
プロパティで探したのですが、分かりませんでした。
SPREADではできるのですが、FlexGridはできないのでしょうか?
800デフォルトの名無しさん:02/02/08 14:44
>796
単に、私がDQNなだけなのか、質問の意味がよく理解できないです。
GETでどうしたいわけ?
space(5)の部分は読み込ませたくないの?
>>796
5文字分のスペースが入ってるから5文字分読まれてる・・・正しいと思うけど。
802800:02/02/08 14:50
>>799
MSFlexGridは、表示機能だけでセルに入力できなかったはず。
よって、MSFlexGridだけではセルに入力することは無理。
でも、入力は、TEXTコントロールなどを利用すればできるよ。
803774:02/02/08 14:59
>>761
こっちのほうが可読性がいいかも。

Private Sub cmdTop_Click()
  Dim i As Integer
  Dim iCount As Integer
  iCount = 0
  With lstTabIndex
    For i = 0 To .ListCount - 1
      If .Selected(i) = True And i <> iCount Then
        .AddItem .List(i), iCount
        .Selected(iCount) = True
        .RemoveItem i + 1
        iCount = iCount + 1
      End If
    Next
  End With
End Sub

# i <> iCount 条件が無くても結果は同じだけど、
わざわざ同じ位置に挿入して削除するのはムダだから。
804796:02/02/08 16:29
すいません。Binaryでopenしていることを書き忘れていました

>>800さん
可変長文字列でバイト指定で読みこみたいのです

>>801さん
5文字のスペースが入っていると5バイト分読みこんでくれる、と思ったのです
Helpを
「文字列変数の持つ値の文字数と同じバイト数を読み込みます。」
でなくて、
「文字列変数の持つ値の文字数と同じ文字数を読み込みます。」
と読めばいいのでしょうか?

Byteの動的配列をRedimして使えば良いのはわかったんですが、Helpが気になったもので……
805ぐち:02/02/08 16:32
IsDateに 年無しで秒までの日時("2/8 16:30:30")渡したら実行時エラー起こした。
チェックする為の関数のエラーで落ちる悲しさって...

スレ違いスマソ下げ
806799:02/02/08 16:47
>802さん
やっぱり表示のみですか、ありがとうございました。
807vberr ◆P/ECE33A :02/02/08 17:34
>>804
素直にバイト配列使えー。

Dim ff%,txt$
Dim stemp() as byte

redim stemp(5)

ff=freefile
Open "hogehoge.txt" for binary access read as #ff
get #ff,,stemp
close #ff

txt=strconv(stemp,vbunicode)

動作チェックしてねーけど多分動くハズ
syntax error あったら自分で修正して(w

ただこれだと全角文字は半分で切れちまうがいいのか?
808vberr ◆P/ECE33A :02/02/08 17:48
>>807
って、>>804
> Byteの動的配列をRedimして使えば良いのはわかったんですが
解ってたのね. …早とちり(゚д゚)マズー

VB5以降は内部的に文字列をUnicodeで扱っちゃうから基本的に文字列の
カウント関する挙動は「バイト数」じゃなくて「文字数」だぁね.
LenB("A") とかしても2バイトが帰ってくる.

なので、その挙動は仕様です :-
809796:02/02/08 18:07
>>808
どもです
Helpのバイト数とあったのを見て勝手に変換してバイト数の計算でもしてくれるのかと妄想してました

やっぱりVB嫌い固定長も嫌い……
#ひたすらtimeout、、多重投稿になってたらすいません
810デフォルトの名無しさん:02/02/08 18:20
スレ違いかもしれませんが88ベーシックのフロッピーの
フォーマットのコマンドを知っている方いませんか?
ネタじゃないです・・・まじで・・・
811デフォルトの名無しさん:02/02/08 21:28
三角形を描いて、その中を塗りつぶすにはどうしたらよいのでしょうか?
Lineを使って三角を書くことはできるのですけど塗りつぶす方法が分かりません。

単純な質問で申し訳ないです。
マルチでごめんなさい、急いでるんです〜

アクティブレポートの改ページについて教えてチャンです。
改ページの条件をIF文で指定することはできますか?
改ページのキーをどこに設定するかもわからないんですが、
よろしくお願いします
814813:02/02/08 21:38
>>813
ありがとうございます。
FloodFillを使って塗りつぶしできました。
FillStyleとFillColorに値を設定しなければいけなかったとは。
816デフォルトの名無しさん:02/02/08 23:11
>>804
バイト数を指定云々は英文ヘルプからの直訳というだけであって、
1バイト文字文化圏では、内部Unicode化による混乱とは無縁。
日本語化にともなってこういう食い違いが起きることは仕方がない。
817今更Basic:02/02/08 23:25
あのさ、VBって由緒正しいMS-Basicの流派だよね?
なんで
n=10 : print Format(n , "Value = [#####] )
が Value=[ 10]
じゃなくてValue=[10]ってなるの? Helpには確かにケタが足りない時には#には何も
入らないってなっているが、それじゃ####の意味が無かろう。

そもそも
print " A B C"
print using "### ### ###" , a , b , c
ってケタを揃えられるっていうのがBasicのいい所だったのにぃ。
818デフォルトの名無しさん:02/02/08 23:34
>817
スペースでケタ揃えは、こうすればできる。
Print Format(n , "Value = [@@@@@] )

基本的には同感。
819デフォルトの名無しさん:02/02/09 01:12
VBAでファルダを作成したいのですが?
800ページも有る本にも載ってませんでした。。
820Delフサギコ:02/02/09 01:22
  ∧,,∧     /すみません...
 ミ,,゚Д゚彡  < ASPのVBScriptで
  U  U    \DLLかActiveXDLLかを
〜ミ  ミ  呼び出す方法についてくわしい書籍か
  ∪∪  サイト、教えてもらえんでしょうか…

DLL側はC++でもVBでもなんでもいいので
ごくごく簡単なサンプルプログラムを動作させたいっす。

よろしくお願いします。


って、スレ違いかもしれないのですが、VBScriptスレ
ないみたいなので。
821デフォルトの名無しさん:02/02/09 01:43
特定のウィンドウを非表示にしたり表示したりする機能のあるツールを作りたいんですが、
現在そのウィンドウがが表示中か非表示中なのかを取得する方法がわかりません。

えーと、今はFindWindowで消したいウインドウのハンドル取得して、
ShowWindowで消したり表示したりしてるんですが、
今はこれが表示ボタンと非表示ボタンがある状態です。

これを、非表示なら「表示」ボタンにして、表示されてるなら「非表示」ボタンにして、
ボタン一個ですませたいんです。

というわけで、ウインドウが表示されてるか非表示なのかを取得したいんですが、
どうすればいいのでしょうか。
GetWindowPlacement
823デフォルトの名無しさん:02/02/09 02:37
>821
最小化されてるか知りたいん?
>>820
Server.CreateObjectを使ってActiveXDLLを使うYO
VC+ATLで作った物を使うときは、IDispatchインターフェイスを持たせたものを作らないといけないらしいYO
VCかVBで普通にActiveXDLLを作れば問題無いYO


http://www.zdnet.co.jp/help/howto/win/win2000/0007complus_vb/chap08/28.html
>>823
「ShowWindowで消したり表示したりしてるんですが」って言ってるんだから、
最小化とか関係ないのでは?
826デフォルトの名無しさん:02/02/09 04:27
>>821
APIのそのものすばり、IsWindowVisible

827デフォルトの名無しさん:02/02/09 04:56
>>819
VBA にも MkDir が、あるはずだけど。
828VB大好き教えて:02/02/09 08:11
>>828
結構まともに進行しているスレでそういったジョークは寒いな
最近はやってるなぁ。
いっつも思うんだが、「騙されて見に行く」んじゃなくて、
「本当かどうか確かめに行く」だけなんだから、
騙されてるわけじゃねえよって感じだ。
831名無しさん:02/02/09 14:45
反応してる時点でどうかと
見られなかった。>282
833Delフサギコ:02/02/09 16:19

   ∧,,∧      / ̄
  ミ*゚∀゚彡  <  >>824さん
  ミ つ且~~   \_ありがとうございます。
〜ミ,,,,,, ,,ミ  URLまでわざわざ。サンクスコ

来週頭にでも、会社にいって試してみます。
VBScriptでは機能が足りないので
VBでIISアプリしようと思っていましたが
どうも、ディストリビューションが難しくて
使いづらいので、VBScriptでやってみようかと
思うてるです。
834821:02/02/09 18:41
>>826
思い通りに動きました。
どもありがとうございました。
835デフォルトの名無しさん:02/02/09 19:23
どうやったらVBマスターできますか?
836ナナシサソ:02/02/09 19:29
プログラム始めようと思うのですが、
VisualBasicでいいのか迷っています。
ネットワーク関連の操作等はVBでいいのでしょうか?
お願いします。
837M ◆6ucuH7Ng :02/02/09 19:38
すいませんちょっと教えてください。
ただ今VBでチャットの様なプログラムを作っているのですが、Winsock.ocx
を使ってリモートに接続し、リモート側をwinsock.closeで切断しても、ソケットがすぐに破棄されず、
TIME_WAITで残ってしまいます。このため、切断してすぐに同じポートに接続しようとするとソケットエ
ラーではじかれてしまいます。これは仕様なんでしょうか?
前もネットワーク〜の方で説明したが、TIME_WAITに限らず、
ソケット扱うなら、一通りよんどけ。
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.7

>切断してすぐに同じポートに接続しようとするとソケットエラーでは
クライアントのソケットをポート指定で作っていないかぎり、こんな
エラーは起こらないはずだが。
>836マルチやめれ
840M ◆6ucuH7Ng :02/02/09 20:49
>>838
>クライアントのソケットをポート指定で作っていないかぎり、こんな
>エラーは起こらないはずだが。

どうやらこれのせいっぽいです。P2Pプログラムを作っているのですが、
自分がサーバーからクライアントに変わる時にlocalportを0にするのを
忘れてました。(汗;)
841デフォルトの名無しさん:02/02/10 02:35
ageるぞゴルァ
842デフォルトの名無しさん:02/02/10 03:00
.NET Frameworkってどこで手に入れるんですか?
パッケージで売っているの見たことがないんですけど、
雑誌とかでは大々的に取り上げてますよね?
どこで買えばいいのでしょうか?
843デフォルトの名無しさん:02/02/10 03:04
>.NET Frameworkってどこで手に入れるんですか?
MSサイトで無料でダウンロードできるよ。でかいけど。
製品版の日本語版はまだ出てません。
雑誌等で取り上げてたのは、Beta版
844デフォルトの名無しさん:02/02/10 03:32
下のようなコードで、TEXT1に入力したテキストを、Enterキーを
押下した際にTEXT2にそのまま貼り付けるようにしています。この
時、TEXT1の内容は ”” でクリアすることにしているんですが、
なぜか最上段にカーソルが来ません(必ず2段目に来ます)。
クリアの際に、常に最上段にカーソルが来るようにするためには、
どうすればいいのでしょうか。よろしくご指導ください。よろしくお願い
します。


Private Sub Text1_KeyPress(KeyAscii As Integer)

If KeyAscii = vbKeyReturn Then

Text2.Text = Text2.Text + Text1.Text
Text1.Text = ""

End If

End Sub

845デフォルトの名無しさん:02/02/10 03:42
ユーザフォームを表示した時、エクセルシートを操作出来ませんが、
モードレスは、エクセル97では、指定出来ないのでしょうか?
846デフォルトの名無しさん:02/02/10 03:55
>>843
そうなんですか、ありがとうございました。
847デフォルトの名無しさん:02/02/10 04:03
>>844
Text1.Text = ""
の直後に
KeyAscii = 0
を入れるべし。

今の状態だとText1を空にした後、Enterキーの入力がText1に入るので、
改行された状態になる。
848844:02/02/10 13:09
>>847

レスありがとうございます! 多謝です。さっそく試してみましたが、見事
うまくいきました。

助かりました。ありがとうございました m(_ _)m
849ぱるぷんて:02/02/11 23:02
レベルの低い事聞いて申し訳ないのですが,フォームの右端にきたら、左方向へ移動。
フォームの左端にきたら右方向へ移動しなさいという問題なのですが,
Dim ax As Integer

Private Sub Form_Load()
ax = 100
End Sub

Private Sub Timer1_Timer()
Image1.Left = Image1.Left + ax
If Image1.Left >= Form1.ScaleWidth - Image1.Width Or Image1.Left <=0 Then
ax = -ax
End If
End Sub
では、うまくいくのですが、

Private Sub Timer1_Timer()
dim ax as integer
ax = 100
Image1.Left = Image1.Left + ax
If Image1.Left >= Form1.ScaleWidth - Image1.Width Or Image1.Left < 0 Then
ax = -ax
End If
End Sub
だとうまくいきません。これはなぜですか?タイマーイベントだと宣言はgeneral declarationsでしなければならい
とか、この場合axなどの初期値はform loadに書かなければならないという決まりがあるのでしょうか?

850 :02/02/11 23:06
>>849
あのさ、axを毎回100で初期化しちゃだめでしょ? そゆこと。
851デフォルトの名無しさん:02/02/11 23:07
>>849
タイマーイベントが呼び出されるたびにaxに100が代入されてるので
ax=-axというのが意味なしおちゃんになります。
852ヤン:02/02/11 23:26
>>850さん、851さんすみません、ありがとうございます。
さらにしつもんなのですが、axの宣言はgeneral declarationsでないといけないのですか?
form loadやtimerに宣言するとなぜ駄目なのですか?
なんどもレベルの低い質問ばかりで申し訳ありません.
853デフォルトの名無しさん:02/02/11 23:35
>>852
Form_Load で宣言すると、Timerで使えない。逆もしかり。
が、冒頭=外で宣言すると、どのプロシージャからも使える。
854デフォルトの名無しさん:02/02/11 23:44
VBでウイ○スを作ったのですが、自分のマシンでテスト実行してみたら
感染しました!どうやったら取り除けますかっっ!
855デフォルトの名無しさん:02/02/11 23:56
>854
駆除ソフトをVBで作れ!
856デフォルトの名無しさん:02/02/12 00:02
>>855
駆除ソフトの作り方がわかりません。
ウイルスがなんか異常な動きを見せていますっっ!!!
857デフォルトの名無しさん:02/02/12 00:08
>856
「VB用のDLLを削除しろ!」と言わせたいわけ?(笑)

858デフォルトの名無しさん:02/02/12 00:15
いま削除しました。ふぅ〜っウイルス作っても自機で試すなって
ことですね。フムフム
あ、>>857氏ありがとうございました。
みなさん以後お気をつけくだs
859反省:02/02/12 00:28
オチが予想できたわりには、ツッコミが平凡だった。
860名無しさんです:02/02/12 01:01
>>859
いや、君はかまってあげただけやさしいヨ
なんてハートフルなスレなんだ…。
目頭が熱くなってコーディング出来ないヨ
862デフォルトの名無しさん:02/02/12 09:31
テキストボックスを貼り付けたユーザコントロールを、コントロール配列にしています。
そのテキストボックスに行数・桁数での制限を設けたいのですがうまくいきません。
・1行の文字数(桁数)を超えた行には自動で改行を入れて次の行へ
・半角は1バイト・全角は2バイトとする
・折り返す行数・桁数は任意に指定できる
・行数の制限を超えた場合は制限を越えたテキストを引数に入れたイベントを出す(次のテキストボックスにそれを入れる)

ここで一番問題なのは、半角は1バイト・全角は2バイトとして計算したいことです。
内部的にUnicodeなのでEM_LINEINDEXやEM_LINEFROMCHARがうまいように値を返しません。
InStr(0,Text1.text,vbcrlf,vbTextCompare)とかやれば改行の数=行数はわかるのですが・・・
863デフォルトの名無しさん:02/02/12 09:34
みなさん、初めまして

PictureBoxに APIのCreateFont,CreateFontIndirectなどを使用して
フォントを出力(表示)させているのですが、
その際に、背景色を透過にできないでしょうか?

よろしくお願いします m(__)m ペコリ
Crystal Reportsについて教えて下さい。

詳細行の繰り返しで50行出力しているのですが、
10行毎に罫線の太さを変えたいです。
データには連番を持っているのですが、
どのようにやったらよいのでしょうか?

どなたか教えて下さい。
865超初心者:02/02/12 11:37
ラベルとラベルのキャプションの間隔が狭くて見苦しいのですが。
あれ、どうにかならないのでしょうか?
しょうもない質問ですみません。
866デフォルトの名無しさん:02/02/12 12:25
>>862
>1行の文字数(桁数)を超えた行には自動で改行を入れて次の行へ
フォントを固定幅にして、テキストボックスのサイズを桁数に合わせ、
物理改行させてしまう案はどう?

>折り返す行数・桁数は任意に指定できる
スクロールバーさえ付けなければ楽なんだけど。

>半角は1バイト・全角は2バイトとして計算したい
定番だけど   LenB(StrConv(strBuf, vbFromUnicode))
これから改行コードのバイト数 Len(strBuf) - Len(Replace(strBuf, vbCrLf, ""))
を引き算するとか。これを2で割って、1を足せば論理行数になる。
それに桁数を越える行の数を足せば、物理行数になる。

#半角2バイト文字は、入力時に拒否または自動変換するのかな。
867デフォルトの名無しさん:02/02/12 12:26
>>863
もしFontTransparentな設定とかが出来ないなら、シコシコやるしかない。
不可視の作業用PictureBoxにフォントを描いて、GetPixel→PutPixelする。

表示範囲が大きい時はマスク合成するほうが高速。作業用PictureBoxに白地に黒で描き
vbSrcAndでPaintPictureした後、黒地に希望色で描きvbSrcInvertでPaintPicture。
もちろん、BitBltでもオッケー。
868デフォルトの名無しさん:02/02/12 12:28
>>865
前にスペースを入れたら?
または、中央寄せにするとか。
>>863
SetBkModeでTRANSPARENT、かな。
870865:02/02/12 13:24
>868
それくらいしかないんでしょうか。
垂直の配置もせめて上、中、下と変えられればいいんですが...。

とりあえず、下だけ空いてるよりは上も下も空いてない方がマシなんで、
その方向で対処します。
お返事ありがとうございました。
871デフォルトの名無しさん:02/02/12 13:59
FTPソフトを作っているのですが、
接続した時に、サーバー上のファイルの更新日時を表示したいのですが、
全ての時間が1980-01-01で表示されてしまいます。
何が原因なのでしょうか?


' リモートファイルの日付を格納
FileTimeToSystemTime FileInfo.ftLastWriteTime, SysTime

RemoteFile.FileDate = CDate(SysTime.wYear & "/" & SysTime.wMonth & "/" &
SysTime.wDay & " " & _
SysTime.wHour & ":" & SysTime.wMinute & ":" &
SysTime.wSecond)



あと、漢字コードを取得時に変更したいのですが、
変更するための方法を教えてください。

872ももまん:02/02/12 17:04
VBAで、ダイアログボックスを表示して、【名前を付けて保存】する命令があるんでしょうか?
お願いしますっ!!! 誰か答えてぇっ!! m(^^;)m
>872 コモンダイアログコントロールを使う。
874ももまん:02/02/12 17:30
返事ありがとうございます。。。が、もう少し詳しく教えてくださいませんか?
875デフォルトの名無しさん:02/02/12 18:53
DBのデータを固定長のTEXTファイルに書き出したいのですが簡単な方法ってありますか?

    AA   bbbbbb  ccccd 123456
   AAAA   bbbb  c 1234567
876875:02/02/12 18:55
↑例 がずれました気にしないで下さい
>875
Print # を使う(詳細はヘルプ見て)。
>875
DB自体に固定長ファイルへの出力機能が備わっているケースも多々あり
880デフォルトの名無しさん:02/02/12 21:51
>>870
ラベルを2つ使う。
枠だけのと枠なし背景透過のと2つ。
881デフォルトの名無しさん:02/02/12 22:21
PHPで作ったWEBサイトをVBで呼び出したいのですが、
どうしたらいいのでしょうか。
ていうか、VBのボタンコントロールをクリックしたら、
IEが立ち上がって特定のサイトが開くだけでいいのですが・・。
882デフォルトの名無しさん:02/02/12 22:40
>>881
shell "IEのフルパス" & " " & "開きたいURL"
>>881
Googleで「VB IE 起動」
http://www.google.co.jp/search?hl=ja&q=VB+IE+%8BN%93%AE&btnG=Google+%8C%9F%8D%F5&lr=

上から3番目か・・・
>587>883 君さりげなくいい人(w
885862:02/02/12 23:18
MultiLine=TrueのテキストボックスText1を置いて
Private Sub Text1_Change()
Debug.Print (LenB(StrConv(Text1.Text, vbFromUnicode)) - _
(Len(Text1.Text) - Len(Replace(Text1.Text, vbCrLf, ""))))
End Sub
と記述したのですがこれで得られるのは改行を抜いたANSI換算での文字数ですよね?

ちなみにlstrlenってAPI使えば全角2バイト、半角1バイトでの文字数を返せるのがわかりま
した。

>スクロールバーさえ付けなければ楽なんだけど。
横スクロールバーは付けなくていいので見かけ上折り返すことはできるんですよ。
ただ、物理改行ができないので・・・

>フォントを固定幅にして、テキストボックスのサイズを桁数に合わせ、物理改行させてし
まう案はどう?
これですが、テキストボックスのサイズを桁数に合わせて物理改行するやり方がよく分かり
ません。
フォントを固定幅にするのはOKです。

本当に申し訳ありませんがもう少しヒントをお願いします・・・

>865
Printを使ってテキストを自前で描画するラベルコントロールもどきをユーザコントロールで
作ってみるのはどうでしょう。
UserControl.CurrentYを外部から設定可能できるようにして。
886デフォルトの名無しさん:02/02/13 00:00
>>870
3行分の高さにして、先頭にvbCrを付けるのは簡単に出来る。
さらに凝って微調整したい人はラベルonラベル、PictureBoxを使う。

>>871
いったんLocalTimeに変換してから、SystemTimeに変換する。
漢字コードの変換は、nkf32.dllを使うのが超定番。
887デフォルトの名無しさん:02/02/13 00:04
>>885
>改行を抜いたANSI換算での文字数ですよね?
文字数じゃなくて、ずばりバイト数ですよ。
改行を引かなければ、lstrlenと同じになるはず。

>ただ、物理改行ができないので・・・
見かけ上の折り返しを物理行と言います。
逆に使ってる人もけっこういるらしい
http://www.ht.sakura.ne.jp/~delmonta/emacs/16.txt
888881:02/02/13 00:19
>>882-883
889デフォルトの名無しさん:02/02/13 00:28
Windows98なんですけど
スタンバイモードに一度入ってから復帰すると
起動中だったVBのアプリでBitBltなどの描画が著しくスピード落ちるんですけど
これは、どうにかならないかしら?
画面のプロパティでスクリーンの解像度変更したら元に戻ること知ったので
ChangeDisplaySettingsExで実際には解像度変更しないでリフレッシュしたら
うまくいったんだけど
なんか納得しない
ビデオのドライバ固有の問題かしら?
890デフォルトの名無しさん:02/02/13 00:30
>ビデオのドライバ固有の問題かしら?
とか言いながら、ビデオカードが何だか言ってないじゃん。
891862:02/02/13 00:33
>>887
あ、ほんとですね(苦笑)
よく分かっていませんでした(^^;

> 見かけ上の折り返しを物理行と言います。
> 逆に使ってる人もけっこういるらしい
これも逆に使ってました(^^;
メモリ上の物理的な配置に由来するから「物理」行なんですね・・・

inStr関数でvbcrlfの位置を検索して、見かけ上の1行の取得はなんとかできました。
ただ、それの途中で文字を区切る処理がうまくいかないんです。
たとえば
aaaあ
を(半角換算で)4桁で区切るとします。4バイトとは言っても実用上
aaa

となって欲しいのですが(こういう処理なんて言うんでしたっけ?)
バイト配列にテキストを放り込んでMidB関数で分けちゃうと、「あ」という2バイトの文字を強引に分割してしまうためにaaaの後の文字が文字化けします。
これを回避するにはどうすれば良いのでしょうか・・・
本当に何も分かっていなくて申し訳ありません。
892デフォルトの名無しさん:02/02/13 00:47
MSProjectでVBA組んでいるのですが・・・
「固有IDが「n」(注:IDではない)のタスクを選択する」というのを
実現させるコード、わからないでしょうか?
(フィルタ使わないで。。。)
#MSProjectでVBAなんて人いないかな・・・
893デフォルトの名無しさん:02/02/13 00:50
チャットソフトを作っています。そこで、2つ分からない点について質問
させてください m(_ _)m

1)MSNメッセンジャーのように、メッセージを追加するたびに、最下段
 を表示するにはどうしたらいいのでしょうか。

2)ユーザーごとに、メッセージの色分けをするにはどうしたらいいの
 でしょうか。リッチテキストボックスを使えばいいのではと思っている
 のですが、.selcolorでもうまくいきません・・・・・。また、HTMLでやれ
 ばできてしまうと思うんですが、こちらは一つのセリフを追加するた
 びに全部を読み込みなおさなければならないので、今ひとつスマー
 トさに欠けるように思います。

以上、よろしくお願いします。
894デフォルトの名無しさん:02/02/13 00:55
特定のフォントのある文字の幅を取得する方法はないですか?
たとえば、今私が書いたこの文章は多くの人がIEを使って、
MS Pゴシックの12ポイントで見てると思いますが、
この環境で「あ」という文字は11ドットで、「,」だと3ドットで、「 」(半角スペース)だと5ドットですよね。
こういうのを取得する方法が知りたいです。
ラベルコントロールのautosizeをtrueにして調べたいフォントに設定してcaptionに調べたい文字、
そしてwidthプロパティ見れば取得はできるんですが、
なんだかとってもカッチョわるいんで、コードだけで取得したいです。
895デフォルトの名無しさん:02/02/13 01:00
すいません。
サンプルをコピーしただけなのですが、
上手く動きません。
よろしくお願いします。
http://www.geocities.co.jp/SiliconValley-Cupertino/4003/
>>893
1)は
txtLog.SelStart = Len(txtLog.Text)
txtLog.SelLength = 0
txtLog.SelText = "追加したい文字" & vbCrLf

ってな感じでいけると思う。
ただ、これだといつかオーバーフローするので、
一定文字数になったら昔のは破棄するようにしないとだめ。
If Len(txtLog.Text) > 10000 Then txtLog.Text = Right(txtLog.Text, 9000)
こんな感じかな。
897デフォルトの名無しさん:02/02/13 01:13
>>891
指定バイト位置を見て、シフトJISの第1バイトだったら、改行を挿入。

>>893
2はPictureBoxでPrint使えば? 色変えられるから。
1はメッセンジャー使ってないので、意味がわからない。

>>894
TextWidthプロパティ
898デフォルトの名無しさん:02/02/13 01:13
FormやPictureBoxのTextWidth、TextHeightメソッドでわかりますよ。
899897:02/02/13 01:18
あ、メソッドだったのね。
ふつー、GetTextExtentPoint32 APIつかわないかね?
901898:02/02/13 01:54
>>900
VB的には別にふつーってこともない。

このAPIも挙げようかと思ったけど、
GetとExtentの部分しか思い出せずに検索したけど関数名がわからんかったよ(恥
902894:02/02/13 02:23
>>897-901
どもありがとうございます。
思い通りに動きました。
感謝。
903893:02/02/13 02:47
>>896さん、>>897さんレスありがとうございました!
さっそく試してみたいと思います。勉強になりました。
多謝m(_ _)m
904名無しさんです:02/02/13 03:47
らるち〜のような、デスクトップやマイドキュメントのアイコンを
クリックしたら、DirListBoxが自動でそのパスに移動する、
ってのはどうやってやってるのでしょう?
905デフォルトの名無しさん:02/02/13 04:13
>>889
>>890
だって〜んドライバまでいくと
VBではどうしようもないでしょ〜
RIVA128ZX 8MBね〜古ッ
開発環境はこれでいいのだヽ(^。^)丿
>>904
Pathプロパティにデスクトップのパスとか突っ込んでるだけでしょ。
907デフォルトの名無しさん:02/02/13 05:54
こんにちわ。
もしよろしければ教えて頂きたいことがあります。
MoveToEx〜LiniToまたはMoveToEx〜PolylineToで描いた一本の直線
をキーボードのボタンを押す事で、右回転、左回転させたいと思っています。
(時計の針みたいに)
簡単に作れるようでしたら、迷惑でなければ、プログラムの書き方を
教えて頂きたいと思います。お願いします。
908lookman ◆xLhiVh/Y :02/02/13 06:00
申し訳ありません
>>895の発言は別スレで公開した私のソフトをはなっから疑ってかかった方の
発言ですので無視して下さい
909lookman ◆xLhiVh/Y :02/02/13 06:40
>>908の続き
別スレというのは↓です
http://pc.2ch.net/test/read.cgi/tech/1013527404/l50
910デフォルトの名無しさん:02/02/13 09:01
863です。

>>867さん >>869さん
早速、試してみます、ありがとうございました。
911デフォルトの名無しさん:02/02/13 11:09
VB6を使用しています。
PCからRS232C経由で外部の機器へキャラクタコードを送信したいのですが、
特定のコードで送信データが NULL となってしまい、思ったように送信できません。
例えば
Mscomm1.Output=chr(244)
が送信できません。

244のほかに、129〜159 と 224〜252 で NULL になってしますようですが、
回避はできるのでしょうか?
912デフォルトの名無しさん:02/02/13 11:17
893さんに便乗して質問してしまいます。

リッチテキストでURL(らしき文字列)を認識して自動的に
下線を付し、リンクとしての機能を持たせるのはコーディング
によるものでしょうか?
それともそういうコントロールがあるのでしょうか?
コーディングしたいのですがちとやっかいそうですので質問してみました。

回答よろしくおながいします
913904:02/02/13 12:08
>>906
すいません、うまく行かない原因がわかりました。指定するドライブ
が大文字だとダメみたいです。APIで特殊フォルダのパスを取得
したときの返り値が「C:\なんたら」だったのを小文字に変換したら
行けました。
914デフォルトの名無しさん:02/02/13 13:21
オフィスシリーズでVBプログラミングが出来るって聞いたんですが本当ですか?
>914
VBAの事を指しているのなら本当だ。
>>893
1)に関しては、>>896さんのでok。
補足すると、.SelStartはテキストより大きい値を設定するとテキスト末尾に
設定され、また.SelStartを設定したタイミングで.SelLengthは0になるので、

txtLog.SelStart = 65535
txtLog.SelText = "追加したい文字" & vbCrLf

こんなんでokかと。

オーバーフロー予防には、
If txtLog.SelStart > 30000 Then
  txtLog.SelStart = 0
  txtLog.SelLength = 10000
  txtLog.SelText = ""
  txtLog.SelStart = 65535
End If
とかいう手もある。(Rightで削った方がいいかもしれないが。)

2)のRichTextBoxに関しては、コントロールのバグっぽい挙動に悩まされること
うけあい。長時間稼働させてアプリが落ちたら、RichTextBox周りを疑ってみる
と良いかも。

  RichTextBox1.SelColor = &hFFCC00&
  RichTextBox1.SelText = "Hoge"

とりあえず、こんなふうにすると色がつくはず。

ただ、私の経験では、これを繰り返すといずれアプリが落ちる。
RichTextのコード(\f0\fs20\'90\'c0とかいうやつ)にゴリゴリ変換して、
.SelRTFにつっこんで解決したけど、Win2kと9xとの非互換とかあって困ったよ。
917とも:02/02/13 17:21
誰か教えてください!!
VB6.0でMediaPlayerをコンポートして、自作ゲームの効果音を再生してましたが、
MediaPlayer自体をバージョンアップして、6.4から→7.1に変えたら、vbpを開こうと
したら、「不正な処理をおこなったため」と出てきて、vbpが閉じられてしまいます!
お願いです!誰か教えてください!!
vbpを直接エディタで開いてWMPコンポーネントのぶぶん消しちゃうとか。

ってか、ゲームの効果音をWMPコンポーネントで再生しようとしてる事自体ちょっと変だよ。
919教えて君LV1:02/02/13 19:01
N88BASICでいうところの
「GET@」と「PUT@」はピクチャボックスであれこれやるのですか?
教えて下さい
920デフォルトの名無しさん:02/02/13 19:03
N88>>>>>>>>>>VB>HTML
921教えて君LV1:02/02/13 19:11
>>920

え?どういうことでしょうか?
922デフォルトの名無しさん:02/02/13 19:22
>>911
>244のほかに、129〜159 と 224〜252 で NULL になってしますようですが、
バイト型で送ればOK。
日本語版VB5/6での使用が保証されてるASCIIコードは、32〜126。(ヘルプ参照)

>>912
よく見る、リッチテキスト中のURLリンクはコーディングによるものです。

>>914
VBとVBAは言語的にはほとんど同じ。
ただし、VBAはオフィスのどれかと一緒でないと動かせない。

>>919
PaintPicture
923教えて君LV2:02/02/13 19:32
PaintPictureというのですか?
どのように使うのでしょうか?お願いします
912です
>>922さん
ありがとうございました!
ヤパーリそうですよねぇ・・・<コーディング
結構めんどくさそうですが。。。
925デフォルトの名無しさん:02/02/13 19:51
うそこけ >>922

>>924 www.vbvbvb.com で探すと、ハイパーリンクのやり方が出てるよ。
926デフォルトの名無しさん:02/02/13 21:49
MSGBOXの背景の色や文字の大きさって変更できないんですかね?
自作でMSGBOXをつけるしかないんですかね?
927デフォルトの名無しさん:02/02/13 21:59
>>926
あきらめてください。
ていうかそんな気持ち悪いインターフェース勘弁してください。
>>926
俺のラッキーカラーは青だ。だからコンパネで青にしてる
あんたの趣味で勝手に変えんな。

それに世の中、色覚障害者もいるんだぞ。
曲がりなりにもWindowsはユーザー補助で障害者に対応しているんだぞ。
それを台無しにするきか。
930とも:02/02/13 22:16
>>918
遅れてすみません。なにぶん、初心者なものでもう少し詳しく教えていただけませんか?
931デフォルトの名無しさん:02/02/13 22:29
>>907
時計のようにだったら、円の公式を角度を媒介変数として表した以下の式が基本。
x = r * cos(t)
y = r * sin(t)

回転の公式とかも高校の教科書で見るとよいかも。
932デフォルトの名無しさん:02/02/13 23:09
>>923
Picture2.PaintPicture Picture1.Image, x1, y1, w1, h1, x2, y2, w2, h2

>>925
0505 リッチテキストボックスにハイパーリンク機能を実装する
APIのSetWindowLongを使うか。
自分で書くより面倒かも(笑)。
>>930
ソースファイルの中に拡張子がvdpとfrmというファイルがあるだろ?
それをメモ帳とかで開いてみな、その中に「Object=」の行があるはずだ。
その中からWMPの行を削除しちまいな。
WMP以外のOCXを使ってたら一つじゃないかもしれないけど
どれがWMPのかぐらいは調べられるよな?
で、削除したらVBで開くとエラーになるけど気にするな。
削除したコントロールはPictureBoxに化けてるから、それを削除して
再度コンポーネントを追加してコントロールを再配置しな。

もう一つ教えてやろう。
>なにぶん、初心者なものでもう少し詳しく教えていただけませんか?
なんて文は、嫌われることはあっても歓迎されることはない。2chに限らずな。
あと文末の「!」もバカまるだしにしか見えない。ネタじゃないならやめとけ。
934933じゃないが:02/02/13 23:29
933に補足。
言うまでもないとは思うが念のため。
vbpやfrmは編集前にバックアップとっとけよ。
そろそろ新スレの予感…
936デフォルトの名無しさん:02/02/14 17:45
VB6(comctl32.ocx)で、ToolBarの幅を実行時に動的に変えるにはどうしたらいいのでしょうか?

VB5までは素直に「ToolBar.width」に幅を入れてやれば変わりましたが、VB6ではそれではダメな模様。
ButtomをPlaceHolderにしてWidthを指定してやったがそれでも×。何か情報をお持ちの方がいらっしゃればアドバイスをお願いします。
937デフォルトの名無しさん:02/02/14 19:45
フレーム内に入れたテキストボックスをコピーして、
オブジェクト配列をたくさん作りたいのですが、
ペーストすると、フレームの外に貼り付けられちゃって鬱です。
フレーム内にペースト出来ないもんですか?
>937
フレームをクリックして、選択状態になっていることを確認してからペースト。
>>937
テキストボックスをコピーした直後はFormにフォーカス移ってるから
フレーム選択して張り付けしるっ!
940937:02/02/14 21:18
僕が天然でした。
941デフォルトの名無しさん:02/02/14 21:40
>>931
ありがとうございます。
高校の教科書ですか。何だか難しそう。
942デフォルトの名無しさん:02/02/14 23:12
>937
テキストでfrm開いて、Frameクラスの中に入れたれ
943デフォルトの名無しさん:02/02/14 23:59
Randomize ?
この?の部分が同じならどんなパソコンでも毎回発生する乱数は変わらないのですか?

あとテキストボックスで
ブブブビブ
毛毛毛毛毛
と複数行に出力されているとき
ブブブビブをA(0)に、毛毛毛毛毛をA(1)にと入れるにはどうすればいいでしょうか。

944デフォルトの名無しさん:02/02/15 00:07
>943
同じになるかどうかやってみそ!

下のは、
A = Split(Text1.Text, vbCrLf)
945943:02/02/15 00:26
>>944
Randomizeは一応二つのパソコンで調べたら結果が同じでした。
「N88互換BASIC for Windows95」でも同じ結果だったので
恐らくどれでも同じ…なのかな?

>A = Split(Text1.Text, vbCrLf)
おぉ、これは凄いです!
ありがとうございます。まじでビビリました。
946傍観者:02/02/15 00:28
引退しました。
947デフォルトの名無しさん:02/02/15 00:37
>>945
Seedが同じなら、同じ乱数を出すというのがMS乱数の仕様。
同じ乱数を再現する必要があるケースも世の中にはあるから。
で、引数無しの場合は、タイマーからSeedを拾ってくるのね。
これはN88-BASICより進歩してる。
948943:02/02/15 00:48
>>947
>同じ乱数を再現する必要があるケースも世の中にはあるから。
おぉ、今の状態はまさしくそれです。
ありがとうございました。安心しました。
949デフォルトの名無しさん:02/02/15 01:55
JPGファイルを読み込んで、その画像を任意の大きさ(縦横の比率は同じ)に変更できて、JPG保存できるツールをつくりたいのですが、簡単ですか?
VBはほとんどやったことがありません。
初心者でもちょっと勉強すればつくれそうですか?
950デフォルトの名無しさん:02/02/15 02:32
>949
JPG保存は簡単にやろうと思ったら、外部OCXやDLLを使わないとできません。
ま、自力保存するコードを実験的に書いた人もいるが。

他はまぁ簡単だ。
君にとって簡単かどうかは俺にはわからんが。
http://www.vector.co.jp/soft/win95/prog/se093621.html
これを使わせてもらおう。
952デフォルトの名無しさん:02/02/15 03:36
Intelのライブラリもメジャーだ。
953デフォルトの名無しさん:02/02/15 13:25
クラスモジュールの使用方法について参考になるもの
何か教えてください!
954デフォルトの名無しさん:02/02/15 14:02
文字の検索で変数aaaからダブルクオーテーションを検索したいのですが
instr(,aaa,""")じゃだめなようですのでだれか助けてください・・・。
>954
うまくいくまで " の数を増やしてみれ(乱暴)
956デフォルトの名無しさん:02/02/15 15:47
マイドキュメントやデスクトップのフルパスを取ってくる関数ってありますか?
>956 SHGetSpecialFolderLocation API
958956:02/02/15 17:07
>>957
サンクス! サンプル発見できました
959デフォルトの名無しさん:02/02/15 17:22
VB5を使っています。
VBからアウトラインフォントで印刷するにはどうすればいいのでしょうか?
960デフォルトの名無しさん:02/02/15 18:37
>>954
instr(aaa , """ ) じゃないの?
9612重引用符:02/02/15 18:40
>>960
dc = """
a = "ab" & dc "def"
i = instr( a ,dc )
debug.print i
9622重引用符:02/02/15 18:41
>>961
あ、間違い。

dc = """
a = "ab" & dc & "def"
i = instr( a ,dc )
debug.print i
963 ◆tmkzRAXY :02/02/15 18:46
>962
InStr(aaa, Chr(34))
これでもいいよね?
964スガ:02/02/15 19:20
XPで印刷するときに、
printer.port = "....."
とかってやると、ウインドウズ98、95なら
ちゃんと出来るのに
XPだとエラー帰ってくるのはナゼだ?
965デフォルトの名無しさん:02/02/15 22:39
>>954
「"あいう""えお"」は「あいう"えお」という中身を意味する。
要は2回重ねるのだよ。
966デフォルトの名無しさん:02/02/15 22:41
数字の0〜9だけテキストボックスに入れたい場合は

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii >= 48 And KeyAscii <= 57 Then
KeyAscii = 0
End If
End Sub

でいいのでしょうか?
967デフォルトの名無しさん:02/02/15 23:04
>>964
V友QA板とマルチポスト。
968傍観者:02/02/15 23:07
>>967
傍観しとけ。
こっちのは投稿がやや手抜きになってるんだから。
969デフォルトの名無しさん:02/02/15 23:18
>>966
そのコードだと、数字の0〜9だけ無視。
っていうか、それくらい何でまずやってみないの?
970デフォルトの名無しさん:02/02/15 23:20
>>968
946の引退宣言は撤回?(笑)

971おせっかいさん:02/02/15 23:27
>>949
デジタル画像を拡大・縮小すれば、画質は確実に落ちるのに
やりたがるヤツが多いなあ。
Photoshopとかで高度な演算をすれば、画質の劣化はマシだけど。
972ランダム名無しさん:02/02/15 23:30
>>953
前スレの900番台に、クラスの参考になるサンプルコードがある。
973デフォルトの名無しさん:02/02/15 23:44
      ♪
  ♪
♪  ∩ ∧_∧   
   ヽ ( ´A`)  なんじゃこりゃあああ!
    ヽ ⊂ ヽ   
     O-、 )〜  
       U
http://www.puchiwara.com/hacking/
      ♪
  ♪
♪  ∩ ∧_∧   
   ヽ ( ゚ー゚)  えろいニャー!
    ヽ ⊂ ヽ   
     O-、 )〜  
       U
974デフォルトの名無しさん:02/02/16 00:25
V友って土日休日のカキコが激減するのね。
趣味グラマとしては、ちとさみしい。
975デフォルトの名無しさん:02/02/16 00:44
はじめまして。
フォームを開いて1秒後に「A」と表示して2秒後に「B]と
表示してABCDE・・・と順に表示したいんですがどうすれ
ばいいんでしょうか?
976デフォルトの名無しさん:02/02/16 00:52
タイマーを使うなら
Private mlngCount As Long
Private Sub Form_Load()
Timer1.Interval=1000
Timer1.Enabled=True
End Sub
Private Sub Timer1_Timer()
mlngCount=mlngCount+1
if mlngCount >= 26 Then Exit Sub
Debug.Print Chr$(64+mlngCount)
End Sub
977デフォルトの名無しさん:02/02/16 00:58
>975
1秒ごとにカウントアップする例がここにある。まずはこれから。
ttp://www18.tok2.com/home/mixtea/vg_2.htm
978デフォルトの名無しさん:02/02/16 01:02
>976
>977ありがとうございます。
見てからちょっと考えます。
979デフォルトの名無しさん:02/02/16 01:03
>>976
フォームに表示するなら、Debug.Print → Print
その場合は、3行目あたりに Form1.AutoRedraw = True が必要。

>>979
フォローども。
下から三行目はExit SubでなくTimer1.Enabled=Falseのがベターでした。スマソ
981デフォルトの名無しさん:02/02/16 01:24
>>980
それも書こうと思ったけど、タイマーは動き続けてもいいかなと。
そのために、Integerじゃなくて、Longにしたのかと(笑)。
982959:02/02/16 01:29
959です。何度もすみません。
解説ページのURLなどでも構いませんのでどなたかご教示
願えませんでしょうか?
印刷してもフォントがつぶれるので困っています。
983975:02/02/16 01:32
みなさまありがとうございます。
書いて頂いたソースを元に(ほとんど完成品ですが)
なんとかやれそうです。
984デフォルトの名無しさん:02/02/16 01:35
>>982
いまどうやってるのか、最低限の再現コードを書かないと、
回答しようがない。
985959:02/02/16 01:41
>>984
すみません。ありがとうございます。

フォームにLineやShape+テキストボックスで簡単な表を書いて、
Form1.PrintForm
で印刷しようとしています。これ以外の印刷方法はよく知りません。
テキストボックスのフォントサイズは8で、印刷するとつぶれてしまい
ました。同じサイズのフォントをWordから印刷すると普通にきれいでした。
それで調べてみてアウトラインフォントとビットマップフォントがあると
いうことまでは分かりましたが、そこからどうすればいいのかが全く
分かりません。
よろしくお願いいたします。
986デフォルトの名無しさん:02/02/16 01:49
>>985
PrintFormメソッドは無理やり拡大してるから、印刷が汚いの。
フォントサイズを上げて、Printerオブジェクトに印刷するといい。
印字品位を最高に設定して。

フォントも、TrueTypeのフォントを選択すればいい。

959の質問だと、API使って、超拡大文字の輪郭線を抽出するんだと思った。
987959:02/02/16 01:57
>>986
Printerオブジェクトというものを知りませんでした。
本当にどうもありがとうございます!
長々とすみませんでした。
988デフォルトの名無しさん:02/02/16 02:36
labelに計算した結果を表示させたいのですが、

答え:○○
となっているのを

答え:
○○

というふうにしたいのです。
labelの途中で改行させることって出来ますか?
989デフォルトの名無しさん:02/02/16 02:41
>>988
Label1.Caption = "答え:" & vbCrLf & "○○"
990デフォルトの名無しさん:02/02/16 02:44
>>989
即レス感謝です。 出来ました!! ありがとうございます。
991デフォルトの名無しさん:02/02/16 03:10
>>988
聞くようなことか?
HELPないんかい
調べんのおっくうかい
992引っ越します:02/02/16 16:29
993デフォルトの名無しさん:02/02/18 14:35
>>991
HELPに載ってるんかい?
994デフォルトの名無しさん:02/02/18 21:23
vbでGIF画像をjpgに変換できるDLLってあります?
できればフリーのがいいです
9958484
『ハッキングのわざが手に取るようにわかるサイト』または
『ハッキングのわざが手に取るようにわかる本』に書かれている内容を
実践・計画をした場合、以下の罪・違反・侵害に問われる可能性アリ。
どうかご注意して頂きたい。
http://www.puchiwara.com/hacking/