VB.NET質問スレ (Part22) at TECH
VB.NET質問スレ (Part22) - 暇つぶし2ch650:デフォルトの名無しさん
07/08/14 17:13:09
>>648
>これは座標(10,10)から始まる幅1高さ1の面ってことだろ?
これ読んだら吹いたwww

お前633で「点」ってのは直線じゃないだろう?
って言ってたじゃん。
点は直線じゃないが面になるのかよwww

お前まさか座標のことピクセルとピクセルの間だと思ってないかww
GetPixelでカラー取得できなくなるっちゅうのwwww

Rectangle( 10, 10, 1, 1)ってのは
(10,10)(10,11)(11,10)(11,11)の4点を表すんだよwww
DrawRwctangleやってみろよwwうぇぇぇぇwwww

>1ピクセルの面なんてねぇぇぇよwwうふ


651:デフォルトの名無しさん
07/08/14 18:14:34
>>650
俺は627で「1ピクセルってのは点じゃなくて幅1高さ1の面だ」って言ってるんだが…。
だからこそ1ピクセルの「いわゆる」点を書くのは、面を塗りつぶす
e.Graphics.FillRectangle(Brushes.Black, 10, 10, 1, 1)
だと言うているんだが…?
目に見える「点」なんて存在しないだろ?
お前の言いたい事がてんでわからん。


652:651
07/08/14 18:16:58
>>650
e.Graphics.FillRectangle(Brushes.Black, 10, 10, 1, 1)
ちなみにこれは座標(10,10)だけが塗りつぶされます。
あおる前に試してから書き込め、糞が。

653:デフォルトの名無しさん
07/08/14 19:52:58
どうでもいい

654:デフォルトの名無しさん
07/08/14 19:55:35
>>558

655:デフォルトの名無しさん
07/08/15 11:52:54
VB.NETからエクセルに出力する時の質問です。

データベースの内容をエクセルに出力したいのですが(行は100行×列は10列くらい)、
この場合、VB.NETからエクセルのセルに直接書き込んだ方が早いですか?
それとも、エクセルのマクロを呼び出して、マクロ側でデータベースの内容を
セルに書き込んでいった方が早いですか?


656:デフォルトの名無しさん
07/08/15 12:23:04
後者

657:デフォルトの名無しさん
07/08/15 15:17:28
教えてください。
DataGridViewにて、指定したセルの左上の座標を取得する方法はありますでしょうか?
ありましたらその方法を教えてください。
宜しくお願いします。

658:デフォルトの名無しさん
07/08/15 15:22:30
DataGridViewのメンバに目を凝らすんだ

659:657
07/08/15 15:52:18
>>658
AccessibilityObjectプロパティを利用して解決できました。


660:デフォルトの名無しさん
07/08/15 20:51:23
Windowsフォームで別スレッドからコントロールを操作するには?
(URLリンク(www.atmarkit.co.jp))
引数がない場合、サンプルのように次の書き方でOK。

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  TextBox2.Focus()
 End Sub
 ↓
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 Dim t As New Thread(New ThreadStart(AddressOf worker))
 t.Start()
 End Sub

 Delegate Function FocusDelegate() As Boolean

 Sub worker()
 ' textBox2.Focus()の実行
 Invoke(New FocusDelegate(AddressOf TextBox2.Focus))
 End Sub

次のように引数も渡したい場合、どのように書きなおせばよいのでしょうか?
 Dim dtNow As DateTime = DateTime.Now

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 TextBox2.Text += dtNow.ToString() & vbcrlf
 End Sub
 ↓
 ?

661:デフォルトの名無しさん
07/08/16 09:59:26
文字列のフォーマットについて教えてください。

"abcdefgh" という文字列を "abcd-ef-gh" という風に変換したい場合、
VB6の時は
Format("abcdefgh","@@@@-@@-@@")
で出来ました。
これをVB2005で表現するには、
VB6.Format("abcdefgh","@@@@-@@-@@")
といった風にしかできないのでしょうか?
VB6.Formatを使わずに簡単に上記操作が出来る方法があれば教えてください。

662:デフォルトの名無しさん
07/08/16 10:07:34
SubstringでぶったぎってConcatで繋げればいいよ

663:デフォルトの名無しさん
07/08/16 12:51:09
ToStringメソッドを調べると良いと。

664:デフォルトの名無しさん
07/08/16 13:05:33
TreeViewについて教えてください。

あるノードが、あるノードより上にあるか下にあるか
調べたいのですが簡単にわかる方法はありますでしょうか?

If hogeNode.index > hoge2Node.index Then
End If

ですと階層が同じでないと比較できないので困っています。

よろしくお願いします。

665:デフォルトの名無しさん
07/08/16 13:22:03
上?

666:デフォルトの名無しさん
07/08/16 13:29:26
>>665
ツリーを全展開したときに、より左上にあるものが上といった感じです。

667:デフォルトの名無しさん
07/08/16 13:34:31
TreeNode.Parentを辿って数えれば?

668:デフォルトの名無しさん
07/08/16 13:48:04
右上にあっても上?

669:デフォルトの名無しさん
07/08/16 13:58:41
上位という意味だろ
より親

670:デフォルトの名無しさん
07/08/16 15:34:46
右上も上です。

671:デフォルトの名無しさん
07/08/16 16:02:58
プロパティの質問です。
会社の先輩にクラスのフィールドは必ずプロパティで介せよ!って言われたのですが、
以下のコードのようにmfield1とmfield2の違いがよくわかりません。
mfield1はプロパティ内で入出力操作みたいなことはできるのですが、下のコードのように
特に何もしないプロパティなんて意味あるのでしょうか?こういうプロパティがクラスに沢山あるのですが、正直面倒です。
先輩に聞いたら元請にそう指示されたと言ってましたが・・・
Public Class Class1
  Private mfield1 As String
  Public mfield2 As String

  Public Property Field1() As String
    Get
      Return mfield1
    End Get
    Set(ByVal value As String)
      mfield1 = value
    End Set
  End Property
End Class
確かに以前Javaの引継ぎの仕事で貰ったソースも、getter、setterが無数に書かれてましたが、return とクラスの変数の割り当て以外何もしていませんでした。
いまいち利点がわかりません。

672:デフォルトの名無しさん
07/08/16 16:11:34
>>671
そのうち昔は無駄なことをしていたなぁ
ということになるからそれまでは我慢

673:デフォルトの名無しさん
07/08/16 16:41:00
C#3.0をまて

674:デフォルトの名無しさん
07/08/16 16:55:15
>>671
読み書きの処理をインターセプトして値のチェックや変換ができるというのも利点だが、
そういう処理の必要でない単純なプロパティを含む場合の利点としては
フィールドと違いInterfaceにしたり継承でoverrideできること。
特にリモート呼び出しなどではInterfaceであることは重要になる。

その為プロパティが花盛りなのは事実だが大半が単純な構造のプロパティであることから、
プロパティによるコードの増大を何とかしようとする動きはある。
1.IDEのサポート機能で強引にsetter/getterを大量生産する。
2.基本的な構造のプロパティを簡単な構文で書けるようにする。
3.パブリックなフィールドは自動的にプロパティにする。

1は現状のJavaやらC#で盛ん。
2と3は言語の拡張で対応。次版のVBやC#はこの方向。
3はあまりみないが、VB6のActiveXクラスのパブルックフィールドがこのやり方だった。


675:デフォルトの名無しさん
07/08/16 20:02:10
>660
解決しました。
660の質問は却下します。


676:デフォルトの名無しさん
07/08/16 21:38:41
>>664
nodeにlevelってプロパティがあった様な。

677:デフォルトの名無しさん
07/08/16 21:48:32
質問させてください。
ドラッグアンドドロップのコードを記述してるのですが、
ドラッグ元のオブジェクト名を取得するにはどうすればいいのでしょうか?

VB2005EEを使っています

678:デフォルトの名無しさん
07/08/16 21:54:51
オブジェクト名って何さ
型名? それともひょっとして変数の名前のこと?

679:デフォルトの名無しさん
07/08/16 22:09:06
>>678
picturebox1とかlabel1みたいなクラス?の名前のことです

680:デフォルトの名無しさん
07/08/16 22:14:08
1付きはForm1以外はクラス名じゃなくて変数名だと思うぞ
で、そんなもんは仮の名前なのでとれるわけもないが

結局その名前を使って何がしたいの?

681:デフォルトの名無しさん
07/08/16 22:14:30
おまえ却下てw


682:677
07/08/16 22:24:00
ドラッグ元の画像をドラッグ先の画像にドラッグアンドドロップしたときに
ドラッグ元の画像を非表示にしたかったのですが、ドラッグ元の情報を
どうやって取得したらいいのか分からなかったので質問しました。

683:デフォルトの名無しさん
07/08/16 22:29:25
DoDragDrop の返り値見てドラッグ元側が処理すればいい
ドラッグ元とかドラッグ先とかの状況が分からないから一般論だが

684:671
07/08/17 00:09:30
>>674
ありがとう。とりあえずプロパティにしておくのは間違いではないのですね。
ググルと既にJava界ではgetter setterでいろいろ賛否両論が行われてました(@ITの掲示板はついて行けませんでしたが…)
しかし、オブジェクト指向のソースとか何の為?って思う箇所が多々あって辛い。
周りに詳しい人もいないんで、何を頼りにすべきか…。デザインパターンとかとりあえず目を通した方が良いのかな。

685:デフォルトの名無しさん
07/08/17 10:49:21
質問です。
DataGridViewで、”スクロールバーが現在表示されているかどうか”を取得できるプロパティみたいなものはあるのでしょうか?
それともDataGridViewの高さ(幅)と、表示されている行(列)の高さ(幅)の合計を比較するしかないでしょうか?

686:デフォルトの名無しさん
07/08/17 13:40:41
DataGridViewを継承したコントロールですと、
HorizontalScrollBar.Visible
で判定できるみたいですね。
それでいってみます。

687:デフォルトの名無しさん
07/08/17 15:27:14
Textbox(Multiline)のIMEModeの挙動がおかしいです。

No Control に設定(デフォのまま)してあるのに、実行時に
普通に入力できていたのに突然、カナ入力になったり、
オフ固定になったりします。

フォーカスが、他のアプリなどへ移動して、再度該当の
TextBoxに来た時に症状がおきやすい様ですが、明確な
発生状況の原因は突き止められていません。

ネットで検索した所、似たような症例が見受けられたが、
クリティカルな回避方法が分かりません。

何か良い方法はありませんでしょうか?

688:デフォルトの名無しさん
07/08/17 21:52:19
以下のソースで文字をPictureBox1に描画してるのですが、
この文字を、BMP保存したい場合どうすればいいのでしょうか?

Dim g As Graphics = PictureBox1.CreateGraphics() ' PictureBox1のGraphicsオブジェクトを取得
Dim fnt As New Font("MS 明朝", 20, FontStyle.Bold) ' フォントオブジェクトの作成

g.DrawString("文字をを描画", fnt, Brushes.Blue, 50, 20) ' 文字を描画

'リソースを開放する
fnt.Dispose()
g.Dispose()

689:デフォルトの名無しさん
07/08/17 21:56:53
普段から直接描くんじゃなくてBitmapに描くようにすればいいよ

690:デフォルトの名無しさん
07/08/17 21:57:14
Graphics.FromImage(Bitmap)で取得したオブジェクトに対して描画してBitmap.Save
保存しない場合でもPictureBoxに直接書くよりBitmapに描画してDrawImageの方がいいと思うよ

691:デフォルトの名無しさん
07/08/17 22:04:38
>698,690
うまくいきました、ありがとうございます

692:デフォルトの名無しさん
07/08/17 22:58:20

すみません、教えてください。

TreeView において、+ 印をクリックしたときにも、MouseUp イベントが発生する
のですが、、

それを、Node 本体をクリックしたときと区別する方法はあるものでしょうか?
IsSelected プロパティを見てみたのですが、無関係のようで、どうしたらいいもの
かと思いまして。すみませんがよろしくお願いします。


693:デフォルトの名無しさん
07/08/17 23:13:02
NodeMouseClick とかじゃ駄目か
.NET 1.1 以前なら駄目か、じゃあ HitTest だな

694:デフォルトの名無しさん
07/08/17 23:26:06
>>693

どうもです。

2.0でしたが、NodeMouseClick でもやはり + 印の方でも反応していました。
HitTest でしたか。調べてみます、ありがとうございました!



695:デフォルトの名無しさん
07/08/18 08:47:26
>>692
TreeViewMouseDownで
マウスダウンポイント = New Point(e.X, e.Y)
選択ノード = ツリービュー.GetNodeAt(マウスダウンポイント)
範囲 = 選択ノード.Bounds()
If 範囲.Contains(マウスダウンポイント) Then
 ボディを選択した
Else
 +を選択した
End If

696:デフォルトの名無しさん
07/08/18 12:15:27
>>695

おお!!そうやってやるのですか!!!
すばらしい、どうもありがとうございました!!
助かりました!!!


697:デフォルトの名無しさん
07/08/18 15:07:21
VS2005のIDEですが、ソースコード・エディタ上でマウスであちこちクリックしたり、
検索で移動したり、「シンボルの検索結果」での選択で移動したり、とこれらの操作で
キャレットの位置が変わっていったとき、その位置を復元して逆たどるためのツールボタン
があったと思うのですが、

PCが壊れて、別のPCに変えて同じボタンと思われるものを使ってみたのですが、
同じその機能が働いてくれません。

この機能のボタンはありますよね。なんという名前のボタンかがわかりません。

(試してみたのは、「前の検索結果1の場所へ移動」「前の検索結果2の場所へ移動」
「前の場所へ移動」などですが、これらでは復元しませんでした。ツールボタンの欄で
右クリック->「ユーザー設定」->「編集」を選択->その中のボタンから選択してみました。)


698:デフォルトの名無しさん
07/08/18 15:13:24
そういうのって人に聞くより自分で実際やってみる方が早くないか?

それともIDEのメニューやツールバーのカスタマイズ方法を知らないの?

699:デフォルトの名無しさん
07/08/18 15:56:40
>>697

ですから、それをやってみたと書いていますが・・・。それでもできなかったもので。
           ↓
(試してみたのは、「前の検索結果1の場所へ移動」「前の検索結果2の場所へ移動」
「前の場所へ移動」などですが、これらでは復元しませんでした。ツールボタンの欄で
右クリック->「ユーザー設定」->「編集」を選択->その中のボタンから選択してみました。)


700:デフォルトの名無しさん
07/08/18 17:14:24
進む、戻る、かなんかのボタンだよね
俺も見つかられんのだわw


701:デフォルトの名無しさん
07/08/18 17:14:55
たしかすごい意外なとこにあった記憶はあるんだが…


702:デフォルトの名無しさん
07/08/18 17:46:36
分類:表示 の 一番下のほうにある 戻る か?

703:697
07/08/18 20:36:38
>>702

あー、それでした!!どうもありがとうございました!



704:デフォルトの名無しさん
07/08/20 01:05:24
質問なんですが、フォントスタイルに太字と斜体の両方を
設定した場合に、太字(もしくは斜体)のみを標準状態に
戻す場合のコードってどう書けばいいのでしょうか?

705:704
07/08/20 01:12:05
自己解決しました、お騒がせしました。

706:デフォルトの名無しさん
07/08/20 09:31:20
どれだけ下らなく稚拙な質問でも、同じ疑問を持ってるやつがいるかもしれないから、
自己解決した場合でも、解決法は書くべき。

現在のスタイル-太字
TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style Xor FontStyle.Bold)

ちなみに
現在のスタイル+太字
TextBox1.Font = New Font(TextBox1.Font, TextBox1.Font.Style Or FontStyle.Bold)

707:デフォルトの名無しさん
07/08/20 12:31:46
地獄への道は善意で舗装されている、という言葉の意味を706は噛み締めるべきだね。

そういう「善意」は、結局のところ、基礎の理解や自分の頭で考えることをスキップする
「コピペ馬鹿」を生み出すだけだと思うが。

708:デフォルトの名無しさん
07/08/20 13:14:31
>>707
善意から莫迦が産まれるとでも思ってんのか?
莫迦は元々莫迦なんだよ。

709:デフォルトの名無しさん
07/08/20 14:47:18
まあ少なくとも馬鹿を矯正するスレじゃないからね

710:デフォルトの名無しさん
07/08/20 16:43:07
質問答えたらだめじゃんw

711:デフォルトの名無しさん
07/08/20 17:36:01
コントロールを名前で選択するにはどうすればいいのでしょうか。

例えばForm1上にButton1があったとすると、
Dim btn As Button = hoge("Button1")
みたいなことがしたいのです。
ググると、Form上のコントロールのコレクションをFor eachで回して、名前が一致するかどうかで
探すというのは見つけたのですが、名称からダイレクトに選択したいです。

712:デフォルトの名無しさん
07/08/20 18:27:44
またコントロールを名前で選択したいです厨か


713:デフォルトの名無しさん
07/08/20 20:42:55
>>711
>Form上のコントロールのコレクションをFor eachで回して、名前が一致するかどうかで
>探す
という関数を作成すれば
>名称からダイレクトに選択
できますよ。

714:デフォルトの名無しさん
07/08/20 21:01:40
>>711
Form.Controls(string)
やめとけやめとけやめとけやめとけ

715:デフォルトの名無しさん
07/08/20 21:04:12
712じゃないけど(いや712は別に何も言ってないがw)
>>711みたいな「要求」は、ほとんどの場合勘違いの産物だと思うぞ。
ありていに言えば頓珍漢なんだよたぶん。

716:デフォルトの名無しさん
07/08/20 21:49:53
>>711は結局それで何がやりたいのだろう

717:デフォルトの名無しさん
07/08/20 21:53:11
ちゃんと理解してて目的があって使うならいいんだけど
>>711はそれ以外に方法がないと思い込んでるだけだろうな

718:デフォルトの名無しさん
07/08/20 23:06:46
ListView上をMouseでClickしたとき、何かのListViewItemをHitすると
MouseUpイベントが連続して2回立つ、ということはありうるでしょうか?

そういう現象が出て悩んでいました。

下に何もないところをClickしたときはMouseUpは正常に一回しか立たない
のですが、下にItemがあるところをMouseでClickすると、2回連続してMouseUpが
立つのでした。

そのためか、そのListViewItemは、選択された印のBackColorが付かず、
Selected状態になっているのかどうかわからないのでした。

MouseDownイベントを挟まずにMouseUpが2回連続するというのは変だと
思うのですが、どこを通ってきてそうなっているのかわからないのでした。
こういう現象になった方いらっしゃったら何かご指導ください。よろしくお願いします。



719:デフォルトの名無しさん
07/08/21 01:21:52
>>718
ありうるかどうかはdebug.printしてみればわかる。

720:デフォルトの名無しさん
07/08/21 07:53:11
DirextXを使用しているものから色を取得して判定したいのですが
Win32APIのGetPixel等では不可能のようでしたが、何か良い方法は
ないでしょうか。

721:711
07/08/21 09:20:41
>>714さんの方法でできました。ありがとうございました。

やりたいことは、

722:デフォルトの名無しさん
07/08/21 09:59:05
>>719
そうなのです、それをやってみた結果、それがわかったのでした。

MouseUpというのはMouseDownが起きて初めて起こるはずなので、Upだけ
2回連続するというのは、理屈でいけばおかしいと思われました。

しかし、確かにDownを挟まずに、2回通っているのでした。

これは、どこかでDownに準じる何かが起きているが、それがおもてに
現れずにいるというようなことなのか、それとも、どこかまだ不明なところを
経由して再びMouseUpが実現してしまうという構造なのか・・・??

それで、そういったことは起こりうるのか、それが疑問になったのでした。

で、現実にItemが選択状態のBackColorにならない、ということは、その
2回連続しているMouseUpがおきてしまうことと関係があるのだろう、
と推測されたわけでしたが、どなたかアドバイスがありましたらお願いしますです。

723:デフォルトの名無しさん
07/08/21 10:14:55
>>720
DirextXを使用している「もの」って具体的に何
>>722
再現しなかったのでした。
そのListViewItemについて詳しく教えてほしいと思ったのでした。

724:デフォルトの名無しさん
07/08/21 10:19:28
>>723
スルーされるの覚悟ですが、フルスクリーンで動作するゲームです。
DirectXについて詳しくないのですが、普通にSpy++でハンドル調べて
Findwindow等で取得したハンドルを使ってGetPixelしたのですが
駄目でした。

725:デフォルトの名無しさん
07/08/21 10:29:50
普通にGraphics.CopyFromScreenでできない?

726:デフォルトの名無しさん
07/08/21 10:35:20
有り難う御座います。帰ってから試してみます。

727:デフォルトの名無しさん
07/08/21 11:31:28
行列クラスを作ろうとしています。今、
Dim ary(,) As Integer = {{1, 0}, {0, 1}}
Dim matrix As New Matrix(ary)
のようにやっていますが、
Dim matrix As New Matrix({{1, 0}, {0, 1}})
とやることはできないでしょうか。

また、a22 = matrix(2, 2) で a22に1が入るなどとやりたいのですが、
そういうことは可能でしょうか。

Array は Inherits できないようなので、無理なんですかね?


728:デフォルトの名無しさん
07/08/21 11:34:12
>>724
FPSゲームのチートソフトでも作る気かw

729:デフォルトの名無しさん
07/08/21 11:38:29
>>727
>Dim matrix As New Matrix({{1, 0}, {0, 1}})
コンストラクタの引数に配列をとる
>a22 = matrix(2, 2)
既定のプロパティ

730:729
07/08/21 12:00:46
すまん上の方はもうやってたな
Dim matrix As Matrix = New Matrix(New Integer(,) {{1, 0}, {0, 1}})
にするだけ

731:724
07/08/21 13:23:15
>>728
チートだなんてとんでも無い。ちょっとしたマクロ程度です。
>>725も試してみたんですが、上手く使えずWin32APIで
GetWindowDC(0)としてデスクトップ全体のDCからGetPixelしたん
ですが、DirectX(フルスクリーン)だと上手く行かないみたいですね。
今会社なので試せてませんが…。

ググってみると、どうも出来ないという話ばかりありました。

もう何て言うか、他のソフトで窓化してから組んだ方が手っ取り早い
気がしてきました。UWSCのPeekColorなんかだと出来るんですが
どうやって実現しているんだろう…。


732:デフォルトの名無しさん
07/08/21 14:23:02
DirectXとフルスクリーンには、何にも因果関係はないと思うが。

DirectXで描画しているDCを取得しないと駄目なんでないの?

733:デフォルトの名無しさん
07/08/21 14:39:07
WebBrowserコントロール内のドキュメントの反転範囲の取得は可能ですか?

734:733
07/08/21 14:40:27
連レスすいません、「クリップボードの利用は無し」が条件です。

735:デフォルトの名無しさん
07/08/21 14:43:37
>>733
可能です

736:733
07/08/21 14:45:27
>>735
ありがとうございます

737:デフォルトの名無しさん
07/08/21 14:54:33
VB2003で開発しています。

ここで質問していいかわからないので、もし他スレが適切なら
誘導をお願いします。


OSがWin2003Serverでドメインコントローラになっているサーバに
Everyoneでフルコントロールできる共有フォルダがあります。
この共有フォルダに、LANで繋がっているOSがXpHomeEditionのPC
からファイルをアップロードしたりダウンロードしたりするアプリを
作りたいのです。

使用するPCはちょっと特殊なPCでHomeEditionしかプリインストールされていません。
ドライバ類の事を考慮して、OSをProfessionalEditionに乗せかえることは
しません。

クライアントがProfessionalEditionなら問題はないのですが、HomeEdition
なのでサーバの共有フォルダにアクセスしようとすると、ユーザ名と
パスワードを要求されてしまいます。

最初にエクスプローラから共有フォルダを開こうとしてユーザ名とパスワードを
通しておけば次からは要求されないので問題がないのですが、この開発中の
アプリからいきなり共有フォルダにアクセスしようとすると、ユーザ名と
パスワードが通っていないためにエラーになります。

プログラムからユーザ名とパスワードを認証させる方法はありますでしょうか?

738:724
07/08/21 14:55:53
>>732
そうなんですか。すいません。あまり詳しくなくて。。
URLリンク(oshiete1.goo.ne.jp)
この辺みて勘違いしてたかもしれません。

取りあえず、↓みたいな感じの関数で帰ってから試してみます。
有り難う御座いました。

Private Function PeekColor(ByVal x As Integer, ByVal y As Integer) As Integer

Dim ret As Integer

ret = GetWindowDC(0) 'スクリーン全体のデバイスコンテキストを取得
PeekColor = GetPixel(ret, x, y)
ret = ReleaseDC(0, ret) 'スクリーン全体のデバイスコンテキストを解放

End Function

739:デフォルトの名無しさん
07/08/21 15:00:47
>>737
WNetUseConnection


740:デフォルトの名無しさん
07/08/21 15:03:46
>>738
どんなフルスクリーンか知らんが解像度が変更されている場合もあるので気をつけれ
多分デスクトップのDCのピクセル情報はフルスクリーンキャプチャに移るのと一緒だと思うから一回撮ってペイントに貼り付けてみて確認してみるのもいいかも

741:デフォルトの名無しさん
07/08/21 15:16:15
>>737

>ドライバ類の事を考慮して、OSをProfessionalEditionに乗せかえることは
>しません。

これだけの為にProにアップグレードするべきだとは思わんが、一応教えておく。
ドライバはHomeだろうがProだろうが一緒。互換性を心配するのは間違い。

742:デフォルトの名無しさん
07/08/21 17:20:47
VB2005です。
TextBoxで未入力のときに数値の0とみなしたいのですが、次のようなやり方以外に
簡単な方法はありますか?
if textbox1.text.length = 0 then
val = 0
elseif isnumeric(textbox1.text) then
val = cint(textbox1.text)
else
'error
end if

743:737
07/08/21 17:47:49
>>738
さっそくWNetUseConnectionをぐぐってみました。
で参考になるサンプルを見つけたので
URLリンク(64.233.167.104)
真似てやってみたのですが
その関数の戻り値が 487 となり、失敗します。

で、その戻り値を調べたら
ERROR_INVALID_ADDRESS 487 0x000001E7 無効なアドレスにアクセスしようとしています。
とありました。
しかし、そのアドレスは確実に間違っていないはずなんですが・・・。
そのアドレスをエクスプローラのアドレス欄に貼り付けるとちゃんと表示されます。

これ以上はスレ違いでしょうかね?
apiスレに移動したほうがいいでしょうか?


>>741
ドライバの互換性云々というのではなく、ドライバ類がOSの再セットアップ用に
提供されていないという問題なんです。
一応、ハードディスクにはリカバリイメージが格納されているのですが
隠蔽されているっぽいのです。
ドライバCDもなく、webでも公開もされておらず・・・

744:デフォルトの名無しさん
07/08/21 18:14:50
>>743
ヒント:上書きインストール

745:デフォルトの名無しさん
07/08/21 18:33:56
>>742
それで十分簡単だと思われ。

746:727
07/08/21 18:57:05
>>729
a22 = matrix(2, 2) はできました。ありがとうございます。
Dim matrix As New Matrix({{1, 0}, {0, 1}})
の方は、以下のようにしてみましたが、式が必要です
というエラーが出ます。対策を教えていただけないでしょうか。


Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim matrix As new Array2({1, 0})
End Sub
End Class
Public Class Array2
Public elements As Array
Public Sub New(ByVal ary As Array)
elements = ary
End Sub
End Class

747:デフォルトの名無しさん
07/08/21 20:15:26
>>743
Win32APIの意味や失敗の原因を調べるならWin32API質問箱スレに移動すべきだが、
Win32APIを呼び出すためのVB.NETの記述方法について知りたいなら、ここのままでも
よいのでは?

748:737
07/08/21 21:10:20
Win32API質問箱スレにいってきます。
ありがとうございました。

749:デフォルトの名無しさん
07/08/21 21:24:00
>>746
>>730

750:746
07/08/22 09:59:10
>>749
見逃してました。。。
うまく行きました。ありがとうございました。
型に配列就職誌をつけられるとは知りませんでした。

751:デフォルトの名無しさん
07/08/22 10:15:43
配列型という型なんだよ
変数名じゃなくて型名の後に括弧を付ける方がその意味では正しい

752:デフォルトの名無しさん
07/08/22 11:06:56
746はVBしかしたことないんかな

753:デフォルトの名無しさん
07/08/22 12:16:12
>配列就職誌
誤変換に生活史が見て取れる

754:デフォルトの名無しさん
07/08/22 12:44:18
Dim array As Int32() = New Int32() {1, 2, 3}
こう書いたらもうC#だなw

755:デフォルトの名無しさん
07/08/22 21:19:29
友達からVS2005をコピーしてもらったのですが、インストール方法がわかりません。
どうやらキーを入れるみたいなんですが、キーを教えてもらえませんか?

756:デフォルトの名無しさん
07/08/22 21:46:24
>>755
お前頭悪過ぎ

わざとボケたならすまない。
だが、ここでなく低脳スレに行くことをオススメする。

757:デフォルトの名無しさん
07/08/22 21:53:17
>>755
マイクロソフトに問い合わせればいいじゃん

758:デフォルトの名無しさん
07/08/23 11:13:09
VB2005を使っています。

フォームのNew()の中でInitializeComponent()が呼ばれますが、InitializeComponent()内で
設計時に設定したプロパティを設定するときに、それぞれのイベントハンドラが呼ばれたりします。

全てが初期化されるまでに呼ばれると困るイベントハンドラもあるので、今のところは
以下のようなコードでしのいでますが、VB2005に用意されている機能でこれを実現することはできますか?
Class Form1
  Dim mConstructed as Boolean

  Public Sub New()
    InitializeComponent()
    mConstructed = True
  End Sub

  Private Sub SomeEventHandler(...)
    If Not mConstructed Then
      Exit Sub
    End If
  End Sub
End Class

759:デフォルトの名無しさん
07/08/23 12:39:16
>>758
まあ別にそれでも良いんじゃない?
(ただ、未確認だけど自分で判定用のフィールド作らなくてもForm.Createdが使えると思う)

そういう場合はHandles句を使わずに自分でイベントを紐付けするのが正攻法だと思うけど。

760:758
07/08/23 13:04:41
>>759
前者の方法も知りませんでしたし、後者の方法も目から鱗でした!
ありがとうございました。

761:デフォルトの名無しさん
07/08/23 15:11:07
タブコントロールを使っているのですが
タブが多くなり2段になりました。
どうせなら自分の好きなタブで区切り2段になるようにしたいのですが
タブ何個で段分割するとかいう指定はないでしょうか?


762:デフォルトの名無しさん
07/08/23 15:13:15
タブサイズ調整するしかないんじゃね?

763:デフォルトの名無しさん
07/08/23 15:54:00
あきらめました!

764:デフォルトの名無しさん
07/08/23 20:58:38
諦めんのはええぇぇぇぇwwwwww

765:733
07/08/23 22:05:44
あれから探して見つかったので、聞かれていませんが一応。
WebBrowser.Document.ActiveElement.InnerText
WebBrowser.Document.ActiveElement.InnerHtml
を使ってWebBrowserの選択範囲・クリックした画像のソース等の取得ができました。クリックイベントと併用したら便利でした。

766:デフォルトの名無しさん
07/08/24 11:56:51
質問させてください。
継承コントロールでプロパティを追加した場合、デザイナでそのコントロールの該当プロパティを選択した時の説明文
(例えばFormのTextプロパティなら「コントロールに関連付けられたテキストです」)は、どこに書けば反映されるのでしょうか?
プロパティの<summary></summary>に書けば良いのかと思いましたが、そうではないようです。
解かる方、ご教示お願いします。

767:デフォルトの名無しさん
07/08/24 12:16:58
DescriptionAttribute(属性)だったかな

768:デフォルトの名無しさん
07/08/24 12:37:22
というか、そんなの自分で調べる能力がない人間がコントロールなんか作ると
間違いなくハマるよw

769:デフォルトの名無しさん
07/08/24 12:44:16
.netでEE用のソースは問題なく使えますか?

770:デフォルトの名無しさん
07/08/24 12:58:39
いーいーっていったいなんのことかな?

771:デフォルトの名無しさん
07/08/24 13:00:02
いーいーではなくEEです。

772:デフォルトの名無しさん
07/08/24 13:14:48
Erotic Elementary school girl

773:766
07/08/24 13:19:07
>>767
ありがとう!

>>768
思いつく限りの単語で調べてみたけど、わかんなかったのよ!

774:デフォルトの名無しさん
07/08/24 20:59:58
>>773
TextBox プロパティ

これでググったりMSDN見たりする頭もないのか
先行き不安だな

775:デフォルトの名無しさん
07/08/24 21:12:15
>>774
>思いつく限りの単語で調べてみたけど、わかんなかったのよ!

776:デフォルトの名無しさん
07/08/24 21:15:27
>>774
MSDNのメンバの説明ではDescription属性は省かれてる

777:デフォルトの名無しさん
07/08/25 17:44:23
>>774
継承しているコントロールがTextBoxでも無い限り、そんな単語で検索しないと思うぜ?

778:デフォルトの名無しさん
07/08/27 17:06:12
VC++から書き込まれた共有メモリを
OpenFileMapping()、MapViewOfFile()にて読み出しております。

VC++から
struct data{
char str1[256];
char str2[256];
char str3[1024];
}

という構造体、または構造体の配列が書き込まれた場合、
VB側ではどのようにすればそれぞれを受け取ることができるでしょうか

779:778
07/08/27 18:03:29
一つ思い浮かびました

Private Declare Function MovePointer Lib "mydll" _
(ByVal ptr As IntPtr, _
ByVal movesize As Integer _
) As IntPtr

・・・他に真っ当な方法は無いでしょうか(汗

780:デフォルトの名無しさん
07/08/27 18:05:03
Marshal.PtrToStructure

781:778
07/08/27 18:31:03
>>780
ありがとうございます。
nAddress = MapViewOfFile(hOpened, FILE_MAP_READ, 0, 0, 0)
str1 = Marshal.PtrToStringAnsi(nAddress)
と先頭を取ることはできるのですが、

Public Structure DATASTRUCT
Dim str1 As String
Dim str2 As String
Dim str3 As String
End Structure
Dim cds As DATASTRUCT
cds = CType(Marshal.PtrToStructure(nAddress, GetType(DATASTRUCT)), DATASTRUCT)
ですと、
「オブジェクト参照がオブジェクト インスタンスに設定されていません」のエラーが出てしまいます。

Marshal.PtrToStructure()をどのように使えば宜しいでしょうか

782:デフォルトの名無しさん
07/08/27 18:47:35
>>781
MSDNライブラリ読めばいいのに。
たぶんDATASTRUCTの定義が不適切。
URLリンク(msdn2.microsoft.com)(VS.80).aspx

783:778
07/08/27 19:02:11
>>778
ありがとうございます。
どこを読めばいいのかさっぱりの状態でしたorz

Public Structure DATASTRUCT
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _
Dim str1 As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _
Dim str2 As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1024)> _
Dim str3 As String
End Structure

としたところうまくいきました!
構造体のメンバのサイズを宣言できるんですね!
(散々ググったページには「できない」とあったのですが・・・)

大変助かりましたありがとうございましたm(_ _)m

784:778
07/08/27 19:04:37
間違えました>>782さんでした。

>構造体のメンバのサイズを宣言できるんですね!
Stringのサイズ(固定長文字列)でした。。。

785:778
07/08/27 19:22:55
申し訳ありません。

この構造体が配列で渡されたときの受け取り方をお教えいただければ幸いです。

786:デフォルトの名無しさん
07/08/27 19:50:19
質問です。

エクセルの20個のファイルに(1a、2b・・・から20tとする)のファイル名
をそれぞれにつけて、とある1つのディレクトリにまとめて保存し
たそれらを一つずつオープンして、それぞれのファイルのSheet1
にあるセルの情報(それぞれのファイルで1行目(1,1)~(1,40)に
まとめてある)を、情報をまとめるためのファイル「Answer」のSheet1に
1行ずつ出力するプログラムを教えていただけないでしょうか。
(最終的にはAnswerのSheet1は20行情報が貼り付けられることになります)

(ファイル名に規則性がなくても出来るのであればなお嬉しいです)

どうかよろしくお願いしますm(_ _)m


787:デフォルトの名無しさん
07/08/27 20:09:38
>>786
Excel操作はここら辺を参考にがんばって。
URLリンク(jeanne.wankuma.com)
URLリンク(msdn.microsoft.com)

788:デフォルトの名無しさん
07/08/27 20:11:33
>>785
>>782の前後に書いてる

789:デフォルトの名無しさん
07/08/27 22:10:29
programingなんてやめちまえよ。
たとえるなら、薬師みたいなもんだよ。
調合の材料を客先に持ち込んで、客に合わせて調合するんだ。
もちろん、調合の仕方を覚えてれば、調合は早いだろうけど、リファレンス見ながらでも誰も怒らないよ。
そんな覚える技術や努力なんて馬鹿みたいだし、そんなところにしか技術の差が出ないなんて悲しいよな。
てか、薬師よりおとるかもなぁ。。薬師なら、難病を治すために適切に薬を選べるけど、programmerは、言われたように作るだけだから。。

790:デフォルトの名無しさん
07/08/27 22:22:11
薬師三尊像、まで読んだ

791:デフォルトの名無しさん
07/08/27 22:26:37
薬で難病が治るまで読んだ。最後まで読んだ。

792:デフォルトの名無しさん
07/08/27 22:38:58
薬買いにいって
えーと……とかって本見ながら調合始めたら引くよな

793:デフォルトの名無しさん
07/08/28 09:39:51
>薬師なら、難病を治すために適切に薬を選べるけど、programmerは、言われたように作るだけだから。。

言われたようにつくるだけのマもいるけど、「こんなことできないかしら?できたらいいな!」って言われて、それを成す為の最適な方法を考案するマだっているさ。
何も言われずとも「こういうものをつくったら売れるんじゃないか!?」って創作するマもいるし、病人がいないと作ったものが効果を発揮しない薬師より、マの方がいろいろ可能性はあるさ。
調合、調整、やり直しが楽なところもマの魅力。
給料は低いが!!!!(つД`)
給料の為に働いてるマも多いだろうが、自分は創る行為自身が楽しくてマをつづけている。

794:778
07/08/28 11:40:57
>>788
ありがとうございます。

プラットフォーム呼び出しによるデータのマーシャリング
URLリンク(msdn2.microsoft.com)(VS.80).aspx
配下を読んでみました。
「Marshal.Copyというものがありアドレスから整数配列を取得することが可能」
ということはわかりましたが、
アドレスから文字列を含む構造体の配列を取得する方法
についてはどうしてもわかりませんでした。

勉強不足で申し訳ございませんが、ヒントをいただけませんでしょうか。

795:デフォルトの名無しさん
07/08/28 12:44:00
>>794
とにかく一通りMSDNライブラリに目を通したほうがいいよ。

>>788がどういうつもりでああ書いているか知らないが、
恐らくArraysのサンプルが参考になるんじゃない?

あるいは、ドトネトのややこしいマーシャリングのルールに縛られるのが嫌なら、
アンマネージコードとの受け渡しは全部バイト配列でやって、Encodingとかその他使って
自分で必要に応じて手動で変換するのも一つの手かもね。

796:デフォルトの名無しさん
07/08/29 21:56:59
文字列のバイト数返す方法ないですか?

"abc123"なら6を、"テストテスト"なら12を、"あ12い"なら6
を返す感じで・・・

797:デフォルトの名無しさん
07/08/29 22:00:34
>>796
君はまず「文字列」の正体を勉強するのが先。
その後ではそういう「うかつ」なことは恥ずかしくていえなくなるだろう

798:デフォルトの名無しさん
07/08/29 22:01:11
どういうやりかたで各文字のバイト数を数えるのかが問題だ

799:デフォルトの名無しさん
07/08/29 22:05:40
>>798
ですよね・・・やっぱり無理か

800:デフォルトの名無しさん
07/08/29 22:09:49
>>797
知らないならすっこんでろ糞虫(笑)

801:デフォルトの名無しさん
07/08/29 22:11:50
string str = "シフトJISでは何byte?";

Encoding sjisEnc = Encoding.GetEncoding("Shift_JIS");
int num = sjisEnc.GetByteCount(str);

Console.WriteLine(num);


802:796
07/08/29 22:16:51
>>801
即レスありがとうございます!助かりました!!
↑のレスは自分ぽいけど偽者です・・・

>>797
恥ずかしい奴、未だにC言語シコシコ組んでる人?

803:デフォルトの名無しさん
07/08/29 22:17:54
夏だなあ

804:デフォルトの名無しさん
07/08/29 22:20:06
>>802
本気で言ってるのか?
801がほのめかしているように、今時文字列のエンコーディングはANSI(S-JIS)
とは限らない。

まあ、こういう「幸せな馬鹿」に言っても通じないかな。

805:デフォルトの名無しさん
07/08/29 22:24:13
夏だなあ

806:デフォルトの名無しさん
07/08/29 22:26:20
少なくとも>>796
"abc123"なら6を、"テストテスト"なら12を、"あ12い"なら6
を見る限りにおいてはS-JISとみなしても正解だわな

807:デフォルトの名無しさん
07/08/29 22:35:42
「文字のエンコード」という概念を796が知っていれば、
当然Encodingクラスについても知っているか、知らなくても容易に発見しているはずで、
それならばそもそも796のような質問は発しないだろう。

質問の文面や受け答えから見て、どうみても旧VBプログラマにありがちな、
理解しもせずサンプルをコピペして使うタイプの「お馬鹿さん」だろう796は。

808:デフォルトの名無しさん
07/08/29 22:46:38
さしずめ>>797はそのお馬鹿さんの揚げ足を取って優越感を感じるタイプのカスかw


809:デフォルトの名無しさん
07/08/29 22:47:38
>>807
>「文字のエンコード」という概念を796が知っていれば、
>当然Encodingクラスについても知っているか、知らなくても容易に発見しているはずで、

おまえニュータイプかよおまえニュータイプかよ(ふかわ風に)

810:デフォルトの名無しさん
07/08/29 23:06:28
完全ド素人質問なんですけど、ラベルをキーボードの左を押したら左に自動で移動していって
それを左右上下できて、画面の端にいったら、反対側からでてくるようにするにはどうやったらいいんでしょうか?

サンプルソース等あればお願いします

811:デフォルトの名無しさん
07/08/29 23:39:37
完全ド素人スパゲッターなんですが
うまくソースを絡めるにはどうすればいいんでしょう?

ビニール樹脂製のサンプルなどがあれば、すごく…欲しいです

812:デフォルトの名無しさん
07/08/30 02:03:32
>>810
左を押したらなどはフォームのキーダウンイベントで取得
ラベルの移動はleftやtopをいじくる。
反対側から出てきるようにするにはleftとwidth、topとheightとか。
っていうかそれvbでやることなのか。

>>811
巷のプログラマーの間では
難しいプログラムをつくろうとすればするほどソースは絡みつく
と言われている。

813:デフォルトの名無しさん
07/08/30 02:13:56
>>812
学校の課題です
もうずっとやってるのにできない・・・



もうあきらめてアホみたいな量の追加課題をやるか

814:デフォルトの名無しさん
07/08/30 10:03:22
>>813
俺も勉強中の身なんで微妙だけど、こんなんでどうよ。

Private Sub MyBase_Down(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
Select Case e.KeyCode

Case Keys.Left
If Label1.Left < -Label1.Width Then
Label1.Left = Me.Size.Width
End If
Label1.Left = Label1.Left - 1

Case Keys.Right
If Label1.Left > Me.Width Then
Label1.Left = -Label1.Width
End If
Label1.Left = Label1.Left + 1

Case Keys.Up
' 処理

Case Keys.Down
' 処理
End Select
End Sub

上と下も同じような考えでおkなはず。

815:814
07/08/30 10:11:24
追記。
これだと見えなくなってから出てくるまでに時間がかかるから、Ifの条件を弄った方がいいかも。

816:デフォルトの名無しさん
07/08/30 10:48:29
とりあえずラベルを2つ使え。
そーすりゃあとは楽勝だと思うが。

817:デフォルトの名無しさん
07/08/30 13:50:23
日本語でうまく説明できないやつは
ソースも糞な傾向が多い。

818:デフォルトの名無しさん
07/08/30 14:10:18
まずは日本語を勉強したまえ

819:デフォルトの名無しさん
07/08/30 15:09:53
まずVBの本を読め

820:デフォルトの名無しさん
07/08/30 17:42:41
>>810
それほんとにラベルを使わないといけないの?
どう考えてもGraphics使って自前で描画するべき

821:デフォルトの名無しさん
07/08/30 18:31:29
>>820
宿題を課したやつも素人なんだろw
Labelをキーで動かすことを学んで何の得になるんだろうなw

822:デフォルトの名無しさん
07/08/30 18:43:21
初学者にWinフォームの基本(例えばフォーカスを失うとキーイベントは発生しない、
クライアント座標の座標系はデカルト座標ではない、とか)を体感させるには
悪くない課題だと思うけどね俺は。

というか、たかが文字列一つ動かすために自前で描画しろ、っていう奴は
恐らく自分でそんなことやったことがないんだろうねw

「ちゃんと」やろうと思ったら意外と面倒だよ。
例えばフォームにコントロールが配置してあったらどうするの?
描画するものが他にあったら、表示のプライオリティや移動した際の再描画は
どうするの?

他の描画の処理が仮に重いものだったとしたら?
無効化する領域を指定しても完全には解決できない場合があるぞ。

823:デフォルトの名無しさん
07/08/30 20:35:55
今、マウスの移動できる範囲を制限するのをつくっているんですが
Windows.Forms.Cursor.Clip = New Rectangle(0, 0, 300, 300)
などとしているんですが、これだとほかの窓をアクティブにしたりすると
制限が解除されてしまいます。

何かいい方法はないでしょうか?

824:デフォルトの名無しさん
07/08/30 21:19:48
そんな「悪意のあるソフト」ぐらい自力で作れよアホかw

825:デフォルトの名無しさん
07/08/30 21:53:43
悪意って言いたいだけだろハゲ
そのものズバリのWin32apiが公開されてんだろ低能

826:デフォルトの名無しさん
07/08/30 22:39:59
ClipCursorってのを使ってみたのですが
やはり解除されてしまうみたいです。

827:デフォルトの名無しさん
07/08/31 09:47:18
>>822
そこまで考えた課題には見えないし、より深く考えるならそれこそラベルなんぞを動かそうという発想自体がナンセンスになる。
多分スレ違いなんだよな、ここの住人は「素人」や「初心者」に過剰反応するから、優しい人が初心者スレでもつくってあげればいい。
叩きや煽りにいちいち反応してたら、ここのスレ見てらんないぜ?

828:デフォルトの名無しさん
07/08/31 12:44:37
>ラベルなんぞを動かそうという発想自体がナンセンスになる
だからラベルを動かすのは目的じゃなく手段でしょ。

何のための?
学習のためのだよ。

どうでもいいけど話の文脈(今何を話しているか?)を忘れるのは頭の悪い証拠だよ。
学校の課題として不適切、って寝ぼけたことを言う奴がいたから
必ずしもそうでもないだろって話をしてるんだけど。

829:デフォルトの名無しさん
07/08/31 13:09:11
>>828
>叩きや煽りにいちいち反応してたら、ここのスレ見てらんないぜ?

830:デフォルトの名無しさん
07/08/31 13:16:12
>>828
>学校の課題として不適切、って寝ぼけたことを言う奴がいたから
>必ずしもそうでもないだろって話をしてるんだけど。

質問スレで質問と関係ない話しないでくれる(^ω^;)?

831:デフォルトの名無しさん
07/08/31 14:16:04
>>828
なんの話だよw
帰れ

832:デフォルトの名無しさん
07/08/31 15:48:39
名前付パイプを使った通信をしております。
URLリンク(support.microsoft.com)
等を参考にして以下の通り作成いたしました。

Private Declare Function WriteFile Lib "kernel32" ( _
ByVal hFile As Integer, _
ByVal lpBuffer As String, _
ByVal nNumberOfBytesToWrite As Integer, _
ByVal lpNumberOfBytesWritten As Integer, _
ByVal lpOverlapped As Integer _
) As Integer

Dim bool As Integer
Dim pipe As Integer
Dim size As Integer
pipe = CreateFile("\\.\pipe\mypipe", &H40000000, 0, 0, 4, &H80, 0)
bool = WriteFile(pipe, "ABC", 4, Size, 0)

以上を実行すると、受信側で"ABC"と4を取得し通信自体は成功はするのですが、
同時に送信側でエラーが発生してしまいます。

System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
at abc.AbcvMain.WriteFile(Int32 hFile, String& lpBuffer, Int32 nNumberOfBytesToWrite, Int32 lpNumberOfBytesWritten, Int32 lpOverlapped)

WriteFileのどこに問題がありますでしょうか。
どんな些細な点でもかまいませんのでご指摘下さい。

833:デフォルトの名無しさん
07/08/31 15:53:40
>>832
試してないが、
>ByVal lpNumberOfBytesWritten As Integer, _
これ API が書き戻すんだから ByRef じゃね?

834:832
07/08/31 15:56:22
>>833
なんておマヌケorz

エラーが出なくなりました!
ご指摘ありがとうございました。

835:デフォルトの名無しさん
07/08/31 17:31:11
自作クラスのString型プロパティを多言語対応させるには?

836:デフォルトの名無しさん
07/08/31 17:36:27
>>835
頑張れ★

837:デフォルトの名無しさん
07/08/31 18:36:52
>>835
イミワカンネ

838:デフォルトの名無しさん
07/08/31 20:06:35
このスレ糸冬

839:832
07/08/31 20:23:46
申し訳ありません。もう一つ疑問についてお教え下さい。
WriteFileEx()を用いて非同期の書き込み(読み出し)をしたいと思っております。
WriteFileEx()には関数のアドレスが必要なのですが、
それを得る方法がどうしてもわかりません。

URLリンク(dobon.net)
にも同様の質問があったため、上記ページ等を参考にして
以下のように作成いたしました。
---
Delegate Sub SampleDelegate()
Public Class sampleClass
Public Sub Method()
MsgBox("Method")
End Sub
End Class

Private Declare Function WriteFileEx Lib "kernel32" (ByVal hFile As Integer, ByVal lpBuffer As String, ByVal lpNumberOfBytesWritten As Integer, ByVal lpOverlapped As Integer, ByVal lpCompletionRoutine As SampleDelegate) As Integer

Dim instance As New SampleClass
' こちらは成功する
' bool = WriteFile(pipe, "ABCDEFG", 8, size, 0)
bool = WriteFileEx(pipe, "ABCDEFG", 8, 0, AddressOf instance.Method)
---
実行しますとWriteFileExでSystem.NullReferenceExceptionが発生いたします。

これはDelegateの扱い方が悪いのでしょうか?
それとももっと根本的なことが間違っているのでしょうか?

大変恐れ入りますがお教え下さい。

840:デフォルトの名無しさん
07/08/31 20:46:33
>>839
根本的に間違ってるね。
そもそも非同期とはどういう意味なのか、理解してないんじゃないの?
あるいは自動変数のスコープの概念を知らないのかな。

メソッドの中で作った'instance'への参照はメソッド抜けるとなくなる。
そこはOK?

ドトネドにはガベージコレクターというものがあって……という話は理解してる?

841:832
07/08/31 21:19:25
>>840
レスありがとうございます。

C言語レベルでしたらスコープ等は理解しております
VC++の非同期は多少は・・・知っているつもりです
ガベージコレクションがあることは初めて知りました。

ところで、メンバ変数/クラス変数として以下を宣言してみても同様のエラーでした。
Dim instance As New SampleClass
Dim m_address As SampleDelegate = AddressOf instance.Method

恐れ入りますが、他にポカがありましたらご指摘いただければと思います。

842:デフォルトの名無しさん
07/08/31 21:54:49
コールバックされるメソッドのシグネチャも合ってないよね。

843:832
07/08/31 23:29:29
>>842
レスありがとうございます。

VC++のように決まった形があるのかな、と意味も分からずに
Delegate Sub SampleDelegate(ByVal sender As System.Object, ByVal e As System.EventArgs)
Public Class SampleClass
Public Sub Method(ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox("Method")
End Sub
End Class
としてみたところ、

System.Runtime.InteropServices.MarshalDirectiveException:
parameter #2 を集成できません。このクラスの型の定義にレイアウト情報がありません。

とエラーが変わりました。
この点調べてみたいと思います。

844:デフォルトの名無しさん
07/08/31 23:35:54
ADO.netでOracleに接続する場合、ConnectStringって何を渡せばいいんですか?
ネットで検索しても伏字になっているところに具体的に何が入るのかわからなくて困っています。

845:デフォルトの名無しさん
07/08/31 23:53:33
ListViewコントロールをArrayListにつっこんだんですけど、
そのつっこんだListViewのイベントって、どうやったらとれるのでしょうか?

Dim lvwFile As ListView = New ListView
arrLvwFile.Add(lvwFile)
arrLvwFile(arrLvwFile.Count - 1).View = View.Details

のばあいの、Listview1.mousedown とかほしいのでうs。

846:デフォルトの名無しさん
07/08/31 23:57:09
Listview1 ってなんだよ唐突に出てきたけど
とれるとかほしいとか意味がわからん

847:デフォルトの名無しさん
07/09/01 00:01:19
コントロール配列の場合は、

arrLvwFile(0) = New ListView
arrLvwFile(0).View = View.Details
AddHandler arrLvwFile(0).MouseDown, AddressOf test

でarrLvwFile(0)のMouseDownイベントでtest関数が呼べたのですが、
ArrayListに入れた場合がわからないのです。。

848:デフォルトの名無しさん
07/09/01 00:12:00
AddHandler は遅延バインディングには無理なんだっけ
キャストすればいいだろ

849:デフォルトの名無しさん
07/09/01 00:13:35
>>844
データソースとかの名前をどこから引っ張ってくるかという話しなら
以下のあたり見ておけばいいと思うけど。
URLリンク(otndnld.oracle.co.jp)

850:デフォルトの名無しさん
07/09/01 00:29:31
>>848
AddHandler DirectCast(arrLvwFile(arrLvwFile.Count - 1), ListView).MouseDown, AddressOf test
でできました!感動のあまりちんこの先がぬれました
ありがとうございます。

851:デフォルトの名無しさん
07/09/01 01:10:07
>>843
その調子じゃ、言っては悪いが調べても無駄そうだな。
>Public Sub Method(ByVal sender As System.Object, ByVal e As System.EventArgs)

こんなシグネチャがいったいどこから出てくるの?
アンマネージからコールバックされるのに、こんなドトネトのマネージコードの
イベントと同じシグネチャって変だとは思わないか?

WriteFileEx なんてドトネトが影も形もないころに仕様が決められたAPIでしょ。

852:デフォルトの名無しさん
07/09/01 02:02:58
>>844
基本的にはオラクル接続に必要な

USER
PASSWORD
SID

をわたせばおk。

853:デフォルトの名無しさん
07/09/01 02:16:47

どなたか Gilma (=ILMerge のGUIツール) および ILMerge を使ってる方が
居たら教えてください。

このユーティリティでは DLL がたくさんある場合のマージは難しいでしょうか?

比較的少なめの個数の DLL (数個程度) 使用では問題なくマージできるのを
確認していたんですが、10個ぐらい DLL が必要なものでやったところMerge が
最後まで行かず、 Done のメッセージが出ないまま、エラーのメッセージも出ずに
終了してました。結果として目的の Exe ファイルも作成されていませんでした。

最後の DLL のところで、Read successfully にはなっているのですが、その後の
2行目のメッセージが出ずに Log が終わっていました。そこで何かエラーしている
のかもしれないんですが、問題がなんなのかわかりませんでした。

もし似たようなことになったとき何か対策して解決されていた方いらっしゃったら
教えていただきたく。何卒よろしくお願いします。


854:853
07/09/01 02:19:49
(追記)

>>853 ですが、コマンドラインのテキストは、 DLL が少ない場合のときと同様
に規則通りできているようでした。

DLL マージ前の状態での動作確認は一応OKで、DLLが無くて動作しない、
という状況ではありませんでした。



855:デフォルトの名無しさん
07/09/01 02:31:56
なんでそんなにDLLって嫌われるんだろうね

856:832
07/09/01 03:27:10
>>851
レスありがとうございます。

恥ずかしながらアンマネージやらマネージやらは初めて聞きました。
色々調べてみます。

#Unix選手がゲイツを何も知らずにいきなり.NETってのはかなり無謀ですね・・・

857:デフォルトの名無しさん
07/09/01 04:20:06
つーかUnix使ってたらCつながりでC#に行かないか普通?
まあ仕事なら仕方ないがチーン

858:デフォルトの名無しさん
07/09/01 07:58:15
>>852
SIDは違うんじゃね。

859:デフォルトの名無しさん
07/09/01 09:43:39
tnsnameだね。sid渡すのはjdbcだね

860:デフォルトの名無しさん
07/09/01 09:59:08
>>849
>>852
>>858
>>859
ありがとうございます。
でもどのページを見ても
「データベースに接続したことはあるけど細かい設定があいまいな人」用って感じで
データベースに接続するのがまったく初めてで独学の人には難しいんですよ。
Common SQL Environment ってソフトでは
ユーザーIDとパスワードと接続文字列ってやつを渡すと繋がりますが、
ConnectStringにはこの接続文字列ってのは渡さなくてもいいんですか?


861:デフォルトの名無しさん
07/09/01 10:02:43
初心者で独学で、なぜにoracle

862:デフォルトの名無しさん
07/09/01 11:05:42
>>856
参考になるかどうか解らんが↓
  コールバック関数の実装
  URLリンク(msdn.microsoft.com)

863:デフォルトの名無しさん
07/09/01 11:09:11
すいません。一つ質問させてください。
VB2005でテキストボックスに入力されている文字が
10進数か判断するにはどうすればいいでしょうか?
IsDigitは1文字しか調べられないようだし
IsNumericは数字以外もTrue扱いだし・・・

864:デフォルトの名無しさん
07/09/01 11:13:30
一文字ずつIsDigitとか
まあ正規表現使った方が手っ取り早いけど
でもいわゆる全角の数字とか考えてるのかな

865:デフォルトの名無しさん
07/09/01 11:14:16
>>863
文字と数値の判別なら、あげた関数等を駆使すれば可能だろう。

だが、10進数かどうかを判別するのは不可能。

866:デフォルトの名無しさん
07/09/01 11:40:27
プレフィクスのついてない数字を10進判定なんてできないだろ常識的に考えて……

867:863
07/09/01 12:02:45
お答えをいただきありがとうございました。
やっぱりあの2つでは駄目なんですね・・・
ただ言われたとおり正規表現使えば出来そうですので
そっちを使ってロジック組むようにしてみます。

868:デフォルトの名無しさん
07/09/01 12:28:41
すんません、
vb.net2005で
MIDI音源で音を出したいのですが
やり方が全くワカリマセン。

例えば
ドのボタンを押したらドがなるなどということです。
使用するクラスとか、関数とかなんでもいいので教えてもらえないでしょうか。

また、別途ツール等が必要ならその情報でもいいです。オネガイシマス

869:デフォルトの名無しさん
07/09/01 12:31:40
URLリンク(www.google.co.jp)

870:デフォルトの名無しさん
07/09/01 12:39:27
>>860
まずプログラムからじゃなく、
SQLPLUSとかで接続してみなよ。
で接続できるか確認しましょう。

871:デフォルトの名無しさん
07/09/01 13:03:03
>>870
いえ、CSEなどでは接続成功しています。
ただADO.NETのConnectStringに渡す文字列がわからない状態です。

872:デフォルトの名無しさん
07/09/01 13:40:22
オラクルのクライアントが入ってるんならでダメかな?

Dim hoge As Oracle.DataAccess.ClientOracleConnection
Dim str as String

'接続文字列
str = "User Id=" & ユーザー名 & ";Password=" & パスワード & ";Data Source=" & サービス名

hoge = New OracleConnection(str)
hoge.Open()

873:デフォルトの名無しさん
07/09/01 13:42:02
>>871
ツールボックスからフォームにOracleConnectionを貼り付けて、
プロパティのConnectionStringで<新しい接続>を選択すると簡単だよ。
OracleConnectionがないときは、ツールボックス アイテムの選択で追加してね。
名前空間がSystem.Data.OracleClientのを使ってね。

874:デフォルトの名無しさん
07/09/01 16:42:21
>>872-873
ありがとうございます。
無事接続できました。

875:デフォルトの名無しさん
07/09/01 21:40:01
VB2005です。

自分の実行ファイルのディレクトリをコードで取得するコードをお願いします。
VBAのThisWorkbook.Pathみたいな感じ。

876:デフォルトの名無しさん
07/09/01 21:54:17
自己解決じました

877:デフォルトの名無しさん
07/09/02 01:02:42
>>189使う。
でもVBのライブラリ参照したらその機能あった気がするのでそっちのがいいかな?



878:デフォルトの名無しさん
07/09/02 01:03:27
まちかえたよ?


879:デフォルトの名無しさん
07/09/02 15:00:26
If System.IO.File.Exists(filename) = False Then
System.IO.File.Create(filename)

Dim sw As New System.IO.StreamWriter( _
filename, _
False, _
System.Text.Encoding.GetEncoding(932))

sw.WriteLine(”あいうえお”)
sw.WriteLine()
sw.Close()
End If

こんなコード書きました
filenameにはフォルダパス付きファイル名が入ります
ファイル作った後sw をnewする時点で
他のプロセスが使用中というメッセージが出て書き込めません。
使用できる状態にするにはどんなコードを追加すればいいですか?



880:デフォルトの名無しさん
07/09/02 15:07:39
File.Create しらべれ

881:デフォルトの名無しさん
07/09/02 15:18:37
解決しました。


882:デフォルトの名無しさん
07/09/02 23:59:31
エンコードで質問です。
System.Web.HttpUtility.UrlEncodeを使ってURLエンコードをしたいのですが
UTF-8のタイプでエンコードされています。
EUC-JPのタイプでエンコードしたいのですが、うまくいきません
System.Text.Encoding.GetEncoding("EUC-JP")こうしてバイト配列にしてもダメでした
どうやればいいのでしょうか?

883:デフォルトの名無しさん
07/09/03 00:06:36
>>882
URLエンコードなんてやったこともなかったが、ググったら30秒で答え見つかったぞ。
URLリンク(www.atmarkit.co.jp)


884:882
07/09/03 00:56:07
自己解決しました。
エンコード方法を指定できたのですね・・・

885:デフォルトの名無しさん
07/09/03 02:11:06
お前は聞いといて回答を見てないのかw


886:デフォルトの名無しさん
07/09/03 15:42:38

ExplorerがWindowsから受け取っているような、
Folder内の内容が変わったことを知らせるメッセージを受け取る方法
はあるでしょうか。

数秒おきに監視するという仕組みを導入すると
ファイルがたくさん存在する場合、時間がかかってCPUの占有率が100%
から落ちて来ず、困るのでした。

Explorerの場合、直接コピペしたりD&Dしたりした場合でなくても、
他で変化させたファイルやフォルダーが1秒程度で反映しており、
また常時監視もしていないことがわかりました。

これはたぶんWindowsからのメッセージを受け取っていて実現できている
ものと想像したのでした、これと同じメッセージかなにかを別のアプリケーション
で受け取ることは可能でしょうか?何かアドバイスを戴ければありがたく。

887:デフォルトの名無しさん
07/09/03 15:47:04
>>886
FileSystemWatcher

888:886
07/09/03 15:54:01
>>887

おお。存在したのですね!助かりました!!
さっそくのご指導、大変ありがとうございました!!


889:デフォルトの名無しさん
07/09/03 18:54:47
MSチャートコントロールについて質問です。
棒グラフに表示する値が100万以上の時、棒グラフにはきちんと「1000000」と表示されるのですが、
Y軸の値が「1e+006」みたいに表示されてしまいます。「1e+006」ではなく「1000000」のように表示させる事は可能でしょうか?
可能ならばどのようにするのかご教授お願いします。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch