前のログ 次のログ

No.4150 VB5のDBGridを簡単にVB6に移行する方法。  投稿者:momo [02/3/25(月)10:28分]

VB5のDBGridを簡単にVB6に移行する方法を、探しています。

DAOを使いGridにVB6で、書き換えています。
VB5でも、Vb6でも同じコードのプログラムを使用したいのですが、
どのようにしたら、不具合なく同じように動作出来るか、教えてください。


No.4149 RE:ショートカットのリンク先について  投稿者:NAO★ [02/3/24(日)22:27分]

http://tokyo.cool.ne.jp/kanain/APIHTM/GetSC.html


に.lnk ファイルの構造とサンプルモジュールがありますのでご覧ください。

No.4148 エクセルにデータを送りグラフを表示する  投稿者:なつか [02/3/24(日)7:15分]

はじめまして、なつかと申します。初心者です。


本サイトの「エクセルにデータを送りグラフを表示する」を
少しだけいじってみました。

With MyChart.Chart
.SetSourceData xlSheet.Range("A1:B6"), xlColumns
.ChartType = xlPie
  .ApplyDataLabels Type:=xlDataLabelsShowValue, LegendKey:=False
.HasTitle = True
.ChartTitle.Text = "タイトル"
End With

円グラフにして、データラベルを表示しようとがんばってみましたが、うまくいきません。
VB上では、ちゃんと表示されるのですが、VBがインストールしていないPCでは動かないのです。
.ApplyDataLabels の行だけ削除したものは、VBなしのPCでも動きました。

両PCともWindows98、Office97です。VBは、6.0(SP5)です。
よろしくお願いいたします。

No.4147 ショートカットのリンク先について  投稿者:ライズマン [02/3/24(日)2:07分]

こんばんわ、質問があります。よろしくお願いします。


簡易ランチャーを開発しているものですが、ドラッグドロップによる
EXE起動を作成しています。このとき、EXEのショートカットを
ドロップした場合、パスとしては現在のショートカットパスが入ると
思います。この状態で取得したショートカットパスのリンク先を取得
したいのですが、なにか方法はあるのでしょうか?

よろしくお願いします。開発環境はVB6.0です。

No.4146 バッチファイルの起動  投稿者:りゅう [02/3/22(金)21:13分]

VBでバッチファイルを実行するのはどうしたらいいのでしょうか。

あとそれに引数を渡すことはできるのでしょうか?
知っている方がいらしたらぜひ教えていただきたいのですが

No.4145 Re:画像を90度回転表示する方法  投稿者:花ちゃん [02/3/22(金)20:52分]

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

かなり高速に動作しますね、私のトロイ、マシンでも瞬時に回転します。
自作の電子アルバム等に使わせて頂きます。

No.4144 Re:ユーザー定義型の比較  投稿者:ゆう(U) [02/3/22(金)19:41分]

何を聞きたいか分かりませんが・・・


文字列変数の中身はバイナリデータです。
確実にバイナリで比較するためにStrCompで
vbBinaryCompare指定で比較してます。

No.4143 Re:画像を90度回転表示する方法  投稿者:ゆう(U) [02/3/22(金)19:34分]

すっかり昔の話になりますが・・・


画像90度回転のGetDIits/SetDIBitsが出来ましたので
載せてみます。

前回のコードは全て忘れて、新規に作り直しました。


K.J.K. さんのアドバイスを参考に、32bits/pixelで扱う事で
Long型配列を使い転記の作業効率を上げています。
※ちょとメモリは余計に食いますが・・・
 bits/pixelを考慮する必要がなくなった為シンプルな
 コードになりました。

CreateDIBitmapでは画面の解像度以上のビットマップを作成
出来なかったので、CraeteDIBSectionを使用しました。

ピクチャーボックスのPictureプロパティは変更されませんが、
Imageプロパティは繰り返す事で正方形になります。
※SavePicture等で注意が必要です

詳しい理由はわかりませんが、SetDIBits前にGetDIBitsが
必要です。
※空のビットマップという事が関係しているのでしょう?

IDE/EXEで動作確認しました。
WinXP(Home)/VB6.0(SP5)
Win2000(SP2)/VB6.0(SP5)
Win98/VB6.0(SP5)(SP4)
Win95/VB5.0(SP3)

サンプル)
[標準モジュールへ]
Option Explicit
Private Declare Function CreateCompatibleDC Lib "gdi32" _
(ByVal hDC As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" _
(ByVal hDC As Long) As Long
Private Declare Function CreateDIBSection Lib "gdi32" _
(ByVal hDC As Long, _
ByRef pBitmapInfo As BITMAPINFO, _
ByVal un As Long, _
ByRef lplpVoid As Long, _
ByVal handle As Long, _
ByVal dw As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" _
(ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" _
(ByVal hDC As Long, _
ByVal hObject As Long) As Long
Private Declare Function BitBlt Lib "gdi32" _
(ByVal hDestDC As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal dwRop As Long) As Long
Private Declare Function GetDIBits Lib "gdi32" _
(ByVal aHDC As Long, _
ByVal hBitmap As Long, _
ByVal nStartScan As Long, _
ByVal nNumScans As Long, _
ByRef lpBits As Any, _
ByRef lpBI As BITMAPINFO, _
ByVal wUsage As Long) As Long
Private Declare Function SetDIBits Lib "gdi32" _
(ByVal hDC As Long, _
ByVal hBitmap As Long, _
ByVal nStartScan As Long, _
ByVal nNumScans As Long, _
ByRef lpBits As Any, _
ByRef lpBI As BITMAPINFO, _
ByVal wUsage As Long) As Long
Private Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type RGBQUAD
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors As RGBQUAD
End Type

'ピクチャーボックスを90度回転させます
Public Sub PicRot90(ByRef myPicture As PictureBox, _
Optional ByVal Center As Boolean = False)
Const SRCCOPY = &HCC0020
Const DIB_RGB_COLORS = 0&
Const BI_RGB = 0&
Dim myContainer As Object
Dim intScaleMode As Integer
Dim sngScaleWidth As Single, sngScaleHeight As Single
Dim sngScaleLeft As Single, sngScaleTop As Single
Dim lngWidth As Long, lngHeight As Long
Dim XX As Long, YY As Long
Dim hDC_Temp As Long
Dim hDC_Object As Long
Dim hBitmap As Long
Dim ppvBits As Long
Dim myBMPINFO As BITMAPINFO
Dim myBMPINFO1 As BITMAPINFO
Dim myBMPINFO2 As BITMAPINFO
Dim lngArray() As Long
Dim lngArray2() As Long
Dim blnAutoRedraw As Boolean
Dim blnVisible As Boolean
Dim lngResult As Long

With myPicture
'継続表示属性でなかった絵は消えます
blnAutoRedraw = .AutoRedraw
.AutoRedraw = True

'表示画像サイズ取得
lngWidth = .ScaleX(.ScaleWidth, .ScaleMode, vbPixels)
lngHeight = .ScaleY(.ScaleHeight, .ScaleMode, vbPixels)

'作業用hDC取得
hDC_Temp = CreateCompatibleDC(.hDC)
'作業用hBitmap作成
With myBMPINFO
With .bmiHeader
.biSize = LenB(myBMPINFO.bmiHeader)
.biWidth = lngWidth
.biHeight = lngHeight
.biPlanes = 1
.biBitCount = 32
.biCompression = BI_RGB
End With
End With
hBitmap = CreateDIBSection(hDC_Temp, myBMPINFO, DIB_RGB_COLORS, ppvBits, 0, 0)

'画像コピー(現在のコントロールサイズ分)
hDC_Object = SelectObject(hDC_Temp, hBitmap)
lngResult = BitBlt(hDC_Temp, 0, 0, lngWidth, lngHeight, .hDC, 0, 0, SRCCOPY)
Call SelectObject(hDC_Temp, hDC_Object)

'元画像用の配列を確保
ReDim lngArray(0 To lngWidth - 1, 0 To lngHeight - 1)

'画像コピーから色配列取得
myBMPINFO1.bmiHeader.biSize = Len(myBMPINFO1.bmiHeader)
lngResult = GetDIBits(hDC_Temp, hBitmap, 0, lngHeight, ByVal 0&, _ myBMPINFO1, DIB_RGB_COLORS)
lngResult = GetDIBits(hDC_Temp, hBitmap, 0, lngHeight, lngArray(0, 0), _ myBMPINFO1, DIB_RGB_COLORS)
'作業用hBitMapを削除
Call DeleteObject(hBitmap)

'加工用の配列を確保
ReDim lngArray2(0 To lngHeight - 1, 0 To lngWidth - 1)

'色配列を加工(時計回りに90度)
For YY = 0 To lngHeight - 1: For XX = 0 To lngWidth - 1
lngArray2(YY, (lngWidth - 1) - XX) = lngArray(XX, YY)
Next: Next

'加工後のhBitmap作成
With myBMPINFO
With .bmiHeader
.biSize = LenB(myBMPINFO.bmiHeader)
.biWidth = lngHeight
.biHeight = lngWidth
.biPlanes = 1
.biBitCount = 32
.biCompression = BI_RGB
End With
End With
hBitmap = CreateDIBSection(hDC_Temp, myBMPINFO, DIB_RGB_COLORS, ppvBits, 0, 0)

'色配列をBitmapへ
myBMPINFO2.bmiHeader.biSize = Len(myBMPINFO2.bmiHeader)
lngResult = GetDIBits(hDC_Temp, hBitmap, 0, lngWidth, ByVal 0&, myBMPINFO2, DIB_RGB_COLORS)
'GetDIBits後でなければSetDIBitsに失敗するので
lngResult = GetDIBits(hDC_Temp, hBitmap, 0, lngWidth, lngArray(0, 0), _ myBMPINFO2, DIB_RGB_COLORS)
Erase lngArray '不要
lngResult = SetDIBits(hDC_Temp, hBitmap, 0, lngWidth, lngArray2(0, 0), _ myBMPINFO2, DIB_RGB_COLORS)
Erase lngArray2 '不要

'コンテナー移動が発生するのを隠すのが主な目的
blnVisible = .Visible
.Visible = False

'コンテナーをフォームに(コントロール位置・サイズ変更計算簡略化の為)
Set myContainer = .Container
Set .Container = .Parent

'フォームのScaleを保存
With .Parent
intScaleMode = .ScaleMode
If .ScaleMode = vbUser Then
sngScaleLeft = .ScaleLeft
sngScaleTop = .ScaleTop
sngScaleWidth = .ScaleWidth
sngScaleHeight = .ScaleHeight
End If
.ScaleMode = vbPixels
End With

'コントロール位置・サイズを調整
If Center Then
.Move .Left + (.Width - .Height) / 2, _
.Top + (.Height - .Width) / 2, _
.Height, .Width
Else
.Move .Left, .Top, .Height, .Width
End If

'ピクチャーボックスへ転記
hDC_Object = SelectObject(hDC_Temp, hBitmap)
lngResult = BitBlt(.hDC, 0, 0, lngHeight, lngWidth, hDC_Temp, 0, 0, SRCCOPY)
Call SelectObject(hDC_Temp, hDC_Object)

'不要になったハンドルを削除
Call DeleteObject(hBitmap)
Call DeleteDC(hDC_Temp)

'元の状態へ戻す
With .Parent
If intScaleMode = vbUser Then
.ScaleLeft = sngScaleLeft
.ScaleTop = sngScaleTop
.ScaleWidth = sngScaleWidth
.ScaleHeight = sngScaleHeight
Else
.ScaleMode = intScaleMode
End If
End With
Set .Container = myContainer
.Visible = blnVisible
.AutoRedraw = blnAutoRedraw
End With
End Sub

No.4142 Re:MsgBox  投稿者:ゆう(U) [02/3/22(金)19:30分]

> あのメッセージボックスの色を変更したいのですが,何かいい方法ありますか?

> API関数を使って上手く変更できませんか?
自作した方が簡単です。

古市さんの所にサンプルがあります
http://www.netlaputa.ne.jp/~stadt/vb/index.html

No.4141 MsgBox  投稿者:chi [02/3/22(金)18:58分]

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

あのメッセージボックスの色を変更したいのですが,何かいい方法ありますか?
API関数を使って上手く変更できませんか?

No.4140 Re:ユーザー定義型の比較   投稿者:しらい [02/3/22(金)16:57分]

いつもみなさんありがとうございます。

やはり、一筋縄ではいかないようで...
2パターンで模索します。ありがとうございました。
ちなみにみなさんStrComp(strTemp1, strTemp2, vbBinaryCompare)での文字列
比較されていますが、単純にstr1=str2では判断できない時もあるのでしようか。
また、テキストモードでなく、バイナリモードでするのはなぜでしょうか(えせプログラマなので
初歩的な質問でごめんなさい。)

No.4139 Re:スプリッターについて  投稿者:よねKEN [02/3/22(金)12:47分]

新規プロジェクトを立ち上げ、アプリケーションウィザードを選びまます。

順にどんなアプリを作るか聞いてきますので、エクスプローラー風を選びます。
そうやってできたアプリケーションの雛型ソースにスプリッターを実現しているコードがありますので、
それを参考にするとよいと思います。

No.4138 スプリッターについて・・・  投稿者:china [02/3/22(金)12:00分]

VBでスプリッター機能を実現するにはどのようにすればよいですか?

今、テキストボックスを2つ並べて、その間にPictureBoxを配置し、 ピクチャーボックスの位置に合わせてテキストボックスの位置や幅を 変更するという考え方を聞いたのですが、イメージがよく湧きません。 また、このときにアイコンが変化するように(よくフォームの大きさを 変更したりするときにでてくる黒い両矢印)するにはどうすればよいですか?

No.4137 データレポートの日付について  投稿者:ゴンタ [02/3/22(金)11:15分]

はじめまして。データレポートの日付についてなんですが、

ヘッダーの部分に2002/03/22と表示したいのですが、
02/03/22としか表示できません。
何方か、表示する方法をご存知でしたら、
教えてください。お願いします。

No.4136 Re:ユーザー定義型の比較  投稿者:NAO★ [02/3/20(水)23:10分]

>大きめに確保したユーザー定義型の残りの部分にゴミが入る

>可能性はありませんか?
>※同サイズにした方が良いと思います

言われてみれば確かにそうですね。

No.4135 Re:ユーザー定義型の比較  投稿者:ゆう(U) [02/3/20(水)18:23分]

「LSet ステートメント」ヘルプより

あるユーザー定義型から別のユーザー定義型に変数をコピーすると、
その領域の要素に対して指定されているデータ型に関係なく、一方の
変数のバイナリ データだけが他方のメモリ領域にコピーされます。

大きめに確保したユーザー定義型の残りの部分にゴミが入る
可能性はありませんか?
※同サイズにした方が良いと思います

改良コード)
Private Function StructComp2(a1 As Testdat, a2 As Testdat) As Boolean
Dim Struct1 As CompWk
Dim Struct2 As CompWk
Dim strTemp1 As String
Dim strTemp2 As String
Dim i As Long

'ユーザー定義型(Testdat型)を別のユーザー定義型(CompWk型)にコピーする
LSet Struct1 = a1
LSet Struct2 = a2

'有効部分を文字列型へ転記する
'サイズが同じならLeftB、LenBは不要になります
strTemp1 = LeftB$(Struct1.data, LenB(a1))
strTemp2 = LeftB$(Struct2.data, LenB(a2))

'比較
If StrComp(strTemp1, strTemp2, vbBinaryCompare) = 0 Then
'一致
StructComp2 = True
Else
'不一致
StructComp2 = False
End If
End Function


可変長文字列の事もあるので、私は比較用のプロシージャを
作成してしまう事をお薦めします。

サンプル)
Private Type myType
Item1 As Long
Item2 As String
Item3 As String * 5
End Type
Prvate Function myTypeComp(ByRef Type1 as myType, _
ByRef Type2 As myType) As Boolean
myTypeComp = False
If Type1.Item1 <> Type2.Item1 Then Exit Function
If StrComp(Type1.Item2, Type2.Item2, vbBinaryCompare) <> 0 Then Exit Function
If StrComp(Type1.Item3, Type2.Item3, vbBinaryCompare) <> 0 Then Exit Function
myTypeComp = True
End Function

No.4134 Re: データの検索  投稿者:うに [02/3/20(水)16:57分]

テーブルも出来ているなら、何が分からないのか

いまいち理解できないのですが。

> 商品コードを入力すると、その該当する商品の各情報を画面上に表示したいのですが
> どのようにしたらいいのでしょうか?(1レコード分を表示)

下の(※)のようにすればいいのではないですか?

> また、別ウィンドウで検索画面を作成したのですがリンクできません。
> どのようにすればいいのでしょうか?

データ表示用フォームを Form1 とすると、
下の(※)の部分が
Form1.Text2.Text = rs![Name] のように、
表示するコントロールの前に、フォーム名を付けるだけだと思いますが...

ちなみに、下は Create, Select, Insert, Update, Delete のサンプルです。
Command1 〜 Command4 と Text1, Text2 をフォーム上に配置して、
『 Microsoft DAO ... 』を参照設定して、
そのプロジェクトを保存した上で、実行してみて下さい。

# 本当は、こんなサンプルを提供すると、
# 不快に思う方もいるかもしれませんが、お許し下さい。

*******************************************************************
Option Explicit
Private db As DAO.Database
Private rs As DAO.Recordset
Private sSQL As String

Private Sub Command1_Click()
'* 入力した商品IDで検索し、商品名を表示
sSQL = ""
sSQL = sSQL & " select * from [TableProduct]"
sSQL = sSQL & " where [ID] = '" & Text1.Text & "'"
Set rs = db.OpenRecordset(sSQL)
If rs.EOF = True Then
MsgBox "該当する情報が存在しません。"
Else
Text2.Text = rs![Name] '* <-----------------(※)
End If
rs.Close: Set rs = Nothing
End Sub

Private Sub Command2_Click()
'* 入力した商品IDの商品名を更新
sSQL = ""
sSQL = sSQL & " update [TableProduct]"
sSQL = sSQL & " set [NAME] = '" & Text2.Text & "'"
sSQL = sSQL & " where [ID] = '" & Text1.Text & "'"
db.Execute sSQL
End Sub

Private Sub Command3_Click()
'* 入力した商品ID、商品名を追加
sSQL = ""
sSQL = sSQL & " insert into [TableProduct]"
sSQL = sSQL & " (ID, NAME)"
sSQL = sSQL & " values"
sSQL = sSQL & " ('" & Text1.Text & "','" & Text2.Text & "')"
db.Execute sSQL
End Sub

Private Sub Command4_Click()
'* 入力した商品IDのレコードを削除
sSQL = ""
sSQL = sSQL & " delete from [TableProduct]"
sSQL = sSQL & " where [ID] = '" & Text1.Text & "'"
db.Execute sSQL
End Sub

Private Sub Form_Load()
Dim dbPath As String
Command1.Caption = "検索"
Command2.Caption = "更新"
Command3.Caption = "追加"
Command4.Caption = "削除"

dbPath = App.Path & "\data.mdb"
If Dir(dbPath) = "" Then
'* データベースが存在しない場合には、データベースとテーブルの作成
Set db = DBEngine.Workspaces(0).CreateDatabase(dbPath, dbLangJapanese, dbVersion30)
sSQL = ""
sSQL = sSQL & " create table [TableProduct]"
sSQL = sSQL & " ("
sSQL = sSQL & " [ID] Text(5) not null,"
sSQL = sSQL & " [NAME] Text(20) not null"
sSQL = sSQL & " )"
db.Execute sSQL
Else
Set db = DBEngine.Workspaces(0).OpenDatabase(dbPath)
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
db.Close: Set db = Nothing
End Sub

No.4133 Re: データの検索  投稿者:山 [02/3/20(水)16:40分]

> Access のファイル(商品の情報の入ったテーブル)は、

> 既に作成されているのですか?
>
> その Access ファイルも、
> VB でゼロから作成するのですか?

Accessにテーブルは作成しました。
入力したデータは書き込まれております。(商品コード、仕入日など)
一部のテキストボックスとオプションボタンは画面上に表示されませんが・・・
(Access上はデータ入ってます)



No.4132 RE:ユーザー定義型の比較   投稿者:NAO★ [02/3/20(水)16:28分]

すみません。再修正です。

IntegerやLongが使えると分かったので
比較用のユーザー定義型を固定長文字列からByte配列に変更しました。

Option Explicit

Private Type Testdat
aaa1 As Integer
aaa2 As Date
aaa3 As String * 20
aaa4(5) As String * 5 '配列でも大丈夫
aaa5(5) As Byte
aaa6 As Boolean
aaa7 As Long
aaa8 As Single
'Err1 as String ←可変長なのでエラー
'Err2 as Variant ←バリアント型はエラー
'Err3 as Object ←オブジェクト型はエラー
End Type

'比較用ユーザー定義型
Private Type CompWk
data(256) As Byte '大きめに確保しておく
End Type

Private hoge(3) As Testdat

Private Function StructComp(a1 As Testdat, a2 As Testdat) As Boolean
Dim Struct1 As CompWk
Dim Struct2 As CompWk
Dim i As Long
'ユーザー定義型(Testdat型)を別のユーザー定義型(CompWk型)にコピーする
LSet Struct1 = a1
LSet Struct2 = a2

'バイト毎に比較
For i = 0 To Len(Struct1) - 1
If Struct1.data(i) <> Struct2.data(i) Then
'不一致
StructComp = False
Exit Function
End If
Next
'一致
StructComp = True
End Function

Private Sub Command1_Click()
Dim i As Integer
For i = 1 To 2
If StructComp(hoge(0), hoge(i)) = True Then
Debug.Print "テスト" & i & ":hoge(0) = hoge(" & CStr(i) & ")"
Else
Debug.Print "テスト" & i & ":hoge(0) <> hoge(" & CStr(i) & ")"
End If
Next
End Sub

Private Sub Form_Load()
Dim i As Integer
hoge(0).aaa1 = 123
hoge(0).aaa2 = CDate("2001/03/20")
hoge(0).aaa3 = "TEST"
hoge(0).aaa8 = 123.45
hoge(1) = hoge(0)
hoge(2) = hoge(0)
hoge(2).aaa8 = 234.56
End Sub


No.4131 Re: データの検索  投稿者:うに [02/3/20(水)16:25分]

Access のファイル(商品の情報の入ったテーブル)は、

既に作成されているのですか?

その Access ファイルも、
VB でゼロから作成するのですか?

No.4130 Re: データの検索  投稿者:山 [02/3/20(水)16:12分]

>> 商品コードを入力すると、その該当する商品の各情報を画面上に表示したいのですが

>> どのようにしたらいいのでしょうか?(1レコード分を表示)
>> また、別ウィンドウで検索画面を作成したのですがリンクできません。
>> どのようにすればいいのでしょうか?

> 困り人さん、
> Access で実現するか、テキストファイルで実現するか
> 決めましたか?
> それを決めてからでないと、なんとも言えません

Accessです。

No.4129 RE:ユーザー定義型の比較  投稿者:NAO★ [02/3/20(水)15:54分]

すみません、一部ウソを書いていました。

LSetでコピーできないのは
(可変長)文字列、オブジェクト、またはバリアント型を含むユーザー定義型なので、
IntegerやDateなどが含まれていても大丈夫です。(配列もOK)
先ほどのサンプルのユーザー定義型を次のようにしてもうまく比較できます。

Private Type Testdat
aaa1 As Integer
aaa2 As Date
aaa3 As String * 20
aaa4(5) As String * 5
aaa5(5) As Byte
aaa6 As Boolean
aaa7 As Long
aaa8 As Single
'Err1 as String ←可変長なのでエラー
'Err2 as Variant ←バリアント型はエラー
'Err3 as Object ←オブジェクト型はエラー
End Type

思いつきにしては以外に使えるかも・・・・

No.4128 Active Desctop の操作  投稿者:くう [02/3/20(水)15:22分]

壁紙変更のアプリを作っているのですが、「Active Desctop」が「ON」の状態だと正常に動きません。

レジストリを操作して「OFF」にしようと考えているのですが、どこにあるのか、いくら探してもそれらしき
場所がみつからないんです。場所、知っている方、いらっしゃいますか?


また、OSのバージョンによって、レジストリ内の個々の設定場所は変わるものなのでしょうか?

No.4127 Re: データの検索  投稿者:うに [02/3/20(水)15:10分]

> 商品コードを入力すると、その該当する商品の各情報を画面上に表示したいのですが

> どのようにしたらいいのでしょうか?(1レコード分を表示)
> また、別ウィンドウで検索画面を作成したのですがリンクできません。
> どのようにすればいいのでしょうか?

困り人さん、
Access で実現するか、テキストファイルで実現するか
決めましたか?
それを決めてからでないと、なんとも言えません。

No.4126 RE:ユーザー定義型の比較  投稿者:NAO★ [02/3/20(水)14:36分]

特殊な条件下でなら、LSet を使うことで

項目が一つしかないユーザー定義型に代入して
比較することも可能ですが、
いろんな型の変数を使ったユーザー定義型だと
LSetでエラーになってしまうでしょう。

メモリ効率は悪いですが、全ての項目をサイズ固定の文字列型に
して、数字とか日付を文字列に変換して格納しておけば
次のように比較関数を作ることができます

Option Explicit

Private Type Testdat
aaa1 As String * 3 'サイズ固定の文字列型
aaa2 As String * 10
aaa3 As String * 7
End Type

'比較用ユーザー定義型
Private Type CompWk
data As String * 100 '大きめに確保しておく
End Type

Private hoge(3) As Testdat

Private Function StructComp(a1 As Testdat, a2 As Testdat) As Boolean
Dim Struct1 As CompWk
Dim Struct2 As CompWk
'ユーザー定義型(Testdat型)を別のユーザー定義型(CompWk型)にコピーする
LSet Struct1 = a1
LSet Struct2 = a2

If Struct1.data = Struct2.data Then
StructComp = True
Else
StructComp = False
End If
End Function
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To 2
If StructComp(hoge(0), hoge(i)) = True Then
Debug.Print "テスト" & i & ":hoge(0) = hoge(" & CStr(i) & ")"
Else
Debug.Print "テスト" & i & ":hoge(0) <> hoge(" & CStr(i) & ")"
End If
Next
End Sub

Private Sub Form_Load()
hoge(0).aaa1 = "123"
hoge(0).aaa2 = "2001/03/20"
hoge(0).aaa3 = "TEST"
hoge(1) = hoge(0)
hoge(2) = hoge(0)
hoge(2).aaa3 = "違うデータ"
End Sub

No.4125 ユーザー定義型の比較  投稿者:しらい [02/3/20(水)11:56分]

こんにちは

さて、ユーザー定義型での単純比較はできないのでしょうか(代入はできるのに)

public type aaa
a1 as long
a2 as date
.
.
.
end type

dim before_a as aaa
dim after_a as aaa

if before_a = after_a then msgbox "ok" ここで型が違うといわれてしまう

やっぱしひとつひとつチェックしていかないとだめですか?..


No.4124 データの検索  投稿者:山 [02/3/20(水)11:53分]

商品コードを入力すると、その該当する商品の各情報を画面上に表示したいのですが

どのようにしたらいいのでしょうか?(1レコード分を表示)
また、別ウィンドウで検索画面を作成したのですがリンクできません。
どのようにすればいいのでしょうか?

No.4123 Re:FileListBox  投稿者:ゆう(U) [02/3/19(火)17:28分]

> すみませんがFileListBoxのリスト表示をクリアする方法を教えてください。


そのフォルダーのファイルを全て削除する・・・
ファイルの存在しないフォルダーを表示させる・・・
絶対存在しないパターンを指定する・・・

などでは?

No.4122 RE:FileListBox    投稿者:VB 初心者 [02/3/19(火)17:09分]

ありがとうございます。”.path” & ”.pattern ”を変更したらできるのですが、

できれば、それ以外のクリア方法があれば、すみませんが教えてください。

No.4121 RE:FileListBox  投稿者:花ちゃん [02/3/19(火)16:57分]

他にいい方法があるかも知れませんが表示させないだけなら

拡張子かファイル名を無いようなものを指定すれば何も表示されません。

File1.Pattern = "*.12345"

No.4120 RE:レコードの保存・削除について  投稿者:NAO★ [02/3/19(火)16:01分]

> テキストファイルのレコードは固定長(ランダムアクセス)形式になっていますか?


なってないです。

やっぱりそうですか。
ファイル形式はシーケンシャル形式のままで簡単に済ませるなら、
すべて配列で処理して、
プログラムの終了時に、全レコードを保存するという手もあります
メモリは食いますが、検索などのスピードは速いです。

ランダムアクセスについてはいろんなところで解説されているので
検索をかけてもらうといいですが
「ゼロから Visual Basic 講座 バックナンバー」さん
http://www.text2music.com/mine/vb/vb_log.htm
の28.txt〜29.txtあたりが参考になるかも

No.4119 FileListBox  投稿者:VB 初心者 [02/3/19(火)15:29分]

すみませんがFileListBoxのリスト表示をクリアする方法を教えてください。

お願します。

No.4118 RE:レコードの保存・削除について  投稿者:ABC [02/3/19(火)13:16分]

> テキストファイルのレコードは固定長(ランダムアクセス)形式になっていますか?


なってないです。

> たとえば
> Type 顧客
  Dim ID As String * 5
Dim Name As String * 20  ← どこで宣言するんですか?
:
:
> End Type
> みたいな感じだとすると、
> 削除の時は ID を空白で埋めておいて、読み込むときはID 部分が空白だったら
> 無視するようにしておけばいいのでは。
>
> 更新の時はレコードの位置を求めてその部分だけ Put で上書きすればいいです。
>
> その他詳しくはランダムアクセスについて検索してみると良いでしょう

すいません、上記の読み込み・更新・削除に関してもう少し説明いただけますか?
サンプルとかあると嬉しいです。

No.4117 RE:レコードの保存・削除について  投稿者:NAO★ [02/3/19(火)12:46分]

テキストファイルのレコードは固定長(ランダムアクセス)形式になっていますか?

そうでなければ、固定長に変えた方が処理が楽でしょう。

たとえば
Type 顧客
Dim ID As String * 5
Dim Name As String * 20
:
:
End Type
みたいな感じだとすると、
削除の時は ID を空白で埋めておいて、読み込むときはID 部分が空白だったら
無視するようにしておけばいいのでは。

更新の時はレコードの位置を求めてその部分だけ Put で上書きすればいいです。

その他詳しくはランダムアクセスについて検索してみると良いでしょう

No.4116 RE:MSCHARTのグラフ再描画について教えてください  投稿者:SHINO [02/3/19(火)11:08分]

>一度左のフレームのMSChart関係を見て下さい。


hide でフォームを消していたのが問題でした。
unload form でフォームを消すと
データが消去され再描画できる様になりました。

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

No.4115 RE:レコードの保存・削除について  投稿者:ABC [02/3/19(火)10:18分]

すいません。環境:VB6.0 Windows2000


顧客マスタファイルに保存(更新)・削除ができないので、どうか宜しくお願い致します。
ID5桁を入力→各情報を入力→保存ボタンにて保存(1レコード作成)
  ・
  ・
ID5桁を入力→各情報を入力→保存ボタンにて保存(nレコード作成)

プログラム立ち上げ時、全ての項目は空白→ID5桁を入力するとその他の各情報が リンクされ画面に表示される。
また、検索ボタンで別画面を表示させ、IDを入力すると該当IDの方の情報が表示される。
削除はボタンを押すと現在入力中(IDで検索後)のレコード(1人分)が削除したいです。
テキストファイルでは難しいでしょうか?

分かりづらい仕様で申し訳ございません。

No.4114 RE:MSWord2000(教えてください)  投稿者:Lantern [02/3/18(月)22:29分]

それは、BVというよりWORDのインストールに失敗してるのだと思いますよ。

オブジェクトの不正は、プログラムがWORDのレジストリを読みにいった際に、
オブジェクトのバージョンが一致していないことが原因になるみたいですので。
インストール時にレジストリ書き込みに失敗してるのだと思います。

No.4113 教えていただきたいのですが  投稿者:ショウゴ [02/3/18(月)21:42分]

初めてメールするものですが

根本的な質問であればすみません.
MSWord2000をインストールしたところ
Wordファイル(Wordを使おうとしたら)起動時に
「実行時エラー’424’
 オブジェクトが必要です。」
というメッセージが出て,Wordが始まってしまいました.
BVについてはまったく知らない人間なのですが
どのようにすれば,このようなエラーメッセージを出ないようにできるでしょうか?
MSWordのヘルプを参照してもよくわかりません.
すみませんがよろしくお願いします.

No.4112 教えていただきたいのですが  投稿者:ショウゴ [02/3/18(月)21:37分]

初めてメールするものですが

根本的な質問であればすみません.
MSWord2000をインストールしたところ
Wordファイル(Wordを使おうとしたら)起動時に
「実行時エラー’424’
 オブジェクトが必要です。」
というメッセージが出て,Wordが始まってしまいました.
BVについてはまったく知らない人間なのですが
どのようにすれば,このようなエラーメッセージを出ないようにできるでしょうか?
MSWordのヘルプを参照してもよくわかりません.
すみませんがよろしくお願いします.

No.4111 RE:レコードの保存・削除について  投稿者:花ちゃん [02/3/18(月)20:00分]

もう少し、具体的に書いて頂かないとどなたも回答できないと思いますよ

レコードといっても何のレコード(何で作った)かも解らないし、場合によっては
環境等も書かれないと適切な回答が得られないかも知れません。
逆に自分が質問された場合答えられるでしょうか?
ここは通常VISUAL BASIC関係のQ&Aなのですが、それ以外の言語等でしたら
その旨も記入願います。

No.4110 RE:MSCHARTのグラフ再描画について教えてください  投稿者:花ちゃん [02/3/18(月)19:44分]

一度左のフレームのMSChart関係を見て下さい。


No.4109 MSCHARTのグラフ再描画について教えてください。  投稿者:SHINO [02/3/18(月)19:08分]

こんばんは

現在、MSChartでグラフなどを書いております。
先日は皆様に、いろいろ教えていただきありがとうございました。
なんとか、すこしですが思うようにグラフを書けるようになりました。

そこで、また質問なんですが、
チャートにデータを読み込ませてグラフを書き、
それを一度消して(hide)、他のグラフを表示させようとして
また同じフォームのチャートに違うデータを読み込ませ他のですが、
前のデータが残っていて、上書きもされずに前のデータが描かれたままです。

このような場合はどう対処したらよろしいのでしょうか?
REFLESHやREPAINTなどを使ってみましたが、上手くいきません。

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

No.4108 レコードの保存・削除について  投稿者:ABC [02/3/18(月)14:31分]

画面上に色々なテキストボックス(データ)があり、それを更新ボタンを押すとマスタにデータを保存し、

削除ボタンを押すと書き込み中の1レコードを削除したいのですがどうしたら良いですか?
また、入力されたコードにて検索したいのですがどうしたら良いですか?

No.4107 RE:F10キーの使い方  投稿者:NAO★ [02/3/18(月)13:18分]

Enterを押したときはダメですが、

コントロールにSetFocusすれば移動や文字入力はできる気がします。

あと、わたしはやったことありませんが、API関数でキー入力をフック(横取り?)する
ことで可能な様です。

API キー入力 フック VB

とGoogleで検索するといろいろ出てきます
危険らしいのでお勧めはしませんが。

No.4106 Re:GetCurrentImageについて  投稿者:ねむら [02/3/18(月)11:15分]

わかりました。K.J.K.さんありがとうございます。

こんな未熟者の私が言うのも失礼かもしれませんが、
いつも回答を下さる方々のレベルの高さに
驚嘆と感動の連続です。
これからもよろしくお願い致します。

No.4105 Re:GetCurrentImageについて  投稿者:K.J.K. [02/3/18(月)10:45分]

QuartzTypeLibのを修正するのではなく、新たなタイプライブラリ

を作って、使っています。KTLDShw2.tlbというファイルがそれです。
タイプライブラリは、デザイン・コンパイル時には必要ですが、
コンパイル後は不要ですので、EXEなどとともに配布する必要はありません。

No.4104 Re:GetCurrentImageについて  投稿者:ねむら [02/3/18(月)10:16分]

K.J.K.さん、ありがとうございます。

早速、サンプルをダウンロードさせて頂きました。
頑張ってもう一度やってみます。

ところで、どうやってQuartzTypeLibの中を見るのか、また、

[out] long *pDIBImage );
       ↓
[in, out] void *pDIBImage );

のように修正すれば良いのかわからないのですが・・・
QuartzTypeLibは自分で修正できる物なのですか?
K.J.K.さんのサンプルが実行できれば
修正されているライブラリと考えてよろしいのでしょうか?
とりあえずはK.J.K.さんが書いてくださったサンプルは
実行できるみたいなのでコードを読んでいきたいと思います。

いつもご迷惑をおかけして申し訳ありませんが、
どうぞよろしくお願い致します。

No.4103 RE:RE:F10キーの使い方  投稿者:VB初心者 [02/3/18(月)0:29分]

>[F10]キーはプログラムのメニューバーをアクティブにします。


なるほど、そのせいであのようなメニューが出るのですね
それで、そのショートカットを無効にすることって出来ないんでしょうか?

windowsの方で登録されているショートカットだから無理なのかなぁ


No.4102 Re:GetCurrentImageについて  投稿者:K.J.K. [02/3/17(日)23:18分]

こちらです。

http://www.koalanet.ne.jp/~akiya/vbtaste/vbp/MdaCpt00.lzh

IBasicVideo.GetCurrentImageを使ったものとISampleGrabberを使ったものの
両方を選べるようにしました。

No.4101 MSChartについて  投稿者:ash [02/3/17(日)16:46分]

VBレスキューHP内にMSChart関係のプログラムを拝見させてもらいましたが、

もし、10人だけでなく30人とか多数のデータを入れた場合、
グラフを見やすくするため、グラフ下にスクロールバーを付けたいと思うのですが、
具体的にはどのようにすれば、いいのでしょうか?
よろしくお願いします。

前のログ 次のログ


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