前のログ 次のログ

No.3400 Re:Unload禁止  投稿者:よねKEN [01/12/11(火)10:23分]

> フォームの終了 "Xボタン" を禁止するにはどうしたら良いのでしょうか?


QueryUnloadイベントを使うのが常套手段です。ヘルプで調べてみて下さい。

> 質問1:
> Sample側で引数1を渡していますが、True は 1で無かったでしょうか?
>(False=0、True=1)

Trueの値は-1です。
UnloadイベントのCancelは0以外が指定されたときにキャンセルされます。(ヘルプ参照)
つまり1でもTrueでもUnloadのキャンセルとなります。

> 上記処理でうまくいくのはなぜでしょう?
少なくともこちらで試した限りではうまくいってませんが(^^; (終了できません)
#WinNT4.0SP5、VB5+SP3

>質問2:

それが正しいです。

質問3は省略。

本当にそのコードでボタン押下時に終了できているのでしょうか?
できているなら、私にはわかりません。

No.3399 Unload禁止  投稿者:さおとめ [01/12/11(火)9:18分] http://members5.tsukaeru.net/mkvb/

フォームの終了 "Xボタン" を禁止するにはどうしたら良いのでしょうか?


"Xボタン" Enabel状態にしたいのですが・・・
(User処理で作成した終了以外を禁止”Cancel”とする)

現在の処理

Private Sub Form_Unload(Cansel as Integer)
Cancel = True
End Sub

とすれば、UnloadをCancelすることはできますが、
このほうほうでは、Userで作成した場合もFormが
とじなくなるため、

Private Sub Bottun_Click()
Call Form_Unload(1)
End SUb

Private Sub Form_Unload(Cancel as Integer)
if Cancel=1 then
Unload me '(or End)
else
Cancel = True
End if
End Sub

とすれば、とりあえずうまくきました。

質問1:
Sample側で引数1を渡していますが、True は 1で無かったでしょうか?
(False=0、True=1)
上記処理でうまくいくのはなぜでしょう?
質問2:
Form_Unload側で、引数が1の場合、UnLoad me としてうまくいきますが、
Unload me では、引数0が渡されると思うのですが、
この処理では、もう一度Form_Unloadが呼ばれ・・・
else側の処理を通ると思うのですが???
質問3:
この処理で問題ないのでしょうか?
(一応動作はしますが・・・)


ご存じの方いらっしゃいましたら よろしくお願いいたします。

開発環境:Windows2000 SP2,VisualBasic6 SP5


No.3398 RE:RE:移動キーの認識    投稿者:JA [01/12/11(火)6:26分]

ありがとうございました、NAO★さん

>コマンドボタン、チェックボックス、オプションボタンが1つでもあるフォームでは、
>方向キーを認識することができません。
>PictureBoxコントロールをボタンの代用として使うのが良いかと思います。
フォーカスを移動できないように設定すればできると思ったのですが...
ワイヤレスのオモチャをコントロールするとき、どうしてもキーボードからの操作をするのに、
移動キーを使いたかったものですから。

No.3397 ゆうさんありがとうございます  投稿者:ノッポさん [01/12/10(月)21:17分]

ゆうさん有り難うございます。

 ”現在のコードではループで読みこんでいますが
  ファイルサイズ分を「InputB 関数」で一気に
  読みこんでUnicodeに変換した方が早いです。
  ※どの道今のコードではフォームが固まります
この意味がよくわからないのですが?
なにぶんはじめたばかりですので
申し訳ありませんが、もっとわかりやすくお願いします。
もしよければ、サンプルコードなど書いていただけたら幸いです。
せっかくのお返事申し訳ありません

No.3396 RE:スタック領域不足  投稿者:NAO★ [01/12/10(月)19:04分]

>スタック領域が不足しています。(Error 28)

ローカル変数の保存領域などプログラムの作業領域が不足しているということなんですが、
再帰呼び出しなどで階層が深くなると出やすくなるなるようですね。
あとはイベントの連鎖反応で無限ループに陥ったときとか。

次のような簡単なプログラムでも確かめられます。
Private cnt As Integer
Private Sub test()
cnt = cnt + 1
'If cnt > 1000 Then Exit Sub 'これぐらいなら大丈夫
If cnt > 10000 Then Exit Sub
test
End Sub
Private Sub Command1_Click()
test
Debug.Print "正常終了"
End Sub
他にもいろいろ出る原因がありますが、くわしくはエラーが出たときのヘルプをご覧下さい。

No.3395 1画面上に複数のListViewがある場合(追記)  投稿者:VB初心者 [01/12/10(月)16:18分]

上記の件、解りました。


オブジェクトのMouseDownイベントを使えばよいのですね。

No.3394 スタック領域不足  投稿者:ゆきんこ [01/12/10(月)16:16分]

先日は、ありがとうございました。


今回、「スタック領域不足」というエラーが出力されました。
これは、どのような意味なのでしょうか??

No.3393 1画面上に複数のListViewがある場合  投稿者:VB初心者 [01/12/10(月)11:44分]

教えてください!


1つの画面上に複数のListViewを持っている場合で、現在どのListViewがアクティブ状態
(選択されている状態)なのかを知りたいのですがなにかいい方法ありますか?

No.3392 デフォルトプリンターのdevicename取得で  投稿者:wata [01/12/10(月)11:20分]

はじめまして。いつも拝見さしてもらっております。

皆様の知恵をお借りしたくて質問させていただきます。

環境:Win98、VB6.0
   プリンターはネットワークプリンターで三種類あります。

デフォルトのプリンター名などは取得できたのですが
デフォルトプリンターのDeviceネームを習得する方法がどうしても分からなくて困っています。

自分で考えた手法は、デフォルトプリンターを取得した後に、レングスを調べて
portとdriveを切り離すというのを考えましたがどうもうまくいきません。

どなたかお分かりになる方がいらっしゃいましたら、ご教授お願いします。

No.3391 Re:API関数(WINDOWPOS)について  投稿者:ゆう(U) [01/12/10(月)2:10分]

> 自作のメモ帳に座標調整用として(斜めに動かされてもTXTBOXが広がる)

> API関数(WINDOWPOS)を導入したいのですが、
Set付きなら沢山見つかると思いますが・・・

普通は
Private Sub Form_Resize()
With Me
txtin.Move .ScaleLeft, .ScaleTop, _
.ScaleWidth, .ScaleHeight
End With
End Sub
でしょう。

Width、Heightを個別に設定するとカクカクと
変形します。

「With Me」も省略してもOKですが・・・
※.を付けずに ScaleLeft, … ScaleHeight

No.3390 Re:アニメーション  投稿者:ゆう(U) [01/12/10(月)2:01分]

> そこでリフレッシュさせるのですが、

> 背景(640×480)が、ちかちかしてしまいます。
マスク処理など加工用と表示用のピクチャーボックス等を
分けておけばOKでしょう。
※完成した絵だけを表示する

No.3389 Re:簡易メモ帳の読み込み  投稿者:ゆう(U) [01/12/10(月)1:56分]

> 今簡易メモ帳を本を見て作っています。

> 書き込みはできますけど、読み込みができなくて困っています。
> :
> Open openfile For Input As #filen           ここでバグがでます。
どんなバグが出ているのですか?

デバッグの時には・・・
ステートメントに間違いはないか
変数の中身は正しい値か?
実際にテキストファイルがあるのか?
※テスト環境・データに問題は無いのか?
など、地道に確認すると良いです。


参考までに・・・
現在のコードではループで読みこんでいますが
ファイルサイズ分を「InputB 関数」で一気に
読みこんでUnicodeに変換した方が早いです。
※どの道今のコードではフォームが固まります

No.3388 簡易メモ帳の読み込み  投稿者:ノッポさん [01/12/09(日)23:53分]

今簡易メモ帳を本を見て作っています。

書き込みはできるんですけど、読み込みができなくて困っています。
一応コードをコピーしますのでこれをみてわかるかたがいたら
教えていただきたいのですが。
超初心者なのでわかりやすく教えてください。

Private Sub open_Click()

Dim openfile As String '変数の宣言
Dim filen As Integer
Dim data As String
Dim temp As String


If Right(Dir1.Path, 1) = "\" Then
openfile = Dir1.Path & fname.Text
Else
openfile = Dir1.Path & "\" & fname.Text
End If


Form1.Caption = "読み込み中" 'メッセージ表示

filen = FreeFile 'データ読み込み
data = ""
Open openfile For Input As #filen           ここでバグがでます。

Do Until EOF(filen)
Line Input #filen, temp
data = data & temp & vbCrLf
Loop

Close #filen


メモ帳.Text = data 'データの表示

Form1.Caption = "簡易メモ帳" '元に戻す(タイトルバー)

End Sub

宜しくお願いします。

No.3387 RE:API関数(WINDOWPOS)について  投稿者:NAO★ [01/12/09(日)17:51分]

あまりAPI関数は使わないので(使うのはSendMessageぐらい)、

質問自体にはお答えできませんが、分かる範囲で。

WINDOWPOS は API関数ではありません。
API関数で使われるデータ型(構造体)の一つです。
ウィンドウ(FORM)の位置やサイズを示す x, y, cx(width), cy(height) 等のメンバーがあります。

しかし、API関数では次のMoveWindow関数のように x,y を直接指定することが多いので
サンプルが見あたらなかったのだと思います。

Public Declare Function MoveWindow Lib "user32" Alias "MoveWindow" ( _
ByVal hwnd As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal bRepaint As Long) As Long

多分…

No.3386 アニメーション  投稿者:ニックス [01/12/09(日)11:27分]

始めまして。

実は今困っております。
Bitlt関数で絵を表示させ(マスクつき)
移動するアニメーションを行いたいのですが、
軌跡が残ってしまいます。
そこでリフレッシュさせるのですが、
背景(640×480)が、ちかちかしてしまいます。
なにかうまい解決方法があればご教授下され

No.3385 API関数(WINDOWPOS)について  投稿者:AYA [01/12/08(土)13:46分]

自作のメモ帳に座標調整用として(斜めに動かされてもTXTBOXが広がる)

API関数(WINDOWPOS)を導入したいのですが、
いろいろ調べたのですが、用例があまりないようなので、
よろしければ教えて貰えないでしょうか?

普通は
Private Sub Form_Load()
txtin.Text = ""
txtin.Left = Me.ScaleLeft
txtin.Top = Me.ScaleTop
txtin.Width = Me.ScaleWidth
txtin.Height = Me.ScaleHeight
flag = 0
End Sub

Private Sub Form_Resize()
txtin.Width = Me.ScaleWidth
txtin.Height = Me.ScaleHeight
End Sub

ってやればいいのですが、APIも使ってみたいんで、
よろしくお願いします。

No.3384 RE:移動キーの認識  投稿者:NAO★ [01/12/08(土)11:50分]

ヘルプにも書いてありますが、

コマンドボタン、チェックボックス、オプションボタンが1つでもあるフォームでは、
方向キーを認識することができません。

PictureBoxコントロールをボタンの代用として使うのが良いかと思います。

No.3383 移動キーの認識  投稿者:JA [01/12/08(土)6:56分]

フォーム上にコマンドボタンがあるときに、

移動キー(→↓など)を押すと、フォーカスが移動してしまい、
keyupやkeydownで、移動キーを押したことを認識できません。
方法を教えていただけませんでしょうか。


No.3382 RE:re:RE:サンプル教えて下さい  投稿者:靴下カタオ [01/12/08(土)0:15分] http://www.KenAshizuka.com/

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

花ちゃんさんの大作を拝見して、
プロパティの設定の仕方など、
今までに知らなかったことが色々あって、
目から鱗(うろこ)が落ちたような気がします。
早速、このページをダウンロードさせていただきました。

また、「逆引きヘルプ」には、
前から知りたいと思っていた、
Excel へのアクセス法などもあり、
学ぶべきことが多いと思いました。

これから、時間を作って、
このページで勉強したいと思います。
今後もできればよろしくお願いします。

No.3381 RE:RE:ListViewの初期選択(?)解除方を教えてください  投稿者:VB初心者 [01/12/07(金)18:28分]

NAOさんありがとうございました!

No.3380 RE:RE:re:配列に格納されているデータの表示    投稿者:ゆきんこ [01/12/07(金)17:31分]

NAOさんありがとうございます。

これを参考にしてやってみます。
また分からない場合は、質問をすると思いますが、
よろしくお願いします。

No.3379 RE:ListViewの初期選択(?)解除方を教えてください    投稿者:NAO★ [01/12/07(金)17:20分]

先ほどのサンプルがごちゃごちゃしててあまりふさわしくないと思いますので

修正してみました。

Option Explicit

Private Sub Command1_Click()
If ListView1.SelectedItem.Selected = True Then
Debug.Print "選択されています" & ListView1.SelectedItem.Text
Else
Debug.Print "選択されていません"
End If
End Sub

Private Sub Form_Load()
Dim i As Integer
For i = 1 To 10
ListView1.ListItems.Add , , "Item" & Str(i)
Next
'デフォルトの選択を解除する
ListView1.SelectedItem.Selected = False
End Sub


No.3378 RE:re:配列に格納されているデータの表示  投稿者:NAO★ [01/12/07(金)17:00分]

Styleプロパティは0のままにしておいてプログラムで制御してみました


Private EditFlag As Boolean
Private SaveCombo1 As String

Private Sub Combo1_Change()
If EditFlag = False Then
If Combo1.ListIndex = -1 Then
Combo1.Text = SaveCombo1
End If
End If
SaveCombo1 = Combo1.Text
EditFlag = False
End Sub

Private Sub Combo1_Click()
SaveCombo1 = Combo1.Text
End Sub

Private Sub Command1_Click()
EditFlag = True
Combo1.Text = "00:00"
End Sub

No.3377 RE:ListViewの初期選択(?)解除方を教えてください  投稿者:NAO★ [01/12/07(金)16:23分]

SelectedItem プロパティではどうしようもなかったのですが、

次のようにSelcted プロパティで代用すれば回避できそうです。
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To ListView1.ListItems.Count
Debug.Print i, ListView1.ListItems.Item(i).Selected
Next
End Sub

Private Sub Form_Load()
Dim i As Integer
For i = 1 To 10
ListView1.ListItems.Add , , Str(i)
Next
'デフォルトの選択を解除する
ListView1.ListItems.Item(1).Selected = False
End Sub

まあ、この例のように一つ一つ調べなくても
If ListView1.SelectedItem.Selected = False Then
のようにすればいいと思います

No.3376 ListViewの初期選択(?)解除方を教えてください  投稿者:VB初心者 [01/12/07(金)14:29分]

VB初心者です。

VBの用語がよくわかっていないので、質問の内容がわかりづらいかと思うのですが どうぞよろしくお願いします。

早速本題に入ります。
ListViewは初期表示時、デフォルトで一番先頭のデータをセレクトしていると睨んでいるのですが、 (ListView1.SelectedItem.Indexでみたところ結果が"1"となりました) 初期状態でなにも選択していない状態にしたいのです。

どうしたらよいのでしょうか。

No.3375 RE:re:配列に格納されているデータの表示        投稿者:ゆきんこ [01/12/07(金)14:15分]

へーそうなんですか?

初めて知りました。
設定をするものってなにかありますか?
すみません。何もかもを聞いてしまい。

No.3374 RE:re:配列に格納されているデータの表示      投稿者:あき☆彡 [01/12/07(金)14:11分]

>ボタンを押した時にStyleを2→0にしたいと思い、以下のようにしたの

>ですが、駄目でした。
>Private Sub Command1_Click()
>Combo1.Style = 0
>Combo1.Text = "東京"
>End
Styleプロパティ:実行時は取得のみ可能で設定は出来ません(;;)

No.3373 re:配列に格納されているデータの表示    投稿者:ゆきんこ [01/12/07(金)13:27分]

そうですね。Styleを0にすれば出来ました。

ボタンを押した時にStyleを2→0にしたいと思い、以下のようにしたの
ですが、駄目でした。
Private Sub Command1_Click()
Combo1.Style = 0
Combo1.Text = "東京"
End

No.3372 re:配列に格納されているデータの表示  投稿者:NAO★ [01/12/07(金)12:51分]

>配列の中に"東京"や"家事"などの文字列であればリストの中に

>表示されていなくても表示できるのですが、

本当ですか?
試しに次のプログラムを実行してみたけどエラーになりましたけど。

Private Sub Command1_Click()
'Combo1のStyleプロパティを"2 ドロップダウンリスト"にして実行
Combo1.Text = "東京"
End Sub

たぶんStyleプロパティを"0 ドロップダウンコンボ"にするのが一番簡単そうです

No.3371 re:配列に格納されているデータの表示        投稿者:ゆきんこ [01/12/07(金)11:20分]

配列の中に"東京"や"家事"などの文字列であればリストの中に

表示されていなくても表示できるのですが、
"10:00"のように数字は駄目でした。
配列は、String型です。

No.3370 re:配列に格納されているデータの表示      投稿者:りばー [01/12/07(金)10:56分]

おそらくコンボのSTYLEがドロップダウンリストになってるからだと思いますが。

コンボのリスト中に登録されていないデータを表示しようしていませんか?

No.3369 配列に格納されているデータの表示  投稿者:ゆきんこ [01/12/07(金)10:36分]

はじめまして。

配列に格納してある文字列をコンボのテキストに表示したいと思い、
Combo1.Text = NAME(1,i) と入力しましたが、
プロパティは、値のみというエラーが表示されました。
NAME(1,i)には、"9:00" という文字列が入力されています。
どのように修正すべきか分からず悩んでいます。

No.3368 re:ランダムファイル(re:RE:サンプル教えて下さい)  投稿者:NAO★ [01/12/07(金)10:07分]

ここのHPのプログラミング教室の「新住所録作成」の「第1回 ランダムファイルの入出力・表示処掾vが

参考になるかも。
あるいは「逆引きヘルプ」で「ランダムファイル」で検索。(こちらの方がシンプルでいいかも)

No.3367 エクセルコマンドバー  投稿者:あき [01/12/07(金)9:18分]

さっそくですが、VBからエクセルのコマンドバーを削除する事って出来るのでしょうか?

もし出来るのであればその方法を教えていただきたいのですが・・・

No.3366 RE:サンプル教えて下さい  投稿者:靴下カタオ [01/12/06(木)23:43分] http://www.KenAshizuka.com/

NAO★さん、いつもありがとうございます。


(1)については、そのものズバリで、
これでいろんなことがいっぺんにわかりました。

(2)については、以前、

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

Private Sub Command1_Click()
CD.Composer = Text1.Text
CD.Work = Text2.Text
CD.Artist1 = Text3.Text
CD.Artist2 = Text4.Text
Put #1, Val(Text5.Text), CD
End Sub
Private Sub Command2_Click()
Get #1, Val(Text5.Text), CD
ret1 = InStr(CD.Composer, Chr$(0))
If ret1 = 0 Then
ret1 = 40
Else
ret1 = ret1 - 1
End If


ret2 = InStr(CD.Work, Chr$(0))
If ret2 = 0 Then
ret2 = 40
Else
ret2 = ret2 - 1
End If
ret3 = InStr(CD.Artist1, Chr$(0))
If ret3 = 0 Then
ret3 = 40
Else
ret3 = ret3 - 1
End If
ret4 = InStr(CD.Artist2, Chr$(0))
If ret4 = 0 Then
ret4 = 40
Else
ret4 = ret4 - 1
End If
List1.AddItem Left$(CD.Composer, ret1) & Left$(CD.Work, ret2) & _ Left$(CD.Artist1, ret3) & ":" & Left$(CD.Artist2, ret4)
End Sub
Private Sub Command3_Click()
Close #1
End
End Sub
Private Sub Form_Load()
Open "cd.rnd" For Random As #1 Len = Len(CD)
End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

というようなコードを作成したのですが、
これを順アクセスして何らかの処理をするプログラムを作成するにあたって、
参考になるサンプルがあればいいと思ったのです。
Yahoo! Japan でそういうサイトを探したんですが、
どうしても見つかりませんでした。
そういった意味で、サンプルを教えていただければと思ったのです。

どうもありがとうございました。

No.3365 RE:MAPIMessagesで送信してくれない。  投稿者:NAO★ [01/12/06(木)22:27分]

>MAPIMess.Action = vbMessageSend    


ヘルプを見ると Action プロパティは互換性のために残されている古い機能なので
対応するメソッドを使って下さいとありますけど…(VB5.0でも)

またこの vbMessageSend という定数もヘルプには無く、
同じ意味だと思われるのは MESSAGE_SEND になっているようですが、
ご自身で設定されているのですか?
vbMessageSend の指す値が MESSAGE_SEND と違ってるのかもしれませんね。

No.3364 Re:Re:BATファイルの待機関数について    投稿者:匿名 [01/12/06(木)10:41分]

ゆう(U) さん

ご丁寧にありがとうございます。
助かりました。
早速、試してみます。

No.3363 Re:TABキーの設定  投稿者:ゆう(U) [01/12/06(木)10:38分]

> LOST_FOCUSでTABキーが認識されているのでしょうか?

最初の質問が見えないので、何をしたかったのかわかりませんが・・・

以下の方法で「テキストボックスコントロール」では
Tabキーをkey系イベントで取得できるようになります。

注意:
複数でこの処理を行う場合、フォーカス移動時のイベント順に
影響されますので動作確認は十分に行ってください。

当然ですが、Tabキーでは対象のコントロールから移動しません
別途フォーカスを移動する手段を考えてください。

もう一つ、対象のコントロールにフォーカスがある時に
コントロールの増減をすると動作不良になります。

サンプル)
テキストボックスコントロール1個(Text1/TabStop=True)
他コントロール複数(TabStop=True,False混在可)
Private blnTabStopArray() As Boolean
Private Sub Text1_GotFocus()
Call TabStopCancel
End Sub
Private Sub Text1_LostFocus()
Call TabStopSet
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Debug.Print KeyAscii
End Sub

Private Sub TabStopSet()
Dim lngCount As Long
Dim i As Long

lngCount = Me.Controls.Count
On Error Resume Next
For i = 0 To lngCount - 1
If blnTabStopArray(i) Then
Me.Controls(i).TabStop = True
End If
Next
End Sub
Private Sub TabStopCancel()
Dim lngCount As Long
Dim i As Long

lngCount = Me.Controls.Count
ReDim blnTabStopArray(0 To lngCount - 1)

'TabStopを持たないコントロールのエラーを無視
'するための細工です
On Error Resume Next

For i = 0 To lngCount - 1
If Me.Controls(i).TabStop Then
blnTabStopArray(i) = True
Me.Controls(i).TabStop = False
End If
Next
End Sub
●以前にReされている事をしているだけですが、
 何をやっているかは解析して見えてください。

No.3362 ユーザー定義型(RE:サンプル教えて下さい)  投稿者:NAO★ [01/12/06(木)10:27分]

構造体(VBではユーザー定義型)のサンプル

Option Explicit
'Address型を宣言
Private Type Address
名前 As String
郵便番号 As String
都道府県 As String
住所 As String
End Type

Private Sub Form_Load()
Dim Addr(3) As Address 'Address型の変数Addrを3個
'データの代入
Addr(1).名前 = "NAO★"
Addr(1).郵便番号 = "000-9999"
Addr(1).都道府県 = "xxx"
Addr(1).住所 = "●●市●●町A-B-C"
'一括コピー
Addr(2) = Addr(1)

Addr(2).名前 = "NAO★ 弟" '名前だけ変更

'表示
Form1.Show
Dim i As Integer
For i = 1 To 2
Print "No."; Str(i)
Print , "名前:", Addr(i).名前
Print , "郵便番号:", Addr(i).郵便番号
Print , "都道府県:", Addr(i).都道府県
Print , "住所:", Addr(i).住所; vbCrLf
Next
End Sub

2に関してはリレーショナルデータベースのようなインデックスファイルを別に
もつファイルを作りたいって事でしょうか?これについては私はよく分かりません。
どちらにせよ一括でというのは無いような気がしますので、ループを使って
読み書きするようになるでしょう。

No.3361 サンプル教えて下さい  投稿者:靴下カタオ [01/12/05(水)23:13分] http://www.KenAshizuka.com/

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


ある参考書で、Visual Basic の勉強をしていますが、
その中で、自分が欲しいサンプルが見つからず、
ダウンロードしたAPIビューアにもないようなので、
また質問させていただきたいと思います。

次のようなプログラムのサンプルのある
ページ、あるいは参考書等
教えていただけないでしょうか。

(1)その全体が配列になっているような
構造体の定義、及びその構造体を使った処理。

(2)索引付きファイルの一括読み込み、
一括書き込み。

No.3360 Re:BATファイルの待機関数について  投稿者:ゆう(U) [01/12/05(水)20:18分]

> Windows2000では、上手く起動しました。

本当に上手くいっていたのですか?

> しかし!!Windows98上では、コマンドプロンプト(BAT起動時の関連付けされたPG?)の終了が
> いつまで経っても帰ってこないのです。
普通は Environ("ComSpec") も書いた上で
「Shell 関数」を使いますが?
※Debug.? Environ("ComSpec")
 で中身は確認して見て下さい

> sRunFile = "C:\aaa.bat"
sRunFile = Environ("ComSpec") & " /C "
sRunFile = sRunFile & "C:\aaa.bat"
こんな感じ・・・

詳しくはヘルプ参照です。

No.3359 RE:TABキーの設定  投稿者:NAO★ [01/12/05(水)18:56分]

>LOST_FOCUSでTABキーが認識されているのでしょうか?


LostFocus はフォーカスが別のコントロールに移動したときに発生します。
どうやってフォーカスが移動したか、つまりTabキーが押されていどうしたのか
またはマウスで他のコントロールをクリックして移動したのか判別は出来ません。

プー。 さんの今回のご質問ではTabキーだと判断しなくても処理できそうだったので
代案としてLostFocusを使ったサンプルを書きました。

どうしてもTabキーのコードを認識しなくてはイケナイのでしたら
やっぱり、フォーム上のコントロールの、すべてのTabStopプロパティをFalseに設定すれば
いいと思います。が、フォーカスの移動をすべて自分で記述しなくちゃいけないので
面倒ですね。

No.3358 RE:TABキーの設定  投稿者:ぷー。 [01/12/05(水)18:06分]

こんばんは。プーです。

前回、TABキーを押下した際の処理を教えていただきましたが、
「TABキー」を押されたという認識を何度も何度もブレイクポイント
などで行ってみたのですが、よく分からなくて・・・。
LOST_FOCUSでTABキーが認識されているのでしょうか?
遅くなりすみませんが、教えてください。

No.3357 BATファイルの待機関数について  投稿者:匿名 [01/12/05(水)17:58分]

先日、作成したPGでBATファイルをSELLで呼び出し、実行を待機する関数なのですが、

Windows2000では、上手く起動しました。
しかし!!Windows98上では、コマンドプロンプト(BAT起動時の関連付けされたPG?)の 終了がいつまで経っても帰ってこないのです。
下記APIは、98ではサポートされていないのでしょうか?
詳しい方がいらっしゃいましたら、お教えください。


'起動バッチファイルの設定
sRunFile = "C:\aaa.bat"

'バッチファイルの起動
Ret = Shell(sRunFile, vbHide)
Process = OpenProcess(SYNCHRONIZE, 0, iRet) 'プロセスの取得
'起動されたプログラム終了まで待機
Do
'起動バッチの状態を取得
Ret = WaitForSingleObject(Process, 0)
DoEvents
Call Sleep(100) 'CPU使用率100%の防御
Loop While (Ret <> 0)
'プロセスハンドルのクローズ
Ret = CloseHandle(Process)

'正常終了
Exit Function


誰かお助け下さい。
よろしくお願いします。

No.3356 Re:TrueDBGridでコンボボックスの設定    投稿者:いち [01/12/05(水)17:34分]

開発環境:

[OSのVer:Win98]
[VBのVer:VB6]
[TrueDBGridのVer:TrueDBGrid Pro Ver6.0J]

ゆう(U) さん。ありがとうございました。

次にまた判らない事があったら
BOCに確認してみます。

No.3355 Re:TrueDBGridでコンボボックスの設定  投稿者:ゆう(U) [01/12/05(水)14:33分]

●質問時には詳しい開発環境を書いたほうがいいです

 OS、VBのバージョン・エディション・SP、コントロールのバージョン等も

> Colum(1)が"T"だったら、Colum(2)のコンボボックスのリストをDate1,Date2にして
> Colum(1)が"M"だったら、Colum(2)のコンボボックスのリストをDate3,Date4にする。
> :
> 自分は上記のようにやったのですが、上手くいきませんでした。
私の持っていたTrueDBGridは、昔に無償配布でもらった物(Ver.4)
だったので今の事はわかりませんが・・・
予想としては、難しいと思います。

同行の1列目の内容で、2列目のリストを限定したいのですよね?
もし1行目で"T"で"Data1"のとき、2行目で"M"なので"Data3/4"
に変えた場合、"Data1/2"を表示するリストも無くなっトしまうので
表示内容がどうなるかわからないですよね?

2列目のリストは全て表示し、1列目の内容で選択できるものを
限定する・・・もしくは選択されても無効である事を表示すると
いいのではないでしょうか?
※デフォルト値を表示しておき、無効時には色を変えるとか、
 Beep音とセルの移動不可とか、メッセージを表示とか…

詳しいことはBOC(今はグレープシティー?)に確認してみる方が
確実だと思います。

No.3354 TrueDBGridでコンボボックスの設定  投稿者:いち [01/12/05(水)13:36分]

はじめまして。いちと言います。


TrueDBGridで質問させてください。

Colum(1)が"T"だったら、Colum(2)のコンボボックスのリストをDate1,Date2にして
Colum(1)が"M"だったら、Colum(2)のコンボボックスのリストをDate3,Date4にする。

と言う感じで、TrueDBGridのコンボボックスの内容を、各列ごとに変えることは出来るんでしょうか?


If TDBGrid1.Columns(1).text="T"
v.Value = 0
v.DisplayValue = "Date1"
TDBGrid1.Columns(2).ValueItems.Add v
v.Value = 1
v.DisplayValue = "Date2"
TDBGrid1.Columns(2).ValueItems.Add v
Else
v.Value = 2
v.DisplayValue = "Date3"
TDBGrid1.Columns(2).ValueItems.Add v
v.Value = 3
v.DisplayValue = "Date4"
TDBGrid1.Columns(2).ValueItems.Add v
End If

自分は上記のようにやったのですが、上手くいきませんでした。
PGの経験はまだ1ヶ月程度で知識もなく、
教えてくれる人もいない状況で本当に困っています。
わかる方いましたら、教えてください。
どうぞよろしくお願いします。

No.3353 Re:画像を90度回転表示する方法  投稿者:ゆう(U) [01/12/05(水)10:24分]

花ちゃん さん、K.J.K. さん、ありがとう。



いろいろと細かく動作を追っていくとわかったのですが

「GetDIBits後に変数を壊される」・・・
戻り値は0(失敗)ではないからGetDIBitsは何処かへ
正常にコピーしたと思っている、ということは
「受け皿からはみ出した分が変数を壊す」と感じました。

前回はLen(myBMPINFO1.bmiHeader)でサイズを指定している
から問題ないだろう・・・と手抜きをしてbV4やbV5を
省略して異常になったので手抜き部分をなくす方向で
コードを書いてみました。
※エラー処理は手抜きですが、何処の変数が壊されるかは
 不明なので・・・

CIEXYZTRIPLE 構造体…X.Y.Zが関係しそう、しかも構造体なので
Longじゃ変な気がするけど「まぁいっか・・・」じゃぁまずかったですね。


bV4Endpoints(0 To 35) As Byte
この部分を変更して試してみてください。


> 試して見たのですが、Win98用で設定すると画像が壊れてしまいます。
テスト中にですが BITMAPINFO が正しくない状態では画像が崩れて
表示され、次回はGetDIBits(元用)が(0)失敗になりました・・・

> エラーは表示しないのですが?
> Win98 VB5 では、だめなのでしょうか?
私の書いたコードに問題があるのでしょう。

> 条件付きコンパイルを使用しなければ、うまく表示しますが、EXE にすると
> PictureBoxだけが表示し、画像は何も表示しません。
Win95・Win98でも動作してますが、「なし」だと空のピクチャーボックスの
サイズが変更されるだけ、私の環境でも結果は同じです。


SelectObjectでDCとBITMAPを解除する様にしたあとからは
IDEでも変数の内容の不正書き換えが確認できました。
※というより、その時気づいただけかも
※私の場合IDEでは myBMP.bmWidth が異常値になったので

念のため各変数(転記に必要な部分・G/SetDIBitsに関係するTypeも)
ウオッチで変数の内容が変化する点でブレィクして内容を
確認してみてください。

K.J.K. さんの指摘のあった部分を修正しても問題が
解決できない場合は、しばらく時間を下さい。


> また、BITMAPINFOHEADERの定義があれば十分なので、BITMAPINFOの定義は不要です。
RGBQUADの部分がはみ出し、他の変数を壊す事はないのでしょうか?

bmiHeaderのサイズ+RGBQUADのサイズがGetDIBitsで変更されそうな気が、
というより自分で作成するから書き換えられることは無いという事ですか?

> GetDIBitsやSetDIBitsでは、色数を32Bitにして、Long型の配列で扱えば、様々な
> 計算が不要になり高速化もできます。メモリは食いますけど。
ということはCreateDIBitmapでということですね・・・
確かに32Bit固定ならLongの方が楽ですね。

No.3352 Re: 画像を90度回転表示する方法  投稿者:K.J.K. [01/12/04(火)23:24分]

BITMAPV4HEADERやBITMAPV5HEADERを指定する必要はないので、条件付き

コンパイルにする必要はないですよ。
# ちなみに、APIビューアのBITMAPV4HEADERの定義は間違いがあるので、注意が
# 必要です。bV4EndpointsはLong(4Byte)ではありません。36Byteです。

また、BITMAPINFOHEADERの定義があれば十分なので、BITMAPINFOの定義は不要です。
GetDIBitsやSetDIBitsでは、色数を32Bitにして、Long型の配列で扱えば、様々な
計算が不要になり高速化もできます。メモリは食いますけど。


No.3351 Re:画像を90度回転表示する方法  投稿者:花ちゃん [01/12/04(火)22:43分]

ゆう(U)さん ありがとうございます。

試して見たのですが、Win98用で設定すると画像が壊れてしまいます。
エラーは表示しないのですが?
Win98 VB5 では、だめなのでしょうか?
条件付きコンパイルを使用しなければ、うまく表示しますが、EXE にすると
PictureBoxだけが表示し、画像は何も表示しません。
どこか設定が間違っているのでしょうか?
colorも色々試したのですが?



前のログ 次のログ


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