VBプログラマ質問スレ(6.0以前) Part43
Win2000 SP4 + VB6.0 SP6です。 デスクトップ右クリックメニューの「等間隔に整列」を ロジックで実現する方法を教えてください。 よろしくお願いいたします。
ListViewコントロールについてなんですが、各行の横幅でなく、 たて幅を設定できないものでしょうか? (セルのたて幅とも言えるかもしれません) ListView内の一行を選択する形で作ると、 どうしても各行が細いのが気になってしまって……。
VB6.0-TextBoxオブジェクト付随のScrollBarをプログラム側から移動させる方法を教えてください・・・
9get
>>8 たぶん
SetScrollInfoとGetScrollInfoを使えばできると思います。
10 :
デフォルトの名無しさん :2005/08/15(月) 15:41:39
>>7 「リストビュー メッセージ 高さ」でヤフるんだ。
1件目に出てくるぞ。
・・・望みの高さのイメージリストを付けてやれとさ。
あるいは、単なる一覧としてならMSFlexGridで代わりにすれば?
11 :
8 :2005/08/15(月) 16:42:34
ウィンドウハンドルにコントロールを入れてみたりとやってみたのですが、 動作させることができませんでした。 教えて君で申し訳ないんですがコントロールの場合どうやるのか教えていただけませぬか?
>>8 確かVBのTextBoxはスクロールに対してVB自身が独自の描画をしているから
SetScrollInfo・GetScrollInfoでスクロールバーのつまみは動くけど
文章自体はスクロール出来ないんだよな…
13 :
デフォルトの名無しさん :2005/08/15(月) 17:01:40
質問ですが、 最適化オプションの『Pentium Proへの最適化』という項目は、Pentium Proへの対応であってPentium 4とかには 意味なしオプションなんですか? そもそもなんであんなマイナーなCPUへ最適化しようとしたのかの背景も知りたいのですが・・・。 それ以前に、P-Codeでコンパイルした方が速い箇所もあるのは俺の作り方がへたくそという事なのでしょうか。 ちなみに、自分のソフトはAPIを使った方が速い部分については、結構な頻度でAPI使ってて、VBらしさという点ではVBらしくないです。 ご回答よろしくお願いします。
>>8 SelStartである程度は動かせるべ?
SendKeysもあるし。
>>8 作ってみました。
これでスクロールバーを縦に動かすことはできますが
>>13 さんが言うようにテキストを再描画できません。
SendMessageでやればできたような気もしなくも無い。
ちょっと考えて見ます。
-------------ソース---------------
フォームにtxtっていうテキストボックスとボタンを一つ貼り付けてね。
Option Explicit Private Declare Function SetScrollInfo Lib "user32" _ (ByVal hWnd As Long, ByVal n As Long, lpcScrollInfo As SCROLLINFO, ByVal bool As Boolean) As Long Private Declare Function GetScrollInfo Lib "user32" _ (ByVal hWnd As Long, ByVal n As Long, lpScrollInfo As SCROLLINFO) As Long Private Type SCROLLINFO cbSize As Long fMask As Long nMin As Long nMax As Long nPage As Long nPos As Long nTrackPos As Long End Type Private Const SB_HORZ As Long = 0 Private Const SB_VERT As Long = 1 Private Const SB_CTL As Long = 2 Private Const SB_BOTH As Long = 3 Private Const SIF_RANGE As Long = &H1 Private Const SIF_PAGE As Long = &H2 Private Const SIF_POS As Long = &H4 Private Const SIF_DISABLENOSCROLL As Long = &H8 Private Const SIF_TRACKPOS As Long = &H10 Private Const SIF_ALL As Long = (SIF_RANGE Or SIF_PAGE Or SIF_POS Or SIF_TRACKPOS)
>>15 氏
本当にありがとうございます。
やっと意味が理解できましたorzフォームのハンドルずっと返してた・・・
>>10 出来ました!どうもありがとうございます。助かりました。
……自分はもっと検索方法を工夫しないといけないようですorz
MSFlexGridも初めて知りましたが、こっちの方が使いやすそうですね……
>>13 VBの標準関数(特に文字関係)呼びまくってたり "AAAA" & "BBBB" みたいに文字結合しまくってるとP-Codeの方が速くなるらしい。
逆に数値演算やWIN32APIが多いとネイティブの方が速いらしい。
まぁあくまでも目安で
21 :
13 :2005/08/16(火) 02:00:04
>>20 回答ありがとうございます。
やっぱり、P-Codeの方が早くなる場合もあるんですね。
timeGetTimeで計測したんですが、IDEが一番早くて、次にP-Codeのexe、ネイティブの『実行速度最適化』のexe
という順序でスピードが出てたんで、最初錯覚かと思ったんですよね〜。
VC++なんかだと、モジュールごとに最適化が掛けられるのに、VBはなんでフォームごとに最適化できないかなー?同じ会社の製品なのにー、
とか考えてしまいますた。
22 :
デフォルトの名無しさん :2005/08/16(火) 18:05:11
>>13 PentiumProに最適化したら、PentiumIIもIIIもP6アーキテクチャ
なんだから有効だと思われ。以前PenIIマシンで最適化オンにしたら
文字列処理が若干速くなった。
NetBurstはどうだろうね。たぶん効果あると思うけど。
23 :
デフォルトの名無しさん :2005/08/16(火) 18:10:39
超初心者的質問ですが、 str$()とstr() のような$あり、なしではどう違うんですか? $の意味がわからないんですが。
24 :
23 :2005/08/16(火) 18:17:03
すみません。間違えました。 初心者スレ逝きます。
>>23 いいよ、ここで。戻り値の型が$ありだとStringでなしだとVariant。
26 :
13 :2005/08/16(火) 23:14:31
>>22 なるほど。
うちはAMDだから?効果が実感できなかったんですよ。
今後参考にしてみますね。
ワードなんかにあるFontを選択するプルダウンメニューのようなものを作りたいのですが プルダウンのリストに含まれるFontの種類などは、どこから持ってくるのでしょうか?
ことわる
31 :
デフォルトの名無しさん :2005/08/17(水) 09:49:05
>>27 ヘルプ開いたら「フォント 一覧 取得」で検索しろ。
Fonts プロパティというトピックがあるから嫁。
「使用例」「対象」も読め。
ついでにStr()にNullを渡すとNullが返ってくるが
Str$()にNullを渡すとエラーになる。
あと質問を出汁にして罵りあって遊ぶな。
OCXとDLLはどう違うのでしょうか。
>>34 DLLは一般的な名称、だいなみっくりんくらいぶらりー。
文字通り動的結合可能なライブラリ。
OCXはMSの固有名詞、OLEカスタムコントロールのこと。
27です。分かりました。皆さん、ありがとうございました。
ちなみに、
>>29 は私ではありません。
>>37 使い分けじゃない。概念としてはDLLっていう大きな括りに、OCXは内包される。
そもそも、説明したDLLとOCXの意味って自分で調べた?
39 :
37 :2005/08/17(水) 15:21:11
他の方の意見もお聞きしたいです。よろしくお願いします。
40 :
他の方 :2005/08/17(水) 15:25:10
>>39 使い分けじゃない。概念としてはDLLっていう大きな括りに、OCXは内包される。
そもそも、説明したDLLとOCXの意味って自分で調べた?
>>38 俺はよく知らないけど、使い分けじゃないならなんで別々にあるの?
>>40 き、きも・・・プログラム板にもこういう人いるんだ。
OCXはコントロールに貼り付けて使う。 DLLはコードで宣言して使う。 VB6.0ならこう覚えておけば問題ない。
OCXはActiveXとか呼ばれてる(旧名はOLEカスタムコントロール)。 ActiveXはCOMを元に生成されている。COMとはオブジェクトに特定のインタフェースを持たせて仕事をさせる (VBのクラスみたいな感じ。実際VBのクラスもCOMに基づいて生成されるって聞いたことがある)。 ActiveXはEXEの外部から割り込んでくるオブジェクト。 DLLはEXEがロードされた時、同じ空間上に関数が置かれるからEXEの一部として動く。 DLLとOCXを使い分ける意味は ActiveX について調べてね。 って氏んだじーちゃんが言ってた
>>39 とりあえず、>>38 <> >>40だから。
で、OCXってのはDLLの一形態ってのは理解したんかい?
48 :
デフォルトの名無しさん :2005/08/17(水) 23:22:56
違う話題いいですか?
数十万Rowのデータを高速に参照できるようにするために、
仮想ListViewを使いたいのですが、Googleで死ぬほど検索しても
VB6でできる方法を解説したサイトが見つかりませんでした。
MFCならサンプルコードもたくさんあり凄く簡単にできそうなんですが、
VB6で開発中のプロジェクトなので。。。
一応ヒントらしいことが書いてあるサイトは見つけたのですが、
ListViewコントロールのWM_CREATEをフックして、それのwindowスタイルを
差し替えてやるとしか書かれておらず、具体的にどうやるのか見当も付きません。
http://www.mvps.org/vbvision/Sample_Projects.htm#Virtual_ListView_Demo 知っている方は教えてくださいませ。
GetWindowLong SetWindowLong WM_NOTIFYフック
>>49 ありがとうございます。しかし、ヒントが難しいです。。
GetWindowLongでウインドウスタイルの現在値を取得して、
LVS_OWNERDATAとORしたものをSetWindowLongで設定するんですよね?
これはListViewを貼り付けたFormのForm_Loadのタイミングでいいんでしょうか?
またWM_NOTIFYをフックするのはLVN_GETDISPINFOのメッセージを
捉えるためだと思いますが、どのように値を設定してやればいいか
解説していただけるとありがたいです。
サイトの紹介でも助かります。
>どのように値を設定してやればいいか Cで組む場合と同じように設定してやればいい。 ※ListViewのサブクラス化を忘れないように
>>51 あ、そうですね。MSDNのCのサンプルソースを調べてみます。
サブクラス化した中でWM_NOTIFYをキャッチするんですね。
分かりました。ご親切にありがとうございました。
54 :
デフォルトの名無しさん :2005/08/18(木) 08:05:18
Declare宣言で使用するDLLが ・exeと同一ディレクトリ ・%windir%\system32 の2つ存在する場合に、どちらを使用するのでしょうか。 また、2つのファイルに日付・製品バージョン等の違いがある場合に、 使用したDLLの情報を取得する手段はありますでしょうか。 よろしくお願いします。
>>54 つうか、その手の微妙な仕様の確認は絶対自分で試せよ。
仕様がどうっていうのを知ったところで、試さないでその状態を信じる人は信じられない。
DLLをつくって、ちょこっと変えて試せば10分作業だと思うが。
TextBoxやRichTextBoxを透明にする方法ってありますか? つまりPictureBoxの上に、直接テキストを入力したように見せたいのですが・・
>>57 その質問に対しては「あります」という回答しかない。
あと「・・」で終わる質問は無礼なのでやめるように。
すみません。ちょっと質問させてください。 VB6から、Excelを開いて、CSVファイルを読み込みたいのですが、 以下のように記述してもうまく読み込んでくれません。 何か、問題があるのでしょうか? Set XlsBook = CreateObject("Excel.Sheet") Set XlsWork = XlsBook.Application.Worksheets("Sheet1") XlsBook.Application.Visible = False With XlsWork.QueryTables.Add(Connection:="TEXT;C:\test.csv", _ Destination:=Range("A1")) .Name = "テスト" End With ちなみに、With 〜 から、エラー処理へ飛んでしまい、その段階で「Range」にマウスポインタをあわせると、 「'Range' メソッドは失敗しました: '_Global' オブジェクト」と出ています。 なんか非常に基本的な事なんだと思いますが、VB触って3日目なもので………どなたかご指導をお願いします。
>>60 ↑
こういう役所の万年係長みたいな口の利き方する奴ってどこにでもいるよな( ^Д^)
自演? 53=55=60=63=64って事?
>>54 DLLは
・exeと同一ディレクトリ
・%windir%\system32
・ルートディレクトリ
・パスが通ったディレクトリ
の順に検索して一番最初に見つかったDLLを選択すんの わかった?
MSDNの載ってるよ。
VB6.0からコールしているDLLでメモリリークしていた場合、 DLLを直す、DLLを使わない以外に回避策はありますか?
71 :
70 :2005/08/18(木) 12:53:27
一応ギャグ抜きでお願いします。
・ばれないことを神様に御祈りする。 ・そのままつかっちまう。
74 :
70 :2005/08/18(木) 13:22:59
>>72 この手の書き込みをいくらでもされてしまうと思ったので
>>71 を
書いたのですが・・・
はぁ、どっと疲れが出ました。他の方はいかがでしょうか。
>>70 ヘルパプロセスを起動してそこでDLLを使う
>>70 ・メモリ解放ソフトを常駐させておく。
・定期的にOSをリブートする。
・メモリリークしな様なDLLを自分で作る。
メモリリークしなざまなDLLって何だ?
PictureBoxにImageのStretchみたいな機能をつけるにはどうしたらいいのでしょうか? うまいアイディアが浮かばないよ(´・ω・`)
>>79 APIでやる、BitBltだっけ?StretchBltだったかそんな奴。
Image使えばええやん
> ・メモリ解放ソフトを常駐させておく。 無意味。
83 :
79 :2005/08/18(木) 17:13:29
>>80 bitbltですか
調べてみます
>>81 pictureboxのlineメソッドを使いたかったんでImageだとダメポ
84 :
79 :2005/08/18(木) 17:39:34
解決しますた 結局、resizeイベントが起こったときにもう一度描写する関数を呼び出させて何とかさせますた ( ´ー`)y-~~
\1,000 を 1000 に変換する様な 関数があれば教えてください。 お願いします。
CLng("\1,000") "\1,000" * 1 Dim hoge As Long hoge ="\1,000" 数値(整数・実数)型に変換、数値型変数に代入、算術演算 どれをやっても1000になる。 これがVBの便利さであり、遅さの原因でもある。
88 :
85 :2005/08/18(木) 18:03:23
>>86 ,87
即レスありがとうございます。
いろいろあるんですね〜。
>>87 \1,000だと変換できて\10,000だと変換できない方法を
混ぜるなんて意地悪だねぇ。
>>89 メモリ解放ソフトは、メモリリークを解決する物じゃない。
あれは単に物理メモリのキャッシュを強制的にスワップファイルに
追い出すことしかしない。
メモリが極端に少ない場合を除いてパフォーマンスの低下につながる。
そもそも、逆になんでメモリ解放ソフトが メモリリークを解決できると思うのか、 その根拠を述べて欲しい物だけどな。 名前に騙されているだけ。
グローバルフックでメモリを強制開放するソフトなら作れるぞ 使用後にどうなっても知らんが
よーし、それなら俺は、 セクタに直接書き込んでディスクを強制解放するソフトを作ってやるぞ。 使用後にどうなっても知らんがw
アホばっかり
リソースファイル内のwavまたはmp3ファイルを、 そのまま複数個同時に再生する方法はないでしょうか。
>>91-95 このレベルの低さが2ちゃんなんだよな。なんか安心するよ。
↑ツマンネ( -д-) 、ペッ
53=55=60=100 ↑ このスレに常駐しているアラシ
>>55 >>60 >>100 こいつ日常会話でもこんな調子なのかね。
「俺のメガネどこに行ったか知らない?」
「知ってる」みたいな。だったらすごいどころか面白いな。
>>104 なに粘着してるの?よそのスレにでも行ってほしんだけど。
>>104 >こいつ日常会話でもこんな調子なのかね。
2ちゃんの書き込みから日常を想像できるところがすごすぎる。
>だったらすごいどころか面白いな。
全然面白くないことを面白いと堂々と書き込めてしまうところがすごすぎる。
そう言われて行くような人なら荒らしとはよばれない
>>107 まぁそれはそうだが。早くやめてほしいよね。
>2ちゃんの書き込みから日常を想像できるところがすごすぎる。 本当のボクは違うと言いたいの?( ^Д^)
ネット上に出る人格って、その人の本質を純化・先鋭化したものだからね。 本人は日常生活と違うと思ってるかもしれないが、周りは気付いてるよ。そういう奴だって。
>>110 誰か同意してくれるといいですね。
得意の自演をされてはいかがですか?
formにbuttonがあってbuttonを押すたびにcountが1づつあがって行くみたいなプログラムを作るときに このcountの値を保持するためにはformのグローバル関数にするしか方法は無いんでしょうか?
Static i As Long
>>101 -
あるかどうかだけ聞いてんのに、いろいろべらべらと語りだす奴もキモス&ウザスな罠。
答える気がないならスレ覗くなよ・・・ 段々過疎って来たし。
フォームの大きさを大きくするのはokだけど ある大きさより小さくするのは認めないってことはできるのかな? フォームの大きさを変えさせないってのはあったんだけどな〜
>>118 最小値より小さくなったら、最小値に戻すだけ。
ただし、ちらちらするのが弱点。
高度なやり方は知らん。
なにそのジュゲムみたいなファイル名は・・・
122 :
118 :2005/08/20(土) 22:34:46
バイトの配列をバイナリデータとしてファイルに書き出したいんですけど 以下のようだと書き出されたファイルの頭数バイトに余分な00データまで書き込まれてしまうんですけど なぜでしょうか?どなたかお願いします。 Open FileName For Binary As #1 Put #1, UBound(ByteArray), ByteArray Close #1
>>123 UBoundをMSDNで調べればすぐ分かると思いますよ。
>>123 PutをMSDNで調べればすぐ分かると思いますよ。
>>124 >>125 ありがとうございました解決しました。
Putの使い方を理解できていませんでした…
127 :
124 :2005/08/21(日) 15:36:50
ふ、はずしたか・・・
複数行に渡ってソースを書く方法について教えてください。 段々横に長くなってしまったので解決したいです。
>>128 Debug.Print _
"あいうえお" & _
"かきくけこ"
通常は _ で、 文字列の場合は二つのテキストに分けて & _ と繋げればいいんですね。 どうもありがとうございます。
131 :
デフォルトの名無しさん :2005/08/22(月) 09:59:56
>>90 ん?俺の環境だと"\10,000"に変えて試しても
>>85 が期待した結果が
得られるみたいだけど。
俺勘違いしてる?
>>131 多分ね、そのあたりの挙動って、コンパネの地域設定の指定とOSのバージョンに関わると思う。
依存するような暗黙変換をするならば、その辺りのことって国際化対応に書いてあるかな?
133 :
質問VS.NET :2005/08/22(月) 12:26:54
フォーム(Public Class WebForm1)にラベルがあります。 Public WithEvents Label1 As System.Web.UI.WebControls.Label 別モジュール(Module1)に関数(sub kan1)を作りました。その中で Dim refForm1 As New プロジェクト名.WebForm1 というインスタンスを作りました。 で、refForm1.Label1.Text = "1" とやると「オブジェクト参照がオブジェクトインスタンスに設定されていません」 と出ます。refForm1.Label1 ← ここでNothingになります。 なぜですか?
135 :
133 :2005/08/22(月) 12:58:07
失礼しますた。向こうで聞いてきます。
136 :
デフォルトの名無しさん :2005/08/22(月) 14:30:51
ExcelオブジェクトのGetPhoneticメソッドを使って 漢字のフリガナを取得してるのですが、 そのフリガナを元の文字単位で分割するにはどうすれば良いでしょうか? 例えば"質問者の心得"だと"シツモンシャノココロエ"を返しますが これを「シツ, モン, シャ, ノ, ココロ, エ」と分割したいのです。 1文字ずつGetPhoneticメソッドに掛けると、文として読んだ場合のフリガナが 候補の中に出ない物もあるので、1文字単位で変換して、 文で返したフリガナと一致させる方法は無理でした。 詳しい方、どうかお知恵を貸してください。
137 :
デフォルトの名無しさん :2005/08/22(月) 14:46:27
ListViewに関する質問です 環境はXP Pro SP2/VB6.0 SP6です MultiSelect(アイテムの複数選択)をTrueにした状態で アイテムが無い空白部分を始点にドラッグして、点線の枠で囲ってアイテムを囲んでマウスボタンを離すと 枠に囲まれていたアイテムと関係のないフォーカスの当っていたアイテムが選択されてしまいます これを、ドラッグで囲ったアイテムだけが選択されるようにするには、どうすれば良いのでしょうか? よろしくお願いします
138 :
137 :2005/08/22(月) 15:14:47
あれから調べていたら根本的な原因が別にあることが分かったので質問を変えます ListViewのアイテムが無い空白部分でクリック/ダブルクリックすると フォーカスのあるアイテムが選択されたり解除されたりするのですが 空白をダブルクリックされても、フォーカスの当ったアイテムが選択されないようにするには、どうすればよいでしょうか? よろしくお願いします
Thumbs.db を削除したいのだが、誰が方法を教えてくれまいか。 kill ステートメントだと、ファイルがあってもファイルが見つからないって言われてしまうぞ。 おかしいぞ。
141 :
139 :2005/08/22(月) 16:02:47
香具師
144 :
デフォルトの名無しさん :2005/08/23(火) 10:18:41
>>138 Common Control 5を使う・・・って言うんじゃだめか。だめだな。
VB6.0SP5です 2つのexe、[A.exe]と[B.exe]があって、AからBを起動させます。 ・Bが起動したときはAの画面は表示されたまましかし触れず ・Bを閉じたとき、Bで選択した値をAの画面に反映させる こういう動作を実現したいのですが、何かいい方法はありますでしょうか (exeをひとつのプロジェクトに纏めることは、都合上できません) 一番簡単なのは、B起動時にAの表示を諦めて非表示にして 値はtmpファイルでも作って受け渡す方法だと思いますが、 これは最終手段にしたいです 検索すると、CreateProcessやSetWindowLongを使った方法などが散見されましたが、 試してみるもいまいち理解がついていかず、まだ正常に動かせていません 良い参考になるページなどありましたら、紹介していただけませんでしょうか よろしくお願いします
>>145 DDE使うのが一番簡単だろ。
具体的な方法は自分で調べろ。
147 :
デフォルトの名無しさん :2005/08/23(火) 14:31:21
>>145 B起動中はA触れず。。。だけなら
"Windows Script Host Object Model"を参照設定して
WshShellクラスのRun()メソッドでできるけど、値の受け渡しはなあ。
BをActiveX EXEにするのがよいと思われ。同期しながら
データのやり取り自由自在。作り方は調べろ。
自分のレベルに合わせて作ることも大事だよ。 プロセス間の情報共有は色々あるけど、死に様を残すだけならファイルでよいと思うけどね。 AがBを起動する前に、遺書は削除。 Bは自分が死ぬときに遺書をしたためる。 AはBの終了待機をしていて、死亡を確認したら遺書を見る。 それほどおかしい処理じゃないよ。 終了待機はShellの戻り値を監視する方法のサンプルが死ぬほど落ちてるからそれを参照。
149 :
137 :2005/08/23(火) 16:24:47
>>144 バージョン古いのは望みどおりの挙動してたんですね
自分では思いもよらぬ解決法で目からウロコでした
現状、すでにサブクラス化してサブアイテム編集などをつけたりしてコードが満載なので
Common Control 5でも機能を満たせるか、コード書き換えてみないと分からないですけど
もしかすると、うまく行くかもしれないです
結果は後日報告します、ありがとうございました
150 :
145 :2005/08/23(火) 17:23:25
>>146 DDE
>>147 ActiveX EXE
DDEを調べていたら、OLEオートメーションという方法も出てきました
これからひととおり調べて試して、一番理想的なやり方を検証しようと思います
Web上にTipsも多そうなので、とても助かります
>>148 それが最終手段でした
今回、こういう機能の開発を初めて手掛けることになったので、
レベルアップも兼ねてやってみたいと思っています
ありがとうございました
プログラマー思考的には新しい技術の習得も重要だから勉強はいいと思う。 ただ、その渡す情報の量、重要度などは考えて使う技術を決めたほうが良いよ。 リアルタイム性不要であれば、わざわざプロセス間通信なんて不要には思える。 リスキーな割にはやりたいことは文字を数文字渡すだけってのでは。 あと、DDEは死に行く技術、ActiveXEXEはレジストリ登録が確か必要だったと思う。 その他、メモリーマップドファイルなど、共有メモリでのアクセスや、数値程度だったらSendMessageなどありますよ。
152 :
137 :2005/08/23(火) 20:04:14
先ほどCommon Control 5を教えてもらった者ですが また分からないことがあるので質問させてください 先ほどのクリックで選択されたり解除されたりする問題に関しては Common Control 5のListViewを使用することで解決したのですが 代わりに、それまで指定していた ListView の拡張スタイルのうちグリッドの表示が出来ません 拡張スタイルの1行選択は次のようなコードでセットできたのですが Call SendMessage(ListView1.hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT) グリッドも同じように LVS_EX_GRIDLINES = &H1 を使ってメッセージを投げてみたのですが、一向にグリッドが表示されません Common Control 5のListViewでグリッドを表示する方法をご教授ください よろしくお願いします
皆さん、力を貸してください。 今、Inetを使用したファイルのアップロードを作っているのですが 'ファイルのアップロード .Execute , "PUT c:\TEST\test.tif test.tif" Do While .StillExecuting = True DoEvents Loop .Execute , " SIZE test.tif" Do While .StillExecuting DoEvents Loop と、処理を流すとファイルサイズが正常に取得できません。 現状としては ・PUT等をせず、SIZEだけを実行した場合は正常に取得。 ・PUTに限らずCDでもDIRでも別の.Executeを実行した後は ファイルサイズが取得できない。 ・何回か実行していると取得できる。 ただし、その次からまたしばらく取得できず そのまま何回か実行していると取得できる(原因不明 やりたい事は、ファイルをアップロードし アップロードしたファイルのサイズとローカルファイルのサイズを比較して 正常チェックを行いたいのです。 どなたかお力添えの程、よろしくお願いします。
なんで無能な奴に限って口調が偉そうなんだろうね。
>>146-147 とかw
ここまでアレだと、もう怒りとか呆れよりもある種の微笑ましさを感じるよ。
ああ職場で窓際にされてストレスたまってるんだろうな、とか思ってw
ところで、
>>145 は
>exeをひとつのプロジェクトに纏めることは、都合上できません
これは単一の実行ファイルのからビューAとビューBを表示するという訳にはいかない、
という意味だろうけど、それはいったいどんな都合なんだろう。。
その方が気になる。これなら何もOSの仕組みに依存するような高度な操作は必要ないわけで。
というと、「質問者の目的に疑問を挿むな」という例の馬鹿が湧いてくること必定w
こういう馬鹿が、戦争目的を問わずに鬼畜米英の蛮勇に浮かれたり、
尊師の目的を問わずに地下鉄にサリンを撒いたり、大作様の推挙する
候補に投票したりするんだろう。
ツリービューについてふたつほど教えて欲しいことがあるのですが、 (1) 縦スクロールバーのみ表示させる (2) 横方向に表示しきれなかったアイテムをツールチップで表示しないようにする について、コンテナ化や別コントロールでの代用ではなく、 ツリービュー単体で出来る方法をご存じの方、教えてください。
VB6で作ったアプリのCommandButtonをクリックすると(アクティブになると) ボタンの内側に破線の枠が表示されますが、これを表示しないようにするにはどうすれば良いのですか? Tabキーでのコントロール移動には不可欠ですがTabStopはFalseにしてるし、 小さいボタンでコレが表示されると見栄えが悪いので。
>>158 コマンドクリックのイベント内で
Command1.Enabled = False
Command1.Enabled = True
を記述してはいかがでしょうか?
ただ、クリックしている最中は破線枠は表示されます。
別にいい方法があるかも。
160 :
158 :2005/08/24(水) 12:03:52
>>159 回答ありがとうございます。
しかし、ボタン1をクリックすると破線枠がボタン2に、ボタン2をクリックすると破線枠がボタン1に移動するだけでした。
逆にボタンがひとつの時は意味無しです。Falseで一端枠は消えますがTrueの瞬間に枠が戻ってくるので。
引き続き回答をお待ちしています。
上にもういっこボタン重ねて、visibleとenabledでなんとかならない?
162 :
158 :2005/08/24(水) 12:22:18
>>161 回答ありがとうございます。
その方法をヒントに、クリックイベントで下層のボタンにSetFocusすれば、
一応クリック後の枠は残らないようになりました。
アクティブなボタンに破線枠を表示しないようにすることは出来ないのかな?
>>162 「アクティブなボタンには破線枠を表示する」というのが
Windowsでのルールなので、標準のコントロールでは強制的に
そうなるように作ってあるのです。
ついでに「クリックしたらアクティブになる」というのも
ルールなので。
>>158 はToolbarのボタンみたいな、マウスでしか触れないボタンが
ほしいということ?TabStop=FalseだけどTabキーは利かせたい(クリック→Tabで次のボタンに行きたい)のか?
Toolbar風ボタンなら、DelphiにはSpeedButtonてのがあるけど、VBにはないね。
俺は昔、UserControlとDrawFrameControlでシコシコ自作したことがある。
164 :
デフォルトの名無しさん :2005/08/24(水) 15:22:29
>>152 うーん、そうでしょ。だから「だめだな」って逃げておいたんだがw
Common Control の5は、ComCtl32.DLLって共通のDLLのAPIを
コールしてるから、
>>137 で悩んだような変なバグは出ないし
XPの視覚スタイルにも対応させられる。
6はというと、全部独自で処理しているらしいので、ComCtl32の
バージョン違い地獄に引っかからない反面、今回のような
悲しい事態もあるという諸刃の剣。
5でのグリッド表示だけど、
>>152 の書き方がちょっと変。
Dim ExStyle As Long
ExStyle = SendMessage(ListView1.hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, ByVal 0) 'スタイル取得
ExStyle = ExStyle Or LVS_EX_GRIDLINES Or LVS_EX_FULLROWSELECT 'スタイル追加
Debug.Print SendMessage(ListView1.hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, ByVal ExStyle) 'スタイル更新
こんな風にかいてみ。1行選択も。うちではできたよ。
165 :
137 :2005/08/24(水) 19:53:56
>>164 >こんな風にかいてみ。1行選択も。うちではできたよ。
できました!おかげさまで希望通りの動作になりました
ありがとうございます
躓いてた原因は、スタイル取得のときの wParam、lParamの値で
どちらも LVS_EX_GRIDLINES Or LVS_EX_FULLROWSELECT を指定していたので
結局ゼロが帰ってきておかしなことになってたみたいです
イメージリストもVer5でないと連動して使えないようだったので、
この際、ランタイム減らす意味も込めてTreeViewなども含めてすべてVer5にしました
大量のデータ表示が、僅かですけど軽くなったような気がします
何度も助けていただき、本当にありがとうございました
166 :
デフォルトの名無しさん :2005/08/24(水) 23:46:27
MSDNのVB6用の関数のヘルプってどこですか? 探したのですが、見つからないです・・Orz
168 :
デフォルトの名無しさん :2005/08/25(木) 00:07:11
発見しました!! でも印刷に関する物が見当たらなかったですO..... rz
>>168 MSDN ライブラリ Visual Studio 6.0
+Visual Basic ドキュメント
+Visual Basic の使用方法
+プログラミング ガイド
+Visual Basic を使ってできること
+テキストおよびグラフィックの操作
+印刷
これのことかね?
170 :
デフォルトの名無しさん :2005/08/25(木) 14:32:49
>>136 そりゃ無理でしょ。熟語になったら単漢字としての読み方を
しない言葉はたくさんあるし。
たとえば「十八番」を「おはこ」と読ませているときは
どうするかとか、「やし」なんて漢字で書いたら「香具師」
なのに1文字ずつどう対応させるんだ、とか。
つまり「香具師の十八番は百舌鳥の真似」なんてのになると、
(こんな例は極端ですが)熟語、単文節以上には分解
できないわけです。
原理的に無理なので、仕組み自体が搭載されていないと思われ。
171 :
デフォルトの名無しさん :2005/08/25(木) 17:28:31
VBのソースコード(フォームとかは除く)を、 UNIXで使えるソースコード(C++など)に 変換するようなツールは売られてるでしょうか?
>>171 中途半端でいいならREALBasicというものがある
VBのソースをWindowsでもMACでもLinuxでも動かせる優れものだぞう
使い物にはならないが。
173 :
171 :2005/08/25(木) 18:10:33
>>172 ありがとうございます。
ぐぐったら出てきましたので試してみます。
174 :
153 :2005/08/25(木) 19:03:53
解決しました。 いた汚し失礼><
175 :
デフォルトの名無しさん :2005/08/26(金) 00:37:16
VBについてないツール(SPYとかDDESPYとか)使いたいときは どうしたらいいですか?
>>175 1.Googleで代替のツールを探してくる
2.ヨドバシカメラでVisual Studioを眺めていると紳士が現れて買ってくれる
3.どうにもならない。現実は非常である
>>175 フリーのSPYツール使えばいいじゃん。
"1+2*3"という文字列を計算して7が返ってくるような 関数のサンプルはありませんか?
>>179 宿題は7月中に終わらせておけよ。
それに宿題は宿題スレへ。
text1.enabled = trueにしたときに 色がグレーになるのだが、 他の色にした場合どうすればいい?
>>181 です
trueじゃなくてfalseだ・・・
間違えた
>>181 フレームにテキストボックス置いてフレームのEnabled=False
184 :
デフォルトの名無しさん :2005/08/26(金) 16:40:29
SetSysColors APIをCOLOR_GRAYTEXTで。 ってことを言いたいんじゃないんだよな。言ってみただけだよ。
185 :
デフォルトの名無しさん :2005/08/26(金) 18:10:35
ddespyと同等の機能のあるフリーソフト教えてください。
187 :
179 :2005/08/26(金) 18:24:16
さすがはVBスレ わかる人がいないとは
>179 仕方ないなぁ。今回だけだよ? Public Function GetAnswer() As Long GetAnswer = 1 + 2 * 3 End Function
文字列式からの整数の四則演算なんて、 厨房が練習で作るレベルの内容だろ。 サンプルなんて必要になるレベルじゃない。
190 :
179 :2005/08/26(金) 19:56:45
RPN
193 :
179 :2005/08/26(金) 20:02:28
逆ポーランドとかいうのが必要なとこまではわかったんだけど・・・
195 :
179 :2005/08/26(金) 20:13:02
Function GetAnswer(ByVal strQuestion As String) As Long Dim Ope As Variant, foo() As String, bThr As Boolean, bar As Long Dim i As Long, j As Long For Each Ope In Array("+", "-", "*", "/") strQuestion = Replace(strQuestion, Ope, " " & Ope & " ") Next Ope foo = Split(strQuestion) For i = 1 To UBound(foo) If bThr Then bThr = False ElseIf foo(i) = "*" Then foo(j) = foo(j) * foo(i + 1): bThr = True ElseIf foo(i) = "/" Then foo(j) = foo(j) / foo(i + 1): bThr = True Else j = j + 1: foo(j) = foo(i) End If Next i bar = foo(0) For i = 1 To j Select Case foo(i) Case "+": bar = bar + foo(i + 1) Case "-": bar = bar - foo(i + 1) End Select Next i GetAnswer = bar End Function この夏からVB始めたリアル厨房ですが、練習がてら文字列操作のみで算出してみました 勉強になるので批判も歓迎、やっぱ数値ではなく数字を演算する時って Clngとかで数値に直してから演算した方がいいんですかね? +以外は数字同士でも勝手に数値として演算してくれるみたいなんですが
Dim sc Set sc = CreateObject("ScriptControl") sc.Language = "VBScript" MsgBox sc.Eval("1 + 2 * 3")
すいません。前スレでも質問したのですが、 ピクチャーボックス上にテキストボックス・リッチテキストボックスを置いて、 文字だけを表示する方法が分かりません。 前スレでは、「ある」とだけお答えいただいたので、色々試したのですが 上手くいきません(ToT どのような方法があるのでしょうか?
>>198 pictureboxに直接じゃだめなの?
>>199-
>>200 返事、ありがとうございます。
WORDのシェィプのテキストボックスみたいなかんじで
ある程度、簡単な編集をさせたいと思っていたので、
TextBoxやRichTextBoxを考えていたのですが、ラベルも検討してみます。
>>196 >Clngとかで数値に直してから演算した方がいいんですかね?
適切な型に変換して演算するほうがお行儀は良いと思う。
ざっくり見ただけだが、考え方はあってると思う。
でも、"(1+2)*3"とか対応していないよね?
あとスペースで置き換えてるみたいだけど、
初めからスペースが混じってたらどうなる?
たぶん、実行時エラーかなんか出るようなきがする。
実は大丈夫なのかな。そうだったらごめん。
(´-`).。oO( 179の何処に( )があるんだろう… ) (´-`).。oO( 179の何処にスペースがあるんだろう… )
歩き方教えるのはいいとしても、行き先指示するのは余計なお世話なキガス。 機能不足な箇所や実装は自分でなんとかするでしょ。
まあ別にいいけど。 目標が不透明なまま周りがあーだこーだ騒いでも、あんたら何話してるの?ってなるだけだと思ったんだが。
質問者の知りたかったことは解決しているのだから、別に それをネタにして話が広がって何の問題もないと思います けど。
frameの上にtextをコントロール配列でたくさん配置した後に frameごと別の場所にコピペしたらコントロール配列の並び方がバラバラ・・・ せっかく配列が1234...って綺麗に上から並んでいたのにコピペしたら下からコントロール配列ができちゃうよ 手で直せばいいんだけど、めんどくさい('A`) 何とかならないんでしょうか?
アドインでそういうのあったような気がするけど VB6のデフォルトの機能じゃどうしようもないでしょ
212 :
デフォルトの名無しさん :2005/08/29(月) 07:49:50
frmをメモ帳で開いてコピペで修正する手もありかな。
>>211-212 ありがと
どうしようもないのね・・・(´・ω・`)ショボーン
メモ帳見てみたけどこれもめんどくさそうだヽ(`Д´)ノウワァァァン
変数を演算子として利用することって方法ってありますか?
質問は日本語で
変数を演算子として利用する方法ってありますか?
b = a plus c ってことかな?
218 :
216 :2005/08/29(月) 15:10:21
それはできないねー
orz
テキストボックスが複数あるフォームで、 それぞれに対する各イベント(GotFocusやChange、KeyDown等)の処理の 記述内容がほぼ重複する場合は、テキストボックスを配列化するのが一般的なんでしょうか? (例え、各テキストボックスに入力されるテキストの種類がコード・名前など様々だとしても) コーディングルールみたいな、暗黙の規定みたいなものってあります?
>>221 .netならテキストボックスを継承してコンポーネントが
カンタンに作れるんだけどねー
223 :
デフォルトの名無しさん :2005/08/29(月) 17:04:26
>>221 配列化しないならこんなのは?
・クラスモジュールを1個用意する。
・Private WithEvents でTextBox型変数を作る。
・その変数へアクセスするプロパティ プロシージャを作る。
・このクラスでイベントを拾えるようになるから、イベントプロシージャに何か書く。
たとえばGotFocus()にSelLengthを使った全選択処理を書く。
・Form_Loadでこのクラスのインスタンスをテキストボックスの数だけ作って、それぞれテキストボックスを割り当てる。
・割り当てられたテキストボックスは、何も書かなくても全選択になる。
・何か追加の情報が必要なら、クラスのプロパティを増やす。
224 :
221 :2005/08/29(月) 17:28:04
Class使ったことなくて、全然わかりませんorz 精進します・・・
226 :
221 :2005/08/30(火) 14:59:07
>>225 ありがとうです
なんとかクラス作って動かすことができました
なんか全然理解度足りないけど、後学のためにもっと使ってみようと思います
227 :
デフォルトの名無しさん :2005/08/30(火) 22:10:51
質問です。 VBで作ったプログラムのなかの変数の値を ブラウザのフォームに送りたいのですが、 どのようにしたら可能なのでしょうか? 例としては、VBで作ったソフトにテキストを入力すると、 2chの書き込みフォームの中にそのテキストが入力されるとか、 検索ワードをいれてプログラムを実行したら、 googleの検索ワードを入力するフォームに、 その言葉が入力された状態になるというように、 VBアプリからブラウザに値を渡したいのです。
228 :
デフォルトの名無しさん :2005/08/31(水) 00:28:20
INETコントロールでFTP通信をされたことがある方に質問があります。
現在、INETコントロールを使用してFTPによりサーバーからファイル
を取得するプログラムを作成しています。
当初開発していたPCで正常にファイルが取得できるのを確認後、実運用する他の
PCにて動作確認をとったところ、Executeメソッドの実行時にResponseCode=12
163(ネットワークから切断されています。)といったエラーが発生していまし
た。
いろいろと試行したところ、さっきまでエクスプローのアドレスバーに"
ftp:/ /xxx.xxx.xxx.xxx/"と入力すると、サーバーの
フォルダの内容が見えていたのが、見えないのに気がつき、入力内容を消した
後に再度"
ftp://xxx.xxx.xxx.xxx/ "と入力したところフォルダの内容が見える
ようになりました。
この状態でプログラムをランさせると、今度はエラーは発生せずにに正常動作
しました。
VBというよりネットワークにつての質問になるかもしれませんが、この現象について
説明できる方いらっしゃいましたら教えて下さい。よろしくお願いします。
開発環境はWinXP(SP2)+VB6(SP5)です。
229 :
227 :2005/08/31(水) 00:56:53
すいません。自己解決しました。
>>227 自己解決したっていう報告だけじゃなくて、
どういう方法で解決したのか、情報提供もすると喜ばれるよ。
上の
>>221 です、もうひとつお願いします
テキストボックス4つ
その他コントロールいくつか
こんなフォームがあります
テキストボックスは、4つでひとつのコードとして扱います
(01020304というコードを、[01][02][03][04]というように入力する、部分空白もあり得る)
コードを入力して、他のコントロールにフォーカスが移ったらコードチェックをします
しかし、4つのテキストボックスのLostFocusイベントでそれをやると、
テキストボックスからテキストボックスにフォーカスが移ったときにも、
いちいちコードチェックが動いてしまいます
あくまで、4つのテキストボックスを入力し終わった時点で、コードチェックをしたいんです
他のコントロールのGotFocusで、あるいは上で教えていただいたClassで、という以外に、
何か良い方法はないものでしょうか
問題ねえだろ
236 :
232 :2005/08/31(水) 09:17:27
どういうやり方が普通なんでしょか・・・(´・ω:;.:...
237 :
デフォルトの名無しさん :2005/08/31(水) 09:38:24
>>232 ユーザーコントロール作ってExitFocusとかValidateとか
238 :
232 :2005/08/31(水) 10:54:37
>>237 はじめて作ってみました
こんなことができるんですね
ちょっと勉強してみます
ありがとう〜
文字列を数値データに変換って出来ませんか? (例)AAA111とかを数値に
>>239 その文字をどういう数値にしたいの?
16進数の「AAA111」を10進数に直せばいいの?
それとも「111」だけを取り出したいの?
後者の場合でAAA111BBB222のときは
「111」「222」「111222」のどれを返せばいいの?
数字を含む文字列から数値を返すのはわけないが
条件はきちんと指定してくれないと何も教えられない。
いや、きっと連想配列を実装したいんだろう。 それなら素直にCollectionを使えと。
VB6.0でOracleのOO4Oを使用しています。 存在しないフィールドを指定したかどうかチェックする方法は無いでしょうか。
For i = 0 to rs.fields.count - 1 exl.worksheets(1).cells(k, i + 1).value = rs(i).name Next
244 :
デフォルトの名無しさん :2005/08/31(水) 19:58:29
>>242 Oracleのエラーコード拾ってくるのは?
>>235 マルチポストが迷惑な理由と全く同じ理由でお前の書き込みも迷惑。
まぁ俺のもそうだが。
ある計算式 (120*(A-30)/5)+15 をテキストファイルから読み込んで Aを代入した結果を求めたいのですが、読み込んだ計算式を簡単に 解析する方法とかないでしょうか?
これ、どっかの中学校の宿題? いい加減飽きたよ。
248 :
?? :2005/09/01(木) 02:32:10
>>227 で、どうやったの?
聞きたい
俺も、その手のアプリを作りたいと思っています。
簡単じゃん これくらい自分で作れないならおとなしくフリーの使ってろ
250 :
248 :2005/09/01(木) 09:30:54
>>249 簡単でも、やり方分からないから聞いてんだよ
>>250 おちつけ、つられるなw
とりあえずヒントを出そう
http://www.ken3.org/vba/backno/vba156.html これで起動中のIEが取れるよ
あとはウォッチで眺めてみれば分かるっしょ
それと下の2つを参照設定に入れとくと、結構幸せになれる気がするな
Microsoft Internet Controls
Microsoft HTML Object Library
ただ、この方法には制限があって、フレームを使ったページで
フレーム内のドメインがトップフレームと違う場合は、
フレーム内のドキュメントには一切アクセスできないよ
Google検索だけなら、単純にURL変数でいいと思うけどね
>>246 逆ボーランドに変換してから計算する
変換時、”(”は無条件で積み上げて、”)”が来たら”(”まで追い出して( )は相殺
ScriptControl使えば3行で終わるのに。
>>253 ihpleD とか?
>>246 Microsoft Script Controlを参照すればEvalが使えるよ。
258 :
248 :2005/09/01(木) 11:44:19
>>252 ありがとうございます
とても参考になりました。
しかし・・・
分からない点が出てきました。
YAHOOの自動ログインをVB6で作成しようと思っています。
---------------サンプルソース---------------
Sub ie_test_click()
Dim objIE As Object 'IEオブジェクト参照用
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "
http://mail.yahoo.co.jp/ "
Do While objIE.Busy = True
DoEvents
Loop
objIE.document.all.userid.Value = "***" 'ユーザー名
objIE.document.all.pass.Value = "***" 'パスワード
objIE.document.all..save.Click 'クリックメソッドを実行
End Sub
---------------------------------------------------------------
クリックメソッドの部分ですが、
YAHOOログインページのログインボタン部分のソースは、
<input name=".save" type="submit" value="ログイン" class=loginsubbutton>
になっています・・・
VBのコードで
objIE.document.all..save.Click
と指定すると当然エラーが出ます。
どのようにすればコマンドボタンを自動で押せるのでしょうか?
すいませんがご教授お願いいたします。
VBでエクセルのシートが存在するかどうかチェックする方法ってないですか? 無かったらメッセージを出したいです。
>>258 名前が.saveの場合
Set pHoge = objIE.document.getElementsByName(".save")
IDが.saveの場合
Set pHoge = objIE.document.All(".save")
名前もIDもないINPUTタグの場合
Set pHoge = objIE.document.getElementsByTagName("INPUT")
ただし、取得条件に合致するもの(名前/ID/タグ)が複数あった場合は
配列になって返ってくるからLengthを見たほうがいいかもしれんよと
261 :
248 :2005/09/01(木) 12:08:40
>>260 ありがとうございます。
コンパイルエラーは出なくなりました。
Set pHoge = objIE.document.getElementsByName(".save")
をどのように使用して、コマンドボタンをクリックするのでしょうか?
pHogeには[object]が返ってきています。
質問ばかりで申し訳ございません。
もうほとんど「教えてください」じゃなくて「おまえら俺のためにコード書け」って感じだな
>>261 さっき言ったようにキチンと参照設定して
Dim pHoge As MSHTML.HTMLInputButtonElement
と宣言した変数にぶち込んでみろ
インテリセンスが効くからアホでも分かる
265 :
デフォルトの名無しさん :2005/09/01(木) 21:20:46
>>259 ある名前のワークシートがワークブックの中にあるかどうか
調べたいってことか?
じゃあ For か For Each でWorkBook.WorkSheetsを順番に
調べるか、WorkSheets("シートの名前")がエラーになるかどうか
調べる。
ファイルの話だったらDir$とかいくらでもあるべ。
267 :
デフォルトの名無しさん :2005/09/02(金) 10:17:09
初めまして、VB初心者ですが質問させてください。 フォントダイアログ?のようなものを自力で作らなければならなくなったのですが、 現在選択されているフォントで有効なサイズを全て取得するには どの様にすればよろしいでしょうか? 現在の文字サイズは取得できるのですが、わかりませんでした。 教えてください。
宿題なら自分でやってください
269 :
デフォルトの名無しさん :2005/09/03(土) 13:45:37
だけどたしかにどうやるんだ? フォントサイズのコンボボックスの中身は選択したフォントに よって変わるということは、なにか判断する基準があるんだよな。 たとえ、特定の名前に対してハードコーディングしているんだとしても。 だいたいのTrueTypeやOpenTypeは同じ候補が出てくるけど、 たとえばFixedSYSは14だけ、Courierは10,12,15だけとか、 ビットマップフォントは候補の数が少ないようだ。
秀○なんかではプロパティで文字の設定ができるから 方法はあるんでしょうけどね。
Open "c:\damepo.txt" For Output As #1 Write #1, "damepo" Close #1 これを行うとtxtに "damepo"のように""に囲まれたものが出力されてしまいます ""をなくす方法ってないんでしょうか?
274 :
271 :2005/09/03(土) 18:09:06
275 :
デフォルトの名無しさん :2005/09/04(日) 11:14:39
MSCOMMがきちんと受信してくれません。 何かいい方法は無いでしょうか? ロジック Private Sub MSComm1_OnComm() If MSComm1.CommEvent = 2 Then strMoji = Form2.MSComm1.Input Form1.txtTab1Com1.Text = Form1.txtTab1Com1.Text + strMoji strMojiretu = strMojiretu + strMoji Else MsgBox MSComm1.CommEvent End If 〜 受信したデータがvbCrなら、DBに出力する処理 〜 (MSComm1のパラメータInBufferSize:1024、Inputlen:1)の場合 4823バイトまでは、きちんと受信してくれるのですが、 それから入ってくるデータの文字が、 送信元とは、違っています。 (MSComm1のパラメータInBufferSize:1024、Inputlen:0)の場合 9534バイトまでは、きちんとテキストに表示されるのですが、 それからはデータがテキストに表示されません。 MsgBox MSComm1.CommEventも実行されません。 セットするtxtTab1Com1のマックスレングスは0です。
276 :
275 :2005/09/04(日) 11:15:55
また、受信テスト用に、送信するプログラムもVBで作成しています。 (MSComm1のパラメータoutBufferSize:1024、Inputlen:0)、 (MSComm1のパラメータoutBufferSize:1024、Inputlen:1) ともに試しましたが、うまくいきませんでした。 Settingsは送受信ともに、19200,n,8,1です。 ネットを調べて、OnComm()時に、 MSComm1.RThreshold = 0 を実行し、終了したら、 MSComm1.RThreshold = 1 などをしたのですが駄目でした。
>>275 >MSCOMMがきちんと受信してくれません。
それは君の判断でしょ。起こっている何らかの事実を観察して、
「君自身が」そのように判断したわけだ。
人に質問してるんだから、「君の判断」じゃなく、
君をそのように判断せしめた「事実」を端的に書かなきゃ。
なんで読む人間の立場にたって文章かけないの?
それじゃ「サポセン」に出てくるアホなPCユーザーと一緒だよ。
動きません、どうしてでしょう?
―― そんなこと知るかよボケ
278 :
275 :2005/09/04(日) 16:09:14
レスありがとうございます。 書き込みに不備があり申し訳ありません。 きちんと、受信してくれないと判断した理由は、 (MSComm1のパラメータInBufferSize:1024、Inputlen:1)の場合 4823バイトまでは、 きちんと受信したデータがテキストに表示されるのですが、 そこから10文字程度は、送信元のプログラムで入力したテキストとは 違うデータは表示され、テキスト表示はそれで止まりました。 strMoji = MScomm1.inputの後、 MSComm1.InBufferCount = 0を実行した場合は 最初から、送信元とは違うデータが表示されました。(それはそうですよね) (MSComm1のパラメータInBufferSize:1024、Inputlen:0)の場合 9534バイトまでは、きちんとテキストに表示されるのですが、 それからはデータがテキストに表示されません。 MsgBox MSComm1.CommEventも実行されません。 上記は、 strMoji = MSComm1.Inputの後に、 MSComm1.InBufferCount = 0を実行した場合です。 strMoji = Form2.MSComm1.Inputの後に、 MSComm1.InBufferCount = 0 を実行しない場合は、 MSComm1.CommEventに、comEventRxOverが帰ってきて、 受信バッファ オーバーフローが発生します。 InBufferSizeを2048にしたのですが、 結果は同じでオーバーフローしました。
280 :
275 :2005/09/04(日) 16:21:34
>>279 >>277 さんがこれからレスをくれなかったとしても、
>>277 さんのレスに感謝します。
私の書き込みに不備があったのも事実ですし。
今回の書き込みにもあるかもしれませんが、
どうぞ、よろしくお願いします。
>>278 それだけの情報じゃ言えることは限られていると思う。
送信側、あるいは受信処理をしているPCのハードウェアに問題がないなら、
OnCommイベントの処理がなにか間違っているのだろう、としかいえない。
OnCommの処理を全部晒すわけにはいかないんですか?
それが一番話が早いと思いますが。
とりあえず現段階で他にいえることは、
● MSComm1.InBufferCount = 0みたいな「おまじない」は不要。
● Inputlen = 1はナンセンスだと思う。
● 特に理由がないなら、OnCommで受信バッファを読むのではなく、タイマを使って
バッファをポーリングするようにした方が安全かつ効率的。(当然RThreshold = 0)
● 4823バイト、9534バイトといった数字には再現性はあるの?
● 受信バッファの文字列の長さが常に1、なんて前提でコードかいてませんか?
● 送信側で2バイト文字を送信しているとか、InputModeがバイナリモードになっている
なんてオチはないですよね?
283 :
275 :2005/09/04(日) 18:42:32
>>282 レスありがとうございます。
現在、晒す用に、プログラムの無駄なコメントを編集中です。
>● MSComm1.InBufferCount = 0みたいな「おまじない」は不要。
そうなのですね。
>● Inputlen = 1はナンセンスだと思う。
なるほど。
>● 特に理由がないなら、OnCommで受信バッファを読むのではなく、タイマを使って
>バッファをポーリングするようにした方が安全かつ効率的。(当然RThreshold = 0)
タイマを使った処理は思いつきませんでした。
ネットで、調べて見ようと思います。
>● 4823バイト、9534バイトといった数字には再現性はあるの?
昨日と文字数が違うので、再現性はありません。
>● 受信バッファの文字列の長さが常に1、なんて前提でコードかいてませんか?
Inputlenが、0のときは、
strMojibufr = Form2.MSComm1.Input
For i = 1 To Len(strMojibufr)
strMoji = Mid(strMojibufr, i, 1)
として、この後、strMojiをテキストに追加しています。
>● 送信側で2バイト文字を送信しているとか、InputModeがバイナリモードになっている
>なんてオチはないですよね?
調べましたが無いです。
284 :
275 :2005/09/04(日) 18:54:32
Private Sub MSComm1_OnComm() On Error GoTo ERRSEQ Dim t() As Byte Dim strMoji As String Dim Buffer As String Dim strMojibufr As String Dim i As Integer Dim EventNo As Integer L_intTab1Recv = 1 If L_intTab1Recfurstf = 1 Then 'レコード最初フラグ Form1.lblTab1Recp.Caption = "受信中" '受信中表示項目 Form1.lblTab1Recp.Refresh L_intTab1commedmsgf = 1 '受信終了メッセージ出力フラグ Form1.btnTab1Recved.Enabled = False '受信終了ボタン Form1.btnTab1Recvsp.Enabled = True '受信停止ボタン L_intTab1Recfurstf = 0 End If strMojibufr = Form2.MSComm1.Input MSComm1.InBufferCount = 0 For i = 1 To Len(strMojibufr) strMoji = Mid(strMojibufr, i, 1) Form1.txtTab1Com1.Text = Form1.txtTab1Com1.Text + strMoji
285 :
275 :2005/09/04(日) 18:55:21
Select Case MSComm1.CommEvent Case comEvReceive Case comEvSend Case comEvCTS Case comEvDSR Case comEvCD Case comEvRing Case comEvEOF '(18)他の通信イベントでは何もしない Case comEventBreak MsgBox "中断信号を受信", vbCritical 〜 その他のエラーチェック続く 〜 Case Else MsgBox "その他の通信エラー", vbCritical End Select If strMoji <> vbCr And _ strMoji <> vbLf Then L_strTab1Rec1 = L_strTab1Rec1 + strMoji '出力レコードをセット End If 'シリアルナンバーチェック 〜 読み込んだデータの1つめの項目のシリアルナンバーチェック 通常の処理なので省きます。 〜
286 :
275 :2005/09/04(日) 18:56:31
If strMoji = vbCr Or _ strMoji = vbLf Then If L_strTab1Rec1 <> "" And _ L_strTab1Rec1 <> " " Then L_strTab1Itemarray = Split(L_strTab1Rec1, ",") RESPONSE = tab1Editrec(1) '取得したデータを出力 If RESPONSE = False Then If L_bolbInTran = True Then 'トランザクション開始フラグ Call Tab1Recvend objOraSes.Rollback L_bolbInTran = False Form1.SSTab1.TabEnabled(1) = True Form1.SSTab1.TabEnabled(2) = True End If End If End If L_strTab1Rec1 = "" L_intTab1Serialckf1 = 1 Form1.txtTab1Com1.SelStart = Len(Form1.txtTab1Com1.Text) + 1 End If Print #L_intTab1FileNum1, strMoji; Form1.txtTab1Com1.SelStart = Len(Form1.txtTab1Com1.Text) + 1 'テキストの一番下にカーソルセット Form1.txtTab1Com1.Refresh L_intTab1commendf = 1 '受信終了判定フラグ Next i Exit Sub ERRSEQ: 省略します。 End Sub
なんでタチの悪い回答者しかいないの? いつものこと?
288 :
275 :2005/09/04(日) 19:00:25
処理の概要は、CSV形式で、データを受信し、ワーク文字列に溜め込ます。 受信したデータに、vbCrまたは、vbLfが出てきた場合は、 溜め込んだ、ワーク文字列領域を、配列にセットし、 その配列を使用してDBに出力する処理です。
289 :
デフォルトの名無しさん :2005/09/04(日) 19:15:43
この手のスレって、趣味の自主サポセンみたいなもんなんじゃないの?
290 :
275 :2005/09/04(日) 19:51:46
伝送速度 9600 InBufferSize 1024 timer1.Interval 1 4824文字 伝送速度 19200 InBufferSize 2048 timer1.Interval 10 4992文字 伝送速度 19200 InBufferSize 1024 timer1.Interval 10 6336文字 伝送速度 19200 InBufferSize 1024 timer1.Interval 1 7296文字 タイマーオブジェクトを使用して、設定を変えて処理しました。 タイマーイベントが動くごとに、Call MSComm1_OnCommを実行しています。 ですが、テキストに表示される文字が途中で止まってしまいます。 また、受信できる文字数に再現性はありません。 If MSComm1.CommEvent <> comEvReceive Then Exit Sub End If を入れると、送信元のデータを1文字からきちんと取得してくれないので、 コメントにしました。 再現性が無いため、何かメモリ的な問題なのかとも思うのですが。
>>275 ネタじゃなくて本気で困ってるんですよねえ?
だったらMsCommのせいにする前に、一度冒頭のOn Error GoTo を取って
実行してみたらどう?
よほどの馬鹿でなければそれで原因がわかると思うよ。
逆にいえば、それでわからなければプログラミングの適性なさ過ぎると思うわ、悪いけど。
余計なお世話かもしれないけど、物事ちゃんと理解してプログラム書いたほうが良いよ。
理解してないでしょ?
MsCommの各プロパティとかイベントの意味を。
292 :
デフォルトの名無しさん :2005/09/04(日) 20:14:30
実行したときにform1じゃなくて、 form2をまず表字させるにはどうすればいい?
293 :
275 :2005/09/04(日) 20:25:43
>>291 On Error GoTo
のとび先で、メッセージボックスを表示しており、
メッセージボックスが表示されないため、
特に、On Error GoToをコメントにしてテストはしてませんでした。
コメントにしましたが、
テキストボックスへの表示が途中で止まることに変化は無く、
エラーメッセージ等も表示されません。
もう少し自力で調べてみようと思います。
>>292 プロジェクト プロパティにスタートアップの設定がある。
既に書かれてるが、シリアル通信をそもそも知らず、しかもラップされたコントロールも理解せずじゃ、何作るんだ?状態だろ。 まあ、シリアルの場合可能ならばモニタリングツールをPCと装置の間に挟んで見るのが一番だけどね。 とりあえず、プログラムが悪いのか他が悪いのかは切り分けがつく。 で、プログラムが怪しいなら、シリアルコマンドエクスプローラーみたいなツールで、電文見るしかないワナ。
>>295 お前に何の関係があるのかが全く読み取れん。
297 :
275 :2005/09/05(月) 11:51:07
>>295 どもどもです。
なんか、口が悪いながらも、
適切なアドバイスありがとうございます。
このスレは、そんな人が多くてなかなかいいですね。
とりあえず、送信側が悪いのか、受信側が悪いのか
送信したデータと、受信したデータを
テキストファイルに出力して確認してみようと
思います。
>>297 いや、シリアル通信の場合、そのログを通信の何処の部分で誰が採取するかが問題であって。
自分のバグ疑惑プログラムじゃない、別のツールなどで採取しないと客観性がないよ。
299 :
275 :2005/09/05(月) 12:30:56
>>298 なるほど。
ツールをVECTORで探してみようと思います。
ありがとうございます。
>>297 一気に目的のプログラムを仕上げたい気持ちはよくわかるが(俺もそうだから)、
モノを作るときの定石として、とりあえず簡単なコードを書いて
MSCommに対する理解を確認した方がいいよ。
少なくとも君の場合、一気に目的のものを仕上げるだけのスキルはないと思う。
そんなことやってると遠からずモティベーション無くすよ。
使えるPCが複数あるなら、とりあえずVBtermをもっと単純にしたようなプログラムを
書いて2台のPCに入れて、お互いに送受信がうまくいくか確認することから始めたら?
この滑稽な一連の自演大会はいつ終わりますか?
303 :
275 :2005/09/05(月) 13:03:10
>>300 確かにそうですね。ちょっと疲れてきましたorz
PCは2台あるので、一方のPCで送信して、
もう一方のPCで受信したのをテキストボックスに表示するだけのところから
試してみようと思います。
ネットからサンプルプログラムをダウンロードして
実行するのですが、データが大量になると、
テキスト表示すらもうまくいかないので。
ありがとうございます。
304 :
300 :2005/09/05(月) 13:09:17
言葉遣いが悪すぎたので再投稿します。申し訳ありませんでした。
>>297 一気に目的のプログラムを仕上げたい気持ちはよく分かりますが(私もそうですから)、
モノを作るときの定石として、とりあえず簡単なコードを書いて
MSCommに対する理解を確認してみてはいかがでしょうか。
私は一気に目的のものを仕上げるだけのスキルがないのに
そんなことやったために、モチベーションを無くしてしまいました。
使えるPCが複数あるのでしたら、とりあえずVBtermをもっと単純にしたようなプログラムを
書いて2台のPCに入れて、お互いに送受信がうまくいくか確認することから始められては
いかがでしょうか。もっとも私のスキルでは試すことすらできませんが・・・
>>304 ほぼ同じ(一部違うけどw)内容でもこれなら何の不快感も
ないのにな。
>>300 みたいにわざわざ不快感を織り交ぜる
理由ってなんかあるのかね。
会社での鬱憤を晴らすとかいうありきたりの理由以外で。
でも
>>300 ってそんなにきつい書き込みじゃないような・・・。
ホビーPGさんならゴメンナサイだけど、仕事でやってる人に対してなら
>>300 程度は言っても普通に思える。
それで飯食ってるんだから、少しは勉強しろ!って。
307 :
275 :2005/09/05(月) 13:55:34
全然悪意は感じませんでしたよ。 私が鈍いだけかも。 現在モニタリングソフトを落としてます。
>>307 落してるとのことですが、お勧めはシリアルコマンドエクスプローラーかな?
まあ、気合があればWindows添付のハイパーターミナルでもいけますけど。
シリアルに限らず、通信アプリの場合は原因の切り分けの為に、その通信の仕様などの知識は必須ですよ。
論理的に考えて何処が怪しいっていう思考が出来ないじゃないですか、知識がないと。(まあ通信に限りませんが)
309 :
275 :2005/09/05(月) 14:28:03
>>308 ありがとうございます。
シリアルコマンドエクスプローラーを使用しようと思います。
>シリアルに限らず、通信アプリの場合は原因の切り分けの為に、
>その通信の仕様などの知識は必須ですよ。
知識は無いのですが、とりあえずできることだけはやろうと思います
(現状をできるだけ把握する等)
現状を把握しないことには、
知識のある人に質問することもできないので。
ありがとうございました。
VB6で、refreshかけるとwindows上のプロセスが増え続けます。 原因は何でしょうか。 ちなみにexe終了すれば増え続けたプロセスは一気に開放されます。 - 環境 - w2ksp4 vb6sp6 DB:PostgreSQL8.0.3 VB歴3週間 Private Sub Command1_Click() Adodc1.Refresh ←このタイミングで増える。 End Sub Private Sub Form_Load() Adodc1.ConnectionString = _ "Provider=PostgreSQL.1;Password=postgres;User ID=postgres;" & _ "Data Source=localhost;Location=DB_name" & _ Adodc1.RecordSource = "table_name" End Sub Private Sub Form_Unload(Cancel As Integer) Unload Me End Sub
>>310 やってみたけど俺のところでは増えなかった。
DB(ODBCドライバ)が違うせいかな。
- 環境 -
w2ksp4
vb6sp6
DB:SQL Server 2000 Personal Edition
余談だけど、PostgreSQLを使ってる理由は何?
「無料だから」位の理由ならMSDE2000を使った方がいいと思うよ。
>>311 p
それを聞いてあげないと出てこないってのが痛いね。
何のプロセスが増えるかも不明だし。
>>312 >「無料だから」位の理由ならMSDE2000を使った方がいいと思うよ。
MSDE2000はいくらですか?
全くの推測で書くが・・・。 ぽすぐれってLinuxベースだから、スレッドじゃなく子プロセスで多分処理しますよね。 だから、接続なりしてそれをきちんと片さないでさらに接続した場合、そのプロセスは増え続けると思う。 (まあスレッドが見えずに増えるのも実害上は同じだがw)
316 :
310 :2005/09/05(月) 16:31:03
>>311 何?とはどういうことでしょう・・・orz
Datagridに表示させようかと思ってます。
ということでしょうか。
>>312 postgreSQL使ってる理由は無料というのもあるし
せっかくWindowsで使えるようになったから
そして、まわりにPostgreSQLの本が何冊かあったから
です。
増えるプロセスは
postgres.exe です。
ちなみに、練習中に気づいて気になっているだけで
実際の開発を行っているわけではありません。
ただ、原因がはっきりしないと気分が悪い、ということです。
糞レス読まされるこっちのほうが気分悪いわ!
見なきゃいいじゃん
>>311 >「無料だから」位の理由ならMSDE2000を使った方がいいと思うよ。
なぜですか?
321 :
310 :2005/09/05(月) 22:59:54
>>320 ということはpostgreSQLのせいというか仕様と言うかなんと言うか
プログラム自体に問題はなさそうですか。
>>312 さんのレス的にもやっぱそうなんでしょうか。
あっちのスレでも聞いてみます。
ありがとうございました。
>>321 別にそれでいいならいいけどな。
読解力ないと大変やのう。
323 :
310 :2005/09/06(火) 08:08:31
え。 >接続なりしてそれをきちんと片さないでさらに接続した場合、そのプロセスは増え続けると思う。 ていうところでしょうか? できればわかりやすく教えていただければその方がよいのですが。
2chの特定スレのレス数を取得したいのですがどうしたら良いですか? subject.txtを読んで、レス数を取得する方法、 datを取得して、行数からレス数を割り出す方法なら解るのですが どちらも余計な情報を拾ってくる為、subject.txtやdatのDLに時間が掛かります。 Janeなどでは特定1スレ(レス数900程度)のレス数チェック(新着チェック)は、0.5秒程度で終わりますが subject.txtやdatをそのまま取得すると、それだけで3〜5秒程度掛かってしまいます。 取得後の処理に関してはDelphi製のJaneの方が高速なのは解りますが 取得に掛かる時間は回線速度依存でどちらもたいして変わらないはずなので、 ここで差が出てるということはsubject.txtやdatをそのまま取得せずにレス数を得る方法があると思うのですが Janeのソース(OP言語)は読めないのでどうすれば良いのかも解りません。 VBと言うよりは2chの仕様に関する部分も大きいとは思いますが お詳しい方、何とぞ回答をお願いします。
>>324 パケットモニタでなにやってるか見たら?
Oracleを使用していましてSQLでUPDATEしたいと考えています。 その際にUPDATEしたらレコードが重複するかどうか調べる方法は無いでしょうか
>>326 UPDATEする前に、UPDATEするのと同じ条件でSELECTしてみて
複数レコードがあったら重複する
>>326 私もその方法を考えていたのですがそれしかないようですね ありがとうございます
329 :
デフォルトの名無しさん :2005/09/06(火) 19:33:46
コマンドボタン押したときにあるURLに飛ばしたいんだけど どうすればよいかなぁ?
>>329 知ってるが
お前の態度が
気に入らない
331 :
デフォルトの名無しさん :2005/09/06(火) 19:41:17
教えてくださいおねがいします。お代官さまー。
>>324 HTTP(HyperText Transfar Protocol)のIf-Modified-SinceヘッダとRangeヘッダ
334 :
デフォルトの名無しさん :2005/09/06(火) 20:35:34
すみません教えていただきたいのですが、 text.1からtext.5まで入力された数値の平均をlabel.1に、 入力された数値データの個数をlabel.2に表示させるにはどうすれば よいのでしょうか? 基本的なことですみません。
Dim Count As Long Dim Sum As Double Count = 0 Sum = 0 If IsNumeric(Text1.Text) Then Sum = Sum + Text1.Text End if 中略 Label1.Caption = Sum / Count etc,etc... なんで教材にVB使うんだろうねぇ。 Cなら只だし勉強向きの書籍もいっぱいあるのに。
Dim Ave As Double '合計 Cnt = 5 'へーきん Ave = (text1.Text + text2.Text + text3.Text + text4.Text + text5.Text) / Cnt もうコレでいいんでない? 入力されていないとか数字以外の場合も問われたら「分かりません」って答えるんだ!!
337 :
デフォルトの名無しさん :2005/09/06(火) 22:10:02
ありがとうございます。 でもcountも5で固定じゃなく、 入力されたデータ数を数えるようにしたいのですが わかりますか?
339 :
デフォルトの名無しさん :2005/09/06(火) 22:16:06
テキストボックスは5つありますけど、 例えばテキストボックス2つしか入力されなかった場合は count=2になるようにしたいのです。
>>339 Len(Text1.Text)<>0ならcountを増やすとか、少しは考えようよ。
342 :
デフォルトの名無しさん :2005/09/06(火) 22:49:32
Text1, Text2, Text3 ....... と同種のテキストフィールドがあったとして 繰り返しのためにたとえばi=2として Texti.text見たいな感じでText2.textの入力データ取り出すことできないの?
できる
344 :
sage :2005/09/06(火) 22:54:36
どうやるんですか? "Text" & i & ".text" これだと文字列になっちゃうし...
コントロール配列にでもすればいいじゃないか・・・
おもっくそスルーされてる まあいいけど
ありがとうございます その名前がわからなかった
かぶせさせてもらいますが "Text1.text" と文字列化したものをまた変数として扱うにはどうすればいいのでしょうか?
どうしようもない。
そうですかありがとー PHPとかもやってるとわけわからなくなってしまって
お前自体がわけわからん
352 :
デフォルトの名無しさん :2005/09/07(水) 07:05:44
353 :
デフォルトの名無しさん :2005/09/07(水) 10:49:16
すみません。1つ教えてください。 VB6でコールバック的な処理って出来るでしょうか? 例: sub Main() CALL ASUB(CallBackFunc) end sub sub ASUB(aFunc) return aFunc(1,2,3) end sub sub CallBackFunc(a,b,c) debug.print a,b,c end sub よろしくお願いします。
>>348 "Text1.Text"を文字列化って、どぅやったんですか?
Dim objText As Object
objText = Text1
objText.Text …
ってのはできる。
>>353 そのメソッドをどこかのクラスモジュールに作って
クラスのインスタンス変数を渡すという手があります。
コールバック関数の数だけクラスモジュールが出来るけどな。
つまり
Sub ASUB(ByVal CallBackObject As Object)
CallBackObject.aFunc 1, 2, 3
とするわけです。
コールバック用クラスは任意のクラス名で
Sub aFunc(a, b, c)
Debug.Print a; b; c
と。
渡されたCallBackObjectオブジェクトに確実にaFuncがあるのか?
という話なら、Implementsちゅう機能を使うとよいです。
でなきゃCallByNameで出来たんだっけ?
356 :
デフォルトの名無しさん :2005/09/07(水) 14:44:25
' Text1はコントロール配列
Dim Count As Integer
Dim Sum As Double
Dim OneTextBox As TextBox
For Each OneTextBox In Text1
If IsNumeric(OneTextBox.Text) Then
Sum = Sum + OneTextBox.Text
Count = Count + 1
End If
Next
Label1.Caption = Sum / Text1.Count
'または
'If Count <> 0 Then
' Label1.Caption = Sum / Count
'Else
' Label1.Caption = "N/A"
'End if
Label2.Caption = Count
>>334 よ、答えが分かれば満足なのかも知れないが
Text.1なんて変な書き方してるということは、ろくに
手を動かしたことがなくてコピペで済ませてるだろ。
説教くさくてごめんよ。
357 :
デフォルトの名無しさん :2005/09/07(水) 16:00:38
>>355 ありがとうございます。
やってみます。
また分からないことがあったら教えてください。
ファイル名に使用できない文字を置換してくれる関数か、ファイル名が妥当かチェックする関数ありますか?
すんません。自己解決しました。
360 :
デフォルトの名無しさん :2005/09/08(木) 11:08:48
質問させていただきます。 ボタンをクリックした時刻から48時間後の時刻をAとします。 Private A as Date Private Sub Command1_Click() A = DateAdd("h", 48, Now) End Sub タイマーイベントでAまでの残り時間を表示する処理をしたいと考えております。 Private Sub Timer1_Timer() dim B as Date B = A - Now Text1.Text = Format(B, "hh:nn:ss") End Sub この場合、"hh"のところに24時間以上の表記ができるプログラムを作成したいのですが、 ご教授願います。 タイマーのインターバルは1秒(1000m秒)です。
残りのトータル秒数がわかれば時間も分も秒も計算できるべ?
Int(B) * 24 + Hour(B) & Format(B, ":nn:ss") じゃダメなの?
363 :
360 :2005/09/08(木) 11:52:43
>>361 レスありがとうございます。
>>362 完璧です。早速採用させていただきます。
ありがとうございます。
364 :
デフォルトの名無しさん :2005/09/08(木) 12:17:58
たいへんすいません。 エクセルのVBAで小数点の切り上げ方が(切り下げ方も)判りません。 cells(1.1)=round(xx、0) だと動くんですが、cells(1.1)=roundup(xx、0)とやると エラーになってしまいました。 どなたか教えてください。
VBAは別スレ
367 :
デフォルトの名無しさん :2005/09/08(木) 12:53:05
ごめんなさい。VBAって別スレなんですか・・・ 一応、調べたんですが、ワークシート上じゃ簡単なんですが ユーザーフォームとコマンドボタンでやると動かないんですよね。 困った〜
VBで、mdbにデータを保存したいんだが、どうすればいい?
>371 ADOとかDAOとか使うとか
VB <->mdbの連携なんかいっぱい本あるだろう。
374 :
デフォルトの名無しさん :2005/09/08(木) 18:02:53
With文の 制御構造外ってのがよくわからないんだが、 With Me .Top = Left(.strTop,5) - 1000 End With みたいにVB組み込みの関数なら問題ないんだよね。 APIとか自作の関数がNGって事で間違いないかな。
>>374 クラス(class)なら自作でも With 〜 End With文 利用できるよ。
376 :
デフォルトの名無しさん :2005/09/08(木) 20:09:36
テキストボックスについて質問です。 TextBox でEnableプロパティを Falseにすると表示されている文字が灰色になってしまいます。 そこで文字色を灰色ではなくて黒のままにしておきたいのですが、そのようなことは可能でしょうか。 Frameの中にTextBoxをいれてFrame.Enabel=Falseにすると文字色は黒のままで文字の入 力もできなくなるのですが、なにかもうちょっとすっきりできないのかと思っています。 WindowsAPI使って実現できませんでしょうか。 よろしくお願いします。
質問です。 既存のボイスチャットソフト(TSとか)を使ってる時、 ボタン1つでwavを再生し相手に聞かせるプログラムを作りたいのですが、 その方法が見つかりません。 どのような方法があるでしょうか。よろしくお願いします。
>>374 何を聞きたいのかサッパリ理解できないし、それが俺の読解力のせいとも思えん。
「制御構造外」とは何?
しかし
>>375 はよく374の意図がわかるな。エスパーですかひょっとしてw
379 :
デフォルトの名無しさん :2005/09/08(木) 21:46:38
>>376 知ってるならその方法でいいじゃん。
なぜもうちょっとすっきり出来ないか教えてあげよう。
フォームにですね、深く掘り込まれた枠で(クラシック表示のとき)、
白い背景で、黒い文字が(白とか黒は環境依存)書かれた場所は、
「何か文字を入力できる」
ということを表す記号(表現)なのです。
逆に言うと、入力できないのにグレーでないのは、あまり
よろしくないと、つまりユーザーが混乱するよと、M$はかんがえたのです。
Windowsではそういうルール(ガイドライン)になっているので、
「ガイドラインを知らなくてもそのように作れるように」
EnabledをFalseにすると、親切でグレーにしてくれているのです。
WindowsAPIでどうにかならないか、ということだけど、
EnabledがFalseのときにグレーになるのは、VBでもたぶん
EnableWindow(hWnd, fEnable)というAPIでやってるの。
あきらめてください。
でなきゃ自作。
複数行のコメントアウトってどうやるのでしょうか?
>>381 ツールバー > ユーザー設定 > コマンド > 編集 > コメントブロック
キーに割り当てたければアドイン作れ。
>>382 ありがとうございます。
無事、登録できました。
WebBrowserコントロール上で押されたキーを得るにはどうすれば良いですか? KeyDownイベントが見あたらないんですが、まさかフックしなくちゃダメなんてことは無いですよね。
FormのKeyPreviewじゃだめ?
>>384 WebBrowserにはKeyDownイベントが無いので MSHTML.HTMLBody の WithEvents して HTMLBody_onkeydown() イベントを拾って
MSHTML.HTMLWindow から MSHTML.IHTMLEventObj を取得して 押されたキーを調べる
Dim WithEvents objEventBoby As MSHTML.HTMLBody
Private Sub WebBrowser_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Set objEventBoby = pDisp.Document.body
End Sub
'WebBrowserでキーが押された時のハンドら
Private Sub objEventBoby_onkeydown()
Dim evn As MSHTML.IHTMLEventObj
Set evn = WebBrowser.Document.parentWindow.Event
'押されたキー
Debug.Print evn.keyCode
Set evn = Nothing
End Sub
後は自分で何とかしろ
387 :
386 :2005/09/09(金) 23:10:25
後は考えてみてください、の間違いでした。
なんていい奴なんだ(つд`)
二次元配列を他の関数の引数にするとき Dim a(10, 5) as Double for i = 0 to 10 call 他の関数(a(i , )) next 配列の一番目(10で定義してある)の部分のみをiにしたいんだけど どうすればいいのでしょうか?
>>389 素直に
Call 他の関数( a , i )
にすれば問題無いわけだが。
VB6.0において1次元配列の初期化をする方法はないでしょうか。
>>391 初期化とは0でクリアなのか何かの値を入れたいのか
>>392 配列の数だけNULL値を入れたいです。
>>393 NULL値?初期状態にしたいだけなら
Dim A() as ほげ
で宣言しておいてクリアしたいときに
ReDim A(数)してやれ
395 :
デフォルトの名無しさん :2005/09/12(月) 23:00:45
TabStripのタブにウェブブラウザで取得したサイト名を表示させたいのですがうまくできません。 TabStrip.Tabs.Add , , "あいうえお"とやるとキャプションが設定できているようで表示してくれるんですが TabStrip.Tabs.Add , , WebBrowser1(index).LocationNameでは空白のままです。 文字列型に代入してやってみてみましたが同じでした。 Addのあとにインデックスを設定していないのがだめなのでしょうか? また、このキャプションの設定は追加する時のみにしか設定できないでしょうか? バージョンは6.0です。 よろしくお願いします。
sage忘れました。
>>395 Addの前に
Debug.Print WebBrowser1(index).LocationName
でも入れて、ちゃんとLocationNameが入ってきてるのは確認できてる?
398 :
デフォルトの名無しさん :2005/09/12(月) 23:43:53
>>397 やってみたところ入ってきていませんでした。
ただ、タブをすべて削除するという下のプロシージャを実行した場合は削除後にキャプションが設定されました。
Private Sub AllDel_click()
TabCtrl.Tabs.Clear
Debug.Print WebBrowser1(0).LocationName
WebBrowser1(0).Navigate ("
http://www.yahoo.co.jp ")
TabCtrl.Tabs.Add , , WebBrowser1(0).LocationName
TabCount = 0
Del.Enabled = False
DelButton.Enabled = False
End Sub
Private Sub AllDel_click()
TabCtrl.Tabs.Clear
WebBrowser1(0).Navigate ("
http://www.yahoo.co.jp ")
Debug.Print WebBrowser1(0).LocationName
TabCtrl.Tabs.Add , , WebBrowser1(0).LocationName
TabCount = 0
Del.Enabled = False
DelButton.Enabled = False
End Sub
↑でも入ってきてる?
まぁBusy見るかイベントで設定するかしてくれと。
うーん、それは入ってるとは言わないけど・・
WebBrowser1(0).Navigate ("
http://www.yahoo.co.jp ")
While WebBrowser1(0).Busy: DoEvents: Wend
TabCtrl.Tabs.Add , , WebBrowser1(0).LocationName
’このまま使用すると大いにバグだからイベントで。
空白タブになるのは多分、WebBrowserでページの読み込みが完了していないのにタイトルを取ろうとしているから Navigateした後にスグにAddはイカン!! WebBrowserはページの読み込みが完了しないと満足にメソッド・プロパティが使えないからね タイトルは DocumentCompleteイベントかTitleChangeイベントの通過後でないと駄目 ご参考に… ちなみにブレイクポイントで止めて LocationName を見る場合は デバッグでロジックを止めた時点でページの読み込みが完了するので 正確な値が返って来るので注意
事後報告無しが続くなあ
>>400 busyについてよく分かっていないので明日調べてやってみます。
>>402 入ってないんですか。
てっきりyahoo!と表示されたので・・・。
そのプログラムについても調べてみます。
>>403 読み込みが完了してからですね。
自分なりにやってみようと思います。
406 :
377 :2005/09/13(火) 01:21:24
>>377 はわかりませんか
もしかして、文章が分かり難いですか?
>>406 わかるけどな。
ちゃんとするにはVBだけでは無理。
408 :
デフォルトの名無しさん :2005/09/13(火) 11:06:52
VBで作ったテキストファイルにEOFを付加するにはどうすればいいでしょう?
親切なエスパーさん、「テキストファイルにEOFを付加する」ってところを翻訳してw
>>408 EOFコード(&H1A)を入れて文字列をバイナリデータとして保存
EOFコードってWindowsでは使われてないでしょ? 必要あるの?
411 :
377 :2005/09/13(火) 13:11:12
>>407 VBで、できないってことはスレ違いな質問でしたね・・・すいませんでした。
Cの方で聞いてみます。
ありがとうございました。
>>394 返信ありがとうございます。初期化することが出来ました。
テキストボックスを透明にする事は可能ですか? もし可能なら方法を教えてください
>>413 やりたい事がいまいち伝わってこないが、絵などの上に入力したいのか?
日本語なども必要ならIME,IMMあたりで自作。
>>414 回答ありがとうございます。
透明化自体は無理ですか?
>>415 透明化というものが何を指すかわからんからなんとも。
ピクチャーボックスに貼り付けた画像上にテキストボックスかリッチテキストボックスを 貼り付けたいのですが。
テキストボックスの背景に画像を入れたいってことか?
動的にテキストボックスを画像上に配置したいのですが、 この時に位置あわせの為に下の画像が見えるようにしたいのです。 で、その為にテキストボックスを透過させたい訳です。
説明が分かり難くてすいません。 WORDの図形描画でのテキストボックスの配置が イメージに近いと思います
>>419 Wordは知らん。
2000/XP以降でいいなら別のウインドウ作ってBorderStyleを0にして
ウインドウごと透過させるって手もあるようなないような
421に蛇足 SetLayeredWindowAttributesだったかなーウインドウごとのは。 一度昔使ったきりだから忘れたや。
424 :
405 :2005/09/13(火) 23:30:47
busy等について調べてみてなんとなくわかりました。 イベント通過後に変更しようと思うのですが、キャプションのみの設定はどのように 記述すればいいのでしょうか?あと、TabStrip.Tabs.AddのインデックスはTabStripプロパティの プロパティのタブにあるインデックスのことでしょうか?
>>424 TabStrip1.Tabs(1).Caption = "a"
など・・・ヘルプやGoogleやIDEの入力支援で探す努力くらいはやらないか
>>419 ラベルじゃダメなの?
ラベルなら何も考えずにできるとおもうんだけど。
ユーザーが文字編集できるようにしたいなら、その時だけ同じ大きさの
TextBoxを同じ位置にBringToFrontして表示すればいいんだし。
>>425 検索してみたのですが、検索方法が悪いのか目的のものがなかなか出てこなかったので。。。
入力支援でいろいろやってみたのですが、Tabsの後にインデックスをつけてると.のあとにCaptionが
でてくるということに気づきませんでした。
ありがとうございました。
SetLayeredWindowAttributesだと、画像も透けちゃいませんか?
質問者は2度目の書き込み以降は 必ず名前欄に最初の質問のレス番号を入れましょう。
>>428 別のウインドウ(Form)作ってと言ってるだろ!
431 :
デフォルトの名無しさん :2005/09/14(水) 03:01:37
自分で作ったdllを呼んで処理を行うclassモジュールを作ったんだけど なぜかdllを呼んで、dllから帰ってきた後VBのプログラムが不安定になるよ・・・ pictureをクリアーする「.cls」の部分で突然落ちるし、ファイルを開く「open〜」の部分でも突然落ちる デバックしたけど落ちる場所がよくわからないしヽ(`Д´)ノウワァァァン dllへ変数を参照渡しで送って、計算したものをVBへ返してもらってるんだけど 返ってきた値におかしいところは無かったです ちょっとでも原因がわかる人がいたら助けてもらえませんでしょうか 。・゚・(ノД`)・゚・。
そういう質問は、現物をソース付きで上げてもらわないと何とも言えないな。
433 :
デフォルトの名無しさん :2005/09/14(水) 08:46:14
VB6上で、wshを使いたいのですが、 Set WshShell = CreateObject("WScript.Shell") WshShell.Run("hoge.exe") とかの使い方わ解るんだけど Wscript.Echo "Hallo" Wscript.Sleep 1000 などをどうやって使えば良いのかわかりません。 Windows Script Host Object Modelを参照設定してもダメです。 代用法ではなく、上記のことを行える方法をご存じの方、どうかご教授お願いします。
>>433 結果から言うとVBから WScript は使えない。
なぜかというと WScript.Shell は外部公開されているけど WScript はされて無いから。
WScript は VBS(ro JScript) の環境下でした使えない(当然ライブラリも存在しない)。
外部公開されてない以上 VBS でしか使う事ができんのです。
どうしても使いたかったら マイクロソフトに 「WScript を外部公開しろ」と言って下さい。
まぁ VBS から VB製のActiveXを呼び出して その ActiveX に WScript を渡すという事は出来るんだけど。
435 :
もんもん :2005/09/15(木) 21:28:27
VB6.0とSQL鯖2000って仲がいいのですか?
いいよ。 はい次↓
VB6 使用してます。 Web上にある画像を読み込んで、その画像を加工したいと思ってます。 jpgやbmpだったら OleLoadPicturePath() を使って一旦PictureBoxに貼り付けて ピクセルモードにしてピクセル単位でいじれたのですが pngだと上の関数で読み込めませんでした。 なんとかピクセル単位のテーブルを作りたいのですが、 方法ありませんか。 ご存じの方いたら教えて下さい。
Variant型の配列をNullで初期化したいのですが、ループを使う以外に もっとスマートに書くことはできますか?
439 :
437 :2005/09/16(金) 02:04:41
×PictureBox ○Picture
ADOを使用して、ファイルメーカーのデータベースに接続しようとしています。 接続文字列は以下の様に設定しました。 CONN.Open "Provider=MSDASQL;driver=FileMaker Pro;database=XXX.fp5;password=1111" この接続文字列を使用して、 RS.Open "SELECT * FROM XXX.fp5", CONN を実行すると 下記の実行時エラーが発生してしまいます。 [FileMaker][ODBC FileMaker Pro driver][FileMaker Pro]無効なデータベース名 この処理を行う前に対象DBがあるファイルメーカーは起動しています。 ファイルメーカーのDBに接続する場合、テーブル名とデータベース名は同じ名前で よいのでしょうか? よろしくお願いします。
ListBoxでStyle
↑不注意で書き込みボタン押してしまいました。すいません。 質問です。 ListBoxでStyleをチェックボックスにして For i = 0 To List1.ListCount - 1 List1.Selected(i) = True Next i のように全部チェックをつけるとき、数百行あるだけでもえらく時間がかかるんですが、 速度を上げる良い方法はありませんか? (できればチェックつけながら勝手にスクロールするのもやめさせたいです。)
>>443 List1.Enabled = False
List1.Visible = False
For i = 0 To List1.ListCount - 1
List1.Selected(i) = True
Next i
List1.Visible = True
List1.Enabled = True
一瞬じゃない?
>>444 enabledいらないんじゃ?
最後に
List1.listindex=0
とかもね
>>444 ,445
ありがとうございます。
早くなりました。
SSTabに、コンボボックスをドロップダウンコンボ形式でいくつか配置します 他のタブからコンボがあるタブに戻ってくると、 なぜかそのタブにある全てのコンボボックスのTextが、 全選択されています 見た目悪いので、これを回避したいのですが・・・ タブクリック時にSelStartを1にすれば一応回避は可能なんですが、 一画面内のコンボボックスの数が多くて、その分書くのがめんどくさいです 何か、もっとスマートに回避できる方法はないでしょうか?
WindowsXP (SP1) / Visual Basic 6.0 (SP5) StrConv関数 について質問です。 S = "\\\test\\\" D = StrConv(S, vbWide) この様なコードを書いた場合に、変数 D が "¥¥¥test¥¥¥" とならずに、 "\\\test\\\" となってしまいます。 "\" だけ Replace関数 を使うしかないのでしょうか?
XXX がデータベースの名前で fp5 がテーブルの名前? だったら database=XXX SELECT * FROM fp5 です。 ていうかおまえデータベースとテーブルがごっちゃに なってないか?
452 :
デフォルトの名無しさん :2005/09/16(金) 20:05:58
Variant型の配列をNullで初期化したいのですが、ループを使う以外に もっとスマートな書き方ではどう書けばよいですか?
何でVariantをNullで初期化する必要があるの? Variantの初期値はEmptyでしょ。 NullとEmptyのちがい分かんないの? FillMemory() で初期化しなさい。 データの長さは Variant型が16Byte の変数であるから もう分かるよね〜 初期化の値は 0 でいいよ。
そんなことして大丈夫なの?
456 :
452 :2005/09/16(金) 21:44:32
>>453 すみません、
>>438 は
>>440 で「ある」としか回答をもらっていないようなので、
(ただ、
>>440 氏の回答では
>>438 氏の質問にある「書くことは
できますか?」という
問題が解決していないので、実際出来るかどうかもまだ判然と
しないのですが)
こちらはどう書けばよいか、という問題の答えを探していますので
>>438 では解決しませんでした。お手数をおかけしました。
>>454 Nullの伝播を前提としたライブラリを使用する必要があって、
初期値としてNullを持った変数が必要になります。
他社から提供されるActiveX DLLなので中身は分からないのですが、
想像するに、中でLeftやRightの$なし関数を使っているなどして
いるようで、Enptyを渡すとNullが返らないので結果が変わってしまいます。
NullとEmptyが違うので、あえてNullで初期化する必要が出来ています。
Enpty→Emptyです。
問題外。出直して来い。
459 :
デフォルトの名無しさん :2005/09/16(金) 22:17:05
VBのReplace関数ってバグがありませんか? 引数(start)設定時に1よりも大きくすると正常に動作しませんよね?
>>459 問題が起こる最小限のサンプルコード見せてくれ
>>459 言いたいことはなんとなくわかる
ヘルプを百万回読み直せ
>>459 正常に動作するけど。
もしかして
> 引数 start を指定した場合、Replace 関数は、指定された位置から引数 expression の文字列の末尾までを返します。
という公式仕様をバグだと勘違いしてる?
恥ずかしい奴だなw
>>437 既存のライブラリ等を使うか、もしくは自前で実装。
465 :
デフォルトの名無しさん :2005/09/17(土) 12:06:12
VB6で任意の文字をsendmessage関数を使ってメモ帳に送ろうとしているのですが、送れないんです。。返り値も0でテキストも表示されません。 WM_CHAR以外にもいろいろためして みたのですが、どれも反応してないようです。 FindWindow関数やFindWindowex関数など、ぐぐってぐぐっていろいろ調べて、サンプルコードもたくさんあったのです参照して、 同じコードを使っても動かなくて、他をいろいろ見ても結局同じコードで説明しているのでこれ以上は調べようがなく・・アドバイスもらえないでしょうか;_; ウインドウハンドルはちゃんと取れているようです。(他のアプリで調べました) プログラムは以下のとおりなのですが、どこが問題なんでしょうか・・? Private Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long 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 Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _ (ByVal hwndParent As Long, _ ByVal hwndChildAfter As Long, _ ByVal lpszClass As String, _ ByVal lpszWindow As String) As Long Private Sub Command2_Click() Text1.Text = "ready" Dim hWnd1 As Long Dim hWnd2 As Long Dim retvalue As Long hWnd1 = FindWindow(vbnullstring, "無題 - メモ帳") Text1.Text = hWnd1 hWnd2 = FindWindowEx(hWnd1, 0, "Edit", vbnullstring) Text2.Text = hWnd2 retvalue = SendMessage(hWnd1, WM_paste, 52, 0) End Sub
>>465 最後のSendMessageはhWnd2に向けて送れよ。
467 :
465 :2005/09/17(土) 12:22:09
>>466 あー、すみません、いろいろ試してたので・・
retvalue = SendMessage(hWnd2, WM_CHAR, 52, 0)
とかでやってもダメでした。。
retvalue = SendMessage(hWnd1, WM_CLOSE, 0, 0)
も動かないです。
なんかもっと基本的なことか根本的な間違いでしょうか・・@@
>>465 なんだこれw
WM_PASTEって文字通り「貼り付け」でしょ?
何を貼り付けるの?それはクリップボードの文字列だよね。
その辺わかってるのかな。
retvalue = SendMessage(hWnd1, WM_paste, 52, 0) ↓ Clipboard.SetText Text1.Text retvalue = SendMessage(hWnd2, WM_paste, 52, 0)
Setの前にはClear
471 :
465 :2005/09/17(土) 14:42:06
やっと動いた・・・ Private Const WM_CHAR = &H102 を追加したらWM_CHARは動くようになりました。なぜこれが必要なのか よくわかんないけど。。 アドバイスもありがとうございます。
オイオイ.........
Option Explicit -----------------
Option Explicit を付けないと 変数宣言が必要なくなるスーパー言語VB
変数宣言ないほうがコンパイラの実装楽だしな
一つ質問させてください 「卂」という漢字(第二水準以降の文字?)をテキストボックスに 入力した後にDBの項目に対して更新かけると「?」になって登録されます。 外字登録せずに「卂」で登録できるようにするためには どのような手法を使えばよろしいでしょうか? 処理はこんな感じで実装しています。 Dim strSQL As String gobjConnect.BeginTrans strSQL = "UPDATE T_TEST SET Item01 = '" & Me.txtText.text & "'" Call gobjConnect.Execute(strSQL, , adCmdText + adExecuteNoRecords) gobjConnect.CommitTrans 接続はADOで行っています。 VB6(SP5)+SQL-SERVER7.0
>>476 UNICODEをまともに扱いたかったらVB.NETでも使ってくれ
478 :
476 :2005/09/17(土) 15:56:52
確かにおっしゃるとおりなのですが 今からそれをやることができないので なんとか今のヴァージョンでクリアさせたいのですが・・・ 無理な話なんでしょうか?
480 :
476 :2005/09/17(土) 16:20:53
>>479 早速のResありがとうございます。
表示に関してはgrapecity社のSpread7で回避ができそうなのですが
問題はDBに登録する際に「?」になってしまうことなのです。
回避する方法を教えてください、お願いします。
>> 476 VB標準のコントロールはUnicodeを扱えない。 Unicodeを扱いたいなら、Unicodeに対応したコントロールを買ってくるか、 作る必要がある。他にもUnicodeを扱えない場面は多々ある。 ぶっちゃけVB6で作るのはあきらめて、Javaか.NETかC++にするのが良い。
>>480 しらんがな。
Spread7の人間に聞いてくれ
483 :
476 :2005/09/17(土) 16:34:00
>>481 もう納品済みな物なので今から方向転換するのが厳しいのです・・・
Spread7でUnicodeが扱えるのでそっちで聞くことにします。
csv形式のファイルから、任意の行だけを読み込みたいのですがどうすれば良いですか? 大きなファイルなので、一度全て読み込んで・・・ということはせずに処理したいのですが。
>>484 DBに変換して使う
INDEXファイルを作っておく
1行づつ読んで改行を数える
一度全て読み込んで
どちらにしろ、一発じゃ無理
486 :
デフォルトの名無しさん :2005/09/18(日) 11:15:51
サブキーを持つレジストリキーを一発で削除する方法を教えてください。 IWshRuntimeLibraryのRegDeleteメソッド、 APIのRegDeleteKey関数では、サブキーを持つものは1発では削除できませんでした。 ググっても.NETの方法や、VB6でもAPI使えばサブキーを持つキーの削除が出来るって情報はあるのですが 具体的にどうすれば良いのかが解りません。 レジストリスクリプト(.reg)やreg.exeをつかっての削除ならわかるのですが そういったものを使わずにVB6でサブキーごと一発で削除する方法をご存じの方、どうか教えてください。
>>486 質問する前にググッた?
いや、そんなはずはないな。
俺もレジストリのキーの再帰的な削除なんてやったことなかったんで
ググってみたけど、3分程度で答え見つかったよ。
oggを再生する方法教えてください。 VB6.0です。
>>489 レスThx
調べてみてVoxっての見つけたんだが、うまく出来んorz
ヘルプ見てコピペしたんだが、エラーが出る(´・ω・`)
dll使うの初めてだから良く分からないorz
どこかに良いサンプルみたいなのってありますか?
「エラーが出る」だけしか書かない奴にかける言葉は無い
Option Strict Off Option Explicit On Module vox Public ID As Integer Declare Function VoxLoad Lib "vox.dll" (ByVal pFileName As String) As Integer Declare Function VoxPlay Lib "vox.dll" (ByVal ID As Integer) As Boolean Declare Function VoxPause Lib "vox.dll" (ByVal ID As Integer) As Boolean Declare Function VoxRelease Lib "vox.dll" (ByVal ID As Integer) As Boolean Declare Function VoxSetLoop Lib "vox.dll" (ByVal ID As Integer, ByVal Count As Integer) As Boolean Declare Function VoxCheckDevice Lib "vox.dll" (ByVal ID As Integer) As Boolean Declare Function VoxSetVolume Lib "vox.dll" (ByVal ID As Integer, ByVal Volume As Integer) As Boolean Declare Function VoxGetVolume Lib "vox.dll" (ByVal ID As Integer) As Integer Declare Function VoxFade Lib "vox.dll" (ByVal ID As Integer, ByVal StartVolume As Integer, ByVal EndVolume As Integer, ByVal FadeTime As Integer) As Boolean Declare Function VoxDelete Lib "vox.dll" (ByVal ID As Integer) As Boolean Declare Function VoxGetTotalTime Lib "vox.dll" (ByVal ID As Integer) As Integer Declare Function VoxGetCurrentTime Lib "vox.dll" (ByVal ID As Integer) As Integer Declare Function VoxSeek Lib "vox.dll" (ByVal ID As Integer, ByVal Time As Integer) As Boolean Declare Function VoxGetStatus Lib "vox.dll" (ByVal ID As Integer) As Integer End Module '再生 ID = VoxLoad("C:\a.ogg") Call VoxPlay(ID) ------------------------------------------------------------------------------- >Option Strict Off >Option Explicit On >Module vox >End Module ここの部分がエラー出る。.NETのものなのかな? Option Explicit On → Option Explicit にして、他削ったらエラー出ないけど、動かない(´・ω・`)分かりにくくてスマソ
今 Vox 落として確認してみた このVBサンプルは .NET だよ
>>493 .NETじゃなきゃ使えないって事?
工夫次第で使えるのかな?
十分使える API の宣言 Integer を Long に変えれ
>>495 出来た!
マジでThx。
ありがとう。・゚・(ノд`)・゚・。
497 :
486 :2005/09/19(月) 04:36:39
>>487 ググりましたよ。
でも値を持つキーごと削除する方法とか、再帰的に削除する方法は解るんだけど
XPのreg.exeみたいにキー以下にサブキーがあっても一発で削除出来る方法が分からないです。
NETの方法とか書籍の見出し広告ばかりヒットしちゃって。
ググって答えを見つけたなら、そのページへのリンクを貼ってください。
ページ直ではなくGoogleの検索結果一覧へのリンクでもかまいません。
間違いなく検索結果の10件の中に答えがあるというなら、後は自分で探しますから。
RegEnumKeyEx
>>497 検索の仕方が甘いというか、諦めるのが早すぎると思うよ。根性なさ杉。
まずMSDNでRegDeleteKeyの項を確認するのは当然普通にやるよね?
そうすると「参照」のところになにやらそれっぽい臭い関数名が書いてあるじゃない。(SHDeleteKey )
で「RegDeleteKey SHDeleteKey」で検索かけると。。
上手く検索できる人はこんなとこ利用しないと思いますけど。。。
うんだから魚より魚の釣り方を提供した方が親切だろうと思うわけですよ。
。。。ってそんな偉そうにいうような大仰なもんでもないと思うけどね。
誰でも
>>499 程度の知恵は使うでしょ、誰にも教えられなくても。
502 :
デフォルトの名無しさん :2005/09/20(火) 05:57:02
VB6使ってます テキスト1とテキスト2に数値を入れてコマンドボタンを押すと テキスト1に入力した数値からテキスト2に入力した数値までを 全部足していくプログラムのやり方を教えてほしいです テキスト2のが小さい場合はテキスト1までの数字を足していくって感じで
>>502 ・text1とtext2どちらの値が小さい(大きい)かを算出
・forで小さい方の数から大きい方の数までのループを組む
・ループ内で「変数=変数+forのカウンタ」という処理を行う
・ループを抜けたとき変数に入ってた値がお望みの物
>>503 ありがとです
なんとなくやり方がわかりました
やってみま
SendMessageで出来ること一覧、みたいなものありますか? 定数の一覧とかはたくさん見つかるんですが、定数だけわかっても パラメータの乗せ方って動作によって違いますし。。。
> 出来ること一覧 なんでも。 つーか出来ること一覧から選んで使うんじゃなくて やりたいことから必要な物を探し当てるのが普通だろ。 出来ること一覧なんてまともに出したら万単位じゃきかないんだから有っても無駄だよ。
507 :
505 :2005/09/20(火) 10:13:37
>>506 う、そうですね・・・
私の探し方が未熟なんでしょうかorz
開発してると、毎回SendMessageでやりたいことがいろいろ出てきて、
事案ごとにキーワード変えながら検索してみるんですが、
クリーンヒットってほとんどないんです
「SendMessageで○○をしたい」と考えたとき、
どんなふうに探されてますか?
なんかあいまいですみません・・
spy++で調べて、解らなければその情報を元に検索する。
つうかさ、SendMessageとかAPI使うなら、きちんとWindowの仕組みを勉強しろよ。 何のメッセージを送ってるかそもそもわかってないでしょ。 誰が誰にメッセージしてるかとか、それが一体何で、どうやって到達するかとか。
>>505 「SendMessageで○○をしたい」で方法に辿り着けず挫折した事も多いんじゃいかな
SendMessageは定数の一覧が全て。定数の一覧に載っていないメッセージは送信しても受け付けません
定数の一覧に載っていない処理は絶対にSendMessageじゃ出来ないんよ
検索方法変えな
まず定数の一覧を見て必要な処理が出来るか検討する
見つかったら そのメッセージでMSDNがぐーぐる
見つかんなかったら さっさと諦める。
時間かければ見つかるかも知れないけど 出来ない事延々と探す時間がもったいないよ
どうしても必要とせがまれた時は
「VB or Windows では実現が難しい」
「実現するにはそれなりの工数が必要」
とでも言って脅せ
アホか。
ループなんか回すと処理に時間がかかるから、数学の公式使おう!
フォームのkeypreview=true フォームのkeydownイベントで↑↓でカーソル移動(SendKeysでTab、Shift+Tab) するようにしているんですが、 コンボボックスを通過する際、カーソルはきちんと動くものの、 コンボの選択内容が上下に変わってしまいます コンボボックスで、矢印キーの上下で項目を選ばせないようにするには、どうしたらいいでしょうか
>>514 カーソル上でで移動するというそっちの仕様がおかしい
>>514 コンボのKeyDownで ↑↓ が入力された時 KeyCode = 0: Shift = 0 にする
でもその仕様は確かに変
↑↓でカーソルを移動するのはキーボード重視になっているからだと思うんだけど
コンボを↑↓で選択したくなったらどうするの?ワザワザマウス使うの?
517 :
514 :2005/09/20(火) 17:38:09
マウスクリックかAlt+↓で選択させたいみたいです
コンボボックス上ではEnterキーでのみカーソル移動させていたら、怒られましたorz
>>516 ありがとうございます
それでやってみたんですが、こんどはAlt+↓が効かなく・・・
も少し粘ってみます
VB6(SP6)とグレープシティのActiveReportを組み合わせたPGを作成しています。 プロジェクトファイル(vbp)で実行した場合は問題なく動作するのですが、 exeファイルを作成し、実行したらオートメーションエラーが発生します。 (同じPCで行っています。) VBPで動作して、コンパイルしたexeだと動かないって、 一般的にどのような理由が考えられますか?
520 :
518 :2005/09/20(火) 19:30:16
>>519 エラーナンバーを表示させていませんでした。
実行したところ、「-2147024770 オートメーションエラーです。指定されたモジュールが見つかりません。」と出ます。
521 :
518 :2005/09/20(火) 19:51:23
度々すみません。先程のはウソでした。 「-2147417848: オートメーション エラーです。 起動されたオブジェクトはクライアントから切断されました」 が、exeのみで発生するエラーです。
VB6.00使用してプログラム組んでいるものです。 ボタンを押してcsvデータから一行ずつデータを読み込みxlsデータに書き込んでいくプログラムを組んでいるのですが、 xlsデータに書き込む時に任意のセルから書き込むようにしたいのですがわかりません。 下記のサンプルソースではデータをエクセルのA1から順に入れている形です。 これをセルのE5から順に入れていく形にしたいのですが、よろしくお願いします。 ****サンプルソース**** Dim xls As Excel.Application Dim strOneLineData As String Dim strArrOneData() As String Dim intFileNumberCSV As Integer Dim i As Integer Dim lngLineCnt As Long 'csvファイルの読み込み済み行数の格納 Dim strCEL_No As string 'Excel上に出力するセル位置の格納する Set xls = New Excel.application 'excelの設定 With xls .Visible = False 'Excelを非表示にする 'csvファイルのopen intFileNumberCSV = FreeFile Open c_strCSVFileName For Input As intFileNumberCSV 'ファイル名を作成します。 .Workbook.Add 'Excelにワークシートを追加する 'csvファイルがEOFになるまで、一行づずつ読み込む lngLineCnt = 1 Do While Not EOF(intFileNumberCSV) '終端までループを繰り返す *****下記に続く*****
523 :
デフォルトの名無しさん :2005/09/20(火) 22:10:12
*****上記から****** Line Input #intFileNumberCSV, strOneLineData strArrOneData = Split(strOneLineData, ",") '読み込んだ一行分のデータを分割 For i = 0 To UBound(strOneLineData) strCEL_No = Chr(Asc("A") + i) & lngLineCnt .Range(strCEL_No). Select .ActiveCell.FormulaR1C1 = strArrOneData(i) Next i lngLineCnt = lngLineCnt + 1 'Debug.Print writestr Loop Call .ActiveWorkbook. SaveAs(c_strXLSFileName, xlNormal) 'エクセル保存 'csvファイルのclose Close #intFileNumberCSV xls.ActiveWindow.Close xls.Quit End With Set xls = Nothing
そのコントローラの使用する権利がないとかでは?
ActiveReportというコンポーネント使ったことないけどそれって最初からついてたやつ?
526 :
デフォルトの名無しさん :2005/09/21(水) 00:02:37
ActiveReportだったか忘れたけど、Newしたオブジェクトを Nothingしなかったらそういうのが出た気がする。 ちがってるかもしれんが・・・
527 :
デフォルトの名無しさん :2005/09/21(水) 00:50:31
Win2000 SP4 + VB6.0 SP6です。 デスクトップ右クリックメニューの「等間隔に整列」を ロジックで実現する方法を教えてください。 よろしくお願いいたします。
>>527 質問の意味がわからん
何がしたいんだ?
VB6.0です。 画像a.bmpの上で黒を透明色にした画像b.bmpを乗せたいんですけど、 Pic1.Picture = LoadPicture("C:\a.bmp") Pic2.Picture = LoadPicture("C:\b.bmp") TransparentBlt(Pic1.hdc, 0, 0, Pic2.Width, Pic2.Height, Pic2.Picture, 0, 0, vbBlack '黒を透明色にしてPic2をPic1にコピー Pic1.Refresh これで出来たんですけど、b.bmpを0.2秒毎に動かそうとして i=0 Do Pic1.Picture = LoadPicture("C:\a.bmp") Pic2.Picture = LoadPicture("C:\b.bmp") TransparentBlt(Pic1.hdc, i, 0, Pic2.Width, Pic2.Height, Pic2.Picture, 0, 0, vbBlack '黒を透明色にしてPic2をPic1にコピー Pic1.Refresh i=i+10 '0.2秒ウェイト Loop こんな感じにしたらRefreshに1秒程かかって思うように動きませんでした。 もっと早く動かすにはどうしたら良いですか? 分かりにくい文章ですいません。
>Refreshに1秒程かかって思うように動きません ちょwwwwおまっwwwwツボ入ったwww
531 :
デフォルトの名無しさん :2005/09/21(水) 06:25:54
VB6です text1とtext2に数値を入れて text1の数値からtext2までの数値を全部足していって(1と10入力したら答えは55表示みたいな) 答えをtext3に表示されるというプログラムを組みたいのですが、挫折しまくりです orz Private Sub Command1_Click() Dim a As Integer Dim b As Integer Dim c As Integer Dim sum As Integer a = Val(Text1.Text) b = Val(Text2.Text) sum = 0 For c = a To b sum = sum + a Next c Text3.Text = sum End Sub 現在こんな感じです たぶんすっごい突っ込みどころ色々あると思うんですがアドバイスお願いします
532 :
531 :2005/09/21(水) 06:46:40
色々やってみたら自己解決しました(´・ω・`)
533 :
275 :2005/09/21(水) 09:39:39
MSCOMMに困っていた者です。 送信側にPCを使ってテストする分には うまくいってます。 あとは、実際に検査機を使ってテストするだけです。 また、質問があったら質問したいと思いますが、 質問に答えてくださった方々、 ありがとうございました。
534 :
デフォルトの名無しさん :2005/09/21(水) 10:10:53
VB6.0です。 入力した文字列をそのまま配列に一文字ずつ格納して、 さらにそれをText2へ出力したいのですが。 例:Text1にABCDEFG… と入力 Hairetsu(0)=A Hairetsu(1)=B Hairetsu(2)=C …と。 Private Sub Command1_Click() Dim Hairetsu(100) As String Dim i As Integer Dim Txt As String Dim one As String Dim l As Integer Txt = Text1.Text l = Len(Text1) For i = 0 To l - 1 one = Mid(Txt, i + 1, 1) Hairetsu(i) = one Next これで配列Hairetsuには、Hairetsu(0)=A Hairetsu(1)=B… となってると思うのですが、 Text2へそのままABCDEFG…を出力させるにはどうしたらよいのでしょうか?? よろしくお願いします。
何をしたいのかよくわからんが、 配列を繋げるならjoin関数で
536 :
534 :2005/09/21(水) 10:39:21
>>535 や、やっとできました…そんな関数すら知らずに朝から3時間も苦悩しておりました orz
ありがとうございます(;´Д`)逝ってきます
>534 dim s as string for i=0 to ubound(Hairetsu) s = s & Hairetsu(i) next Text2.Text = s こんな感じでいいんじゃないかな
538 :
537 :2005/09/21(水) 10:42:32
って既にレスされてた上に join知らなかった俺はバカ。 join覚えときます・・・orz
539 :
534 :2005/09/21(水) 10:48:36
>>537-538 とんでもございません。
書き換えたらそちらでもちゃんと表示されました。
朝っぱらから漏れなんぞに付き合っていただきありがとうございました。
もう解決しているし、
>>534 の使い方とは違いそうだしで書き込むか悩んだけど
文字列とバイト配列の相互変換を置いておきますね。
Dim pui8String() As Byte
Dim pcString1 As String
Dim pcString2 As String
pcString1 = "テスト用Strings"
' String -> Byte()
pui8String = StrConv(pcString1, vbFromUnicode)
' Byte() -> String
pcString2 = StrConv(pui8String, vbUnicode)
Debug.Print pcString2
今は使わなくても覚えておいて損は無いかも?
という事で閑話休題
ワロタw
>>502 と
>>531 って別人?
n(n+1)/2(1からnまでの総和)って知らんのかなぁ!?
例えば、Integer内でおさまる計算なら、1たすのも1000たすのも同じ時間。
逆に言えば、1を1000回たせば1000倍の時間がかかる。
そういうところがもっとも簡単に気ィ使えるとこなんだから…。
>>522 ×strCEL_No = Chr(Asc("A") + i) & lngLineCnt
○strCEL_No = Chr(Asc("E") + i) & lngLineCnt + 4
ところでこのサンプルソースで動いたの?
いろいろ手直ししないと動かなかったんだけど。
俺がExcelXPのせいか?
こんにちは ExcelXPさん!
547 :
デフォルトの名無しさん :2005/09/21(水) 23:52:38
突然厨な質問ですまないが、VBでマルチスレッドアプリを作ろうとしている。 巷では出来ないといわれていたり、出来ると言われていたりよくわからん。 CreateThread自体はうまくいく。 スレッドのプロシージャに空ループを仕掛けるとCPU使用率が100%になるからだ。 グローバル変数を使ってスレッドを抜ける(=破棄)までは出来ている。 ところが、スレッドの中でちょっとでも変な事すると即座にあぼんするのだが、VBでマルチスレッドできない理由ってこれかい? #基本的には、メインフォームに対して描画処理をしたいだけなんだが、form1.hdc とか触っただけであぼんってなんだゴルァ! しかもIDEとP-Codeとネイティブで全部あぼんするタイミング違うし。
548 :
547 :2005/09/21(水) 23:57:25
テラスマソ WinXP SP2 + VB6.0 SP6です。 基本事項忘れますた
>>547 マルチスレッドは可能 CreateThreadも上手くいく
ただしスレッド間のコントロール(オブジェクト)の同期がメチャクチャ
おまけに不安定。
CreateThreadの上手くいく=マルチスレッドが可能 という人もいれば
不安定=マルチスレッドが使い物にならない(出来ない) という人もいる
個人的な意見だけど VBランタイムがシングルスレッド用で出来ているから 満足にマルチスレッドは使えないと思う
やった事無いけど スレッドのプロシージャをDLL(Cで作ったヤツ)にすれば可能という話があるけど
試した事ないから知らない
前スレで下記のような質問をした者です。 前スレでは無理だからループ回せとの回答を頂きましたが、FillStyleプロパティをflexFillRepeatにする事で 行や列などの範囲に対してループを回さず一発で書式変更が出来るようになることが解りました。 ご存じの方も居るかとは思いますが、前スレで回答が付かなかったということは 知らない方も多いと思うので報告させていただきます。 > VB6のMSHFlexGridコントロールで、列や行に対して > 文字割付(上寄せとか左寄せとか)や、修飾(文字色とか太字とか)を > 設定するにはどうすればよいですか? > > 今は列や行に対してではなく、セルに対する設定をForで回してますが非効率的なので。 > Spreadsheetコントロールならそういうことも出来るのですが、 > MSHFlexGridコントロールを使いたいので、どうかご教授お願いします。
>>547 Mutexとか使って排他かければ可能なんじゃね?
逆に排他かけなきゃ共有物にアクセスしたらいかんのだけれど、この辺はVBに限った話じゃ無いわな。
スレッドが使用可能だって言っても、全部VBで開発しろって言われたら絶対に嫌ですって答えるな。
VB唯一の長所といってもいいデバッグのしやすさが失われるからなぁ。
VBはVM(って言ってもいいのかな?)の上にいる間だけ優しい顔をしてくれる感じ。そこから外れると辛い。
今の時期にVBに対して不便さを感じているなら、VB.NETなりC#なりに移ったほうがいいかも。
あ、フォームのオブジェクトに直接触ろうとしてるのか。 じゃ無理だな。
553 :
デフォルトの名無しさん :2005/09/22(木) 04:35:24
Inputboxに数値を入力していって(ループで0が入力されるまで繰り返し) 0が入力されたら終了 そしてForm上に今までの最大値と合計を表示させる というプログラムを作ってたのですが 最大値のところがうまくいかないので教えてほしいのです たとえば -8 -5 0と入力した場合 最大値0 合計-13になってしまうのです これを0を含まずに 最大値-5 合計-13となるようできませんでしょうか? よろしくお願いします
Visual Studio 2005、Windows Vistaの発売が迫り、VB6.0もその役目を終えようとしていますNE! このスレにもほたるのひかりが流れてきました☆ 残っているのはftgbyhふじこ、;だけです>< もう閉店なんだYO! (・∀・)カエレカエレ!!
何年前からVB6が役目を終えようとしているといわれたっけな?
556 :
デフォルトの名無しさん :2005/09/22(木) 07:13:22
デスクトップアイコンを非表示にするAPIを知りませんか?
TEST
VB6でマルチスレッド、大昔のVBマガジンで記事あったよね。 とりあえず出来る程度の。 そもそもMSが保証なんてしてないし、VBで使用するオブジェクトがスレッドセーフな保証なんて一切ないし。
vistaやxp64にインストール出来るのか! VB6はこの先生きのこれるのか!
560 :
デフォルトの名無しさん :2005/09/22(木) 10:59:53
開発環境はWindowsXPまでは保証されてる。 ランタイムの動作はVistaまでは保証されてる。 当面は生き残ってるだろ。 それ以降は、VirtualPC推奨だ。
VB6の後継って出ると思いますか? このまま消え去るとは思えないのですが
>>561 たぶんこのまま消えるよ
とても後継とは言えないVB.NETを後継ってことにしてね
563 :
デフォルトの名無しさん :2005/09/22(木) 20:31:29
VB6の後継はVB.NET これが真実 真面目な話し2005ではオブジェクト思考がまったく分からない 糞エンジニアもどきにも使える様に、 言語仕様が変更されているから安心しろ。
ということにしてVB6ユーザを取り込もうというわけだ。 OOPが全くわからなかったらやっぱり使えないさ。
565 :
デフォルトの名無しさん :2005/09/23(金) 07:51:55
任意のフォームでAltキーを組み合わせたVBのキーイベントを発生させる方法を教えてください 環境は VB6SP6 WinXPSP2 です 自分が最初に試した方法は、下のようなコードでメッセージを送信する方法なのですが SendMessage(Form1.hWnd, WM_KEYDOWN, KeyCode, 0) しかし、これではAltキーが送信されませんでした あれこれ調べても分からなかったので、Spy++でメッセージを調べて、同じようにメッセージを送信してみました 次のコードは Alt+Q を目的のフォーム(Form1)へ送っているつもりです Call SendMessage(Form1.hWnd, WM_SYSKEYDOWN, VK_MENU, &H20380001) Call SendMessage(Form1.hWnd, WM_SYSKEYDOWN, &H51, &H20100001) Call SendMessage(Form1.hWnd, WM_SYSCHAR, &H71, &H20100001) Call SendMessage(Form1.hWnd, WM_SYSKEYUP, &H51, &HE0100001) Call SendMessage(Form1.hWnd, WM_KEYUP, VK_MENU, &HC0380001) このコードでは、Form1 の KeyDown イベントは来るのですが、引数の Shift はゼロでした どうすればVBのキーイベントで Alt キーを認識させられるのでしょうか?ご教授ください
普通にSendKKeysじゃダメなの?
567 :
565 :2005/09/23(金) 09:12:37
>>566 ありがとうございます
SendKKeysは知らないのですが、おそらくSendKeysのタイプミスですよね?
その前提で考えますと、SendKeysではアクティブなフォームにしか送信できないのでダメなんです
あくまでも任意のフォームに送信したいんです
だから「任意のフォーム」をアクティブにしておいてからSendKeys使うだけでは? SPY++でメッセジー観察したのなら、単純にこのメッセージを送ればいい、 という訳にはいかなそうなのはわかりそうなもんだと思うんですが。 だからこそSendKeysなりSendInput(これはWin32API)なんてのが用意されているわけでしょ。 何で手動でSendMessageすることに固執するのかわからないけど、 仮に対象が他のアプリのウィンドウだとしても どのみちウィンドウハンドルを取得可能であることが前提になるわけだから SendKeysで何の問題もないと思うんだけど。(SetForegroundWindow)
569 :
565 :2005/09/23(金) 10:13:04
>>568 ありがとうございます
>単純にこのメッセージを送ればいい、 という訳にはいかなそう
すみません、検討も付かないのですが、具体的にはどういうことなのでしょうか?
>何で手動でSendMessageすることに固執するのかわからないけど、
手段は他の方法でも構わないのですが、任意のウィンドウを指定できないのが困るんです
たしかに直前に無理やりActiveにしてしまえばSendKeysでも出来ますが
それではウィンドウを切り替えたくない場合や、非表示のウィンドウに送れません
570 :
522 :2005/09/23(金) 21:34:28
>>545 亀レスすみません。こちらは動きますよ?
c_strCSVFileNameとc_strXLSFileNameをデスクトップにもともと存在しているファイルに設定しておいてますが。
それで、動くようにはなったんですが、EXCEL.EXEが起動しっぱなしになってしまうんですが・・・
VBを閉じればちゃんとEXE終了するんですが・・・。おかげで、二度目ボタンを押したとき動かないんですよね・・・
ちゃんと、quitもしてるのに・・・なんででしょうか?
質問じゃなくて、VB6も暇そうなんでw
既出かも知れんけど、昔MSからMVPs指定もらってたEdanmoさんのサイトにさ、
カスタマイズしたWebBrowserコントロールをフリー配布してるんだよね。(ソースもアリ)
これ使うと、ActiveXやScriptのONOFFもサポートしてるから
Sleipnir,Lunascape,Donutみたいにセキュリティ設定できるわけ。
VB6製タブブラウザでも作って暇つぶしはどうよ?w
タブだからってタブコントロールは使うべきではないようなw
つーか、機能的にはヤツラを超えてやろうってヤシいないか?w
【Namespace Edanmo】
ttp://www.mvps.org/emorcillo/en/index.shtml で"Source Code"→"Old VB6 Code"のページにて
Custom WebBrowser control
がカズタム版のWebBrowserコントロールでOCXとしては単純にはこれだけでもいいんだけど、
より深い開発には
OLELIB.TLB - OLE interfaces & functions v1.7
もインストールしておくべし。
上記以外にもVB6の上級テクがずらりだねぇ
ところでWebBrowserコントロールでHTTPプロクシのチェンジわかるヤシいる?
10進を16進に換算するのはどうすればいいですか。
575 :
デフォルトの名無しさん :2005/09/24(土) 23:59:39
おい!おまえら! VBやってて良かったと思ってますか?どうか教えてください
>>575 スレを浪費するだけの愚かなアンケートをするな
577 :
デフォルトの名無しさん :2005/09/26(月) 04:55:57
InputBoxに1が入力されたら終了して Formに最大値と合計を表示するプログラムを作ってみました でも、ここで問題が たとえば -6, -3, 1 と入力して終了したとき 最大値が1と表示され、合計値が+1されて-8となってしまうのです 1が入力された時点でループを抜ける方法はないでしょうか? 最大値-3 合計-9と表示させるようにしたいのです お願いします Private Sub Command1_Click() Dim a As Integer Dim b As Integer Dim c As Integer Do Until a = 1 Form1.Cls a = Val(InputBox("1で終了", "タイトル")) If a > b Then b = a End If c = c + a Loop Form1.Print "最大"; b Form1.Print "合計"; c End Sub
>>577 Private Sub Command1_Click()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = Val(InputBox("1で終了", "タイトル"))
Do Until a = 1
Form1.Cls
If a > b Then
b = a
End If
c = c + a
a = Val(InputBox("1で終了", "タイトル"))
Loop
Form1.Print "最大"; b
Form1.Print "合計"; c
End Sub
無理矢理。
試してないから間違ってるかも。
それか、if文でaが0ならループ抜けるようにするか。
>>578 レスありがとうございます
試してみたらちょっとだめでした(´・ω・`)
Private Sub Command1_Click()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = Val(InputBox("0で終了", "タイトル"))
Do Until a = 0
Form1.Cls
If a > b Then
b = a
End If
c = c + a
a = Val(InputBox("0で終了", "タイトル"))
Loop
Form1.Print "最大"; b
Form1.Print "合計"; c
End Sub
今度はわかりやすくするために0で終了させるように変えてみたのですが
-6 -4 -2 0 と入力すると
やっぱり最大値が0になってしまいます
できたら-2で終わらせる方法教えてほしいです
>>579 Do
a = Val(InputBox("0で終了", "タイトル"))
If a = 0 Then Exit Do
If a > b Then
b = a
End If
c = c + a
Loop
581 :
580 :2005/09/26(月) 06:44:05
>>579 間違ってるのはそこじゃなかった。最大値bは最初の入力で初期化する必要がある。
Private Sub Command1_Click()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = Val(InputBox("0で終了", "タイトル"))
b = a ' *** これが必要
Do Until a = 0
Form1.Cls
If a > b Then
b = a
End If
c = c + a
a = Val(InputBox("0で終了", "タイトル"))
Loop
Form1.Print "最大"; b
Form1.Print "合計"; c
End Sub
教えてください。 VB6にて 画面上に常に線を引くプログラムを作りたいのですが 可能でしょうか? 他のソフトを起動したり何も起動していないときでも 常に画面上の一番手前に線を引きたいのです。 宜しくお願いします。
>>583 可能ですか
やり方教えてください。
フォームに線を引いても他のソフトを
開くと下に行ってしまって
上手くいきません。
お願いします。
586 :
522 :2005/09/26(月) 12:41:52
>>571 ありがとうございます。読んで勉強してきます。
↓以下何事もなかったように再開
▼現在未解決の質問 計 0件 では、次の方どうぞ
591 :
582 :2005/09/27(火) 08:04:14
>>587 >>1 を見ても、検索しても
わかりませんでした。
APIを使うのかなと思い調べてみたんですが
駄目でした。
わかりやすいヒントだけでもお願いします。
因みに
>>588 は私ではありませんが
知っているなら教えてください。
宜しくお願いします。
>>591 知ってるが
お前のメル欄
気に入らない
593 :
582 :2005/09/27(火) 08:32:44
>>592 LineToてやつを使うんだろうな
と思ったのですが、
常時一番上に表示させる方法が
わかりません。
メル欄は癖です。
>>592 や他の皆さんが
禿げだと思っているわけではありません。
気分を悪くされたのであれば
申し訳ございませんでした。
禿が気になるお年頃のおいらとしては おいらを指して言ったんじゃなくても 非常に気分を害したので知ってるが教えない 次から質問時は気を付けるこった
595 :
582 :2005/09/27(火) 08:58:31
禿を気にしない方
もしくは
>>593 での謝罪で
許してもらえる方いませんか?
597 :
582 :2005/09/27(火) 09:56:26
>>596 心の広い方ありがとうございます。
ウィンドウを常に手前に表示するというのは
解るのですが、LineToにてデスクトップ上に
引いた線を常に表示させる方法が
解りません。他のソフトを起動すると
引いた線が消えてしまいます。
Timerを使って再描写させるとそれっぽく
なるのですが、、、
>>582 やりたいことがよくわからんが、デスクトップに直接描画しなきゃいけないのかい?
それならデスクトップのウィンドウをサブクラス化してWM_PAINTを捕捉すりゃいいでない?
599 :
582 :2005/09/27(火) 10:31:42
>>598 お返事ありがとうございます。
やりたいことの説明が解りにくくて
申し訳ございません。
やりたいことは、デスクトップ上に
常に線を引きたいのです。
定規を使って液晶に線を引いても
良いのですが、ずれてしまうと(微調整をしたい)
やり直しがきかないのでは?と思っています。
Timerで再描写の方法だとチカチカして
見づらいです。
透過したウィンドウに線引いて、最前面に出せば? イベントどうするかは別途調べてね、透過で調べればやりたいようなことは芋づるで出ると思うけど。 ちょっと前でぐぐれっていう人がいたけど、それは正しい。 ある程度ここで聞いたキーワードでグーグル様の神託受ければ、芋づるで大体調べがつく。 あと、Vectorに画面用の定規があったような。 ウィンドウでフローティングした定規。
お座りマルチ、ナツカシス(´・ω・`)
おまいら今日はイヤに優しいな
本当に優しい方ばかりですね。
フォームを透過させるという
発想が無かったので
検索してませんでした。
>>601 Cコンパイルする環境はありません。
>>601 >>603 も見てみます。
ありがとうございました。
作成したプログラムを配布するとき 相手にランタイムのインストールやsetup.exeを使ったインストールをやらせたくないんだけど 作成したプログラムのフォルダに、これから使用するであろうdllを置くことはできないのでしょうか?
>>606 プログラミングの前に日本語勉強した方がいいような。。
その文章で君の質問の意図がわかる奴がいたら、そりゃエスパーだわw
>>607 ゴメンポ('A`)
VBの画面の
「ファイル」→「project.exeの作成」
で作成したファイルのみで配布して起動させることはできなのでしょうか?
ってことです
いや、ユーザーのシステムにランタイムが入ってるって前提なら それで必要十分だよ。 VB製のフリーソフトなんて大抵そうじゃん。 動かなかったらベクターでランタイムあさってインストールしてくださいってね。
dll使わなければ良い。
>>612 は何が言いたいんだろうねえ。
ひょっとして
>>612 の環境じゃVBランタイムはdllで、しかも各プロジェクトフォルダに
入ってるのかな。
これぞVB厨クオリティw
vb2ならできたかも
616 :
606 :2005/09/28(水) 01:16:00
>>607-615 色々ありがとう
やっぱりだめか〜
|
\ __ /
_ (m) _ピコーン
|ミ|
/ .`´ \ そうだVB.netを勉強すればいいんだ(きっと
('A`) そうすればdllなんて ・⌒ヾ(*´_`)
ノヽノヽ
くく
VB.NETで作成したプログラムを配布するとき 相手に.Net Frameworkのインストールやsetup.exeを使ったインストールをやらせたくないんだけど 作成したプログラムのフォルダに、これから使用するであろうdllを置くことはできないのでしょうか?
できない。
>>606 1.regsvr32で使うDLLを一つずつ登録する。
(VBランタイムは手動でインストールする。)
2.DLLを登録するだけのsetup.exeを作る。
(VBランタイムもsetup.exeに含める。)
あ、しまった。
>>606 のDLLはActiveX DLLじゃなくて標準DLLかな。
そこでDelphiですよ
>>616 だから必ずしもダメじゃないってw
どういう読解力してんのよ。
はじめてきました。 プログラミングをしようとVB6.0を押入れから出してきました。 (今ではnetが出ているんですね、orz) で、勉強をしようと思うのですけど 雑誌類は無いのでしょうか? 昔BASICマガジンなどで一画面プログラムとか一行プログラムとか超勉強になったのですが オークションでも探そうと思っています。 お勧めの雑誌などがございましたらどうかお願いします。
超田舎でなければ、大型の古本屋に行けば攻略本が手にはいるよ。 低下2000円超でも100円前後で買えて超経済的w
スレ違いかもですが 3年少し前から、会社でなし崩しにVB6の勉強をはじめて、今も開発職です 他の言語には、他にエキスパートいっぱいいるわけだし、 30近い年で今更つまみ食い始めてもな・・・という気分です .netや2005など、新しいの出てますが・・・ VB6やっててWebでTipsなど探しているときに、 「.netは6と違ってこんなにべんりー」的な紹介に結構出くわします よくVBは死んでゆく言語と言われ、不安増すばかりなんですが、 今後VBをより掘り下げていくより、やっぱり他言語を学習した方が 身のためでしょうか みなさんは、どうお考えでしょう
>>627 他の言語も勉強すべき。
ってかVB6は脇役(か中身の無い主役)で本領発揮するタイプだよ。
64ビット全盛な時期になったらVB6の実行環境は死滅するかVirtualPCに押し込められるんじゃね?
色んな意味で中途半端なVB6に居座るよりは、基礎も整ってるしライブラリも豊富な.NETに移行したほうがいい。
.NETでなくてもいいけど、メインがVB6ってのは止めたほうがいい。
使い捨ての仕事しか無いよ。
VBしかできないなんて信じられない。
まあ、基本が出来てる人なら新しい言語を学習する苦労なんて些細なもんだろうな。 逆に言えば言語覚えた程度の能力なんて糞拭く紙にもならないチンケなもんだYO! 業務で培ったのノウハウのほうがずっと大事なんだから、それを腐らせないように新しいものどんどん取り込んでけ! とっとと浮気始めたほうがいいYO!
631 :
デフォルトの名無しさん :2005/09/28(水) 22:38:50
>>625 勉強です。
書籍は8冊・図書館で3冊読みました。
そういえばプログラムの雑誌類はまだ見ていないと思いまして。
632 :
デフォルトの名無しさん :2005/09/28(水) 22:39:45
2・3冊雑誌をあげていただければと、どうかお願いします。
Printer.Printでフォントの背景色を指定できませんか? Printer.BackColorとか、Printer.Font.BackColorなんてプロパティがありません。
634 :
633 :2005/09/28(水) 22:45:09
検索語を変えたら、これが見つかりました。 リンク先が消えてるので、さらにぐぐらないといけないけど。 Printer.FontTransparent = True iBKMode = SetBkMode(Printer.hdc, TRANSPARENT) Printer.Print "テスト"
>>631 「Visual Basic6.0 300の技」が暇つぶしできていいんじゃね?
プログラミングの基礎学びたきゃ.NETの本に移ったほうがいい。VB本でまともに書いてるやつ見たことね。
636 :
デフォルトの名無しさん :2005/09/28(水) 23:20:50
637 :
633 :2005/09/28(水) 23:46:54
できますた。ああ、まんどくさ。
このスレたまに覗くけど、大半の回答者が社会的訓練を受けていないな。 だからプログラマなんてやってんだろうけど( ^Д^)
ム板の半分はニートで出来ています。 もう半分はベーマガ残党
マ板っぽくなってきたな
Win64では VBだろうがCだろうがWin32アプリは全部動かないよ XP64BitではデフォルトでWin32エミュレータが入っているから動くんだよ 仮にWin32を切り捨てれば 今まで市場で回っている全てのWin32アプリが動かなくなるよ たとえWindowsOSが完全に64Bitに移行してもWin32は相当長く続くな…と予想 今後のVBは64Bitへも対応はまず無いと思うので、それだけは頭においておいた方がいいよ
642 :
627 :2005/09/29(木) 16:53:17
VB6は卒業してVB.net 将来的にALL64Bit化を考慮して、それに対応する言語 やっぱり、この2つはやっておいた方が、絶対にいいってことですよね 勉強時間を考えると胃が痛くなりそうですが、頑張ってみます ありがとうございました
ユーザーコントロールって、ウィンドウのように表示させることはできますか? ↓userctl ┌─┐ │ ├────┐ 任意のタイミングで、このように表示させるような └┬┘ │ ことってできますか? │ Form .│ │ │ │ │ └─────┘
>>643 フォームをもひとつ準備してそこに貼り付けないと無理。
>>644 いや、別にそんなことしなくても出来るぞ
試しにこんな感じでコード書いて見れ
Private Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndParent As Long) As Long
Call SetParent(UserControl1.hWnd, 0) '← ウィンドウから切り離したいときに実行
Call SetParent(UserControl1.hWnd, Form1.hWnd) '← Form1 上に置きたいときに実行
>>645 なるほどNULLにするとデスクトップにコントロールが張り付く形になるのか。
その場合にFormの上にオーバーラップさせるのはできるのかな?
試してみたいが環境が無い。
>>646 上に表示するだけなら↓だが、一緒に移動したいならサブクラス化すればおっけー
SetWindowPos(UserControl1.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
サブクラス化できないか、タブオーダーが効かない副作用を嫌うならば、リージョンウィンドウかなぁ
しかし質問者の
>>643 には、どちらも荷が重いだろうことを察すると、
透明ウィンドウが一番簡単かつ手軽なので、この方法をお薦めしとく
ただし、タイトルバーをつけると、とってもかっこ悪いことになるw
http://megaup.ddo.jp/upload/data/up0328.zip
648 :
デフォルトの名無しさん :2005/10/01(土) 07:32:54
IEの操作で質問です <select class="CLASS1" name="NAME2"> <option value="12345">しょうゆ <option value="98765" >とんこつ <option value="23232" >塩 <option value="93793" >味噌 </select> このようなセレクトボックスがあるとしてvalueの方で値を取得したり 選択させたりすることはできるのですが、 逆に表示されている「しょうゆ」や「とんこつ」などの文字列で 自動的に選択させたりすることはできますか?
>>647 最近勉強し始めた漏れからしたらそんな感じのを
さっさか作れるヒトが凄いと思う土曜の朝 orz
650 :
デフォルトの名無しさん :2005/10/01(土) 12:30:52
PerlとC++を少々かじった程度の者ですが 現在ネット環境のない部屋でVBAをいじってます Functionプロシージャの戻り値で配列、構造体を戻す宣言の方法が分かりません あと構造体の宣言をどこでやるのか分かりません Structure Date_Values Dim YER as Integer Dim MNT as Integer Dim DAY as Integer Dim HOR as Integer Dim MNT as Integer End Structure 以上の文をsub文の内部に書いたのですが 『sub または Functionが定義されていません。』と怒られてしまいます
>>650 Structureを使うのはVB.NET。
VBではType。
使い方はヘルプで検索。
652 :
デフォルトの名無しさん :2005/10/01(土) 12:55:45
>>651 様
ありがとうございました
配列を戻り値に使う方法は不明のままですが
構造体の方は解決いたしました
構造体を戻り値に使って問題を解決できそうです
即レス ありがとうございました
試していたので返信が遅れてしまい申し訳ありませんでした
>>652 配列の引数&戻り値はVariant型で受け渡す
>>648 試してないけど、たぶんこれでいけると思うよ
とんこつを選択する場合ね
dim select as object ' 型は MSHTML.HTMLSelectElement でもいい
set select = セレクトボックスの取得処理 getElementBy〜とか
for i = 0 to select.options.length - 1 step 1
if select.options(i).text = "とんこつ" then
選択処理
exit for
end if
next i
>>653 おいおい、引数も返り値も普通に配列で大丈夫だよ。
VB4とかは知らないけどねw
>>655 いや分かってるけど650の超初心者ぶりを考えて
全部Variantにしときゃとりあえず動くだろうと思ったんだがなぁ
そういう突っ込み入れられるんなら、1行ですむんだから宣言書いてやりゃいいのに
> そういう突っ込み入れられるんなら、1行ですむんだから宣言書いてやりゃいいのに そう思うならお前が(ry
>>657 だからオレは全部Variantにしとけといってるんだよ
一行ですむといったのはお前。一行ですむのだからVariantではなく、その宣言を書けば良い。
それに超初心者だと思うのなら、なおさら正しい答えを書かないといけない。
>>660 いや全部Variantにしとけばいいw
とりあえず、今までのやり取りを見て 「全部Variantにしとけばいい」が 馬鹿な答えであるということはわかりました。
ん〜 655 はプライドがよほど大事のようだな 構文知らないんなら、口出ししなきゃよかったのにね Private Function 関数名(引数() As String) As String() これ引数にも戻り値にもString型の配列入れるばあいね
初心者ならVariantは止めた方がいいよ 何でも平気っていうVariant癖が付くよ 初心者ならなおさら型を意識した方がいいと思うよ C++の経験があるなら配列は使わないで その型専用のコレクションクラスを作って クラスごと受け渡す なんて方が分かりやすいのかな?
VBばっかやっててCに挑戦するとかなり面倒に感じるね。
666 :
655 :2005/10/01(土) 19:32:23
>>663 ???
俺は655以降一度もレスしてないけど。。
構文知ってるとか知らないとかずいぶん低レベルな争いだなあw
まあどうでもいいんだけどさ。
ちなみに、もう数年VBさわってないんでうる覚えだけど、
VBって確か構造体を返すメソッドを外部のクラスに公開するときに
妙なトリックが必要だったような。。
構造体自体はPublicでいいけど、メソッドはFriendにするんだっけ?
667 :
650 :2005/10/01(土) 23:14:55
皆さん丁寧にありがとうございました 皆様のアドバイスのおかげである程度 納得できるコードになってきました 質問の連投で申し訳ありませんが VBAで他言語のevalに該当する関数は無いでしょうか? checkbox_【n】.enabled = VALUE(n) というような処理を行いたいのですが チェックボックスを配列関係にする事なく解決したいです
669 :
667 :2005/10/01(土) 23:50:43
>>668 様
大変失礼しました
VBAの質問スレが見あたらなかったので
つい こちらで質問してしまいました
少し様子を見させて頂いて スレ立て依頼をやってみます
しかし、VBA専用の質問スレなんて利用者いるのかなぁ…
672 :
デフォルトの名無しさん :2005/10/01(土) 23:59:50
>>670 うはは
落ちてる落ちてる
単発質問スレになっても良いからスレ立ててきなよ
まぁ 質問の内容的にはVBの分野なんだけどね
(VBと同じ方法だよ)
674 :
669 :2005/10/02(日) 00:15:15
>>671 私のわがままが発端で気分を害されたようで
大変申し訳なく感じておりますが
なぜ(?_?)
あの文章のどこに怒られているのか理解できないのですが。
しばらく 様子を見させて下さい
↑また気分を害されたら申し訳ありません
おいおい。誰がみても、 利用者いるのかなって、VBA使ってる人に失礼だろ・・・そりゃ怒るわ。
676 :
655 :2005/10/02(日) 00:26:05
幼稚な奴はほっとけって。一人でキャンキャン吼えさせておけばいい。 evalって与えられた文字列をコードとして実行するって奴かなあ。 そういうのはVBには当然ないとして、VBAにもなかったような気がする。 というか、オーソドックスに配列で処理したら何かまずいんだろうか。
VBAスレ要らんだろ VB6でも出来る処理に関しては回答付くけど、そういうのはここでいいし Excel独自のことは答えられずExcel総合相談所に誘導するだけで AccessやWord独自の質問はほとんど放置 はっきり言ってVBAスレとしては機能してない
>>675 でも、vba使う奴なんかいるのか?
そりゃ去年vbaでバッチプログラム作ったけどさ
MACなんてつかわねえよなー 隣の部署じゃ使ってるけどさ ってノリ?
>>667 チェックボックスを配列関係にする?
えぇ?
つまりプログラム上で各ボタンにユニークな番号を与えて
その番号に応じた一括処理とかできるの?
すごい便利そうだ
是非やり方を伝授してくれたまえ
このスレを「Eval」で検索
>>681 こういう人を「したり顔の馬鹿」というんだよなあ。。
683 :
デフォルトの名無しさん :2005/10/02(日) 13:11:31
俺のVBのイメージ 柱、屋根、家具などが用意されてる家 利用者が試行錯誤しながら(でも直感で柱は柱と分かる)組み上げるだけで 目的の家が建つ Cの場合は土台のみが用意されていて 利用者が自分のセンスで自由に家を建てる アセンブラは山そのものと鉄の固まりがごろんと転がってて。好きにしろって感じかな Perlは材木の変わりに軽くて加工しやすい発砲スチロールと段ボールが広場にある感じ PHPは特定の利用に特化したプレハブかなぁ
684 :
デフォルトの名無しさん :2005/10/02(日) 13:13:49
誤爆った すまん
>>667 配列で処理したくないってのは、コントロール配列にするのが嫌ってことかね?
それとも、CheckBox/Object型の配列に参照突っ込んだ配列すら使いたくないってことかな
その2つの代わりにEval探すってのはセンスない気がするなぁ
どうしても配列嫌なら関数作ればいいんじゃないか?
Private Function 禿しくげっと(ByVal なんか適当なIDとか As Integer) As CheckBox
Select Case なんか適当なIDとか
Case おさかな ' Const か Enum か 直値
Set 禿しくげっと = checkbox_【おさかな】
Case おやさい
...
End Function
禿しくげっと(n).Enabled = VALUE(n)
>>682 そういう煽りはいくない
686 :
デフォルトの名無しさん :2005/10/02(日) 16:13:40
>>685 ありがとうございました
パソコンの中に他の人が作ったファイルがありまして
それを真似して解決しました
【object(だったかな)】.("hoge" & n).value = VALUE
てな方法(多分 初歩の記述)が使えました
配列にするのが嫌だったのは
オブジェクト名を変える必要があると思ってて
それまでのコードを書き直すのが面倒だっただけです
失礼しました
かなり、初歩的な質問だと思いますが、、 処理2の場合は「プロシージャC」を 処理せずにもう一度txtA(テキストボックス)を入力されるように 戻る処理はどう書けばいいのでしょうか? Private Sub cmd_Click() If txtA.text = XXX then 処理1 Else 処理2 End if プロシージャC End Sub
>>688 むしろ処理1の直後にプロシージャCを移動すべきではないだろうか
690 :
デフォルトの名無しさん :2005/10/03(月) 07:32:20
If txtA.text<>XXX Then 処理2 exit sub End if 処理1 プロシージャC
692 :
デフォルトの名無しさん :2005/10/03(月) 07:48:04
たったその程度で間違いでもないのに、ネタだよね本気じゃないよね あつかいすんのかよw 本当はおまえ。どっかみ間違えたんじゃねーの?w
else使えよ exit sub使うなよ 不一致条件式ではなく一致条件式使えよ
別に exit subつかってもいいじゃん
Exit Sub使った方がいい場合もあるが 今回の処理は使わない方がいいな そもそも、使う必要が全く無い
別に使ってもいいじゃん。
教条主義的な馬鹿と、単なる自分の「慣れ」に過ぎないものと 万人にとっての可読性の区別がつかない馬鹿が多いな。 そんなもんどっちでもいいだろ。 プログラミングは工学であってイデオロギーじゃねえんだよ。 機能を必要十分に果たすのであればどちらでも選ぶところはない。
まあ、2の10乗を出すのに 2 ^ 10と書くのも2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2と書くのも ループで乗算するのも自由だわな。 機能を必要十分に果たすのであればどちらでも選ぶところはない。
VB.6.0なんですが、ソースコードに行番号を表示することはできないのしょうか?
>>699 >プログラミングは工学であってイデオロギーじゃねえんだよ。
違うね、90年間かけて探し出した俺の答えは
『プログラムはオナニー』なんだよ
君は【2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2】なんて数式でイク事ができるか?
俺は変態じゃないから そんなきったない数式じゃ勃ちもしないね
わろすわろす
704 :
702 :2005/10/03(月) 13:51:05
やべぇ。妙な所でWキーしちまった 90年って俺 何歳だよ 分かってるとは思うが 9年間な
>>704 もう一度 自分の歳を考えてから発言した方がいいですよ
ここはひとつ、原点に戻って考えるんだ プログラム初心者に、とりあえず教える方法としてどうかということだ とりあえず、よく分かってないうちは goto 使うなと教えるだろ そう考えれば 695 の内容は、基本中の基本だろう 699 みたいな意見は、質問スレの回答としては、初心者を惑わすだけで無意味だ 質問者に実力が付けば、おのずと自分で模索していくだろうしな
どっちでもいいじゃん。
質問に対する回答なのに、どっちでも良いってw 回答する気ないなら、ROMってろよ
どっちでもいいも回答の一つ。
ただの入力検査で txtA.text=XXX 以外をはじくんだから
冒頭ではじくような分かりやすい
>>690 のやり方が普通だと思うけどな。
処理1が長くなったり、プロシージャC以外の処理を追加する場合を考えて俺ならそうする。
覚えておくといい 普通は途中で関数から抜けるソースは書かないんだよ
そんな普通は無い。
途中で関数を抜けるのは、whileループを breakで抜けるのと大差ありません。
わからんなぁ。入力検査なんだから、抜けさせるのが目的なんだろう。 IF A=B Then ・ ・ ・ ・ Else ここで入力ミスの処理 End If だと長くなるし、何やってんのかわからんくなるぜ。
>>714 しかもその条件が複数あると、ネストがどんどん深くなるしね。
本ばかり読んでかじった知識で言ってるだけで実戦経験すくないんじゃね?
バカばっかりだなここ プログラムで飯食ってる奴はさすがにいないだろうな
>>710 趣味のソースではオレもたまにやるけど、
条件が複雑なエラーチェックでネストが4重超えそうなほど
醜いソースの時くらいしかやらないなぁ
そんな場合も、大抵じっくり考え直してみると
ネストしまくりの処理自体がアホだったりするしw
そもそも1段階のネスト嫌って Exit Sub はありえなス
>>714 いや、そんなに関数長くなるなら、そもそも組み方がおかしい可能性を疑うべし
未だに出口は一つとか信じちゃっている奴がいるの?
複数の人と開発する時はそうしてるよ
出口は一つってGoto禁止原理主義者と同じ臭いがする。
私的には、Exit Sub/Func禁止だけどGoto容認。 リソース開放処理をそこらじゅうにかかれるのは論外。 Try Catch Finally のThrowの代わりにGoto。
722 :
702 :2005/10/03(月) 17:28:22
いいね、いいねぇ〜 みんな 素敵なオナニーしてるじゃん 俺も負けないようにがんばるよぉ! 某言語の初心者用向けの本の中にコラムで 以下のような文があったのよ >カレンダープログラムの中に皆既月食の表示をしようとしたが、 >その日付の取得方法が分からなかった >筆者は 天文博物館に電話して、その計算方法を尋ねたが >「かなり複雑で難解な計算が必要になりますよ」との回答だった >筆者は「今後100年間の月食の日付は全て分かりますか?」と尋ねたら >「表があるのでお送りします」と言われた >筆者は、その表にある日付を全て データとして組み込み、満足した >今でも あの方法は間違いでは無いと思っている 俺は、この作者を可愛そうだと思った だって、そんな方法じゃ満足感は得られないっしょ?
目的が何かで満足を得られるかどうかは変わるでしょ。 難解な計算をして皆既月食の日を求めることが目的なら満足は得られないだろうけど、 カレンダーに皆既月食を表示したいだけなら目的は達成される。
725 :
724 :2005/10/03(月) 19:14:48
俺が言いたい事は、手段と目的を履き違えるなってことだ。
726 :
702 :2005/10/03(月) 19:36:32
でも、プログラムの楽しさって60%以上は 自力でアルゴリズムを導き出す時の達成感じゃない? ゲームを作る時も、ゲームシステムとかルールとかを考えてる時は楽しくて 無茶苦茶張り切るよね?よ〜っし絶対に作ってやるぞ〜みたいな でも、構想段階が終わってソース入力の段階に入ると一気にやる気が揮発しちゃうよね それで、いつまでも完成しなくて結局中途半端なコードがいつまでも放置される事になるんだよね 「お前は プログラムを作成しろ。ただしサブルーチンと内部の細かい計算式はこちらで作っとく」 なんて言われたら、絶望しちゃわない?
>>726 オマ、中学生ん時 慣れない連立方程式を解くの 大好きだったタイプじゃね?
でも、慣れてきて解くのが作業になった時には 面倒くさくて投げ出してたタイプじゃね?
自己ルール:質問が無いときは質問スレでsage雑談しても迷惑じゃないのでOK
※) ただしなるべくスレの内容に合う話題。
>>726 車輪の再発明
お前はライブラリを使うな。
っていうか皆既月食の計算なんか
他人の力を借りずに自分でアルゴリズムを
見つけるとしたら天体観測から初めて何年かかることやら。
自転やら引力やらまともに計算したらえらいこっちゃ 自力で解けとか言う奴はお前は解けるのか?って思うよな
1.起動したら監視開始 2.変更受信したら処理>監視継続 3.プログラム終了と同時に監視終了 FindFirstChangeNotificationでハンドル作成、 WaitForSingleObjectで変更受信したら処理をさせてDoevents、 これをDoでループさせます プログラム終了時に、FindCloseChangeNotificationでハンドルをクローズします このやり方でファイルの変更監視のプログラムを作りたいのですが、 プログラム終了時に監視がどうしても抜けられなく、フォームのUnloadが通っても 監視のプロシージャに処理が戻ってきてしまいます どうしたら、プログラム終了と同時に監視終了できるのでしょうか
>>730 だからエスパーはいないって。あなたの文章イミワカリマセン。
ヒトにわかる文章かけない人間が、
ヒトよりずっと融通の利かないコンピュータのコードをかけるだろうか。
わかんなきゃ黙ってればいいのに。
「わかんなきゃ黙ってればいいのに。」しか言うこと無いなら黙ってればいいのに。
>>732 ちゃちゃ入れるために監視してるの?w
随分暇か現実逃避してるんだか。
>>730 Unloadで何してるの?暗黙のフォームとか呼び出しをされるようなことしてない?
通貨、確実の終わらせたければEnd書いちゃえばいいじゃん。
>>731 すみません・・・コピペしてきて自分でもあまりよくわかっていないものに
ついての質問でしたので・・・言葉もありません
>>734 監視の開始と終了をするFunctionプロシージャがありまして、
引数にフラグを設けています
Form_Load時にそのプロシージャを開始フラグで動かしまして、
Form_Unload時に終了フラグで動かす、
ということをやっています
終了フラグのときは、ループに行く前にFindCloseChangeNotificationを実行して、
Exit Functionで抜けるようにしています
そこで関数を抜けて、FindFirstChangeNotificationもWaitForSingleObjectも
通っていないはずなのに、Unloadが通った後になぜかいきなりループ内に戻ってきて
監視が継続されているのが、どうしても抜けられなくて・・・
Unload時にプロシージャを動かさず、Endを書いて強制的に終了、
というのはできたんですが、できたら監視を終了させて、その後でフォームを終了と、
キレイに流したかったので、質問させていただきました
>>734 > 通貨、確実の終わらせたければEnd書いちゃえばいいじゃん。
やめろって。Unloadで終わらないってことはバグがあるってことなんだから。
バグにふたをせずにバグを直すべき。
>>735 FormのLoadとInitialize、UnloadとTerminateにDebug.PrintやMsgBox等をおいて
予期しないタイミングでイベントが発生していないか、
どこでそのイベントが発生しているか調べるべし。
そのとき、Debug.Print Form1.Nameとかせずに
Debug.Print "Form1"のように単純な文字列を使うべし。
(Form1.Nameのようにフォームのプロパティなどを書くと、
Form1がアンロードされていてもその場でロードしてしまうから)
>>735 なんかまだ釈然としない文章だなあ。。
だから推測で答えるしかないけど、恐らくVBの基本が全然わかってない。
具体的にいうと、
>FindFirstChangeNotificationもWaitForSingleObjectも 通っていないはずなのに、
こうあるけど、ループをスキップすることと、ループを抜けることは全然違うよ。
最初に「監視の開始と終了をするFunctionプロシージャ」をコールしたときに
ループを開始してるんだよね?そのループを抜けてないんじゃないの?
相変わらずこのスレはギャグか本気かわからん微妙なやつが沸いて面白いなw
>>687-729 なんじゃこりゃww
とりあえず、
>>721 だけは許せない奴だという事がわかった
仕事で一緒になったら金だけ持ってトンズラする
>>721 > Try Catch Finally のThrowの代わりにGoto。
Throwの代わりはErr.Raiseだろ。
今帰ってきました
みなさん、返信ありがとうございます
明日また、ひとつひとつ試してみます
>>737 すみません、お手数おかけします
はい、最初のループを抜けれてないんだと思います
それを、任意のタイミングで終了させたいときに、どうやったら抜けれるのだろう、と・・・
単純に、もう一度Function実行して、それがループに入る前に
FindCloseChangeNotificationを実行してしまえば、終われるのかと思っていたのですが、
どうも違ったようです・・
>>734 >確実の終わらせたければEnd書いちゃえばいいじゃん
プログラムを強制終了すりゃいいってもんじゃないだろw
>>735 文章が支離滅裂で想像の域を出ないので想像だが
734も言ってるが、Unload抜けた後、フォームにアクセスしてるんじゃないか?
監視ループでExit Doしてないだけだったりしてな
監視ループがDo~Untilだったりしてな
745 :
730 :2005/10/04(火) 09:40:13
おはようございます 先ほどこれで解決かな?というところまでできました やっぱり物を考えるのは、夜中よりも、眠くても朝がいいみたいです・・・ 問題は、 Unloadプロシージャを抜けたでも、フォーム起動時に実行した監視ループが終われず、 終了時にそのループを抜けるようにしたい場合、ループ内にどういう条件を挿入すれば 実現できるのか、ということでした いただいたご回答を読みながらはじめて、なんとなくこういうこと?って気付いてきたもので、 最初からうまく説明できてなくてすみませんでした いままで、引数やプロシージャレベルで何とかすることだけしか考えてなかったんですが、 モジュールレベルで開始・終了のフラグを持つことで、正常に終了できるようになりました 大変お騒がせしてしまって、申し訳ないです 本当にありがとうございました
>>740 また脳みそ足り無そうな書き込みだな。部分だけ捉えて本質理解してない。
ErrをRaiseして、Finallyに該当する機能をどうやって実装するの?
エラーを通知することを問題視してないでしょ?元の
>>721 の書き込み。
絶対に通ることを保証される処理をどうやって記述するかを問題視してるわけで。
適切にモジュール化されてればGotoなんてほぼ不要だよ。
それでもしょうもない直しのときなどで考えるわけで。
VBにはFinallyの概念が無いんから、Try Catch Finally にこだわる必要は無いだろ
>>746 悪いけど「脳みそ足りない」のはむしろ君の方だと思う。
俺は740じゃないよ。
言ってること全然つじつまが合ってない。正直、意味不明。
あんまり無理に背伸びしない方がいいと思うよ。
>>746 どこからFinallyがでてきたんだよ?w
>>721 のどこをどうみてもThrowの代わりとしか書いてないぞ。
>>749 >>721 にきちんと書いてあるけど。
リソース開放の為、Try-Catch-Finallyって。
もしかして、ThrowしてもFinally保証されるっていう仕様を理解してない?
質問させていただきます。 If 〜 Then を使って、 「もし文字列strがアルファベット(A〜Z)ならば」という条件を入れたいです。 確か >= とか <= という記号を使って表すことができたと思うのですが。 記憶違いかもしれません。
条件が曖昧すぎ 比較対照の文字数は1文字なのか不定なのか 小文字は弾くのかどうか つーかこのくらいググればいくらでも出てくるだろう
If Asc('A`) <= str And str <= Asc('Z') Then 例えばこんなん?
それならlikeの方が良くないか?
あそこもツルツルに剃りあがる勢いで禿ワロタw
('A`) 狙いすぎだと思いマスタ
758 :
デフォルトの名無しさん :2005/10/04(火) 23:01:05
はじめまして。 VB6.0でキーボード、マウスの無操作時間を取得したいのですが、なにかサンプルはありませんか? キーボードもマウスも触らない状態で放置しているとスクリーンセーバーが起動しますよね。 その放置している時間を取得したいのです。
マウスが動くごとに時間取得して差をとったら良いとオモ
子供向けのVBには放置プレー向けの道具は備わっていません。
>>758 スクリーンセーバー実行までの待ち時間なら ISBN4-88337-198-0 の本に載ってる
いちいちそんな本を引かなくとも、SystemParametersInfoにSPI_GETSCREENSAVERRUNNINGを渡せばわかる。 758はこんな答えをほしがっているとは思えないけど。
>>762 なんで時間を欲しがってるのにRUNNINGの方を紹介してるの?
シフト演算用は何を使えば良いんですか?
シフト演算子は無いから掛け算・割り算等で代用するよろし
766 :
デフォルトの名無しさん :2005/10/05(水) 03:04:09
VB6.0ですが、pictureで表示した図を拡大や縮小しても 画質を落とさずに表示するには、どうすればいいのですか? ラスタ表現からベクタに表現に変換すればよいらしいのですが 変換のやり方がわかりません。
>>766 拡大縮小したい図はベクタで表現できるような図なの?
風景写真などをベクタにするのは無理に近いぞ
自分でLineなどを使ってPICTUREに書いたのであれば、
書いた座標記憶しておいて割合で倍にすればいい
768 :
デフォルトの名無しさん :2005/10/05(水) 03:38:12
>>767 自分でLineなどを使ってPICTUREに書いたほうです。
ありがとうございました。
769 :
758 :2005/10/05(水) 17:41:28
色々とご教授ありがとうございます。 スクリーンセーバーを起動する時間ではなく、キーボード&マウスを放置している士官を取得したいのです。 ググっても探せませんでしたので、もしご存知の方お教え願えますでしょうか。 何度も質問して申し訳ありませんがよろしくお願いします。
dim Src as string: Src = AppPath & "\temp\" & S dim Dest as string: Dest = AppPath & "\" & S Kill Dest Name Src As Dest 3.で「パス名が違う」ってエラーが出てた後、4.で「既に同名のファイルが存在します」ってエラーが出るんだけど、どうして?
>>769 スクリーンセーバーはキーボード&マウスを動かせばタイマーがリセットされるでしょ。
同じことを求めるにしても他の道からのアプローチは受け入れないって、勉強する気あるのか?
ISBN4-88337-198-0 の本を覘いてみなされ。
その本はWEBに公開されているものを書籍にしてるやつなのだが、 直接的な答えは書いてないなぁ
>>769 VisualC++板か、Win32API板に行くと良いぞ。
マウスとキーボードの非操作期間検出みたいなシステム監視系は VB6みたいなハイレベルな言語では大変だな 簡単な言語のVC++あたりでフックdllを作った方が良いんじゃないか
SPRED3.0でセルの高さが40くらいあるセルに値を書き込んだとき セルの高さの真ん中あたりで表示されるようにするには どうしたらよいでしょうか?
ボタンをクリックしたら、デバイスのプロパティ (デバイスマネージャから見ることの出来るプロパティ。たとえばCOM1とか。) の2タブ目以降を一発で表示させる方法というのはあるでしょうか。 OS:WinXPSP2 VB6 という限定環境でかまいません。 COMでなくてもなんでもいいです。
ログイン認証システムを本などを参考につくってみたのですが、うまくいきません。 DBに接続もできてますし、SQLも単体で動かすと1件データがあるんですが、 RecordCount がなぜか -1 です。 なにが原因なのでしょうか? Private Sub CmdLogin_Click() Dim cnn As New ADODB.Connection Dim cmd As ADODB.Command Dim rst As ADODB.Recordset Dim strSQL As String Dim strID As String Dim strPass As String strID = txtID strPass = txtPass strSQL = "SELECT password FROM tbl_staff WHERE userID =' " & strID & " ' " Set cnn = New ADODB.Connection cnn.ConnectionString = strConnect cnn.Open Set rst = cnn.Execute(strSQL) If rst.RecordCount < 0 Then Msgbox("A") Else Msgbox("B") End If End Sub
ヘルプ見る限り、判らないときは-1という独特の逃げの表現ですね。 その状態で、BOF、EOFはどうなってるの?実際にレコード取れてないの?
>>778 レスありがとうございます。
以下のEOFを追加してみると正しく1件データが
Label2に表示されました。
・
・
・
cnn.Open
Set rst = cnn.Execute(strSQL)
Do While Not rst.EOF
Label2.Caption = rst!Password
rst.MoveNext
Loop
If rst.RecordCount < 0 Then
Msgbox("A")
Else
Msgbox("B")
End If
End Sub
>>779 RecordCountが取れないのは
カーソルの設定じゃないかなぁ。
これをいれてみてもRecordCountは-1ですか?
cnn.CursorLocation=adUseClient
違ってたらすみませぬ。
>>780 無事、RecordCount取れるようになりました!!
ありがとうございます。
・
・
cnn.Open
cnn.CursorLocation=adUseClient
Set rst = cnn.Execute(strSQL)
・
・
782 :
デフォルトの名無しさん :2005/10/09(日) 07:34:50
MSHFlexGridでセルに縦書きするにはどうすれば良いですか? WindowsXP、VB6SP6です
知ってる奴だけ答えればいい。 知らない奴は答えなければいい。
おまえモナー
五.荒らしは相手しない。
>>782 色々考えられるけど、Pictureに縦書きフォントで回転して書いて貼ったり
IE5.5以降が必要とさせてIEコンポーネント貼ったり
短冊状にテキストボックス張ったりラベル貼ったり
ピッコロ
>>789 もちろんセルに貼るって意味だったけど、ヒントでわざわざ言う事か?
┐(゚〜゚)┌
もしかして788=791=793か? だとしたらあwせdrftgyふじこp
>>793 セル自体は縦書きできないって事だろ。
低脳のくだらない突っ込みだ。
本人のくだらない自己フォローだ。
┐(゚〜゚)┌
くだらね〜争いだな モニター縦向きすればいいんだろがw
最近 スレ の回 答レ ベ ル が :
放物線かよ!!!
>>798 故障の原因になるってマニュアルに書いてるよ
もちろん。 ピボット対応のものですら、 故障には繋がらなくても寿命は縮まるからな。
805 :
782 :2005/10/10(月) 14:14:16
ご存じの方が居ましたら
>>782 をお願いします。
>>550 も自分ですが、「出来ない」と回答もらっても結果的に出来たことがあるので、
失礼ながら知らない方、出来ないと思う方は無視して頂いて結構です。
解決するか、MSのSource付きで出来ないという確証が出るまで
自分でも調べながらここでも適度に催促させて頂きます。
>>805 MSはソースつきで出来ないことを示さないといけないのか?
あと、催促は単なる嵐です。
こんなところで催促するならば、PCDNなり@ITなりいけば?
最後二行以外は同意するし同情もするが MSお墨付きが欲しいならインシデント使えよ
808 :
782 :2005/10/10(月) 15:06:19
> MSはソースつきで出来ないことを示さないといけないのか? いや、そんなことは一言も言ってません。 出来ないという証拠があれば諦めるというだけです。 出来るという情報は(やり方が書かれれば)こちらで確認できますが 出来ないという情報は確認のしようがないので。 > あと、催促は単なる嵐です。 これはあなたの個人的主観ですね。 このスレのルールにも2chのガイドラインにも、質問スレでの催促を 荒らしとして扱う旨の記述は見つかりません。 数分おきの催促じゃ荒らしになるかも知れませんが、 それは「催促」が荒らしなんやなくて「連投」が荒らしなわけですし。
>>808 だからPCDN逝けよ、少しは質問の仕方から叩き直してもらって来い。
一.答えられない質問は無駄に罵倒せずスルー。 三.回答する上で必須ではない情報をむやみに聞き返さない。 四.荒らしは相手しない。
, - 、 ゙‐- ' { } r'⌒', `‐-‐' r'⌒', !、_丿 ◯ ヽ-‐' ___ r'⌒', ,,r-‐' `''ヽ、 ○ `‐-' / / \ \ , 、 ,,/ ヽ ● ● ′'─--、,, ,,r-─(_) (__人_) i⌒) `, カワイソス (  ̄ ,r‐  ̄つ '⌒' ,r─‐‐'' (´ ,r──'  ̄ ゙̄'───--------‐'
813 :
デフォルトの名無しさん :2005/10/10(月) 15:16:43
>>808 出来ない情報・・・泥から金が作れますか?作れないなら作れない作り方を教えてください。
貴方がいかに馬鹿なこと書いてるか理解できる?
>>808 まあ、ここには見ての通りバkも多いが
博識な奴も少々はいる
マジで絶対不可能なのかもしれんが
方法を知ってる奴が出てくる可能性もあるから
またーり待ってろ
催促は嵐じゃないがバカどもを相手にしたら嵐だからな
>>813 おまえ、大恥かくから物事をもう少し考えてから物言った方がいいぞ
悪魔の証明のような不確定事項ではなく
作り手が居るものなんだから作り手にとっては不可能の証明も不可能じゃないw
それをする義務が作り手にあるわけじゃないがな
貴方がいかに馬鹿なこと書いてるか理解できる?
>>815 作り手に聞きたいならば、MSDNに入って金出して聞けよ。
あなたが言ってる情報をたとえ知ってる人がいても、ここでそれを出すのはMSDNの契約上不可能です。
いや、俺はこの件に関してはは不可能の証明も不可能じゃないって言っただけで この件についての情報を聞きたい知りたいとはこれっぽっちも思ってないよ
具体的にどうすれば不可能を証明したことになるの?
>>817 だから、あなたが不可能であることをMSに聞きたいんでしょ?
金出して聞け、それだけ。
作り手ならば発言そのものが証明になる 例えばフォームに何のコントロールも配置せず コードも全く書かずにコンパイルしたものに対して 作者なら「この実行ファイルでテキストの編集は不可能です」と言い切れるが 一般のユーザーじゃこの証明は無理だ まぁこの程度なら多少知識が有ればファイルサイズから判断出来るがな
┐(゚〜゚)┌
VBでOSを開発したいのですが、どこから始めればいいのでしょうか?
>>823 1. VBのソースを読んで機械語あるいはアセンブリ言語を吐くコンパイラを作る。
2. アセンブリ言語をマスターする。
3. OSを設計する。
4. コードを書く。起動直後などの重要部分はアセンブリ言語でしかできないのでアセンブリ言語。
しかるべくしたらVBでソースを書ける部分に移れると思う。
当たり前のことを自慢げに書かれてもつまんない
ゲームOSとかだったら素敵なAPI公開してWin32上で動けばいいんじゃね
LoadCursorFromFile で取得したANIファイルを SetSystemCursor でマウスカーソルに設定するトコまではできたのですが、 元のカーソルに復元する方法が分かりまへん。 今、こんな感じ↓ 'システムカーソルを設定。 lCursor = SetSystemCursor(LoadCursorFromFile(sAniFile), 32512) 誰かボスケテ
>>828 Call SystemParametersInfo(SPI_SETCURSORS, 0, Null, 0) でいい?
次俺が質問
VB6でVC++で作ったスタティックライブラリを使う方法ってある?
VBで使えるようにDLL書けばいいじゃないか。
COFFファイルローダーを作ればよい
VBのlink.exeって何に使ってるんだろうね
833 :
デフォルトの名無しさん :2005/10/12(水) 07:06:09
VB6.0を使っています。 普通に計算すると 20.2-20.1の場合 9.99999999999979E-02 となって 20.2-20.3の場合 -0.100000000000001 となります 普通に答えが0.1、-0.1のようにするにはどうしたらいいのでしょうか?
>>833 それは浮動小数点の宿命なんで、Decimal型で計算するといい。
Dim ans As Variant
ans = CDec(20.2) - CDec(20.1)
Dim ans As Decimal と宣言できないところが難点だけどね。
Debug.Print 20.2@ - 20.1@ Debug.Print 20.2@ - 20.3@
VBScriptもOKとのことなので質問させていただきます やりたいことは単にBeep音を鳴らしたいだけなのですが、いくつか制約があります ・wscriptから実行------------------------WScript.Echo Chr(7)をcscriptでってのは× ・外部にファイルを作らない----------------外部にバッチファイルやスクリプトを出力するのは× ・標準環境のWinXPで使える---------------何らかのコンポーネントをインストールしたり、Beepを鳴らす実行ファイル等を使ったりは× ・ダイアログなどを表示させない-------------msgboxで一応音は鳴りますがそういうのは× ・実行から音が鳴るまでのタイムラグが無い---サウンドの再生だとタイムラグが大きいので× (まあVBからBeep鳴らしても、人間が認知できない程度の僅かなタイムラグはありますがそういう突っ込みは無しの方向で) の条件を満たしてBeep音を鳴らす方法を教えてください 簡単に言えば「vbs単体でどんな環境(WinXP)でも瞬時にbeep音のみを鳴らせる方法」です どうかよろしくお願いします
>>836 言語仕様にbeepはないしWSHにも見当たらないから無理なんじゃない。
VBScriptの機能拡張はActiveXでやるのが基本だが、それはやりたくないんだろう?
838 :
デフォルトの名無しさん :2005/10/13(木) 00:13:02
変数を使用しているプログラムの実行時 コンピュータ内部では変数名からその変数の内容が記憶されているメモリ領域を参照していると思われますが そこの流れが理解も想像もできません 説明をお願いできないでしょうか
やべえ煽りたい
>>838 コンピューター内部ではそんな事をしていないから説明しろと言われても困る
841 :
デフォルトの名無しさん :2005/10/13(木) 00:26:29
変数『I』を使用する時 変数『I』の内容がメモリの100番地に記録されていると仮定します 次回『I』がインクリメント(I=I+1)される時に どのような流れで変数『I』から100番地というアドレスを導いているのでしょうか 例えば『I_ADD』みたいなテンポラリ変数に『I』のアドレスが格納されているとしても 今度は『I_ADD』から『I_ADD』のアドレスを求める必要があるワケで 無限ループになってまう気がするのですが
スレ違い。 もっと初心者スレとか行った方が良いよ。
843 :
デフォルトの名無しさん :2005/10/13(木) 00:39:47
>>841 あらかじめ変数領域のアドレスはスタティックに決定されている
変数名の文字数に制限があるのはそのせいだ
A=0000001,B=0000002,AA=0000037…
という具合に変数名そのものがアドレスを意味している
(実際のアドレスは環境により変化する)
だから、突然 HENSUU0001とか言う名前の変数を使用しても
制限文字数以内の名前であるかぎり
既にそのアドレスは決定されています
844 :
841 :2005/10/13(木) 00:44:52
>>843 サマ
ありがとうございました
よく理解できました
メモリも安くなってきたせいか
メモリって意外に無駄な使われ方をされているんですね
>>843-844 普通のスレなら間違いなくネタだと思うところだが、
このスレに限ってはマジでやってる可能性を疑ってしまうなw
まあ、大きな的は外れてないから流すけど、変数名の文字数制限と アドレスに関係性は無いってのだけ指摘しとく。 (P-CODEはそうだったりするのか?) コンパイラの本嫁
CASLでもやってくれって感じもするがな
848 :
デフォルトの名無しさん :2005/10/13(木) 01:16:41
質問させて頂きます。 Winsockコントロールを使用して、POP3サーバから新着メール件数を取得する プログラムを作成しています。 (環境:Win2K・VB6+SP5) 処理としては 1.POP3サーバに接続 2.DataArrivalイベントでユーザ名、パスワード…と順次SendData 3.切断 と行っています。 ほぼうまくいくのですが、まれに 「実行時エラー40006:指定したトランザクションまたは要求のプロトコルまたは 接続状態に問題があります。」とエラーになってしまう場合があります。 手がかりだけでも教えて頂けないでしょうか? また上記エラーはErrorイベントでは拾えないのでしょうか? 長文すみませんが、よろしくお願い致しますm(_ _)m
>>843 PC6000時代のN-BASICはそんなつくりだった気もする。なつかしす
>>849 そんなわけないだろw
馬鹿じゃないの。
x86の32Gの仮想メモリ空間に1バイトごとユニークな文字列割り振るとしても
アスキー5文字で御釣りが繰るのに、Z-80でそれやったらw
>>849 そんなわけないだろw
馬鹿じゃないの。
x86の32Gの仮想メモリ空間に1バイトごとユニークな文字列割り振るとしても
アスキー5文字で御釣りがくるのに、Z-80でそれやったらw
>>849 そんなわけないだろw
馬鹿じゃないの。
x86の32Gの仮想メモリ空間に1バイトごとユニークな文字列割り振るとしても
アスキー5文字で御釣りがくるのに、Z-80でそれやったらw
まあ、お茶でも飲んでもちつけ N60-BASICの変数の識別は頭2文字くらいじゃなかったか?
854 :
デフォルトの名無しさん :2005/10/13(木) 12:54:25
質問です。 一つのプログラムでいくつかのメニューを使おうとしているのですが、それぞれに 共通したサブメニューがいくつか存在するので、デザイン時には実際に呼び出す メニューと共通するサブメニューを別々に作っておき、実行時に InsertMenuItem を使って動的に追加しようと考えています。 メニューが全てフォームに表示されている場合は上手い事追加できたのですが、 非表示の時(フォームにはメニューを表示させず、PopupMenu で出したい)は GetMenu だとか GetSubMenu の値が取れませんでした。 非表示のメニューにサブメニューを追加する方法、もしくは非表示のメニューの メニューハンドルを取得する方法はないでしょうか? そもそももっとマシな方法があるだろ、というのがありましたらヒントくださいm(_ _)m
>854 非表示のメニューは取得できないよ。 なぜなら非表示のメニュー削除されてるから非表示であって 元からあるモノをを非表示にしている訳ではない。 元々WindowsにはメニューのVisibleは無い。 多分VBのメニューは Visible=Falseは RemoveMenu() でメニューを消して Visible=Trueは InsertMenu() でメニューを追加している という動きだと思うよ 動的に追加ってメニューを配列にしてLoad Unload じゃ駄目か?
856 :
854 :2005/10/13(木) 18:01:39
>>855 分かりやすいレスありがとうございました。
提案していただいた Load / Unload をやってみようと思いましたが、ベタに
メニューを作るよりもコードが長くなってしまいそうなのでやめました(´Д`)
結局、一つのメニューに全部突っ込み、PopupMenu の直前に共通でない
項目の Visible をごちょごちょいじくる、という方法で乗り切ることにしました。
お騒がせしましたm(_ _)m
>>854 もう解決済みの様だけど、この方法ならそれなりにスマートかなと思うので書いておきます。
' frmMain - メインフォーム
Public Sub popDebug_Click()
' ポップアップメニュークリックイベント
End Sub
Private Sub Form_Load()
Load frmPopup
Me.Visible = True
End Sub
PopupMenu frmPopup.mnuPopup1 ' ポップアップ呼び出し
Private Sub Form_Unload(Cancel As Integer)
Unload frmPopup
End Sub
' frmPopup - ポップアップメニュー専用フォーム
Private Sub mnuDebug_Click()
frmMain.popDebug_Click
End Sub
各メニューに共通した動作をさせる時も変更する時も
frmMain の飛び先を変えるだけで済むので私はこの方法を使ってます。
858 :
854 :2005/10/13(木) 19:43:31
>>857 実は似たような方法を実装した事がありました。
表示したいメニューとサブメニューを別のフォームに並べ立て、そっちの
Load イベントでサブメニューの構築、各項目の Click イベントで RaiseEvent を
ガンガン書き、呼び出し元に Private WithEvents Menu As frmMenu …という感じで。
わざわざ RaiseEvent でやる必要もなかったわけだ orz
Visual Studio Installerにてインストーラーを作りたいんですが、 インストール時に、msado25.tlbの登録でエラーが起こります 検索でTips探して、なんとか関連付けのタイプライブラリにLibIDを登録すればいいと わかりましたが、それをしてもエラーが起こってしまいます OLEViewでMicrosoft ActiveX Data Object 2.5 LibraryのIDを確認して、 タイプライブラリを追加>LibIDを登録、としているんですが、 これは何か間違ってるんでしょうか アドバイスお願いします
>>843 ネイティブコンパイルすれば変数名は消えるのでは?
WebBrowserで、ハイパーリンクを開く処理はどのようにすればいいのでしょうか・・・ SubmitやClickと違って、URLを探し出してからNavigateする処理になるのでしょうか?
863 :
デフォルトの名無しさん :2005/10/15(土) 01:38:44
VB6で、2つのwavファイルを結合するにはどうしたらできますか?
864 :
デフォルトの名無しさん :2005/10/15(土) 06:34:14
スレをざっと見たけど、お前らが他人に大して無礼だと感じたり、憤りを 感じる基準が前々わからねえ、性格歪みすぎてるんじゃねえ?
↑やべぇ!おかしい人だ!
5.0でVBからVCに変換する機能があると聞いたのですが 具体的にどのような機能でしょうか?
> 聞いたのですが それを聞いたところに聞き直して 結果をここに報告汁
869 :
867 :2005/10/15(土) 16:27:45
そうですよね・・・orz
VBからVCにって何を変換するの?
ソースじゃねーの?
編集->置換
VBからVCにしたいって? ベンチャー板に逝け
VBではないのですがEXCEL相談所などで、こちらへ聞いたらといわれたのですが、 またプログラマでのなんでもないのですが、アドバイスお願いします。 ADOでパラメータクエリを作成し、複数のアクセスMDBファイルから クエリでデータを取得するプログラムを作っています。 このときいくつかのMDBには存在しないフィールドに対しても、クエリを実行するのですが、 当然エラーが出ます。 On Error Resume Next Set rs = New ADODB.Recordset Set rs = cmd.Execute としても、次に飛んでくれないで、黄色い表示のデバッグになってしまうのですが・・・・エラーメッセージは以下です。 "実行時エラー'-2147217904 (80040e10)': 1つ以上の必要なパラメータの値が設定されていません。 クエリや他の部分はフィールドが存在するときは正しく動いています。フィールド名を事前に取得して チェックさせれば良いのでしょうが、このエラーだけresumeが効かないのが理解できません。
875 :
デフォルトの名無しさん :2005/10/17(月) 07:02:18
質問させてください bookmarkってレコードセットに戻せないんでしょうか? オブジェクトを閉じる前にカレントレコードを取得しておいて 新規にオーペンしたレコードセットのカレントを、 取っておいたbookmarkの位置にしたいんです…。 できないのであれば別な方法ありますでしょうか?
えーと、DB操作というかDBでの処理ってそういうもんじゃないだろ? まあやるならば、そのカーソル位置のレコードのキーを覚えておけばいいんじゃないの?
877 :
デフォルトの名無しさん :2005/10/17(月) 17:30:58
ストアドをどう作ったらいいの判りません…orz DB側に置いてクライアント側で呼び出すって流れを知ってる程度です サンプルとか解説HPあれば是非教えて下さいm(__)m
データベース板に行けば?
881 :
猫舌仮面 :2005/10/17(月) 22:11:42
他言語でいう 「(条件式)?(条件真の値):(条件偽の値)」の記述が分からずに困っています 以下のような文にしたいのですが どうか教えてください VAL = INPUT_NAME() print "あなたは" & (VAL = "猫舌仮面" ? "天才" : "マヌケ") & "です" よろしくおねがいします
IIf
883 :
デフォルトの名無しさん :2005/10/17(月) 22:28:34
>>881 少しだけ長くなるけどこんな感じかな?
VAL = INPUT_NAME()
print "あなたは"
if VAL = "猫舌仮面" then print "天才"
if VAL <> "猫舌仮面" then print "マヌケ"
print "です"
うーん、不思議な現象を目撃した感じ。
885 :
猫舌仮面 :2005/10/17(月) 22:39:34
>>883 ありがとうございます
ソースは短い方が好きなので
もう少し
短くする方法はないでしょうか
888 :
猫舌仮面 :2005/10/17(月) 22:48:05
あ、失礼しました 猫舌に言っていると気がつきませんでした iif 使い方を調べてみます 素早い回答 ありがとうございでした
iifは両パートを見るから注意しろよ。 0除算とか、Nothing参照とか。
890 :
883 :2005/10/17(月) 23:00:21
>>885 >もう少し短くする方法はないでしょうか
んじゃこんな方法もある
VAL = INPUT_NAME()
if VAL = "猫舌仮面" then print "あなたは天才です"
if VAL <> "猫舌仮面" then print "あなたはマヌケです"
883が激しく勘違いしている件について。
そっとしといてあげましょう
iifなんて使うのはガキだろ
894 :
883 :2005/10/17(月) 23:10:38
何か勘違いをしていましたか よく分からないけどスルーしてください ちなみに私は893でもヤクザさんでもありません iifも知りませんが 初心者の頃はお子様ソースでも構わないと思っています スルーしてください
コードの短さより、コードの見やすさと速度を優先してIfステートメント使うのが基本だが、 状況に応じてIIf関数使うのも悪くはない。 少なくとも「iifなんて使うのはガキ」とか言い出す奴がガキなのは間違いないが、 IIf使う奴はガキとは限らない。 要は臨機応変だよ。893みたいなガキには難しいかもしれないけど。
状況に応じてIIf関数使う?お前俺を笑い殺すかw Ifで書けることを、速度を遅くしてまでIIfを使うのに臨機応変もなにもない。
IIf使うと遅くなるってのは本当なのか? わざわざ遅くなるようなネイティブコードに展開するような馬鹿なコンパイラが あるとは思えんがね俺は。
IIf関数は絶対に使わない、If...Then...Else...構文を使う方が速い。この原因として、IIf関数は内部でIf構文を呼び出していると思われる。関数事体を知らない人も多いと思われる。
読み方はIFがイフでIIFはニフだよな?
IIFはAccessでお世話になったなぁ……
Private mCount As Long Function a() mCount = mCount + 1 a = "a" End Function Function b() mCount = mCount + 1 b = "b" End Function Private Sub Command1_Click() Dim r As Variant mCount = 0 MsgBox CStr(mCount) r = IIf(True, a(), b()) MsgBox CStr(mCount) End Sub IIf koeeeeeeeeeeeeeee!!!!!!!
> IIf使うと遅くなるってのは本当なのか? 本当だよ。 条件判断して、真の場合と偽の場合とで別々の値を変数に代入するIfステートメントと 同等処理をIIf関数を使って書いた場合とでは後者の方が遅い。 但し2GHz前後のCPUだと0.000001秒くらいの差。 これを気にするならVBなんか使うなって話だな。 認知度を理由に共同開発などではIIf使うなってのはもっともな意見だが 速度を理由にIIf使うなって言ってる奴はバカでしかない。
怖いって、条件の成立/不成立に関わらず両方の式が評価されるってMSDNに ちゃんと書いてあるじゃん。 まあ三項演算子の代替物だと思って使うと確かにアレだが、 そんなもんロクにマニュアルを読まずに使うほうが悪い。
まぁ、煽り合いは止めようぜ。
ではここまででiifの件は終了 これ以上続ける奴は負け犬の遠吠えってことで放置
LeftBの使い道を教えてくれ
質問です。前にC言語で作った物を今度はVB6.0で作ってるのですがどうも考えが纏まりません。 アドバイスよろしくお願いします。 その問題ですが、「文字列をテキストボックスに入力して、文字列中に数字列が存在したら整数とみなし、 数字を取り込みそれらの合計を表示する」 例:ABC12HHHsk36LHin191***20と入力した文字列の数字合計→12+36+191+20=259 答え:259 といった形です。 Mid関数を利用して文字列から一文字づつIsNumericで判定していくというところまでは考えたのですが、 この先をどうしたらいいのかさっぱり思いつきません。漠然的な質問で申し訳ありませんが この先どのようにロジックを組めばいいかアドバイスおねがいします。
学校の宿題は自分でやらないといけないと思います。 つーか、わかんなかったらこんなとこじゃないくて友達に聞こうよ。
Cでそのロジックが作れてVBで作れん理屈はない希ガス
ターメリックが連続したら&でくっつけて整数化すれば? 最後に各整数を合計 はい、次
aからbまでの乱数生成の式は、 int((b-a+1)*rnd)+a これであってますかね?
int((b*rnd)+a) でOKだろ randomaize忘れるなよ はい、次
>>913 をいをいw
二つも間違ったこと教えるなよ
int((b*rnd)+a) > a=1の場合しか使えない
randomaize > スペル間違い
VBはウコン言語だな
変数宣言時にDim AAAA&と、変数名の語尾に「&」をつけるのはどういった意味があるのですか?
>>917 古くからBASICやってた人が書いたソースだと見分ける意味があります
>>917 as long といっしょ
$ だと as string
# だと as double
とか
>>918 ,919
回答thx。アドレス演算子かなぁと激しい間違い起こすところでした。
921 :
初心者 :2005/10/18(火) 10:39:15
始めまして。質問させてください。 最近VBの勉強を始めたばっかりで、今並べ替えのプログラムを作ろうと思って いるのですが、アルゴリズムやコントロール配列についてわからないので 教えてください。
>>921 検索エンジンで「ソートアルゴリズム VB」をキーワードに検索すれば手ごろなページはなんぼでも出てくる。
ソートとコントロール配列の関係は俺にはわからん。
923 :
初心者 :2005/10/18(火) 11:03:59
それで調べたのですがよく理解できなかったので質問しました。もう一度 調べてみます。ありがとうございました。
上司か先生かにソートのプログラム作れって言われたのかな 古いが定石だな
ネタの質問に食いついてくる馬鹿なVB厨を見て笑ってるだけだと思うけどな俺は。 お前、そんなに人様に教えを垂れたいのか、ってw どう考えても釣りだろうよ。猫舌だの初心者だのってw
ネタの度に糞スレ立てられるよりマシ このスレで釣られてるヤシは最後の良心 回答せずに文句だけ言うヤシなんてこのスレに(゜凵K)イラネ
いまどきVB6の宿題だすなよなー
929 :
908 :2005/10/19(水) 16:25:14
>>909 、
>>910 、
>>911 遅レスすみません。何度かフローチャート作って考えてみた結果
>>911 の書いた
部分が足りていなかったなど、数箇所足りない部分がありました。
スレ汚しすみませんでした。
ちなみに、自分VBとC言語は趣味で勉強してるのでそういった友人いないんですよ…
930 :
デフォルトの名無しさん :2005/10/20(木) 01:29:57
たとえばiniファイルに [SET] Docu="C:\1.txt" とあって コマンドボタンクリックしたときにメモ帳で1.txtを開く。 iniファイルが [SET] Docu="C:\2.xls" だったときはEXCELで2.xlsを開く。 なんていったのはどうすればいいですか? Private Sub Command1_Click() Dim Ret As Long Dim ini AS iniファイルから読んだファイル名 Ret = Shell(ini , vbNormalFocus) End Sub だとエラー出るんですよね。 Ret = Shell("C:\WINDOWS\CALC.EXE", vbNormalFocus) だとちゃんと電卓起動するんですが。
ShellExじゃなくてShellExecuteだった
VB6でのWinsock Control 6.0の礼儀作法について教えて下さい。 TCPで相手にバイナリファイルを送信しようとしてるんですが SendDataって Open "c:\hogehoge.dat" For Binary Access Read As 1 Get #1, cnt, rec SendData rec cnt = cnt + 1 Close #1 ってな具合に1バイトずつ送るもんなんでしょうか? それとも変数に詰め込めるだけ詰め込んでからSendDataしてやれば 後はWinsockが裏側でお膳立てしてくれるもんなんでしょうか? どっちが標準的なやり方なのか(それともどっちも間違いなのか)が分かりませぬ…
935 :
デフォルトの名無しさん :2005/10/20(木) 14:06:40
関数の引数に#がついている場合.何の意味があるのでしょうか? func 0, 0, 0#
937 :
デフォルトの名無しさん :2005/10/20(木) 15:31:03
vb6からaccess2000のマクロの実行の仕方教えて!
>>937 access.application
run
あとは自分で調べろ
939 :
デフォルトの名無しさん :2005/10/20(木) 20:33:33
ツールバーコントロールで、スタイルをフラット、 チェックにしたボタンを押した状態で無効にすると、 枠が描画されず、ホットイメージのままになります。 オーナードロー以外の回避策を教えてください。
940 :
デフォルトの名無しさん :2005/10/20(木) 20:41:22
DiskMirroringToolっていうミラーリングツールの公開されているソースを参考にし、 ミラーリングツールを自作してみたのですが、なんか、変な現象に悩まされているです。 自作のツールのみを起動させて実行させるとコピー速度が遅いのですが、 DiskMirroringToolと一緒に起動させて、走らせると、DiskMirroringToolが コピーしている間だけ、自作ツールの方のコピー速度もつられて(?)早くなるのです・・・。 こんなことって、何が原因で起こってるか分かりますか?
941 :
940 :2005/10/20(木) 21:06:03
あ、書き込むところ間違えました。 無視してくださいT.T
942 :
デフォルトの名無しさん :2005/10/20(木) 22:47:42
>>943 String*でコントロールコード含むファイルからデータ読んだらダメ
Dim recdat(500) as byteみたいなbyteで受ける必要がある
ただ、lof関数使ってサイズの確認しながら読まないといけないので注意する事
>>943 SJISをUNICODEに変換してるから化けてるの
VBのStringはUNICODEだよ
SJISで読みたい時 又は そのままで読みたい時はByte型で
>>943 ADODB.Streamを使うと楽かもよ
948 :
デフォルトの名無しさん :2005/10/21(金) 12:30:56
Code Advisor for Visual Basic 6を試しに使ってみたが、 これ、なかなか良いな。C言語におけるlintみたいな感じの ツールだ。
質問です。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/4226dabe-7e71-453d-b4e0-0f8b03525f72.asp で、XMLHTTPオブジェクトのonReadyStateChangeイベントをハンドラする方法がありますが
このイベントはJavaScript(JScript)などのDOM上の関数ポインタで扱う設計なので
従来のVB6のCOMのイベントハンドラの方法とは違います。
このサンプルを見ますと、3つの方法のうち、クラスモジュールでラッパークラスを作成してハンドラする方法がありますが、
クラスモジュールのSub OnReadyStateChange()のプロシージャIDをクラスの既定に設定し
実際ハンドラを結びつけるのはフォームモジュールに書いてあると通り、そのクラスインスタンスを参照させることで実現していますね→★の行
Public XMLHttpRequest As MSXML2.XMLHTTP30
Private Sub ClassResolution()
If Not XMLHttpRequest Is Nothing Then Set XMLHttpRequest = Nothing
Dim MyOnReadyStateWrapper As MyReadyStateHandler
Set XMLHttpRequest = New MSXML2.XMLHTTP30
Set MyOnReadyStateWrapper = New MyReadyStateHandler
XMLHttpRequest.OnReadyStateChange = MyOnReadyStateWrapper '★
XMLHttpRequest.open "GET", "
http://localhost/test.xml ", True
XMLHttpRequest.send
End Sub
このプロシージャIDを既定値をするとそのインスタンス名は関数ポインタと同じ動作になると言うことでしょうか?
説明できる方いましたらお願いします。
950 :
949 :2005/10/21(金) 17:04:51
XMLHttpRequestオブジェクトの使い方ではなく このVB6で行っているイベントハンドラの仕組み自体が知りたいのです、 VBSでさえ、GetRef関数を装備して関数ポインタが扱えますね。 VB6は設計が古いのは残念です。
そりゃ5年近く(正確に覚えて無いから、もしかしたら以上?)前のものだから古いのは当然だろ 古いのが嫌ならVB.NET使え
RGB関数で色番号(?)を取得できますが、それからRGBそれぞれの値を逆算する方法はありますか?
954 :
952 :2005/10/21(金) 19:21:52
色番号は Red + Green * 256 + Blue * 256^2 のようですね。解決しました。
955 :
デフォルトの名無しさん :2005/10/21(金) 23:10:08
タブでテキストボックスにフォーカスを移したとき テキスト全体を選択するために GotFocus ハンドラに .SelStart = 0 .SelLength = Len(.Text) と書いています.テキストボックスが複数あるとき ひとつずつ書かなくてすむ方法があったと思うのですが, どこで見たか忘れてしまいました. どなたか思い出させてくれないでしょうか?
テキストボックスをコントロール配列にするか、 選択範囲の設定処理を関数に分離して、各GotFocusから呼び出す
そんな面倒なことしなくてもユーザーコントロールにしちゃえばもっと楽じゃん
958 :
デフォルトの名無しさん :2005/10/22(土) 00:55:05
VB画面からUNIXサーバ上においてあるSHELLを起動したいのですが 方法を教えてください。リフレクションのVBAとかじゃなくて 普通にVB6で作成した画面からリモート越しにSHELLを起動したいんです UNIXはソラリスの。ええと今バージョンはわかりません Cシェルで作成しているコマンドとできればCで作られた実行ファイルの FilegetInfoというファイルを実行したいのです。
>>958 めんどくさいから、SystemWalker/OPとか入れちゃえ
質問です。 VSFlexGrid・VB6使用中です。 For i = 0 To 10 .TextMatrix(i,1)="AAA" Next とかする際に指定するcolの部分の値。 ここを下みたいに固定の定数にしたいのです。 For i = 0 To 10 .TextMatrix(i,ColName1)="AAA" Next で、EnumでやってもCONSTでやってもうまいこといかないし、 指定する方法が思い出せないのです。。 以前、触った記憶はあるのですが。。。 下記のようなEnum風の宣言方法だったのですが。 Public ●● ColName1 ColName2 ColName3 End ●● 以上です。よろしくおねがいします。
EnumでもConstでも出来る 出来ないんだとしたら根本的に何か間違ってるんだろうな
>960 多分Enumの宣言でColName1を1と宣言したいんだと思う ColName1 = 1 ってやってないってオチ 「 = 1 」省略すると 0 になるよ Public Enum AAAAAAAAAAA ColName1 = 1 ColName2 = 2 ColName3 = 3 End Enum
後の2、3は要らん
965 :
pada :2005/10/23(日) 16:53:03
質問です。 Webサーバーにある画像ファイルを、一覧(スプレッドシートでも可)にサムネイル表示 することは可能ですか?
>>965 可能なように設定すれば可能。
まずは、「不可能かも」と思った理由を述べるが良い。
ついでに、どの辺りがVB6.0とかかわるのかも述べなさい。
>>966 その問題の配点はどれくらいになりますか?
968 :
デフォルトの名無しさん :2005/10/24(月) 01:12:10
VBでPowerPoint 2000用のアドイン作成したいのですが 今手持ちのVisual Studio 6.0 EnとOffice 2000 Pro(お客さんの環境) で可能なのでしょうか、なにぶんどこを探しても2000 Devはないと言われる始末 困った助けて
>>968 出来るけど2000Devのマニュアル無いと辛いね
MSDNの中から関連する内容を探し出さなきゃいけない
2000のマニュアルだけ入手できないものかぁうーん
Office XP Developerマニュアルだけ買って 試行錯誤っていう選択は激しくありえないでしょうか?
972 :
pada :2005/10/24(月) 02:07:41
>>966 基本DBはMS-ACCESSです。但し、画像ファイルのみWEBサーバーにあるものを参照
する。というものです。
VBの一覧にはACCESSのデータを表示します。
サムネイルする部分はACCESSのデータに入っているパスを参照します。
私の知る範囲では、Picuteboxでloadpictureで読み込む。
という事位なので、実現させる為には一覧にpictureboxを貼り付ける(イメージとして)
とか、リストの隣に行数分のpictureboxを置く。
位しか浮かびません。
何か、他にオブジェクトがあるんでしょうか?
>>971 有りだとは思うけど、XML関連ダッシュボード関連の追加、その他色々細かい修正有るみたいだから本が違ってても気にしない事
次スレ テンプレ追加 ・「ありますか?」という質問に「ある」だけで回答するの禁止。 ・「可能ですか?」という質問に「可能」だけで回答するの禁止。
逆だろ?回答を禁止するのではなく、その質問を禁止すべき。 あるない、出来る出来ないを聞きたいならばその回答でクローズでいいじゃない。 もっと具体的に聞きたいならば、どこまで試して何がだめか書くべき。 それをせずにすべて教えてっていうならば、最初から全部ソースくれって書けと。 相手にされるかは知らんが。
次スレ テンプレ追加 ・質問禁止
次スレ テンプレ追加 ・書き込み禁止
次スレ テンプレ追加 ・×最初が「ア」 ・バンガ愛護 ・土水火風禁止
テンプレいじったところで効果はないけどな
>>981 同意。
「ある」「可能」という回答が、「テンプレ読め」に置き換わるだけだものな。
そのテの質問してくるヤツはテンプレなんて読まない。 ちゃんと質問してくる人はちゃんとテンプレも読んでいる。 テンプレに追加が無駄だとは言わないけれど、 「禁止」だけじゃなくて具体例ぐらい書かないと効果ないかもね。
>>972 見栄えをあまり気にしないなら、ListViewで。
見栄えを気にするなら、必要枚数のpictureboxを配置するのは十分妥当だろ。
めんどくせ〜 WebBrowser1.Navigate "C:\画像リスト.html"
>>985 ちょwwwwwおまwwwww天才wwwwwwwww
VBではないのですがSPREDコントロールのセルで チェックボックス型にしているのですが これをalignをcenterにしたいのですが方法がわかりません。 ご存知の方がおられましたらご教授お願いできますでしょうか。 よろしくお願いいたします。
>>987 SPREADのバージョンは?
俺のは3.0だけど、SPREADデザイナのメニューから
[セル]→[セル型]→[チェックボックス]で表示される
ウィンドウの中に「水平位置」「垂直位置」ってのがあるよ。
>>988 データソースを直接表示しているせいか、そこを設定しても
なぜか元に戻ってしまいます。
コードで変更できる方法はないものでしょうか・・・
すみません。できました。 .TypeHAlign = TypeHAlignCenter でした。ありがとうございました。
MSDEに接続する方法を教えてください。 DBのある場所:192.168.0.28 DB名:testdb001 テーブル名:test001 ユーザー名:test PASS:test で Private Sub cmdConnectTest() Dim cn As Object Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=SQLOLEDB;" & _ "Initial Catalog=testdb001;User ID=test;Password=test;" & _ "Network Address=192.168.0.28;" Dim rs As Object Set rs = cn.Execute("select * from test") Do While Not rs.EOF Debug.Print rs.Fields(1).Value rs.MoveNext Loop End Sub だと接続できないって言われます。 まぁこのコード自体はwebから持ってきたんですけど。 どう変更すれば良いでしょうか
992 :
991 :2005/10/25(火) 13:59:21
追記 VB6でMSDEにADO接続したいんです。
>>991 "Network Address=〜"を削除して、"Data Source=データベースサーバー名"を入れるといい。
でもNetwork Addressってどこから出てきたんだろ?
質問です。 フォームのLoadイベントが走ったときにコントロールのVisibleを制御しようとすると、 時々いくら変更しても初期値のまま変わらないことがあります。 きっちり調べたわけではないので勘違いかもしれませんが、 Showした時に走るLoad医弁tおでは起こらず、Loadされていないフォームの Public関数を呼んだ時に走るLoadイベントで発生するようです。 これは何が原因なのでしょうか。 参考になるドキュメントなどがあれば教えてください。
995 :
994 :2005/10/25(火) 17:26:59
一応age。 あと、次スレ立てないとまずいですよね?
次スレ立てないとまずいねえ。
Showした時にLoadイベントが発生しないのは既にFormがロードされているから。 ロードされているけど非表示でFormは見えていない。 >Public関数を呼んだ時に走るLoadイベントで発生するようです。 そのメソッドのコールで初めてFormがロードされたから。 Showされたからと言って必ずLoadイベントが発生する訳では無いので Showされる前のFormのロード状態をよく調べてみ Loadイベント発生の目安は 『初めてFormのメンバーにアクセスした時』 『Loadステートメントで無理やりFormをロードした時』 『FormをNewした時』 位しか思い浮かばない…
>>997 いや、ShowとLoadの関係は分かってるんです。
というか、ShowされたときにLoadイベントが走らないと言ってるわけではなく、
Loadイベント内でコントロールのプロパティを変更したときに、その変更が効かず、
デザイン画面で設定した値のまま表示されてしまうことがある、という件なんです。
フォームがメモリ上にロードされていない状態で、
・Showする → Form_Load() → プロパティ変更OK
・Public関数を呼ぶ → Form_Load() → プロパティ変更NG
という現象が起こる理由が知りたいのです。
ああ、もうスレが埋まる・・・
私はこのスレのテンプレとか流れとか知らないので、誰か次スレ立ててください・・・
Σ( ̄□ ̄;)1000!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。