トップページ⇒tech
1001コメント310KB

(*´д`*)アハァ… VB初心者質問スレ Part22

■ このスレッドは過去ログ倉庫に格納されています
0001HTML化チェック済みNGNG

  Part12 http://pc3.2ch.net/tech/kako/1026/10266/1026642565.html
  Part13 http://pc3.2ch.net/tech/kako/1029/10292/1029241786.html
  Part14 http://pc3.2ch.net/tech/kako/1030/10309/1030947162.html
  Part15 http://pc3.2ch.net/tech/kako/1032/10327/1032706491.html
  Part16 http://pc3.2ch.net/tech/kako/1034/10343/1034302532.html
  Part17 http://pc3.2ch.net/tech/kako/1036/10361/1036154952.html
  Part18 http://pc3.2ch.net/tech/kako/1038/10381/1038103769.html
  Part19 http://pc3.2ch.net/tech/kako/1039/10398/1039859691.html
  Part20 http://pc2.2ch.net/tech/kako/1041/10418/1041879465.html
  Part21 http://pc2.2ch.net/test/read.cgi/tech/1044028945/

VB.net関連スレ
【老若】VB.net質問スレ【男女】 (Part2)
http://pc2.2ch.net/test/read.cgi/tech/1043629429/

心得
壱.質問する前に過去ログにも目を通してみる。
弐.質問する前に MSDN などで調べてみる。
参.VBScript もこのスレでOK。
四.インストーラーなどの質問もOK。
五.下ネタもたまにならOK。
0562デフォルトの名無しさんNGNG
文字列をSJISメインで扱いたいならByte型配列に入れればよい。
0563550NGNG
>>561
> なら最初から書け。

的はずれな質問して何怒ってるの?

>文字列を SJIS で持っていなければならない状況というのがわからんのだが・・・。
バカかおまえは?
"dD"とか全角半角混在してる文字列からバイトで取得するのにどうやってUnicodeで取得するんだ?
Debug.print LenB("あ")
Debug.print LenB("A")
として違う値が取れるのか?

> しかし、「関数」 だの 「教えてくれ」 だの言うあたり、自分で調べたり作ったりする
> つもりは全く無いのね。

お前は共通に有ったりしても自分で関数を作るのか?
用意されている物があればそれを使うのが普通

もう解決してるからおまえは書かなくていいよ(ワラ
0564550NGNG
>>560
ASCをつかってもいいんですけど
そのRightが正しく1文字を返さないんですよSJISだと
0565デフォルトの名無しさんNGNG
春ですなあ
0566デフォルトの名無しさんNGNG
>>564
申し訳ないが、ascを使って正しく一文字返さないコードをだしてくれないでしょうか?
0567デフォルトの名無しさんNGNG
正直、550 が何に癇癪起こしてるのかわかんねー。
551 も書かなきゃ良かった。
0568デフォルトの名無しさんNGNG
>>563
> > なら最初から書け。
>
> 的はずれな質問して何怒ってるの?

そりゃ怒るでしょ。
ひょっとしてあんた、礼儀を知らないヒッキーさんですか?
0569デフォルトの名無しさんNGNG
ぬるぽキタ━━━━━(゚∀゚)━━━━━!!!!
0570デフォルトの名無しさんNGNG
>>566
>>544 を見れば、何でこんなアフォな話になったかわかる。
0571デフォルトの名無しさんNGNG
以下のようなソースで優先度を上げてプログラムを実行したいのですが

Declare Function GetCurrentThread Lib "kernel32" () As Long
Declare Function GetThreadPriority Lib "kernel32" (ByVal hThread As Long) As Long
Declare Function SetThreadPriority Lib "kernel32" (ByVal hThread As Long, ByVal nPriority As Long) As Long
Public Const THREAD_PRIORITY_HIGHEST = 2

ソース
Dim Get_TH As Long
Dim Get_PR As Long
Dim Set_TH As Long
Dim Set_PR As Long
Dim Set_RC As Long

Get_TH = GetCurrentThread
Get_PR = GetThreadPriority(Get_TH)
Set_TH = Get_TH
Set_PR = THREAD_PRIORITY_HIGHEST
Set_RC = SetThreadPriority(Set_TH, Set_PR)

実行後、タスクマネージャみても上がってないょ(´・ω・`)

MSDN見ると
Windows NT: このハンドルは、THREAD_SET_INFORMATION アクセスを持っていなければなりません。

って書いてあるんだけど、これに関して調べても見つからないょ・・・

解かる人いませんか?
0572571NGNG
あ、環境はWin2000(SP2)+VB6(SP5)です。
0573デフォルトの名無しさんNGNG
>>571
スレッドを作るときに設定できるアクセス権の話?
既に存在するスレッドのアクセス権を変更できるかは知らんけど。
0574デフォルトの名無しさんNGNG
>>573
スレッドって、マルチタスクOSで言うところのスレッドのこと?
それとも、BBSのスレッドのこと??
0575デフォルトの名無しさんNGNG
>>574
お前ここにスレ立てるときアクセス権なんぞ設定したか?
まぁ、権利関係は確かに存在するか・・・。
0576デフォルトの名無しさんNGNG
>>575
釣れた(w

(^▽^)
0577デフォルトの名無しさんNGNG
>>576
釣れた(w

(^▽^)
0578デフォルトの名無しさんNGNG
>>577
釣れた(w

(^▽^)
0579デフォルトの名無しさんNGNG
        /  -‐‐‐‐‐‐‐--´´ ̄ ''''''''''''''''''''''''ー‐----、/
      /   ノ   ▲                 ヽ  ̄ ̄
     .i´    i´     ■  ∧               ヽ
     i    i      ■  .i.●i      ;::;:;:;:;       ヽ
    i     i     ■  ∨ノ   ,-、 ;:;:;/ノヾヽ    ;:;:i
    i     `、    ‐-   ー    ・ ;:;:;《 |  | )   ;:;:;:;::i
    i     ´´    -‐   ‐    ・ ;:;:;:《 |  | )   :;:;:;:;:;)
     i     i     ■  ∧ヽ  `‐´ ;:;丶ヽノノ    :;:;:;::i
     .i    i     .■  i.●i      ;:;;:;::       ;:;:;i 
     i、    i     ■  ∨                ノ
      ヽ   `ゞ   .▼                 /  _
       ヽ、    ‐‐‐‐‐‐‐‐‐‐、____,,,,,,,,,,,,,,,,,,,,,,,,,----‐‐‐ヽ
ニキータ
0580516NGNG
色々とありがとう御座いました(^▽^
スクリプトコントロールはつかったことないので、ためしてみようかとおもいます。
0581540NGNG
春だなぁ。
ま、風物詩と思えば腹も立たんか。

>>571
漏れが昔書いたソースだと

  hThread = GetCurrentThread()
  ret = SetThreadPriority(hThread, THREAD_PRIORITY_HIGHEST)

こんなんで動いてるな。

  hProcess = GetCurrentProcess()
  ret = SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS)

こーいうのも動いてる。Win2Ksp3+VB6sp5。
0582デフォルトの名無しさんNGNG
VBの DHtmlEdit コントロールで ボタンやテキストボックス などを
貼り付ける方法 ご存知の方いらっしゃいますか

また DHtmlEdit の使い方が説明されているHPも
お願いします
0583デフォルトの名無しさんNGNG
VB6からUnixTime(1970/01/01 から数えた秒数)を求めたり
日付時間を指定してそのUnixTimeを作ったりしたいのです。
2chのスレッドIDの決定もこれですよね。

単に秒数を求めればいいのではと思ったのですが
うるう年とかいろいろあってもうどうしたらいいやら、です。
0584583NGNG
訂正

VB6からUnixTime(1970/01/01 から数えた秒数)を求めたり
UnixTimeから日時時間を求めたりしたいのです。
(要は Date型<->UnixTime の相互変換関数が作りたい)
0585デフォルトの名無しさんNGNG
>>584
DateDiffで調べれ
0586583NGNG
>>585
時間差を秒で返させればいいのね?
ちょいと試してみます。激しく感謝。
0587デフォルトの名無しさんNGNG
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/saitama/
0588デフォルトの名無しさんNGNG
>>583
time_t ですよね。
わたしならCでDLL作るかな。
0589ひきプロNGNG
>>583
'time_tから文字列へ変換
Public Function GetTimeString(time_t As Long) As String
Dim t As Long, leap As Long, year As Long, month As Long, day As Long, hour As Long, minute As Long, second As Long, s As String, i As Long
Dim m(1 To 12) As Long '各月の日付を入れる
m(1) = 31: m(2) = 28: m(3) = 31: m(4) = 30: m(5) = 31: m(6) = 30: m(7) = 31: m(8) = 31: m(9) = 30: m(10) = 31: m(11) = 30: m(12) = 31
t = time_t
leap = Int(((t / 31536000) + 1) / 4) 'うるう年でずれた日数の計算
year = ((t - leap) \ 31536000) '年の計算
year = year + 1970 '1970年から足す
day = ((t Mod 31536000) \ 86400) - leap '日の計算
hour = (t Mod 86400) \ 3600 '時間の計算
minute = (t Mod 3600) \ 60 '分の計算
second = (t Mod 60) '秒の計算
If (year Mod 4) = 0 Then '2月の日数を計算
m(2) = 29
If (year Mod 100) = 0 Then
m(2) = 28
If (year Mod 400) = 0 Then m(2) = 29
End If
End If
0590ひきプロNGNG
day = day + 1 '1月1日からの経過日数から月・日を求める
For i = 1 To 12
If day > m(i) Then
day = day - m(i)
Else
month = i
Exit For
End If
Next
hour = hour + 9 'UTCから日本の時間分足す
s = year & "年" & month & "月" & day & "日 " & hour & ":" & minute & ":" & second
GetTimeString = s
End Function
0591デフォルトの名無しさんNGNG
>>589
なんでお前はそんなクソ関数作るんだ?
?datediff("s",#1970/01/01 00:00:00#,#1970/01/02 00:00:00#)
?dateadd("s",86400,#1970/01/01 00:00:00#)
0592デフォルトの名無しさんNGNG
time_t = DateDiff("s", #1/1/1970#, dtmVB) - 32400 'JST - 9

これでいいんじゃなかったっけ。
0593ひきプロNGNG
ショック!
0594デフォルトの名無しさんNGNG
VBとはちょっと違う畑の質問になるかもしれませんが
とあるDLLの中の関数の名前一覧を知る方法ってないでしょうか?

VB用の関数仕様の資料はあるのに「その関数が入っているDLLの名前」だけが
書いてない…。
0595デフォルトの名無しさんNGNG
export されてんなら Dependency Walker とかで見れば。
0596594NGNG
>>595
有難うございましたm(_ _)m

ついでにもうひとつ質問なのですが
aaa.DLL内のbbbという関数について、

標準モジュールxxxで
Public Declare Function ccc Lib "aaa" Alias "bbb" _
(ByVal 引数 As String, _
) As Long
と記述し、フォームのコードで
Ret_Stats = xxx.ccc(引数)
として呼び出しているのですが、いざ実行すると「ファイルが見つかりません。"aaa"」と
エラーが出てしまいます。
一応aaa.DLLは C:\Program Files\Microsoft Visual Studio\VB98 に放り込んであるのですが
DLLってどこか特定の場所にある必要があるんでしょうか?

0597デフォルトの名無しさんNGNG
>>596
環境変数Pathにないパスなら、Declare宣言でフルパス指定しる。

Public Declare Function ccc Lib "C:\Program Files\Microsoft Visual Studio\VB98\aaa.dll" Alias "bbb" _
(ByVal 引数 As String, _
) As Long

パスが通っているフォルダに配置されているなら、

Public Declare Function ccc Lib "aaa" Alias "bbb" _
(ByVal 引数 As String, _
) As Long

で問題なし。
0598571NGNG
>>581
お返事ありがとぅ

でも、そのソース組み込んだEXE実行しても
タスクマネージャの基本優先度は通常のままだょ・・・

も う だ め ぽ (´つω・`)
0599デフォルトの名無しさんNGNG
>>598
タスクマネージャでの優先度表示はプロセスの優先度だったよーな…。
スレッドの優先度を見たいならSpi++でも使ってみて。

プロセスの優先度がまずあって、その中でスレッドの優先度が細分化
されてる、ってな感じだったかと思う。
0600デフォルトの名無しさんNGNG
>>599
sp"y"++

>>569
ガッ
0601571NGNG
うわあーいヽ(=´∇`=)ノ、できたょ!

単に
HIGH_PRIORITY_CLASS
の初期値がダメなだけでした・・・

答えてくれた方々、本当にありがとうございました
0602デフォルトの名無しさんNGNG
以下の方法が最善かと
開発環境 → Systemディレクトリ
EXE実行 → EXEファイルと同じ場所

Declare の DLL名 のところはファイル名だけでOK
0603596NGNG
>>597,602
ありが�d。
やっぱそーだよね。
でも漏れのPCだと、それやっても
同じエラーになるんだよ…なんでだろ?
0604602NGNG
>>603

もしやそのDLL VBで作ったやつ?
VBで作ったDLLは Declare で宣言できないよ
0605デフォルトの名無しさんNGNG
>>604
なぬぅ
資料によるとVB4で作ってるらしいのだが…。
(こっちの開発PCはVB6)
「参照設定」で指定しようとしても
「指定されたファイルへの参照は登録できません」
て出るし。

てことは、八方塞がり!?
0606602NGNG
>>605
もし DLLのソースがあるのなら再度コンパイル

無かったら REGSVR32.EXE でレジストリから消してから再度登録?
REGSVR32.EXE の 使い方は Windowsディレクトリ を REGSVR32.EXE で検索して実行してみぃ

ちなにに REGSVR32.EXE は ActiveX をレジストリに登録解除するも
0607583NGNG
>>588-592
何か流れで直にソースまで出てるしっ・・・
お陰で文句付けようのない動作してます。
どうもありがとうございました。
0608デフォルトの名無しさんNGNG
すみません、質問させてください。
下のような感じで、AddDataが呼ばれるたびに
構造体の動的配列の要素数を1つ増やしてデータを入れていくということをやりたいのですが、
このままだと、u(1)から値が入るようになってしまいます。
u(0)から値を代入していくにはどのようにすれば良いのでしょうか?

Type USER
x As String
y As String
End Type

Dim u() As USER

Public Sub InitData()
'初期化
ReDim u(0) As USER
End Sub

Public Sub AddData(s1 As String,s2 As String)
ReDim Preserve u(UBound(u) + 1) As USER
u(UBound(u)).x = s1
u(UBound(u)).y = s2
End Sub

String型だと初期化のところでu=Split("")とやれば空の配列が作れると言うのを
ネット上で見たのですが、構造体の場合はどうすればよいのでしょうか?
よろしくお願いします。
0609デフォルトの名無しさんNGNG
>>608
プロシージャ内に静的変数入れて、条件分けしる。
0610デフォルトの名無しさんNGNG
ReDim u(-1 to -1) As USER

とやれば、一応空(のように見える)配列ができるぞ。
あんまし意味無いけど…。
0611デフォルトの名無しさんNGNG
visual basic は買わないと手に入らないですか?
買うならいくらぐらいですか?
0612デフォルトの名無しさんNGNG
>>610
分かっていると思うけど配列の大きさは1だね。
u(-1)としてアクセスできる。
0613608NGNG
>>609
>>610

ありがとうございます。やってみます。
0614デフォルトの名無しさんNGNG
>>608
Type USER
x As String
y As String
End Type

Dim u() As USER
Dim f As Boolean

Public Sub InitData()
'初期化
ReDim u(0) As USER
f = False
End Sub

Public Sub AddData(s1 As String, s2 As String)

If f Then
  ReDim Preserve u(UBound(u) + 1) As USER
End If
u(UBound(u)).x = s1
u(UBound(u)).y = s2
f = True
End Sub
0615デフォルトの名無しさんNGNG
>>608
構造体じゃなくてクラスにしてコレクション使うって手もあるけどな。
0616608NGNG
条件分けすることによりできました。
みなさん親切にありがとうございました。
0617デフォルトの名無しさんNGNG
>>611
買わなくても手に入る場合がある。
0618デフォルトの名無しさんNGNG
そういやCCEってまだ手に入るのかな?
0619デフォルトの名無しさんNGNG
pictureをクリックした時に音を出すにはどうしたらいいですか?
0620デフォルトの名無しさんNGNG
>>619
イベントドリブンの基礎です。
0621デフォルトの名無しさんNGNG
>617

つう(r
0622デフォルトの名無しさんNGNG
>>621
>>618のフォローが理解できないなら(略
0623デフォルトの名無しさんNGNG
>>620
なんてやつですか?
0624デフォルトの名無しさんNGNG
>>623
イベントドンブリの基礎です。
C丼( = オブジェクト指向イベントドンブリ言語)で勉強してください。
0625デフォルトの名無しさんNGNG
お聞きしたいのですが
16進数のことがいまいち分からなく

a * 256
を十六進数であらわすと
a and &hFF
でいいのでしょうか。
0626デフォルトの名無しさん NGNG
>>625
Debug.Print で、お試しあそばせ
0627デフォルトの名無しさんNGNG
hex(256)
0628ひきプロNGNG
積算と論理積は同じモノではないような気が
0629デフォルトの名無しさんNGNG
お返事ありがとうございます。
まだまだ勉強が足りないようです。
実際には以下の式を16進数であらわしたいと思っています

Int(a / 65536)

BitwiseAnd(a / &h10000, &hFFFF)

この二つはおんなじ効果でしょうか?それとも微妙に数字がかわってくると考えた方がいいでしょうか。
0630デフォルトの名無しさんNGNG
>>629
REALBasicのほうで聞いては?
0631デフォルトの名無しさんNGNG
Mac板のREALbasicスレで以前お聞きしたのち
いろいろ探っていたんですが、微妙に違うのではないかと
int()関数さえあればこんな悩まなくてすむのですが,,,
0632デフォルトの名無しさんNGNG
>>625
ぜんぜん違う。

>>629
違う。
それに、BitwiseAnd()は、VB.NETの関数だろ? スレ違いだ。
0633デフォルトの名無しさんNGNG
>>631
違うのではないかという根拠は?
0,0,0,0から255,255,255,255までの数をチェックすればわかることですが。
(from REALbasicスレより)
0634632NGNG
VB.NET じゃなくて、.NET Framework か。

>>631
C言語のビット演算について調べみたら?
0635デフォルトの名無しさんNGNG
ありがとうございます。
Cのビット関数で検索してみます。
0636デフォルトの名無しさんNGNG
失礼します。VBど素人です。
Sendkeysを使わないで「元に戻す」をできるようにするには
どのようにしたら良いでしょうか。
宜しくお願いします。
0637デフォルトの名無しさんNGNG
>>636
何を元に戻すのだ
0638デフォルトの名無しさんNGNG
Sendkeys"^z" と同じことを別の方法で出来ないかということです。
0639デフォルトの名無しさんNGNG
>>638
http://www.remus.dti.ne.jp/~y-mac/teclib/textundo.htm
0640636NGNG
>>639
ありがとうございます!
0641デフォルトの名無しさん NGNG
ずっと気になってたんだけど・・・




(*´д`*)アハァ…

↑
このつの名前なんですか?
0642デフォルトの名無しさんNGNG
>>641
あなたの脳内で命名してやって下さい。
06431 ◆ExGQrDul2E NGNG
>>641
ビスケタン
半角二次元版にビスケスレがある。
0644デフォルトの名無しさんNGNG
WindowsXPProSP1 + VB6SP5 の環境で
SHGetValue で REG_DWORD の型の値を取得すると
どんな値でも0になってしまいます。

SHSetValueは正常にセットされるのですが・・・

0645デフォルトの名無しさんNGNG
SuperTagEditorみたいな直接編集できるGridは
VBでは無いのでしょうか。

FrexGridにTextbox移動させて重ねるしかないのでしょうか。
0646デフォルトの名無しさんNGNG
>>625
a shr 8
0647デフォルトの名無しさんNGNG
>>644
データとコード吊るせ! 話しはそれからだ。
0648644NGNG
ソースです。

環境はWindowsXPProSP1 + VB6SP5
testidに数値がセットされていても0が返ってきてしまいます。
よろしくお願いします。

Private Sub DispInfo()

'レジストリから値を取得
Dim lngData As Long

lngData = 0
Call SHGetValue(HKEY_CURRENT_USER, _
"Software\test", _
"testid", _
REG_DWORD, _
ByVal lngData, Len(lngData))

If lngData <> 0 Then
debug.print lngData
End If

End Sub
06491 ◆ExGQrDul2E NGNG
>>641
アポ
0650デフォルトの名無しさんNGNG
VBスレマスコットのこいつ↓
(*´д`*)アハァ…
只今、名前募集中です。

ちなみに、こんなカスタマイズどうよ?

  v(*´д`*)b <アハァ…
0651デフォルトの名無しさんNGNG
ブビタン
0652デフォルトの名無しさんNGNG
>>650
玉造
0653デフォルトの名無しさんNGNG
ブビタンいいね!
語尾はもちろん「ブビ」で。
まだまだ募集中です。
次スレの1でお披露目といきましょうか。
0654デフォルトの名無しさんNGNG
>>653
ヴォボタン
(一部地方放送禁止)

0655デフォルトの名無しさんNGNG
>>648
Len()は文字列の長さを返す。
Long型の整数に使うのは無茶苦茶。
しかし、そんなレベルでよくAPI使うなあ。
0656デフォルトの名無しさんNGNG
>>655
…?
0657655NGNG
>>648はこんなの書いてる。
Dim lngData As Long
Len(lngData)
debug.print lngData
0658デフォルトの名無しさんNGNG
>>648
何故肝心のDLL宣言を示さない!
何故戻り値を見ない!
ポインタの意味を勉強汁!

Dim lngData As Long
Dim dwRet As Long
Dim dwType As Long
Dim cbData As Long

dwType = REG_DWORD
cbData = Len(lngData)

lngData = 0
dwRet = SHGetValue(HKEY_CURRENT_USER, _
"Software\Microsoft\Dialer", _
"Folders", _
dwType, _
lngData, cbData)
0659デフォルトの名無しさんNGNG
>>655
Len 関数

指定した文字列の文字数または >> 指定した変数に必要なバイト数 << を表す長整数型 (Long) の値を返します。
0660658NGNG
>>655 ヾ(・・;)
0661デフォルトの名無しさんNGNG
>>636
KeyPressイベントでKeyAscii=26
ま、冗談だけどな。
■ このスレッドは過去ログ倉庫に格納されています