前のログ 次のログ

No.2900 Re:コマンドボタンについて・・・  投稿者:ゆう(U) [01/10/09(火)18:42分]

コマンドボタン上で・・・

SpaceキーはMouseDown
Enterキーはクリック

Tabキーはタブオーダー順に移動
Shift+Tabキーはタブオーダーの逆順に移動

これらはWindowsの仕様ですから、特別な理由がない限り
仕様に合わせた方が良いですよ。


●お勧めはしません
Shift+Tabで順番に移動させたいなら・・・
始めから逆順にTabIndexを設定しておくだけだと思います。

ボタンは独自のコントロールを作成するか、
ボタンの絵を表示してコードで制御するかですね。

No.2899 コマンドボタンについて・・・  投稿者:ちな [01/10/09(火)17:07分]

コマンドボタンにフォーカスがあるときにSpaceKeyを押下すると、

ボタンが押されている状態(見た目が)になるのを禁止するのには
どうすればよいですか?

また、EnterKeyを押下したときに、ボタンが押されているように
見せたいのですが、どうすればよいでしょうか???


もう一つ、逆引きヘルプでAPIを使ったTab移動を参考にさせてもらったのですが、
ShiftKeyを押したときに、Tab移動するようにしたら、
Tabが逆に移動してしまいました。
逆に移動してしまったので、今度は逆移動を参考にさせてもらい実行してみると、
なんだかすごく奇妙なTab移動をしてしまいました。
ShiftKeyを使ってTab移動はできないのでしょうか?

No.2898 Re:ListViewの表示を早くしたい  投稿者:ゆう(U) [01/10/09(火)16:15分]

> MP3のタグ情報をまとめたカタログファイルを読み込んで、検索し、検索結果を

> ListViewにて表示しているのですが、検索結果が2000件など多くなると、
> 表示だけに4〜5秒かかってしまいます。
> 検索の時間を含めると7秒ぐらいなので、カタログファイルを全件読むより
> ListViewにデータを追加する方が時間がかかってしまいます。
> 現状では、ヒットしたときだけ次のサブルーチンをコールして、ListViewに
> データを追加しています。
限られた条件でより速度の最適化を行うのは、プログラマの腕の
見せ所でしょう。

可読性を犠牲にするか、速度を犠牲にするかは状況によって
かわると思いますが現状の方法では限界は低いと思います。

追加部分を別プロシージャにすると関数呼び出しに要する時間も
馬鹿になりません。

それと参照は出来るだけ少なくするのが高速化の基本ですから
With参照は効率のいい方にした方が良いです。
※現状ではMP3DBがらみですが別プロシージャにしている
 のであればそれほど効果は出ないと思います

> 検索の開始部分ではListViewをVisible=Falseにして、少しでも表示を
> 早くなるようにしています。
これは結構使えます、検索だけではなくリストが劇的に変化する場合
(追加・削除)描画を控えることで速度は向上します。


> Web上でいろいろ検索した結果、Visual C++では「仮想リストビュー」という
> 機能が使えることを知りました。
> これだとデータが1万件以上になってもほぼ一瞬で表示できるようなのですが、
> Visual Basicで、この機能はつかえるのでしょうか?
残念ですが、「仮想リストビュー」には詳しくありません。


現在の開発環境はVB6.0ですか?
VB5.0に比べVB6.0は内部的にかなり高速に動作するようになりましが・・・


VB6.0での最適化比較のサンプルを載せますので、参考にしてみて下さい。
サンプル)
Private Sub Form_Load()
With ListView1
.View = lvwReport
.ColumnHeaders.Clear
.ColumnHeaders.Add , , "A"
.ColumnHeaders.Add , , "B"
.ColumnHeaders.Add , , "C"
.ColumnHeaders.Add , , "D"
.ColumnHeaders.Add , , "E"
End With
End Sub
Private Sub Command1_Click()
Dim i As Long
Dim myListItem As ListItem
Dim sngTimer As Single

ListView1.ListItems.Clear
sngTimer = Timer
ListView1.Visible = False
For i = 0 To 49999
Set myListItem = ListView1.ListItems.Add(, , CStr(i))
myListItem.SubItems(1) = "B" & CStr(i)
myListItem.SubItems(2) = "C" & CStr(i)
myListItem.SubItems(3) = "D" & CStr(i)
myListItem.SubItems(4) = "E" & CStr(i)
Next
ListView1.Visible = True
Debug.Print Format$(Timer - sngTimer, "#,0.00")
End Sub
Private Sub Command2_Click()
Dim i As Long
Dim sngTimer As Single

ListView1.ListItems.Clear
sngTimer = Timer
With ListView1
.Visible = False
With .ListItems
For i = 0 To 49999
With .Add(, , CStr(i))
' .SubItems(1) = "B" & CStr(i)
' .SubItems(2) = "C" & CStr(i)
' .SubItems(3) = "D" & CStr(i)
' .SubItems(4) = "E" & CStr(i)
With .ListSubItems '上記SubItemsより高速
.Add , , "B" & CStr(i)
.Add , , "C" & CStr(i)
.Add , , "D" & CStr(i)
.Add , , "E" & CStr(i)
End With
End With
Next
End With
.Visible = True
End With
Debug.Print Format$(Timer - sngTimer, "#,0.00")
End Sub
※件数が多すぎる場合は減らしてテストしてみてください

No.2897 ListViewの表示を早くしたい  投稿者:NAO★ [01/10/09(火)14:40分]

はじめまして。

現在、MP3のタグ情報を検索するプログラムを作成しています。

MP3のタグ情報をまとめたカタログファイルを読み込んで、検索し、 検索結果をListViewにて表示しているのですが、 検索結果が2000件など多くなると、表示だけに4〜5秒かかってしまいます。 検索の時間を含めると7秒ぐらいなので、カタログファイルを全件読むより ListViewにデータを追加する方が時間がかかってしまいます。

現状では、ヒットしたときだけ次のサブルーチンをコールして、 ListViewにデータを追加しています。
検索の開始部分ではListViewをVisible=Falseにして、 少しでも表示を早くなるようにしています。
Sortはしていません。
このほかに早くする工夫は在りますでしょうか?
Private Sub 結果_View(TagData As MP3DB)
Dim LV As ListItem
Dim FileName As String
Dim L As Integer
With TagData
'パスからファイル名の部分だけを取り出しています
L = InStrRev(.Path, "\")
If L > 0 Then
FileName = Mid$(.Path, L + 1)
Else
FileName = .Path
End If
'表示
Set LV = ListView1.ListItems.add(, , FileName)
LV.SubItems(1) = .title
LV.SubItems(2) = .artist
LV.SubItems(3) = .album
LV.SubItems(4) = .comment
LV.SubItems(5) = .Path
End With
End Sub

あと、
Web上でいろいろ検索した結果、Visual C++では「仮想リストビュー」 という機能が使えることを知りました。
これだとデータが1万件以上になってもほぼ一瞬で表示できるようなのですが Visual Basicで、この機能はつかえるのでしょうか?

No.2896 WinNTのATコマンドから実行するとレジストリでエラー  投稿者:KUMA [01/10/09(火)13:58分]

WindowsNTやWin2000のATコマンド(時間指定処理)を利用して、
開発したアプリを実行させようと思っています。

しかしその際、レジストリの情報を読みこんでくれません。

「コマンドラインから直接実行ファイル名と引数を入力した場合」
または「それをバッチファイルに記述しコマンドラインから バッチファイルを実行した場合」には問題なく実行ができます。
しかし、同じバッチファイルをATコマンドで実行すると レジストリが読み込めなくてエラーになってしまいます。
ATコマンドは問題なく指定時間で稼動しており、アプリも起動します。
レジストリから読み込む処理のみうまく稼動しないといった状況です。

どなたか原因がわかる方いらっしゃいましたら、宜しくお願いします。


No.2895 RE:『実行時エラー '380' プロパティの値が不正です。』    投稿者:あき☆彡 [01/10/09(火)0:32分]

Form1の大文字小文字は関係ありません。

小文字になるのは、、、
フォームのオブジェクト名が"form1"になっていませんか?

エラーの原因ですが、
メッセージの通りプロパティの値が不正だからです。
どう不正かというと、
実際に存在しないフォントを設定しようとしています。
"MS P明朝"

"MS P明朝"

全角スーペースではなく、半角スペースです。

それでは、頑張って下さい。

No.2894 『実行時エラー '380' プロパティの値が不正です。』  投稿者:靴下カタオ [01/10/08(月)23:24分] http://www.KenAshizuka.com/

いつもお世話になっております。


技術評論社の「Visual Basic 6.0 初級プログラミング入門(上) :河西朝雄著」

の中で「『MS P明朝』を使ってフォントサイズを変更しながら表示した例」
というプログラムのサンプルを見て、次のようなコードを作成しました。

Private Sub Form_Click()
form1.FontName = "MS P明朝"
For i = 14 To 62 Step 8
form1.FontSize = i
Print "Fontの印刷"
Next i
End Sub

実行すると、

実行時エラー '380'
プロパティの値が不正です。

というエラーメッセージを発行して終了します。
よく見ると、2行目と4行目で

Form1.FontName

と書いたつもりだったのに、

form1.FontName

と書き替わっていて、
これはどんなにしても大文字にならないのです。
フォームのオブジェクト名と Caption がいずれも
form1 になったので、これを Form1 に変えても
大文字を入力することはできず、
これで実行しても
やはり同じエラーが出てしまいます。

何らかの原因でコードとプロパティの間で
不整合が生じているのでしょうか。
おわかりになることがありましたら、お教え下さい。

No.2893 RE:VBとExcel  投稿者:花ちゃん [01/10/07(日)23:14分]

ここのHPの [Excel&Word関係]はご覧になりましたか?


No.2892 VBとExcel  投稿者:さとこ [01/10/07(日)21:48分]

VB6.0でプログラミングをしています。

Excelオブジェクトを作成し、Excelのシートにデータを
貼り付けています。
ここまでは出来たのですが、このデータを貼り付けた部分の
セル幅を調節したり、罫線付けたりしたいです。
VBからExcelにこのような操作をする方法を教えてください。
よろしくお願いします。

No.2891 Re:Shell関数を使用したアプリケーション起動  投稿者:ゆう(U) [01/10/06(土)16:07分]

> (ゆう)さん、(ゆー太郎さん) サンプルソースを拝見したいので

ゆう(U) でお願いします。
  ^^^半角

ゆー太郎 さんのオリジナルのコードが見つからないので
私が幾らか改造したコードを載せます。
※動作確認は十二分に行ってください!

ゆう(U) 改良(悪)コード)
Private Declare Function GetForegroundWindow _
Lib "user32" () As Long
Private Declare Function SetForegroundWindow _
Lib "user32" _
(ByVal hWnd As Long) As Long
Private Declare Function GetWindowThreadProcessId _
Lib "user32" _
(ByVal hWnd As Long, _
ByRef lpdwProcessId As Long _
) As Long
Private Declare Function AttachThreadInput _
Lib "user32" _
(ByVal idAttach As Long, _
ByVal idAttachTo As Long, _
ByVal fAttach As Long) As Long
Private Declare Function BringWindowToTop _
Lib "user32" _
(ByVal hWnd As Long) As Long
Private Declare Function IsIconic Lib "user32" _
(ByVal hWnd As Long) As Long
Private Declare Function OpenIcon Lib "user32" _
(ByVal hWnd As Long) As Long
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
'==========================================================
'アプリをアクティブ(ForeGround)にする fForeGroundWindow
'==========================================================
' result = fForeGroundWindow(AppName)
' 引数 AppName :アプリケーション名(終端:vbNullChar)
' 戻値 result :True 成功
'     :False 失敗
'----------------------------------------------------------
Public Function fForeGroundWindow(ByRef AppName As String) As Boolean
Dim hWnd As Long
Dim lngResult As Long

If InStr(AppName, vbNullChar) = 0& Then
AppName = AppName & vbNullChar
End If

hWnd = FindWindow(vbNullString, AppName)
If hWnd <> 0& Then
If IsIconic(hWnd) = False Then
#If Win98 Then
lngResult = fForeGroundWindow98(hWnd) '98(95OSR2)対策
#Else
lngResult = SetForegroundWindow(hWnd) '95初期ならOK
#End If
Else
lngResult = OpenIcon(hWnd)
If Not (lngResult = False) Then
'' lngResult = fForeGroundWindow98(hWnd) '?後ろへ行くので
' lngResult = SetForegroundWindow(hWnd) 'これならOK
#If Win98 Then
lngResult = fForeGroundWindow98(hWnd) '98(95OSR2)対策
#Else
lngResult = SetForegroundWindow(hWnd) '95初期ならOK
#End If
End If
End If
fForeGroundWindow = Not (lngResult = False)
End If
End Function

'==========================================================
'アプリをアクティブ(ForeGround)にするfor98 fForeGroundWindow98
'==========================================================
' result = fForeGroundWindow98(hWnd)
' 引数 hWnd :アクティブにしたいWindowハンドル
' 戻値 result :SetForegroundWindowの戻値
'----------------------------------------------------------
'※このモジュールは外へ公開しない
'----------------------------------------------------------
Private Function fForeGroundWindow98(ByVal hWnd As Long) As Long
Dim lngThreadTop As Long
Dim lngThreadMe As Long
Dim lnghandle As Long
Dim lngResult As Long
Dim lngResult2 As Long

'現在のアクティブのWindowハンドルを取得
lnghandle = GetForegroundWindow
' If lngHandle = hWnd Then
' '最前面に既にあるなら手前に表示して終了する
' fForeGroundWindow98 = BringWindowToTop(hWnd)
' Exit Function
' End If

'そのスレッドIDを取得
lngThreadTop = GetWindowThreadProcessId(lnghandle, ByVal 0&)
'アクティブにしようとしているWindowハンドルのスレッドを取得
lngThreadMe = GetWindowThreadProcessId(hWnd, ByVal 0&)
'スレッドをアタッチする
lngResult = AttachThreadInput(lngThreadMe, lngThreadTop, 1&)
'隠れている場合手前に表示する
lngResult = BringWindowToTop(hWnd)
'アクティブ(フォアグラウンド)にする
lngResult2 = SetForegroundWindow(hWnd)
'戻値を設定
fForeGroundWindow98 = (lngResult Or lngResult2)
'スレッドをデタッチする
lngResult = AttachThreadInput(lngThreadMe, lngThreadTop, 0&)
End Function

No.2890 プロジェクトグループについて  投稿者:Assam [01/10/06(土)0:09分]

こんばんわ、はじめまして。


プロジェクトグループについてですが、"A"プロジェクトのフォームから
"B"プロジェクトのフォームを開くことは可能ですか?
説明が下手でわかりづらいと思いますが、よろしくお願いします。

No.2889 Re:フォームを非表示でLoadしたい  投稿者:ゆう(U) [01/10/05(金)23:42分]

> フォームを非表示でLoadしたいのです

> フォームオブジェクトに非表示にするプロパティがあったので
> やって見ましたが、どうもうまくいきません。
何も難しいことはありません・・・
Load だけ行えばOKです。

FormX.Show
では暗黙の・・・
Load FormX
が行われているだけですから。
※当然Loadイベントで表示されるコードはナシ


注意点などもありますので、詳しくは・・・

ヘルプ参照
「Load ステートメント」
です。

No.2888 Re:フォームを非表示でLoadしたい  投稿者:さおとめ [01/10/05(金)20:07分]

Form_Loadで・・・


Me.Hide でできると思いますよ!

FormObject.Show で表示します。
(自フォームは、Me.Show です)


No.2887 フォームを非表示でLoadしたい  投稿者:匿名 [01/10/05(金)19:35分]

いつも参考にさせて頂いています。

質問させてください。

フォームを非表示でLoadしたいのです
フォームオブジェクトに非表示にするプロパティがあったので
やって見ましたが、どうもうまくいきません。

Form1.Visible = False

他の方法があるのでしょうか??

No.2886 Re:漢字の識別  投稿者:よねKEN [01/10/05(金)13:55分]

>データファイルを五十音別に分けて、語句を登録していこうと考えているのですが、

>語句を検索、追加する時に、漢字文字から五十音を見分けるということはできますか?

漢字からふりがなを取るという話題は各所の掲示板でよく質問にあがりますが、
これはあくまで漢字の読みを入力するときの補助的なものなので、
そのデータファイルに読み仮名もデータとして持った方がよいでしょう。
(語句登録時に漢字データといっしょに入力してもらう)

#日本語は同じ漢字で違う読みというのが多数ありますので、
#文脈の中でしか確実には判断できません。
#固有名詞とかだと文脈の中でも判断できません。
#例) 大和・・・やまと・だいわ

No.2885 ログイン前にEXEファイルを実行するには?  投稿者:MOMO [01/10/05(金)11:02分]

すみませんが質問させてください。


Windowsにログインする前に、VBで作成したEXEファイルを実行できますか?
知っている方がいれば教えてください。

環境は、Windows2000、VB6、SP5です。

No.2884 SQLのタイムアウトエラーを直したいです。  投稿者:はま [01/10/05(金)10:05分]

環境

VB 6.0 SP5.0
SQLServer7.0 SP3

ソースです。

Dim Rs As rdoResultset ''レコード結果
Dim strSql As String

strSql = "SELECT ... FROM ........ UNION SELECT ...FROM ......."
↑長いです。

''SQL文を実行する
Set Rs = cn.OpenResultset(strSql)
''1件もレコードが無い場合は処理を中断する
If Rs.EOF Then ←ここで落ちてしまいます。
GoTo Exit_Function
End If

これを実行するとタイムアウトエラーが出てしまいます。
どこを修正すると良いのでしょうか。
SQLサーバーのクエリアナライザではちゃんと結果が取得できます。

どうかよろしくお願いします。

No.2883 漢字の識別  投稿者:なつ [01/10/04(木)20:26分]

こんばんは。

早速ですが、現在簡単な「和英辞書」を作ろうとがんばっています。

データファイルを五十音別に分けて、語句を登録していこうと考えているのですが、
語句を検索、追加する時に、漢字文字から五十音を見分けるということはできますか?
(たとえば、調べたい語句が「漢字」の場合、<カンジ>の読みで「か」行の語句が 登録してあるファイルを
開いて、該当する語句を検索、またはファイルに追加したいのです。)

また、辞書を作成するにあたってのファイル構成で、 何か良い方法があったら教えてください。

No.2882 Re:Shell関数を使用したアプリケーション起動  投稿者:さおとめ [01/10/04(木)15:34分]

アクティブなウィンドウを監視して、


切り替わった時点でフォームを最前面に設定して解決しました!

とコメントしましたが、うまく動作しないときが発生しました。

デバック処理中には発生しませんし、コンパイル後もいつも発生するわけでないので

どんな問題があるのか分からない状態です。


お願い:
(ゆう)さん、(ゆー太郎さん) サンプルソースを拝見したいので

どこに掲載されているか教えいただけないでしょうか?


質問:
Shell関数を使用して起動したウィンドウハンドルを取得する等の関数はありませんか?


参考:
開発環境 Windows2000 SP2 , VB 6.0 です!
(OSが違っても参考になると思います)

よろしくお願いいたします。


No.2881 Re:Shell関数を使用したアプリケーション起動  投稿者:さおとめ [01/10/03(水)17:19分]

(ゆう)さん、(ゆー太郎)さん ありがとうございます。


起動時に、起動前と起動後のアクティブなウィンドウを監視することで

解決しました(お手数おかけしました!)


No.2880 re:Shell関数を使用したアプリケーション起動  投稿者:ゆー太郎 [01/10/03(水)16:48分]

懐かしいネタですね。(^-^) 確か、Win98が出た頃でしょうか。

Win98から、他プロセスからのアクティブウィンドウ変更に制限が
付いたんですよね。
最前面に出ず、アクティブフォーカスもさせず、キャプションバー
を点滅させて、ユーザーに知らせる仕様になったんです。

そこで、「他プロセスから」の制限の裏をかいて、現在アクティブな
プロセスに、前面表示にしたいウィンドウのスレッドを一時的にアタッチして、
無理やり アクティブプロセス内でアクティブウィンドウの切り替えを
させるようにしたんでしたよね。


>ゆー太郎さんに動作テスト用として
>いただいたコードなので私の一存では公開できません。

一向に構わないですよ。
あのソース自体、V友にも公開したものなので。

No.2879 Re:Shell関数を使用したアプリケーション起動  投稿者:ゆう(U) [01/10/03(水)15:59分]

> 漠然とした質問で申し訳ありませんが・・・

開発環境は?

> Shell関数を使用してアプリケーションを起動したいのですが、
>
> 起動されたアプリケーションが表示されないときがあります!
> (起動はされますが、タスクバーで点滅している)
OSの仕様変更のため・・・だと思います。

> どちらもうまくいきません。
○に数字は機種(依存文字)によっては表示されないそうなので
使用しないほうがいいです。

> ご存じの方、いらっしゃいませんか?
スレッドにアタッチして・・・等の作業が必要だそうです。
※Win98なら

ここのリンクにも載っている
「ゆー太郎」
さんが詳しかったのですが…
※Win98用のコードはあるのですが、ゆー太郎さんに動作テスト用として
 いただいたコードなので私の一存では公開できません

No.2878 RE:[アプリケーションの追加と削除]内容の取得方法を教えてください  投稿者:A [01/10/03(水)14:26分]

自己レスです。

その情報が格納されているレジストリを読み込むだけでOKでした。
お騒がせしてすみません。

No.2877 Re:VB5→VB6へ移行  投稿者:ゆう(U) [01/10/03(水)14:19分]

> アプリをVB5で作成を行い、VB5にある標準のインストーラー作成機能で
>作成したインストーラーで導入した

> PCに、同じアプリをVB6でコンパイルしたEXEファイルのみを塗り替えた場合、 >問題なく動作するのでしょうか?
VB5.0であってもSPが異なれば動作は保証されません。
※その場合も再度インストール
 VB添付のインストーラーの場合アンインストール後に


インストーラーで導入したPCにはVB6のランタイムは
タブン入っていないでしょう・・・

ですから、タブン動作しません。
※ランタイムだけではなく使用されているコントロール
 も必須ですから

使用しているコントロールのバージョンやVBのSP等
使用している環境に変化がない場合のみEXEのみの
コピーで動作します。

No.2876 VB5→VB6へ移行  投稿者:890079 [01/10/03(水)13:58分]

はじめまして。

教えていだだけませんか。

アプリをVB5で作成を行い、VB5にある標準のインストーラー作成機能で 作成したインストーラーで導入した
PCに、同じアプリをVB6でコンパイルしたEXEファイルのみを塗り替えた場合、 問題なく動作するのでしょうか?

経験のある方いらいっしゃいましたら、教えていただけませんか。
よろしくお願いいたします。

No.2875 [アプリケーションの追加と削除]内容の取得方法を教えてください  投稿者:A [01/10/03(水)13:00分]

API関数を使用してアプリケーションの追加と削除の内容を取得したいのですが、

どなたかご存知の方いらっしゃいますか。
いらっしゃいましたらご教授して頂きたいのですが。。
宜しくお願い致します。


No.2874 Shell関数を使用したアプリケーション起動  投稿者:さおとめ [01/10/03(水)12:24分] http://mallkun.to/mkvb

漠然とした質問で申し訳ありませんが・・・


Shell関数を使用してアプリケーションを起動したいのですが、

起動されたアプリケーションが表示されないときがあります!
(起動はされますが、タスクバーで点滅している)

何が原因でこのようなことが発生するのでしょうか?
また、対処方法はありませんか?

現在:
Shell "ファイルパス",vbNormalFocus としています。

試したこと:
1.AppActivate ステートメントの使用
2.WindowsAPI で Shell の IDを取得してウィンドウを前面にする
どちらもうまくいきません。

ご存じの方、いらっしゃいませんか?

よろしくお願いいたします。

No.2873 FileList表示について      投稿者:VB初心者 [01/10/03(水)11:07分]

VB初心者です。

そこで解らないことがあるんですが・
よろしくお願い致します

「FileSystemObject」を使った FindFile.LZH サンプルファイルを使っているのですが
常に最初から最終フォルダーの FileListを またフォルダーを選択した場合は選択した フォルダーのFileListを 表示したいのですが

サンプルコードは 以下のようになりますが

Private Sub Dir1_Change()

Label1.Caption = Dir1.Path

End Sub

Private Sub Drive1_Change()
On Error GoTo Err_Drive1

Dir1.Path = Drive1.Drive

Exit Sub
Err_Drive1:
Drive1.Drive = Dir1.Path

End Sub

ちょっとソースの修正を よろしくお願いいたします


No.2872 Re:メッセージボックスを表示中にタイマーイベントをとめたくない  投稿者:ゆう(U) [01/10/03(水)9:47分]

> 1秒周期でタイマーイベントを行なっています。

> それがメッセージボックスが表示されているとタイマーが停止してしまいます。
> これをどうにかしてタイマーを止めずにメッセージボックスを
> 表示したいと思っています。
一般的な回答は他のHPで出ていますが・・・


実際にEXEを作成し、動作確認はした方がいいですよ。

※前にも書きましたが・・・
「Timer コントロール」はIDEと実行時で動作が異なることが
ありますので、動作確認は十分に行ったほうがいいです。

No.2871 RE:メッセージボックスを表示中にタイマーイベントをとめたくない  投稿者:MIZO [01/10/03(水)0:52分]

マルチポストはマナーに反するってご存知ですか?

特に相互リンクのHPにマルチポストは・・多くの人が同じ投稿を目にすることになります
しばらく待ってみて回答が得られない時に改めて他に投稿すれば良いのでは?

他のHPの方にレスが付いているようですのでそちらを参考にしてみてはいかがでしょう?

No.2870 メッセージボックスを表示中にタイマーイベントをとめたくない  投稿者:タロウ [01/10/02(火)21:08分]

はじめまして、よろしくお願いします。


1秒周期でタイマーイベントを行なっています。
それがメッセージボックスが表示されているとタイマーが停止してしまいます。
これをどうにかしてタイマーを止めずにメッセージボックスを
表示したいと思っています。

どなたかご存知の方よろしくお願いします。

No.2869 ListViewの表示方法   投稿者:初心者 [01/10/02(火)16:15分]

VB 初心者です


始めまして, 質問ですが、
FileSystemObject」を使ったファイルの検索システムのサンプル FindFile.LZH サンプルを使って最後のフォルダーのファイルを 最初からファイルリストボックスに 表示させたいのですが、
表示させる方法がわかりません。
よろしくお願い致します。


現在は下記コードでやっております。

Private Sub Dir1_Change()
Label1.Caption = Dir1.Path
End Sub

Private Sub Drive1_Change()
On Error GoTo Err_Drive1
Dir1.Path = Drive1.Drive
Exit Sub

Err_Drive1:
Drive1.Drive = Dir1.Path
End Sub



No.2868 オートメーションエラーについて  投稿者:ヨッチ [01/10/02(火)11:29分]

はじめまして。

VB5.0(SP3)でアクティブXを用いてシステムを作成しているのですが
GUIの操作中に時折オートメーションエラーが出現します。
オートメーションエラーと言うのはどんな時に起こるエラーなのですか?
またその回避方法を教えていただくとありがたいです。

No.2867 Re:VBリソースエディターに、中国語入力したい  投稿者:ゆう(U) [01/10/02(火)10:58分]

> VBのリソースエディター内のセルに、

> 中国語を入力したり、
> 中国語フォントで入力した文字をコピー・アンド・ペーストしたのですが、
> 見事に化けてしまいました。
> 多言語で入力をしていきたいのですが、
> どのようにすればいいのか教えてください。お願いします。
経験はありませんが・・・

ストリングテーブルの新規挿入とかって何か意味ないですか?
※同じIDで複数言語用の入力が出来るようですが・・・

ちなみに、エディター上では化けるけど中国語フォントを使用した
テキストボックス等に表示しても化けてます?

後は、ヘルプの・・・
「国際対応のアプリケーション」
を読み返すとか。

No.2866 RE:イベントに戻ってくるたびに変数がクリアされる    投稿者:靴下カタオ [01/10/02(火)1:35分] http://www.kenashizuka.com/

MIZOさん、どうもありがとうございます。

標準モジュールを追加して、そこに

Public n As Integer

を入れるという方法を試して解決しました。
言われてみれば、確かに、
「すべてのフォームで使うため、標準コードモジュールで
Public 宣言する」
という但し書きがついていたのですが、お恥ずかしいですが
この意味もわからず、全く無視していたのです。

Option Explicit については、この参考書にも書いてありました。
今後はこれを忠実に実行するつもリです。

まだ、理解が完全に追いついていきませんが、
今後ともよろしくお願いします。

No.2865 VBリソースエディターに、中国語入力したい  投稿者:なごやん [01/10/01(月)17:58分]

はじめまして。ご存知でしたら教えてください。

VBのリソースエディター内のセルに、
中国語を入力したり、
中国語フォントで入力した文字をコピー・アンド・ペーストしたのですが、
見事に化けてしまいました。
多言語で入力をしていきたいのですが、
どのようにすればいいのか教えてください。お願いします。

No.2864 ローカルマシンのIPアドレスを取得  投稿者:匿名 [01/10/01(月)16:14分]

こんにちは、困った時はいつも参考にさせて頂いてます。


早速ですが、ローカルマシンのIPアドレスを取得したいのです。
Winsockを使用して、LocalIPで取得できるのですが
WindowをLoadする前に、IPアドレスを取得する為
Winsockオブジェクトが分かっていないのでこの方法は使えません

Winsock以外でローカルマシンのIPアドレスを取得する方法ってあるのでしょうか?

No.2863 SQLServerで「開かれているカーソル・・・」がでます。  投稿者:はま [01/10/01(月)1:52分]

エラーメッセージ

「開かれているカーソルが存在しないか、カーソルが閉じられています。」

SQLによるヒット数が多いとエラーが起こり、ヒット数が多くないとエラーが起こりません。
原因がわからずに困っております。
ご存知の方がいらっしゃいましたらご教授下さい。

ぜひよろしくお願いします。

環境
VB 6.0 SP5.0
SQLServer7.0 SP3

ソースです。

Dim Rs As rdoResultset ''レコード結果
Dim strSql As String

strSql = "SELECT ... FROM ........ UNION SELECT ...FROM ......."
''SQL文を実行する
Set Rs = cn.OpenResultset(strSql, rdOpenDynamic, rdConcurReadOnly,
rdAsyncEnable + rdExecDirect)
''実行が終了するまでループする。
While Rs.StillExecuting
DoEvents
Wend
''1件もレコードが無い場合は処理を中断する
If Rs.EOF Then ←ここで落ちてしまいます。
GoTo Exit_Function
End If

No.2862 RE:イベントに戻ってくるたびに変数がクリアされる  投稿者:MIZO [01/10/01(月)1:11分] http://www6.ocn.ne.jp/~mzworks

まず原因から。

Public n As Integer
をForm2のコードとして書いてませんか?

Form2のコードとして書いてしまうと
Dim F As New form2
でForm2のインスタンスを作成する時、パブリック変数nも
新しいForm2のものとして処理されてしまいます。
ですから
F.Caption = "instance" & n
で参照しているnは新しく宣言されたnになるので
毎回、初期値の0になってしまうわけです。

Public n As Integer
は標準モジュールを追加してそちらに書きましょう。
期待している動作になると思います。
書籍にはそのように書いてありませんでしたか?

ついでに。
変数を宣言無しで使用されているようですが・・・
余計なミスやエラーを防ぐ為にも変数は必ず宣言するように
した方がよいでしょう。

コードの頭(General部)に
Option Explicit
と記述することで変数の宣言を強制する(宣言していないとエラーになる) ことができます。

初めから強制させるにはメニューの「ツール」−「オプション」−「編集」にある
『変数の宣言を強制する』
をチェックすれば自動的に「Option Explicit」がコードに追加されます。

No.2861 イベントに戻ってくるたびに変数がクリアされる  投稿者:靴下カタオ [01/9/29(土)23:53分] http://www.kenashizuka.com/

いつもお世話になり、ありがとうございます。


技術評論社の「Visual Basic 6.0 初級プログラミング入門(上) :河西朝雄著」

という本で、「フォームインスタンスの生成」
としてあげられたサンプルをそのままコーディングし、
次のようなコードを作成しました。

Public n As Integer

Private Sub Command1_Click()
For i = 0 To Forms.Count - 1
Print Forms(i).Caption
Next i
End Sub
Private Sub Form_Click()
Dim F As New form2
F.Show
F.Move Left + 300, Top + 300
F.Caption = "instance" & n
n = n + 1
End Sub

フォームに貼り付けたのは Command1ボタン ひとつだけです。

「フォームをクリックするとフォームインスタンスが生成されます。
その際キャプション名に0番からの通し番号がつきます。
Command1ボタンをクリックすると、現在ロードされている
フォームの全キャプションが表示されます。」

とあり、実行するとこのとおりになることを確認しました。
しかし、たった一点だけこのとおりにならないのです。
プログラムから、フォームのオブジェクト名は最初が Form1、
次からが instance0、instance1、instance2 となるはずなのに、
Form1、instance0、instance0、instance0 となってしまいます。
つまり、 n がインクリメントされないのです。
インクリメントされても、また戻って来るときにクリアされるのでしょうか?
その原因について、何かわかられたら教えていただきたいのです。
よろしくお願いします。

No.2860 こんなの作れますか?  投稿者:匿名 [01/9/29(土)13:50分]

お尋ねします。

サーバーに常駐させて、例えばファイルが送られてくると動作するといったような
プログラムをVisualBasicで作ることは可能でしょうか?
詳しいご説明でなくても、何かヒントだけでも頂けたら嬉しいのですが・・・
どなたか何かご存知の方は教えて下さい、お願いします。

No.2859 Re:Timerについて  投稿者:さおとめ [01/9/29(土)10:02分]

(ゆう)さんいつもありがとうございます!


Enableの切り替えではうまくいく・・・
処理事態に問題はないのですが、Intervalを変更したときに
切り替わらないのかと疑問に思ったもので・・・
(VB初心者のため、こんな記述でいいのかな?と思ったもので)


No.2858 Re:Timerについて  投稿者:ゆう(U) [01/9/29(土)8:47分]

> Timer.Enable=False

> Timer.Enabel=True とする必要があるのでしょうか?
> (この場合はうまくいきますが・・・)
出来ているのではないですか?
※私もこの方法を使ったことがあります

たとえIntervalだけ変更しても、仕様がTimerイベント後に
反映とか、EnabledがTrueに変更されたときに反映など
仕様が変更された場合でも、どちらでも意図する動作が
期待できるのでこの方法が一番いいと思いますが・・・
※現在の仕様ではIntervalでイベントが必ず発生するとは
 限りません、他の処理動作中であれば次回持ち越しです。
 (可能性を考えると、この時もInterval反映の機会あり)


「Timer コントロール」はIDEと実行時で動作が異なることが
ありますので、動作確認は十分に行ったほうがいいです。

No.2857 Re:ファイルの実体は何なのか?  投稿者:靴下カタオ [01/9/29(土)2:15分] http://www.kenashizuka.com/

よねKENさん、どうもありがとうございます。

よねKENさんのご説明で、ほとんど理解できたと思います。
今まで、オブジェクトというものが把握できていなかったため、
全体の理解を阻んでいたように思います。
ただ、今もオブジェクトの概念が完全にわかっているとはいえません。
また、プロジェクトというものも、わかっているとはいえず、
今後もこのような問題にぶつかることがあるかも知れません。
できればまたよろしくお願いします。どうもありがとうございました。

No.2856 RE:グリッド上のチェックボックス全選択の仕方    投稿者:VB太郎 [01/9/28(金)15:15分]

    Dim i           As Long

Dim wChkNum As Long ''チェックBoxの数

wChkNum = 10

For i = 0 To wChkNum - 1
Check1(i).Value = 1
Next i

??こういう事でいいんでしょうか?
ちなみにチェックBoxの数が多いと画面がちらつくので
チェックBoxのvisibleをFalseにするとよいです。

No.2855 Timerについて  投稿者:さおとめ [01/9/28(金)13:36分]

いきなり質問ですが・・・


Timer.Interval を変更したとき
変更した時からカウントとならないのでしょうか?

Timer.Interval=60000 を設定しておき(1分間隔)
別の処理によってTimerが初期化される場合に
Timer.Interval=Timer.Interval としていますが思ったようにいきません。

Timer.Enable=False
Timer.Enabel=True とする必要があるのでしょうか?
(この場合はうまくいきますが・・・)

よろしくお願いいたします。

No.2854 グリッド上のチェックボックス全選択の仕方  投稿者:VB難しい [01/9/28(金)13:15分]

こんにちは

フォーム上の全選択ボタン押下処理についての質問です。
全選択コマンドボタン押下時に、グリッド上に存在するデータ(1個からn個まで) にあるチェックボックスをすべてOnにしたいのですが、その書き方が分かりません。
アドバイスをお願いいたします。

No.2853 RE:時間のグラフを書きたいです  投稿者:花ちゃん [01/9/28(金)13:12分]

>エクセルで作った勤務時間をグラフにしたいんですが。


エクセルで表示できるようなグラフ(種類等)なのでしょうか?
ここのExcel&Word関係を一度見て下さい。
又、Excelでグラフを書いてそれをマクロで記録して見ると
やり方が解りますよ

No.2852 RE:終了したはずのExcelが残っている  投稿者:花ちゃん [01/9/28(金)13:07分]

>ただ、オブジェクトを解放した後にctrl + Alt + Delで確認すると、
>Excelが残っていました。

>なにか他に根本的な原因があるのでしょうか。

いつもそのような状態ならまだ、不具合個所があるものと思われます。

>このような場合、どのような方法でExcelを終了すればよいのでしょうか。

ctrl + Alt + Del で表示されている Excel を選択し終了するか、再起動して下さい。

No.2851 時間のグラフを書きたいです。  投稿者:よし [01/9/28(金)12:59分]

エクセルで作った勤務時間をグラフにしたいんですが。


前のログ 次のログ


VBレスキュー(花ちゃん)
Visual Basic6.0  VB6.0