VBプログラマ質問スレ(6.0以前) Part42
1 :
デフォルトの名無しさん :
2005/05/24(火) 17:42:09
3といえばVBもエルボーで蹴散らしてしまう三沢さん
4 :
デフォルトの名無しさん :2005/05/25(水) 00:30:17
VBで関数を呼び出すときに、「()」をつける場合とつけない場合がありますよね。 それってどういう風に使い分けたらいいのでしょうか? また同様に、「Call」も付ける時とつけない時がありますよね。 その差についても説明いただけるとありがたいです。 よろしくお願いします。
Dim Result As Long Result = Int(Cdbl("280.90") * Int("1000")) とすると、Resultは 280899 となります。 なぜこうなるか、わかる方いたらお願いします。 結局コードは、 Dim Result As Long Dim R As Double R = Cdbl("280.90") * Int("1000") Result = Int(R); という風にしましたが、気になったので・・・
7 :
デフォルトの名無しさん :2005/05/25(水) 05:11:41
>>5 Cdbl("280.90") * Int("1000")の結果が、Doubleとは違う
何かの型に返還するときに失敗しこんな結果になっているからでは。
不動少数の意味が分かるなら、Cdbl("280.90") * Int("1000")
をいくつかの型で返還するなりして、結果から推測してみては?
Dim Result As Long
Result = Int(Cdbl(Cdbl("280.90") * Int("1000")))
Resultは?
Dim Result As Long
Result = Int(Cdbl(Int(Cdbl("280.90") * Int("1000"))))
Resultは?
etc...
8 :
デフォルトの名無しさん :2005/05/25(水) 09:01:01
VB6.0、SP5、OSはWin2000です。 既出だとは思いますが、お願いします。 T = 1.0 と書くと T = 1# という表示になるのですが、仕様ですか? 中身はちゃんと1.0のままなのでしょうか? 一応、過去ログも見れる分は見たのですが41でちょっと記述がでてただけで求めるものとは違いました。
>>6 >
>>4 > SubとFunction
嘘教えちゃいけません。きちんとMSDN読みましょう。
>>4 関数の戻り値を受け取る・使用する場合は括弧を付けなければいけません。
関数の戻り値を受け取らない場合はCallを付けなければ括弧は付けられません。
SubはCallを付けない限り、括弧を付けられません。
ここからは個人的な使い方で人によって違うと思いますが、
戻り値を受け取る・使用する必要のある関数は括弧を付けます。
それ以外の場合は付けません。
Callは一切使いません。
こんな感じでどうでしょ?
>>8 仕様です。
1.0も1#もVBではdouble型の1として処理されるので、
どちらも意味は同じです。
12 :
8 :2005/05/25(水) 10:27:07
>>4 ByRefの場合、括弧を余計につけるとByVal と同じになるので注意が必要!
Private Sub Command1_Click()
Dim A As Integer
A = 0
Test A '=Call Test(A)
Debug.Print A
A = 0
Test (A) '=Call Test((A))
Debug.Print A
End Sub
Private Sub Test(ByRef x As Integer)
x = 100
End Sub
14 :
デフォルトの名無しさん :2005/05/25(水) 15:34:23
IT業界を30歳過ぎて退職したら、転職先はありませんよ。 おまいらIT奴隷は、死ぬまでパソコンとチュッチュしててください。
俺なんか31歳でVBデビューですよ。
16 :
デフォルトの名無しさん :2005/05/26(木) 23:02:33
学校でゲーム作れという課題を出されたんでルーレットを作ってるんだけど詰ったorz 仕様はコントロール配列のイメージ30個とイメージの上に付いてるように コントロール配列のオプションボタンが30個あってスタートをクリックするとサイコロの イメージがコントロール配列のイメージをランダムに移動して3秒経つと止まる。 それでスタートをクリックする前に予想のサイコロの上にあるオプションを選んでクリック。 止まったときに止まったイメージの上のオプションボタンが選んだオプションボタンだったら点数を追加してメッセージ表示 というゲームにしたいんだけど、止まったサイコロと選んだオプションボタンが同じなら〜っていうIf文が出来ないorz 分かりにくい文章ですまないけど助けてください。
エクセルファイルをMDBファイルのようにDAOやADOで開いて使いたいのですが、やりかたがわかりません。 そもそも、そんなことできるのでしょうか。
20 :
デフォルトの名無しさん :2005/05/27(金) 00:26:46
MHTMLファイルをメールで送信したいのですが、CDO.Messageで出来ると思ったけど、 HTMLファイルはCreateMHTMLBodyを使って簡単だったのに、MHTファイルが出来ないです。 MHTMLファイルを直接指定して送信する方法はどうすれば出来るでしょうか? よろしくお願い致します。
21 :
18 :2005/05/27(金) 01:15:13
>>19 さんサンクスです、丁度知りたかった情報です。
ISAMドライバでの接続の方法が解らなかったので助かりました。
>>16 よくわからん。
イメージ30個とサイコロは同じ?
とりあえず適当に答えてみるが…
スタートを押す直前に選んでいるオプションボタンのインデックスを
変数に保持して、ランダム移動開始。
3秒後に止まっているオプションボタンのインデックスと、スタート
前のインデックスを保持した変数と比較。
これでどう?
23 :
16 :2005/05/27(金) 17:47:26
>>22 レスありがとうございます。
そして分かりにくくてすみません。空のイメージ30個の上をサイコロのイメージがランダムに移動して3秒後に止まる
オプションボタンはスタートを押す前に自分で押しておく。
止まったときの図で説明するとこんな感じです
○ ○ ○←オプションボタン
□ □ □←空のイメージ
○ ○ ●←スタート押す前に選んだオプションボタン
□ □ ■←スタートしてランダムに移動したサイコロのイメージ
↑みたいになった時に点数を追加したり、「おめでとう」などのメッセージを表示させるIf文の条件部分が分からないんですorz
>>23 If optButton(currentSaikoro).Checked Then
>>24 ありがとうございます。月曜に学校で試してみますね。
26 :
デフォルトの名無しさん :2005/05/28(土) 19:05:18
OS:Win2000 VB6.0 コンボボックス(Combo1)一つ付けただけのサンプルで Private Sub Combo1_Click() With Combo1 .Clear .AddItem "111" .AddItem "222" .AddItem "333" .Text = "111" '** これが表示されない End With End Sub Private Sub Form_Load() With Combo1 .AddItem "AAA" .AddItem "BBB" .AddItem "CCC" .Text = "AAA" End With End Sub 仕様ですか?
27 :
デフォルトの名無しさん :2005/05/28(土) 19:12:37
690 名前: Socket774 [sage] 投稿日: 2005/05/28(土) 19:08:15 ID:vB6j/4vy ThePenisには敵わないまでも VisualBasic6の日本語版
>26 本気ですか?
29 :
26 :2005/05/28(土) 21:00:25
>28 済みません。本気です・・・。 当たり前のことなのですか。 .ListIndexは-1でした。
30 :
25 :2005/05/28(土) 21:28:06
>>24 まだ説明不足だったorz
サイコロのイメージってのはImage1だから
>>24 の括弧の中のSaikoroをimage1.Pictureにすればいいでしょうか?
>>26 click()でなく、DropDown()で。
↓
Private Sub Combo1_DropDown()
With Combo1
.Clear
.AddItem "111"
.AddItem "222"
.AddItem "333"
.Text = "111" '** これが表示されない
End With
End Sub
32 :
26 :2005/05/29(日) 09:44:25
>>31 ありがとうございました。
目から鱗です。
APIが返すNULLハンドルはVBでは何と等しくなるんでしょうか?
>>33 Declare 〜 As Long
で宣言していれば、Long の 0。
35 :
33 :2005/05/30(月) 00:33:22
>>34 ありがとうございます。参考にさせてもらいます。
36 :
24 :2005/05/30(月) 10:02:14
>>30 違う。
currentSaikoroはInteger型の変数。
作り方を考えてみれ。
>>36 なるほどそうだったんですか。今日出来なかったから最終手段として糞長いIf文やりましたよ('A`)
If option1(0).value=ture and image2(A).visible=ture then
ElseIf 以下略
OTZ
ture?
39 :
デフォルトの名無しさん :2005/05/31(火) 11:58:33
VB6を使って販売購買のソフト開発してる人いますか? メインとなる販売画面の明細部分で行き詰まってしまいました、実際開発してる 人はどういった手法を使っているのか是非教えてください。
>>39 まず、自分が何を理解できていないか、何が疑問なのか理解すべきでは?
そんな質問誰も答えられんよ。
VBでプログラム作るんですけど、どういう手法で作るんですか?
あなたが聞いてるのは上記質問と同レベル。
41 :
デフォルトの名無しさん :2005/05/31(火) 13:42:03
>>40 失礼しました。説明が全くできていませんでした。
行き詰まっている個所は、商品名・数量・単位・単価・金額を一組とした行の部分で
す。今はフォームに10組配置するだけで、10行の明細しか作れないような状態で
す。
何かもっといい方法があるとは思うのですが、見つけることができません。もし
同じようなソフトを開発されている方がいたら是非アドバイスをお願いします。
>>41 リスト、グリッドなどのコントロールを使う。
但し、スクロール嫌いなお客様で、前頁・次頁のページ切替を意図して
>>41 のUIを求めてる可能性があるので注意。
前項、次項で書き換えればいいだけだろ?
45 :
デフォルトの名無しさん :2005/05/31(火) 16:10:53
Set xmldoc = CreateObject( "Microsoft.XMLDOM" ) xmldoc.async = false fname=InputBox("ファイル名を入力して下さい。","ファイル名") if ( fname <> "") Then rtn = xmldoc.load( fname ) If rtn = True Then MsgBox( "ファイル内は正常です。" ) Else MsgBox( "エラー!" & vbCrLf & _ "行番号 : " & xmldoc.parseError.line & vbCrLf & _ "内容 : " & xmldoc.parseError.reason ) End If End If これをファイル名を入力するのではなく、ドラッグアンドドロップで実行したいのですが、 うまくいきません。 どなたかお願いします。
>>45 どこからどこへなにをドロップしてどううまくいってないのか書けよ
Imageで絵を三つ出してボタンを設置するところまではできてます。 ボタンを押すと三つの絵がランダムに画面上に表示できるようにしたいのですが、できません。 RandomizeとImage.Move等を使うのは分かるのですが、乱数を理解できていない、かなりの初心者です。 教えてください。
嫌です。
49 :
デフォルトの名無しさん :2005/06/01(水) 02:39:56
自分のプログラムから他のプログラムのボタンを操作するのに SendMessageでキャプションを取って目的のボタンを見つけるように したのですが、ボタンの中にキャプションを取得しようとしても 空が帰ってきて取れないものがあります。 必ずキャプションが取れるような方法があるでしょうか? または、キャプション以外にボタンを特定できるような情報が取得する方法が あるでしょうか?よろしくお願いいたします。
IDやらなんやらウインドウクラス名やら
51 :
デフォルトの名無しさん :2005/06/01(水) 08:07:05
どこかに書いてあると、思うのですが・・・ 探せませんでした。 教えてください。 VB6でファイルメーカーを読むサンプルです。 なにとぞ、教えてください。
52 :
デフォルトの名無しさん :2005/06/01(水) 19:21:01
Windows 2000 Professional SP4, WSH(VBScript) 5.6 です。 ExecNotificationQuery を使ってアプリケーションログの監視をしているのですが、 ときどき、TargetInstance.InsertionStrings に値が入っていないらしく for each で「オブジェクトがコレクションではありません。」というエラーになります。 オブジェクトがコレクションかどうか確認する関数はありますか? 以下、該当部分のコード: Set events = GetObject("winmgmts:{impersonationLevel=impersonate,(Backup, Security)}!\\.\root\CIMV2") _ .ExecNotificationQuery("select * from __instancecreationevent where targetinstance isa 'Win32_NTLogEvent' and targetinstance.EventType = 1") do set NTEvent = events.nextevent () for each str in NTEvent.TargetInstance.InsertionStrings wscript.echo "InsertionStrings: " & str next loop
FX = lnX0 - 2 '解こうとする関数FX DF = '関数FXの微分式 X1 = X0 - (FX / DF) 'ニュートン法の基礎式よりX1を計算 DX = Abs((X1 - X0) / X0) 'X1とX0との隔たりを調べる変数DXを計算 N1 = N1 + 1 '繰り返しの回数N1をカウント 'このVBコードの一部を書き換えて√2の近似値を求めるプログラムを作成したいのですが 分からないです。どなたか教えてください
VB6.0 SP6でコンパイルしたexeはVB6.0SP4のランタイム環境で 動作可能でしょうか?
>>57 可能不可能というより、考えたくもない、汚らわしい、おぞましい。
VB6.0 SP4どこかに落ちてないですかねー
俺はService PacKなんて一つも当ててないんだが・・・ いやOSもXPだがSP2も当ててないし、VB6.0もそのまま・・・
61 :
デフォルトの名無しさん :2005/06/02(木) 16:00:19
というか バグとか治ってるからパッチあてれ
いや、
>>57 のおかれてる状況はこうだろ?
昔のVB6のシステムで不具合か仕様変更が発生。
導入先のEXEのインストーラーを作ったのはVB6SP4の頃。
でもって、今かれの手元にある環境はVB6SP6。
そいでもって、客先にVB6SP6版新しいインストーラを作って入れた場合の不具合まで面倒見るほど工数なし。
63 :
57 :2005/06/02(木) 17:26:56
>>62 まさにそのとおりです。
SP4どこかにないですかねー。nyとかにあるかなー。
>>57 なるほど、そういえばそうだな
しかし、手元の探してみたがSP5しかなかった
VS6.0SP4なら誰か必ず持ってると思われるが・・・
こんなこともあろうかと、私はもってるんだが。 入手手段としたら、大昔のVBマガジンとかを探すしかないんじゃないのか? またはMSDNの契約があれば、それの昔のCDを漁るとか。
66 :
57 :2005/06/02(木) 18:03:49
うpしてん
68 :
57 :2005/06/02(木) 18:05:57
( ;´Д`)いやぁぁぁぁぁー!
67は65(私)じゃない。 でもって、100MB以上あるのものでライセンスあるものはアップしません。 何処に住んでるかしらんが、秋葉の書泉とかLaoxなら運よければあるよ。
70 :
57 :2005/06/02(木) 18:19:17
skypeで直送ならどうでしょう?
71 :
デフォルトの名無しさん :2005/06/02(木) 18:39:05
すでに開いてるIEを見つけて指定したURLに飛ばすのは どう書けばいいんでしょうか? Set objIE = CreateObject("InternetExplorer.application") objIE.Navigate "指定したURL" こんな感じで書いてるんですが新しいウインドウを開いてしまうんですよ 起動してるIE見つけて処理する方法を教えてください
72 :
デフォルトの名無しさん :2005/06/02(木) 18:40:12
SP4からSP6にした場合のトラブルを考えるってそりゃ技術者の姿勢としては 正しいけど現実的には杞憂じゃないの? ウダウダやってる時間だって工数に入ってるわけで。 っていうか、各バージョンのSP当たったランタイムのインストーラがベクターにあるよ。 でもVBのランタイム差し替えるには古いのアンインストールする必要があると思ったけど、 これってどうやるんだっけ?
73 :
57 :2005/06/02(木) 18:40:19
ShellExecuteでいいんじゃないですかー?
74 :
デフォルトの名無しさん :2005/06/02(木) 18:41:20
アンインストールする必要があるのはこの場合古いのじゃなくて新しいのだね。
75 :
57 :2005/06/02(木) 18:49:25
>>72 トラブルというか基本的にはランタイムは配布不可能な状態です。
もっとメジャーバージョンアップならいいですが
クライアントの数がかなりあるので数ステップの修正のために
クライアントの環境を変えることは許されないのであります。
>75 そういう話になるとむしろマネジメントの問題だぞ。 ってかその修正するexeのインストーラにSP6を含めりゃいいんじゃね〜の?
クライアントの環境が変えられないっておもっくそ書いてあるが
78 :
デフォルトの名無しさん :2005/06/03(金) 08:18:12
だからさあ、開発環境の方を合わせればいいんでしょ。 VB6クリーンインストールして、ベクターからSP4のランタイム拾ってくれば(ひょっとすると 順番は逆の方がいいかもしれないが)SP4インストールしたのと同じにできるんじゃないの。
79 :
57 :2005/06/03(金) 08:26:00
ランタイムでいいんですか?マジですか? とりあえずSP3が見つかったのでこれでしのぐのはありですか? SP3のexeならSP4でも動きますよね。 SP6のexeをSP4で動かすよりはマシですよね。
馬鹿か
81 :
57 :2005/06/03(金) 11:32:21
静的なクラスモジュールってどうやって作成したらよいでしょう? .NETのSharedみたいなやつです。
VB6ではクラスでは不可では? Moduleでやるしかないんじゃないのかと。
>83 Timerコントロール
86 :
デフォルトの名無しさん :2005/06/05(日) 06:25:54
コマンドライン引数を分割して配列に格納する方法と 名前付き引数を取得する方法を教えてください。 複数のファイルをD&Dしてそれを分ける方法としては Split関数での分割が思いつきますが、パスに半角スペースがある場合に困ります。 引数が全て"で囲われてれば""" """でSplitすることも出来るのですが、 「c:\hoge.txt」と「c:\hoge hoge.txt」という二つのファイルを渡した場合、 Command関数は「c:\hoge.txt "c:\hoge hoge.txt"」という値を返すので " "で分割しても""" """で分割してもうまくいきません。 一応文字列操作で対応させる方法は思いついたのですが、 vbsでwshのArgumentsプロパティを使ったときのように操作出来ないのでしょうか? もう一つ、名前付き引数(コマンドラインスイッチ)なのですが、「-a=hoge」とか「/a:hoge」などの引数を渡した場合、 aスイッチの有無、及びその要素値"hoge"を得るにはどうすれば良いのでしょうか? これもwshのプロパティでは Wscript.Arguments.Named.Exists("a")でaスイッチの有無、 Wscript.Arguments.Named("a")でaスイッチの値である"hoge" Wscript.Arguments.Unnamedで名前無し引数を返せますが、 これをVBでやるにはどうすれば良いのでしょうか? こちらも地道に文字列操作で条件判断させるしかないのですか? 最近VB使い始めたのですが、ExcelVBAやvbsを使っていたので文字列操作含め VBAにあるものは大体わかるのですが、ExcelVBAには起動時引数という概念が無いので 引数の扱いで躓いています。 環境はWindowsXPsp1、Visual Basic6.0sp5です。
>>86 wshでできることをやろうとするなら、VBでwshのオブジェクトを宣言して使えばよいのでは?
88 :
86 :2005/06/05(日) 20:28:22
>>87 具体的にどうやるのですか?
普通に宣言してもArgumentsプロパティに引数が入ってないのですが。
それ以外の機能はwshのオブジェクトを宣言して普通に使えてますけど。
>>88 ゴメン思い付きで書いたからできないかもしれない。
>>86 やったことないけど、API の CommandLineToArgvW
91 :
86 :2005/06/05(日) 21:32:59
Public Function Get_LineText(ByVal lngLine As Long) As String Dim strBuffer As String * 512 Dim Result As Long strBuffer = String$(512, vbNullChar) Result = SendMessage(Form1.RichTextBox.hWnd, EM_GETLINE, lngLine, ByVal strBuffer) Get_LineText = Left$(strBuffer, InStr(strBuffer, vbNullChar) - 1) End Function という指定行取得する関数を作りました はじめはうまく機能していたのですが、 rtfTextをいじって色の変更とかいろいろやってて気づいたら SendMessageの時点でstrBufferに文字列が代入されないようになっていました。 どなたか解決法をご存知でないでしょうか?
93 :
86 :2005/06/06(月) 09:41:57
>>90 CommandLineToArgvWでググってもヒット数が少なく、
名前付き引数を得る方法などは分かりませんでした。
失礼ながら「出来るかもしれない」とか「やったことないけど」とかではなく
実際に出来る方法を具体的に教えてください。
VB使い始めたのが昨日からで、ExcelVBAも基本的なところは覚えたつもりですが
まだ使い始めて1ヶ月ちょっとなので、ヘボいものだとは思いますが、
一応自分なりにやってみた方法を以下に書きます。
Public arg() As String, argUnnamed() As String
Dim sn() As String, sv() As String, sc As Byte
Sub setarg()
If Command = "" Then
ReDim arg(0)
arg(0) = ""
Else
Dim foo As Variant, bar As String, spl As Boolean, i As Integer, j As Byte
foo = Split(Command, " ")
spl = True
i = -1
For j = 0 To UBound(foo)
If spl Then
bar = foo(j)
i = i + 1
Else
bar = bar & " " & foo(j)
End If
If i Mod 10 = 0 Then ReDim Preserve arg(i + 10)
If UBound(Split(foo(j), """")) = 1 Then spl = Not spl
arg(i) = Replace(bar, """", "")
Next j
If i >= 0 Then ReDim Preserve arg(i) i = 0 For j = 0 To UBound(arg) If Left(arg(j), 1) Like "[-/]" Then If sc Mod 10 = 0 Then ReDim Preserve sn(sc + 10), sv(sc + 10) foo = Split(arg(j), "=") If UBound(foo) = 0 Then foo = Split(arg(j), ":") sn(sc) = Mid(foo(0), 2) If UBound(foo) = 1 Then sv(sc) = foo(1) sc = sc + 1 Else If i Mod 10 = 0 Then ReDim Preserve argUnnamed(i + 10) argUnnamed(i) = arg(j) i = i + 1 End If Next j If sc > 0 Then ReDim Preserve sn(sc - 1), sv(sc - 1) End If If i > 0 Then ReDim Preserve argUnnamed(i - 1) Else ReDim argUnnamed(0) argUnnamed(0) = "" End If End Sub
Function argNamed(csn As String) As String If sc = 0 Then Exit Function Dim i As Byte For i = 0 To UBound(sn) If csn = sn(i) Then argNamed = sv(i) Exit Function End If Next i End Function Function argNamedExi(csn As String) As Boolean argNamedExi = False If sc = 0 Then Exit Function Dim i As Byte For i = 0 To UBound(sn) If csn = sn(i) Then argNamedExi = True Exit Function End If Next i End Function
96 :
86 :2005/06/06(月) 09:43:26
これを標準モジュールに書いて、Form_Load時にCall setarg。これで 1) argという配列に全ての引数が格納され、 2) argUnnamedに名前無し引数が入ります。 3) argNamed("a")で名前付き引数の値が返り、 4) argNamedExi("a")で名前付き引数の有無がブール値で返ります。 今のところは動作的には問題ないのですが、今後起動時引数を扱うソフトを作るたびに これを使うのもウザいので、もっと簡単に出来る方法を探してます。 ベテランの方から見れば上記のコードも直すべきところは沢山あるでしょうが、 コードの手直しをお願いしたいのではなく、 上記 1)〜4)の様に「全ての引数を格納した配列」、「名前無し引数を格納した配列、 「名前付き引数の有無と値の内容」を扱える方法、又は VB上でwshのArgumentsプロパティを扱える方法などを教えていただきたい所存です。 どうか宜しく御願いいたします。
Kill ("C:\Documents and Settings\ユーザ名\hogehoge.txt") ユーザ名が A という変数に入っている場合はどう書けばいいのでしょうか?
>>97 Kill ("C:\Documents and Settings\" & A & "\hogehoge.txt")
99 :
97 :2005/06/06(月) 16:14:59
Win2k、VB6SP6で、Imageコントロールの表示方式なんだけど、 画像がコントロールより大きい時は縦横比をそのままでコントロール内に収まるように縮小、 画像がコントロールより小さい場合は等倍表示にしたいんだけど、VBAで使えてた If Image1.Width < Image1.Picture.Width Or Image1.Height < Image1.Picture.Height Then Image1.PictureSizeMode = fmPictureSizeModeZoom Else Image1.PictureSizeMode = fmPictureSizeModeClip End If が使えないんだよね。(上記は実際には* 567 / 15000が入る) 調べてみるとStretchプロパティがPictureSizeModeプロパティに近いんだけど、 PictureSizeMode = fmPictureSizeModeClip → Stretch = False PictureSizeMode = fmPictureSizeModeStretch → Stretch = True の設定は出来ても、fmPictureSizeModeZoomの設定が出来ないみたい。 PictureSizeMode = fmPictureSizeModeZoomと同じ状態を実現する為には Stretch = TrueでImageコントロールのサイズ自体を変えていくしかないのかな? 激しく面倒なのでPictureSizeMode = fmPictureSizeModeZoomと同じような 設定を知ってる方居ましたら教えてください。 PictureSizeMode = fmPictureSizeModeZoomはStretch = Trueの縦横比固定版で 定義としては「縦横比を固定したまま、イメージをコントロールのサイズに拡大または縮小する」 という感じです。
>>100 VB6.0では ImageコントロールのWidthプロパティとHeightプロパティは自動的にPictureのサイズになるよ。
102 :
デフォルトの名無しさん :2005/06/06(月) 18:26:54
VB6.0でクラスプログラミングを勉強したいのですけど、なんかいいHPとか本とかありますか??
104 :
100 :2005/06/06(月) 20:36:57
> VB6.0では ImageコントロールのWidthプロパティとHeightプロパティは自動的にPictureのサイズになるよ。 それが困るんですよ。 コントロールより小さい画像の場合はそれでいいんですけど、 大きい画像の場合ImageコントロールのWidth、HeightがPictureのサイズになるのではなく Pictureのサイズが縦横比固定でImageコントロールのWidth、Heightに収まるように縮小して欲しいわけで。
>>104 それだったら納めたいWidthとHeightの変数持って、
比率計算すりゃ良いだけ。
outlook expressのメール内容をデータベースに登録する というプログラムを作成しています。 mapi コントロールを使えば、受信トレイの内容を取得できるのですが、 送信済みトレイの内容を表示させる方法はないでしょうか? 自分で色々探したところ、ある閉鎖されたホームページに dbxファイルをvbで読むというサンプルがあったらしいのですが、 残念ながら肝心のソースの部分はアーカイブでも読むことが出来ません。 もし、outlook expressの送信済みトレイにアクセスするないし dbxファイルの読む方法をご存知の方がいましたら教えてください。 よろしくお願いします。
107 :
100 :2005/06/06(月) 22:09:21
>>105 それが今やってる方法です。
でもVBAに比べて面倒なので、何か
PictureSizeMode = fmPictureSizeModeZoom
と同等の設定は無いかと思ったのです。
それぞれの設定はこんな感じですが
コントロールサイズ 元画像サイズ 縦横比
PictureSizeMode = 0 無視 等倍 固定
Stretch = False 無視 等倍 固定
PictureSizeMode = 1 合わせる 無視 無視
Stretch = True 合わせる 無視 無視
PictureSizeMode = 3 合わせる 無視 固定
この一番下の設定を計算でやると、
Img.He/Pic.HeとImg.wi/Pic.Wiのどちらが小さいか、
その小さい方が1未満か、の両方を計算させ、
小さい方が1未満ならその比率を、1以上なら1をImg.HeとImg.wiの両方に掛けなくてはならないです。
設定が無いなら仕方ないですが、たとえば5の10乗を出すのに「5^10」を使わず
buf = 5
For i = 2 To 10
buf = buf * 5
Next i
なんてやってたら馬鹿馬鹿しいでしょ。特にVBAではこの例の「5^10」の例に該当する方法があるので
VB6でもForステートメントでの計算の例のような面倒なことをやらずに「5^10」の例のように出す方法があれば
利用したいと思ってここに来ました。
細かい動きができる = 細かく設定しなくちゃいけない
VB は(VBAと比較して)色々できる分、色々自分で書かなくちゃいけない。
>>107 その例えはオカシイ。
>108 ( ゚д゚)ポカーン..........m9(^Д^)プギャー
110 :
デフォルトの名無しさん :2005/06/07(火) 03:06:36
┌────────────────┐ ┌────────────────┐ │Form1 │ │Form1 │ ├────────────────┤ ├────────────────┤ │┏━━━━━━━┳━┓ │ │┏━━━━━━━┳━┓ │ │┃┌─────┐┃▲┃ │→│┃└─────┘┃▲┃ │ │┃│TextBox1 ..│┃■┃ │ │┃┌─────┐┃| .|┃ │ │┃└─────┘┃■┃ │ │┃│TextBox4 ..│┃| .|┃ │ │┃┌─────┐┃■┃ │ │┃└─────┘┃■┃ │ │┃│TextBox2 ..│┃| .|┃ │ │┃┌─────┐┃■┃ │ │┃└─────┘┃| .|┃ │ │┃│TextBox5 ..│┃■┃ │ │┃┌─────┐┃▼┃ │←│┃└─────┘┃▼┃ │ │┗━━━━━━━┻━┛ │ │┗━━━━━━━┻━┛ │ └────────────────┘ └────────────────┘ ┃│TextBox3 ..│┃←この部分は表示しない ┃└─────┘┃ ┃┌─────┐┃ ┃│TextBox4 ..│┃ ┃└─────┘┃ ┗━━━━━━━┛ 上図の太枠の部分のようにコントロールを配置したいのですが、どうしたら良いでしょうか? ▲■はスクロールバーです。TextBox1〜4の部分は任意のコントロールを配置出来て、 スクロールバー付きの小窓で任意の場所を表示出来るようにしたいです。 Formの右の空いてる部分にも他のコントロールを配置します。 実際にTextBoxしか割り当てないなら代わりとなるものもあるのですが、 任意のコントロールを割り当てられるものがわかりません。 MDIとも違うし、スクロールバーの値に対してシコシコと個別にコントロールの位置や表示を変えるのもイヤだし。 どうすればいいのかわかる方、ご教示お願いします。WinXP VB6SP6です。
>>110 適当に作るなら、たとえばピクチャボックスの「中に」ピクチャボックスを作り、
その「中に」テキストボックスを作ってサイズと表示位置を調整してやればできなくもない。
そういうコントロール作っても可能だし。
あ、よく読んでなかった。111は取り消し。
113 :
デフォルトの名無しさん :2005/06/07(火) 07:26:53
リストボックスでキーを押すと、 名前の先頭が押したキーに一致する位置に選択が移ってしまいますが、 コレを無効にするにはどうすれば良いですか? たとえば「abc, def, ghi」という3項目のリストがあって、リストボックスにフォーカスがある時に Dキーを押すとdefに選択が移ってしまうのを防ぎたいのです。 選択が変わってしまってから戻す方法は分かるのですが、 選択が変わらない方法がわかりません。 VB6SP5です。宜しく御願いします。
>113 Lockedでいいんじゃないの?
>>114 Lockedプロパティはテキストボックスにはあるけど
リストボックスには無いようですが。
コードで無理矢理Locked = Trueを指定してみたけどエラー出るし。
118 :
デフォルトの名無しさん :2005/06/07(火) 08:26:03
キーボードイベント(KeyPress?)でキー入力をキャンセルしてやるだけだと思うけど。
>>116 ローテクだけど、各データの前に半角スペース入れるとか。
左にくっつきすぎるのでいつも入れてる。
よくねーの?
「←この部分は表示しない」の部分のAAがかえって誤解を生んでるような。
>>123 だな。
>>111 だと標準じゃスクロール操作は出来ないだろ。
質問者がイヤだと言ってる"スクロールバーの値に対してシコシコと"やれば出来なくもないけど。
126 :
デフォルトの名無しさん :2005/06/07(火) 17:46:15
テキストボックスかラベルで文章をセンタリング・右寄せなどにできますか?
つ Alignment プロパティ
>>125 ピクチャーボックスの中のピクチャーボックスのtopをいじるだけで全部動くけど?
>110 DataRepeaterコントロールじゃアカンの? 詳細はMSDNを「データ リピータ (DataRepeater) コントロールの使い方」で検索ね。
>>128 たぶんそれだとスクロールバーをドラッグしたとき、移動中はスクロールせず、
バーポインタを放した時だけ移動するでしょ。
そういうのがヤなんじゃないの?
133 :
110 :2005/06/07(火) 21:29:13
>>111 自分なりに考えてフレームの中にフレームを使って動かす方法とかもやったけど
>>131 さんが書いてるようにバードラッグでの移動は出来てもスクロールが出来ないので避けたいです。
>>123 ,
>>125 そうですか。。。
とにかくリストボックスに表示しきれない数のデータを入れたときのような操作感で
中にコントロールを任意配置できるものを探してます。
>>129 アカンです。
>>110 でも書いたように
>>110 のは例で、実際に同じコントロールを並べるのではなく、
自由にコントロールを配置出来ないと困るので。
規則的に並べるだけならDataRepeaterコントロールでも良さそうですが。
>>134 TextOutでもやれるけど、ラベル使ったほうが楽かもしれんね。
あとはStrokePathとか。
これは効果が少し違うけど憶えとくと幅が広がるかな。
>>135 ありがとうございました!
早速やってきます
コモンダイアログで指定ディレクトリを開く方法を教えてください。 とりあえずアプリのカレントディレクトリを開きたいのですが ChDrive App.Path '又は(Left(App.Path,1)) ChDir App.Path CommonDialog1.ShowOpen ではダメでした。
つ InitDir プロパティ
>>133 スクロールが出来ないという意味がわからないのだが。
サブクラス化をしたくないという事?
わからない奴は黙ってればいいという法則 あ、俺も黙ってられなかった…
142 :
140 :2005/06/07(火) 22:34:56
解決の手助けになれば、などという余計な事をしてしまったようだ。
143 :
86 :2005/06/07(火) 22:39:15
145 :
86 :2005/06/07(火) 22:59:53
>>144 いや、前にも書いたようにそれが嫌だからここに来てる次第でして。
文字列的に解析処理する方法は
>>93-96 で書いたように一応ヘタレなりにやってみたのですが、
動作は問題なくてもこれを毎回使うのもウザいのでwshのように扱える方法を探してます。
>>145 >毎回使うのもウザいので
DLL化すればいいのでは?取得したCommand関数の内容を渡すだけですし…
147 :
86 :2005/06/07(火) 23:55:24
>>146 VB初めて3日の自分にはDLL化する方法なんて分かりませんが、
程々に催促しながらもうしばらく待って、良い方法を知ってる方が居ないようなら
コードを煮詰めて、DLLする方向でやってみます。
>>147 標準モジュールにする事の、何が気に入らないんだ
>>131 Scrollイベントにも同じコードを書けばよかったような。
わからない奴は黙ってればいいという法則 あ、俺も黙ってられなかった…
>148 ちょっと前にでた指数計算の例と同じだよ 簡単に出来る方法があるならわざわざ面倒な処理はしたくないってことだろうな
>>151 中身は見てないが、93-96のソースが存在していて、その上で
別の方法を探すほうが面倒だと思うのは俺だけか
>131,133 DoEvents かませば移動中もスクロールするけど?
154 :
153 :2005/06/08(水) 00:31:46
>153の補足 *_Change() と *_Scroll() の両方に書く必要があるね。
>152 >93-96は奴が自分で書いたものでしょ 俺はコマンドライン操作をするアプリは、VBは起動中のコマンドライン操作が面倒という理由で 他言語使ってるのでVBのコマンドライン周りはよくわからんが
>>155 だからさー
自分で作ったコードがあって、何でほかの方法探すという面倒な事しなきゃならないのさ
>>152 =156
VBコードは書けても日本語読めない方ですか?
>>157 日本語は読めるよ
理由を説明してくれないか
> 簡単に出来る方法があるならわざわざ面倒な処理はしたくないってことだろうな この部分が理解できてないからじゃねーの? たとえばVB上でWindows Script Hostの Arguments、Unnamed、Namedプロパティ、Existsメソッドが使えたとしたら、 dll化したとしても標準モジュールに書いたとしても、 93-96を使うのは無駄なことに違いないいから。
>>156 そんなもん、自分で作るよりかバグも少ないことが期待できるし、
一般的な方法があるのならそれにあわせたほうがいいし。
皆が共通のコードを書いているのに一人だけ変なの使っていたら、
この関数何?なんでこんなの使っているの?って話になる。
わからない奴は黙ってればいいという法則 あ、俺も黙ってられなかった…
162 :
デフォルトの名無しさん :2005/06/08(水) 12:48:42
すんません、質問です pictureboxの画像の上にラベルで文字を重ねて一つの画像を作ったのですが、 そのpictureboxをSavePictureで保存してもラベルの文字も画像と判断してくれません このpictureboxの画像とラベルを重ねたものを画像として保存するにはどうすればいいですか? 一応windowsキー+プリントスクリーン→ペイントに貼り付けで保存はできるんですが・・ できればVB一つで保存できる方法があったら知りたいです。
>>162 解像度が荒くていいならFormのハードコピーを取るサンプルみればできるっしょ。
そこらじゅうにサンプルがありますよ。
そうじゃなく綺麗に取りたいなら、デバイスコンテキスト周りとかをきちんと学習すればできるようになる。
>>162 PictureBoxにラベルの文字をPrintすればいいだけのような。
167 :
デフォルトの名無しさん :2005/06/08(水) 15:49:06
Win2000 Excel2000を使用しています。 VB6.0 上でエクセルの列A,BをコピーしG,Hに貼付けようと下記のようにしているのですが 列G,Hを選択しているところまでは確認できましたがうまく貼りつきません。 xlSheet.Range("A:B").Select xlSheet.Range("A:B").Copy xlSheet.Range("G:H").Select xlSheet.Range("G:H").PasteOK よろしく、お願いします。
168 :
162 :2005/06/08(水) 17:03:57
>>164 まさかこんなところで騙りが発生するとはorz
>>163 今日一日色々試したけどだめでした・・
フォームごと印刷したりPCごと落ちたりと散々な結果に
デバイスコンテキスト勉強して見ます
>>165 分かりませんでした・・
169 :
デフォルトの名無しさん :2005/06/08(水) 18:22:31
スプレッドシートのセルをコンボボックスに指定した場合、ListIndexプロパティ と同じ意味にあたるプロパティは何でしょうか? マウスではなくスペースキーを押したときにリストを変更したいです。 よろしくお願いします。
170 :
162 :2005/06/08(水) 21:05:39
CurrentX,YでPrintの位置は調整できたようなきがする。
172 :
デフォルトの名無しさん :2005/06/09(木) 02:30:39
Dim Count As Integer For Count = 1 to 10 LabelX.Caption = Count Next Count このように LabelXのところをカウンタ変数に合わせて Label1 ~ Label10 にしたいのですが LabelX のことろ はどうかけばいいのでしょうか?
>>172 コントロール配列にしておくか、配列を確保しておきSetをしておいて
LabelA(x).Caption =
のように。
174 :
172 :2005/06/09(木) 02:41:59
二次元配列のソート方法を教えてください。 たとえばhoge(3, 2)という配列があって、 a 3 6/8 b 1 6/7 c 4 6/5 d 2 6/6 みたいな内容の場合、 ▲昇順 b 1 6/7 d 2 6/6 a 3 6/8 c 4 6/5 や ▼降順 a 3 6/8 b 1 6/7 d 2 6/6 c 4 6/5 のような感じでソートしたいのです。 よろしく御願いします。
>>175 一次元配列のソートと同じだと思うけど、どこで詰まってるのかな。
>>176 情報があいまいすぎでしたね。スミマセン。
実際の配列要素数は数十万*15〜20で、型はString、
要素は英字+記号、数字+記号、英数、数字のどれかです。
自分が今まで一次元配列のソートに使っていたアルゴリズムを流用すると
ソートのキーとなる要素に重複値があるとうまくソートされないんです。
他にはMSHFlexGridに書き出してソートしてまた変数に格納する方法や
それよりも更に時間が掛かるような方法しか思いつかないし・・・
何か良い方法はありませんか?
>>177 自前のコードをデバッグするのは?
もし処理速度が問題なら、DLLを利用するとか。
VectorにあったDLLは最大10万件だったけど。
>>177 >>数十万*15〜20
ってどういう事?ファイルがそれだけあるって事かな?
結局ソート対象は数十万で良いのかな?
180 :
デフォルトの名無しさん :2005/06/09(木) 10:08:53
181 :
167 :2005/06/09(木) 10:24:39
自己解決しました。
質問させていただきます。 長文になりますが勘弁してください。 ACCESSのmdbより、データを検索する処理があるのですが、(ループの内部) 高速化のためにキャッシュ処理を使うように変更することになりました。 この処理は、端末の利用者がデータ検索をする時に使用されるものですが、 端末利用者の検索条件設定(年齢層[子供、大人、老人等]や、職業[会社員、自営業等])で 検索対象となるテーブルが可変します。 また、ループ処理で、同じレコードが再ヒットする可能性は極めて低いです。 なので、最初の検索時に対象のテーブルのデータを全て構造体配列に持って、 2度目以降の検索では、この配列を見るようにしようと考えていますが、 ツマラン処理の割には手間が掛かりそうです。(配列からの検索処理の記述とか) 何か他に簡単な方法はないものでしょうか。 漠然とした回答でも結構ですので、何かアイデアがあればお願いします・・・。 なお、使用しているVBのバージョンは6.0です。よろしくお願いします。
>>169 言っている事が判らない。
正式なコントロール名を使用して説明してくれ。
184 :
デフォルトの名無しさん :2005/06/09(木) 11:02:09
>>183 すいません、質問がおかしかったですね。
使用コントロールはvaSpreadです。ツールボックス内のComboBoxをform
に貼り付けている場合には
Select Case KeyCode
Case vbKeyReturn, vbKeyDown
KeyCode = 0
Case vbKeyUp
KeyCode = 0
Case vbKeySpace
If Combo1.ListIndex = 3 Then
Combo1.ListIndex = 0
Else
Combo1.ListIndex = Combo1.ListIndex + 1
End If
Case vbKeyBack
Combo1.ListIndex = -1
End Select
の手法でComboBoxの中身をどんどん変更できたのですが、vaSpreadでセル
をComboBoxに指定して同じような動きをさせたいのですが、ListIndexプ
ロパティが見つけられずに困っています。
>>184 市販されてるVB用ライブラリのヤツですか? >>SPREAD
With Spread
.Row = 2' セルを設定
.Col = 2
i = .TypeComboBoxCount
.TypeComboBoxIndex = 1
s = .TypeComboBoxString
End With
こんな感じで、取得したり設定したりする事になると思います。
ちなみに、VB上でF2キー押してfpSpreadライブラリのヘルプ見たほうが早い気が・・・
186 :
デフォルトの名無しさん :2005/06/09(木) 13:28:54
>>182 その前に問いたい。そのデータベースは正規化されているのか、と。
MSFlexGridで行単位の文字色を変えるのは どのように行うのでしょうか? MSFlexGrid.CellForeColor = QBColor(**)ではアクティブ? (先頭かクリックしたセルにデータが送られた場合)の所だ け色が変わります。
>>187 それは"Cell"ForeColorだから当然だろ。
カレントセルを変えるプロパティですよ。
あまり使わないから良く判らないが、そのプロパティの行バージョンを探すか、
セル1つずつを変えていって行全体を変えるか、範囲指定してセルの色を変えればいいのでは?
>>188 すいません。
アクティブなセルを替えながら色を変更していくのか
行ごと色を指定する方法があるのか、どのようにするのか
基本がわからなくて質問してしまいました。
>>185 の方法が使えそうな気がして試した所うまくいってしまいました。
With MSFlexGrid
.row = 行カウンタ
.col = 1
MSFlexGrid.CellForeCOlor = QBColor(12)
.row = 行カウンタ
.col = 2
MSFlexGrid.CellForeCOlor = QBColor(12)
.row = 行カウンタ
.col = 3
MSFlexGrid.CellForeCOlor = QBColor(12)
End With
ありがとうございました。
>>189 おせっかいついでに・・・。
ループしろ、関数化しろ。
private sub SetCellColor( grd as MSFrexGrid, rw as long , cl as long, clr as long)
with grd
.row = rw
.col = cl
.CellForeColor clr
end with
end sub
呼び出し側
For i = 1 to 目標まで
call SetCellColor(グリッド, 行, i , QBColor(?) )
Next
>>190 おせっかいThxです。
おかげですっきりまとまりました。
勉強になりました。ありがとうございました。
ボタンを配列にしてCommand1(Index)という形になったのですがそのIndexを使ってフラグを作りたいのですがflg(Index)という形にするとIndexが参照されません。何が問題でしょうか。
(ボタンがたくさんあってクリックするとイベントが起きて、そのボタンを押したというフラグが作りたいのです)
194 :
デフォルトの名無しさん :2005/06/09(木) 17:20:06
>>185 レスありがとうございます。早速試してみたのですが、Index=2の時にリストの
2番目の文字列を取得したかったのですが失敗でした。ヘルプも見てみたのです
がなかなかみつからないものですね。
手法としてはTypeComboBoxIndexの値が変わった時に、Select文を使って.Text
="abcde"のようなやり方しかないのでしょうか?
195 :
182 :2005/06/09(木) 19:14:05
>>186 正規化どころか、テーブルが・・・い、いえ、なんでも・・・。
システムが歪に成長しているもので、
それにカスタム対応しようとして、方法論までが歪な物になってしまいます。
早く別の作業に移りたい・・・
196 :
185 :2005/06/09(木) 19:27:00
>>194 もしや、.TypeComboBoxIndex と .TypeComboBoxCurSel の
使い分けができていないとか・・・?
198 :
185 :2005/06/09(木) 20:25:47
>>194 なんか、質問の意図を間違えたかもしれません。
↓のように設定した場合、
.Row = 1
.Col = 1
.CellType = 8
.TypeComboBoxList = "りんご" & vbTab & "ゴリラ" & vbTab & "ランボルギーニ"
.TypeComboBoxEditable = False
.TypeComboBoxCurSel = 0
取得するときは
.Row = 1
.Col = 1
.TypeComboBoxIndex = 1 '2番目
s = .TypeComboBoxString 'ゴリラ捕獲
199 :
デフォルトの名無しさん :2005/06/09(木) 20:44:54
>>195 なるほどね。正規化とかはできそうにない状況な訳ね。ところで、ADOとかで
Filter とか Find 使うって選択肢はあり?
Get!Get!っていうダイアログの文字など通常コピーできない文字列を 取得するアプリ有るじゃないですか。 アレで使われてるターゲットを選択するポインタって、VBではどうやれば使えますか? ドロップした位置情報(x=300、y=400とか)が取得できればいいのですが。
>>200 マウスカーソル変えてSetCaptureするだけちゃうん?
>200 WindowFromPointっていうAPIがあります. っで質問です。VBのプロジェクトに配置されました。 東京周辺でVB6.0が購入できるお店があったら教えて下さい。
203 :
デフォルトの名無しさん :2005/06/09(木) 23:15:47
九九の表を出力するVBコードを作りたいのですが分からないです。 どなたか分かる方いらっしゃれば教えてください
205 :
195 :2005/06/10(金) 00:09:05
>>199 それは可能です。
現在の検索処理は、検索条件自体は単純(1件当たりの検索は早い)なのですが、
ADOを活用したら高速化できますか? ちょっとアイデアが浮かびません・・・。
>>204 給料の低い新米にゃちときついなぁ。願わくば Learning Edition とか
単品で安く欲しいっす。やっぱ、秋葉探索しかないですか。
>>203 変数2個使って2重ループするとよろし。
テキストの描画には、TextOut っていうAPIがある。
VB6でBIOSの日付を取得したいのですが可能でしょうか?
横レスだが、何故BIOSの時刻なの? OSの時刻と基本的にイコールだし。
>>211 高負荷時のWin9x系で激しくズレることもある。
では単純に。 そんな用途でのOS選定、言語選定を間違ってる。
>>213 じゃあどのOSと言語使えばいいわけ?
間違ってると言うなら適切な事を知ってるんでしょ?
VBでOSを開発しようと思っているのですが、 どのような手順を踏めば良いのでしょうか??
その高負荷を抑えようとしないんだろうか?
どうして誰も、 できません。 って言わないんだろう・・・
この流れが好きだからじゃない?
高負荷になるのは自作のアプリとはかぎらないわな
222 :
デフォルトの名無しさん :2005/06/10(金) 18:22:02
お知恵をお貸しください。 Windows2000 SP4+VisualBasic6.0 SP5でアプリを作成し、 InstallShieldExpress2.12でインストーラを作成して Windows2003サーバにインストールしても 正常に動作しますか? ドトネトに汁!という選択肢は除外でお願いします(;´Д`)ゴメンナサイ
223 :
222 :2005/06/10(金) 18:40:51
すみません自己解決しました。 お騒がせしました。
224 :
デフォルトの名無しさん :2005/06/11(土) 03:39:33
文字コード変換について聞きたいのですが。。 楽天市場で検索を行うとアドレスの欄で日本語が あいうえお → %A4%A2%A4%A4%A4%A6%A4%A8%A4%AA のように変換されます。 この変換をVB上で行うにはどのようにすればいいのでしょうか・・・。 仕事から帰っていままでずっと検索したのですが なかなか情報が見当たりません。 申し訳ありませんがご教授願います。 環境 VB6.0 SP6
>>224 Function S_Change(s as string) as string
If s = "あいうえお" Then
S_Change = "%A4%A2%A4%A4%A4%A6%A4%A8%A4%AA"
End If
End Function
227 :
192 :2005/06/11(土) 14:58:00
Dim flg(Index) As Integer Private Sub Command1_Click(Index As Integer) If flg(Index - 10) = 1 Then Command1(Index).Picture = Command2.Picture flg(Index) = 1 End If End Sub こんな感じなのですが・・
>>227 Dim flg(Index) As Integer
Indexが有効なのは下のプロシージャ内だけだから、flg(0)を宣言したことになる。
If flg(Index - 10) = 1 Then
Indexが0の時、宣言されてない flg(-10) を参照することになる。
>>207 自宅でこっそり勉強しようかと思いまして。
秋葉みてきたけど、ないっすね。
CDのみで1万5千円(Professional)版なら見つけましたが。
なんとかお安くかつ合法に入手できないもんですかね。
仕方がないんで、Java資格取ってJavaのプロジェクトに配属されるよう
がんばります。
>>229 V6.0なんか売っているわけ無いだろう。
5年以上前の製品で、とっくに発売中止になっているぜ。
今から合法的にライセンス手に入れたいなら、MSDN契約しかないな。
利用者が一人なら複数のPCにインスコできるから、会社にライセンス買ってもらって、自宅のPCにインスコしる。
>>224 AscとHex、場合によって文字コードをJISやEUCに変換する必要があるかも。
HTTPを扱おうと思うなら、HTTPの仕様ぐらい確認する。
>>218 もちろん決して不可能では無いからさ。
マシン語のコードをVBのソースコードに埋め込み、バッファーオーバーラン等を利用して呼び出せばよい。
Windows95/98/MEでしか動作しないけどな。
ただこの板には、そういう高度なプログラムを書けるバッカーが居ないだけ。
>>232 ソースに埋め込んだマシン語コードを動かすのに
バッファオーバーランなんぞ使う必要もねーべw
VBの機能とAPIを工夫し、それようにマシン語コードを用意すれば
配列とかに入れたマシン語コードを普通に呼び出せるぞ。
(それをVBプログラムと言い張る勇気は俺にはないがなw)
234 :
デフォルトの名無しさん :2005/06/12(日) 13:18:59
なんで「マシン語」なら
>>212 の問題が回避できると考えるのか、
その根拠が理解不能。
大体なんでその「マシン語コード」とやらを実効するのに
わざわざバッファオーバーランなんぞを使う必要があるのだろう。
っていうか、VBコンパイラが吐き出すコードだって(以下略
236 :
デフォルトの名無しさん :2005/06/12(日) 23:53:30
エクセルデータを読み込みたいんですが、 下から3行目の、自分のPCのデータがどこにあるかを知りたいんですが、 どうすればいいんでしょうか? デスクトップにBook1で保存しています Dim x As Object Private Sub Command1_Click() Text1.Text = x.worksheets.application.cells(1, 1).Value End Sub Private Sub Form_Load() Set x = GetObject("C:\Documents and Settings\\デスクトップ\Book1.xls") x.worksheets.application.Visible = True End Sub
>>236 意味不明。
固定フォルダでないなら、ダイアログでフォルダを選択。
これを自動でやるなら、全ドライブ検索後、選択。
238 :
236 :2005/06/13(月) 00:27:55
>>237 デスクトップ\Owner\ でOKでした。
次なんですけど、これだと、セルの(1,1)しか表示しないんですが、
全部とは言わないですが、ある程度のセルの値を表示するにはどうすればいいのでしょうか?
Text1.Text = x.worksheets.application.cells(1, 1).Value でセルの(1,1)指定してるじゃないか。
240 :
デフォルトの名無しさん :2005/06/13(月) 01:10:28
DOLOOP使ってセルを一つずつ読み込め
なんつーか……… 「パソコン」にもうちょっと詳しくなってから来て下さいよ>236
? 11.5 \ 12 1 なんで 1 なの?
244 :
デフォルトの名無しさん :2005/06/13(月) 11:48:24
教えてください。 エクセルの「=IMEXP("1+1i")」をVB6.0で計算する方法です。
246 :
デフォルトの名無しさん :2005/06/13(月) 19:36:28
お疲れ様です いま、VB6.0からEXCELを操作するプログラムを書いているのですが、 EXCELのセルを行、列ともに大きさを変えたい場合はどのようにすれば、 よろしいですか? .Autofitではなく、任意で大きさを変えたいのですが?
247 :
デフォルトの名無しさん :2005/06/13(月) 22:32:29
for構文の中にもうひとつfor構文って使えないのでしょうか? どうもうまく行きません。中の方のfor構文を別のプロシージャにして 呼び出すようにしても駄目です。 どなたかアドバイスください。お願いします。
>>244 ゴリゴリ書くしかなさそう。
手抜きしたかったら、シェアウェアのDLLで。
>>246 Excelを立ち上げ、メニューから「ツール→マクロ→新しいマクロを記録」。
後は実際にマクロで行いたい操作をExcel上からやってみろ。
Excelのマクロに関する、大抵の問題は解決するはずだ。
251 :
デフォルトの名無しさん :2005/06/14(火) 18:03:57
>>250 ありがとうございました。
ところで、エクセルで作った帳票があるのですが。印刷時に1行目から4行目まではヘッダー
として必ず印刷するにはどのような方法がありますか?
はじめてのExcel買ってくれば? ページ設定、シート、印刷のタイトルとか。
>>251 PageSetup.PrintTitleRows = "$1:$4"
250の言うことを理解できてないの?
それとも、EXCELの使い方自体を質問してる?
254 :
デフォルトの名無しさん :2005/06/14(火) 20:07:11
ディストリビューションウィザードでインストーラーを作成しましたが、
「データアクセスコンポーネント(MDAC?)」
のインストール時に以下のエラーが表示されることがあります。
「path or file not found」
OSはXPSP2で、アカウントは日本語ダブルバイト文字を含んでおりません。
ですので、以下の現象ではないと考えております。
http://homepage1.nifty.com/maruyama/error01.htm 他の原因は何か考えられますでしょうか?
256 :
デフォルトの名無しさん :2005/06/15(水) 11:13:03
VB6で、Windowsサービスを実装する サンプルコードがどこかにありませんか?
258 :
256 :2005/06/15(水) 11:49:11
>>257 なるほど、こういうコンポーネントがあるんだね。
VB.netやVCを使えば普通に作れるんだろうけど
開発言語がVB6に限られているのがつらい。
sexeとか普通のexeをサービス化するツール使えばいいじゃん。
出来ると使えるば別だと判ってるよな。元質問者。 VBでサービスなんて出来るけど使わないほうが良い。
261 :
デフォルトの名無しさん :2005/06/15(水) 17:56:30
スプレッドシートのセルを半角カナのみ入力できるようにするってできないんで したっけ?
262 :
デフォルトの名無しさん :2005/06/15(水) 17:58:46
263 :
デフォルトの名無しさん :2005/06/15(水) 18:46:48
ADOでMDBに接続して、テーブルの各フィールドのデータ型を取得しようと思っています。 Field オブジェクトのTypeプロパティを使うと そのフィールドが「日付/時刻型」であることは分かるのですが、 その書式(「日付 (S)」とか「「時刻 (L)」)はどうすれば分かるでしょうか?
>>263 fieldのpropertiesにformatとかそんな感じの名前で登録されていたような。
265 :
デフォルトの名無しさん :2005/06/16(木) 01:20:41
<form action="AAA" method="get"> <input type="image" src="/img/submit.gif" alt="はい" border="0" width="115" height="25"> </form> IEを操作してるんですが、こういう場合、このtype="image"となってる画像ボタンをクリックするには どういう感じで書けばいいんでしょうか? FROMタグにもinputタグにもname属性がなくてどうやって指定していいのかさっぱりわかりません
FROMタグってなんだ・・・FORMタグです
<HTML> <HEAD><TITLE></TITLE> <SCRIPT type="text/javascript"> window.onload=function(){ var ObjFORM=document.forms[0]; // *1 var ObjINPUT_image=ObjFORM.all.tags("INPUT")[0]; // *2 alert(ObjINPUT_image.src + "\r\n" + ObjINPUT_image.alt); VBS_Code();} </SCRIPT> <SCRIPT language="vbs"> Option Explicit Public Sub VBS_Code Dim ObjFORM,ObjINPUT_image Set ObjFORM=document.getElementsByTagName("FORM")(0) ' *3 Set ObjINPUT_image=ObjFORM.getElementsByTagName("INPUT")(0) ' *4 Call MsgBox(ObjINPUT_image.src & vbNewLine & ObjINPUT_image.alt,,"VBS") End Sub </SCRIPT> <!-- *1 * 2 *3 *4 ここでは<INPUT>のtype属性まで調べていない。位置が分かっているものとする。 <INPUT type='image'>はelementsコレクションには含まれない オブジェクトコレクションはVB系ではFor Object in Collection〜Nextで調査できる JSでは配列要素指定には[]VB系は()である点に注意 JSとVBSの参照方法自体は相互に使える。ここでは分けた。 IEのDHTMLリファレンスでコレクションを調べよ --> </HEAD> <BODY> <form action="AAA" method="get"> <input type="image" src="/img/submit.gif" alt="はい" border="0" width="115" height="25"> </form> </BODY></HTML>
268 :
267 :2005/06/16(木) 04:50:45
汚くてスマソ 訂正 For Object in Collection〜Next → For Each Object in Collection〜Next Eachが抜けてたわw ま、IE専でいいということだし、VB6なんだろうから document.allやtags()でいいだろう。 Web的には document.forms[].getElementByTagName() なんだろうなw
269 :
263 :2005/06/16(木) 11:11:47
>>264 レスサンクス。
ADOじゃだめだったんですけど、
DAOを使うとFieldのPropertiesにformatとして登録されてました。
…DAOで作り直しかorz
>>269 ADOXのColumnオブジェクトTypeプロパティもだめ?
271 :
263 :2005/06/16(木) 17:32:20
>>270 やってみました。
ダメですた(´・ω・`)
Propertiesにもなかったし…。
現在DAOでごりごり改築中です。
三目並べのゲーム作ってるんですが中々うまくいきません。具体的に言うと □□□ □□□ ←みたいに9個のラベルがあってクリックすると○がついてランダムに他のラベルに×が付くという □□□ 仕様なんですが、一度○をつけた所を何度もクリック出来たり○が入ってるところに×が入ったりしてしまうんです。 他には既に×が入ってるところに×が入ってしまう事もあってクリックしても×が表示されないこともあります。 それと勝ち負けの判定方法も分かりません。無知な僕にご指導よろしくお願いします。
If-Then-Elseの使い方を憶える 縦・横・斜めのどこか一直線が×か○になっていたら終わり
>>273 つまり
If Label1.Caption="○" AND Label2.Caption="○" AND If label3.caption="○" _
OR Label4.Caption="○"(ry
という感じですか?他の不具合を直す方法についてもよろしくお願いします。
まあ、やり方は色々だけどそれでもいいんじゃないすか。 >一度○をつけた所を何度もクリック出来たり○が入ってるところに×が入ったりしてしまうんです。 >他には既に×が入ってるところに×が入ってしまう事もあってクリックしても×が表示されないこともあります 原因が色々考えられるのでわからないですね。エスパーでもないんで。 デバッグは自分でやりはれ。 キャプションに○×入れてる箇所にブレークポイント入れて、正しい場所に入れているのか確認しなさい。 MSDNもインストールしなさい。
クリックする前やランダムで入れる前に すでに○か×があるかどうか調べないの?
>>274 とりあえず、コントロール配列にしたほうがいいよ。
それじゃループが使えない。
グレープシティーの vs-view を使って帳票を作っているのですが 縮小印刷ができなくて困っています。 また使っているバージョンが古くて問い合わせできないので 御存知の方がいらっしゃいましたらアドバイスよろしくお願いします。 B4 横で作成した帳票がありプレビューをしています。 このプレビューを出力する時は A4 に縮小して出力したいのです。 B4->A4縮小する方法がわかりません。 よろしくお願いします。
>>277 コントロール配列にするとクリックしたときに○が入るというのをうまく出来ないんです。
追記ですがランダムに×を入れるというのはSelect Caseを使ってます。
VB云々じゃなくて、論理的に物事を考えることが出来ないだけじゃん。
>>280 そうなのかもしれません。では三目並べのゲームをVBで作る場合どういうコーディングをするのが論理的か
例えをあげて指導してくれませんか?
>>281 升目を内部的にどう管理するか考える・・・二元配列?
画面で起るイベントに対して、升目のリアクションを列挙する・・・新規の○×、すでに置いてある
新規に置いた後のロジック=勝敗判定を考える
283 :
デフォルトの名無しさん :2005/06/18(土) 01:29:44
HTMLのメールを以下のように送信したのをOutlookで受信して、 その受信したメールを今度は転送しようとすると画像が崩れてしまいます。 メールのHTMLソースをみると、画像のパスが<img src="c:\test.html">って なってて、なんか変。正常に転送できるように送りたいのですが、下のソースって なんか、間違ってますか? Dim cdoMessage As CDO.Message Dim cdoConfig As CDO.Configuration Set cdoMessage = New CDO.Message Set cdoConfig = New CDO.Configuration 'URLの設定 sHTML = "c:\test.html" sURL = "file://" & sHTML 'メール設定 With cdoConfig.Fields .Item(cdoSendUsingMethod) = cdoSendUsingPort .Item(cdoSMTPServer) = CON_ADDR_SMTP .Update End With
284 :
デフォルトの名無しさん :2005/06/18(土) 01:29:54
つづき・・・ '送信 With cdoMessage Set .Configuration = cdoConfig .CreateMHTMLBody sURL .From = sFrom .To = sTo .Cc = sCC .Subject = sSubject .Send End With Set cdoConfig = Nothing Set cdoMessage = Nothing
285 :
デフォルトの名無しさん :2005/06/18(土) 02:00:02
配列について質問です 配列の一部のみを開放と言う事は出来るのでしょうか? 例えば 10の要素のある配列の前半4つを開放(?)し6の要素をもつ配列に変換するという感じです やはり5つめの要素から最後まで順にセットして良くしかないのでしょうか? ご教授願います
>>285 確かにReDim Preserve は不便で使えないもんなぁ。遅いしw
別新規配列に手動で要素コピーする方法はイヤだとw
JavaScriptやPerl風の連想配列を使ってみる?要素indexが連続する必要はないし文字列indexでもOK
Private Function Test()
Dim i As Long, s As String, d As Variant
Rem 参照dllはMicrosoft Scripting Runtime(scrrun.dll)
Dim ObjDic As Scripting.Dictionary
Set ObjDic = New Scripting.Dictionary
For i = 0 To 9
ObjDic(i) = "Value" & CStr(i): Rem 記述その1
Rem その2:ObjDic.Item(key) = item
Rem その3:Call ObjDic.Add(key,item)
Next
For i = 0 To 3
Call ObjDic.Remove(i): Rem 4つの要素削除
Next
d = ObjDic.Items 'ObjDicのままで使えるが新規の場合
For i = 0 To 5
s = s + d(i) + vbNewLine
Next
MsgBox (s)
End Function
>>285 配列をそのまま使わずにリスト構造の構造体を抱える器として使う。
そうすればとりあえず部分的に開放する場合は、Redimしないでリストの付け替えでOK。
ある程度穴だらけになったら、リストの領域を別のものにコピーしなおしてきれいにする。
>>283 画像パスにしっかり”c:\test.html”と指定しているじゃないか。
ちゃんと書いたとおり動いているし、正しいんじゃないか?
まぁ普通はインターネット上のWEBサーバーに画像を置くとか、
メールに画像を添付するとするけどな。
289 :
デフォルトの名無しさん :2005/06/18(土) 09:14:35
>>288 メールを送る前は、src="c:\aaa.gif"のように画像をしてるんだけど
送ってOutlookで受信したときは、src="cid:〜〜"に変換されてて
そのメールを転送して送ろうとするとsrc="c:\test.html"に変換(?)
されてしまうんです。
290 :
デフォルトの名無しさん :2005/06/18(土) 13:59:06
>>285 そんな面倒なことしなくても、素直にWin32APIのCopyMemoryを使うか、
配列のインデックスにオフセットを加える操作をラップしたクラスを作ったほうが
よほど簡単だと思う。
VB:6.0 OS:2000sp4 専用ワークグループを設定したMDBにDAO3.5で接続したいんだが ワークグループの変更に失敗する。 DBEngine.SystemDB="D:\Test.mdw" ←エラーはでないが、変更されない ためしにExcel2000のVBAで同じことをやってみたら、こっちは成功。 VBのバグなんだろうか。 誰か知ってる人いたらご教授おねがい。
>>290 CopyMemory使っても確保されているメモリは解放されんだろ、
>>292 また意味不明なことを。これだからVB(以下略
そんなもん、コピーした後オリジナルを抹殺するだけの話だと思うが。。
つうかさ、VBなんだからメモリー操作なんぞ不要にしないのが正統。 どうしてもそれしかないって言うなら使うけど、そうじゃなければ使わない。 そもそもそういうのが必要ならVBで作るな。
VB6.0 XP 〜 keypress(KeyAscii as integer) If KeyAscii = ☆ then 処理 end if vbKeyReturn や vbKey1(数字)だと反応するんですが vbKeyF1(ファンクションキー)だと反応しなくなるんですが なぜなんでしょう...
なぜってmsdnにちゃんと書いてあるじゃん。。
>>295 みたいな奴ってどういう精神構造してるんだろう。
初心者が馬鹿なのは不快じゃないけど、教えている方が馬鹿なのは不快だなぁ。
298 :
:2005/06/19(日) 00:38:50
ビジュアルベーシックを一から勉強しようと思っています。 しかし、普通の入門書みたいのだと、あまり私が作りたいと思うジャンルで実践してくれないので、 できれば「ゲームを作りながら学べるBV」みたいな入門書があると嬉しいのです。 そういう本てありますでしょうか? プログラムは昔、MSXでベーシックを作っていたので、多少は心得があります。
>>298 ベーシックはよく分からないんだが、
いきなりゲームを作るのは難しすぎると思うぞ
「ゲームを作りながら学べるVB」な本は基礎部分をかなり省略しているから
地味な本でも基礎をきちんと説明している本から始めたほうがいいよ
おすすめは技術評論社の「VB.NET 300の技」といった感じのタイトルの本
もしくは「VB.NET 基礎編」「応用編」「コントロール関数編」の三部セット(まずは基礎から)
俺は全部持ってたりする
逆にお勧めできないのは翔泳社や日経BPの本
はて、ここはドトネトのスレじゃないような気が。。 というか、いまから何もわざわざ泥舟の勉強しなくてもいい気がするんだけど。 どうでもいいけど日経BPにもいい本はあるよ。 矢沢久雄の『Visual BasicユーザーのためのWindowsプログラミング入門』なんて かなり良書だったと思ったよ。
301 :
:2005/06/19(日) 01:12:37
レスありがとうございます。
>>299 多少理解しにくくても、興味のあるところから行きたいのですよね・・・
でも、とりあえず、そのご紹介の本を・・・っておもったらVBじゃないのか(´・ω・`)
>>300 すいません、泥船ってなんのことでしょうか?
かちかち山で狸さんがウサギにそそのかされて乗った船のことですよ。
303 :
:2005/06/19(日) 01:40:51
>>302 え?
すいません、それはわかるんですが、泥船を勉強しなくていいというのはどういうことなんでしょうか?
VB6 = 狸さんの乗った舟、ってことだよ。 狸さんの乗った泥舟、結局どうなった? 沈んだ。つまりそういうこと。 ほんとはわかってる癖にw
305 :
:2005/06/19(日) 01:54:53
>>304 なるほど・・・いちいち解説すいません。
ただ、VBがだいたいそういう運命なのはわかってるんですが、これが一番簡単だと聞いたので、やってみようと思っています。
>>305 >これが一番簡単だと聞いたので、やってみようと思っています。
つ [HSP]
>306 ゲーム作りたいだけってならそっちのが簡単で良さそうだね
VB6・Win2000環境でゲームを作ってるのですが、質問です。 終了キーが押されたら終了フラグを立て、ゲームのメインループを抜け終了処理をし、 その後にフォームをアンロードさせているのですが、アンロードされた後も アプリケーションタスクが残ったままになってしまって困ってます。 ただ、フルスクリーン・ウィンドウモード用に二つのフォームを用意してるのですが、 ウィンドウモードのフォームではちゃんと終了されます。 「フルスクリーンモードだったら元々の解像度に戻す」という処理を終了処理に加えただけで、 他はウィンドウモードの終了処理と全く一緒なのですが、何故かタスクが残ったままに… アンロード時にEndステートメントを挟めばちゃんと終了されるのですが、 強制終了させるのはどうにも気持ちが悪く、修正したいと思っています。 何が原因かご推測できる方、御教示を賜りたくお願い申し上げます。 (ループ抜けてないとか、単純なミスだとは思うんですが…orz) (解像度変更関連の処理をしないでフルスクリーンフラグを立てるとどうなるか調べてみましたが、 こちらも同様にタスクが残ってしまうので、解像度関連のバグでは無いとは思います)
>>308 他フォームをアンロードしてから、そのプロパティや変数を参照した場合、
再ロードされてしまう。
>>308 何か表示非表示にかかわらず、フォームがロードされていると終了しない。
素直にEndステートメントを使っておけ。
Endステートメントは強制終了ではなく、きちんとフォームのアンロードや
リソースの開放などの終了処理を行ってくれる。
Endは便利だがForm_UnloadやらClass_Terminateが発生しない まま終了しちゃうので注意。 そっちに何も書かないようにすりゃいいだけだが。
>>308 フォームのInitializeとかにDebug.Printとか入れておいて
どのタイミングでロードされているかチェックしたら?
注意
その場合に、安易にDebug.Print フォーム名.Caption とかしないこと。
Debug.Prntでフォームがロードされてしまいややこしいことになりかねない。
Debug.Print "Form名_Init"のように単純な文字列にしておく方が良い。
>>310 全然素直じゃない。バグがあって終了しないのだから、
バグがあっても終了するようにするのではなく、
バグの方を終了すべき。
Endステートメントは強制終了であり、
>>311 さんが言っているように、
UnloadやTerminateなどの終了処理をしない。
>>293 > また意味不明なことを。これだからVB(以下略
> そんなもん、コピーした後オリジナルを抹殺するだけの話だと思うが。。
意味不明なのはお前の方だな。
オリジナルを抹殺とかなにいってんの?w
CopyMemoryをしても、配列のメモリは解放されません。
314 :
sage :2005/06/20(月) 18:11:55
treeviewのnodeでチェック出来る出来ないを制御したいんだができない。 教えておくれ。 各nodeごとにdatabase読みに行ってその判断でチェック不可にしたい。
315 :
デフォルトの名無しさん :2005/06/20(月) 19:14:03
>>313 何が言いたいの?
まあ、多分馬鹿なだけだと思うけど、
何か反論なりいいたいことがあるのならその主張を明確にしてくれ。
一応書いておくと、
>>285 のような処理を純粋にVBの機能だけを使って書いても、
つまり順次コピーの後Redimするようなコードを書いた場合でも、内部的には
「オリジナルの配列」は抹殺されてるんだよ。
316 :
281 :2005/06/20(月) 19:23:48
>>282 の事を参考にコーディングしようとしましたが知識不足なのか分からないところが出てできませんでしたorz
誰か助けてください。
317 :
308 :2005/06/20(月) 19:40:14
>>309-312 ご返答ありがとうございました。ENDステートメントも便利だぞ、
ということのようで、とりあえずの応急処置として使用させて頂きました。
…と、
>>312 氏の助言の通りDebug.Printでひたすら確認してみると、
どうやらフルスクリーン処理の方だけSub Mainを呼んだ後に
Form_Loadを二回していることがわかり、原因を探ってみたところ、
Form.Showの前にCreateCompatibleDCのハンドルにピクチャーボックスのハンドルを指定していた為、
Formが二回Loadされてしまっていた、ということっぽいです。
というわけで無事修正と相成りました。ご助言ありがとうございましたー
(´-`).。oO(いまどきの小学校ってVB導入されてたりするの?)
あるテーブルに対してINSERT文を投げています。 でコミット後にまたINSERT文を投げてコミット。 上記のようにトランザクションが複数にまたがる場合、 lock tableってどういう風にかけてあげたら良いのでしょうか? 素直に2回かけるしかないのでしょうか?
320 :
デフォルトの名無しさん :2005/06/20(月) 22:15:19
IEの操作でダイアログ「はいorいいえ」が出た時にはいを押させるにはどうすればいいのでしょうか?
>>320 はいorいいえが出た時にはいを押すようにユーザに伝えておく
322 :
デフォルトの名無しさん :2005/06/20(月) 22:47:20
>>319 DBきちんと勉強しろよ。
そんなの他人に聞く奴がロック使うなんて早い。
>>322 自動で押させるぐらいなら、表示するな(させるな)。
ちなみに、自動でなんて心配しなくても、大抵のユーザーは半自動でクリックするから大丈夫(ぉ
>>324 どうやってIEの操作ダイアログを表示させないようにできるんですか?w
ひたすらググっても.NETでのやり方しか出てこなかったのでこちらで質問させてもらいます。 mdbからDataGridに読み込ませて更にその読み込ませた内容でグラフを作りたいのですが、 DataGridで読み込ませた内容をどうやったら取得できるかわかりません。 初めはMSFlexGridで作ってグラフ作成にまでこじつけたのですが、 その場合MSFlexGridにtextでしか読み込めず、mdbで読み込ますことができなかった上 直接Grid上に書き込めないのでDataGridに切り替えました。 具体的には2×10くらいの表で上の行をX軸、下の行をY軸にしたグラフにしたいので 列ごとの情報を取得して点を割り出して原点とそれをLineで結ぶ、ということを考えてます。
>>316 >>279 は解決した?これが解決しないと先に進めないよ。
それと、質問はもう少し具体的に。
329 :
デフォルトの名無しさん :2005/06/21(火) 11:27:01
string配列に入ってる文字列で、 中に重複があった場合それを取り除いて重複の無い配列にする方法ありますか?
>>329 そういうプログラムを書けばいいじゃないか
331 :
デフォルトの名無しさん :2005/06/21(火) 11:37:38
>>330 そうなんですけど
初めに全部入れておいて後からチェックしたいんですよ。
でもその方法がわからないんですよね。
332 :
せにょりーた :2005/06/21(火) 11:42:16
strTmp=""test"" 内側の " を消す方法ってありますか??
>>327 何がわからないのか、わからない。
グラフを描いたことがあれば、迷うことはないはず。
グラフィック自体が初めてなら、少しずつ習得するしかない。
>>326 > 普通に
ワロタ。
やっぱり答えられなかったか。
お前は要らない。消えろ。死ね。
メッセージも扱えない社会の底辺はごみでも漁ってろwwwwww
だいたいどのダイアログで「自動で"はい"を押すorダイアログを表示させない」を
やりたいのかすら書いてないからね。
本当に「普通に」ダイアログを出さなく出来る物もあれば、
どうやってもダイアログを出してユーザーに判断させる必要があるものもある。
セキュリティー上、確認が必要な部分まで外部プログラムで制御したら
それはウィルスの類となんら変わらないからね。
きっと
>>320 もそういうヤバめな行為をやろうとしてるんでしょ
でなければ「はいorいいえが出た時にはいを押すようにユーザに伝えておく」で事足りる。
想像力の無い奴だな。 自分で、はいorいいえを自動でやるプログラムが欲しいだけだろ。 明らかに、はいを押すと分かっている局面でいちいち押すのが 面倒だと思わないのか?
> だいたいどのダイアログで「自動で"はい"を押すorダイアログを表示させない」を > やりたいのかすら書いてないからね。 それなのに普通にできると、適当な答えを言う奴がいる。 どのダイアログかわからんのに、なぜできると答えるのか。
すいません。全くの初心者です。 ある変数aがDate型として、aがある日付範囲やある時刻範囲に あることを調べたいのですが、どのようにすればよいでしょうか。 例えば ・日付が2005/6/1〜2005/6/30かどうか調べる ・時刻が18:00以降かどうか調べる といったことです。 よろしくお願いします。
>>340 formatとifでいいんじゃないの?
MAPI関連でご教授願います。 OS:WIN2000(SP?) 言語:VB6 MAPI32.DLLを使用してアプリを作成していますが、 Outlook2000が実行されている環境下で起動すると MAPISP23.EXEが複数起動してる時があります・・・。 こうなるとOUTLOOKは応答なし、作成アプリは、MAPIのログオンエラーとなってしまいます。 MAPISP32.EXEが複数起動してしまうタイミングとか 知ってる方がいましたらよろしくお願いします。
>>342 MAPIを使っているのが、そもそもの間違いなきがする。
MAPIってインストールされているMUAの種類やバージョンに、設定によって
挙動が変わるけど、本当にMAPI使いたいの?
Outlook2Kと限定できるなら、VBA(と言うかOLE Automation?)のほうが良くない?
>>343 レスありがとうございます。
説明が不足してましたが、ExchangeサーバとMAPI接続をするアプリでして、
MAPI接続が必須となっています。
Outlook自体は無くても構わないのですが、他で使用してるらしく・・・。
やっぱりDLLバージョンやOutlook設定に問題ありですかね。
それとも複数から同時にMAPI接続するのが悪いのでしょうか。
345 :
320 :2005/06/22(水) 11:57:00
ええとですね、ユーザーどうこうではなく自分で使うものです ウイルスとか悪いものに使うわけじゃありません 基本的にはいろんなページを巡回させたいんですが 時々意味のないようなダイアログを出してくるサイトがあって そういうところにぶつかると処理がストップするんですよ なので自動的にはいをクリックしてくれないかと思ってるわけです
>>345 俺は以前同じような奴でFindWindowやその周辺のAPIで
ウインドウを見つけてIDやタイトルなどから
判断し自動クリックするツールを作ったよ。
上の方で普通にできるとか書いている奴がいるが、
ウソもしくはただの無知なので相手にしないこと。
あとセキュリティがどうこう言う おせっかい野郎も無視して良い。 そんなことは最初っから分かって言ってる訳でしょ?
348 :
320 :2005/06/22(水) 14:00:43
ありがとうございます 知識が浅くてどう書いていいのかさっぱりわからないので とりあえず判別などは結構ですのでダイアログが出たら常にはいをクリックするという処理を 一番シンプルなもので教えていただければと思います
はじめまして、 インターネットや本を一通り調べたのですが見つけることが出来なかったので どなたか是非ご教授おねがいします。 OS:XP 言語:VB6 キーコード入力の検出をしたいのですが、入力の検出とそのコードの認識は KeyDownイベントで出来ているのですが、他プログラムを選択しているときは そのキー入力を認識できません。 具体的に言えばこのプログラムの実行中に電卓を起動して電卓の入力ログを 残したい時に使うものです。 使用するイベントや、プログラム、参考になるサイト、VB6では無理など一部でもいいので 意見をお願いします。 使用目的はあくまで自分の記録用です・・。
>>349 グローバルフックなどを使うが、VBだけでは無理
昔、インストーラーについて比較したサイトがあったんですがご存知の方いませんか? インストーラーによっては(DLL等)を上書きしてしまう問題があるとか書いてあったよう な気がするのですが。(&その他諸々の長所短所)
>>349 自分用の記録の残し方
1.ちらしの裏
2.自分で電卓作る
354 :
351 :2005/06/22(水) 17:27:17
>>353 おおっ!これこれ、これです。助かりました。
三目並べの作り方をおしえて(はぁと
課題ができないからってこのスレで粘着するかね 問題を小分けにして解決しようなんて頭は無いんだね
359 :
349 :2005/06/22(水) 23:23:45
>>349 ログを録るだけならDirectInputでいけるんじゃないかな。
VB DirectInputで検索してみ。
一通り調べたのですがわからずだったので教えてください。 中国語フォント(UTF-8)で書かれた文字列が記入されているファイルを読み込んで 別ファイル(UTF-8)に追記したいのですが、特定の文字が文字化けしてしまいます。 文字化けをせずに追記する方法を知りたいのですがどうしたらよいでしょうか? なお、ファイルはバイナリモードで開いてInputBで読み込み、Printで書き込んでいます。
>>359 正確には、VB6.0でもActiveX.DLLを作れば出来なくはないが、到底お勧めできない。
>>348 何でズバリと回答が付かないのか、まだ気づかないのか?
お前の言うダイアログとは何のことだ?
HTMLウィンドウをモーダル表示している状態のことか?
JavaScriptからAlertやMessageBoxで表示しているメッセージのことか?
ActiveXやPluginダウンロード時に表示されるセキュリティ警告の事か?
どれのことを言っているのかによって実現方法や、実現のための難易度は大きく異なる。
>一番シンプルなもので教えていただければと思います
SendKeys {ENTER}
364 :
デフォルトの名無しさん :2005/06/23(木) 08:17:26
>>363 回答はとっくについているように傍目の俺には思えるけど。。
まあ、君の書いている内容を読む限り、何もわかってない奴がなに言ってんの、
としか思えん。
しかしどうして口調が偉そうな奴は例外なく無能なんだろう。。
まあ自分の無能に気がついてない幸せモードだからだろうけど。
>>361 Stringに読み込んでるというオチは無いだろうな
Option Explicit Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Sub Command1_Click() Dim WM_CHAR As Integer WM_CHAR = &H102 Call SendMessage(Text1.hwnd, WM_CHAR, Asc("A"), 1) End Sub 1文字送りたいだけなのにAAAAAAAAAAAAAAAAAAAAAと永久にAを 送ってしまいます。なぜでしょうか?
>>366 まったく同じ(だろう)フォームを作って動かしてみたが、そんな事はなかったよ。
WindowsXP / VB6.0(SP5)
後、WM_CHAR は General で Const宣言した方が良い。
Private Const WM_CHAR As Long = &H102
そんなことないっすかー 同じ環境なんですけどねー
1.本当にSendMessageを一度しか送ってないか、DebugPrintを仕掛ける。 2.受けた側が本当に複数受けているのか、Spy++で見てみる。
ちなみにPostMessegeならうまくいきます。
371 :
みゆき :2005/06/23(木) 11:32:39
誰かアナログ時計のコード教えてください。なるべくシンプルなやつで。 6,7行で作れるようなやつ教えてください。自分が作るとグダグダ長くなるんですけど 誰か教えてくれますか?ちなみにVerは5.01です。私自身初心者なんで ぜんぜん分からないんです。
長くてもいいじゃないか
373 :
361 :2005/06/23(木) 15:27:44
>>365 やはりbyte()を使用して書き込まないとだめですかね・・・?
print #1 buf()
こんな感じにしないとだめなんですね。
どうしてStringに読み込んではいけないのでしょうか・・・?
いまいちわかっていないのでご教授ください。
>>373 VB6でUNICODEは使えないから。
>>373 VBの内部コードはUCS-2だから、
UTF-8 ⇒ UCS-2 ⇒ UTF-8 の過程で一部が化ける。
376 :
349 :2005/06/23(木) 16:47:58
>>360 目的のプログラムが出来ました!360様ありがとうございます。
377 :
デフォルトの名無しさん :2005/06/23(木) 17:01:02
VBでWindows95程度のOSを開発しようと思うのですが、 具体的にどの辺から手を加えればいいのでしょうか?
貴兄の脳みそから、
379 :
デフォルトの名無しさん :2005/06/23(木) 17:49:29
最近VB6を使い始めました。 1.Private Sub Command1_Click() 2. damage = Int((150 - 100 + 1) * Rnd + 100) 3. enedmg = Int((100 - 50 + 1) * Rnd + 50) 4. enelife = enelife + damage 5. lblhit.Caption = damage 6. lblDamage.Caption = "チョコボに" & damage & "のダメージ!" 7. If enelife >= 500 Then 8. MsgBox ("チョコボを倒しました!") 9. Exit Sub 10. else 11. lblDamage.Caption = "チョコボの攻撃!主人公に" & enedmg & "のダメージ!" 12. End Iff 13.End Sub と、書いたんですが、「チョコボに& damage & のダメージ!」が表示された(ほとんど見えない)瞬間に 「チョコボの攻撃!主人公に" & enedmg & "のダメージ!」が出てきてしまうんですが、 処理と処理の間に間隔を入れるのはどうやってやるのですか? いろいろサイトをまわってみたのですが、見つからなくて・・・。
>>379 いいかげんでいいならSleepでも使う
ほんとにゲーム作りたいなら本でも買ってきたほうがいい
ツールチップの文字列を改行したいのですが、 どうすればよいのでしょうか。 vbCrLfではダメでした。 よろしくお願いします。
>>382 APIを使わなくてもできる方法は間違いなくあるのですが、
その方法を忘れてしまったのです。
vbCrLf を別の書き方で書くのですが、うーん、思い出せません。
VB6.0でCol=5,Row=10のDataGridあり、 セル一つ一つに適当な数字が入っていたとき この中から最大値と最小値のデータを取得したのですがどうすればよいでしょうか?
>>384 データを入れる時に最小と最大を記憶しておけばいいじゃないか
386 :
デフォルトの名無しさん :2005/06/27(月) 14:45:33
エクセルデータを呼び出したいんですけど、 なかなかうまくいきません。 また、###の部分はどう呼び出せばいいのでしょうか? どう改良すればいいのでしょうか? Private Sub main() Dim objExcelApp As Workbook Dim strExcelFile As String Dim strExcelSheet As String Dim MyValue As Variant Dim strMOji As String End Sub Private Sub Command1_Click() Text1.Text = (######) End Sub Private Sub Form_Load() strExcelFile = "C:\Documents and Settings\kumamoto\デスクトップ\バス停データ.xls" strExcelSheet = "Sheet1" Set objExcelApp = GetObject(strExcelFile, "Excel.Sheet") MyValue = objExcelApp.ActiveSheet.Cells(1, 2).Value Set objExcelApp = Nothing End Sub
まずはExcelを参照設定しろ。 話はそれからだ。というかそれで終わる。
>>386 dim を sub mainから出して、
Text1.Text=MyValue
変数のスコープが解ってないみたいだから、その辺の勉強したほうがいいよ。
あと、コードの先頭で Option Explicit した方がいい。
このスレで何度も荒らしみたいに三目並べの作り方を聞いたあほです。申し訳ありませんでした。 何とかラベルのコントロール配列で作れたのですが、コントロール配列にしても問題は解決しませんでしたorz ○□× □○× □□□ ↑の様な状態で右下をクリックすると ○□× □○× □×○ とならなければいけないのですが ○□× □×× □□○ となったり ○□× □○× □□○ ↑のように×が既に入っているラベルに×が入ってしまったりしてしまうんです。 どうすればこの不具合を修正できるでしょうか?
>>389 おい荒らしよ、ソースどこかにアップしろ
>>389 三目並べなんてどんな初心者でも作れますがね、その質問でバグを特定できるやつは天才かエスパーだけだよ。
ソースうpしてから再度質問しなちゃい。
ActiveX DLLを直接レジストリに書き込む場合、 レジストリのどこの位置に書き込めばいいのでしょうか・・・ 今まではWindowsScriptingHostを使用して、下記のコードで 起動時に登録、終了時に解除というようにしていたのですが、 Sub R_Input(sDLLName As String, Optional bKaijo As Boolean = False) On Error Resume Next Dim sCommand As String, myWsh As Object, sOption As String Select Case bKaijo Case Is = True sOption = "/u /s " Case Is = False sOption = "/s " End Select Set myWsh = CreateObject("Wscript.Shell") sCommand = "REGSVR32 " & sOption & Chr(34) & App.Path & "\" & sDLLName & Chr(34) myWsh.Run sCommand, , True End Sub このやり方ではWSHがインストールされていない環境だと実行できません・・・ そこでAPIを使用してレジストリに直接書き込もうとしたのですが、 自分の検索のやり方が悪いせいなのか、どこが書き込む位置なのか分からないのです・・・
>>392 レジストリに直接書かなくてもREGSVR32というプログラムにやらせれば
いいじゃないか。batファイルでもexeでも作ってさ。
>>392-394 RegSvr32使えばいいんだが、プログラム内で同期処理したいというなら。。。
そのファイルをLoadLibraryして"DllRegisterServer"か"DllUnregisterServer"で
GetProcAddressしたらそれを直接実行・・・・はVBだとできないから
CreateThreadしてWaitForSingleObjectしろ。
GetExitCodeThreadで成功したかどうか分かる。おわったらCloseHandleと
FreeLibraryを忘れるな。たぶんRegSvr32も同じことをしていると思われ。
うちんとこではうまくいってるぞ。
CreateThreadしたらすぐWaitForSingleObjectしてGetExitCodeThreadと
CloseHandleしろ。余計なことはするなよ。
396 :
395 :2005/06/28(火) 17:04:27
>>395 まちがた。
CreateThreadしてWaitForSingleObjectしたら、WaitForSingleObjectの
戻りがWAIT_OBJECT_0だったら成功です。
GetExitCodeThreadしたら、そのExitCodeでExitThreadしてください。
スマソ。
397 :
394 :2005/06/28(火) 18:18:24
>>396 サンクスです。
それにしても自分のレベルでは厳しそうですね・・・
もう少し勉強してから挑戦してみようと思います。
>>396 CreateThreadに渡せるのは DWORD (WINAPI*)(LPVOID)の関数だから危なくない?
>>398 OpenProcessで登録できるとは思えないなぁ。
>>389 単に○でも×でも無いところに×を入れるようにしたらいいんでないかい?
○×が入っているとかの判断が無いだけな気がするが?
402 :
389 :2005/06/28(火) 22:04:21
>>401 自分のと仕組み同じなのにとっても綺麗に出来ていてホレボレしますたorz
自分の家にはVBがなくて全部学校なのでFD買って今度持ってきます。
> コードが雑で、アルゴリズムにまとまりも何もありません・・・ 駆け出しの頃はしかたないよ。 それに少しでもきれいに書こうと思うなら他人に「ソース出せ」とか言って 頼るだけじゃなくて、自分で勉強しなくちゃダメだよ。 技術的に解らない部分があるならアドバイスはするけど、 いきなり上級者と同じレベルのコード書こうなんて奢らないほうがいい。 上達の速度に差はあれど、皆時間と努力を重ねて上達していくのだから。
404 :
401 :2005/06/28(火) 22:27:53
>>402 いや、ちょっと待った!!それはおかしい!!
自分で作っておいてなんだが、相当雑だと思う。
それなりに考えて組んだつもりですが、全然まだまだかと・・・
>>403 確かにそうですね・・・もっと努力していきます。
それと技術的な面で一つ質問なんですが、複数の変数を比較する場合は
IFでネストするか、Andで区切るしかないのでしょうか・・・?
例えば3つの変数が同じか比較する場合は
If S(0) = S(1) = S(2) Then ではエラーがでるので
If S(0) = S(1) And S(1) = S(2) Then としたのですが、
これはもっと効率的なやり方はありますかね?
完全なランダムかよw ほとんどの場合ストレート勝ち出来るな
408 :
406 :2005/06/28(火) 23:30:33
ごめんなさい。 もっと歯ごたえのあるよう頑張ってみます。
410 :
406 :2005/06/29(水) 01:17:30
>>410 簡単に勝てるぞ・・・
まじ端に○を置いて、真ん中の×を挟み込みようにまた○を置くと、
○ ○
×
○ ×
すぐこの形になるぞ。あともうちょい
412 :
407 :2005/06/29(水) 01:33:21
お馬鹿な質問ですが・・・・ 他人の作ったプログラムを修正しようとしたのですが Form上のオブジェクトが、変更できません。 但し、プロパティの変更による修正はできます。 なにか編集不可のロックのようなプロパティがあるのでしょうか?
>>414 ツールバーにカギの形をした「コントロールのロック」ってボタンがないかい
なかったら、ツールバーで右クリックして「フォームエディタ」にチェック付ければ出てくる
「書式」メニューの中にもあるよ
>>404 >複数の変数を比較する
ループって手もあるよ。
S(0)=S(1)=S(2)なら
isSame=True
for i=1 to 2
if(S(0)<>S(i))then isSame=False;Exit for
next
if(isSame)then
....
3変数なら等号をandで並べたほうが楽だし見やすいけどね。
三目ネタに首突っ込んでみる。 CPUはランダムじゃ、やはりつまらんだろ。 まあ意外性はあるかも知れんが。 ポイントは2つ。 1.最高でも9箇所の置き場所 …最高でも9箇所なんだからそれぞれに優位をどう評価するか? 2.縦3横3斜め2計8通りを走査すればいい …8方向の評価。○がいくつあるかは判定できるだろ? CPUに最低組み込むべき思考 全ての空きマスを走査し、 1.自分の王手があれば完成して終了。 2.敵が王手をかけていたらそこをふさぐ さて、3目は”負けはしない”思考がある。さあどうする?
419 :
デフォルトの名無しさん :2005/06/29(水) 17:15:27
お、なんか楽しそうだなぁ こういうのやったことないけど、俺も作って参戦してみよう (ry
ageちまった・・・orz スマソ
VBはトライアル版のようなものはないんですか?
5.0なら昔はダウンロードできた。 .Netなら今でもダウンロードできるだろうし。
CCEならまだ落とせない?
>>421 トライアル版と言う位置づけのものは無い。
過去に無償であったのはCCE(AcctiveXコントロールを作る専用の物)と
Embeded VisualBasic(WindowsCE用 VisualBasic)の2種類かな。
現在オープンβテスト中の、VB.NET Expressを使うと言うのも手。
426 :
デフォルトの名無しさん :2005/06/29(水) 19:33:23
おいおい、VB6には試用版があったでしょ。 付録としてついている入門書が何冊かあったので、今でも手に入る可能性は高い。 VB6の本ってまだ流通してるからね。
427 :
デフォルトの名無しさん :2005/06/29(水) 19:43:27
428 :
デフォルトの名無しさん :2005/06/29(水) 21:22:42
VB6 SP6 Access2000です。 ADOの処理を書いています。 レコードセットをDataGridのDataSourceに渡しています。 DateGridでユーザーが任意のレコードを選択し、cmdDeleteボタンをクリックすると該当レコードを削除します。 削除するレコード数は不定です。(つまり、ユーザーが削除したいだけ削除できる) Dim Withevents recTest as ADODB.Recordset 〜略〜 Private Sub cmdDelete_Cleck() recTest.Delete recTest.MoveNext’このままだと削除したレコードに参照が行ってるのでMoveNext if recTest.EOF = True then recTest.MoveLast End Sub とこんな感じで記述してますが、MoveNextした段階で、MoveCompleteが3回も発生します。 MoveCompleteは一回発生してくれるだけでいいのですが・・・。 MoveCompleteイベントが初めて発生した段階で、引数adStatusにadStatusUnwantedEventを設定しようとも思ったのですが、 そうすると今度は、後に同じレコードセットでMoveNextしてもMoveCompleteイベントが発生してくれません。 何かよい回避方法はあるでしょうか。
○×祭りは終わってましたか(´・ω・`)
430 :
デフォルトの名無しさん :2005/06/30(木) 01:01:40
それってレコードセットで制御しててコマンドボタンで削除してるんでしょ? だったらレコードセットを選択したKeyかなんぞをFindかフィルタかなんかでカレントに設定してDELETEメソドで消してやって・・・・ を繰り返した後にRefleshかけてやればきれいに動かないかな? あんまVB6のDBGridは使ったことないんで勘違いだったらスマソ
431 :
428 :2005/06/30(木) 07:24:12
すいません、上記に書きもれありました。
1回の作業で削除できるレコードは1レコードです。削除する時は1レコードづつ選択→削除です。
>>430 DeleteしたあとRefresh、試してみます。
432 :
デフォルトの名無しさん :2005/07/02(土) 04:54:22
VBで作ってるプログラムでhtmlを読んでname属性を拾いたい時に name="[aaa]"みたいな感じで[]が入ってるものをそのまま書くと []の前に強制的にスペースを入れられ、しかも取得することができずエラーが出ます 同じフォームの他のname属性は取得できてるので[]が原因だと思うのですが どう記載すればよいでしょうか? ちなみにhtmlの方は自サイトではないのでいじることはできません よろしくお願いしますm(_ _)m
>>432 ダブルコーテーションは、2つ続けて書く。
""
>>433 えっとですね、こちらの勘違いだったらすみませんが
もしかすると質問を勘違いされたかもしれません
つまりname属性が[aaa]なのですがこれをVBのプログラム中に
記載したいのです でも入力すると [aaa]とスペースが強制的に入ってしまい
それが原因でエラーが出るのです
つまり目的のフォームの名前がform、インプットのnameが[aaa]とすると objIE.document.form.[aaa].Value = password.Text このように入力したいのですが強制的にスペースが入りこうなります objIE.document.form. [aaa].Value = password.Text
436 :
デフォルトの名無しさん :2005/07/02(土) 15:37:12
>>435 VB では DOM オブジェクトは直接は扱えないよ。
437 :
435 :2005/07/02(土) 16:50:29
すみません、別のアプローチにて自力解決しました
438 :
デフォルトの名無しさん :2005/07/02(土) 23:08:49
なんで、VBはVBAよりも遅いの? というか、PC386よりもめちゃ遅い、理由はなに? 円周率を計算するプログラムを独自に組んで最初VBAで遣ってたけど あまりに遅いので、VB20005βとかいうのがあったので、苦労して 移植しなおしました。しかし、遅過ぎです。何かを止めないといけないのではと 類推するのですが。
(´-`).。oO(さすがに14歳は越えていないよね)
>>438 VB 2005 Express Edition Beta2 のことか?
それなら.NETだから遅いんだろ。
それからスレ違いなんで以後はVB.NETのスレで質問するように。
>>435 ん? HTMLはこうなってるって事?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML><HEAD><TITLE>test</TITLE></HEAD>
<BODY>
<FORM name="form">
<INPUT type="text" name="[aaa]">
</FORM>
</BODY></HTML>
コードで扱う場合は参照名付けを考えないとなぁ
先頭に[というかw [ ] 自体どうよ? formってのも名前ガチンコ危なげw
VB6でDHTML、DOMのオブジェクトモデルを扱うには
Microsoft HTML Object Library(mshtml.tlb)を参照設定する。
VBのFormにWebbrowser Contorolを使っていると仮定すると…
Option Explicit
Private Sub Form_Load()
Call ObjIE.Navigate2("test.htm")
End Sub
Private Sub ObjIE_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim ObjDocument As MSHTML.HTMLDocument
Dim ObjFORM As MSHTML.HTMLFormElement
Dim ObjINPUT As MSHTML.HTMLInputElement
Set ObjDocument = ObjIE.Document
Set ObjFORM = ObjDocument.Forms("form")
Set ObjINPUT = ObjFORM.elements("[aaa]")
REM 参照例
ObjIE.Document.getElementsByName("form")(0).All("[aaa]").Value = "test"
End Sub
あ、自己解決したのか。バイバイw
VBに限った話しではないのだが、 変数名(関数名や定数名やいろいろ)を英語で付けるのが 主流になったのは何故だが知っている人いる? 日本人なんだから、変数名くらい日本語使いたくないか? 別に半角カナの変数名でもいいと思うのだが・・・
>>444 変数名を日本語で付けるのが主流だった時期なんてあったか?
それに、関数名や変数名で使う英語で難しいものなんて少ないだろ。
ライブラリ類が英語なのに、自分の部分だけ日本語なんて違和感あって嫌。
趣味でやってるなら止めはせんが。
>>444 純国産コンパイラなんて数えるほどしかないので、
予期しないエラーが出る可能性がある。
VBAは日本語変数が多いけど。
>>445 N88日本語BASIC(86)
>>447 マイコン少年だったけど、88ベーシックで日本語変数なんて使わなかった。
ぴゅうたベーシックぐらいじゃないのか?日本語ネイティブ。
まあ>444はひまわりでも使っとけってこった。
VBからC++に変数をポインターで渡して計算したものをVBにまた返すプログラムなんだけど プログラムをvisual basic 6.0のGUI上で実行すると「オーバーフロー」っていわれてエラーがでる プログラムをコンパイルしてexeを作り、exeを実行するとエラーがなにもでない C++上でデバッグしてもエラーが出ない こんなことありえるの?プログラムをさらしたいんだけど 長くてどの部分をさらせばいいのかワカンネ('A`)
452 :
451 :2005/07/04(月) 14:24:18
ごめん言葉が抜けてた エラーが出るのはC++から帰ってきた後にC++で計算させた変数をmsgboxに出力させるとエラーがでます
>>451 ○VB
・Declare文
・C++側を呼んでいる行
・エラーが出る msgbox の行
○C++
・関数のプロトタイプ
の4行ぐらい晒せるでしょ?
あるないでいったらある。 デバッカはあくまでVB6.exe上での実行で、実EXEの実行と若干異なる動作をする。 で、原因は多分だがメモリー操作ミスをどっかでやってるんだよ。 でも、普通多いのは逆パターンなような。 デバッカOK、実行どっかーん。
変数名が日本語でも問題ないだろーが!! だったらコメント欄も英語で書きやがれよ
>>455 本気で言ってるなら、日曜プログラマーでいてくれ。
仕事でそういうことを言う奴いたら本当に痛い。
昔納品されたソースを読んでたら sain とか pai とか ensyu とか書いてあった。 C言語なのに引数使わないで全部グローバル変数で値渡してるし…
まあ>455はひまわりでも使っとけってこった。
461 :
451 :2005/07/04(月) 23:34:57
>>453-454 いろいろやってみたら宣言文は問題なしでした
C++のプログラムにミスがあるようです
ポインターをどこかでαβοοη..._〆(゚▽゚*)しているようです
これのバグ探すの・・・('A`)
462 :
451 :2005/07/05(火) 00:31:54
バグ発見したよ sqrtをマイナスの数で計算してた・・・ 512回回るforループの最後らへんのループでそうなってたから気がつかなかった_| ̄|○ VBのmsgboxがsqrtでマイナスがでちゃったやつを参照してないのに止まるとはなかなか(・∀・)イイ!!
464 :
デフォルトの名無しさん :2005/07/05(火) 07:00:24
VBからIEを起動してページの移動をさせている時に ある特定のページ(error.htmlとします)にたどり着いた時に top.htmlに戻るという処理はどのようにすればよいのでしょうか?
>>455 昔はコメントも英語で書いていたよー。
いや、単に日本語を表示できない環境だっただけだが。
466 :
デフォルトの名無しさん :2005/07/05(火) 12:53:44
VB6 SP5です。 ハンドルからオブジェクトを得るにはどうしたらよいでしょう? Form1のオブジェクトgroundのハンドルが111555Lだとして、 ground.show の代わりに <111555>.show としたいのです。
467 :
ヒデ坊 :2005/07/05(火) 13:31:13
ちょっと教えてください。 開発用パソコンの画面解像度は1280*1024にしているのですが、そこでデザイ ン・開発したプログラムを、画面解像度が1024*768の動作用パソコン上で 動作させると、文字の大きさやボタン等コントロールの大きさが微妙に違い ます。そのため、開発環境ではきっちりデザインしたつもりが、コマンドボ タンから文字がはみ出て欠けたりします。まだ実験はしていませんが、もしか すると画面解像度は同じでも画面サイズが違うパソコンで動作させると、デザ インの崩れはないかもしれませんが文字の大きさが違うかもしれません。 というわけで、画面解像度や画面サイズが違うパソコンで動作させても、 開発時にデザインしたウィンドウの大きさや文字の大きさをそのまま保って 表示させるにはどのようにしたらよいのでしょうか。
>>466 ハンドルとは何で取得したハンドルの事ですか?
「ハンドル」と一口に言っても色々種類があるのでそれだけではアドバイスし様が在りません。
>>467 フォームのフォントプロパティウィンドウを開く→OKで閉じる→保存
これで.frmの内部でフォントが明示的に指定されたはず。
(解像度の違うPCでの動作確認はしていない)
前提としては開発環境のフォントと実行環境のフォントが一致している必要があるけど。
ScaleMode を vbTwips [ 1 - Twip ] から vbPixels [ 3 - ピクセル ] にする。
Resize イベントで配置を変更する場合は Left、Top、Width、Height ではなく、
ScaleLeft、Scale・・・ を基準にする。
考えつくのはこんなところかな?
実際に解像度の違うPCで動かす様な事がないので太鼓判は押せませんが。
470 :
466 :2005/07/05(火) 14:45:45
>>469 ウィンドウハンドル、hWndプロパティの値です。
471 :
デフォルトの名無しさん :2005/07/05(火) 14:52:49
データベースのテーブルがすでにあるか調べる関数はありますか? エラーをチェックしてやるしかないのでしょうか。
>>470 諦めてAPIを使え。
つ「ShowWindow」
>471 あるがスレ違い(VB自体の関数にはない) それ以前にDAOなのかADOなのかoo4oなのか、 どういうアクセス方法かを書かないと誰も答えられん。
>>471 、
>>473 プログラムとかミドルウェアよりDBMSが何かが大事じゃないのか?
まあ、スレというか板違いだね、DBに行きなさい。
475 :
デフォルトの名無しさん :2005/07/05(火) 16:47:52
パネルやピクチャボックスに追加したテキストボックスコントロールを削除すると なぜかアプリケーションが閉じられなくなってしまいます。 Closeメソッドは効かないのですがApplication.Exitならば終了できます。 何が原因で起きているのでしょうか?
>>475 そもそも、コントロールをどのような手段で動的に削除してるんでしょうか?
それと、閉じるのはフォームですよね、アプリを閉じるならEndステートメントでも何でもですよ。
ついでにVB6の話か?Applicationオブジェクトって?
477 :
475 :2005/07/05(火) 17:16:22
>>476 すいません、.NETの話でした。
書き込むスレ間違えてしまいました。
スレ汚してすいません。
キーボードから整数を入力し、逆に並べて表示するプログラム、入力された 整数を並べじゃ得て最大値・最小値を表示するプログラムがわかりません。 おしえてください。おねがいします。
>>478 課題は自分で達成しなさいね。
Text1.Text = 整数 & " " Text1.Text
最大値 = Max(最大値,整数)
最小値 = Min(最小値,整数)
Text2.Text = 最大値
Text3.Text = 最小値
tabIndex=5のテキストボックスにカーソルをsetFocusであわせることって出来ますか?
For Each ctlObj In Form1.Controls If ctlObj.TabIndex = 5 Then ctlObj.SetFocus Exit For End If Next
482 :
ヒデ坊 :2005/07/05(火) 22:14:03
>>468 いえ、OSもいろいろだし、DPIもいろいろです。
できれば、動作用PCのそれらの違いを乗り越えて(無視して)、開発時の
デザイン通りに表示してくれればと思います。
(´-`).。oO(TwipやPointで指定してもデザインが大幅に崩れるんだっけ? Dr.GUIが解説してた記事がMSDNにあったキガス)
485 :
デフォルトの名無しさん :2005/07/06(水) 00:03:20
順位付けを教えてください
486 :
デフォルトの名無しさん :2005/07/06(水) 00:13:27
どなたかぁ〜!!!
なんか回答者が超能力を試されるスレになってきたなw
488 :
デフォルトの名無しさん :2005/07/06(水) 00:20:48
ダメですか???
>>485 一番最初のものに一位、次に二位、その次に三位、・・・
って付けていきます。
こういうのはMSDNとかには載っていない大変高度な話ですが、
小学校の教科書ぐらいの難しい本にはたぶん載ってます。
490 :
デフォルトの名無しさん :2005/07/06(水) 01:02:27
そのうち前世で××の戦士だったひと連絡待ってます、 みたいなノリのレスだらけになったりしてw
491 :
デフォルトの名無しさん :2005/07/06(水) 15:08:29
VB6.0使用です。 数値がピラミッド型に並んでいるデータ構造があって、そこから数値を指定すると 2つ下階層の4つの数値が取得できるようなプログラムを作りたいと思っています 。数値の並びは1階層とばして2階層から次の値が開始するような形式です(下の 数値の数は4つになる)。 1を指定すると2,3,4,5が取得できて、3を指定すると10,11,12,13、9を指定すれば 34,35,36,37です。 この考え方で、どの数値が指定されても4つの値を取得できるような関数を作りた いのですが、どうにもわかりませんでした。是非アドバイスお願いします。
ぐーぐる様で、データ構造 ツリー構造 VB で検索してみる。
>>491 Public Function f(ByVal n As Integer) As Integer()
Dim r() As Integer
ReDim r(4)
r(0) = n * 4 - 2
r(1) = n * 4 - 1
r(2) = n * 4 + 0
r(3) = n * 4 + 1
f = r
End Function
Private Sub Form_Load()
Dim r() As Integer
r = f(1)
Debug.Print r(0)
Debug.Print r(1)
Debug.Print r(2)
Debug.Print r(3)
End Sub
494 :
デフォルトの名無しさん :2005/07/06(水) 16:10:02
>>493 ありがとうございました。無事に値を取得する関数ができました。
自分の頭の回転の悪さがなんとも、、、
496 :
デフォルトの名無しさん :2005/07/06(水) 18:32:25
VB6でフレームやSSTabの中のコントロールを外に出したり、 逆に外のコントロールを中に入れたりするにはどうすれば良いのですか? D&Dだと外に出そうとしても出せないし、中に入れようとしても位置的に重なるだけだし。
>>496 フォームデザイン時の話であれば、切り取り&貼り付け
498 :
デフォルトの名無しさん :2005/07/06(水) 22:47:42
VB6で要素数が不定な三次元配列の内容をファイルに保存し、 起動時にそれを読み込みたいのですが、なにか良い方法は無いですか? 今は、たとえばhoge(3,1,2)という配列の場合tsvに区切り入れて 0-0-0 1-0-0 2-0-0 2-0-0 0-1-0 1-1-0 2-1-0 2-2-0 区切り 0-0-1 1-0-1 2-0-1 2-0-1 0-1-1 1-1-1 2-1-1 2-2-1 区切り 0-0-2 1-0-2 2-0-2 2-0-2 0-1-2 1-1-2 2-1-2 2-2-2 のようにちまちまと保存したり読み込んだりしてるのですが、 実際には要素数が多いのでかなり時間が掛かります。 とにかく高速に前回終了時の配列を再現したいのですが 良い方法をご存じの方、どうか教えてください。
>>499 もうしらばらくVB使ってないんで自信はないけど、多次元配列の場合は
バイナリモードだと書くときはよくても読み出すとき困る気がした。
バイナリモード使うなら配列を構造体で包んでやる必要があったと思う。
me.controls.addとかでtextBoxを追加していきたいのですが addする際にデザイン時にしか設定できない値を変更することってできますか? scrollbarsとかの
>>501 それはできなかった気がするけど、一つ雛形でテキストボックスを作っといて、
プロパティも設定して、それを複製するのはできたはず。
ActiveX コントロール作ってるんですけど、自コントロールにフォーカスが無いとキーアップ・キーダウンイベントが受け取れなくて困っています。 例えば、あるキーが押されたら、そのキーが押されたことが分かればOKなんですが。
506 :
498 :2005/07/07(木) 17:17:59
>>499 回答ありがとうございます。
しかし500さんの言うように読み込みがうまくいきません。
構造体使うのは避けたいので、他になにか方法をご存じの方、
又は多次元配列をGetステートメントで読み込む方法を具体的に知ってる方
引き続き宜しく御願いします。
>>498 こんな風にすれば問題ないと思うのだが。
Dim r() As Integer
'ReDim r(a, b, c)
Public Function r_Save()
Open "C:\VB.dat" For Binary Access Write As #1
Put #1, , LBound(r, 1)
Put #1, , UBound(r, 1)
Put #1, , LBound(r, 2)
Put #1, , UBound(r, 2)
Put #1, , LBound(r, 3)
Put #1, , UBound(r, 3)
Put #1, , r
Close #1
End Function
Public Function r_Load()
Dim LB1 As Long, UB1 As Long
Dim LB2 As Long, UB2 As Long
Dim LB3 As Long, UB3 As Long
Open "C:\VB.dat" For Binary Access Read As #1
Get #1, , LB1
Get #1, , UB1
Get #1, , LB2
Get #1, , UB2
Get #1, , LB3
Get #1, , UB3
ReDim r(LB1 To UB1, LB2 To UB2, LB3 To UB3)
Get #1, , r
Close #1
End Function
>>506 うまく行かないと言うだけじゃ通じない。
構造体を避ける理由も明記するべき。
509 :
503 :2005/07/07(木) 18:22:38
510 :
デフォルトの名無しさん :2005/07/07(木) 20:09:04
おしえてくださいませ 1234@4567755@3425323@5235235 各数字の桁が不定な数値を@記号区切りで持っているデータファイルがあります。 一番最後の@記号意向の値を取得したいです。 よろしくお願いします。 @記号も数が不定です。
instrrev
512 :
デフォルトの名無しさん :2005/07/07(木) 20:54:50
>>511 当方VBが5なのですが、認識されない関数でしょうか?
VB3.0と6.0にあるのは確認している。
515 :
デフォルトの名無しさん :2005/07/07(木) 21:23:16
APIだったのですね。標準関数かと思い込んでおりました。 感謝いたします こちらのAPIでいけそうです。ありがとうございました。
516 :
デフォルトの名無しさん :2005/07/07(木) 21:25:14
ああAPIではないですね。すみません。
>510 instrrev split お好きな方をどうぞ
VB5でSplitが無いっていうのが判った段階で、普通に関数作れば5分で終わるような・・・。
>518 >142
今回は余計というか、単なる無駄だったな
コンボボックスへの値の設定ってどうすればいいのですか? Textプロパティだと取得は出来るけど設定はできないってエラーが出る。 コンボボックスに表示されてる値って、追加したアイテムの中から インデックス番号でしか設定できないのですか?
>>522 スタイルを何にしてるの?
多分そこを理解してないからそういう疑問になるんだと思うんだけど。
そのあたりのヘルプ見て、コンボなのかドロップダウンなのか、貴方が望む形式を選択してからもう一度。
.ItemData
VB6のMSHFlexGridコントロールで、列や行に対して 文字割付(上寄せとか左寄せとか)や、修飾(文字色とか太字とか)を 設定するにはどうすればよいですか? 今は列や行に対してではなく、セルに対する設定をForで回してますが非効率的なので。 Spreadsheetコントロールならそういうことも出来るのですが、 MSHFlexGridコントロールを使いたいので、どうかご教授お願いします。
>526 よく読め
m9(^Д^)プギャー
既存のアプリケーションに手を加えずに、 ActiveXなどのコントロールをアドインして、 機能拡張する事は可能でしょうか? アプリ自体にアドオンが考慮されていないとダメそうですが。
>>530 可能。
ヒント
Class、Implements。
VBのアドインもVBで作成することが可能だしな。
>>531 それは既存アプリがClass化されている事が前提で、
そのClassをインプリメントして作成する?ってこと
EXEの内部にファイルを埋め込むことってできるのでしょうか? 例えば単にWAVファイルを再生するソフトを作ったとして、 外にあるファイルを再生するのではなく、実行ファイルの内部に埋め込んだ WAVを再生するようなことをしたいのですが・・・
出来るよ
>>533 サイズが小さければリソースとして埋め込める
でかければデータとして工夫すれば埋め込める
めんどくさい事すればEXEの後にくっつけて埋め込める
>>535 容量は大きいので、データとして工夫して埋め込む方法か、
EXEの後にくっつけて埋め込め方法はどうすればいいのでしょうか・・・?
自分の検索の仕方が悪いのか、「VB EXE ファイル 埋め込み」などで検索してるのですが、
全然関係のないページばっかりで、目的の方法が見つかりません・・・
>>536 PEフォーマットを調べLHAのような自己解凍ソフトのように
EXEの後にくっつけるか
ソースコードとしてbinaryの配列にconstでつっこむか
小分けにしてリソースとして登録するか(これは上限あったかな?)
>>537 有り難うございます。
PEフォーマットについては難しそうなので、
リソースとして登録する方法でやろうと思います。
>ソースコードとしてbinaryの配列にconstでつっこむか
これが個人的に詳しく聞きたいのですが・・・
でも、もうちょっと自分で調べて勉強してみます・・・
おおっ!!リソースとして登録する方法は、すんなりといきました!! 上限がなければこれで充分そうです。
540 :
デフォルトの名無しさん :2005/07/11(月) 14:19:31
これから大学でVBを必要とするのですが自主的に勉強って感じなんですよ でまずどんな本を使って勉強すればいいですか??
>>540 VB.NETじゃなくて6.0もしくはそれ以下なのか?
やる価値も無いし、本も手に入りづらいぞ
だな。 未だにVB6以前使ってる奴 >>> 今からVB6始める奴 >>>壁>>> VB.NET使ってる奴 VB.NETなんてやるくらいなら他言語使えよって感じだ。
VB以外使えないやつ、を忘れてるぜブラザー?
未だにVB6以前使ってる奴 >>> 今からVB6始める奴 >>> VB以外使えないやつ >>>壁>>> VB.NET使ってる奴
そいつは使い物にならないので会社から去っていった。 忘れさせてくれ。
.netをやる価値ないとか言ってる奴、じゃあ次の自分のメイン技術を何にしようとしてるか言ってくれよ。 Windowsクライアント・サーバ両面において、.netは十分使えるし、シェアを考えた場合Windows専用ってのもありだ。
>>549 で?やっぱ批判だけで中身ないんだけ。全く具体的な反論ができない。
> じゃあ次の自分のメイン技術を何にしようとしてるか言ってくれよ。 > じゃあ次の自分のメイン技術を何にしようとしてるか言ってくれよ。 > じゃあ次の自分のメイン技術を何にしようとしてるか言ってくれよ。
なんだよ、単なる基地外か。 まあ、マイクロソフト製品を批判してればなんとなくかっこいいもんね。w
VB.NETを新規に始めるなら、C#とかのほうがいいんじゃねーの?って話に見えるんだが違う?w
なにこの可哀相な子。 きっと自分が使ってるものを批判されたからキレちゃったんだね。 マとして以前に人間としてレベルが低すぎてかなわない。
>>553 .netフレームワークでは別に言語選択それほどこだわらないけどね。
好みとしてはC#のほうがすきだけど。どっちでもできるからいいやって感じで。
で、話題にしてたのは.netフレームワークそのもののつもりだけど、まあVB.netスレだから言語限定に取られたか?
それに対抗しうるフレームワークって中々ないよね。
Javaはクライアントサイドが致命的にダメだし。
まぁ.netフレームワークそのものが糞だけどな。
>>556 まあとりあえず理由も示さずに、MS製品非難しとけばなんとなくかっこいいもんね。
反体制的だし、技術者みたいに見えるし。
>>553 もう頭に血が上ってそれどころじゃないようなかんじだな、彼は。
暑くなるとこういう熱いのが湧くのは仕方ないこと
.Net Frameworkは死滅する運命にありますからね。 もってあと数年かな?
一人だけ自分が基地外だってことに気付いてない奴が居る件
(´-`).。oO(どんなに熱くなっても技術的な話は一切しないのな)
「しない」じゃなくて「できない」んでしょ。 周りを無意味な書き込みと罵る割には、 自分も無意味な書き込みばかり繰り返してる。
理由無くVBやM$批判する奴は結局大衆の真似してるだけだろ みんなが糞って言ってるから使ったこと無くても糞と言う
どうでもいいけど、糞と黄って似てるよな。
OS XP VB6.0SP5 OSがNT系のサービスはVBStationやらのサイトとかで見つかったけど スタートアップ(msconfig)のソースまたはサンプルがググっても見つからない。 知っている人いたら教えてくださし
>>567 質問の内容がまったく理解不能なんだが、とりあえず理解できた部分だけでも答えてやろう。
msconfigのソースコードはMicrosoftとNDA契約を結ばないと公開してもらえないはず。
ググルだけ無駄。
569 :
デフォルトの名無しさん :2005/07/12(火) 14:52:53
WinXP + VB6.0 + MS ADO6.0 + MySQL4.0 + ODBC adoのコントロール名が adoAlbum 普通に検索するようなプログラムを作ろうと、 以下のプログラムを書いてみたところ、 MySQLの方からSyntaxエラーが帰ってきました… ちなみに、RecordSorceを初期値のまま全件表示はうまくいってます。 また、Debug.Printした結果を mysql> へコピペした場合は意図どおりに検索してくれます。 adoAlbum.RecordSource = "select * from albumList where artist_id=" & artistID & ";" Debug.Print adoAlbum.RecordSource adoAlbum.Refresh
570 :
569 :2005/07/12(火) 14:58:57
adoコントロールのプロパティ。 レコードソース -> コマンドタイプを 「1 - adCmdText」 に変更したらうまくいきました。 お騒がせしました。
超初心者ですいません。VB6.0です。 フォーム上にある3つのTextを1つのデータとして これらを配列を使ってsave.txtに保存したいのですが、 1つ目のデータは保存することが出来るのですが 2つ目のデータを保存すると1行目のデータが 上書きされてしまいます。 C言語のファイルポインタみたいなものがあれば良いのですが… お願いします。
・追加モードで開く ・テキストを結合して書き込む なんでC言語が出てくるんだ
>>572 アペンドモードでやったら解決しました。
簡単な問題だったのねorz
C言語は…
きにしないで下さいw
575 :
デフォルトの名無しさん :2005/07/12(火) 21:03:37
現在、NT4.0Serverで、VB6で作成したバッチAPLを稼動させてます。 このVB6で作成したバッチAPLを、Windows2003Serverで稼動させる場合、 Windows2003Server上でリコンパイルする必要があるのでしょうか?!。 動く動かないでいうと、そのままのExeで動くのですが、PCServerの H/Wスペックがあがってるにも関わらず、バッチAPLのレスポンスが遅くなって しまっています。 これって、Windows2003Server上でリコンパイルすれば解決することで、 知ってる人にしてみれば、当たり前のことなのでしょうか?!?!?!。
>>575 動いてるなら動くんでしょ?
リコンパイルは基本的に不要。
バッチが何やってるかわからないのに、なぜ遅くなったか判ったらエスパーです。
デバックコードを埋め込んで遅延理由を探るのがプログラマの仕事じゃないのか?
577 :
デフォルトの名無しさん :2005/07/13(水) 00:16:10
すいません、、、プログラマとも呼ばれない類のもので。。。 単純に、同一のWindows2003Server上で、NT4.0上で作成したVB6のexeを実行 した場合と、そのソースをそのWindows2003Server上でVB6でリコンパイル して実行した場合を比較すると、実行結果はともに正しいのですが、 リコンパイルしたexeのレスポンスが、単純にもってきたexeより、 2〜3倍よいのです。 コンパイルしたServerOS環境でレスポンスが異なるってことは、 ServerOSのシステムファイルやらによって、動くけど、効率の差 が発生するものなのかしら。。。?!、、と思っての質問です。 愚問なのでしょうが、アドバイスいただきたくお願いします。
>>577 ・4.0と2003で作成されたEXEをバイナリで比べて違いがあるか
・コンパイルのオプション(最適化等)は同じか
・VB自体のバージョンとサービスパックは同じか
579 :
デフォルトの名無しさん :2005/07/13(水) 00:57:10
>・4.0と2003で作成されたEXEをバイナリで比べて違いがあるか exeのサイズを見ると、4.0上で作成したexeより、2003上で作成したexe のほうが、小さいです。 >・コンパイルのオプション(最適化等)は同じか 4.0上でのコンパイルオプションについては、これから確認してみます。 2003上でのコンパイルオプションは、V何も指定等していません。 言い換えれば、VB6のデフォルト値のままとなります。 >・VB自体のバージョンとサービスパックは同じか VB自体のバージョンは、6.0で同じです。 サービスパックについては、4.0上はこれから確認してみます。 2003上では、適用していません。 いかがなものでしょう。。。。
>>577 君がプログラマでないんなら金だしてプログラマに頼みな。
って、とりあえず煽っておいとく。(先の質問の答えになってねーべ)
実は俺も経験がある。
俺の場合使ってる外部OCXのバージョンが違っていたというorz系の理由だったが。
とにかく何をやっているのかぐらい示してくれんと助言もできんと思うぞ。
あとコンパイルオプションでP-CODEにしてるってことはないか?
581 :
デフォルトの名無しさん :2005/07/13(水) 01:24:41
アドバイスいただき、ありがとうございます。 > って、とりあえず煽っておいとく。(先の質問の答えになってねーべ) 言われるとおりで、、、。 > とにかく何をやっているのかぐらい示してくれんと助言もできんと思うぞ。 処理概要は、MS-SQLserverDBに、一括更新処理をしています。 GUI等はつかっていません。 ソースを見てみると、IF条件とSQLばかりのものです。 > あとコンパイルオプションでP-CODEにしてるってことはないか? 2003上では何ら指定をしていないデフォルトでコンパイルしているの ですが、NT4.0上での作成時については確認してみないと不明です。 早速確認してみます。 ちなみに、、、P-CODEか否か?!、exeから確認する方法はあるので しょうか?!。
> ちなみに、、、P-CODEか否か?!、exeから確認する方法はあるので > しょうか?!。 Dependency Walkerで見たら、 使用しているMSVBVM60.DLLのエクスポート関数の数に 違いが有ったので、これで判断できるのでは?
長さの異なる複数の文章を改行で区切って格納したテキストファイルを シーケンシャルアクセス(For Input)で開いている状態で、 次に Line Input# で読み込むレコード位置が ファイルの先頭から何バイト目かを知る方法はありますか?
次に読み込む位置=現在の位置だろ
585 :
デフォルトの名無しさん :2005/07/15(金) 07:15:13
>>583 >長さの異なる複数の文章を改行で区切って格納したテキストファイル
つーことは、今から読み込む位置が
[いくつ目のデータか] * [データのバイト数]
じゃ算出できないってことか。
先頭からいちいち加算すれば、って話でもないようだな。
loc()じゃだめ?
iniなどのファイルを作らず、レジストリも使わずに 設定を保存する方法って無いですか? 実行ファイルに毎回設定情報を埋め込むとか。 もし可能なら具体的な方法か、解説サイトの紹介をお願いします。
>>587 ウイルス対策ソフトが反応しそうな予感。
それに自分自身のファイルには書き込めないんじゃない?
なぜにそげなことする必要があるのでごわすか?
全く環境を汚さずに設定を保存するってのは基本的に無理でしょ。 DBとかに接続してるなら、そこに全部保存すればまあローカルは汚れないけど。 そもそもVB6 アプリ入れてる段階で、そういう環境変更を嫌う人の要件を満たしてないと思うけど。 VCなどの完全スタティックリンクなEXEか、.netのノータッチデプロイとか、Webアプリじゃないと。
実行ファイルに別のEXEをリソースとして埋め込んで、 自分自身のコピーに設定情報をバイナリの最後に埋め込んでから、 終了時にリソースからEXEを呼び出して元の実行ファイルのプロセスが終了したら オリジナルを削除し、コピーをオリジナルのファイル名に戻す。
浅いな
593 :
591 :2005/07/15(金) 15:32:11
ちょっと間違えた。 >終了時にリソースからEXEを呼び出して元の実行ファイルのプロセスが終了したら >オリジナルを削除し、コピーをオリジナルのファイル名に戻す。 これちょっと考えたら無理だな。 終了時にリソースからEXEを適当な場所に復元して、shellで実行。 元の実行ファイルのプロセスが終了したら、オリジナルを削除し、 コピーをオリジナルのファイル名に戻す。
594 :
591 :2005/07/15(金) 15:40:06
つまりはリソースに埋め込む実行ファイルを先に作る。 これは単純に元の実行ファイルのプロセスが終了しているのを確認し、 オリジナルを削除して、コピーを元に戻すだけの処理。 ファイル名などは引数で渡せばいいだけ。 元の実行ファイルにも、終了時に自分自身のコピーを作成し、 設定情報をバイナリの最後に埋め込む処理を追加。 その後にリソースからEXEファイルを適当な場所に復元してShellで実行。 もっといい方法あるなら俺にも教えてくれ。。。
>>592 じゃないが、明らかに浅いよ。
それが言ってるように簡単に動的に出来れば、誰も(それこそウィルス作成者もw)苦労しないって。
596 :
591 :2005/07/15(金) 15:45:56
これもよく考えたら、リソースから復元したEXEがゴミとして残るな・・・ 俺全然だめぽ・・・
597 :
デフォルトの名無しさん :2005/07/15(金) 16:23:11
VB.NETから誘導されてきました。 VB6.0なんですが、コンボボックスのIMEモードを全角ひらがなにしておくと、 コンボボックスから次ぎのコントロールにフォーカスが移ってもIMEのモードが そのまま引き継がれてしまいます。(次ぎのコントロールのIMEモードを半角にしていても) これって仕様ですか?バグですか? でもって解決策はないでしょうか?
>>597 Private Sub xxx_GotFocus()
xxx.IMEMode = vbIMEModeOff
End Sub
>>587 設定ファイルじゃなんでダメなんだろ。
解析されたくなかったら、それなりの対策すればいいんだし。
まあなんていうか、能力がない奴に限って その乏しい能力をどうでもいいようなことに注ごうとするのはなんでだろうな。 自分探しの一種みたいなもんだろうか? こんなことができるのは俺だけだ、って。 じっさいなそんな下らないことをするのはアンタだけだよ
このスレって回答できそうもない質問がくると 理由聞き出して罵倒する方向に持っていこうとする可哀相な奴が多いよな。 知ってるなら答える、知らないならスルーでいいのに 初心者ほど自分に答える義務があるとでも勘違いしているかのように全ての質問に喰っていく。
まあなんと言おうと馬鹿なものは馬鹿だし、 無意味なものは無意味だとしか言いようがない。
と、決めつけていれば 己の無知を認めないことで自尊心を守ることが出来る というわけだなw
>>603 この世に意味のないことなんてないぞ?
あえて言えばお前が生まれてきたことぐらいか…
あるページのソースを取得し、その中から文字列を取得したいのですが、 変数の中にソースを代入するのと、テキストファイルを作ってそこにソースを書き出すのでは、どちらが効率が良いでしょうか? また、どうすればできますか?
>>606 普通の使い方なら、変数の中に文字列を代入してからのほうが扱いやすい。(ていうかここは必ず通るでしょ)
ファイル経由で解析を行うライブラリがあって、それが強力なものであるならファイルで管理も考えるかな。
検索関係はRegex,InStr,InStrRevなんかでググルといい。
ファイル関連はFileSystemObjectなんかでググルといい。
「ページ」が何なのかによって回答も違ってくるよ。
>>583 遅レスだが。
シーケンシャルでのloc()は128で割った値を返すってあるね。
大きなテキストを扱うことを考えると、やっぱり地道に加算?
VBスクリプトで、非アクティブウィンドウでボタン連打の自動操作 しながら、アクティブウィンドウで普通の作業ってできますか? 難しくなければ、ご教授してください。お願いします。
無理
611 :
525 :2005/07/16(土) 12:00:18
>>525 も宜しく御願いします。
最初にも書きましたが、SpreadsheetではなくMSHFlexGridを使いたい為、質問に来ています。
>>611 FlexGridでは無理。
2行増えるだけだから、効率悪いとは思えないし。
効率悪いかどうかは使う奴が決めること
正直、そこにある鋸を使えば簡単に切断できるものを、わざわざカッターナイフで 切りたいって奴は頭がおかしいとしか思えない。 しかも、どうしてもカッター使いたいなら、それは頑張って手を動かすしかないわけだが、 その頑張って手を動かすのがイヤなんだと。 完全に狂ってる。
例えが間違ってるな。 言うならチェーンソーと鋸だ。 チェーンソーの方が効率がよいのは誰が見ても明らかだが、 でかくて重い、ガソリンやバッテリーなどの動力源が必要、扱いによっては死に至るケガをする場合もある などのデメリットもある。 プログラムでも全面的にどちらかが劣ってるって場合もあるが、 大抵はどちらにも何らかのメリットがある場合が多い。 そういうのが読めない奴は知識だけあってもいい物は作れないだろうな。
自分が知らない質問されるのが気に入らないんでしょ 自分が知らないことは無駄なことだと思いこんで安心したいんだよ
>>616 は物理的に不可能なことと能力的に出来ないことの区別がつかないと思われる。
いわく、「思ったことはかなえられることなり」
こういうのは言霊主義、あるいは念力主義という。
明らかに無理ならソース出せばいい 無理だと思うだけなら無視すればいい 知ってるなら答えればいい 何でこれだけのことが出来ないんだろう??
>>618 は無意味な「それ」をせず別の行動を選択することと、「それ」が能力的に出来ないことの
区別がつかないと思われる。
「〜すればいい」ってそう思うのは君であって俺ではないのだが。
>>618 のような症例を自己中心性、あるいはジャイアニズムという。
なんか必死な子がいる 板杉
VBって非アクティブ操作できないのかよ。マクロできたとしても スクリプト書かなくても、フリーのマクロで事足りるじゃん。
必死で「必死だな」という、その滑稽で必死な自分棚上げぶりは自己中心性の派生物と思われる。 そもそも、必死だったらなんだというのだろう。
622
>>607 返答ありがとうございます。
SamurizeというソフトのスクリプトをVBSで製作したいと思い最近VBを始めました。
インターネットのページの中から文字列を取得したいという意味です。
626 :
625 :2005/07/16(土) 18:46:05
連レスすいません。 × VBS ○ VB
627 :
デフォルトの名無しさん :2005/07/17(日) 12:46:49
VB6でWinampのプラグインを使用して音楽を鳴らす方法って どうやればいいんでしょうか? Winamp向けのdllを使って音楽データを鳴らしたいんですけど、 ぐぐっても「それらしき」説明がされているサイトが見つかりません・・・
629 :
デフォルトの名無しさん :2005/07/17(日) 19:39:26
VB6で、二次元配列の一部を削除して詰める方法って無いでしょうか? 例えば A, B, C D, E, F G, H, I J, K, L M, N, O という3*5の要素を持つ配列の A, B, C J, K, L M, N, O の部分を削除して A, B, C J, K, L M, N, O という3*3要素の配列にする方法です。 今はひとつずつ書き換えてReDim Preserveをしてますが もっと効率の良い方法をご存じでしたら教えてください。
>>629 その例だと「詰める」必要なんて本当にあるのか疑問な気もするけど、
どうしてもそんな風にしたのなら、一次元配列をラップして二次元配列みたいに
使えるクラスを作るのが一番簡単だと思う。
インデックスをあらわす引数を二つとるプロパティをデフォルトプロパティにするわけね。
「詰める」メソッド実装するのもそんなに難しくないでしょ?
631 :
デフォルトの名無しさん :2005/07/17(日) 20:19:45
Win32 API mgsWaitforMultipleObjects にて、複数のプロセスを指定したいのですが、 引数である、hProcess が 配列というか、 Handle(long?)のポインタ指定になっています。 Countが1つの場合は単純にvbからhProcessをlongとして渡せばよいですが、 複数のハンドルをVBから呼び出しに使う事はできるのでしょうか?
>>627 Winamp SDK見たほうが早い希ガス
やるにしてもC/C++の方が相性良いと思う。
VBから直接使えるかは知らん(__stdcallじゃなけりゃそれだけでアウト)
Winamp VBで検索すると 一番初めに・・・。 vbAccelerator - Using WinAmp In Plugins From VB
634 :
デフォルトの名無しさん :2005/07/17(日) 22:10:50
>>631 そんな高度な質問はこのスレで回答はえられないよ
>>631 その引数をByRef Handles As Longとして
呼ぶときには引数をHandles(0)のように配列の先頭要素を指定するとできる。
637 :
デフォルトの名無しさん :2005/07/17(日) 23:34:59
VB4で変数のポインタを取得するにはどうすればいいでしょうか?
>>637 Declare Function VarPtr Lib "vb40032.dll" (variable As Any) As Long
639 :
637 :2005/07/18(月) 06:52:36
>638 ありがとうございます。 解決しました。
640 :
597 :2005/07/19(火) 09:46:13
>>598 解答ありがとうございます。でも、その方法は既にためしているのですが、
IMEmodeプロパティのないもの(チェックボックス等)でも、IMEモードがONになってしまって
そのせいでスペースキーを押してもチェックできなくなってしまうのです。
なんでだろう。
641 :
デフォルトの名無しさん :2005/07/19(火) 10:27:14
642 :
デフォルトの名無しさん :2005/07/19(火) 11:10:23
VB6.0でexcelのファイルを開き、そのファイルのsheet1を読み込ませてセルA1が空白 でなければテキストを吐き出させるようにしたいのですが、どうすれば良いのでしょうか? またできればexcelのファイルは非表示で開きたいと思っています。 excelのVBAだと下記のような感じになるのですが、VB6.0だとどこを修正してやれば良い のでしょうか?ちなみに下記ではexcelを非表示で開く事はできません Dim TEST As String Workbooks.Open Filename:="C:\test.xls" TEST = ActiveWorkbook.Path & "\test.txt" Worksheets("sheet1").Activate Open TEST For Output As #1 If Range("A1").Value <> "" Then Print #1, "A1" End If
>>642 Set Application = CreateObject("Excel.Application")
hoge = Application.ExecuteExcel4Macro("'パス\[ブック名.xls]Sheet1'!R1C1")
Excelのブックを開かずSheet1のA1を取得する方法.
但し、注意点として空セルではNull("")ではなく 0 が返ってくる。
コレは仕様でExecuteExcel4Macroでは0と空の区別は出来ないらしい。
なのであとは返ってきた値が0じゃなかったらテキストに書き出せばよし。
でもこの程度ならvbsからやった方が良くないか?
FSO使えばテキスト書き出しも出来るし、セルの値の取得部分は上記をそのまま使える。
644 :
642 :2005/07/19(火) 12:11:20
>>643 レス有難うございます。早速試してみます。
他にも幾つか行いたい事があって、フォームを使用してクリック一つで誰でもできる
ようにしたかったんです。それと折角あるvb6を私の周りでは現状では誰も使って
ないので勿体無いので取り敢えず使うかって感じです。
有難うございました
645 :
デフォルトの名無しさん :2005/07/19(火) 15:57:31
VB6で作ったプログラムの対応OSは何ですか。 9x系は95から対応していると思うのですが、NT系はどこからですか。 お願いします。
>>645 全て(NT3以降)
あとはあなたが各OSで動くコードを書けば良いだけ。
ありがとうございます
>>640 そういう場合は、IMEmodeプロパティのあるコントロールの LostForcusイベント でOFFにしてやれば良い。
649 :
デフォルトの名無しさん :2005/07/19(火) 19:32:15
質問です VB6で(標準コントロールだけで) 作ったEXEを頒布したいのですが、 添付すべきランタイムは何でしょうか。
>>650 それはOSによっては最初から入っている、という意味ですか?
652 :
649 :2005/07/19(火) 20:53:26
Msvbvm60.dllとVb6jp.dllだけあれば大丈夫ですか?
654 :
649 :2005/07/19(火) 22:54:50
ありがとうございます
>>652 何をもって標準コントロールって言っているのかによる。
VB6.0に付属のコモンダイアログやリストビュー、WinSock等は別のDLLが必要。
656 :
デフォルトの名無しさん :2005/07/20(水) 09:31:05
VB6です。 日付、時間、件名を配列を使ってCSVファイルに保存しています。 このファイルをテキスト上にソートさせて読み込みたいのですが、 ソートの仕方がわかりません…。 教えてください。お願いします。
>>656 外部コマンドsort.exeを使用する。
658 :
656 :2005/07/20(水) 11:32:43
>>657 ぐぐってみたんですが良く分かりませんでした…
良いサイトまたは別な方法があったらお願いします。
>>656 Excelで読み込んでソートすればいいじゃん。
・・・なんてね。
「テキスト上にソートさせて」ってのがよくわからないけど、
CSVをADOで読み込んでSortプロパティを使うといいと思うよ。
>>656 テキスト上ってテクストボックスのこと?
キーソートのコードがわからない?
それともソートのコード自体がわからない?
661 :
656 :2005/07/20(水) 14:14:50
>>660 >テキスト上ってテクストボックスのこと?
そうです。
>キーソートのコードがわからない?
>それともソートのコード自体がわからない?
初心者なのでコード自体全くわからないです。
他の言語ならソート関数が用意されているから バカでもソートできるのになぁw
664 :
656 :2005/07/20(水) 15:56:23
本当に申し訳ないのですが
>>663 のものをサブルーチンとして
用いた後はどうすればよいでしょうか…
お願いしますorz
> 初心者なので ではなく、「調べる気がないので」だったわけか。 ま、あとはウンチク好きの先生達にでも任すかw
調べる気がないのではく調べても意味ワカンネ
わからないところがあればまたそれを調べればいいのさ。 ある英単語の意味を知りたい→英和辞書で調べる 英和辞書の解説にわからない漢字があった→漢字辞書で調べる 漢字辞書の説明で意味の分からない語句があった→国語辞書で調べる
>>664 丸投げする気なら、学生バイトでも雇えばいい。
>>656 俺はいつもはろくに調べもせず甘ちゃんな質問をする奴を煽ってるけれども、
君の質問に関しては多分煽るレスをしている奴は単に答えられないだけだと思うから気にすることない。
手順としては、
(1) レコード( = 一件のデータ = CSVの行)をあらわす構造体(またはクラス)を定義して、
(2) そのレコードのコレクションのクラスを作り、(3) そのコレクションのクラスに
レコードの各フィールドでソートするメソッド(関数)を書く。
こんな流れだと思う。
VBには日付や文字列の大小比較する関数があったはずだから、これらを利用して
クイックソートをするメソッドを書くのはそんなに難しくないと思う。
まあクイックソードのアルゴリズムを解説しているサイトを読んで半日考えれば
自分で書けるよ。
クラスがわからないなら無理にコレクションのクラスを作らずに、モジュールレベルで
レコードの構造体の配列とそれをソートする関数を書けばいい。
構造体(Vbだとユーザー定義型だっけか)がわからないとさすがにちょっと厳しい。
俺ならコレクションのクラスにソートを持たせずに C言語のqsort見たいに汎用のソート関数を作るけどな。 関数の引数に比較関数を渡してソート。 といっても、VBは関数を引数にして呼び出せないから、 正確には、比較関数オブジェクトを渡すことになるけど。 難点はクラスモジュールのファイルがいっぱいになることか。
未だにクラスモジュールが使いこなせない・・・ 覚えると便利なのは分かるんだが・・・
>>670 構造体の配列をソートするんだよ。単なる数値の配列のソートじゃないよ。
汎用化なんてできるか?多態もつかえないVBで。
仮に多態使えてもそんな使いやすい関数がかけるとは思えん。
だったら汎用化の意味なんてないでしょ。
>>671 他の言語をやってみるといい。Javaとか。
VBプログラムの腕も上がるぞ。
テキストファイルをデーターベースとして接続して、
SQL文でソートするってやり方もある。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;408179 Set mcn = New ADODB.Connection
mcn.ConnectionString = _
"Provider=MSDASQL.1;" & _
"Extended Properties=""" & _
"DRIVER=" & _
"{Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=" & App.path & "\" & """"
mcn.Open
Set mrs = New ADODB.Recordset
mrs.CursorType = adOpenDynamic
SQL_STR = "Select * From " & "sort_zyunbi.csv" & " ORDER BY field28 ASC,field35 ASC,field02 ASC"
mrs.Open SQL_STR, mcn
Do Until mrs.EOF
FilOb2.writeline (mrs.Fields(0) & "," & mrs.Fields(1) & "," & mrs.Fields(2) _
& "," & mrs.Fields(3) & "," & mrs.Fields(4) & "," & mrs.Fields(5)
mrs.MoveNext
Loop
675 :
656 :2005/07/20(水) 23:32:09
答えてくれた皆さんありがとうございます。 明日試してみたいと思います。
>>672 データの並び替えは難しいけど、並び替え済みのインデックスを作るというのなら簡単だと思う。
対象はデータがクラスのやつに限定されるけど。構造体はObject(IDispatch)のインターフェースを
持たないから駄目。
関数
Function Sort( Input As Collection , CompareFunc As ICompare ) As Collection
ICompareインターフェース
比較関数作る時は Implements ICompare なんてやる
Public Function Compare( Object1 As Object , Object2 As Object ) As Long
こんなやつ。
(´-`).。oO(あー、わざわざコピー作ってやらなくてもいいか。まあ、どっちでもいいや)
MSFlexGridでやればソートは勝手にやってくれる。
おいらは、ソートはリストボックスにお願いしてる。 3万レコード超えそうな作業にはファイル作ってsortを呼び出してるかな。
680 :
656 :2005/07/21(木) 13:20:30
誰か、お馬鹿な自分を助けてください…
>>680 これだけ回答もらっていて、何が問題なんだ?
試して何がだめだったかとか進めないと会話にならんぞ。
>>680 あきらめてExcel使ったら?
Excelのどこが不満なの?
683 :
デフォルトの名無しさん :2005/07/21(木) 15:59:09
VBの本でデジタルピアノを作るのが載っていて作ってみました。それで、自分が演奏したのを録音する機能を付けたいんですけど、できるでしょうか? 教えてくださいませ。
>>683 みんなエスパーでもマギーでもないんだから、どんな本読んで何つかってどのようにプログラムしたか。
そういう情報を出さないと誰もわかりませんよ。
685 :
デフォルトの名無しさん :2005/07/21(木) 16:57:16
とりあえず、結果をMIDIファイルに保存するのはとても高度だと思うよ。 Cマガジンの2002/12とかにCだけどサンプルはある。 VBっぽく作るのであれば、イベントの発生順、タイミング自体をテキストファイルに書き込んで、それをなぞる方法かな? 今たぶん鍵盤とかをボタンで配置して、それぞれで音色をMIDIで再生してると思うけど。 そのボタンをおされた時分秒(それ以下の単位まで)をマクロのように記録して、それを再生するみたいに。
687 :
デフォルトの名無しさん :2005/07/21(木) 17:29:05
>>686 ありがとうございます。m(_ _)m 調べてみます。
>>671 MSDNライブラリのチュートリアルを読んで実際に試すだけで結構違うぞよ
Visual Basicの使用方法>プログラミング ガイド>Visual Basicを使ってできること>オブジェクト
あたりとか。
Dim hoge As Collection Set hoge = New Collection hoge.Add "foo", "aaa" hoge.Add "bar", "bbb" hoge.Add "baz", "ccc" という感じでコレクションを作った場合。 hoge(2)、hoge("bbb")で要素の"bar"を返せますが、 逆に指定したインデックス位置の添字を返すにはどうすれば良いのでしょうか? つまり2を指定して"bbb"を返したいのですが。
Dictionary?ly?オブジェクトのKeysあたりで 取得できそうな希ガス
692 :
690 :2005/07/22(金) 14:29:02
>>691 DictionaryオブジェクトのKeysは
「Dictionary オブジェクト内のすべての既存キーを格納した配列を返します。」
とのことで、目的のものとは違うようです。
他のメソッドも調べてみましたが目的を達成できそうなものはありませんでした。
というか、Collectionを使う方法でお願いします。
693 :
デフォルトの名無しさん :2005/07/22(金) 17:42:11
画像の一部をイメージコントロールに表示するにはどうすれば良いのでしょうか? 具体的に言うと500*500の画像があったとして、 その画像のY100,X200*Y200,X300の位置を 指定したイメージコントロールを表示するような方法です。 図で書くと _ □□□□□ ↑ □□■□□ □□□□□ 500 □□□□□ □□□□□ ↓ |← 500 →|  ̄ の■部分が表示したい位置です。 「〜で出来るかも」とかではなく 具体的な方法の紹介をお願いします。
APIで”出来る” コントロールを入れ子にして、全体表示のPictureから部分を窓のようにして切り出したように見せることも”出来る”
なんてレベルの低い回答。。。 まあ、質問もアレだけど
>>695 いや、ナチュラルになんとなくムカつく質問の仕方だし。w
つうかさ、ぐーぐる様にAPI、画像、切り出し、でお伺いを立てろ。
ググらず質問する奴もアレだが、 回答はヘボいのに文句は一人前な疑似回答者もアレw
まあここで回答してるのは、VBしか使えない"マもどき"がほとんどだからね。 "出来るかも"や"出来そうな気がする"とか、"APIで出来る"とかの回答しかできないっしょ。 他言語のスレじゃ上級者がサッとコードで回答したりするけど、 ここじゃ丸投げするなとか言って追い返すのが精一杯。 そして漏れはそんな奴らをニヤニヤ見ながら、偶にちょっかい出したりすると。
そのちょっかいがかなり的はずれで笑える。
おまえら餅つけ 負け惜しみなんて言っても始まらないぞ
701 :
690 :2005/07/22(金) 19:47:08
>>693 ImageコントロールではなくPictureBoxコントロールなら
PaintPictureで出来ると思いますよ。
.PaintPicture 元画像,0,0,100,100,200,100,100,100,vbSrcCopy
って感じで。どうしてもImageコントロールがいいってなら無視してくれ。
>>690 もよろしくです。
702 :
あほ :2005/07/22(金) 20:57:01
VB6.0で時間になったらmp3ファイルを開くというプログラムを 作っているんですがmp3ファイルの開き方がわかりません。 ShellExecuteというのがキーワードっぽいんですが記述の仕方も わからないののでいろいろと教えてください。
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _ ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _ ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long _ ) As Long Const SW_SHOW = 5 Const SW_SHOWNORMAL = 1 ・ ・ ・ ShellExecute(vbNull, "open", "C:\hoge.mp3", vbNull, vbNull, SW_SHOW)
↑訂正 Ret = ShellExecute(...
>>690 ForEachで列挙して調べるしかないんでないの?
知らないなら黙ってればいいのに と、黙ってられずに言ってしまう漏れ。
すみませんチェックボックスの使い方で教えていただきたいことがあるのですが 現在チェックボックスにチェックを入れるとメッセージボックス1の内容を メッセージボックス2、3に適応させるようにしてるのですが 一度チェックを入れてからチェックをはずしたときにはその適応をはずす (メッセージボックス2、3が何も入力されていない状態)ようにしたいのですが コードがわかりません(/_;) どなたか教えていただけませんでしょうか よろしくお願いします<(_ _)>
708 :
707 :2005/07/23(土) 14:43:47
バージョン書き忘れました バージョンは6.0です。 よろしくお願いします<(_ _)>
> メッセージボックス1 って何よ? テキストボックス?ラベル? 普通メッセージボックスと言ったら ポップアップダイアログを表示させるMsgBox関数のことなんだが。
710 :
707 :2005/07/23(土) 16:11:31
>>709 言われたとおりです><
テキストボックスでしたごめんなさい <(_ _)>
.text = "" でいいじゃん
712 :
707 :2005/07/23(土) 18:25:26
チェックボックスの使い方を間違ってたみたいでどうしてもうまくいかないと今理解しました^^; チェックされてるかされてないかをIf文で分岐させて チェックされてるなら Text2.Text = Text1.Text Text3.Text = Text1.Text チェックされていないなら Text2.Text = "" Text3.Text = "" にすればいいんですね^^; チェックされてるかされてないかの判別のコードの書き方勉強してきます^^;
常時入力モードのspreadにコンボボックスの列を設定してます 使用中、そのコンボボックスの列にカーソルがあるときに、 矢印キーの下↓や上↑を押して、上下の行に移動させたいのですが、 コンボ内のアイテムが上下するのみで、keydownイベントも動きません 矢印キーで上下の行移動を実現するには、どうしたらいいのでしょうか
714 :
デフォルトの名無しさん :2005/07/23(土) 20:03:36
Private Sub vaSpread1_KeyDown(KeyCode As Integer, Shift As Integer) Dim lngRow As Long With vaSpread1 Select Case .ActiveCol Case コンボボックスの列番号 Select Case KeyCode Case vbKeyUp lngRow = .ActiveRow - 1 If lngRow < 1 Then lngRow = 1 End If Case vbKeyDown lngRow = .ActiveRow + 1 If lngRow > .MaxRows Then lngRow = .MaxRows End If End Select .Row = lngRow .Col = .ActiveCol .Action = ActionActiveCell End Select End With End Sub
716 :
デフォルトの名無しさん :2005/07/24(日) 10:09:09
変数(配列)名を変数の値で指定する方法を教えてください。 コントロール名を dim i as long i = 1 controls("text" & i).text = "hoge" といった感じで指定できるように、 VB6でも変数名を文字列や変数の値を使って指定できるということを 以前どこかで聞いたのですが、やり方がわかりません。 実際には一次元配列を連番で複数使いたいのです。例としてはこんなかんじで dim hoge1(10) as string, hoge2(20) as string dim i as long i = 1 ???("hoge" & i)(5) = "hoge" i = 2 ???("hoge" & i)(7) = "hogehoge" 処理の都合上、二次元配列や構造体配列では代用できない部分があるので。 ご存じの方は、どうかご教示願います。
そもそも考え方を間違っているような。 変数の場合は基本的に名前で呼べることはないはず。 二次元配列や構造体で代用できないなんてことはありえんし。
718 :
デフォルトの名無しさん :2005/07/24(日) 11:04:49
>717 それじゃ質問変えます。 以下の方法を二次元配列、構造体配列でやる方法を教えてください。 dim hoge1() as string, hoge2() as string, hoge3() as string dim i as long i = ? [hoge&i] = split("a,b,c,d,e", ",") i = ? dim buf() as string buf = filter([hoge&i], "huga") dim temp as string, j as long i = ? j = ? ReDim Preserve [hoge&i](2) ReDim Preserve [hoge&j](3) temp = join([hoge&i], "_") & "_" & join([hoge&j], "_") ※変数i,jの値は可変です。数が多いのでSelect Caseも実用出来ません。 ※ループでの処理、一次元配列に書き出し後の処理は 要素数が多い場合非常に遅いので不可です。
720 :
デフォルトの名無しさん :2005/07/24(日) 12:06:48
>>718 悪いけど何やりたいか全く意味不明。
処理の内容を他人に伝達できないのは、表現能力の問題も他人の立場に立つ
想像力の欠如ももちろんあるが、それ以上に伝えようとしている本人が
その内容について把握・分析ができていないからと思われる。
そしてそのことは、プログラムが書けないことと恐らく無関係ではない。
721 :
716,718 :2005/07/24(日) 12:23:55
>720 実際の処理をそのまま書いたのではなく、 処理の例として書いたので、意味不明で当然です。 これで何がやりたいかわかる方が変ですから。 やりたいことを文で書くと、 1 split関数で空配列への値の代入 2 フィルター関数による検索 3 ReDim Preserveによる内容を保持したままの要素数変更 4 join関数による配列内容の結合 を、二次元配列でいう第二要素番号にあたるものを変数で指定し これらを二次元配列や構造体配列に対して行う方法を教えていただきたいです。 これらは基本的に一次元配列、又は配列の最終要素数にしか出来ないことですが 二次元配列や構造体で代用できないなんてことはあり得ないとのことなので。 構造体配列に対しては処理自体は掛けられますが、変数で位置を指定する方法がわかりません。
722 :
デフォルトの名無しさん :2005/07/24(日) 13:24:16
まだよく理解できないけどこういうことかな? たぶんVB5では正しく動かない。 '==================== ' Class1 '==================== Private mRows(6) As Variant Private Sub Class_Initialize() Dim Row() As String Dim i As Integer For i = 0 To UBound(mRows) Row = Split("Sun Mon Tue Wed Thu Fri Sat", " ") mRows(i) = Row Next End Sub Public Property Let Row(Idx As Integer, StrArray() As String) mRows(Idx) = StrArray End Property Public Property Get Row(Idx As Integer) As String() Row = mRows(Idx) End Property
723 :
デフォルトの名無しさん :2005/07/24(日) 13:25:26
'==================== ' Form1 '==================== Private mHoge As New Class1 Private Sub Form_Load() Dim i As Integer Dim StrArray() As String For i = 0 To 6 StrArray = mHoge.Row(i) ReDim Preserve StrArray(i) mHoge.Row(i) = StrArray Dim str As String str = Join(mHoge.Row(i)) Debug.Print (str) Next End Sub
724 :
716,718 :2005/07/24(日) 16:08:15
>722 違います。 というかループまわせばどうにでもなるけど、 >718でも書いたようにパフォーマンスが久しく劣るようでは代用とは言えませんので。 例えば以下のようにhogeという二次元配列のようなものがあったとして、 0 1 2 3 4 5 6 7 Sun Mon Tue Wed Thu Fri Sat 8 日 月 火 水 木 金 土 9 joinなら、hoge(7)の要素数を3まで削り、join(hoge(7))で"Sun Mon Tue Wed" hoge(8)の要素数を5まで削り、join(hoge(8))で"日 月 火 水 木 金"を返すような方法、 filterなら、filter(hoge(7), "n")で"Sun, Mon"という配列を、 filter(hoge(7), "n")で空配列を返す方法、 splitなら、hoge(9) = solip("10,20,30,40,50,60,70", ",")で 0 1 2 3 4 5 6 7 Sun Mon Tue Wed Thu Fri Sat 8 日 月 火 水 木 金 土 9 10 20 30 40 50 60 70 というように値を代入する方法です。 これらは一次元配列には簡単に出来る物ですが、同じことを二次元配列や構造体配列にやる方法がわかりません。 一応仕様上は二次元配列には出来ないことになってると思うのですが、 「二次元配列や構造体で代用できないなんてことはあり得ない」ならこれらの処理も可能なはずですが。 あくまでも「代用」なので、処理時間においては数十%程度の増加は許容しますが、 一次元配列に対してjoin、filter、splitを使って処理した場合に比べ、ループを回して処理した場合では 3〜5倍の処理時間が掛かるので、ループ処理ではとても代用なんて言えた代物ではありません。 因みに実際は7,8,9に当たる要素数は約4000、0,1,2,3,4,5,6に当たる要素数は数万〜数百万です。 それと後出しになってしまいましたがこちらはVB6SP5です。
725 :
722 :2005/07/24(日) 16:17:56
>>722 で書いたことはあなたの「やりたいこと」と違わないと思うよ。
ちゃんと分析して意味を把握してる?
「実現したい処理」と「
>>722 のコード」の両方に関して。
要は『「文字列配列」の配列』が欲しいんでしょ、簡単に言えば。
そういうデータ構造をVBで実現するヒントに
>>722 はなっているよ。
つうか1つ言っていいかな? そこまで性能求める文字解析、ループならばVBは不向きだよ。
>>726 ろくにわかってない癖に偉そうにw
「文字解析、ループならばVBは不向き」って意味がわからないし、
だいいち今のスレの話題と話がかみ合ってない。
確かにメモリ操作(ポインタ)が使えないVBではループで文字列を連結していくような処理を書くと、
同じ処理をCで書いたときよりパフォーマンスが大幅に落ちるわけだが、
その理由がわかって書いているとは思えない。
>>727 御講釈ありがとう。
そういうこと書いたつもりなんだけど、思えないんじゃ言葉足りずだったね。
元質問者の場合、そこまで性能を求めるならば、そもそも高級言語を使うほうが間違いと思うわけで。
C使うにしてもMFCとか使わないで、普通にChar配列等でメモリーを直接的に見ていく感じで。
データ構造で詰められる性能と、そもそもの言語特性で詰められない部分で気になったので。
なんか微妙に険悪な流れになっているが
>>718 よ、以下の構造体を使う方法じゃダメかい?
' (General) コード
Public Type THOGE
St() As String
End Type
' モジュール コード
' > dim hoge1() as string, hoge2() as string, hoge3() as string
Dim hoge(1 To 3) As THOGE
' もしくは
' Dim hoge() As THOGE
' ReDim hoge(1 To 3)
' > i = ?
' > [hoge&i] = split("a,b,c,d,e", ",")
hoge(i).St() = Split("a,b,c,d,e", ",")
' > i = ?
' > buf = filter([hoge&i], "huga")
buf = Filter(hoge(i).St(), "huga")
' > i = ?
' > j = ?
' > ReDim Preserve [hoge&i](2)
' > ReDim Preserve [hoge&j](3)
' > temp = join([hoge&i], "_") & "_" & join([hoge&j], "_")
ReDim Preserve hoge(i).St(2)
ReDim Preserve hoge(j).St(3)
temp = Join(hoge(i).St(), "_") & "_" & Join(hoge(j).St(), "_")
構造体じゃ個別の要素にアクセスしたいとき綺麗にかけないでしょ。 そんなんなら最初から裸のVariant型の配列を使うのと何も変わらないじゃん。
731 :
730 :2005/07/24(日) 19:59:14
あ、いや俺の勘違いか。 そんなことはないね。
Exchange Serverにアクセスして、メールの送信時刻を ピックアップするようなことはどのようにすれば 実現可能でしょうか。
>>733 どうもです。ちなみにこれってOutlookのローカルの送信済みアイテムではなく、
メールサーバ上の送信時刻も拾えますか?
ExchangeServerにはサーバのメール送信時刻なんてのがあるのか
>>735 あるんじゃねーの?なきゃメールサーバの管理者が
困るだろ。
738 :
デフォルトの名無しさん :2005/07/25(月) 10:26:04
VB6.0でvs-view3.0を使用して印刷プログラムを作成しています。 印刷の表示プログラムの作成はスムーズにいったのですが、ページ枚数が大変多く 1000枚を超えています。すると1000枚目以降から表示がされなくなってし まったのですが原因がよくわかりません。もしご存知の方がいましたら、是非教え てください。
>738 まずテンキーNum Lock メモ帳で Altを押しながらテンキーで220(Alt離す) 同様に Altを押しながらテンキーで219(Alt離す) Altを押しながらテンキーで189(Alt離す) Altを押しながらテンキーで33431(Alt離す)
>>739 めんどくさいから、さっさとオチ教えて。
Microsoftが提唱するVB6のコーディング規約はどこにあるでしょうか。
>>742 MSDN ライブラリ Visual Studio 6.0
>Visual Basic ドキュメント
>Visual Basic の使用方法
>プログラミングガイド
>Visual Basic のコーディング規則
配列に値を入れる方法っていくつかありますよね。 @ Dim Temp As Variant Temp = Array("a", "b", "c") A Dim Temp() As String Temp = Split("a b c") B Dim Temp() As String, Buf As Variant, i As Long Buf = Array("a", "b", "c") ReDim Temp(UBound(Buf)) For i = 0 To UBound(Buf) Temp(i) = Buf(i) Next i (Variant型配列をString型配列に書き出し) で、これらの値を入れる処理の速度を比べると「A > @ >>>>>>>>>> B」なんですが、 そのあとの処理では変数の型にVariantを使ってる@が遅く 「A = B >>> @」となります。それならどちらも速いAを使えばいいかとも思うのですが Splitでの区切り文字には値に絶対に使われていないものを指定しなくてはならないので 汎用的ではありません。値には記号文字はもちろんのこと 改行やタブが含まれる場合もあるのでvbCrLfやvbTabも汎用的な区切りとして使えませんし、 通常の文字以外を区切りに指定すると極端に引数が長くなります。 今は配列値のセットは1回又は少数回で、そのあとの処理が多い場合はB 値を何度もセットする場合は@、Aが使える条件ならAと使い分けてますが、 VB6で任意の型の空配列に1引数単位で一括して値を入れる方法、又は Variant型配列を任意の型に変換する方法をご存じの方が居ましたら教えてください。 もちろんこのために上記B以上の処理が必要になるようでは本末転倒ですが。
>>745 なにこの文章。
中学生でももっと読む人間の立場にたった、読みやすいまともな文章書くよ。
意味不明にも程があるでしょ。
まあこういう人はこうやって忠告しても、「荒らしのイチャモン」という風に
やり過ごすんだろうけど。
>>745 条件が曖昧。
通常テキストファイルには使われないような制御コードを使えば?
>>745 速さを望むならそれ以上は無理でしょう。
その使い分けが最善だと思います。
749 :
デフォルトの名無しさん :2005/07/26(火) 16:48:14
InputManPro6.0JのVB6での使用方法の質問はここでよかですか? 小数点以下2桁まで入力できるように設定したimNumberコントロールを使用し ています。しかし実行すると1桁目を入力するとカーソルが小数点の位置まで 戻ってしまい、連続して2桁目まで入力することができずに困っています。 何か解決策はありますでしょうか?
VB6.0にて txtファイルなどの最終更新日を書き換えるプログラムを組むことは可能ですか? ファイルの最終更新日だけをさくっと書き換え可能なプログラムが欲しくて 自分で作成してみようと思っているのですが・・・
>>751 API使わないとダメだったような。
かなり面倒。
753 :
751 :2005/07/26(火) 20:48:12
>>752 かなりめんどくさいのですか^^;
VBはじめたばかりの自分には敷居が高そうだな・・・
色々調べながら格闘してみます><
754 :
デフォルトの名無しさん :2005/07/26(火) 21:35:18
755 :
デフォルトの名無しさん :2005/07/26(火) 21:37:34
756 :
デフォルトの名無しさん :2005/07/26(火) 21:38:49
757 :
デフォルトの名無しさん :2005/07/26(火) 21:40:29
758 :
デフォルトの名無しさん :2005/07/26(火) 21:41:57
759 :
デフォルトの名無しさん :2005/07/26(火) 21:46:00
イヤミったらしい奴だ
761 :
デフォルトの名無しさん :2005/07/26(火) 23:09:37
連投申し訳ない。。なんか厨房のやる嫌味みたいだけどそんな意図はないよ。 サーバが調子わるかったみたいだね。
昨夜はPC8鯖が不調で、書き込み遅延が約10分。
764 :
デフォルトの名無しさん :2005/07/27(水) 16:40:44
コンボコントロールの全アイテムを、 速く切り替える方法はないでしょうか? アイテムは全部で5000件くらい。 しかし別のコントロールでアイテム一覧を切り替えたいのです。 具体的には、5000件のうち、Text1.textプロパティの値(文字列)を含むコンボアイテムのみにしたいんですが…。 .Clearの後、5000件をループしつつInstrで判定、 合致したら.AddItem などとしていたら日が暮れてしまいます…
>>764 とりあえずInstr関数なんか使ってないでFilter関数使え
何がやりたいのか読み取れない俺がいる。
元データが5000件あって、なんかの条件で切り替えたいってことか? それともコンボに5000件セットするの? 前者ならそんなに時間かからないべ。何件だかしらんが。 後者なら、そんな件数突っ込むのがいけない。 選ぶ側の身になれ。
768 :
764 :2005/07/27(水) 18:43:00
ありがとうございます。 5000件の固まりA, B, C…の入れ替えではなく、 5000件中の、いわゆる絞り込み処理をやりたかったのです。 表現が悪くてすみませんでした。
>>768 Addするときに Enabled は止めてある?
5000件程度でそんなに時間かかる? コンボじゃ再描画はないと思うからまあそこは気にしないとして。 Addが遅いのか、文字検索が遅いのかぐらい切り分けてみれば? (Addをコメントアウトすれば文字検索のみの時間がわかるから)
通常使うプリンタを変更したいのですが 上手く出来ないのでおしえてください Set objPrinter = CreateObject("WScript.Network") objPrinter.SetDefaultPrinter "プリンタ名称" と処理を行うと通常使うプリンタが変更されるのですが VBの暗黙オブジェクトであるPrinterは変更前のままとなっています 変更を反映させてやるにはどうすればよいのでしょうか? ご教授願います
VB6で変数hogeの値が、A,C,F,J,O,Uのどれかの場合に実行という条件分岐を作る場合、 If hoge = "A" Or hoge = "C" Or hoge = "F" Or hoge = "J" Or hoge = "O" Or hoge = "U" Then 処理 Select Case hoge Case "A", "C", F"", "J", "O", "U" 処理 End Select 等の方法がありますが、IFでそのまま等価式の論理和を条件にすると 1行が極端に長くなるし、書くのも面倒。 逆にSelect Caseだと分岐先は1つなのに4行のコードが必要になってしまう。 行継続や:は知ってますがIfやSelect Caseではあまり使いたくないし。 こういう場合Ifで(正規表現を使わず)もっと手軽に書く方法はありませんか? 因みに実際の条件は上記例のように1文字ではないのでLikeは使えません。 IfやSelect Caseで処理できない訳ではないし、正規表現の使い方も知ってるので それほど困ってるわけではありませんが、何か良い方法があるなら知りたいのでよろしくお願いします。
言語仕様レベルでは無いと思う。 コードメンテナンス性の向上を考えるならば、その条件式だけで関数化して隠蔽する。 その中はIFでやろうが、Selectでやろうが隠蔽してあるから、呼び出し側は綺麗に見える。
>>771 >因みに実際の条件は上記例のように1文字ではないのでLikeは使えません。
使えるよ要確認。
ちなみに正規表現を避ける理由ってなにかあるんですか?
775 :
デフォルトの名無しさん :2005/07/28(木) 12:34:23
> このスレって回答できそうもない質問がくると > 理由聞き出して罵倒する方向に持っていこうとする可哀相な奴が多いよな。 > 知ってるなら答える、知らないならスルーでいいのに > 初心者ほど自分に答える義務があるとでも勘違いしているかのように全ての質問に喰っていく。
幼稚なアホの子をいちいち相手すんなよ、頼むから。。
777 :
デフォルトの名無しさん :2005/07/28(木) 12:48:13
ゴメン...
byte型の連結で一番楽な方法は?(A=B&C) やっぱ回したりString型に一度変換しなきゃダメなんですかねぇ・・・
>>778 バイトを文字として扱ってるか、1バイト数値として扱ってるかで違うし。
連結ってことは文字として認識ですよね。
Chrで文字変換して連結でしょうね、やっぱり。
そーですかorz すんごい過去ログも見てみたけど、 1.chrかcstrで変換して結合 2.配列ループで回してケツに結合。 しか無かったですからねぇ。CopyMemoryも複写だし。残念。。。 thxえにうえい ノシ
もしそのByte型が配列なら、 StrConv(配列名, vbUnicode)で行けるんだけども… 各個独立した変数なら南無。
782 :
デフォルトの名無しさん :2005/07/28(木) 14:27:10
ん?全然って訳じゃないんだけど、StrConvは関係ないんじゃ?
>>778 混乱招くから簡単なソース書いてよ
783 :
デフォルトの名無しさん :2005/07/28(木) 14:50:37
WinXP & VB6.0 & Winsockコントロール 使って簡易HTTPサーバーを作ろうとしてます。 DataArrival()イベントで受信データを受けるのはいいんですが、 データが全部揃ったかどうか?ってどうやって判断したらいいのでしょうか・・・ HTTP/1.0です。
784 :
778 :2005/07/28(木) 14:53:45
簡単なの作ってみますた Private Sub Command1_Click() Dim tgA() As Byte Dim tgB() As Byte Dim tgC() As Byte tgA = ChrB(&HB1) & ChrB(&HB2) tgB = ChrB(&HB3) & ChrB(&HB4) 'ここでtgC()にA+Bでコピーしたいつーかまんこ Debug.Print StrConv(tgC, vbUnicode)'一応StrConv使ってみた End Sub こんな感じで・・・
tgC = CStr(tgA) & CStr(tgB) じゃダメ?"アイウエ"って帰ってくるけど・・。 あ、CStrは書いてるか・・・・。byte型のまま操作?
786 :
783 :2005/07/28(木) 15:43:31
>>783 です
というのもWinsockコンとロールを使ったサンプルを見ると、
DataArrival イベントが発生した時点で、
全てのデータが揃っている前提で組まれているものばかりだからです。
(GetData を 1回行うのみ)
それでいいのであればいいのですが・・・
試してみたの? あと、HTTP 入門 でぐぐれば、HTTPプロトコル入門がすぐ見つかるから、 心配であれば1バイト読みしてヘッダを読み込んでから、バイト数見て後を読んでいけば? Winsockコントロール自体は、HTTPの全ての読み込みなんて意識しないと思いますよ。 レイヤーとしてHTTPのほうが上位だから。
788 :
783 :2005/07/28(木) 15:57:42
>>787 返信ありがとうございます。
ひとまず、テストでは1発のGetDataで全部読んでくれるので問題はないのですが、
ネットワークにトラフィックかかったらどうなんだろ?とか心配になりまして。
VBで立ち上げたサーバにtelnetで繋いで手打ちすると、
1文字打つ毎に DataArrival イベントが発生しますので、
なんらかの対策は打つべきかとは思うのですが…。
アドバイス通り、ヘッダの区切りとか、Content-Lengthとか意識してみようかと思います。
>>771 Dim ObjPrinter As Printer
For Each ObjPrinter In Printers
If ObjPrinter.DeviceName = "プリンタ名称" Then
Set Printer = ObjPrinter
Exit For
End If
Next
>>788 ソケット通信自体、上位レイヤーであるHTTPであることを認識してるわけじゃない。
あくまで、なんかTCP/IPで通信してるデータが来たことを伝えてるだけ。
中のHTTP電文が完結してるなんて意識してないですよ。
WinsockコントロールのDataArrivalイベントの説明を見ても、データの完了なんて一言も無い。
読む限りでは受信して溜まったデータ長が0から1になったときに発生すると言ってるよね。
HTTPはデータ伝送が完了したらコネクションを半分切る(shutdown)。 それ検出すればいいっしょ。
Keep Aliveできないな
>>778 つーかまんこワロスwwwwwwwwwwww
794 :
デフォルトの名無しさん :2005/07/29(金) 17:21:06
フォームがフォーカスを失った時と フォーカスを得た時に処理を実行したいのですが、どうすれば良いですか? Private Sub Form_LostFocus() Private Sub Form_GotFocus() Private Sub Form_Activate() ではそれぞれ1回しか処理されませんでした。 コントロールのLostFocus、GotFocusイベントでは フォーカスを失った時と得た時に毎回イベントが実行されるんですが、 APIを使わず、Formでもそれと同じような処理をさせるにはどうすれば良いでしょうか?
>>794 フォーム内のコントロールのフォーカス遷移ごとに、フォームでイベントが欲しいのか?
複数のフォームがそれぞれフォーカスを得たときにイベントがほしいのか?
後者ならば普通にイベント発生する。
おそらくフォーカスの移動ではなく アプリがアクティブになったときと非アクティブになったときとで 処理を行いたいんじゃないかと
798 :
デフォルトの名無しさん :2005/07/30(土) 09:23:07
すみません。 797さんの言うとおり、アプリ内でのフォーカスの移動ではなく Windows内で他のアプリにフォーカスが移ったとき(他のアプリがアクティブになったとき)と、 逆に戻ってきたときに処理を実行したいのです。 CallWindowProc、SetWindowLongを使えば出来ますが、 APIを使わずに実現する方法をご存じの方が居ましたら教えてください。
FormのBorderStyleを 「4 固定ツールウィンドウ」にした場合、 ScaleHeightを0にする方法がわかりません。 Form1.Height = Form1.Height - Form1.ScaleHeight としてもScaleHeightが0にならないんですが、どうすれば0に出来ますか?
>>798 そんなの簡単にできるだろ......と思って調べてみたんですが、
どうもVBネイティブの機能では不可能っぽいですね。
このかゆい所に手が届かない感じがVBテイストか。。。
言いたい事はそれだけ? じゃーね。さよなら。
802 :
デフォルトの名無しさん :2005/07/31(日) 11:39:51
VB6 のPrint命令を使って 図を作成しています DrawWidthに値を設定し線の太さをきめているのですが プリンタよって ことなる太さで出力されます 具体的には PDFプリンタとレーザープリンタです これは プリンタ側のせっていなのでしょうか?
>>802 何のせいといえばプリンタのせい。
Windows上の論理単位を物理単位に出すときの誤差。
>>802 質問する前にMSDNのPrintメソッドの項とDrawWidthの項は読んだ?
読んでまだそういう疑問が湧くなら頭が悪いし、読まずに質問してるのならただの馬鹿だ。
805 :
デフォルトの名無しさん :2005/07/31(日) 12:27:32
(VB6.0 DBはAccessでMDB接続です) 初めまして。プログラム初心者です。 今VB6.0でお小遣い帳のようなものを作成しているのですがその中でSPREAD(オリエント社)を使用しております。 そのSPREADにDBに保存してあるデータを表示するとデータ分(3件なら3行)しか表示されずそれ以降行を増やすことができません。つまりDBのデータしか表示できず画面にデータを追加できない状態なのですがどうすればよいでしょうか?
807 :
デフォルトの名無しさん :2005/07/31(日) 18:50:35
すいません…ヘルプを見てもできなかったから相談してみたのですが…。
808 :
デフォルトの名無しさん :2005/07/31(日) 21:35:13
VB6で、80000ぐらいのファイルを外付けのHDにコピーする プログラムを作ったんだけど、WinMEのときは1時間ぐらいで 終わってたのが、WinXPでは倍の2時間ぐらいかかるんです。 検索しながらファイルをコピーしてるんですが、 SHFileOperationでもCopyFileを使っても変わらずで なんでMEとXPで速度が変わったか教えてください。
VB初心者でFTPのこともよく分かてないんで質問させてください。 inetを使ってサーバーにあるファイルをダウロードするのにGETを使うのはわかるのですが、 ディレクトリごとダウンロードするにはどうしたらいいんでしょうか
すいません、 別の方法でなんとか目的の処理をするようにしました
VB 6.0 SP6 DataGridにチェックボックスを表示させたいのですが、 どうすれば出来ますか?
>>774 > 使えるよ要確認。
どうやるんですか?
Like "[東京,横浜,千葉]*"
みたいな方法を紹介してるところもあったけど、
これは「東京〜」「横浜〜」「千葉〜」にマッチするのではなく
「東〜」「京〜」「横〜」「浜〜」「千〜」「葉〜」「,〜」にマッチしてしまいます。
MSDNやVBAヘルプのLikeの項目を見ても、複数の単語(2文字以上)のみに
マッチさせる方法は載ってませんでした。
例として"abc"、"def"、"ghi"の3つのみにマッチするLike演算式を教えてください。
>>814 Likeよか正規表現げググッたほうがいいね。
ていうかググらなかったんだね。
[]は文字クラス定義してんだから1文字単位でマッチするの当たり前だよ。
"東京横浜" Like "*東京*" 'True
"東京横浜" Like "*東浜*" 'False
"東京横浜" Like "*東*浜*" 'True
"東京横浜" Like "横浜東京" 'False
>>815 名前欄にレス番入れなかった自分も悪いのですが。
>>772 でも書いたとおり正規表現を使う方法は知っています。
[]で囲った場合の例についても、知ってるからこそ
「こういう方法を紹介してるサイトもあるけど、これでは出来ませんよ」という意味で書きました。
正規表現を避けたい理由については、Likeでの演算式を教えて貰う上で
必要な情報ではないと思うので明言しませんが、
>>774 で
>>772 (レス番ひとつズレてますが)の条件に対してLikeが使えるとのことなので
その方法をお伺いしたいのですが。
774さん、よろしく御願いします。
817 :
デフォルトの名無しさん :2005/08/01(月) 20:59:31
すみません。 Acrobat6.0をインストールしたら使える Adobe Acrobat 6.0 Type Library のAPIドキュメントみたいなのって、どこで拾えますか? ヘルプには載ってないみたいだし、オブジェクトブラウザじゃいまいち意味が よくわからないから、ちゃんとした仕様書が読みたいんですが…。 アドビのサイト探してもよくわからんです><
>>817 英語のPDFならすぐ見つかるはずだが。
>>818 うう、それを探してるんだ…○| ̄|_
アドビのサイトから飛べばいいの?
どれがそうなのかさっぱりだ…。
822 :
820 :2005/08/01(月) 23:27:40
>>821 おおお、ありがとう!
漏れはここまでたどり着くことすらできなんだのです。
で、喜んでみてたんだけど…
どうやら欲しい情報はSDKのフルバージョンを落とさないと手に入らないらしい。
てことでDLを試みたが、何故か403エラー…。
ちゃんと登録もしたのに、なんでだよ○| ̄|_
とりあえず色々試してみます…。
コーディング以前にこんなとこで躓くとは…。
アドビなんてキライだ ウワァァァァァァヽ(`Д´)ノァァァァァァン!
あらま 5までなら何も無しにダウンロードできてたのにねぇ
>>816 >
>>772 でも書いたとおり正規表現を使う方法は知っています。
>[]で囲った場合の例についても、知ってるからこそ
>「こういう方法を紹介してるサイトもあるけど、これでは出来ませんよ」という意味で書きました。
出来る例を知っているのに出来ない例を提示して*これでは出来ない*と宣言しちゃう意図はなに?
知っているなら出来る例を提示してそれの問題点を指摘してもらわないと、何が駄目なのかというのがわからんのだが。
>>772 の条件はN個の単語の中の1つにマッチすればTrueになる条件式を知りたいというものじゃないの?
だったら、
If ",abc,def,ghi," Like( "*," & "abc" & ",*") Then
とか
If InStr( ",abc,def,ghi," , "," & "abc" & ," ) <> 0 Then
でいけるんでないの?
>知っているなら出来る例を提示して 出来る例が無いから聞いてるんじゃないのか? つーか824は頭悪すぎ。 夏か? 夏なのか? やっぱ夏なんだなw
If ",abc,def,ghi," Like( "*," & "abc" & ",*") Then If InStr( ",abc,def,ghi," , "," & "abc" & ," ) <> 0 Then これが出来てない例ならもうしらねぇよカスが
まあ、無知は黙ってろってことですな。 あ、俺もか。
質問です。 配列の数字をソートしてuniq(重複を削除)したいのですが、どうすれば いいのでしょうか? 例えば、array=(4, 8, 2, 8, 1) という配列であれば array=(1, 2, 4, 8) としたいのです。 rubyなら恐らく array.sort.uniq で終わるんですが、vb(正確には Excel VBA) で やれと言われているんで… よろしくお願いします。
整数ならバケツソートがいいよ。 高速だし重複削除も同時にできる。
830 :
828 :2005/08/02(火) 12:55:00
つーか、Excelだったらセルに配列を書き出してソートし 重複チェックしながら配列に書き戻した方が速い場合も多いな。 大抵の操作はセル(ワークシート)を使うと遅くなるけど、 ソートは複雑な場合ほどワークシートを使った方が速くなる。 というかVB(A)でのソートが遅すぎるんだけどね。 まあ、バケツソートが使える条件ならバケツの方が速いだろうな。
>>828 まず、自分のやりたい方針とかないの?
まったく真っ白?w
もしシートを使うのが嫌だったら、VB自体にソートのメソッドとかは無いから、 条件に合ったアルゴリズムを引っ張ってくることになるわけだが、 ソートのアルゴリズム自体はサンプルも含めて腐るほど転がってるから 好きなの拾ってくればいいだけでしょ。 Double型でも少数を含めた合計桁数がそれほど多くなければバケツソートを応用で使えるし。
834 :
828 :2005/08/02(火) 13:15:17
>>831 配列は高々20個程度なので速さはどうでもいいです。
>>832 方針としては、なるべくシートに書きたくなくて、プログラム上のみで
実現したいです。
>>834 聞きたかった方針とは別の事だけど、
まず、ソートとユニークを別に処理する方法だとして、
ソートについては、配列アクセスをどうすれば昇順(or 降順)になるか考えましょう。
ユニークなデータ配列にするにはどうすれば良いか考えましょう。
じっくり考えればアルゴリズムは出てくるでしょ???
# 面倒でも車輪は何度でも発明しましょう、きっと力がつくはず。
837 :
デフォルトの名無しさん :2005/08/02(火) 19:49:44
DataGridのIMEを制御する事って出来ますか? DataGridのセルにアクセスした時にIMEが表示されて半角キーで切り替えが出来るので恐らく可能だとは思うんですが、 DataGridのプロパティにはIMEModeがないので、どこで設定するのだろうと・・・。 ウィンドウハンドルを取得してIMEの設定を変える方法は、TextBoxでは上手くいったんですが、 TextBoxの場合、事前にIMEModeを1にしないといけないみたいです。 DataGridの場合どこにIMEModeが入っているんでしょうか・・・。
DataGridに配列の中身を表示させるには どうしたらいいですか?
ループ回す
超基本的なコントロールの使い方とかはMSDN調べろよ
842 :
デフォルトの名無しさん :2005/08/03(水) 21:54:19
コードからPADを生成してくれるフリーソフトってある?
MsFlexGridで列幅のサイズを可変させたいのですが どうすれば出来ますか?
844 :
デフォルトの名無しさん :2005/08/04(木) 11:39:45
サイズを変更したい → ColWidth(Index) = n サイズを可変にしたい → そういう機能はないので自分で実装しろ
846 :
844 :2005/08/04(木) 11:54:38
>>843-845 “可変”だったか。
じゃあ、こうしとけ。
MSFlexGrid1.AllowUserResizing = flexResizeBoth ← この場合は行と列の両方を可変できる
コード上で任意に変更したいのか、 文字列に対して自動可変にしたいのか、 エンドユーザーが変えられるようにしたいのかで変わってくるからな。 だいたい「可変させたい」って表現自体がおかしいし。
しつもん VB6で、 「IEを起動する」 プログラムをつくりたい どうすればいい?
>>848 ただ起動するだけなら基本中の基本
MSDNでも読んでこい
そうはいっても純粋にIEを起動するか、どっかのページを開くかで違うと思う。 後者ならば、ShellExecuteEXでいけるはず、前者はしらん。
前者だってIEXPLORE.EXEをShellExecuteすればいいだけ。
MSDNよんでるけど、なんか英語で ぐちゃぐちゃかいてあってわからん けっきょくどうすればつくれるんだか。 もうHSPでやちゃおうか
>852 よぅ中学生、夏休みの宿題か? 世の中には「質問の仕方」ってものがあるんだが、幼すぎてまだ分からんか?
Formの上に、PictureBoxがあり画像が貼ってあるとします。 さらに、その上にRichTextBoxを配置して、RichTextBoxの背景部分を 透明化したいと思うのですが、何か良い方法は無いでしょうか?
856 :
デフォルトの名無しさん :2005/08/05(金) 07:46:03
>>852 日本語がごちゃごちゃしてて分からないなら同意できなくもないが、
英語のどの辺りがごちゃごちゃしているんだ?
>>847 ごめんなさい
表現が間違っていました
文字列に対して自動可変させたいのです。
宜しくお願いします。
たしかにMSDNの日本語版は直訳過ぎだろと、思わずツッコミ入れたくなる所があるな。
まあ、下手な訳よりは原文読んだほうが早い場合はあるね。 技術情報の部分だっけ?去年あたりに自動翻訳エンジンの文書をそのままさらすようになったの。 散々お笑いの対象になったとおもうけど 。
>>858 その関係のテクニカルトランスレータ周囲でで作業してた事があるけど
実際、スキル低いよ。
専門分野外の人も多いし…
まぁ、スキルがある人は開発に行っちゃうだろうしな。
862 :
デフォルトの名無しさん :2005/08/05(金) 14:59:50
条件文の乱立で質問させてください 下記のようなプログラムを作ったのですが、見た目もわかりにくく 変数も条件文も大変多くなってしまい、おそらく負荷もかかっているではないかと考えています N1〜N8まで8個同じプログラムの繰り返しとなり、 それを最後にL・M・Sでそれぞれ8個を合計する必要があるのですが、 If N1 = 0 Then SN1 = 0: MN1 = 0: LN1 = 0 ElseIf N1 = 1 Then SN1 = 1: MN1 = 0: LN1 = 0 ElseIf N1 = 2 Then SN1 = 1: MN1 = 1: LN1 = 0 Else SN1 = 1: MN1 = 1: LN1 = 1 End If 'これをN1からN8まで きれいにまとめるためにヒントもしくは例文教えてもらえたらと思います。 よろしくおねがいします。
配列・・・VB云々以前のプログラムの基本だと思うんだが。
864 :
デフォルトの名無しさん :2005/08/05(金) 15:18:52
>863 マニュアル調べたら乗ってました応用したら使えそうです。ありがとうございます。 大学でまわりに誰もプログラム使える人がいない中(教授も使えない)の独学なので、 基本すらわかってないです、申し訳ない。
>>862 SN(i) = IIf(N(i) = 0, 0, 1)
MN(i) = IIf(N(i) = 0 Or N(i) = 1, 0, 1)
LN(i) = IIf(N(i) >= 0 And N(i) <= 2, 0, 1)
ループと合計算出くらいは自分で書けよ。
>>862 配列、For文、Select文 を使うと良いよ。
Dim I, N(1 To 8), S, M, L
S = 0: M = 0: L = 0
For I = 1 To 8
Select Case N(I)
Case 0
Case 1
S = S + 1
Case 2
S = S + 1: M = M + 1
Case Else
S = S + 1: M = M + 1: L = L + 1
End Select
Next I
>>866 ・
・
・
・
・
・
・
・
・
・
・
・
・
・
しょぼい・・・
>>865 >>866 ありがとうございます。
お手数をおかけしました(>_<)
熟読させていただきます
IPアドレス入力用のコントロールってありますか?
あります。
MSDN読むと使えるようになります
>>871 ごめん脊髄反射レスしちゃった。
WIN32上にはIPコントロールっつーのがあるんだけど、
VB用には標準では用意されてないかも。
以下の処理をしたいのですが教えていただけないでしょうか TextBoxに [田] [田中] [田中 達] [田中 達也] と入力(入力者によってまちまち)されたときに 一文字ずつ配列に代入したいのですがどのようにしたらいいのか教えてください よろしくお願いします<(_ _)>
コピペ、IMEからの複数文字の確定、消去、などを考えると changeイベントで毎回0から配列作るしかないでしょ その方法に付いては簡単なループ回すだけなので解らなければ自分で調べろ
Pardon?
Splitでぶったぎって、それからぶった切られた一つ一つの要素に関して 一文字目が'['かどうか調べてそんなら除けるだけじゃん。 VB5だからSplit使えねえって? Split相当の関数なんて簡単にかけるでしょ。
879 :
874 :2005/08/06(土) 15:07:36
色々試してみてこんな風になったのですが使い方正しいか見てもらえますか、よろしくお願いします Public gStrmoji(1 To 50) as string public gStrname as string public count as long sub name() gStrname = Text1.Text For count = 1 To 50 gStrmoji(count) = Mid$(gStrname, count, 1) Next count end sub
>>879 マジックナンバー(ここでは50)、イクナイ(・A・)!
Len を使って文字列の長さを予め調べておくのがよろす
Public gStrmoji() as string Public gStrname as string Public count as long Public sub name() gStrname = Text1.Text For count = 1 To Len(gStrname) ReDim Preserve gStrmoji(count) gStrmoji(count) = Mid$(gStrname, count, 1) Next count End Sub Private Sub Text1_Change() name End Sub
>>881 >>882 どうもありがとうございます Lenであらかじめ文字列の長さを調べておくのがいいのですね
さっそくそれを採用させてもらいます ありがとうございました<(_ _)>
885 :
デフォルトの名無しさん :2005/08/07(日) 00:56:40
テキストボックス上で改行を組み合わせて文字を表示したいのですが Text1.MultiLine = True Text1.Text = "あいうえお" + Chr(13) + かきくけこ これだと改行されずに一行で表示されてしまいます こういう場合だとChr(13)は無視されるんでしょうか 改行する方法を教えてください
>>885 Chr(13)のかわりにvbCrLf
あと.Mul
VB6.0で以下のことをしたいのですが教えていただけないでしょうか Option1(0) ↓ ○ TextBox1 ○ TextBox2 ↑ Option1(1) このようなフォームの配置をしているのですが TextBox1に文字が入力されたらOption1(0)が選択 TextBox2に文字が入力されたらOption1(1)が選択されるようにしたいのですが どのようにしたらいいのか教えていただけないでしょうか <(_ _)>
889 :
888 :2005/08/07(日) 08:35:46
上げ忘れました
ChangeイベントにそれぞれのOptionを選択するコード入れればいいだけじゃん
891 :
888 :2005/08/07(日) 09:14:19
>>890 Private BlnFlag As Boolean
Private Sub Option1_Change()
If BlnFlag = False Then
If LenB(Trim$(Text2.Text)) = 0 Then
Else
Option1(1).Value = True
BlnFlag = True
End If
End If
End Sub
このように記述したのですがうまく機能しません・・・
どこがいけないのでしょうか><
TextBoxのChangeイベントだっつーの 「TextBoxに文字が入力された」ら対応するOptionを選択したいんだろ 「TextBoxに文字が入力された」時に動くのがTextBoxのChangeイベントだよ。 まあ、正確にはイベント名でもわかるように「入力」ではなく「変更」なので 消去でも動くけど、消去の時動作させたくなければちょっと工夫すればいいだけだし。
Text1_ChangeとText2_ChangeにOption(x).Valueを変更するのを書けばいい話じゃん つーかFlagとか使うなよ
>>885 ,
>>888 みたいな質問には「自分で調べろ」と言ってやるのが
親切ってもんだと思うんだが、なんでそんなに「教えたがり」なのかねえ。。
なにかそんなに優越感に飢えてるんだろうか。
まあ
>>885 ,
>>888 みたいな人はそんな質問してる時点で(何を言おうと)見込みがないとも思うけど。
説教厨うざい。
VB6.0でメモリリークというのはどんなコードを書いてしまうと 発生するのでしょうか。
自分で調べられないなら、気にすることないと思うよ。 VBのみを利用してる限りは難しいね、再現させるの。 APIとか使えば一発だけど。
>>897 例えばどんなことをするとメモリリークするのですか?
>>897 難しいことなんかねぇってww
>>898 Set hoge = New hogehoge
とかやって
Set hoge = Nothing
をしないだけでメモリリークするよ。
ファイルを開くときに Open "フルパス" 〜〜〜〜〜 とすると思うのですが パスのところを nCurrentDir = CurDir$() Openfile = nCurrentDir & "\" & "開くファイル名" Open Openfile 〜〜〜〜〜 としてとったのですがなぜかファイルがありませんとなってしまいます^^; もちろん Openfileに入ってる文字列はフルパスとまったく同じになっています もしかしてこのようなファイルの開き方はできないのですか???
>>899 ほんと?確かめた?
ADODB.Connectionでやってみたけどリークしてないっぽいよ。
902 :
900 :2005/08/07(日) 21:33:13
ごめんなさい! 読み込むファイルをExeファイルと別のフォルダに入れてたの忘れてました>< 確認不足でした 無事できました ほんとすみません orz
>>901 それ繰り返してたらリークしない?
バージョンとかオブジェクトにもよるのかなぁ。
ADODB.Connection だったら、確か Close しなきゃメモリリークした記憶が。
ここ数年、VB弄ってないんで間違ってたらごめん。
>>903 最初にグンっと上がって後はまったいら。
これはリークではないよな。
>>905 そんなのもう見てるよ。ググって一番上に出てくるやつだろ。
見た上でそんな事言ってるのかよ
>>905 そのページでは何も有用な結論は出ていないわけだが。
なんだ、単なる野次馬か
>>899 それではリークしませんよ。
VBもそこまで馬鹿じゃない。
>>912 例えばどういうことをするとリークするのでしょうか。
簡単なサンプルをお願いしたいのですが。
>>913 グーグルでVB6+メモリ+リーク、参照カウンタ+VB6 とかで検索してみれば?
普通にVB使う分にはまずメモリリークは発生しません。(除くコンポーネントのバグと循環参照)
言語仕様としてそうなっています。
Win32APIを使う場合は別です。メモリーを動的確保したら当然開放しないとリークですし、
広い意味ではハンドルなどの未開放もリソースのリークになります。
APIでバッファを確保せずに、メモリに読み込んでVBごと落ちた時があったけど、 それもメモリリークの一種?
>>915 それは単なる破壊だろ?漏れてるわけじゃない。
>>894 がいるからいつまでたってもこのスレは
罵りあいの低レベルなんだな。質問のレベルの高低以前に。
918 :
デフォルトの名無しさん :2005/08/08(月) 21:43:23
タブーオーダーの一括設定について VB6.0+SP5+Win XP SP2です。 画面にコントロールを貼り付けてロジックの記述は終わったので、画面まわりを整備しようと タブオーダーをきちんと順番に定義しようと思っています。ただ、60近くあるコントロールの タブオーダーをいちいち変更していくのはすごく面倒です。 アドインでもなんでもいいのですが、IDE上で簡単に設定できるツールはないでしょうか。 MSDNやググってみても見つかりませんでした。よろしくお願いします。
>>913 これでいいかな?
'↓Class1.cls
Option Explicit
Public obj As Object
Private dummy(1048576) As Byte '1MB
'↑Class1.cls
'Form1
Private Sub Command1_Click()
Dim a As Class1, b As Class1
Set a = New Class1
Set b = New Class1
Set a.obj = b
Set b.obj = a
'Set a.obj = Nothing
End Sub
何が楽しいのか知らないけど、どうしても続けたいなら
まず「メモリリーク」の意味を確認することから始めたら?
http://e-words.jp/w/E383A1E383A2E383AAE383AAE383BCE382AF.html ここの定義に従えば、VBでも悪意をもってすればメモリリークを起こすコードが書けそうだが、
ケアレスミスではあまりないかも。malloc系の処理は全部ラップされてるから。
いや、フォームに関してはミスもありうるかも。
例えばモーダレスなメッセージボックスを表示するようなフォームを作って、
インスタンスの作成元がClosed(Unloadだったかな?)イベントで
参照を解放せずに同じ変数に別のインスタンスを作成して代入する操作を
繰り返すと見えないフォームがたくさん出来る仕様じゃなかったかVB6って?
VB6で、クラスモジュールのインスタンスのメモリイメージをシリアライズする方法ってないですかね。 クラスモジュールが扱うデータ量が多くて、 データをロードするときに解釈して配列に入れていくと時間がかかるんです。 クラスモジュールのポインタにメモリを確保して、 バイナリのままドカンと読み込んで使えるようになったらいいんですけど。 こういうことはC++とかじゃなきゃ無理っぽいですが、 裏技的な方法でも結構ですので、もしあれば教えてください。
>>922 不恰好だけど、クラスのシリアル化したいメンバだけを集めた構造体を定義して、
今まで個別に宣言していたメンバの代わりにその構造体を宣言するのが
一番素直で簡単じゃないかな。
構造体ならバイナリファイルに保存/復元可能なわけだから。
まあ、シリアライズ/デシリアライズするときだけ、メンバ変数を
構造体のメンバ[へ/から]コピーするのでもいいと思うけど。
924 :
デフォルトの名無しさん :2005/08/09(火) 13:45:22
VB6.0で記述するコールバック関数について質問です。 VC++6.0でDLLを作成しています。 DLLからスレッドを作成し、コールバック関数を呼ぶ部分があります。 VC++で作成したコールバック関数は問題なく実行できますが、VB6.0 で作成したコールバック関数を指定すると、実行時にアプリが落ちて しまいます。 ちなみに、VB6.0で作成したコールバック関数をワーカースレッドでなく、 DLLから直接呼ぶと問題なく実行できています。 別スレッドからVBのコールバック関数を呼ぶことは出来ないでしょうか?
こういうことを書くとまた非難浴びると思うが・・・VBでそんなことするのが間違い。
>>923 全然不格好じゃないです。
ユーザ定義型がまるごとPutで書き込めるとは知りませんでした。
動的配列の場合の書き込みはちょっとややこしそうですが、やってみます。
ありがとうございました。
>>926 じゃあ、シンプルに。
VB6 の関数、コンポーネントはそもそもマルチスレッド対応ではない。
たまたま上手くいくものもあるが、そもそもVB6はシングルスレッドでの実行を前提としている。
すみません質問させてください。 VBでC+で作成したATLのイベントを取得しているんですが 現状VBで作成したファイルを開くダイアログを表示している 間イベント取得処理が停止してしまいます。 これをダイアログが開いている間にもイベント取得処理をし たいのですが何か方法はありますでしょうか。 お知恵をお貸しくださいませ、お願い致します。
>>929 標準ダイアログはモーダルだから、自作でモードレスで同じような画面作るのがいいのかな?
コモンダイアログコントロールでそもそもモードレスできるかは自分で調べてください。
931 :
929 :2005/08/09(火) 16:43:07
>930殿 お早く丁寧な回答有難う御座います。 自作する方向で考えてみたいと思います。
932 :
924 :2005/08/09(火) 17:48:10
>925, 928 レスどうも。 スタックをや管理情報をが壊れるのでしょうね。 別の方法を考えます。ありがとうございました。
933 :
924 :2005/08/09(火) 17:50:01
誤:スタックをや管理情報をが 正:スタックや管理情報が
スタックは壊れないが、まあそんなところだろう。
>>931 停止しない。IDEじゃなくEXEで動かせ。
936 :
929 :2005/08/09(火) 18:56:45
>935殿 有難う御座います、確認したところ動作いたしました。 危うく無駄な画面を作成するところでした有難う御座います。 よろしければ理由も教えていただけないでしょうか。 よろしくお願い致します。
>>936 MSのサイトに書いてあったんだが、場所がもうわからん。
Windowsのメッセージのイベントの処理の関係だったかな。
IDEが食ってしまうんだ。
>>937 殿
有難う御座います、早速MSのサイトを調べてみたいと思います。
ご丁寧に色々教えてくださり、大変助かりました。
おかけで休暇をとる事ができそうです。
IDEが食うとか実行ファイルならOKとかそういう問題だっけ? むしろWin9xとNT系の違いのような気がしたけど。。 まあどっちにしろちょっとの手間を惜しんで、そんな予期しない再入が起こりかねないような 危ない橋を渡るのはあまり賢い選択でないと俺は思うけどね。 メッセージ表示するモーダレスなフォームなんて三分で出来ると思うけど。
>>939 まったく違う。危ない橋なんかじゃないし。
妄想バカは黙っててくれ。
>>940 妄想バカねえ。。
再入って言っている意味がわかってるのかな。
もちろん再入があれば直ちに危険ということはないが。。
ちょっとの手間を惜しんで後々に「気をつけて避けて通らなければならない地雷」
を残すのは愚の骨頂だと思うけどね。
しかし幼稚臭い奴だな君は。
グレーな仕様、バギーな仕様は避けるべきだと思うけどね。 明らかな代替手段があるわけだから。
VB6.0でqsortやbsearchが簡単に使える方法は ないでしょうか。
スミマセン、質問させて下さい。 VB6.0を使って、Word、Excel、PowerPoint 、PDFの種類のファイルを 読み込んでWord、PowerPoint 、PDFは総ページ数 Excelは、総シート数を集計するプログラムを作らなければ いけないのですが、これらについて詳しく書いてある本が少なくて 調べられず、困っています。 どのようにすれば、取得できるのでしょうか? 是非お知恵をお貸しくださいますよう、よろしくお願いいたします。
945 :
944 :2005/08/09(火) 23:21:25
開発環境を書き忘れていました
946 :
944 :2005/08/09(火) 23:22:34
OS:windowsXP SP1 開発環境:VB6.0 で開発しています。 よろしくお願い致します。
>>944 それぞれOLEで連携してやれば出来ると思うけど。
参照設定すれば、VBAと同じようにそれぞれのオブジェクトを触れる。
どのオブジェクトの何を参照するかは、それぞれのVBAのヘルプを参照。
ExcelはWorkBookのWorkSheetsコレクションのCountかな?
PDFは最近このスレで確か質問あったはず。
その他はしらん。
それぞれは相手にインストールされているというのは確実なんだろうか?
949 :
944 :2005/08/10(水) 00:13:18
>>947 即レスありがとうございます。
>>948 それぞれに対応したソフトは確実に
インストールされている環境です
950 :
944 :2005/08/10(水) 00:15:12
途中で書き込んでしまった。。。 947氏様、返答ありがとうございました。
951 :
デフォルトの名無しさん :2005/08/10(水) 11:10:28
教えてください。 以下の方法で円を描いて、BMP保存すると、円がガタガタになります。 線を滑らかなにはできませんか? Picture1.Circle (2500, 2500), 2400, RGB(255, 0, 0) '保存 SavePicture Picture1.Image, "C:\Test.bmp" Picture1.AutoRedraw = False
952 :
デフォルトの名無しさん :2005/08/10(水) 11:26:29
MScommコントロールを使ったプログラムを、 他のパソコンで実行しようとすると、 「共通言語ランタイム デバック サービス アプリケーションでハンドルできない例外が発生しました」 と出るのですが、これを改善するにはどうしたらいいでしょうか? XPをサービスパック2に、.NET Framework1.1をサービス パック1にしてます
953 :
デフォルトの名無しさん :2005/08/10(水) 11:46:58
質問させてください。 ADOについてですが、 アクセスのクエリに2つのパラメータを作成しておいて、 VB上で動かしたいんですが どうすればよろしいですか?
文字列にタブ(tab)を入れて整列させたいのですが どうやればよろしいか? ↓"文字列"にタブの挿入をお願いします。 Label.caption = "文字列"
Label.caption = "文" & vbTab & "字" & vbTab & "列" こういう事?
>>951 こちらで試したがpicture1とそっくりなものが保存されてたよ。
アンチエリアシングがやりたいだけとか
958 :
954 :2005/08/10(水) 15:51:28
UserControlのプロパティを作成していますが、 プロパティーウィンドウの左に半角で(テキスト)、右にドロップダウンボタンが表示され 改行入力できるプロパティの作り方が分かりません。 (例えるならMultiLine=True時のTextBox.Text) どのような型を使えば使えるようになりますか?
DataGridでボタンを表示させて ボタンを押すとデータのリストを表示する方法ってありませんか? ボタンの表示まで出来ています。
961 :
デフォルトの名無しさん :2005/08/10(水) 23:43:11
>>957 Picture1.Circle (200,200), 100, RGB(255, 0, 0)
Picture1.End Doc
プリンター出力だとガタガタがなくなります。
>>924 スタックが壊れると言うよりも、VB6.0のIDEがマルチスレッドを意識して作られていないだけ。
ついでにVB6.0もマルチスレッドを前提に作られているわけじゃないので、大抵は問題なく動くが止めとけ。
964 :
デフォルトの名無しさん :2005/08/11(木) 08:52:49
>>962 何で
偉い人教えて、BMPに綺麗な円を描く方法教えて
>>964 DPIの違い
プリンタが600DPIだとしたら、普通のディスプレイに比べて約36倍細かく描画できる。
PCのモニタなんてモザイク映してるようなもん。
VB6のMSFlexGridについてなのですが、MouseDownイベントでボタンを押した位置が 何列目の何行目にあたるかを調べる良い方法は無いでしょうか? 今はループを回して0行目から行高を加算していき、合計がy以上になる位置を探したりしてます。 全ての行高が同じ場合や規則性が有る場合は計算で出せるから良いのですが、 列幅は不定なことが多いし、行高も不定な場合は上記のようにループ回す方法しか思い浮かびません。 数千行とかになるとはっきり体感出来るほどレスポンスが悪くなるので、 何か良い方法をご存じの方が居りましたらどうかご教示願います。
ネタでしょ?ネタだとしたらセンスないと思うけど。
>>966 それだけじゃ納得しないでしょ。
俺が964的な人だとしても、「だってフラッシュとか見れば現に滑らかな円が描けてるじゃん」
って思うもん。
>>964 まずはアンチエイリアスって技術(そんな大げさなもんでもないが。。)が
どういうものか調べてみたら?ネタじゃないなら。
で、VBでアンチエイリアスかけて図形を描画する方法だけど、残念ながら
簡単には実現できないと思った。DirectX使わないとできない?
.NETのGDI+にはアンチエイリアスの機能があるんだけどねえ。。
まあアンチエイリアスの考え方そのものは難しくないから、
気合入れれば自分で実装できないことはないとは思うけど。(パフォーマンスはともかく)
970 :
967 :2005/08/11(木) 14:56:00
>>969 非固定セルの左クリックの場合ならそれでもいいんですが、
右クリックや固定行列だと選択セルが移動しないので
Row, Colプロパティでは取得できません。
>>967 この場合、「MSFlexGridのエリア内であっても、セルがない場所」をクリックする場合もあると思うので、
あなたがやっているように、計算で求めるしかないでしょう。(いい方法があるかもしれませんが。。。)
しかし、ループを回して、その都度コントロールから値を取得するのは、時間がかかるため、
あらかじめ、行高と列幅の値を配列に格納しておいて、イベント時にはその配列から
計算するようにしてみてはいかがでしょうか?
行高と列幅がそれぞれ変更になったときは、その都度配列の値を変更するようにして。
>>964 保存した画像を自動ズームで見てるから。
973 :
デフォルトの名無しさん :2005/08/12(金) 09:23:22
>>967 MouseRowとMouseColじゃだめなん?
VB6.0でDataGridにComboboxを入れるやり方ありませんか?
Left と Left$ の違いはなんでしょうか。
>>975 Variantを返すかStringを返すか
>>975 返り値をString型にしか入れないならLeft$の方が高速らしい。
978 :
975 :2005/08/12(金) 15:17:40
>976,977 ありがとうございます!
979 :
デフォルトの名無しさん :2005/08/13(土) 12:09:31
VB6で作ったアプリで、他のアプリから開いてるコモンダイアログの カレントフォルダパスを取得したり、任意のフォルダに移動させたりしたいのですが やり方がわかりません。 この手の機能を実装してるアプリでVBのソースを公開しているものも見あたらず ググっても手がかり無しです。 丸投げになってしまいますが、具体的なコード書けるベテランの方、どうかよろしく御願いします。
>>979 実装してるアプリでVB製のものの具体名は?
982 :
デフォルトの名無しさん :2005/08/13(土) 13:14:13
すいません、 ヤフーオークションの出品終了分の一覧をテキストに吐き出すツールを作りたいのですが、 いままでVB6はそれなりに触ってるのですがなにからはじめればいいのかけんとうもつきません。 どなたかこれを実現する方法しりませんか?
>>982 知ってますが、なぜ「いままでVB6はそれなりに触ってる」のような
ウソをつくのか説明してください。
>>983 ウソじゃないですよー
家計簿みたいなものからAPIを利用して画像を加工するようなツールぐらいまでなら作ったことありますもん
>>979 また他のアプリか・・・それやりたきゃOSの仕組みから勉強しろって言いたい。
こんなところで聞く程度のレベルで作るなと。
>>982 まず日本語の勉強を、何をしたいのか一切伝わりません。
とりあえず2行目読む分には、横にちらしを置いておいて裏に書いておけば?って思うけど。
答えられないとき、回答する上で 必要になるわけでもないことを聞き返したり むやみに罵倒したりするのは止めよう 解らなければレス返さなければいいだけ
じゃあ余計なことを書かずに質問の内容を解りやすく且つ簡潔に書けよハゲが。
どうしたの、ボウヤ?
夏なんでしょ 放っておいてあげようよ
>>982 WebBrowser1.Document
Visual Basic 6.0の評価版は今でも入手可能ですか? 検索してみましたが、書籍の付録しか無いのでしょうか? ダウンロード出来るサイトがあれば是非教えて下さい。
無い
いっそ 作ったことありますんもん ならw
次スレまだー?オレ立てられない
>>982 HTML解析してって話だろ?
InStrつかって "<" の位置を検索してなんてやめてくれよ。。。
XMLHTTPRequestでHTML取得してMSHTMLでローカル展開すればスマート
分からなければ
>>990 の方法で
MSHTMLはDHTMLのだから、VBよりもDHTMLの勉強しろ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。