トップページ⇒tech
1001コメント345KB

VBプログラマ質問スレ(6.0以前) Part50

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/22(日) 20:39:53
ここは Visual Basic 〜6.0 の質問スレです。
質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。

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

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

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

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

※「まず自分で調べる」クセを身につけよう。
0357デフォルトの名無しさん2006/11/23(木) 22:54:51
>>356
ハイハイ、君の言う通りだね。

満足した?
03583522006/11/23(木) 23:15:13
>>357,354,351,346,344

お前、何にも引き出しがない、つまんないヤシだな。
会話も成立しない。

飽きた。もう、来るなよ。
0359デフォルトの名無しさん2006/11/23(木) 23:22:10
>>358
>>357
0360デフォルトの名無しさん2006/11/24(金) 00:47:14
>>295
>>304
>>307

どこかで見たクソソースだと思ったら
http://f57.aaa.livedoor.jp/~jeanne/bbs/faq.cgi?mode=al2&namber=8438
これか。

なんていうか、氏んだほうがいい。
03613132006/11/24(金) 05:34:41
アイコン使用の効率化を考え、LoadResPictureなどを使おうとした結果です。
1・imageで一個一個貼りつけ…現状。特に問題はないがダサい感じ
2・LoadResPicture…画像が崩れるのでダメ
3・imagelist…メモリ不足多発、EXEサイズ増大で良いこと無し
4・imagelistをアイコン10個ごとにインデックス分け使用…メモリ不足でコンパイル不可

3〜4はもちろんimageはすべて削除してる。2もほとんど削除し、転送用の数個のみ。

LoadResPictureで画像潰れないテクニックないすかねえ?
0362デフォルトの名無しさん2006/11/24(金) 07:11:07
>>361
EXEにリソース埋め込んだら、意味がないだろ・・・・

普通はリソース用のDLLを作る。

お前のようなバカは、リソースなんか使うなといういい例。
0363デフォルトの名無しさん2006/11/24(金) 08:27:10
馬鹿に馬鹿が突っ込む。
このスレらしい光景だねw

>EXEにリソース埋め込んだら、意味がないだろ
なんでだよw
0364デフォルトの名無しさん2006/11/24(金) 09:09:38
>>363
本気で聞いてるのか・・・?
0365デフォルトの名無しさん2006/11/24(金) 09:26:43
>>363
コイツはドトネト板にも入たリアルキティ。
救いようがない。

ほっとけ。
0366デフォルトの名無しさん2006/11/24(金) 13:16:12
>>364-365
>>363 じゃ無いけど、おまえらのほうがよっぽど心配だよ。
03673132006/11/24(金) 15:59:23
EXEに埋め込みたい理由は、単に実行に必要なファイルを一つだけにしたいってだけなんですよ。

アイコンをカスタムリソースとして登録して、LoadResDataで
バイト型配列に取り込んで、テンポラリファイルに書き出してから
それを画像ファイルとして読み込む、というやり方もあるようだけど、
それじゃなんか釈然としない。
アイコン形式を使いたい動機は、PaintPicture一回でマスク付きで画像を描けるから。
一枚のでかい画像にアイコン画像全部並べて、マスク画像も作って
二枚の画像を持つのが無難なんだろうか。
PaintPicture二回必要になるけど、速度変わるかな?
0368デフォルトの名無しさん2006/11/24(金) 22:50:52
六角形を書いてその内部を塗りつぶすプログラムを作っているのですが・・・
1つずつ塗りつぶす色を変える場合、下のプログラムでは、どうすればいいのでしょうか?
宜しくお願いします。

Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As Long, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function PaintRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Const LOGPIXELSX = 88 ' Logical pixels/inch in X
Private Const LOGPIXELSY = 90 ' Logical pixels/inch in Y
Private Const ALTERNATE = 1 '交差したリージョンは塗らない
Private Const WINDING = 2 '交差したリージョンも塗る

Private Sub PaintRegion(Dest As Object, ParamArray P())
' PaintRegion
' 多角形を塗りつぶす関数
' 使用方法:
' PaintRegion 描画オブジェクト, X1, Y1 , X2, Y2, ...
' 描画オブジェクトには、Form, PictureBox, Printerなどが使用できます。
' 座標はTwips単位で渡します
' 塗りつぶし色は、描画オブジェクトのFillColorプロパティの値が使用されます。
03693682006/11/24(金) 22:52:09
Dim Point() As Long '座標(ピクセルに変換した値)
Dim hRgn As Long 'リ−ジョンのハンドル
Dim i As Long, nPoint As Long
Dim PPTX As Single, PPTY As Single

ReDim Point(0 To UBound(P))
nPoint = (UBound(P) + 1) / 2

PPTX = GetDeviceCaps(Dest.hdc, LOGPIXELSX) / 1440
PPTY = GetDeviceCaps(Dest.hdc, LOGPIXELSY) / 1440
For i = 0 To nPoint - 1
'ピクセルに変換
Point(i * 2) = CLng((P(i * 2) - Dest.ScaleLeft) * PPTX)
Point(i * 2 + 1) = CLng((P(i * 2 + 1) - Dest.ScaleTop) * PPTY)
Next i

Form1.Picture1.FillColor = RGB(255, 0, 0)
'塗りつぶし
Form1.Picture1.FillStyle = vbFSSolid

hRgn = CreatePolygonRgn(Point(0), nPoint, WINDING)
PaintRgn Dest.hdc, hRgn
DeleteObject hRgn
End Sub
03703682006/11/24(金) 22:52:48
Private Sub Command1_Click()
'正六角形
Form1.Picture1.Line (433, 0)-(0, 250), &HFF0000
Form1.Picture1.Line (0, 250)-(0, 750), &HFF0000
Form1.Picture1.Line (0, 750)-(433, 1000), &HFF0000
Form1.Picture1.Line (433, 1000)-(866, 750), &HFF0000
Form1.Picture1.Line (866, 750)-(866, 250), &HFF0000
Form1.Picture1.Line (866, 250)-(433, 0), &HFF0000

Form1.Picture1.Line (866, 750)-(433, 1000), &HFF0000
Form1.Picture1.Line (433, 1000)-(433, 1500), &HFF0000
Form1.Picture1.Line (433, 1500)-(866, 1750), &HFF0000
Form1.Picture1.Line (866, 1750)-(1299, 1500), &HFF0000
Form1.Picture1.Line (1299, 1500)-(1299, 1000), &HFF0000
Form1.Picture1.Line (1299, 1000)-(866, 750), &HFF0000
'塗りつぶし
PaintRegion Picture1, 433, 0, 0, 250, 0, 750, 433, 1000, 866, 750, 866, 250, 433, 0
PaintRegion Picture1, 866, 750, 433, 1000, 433, 1500, 866, 1750, 1299, 1500, 1299, 1000, 866, 750
End Sub

Private Sub Command2_Click()
End
End Sub

長くなったけど・・・
宜しくお願いします。
0371デフォルトの名無しさん2006/11/24(金) 23:54:44
>>370
Form1.Picture1.FillColor = RGB(255, 0, 0) 'これ
0372デフォルトの名無しさん2006/11/25(土) 00:08:37
以前作ったやつの余計な部分削ったやつ
動作確認してないけど原理はあってる筈だから適当に修正しな
動作すればいいレベルのコーディングだ
つーか↑の6角形の座標固定値か

Dim SX As Integer, SY As Integer
Dim PI As Single, HexR As Integer
Dim tmpX As Integer, tmpY As Integer
PI = Atn(1) * 4
HexR = 48
SX = 200: SY = 200
For i = -30 To 330 Step 60
fMain.Line (SX, SY)-(SX + Sin(i * (2 * PI / 360)) * HexR, SY + -Cos(i * (2 * PI / 360)) * HexR), vbBlack
Next i
tmpX = SX + Sin(30 * (2 * PI / 360)) * HexR
tmpY = SY + -Cos(30 * (2 * PI / 360)) * HexR
For i = 0 To 5
fMain.Line (tmpX, tmpY)-(SX + Sin((i * 60 + 90) * (2 * PI / 360)) * HexR, SY + -Cos((i * 60 + 90) * (2 * PI / 360)) * HexR), vbBlack
tmpX = SX + Sin((i * 60 + 90) * (2 * PI / 360)) * HexR
tmpY = SY + -Cos((i * 60 + 90) * (2 * PI / 360)) * HexR
Next i
tmpX = SX + Sin(-90 * (2 * PI / 360)) * HexR
tmpY = SY + -Cos(-90 * (2 * PI / 360)) * HexR
For i = 0 To 5
fMain.Line (tmpX, tmpY)-(SX + Sin((i * 60 - 30) * (2 * PI / 360)) * HexR, SY + -Cos((i * 60 - 30) * (2 * PI / 360)) * HexR), RGB(128, 128, 128)
tmpX = SX + Sin((i * 60 - 30) * (2 * PI / 360)) * HexR
tmpY = SY + -Cos((i * 60 - 30) * (2 * PI / 360)) * HexR
Next i
0373デフォルトの名無しさん2006/11/25(土) 00:09:21
fMain.FillStyle = 0
fMain.FillColor = RGB(160, 160, 160)
Call ExtFloodFill(fMain.hdc, SX - 2, SY + 1, fMain.Point(SX - 2, SY + 1), 1)
Call ExtFloodFill(fMain.hdc, SX + 0, SY + 1, fMain.Point(SX + 0, SY + 1), 1)
Call ExtFloodFill(fMain.hdc, SX + 2, SY + 1, fMain.Point(SX + 2, SY + 1), 1)
Call ExtFloodFill(fMain.hdc, SX - 2, SY - 1, fMain.Point(SX - 2, SY - 1), 1)
Call ExtFloodFill(fMain.hdc, SX + 0, SY - 1, fMain.Point(SX + 0, SY - 1), 1)
Call ExtFloodFill(fMain.hdc, SX + 2, SY - 1, fMain.Point(SX + 2, SY - 1), 1)
fMain.FillStyle = 1
fMain.FillColor = &H0
0374デフォルトの名無しさん2006/11/25(土) 00:11:32
どこの、学生のクソソースだよw


よく、新人の世話するけど、専門卒のソースが
いつもそんなクソソースだったりするw
0375デフォルトの名無しさん2006/11/25(土) 00:52:06
誰しも初めからうまかったわけじゃないさ
0376デフォルトの名無しさん2006/11/25(土) 01:00:37
相手のレベルにあわせたんじゃないか?
03773132006/11/25(土) 06:04:03
アイコン画像結合してマスクも作ってみたけど、PaintPicture二回にした以上に処理重たくなったorz
EXEサイズは極端に小さくなりはしたけど、
結局アイコンを一個一個imageコントロールで貼るのが最適という結果になってしまった。
ttp://www.h3.dion.ne.jp/~hohoi/DCK_test.lzh
0378デフォルトの名無しさん2006/11/25(土) 09:15:20
みろ。バカだった。
こいつをマンセーしたヤシらもやっぱりバカだった。
03793682006/11/25(土) 10:53:57
>>371
レスありがとうございます。
そこを弄ると全体の色が変わるのですが・・・
1つずつ塗りつぶす色を変える場合はどうしたらいいのでしょうか?

>>372 -373
レスありがとうございます。
どこをどう修正したらいいのかわからないです。
ぐぐったら6角形の座標固定値のやり方があったので・・・
0380デフォルトの名無しさん2006/11/25(土) 14:19:53
>>377
GIFにするのとアイコンリソースにするの、どっちが得か?ってーのは直ぐに計算できるんではないかと。
ついでにGDIのBitBlt使いやがれ
0381デフォルトの名無しさん2006/11/25(土) 16:12:42
>>368
暇だったから多角形を塗りつぶすクラスを作ってみたよ。
っていうか、そんな読む気もおこらないウンココードは捨てた方がたぶん吉だよw
'######## Form1 ########
Private mPolygonDrawer As New cPolygonDrawer
Private mMouseDownPoint As Win32API.POINTAPI
Private Sub Form_Load()
  Me.ScaleMode = vbPixels
  With mPolygonDrawer
    .hdc = Me.hdc
    .NumOfAngle = 6
  End With
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  mMouseDownPoint.X = X
  mMouseDownPoint.Y = Y
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim r As Long
  Dim red As Byte
  Dim green As Byte
  Dim blue As Byte
  
  red = Rnd * 255
  green = Rnd * 255
  blue = Rnd * 255
  Call mPolygonDrawer.SetFillColor(red, green, blue)
  With mMouseDownPoint
    r = Sqr((X - .X) ^ 2 + (Y - .Y) ^ 2)
    Call mPolygonDrawer.Draw(.X, .Y, r)
  End With
End Sub
03823812006/11/25(土) 16:13:42
'######## 標準モジュール Win32API ########
Declare Function CreateSolidBrush Lib "gdi32.dll" _
    (ByVal crColor As Long) As Long
    
Declare Function CreatePen Lib "gdi32.dll" _
  (ByVal fnPenStyle As Long, ByVal nWidth As Long, _
   ByVal crColor As Long) As Long

Declare Function SelectObject Lib "gdi32.dll" _
    (ByVal hdc As Long, ByVal hgdiobj As Long) As Long

Declare Function DeleteObject Lib "gdi32.dll" _
    (ByVal hObject As Long) As Long

Declare Function Polygon Lib "gdi32.dll" _
    (ByVal hdc As Long, ByRef lpPoints As POINTAPI, ByVal cPoints As Long) As Long

Public Type POINTAPI
  X As Long
  Y As Long
End Type
03833812006/11/25(土) 16:15:52
'######## クラスモジュール cPolygonDrawer ########
Public hdc As Long
Private mDegreeOf1stPoint As Double
Private mLineColor As Long
Private mFillColor As Long
Private mPenHandle As Long
Private mBrushHandle As Long
Private mNumOfAngle As Integer
Private Const PI As Double = 3.1415923
Private Sub Class_Initialize()
  Me.NumOfAngle = 3
  Me.DegreeOf1stPoint = 90
  Call SetFillColor(255, 0, 0)
  Call SetLineColor(255, 255, 255)
End Sub
Private Sub Class_Terminate()
  DeleteMyBrushIfNeed
  DeleteMyPenIfNeed
End Sub
Public Property Let NumOfAngle(N As Integer)
  If N > 2 Then
    mNumOfAngle = N
  End If
End Property
Public Property Let DegreeOf1stPoint(deg As Double)
  mDegreeOf1stPoint = -deg
End Property
03843812006/11/25(土) 16:17:02
Public Sub SetLineColor(red As Byte, green As Byte, blue As Byte)
  Const PS_SOLID As Long = 0
  
  mLineColor = red * 1 + green * &H100& + blue * &H10000
  Call DeleteMyPenIfNeed
  mPenHandle = Win32API.CreatePen(PS_SOLID, 1, mLineColor)
End Sub
Public Sub SetFillColor(red As Byte, green As Byte, blue As Byte)
  mFillColor = red * &H10000 + green * &H100& + blue
  DeleteMyBrushIfNeed
  mBrushHandle = Win32API.CreateSolidBrush(mFillColor)
End Sub
Private Sub DeleteMyPenIfNeed()
  If mPenHandle <> 0 Then
    Win32API.DeleteObject (mPenHandle)
    mPenHandle = 0
  End If
End Sub
Private Sub DeleteMyBrushIfNeed()
  If mBrushHandle <> 0 Then
    Win32API.DeleteObject (mBrushHandle)
    mBrushHandle = 0
  End If
End Sub
03853812006/11/25(土) 16:17:39
Public Sub Draw(X As Long, Y As Long, r As Long)
  Dim pt() As Win32API.POINTAPI
  Dim prevPenHandle As Long
  Dim prevBrushHandle As Long
  
  If hdc = 0 Then Exit Sub
  pt = GetPointArray(X, Y, r)
  prevPenHandle = Win32API.SelectObject(hdc, mPenHandle)
  prevBrushHandle = Win32API.SelectObject(hdc, mBrushHandle)
  Call Win32API.Polygon(hdc, pt(0), mNumOfAngle)
  Call Win32API.SelectObject(hdc, prevBrushHandle)
  Call Win32API.SelectObject(hdc, prevPenHandle)
End Sub
Private Function GetPointArray(X As Long, Y As Long, r As Long) As Win32API.POINTAPI()
  Dim pt() As Win32API.POINTAPI
  Dim i As Integer
  Dim rad As Double
  Dim deltaRad As Double
  ReDim pt(mNumOfAngle - 1)
  
  deltaRad = 2 * PI / mNumOfAngle
  rad = 2 * PI * (mDegreeOf1stPoint / 360#)
  For i = 1 To mNumOfAngle
    pt(i - 1) = GetPoint(X, Y, r, rad)
    rad = rad + deltaRad
  Next
  GetPointArray = pt
End Function
03863812006/11/25(土) 16:18:49
Private Function GetPoint(X As Long, Y As Long, r As Long, rad As Double) As Win32API.POINTAPI
  Dim pt As Win32API.POINTAPI
  
  pt.X = X + r * Cos(rad)
  pt.Y = Y + r * Sin(rad)
  GetPoint = pt
End Function
0387デフォルトの名無しさん2006/11/25(土) 17:50:10
名前空間を意識して、モジュール名にドットをうって
メソッドを呼んでるところといい、そのクラスといい、
なかなかの腕だけど、なんの仕事してれば、そんな
描画系を思いつくの??

業務系の俺には、カスリもしない世界だったから、
ちょっと興味をもった。
0388デフォルトの名無しさん2006/11/25(土) 18:40:31
> なかなかの腕だけど
どこがだよw
0389デフォルトの名無しさん2006/11/25(土) 19:00:18
>>388
別に言うのは勝手だけど、お前の脳みそでは
どれだけ振り絞っても、>>381以上のソースは
書けないと思う。

>>388のソースに期待w

0390デフォルトの名無しさん2006/11/25(土) 19:08:28
>>389
見苦しい…
0391デフォルトの名無しさん2006/11/25(土) 19:59:50
息苦しい
0392デフォルトの名無しさん2006/11/25(土) 20:07:41
もっと短く簡潔に書いてくれ。
貴方よりずっと莫迦な誰か他の人がメンテする事を考えて。
0393デフォルトの名無しさん2006/11/25(土) 20:21:45
>>383
> Private Sub Class_Terminate() 
>   DeleteMyBrushIfNeed 
>   DeleteMyPenIfNeed 
> End Sub 
軽く殺意が涌いた
0394デフォルトの名無しさん2006/11/25(土) 20:36:16
382〜を見て、すごいなーとは思わないけど、綺麗だなーとは思う。
こういう上手くはないけど綺麗なコード書ける人と一緒に仕事したいもんだね。
0395デフォルトの名無しさん2006/11/25(土) 21:49:30
>>394
テラワロスw

なんで、誉める前に必ず「〜けど」って一言多いんだよw

うははw ネクラの臭いがぷんぷんするw
03963682006/11/25(土) 22:01:28
>>381
レスありがとうございます。
早速、自分用にアレンジして使わせていただきますね。
ありがとうございます。
あと、ウンココードは捨てますねw
0397デフォルトの名無しさん2006/11/25(土) 22:17:02
ペンとブラシの寿命がフォームと同じなのが気になる貧乏性
03983812006/11/25(土) 22:34:47
>>396
バグがある(SetLineColorの処理とPIの値)のと、あと数値の型が適当だったり
ちゃんとキャストしてなかったりするのでその辺は修正してやってね。

>>397
やっぱりあんまりよくないのかな。
Win32のGDI関数ってほとんどやってことないから。。
Win9x特有の制限に引っかかる可能性があるとかないとかどこかで読んだ気もするけど。

>>387
ヘッポコのマイコンプログラマですよw
PCのアプリはここ数年.NETばっかりなんで、どうしてもVB.NETチックなコードになっちゃうね。
0399デフォルトの名無しさん2006/11/26(日) 01:43:56
VBSでMSXML2.DOMDocumentを使う場合のについての質問です。

<test hoge='ABC'/>
<test hoge='BCD'/>
<test hoge='CDE'/>

の中から、hoge属性値に C を含むものを列挙したい場合、
XPathではどのように記述するのでしょうか?

部分一致ではなく完全一致であれば、
/test[@hoge='C'] で取得できるのですが、
ワイルドカードはノード名や属性名には使えても、属性値には使えないようですし、
/test[contains(@hoge,'C')] もcontainsの部分で「不明な方法です」というエラーになります。

全ノードに対してループを回し、正規表現などで条件分岐すれば、結果的には問題有りませんが
XPathで出来ることならXPathでやりたいので、ご存じの方が居ましたらご教示ください。
0400デフォルトの名無しさん2006/11/26(日) 12:56:07
データ型で大きな数字が入る順番は
integer<long<single
と習ったんですが、single型って6桁を超えると
それ以下の桁が0に簡略化されますよね。
longに入らないぐらい馬鹿でかい数を使う場合で
頭から数えて6桁以下の数字を省略しないで計算したい場合
どうすればいいんでしょうか?
0401デフォルトの名無しさん2006/11/26(日) 13:13:14
>>400
有効桁数6桁”以下”なら、言っている通りsingleでいいと思うのだが
0402デフォルトの名無しさん2006/11/26(日) 13:14:13
('A`) あ、もしかして"馬鹿でかい”のと”有効桁が大きい”の違いが分かってない・・・?
04034002006/11/26(日) 13:28:42
すいません判り難かったみたいなので
例えば
12345678901234567890+12345678901234567890=24691357802469135780
を出したいと思った場合
longには入らないのでsingleを使うと
1.234567×10^19+1.234567×10^19
こんな感じで解釈されますよね。
すると結果が2.469134×10^19になりますよね、結果的に24691340000000000000
になっちゃって一番上と数値が変わってきちゃうじゃないですか、
これを何とかしたい、というわけなんです、正確に計算したいんです。
0404デフォルトの名無しさん2006/11/26(日) 13:33:39
ひんと: 多倍長演算
0405デフォルトの名無しさん2006/11/26(日) 13:41:30
「最近のCPUはfloatもdoubleとして処理するからfloat使っても速くはならないし、
 精度も落ちるから巨大な配列を確保する等の事情が無ければdoubleを使ったほうが良い」
って聞いたけどVBだとどうなんだろう。
0406デフォルトの名無しさん2006/11/26(日) 13:41:38
>>403
とりあえず
> 頭から数えて6桁以下の数字を省略しないで計算したい場合
では、ないんだな ('A`)
とりあえず20ケタを扱える型はdecimal型だ
詳しくはヘルプを参照

逆質問だが、下のような計算も考慮に入れているのか?
 0.12345678901234567890+12345678901234567890
この場合、誤差を最小に抑えるため数値上では小数以下の桁がほとんど丸められるわけだが、
これすらも正確に保ち下のような数値として扱いたいのなら、
 12345678901234567890.12345678901234567890
vbの標準型では無理で、文字列型でAdd(String v1, String v2)みたいな演算を自分で仕組むしかないぞ
04074061 ◆qRy0pp8F66 2006/11/26(日) 13:43:55
decimalの使い方
Private Sub Form_Load()
    Dim d1 As Variant
    Dim d2 As Variant
    d1 = CDec("12345678901234567890")
    d2 = d1
    Debug.Print d1 + d2
End Sub
0408デフォルトの名無しさん2006/11/26(日) 13:47:14
>>405
VBというよりWindowsの動くx86のCPUでは、
基本的に80bitの拡張倍精度で演算される。
0409デフォルトの名無しさん2006/11/26(日) 13:58:39
とりあえず>>400には「仕様」を明確にしてもらうことが重要なはずだと思うが。。
テキトーな回答を下す前に。

>>400
人様に質問するのに「馬鹿でかい」とかあいまいな言葉を使うなよ。
そんなんでわかるわけないだろ、誰もエスパーじゃないんだから。

扱う数値は整数?実数?
実数の場合、必要な精度は?
扱う数値の範囲(最大値・最小値)は?
0410デフォルトの名無しさん2006/11/26(日) 14:00:15
>>409
詳しく書いてるように聞こえるけど、
実は何も考えてないだろ?
0411デフォルトの名無しさん2006/11/26(日) 14:27:25
>>403
Currency(綴りあやふや)は?
0412デフォルトの名無しさん2006/11/26(日) 14:40:06
>>411
少なすぎますです
0413デフォルトの名無しさん2006/11/26(日) 14:46:19
>>400
ふぅ・・・。で、お前は何がしたいの?

バカなら、もう来るなよ。みんなが真剣に考えたりするじゃないか。

真剣なら、自分で型をつくればいいだけの話だろ。
0414デフォルトの名無しさん2006/11/26(日) 18:55:13

>>399もお願いします。
0415デフォルトの名無しさん2006/11/26(日) 21:01:36
すまん、俺にはわからない。
XPathのことはXMLのスレ(WebProg板にある)にいったほうがわかる人間がいると思う。
0416デフォルトの名無しさん2006/11/26(日) 22:34:51
VBの場合、スコープがグローバルの参照型の変数は
参照が変わった場合、前の値はメモリから消えるのでしょうか?

Public str as String

のstrに
 str = "A"
 str = "B"
とした場合の"A"です。

何かのタイミングで一斉に消えたりするのでしょうか?
0417デフォルトの名無しさん2006/11/26(日) 23:13:44
よく知らんけど、適当な時にガーベージコレクトしてるんじゃない?
0418デフォルトの名無しさん2006/11/26(日) 23:17:01
知らないのになぜ答えるんですか?
0419デフォルトの名無しさん2006/11/26(日) 23:25:31
>>416
何故そんな事を知る必要があるの?
0420デフォルトの名無しさん2006/11/26(日) 23:28:55
○ 回答者の心得
 一.答えられない質問は無駄に罵倒せずスルー。無理するな。
 三.回答する上で必須ではない情報をむやみに聞き返さない。
0421デフォルトの名無しさん2006/11/26(日) 23:36:22
テメエのモラルはテメエで勝手に守ってろってw
俺はそんな糞みたいなルールには死んでも従わないね。
0422デフォルトの名無しさん2006/11/26(日) 23:40:23
○ 質問者の心得
 四.荒らしは相手しない。

○ 回答者の心得
 四.荒らしは相手しない。
04233392006/11/26(日) 23:54:28

>>415
XMLスレも考えたのですが、COM版のMSXML2.DOMDocumentに限定した話をしたかったので
まずはこちらにきました。Web上で紹介されている関数が使えなかったりと、COM版の仕様が他とは違うようなので。
もうしばらくこちらで粘って、知ってる方が居ないようなら向こうに移動してみます。

ということで引き続きよろしくお願いします。
0424デフォルトの名無しさん2006/11/26(日) 23:58:47
以降のスレには

○馬鹿の一つ覚えのようにテンプレをコピペしない

っていう項目が必要になりそうだな。
そうすれば>>422のようなスレになんの貢献もしない馬鹿を雪隠詰めにできるよw
0425デフォルトの名無しさん2006/11/27(月) 00:01:21
○馬鹿の一つ覚えのようにテンプレをコピペされるような書き込みをしない
0426デフォルトの名無しさん2006/11/27(月) 01:58:39
>>416
俺は"B"を代入した瞬間"A"は消えるもんだと思っている。
なぜなら、VC++で同じことをBSTRに対して行おうとするとそういう風になるから→きっとVBもそうだろうという短絡的発想。
0427デフォルトの名無しさん2006/11/27(月) 02:03:33
知らないのになぜ答えるんですか?
0428デフォルトの名無しさん2006/11/27(月) 02:06:51
>>427
( <●> <●> )つ わかってます

わかってないことを証明する悪魔の証明はできないのはわかってます
0429デフォルトの名無しさん2006/11/27(月) 02:12:52
>>428
あなたはわかっていません
freeした直後にAはメモリ上に存在します
また直後ではAの上にBを置かれることはありません
OSの中まで追ってからにしなさい
0430デフォルトの名無しさん2006/11/27(月) 02:14:14
> OSの中まで追ってからにしなさい
> OSの中まで追ってからにしなさい
> OSの中まで追ってからにしなさい
> OSの中まで追ってからにしなさい
( <●> <●> )
0431デフォルトの名無しさん2006/11/27(月) 02:16:06
>>429のVBは変数を宣言するごとにGlobalAllocしてるんだな
0432デフォルトの名無しさん2006/11/27(月) 02:20:48
>>430
むしろこっちだろ
> Aはメモリ上に存在します
> Aはメモリ上に存在します
> Aはメモリ上に存在します
0433デフォルトの名無しさん2006/11/27(月) 02:46:10
マジレスするとVB6までは参照カウンタ方式のGCで、参照が無くなったタイミングで即回収され再利用可能になる。
循環参照があった場合は開放されない。同じ参照カウンタ式のCOMと相性がいい。
0434デフォルトの名無しさん2006/11/27(月) 02:49:55
>>433
> 循環参照があった場合は開放されない。
('A`) ”されない”?
0435デフォルトの名無しさん2006/11/27(月) 02:51:44
>433
>416 はVB6の話だろ?
Stringはオブジェクト型じゃないから代入は値のコピーが作られるだけだぞ
0436デフォルトの名無しさん2006/11/27(月) 03:07:40
>>435
そうだった。Stringは別だな。
433はClassの話だと思ってくれ。
0437デフォルトの名無しさん2006/11/27(月) 08:46:34
ようわからんがstrに"ABCDE"が入ってて、そこへ"XYZ"が"入った場合、
メモリ上"XYZDE"になって、"DE"はあるタイミングまで残る、って話ではないの?
"XYZ"の代わりに"1234567890"が入ったらメモリ上は"12345"になって、
新たなメモリ空間に続きの"67890"が入るように思うんだけど。
GCで前者の"DE"みたいなのが詰められ、後者みたいなのが
"1234567890"と連結されんでしょ?
0438デフォルトの名無しさん2006/11/27(月) 09:10:42
>>437
壮大な勘違いだな。
0439デフォルトの名無しさん2006/11/27(月) 13:01:28
VB自体の開発者しか知らない事を議論するのは無意味&無駄。
0440デフォルトの名無しさん2006/11/27(月) 15:36:44
>>439
メモリについて「無意味&無駄」としか考えられないようだから
ブービー厨とバカにされるんだよ
0441デフォルトの名無しさん2006/11/27(月) 17:11:25
>>440
VBが中で何やってたって、それを変更する事は出来ない。
つまり、お前が莫迦で阿呆という事だな。
0442デフォルトの名無しさん2006/11/27(月) 17:55:06
TextBox1〜3とCommand1の4つのコントロールがFormに貼ってあります。
初期状態では、TextBox1, 3とCommand1だけ、Enabled=Trueです。

TextBox1の入力内容を検査して、OKならTextBox2のEnabledをTrueにした
上で、そこにFocusを移動させたいのですが、どうすればよいでしょうか?

TextBox1のValidateに
 TextBox2.Enabled=True
 TextBox2.SetFocus
と書いてもTextBox2にFocusが遷移しません。
0443デフォルトの名無しさん2006/11/27(月) 18:34:47
>>442
どうすればもこうすればも、そんな糞仕様のUIはナンセンスでしょ。ダメダメでしょ。

MSDN読んだ?
Validateっていつ発生するのよ。
矛盾することしようとしてるんだからうまくいくはずがない。
だいいち少しはユーザビリティってものを考えてくれよ。
0444デフォルトの名無しさん2006/11/27(月) 18:36:58
>>442
へっへっへ…
Enable=TrueにしたあとDoEvents書いちゃいなよ。
いいぜぇ、DoEventsは。
0445デフォルトの名無しさん2006/11/27(月) 19:35:27
>>444
しかし、諸刃の剣でもあるな。
0446デフォルトの名無しさん2006/11/27(月) 21:01:16
簡単な問題になると、嬉しそうに湧いてくるなw
0447デフォルトの名無しさん2006/11/28(火) 08:48:40
>>446
何ツンデレ?普通に当然のことじゃん。
0448デフォルトの名無しさん2006/11/28(火) 09:01:23
変数は必ずしも宣言と合わせて初期化しないといけませんか(.NET)
Dim hoge As Integer = 0
0449デフォルトの名無しさん2006/11/28(火) 09:45:21
>>448
vb.netさんでは宣言時に規定の初期値に初期化されます
やりたきゃやってみろ
0450デフォルトの名無しさん2006/11/28(火) 09:49:47
>>443
キミ、学校でも頭悪いとか、「○○って話が通じネーよな」とか良く
言われるでしょ?言われるでしょ?
0451デフォルトの名無しさん2006/11/28(火) 09:51:04
型による。
値型と参照型では違う。

参照型は初期化しないと、ぬるぽりますよ
0452デフォルトの名無しさん2006/11/28(火) 13:56:35
>>446
お前自身の事か?
0453デフォルトの名無しさん2006/11/28(火) 18:57:12
スゴイ事思いついたヾ(゚∀゚)ノ

VB6.0でも、ユーザーコントロールを使えばクラスの継承が実現しない?!

空っぽのユーザーコントロールにメソッド書いて、継承時はそれを同じように
空っぽのユーザーコントロールに貼り付け。

画面やクラスでそのユーザーコントロールを動的に生成して、メソッドだけを呼べば
クラスの継承が実現してない??
0454デフォルトの名無しさん2006/11/28(火) 19:22:46
それ継承じゃないしw
すくなくともそれじゃあね。
VBには目に見えないFormクラスがあって、全てのフォームはそれを継承していると
みなせる、って話ならわかるけど。

まあ当たり前だけどVB6でも継承そのものは可能なんだよね。
ただ言語レベルでサポートしてないだけで。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnprogvbnet/htm/chapter5.asp
0455デフォルトの名無しさん2006/11/28(火) 20:23:28
>>454
フォームの継承は、理屈はそうだけど、自分のメソッドも何もできない
からね〜


委任による継承かぁ〜・・・

実際は継承しているわけではなくて、継承チックに見えるように
ベースのクラスを呼んでいるんだよね

でも�d�d。

Implementsによるインターフェースの実装は知っていたけど、継承できない時点で
あんまり役にたたないよね。強いて使うなら、雛形として、このメソッドを使いなさい、かな〜
0456デフォルトの名無しさん2006/11/28(火) 21:08:43
つCOMでも勉強・・・するべきだったけどモウイイや
■ このスレッドは過去ログ倉庫に格納されています