モナーの *やさしい* Delphi質問スレ Ver.7
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001Delモナー ◆fPymXWHY
NGNG( ´∀`)<. Delモナーがどんな厨房疑問でもやさしく答えます。
( ) .| Delモナーは時に私であり、時には別の人。
| | | | 他のスレに書き込んで罵倒される前に、まずここで質問しよう。
(__)_) \_________________________
前スレ モナーの *やさしい* Delphi質問スレ Ver.6
http://pc.2ch.net/test/read.cgi/tech/1019134412/
前スレが埋まるまでは書き込まないで
(あるいはsage進行にして)ください。
>>2-10あたりに関連情報あり
○過去スレ >>2
○関連スレ >>3-5
○Delphi製品情報 >>6
○関連リンク >>7
○質問者へ・回答者へ >>7
○ソース置き場案内 >>8
0939909です
NGNGごめなさい〜ほんと、endがなかったです。申し訳ありません
ほんとの素人とは私です......
0940デフォルトの名無しさん
NGNG私の認識としては mdbを使う場合、Access自体かAccessのランタイムが必要になる
であろうと考えておりました、実験してみると、やはりAccessが入っていないPCでは
mdbへアクセス出来ませんでした。
ここまでは予想していた通りだったのですが、実はOfficeのDeveloper版を購入してあり、
AccessRTのセットアップでAccessのランタイムをインストールすると見事にD6で作成
したプログラムが実行できましたが、Accessのランタイムをアンインストールした後も
実行出来る事が判りました。D6からmdbを使う場合にはAccessのランタイムをインストール
しなくても何かDLLをコピーするだけで使えるのでしょうか?
mdb(Access)側でVBAを使うでもなく、単にDelphiのISAMファイルとしてmdbを
利用したいだけなのですが・・・。
0942940
NGNGhttp://www.microsoft.com/japan/msdn/data/download.asp
ここから取ってきてインストールするだけでした、
これを再配布して良いのか悪いのかイマイチ不明ですが、とりあえずAccessランタイム無くても解決しました。
この構成でmdbの最適化(サイズを小さくするやつ)ができるのか不明ですが、これから試してみます。
0943デフォルトの名無しさん
NGNGDBをアプリで使う&配布を簡単に済ませたい場合は
MyBaseしかないかなーと思いこんでいたからAccess+ADOは
盲点だった&ちょっと注目してる。
この方法だとAccessさえ持ってればアプリで作成したデータを
Accessで好きなように加工/メンテ/他形式への変換ができるから
作り込むアプリの機能を最低限で済ませられるメリットがあるのが
良いね。
もしよかったら今後も経過報告してくれるとうれしい。
0944デフォルトの名無しさん
NGNG0945デフォルトの名無しさん
NGNGprocedure sub(var x:Integer);
begin
x:= x*x;
end;
と、どこかに書きます。 コンパイルしてエラーが出るなら書く場所が違うので移動
0946デフォルトの名無しさん
NGNG0947デフォルトの名無しさん
NGNGそれを呼び出すにはどうすれば良いんでしょうか?
sub(nil);だとエラーが出ます。
0948デフォルトの名無しさん
NGNGIntegerにnilを渡しちゃだめ。
変数パラメータに定数を渡しちゃだめ。
procedure sub(x: Integer); とすれば、
sub(0); で呼び出し可能。でも計算結果は戻ってこない。
てか、これはマジな質問なのか?
0949デフォルトの名無しさん
NGNGライセンス
http://www.microsoft.com/JAPAN/msdn/data/download/mdac/26/26eula.htm
0950デフォルトの名無しさん
NGNGそもそもnilを渡すことなど思いつくことがおかしい・・・。
0951デフォルトの名無しさん
NGNGnilを代入したのも、新しく覚えた言葉を使いたがってるだけとか。
0952929
NGNGアプリがアクティブかどうかは問いません。
どちらかで動作していて、ユーザがパソコンに触れていない時間が続いたら、
自動的に終了するようにしたいのですが、どうすればできるのか見当も付きません・・・
0953945
NGNGnil=null=空で使えるかと思ってました。
0954953
NGNG0955948
NGNGネタじゃないらしいので一言。
nilは空のポインタだが、数値に空という概念はない(必ず何かの値が入っている)。
Delphiに限定した話ではないが、0とnil(null)を混同しているなら整理が必要。
0956デフォルトの名無しさん
NGNG「ユーザがパソコンに触れていない時間」を取得できればいいわけか。
昔メーリングリストでそんなのあったな・・・
0957デフォルトの名無しさん
NGNGアプリの外で何か作業をしているかを確認しないといけないならフックが必要だと思いますよ。
0958デフォルトの名無しさん
NGNGなら、スクリーンセーバを登録して、スクリーンセーバからメッセージを貰ったら?
0959デフォルトの名無しさん
NGNGユーザのスクリーンセーバーの設定を強引に変更するのはスマートじゃないよねぇ
0960間違って誤爆してしまた
NGNGvar
p: pChar;
f: file;
begin
(略)
BlockWrite(f, p, StrLen(p)+1);
(略)
end;
としているのですが、読みとり方が分かりません。
#0が出るまで1Byteずつ調べていかねばならないのですか?
0961デフォルトの名無しさん
NGNG後方シークが許されるなら、適当な長さずつまとめて読み込んで、メモリ上で
#$00を探す、という手が使えますが、出来ないなら1Byteずつ、ってなりますね。
特に既存のファイルフォーマットに制約されないなら、文字列の直前に
文字列長を書き込んどけば楽でっせ。
var
s: String;
len: Byte;
//書き込むとき
len := Length(s);
BlockWrite(f,len,1);
BlockWrite(f,PChar(s)^,len);
//読み込むとき
BlockRead(f,len,1);
SetLength(s,len);
BlockRead(f,PChar(s)^,len);
これだとByte型の制約から255文字までだけど・・・
0962デフォルトの名無しさん
NGNGなるほど、やはり直前にサイズを書いておくべきですね。
ファイルのパスを保存するので、ShortIntを用いれば十分ですね。
0963962
NGNG0964デフォルトの名無しさん
NGNGそれ、やっぱDLL作ってシステムフックでやるの?
ちょっと面倒だなぁ…
いろいろと…
0965962
NGNG別のプロシージャ(Destroy)でStrDisposeを用いて解放しようとすると
無効なポインタ操作と言われます。
解放するにはどうしたらいいのでしょうか?
0966デフォルトの名無しさん
NGNG方法は間違ってない。なにか変なことやってるだろ。
ソース晒してみたら?
0967デフォルトの名無しさん
NGNG…ローカル変数じゃねーの?
0968デフォルトの名無しさん
NGNGローカル変数だったら「未定義の識別子」だろ。
やっぱソース晒すしか無さそうだね。
あとString使って、SetLengthで代用できるなら、そっちの方が
なにかと安全かな。
0969デフォルトの名無しさん
NGNG違うプロシージャで同じ名前のローカル変数っていう可能性もある
0970965=962
NGNGName: pCharといふフィールドを持っています。(他にもありますが)
これをTListを継承したリストに格納(StrAllocとStrPLCopyで。)
して、Destroyするときに
for i := 0 to Count-1 do
begin
StrDispose(PDataS(Items[i])^.Name);
Dispose(Items[i]);
end;
としているんですが、どこが違うでしょうか?
0971デフォルトの名無しさん
NGNGStrDisposeじゃなくてDisposeのほうじゃない?
0973デフォルトの名無しさん
NGNGStrAllocの方はどうやってる?
0974デフォルトの名無しさん
NGNGstr := ''';
0975965=962
NGNGprocedure AddData(bs: String;...);
var
ps: PDatas;
(略)
New(ps);
ps^.Name := StrAlloc(Length(bs)+1);
StrPLCopy(ps^.Name, bs, Length(bs));
(略)
Add(ps);
としています。
>>974
str := #$27;
で良いと思います。
0976デフォルトの名無しさん
NGNGDisposeの方をコメントアウトしても例外が生成されないだろ、多分。
とりあえず、
> Dispose(Items[i]);
は
Dispose(PDataS(Items[i]));
だと思われ。
0977974
NGNG>975
アリガトウ
0978デフォルトの名無しさん
NGNGstr := '''';
0980デフォルトの名無しさん
NGNGここに上がってるソースには問題ない。
どこかほかの個所でメモリを破壊してるんだろ。
ちなみに↓はうまくいくコードだ。
procedure TForm1.Button1Click(Sender: TObject);
type
PDatas = ^TDataS;
TDataS = record
Name: PChar;
end;
var
ps: PDatas;
bs: String;
list: TList;
i: Integer;
begin
list := TList.Create;
bs := '( ´∀`)';
for i := 0 to 999 do begin
New(ps);
ps^.Name := StrAlloc(Length(bs)+1);
StrPLCopy(ps^.Name, bs, Length(bs));
list.Add(ps);
end;
for i := 0 to list.Count - 1 do begin
StrDispose(PDataS(list.Items[i])^.Name);
Dispose(PDataS(list.Items[i]));
end;
list.Free;
end;
0981デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´∀`)<. 次スレはこちら(重複スレを再利用)。
( ) .| モナーの *やさしい* Delphi質問スレ Ver.7
| | | | http://pc.2ch.net/test/read.cgi/tech/1021262086/l50
(__)_) \_________________________
0984デフォルトの名無しさん
NGNG0985デフォルトの名無しさん
NGNGあっちを残しておくとまた厨がageて
ごっちゃになるのであっち使おうぜ。
0987デフォルトの名無しさん
NGNGスレのタイトルが気に食わないんだったら
.idxファイルを直接いじって変えられるけど?
的外れなレスだったらスマソ
0988デフォルトの名無しさん
NGNGレス数が950を超えています。1000を超えると書き込みができなくなります。