次のログ

No.50

作って欲しいプログラム?  投稿者:うめぴ [98/9/21(月)8:37分] http://www2.shift.ne.jp/~ume-p/

いきなり漠然と「作って欲しいプログラム」と言われてもねぇ?

私は、結構「作って」と言われたら、著作権まで渡さないで、自分のHPで
公開するという話で作っちゃう事ありますけど。
(私のHPの画像切り出しとか、アルバム作成とかがそれに当たります。
  それ以外にもいくつか公開できないやつはあります。)

でも、「ゲーム」とか「3D」とか言われると、専門外だなぁ...
あと、プログラムは1本だけど、30画面くらいあるやつとか...

本当に窓の杜とかダウンロードコーナーに類似品ないんですか?

No.49

V.Bで作って欲しいプログラムがあります。  投稿者:大島テツヤ [98/9/21(月)2:07分]

私は神奈川県在住なのですが、どなたかV.B.で作って欲しいプログラミングがあります。
なるたけ安価(10万円以内)で引き受けてはいただけないでしょうか?
宜しくお願いします。

No.48

MSFlexGrid 表示の件その2  投稿者:gogogo [98/9/21(月)0:29分]

 花ちゃんさん,早速ありがとうございます。
勝手なことばかり言ってすみません。
コードの記述例などがあれば非常に助かるんですが・・・
自分でも考えてみたいと思いますが,もしよければ
宜しくお願いします。

No.47

MSFlexGrid 表示の件  投稿者:花ちゃん [98/9/20(日)23:43分]

gogogo さんあれでよかったですか、私もホットしました。

表示の件ですが
私の場合は、ランダムファイルを使ってます。
レコード番号を合せてデータを作成保管しておけば
いくつでも同時に同じレコードNOのファイルが開けるので
あとは、For〜Nextで読み込み表示するだけ
他のファイルは使った事がないので、?
でも考え方は同じじゃないのかな、データ作成・保管時に表示の
事も考えて、作成保管すればいいのでは。

No.46

フレキシブルグリッドのお礼とまた質問  投稿者:gogogo [98/9/20(日)22:47分]

 gogogoです。
花ちゃんさんありがとうございました。
あっさり解決しました。
TopRowというのがあったんですね。
勉強不足でした。
勉強不足ついでにもう1つ質問させて下さい。
いま,フレキシブルグリッドを使って簡単な表計算アプリを
作っています。表内の1列目のセルに名簿データファイル,
他の列のセルには数値データファイルを表示させたいのですが,
この名簿データと数値データは別々に保存し,またロードしたいと
思っています。
 このように,複数のファイルをロードして1つのフレキシブル
グリッド内に表示させるにはどうしたらいいでしょうか。


No.45

RE:フレキシブルグリッド内のスクロールその2   投稿者:花ちゃん [98/9/20(日)21:24分]

ごめんなさい、なんとなく意味がわかりました。
入力しているときに22.23行目と入力していてデータは入力できるが
入力したセルの位置は1行目から22行目までしか表示しないので23行目
を入力するときにはスクロールして見える位置に移動させたいということですね
それなら

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
       KeyAscii = 0
       MSFlexGrid1.Text = Text1.Text
       Text1.Text = ""
       MSFlexGrid1.Row = MSFlexGrid1.Row + 1
       If MSFlexGrid1.Row > 21 Then '10ぐらいでもOK
          MSFlexGrid1.TopRow = MSFlexGrid1.TopRow + 1
       End If
    End If
End Sub


最初に表示される行の位置 TopRow を変更すれば 列の場合 LeftCol
今度も外しているのでしょうか?

No.44

フレキシブルグリッド内のスクロールその2  投稿者:gogogo [98/9/20(日)20:05分]

 gogogoです。説明不足ですみません。
フレキブルグリッドを使って,縦40×横6のセルを作ります。
しかし,フォーム上では縦40個のセルは表示できないので,
そのうち22個が表示できるようにして自動的にスクロールバー
をつけるようにします。別にテキストボックスを作り,データ
はテキストボックスに入力し,それをセルに表示させます。
enter キーでカレントセルを1つ下に移動させます。
また,↓キーでもカレントセルが下に移動できるようにします。
もちろん,どれかわかるようにカレントセルには色をつけます。
 と,ここまではできるのですが,問題は,フォーム上の
フレキシブルグリッドの表内に見えていないセル(つまり,
残りの下の18個)を↓キーで上に移動させて見えるようにしたい
(これをスクロールと言うんですよね?)のですが,うまくいきません。
どうしたらいいでしょうか。
 という質問ですが,意味がお分かりになったでしょうか。今度は,
くどく書きすぎかな?うーん人に説明するのは難しいですね。

No.43

RE:フレキシブルグリッド  投稿者:花ちゃん [98/9/20(日)8:28分]

MSFlexGrid でのことですよね
いまいち質問の中身が解らないのですが?
文面そのままにとれば、なにもしなくても↑↓でスクロールできますが
テキストボックスをかえさずに直接セルに入力したいという事でしょうか?
あるいは現在のセルの色を変えたいという事でしょうか?
まったくの初めて使う(失礼)のでしたら、参考書1冊買われる事を
お薦めします。
いずれにせよ、V友の方でもレスがなかったのその辺の事じゃないのでしょうか
申し訳ないのですが、もう一度具体的な内容を教えて頂けないでしょうか

No.42

フレキシブルグリッド内のスクロール  投稿者:gogogo [98/9/20(日)6:58分]

はじめまして,gogogoです。
フレキシブルグリッドのカレントセルを矢印キー↓↑を使って
スクロールさせるにはどうしたらいいんでしょうか。
初歩的な質問ですみませんがよろしくご教示お願いします。

No.41

ソート:クイックソート  投稿者:ゆう(U) [98/9/19(土)21:12分]

' クイックソート(Long版)
'Sorted(省略可能) = True :昇順(デフォルト)
'               False:降順
Public Sub sQuickSort(ByRef myArray() As Long, _
                      Optional Sorted As Boolean = True)
  Dim i As Long, j As Long, k As Long, l As Long, m As Long
  Dim intMyPointer As Integer
  Dim lngLow As Long, lngHigh As Long
  Dim tmpArray As Long

  intMyPointer = Screen.MousePointer
  Screen.MousePointer = vbHourglass
  lngLow = LBound(myArray)
  lngHigh = UBound(myArray)

  If Sorted Then
    Call sAQuick(myArray(), lngLow, lngHigh)
  Else
    Call sDQuick(myArray(), lngLow, lngHigh)
  End If

  Screen.MousePointer = intMyPointer
End Sub

'昇順用Quickソート
Private Sub sAQuick(ByRef myArray() As Long, _
                    ByVal lngLeft As Long, _
                    ByVal lngRight As Long)
  Dim tmpArray As Long
  Dim i As Long, j As Long

  If lngLeft < lngRight Then
tmpArray = myArray((lngLeft + lngRight) \ 2) i = lngLeft j = lngRight Do While (True) Do While (myArray(i) < tmpArray)
i = i + 1 Loop Do While (myArray(j) > tmpArray) j = j - 1 Loop If i >= j Then Exit Do myArray(i) = myArray(i) Xor myArray(j) myArray(j) = myArray(i) Xor myArray(j) myArray(i) = myArray(i) Xor myArray(j) Loop Call sAQuick(myArray(), lngLeft, i - 1) Call sAQuick(myArray(), j + 1, lngRight) End If End Sub '降順用Quickソート Private Sub sDQuick(ByRef myArray() As Long, _ ByVal lngLeft As Long, _ ByVal lngRight As Long) Dim tmpArray As Long Dim i As Long, j As Long If lngLeft < lngRight Then
tmpArray = myArray((lngLeft + lngRight) \ 2) i = lngLeft j = lngRight Do While (True) Do While (myArray(i) > tmpArray) i = i + 1 Loop Do While (myArray(j) < tmpArray)
j = j - 1 Loop If i >= j Then Exit Do myArray(i) = myArray(i) Xor myArray(j) myArray(j) = myArray(i) Xor myArray(j) myArray(i) = myArray(i) Xor myArray(j) Loop Call sDQuick(myArray(), lngLeft, i - 1) Call sDQuick(myArray(), j + 1, lngRight) End If End Sub

No.40

Re:フォームを常に最前面に  投稿者:ゆう(U) [98/9/18(金)16:38分]

初めて知りました・・・
(普通モードレスの時はOwnerFormは指定しないので・・・)

frmNew.Show vbModeless, Me
これ・・・と言う訳で、試してみました。

Owner指定フォームの閉じる(×)でfrmNewが閉じられてしまいます、
その時frmNewのQueryUnloadでUnloadModeに5が帰ります。

UnloadMode=5はオーナーフォームが閉じられた!
と言う事でしょうね(定数には無いけど)?

No.39

RE3:フォームを常に最前面に  投稿者:花ちゃん [98/9/18(金)13:51分]

うめぴさんありがとうございます。
なるほどform2がform1の前面になりますが、メモ帳なんかの後ろに隠れ
ますよね。でもポップアップウィンドウなんかにする時に便利ですね。

No.38

Re:画面を常に手前に表示を見て  投稿者:うめぴ [98/9/18(金)12:27分] http://www2.shift.ne.jp/~ume-p

初めまして。うめぴです。
FORM1から常に手前の画面FORM2を表示する時、例えばCOMMANDボタンに

FORM2.Show 0,FORM1

とコーディングすればいいんですね。きっと。
:
:
あ、本当だ。すごい、すごい!!パチパチ。勉強になりました。
でも、「常に手前」の画面しかない時はどうするんでしょう?
透明画面の表示?かな?

No.37

RE:フォームを常に最前面に  投稿者:花ちゃん [98/9/18(金)12:07分]

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

<「フォームを常に最前面」には難しいAPIを使わなくてもできるようです。

<   frmSearch.show 0,frmEditor

<frmSearch の form_load にこれだけです。簡単ですね。

これってコードはどこにどう書くのでしょうか?
form_load イベントに
 frmSearch.show 0,frmEditor
では当然だめですよね。すみません、初心者なもので!
それと、間違いの個所訂正したいと思いますので、教えて頂けませんか?

No.36

フォームを常に最前面に  投稿者:Taka [98/9/18(金)11:02分]

「フォームを常に最前面」には難しいAPIを使わなくてもできるようです。

   frmSearch.show 0,frmEditor

frmSearch の form_load にこれだけです。簡単ですね。
VB5からのようですけど、どこにこのような新機能の説明があるんでしょう?
知っていたら教えてください。

それと余計なお世話でしょうが、
花さん、誤植といえばいいんでしょうか、いくつかありますね。
直されるのは大変なんでしょうか?

No.35

教室で・・・  投稿者:ゆう(U) [98/9/14(月)15:26分]

○私が使用しているStrCutと同じ使用方法の関数です
Public Function fBackChr(ByRef myString As String, _
                         ByVal ByteLen As Long) As String
  Dim i As Long, j As Long, k As Long
  Dim strReturn As String

  k = LenB(StrConv(myString, vbFromUnicode))
  Select Case k
    Case ByteLen
      strReturn = myString
    Case Is < ByteLen
strReturn = myString & Space$(ByteLen - k) Case Is > ByteLen k = 0 Do Until (j + k) > ByteLen i = i + 1 strReturn = strReturn & Mid$(myString, i, 1) j = LenB(StrConv(strReturn, vbFromUnicode)) k = LenB(StrConv(Mid$(myString, i + 1, 1), vbFromUnicode)) Loop If j < ByteLen Then
strReturn = strReturn & space$(ByteLen - j) End If End Select fBackChr = strReturn End Function ※LenB(StrConv(…, vbFromUnicode))の部分を花ちゃん(さん)の様に関数化  するともっと見やすくなりますが・・・ 教室での変数の宣言部で一部不適切な個所に気づきました。 教室その2> 'ヒープソート法で並べ替えします。 教室その2>Dim I, J, K, L, M, P, R, N As Integer ※I〜Rがバリアントで宣言されます。

No.34

ソート(前述3つ)  投稿者:ゆう(U) [98/9/14(月)15:26分]

使用方法はすべて同じです。

Dim i As Long
Dim lngArray() As Long
ReDim lngArray(0 To 100)        '(-1000 To -1)等のソートもOK

For i = LBound(lngArray) To UBound(lngArray)
  lngArray(i) = i
Next i

s????Sort lngArray [, True|, False] 

速度を比較すると
低速← sBubleSort > sHeapSort > sShellSort →高速
の順です。
※しかしソートするデータによってはもっと良い(特化)したソート方法が
 考えられます(一般的なデータではシェルソートが早いみたい)。


ヒープソートの添字に負を使用できるようにしている部分をなくすと
今より速度が上がると思いますが、良い考えが思い浮かばずこの様な
コードになってしまいました(+ lngLowがいっぱいで見栄えが悪い)。

なお、ソートについてはVisualBasicマガジン7月号と河西朝雄著
C言語によるはじめてのアルゴリズム入門(技術評論社)を参考に
しました。

※しかし、VBマガジン7月号に掲載されているコードではテストに
 不十分な為、コードを手直ししないとあまり使えません。
 或るソートでソート後別のソートを試しても配列はソート済みの為
 ソート時間が公正では無くなる。

花ちゃん(さん)のヒープソートも試したのですが負の添字もOKなどの
仕様で移植しきれなかったので上記アルゴリズム入門を参考にして作成
しました。

Long型以外、ユーザー定義型の配列などは前回の投稿を参考にして
手直しして使用して下さい。

※この仕様(添字に負を許す)でこのコードより早いソート方法や
 コードの修正点などをご存知の方(気づかれた方)、その方法を
 教えて下さい。

No.33

ソート:ヒープソート  投稿者:ゆう(U) [98/9/14(月)15:25分]

' ヒープソート(Long版)
'Sorted(省略可能) = True :昇順(デフォルト)
'               False:降順
Public Sub sHeapSort(ByRef myArray() As Long, _
                     Optional Sorted As Boolean = True)
  Dim i As Long, j As Long, k As Long, l As Long, m As Long
  Dim intMyPointer As Integer
  Dim lngLow As Long, lngHigh As Long, lngCount As Long
  Dim tmpArray As Long

  intMyPointer = Screen.MousePointer
  Screen.MousePointer = vbHourglass
  lngLow = LBound(myArray)
  lngHigh = UBound(myArray)
  lngCount = lngHigh - lngLow

  If Sorted Then
    For i = (lngCount \ 2) To i > 0 Step (-1)
      '共通化可能1
      l = i: m = lngCount
      k = 2 * l
      Do While (k <= m)
If k < m Then
If myArray(k + 1 + lngLow) > myArray(k + lngLow) Then k = k + 1 End If End If If myArray(l + lngLow) >= myArray(k + lngLow) Then Exit Do tmpArray = myArray(l + lngLow) myArray(l + lngLow) = myArray(k + lngLow) myArray(k + lngLow) = tmpArray l = k k = 2 * l Loop 'ここまで Next i j = lngCount Do While j > 0 tmpArray = myArray(0 + lngLow) myArray(0 + lngLow) = myArray(j + lngLow) myArray(j + lngLow) = tmpArray j = j - 1 '共通化可能1 l = 0: m = j k = 2 * l Do While (k <= m)
If k < m Then
If myArray(k + 1 + lngLow) > myArray(k + lngLow) Then k = k + 1 End If End If If myArray(l + lngLow) >= myArray(k + lngLow) Then Exit Do tmpArray = myArray(l + lngLow) myArray(l + lngLow) = myArray(k + lngLow) myArray(k + lngLow) = tmpArray l = k k = 2 * l Loop 'ここまで Loop Else For i = (lngCount \ 2) To i > 0 Step (-1) '共通化可能2 l = i: m = lngCount k = 2 * l Do While (k <= m)
If k < m Then
If myArray(k + 1 + lngLow) < myArray(k + lngLow) Then
k = k + 1 End If End If If myArray(l + lngLow) <= myArray(k + lngLow) Then Exit Do
tmpArray = myArray(l + lngLow) myArray(l + lngLow) = myArray(k + lngLow) myArray(k + lngLow) = tmpArray l = k k = 2 * l Loop 'ここまで Next i j = lngCount Do While j > 0 tmpArray = myArray(0 + lngLow) myArray(0 + lngLow) = myArray(j + lngLow) myArray(j + lngLow) = tmpArray j = j - 1 '共通化可能2 l = 0: m = j k = 2 * l Do While (k <= m)
If k < m Then
If myArray(k + 1 + lngLow) < myArray(k + lngLow) Then
k = k + 1 End If End If If myArray(l + lngLow) <= myArray(k + lngLow) Then Exit Do
tmpArray = myArray(l + lngLow) myArray(l + lngLow) = myArray(k + lngLow) myArray(k + lngLow) = tmpArray l = k k = 2 * l Loop 'ここまで Loop End If Screen.MousePointer = intMyPointer End Sub

No.32

ソート:シェルソート  投稿者:ゆう(U) [98/9/14(月)15:24分]

'シェルソート(Long版)
'Sorted(省略可能) = True :昇順(デフォルト)
'               False:降順
Public Sub sShellSort(ByRef myArray() As Long, _
                      Optional Sorted As Boolean = True)
  Dim i As Long, j As Long, k As Long
  Dim intMyPointer As Integer
  Dim lngGap As Long
  Dim lngLow As Long, lngHigh As Long, lngCount As Long
  Dim tmpArray As Long

  intMyPointer = Screen.MousePointer
  Screen.MousePointer = vbHourglass
  lngLow = LBound(myArray)
  lngHigh = UBound(myArray)
  lngCount = lngHigh - lngLow + 1
  lngGap = 1

  k = Int(lngCount / 3)
  Do While (lngGap < k)
lngGap = lngGap * 3 + 1 Loop If Sorted Then Do While (lngGap > 0) For i = lngGap + lngLow To lngHigh j = i tmpArray = myArray(j) Do While j >= lngGap + lngLow If myArray(j - lngGap) <= tmpArray Then Exit Do
myArray(j) = myArray(j - lngGap) j = j - lngGap Loop myArray(j) = tmpArray Next i lngGap = Int(lngGap / 3) Loop Else Do While (lngGap > 0) For i = lngGap + lngLow To lngHigh j = i tmpArray = myArray(j) Do While j >= lngGap + lngLow If myArray(j - lngGap) >= tmpArray Then Exit Do myArray(j) = myArray(j - lngGap) j = j - lngGap Loop myArray(j) = tmpArray Next i lngGap = Int(lngGap / 3) Loop End If Screen.MousePointer = intMyPointer End Sub

No.31

ソート:バブルソート  投稿者:ゆう(U) [98/9/14(月)15:24分]

前回のバブルソートですがちょっとしたバグが有りました。
(配列の添字が負の数を使用されていると正しい結果を返しません)

と言う訳で添字に負を指定されていても問題なく動作するものをUPします。

'バブルソート(Long版)
'Sorted(省略可能) = True :昇順(デフォルト)
'               False:降順
Public Sub sBubleSort(ByRef myArray() As Long, _
                      Optional Sorted As Boolean = True)
  Dim i As Long
  Dim j As Long
  Dim k As Long
  Dim intMyPointer As Integer
  Dim lngLow As Long, lngHigh As Long

  lngLow = LBound(myArray)
  lngHigh = UBound(myArray)
  intMyPointer = Screen.MousePointer
  Screen.MousePointer = vbHourglass

  Select Case Sorted
    Case True '昇順
      For i = lngHigh To lngLow Step -1
        For j = lngLow + 1 To i
          k = j - 1
          If myArray(k) > myArray(j) Then
            myArray(j) = myArray(j) Xor myArray(k)
            myArray(k) = myArray(j) Xor myArray(k)
            myArray(j) = myArray(j) Xor myArray(k)
          End If
        Next j
      Next i
    Case Else '降順
      For i = lngHigh To lngLow Step -1
        For j = lngLow + 1 To i
          k = j - 1
          If myArray(k) < myArray(j) Then
myArray(j) = myArray(j) Xor myArray(k) myArray(k) = myArray(j) Xor myArray(k) myArray(j) = myArray(j) Xor myArray(k) End If Next j Next i End Select Screen.MousePointer = intMyPointer End Sub

No.30

Re2:全画面表示  投稿者:ゆう(U) [98/9/14(月)11:56分]

別の方法としてフォームをScreenのサイズ()にあわせて最前面に表示する。

フォームのプロパティ(Meかフォーム名)
Width/HeightをScreenのサイズ(Width/Height)にする
WindowState = vbNormal(最大化すると・・・)
Moveable = False(移動不可でずらせない様にする)
MaxButton = False(最大化するとタスクバーやその他(Officeバーなど)の内になる)
BorderStyleを可変にしない(大きさを変えると隠しているタスクバーなどが見える)。
として
APIでフォームを最前面に表示にする(これはこのHPに使用例があります)

No.29

名簿管理(翔さんへ)  投稿者:ゆう(U) [98/9/14(月)11:55分]

コンボボックスなど共通項目の出力については、条件によって出力する方法を
考えて見て下さい。

1.男/女/男(女)/女(男)/中性など数件でしかも固定の物は
  コード(デザイン時にリストへ)で設定しておく。
2.部署課名など変化する可能性があるものはレジストリ(数十件程度)や
  INIファイルなど別の場所(ファイル)へ保存する。
3.データの先頭部分に共通項目をまとめて出力してから明細データを
  出力する(明細単位では出力しない)。

などの方法が考えられます。

なおVB初心者友の会でReがったユーザー定義型で配列にしておくと
Private Type myAAA
  No As Long
  Name_ As String
  Age As Long
End Type
Private Sub Command1_Click()
  Dim intFileNo As Integer
  Dim b(0 To 50) As myAAA
  Dim c() As myAAA
  Dim i As Long, j As Long

' サンプルデータを設定
  For i = 0 To 50
    b(i).No = i + 1
    b(i).Name_ = String(i, " ") & Chr(i + 65) & Format$(i, "000")
    b(i).Age = i + 10
  Next i
' サンプル出力
  intFileNo = FreeFile
  Open App.Path & "\TESTFILE.Bin" For Binary Access Write As #intFileNo
  Put #intFileNo, , i   ' レコード(データ)件数
  Put #intFileNo, , b   ' データ出力(一括)
  Close
' サンプルを入力
  intFileNo = FreeFile
  Open App.Path & "\TESTFILE.Bin" For Binary Access Read As #intFileNo
  Get #intFileNo, , i   ' レコード(データ)件数を取得
  i = i - 1
  ReDim c(0 To i)       ' データの領域確保
  Get #intFileNo, , c   ' データ入力(一括)
  Close
' テスト表示
  For j = 0 To i
    Debug.Print c(j).No; c(j).Name_; c(j).Age
  Next j
End Sub
こんな事も出来ます。
※あくまでサンプルです、大量データの場合はどうなるかはご自身で確認して下さい。

No.28

RE:全画面表示  投稿者:花ちゃん [98/9/14(月)7:28分]

タスクバーを非表示にして、フォームのBorderStyle=0にすればいいのでは
タスクバーを非表示にする方法は私のコーナーのこんなサンプルどこにあるの
他のプロセスとの連携のところにあります。

No.27

全画面表示  投稿者:IWA [98/9/14(月)0:46分]

初めまして,ひとつ教えてください
よくインストール画面などで,タスクバーも消えて画面真っ青っていうのありますよね
それはできますか?
もしあれば教えてほしいです

No.26

RE:I/Oの操り方    投稿者:花ちゃん [98/9/13(日)12:15分]

詳しくはしりませんが、Basicと同じ方法はできないのでは、だがやる事によっては
他の方法があると思います。
やりたい事を具体的に説明されれば、どなたかレスがあるかと思いますが?
VB友の会でもレスがないところをみれば!
私には、このぐらいしか返事ができません。ごめんなさい。
VB友の会のほうでレスを待って下さい。

No.25

RE:ダイヤルネットワーク  投稿者:花ちゃん [98/9/13(日)12:09分]

Private Sub Command1_Click()
  ret = Shell(Chr(34) & "C:\Program Files\Internet Explorer\IEXPLORE.EXE" & Chr(34), 1)
End Sub
これでは、だめですか?

No.24

ダイヤルアップネットワーク  投稿者:ダー [98年 9月 12日 (土) 22時 36分]

VBからダイヤルアップネットワークの接続ウィンドウを呼び出すには
どうすればいいんでしょうか?またその切断についても教えてください。

No.23

I/Oの操り方  投稿者:MARU [98年 9月 11日 (金) 23時 43分] http://www1.plala.or.jp/kazukun/

 BASICにあったI/Oの入出力 .OUT 64 * とか・・・・・

VBでできないんでしょうか??

No.22

忘れていました(^_^;)  投稿者:翔 [98年 9月 11日 (金) 0時 10分]

>ゆう(U)さん
質問に答えるのをてっきり忘れていました。

>すべて同じコンボボックスを出力するので保存していない
・・・が現実です。
そういう事なので、コンボボックスの利用も現在では、あきらめております。
友の会で1件のレスがありましたが、まだ試していません。
何かいい方法がありますか?

No.21

花ちゃん [98年 9月 09日 (水) 22時 20分]

先ほどのサンプル少し不親切でした、下記に訂正願います。
    Dim youb As String
    Dim w As Integer
    Dim nengetu As String
    youb = "日月火水木金土"
    nengetu = Text2.Text & "/" & Text3.Text
    w = WeekDay(DateValue(nengetu))
    For i = 1 To MATUBI
        If w = 1 Then
          '日曜日なので赤く
          Text1(i - 1).ForeColor = &HFF&
        Else
          Text1(i - 1).ForeColor = &H80000012
        End If
          Text1(i - 1).Text = Mid(youb, w, 1)
          w = w + 1
        If w = 8 Then w = 1
    Next i

No.20

花ちゃん [98年 9月 09日 (水) 21時 33分]

Deenさんごめんなさい。どうも私が勘違いしていたみたいですね
カレンダーじゃなく予定表のようなものを作成しょうとしておられるのですね。
それなら曜日の表示方法がメインですかね
    Dim youb As String
    Dim w As Integer
    youb = "日月火水木金土"
    w = WeekDay("1998/09/01")
    For I = 1 To MATUBI
        Text1(I).Text = Mid(youb, w, 1)
        w = w + 1
        If w = 8 Then w = 1
    Next I
こんなかんじでどうですか?

No.19

花ちゃん [98年 9月 09日 (水) 17時 38分]

Deenさん訪問ありがとうございます。
質問の件ですが、
普通の月別のカレンダーと同じように表示できればよいのでしたら
テキストボックスは31個では曜日を移動しなくてはなりません
だからテキストボックスは最低6段37個要ります。
そのテキストボックスは配列で作成します。
次に月の1日が何曜日かを求めれば最初に1を表示するテキストボックス
が判明します。
次に月の末日を求めればテキストボックスに表示する数が判ります。
9月1日が火曜日なら3個目のテキストボックスから1から順に連番を
次のように表示すればよいのでは!!
For I=曜日ー1 to 末日+曜日ー1 :Text1(i).text=I-曜日+2 :Next のように

曜日を求めるには w = WeekDay("1998/09/01") W=3 日曜=1

末日を求めるには次の式で求められます。 
matu = Day(DateAdd("d", -1, DateAdd("m", 1, DateValue("1998/9"))))

matu=30

ちなみに "2000/2" は matu=29 です。

この方法はここの掲示板にありますようにゆう(U)さんに教えて頂き
ました。
以上でよろしいでしょうか?
なお、祭日と春分の日と秋分の日はデータで持っていて参照する方が簡単ですよ
5年先になれば祭日だって増えていたり変更になっているかも知れませんからネ。
春分の日と秋分の日を求める計算式はあるのですが面倒です。

No.18

ゆう(U) [98年 9月 09日 (水) 16時 18分]

ユーザー定義型が同じ場合はLetが使用できました。
Let kari = Add
又はLetを省略して
kari = Add
でもOK。

以前作成したバブルソート用関数です。

以下コード
'テストコード
Private Sub Command1_Click()
  Dim myRec(9) As recSort       ' とりあえず10件
  Dim i As Long

  For i = 0 To 9
    With myRec(i)
      .Name = Chr(65 + i)
      .Number = i + 1
    End With
  Next i
  Call sBubleSort(myRec, False)
  For i = 0 To 9
    With myRec(i)
      Debug.Print .Number; .Name
    End With
  Next i
  Call sBubleSort(myRec, True)
  For i = 0 To 9
    With myRec(i)
      Debug.Print .Number; .Name
    End With
  Next i
End Sub
'↑フォームモジュールへ
'↓標準モジュールへ
Public Type recSort
  Name As String * 20
  Number As Integer
End Type
'↑モジュールレベルの宣言領域へ

'バブルソート関数
'Sorted(省略可能) = True :昇順(デフォルト)
'               False:降順
Public Sub sBubleSort(ByRef sortArray() As recSort, _
                       Optional Sorted As Boolean = True)
  Dim intMyPointer As Integer
  Dim i As Long, j As Long, k As Long
  Dim wkRec As recSort

  intMyPointer = Screen.MousePointer
  Screen.MousePointer = vbHourglass

  Select Case Sorted
    Case True '昇順
      For i = UBound(sortArray) To LBound(sortArray) Step -1
        For j = 1 To i
          k = j - 1
          If StrComp(sortArray(k).Name, sortArray(j).Name, vbTextCompare) > 0 Then
            wkRec = sortArray(k)        ' Swap
            sortArray(k) = sortArray(j) ' Swap
            sortArray(j) = wkRec        ' Swap
          End If
        Next j
      Next i
    Case Else '降順
      For i = UBound(sortArray) To LBound(sortArray) Step -1
        For j = 1 To i
          k = j - 1
          If StrComp(sortArray(k).Name, sortArray(j).Name, vbTextCompare) 

 

なにかの時にコードが削除されてしまったようですみません。
新しのをUPして頂いてますのでそちらを参考にして下さい。





No.17

Deen [98年 9月 09日 (水) 13時 34分] http://

曜日とデータを「月替わり実行」ボタンを押すと変わるようにするには、
どのような処理をすればよいのでしょうか?毎月31日あるわけでは
ないので最初から30日と31日と閏年の2月は28日の処理をして
おきたいのですがどのようにしたらよいでしょうか?私の作った画面は、
ホームの中は、何年何月と言う2つのテキストボックスとカレンダーの
ように日にちのテキストボックスを31個作りその横に曜日のための
テキストボックスを同じ数だけ作りそのとなりにはデータをもて得くる
ためのテキストボックスも同じ数だけあります。

No.16

ムヴ吉 [98年 9月 08日 (火) 17時 03分] http://

2台のパソコンをRS-232Cを使用してメッセージのやり取りをしたいのですが
どうもうまく行きません。
MSCOMMコントロールを使用して送受信を行なっているのですが、
メッセージ送信端末から送信はできるのですが受信ができません。
オンラインヘルプ等のサンプルを使用してもうまく行きません、どなたか良いお知恵を!

No.15

最新 100 件までのメッセージを掲示します。 どしどし、記入願います。

花ちゃん [98年 9月 07日 (月) 18時 34分]

ゆう(U)さんいつもご指導ありがとうございます。
ユーザー定義型が共有できるとは知りませんでした。
早速ためしてみたところうまくいきましたが、書き込みに時間がかかるような気がします。
もう少しテストして見ます。
又、翔さんへの回答ありがとうございます。
今後ともよろしくご指導の程お願いいたします。

No.14

ゆう(U) [98年 9月 07日 (月) 15時 30分]

>For I = 0 To 300
>  Print #1, DT_N(I) ・・名前
>  Print #1, DT_B(I) ・・住所
>  Print #1, DT_M(I) ・・メール
>  Print #1, DT_U(I) ・・TEL
>Next I

※Print #1, DT_N(I) & vbCrLf & DT_B(I) & vbCrLf & DT_M(I) & vbCrLf & DT_U(I)
 とすると若干早くなります(ファイルへ4回アクセスを1回ですむ)。

そもそもなんですが・・・

Print #だと

翔泳社(改行)
東京都新宿区舟町(改行)
sho@xxx.co.jp(改行)
03-5362-3832(改行)
ソフトバンク(改行)
東京都中央区日本橋(改行)
xxxxx@softbank.co.jp(改行)
03-5642-7272(改行)
:
:
というようにすべての項目で改行してしまいますが?

この場合出力しようとしているコンボボックスの内容が
1明細に付き複数件づつある場合、1明細のレコード数が
不確定になり、読み込みの処理時にかなり面倒になります。

ですからこの様な場合、前回の花ちゃん(さん)のReにある通り、
Write #で","区切りにして1明細1レコードとするのが一般的です。
(Printを使うとしても文字列変数で1度整形してPrint1回)
※この様な場合","がデータ中にあると後でタイヘンなので","を
 使用できなくするか、出力時に他の文字に置換して出力する。
(入力にはLine Inputで読み込んで自分で","で項目を切り出す)

あえてPrintで行うとするならコンボボックスのデータ件数を
出力し、その後コンボボックスのデータをPrintする。
(読み込む時の事を考えておく)

でもテキストのデータを配列で保存していると書いていますが
コンボボックスはどのように保存していますか?

1明細に付き複数項目で2次元配列?
それとも1明細1項目で同じように1次元配列?
それともすべて同じコンボボックスを出力するので保存していない?


VB初心者友の会でReするか迷ったんですが、元ネタがこちらみたいなので。

No.13

ゆう(U) [98年 9月 07日 (月) 12時 21分]

簡単ソートの方法

教室>どなたか、もっとスマートなソートプログラムを教えて下さい。

MSFlexGridなどソート機能を持ったコントロールを使用する
方法があります(思いっきり手抜きソート)。

メモリに余裕がある場合
1.読み込んだレコード+NumberをTab区切りでAddItemしてしまう
2.ソートしたいフィールドをCol、ソートプロパティでソートをする
3.ソート後のレコードをそのままPutして新ファイルを作成する。

メモリに余裕が無い場合

1.ソート用フィールドとNumberをAddItemする
2.は同じ
3.ソート後のNumberでGet/Putで新ファイルを作成


リストボックスコントロールの場合
SotedをTrueにしてソート対象のソートデータをAddItem、
レコード番号をItemDataに保存する。

AddItem直後ソート済みのレコード番号がItemDataに入るので
昇順(先頭から)/降順(末尾から)で取り出せばOK。

っと思ったんですが、これには重大な欠陥がありました・・・

Sorted=Trueの場合ItemDataの値はソート値が同じリストの
場合ItemDataが0になってしまいます。


という事は、ItemDataを使用しなければOKなので・・・

どうせ見せないコントロールなので
AddItem Field & Format$(Number,"00000")
の様にしてList値にそのままセットして取出し時に
Rightを使ってNumberを取出せばOK。


※リストボックスの場合32767件目でエラーとなりました。
 レコードMax(RCNoも)がIntegerなので問題はないと思います。

 MSFlexGridの場合(ソートフィールド+Number)
 16万件までは試したのですが中止しました(メモリ次第なので)、
 その時のソートは数秒でできました、但しAddItemに時間がかかるので
 総時間は結構な待ちになります。
 (コードはAddItem以外はlngCount = lngCount + 1だけのDo〜Loop)

 まっ、16万件のレコードを読む時間を考えると、どれくらいの
 ウエイトをしめるかはコード次第かな〜?って感じですか。

 ソート可能なコントロールは他にもあるかもしれませんが・・・


他に気づいた点)

>'仮ファイル用
>Private Type Addkaridat
これは
>Private Type Addressdat
を共用してもOKだと思います、その方が修正などの管理が楽。
(Public kari As Addressdat)

With Add
 kari.kari01 = .yomi
  :
  :
 kari.kari14 = .syus
 Put #2, I, kari
End With

はLSetが使えます(速度的には分かりません)。
LSet kari = Add
これの為にもユーザー定義型を共用した方が・・・


※ランダムファイル(バイナリ)をあまり理解していないので
 違うかもしれませんが・・・

新規に作成する場合バイナリでそのままPutで良いような
(インデックスは特に関係ないので)
>Get #2, I, kari        'これの部分が要らなくなる?
>With Add
>  :
>  :
> Put #2, I, kari
>End With

最後に、指定した年月の末日を求める(別の方法)について
1996年2月28日を
1996年2月29日に
訂正していただけませんか?
掲示板と月の末日を求める(うるう年を調べて)の両方とも。

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

No.12

[98年 9月 06日 (日) 23時 08分]

ご教授ありがとうございますm(__)m
ある程度解りましたが、質問の仕方が悪かった様です(^_^;)

実は、住所録ならぬ名簿管理ソフトを作っているのですが
複数の項目を
Dim DT_N(0 To 300) As String
Dim DT_B(0 To 300) As String
Dim DT_M(0 To 300) As String
Dim DT_U(0 To 300) As String
・・という様に変数をつかっています。
そこで
Open CommonDialog1.filename For Output As #1
    
   For I = 0 To 300
        
            Print #1, DT_N(I) ・・名前
            Print #1, DT_B(I) ・・住所
            Print #1, DT_M(I) ・・メール
            Print #1, DT_U(I) ・・TEL
  Next I
  Close #1
・・としているのですが、上の4項目だけだと
テキストボックスに入力した情報だけなので簡単なのですが
ここへコンボボックスを入れて、ユーザーがコンボボックスの
リストへ入力したした項目もすべてテキスト保存したいのですが
可能でしょうか?
      Print #1, DT_C(I) ・・追加したいコンボの分

・・としてもコンボボックスの最初に書いてあるテキストしか
保存されていません。宜しくお願いいたします。

No.11

花ちゃん [98年 9月 05日 (土) 23時 38分]

翔さん、訪問ありがとうございます。
ここの掲示板は、花ちゃんを困らせるような、難しい質問以外なら
なんでも結構です。
質問の ”ComboBoxのリストを同じ様にテキストに保存したい”ですが

Private Sub Command1_Click()
    Open "tesuto.tex" For Output As #1
    Write #1, Combo1.List(0), Combo1.List(1), Combo1.List(2)
    Close #1
End Sub

これで一応リストの内容がテキストファイルに保存されます。
質問の内容を勘違いしていたら、ごめんなさい。

No.10

[98年 9月 05日 (土) 1時 43分]

はじめまして、VB初心者です。
凄いところですね!左のメニューを上から下まで隈無く読ませて
頂きました。本当にわかり易く説明してあり初心者の私にとっては
いい勉強になります。

ところでここで質問していいのかわかりませんが、
ファイルをテキストに保存したいのですが、テキストボックスの
テキストは下のコードで保存できるのですが、
ComboBoxのリストを同じ様にテキストに保存したいのですが
下のコードにどの様に書き加えればいいのでしょうか
あつかましく長文の質問になりましたがよろしくお願い致しますm(__)m

 Private Sub save_Click()
  CommonDialog1.ShowSave
   Open CommonDialog1.filename For Output As #1
 Print #1, Text1.Text
 Print #1, Text2.Text
   
   Close #1
   End Sub

No.9

ゆう(U) [98年 8月 17日 (月) 22時 42分]

指定した年月の末日を求める(別の方法)
日付の計算をすべてVBの関数で行う方法です。
日付型を使用します。

Dim dt As Date
Text1.Text = "H 8/2"    ' サンプルとして平成 8年 2月を設定(1996/2でも同じ)
dt = DateValue(Text1.Text)      ' H 8/2→1996年 2月 1日になります(自動で1日設定)
dt = DateAdd("m", 1, dt)        ' 1996年 3月 1日(翌月1日)
dt = DateAdd("d", -1, dt)       ' 1996年 2月29日(翌月1日の前日→当月末日)

Debug.Print format$(dt,"末日は ddです。"); dt

'1行で書いた場合
dt = DateAdd("d", -1, DateAdd("m", 1, DateValue(Text1.Text)))

ただしこの方法は日付型を使用するため100年1月〜9999年11月の範囲しかできません。

● 9999年12月の翌月を設定できないので9999年11月までです

No.8

最新 100 件までのメッセージを掲示します。 どしどし、記入願います。

にぃ [98年 8月 15日 (土) 15時 11分]

花ちゃんさん、お手数おかけしてすみませんでした。
ちょっと希望の光がさしてきたような・・・。
がんばってみます。
ほんと、ありがとうございました!!

No.7

花ちゃん [98年 8月 15日 (土) 0時 55分]

フォームにピクチャーコントロールを貼り付けClickイベントにでも下記コードを書いて下さい
上2行は楕円を書いています
下2行は縦の線を書いています
数値を変えて確認して下さい

Private Sub Picture1_Click()
  Picture1.Circle (500, 500), 200, , , , 0.5
  Picture1.Circle (500, 900), 200, , , , 0.5
  Picture1.Line (300, 500)-(300, 900)
  Picture1.Line (700, 500)-(700, 900)
End Sub

これでよかったのですかね!

No.6

花ちゃん [98年 8月 14日 (金) 23時 22分]

メッセージを見るをクリックするか、スクロールバーで下の方見て下さい
先ほどの回答の補足ですが
楕円を描くにはCircleメソッドを線を描くには、Lineメソッドを使います
又点を描画するには、Psetを使います。
詳しい使用方法はヘルプで確認して下さい。

No.5

にぃ [98年 8月 14日 (金) 21時 30分]

こんばんわ。
早速質問です。
グラフィックについて教えて下さい。
卒論書くのに、これができないと全然だめなのにぃ〜っ!!
って感じなんですけど・・・。
こんな漠然とした言い方じゃ、だめですね・・・(笑)
例えば「円柱」の書き方とかは、どんなプログラムにすればいいですか?

No.4

花ちゃん [98年 8月 14日 (金) 20時 26分]

   私もグラフィックは得意ではありません。
   円柱を書くにはShapeコントロール2個で上下に楕円を書き
   ラインコントロールで両端を結ぶ方法はだめですか?
   プログラムを起動しなくてもデザイン時描画状態が確認できます。
   その時のプロパティのデータをプログラムで書いたらできると
   思いますが?
   画面に表示するだけなら、前記の方法は3分位でできます。

No.3

にぃ [98年 8月 14日 (金) 19時 29分]

はじめまして。
私は、今、卒業論文を書くためにVBを勉強中のにぃです。
花ちゃんさんのHPはVB友の会で見つけて来てみました。
よろしくです(^^)
(ってここは、こういうこと書くとこじゃないのかな・・・?)

で、9月中には卒論を仕上げてしまわないといけないのに、まだ全然って感じで・・・。
基本的にプログラミングが得意じゃないので、苦労苦労の毎日です。(^^;
いろいろ質問に答えてもらえたらなぁ・・・って思ってます。
早速、質問しちゃいます。
VB友の会のほうにも質問したんですが、
グラフィックについて教えていただきたいんです。
とりあえず、書き方が全然わかんなくって・・・。
例えば、「円柱」の書き方なんかはどうすればいいんですか?
ほんと初心者な質問でごめんなさい。

No.2

花ちゃん [98年 8月 13日 (木) 19時 26分]

  これってフォームを常に前面に表示しておくってことですよね
  それならAPI関数を使ってできます。
  簡単なサンプルを、画面・文字等の表示の中にUPしておきました。


No.1

MARU [98年 8月 13日 (木) 18時 01分] http://www1.plala.or.jp/kazukun/

フォームを常に最前面に(デスクトップ上で)するってどうするんですか?

次のログ


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