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

くだすれDelphi(超初心者用)その39

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2007/01/21(日) 22:41:54
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
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
>>1
0004デフォルトの名無しさん2007/01/21(日) 23:39:02
はやくBDS 2007出ないかな〜
0005デフォルトの名無しさん2007/01/22(月) 01:03:36
Del6です

IDEで実行
 ↓
無限ループのバグがありWinからアプリを強制終了
 ↓
プロセスを終了できません

どうしたらいいですか?orz
0006デフォルトの名無しさん2007/01/22(月) 01:05:06
>>5
IDEから停止
0007デフォルトの名無しさん2007/01/22(月) 02:07:33
ttp://delphi.sakura.vg/index2.html
でActiveXに興味を持ち、手始めに上記サイトで使われているコンポーネントの仕様を探したのですが、見つける事が出来ませんでした。
Microsoft製コンポーネントの仕様は何処で入手する事が出来るのでしょうか?
0008デフォルトの名無しさん2007/01/22(月) 03:12:39
Delphiのバージョンくらい書け
0009デフォルトの名無しさん2007/01/22(月) 06:02:05
http://delphi.sakura.vg/lesson1.html
書いてあるじゃん
0010デフォルトの名無しさん2007/01/22(月) 10:09:15
>>5
IDEから終了させようとして、「プロセスを終了できません 」ってでたんです(汗
Delphiを終了させようとしても、「デバック中です」とかいわれたり。
結局Delphiを強制終了
0011デフォルトの名無しさん2007/01/22(月) 11:23:54
>>10
たまに、あるよ。
IDEからでは、どうしようもないことが。
極力、無限ループは避けるしか・・・。

あとは、タスクマネージャで、優先度の設定を通常以下にすると、IDEからでも終わらせられることがある。
0012デフォルトの名無しさん2007/01/22(月) 11:36:24
文字の形をしたウィンドウをTransparentColorを使わずに
リージョンで作ろうと思っているのですが
StrokePathで文字の縁取りを含めたウィンドウを作ろうと思ったら
どうすればよいのでしょうか?
TextOutで縁取りなしのウィンドウは作れるのですが
縁取りも含めた形の文字のウィンドウがどうしても作れません・・・><;
0013デフォルトの名無しさん2007/01/22(月) 12:22:48
前スレの969ですけど、
Socketのプログラムを組んでいるんですが、
接続相手が居ない時にでる例外が捕まりません。
try
Form1.ClientSocket1.Open;
except
end;
これで、例外のポップアップがでます。
どうも、Open時には例外が出なくて、タイムアウト時に例外が出ているのかな?って推測ですけど、
この例外を捕まえるにはどうしたらいいのでしょうか?

例外が出たらメッセージは出さずにログに記録したいと思っています。
001472007/01/22(月) 12:47:42
>>8
すみません、バージョンは関係無いと思ったのであえて書きませんでした。
Delphi6Personalです。

>>9
ブラウザは普通に作ることが出来ました。
私が知りたいのは何処からMicrosoft製コンポーネントの仕様が入手できるかです。
0015デフォルトの名無しさん2007/01/22(月) 12:50:16
可変部分を持つレコード型で演算子をオーバーロードするために次のように書いています。

TVector3 = 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;

このときに各演算子メソッドの実装部分で、
「宣言がすでに定義されているものと異なります」というエラーが出てコンパイルできません。
可変部分をなくすとコンパイルできるのですが、
可変部分を持つレコード型では演算子のオーバーロードはできないのでしょうか。
0016132007/01/22(月) 12:50:49
自己解決
エラーイベントの中にErrorCode:=0;って書けばスルーできた
0017デフォルトの名無しさん2007/01/22(月) 13:06:37
>>14
MSDNにある。日本語版じゃなくて全部英語の本家のほうな。

これ以上のことはIEコンポ専用スレに池
http://pc10.2ch.net/test/read.cgi/tech/1145189322/
001872007/01/22(月) 13:11:28
>>17
有難う御座います。
英語版のMSDNにあるのですね。どうりで見つからなかった訳です。
0019デフォルトの名無しさん2007/01/22(月) 13:18:02
ラベルにTStrings型のプロパティを持たせたのですが、
これの初期値をNameから得るにはどうしたら良いのでしょうか。
0020デフォルトの名無しさん2007/01/22(月) 13:35:28
>>15
可変じゃなくても、メソッドの後に、変数置いても、
同じエラーがでますね。(もちろん、後に置けません!とは言われるけど)
仕様なのか、バグなのか?
QCに報告しておいたらどうでしょうか。
0021デフォルトの名無しさん2007/01/22(月) 17:05:31
Socketのsendtextって1回で最大何バイトぐらいまで送っていいんでしょうか
リストをやり取りするプログラムを組んでいるんですが、
いっぺんで送ってしまおうと考えていて。
そのリストは1KBを超えることは無いとは思うんですが。
00222007/01/22(月) 20:01:49
ノートパッドに書かれたテキスト(.txt)から、一行目,三行目,五行目,七行目.....というように奇数番目の行だけを読み込んで表示するプログラムを作りたいのですが、指定された行だけを読み込む方法が分かりません。
教えてくださいませんでしょうか?
0023デフォルトの名無しさん2007/01/22(月) 20:22:44
var
i: 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;
こんなかんじ
00242007/01/22(月) 20:33:05
>>23

ありがとうございます!!
0025前スレ9862007/01/23(火) 12:56:18
前スレではお世話になりました。
探してみましたがやっぱりエンコードが分かりません><

.tmpファイル(EUC)をShift_JISで読み込みたいのですが
どうすればいいか教えてください。
0026デフォルトの名無しさん2007/01/23(火) 13:20:06
nkf使え
0027デフォルトの名無しさん2007/01/23(火) 13:20:33
>>25
一旦stringでも読み込んできて、
なんらかのEUC to SJISのライブラリを間にはさむしかなかろうて。
0028デフォルトの名無しさん2007/01/23(火) 15:23:45
IDEのようにボタンやテキストボックス等をフォームに置いて
選択したコントロールの端をドラッグしたりして
コントロールを引き伸ばしたり縮めたりしたいのですが
クリックしたときにIDEのようにコントロールを選択された状態
(コントロールの上下左右斜め端に■が表示された状態)
にする方法がわかりません。
どうすればよいでしょうか?

バージョンはDelphi2005です。
0029デフォルトの名無しさん2007/01/23(火) 16:36:21
GrabHandle サイズ変更用の黒いハンドル
http://forum.nifty.com/fdelphi/samples/00296.html
0030デフォルトの名無しさん2007/01/23(火) 16:43:51
Delphi6でネット巡回ソフト作ったけど
FastNetではHTTP1.1に未対応で転送されるとアウトで断念。
Indyではタイムアウトが無くて、応答無しの時の処理が超無駄使い。
タイマーで監視して120秒待ってもIdHTTPのGet関数が終わらなかったら
タイムアウトと判断しているが、強制的にIdHTTPを開放しようとすると
フリーズするので、スレッド丸ごと放棄して新しいスレッドを製作して
そっちに引き継ぐ処理でごまかした。

だが放棄したIdHTTPが悪さをしているのか、たまに全く通信が出来なく
なることがある。もっとスマートな手段は無いのだろうか...
0031282007/01/23(火) 17:11:41
>>29
ありがとうございました!
0032デフォルトの名無しさん2007/01/23(火) 18:39:23
ファイル転送のプログラム作ってるんだけど、Indy使うか標準のSocket使うか迷ってます。
どっちがいいんでしょうか?
0033デフォルトの名無しさん2007/01/23(火) 19:21:18
>>32
俺ならパッと見、簡単な方を使う
0034デフォルトの名無しさん2007/01/23(火) 19:25:22
>>30
> Indyではタイムアウトが無くて、応答無しの時の処理が超無駄使い。

最近のIdHTTP にはreadTimeout があると思うけど、駄目なの?
0035デフォルトの名無しさん2007/01/23(火) 19:31:41
じゃあ俺は共有かけてBlockWriteを使う。

けど、やっぱりSocketかな
0036デフォルトの名無しさん2007/01/23(火) 19:32:24
俺なら面倒だからindy使う
0037デフォルトの名無しさん2007/01/23(火) 20:07:59
test.txtというファイルの1行目に「〜〜〜」、
2行目に「〜〜〜」、3行目に「〜〜〜」.....

というように、ファイルに書き込みをするソフトを
作りたいのですが、書き込む方法が分かりません。

教えてください。お願いしますm(__)m
0038デフォルトの名無しさん2007/01/23(火) 20:14:59
TStringList
0039302007/01/23(火) 20:59:56
>>34
ほほー
Delphi6標準のには無かったんでIndyの新しいのを探してみるよ
0040デフォルトの名無しさん2007/01/23(火) 21:00:34
ファイルの日付の取得を行いたいのですが、
Data := FileDateToDateTime(FileAge);
とやると、FileAgeが使用を推奨されないうんぬんとwarningがでます。
では、何が推奨されるのでしょうか?
ヘルプにも書いてありません。困っています。

{$WARN SYMBOL_DEPRECATED OFF}も負けを認める用でいやなのですが・・・
0041デフォルトの名無しさん2007/01/23(火) 21:38:31
FindFirstをしてTSearchRec.Timeを見れば?
0042デフォルトの名無しさん2007/01/23(火) 21:46:31
deprecatedじゃない方のFileAge使えばいいじゃん
0043デフォルトの名無しさん2007/01/23(火) 22:36:09
>>42
ですね。サンクス。
Helpに記述が無いのは、Borlandクオリティってやつですか?
とりあえず、返り血がTrueなら、成功だろうか
0044322007/01/24(水) 00:05:02
皆さんありがとうございます。
今はSocket使ってるんですが、不安定なんでIndyにしようかな。
ブロッキング接続でエラーでるんですよね。なのにSleep入れてやったら出なかったりと、
かなり不安定なんです。
0045デフォルトの名無しさん2007/01/24(水) 01:10:11
socketのブロッキング接続なら
ttp://www.ipc.hokusei.ac.jp/~z00104/delphi/socket.html
とか参考になるけど
あと送信の方もスレッドにしないとその間何もできんよ
0046322007/01/24(水) 03:30:43
ありがとうございます。
ttp://www.ipc.hokusei.ac.jp/~z00104/delphi/thread.html
ここの通りに書いていったんですが、エラーでるんですよね・・・
メモリの書き込みエラーとかが。
0047デフォルトの名無しさん2007/01/24(水) 06:09:08
ローカルでやってるんなら
送信ファイルパスと受信ファイルパスが同じだと書き込みエラーになるよ
パスが同じなら同じファイル名でもね
0048デフォルトの名無しさん2007/01/24(水) 07:53:14
DMonkey付属のもよいよ
これで君のソフトもIrvineなみ
0049デフォルトの名無しさん2007/01/24(水) 10:28:34
AquesTalk.dllを使ってテキストを音声にし、それを保存しようと
しているのですが、保存部分のみどうしても分かりません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:18
1年ぐらい前からプログラミング勉強しだして、今度はDelphiをやってみようと思って色々調べてみた。
Turbo Delphi
Turbo Delphi for .NET
Delphi 6
無料版でこの3つかな?
で、この3つがどう違って、何を入れたらいいのかわからなくて困ってるんだ。
誰か軽い解説&お勧めplz。
0051デフォルトの名無しさん2007/01/24(水) 18:52:23
>>50
Turbo Delphi Explorer
最新版だが、少々、動作不安定。DBアプリを作れる。商用アプリも可。
コンポーネントを追加できない(裏技あり)

Turbo Delphi for .NET
Delphi WIN32のソースコードをそのまま.net化できる。

Delphi6
2001年版。DBアプリは作れない。商用不可。
コンポーネントを追加できる。
0052デフォルトの名無しさん2007/01/24(水) 19:07:05
zipの圧縮解凍をしたくて下のサイトの方法を試したのですが
ttp://oto.chu.jp/kujira/text/delphi/archive.htm

致命的エラー ファイル'unit_windows_api.dcu'が見つかりません
というエラーが出ます。
このエラーを回避する方法を教えて欲しいです。
0053デフォルトの名無しさん2007/01/24(水) 19:09:11
pasをプロジェクトに登録するだけじゃないの?
0054デフォルトの名無しさん2007/01/24(水) 19:23:00
>>52
ライブラリパスの場所に
unit_windows_api.pasを置く
0055デフォルトの名無しさん2007/01/24(水) 19:36:19
>>50
とりあえず全て無償版という前提で。お勧めの順番は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:35
前スレの話題ですが
http://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
Turboはヘルプが完全に日本語化されてないので初心者にはちょっとね
フリーカーソルも慣れればかえって使いやすいもんだし
0058デフォルトの名無しさん2007/01/24(水) 20:24:24
Delphi6を使ってます。
バイナリエディタを作ってみたいんですが、バイナリデータをTMemoryStreamなどで読み込んだあと、そのバイナリを表示する方法がわかりません。
どのようにすればいいですか?
0059502007/01/24(水) 20:32:17
>>51 >>55
ありがと。
スレ見ててもDelphi6の話題が多いし、初心者にもいいみたいだしDelphi6入れる事にします。
0060デフォルトの名無しさん2007/01/24(水) 20:38:35
>>58
何が聞きたいのかがいまいち分からんが、
Formatとかで1バイトずつ16進に直してStringGridとかに表示していけばいいんでない?
0061582007/01/24(水) 21:03:10
ありがとうございます。
とりあえずFormatをググって使い方を調べます。
0062デフォルトの名無しさん2007/01/24(水) 21:15:14
DrawGrid使って自分で描いた方が速いと思う。
0063デフォルトの名無しさん2007/01/24(水) 21:58:43
>>49
これ面白そうだな。
フリーでアクセント付けれるのって他にあるんかな。
とは言うものの俺もわかんね。すまんorz
0064デフォルトの名無しさん2007/01/24(水) 22:19:18
>>49
サンプルを見ると
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:34
>>49
Size 引数は int へのポインタだよ。
(Koe: PChar; ISpeed: Integer; Size: PInteger)
0066デフォルトの名無しさん2007/01/24(水) 23:58:38
> size にエラーコードが設定される。
なので
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:18
フォーム上にラベルのようなものを貼って、それをクリックしたら通常のブラウザ(IEなど)が開くようにするのってどうすればよいですか?
0068デフォルトの名無しさん2007/01/25(木) 00:21:29
>>67
shellexecute delphi - Google 検索
http://www.google.co.jp/search?hl=ja&q=shellexecute+delphi&lr=lang_ja
0069デフォルトの名無しさん2007/01/25(木) 00:23:43
>>68
ありがとうございます。
0070デフォルトの名無しさん2007/01/25(木) 04:07:03
IndyのTCPServerの、Readbufferで取得できたサイズを知る方法がわかりません。
どうすれば取得できますか?
0071デフォルトの名無しさん2007/01/25(木) 07:18:03
質問です
exe等からアイコンを抜き出してSpeedButtonに張り付けて使っていたのですが
アイコンの左上1ドットの色で透過されないようにする方法があれば教えてください
0072デフォルトの名無しさん2007/01/25(木) 07:23:05
DelphiがWindowsVistaで文字化け?

みたいなサイトを目にしてしまいました。
深刻なんでしょうか?文字化けを克服したバージョンのリリースの予定っていつ頃なんでしょうか?
0073デフォルトの名無しさん2007/01/25(木) 07:49:34
デュアルブートにしてXPとVista使いわければ?
0074492007/01/25(木) 08:50:57
>>64-66
ありがとう!参考にして以下のようにやったらできました。
今までポインタ自体全くわからなかったけどなんとなく前に進めそうです('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
>>72
そのサイトのURLは?
0076デフォルトの名無しさん2007/01/25(木) 11:44:01
>>75
忘れちゃったけど、Unicode関係なのか「Vistaになって新たに追加された文字」(それ以前の開発環境でのソフトでは表示できない!?)みたいなことが書いてあったと思う。
0077デフォルトの名無しさん2007/01/25(木) 11:51:33
>>72
Delphi じゃなくて、フォントの問題でしょ。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061221/257533/
0078252007/01/25(木) 12:02:19
>>26>>27
ありがとう。
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:13
全部書いてあるじゃん
http://www31.ocn.ne.jp/~pz/delphi/pzconv/TPzConv.htm
0080デフォルトの名無しさん2007/01/25(木) 13:43:51
質問です。
ClientSocketで複数のサーバーに同時接続というのは無理でしょうか?
0081デフォルトの名無しさん2007/01/25(木) 14:07:03
>>80
やったことないんで想像で書くけど、
コンポーネントを複数おいたらできない?

一個のコンポーネントでは無理。接続中にアドレスとかポートとか書き換えれないから。
不特定多数に繋ぐならコンポーネントの動的生成じゃない?
0082デフォルトの名無しさん2007/01/25(木) 14:24:08
>>78
普通に、Delphiの使い方勉強しましょうよ・・・
0083デフォルトの名無しさん2007/01/25(木) 14:31:55
>>81
動的生成でやってみます。
ありがとうございました。
 
0084802007/01/25(木) 16:46:05
もう1つ質問を・・
動的生成数を変数intで管理していて

ClientSocket1
ClientSocket2
ClientSocket3


となるとき
生成時に生成数+1の変数を書きたいのですが

ClientSocket[ ? ] = TClientSocket.Create;

の[ ? ]にはどんな風に書けばよいのでしょうか・・
0085デフォルトの名無しさん2007/01/25(木) 18:03:42
ちょいと、質問を。

TListみたいなデータ構造で、オブジェクトプールのように、
クラス名を渡して、あらかじめオブジェクトを生成してもらう汎用的なプールを作ろうとしています。

そのときに、クラス名を渡して、生成してもらう、という処理が上手く行きません。

TObjectのCreateが、virtualでないため、
THogeClass = class of TObjectとして、プールに型名を渡しても
渡した型のCreateが呼べません。

プール用にCrateをvirtualにしたクラスを定義して、登録するデータはそれを継承するという方法も
ありますが、そうすると任意のクラスを登録できるわけではなくなります。

何かよい方法はありませんでしょうか?
0086デフォルトの名無しさん2007/01/25(木) 18:04:11
テンプレートが使えればすむのですが、使えないので・・・orz
0087852007/01/25(木) 18:29:34
とりあえずは、オブジェクトを生成するメソッドのポインタを渡して、
そのポインタから呼び出して生成してもらうようにしていますが、
もっとスマートな方法はないだろうか?
(まあ、こちらの方が汎用性は高いですが・・・)
0088852007/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:44
そもそもコンストラクタの型が一定ではないのだから、無理な話。
0090デフォルトの名無しさん2007/01/25(木) 19:43:52
>>84
Delphiの基礎ちゃんと勉強したか?

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:27
>>90
forの初期値が0なら
for ix := 0 to 生成したい数 - 1 do
でしょ

>>84
配列の数が3以上に定義されているのなら[4]
0093デフォルトの名無しさん2007/01/25(木) 21:31:39
>>91
これか?
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=063375
VCLの内にステップインする方法も書いてある
0094デフォルトの名無しさん2007/01/25(木) 23:53:17
Delphiのクラスには静的コンストラクタがないようですが、
クラスフィールドは自動的に0やnilで初期化されるのでしょうか?
それとも他のタイミングで手動で初期化する必要がありますか?
0095デフォルトの名無しさん2007/01/25(木) 23:57:14
>>94
> クラスフィールドは自動的に0やnilで初期化されるのでしょうか?

YES
0096デフォルトの名無しさん2007/01/26(金) 00:03:14
>>91
プロジェクトのオプションでデバッグ版DCUを使うにチェック入れてみたら?
0097デフォルトの名無しさん2007/01/26(金) 00:08:32
>>94
ついでにいうと同じくヒープに確保されるグローバル関数も初期化される。

一方スタックを使い回されるローカル変数は初期化されない。
0098デフォルトの名無しさん2007/01/26(金) 00:09:31
自ら修正

誤:グローバル関数
正:グローバル変数
0099942007/01/26(金) 00:13:00
>>95,97
ありがとうございます。
0100 ◆XcB18Bks.Y 2007/01/26(金) 06:37:39
>>84
コンポーネントを動的にいくつも追加する場合は配列かリストオブジェクトを使います.
いずれの場合も生成数を自分で管理する必要はありません.
ここではリストオブジェクトのひとつ TComponentList クラスのオブジェクトを使う例を.

○宣言
 FClientSockets: TComponentList;

○生成,追加
 FClientSockets.Add(TClientSocket.Create(self)); // ソケットコンポを1個生成してリストに追加

○使う(例)
 TClientSocket(FClinetSockets[2]).Open; // 3番目のソケットを接続(最初が0番になる)

リストオブジェクトもオブジェクトなので生成と廃棄が必要です.
0101デフォルトの名無しさん2007/01/26(金) 10:23:43
IDEなど設計時に
Memoコンポーネントなどを配置し実行時にその機能を使える処理を
コード側からやるにはどのように記述すれば良いのでしょうか?

具体的にはボタンを押すと
パネルにMemoが出現するプログラムをつくりたいのです

どうかご教授よろしくお願いします
0102デフォルトの名無しさん2007/01/26(金) 10:50:01
MDI子フォームを整列させるコードってあるんでしょうか?
0103782007/01/26(金) 11:14:30
>>79>>82

できました!!ありがとうございます。
typeにPzConv1: TPzConv;を書き忘れてました。
みなさんに頼りすぎました。すみません。
0104デフォルトの名無しさん2007/01/26(金) 11:55:14
>>102
TileメソッドやらCascadeメソッドがあるがな・・・
それか標準アクションにも用意されてるがな・・
>>100
>>84の元の質問の答えになってないがな・・
0105デフォルトの名無しさん2007/01/26(金) 12:05:02
>>101
とりあえず、設計時にMemoのVisibleプロパティをFalseにして、
実行時にボタンが押されたらVisibleプロパティをTrueにすればいいんじゃまいか??
ボタンが押された時の処理はボタンのOnClickイベントに書けばいいがな・・
01061022007/01/26(金) 13:01:55
>>104
出来ました。
有難うございます。
0107デフォルトの名無しさん2007/01/26(金) 13:17:29
>>101

>>105の方法がお手軽でヨロシ
設計時にコンポーネント置くのは嫌だってんなら
procedure TForm1.Button1Click(Sender: TObject);
var
 objMemo: TMemo;
begin
 objMemo := TMemo.Create(Panel1);
 objMemo.Parent := Panel1;
end;
0108デフォルトの名無しさん2007/01/26(金) 15:23:31
おい、2005はVISTAで使えるのか?
0109デフォルトの名無しさん2007/01/26(金) 15:48:59
2006 と同じだと思われ。
0110デフォルトの名無しさん2007/01/26(金) 16:15:11
Delphiで遊んでるものにはつまんない、さびしい
0111852007/01/26(金) 18:06:55
とりあえず、>>87のようにこんな形で切り抜けたが・・・

interface
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;
01121012007/01/26(金) 19:07:18
>>107
できました!

ありがとうございました。
0113デフォルトの名無しさん2007/01/26(金) 21:03:22
HTTPリクエストとレスポンスヘッダを見たいんですが
どうすりゃいいんでしょうか
0114デフォルトの名無しさん2007/01/26(金) 21:36:10
>>113
他のアプリのを見たいのなら、ディープな部分のWindowsの知識が必要。
ぱぱっと作れるような簡単なものでは無い。
内容を見るだけなら、そういうツールを探したほうがいい。

自作アプリのならば、コンポーネントで見方が違うから
何を使っているのか書いてくれないと確認するのが面倒。
0115デフォルトの名無しさん2007/01/26(金) 23:51:30
WinPcapを使用したパケットモニターの作成
ttp://codezine.jp/a/article/aid/126.aspx
0116デフォルトの名無しさん2007/01/27(土) 00:26:24
winsock2.0以降ならRAWソケットで簡単にできるような
0117デフォルトの名無しさん2007/01/27(土) 01:39:39
>113
これが定番かな?
http://www.wireshark.org/
0118842007/01/27(土) 08:34:54
>>90,>>92,>>100
遅くなりましたがありがとうございました
精進します
0119デフォルトの名無しさん2007/01/27(土) 13:20:19
TStringListって2Gまでの情報が入れられると聞きましたが、2Gを越えるかどうかのチェックってどうやってるんですか?
保持してる情報量が2Gを越えたら新しくAddさせない、とか。

気にしなくても勝手にやってくれるんですかね?
0120デフォルトの名無しさん2007/01/27(土) 13:29:12
>>119
textプロパティの長さを調べるとかじゃダメなの? もっと性格に知りたいとか?
テストしてみたら?
2Gのファイルを用意するのはメンドイと思うからaddをループでもさせて。
0121デフォルトの名無しさん2007/01/27(土) 13:55:04
2Gあふれたらどうするの?

ってのは今俺も思った。
0122デフォルトの名無しさん2007/01/27(土) 14:12:49
>>119
4G食わせたら例外発生した気がする
0123デフォルトの名無しさん2007/01/27(土) 14:33:22
>119
正確にはプログラム本体+システム以外のDLLで使用しているコード、データの合計が
2GBを超えられない。でも物理メモリが2GB以上ないとスワップ発生しまくりで
その時点でシステムが不安定になるような気がする。
TStringListに関して言えば保持している文字列の中にユニークでないものもあるため、
正確な所要メモリってのはなかなか難しい。
while True do
begin
S.Add('TESTETSTTESTTEST'); // 16byte
end;
とかやっても文字列の実体は1つなのでね。増えるのはString型変数のみ。
間違ってもTextプロパティとか見るなよ?あれは手持ちの文字列をその場で連結するものだから。
0124デフォルトの名無しさん2007/01/27(土) 21:05:20
するってえと、ベテランの人たちでも2G溢れたときの処理はしてないのか?
ま、テキストで2Gって滅多とあるもんじゃないけどね。
でも作法的には違反のような気がするお。
0125デフォルトの名無しさん2007/01/27(土) 21:22:50
ヒープが2GBを超えられないんだから対策する必要がない。
0126デフォルトの名無しさん2007/01/27(土) 21:26:03
メモリーが2Gない
0127デフォルトの名無しさん2007/01/27(土) 21:52:27
>>124
2G行きそうな気配の時はファイル分割とかになるのが当たり前な設計で、
分割できない時は部分読み込みなんじゃない?

しかし、2Gのテキストファイルって何だろ?
DVD ISOをishかけたのぐらいしか思い浮かばん。
0128デフォルトの名無しさん2007/01/27(土) 21:53:23
>>126
仮想メモリ込みで?
0129デフォルトの名無しさん2007/01/27(土) 21:59:01
1G以上のオンメモリを使用するって、設計が間違ってないか?
0130デフォルトの名無しさん2007/01/27(土) 22:13:03
>>129
別にオナニーならいいんじゃないの?
0131デフォルトの名無しさん2007/01/27(土) 22:59:00
Vistaに対抗して無駄にメモリを食うプログラムの設計に勤しむスレはここですか?
0132デフォルトの名無しさん2007/01/27(土) 23:28:29
DBサーバーは平気で4G位喰う。
0133デフォルトの名無しさん2007/01/27(土) 23:48:06
ギガ級のデータをStringで行こうってのがそもそも間違いだろ
0134デフォルトの名無しさん2007/01/28(日) 00:37:56
:: MXS :: Delphi developer components
http://mxs.bergsoft.net/

MXSで、RibbonUIを実験しているね。
フリーででそう・・wktkする
0135デフォルトの名無しさん2007/01/28(日) 04:55:13
>>133
そりゃそうだが、テキストエディタなんかだと、通常はStringで足りるわけだが、
まれにギガデータをぶち込んじまうやつがいる。

ギガデータが普通なDBとかなら、対応を考えるけど、
通常キロバイト、せいぜい数メガバイト級しか扱わないツールだと、
ギガデータには対応しないっていう実装しても、無理はないと思う。

使用頻度の低い機能や使い方のために、工数かけても無駄だしね。
落ちるのが許されないってんなら、対応するしかないけど。
0136デフォルトの名無しさん2007/01/28(日) 04:58:03
まともな例外ハンドリングしていれば何の問題もないわけだが
0137デフォルトの名無しさん2007/01/28(日) 07:52:38
>まともな例外ハンドリング

どのイベントでどう実装するもんなんですか?
0138デフォルトの名無しさん2007/01/28(日) 09:57:22
クレーマーぎみの奴が故意にデカイ情報入れたりするんじゃないかな
0139デフォルトの名無しさん2007/01/28(日) 12:57:39
自作のアプリにログをとる機能つけたけど、
TMemoにaddしてるだけだから、
可能性としては2G行けるな
1時間で9KBぐらいなんだけど。
(保存はしてない)
0140デフォルトの名無しさん2007/01/28(日) 13:17:11
TMemo、TStringList、TListBox等にずーっとADDしてみ?
数万行を越えると、目も当てられないくらい、1行の追加時間が遅くなる。

100MB越えるあたりで使い物にならないね。
0141デフォルトの名無しさん2007/01/28(日) 13:50:43
仮想ツリービューってどうやるんですか?
0142デフォルトの名無しさん2007/01/28(日) 13:54:35
Virtual TreeViewコンポーネントを直訳するとそうなる
0143デフォルトの名無しさん2007/01/28(日) 14:31:30
>>139
それ、ログの取り方としては間違ってる。

ログって何かあったときに調べるためのものなのに、
オンメモリで保存しといて、マシンがハングアップしたらどうするつもりだよ。

随時吐き出せ。

もし、そういう状態を考慮しないにしても、2Gいっぱいは使えない。
せいぜい実用になるのは数100メガくらい。
それも、たっぷりメモリーを積んだマシンでだ。

データの状態にもよるけど、管理用のデータ領域が場合によっては
実際のデータに匹敵するくらいのメモリーを消費する場合もあるしね。
0144デフォルトの名無しさん2007/01/28(日) 15:25:46
みんな64bit版の話してるの?
0145デフォルトの名無しさん2007/01/28(日) 16:36:50
つまり普通のツリービューでの実現は無理?
0146デフォルトの名無しさん2007/01/28(日) 18:17:35
で、例外ハンドリングのやり方は?
0147デフォルトの名無しさん2007/01/28(日) 19:32:42
>>146
try..except..end;
0148デフォルトの名無しさん2007/01/28(日) 20:36:03
try
finally
end;
0149デフォルトの名無しさん2007/01/28(日) 20:37:44
finallyがハンドリングできない。
0150デフォルトの名無しさん2007/01/28(日) 20:38:50
try
 try
 
 except
 
 end;
finally

end;
0151デフォルトの名無しさん2007/01/28(日) 23:39:58
>>150
この書き方たまにやるんだけど、どうなんでしょうか?悪くない?
0152デフォルトの名無しさん2007/01/28(日) 23:49:41
>151
必要ならいいんじゃない?except...endが空だったりするとダメダメかもしれんが。
0153デフォルトの名無しさん2007/01/28(日) 23:53:34
この書き方をしないといかん時だってあるさ。
except節で全ての例外を正しく補足・処理できるとは限らんのだから。
0154デフォルトの名無しさん2007/01/29(月) 00:06:45
finally〜endは例外が起きなくても実行される。そればかりかtry〜finallyの途中でExitしても実行される。
0155デフォルトの名無しさん2007/01/29(月) 00:11:15
exceptとfinallyを入れ子にしないといけない(一つのtryで処理できない)
のは言語設計の失敗だろって書き込みを前に見たような気がする
0156デフォルトの名無しさん2007/01/29(月) 00:15:14
一緒に書ける言語のが少数派じゃね?
0157デフォルトの名無しさん2007/01/29(月) 00:28:44
CreateしたものをfinallyでFreeするようにして
なおかつ例外を捕らえたいって時にやるんじゃないの?
0158デフォルトの名無しさん2007/01/29(月) 00:33:15
try
except
finally
end;
っていう書き方ができないって話でそ
0159デフォルトの名無しさん2007/01/29(月) 00:39:53
>>158
スマン勘違いしてたようだ
吊ってくる
0160デフォルトの名無しさん2007/01/29(月) 10:40:39
みなさん、バージョン情報ってどうしています?
プロジェクトオプションの使っています?

自分はソースの最初の方に定数で指定してやるのが好きですけど、
これってマナー悪いですかね。
職業プログラムじゃなくて遊びのプログラムなんですが。
0161デフォルトの名無しさん2007/01/29(月) 11:14:11
質問です。
TFontの情報をiniファイルに書き出そうと思っているんですけど、
Font.StyleのようにBooleanが複数の項目はどうやって保存してやればいいんでしょう?
項目ひとつひとつ保存ですかね?
0162デフォルトの名無しさん2007/01/29(月) 11:43:52
>>161
TypInfoをusesしてGetOrdProp関数の戻り値でも使えばいいんじゃまいか・・・
I := GetOrdProp(Font, 'Style');
// Iniへの書き込み

読み出しは逆のSetOrdProp関数でどうぞ。
0163デフォルトの名無しさん2007/01/29(月) 11:53:53
>>162の続き
それか、GetPropValueとSetPropValueでもいいかもな。第3引数のPreferStringsを変えれば
値を[fsBold]みたいな感じでもIniファイルに手軽に書き込めるはずだがな・・・
0164デフォルトの名無しさん2007/01/29(月) 13:07:54
質問させてください、ファイル検索の
FindFirst がエラーコードを返した時は FindClose が自動的に呼び出されるので
そのあと FindClose を呼び出すと2重になってバグを起こすと聞いたんですが
FindNext がエラーコードを返した時も FindClose が自動的に呼び出されるんですか?
もしそうなら FindNext でファイル検索して行って、もうこれ以上ない時に FindClose を
呼び出す必要はないんですか?
0165デフォルトの名無しさん2007/01/29(月) 13:47:05
カラーダイアログで選択した色を16進数のカラーコードに直したくて、
下記のソースを見つけました。

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
>>165
その自作プロジェクトのどっかでCopyって関数定義とかしていない??
0167デフォルトの名無しさん2007/01/29(月) 14:18:51
>>164
VCLのソースを見る限りじゃFindNextに失敗しても
FindCloseは呼び出されない
なので必要ないかと

>>165
どっかでCopyって名前の自作関数定義してない?
System.Copyと関数名にユニット名を付ければOK
01681642007/01/29(月) 14:24:55
>>167
ありがとうございましたw
0169デフォルトの名無しさん2007/01/29(月) 14:25:52
レスが被ったからって笑うなよ
チンコは被ってないぞw
0170デフォルトの名無しさん2007/01/29(月) 14:27:16
>>166,>>167

的確な即レスありがとうございます!!
Copyって自作関数定義してました;
System.Copyとすることで解決しました。
本当にありがとうございました。
0171デフォルトの名無しさん2007/01/29(月) 16:22:31
>>136
先生!

して、
try
except
finally
end;
の間にはどう書けばいいんでしょうか?
0172デフォルトの名無しさん2007/01/29(月) 16:25:21
 try
  try

  except

  end
 finally

 end;
0173デフォルトの名無しさん2007/01/29(月) 16:34:21
TBitmapをA4サイズの用紙に綺麗に印刷したいんですが、HeightとWidthの設定はどうすればいいでしょうか?
0174デフォルトの名無しさん2007/01/29(月) 16:34:50
no
 no
  ドラえもん 泣かない
 想い出
作ったら?;
0175デフォルトの名無しさん2007/01/29(月) 16:52:31
思い出したんだけど、便乗して質問していいですか?

用紙サイズ(A4とかA3とか)を指定するとそれに丁度いいビットマップのサイズになるようにできないか悩んだことがあったんですが、
インチあたりのピクセル数がどうとかこうとかで、結局わからないまま技量不足と断念したことがあったんですが、取得できる方法を知ってる人はいませんか?
0176デフォルトの名無しさん2007/01/29(月) 16:59:53
dpiを求めればいいのかな?
GetDeviceCaps辺りで取得できたと思う。
0177デフォルトの名無しさん2007/01/29(月) 17:12:55
>>175
dpiの基礎から

dpiは1インチ当たりのドット数。
印刷したい物の辺の長さ(インチ)×必要とするdpi=必要とするドット数
1インチ=25..4mm

ちなみにフォントの1ポイント=1/72インチ。

>>173
綺麗にの条件がわからない。
A4 72dpiのやつをA4 300dpiでも綺麗に印刷したいとかいうなら、
むっちゃ難しい技術になる気がする。完成したら金取れるソフトになると思うよ。

delphiのことはよくわかんないから他の人に。
ホントにめんどくさい。メートル法つかえよ欧米人。
0178デフォルトの名無しさん2007/01/29(月) 17:21:40
Delphi習いたての初心者です。Turbo Delphiを使っています。
画像のデータとテキストのデータを一つにしてファイルに保存するってことはできるんでしょうか?
0179デフォルトの名無しさん2007/01/29(月) 17:25:20
>>176-177
レス、ありがとうございます。

>1インチ=25..4mm
こういうのがあって二の足踏んじゃったんですよね。
写真みたいに鮮明に、じゃなくて、文字がブレない程度でよかったんですが、
Metafileっての使ったらどうかと、でもMetaFileの資料が少なくて断念しました。
0180デフォルトの名無しさん2007/01/29(月) 17:30:55
dpiの話だけど、(delphiの知識じゃなくて余談ですが)
Windowsは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
>>179
文字と画像は綺麗に見える最低限のdpiが違うので、
すでに画像にビットマップとして貼られた文字を綺麗に出すのは難しい。
画像の画素数がむっちゃたかけりゃいいんだけど。

delphiはあんまり詳しくないんだけど、
画像が別にあってdelphiで文字を付け足すのなら、
ポイント数を高めにしてビットマップ化かクイックレポートなんじゃないかな?
0182デフォルトの名無しさん2007/01/29(月) 18:07:17
>>178
TStream系(TMemoryStream、TFileStreamなど)を使って、逐次書き込みかな?

ヘッダーと本体を用意して、書き込み時は、
ヘッダー部には、サイズと保存位置を計算して書く。
本体部は、各ファイルを書く。

読み込み時は、ヘッダー情報を元に、本体部から読み込み
0183デフォルトの名無しさん2007/01/29(月) 19:08:21
画像印刷のハードルって高いですねorz
初心者はわかり始めるまで、我慢… かな?
0184デフォルトの名無しさん2007/01/29(月) 20:05:54
Socket通信のアプリを書いているんですけど、
大きなデータをやり取りするのはどうしたらいいのですか?

Sendtextで送るとある程度の長さで切れてしまいます。

SendStreamかなって思ったんですけど、送り方と受け取り方が判りません。
0185デフォルトの名無しさん2007/01/29(月) 21:56:44
>るとある程度の長さで切れてしまいます。
TCPの使用上2回以上に分けて送受信されてるだけ。
全部受信し終えてから次に逝け。
0186デフォルトの名無しさん2007/01/29(月) 22:39:15
>>160
Application.MessageBox使ってる
オヌヌメ
0187デフォルトの名無しさん2007/01/29(月) 23:02:12
>>186
0188デフォルトの名無しさん2007/01/30(火) 04:32:08
表示の問題と勘違いしてるんじゃないかな・・・
0189デフォルトの名無しさん2007/01/30(火) 21:52:03
加速器(AlquadeLiteみたいな)への
対策はどのようにすればよいのでしょうか?
Timerで数秒分現在時刻を取得しておいて計算させれば
うまくいくかなぁとか思っているのですが、いまいちよく分かりません。
0190デフォルトの名無しさん2007/01/30(火) 22:05:59
>>189
むかし、PC98のBASICとかでゲーム作っていた時の記憶だけど、
毎回、計測用ループが1秒間に何回回るかでウェイトの値求めていたけど
そんな感じでどう?
0191デフォルトの名無しさん2007/01/30(火) 22:07:24
>>184
http://www.ipc.hokusei.ac.jp/~z00104/delphi/thread.html
0192デフォルトの名無しさん2007/01/30(火) 22:16:05
つまり同じ秒数を何個吐くかを計算すればいいのですか?
Timerの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
>>192
ちょっと違う。
気をつけて欲しいのはこの辺の設計思想は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:25
TEXTfileを読み込み、
N行目が1だったら
ウインドウの(N*100,100)の座標に
1辺10の正方形を表示、
N行目が2だったら
ウインドウの(N*100,200)の座標に
1辺10の正方形を表示するという
プログラムの作り方がよく分かりません。

教えていただけないでしょうか?
0195デフォルトの名無しさん2007/01/30(火) 23:55:37
>>194
ttp://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
>>194
宿題かな!頑張れ〜。
ヒントだすから、googleでサンプル検索したり、ヘルプ見たりして頑張れ

・TStringList
・TImage.Canvas.Rectangle
0198デフォルトの名無しさん2007/01/31(水) 00:35:19
>>192では無いのですが、逆に加速器の仕組みってどうなってるんでしょうか?
それがわかれば理解したうえでの対策法が練れると思うんですが
0199デフォルトの名無しさん2007/01/31(水) 09:30:26
ファイルからテキストを Read したときに、文字型を数値型の時みたいに
1行をタブ区切り単位で Read 出来ませんか?
0200デフォルトの名無しさん2007/01/31(水) 11:06:48
すみません質問させて下さい。
Delphi6でTServerSocketを使い多接続可能なサーバープログラムを作っているのですが
何度か接続を繰り返すとサーバーが応答しない状態になってしまい困ってます。
既に接続してるクライアントとの通信は問題なく行えるのですが
新しい接続要求が送られてこない?状態です。
一体何が問題なのでしょうか・・・宜しくお願いします。

ブラウザなどで、http://localhost:6900 に接続を繰り返すと問題が発生します
0201デフォルトの名無しさん2007/01/31(水) 11:07:29
TMyServerThread = class(TServerClientThread)
public
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
>>198
想像だけど、windowsではVSYNC割り込みが無いので
インターバルタイマーを使ってるものが多いのだろう
WM_TIMER メッセージを監視して、このメッセージを増やしたり減らしたりしてるのでは?
0203デフォルトの名無しさん2007/01/31(水) 12:17:44
>>188
うはっ!

orz
0204デフォルトの名無しさん2007/01/31(水) 14:02:59
>>199
TStringList
を調べてみて。

自分はこれを知らずに、ループで文字列をチェックして分解するサブルーチン作って、今も現役。
0205デフォルトの名無しさん2007/01/31(水) 14:33:41
Delphi5です。ソースの書き方について質問させてください。
関数AはプロシージャB,Cを呼び出す。これを実現するにはプロシージャB,Cを
先に記述してから、その下に関数Aを書くと教わりました。
C言語のプロトタイプ宣言(?)のような書き方はDelphi5にはないので
しょうか?
0206デフォルトの名無しさん2007/01/31(水) 14:49:31
>>205
あるよ
Interface節に書けばいい
function hoge(a:integer):integer;
とかなんとか
0207デフォルトの名無しさん2007/01/31(水) 14:55:10
>>206
希望通りにいきました!ありがとうございます。(m_ _)m
0208デフォルトの名無しさん2007/01/31(水) 15:04:40
>>193
お礼が遅くなりました。
試してみます。ありがとうございました
02091992007/01/31(水) 15:15:25
>>204
そんな方法があったなんて、ありがとうございましたw
0210デフォルトの名無しさん2007/01/31(水) 15:44:47
ところで、加速器って何?
0211デフォルトの名無しさん2007/01/31(水) 17:08:55
FPSをいじるツール
0212デフォルトの名無しさん2007/01/31(水) 17:57:37
FPSだけではないな
色んな形態あるんだろうけど
一般的に加速器といったらゲームを改造するツール

具体的には
「動く」とか「攻撃する」といったアクションを連続で実行するときの
次までの待機時間を任意に短くし
通常の○倍の効率を確保するためのプログラム
0213デフォルトの名無しさん2007/01/31(水) 18:24:08
そういう事するのって、APIフックとかインジェクションとか必要なのかな?
0214デフォルトの名無しさん2007/01/31(水) 22:47:01
Delphi7のADOConnectionで、MSSQLServer2005 Express Editionと接続できますか?
0215デフォルトの名無しさん2007/01/31(水) 23:01:37
時間関係の関数、コールバックをごまかすのにフックは必要
インジェクションは知らない。
フックが掛けられたかを監視すれば良いんじゃないかな?

ネトゲだとサーバーにクライアントの経過時間を送りチェックしたり
モニターの垂直同期とクライアント経過時間をチェックをしてるのもある。
0216デフォルトの名無しさん2007/01/31(水) 23:05:10
>206
それはちょっとナニだな。ユニット外から呼び出す必要がないならimplementation部でforward宣言すべし。
Cのプロトタイプ宣言に(概ね)相当する。
function FuncA(Value: Integer): Integer; forward;
こういうやつをimplementationからFuncAの呼び出しをする関数の直前まで(フツーはimplementationの
後ろあたり)に書いておく。
0217デフォルトの名無しさん2007/01/31(水) 23:43:42
>>214
うん
0218デフォルトの名無しさん2007/02/01(木) 01:09:29
来週からインターンでDelphiを使って
プログラミングをすることになりました。

恥ずかしながらプログラミングが何のことだかさえわからない状態です。
どうしてもインターン始まる前に慣れておきたいです。
インターンにおいてDelphiを使ってどんな課題が出されるのかわかりませんが、
現時点で私ができることがあったら教えてください。

お願いします。
0219デフォルトの名無しさん2007/02/01(木) 01:13:07
スラムダンクでも全巻読んどけ
0220デフォルトの名無しさん2007/02/01(木) 01:40:11
>>218
Delphi6でもダウンロードして”HALLO WORLD”からじゃね?
0221デフォルトの名無しさん2007/02/01(木) 01:44:39
>>220
ありがとうございます。
プログラム言語などは参考本などを見ながら
勉強するべきですか??
0222デフォルトの名無しさん2007/02/01(木) 03:01:45
才能がすべてです。
0223デフォルトの名無しさん2007/02/01(木) 04:03:33
>>220
英字が全て大文字っていうのが気持ち悪くなるぐらい英語を勉強するべきじゃないかな・∀・)"
0224デフォルトの名無しさん2007/02/01(木) 04:14:11
>>223
halloでもあってないことはないw
02252032007/02/01(木) 04:17:39
ところで、Application.MessageBoxを使っていると思われるメッセージボックスでTMsgDlgTypeのアイコン(!、×、i、?)が表示されてるのを見かけるんだけど、どうすればああなるの?orz
0226デフォルトの名無しさん2007/02/01(木) 06:08:52
それぞれ関数があったはず
0227デフォルトの名無しさん2007/02/01(木) 06:55:34
MB_ICONWARNING
MB_ICONASTERISK
MB_ICONQUESTION
MB_ICONERROR
0228デフォルトの名無しさん2007/02/01(木) 07:17:32
>>227
ktkr!
サンクス
0229デフォルトの名無しさん2007/02/01(木) 09:40:35
>>218
http://delwiki.info/?%A5%EA%A5%F3%A5%AF%2F%BD%E9%BF%B4%BC%D4
0230デフォルトの名無しさん2007/02/01(木) 12:29:03
>>229
ありがとうございます。
とりあえず「Delphi入門教室」から勉強していきます
0231デフォルトの名無しさん2007/02/01(木) 21:15:25
今日、Delphi 6 personalをinstallしたのですが、使用許諾コード取得が
できません。サーバーに接続しています。少々お待ちください。がでて、
しばらく待たせた後、サーバーが見つからないとエラーがでます。取得しないでも動くようですが、
使用許諾コードなしでも問題ないのですか?
0232デフォルトの名無しさん2007/02/01(木) 21:26:47
>>231
FAQだな

ttp://www12.plala.or.jp/mojo/Delphi/delphi6-1.html
0233デフォルトの名無しさん2007/02/01(木) 21:27:45
>>231
ttp://dn.codegear.com/article/33580
にもあった
0234デフォルトの名無しさん2007/02/01(木) 22:26:19
フォームが最小化されたことを通知するイベントってありませんか?

Resize・ConstrainedResize・CanResizeでは最小化したときにイベントが発生しなかったし、
WM_SIZEのメッセージハンドラを作っても最小化時にメッセージが飛んでこない・・・

環境はDelphi5 + WinXP Proです
0235デフォルトの名無しさん2007/02/01(木) 22:31:25
あるよ
0236デフォルトの名無しさん2007/02/01(木) 22:32:38
ありがとう
0237デフォルトの名無しさん2007/02/02(金) 00:29:22
>>234
TWMSysCommand CmdType SC_MINIMIZE
0238デフォルトの名無しさん2007/02/02(金) 02:54:10
>>232
Fuckだと。こんちきしょう。fuck u!!
0239デフォルトの名無しさん2007/02/02(金) 06:05:16
> 232,233
RESありがとうございます。が、Registraion Codeが分からないので
送られてきたメールにあったResgstration accountを入力して次の
stepに移りBDN accountありで送信したら画面が白くなったまま、一晩待って
見ましたが今も白いままでした。そこでBDN accountなしでいろいろ入力しても
送信すると白くなってずーとそのままです。Regsitration codeにRegistratin
acountを入力したのがいけなかったのでしょうか?
0240デフォルトの名無しさん2007/02/02(金) 10:22:33
本気で取り組む気があったら購入すべきだよ
0241デフォルトの名無しさん2007/02/02(金) 15:32:43
D7でクイックレポートで印刷ボタンを押したらダイアログを出してページ数とか指定してから印刷させたいんですが
どうしたらいいでしょうが。
デフォルトだといきなり全ページ印刷してしまってうっかり大量印刷の危険があるのでなんとかしたいです。
0242デフォルトの名無しさん2007/02/02(金) 21:39:39
>234
Delフサさんが回答してくれてます。こちらでどうぞ。
ttp://delfusa.blog65.fc2.com/blog-entry-39.html
0243デフォルトの名無しさん2007/02/02(金) 23:57:19
Delphi6ProにDirectXのコンポーネント「Quadruple D」インストールしたら
Delphi終了時にエラーが出るようになったけど、みんなそう?
他にもコンポーネント入れてるから相性とかあるのかな?
0244デフォルトの名無しさん2007/02/03(土) 00:39:15
Quadruple Dとは全然関係なく、Delphi自体不安定。
0245デフォルトの名無しさん2007/02/03(土) 01:19:07
FastMM でも使ってみたら、どうよ。
0246デフォルトの名無しさん2007/02/03(土) 05:01:11
>>243
Delphi6では、ならないよ。

BDS2006だと、Quadruple Dなんか入れなくても、終了時にエラーが出るようになるから、
気にならない。
0247デフォルトの名無しさん2007/02/03(土) 14:03:31
ListView なんですけど、行数を沢山読み込むとフリーズしてしまうんです。
やっぱり表示が可能な行数はマシンのスペックに依存しますか?
列ごとに文字数を何バイトまでと制限を付けたら、沢山の行数を表示することが可能になる
っていう機能とかありますか?
0248デフォルトの名無しさん2007/02/03(土) 15:29:47
君の書いた出来の悪いコードを晒しなさい。
優しいおにいさんが超高速にしてくれるでしょう。
0249デフォルトの名無しさん2007/02/03(土) 15:33:45
>>247
沢山じゃなくて、もうちょっと具体的に数値挙げたほうがいいよ
とりあえず、更新前にVisibleをFALSEにして更新後にTRUEにするとかやってみ
0250デフォルトの名無しさん2007/02/03(土) 16:17:15
>>248 >>249
こんな感じです、これで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:32
せめてbeginupdateくらい使おう。
02522472007/02/03(土) 16:20:16
すいません、ここ間違ってました

ver
STRING1,STRING2,STRING3,STRING4,STRING5: String;
ListItem: TListItem;
F: TextFile;
0253デフォルトの名無しさん2007/02/03(土) 16:46:51
たしか1項目追加するたびにソートが走ってた気がするから
ソートするなら初めSortTypeをstNoneにしておいて
全件読み終わってからstNone以外にしてソート。
僕はこれで少し早くなりました。
0254デフォルトの名無しさん2007/02/03(土) 16:59:42
ListView1.Items.BeginUpdate;
〜〜
〜〜
ListView1.Items.EndUpdate;

0255デフォルトの名無しさん2007/02/03(土) 17:26:48
1000件程度ならBeginUpdate/EndUpdateでいいけど、
10000件とかならVirtualListViewで。OwnerDataプロパティと
OnDataイベントを参照。Delphi付属のデモにもあったっけかな。
02562472007/02/03(土) 17:33:08
>>251>>253>>254
出来ました、読み込み時にスクロールバーがギュイーンと小さくなっていくのが無くなって
読み終わってからパッと表示されて快適になりました。
いまでは2000行以上読んでいます。
皆さん本当にありがとうございましたw
>>255
それ今度、勉強してみますw
0257デフォルトの名無しさん2007/02/03(土) 19:57:15
>読み込み時にスクロールバーがギュイーンと小さくなっていく

あるあるww
0258デフォルトの名無しさん2007/02/04(日) 08:48:20
すごく初級な質問なのですが
TStringGridで反転選択されいるセル範囲はどうやって取得するのでしょうか?
0259デフォルトの名無しさん2007/02/04(日) 08:51:58
すみませんageてしまいましたorz
02602582007/02/04(日) 10:02:06
解決しました
Selectionですね。
お騒がせしました。
0261デフォルト名無し2007/02/04(日) 12:06:00
TurboDelphiで、データベース関連のプログラムを作りたいのですが、
いいサイトが見つかりません。どこかいいサイトがあれば教えていただきたいです。
よろしくお願いします。
0262デフォルトの名無しさん2007/02/04(日) 14:15:39
>>261
なんのデータベースを使うかによるかも
その気になれば、TStringListでも組める
0263デフォルトの名無しさん2007/02/04(日) 18:42:40
TEditまたはそれに類する物で数値が入力されたときに右寄せ、カンマ区切りで表示したいんですが
どうすればいいでしょうか。
いくつかフリーのコンポーネントを使ってみたのですがソースが提供されないとかコードで代入すると
カンマ区切りにならないとかでちゃんとした物がみつかりませんでした。
0264デフォルトの名無しさん2007/02/04(日) 20:19:13
>>263
カンマ区切りで右寄せって、ハウスルールが濃そうな世界。
3桁どりを前提とするかで話が変わる気がするし。

自作推奨。
0265デフォルトの名無しさん2007/02/04(日) 23:57:51
>263
コードで代入するときだけ自前でカンマ区切りにすれば?ちゃんとしたものと
あなたが欲しいものはイコールではないのでしょう、きっと。
0266デフォルトの名無しさん2007/02/05(月) 00:24:43
>263
漏れが作ったコンポだが差し上げる
本来浮動小数点表示用だが通貨型でも使えたはず。
途中放棄したやつなので完全動作するかはわからない

ttp://jgard.hp.infoseek.co.jp/source/syobo0370.zip
0267デフォルトの名無しさん2007/02/05(月) 14:15:44
TPaintBoxで、描画した物をクリアする方法はあるのでしょうか?

また、TPaintBox内のスケールを変更するようなメソッドかプロパティはありますでしょうか?
(VBのPictureBoxで言う所の.Scaleメソッド)
0268デフォルトの名無しさん2007/02/05(月) 14:34:01
クリアはない。親コントロールの色でFillRectするんだな。
02692672007/02/05(月) 14:39:29
>>268
ありがとうございます。
それでやってみます。
0270デフォルトの名無しさん2007/02/05(月) 14:40:49
TPaintBoxはデバイスコンテキスト用意するけど
後は勝手にどうぞってスタンス
02712672007/02/05(月) 15:06:36
デバイスコンテキスト?

検索してみたら、描画に関するページに辿り着けましたが
「論理単位」とやらを変更すれば良いのでしょうか?
0272デフォルトの名無しさん2007/02/05(月) 15:11:07
いや、だからTPaintBoxにクリアするメソッドは無い

デバイスコンテキストは簡単言えば描画エリアって意味
線とか画像を描く場所は提供するけど他は全部自分でやってねってこと
描画もクリアも保存も何もかも
02732672007/02/05(月) 15:14:22
>>272
いや、クリアに関してはFillRectを使用してみます。

問題はスケールの方。
02742632007/02/05(月) 17:43:33
>>264
自作しようと思ったのですがコンポーネント作る技能がないもので今調べてる最中です。
何かヒントを得られればと思い質問したしだいです。

>>265
> コードで代入するときだけ自前でカンマ区切りにすれば?ちゃんとしたものと
> あなたが欲しいものはイコールではないのでしょう、きっと。

カンマがTEXTに含まれてしまっては困るので表示だけカンマ区切りにする方法が
わかりませんでした。
ご存知でしたら教えてください。

>>266
ありがとうございます。
ですが、エラーが出て解凍できませんでした。
幾つかのソフトで試したのですがすべて未サポートのメソッドエラーでした。
0275デフォルトの名無しさん2007/02/05(月) 20:29:26
>>274
あなたが望んだ回答じゃないと思いますが

>カンマがTEXTに含まれてしまっては困るので表示だけカンマ区切りにする方法が
カンマを削るサブルーチンを作る

カンマ入力を簡略しつつ3桁づつ区切りたいなら
TEditを沢山置いて、3桁ごとにフォーカスを飛ばしてやるのは?

コンポーネント作成orカスタムコンポーネント使用ってのは、
効率化にはなるんだけど、
仕様変更やバグが出た時に致命傷になる。

技術的にムリとか枯れたルーチンを使うとか以外は
サブルーチンでやってしまった方がやりやすい

オブジェクト指向に逆行しているけど。
0276デフォルトの名無しさん2007/02/05(月) 20:46:11
オブジェクト指向のためにプログラミングしてるわけじゃないだろ。
0277デフォルトの名無しさん2007/02/05(月) 20:47:19
>>267
きみは TPaintBox を全くわかってない。
TImage でもつかったらいいよ。
0278デフォルトの名無しさん2007/02/05(月) 20:56:51
知ってたら聞かんわな
0279デフォルトの名無しさん2007/02/05(月) 21:29:50
>いや、クリアに関してはFillRectを使用してみます。

これは TPaintBox の描画の仕組みが分かってないことを示してる。
メッセージベースの再描画の仕組みを全く知らないらしい。

>問題はスケールの方。

全部自分でやるんだよ。TPaintBox とはそういうもの。
オフスクリーンのTBitmap に描画しておいて、自分で比率を計算して縮小拡大して
表示する。または表示用のTBitmapに転写する。それから再描画する。
0280デフォルトの名無しさん2007/02/05(月) 21:30:46
TImage なら自動でやる。もとVB厨ならこっち使え。
0281デフォルトの名無しさん2007/02/05(月) 21:37:48
Delphi6Personalを使用してます
通常、varで宣言しながら使われない変数があればコンパイル時に警告が出てきますが
出てこない場合があります(出るコードと出ないコードは異なる)
どうすると出なくなってしまうんでしょうか
0282デフォルトの名無しさん2007/02/05(月) 22:07:12
> どうすると出なくなってしまうんでしょうか

再構築しない場合は、全ユニットをコンパイルする訳ではないので
出ない場合があるのではないかと。
0283デフォルトの名無しさん2007/02/05(月) 22:39:52
>274
逆に考えるんだ。Textにはカンマを含み、そこに文字列を入れるときにはカンマを付加し、
文字列を取り出したらカンマを削除するんだ。
0284デフォルトの名無しさん2007/02/05(月) 23:24:32
>>282
単一ユニットのプログラムでも発生するので・・・
ユニット内の関数Aでは警告が出て、関数Bでは出ないとかそんな感じです
0285デフォルトの名無しさん2007/02/06(火) 00:02:58
理由はいろいろとありすぎて、再現手順をきちんと書かないと答えようがないと思うけど。
0286デフォルトの名無しさん2007/02/06(火) 00:41:30
亀田が、>266のコードは一応コンパイル通るぞ
拡張子をtxtからpasに変える必要があるようだが。
ちなみにD6Pro
0287デフォルトの名無しさん2007/02/06(火) 01:16:26
>>286
うちだと書庫が壊れていて解凍すらできないな
0288デフォルトの名無しさん2007/02/06(火) 03:45:15
Accessのmdbファイルを開いて、TADOTableにテーブル及びクエリを読み込んでいます。

そこで、開いているテーブルが、テーブルなのかクエリなのか判別することは可能でしょうか。
また、クエリの場合、クエリのSQL文を取得することは可能でしょうか。
0289デフォルトの名無しさん2007/02/06(火) 07:45:10
>>275
>コンポーネント作成orカスタムコンポーネント使用ってのは、
>効率化にはなるんだけど、
>仕様変更やバグが出た時に致命傷になる。

これは、他人の作成したソースの無いコンポーネントについてはそうかもしれないが
自作コンポーネントや、ソースがあるなら自分で対処出来るから、あたらないよ
何か問題がある都度、イベントを追加するなりして対処すればいいんだからさ。

あるいは、インターフェースを同じにして、中身だけ入替えればいいんだからさ

今回の場合だって、コンポーネント自作なら
1個のTEditからテキストへの読み書き+クリップボードコピー時の挙動に介入するコードで対処してもいいし
TEditを動的に作成してしまう作戦に出てもいい。
それを後から変更しても、インターフェースさえ同じならアプリのほかの部分は変更しなくていい。

だけど実際にTEdit並べる方法で作ってしまったら、最初はサブルーチンにまとまっていても、
改変してる間に、アプリ全体にその為のコードがちらばってしまうもの。 そうなってしまうと
誰も手を出せないスパゲッティアプリの出来上がりだ
0290デフォルトの名無しさん2007/02/06(火) 08:04:48
>>288
http://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
02912672007/02/06(火) 19:46:19
>>277-280
回答ありがとうございます。

TPainBox/TBitmap/TImageをもう少し勉強してみます。
0292デフォルトの名無しさん2007/02/06(火) 20:34:36
まったく空想に近いくらいのことを言ってるのかもしれないですけど、
配置したコンポーネントをそのまま(プロパティやらItemsも)ファイルに保存、読み込みする荒業ってありますか?
0293デフォルトの名無しさん2007/02/06(火) 21:39:24
>>292
TStream.ReadComponent/WriteComponent
RegisterClass
辺りを駆使すれば出来ると思う。
ただこれだとpublishedのプロパティしか読み書きできなかったような。
0294デフォルトの名無しさん2007/02/07(水) 00:02:11
>>293
レスありがとうございます。
StringListに「Top=120・・」とかいうようにしてテキストベースで保存することは思いついたんですが(素人ぽい方法?)
TStream.ReadComponent/WriteComponentはちょっとわからんですね(汗

急ぐことではないので、じっくり考えたいと思います。
どうもありがとう。
0295デフォルトの名無しさん2007/02/07(水) 01:00:36
>>294
試してないけどさ、
http://www.wwlnk.com/boheme/delphi/tips/index.html
ここの
http://www.wwlnk.com/boheme/delphi/tips/tec1240.htm
これなんかどうだろう。
0296デフォルトの名無しさん2007/02/07(水) 01:41:48
ふつうは ini ファイルに保存するんでは
0297デフォルトの名無しさん2007/02/07(水) 02:57:08
>>295
うわっ、すごい簡単にやってますね!
でもItemsは保存できないみたいですね…
ありがとうございます。

>>296
そうですね。
02982972007/02/07(水) 03:19:18
自己レスですが今実験したところ、Linesが読み込まれたみたいなのでItemsも保存できそうです。
なにげにすごいものを見つけたと思いました。

>>295さんありがとう。
0299デフォルトの名無しさん2007/02/07(水) 07:31:34
Cでいうところの__FILE__や__LINE__マクロのような機能はDelphiでは使えませんか?
0300デフォルトの名無しさん2007/02/07(水) 08:31:14
>>299 相当する機能はない。 
IDEを使っている限りはコンパイルエラーも
実行中の例外もその場所を表示してくれるので必要性は特にない
0301デフォルトの名無しさん2007/02/07(水) 14:55:19
iTunesの曲名を取得するプログラムを作っているんですが、
temp=temp+曲名
って感じに文字列を連結していった場合、どうやら不正な文字コードが混じっていた場合、tempがそこで途切れてしまいます。
この不正な文字を無視して文字列を連結するにはどうしたらいいでしょうか?
0302デフォルトの名無しさん2007/02/07(水) 14:56:15
不正な文字コードを取り除く
03033012007/02/07(水) 15:47:24
>>302
なにが不正な文字コードかもわかっていませんorz

どうもタグの変換時にiTunes側が勝手に入力した文字みたいで、選択もできません。

2バイト文字の1文字目かな?とも思いますけどよく分かっていません(汗

TStringListにaddすると完走するんですけど、TStringlist.Textを読み出すと途切れてしまいます。
0304デフォルトの名無しさん2007/02/07(水) 16:14:08
TStringList.Textはリスト内の個々の文字列を
キャッリジリターン、ラインフィールドで連結したもの
それらが悪さしてるじゃないかな
0305デフォルトの名無しさん2007/02/07(水) 16:15:33
よくわからんが、文字列は切れてはいないと思う、どうやって確認したのかしらんが
切れて表示されてるだけなので安心しろ。
というか、デバッグで確認しろよ。
0306デフォルトの名無しさん2007/02/07(水) 16:15:49
なにが悪さをしているのか判らなければ話にならないと思うよ。
思い込みでプログラムするより、原因調査が第一だと思う。

文字列から一文字づつ追加→出力チェック→OKなら次の一文字追加→...
して何が悪さをしているのか調査したほうがいいのでは?
0307デフォルトの名無しさん2007/02/07(水) 16:34:07
>>301
文字列を連結させてる部分のコードを晒しなさい。
優しいおほもだちが直してくれますよ。
0308デフォルトの名無しさん2007/02/07(水) 16:39:05
コードを晒せば直していただけるんですね
0309デフォルトの名無しさん2007/02/07(水) 16:42:25
tryexcept使えよ
03103012007/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:22
上でも言ってるけど2バイト文字の2バイトの内の1バイトっぽいね
0312デフォルトの名無しさん2007/02/07(水) 23:22:37
てゆうかヌルポ
0313デフォルトの名無しさん2007/02/07(水) 23:23:48
んじゃガッ
0314デフォルトの名無しさん2007/02/08(木) 05:48:44
ヌルポって言ってるけど、ニルポが正解じゃないの?
0315デフォルトの名無しさん2007/02/08(木) 06:07:25
>>314
PascalでのnilはCとかだとnullって表記するんだよ
0316デフォルトの名無しさん2007/02/08(木) 06:33:38
>>315
nullじゃなくてNULLだろカス
0317デフォルトの名無しさん2007/02/08(木) 07:08:53
つかさ、iTunesAppのことよくしらんけど、COMオブジェクトかなんかだと思うから、
文字列は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
>>315
だがC言語ではなくPascalなのだ. よって説明になっていない.
0319デフォルトの名無しさん2007/02/08(木) 10:17:38
Delphi言語はPascalじゃないよ。よって反論になっていない
0320デフォルトの名無しさん2007/02/08(木) 12:14:10
Delphi6とActiveBasicってどっちが分かりやすい?
0321デフォルトの名無しさん2007/02/08(木) 12:39:55
>>320
前提条件は?
・プログラム初心者
・C言語とか、他の言語はやったことある
・言語の一般論の話

おれは、ActiveBasicやったことないから答えられないけど
0322デフォルトの名無しさん2007/02/08(木) 13:11:54
コンボボックスをクリックしたときに出るリストを出ないようにしたいのですが
Enabled:=false にするとコンボボックスの色が変わってしまい
OnMouseDownイベントなども発生しなくなってしまいます。

何か良い方法はありませんでしょうか。
0323デフォルトの名無しさん2007/02/08(木) 13:19:48
動的配列でsetlengthを使って確保された領域は静的配列のように
連続したメモリ空間に確保されるんでしょうか?
0324デフォルトの名無しさん2007/02/08(木) 13:21:36
>>323
yes
0325デフォルトの名無しさん2007/02/08(木) 13:26:17
>>324
thx
0326デフォルトの名無しさん2007/02/08(木) 13:32:21
>>322
リストの出ないTComboBoxなんてTEditで置きかえれるだろ
0327デフォルトの名無しさん2007/02/08(木) 13:35:36
>>323
1次元動的配列なら連続した領域に置かれるけど
多次元動的配列の場合はそうとは限らない
他の言語で作ったDLLに多次元動的配列のポインタを渡す場合なんかは注意
0328デフォルトの名無しさん2007/02/08(木) 13:45:50
超初心者にも分かりやすい解説サイトってありまつか
0329デフォルトの名無しさん2007/02/08(木) 13:51:10
質問です。
恐ろしく初歩的なことのようで申し訳ないのですが・・。

テキストデータを読み込んだStringGridがあるんですけど、
テキストの行数が1000くらいあるのでスクロールバーが表示されます。
その最後の行が初期状態で見えるようにしたいのですが、
表示位置を先頭行から終端の行に移動させるにはどうすればよいのでしょうか?

StringGrid1.Col:= x;
StringGrid1.Row:= y;

だとカーソルは移動するのですが、
画面の表示位置が変わらなくて困っています。
0330デフォルトの名無しさん2007/02/08(木) 13:54:42
>>328
まあ多次元動的配列は 動的配列の動的配列だからね
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:03
>>329
TStrinGrid.TopRowプロパティを使うんだ
StringGrid1.TopRow := 1000
とかってやると1000行目の行が一番上に表示されるようにスクロールされる
0332デフォルトの名無しさん2007/02/08(木) 14:06:59
下記のようにユーザー名を取得して、表示しようとするとs以降の文字が表示されません。
表示させるにはどうすればいいのでしょうか。

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
>>332
表示されないのは、 sの文字列最後に #0  が入っている為
これを削除する一番簡単な方法は

s:=PChar(s);

これを SowMessageの前に入れればいい
0334デフォルトの名無しさん2007/02/08(木) 14:30:25
こんな感じ
sのサイズがユーザー名分しか確保されてないかので
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
>>333
アンタ>>330か?
いっつも俺の一歩先を行くw
それはそうとそんな方法あるの知らなかった
0336デフォルトの名無しさん2007/02/08(木) 14:38:56
>>327 >>330
ありがとう

やりたい事は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));
として一応正常に動いてるんだけど、たまにエラーが出てたので
質問させて貰いました。
03373322007/02/08(木) 14:54:28
>>333-334
ありがとうございます。
助かりました。
0338デフォルトの名無しさん2007/02/08(木) 14:58:25
WritelnやReadlnのソースを見たいのだけれど、System.pasのどこにあるのでしょ。
> function _WriteLn(var t: TTextRec): Pointer;
というものがあったんですが、
ヘルプに書かれているWritelnの宣言とは、名前も引数も違うし、procedureのハズなので違いますよね。
0339デフォルトの名無しさん2007/02/08(木) 15:17:29
>>336
構造体の場合packed を使ってないとワード境界にゴミを入れられる場合があるのと

そのコードそのままだとすれば、TByteArray はSysUtilsで定義済みの
TByteArray = array[0..32767] of Byte
になっちゃうから、そもそも正しくないよ
0340デフォルトの名無しさん2007/02/08(木) 15:19:38
Writeln、ReadlnそれにCopyと
いった低レベルな関数のソースは公開してない
それらはコンパイルの時に暗黙の内にリンクされる
0341デフォルトの名無しさん2007/02/08(木) 15:25:51
>>338
Write系のコードは、systemにある その_WriteXXXX 系の関数にコンパイラが展開するんだよ
複数の引数がそれぞれの型に応じた関数に置き換わって
_WriteLn は、作成する文字列の最後に CR/LFを追加するだけ
実際の出力はその後にコンパイラで procedure __IOTest; が呼ばれるように追加されて、そっちで出力される

0342デフォルトの名無しさん2007/02/08(木) 15:26:23
クラスの後ろにある= 4;とか= $10;って何
0343デフォルトの名無しさん2007/02/08(木) 15:30:23
Write[ln] だと、

Writeln(5:3);

みたいな記述が出来るけど、これはWriteにだけ使える記述?
他の関数や自分で作った関数には使えないようなので。
0344デフォルトの名無しさん2007/02/08(木) 15:30:27
>>342 たとえばドコで見たの?
0345デフォルトの名無しさん2007/02/08(木) 15:30:34
>>339
あ、TByteArrayは書き間違い。
SysUtilsで定義済みなのは知っていたので敢えてTArrayByteとしてみた
つもりが間違ってたみたい。
あと型名とかは適当です。
0346デフォルトの名無しさん2007/02/08(木) 15:31:55
>>343 そう。 pascalからの盲腸みたいなもん・・・まあCスタイルのformat系が便利だよね
0347デフォルトの名無しさん2007/02/08(木) 15:32:03
>>341
へー
勉強になった
0348デフォルトの名無しさん2007/02/08(木) 15:41:35
>>345 とりあえず、メンバーがバイト要素だけなら今の実装では勝手にゴミが入れられる事はないけど
後の為に packed は追加しておこう。

もっとも、そもそも そういうメモリ操作を伴うようなコードは推薦されなくなってるからなあ・・・
03493012007/02/08(木) 15:54:26
>>317
そのソースをちょっと意地ってようやくチェックすることができました。
ちょっとテンパって(仕事じゃないのに)視野が狭かったようです。

問題の文字は0000でした。
これがヌルポってやつですかね?
初遭遇です。

iTunes設計がクソだorz
0350デフォルトの名無しさん2007/02/08(木) 16:09:26
#0 は ヌルターミネータ・・・・で ヌルポインタとは違うよ。
0351デフォルトの名無しさん2007/02/08(木) 16:16:31
>>348
var a: Array of TArrayByte;

var a: packed Array of TArrayByte;;
としてみたけど変わらないみたい。
取りあえず、もちっとシンプルなデータ用意して検証してみます。
0352デフォルトの名無しさん2007/02/08(木) 16:23:38
>>351
じゃあ関数に渡す前に簡単なチェックルーチンを作って確認したら?

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));
03533292007/02/08(木) 16:30:04
>>330
>>331
おぉ、即座に親切に答えを教えてくれて、ありがとう!
助かった〜。
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:56
できたよ

17: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
>>355
せっかく作っていただいて悪いのですがそれじゃあないんです。。。。
0357デフォルトの名無しさん2007/02/08(木) 17:20:05
すっげーワラタw
0358デフォルトの名無しさん2007/02/08(木) 17:28:04
>>352
態々コード書いてくれてありがと。
試してみたけど、やっぱりポインタは連続してるみたい。
う〜んなにが悪いんだろ。。。
0359デフォルトの名無しさん2007/02/08(木) 17:47:36
高校の宿題かな?
0360デフォルトの名無しさん2007/02/08(木) 17:47:47
>>354 1番だけ
procedure 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
>>358
君がやりたいのは静的配列の動的配列。
で、>>330がいってるのは、動的配列の動的配列。OK?
つか、何を試してるんだ??レコード型の使ってるの?
つまり、レコード型の静的配列の動的配列?

0362デフォルトの名無しさん2007/02/08(木) 17:49:34
問1以外は情報少なすぎて無理じゃない?
0363デフォルトの名無しさん2007/02/08(木) 17:55:40
>>354
2番は
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:48
行列の積は、
http://namahage.dip.jp/public/2ch_s/21/1089719714
に無いかな?

現行スレはPascalの宿題は俺にやらせろ!!Part2
http://pc10.2ch.net/test/read.cgi/tech/1136994325/
03653632007/02/08(木) 18:24:24
良く見たら ベキ演算子も処理してくれるみたいだから
I:='1/12*'+b+'*'+h+'*'+h+'*'+h;
          ↓
I:='1/12*'+b+'*('+h+'^3)';

とした方がいいかもな
0366デフォルトの名無しさん2007/02/08(木) 18:29:26
>>361
あ、いちお配列のメモリ割り当ては分かったんで、解決ってことで。
あとは、データそのものに問題あるかFuncTest(実装不明)に問題あるかなので
いろいろデータをいれて試してみるしかないです。
みんなありがとでした。
0367デフォルトの名無しさん2007/02/08(木) 18:47:04
>>354です
みなさんありがとうございます!!参考になりました!!
あとはなんとか自己解決できそうです!本当にありがとうございました!
0368デフォルトの名無しさん2007/02/08(木) 21:23:58
try
except
 hogehoge;
end;

この場合、hogehogeで例外が出たら無限ループですか?

0369デフォルトの名無しさん2007/02/08(木) 21:37:07
>>368
いいえ、

try〜 except までの分を exceptでキャッチするのであって
hogehogeはtry の中で書かれていないので その外に例外を出す事になりますよ
0370デフォルトの名無しさん2007/02/08(木) 21:46:03
>>369
レスありがとうございます。

try
except
 try
 except
  hogehoge;
 end;
end;

こうやって書いたところでどうも無限ループにはまったぽいんですが再現できなくて悩んでいます。
別の不具合でループしたかな…
0371デフォルトの名無しさん2007/02/08(木) 22:32:50
別の不具合に1票
0372デフォルトの名無しさん2007/02/08(木) 22:36:58
例外の中で例外出してループってすげぇ器用だなw
0373デフォルトの名無しさん2007/02/08(木) 22:46:29
例外をキャッチしたハンドリング中で例外をさらになんてのは、あんまり見た事がないな
一体何がしたいんだろ?

あと、どうしてもネストする時は関数内関数とかでスタックフレームを別けた方がいいんじゃないの?
0374デフォルトの名無しさん2007/02/08(木) 23:07:33
Except内でTryするのは普通な気がするがなあ。
例外が発生した場合、念のため実行したいメソッドがあるけど、
それもエラーを出す事がありうるなんて事は、ちょくちょくある。
0375デフォルトの名無しさん2007/02/08(木) 23:24:19
あの・・・まさか・・・とは思うんですが・・・・
無料のターボデルファイはひょっとすると
パラドックス付いてません?
データベースデスクトップ探しているのですが見つかりません
ま・・・まさか買えという意味じゃないですよね・・・ひいいい;;
0376デフォルトの名無しさん2007/02/08(木) 23:28:31
>>320
Delphi
ActiveBasicはバージョンが0.01上がると言語仕様が派手に変わることがある。
趣味で作っているものだし、しょうがないんだけどね。
0377デフォルトの名無しさん2007/02/08(木) 23:38:11
がっかりんこ
0378デフォルトの名無しさん2007/02/09(金) 01:36:09
文字(TLabel or TStaticText)を透過させたいんですけど…
背景画像の上にあっても、.Colorが上書きされないようにってこと
0379デフォルトの名無しさん2007/02/09(金) 04:11:45
>>378
TCustomLabel.TransparentプロパティをTrueにするとか。
0380デフォルトの名無しさん2007/02/09(金) 04:44:53
アプリケーション上から、独自の拡張子のデータを自身のアプリケーションに関連づけたいのですが、
どのようにしたら実現可能でしょうか。
0381デフォルトの名無しさん2007/02/09(金) 05:26:25
レコード型をプロパティにした時の挙動についてなんですが

TCharacter = 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:09
プロパティの場合、

FCharacter.CurrentPos := aPoint;

こういう記述は、write の記述に従って、例えば write setCurrentPos となっていた場合、

setCurrentPos(aPoint);

のように呼び出される作りになっている。
なので、プロパティの子プロパティに対して直接代入することはできない。

但し、ポインタ参照やクラスにすれば、子プロパティにもアクセスできるようになる。
ただ、この例の場合、read も write も FCurrentPos を直接参照しているのだから、
わざわざプロパティにしないで、 CurrentPos:TPoint; と宣言すれば済む話ではないかな。
0383デフォルトの名無しさん2007/02/09(金) 06:31:55
>>375
ついてる
03843812007/02/09(金) 06:38:59
>>382
ありがとうございます。

> プロパティの場合、
> 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
>>384

> property read GetCurrentPos write SetCurrentPos;
> となっていた場合
> FCharacter.CurrentPos.X とした時は GetCurrentPos が呼び出される分けですよね?

そう。つまり、プロパティを読み出した場合、そのプロパティは変数じゃなくて関数の返値なので、代入できない。

CurrentPos.x は、
GetCurrentPos.x であり、それに代入することはできないということ。



0386デフォルトの名無しさん2007/02/09(金) 09:27:16
SetLengthの引数や、Lengthの戻り値はIntegerですが、負数はありえないと思います。
Cだとstrlenの戻り値はsize_tですし…

Cardinalじゃない理由は何ですか?
0387デフォルトの名無しさん2007/02/09(金) 10:00:23
>>386
>Cardinalじゃない理由は何ですか?
文字列型の最大長はIntegerで扱えるから

ちなみにCには文字の配列はあっても文字列型は無い
0388デフォルトの名無しさん2007/02/09(金) 13:04:08
>>386
Cardinalにすると、Integerな数と演算させると演算中にInt64に変換されて速度が落ちるから、というのもあるかな。

おまいさんも、負の範囲が必要じゃないときは、Cardinalじゃなくて、

type
MyWhole=0..MaxInt ;

みたいなのを定義して使うといいぞ。
って、どこぞの本にかいてあったはず。
0389デフォルトの名無しさん2007/02/09(金) 13:58:47
でもそれって普通に負の数代入できるからあんまり意味ないよな
0390デフォルトの名無しさん2007/02/09(金) 14:29:51
>>389
IDEオプションで範囲チェック入れろよw
0391デフォルトの名無しさん2007/02/09(金) 15:44:50
Application.Minimize;で最小化したんですけど、タイトルバーが残ります。
これを隠すにはどうしたらいいでしょう?
0392デフォルトの名無しさん2007/02/09(金) 15:51:51
タイトルバーには残りませんが
0393デフォルトの名無しさん2007/02/09(金) 15:58:15
言い方が悪かったですね
最小化した時にデスクトップ上からけしたいんです。
Application.Minimize;
だと、左下に最小化されたタイトルバーみたいな物が残ります。(これが最小化ってことだとは思いますが…)
0394デフォルトの名無しさん2007/02/09(金) 16:06:00
いや、最小化したらタスクバーに入るだろ
0395デフォルトの名無しさん2007/02/09(金) 16:09:40
お前は黙っていたほうがいい
0396デフォルトの名無しさん2007/02/09(金) 16:11:01
>>395
知らないならレス付けないで
0397デフォルトの名無しさん2007/02/09(金) 16:42:44
メインフォームじゃないとか?
0398デフォルトの名無しさん2007/02/09(金) 16:55:04
なに言ってるのか、もっと説明しないと判らんぞ。
他のアプリと違う操作にしたいのか、あるいは他のアプリと結果が違うのか?

他のアプリでもそうだけど、
最小化すると、タスクバーがあるwindowsの場合はタスクバーにのみ残る
(古いwindowsではタイトルだけ残ってたけど)

一部常駐系のアプリではタスクバーからも消して、通知領域にのみ残る
http://support.microsoft.com/kb/882639/ja

もしかして、そうしたいのか?
0399デフォルトの名無しさん2007/02/09(金) 17:21:12
>>398
>一部常駐系のアプリではタスクバーからも消して、通知領域にのみ残る

それ、それです。

タイトルバー、タスクバーを消して
通知領域にアイコン表示するところまでは行ったんですけど。
0400デフォルトの名無しさん2007/02/09(金) 17:27:15
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=9
また、タスクバーにも入れたくないときは、
Application.OnMinimize := AppMinimize;
を設定し、

procedure TForm2.AppMinimize(Sender: TObject);
begin
ShowWindow(Form1.Handle, SW_HIDE);
end;
0401デフォルトの名無しさん2007/02/09(金) 17:36:02
>>399
http://kazina.seesaa.net/article/20890953.html
0402デフォルトの名無しさん2007/02/10(土) 19:08:46
Delphiで、コマンドライン解析に便利な、ライブラリはないですか?

ソフト作るごとに、System.ParamCount で、 System.ParamStrで、しこしこすんのがめんどくなってきた。
SysUtils.FindCmdLineSwitchは、単体パラメータしか判別してくれないし。

rubyのoptparse みたいなのがほしす
0403デフォルトの名無しさん2007/02/10(土) 19:43:10
FindCmdLineSwitchをちょっと改造して次の引数を返すような関数を作ればいいのでは?

-a -bを-abとか、-a hogeを-ahogeとかは書けなくなるが・・・
0404デフォルトの名無しさん2007/02/10(土) 20:44:26
getopt
0405デフォルトの名無しさん2007/02/10(土) 21:25:48
Delphi6の無料バージョンをやってるのですが
一番最初の
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,

この部分に、Mathを入れたいのですが
いちいち起動時にMathを書くのは面倒です。
デフォルトでMathを書いてくれるようにするにはどうしたらいいんでしょう?
0406デフォルトの名無しさん2007/02/10(土) 21:31:34
>>405
Mathを使うと実行ファイルが結構大きくなるので。

どうしてもというのなら、そういうプロジェクトを一個つくってそれを開けばいいんじゃねの
0407デフォルトの名無しさん2007/02/10(土) 21:50:09
723 :(*⌒m⌒)プププ ◆2GVl5znG.o :2007/02/07(水) 12:57:44 ID:YY0HWMJu

ひでぇなこりゃww

クソ豚(高津&新城)もいい加減にしないと、アク禁&警察いきだぞww
0408デフォルトの名無しさん2007/02/11(日) 02:45:08
Delphi6とturboのライセンス(?)についてお聞きしたいんですけど、
Delphi6とturboで作ったソフトはソースコード公開しないでいいんですよね?

6は商用利用不可っぽいですが、turboはOKなんでしょうか?

今からどちらかを使ってプログラミングをしようかと思うのですが
どちらを使ったほうがいいですか?
ほんのちょっとデータ管理する程度のソフトを作りたいのですが・・・
0409デフォルトの名無しさん2007/02/11(日) 03:27:13
> Delphi6とturboで作ったソフトはソースコード公開しないでいいんですよね?

YES
GPL のライブラリを使わなければ問題なし

> turboはOKなんでしょうか?

YES

> どちらを使ったほうがいいですか?

DB を使うならTurbo

> 6は商用利用不可っぽいですが、

商用利用=作ったアプリを売るという話じゃね
自分で使うだけなら、どんな用途でも問題ないと思う
0410デフォルトの名無しさん2007/02/11(日) 15:18:32
ttp://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=40#0022.txt
↑にあるRemoveTokenを利用しているのですが、

返り値の一文字目だけを見たいので、
 so1 := RemoveToken( msg1, _EOF ) ;
 first1 := so1[1];
みたいにしたところ下の行でエラーがでます

上の行を
 so1 := RemoveToken( msg1, _EOF ) +' ';
のように何かしら文字列を足してやればエラーはでないのですが、
これはこれでそのまま利用したいので困っています

きれいに解決できる方法はないでしょうか?
よろしくお願いします
0411デフォルトの名無しさん2007/02/11(日) 15:23:20
戻り値が空文字かどうかチェックすればいいだけじゃないの。
0412デフォルトの名無しさん2007/02/11(日) 15:32:56
>>411
ありがとうございました

三日悩んだのに
空文字の可能性に気付かなかったとはアホでした...orz
0413デフォルトの名無しさん2007/02/11(日) 20:30:49
メッシュデータの配列の読み込み方教えてくれよw
数年前のオレなら一瞬でできてたと思うだけどよw
fortranばっかつかっててwwdelphiわすれたw
むしろdelphiってよりpascalか?
まぁとりま2次元配列の読み方書き方おしえてくれ!!!
0414デフォルトの名無しさん2007/02/11(日) 20:56:48
てめぇで調べろよwwwwwwwwwwwwwwwwwwww
0415デフォルトの名無しさん2007/02/11(日) 21:59:12
いぢわるしないで><
なんかこうやったら300まで書いてくれないんです><
for i:=1 to 300
do
writeln(ff,i);
0416デフォルトの名無しさん2007/02/11(日) 22:41:05
>>415
ちゃんとクローズしてるか?
0417デフォルトの名無しさん2007/02/11(日) 22:48:31
あんた神だよ!!>>416さん><
ありがとうございます><
今夜は寝れそうです><
fortranのいい加減な文法になれるとdelphiがうざく感じますね><
0418デフォルトの名無しさん2007/02/11(日) 22:55:59
>>417
いい加減なのもウザいのもお前だ
0419デフォルトの名無しさん2007/02/13(火) 10:11:32
TEditに入力した文字列をバイナリ形式で保存して
それを読み込もうとしています

下のソースは読み込みは成功するのですが
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
>>409
遅くなりましたが、ありがとうございます
0421デフォルトの名無しさん2007/02/13(火) 11:26:30
ファイルを開くモードは,Mode パラメータで指定します。
Mode パラメータには,オープンモードと共有モードを表す識別子を or で結んで指定します。オープンモードには次のいずれかの値を指定します。
0422デフォルトの名無しさん2007/02/13(火) 12:31:56
>>421
誤爆?
0423デフォルトの名無しさん2007/02/13(火) 13:14:55
>>422
>>421>>419への回答。共有モードをor で結べ
と書いてあるTFileStream.CreateのHelpのこぴぺ
04244192007/02/13(火) 13:21:39
一番制限の緩いfmShareDenyNoneを
指定してみましたが変わらずです
0425デフォルトの名無しさん2007/02/13(火) 14:45:34
sDataのデータ型ってなんだ??ソースを見ると文字列型のような気がするけど、
ちゃんと読み込むデータのサイズになってるか??つか、Freeじゃなく、
ReadBufferでエラーになってるように思える。
04264192007/02/13(火) 15:27:03
自己解決しました
sDataは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
まあ、古式ゆかしい言語だから、ReadBufferみたいに
メモリアクセスが直接見えてる部分も残ってて、
それを面白いと思えればいいんだけど、
ミスすると原因不明な困ったバグを入れてしまう部分にもなりえるからな
0428ななしへたぐらま ◆XcB18Bks.Y 2007/02/13(火) 15:40:53
>>426
sDataが空の時にsData[1]とするとアクセス違反になるので
空だったら読み書きしないようにする必要があります.
0429デフォルトの名無しさん2007/02/13(火) 16:07:06
  setlength(sData,fs.Size); //<---- これが必要だろ?
  fs.ReadBuffer(sData[1], fs.Size);
0430デフォルトの名無しさん2007/02/13(火) 19:40:54
>>429
> setlength(sData,fs.Size); //<---- これが必要だろ?
同意。
>>419のコードだと、書き込んだ同じ文字列を読み出しているからsDataの長さが
同じになっていて、たまたま問題が起きてないみたいだけど、本当は必要だよね。
0431デフォルトの名無しさん2007/02/13(火) 20:51:40
>428
SetLength(sData,fs.Size);
fs.ReadBuffer(PChar(sData)^,fs.Size);
ってことね。
0432デフォルトの名無しさん2007/02/13(火) 21:47:52
> 文字列をバイナリ形式で保存して

これどうやるの? ってか、バイナリ以外保存できるのか?
0433デフォルトの名無しさん2007/02/13(火) 22:15:13
バイナリとテキストの2つの形式があるよ
テキストで保存すると環境によって CR/LFがついたりLFだけになったり
といってもDelphiとKylixの2つの差だけどね
0434デフォルトの名無しさん2007/02/14(水) 04:27:14
で、バイナリ保存とやらで保存したファイルからファイルストリームで string に
代入とはこれいかに?
0435デフォルトの名無しさん2007/02/14(水) 08:08:31
>>427
VBなら新しい言語なのにね
0436デフォルトの名無しさん2007/02/14(水) 08:17:50
784 :ラーメン大好き@名無しさん :2007/02/13(火) 12:19:35 ID:wHbpSh1v
>高津の新城は南部学区なんだがな

ここの>>1ってマジ馬鹿だねw
マジ笑うw


785 :↑ :2007/02/13(火) 17:26:37 ID:1sb18rZn
お前の発言だろうが(超新星爆)
脳ミソが溶けてる奴は記憶力が激低だな(ブラックホール爆)
0437デフォルトの名無しさん2007/02/14(水) 09:34:59
>>434
まあファイルストリームには、もはやテキストだのバイナリーだの区別はなくなってるから
若者には区別する事そのものが奇異に見えるんだろな。
0438デフォルトの名無しさん2007/02/14(水) 09:47:19
>>434
まあファイルストリームには、もはやテキストだのバイナリーだの区別はなくなってるから
若者には区別する事そのものが奇異に見えるんだろな。
0439デフォルトの名無しさん2007/02/14(水) 11:47:29
LabelのCaptionを上下方向の中央揃えをするにはどうしたらいいのでしょうか?
0440デフォルトの名無しさん2007/02/14(水) 11:56:16
AutoSizeプロパティをTrueにする
0441デフォルトの名無しさん2007/02/14(水) 12:18:45
TLabel.Layout
0442デフォルトの名無しさん2007/02/14(水) 12:46:41
>>441
できました。ありがとうございました
0443デフォルトの名無しさん2007/02/14(水) 14:06:23
自作アプリをタスクマネージャーのプロセスでチェックした場合、
メモリ使用量がWin2000で7MB、XPで47MBとOSによってむっちゃ差があるんですが、OSでメモリの計算式変わってます?

メモリ使用量47MBってすごいデカイ気がするんですが(汗
0444デフォルトの名無しさん2007/02/14(水) 14:23:18
>>435
雑魚が・・・
0445デフォルトの名無しさん2007/02/14(水) 14:35:37
ドラッグ&ドロップする場所をフォームではなく
エディタにしたいのですが、どうしたらいいでしょうか
0446デフォルトの名無しさん2007/02/14(水) 14:43:07
>>443
表示-列選択 仮想メモリサイズ見れば?

>>445
エディタ.Handle
0447デフォルトの名無しさん2007/02/14(水) 15:02:16
誰かDELPHI6のプログラミングのサンプルくれませんか??
星が動くやつとかめっちゃ簡単なのでけっこうです!!
よろしくお願いします!!
0448デフォルトの名無しさん2007/02/14(水) 15:41:59
>>447
久しぶりに言うぞ…
先ずはググれ
話はそれからだ!
0449デフォルトの名無しさん2007/02/14(水) 16:23:22
Delphiで星を動かす447
0450デフォルトの名無しさん2007/02/14(水) 16:36:52
>>447
program 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
なんか、昔に、パソ屋のデモ機で、ROMのN88BASICをつかって、ランダムに色が付いた■を表示するやつを作り逃げした記憶がよみがえった。

しかし、星を動かすとなると、地球シミュレーターどころの規模じゃないな。がんばれ。
0452デフォルトの名無しさん2007/02/14(水) 21:35:33
この時期はせっぱ詰まったヤツが大杉。Delphi特有。
0453デフォルトの名無しさん2007/02/15(木) 00:51:22
何が言いたいのかよくわからん。
0454デフォルトの名無しさん2007/02/15(木) 05:12:09
>450のやつコピペしたら動かない
0455デフォルトの名無しさん2007/02/15(木) 05:50:41
>450のやつコピペしたら動かない
つ{$APPTYPE CONSOLE}

0456デフォルトの名無しさん2007/02/15(木) 08:24:06
ちゃんと Project1.dpr って名前で保存するんだぞ
0457デフォルトの名無しさん2007/02/15(木) 11:22:09
中身をこう換えると、もう少し派手になるよ

program 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:58
EditBoxでEnabled:=FalseにしたときFontの色が灰色になりますが
EnabledがFalseのままで黒にしたい場合どうすればよいのでしょうか?
0459デフォルトの名無しさん2007/02/15(木) 11:34:23
>>457
星が動くって意味がわかるか?
0460デフォルトの名無しさん2007/02/15(木) 11:41:03
>>458
Panelの上にEditBoxを置いてPanelのEnabledをFalse
適当だけど。
0461デフォルトの名無しさん2007/02/15(木) 11:43:41
>>459 良く判らん
program 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:29
>>458
TEditはWindowsのコントロールを使っていて
Windowsのコントロールがそういう仕様だから無理
ReadOnly = Falseで逃げるとかごまかし手段はいくらでもあるが
0463デフォルトの名無しさん2007/02/15(木) 11:46:19
>>460,462
ありがとうございます。
仕様で直接変更は無理なんですね。
ごまかしつつがんばってみます。
0464ななしへたぐらま ◆XcB18Bks.Y 2007/02/15(木) 12:04:46
>>458
一見操作できそうで実は操作できないというのはユーザーにとってはストレスだと思いますよ.
その点は解決する必要があります.
0465デフォルトの名無しさん2007/02/15(木) 12:57:33
TEdit1.ReadOnly := False;
TEdit1.Color := clBtnFace;

もしくは

TEdit1.Enabled := False;
TEdit1.Color := clBtnFace;

が最適
0466デフォルトの名無しさん2007/02/15(木) 12:58:11
×TEdit1
○Edit1
0467デフォルトの名無しさん2007/02/15(木) 13:26:59
TStringListをちょくちょく使う場合、
使うたびにCreate、freeを繰り返すのと、
パブリックにしちゃって、アプリ起動時にCreate、終了時にfree
するのとどっちがいいんですかね?

気にするほどじゃない問題?
0468デフォルトの名無しさん2007/02/15(木) 13:58:09
俺の最近のお気に入りは、TMemoのStringListを使う事。
フォームをSizenableにして範囲外においておけば
見たいときにフォームサイズ変えれば直ぐに内容が見れて
デバッグも簡単だし。
処理結果とか書いていくようにすれば、ログ表示になるしね。
0469デフォルトの名無しさん2007/02/15(木) 13:59:47
//フォームを使わないバージョン

program 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:33
>>467
publicには極力モノ置きたくないから前者
まあ気にするほどのもんじゃない
0471デフォルトの名無しさん2007/02/15(木) 14:09:11
>>467
そんなに気になるならTStringListを継承したのを作って
function CreateStringList:TStringList;
で、その継承したのを返すようにして、
Freeで実際にFreeせずに、ストックに入れておいて
次のCreateStringList:でストックしたのを返して、

アプリ終了時にFreeするようにしたら?


0472デフォルトの名無しさん2007/02/15(木) 15:40:47
VB.NETならGCあるからFreeなんてしなくてすむのにね
0473デフォルトの名無しさん2007/02/15(木) 15:47:07
>>472
VBよく知らないんだけど、手続き内でCreateしたものをfreeしなかったらどこで破棄されるの?
手続き完了後に自動的に破棄?
0474デフォルトの名無しさん2007/02/15(木) 15:58:06
コンパイラが必要ないと判断した時点で自動的に解放される
メモリリークが(一応)無くなるから便利なんだけど
ポインタ等の直接メモリを覗く処理が(ほぼ)扱えなくなる
0475デフォルトの名無しさん2007/02/15(木) 16:17:39
TTcpClient、TTcpServerについて質問です

Clientから文字列をServerに送信してServer側で表示する
その後、送られてきた文字をServerからClientに
送信するという処理を考えています

ClientからServerへのデータ送信は出来たのですが
ServerからClientでデータを遅れません
TTcpServer.Sendlnメソッドと使えばClientに
データが送られると思うですがTTcpClient.onRecieveイベントが起きません
どこがおかしいのでしょうか?
0476デフォルトの名無しさん2007/02/15(木) 16:18:40
>>472
Delphi .NETもGCじゃないの?
.Createの戻り値受け取らなくても(.Freeしなくても)問題ないよな?
0477デフォルトの名無しさん2007/02/15(木) 16:21:13
.NETは言語の種類に関係なく全てGCに対応してる
0478デフォルトの名無しさん2007/02/15(木) 16:23:40
Crete try finally FreeはDelphiの宿命だ。
下らん小細工で避けてもろくなことにはならない。
0479デフォルトの名無しさん2007/02/15(木) 16:29:29
レコードにデストラクタ付けたいんだけど、無理?(将来対応しますか?
04804752007/02/15(木) 16:37:02
ClientにTTcpClient、ServerにTTcpServerを置いてましたが
ClientにTTcpServerを、ServerにTTcpClientを追加して

ClientからServerにデータ送信

ServerのAcceptイベント内で全部のデータを受信したら
Server側のClientからClient側のServerに送信

の手順で出来ました
0481デフォルトの名無しさん2007/02/15(木) 16:54:16
>>472
Delphiもインターフェース型を途中から導入してて、これを使えば
自動廃棄も可能だよ。 

でも>>467は、メモリの確保解放の処理コストを考えると
頻繁に利用するオブジェクトは再利用した方がいいんじゃないのかという事だろう?
だとすると、.NETはそれに対して良い解決法を提供してくれてるとは言えない。

ただ、TStringListは1行づつメモリを使うので、そっちのメモリ確保解放のことを考えると
TStringListのインスタンスのコストを考えてもしょうがないレベルだと思うけどね
0482デフォルトの名無しさん2007/02/15(木) 17:41:54
レジストリのサブキーのうち、名前の一部が一致するキーを探すにはどうすればいいんでしょう?
HKCRから「foo.」を探して、HKCR\hoge.fooもHKCR\hoge.barも得る(存在を確認する)、ということなんですが…
0483デフォルトの名無しさん2007/02/15(木) 17:51:47
×「foo.」
○「hoge.」
0484デフォルトの名無しさん2007/02/15(木) 18:47:21
Delphi6personalを使っています

TStringGridで項目数が少ない場合にも縦のスクロールバーを
表示するようにしたいのですがうまくいきません

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
delphi6 personal使ってます
文字だけで構成された(画像がないの意)ホームページソースの内容を
テキストファイルに保存するにはどうすれば良いでしょうか?

どうかよろしくご教授下さい
0486デフォルトの名無しさん2007/02/16(金) 02:08:22
>>485

ソースを保存したいんだよな?文字だけかどうかは関係ないよな?

Indy使うと楽。

s := IdHttp1.Get('http://hogehoge/index.html');


0487デフォルトの名無しさん2007/02/16(金) 03:08:45
THTTPやTHTMLを使いたいのですがuses節には何を書けばいいのでしょうか?
TWebBrowser, THTTPRIO, THTTPSoapCppInvokerあたりを
Formに貼ればusesできるかと思ったのですがハズレでした。
よろしくお願いいたします。
0488デフォルトの名無しさん2007/02/16(金) 03:29:26
>>487
いいたかないけど、ヘルプ読んだ?
0489デフォルトの名無しさん2007/02/16(金) 03:30:16
って、見てみようとしたが、THTTPなんてないんだが・・・
0490デフォルトの名無しさん2007/02/16(金) 03:36:22
すみません、参照した情報がDelphi3の頃のもので、今は無いのかもですね。
やろうとしているのがネットワーククライアントですので、>>486見て
調べてみて、Indyでいこうかな、って思ってます。
すみませんありがとうございました。
0491デフォルトの名無しさん2007/02/16(金) 12:52:25
配列a[1]からa[1000]までで
a[n]が1
0492デフォルトの名無しさん2007/02/16(金) 13:23:11
配列a[1]からa[1000]までで
a[n]が1
0493デフォルトの名無しさん2007/02/16(金) 13:25:40
おい誰か手伝ってやれよ
0494デフォルトの名無しさん2007/02/16(金) 14:34:00
BDS2006で、IDEのコードの左側の + - でコードを折りたたんだりできるんだけど、
プログラムの任意の範囲を折りたためるようにする方法ないですか?
0495デフォルトの名無しさん2007/02/16(金) 14:43:43
try .. finally .. end の、finally ・・ end 間で、エラーがあったか、あったらそのメッセージを取得できませんか。
0496デフォルトの名無しさん2007/02/16(金) 14:48:32
{$REGION}
// BDS2006で、IDEのコードの左側の + - でコードを折りたたんだりできるんだけど、
// プログラムの任意の範囲を折りたためるようにする方法ないですか?
{$ENDREGION}
04974862007/02/16(金) 15:30:54
またまたすいませんorz

delphi6 personalにはindyは最初から付属しているのでしょうか?
それとも個別にダウンロードする必要があるのでしょうか?

構文を参照しようとヘルプを検索しましたがみつからずT.T

ググったindyのサイトにはdelphi5以前用のファイルしか掲載されてなくて
マジ困ってます

お手数ですが教えて下され
0498デフォルトの名無しさん2007/02/16(金) 16:03:01
http://www.indyproject.org/Sockets/Download/Borland.aspx
0499デフォルトの名無しさん2007/02/16(金) 16:04:19
>>497
http://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
>>499
>>486
05014992007/02/16(金) 16:09:28
うわすみません目の前に答えが
ありがとうございました
0502デフォルトの名無しさん2007/02/16(金) 21:48:53
>>495
try
except
on E : Exception do
begin
///
end;
end;
0503デフォルトの名無しさん2007/02/16(金) 22:27:57
超初心者用のはずなのに
0504デフォルトの名無しさん2007/02/16(金) 22:29:14
どのくらい分かるようになると、超初心者ではなくなりますか?
0505デフォルトの名無しさん2007/02/16(金) 22:51:59
構造型プログラミングを実践できれば超初心者脱皮
オブジェクト指向を理解実践できれば初心者脱皮
他言語の良さを理解できるようになると中級者脱皮
0506デフォルトの名無しさん2007/02/16(金) 22:55:28
他の言語に移ると上級者
言語なんざどうでもよくなると上級者脱皮
プログラミングやめるとやっと普通の常識人
0507デフォルトの名無しさん2007/02/16(金) 22:58:30
>>506
最後の一行だけは納得できる
0508デフォルトの名無しさん2007/02/16(金) 23:00:16
>>505
せんせい! VBの良さがわかりません!
0509デフォルトの名無しさん2007/02/16(金) 23:02:53
>>508
もう触る必要はありません。
0510デフォルトの名無しさん2007/02/16(金) 23:43:19
winならdelphi
携帯ならjava
cgiならperl

うわべだけ複数の言語かじりましたが
オブジェクトが理解できてましぇんorz
0511デフォルトの名無しさん2007/02/17(土) 08:17:48
TEDITを全体のウィンドウの大きさの変更に対応して変化させたいのですが
AlignのAlClientにあたる物がみつかりません
正確には横幅のみ伸縮可能にしたいのですがどうすればいいのでしょうか?
0512デフォルトの名無しさん2007/02/17(土) 08:39:08
Anchors
0513デフォルトの名無しさん2007/02/17(土) 14:11:09
var F:TFileStream;で F.Size:=F.size+ 5000;とファイルを増やした場合、
この増えた部分は0で初期化されるのでしょうか?
0514デフォルトの名無しさん2007/02/17(土) 14:13:43
TFileStream.Sizeプロパテイの値を増やしてもファイルサイズは変わらないよ
0515デフォルトの名無しさん2007/02/17(土) 14:20:22
と、思ったら変わるんだな
ヘルプには変わらないって書いてあるのにw
0516デフォルトの名無しさん2007/02/17(土) 14:21:55
結果的にはSizeを変更すると windowsAPI(SetFilePointer+SetEndOfFile)が呼ばれるから
APIの動作を見るしかないだろうね

http://www.google.co.jp/search?q=SetFilePointer+SetEndOfFile
0517デフォルトの名無しさん2007/02/17(土) 14:26:38
>ファイルを拡張した場合、
  ファイル内の以前のエンド オブ ファイルの位置と新しい位置との間の内容は、
  未定義になります

という事だから、0で埋められるかどうかは判らないという事になるんだろな
でも、そこを初期化していないと、
巨大なサイズに変更して、そこを読めば 削除した筈の個人情報が読めてしまったり・・・・・
0518デフォルトの名無しさん2007/02/17(土) 14:31:38
>>515-517 ありがとうございます。 
>>517 これは怖いです。
使う人が選択できるようにしたいと思います。
マジ助かりました。
0519デフォルトの名無しさん2007/02/18(日) 01:31:20
SynEditはGPLとMPLのライセンスみたいですが、MPLを選択して
改造して無くて、著作権表示と、ライブラりへのURLアンカつけたらソース公開しなくて良いんでしょうか?
いまいちわからなくて、、、リンクしてるのでアウト?
0520デフォルトの名無しさん2007/02/18(日) 01:59:35
>>519
MPLってのは、ソースを改造していないときには相当甘くて
ソース公開義務はないが、ライセンスについて記載している部分があるなら、
ドキュメントを付記する必要がある。

ttp://www.mozilla-japan.org/MPL/mpl-faq.html

「変更は加えずに自分でコンパイルした Firefox (または MPL 下にあるその他のコード) を
配布したいのですが、何をすれば良いですか? 」

ってのを参照のこと。
05215202007/02/18(日) 02:00:40
もちろん、使用したMPLなソースコードがどこで入手可能かってのは
絶対必要。
0522デフォルトの名無しさん2007/02/18(日) 02:51:38
BDNアカウント作成の鯖につながんね
Delphi6のキーの取得も404('A`)
0523デフォルトの名無しさん2007/02/18(日) 03:12:00
207 名前: デフォルトの名無しさん [sage] 投稿日: 2007/02/17(土) 21:10:23
>>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:54
質問です
var
 s: string;
begin
 s:='ABCDE';
 ShowMessage(IntToHex(Ord(s[1],2)));
end;
とすれば 61 と出ますが
その逆、$61をs[3]等に代入するにはどうすれば良いでしょうか?
0525デフォルトの名無しさん2007/02/18(日) 03:52:19
s[3] := #61;
05265242007/02/18(日) 04:04:23
>>525
迅速な解答ありがとうございました

ついでにもう一つ質問を・・・
'616263' といった文字列を使用して
同じ様に文字列変数に 'ABC' と代入するにはどうすれば良いでしょうか
0527デフォルトの名無しさん2007/02/18(日) 04:22:53
2バイトづつ切り分けて IntToStr して Char にキャストして代入。
0528デフォルトの名無しさん2007/02/18(日) 04:30:00
char型のデーターをstringに入れたいのですが
どのような書き方をすればいいでしょうか
05295242007/02/18(日) 04:30:15
>>527
ありがとうございます、やってみます
0530デフォルトの名無しさん2007/02/18(日) 05:19:40
>>528
>>525
0531デフォルトの名無しさん2007/02/18(日) 05:49:06
良く分からないので
とりあえずpcharとstring使っておきます
お騒がせしました
0532デフォルトの名無しさん2007/02/18(日) 11:00:22
char は 文字型で例えば
var 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がある場合にそこまでのサイズの文字列にするという意味なる
05335222007/02/18(日) 12:28:10
>>523
thx
アンケート答えるとこまではいったけど
こんどは「Send me a serial number and authorization key via email」クリックしてもページ読み込みエラーだ・・・
だめぽ
0534ななしへたぐらま ◆XcB18Bks.Y 2007/02/18(日) 18:15:13
>>484
ちょいと調べてみましたけどそれっぽい情報があまり転がってないのとDelphiで実装するのはめんどくさそうなので

せこい手ですがスクロールバーが見えないグリッドコンポとスクロールバーコンポを2つを組み合わせるというのはどうでしょうか.
ためしに作ってみたらそれっぽい感じになりました.
ただしスクロールバーはXPのビジュアルスタイルが有効になりません.

コードが少し長くなったのでここには貼り付けませんが必要でしたらうぷしますが…
05355222007/02/18(日) 18:49:08
ダメだキーが手にはいらねー
つながらねーよヽ(`Д´)ノウワァァン
0536デフォルトの名無しさん2007/02/18(日) 19:10:35
くだすれってなんですか?
0537デフォルトの名無しさん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:01
くだけた質疑応答すれ
0541デフォルトの名無しさん2007/02/18(日) 21:55:20
くだすれとかけてマラソンととく
そのココロは↓
0542デフォルトの名無しさん2007/02/18(日) 22:00:17
ぼくはしらない
0543デフォルトの名無しさん2007/02/19(月) 03:46:18
>>512
これを使うんですね。ありがとうございます!
0544デフォルトの名無しさん2007/02/19(月) 03:50:06
>>542
誰がうまい事言えと

あ、書いてあったわ
0545デフォルトの名無しさん2007/02/19(月) 03:51:26
>>520
ありがとうございます。
VCLでのリンクだけなら自分のソースを公開しなくて良いみたいですね。
これで安心して会社で発言できます。
0546デフォルトの名無しさん2007/02/19(月) 06:32:21
超初心者です。
Image1.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:36
D7でFireBird1.5+IBXで開発してるのですが、IDEでIBDatabaseのconnectedプロパティをTrueにしたまま実行すると

Cannot perform operation -- DB is currently open

と言うエラーメッセージが出て実行できません。
テーブルに項目を追加したりすると勝手にTrueになるのでいちいち直すのが面倒なんですが
何か設定が間違っているのでしょうか。


05484452007/02/19(月) 14:58:24
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Form1.Edit1.Handle, True);
end;
これでエディタへのドラッグ&ドロップを有効に出来たのですが
ファイルの受け取り方が分かりませんでした。

エディタのイベントにOnDragDropというのがありますが
これを使うんでしょうか?
0549ななしへたぐらま ◆XcB18Bks.Y 2007/02/19(月) 15:10:39
>>546
保存の直前に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
WM_DropFilesメッセージを捕まえて
そん名かでDragQueryFile APIでファイル名を取得する
0551デフォルトの名無しさん2007/02/19(月) 15:26:26
TThreadでVCLコンポーネントへアクセスはシンクロナイズで行うということですが、
例えば、Thread.Execute内からForm1のCaptionなどの値を変更するだけでなく
取得するのも駄目なんでしょうか?
また、TForm1のpublicに設けたintegerやstring、TstringListなどへのアクセスも駄目ですか?
よろしくお願いします。 
0552デフォルトの名無しさん2007/02/19(月) 16:01:32
取得はOK、VCLコントルール以外へのアクセスもOKのはず
そもそもワーカースレッドからメインスレッドを参照すること自体
なんかおかしいような気がするが
0553デフォルトの名無しさん2007/02/19(月) 16:01:55
>>546
bmp.assign(Image1.Picture);
で出来たと思うけど。
0554デフォルトの名無しさん2007/02/19(月) 16:27:04
>>552 ありがとうございます。すっきりしました。
こういうのは普通やらないのですか。。
早速直すようにしたいと思います。
0555デフォルトの名無しさん2007/02/19(月) 19:07:06
>>547
ClientDataSet がOpen のままとか。
0556デフォルトの名無しさん2007/02/19(月) 19:46:54
2進表記ってできないでしょうか?
0557デフォルトの名無しさん2007/02/19(月) 22:00:51
できます。
0558デフォルトの名無しさん2007/02/19(月) 22:37:23
ここで質問するような内容かどうかわからないのですが…

環境はDelphi6です。

ありていに言うと、FDをフォーマットしながら
フォーマット時の書き込み内容のチェックを行い、書き込み内容がNGなら
フォーマットを中断する、というPGを考えています。

正直、どういう風にコーディングするかさっぱりわかりません。
WindowsAPIをコールしてFD読み書きをするように
するんでしょうか?
0559デフォルトの名無しさん2007/02/19(月) 23:20:07
>>547
TIBDatabase.AllowStreamConnectedを参照のこと。
0560デフォルトの名無しさん2007/02/20(火) 06:07:05
549 ななしへたぐらま さん、お返事ありがとうございました。
  領域確保はしていたので
  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
>>558
フォーマットだけなら簡単なのは 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:31
質問させてください!
Memo1のTextにある改行を<ret>というタグに置き換えていきたいんですが、改行のコードはどんなのでしょうか?
また、StringReplaceで置き換えられるものでしょうか?
0563デフォルトの名無しさん2007/02/20(火) 08:30:09
>>562
A1 改行は 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
>>563
ありがとうございます!
一行ずつって手もありましたね…

でもStringReplaceで置換可能なのもわかってよかったです。
ありがとうございます…
0565デフォルトの名無しさん2007/02/20(火) 08:51:52
>>555
>>559
ありがとうございます。
今回は>>559さんの言うようにTIBDatabase.AllowStreamConnectedを
Falseにすることで解決しました。

05664452007/02/20(火) 15:28:01
>>550
このように作ってみたのですが、うまく動きません。

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:41
メッセージを捕まえる手続きは↓こんな感じ
procedure 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
> procedure TForm1.Edit1.WMDropFiles(var msg: TWMDropFiles);
              ^^^^^
なにこれ?
0569デフォルトの名無しさん2007/02/20(火) 15:57:28
TForm1.Edit1.WMDropFiles
      ↑ こんな記法は出来ないと思うけど?

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:36
サブクラスを使わなくても、Form1で選別すればできる。
0572デフォルトの名無しさん2007/02/20(火) 20:07:17
Form1? TApplicationのメッセージに割り込むんじゃなくて?
どうやるの?
0573デフォルトの名無しさん2007/02/20(火) 20:25:07
どうやるの?
0574デフォルトの名無しさん2007/02/20(火) 20:42:01
YOU TEditから派生した独自のクラス(コンポーネント)作っちゃいなYO
0575デフォルトの名無しさん2007/02/20(火) 20:57:06
TEditを継承する方法

TCanDropFileEdit = 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:33
WM_DROPFILES はキューを通過するので Application.OnMessage で普通に捕まえられる。

uses
  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
>>576
最近のバージョンのAddtionalタブに増えてる ApplicationEvents だね
0578デフォルトの名無しさん2007/02/20(火) 21:32:38
D6 以降ですが。もう6年もたつわな。全然最近じゃない。がD7以降は無いのと一緒だからなぁ
0579デフォルトの名無しさん2007/02/20(火) 21:43:10
コンポーネントバージョン

type 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:08
利用するためにTEditをこのコンポーネントに取り替える方法


procedure 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:23
for つかって最初の一つだけとはこれいかに? コピペ丸出しじゃないの
0582デフォルトの名無しさん2007/02/20(火) 21:49:58
○ DragQueryFile(msg.Drop, i, PChar(FileName), Length(FileName));
× DragQueryFile(msg.Drop, 0, PChar(FileName), Length(FileName));
0583デフォルトの名無しさん2007/02/20(火) 21:55:28
○ cnt:= DragQueryFile(msg.Drop, DWORD(-1), nil, 0);
× DragQueryFile(msg.Drop, DWORD(-1), @cnt, 0);
0584デフォルトの名無しさん2007/02/20(火) 22:05:44
これが for ループに入ってますが

Text :=PChar(FileName);
0585デフォルトの名無しさん2007/02/20(火) 22:06:44
一行エディットなんだから最初に一つだけでいいんじゃないの
0586デフォルトの名無しさん2007/02/20(火) 22:08:07
MAX_PATH って4096もいるんだっけ
0587デフォルトの名無しさん2007/02/20(火) 22:08:26
>>584
それはまあ TEditなんで 複数ドロップされたら最後が有効って事でご容赦

TMemoなら
 Lines.Add( PChar(FileName) );
とかでお願い
0588デフォルトの名無しさん2007/02/20(火) 22:11:30
>>586
まあ、将来どんな環境が出るか判らんし、スタックと違ってヒープにとっておけば
そう迷惑な量でもないから、
0589デフォルトの名無しさん2007/02/20(火) 22:19:06
迷惑というかスタックに文字領域を取るのは脆弱性の面で良くないとか?
0590デフォルトの名無しさん2007/02/20(火) 22:22:24
最後じゃなくて最初を有効にすべきでしょ
0591デフォルトの名無しさん2007/02/20(火) 22:24:16
Application.OnMessage でいいでしょ。一つなら。
0592デフォルトの名無しさん2007/02/20(火) 22:33:05
>>591
まあ、そうなんだけど、Delphiが出た当時評価された一つが、
メッセージをサンクを使って高速割り振りしてた所にあるわけで
そういう意味じゃ年寄りには
全メッセージに判断入れるような
ApplicationEvents の手法は、受け入れ難いのでしょ。
0593デフォルトの名無しさん2007/02/20(火) 22:40:43
× for i:=0 to cnt do begin
○ for i:=0 to cnt-1 do begin
0594デフォルトの名無しさん2007/02/20(火) 23:01:57
キューを通るようなメッセージにはVCLは内部でいっぱい判断いれてるよ。それこそ、ほとんど全部のコンポで。
一つ増えたからってなんだっていうんだよ。
0595デフォルトの名無しさん2007/02/20(火) 23:07:56
>>594
年寄りいわく、
 アプリケーションには1秒に数10〜数千のメッセージが飛んでくるんじゃ
 VCLはサンクを使って高速に分岐してくれる。
 つまりじゃ、分岐が終わってから処理するコストと、分岐前に比較するコストは全く違うって事じゃ。

しかし、現代のCPUにとっては、目糞鼻糞だと思うけどね
もっとも、タブページのように窓ハンドルを大量に使うとそうとも言えないかもしれないが
0596デフォルトの名無しさん2007/02/21(水) 02:03:11
>>534
レスありがとうございました

> スクロールバーが見えないグリッドコンポとスクロールバーコンポを2つを組み合わせる
若干姑息な感じもしますけど、実現可能なのはそのぐらいなみたいですね

ただ、この方法だと、グリッドコンポとスクロールバーコンポを連動させる処理を
全部自前で書かないといけなさそうな気がします
結局、見た目だけの問題ですし、気にしないことにします

レスが遅くなってすみませんでした
0597デフォルトの名無しさん2007/02/21(水) 03:12:51
分岐は関係ないだろ。MouseMove のようなメッセージだって、イベントハンドラが
設定されているかどうか判断するところまでは、実際に実行されるんだから。

if 文一つがすべてのキューメッセージに対して実行されるから、どうだこうだ
いうんなら、そもそもVCLなんざ論外だわな。
0598デフォルトの名無しさん2007/02/21(水) 05:44:15
ユニットを二つ使っている場合
二つのユニットどちらからでも使える変数はどのように宣言すれば良いですか?
0599デフォルトの名無しさん2007/02/21(水) 05:49:58
すいません自己解決しました
public節に宣言すればいいのですね
0600デフォルトの名無しさん2007/02/21(水) 07:46:48
>>597
1、そのメッセージ全部に 判断が入るのと
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:31
>>596
UpdateScrollRangeがvirtualだったら良かったのにね。
personalでなければソース書き換えばいいんだろうけど、難しいね
0603デフォルトの名無しさん2007/02/21(水) 09:56:19
>>600

きみさ、なんか勘違いしてるよ。

> VCLは動的に作った短いコードを割り当てて、直接オブジェクトメソッドを呼び出す

これは単に、普通にはできないウィンドウ関数をクラスのメソッドにするためのせこい仕掛け。
普通のWin32APIでつくったウィンドウより速くなる事はありえない。ごちゃごちゃと
イベントハンドラも設定してないメッセージにいちいちいっぱいコードを実行しているVCL使ってて
Application.OnMessage にメソッドを書くのは遅くなる、とか勘違いも甚だしい。
0604デフォルトの名無しさん2007/02/21(水) 10:09:21
必死だな
0605デフォルトの名無しさん2007/02/21(水) 10:10:53
OOPが2つのポインタを必要とする以上、その解決が必要。セコイ仕掛でも必要な事。
そして、OOPレベルで書く以上、Cでカリカリに書いたコードより遅いのも仕方ない。
ここまでは、同意するが、最後の行は間違い。

PeekMessage〜DispatchMessage は高速道路であって、ここは早く流してやらないとね。
0606デフォルトの名無しさん2007/02/21(水) 13:02:32
その高速道路で無駄コードを実行しながらよたよた走ってるのがVCLなんだな。
イベントのうちハンドラが設定されるのは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:03
別に迷惑じゃないが。
0610デフォルトの名無しさん2007/02/21(水) 16:46:23
枯れ木も山の賑わいさ。 質問はいつでも受け付けてるよ。
0611デフォルトの名無しさん2007/02/21(水) 18:33:37
DispatchMessageに渡さず、 Application.OnMessageで自分で処理したほうが
速いよ。 
0612デフォルトの名無しさん2007/02/21(水) 18:47:16
もういいじゃん。ほとんどのケースではどっちで処理しようが、速度の違い体感できないんだから。
0613デフォルトの名無しさん2007/02/21(水) 19:06:54
議論の最中に恐縮ですが、また直接Delphiと関連がないことかも知れないのですが
{$R sound.RES}
として効果音のリソースを取り込んでいます。リソースはbrcc32で作りました。
で、この効果音の制作会社に「WEB等で公開する場合は、第三者が素材音源を
ダウンロードして二次利用出来ない形でお願い致します」と言われています。
この場合、このプログラムはWebサイトで公開できるものなのでしょうか。
0614デフォルトの名無しさん2007/02/21(水) 19:11:23
>>613
リソースだと容易に抽出できちゃうから、厳密に言うとまずいだろう。
暗号化してリソースに入れて、使うときに複合化するべきだな。
0615デフォルトの名無しさん2007/02/21(水) 19:14:24
>>613
聞いてみるのが一番だよ。

リソースそのままで問題になりそうなら、どうせ
LoadResource/LockResource/sndPlaySound で再生してるんでしょ?
だったら、メモリ上のデータをなんか適当な文字列とxor してやれば
まあ、リソースハッカーあたりで簡単に取りだせないでしょ
0616デフォルトの名無しさん2007/02/21(水) 19:17:34
どっちにしても、windows標準で付いてるサウンドレコーダで録音して保存したら2次利用できてしまうんだから

まあ右クリックして保存出来なけりゃ、いいんじゃないの?
06176132007/02/21(水) 21:14:52
おお、なんと素早い回答…
やはり制作者側に聞いてみるべきなのかもしれません。(ちょっと担当の方が
苦手気味なので、ついここで質問してしまいました…)
暗号化する件や録音された場合の音質等も含めて相談してみます。
何か進展しましたら(忘れてなければ)報告します。ありがとうございました。
06186132007/02/21(水) 21:31:53
ちなみに再生は
PlaySound('#100',0,SND_RESOURCE OR SND_ASYNC);
としてました。LoadResourceを使う必要があるのですか。うーん、対処します。
0619デフォルトの名無しさん2007/02/22(木) 00:41:56
Delphi2007 出るのね。

具体的な新機能のアナウンスは無いのかな。
0620デフォルトの名無しさん2007/02/22(木) 00:48:38
http://www.borland.com/resources/jp/pdf/products/bds/delphi_2007_win32_datasheet_ja.pdf
0621デフォルトの名無しさん2007/02/22(木) 01:07:02
おお・・なんか要するにあまり変更無しって感じね・・。
0622デフォルトの名無しさん2007/02/22(木) 07:41:14
VCL for WebとDBX4はちょっと気になるが・・
これってBDSとは別に買えってことかしらん?
0623デフォルトの名無しさん2007/02/22(木) 07:48:06
今時Unicode非対応のアプリを作るやつなんてバカ以外いないだろ。
0624デフォルトの名無しさん2007/02/22(木) 08:08:07
つくればいいじゃん。
自分の技術のなさをdelのせいにしないように。
0625デフォルトの名無しさん2007/02/22(木) 08:54:41
↑ バカの見本
0626デフォルトの名無しさん2007/02/22(木) 08:55:45
ユニコード対応は個人のレベルじゃできないだろ、普通・・
0627デフォルトの名無しさん2007/02/22(木) 09:13:57
16bit->32bitへの移行をあれほどスマートにやってのけたのに
なぜいまだにUnicodeベースの環境に移行できないんだよ・・・
0628デフォルトの名無しさん2007/02/22(木) 09:14:47
そんなにUNICODEが必要な奴がいるとは思わなかったが
必要なんだったら要望すりゃいいじゃない。
http://bdntv.borland.com/survey/DelphiSurvey2006_japanese.html

でもウニコードに対応してくれたって、国際化対応の手間はそんな変わらんぞ
0629デフォルトの名無しさん2007/02/22(木) 09:36:35
もう何年もまえから要望が出てますが。
0630デフォルトの名無しさん2007/02/22(木) 09:36:39
>>628
いや、別に国際化というより、JIS2004の補助漢字とかが入力できない・・TNT使わんと・・・
0631デフォルトの名無しさん2007/02/22(木) 09:37:44
某的には.NET対応ですべて完了って目論見だったんだろうな。
0632デフォルトの名無しさん2007/02/22(木) 09:44:29
Tnt使うのはダメなの?
0633デフォルトの名無しさん2007/02/22(木) 09:44:57
>>628
もうちょっとCP932がどういうものなのか勉強した方がよかれ。

0634デフォルトの名無しさん2007/02/22(木) 09:57:17
そろそろバカボンスレ行け
0635デフォルトの名無しさん2007/02/22(木) 10:06:04
え?

まだ対応しないって?
0636デフォルトの名無しさん2007/02/22(木) 10:29:09
>>630
JIS2004で問題なのは補助漢字じゃなくて、異体字の方では…?
文字コードが一緒で違う字が当てはまるんだから、プレーンテキストを扱うプログラムは
今後出るであろうマイクロソフトの開発環境でも対処のしようがないんじゃない?
0637デフォルトの名無しさん2007/02/22(木) 11:06:23
>>636
その問題も出てるが、少なくともAnsiウィンドウじゃ、その補助漢字すら入力できないの知ってる?
もちろん、第3・4水準の漢字もね。
だから、VCLで普通に開発したアプリは異体字の問題に直面しないと思うが・・・

0638デフォルトの名無しさん2007/02/22(木) 11:10:27
>だから、VCLで普通に開発したアプリは異体字の問題に直面しないと思うが・・・
あぁ、この発言は取り下げておく。
0639デフォルトの名無しさん2007/02/22(木) 12:58:15
>>637
いや、補助漢字とか第3水準以降とかの漢字じゃなくて、第1水準の漢字「辻」とか「葛」とかの字形が変わるんだって。
word2007かIME2007で異体字切替に対応するって話だけど、はき出すプレーンテキストをどうするか見当が付かない
プログラムでどうこうの話じゃなくなってくるけど、
MSゴシック(JIS90)で作ったプレーンテキストとMSゴシック(JIS2004)で作ったプレーンテキストは内部処理的には同一の物であっても、見た目が違う。
神経質な人がJIS2004で作ったデータをJIS90でプリントアウトしてクレーム出たらどうする? 出力環境をJIS2004にする?
じゃあ、出力環境をJIS2004にしたら、JIS90前提で作ったデータはどうするの?

人名を管理するデータを扱っている人はどう対処する?

ゴメン。詰問口調になったけど、自分自身答えが見つからなくて不安なんだ。
0640デフォルトの名無しさん2007/02/22(木) 13:02:44
ウゼェ
0641デフォルトの名無しさん2007/02/22(木) 13:18:55
おっさん達キモイからどっか行けよ
質問者が来づらいだろ
0642デフォルトの名無しさん2007/02/22(木) 13:24:44
>>639
その話知ってるって。開発環境レベルでどうこうできる問題じゃないだろ。
0643デフォルトの名無しさん2007/02/22(木) 16:12:27
>>576をやってみたのですが、ファイルを読み込んでくれません。
Additionalから何か追加しなければならないのでしょうか?
0644デフォルトの名無しさん2007/02/22(木) 16:14:30
あれはファイル名を読み込むだけ
中身を読み込みたいなら自前でファイル名に対して
AssignFile、TStringList、TFileStreamとか使わないと
0645デフォルトの名無しさん2007/02/22(木) 16:31:10
TOpenDialogなんで使わないんだろう・・・
0646デフォルトの名無しさん2007/02/22(木) 17:05:19
>>644
言い方が変でしたスミマセン。
エディタに放り込むことは出来るのですが、放り込んだ後
エディタにファイル名が読み込めていないのです。
0647デフォルトの名無しさん2007/02/22(木) 17:07:28
イベントハンドラが設定されてない、とか? コピペするだけして・・
0648デフォルトの名無しさん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
>>647
ドラッグ&ドロップは
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
でファイル名の取得を行なっているのではないのですか?
これの他にもイベントハンドラが必要なのでしょうか。
0651デフォルトの名無しさん2007/02/23(金) 00:50:28
2007でもUTF16対応しないのかorz
0652デフォルトの名無しさん2007/02/23(金) 01:02:50
>>650
ちゃんとIDEでイベントハンドラを設定してあるか確認してみては?

ApplicationEvents1 の OnMessage イベント
0653デフォルトの名無しさん2007/02/23(金) 01:08:11
質問です。
オブジェクトインスペクタに表示されるプロパティのカテゴリはどのようにして決まっているのですか?
自分で作成したプロパティを特定のカテゴリに入れることはできますか?
0654デフォルトの名無しさん2007/02/23(金) 02:49:11
>>650
関連するイベントハンドラやメソッドにブレークポイント仕掛けて何処で止まってるのか特定。

>>653
RegisterPropertiesInCategory
0655デフォルトの名無しさん2007/02/23(金) 07:51:06
>>626
だからできないのをdelのせいにすんなって。
まあ初心者スレだから仕方ないか。
0656デフォルトの名無しさん2007/02/23(金) 07:53:43
というかウニ厨は.netにいって帰ってこなきゃいいのに
0657デフォルトの名無しさん2007/02/23(金) 08:57:45
>>655
超初心者に初心者が教えるスレだからなw
0658デフォルトの名無しさん2007/02/23(金) 12:45:43
for i := 0 to 10 do
begin
 for j := 0 to 10 do
 begin
  (条件)
 end;
end;

となっているとき、
(条件)の部分から次の i のループに行くにはどうしたらいいのでしょう?
Continueじゃ次の j のループに行ってしまうし・・
06596582007/02/23(金) 12:48:09
自己レスです。
breakでOKでした。大ボケかましてしまった・・。
0660デフォルトの名無しさん2007/02/23(金) 19:09:24
質問です

任意のバイナリファイルを開き、各バイトごとにビット反転を行い
上書き保存するにはどうしたらいいでしょうか?
0661デフォルトの名無しさん2007/02/23(金) 19:27:03
//uses classes;
var
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
>>661
ありがとうございます!
できませんでした!!!

ms.loadfrom('読みたいファイル');

ms.loadfromfile('読みたいファイル');
だとおもいますが
ビット反転はおこなわれていませんでした

ついでに質問ですが
00 01 02 03
と並んでいるのを
03 02 01 00
という風に逆並びにする方法もお願い申し上げます
0663デフォルトの名無しさん2007/02/23(金) 20:08:42
661には inc(pb)が抜けてるのだが、その場所は自分で探す事

pbの定義をarray of byte のポインタにすれば、ついでのお願いは難しくないだろう
0664デフォルトの名無しさん2007/02/23(金) 20:08:49
実用性を感じない、宿題臭い質問だ。
0665デフォルトの名無しさん2007/02/23(金) 20:23:26
漏れもだいぶ昔、作ろうと思ったことがあるプログラムだ。
漏れの場合はTFileStreamを直接いじるやつだったけどうまく書き換えられずに放り出した覚えがある。

今ならバッファに取り込んで加工してファイルに落とすかな
0666デフォルトの名無しさん2007/02/23(金) 20:28:06
>>663
ポインターのことはよくわからないので、forの中に入れてみましたが、なぜかできました。
ありがとうございます。

>>664
わるいけど、俺は、中国を動かしている在日日本人なの!
0667デフォルトの名無しさん2007/02/23(金) 20:47:47
>>665
TFileStreamで数Kのブロック毎に処理するのが一般的だけど
メモリマップドファイルにしてメモリ上で反転してしまうのが、なんか速そうに思う。
0668デフォルトの名無しさん2007/02/23(金) 21:10:28
>>663
>pbの定義をarray of byte のポインタにすれば

微妙に勘違いさせちゃわないか、その書き方。
あえて言えば、
array[0..適当] of byte のポインタ
かな
0669デフォルトの名無しさん2007/02/23(金) 21:21:51
ひどいな、このスレ。とくに回答者。Del はもうこんな状況なのか? 絶望的・・・
0670デフォルトの名無しさん2007/02/23(金) 21:39:26
>>655
できないのは、いまだに非対応なDelのせいですが? なにか?
0671デフォルトの名無しさん2007/02/23(金) 22:09:39
TNT つかえば解決、とか思ってるんじゃね? 初心者だから。
0672デフォルトの名無しさん2007/02/23(金) 23:07:14
使用許諾コードの取得ができねぇConection Failedになる
CDコードとパスワードの取得も鯖につながんねぇしどうなっとるんだ
導入の時点で問題ありすぎオワタ\(^o^)/
0673デフォルトの名無しさん2007/02/23(金) 23:12:15
そんな事はてめぇの日記帳にでも書いてろバーカ
0674デフォルトの名無しさん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:39
最初からそうしろよ低脳が
0678デフォルトの名無しさん2007/02/24(土) 07:45:58
codegearとborlandのリンクが入り混じってアチコチリンク切れになってるね
Delphi for PHP の発売で変更とか忙しいのだろ

とりあえずTurbo Delphi で試してみたら?
0679デフォルトの名無しさん2007/02/24(土) 09:14:01
>>672
vipperのdelphi wikiにコード載ってるはず
0680デフォルトの名無しさん2007/02/24(土) 10:22:26
SQL文のwhere句に

where 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:09
Delphi製アプリはUNICODE非対応って本当ですか?
Delphiを採用しようかVB.NETにしようか迷っているのですが。
やはりOSを出しているメーカーの開発環境のほうが安心ですかね。
0682デフォルトの名無しさん2007/02/24(土) 10:40:52
>>680
オレの知る限り(Delphi4)inの中身をパラメータで指定することはできないはず。
どうしても in句 を使いたい場合は
プログラムでSQL文を生成して、SQL.Textにセットしてた。
0683デフォルトの名無しさん2007/02/24(土) 10:47:16
>>681 Delphiにはfor Win32 と for .NET の2つがある
for Win32で 単に貼り付けるだけで作ったアプリは ANSI文字列対応
for .NET で // UNICODE対応

for Win32でも 当然UNICODE文字列は扱える。


>安心ですかね? は答えようがない。
何に安心したいの?  就職先だの派遣先があるかどうかという問題なら、あるんじゃないの?
0684デフォルトの名無しさん2007/02/24(土) 12:42:43
>>681
言語を道具として扱えない技術者はどう転んでも使い捨て.
どう転んでも安心できる日など来ない.
Perl も PHP も Ruby も C# も VB.NET も Delphi も全部使うくらいの気概でいなければ駄目.
0685デフォルトの名無しさん2007/02/24(土) 13:48:14
まぁ、Delphi つかうような技術者は転びやすいってことだよね
0686デフォルトの名無しさん2007/02/24(土) 14:11:43
全部使うっていっても、Webアプリが主のPerlとかとネィティブアプリが主のDelphiを一緒にされても困るわな。

0687デフォルトの名無しさん2007/02/24(土) 14:33:22
だって組み合わせて使うじゃん。HTTPやソケットとCGI、DBの連携とか…
0688デフォルトの名無しさん2007/02/24(土) 15:03:00
はいはいワロタワロタ
0689デフォルトの名無しさん2007/02/24(土) 16:07:24
>680
682のいうとおり、直接は_だとおも。奥の手はサブクエリかな?
0690デフォルトの名無しさん2007/02/24(土) 19:55:35
>>680
>>ParamByName(':UserGroup').AsString:='(''A''',''B'',''C'')';
Aでシングルクォート多くね?
0691デフォルトの名無しさん2007/02/25(日) 13:36:54
>だって組み合わせて使うじゃん。HTTPやソケットとCGI、DBの連携とか…
何がいいたいのかわからねぇ。HTTPやソケット??CGI・DB??
0692デフォルトの名無しさん2007/02/25(日) 14:09:07
ADODatasetのLocate、条件が複数あると、全然まともに動かない。

レコードが見つからない時にわざわざ例外が出るのは一体何だ。
0693デフォルトの名無しさん2007/02/25(日) 18:36:35
難しい話はDelphi-MLで聞けばいいじゃないか。
0694デフォルトの名無しさん2007/02/25(日) 18:43:34
どのくらいの質問になると「難しい」のか分からない
0695デフォルトの名無しさん2007/02/25(日) 18:46:44
どのくらい難しいかDelphi-MLで聞けばいいじゃないか。
0696デフォルトの名無しさん2007/02/26(月) 08:14:20
与えられたローカルアドレスが
ディレクトリかどうかの判断はどうすればいいんでしょうか

if FileGetAttr(Dirname) = faDirectory

これで判断してるのですが、ディレクトリ判定されないフォルダが偶にあります。
もっと正確な判断方法はないでしょうか?
0697デフォルトの名無しさん2007/02/26(月) 08:21:48
if (FileGetAttr(Dirname) and faDirectory)<>0
0698デフォルトの名無しさん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
>>697
ありがとうございます。
0701デフォルトの名無しさん2007/02/26(月) 12:50:59
For i:=0 to 1000 do begin
 if i = x then break;
end;

このループを正常に抜け出した直後のiは
xか1000のどちらかと考えて良いんでしょうか?
0702デフォルトの名無しさん2007/02/26(月) 13:01:21
>>701
ループに使ったローカル変数は、
ループ後不定です。

って、コンパイルしたときに警告でると思うが?
0703デフォルトの名無しさん2007/02/26(月) 14:10:22
>>669
ありがとうございます
0704デフォルトの名無しさん2007/02/26(月) 18:25:08
>>702 そのまま使えてそうな感じがしたのですが、そうなんですか。
ありがとうございました。
0705デフォルトの名無しさん2007/02/26(月) 20:42:38
>>704
ループ変数はレジスタ(概ねECX)で、ループを抜けたあとに以前の値をPOPしていることがおおい・・・かも
0706デフォルトの名無しさん2007/02/26(月) 21:14:04
stringlistでブランクを詰める機能ってないんですか?
0707デフォルトの名無しさん2007/02/26(月) 21:33:35
無い。自分で実装した方が早い。
String型の動的配列で代替できる可能性も考えてみることだ。
07087062007/02/26(月) 21:53:14
>>707
ありがとうございます。
読み込む件数に比べればブランクになるデータは屁みたいなもんだからまぁ無ければ無いでいいです。
0709デフォルトの名無しさん2007/02/26(月) 22:02:14
教えていただきたいのですが・・・。

海外のEmbeddedWBというブラウザのコンポーネントを使って
ブラウザっぽいアプリを作ろうと試行錯誤しております。

IEなどでは大きい画像ファイルを表示する時に
自動でウィンドウサイズに合わせて画像が縮小表示されますが
このコンポーネントを使って、そういったことはできますでしょうか?
プロパティのどこかをtrueにするだけで実現できるとか。
あるいは他のコンポーネントを使った方が簡単にできるとか。
ちょっとしたヒントでもいいので
どなたか何かご存知であれば、教えていただけないでしょうか?
0710デフォルトの名無しさん2007/02/26(月) 22:51:25
標準の TWebBrowser を使わない理由ってなに?
0711デフォルトの名無しさん2007/02/27(火) 08:49:43
>>709
実行ファイルのファイル名(プロセス)がiexplore.exeじゃないと
イメージツールバーとオートサイズは有効にならなかったはず
0712デフォルトの名無しさん2007/02/27(火) 13:43:29
>>701
forループをbreak、gotoで抜けた場合に限り
ループを抜けた値が保持されるよ

その場合だと i = x の条件を満たしてループを抜けた時に限り
iの値はxとなる
それ以外でループを抜けた場合はiの値は不定
1000かもしれないし0かもしれない
0713デフォルトの名無しさん2007/02/27(火) 15:27:28
普通にwhile文を使えばいいのでは?
0714デフォルトの名無しさん2007/02/27(火) 16:10:15
ある文字列の中にある文字が何個あるかをカウントしたいんですが、forループで自分でカウント取るしかないんでしょうか?
0715デフォルトの名無しさん2007/02/27(火) 16:16:28
そーですね。
0716デフォルトの名無しさん2007/02/27(火) 16:26:27
AnsiStringで漢字をカウントだと、ちょっとメンドクサイな
AnsiStrPosで検索してはカウントするかな
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:34
こうだろう。

var
 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
>>718
巧いけど、先に CR/LFを殺してからやらないと、既にCR/LFが入ってるとマズイよ
0720デフォルトの名無しさん2007/02/27(火) 16:46:05
そっちの方が簡単だね
TStringList.StrinReplaceはクソ遅いから
文字列が長くなるとかなり時間喰うのがアレだけど
まあ、俺が作ったやつだってString使ってるんだからあんまり変わらんか
0721デフォルトの名無しさん2007/02/27(火) 16:46:28
sSubStrにCRLFが入ってるかもな。
0722デフォルトの名無しさん2007/02/27(火) 16:47:10
漢字コードの1バイト目、2バイト目を意識して無いと
って書いてたら>>718
07237182007/02/27(火) 17:04:52
もっと色々突っ込んでくれ。
0724デフォルトの名無しさん2007/02/27(火) 17:16:18
まずは力を抜いて四つん這いになるんだ
07257092007/02/27(火) 17:26:35
>>710
>標準の TWebBrowser を使わない理由ってなに?

見た目が洗練されていなかったというのが、確か乗り換えた理由だったと思います。
たとえばGoogleの画面を開いたときに検索ワードの入力ボックスが
XP風に簡単に設定できたので、EmbeddedWBを使うようになりました。
EmbeddedWBならプロパティのその他→UserInterfaceOptionsの
EnableThemesをtrueにするだけで簡単に見た目をXP風にできます。
0726デフォルトの名無しさん2007/02/27(火) 17:26:53
delphi6.0のCDは持っているのですが、CDkeyがなく、ボーランドのサイトでkeyを取得しようとしたら、7.0は取得出来るのですが、6.0のCDkey
は取得出来ませんでした。ボーランドの英語のサイトで、リンク先からCDkeyが取得できると書いてるのにそのリンクがクリックすると存在しないページになってるみたいで。
自分にだけ出来ないのかもしれませんが…
どなたか、取得の仕方を教えてください。もしくは、delphi7.0のダウンロード出来る場所を教えてください。
0727デフォルトの名無しさん2007/02/27(火) 17:31:57
>>726
Personal版と言わないと誤解買うぞその書き方
D7の無料パーソナル版は、少なくとも日本語版では存在しない。
D6については、ぐぐってわからんようだったら、Borlandに電話した方が早い。
07287092007/02/27(火) 17:34:42
>>711
ご教授いただきありがとうございます。
アドバイスを参考に自分なりに色々工夫してみます。
0729デフォルトの名無しさん2007/02/27(火) 17:42:18
×ご教授
○ご教示
0730デフォルトの名無しさん2007/02/27(火) 17:57:38
>>729
マジレスしてやると、教授でも間違いじゃない
0731デフォルトの名無しさん2007/02/27(火) 18:12:46
>>727
ありがとうございます。
0732デフォルトの名無しさん2007/02/27(火) 18:40:04
>>731
どういたしまして

って、サイトもあるじゃんか
ttp://www.borland.com/downloads/download_delphi.html
0733デフォルトの名無しさん2007/02/27(火) 18:49:45
>>732
現在、登録系をいじっているみたいね。
つながらない所が多い。

俺も試しにやってみたが
そのページからアクセスしても、キーは取得できないみたい。

電話かねー。
0734デフォルトの名無しさん2007/02/27(火) 21:56:15
Button1Clickで作成したオブジェクトがnilかどうかButton2Clickでチェックしたいのですが
どの様なコードを書けば良いのかお願いします。
根本的に間違っていそうですが以下のコードだと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:33
var
c: 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:57
>>734
 c.Free;
 c := nil;
インスタンスを破棄したのにそこにnilを代入とな!?
0737デフォルトの名無しさん2007/02/27(火) 22:18:36
普通にこうでいいじゃん
var
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;
07387342007/02/27(火) 22:48:27
>>737さんの方法だと上手くいくのですが
ポインタを使った方法をやってみたくて>>734みたいなコードになりました。
どうにも勘違いしてたようで
var c, c2: TStringList;
begin
 c := TStringList.Create;
 c2 := c;
 c := nil;
end;
と、するとc2を調べてもnilが返ってくるだろうと思ってました。
インスタンス、ポインタなどもっと調べてみる事にします。
レス付けてくれた方どうもありがとうございます。
0739ミ,,゚Д゚彡 ◆A6VzDeLphI 2007/02/28(水) 01:28:42
>>714
>>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
>するとc2を調べてもnilが返ってくるだろうと思ってました。

ポインタ同士の代入は値(アドレス)のコピー

var
n1,n2:integer;

n1 := 3;
n2 := n1;
n1 := 0;

としても n2 がゼロでないのと同じ。
0741デフォルトの名無しさん2007/02/28(水) 03:09:44
>>726
どうせコピー品だろ?
0742デフォルトの名無しさん2007/02/28(水) 03:58:40
流れ豚切って悪いんですが、ちょっと教えてください。
Formを2つもつアプリを組んでます。
メインフォームのボタン押すとサブフォーム出るように組みました。

が・・!

メインを最小化するとサブフォームも最小化されてしまいます。
同様に、サブフォームをアクティブにすると、メインフォームもアクティブに
なってしまいます。

この辺を直すにはどうしたらいいのでしようか。

メインフォームに必要な情報いれてセットしたら、メインフォームは最小化
してサブフォームだけで作業するようなPGを作りたいのです・・。
0743デフォルトの名無しさん2007/02/28(水) 06:02:10
>>742
type
〜略〜
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:59
ぐはっ!半角スペース直すの忘れたorz
0745デフォルトの名無しさん2007/02/28(水) 06:47:38
>>743
横から失礼します
長い間悩んでた事が解決しました、感謝感謝
0746デフォルトの名無しさん2007/02/28(水) 11:14:48
・ImgBuffはByte型で任意のBMPデータが入っている
・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
>>746
元々は白黒じゃなかったんだよね? だったらパレットが付いてないんじゃないの?
0748デフォルトの名無しさん2007/02/28(水) 13:50:43
WordのマクロをDelphiで書いて、自動実行させようとしたら、Wordのマクロ見ると:=とかpascalっぽい記述。
こんなんどうしろっつーんじゃ!!
0749デフォルトの名無しさん2007/02/28(水) 13:51:57
>>748
なんか面白そうな事やってるね。 もうちっと詳しく書いてくれたら皆んなも楽しめるかも
07507482007/02/28(水) 13:58:26
Wordで記録するとこんなマクロ。どうやってDelphiで記述すればいいのか・・。
しかも入力したとおりに記録されてないし。何これ。

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
>>750
それはVBAじゃないのか? Delphiでどうしたいの?
07527502007/02/28(水) 14:15:21
この処理を、Delphiで書きたいだけだよ。
0753デフォルトの名無しさん2007/02/28(水) 14:19:06
>>752
オートメーションコントローラとして?
0754デフォルトの名無しさん2007/02/28(水) 21:08:22
これで良いのだろうか?
const
 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
あの質問です。delphi6personalをインストールするときの、キーが分らないんです。
登録して、アンケート答えて、キーをメールで送信するってとこをクリックしてもページが見つかりませんとなってしまう。
どうすればいいですか??
0756デフォルトの名無しさん2007/03/01(木) 12:53:59
インストールできません
0757デフォルトの名無しさん2007/03/01(木) 12:55:11
百回声に出して嫁
http://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
>>755
ウェブサイトを弄っている途中みたい。
面倒だがボーランドに電話汁。
0759デフォルトの名無しさん2007/03/01(木) 13:38:07
http://dn.codegear.com/article/33580
>4、. http://register.borland.com/delphi6 にアクセスします。

ここがつながらないんだろ?
なんか、このページがソレらしいんだけど、違うのかなあ
https://reg.borland.com/
0760デフォルトの名無しさん2007/03/01(木) 13:57:08
インストール番号はどうするのよ?
0761デフォルトの名無しさん2007/03/01(木) 16:11:07
>>755
OS環境が許せばTurbo delphi (Explorer版)を使えば?
こっちも無料だよ
0762デフォルトの名無しさん2007/03/01(木) 16:17:24
Turboはコンポ入れられないから糞
0763デフォルトの名無しさん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:19
function chop(s: string): string;
begin
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:44
つーか、そもそも

procedure TForm1.Button1Click(Sender: TObject);
begin
 Clipboard.AsText := CurrentDirectly;
end;

でいいんじゃ・・
0766デフォルトの名無しさん2007/03/01(木) 18:22:56
TStringListを継承して独自のクラスをつくりたい… で、
Createしたときに一行目に予め注意書きみたいなのを入れるようにしたくて

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:57
横から質問スマソ
TStringListって最初の行にstringを代入する時
addを使わずに
tex[0] := CurrentDirectly;
ってやってOKなの?
0768デフォルトの名無しさん2007/03/01(木) 18:23:52
んなわけない
0769デフォルトの名無しさん2007/03/01(木) 18:41:38
>>767
FormCreateのときに空文字をAddしてるから
tex[0]が使えてるだけです

length(result)て改行文字も含めた値が返るんですか?
0770デフォルトの名無しさん2007/03/01(木) 20:03:55
かけあい漫才ですかwwwwww
0771デフォルトの名無しさん2007/03/02(金) 05:46:08
お尋ねします。
Excelでは画面を更新する時に、ちらつきを抑えるために
ScreenUpdatingプロパティをFalseにすることで実現できるのですが
Delphiにもそういった機能はあるのでしょうか?
0772デフォルトの名無しさん2007/03/02(金) 06:09:33
何について知りたいのかわからない
フォーム?
0773デフォルトの名無しさん2007/03/02(金) 07:49:23
グラフィックの描画がちらつく場合は DoubleBufferedというのがある
07747712007/03/02(金) 09:02:50

771で質問した者です。
レスありがとうございます。
あまりにも質問が抽象的過ぎたので具体的に説明します。

エクスプローラーのようなものを作ろうとしております。
TreeViewをAlineプロパティを上下左右に変えることで
上下左右に移動できるような機能を兼ね備えたものです。
たとえばTreeViewのalineプロパティがalLeftの時にalTopに変えたら
TreeViewは左から上に移動しますが、この時デフォルトでは
alLeftの時の幅がalTopの時の高さになります。
しかしこのままでは、適切な高さにならない場合もあるので
強制的にプログラムで適切な高さになるように修正しているのですが、
修正しているさまがあまりにもバレバレでかっこ悪いのです。

ExcelVBAにはScreenUpdatingという機能があり、
これを使えば、見せたくないものに関しては途中の描画を見せずに
プログラム実行後の最終結果だけを見せることができます。
これに類似した事をDelphiで実現することは可能でしょうか?
0775デフォルトの名無しさん2007/03/02(金) 09:05:27
beginupdate endupdate かな?
0776デフォルトの名無しさん2007/03/02(金) 09:30:43
>>774
TApplicationのProcessMessagesメソッドは使ってみた?
0777デフォルトの名無しさん2007/03/02(金) 12:28:16
>>774
LockWindowUpdate(Form1.Handle);
try
 (処理)
finally
 LockWindowsUpdate(0);
end;
0778ななしへたぐらま ◆XcB18Bks.Y 2007/03/02(金) 15:08:45
>>766
オーバーライドは継承元のクラスのCreateメソッドが仮想メソッドか動的メソッドの場合にだけ関係しますので
ここでは気にしなくて結構です.

このクラスではパラメータ無しのCreateを記述することもできて実行すると継承元クラスのCreateが呼び出されますが
これは想定した仕様ですか?(もしそうなら問題ないと思います)
07797662007/03/02(金) 20:08:25
>>778
そうですね、パラメータ無しのCreateを呼んだときは何かデフォルトの文字が入ってるような感じにしてごまかそうかと思ってます。
無しのCreateにもoverloadつけてデフォの値をいれても(パラメータ、有り、無し2つのCreateを書いてしまっても)問題はありませんか?
0780デフォルトの名無しさん2007/03/02(金) 20:40:44
オーバーロードする必要なんて無いような気がしてならない。
0781デフォルトの名無しさん2007/03/02(金) 22:10:10
overrideとoverloadをごっちゃにしているような気がしてならない。
07827712007/03/02(金) 23:54:26
>>775
>>776
>>777
質問に答えていただいて、ありがとうございます。

07837662007/03/03(土) 09:58:34
引数ありのCreateと無しのCreateではoverloadしなくちゃならないかな、と思っただけ。
overrideは継承した子クラスでの手続の振る舞いを変えるための上書きみたいなもんでそ?

うっふん♥
0784デフォルトの名無しさん2007/03/03(土) 10:08:07
言われてみれば、コンストラクタはoverloadしなくて複数宣言出来るのは、勘違いしてもしょうがないな

overloadが導入される前からの設計だからしょうがないけど
0785デフォルトの名無しさん2007/03/03(土) 20:39:46
横槍スマン
デストラクタはどうなの?
0786デフォルトの名無しさん2007/03/03(土) 20:47:23
プログラムを起動したとき、ボタンでなくてエディタにフォーカスを
移すにはどうしたらいいですか?
0787デフォルトの名無しさん2007/03/03(土) 20:48:31
edit1.setfocus;
0788デフォルトの名無しさん2007/03/03(土) 21:02:00
ActiveControl
0789デフォルトの名無しさん2007/03/03(土) 21:15:24
>>785
デストラクタは Destroy をオーバーライド一択だろ。
0790デフォルトの名無しさん2007/03/04(日) 03:00:14
だよねぇ
0791デフォルトの名無しさん2007/03/04(日) 09:15:22
>>786
setfocusはFormが既にアクティブじゃないと使えない

Formが最初に得るフォーカスを指定するときは
ActiveControlを使うべし
0792デフォルトの名無しさん2007/03/04(日) 10:05:55
設計時にEdit1のTabOrderを0にするというのはあり?
0793デフォルトの名無しさん2007/03/05(月) 07:33:58
Print Tools/32用のチェーンストア統一伝票各種のテンプレートどっかにないですか?
0794デフォルトの名無しさん2007/03/05(月) 09:40:47
Visual dBASE まだ使ってるのか・・・・
0795デフォルトの名無しさん2007/03/05(月) 12:10:30
Delphi2007のDMきたお。
Delphi−PHPのチラシも入ってたんだが、「英語版日本先行販売」ってのは「日本語版後行発売」と受け取っていいのか!?

PHP使いたいんだが、マニュアルやらサンプルやら全部英語だと滅入っちまう…
日本語環境では保証ありませんとか書いてるし。
0796デフォルトの名無しさん2007/03/05(月) 12:15:18
>>日本語環境では保証ありませんとか書いてるし。
これかなり重要だよな
マルチバイト文字環境では動作不安定とかマジ日常茶飯事
0797デフォルトの名無しさん2007/03/05(月) 18:55:33
保証しないけど売るって、いい企業だよね。
0798デフォルトの名無しさん2007/03/05(月) 19:23:21
結局今デルフォイ6インストールするのは無理なのね?
0799デフォルトの名無しさん2007/03/05(月) 19:28:23
中の人に聞いてみれば。
0800デフォルトの名無しさん2007/03/05(月) 23:22:23
TIdHTTPでhtmlのタイムスタンプの取得やファイルサイズの取得ってどうやればいいんですか?
0801デフォルトの名無しさん2007/03/05(月) 23:37:57
>>800
TIdHTTP1.Response.〜
0802デフォルトの名無しさん2007/03/05(月) 23:54:29
クエリを送信するときって、post先とpostデータがありますが、

送信データってふつう...cgi?1=a&2=b&3=4のようなj形になりますよね?

たとえば、この場合aのところに=を入れたい場合
...cgi?1==&2=b&3=4 となると思ったんですが、エラーがでます。=を入れたい場合羽津すればいいんでしょうか?
08038002007/03/06(火) 00:00:07
>>801
ありがとうございました。
0804デフォルトの名無しさん2007/03/06(火) 00:05:14
>>802
URLエンコード?
0805デフォルトの名無しさん2007/03/06(火) 00:29:09
>>804
いえ、URLエンコードじゃなくて、ポストデータに=を入れたい場合、どうすればいいのかなと。
0806デフォルトの名無しさん2007/03/06(火) 07:08:15
質問です

Widthってなんて読むんですか?
0807デフォルトの名無しさん2007/03/06(火) 07:11:08
ウィドゥス
0808デフォルトの名無しさん2007/03/06(火) 07:44:58
thの発音って難しいよね
0809デフォルトの名無しさん2007/03/06(火) 09:35:33
カタカナ書きだとウィドス
発音は「ウィッズ
0810デフォルトの名無しさん2007/03/06(火) 09:37:53
途中で書き込んでしまった(;´Д`)
発音は「ウィッズ」っぽいけど、「ズ」はベロの先を上の歯の裏に当てるようにして
発音するとそれっぽくなる、かもしれない。
0811デフォルトの名無しさん2007/03/06(火) 14:22:25
辞書引け
0812デフォルトの名無しさん2007/03/06(火) 21:21:34
Delphiに関しては「他のスレッドでは書き込めない超低レベル」以下の質問だと思う
0813デフォルトの名無しさん2007/03/06(火) 21:49:00
英語の発音についての質問はすれ違い
0814デフォルトの名無しさん2007/03/06(火) 23:26:38
>>806
http://dictionary.goo.ne.jp/index.html
の英和辞典で検索。
waveファイル聞いて自分の耳で確認。
0815デフォルトの名無しさん2007/03/06(火) 23:43:43
そもそも英語の発音をカナで表そうというのが無理がある。
英語の発音は英語の発音記号で表せ。
0816デフォルトの名無しさん2007/03/07(水) 07:43:51
.netを普及させる方法を思いついた!
win32に、WCaption: WideString みたいなメンバを追加して
さらにくそでかく遅いバイナリしか生成できなくする。
これなら.netでいいや、ってなりwin32死滅。
0817デフォルトの名無しさん2007/03/07(水) 07:54:04
自分のアプリをウニコードに対応させるって具体的に何をやればいいのか誰か教えて下さい。
0818デフォルトの名無しさん2007/03/07(水) 08:07:03
TNTをフル活用したらいいんじゃない?

欲しいコンポは全部TNTの派生にすればいい。
0819デフォルトの名無しさん2007/03/07(水) 08:15:24
>>818
ぐぐってみたら一式コンポーネントになってんのね
ありがとうございました。
0820デフォルトの名無しさん2007/03/07(水) 08:28:56
対応って言っても、必要に応じてやればいいと思うよ

1、単に、三国人がそっちの国のファイル名で保存した場合の対策程度なら
  ファイル選択ダイアログだけ対応すればいい。

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:52
ファイル選択ダイアログを対応する方法

uses 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:56
>>818
Win 9x系だと複数言語混合とかで使えないのですが
NT系が大半になった現在では大きな壁ではなくなりましたね.
(今や一太郎すらNT系専用になりましたしね)
0823デフォルトの名無しさん2007/03/07(水) 17:09:30
質問です。

コンボボックスをクリックした場合に出るリストを
クリックではでなくして、キー入力でのみ表示したいのですが
どうすればよいでしょうか?
0824デフォルトの名無しさん2007/03/07(水) 18:57:13
>>823
諦める。
0825デフォルトの名無しさん2007/03/07(水) 19:03:05
>>823
たぶんTCustomCombo.DropDown
0826デフォルトの名無しさん2007/03/08(木) 04:41:51
EUCのファイルがあります

1.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
2chブラウザのlogを見てると
<BR>や>  などの文字が出てくるんですが
これらは特殊な文字コードなのでしょうか?

それともHtmlなどの構文なんのでしょうか
このような特殊文字の一覧を知りたいのですが…

どんなキーワードでググったらよいかわかりません
ヒントだけでもよろしくお願いします
08288272007/03/08(木) 06:34:19
すいません
上での文字の例は

「< b r >」 「 & g t ;」 「 & n b s p ;」

です
0829デフォルトの名無しさん2007/03/08(木) 06:38:46
コンストラクタってoverload指令なしにオーバーロードできたっけ?
0830デフォルトの名無しさん2007/03/08(木) 07:54:05
>>827
特殊な文字コードをキーボードから打ち込めると思うか?
0831デフォルトの名無しさん2007/03/08(木) 09:08:58
TreeView の Drag の開始についての質問です。WindowsXP, Del7 です。
DragMode プロパティは 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:34
>>546
PNGライブラリ使え
0833デフォルトの名無しさん2007/03/08(木) 10:15:37
おそ。

ってか、それたんに PixelFormat を pf1bit にしてからセーブするだけ
08348272007/03/08(木) 11:45:24
ありがとうございました
書店で立ち読みした書籍にのありましたorz

「文字参照(character references)」というらしいです

お手数かけてすいませんでした
0835デフォルトの名無しさん2007/03/08(木) 14:05:17
ttp://hp.vector.co.jp/authors/VA028375/miscellany/x86_float.html
インラインアセンブラをこんな風に関数化するのって意味あるんでしょうか
0836デフォルトの名無しさん2007/03/08(木) 14:12:28
Delphi(VCL)とVisualC++のSDKってどの位速度の差が出るんですか?
どうしてもVisualC++使わないといけない(VCLじゃ駄目)って
いうのはどんなソフトの場合?
0837デフォルトの名無しさん2007/03/08(木) 14:23:08
>>835
呼び出しの時間が処理時間に比べて無視出来ないような、短いルーチンを書くときにはとても良い。
SSEとかでベクトルの外積とか一次変換をやりたい時には有用だと思う。
Delphiは変数や戻り値のレジスタ割り当てがあるので、スタック(メモリ)を介さず
高速なルーチンの呼び出し・復帰が出来る。まぁ、EBPだけはスタックに積まれるけど。

ちなみに、stdcallよりはpascal呼び出しの方が早いと言われるけど、よく覚えてない。
Delphiにもinline関数が有ればなぁとも思う。
0838デフォルトの名無しさん2007/03/08(木) 14:41:34
inline展開まだできないんだっけ?予約語になってるだけ?
0839デフォルトの名無しさん2007/03/08(木) 14:43:26
では何か計算するときその場で算術演算子使わないでいちいちその関数を呼んだ方が速いんですかね
ビットマップを弄ってて計算部分を>>835見ながらアセンブラに置き換えてみたんですが
むしろCPU使用率的には重くなったもんで
……まあ、アセンブラの理屈や使い方よく分かってないですが
0840デフォルトの名無しさん2007/03/08(木) 15:30:48
>>838
今調べたんだが、Delphiの予約語、inlineは下位互換性のために残されている指令で、
コンパイラはこれを無視するらしい。また、インラインアセンブラと関わりの有る指令であり、
C++のinline指定子とは全くの別物みたい。他にそういう指定子があるならスマソ。

>>839
演算子一個で済むような演算だったら、何も関数化する事はないんじゃないかな…
アセンブラで置き換えさえすれば何でも速くなるという訳ではないッス。
とりあえずコンパイラはx86/x87コードしか吐かないので、「確実に速くなる」
と言えそうなのは、SSEやMMX使って簡単な計算を大量に素早く行う関数を作りたいといった
向きに限定されます。

インラインアセンブラで書かれた関数を使用する事自体には高速化へ寄与するケースも
多いけど、挙げられたサイトで紹介されている内容を「そのまま」流用するだけでは高速化
には繋がらないんじゃないかな、と。
0841デフォルトの名無しさん2007/03/08(木) 15:52:06
ドットプリンタでチェーンストア統一伝票に印刷したいんですが、フォントの種類やサイズは何を指定すれば
ぴったり収まるでしょうか。
MS明朝だと文字間隔が詰まりすぎて金額がうまく3桁区切りの枠に入ってくれません。

0842デフォルトの名無しさん2007/03/08(木) 16:09:53
>>841
TextWidth, TextHeightで調べるんだ。
あと、ノンプロポーショナルフォントを使うんだ。
0843デフォルトの名無しさん2007/03/08(木) 16:18:33
>>840
MMXですか……
解説してるページはあったけどやはりよく分からんまま使うのは気が引けますね
というわけで勉強してきます
ありがとうございました
0844デフォルトの名無しさん2007/03/08(木) 16:29:07
デルポイってなんて発音するんですか?
0845デフォルトの名無しさん2007/03/08(木) 16:59:15
デルポイって発音するに決まってるだろ。
0846デフォルトの名無しさん2007/03/08(木) 16:59:38
デルフィー
0847デフォルトの名無しさん2007/03/08(木) 17:01:07
その昔、普通の関数より関数内関数の方がちょびっとだけ処理が早いと聞いたが
今ではどうなんだろう?
0848デフォルトの名無しさん2007/03/08(木) 17:22:56
>>835
ケースバイケース。
ちゃんと時間を計って明確に早くなっていればラッキーだが、
そんなことはあんまりないし、保守性が悪いのがどうしてもネック。
今時のCPUでカップリングをどれだけ考えないといけないのかしらんけど、
コテコテに最適化されたアセのコードは保守するに耐えない。
0849デフォルトの名無しさん2007/03/08(木) 17:25:31
放置を食らってる>>826が哀れなので…

先ず
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の変数ではダメだとのことだから

「すべての文字列の中で復帰と改行で区切られた文字列を取得または設定できます。」
この辺が怪しい

俺ができるのはここまでだ
後はまかせたエロイ人!
08508482007/03/08(木) 17:31:06
ってあれ、最近のDelphiではインライン関数は実装されてたんだっけ?
それならアセだけで書いた関数の意味はあるな。

実装されていないなら、速度の恩恵があまりない。
0851デフォルトの名無しさん2007/03/08(木) 19:06:24
>ちゃんと時間を計って明確に早くなっていればラッキーだが、
>そんなことはあんまりないし、
んなこたない。VCLのソース嫁
Delphiのコンパイラは最適化がしょぼいことで有名だから
アセンブラで明確に高速化できるケースなんて山ほどある。
0852ななしへたぐらま ◆XcB18Bks.Y 2007/03/08(木) 19:06:50
>>849
途中までやっていたのですが仕事が入ってそれっきりになってしまいました.
>>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
体感で MFC と VCL の実装の実行速度の差を感じる事はないでしょ。MFC が API の
ラッパとしては 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
マジレスするとMFCを使って開発している奴はVCL使っている奴より少ない。
しかし単純なC/C++の開発環境として見た場合のVC++は、BCBよりも殆どの面で優れている。

0856デフォルトの名無しさん2007/03/08(木) 22:33:22
ボランドのはDelもC/C++も「最適化」はあまり最適化されないそのまんまの
コードが吐かれるんだよなぁ
08578262007/03/08(木) 22:36:07
>>849,>>852

出来たーーーーーーーーーーーーーーーーーーー!
ありがd!!!!!!!!!
何回見てもレスこないからもうだめだと思いました。
本当にありがとうございました。

TstringsじゃなくてTStringListを使わなくちゃ駄目だったんですね。
ありがとうございました。
0858デフォルトの名無しさん2007/03/08(木) 22:40:34
動的に作成したTPanelのAlignをalTop,DockSiteをTrueにして
別のフォームをドッキングするとグリップをドラッグしても外れなくなってしまうのですが、回避する方法ありますか?
ちなみにAlign=alLeftなら外れます。
0859デフォルトの名無しさん2007/03/08(木) 22:43:16
>>856
Delphiとのリンクが癌だな
0860デフォルトの名無しさん2007/03/09(金) 04:08:11
>>853
VC++ユーザーに、どうしてDelphiを使わないのか聞いたほうが早いかも。
0861デフォルトの名無しさん2007/03/09(金) 07:56:47
>>860
unicode対応してないから
0862デフォルトの名無しさん2007/03/09(金) 08:19:07
Microsoft製だからだろう。
0863デフォルトの名無しさん2007/03/09(金) 08:40:41
DirectXに対応してない
0864デフォルトの名無しさん2007/03/09(金) 10:27:48
VC++は多分優れているんだろうけど、画面のあるMFCアプリは作り難い&直し難い。
0865デフォルトの名無しさん2007/03/09(金) 11:19:23
何故、M$はDelphiと同じようなものを作れないんだ?
0866デフォルトの名無しさん2007/03/09(金) 11:40:22
ヒント:販売戦略
0867デフォルトの名無しさん2007/03/09(金) 12:06:10
>865

俺も常々そう思ってた。
VBのデザイナにしても使いにくくてしょうがなかった。
ドットネットでやっと追いついた感じだよな。
0868デフォルトの名無しさん2007/03/09(金) 12:13:17
MicrosoftがDelphiを作ったのたな
VBもMFCもC#も.NETも存在しなかったと思う
0869デフォルトの名無しさん2007/03/09(金) 12:28:50
もっと早くAnders Hejlsbergを引き抜いていれば
0870デフォルトの名無しさん2007/03/09(金) 13:11:32
だから、ヘジタンの力は大したこと無かったってこと。
本当に力のある人なら、After Delphiを作った筈だが、
C丼てクラス言語以上のものではない。
0871デフォルトの名無しさん2007/03/09(金) 13:47:28
そもそもDelphiはVBを研究して作ったから、VBより使いやすくて当たり前。

>>861
WideString があるよ。
0872デフォルトの名無しさん2007/03/09(金) 13:59:30
DelphiにDirectXコンポが標準でついたらいいのに…
0873デフォルトの名無しさん2007/03/09(金) 15:50:57
んでDelphi2007 for Win32はどうなのよ?
0874デフォルトの名無しさん2007/03/09(金) 20:19:49
>>872
標準で、OpenGLのついてるけど、あんなのになるくらいなら、標準ではいらんわ。
DirectXが、有志が作ってくれたヘッダーで十分ですよ
0875デフォルトの名無しさん2007/03/09(金) 20:20:42
>>873
申し込み用紙きたけど、
win32版は、2007で、全然かわってない。
たぶん、バグ取りだけだと思う
0876デフォルトの名無しさん2007/03/09(金) 20:37:42
レコードで packed recordとする必要がある場合はどういうときなのでしょうか?
0877デフォルトの名無しさん2007/03/09(金) 20:47:36
>>876
メモリ上でレコード型の各フィールドの間に隙間をあけたくない場合。
言い換えれば速度が多少遅くなってもメモリを節約したい場合とか。
DLLを使う場合では、そっちの構造体とフィールドを合わせるために使うこともある。
0878デフォルトの名無しさん2007/03/09(金) 21:09:36
>>877 通常の使用?では使わなくていいものなんですね。
ありがとうございました!
0879デフォルトの名無しさん2007/03/09(金) 21:42:19
DelphiってVB用のDirectXコントロールって使えるの?
0880デフォルトの名無しさん2007/03/09(金) 21:57:23
>>871
WideString があると TForm の Caption にタイ語とハングルが同居できるとでも?

コントロール、メッセージ、ウィンドウ、全部対応しないと使えないだろ。
0881デフォルトの名無しさん2007/03/09(金) 22:36:43
DelphiでADOとDataGridを使いたいのですが
DataGrid1.DataSource:=Adodc1;って出来ません
どうすればよいでしょうか?
0882デフォルトの名無しさん2007/03/09(金) 22:47:58
"hogehoge(数字)"という文字列があり、カッコの中の数字を得たいです。
これって正規表現が必要ですよね?
Delphiは正規表現するためにライブラリを用意しなければならないと聞いたのですが
本当でしょうか?本当なら、おすすめのライブラリを教えてください。
0883デフォルトの名無しさん2007/03/09(金) 22:58:10
別に正規表現使わずに、後ろの文字から調べていけばいいんじゃね?
0884デフォルトの名無しさん2007/03/09(金) 23:19:47
( と )の位置調べてコピー。簡単すぎ
08858822007/03/10(土) 02:44:59
>>883,>>884
ありがとうございます。
0886デフォルトの名無しさん2007/03/10(土) 04:23:42
>>878
普通は packed を使う。 定義済み構造体は packed が付いているはず。
付いていないと思わぬ問題を引き起こすからね。
実行速度が重要な場面では、Byte型の代わりに、あえてWORD型やDWORD型を使う。
0887デフォルトの名無しさん2007/03/10(土) 04:34:02
>>886
いやいや、普通はつかわんだろ。
ヘルプでも推奨しているというわけじゃないし。

定義済み構造体でpackedが使われているのが多いのは、Win32APIとの兼ね合いだろうな。
0888デフォルトの名無しさん2007/03/10(土) 07:59:23
>>880
TFormのCaptionはWideString型じゃないよ

for Win32では AnsiString型で
for .NET ではWideStringに似てるけど .NETのstringクラス型だから、
Windowsが2000以後なら同居出来ると思うよ。

そんなに必要ならWideStringで定義しなおしたVCLを作ればいい。
既にTNTwareのように作って公開してくれてるものもある。

でもTNTwareの需要を見れば判ると思うけど、Delphi使ってる人でWideStringがそんなに必要な人は少数だよ
0889デフォルトの名無しさん2007/03/10(土) 08:04:12
>>888
uni坊には何を言っても無駄だよ。
自分で工夫するつもりなんてこれっぽっちもないんだから。
多分正規表現ライブラリつけろとか騒ぐライブラリ坊と同一人物だと思う。
0890デフォルトの名無しさん2007/03/10(土) 08:15:04
>>887
クラス型ではなくrecordをわざわざ使うという事は
メモリ配置を意識した使い方をしてる為だろうと思うのだが?
たとえばファイルへの読み書きとか
外部DLLとのインターフェースとか
B木の要素のような固定長のメモリブロックとかさ

そうすると、実際のメモリ配置のアドレス関係まで把握しやすいpackedを使うのが普通だと思うよ

そうじゃないならクラスを使ってゆくほうがいい
0891デフォルトの名無しさん2007/03/10(土) 08:22:55
>>886
実行速度を考えてbyteで入るのにword/longを使う意味はないよ
wordが奇数にならないようにlongの配置が下2bit0になるようにダミーは埋めるけどさ

今でも小さいサイズを使う方がキャッシュが効きやすく実行速度はあがるさ
0892デフォルトの名無しさん2007/03/10(土) 08:39:21
>>881
DataSourceには
Data Access にあるDataSourceを指定しなくちゃいけない
DataSourceにはDataSetを指定してやらなくちゃいけないから、ADODataSetを

と順にやってみて
0893デフォルトの名無しさん2007/03/10(土) 10:29:08
投資支援ソフトを作りたいと考えています。

Delphiでお手軽にデータベースを使いたいのですが、
お勧めなDBはありますか?

・アプリ配布時に、別途インストール不要
なもの
0894デフォルトの名無しさん2007/03/10(土) 10:57:41
txt
0895デフォルトの名無しさん2007/03/10(土) 11:25:29
データベースを単に入れ物というか連想配列として使いたいだけなら
テキストデータでTStringListを使うのが一番簡単。

DBGridとかを使いたいという場合は、SQLを使わないなら何かあった気がするが
0896デフォルトの名無しさん2007/03/10(土) 11:41:44
>>890
>たとえばファイルへの読み書きとか
>外部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
>>897

> 関数内関数があるから、再帰を使うためにレコードを使う事もないし
kwsk

つか、引数がえらく多い関数の場合、varを付けてレコード型つかわねーか?
それこそクラスを使う必要ねーし。
こういう時、Delphiのクラスって、createしてfreeしないといけないのが面倒だよな。

そういう意味では、まあたしかに>>897の言ってることは特殊っぽいな。
0900デフォルトの名無しさん2007/03/10(土) 15:40:35
逆にどんな所で、メモリ構造を意識しないrecord型を使ってるのか気になるな。
自作コード中で、使ってる箇所教えてみてよ。

>>899
関数内関数を使うと、根っこの関数で作業変数を定義しておけば
関数内関数にとっては、いわばグローバル変数みたいになるから
都合がいいんだよ。

で、引数が多いような場合は、そのままクラス化して
色々インターフェースを付けた方が再利用し易いよ。
手間変わらないでしょ
0901デフォルトの名無しさん2007/03/10(土) 15:56:24
’通常使うプリンタ’をプリグラムで切り替えたいんですがどのようにすればいいですか?
0902デフォルトの名無しさん2007/03/10(土) 16:18:15
ココによると
http://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:01
>>900
recordを普通に入れ物として使わない説明に全然なってないぞおい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
>>900
> 関数内関数を使うと、根っこの関数で作業変数を定義しておけば
> 関数内関数にとっては、いわばグローバル変数みたいになるから
> 都合がいいんだよ。

それは正しいが、それと再帰を使うためにレコード型使わないの関係ないじゃん。

関数内関数は読みづらくなるから嫌いな人もいるけどそれはさておき、
関数内関数を使うのを前提とした場合、なにみお関数内関数だけにこだわらず、
関数内型で、関数の中だけで使えるレコード型を定義した方がわかりやすくなるケースも多々ある。
まさか関数内型を知らないのではないだろうな?

一応教えてやるが、関数内型ではクラスは定義できないしな。
0906デフォルトの名無しさん2007/03/10(土) 17:14:43
誤字ったすまそ
0907デフォルトの名無しさん2007/03/10(土) 17:15:31
>>904
そだね
0908デフォルトの名無しさん2007/03/10(土) 17:39:52
>>903
おっしゃる通りだけど、

俺も、レコード型を使わないわけじゃない。
速度的な事を考えたら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
>>908
>速度的な事を考えたらpacked を使うだろうと、いってるんだよ。


あのー、packed使うと速度落ちるんですけど。
もしかして超初心者?

だよね、ここくだすれだし。
0912デフォルトの名無しさん2007/03/10(土) 18:11:02
なんだよ、結局ただの知ったかぶりかよ
0913デフォルトの名無しさん2007/03/10(土) 18:28:23
>packedを使用するとデータへのアクセス速度が低下し,

ってヘルプの説明の事だね。
これは、断定的な表現だけど、正しくない。
適切なメモリ配列を自分でやらなければそうなるという事なら正しいが、
適切に使えば、同じか、逆にアプリは高速化する。

例えば、
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:23
もうムキにならなくていいよ
0915デフォルトの名無しさん2007/03/10(土) 18:34:28
>>913
もうそんな顔真っ赤にせず、おまえ言ってることかなりおかしくなっていることに気がつけよ。
結局、packed使っても、packedを使って同じようにできるとおまえは言っているだけで、
じゃあ速度重視なら最初からpacked使わなくていいだけの話じゃん。

頭 冷 や せ。
0916デフォルトの名無しさん2007/03/10(土) 18:35:44
いつまで知ったかぶりを続けるんだろう>>913は。
0917デフォルトの名無しさん2007/03/10(土) 18:39:04
>>914-916
いい加減スルーしてやれよ
0918デフォルトの名無しさん2007/03/10(土) 18:40:25
つけくわえるならば、>>913 のpackedを使わないPascalのコードは、
32ビット環境以外にもってった時の最適化の意味が無いときたもんだ
09199182007/03/10(土) 18:41:19
>>917
そうだね。
大人げなかったぜ。
0920デフォルトの名無しさん2007/03/10(土) 18:41:38
おじさんは絶対自分から引かないもんなんだから
若者は引いてやれよ
0921デフォルトの名無しさん2007/03/10(土) 18:51:39
とりあえず、普段データ置き場所とか、関数の引数の為ののrecord型は使わないもんで、
913の構造体は手元にあった外部ファイルのデータを読む部分からコピペしてきたわけだが

こういう場合でないrecord型で、どんなふうに使ってるのかは興味がある。
出来れば例をあげてほしい。

特に関数の引数に使う例が見たい。
0922デフォルトの名無しさん2007/03/10(土) 18:53:11
いい加減空気嫁!
0923デフォルトの名無しさん2007/03/10(土) 18:54:41
いい加減スレ違いに気が付け
0924デフォルトの名無しさん2007/03/10(土) 18:56:26
今時、コンパイラの最適化の質が問題になるような場面はめったにあるまい
高速化が必要になるならアセンブラで書けばいいだけの話
0925デフォルトの名無しさん2007/03/10(土) 18:57:48
ここはくだスレだ
先ずは質問にしなさいw

議論がしたければ過疎ってる寺子屋スレにでもいけ

その熱意をもって>>901とかの質問に答えてやってくれ マジで
0926デフォルトの名無しさん2007/03/10(土) 18:58:28
>>921
自分で調べろ

>>913=>>921と遊ぶのはここまで
0927デフォルトの名無しさん2007/03/10(土) 19:00:02
>>925 >>902で書いてたじゃないか。 これで不足なの?
0928デフォルトの名無しさん2007/03/10(土) 19:19:54
やってる事をDelphiで書くとすると
バリアント変数で

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:52
心配だから試してみた。 動いたサンプルコード

procedure 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:04
>>918
packedをつけた場合って32ビット環境以外にもっていくと最適化されるの?
0931デフォルトの名無しさん2007/03/10(土) 19:51:47
>>901
> 通常使うプリンタ
ぐぐったら出てきた。
ただ、実際に使えるコードなのかどうかは試してないです。

サンプル: "通常使うプリンタに設定する"
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:53
>>930
packedを付けてサイズが小さくなっているなら
ワード境界とかDWORD境界が原因の悪化が無い分高速になるという事では?
09339182007/03/10(土) 20:44:33
>>932
逆。
packedを付けない時は、環境に応じて速度が出るようにメモリ上の配置が自動的に最適化される。
packedを付けたときは、どんなときもまったくレコードのフィールドとフィールドがまったく隙間がないように配置されるので、
WORD境界やらDWORD境界上に無いデータへのアクセスが遅くなる。

無論、packedを付けて、ダミーのフィールドを入れて、手動でそういったフィールドが
各境界上に並べてやれば、結果的にpackedを付けないときと同じ速度にすることができるけど、
コード量が増えるは、保守性は低下するので無意味。

しかも、(しばらくはなさそうだけど、)将来、もっとも速度が出る整数型のintegerやcardinalが
8バイトサイズになったら、それ以前にレコード型にpackedつけてダミーのフィールドつけて手動で並べたコードの手動の最適化が無駄になるってこと。

そういうわけで、速度を最適化とか言うなら、おとなしくpackedを付けないのが正しい。
09341/22007/03/10(土) 20:47:09
Delphi6PersonalでFastMM4を入れています
TreeView.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:52
type TBaseNode = class(TObject)
private 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;
//以上です
09369182007/03/10(土) 20:55:00
でまあ、ここまで書いたんだから、少しくらいくだすれ対象者のためになることを書いてみると、
packedをつけない場合、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バイト)から覚えておいて良いよ。
09379182007/03/10(土) 21:03:17
>>932
ってごめん、肝心の>>918でおかしなこと言ってた。

誤:
つけくわえるならば、>>913 のpackedを使わないPascalのコードは、
32ビット環境以外にもってった時の最適化の意味が無いときたもんだ

正:
つけくわえるならば、packedを使って手動で最適化したPascalのコードは、
32ビット環境から64ビット環境にもってった時にせっかく手動で書いた最適化の意味が
無駄になりうる可能性があるときたもんだ
09389182007/03/10(土) 21:05:10
>>934
一度、FastMM4をとっぱずして、堀さんのメモリリークチェッカーを使ってみるといいよ。
あれだとより詳しくメモリリークを警告してくれるので。
0939デフォルトの名無しさん2007/03/10(土) 21:19:18
>>918
粘着は見苦しい
09409182007/03/10(土) 22:01:16
>>939
じゃあ、とにかく名無しに戻る
0941デフォルトの名無しさん2007/03/10(土) 23:05:11
>>934
destructor TClassNode.Destroy();
begin
 Element1.Free; // ← TObject.Destroy;と同じなのでは?
end;

>>918
別スレ行くか、「激論!Delphi: 構造体の穴」とかいうスレでも立てれば?
0942デフォルトの名無しさん2007/03/10(土) 23:27:16
>>934
inherited しようよ。
0943デフォルトの名無しさん2007/03/11(日) 08:52:48
TRichEditの文字をコード上からBoldにしたり色つきにしたりはできますか?
0944デフォルトの名無しさん2007/03/11(日) 09:01:58
はいできます。
0945デフォルトの名無しさん2007/03/11(日) 09:12:52
SelAttributes、がそうみたいですね。
0946デフォルトの名無しさん2007/03/11(日) 11:35:15
EXEファイルに直接ドロップされたときの処理を扱うには
どうしたらいいんですか?
0947デフォルトの名無しさん2007/03/11(日) 12:12:04
>946
ParamStrにドロップされたファイル名が入る。
09489462007/03/11(日) 12:29:33
>>947
お答えありがとうございます
EXEファイルをダブルクリックしたときにフォームが出てくるのはいいのですが
直接ドロップされたときは、フォームを作成せずに処理だけを行ないたいのです
それはどのようにしたらよいのでしょうか?
0949デフォルトの名無しさん2007/03/11(日) 12:31:15
>>946
WMDropFiles使う
0950ななしへたぐらま ◆XcB18Bks.Y 2007/03/11(日) 13:11:08
少々早いですが次スレのお知らせ.

くだすれDelphi(超初心者用)その40
http://pc11.2ch.net/test/read.cgi/tech/1172844367/l50

以前,2chが落ちたときに立ったものです.
09519342007/03/11(日) 13:24:37
>>938
ttp://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の中でTGIFImageを使用すると
そのDLLを動的ロードしたときCPU使用率が100%になってアプリが固まるんですが
これってコンポーネント側のバグ(or仕様)ですかね
usesにGIFImageを加えただけで何もしなくても発生します
環境はD6Personal,win2k
09539522007/03/11(日) 13:47:38
追記すると
正確には「FreeLibraryしたときに発生」です

DLLは最近弄り始めたんでよく分かりませんが
0954デフォルトの名無しさん2007/03/11(日) 14:20:04
>948
.dprで処理をする。
0955デフォルトの名無しさん2007/03/11(日) 16:31:48
DDDDなんかの親切なコンポのおかげでDirectXが多少使えるようになった!
そうなると少し欲が出て、DirectXのヘッダから直でDirectX対応プログラムをやってみたくなった…

ググッってみたけど、黒田さんって方がDirectX5のヘッダを公開されてるだけで、日本人ではそれ以降のバージョンを出しているのを見つけられない…
直接APIをつかっているサンプルとか見たいんですが、勉強になるサイトとか教えてください!

高坊なので、英語のサイトは無理ですorz
辞書みながら少しなら理解できるかもしれませんが。
0956デフォルトの名無しさん2007/03/11(日) 16:41:04
ヘッダとサンプルならClootieにある
理解するヒントならDirectXの日本語ヘルプ

日本人が作ったソースならゲーム製作技術板避難所で独自ライブラリ、
ゲーム製作技術板でAPIを使ったゲームを見た覚えがある
09579552007/03/11(日) 17:17:00
むはー
ちょっといいのが見つかりません。
C++は読めないし、「まだお前には早い」って言われてるみたいです。

時間をかけて少しずつ資料を集めていきます。
0958デフォルトの名無しさん2007/03/11(日) 19:54:15
>>952
バージョンによって、DLLで使った時に
initializationか、 finalization 部が実行されなかったように思うが
それは大分前だからD6なら違うだろう。

もしかしてShareMemを使ってないとか?
0959デフォルトの名無しさん2007/03/11(日) 20:11:47
TGifImage に ShareMem が必要とかはじめて聞いた希ガス
0960デフォルトの名無しさん2007/03/11(日) 20:26:02
>>953
そういや、 D6で条件コンパイルで入れてるTDummyThread って何のために必要なんだろな。
0961デフォルトの名無しさん2007/03/11(日) 20:34:25
>>959
すまん。文字列か動的配列を使っているのにShareMemをしてなくて
不具合が起きていたのがTGifImage で顕在化したんじゃないかな って事を言いたかった。
0962デフォルトの名無しさん2007/03/11(日) 22:04:11
>>954
.dprに記述すると関数が使えなくなってしまいました。
例えばどんな記述をすればよいのでしょうか?
0963デフォルトの名無しさん2007/03/11(日) 22:21:04
>>962
処理したい内容はフォームのメソッドに書いてるの?
それとも単独の関数や手続き?

フォームのメソッドなら、 Application.Run; まで実行させて
その手前でパラメータを見て処理させて
Application.Run;を実行させずに終わればいい

単独の関数なら 
Application.Initialize; の手前でやっちゃえばいい
0964デフォルトの名無しさん2007/03/11(日) 22:47:02
>962
必要なユニットをusesしとるかい?
0965デフォルトの名無しさん2007/03/12(月) 07:50:56
>>957
GLSceneの方がよいよ
09669572007/03/12(月) 15:53:53
>>965
OpenGLってやつですか?DirectXとどっちが自分にわかりやすいのか、研究してみます。
紹介してくれてありがとうございます!
0967デフォルトの名無しさん2007/03/12(月) 16:30:29
乱数生成アルゴリズムみたいなのに興味を持って、

http://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:05
mod使えばいいんだろうけど、それ以外で何か手はないか?
0969デフォルトの名無しさん2007/03/12(月) 17:11:14
>>967
0から255までの数字が入った配列を用意して
それをランダムに並び替える。
その配列を頭から読んでいけば0から255までの数字が一つずつランダムに得られる

・・ってのとは違う話?
0970デフォルトの名無しさん2007/03/12(月) 17:14:31
Randomのやりかたは

RandSeed := RandSeed*$8088405 +1
return (RandSeed * Range) shr 32; {掛け算結果の上位32ビットを採用する}
0971デフォルトの名無しさん2007/03/12(月) 17:17:03
これと同じ方法で、
0〜255という乱数が欲しいなら
(線形合同法で得た0〜2^32の乱数) SHR 24 すればいい
0972デフォルトの名無しさん2007/03/12(月) 17:18:05
>>969
それを効率良くランダムに並べるには 0〜Nまでの乱数が欲しくなるわけで
0973デフォルトの名無しさん2007/03/12(月) 17:35:31
ようするにRandom関数を使わないで自作の乱数生成関数を作りたいと、

>>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
>>973
そんなにXORを繰り返すなら、普通にM系列乱数にした方が簡単だろう
M系列なら理論的に調べられてるしね
09759672007/03/12(月) 17:41:36
M系列ってのでやるとどうなるんスか?
0976デフォルトの名無しさん2007/03/12(月) 17:44:45
>>973
そのサイト管理者めっさウザ過ぎワロスw
0977デフォルトの名無しさん2007/03/12(月) 17:49:34
M系列乱数のタップ表
ttp://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:52
r := r xor $65AC9365;
r := 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
Seed * Range は32x32=64bitあるのだが、コンパイラは下位しか返してくれない
アセンブラで書かないと効率的なコードにならないのだけど

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
>>977
メルセンヌツイスタのランダムクラス、ゲットしたぜ!
0982デフォルトの名無しさん2007/03/12(月) 18:15:43
>>980
うわ!上手くいった!
アセンブラで書いたらこれ以上速くなるのか!?
誰か詳しい人plz
0983デフォルトの名無しさん2007/03/12(月) 18:19:15
いや、だから、アセンブラで書かれたものは randomだって
System.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:27
思わぬ展開にワラタw
0986デフォルトの名無しさん2007/03/12(月) 19:17:42
アセンブラ版
function 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
M系列とか、他の方法なら種が重要だけど

合同法は、掛け算を持つパソコンでは高速だけど
種がそのサイズしかないから、初期化もクソもない。すぐにループしてしまう。
0989デフォルトの名無しさん2007/03/12(月) 19:57:32
>Seed * Range は32x32=64bitあるのだが、

64bit版CPUだと暗号化なんかで使ったときにキチンと復号できないとか、そういう危険はないのか?
0990デフォルトの名無しさん2007/03/12(月) 20:00:24
いや、ROMるだけでも勉強になった
俺にとっては、、
0991デフォルトの名無しさん2007/03/12(月) 20:01:39
合同法ってのがそもそも掛け算して上位を捨ててるわけなので、
掛け算して下位を捨てても、計算式が同じなら同じ種から同じ結果が出るよ
0992デフォルトの名無しさん2007/03/12(月) 20:07:07
>>986がコンパイルとおらん。
なんで?
0993デフォルトの名無しさん2007/03/12(月) 20:08:21
お前等が何の話してんのかわからない
0994デフォルトの名無しさん2007/03/12(月) 20:16:27
>>992だけど>>986のasmの前にbegin入れてたもんだからそれ消したらコンパイル通ったけど、Rangeに関係ない数がガンガン出る。
実装部分にRangeの文字が見えないけど、どこか違くね?親方…
0995デフォルトの名無しさん2007/03/12(月) 20:56:04
MUL EDX は EAX*EDXで
Rangeはレジスタ渡しなら 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:52
SHLD と SHRD間違ってるかも・・・そのまえに89/38ってこういう意味だったっけ?
09979342007/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
>>995

未定義の識別子’wH’未定義の識別子’wM’未定義の識別子’wL’
って出ちまうゼ

どこかで宣言しとかないといけないものがあるんじゃないかな?

教えてくれよ、師匠…
0999デフォルトの名無しさん2007/03/12(月) 22:15:49
>>997
> 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:52
>>986をそのままコピペしてRangeに256入れて試したけど11460427とか平気で出るお。
1回目は決まって0だし、、
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。