トップページ⇒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/

※「まず自分で調べる」クセを身につけよう。
03223152006/11/22(水) 20:26:55
>>321
厳しくも暖かいご意見ありがとうございました。
散々ググッて見たのですがググり方が足りなかったようです。
これからググりまくってみます。
0323デフォルトの名無しさん2006/11/22(水) 21:27:03
>>322
エクセルでそれを見ながらVBでゼロから作った方が早い。
0324デフォルトの名無しさん2006/11/22(水) 22:59:06
VB6 SP6をWindowsXP Home Edition SP2で使用しています。
作成されたアプリケーションをエクスプローラから見ると、ファイル名の下に
登録ユーザー名が表示されてしまうのですが、これを変更することはできないのでしょうか?
0325デフォルトの名無しさん2006/11/22(水) 23:00:42
ユーザー名ではなく所属でした。。。お願いします。
0326デフォルトの名無しさん2006/11/22(水) 23:03:27
変更できます。
0327デフォルトの名無しさん2006/11/22(水) 23:38:20

http://pc8.2ch.net/test/read.cgi/tech/1159388733/64 VB6 >>>>>>>>>> VB.NET
http://pc8.2ch.net/test/read.cgi/tech/1152851763/91 VB vs Delphi @夏厨2006
http://pc8.2ch.net/test/read.cgi/tech/1106538237/766 【VB.NET】VS2005 選ぶならどっち?【C♯】
http://pc8.2ch.net/test/read.cgi/tech/1161250878/375 VB.NET質問スレ (Part18)
http://pc8.2ch.net/test/read.cgi/tech/1159446575/23 VB6とVB2005って全然違わない?
http://pc8.2ch.net/test/read.cgi/tech/1151836157/21 CとVB.NETってよく似てるよな
http://pc8.2ch.net/test/read.cgi/tech/1147201705/40 VB.NETのとんでもない欠陥に気づいた
http://pc8.2ch.net/test/read.cgi/tech/1134464762/104 VBで作られた有名なアプリって何?
http://pc8.2ch.net/test/read.cgi/tech/1121006960/123 VB vs Delphi @夏厨2005
http://pc8.2ch.net/test/read.cgi/tech/1099112351/441 C++VB 初めてプログラム板来た初心者スレ delphi hsp
http://pc8.2ch.net/test/read.cgi/tech/1151412015/989 VBA総合質問スレッド
http://pc8.2ch.net/test/read.cgi/tech/1054356121/781 ●EXCEL・VBAの勉強法教えてスレ●

他のスレで>>317を見かけたので、試しにVB系のスレ回ってみたら.NETやVBAのスレにまで…
0328デフォルトの名無しさん2006/11/22(水) 23:41:58
そんなヒマがあったら腹筋でもしろよ
0329デフォルトの名無しさん2006/11/22(水) 23:59:37
というか、その情熱をVBの勉強に向ければ、
他人のソースなんて当てにしなくても、コード掛けるようになるのでは?
0330デフォルトの名無しさん2006/11/23(木) 01:20:23
VBAスレから誘導されました。よろしくお願いします。

ExcelのVBAでDOM使ってXML書き出すプログラムを作ってます。
で、標準の文字コードがUnicodeのため、XMLファイルもUnicodeで出力されてしまいます。
これをShift-JISで出力したいのですがどうすればよいのでしょうか?
DOMリファレンスで見た限りメソッドにもそれらしいものは見当たらなかったのですが。。
03313132006/11/23(木) 05:40:48
ごめん思い出した。
LoadResDataで「実行時エラー326 識別子101のリソースが見つかりません」て出るんよ。
定数使用してLoadResData(101,vbResIcon)もダメ、(vbResIcon=1)
MSのサポートページにあるLoadResData(101,3)もダメ。
WAVは"CUSTOM"と文字を打つのでLoadResData(101,"アイコン")とやったがダメ。全角半角両方。
上記はすべて同じエラーになる。
WAV同様"CUSTOM"なら取り込める。
でもバイトデータだから、これをまたアイコンにするんだったら意味わからん。
リソースファイルにアイコン入れるまではいいが取り出せないのは何なんよ…
0332デフォルトの名無しさん2006/11/23(木) 08:57:25
>>331
基本からなってねぇ

LoadResPicture(リソース番号, vbResIcon)
0333デフォルトの名無しさん2006/11/23(木) 13:01:02
>>332
ありがとう。でもvbResIconて数値いくつ?
変数が定義されてませんてエラーになるんで…
0334デフォルトの名無しさん2006/11/23(木) 13:12:58
>>333
>定数使用してLoadResData(101,vbResIcon)もダメ、(vbResIcon=1)
     . .... ..: : :: :: ::: :::::: :::::::::::: : :::::::::::::::::::::::::::::::::::::::::::::
          Λ_Λ . . . .: : : ::: : :: ::::::::: :::::::::::::::::::::::::::::
         /:彡ミ゛ヽ;)ー、 . . .: : : :::::: :::::::::::::::::::::::::::::::::
        / :::/:: ヽ、ヽ、 ::i . .:: :.: ::: . :::::::::::::::::::::::::::::::::::::::
        / :::/;;:   ヽ ヽ ::l . :. :. .:: : :: :: :::::::: : ::::::::::::::::::
   ̄ ̄ ̄(_,ノ  ̄ ̄ ̄ヽ、_ノ ̄
0335デフォルトの名無しさん2006/11/23(木) 13:22:29
>>334
ごめんこ今やったらできた!
LoadResPictureか、そらLoadResDataでググッても使い方出ないわけだ。
額にアイコン張り付けてコンビニ逝ってくるよ。ありがとう!
ε=ヽ( ゚逝゚)ノ
0336デフォルトの名無しさん2006/11/23(木) 13:23:53
For Each...Next ステートメントには DoEvents みたいなのありましぇんか
0337デフォルトの名無しさん2006/11/23(木) 13:33:04
Microsoftは、未だにVB6を使い続けるユーザー達のために、
Formの既定インスタンス機能や、IDEの挙動をVB6に似せるなど、
移行支援の為の対策をVB2005にたくさん盛り込んだわけだ。
特に、Formの既定インスタンス機能は、改悪と言って過言ではないと
自他共に認めるであろう。
MSは、そこまでしてVB6ユーザーを「救おう」としている。

さて、ここでVB6ユーザーであるスレ主が、
VB2005を使ってみて、居ても立ってもいられずに立ててしまったこのスレッドを見てみよう。

http://pc8.2ch.net/test/read.cgi/tech/1159446575/
> [VB6とVB2005って全然違わない?]
> 1 :デフォルトの名無しさん :2006/09/28(木) 21:29:35
> まずcommandがbuttomになってて
> ??
> 線引こうにもlineが認識されない
> なんなの?

私たちはまだまだVB6ユーザーを甘く見ていたようだ。
救いようがないとはまさにこのことではなかろうか。
VB6ユーザーはVB2005に対して、完全同一な物を求めているようだ。

新しいものへのチャレンジ精神があまり備わっていないVB6ユーザーのために
MSは色々な対策を行った。
しかし、いまだにVB6を使い続けているVB6ユーザーには、
新しいものへのチャレンジ精神など微塵も備わっていなかったのである。

このようなVB6ユーザーを生み出したのはMSである。
VB6からVB.NETへと革新的に進化させた結果、このようにいつまでもVB6を使い続けるクズどもが発生したのである。
もはや救いようのないVB6ユーザー。しかしそれでもMSは、最後までこのVB6ユーザー達を見放してはならない義務があるのだ。
0338デフォルトの名無しさん2006/11/23(木) 15:20:15
まあVB6の提供もサポートも再開するし、どうでもいい
VB.NETはVisualBasic.NETじゃなければいいんでね?
0339デフォルトの名無しさん2006/11/23(木) 15:39:12
>>337
VB.NETなんて全く必要ないんだけど。
VBでやりたい事は全て出来る。
0340デフォルトの名無しさん2006/11/23(木) 15:50:08
クラサバなら尚のことね。
ウェブにする必要があるのはごく一部の業種のわずかな部分のみ。
0341デフォルトの名無しさん2006/11/23(木) 15:50:15
(^ω^) 勉強を怠った技術者はグチばっかりでとても困るぉ
0342デフォルトの名無しさん2006/11/23(木) 16:04:52
>>332
なんかアイコンが潰れて表示されたorz
ググってみたけどLoadResPictureはまともアイコン扱えないの?
イメージリストコントロール使うしか無いのかな。でもツールバーにないし…
0343デフォルトの名無しさん2006/11/23(木) 17:01:12
FPDへのアクセス中はアイコンがウィンドウみたいなの(デフォルトアイコン?)に
変わるのは仕様ですか?
0344デフォルトの名無しさん2006/11/23(木) 17:51:11
>>341
ドドネトごときで「勉強」とか言っちゃってるよ、この人。(w
0345デフォルトの名無しさん2006/11/23(木) 18:12:58
物事を「ごとき」で語る人間には「ごとき」程度のものしか見えていない。(ー人ー)ナムナム
0346デフォルトの名無しさん2006/11/23(木) 18:42:50
「ごとき」程度のものしかないだろ。

なんか変なものでも見えてるのか?
0347デフォルトの名無しさん2006/11/23(木) 18:50:02
>>346
ここはお前の日記帳じゃぁないんだよ。
0348デフォルトの名無しさん2006/11/23(木) 18:53:27
>>346
あんた、損してるよ。
0349デフォルトの名無しさん2006/11/23(木) 20:10:37
>>326
方法を教えてほしいです・・・
0350デフォルトの名無しさん2006/11/23(木) 21:35:07
>>349
プロジェクトのプロパティで設定後コンパイル。
0351デフォルトの名無しさん2006/11/23(木) 21:49:35
>>347
日記帳に >>346 みたいな事は書かないよ。
バカじゃないの? (w

>>348
別に俺は、ドトネトを極める匠じゃないから、
自分のやりたいことができれば、それで十分。
0352デフォルトの名無しさん2006/11/23(木) 21:58:32
>>351
突っ込みどころ満載で、ちょっとおもしろいw
話しようぜw

何より、日記帳つけてんの?ww
0353デフォルトの名無しさん2006/11/23(木) 22:09:27
>>350
プロジェクトのプロパティのそれらしいところを全て弄ってみて駄目だったので諦めていたのですが
windowsを再起動したらフォルダ上の表示が変わりました・・・
どうもコンパイルしなおしたファイルを、以前のファイルと同じものとOS側で認識していたみたいです。
お騒がせしてすみませんでした。
0354デフォルトの名無しさん2006/11/23(木) 22:32:16
>>352
突込みどころ満載と言う割には、突っ込めないチキン君には用は無いよ。
0355デフォルトの名無しさん2006/11/23(木) 22:38:23
(^ω^)ノシ ぃょぅ だぉ!
03563522006/11/23(木) 22:41:20
>>354
いよぉ!351!ツッコミ入れられてもわからないんだなw

日記帳つけてんだろww
認めちまえよww

>自分のやりたいことができれば、それで十分。

普通は自分のやりたい事なんてしてる訳じゃなくて
仕事で必要だから、クライアントにVB使うなり、サーバーにC使う
なり、XPでのサポートを得るためドトネト使うなりしてるだけw

ウケルww オバカ丸出しだぞww
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
俺はそんな糞みたいなルールには死んでも従わないね。
■ このスレッドは過去ログ倉庫に格納されています