くだすれDelphi(超初心者用)その39
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/01/21(日) 22:41:54他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。
<前スレ>
くだすれDelphi(超初心者用)その37
http://pc10.2ch.net/test/read.cgi/tech/1165561407/
<過去スレ>
DelWiki避難所
http://delwiki.info/?Delphi+%B4%D8%CF%A2%A4%CE%B2%E1%B5%EE%A5%B9%A5%EC%A5%C3%A5%C9
29:http://pc8.2ch.net/test/read.cgi/tech/1135866929/
30:http://pc8.2ch.net/test/read.cgi/tech/1138370150/
31:http://pc8.2ch.net/test/read.cgi/tech/1142594051/
32:http://pc8.2ch.net/test/read.cgi/tech/1145267913/
33:http://pc8.2ch.net/test/read.cgi/tech/1148378877/
34:http://pc8.2ch.net/test/read.cgi/tech/1151143010/
35:http://pc8.2ch.net/test/read.cgi/tech/1155263138/
36:http://pc8.2ch.net/test/read.cgi/tech/1159485364/
37:http://pc8.2ch.net/test/read.cgi/tech/1162458229/
0002デフォルトの名無しさん
2007/01/21(日) 22:42:42※Delphiに関係してる雑談および関係してない雑談については以下でどうぞ
バカボンのDelphi不買・販促・その他談話室その29
http://pc8.2ch.net/test/read.cgi/tech/1153227982/
Delphi初心者のための寺子屋
http://pc8.2ch.net/test/read.cgi/tech/1132756268/
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc8.2ch.net/test/read.cgi/tech/1093654251/
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】 (※ゲーム制作技術板)
http://pc8.2ch.net/test/read.cgi/gamedev/1097836469/
※ほかにもスレッドあります。
<その他>
BorlandHomePage
http://www.borland.com/jp/
DelWiki避難所
http://delwiki.info/
BDN(BorlandDeveloperNetwork)
http://dn.codegear.com/jp/delphi
0003デフォルトの名無しさん
2007/01/21(日) 22:49:36乙
0004デフォルトの名無しさん
2007/01/21(日) 23:39:020005デフォルトの名無しさん
2007/01/22(月) 01:03:36IDEで実行
↓
無限ループのバグがありWinからアプリを強制終了
↓
プロセスを終了できません
どうしたらいいですか?orz
0006デフォルトの名無しさん
2007/01/22(月) 01:05:06IDEから停止
0007デフォルトの名無しさん
2007/01/22(月) 02:07:33でActiveXに興味を持ち、手始めに上記サイトで使われているコンポーネントの仕様を探したのですが、見つける事が出来ませんでした。
Microsoft製コンポーネントの仕様は何処で入手する事が出来るのでしょうか?
0008デフォルトの名無しさん
2007/01/22(月) 03:12:390009デフォルトの名無しさん
2007/01/22(月) 06:02:05書いてあるじゃん
0010デフォルトの名無しさん
2007/01/22(月) 10:09:15IDEから終了させようとして、「プロセスを終了できません 」ってでたんです(汗
Delphiを終了させようとしても、「デバック中です」とかいわれたり。
結局Delphiを強制終了
0011デフォルトの名無しさん
2007/01/22(月) 11:23:54たまに、あるよ。
IDEからでは、どうしようもないことが。
極力、無限ループは避けるしか・・・。
あとは、タスクマネージャで、優先度の設定を通常以下にすると、IDEからでも終わらせられることがある。
0012デフォルトの名無しさん
2007/01/22(月) 11:36:24リージョンで作ろうと思っているのですが
StrokePathで文字の縁取りを含めたウィンドウを作ろうと思ったら
どうすればよいのでしょうか?
TextOutで縁取りなしのウィンドウは作れるのですが
縁取りも含めた形の文字のウィンドウがどうしても作れません・・・><;
0013デフォルトの名無しさん
2007/01/22(月) 12:22:48Socketのプログラムを組んでいるんですが、
接続相手が居ない時にでる例外が捕まりません。
try
Form1.ClientSocket1.Open;
except
end;
これで、例外のポップアップがでます。
どうも、Open時には例外が出なくて、タイムアウト時に例外が出ているのかな?って推測ですけど、
この例外を捕まえるにはどうしたらいいのでしょうか?
例外が出たらメッセージは出さずにログに記録したいと思っています。
00147
2007/01/22(月) 12:47:42すみません、バージョンは関係無いと思ったのであえて書きませんでした。
Delphi6Personalです。
>>9
ブラウザは普通に作ることが出来ました。
私が知りたいのは何処からMicrosoft製コンポーネントの仕様が入手できるかです。
0015デフォルトの名無しさん
2007/01/22(月) 12:50:16TVector3 = record
class operator Equal(const A, B: TVector3): Boolean;
class operator Add(const A, B: TVector3): TVector3;
class operator Subtract(const A, B: TVector3): TVector3;
case Integer of
0:(X, Y, Z: Single);
1:(E: array[0..2] of Single);
end;
このときに各演算子メソッドの実装部分で、
「宣言がすでに定義されているものと異なります」というエラーが出てコンパイルできません。
可変部分をなくすとコンパイルできるのですが、
可変部分を持つレコード型では演算子のオーバーロードはできないのでしょうか。
001613
2007/01/22(月) 12:50:49エラーイベントの中にErrorCode:=0;って書けばスルーできた
0017デフォルトの名無しさん
2007/01/22(月) 13:06:37MSDNにある。日本語版じゃなくて全部英語の本家のほうな。
これ以上のことはIEコンポ専用スレに池
http://pc10.2ch.net/test/read.cgi/tech/1145189322/
0019デフォルトの名無しさん
2007/01/22(月) 13:18:02これの初期値をNameから得るにはどうしたら良いのでしょうか。
0020デフォルトの名無しさん
2007/01/22(月) 13:35:28可変じゃなくても、メソッドの後に、変数置いても、
同じエラーがでますね。(もちろん、後に置けません!とは言われるけど)
仕様なのか、バグなのか?
QCに報告しておいたらどうでしょうか。
0021デフォルトの名無しさん
2007/01/22(月) 17:05:31リストをやり取りするプログラムを組んでいるんですが、
いっぺんで送ってしまおうと考えていて。
そのリストは1KBを超えることは無いとは思うんですが。
0022ヽ
2007/01/22(月) 20:01:49教えてくださいませんでしょうか?
0023デフォルトの名無しさん
2007/01/22(月) 20:22:44i: Integer;
sl: TStringList;
begin
sl := TStringList.Create;
try
sl.LoadFromFile('ファイル名.txt');
i := 0;
while i < sl.Count do
begin
ShowMessage(sl[i]);
Inc(i, 2);
end;
finally
sl.Free;
end;
こんなかんじ
0024ヽ
2007/01/22(月) 20:33:05ありがとうございます!!
0025前スレ986
2007/01/23(火) 12:56:18探してみましたがやっぱりエンコードが分かりません><
.tmpファイル(EUC)をShift_JISで読み込みたいのですが
どうすればいいか教えてください。
0026デフォルトの名無しさん
2007/01/23(火) 13:20:060027デフォルトの名無しさん
2007/01/23(火) 13:20:33一旦stringでも読み込んできて、
なんらかのEUC to SJISのライブラリを間にはさむしかなかろうて。
0028デフォルトの名無しさん
2007/01/23(火) 15:23:45選択したコントロールの端をドラッグしたりして
コントロールを引き伸ばしたり縮めたりしたいのですが
クリックしたときにIDEのようにコントロールを選択された状態
(コントロールの上下左右斜め端に■が表示された状態)
にする方法がわかりません。
どうすればよいでしょうか?
バージョンはDelphi2005です。
0029デフォルトの名無しさん
2007/01/23(火) 16:36:21http://forum.nifty.com/fdelphi/samples/00296.html
0030デフォルトの名無しさん
2007/01/23(火) 16:43:51FastNetではHTTP1.1に未対応で転送されるとアウトで断念。
Indyではタイムアウトが無くて、応答無しの時の処理が超無駄使い。
タイマーで監視して120秒待ってもIdHTTPのGet関数が終わらなかったら
タイムアウトと判断しているが、強制的にIdHTTPを開放しようとすると
フリーズするので、スレッド丸ごと放棄して新しいスレッドを製作して
そっちに引き継ぐ処理でごまかした。
だが放棄したIdHTTPが悪さをしているのか、たまに全く通信が出来なく
なることがある。もっとスマートな手段は無いのだろうか...
0032デフォルトの名無しさん
2007/01/23(火) 18:39:23どっちがいいんでしょうか?
0033デフォルトの名無しさん
2007/01/23(火) 19:21:18俺ならパッと見、簡単な方を使う
0034デフォルトの名無しさん
2007/01/23(火) 19:25:22> Indyではタイムアウトが無くて、応答無しの時の処理が超無駄使い。
最近のIdHTTP にはreadTimeout があると思うけど、駄目なの?
0035デフォルトの名無しさん
2007/01/23(火) 19:31:41けど、やっぱりSocketかな
0036デフォルトの名無しさん
2007/01/23(火) 19:32:240037デフォルトの名無しさん
2007/01/23(火) 20:07:592行目に「〜〜〜」、3行目に「〜〜〜」.....
というように、ファイルに書き込みをするソフトを
作りたいのですが、書き込む方法が分かりません。
教えてください。お願いしますm(__)m
0038デフォルトの名無しさん
2007/01/23(火) 20:14:59003930
2007/01/23(火) 20:59:56ほほー
Delphi6標準のには無かったんでIndyの新しいのを探してみるよ
0040デフォルトの名無しさん
2007/01/23(火) 21:00:34Data := FileDateToDateTime(FileAge);
とやると、FileAgeが使用を推奨されないうんぬんとwarningがでます。
では、何が推奨されるのでしょうか?
ヘルプにも書いてありません。困っています。
{$WARN SYMBOL_DEPRECATED OFF}も負けを認める用でいやなのですが・・・
0041デフォルトの名無しさん
2007/01/23(火) 21:38:310042デフォルトの名無しさん
2007/01/23(火) 21:46:310043デフォルトの名無しさん
2007/01/23(火) 22:36:09ですね。サンクス。
Helpに記述が無いのは、Borlandクオリティってやつですか?
とりあえず、返り血がTrueなら、成功だろうか
004432
2007/01/24(水) 00:05:02今はSocket使ってるんですが、不安定なんでIndyにしようかな。
ブロッキング接続でエラーでるんですよね。なのにSleep入れてやったら出なかったりと、
かなり不安定なんです。
0045デフォルトの名無しさん
2007/01/24(水) 01:10:11ttp://www.ipc.hokusei.ac.jp/~z00104/delphi/socket.html
とか参考になるけど
あと送信の方もスレッドにしないとその間何もできんよ
004632
2007/01/24(水) 03:30:43ttp://www.ipc.hokusei.ac.jp/~z00104/delphi/thread.html
ここの通りに書いていったんですが、エラーでるんですよね・・・
メモリの書き込みエラーとかが。
0047デフォルトの名無しさん
2007/01/24(水) 06:09:08送信ファイルパスと受信ファイルパスが同じだと書き込みエラーになるよ
パスが同じなら同じファイル名でもね
0048デフォルトの名無しさん
2007/01/24(水) 07:53:14これで君のソフトもIrvineなみ
0049デフォルトの名無しさん
2007/01/24(水) 10:28:34しているのですが、保存部分のみどうしても分かりませんorz
AquesTalkのヘッダファイルに以下のようにあったので、
DllExport unsigned char * __stdcall AquesTalk_Synthe(const char *koe, int iSpeed, int *pSize);
Delphiで以下のようにしています。
function AquesTalk_Synthe(Koe: PChar; ISpeed, Size: integer): PChar; stdcall; external 'AquesTalk.dll' name 'AquesTalk_Synthe';
戻り値がWAVフォーマットのデータの先頭アドレスとなっているのですが、
これをファイルに保存するにはどうのようにしたら良いのでしょうか?
0050デフォルトの名無しさん
2007/01/24(水) 17:02:18Turbo Delphi
Turbo Delphi for .NET
Delphi 6
無料版でこの3つかな?
で、この3つがどう違って、何を入れたらいいのかわからなくて困ってるんだ。
誰か軽い解説&お勧めplz。
0051デフォルトの名無しさん
2007/01/24(水) 18:52:23Turbo Delphi Explorer
最新版だが、少々、動作不安定。DBアプリを作れる。商用アプリも可。
コンポーネントを追加できない(裏技あり)
Turbo Delphi for .NET
Delphi WIN32のソースコードをそのまま.net化できる。
Delphi6
2001年版。DBアプリは作れない。商用不可。
コンポーネントを追加できる。
0052デフォルトの名無しさん
2007/01/24(水) 19:07:05ttp://oto.chu.jp/kujira/text/delphi/archive.htm
致命的エラー ファイル'unit_windows_api.dcu'が見つかりません
というエラーが出ます。
このエラーを回避する方法を教えて欲しいです。
0053デフォルトの名無しさん
2007/01/24(水) 19:09:110054デフォルトの名無しさん
2007/01/24(水) 19:23:00ライブラリパスの場所に
unit_windows_api.pasを置く
0055デフォルトの名無しさん
2007/01/24(水) 19:36:19とりあえず全て無償版という前提で。お勧めの順番はD6>=Turbo Delphi>>Turbo Delphi .NET
Turbo Delphi:
最新版のWindowsネイティブ版のDelphi。商用可。
基本的にコンポーネント等追加不可で、おかげでエディタのフリーカーソルを解除できないのが痛い。
可能にするツールが海外で配布されているが明らかにライセンス違反くさい。
Turbo Delphi for .NET:
最新版の.NET Framework版のDelphi。商用可。
基本的にコンポーネント等追加不可で、おかげでエディタのフリーカーソルを解除できないのが痛い。
.NET Frameworkアプリを作るならVC#の方がなんぼかマシなのでこの中では一番非推奨。
Delphi 6:
3世代前のDelphi。商用不可。
最近追加されたDelphi言語の書き方が出来ないが、そういうのは未だに一般的じゃないのであまり気にしなくていい。
コンポーネント等の追加が可能で、フリーカーソルを解除できるのが良いが、一部キーボードショートカット(Ctrl + Shift + ↓とか)が使用できない。
0056ななしへたぐらま ◆XcB18Bks.Y
2007/01/24(水) 19:56:35http://pc10.2ch.net/test/read.cgi/tech/1165561407/984-985
985のコードはフォームのOnPaintメソッドに描画します.
フォームのサイズを変えたり他のウィンドウに隠れたあとに
もう一度表示させてもちゃんと表示されることが大事デス.
>>43
> Helpに記述が無いのは、Borlandクオリティってやつですか?
うちはDelphi 5なので最近のは知りませんがどうも相変わらずみたいですね.
(初代Delphiのヘルプは良くできていたのですが…)
0057デフォルトの名無しさん
2007/01/24(水) 20:01:25フリーカーソルも慣れればかえって使いやすいもんだし
0058デフォルトの名無しさん
2007/01/24(水) 20:24:24バイナリエディタを作ってみたいんですが、バイナリデータをTMemoryStreamなどで読み込んだあと、そのバイナリを表示する方法がわかりません。
どのようにすればいいですか?
0060デフォルトの名無しさん
2007/01/24(水) 20:38:35何が聞きたいのかがいまいち分からんが、
Formatとかで1バイトずつ16進に直してStringGridとかに表示していけばいいんでない?
006158
2007/01/24(水) 21:03:10とりあえずFormatをググって使い方を調べます。
0062デフォルトの名無しさん
2007/01/24(水) 21:15:140063デフォルトの名無しさん
2007/01/24(水) 21:58:43これ面白そうだな。
フリーでアクセント付けれるのって他にあるんかな。
とは言うものの俺もわかんね。すまんorz
0064デフォルトの名無しさん
2007/01/24(水) 22:19:18サンプルを見ると
http://www.a-quest.com/aquestalk/prog_guide.pdf
// ルートディレクトリに生成した音声データを保存
FILE *fp = fopen("\\ZZZ.wav", "wb");
fwrite(wav, 1, size, fp);
fclose(fp);
テキトーなことを書くと
fwrite =TFileStream.Write かな。
0065デフォルトの名無しさん
2007/01/24(水) 23:08:34Size 引数は int へのポインタだよ。
(Koe: PChar; ISpeed: Integer; Size: PInteger)
0066デフォルトの名無しさん
2007/01/24(水) 23:58:38なので
p:=AquesTalk_Synthe(Koe: PChar; ISpeed: integer; var Size: integer):
で
TMemorystream.Write(p, Size)
で
SaveToFile
で
procedure AquesTalk_FreeWave (wav: PChar);
とか
(テキトー)
0067デフォルトの名無しさん
2007/01/25(木) 00:18:180068デフォルトの名無しさん
2007/01/25(木) 00:21:29shellexecute delphi - Google 検索
http://www.google.co.jp/search?hl=ja&q=shellexecute+delphi&lr=lang_ja
0069デフォルトの名無しさん
2007/01/25(木) 00:23:43ありがとうございます。
0070デフォルトの名無しさん
2007/01/25(木) 04:07:03どうすれば取得できますか?
0071デフォルトの名無しさん
2007/01/25(木) 07:18:03exe等からアイコンを抜き出してSpeedButtonに張り付けて使っていたのですが
アイコンの左上1ドットの色で透過されないようにする方法があれば教えてください
0072デフォルトの名無しさん
2007/01/25(木) 07:23:05みたいなサイトを目にしてしまいました。
深刻なんでしょうか?文字化けを克服したバージョンのリリースの予定っていつ頃なんでしょうか?
0073デフォルトの名無しさん
2007/01/25(木) 07:49:34007449
2007/01/25(木) 08:50:57ありがとう!参考にして以下のようにやったらできました。
今までポインタ自体全くわからなかったけどなんとなく前に進めそうです('A`)
var
wav: PChar;
Size: Pinteger;
FS: TFileStream;
begin
if SaveDialog1.Execute then
begin
wav := AquesTalk_Synthe(PChar(Edit1.Text), 100, Size);
FS := TFileStream.Create(SaveDialog1.FileName, fmCreate);
FS.Write(wav^, Size^);
FS.Free;
AquesTalk_FreeWave(wav);
end;
end;
0075デフォルトの名無しさん
2007/01/25(木) 09:59:41そのサイトのURLは?
0076デフォルトの名無しさん
2007/01/25(木) 11:44:01忘れちゃったけど、Unicode関係なのか「Vistaになって新たに追加された文字」(それ以前の開発環境でのソフトでは表示できない!?)みたいなことが書いてあったと思う。
0077デフォルトの名無しさん
2007/01/25(木) 11:51:33Delphi じゃなくて、フォントの問題でしょ。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061221/257533/
007825
2007/01/25(木) 12:02:19ありがとう。
ttp://www31.ocn.ne.jp/~pz/delphi/pzconv/document.htm
のTPzConvを使いたいと思います。
そこで、また質問なのですが、コンポーネントのインストールは
できたのですが、使い方(呼び出し方)が良く分かりません。
サンプルのように
Memo2.Text := PzConv1.EucToSjis(TempFileString);
とやってみたのですが、未定義の識別子:'PzConv1'とエラーが出ます
Memo2.Text := PzConv.EucToSjis(TempFileString);
だったら未定義の識別子:'EucToSjis'と出ます・・・・・・・・
おねがいです・・・・・・・・。呼び出し方教えて下さい。
0079デフォルトの名無しさん
2007/01/25(木) 13:28:13http://www31.ocn.ne.jp/~pz/delphi/pzconv/TPzConv.htm
0080デフォルトの名無しさん
2007/01/25(木) 13:43:51ClientSocketで複数のサーバーに同時接続というのは無理でしょうか?
0081デフォルトの名無しさん
2007/01/25(木) 14:07:03やったことないんで想像で書くけど、
コンポーネントを複数おいたらできない?
一個のコンポーネントでは無理。接続中にアドレスとかポートとか書き換えれないから。
不特定多数に繋ぐならコンポーネントの動的生成じゃない?
0082デフォルトの名無しさん
2007/01/25(木) 14:24:08普通に、Delphiの使い方勉強しましょうよ・・・
0083デフォルトの名無しさん
2007/01/25(木) 14:31:55動的生成でやってみます。
ありがとうございました。
008480
2007/01/25(木) 16:46:05動的生成数を変数intで管理していて
ClientSocket1
ClientSocket2
ClientSocket3
:
となるとき
生成時に生成数+1の変数を書きたいのですが
ClientSocket[ ? ] = TClientSocket.Create;
の[ ? ]にはどんな風に書けばよいのでしょうか・・
0085デフォルトの名無しさん
2007/01/25(木) 18:03:42TListみたいなデータ構造で、オブジェクトプールのように、
クラス名を渡して、あらかじめオブジェクトを生成してもらう汎用的なプールを作ろうとしています。
そのときに、クラス名を渡して、生成してもらう、という処理が上手く行きません。
TObjectのCreateが、virtualでないため、
THogeClass = class of TObjectとして、プールに型名を渡しても
渡した型のCreateが呼べません。
プール用にCrateをvirtualにしたクラスを定義して、登録するデータはそれを継承するという方法も
ありますが、そうすると任意のクラスを登録できるわけではなくなります。
何かよい方法はありませんでしょうか?
0086デフォルトの名無しさん
2007/01/25(木) 18:04:11008785
2007/01/25(木) 18:29:34そのポインタから呼び出して生成してもらうようにしていますが、
もっとスマートな方法はないだろうか?
(まあ、こちらの方が汎用性は高いですが・・・)
008885
2007/01/25(木) 18:32:46簡略化したコード書いてみます。
interface
const NumOfPool = 100;
type
TObjectPool = class
FItems: array of TObject;
constructor Create(ObjectClass: TObjectClass);
end
implementation
constructor TObjectPool.Create(ObjectClass: TObjectClass);
begin
SetLength(FItems, NumOfPool);
for i := 0 to NumOfPool - 1 do
FItems[i] := ObjectClass.Create;
end;
↑これでは駄目
0089デフォルトの名無しさん
2007/01/25(木) 18:47:440090デフォルトの名無しさん
2007/01/25(木) 19:43:52Delphiの基礎ちゃんと勉強したか?
For ix:= 0 To生成したい数 Do begin
ClientSocket[ix]:=TClientSocket.Create;
End;
0091デフォルトの名無しさん
2007/01/25(木) 21:03:21●プロジェクトに含まれないソースファイル(リンカ?等の設定でつながっている)をステップインしてデバッグしたい。
方法はないでしょうか?
●事の成り行き
とあるサードパーティ製のGridを使っていると、カラム幅を変えた際(MouseUp)にエラーが発生しました。
ソースコード付きだったので動作を追って行くと「inherited」という部分でエラーが出ているのが分かりました。
「inherited」を調べてみたところ、呼ばれているイベントの継承元の処理が動く、と認識しました。
継承元をたどってゆくと、VCLのTCustomGridのpasファイル内にある「MouseUp」イヘ゛ントがそれっぽいのです。
0092デフォルトの名無しさん
2007/01/25(木) 21:27:27forの初期値が0なら
for ix := 0 to 生成したい数 - 1 do
でしょ
>>84
配列の数が3以上に定義されているのなら[4]
0093デフォルトの名無しさん
2007/01/25(木) 21:31:39これか?
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=063375
VCLの内にステップインする方法も書いてある
0094デフォルトの名無しさん
2007/01/25(木) 23:53:17クラスフィールドは自動的に0やnilで初期化されるのでしょうか?
それとも他のタイミングで手動で初期化する必要がありますか?
0095デフォルトの名無しさん
2007/01/25(木) 23:57:14> クラスフィールドは自動的に0やnilで初期化されるのでしょうか?
YES
0096デフォルトの名無しさん
2007/01/26(金) 00:03:14プロジェクトのオプションでデバッグ版DCUを使うにチェック入れてみたら?
0097デフォルトの名無しさん
2007/01/26(金) 00:08:32ついでにいうと同じくヒープに確保されるグローバル関数も初期化される。
一方スタックを使い回されるローカル変数は初期化されない。
0098デフォルトの名無しさん
2007/01/26(金) 00:09:31誤:グローバル関数
正:グローバル変数
コンポーネントを動的にいくつも追加する場合は配列かリストオブジェクトを使います.
いずれの場合も生成数を自分で管理する必要はありません.
ここではリストオブジェクトのひとつ TComponentList クラスのオブジェクトを使う例を.
○宣言
FClientSockets: TComponentList;
○生成,追加
FClientSockets.Add(TClientSocket.Create(self)); // ソケットコンポを1個生成してリストに追加
○使う(例)
TClientSocket(FClinetSockets[2]).Open; // 3番目のソケットを接続(最初が0番になる)
リストオブジェクトもオブジェクトなので生成と廃棄が必要です.
0101デフォルトの名無しさん
2007/01/26(金) 10:23:43Memoコンポーネントなどを配置し実行時にその機能を使える処理を
コード側からやるにはどのように記述すれば良いのでしょうか?
具体的にはボタンを押すと
パネルにMemoが出現するプログラムをつくりたいのです
どうかご教授よろしくお願いします
0102デフォルトの名無しさん
2007/01/26(金) 10:50:01010378
2007/01/26(金) 11:14:30できました!!ありがとうございます。
typeにPzConv1: TPzConv;を書き忘れてました。
みなさんに頼りすぎました。すみません。
0104デフォルトの名無しさん
2007/01/26(金) 11:55:14TileメソッドやらCascadeメソッドがあるがな・・・
それか標準アクションにも用意されてるがな・・
>>100
>>84の元の質問の答えになってないがな・・
0105デフォルトの名無しさん
2007/01/26(金) 12:05:02とりあえず、設計時にMemoのVisibleプロパティをFalseにして、
実行時にボタンが押されたらVisibleプロパティをTrueにすればいいんじゃまいか??
ボタンが押された時の処理はボタンのOnClickイベントに書けばいいがな・・
0106102
2007/01/26(金) 13:01:55出来ました。
有難うございます。
0107デフォルトの名無しさん
2007/01/26(金) 13:17:29>>105の方法がお手軽でヨロシ
設計時にコンポーネント置くのは嫌だってんなら
procedure TForm1.Button1Click(Sender: TObject);
var
objMemo: TMemo;
begin
objMemo := TMemo.Create(Panel1);
objMemo.Parent := Panel1;
end;
0108デフォルトの名無しさん
2007/01/26(金) 15:23:310109デフォルトの名無しさん
2007/01/26(金) 15:48:590110デフォルトの名無しさん
2007/01/26(金) 16:15:11011185
2007/01/26(金) 18:06:55interface
const NumOfPool = 100;
type
TObjectMakeMethod = function (): TObject of object;
TObjectPool = class
FItems: array of TObject;
constructor Create(ObjectMake: TObjectMakeMethod);
end
implementation
constructor TObjectPool.Create(ObjectMake: TObjectMakeMethod);
begin
SetLength(FItems, NumOfPool);
for i := 0 to NumOfPool - 1 do
FItems[i] := ObjectMake;
end;
0113デフォルトの名無しさん
2007/01/26(金) 21:03:22どうすりゃいいんでしょうか
0114デフォルトの名無しさん
2007/01/26(金) 21:36:10他のアプリのを見たいのなら、ディープな部分のWindowsの知識が必要。
ぱぱっと作れるような簡単なものでは無い。
内容を見るだけなら、そういうツールを探したほうがいい。
自作アプリのならば、コンポーネントで見方が違うから
何を使っているのか書いてくれないと確認するのが面倒。
0115デフォルトの名無しさん
2007/01/26(金) 23:51:30ttp://codezine.jp/a/article/aid/126.aspx
0116デフォルトの名無しさん
2007/01/27(土) 00:26:240117デフォルトの名無しさん
2007/01/27(土) 01:39:39これが定番かな?
http://www.wireshark.org/
0119デフォルトの名無しさん
2007/01/27(土) 13:20:19保持してる情報量が2Gを越えたら新しくAddさせない、とか。
気にしなくても勝手にやってくれるんですかね?
0120デフォルトの名無しさん
2007/01/27(土) 13:29:12textプロパティの長さを調べるとかじゃダメなの? もっと性格に知りたいとか?
テストしてみたら?
2Gのファイルを用意するのはメンドイと思うからaddをループでもさせて。
0121デフォルトの名無しさん
2007/01/27(土) 13:55:04ってのは今俺も思った。
0122デフォルトの名無しさん
2007/01/27(土) 14:12:494G食わせたら例外発生した気がする
0123デフォルトの名無しさん
2007/01/27(土) 14:33:22正確にはプログラム本体+システム以外のDLLで使用しているコード、データの合計が
2GBを超えられない。でも物理メモリが2GB以上ないとスワップ発生しまくりで
その時点でシステムが不安定になるような気がする。
TStringListに関して言えば保持している文字列の中にユニークでないものもあるため、
正確な所要メモリってのはなかなか難しい。
while True do
begin
S.Add('TESTETSTTESTTEST'); // 16byte
end;
とかやっても文字列の実体は1つなのでね。増えるのはString型変数のみ。
間違ってもTextプロパティとか見るなよ?あれは手持ちの文字列をその場で連結するものだから。
0124デフォルトの名無しさん
2007/01/27(土) 21:05:20ま、テキストで2Gって滅多とあるもんじゃないけどね。
でも作法的には違反のような気がするお。
0125デフォルトの名無しさん
2007/01/27(土) 21:22:500126デフォルトの名無しさん
2007/01/27(土) 21:26:030127デフォルトの名無しさん
2007/01/27(土) 21:52:272G行きそうな気配の時はファイル分割とかになるのが当たり前な設計で、
分割できない時は部分読み込みなんじゃない?
しかし、2Gのテキストファイルって何だろ?
DVD ISOをishかけたのぐらいしか思い浮かばん。
0128デフォルトの名無しさん
2007/01/27(土) 21:53:23仮想メモリ込みで?
0129デフォルトの名無しさん
2007/01/27(土) 21:59:010130デフォルトの名無しさん
2007/01/27(土) 22:13:03別にオナニーならいいんじゃないの?
0131デフォルトの名無しさん
2007/01/27(土) 22:59:000132デフォルトの名無しさん
2007/01/27(土) 23:28:290133デフォルトの名無しさん
2007/01/27(土) 23:48:060134デフォルトの名無しさん
2007/01/28(日) 00:37:56http://mxs.bergsoft.net/
MXSで、RibbonUIを実験しているね。
フリーででそう・・wktkする
0135デフォルトの名無しさん
2007/01/28(日) 04:55:13そりゃそうだが、テキストエディタなんかだと、通常はStringで足りるわけだが、
まれにギガデータをぶち込んじまうやつがいる。
ギガデータが普通なDBとかなら、対応を考えるけど、
通常キロバイト、せいぜい数メガバイト級しか扱わないツールだと、
ギガデータには対応しないっていう実装しても、無理はないと思う。
使用頻度の低い機能や使い方のために、工数かけても無駄だしね。
落ちるのが許されないってんなら、対応するしかないけど。
0136デフォルトの名無しさん
2007/01/28(日) 04:58:030137デフォルトの名無しさん
2007/01/28(日) 07:52:38どのイベントでどう実装するもんなんですか?
0138デフォルトの名無しさん
2007/01/28(日) 09:57:220139デフォルトの名無しさん
2007/01/28(日) 12:57:39TMemoにaddしてるだけだから、
可能性としては2G行けるな
1時間で9KBぐらいなんだけど。
(保存はしてない)
0140デフォルトの名無しさん
2007/01/28(日) 13:17:11数万行を越えると、目も当てられないくらい、1行の追加時間が遅くなる。
100MB越えるあたりで使い物にならないね。
0141デフォルトの名無しさん
2007/01/28(日) 13:50:430142デフォルトの名無しさん
2007/01/28(日) 13:54:350143デフォルトの名無しさん
2007/01/28(日) 14:31:30それ、ログの取り方としては間違ってる。
ログって何かあったときに調べるためのものなのに、
オンメモリで保存しといて、マシンがハングアップしたらどうするつもりだよ。
随時吐き出せ。
もし、そういう状態を考慮しないにしても、2Gいっぱいは使えない。
せいぜい実用になるのは数100メガくらい。
それも、たっぷりメモリーを積んだマシンでだ。
データの状態にもよるけど、管理用のデータ領域が場合によっては
実際のデータに匹敵するくらいのメモリーを消費する場合もあるしね。
0144デフォルトの名無しさん
2007/01/28(日) 15:25:460145デフォルトの名無しさん
2007/01/28(日) 16:36:500146デフォルトの名無しさん
2007/01/28(日) 18:17:350147デフォルトの名無しさん
2007/01/28(日) 19:32:42try..except..end;
0148デフォルトの名無しさん
2007/01/28(日) 20:36:03finally
end;
0149デフォルトの名無しさん
2007/01/28(日) 20:37:440150デフォルトの名無しさん
2007/01/28(日) 20:38:50try
except
end;
finally
end;
0151デフォルトの名無しさん
2007/01/28(日) 23:39:58この書き方たまにやるんだけど、どうなんでしょうか?悪くない?
0152デフォルトの名無しさん
2007/01/28(日) 23:49:41必要ならいいんじゃない?except...endが空だったりするとダメダメかもしれんが。
0153デフォルトの名無しさん
2007/01/28(日) 23:53:34except節で全ての例外を正しく補足・処理できるとは限らんのだから。
0154デフォルトの名無しさん
2007/01/29(月) 00:06:450155デフォルトの名無しさん
2007/01/29(月) 00:11:15のは言語設計の失敗だろって書き込みを前に見たような気がする
0156デフォルトの名無しさん
2007/01/29(月) 00:15:140157デフォルトの名無しさん
2007/01/29(月) 00:28:44なおかつ例外を捕らえたいって時にやるんじゃないの?
0158デフォルトの名無しさん
2007/01/29(月) 00:33:15except
finally
end;
っていう書き方ができないって話でそ
0159デフォルトの名無しさん
2007/01/29(月) 00:39:53スマン勘違いしてたようだ
吊ってくる
0160デフォルトの名無しさん
2007/01/29(月) 10:40:39プロジェクトオプションの使っています?
自分はソースの最初の方に定数で指定してやるのが好きですけど、
これってマナー悪いですかね。
職業プログラムじゃなくて遊びのプログラムなんですが。
0161デフォルトの名無しさん
2007/01/29(月) 11:14:11TFontの情報をiniファイルに書き出そうと思っているんですけど、
Font.StyleのようにBooleanが複数の項目はどうやって保存してやればいいんでしょう?
項目ひとつひとつ保存ですかね?
0162デフォルトの名無しさん
2007/01/29(月) 11:43:52TypInfoをusesしてGetOrdProp関数の戻り値でも使えばいいんじゃまいか・・・
I := GetOrdProp(Font, 'Style');
// Iniへの書き込み
読み出しは逆のSetOrdProp関数でどうぞ。
0163デフォルトの名無しさん
2007/01/29(月) 11:53:53それか、GetPropValueとSetPropValueでもいいかもな。第3引数のPreferStringsを変えれば
値を[fsBold]みたいな感じでもIniファイルに手軽に書き込めるはずだがな・・・
0164デフォルトの名無しさん
2007/01/29(月) 13:07:54FindFirst がエラーコードを返した時は FindClose が自動的に呼び出されるので
そのあと FindClose を呼び出すと2重になってバグを起こすと聞いたんですが
FindNext がエラーコードを返した時も FindClose が自動的に呼び出されるんですか?
もしそうなら FindNext でファイル検索して行って、もうこれ以上ない時に FindClose を
呼び出す必要はないんですか?
0165デフォルトの名無しさん
2007/01/29(月) 13:47:05下記のソースを見つけました。
http://forum.nifty.com/fdelphi/samples/00039.html
procedure TForm1.Button1Click(Sender: TObject);
var
L,R,G,B:String;
IntColor:Integer;
begin
if ColorDialog1.Execute then
begin
IntColor :=ColorToRGB(ColorDialog1.Color);
L:=IntToHex(IntColor,6); //この状態ではBBGGRRになっている
R:=Copy(L,5,2);
G:=Copy(L,3,2);
B:=Copy(L,1,2);
Edit1.Text:=R+G+B;
end;
end;
これを、まっさらなプロジェクトに作ってテストした所、きちんと動くのですが、
今製作中のプロジェクトに入れようとすると、Copyのところで「実パラメータが多すぎます」
と表示されてしまいます。
procedure TForm1.ToolButton18Click(Sender: TObject);
のところに入れたくて、varから以降の部分をコピペしてるだけなんですが、なぜ通らないのでしょう・・・
0166デフォルトの名無しさん
2007/01/29(月) 14:18:29その自作プロジェクトのどっかでCopyって関数定義とかしていない??
0167デフォルトの名無しさん
2007/01/29(月) 14:18:51VCLのソースを見る限りじゃFindNextに失敗しても
FindCloseは呼び出されない
なので必要ないかと
>>165
どっかでCopyって名前の自作関数定義してない?
System.Copyと関数名にユニット名を付ければOK
0169デフォルトの名無しさん
2007/01/29(月) 14:25:52チンコは被ってないぞw
0170デフォルトの名無しさん
2007/01/29(月) 14:27:16的確な即レスありがとうございます!!
Copyって自作関数定義してました;
System.Copyとすることで解決しました。
本当にありがとうございました。
0171デフォルトの名無しさん
2007/01/29(月) 16:22:31先生!
して、
try
except
finally
end;
の間にはどう書けばいいんでしょうか?
0172デフォルトの名無しさん
2007/01/29(月) 16:25:21try
except
end
finally
end;
0173デフォルトの名無しさん
2007/01/29(月) 16:34:210174デフォルトの名無しさん
2007/01/29(月) 16:34:50no
ドラえもん 泣かない
想い出
作ったら?;
0175デフォルトの名無しさん
2007/01/29(月) 16:52:31用紙サイズ(A4とかA3とか)を指定するとそれに丁度いいビットマップのサイズになるようにできないか悩んだことがあったんですが、
インチあたりのピクセル数がどうとかこうとかで、結局わからないまま技量不足と断念したことがあったんですが、取得できる方法を知ってる人はいませんか?
0176デフォルトの名無しさん
2007/01/29(月) 16:59:53GetDeviceCaps辺りで取得できたと思う。
0177デフォルトの名無しさん
2007/01/29(月) 17:12:55dpiの基礎から
dpiは1インチ当たりのドット数。
印刷したい物の辺の長さ(インチ)×必要とするdpi=必要とするドット数
1インチ=25..4mm
ちなみにフォントの1ポイント=1/72インチ。
>>173
綺麗にの条件がわからない。
A4 72dpiのやつをA4 300dpiでも綺麗に印刷したいとかいうなら、
むっちゃ難しい技術になる気がする。完成したら金取れるソフトになると思うよ。
delphiのことはよくわかんないから他の人に。
ホントにめんどくさい。メートル法つかえよ欧米人。
0178デフォルトの名無しさん
2007/01/29(月) 17:21:40画像のデータとテキストのデータを一つにしてファイルに保存するってことはできるんでしょうか?
0179デフォルトの名無しさん
2007/01/29(月) 17:25:20レス、ありがとうございます。
>1インチ=25..4mm
こういうのがあって二の足踏んじゃったんですよね。
写真みたいに鮮明に、じゃなくて、文字がブレない程度でよかったんですが、
Metafileっての使ったらどうかと、でもMetaFileの資料が少なくて断念しました。
0180デフォルトの名無しさん
2007/01/29(月) 17:30:55Windowsは72dpiで描写している。
しかし、この場合のdpiは正確にはドットパーインチにならない。
なぜかって言うと、画面解像度と画面サイズによって変わるから。
たしか1024*768 CRT17インチぐらいの環境を1インチ72ドットの基準にした(ちょっと記憶が曖昧)
印刷に必要なdpiだけど、カラーの場合300dpi、文字で白黒の場合600dpiぐらい。
まあ、この辺は実際に刷ってみて目で確かめるのがいい。文字はデータがかるけりゃ1200dpiとかいってもいいかも。
最近のカラープリンタはdpiが5760dpiとかバカみたいにあるけど、これに合わせる必要はない。
実際、カラープリンタのdpiはヘッドの数だけ足してあるし。
ちなみに、印刷の現場で主に使われるサイズはカラーが350dpi/モノクロが1200dpiぐらい。
もちろん、印刷物の内容や目的によって変わるけど。
巨大ポスターとかは150dpiとか。
で、初心者が陥りやすい罠として、
画面上で綺麗に見えているんだから、印刷しても綺麗だろうって思いこみ。
前述したとおり、モニターは72dpiで綺麗に印刷したいのなら300dpiは必要。
0181デフォルトの名無しさん
2007/01/29(月) 17:35:06文字と画像は綺麗に見える最低限のdpiが違うので、
すでに画像にビットマップとして貼られた文字を綺麗に出すのは難しい。
画像の画素数がむっちゃたかけりゃいいんだけど。
delphiはあんまり詳しくないんだけど、
画像が別にあってdelphiで文字を付け足すのなら、
ポイント数を高めにしてビットマップ化かクイックレポートなんじゃないかな?
0182デフォルトの名無しさん
2007/01/29(月) 18:07:17TStream系(TMemoryStream、TFileStreamなど)を使って、逐次書き込みかな?
ヘッダーと本体を用意して、書き込み時は、
ヘッダー部には、サイズと保存位置を計算して書く。
本体部は、各ファイルを書く。
読み込み時は、ヘッダー情報を元に、本体部から読み込み
0183デフォルトの名無しさん
2007/01/29(月) 19:08:21初心者はわかり始めるまで、我慢… かな?
0184デフォルトの名無しさん
2007/01/29(月) 20:05:54大きなデータをやり取りするのはどうしたらいいのですか?
Sendtextで送るとある程度の長さで切れてしまいます。
SendStreamかなって思ったんですけど、送り方と受け取り方が判りません。
0185デフォルトの名無しさん
2007/01/29(月) 21:56:44TCPの使用上2回以上に分けて送受信されてるだけ。
全部受信し終えてから次に逝け。
0186デフォルトの名無しさん
2007/01/29(月) 22:39:15Application.MessageBox使ってる
オヌヌメ
0187デフォルトの名無しさん
2007/01/29(月) 23:02:12?
0188デフォルトの名無しさん
2007/01/30(火) 04:32:080189デフォルトの名無しさん
2007/01/30(火) 21:52:03対策はどのようにすればよいのでしょうか?
Timerで数秒分現在時刻を取得しておいて計算させれば
うまくいくかなぁとか思っているのですが、いまいちよく分かりません。
0190デフォルトの名無しさん
2007/01/30(火) 22:05:59むかし、PC98のBASICとかでゲーム作っていた時の記憶だけど、
毎回、計測用ループが1秒間に何回回るかでウェイトの値求めていたけど
そんな感じでどう?
0191デフォルトの名無しさん
2007/01/30(火) 22:07:24http://www.ipc.hokusei.ac.jp/~z00104/delphi/thread.html
0192デフォルトの名無しさん
2007/01/30(火) 22:16:05Timerのwait値を1にする
1000個Timeが取得できる
それが一秒ずれでかつ足して1000個になれば良い
つまり
2007/01/30 22:15:44が466個で2007/01/30 22:15:45が534個なら良い
これでいいのでしょうか?とてもいけそうな気がしてきました
0193デフォルトの名無しさん
2007/01/30(火) 22:32:30ちょっと違う。
気をつけて欲しいのはこの辺の設計思想はCUIのマルチタスクの時代の物だから、かなり古くさい。
実際BASICでやっていたのは、temptime:=now if now<>now then temptime:=now ループ inc(i) if now<>now then wait:=inc
てな感じの。
まあ、1秒だと長いので、
Intervalを100ぐらいにして、
適当なループを作り、1回目のtimerイベントと2回目の間に何回ループが回るか計測して、
その数からwaitの値を求める。
で、メイン実行部分はタイマーイベントを使わずに、事実上の無限ループにして、
先に求めた値のウェイトを入れる。
自分で書いてて、問題が山積みな方法だとは思うけど。
0194デフォルトの名無しさん
2007/01/30(火) 23:46:25N行目が1だったら
ウインドウの(N*100,100)の座標に
1辺10の正方形を表示、
N行目が2だったら
ウインドウの(N*100,200)の座標に
1辺10の正方形を表示するという
プログラムの作り方がよく分かりません。
教えていただけないでしょうか?
0195デフォルトの名無しさん
2007/01/30(火) 23:55:37ttp://www.h5.dion.ne.jp/~tuyano/DlphTutor/DlphTutor5.html
ttp://www.h5.dion.ne.jp/~tuyano/DlphTutor/DlphTutor6.html
0196デフォルトの名無しさん
2007/01/30(火) 23:55:39もしかして全部か?なら氏ね
0197デフォルトの名無しさん
2007/01/31(水) 00:17:56宿題かな!頑張れ〜。
ヒントだすから、googleでサンプル検索したり、ヘルプ見たりして頑張れ
・TStringList
・TImage.Canvas.Rectangle
0198デフォルトの名無しさん
2007/01/31(水) 00:35:19それがわかれば理解したうえでの対策法が練れると思うんですが
0199デフォルトの名無しさん
2007/01/31(水) 09:30:261行をタブ区切り単位で Read 出来ませんか?
0200デフォルトの名無しさん
2007/01/31(水) 11:06:48Delphi6でTServerSocketを使い多接続可能なサーバープログラムを作っているのですが
何度か接続を繰り返すとサーバーが応答しない状態になってしまい困ってます。
既に接続してるクライアントとの通信は問題なく行えるのですが
新しい接続要求が送られてこない?状態です。
一体何が問題なのでしょうか・・・宜しくお願いします。
ブラウザなどで、http://localhost:6900 に接続を繰り返すと問題が発生します
0201デフォルトの名無しさん
2007/01/31(水) 11:07:29public
procedure Execute; override;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active := False;
ServerSocket1.ServerType := stThreadBlocking;
ServerSocket1.Port := 6900;
ServerSocket1.Active := True;
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Memo1.Lines.Add('ClientDisconnect');
end;
procedure TForm1.ServerSocket1GetThread(Sender: TObject; ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
begin
Memo1.Lines.Add('GetThread');
SocketThread := TMyServerThread.Create(false, ClientSocket);
end;
{ TMyServerThread }
procedure TMyServerThread.Execute;
begin
ClientSocket.Close;
end;
0202デフォルトの名無しさん
2007/01/31(水) 11:47:58想像だけど、windowsではVSYNC割り込みが無いので
インターバルタイマーを使ってるものが多いのだろう
WM_TIMER メッセージを監視して、このメッセージを増やしたり減らしたりしてるのでは?
0203デフォルトの名無しさん
2007/01/31(水) 12:17:44うはっ!
orz
0204デフォルトの名無しさん
2007/01/31(水) 14:02:59TStringList
を調べてみて。
自分はこれを知らずに、ループで文字列をチェックして分解するサブルーチン作って、今も現役。
0205デフォルトの名無しさん
2007/01/31(水) 14:33:41関数AはプロシージャB,Cを呼び出す。これを実現するにはプロシージャB,Cを
先に記述してから、その下に関数Aを書くと教わりました。
C言語のプロトタイプ宣言(?)のような書き方はDelphi5にはないので
しょうか?
0206デフォルトの名無しさん
2007/01/31(水) 14:49:31あるよ
Interface節に書けばいい
function hoge(a:integer):integer;
とかなんとか
0207デフォルトの名無しさん
2007/01/31(水) 14:55:10希望通りにいきました!ありがとうございます。(m_ _)m
0208デフォルトの名無しさん
2007/01/31(水) 15:04:40お礼が遅くなりました。
試してみます。ありがとうございました
0210デフォルトの名無しさん
2007/01/31(水) 15:44:470211デフォルトの名無しさん
2007/01/31(水) 17:08:550212デフォルトの名無しさん
2007/01/31(水) 17:57:37色んな形態あるんだろうけど
一般的に加速器といったらゲームを改造するツール
具体的には
「動く」とか「攻撃する」といったアクションを連続で実行するときの
次までの待機時間を任意に短くし
通常の○倍の効率を確保するためのプログラム
0213デフォルトの名無しさん
2007/01/31(水) 18:24:080214デフォルトの名無しさん
2007/01/31(水) 22:47:010215デフォルトの名無しさん
2007/01/31(水) 23:01:37インジェクションは知らない。
フックが掛けられたかを監視すれば良いんじゃないかな?
ネトゲだとサーバーにクライアントの経過時間を送りチェックしたり
モニターの垂直同期とクライアント経過時間をチェックをしてるのもある。
0216デフォルトの名無しさん
2007/01/31(水) 23:05:10それはちょっとナニだな。ユニット外から呼び出す必要がないならimplementation部でforward宣言すべし。
Cのプロトタイプ宣言に(概ね)相当する。
function FuncA(Value: Integer): Integer; forward;
こういうやつをimplementationからFuncAの呼び出しをする関数の直前まで(フツーはimplementationの
後ろあたり)に書いておく。
0217デフォルトの名無しさん
2007/01/31(水) 23:43:42うん
0218デフォルトの名無しさん
2007/02/01(木) 01:09:29プログラミングをすることになりました。
恥ずかしながらプログラミングが何のことだかさえわからない状態です。
どうしてもインターン始まる前に慣れておきたいです。
インターンにおいてDelphiを使ってどんな課題が出されるのかわかりませんが、
現時点で私ができることがあったら教えてください。
お願いします。
0219デフォルトの名無しさん
2007/02/01(木) 01:13:070220デフォルトの名無しさん
2007/02/01(木) 01:40:11Delphi6でもダウンロードして”HALLO WORLD”からじゃね?
0221デフォルトの名無しさん
2007/02/01(木) 01:44:39ありがとうございます。
プログラム言語などは参考本などを見ながら
勉強するべきですか??
0222デフォルトの名無しさん
2007/02/01(木) 03:01:450223デフォルトの名無しさん
2007/02/01(木) 04:03:33英字が全て大文字っていうのが気持ち悪くなるぐらい英語を勉強するべきじゃないかな・∀・)"
0224デフォルトの名無しさん
2007/02/01(木) 04:14:11halloでもあってないことはないw
0225203
2007/02/01(木) 04:17:390226デフォルトの名無しさん
2007/02/01(木) 06:08:520227デフォルトの名無しさん
2007/02/01(木) 06:55:34MB_ICONASTERISK
MB_ICONQUESTION
MB_ICONERROR
0228デフォルトの名無しさん
2007/02/01(木) 07:17:32ktkr!
サンクス
0229デフォルトの名無しさん
2007/02/01(木) 09:40:35http://delwiki.info/?%A5%EA%A5%F3%A5%AF%2F%BD%E9%BF%B4%BC%D4
0230デフォルトの名無しさん
2007/02/01(木) 12:29:03ありがとうございます。
とりあえず「Delphi入門教室」から勉強していきます
0231デフォルトの名無しさん
2007/02/01(木) 21:15:25できません。サーバーに接続しています。少々お待ちください。がでて、
しばらく待たせた後、サーバーが見つからないとエラーがでます。取得しないでも動くようですが、
使用許諾コードなしでも問題ないのですか?
0232デフォルトの名無しさん
2007/02/01(木) 21:26:47FAQだな
ttp://www12.plala.or.jp/mojo/Delphi/delphi6-1.html
0233デフォルトの名無しさん
2007/02/01(木) 21:27:45ttp://dn.codegear.com/article/33580
にもあった
0234デフォルトの名無しさん
2007/02/01(木) 22:26:19Resize・ConstrainedResize・CanResizeでは最小化したときにイベントが発生しなかったし、
WM_SIZEのメッセージハンドラを作っても最小化時にメッセージが飛んでこない・・・
環境はDelphi5 + WinXP Proです
0235デフォルトの名無しさん
2007/02/01(木) 22:31:250236デフォルトの名無しさん
2007/02/01(木) 22:32:380237デフォルトの名無しさん
2007/02/02(金) 00:29:22TWMSysCommand CmdType SC_MINIMIZE
0238デフォルトの名無しさん
2007/02/02(金) 02:54:10Fuckだと。こんちきしょう。fuck u!!
0239デフォルトの名無しさん
2007/02/02(金) 06:05:16RESありがとうございます。が、Registraion Codeが分からないので
送られてきたメールにあったResgstration accountを入力して次の
stepに移りBDN accountありで送信したら画面が白くなったまま、一晩待って
見ましたが今も白いままでした。そこでBDN accountなしでいろいろ入力しても
送信すると白くなってずーとそのままです。Regsitration codeにRegistratin
acountを入力したのがいけなかったのでしょうか?
0240デフォルトの名無しさん
2007/02/02(金) 10:22:330241デフォルトの名無しさん
2007/02/02(金) 15:32:43どうしたらいいでしょうが。
デフォルトだといきなり全ページ印刷してしまってうっかり大量印刷の危険があるのでなんとかしたいです。
0242デフォルトの名無しさん
2007/02/02(金) 21:39:39Delフサさんが回答してくれてます。こちらでどうぞ。
ttp://delfusa.blog65.fc2.com/blog-entry-39.html
0243デフォルトの名無しさん
2007/02/02(金) 23:57:19Delphi終了時にエラーが出るようになったけど、みんなそう?
他にもコンポーネント入れてるから相性とかあるのかな?
0244デフォルトの名無しさん
2007/02/03(土) 00:39:150245デフォルトの名無しさん
2007/02/03(土) 01:19:070246デフォルトの名無しさん
2007/02/03(土) 05:01:11Delphi6では、ならないよ。
BDS2006だと、Quadruple Dなんか入れなくても、終了時にエラーが出るようになるから、
気にならない。
0247デフォルトの名無しさん
2007/02/03(土) 14:03:31やっぱり表示が可能な行数はマシンのスペックに依存しますか?
列ごとに文字数を何バイトまでと制限を付けたら、沢山の行数を表示することが可能になる
っていう機能とかありますか?
0248デフォルトの名無しさん
2007/02/03(土) 15:29:47優しいおにいさんが超高速にしてくれるでしょう。
0249デフォルトの名無しさん
2007/02/03(土) 15:33:45沢山じゃなくて、もうちょっと具体的に数値挙げたほうがいいよ
とりあえず、更新前にVisibleをFALSEにして更新後にTRUEにするとかやってみ
0250デフォルトの名無しさん
2007/02/03(土) 16:17:15こんな感じです、これで1000行位読もうとしてるんです。
スピードは遅くて良いんですけど、沢山の行数を読みたいんです。
カラム0 カラム1 カラム2 カラム3 カラム4
2バイト 約130バイト 約60バイト 約20バイト 約15バイト
ver
STRING1,STRING2,STRING3: String;
ListItem: TListItem;
procedure TForm1.Button1Click(Sender: TObject); {OK}
begin
AssignFile(F,'FILE.TXT'); Reset(F);
while not eof(F) do begin
readln(F,STRING1); readln(F,STRING2);
readln(F,STRING3); readln(F,STRING4);
readln(F,STRING5);
ListItem:=ListView1.Items.Add;
with ListItem do begin
ListItem.Caption:=STRING1;
ListItem.SubItems.Add(STRING2); ListItem.SubItems.Add(STRING3);
ListItem.SubItems.Add(STRING4); ListItem.SubItems.Add(STRING5);
end
end;
closefile(F)
end;
0251デフォルトの名無しさん
2007/02/03(土) 16:18:320252247
2007/02/03(土) 16:20:16ver
STRING1,STRING2,STRING3,STRING4,STRING5: String;
ListItem: TListItem;
F: TextFile;
0253デフォルトの名無しさん
2007/02/03(土) 16:46:51ソートするなら初めSortTypeをstNoneにしておいて
全件読み終わってからstNone以外にしてソート。
僕はこれで少し早くなりました。
0254デフォルトの名無しさん
2007/02/03(土) 16:59:42〜〜
〜〜
ListView1.Items.EndUpdate;
0255デフォルトの名無しさん
2007/02/03(土) 17:26:4810000件とかならVirtualListViewで。OwnerDataプロパティと
OnDataイベントを参照。Delphi付属のデモにもあったっけかな。
0256247
2007/02/03(土) 17:33:08出来ました、読み込み時にスクロールバーがギュイーンと小さくなっていくのが無くなって
読み終わってからパッと表示されて快適になりました。
いまでは2000行以上読んでいます。
皆さん本当にありがとうございましたw
>>255
それ今度、勉強してみますw
0257デフォルトの名無しさん
2007/02/03(土) 19:57:15あるあるww
0258デフォルトの名無しさん
2007/02/04(日) 08:48:20TStringGridで反転選択されいるセル範囲はどうやって取得するのでしょうか?
0259デフォルトの名無しさん
2007/02/04(日) 08:51:580260258
2007/02/04(日) 10:02:06Selectionですね。
お騒がせしました。
0261デフォルト名無し
2007/02/04(日) 12:06:00いいサイトが見つかりません。どこかいいサイトがあれば教えていただきたいです。
よろしくお願いします。
0262デフォルトの名無しさん
2007/02/04(日) 14:15:39なんのデータベースを使うかによるかも
その気になれば、TStringListでも組める
0263デフォルトの名無しさん
2007/02/04(日) 18:42:40どうすればいいでしょうか。
いくつかフリーのコンポーネントを使ってみたのですがソースが提供されないとかコードで代入すると
カンマ区切りにならないとかでちゃんとした物がみつかりませんでした。
0264デフォルトの名無しさん
2007/02/04(日) 20:19:13カンマ区切りで右寄せって、ハウスルールが濃そうな世界。
3桁どりを前提とするかで話が変わる気がするし。
自作推奨。
0265デフォルトの名無しさん
2007/02/04(日) 23:57:51コードで代入するときだけ自前でカンマ区切りにすれば?ちゃんとしたものと
あなたが欲しいものはイコールではないのでしょう、きっと。
0266デフォルトの名無しさん
2007/02/05(月) 00:24:43漏れが作ったコンポだが差し上げる
本来浮動小数点表示用だが通貨型でも使えたはず。
途中放棄したやつなので完全動作するかはわからない
ttp://jgard.hp.infoseek.co.jp/source/syobo0370.zip
0267デフォルトの名無しさん
2007/02/05(月) 14:15:44また、TPaintBox内のスケールを変更するようなメソッドかプロパティはありますでしょうか?
(VBのPictureBoxで言う所の.Scaleメソッド)
0268デフォルトの名無しさん
2007/02/05(月) 14:34:010270デフォルトの名無しさん
2007/02/05(月) 14:40:49後は勝手にどうぞってスタンス
0271267
2007/02/05(月) 15:06:36検索してみたら、描画に関するページに辿り着けましたが
「論理単位」とやらを変更すれば良いのでしょうか?
0272デフォルトの名無しさん
2007/02/05(月) 15:11:07デバイスコンテキストは簡単言えば描画エリアって意味
線とか画像を描く場所は提供するけど他は全部自分でやってねってこと
描画もクリアも保存も何もかも
0274263
2007/02/05(月) 17:43:33自作しようと思ったのですがコンポーネント作る技能がないもので今調べてる最中です。
何かヒントを得られればと思い質問したしだいです。
>>265
> コードで代入するときだけ自前でカンマ区切りにすれば?ちゃんとしたものと
> あなたが欲しいものはイコールではないのでしょう、きっと。
カンマがTEXTに含まれてしまっては困るので表示だけカンマ区切りにする方法が
わかりませんでした。
ご存知でしたら教えてください。
>>266
ありがとうございます。
ですが、エラーが出て解凍できませんでした。
幾つかのソフトで試したのですがすべて未サポートのメソッドエラーでした。
0275デフォルトの名無しさん
2007/02/05(月) 20:29:26あなたが望んだ回答じゃないと思いますが
>カンマがTEXTに含まれてしまっては困るので表示だけカンマ区切りにする方法が
カンマを削るサブルーチンを作る
カンマ入力を簡略しつつ3桁づつ区切りたいなら
TEditを沢山置いて、3桁ごとにフォーカスを飛ばしてやるのは?
コンポーネント作成orカスタムコンポーネント使用ってのは、
効率化にはなるんだけど、
仕様変更やバグが出た時に致命傷になる。
技術的にムリとか枯れたルーチンを使うとか以外は
サブルーチンでやってしまった方がやりやすい
オブジェクト指向に逆行しているけど。
0276デフォルトの名無しさん
2007/02/05(月) 20:46:110277デフォルトの名無しさん
2007/02/05(月) 20:47:19きみは TPaintBox を全くわかってない。
TImage でもつかったらいいよ。
0278デフォルトの名無しさん
2007/02/05(月) 20:56:510279デフォルトの名無しさん
2007/02/05(月) 21:29:50これは TPaintBox の描画の仕組みが分かってないことを示してる。
メッセージベースの再描画の仕組みを全く知らないらしい。
>問題はスケールの方。
全部自分でやるんだよ。TPaintBox とはそういうもの。
オフスクリーンのTBitmap に描画しておいて、自分で比率を計算して縮小拡大して
表示する。または表示用のTBitmapに転写する。それから再描画する。
0280デフォルトの名無しさん
2007/02/05(月) 21:30:460281デフォルトの名無しさん
2007/02/05(月) 21:37:48通常、varで宣言しながら使われない変数があればコンパイル時に警告が出てきますが
出てこない場合があります(出るコードと出ないコードは異なる)
どうすると出なくなってしまうんでしょうか
0282デフォルトの名無しさん
2007/02/05(月) 22:07:12再構築しない場合は、全ユニットをコンパイルする訳ではないので
出ない場合があるのではないかと。
0283デフォルトの名無しさん
2007/02/05(月) 22:39:52逆に考えるんだ。Textにはカンマを含み、そこに文字列を入れるときにはカンマを付加し、
文字列を取り出したらカンマを削除するんだ。
0284デフォルトの名無しさん
2007/02/05(月) 23:24:32単一ユニットのプログラムでも発生するので・・・
ユニット内の関数Aでは警告が出て、関数Bでは出ないとかそんな感じです
0285デフォルトの名無しさん
2007/02/06(火) 00:02:580286デフォルトの名無しさん
2007/02/06(火) 00:41:30拡張子をtxtからpasに変える必要があるようだが。
ちなみにD6Pro
0287デフォルトの名無しさん
2007/02/06(火) 01:16:26うちだと書庫が壊れていて解凍すらできないな
0288デフォルトの名無しさん
2007/02/06(火) 03:45:15そこで、開いているテーブルが、テーブルなのかクエリなのか判別することは可能でしょうか。
また、クエリの場合、クエリのSQL文を取得することは可能でしょうか。
0289デフォルトの名無しさん
2007/02/06(火) 07:45:10>コンポーネント作成orカスタムコンポーネント使用ってのは、
>効率化にはなるんだけど、
>仕様変更やバグが出た時に致命傷になる。
これは、他人の作成したソースの無いコンポーネントについてはそうかもしれないが
自作コンポーネントや、ソースがあるなら自分で対処出来るから、あたらないよ
何か問題がある都度、イベントを追加するなりして対処すればいいんだからさ。
あるいは、インターフェースを同じにして、中身だけ入替えればいいんだからさ
今回の場合だって、コンポーネント自作なら
1個のTEditからテキストへの読み書き+クリップボードコピー時の挙動に介入するコードで対処してもいいし
TEditを動的に作成してしまう作戦に出てもいい。
それを後から変更しても、インターフェースさえ同じならアプリのほかの部分は変更しなくていい。
だけど実際にTEdit並べる方法で作ってしまったら、最初はサブルーチンにまとまっていても、
改変してる間に、アプリ全体にその為のコードがちらばってしまうもの。 そうなってしまうと
誰も手を出せないスパゲッティアプリの出来上がりだ
0290デフォルトの名無しさん
2007/02/06(火) 08:04:48http://msdn.microsoft.com/library/ja/jpado260/htm/dasdkadooverview.asp?frame=true
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpado260/htm/mdmthopenschema.asp
0292デフォルトの名無しさん
2007/02/06(火) 20:34:36配置したコンポーネントをそのまま(プロパティやらItemsも)ファイルに保存、読み込みする荒業ってありますか?
0293デフォルトの名無しさん
2007/02/06(火) 21:39:24TStream.ReadComponent/WriteComponent
RegisterClass
辺りを駆使すれば出来ると思う。
ただこれだとpublishedのプロパティしか読み書きできなかったような。
0294デフォルトの名無しさん
2007/02/07(水) 00:02:11レスありがとうございます。
StringListに「Top=120・・」とかいうようにしてテキストベースで保存することは思いついたんですが(素人ぽい方法?)
TStream.ReadComponent/WriteComponentはちょっとわからんですね(汗
急ぐことではないので、じっくり考えたいと思います。
どうもありがとう。
0295デフォルトの名無しさん
2007/02/07(水) 01:00:36試してないけどさ、
http://www.wwlnk.com/boheme/delphi/tips/index.html
ここの
http://www.wwlnk.com/boheme/delphi/tips/tec1240.htm
これなんかどうだろう。
0296デフォルトの名無しさん
2007/02/07(水) 01:41:480297デフォルトの名無しさん
2007/02/07(水) 02:57:08うわっ、すごい簡単にやってますね!
でもItemsは保存できないみたいですね…
ありがとうございます。
>>296
そうですね。
0298297
2007/02/07(水) 03:19:18なにげにすごいものを見つけたと思いました。
>>295さんありがとう。
0299デフォルトの名無しさん
2007/02/07(水) 07:31:340300デフォルトの名無しさん
2007/02/07(水) 08:31:14IDEを使っている限りはコンパイルエラーも
実行中の例外もその場所を表示してくれるので必要性は特にない
0301デフォルトの名無しさん
2007/02/07(水) 14:55:19temp=temp+曲名
って感じに文字列を連結していった場合、どうやら不正な文字コードが混じっていた場合、tempがそこで途切れてしまいます。
この不正な文字を無視して文字列を連結するにはどうしたらいいでしょうか?
0302デフォルトの名無しさん
2007/02/07(水) 14:56:150303301
2007/02/07(水) 15:47:24なにが不正な文字コードかもわかっていませんorz
どうもタグの変換時にiTunes側が勝手に入力した文字みたいで、選択もできません。
2バイト文字の1文字目かな?とも思いますけどよく分かっていません(汗
TStringListにaddすると完走するんですけど、TStringlist.Textを読み出すと途切れてしまいます。
0304デフォルトの名無しさん
2007/02/07(水) 16:14:08キャッリジリターン、ラインフィールドで連結したもの
それらが悪さしてるじゃないかな
0305デフォルトの名無しさん
2007/02/07(水) 16:15:33切れて表示されてるだけなので安心しろ。
というか、デバッグで確認しろよ。
0306デフォルトの名無しさん
2007/02/07(水) 16:15:49思い込みでプログラムするより、原因調査が第一だと思う。
文字列から一文字づつ追加→出力チェック→OKなら次の一文字追加→...
して何が悪さをしているのか調査したほうがいいのでは?
0307デフォルトの名無しさん
2007/02/07(水) 16:34:07文字列を連結させてる部分のコードを晒しなさい。
優しいおほもだちが直してくれますよ。
0308デフォルトの名無しさん
2007/02/07(水) 16:39:050309デフォルトの名無しさん
2007/02/07(水) 16:42:250310301
2007/02/07(水) 18:26:11自分でチェックしてみてわかったこと
・iTunes上では「ロ」と表示
・delphiのStringに代入すると「・」(WideStringでも一緒)
・iTunesのライブラリをテキストエディタで開き、問題の文字をコピー→文字コードの確認をすると32で普通の半角スペース。(テキストエディタが自動変換している?)
問題の箇所のソースは
for i:=1 to iTunesApp.CurrentPlaylist.Tracks.Count do
begin
Application.ProcessMessages;
if i=1 then
strTempSend:=',"'+iTunesApp.CurrentPlaylist.Tracks.Item[i].Name
else
strTempSend:=strTempSend+'","'+iTunesApp.CurrentPlaylist.Tracks.Item[i].Name+'()';
end;
LogSet('MusicListData'+strTempSend+'"');
end;
LogSetは自作関数でTMemoにaddしているだけです。
strTempSendはWideStringです。
>>309
例外が出ないんですよ
0311デフォルトの名無しさん
2007/02/07(水) 18:32:220312デフォルトの名無しさん
2007/02/07(水) 23:22:370313デフォルトの名無しさん
2007/02/07(水) 23:23:480314デフォルトの名無しさん
2007/02/08(木) 05:48:440315デフォルトの名無しさん
2007/02/08(木) 06:07:25PascalでのnilはCとかだとnullって表記するんだよ
0316デフォルトの名無しさん
2007/02/08(木) 06:33:38nullじゃなくてNULLだろカス
0317デフォルトの名無しさん
2007/02/08(木) 07:08:53文字列はUnicodeベースのWideString型だろ。で、Delphi付属のTMemoはAnsiStringで。
よって、WideString型をTMemoに追加すると自動でUnicode->CP932への変換が起こる(
WideCharToMultiByte)
>iTunesのライブラリをテキストエディタで開き、問題の文字をコピー→文字コードの確認をすると32で普通の半角スペース。(テキストエディタが自動変換している?)
つか、自分で治す気ねぇだろ。なんだよ。「テキストエディタで開き」って・・・
for i := 1 to Length(strTempSend) do
ShowMessage(Format('%.4X', [Ord(strTempSend[I])]))
とかで確認してくれよ・・・。
>>例外が出ないんですよ
無効な文字が含まれてるからって例外はでない。
0318デフォルトの名無しさん
2007/02/08(木) 07:15:09だがC言語ではなくPascalなのだ. よって説明になっていない.
0319デフォルトの名無しさん
2007/02/08(木) 10:17:380320デフォルトの名無しさん
2007/02/08(木) 12:14:100321デフォルトの名無しさん
2007/02/08(木) 12:39:55前提条件は?
・プログラム初心者
・C言語とか、他の言語はやったことある
・言語の一般論の話
おれは、ActiveBasicやったことないから答えられないけど
0322デフォルトの名無しさん
2007/02/08(木) 13:11:54Enabled:=false にするとコンボボックスの色が変わってしまい
OnMouseDownイベントなども発生しなくなってしまいます。
何か良い方法はありませんでしょうか。
0323デフォルトの名無しさん
2007/02/08(木) 13:19:48連続したメモリ空間に確保されるんでしょうか?
0324デフォルトの名無しさん
2007/02/08(木) 13:21:36yes
0325デフォルトの名無しさん
2007/02/08(木) 13:26:17thx
0326デフォルトの名無しさん
2007/02/08(木) 13:32:21リストの出ないTComboBoxなんてTEditで置きかえれるだろ
0327デフォルトの名無しさん
2007/02/08(木) 13:35:361次元動的配列なら連続した領域に置かれるけど
多次元動的配列の場合はそうとは限らない
他の言語で作ったDLLに多次元動的配列のポインタを渡す場合なんかは注意
0328デフォルトの名無しさん
2007/02/08(木) 13:45:500329デフォルトの名無しさん
2007/02/08(木) 13:51:10恐ろしく初歩的なことのようで申し訳ないのですが・・。
テキストデータを読み込んだStringGridがあるんですけど、
テキストの行数が1000くらいあるのでスクロールバーが表示されます。
その最後の行が初期状態で見えるようにしたいのですが、
表示位置を先頭行から終端の行に移動させるにはどうすればよいのでしょうか?
StringGrid1.Col:= x;
StringGrid1.Row:= y;
だとカーソルは移動するのですが、
画面の表示位置が変わらなくて困っています。
0330デフォルトの名無しさん
2007/02/08(木) 13:54:42まあ多次元動的配列は 動的配列の動的配列だからね
type TAAinteger =array of array of integer;
var a:TAAinteger;
SetLength(a,10,20); のようにすると
要素20の動的配列が10個分確保される
でa[0] はポインタだから a[1] とは4バイト分離れているだけ
>>329
LeftCol / TopRow
0331デフォルトの名無しさん
2007/02/08(木) 14:01:03TStrinGrid.TopRowプロパティを使うんだ
StringGrid1.TopRow := 1000
とかってやると1000行目の行が一番上に表示されるようにスクロールされる
0332デフォルトの名無しさん
2007/02/08(木) 14:06:59表示させるにはどうすればいいのでしょうか。
var
s: string;
nSize: DWORD;
begin
//ユーザー名取得
s := StringOfChar(#0,100);
nSize := 100;
GetUserName(PChar(s),nSize);
SetLength(s,nSize);
ShowMessage(s + 'abc');
end;
0333デフォルトの名無しさん
2007/02/08(木) 14:26:40表示されないのは、 sの文字列最後に #0 が入っている為
これを削除する一番簡単な方法は
s:=PChar(s);
これを SowMessageの前に入れればいい
0334デフォルトの名無しさん
2007/02/08(木) 14:30:25sのサイズがユーザー名分しか確保されてないかので
abc'の3バイトを足して確保
ヌル文字列の連結なのでStrCat
var
s, s2: string;
nSize: DWORD;
begin
//ユーザー名取得
s := StringOfChar(#0,100);
nSize := 100;
GetUserName(PChar(s),nSize);
SetLength(s, nSize + Length('abc'));
ShowMessage(StrCat(PChar(s), 'abc'));
end;
0335デフォルトの名無しさん
2007/02/08(木) 14:33:48アンタ>>330か?
いっつも俺の一歩先を行くw
それはそうとそんな方法あるの知らなかった
0336デフォルトの名無しさん
2007/02/08(木) 14:38:56ありがとう
やりたい事は1次元静的配列の1次元動的配列なんだけど
type TArrayByte =array [0..19]of Byte;
var a: Array of TArrayByte;;
var Count: Integer;
Count := 10;
SetLength(a, Count);
このようにすると20バイトの領域が連続して10個並ぶ筈だよね?
で、↓の様な手続きに丸ごと渡したいので
procedure FuncTest(const Buf; Size: Integer):
FuncTest(a, Count * SizeOf(TByteArray));
として一応正常に動いてるんだけど、たまにエラーが出てたので
質問させて貰いました。
0338デフォルトの名無しさん
2007/02/08(木) 14:58:25> function _WriteLn(var t: TTextRec): Pointer;
というものがあったんですが、
ヘルプに書かれているWritelnの宣言とは、名前も引数も違うし、procedureのハズなので違いますよね。
0339デフォルトの名無しさん
2007/02/08(木) 15:17:29構造体の場合packed を使ってないとワード境界にゴミを入れられる場合があるのと
そのコードそのままだとすれば、TByteArray はSysUtilsで定義済みの
TByteArray = array[0..32767] of Byte
になっちゃうから、そもそも正しくないよ
0340デフォルトの名無しさん
2007/02/08(木) 15:19:38いった低レベルな関数のソースは公開してない
それらはコンパイルの時に暗黙の内にリンクされる
0341デフォルトの名無しさん
2007/02/08(木) 15:25:51Write系のコードは、systemにある その_WriteXXXX 系の関数にコンパイラが展開するんだよ
複数の引数がそれぞれの型に応じた関数に置き換わって
_WriteLn は、作成する文字列の最後に CR/LFを追加するだけ
実際の出力はその後にコンパイラで procedure __IOTest; が呼ばれるように追加されて、そっちで出力される
0342デフォルトの名無しさん
2007/02/08(木) 15:26:230343デフォルトの名無しさん
2007/02/08(木) 15:30:23Writeln(5:3);
みたいな記述が出来るけど、これはWriteにだけ使える記述?
他の関数や自分で作った関数には使えないようなので。
0344デフォルトの名無しさん
2007/02/08(木) 15:30:270345デフォルトの名無しさん
2007/02/08(木) 15:30:34あ、TByteArrayは書き間違い。
SysUtilsで定義済みなのは知っていたので敢えてTArrayByteとしてみた
つもりが間違ってたみたい。
あと型名とかは適当です。
0346デフォルトの名無しさん
2007/02/08(木) 15:31:550347デフォルトの名無しさん
2007/02/08(木) 15:32:03へー
勉強になった
0348デフォルトの名無しさん
2007/02/08(木) 15:41:35後の為に packed は追加しておこう。
もっとも、そもそも そういうメモリ操作を伴うようなコードは推薦されなくなってるからなあ・・・
0349301
2007/02/08(木) 15:54:26そのソースをちょっと意地ってようやくチェックすることができました。
ちょっとテンパって(仕事じゃないのに)視野が狭かったようです。
問題の文字は0000でした。
これがヌルポってやつですかね?
初遭遇です。
iTunes設計がクソだorz
0350デフォルトの名無しさん
2007/02/08(木) 16:09:260351デフォルトの名無しさん
2007/02/08(木) 16:16:31var a: Array of TArrayByte;
を
var a: packed Array of TArrayByte;;
としてみたけど変わらないみたい。
取りあえず、もちっとシンプルなデータ用意して検証してみます。
0352デフォルトの名無しさん
2007/02/08(木) 16:23:38じゃあ関数に渡す前に簡単なチェックルーチンを作って確認したら?
for i:=1 to High(a) do
if ( integer(@a[i] )-integer(@a[i-1] ) )<> SizeOf(TByteArray) then raise Exception.Create('あ! 連続してないぞ!');
FuncTest(a, Count * SizeOf(TByteArray));
0354デフォルトの名無しさん
2007/02/08(木) 17:04:48【問1】2〜任意の数までの間に現れる素数を求めて表示するプログラム。
【問2】I=1/12×b×h^3
任意の数値hとbを入力して答えを出力するプログラム
【問3】2行×2列の行列同士の積を求めるプログラム
【問4】5行×5列の行列同士の積を求めるプログラム。計算結果をファイルに書き出せる様にする。
神様お願いします!!
0355デフォルトの名無しさん
2007/02/08(木) 17:08:5617:15 開会式
17:30 気合をこめる
18:00 問題を眺める
18:30 解決の糸口をつかむ
19:00 夕飯を食べる
19:30 問題を解き始める
23:00 全問解き終える
23:10 閉会式
23:15 送辞
23:20 答辞
23:25 自由時間
0356デフォルトの名無しさん
2007/02/08(木) 17:12:50せっかく作っていただいて悪いのですがそれじゃあないんです。。。。
0357デフォルトの名無しさん
2007/02/08(木) 17:20:050358デフォルトの名無しさん
2007/02/08(木) 17:28:04態々コード書いてくれてありがと。
試してみたけど、やっぱりポインタは連続してるみたい。
う〜んなにが悪いんだろ。。。
0359デフォルトの名無しさん
2007/02/08(木) 17:47:360360デフォルトの名無しさん
2007/02/08(木) 17:47:47procedure prog1(n:Integer);
var b:TBits;
var i,j:Integer;
begin
b:=TBits.Create;
try
b.Size:=n;
AllocConsole;
for i:=2 to b.Size-1 do
if not b.Bits[i] then begin
for j:= 2 to (n div i) do b.Bits[i*j]:=true;
writeln(i);
end;
finally b.Free end;
end;
0361デフォルトの名無しさん
2007/02/08(木) 17:49:26君がやりたいのは静的配列の動的配列。
で、>>330がいってるのは、動的配列の動的配列。OK?
つか、何を試してるんだ??レコード型の使ってるの?
つまり、レコード型の静的配列の動的配列?
0362デフォルトの名無しさん
2007/02/08(木) 17:49:340363デフォルトの名無しさん
2007/02/08(木) 17:55:402番は
http://piza2.2ch.net/tech/kako/1003/10035/1003559977.html
4 名前: 四則演算数値化
を使い
procedure prog2;
var h,b,i:string;
begin
AllocConsole;
Write('h=');readln(h);
Write('k=');readln(b);
I:='1/12*'+b+'*'+h+'*'+h+'*'+h;
writeln('I='+I+'=', FourNum(i));
end;
0364デフォルトの名無しさん
2007/02/08(木) 18:10:48http://namahage.dip.jp/public/2ch_s/21/1089719714
に無いかな?
現行スレはPascalの宿題は俺にやらせろ!!Part2
http://pc10.2ch.net/test/read.cgi/tech/1136994325/
0365363
2007/02/08(木) 18:24:24I:='1/12*'+b+'*'+h+'*'+h+'*'+h;
↓
I:='1/12*'+b+'*('+h+'^3)';
とした方がいいかもな
0366デフォルトの名無しさん
2007/02/08(木) 18:29:26あ、いちお配列のメモリ割り当ては分かったんで、解決ってことで。
あとは、データそのものに問題あるかFuncTest(実装不明)に問題あるかなので
いろいろデータをいれて試してみるしかないです。
みんなありがとでした。
0367デフォルトの名無しさん
2007/02/08(木) 18:47:04みなさんありがとうございます!!参考になりました!!
あとはなんとか自己解決できそうです!本当にありがとうございました!
0368デフォルトの名無しさん
2007/02/08(木) 21:23:58except
hogehoge;
end;
この場合、hogehogeで例外が出たら無限ループですか?
0369デフォルトの名無しさん
2007/02/08(木) 21:37:07いいえ、
try〜 except までの分を exceptでキャッチするのであって
hogehogeはtry の中で書かれていないので その外に例外を出す事になりますよ
0370デフォルトの名無しさん
2007/02/08(木) 21:46:03レスありがとうございます。
try
except
try
except
hogehoge;
end;
end;
こうやって書いたところでどうも無限ループにはまったぽいんですが再現できなくて悩んでいます。
別の不具合でループしたかな…
0371デフォルトの名無しさん
2007/02/08(木) 22:32:500372デフォルトの名無しさん
2007/02/08(木) 22:36:580373デフォルトの名無しさん
2007/02/08(木) 22:46:29一体何がしたいんだろ?
あと、どうしてもネストする時は関数内関数とかでスタックフレームを別けた方がいいんじゃないの?
0374デフォルトの名無しさん
2007/02/08(木) 23:07:33例外が発生した場合、念のため実行したいメソッドがあるけど、
それもエラーを出す事がありうるなんて事は、ちょくちょくある。
0375デフォルトの名無しさん
2007/02/08(木) 23:24:19無料のターボデルファイはひょっとすると
パラドックス付いてません?
データベースデスクトップ探しているのですが見つかりません
ま・・・まさか買えという意味じゃないですよね・・・ひいいい;;
0376デフォルトの名無しさん
2007/02/08(木) 23:28:31Delphi
ActiveBasicはバージョンが0.01上がると言語仕様が派手に変わることがある。
趣味で作っているものだし、しょうがないんだけどね。
0377デフォルトの名無しさん
2007/02/08(木) 23:38:110378デフォルトの名無しさん
2007/02/09(金) 01:36:09背景画像の上にあっても、.Colorが上書きされないようにってこと
0379デフォルトの名無しさん
2007/02/09(金) 04:11:45TCustomLabel.TransparentプロパティをTrueにするとか。
0380デフォルトの名無しさん
2007/02/09(金) 04:44:53どのようにしたら実現可能でしょうか。
0381デフォルトの名無しさん
2007/02/09(金) 05:26:25TCharacter = class
private
FCurrentPos: TPoint;
public
property CurrentPos: TPoint read FCurrentPos write FCurrentPos;
end;
例えば上記のようなクラスを作ってCurrentPosの座標を書き換えたいとき
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (key=VK_UP) then
FCharacter.CurrentPos.Y := FCharacter.CurrentPos.Y - 16;
end;
この様に書くと「代入できない左辺値です」とコンパイルエラーが出ます。
これはプロパティが読み出し専用で呼び出されているからなんでしょうか?
CurentPosがポインタではないから?
PPointを使って動的に領域確保すれば上記の様な書き方でも問題ないんでしょうか?
x,yを個別にフィールド或いはプロパティにすれば済む問題なんですが、なんか腑に落ちなくて。。。
0382デフォルトの名無しさん
2007/02/09(金) 05:57:09FCharacter.CurrentPos := aPoint;
こういう記述は、write の記述に従って、例えば write setCurrentPos となっていた場合、
setCurrentPos(aPoint);
のように呼び出される作りになっている。
なので、プロパティの子プロパティに対して直接代入することはできない。
但し、ポインタ参照やクラスにすれば、子プロパティにもアクセスできるようになる。
ただ、この例の場合、read も write も FCurrentPos を直接参照しているのだから、
わざわざプロパティにしないで、 CurrentPos:TPoint; と宣言すれば済む話ではないかな。
0383デフォルトの名無しさん
2007/02/09(金) 06:31:55ついてる
0384381
2007/02/09(金) 06:38:59ありがとうございます。
> プロパティの場合、
> FCharacter.CurrentPos := aPoint;
> こういう記述は、write の記述に従って、例えば write setCurrentPos となっていた場合、
> setCurrentPos(aPoint);
> のように呼び出される作りになっている。
はい、一応それは分かっているのですが、例えば
property read GetCurrentPos write SetCurrentPos;
となっていた場合
FCharacter.CurrentPos.X とした時は GetCurrentPos が呼び出される分けですよね?
なので
property read FCurrentPos write SetCurrentPos;
とすると、FCurrentPos の領域全体が読み込み専用にロック?される故に子プロパティにも代入はできないと。
でも、ポインタ(クラス)だとロックされるのはポインタの4バイトのみなので子プロパティ(実際の領域)は
ロックされてないから代入できるって事でいいんですよね?
> ただ、この例の場合、read も write も FCurrentPos を直接参照しているのだから、
> わざわざプロパティにしないで、 CurrentPos:TPoint; と宣言すれば済む話ではないかな。
アクセサメソッドは面倒だったので省略して書いたんですが、確かに、public CurrentPos:TPoint; とすれば済むんですよね。。。
0385デフォルトの名無しさん
2007/02/09(金) 06:45:07> property read GetCurrentPos write SetCurrentPos;
> となっていた場合
> FCharacter.CurrentPos.X とした時は GetCurrentPos が呼び出される分けですよね?
そう。つまり、プロパティを読み出した場合、そのプロパティは変数じゃなくて関数の返値なので、代入できない。
CurrentPos.x は、
GetCurrentPos.x であり、それに代入することはできないということ。
0386デフォルトの名無しさん
2007/02/09(金) 09:27:16Cだとstrlenの戻り値はsize_tですし…
Cardinalじゃない理由は何ですか?
0387デフォルトの名無しさん
2007/02/09(金) 10:00:23>Cardinalじゃない理由は何ですか?
文字列型の最大長はIntegerで扱えるから
ちなみにCには文字の配列はあっても文字列型は無い
0388デフォルトの名無しさん
2007/02/09(金) 13:04:08Cardinalにすると、Integerな数と演算させると演算中にInt64に変換されて速度が落ちるから、というのもあるかな。
おまいさんも、負の範囲が必要じゃないときは、Cardinalじゃなくて、
type
MyWhole=0..MaxInt ;
みたいなのを定義して使うといいぞ。
って、どこぞの本にかいてあったはず。
0389デフォルトの名無しさん
2007/02/09(金) 13:58:470390デフォルトの名無しさん
2007/02/09(金) 14:29:51IDEオプションで範囲チェック入れろよw
0391デフォルトの名無しさん
2007/02/09(金) 15:44:50これを隠すにはどうしたらいいでしょう?
0392デフォルトの名無しさん
2007/02/09(金) 15:51:510393デフォルトの名無しさん
2007/02/09(金) 15:58:15最小化した時にデスクトップ上からけしたいんです。
Application.Minimize;
だと、左下に最小化されたタイトルバーみたいな物が残ります。(これが最小化ってことだとは思いますが…)
0394デフォルトの名無しさん
2007/02/09(金) 16:06:000395デフォルトの名無しさん
2007/02/09(金) 16:09:400396デフォルトの名無しさん
2007/02/09(金) 16:11:01知らないならレス付けないで
0397デフォルトの名無しさん
2007/02/09(金) 16:42:440398デフォルトの名無しさん
2007/02/09(金) 16:55:04他のアプリと違う操作にしたいのか、あるいは他のアプリと結果が違うのか?
他のアプリでもそうだけど、
最小化すると、タスクバーがあるwindowsの場合はタスクバーにのみ残る
(古いwindowsではタイトルだけ残ってたけど)
一部常駐系のアプリではタスクバーからも消して、通知領域にのみ残る
http://support.microsoft.com/kb/882639/ja
もしかして、そうしたいのか?
0399デフォルトの名無しさん
2007/02/09(金) 17:21:12>一部常駐系のアプリではタスクバーからも消して、通知領域にのみ残る
それ、それです。
タイトルバー、タスクバーを消して
通知領域にアイコン表示するところまでは行ったんですけど。
0400デフォルトの名無しさん
2007/02/09(金) 17:27:15また、タスクバーにも入れたくないときは、
Application.OnMinimize := AppMinimize;
を設定し、
procedure TForm2.AppMinimize(Sender: TObject);
begin
ShowWindow(Form1.Handle, SW_HIDE);
end;
0401デフォルトの名無しさん
2007/02/09(金) 17:36:02http://kazina.seesaa.net/article/20890953.html
0402デフォルトの名無しさん
2007/02/10(土) 19:08:46ソフト作るごとに、System.ParamCount で、 System.ParamStrで、しこしこすんのがめんどくなってきた。
SysUtils.FindCmdLineSwitchは、単体パラメータしか判別してくれないし。
rubyのoptparse みたいなのがほしす
0403デフォルトの名無しさん
2007/02/10(土) 19:43:10-a -bを-abとか、-a hogeを-ahogeとかは書けなくなるが・・・
0404デフォルトの名無しさん
2007/02/10(土) 20:44:260405デフォルトの名無しさん
2007/02/10(土) 21:25:48一番最初の
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
この部分に、Mathを入れたいのですが
いちいち起動時にMathを書くのは面倒です。
デフォルトでMathを書いてくれるようにするにはどうしたらいいんでしょう?
0406デフォルトの名無しさん
2007/02/10(土) 21:31:34Mathを使うと実行ファイルが結構大きくなるので。
どうしてもというのなら、そういうプロジェクトを一個つくってそれを開けばいいんじゃねの
0407デフォルトの名無しさん
2007/02/10(土) 21:50:09ひでぇなこりゃww
クソ豚(高津&新城)もいい加減にしないと、アク禁&警察いきだぞww
0408デフォルトの名無しさん
2007/02/11(日) 02:45:08Delphi6とturboで作ったソフトはソースコード公開しないでいいんですよね?
6は商用利用不可っぽいですが、turboはOKなんでしょうか?
今からどちらかを使ってプログラミングをしようかと思うのですが
どちらを使ったほうがいいですか?
ほんのちょっとデータ管理する程度のソフトを作りたいのですが・・・
0409デフォルトの名無しさん
2007/02/11(日) 03:27:13YES
GPL のライブラリを使わなければ問題なし
> turboはOKなんでしょうか?
YES
> どちらを使ったほうがいいですか?
DB を使うならTurbo
> 6は商用利用不可っぽいですが、
商用利用=作ったアプリを売るという話じゃね
自分で使うだけなら、どんな用途でも問題ないと思う
0410デフォルトの名無しさん
2007/02/11(日) 15:18:32↑にあるRemoveTokenを利用しているのですが、
返り値の一文字目だけを見たいので、
so1 := RemoveToken( msg1, _EOF ) ;
first1 := so1[1];
みたいにしたところ下の行でエラーがでます
上の行を
so1 := RemoveToken( msg1, _EOF ) +' ';
のように何かしら文字列を足してやればエラーはでないのですが、
これはこれでそのまま利用したいので困っています
きれいに解決できる方法はないでしょうか?
よろしくお願いします
0411デフォルトの名無しさん
2007/02/11(日) 15:23:200412デフォルトの名無しさん
2007/02/11(日) 15:32:56ありがとうございました
三日悩んだのに
空文字の可能性に気付かなかったとはアホでした...orz
0413デフォルトの名無しさん
2007/02/11(日) 20:30:49数年前のオレなら一瞬でできてたと思うだけどよw
fortranばっかつかっててwwdelphiわすれたw
むしろdelphiってよりpascalか?
まぁとりま2次元配列の読み方書き方おしえてくれ!!!
0414デフォルトの名無しさん
2007/02/11(日) 20:56:480415デフォルトの名無しさん
2007/02/11(日) 21:59:12なんかこうやったら300まで書いてくれないんです><
for i:=1 to 300
do
writeln(ff,i);
0416デフォルトの名無しさん
2007/02/11(日) 22:41:05ちゃんとクローズしてるか?
0417デフォルトの名無しさん
2007/02/11(日) 22:48:31ありがとうございます><
今夜は寝れそうです><
fortranのいい加減な文法になれるとdelphiがうざく感じますね><
0418デフォルトの名無しさん
2007/02/11(日) 22:55:59いい加減なのもウザいのもお前だ
0419デフォルトの名無しさん
2007/02/13(火) 10:11:32それを読み込もうとしています
下のソースは読み込みは成功するのですが
fs.Freeの所でEAccessViolationが発生します
エラー内容がアドレス00000000〜なので
Delphi様は「fsなんてメモリ上に存在しないにょ」「そんなのFree出来ません><」と
仰ってると推測されるのですがどこかおかしい部分あるでしょうか?
書きこみ
ms := TMemoryStream.Create;
try
sData := Edit1.Text;
ms.WriteBuffer(sData, Length(Edit1.Text));
ms.SaveToFile('C:\hoge.dat');
finally
ms.Free;
end;
読み込み
fs := TFileStream.Create('C:\hoge.dat', fmOpenRead);
try
fs.ReadBuffer(sData, fs.Size);
Edit2.Text := sData;
finally
fs.Free;
end;
0420デフォルトの名無しさん
2007/02/13(火) 10:31:39遅くなりましたが、ありがとうございます
0421デフォルトの名無しさん
2007/02/13(火) 11:26:30Mode パラメータには,オープンモードと共有モードを表す識別子を or で結んで指定します。オープンモードには次のいずれかの値を指定します。
0422デフォルトの名無しさん
2007/02/13(火) 12:31:56誤爆?
0423デフォルトの名無しさん
2007/02/13(火) 13:14:55>>421は>>419への回答。共有モードをor で結べ
と書いてあるTFileStream.CreateのHelpのこぴぺ
0424419
2007/02/13(火) 13:21:39指定してみましたが変わらずです
0425デフォルトの名無しさん
2007/02/13(火) 14:45:34ちゃんと読み込むデータのサイズになってるか??つか、Freeじゃなく、
ReadBufferでエラーになってるように思える。
0426419
2007/02/13(火) 15:27:03sDataはString型です
書き込み
×ms.WriteBuffer(sData, Length(Edit1.Text));
○ms.WriteBuffer(sData[1], Length(Edit1.Text));
読み込み
×fs.ReadBuffer(sData, fs.Size);
○fs.ReadBuffer(sData[1], fs.Size); //sTempは事前に確保
sDataをそのまま渡していたのでsDataが指しているアドレスじゃなく
sData自身のアドレスが渡っていました
その為、スタックが壊れてたまたまfs.Freeの部分でアクセスヴァイオレーションが
発生していたと思われます
お騒がせしました
0427デフォルトの名無しさん
2007/02/13(火) 15:38:49メモリアクセスが直接見えてる部分も残ってて、
それを面白いと思えればいいんだけど、
ミスすると原因不明な困ったバグを入れてしまう部分にもなりえるからな
0428ななしへたぐらま ◆XcB18Bks.Y
2007/02/13(火) 15:40:53sDataが空の時にsData[1]とするとアクセス違反になるので
空だったら読み書きしないようにする必要があります.
0429デフォルトの名無しさん
2007/02/13(火) 16:07:06fs.ReadBuffer(sData[1], fs.Size);
0430デフォルトの名無しさん
2007/02/13(火) 19:40:54> setlength(sData,fs.Size); //<---- これが必要だろ?
同意。
>>419のコードだと、書き込んだ同じ文字列を読み出しているからsDataの長さが
同じになっていて、たまたま問題が起きてないみたいだけど、本当は必要だよね。
0431デフォルトの名無しさん
2007/02/13(火) 20:51:40SetLength(sData,fs.Size);
fs.ReadBuffer(PChar(sData)^,fs.Size);
ってことね。
0432デフォルトの名無しさん
2007/02/13(火) 21:47:52これどうやるの? ってか、バイナリ以外保存できるのか?
0433デフォルトの名無しさん
2007/02/13(火) 22:15:13テキストで保存すると環境によって CR/LFがついたりLFだけになったり
といってもDelphiとKylixの2つの差だけどね
0434デフォルトの名無しさん
2007/02/14(水) 04:27:14代入とはこれいかに?
0435デフォルトの名無しさん
2007/02/14(水) 08:08:31VBなら新しい言語なのにね
0436デフォルトの名無しさん
2007/02/14(水) 08:17:50>高津の新城は南部学区なんだがな
ここの>>1ってマジ馬鹿だねw
マジ笑うw
785 :↑ :2007/02/13(火) 17:26:37 ID:1sb18rZn
お前の発言だろうが(超新星爆)
脳ミソが溶けてる奴は記憶力が激低だな(ブラックホール爆)
0437デフォルトの名無しさん
2007/02/14(水) 09:34:59まあファイルストリームには、もはやテキストだのバイナリーだの区別はなくなってるから
若者には区別する事そのものが奇異に見えるんだろな。
0438デフォルトの名無しさん
2007/02/14(水) 09:47:19まあファイルストリームには、もはやテキストだのバイナリーだの区別はなくなってるから
若者には区別する事そのものが奇異に見えるんだろな。
0439デフォルトの名無しさん
2007/02/14(水) 11:47:290440デフォルトの名無しさん
2007/02/14(水) 11:56:160441デフォルトの名無しさん
2007/02/14(水) 12:18:450442デフォルトの名無しさん
2007/02/14(水) 12:46:41できました。ありがとうございました
0443デフォルトの名無しさん
2007/02/14(水) 14:06:23メモリ使用量がWin2000で7MB、XPで47MBとOSによってむっちゃ差があるんですが、OSでメモリの計算式変わってます?
メモリ使用量47MBってすごいデカイ気がするんですが(汗
0444デフォルトの名無しさん
2007/02/14(水) 14:23:18雑魚が・・・
0445デフォルトの名無しさん
2007/02/14(水) 14:35:37エディタにしたいのですが、どうしたらいいでしょうか
0446デフォルトの名無しさん
2007/02/14(水) 14:43:07表示-列選択 仮想メモリサイズ見れば?
>>445
エディタ.Handle
0447デフォルトの名無しさん
2007/02/14(水) 15:02:16星が動くやつとかめっちゃ簡単なのでけっこうです!!
よろしくお願いします!!
0448デフォルトの名無しさん
2007/02/14(水) 15:41:59久しぶりに言うぞ…
先ずはググれ
話はそれからだ!
0449デフォルトの名無しさん
2007/02/14(水) 16:23:220450デフォルトの名無しさん
2007/02/14(水) 16:36:52program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
C: Integer;
begin
C := 0;
while C < 78 do
begin
Write('★');
Sleep(100);
Write(#$08#$08);
Write(' ');
Inc(C);
end;
end.
0451デフォルトの名無しさん
2007/02/14(水) 18:10:10しかし、星を動かすとなると、地球シミュレーターどころの規模じゃないな。がんばれ。
0452デフォルトの名無しさん
2007/02/14(水) 21:35:330453デフォルトの名無しさん
2007/02/15(木) 00:51:220454デフォルトの名無しさん
2007/02/15(木) 05:12:090455デフォルトの名無しさん
2007/02/15(木) 05:50:41つ{$APPTYPE CONSOLE}
0456デフォルトの名無しさん
2007/02/15(木) 08:24:060457デフォルトの名無しさん
2007/02/15(木) 11:22:09program Project1;
uses windows,forms;
begin
with TForm.Create(nil) do try
show;
while Visible do
begin application.ProcessMessages;
Canvas.Font.Color:=random($ffFFff);
Canvas.Font.Size:= random(30)+5;
Canvas.TextOut(random(width),random(Height),'★');
Sleep(1);
end;
finally free end;
end.
0458デフォルトの名無しさん
2007/02/15(木) 11:32:58EnabledがFalseのままで黒にしたい場合どうすればよいのでしょうか?
0459デフォルトの名無しさん
2007/02/15(木) 11:34:23星が動くって意味がわかるか?
0460デフォルトの名無しさん
2007/02/15(木) 11:41:03Panelの上にEditBoxを置いてPanelのEnabledをFalse
適当だけど。
0461デフォルトの名無しさん
2007/02/15(木) 11:43:41program Project1;
uses windows,forms;
var x:integer=0;
var y:integer=0;
var xs:double=0;
var ys:double=0;
begin
with TForm.Create(nil) do try
show;
while Visible do
begin
Canvas.Font.Color:=$ff00ff;
x:=x+round(xs); y:=y+round(ys);
if (x<=0) or (x>=ClientWidth -Font.Size) then xs:=-xs+random(3)-1;
if (y<=0) or (y>=ClientHeight-Font.Size) then ys:=-ys+random(3)-1;
Canvas.TextOut(x,y,'★');
Sleep(33);
application.ProcessMessages;
Canvas.Font.Color:=Color;
Canvas.TextOut(x,y,'★');
end;
finally free end;
end.
0462デフォルトの名無しさん
2007/02/15(木) 11:44:29TEditはWindowsのコントロールを使っていて
Windowsのコントロールがそういう仕様だから無理
ReadOnly = Falseで逃げるとかごまかし手段はいくらでもあるが
0463デフォルトの名無しさん
2007/02/15(木) 11:46:19ありがとうございます。
仕様で直接変更は無理なんですね。
ごまかしつつがんばってみます。
0464ななしへたぐらま ◆XcB18Bks.Y
2007/02/15(木) 12:04:46一見操作できそうで実は操作できないというのはユーザーにとってはストレスだと思いますよ.
その点は解決する必要があります.
0465デフォルトの名無しさん
2007/02/15(木) 12:57:33TEdit1.Color := clBtnFace;
もしくは
TEdit1.Enabled := False;
TEdit1.Color := clBtnFace;
が最適
0466デフォルトの名無しさん
2007/02/15(木) 12:58:11○Edit1
0467デフォルトの名無しさん
2007/02/15(木) 13:26:59使うたびにCreate、freeを繰り返すのと、
パブリックにしちゃって、アプリ起動時にCreate、終了時にfree
するのとどっちがいいんですかね?
気にするほどじゃない問題?
0468デフォルトの名無しさん
2007/02/15(木) 13:58:09フォームをSizenableにして範囲外においておけば
見たいときにフォームサイズ変えれば直ぐに内容が見れて
デバッグも簡単だし。
処理結果とか書いていくようにすれば、ログ表示になるしね。
0469デフォルトの名無しさん
2007/02/15(木) 13:59:47program Project1;
uses windows,forms,Graphics;
var xsize,ysize:integer;
var x,y,xs,ys:double;
var Canvas:TCanvas;
begin
x:=1;y:=1;xs:=5;ys:=0;
Canvas:=TCanvas.Create;
Canvas.Handle:=GetDC(0);
with Canvas do
try
Font.Handle:= GetStockObject(OEM_FIXED_FONT );
xsize:=GetSystemMetrics(SM_CXSCREEN)-Font.Size;ysize:=GetSystemMetrics(SM_CYSCREEN)-Font.Size;
while (GetKeyState(VK_ESCAPE) and $8000)=0 do begin
Canvas.Font.Color:=$8080 ;
x:=x+xs; y:=y+ys; ys:=ys*0.997+200/ysize;
if x<=0 then xs:= abs(xs);
if y<=0 then ys:= abs(ys);
if x>=xsize then xs:=-abs(xs);
if y>=ysize then begin ys:=-1.2*abs(ys)-random(2000)/ysize;xs:=xs+(random(2000)-1000)/xsize;end ;
Canvas.TextOut(round(x),round(y),'★');
Sleep(33);
application.ProcessMessages;
Canvas.Font.Color:=$ffFFff;
Canvas.TextOut(round(x),round(y),'★');
end;
finally ReleaseDC(0,Canvas.Handle); Canvas.free; end;
end.
0470デフォルトの名無しさん
2007/02/15(木) 14:03:33publicには極力モノ置きたくないから前者
まあ気にするほどのもんじゃない
0471デフォルトの名無しさん
2007/02/15(木) 14:09:11そんなに気になるならTStringListを継承したのを作って
function CreateStringList:TStringList;
で、その継承したのを返すようにして、
Freeで実際にFreeせずに、ストックに入れておいて
次のCreateStringList:でストックしたのを返して、
アプリ終了時にFreeするようにしたら?
0472デフォルトの名無しさん
2007/02/15(木) 15:40:470473デフォルトの名無しさん
2007/02/15(木) 15:47:07VBよく知らないんだけど、手続き内でCreateしたものをfreeしなかったらどこで破棄されるの?
手続き完了後に自動的に破棄?
0474デフォルトの名無しさん
2007/02/15(木) 15:58:06メモリリークが(一応)無くなるから便利なんだけど
ポインタ等の直接メモリを覗く処理が(ほぼ)扱えなくなる
0475デフォルトの名無しさん
2007/02/15(木) 16:17:39Clientから文字列をServerに送信してServer側で表示する
その後、送られてきた文字をServerからClientに
送信するという処理を考えています
ClientからServerへのデータ送信は出来たのですが
ServerからClientでデータを遅れません
TTcpServer.Sendlnメソッドと使えばClientに
データが送られると思うですがTTcpClient.onRecieveイベントが起きません
どこがおかしいのでしょうか?
0476デフォルトの名無しさん
2007/02/15(木) 16:18:40Delphi .NETもGCじゃないの?
.Createの戻り値受け取らなくても(.Freeしなくても)問題ないよな?
0477デフォルトの名無しさん
2007/02/15(木) 16:21:130478デフォルトの名無しさん
2007/02/15(木) 16:23:40下らん小細工で避けてもろくなことにはならない。
0479デフォルトの名無しさん
2007/02/15(木) 16:29:290480475
2007/02/15(木) 16:37:02ClientにTTcpServerを、ServerにTTcpClientを追加して
ClientからServerにデータ送信
↓
ServerのAcceptイベント内で全部のデータを受信したら
Server側のClientからClient側のServerに送信
の手順で出来ました
0481デフォルトの名無しさん
2007/02/15(木) 16:54:16Delphiもインターフェース型を途中から導入してて、これを使えば
自動廃棄も可能だよ。
でも>>467は、メモリの確保解放の処理コストを考えると
頻繁に利用するオブジェクトは再利用した方がいいんじゃないのかという事だろう?
だとすると、.NETはそれに対して良い解決法を提供してくれてるとは言えない。
ただ、TStringListは1行づつメモリを使うので、そっちのメモリ確保解放のことを考えると
TStringListのインスタンスのコストを考えてもしょうがないレベルだと思うけどね
0482デフォルトの名無しさん
2007/02/15(木) 17:41:54HKCRから「foo.」を探して、HKCR\hoge.fooもHKCR\hoge.barも得る(存在を確認する)、ということなんですが…
0483デフォルトの名無しさん
2007/02/15(木) 17:51:47○「hoge.」
0484デフォルトの名無しさん
2007/02/15(木) 18:47:21TStringGridで項目数が少ない場合にも縦のスクロールバーを
表示するようにしたいのですがうまくいきません
procedure TForm1.FormCreate(Sender: TObject);
var
VertScrlInfoSt :TScrollInfo;
begin
//ShowScrollBar( StringGrid1.Handle, SB_VERT, true );←多分不要?
GetScrollInfo( StringGrid1.Handle, SB_VERT, VertScrlInfoSt );
VertScrlInfoSt.fMask := VertScrlInfoSt.fMask or SIF_DISABLENOSCROLL;
SetScrollInfo( StringGrid1.Handle, SB_VERT, VertScrlinfoSt, true );
end;
コードは概略このような感じです
FormResizeでも同じようにしてみたのですがうまくいきません
どうすればスクロールバーを表示したままにできるのか教えて頂けないでしょうか?
0485デフォルトの名無しさん
2007/02/16(金) 01:19:43文字だけで構成された(画像がないの意)ホームページソースの内容を
テキストファイルに保存するにはどうすれば良いでしょうか?
どうかよろしくご教授下さい
0486デフォルトの名無しさん
2007/02/16(金) 02:08:22ソースを保存したいんだよな?文字だけかどうかは関係ないよな?
Indy使うと楽。
s := IdHttp1.Get('http://hogehoge/index.html');
0487デフォルトの名無しさん
2007/02/16(金) 03:08:45TWebBrowser, THTTPRIO, THTTPSoapCppInvokerあたりを
Formに貼ればusesできるかと思ったのですがハズレでした。
よろしくお願いいたします。
0488デフォルトの名無しさん
2007/02/16(金) 03:29:26いいたかないけど、ヘルプ読んだ?
0489デフォルトの名無しさん
2007/02/16(金) 03:30:160490デフォルトの名無しさん
2007/02/16(金) 03:36:22やろうとしているのがネットワーククライアントですので、>>486見て
調べてみて、Indyでいこうかな、って思ってます。
すみませんありがとうございました。
0491デフォルトの名無しさん
2007/02/16(金) 12:52:25a[n]が1
0492デフォルトの名無しさん
2007/02/16(金) 13:23:11a[n]が1
0493デフォルトの名無しさん
2007/02/16(金) 13:25:400494デフォルトの名無しさん
2007/02/16(金) 14:34:00プログラムの任意の範囲を折りたためるようにする方法ないですか?
0495デフォルトの名無しさん
2007/02/16(金) 14:43:430496デフォルトの名無しさん
2007/02/16(金) 14:48:32// BDS2006で、IDEのコードの左側の + - でコードを折りたたんだりできるんだけど、
// プログラムの任意の範囲を折りたためるようにする方法ないですか?
{$ENDREGION}
0497486
2007/02/16(金) 15:30:54delphi6 personalにはindyは最初から付属しているのでしょうか?
それとも個別にダウンロードする必要があるのでしょうか?
構文を参照しようとヘルプを検索しましたがみつからずT.T
ググったindyのサイトにはdelphi5以前用のファイルしか掲載されてなくて
マジ困ってます
お手数ですが教えて下され
0498デフォルトの名無しさん
2007/02/16(金) 16:03:010499デフォルトの名無しさん
2007/02/16(金) 16:04:19http://www.indyproject.org/
ここからたどって
http://www.indyproject.org/Sockets/Download/Files/Indy10.aspx
このページのSource Codeです。
で、便乗で質問なのですが、
いま手始めに
http://www.2ch.net/index.htmlを
c:\index.htmlにダウンロードする、
という所から始めようとしているのですが
Indyをどう使えばいいのか見当がつかないです。
このメソッドを調べろ、など
ヒントをいただけないでしょうか。
すみませんよろしくお願いします。
0500デフォルトの名無しさん
2007/02/16(金) 16:06:48>>486
0501499
2007/02/16(金) 16:09:28ありがとうございました
0502デフォルトの名無しさん
2007/02/16(金) 21:48:53try
except
on E : Exception do
begin
///
end;
end;
0503デフォルトの名無しさん
2007/02/16(金) 22:27:570504デフォルトの名無しさん
2007/02/16(金) 22:29:140505デフォルトの名無しさん
2007/02/16(金) 22:51:59オブジェクト指向を理解実践できれば初心者脱皮
他言語の良さを理解できるようになると中級者脱皮
0506デフォルトの名無しさん
2007/02/16(金) 22:55:28言語なんざどうでもよくなると上級者脱皮
プログラミングやめるとやっと普通の常識人
0507デフォルトの名無しさん
2007/02/16(金) 22:58:30最後の一行だけは納得できる
0508デフォルトの名無しさん
2007/02/16(金) 23:00:16せんせい! VBの良さがわかりません!
0509デフォルトの名無しさん
2007/02/16(金) 23:02:53もう触る必要はありません。
0510デフォルトの名無しさん
2007/02/16(金) 23:43:19携帯ならjava
cgiならperl
うわべだけ複数の言語かじりましたが
オブジェクトが理解できてましぇんorz
0511デフォルトの名無しさん
2007/02/17(土) 08:17:48AlignのAlClientにあたる物がみつかりません
正確には横幅のみ伸縮可能にしたいのですがどうすればいいのでしょうか?
0512デフォルトの名無しさん
2007/02/17(土) 08:39:080513デフォルトの名無しさん
2007/02/17(土) 14:11:09この増えた部分は0で初期化されるのでしょうか?
0514デフォルトの名無しさん
2007/02/17(土) 14:13:430515デフォルトの名無しさん
2007/02/17(土) 14:20:22ヘルプには変わらないって書いてあるのにw
0516デフォルトの名無しさん
2007/02/17(土) 14:21:55APIの動作を見るしかないだろうね
http://www.google.co.jp/search?q=SetFilePointer+SetEndOfFile
0517デフォルトの名無しさん
2007/02/17(土) 14:26:38ファイル内の以前のエンド オブ ファイルの位置と新しい位置との間の内容は、
未定義になります
という事だから、0で埋められるかどうかは判らないという事になるんだろな
でも、そこを初期化していないと、
巨大なサイズに変更して、そこを読めば 削除した筈の個人情報が読めてしまったり・・・・・
0518デフォルトの名無しさん
2007/02/17(土) 14:31:38>>517 これは怖いです。
使う人が選択できるようにしたいと思います。
マジ助かりました。
0519デフォルトの名無しさん
2007/02/18(日) 01:31:20改造して無くて、著作権表示と、ライブラりへのURLアンカつけたらソース公開しなくて良いんでしょうか?
いまいちわからなくて、、、リンクしてるのでアウト?
0520デフォルトの名無しさん
2007/02/18(日) 01:59:35MPLってのは、ソースを改造していないときには相当甘くて
ソース公開義務はないが、ライセンスについて記載している部分があるなら、
ドキュメントを付記する必要がある。
ttp://www.mozilla-japan.org/MPL/mpl-faq.html
の
「変更は加えずに自分でコンパイルした Firefox (または MPL 下にあるその他のコード) を
配布したいのですが、何をすれば良いですか? 」
ってのを参照のこと。
0521520
2007/02/18(日) 02:00:40絶対必要。
0522デフォルトの名無しさん
2007/02/18(日) 02:51:38Delphi6のキーの取得も404('A`)
0523デフォルトの名無しさん
2007/02/18(日) 03:12:00>>203
メンテナンス中とか。
> Maintenance announcement: Membership services will be unavailable
> Abstract: February 17, 2007 Membership services will be down for maintenance
http://dn.codegear.com/jp/article/33982
0524デフォルトの名無しさん
2007/02/18(日) 03:23:54var
s: string;
begin
s:='ABCDE';
ShowMessage(IntToHex(Ord(s[1],2)));
end;
とすれば 61 と出ますが
その逆、$61をs[3]等に代入するにはどうすれば良いでしょうか?
0525デフォルトの名無しさん
2007/02/18(日) 03:52:190526524
2007/02/18(日) 04:04:23迅速な解答ありがとうございました
ついでにもう一つ質問を・・・
'616263' といった文字列を使用して
同じ様に文字列変数に 'ABC' と代入するにはどうすれば良いでしょうか
0527デフォルトの名無しさん
2007/02/18(日) 04:22:530528デフォルトの名無しさん
2007/02/18(日) 04:30:00どのような書き方をすればいいでしょうか
0530デフォルトの名無しさん
2007/02/18(日) 05:19:40>>525
0531デフォルトの名無しさん
2007/02/18(日) 05:49:06とりあえずpcharとstring使っておきます
お騒がせしました
0532デフォルトの名無しさん
2007/02/18(日) 11:00:22var c:char;
var s:string;
とすれば、
s:=c; と代入出来る
s[1]:=c; とも出来るが、これはいきなりやってはいけない。 setlength(s,1) のように領域確保後でやるか
s:='abc'; のように文字列を持ってる時に、 s[1]:=c と1バイト目を置き換える
pchar は文字列のポインタ形で Delphiでは文字列と互換があるようにpascalから改良されている
var p:PChar; の時
s:=p; のように代入すれば 文字列の領域確保とコピーが自動的にされる。
p:=PChar(s) のようにすれば、文字列s[1]を指すポインタが帰ってくる
sには自動的に文字の最後の後に#0が入っている
だから s:=PChar(s) のようにすれば、sの途中に#0がある場合にそこまでのサイズの文字列にするという意味なる
0533522
2007/02/18(日) 12:28:10thx
アンケート答えるとこまではいったけど
こんどは「Send me a serial number and authorization key via email」クリックしてもページ読み込みエラーだ・・・
だめぽ
0534ななしへたぐらま ◆XcB18Bks.Y
2007/02/18(日) 18:15:13ちょいと調べてみましたけどそれっぽい情報があまり転がってないのとDelphiで実装するのはめんどくさそうなので
せこい手ですがスクロールバーが見えないグリッドコンポとスクロールバーコンポを2つを組み合わせるというのはどうでしょうか.
ためしに作ってみたらそれっぽい感じになりました.
ただしスクロールバーはXPのビジュアルスタイルが有効になりません.
コードが少し長くなったのでここには貼り付けませんが必要でしたらうぷしますが…
0535522
2007/02/18(日) 18:49:08つながらねーよヽ(`Д´)ノウワァァン
0536デフォルトの名無しさん
2007/02/18(日) 19:10:350537デフォルトの名無しさん
2007/02/18(日) 21:13:31うぅむ・・・
0538デフォルトの名無しさん
2007/02/18(日) 21:25:50の略だっけか
0539デフォルトの名無しさん
2007/02/18(日) 21:26:17~~~ ~~~~
0540デフォルトの名無しさん
2007/02/18(日) 21:31:010541デフォルトの名無しさん
2007/02/18(日) 21:55:20そのココロは↓
0542デフォルトの名無しさん
2007/02/18(日) 22:00:170543デフォルトの名無しさん
2007/02/19(月) 03:46:18これを使うんですね。ありがとうございます!
0544デフォルトの名無しさん
2007/02/19(月) 03:50:06誰がうまい事言えと
あ、書いてあったわ
0545デフォルトの名無しさん
2007/02/19(月) 03:51:26ありがとうございます。
VCLでのリンクだけなら自分のソースを公開しなくて良いみたいですね。
これで安心して会社で発言できます。
0546デフォルトの名無しさん
2007/02/19(月) 06:32:21Image1.Canvas.LineTo..などを使ってグラフを作るソフト(白の画面に
黒で線や文字を記入)を造りました。そのままだと、800Kのbmipファイル
になるので今は、irfanviewで白黒のBMPに変換し80Kのbmpファイルに
しています。
ネットをみるとpf1bitでビットマップイメージのピクセル形式を1ビットに
できるとの事。一度、Image1.Picture.SAveTOfile('dummy.bmp')
で保存して
bmp.loadFromFIle(dummy.bmp')でbmpファイルとして読み込ませ
BMP.PixelFormat:=pf1bit
で変換し、また、保存しようかと思いましたが、何とかこんなことを
せずに変換できませんでしょうか?;
0547デフォルトの名無しさん
2007/02/19(月) 06:53:36Cannot perform operation -- DB is currently open
と言うエラーメッセージが出て実行できません。
テーブルに項目を追加したりすると勝手にTrueになるのでいちいち直すのが面倒なんですが
何か設定が間違っているのでしょうか。
0548445
2007/02/19(月) 14:58:24begin
DragAcceptFiles(Form1.Edit1.Handle, True);
end;
これでエディタへのドラッグ&ドロップを有効に出来たのですが
ファイルの受け取り方が分かりませんでした。
エディタのイベントにOnDragDropというのがありますが
これを使うんでしょうか?
0549ななしへたぐらま ◆XcB18Bks.Y
2007/02/19(月) 15:10:39保存の直前に1ビット形式に変換すればよいのでは?
最初から変換する場合はFormのOnCreateイベントハンドラあたりで以下のように書いてみてください.
Image1.Picture.Bitmap.Width := Image1.Width;
Image1.Picture.Bitmap.Height := Image1.Height;
Image1.Picture.Bitmap.PixelFormat := pf1bit; //@
@だけではうまくいきません.またうちの環境ではPixelFormatを先に設定するとうまくいきませんでした.
(黒と黒の2色になってしまいました)
0550デフォルトの名無しさん
2007/02/19(月) 15:15:16そん名かでDragQueryFile APIでファイル名を取得する
0551デフォルトの名無しさん
2007/02/19(月) 15:26:26例えば、Thread.Execute内からForm1のCaptionなどの値を変更するだけでなく
取得するのも駄目なんでしょうか?
また、TForm1のpublicに設けたintegerやstring、TstringListなどへのアクセスも駄目ですか?
よろしくお願いします。
0552デフォルトの名無しさん
2007/02/19(月) 16:01:32そもそもワーカースレッドからメインスレッドを参照すること自体
なんかおかしいような気がするが
0553デフォルトの名無しさん
2007/02/19(月) 16:01:55bmp.assign(Image1.Picture);
で出来たと思うけど。
0554デフォルトの名無しさん
2007/02/19(月) 16:27:04こういうのは普通やらないのですか。。
早速直すようにしたいと思います。
0555デフォルトの名無しさん
2007/02/19(月) 19:07:06ClientDataSet がOpen のままとか。
0556デフォルトの名無しさん
2007/02/19(月) 19:46:540557デフォルトの名無しさん
2007/02/19(月) 22:00:510558デフォルトの名無しさん
2007/02/19(月) 22:37:23環境はDelphi6です。
ありていに言うと、FDをフォーマットしながら
フォーマット時の書き込み内容のチェックを行い、書き込み内容がNGなら
フォーマットを中断する、というPGを考えています。
正直、どういう風にコーディングするかさっぱりわかりません。
WindowsAPIをコールしてFD読み書きをするように
するんでしょうか?
0559デフォルトの名無しさん
2007/02/19(月) 23:20:07TIBDatabase.AllowStreamConnectedを参照のこと。
0560デフォルトの名無しさん
2007/02/20(火) 06:07:05領域確保はしていたので
Image1.Picture.Bitmap.PixelFomat:=pf1bit;
だけ書いて望みどおりの結果を得られました。
553 さん、お返事ありがとうございました。
bmp.assign(Image1.Picture);
ではTpictureをTBitmapに代入できませんというエラーが
でましたが、
bmp.aasignp(Image1.picture.bitmap);
としてみたら望むどおりの結果を得る事ができました。
少しだけですが、おかげさまでTpictureとTbitmapへの
理解が深まりました。まだまだ奥深いようですが..
ありがとうございました。
0561デフォルトの名無しさん
2007/02/20(火) 07:18:29フォーマットだけなら簡単なのは SHFormatDrive()
APIでやるなら
まず CreateFileで '\\.\A:' を開く 開けたらセクターの読み書きも可能
開くときの注意は、
http://support.microsoft.com/kb/115828/ja
開いた後でのフォーマットは
DeviceIoControl
IOCTL_DISK_FORMAT_TRACKS
IOCTL_DISK_SET_DRIVE_LAYOUT ディスクのパーティションを作成します。
IOCTL_DISK_SET_PARTITION_INFO ディスクのパーティションタイプを設定します。
IOCTL_DISK_VERIFY ディスクの一定の範囲を論理フォーマットします。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jphard/html/_win32_DeviceIoControl.asp
やるならVirtual-PCをインストールして、仮想FDDで実験すると楽だよ
http://www.microsoft.com/japan/windows/virtualpc/default.mspx
0562デフォルトの名無しさん
2007/02/20(火) 08:23:31Memo1のTextにある改行を<ret>というタグに置き換えていきたいんですが、改行のコードはどんなのでしょうか?
また、StringReplaceで置き換えられるものでしょうか?
0563デフォルトの名無しさん
2007/02/20(火) 08:30:09A1 改行は Windows環境なら #$0d#$0A = #13#10
A2 StringReplaceで置換可能
なお Memo1ってのが TMemoなら Lines を1行づつ処理した方が簡単だろう
s:='';
with Memo1 do
for i:=0 to Lines.Count-1 do s:= s + Lines.String[i] + '<ret>';
0564デフォルトの名無しさん
2007/02/20(火) 08:33:45ありがとうございます!
一行ずつって手もありましたね…
でもStringReplaceで置換可能なのもわかってよかったです。
ありがとうございます…
0565デフォルトの名無しさん
2007/02/20(火) 08:51:52>>559
ありがとうございます。
今回は>>559さんの言うようにTIBDatabase.AllowStreamConnectedを
Falseにすることで解決しました。
0566445
2007/02/20(火) 15:28:01このように作ってみたのですが、うまく動きません。
private
{ Private 宣言 }
procedure WMDropFiles(var msg: TWMDropFiles);
message WM_DROPFILES;
....
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Form1.Edit1.Handle, True);
end;
procedure TForm1.Edit1.WMDropFiles(var msg: TWMDropFiles);
var
FileName: array[0..1024] of Char;
begin
DragQueryFile(msg.Drop, 0, FileName, SizeOf(FileName));
Edit1.Text := String(FileName);
DragFinish(msg.Drop);
end;
手続き名が間違ってるみたいなのですが・・・
0567デフォルトの名無しさん
2007/02/20(火) 15:35:41procedure WMDropFiles(Var Msg: TWMDropFiles); Message WM_DropFiles;
実装部は↓こんな感じで
procedure TForm1.Edit1.WMDropFiles(Var Msg: TWMDropFiles);
var
FileName: Array[0..MAX_PATH] of Char;
begin
DragQueryFile(Msg.Drop, 0, FileName, SizeOf(FileName));
Edit1.Text := String(FileName);
DragFinish(Msg.Drop);
end;
0568デフォルトの名無しさん
2007/02/20(火) 15:54:52^^^^^
なにこれ?
0569デフォルトの名無しさん
2007/02/20(火) 15:57:28↑ こんな記法は出来ないと思うけど?
TEditを継承するか、
サブクラスを使うかの2つだよ
サブクラスを使う場合は、フォームの定義で
private
OldEditWindowProc:TWndMethod;
procedure EditWindowProc(var Message: TMessage);
procedure EditDropFiles(var msg: TWMDropFiles);
---------FormCreate
OldEditWindowProc:=Edit1.WindowProc;
Edit1.WindowProc:=EditWindowProc;
DragAcceptFiles(Edit1.Handle, True);
--------------------------
procedure TForm1.EditWindowProc(var Message: TMessage);
begin
if Message.Msg= WM_DROPFILES
then EditDropFiles(TWMDropFiles(Message))
else OldEditWindowProc(Message);
end;
--------------------------
EditDropFiles は既出の通り。
ただし、最初に-1($ffFFffFF)を渡して、個数を得てからループするべき
0570デフォルトの名無しさん
2007/02/20(火) 16:07:56ここで言うサブクラスは Windows用語でメッセージフックのテクニックの事
TEditを継承するのではなく、(本来は継承すべきだけど)
TEditに流れるWindowsMessageを横取り(フッキング)して
処理内容を変更してしまうテクニックの事ね。
0571デフォルトの名無しさん
2007/02/20(火) 19:35:360572デフォルトの名無しさん
2007/02/20(火) 20:07:17どうやるの?
0573デフォルトの名無しさん
2007/02/20(火) 20:25:070574デフォルトの名無しさん
2007/02/20(火) 20:42:010575デフォルトの名無しさん
2007/02/20(火) 20:57:06TCanDropFileEdit = class( TEdit )
protected
procedure WM_DropFiles(var msg:TMessage );message WM_DROPFILES;
public
constructor Create( AOwner:TComponent ); override;
end;
中身はもう判るよね?
問題は、これをというか、この程度でコンポーネントとして登録するのがメンドクサイ事
TEditを貼り付けておいて、
メモリストリームを作成して WriteState してFree
でこっちを作成して ReadStateしてしまうか
0576デフォルトの名無しさん
2007/02/20(火) 21:14:33uses
ShellApi;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Form1.Edit1.Handle, True);
end;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
FileName: array[0..1024] of Char;
begin
if (Msg.message = WM_DROPFILES) and (Msg.hwnd = Edit1.Handle) then
begin
DragQueryFile(Msg.wParam, 0, FileName, SizeOf(FileName));
Edit1.Text := String(FileName);
DragFinish(Msg.wParam);
end;
end;
0577デフォルトの名無しさん
2007/02/20(火) 21:30:19最近のバージョンのAddtionalタブに増えてる ApplicationEvents だね
0578デフォルトの名無しさん
2007/02/20(火) 21:32:380579デフォルトの名無しさん
2007/02/20(火) 21:43:10type TCanDropFileEdit = class( TEdit ) //この定義は実装部に書いてもいい
private
procedure CreateHandle;override;
protected
procedure WM_DropFiles(var msg:TWMDropFiles );message WM_DROPFILES;
end;
procedure TCanDropFileEdit.CreateHandle;
begin
inherited;
DragAcceptFiles(Handle, True);
end;
procedure TCanDropFileEdit.WM_DropFiles(var msg: TWMDropFiles);
var FileName: string;
var cnt,i:Integer;
begin
DragQueryFile(msg.Drop, DWORD(-1), @cnt, 0);
for i:=0 to cnt do begin
SetLength( FileName,4096);
DragQueryFile(msg.Drop, 0, PChar(FileName), Length(FileName));
Text :=PChar(FileName);
end;
DragFinish(msg.Drop);
end;
0580デフォルトの名無しさん
2007/02/20(火) 21:46:08procedure TForm1.FormCreate(Sender: TObject);
var mstr:TMemoryStream;
begin
mstr:=TMemoryStream.Create;
try
mstr.WriteComponent(Edit1);
Edit1.Free;
mstr.Position:=0;
RegisterClass(TEdit);
Edit1:=TCanDropFileEdit.Create(self);
Edit1.Parent:=self;//パネルに貼り付けてるならパネル
mstr.ReadComponent(Edit1);
finally mstr.Free end;
end;
関数にしておけばタイプ量は減らせる
0581デフォルトの名無しさん
2007/02/20(火) 21:46:230582デフォルトの名無しさん
2007/02/20(火) 21:49:58× DragQueryFile(msg.Drop, 0, PChar(FileName), Length(FileName));
0583デフォルトの名無しさん
2007/02/20(火) 21:55:28× DragQueryFile(msg.Drop, DWORD(-1), @cnt, 0);
0584デフォルトの名無しさん
2007/02/20(火) 22:05:44Text :=PChar(FileName);
0585デフォルトの名無しさん
2007/02/20(火) 22:06:440586デフォルトの名無しさん
2007/02/20(火) 22:08:070587デフォルトの名無しさん
2007/02/20(火) 22:08:26それはまあ TEditなんで 複数ドロップされたら最後が有効って事でご容赦
TMemoなら
Lines.Add( PChar(FileName) );
とかでお願い
0588デフォルトの名無しさん
2007/02/20(火) 22:11:30まあ、将来どんな環境が出るか判らんし、スタックと違ってヒープにとっておけば
そう迷惑な量でもないから、
0589デフォルトの名無しさん
2007/02/20(火) 22:19:060590デフォルトの名無しさん
2007/02/20(火) 22:22:240591デフォルトの名無しさん
2007/02/20(火) 22:24:160592デフォルトの名無しさん
2007/02/20(火) 22:33:05まあ、そうなんだけど、Delphiが出た当時評価された一つが、
メッセージをサンクを使って高速割り振りしてた所にあるわけで
そういう意味じゃ年寄りには
全メッセージに判断入れるような
ApplicationEvents の手法は、受け入れ難いのでしょ。
0593デフォルトの名無しさん
2007/02/20(火) 22:40:43○ for i:=0 to cnt-1 do begin
0594デフォルトの名無しさん
2007/02/20(火) 23:01:57一つ増えたからってなんだっていうんだよ。
0595デフォルトの名無しさん
2007/02/20(火) 23:07:56年寄りいわく、
アプリケーションには1秒に数10〜数千のメッセージが飛んでくるんじゃ
VCLはサンクを使って高速に分岐してくれる。
つまりじゃ、分岐が終わってから処理するコストと、分岐前に比較するコストは全く違うって事じゃ。
しかし、現代のCPUにとっては、目糞鼻糞だと思うけどね
もっとも、タブページのように窓ハンドルを大量に使うとそうとも言えないかもしれないが
0596デフォルトの名無しさん
2007/02/21(水) 02:03:11レスありがとうございました
> スクロールバーが見えないグリッドコンポとスクロールバーコンポを2つを組み合わせる
若干姑息な感じもしますけど、実現可能なのはそのぐらいなみたいですね
ただ、この方法だと、グリッドコンポとスクロールバーコンポを連動させる処理を
全部自前で書かないといけなさそうな気がします
結局、見た目だけの問題ですし、気にしないことにします
レスが遅くなってすみませんでした
0597デフォルトの名無しさん
2007/02/21(水) 03:12:51設定されているかどうか判断するところまでは、実際に実行されるんだから。
if 文一つがすべてのキューメッセージに対して実行されるから、どうだこうだ
いうんなら、そもそもVCLなんざ論外だわな。
0598デフォルトの名無しさん
2007/02/21(水) 05:44:15二つのユニットどちらからでも使える変数はどのように宣言すれば良いですか?
0599デフォルトの名無しさん
2007/02/21(水) 05:49:58public節に宣言すればいいのですね
0600デフォルトの名無しさん
2007/02/21(水) 07:46:481、そのメッセージ全部に 判断が入るのと
2、窓の一つだけで判断が入る のでは違うだろ?
メッセージは ProcessMessageで一度捕捉され
PeekMessageしてTranslateMessageの後DispatchMessage
DispatchMessageでは、本来は各クラスが呼び出される仕掛になっている。
でも、VCLは動的に作った短いコードを割り当てて、直接オブジェクトメソッドを呼び出す
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm
MouseMoveを例にしているけど、他にも、
たとえばマルチメディア系のコールバックをメッセージに貰う場合とか、
大量のタイマーを使っているとか、メッセージが大量にやってくる場合に
たとえば1秒に千個のメッセージが来るなら、
DispatchMessage前に判断を入れたら、たとえ増えた判断が1サイクルでも、
1千サイクル分の命令を入れたのと同じこと
0601デフォルトの名無しさん
2007/02/21(水) 08:13:05おっさんミットモナイ
0602デフォルトの名無しさん
2007/02/21(水) 09:11:31UpdateScrollRangeがvirtualだったら良かったのにね。
personalでなければソース書き換えばいいんだろうけど、難しいね
0603デフォルトの名無しさん
2007/02/21(水) 09:56:19きみさ、なんか勘違いしてるよ。
> VCLは動的に作った短いコードを割り当てて、直接オブジェクトメソッドを呼び出す
これは単に、普通にはできないウィンドウ関数をクラスのメソッドにするためのせこい仕掛け。
普通のWin32APIでつくったウィンドウより速くなる事はありえない。ごちゃごちゃと
イベントハンドラも設定してないメッセージにいちいちいっぱいコードを実行しているVCL使ってて
Application.OnMessage にメソッドを書くのは遅くなる、とか勘違いも甚だしい。
0604デフォルトの名無しさん
2007/02/21(水) 10:09:210605デフォルトの名無しさん
2007/02/21(水) 10:10:53そして、OOPレベルで書く以上、Cでカリカリに書いたコードより遅いのも仕方ない。
ここまでは、同意するが、最後の行は間違い。
PeekMessage〜DispatchMessage は高速道路であって、ここは早く流してやらないとね。
0606デフォルトの名無しさん
2007/02/21(水) 13:02:32イベントのうちハンドラが設定されるのは1割以下。9割以上のメッセージ処理
はVCLの無駄コードを実行してから DispatchMessage() に復帰するんだよ。
そもそもApplication.OnMessage だってコード書かなくても、イベントが設定さ
れてるかどうか毎回見に行ってるし。VCL のOOPの機能の一つだ。ほか使ってて
このイベントだけごちゃごちゃいうのは変。
0607デフォルトの名無しさん
2007/02/21(水) 14:30:19感覚的には一番頻度の高くなるメッセージは
1、マルチメディア系でコールバックにメッセージを使った場合
2、タイマー
3、MouseMove
4、Paint
で、これらはやってくるとなると集中的で、なおかつ応答が悪いと体感されちゃうでしょ?
0608デフォルトの名無しさん
2007/02/21(水) 16:20:20迷惑なんだよ
0609デフォルトの名無しさん
2007/02/21(水) 16:32:030610デフォルトの名無しさん
2007/02/21(水) 16:46:230611デフォルトの名無しさん
2007/02/21(水) 18:33:37速いよ。
0612デフォルトの名無しさん
2007/02/21(水) 18:47:160613デフォルトの名無しさん
2007/02/21(水) 19:06:54{$R sound.RES}
として効果音のリソースを取り込んでいます。リソースはbrcc32で作りました。
で、この効果音の制作会社に「WEB等で公開する場合は、第三者が素材音源を
ダウンロードして二次利用出来ない形でお願い致します」と言われています。
この場合、このプログラムはWebサイトで公開できるものなのでしょうか。
0614デフォルトの名無しさん
2007/02/21(水) 19:11:23リソースだと容易に抽出できちゃうから、厳密に言うとまずいだろう。
暗号化してリソースに入れて、使うときに複合化するべきだな。
0615デフォルトの名無しさん
2007/02/21(水) 19:14:24聞いてみるのが一番だよ。
リソースそのままで問題になりそうなら、どうせ
LoadResource/LockResource/sndPlaySound で再生してるんでしょ?
だったら、メモリ上のデータをなんか適当な文字列とxor してやれば
まあ、リソースハッカーあたりで簡単に取りだせないでしょ
0616デフォルトの名無しさん
2007/02/21(水) 19:17:34まあ右クリックして保存出来なけりゃ、いいんじゃないの?
0617613
2007/02/21(水) 21:14:52やはり制作者側に聞いてみるべきなのかもしれません。(ちょっと担当の方が
苦手気味なので、ついここで質問してしまいました…)
暗号化する件や録音された場合の音質等も含めて相談してみます。
何か進展しましたら(忘れてなければ)報告します。ありがとうございました。
0618613
2007/02/21(水) 21:31:53PlaySound('#100',0,SND_RESOURCE OR SND_ASYNC);
としてました。LoadResourceを使う必要があるのですか。うーん、対処します。
0619デフォルトの名無しさん
2007/02/22(木) 00:41:56具体的な新機能のアナウンスは無いのかな。
0620デフォルトの名無しさん
2007/02/22(木) 00:48:380621デフォルトの名無しさん
2007/02/22(木) 01:07:020622デフォルトの名無しさん
2007/02/22(木) 07:41:14これってBDSとは別に買えってことかしらん?
0623デフォルトの名無しさん
2007/02/22(木) 07:48:060624デフォルトの名無しさん
2007/02/22(木) 08:08:07自分の技術のなさをdelのせいにしないように。
0625デフォルトの名無しさん
2007/02/22(木) 08:54:410626デフォルトの名無しさん
2007/02/22(木) 08:55:450627デフォルトの名無しさん
2007/02/22(木) 09:13:57なぜいまだにUnicodeベースの環境に移行できないんだよ・・・
0628デフォルトの名無しさん
2007/02/22(木) 09:14:47必要なんだったら要望すりゃいいじゃない。
http://bdntv.borland.com/survey/DelphiSurvey2006_japanese.html
でもウニコードに対応してくれたって、国際化対応の手間はそんな変わらんぞ
0629デフォルトの名無しさん
2007/02/22(木) 09:36:350630デフォルトの名無しさん
2007/02/22(木) 09:36:39いや、別に国際化というより、JIS2004の補助漢字とかが入力できない・・TNT使わんと・・・
0631デフォルトの名無しさん
2007/02/22(木) 09:37:440632デフォルトの名無しさん
2007/02/22(木) 09:44:290633デフォルトの名無しさん
2007/02/22(木) 09:44:57もうちょっとCP932がどういうものなのか勉強した方がよかれ。
0634デフォルトの名無しさん
2007/02/22(木) 09:57:170635デフォルトの名無しさん
2007/02/22(木) 10:06:04まだ対応しないって?
0636デフォルトの名無しさん
2007/02/22(木) 10:29:09JIS2004で問題なのは補助漢字じゃなくて、異体字の方では…?
文字コードが一緒で違う字が当てはまるんだから、プレーンテキストを扱うプログラムは
今後出るであろうマイクロソフトの開発環境でも対処のしようがないんじゃない?
0637デフォルトの名無しさん
2007/02/22(木) 11:06:23その問題も出てるが、少なくともAnsiウィンドウじゃ、その補助漢字すら入力できないの知ってる?
もちろん、第3・4水準の漢字もね。
だから、VCLで普通に開発したアプリは異体字の問題に直面しないと思うが・・・
0638デフォルトの名無しさん
2007/02/22(木) 11:10:27あぁ、この発言は取り下げておく。
0639デフォルトの名無しさん
2007/02/22(木) 12:58:15いや、補助漢字とか第3水準以降とかの漢字じゃなくて、第1水準の漢字「辻」とか「葛」とかの字形が変わるんだって。
word2007かIME2007で異体字切替に対応するって話だけど、はき出すプレーンテキストをどうするか見当が付かない
プログラムでどうこうの話じゃなくなってくるけど、
MSゴシック(JIS90)で作ったプレーンテキストとMSゴシック(JIS2004)で作ったプレーンテキストは内部処理的には同一の物であっても、見た目が違う。
神経質な人がJIS2004で作ったデータをJIS90でプリントアウトしてクレーム出たらどうする? 出力環境をJIS2004にする?
じゃあ、出力環境をJIS2004にしたら、JIS90前提で作ったデータはどうするの?
人名を管理するデータを扱っている人はどう対処する?
ゴメン。詰問口調になったけど、自分自身答えが見つからなくて不安なんだ。
0640デフォルトの名無しさん
2007/02/22(木) 13:02:440641デフォルトの名無しさん
2007/02/22(木) 13:18:55質問者が来づらいだろ
0642デフォルトの名無しさん
2007/02/22(木) 13:24:44その話知ってるって。開発環境レベルでどうこうできる問題じゃないだろ。
0643デフォルトの名無しさん
2007/02/22(木) 16:12:27Additionalから何か追加しなければならないのでしょうか?
0644デフォルトの名無しさん
2007/02/22(木) 16:14:30中身を読み込みたいなら自前でファイル名に対して
AssignFile、TStringList、TFileStreamとか使わないと
0645デフォルトの名無しさん
2007/02/22(木) 16:31:100646デフォルトの名無しさん
2007/02/22(木) 17:05:19言い方が変でしたスミマセン。
エディタに放り込むことは出来るのですが、放り込んだ後
エディタにファイル名が読み込めていないのです。
0647デフォルトの名無しさん
2007/02/22(木) 17:07:280648デフォルトの名無しさん
2007/02/22(木) 22:39:27具体的にはwindowsのファイル検索のような処理をしたいのです
FindFirstのワイルドカード(*.txt)を使うと
forやwhileを使ってもいつも同じファイル名を返し
フォルダ内のファイル名一覧になりません
どうすれば良いか教えて下さい
0649デフォルトの名無しさん
2007/02/22(木) 22:50:21|FindFirst は,Path で指定された〜一致する最初のファイルを検索します。
^^^^^^^^^^^^^^^^^^
故に
>forやwhileを使ってもいつも同じファイル名を返し
は正しい。
|関連情報
|SysUtils.FindClose
|SysUtils.FindNext
0650デフォルトの名無しさん
2007/02/23(金) 00:24:19ドラッグ&ドロップは
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
でファイル名の取得を行なっているのではないのですか?
これの他にもイベントハンドラが必要なのでしょうか。
0651デフォルトの名無しさん
2007/02/23(金) 00:50:280652デフォルトの名無しさん
2007/02/23(金) 01:02:50ちゃんとIDEでイベントハンドラを設定してあるか確認してみては?
ApplicationEvents1 の OnMessage イベント
0653デフォルトの名無しさん
2007/02/23(金) 01:08:11オブジェクトインスペクタに表示されるプロパティのカテゴリはどのようにして決まっているのですか?
自分で作成したプロパティを特定のカテゴリに入れることはできますか?
0654デフォルトの名無しさん
2007/02/23(金) 02:49:11関連するイベントハンドラやメソッドにブレークポイント仕掛けて何処で止まってるのか特定。
>>653
RegisterPropertiesInCategory
0655デフォルトの名無しさん
2007/02/23(金) 07:51:06だからできないのをdelのせいにすんなって。
まあ初心者スレだから仕方ないか。
0656デフォルトの名無しさん
2007/02/23(金) 07:53:430657デフォルトの名無しさん
2007/02/23(金) 08:57:45超初心者に初心者が教えるスレだからなw
0658デフォルトの名無しさん
2007/02/23(金) 12:45:43begin
for j := 0 to 10 do
begin
(条件)
end;
end;
となっているとき、
(条件)の部分から次の i のループに行くにはどうしたらいいのでしょう?
Continueじゃ次の j のループに行ってしまうし・・
0659658
2007/02/23(金) 12:48:09breakでOKでした。大ボケかましてしまった・・。
0660デフォルトの名無しさん
2007/02/23(金) 19:09:24任意のバイナリファイルを開き、各バイトごとにビット反転を行い
上書き保存するにはどうしたらいいでしょうか?
0661デフォルトの名無しさん
2007/02/23(金) 19:27:03var
ms:TMemoryStream; i:integer; pb:pByte;
begin
ms:=TMemoryStream.create();
try
ms.loadfrom('読みたいファイル');
pb:=PByte(ms.memory);
for i:=0 to ms.size-1 do begin
pb^:=not(pb^);
end;
ms.savetofile('上書きしたいファイル');
finally
ms.free;
end;
end;
0662デフォルトの名無しさん
2007/02/23(金) 19:47:07ありがとうございます!
できませんでした!!!
ms.loadfrom('読みたいファイル');
は
ms.loadfromfile('読みたいファイル');
だとおもいますが
ビット反転はおこなわれていませんでした
ついでに質問ですが
00 01 02 03
と並んでいるのを
03 02 01 00
という風に逆並びにする方法もお願い申し上げます
0663デフォルトの名無しさん
2007/02/23(金) 20:08:42pbの定義をarray of byte のポインタにすれば、ついでのお願いは難しくないだろう
0664デフォルトの名無しさん
2007/02/23(金) 20:08:490665デフォルトの名無しさん
2007/02/23(金) 20:23:26漏れの場合はTFileStreamを直接いじるやつだったけどうまく書き換えられずに放り出した覚えがある。
今ならバッファに取り込んで加工してファイルに落とすかな
0666デフォルトの名無しさん
2007/02/23(金) 20:28:06ポインターのことはよくわからないので、forの中に入れてみましたが、なぜかできました。
ありがとうございます。
>>664
わるいけど、俺は、中国を動かしている在日日本人なの!
0667デフォルトの名無しさん
2007/02/23(金) 20:47:47TFileStreamで数Kのブロック毎に処理するのが一般的だけど
メモリマップドファイルにしてメモリ上で反転してしまうのが、なんか速そうに思う。
0668デフォルトの名無しさん
2007/02/23(金) 21:10:28>pbの定義をarray of byte のポインタにすれば
微妙に勘違いさせちゃわないか、その書き方。
あえて言えば、
array[0..適当] of byte のポインタ
かな
0669デフォルトの名無しさん
2007/02/23(金) 21:21:510670デフォルトの名無しさん
2007/02/23(金) 21:39:26できないのは、いまだに非対応なDelのせいですが? なにか?
0671デフォルトの名無しさん
2007/02/23(金) 22:09:390672デフォルトの名無しさん
2007/02/23(金) 23:07:14CDコードとパスワードの取得も鯖につながんねぇしどうなっとるんだ
導入の時点で問題ありすぎオワタ\(^o^)/
0673デフォルトの名無しさん
2007/02/23(金) 23:12:150674デフォルトの名無しさん
2007/02/23(金) 23:18:18つかいたいんだけどDelphi6
0675デフォルトの名無しさん
2007/02/24(土) 00:07:32本当にはじめたいんならさ。
0676デフォルトの名無しさん
2007/02/24(土) 01:18:31月曜になったらボーランドに直接問い合わせてみることにした
0677デフォルトの名無しさん
2007/02/24(土) 07:23:390678デフォルトの名無しさん
2007/02/24(土) 07:45:58Delphi for PHP の発売で変更とか忙しいのだろ
とりあえずTurbo Delphi で試してみたら?
0679デフォルトの名無しさん
2007/02/24(土) 09:14:01vipperのdelphi wikiにコード載ってるはず
0680デフォルトの名無しさん
2007/02/24(土) 10:22:26where U_GROUP in ('A','B','C')
と書いてあるんですが、この('A','B','C')の部分をパラメータにしたいのですが
どうすればいいのでしょうか。
where U_GROUP in :UserGroup
と書き換えて
ParamByName(':UserGroup').AsString:='(''A''',''B'',''C'')';
とするとエラーになってしまいます。
0681デフォルトの名無しさん
2007/02/24(土) 10:28:09Delphiを採用しようかVB.NETにしようか迷っているのですが。
やはりOSを出しているメーカーの開発環境のほうが安心ですかね。
0682デフォルトの名無しさん
2007/02/24(土) 10:40:52オレの知る限り(Delphi4)inの中身をパラメータで指定することはできないはず。
どうしても in句 を使いたい場合は
プログラムでSQL文を生成して、SQL.Textにセットしてた。
0683デフォルトの名無しさん
2007/02/24(土) 10:47:16for Win32で 単に貼り付けるだけで作ったアプリは ANSI文字列対応
for .NET で // UNICODE対応
for Win32でも 当然UNICODE文字列は扱える。
>安心ですかね? は答えようがない。
何に安心したいの? 就職先だの派遣先があるかどうかという問題なら、あるんじゃないの?
0684デフォルトの名無しさん
2007/02/24(土) 12:42:43言語を道具として扱えない技術者はどう転んでも使い捨て.
どう転んでも安心できる日など来ない.
Perl も PHP も Ruby も C# も VB.NET も Delphi も全部使うくらいの気概でいなければ駄目.
0685デフォルトの名無しさん
2007/02/24(土) 13:48:140686デフォルトの名無しさん
2007/02/24(土) 14:11:430687デフォルトの名無しさん
2007/02/24(土) 14:33:220688デフォルトの名無しさん
2007/02/24(土) 15:03:000689デフォルトの名無しさん
2007/02/24(土) 16:07:24682のいうとおり、直接は_だとおも。奥の手はサブクエリかな?
0690デフォルトの名無しさん
2007/02/24(土) 19:55:35>>ParamByName(':UserGroup').AsString:='(''A''',''B'',''C'')';
Aでシングルクォート多くね?
0691デフォルトの名無しさん
2007/02/25(日) 13:36:54何がいいたいのかわからねぇ。HTTPやソケット??CGI・DB??
0692デフォルトの名無しさん
2007/02/25(日) 14:09:07レコードが見つからない時にわざわざ例外が出るのは一体何だ。
0693デフォルトの名無しさん
2007/02/25(日) 18:36:350694デフォルトの名無しさん
2007/02/25(日) 18:43:340695デフォルトの名無しさん
2007/02/25(日) 18:46:440696デフォルトの名無しさん
2007/02/26(月) 08:14:20ディレクトリかどうかの判断はどうすればいいんでしょうか
if FileGetAttr(Dirname) = faDirectory
これで判断してるのですが、ディレクトリ判定されないフォルダが偶にあります。
もっと正確な判断方法はないでしょうか?
0697デフォルトの名無しさん
2007/02/26(月) 08:21:480698デフォルトの名無しさん
2007/02/26(月) 09:41:37メニューのオプションを選択すると
オプション設定用の別窓(form?)が開くアプリを作りたいのですが
2つ目のformの呼び出し方がわかりません
やり方のヒントだけでも教えて下さいorz
0699デフォルトの名無しさん
2007/02/26(月) 10:01:52変更しないままのForm2だとすると
そしたら1つ目のフォームにボタン配置して、ダブルクリック
Form2.Show;
と1行書く。 実行させようとしたら、 ユニットを追加しますか と聞いてくれる
0700デフォルトの名無しさん
2007/02/26(月) 12:18:28ありがとうございます。
0701デフォルトの名無しさん
2007/02/26(月) 12:50:59if i = x then break;
end;
このループを正常に抜け出した直後のiは
xか1000のどちらかと考えて良いんでしょうか?
0702デフォルトの名無しさん
2007/02/26(月) 13:01:21ループに使ったローカル変数は、
ループ後不定です。
って、コンパイルしたときに警告でると思うが?
0703デフォルトの名無しさん
2007/02/26(月) 14:10:22ありがとうございます
0704デフォルトの名無しさん
2007/02/26(月) 18:25:08ありがとうございました。
0705デフォルトの名無しさん
2007/02/26(月) 20:42:38ループ変数はレジスタ(概ねECX)で、ループを抜けたあとに以前の値をPOPしていることがおおい・・・かも
0706デフォルトの名無しさん
2007/02/26(月) 21:14:040707デフォルトの名無しさん
2007/02/26(月) 21:33:35String型の動的配列で代替できる可能性も考えてみることだ。
0709デフォルトの名無しさん
2007/02/26(月) 22:02:14海外のEmbeddedWBというブラウザのコンポーネントを使って
ブラウザっぽいアプリを作ろうと試行錯誤しております。
IEなどでは大きい画像ファイルを表示する時に
自動でウィンドウサイズに合わせて画像が縮小表示されますが
このコンポーネントを使って、そういったことはできますでしょうか?
プロパティのどこかをtrueにするだけで実現できるとか。
あるいは他のコンポーネントを使った方が簡単にできるとか。
ちょっとしたヒントでもいいので
どなたか何かご存知であれば、教えていただけないでしょうか?
0710デフォルトの名無しさん
2007/02/26(月) 22:51:250711デフォルトの名無しさん
2007/02/27(火) 08:49:43実行ファイルのファイル名(プロセス)がiexplore.exeじゃないと
イメージツールバーとオートサイズは有効にならなかったはず
0712デフォルトの名無しさん
2007/02/27(火) 13:43:29forループをbreak、gotoで抜けた場合に限り
ループを抜けた値が保持されるよ
その場合だと i = x の条件を満たしてループを抜けた時に限り
iの値はxとなる
それ以外でループを抜けた場合はiの値は不定
1000かもしれないし0かもしれない
0713デフォルトの名無しさん
2007/02/27(火) 15:27:280714デフォルトの名無しさん
2007/02/27(火) 16:10:150715デフォルトの名無しさん
2007/02/27(火) 16:16:280716デフォルトの名無しさん
2007/02/27(火) 16:26:27AnsiStrPosで検索してはカウントするかな
0717デフォルトの名無しさん
2007/02/27(火) 16:28:23こんな漢字化?
var
iCount: Integer;
sText, sSubStr: String;
begin
iCount := 0;
sText := 'あいうえこあかきくけこさしあすせそあ';
sSubStr := 'あ';
while AnsiPos(sSubStr, sText) <> 0 do
begin
Inc(iCount);
sText := Copy(sText, AnsiPos(sSubStr, sText) + Length(sSubStr), Length(sText));
end;
ShowMessage(IntToStr(iCount) + '個見つかりますた。');
end;
0718デフォルトの名無しさん
2007/02/27(火) 16:42:34var
sl:TStringList;
begin
sText := 'あいうえこあかきくけこさしあすせそあ';
sSubStr := 'あ';
sl:=TStringList.Create;
sl.Text:=StringReplace(sText,sSubStr,#13#10+sSubStr,[rfReplaceAll]);
ShowMessage(IntToStr(sl.Count-1)+'個見つかりますた。');
sl.Free;
end;
0719デフォルトの名無しさん
2007/02/27(火) 16:45:43巧いけど、先に CR/LFを殺してからやらないと、既にCR/LFが入ってるとマズイよ
0720デフォルトの名無しさん
2007/02/27(火) 16:46:05TStringList.StrinReplaceはクソ遅いから
文字列が長くなるとかなり時間喰うのがアレだけど
まあ、俺が作ったやつだってString使ってるんだからあんまり変わらんか
0721デフォルトの名無しさん
2007/02/27(火) 16:46:280722デフォルトの名無しさん
2007/02/27(火) 16:47:10って書いてたら>>718
0723718
2007/02/27(火) 17:04:520724デフォルトの名無しさん
2007/02/27(火) 17:16:180725709
2007/02/27(火) 17:26:35>標準の TWebBrowser を使わない理由ってなに?
見た目が洗練されていなかったというのが、確か乗り換えた理由だったと思います。
たとえばGoogleの画面を開いたときに検索ワードの入力ボックスが
XP風に簡単に設定できたので、EmbeddedWBを使うようになりました。
EmbeddedWBならプロパティのその他→UserInterfaceOptionsの
EnableThemesをtrueにするだけで簡単に見た目をXP風にできます。
0726デフォルトの名無しさん
2007/02/27(火) 17:26:53は取得出来ませんでした。ボーランドの英語のサイトで、リンク先からCDkeyが取得できると書いてるのにそのリンクがクリックすると存在しないページになってるみたいで。
自分にだけ出来ないのかもしれませんが…
どなたか、取得の仕方を教えてください。もしくは、delphi7.0のダウンロード出来る場所を教えてください。
0727デフォルトの名無しさん
2007/02/27(火) 17:31:57Personal版と言わないと誤解買うぞその書き方
D7の無料パーソナル版は、少なくとも日本語版では存在しない。
D6については、ぐぐってわからんようだったら、Borlandに電話した方が早い。
0729デフォルトの名無しさん
2007/02/27(火) 17:42:18○ご教示
0730デフォルトの名無しさん
2007/02/27(火) 17:57:38マジレスしてやると、教授でも間違いじゃない
0731デフォルトの名無しさん
2007/02/27(火) 18:12:46ありがとうございます。
0732デフォルトの名無しさん
2007/02/27(火) 18:40:04どういたしまして
って、サイトもあるじゃんか
ttp://www.borland.com/downloads/download_delphi.html
0733デフォルトの名無しさん
2007/02/27(火) 18:49:45現在、登録系をいじっているみたいね。
つながらない所が多い。
俺も試しにやってみたが
そのページからアクセスしても、キーは取得できないみたい。
電話かねー。
0734デフォルトの名無しさん
2007/02/27(火) 21:56:15どの様なコードを書けば良いのかお願いします。
根本的に間違っていそうですが以下のコードだとnilが返ってきませんでした・・・
var
p: Pointer;
procedure TForm1.Button1Click(Sender: TObject);
var c: TStringList;
begin
c := TStringList.Create;
p := c;
c.Free;
c := nil;
end;
procedure TForm1.Button2Click(Sender: TObject);
var c2: TStringList;
begin
c2 := TStringList(p);
if c2 = nil then
ShowMessage('nilです');
end;
0735デフォルトの名無しさん
2007/02/27(火) 22:08:33c: Pointer;
procedure TForm1.Button1Click(Sender: TObject);
begin
c := TStringList.Create;
p := c;
c.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if p = nil then
ShowMessage('nilです');
end;
0736デフォルトの名無しさん
2007/02/27(火) 22:14:57c.Free;
c := nil;
インスタンスを破棄したのにそこにnilを代入とな!?
0737デフォルトの名無しさん
2007/02/27(火) 22:18:36var
c: TStringList;
procedure TForm1.Button1Click(Sender: TObject);
begin
if c = nil then
c := TStringList.Create;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if c = nil then
ShowMessage('nilです');
end;
どこかでc.free;
0738734
2007/02/27(火) 22:48:27ポインタを使った方法をやってみたくて>>734みたいなコードになりました。
どうにも勘違いしてたようで
var c, c2: TStringList;
begin
c := TStringList.Create;
c2 := c;
c := nil;
end;
と、するとc2を調べてもnilが返ってくるだろうと思ってました。
インスタンス、ポインタなどもっと調べてみる事にします。
レス付けてくれた方どうもありがとうございます。
0739ミ,,゚Д゚彡 ◆A6VzDeLphI
2007/02/28(水) 01:28:42>>717-718
DelFusaLibraryの説明
http://delfusa.main.jp/delfusalibrary/20060527212010/Readme.txt
WordDecompose.pas
http://delfusa.main.jp/delfusalibrary/20060527212010/WordDecompose/WordDecompose.pas
ここのWordCountを使ってちょーだい。
0740デフォルトの名無しさん
2007/02/28(水) 02:39:28ポインタ同士の代入は値(アドレス)のコピー
var
n1,n2:integer;
n1 := 3;
n2 := n1;
n1 := 0;
としても n2 がゼロでないのと同じ。
0741デフォルトの名無しさん
2007/02/28(水) 03:09:44どうせコピー品だろ?
0742デフォルトの名無しさん
2007/02/28(水) 03:58:40Formを2つもつアプリを組んでます。
メインフォームのボタン押すとサブフォーム出るように組みました。
が・・!
メインを最小化するとサブフォームも最小化されてしまいます。
同様に、サブフォームをアクティブにすると、メインフォームもアクティブに
なってしまいます。
この辺を直すにはどうしたらいいのでしようか。
メインフォームに必要な情報いれてセットしたら、メインフォームは最小化
してサブフォームだけで作業するようなPGを作りたいのです・・。
0743デフォルトの名無しさん
2007/02/28(水) 06:02:10type
〜略〜
protected
procedure CreateParams(var Params: TCreateParams);
override;
end;
〜略〜
implementation
〜略〜
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Params.WndParent := 0;
end;
でいけるんじゃないか?
0744デフォルトの名無しさん
2007/02/28(水) 06:02:590745デフォルトの名無しさん
2007/02/28(水) 06:47:38横から失礼します
長い間悩んでた事が解決しました、感謝感謝
0746デフォルトの名無しさん
2007/02/28(水) 11:14:48・iLengthは読み込むサイズ
・ImgBuff[5]となっているのは先頭5バイトは独自のデータを入れてる為
ms := TMemoryStream.Create;
try
ms.WriteBuffer(ImgBuff[5], iLength);
ms.SaveToFile('C:\hoge.bmp');
finally
ms.Free
end;
上の例だとBMPデータをバイト配列から取り出すことは出来るのですが
色が白黒になってしまいます。
何が原因でしょうか?
0747デフォルトの名無しさん
2007/02/28(水) 13:27:43元々は白黒じゃなかったんだよね? だったらパレットが付いてないんじゃないの?
0748デフォルトの名無しさん
2007/02/28(水) 13:50:43こんなんどうしろっつーんじゃ!!
0749デフォルトの名無しさん
2007/02/28(水) 13:51:57なんか面白そうな事やってるね。 もうちっと詳しく書いてくれたら皆んなも楽しめるかも
0750748
2007/02/28(水) 13:58:26しかも入力したとおりに記録されてないし。何これ。
Sub Macro1()
'
' Macro1 Macro
' 記録日 2007/02/28 記録者
'
Selection.TypeText Text:="こんにちは。"
Selection.TypeParagraph
Selection.TypeText Text:="こので。"
Selection.TypeParagraph
Selection.MoveUp Unit:=wdLine, Count:=2
Selection.Style = ActiveDocument.Styles("見出し 1")
End Sub
0751デフォルトの名無しさん
2007/02/28(水) 14:01:07それはVBAじゃないのか? Delphiでどうしたいの?
0752750
2007/02/28(水) 14:15:210753デフォルトの名無しさん
2007/02/28(水) 14:19:06オートメーションコントローラとして?
0754デフォルトの名無しさん
2007/02/28(水) 21:08:22const
wdLine = 5;
var
app, selection: Variant;
begin
app := CreateOLEObject('Word.Application');
app.visible := true;
app.Documents.Add;
selection := app.Selection;
selection.TypeText(Text := 'こんにちわ');
selection.TypeParagraph;
selection.TypeText(Text := 'こので。');
selection.TypeParagraph;
selection.MoveUp(Unit := wdLine, Count := 2);
selection.Style := '見出し 1';
end;
0755デフォルトの名無しさん
2007/03/01(木) 12:52:38登録して、アンケート答えて、キーをメールで送信するってとこをクリックしてもページが見つかりませんとなってしまう。
どうすればいいですか??
0756デフォルトの名無しさん
2007/03/01(木) 12:53:590757デフォルトの名無しさん
2007/03/01(木) 12:55:11http://delwiki.info/?Delphi+6%2FPersonal+%C8%C7%A4%CE%C6%FE%BC%EA%A4%C8%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
0758デフォルトの名無しさん
2007/03/01(木) 13:33:14ウェブサイトを弄っている途中みたい。
面倒だがボーランドに電話汁。
0759デフォルトの名無しさん
2007/03/01(木) 13:38:07>4、. http://register.borland.com/delphi6 にアクセスします。
ここがつながらないんだろ?
なんか、このページがソレらしいんだけど、違うのかなあ
https://reg.borland.com/
0760デフォルトの名無しさん
2007/03/01(木) 13:57:080761デフォルトの名無しさん
2007/03/01(木) 16:11:07OS環境が許せばTurbo delphi (Explorer版)を使えば?
こっちも無料だよ
0762デフォルトの名無しさん
2007/03/01(木) 16:17:240763デフォルトの名無しさん
2007/03/01(木) 16:54:48一番最後に改行が入ってしまいます。
これはどうにもならないのでしょうか?
uses
Clipbrd;
....
var
Form1: TForm1;
clip: TClipboard;
tex: TStrings;
.....
procedure TForm1.FormCreate(Sender: TObject);
begin
clip:=TClipboard.Create;
tex:=TStringList.Create;
tex.Add('');
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
clip.Free;
tex.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
tex[0] := CurrentDirectly;
clip.AsText := tex.Text;
end;
0764デフォルトの名無しさん
2007/03/01(木) 16:59:19begin
result := s;
whlie length(result) > 0) and (result[length(result)] in [#10, #13]) do
setlength(result, length(result)-1);
end;
...
clip.AsText := chop(tex.Text);
とかやっとけ。それからClipboardインスタンスは定義済みだから
create/freeは不要。
Clipboard.AsText := で桶
0765デフォルトの名無しさん
2007/03/01(木) 17:15:44procedure TForm1.Button1Click(Sender: TObject);
begin
Clipboard.AsText := CurrentDirectly;
end;
でいいんじゃ・・
0766デフォルトの名無しさん
2007/03/01(木) 18:22:56Createしたときに一行目に予め注意書きみたいなのを入れるようにしたくて
TMyStringList = class(TStringList)
〜
public
constructor Create(note: String); overload;
で、実装部で
constructor Create(note: String); overload;
begin
inherited;
Append(note);
end;
で、なにも問題ないですか?
overrideつけないといけないようですが、引数なしのコンストラクタはoverrideする元がないようですし…
0767デフォルトの名無しさん
2007/03/01(木) 18:22:57TStringListって最初の行にstringを代入する時
addを使わずに
tex[0] := CurrentDirectly;
ってやってOKなの?
0768デフォルトの名無しさん
2007/03/01(木) 18:23:520769デフォルトの名無しさん
2007/03/01(木) 18:41:38FormCreateのときに空文字をAddしてるから
tex[0]が使えてるだけです
length(result)て改行文字も含めた値が返るんですか?
0770デフォルトの名無しさん
2007/03/01(木) 20:03:550771デフォルトの名無しさん
2007/03/02(金) 05:46:08Excelでは画面を更新する時に、ちらつきを抑えるために
ScreenUpdatingプロパティをFalseにすることで実現できるのですが
Delphiにもそういった機能はあるのでしょうか?
0772デフォルトの名無しさん
2007/03/02(金) 06:09:33フォーム?
0773デフォルトの名無しさん
2007/03/02(金) 07:49:230774771
2007/03/02(金) 09:02:50771で質問した者です。
レスありがとうございます。
あまりにも質問が抽象的過ぎたので具体的に説明します。
エクスプローラーのようなものを作ろうとしております。
TreeViewをAlineプロパティを上下左右に変えることで
上下左右に移動できるような機能を兼ね備えたものです。
たとえばTreeViewのalineプロパティがalLeftの時にalTopに変えたら
TreeViewは左から上に移動しますが、この時デフォルトでは
alLeftの時の幅がalTopの時の高さになります。
しかしこのままでは、適切な高さにならない場合もあるので
強制的にプログラムで適切な高さになるように修正しているのですが、
修正しているさまがあまりにもバレバレでかっこ悪いのです。
ExcelVBAにはScreenUpdatingという機能があり、
これを使えば、見せたくないものに関しては途中の描画を見せずに
プログラム実行後の最終結果だけを見せることができます。
これに類似した事をDelphiで実現することは可能でしょうか?
0775デフォルトの名無しさん
2007/03/02(金) 09:05:270776デフォルトの名無しさん
2007/03/02(金) 09:30:43TApplicationのProcessMessagesメソッドは使ってみた?
0777デフォルトの名無しさん
2007/03/02(金) 12:28:16LockWindowUpdate(Form1.Handle);
try
(処理)
finally
LockWindowsUpdate(0);
end;
0778ななしへたぐらま ◆XcB18Bks.Y
2007/03/02(金) 15:08:45オーバーライドは継承元のクラスのCreateメソッドが仮想メソッドか動的メソッドの場合にだけ関係しますので
ここでは気にしなくて結構です.
このクラスではパラメータ無しのCreateを記述することもできて実行すると継承元クラスのCreateが呼び出されますが
これは想定した仕様ですか?(もしそうなら問題ないと思います)
0779766
2007/03/02(金) 20:08:25そうですね、パラメータ無しのCreateを呼んだときは何かデフォルトの文字が入ってるような感じにしてごまかそうかと思ってます。
無しのCreateにもoverloadつけてデフォの値をいれても(パラメータ、有り、無し2つのCreateを書いてしまっても)問題はありませんか?
0780デフォルトの名無しさん
2007/03/02(金) 20:40:440781デフォルトの名無しさん
2007/03/02(金) 22:10:100783766
2007/03/03(土) 09:58:34overrideは継承した子クラスでの手続の振る舞いを変えるための上書きみたいなもんでそ?
うっふん♥
0784デフォルトの名無しさん
2007/03/03(土) 10:08:07overloadが導入される前からの設計だからしょうがないけど
0785デフォルトの名無しさん
2007/03/03(土) 20:39:46デストラクタはどうなの?
0786デフォルトの名無しさん
2007/03/03(土) 20:47:23移すにはどうしたらいいですか?
0787デフォルトの名無しさん
2007/03/03(土) 20:48:310788デフォルトの名無しさん
2007/03/03(土) 21:02:000789デフォルトの名無しさん
2007/03/03(土) 21:15:24デストラクタは Destroy をオーバーライド一択だろ。
0790デフォルトの名無しさん
2007/03/04(日) 03:00:140791デフォルトの名無しさん
2007/03/04(日) 09:15:22setfocusはFormが既にアクティブじゃないと使えない
Formが最初に得るフォーカスを指定するときは
ActiveControlを使うべし
0792デフォルトの名無しさん
2007/03/04(日) 10:05:550793デフォルトの名無しさん
2007/03/05(月) 07:33:580794デフォルトの名無しさん
2007/03/05(月) 09:40:470795デフォルトの名無しさん
2007/03/05(月) 12:10:30Delphi−PHPのチラシも入ってたんだが、「英語版日本先行販売」ってのは「日本語版後行発売」と受け取っていいのか!?
PHP使いたいんだが、マニュアルやらサンプルやら全部英語だと滅入っちまう…
日本語環境では保証ありませんとか書いてるし。
0796デフォルトの名無しさん
2007/03/05(月) 12:15:18これかなり重要だよな
マルチバイト文字環境では動作不安定とかマジ日常茶飯事
0797デフォルトの名無しさん
2007/03/05(月) 18:55:330798デフォルトの名無しさん
2007/03/05(月) 19:23:210799デフォルトの名無しさん
2007/03/05(月) 19:28:230800デフォルトの名無しさん
2007/03/05(月) 23:22:230801デフォルトの名無しさん
2007/03/05(月) 23:37:57TIdHTTP1.Response.〜
0802デフォルトの名無しさん
2007/03/05(月) 23:54:29送信データってふつう...cgi?1=a&2=b&3=4のようなj形になりますよね?
たとえば、この場合aのところに=を入れたい場合
...cgi?1==&2=b&3=4 となると思ったんですが、エラーがでます。=を入れたい場合羽津すればいいんでしょうか?
0804デフォルトの名無しさん
2007/03/06(火) 00:05:14URLエンコード?
0805デフォルトの名無しさん
2007/03/06(火) 00:29:09いえ、URLエンコードじゃなくて、ポストデータに=を入れたい場合、どうすればいいのかなと。
0806デフォルトの名無しさん
2007/03/06(火) 07:08:15Widthってなんて読むんですか?
0807デフォルトの名無しさん
2007/03/06(火) 07:11:080808デフォルトの名無しさん
2007/03/06(火) 07:44:580809デフォルトの名無しさん
2007/03/06(火) 09:35:33発音は「ウィッズ
0810デフォルトの名無しさん
2007/03/06(火) 09:37:53発音は「ウィッズ」っぽいけど、「ズ」はベロの先を上の歯の裏に当てるようにして
発音するとそれっぽくなる、かもしれない。
0811デフォルトの名無しさん
2007/03/06(火) 14:22:250812デフォルトの名無しさん
2007/03/06(火) 21:21:340813デフォルトの名無しさん
2007/03/06(火) 21:49:000814デフォルトの名無しさん
2007/03/06(火) 23:26:38http://dictionary.goo.ne.jp/index.html
の英和辞典で検索。
waveファイル聞いて自分の耳で確認。
0815デフォルトの名無しさん
2007/03/06(火) 23:43:43英語の発音は英語の発音記号で表せ。
0816デフォルトの名無しさん
2007/03/07(水) 07:43:51win32に、WCaption: WideString みたいなメンバを追加して
さらにくそでかく遅いバイナリしか生成できなくする。
これなら.netでいいや、ってなりwin32死滅。
0817デフォルトの名無しさん
2007/03/07(水) 07:54:040818デフォルトの名無しさん
2007/03/07(水) 08:07:03欲しいコンポは全部TNTの派生にすればいい。
0819デフォルトの名無しさん
2007/03/07(水) 08:15:24ぐぐってみたら一式コンポーネントになってんのね
ありがとうございました。
0820デフォルトの名無しさん
2007/03/07(水) 08:28:561、単に、三国人がそっちの国のファイル名で保存した場合の対策程度なら
ファイル選択ダイアログだけ対応すればいい。
2、UNICODE文字列で保存されたテキストファイルを読みたいとかなら
これは文字コード判別して処理すればいい。これは、そのための型も関数もある。
キーワード WideString UCS4String UTF8String help[Character set conversions]
3、さらに、TEdit/TMemoも対応させたい
ならTNTware http://www.tntware.com/delphicontrols/unicode/
0821デフォルトの名無しさん
2007/03/07(水) 08:32:52uses CommDlg; //<---これを追加して
var OFN:TOpenFilenameW;
var ret:WideString;
begin
FillChar(OFN,SizeOf(OFN),0);
OFN.lStructSize:=SizeOf(OFN);
SetLength(ret,1024);
ret[1]:=#0;
OFN.hWndOwner:=Self.Handle; //<--これはフォームメソッドの場合、 関数で書くならApplication.Handle
OFN.lpstrTitle:='ファイルを開く の上に出るタイトル文字列';
OFN.lpstrFilter:='*.*'#0'*.*'#0#0;//<--- #0で区切って 最後が#0#0 と2つヌル文字を付ける事
OFN.lpstrFile:=PWideChar(ret);
OFN.nMaxFile :=Length(ret);
OFN.flags := OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST ;
Result:= GetOpenFileNameW(OFN);//<---この帰り値を見る
errno:=CommDlgExtendedError;//<---- エラーになってるかどうか知りたいならコレ
0822ななしへたぐらま ◆XcB18Bks.Y
2007/03/07(水) 11:20:56Win 9x系だと複数言語混合とかで使えないのですが
NT系が大半になった現在では大きな壁ではなくなりましたね.
(今や一太郎すらNT系専用になりましたしね)
0823デフォルトの名無しさん
2007/03/07(水) 17:09:30コンボボックスをクリックした場合に出るリストを
クリックではでなくして、キー入力でのみ表示したいのですが
どうすればよいでしょうか?
0824デフォルトの名無しさん
2007/03/07(水) 18:57:13諦める。
0825デフォルトの名無しさん
2007/03/07(水) 19:03:05たぶんTCustomCombo.DropDown
0826デフォルトの名無しさん
2007/03/08(木) 04:41:511.TPzConv(String型)でEUCからShift-JISにエンコード
↓
2.1を一行ずつListBoxに追加
ということをしたいのですが、うまくいきません。
とりあえず今はTMemoに置いて、
Memo2.Lines.LoadFromFile(File1);
Memo2.Text := PzConv1.EucToSJis(Memo2.text);
とすると、うまくいくのですが・・・
Tstrings型の変数?を作ってそこにエンコードした文字列を
入れようとしたのですが、エンコードした文字列はString型で
うまくできません。
String型の変数を作ってそこにエンコードした文字列を
入れるとなぜかファイル名だけになります。
どうすればいいでしょうか・・・。お願いします。
0827デフォルトの名無しさん
2007/03/08(木) 06:28:21<BR>や> などの文字が出てくるんですが
これらは特殊な文字コードなのでしょうか?
それともHtmlなどの構文なんのでしょうか
このような特殊文字の一覧を知りたいのですが…
どんなキーワードでググったらよいかわかりません
ヒントだけでもよろしくお願いします
0828827
2007/03/08(木) 06:34:19上での文字の例は
「< b r >」 「 & g t ;」 「 & n b s p ;」
です
0829デフォルトの名無しさん
2007/03/08(木) 06:38:460830デフォルトの名無しさん
2007/03/08(木) 07:54:05特殊な文字コードをキーボードから打ち込めると思うか?
0831デフォルトの名無しさん
2007/03/08(木) 09:08:58DragMode プロパティは dmManual で Images を使用しています。
MouseDown イベントで (Sender as TTreeView).BeginDrag(False);
としていますが、実行するとマウスボタンを押しただけですぐに Drag の
イメージが表示されてしまいます。そこで、Controls ユニットの
DragInit (2716行め)を以下のように修正しましたが、結果は同じでした。
//if DragImageList <> nil then
if ( ActiveDrag <> dopNone ) and ( DragImageList <> nil ) then
解決策はありますでしょうか。
0832デフォルトの名無しさん
2007/03/08(木) 09:59:34PNGライブラリ使え
0833デフォルトの名無しさん
2007/03/08(木) 10:15:37ってか、それたんに PixelFormat を pf1bit にしてからセーブするだけ
0834827
2007/03/08(木) 11:45:24書店で立ち読みした書籍にのありましたorz
「文字参照(character references)」というらしいです
お手数かけてすいませんでした
0835デフォルトの名無しさん
2007/03/08(木) 14:05:17インラインアセンブラをこんな風に関数化するのって意味あるんでしょうか
0836デフォルトの名無しさん
2007/03/08(木) 14:12:28どうしてもVisualC++使わないといけない(VCLじゃ駄目)って
いうのはどんなソフトの場合?
0837デフォルトの名無しさん
2007/03/08(木) 14:23:08呼び出しの時間が処理時間に比べて無視出来ないような、短いルーチンを書くときにはとても良い。
SSEとかでベクトルの外積とか一次変換をやりたい時には有用だと思う。
Delphiは変数や戻り値のレジスタ割り当てがあるので、スタック(メモリ)を介さず
高速なルーチンの呼び出し・復帰が出来る。まぁ、EBPだけはスタックに積まれるけど。
ちなみに、stdcallよりはpascal呼び出しの方が早いと言われるけど、よく覚えてない。
Delphiにもinline関数が有ればなぁとも思う。
0838デフォルトの名無しさん
2007/03/08(木) 14:41:340839デフォルトの名無しさん
2007/03/08(木) 14:43:26ビットマップを弄ってて計算部分を>>835見ながらアセンブラに置き換えてみたんですが
むしろCPU使用率的には重くなったもんで
……まあ、アセンブラの理屈や使い方よく分かってないですが
0840デフォルトの名無しさん
2007/03/08(木) 15:30:48今調べたんだが、Delphiの予約語、inlineは下位互換性のために残されている指令で、
コンパイラはこれを無視するらしい。また、インラインアセンブラと関わりの有る指令であり、
C++のinline指定子とは全くの別物みたい。他にそういう指定子があるならスマソ。
>>839
演算子一個で済むような演算だったら、何も関数化する事はないんじゃないかな…
アセンブラで置き換えさえすれば何でも速くなるという訳ではないッス。
とりあえずコンパイラはx86/x87コードしか吐かないので、「確実に速くなる」
と言えそうなのは、SSEやMMX使って簡単な計算を大量に素早く行う関数を作りたいといった
向きに限定されます。
インラインアセンブラで書かれた関数を使用する事自体には高速化へ寄与するケースも
多いけど、挙げられたサイトで紹介されている内容を「そのまま」流用するだけでは高速化
には繋がらないんじゃないかな、と。
0841デフォルトの名無しさん
2007/03/08(木) 15:52:06ぴったり収まるでしょうか。
MS明朝だと文字間隔が詰まりすぎて金額がうまく3桁区切りの枠に入ってくれません。
0842デフォルトの名無しさん
2007/03/08(木) 16:09:53TextWidth, TextHeightで調べるんだ。
あと、ノンプロポーショナルフォントを使うんだ。
0843デフォルトの名無しさん
2007/03/08(木) 16:18:33MMXですか……
解説してるページはあったけどやはりよく分からんまま使うのは気が引けますね
というわけで勉強してきます
ありがとうございました
0844デフォルトの名無しさん
2007/03/08(木) 16:29:070845デフォルトの名無しさん
2007/03/08(木) 16:59:150846デフォルトの名無しさん
2007/03/08(木) 16:59:380847デフォルトの名無しさん
2007/03/08(木) 17:01:07今ではどうなんだろう?
0848デフォルトの名無しさん
2007/03/08(木) 17:22:56ケースバイケース。
ちゃんと時間を計って明確に早くなっていればラッキーだが、
そんなことはあんまりないし、保守性が悪いのがどうしてもネック。
今時のCPUでカップリングをどれだけ考えないといけないのかしらんけど、
コテコテに最適化されたアセのコードは保守するに耐えない。
0849デフォルトの名無しさん
2007/03/08(木) 17:25:31先ず
Tstrings型はクラス型
var
SL: TStrings;
begin
SL:=TstringList.creat
try
SL.Lines.Add('hoge');
finally
SL.free
end;
end;
とかって使うのが正解
それと
Memo2.Textは普通のstringではないようで
helpによると(TStrings.Textを参照)
Text プロパティを使うと,TStrings オブジェクトのすべての文字列の中で復帰と改行で区切られた文字列を取得または設定できます。
だそうです
普通のstringの変数ではダメだとのことだから
「すべての文字列の中で復帰と改行で区切られた文字列を取得または設定できます。」
この辺が怪しい
俺ができるのはここまでだ
後はまかせたエロイ人!
0850848
2007/03/08(木) 17:31:06それならアセだけで書いた関数の意味はあるな。
実装されていないなら、速度の恩恵があまりない。
0851デフォルトの名無しさん
2007/03/08(木) 19:06:24>そんなことはあんまりないし、
んなこたない。VCLのソース嫁
Delphiのコンパイラは最適化がしょぼいことで有名だから
アセンブラで明確に高速化できるケースなんて山ほどある。
0852ななしへたぐらま ◆XcB18Bks.Y
2007/03/08(木) 19:06:50途中までやっていたのですが仕事が入ってそれっきりになってしまいました.
>>826はTStrings型の変数に文字列を代入しようとしてしまったのかも.
文字列リスト経由でメモコンポにもリストボックスにもうまく書き込めました.
(Yahoo!のHTMLソースを読み込んで表示させてみた)
procedure TForm1.Test2;
var
Strings: TStringList;
begin
Strings := TStringList.Create;
try
Strings.LoadFromFile(ExtractFilePath(Application.ExeName) + 'samples\Yahoo! Japan.htm');
ListBox1.Items.Text := FPzConv.EucToSJis(Strings.Text);
finally
Strings.Free;
end;
end;
ちなみにメモコンポのTextはDelphi 5のVCLのソースコードを読む限り,
ほかのコントロールと同様,WM_GETTEXTとWM_SETTEXTメッセージを送る実装のようです.
Delphi 6以降は違うのでしょうか.
>>836
速度差は無いと思って良いと思いますよ.
0853デフォルトの名無しさん
2007/03/08(木) 19:17:16ラッパとしては VCL より薄いので速いはずですが。VC++ を使わなきゃならない場面て
デバイスドライバ位じゃないですか。でも VC++ ユーザ数と Delphi ユーザ数が
一桁以上違うのは、なぜか? これを考えてみて下さい。
0854デフォルトの名無しさん
2007/03/08(木) 20:13:00今まで出た例以外に、自分が良く使うケースだと
1、ビットシフトではなくビット回転を含むような演算
2、32bit×32bit ÷32bit とか32bit×32bit >>31 のような、一時的にオーバーフローするような演算
3、in/out命令を吐く為(実際はデバイスドライバコールなのだが)
4、RDSTCで命令実行数を調べたりとか
こんなところかな
0855デフォルトの名無しさん
2007/03/08(木) 22:15:40しかし単純なC/C++の開発環境として見た場合のVC++は、BCBよりも殆どの面で優れている。
0856デフォルトの名無しさん
2007/03/08(木) 22:33:22コードが吐かれるんだよなぁ
0857826
2007/03/08(木) 22:36:07出来たーーーーーーーーーーーーーーーーーーー!
ありがd!!!!!!!!!
何回見てもレスこないからもうだめだと思いました。
本当にありがとうございました。
TstringsじゃなくてTStringListを使わなくちゃ駄目だったんですね。
ありがとうございました。
0858デフォルトの名無しさん
2007/03/08(木) 22:40:34別のフォームをドッキングするとグリップをドラッグしても外れなくなってしまうのですが、回避する方法ありますか?
ちなみにAlign=alLeftなら外れます。
0859デフォルトの名無しさん
2007/03/08(木) 22:43:16Delphiとのリンクが癌だな
0860デフォルトの名無しさん
2007/03/09(金) 04:08:11VC++ユーザーに、どうしてDelphiを使わないのか聞いたほうが早いかも。
0861デフォルトの名無しさん
2007/03/09(金) 07:56:47unicode対応してないから
0862デフォルトの名無しさん
2007/03/09(金) 08:19:070863デフォルトの名無しさん
2007/03/09(金) 08:40:410864デフォルトの名無しさん
2007/03/09(金) 10:27:480865デフォルトの名無しさん
2007/03/09(金) 11:19:230866デフォルトの名無しさん
2007/03/09(金) 11:40:220867デフォルトの名無しさん
2007/03/09(金) 12:06:10俺も常々そう思ってた。
VBのデザイナにしても使いにくくてしょうがなかった。
ドットネットでやっと追いついた感じだよな。
0868デフォルトの名無しさん
2007/03/09(金) 12:13:17VBもMFCもC#も.NETも存在しなかったと思う
0869デフォルトの名無しさん
2007/03/09(金) 12:28:500870デフォルトの名無しさん
2007/03/09(金) 13:11:32本当に力のある人なら、After Delphiを作った筈だが、
C丼てクラス言語以上のものではない。
0871デフォルトの名無しさん
2007/03/09(金) 13:47:28>>861
WideString があるよ。
0872デフォルトの名無しさん
2007/03/09(金) 13:59:300873デフォルトの名無しさん
2007/03/09(金) 15:50:570874デフォルトの名無しさん
2007/03/09(金) 20:19:49標準で、OpenGLのついてるけど、あんなのになるくらいなら、標準ではいらんわ。
DirectXが、有志が作ってくれたヘッダーで十分ですよ
0875デフォルトの名無しさん
2007/03/09(金) 20:20:42申し込み用紙きたけど、
win32版は、2007で、全然かわってない。
たぶん、バグ取りだけだと思う
0876デフォルトの名無しさん
2007/03/09(金) 20:37:420877デフォルトの名無しさん
2007/03/09(金) 20:47:36メモリ上でレコード型の各フィールドの間に隙間をあけたくない場合。
言い換えれば速度が多少遅くなってもメモリを節約したい場合とか。
DLLを使う場合では、そっちの構造体とフィールドを合わせるために使うこともある。
0878デフォルトの名無しさん
2007/03/09(金) 21:09:36ありがとうございました!
0879デフォルトの名無しさん
2007/03/09(金) 21:42:190880デフォルトの名無しさん
2007/03/09(金) 21:57:23WideString があると TForm の Caption にタイ語とハングルが同居できるとでも?
コントロール、メッセージ、ウィンドウ、全部対応しないと使えないだろ。
0881デフォルトの名無しさん
2007/03/09(金) 22:36:43DataGrid1.DataSource:=Adodc1;って出来ません
どうすればよいでしょうか?
0882デフォルトの名無しさん
2007/03/09(金) 22:47:58これって正規表現が必要ですよね?
Delphiは正規表現するためにライブラリを用意しなければならないと聞いたのですが
本当でしょうか?本当なら、おすすめのライブラリを教えてください。
0883デフォルトの名無しさん
2007/03/09(金) 22:58:100884デフォルトの名無しさん
2007/03/09(金) 23:19:470886デフォルトの名無しさん
2007/03/10(土) 04:23:42普通は packed を使う。 定義済み構造体は packed が付いているはず。
付いていないと思わぬ問題を引き起こすからね。
実行速度が重要な場面では、Byte型の代わりに、あえてWORD型やDWORD型を使う。
0887デフォルトの名無しさん
2007/03/10(土) 04:34:02いやいや、普通はつかわんだろ。
ヘルプでも推奨しているというわけじゃないし。
定義済み構造体でpackedが使われているのが多いのは、Win32APIとの兼ね合いだろうな。
0888デフォルトの名無しさん
2007/03/10(土) 07:59:23TFormのCaptionはWideString型じゃないよ
for Win32では AnsiString型で
for .NET ではWideStringに似てるけど .NETのstringクラス型だから、
Windowsが2000以後なら同居出来ると思うよ。
そんなに必要ならWideStringで定義しなおしたVCLを作ればいい。
既にTNTwareのように作って公開してくれてるものもある。
でもTNTwareの需要を見れば判ると思うけど、Delphi使ってる人でWideStringがそんなに必要な人は少数だよ
0889デフォルトの名無しさん
2007/03/10(土) 08:04:12uni坊には何を言っても無駄だよ。
自分で工夫するつもりなんてこれっぽっちもないんだから。
多分正規表現ライブラリつけろとか騒ぐライブラリ坊と同一人物だと思う。
0890デフォルトの名無しさん
2007/03/10(土) 08:15:04クラス型ではなくrecordをわざわざ使うという事は
メモリ配置を意識した使い方をしてる為だろうと思うのだが?
たとえばファイルへの読み書きとか
外部DLLとのインターフェースとか
B木の要素のような固定長のメモリブロックとかさ
そうすると、実際のメモリ配置のアドレス関係まで把握しやすいpackedを使うのが普通だと思うよ
そうじゃないならクラスを使ってゆくほうがいい
0891デフォルトの名無しさん
2007/03/10(土) 08:22:55実行速度を考えてbyteで入るのにword/longを使う意味はないよ
wordが奇数にならないようにlongの配置が下2bit0になるようにダミーは埋めるけどさ
今でも小さいサイズを使う方がキャッシュが効きやすく実行速度はあがるさ
0892デフォルトの名無しさん
2007/03/10(土) 08:39:21DataSourceには
Data Access にあるDataSourceを指定しなくちゃいけない
DataSourceにはDataSetを指定してやらなくちゃいけないから、ADODataSetを
と順にやってみて
0893デフォルトの名無しさん
2007/03/10(土) 10:29:08Delphiでお手軽にデータベースを使いたいのですが、
お勧めなDBはありますか?
・アプリ配布時に、別途インストール不要
なもの
0894デフォルトの名無しさん
2007/03/10(土) 10:57:410895デフォルトの名無しさん
2007/03/10(土) 11:25:29テキストデータでTStringListを使うのが一番簡単。
DBGridとかを使いたいという場合は、SQLを使わないなら何かあった気がするが
0896デフォルトの名無しさん
2007/03/10(土) 11:41:44>たとえばファイルへの読み書きとか
>外部DLLとのインターフェースとか
>B木の要素のような固定長のメモリブロックとかさ
にpackedを使うのは同意だけどさ、record使うのはそういう場合がおまいさんにとってメインなのか?
Delphiの場合、クラスを静的に使えないから、関係のあるデータを単純にまとめて扱うのに
recordを使うってのが一般的に一番多い使い方じゃん。
そういう時にいちいちpackedつけないだろ。
0897デフォルトの名無しさん
2007/03/10(土) 12:06:20関数内関数があるから、再帰を使うためにレコードを使う事もないし
わざわざrecordを単に入れ物として使う事はないんだけど?
0898デフォルトの名無しさん
2007/03/10(土) 13:07:47レコード型で済む場面でクラスをいちいち使って、解放し忘れとかに気をもむのか。
まあ、流儀は人それぞれだろうけど。
0899デフォルトの名無しさん
2007/03/10(土) 13:14:02> 関数内関数があるから、再帰を使うためにレコードを使う事もないし
kwsk
つか、引数がえらく多い関数の場合、varを付けてレコード型つかわねーか?
それこそクラスを使う必要ねーし。
こういう時、Delphiのクラスって、createしてfreeしないといけないのが面倒だよな。
そういう意味では、まあたしかに>>897の言ってることは特殊っぽいな。
0900デフォルトの名無しさん
2007/03/10(土) 15:40:35自作コード中で、使ってる箇所教えてみてよ。
>>899
関数内関数を使うと、根っこの関数で作業変数を定義しておけば
関数内関数にとっては、いわばグローバル変数みたいになるから
都合がいいんだよ。
で、引数が多いような場合は、そのままクラス化して
色々インターフェースを付けた方が再利用し易いよ。
手間変わらないでしょ
0901デフォルトの名無しさん
2007/03/10(土) 15:56:240902デフォルトの名無しさん
2007/03/10(土) 16:18:15http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ja/library/ServerHelp/1b6a1588-17f3-48a0-80e9-f52fb65ba21d.mspx
c:\windows\system32\prnmngr.vbs を
cscript prnmngr.vbs -t -p PrinterName
と呼び出せば良いらしいから、これを呼び出すか
中身を見て真似すればいいじゃないの?
0903デフォルトの名無しさん
2007/03/10(土) 17:09:01recordを普通に入れ物として使わない説明に全然なってないぞおいw
>逆にどんな所で、メモリ構造を意識しないrecord型を使ってるのか気になるな。
>自作コード中で、使ってる箇所教えてみてよ。
普通のコード書きならいたるところにあるだろw
関数の引数として使ったり、クラスのメンバーとして、クラスにするほどでもないような関係のある変数群を設定するときなんか
メモリ構造を意識してレコード型を書く必要ないだろww
むしろ、スタックでメモリ管理してもらえるレコード型を全く使わずに、
全てDelphiのクラスで書くなんて、Delphiではプロジェクトが大きくなってくると自殺行為じゃんよ
解放関連の人的バグにつきまとわれる
そりゃ、interfaceに代入してクラスでもガベコレさせりゃいいってんならまだ話がわからんでもないが、
それだと単純にレコード型を宣言してスタックでメモリ管理させるよりよっぽどコード書くのが手間だ。
>>900もまさかinterfaceを毎回使えとは言っとらんよな?
0904デフォルトの名無しさん
2007/03/10(土) 17:11:50いい年こいたオッサンがムキになってみっともない
これだからDelphi使いはバカにされるんだよ
同じDelphi使いとして恥ずかしい
0905デフォルトの名無しさん
2007/03/10(土) 17:14:03> 関数内関数を使うと、根っこの関数で作業変数を定義しておけば
> 関数内関数にとっては、いわばグローバル変数みたいになるから
> 都合がいいんだよ。
それは正しいが、それと再帰を使うためにレコード型使わないの関係ないじゃん。
関数内関数は読みづらくなるから嫌いな人もいるけどそれはさておき、
関数内関数を使うのを前提とした場合、なにみお関数内関数だけにこだわらず、
関数内型で、関数の中だけで使えるレコード型を定義した方がわかりやすくなるケースも多々ある。
まさか関数内型を知らないのではないだろうな?
一応教えてやるが、関数内型ではクラスは定義できないしな。
0906デフォルトの名無しさん
2007/03/10(土) 17:14:430907デフォルトの名無しさん
2007/03/10(土) 17:15:31そだね
0908デフォルトの名無しさん
2007/03/10(土) 17:39:52おっしゃる通りだけど、
俺も、レコード型を使わないわけじゃない。
速度的な事を考えたらpacked を使うだろうと、いってるんだよ。
それは、わざわざrecord型を使うのは、そういう事が目的だからさ。
あと、俺は、関数の引数で構造体を渡す程パラメータが多いような場合は、
もう文字列渡しで処理してしまう事が多いから、ちょっと感覚が違うのかもしれないが
>>905
関数内関数が使えない言語だと、
どうしても作業変数を纏める必要が出てきて、何らかの構造体が必要になる事が多いけど
Delphiは 巧くはまれば、比較的データ構造を定義しなくても
書けてしまう事が多いという意味だよ。
0909デフォルトの名無しさん
2007/03/10(土) 18:00:44殺るか殺られるか、
その殺伐とした雰囲気がいいんじゃねーか?
熱くDelphiを語れ!
0910デフォルトの名無しさん
2007/03/10(土) 18:03:14あとは全部クラスを使うってのは、いかにもJAVA者的な考え方だな
ある意味すげー
絶対まねしたくないけど
0911デフォルトの名無しさん
2007/03/10(土) 18:04:44>速度的な事を考えたらpacked を使うだろうと、いってるんだよ。
あのー、packed使うと速度落ちるんですけど。
もしかして超初心者?
だよね、ここくだすれだし。
0912デフォルトの名無しさん
2007/03/10(土) 18:11:020913デフォルトの名無しさん
2007/03/10(土) 18:28:23ってヘルプの説明の事だね。
これは、断定的な表現だけど、正しくない。
適切なメモリ配列を自分でやらなければそうなるという事なら正しいが、
適切に使えば、同じか、逆にアプリは高速化する。
例えば、
type ELF_hdr = packed record
HDRmagic:LongInt ; //#$7f+'ELF' = $464C457F
AdrSize:byte ;
ByteOrder:byte ;
hVersion:byte ;
dummy :array[1..9]of byte ;
FileType:Word ;
//省略
end;
というような、データを定義する時に dummy を入れなければ、FileTypeの部分が奇数アクセスとなる
ワードデータが奇数アクセスになると、メモリアクセスが2度必要になり、片方がキャッシュに入ってないというような
事になるとストールする・・・・場合があるのであって
ちゃんと偶数・奇数、4バイト単位に注意してやれば問題ない。
ここで、packedを付けなければ確かに勝手に詰め物を入れてくれるわけだが、
それは構造体を無駄に大きくする事になるわけで、
速度を目的に recordを使うのなら、 packedを使って、
メモリ配置を常に考えるべきだと思うよ
メモリをムダに使わない事で、結局処理速度も上がるわけだから
0914デフォルトの名無しさん
2007/03/10(土) 18:29:230915デフォルトの名無しさん
2007/03/10(土) 18:34:28もうそんな顔真っ赤にせず、おまえ言ってることかなりおかしくなっていることに気がつけよ。
結局、packed使っても、packedを使って同じようにできるとおまえは言っているだけで、
じゃあ速度重視なら最初からpacked使わなくていいだけの話じゃん。
頭 冷 や せ。
0916デフォルトの名無しさん
2007/03/10(土) 18:35:440917デフォルトの名無しさん
2007/03/10(土) 18:39:04いい加減スルーしてやれよ
0918デフォルトの名無しさん
2007/03/10(土) 18:40:2532ビット環境以外にもってった時の最適化の意味が無いときたもんだ
0920デフォルトの名無しさん
2007/03/10(土) 18:41:38若者は引いてやれよ
0921デフォルトの名無しさん
2007/03/10(土) 18:51:39913の構造体は手元にあった外部ファイルのデータを読む部分からコピペしてきたわけだが
こういう場合でないrecord型で、どんなふうに使ってるのかは興味がある。
出来れば例をあげてほしい。
特に関数の引数に使う例が見たい。
0922デフォルトの名無しさん
2007/03/10(土) 18:53:110923デフォルトの名無しさん
2007/03/10(土) 18:54:410924デフォルトの名無しさん
2007/03/10(土) 18:56:26高速化が必要になるならアセンブラで書けばいいだけの話
0925デフォルトの名無しさん
2007/03/10(土) 18:57:48先ずは質問にしなさいw
議論がしたければ過疎ってる寺子屋スレにでもいけ
その熱意をもって>>901とかの質問に答えてやってくれ マジで
0926デフォルトの名無しさん
2007/03/10(土) 18:58:28自分で調べろ
>>913=>>921と遊ぶのはここまで
0927デフォルトの名無しさん
2007/03/10(土) 19:00:020928デフォルトの名無しさん
2007/03/10(土) 19:19:54バリアント変数で
oLocator := CreateObject('WbemScripting.SWbemLocator');
oService := oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword);
oPrinter := oService.Get('Win32_Printer.DeviceID='''+ strPrinter +'''');
oPrinter.SetDefaultPrinter;
とやるみたい。
0929デフォルトの名無しさん
2007/03/10(土) 19:37:52procedure TForm1.Button1Click(Sender: TObject);
var strServer, strNameSpace, strUser, strPassword,strPrinter:string;
var
oLocator:OLEVariant;
oService:OLEVariant;
oPrinter:OLEVariant;
begin
strServer :='';
strNameSpace :='';
strUser :='';
strPassword :='';
strPrinter :='Mytalk FAX';//----プリンタの名前 ここを変更
oLocator := CreateOleObject('WbemScripting.SWbemLocator');
oService := oLocator.ConnectServer(strServer, strNameSpace, strUser, strPassword);
oPrinter := oService.Get('Win32_Printer.DeviceID='''+ strPrinter +'''');
oPrinter.SetDefaultPrinter;
end;
0930デフォルトの名無しさん
2007/03/10(土) 19:51:04packedをつけた場合って32ビット環境以外にもっていくと最適化されるの?
0931デフォルトの名無しさん
2007/03/10(土) 19:51:47> 通常使うプリンタ
ぐぐったら出てきた。
ただ、実際に使えるコードなのかどうかは試してないです。
サンプル: "通常使うプリンタに設定する"
http://forum.nifty.com/fdelphi/samples/00614.html
デフォルトプリンタの設定
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=31#0242.txt
0932デフォルトの名無しさん
2007/03/10(土) 20:14:53packedを付けてサイズが小さくなっているなら
ワード境界とかDWORD境界が原因の悪化が無い分高速になるという事では?
0933918
2007/03/10(土) 20:44:33逆。
packedを付けない時は、環境に応じて速度が出るようにメモリ上の配置が自動的に最適化される。
packedを付けたときは、どんなときもまったくレコードのフィールドとフィールドがまったく隙間がないように配置されるので、
WORD境界やらDWORD境界上に無いデータへのアクセスが遅くなる。
無論、packedを付けて、ダミーのフィールドを入れて、手動でそういったフィールドが
各境界上に並べてやれば、結果的にpackedを付けないときと同じ速度にすることができるけど、
コード量が増えるは、保守性は低下するので無意味。
しかも、(しばらくはなさそうだけど、)将来、もっとも速度が出る整数型のintegerやcardinalが
8バイトサイズになったら、それ以前にレコード型にpackedつけてダミーのフィールドつけて手動で並べたコードの手動の最適化が無駄になるってこと。
そういうわけで、速度を最適化とか言うなら、おとなしくpackedを付けないのが正しい。
09341/2
2007/03/10(土) 20:47:09TreeView.Items.Item[i].Dataで自前のクラスを参照しつつ
ノードを追加するときは最後のノードのコピーを結びつけるようにしたいと考えています
なんとなく動くところまではできたのですが、終了時にメモリリークがあるといわれます
おそらくコピーの仕方が怪しいのだとは思うのですが、どこをどう直せばいいか教えてください
//以下本体部分
procedure TMainForm1.AddNode1Execute(Sender: TObject);
var
tempNode :TClassNode;
begin
tempNode := TClassNode( TreeView1.Items.Item[TreeView1.Items.Count-1] ).Copy;
TreeView1.Items.AddObject( nil, 'test', tempNode );
end;
procedure TMainForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i :integer;
begin
for i := TreeView1.Items.Count-1 downto 0 do
begin
TClassNode(TreeView1.Items.Item[i].Data).Free;
end;
end;
procedure TMainForm1.FormCreate(Sender: TObject);
var
tempNode :TClassNode;
begin
tempNode := TClassNode.Create;
TreeView1.Items.AddObject( nil, 'root', tempNode );
end;
//自前クラス部分は長すぎるので次レスで どうもすみません
09352/2(クラス部分)
2007/03/10(土) 20:47:52private Element : integer;
public function Copy(): TBaseNode;
end;
type TClassNode = class
private Element1 :TBaseNode;
public
constructor Create;
destructor Destroy; override;
function Copy() :TClassNode;
end;
implementation
function TBaseNode.Copy() :TBaseNode;
begin
Result := TBaseNode.Create;
Result.Element := Element;
end;
constructor TClassNode.Create();
begin
Element1 := TBaseNode.Create;
end;
destructor TClassNode.Destroy();
begin
Element1.Free;
end;
function TClassNode.Copy() :TClassNode;
begin
Result := TClassNode.Create;
Result.Element1 := Element1.Copy;
end;
//以上です
0936918
2007/03/10(土) 20:55:00packedをつけない場合、wordとかの2バイトサイズの変数は、2バイト境界(word境界)上に並べられる。
同じく、longintやlongwordみたいな4バイトサイズの変数は、4バイト境界(dword境界)上に並べられる。
同じく、int64やdoubleみたいな8バイトサイズの変数やExtendedなんかは、8バイト境界(qword境界)上に並べられる。
でね、
hoge=record
a:word;
b:longint;
c:word;
end;
というレコード型より
hoge2=record
b:longint;
a:word;
c:word;
end;
というレコード型の方が、基本的にレコード型のサイズが小さくなる(前者は12バイト、後者は8バイト)から覚えておいて良いよ。
0937918
2007/03/10(土) 21:03:17ってごめん、肝心の>>918でおかしなこと言ってた。
誤:
つけくわえるならば、>>913 のpackedを使わないPascalのコードは、
32ビット環境以外にもってった時の最適化の意味が無いときたもんだ
正:
つけくわえるならば、packedを使って手動で最適化したPascalのコードは、
32ビット環境から64ビット環境にもってった時にせっかく手動で書いた最適化の意味が
無駄になりうる可能性があるときたもんだ
0938918
2007/03/10(土) 21:05:10一度、FastMM4をとっぱずして、堀さんのメモリリークチェッカーを使ってみるといいよ。
あれだとより詳しくメモリリークを警告してくれるので。
0939デフォルトの名無しさん
2007/03/10(土) 21:19:18粘着は見苦しい
0941デフォルトの名無しさん
2007/03/10(土) 23:05:11destructor TClassNode.Destroy();
begin
Element1.Free; // ← TObject.Destroy;と同じなのでは?
end;
>>918
別スレ行くか、「激論!Delphi: 構造体の穴」とかいうスレでも立てれば?
0942デフォルトの名無しさん
2007/03/10(土) 23:27:16inherited しようよ。
0943デフォルトの名無しさん
2007/03/11(日) 08:52:480944デフォルトの名無しさん
2007/03/11(日) 09:01:580945デフォルトの名無しさん
2007/03/11(日) 09:12:520946デフォルトの名無しさん
2007/03/11(日) 11:35:15どうしたらいいんですか?
0947デフォルトの名無しさん
2007/03/11(日) 12:12:04ParamStrにドロップされたファイル名が入る。
0948946
2007/03/11(日) 12:29:33お答えありがとうございます
EXEファイルをダブルクリックしたときにフォームが出てくるのはいいのですが
直接ドロップされたときは、フォームを作成せずに処理だけを行ないたいのです
それはどのようにしたらよいのでしょうか?
0949デフォルトの名無しさん
2007/03/11(日) 12:31:15WMDropFiles使う
0950ななしへたぐらま ◆XcB18Bks.Y
2007/03/11(日) 13:11:08くだすれDelphi(超初心者用)その40
http://pc11.2ch.net/test/read.cgi/tech/1172844367/l50
以前,2chが落ちたときに立ったものです.
0951934
2007/03/11(日) 13:24:37ttp://www.yks.ne.jp/~hori/MemCheck.html
これのことでしょうか?
4は意味がよくわからなかったのと、サンプルでもプラットフォームに依存するエラーがでるので
やっていないのですが、単なる回数チェッカーにしかなっていません
>>941
destructor TBaseNode.Destroy();
begin
inherited;
end;
と追加してみましたがやはり同じでした
>>942
いまいちinheritedの意味が分かっていないのですが、
どこに書けばいいのでしょうか?
FastMMの出すエラーによれば、コピーを実行した回数だけ
(上の例ではTMainForm1.AddNode1Executeを実行した回数だけ)
TBaseNodeのメモリが解放されていないと出て、
TClassNodeの解放については問題ないようなので、
コピーの仕方が間違っているとは思っているのですが…
0952デフォルトの名無しさん
2007/03/11(日) 13:40:06そのDLLを動的ロードしたときCPU使用率が100%になってアプリが固まるんですが
これってコンポーネント側のバグ(or仕様)ですかね
usesにGIFImageを加えただけで何もしなくても発生します
環境はD6Personal,win2k
0953952
2007/03/11(日) 13:47:38正確には「FreeLibraryしたときに発生」です
DLLは最近弄り始めたんでよく分かりませんが
0954デフォルトの名無しさん
2007/03/11(日) 14:20:04.dprで処理をする。
0955デフォルトの名無しさん
2007/03/11(日) 16:31:48そうなると少し欲が出て、DirectXのヘッダから直でDirectX対応プログラムをやってみたくなった…
ググッってみたけど、黒田さんって方がDirectX5のヘッダを公開されてるだけで、日本人ではそれ以降のバージョンを出しているのを見つけられない…
直接APIをつかっているサンプルとか見たいんですが、勉強になるサイトとか教えてください!
高坊なので、英語のサイトは無理ですorz
辞書みながら少しなら理解できるかもしれませんが。
0956デフォルトの名無しさん
2007/03/11(日) 16:41:04理解するヒントならDirectXの日本語ヘルプ
日本人が作ったソースならゲーム製作技術板避難所で独自ライブラリ、
ゲーム製作技術板でAPIを使ったゲームを見た覚えがある
0957955
2007/03/11(日) 17:17:00ちょっといいのが見つかりません。
C++は読めないし、「まだお前には早い」って言われてるみたいです。
時間をかけて少しずつ資料を集めていきます。
0958デフォルトの名無しさん
2007/03/11(日) 19:54:15バージョンによって、DLLで使った時に
initializationか、 finalization 部が実行されなかったように思うが
それは大分前だからD6なら違うだろう。
もしかしてShareMemを使ってないとか?
0959デフォルトの名無しさん
2007/03/11(日) 20:11:470960デフォルトの名無しさん
2007/03/11(日) 20:26:02そういや、 D6で条件コンパイルで入れてるTDummyThread って何のために必要なんだろな。
0961デフォルトの名無しさん
2007/03/11(日) 20:34:25すまん。文字列か動的配列を使っているのにShareMemをしてなくて
不具合が起きていたのがTGifImage で顕在化したんじゃないかな って事を言いたかった。
0962デフォルトの名無しさん
2007/03/11(日) 22:04:11.dprに記述すると関数が使えなくなってしまいました。
例えばどんな記述をすればよいのでしょうか?
0963デフォルトの名無しさん
2007/03/11(日) 22:21:04処理したい内容はフォームのメソッドに書いてるの?
それとも単独の関数や手続き?
フォームのメソッドなら、 Application.Run; まで実行させて
その手前でパラメータを見て処理させて
Application.Run;を実行させずに終わればいい
単独の関数なら
Application.Initialize; の手前でやっちゃえばいい
0964デフォルトの名無しさん
2007/03/11(日) 22:47:02必要なユニットをusesしとるかい?
0965デフォルトの名無しさん
2007/03/12(月) 07:50:56GLSceneの方がよいよ
0966957
2007/03/12(月) 15:53:53OpenGLってやつですか?DirectXとどっちが自分にわかりやすいのか、研究してみます。
紹介してくれてありがとうございます!
0967デフォルトの名無しさん
2007/03/12(月) 16:30:29http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E4%B9%B1%E6%95%B0
↑ここの混合合同法ってので自作してみた。
ところがこれって、「5桁」とか桁で指定するといい感じだけど、Random(256); の結果みたいに「255を天井」のような場合うまくいかない…
0から255まで満遍なく生成できるようないい知恵を持ってる人、いませんか?
PS: メルセンヌ・ツイスタ法って日本人が開発したのか!すげぇな!
0968デフォルトの名無しさん
2007/03/12(月) 16:42:050969デフォルトの名無しさん
2007/03/12(月) 17:11:140から255までの数字が入った配列を用意して
それをランダムに並び替える。
その配列を頭から読んでいけば0から255までの数字が一つずつランダムに得られる
・・ってのとは違う話?
0970デフォルトの名無しさん
2007/03/12(月) 17:14:31RandSeed := RandSeed*$8088405 +1
return (RandSeed * Range) shr 32; {掛け算結果の上位32ビットを採用する}
0971デフォルトの名無しさん
2007/03/12(月) 17:17:030〜255という乱数が欲しいなら
(線形合同法で得た0〜2^32の乱数) SHR 24 すればいい
0972デフォルトの名無しさん
2007/03/12(月) 17:18:05それを効率良くランダムに並べるには 0〜Nまでの乱数が欲しくなるわけで
0973デフォルトの名無しさん
2007/03/12(月) 17:35:31>>969
>それをランダムに並び替える。
ここでRandom関数つかわないといけなくなっちゃうってことでは?
http://ayusya.hp.infoseek.co.jp/AlgorithmRandom.html
このサイトの
UINT arand()
{
r ^= 0x65AC9365UL;
r ^= ( r >> 4 ) ^ ( r >> 3 ) ^ ( r << 3 ) ^ ( r << 4 );
return r;
}
この関数ってDelphiで書くとどうなるんだろう?
自分もテダレじゃないからわからん。
0974デフォルトの名無しさん
2007/03/12(月) 17:40:20そんなにXORを繰り返すなら、普通にM系列乱数にした方が簡単だろう
M系列なら理論的に調べられてるしね
0975967
2007/03/12(月) 17:41:360976デフォルトの名無しさん
2007/03/12(月) 17:44:45そのサイト管理者めっさウザ過ぎワロスw
0977デフォルトの名無しさん
2007/03/12(月) 17:49:34ttp://www.madlabo.com/mad/edat/mathematic/M/index.htm
ttp://www.t3.rim.or.jp/~omorita/prog/mrand.html
Delphiでの実装例
ttp://homepage1.nifty.com/Ayakawa/soft/delphi.html
0978デフォルトの名無しさん
2007/03/12(月) 17:53:52r := r xor ( (r shr 4) xor ( r shr 3) xor ( r shl 3) xor ( r shl 4) );
0979デフォルトの名無しさん
2007/03/12(月) 17:58:41>>970を手引きに、
function TForm1.MyRandom(Seed, Range: integer): integer;
begin
Seed := Seed*$8088405 + 1;
result := (Seed * Range) shr 32; {掛け算結果の上位32ビットを採用する}
end;
てのを作ったが、結果が-1071084032しかでない。
どこがおかしい?
0980デフォルトの名無しさん
2007/03/12(月) 18:06:56アセンブラで書かないと効率的なコードにならないのだけど
var Seed :DWORD;
procedure TForm1.Button1Click(Sender: TObject);
function MyRand(Range:DWORD):DWORD;
begin
Seed := Seed*$8088405 + 1;
Result:= (Int64(Seed) * Int64(Range)) shr 32;
end;
var i:Integer;
begin
for i:=0 to 10 do Memo1.Lines.Add(IntToStr(MyRand(10)));
end;
0981デフォルトの名無しさん
2007/03/12(月) 18:07:13メルセンヌツイスタのランダムクラス、ゲットしたぜ!
0982デフォルトの名無しさん
2007/03/12(月) 18:15:43うわ!上手くいった!
アセンブラで書いたらこれ以上速くなるのか!?
誰か詳しい人plz
0983デフォルトの名無しさん
2007/03/12(月) 18:19:15System.pas にある _RandInt ってのが Randomの実体さ
var Seed :DWORD;
procedure TForm1.Button1Click(Sender: TObject);
function MyRand(Range:DWORD):DWORD;
begin
Seed := Seed*$8088405 + 1;
Result:= (Int64(Seed) * Int64(Range)) shr 32;
end;
var i:Integer;
begin
Seed:=RandSeed;
for i:=0 to 10 do Memo1.Lines.Add(format('%5d %5d',[MyRand(10) ,Random(10)] ));
end;
ほら、RandomとMyRandは同じ結果を返すだろ?
0984デフォルトの名無しさん
2007/03/12(月) 18:37:20>いや、だから、アセンブラで書かれたものは randomだって
あ、そーなんだ・・
0985デフォルトの名無しさん
2007/03/12(月) 19:12:270986デフォルトの名無しさん
2007/03/12(月) 19:17:42function MyRand(Range:DWORD):DWORD;
asm
IMUL EDX,Seed,08088405H
Add EDX,1
MOV Seed,EDX
MUL EDX
MOV EAX,EDX
end;
0987デフォルトの名無しさん
2007/03/12(月) 19:46:18どんな値で初期化するかそっちの方が問題だよな…
0988デフォルトの名無しさん
2007/03/12(月) 19:54:17合同法は、掛け算を持つパソコンでは高速だけど
種がそのサイズしかないから、初期化もクソもない。すぐにループしてしまう。
0989デフォルトの名無しさん
2007/03/12(月) 19:57:3264bit版CPUだと暗号化なんかで使ったときにキチンと復号できないとか、そういう危険はないのか?
0990デフォルトの名無しさん
2007/03/12(月) 20:00:24俺にとっては、、
0991デフォルトの名無しさん
2007/03/12(月) 20:01:39掛け算して下位を捨てても、計算式が同じなら同じ種から同じ結果が出るよ
0992デフォルトの名無しさん
2007/03/12(月) 20:07:07なんで?
0993デフォルトの名無しさん
2007/03/12(月) 20:08:210994デフォルトの名無しさん
2007/03/12(月) 20:16:27実装部分にRangeの文字が見えないけど、どこか違くね?親方…
0995デフォルトの名無しさん
2007/03/12(月) 20:56:04Rangeはレジスタ渡しなら EAXで渡されてるのでコレでいいと思うよ
レジスタ渡しでないなら mov EAX,Range が先頭に必要
M系列の乱数だけど、たとえば、サイズ89で タップが38bit目だとすると
89bit目と、38bit目をXORしたのが最下位に入るので、これを32bit分繰り返すので
// 8 7 wH| 6 5 4 wM|3 2 1 wL
// 987654321098765432109876543210987 654321098765432 10987654321098765432109876543210
// |xor |<-----15-----|
// | 3 2 1 |< 6>|
// 876543210987654321098765432109876 543210
function RandM89Rand(Range:DWORD):DWORD;
asm
push EAX
mov EDX,wH;
mov EAX,wM;
mov ECX,wL;
mov wH,EAX ;//上位2ワードは
mov wM,ECX ;//そのままシフト
SHLD ECX,EAX,6 ;//bit38からの32bitをECX
SHLD EAX,EDX,15 ;//bit89からの32bitをEAX
XOR EAX,ECX ;//そのXOR結果が下位
mov wL,EAX
pop EAX
MUL EDX
MOV EAX,EDX
end;
0996デフォルトの名無しさん
2007/03/12(月) 21:14:520997934
2007/03/12(月) 21:15:00>>935のCopyをやめて
constructor TBaseNode.Copy( src :TBaseNode );
begin
Element := src.Element;
end;
constructor TClassNode.Copy( src:TClassNode );
begin
Element1 := TBaseNode.Copy( src.Element1 );
end;
のようにすればメモリリークは出ていないようです
constructor Create(src:TClassNode);
みたいな形でもできるようですが、この場合は引数なしのCreateも作ってやって、かつ、
overload指定をしないといけないようです
正直、どうして結果が異なるのかは全く理解できないのですが...orz
>>938
>951の時はできなかったのですが、プロジェクトのオプションをいじっているうちに
レポートをはいてくれるようになりました
どこかよくわからないけど、デバッグオプションをはしょっていたようです
失礼しました
0998デフォルトの名無しさん
2007/03/12(月) 22:13:23未定義の識別子’wH’未定義の識別子’wM’未定義の識別子’wL’
って出ちまうゼ
どこかで宣言しとかないといけないものがあるんじゃないかな?
教えてくれよ、師匠…
0999デフォルトの名無しさん
2007/03/12(月) 22:15:49> function TBaseNode.Copy() :TBaseNode;
> begin
> Result := TBaseNode.Create; // (3)
> Result.Element := Element;
> end;
> constructor TClassNode.Create();
> begin
> Element1 := TBaseNode.Create; // (1) ここでElement1のインスタンスを生成しているのに
> end;
> destructor TClassNode.Destroy();
> begin
> Element1.Free;
> end;
> function TClassNode.Copy() :TClassNode;
> begin
> Result := TClassNode.Create;
> Result.Element1 := Element1.Copy; // (2) これを呼ぶと(3)が実行されて、すでに生成されたElement1を上書きする
> end;
から、(1)で生成されたTBaseNodeがどこかに行ってしまって、破棄されないためではないかと。
1000デフォルトの名無しさん
2007/03/12(月) 22:15:521回目は決まって0だし、、
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。