VBプログラマ質問スレ(6.0以前) Part45
1 :
ぬるぽ :
2005/12/08(木) 02:41:26 ∧_∧ ( ´∀`) < ぬるぽ
2 :
デフォルトの名無しさん :2005/12/08(木) 02:41:46
今だ!2ゲットォォォォ!!  ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∩ ∩ 〜| ∪ | (´´ ヘノ ノ (´⌒(´ ((つ ノ⊃≡≡≡(´⌒;;;≡≡≡  ̄ ̄ ̄(´⌒(´⌒;; ズズズズズ
○ 質問者の心得 一.質問する前に過去ログにも目を通してみる。 二.質問する前に MSDN などで調べてみる。 三.VBScript はこのスレでOK。 四.インストーラーなどの質問もOK。 五.荒らしは相手しない。 六.VB.NETの話題はできるだけひかえる。 七.質問は第三者にもわかりやすいよう簡潔かつ具体的に。 ○ 回答者の心得 一.答えられない質問は無駄に罵倒せずスルー。 二.代用法を強制しない。 三.回答する上で必須ではない情報をむやみに聞き返さない。 四.荒らしは相手しない。 五.VB情報募集中。 六.VB.NETの話題はできるだけひかえる。 七.回答は質問者が理解できるよう具体的に。
新スレついでにしつもん。 VB6、DAO3.51でエクセルファイルをデータベースとして読み込んでいた。 そのときは範囲名(セルの一定範囲に名前つけるやつ)をそのままテーブル として使えたが、DAO3.6にしたらそのままでは読めなくなった。 シート名の場合は末尾に$だが、範囲名は末尾に何つけたらおk?
明日は有休ですが何か?
Set WshShell = WScript.CreateObject("WScript.Shell") Do Set objExec = WshShell.Exec("D:\Program Files\hoge.exe") WScript.sleep 3000 Wshshell.SendKeys "{ENTER}" WScript.sleep 120000 objExec.terminate WScript.sleep 300000 Loop これでエンターを送ったあとに既に起動しているhage.exe(hogeとは別物)を終了させたいのですが、どうやったら終了出来ますか? OSはXPです。 Alt+F4を送る以外のやり方でご教授お願いします。 全くの初心者でどこで聞いたらいいのかよくわからなくて・・・スレ違いだったらすいません。
SendMessage
11 :
デフォルトの名無しさん :2005/12/09(金) 09:18:02
BASP21を利用して メールで添付されてきたCSVファイルを取り出して 指定したフォルダに 自動的に保存したいのですが。 「 output = bobj.ReadMail(file, nobody, Folder) 」を 下のコードの中にどのように追加すればいいでしょうか? Dim bobj, ar Dim Server As String, User As String, Pass As String, Command As String, Folder As String Set bobj = CreateObject("basp21") ''BASP21オブジェクト Server = "pop.xxxxx.com" ''POP3サーバー User = "toru_tanaka" ''アカウント名 Pass = "password" ''パスワード Command = "SAVEALL" ''コマンド Folder = "<" & ThisWorkbook.Path & "\mail" ''保存するフォルダ ar = bobj.RcvMail(Server, User, Pass, Command, Folder) If IsArray(ar) Then MsgBox "メールを受信しました" Else MsgBox "新着メールはありません" End If Set bobj = Nothing
WinXP(SP2) VB6.0(SP6)にてframeコントロールの中にoptionコントロールを配置したものをコンパイルしました。 作成された実行ファイルをmanifestファイルを使用して起動したところ、 frameコントロールにそのままoptionを配置しているにもかかわらず正常に表示されました。 frameコントロール内の表示バグが改善された原因をご存知の方は見えますか? コンパイルしたコンピュータで正常に表示されていれば、他のコンピュータでも正常に表示されると思っていいのでしょうか?
ここは
>>1 をヌルーして1000を目指すスレになりますた
ポ
FAQ Q.文字列関数の後ろの$って何? A.$なしはVariant型、ありはString型を返す、また速い。$付きにNullを渡すとエラーになる。 Q.そのNullエラー現象がうっとうしいんですけど回避策はありますか? A.文字列変数 = Null入り変数 & "" みたいに空文字列をつなげてください。 Q.モジュールレベル変数宣言のDimとPrivateって何が違うの? A.モジュールレベル変数宣言のDimは古い構文。 ちなみにVB.NETではPrivate Dimが正式構文で、しかもIDEがDimを自動で消す。 Q.CommandButtonにPictureプロパティを設定しても出てこないんですが? A.Styleプロパティをグラフィックスにしてください。 Q.フォームのアイコンをなしにして、かつ×ボタンを出すってできる? A.BorderStyleをツールウィンドウにしてください。 Q.それだとタイトルバーが細くなるからいただけないんだが? A.なら固定ダイアログにしてIcon = Nothingにしろ。 Q.それだと可変が出来ないじゃないか。 A.まずMSのガイドラインでは「ダイアログ」は大きさ固定を原則としていることを知れ。 それでもやりたけりゃSetWindowLongでWS_THICKFRAMEを設定しる。 Q.Foo(1)はいいけどBar(1, 2)と引数が2個以上だとエラーに。なぜ? A.Callをつけないときは括弧なし。Foo(1)の括弧は引数の括弧じゃなくて式の括弧。
>>17 の最後のAに補足。
Foo(A) と Foo A では、引数がByRefのときに結果が変わります。
括弧で囲むと式の結果値が渡されるので、ByRefでもAの値は変化しません。
VBに ぬるぽ はありません
別フォームの**を〜、のAも欲しいな。 お前が書けといわれそうだが文才がないので遠慮しときます。
>>19 VBのぬるぽはこいつだ。
実行時エラー 91 : オブジェクト変数またはWith ブロック変数が設定されていません。
>>17 の最初のAに「型宣言文字というもの」を入れてください。
rnd関数について教えてください。 VB6sp6で麻雀ゲームを作っているのですが、山を積む方法で困っています。 一応トランプのシャッフルなどで説明を見かける方法で 以下のように作ってみたのですが、ランダムの精度(?)が低く、 これの1000回試行を何度か行ったところ、だいたい1000回のうち10〜30回ほど 同じ山が積まれてしまいます。 シャッフル回数を増やしたり、またそのシャッフル回数自体をrnd関数で 決めてみたりといったことは考えてみたのですが… どうも根本的な解決にはならないような気がするので、何か別のいい方法があれば 教えてください。 INIT_HAIYAMA:シャッフル前のソートされたコレクション HAIYAMA:シャッフル後のコレクション Do Until INIT_HAIYAMA.Count = 0 Randomize i = Int(Rnd * (INIT_HAIYAMA.Count - 1)) + 1 HAIYAMA.Add INIT_HAIYAMA.Item(i) INIT_HAIYAMA.Remove(i) Loop
カードのシャッフル程度の用途は組み込みの乱数で問題ないはずだと思うけどね。 とりあえずループの中で毎回Randomize呼ぶのは問題でしょうな。
25 :
23 :2005/12/12(月) 13:20:53
Randomizeを外に出したら重複は減りました。 が、やっぱりまだでます。1000回のうち一桁程度ですが。 そういうものなのか、それともまだコードにおかしな点があるんでしょうか? なお、牌の枚数は、三麻なので28種112枚です。
i = Int(Rnd * (INIT_HAIYAMA.Count - 1)) + 1 はおかしい。 0 ≦ Rnd < 1 なのだから上式だと 1 〜 INIT_HAIYAMA.Count - 1 の範囲の乱数になる 配列の基数が 1 なら i = Int(Rnd * INIT_HAIYAMA.Count) + 1 としないとダメ
27 :
23 :2005/12/12(月) 14:17:39
そうですよね。Collectionだし。これだと最後の牌が固定になりますね。 きちんとチェックせずにサンプルコードぺたぺたやってると恥かきますね。(´・ω・`)
Q.変数や関数の後ろに$とか%とか付いてるのを見るんだけどあれは何? A.型宣言文字。%=Integer, !=Single, #=Double, $=String, &=Long, @=Currency VBから追加されたもの(@)もあるが、基本的に古い構文の名残です。 ただし文字列関数の$は、Variantを扱うかStringを扱うかの違いで現役。
前スレより下がりそうw
どこに前スレが有るんだ?
>>29 1000いったスレより下がるわけないだろアホ
Q.四捨五入を……。 A.ベストとは思いませんがとりあえず。もっと簡単なの募集。 '切り捨て '10 の Place 乗の位で切り捨てる。 'Place = 2: 100 の位 'Place = 0: 1 の位 'Place = -1: 小数第 1 位 (既定値) Public Function Omit(ByVal Number As Variant, Optional ByVal Place As Long = -1) As Variant Dim Power As Double Power = 10 ^ (Place + 1) Number = Number / Power Omit = Int(Number) * Power End Function
'切り上げ '10 の Place 乗の位で切り上げる。 'Place = 2: 100 の位 'Place = 0: 1 の位 'Place = -1: 小数第 1 位 (既定値) Public Function Revalue(ByVal Number As Variant, Optional ByVal Place As Long = -1) As Variant Dim Power As Double Power = 10 ^ (Place + 1) Number = Number / Power Revalue = -Int(-Number) * Power End Function
'四捨五入 '10 の Place 乗の位で四捨五入する。 'Place = 2: 100 の位 'Place = 0: 1 の位 'Place = -1: 小数第 1 位 (既定値) Public Function RoundOff(ByVal Number As Variant, Optional ByVal Place As Long = -1) As Variant Dim Power As Double Dim Sign As Double Power = 10 ^ (Place + 1) Sign = Sgn(Number) Number = Sign * Number + 5 * 10 ^ Place Number = Number / Power RoundOff = Sign * (Int(Number) * Power) End Function
36 :
デフォルトの名無しさん :2005/12/15(木) 22:23:23
こんばんわっす。初心者ですが、質問させてください。 MSCOMMを使って、パソコン間のシリアル通信をしたいのですが、特殊な NW層(TCP/IPではない)を利用する為、専用のデバイスを介して通信 する事になります。 実は、パソコン間の通信はTERATERMを使ってできているのですが、これ をVB6.0のテキストエリア上で実現したいのです。 現状は、TERATERM→MSCOMMにデータを送り、VB6.0のテキストエリアに表示は できるのですが、MSCOMM→TERATERMへデータ送信できません。 これでは当然MSCOMM−MSCOMMはできない訳で... TERATERM上では、ENTERを押す事でデータが送られます。 TERATERM−NW層の間には、Cで書かれたプログラムがあるのですが、 もしかして、キーボードからの入力だけしか送られないように なってるのでしょうか? とりあえず送りたい文字列をoutputプロパティに入れてCRを付けて 送っているのですが全然送ってくれません。 藁にもすがりたい思いなので、何か気が付くことがあれば教えて下さい。 お願いします。
既に出来上がっているコードを解読しろとの命令が下ったのですが、 Do-Loopの使い方でわからないところがあり、手が止まってしまいました。 問題の部分がこちらです。 Dim sample As Integer Do ---(1) Do ---(2) If sample = 0 Then ExitDo DoEvents Loop Text2(1).Text=frm2.Text1(0).Text (以下コードが続く) Loop と言う形なのですが、この場合、 sample の値が 0 の時は (2) の Do-Loop を抜け出して、 (1)の Do-Loop を実行するという意味になるんでしょうか? # それだと sample の値が 0 以外の場合と変わらないのでは…? # と、こちらの思考が無限ループしてます…。 申し訳ありませんが知恵をお貸しください。お願いいたします。
>>38 いろいろ弄った末、無駄なコードが
残ってしまったのかもしれません。
仕様書ではどうなってまつか?
>>39 それが渡されたのがおざなりな取扱説明書だけで、仕様書なしの状態なのです…。
いろいろ弄った結果の無駄なコード、ですか。
VB初心者のために参考書とネット情報片手にやってるのですが、
Do-Loop を使うときには当然条件式が必要になりますけど、
If 文を条件式として使うのはありなんでしょうか?
基本式では Until と While があるのは理解できたのですが、例文をいろいろ見ても
If 文が条件式として使われるものが見つからなかったので…
きれいなプログラムとは言わないけど、アリだろ。
>>40 while(1) {}
みたいなもんでそ。
sample <> 0 だと無限ループだし、sample = 0の場合も単なる空ループ。 内側のDo-Loopブロックの存在意義は無いな。
>>41 ,42
なるほど。
ということは
>>38 の場合、Do-Loopの条件文は If 文であると見るべきなんですね。
>>43 内側の Do-Loop はないものとして考えた方がよさそうですね。
皆様、貴重なご意見ありがとうございました。
45 :
デフォルトの名無しさん :2005/12/16(金) 07:22:17
> 内側の Do-Loop はないものとして考えた方がよさそうですね。 めちゃくちゃな結論だな。 DoEventsが無きゃそうなんだが。 このルーチンは sample = 0 以外の時はWindowsに処理を戻すと言う ルーチンだな、コードは稚拙だが。
ここにRDSに詳しい方、おられますか?
なにそれ食べ物?
>>47 Remote Data Serviceの略のようです。
49 :
46 :2005/12/16(金) 10:18:19
Set hoge = rdsDs.CreateObject("HOGE_DLL.RDSClass", "
http://hoge ")
このようなコードがあった場合、HOGE_DLL.RDSClassは
やはりVBで作成されているのでしょうか?
サーバーにあるActiveXDLLをCreateObjectしていると
思われるのですが・・・
RDS以前の問題だなw
51 :
46 :2005/12/16(金) 11:19:20
52 :
デフォルトの名無しさん :2005/12/16(金) 16:59:37
VisualBasic6.0 + Winsock6.0コントロールです。 Winsockコントロール1つで、 HTTPリクエストを複数なげようとしているのですが… ・レスポンスを受け取る前に次の送信をしようとするとエラー になります。これは、そういうものだということで問題ないです。 となると、レスポンスを受信するまで次の送信を待つという処理が必要になるかと思います。 それで、まだレスポンスを受信していない場合は、フラグを立てておいてループで待つようにしてみました。 ----- Do While flgHttpRequest DoEvents Loop ----- フラグはレスポンスを受けたら FALSE にセットするようにしてます。 しかし、これだとビジーループに処理を取られているためか、 DataArrivalイベントは起こりません。 どのような方法で待つのが正しいのでしょうか?
・接続開始 Connectメゾッド Connectイベント SendDataメゾッドでリクエストパケット送信 DataArrivalイベント GetDataメゾッドでデータ取得 Closeイベント Closeメゾッドで切断 って感じ。(HTTPの場合) 複数の場所と同時接続する場合には、同時接続する分のWinsockインスタンスが必要。
54 :
デフォルトの名無しさん :2005/12/17(土) 02:52:45
wavファイルを再生するためにMCIを使っていろいろしてるんですが、 再生速度を変えるために、MCIWndSetSpeedが使えると思ったのですが 実行すると、「ドライバは指定されたコマンド パラメータを認識できません。」と エラーがでます。原因は何が考えられるでしょうか? Public Function MCIWndSetSpeed(ByVal hWnd As Long, ByVal Speed As Long) As Long MCIWndSetSpeed = SendMessageAsLong(hWnd, MCIWNDM_SETSPEED, 0&, Speed) End Function
56 :
デフォルトの名無しさん :2005/12/17(土) 17:21:25
漏れはVBは糞だ糞だと聞いてVC++をひたすら勉強した。 そしてVCが多少扱えるようになった頃VBに浮気してみたら簡単にアプリが作れた。 何より楽しい。 実行速度がどうのこうの言われてるVBだけど実際実行速度がそんなに重要になることってあるんだろうか?
大量のデータ処理を行う、画像や音声処理は辛い。
58 :
デフォルトの名無しさん :2005/12/17(土) 23:28:10
VB6でWindowsMediaPlayerのActiveXを組み込んで使用しています。 初歩的な使い方は何とかなったのですが、細かな使い方がわかりません。 どこかMediaPlayerのプロパティやメソッドについて解説しているサイトがあったら紹介してもらえませんか。 具体的には動画のアスペクト比を変更して再生したいのですが、それが可能かどうかすらわからない状態です。
【クラスモジュール内でExcelWorkbookを開いて、そのWorkbookオブジェクトを返すには?】 Excelファイルをパス指定して、取得したオブジェクトを使いまわしたいのですが、 こんなことできますでしょうか? Private Sub Form_Load() Dim xlGet As getExcelObject Dim xlApp2 As Excel.Workbook Set xlGet = New getExcelObject xlGet.xlPath = "C:\MyApp\SampleData\xls\Simple.xls" xlApp2 = xlGet.openExcelWorkbook End Sub *** クラスモジュール *** Public xlPath As String Public Function openExcelWorkbook() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(xlPath) 'Excelワークブックの読み込み openExcelWorkbook = xlBook End Function *********************
61 :
デフォルトの名無しさん :2005/12/18(日) 14:24:22
JAVAが組み込まれたHTMLのjavaのデータを読み取るにはどうしたらいいんでしょうか? WebBrowserコントロールでTAGでくくられたデータはとれるのですが、 javaはどうするのでしょう。 どなたか親切な方、教えてください。
一部間違ってるけど、やろうとしてことは出来るよ。 出来るかどうかしか聞いてないんだから、どうやるかは自分で調べてね。
56はC++を使いこなせていなかっただけ
61>> 取れる DHTML勉強しろ DHTML勉強する気が無いなら InStr( ) Mid( ) でHTMLソース分解 JAVAってなに? Script? Applet? ScriptならMSHTML.HTMLDocument.scripts で取得 AppletならMSHTML.HTMLDocument.applets で取得
65 :
デフォルトの名無しさん :2005/12/18(日) 18:28:35
>>60 どんな質問やねん。
できますでしょうか、って自分で試せよw
答えをいえばそれは可能だけど、しかしそんなパブリック関数を持つなら
クラスにする意味は何もないね。
そういうゴチャゴチャしたことを内部に隠蔽するためにクラスってのはあるんだよ。
>>56 普通のアプリを作るうえでは余り問題無い
だがVBは(.NET除く)簡単にできるぶん、VC++でやるよりできることが少ない
67 :
デフォルトの名無しさん :2005/12/19(月) 09:27:05
漢字をカナに変換する方法を探してるのですが、 ExcelのGetPhonetic関数は、当然Excelがインストールされていない環境では使えませんし ImmGetCompositionStringはテキストボックスなどのコントロールを使わないと取得できないようです。 XP/2000の標準環境で使えて、コントロールを使用せずに、コードのみで漢字の読み仮名を返す方法を ご存じでしたらご教示ください。ImmGetCompositionStringをコントロール無しで使う方法でも、もちろん構いません。 環境はVB6SP5です。コントロール配置して非表示にすればいいとかは無しでお願いします。
68 :
デフォルトの名無しさん :2005/12/19(月) 12:42:22
68って可哀相
いやいや、俺の方が可哀想だって
俺も俺も
72 :
60 :2005/12/19(月) 20:54:18
>>62 ,65
あー、なるほど。概要が見えてきました。
クラスモジュールの中でオブジェクトを取得させて、各々の処理を定義したメソッドを
外から使うんですね!
ちなみに、60で書いたコードをいろいろいじってるのですが、どれもエラーが出てしまって
うまくできませんでした。
Workbookオブジェクトを戻り値として扱えますよね?
>>68 の検索結果に答えが見つからない件について
無理して煽らなくていいよ。アホなのは分かっているから
>>73 やっぱり本物の無能みたいだね。
見つからないって一番最初に出てるでしょw
馬っ鹿じゃなかろうか。
というかね、せっかくImmGetCompositionStringなんて知ってるんだから
一番最初にやるべきことはMSDNの該当ページを開いて参照のリンクを見るとか
目次に同期させて関連するような関数を手当たりしだい調べることなんじゃないの?
こんなのPG暦三ヶ月の新人君でも知ってて当然のスキルだよ情けない。
1件目って、ざっと見た限り > コードのみで漢字の読み仮名を返す方法 に反してるような気がするのは気のせい?
76 :
デフォルトの名無しさん :2005/12/20(火) 10:26:21
EXCELスレでスレ違いといわれたので、一番近いと思われるここに移動してきました。 Execl 2000でImplementsを使用するとたまにエラーになります。 エラーになる箇所は、インターフェースIをImplementsしたクラスCを I型の変数に代入しようとしたときに型が違うとでます。 また、これに関連しているかどうかわからないですが、 インターフェースをImplementsしているSheetのcellsをアクセスすると メモリ不足というエラーが出ます。 いずれもSheet名(すべて、もしくは該当するSheet)をいったん別名に変えて元に戻すだけでなおります。 (例:Sheet1をVBAのプロパティウインドウでSheet1Xに変えてEnter。そのあとまたSheet1に戻す) ExcelでImplementsを使うのは鬼門なのでしょうか? それとも別の原因があるのでしょうか? なにか関連しそうな情報はありませんか?
> Execl 2000でImplementsを使用するとたまにエラーになります。 エラーになるものでいいから、おまえが書いたソースをここに貼れ。 何レスつかってもいいから省略せず全てね。 > ExcelでImplementsを使うのは鬼門なのでしょうか? 「Excelで」と聞くからにはVB6ではうまく使えてるのか? そうじゃないなら鬼門とかじゃなくて、おまえが使えてないだけだからな。
> 見つけられないなら君は無能だ。 > やっぱり本物の無能みたいだね。 > 見つからないって一番最初に出てるでしょw← > 馬っ鹿じゃなかろうか。 > こんなのPG暦三ヶ月の新人君でも知ってて当然のスキルだよ情けない。 回答の是非は知らんが、一言多い これが荒らし目的の煽りでなければ、天然バカだ
納期に追われてイライラしてるんだろ。可哀想に。
>>77 > 「Excelで」と聞くからにはVB6ではうまく使えてるのか?
Excelの話なのになんでVB6がでてくるの?
名前変えて直るって言ってるんだから、書き方に問題は無いでしょ。
>>78 で、えらそうなのに限って自分は何も知らない罠。
言うだけ言って去っていくやつ多すぎ。
もし何か知っているのなら、最低限自分の経験上の話など
何かしらの情報だせるはずだからね。
83 :
76 :2005/12/20(火) 12:20:54
>>70 全部書いたら、20レス以上になりますが。
っていうか仕事のコードなので勝手に書くことは出来ません。
バグなら自分で修正しますし、修正してもらおうとも思っていません。
エラーは何の問題も無く動いているので、わかりません。
VBAを変更すると出ると思いますが、また名前をいったん変えて戻すという作業が
面倒なので、コードを修正する必要が出てエラーが再現されたときに書きます。
繰り返しますが、コードは何も変更することなく、Sheet名を変更して戻すだけで直るんです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
私が聞きたいのは、ExcelでImplementsを使ったプログラミングをしたことがある人に対して、
Implementsに機縁するかもしれない、このような問題があるのかということです。
× エラーは何の問題も無く動いているので、わかりません。 ○ エラーは今は何の問題も無く動いているので、わかりません。
85 :
76 :2005/12/20(火) 12:24:49
Implementsの使い方は間違ってないと思います。 VB6で普通に使っていましたし、 自分のImplementsを使ったプログラミング方法の説明サイトは 2chでも何回か紹介されましたが好評でしたよ。
Excel内のVBAから同じExcel内のオブジェクトを使ってるでいいのかな。 短くて再現性のあるコードがあればいいんだけどね。 VBAの質問はどこいってもスレ違い扱いされるから難しいよね。
> 2chでも何回か紹介されました ってのが本当なら、ここで晒しても全く問題ないよな。
>>76 Excel 2003だとどうなります?
もしExcel 2003で大丈夫なら、Excel 2000のバグでしょうね。
このばあいImplementsを使わないで書くしかありません。
あとインターフェイスIで宣言した変数と、クラスCで宣言した変数
が衝突しているとか。インターフェイスIに関数やサブルーチンも
書いちゃってるとか。傍観者なので身勝手なこともいっておきまつ。
90 :
76 :2005/12/20(火) 19:11:18
>>86 > Excel内のVBAから同じExcel内のオブジェクトを使ってるでいいのかな。
そうです。
> 短くて再現性のあるコードがあればいいんだけどね。
ちょっといま忙しいので、そのうちやるかもしれません。年明けにでも。
今は余計なことしたくない。
>>87-88 恥ずかしいじゃないですか。
サイト作った時点では珍しい内容でしたが、今はもっといいページ出来てますからね。
>>89 残念ながら持ってないので試せません。
> あとインターフェイスIで宣言した変数と、クラスCで宣言した変数が衝突しているとか。
どういう意味かわかりづらいですけど、そんな変なのは無いつもりです。
> インターフェイスIに関数やサブルーチンも書いちゃってるとか。
書いていません。それに書いても問題ないはずですし。
あれから思い出しましたが、VBAでワークシート起動時にCommandBarsあたりいじくって
独自のツールバーを追加しています。これが原因だとは思えないですけど。
やっぱり、Excel VBAでImplements使っている人って少ないのでしょうね。
VBででも使っている人少なそうですし。うちのサイト少しは役に立てたかな・・・。
>>90 役立てたいからURLplz
恥ずかしいのは最初だけだってハァハァ
「恥ずかしい」 嘘を誤魔化す 便利な台詞 ……字余り
93 :
デフォルトの名無しさん :2005/12/20(火) 20:53:03
>>76 多分Implements云々は思い込みだと思うよ。
まあ、そう思う俺のほうこそ思い込みの可能性もあるけどね。
エクセル関連のオブジェクトって独特の仕様(まあ不具合だけど)があって、
「お約束」を守って操作してやらないとその手の問題が起こりがち。
エクセルのお約束に関してはいろんなとこで紹介されてるから
エクセルのオブジェクトの操作に不慣れなら有名どころはチェックしといた方がいい。
管理人がやたら神経質な花ちゃんなんとかとかさ。
94 :
76 :2005/12/21(水) 11:41:02
またでたよ。さっきまで動いていたのにマシンを再起動しただけで エラーになった。しかもちゃんと動くやつをバックアップしておいたのに それもエラーになった。 普通にEXCELだけで動かすと、「メモリが不足しています。」 VBEを開いていると、 実行時エラー '32809' アプリケーション定義またはオブジェクト定義のエラーです。 こんな感じのコードでエラーになっている。 Dim sh As Object Dim i As Long For Each sh In Sheets i = 1 Do While sh.Cells(i, 1) <> ""←ここでエラー Loop Next sh
で、エラーがでて以降はイミディエイトウインドウから、 ?sheet1.nameを実行しても同じエラーになる。 で、いまふと思いついて、前に書いたようにEXCEL起動時に CommandBarsを弄くって独自のツールバーを追加して、そこからVBAマクロ実行 しているんだけど、そこからVBAマクロを実行する前に、EXCEL開いてすぐに VBEから?sheet1.nameを実行したらどうか。 するとエラーが出ずに、しかもツールバーからVBAマクロを実行しても エラーがでなかった。 とりあえず、ツールバー関連もあやしいなと思いつつ、 sheetでImplementsを使っているのは、シートの内容が変更されたか調べるためだけなので、 その他の方法(sheetが変更されたかどうか調べるプロパティある?)を探すか。 sheetを自作のクラスでラッピングして、そこでイベントを取得する方法に切り替えて やってみるかもしれないのはいつだろう。
96 :
76 :2005/12/21(水) 11:58:05
数分後・・・ ふと思って、ワークシート開いたときに、Debug.Print Sheet1.Name (シートはたくさんあるのでこれを全部) をやってみたらどうか? ということで、 For Each sh In Sheets 以下略 で書いてみると、そこでエラー。 一行ずつ Debug.Print Sheet1.Name ・・・ としたらエラーにならず。 もしかしてFor Each が悪いのか? と思い、元のコードを For i=1 To Sheets.Count Set sh = Sheets(i) 〜 今までのコード〜 Next i としたら、エラーにならず。ってことでFor Each でまわすのが悪いっぽい。 これが、ImplementsしたsheetをFor Eachでまわすのが悪いのか、 単に、sheetをFor Eachでまわすのが悪いのかは、そのうち実験するかもしれない。
お な か す い た
98 :
デフォルトの名無しさん :2005/12/21(水) 12:30:19
>>96 >これが、ImplementsしたsheetをFor Eachでまわすのが悪いのか、
>単に、sheetをFor Eachでまわすのが悪いのかは、そのうち実験するかもしれない。
馬鹿?
だからどっちでもないって言ってるでしょ。
残念ながらエクセルには独特のお作法というか「おまじない」的なものがたくさんあるんだよ。
君はそのお作法を守ってないだけ。
Implementsって何?
100 :
76 :2005/12/21(水) 12:42:51
>>98 原因がわかってないのに、なぜそう言えるのですか?
それともあなたには今の段階で、その守るべきおまじないがわかったのですか?
不思議なのですが。
101 :
76 :2005/12/21(水) 12:48:41
だいたいその、おまじないを特定しようとしているんですけどねぇ。 それに「おまじない」と言って理由もわからずに書いている人多いですよね。 そういう人が、Nothingを代入すれば解放とか クラスとしてのForm1と実態としてもForm1の区別がつかずに ドツボにはまるんですよ。 私は、そんな人になりたくありません。
「アプリケーション定義またはオブジェクト定義のエラーです」でググったら Excelウィルス検出アドインかノートン等のアンチウィルスソフトが反応すると起こるらしい。 アンチウィルスソフト切って動いたらお前は...
>>76 いいからもう来るな
お前の態度は鼻について仕方ない
開発環境:VB6sp3 実行環境:VB6ランタイム インストール済 この環境から、 「開発環境を.NETに移行するが、実行環境は変えずに済む方法」はありますか? つまり、.NETでVB6と完全に同じモジュールを作れるのでしょうかといったことなのですが。 .NETがらみの質問はよくないとのことですが、VB6のソースをそのまま移行したいため、 VB6をあつかったことのある方が多いこちらのほうがわかる方がいる可能性が高いと思い書き込みしました。
>>104 スレ違い
移行絡みの話は.NETスレでどうぞ
106 :
104 :2005/12/21(水) 19:26:50
>>105 そうですか、わかりました。スレ汚し失礼しました。
>>104 .net frameworkが必要だから無理だよ。
>>76 >>101 Nothingの正体も知らないで(Nothing は Null じゃ無いよ IUnknown::Release だよ)...
VBのImplementsはCOMインタフェースインプリメントだって事も知らないで...
オートメーション・COM・IDispatchも知らないで...
VBのクラスは JAVA C++ に比べて全く違うモノだから 混同させんなよ
この辺のコメントは前スレに書いてあったから見て味噌
VB.NETのSystem.Console.WriteLineのように文字をコンソール出力するには、 どうしたらいいでしょうか?
>>108 >この辺のコメントは前スレに書いてあったから見て味噌
「見て味噌」
ふむ・・・、なんとも懐かしい言い回しですね
このコメントから108の人物像が浮かび上がってきます
108は、OSをいたぶり殺す変質者、土地勘があり、年齢は20代〜30代、
もしくは40代〜50代、なんらかの前歴がある人物と考えられます
>>109 APIを使う
VBに限った話じゃないので、
何を使うか、どう使うかはここでは聞かないでね
112 :
デフォルトの名無しさん :2005/12/22(木) 09:36:22
>>109 前世紀のVBマガジンでサンプルあったよ。
コレクションに任意のKeyを持つメンバの有無を判断するにはどうすれば良いのでしょうか? 実際にコレクションにKeyを入れてエラーになるかどうかで判断する方法は解るのですが、 エラーになるかどうかで判断する方法以外で、出来ればなるべく高速な方法が知りたいです。 あと任意のコレクション内の位置(数値インデックス)のメンバに割り当てられてるKeyを調べる方法、 任意のKeyを持つメンバのコレクション内の位置(数値インデックス)を調べる方法を教えてください。 例えば Collection.Add "hoge", "foo" Collection.Add "huga", "bar" の場合、"bar"というKeyを持つメンバの有無(=True)、"baz"というKeyを持つメンバの有無(=False)を調べたり、 Collection.Item(1)から、"foo"というキーを調べたり Collection.Item(bar)から、2という位置を調べたりしたいのです。 クラスを使ってCollectionのようなものを自作すれば全て出来るし、 メンバに文字列ではなく、クラスを割り当てるだけでも下二つは可能なのですが、 標準のCollectionのメンバに単一の文字列を割り当てた場合に、これらのことをやる方法を教えてください。 環境はWindowsXP、Visual Basic6.0 SP5です。
>>113 その辺ことを便利にするのにDictionaryができたと思うからCollectionじゃできないんじゃない?
Dictionaryって順序が保証されないんじゃ?
116 :
デフォルトの名無しさん :2005/12/22(木) 19:31:11
今、VB6でPNGファイルから、圧縮してJPEGファイルを作るプログラムを 作成しようとしています。この圧縮のところを、LeadTools Raster Imaging Pro Ver.13 で作成するところまで決まっています。ところが、マニュアルが紛失してないので、 どなたかサンプルをつけてもらえないでしょうか? また、その他の手でいい方法がありましたら、ご教授願います。 よろしくお願いします。
> マニュアルが紛失してないので 正規ユーザーなら、正規ライセンスを提示すれば マニュアルくらい実費で送ってくれるだろ。 はっきり言って、コードを書いてもらいたいが為の言い訳か 割れ厨の詭弁にしか聞こえないぞ。 それに「決まっています。」って言っておきながら、その他の手も糞も無いだろ。
>>116 マニュアルに親切丁寧に使い方なんて書いてなかったキガス
ライブラリインストールしたんならヘルプも入ってるでしょ。
それで十分だしマニュアルと大体同じ。
それでも分からなければインストールされているサンプル見れば良いよ。
>>>>>>>>>
>>116 ライブラリ購入しても 使いこなせる人材がいない可愛そうな会社...
121 :
76 :2005/12/23(金) 14:23:51
>>108 んなこと知ってるから。
で、今日は休みなのでテストしてみた。
今までの検証から思いつくであろう最少のコードでテストしたら
見事に再現した。再現コードは以下の通り
【クラスモジュール名 I】 (Instancingを2 - PublicNotCreatableに変更】
Option Explicit
Public Sub foo()
End Sub
【Worksheet名 Sheet1、Sheet2、Sheet3】
Option Explicit
Implements I
Private Sub I_foo()
End Sub
【Workbook名 ThisWorkbook】
Private Sub Workbook_Open()
Dim o As Object
' Dim i As Long
' For i = 1 To Sheets.Count
' Set o = Sheets(1)
' Debug.Print o.Name
' Next i
For Each o In Sheets
Debug.Print o.Name
Next o
End Sub
122 :
76 :2005/12/23(金) 14:24:22
当然Implements Iをしなかったら動く。 また、ThisWorkbookのコメントアウトの部分を省くと動く。 しかも、不思議なことにコメントアウトの部分を省くとFor Eachの部分までちゃんと動く。 その後で、またコメントアウトし、Excelを終了し再度Excelファイルを開くとなぜか動く。 でも、そのあとでコードを変更(スペースを入れる程度)したら動かなくなる。 たぶん、内部で読み込まれているExcel関連のDLLの生存期間に依存していると思われるので、 コードを変更しなくても、しばらく時間を置くか、PCを再起動したら動かなくなるだろう。
>>98 > >これが、ImplementsしたsheetをFor Eachでまわすのが悪いのか、
> >単に、sheetをFor Eachでまわすのが悪いのかは、そのうち実験するかもしれない。
> 馬鹿?
> だからどっちでもないって言ってるでしょ。
残念ながら、俺が言ったとおり、ImplementsしたsheetをFor Eachでまわすのが
悪いという結論に達してしまった。もし反論があるのなら、ちゃんと検証をしてから理論的にどうぞ。
まあ「おまじない」と言って理由もわからず、ただ書いてあることを鵜呑みにしている奴は俺には追いつけないだろう。
では、新しい「おまじない」w
Excel VBAでは、何かのインターフェースをImplementsしたSheetを
For Eachで回すと、メモリ不足やアプリケーション定義またはオブジェクト定義のエラーです。などの
バグが発現する。それを回避するためにFor Eachではなく、Sheets.Countを使って回した方がいい。
ここまでやって、人に役立つことを書ける人間になろうね。
ここはお前の日記帳ですね^^
>>123 馬鹿だね。
実験結果の解釈法を知らないのは理科系出身じゃないのかな。
牛乳飲んで腹を下したからって「下痢の原因は牛乳」なんていったら医者失格だわな。
原因は熱(牛乳が冷えていたから)かも知れないでしょ?
断言するけどImplements云々は直接的な原因じゃないよ。
どういうことかといえば、インターフェイスを継承せずに
同じ症状が出るコードがまず間違いなく書けるだろうってことね。
>>125 おまい頭いいな
自慢の自サイトでやればいいのになw
>>125 で、直接的な原因は?
断言の根拠は?
間違いなく書けるだろうじゃなくて、書いたらどうだ
本当にお前理科系出身者かw
129 :
デフォルトの名無しさん :2005/12/23(金) 15:57:37
私のために争わないでwwwwwwwwwwwww
ボクのシナリオにのって踊らないでwwwwwwwwwwwww
>>121-123 解決したみたいだけど、そもそもImplementsのヘルプを読むと
>Implements ステートメント
>クラス モジュール内にインプリメントされるインターフェイスまたはクラスを指定します。
って書いてあるんだよね。Sheet1やらSheet2って、
「クラスモジュール」ではないような気が。
アナタには、パンツの表と裏を間違えて穿いてるみたいな
オカシサがあるので気をつけましょう。
>>121 確かに動かないな
でも Dim o As Object を Dim o As Worksheet に変えたら動いたよ
原因は分からんけど IDispatch::Invoke が Name を呼ぶのに失敗してるな 多分これエクセルのバグっぽい >> M$に報告しとけ
つーかWorksheet型があるんだからObject型なんか使うなよ
これからはFor Each文使わないでWorksheetでやれ
Sheets.Itemが返す型が分からなくて不安ならTypeOfでインタフェースチェックしろ いいな
バイトから数値の変換で、±を気にしなかったら、2BYTEからINTEGER変換は、 Dim result(2) As Byte result(0) = (val And 255& * 256) \ 256& result(1) = (val And 255&) でできると思いますが、8BYTEからCURRENCY変換はどうやったらいいか、 教えてください。 ANDがオーバーフローしてANDが使えないです。 リトルエンディアントでメモリに入ってるから、 RtlMoveMemoryとかで1byteずつとってくるのがいいでしょうか。
>>133 よくわからない質問だなあ。
そのバイト配列は当然もともとCurrency型の値から作ったんでしょ?
そんな必要がどこにあるのか知らないけど。
その逆の操作をするだけじゃないの?
まああまりエレガントなやり方ではないけどバイト配列を一旦バイナリファイルに
書き出せばVBネイティブの機能だけでできるね。
演算でやろうってそもそもCurrency型のビットイメージのフォーマットなんて
どっかに公開されてたっけ?
>>131 Sheetもクラスモジュールだろ
っていうか、それを言ったら、
Formもクラスじゃないとかそういうことになる。
おかしいだろ?
>>134 やりたいのは、Socket経由でCurrencyの値を送信して、かつ、復元することです。
ttp://www.codeguru.com/vb/gen/vb_misc/algorithms/article.php/c7495/ に、値の詳細っぽいのがありました。
ただ、Lsetで値をとっても、指数っぽいのがはいってたんで、
本当かどうかはわからないです。Longの場合はうまくいくんですが。
Private Type FROM_LONG
Value As Long
End Type
Private Type FROM_CUR
Value As Currency
End Type
Public Function Long2Byte(ByVal Value As Long) As Byte()
Dim Dest As TO_BYTEARRAY4
Dim Src As FROM_LONG
Src.Value = Value
LSet Dest = Src
Long2Byte = Dest.Value
End Function
Public Function Cur2Byte(ByVal Value As Currency) As Byte()
Dim Dest As TO_BYTEARRAY8
Dim Src As FROM_CUR
Src.Value = Value
LSet Dest = Src
Cur2Byte = Dest.Value
End Function
これでLong2Byteで、256を変換すると、256 = 0, 1, 0, 0 の配列になります。
Cur2Byteで256を変換すると、256 = 0, 16, 39, 0, 0, 0, 0, 0 の配列になります。
>>134 Public Function Byte2Long(ByRef Value() As Byte) As Long
Byte2Long = _
(Value(3) * 256& * 256& * 256&) + _
(Value(2) * 256& * 256&) + _
(Value(1) * 256&) + _
(Value(0) * 1&)
End Function
Public Function Byte2Cur(ByRef Value() As Byte) As Currency
Byte2Cur = _
(Value(7) * 256@ * 256@ * 256@ * 256@ * 256@ * 256@ * 256@) + _
(Value(6) * 256@ * 256@ * 256@ * 256@ * 256@ * 256@) + _
(Value(5) * 256@ * 256@ * 256@ * 256@ * 256@) + _
(Value(4) * 256@ * 256@ * 256@ * 256@) + _
(Value(3) * 256@ * 256@ * 256@) + _
(Value(2) * 256@ * 256@) + _
(Value(1) * 256@) + _
(Value(0) * 1@)
End Function
byte配列にした値を、上記みたいに復元したいってことです。
>>137 やっぱり
>>134 のでOKだと思うぞ?
エンコードしたのと逆順でデコードすればいいだけだよ。
手元で確認したけど、バイト配列の中身を盲目的にCurrencyに突っ込むだけで普通に復元できるよ。
(俺はCopyMemory使ったけど)
難しく考えすぎてないかい?
それとも復元は自前で計算しないと駄目なの?
>>138 >>137 エンコード時点で、ANDの演算がオーバーフローしてしまいます。
Public Function Cur2Byte(ByVal Value As Currency) As Byte()
Dim Dest(8) As Byte
Dest(0) = (Value And (255@ * 256 * 256 * 256 * 256 * 256 * 256 * 256)) \ (256@ * 256 * 256 * 256 * 256 * 256 * 256)
Dest(1) = (Value And (255@ * 256 * 256 * 256 * 256 * 256 * 256)) \ (256@ * 256 * 256 * 256 * 256 * 256)
Dest(2) = (Value And (255@ * 256 * 256 * 256 * 256 * 256)) \ (256@ * 256 * 256 * 256 * 256)
Dest(3) = (Value And (255@ * 256 * 256 * 256 * 256)) \ (256@ * 256 * 256 * 256)
Dest(4) = (Value And (255@ * 256 * 256 * 256)) \ (256@ * 256 * 256)
Dest(5) = (Value And (255@ * 256 * 256)) \ (256@ * 256)
Dest(6) = (Value And (255@ * 256)) \ 256@
Dest(7) = (Value And (255@))
Cur2Byte = Dest
End Function
自前でエンコード/デコードしたいのは、
Javaや、Cのlong等、VBのLongを超える値を
Socket経由でやりとりするのを考慮したいからです。
String変換して送受信すればいいんじゃね?
>>76 が近いうちに苦しんで死にますように('人`)
MSHFlexGridで、Excelのような入力を実装しようと思い、
http://www.bcap.co.jp/hanafusa/VBHLP/MSFlexNO7.htm の方法を試したのですが、IMEがONの場合に入力(というか表示)がうまくいきません。
IMEがONの場合、
a入力 [| ] ("あ"を入力したのに何も表示されない)
Enter入力 .[あ| ] (確定済みの黒文字)
となってしまうのですが、( [ ]がテキストボックス、 | がキャレット)
a入力 [あ| ] (未確定の青文字)
Enter入力 .[あ| ] (確定済みの黒文字)
となるようにするにはどうすれば良いでしょうか?
毎回何らかのキー(サンプルではF2)を押してから入力するというのも面倒なので
どなたか解決法をご教示ください。
環境はWinXP VB6SP6 ATOK15です。
Stringでやると、データの総受信料が増えるのと、 javaやcの8byteのlongを送受信するサーバーとの通信ができなくなるので、 byte配列でやることを考えました。 その後、ANDでのマスク処理を、256での割り算、 \演算子の処理をcurrencyでもいけるように割り算をつくって、 mod演算子の処理をcurrencyでいけるように割り算をつくっていけるようにしました。 result(7) = remaind(divide(val, (127@ ^ 7)), 256) result(6) = remaind(divide(val, (256@ ^ 6)), 256) result(5) = remaind(divide(val, (256@ ^ 5)), 256) result(4) = remaind(divide(val, (256@ ^ 4)), 256) result(3) = remaind(divide(val, (256@ ^ 3)), 256) result(2) = remaind(divide(val, (256@ ^ 2)), 256) result(1) = remaind(divide(val, (256@ ^ 1)), 256) result(0) = remaind(divide(val, (256@ ^ 0)), 256) で、currencyをばらして (val(pos + 7) * 127@ ^ 7) + _ (val(pos + 6) * 256@ ^ 6) + _ (val(pos + 5) * 256@ ^ 5) + _ (val(pos + 4) * 256@ ^ 4) + _ (val(pos + 3) * 256@ ^ 3) + _ (val(pos + 2) * 256@ ^ 2) + _ (val(pos + 1) * 256@ ^ 1) + _ (val(pos + 0) * 256@ ^ 0) で復元。
ディストリビューションウィザードでVBで作ったアプリのインストーラを作りました。 OLEを使ってExcel2000の表にデータを書き込むプログラムです。 Excel9.Olbの依存情報が不足しているというメッセージが出つつもインストーラが完成しました。 ファイルの中には確かにExcel9.olbが入っています。 当然 自分の環境はExcel2000が入っているので動作するのですが Excel2003のパソコンでもこれは 動くのでしょうか? Excel97は古いので互換が無い可能性があるのですが Excel9.Olbだけで Excel2003,2002のPCでも動くのでしょうか
148 :
デフォルトの名無しさん :2005/12/26(月) 11:23:15
そもそも。再配布可能なのか?Excel関連?
149 :
デフォルトの名無しさん :2005/12/26(月) 16:11:50
picture.lineなどで書いた線って, マウスイベントで修正したり消去できます? 図形をトレース出来るようにしたいのですが, lineを修正や消去したかったらどうしたら良いですか?
150 :
デフォルトの名無しさん :2005/12/26(月) 16:25:50
書いた線はオブジェクトじゃないから、自分でオブジェクトとして内部管理する必要あり。
151 :
デフォルトの名無しさん :2005/12/26(月) 16:27:47
>自分でオブジェクトとして内部管理 どーゆーことでしょうか?
152 :
デフォルトの名無しさん :2005/12/26(月) 16:34:00
書いた線ってのはその時点で始点・終点などをピクチャーボックスが記憶してるわけじゃない。 もうその時点でそれらの情報は既になくなっているってこと。 なので、自分で描画する線のそれら情報を内部的に確保しておく。 その上でマウス操作された場合にリアクションするコードを書けばいいわけで。 大変だけどね。
153 :
デフォルトの名無しさん :2005/12/26(月) 16:37:02
おおざっぱにいうと 書いた線の情報を画像としてだけではなく いわゆる変数に入れとく感じ? 座標やらなんやら
154 :
デフォルトの名無しさん :2005/12/26(月) 16:39:25
>>153 そういうこと。
それをうまく作っておけば、座標情報を表示する線分・領域は乖離せずに動作するはず。
155 :
デフォルトの名無しさん :2005/12/26(月) 16:40:24
>152 思い付いた方法としては, あらかじめlineコントロールで大量に準備して, visible=falseにしておく. そしてトレースしたらvisible=trueにして表示させる. で,mousedownで消去するなら,line1(a)をclearする. ってな感じですか?
156 :
デフォルトの名無しさん :2005/12/26(月) 16:49:27
>>155 ちょっw
それはまずいんではないかとw
それやるにしてもコンテナ使うとかありそうだけど・・・
素人レベルの漏れが思うに
書いた線を全て記憶
消したり書いたりしたら
ピクチャボックス再描画って感じジャマイカ?
157 :
デフォルトの名無しさん :2005/12/26(月) 16:54:28
LineメソッドとLineコントロールをごっちゃに話してるから少し整頓。 Lineコントロール自体はオブジェクトで基点・終点は持っている。 ただしイベント認識できないので、自分がClickされたことを感知できない。 Picture自身は基本的には内部にLineメソッドで線を描くことは可能。 ここまでの話ではどちらで線を引いてるのかグレーだよ。 で、やり方のキーワードだけ書いとくね。 Lineコントロールを実行時に生成するのは、コントロールの動的生成、コントロール配列などを見てみて。 MSDNにサンプルあるよ。実行時にコントロールを起こす方法。 生成するコントロールの親ContainerはFormじゃなくPictureBoxにしておくこと。 多分だけどForEachで内包するコントロールを列挙して処理できると思う。 内包した場合、座標は親に対してになるので若干計算が楽になる。
158 :
デフォルトの名無しさん :2005/12/26(月) 17:37:31
>>157 んっ?
lineコントロールはイベント認識しないんじゃないんですか?
何を使えば(トレースした線は)マウスイベント認識してくれるんでしょう
>150の自分でオブジェクトとして内部管理する必要あり。
ってのは,どーやったらobjectに出来るんですか?
もしかして,
線を座標として認識させて、
座標(x,y)がクリックされたらって感じでマウスイベントを起こすんですか?
>どーやったらobjectに出来るんですか VBは自作やね オブジェクト指向のセンス問われるよ それに Lineコントロールを使わないで全て自己描画でやると相当骨が折れると思うよ >座標(x,y)がクリックされたらって感じでマウスイベントを起こすんですか? 絵(線)にはイベントは無いよ キャンバス(この場合はPictureBox)のクリック座標を元に線を描画する 基本的に Windowsの描画方法が分かってない気がする Windows上の画像の修正処理は 一旦全て消して(塗りつぶして)から データを元に書き直してるんだよ (高速で処理しているから 人間には処理されてる様に見える) ゲームPGの参考書に描画について詳しく書いてあるから 目を通していくといいかも
160 :
143 :2005/12/26(月) 17:56:07
161 :
デフォルトの名無しさん :2005/12/26(月) 19:56:40
162 :
デフォルトの名無しさん :2005/12/26(月) 22:54:16
あらかじめlineコントロールで大量に準備して, visible=falseにしておく. そしてトレースしたらvisible=trueにして表示させる. で,mousedownで消去するなら,line1(a)をclearする. を改良して lineコントロールを動的配列にしました. すると, lineがimageの下に(formに配置される)配置されて表示されないのですが, 何か対策はありますか?
君につける薬は無いようです
>>157 をよく読めよ
PicrueBoxの上にちゃんとラインコントロール置いてる?
一応ZOrderも実行したほうがいいかもな
165 :
デフォルトの名無しさん :2005/12/27(火) 09:52:39
>>164 LineやラベルはPictureBoxの(ZOrderとしての)上には置けないよ。
>>162 imageじゃなくてPictureBoxを使わないとダメだ。
んで、LineコントロールはPictureBoxの中におくこと(PictureBoxをコンテナにする)
167 :
76 :2005/12/27(火) 10:50:51
やっぱりだめ。
例の、WorksheetにImplementsをする件だけど、
どうしてもおかしくなる。
>>132 のDim o As Worksheet にするやつでもだめだった。
いったんはうまく動くんだけど、SheetsをFor EachやForで繰り返したりいろいろしていると、
Worksheetからインターフェースを取り出すところで型が違うってエラーになる。
例 Sheet1がInterfaceをImplementsしているときに、Dim i As Interface : Set i = Sheet1
で、例のごとくInterfaceの名前をいったん変えて戻すと再コンパイルされるからか動くようになる。
完全にExcel2000のバグだろう。たぶんSheetにImplementsしない以外に対処法は無い気がする。
168 :
デフォルトの名無しさん :2005/12/27(火) 11:07:01
愚痴・独り言はチラシの裏へ。
スレちがいかもしれないけど、 ネットワークパスワード入力ダイアログをよびだすコマンドがあったら教えてください。
おとなしくエクセルのVBAとかオートメーションを扱ってるサイトを参考にしてれば 今頃とっくに解決してる程度の問題だと思うがな。 エクセルのバグだあ? 最初からそういってるだろ。みんなそれをだましだまし使ってんだよボケが。 しかし無能なくせに「俺流」でやりたがって無為に時間を浪費する馬鹿って どこにでもいるよな。 そういう奴って得てして自分は特別だと思ってるみたいだけどw
>>171 はImplementsが特別な物だと思っている素人
>>171 俺流ってなんのこと? Implements使うこと?
話の文脈ってのがわからないようでw
馬鹿じゃないの。
>>76 がエクセル扱ってるサイトを少しも参照した様子がないところを責めているのに
Implementsとか意味わからん。
ここ十年こういうタイプの「話の通じない奴」が本当に増えたな。
>>171 無為に時間を消費するというが、そうやって時間を消費してわかったことが
公開されていることで、あんたが時間を消費せずにすんでるんだろうが。
なんで、わざわざ自分の時間で調べてくれている人に素直に感謝できないかな。
>>174 でさ、お前は参照したの?
WorksheetにImpelementsすることで発生する問題が
書いてあるサイトあるの?
177 :
デフォルトの名無しさん :2005/12/27(火) 21:09:15
ここだけに限らないけど、最近他人に偉そうに検索しろと言っておいて、 自分が検索してない、しかも何も知らない。って奴が増えたな。
馬鹿な奴ってどこまでも馬鹿だなあ。 文脈のわからない馬鹿だ、っていっているそばからこれだもの。 正直発達段階に問題があると思うよ。 おれ自身振り返って、少なくとも小学校6年生段階でも こんなに劣悪な読解力してなかったと思うし。 WorksheetにImpelementsすることで発生する問題が 書いてあるサイト? 最初からImpelementsなんぞ原因じゃないといっているのにアホかw
181 :
デフォルトの名無しさん :2005/12/27(火) 21:36:03
>>180 じゃあ何が原因なの?と聞いてあんた答えられないでしょ。
んで、言うのはバグがある。バグがある。
何をやるのが悪くて、何をやれば解決するか何一ついえない。
君には「無能」の二文字を送ってあげるよ。
Excelにバグがあるのはわかってるんだよね。 それどころか、どんなソフトにだってバグはある。 あるソフトにバグがあるってだけなら、誰にだって言える。 重要なのは、どうしたらそのバグが再現されて、 どうすればそのバグの影響を回避できるかって事なんだ。
184 :
デフォルトの名無しさん :2005/12/27(火) 21:49:38
177 名前:デフォルトの名無しさん[] 投稿日:2005/12/27(火) 21:09:15
>>76 さん自演しすぎですよ
181 名前:デフォルトの名無しさん[] 投稿日:2005/12/27(火) 21:36:03
>>76 さん自演しすぎですよ
184 名前:デフォルトの名無しさん[] 投稿日:2005/12/27(火) 21:49:38
>>76 さん自演しすぎですよ
必死すぎw
186 :
デフォルトの名無しさん :2005/12/27(火) 21:53:48
根本的な原因がなにであるかはMSでないと分からない。
われわれが唯一出来ることは、どうやったらそのバグの影響を受けるかって事だ。
そのバグの影響を受けるコードはいくつもあるだろう。
しかし、WorksheetにImplementsをするだけで影響を受けるという情報は初めてだろう。
>>180 もその書き方からしても認めたと考えてもいいだろう。
分かりようが無い根本的な原因がどうとか「バグがある。以上。」なんかよりも、
WorksheetにImplementsがまずいという情報があったことは有益だな。
あっ。これ自演だからw
188 :
デフォルトの名無しさん :2005/12/27(火) 22:05:09
ここで、ぎすぎすした空気を一気に解消する魔法の一言。 ぬるぽ。
そうか、わかりました……
>>76 はつまり、
馬鹿なんだ
そうか、これが馬鹿というものなんだ
嗚呼、馬鹿よ馬鹿馬鹿、愛しき馬鹿よ……
>>76 はImpelements覚えたばっかで使いたくてウズウズしてるんだよ
そんなヤツにおまえら釣られすぎ
>>169 net /deleteを投げて接続を解除してstart使ってネットワークを開く様なバッチファイルを実行する
ドメイン参加してると使えないけど
ユーザがnewできないクラスにimplementsって、 いかにも不具合出そうな気がするのだがw 名前を変えると動く云々っていうのは、そのときにシステムがnewするから なんだろうな。
>>195 無理して背伸びしてわけのわからないこと言わない方がいいよ。
見てるこっちが恥ずかしいしw
VBのクラスには引数とるコンストラクタを書けないだけで
別に‘ユーザがnewできない’わけじゃない。
っていうかインターフェイスとか多態の意味わかってるのかとw
っていうか、だからImplementsは関係ないってのに。
エクセル関連のオブジェクトつーのは「お約束」を守って操作してやらないと
この手の意味不明な不具合が起きるんだよ。
俺も数年前に初めてエクセルを遠隔操作するコード書いたときには
その手の「お約束」書いてるサイト読んで、使ってるお前に問題があるだけだろ、
と思ったもんだが、実際に存在するんだなこれが。
Windows2000SP4+Excel2000(9.0.2812)と
Windows2000SP4+Excel2002(10.6501.6735)SP3で
>>121 のコードを試してみたが、エラーは出なかったわけだが
>>197 Implementsは関係あるでしょ。
実際、それ書いて問題が再現できてるんだから。
つか、もうその話題たいがいウザイから やりたいならImplementsだけでスレ立てでもして そこに篭ってやってくれよ
194 ありがとう。質問が悪かったみたい Shell ”explorer 接続先” でもやりたいことが出来るが、そのあとで当然出てくるウインドウを閉じないといけません。もっとスマートな方法はありませんかという質問でした。
>>197 お約束ってのは、Applicationインスタンスをオブジェクト変数に入れてないと特定の処理で
エラー落ちとかそういった類のもの? それならたまに出くわすわ。
>>76 のコードは見てないけど、Sheetsコレクションを変数に突っ込んだらアッサリ回避できたりするかもな。
開発環境:WindowsXP Professional Version:VB6.0 MDI子フォームが開かれているか判定する方法ってあるのでしょうか。 検索しても出てこなく、困っています。。 何か、Hitするような検索文字列でもいいので教えてください。 お願いします。
> あるのでしょうか。 ある > Hitするような検索文字列 "MDI" 絶対にヒットするはず
>>197 Sheet1とかSheet2って、VBAの中からどうやってnewするの?
206 :
デフォルトの名無しさん :2005/12/29(木) 01:02:04
古いバージョンのVB、できればver5.0の英語版を 手に入れる方法を知っている人がいたら教えてください。
>>206 Microsoftに問い合わせるといい
英語版が入ってるかどうかは確認できなかったが、古いVBなら買える
>>187 >根本的な原因がなにであるかはMSでないと分からない。
ダメだね...MSなら「仕様です」って言ってバグだと認めないよ
209 :
206 :2005/12/29(木) 06:32:50
210 :
デフォルトの名無しさん :2005/12/29(木) 12:30:57
おいおいサポート終了してる商品を販売しないだろ普通。 MSDNの高価なエディション買うぐらいしか正規に手に入れる方法はないんじゃないの? あとはオークションでまっとうな奴を探すか。
>おいおいサポート終了してる商品を販売しないだろ普通。 MSDNに付属してるんだろうと売ってることに変わりは無いのにな
>>208 そのセリフ、別に反論しているわけじゃないよな。
>>205 Dim ws As Worksheet
Set ws = New Sheet1
>>202 そういう類のもの。
>>76 が発見した新しいお約束もそういう類の物の一つと言って良いだろう。
WorksheetにインターフェースをImplementsすると型変換エラーなどがおきる。
認めようとしない奴がいるようだが、今の所なんらかの根拠を持って論理的に行われた反論は無い。
>>213 >コンパイルエラー:
>Newキーワードの使用方法が不正です。
がで出まつよ。
>出まつよ キモイ
>>217 少なくともXP+Excel 2003では出る。
>>217 少なくともExcel v.X for Macでは出る。
少なくとも俺は試していない
221 :
197 :2005/12/30(金) 11:30:20
>>205 すまん、
>>195 の文章を読み違えてたw
「ユーザがnewできない」って言うのをVB(VBA)の
クラス一般について言っているんだというふうに。
どう考えても「ユーザがnewできない」ってワークシートについて言ってるんだよね。
それは正しい。申し訳ない。
こうなると217が哀れで仕方ない
新年明けましておめでとうございます。 そして早速の質問です。 VB6.0SP6で作られた既存のアプリAがあって、それを改造する事が出来ません。 アプリAのあるボタンを定期的にクリックするソフトを作成したいのですが、どのような方法が ありますでしょうか。 私の方で、簡単に思いついたのが、アプリAのプロセスIDとかとってフォアグランドに表示して sendkeyですが、これだと、他のアプリを使用しているときに誤動作の原因となりそうです。 アプリAのボタンの関数を外部からコールするようなイメージで実現したいのですが、 使用する関数や参考手順、HP等ありましたら教えてもらえればと思います。
>>223 SendKeysではなくSendMessageで
使い方はググれば腐るほど出てくる
225 :
デフォルトの名無しさん :2006/01/02(月) 19:41:51
>>223 ボタンが押されているのを、視覚的に表すにはムリですが、
タイマーイベントで、ボタンクリックイベントを呼び出すとか
VBを起動するとなぜかオフィスアップデートが毎回でるんですがなぜですか?
>>224 ありがとうございます、ちょっと調べてみます。
>>225 ボタンを押したいアプリ自体は改造出来ないので、外部のアプリからボタンを押す、正確には、
ボタンを押したときに走る関数を実行させたいのです。
レスありがとうです、とりあえずSendMessage調べてきます。
VBのスレってまだあったんですね 久しぶりまたプログラムしたくて始めたんですが VB6.0SP6ラーニング使っているんですが 作成したexeファイルをバイナリで見ると PCのユーザー名が入っているんですよ・・・ この情報が入らないようにできますか?
入って困るのか?
†聖天使癒し猫姫(天然w)† とか恥ずかしい名前なんだろ
制作者情報のないexeなんぞ怪しくて使えねぇ
バージョン情報とか意図したものなら入って当然なんですが ウィンドウズのユーザー名が入るんですよ? マイドキュメントがあるルートフォルダ名と同じのが入るんです 言ってる意味わかりますか? こういう個人情報みたいなのが勝手に入力されるのって嫌じゃないですか?
そういう仕様だ、嫌なら使うなよ 言っとくが、PCのユーザー名「だけ」じゃ個人情報にゃならんよ 本人(居る場合は知ってる人間も)にしかわからんユーザー名でどうやって個人が特定できると?
>>233 例えばユーザー名に本名入れてる人とかはやばいでしょ?
特定されないにしても気分が悪い
あと、バイナリで見るのじゃ確認できないが、暗号化されてその他の情報も埋め込まれたり
どれだけの情報がexeに入ってるのか知りたいんだけど
わかる人いないかな?
一応バイナリでユーザー名のとこだけ、書き換えればいけるんだけどね
> どれだけの情報がexeに入ってるのか知りたいんだけど ここで聞くべきことじゃない。MSに聞け。 おまえはここで「〜という情報が格納されますよ」という 嘘かホントか解らないような情報が得られたらそれで納得するのか? メーカーの商売品すら疑って掛かるおまえが、 2chの一個人の出した情報など信じるはずがない。
236 :
デフォルトの名無しさん :2006/01/03(火) 14:21:16
質問です。 VBのフォームデザイナーの使い方で、 メインメニューを作ったのですが、ビルドして.exeにしても、メニューが 表示されないんです・・・
>>236 @VBEのフォーム上にはメニューが表示されているか
Aデバッグ実行ではメニューが表示されるか
B.frmファイルにはメニューの内容が書き込まれているか
>>235 わからないならわからないって言えよ。バカ
あぁ、分からんな
バカなのでわかりません なのでメーカーに聞いてください はい、さようなら
OpenTextFileを使ってファイルを開くとノートンがウィルス反応を出すのですが ノートンで許可した場合、ホンモノのウィルスがある場合対処してくれないかもしれませんし こういう場合どうすればいいでしょうか?
ノートンのメーカーに聞いてください はい、さようなら
243 :
デフォルトの名無しさん :2006/01/03(火) 18:24:26
少々お尋ねします。VB超初心者ですが、XP ProがインストールさらているパソにVB6をインストールする際にVBをアップデートしないとだめですか。またVBに付属のライブラリCDが傷がついてしまったのですがこれもインストールしないとだめですか。お教えて下さい。
>>243 理由が無いかぎりはサービスパックを当てる事
MSDNは入れなくてもいい
いまさらVB6をファイル共有化なんかで落としたのかよ。 まったく好き者だな。 まあどうせ否定するだろうけど、内容から丸わかりだし。
図星を突かれるとどうしても言い返したくなるのが人間の心理
ほぅ
別のフォームのコントロールにaddなどでアイテム追加したいんですが なぜか上手くいきません。どうすればいいでしょうか? 例えばfrom2で frmMain.Text1.Text="テスト" とやってもまったく反応しません。 str=frmMain.Text1.Text この様に値の取得はできるんですけど
250 :
デフォルトの名無しさん :2006/01/03(火) 22:45:15
>>249 frmMainをどのように呼び出したかじゃないのか?
frmMain.Show で読んでれば frmMainっていう暗黙のインスタンスが表示され、
Dim frm as new frmMain
frm.Show だと frmとfrmMainは別。
251 :
249 :2006/01/03(火) 22:57:07
>>250 解決しました!ありがとう!
もう6時間ぐらいずっとここでつまってって諦めかけてたんですが
このソフトは最初のアプリウィザードで作成したんですけど
>250さんがおっしゃってるようにメインフォーム自体がインスタンスとしてMain()のある標準モジュールで作成されてました
form2から、frmMain.Showとやると新しく複製されたメインフォームができるのでおかしいなと思ってたんです
いやーほんと助かりました。ありがとうございます
VB6 Win2000/XP 解像度1024*768で開発したアプリケーションを1280*1024の環境でも 動作させることになりました。どちらの環境で実行されても、 デスクトップに対して同じ割合の大きさで表示させたいのですが 何かよい方法はありますでしょうか? 例) 1024*768の環境でHeight:3600,Width:4800の大きさで表示されるFormを 1280*1024の環境ではHeight:4800,Width:6000の大きさで表示したい。 各コントロールのサイズ、フォントサイズも同様に拡大して表示したい。 実行時にScreen.heightやwidthから倍率を計算して Formと各Control毎にサイズ調整する方法を試してみましたが Controlがたくさん載ったフォームだと表示までに時間がかかるので 別の方法を模索しているところです。
あきらめろ
>>252 解像度が二種類しかないなら
フォームを二種類作れば速いよ
DCOMについて勉強中なのですが、下記のソースで
サーバー上のActiveXDLLを実行したいのですが
サーバー側はどのように設定すればよいでしょうか?
IISは起動してhoge.dllもregsvr32で登録はしました。
IISとhoge.dllを結びつける何かが必要だと思うのですが
どういった設定が必要でしょうか?
よろしくお願いいたします。
Private Sub Command1_Click()
Dim rdsObj As New RDS.DataSpace
Dim hogeObj As Object
Set hogeObj = rdsObj.CreateObject("hoge.clsHoge", "
http://hoge ")
Call hogeObj.hello
End Sub
>>241 アプリケーションごとに実行を許可するのか、しないのか設定できるだろ。
>>252 たくさんのコントロールっていくつぐらい?
そんなに時間かかると思えないんだけどなぁ。
コードに無駄があるような気がする。
本当に数のせいで時間がかかるんなら、今度はそのウィンドウの設計に問題がある
259 :
デフォルトの名無しさん :2006/01/05(木) 21:26:07
a,b,c b,q,g c,w,b を c a, ,g b,b,b c,q, w のようにbで整えるのに適した関数はありますか
わけわかんねぇ
おーい、誰かエスパー呼んでこい
これまたすごいのが出てきたな。
wロス
>>259 イメージ的に何がやりたいのかはわかるけど、
そのデータ群が何なのか、その英字が何を表すのかわからないと何も言えないな。
一つだけ言えるのは、関数ってのは自分で作るものだってことだけ。
で、どう作るかだが上記のように条件が曖昧なので何も言いようがない。
あ、分かった! a,b,c b,q,g c,w,b を、真ん中は一個↓にズラして、右は一個↑にズラして bbb で揃えたいのか。シラネ。
さらにワロス
スロットゲームが作りたいのかな
268 :
259 :2006/01/05(木) 23:03:52
データ群はなんでもあり、というか箱と思って頂ければ。 既存の関数を組み合わせて簡単にこの操作ができないかと・・・ エクセルでこのような操作ができればと・・・
>>268 2次配列に突っ込んでごちゃごちゃやれば可能なんじゃない?
あとは自分で頑張って。
>>268 ExcelならExcelに聞け
マクロの記録で、「挿入」-「下方向にシフト」とか「削除」−「上方向にシフト」とかやってみろ
271 :
259 :2006/01/05(木) 23:33:25
範囲内でこの操作をするメソッドみたいのがありそうな気がしてときめいています
あるよ、うちには。 俺が作ったメソッドだけど。
273 :
259 :2006/01/05(木) 23:45:51
うはww気になるwwコスト安いアルゴ知りてーwww
>>273 取り敢えずコスト度外視で作ってみればいいのに
"範囲内"と言っているが
>>259 の例では並べ替え後は範囲を飛び出している件について
276 :
259 :2006/01/06(金) 00:10:41
縦の中心を探す。を繰り返すのが今の構想。 ただ、最初のbが任意の位置にあった時、コストがたかくなる。 その辺、要領よくやりたい。
277 :
デフォルトの名無しさん :2006/01/06(金) 00:43:28
いまいち理解できてないんすけど
>>259 はエクセルマクロを前提に話してて、でもって
セル上の数値に対しての操作じゃなくて、配列なりの内部的な数値に対する操作がしたいってことでよいの?
>259 四角形をひし形に変換したいんじゃないのか? で、それぞれの要素にグラフィック座標割り当てたりとか? A列車3が発売された頃、同じような箱庭ソフト作りたいけど 立体的なビルを建てる場合マス目をひし形にしないとだめだから そうなるとマス目をクリックしたい場合、 どのマス目をクリックしたか判断する処理が四角形より難しいから 頭抱えたことがある
>>278 おいおい、
>>259 はもちろんだが君の頭も問題あるんじゃないかw
>>259 がやりたいのは、カラム内の'b'の位置に従って各カラムに-1, 0, または+1の
オフセットを与えたい、と。
おそらくそういうことだろう。
データ構造がはっきりしないから誰も適切に答えようがないがね。
データ構造が不明なのが問題だったのか?w
281 :
278 :2006/01/06(金) 01:43:09
>>279 ああwそういうことか
パチスロみたいに777そろえるようにしたいってことか
Excelで考えるなら、任意の文字(例だとb)の行位置を調べて、 その最大値を基準に、各列最大値との差分の空白を頭に入れてやるだけでいいじゃん ●★● ★●● ●●★ だと★の位置は2,1,3、最大値は3なので各列3との差分の空白を先頭に入れる 1列目は 3列目は 3-2=1で 3-3=0で 空白一つ 空白0 □ □□ □□● ● ●□ ●□● ★ ★★ ★★★ ● ●● ●● ● ● 2列目は 3-1=2で 空白二つ 空白を入れると言ってもそれは見た目の話で、セルの挿入をするより 値のみ動かして空白を入れた形に持っていた方が速いけどね。 中心を探すんじゃなくてオフセットを算出する方法だが何か不満でもあるかな?
>>282 >>259 はその操作概念自体は理解していて、それをスマートなアルゴリズムでやりたいってことではないかと。
で、わからんのがこの発言。
>ただ、最初のbが任意の位置にあった時、コストがたかくなる。
普通言われなくても当然と思う「最初のbが任意の位置にあった時」なんてことわりをわざわざいれるぐらいなので、
特殊な状況、例えば2列目以降のデータ列が初めから分かってるのではなくて、時間的に順次与えられるみたいな場合を
想定してるのかなと思った。
284 :
259 :2006/01/06(金) 05:02:40
まず全列ソート。そこからbの位置を揃えたい クイックソートみたく、中心からbの位置探し。2、3・・列目は中心の値により探す向きを中心から上か下かを決める これをしてくれる関数が知りたい。無ければエクセルの機能を組み合わせてしてみたい 最終形は a b,b,b c, ,c g q w 列毎の差分を作りたい。エクセルの機能をフル活用して(なるべく簡素+省計算量で
> これをしてくれる関数が知りたい。 当然組み込み関数には無い > 無ければエクセルの機能を組み合わせてしてみたい してみたいというのを止める理由はない どうぞご自由に > エクセルの機能をフル活用して それにはまずエクセルの機能を知ることから始めないとな 知らなきゃ使うことは出来ない まあ、精々勉強するこった
286 :
259 :2006/01/06(金) 05:25:44
アルゴの構想は > まず全列ソート。クイックソートみたく、中心からbの位置探し。2、3・・列目は中心の値により探す向きを中心から上か下かを決める これよりいいアルゴは・・ エクセルの機能を活用してできそうですか?できそうな予感のみあるのですが・・ そうです。私は教えて君でござる
最初と話が変わってるやんw セル上の話なら大抵の場合ソートは[データ]-[並べ替え]のコマンドを(マクロから)使えるな。
おまえら暇なんだなw
いいかげんスレ違い
290 :
デフォルトの名無しさん :2006/01/06(金) 14:57:49
まあ、よさげなアルゴリスムは1分で思いついたけど めんどくさいから書かない
説明する文がめちゃくちゃな人間は、 十中八九、プログラムもめちゃくちゃ。
292 :
デフォルトの名無しさん :2006/01/06(金) 15:26:00
それってSQLで良く当てはまる。 SQL文以前にその対象の集合ってのを日本語で表現できない人。
フォームのサイズ制限を付けたいのですがどうすればいいのでしょうか。 いわゆる.netでいうMinimumSize・MaximumSizeなのですがorz
>>293 Googleで VB ウインドウの最大・最小サイズを設定する
・・・キャッシュでしか読めないな
>>293 おれも初心者だけど
ないのでフォームのresizeイベントで無理やり維持する
拡大されようとするサイズを元に戻すって感じ
ただ、.NETと違って無理やりだから見た目が汚いくなるんだよなぁ
書いてる途中に思いついたけど、リサイズイベントが起きているときに
まだ、マウスが押されていたら、ボーダースタイル変えて、サイズを変えられないようにしたらいいかも
マウスが放されると元に戻すってかんじで
WM_GETMINMAXINFOでぐぐれ
>>294 ,295
早レスありがとうございます。
VB6でサイズ制限しようと思ったらresizeで無理やりするしかないのかな?
"サイズが一定範囲を超えたら元に戻す"ようにしたら、フォームがチラついて汚くなりますよね…
Cや.netのようにガチっと固定できたらいいんだけど。
295さんの後述の方法は、なるほど、全然思いつきませんでした。
サイズが一定範囲を越えようとしたらフォームをサイズ変更不可にすれば出来そうですね。
範囲内へと変更しようとしたときにサイズ変更可能にすればいいのかな。
ちょっと試してみます。
>>296 レスしてから気がつきました。
サイズ変更固定するAPIあったんですね…。
どうも有難うございます_(__)_そしてお手数お掛けしました。
これからじっくり調べてみます。
@レスくださった294様295様も有難うございました。
APIではないんだけどな
Resizeでやる場合、Formのサイズを変えたらそこでExit Sub入れた方がいい
じゃないと最大幅3000指定で、幅4000にリサイズした場合に
コントロール類のサイズを4000の場合用→3000の場合用と2回変更することになる。
それだけでもかなりチラ付き無くなるよ。
>>296 ヒント:
>>294
294のキーワードでググった先に、WM_GETMINMAXINFOの VBサンプルが載ってるので、サンプルがすでに挙がってるのに、 後から来てググれも糞も無いだろ。 ということでは?
言ったらあかんいうわけでもなし それこそわざわざ言うことでも無いんじゃ?
それこそわざわざ言うことでも無いんじゃ?
>>303
はいはい、どっちでもいいからもう終わりな
サブクラス化すればリサイズしようとしたときの イベント取れるよ。
つうか、サブクラス化とかするならVBで作るなってなるけどね。 API読んで、メッセージ処理して、それをVBでわざわざやるのが逆にめんどい。
ウィンドウを最小化させないようにする方法ってありますでしょうか。 常に手前に表示させたいのですが (現状SetWindowPosで常に手前に表示させています)、 タスクマネージャから最小化を選ぶと最小化されてしまいます。
またResizeでやれば?
310 :
308 :2006/01/08(日) 07:26:41
因みに、293氏とは別人です。
>>309 さっそくありがとうございます。
今やってみたところ、
タスクマネージャから最小化を選ぶと
イベントが拾えませんでした。
>>311 ありがとうございます。
今やって見ましたが、
タスクマネージャから最小化を選ぶと やはりダメなようです。
タクスマネージャーから最小化しようとするとHDD壊しますってreadmeに書けばいいんじゃないか?
>>312 キミが何か間違ってんじゃないの?
タスクマネージャからやろうが最小化は最小化
317 :
312 :2006/01/08(日) 20:16:40
>>315 こんなソースでダメでしたが、
どんな感じでやれますか?
Private Sub Form_Resize()
Form1.WindowState = vbNormal
End Sub
タスクマネージャ→アプリケーションタブ
→タスクから対象タスクを右クリック→最小化
これで最小化してしまう。
ここにいるのは負け組なので難しい質問は答えられないと思うよ VBで無理ならAPIいじるしかないと思うお^^
>>317 タスクマネージャの最小化や最大化はトップレベルウインドウに指示を出しているが、
VBのスタートアップフォームはトップレベルウインドウではないのでそういう動作になる。
VBのトップレベルウインドウは不可視。
>>317 リサイズもウィンドウステートも忘れろ。
>>311 の言うとおり、BorderStyleでできる。
すまんタスクマネージャから最小化だったかorz
322 :
317 :2006/01/09(月) 20:30:15
>>319 私には難しくて良くわかりませんが、
結論としては難しいということでしょうかね。
ちょっと時間がなくて今試せませんが、
イベント拾うのは諦めて、
短いタイマで定期的に大きくするとかできないかなと思ってますが
そのトップレベルウィンドウというのだけ最小化しているなら
これも難しいのかなとも。
それとタイマで処理すると私の頭も混乱するので嫌ですし。
>>322 だからフォームのプロパティのボーダースタイルでやれば最小化されないって言ってるだろ
>>324 いや、だから、タクスマネージャからやっても最小化ならないって
固定ダイアログにしてみろよ
今試したんだからまちがいねー
質問者じゃないけど、「3 - 固定ダイアログ」で最小化できたよー
327 :
322 :2006/01/09(月) 20:53:44
また試してみました。 だめでした。osの違いでしょうか?当方xp 今日はもうこれ以上試せそうにありません。
>>327 おれはw2kで出来た
正直すまんかった。
タスクマネージャーと「デスクトップの表示」はVBじゃどう頑張っても拾えないよ ただ目的を達成するなら 「デスクトップの表示」はWM_SHOWWINDOW wParam=0 lParam=SW_PARENTCLOSING で反応するから メッセージを握りつぶす ただし Form が親を持ってないとき 言っとくけど非公式な方法ね wParam=0 は 最小化された時 lParam=SW_PARENTCLOSING は 親が隠される時
>「デスクトップの表示」はWM_SHOWWINDOW wParam=0 lParam=SW_PARENTCLOSING 間違えたタスクマネージャーね orz
InputMan6.5からInputMan7.0への移行作業をしているのですが 移行ウィザードを使うとimContainer3Dの移行でエラーに なってしまいます。 もし、同様のご経験がある方がおられましたら 対処法など教えていただけるとありがたいです。 よろしくお願いいたします。
>>331 ここで聞いてる暇あったらぐれーぷしちーに聞け。
ツールバーの保存ボタンが消えちゃいました。 復活させる方法教えてください。
MPが勿体無いからザオラルにしとけ
336 :
デフォルトの名無しさん :2006/01/10(火) 16:15:45
フェニックスの羽でいいじゃん。 まあ復活しても即相手攻撃でまた死ぬかもしれんけど。
復活しなくても他で代用効くから復活不要じゃね?
お願いします。復活したいですぅ。
>>333 レムオルだな
時間が経てば見えるようになるよ
340 :
VBA :2006/01/10(火) 18:53:12
月電気公共料金 (kwh) 2110 387 4233 ■データを1件ずつ、ユーザ定義関数を利用して「公共料金」を計算させる プログラム作成せよ 料金計算は、下記の方法によるとします。 <電気料金の計算> 基本料金:1800円 定量制料金単価は ・使用量が90Kwh以下であれば18.14円/Kwh ・ 〃 90Kwh超230Kwh以下であれば24.85円/Kwh ・ 〃 230Kwh超であれば27.21円/Kwh (料金計算例) 70Kwh使用した場合:1800+70×18.14 120Kwh使用した場合:1800+90×18.14+(120−90)×24.85 =3432.6+(120−90)×24.85 250Kwh使用した場合:1800+90×18.14+140×24.85+(250−230)×27.21 =6911.6+(250−230)×27.21
341 :
VBA :2006/01/10(火) 18:56:49
上のデータは次です 月,電気,公共料金 kwh 2月110 3月87 4月233
343 :
デフォルトの名無しさん :2006/01/10(火) 21:26:24
質問ですが、フォーム上にexcelの表やグラフを 表示させることってできますか?
できる
345 :
デフォルトの名無しさん :2006/01/10(火) 21:54:20
346 :
343 :2006/01/10(火) 22:30:06
すいません、また質問なのですが・・・ フォームからコマンドボタンを押して、バックグラウンドでエクセルの マクロ処理を行ってから、フォームに表示したいのですがどうすれば いいのでしょうか。 見た目上、エクセルの起動が見えないようにすることはできますか?
できる
348 :
343 :2006/01/10(火) 22:37:07
>>347 調べきれなかったので、、、教えていただけないでしょうか。
フォーム上にエクセルを出せ。
Visibleも知らんのか
>>351 それでは見た目で判ってしまうな
そもそもこの343はVBAだからこその問題なのではないか?
VB買ってフォーム上に出せで正解
>>352 >それでは見た目で判ってしまうな
は?
>>329 遅れましたが、アイデアありがとうございます。
時間みて実装してみます。
>>333 空気よめなくて悪いが、VBを再インストールすれば復活するはず。
以前他のボタンが消えた時に再インストールで復活した。
ツールバー右クリしてユーザ設定出せばいいじゃまいか
神キタ━━━━━━(゚∀゚)━━━━━━!!!!
え? それをやっても戻せないから質問に来たんじゃないの? 俺はVB6インスコしてSP当ててアドイン組み込んだら、次にやるのがツールバー設定だが、 ツールバーのユーザー設定知らないってことは、デフォのツールバーで使ってたてことか?
ぬるぽい!ぬるぽい!
Scripting.DictionaryのAddって(Key, Item)だよね? だけど実際 Dic.Add "Key1", "Item1"ってやって Dic.Itemsを見ると"Key1"が Dic.Keysを見ると"Item1"が返ってくるんだけど、これでいいんだっけ? 俺の環境だけ変? いちおう素のForm1に最小限のコードだけ書いて試してますよ。 Itemのほうにオブジェクト変数を入れると、For Eachで「オブジェクトが 必要です」というエラーになってしまいます。 Dic.Add "Key1", New Class1 Dim Item As Class1 For Each Item In Dic ←ここでエラー scrrun.dllのバージョンは5.6.0.8820
>>361 addの定義についてもう一度調べなさい
363 :
361 :2006/01/11(水) 17:56:47
なんか今プロジェクト作り直したらItemsで"Item1"が返るようになってる・・ 参照設定しようとするときに"Microsoft Scripting Runtime"がリストに あがってこなくて、scrrun.dllを直接指定したんだが、このせいではないようです。 Class1を使うほうは相変わらず「オブジェクトが必要です」が出るし。
そりゃ出るだろ。
361は悲しいぐらいバカ
366 :
デフォルトの名無しさん :2006/01/11(水) 20:01:19
質問です。エクセルVBAでツールバーを全部非表示にしたいのですが どう書けばいいですか?
367 :
デフォルトの名無しさん :2006/01/11(水) 20:27:22
解決しました。スレ汚しすいませんでした。
>>361 出てあたり前
エラーはClass1で出てるんじゃないDictionaryで出てるの
For Each文を使うにはオブジェクトにCount・Item・_NewEnumが実装されて無いといけないのを知らないのか?
それ以前にディクショナリの意味分かってんのか?列挙する機能(For Each)を提供するのはコレクションだろ
> For Each文を使うにはオブジェクトにCount・Item・_NewEnumが実装されて無いといけないのを知らないのか? > それ以前にディクショナリの意味分かってんのか?列挙する機能(For Each)を提供するのはコレクションだろ はい、残念。 今回のエラーはそれとは違う。
俺は違わない方に一票w
本人
369は悲しいぐらいバカ
373 :
361 :2006/01/11(水) 23:38:35
For Each文の使い方は間違ってないと思います。 VB6で普通に使っていましたし、 自分のScripting.Dictionaryを使ったプログラミング方法の説明サイトは 2chでも何回か紹介されましたが好評でしたよ。
なんかいまデジャブを感じたw
368が必死
必死な361がいるスレはここですね
>>368 の文が、2行目しか当たってない件について
A1〜E5までの5×5のセルに適当な値(数字はループで入れる)を入れて、F列 に各行の合計、G列に各行の平均を算出し、F列の累計表をH列に表示するプロ グラム。 教えれ。。
age
断る。
エクセルのマクロについて質問させてもらいます これまでVBEでマクロ作って、他のファイル(数百)に適用してました 久しぶりに適用しようとすると、マクロが突然認識されなくなってしまいまして マクロのプログラム自体が全てのファイルを確認しても残ってないのですけど 同じような状況になった人っていませんか? また、そのマクロを復活させることは出来るでしょうか?
いいかげん、エクセルなスレ違い厨はどっか行けや
プチエスパーになってみるw Property Item(Key) Scripting.Dictionary の既定メンバ 指定したキーに対する項目を設定します。値の取得も可能です。 Itemsプロパティは配列を参照するVariant型を返すのがポイント。 違うか?wバリアントの配列か?wどっちでもVBじゃいいよ気にしんなw 初心に帰りちゃんとオブジェクトプロパティから変数に参照渡してみ?
↑言語障害者
>>381 意味ワカンネ。
Excelブックからマクロが消えたってことなのか?
コピーがあるなら、インポートしなおせばよいのでわ?
381です。
>>382 さん指摘ありがとう
Excelのスレに行ってきます
>>385 分かりにくい文章でごめんなさい
Excelブックからマクロが消えたってことです
コピーがないので・・・
完全に同じものを作り直すのが困難なので、質問してしまいました
ちょっとスレ違いのようですので、エクセルのスレに行ってきます
>>388 ありがとうございます 書き込みしてきました
このスレからVBA取ったら何も残らないんじゃないか?
だから何だって言うんだ? 無理矢理残す必要性もないだろ。
VBAはVBではない
だね
正直、VBAのことを聞かれても分からんよ。アプリ毎に違ってたりするし。
VBA=VBではないけど、VBAはVB言語。 VBA搭載アプリ固有のオブジェクトなど知らと言うかもしれないけど、 それ言ったらオートメーションオブジェクトだってAPIだってVB固有のものではない。 そうなると組み込み関数とコントロールについてくらいしか語ること無くなるな。 まあ、知識が及ばない物を遠ざけたい気持ちも分からなくもないが、 少なくともここで許容されてるVBScriptよりはVBに近い存在だ。
じゃあおまえが教えてやれば?
ユーザーコントロールの上にユーザーコントロールを置いたものを フォームに貼り付けると 「オブジェクト変数またはWithブロック変数が設定されていません。」 と出るのですがなぜでしょうか?
398 :
397 :2006/01/12(木) 16:48:19
UserControl_Initializeでエラーが発生していました。 このイベントはフォームのデザイン時にも実行されてしまうのでしょうか? デザイン時には実行されないようにできないものでしょうか?
>>396 あのね、誰が答えるかじゃないんだよ。
解らないことがあるのも、答えられない質問があるのも仕方ないし
そもそもここでは回答する義務すら無いので、答えられる質問に答えないのだって自由。
ただ、答えられない分野だからって除外しようとするなってだけだ。
答えられない質問、答えたくない質問は叩いて追い出すのではなく、
他の人に任せておけばいいんだよ。
400 :
デフォルトの名無しさん :2006/01/12(木) 17:23:49
dim y as double, yd as double, dx as double, x as double と loop until math.abs(dx) < eps の2文は何を意味しているのですか?
変数の宣言 と ループの終了条件
403 :
デフォルトの名無しさん :2006/01/12(木) 20:12:16
true basic と visual basic はどう違うの? true basic てどこから買うんだろうか・・。
>>403 TrueBASICは日本ではマイナー。
理系でしか使われてない。
405 :
デフォルトの名無しさん :2006/01/13(金) 10:26:15
true basic のプログラムをVBでもできますか?
>>405 移植に関する情報は少ないね。
CやFORTRANに移植すれば?
407 :
デフォルトの名無しさん :2006/01/13(金) 11:18:55
VB5とVB6の開発環境を1台のパソコン OSはWindows2000で共有できますか? VB4とVB5のときはWindowsNTで不可だった気がするのですが
ライセンスをxxらないならば、デゥアルブートにして2環境作れば?
>>407 開発環境は共存出来ません。
インストールしたらどっちもOSも滅茶苦茶になる。
Textボックスでタブを入力された場合、 コントロールの移動ではなく、テキストボックスにタブ文字を入れたいのですが、 どうすればいいでしょうか?
412 :
ニュートン法 :2006/01/13(金) 14:10:24
Excelの質問です! VBAでニュートン法を使ってこの問題を解くとプログラムはどうなりますか? 教えてください. F(x)=x^2-e^(-x)-2=0 初期値X0=6 収束条件E=10^-5
416 :
411 :2006/01/13(金) 15:18:54
>>413 むむ??
>>414 うぉ。これだけのためにサブクラス化しなきゃいけないの嫌だなぁ。
諦めようかな。
>>407 VB4,5,6共存させてるよ。
MS Common Control とか使ってるとまずいと思う(6が5のOCX上書きするので)。
それ以外は今のところ大丈夫かな。
NTでも2Kでも問題は出てないけどね。今はXPで共存させてる。
もちろん、MSがこれを保証しているかどうかはわからない。
俺が運良く問題にぶち当たってないだけかもしれんし。
>>417 それは共存できてないじゃん。
混在してるだけで。
>>417 そんな滅茶苦茶な環境で作ったアプリのセットアップを
他のPCで動かしたら駄目ですよ。
そのマシンの環境迄破壊します。
vmwareをnyするのが一番
423 :
417 :2006/01/13(金) 17:14:22
なにやらひどい言われようですな。
別に俺のところで動いたからって他の環境で動くのを保証しているわけじゃないぞ。
あくまで、動作している環境もあるよって程度だよ。
>>419 これは共存って言わないの?
混在とはどう違うの?
>>420 普通テスト用の環境って作らない?開発とは別に。
>>421 そうですか。そうかもしれませんね。
テスト用の環境に
>>417 の環境で作ったインストーラで
インストールするなんてテラコワス
共存してるなら全てのものが異常なく使える 一部上書きされて使えなくなってる時点で共存じゃねぇ
>>423 そんな環境でテストする意味は全然ない。
実運用では有り得ないから。
それに、そんな壊れた環境でのテストは完全に無意味&無駄。
>>423 両方が共に普通に存在して共存だろ?
他方に対して影響してる時点で混在
Vb6・Vb5・Vb4...は設定・ライブラリ等が競合する為同一環境にインストールすることは出来ません というのがM$のサポート 普通の頭なら同時インストールはしない
429 :
デフォルトの名無しさん :2006/01/13(金) 21:45:29
はじめまして。プログラム初心者です。VB6.0のプログラムのことで教えて下さい。 学校の課題で「入力された2進数32ケタ分の情報を可逆圧縮して出力する装置と、 その情報を入力すると元の2進数として出力する装置」を設計し作製せよという課題がでました。 とりあえずVB6.0は入手したのですが自分らのグループはみんなプログラム初心者なので 何をどうやってプログラムすればよいのか全くわかりません。 あと1週間で仕上げないといけないのですが、どういう手順でプログラムをしていけば良いのか どなたか教えて頂けませんでしょうか?
>>429 ここで質問するという選択肢を選んだ時点でバッドエンドだ
出来ないなら出来るように努力するか、 出来ないということをそのまま公表するかのどちらかだろ。 最近のガキは(大人もだけど)取り繕うことしか考えてないのか? 上辺だけ整えたって「自力で解決できる能力が無い」という現状は何もかわらない。 仕事じゃないんだからなんとしても結果を出さなきゃならないってわけでもないだろ。 もちろん評価は落ちるだろうが、低い評価にしか値しない能力ならそれは仕方ないこと。
>>429 課題くらい、人から簡単に答えを聞こうとせずに、自分で書籍その他資料を当って解決しやがれ
てめぇの学校には図書館(or室)も無いのか
アニメ学校のプログラマー科なんだろ……
435 :
429 :2006/01/13(金) 22:38:58
わかった。もう聞かん。さよならー おまいら
もう来るなよー
>>429 課題の求めてる意味がよく分からんな。
32桁の二進数→1と0が32文字。
で、文字数を減らせばいいのか?
それなら、単純に16進表記するとか。
>>437 おいおいw
圧縮って知らないのかい君は。
シャノンの情報理論って学部で勉強するだろw
ひょっとして429の釣り?
しかし4バイトを圧縮するって無理があるなw
439 :
デフォルトの名無しさん :2006/01/14(土) 00:01:13
441 :
デフォルトの名無しさん :2006/01/14(土) 00:08:40
質問者の負け惜しみはほどほどに
さて。
>>429 はもう来ないみたいだし、あの課題をやってみようぜ。
444 :
デフォルトの名無しさん :2006/01/14(土) 00:19:20
>>443 ここは提供されたネタを実装するスレじゃないので、
求める人も居ないのにやってみる必要なし。
と、最後の望みを賭けた演出をうち砕いてみるてすと。
そろそろ寝るか・・・
447 :
デフォルトの名無しさん :2006/01/14(土) 00:31:09
[タスク] デバッグは終了しました・・・
とにかく課題を2ちゃんで聞いてしまっては 本人のためにならない。
さて。
>>429 はまだ常駐しているようだし寝るべ。
>>445 あんなに求めてたのに誰もやってあげなかったよ。
451 :
デフォルトの名無しさん :2006/01/14(土) 00:41:35
>>450 赤の他人の課題をやる必要がないからもんね
32ビットの値を8ビットまで圧縮できるアルゴリズムを考えたが それを書くにはこのスレは狭すぎる
453 :
デフォルトの名無しさん :2006/01/14(土) 00:50:15
無駄にスレの浪費するな
いや書いてよ パクッテ大もうけするからw
しかし4ビットが8ビットになる時もある諸刃の剣。 ランダムデータにはおすすめできない。
>>429 進数変換の課題のようにも見えるけどファクシミリ(FAX)の課題?
ランレングス圧縮でいいんだったら,
0や1がいくつ連続するか数えて、
入力 00000000000000000000000000000000
出力 0-32(0が32個)
入力 10000000000000000000000000000000
出力 1-1-0-31(1が1個,0が31個)
みたいなデータを出力すればいいんじゃねーの?
でもこの方法だと,
入力データの0や1が連続している場合はうまく圧縮できそうだけど、
0や1が連続していない場合は圧縮後のデータの方が容量大きく
なりそうだよね。
そういう気付いたことは考察欄に書いておく。
プログラムの作り方の話をすると、圧縮するサブルーチンと
圧縮を解くサブルーチンの最低2つに分けることができる。
入力データと出力データは文字列にして、
「いま処理中の文字は文字列中の何番目の文字か?」を保持する
変数が必要。
このあたりはどうにでも作れるので、みなさんで適当に。
おいおい、1週間過ぎてから始めろよ
提出期限が1週間後だから
そういやどんなサイズのファイルでも0バイトにする圧縮ソフトあったな。 しかも可逆圧縮で。
コロンブスの卵だよな
そんなのあるわけないじゃん
元に戻すのに、元ファイルと同じサイズの辞書ファイルが必要なんだよね。
どんなサイズのファイルでも 「ぬるぽ」っていうたった3文字の圧縮するソフト知ってるよ
ファイルの中身を0バイトにして、内容をファイル名だか何かにしてたやつがあったが。
>>462 あれはすごかった。
まさに発想の転換。ただ多用するとHDDぶっ壊れるかも知れんけど。
> 多用するとHDDぶっ壊れるかも そういう発送をする根拠が知りたい
ちゅーばっか
0バイトの可逆ってドラえもんでも無理だな。 ドラえもんが自分を四次元ポケットに入れたらどうなるか?って感じだ。
亜空の瘴気 ヴァニラ=アイス
クリスタルレポートについてご存知の方がおられましたら教えてください。 既存のプロジェクトにcrpe32.dllを呼び出して使用している個所がありました。 VB6.0で開いていたのですが開発環境にcpre32.dllがありませんでした。 調べてみるとVB5.0に提供されていたDLLのようです。 これをVB6.0で利用する場合、何か置き換えられるものがあるのでしょうか? よろしくお願いいたします。
>>475 ありがとうございました。検討いたします。
477 :
474 :2006/01/16(月) 14:03:19
>>475 たびたび申し訳ありません。
VB6.0にはcpre32.dllが無いだけではなく
CrystalReports自体付属していないのでしょうか?
VB5.0で付属のクリスタルレポートを使って開発されていたプロジェクトを
VB6.0に移行する場合、製品版を購入するというのが通常の手順なのでしょうか?
申し訳ありませんがよろしくお願いいたします。
> 通常の手順なのでしょうか? 何を以て"普通"なんて判断をするの? おまえが納得する手順を踏めばいいだけだろ。 おまえは他人に「〜が普通だよ」って言ってもらわないと何も出来ないのか? そもそも匿名掲示板は情報収集以上のことに使おうってのが間違い。 提供された情報が正しいかどうか、自分に合っているか、(普通かどうか)は 自分で確認しろ。
480 :
472 :2006/01/16(月) 15:44:22
ドラえもんを4次元ポケットに入れたらどうなるか どう見ても、またポケットから出てくるだけのお話です、本当に(ry
>>480 ポケット自体をポケットに入れるんだよ。
圧縮結果サイズ0の可逆反応の話をしてるんだから、そこからどらを戻せるかってことだ。
>>477 VB6買ったんなら、付属してるかどうかはそれ見れば分かる。
483 :
472 :2006/01/16(月) 16:18:28
>>481 ドラえもんが自分を4次元ポケットに入れたらどうなるか、ですが何か
484 :
デフォルトの名無しさん :2006/01/16(月) 16:27:47
ドラえもんのせいで話がややこしくなってる。
485 :
472 :2006/01/16(月) 16:30:42
俺が最初からちゃんとドラえもんが自分をと言ってるのに勝手に
>>481 がややこしくしてるだけ
486 :
デフォルトの名無しさん :2006/01/16(月) 16:36:50
>>481 が言っていることは、ポケットを裏返すということ?
だったら
>>481 の答えは「縫い目が見える」だ
どうなるも何も、四次元ポケットは取り外せるから、 外してから普通に中に入るだけ。
元の話も読まずに書きこしてる奴ばっかだな? 圧縮サイズ0の可逆圧縮が可能って言ってる馬鹿がいるから、例をだしてるんだろ? ドラえもんがポケットを外さずに自分を全て入れた上で、それを戻すのが可能だといってるのが、0からの可逆復元だよ。 元の圧縮自体が矛盾してるのは当然なの。出来ないことを言ってるんだから。 ドラえもんの例で言えば、ドラえもんを消滅させるしかないのに、それを圧縮とよび、復元可能だと言ってるんだよ。
件のサイズ0ってのは、別次元に送ってるだけなのだが。
490 :
472 :2006/01/16(月) 17:18:10
ポケットを外さずにポケットごとなんて言ってないのにw 消滅とかバカじゃねーの?w
ファイル「C:\temp_a」の内容を全てそのままファイル「D:\temp_a」として移し、ファイル「C:\temp_a」の内容を全て消去し0とする
ドラえもんのは要はこういうことですよと
それを圧縮と比べてるのは
>>488 だけ
492 :
デフォルトの名無しさん :2006/01/16(月) 18:11:43
>>488 >元の話も読まずに書きこしてる奴ばっかだな?
それは自分に対して言ってるのかな?
このスレは相変わらずくだらない事でカオス状態になるなw
495 :
デフォルトの名無しさん :2006/01/16(月) 19:41:23
カオス終わり VBの質問を再開します。
VB6で戻り値を設定したプログラムは作れますでしょうか? form_unloadして終了したときに戻り値が出ると助かるのですが。
VB6.0でFTPソフトを作ってます。 んで、でかいファイルを転送しようとすると、転送部分で処理が留まってしまうので、 ウィンドウが固まってしまいます。 以前、ファイルコピーソフトを作ったときは、コピー部分を別EXEにして、 別プロセスとして動かすことで画面が固まるの防いだんですが、 (マルチプロセスっていうんですか?まぁその程度の知識です) FTPでウィンドウ固まるのを防ぐ方法も、ファイルごとにFTP転送を行う EXEを作って、上記と同様な方法ですればいいんでしょうか? そうするとファイルごとにFTP鯖につなぐことになるし、 何よりもEXEが複数になってあまり綺麗じゃないのが気になります・・・
>>496 無理。VBSなら出来るので、VBアプリと何とかして連携させるとか。
>>497 例えば 100 k バイト毎送信して間に DoEvents 挟むとか。
非同期通信すれば良いじゃん サブクラス化して、Windowsメッセージを処理すればOK つかFTPをどうやって実装してるわけ?コントロール使ってんの?
サブクラス化してやるぐらいなら、VBで作らない、別EXEで連携などのほうがマシ。
わざわざ作らんでも FFFTP でいいのに。
それは違う。 仕事で使うならFFFTP使いますなんていえませんよ。
FFFTPでいいじゃん
じゃあ俺はftp.exeで
>>503 普通に言ってたけど。
既にある物を上手く利用して組み合わせ、安くて安定したシステムを
短い納期で提供しないと。
FFFTP は自動処理を目的とした FTP クライアントではありません 以前より、FFFTP をコマンドライン経由で自動化処理して用いる事を検討している方が多いですが、 FFFTP は手動操作がメインであり、自動化を目的として作成されておりません。 コマンドラインは起動時の自動処理等、最小限の動作しか対応されていません。 自動化を目的とした FTP クライアント は他にあると思います。お探し下さい。
自動化しろよ
OS標準の Ftp.Exe Transfers files to and from a computer running an FTP server service (sometimes called a daemon). Ftp can be used interactively. FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [-A] [host] -v Suppresses display of remote server responses. -n Suppresses auto-login upon initial connection. -i Turns off interactive prompting during multiple file transfers. -d Enables debugging. -g Disables filename globbing (see GLOB command). ★-s:filename Specifies a text file containing FTP commands; the commands will automatically run after FTP starts. -a Use any local interface when binding data connection. -A login as anonymous. -w:buffersize Overrides the default transfer buffer size of 4096. host Specifies the host name or IP address of the remote host to connect to. Notes: - mget and mput commands take y/n/q for yes/no/quit. - Use Control-C to abort commands.
ドライブとディレクトリリストボックスについての質問なんですが、 Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Form_Load() Dir1.Path = "C:\" Drive1.Drive = Left(Dir1.Path, 2) End Sub の様に初期値を設定しようとすると、 Drive1.Drive = Left(Dir1.Path, 2) の後 Drive1_Change() が動いてしまって初期値設定ができません。 topindexも考えたんですが、 それだと初期値が変わった時の場合分けが必要だし... 何か上手い方法はありませんか?
>>513 いやそれで普通に C:\ で初期化されると思うけど。
何が駄目なの?
>>514 やっても『C:\』でなくて、『C:\〜\デスクトップ\VB』ってProject置いてあるフォルダになっちゃうんです...orz
うちの環境がおかしいのか...?orz
あ、VB6です。
あ、できた。。。(ノ∀`) Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub Form_Load() Dim P As String P = "C:\" Drive1.Drive = Left(P, 2) Dir1.Path = P End Sub お騒がせしました。orz
VBでボタンを使いHTMLに書いてあるJavaScriptやVBScriptを 実行する方法はありますか?
>>517 ファイル渡しが一番簡単なのでは。
VBアプリが終わるとき、特定の場所に内容が0とか1の
1バイトのエラーコードを書いたファイルを作り、Start xxxx /WAIT
で同期を取って、次にそのファイルを読んで ERRORLEVEL を返すだけの
小さなCアプリを走らせる、と。
520 :
デフォルトの名無しさん :2006/01/18(水) 17:13:08
今日はじめて知って恥ずかしいんだけど聞いてくれ。 TextBoxとか普通のコントロールは、コントロール内でクリックしたまんま外にカーソルを移動させてボタンを離す(つまりDrag&Dropの動作) をすると、コントロールの外でもMouseUpイベントが発生する。 でもListViewは発生しなかったんでビックリした。 つーか、MouseMoveイベントからListView内でしか発生しなかった。 このListViewの挙動を、他のコントロールと同じにする方法ってあるのかな?
AIP使えばどうにでもなるが、標準コントロール(プロジェクト > コンポーネントで 何もチェックしなくても使える物) とそれ以外の仕様は たとえMS製でも一律じゃないと思った方がいい。 同じイベント名でも細かい動作が違ったりする。
>>521 520だけど、APIのSetCapturerすら効かないみたい><
オイオイ違うだろw
オマエガナ
524
>>526 いまListBoxからTextBoxにアイテムをDrag&Dropする機能があるプログラムがあるんだけど
コイツがMouseDown/MouseMove/MouseUpを使って実装してあるんだよ。
単純にこのListBoxをListViewに置き換えられれば楽だなー、と思って。
好きにすればいいじゃん
529 :
困ってます。 :2006/01/18(水) 21:09:53
教えてください。 突然、VB5の開発をする事になりました。 (ユーザーの環境が5.0) 会社のPCにVB5をインストールしたのですが、サービスパックがありません。 手に入れる方法はありますか?
531 :
困ってます。 :2006/01/18(水) 21:37:26
>>530 早速のご返事ありがとうございます。
そこへは、行ってみたのですが、
Location Cannot Be Found となってダウンロードまでたどり着けないんです。
たどり着くも何も直接ファイルにリンクされてるじゃんw 意味ワカンネ
534 :
デフォルトの名無しさん :2006/01/18(水) 22:14:14
それではうpだてできないんじゃね?ftpくらいあん子で適当に掘ったら それっぽいのは見つかったけどな。自分で探して見れ。
どこの世界にわざわざテキストファイルを自己解凍ファイルでアップするタワケがおるねんw つーか、日本語読めないのかよw
リリースノート Readme.wri Redist.txt Eula.txt が含まれています。
540 :
デフォルトの名無しさん :2006/01/18(水) 23:14:43
Version VB6.0 仕様 JPG、GIF、PNG、BMPをImageコントロールに読込み、読み込んだ画像上に 画像の大きさに比例するフォントサイズの文字列を表示する。 問題点 上記の各ファイルをImageコントロールに表示するとこまではできたのですが 文字列を表示することができません。どうすれば表示させることができるでしょうか。 また、背景色を指定したいのですがImageコントロールにBackColorプロパティが存在しません。 どうすれば背景色を指定することができるか教えてもらえないでしょうか。 よろしくお願いします。
541 :
538 :2006/01/18(水) 23:15:36
>>540 標準添付のコントロールでは全部無理。
なので、市販のどれかの画像処理系OCXを買う。
544 :
529 :2006/01/18(水) 23:46:02
>>540 俺だったらラベル重ねるだけで済ましちゃう。
Imageコントロールは止めてPictureBoxにすれば書き込める。
慣れない内はAutoredraw=trueで。
でもグラフィックに書き込むことが目的なのではなく、
重ねて表示するのが目的なんだったら
>>545
547 :
デフォルトの名無しさん :2006/01/19(木) 02:11:08
□!!!これを見た貴方は3日以内に死にます!!!■ ■死にたくなければ、このレスをコピーして他のスレに □ □10回貼り付けて下さい。1時間以内にです!もし無 ■ ■した場合は、今日寝ている間に富子さんがやってきて□ □貴方の首を絞めに来ます。富子さんは太平洋戦争の■ ■時に16歳という若さで亡くなった女の子で、未だに成 □ □仏していないそうです。信じる信じないは貴方次第。 ■ ■今年になってからこのレスを無視した人で、“呪われ □ □て死亡した人”が続出しています。これは富子さんの ■ ■呪い。呪われて死んでもいいのならこれを無視するこ□ □とでしょうね。 ■ ■――貴方がこうしているうちに富子さんが後ろから見□ □ていますよ…。 ■ ■□■□■□■□■□■□■□■□■□■□■□■□
548 :
デフォルトの名無しさん :2006/01/19(木) 04:34:03
富子さんは、太平洋戦争の時、もうネットで2ch開いていた当時、超ハイテク16歳と見た!! 呪い怖〜いよ〜 (^O^)/ガクブル&西川クンが気絶してもうた〜
549 :
デフォルトの名無しさん :2006/01/19(木) 04:39:51
547 16才の彼女は未だに成仏出来ないって所、 16才の彼女は未だに未成熟って読んでエロい妄想が沢山吹き出てしまった。 ロリコンな俺、ウカツだったぜ・・・
誰か和訳してくれ
>富子さんが呪ます まで読んだ
>幼女の唇を まで読んだ。
>>552 と
>>553 を同時に読んだせいで
唇を重ねる方法でやってみたいと思います。
ありがとうございました。
に見えた
ある コンピュータ名を持つコンピュータがネットワークに繋がっているかどうかを調べて 返すということをしたいのですが… 例えば テキストボックスtext1 に"CP1"と入力して コマンドボタンを押すと、ネットワーク上でCP1 が認識できたら OKとメッセージ表示、できなかったらNOとメッセージ表示と。 NET VIEW とかいうコマンドを使えばよいのでしょうか。 少し調べたけれど良く分かりませんでした…
>>554 そうかそういう方法もあったのか...(゜Д゜;)
グリッドで表示されたデータの中からマウスでクリックしたデータをテキストボックスに書き込みたいんですが マウスでクリックしたデータ gred.プロパティ =txtbox だと思うんですがプロパティは何を使えば取得できますか?
左辺と右辺からして逆に思えるし。 GridのカレントであればRowColの該当するTextか何かで取れるだろうし。
>>558 グリッドって言ってもいろいろあるわけだが、どのグリッドコントロール?
>>558 グリッドって言ってもいろいろあるわけだが、どのグリッドコントロール?
>>558 普通 .Text みたいな名前のプロパティになってる筈。
後は .Value とか。
563 :
デフォルトの名無しさん :2006/01/20(金) 02:08:02
ひさしぶりにVB6.0を使ってみたのだが、 すっかり忘れてる・・・・ EXCELアプリケーションのインストールパスを取得する APIってなんでしたっけ?
そんなAPIあるとは思えないんだけど。
566 :
デフォルトの名無しさん :2006/01/20(金) 12:33:36
Linux上でC言語で作成された電文をTCP/IPで送信して PC側のVB6.0で作成したアプリで受信しているのですが 新たに送信電文を暗号化する必要がありBlowfishを組み込みました 送信側はOKなのですが、VB側はunsigned longのような方とか無い為 なかなかうまくいきません、なにかVB側で簡単に複合化する手立てはないでしょうか? C言語の方がメインでVBのほうは今一なので・・・・
ディストリビューションウィザードのスクリプトって どこに保存されているのでしょうか?
569 :
デフォルトの名無しさん :2006/01/20(金) 15:09:06
VB6とアクセス2000を使ったプログラムを作っています アクセスのテーブルを接続しレコードセットオブジェクトを作りました このテーブルにはNAME1〜NAME12というようなフィールドがあるのですが これを プログラム内のループで扱うことは出来るのでしょうか わかりにくいかもしれないですが 下のような感じです for i = 1 to 12 RS![NAME & i] = name(i) next i よろしくお願いいたします
>>569 DAOなのかADOなのか知らんが
RS.Fields("NAME" & i).Value =
>NAME1〜NAME12というようなフィールドがあるのですが 激しく非正規形な香りがするな。
どうせなら NAME01 〜 NAME12 に。
574 :
デフォルトの名無しさん :2006/01/20(金) 22:43:50
質問です。VBってWindowsのパソコンだとどれでも最初からスタート→プログラム→VBで起動できるんですか?
はい。そうです。
>>575 教えていただいてありがとうございました(;´人`)
>>574 最初からは入ってないよ。
買ってインストールせんと。
うい?!やっぱりそうでしたかあ↓↓わかりました!!
>>566 unsigned long コイツはVBのLong型で受け取れるよ
ただ 0x7FFFFFFF超える値はマイナスで表示されるから
変換演算してValiantかDouble他の変換しないとダメ
>>579 全部 Currency でやってるな・・・
581 :
566 :2006/01/21(土) 15:25:24
>>579 >>567 CでDLLを作ってみようと思うのですが、
どのようなツールを使って、どうやって作ればいいのですか?
簡単に教えてください、あとは調べます
>>581 VBだけ買ったのか。VisualStudio6ならVC++も入ってるのに。
DLLのソースは例えばこんな感じ。改行が多いって言われたので詰めて・・・
#define STRICT
#include <windows.h>
#include <windowsx.h>
__declspec(dllexport) VOID Hoge(HWND hWnd);
BOOL __export __loadds CALLBACK HemoDlgProc(HWND hDlg ,
UINT iMessage,
WPARAM wParam ,
LPARAM lParam );
#pragma data_seg("sharedat")
#pragma bss_seg("bss_data")
__declspec(dllexport) BOOL bFoo = FALSE;
LRESULT CALLBACK HemoDlgProc(HWND hWnd ,
UINT msg ,
WPARAM wParam,
LPARAM lParam )
{
// 処理
}
BOOL WINAPI DllMain(HANDLE hInst ,
ULONG ul_reason_for_call,
LPVOID lpReserved )
{
// 処理
}
>>566 データ量わからんけど、少ないなら
ぜんぶ文字列にしちゃえばいいんじゃないの?
585 :
デフォルトの名無しさん :2006/01/21(土) 16:17:14
>>582 Visual Studio .NET2003というのがあります
これのC++で作成しても大丈夫ですか?
586 :
デフォルトの名無しさん :2006/01/21(土) 16:18:17
>>583 ごめん
なんのツールで作ればいいのかもわからないので
聞いたほうが早いかと
そんな奴が作れるのか
588 :
デフォルトの名無しさん :2006/01/21(土) 16:30:00
>>587 何を使って作ればいいか、わかれば作れるでしょ
もちろん初めてだから時間はかかるけど
とりあえずもうVBの話じゃないからスレ違い
>>585 んー、C++じゃなくて、生Cで作って。
DLLなんてウィザードで作れるじゃん
592 :
デフォルトの名無しさん :2006/01/21(土) 17:08:09
ウィザードよりウォーリアの方が好きです
593 :
デフォルトの名無しさん :2006/01/21(土) 18:28:21
早く教えてよ
ウェブ上のhtmlファイルの更新日時が知りたいんですが、 httpヘッダに書かれているLast-Modifiedヘッダじゃなくて、 ウェブサーバのファイルシステム上の更新日時を知るには どうしたらいいんでしょうか。 ftpの場合だったらFtpFindFirstFileで調べられるんですが、 httpの場合のやり方がわかりませんので、教えてください。
できないんですか。。。残念。
>>595 HTMLファイルの中に<!-- lastupdated=YYYY/MM/DD hh/mm/ss -->って
書いておけばいいんじゃねーの?
ってそういう質問じゃないのか。
>>595 それを知って何がしたいの?
実は、その「やりたい事」は、更新日時を知らなくても出来るかもよ。
>>519 遅レスですがありがとうございます。
いいアイデアです。助かりました。
モキュモキュ
VBでタブブラウザ作ってみようと思うんだけど おまえらだったらVBで作るのは無謀だと思う?
んーにゃ。
605 :
602 :2006/01/24(火) 09:20:12
そうか!無謀ではないか よし、いっちょ作ってみるか(`・ω・´)
>>602 ! | ! ', ヽ \ ', ヽ `丶、__,.ィ
| ', ', '、 ヽ ヽ ! ', <´
', ', ヽ ヽ ',ヽ ヽ',\;、 !', ! ヽ 、ヾニ=-
ヽ ヽ ヽ、 ヽゝヽ、 ヾ ̄__ヽノ-リ', \ \\
lヽ ',ー- 、ヾー '"´i { ij } } ヽ \ ',ヽ',
', ヾ>‐''iヾ´ ヾニ´ノ ヽ ', !
','"{ iヾ! } } ´"' ' ゙` |\ } ', |
ヽ、 ヽヾニ´'、 i !'" ヽ ! リ
!i丶、__\゙ ` / ',i ',i' , }
、 ヽヽ=ヽ  ̄ ⊂つ , ' ソ / !リ ! /
.|`゙''`''ーヽ、 _,, / |ノ'ノ/ { l/
.| i ヽ、 ``´´ ニ=- ,.イ / // ; /ヾゝ
. '、 ヽ、 `゙''ー‐<`゙ ー -- ‐'" { _,..{ ∠´ノ /' 挑戦する事は素晴らしいわ・・・
,>'"´゙ヾヽ''ヾ)ヽー` _, ---゙==、'´ '´ `ヽ | i
'´ ヾヽ ヽ|、ー ,.イ´i ! | ! ヽヽヽ`ヽ、 _ r、_ヽ|
}'゙| ', ! / i l| || !',ヽ_}ヽゝ', 、、ヽ`´ `゙r‐、
}| ', }! i |r:::ヽヾヾ {。:::} ',', ', !、', }
, !! i !| | |ヾ-' `゙´ ヾ! !|ノ゙' |
{ ',|___',i ',゙' 、_rっ-‐'´ ,}| |_,ヘ'ヽ,イノー;、}
',/´ `゙ヽ `´ ノ゙´ / /''´
607 :
デフォルトの名無しさん :2006/01/24(火) 11:50:15
すいません、 以前あった、MSCD70-175と70-176をもとにいま〜 勉強しようと思っているのですが、 どちらから取り組んだほうがよろしいですか?
>>607 MSCD70-175と70-176て何?
Live2chはVBだ
610 :
602 :2006/01/24(火) 21:13:28
とりあえず、タブブラウザ制作開始した MDIにしてツールバーのところをIEちっくにCoolBarにしてみたら CoolBar上に置かれたコントロールにフォーカスが行くたんびにちらつく・・・orz まったく、俺がいったい何をしたというんだ・・・(´・ω・`)
611 :
デフォルトの名無しさん :2006/01/24(火) 21:59:18
質問です。 spreadにsettextされているデータ同士を 加算し再びspreadのセル内に出力したいのですが いい方法は御座いますでしょうか?
612 :
デフォルトの名無しさん :2006/01/24(火) 23:48:38
>>610 細かいことは後回し後回し!
出来ることから勢いに乗ってやって行けばいいじゃん
っていうか、どうせ趣味ならExpressでやりたいと普通は思うんじゃないかと。。 VB6に固執していいことあるか? 仕事ならそれも仕方ないだろうけどさ。
やっぱ軽いし起動も早いからなぁ->VB6 でも.NETの楽さも捨てがたいが。 タブブラウザなんてまさにVB向きなんじゃないの。 IEコンポーネント使って作るサンプルが転がってるしな。 ちらつくぐらいは気にスンナ
615 :
デフォルトの名無しさん :2006/01/25(水) 17:34:40
>>614 処理は.NETの方が速いらしいよ。
起動速度も改善可能。
って、こんな事誰でも知ってるか・・・
この場合の早い軽いってのは、開発環境のことじゃないの?
>>615 ,一-、
/ ̄ l | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■■-っ < んなーこたーない
´∀`/ \__________
__/|Y/\.
Ё|__ | / |
| У.. |
んなことあるよw
この場合の早い軽いってのは、開発環境のことじゃないの?
620 :
デフォルトの名無しさん :2006/01/25(水) 23:12:13
>>617 ホントにそう思ってんの?
ギャグだよね・・・
621 :
602 :2006/01/25(水) 23:24:38
引き続きタブブラウザ、結構出来てきた メニューの項目をIEちっくに、一通り必要な機能を乗せたら 「編集 -> 切り取り」を実行したら選択してたコントロールとか消えた・・・orz まったく、俺がいったい何をしたというんだ・・・(´・ω・`)
この場合の早い軽いってのは、開発環境のことじゃないの?
ここはお前の日記帳じゃねえんだ チラシの裏にでも書いてろ
625 :
デフォルトの名無しさん :2006/01/25(水) 23:33:40
なにこの糞開発日記。
626 :
デフォルトの名無しさん :2006/01/25(水) 23:34:06
この場合の早い軽いってのは、実行のことじゃないの?
文字列が、”山田町*-**-*”のようになっている場合 (*は任意の数字) 最初の*の位置を探すエレガントな方法を教えてください。 今は二重ループでやってるのですが・・・
どう考えても二重ループにはならないのだが、どうやってるんだろう
正規表現使うのが一番簡単だな
>>627 普通に先頭から一文字づつ判断して数値かどうか見ればいいのでは。
文字数に対するループと、0〜9までのループで、0〜9のどれかが一致したら数字と判断とかやってたりしてな。 マヌケすぎる方法だが、二重ループって言うとこれくらいしか思いつかん。
>>630 「づつ」じゃなくて「ずつ」だよお兄ちゃん。あくまで本則が「ずつ」ってだけだが
>>632 そっちが正しいのは知ってるけど、好みで「づつ」を使ってます。
他にも、「必ず」が正しいのは知ってるけど、好みで「必らず」を使ってます。
>>627 一番重要な事は「正しく動作するコードを書く」事だと思うが。
で、正しく動作するコードは、美しく、エレガントだ。
おいおい一体どんな教育受けてんだよw 「ずつ」も「づつ」もどっちがより正しいなんてないよ。 どっちも正しい。常識でっせw
ずつが本則ですが何か?
相変わらずry
VBでWSH(?)とか使う場合、全部 Dim objData As Object とかで宣言すればいいけど、 それだと、折角参照設定してもインテリセンス(だっけ?)が使えませんよね。 その為に、Dim objData As XXXX と正しく宣言しないと駄目な訳だけど、それがどんな型 なのかがよく分からない場合、どうやって調べてますか?(XXXXの部分)
>>640 オブジェクトブラウザ使えばいいだけでわ?
643 :
デフォルトの名無しさん :2006/01/26(木) 21:41:32
644 :
デフォルトの名無しさん :2006/01/26(木) 21:49:53
>>640 同意。
あとは、素でIDLとかODLを読む。
>>640 手っ取り早いのはウォッチで変数の中身見ろ
オブジェクトの型・インタフェースも出てるよ
参照して無い型まで調べられるよ
Visual StudioのOLE Viewがあれば敵無しなんだけどね
>>642 私の勘違いかもしれませんが、XXXXを調べる事は出来るけど、
逆は出来ない様な・・・
>>644 素で読む、ですか。成る程・・・
>>645 変数って、objData を、ですか?
objData をどう宣言するかが分からない訳で、As Object と宣言した
変数を見ても、Object 型のインターフェイスしか分からないのでは・・・
「参照して無い型まで調べられる」って部分かな。
Visual StudioのOLE View は調べてみます。
>>640 >>変数って、objData を、ですか?
そう
ブレイクポイントで止めて変数の中見る
As Object で宣言しても中にが何の型なのか丁寧に出てきてくれるよ
Dim O As Object
Set O = CreateObject("Scripting.FileSystemObject")
なら
O はObject/FileSystemObject って出るよ
648 :
デフォルトの名無しさん :2006/01/27(金) 01:21:16
そこで横から質問ですがVB良くしらないんでおしえてつかさい クラスのインスタンスを作成するときの Dim Objtest As class1 set Objtest = New class1 と Dim Objtest As New class1 の宣言ってどうちがうんですか?下記の宣言をかいたとき 先輩にウンココードだと怒られて意味がわかないんですが
>>648 理由も言わずにウンコというやつこそウンコ。
>>648 イニシャライザの走るタイミングが違う
set Objtest = New class1
は Newした直後に走るけど
Dim Objtest As New class1
だと一番最初にメンバーにアクセスした時
Class_Initializeに処理が書いていなければどちらを使っても
さほど大差ない
>>648 お仕事コードなら前者のほうがベター
いつクラスが作成されるかハッキリするので可読性がよいから
それと将来Initializeに、処理が追加されない保障はないから
と書いてみたものの、うちは後者を使うことが多いw
趣味のプログラムなら好きなほうにすれヴぁ
>>632 きもい
参照設定したCOMのインスタンス作るときは Dim fs As New FileSystemObject とかやっちゃうけど、(VBからFSO使うことはまず無いが) クラスの場合は、必ず Set Objtest = New class1 でインスタンス作ってるな。 あと、COMは特殊な物を除いて Set obj = Nothing はやらないけど、クラスは不要になったら必ず明示的に破棄する。 このへんはVBSも共通だな。まあVBSでクラス使う奴は余り居ないだろうけど。
すいません初歩的な質問なのですが Picture1.picture = LoadPicture("C:\〜〜.jpg") という風にフルパスで画像を表示してるんですが 当然別PCで実行すれば無いんでエラーですよね 画像をまとめて別ファイルで参照すればいいんでしょうか? 適当な透明フォーム作って全部貼り付けてコンパイルしています 明らかに無理矢理なんで対処方法教えてクダサイ
>>653 画像を実行ファイルと一緒に配布して、
カレントディレクトリの画像を読み込ませればいいじゃん
数が多いなら、カレントにImageとかいの名前のフォルダ作ってそこにまとめてもいいし。
カレントならファイル名だけで参照できるし、
App.Pathでカレントのパスも取得できる。
>>653 VBメニューのアドイン -> アドインマネージャ を選択
一覧から「VB6 リソースエディタ」を選択して「ロード/アンロード」「起動時にロード」にチェックを入れる
VBメニューのツール -> リソースエディタ を選択
リソースエディタの「ビットマップの追加」ボタンを押して表示したいビットマップを選択する
すると101って名前のツリーが出てくるが、それがその画像の番号(リソースID)
画像を使用するときには次のようにすればよい
Picture1.Picture = LoadResPicture(101, vbResBitmap)
656 :
653 :2006/01/27(金) 07:04:46
654,655さん有り難うございます 一緒に配布する方法も考えてたんですがApp.pathを知らなかったんで わかりました、有り難うございます☆ リソースエディタの方法も試したんですが、BMPしか対応してないですね jpgなんでめんどくさそうなので、一緒に配布したいと思います。 (スイマセン情報不足でしたね) 初心者の質問に答えていただき有り難うございました☆
>>656 次のようなコードで画像読み込んでるならよく考えること
Picture1.Picture = LoadPicture(App.Path & "\画像形式言えよボケ.jpg")
ドライブのルートの場合 = C:\
フォルダ内の場合 = C:\FolderName
658 :
656 :2006/01/27(金) 07:54:06
Picture1.Picture = LoadPicture(App.Path & "\ごめんなさい.jpg") ↑まさしくこの通りやってます、問題があるんでしょうか? 考えても分からない・・・(´Д⊂
>>658 > 考えても分からない・・・(´Д⊂
MsgBox App.Path & "\ごめんなさい.jpg"
を見てから考えろ。
>>647 これは知らなかった・・・有難う御座います。
>>648 後者だと不具合が起きる可能性があるので、前者の方が良いです。
実際、後者を前者に変更しただけでちゃんと動いた例が沢山あった。
>>657 この仕様の違いは本当に面倒臭いですよね。
661 :
656 :2006/01/27(金) 09:08:42
Σ(・o・;) ハッ! ルートで起動されると¥¥に・・・ ってことは判別コードも書かなくては 問題はこれですね、ありがとうございます☆
Windows2000Pro、VB6.0でマルチスレッドを行いたいのですが行き詰まっています。 USBの値を取り込んで制御を行いたいのですが、 パイプオープンまではできて、 値を取り込むところで固まってしまいます。 スレッド部でReadFileを行うのは不可能なのでしょうか? 誰かヒントでもいいので教えて下さい。
>>665 VBはライブラリなどがマルチスレッドに対応してないので出来ません
CreateThread してみると動かないことも無いですけど
苦労して作っても、たまにバグる奇形児が生まれるだけですw
確実かつ安全なのは、別スレッドで行う処理を ActiveX EXE で作成して
CreateObject で作成して利用するようにすればよいです
>>665 マルチスレッドが必須要件ならVS2005への移行をお薦めします。マジで。
>>665 VB6でマルチスレッドは出来ないけど。
CreateThreadでスレッドは作成できるけど、 そのスレッド上でまともな処理が出来ない。 それがVB6の仕様。
671 :
665 :2006/01/27(金) 16:36:03
即レス有り難うございますm(_ _)m やはりそうでしたか。 マルチスレッド化のサンプルはあったのですが、 説明にも不完全とありました。 同じサンプルに、GUI部はVBで実現して、 マルチスレッド化のDLLをC++で実現するというものがありましたが、 こちらもサンプルのままで使用すると一応動作するんです。 が、狙った動作が行えず、 若干改変を加えるとエラーがでてしまって… MSVCRT.LIBの"main"が未解決ですといわれます。
672 :
666 :2006/01/27(金) 17:21:05
>>671 そもそも何でマルチスレッドで処理する必要があるの?
Exe2つでプロセス間通信とかすりゃいいじゃん。
>>671 やりたい事は「マルチスレッドを行いたい」ではなく、「USBの値を取り込んで制御を行いたい」だよね?
「USBの値を取り込んで制御」は、「マルチスレッド」以外では実現不可能なんでしょうか?
そもそも何故VB6で作るかじゃないのか? 適材適所。
676 :
665 :2006/01/27(金) 18:11:36
URL貼っていただいた方有り難うございます。 自宅に帰ったら覗いてみます。 いろんな意見有り難うございます。 説明不足すぎですね。 まず、やりたいことをお伝えせねば。 現在卒業制作にて課題に取りかかっているんですが、 そのプログラムに行き詰まっています。 その制御ですが、PCからDIOボードを使って外部に出力してラジコン飛行船を制御するというものです。 最初の段階ではVBでコマンドボタンを配置して、 それに対応して出力するというプログラムでした。 これは比較的容易で、ボードについていたサンプルを軽く弄る程度で良かったんですが…続きます。
678 :
665 :2006/01/27(金) 18:26:30
それが成功するとそのプログラムを生かしたまま、 VBのフォーム上に無線LANカメラの画像を表示するということになり、 webブラウザーを設置してコマンドボタンでURLを開かせるようにしました。 問題はここからで、 それが成功するとUSBゲームパッドでも制御できるようにする、 と追加されたのです。 いろいろ調べて汎用デバイスドライバをインストールして、 マスクオープン→パイプオープン→ReadFileで各ボタンの値とり込み→値によってI/Oの振り分け という制御にしたんですが、 わからないながらも頑張って調べてなんとか値は取り込めて、 飛行船も制御できたんですが… 画像がコマ送りになるんです。 USBデバイスから情報を送っている間は 処理が完了するのかカメラの画像動くんですが、 デバイスから入力が途絶えると止まってしまいます。 どうやらデバイスから入力が途絶えると待ちに入って他の処理ができなくなるらしいのです。 そこで調べて行くとマルチスレッド化をして、 待ちに入った場合は他の処理を優先させる…といったものでした。 何故VBなのかがお分かりになられたでしょうか。 長文本当にすいません。 あと2ヶ月余りで仕上げなくてはならず、 時間も知識もなくて途方にくれてます。
>>678 素直にExe2つにした方がいいよ。
これからの二ヶ月を無駄にしたくないなら。
んだね。 ActiveX-EXEで別プロセス作ったほうが良さげ。 俺だったら.NETかC++に行ってスレッド使うけど。 >MSVCRT.LIBの"main"が未解決ですといわれます。 プロジェクトがDLL作る用になってないだけだからすぐ直るよ。 ぐぐってみなされ。
馬鹿じゃねえの
678の問題が実行ファイル2つにして解決するような類のことかってw
素直にCでスレッドで処理するdll書くのが正解。
>>678 汎用ドライバって柏野さんの奴でしょ?
ずいぶん前にインターフェイスに載ってたやつ。
CQのインターフェイス別冊のUSB本(同じようなのが何冊もあって困るが)
にヒントが書いてあるよ。
COMに頼らなければスレッドを作れないVBを馬鹿にしやがってヽ(`Д´)ノ
VB可愛いよVB
>>待ちに入った場合は他の処理を優先させる… 優先?何のこと?マルチスレッドはスレッドを並行させることだよ
デバイス入力待ちのところにDoEventsで解決したりして・・・んなわけないか.
688 :
687 :2006/01/28(土) 07:25:33
VB完結ならやっぱActiveXかな
列挙型に名前付けるときの規則ってある?
>>689 ・名前をアスキーコードに直して先頭から足しこんでいった時に、素数で割り切れるように命名しなければならない
・日本語の読みをローマ字(大文字)にしたものを使わねばならない
・名前の長さは最低16文字を超えていなければならない
・名前の末尾に命名した日の西暦を4桁でつけなければならない
>>691 お前のところは規則がそんなにも少ないのか
>>689 とりあえず、無難にモンゴリアン記法に従っておけ
初恋の女の子の名前は必ず入れとけよ
>>694 ちょっとまてお前なんで俺のパスワードを知っている
>>650 Dim A as New Hoge
だと、AにNothingを入れてもまた参照すると勝手に作られるから、
イニシャライザの走るタイミングが違うだけ、ではないな。
また、このチェックのためにちょっぴり遅い、とも聞く。
まぁよく分からんうちは
Dim A as Hoge
set A = new Hoge
にするのが間違いないと思うよって言うか As New なんて使わないほうがいい
じゃあ Enum 香代子 にしておきます。
最近全然VB触ってなかったのですが、久し振りに昔書いた自作ツールを 変更しようと思って色々弄ってた所で疑問が・・・ ShowInTaskbar = True で BorderStyle = vbSizable なのに、アイコンにした時 タスクバーに入らず、上に小さな長方形のアイコンになってしまいます。 後は何処を変更すれば良いんでしたっけ?
VC++習得後、VB6を勉強しているものなんですが、 VBでのクラス・インスタンスってすべてヒープ上に できるんですか?組み込み系のクラス(Integerとか)も?
引き続きタブブラウザ、ついにタブブラウザ爆誕( ´∀`) ほとんどIEそのまんまな機能だけど、唯一劣る点が お気に入りのメニュー上でのドラッグ操作が出来ない点・・・ これさえ何とかなれば、そこそこ使えるんだけどなぁ 今後はUserAgentの変更とかも手を出してみる予定〜
はいはい、チラシの裏チラシの裏
>>702 VC++習得したなら、VB6なんてやる必要ないじゃん。
C#.NETとかVB.NETの方が。
707 :
702 :2006/01/28(土) 17:22:59
>>705 業務上 VB6の必要性がありまして。
これ、あれですか、Newキーワード使えないやつがスタック上ってことですかね?
>>707 Cだとスタックとヒープってはっきり分かれてるけど、
VBはどーなんだろうね。
VBだとよっぽど特殊なことをしない限り、
メモリイメージを把握する必要はないよ。
709 :
702 :2006/01/28(土) 17:43:09
>>708 うーん、ちょっとWIN32 APIを呼び出す必要がありまして。
よくあるバッファを渡すパターンなんですけど、ちょっとサイズ
大きめなんですよ。
なんでスタック上に取られるとスタック領域の不足が心配で。
逆に、明示的にヒープとか確保する方法があればそれでも
OKなんですけどねー。
StringがBSTRであることなど考えれば・・・。 APIの呼び方講座がヘルプにあるんんだから熟読してから考えようよ。
>>702 VBでも同じだよ
IntegrtとかLongの組み込み型はスタックで
インスタンスはヒープで その参照はスタック上に確保される
配列とかも全部同じ...かも
VBはメモリ・ポインタを完全に覆い隠しているから
ドコから確保してるのかは正直分からないな
どうしてもヒープに確保したいならAPIで明示的に確保してやれば
>>703 出来たらオープンソースにして皆で改造しようや
>>707 スタックがどうの、ヒープがどうの、メモリがどうの、とか、
一切考える必要がないのがVBクオリティ。
>>709 APIに渡すバッファは、普通APIで確保するのでは。
713 :
702 :2006/01/28(土) 18:15:36
>>710 えーと、すいません、よくわかってなくて。一応読んだつもりなんですが
WIN32 APIの文字列データの引渡しについては
・StringはVBで内部的にBSTR型として表現されること
・String()関数を使って長さを設定した文字列か、固定長文字列宣言で得られたインスタンスをバッファとして使う
あたりで理解したんですが、VBにおけるString=BSTR型のインスタンスが
スタック上で実現されているか、ヒープ上で実現されているかはわからない
ような気がするんですが...。
何か読み方か、考え足りてないのかな?
>>703 ソース公開しないなら、ここで報告などせずに
黙ってひっそりとやってろ。
ここで報告したいならソース出せ。
以上。
普通は dim s as string s = space(256) ってやるよ。
as string * n か string(n,vbnullchar) が普通だと思ってた漏れは炒ってよしですか?
>>711 配列はスタックかヒープかは分からんとオモタ。
Cなら確実にスタックオーバーフローになるようなサイズでもVBでは確保できるんで、
内部で調整してんじゃないかな。
(ただ関数抜けたら開放されるはずだから、クラス的なオブジェクトとは挙動が違うけど)
>>713 >あたりで理解したんですが、VBにおけるString=BSTR型のインスタンスが
>スタック上で実現されているか、ヒープ上で実現されているかはわからない
だね。
型から確保している場所なんて分かんない。
そもそもスタックとかヒープってのはc言語用の仕組みなわけで
>>719 VBでもあるよ。
終了できない再帰関数作って実行してみなはれ。
>>719 実行ファイルは全てメモリはスタック・ヒープで管理されてるよ
最近はVB・JAVA・C#とかのメモリを意識しないでプログラミングできる言語が増えてきてる
>>719 VBにもスタックもヒープもあるだろ
PEファイルの中身覗いてみろよ
>>702 つ GlobalAlloc
VC++のスキルがあるのにVBじゃないと駄目な業務って一体・・・
>>723 歴史のあるアプリのおもりってのは胃がいたくなるぞ。
一度やってみろ(・∀・)
>>723 下請けや出向なら、スキル云々関係ないじゃん
客が指定した環境で作るしかないだろ
俺も以前、勤めてた会社でVC++のプロジェクトのあと初VBだったぞ
726 :
702 :2006/01/28(土) 19:25:56
>>724 そのとおりです。こちらもメンテナンスです(涙。
>>711 ,722
やっぱりAPI呼び出しで明示的に確保しかないんですかね。
アイディアありがとうございます。
>>717 大丈夫です。MSDN Libにはその2つの方法が基本として
書いてありました。そのどちらでもいいそうです。
まぁ、VC++に較べればVBは遥かに簡単だし、 生CとかVC++でWindowsアプリを書いた事があるなら、 VBなんて楽勝でしょう。
728 :
702 :2006/01/28(土) 19:45:28
>>727 いや、VBはVBで奥深いです。
がんばって勉強します。
皆さまありがとうございまいた。
>>727 ちょっとしたツール作るだけなら楽チンなんだけど
MSGridをもうちょっとExcel風に便利にしてみようだとか
用意されたお手盛り品から抜け出そうとしたとたんデスマだよなw
まあ、そんな開発に当たることが無ければいいんだけど・・・
あと、VBはVCに比べて罠が多いよな
全部あげたらキリがないけど、暗黙のオブジェクトとか、デフォルトプロパティとか
型宣言忘れてVariantだとか、AddressOfが引数構文でしか使えないとか・・・
>>729 そんな案件をVBでやる事自体、根本的に間違ってるからね。適材適所。
そのVBの罠も、生C/C++から入った人は引っ掛からない。
>>730 >生C/C++から入った人は引っ掛からない。
そんなアホな話があるかw
何から始めた人だって、プロパティ書き忘れることだってあるし
型宣言だって書き忘れないとは限らない
>>732 いや、お前のが低いだろ
ミスを犯すことを前提にコーディングするもんだ
俺は間違えない!なんて考えで書いてるようじゃ
どれだけ悲惨なコードか目に浮かぶよ
レベルって何よ・・・ RPGですか
>>732 基本的には
>>733 の言うようにミスを前提でコーディングするべきだからな。
ミスする奴が悪いなんて言っているうちは間違っている。
ミスできる言語仕様が悪いに決まっているからだ。
でもさっき挙げられているのはVBらしさの重要な部分でもある。
誰でも使えて、ちょっと作って、ぱっと動かす。
これがもともとのVBの立場であるので、「高度なこと」をやろうと思えば
大変なのはまぁ仕方ナス
.NETで暗黙のFormインスタンスが無くなってよかったと思っていたが、2005で
戻っちゃったしなぁ
VB.NETは使ってないから知らんけど、多くの人がそれを望んでいたのかもしれないね。 最初のやつはC#とVB.NETを比べても、あえてVB選ぶような価値ってのは見えなかったわけだし、 言語仕様の曖昧さというのを受け入れてでもVBの特色を出すというのは仕方ないのかも。 VB6とは違ってベースは他のと同じの使ってるわけだし、他の言語の為に作成した開発支援技術の 流用も期待できるから、孤立しないで進歩できるようになる良い兆候だと俺は思ってる。
つOption Explicit
Option Explicit はオプションで自動追加されるからいいよ むしろ入れておきたいのはこっち DefByte A-Z 'Byte DefDate A-Z 'Date DefObj A-Z 'Object このへんをコンパイル引数で切り替えてチェックする
740 :
648 :2006/01/29(日) 12:21:18
わかりやすい説明ありがとうございました。ありがとうございます。 納得しまして解決しました。 要は見やすいコードは前者というわけですね。 先輩がウンコと言った箇所は実は別の意味合いだったらしく、私が 判定文の間の条件コード内にDim test As New Class1 とNothing をしていた事に文句いいたかったそうです。 おさわがせいましました
VBからAccessのファイルを弄ろうとしていてわからないことがあるんですが、このスレで質問して良いですか?
>>742 VBから弄るんだから勿論OKなんじゃない。
744 :
742 :2006/01/30(月) 10:52:15
では質問させていただきます。 Set oAccess = CreateObject("Access.Application") Call oAccess.OpenAccessProject(strPath, True) で、セキュリティ警告ダイアログがAccessから表示されていまいます。 開くときにAccessファイルを[Shift]+[開く]の形式で Accessファイルの起動時処理を走らせずに開きたいのですが どのようにすればよいのでしょうか?
つうか、そういう開き方しないで、普通に開けばいいんじゃないんか?
747 :
742 :2006/01/30(月) 11:42:26
補足です。 Accessは2003で、開くファイルはadpなんです。 ------------------------------------------------------------------ セキュリティ警告 "C:\hoge.adp" を開いています このファイルに、意図的にお使いのコンピュータに損害を与えるコードが含まれる場合、 ファイルは安全でない可能性があります。 [キャンセル] [開く] [詳細] ------------------------------------------------------------------ というダイアログが出てしまいます。 何をしたいかというと、vbからadpの接続プロパティを更新したいのです。 adpの使用者に接続プロパティの変更を自分でおこなってもらうのではなく、 vbから自動で接続プロパティのサーバーやデータベースを更新したい、 という要望なんです。 このvbアプリを実行することで、使用者は難しい設定をしなくても 自動で代替サーバーに切り替えてadpを使用できるようにしたいのです。 接続プロパティの更新はできました。 >746 どこかのサイトで調べてOpenAccessProjectという書き方が載っていましたので そのようにしていました。 第二引数は、排他モードということです。 OpenCurrentDatabaseを使用して開いても同様の結果となりましたorz
>>747 それって、アンチウィルスソフトが出してるのではなく?
>>747 そのメッセージでググッたら、幾らでも解決方法が出てきた。
751 :
742 :2006/01/30(月) 13:11:38
>748 Accessからのメッセージです。 >749 でも、欲しい回答がなかなかみつからなかったのでここにきました。 >750 Jet4.0のSP8パッチはあててありますが、現象が変わりませんorz >747のダイアログで[Shift]キーを押しながら[開く]を選択しないと 起動時の処理が走ってしまうので困っているんです。。。
セキュリティを下げろって書いてあるが。
753 :
742 :2006/01/30(月) 13:54:51
セキュリティを下げてもadpファイル内の起動時のコードは実行されてしまいます。 起動時のコードを走らせないような起動パラメータか何かないんでしょうか??
754 :
742 :2006/01/30(月) 14:07:14
755 :
デフォルトの名無しさん :2006/01/30(月) 16:09:33
ExcelVBAの質問なのですが,ビジネスsoftのExcel板では,Excelに関係ないVBに関する質問は VBスレで,ということなので,こちらで質問させてください。 デバッグのため,オブジェクトのプロパティの一覧を書き出したいのですが,方法がわかりません。 任意のオブジェクトのプロパティ名の一覧を配列などの形式で取得する方法はありますでしょうか。 (具体的には,WebBrowser.Document以下の,任意のNodeのプロパティ一覧を取得したいのですが)
757 :
755 :2006/01/30(月) 16:31:42
>>756 レスありがとうございます。
ちょっと説明が不十分だったかと思いますので,補足させてください。
オブジェクトブラウザでは,WebBrowser.Document以下のオブジェクトのプロパティを見ることは
できないようです。(おそらく内部的にはMSHTMLあたりと同じなのかと思いますが,知識不足の
ためよくわかりません。)
オブジェクトブラウザでなくても,ウォッチウィンドウなら確認することができますが,どちらにせよ
ExcelとVBEを頻繁に行ったり来たりしなくてはならず,効率的でないようです。
そこで,
1) フォーム上にWebBrowserコントロールを配置し,
2) WebBrowser.Documentの内容をTreeViewコントロールに表示し,
3) TreeViewコントロールの要素を選択すると,そのNodeのプロパティがListViewに表示される
というデバッグ用のフォームを作成しているのですが,3)の処理を行うために,
選択したNodeのプロパティ名の一覧を配列などで取得する方法を探しているという事情です。
何かいい方法か,代用策はありませんでしょうか。
>>758 おおっ、ありがとうございます
さっそく調べてみます
760 :
755 :2006/01/30(月) 17:24:25
残念ながら,私のシステムにはTlbinf32.dll が入っていないようです・・・ VBをインストールしないと(VBAだけでは)このファイルはインストールされないようですね しかたがないので,機械的にプロパティのリストを取得するのは諦めて 何か他の方法を考えようと思います。 レスしてくださった方々,ありがとうございました。
企業のイベントで使えるような、バーチャル福引をVBで開発しようと思います。 で、変数(くじの全体数や当たりの数)を設定・記録できるようにして、 くるくると多角形を回して、玉が出てくるなどといった形までは出来たのだが… いかんせん、見た目が貧相なのだ。なんかこう、見た目がカッコ良くできないだろうか。 パチスロのリールみたいにした方が良かったかな…
本物の福引き回せばいいんでね?
>>760 ランタイムに含まれてるみたい。
ランタイムは配布可能だから配布すればいいじゃん。
ランタイム配布可能なのはProfessional以上持ってる人だけじゃなかったか? まあベクターから拾ってくれって言えばいいんだろうけどさ。
766 :
755 :2006/01/30(月) 21:28:32
>>763 情報ありがとうございます。
Vectorで「VB ランタイム」で検索してヒットした一番新しいもの(VB6.0SP6第3版とかなんとか)を
インストールして、Windowsフォルダを対象にTlbinf32.dllを検索してみましたが、
どうもこのパッケージではインストールされなかったようです。
どのパッケージにはいっているか、見当はつきますでしょうか。
767 :
デフォルトの名無しさん :2006/01/30(月) 21:29:04
769 :
デフォルトの名無しさん :2006/01/30(月) 23:26:42 BE:308415593-
OpenURLにて取得するデータの進捗率を表示する事は可能でしょうか?
>>755 Node(HTMLタグ)の属性を全列挙したいんだよな
IHTMLDOMNode.Attributes か HTMLElement.Attributesではイカンのか?
間違っていたら無視してくれ
>>768 情報ありがとうございます。
結局、目的のDLLは見つかりませんでした。
>>770 情報ありがとうございます。
取り出したいのは、タグの属性ではなく、オブジェクトのプロパティです。
ですがそれも有用な情報ですので、参考にさせていただきます。
質問の当初の目的(プロパティの取得)は実現できませんでしたが、
調べる過程で、当該のオブジェクト群のおおよその仕様は理解できました。
また、いくつかのプロパティと
>>770 さんの指摘くださった属性の組み合わせで
かなりの程度効率的なデバッグツールを作ることができましたので
この質問は一応終了とさせていただきます。
情報をくださった皆様、ありがとうございました。
vbComCtl使うと、クソなコモンコントロールから開放されるぜ
774 :
デフォルトの名無しさん :2006/01/31(火) 13:47:00
すみません。教えてください。 以前も書かせていただいたのですけれど、MSCDで過去にあった70-175 と70-176。この勉強をしろと言われているのですが、どちらを先に進めた ほうがよろしいですか?お願いします。
>>774 「MSCDで過去にあった70-175と70-176」ってのが何の事が全然分からん。
776 :
デフォルトの名無しさん :2006/01/31(火) 14:02:22
説明するのは面倒なので分からない人は答えなくていいです。 知っている人だけお願いします<(_ _)>
>>776 ここはお前の日記帳じゃねぇんだ
チラシの裏にでも書いてろ、な?
>>776 以前も書いたのに誰も回答してないな。
つまりそういう事だ。
お前の様な莫迦には理解出来ないだろうがね。
ワロス
>>776 こいつって定期的に沸いてくる基地外でしょ?かまって君だから以後放置。
782 :
デフォルトの名無しさん :2006/01/31(火) 17:17:43
GetChunkでバイナリデータを取得したいのですが、思うようにいきません(データをファイルにすると1KBで生成されます)。 下記のコードはMSDNから引用し、改変したものです、ご教授お願いいたします。 Dim vtData As Variant Dim bData As Byte Dim bDone As Boolean: bDone = False vtData = Inet1.GetChunk(1024, icByteArray) DoEvents Do While Not bDone DoEvents bData = bData & vtData DoEvents vtData = Inet1.GetChunk(1024, icByteArray) If Len(vtData) = 0 Then bDone = True End If Loop
>>782 実行してないけど・・・
Byte データを & なんかで繋げていいの?
後、icByteArray なんだからちゃんとバイト配列で受けた方が良いのでは。
785 :
782 :2006/01/31(火) 19:27:58
>>784 レスありがとうございます
はい、そもそもGetChunkでバイナリデータを扱う方法がわかりませんので、自分なりに頑張ってみたところです
元のコードは文字列型を取得するコードだったようで、それを単に書き換えただけでございます
>>785 MSDNのサンプルに
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim vtData As Variant ' Data 変数
Select Case State
' ... ほかの条件のコードは省略されています。
Case icResponseCompleted ' 12
' 出力先のファイルを開きます。
Dim intFile As Integer
intFile = FreeFile
Open "C:\Tmp\A.Html" For Binary Access Write As #intFile
' 最初のデータを読み取ります。注意: バイナリ ファイルを読み取る
' 場合はバイト (Byte) 配列 (icByteArray) を指定します。
vtData = Inet1.GetChunk(1024, icString)
Do While LenB(vtData) > 0
DoEvents
Put #intFile, , vtData
' 次のデータを読み取ります。
vtData = Inet1.GetChunk(1024, icString)
Loop
Put #intFile, , vtData
Close #intFile
End Select
End Sub
こんなのがあったけど。
一時ファイルを使いたくないなら、Redim preserve + CopyMemoryでバイト配列同士を連結しなきゃならないね。
788 :
782 :2006/01/31(火) 21:12:16
解決しました、どうもありがとうございました。
どう解決したんだよ
>>788 正常な人間なら、何が間違っててどう変更して解決したかを書き込む訳だが。
791 :
788 :2006/01/31(火) 21:49:05
俺異常だから別にいい
792 :
デフォルトの名無しさん :2006/01/31(火) 22:08:56
算数のお話なんですけど、10 ÷ (5−2) っていう式を再現したいんですけど、どうやって記述したらいいですか? res=10/(5-2)ってやったらダメみたいなんですけども¥
793 :
デフォルトの名無しさん :2006/01/31(火) 22:13:58
あれ?いけました(汗爆爆爆爆汗超笑
792 名前:デフォルトの名無しさん :2006/01/31(火) 22:08:56 算数のお話なんですけど、10 ÷ (5−2) っていう式を再現したいんですけど、どうやって記述したらいいですか? res=10/(5-2)ってやったらダメみたいなんですけども¥ 793 名前:デフォルトの名無しさん :2006/01/31(火) 22:13:58 あれ?いけました(汗爆爆爆爆汗超笑
(残響音含む)
796 :
デフォルトの名無しさん :2006/01/31(火) 23:34:33
引き続きタブブラウザ、ここにきて行き詰まった・・・(; ´Д`) UserAgentの動的変更、JavaScript・サウンド・画像のON/OFF切り替え IEのお気に入りメニューの並び順も再現(動的な並べ替えは無理だけど) ベーシック認証ダイアログや、JavaScriptのアラートもカスタマイズできるようになった しかし、ここで問題発生!(><;) window.close されたときに opener が True でないと WindowClosing イベントの後に 「〜閉じられようとしています。閉じてよか?」って出るんだけど、 ここで、はい/いいえ の選択結果を取れない・・・orz 独自ダイアログにすれば可能だけど、オリジナルのままで結果を知りたいところだ しかし、相変わらず Coolbar 使うと、なんか画面がちらつくのが許せん・・・
801 :
775 :2006/02/01(水) 00:56:20
>>783 サンそのたの方ありがとうございました。
がんばって、やってみます。
802 :
797 :2006/02/01(水) 01:20:28
>>798 え?BeforeNavigate2イベントでサクッと変更できまつよ
>>802 WebBrowser コントロール使う以外で方法ありませんか
804 :
797 :2006/02/01(水) 01:44:27
>>803 むー、WebBrowserを使わないでって・・・意味が分からないよ
WebBrowserコントロール使ってるのかよ('A`) 期待度一気にガタ落ちだなw
806 :
797 :2006/02/01(水) 03:25:33
>>805 IEコンポ使わなかったらレンダリングやJavaScriptまでIE互換で自前実装するの?
VBで実装したら実用速度にならないし、IEと互換性無いと使い物にならないじゃん
2chブラウザみたいな特殊な環境限定なら、それでもいいだろうけどね
まあ、初心者はそう思うだろうな。
急に逆ギレ気味に偉そうになっててワラ
>>807 こんな夜中に即レスくれるのはうれしいんだけどさ
実際そうでないんなら、VBの独自エンジンブラウザ晒してみてよぅ
VBの独自エンジンブラウザって名前だけでうぇ〜ってなる
811 :
797 :2006/02/01(水) 03:38:15
晒すことで何か晒した奴にメリットってあるの? 797も役にも立たない日記的なことばかりで何も晒してないし。
815 :
797 :2006/02/01(水) 03:44:17
816 :
813 :2006/02/01(水) 03:46:16
いや、俺は何も作ってないよ。 ただ、ソースにすろバイナリにしろ 晒すことでそいつにメリットがあるのかなぁと。
て言うか質問スレを私物化すんなよ糞が
>>809 嬉しいのかよ?
内心では悔しくて悔しくて堪ら(ry
議論を戻すよ。
803 名前:デフォルトの名無しさん[sage] 投稿日:2006/02/01(水) 01:34:44
>>802 WebBrowser コントロール使う以外で方法ありませんか
820 :
797 :2006/02/01(水) 03:50:15
>>817 進行遅いスレだし、質問も1日に1回くらいなんだからいいじゃ〜ん
メリットなんてありませんよ 踊らされて晒した奴の負け
822 :
797 :2006/02/01(水) 03:52:34
>>821 大丈夫だよ、バイナリならソース見られるわけでも無いしさ
IEコンポなしでも、VBでブラウザ作れるんだってとこを証明できるじゃん?
ぶっちゃけ優れたフリーのタブブラウザって腐るほどあるのに
VB6.0でIEコンポ利用して作ったタブブラウザって誰が使うんだろう
そして何で
>>797 は
>>602 以降このスレで一々
「どうしようか、あれができた、これができた」って報告してるんだろう
質問スレなんだから質問と回答のお礼意外は書かなくて良し、って言うか書くな
> いいじゃ〜ん それはお前が決めていい事じゃない。 これがまかり通るならこのスレ(10〜20レス/日 程度)より進行の遅いスレでは どんなスレ違いな話題でも個人的な日記でも嵐でさえも正当化されてしまう。
結局、ブラウザの彼が踊っただけ?
826 :
797 :2006/02/01(水) 03:57:46
>>823-824 まぁまぁ、そう冷たいこと言わないで
こんな深夜にも活発にレスしあえるんだからお互い楽しいじゃん?
んじゃ、今日は遅いからもう寝るよっ(`・ω・´)
つかマジでチラシの裏はやめろ こういうスレは、質問者意外にも有益な情報元になるんだよ 駄レスが増えれば増えるほど価値が落ちる 私物化してチラシの裏なんてもってのほか
828 :
797 :2006/02/01(水) 04:06:41
寝るとか言いつつまだ居たりしてw また少し出来たら報告するから期待してる人待っててね、んじゃ(`・ω・´)ノシ
期待してる人居ないから、報告しなくてよろしい。 仮に完成しても、バイナリは誰にも喜ばれないだろうな。 ソース出せば初心者には喜ばれるかもしれないけど、 スキルの低い奴ってソース出すの躊躇うしw
830 :
デフォルトの名無しさん :2006/02/01(水) 07:20:30
>>822 前の会社に、Exeだけあれば、その元になったソースのバグ迄分かる人が居た。
機械語が完璧に分かるその人にとって、バイナリもソースと同じだった。
WebBrowser使わないでってのはMSHTMLかMSXML使ってってことじゃないの? 俺もその辺勉強したいんだけど、なぜかどこで聞いてもスルーされるんだよね
837 :
デフォルトの名無しさん :2006/02/01(水) 10:35:10
プロシージャ内の処理を別プロセスで行わせるには、 その処理部分をコンパイルしてCreateProcessで呼び出すしかないのでしょうか?
831 名前:デフォルトの名無しさん [sage] 投稿日:2006/02/01(水) 07:48:04 New!!
>>822 前の会社に、Exeだけあれば、その元になったソースのバグ迄分かる人が居た。
機械語が完璧に分かるその人にとって、バイナリもソースと同じだった。
さすがVBスレw アホが普通に居るなw
>>837 ActiveX EXEにする手もあるぞ
>>839 EXEにした時点で別プロセスになるんですね。
コンパイルせずに内部関数を別プロセスで...なんて出来ませんよね?
>>845 だから ActiveX EXE にしろって言ってんだろがw
VBからExcelを操作したことないのか?
>>846 ActiveX EXEですか。調べてみます。ありがとうございました。
ActiveX EXE なんて、最初から全く使い物にならない技術だったな。
>>848 マルチスレッドのようなことをしたいのならActiveX.EXEは向いてない。
プロセスは別だがActiveX.EXEのメソッドは同期的にしか呼び出されないので
実質シングルスレッドと同じ。
>>850 メソッド呼ばれた側はタイマー起動するなり、自分にメッセージ投げるなりして制御返せばいいじゃん
>>851 非表示のフォームにタイマー貼り付けてという手がありましたね。
昔のことなんですっかり忘れてました。
ただ時間のかかる処理だといろいろ不都合も多かった記憶があり、
その手のActiveX.はC++で作って中でスレッド生成してました。
853 :
デフォルトの名無しさん :2006/02/01(水) 16:27:51
>>854 初音氏のやつは、記事も書籍も良いのが揃ってるね。
>>836 あのーInetコントロールでなんとか操作できませんかね、POSTとか
VB6を起動するとプロジェクトウインドウwやプロパティウインドウが表示されますが、 これと同じようなウインドウを自作プログラムに使うことはできるのでしょうか
858 :
デフォルトの名無しさん :2006/02/01(水) 19:35:42
プロジェクトウインドウw
861 :
デフォルトの名無しさん :2006/02/01(水) 19:44:36
APIで画像を綺麗に表示(リサイズ、リサンプル)できるみたいですが、 その場合一度PictureBoxなどに表示させなくてはいけないみたいで、 そこで、質問なのですが、PictureBoxを使わずに 画像ファイルを読み込むと同時にリサイズ、リサンプルすることは可能でしょうか?
表示しなくても動くべ
>>861 折角VBでやってるんだから、PictureBox は Hide にしとけばいいじゃん。
866 :
デフォルトの名無しさん :2006/02/01(水) 20:26:45
別アプリケーションのクラス名を取得する方法を教えてくださいまし。。
867 :
デフォルトの名無しさん :2006/02/01(水) 20:32:45
866です、解決しました。。
868 :
デフォルトの名無しさん :2006/02/01(水) 20:40:57
バイト数をKBやらMBやらに自動変換する関数ってある? それとも演算させるしかない?
>>866 何でこういう奴って「どうやって解決したのか」を書かないんだろ。
Q&Aの意味が全く分かってないな。
>>868 Format$
>>866 "アプリケーションのクラス名"が何か気になった
ウィンドウのクラス名じゃないだろーな?
>>868 演算させるしかない
871 :
デフォルトの名無しさん :2006/02/01(水) 21:39:23
872 :
デフォルトの名無しさん :2006/02/01(水) 21:40:50
873 :
868 :2006/02/01(水) 21:55:26
作ってみたけどこんな感じでオッケーかな Dim sngRes As Single Dim cRes If cValue = "" Then Exit Function ElseIf cValue < 1022976 Then sngRes = cValue / 1024 cRes = Format(sngRes, "0.00") & "KB" ElseIf cValue < 1047527424 Then sngRes = cValue / 1024 / 1024 cRes = Format(sngRes, "0.00") & "MB" ElseIf cValue < 1072668082176# Then sngRes = cValue / 1024 / 1024 / 1024 cRes = Format(sngRes, "0.00") & "GB" End If
>>873 StringだったりSingleだったりDoubleだったりって、
もうちょっと型を意識したら?
個人的にIfよりSelectCaseの方がいいと思う
というより書いてみた。
Public Function foo(ByVal n As Double) As String
Static clc As Collection
Dim i As Long
If n < 0 Then Exit Function
If clc Is Nothing Then
Set clc = New Collection
clc.Add "B"
clc.Add "KB"
clc.Add "MB"
clc.Add "GB"
clc.Add "TB"
End If
i = 0
Do
If n >= 1024 And i < 4 Then
n = n / 1024
i = i + 1
Else
foo = Format$(n, "0.00") & clc(i)
Exit Function
End If
Loop
End Function
('A`) バグだ ... i=1 Do ... だな。
876 :
868 :2006/02/01(水) 22:36:57
>>874 ワーオー
これは勉強になりマッスル
ありがちょ
>>876 ('A`) 気をつけろ、そいつは3分クッキングだ
デバグなんて一切してないからな・・・すまん
"B"っちゅうバイトの表記あんま見ないな
Sub GbMbKb(sValue As String, Tmp$) Dim cKb As Currency Dim cMb As Currency Dim cGb As Currency cKb = CCur(1000) * CCur(1024) cMb = CCur(1000) * CCur(1024) * CCur(1024) cGb = CCur(1000) * CCur(1024) * CCur(1024) * CCur(1024) Dim Tmp2$ Select Case CCur(sValue) Case 0 To cKb Tmp2$ = Format$(CCur((sValue) / CCur(1024)), "0.00") & "KB" Case cKb To cMb Tmp2$ = Format$(CCur((sValue) / CCur(1024) / CCur(1024)), "0.00") & "MB" Case cMb To cGb Tmp2$ = Format$(CCur((sValue) / CCur(1024) / CCur(1024) / CCur(1024)), "0.00") & "GB" Case Else Tmp2$ = "Over Flow" End Select Tmp$ = Space$(8) RSet Tmp$ = Tmp2$ End Sub
881 :
874 :2006/02/01(水) 22:55:58
>>880 この人のは、Subプロシージャなので関数呼び出しによる戻り値分のメモリの確保やらの時間(数n秒?)がいらなくて済む
見づらいが・・・
というわけで、だれかベンチマークテスツを
>>879 たしかにな
でもKBなんかのつながりでBって書いてみた
※
>>880 さんの
cKbとかcGbなどのCurrency型の変数は、事前に求めて
102400@なんて書いたりした
コレ重要
Private Sub Form_Load()
Const p As Double = 1024# * 1024 * 1024
Dim s As Single
Dim i As Long
s = Timer
For i = 1 To 1000000
Call GbMbKb(p * Rnd, "")
Next
Debug.Print Timer - s
s = Timer
For i = 1 To 1000000
Call foo(p * Rnd)
Next
Debug.Print Timer - s
End Sub
結果
880さん 8.828125 s
おれ 4.328125 s
・・良く見れば、
>>880 さんの第一仮引数ってString型なのな
なんでだろな
Subプロシージャってそんなにすごいんか なら全部Subに変えたら実行速度速くなんじゃね?
↑構造化思考
>>883 VB6で実行速度を追い求めるのはちょっとなぁ・・・
それよりも、使いやすくて保守しやすくて、何より見て意味の取れるのがいい。
ちょっとベンチとってみそ
Private Sub Form_Load()
Dim i As Long
Dim s As Long
s = Timer
For i = 1 To 10000000: Call foo: Next
Debug.Print Timer - s
s = Timer
For i = 1 To 10000000: Call hoge: Next
Debug.Print Timer - s
End Sub
Function foo()
End Function
Sub hoge()
End Sub
これで家のPCは
4.421875
2.46875
って表示される。
やってみた。倍違うんだな。
都合により886の発言は撤回。
('A`) 間違ってもSub(ByVal arg As .. , ByRef ret As ..)みたいな述語形式の関数なんて作るなよ・・ 本当に見づらいから(orz
へ(へ´∀`)へ カサカサ?
892 :
デフォルトの名無しさん :2006/02/02(木) 00:22:51
VBのコマンドボタンを押下した際に UNIXのシェルを実行したり VMSでDCLコマンドを実行したりとかいうそういった関数を作る方法ないでしょうか?
>>890 ちゃうちゃう
引数の中に戻り値を返す部分を突っ込むんじゃない
ってこと
------
>>891 Prologとかやってみるとよろし
やってるならPrologの"述語"と同じ表現だろ?
…たとえば
foo(0,1).
foo(X , Y) :- X1 is X - 1 , foo(X1,Y1) , Y is Y1 * X.
の foo/2 は、あたかも第二引数が戻り値のよーに動作する
みたいな
へ(へ´∀`)へ 呼んだ?
>>893 戻り値が二個以上だったら開き直ってsubプロシージャでbyref四個とかやっちゃうけどダメ?
895 :
878 :2006/02/02(木) 00:31:41
>>892 >UNIXのシェルを実行
shell関数でrshを実行すればどうでしょう。
誰か
>>878 にヒントください。
>>892 とりあえずVB/UNIXな環境を手に入れるのがキツい希ガス・・・
over Telnet とかならなんとかなるんじゃまいか?
と考えて、適当に伏線を引っ張っておく
1 set telnet=CreateObject("Wscript.Shell").exec("telnet")
telnet.StdIn.WriteLine "X.X.X.X" & vbcrlf
なんかで、運良くtelnetでログイン
2 後はtelnetで操作する感じで色々
・・・できるわけなさそうだな。
898 :
デフォルトの名無しさん :2006/02/02(木) 00:37:12
>>894 IDLとかC++な out 属性があればいいんだけど、
ByRefじゃ束縛弱すぎるからちょっとなぁ…
WinAPI上なら引数に戻り値として受け取る仮引数があっても許せるが、
やっぱりVB上なら、無理にでもクラスにまとめて欲しい希ガス
'created:2006/02/02 00:34
'class Point
'*general*
public x as long
public y as long
'*End Of Code*
public function CreatePoint(byval X as lonb,byval Y as long) As Point
set CreatePoint=new Point
CreatePoint.x=X
CreatePoint.y=Y
end function
みたいな。
>>878 すまん、capicom.dllが家にないんだ…(orz
899 :
デフォルトの名無しさん :2006/02/02(木) 00:38:30
>>897 へ(へ´∀`)へ ヘヘヘ罠にかか(ry
Publicなプロシージャの戻り値には、公開していない構造体は突っ込めないオチが待っているかも
素直にクラスで統一・・・?
900 :
878 :2006/02/02(木) 00:39:40
901 :
デフォルトの名無しさん :2006/02/02(木) 00:42:38
>>900 リンクthx!!
動くかわからないけど、ハッシュ関数は自力で(自力のアルゴリズムで)つくったのしか持ってないんだ。
…素直にcryptapi使えってな。
902 :
デフォルトの名無しさん :2006/02/02(木) 00:43:19
>>895 rshですかrがつくということはリモートですね。
だめです思考回路が働ききりません。
teraなんとかというエミュレーターツールがVBかなんかで作られてるっぽいので
そのあたりを応用した簡単な方法を探しています。
たとえばですが
iRet = Kidou(sHost,sUser,sPass,SendCom)みたいなかたちで
自由自在にリモート側のOSでファイルを起動できれば嬉しいのですが
>>896 TELNETというのはセンドコマンドができるプログラムですよね
どこをみてもVBからコマンドを送信するネタがみあたらないのです。
これは厳しいでしょうか?
!! 依存関係が完全でなくて、capicom.dll を正しく呼び出せませんでした !! つまりココから書いているのは、全部「勘」です Private Sub Form_Load() Const File As String = "C:\hoge.txt" Dim buf() As Byte Dim ff As Integer Dim hash As New HashedData Dim s As String 'Fileの内容を全てbuf()に読み込む ff = FreeFile() Open File For Binary As ff If LOF(ff) > 0 Then ReDim buf(1 To LOF(ff)) Get #ff, 1, buf End If Close ff 'Byte()→Stringをする '※Byte()の内容が破壊されないでStringに入力されることを望んでいる s = buf 'Hashを計算 With hash .Algorithm = CAPICOM_HASH_ALGORITHM_SHA1 .hash s Debug.Print "Hashed"; .Value End With End Sub
InetコントロールのExecuteメソッドの第4引数ってあるの?
905 :
904 :2006/02/02(木) 00:59:12
あ、間違えた、自己解決しました
907 :
デフォルトの名無しさん :2006/02/02(木) 01:14:20
>>906 貴重な情報ありがとうございます。会社でみたのコレだったとおもいます。
ダイアログから入力してログインしてあとはビューの上で普通に
コマンドをたたいてリターンで実行みたいな。VAX上確認したところ
セクション起動だったのでいったんコマンドを送信したら、リモート側で
プログラムは走行しきるみたいな感じでした。操作したいのは中継サーバなので
XPじゃなくてUNIXオンリーです。
参考にテラターム?ですかページみてみましたがコレ公開ソースなんですね
しかもC++なんで僕にはさっぱりよめませんでした。
けどVCであってもこの機能をDLL化できればVBの標準モジュールから
デクレア宣言でなんとなくですが、UNIXのリモート起動もいけそうですね。
908 :
878 :2006/02/02(木) 01:17:57
>>903 ありがとうございます。
SHA1ハッシュが公開されているファイルが手元になかったので
md5で試験しましたところ正しく動作しました。(CAPICOM_HASH_ALGORITHM_MD5)
SHA1でもエラーなく動いていますので
正しく動作しているものと思います。
>>907 TERAtermってソース公開だったんか…
ま、どんな言語で作っているかによらず、TELNETプロトコルを模していれば、
直ぐにTELNETクライアントは作れますよ。
TELNETプロトコル(RFC854 with Japanese):
http://www5d.biglobe.ne.jp/~stssk/rfc/rfc854j.html TELNET on wiki:
http://ja.wikipedia.org/wiki/Telnet 例)
1 Winsockコントロールを貼り付けます
2 ポート23に接続します
3 Connectしたら、通信開始
4 通信はACIIなので、テキストボックスでも用意して送受信
これだけです…きっと。
ええ、生通信なので、ログインパスワードとか丸見えです。
色々と厄介なのでover SSHとか出てきたわけです。
ともかく、実現方法は色々あるわけですが、どれもクセがあります。
プログラマはその辺を噛みしめて食べるわけですが、面倒なら「最終案」も視野に入れてみてください。
-----
>>908 ちゃんと動きましたかー
ヨカッタです。
経験上、Byte()→Stringはタダのコピーだと思っているので、
強引にバイナリをStringに突っ込んでいます。
ちょっと怖いので、何らかの緩衝材を入れておいたほうが良いかもしれません。
911 :
878 :2006/02/02(木) 01:45:17
>>909 capicomに便利ツールがありましたのでこんな感じでしょうかね。
Dim oCU As CAPICOM.Utilities
Set oCU = CreateObject("CAPICOM.Utilities")
s = oCU.ByteArrayToBinaryString(buf)
912 :
878 :2006/02/02(木) 01:46:08
('A`)→× ('A`)→○
VAX/VMS・・・懐かし過ぎる・・・まだ稼動してる所があるのか・・・
915 :
デフォルトの名無しさん :2006/02/02(木) 09:17:09
VBAの質問なんですが、どこで聞いていいかわからないので、こちらで 質問させて下さい。 cells(1,1)→cells(5,5)→cells(8,2)→再びcells(1,1)→ とenterキーを押すごとにセルを移動させたいのですがどうしたら いいんでしょか? どうやっても、同じセルに戻ってしまいます・・・ Private Sub Worksheet_SelectionChange(ByVal Target As Range) でやる事自体がまちがってるんでしょか?
> どうやっても、同じセルに戻ってしまいます・・・ 自分で書いたコードを貼れ。
>>915 他の移動可能セルを全部ロックするとか。
>>915 例えばこんな感じ?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static LastCell As String
Select Case LastCell
Case "$A$1"
Range("E5").Activate
Case "$E$5"
Range("A1").Activate
End Select
LastCell = ActiveCell.Address
End Sub
ただし所定のセル以外に移動することはできなくなる。
919 :
デフォルトの名無しさん :2006/02/02(木) 10:34:35
918さん ありがとうございます。 動きました。
920 :
デフォルトの名無しさん :2006/02/02(木) 12:43:31
915です。たびたびすいません。 所定のセル以外に任意のところからは スタートできませんでしょか? if LastCell ="$A$1" then Range("E5").Activate end if if LastCell ="$E$5" then Range("A1").Activate end if でして見ましたが、無限ループみたいになって しまってだめでした。
>>920 とりあえずだな、おまいが無限ループになるのは
A1ならばE5 の処理をやったすぐ後に
E5ならばA1 の処理をやってるからだ
それじゃ戻るのはあたりまえだろ
if A1 then
E5
elseif E5 then
A1
end if
にするだけでも無限ループは回避できるぞ
やってることは
>>918 と同じだけど
イラネ
>>923 ものすごく欲しい
Cでライブラリ作るの飽きてきた ('A`)
>>923 VBでインラインアセンブラが使えるのはいいとして
いったい、どんなことに活用するの?
>>926 単純に速度が要求される画像処理に使うとか、たとえばアセンブラで、
IDEの停止ボタンを押してもクラッシュしないサブクラス化ライブラリ
があったなぁ。正直、アレ書いた人は神だと思う。
>>927 >単純に速度が要求される画像処理に使うとか
ん〜これは、市販のActiveXなりC言語製のDLL使ったほうがいいなw
>IDEの停止ボタンを押してもクラッシュしないサブクラス化
それはすごいね
>>928 使うんじゃない、作るんだ…そういうときに使う。
> IDEの停止ボタンを押してもクラッシュしないサブクラス化ライブラリ
神
>>926 あらゆるIOポートにIn/Outし捲くるのでは。
>>927 停止ボタンでクラッシュなんてするっけ?
>>929 >使うんじゃない、作るんだ…そういうときに使う。
いや、俺もそういう意味で言ったんだけど
アセンブラ混ぜ込んで処理書くほどシビアな要求するところなら
C言語でDLL作って利用するほうがいいだろうということよ
>>931 普通に落ちるだろw
俺はいつもサブクラス化しまくりなんで、ブレークもおぼつかない
ウォッチしようにも、大抵マウス操作は効かないし
運良く触れても、ちょっとしたことでVBごと落ちますよと('A`)
>>932 サブクラス化とかは余り普通のVBの使い方じゃないけどね。
使わずにすむならそうしてるさ
>>927 VBでのサブクラス化をイベント化してActiveX にすれば VBでも出来るよ
ソースのプロジェクトに取り込んだ場合はブレイクポイントおいてデバックできるよ
昔はやたらとWindows内部を引っ掻き回したVBサンプルが多かったな...
イベント化する方法はググれば今でも出てくるんじゃね?
この方法使うとサブクラス化し易くなるし Formのイベントととして処理が書けるし結構使ってたな
おしえて!
938 :
932 :2006/02/02(木) 20:43:07
>>936 俺は配布ファイル増えるの嫌だから引っ掻き回すことにするw
ただ、イベント化してる点は俺と一緒だ
>>939 王室の春花ちゃんになかなか入れないんだが前日予約で確実に入れる方法頼む
941 :
936 :2006/02/02(木) 21:50:01
「プログラマのメモ帳」とか言うサイトにあったサンプルを改造しただけ 俺が考えたロジックじゃないよ
このサイトもう消えてるね...
説明するのメンドクサイからソースうpろうか?
もしかしたら方法は
>>932 同じかもしれない...
942 :
932 :2006/02/02(木) 22:02:53
>>941 俺はそのサイトは知らない、VBのサイトを見ることはまず無いんでw
俺の場合は、インターフェース用のクラスとコールバック用のモジュール作っておいて
使う時にそれをプロジェクトに組み込んで、サブクラス化するフォームでImplementsしてイベントに処理を書く
Single 型で時に 1.#INF って値が出るんだけ、コレなんですか?
>だけ ↓ だけど 失礼しました
>>936 >>942 OCXにしてしまう方法は昔からあったよね。それと、何故かAddressOfは
標準モジュールに置かないとダメっていう制約があるから、面倒だね。
とにかく、
>>933 のだと、クラスモジュール1つで済む。仕組みは
>>942 に近いかな。
ただ、何故かメインルーチンがアセンブラで書かれてるから、スッキリしてる。
cHookに関しては(確か)グローバルフックが使えた気がする。普通DLLに追い出さないと
無理だったと思ってたんだけど。
947 :
デフォルトの名無しさん :2006/02/03(金) 04:01:34
初心者の質問なんですが、 VBAのコーナーはどこか教えて下さい。
>>948 そこはExcelのVBAはOKだけど、それ以外のVBAはNGだよ。
>>947 VBAからのExcel操作なら
>>948 のところでいいけど、
Word、Accessならそれらの個別スレに行くべきだし、
Officeアプリの操作じゃなければVBAでもここで聞くべき。
954 :
デフォルトの名無しさん :2006/02/03(金) 10:37:04
hensuu = hensuu + 1 というのを Cみたいに hensuu++ みたく 変数を1度書くだけですむ方法ってありますか?
無い
でもインクリメントは欲しいよね。 なんでVBには無いのかなぁ。
> なんでVBには無いのかなぁ。 そういう言語仕様だから。 そして、そういう仕様の言語を使うことを選んだのは自分自身だろ。
960 :
954 :2006/02/03(金) 11:11:40
なぜにケンカ?
962 :
デフォルトの名無しさん :2006/02/03(金) 11:24:13
選んだのは客だよ
>>961 インクリメント無いのを我慢して使っているのに、
初心者にありませんかと単純に聞かれて腹立ったんだろう
オブジェクトのメソッドのアドレス受け取るにはどーすればいい?
966 :
デフォルトの名無しさん :2006/02/03(金) 12:26:24
そんなにインクリメント演算子相当のものがほしけりゃ モジュールにでもINCって関数を書けばいいんだよ。 アセンブラみたいでカコイイぞw ByRefで引数とるのはもちろんだが、インクリメントした値自体を 返すようにすることを忘れずにね。 でも引数を括弧で囲んじゃうと誤動作することを防止できないのは VBクオリティかもなw
>>964 別に我慢なんかしてない。
>>965 受け取るだけなら普通に Long 変数でいいのでは。
>>967 括弧云々ってどういう意味?
括弧使うなら Call が必要だけど、そういう事じゃなく?
インクリメント欲しいな
すでに終わった言語に何言ってんだこの馬鹿は
馬鹿ってゆうなーーーーーーーーー
彼女欲しいな
今更VB6にインクリメント演算子はいらないけど、 VB2005にも実装されてないんだよね? なんで実装しないんだろう。
>>974 Basicの言語仕様にないから?(半疑問系)
MSがVB6をオプソにしたら面白い方向に発展すると思うんだけどね。ありえんか。
まぁ、2003以後は+=が使えるから、6よりはインクリメントもしやすいけどな
日本語プログラミングの『TTS』だっけ? あれで生成した実行ファイルって何でVB6ランタイムが必要なんだろ? スレ違いスマソ
>>979 中間言語でExeが書き込まれ、それを解釈するエンジンがVB6製とか?
>>969 >括弧云々ってどういう意味?
実際やってみればわかるよ。
結論からいうと、引数を括弧でくくると変数の参照じゃなくて
変数の値をコピーしたもの(というより演算結果扱いか)の参照が渡される。
だからインクリメントされない。返値は問題ないけど。
かといってCallつけると演算結果を式の中で使えない。
まあでもCでも式の中でインクリメント演算子使うって
あんまりみたことないか。
>>981 Private Function Inc(ByRef i As Integer)
i = i + 1
Inc = i
End Function
i = 0: a = Inc(i)
i = 0: inc i : a = i
i = 0: call inc(i): a = i
i = 0: inc (i): a = i これだけ a が 0 になってしまうということですね。
確かにありがちなバグだな。
()を付けた場合と付けない場合の違いを分かってない人が居る件。
vb歴10年だけど初めて知った
ああ、ようやく意味が分かった。
これからはByValいらないね
987 :
デフォルトの名無しさん :2006/02/03(金) 21:58:15
あのーOSのシャットダウン、起動をいじるプログラム作ってたんてすけど、 Do Loopでハマッてしまって、電源入れ直してもそのプログラムが動いてずっと止まらないんですけど、どうしたらいいですか(泣) いま携帯から投稿してんですけど、CPUが暑くなってる予感なんですけど、どうしたらいいてすか(泣)
タスクマネージャ起動できんのか? ならパワースイッチを4秒間押す。セーフモードで起動。 あとループにはSleep(0)いれとけ。
989 :
デフォルトの名無しさん :2006/02/03(金) 22:31:53
まじスマン。 VBってさVisuarlStudioでプロジェクト作ると自動でフォームが作られるっしょ? アプリケーション自体をSDIっぽいUIにしたいんだけどどうすりゃいいのかな? VC++なら最初にフォームかSDIかMDIかベースえらべんじゃん? 不躾で申し訳ないけど宜しく
VisuarlStudio
VisuarlStudio
ヴィジュアールスタジオ
次スレがねえぞー
1000ゲット〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜wwwwwwwwwwwwwwww
次スレもういりませんよwwww
じゃココでVBの歴史は終了だね
( ( ( ( ( (゜∀゜) ) ) ) ) ) デンパ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。