前のログ 次のログ

No.250

ファイル作成  投稿者:kaoru [99/3/12(金)0:43分]

FormLoad時にiniファイルが存在するか確認して、無い場合に実行ファイルがある

ディレクトリにiniファイルを作成したいのですが、簡単な方法はないでしょうか?
どなたか教えて下さい。お願いします。

No.249

RE:URLの追加  投稿者:いるか [99/3/11(木)19:12分]

 早速、HPに行ってみました。

役に立つ情報満載です。
有り難う御座いました。

No.248

移植情報の追加  投稿者:花ちゃん [99/3/11(木)17:03分]

下記HPにも情報があります、参考にして下さい

http://www.microsoft.com/japan/support/kb/articles/J041/5/63.htm

No.247

URLの追加  投稿者:花ちゃん [99/3/11(木)15:23分]

http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/9711/conv/

NO.246

RE:VB2からVB5への変換  投稿者:花ちゃん [99/3/11(木)15:21分]

VB5で読み込み変換できるようですが、いろいろ制約は

あるようです。
詳しくは下記のHPを見て下さい

No.245

RE:テキストデータの件  投稿者:花ちゃん [99/3/11(木)8:10分]

データに問題がないようでしたら読み込み方か配列の宣言等に

問題があるのでは?
その辺のコードを掲示板に書いて頂くか、ソースファイル一式
とデータをメールで送付して頂けますか

No.244

RE:テキストデータの件の追加  投稿者:アリパパ [99/3/11(木)7:30分]

さっそくやってみました。

データはたしかに読み込まれています。

ほかの問題でしょうかね。

プログラムはコードをコピーすればよいですか、それともプロジェクトファイルと
フォーム、標準モジュールファイルを送れば良いですか。

NO.243

VB2からVB5への変換  投稿者:いるか [99/3/11(木)7:15分]

 VB2で作ったプログラムをVB5で走らせたいと思っています。

VB2→VB5変換ツールをご存知の方、教えてください。

No.242

テキストデータの件の追加  投稿者:花ちゃん [99/3/11(木)6:42分]

Dim TextLine

Open "TESTFILE" For Input As #1
Do While Not EOF(1)
  Line Input #1, TextLine
  Debug.Print TextLine & "*END*"
Loop
Close #1
このようにして一度デバッグウィンドウにデータを表示させて
みて下さい
ひょっとしてデータが欠落(スペースで埋まっていない)のかも
しれませんね?

No.241

RE:Re:テキストデータ(固定長)の読み込み  投稿者:花ちゃん [99/3/11(木)6:19分]

よろしければ、プログラムとデータをメールででも送って頂け

ませんか?

No.240

Re:テキストデータ(固定長)の読み込み    投稿者:アリパパ [99/3/11(木)5:14分]

花ちゃん、ゆう(U)さん、アドバイスありがとうございます。


花ちゃんのMSFlexGridの例をそのまま利用して、こちらのデータ内容に合わせて
ユーザー定義など必要と思われるところを変更してやってみてはいるのですが、
なかなか上手く行きません。

ゆう(U)さんの方法でもやってみたのですが上手く行きません。
何が悪いのか、何か足りないのか、初心者の私にはわからず行詰まっております。
(VBの根本的な事がわかっていないのが問題かもしれません。(^_^;)

ちなみに、Line Input #1, TextLine の形で実行させ読み込むと、例えば
Data(DatN).xxx = にMid(TextLine,9,8)で代入させているところで
「インデックスが有効範囲にありません。」とエラーが出ます。
(すべてMidで取り出すように設定しています。)
TextLineにはデータが読み込まれているようですが必要な値が取り出せません。
方法がまずいのでしょうか。
それから固定長のデータはすべて半角英数字で構成されています。

また良きアドバイスお願いします。

No.239

DBComboBox制御  投稿者:Kimie [99/3/10(水)21:35分]

DBComboBoxを使っていろいろやっているのですが、▼をクリックして、リストが

表示されるとき、任意の行にカーソルを持っていっておきたいのですが、
どなたか、そんな方法を思いつかれませんか?

No.238

Re:テキストデータの読み込み  投稿者:ゆう(U) [99/3/10(水)14:30分]

固定長ファイルを読む時に注意しないと行けないのが

ファイルのレイアウトだと思います。
実際にLine Inputで読み込んでみると分かりますが、
UniCodeを採用しているVBでは全角文字も半角文字も
1文字となります。
※ファイルでは全角1字で2バイト、半角1字で1バイト

このことに注意して文字を切り分けると問題は発生
しませんが、ちょっと面倒です。
※StrConvで変換して、また戻す・・・

やはりこんな場合は・・・
ユーザー定義型(Type)を使用するのが簡単です。
※バイナリ・ランダムファイルとしてアクセス

Type myRecord
ID(0 To 4) As Byte '5バイト
FIELD_1(0 To 9) As Byte '10バイト
FIELD_2(0 To 9) As Byte '10バイト
FIELD_3(0 To 9) As Byte '10バイト
FIELD_4(0 To 9) As Byte '10バイト
Dummy(0 To 1) As Byte '改行
End Type
この様に最後に改行分を加えてGet/Putする。
※この場合もPutは面倒です(GetはStrConv)
 StrConvで変換してバイト配列へ代入する


●他の方法として・・・
Type myRecord
ID As String * 5 '5バイト(全/半角混在可)
FIELD_1 As String * 10 '10バイト(全/半角混在可)
FIELD_2 As String * 10 '10バイト(全/半角混在可)
FIELD_3 As String * 10 '10バイト(全/半角混在可)
FIELD_4 As String * 10 '10バイト(全/半角混在可)
Dummy As String * 2 '改行
End Type
を使用してGet/Putする方法です・・・

こちらの方がとても楽です。

Get後には半角の場合は全く変換なしてそのまま参照できます、
全角が混在されている場合は全角文字数分のvbNullCharが追加
されています(これは以前に投稿したfNullCutなどで消去)。
※Debug.Print fNullCut(myRec.FIELD_1)
 の様に参照する。

で注意する点はPutの場合です、先ほどのvbNullCharが含まれる
ことを想定して文字を代入しないといけません。
※この条件を満たさないとどうなるかは自分で試して下さい。
 (どうなったかは、私は忘れました)

この用途で使用する事を想定して作ったのが・・・
[自作関数]
'==========================================================
'固定長文字列をバイト数分に調整する fCStringW2S
'==========================================================
' result = fNow_Alpha(myString)
' 引数 myString:固定長文字列
' 戻値 result :バイト数に調整された文字列
'----------------------------------------------------------
'Typeで固定長文字列をバイト数として扱った時用
'固定長文字列を使用してGetしたデータのPut用の
'バイト長の変換関数(固定長文字列代入用)
'固定長文字列を引数にしてバイト数+余り分はvbNullCharを入れる
'----------------------------------------------------------
Public Function fCStringW2S(ByRef myString As String) As String
Dim strTemp As String
Dim lngLength As Long
Dim i As Long

lngLength = LenB(myString) \ LenB(" ")
strTemp = fBackChr(myString, lngLength)
lngLength = lngLength - Len(strTemp)
fCStringW2S = strTemp & String$(lngLength, vbNullChar)
End Function
を使用すると出力バイト数に整形します。
※作ったけど実際に使ったことが無いので十分なテストはしていません

使用方法は
MyRec.FIELD_1 = "あいう"
※中身"あいう "
MyRec.FIELD_1 = fCStringW2S(MyRec.FIELD_1)
※中身"あいう " & String$(3, vbNullChar)
です


●注意●
 「他の方法として」と紹介したのは私自身で動作を確認した方法で、
 まっとうな方法ではないかも知れません、動作確認はしっかり行い
 ご自身の責任で使用して下さい。

No.237

プリンターポートの取得  投稿者:とんとん [99/3/10(水)13:22分]

はじめまして。

ネットワーク上にあるプリンターのポートを知るにはどうしたらよいのでしょうか?
NTからプリンターポートを検索すると、ne00:を言うポートを表示してしまいます。
どういうことでしょうか?
幾分、素人なのでよろしくお願いいたします。

No.236

RE:テキストデータの読み込み  投稿者:花ちゃん [99/3/09(火)21:56分]

私も詳しくは知りませんが、固定長ファイルをシーケンシャルアクセスで 

読み込むなら Line Input #1, TextLine のように行単位で読み込み
Mid$()関数で、区切って配列に読み込み、Print # ステートメントを使用
して書き込むのだと思いますが?、ユーザー定義型が使用できるなら簡単で
しょうが、どなたかいい方法がありましたらお願いします。

No.235

Re:テキストデータの読込み  投稿者:アリパパ [99/3/09(火)7:05分]

>>このテキストデータが区切りのない形式の場合

> とは、固定長ということでしょうか?それともスペース区切りとか
> いずれにしても読み込みと書き込みの部分を変更すればOKだと
>思いますが?
>又、固定長だったらランダムファイル形式の方がいいかも?
早速ありがとうございます。
すみませんでした。固定長です。
固定長の場合はやはりLeftやMid関数を使ってやればよいのですか。
初歩的な事ですみません。m(_。_)m

No.234

Re:テキストデータの読込み  投稿者:アリパパ [99/3/09(火)7:03分]

>>このテキストデータが区切りのない形式の場合

> とは、固定長ということでしょうか?それともスペース区切りとか
> いずれにしても読み込みと書き込みの部分を変更すればOKだと
>思いますが?
>又、固定長だったらランダムファイル形式の方がいいかも?
早速ありがとうございます。
すみませんでした。固定長です。
固定長の場合はやはりLeftやMid関数を使ってやればよいのですか。
初歩的な事ですみません。m(_。_)m

NO.233

RE:テキストデータの読込み  投稿者:花ちゃん [99/3/09(火)6:40分]

>このテキストデータが区切りのない形式の場合

 とは、固定長ということでしょうか?それともスペース区切りとか
 いずれにしても読み込みと書き込みの部分を変更すればOKだと
思いますが?
又、固定長だったらランダムファイル形式の方がいいかも?

No.232

テキストデータの読込み(MSFlexGrid使用時)について  投稿者:アリパパ [99/3/09(火)4:31分]

花ちゃん、VB初心者のアリパパです。

VB逆引きHLP、とても重宝しています。
さて、MSFlexGrid関係の中で、テキストデータ(カンマ区切り)を例題にしていますが、
このテキストデータが区切りのない形式の場合も同じ方法で、読込み表示が可能でしょ
うか。
区切りが無いので、LeftやMidを使って値を取り出すようになると思いますが、
配列にデータを格納するところを変更するだけで実現できますか。

NO.231

VBのフォームを常に手前にするには?   投稿者:近藤 [99/3/08(月)21:41分]

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

いろいろ試してみたのですが、結局、ACCESSからVBのフォーム起動したときに、 ACCESSの画面を最小化し、VBの処理が終わった後に、ACCESSの画面を再び最大化する 方法を採用することにしました。
(根本的な解決策ではないと思いますが・・・)

NO.230

Re:VBの逆コンパイルについて  投稿者:ゆう(U) [99/3/08(月)16:49分]

以前「VB初心者友の会」でVBの逆コンパイルのReを見た記憶があります。


しかしそれは英語版という事でした・・・

どんな機能を持っているか不明ですが、通常のfrmやbasなどコンパイル
した時に存在していたモジュール別にコードが戻るとか、その時の変数
に戻るなどは考えられません。
PコードEXEやデバック付きEXEの場合なら或る程度は可能かとは思いますが
最適化なんてしていたらコンパイラがどんな風にしているか想像できません。
※ですからそのソースを修正なんてことは考えられないです・・・

どの程度の規模のプログラムかは分かりませんが、ソースを幾らかでも
憶えているうちに、自分で一から作り直してみてはいかが?

意外と前回より良いものが出来る場合があります。
※基本的なアルゴリズムは前回できているので、さらに発展型
 が出来る場合があります。

No.229

Re:VBのフォームを常に手前にするには?  投稿者:ゆう(U) [99/3/08(月)16:33分]

思いつく範囲でReします。


まず、Access2.0でVB5.0を表示する時にTOPMOSTで表示しているのですよね?
VB5.0のフォームでMsgBoxを表示した場合に本当にAccessの裏へ隠れてしまう
のですか?
雰囲気からはAccess2.0がTOPMOST属性を持っていなければVB5.0のフォームは
裏へは隠れないと思うのですが?

TOPMOST同士なら後が上になるけど・・・

実際にそうなっているならそんなもんなんでしょうけど・・・
※本当に最初っからVB5.0のフォームはTOPMOST属性を持たせていますか?

もう一つの方法としてはAccess2.0の裏へVB5.0が隠れたのなら・・・
VB5.0を・・・ではなくAccess2.0を最背面(HWND_BOTTOM = 1&)へ移動
させてみてはいかがでしょうか?
※発想を逆にしてみるとか・・・

●VB2.0からVB5.0・・・
 Jet関係(データベース)とかとは一切関係ない事をしているのですか?

以上、裏(検証)無しReでした。

No.228

VBのフォームを常に手前にするには?  投稿者:近藤 [99/3/05(金)21:36分]

 ACCESS2.0から、VB5.0のEXEを起動するとき、VBのフォームを常に手前にするには、
 SetWindowPos関数の機能で出来ます。

しかし、VBのフォームがメッセージボックスを出して、ACCESSの画面の後ろに隠れたとき、 SetWindowPos関数でVBのフォームを常に手前にすると、
メッセージボックスより手前にVBのフォームが出てしまい、 VBのフォームが固まってしまいます。
常に、ACCESSより手前にVBのフォームを表示させるには、どう制御したら良いでしょうか?

No.227

VBの逆コンパイルについて  投稿者:匿名 [99/3/05(金)19:52分]

 Visual Basicでプログラムを作ったのですが、ファイル操作を誤ってソ

ースコードを全て削除してしまいました。削除ファイル復活ツールなどを
利用して、復活させようとしたのですが、誤って削除した後に削除したこ
とに気付かずにデフラグを実行してしまっていたため、復活させることが
できませんでした。 しかし、作っていたプログラムを偶々別の環境でテ
ストとしてたため、実行ファイルだけが手元に残りました。あくまでもテス
ト用だったため、まだまだ改良しなくては使えません。この実行ファイル
からソースコードを復活させることはできないでしょうか? いわゆる逆コ
ンパイルをやりたいのです。

No.226

NUMLOCKが消える現象  投稿者:やまねこ [99/3/05(金)18:48分]

Kimieさん、ご回答ありがとうございます。

私の方でも、あれこれと試してみたのですが、
項目数がかなり多かったので、何個か分けてレコードセットを作り、
項目を転送したら、だいぶ早くなりました。
Kimieさんから教えていただいた方法も、ぜひ試してみたいと思います。

そして、またまた質問があります。
入力中のフォーム(A)から、別のフォーム(B)を呼び出して、
Bフォームのあるイベントに、
Aフォームにデータを転送後クローズし、Aフォームに戻るという
処理をした際に、NUMLOCK(キーボードの)が消えてしまうんです。
TABキーで次の項目に移動すればNUMLOCKは復活します。
どなたか、こういう現象なったことありませんか?
わかる方いらっしゃいましたら教えてください。


No.225

レコードセットへのデータの転送  投稿者:Kimie [99/3/04(木)18:06分]

初めまして、やまねこさん


私は、追加クエリーでデータを追加してます。おためし下さい。

SQL="Insert Into tblテーブル(項目A,項目B) Select [引数A] as 式1,[引数B] as 式2"
Set QY = DB.CreateQueryDef("",SQL)

で追加クエリーを作成します。引数の前後を”[”(半角)で囲む事を忘れないでね
これをExecuteで実行するのですが、実行前に引数を指定します。

QY!引数A = Text1.text ←この時は引数Aは"["で囲まない。
QY!引数B = Text2.text
QY.Execute

でデータが追加されます。
AddNewとどちらの方法が早いかまでは確認しておりませんが、一度おためし下さい。

No.224

レコードセットへのデータの転送について  投稿者:やまねこ [99/2/26(金)13:05分]

こんにちは、いつも勉強させていただいております。


ACCESS97+VB5.0で開発しているのですが、
データベースにVB5からデータを登録するときに、
ACCESSのテーブルでテキストタイプと指定している項目への
転送が異常に時間がかかってしまいます。

VBのコードに直接SQL文を記述し、下記のようにオープンしています。
Set SIN01_RST = DBS.OpenRecordset(SQL_WK, dbOpenDynaset)
SIN01_RST.AddNew
SIN01_RST!O_AZA = FM1!TXTooaza
SIN01_RST!K_AZA = FM1!TXTaza

だいたい1項目あたり、0.8秒ぐらいかかってしまいます。
空値や数字を直接転送して試しても、遅いんです。
数値属性の項目への転送は、とても早いのですが、、、
AddNewもEditもどちらも同じくらい時間がかかってしまいます。
どなたかわかる方いらっしゃいませんか?

No.223

キー入力を無効にする方法ってありますか?  投稿者:白鴉 [99/2/25(木)0:58分]

一部のキー入力を無効にしたいのですが、方法分かりますか?

一部のキーとは、タスク切り替えのALT+TAB
アプリケーションの強制終了のCTRL+ALT+DElです
これはVBでは出来ないのかな??
御存知の方、お願いします

No.222

勘違いしてました。  投稿者:ともちゃん [99/2/24(水)9:16分]

MS CHARTのRGBの値ですがうまくいきました。

コーディングミスしてました。
まだまだ半人前です。

No.221

RE:MS CHART  投稿者:ともちゃん [99/2/24(水)9:12分]

花ちゃんさんありがとうございます。

勉強します。


No.220

下の書き込みの追加  投稿者:花ちゃん [99/2/23(火)23:41分]

>納得いかぬまま赤になってしまいました。

>R=255、G=0、B=0 →×
>R=72、G=255、B=72 →○

どうしてでしょうかね? 私は下記の設定で赤で表示されましたが

'表示色
.VtFont.VtColor.Set 255, 0, 0 '_  ここを変更

  以下3行Rem
  ' Series.DataPoints(-1).Brush.FillColor.Red, _
' Series.DataPoints(-1).Brush.FillColor.Green, _
' Series.DataPoints(-1).Brush.FillColor.Blue

.Backdrop.Frame.Style = VtFrameStyleNull

No.219

RE:MS CHART  投稿者:花ちゃん [99/2/23(火)20:33分]

私の知識不足かも知れませんが、ROWLABELは個別に色の

設定はできないのでは、又ラベルの文字が長いと下から上に向かって
文字が横向きに表示されるのも変更できません。
その他色々問題がありそうです。
詳しくはMSのHPでサポートの検索でVBのチャートで検索して
調べて下さい。
23日サンプルをアップし直しております。それ以外で細かい設定
等出来るようでしたら、教えて下さい。

No.218

MS CHART  投稿者:ともちゃん [99/2/23(火)17:18分]

こんにちは

違うページで花ちゃんさんから回答していただいた者です。
こちらでも質問させてください。

下記をを実現したいのですが無理なのでしょうか?

1.ROWLABELのフォント色はインデックス単位で変えたい

例)ROWLABEL(1):赤
ROWLABEL(2):黒

P.S.花ちゃんさんへ
教えて頂いた件はうまくいきました。ありがとうございました。
ただ、色の設定を赤にしようと思って設定したらどうもうまくいきません。
納得いかぬまま赤になってしまいました。
R=255、G=0、B=0 →×
R=72、G=255、B=72 →○



No.217

複数のCSVファイルを結合してレコードセット作成  投稿者:C [99/2/23(火)12:35分]

カンマ区切りのCSVファイルからレコードセットを作ろうとしています。


App.Path\records\ディレクトリにある、
foo.csv と hoge.csv


Public conn as ADODB.connection
Set conn = New ADODB.connection
conn.ConnectionString = "Data Provider=MSDASQL.1;Persist Security Info=False;" _
& "Data Source=Text Files;Initial Catalog=" & App.Path & "\records"

というコネクションで接続し、両方に共通のフィールドである、CODEを使用して
2つのテーブルを結合させたレコードセットを

recset.Open "SELECT NAME, CODE, DATE FROM foo.csv, hoge.csv " _
& "WHERE foo.csv.CODE = hoge.csv.CODE", conn, .....

というように作ろうとしています。(hoge.csvにはNAMEフィールドがないため、
foo.csvのNAMEフィールドをCDOEフィールドを仲介して参照したい)

ところが、where 文のなかで foo.csv.CODE などとやると、拡張子用のピリオド
が余計なせいだと思いますが、エラーメッセージに

#-2147217904
[Microsoft][ODBC Text ドライバー]パラメーターが少なすぎます。1を指定してください。

と出てきてしまいます。
かといって、csvを外してfoo.CODEとやっても同じエラーが出ます。
それに、どうも.csvを外して書くと、.csvではなく.txtを読みに行ってしまうようです。
SELECT * from foo とやると、foo.csvではなくfoo.txtを読みに行ってしまいました。

そもそもwhere文の書き方が間違っているのでしょうか。

No.216

Re・ゆうさん、ありがとうございました  投稿者:XTC [99/2/22(月)21:14分]

ゆうさん、ありがとうございました。

何度か書き込んでみたのですが、書き込めてなくて
REが遅れてしまいました。ゆうさんのコード
参考にさせていただきました。ありがとうございました。

No.215

RE:電卓のサンプル件  投稿者:花ちゃん [99/2/22(月)13:19分]

電卓のサンプルはVisual BasicのBooksOnlineで

”電卓”で検索して見て下さい。

解らないときは、思いつく語句で一度検索して見て下さい。結構それで解る
場合があります。

Visual Basic のメイン ディレクトリ (VB\Samples\Pguide) の下の
\Calc ディレクトリに、このアプリケーションがあります。
と書いてあります。

No.214

数値に型宣言文字を付ける意味(お礼)  投稿者:花ちゃん [99/2/22(月)12:50分]

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

Long型にするとかなり差がでますね。 型宣言の方はわずかなようですが
今後、ループカウンター等にはLong型を使用するようにします。

No.213

Re:数値に型宣言文字を付ける意味  投稿者:ゆう(U) [99/2/22(月)10:54分]

この2つをネイティブコンパイルでP-Codeコンパイルで

動作結果を比較して見て下さい。
※ネイティブコンパイルは最適化なし(推奨)

テストする場合は常駐ものを外す方が良いです。
あと・・・1回ではなく最低でも十回以上で統計を取って見て下さい。

テストサンプル)
Private Declare Function GetTickCount Lib "kernel32" () As Long
1.型あわせを使用した場合のテスト
Private Sub Command1_Click()
Dim i As Long, j As Long, k As Long, l As Long, m As Long
Dim lngTime_L As Long, lngTime_I As Long
Dim lngTemp As Long

For k = 0& To 99&
lngTime_L = GetTickCount
For i = 0& To 999999
j = 1&
' j = j + 1&
Next i
lngTime_L = GetTickCount - lngTime_L
lngTime_I = GetTickCount
For i = 0& To 999999
j = 1
' j = j + 1
Next i
lngTime_I = GetTickCount - lngTime_I
l = l + Abs(lngTime_L < lngTime_I)
m = m + Abs(lngTime_L > lngTime_I)
lngTemp = lngTemp + (lngTime_L - lngTime_I)
Next k
MsgBox "lng" & l & ":int" & m & "/" & lngTemp
End Sub

2.ループカウンターのテスト
Private Sub Command2_Click()
Dim i As Long, k As Long, l As Long, m As Long
Dim j As Integer
Dim lngTime_L As Long, lngTime_I As Long
Dim lngTemp As Long

For k = 0& To 999&
lngTime_L = GetTickCount
For i = -30000 To 29999 '条件を合わせる為に型あわせはしていません
Next i
lngTime_L = GetTickCount - lngTime_L
lngTime_I = GetTickCount
For j = -30000 To 29999
Next j
lngTime_I = GetTickCount - lngTime_I
l = l + Abs(lngTime_L < lngTime_I)
m = m + Abs(lngTime_L > lngTime_I)
lngTemp = lngTemp + (lngTime_L - lngTime_I)
Next k
MsgBox "lng" & l & ":int" & m & "/" & lngTemp
End Sub

For で使用している型あわせはあまり効果は無いかもしれません・・・
初回でループ範囲(Step考慮)のカウンター数値を作り出している
はずなので・・・(仕様がわからないので)
このテストも考えれば良かったんですが、すぐには思いつかなかったので
今回はテストしません。

結果)
型あわせをした方がわずかに高速になる
カウンターはIntegerよりLongの方が高速になる

●「わずかでも高速化につながるなら面倒でも型指定をしておこう・・・」
 というのが私の考えです、これによりコードが読みにくくなるとか
 感じる方は型指定はしなくても実害はないでしょう。

 ただし桁あふれ対策などの型指定も取ってしまうとまずいですが。
 Debug.Print 20000& * 1000& 'Long型
 Debug.Print 20000% * 1000% 'Integer型(オーバーフロー)
 ※Integer型の%はコード部に貼付けると消えます

●最近の速いマシンでは気にならないかもね・・・
 Win95B/VB5.0(SP3)pro
 Pentium MMX200(96MB)

No.212

はじめまして・・・  投稿者:匿名 [99/2/21(日)23:17分]

どうも。はじめまして。


実は今、とある専門学校で
Visual Basicを使った授業を
しているのですが、
現在の課題である「電卓」が
どうもわかりません。

内容はというと
Windowsのアクセサリに「電卓」が
ありますよね?

それの”普通の電卓”という物と
同じのを作らないといけないのですが、
どうも基本からわかりません・・・。

ぜひ教えてください。

ちなみに%とかsqrtとかはなしで
いわゆる市販されてるノーマルな
電卓を作れというものです。

ぜひお願いします。

No.211

Re:タイトルバーなしウィンドウ    投稿者:R@SuKa [99/2/21(日)12:09分]

よかったよかった。何度か書き込んだんですが書き込めなかったもので。


改めまして、ゆう(U)さん、どうもありがとうございました。
それで出来ました。ばっちりです。

No.210

数値に型宣言文字を付ける意味  投稿者:花ちゃん [99/2/21(日)11:34分]

ゆう(U)さんのコーディングのなかで  For i = 0& To 2& のようにLong型の

宣言文字をつけておられますが、つけるのと、つけないのでは、どこか違うの
でしょうか?
又、Integer型でなくLong型を指定されているのでしょうか?
私は、小さい数値はInteger型の方が2バイトだからメモリ消費が少ないので
いいものだとばかり思っていたのですが?
以前何かで32ビットになってからLong型の方が高速で、メモリうんぬん
といった記事を見たような記憶はあるのですが?

タイトルバーを外す方法 の関数ヘルプに加えさせて頂きます。
ありがとうございました。

No.209

Re:タイトルバーなしウィンドウ  投稿者:ゆう(U) [99/2/20(土)16:49分]

タスクバーにアイコンとキャプションを残したままタイトルバーを

外す方法は、APIを使用することで出来ますよ。

Call sTitleReleace(Me)で付けたり外したり・・・

ゆー太郎さんに教わった方法です
※関数にアレンジは私がしてますけど・・・

標準モジュール
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
(ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long

'==========================================================
'タイトルバーを付ける・外す sTitleReleace
'==========================================================
' Call sTitleReleace(myForm)
' 引数 myForm :フォーム
'----------------------------------------------------------
Public Sub sTitleReleace(ByRef myForm As Form)
Const GWL_STYLE = (-16&)
Const SWP_NOSIZE = &H1&
Const SWP_NOMOVE = &H2&
Const SWP_NOZORDER = &H4&
Const SWP_FRAMECHANGED = &H20&
Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Const WS_CAPTION = &HC00000
Dim Result As Long

With myForm
Result = GetWindowLong(.hWnd, GWL_STYLE)
Result = Result Xor WS_CAPTION
Result = SetWindowLong(.hWnd, GWL_STYLE, Result)

Result = SetWindowPos(.hWnd, 0&, 0&, 0&, 0&, 0&, _
SWP_DRAWFRAME Or _
SWP_NOZORDER Or _
SWP_NOMOVE Or _
SWP_NOSIZE)
End With
End Sub


Private Sub Form_Load()
Call sTitleReleace(Me)
End Sub

※花ちゃん(さん)へ
 逆引きへ載せておくといいかも・・・

No.208

タイトルバーなしウィンドウ  投稿者:R@SuKa [99/2/20(土)13:58分]

こんにちは。


タイトルバーのないウィンドウをVBで作成しようとしています。で、これ自体はFAQの ようなので、あちこちで方法も見つけました。確かにできました。

が、しかし!BorderStyleを固定ダイアログにしたり、CaptionやControlBoxを なしにしたりする方法では、タスクバーのアイコンまで消えてしまうではないですか!
無理矢理ShowInTaskbarプロパティをTrueにしてみても、キャプションがないので、 アイコンも文字も表示されない空のボタンがタスクバー上に生成されるだけです。
BorderStyleを0にすれば、一応文字列のあるボタンをタスクバーにつくることは出来ますが、 アイコンがないしウィンドウが3D表示されません。

なんとか、タイトルバーを消しつつ、3D表示し、タスクバーにアイコンとキャプションを 表示する方法はないものでしょうか。

NO.207

どうもー  投稿者:白鴉 [99/2/19(金)9:42分]

お早いRES−どうもー


本当だ!!メニューをよく見たらMSCHART関係がある!!(まだ準備中だけど・・・)
お願いします!!
期待してまってまーす

No.206

RE:MSCHARTコントロールの使い方    投稿者:花ちゃん [99/2/19(金)6:36分]

2〜3日待って頂けたらサンプル他をUPしたいと

思います。
でもMSCHARTコントロールってプロパティの階層が深くて
参考書も少なく調べるのが大変ですね?
労の割には機能が乏しいし

No.205

MSCHARTコントロールの使い方  投稿者:白鴉 [99/2/19(金)4:10分]

1次元の配列をデータとして読みこんでグラフを表示させたいのですが・・・。

これってMSCHARTコントロールを使えば実現できますよね??
初心者で何も分からないのですが・・・。どなたか教えて下さいお願いします〜。

No.204

Re:IPアドレスの様な小数点の場合  投稿者:ゆう(U) [99/2/18(木)13:35分]

追加です。


フォームのLoadイベントで
Call InitIPAddress
とかってして下さい。
※気付いているとは思いますが・・・

それと3桁以上入力すると音がするのは
「ユーザーフレンドリー」
という事で・・・

※マウス操作ではメッセージは表示されません、この仕様も
 組み込んであります(手抜き?)ので、最終的なチェックは
 別に行って下さい。

No.203

Re:IPアドレスの様な小数点の場合  投稿者:ゆう(U) [99/2/18(木)12:12分]

●長文失礼します


4つのテキストボックスを使用すると簡単に出来ませんか?

コントロール)
ピクチャーボックス1個(Picture1)
テキストボックス1個(Text1)
ラベル     1個(Label1)

デザイン時に設定する項目)
ピクチャーボックス−.Appearance = 0 - フラット
テキストボックス−.Alignment = 2 - 中央揃え
         .BorderStyle = 0 - なし
         .MultiLine = True
         .Index = 0
ラベル     −.Index = 0

コード)
Private Sub InitIPAddress()
Dim i As Long
Dim sngWidth As Single
Dim sngHeight As Single

With Picture1
' .Appearance = 0 'デザイン時に設定
.AutoRedraw = False
.BackColor = vbWindowBackground
.ScaleMode = vbTwips
With .Parent
sngWidth = .ScaleX(1995, vbTwips, .ScaleMode)
sngHeight = .ScaleY(330, vbTwips, .ScaleMode)
End With
.Move .Left, .Top, sngWidth, sngHeight
.TabStop = False
End With

For i = 1 To 3&
Load Text1(i)
Next i
For i = 0& To 3&
With Text1(i)
Set .Container = Picture1
' .Alignment = vbCenter 'デザイン時に設定
' .BorderStyle = vbBSNone 'デザイン時に設定
.FontName = "MS ゴシック"
.FontSize = 9!
.MaxLength = 3&
' .MultiLine = True 'デザイン時に設定
.Move 45! + i * 495!, 45!, 330!, 195!
If i > 0 Then
.TabStop = False
Else
.TabStop = True
End If
.Text = "0" '初期値設定
.Visible = True
End With
Next i

For i = 1 To 3&
Load Label1(i)
Next i
For i = 0& To 2&
With Label1(i)
Set .Container = Picture1
.BackStyle = 0
.BorderStyle = vbBSNone
.Caption = "."
.FontName = "MS ゴシック"
.FontSize = 9!
.Move 405 + i * 495, 45, 120, 180
.Visible = True
End With
Next i
End Sub

Private Sub Text1_Change(Index As Integer)
Dim strTemp As String

If Me.Visible = False Then Exit Sub
strTemp = Text1(Index).Text
strTemp = CStr(CInt(IIf(Len(strTemp) > 0, strTemp, "0")))
Select Case CInt(strTemp)
Case 0 To 255
Case Else
MsgBox strTemp & " は無効なエントリーです。" & vbCrLf & "このフィールドの値は" & _ " 0 から 255 までにしてください", vbExclamation
Text1(0).Tag = ""
Text1(Index).SetFocus
End Select
End Sub

Private Sub Text1_GotFocus(Index As Integer)
If Len(Text1(0).Tag) > 0& Then
Select Case CLng(Text1(0).Tag)
Case vbKeyLeft
Text1(Index).SelStart = Len(Text1(Index).Text)
Case vbKeyRight
Text1(Index).SelStart = 0&
Case Else
End Select
Text1(0).Tag = ""
Exit Sub
End If

With Text1(Index)
.SelStart = 0&
.SelLength = Len(.Text)
End With
End Sub

Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
Select Case KeyAscii
Case 8 'BS/DELキー
Case 48 To 57 'Asc("0") To Asc("9")
If Len(Text1(Index).Text) = 2& Then
Text1(0).Tag = KeyAscii
Call Text1_Change(Index)
If Len(Text1(0).Tag) = 0& Then Exit Sub
Text1(0).Tag = ""
If Index < Text1.Count - 1 Then
Text1((Index + 1) Mod Text1.Count).SetFocus
End If
End If
Case Else 'Enterキーの処理を含む
KeyAscii = 0
End Select
End Sub

Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyLeft
If Text1(Index).SelStart = 0& Then
Text1(0).Tag = CInt(KeyCode)
KeyCode = 0
If Index > 0 Then
Call Text1_Change(Index)
If Len(Text1(0).Tag) = 0& Then Exit Sub
Text1((Text1.Count + Index - 1) Mod Text1.Count).SetFocus
End If
End If
Case vbKeyRight
If Text1(Index).SelStart = Len(Text1(Index).Text) Then
Text1(0).Tag = CInt(KeyCode)
KeyCode = 0
If Index < Text1.Count - 1& Then
Call Text1_Change(Index)
If Len(Text1(0).Tag) = 0& Then Exit Sub
Text1((Index + 1) Mod Text1.Count).SetFocus
End If
End If
Case Else
Text1(0).Tag = ""
End Select
End Sub

若干の動作やサイズの違いはありますが、これでほとんどTCP/IP設定の
アドレスの入力部分のコントロールと同じ動作となります。

無効表示(Enabled=False)はテキストボックスに対して行えばそっくり・・・

※一部動作が異なる部分もありますが、あまり気付かないでしょう。

後は自分でカスタマイズしてみて下さい。

●ちなみにWin95B/VB5.0(SP3)proで確認したコードです。

No.202

  投稿者:Takahashi [99/2/17(水)23:20分]

MSCommコントロールのinputプロパティでデータを取得したら、

バイナリデータの &HE0 などの値がはじかれて読み込まれました。

これは、VBがDBCSというものを採用しているせいで、10進数の128か
129以上のデータが来ると2バイト文字の上位バイトとみなして、
はじいてしまうとMSDNで見ました。

この問題を解決するにはどうしたらよいのでしょうか。
どなたかアドバイスをお願いします。

No.201

IPアドレスの様な小数点の場合  投稿者:XTC [99/2/17(水)22:05分]

始めまして、XTCと申します。IPアドレスの様な

111.111.111.111といった小数点で表記されたのを
テキストボックスから入力出来るようにするには、
どのような方法でやったら良いのでしょうか。
前のログ 次のログ


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