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

1デフォルトの名無しさん
このスレッドは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/
2デフォルトの名無しさん: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
3デフォルトの名無しさん:2007/01/21(日) 22:49:36
>>1
4デフォルトの名無しさん:2007/01/21(日) 23:39:02
はやくBDS 2007出ないかな~
5デフォルトの名無しさん:2007/01/22(月) 01:03:36
Del6です

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

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

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

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

>>9
ブラウザは普通に作ることが出来ました。
私が知りたいのは何処からMicrosoft製コンポーネントの仕様が入手できるかです。
15デフォルトの名無しさん: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;

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

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

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

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

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

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

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

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

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

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

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

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

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

致命的エラー ファイル'unit_windows_api.dcu'が見つかりません
というエラーが出ます。
このエラーを回避する方法を教えて欲しいです。
53デフォルトの名無しさん:2007/01/24(水) 19:09:11
pasをプロジェクトに登録するだけじゃないの?
54デフォルトの名無しさん:2007/01/24(水) 19:23:00
>>52
ライブラリパスの場所に
unit_windows_api.pasを置く
55デフォルトの名無しさん: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 + ↓とか)が使用できない。
56ななしへたぐらま ◆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のヘルプは良くできていたのですが…)
57デフォルトの名無しさん:2007/01/24(水) 20:01:25
Turboはヘルプが完全に日本語化されてないので初心者にはちょっとね
フリーカーソルも慣れればかえって使いやすいもんだし
58デフォルトの名無しさん:2007/01/24(水) 20:24:24
Delphi6を使ってます。
バイナリエディタを作ってみたいんですが、バイナリデータをTMemoryStreamなどで読み込んだあと、そのバイナリを表示する方法がわかりません。
どのようにすればいいですか?
5950:2007/01/24(水) 20:32:17
>>51 >>55
ありがと。
スレ見ててもDelphi6の話題が多いし、初心者にもいいみたいだしDelphi6入れる事にします。
60デフォルトの名無しさん:2007/01/24(水) 20:38:35
>>58
何が聞きたいのかがいまいち分からんが、
Formatとかで1バイトずつ16進に直してStringGridとかに表示していけばいいんでない?
6158:2007/01/24(水) 21:03:10
ありがとうございます。
とりあえずFormatをググって使い方を調べます。
62デフォルトの名無しさん:2007/01/24(水) 21:15:14
DrawGrid使って自分で描いた方が速いと思う。
63デフォルトの名無しさん:2007/01/24(水) 21:58:43
>>49
これ面白そうだな。
フリーでアクセント付けれるのって他にあるんかな。
とは言うものの俺もわかんね。すまんorz
64デフォルトの名無しさん: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 かな。
65デフォルトの名無しさん:2007/01/24(水) 23:08:34
>>49
Size 引数は int へのポインタだよ。
(Koe: PChar; ISpeed: Integer; Size: PInteger)
66デフォルトの名無しさん: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);
とか

(テキトー)
67デフォルトの名無しさん:2007/01/25(木) 00:18:18
フォーム上にラベルのようなものを貼って、それをクリックしたら通常のブラウザ(IEなど)が開くようにするのってどうすればよいですか?
68デフォルトの名無しさん:2007/01/25(木) 00:21:29
69デフォルトの名無しさん:2007/01/25(木) 00:23:43
>>68
ありがとうございます。
70デフォルトの名無しさん:2007/01/25(木) 04:07:03
IndyのTCPServerの、Readbufferで取得できたサイズを知る方法がわかりません。
どうすれば取得できますか?
71デフォルトの名無しさん:2007/01/25(木) 07:18:03
質問です
exe等からアイコンを抜き出してSpeedButtonに張り付けて使っていたのですが
アイコンの左上1ドットの色で透過されないようにする方法があれば教えてください
72デフォルトの名無しさん:2007/01/25(木) 07:23:05
DelphiがWindowsVistaで文字化け?

みたいなサイトを目にしてしまいました。
深刻なんでしょうか?文字化けを克服したバージョンのリリースの予定っていつ頃なんでしょうか?
73デフォルトの名無しさん:2007/01/25(木) 07:49:34
デュアルブートにしてXPとVista使いわければ?
7449:2007/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;
75デフォルトの名無しさん:2007/01/25(木) 09:59:41
>>72
そのサイトのURLは?
76デフォルトの名無しさん:2007/01/25(木) 11:44:01
>>75
忘れちゃったけど、Unicode関係なのか「Vistaになって新たに追加された文字」(それ以前の開発環境でのソフトでは表示できない!?)みたいなことが書いてあったと思う。
77デフォルトの名無しさん:2007/01/25(木) 11:51:33
>>72
Delphi じゃなくて、フォントの問題でしょ。
http://itpro.nikkeibp.co.jp/article/COLUMN/20061221/257533/
7825:2007/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'と出ます・・・・・・・・

おねがいです・・・・・・・・。呼び出し方教えて下さい。


79デフォルトの名無しさん:2007/01/25(木) 13:28:13
80デフォルトの名無しさん:2007/01/25(木) 13:43:51
質問です。
ClientSocketで複数のサーバーに同時接続というのは無理でしょうか?
81デフォルトの名無しさん:2007/01/25(木) 14:07:03
>>80
やったことないんで想像で書くけど、
コンポーネントを複数おいたらできない?

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

ClientSocket1
ClientSocket2
ClientSocket3


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

ClientSocket[ ? ] = TClientSocket.Create;

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

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

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

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

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

何かよい方法はありませんでしょうか?
86デフォルトの名無しさん:2007/01/25(木) 18:04:11
テンプレートが使えればすむのですが、使えないので・・・orz
8785:2007/01/25(木) 18:29:34
とりあえずは、オブジェクトを生成するメソッドのポインタを渡して、
そのポインタから呼び出して生成してもらうようにしていますが、
もっとスマートな方法はないだろうか?
(まあ、こちらの方が汎用性は高いですが・・・)
8885:2007/01/25(木) 18:32:46

簡略化したコード書いてみます。

interface
const NumOfPool = 100;
type
  TObjectPool = class
    FItems: array of TObject;
    constructor Create(ObjectClass: TObjectClass);
  end

implementation

constructor TObjectPool.Create(ObjectClass: TObjectClass);
begin
  SetLength(FItems, NumOfPool);
  for i := 0 to NumOfPool - 1 do
    FItems[i] := ObjectClass.Create;
end;

↑これでは駄目
89デフォルトの名無しさん:2007/01/25(木) 18:47:44
そもそもコンストラクタの型が一定ではないのだから、無理な話。
90デフォルトの名無しさん:2007/01/25(木) 19:43:52
>>84
Delphiの基礎ちゃんと勉強したか?

For ix:= 0 To生成したい数 Do begin

ClientSocket[ix]:=TClientSocket.Create;

End;
91デフォルトの名無しさん:2007/01/25(木) 21:03:21
質問させてください。
●プロジェクトに含まれないソースファイル(リンカ?等の設定でつながっている)をステップインしてデバッグしたい。
方法はないでしょうか?

●事の成り行き
とあるサードパーティ製のGridを使っていると、カラム幅を変えた際(MouseUp)にエラーが発生しました。
ソースコード付きだったので動作を追って行くと「inherited」という部分でエラーが出ているのが分かりました。

「inherited」を調べてみたところ、呼ばれているイベントの継承元の処理が動く、と認識しました。
継承元をたどってゆくと、VCLのTCustomGridのpasファイル内にある「MouseUp」イヘ゛ントがそれっぽいのです。
92デフォルトの名無しさん:2007/01/25(木) 21:27:27
>>90
forの初期値が0なら
for ix := 0 to 生成したい数 - 1 do
でしょ

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

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

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

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

○宣言
 FClientSockets: TComponentList;

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

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

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

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

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

できました!!ありがとうございます。
typeにPzConv1: TPzConv;を書き忘れてました。
みなさんに頼りすぎました。すみません。
104デフォルトの名無しさん:2007/01/26(金) 11:55:14
>>102
TileメソッドやらCascadeメソッドがあるがな・・・
それか標準アクションにも用意されてるがな・・
>>100
>>84の元の質問の答えになってないがな・・
105デフォルトの名無しさん:2007/01/26(金) 12:05:02
>>101
とりあえず、設計時にMemoのVisibleプロパティをFalseにして、
実行時にボタンが押されたらVisibleプロパティをTrueにすればいいんじゃまいか??
ボタンが押された時の処理はボタンのOnClickイベントに書けばいいがな・・
106102:2007/01/26(金) 13:01:55
>>104
出来ました。
有難うございます。
107デフォルトの名無しさん: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;
108デフォルトの名無しさん:2007/01/26(金) 15:23:31
おい、2005はVISTAで使えるのか?
109デフォルトの名無しさん:2007/01/26(金) 15:48:59
2006 と同じだと思われ。
110デフォルトの名無しさん:2007/01/26(金) 16:15:11
Delphiで遊んでるものにはつまんない、さびしい
11185:2007/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;
112101:2007/01/26(金) 19:07:18
>>107
できました!

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

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

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

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

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

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

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

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

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

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

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

随時吐き出せ。

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

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

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

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

読み出しは逆のSetOrdProp関数でどうぞ。
163デフォルトの名無しさん:2007/01/29(月) 11:53:53
>>162の続き
それか、GetPropValueとSetPropValueでもいいかもな。第3引数のPreferStringsを変えれば
値を[fsBold]みたいな感じでもIniファイルに手軽に書き込めるはずだがな・・・
164デフォルトの名無しさん:2007/01/29(月) 13:07:54
質問させてください、ファイル検索の
FindFirst がエラーコードを返した時は FindClose が自動的に呼び出されるので
そのあと FindClose を呼び出すと2重になってバグを起こすと聞いたんですが
FindNext がエラーコードを返した時も FindClose が自動的に呼び出されるんですか?
もしそうなら FindNext でファイル検索して行って、もうこれ以上ない時に FindClose を
呼び出す必要はないんですか?
165デフォルトの名無しさん: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から以降の部分をコピペしてるだけなんですが、なぜ通らないのでしょう・・・
166デフォルトの名無しさん:2007/01/29(月) 14:18:29
>>165
その自作プロジェクトのどっかでCopyって関数定義とかしていない??
167デフォルトの名無しさん:2007/01/29(月) 14:18:51
>>164
VCLのソースを見る限りじゃFindNextに失敗しても
FindCloseは呼び出されない
なので必要ないかと

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

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

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

  except

  end
 finally

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

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

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

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

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

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

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

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

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

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

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

SendStreamかなって思ったんですけど、送り方と受け取り方が判りません。
185デフォルトの名無しさん:2007/01/29(月) 21:56:44
>るとある程度の長さで切れてしまいます。
TCPの使用上2回以上に分けて送受信されてるだけ。
全部受信し終えてから次に逝け。
186デフォルトの名無しさん:2007/01/29(月) 22:39:15
>>160
Application.MessageBox使ってる
オヌヌメ
187デフォルトの名無しさん:2007/01/29(月) 23:02:12
>>186
188デフォルトの名無しさん:2007/01/30(火) 04:32:08
表示の問題と勘違いしてるんじゃないかな・・・
189デフォルトの名無しさん:2007/01/30(火) 21:52:03
加速器(AlquadeLiteみたいな)への
対策はどのようにすればよいのでしょうか?
Timerで数秒分現在時刻を取得しておいて計算させれば
うまくいくかなぁとか思っているのですが、いまいちよく分かりません。
190デフォルトの名無しさん:2007/01/30(火) 22:05:59
>>189
むかし、PC98のBASICとかでゲーム作っていた時の記憶だけど、
毎回、計測用ループが1秒間に何回回るかでウェイトの値求めていたけど
そんな感じでどう?
191デフォルトの名無しさん:2007/01/30(火) 22:07:24
192デフォルトの名無しさん: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個なら良い

これでいいのでしょうか?とてもいけそうな気がしてきました
193デフォルトの名無しさん: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の値を求める。

で、メイン実行部分はタイマーイベントを使わずに、事実上の無限ループにして、
先に求めた値のウェイトを入れる。

自分で書いてて、問題が山積みな方法だとは思うけど。
194デフォルトの名無しさん:2007/01/30(火) 23:46:25
TEXTfileを読み込み、
N行目が1だったら
ウインドウの(N*100,100)の座標に
1辺10の正方形を表示、
N行目が2だったら
ウインドウの(N*100,200)の座標に
1辺10の正方形を表示するという
プログラムの作り方がよく分かりません。

教えていただけないでしょうか?
195デフォルトの名無しさん:2007/01/30(火) 23:55:37
196デフォルトの名無しさん:2007/01/30(火) 23:55:39
何がわからないんだよ
もしかして全部か?なら氏ね
197デフォルトの名無しさん:2007/01/31(水) 00:17:56
>>194
宿題かな!頑張れ~。
ヒントだすから、googleでサンプル検索したり、ヘルプ見たりして頑張れ

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

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

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

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

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

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

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

お願いします。
219デフォルトの名無しさん:2007/02/01(木) 01:13:07
スラムダンクでも全巻読んどけ
220デフォルトの名無しさん:2007/02/01(木) 01:40:11
>>218
Delphi6でもダウンロードして”HALLO WORLD”からじゃね?
221デフォルトの名無しさん:2007/02/01(木) 01:44:39
>>220
ありがとうございます。
プログラム言語などは参考本などを見ながら
勉強するべきですか??
222デフォルトの名無しさん:2007/02/01(木) 03:01:45
才能がすべてです。
223デフォルトの名無しさん:2007/02/01(木) 04:03:33
>>220
英字が全て大文字っていうのが気持ち悪くなるぐらい英語を勉強するべきじゃないかな・∀・)"
224デフォルトの名無しさん:2007/02/01(木) 04:14:11
>>223
halloでもあってないことはないw
225203:2007/02/01(木) 04:17:39
ところで、Application.MessageBoxを使っていると思われるメッセージボックスでTMsgDlgTypeのアイコン(!、×、i、?)が表示されてるのを見かけるんだけど、どうすればああなるの?orz
226デフォルトの名無しさん:2007/02/01(木) 06:08:52
それぞれ関数があったはず
227デフォルトの名無しさん:2007/02/01(木) 06:55:34
MB_ICONWARNING
MB_ICONASTERISK
MB_ICONQUESTION
MB_ICONERROR
228デフォルトの名無しさん:2007/02/01(木) 07:17:32
>>227
ktkr!
サンクス
229デフォルトの名無しさん:2007/02/01(木) 09:40:35
230デフォルトの名無しさん:2007/02/01(木) 12:29:03
>>229
ありがとうございます。
とりあえず「Delphi入門教室」から勉強していきます
231デフォルトの名無しさん:2007/02/01(木) 21:15:25
今日、Delphi 6 personalをinstallしたのですが、使用許諾コード取得が
できません。サーバーに接続しています。少々お待ちください。がでて、
しばらく待たせた後、サーバーが見つからないとエラーがでます。取得しないでも動くようですが、
使用許諾コードなしでも問題ないのですか?
232デフォルトの名無しさん:2007/02/01(木) 21:26:47
233デフォルトの名無しさん:2007/02/01(木) 21:27:45
234デフォルトの名無しさん:2007/02/01(木) 22:26:19
フォームが最小化されたことを通知するイベントってありませんか?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>問題はスケールの方。

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

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

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

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

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

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

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

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

急ぐことではないので、じっくり考えたいと思います。
どうもありがとう。
295デフォルトの名無しさん: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
これなんかどうだろう。
296デフォルトの名無しさん:2007/02/07(水) 01:41:48
ふつうは ini ファイルに保存するんでは
297デフォルトの名無しさん:2007/02/07(水) 02:57:08
>>295
うわっ、すごい簡単にやってますね!
でもItemsは保存できないみたいですね…
ありがとうございます。

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

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

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

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

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

文字列から一文字づつ追加→出力チェック→OKなら次の一文字追加→...
して何が悪さをしているのか調査したほうがいいのでは?
307デフォルトの名無しさん:2007/02/07(水) 16:34:07
>>301
文字列を連結させてる部分のコードを晒しなさい。
優しいおほもだちが直してくれますよ。
308デフォルトの名無しさん:2007/02/07(水) 16:39:05
コードを晒せば直していただけるんですね
309デフォルトの名無しさん:2007/02/07(水) 16:42:25
tryexcept使えよ
310301:2007/02/07(水) 18:26:11
レスありがとうございます。

自分でチェックしてみてわかったこと
・iTunes上では「ロ」と表示
・delphiのStringに代入すると「・」(WideStringでも一緒)
・iTunesのライブラリをテキストエディタで開き、問題の文字をコピー→文字コードの確認をすると32で普通の半角スペース。(テキストエディタが自動変換している?)

問題の箇所のソースは
for i:=1 to iTunesApp.CurrentPlaylist.Tracks.Count do
begin
 Application.ProcessMessages;
 if i=1 then
  strTempSend:=',"'+iTunesApp.CurrentPlaylist.Tracks.Item[i].Name
 else
  strTempSend:=strTempSend+'","'+iTunesApp.CurrentPlaylist.Tracks.Item[i].Name+'()';
 end;

 LogSet('MusicListData'+strTempSend+'"');
end;

LogSetは自作関数でTMemoにaddしているだけです。
strTempSendはWideStringです。
>>309
例外が出ないんですよ
311デフォルトの名無しさん:2007/02/07(水) 18:32:22
上でも言ってるけど2バイト文字の2バイトの内の1バイトっぽいね
312デフォルトの名無しさん:2007/02/07(水) 23:22:37
てゆうかヌルポ
313デフォルトの名無しさん:2007/02/07(水) 23:23:48
んじゃガッ
314デフォルトの名無しさん:2007/02/08(木) 05:48:44
ヌルポって言ってるけど、ニルポが正解じゃないの?
315デフォルトの名無しさん:2007/02/08(木) 06:07:25
>>314
PascalでのnilはCとかだとnullって表記するんだよ
316デフォルトの名無しさん:2007/02/08(木) 06:33:38
>>315
nullじゃなくてNULLだろカス
317デフォルトの名無しさん: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])]))
とかで確認してくれよ・・・。
>>例外が出ないんですよ
無効な文字が含まれてるからって例外はでない。
318デフォルトの名無しさん:2007/02/08(木) 07:15:09
>>315
だがC言語ではなくPascalなのだ. よって説明になっていない.
319デフォルトの名無しさん:2007/02/08(木) 10:17:38
Delphi言語はPascalじゃないよ。よって反論になっていない
320デフォルトの名無しさん:2007/02/08(木) 12:14:10
Delphi6とActiveBasicってどっちが分かりやすい?
321デフォルトの名無しさん:2007/02/08(木) 12:39:55
>>320
前提条件は?
・プログラム初心者
・C言語とか、他の言語はやったことある
・言語の一般論の話

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

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

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

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

だとカーソルは移動するのですが、
画面の表示位置が変わらなくて困っています。
330デフォルトの名無しさん: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
331デフォルトの名無しさん:2007/02/08(木) 14:01:03
>>329
TStrinGrid.TopRowプロパティを使うんだ
StringGrid1.TopRow := 1000
とかってやると1000行目の行が一番上に表示されるようにスクロールされる
332デフォルトの名無しさん: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;
333デフォルトの名無しさん:2007/02/08(木) 14:26:40
>>332
表示されないのは、 sの文字列最後に #0  が入っている為
これを削除する一番簡単な方法は

s:=PChar(s);

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

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

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

Writeln(5:3);

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

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

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

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

var a: packed Array of TArrayByte;;
としてみたけど変わらないみたい。
取りあえず、もちっとシンプルなデータ用意して検証してみます。
352デフォルトの名無しさん: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));
353329:2007/02/08(木) 16:30:04
>>330
>>331
おぉ、即座に親切に答えを教えてくれて、ありがとう!
助かった~。
354デフォルトの名無しさん:2007/02/08(木) 17:04:48
お願いがあります!!簡単なプログラミングをつくってください。

【問1】2~任意の数までの間に現れる素数を求めて表示するプログラム。


【問2】I=1/12×b×h^3

任意の数値hとbを入力して答えを出力するプログラム

【問3】2行×2列の行列同士の積を求めるプログラム

【問4】5行×5列の行列同士の積を求めるプログラム。計算結果をファイルに書き出せる様にする。


神様お願いします!!
355デフォルトの名無しさん: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 自由時間
356デフォルトの名無しさん:2007/02/08(木) 17:12:50
>>355
せっかく作っていただいて悪いのですがそれじゃあないんです。。。。
357デフォルトの名無しさん:2007/02/08(木) 17:20:05
すっげーワラタw
358デフォルトの名無しさん:2007/02/08(木) 17:28:04
>>352
態々コード書いてくれてありがと。
試してみたけど、やっぱりポインタは連続してるみたい。
う~んなにが悪いんだろ。。。
359デフォルトの名無しさん:2007/02/08(木) 17:47:36
高校の宿題かな?
360デフォルトの名無しさん: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;
361デフォルトの名無しさん:2007/02/08(木) 17:49:26
>>358
君がやりたいのは静的配列の動的配列。
で、>>330がいってるのは、動的配列の動的配列。OK?
つか、何を試してるんだ??レコード型の使ってるの?
つまり、レコード型の静的配列の動的配列?

362デフォルトの名無しさん:2007/02/08(木) 17:49:34
問1以外は情報少なすぎて無理じゃない?
363デフォルトの名無しさん: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;
364デフォルトの名無しさん: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/
365363:2007/02/08(木) 18:24:24
良く見たら ベキ演算子も処理してくれるみたいだから
I:='1/12*'+b+'*'+h+'*'+h+'*'+h;
          ↓
I:='1/12*'+b+'*('+h+'^3)';

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

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

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

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

try
except
 try
 except
  hogehoge;
 end;
end;

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

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

FCharacter.CurrentPos := aPoint;

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

setCurrentPos(aPoint);

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

但し、ポインタ参照やクラスにすれば、子プロパティにもアクセスできるようになる。
ただ、この例の場合、read も write も FCurrentPos を直接参照しているのだから、
わざわざプロパティにしないで、 CurrentPos:TPoint; と宣言すれば済む話ではないかな。
383デフォルトの名無しさん:2007/02/09(金) 06:31:55
>>375
ついてる
384381:2007/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; とすれば済むんですよね。。。
385デフォルトの名無しさん:2007/02/09(金) 06:45:07
>>384

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

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

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



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

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

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

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

type
MyWhole=0..MaxInt ;

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

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

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

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

それ、それです。

タイトルバー、タスクバーを消して
通知領域にアイコン表示するところまでは行ったんですけど。
400デフォルトの名無しさん: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;
401デフォルトの名無しさん:2007/02/09(金) 17:36:02
402デフォルトの名無しさん:2007/02/10(土) 19:08:46
Delphiで、コマンドライン解析に便利な、ライブラリはないですか?

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

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

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

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

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

ひでぇなこりゃww

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

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

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

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

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

YES

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

DB を使うならTurbo

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

商用利用=作ったアプリを売るという話じゃね
自分で使うだけなら、どんな用途でも問題ないと思う
410デフォルトの名無しさん: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 ) +' ';
のように何かしら文字列を足してやればエラーはでないのですが、
これはこれでそのまま利用したいので困っています

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

三日悩んだのに
空文字の可能性に気付かなかったとはアホでした...orz
413デフォルトの名無しさん:2007/02/11(日) 20:30:49
メッシュデータの配列の読み込み方教えてくれよw
数年前のオレなら一瞬でできてたと思うだけどよw
fortranばっかつかっててwwdelphiわすれたw
むしろdelphiってよりpascalか?
まぁとりま2次元配列の読み方書き方おしえてくれ!!!
414デフォルトの名無しさん:2007/02/11(日) 20:56:48
てめぇで調べろよwwwwwwwwwwwwwwwwwwww
415デフォルトの名無しさん:2007/02/11(日) 21:59:12
いぢわるしないで><
なんかこうやったら300まで書いてくれないんです><
for i:=1 to 300
do
writeln(ff,i);
416デフォルトの名無しさん:2007/02/11(日) 22:41:05
>>415
ちゃんとクローズしてるか?
417デフォルトの名無しさん:2007/02/11(日) 22:48:31
あんた神だよ!!>>416さん><
ありがとうございます><
今夜は寝れそうです><
fortranのいい加減な文法になれるとdelphiがうざく感じますね><
418デフォルトの名無しさん:2007/02/11(日) 22:55:59
>>417
いい加減なのもウザいのもお前だ
419デフォルトの名無しさん: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;
420デフォルトの名無しさん:2007/02/13(火) 10:31:39
>>409
遅くなりましたが、ありがとうございます
421デフォルトの名無しさん:2007/02/13(火) 11:26:30
ファイルを開くモードは,Mode パラメータで指定します。
Mode パラメータには,オープンモードと共有モードを表す識別子を or で結んで指定します。オープンモードには次のいずれかの値を指定します。
422デフォルトの名無しさん:2007/02/13(火) 12:31:56
>>421
誤爆?
423デフォルトの名無しさん:2007/02/13(火) 13:14:55
>>422
>>421>>419への回答。共有モードをor で結べ
と書いてあるTFileStream.CreateのHelpのこぴぺ
424419:2007/02/13(火) 13:21:39
一番制限の緩いfmShareDenyNoneを
指定してみましたが変わらずです
425デフォルトの名無しさん:2007/02/13(火) 14:45:34
sDataのデータ型ってなんだ??ソースを見ると文字列型のような気がするけど、
ちゃんと読み込むデータのサイズになってるか??つか、Freeじゃなく、
ReadBufferでエラーになってるように思える。
426419:2007/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の部分でアクセスヴァイオレーションが
発生していたと思われます
お騒がせしました
427デフォルトの名無しさん:2007/02/13(火) 15:38:49
まあ、古式ゆかしい言語だから、ReadBufferみたいに
メモリアクセスが直接見えてる部分も残ってて、
それを面白いと思えればいいんだけど、
ミスすると原因不明な困ったバグを入れてしまう部分にもなりえるからな
428ななしへたぐらま ◆XcB18Bks.Y :2007/02/13(火) 15:40:53
>>426
sDataが空の時にsData[1]とするとアクセス違反になるので
空だったら読み書きしないようにする必要があります.
429デフォルトの名無しさん:2007/02/13(火) 16:07:06
  setlength(sData,fs.Size); //<---- これが必要だろ?
  fs.ReadBuffer(sData[1], fs.Size);
430デフォルトの名無しさん:2007/02/13(火) 19:40:54
>>429
> setlength(sData,fs.Size); //<---- これが必要だろ?
同意。
>>419のコードだと、書き込んだ同じ文字列を読み出しているからsDataの長さが
同じになっていて、たまたま問題が起きてないみたいだけど、本当は必要だよね。
431デフォルトの名無しさん:2007/02/13(火) 20:51:40
>428
SetLength(sData,fs.Size);
fs.ReadBuffer(PChar(sData)^,fs.Size);
ってことね。
432デフォルトの名無しさん:2007/02/13(火) 21:47:52
> 文字列をバイナリ形式で保存して

これどうやるの? ってか、バイナリ以外保存できるのか?
433デフォルトの名無しさん:2007/02/13(火) 22:15:13
バイナリとテキストの2つの形式があるよ
テキストで保存すると環境によって CR/LFがついたりLFだけになったり
といってもDelphiとKylixの2つの差だけどね
434デフォルトの名無しさん:2007/02/14(水) 04:27:14
で、バイナリ保存とやらで保存したファイルからファイルストリームで string に
代入とはこれいかに?
435デフォルトの名無しさん:2007/02/14(水) 08:08:31
>>427
VBなら新しい言語なのにね
436デフォルトの名無しさん: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
お前の発言だろうが(超新星爆)
脳ミソが溶けてる奴は記憶力が激低だな(ブラックホール爆)
437デフォルトの名無しさん:2007/02/14(水) 09:34:59
>>434
まあファイルストリームには、もはやテキストだのバイナリーだの区別はなくなってるから
若者には区別する事そのものが奇異に見えるんだろな。
438デフォルトの名無しさん:2007/02/14(水) 09:47:19
>>434
まあファイルストリームには、もはやテキストだのバイナリーだの区別はなくなってるから
若者には区別する事そのものが奇異に見えるんだろな。
439デフォルトの名無しさん:2007/02/14(水) 11:47:29
LabelのCaptionを上下方向の中央揃えをするにはどうしたらいいのでしょうか?
440デフォルトの名無しさん:2007/02/14(水) 11:56:16
AutoSizeプロパティをTrueにする
441デフォルトの名無しさん:2007/02/14(水) 12:18:45
TLabel.Layout
442デフォルトの名無しさん:2007/02/14(水) 12:46:41
>>441
できました。ありがとうございました
443デフォルトの名無しさん:2007/02/14(水) 14:06:23
自作アプリをタスクマネージャーのプロセスでチェックした場合、
メモリ使用量がWin2000で7MB、XPで47MBとOSによってむっちゃ差があるんですが、OSでメモリの計算式変わってます?

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

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

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

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

もしくは

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

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

気にするほどじゃない問題?
468デフォルトの名無しさん:2007/02/15(木) 13:58:09
俺の最近のお気に入りは、TMemoのStringListを使う事。
フォームをSizenableにして範囲外においておけば
見たいときにフォームサイズ変えれば直ぐに内容が見れて
デバッグも簡単だし。
処理結果とか書いていくようにすれば、ログ表示になるしね。
469デフォルトの名無しさん: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.
470デフォルトの名無しさん:2007/02/15(木) 14:03:33
>>467
publicには極力モノ置きたくないから前者
まあ気にするほどのもんじゃない
471デフォルトの名無しさん:2007/02/15(木) 14:09:11
>>467
そんなに気になるならTStringListを継承したのを作って
function CreateStringList:TStringList;
で、その継承したのを返すようにして、
Freeで実際にFreeせずに、ストックに入れておいて
次のCreateStringList:でストックしたのを返して、

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


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

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

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

ClientからServerにデータ送信

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

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

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

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

どうすればスクロールバーを表示したままにできるのか教えて頂けないでしょうか?
485デフォルトの名無しさん:2007/02/16(金) 01:19:43
delphi6 personal使ってます
文字だけで構成された(画像がないの意)ホームページソースの内容を
テキストファイルに保存するにはどうすれば良いでしょうか?

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

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

Indy使うと楽。

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


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

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

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

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

お手数ですが教えて下され
498デフォルトの名無しさん:2007/02/16(金) 16:03:01
499デフォルトの名無しさん: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をどう使えばいいのか見当がつかないです。
このメソッドを調べろ、など
ヒントをいただけないでしょうか。
すみませんよろしくお願いします。

500デフォルトの名無しさん:2007/02/16(金) 16:06:48
501499:2007/02/16(金) 16:09:28
うわすみません目の前に答えが
ありがとうございました
502デフォルトの名無しさん:2007/02/16(金) 21:48:53
>>495
try
except
on E : Exception do
begin
///
end;
end;
503デフォルトの名無しさん:2007/02/16(金) 22:27:57
超初心者用のはずなのに
504デフォルトの名無しさん:2007/02/16(金) 22:29:14
どのくらい分かるようになると、超初心者ではなくなりますか?
505デフォルトの名無しさん:2007/02/16(金) 22:51:59
構造型プログラミングを実践できれば超初心者脱皮
オブジェクト指向を理解実践できれば初心者脱皮
他言語の良さを理解できるようになると中級者脱皮
506デフォルトの名無しさん:2007/02/16(金) 22:55:28
他の言語に移ると上級者
言語なんざどうでもよくなると上級者脱皮
プログラミングやめるとやっと普通の常識人
507デフォルトの名無しさん:2007/02/16(金) 22:58:30
>>506
最後の一行だけは納得できる
508デフォルトの名無しさん:2007/02/16(金) 23:00:16
>>505
せんせい! VBの良さがわかりません!
509デフォルトの名無しさん:2007/02/16(金) 23:02:53
>>508
もう触る必要はありません。
510デフォルトの名無しさん:2007/02/16(金) 23:43:19
winならdelphi
携帯ならjava
cgiならperl

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

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

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

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

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

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

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

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

コードが少し長くなったのでここには貼り付けませんが必要でしたらうぷしますが…
535522:2007/02/18(日) 18:49:08
ダメだキーが手にはいらねー
つながらねーよヽ(`Д´)ノウワァァン
536デフォルトの名無しさん:2007/02/18(日) 19:10:35
くだすれってなんですか?
537デフォルトの名無しさん:2007/02/18(日) 21:13:31
哲学的な問いだな
うぅむ・・・
538デフォルトの名無しさん:2007/02/18(日) 21:25:50
くだらない質問はこのスレですれ

の略だっけか
539デフォルトの名無しさん:2007/02/18(日) 21:26:17
くだらない質問なんてしないプロ専用スレッド
~~~                    ~~~~
540デフォルトの名無しさん:2007/02/18(日) 21:31:01
くだけた質疑応答すれ
541デフォルトの名無しさん:2007/02/18(日) 21:55:20
くだすれとかけてマラソンととく
そのココロは↓
542デフォルトの名無しさん:2007/02/18(日) 22:00:17
ぼくはしらない
543デフォルトの名無しさん:2007/02/19(月) 03:46:18
>>512
これを使うんですね。ありがとうございます!
544デフォルトの名無しさん:2007/02/19(月) 03:50:06
>>542
誰がうまい事言えと

あ、書いてあったわ
545デフォルトの名無しさん:2007/02/19(月) 03:51:26
>>520
ありがとうございます。
VCLでのリンクだけなら自分のソースを公開しなくて良いみたいですね。
これで安心して会社で発言できます。
546デフォルトの名無しさん: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
で変換し、また、保存しようかと思いましたが、何とかこんなことを
せずに変換できませんでしょうか?;


547デフォルトの名無しさん:2007/02/19(月) 06:53:36
D7でFireBird1.5+IBXで開発してるのですが、IDEでIBDatabaseのconnectedプロパティをTrueにしたまま実行すると

Cannot perform operation -- DB is currently open

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


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

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

環境はDelphi6です。

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

正直、どういう風にコーディングするかさっぱりわかりません。
WindowsAPIをコールしてFD読み書きをするように
するんでしょうか?
559デフォルトの名無しさん:2007/02/19(月) 23:20:07
>>547
TIBDatabase.AllowStreamConnectedを参照のこと。
560デフォルトの名無しさん: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への
理解が深まりました。まだまだ奥深いようですが..
ありがとうございました。
561デフォルトの名無しさん: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
562デフォルトの名無しさん:2007/02/20(火) 08:23:31
質問させてください!
Memo1のTextにある改行を<ret>というタグに置き換えていきたいんですが、改行のコードはどんなのでしょうか?
また、StringReplaceで置き換えられるものでしょうか?
563デフォルトの名無しさん: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>';
564デフォルトの名無しさん:2007/02/20(火) 08:33:45
>>563
ありがとうございます!
一行ずつって手もありましたね…

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

566445:2007/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;

手続き名が間違ってるみたいなのですが・・・
567デフォルトの名無しさん: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;
568デフォルトの名無しさん:2007/02/20(火) 15:54:52
> procedure TForm1.Edit1.WMDropFiles(var msg: TWMDropFiles);
              ^^^^^
なにこれ?
569デフォルトの名無しさん: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)を渡して、個数を得てからループするべき
570デフォルトの名無しさん:2007/02/20(火) 16:07:56
勘違いしないように書くと、
 ここで言うサブクラスは Windows用語でメッセージフックのテクニックの事

TEditを継承するのではなく、(本来は継承すべきだけど)
TEditに流れるWindowsMessageを横取り(フッキング)して
処理内容を変更してしまうテクニックの事ね。
571デフォルトの名無しさん:2007/02/20(火) 19:35:36
サブクラスを使わなくても、Form1で選別すればできる。
572デフォルトの名無しさん:2007/02/20(火) 20:07:17
Form1? TApplicationのメッセージに割り込むんじゃなくて?
どうやるの?
573デフォルトの名無しさん:2007/02/20(火) 20:25:07
どうやるの?
574デフォルトの名無しさん:2007/02/20(火) 20:42:01
YOU TEditから派生した独自のクラス(コンポーネント)作っちゃいなYO
575デフォルトの名無しさん: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してしまうか
576デフォルトの名無しさん: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;
577デフォルトの名無しさん:2007/02/20(火) 21:30:19
>>576
最近のバージョンのAddtionalタブに増えてる ApplicationEvents だね
578デフォルトの名無しさん:2007/02/20(火) 21:32:38
D6 以降ですが。もう6年もたつわな。全然最近じゃない。がD7以降は無いのと一緒だからなぁ
579デフォルトの名無しさん: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;


580デフォルトの名無しさん: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;

関数にしておけばタイプ量は減らせる
581デフォルトの名無しさん:2007/02/20(火) 21:46:23
for つかって最初の一つだけとはこれいかに? コピペ丸出しじゃないの
582デフォルトの名無しさん:2007/02/20(火) 21:49:58
○ DragQueryFile(msg.Drop, i, PChar(FileName), Length(FileName));
× DragQueryFile(msg.Drop, 0, PChar(FileName), Length(FileName));
583デフォルトの名無しさん:2007/02/20(火) 21:55:28
○ cnt:= DragQueryFile(msg.Drop, DWORD(-1), nil, 0);
× DragQueryFile(msg.Drop, DWORD(-1), @cnt, 0);
584デフォルトの名無しさん:2007/02/20(火) 22:05:44
これが for ループに入ってますが

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

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

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

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

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

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

if 文一つがすべてのキューメッセージに対して実行されるから、どうだこうだ
いうんなら、そもそもVCLなんざ論外だわな。
598デフォルトの名無しさん:2007/02/21(水) 05:44:15
ユニットを二つ使っている場合
二つのユニットどちらからでも使える変数はどのように宣言すれば良いですか?
599デフォルトの名無しさん:2007/02/21(水) 05:49:58
すいません自己解決しました
public節に宣言すればいいのですね
600デフォルトの名無しさん: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千サイクル分の命令を入れたのと同じこと
601デフォルトの名無しさん:2007/02/21(水) 08:13:05
議論は他所でやれよ
おっさんミットモナイ
602デフォルトの名無しさん:2007/02/21(水) 09:11:31
>>596
UpdateScrollRangeがvirtualだったら良かったのにね。
personalでなければソース書き換えばいいんだろうけど、難しいね
603デフォルトの名無しさん:2007/02/21(水) 09:56:19
>>600

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

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

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

PeekMessage~DispatchMessage は高速道路であって、ここは早く流してやらないとね。
606デフォルトの名無しさん:2007/02/21(水) 13:02:32
その高速道路で無駄コードを実行しながらよたよた走ってるのがVCLなんだな。
イベントのうちハンドラが設定されるのは1割以下。9割以上のメッセージ処理
はVCLの無駄コードを実行してから DispatchMessage() に復帰するんだよ。
そもそもApplication.OnMessage だってコード書かなくても、イベントが設定さ
れてるかどうか毎回見に行ってるし。VCL のOOPの機能の一つだ。ほか使ってて
このイベントだけごちゃごちゃいうのは変。
607デフォルトの名無しさん:2007/02/21(水) 14:30:19
滅多に来ないメッセージがどんなに重く処理されてようが、関係ないない?

感覚的には一番頻度の高くなるメッセージは
1、マルチメディア系でコールバックにメッセージを使った場合
2、タイマー
3、MouseMove
4、Paint
で、これらはやってくるとなると集中的で、なおかつ応答が悪いと体感されちゃうでしょ?
608デフォルトの名無しさん:2007/02/21(水) 16:20:20
他所でやれよ馬鹿
迷惑なんだよ
609デフォルトの名無しさん:2007/02/21(水) 16:32:03
別に迷惑じゃないが。
610デフォルトの名無しさん:2007/02/21(水) 16:46:23
枯れ木も山の賑わいさ。 質問はいつでも受け付けてるよ。
611デフォルトの名無しさん:2007/02/21(水) 18:33:37
DispatchMessageに渡さず、 Application.OnMessageで自分で処理したほうが
速いよ。 
612デフォルトの名無しさん:2007/02/21(水) 18:47:16
もういいじゃん。ほとんどのケースではどっちで処理しようが、速度の違い体感できないんだから。
613デフォルトの名無しさん:2007/02/21(水) 19:06:54
議論の最中に恐縮ですが、また直接Delphiと関連がないことかも知れないのですが
{$R sound.RES}
として効果音のリソースを取り込んでいます。リソースはbrcc32で作りました。
で、この効果音の制作会社に「WEB等で公開する場合は、第三者が素材音源を
ダウンロードして二次利用出来ない形でお願い致します」と言われています。
この場合、このプログラムはWebサイトで公開できるものなのでしょうか。
614デフォルトの名無しさん:2007/02/21(水) 19:11:23
>>613
リソースだと容易に抽出できちゃうから、厳密に言うとまずいだろう。
暗号化してリソースに入れて、使うときに複合化するべきだな。
615デフォルトの名無しさん:2007/02/21(水) 19:14:24
>>613
聞いてみるのが一番だよ。

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

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

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

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

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

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

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

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

ゴメン。詰問口調になったけど、自分自身答えが見つからなくて不安なんだ。
640デフォルトの名無しさん:2007/02/22(木) 13:02:44
ウゼェ
641デフォルトの名無しさん:2007/02/22(木) 13:18:55
おっさん達キモイからどっか行けよ
質問者が来づらいだろ
642デフォルトの名無しさん:2007/02/22(木) 13:24:44
>>639
その話知ってるって。開発環境レベルでどうこうできる問題じゃないだろ。
643デフォルトの名無しさん:2007/02/22(木) 16:12:27
>>576をやってみたのですが、ファイルを読み込んでくれません。
Additionalから何か追加しなければならないのでしょうか?
644デフォルトの名無しさん:2007/02/22(木) 16:14:30
あれはファイル名を読み込むだけ
中身を読み込みたいなら自前でファイル名に対して
AssignFile、TStringList、TFileStreamとか使わないと
645デフォルトの名無しさん:2007/02/22(木) 16:31:10
TOpenDialogなんで使わないんだろう・・・
646デフォルトの名無しさん:2007/02/22(木) 17:05:19
>>644
言い方が変でしたスミマセン。
エディタに放り込むことは出来るのですが、放り込んだ後
エディタにファイル名が読み込めていないのです。
647デフォルトの名無しさん:2007/02/22(木) 17:07:28
イベントハンドラが設定されてない、とか? コピペするだけして・・
648デフォルトの名無しさん:2007/02/22(木) 22:39:27
特定のフォルダ内の全てのテキストファイルを探す処理はどうすれば良いですか?
具体的にはwindowsのファイル検索のような処理をしたいのです

FindFirstのワイルドカード(*.txt)を使うと
forやwhileを使ってもいつも同じファイル名を返し
フォルダ内のファイル名一覧になりません

どうすれば良いか教えて下さい
649デフォルトの名無しさん:2007/02/22(木) 22:50:21
ヘルプを読む。

|FindFirst は,Path で指定された~一致する最初のファイルを検索します。
                           ^^^^^^^^^^^^^^^^^^
故に
>forやwhileを使ってもいつも同じファイル名を返し
は正しい。

|関連情報
|SysUtils.FindClose
|SysUtils.FindNext
650デフォルトの名無しさん:2007/02/23(金) 00:24:19
>>647
ドラッグ&ドロップは
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
でファイル名の取得を行なっているのではないのですか?
これの他にもイベントハンドラが必要なのでしょうか。
651デフォルトの名無しさん:2007/02/23(金) 00:50:28
2007でもUTF16対応しないのかorz
652デフォルトの名無しさん:2007/02/23(金) 01:02:50
>>650
ちゃんとIDEでイベントハンドラを設定してあるか確認してみては?

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

>>653
RegisterPropertiesInCategory
655デフォルトの名無しさん:2007/02/23(金) 07:51:06
>>626
だからできないのをdelのせいにすんなって。
まあ初心者スレだから仕方ないか。
656デフォルトの名無しさん:2007/02/23(金) 07:53:43
というかウニ厨は.netにいって帰ってこなきゃいいのに
657デフォルトの名無しさん:2007/02/23(金) 08:57:45
>>655
超初心者に初心者が教えるスレだからなw
658デフォルトの名無しさん: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 のループに行ってしまうし・・
659658:2007/02/23(金) 12:48:09
自己レスです。
breakでOKでした。大ボケかましてしまった・・。
660デフォルトの名無しさん:2007/02/23(金) 19:09:24
質問です

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

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

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

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

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

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

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

微妙に勘違いさせちゃわないか、その書き方。
あえて言えば、
array[0..適当] of byte のポインタ
かな
669デフォルトの名無しさん:2007/02/23(金) 21:21:51
ひどいな、このスレ。とくに回答者。Del はもうこんな状況なのか? 絶望的・・・
670デフォルトの名無しさん:2007/02/23(金) 21:39:26
>>655
できないのは、いまだに非対応なDelのせいですが? なにか?
671デフォルトの名無しさん:2007/02/23(金) 22:09:39
TNT つかえば解決、とか思ってるんじゃね? 初心者だから。
672デフォルトの名無しさん:2007/02/23(金) 23:07:14
使用許諾コードの取得ができねぇConection Failedになる
CDコードとパスワードの取得も鯖につながんねぇしどうなっとるんだ
導入の時点で問題ありすぎオワタ\(^o^)/
673デフォルトの名無しさん:2007/02/23(金) 23:12:15
そんな事はてめぇの日記帳にでも書いてろバーカ
674デフォルトの名無しさん:2007/02/23(金) 23:18:18
マジでどうすりゃいいか教えてよ
つかいたいんだけどDelphi6
675デフォルトの名無しさん:2007/02/24(土) 00:07:32
製品版、買いなよ。
本当にはじめたいんならさ。
676デフォルトの名無しさん:2007/02/24(土) 01:18:31
そうなんだけどトライアルで試してみないことには…
月曜になったらボーランドに直接問い合わせてみることにした
677デフォルトの名無しさん:2007/02/24(土) 07:23:39
最初からそうしろよ低脳が
678デフォルトの名無しさん:2007/02/24(土) 07:45:58
codegearとborlandのリンクが入り混じってアチコチリンク切れになってるね
Delphi for PHP の発売で変更とか忙しいのだろ

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

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


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

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

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

if FileGetAttr(Dirname) = faDirectory

これで判断してるのですが、ディレクトリ判定されないフォルダが偶にあります。
もっと正確な判断方法はないでしょうか?
697デフォルトの名無しさん:2007/02/26(月) 08:21:48
if (FileGetAttr(Dirname) and faDirectory)<>0
698デフォルトの名無しさん:2007/02/26(月) 09:41:37
一般のソフトに良くある
メニューのオプションを選択すると
オプション設定用の別窓(form?)が開くアプリを作りたいのですが
2つ目のformの呼び出し方がわかりません

やり方のヒントだけでも教えて下さいorz
699デフォルトの名無しさん:2007/02/26(月) 10:01:52
フォームを新規作成したよね? そのフォームの名前を変更しよう  
変更しないままのForm2だとすると

そしたら1つ目のフォームにボタン配置して、ダブルクリック
 Form2.Show;
と1行書く。 実行させようとしたら、 ユニットを追加しますか と聞いてくれる
700デフォルトの名無しさん:2007/02/26(月) 12:18:28
>>697
ありがとうございます。
701デフォルトの名無しさん:2007/02/26(月) 12:50:59
For i:=0 to 1000 do begin
 if i = x then break;
end;

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

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

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

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

その場合だと i = x の条件を満たしてループを抜けた時に限り
iの値はxとなる
それ以外でループを抜けた場合はiの値は不定
1000かもしれないし0かもしれない
713デフォルトの名無しさん:2007/02/27(火) 15:27:28
普通にwhile文を使えばいいのでは?
714デフォルトの名無しさん:2007/02/27(火) 16:10:15
ある文字列の中にある文字が何個あるかをカウントしたいんですが、forループで自分でカウント取るしかないんでしょうか?
715デフォルトの名無しさん:2007/02/27(火) 16:16:28
そーですね。
716デフォルトの名無しさん:2007/02/27(火) 16:26:27
AnsiStringで漢字をカウントだと、ちょっとメンドクサイな
AnsiStrPosで検索してはカウントするかな
717デフォルトの名無しさん: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;
718デフォルトの名無しさん: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;
719デフォルトの名無しさん:2007/02/27(火) 16:45:43
>>718
巧いけど、先に CR/LFを殺してからやらないと、既にCR/LFが入ってるとマズイよ
720デフォルトの名無しさん:2007/02/27(火) 16:46:05
そっちの方が簡単だね
TStringList.StrinReplaceはクソ遅いから
文字列が長くなるとかなり時間喰うのがアレだけど
まあ、俺が作ったやつだってString使ってるんだからあんまり変わらんか
721デフォルトの名無しさん:2007/02/27(火) 16:46:28
sSubStrにCRLFが入ってるかもな。
722デフォルトの名無しさん:2007/02/27(火) 16:47:10
漢字コードの1バイト目、2バイト目を意識して無いと
って書いてたら>>718
723718:2007/02/27(火) 17:04:52
もっと色々突っ込んでくれ。
724デフォルトの名無しさん:2007/02/27(火) 17:16:18
まずは力を抜いて四つん這いになるんだ
725709:2007/02/27(火) 17:26:35
>>710
>標準の TWebBrowser を使わない理由ってなに?

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

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

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

電話かねー。
734デフォルトの名無しさん: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;
735デフォルトの名無しさん: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;
736デフォルトの名無しさん:2007/02/27(火) 22:14:57
>>734
 c.Free;
 c := nil;
インスタンスを破棄したのにそこにnilを代入とな!?
737デフォルトの名無しさん: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;
738734:2007/02/27(火) 22:48:27
>>737さんの方法だと上手くいくのですが
ポインタを使った方法をやってみたくて>>734みたいなコードになりました。
どうにも勘違いしてたようで
var c, c2: TStringList;
begin
 c := TStringList.Create;
 c2 := c;
 c := nil;
end;
と、するとc2を調べてもnilが返ってくるだろうと思ってました。
インスタンス、ポインタなどもっと調べてみる事にします。
レス付けてくれた方どうもありがとうございます。
739ミ,,゚Д゚彡 ◆A6VzDeLphI :2007/02/28(水) 01:28:42
740デフォルトの名無しさん:2007/02/28(水) 02:39:28
>するとc2を調べてもnilが返ってくるだろうと思ってました。

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

var
n1,n2:integer;

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

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

が・・!

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

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

メインフォームに必要な情報いれてセットしたら、メインフォームは最小化
してサブフォームだけで作業するようなPGを作りたいのです・・。
743デフォルトの名無しさん: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;
でいけるんじゃないか?
744デフォルトの名無しさん:2007/02/28(水) 06:02:59
ぐはっ!半角スペース直すの忘れたorz
745デフォルトの名無しさん:2007/02/28(水) 06:47:38
>>743
横から失礼します
長い間悩んでた事が解決しました、感謝感謝
746デフォルトの名無しさん: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データをバイト配列から取り出すことは出来るのですが
色が白黒になってしまいます。
何が原因でしょうか?
747デフォルトの名無しさん:2007/02/28(水) 13:27:43
>>746
元々は白黒じゃなかったんだよね? だったらパレットが付いてないんじゃないの?
748デフォルトの名無しさん:2007/02/28(水) 13:50:43
WordのマクロをDelphiで書いて、自動実行させようとしたら、Wordのマクロ見ると:=とかpascalっぽい記述。
こんなんどうしろっつーんじゃ!!
749デフォルトの名無しさん:2007/02/28(水) 13:51:57
>>748
なんか面白そうな事やってるね。 もうちっと詳しく書いてくれたら皆んなも楽しめるかも
750748:2007/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
751デフォルトの名無しさん:2007/02/28(水) 14:01:07
>>750
それはVBAじゃないのか? Delphiでどうしたいの?
752750:2007/02/28(水) 14:15:21
この処理を、Delphiで書きたいだけだよ。
753デフォルトの名無しさん:2007/02/28(水) 14:19:06
>>752
オートメーションコントローラとして?
754デフォルトの名無しさん: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;
755デフォルトの名無しさん:2007/03/01(木) 12:52:38
あの質問です。delphi6personalをインストールするときの、キーが分らないんです。
登録して、アンケート答えて、キーをメールで送信するってとこをクリックしてもページが見つかりませんとなってしまう。
どうすればいいですか??
756デフォルトの名無しさん:2007/03/01(木) 12:53:59
インストールできません
757デフォルトの名無しさん:2007/03/01(木) 12:55:11
758デフォルトの名無しさん:2007/03/01(木) 13:33:14
>>755
ウェブサイトを弄っている途中みたい。
面倒だがボーランドに電話汁。
759デフォルトの名無しさん:2007/03/01(木) 13:38:07
http://dn.codegear.com/article/33580
>4、. http://register.borland.com/delphi6 にアクセスします。

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

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

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

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

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

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

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

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

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

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

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

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

PHP使いたいんだが、マニュアルやらサンプルやら全部英語だと滅入っちまう…
日本語環境では保証ありませんとか書いてるし。
796デフォルトの名無しさん
>>日本語環境では保証ありませんとか書いてるし。
これかなり重要だよな
マルチバイト文字環境では動作不安定とかマジ日常茶飯事