くだすれDelphi(超初心者用)その51at TECH
くだすれDelphi(超初心者用)その51 - 暇つぶし2ch86:デフォルトの名無しさん
10/01/08 18:56:24
>>80
えと、ですね。
職場用のアプリを作っているんですが、いくつものアプリ(プロジェクト?)
に分けなきゃならないほど、いっぱいフォームがあって、ついでに似たような
処理のフォームがやけにいっぱいあるので、その処理をどこかにまとめて書いて
おけないかなと(「フォームを開く」ってのもその似たような処理のひとつ)

87:デフォルトの名無しさん
10/01/09 23:25:17
>>86
TFrameとか使うのかも知れない

88:デフォルトの名無しさん
10/01/10 05:48:30
>>86
それだとちょっとおかしくないかな?
あの処理はフォームを「開く」処理じゃなくてフォームを「作る」処理だよ
そもそもApplication.CreateFormは自分で呼ぶことはあまりない関数だし

89:デフォルトの名無しさん
10/01/10 08:48:58
何でそんなところに絡みたがるのかがよくわからん

90:デフォルトの名無しさん
10/01/10 11:33:17
無料のdelphiって無いですか?
昔personal6ってのがあったのですが・・・

91:デフォルトの名無しさん
10/01/10 11:40:02
Turbo Delphi Explorerってのがあったけどそれもなくなった。
今あるのは期間限定のトライアルのみ。
新会社の方針として完全にアマチュアそっちのけになったのだろう。
某が潰れる前にDel6Per認証解除パッチでも出してくれればよかったのに。

92:デフォルトの名無しさん
10/01/10 12:10:38
ボーランド終わったな

93:デフォルトの名無しさん
10/01/10 13:06:54
もうとっくにEmbarcaderoに身売り済みですが


94:デフォルトの名無しさん
10/01/10 15:10:16
del6personalって認証しないでも一応使えるぞ
いいのか悪いのか別としてw

95:デフォルトの名無しさん
10/01/10 15:25:13
そもそもダウンロード出来るところがなくなっちゃった

96:デフォルトの名無しさん
10/01/10 15:28:01
どっかの大学がサイトに置いて無かったっけ

97:デフォルトの名無しさん
10/01/10 15:30:39
もう無いよ

98:デフォルトの名無しさん
10/01/10 16:14:27
CodeGearからダウンロードしたのがあったなと思って、
ディスクのなかを探してみたら
Turbo Pascal 3.0
が出てきた。なつかしい・・・・


99:デフォルトの名無しさん
10/01/10 16:18:01
delphi6personalとturbodelphiどっちもあるけど再配布とかしたらウルサイこと言われんのかな?

100:デフォルトの名無しさん
10/01/10 16:45:21
俺は言わないよ

101:デフォルトの名無しさん
10/01/10 16:52:02
そういえば大学の図書館のdelphi6の本で付属CD-ROMに入ってたぞpersonal
大きい図書館で探せばあるかもね

102:デフォルトの名無しさん
10/01/10 18:42:38
>>88
おかしいと言われ、もしかしてと不安になって、ちょっとだけ実験。
ああやっぱりとショック受けてます。

フォームは全部visible、起動時クリエイトはform1だけにしてました
作業を始めたとき、かなりの数のフォームになりそうだってことで
起動時の一気生成は絶対無茶だって思ったんです。
でもけっきょく分割しなきゃならなくなり、一アプリあたりのフォーム数はせいぜい10.
10個の一気生成ってのもそれはそれは不安を誘いますけど
メインフォーム以外のクリエイト時プロシージャをコメントアウトしたうえ
実験してみたら、まったくどうってことありませんでした。
(起動時間もメモリ消費も違いがなさ過ぎて唖然)

書き直したほうがいいですか?

>>87
助言ありがとうございます
落ち着いたら調べてみます(いまかなりあせってる)

103:デフォルトの名無しさん
10/01/10 21:23:12
turboはあるから6が欲しいなぁ

104:デフォルトの名無しさん
10/01/10 23:05:37
>>102
10個程度は全然大した数じゃないよ
例え100個作ってもOnCreate内の処理(時間)が少しだけならほとんど変わらない
素直にIDEが自動生成したコードでフォーム作ればOKだと思う

105:デフォルトの名無しさん
10/01/11 00:44:12
基本となるフォームひとつだけ作って、条件ごとに変化するようにすればいい
似たようなフォームをたくさん作るなんてアホすぎる・・・

106:デフォルトの名無しさん
10/01/11 11:49:08
とりあえず10個のフォームにどんな違いがあるのかさらしたら?
些細なものならCreate時に対応
何せ基本はいるときに作って使ったらすぐに消すことだよ

107:デフォルトの名無しさん
10/01/11 18:30:14
>>条件ごとに変化するようにすればいい
ごめんなさい、そのやりかたは、何ていうかイヤなんです。
使っているうちに機能追加が出てくるのは分かりきっているので。
複雑になりすぎてわけわかんなくなります(前にMSAccsessで痛い目にあってる)

>>10個のフォームにどんな違いがあるのかさらしたら
10個ってのは似てる物の数じゃないです。アプリを分割して一アプリあたり
それぐらいにとどめようかなと。
最終的にいくになるかは分かりません。

ところで
>>基本はいるときに作って使ったらすぐに消すことだよ
これは、フォームの立ち上げ方のことですか。
Show,Hideじゃなく、Create,Releaseでもいいと?
だとすると助かるんですけど(書き直そうと思ってた、というかすでに一部
書き直しに入って早くも泥沼)

108:デフォルトの名無しさん
10/01/11 19:26:30
VBプログラマぽい考え方だねw AccessでVBAやってたんでしょ

109:デフォルトの名無しさん
10/01/11 19:36:28
はい
というかちょっと前まではそれしかいじったことがないです。
プログラマなんてものではないです。

110:デフォルトの名無しさん
10/01/11 20:30:05
>>>基本はいるときに作って使ったらすぐに消すことだよ?
>これは、フォームの立ち上げ方のことですか。
俺も基本は必要になったら、フォームをCreateしていらなくなったらRelease。

111:デフォルトの名無しさん
10/01/11 22:02:14
なんとなくだけど「はい・いいえ・キャンセル」程度のダイアログもフォームで自作してそうだなw

112:デフォルトの名無しさん
10/01/12 13:50:38
delphi 6 personal見つけてインスコしたけど
special launchのソース読み込むと
txpmanifestが見つかりません。とかエラーが出るおorz

113:デフォルトの名無しさん
10/01/12 13:52:15
personalにXPManifestはなかった筈

114:デフォルトの名無しさん
10/01/12 14:30:01
personalかどうかは関係ないだろ
そもそも6には存在しないんだから

115:デフォルトの名無しさん
10/01/12 14:32:29
そうだった勘違いしてた

116:デフォルトの名無しさん
10/01/12 14:38:12
えー
special launchって6じゃないのかorz

117:デフォルトの名無しさん
10/01/12 15:45:13
delphi 7ください!

118:デフォルトの名無しさん
10/01/12 15:53:41
>>111
版権物のソフトだと全部のダイアログにイラスト出せとか無理言われる

119:デフォルトの名無しさん
10/01/12 19:42:35
>>118
その程度ならいちいちフォームを設計しなくても、CreateMessageDialogで取得したTFormのインスタンスに
動的にTImage等を作成して乗っけてやればいい
むしろ全部に出さないといけないならコードでやった方が楽

120:デフォルトの名無しさん
10/01/12 21:45:50
SetLengthで確保した領域は次回SetLengthの時に勝手に解放してくれますか?


121:デフォルトの名無しさん
10/01/12 23:08:24
やってみれば分かるが解放される

122:デフォルトの名無しさん
10/01/13 02:41:37
>>120
ソースが見れるならSystem.pasの該当箇所を見ればSetLengthが内部では何やってるか分かる

123:デフォルトの名無しさん
10/01/13 02:44:31
ソースは読めるのにスレタイは読めないのか

124:デフォルトの名無しさん
10/01/13 03:20:57
>>121>>122
ありがとうございます
system.pas覗いてみますわ

125:デフォルトの名無しさん
10/01/13 11:29:02
del7で簡単なCGIを作りたくてdelを使ったCGI作成は
ググって大体分かったのですが、フォームの内容を
メール送信する時ってどうすればいいか、教えてください。
sendmaneとか見つけたのですが、利用制限があるので
(個人使用なので引っかかることはないのですが)
出来れば制限のない方法があれば教えて欲しいです。
よろしくお願いします。

126:デフォルトの名無しさん
10/01/13 11:45:51
普通にindy使えばよくね?


127:デフォルトの名無しさん
10/01/13 12:05:34
㌧です。
Indyスレ行ってきます。

128:デフォルトの名無しさん
10/01/14 22:01:40
indyは正直使えない

129:デフォルトの名無しさん
10/01/14 23:26:35
わけでもない

130:デフォルトの名無しさん
10/01/14 23:42:18
男は黙って

131:デフォルトの名無しさん
10/01/15 00:04:48
indy

132:デフォルトの名無しさん
10/01/15 07:53:00
TIdMessageは腐っているが
それ以外は、まあまあ使える


133:デフォルトの名無しさん
10/01/15 08:31:16
Synapse最高!

134:デフォルトの名無しさん
10/01/15 11:08:43
メールくらいソケット通信でやればよし

135:デフォルトの名無しさん
10/01/15 13:11:36
というわけでもない

136:デフォルトの名無しさん
10/01/15 21:19:11
匿名関数をWin32APIのコールバックとして渡すことは可能でしょうか?
例えば次のようなことがしたいです
EnumWindows(
 function(hwnd: HWND; lParam: LPARAM): BOOL
 begin
  // 処理
 end, 0
);
MakeObjectInstanceのようなものがあればよいのですが…。
バージョンは2010です。

137:デフォルトの名無しさん
10/01/16 18:18:21
これから試してみるけど
全力わはー
URLリンク(d.hatena.ne.jp)
これが参考になるだろうか。

138:デフォルトの名無しさん
10/01/16 18:44:49
無名関数に STDCALL つけられないから、コールバックにはそのままでは使えないな。


139:デフォルトの名無しさん
10/01/18 01:04:17
>>138
俺、delphi2010使ってないからよく分かんないけど、できたのかな?
URLリンク(d.hatena.ne.jp)

ってゆうかもしかして、本人様?

140:デフォルトの名無しさん
10/01/18 01:14:18
stdcallを指定してもまだコールバックとしては使えないみたいですね…。

141:デフォルトの名無しさん
10/01/18 08:17:12
stdcall 指定した無名関数から、関数のポインタだけを取り出す。
無名関数が親関数が終了するまで存在し続ける

この二つを実装、確認しないといけないですね
もう少し時間が必要です


142:デフォルトの名無しさん
10/01/18 14:43:06
>>137
2010持ってないから何やってるのかわからないんだけど、これってすごいの?

143:デフォルトの名無しさん
10/01/18 15:06:53
すごいっていうかもうlambdaはあって当たり前の機能

144:デフォルトの名無しさん
10/01/18 17:38:44
TStringListのCustomSortに無名関数が渡せない俺

145:デフォルトの名無しさん
10/01/18 23:03:13
Delphi 2010についてるQA検査を何となく使ってみたところ、
parameter 'XX' でCamel記法を使用、というのが警告の対象になったんですが、
Camel記法ってDelphiの推奨の命名法じゃなかったでしたっけ。
サンプルコードも大体Camelになってますし。
試しに変数名を小文字開始にしたら、警告対象外にはなったんですが。
新しめのコーディング規約とか、どこかにまとまってますか?

146:デフォルトの名無しさん
10/01/18 23:13:52
Pascalは昔からPascal記法だろ
言語名が記法の名前になってるくらいで新しくも何ともない
まとめ探す前に基本を勉強し直してこい

147:145
10/01/18 23:24:02
>>146
あぁ。camelっていうと先頭小文字を呼び分けるときにも使うんでしたっけ。

引数をPascal記法(InfixCaps、先頭大文字、単語の頭大文字)で記述しているにもかかわらず、
QA検査にかけると、「parameter 'XX' でCamel記法を使用」という警告が出てきて、
引数の頭文字が大文字なのは普通だろ、なんで警告出すんだ、と思ったので、
まさかどこかで推奨の命名法が先頭小文字に変わった? と思って質問した次第です。

「昔からPascal」なのは知ってるので、それで警告出されて不思議に思ったってことですね。


148:デフォルトの名無しさん
10/01/18 23:38:48
プログラミングでcamelっていったら普通はlower camel caseを指すと思うが

149:デフォルトの名無しさん
10/01/18 23:46:12
>>147
検査項目をクリックする時間の方がここで回答を待つ時間より早いと思いませんか?

150:デフォルトの名無しさん
10/01/19 00:45:45
>>147
試してみたら確かに警告出たが、そもそもこんな機能あることすら知らなかったぞ
[Camel記法を使用]って、使用しろ、なのか使用しているから警告、なのかこの日本語だと分からんな

>>149
警告の内容が妥当かどうかの質問なんじゃないのか?
警告が出たのに意味も分からずにOffにするってのはナンセンスだと思うが。
しかし警告自体がナンセンスだからOffにしとけ>>147

Javaとかだとcamelっていうと大体lowerを指すけれど、
DelphiでCamelっていうとUpperだと思ってる俺って古いのかな。
URLリンク(edn.embarcadero.com)
古いドキュメントだが、これにもThis is known as InfixCaps, or Camel Caps.
って書いてあるんだよな。
最近読んだものだと、cakephpとかのマニュアルもupperを単にcamelって書いてあった気がする。
影響力だか呼び分けだかでlower > upperなのは同意

151:デフォルトの名無しさん
10/01/19 03:02:11
PByteArrayの長さを取得するにはどうすればいいでしょうか。
Lengthは文字列しか受け付けてくれないみたいで……

152:デフォルトの名無しさん
10/01/19 03:04:37
それは質問自体が破綻している。
ソースで示さないとわからない。

153:デフォルトの名無しさん
10/01/19 03:41:49
Length(PByteArray)みたいな形で一発取得出来る関数があるものとばかり思い込んでいました。恥ずかしい
ソースで示さないとということは、中身に合わせて一桁ずつ中身があるかどうかを確認してカウントしないといけない、
ということでよろしいでしょうか?

Delphi全然慣れていないので型周りの把握が全然です。

154:デフォルトの名無しさん
10/01/19 04:04:33
慣れてないならPByteArrayは尚更使用すべきじゃないと思う
>>152のいうようにまずどういう状態かソースで示せ

155:デフォルトの名無しさん
10/01/19 10:03:53
Byteは0~255の何を入れても構わないので「中身があるかどうかの確認」なんてやりようがない。
PByteArrayが何を指しているのかわからないので、サイズを一般的に求める方法はない。
だからみなさんがソースを出せと言ってる。

文字列や配列でLengthが使えるのは、内部的にサイズを記録してあるから。

156:デフォルトの名無しさん
10/01/19 10:40:14
くだすれだし、もう少し優しい言い方でも良いかなぁ。とおもいつつ。

Length (組み込み)関数が使えるのは「長い文字列型 (AnsiString, WideString, UnicodeString)」 と
「動的配列 (array of ~)」です。

PByteArray の定義上の型は 「TByteArray へのポインタ」で
TByteArray は Byte 型の「静的」配列となっています。

この TByteArray型は動的配列が Delphi 言語に導入される前に使われていた、長さ不定の Byte 配列を
参照するための便宜的な型です。範囲チェックをオフにすることで任意のインデックスの場所を参照できました。
もちろん配列の領域確保と正しい場所へのアクセスはプログラム自身が保証する必要があります

現在は動的配列が導入されたため、領域確保に関しては動的配列を使えば解決できます。
Length または High を使えば実行時に配列の大きさを知ることもできます。

PByteArray 型は、キャストすることによって任意のポインタを Byte の配列として扱えるため
動的配列が導入された後もよく使われます。

PByteArray 型単体では、単なるポインタなのでコンパイラも(回答者も)それ以上のことは何も判りません。
PByteArray 型の指す実体が、何によって確保されているかによって、その実体の大きさを取得する方法は異なります。
PByteArray 型として格納されているポインタが不定なのであれば、そのポインタの指す「何か」の大きさを
知る方法は、まずありません。設計から見直しましょう。

157:デフォルトの名無しさん
10/01/19 12:42:04
あの、、、そんなこと長々と言われても分からないので。。。。
慣れてないって言ってるでしょう。。。

158:デフォルトの名無しさん
10/01/19 14:37:34
Delphi6 personalを使用しています
IDEでファイルを複数開いていて、IDEを再起動したとき
ファイルが1つしか開いてない状態になるんですが、
ファイルが複数開いたまま起動するにはどうしたらいいでしょうか?

159:デフォルトの名無しさん
10/01/19 14:57:04
D7なのでD6とはメニューの名前は違うかもしれないけど
ツール→環境オプション→設定タブ
自動保存の設定 内の プロジェクトデスクトップ にチェック

160:158
10/01/19 17:03:24
>>159
できました、ありがとうございます

161:デフォルトの名無しさん
10/01/21 16:08:30
そうそう それぐらいの答えやすい質問をしろ ポインタ配列なんか難しくてわかんないから

162:デフォルトの名無しさん
10/01/21 17:19:01
知らないならレスしないでいいです >161

163:デフォルトの名無しさん
10/01/21 17:24:53
>>161の頭を初期化しようとしたのですが、
「回復不能なエラーです」
という表示が出て初期化できません。
これはバグでしょうか?

164:デフォルトの名無しさん
10/01/21 18:25:57
初期化ではなくFreeAndNilをご利用ください。

165:デフォルトの名無しさん
10/01/21 18:30:14
>>162
間違ってるぞお前
正しくは「知らないならレスしないでください。ウザイだけです。」だ

166:デフォルトの名無しさん
10/01/21 19:17:26
わかりました。

>>165
知らないならレスしないでください。ウザイだけです。

167:151
10/01/21 22:56:51
>>154-155
メモリ確保したり解放したりガチャガチャやっているので、PByteArrayを使っています。
Delphi内部で扱う分には出来るだけ安全な型で処理したいものですが、
DLLファイルでポインタを受けたり投げたりもしているので、その辺りはポインタを生で扱っています。
はっきり把握出来ている部分だと速度の為に直接メモリ弄ったりビット演算したりもするんですけれど……。

>>156
どうもありがとうございます。別で長さを管理して、ポインタ代入時やデータ更新時に併せて更新するように書き直しました。

少しDelphiにも慣れてきたのでテストコード一杯書きながら色々確認しています。
答えて貰えるだけでもありがたいですし、ソースを出せ、というのもわざわざ確認してくれようという思いからでしょうし、
ありがたい限りです。どうもありがとうございます。

しかしくだすれでも偽物って沸くんですね……。回答遅くなった私が悪いのか。


168:デフォルトの名無しさん
10/01/21 23:35:26
分かってるのに聞いたの?
タチ悪いね

169:デフォルトの名無しさん
10/01/22 03:46:38
はいはい。素直に負けをみとめろや > 168

>くだすれでも偽物って沸く
2ch ですから。必要に応じてトリップ使いましょう

170:デフォルトの名無しさん
10/01/22 10:11:16
Delphi2010でCtrl+Dを押すとコードが整形されてしまうので
これを抑止したいのですが可能でしょうか?

あるいは、コードフォーマッタの設定で、
{$REGION 'ほにゃ'}
{$ENDREGION}
の前後に空行を入れる設定はあるでしょうか?
どちらかできればよいのですが…

171:デフォルトの名無しさん
10/01/22 10:51:28
リファクタリングのショートカットの Ctrl-D を抑止することはできません。

{$REGION を含むコメントの前後に空白を入れる機能はありません

Ctrl-D に関しては、カスタム拡張モジュールを作成できれば抑制できるかもしれません。

コードフォーマッターそのものを停止して良いのであれば
bin\Embarcadero.Modeling.Formatter.dll
を別の名前にリネームして再起動すれば Ctrl-D のキーアサインごと消えて無くなります。

レジストリでコントロールできない。のかな?だれか知ってるひといないかな?

172:170
10/01/22 11:40:17
>>171
ありがとうございます。
フォーマッタ自体を使えなくしたかったので、
DLLのリネームで事足りました。
Ctrl+SとかCtrl+Cを押し間違えたとき勝手に
整形されるのでイライラしておりました。

173:デフォルトの名無しさん
10/01/22 12:59:56
>>169
厨ってすぐに勝ち負けとか言い出すよね
何かトラウマでもあるのかな?かわいそう

174:デフォルトの名無しさん
10/01/22 14:00:13
64bitのバイナリ出力できるようになるのは次のバージョンからですか?

175:デフォルトの名無しさん
10/01/22 15:31:21
>>174
迷子ですか?新スレ立ってますよ
スレリンク(tech板)

176:デフォルトの名無しさん
10/01/24 22:58:15
ポップアップメニューを表示してそれを選ぶなりキャンセルするなりしたら即終了する
フォームを一切出さないフォームアプリってどうやって作ればいいんですか?

177:名無し募集中。。。
10/01/24 23:30:35
メインウィンドウ非表示&スプラッシュウィンドウで

178:デフォルトの名無しさん
10/01/25 15:09:59
ポップアップ出すだけなら、非表示どころかそもそも作る必要すらない
スプラッシュウィンドウも然り
TPopupMenuとTMenuItemを動的生成するだけでいい

179:デフォルトの名無しさん
10/01/29 19:48:25
DMonkeyってやたらexeのサイズが大きくなるけど
マイナーな機能取っ払ってサイズを劇的に小さくする技ってないの?

180:デフォルトの名無しさん
10/01/30 03:00:37
あの程度のサイズ増加を気にするのはお前だけ

181:デフォルトの名無しさん
10/01/31 06:57:17
>>179
あるよ

182:デフォルトの名無しさん
10/02/01 15:02:08
>>179
ないよ

183:デフォルトの名無しさん
10/02/01 23:30:50
>>99
TurboDelphiお願いします

184:デフォルトの名無しさん
10/02/02 01:25:39
いくら出せますか?

185:デフォルトの名無しさん
10/02/02 02:31:12
>>183
URLリンク(turbomirror.com)
他にもググればいくらでも出てくる

186:デフォルトの名無しさん
10/02/02 02:40:57
はいおつかれw
予想どうりw

187:デフォルトの名無しさん
10/02/05 15:30:54
??

188:デフォルトの名無しさん
10/02/05 21:39:13
質問です。
あるツールのフロントエンドを作っています。
そのツールがパスの通っているディレクトリのどこかに存在するか否か確認する方法を教えてください。
ツールの実行ファイル名はわかっています。

189:デフォルトの名無しさん
10/02/05 21:41:17
SearchPath

190:188
10/02/05 21:46:13
>>189
ありがとうございます!

191:デフォルトの名無しさん
10/02/10 13:38:38
はじめまして。
以前から興味があったのですが、今回思い切って初めてDelphi2010Proを購入してしまいました。
頑張って勉強していきたいと思います。
じつは、IDEの挙動について気になった事があり、お尋ねしたいと思います。
VCLその他の機能などをツールバーボタンに並べてみたのですが、マウスカーソルをボタンに持っていってもツールチップが表示されません。
ぼんやりとした記憶なのですが、インストール直後はちゃんと表示されていたような気がするのです。
まだまだボタンのアイコンと機能が頭の中で繋がらないため、ツールチップが表示されると大変助かるのですが(とくにVCL)…元々表示されないものでしたでしょうか。
ぐぐっても答えになりそうなページが見つからず、ご助言頂ければ幸いです。よろしくお願いいたします。
追伸 オプション内ツールパレット→「ボタンのキャプションを表示」にはチェックを入れてあります。

192:デフォルトの名無しさん
10/02/10 16:23:04
チェックしないで下さい

193:デフォルトの名無しさん
10/02/11 09:47:17
>>191
ShowHintプロパティ
URLリンク(docwiki.embarcadero.com)

194:191
10/02/11 11:31:15
>>192さん、
チェックの有無では変化ありませんでした。ツールバーカスタマイズメニュー下のツールチップON/OFFでも効果ありませんでした。
>>193さん、
アプリではなくIDEそのもののチップなので…でも紹介下さったページ勉強になりました。

再インストールとか色々調べてみましたら、やっと原因が判りました。
犯人は同時起動しているタブブラウザのタブ数でした。
60個近く開いているタブ数を減らしましたらチップが表示されるようになりました。
タブ数何個以下とは決まっていないみたいなので、よく分かりませんがリソースを食い合いしてたって事なんでしょうか。
IEコンポーネントベースだからなのかプログラム自体の問題なのかXPの問題なのか…勉強不足でわからないのですが、とりあえず自分の環境の所為と言う事がわかりました。

変な原因ですみません。ご回答頂きありがとうございました。



195:デフォルトの名無しさん
10/02/13 02:25:36

ツールバーのカスタマイズの実装方法について教えてください。

CustomizableプロパティをTRUEに設定して、
OnCustomizeCanDeleteとかOnCustomizeNewButtonとかのイベントを使うのだと思うのですが、
具体的にどのようなプログラムを書けばいいのでしょうか?

196:デフォルトの名無しさん
10/02/13 15:06:15
まず自分で分からないなりに書いてみたの?

197:デフォルトの名無しさん
10/02/15 09:01:02
TCollectionから派生させたTGraphItemのItemsに、TCollectionItemから派生させたTGraphItemsをリストするのはできました。

で、質問なのですが、
TGraphItemから派生させたTGraphBox,TGraphAxsis,TGraphLegend,TGraphDataなどの子クラスを同じTGraphItems.Itemに
リストしたいのですが、どうすればいいのでしょうか?
同じクラスしかリストできない?

ちなみにD6です。
よろしくお願いします。



198:デフォルトの名無しさん
10/02/15 09:05:00
あ、間違いです。

TCollectionから派生させたTGraphCollectionのItemsに、TCollectionItemから派生させたTGraphItemをリストするのはできました。
で、質問なのですが、
TGraphItemから派生させたTGraphBox,TGraphAxsis,TGraphLegend,TGraphDataなどの子クラスを同じTGraphColection.Itemsに
リストしたいのですが、どうすればいいのでしょうか?

です。
よろしくお願いします。


199:デフォルトの名無しさん
10/02/15 14:00:40
つD2010

200:デフォルトの名無しさん
10/02/15 14:04:43
D2010だと簡単にできるのですか?

D2006だっけ(?)は持ってるけど使ってないんです。


201:デフォルトの名無しさん
10/02/15 14:23:51
つかTListを委譲したクラスを作ればいいじゃん。
TCollectionから派生させるいみがわからん。

202:デフォルトの名無しさん
10/02/15 14:52:42
オブジェクトインスペクタに出すならTCollectionの方が向いてるとかじゃないの?
コンポ作らないからよくわかってないけど。

203:デフォルトの名無しさん
10/02/15 15:09:29
TListなりに放り込んで、各子クラス用のプロパティエディタを作ったほうが簡単だって事?



204:デフォルトの名無しさん
10/02/15 15:26:29
201みたいに答えわからない奴は書き込まなきゃいいのに。

って思う。
まぁ、俺もそうだけど…


205:デフォルトの名無しさん
10/02/15 16:16:42
>>198
リストしたいのですがって、派生クラスならできるでしょ
結局のところ何がしたいの?

206:デフォルトの名無しさん
10/02/15 16:47:50
>>205

要はグラフのコンポーネントなんですが、軸だとか凡例だとか項目名の子クラスをリストして、
リスト順に描画しようかと思ったわけです。

簡単そうではないので、仕方ないので各子クラス用のTCollectionを拵えて、
描画順は固定でいくようにします。



207:デフォルトの名無しさん
10/02/15 17:13:24
TListやTCollectionを継承する人はdelphi初心者というよりプログラム初心者な感じがするな

208:デフォルトの名無しさん
10/02/15 17:23:34
じゃぁ、今は何使うの?


209:デフォルトの名無しさん
10/02/15 17:25:16
>>206
描画順用のTCollection作って、個別のTCollectionと中身共有すればいいだけじゃないの?
簡単そうではないという判断基準はどこから出たの?

>>207
自分はバカだという新手の自己紹介ですか?

210:デフォルトの名無しさん
10/02/15 17:27:43
初心者かどうかはともかく10年以上も前のテクニックだとは思う

211:デフォルトの名無しさん
10/02/15 17:30:20
なぜだ

212:デフォルトの名無しさん
10/02/15 17:35:30
>>209
>描画順用のTCollection作って、個別のTCollectionと中身共有すればいいだけじゃないの?
なるほど、描画順はほかのリストで管理って言うのはいいですね。

>簡単そうではないという判断基準はどこから出たの?
そのCollectionにItemを追加する時に、どの子クラスを追加するかを指定する術をオブジェクトインスペクタが持っていないので
追加するときは規定クラスを追加して、その基底クラスのKindプロパティみたいな物を弄ると、そのプロパティに沿った子クラス
が作られる。みたいなものを考えていたのですが・・・

単一のCollectionにそんな機能を盛り込むよりも、一つの子クラスに一つのCollectionを与えたほうが簡単かなっと。
あとは描画順だけの問題なので、描画順のリストなりCollectionで対応しようと思います。

昔、「Visualこんぼ」っていうActivXコントロールがあったのですが、そのグラフ機能を模倣しようとしていたわけです。
だれか使ったことがある人いますか?



213:デフォルトの名無しさん
10/02/15 17:37:20
>>210

リストすることが10年前のテクニックなのか?
古いも何も、リストする事は普通だろ?配列とか使わないの?あなたは。

どこを指して古いと言っているのかわからないからおせーて。


214:デフォルトの名無しさん
10/02/15 17:47:12
元質問者そっちのけで申し訳ないけど、俺もその今時だか中級車向けだかのテクニックを教えてほしい。
煽りとかでなく、自分が古い知識のまま止まってる気がするので。

215:デフォルトの名無しさん
10/02/15 17:55:28
今はジェネリッククラスの時代だ

216:デフォルトの名無しさん
10/02/15 17:56:11
まさか、動的配列とか言わないですよね。


217:デフォルトの名無しさん
10/02/15 17:56:50
>>212
そういうことならオブジェクトインスペクタでボタン押した時に、
独自の編集フォームを表示するようにして、そこで追加クラス選べるようにすればいいんじゃない?
ぱっと思いつく範囲ではGLSceneがそういうことしてたと思う
描画順を別にしておいた方が実装は楽だろうけど

>その基底クラスのKindプロパティみたいな物を弄ると、
>そのプロパティに沿った子クラスが作られる。みたいなものを考えていたのですが・・・
子クラスが作られるという処理自体は簡単に作れるけど、
子クラスだけ持ってるプロパティがオブジェクトインスペクタに表示されるわけはないよね
さすがに発想からしてちょっと無理があると思う
基底クラスに派生で使われるプロパティが全部乗ってるとかならできると思うけど、
それだったらわざわざクラスを派生させずに単一のクラス内部で分岐すればいいだけになっちゃうし

218:デフォルトの名無しさん
10/02/15 18:05:41
>>217

どうもありがとうです。

>それだったらわざわざクラスを派生させずに単一のクラス内部で分岐すればいいだけになっちゃうし

そうなんですよね。
で、先ほど書いたように、各々の子クラス用のCollectionを用意しました。
あとは、描画順のコードを足してどうにかしようと思います。



219:デフォルトの名無しさん
10/02/15 18:20:21
コレクション系のクラスを継承してAddにobjectを指定する糞コード書く奴は間違いなくPG歴1ヶ月未満。

220:デフォルトの名無しさん
10/02/15 23:40:44
>>219でスレが止まってるの見てこのAA思い出したw
スレリンク(gline板:1番)n

221:デフォルトの名無しさん
10/02/18 02:25:50
クリエイトプロセスについての質問です。
win2k pro, Delphi 6 personalを使用しており、
ボタンをクリックするとエディタが起動するようにしておりますが、以下のコードによって
エディタが終了する前にshowmessageの'ok'が表示されてしまいます。
ググッてみたもののだいたい同じ内容のものしかヒットしませんでした。
エディタが終了した後に、残りの処理をする場合はどのようにすればよいのでしょうか?
教えてください。
パソコンが2コアだからとかは、関係ありますか?

procedure TForm1.Button1Click(Sender: TObject);
Var
PI : TProcessInformation;
SI : TStartupInfo;
begin
GetStartupInfo(SI);

CreateProcess(Nil,
'D:\Wintools\Dana\Dana.EXE test',
Nil,
Nil,
False,
0,
Nil,
Nil,
SI,
PI);

while WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT do
Application.ProcessMessages;
showmessage('ok');
end;

222:デフォルトの名無しさん
10/02/18 02:30:26
状況としては、エディタが終了した後にshowmessageを表示したいのです。
現在は、エディタが起動したすぐ後にshowmessageが実行されてしまいます。


223:デフォルトの名無しさん
10/02/18 03:58:00
CreateProcessの2行目を
'notepad.exe',
にしたら待機できました。

なぜ、
'D:\Wintools\Dana\Dana.EXE test',
ではだめなのか、もう少し調べてみます。

224:デフォルトの名無しさん
10/02/18 04:08:03
あー、わかりました。
danaが常駐モードで起動していたため、うまく動いていませんでした。
常駐モードを切って、通常に起動すれば、待機するようになりました。

225:デフォルトの名無しさん
10/02/18 14:30:53
うん

226:デフォルトの名無しさん
10/02/18 19:09:22
だな

227:221
10/02/18 19:51:40
うーん、かなり初心者的なつまずきをしています。

テキストファイルの管理ソフトを作っているのですが、テキスト編集機能を自前で持つのではなく、
すでに優秀なエディタソフトがあるので、テキスト編集については、その外部ソフトで編集し、
編集した結果を管理ソフト側に持ってきたいと思っています。

Createprocessで起動していないソフトであれば、待機するということができるのが確認できたのですが、
常駐機能のあるDanaというエディタの場合は、待機できないことがわかりました。
(以降の処理が待機できない。)

こういう場合、外部のソフトで編集した結果を自分のソフト側に持ってくるとしたら、どういう機能を
使ったらよいのでしょうか?


228:デフォルトの名無しさん
10/02/18 20:00:33
ファイル更新監視

229:デフォルトの名無しさん
10/02/18 20:03:07
もう少し、わかりやすく説明した方がいいですね。

テキストデータ管理ソフトは、データベース(sqlite3)上にデータを格納しようと考えております。
管理ソフト側では、Memoコンポーネントをビューワーにして、新規作成および編集については、
外部のエディターソフトに任せて、その編集結果をMemoコンポーネントに取り込みたいと思っています。
現在は、管理ソフト側でtestというファイルを作成し、外部ソフト側はそのtestファイルを読み込み、
編集結果をtestファイルに書き込んだ後、管理ソフト側でtestファイルを読み込むということを
想定しています。

外部ソフトと管理ソフトとで、データのやりとりをしたいのですが、通常どのようにデータのやりとりを
するのでしょうか?

230:デフォルトの名無しさん
10/02/18 20:05:51
>>228
おー、ありがとうございます。
findfirstchangenotificationというのを調べておりました。
ファイルの更新をやはり監視して変更があった場合に、取り込みすればいいのですね。
ありがとうございます。
その手順で考えていきたいと思います。

231:デフォルトの名無しさん
10/02/18 20:58:44
JVCLにコンポーネント化されたものがあったはず。ところでCtrl-Sで頻繁に保存をするような
人もいるので一回きりじゃない動作を考えておくべきかも。たとえばプロセスの終了までは
監視を続けるとか。

232:デフォルトの名無しさん
10/02/18 21:07:24
>>231
どーもです。
そうですね。今いろいろとテストしていたんですけど、外部プロセスが終了していない間に
ファイルの削除(今回でいえば、test)とかをした場合など、困りますね。
外部プロセスの状態(起動中か終了しているのか)とか調べることも必要ですね。
教えていただいたjvclも調べてみます。ありがとうございます。

私のやりたいことは、CreateProcessとWaitForSingleObjectでそのまま動けば、
簡単なんですけど、常駐しているエディタもあることを考えるとそのまま使えないんですね。
ちょっと難しくなっちゃったな。とほほ。

233:デフォルトの名無しさん
10/02/18 21:14:01
そのエディタが編集中のファイルをロックしてるなら
Timerで1秒ごとに排他オープンを試みて成功したら処理するというのも出来るかも
タイムスタンプ監視で大体はうまくいくと思うけどね

234:デフォルトの名無しさん
10/02/18 22:58:57
>>233
そのエディタは、開いているだけの状態では、ファイルをロックしてませんでした。
ファイルの削除とか外部からできちゃいました。
ファイルの更新自体だけだと、エディタで処理が終わってファイルを書き込んだのか、
編集途中でファイルを書き込みをして、続けて処理しているのかが、はっきりわかりませんね。
困ったな。

プロセスの監視も実は、常駐モードだと常に起動状態なので、それだけだと状態の監視ができないです。
そうなると、エディタのWindowの状態を見て、testという文字列が表示されているかどうかを確認すれば、
良いのかな?
もう少し考えてみます。アドバイスありがとうございます。

235:デフォルトの名無しさん
10/02/19 00:36:26
エディタなんて星の数ほどあるのにプロセスの監視をするのは現実的じゃない
キャプションにファイル名等が表示されないエディタだってある
エディタ以外のプロセスが一時的にロックすることもある(アンチウイルスとか)

236:デフォルトの名無しさん
10/02/19 01:03:55
>>235
そうなんですよね。
vectorのサイトでeditorのレビューで一通りエディター画面見てみたんですけど、タイトルバーに
今編集してるファイル名が表示されてないのもある(9割以上は表示してる。)し、今使ってるDanaでさえも
複数ファイル編集していて、違うファイル開いているとタイトルバーがそのファイル名に
なってしまっているので、すべてのパターンに対応できないですね。

考えが浅はかだったかな?エディター部分を自分で作るよりは、すでにあるアプリで対応して、
ビューアー部分(将来的にはブラウザで表示しようとしてました。)とデータの格納部分だけ
作り込めばいいかなと思ってました。

ちょっと設計自体考え直す必要がありますね。
エディター部分の作り込みはあまりしたくないんだけどなぁ。自分の能力だと大した物できそうにないし。

237:デフォルトの名無しさん
10/02/19 04:32:50
なんで監視だけじゃだめなんだよ

238:デフォルトの名無しさん
10/02/19 06:32:00
>>237
何の監視ですか?
プロセスの監視は、常駐機能のあるエディタだと、ファイルの編集が終了した後でも、
起動したままですし、ファイルの更新状況の監視は、そのファイルが編集継続中であるのか、
すでに編集が終わっているのかの判断がつかないからです。

エディタで編集中であるのに、管理ソフト側を終了してしまうと、保存されないデータが出てくると
思われます。確実にファイルの編集が終わっている状況というのを管理ソフト側で把握できないと
確実なデータの受け渡しは難しいのではないかと思っています。

以上の点から、プロセスの監視もファイル更新の監視も、今の私の知識では無理じゃないかと思って
いるのですが、何か良い案をお持ちでしょうか?

239:デフォルトの名無しさん
10/02/19 09:22:56
文字列型と違い動的配列はコピーオンライトじゃないとだけは認識してたが、
SetLengthで長さ変えるとコピーされるんだ・・・
var
 A, B: array of Byte;
begin
 SetLength(A, 10);
 B := A;
 SetLength(B, 5); // コピーされて、AとBは別物
end;
ずっと、コピーされないと思ってたよ・・・


240:デフォルトの名無しさん
10/02/19 09:35:21
メモリ確保するためポインタ使う代わりに動的配列使ってたけど、
TClassA = class
FArray: array of Byte;
procedure TClassA.Method;
begin
 SetLength(A, 10);
end;
そうすると、FArrayが他の変数によって参照されてるか否か意識しなきゃいけんのか・・
素直にポインタ使ったほうが安全なのかな。

241:デフォルトの名無しさん
10/02/19 09:48:42
まぁ、型にうるさい言語だから
FArray: array of Byte;
とか単独で宣言すれば、まちがっても他の変数によって参照されることはコンパイルエラーが
でるからありえないけど、例えば、Typesユニットで定義されているTByteDynArrayとか使って
FArray: TByteDynArray;
とすると危険か。まぁ、いっか。普通に使うか。


242:デフォルトの名無しさん
10/02/19 11:02:46
すいません質問です
Delphi-MLの過去ログ検索のサイトが無くなっていたんですが
引き継ぎ先などの情報をお持ちの方おられるでしょうか?


243:デフォルトの名無しさん
10/02/19 11:04:57
過去ログブラウザおすすめ
C#はさらにおすすめ

244:デフォルトの名無しさん
10/02/19 11:07:42
サービス止まってるね
面白そうだし引き継ぎ挑戦してみようかな

245:デフォルトの名無しさん
10/02/19 11:28:30
「私の投稿メールを削除していただけませんか」
メールが来るから覚悟しておいた方が良いぞ > 244

246:デフォルトの名無しさん
10/02/19 11:30:02
ならやめたw


247:242
10/02/19 11:42:15
あの過去ログは宝の山でした・・・
あそこで使っていた過去ログって2008/05が最終なんでしょうか?

248:デフォルトの名無しさん
10/02/19 12:15:25
google の方に過去ログ追加しようかねぇ

249:デフォルトの名無しさん
10/02/19 12:18:10
2006/11 以降は URLリンク(groups.google.co.jp) にもバックアップされている。

250:デフォルトの名無しさん
10/02/19 13:17:03
>>239-241
ジェネリクス利用したコピーオンライト配列使えば問題なし

251:デフォルトの名無しさん
10/02/23 12:07:40
TQueryに新規作成した参照項目を元に整列表示させることはできないですか?
SQLのOrder節には入れられないし

252:デフォルトの名無しさん
10/02/23 13:53:52
Delphi6 ProとDelphi7 Pro、今使うならどっちがいいと思う?

253:デフォルトの名無しさん
10/02/23 13:59:20
7

254:デフォルトの名無しさん
10/02/23 14:15:25
7は6のマイナーチェンジな感じだからあえて6を選ぶ理由は少ないと思う。
6はXPのマニフェスト対応にも難有りだし。

255:デフォルトの名無しさん
10/02/23 22:08:08
難の前に未対応じゃん
XP出る前なんだから

256:デフォルトの名無しさん
10/02/23 22:31:21
del7使いなんだけど、最新のDelにしたら
マルチコアなCPUに対応したアプリって
簡単に作れるの?

257:デフォルトの名無しさん
10/02/23 22:46:01
>>255
難ってのはTheme Managerのことだろ
それにD2010はWin7出る前なのにWin7対応を謳ってますが

>>256
マルチスレッドじゃあかんの?

258:デフォルトの名無しさん
10/02/23 22:48:12
マルチスレッドなプログラム書けば特に意識しなくても複数のコア使うようになる。
簡単かは別。排他処理とかやらないと普通に死ぬ。

259:デフォルトの名無しさん
10/02/24 00:37:25
>>257
Del6の発売はXPの存在自体が発表される前なんですけど?
Win7はDel2010開発の段階でβ出てるじゃん
頭悪いね

260:デフォルトの名無しさん
10/02/24 00:39:02
>>258
明示的にAPIで指定しない限り複数のコアを使うとは限らない
嘘書くのはやめよう

261:デフォルトの名無しさん
10/02/24 01:46:31
>>260
>>258は別に嘘では無い。

262:デフォルトの名無しさん
10/02/24 03:11:00
本当でもないだけ。

263:デフォルトの名無しさん
10/02/24 03:28:30
OpenJaneのソース、HogeTextView#1839行より

Move(#13#10[1], result[Position], 2);

とあるのですが、この1つめの引数にある『#13#10[1]』とはどういう意味なのでしょうか?
ついでに、同じ意味になる別の表記方法もあるのであれば、教えて頂けると助かります。

264:デフォルトの名無しさん
10/02/24 04:13:54
VBでいうところの vbCR, vbLF 、 まぁ改行コードのことやね

265:デフォルトの名無しさん
10/02/24 09:26:24
明示的にAPIで指定するとどのコアでスレッドを動かすかなどを細かくコントロールできる。
明示指定してない場合でも、複数のコアをプロセスに割り当てる。
いくつ割り当てるかは、OS の種類によって細かく違いがある。
ただし一般的なコンシューマ版(Vista とか Windows7) ではデフォルトですべてのコアが
利用可能となる。

そんだけだ


266:デフォルトの名無しさん
10/02/24 11:27:56
private
function GetHoge(const Index: Integer; Idx: Integer): String;
procedure SetHoge(const Index: Integer; Idx: Integer; const Value: String);
public
property hogeA[Idx: Integer]: String index 0 read GetHoge write SetHoge;
property hogeB[Idx: Integer]: String index 1 read GetHoge write SetHoge;

こんなPropertyが使いたいのですが read GetHoge で"互換性の無い型です"って怒られます。
hogeA,hogeB毎に read write の関数作らないと駄目なんですかね。

ちなみにfunction GetHogeとprocedreu SetHogeはCtrl+Shift+Cで自動生成したものです。


267:デフォルトの名無しさん
10/02/24 11:34:30
266です。自己解決しました。

自動生成された
function GetHoge(const Index: Integer; Idx: Integer): String;
procedure SetHoge(const Index: Integer; Idx: Integer; const Value: String);

を下記に書き換えたら通りました。
function GetHoge(Idx: Integer; const Index: Integer): String;
procedure SetHoge(Idx: Integer; const Index: Integer; const Value: String);

自動生成だと、配列の添え字とインデックス値が逆になって、値の渡し方の問題でエラーになるみたいです。


268:デフォルトの名無しさん
10/02/24 14:12:06
配列プロパティにはデフォルト値与えられない??
property Items[Index: Integer = 0]: Integer read Get....


269:デフォルトの名無しさん
10/02/24 14:30:48
そんなことをするような設計が悪い

270:デフォルトの名無しさん
10/02/24 15:14:41
配列コピーの高速化って無理だよね

インラインアセンブラでMMX命令で32bitコピーとかやってもちっとも速くならねぇ

271:デフォルトの名無しさん
10/02/24 15:21:32
fastcode projectにmoveがあったような

272:デフォルトの名無しさん
10/02/24 20:37:10
>>264
理解できました。 thx!

273:デフォルトの名無しさん
10/02/25 07:22:20
>>260
あほか

274:デフォルトの名無しさん
10/02/25 08:46:15
あほです



このすれにまじめなこと書くはずないだろ

275:デフォルトの名無しさん
10/02/25 12:49:24
>>262
本当だし

276:デフォルトの名無しさん
10/02/25 14:36:43
はいはい知らなかったなら素直に言おうね

277:デフォルトの名無しさん
10/02/25 14:57:45
Windowsのスレッド配分アルゴリズムは同一プロセス内のスレッドは物理的に同じプロセッサに優先的に割り当てるようになってる。
これはダイ間の通信がコア間の通信に比べて顕著に遅延が発生する等、別個に割り当てると問題が生じるからで、
割当先候補が減っている分、その時の処理状態によっては同一コアに複数スレッドが割り当てられるという事態は普通に発生する。
つまり「明示的にAPIで指定しない限り複数のコアを使うとは限らない」は真。
Delphiには並列ライブラリがないからこういった情報の浸透が遅れているんだろうね。

278:デフォルトの名無しさん
10/02/25 15:45:17
それ、完全にお前の誤解。

スレッド A が Core 1 に割り当てられたときに、
タスク切り替えやスレッド休止後の再起床時に
同じ Core を「優先」して使う。

および同じプロセスに所属するスレッドは、できるだけ「有利」なコアを使う。
というだけ。

この場合の「有利」は、キャッシュを共有しているコアとかが選ばれる。

スレッドが二つ、A と B があったときに、
A と B が「かならず」物理的にひとつのコアしか使わない。のだとしたら
マルチスレッドの利点なんか残らないだろう?

それくらい実験すればすぐわかるのに...

279:デフォルトの名無しさん
10/02/25 16:01:25
Win32APIスレ池

280:デフォルトの名無しさん
10/02/25 17:49:09
こんなクズども寄越さないでください

281:デフォルトの名無しさん
10/02/25 17:52:40
>>278
必ずなんて一言も書いてないんだけど
OSに任せると必ず分散するとは限らないってだけ
お前はまず日本語を勉強してこい

282:デフォルトの名無しさん
10/02/25 18:03:22
その辺はMSDNにも
「スレッドの割り当ては考えてやってるから、分散してなくてもSetProcessAffinityMask使うのはあんまりおすすめしないよ」
みたいに書いてある
XPにはあまり賢くないアルゴリズムが載ってたからある程度自分でやった方が良かったけど

283:デフォルトの名無しさん
10/02/25 18:04:04
SetThreadAffinityMaskだった

284:デフォルトの名無しさん
10/02/25 18:06:27
         ノ´⌒ヽ,,
     γ⌒´      ヽ,
    // ""⌒⌒\  )
     i /::::::::: ノ  \ ヽ )
     !:::::::::::(・ )` ´( ・) i/
     |:::::::::::::::(__人_)  |
    \:::::::::::::`ー'  / チッ うっせーな…
    /:::::::::::::::::::::::::::\

285:デフォルトの名無しさん
10/02/25 18:07:18
使うとしたらこっちだな。SetThreadIdealProcessor


286:デフォルトの名無しさん
10/02/25 18:21:52
みなさん。
実験すればわかることなので、煽りは無視して自分で検証してみましょう。

一般向けの CPU では、物理的に存在する CPU コアのすべてが
プロセス内のスレッドに割り振られます。

個別にコントロールする API は別途ありますが、通常は OS に任せておいて
問題ありません。


287:デフォルトの名無しさん
10/02/25 19:58:17
>>286
何となく興味あったから実験してみたけど、
中でsleepするスレッド4つ作って動かしたら全部一緒になったよ
環境はXP SP3 Core2 Quad
なんで?

288:デフォルトの名無しさん
10/02/25 19:59:32
         ノ´⌒ヽ,,
     γ⌒´      ヽ,
    // ""⌒⌒\  )
     i /::::::::: ノ  \ ヽ )
     !:::::::::::(・ )` ´( ・) i/
     |:::::::::::::::(__人_)  |
    \:::::::::::::`ー'  / チッ うっせーな…
    /:::::::::::::::::::::::::::\

289:デフォルトの名無しさん
10/02/25 20:05:57
>>287
sleepしてるスレッドがどのコアで動いてるか分かるの?

290:デフォルトの名無しさん
10/02/25 20:34:33
タロット占いをするソフトを作りたいと思います。(実際に当たるかどうかは別にして)

TEditにタロットのカード名(魔術師とか、女教皇とか、愚者とか)
を表示させようと思うのですが、
Edit1~Edit6に表示させる際
それぞれが重複しない値にさせるに
はどうすればいいでしょうか。

単純にrandom(22)を使うと
重複してしまう場合があります。

291:デフォルトの名無しさん
10/02/25 20:44:26
リアルでのやり方と同じ。
カード全部を配列に突っ込んでシャッフルして頭から6枚取得する。
配列 シャッフルで検索かければそのコードが見つかるからDelphiに書き直せばいい。

292:デフォルトの名無しさん
10/02/25 21:07:56
WinXp+D7で質問です。
trunc関数で誤差が出るようなのですが何がいけないのでしょうか。
フォームにEdit1,2,3とButton1を配置し以下の計算をしますとEdit3だけが769になります。
Trunc内で計算せずにEdit1のようにすれば大丈夫なのでしょうか。

procedure TForm1.Button1Click(Sender: TObject);
var
Su : double;
Kin : double;
kei : double;
begin
Su := 1.4;
Kin := 550;
kei := Su * Kin;
Edit1.Text := Floattostr(trunc(kei));
Edit2.Text := Floattostr(trunc(1.4*550));
Edit3.Text := Floattostr(trunc(Su * Kin));
end;

293:290
10/02/25 21:12:22
>>291
アドバイスありがとうございます。
検索したらFisher-Yatesという方法も見つかりました。
これでやってみます。

294:デフォルトの名無しさん
10/02/25 21:31:36
>>292
参考になるかどうかわからないけど、過去ログからコピペ。

857 :826 :2008/03/02(日) 20:57:07
SimpleRoundToの個人的まとめ。
正解かどうかわからないので、必要な人は追試してください。

・SimpleRoundToは意図した結果が得られない場合(ADigit<0 ?)がある。

・Truncは引数に変数を使った式を与えると意図した結果が得られない場合がある。
 ○a := 10; Trunc(0.25 * a + 0.5) / a;
 ○Trunc(0.25 / 0.1 + 0.5) * 0.1;
 ×a := 0.1; Trunc(0.25 / a + 0.5) * a; //SimpleRoundToの中がこれ
・引数に指定する計算式の結果を一度変数に代入してから、Truncに与えれば大丈夫そう。
 ○a := 0.1; b := 0.25 / a + 0.5; Trunc(b) * a;

・Floorも内部でTruncを使ってるので同様。
・Ceilは内部でTruncを使っているものの大丈夫そう??


295:デフォルトの名無しさん
10/02/25 23:01:02
>>289
APIも知らないの?

296:デフォルトの名無しさん
10/02/25 23:01:54
>292
おもしろいね。時間があったら追試してみたいけど、気になったポイントを。
Edit1は計算結果が一旦Double型に代入されてそれがTruncに渡されている。
Edit2は予めコンパイラが計算した浮動小数点数の定数値をTruncに渡している。
Edit3は式の値がおそらくExtendedで一時的に保持されてそれがそのままTruncに渡されている。
CPUウィンドウでコンパイル結果がどのようなアセンブル命令に展開されているのかを見ると違いが
わかるのかも。

297:デフォルトの名無しさん
10/02/25 23:02:22
         ノ´⌒ヽ,,
     γ⌒´      ヽ,
    // ""⌒⌒\  )
     i /::::::::: ノ  \ ヽ )
     !:::::::::::(・ )` ´( ・) i/
     |:::::::::::::::(__人_)  |
    \:::::::::::::`ー'  / チッ うっせーな…
    /:::::::::::::::::::::::::::\

298:デフォルトの名無しさん
10/02/25 23:29:53
>>295
どれ使うか分からんので教えて。

299:デフォルトの名無しさん
10/02/26 00:08:58
>>290
procedure TForm1.Button1Click(Sender: TObject);
const
 CARD : array [0..5] of string = ('THE FOOL','THE MAGICIAN','THE HIGH PRIESTESS',
                    'THE EMPEROR','THE LOVERS','The HIEROPHANT');
 function tekitou(a,b:integer):TPoint;
 begin
  result.X := b;
  result.Y := a;
 end;
var
 CardNum: array [0..5] of Integer;
 i,r1,r2 : integer;
 p : TPoint;
begin
 Memo1.Clear;
 for i := 0 to 5 do
  CardNum[i] := i;
 for i := 0 to 999 do begin
  r1 := random(6);
  r2 := random(6);
  p := tekitou(CardNum[r1],CardNum[r2]);
  CardNum[r1] := p.X;
  CardNum[r2] := p.Y;
 end;
 for i := 0 to 5 do
  Memo1.Lines.Add(CARD[CardNum[i]]);
end;

駄目な例

300:デフォルトの名無しさん
10/02/26 00:44:44
>>298
URLリンク(msdn.microsoft.com)

301:デフォルトの名無しさん
10/02/26 06:39:48
OSに任せておけばいいだけやん。あほか。

302:デフォルトの名無しさん
10/02/26 07:10:59
>>287
GetCurrentProcessorNumberやCPUIDで調べる方法は知ってるけど、
Sleepしてる最中に調べるのは無理だろって話さ。
ThrreadIDと違って、コアは実行途中でも入れ替わるんだし、
SleepしてたらCPUはつかんでないだろ。


303:デフォルトの名無しさん
10/02/26 07:43:33
sleep したスレッドが1000個あったとして、それに意味があるの?

それこそ「特殊な」プログラムだと思うのだが。

304:デフォルトの名無しさん
10/02/26 12:54:02
>>302-303
だからいい加減出て行けよ
バカに噛みつくのもバカ
必死にしか見えない

305:デフォルトの名無しさん
10/02/26 12:54:45
はいはい本人乙

306:デフォルトの名無しさん
10/02/26 12:56:05
馬鹿というのは鳩山のAAを張ってる奴だな
いい迷惑だ

307:デフォルトの名無しさん
10/02/26 12:57:17
即レスとかどんだけ張り付いてるんだよw
そんなに悔しかったのか

308:デフォルトの名無しさん
10/02/26 12:59:29
>>302
そんなことしなくても外部からいくらでも観測する方法あるだろ…
必死になるあまり視野が狭くなってないか?落ち着けよ

309:デフォルトの名無しさん
10/02/26 13:02:13
本日も質問者不在のままおっさん鬱病患者達が頑張っていますね

310:デフォルトの名無しさん
10/02/26 13:06:52
必死必死うるせえんだよ
必死って言う方が必死なんだよばーーーーーーーーーーーーかwwwwwwwwwwwwwwwww
もうこんな気持ち悪いところ来ないから一人で勝手に喋ってろwwwwwwwwwwきめえwwwwww

311:デフォルトの名無しさん
10/02/26 13:08:47
これで静かになるな
ありがたやありがたや

312:デフォルトの名無しさん
10/02/26 13:16:25
TBase = class
public
  class const Value: Integer; abstract;
end;
TBaseClass = class of TBase;

TExtend1 = class(TBase)
public
  class const Value: Integer = 1;
end;

TExtend2 = class(TBase)
public
  class const Value: Integer = 2;
end;

var
  cls: TBaseClass;

cls := TExtend1;
a := cls.Value; //1が入って欲しい


もちろんこんなコードは書けないんですけど、
上記のようなクラス定数(もしくはクラス変数)の継承みたいなことって何かで代用できますかね

313:デフォルトの名無しさん
10/02/26 13:38:23
代替にはならないと思うがReadプロパティで対応するのが一般的だと思う。

314:デフォルトの名無しさん
10/02/26 18:44:42
引数なしの関数は変数にも見えるから

function Value : Integer; virtual;

を使う手もある





315:312
10/02/26 19:01:32
>>313-314
ありがとうございます
そうなんですよね、実装部に書くことを許容すればできるんですけど、
宣言部だけで継承先の振る舞いを変えられたらと思ったんですが、やはり仕様上難しそうですね…

316:デフォルトの名無しさん
10/02/26 22:52:20
Delphi、VisualStudioに付いてくるやつ以外で
TAnimateで使えるようなAVIファイルを集めた
市販の素材集はないでしょうか?

317:デフォルトの名無しさん
10/02/26 22:56:51
TStringListの内容をINIファイルの一行データとして安全に書き込んだり読み込んだりするための変換処理ってどう書けばいいですか?

318:デフォルトの名無しさん
10/02/26 23:29:37
具体的にどういう変換をしたいのかが見えない

319:デフォルトの名無しさん
10/02/26 23:37:10
ini[0] = TStringList.Parse(sl[0]);
sl[0] = TIniFile.Parse(ini[0]);

320:デフォルトの名無しさん
10/02/26 23:41:10
>>317
例えば、iniファイルに
key=aaa;bbb;ccc
と書かれていた場合に、

その値を
aaa
bbb
ccc

と、変換して取得したい。
または、逆変換してiniファイルに書き込みたい。ってこと?

単純にTStrings#DelimitedTextプロパティを通せば、自動的に変換してくれる。
ただし落とし穴があって、スペースもデリミタとして扱ってしまう。(Del 7の場合。以降のDelphiは使用したことないのでシラネ)

厳密に指定したデリミタのみで分割したい場合、JCL(URLリンク(jcl.delphi-jedi.org))に含まれる、JclStrings#StringsToStrやJclStrings#StrToStringsを使用してます。

iniファイルへの読み書きはTIniFile使えばいいじゃね?。安全にが何を指してるか知らないけど。


321:デフォルトの名無しさん
10/02/26 23:42:39
mailto:sage てs


322:デフォルトの名無しさん
10/02/26 23:47:32
正直な話、オレだったらTStringlistの内容をinifileに保存なんてしない。
何を目指してるのかは分からないけど。

323:デフォルトの名無しさん
10/02/27 03:53:55
>>320
個々にAnsiQuotedStr(読み込み時は逆にAnsiDequotedStr)を適用すれば外部ライブラリはいらない

324:デフォルトの名無しさん
10/02/27 09:18:11
マルチコアの話に便乗なんですが、要は1つのスレッドを
OSが適当に割り振るからあんまり考えなくて良いよって解釈しました。
言い方変えると1スレッドを複数のコアで処理はしないってこと?
マルチコア対応とか書いてあるアプリって、重い処理でも1スレッドに書いたほうが
プログラムが簡単なのにマルチスレッドに出来るだけ分けてるって事?

325:デフォルトの名無しさん
10/02/27 09:44:07
>>323
TStringListの個々の要素であるStringは#0-#20(当然#13#10も)なんかも格納できるバイナリコンテナだからもうひとひねり必要だな。
標準でやるには例えばURL Encode/Decodeとかできっちり処理しないと破綻する。

326:デフォルトの名無しさん
10/02/27 10:26:53
だがほとんどの処理で #0 以降の文字は欠落するから
もう忘れてもいいんじゃないかな?

327:292
10/02/27 14:37:50
どの程度誤差が発生するのかちょっと調べてみました。
memo1,2,3を配置して誤差が出たとき追加していきます。

procedure TForm1.Button3Click(Sender: TObject);
var
Su : double ;
Kin ,sux : integer;
kei ,ans : double;
a1,a2,a3 : double;
t :string;
const
sucon = 0.00000001;
begin
memo1.Clear;
memo2.Clear;
memo3.Clear;
for Sux := 1 to 1000 do
begin
su := sux / 10;
for Kin := 1 to 1000 do
begin
kei := Su * Kin ;
a1 := trunc(kei);
a2 := trunc( Kin * su);
a3 := trunc( Kin * su+ sucon);
ans := trunc((sux * kin / 10)) ;

328:292
10/02/27 14:40:31
if a1<>ans then
begin
t := Floattostr(kin) + ' , ' + Floattostr(su) + ' , ' + Floattostr(ans) + ' , ' + Floattostr(a1) + ' , ' + Floattostr(a2) + ' , ' + Floattostr(a3);
memo1.Lines.Add(t);
end;
if a2<>ans then
begin
t := Floattostr(kin) + ' , ' + Floattostr(su) + ' , ' + Floattostr(ans) + ' , ' + Floattostr(a1) + ' , ' + Floattostr(a2) + ' , ' + Floattostr(a3);
memo2.Lines.Add(t);
end;
if (a3<>ans) then
begin
t := Floattostr(kin) + ' , ' + Floattostr(su) + ' , ' + Floattostr(ans) + ' , ' + Floattostr(a1) + ' , ' + Floattostr(a2) + ' , ' + Floattostr(a3);
memo3.Lines.Add(t);
end;
end;
end;
memo1.Lines.SaveToFile('c:\memo1.csv');
memo2.Lines.SaveToFile('c:\memo2.csv');
memo3.Lines.SaveToFile('c:\memo3.csv');
end;


どうやら単に計算してからtruncしただけでは発生頻度が減るだけで完全な対策にはならなそうです。
小さい数を足してやって切り捨てるのが良いようです。

329:デフォルトの名無しさん
10/02/27 14:58:05
問題の所在を理解していないような希ガス…

330:デフォルトの名無しさん
10/02/28 07:34:09
やべー、俺も>>292の原因知りてぇ。
>>296さんのExtendedになぜなるのかが知りてぇ。

こういう場合、Edit1の方法で計算しないと間違った答えが出ることもあるってことだよね。

331:デフォルトの名無しさん
10/02/28 07:47:13
URLリンク(homepage1.nifty.com)

↑ここに同じようなやりとりがあった。

332:デフォルトの名無しさん
10/02/28 07:52:04
つーことで、実数型使うときはdoubleを使わないでextendedを使えってこと?

333:デフォルトの名無しさん
10/02/28 08:02:36
おー、すまん。一人でとっちらかっていた。
URLリンク(homepage1.nifty.com)
ここ読んでわかったけど、
Trunc(X: Extended): Int64;
で型変換してる。
Trunc使うときは、Extended型で使わないと誤差がでるってこと。

もしくは小数点移動させて、整数にしてから処理すればいいね。

334:330-333
10/02/28 08:20:53
浮動小数って、意味がわかりました。そういうものなんですね。
使ったことなかったものですから、、、今回よくわかりました。
332も違うつーことで。

335:デフォルトの名無しさん
10/02/28 18:43:16
それは不動少数

336:デフォルトの名無しさん
10/02/28 20:36:04
すみません教えて下さい。
Form1 に直接 Image1 を置いていたのですが後から Panel1 を追加して Image1 の親コントロールを Panel1 に変更したいのですが、IDE でやる方法はありませんか?

337:デフォルトの名無しさん
10/02/28 20:53:34
floatとdoubleで結果が異なる例は見たことあったけど
doubleとextendedで差が出る実例は初めて見た。
64bit厨はどうするのだろうか。

338:デフォルトの名無しさん
10/02/28 21:14:15
それ 64bit 関係ないし
x64 なら 128bit 浮動小数点数が必ず使えるし


339:デフォルトの名無しさん
10/02/28 21:51:41
337は64ビットネイティブバイナリでFPU命令が使えないと思っているんじゃないだろうか

340:デフォルトの名無しさん
10/02/28 22:00:26
>>336 切り取って貼り付ける。


341:デフォルトの名無しさん
10/02/28 22:02:28
>>340

なるほど!ありがとうございます!

342:337
10/02/28 23:33:39
>>338, 339
ごめん、知らなかった。
>128bit浮動小数点と、64bitネイティブでFPU
エンバカスレに帰るよ。

343:デフォルトの名無しさん
10/03/01 01:26:40
>>338
64bit2個をまとめて扱えるだけであって128bitが1個じゃないから

344:デフォルトの名無しさん
10/03/01 02:02:25
実装がどうなってるかは関係ないだろ
扱えることに変わりはないし

345:デフォルトの名無しさん
10/03/01 17:58:10
実装は関係ないだろキリッ!って言われてもなぁ

346:デフォルトの名無しさん
10/03/01 19:12:48
はいはい

347:デフォルトの名無しさん
10/03/01 19:25:15
>>345
お前がそう思うんならなんやらかんやら

348:デフォルトの名無しさん
10/03/01 19:25:56
delphi2011っていつでるの?

349:デフォルトの名無しさん
10/03/01 20:00:32
さあ

350:デフォルトの名無しさん
10/03/01 20:56:48
>>348
もうすぐじゃないの? ただし32ビット

351:デフォルトの名無しさん
10/03/02 21:21:42
特定の位置からバイナリを読み取って、違うファイルとして保存するというプログラムを書いています。
fileopen関数で開いて、FileRead(F, Buff^, Size);でバッファに格納はできたのですが、
この格納したものはテキストでならstringですので取り出せますが、バイナリとして保存する場合はどのように取り出せばよいのでしょうか?
お力をお貸しください。

352:デフォルトの名無しさん
10/03/02 21:35:10
そのままでいいだろ

353:デフォルトの名無しさん
10/03/02 21:36:16
>>344
実装がどうとか以前に扱えないし
SSE2が四倍精度浮動小数点数扱えると思ってんの?

354:デフォルトの名無しさん
10/03/02 21:41:13
>>352
バッファはテキストとして保存可能ですが、そのバイナリがテキストでない画像とかを
どうやってバイナリとして保存するかがわからなくて・・・。


355:デフォルトの名無しさん
10/03/02 21:49:37
>>354
MemoryStream


356:デフォルトの名無しさん
10/03/02 21:57:44
>>355
それやろうと思ったんだけど、うまくいかなくて・・・
var
ms:tmemorystream;
begin
ms := tmemorystream.create;
ms.loadfromfile('TEST.dat');
//このseekがよくわからない。例えばSizeが300の地点から500までを読む場合の位置設定がわからないところ

ms.seek(?);

ms.read(Buff^,sizeof(buff));
ms.savetofile('TEST2.dat');
ms.free;

これでできなかったんです・・・。



357:デフォルトの名無しさん
10/03/02 22:05:49
>351
ファイルストリームで元ファイルを開く→所定の位置にseekする→メモリストリームにコピーする
→メモリストリームのPositionを0に戻す→メモリストリームをファイルに書き込む

358:デフォルトの名無しさん
10/03/02 22:13:33
>>357
レスありがと。
メモリストリームにコピーとは?どのような関数ですか?

359:デフォルトの名無しさん
10/03/02 22:34:57
CB_SETCURSELってチェンジイベントみたいなのって起きないのかな。
他アプリのコンボボックスを操作するのに、CB_SETCURSELで選択項目を
変えるんだけど、一回コンボボックスにクリックメッセージを送らないと
認識しないみたいなんだ。
これって、相手のアプリの作りの問題?
別のAPIがあるの?

360:デフォルトの名無しさん
10/03/02 22:50:08
>>354
意味分からん
何もしてないのにバッファが書き換わるとでも言いたいのか

361:デフォルトの名無しさん
10/03/02 22:51:47
>>360
簡単にいうとどうやってこの格納されたバッファをファイルとして保存するかなんです。

362:デフォルトの名無しさん
10/03/02 23:11:16
ファイルストリームでもメモリストリームでも好きなの使えば素敵やん

363:デフォルトの名無しさん
10/03/02 23:43:28
>>361
b: array[0..4095] of byte;
MS: TMemoryStream;
begin
for i:= 0 to 4095 do b[i] := $FF;
MS:= TMemoryStream.Create;
MS.Write(b, 4096);
MS.SaveToFile('c:\gomi.dat');
MS.Free;

364:デフォルトの名無しさん
10/03/02 23:58:58
>>363
書き込むだけの用途ならTFileStream使え
Create-Freeはtry-finallyで囲め
ハードコーディングすんな

365:デフォルトの名無しさん
10/03/03 00:07:55
>>364
うわ…

366:デフォルトの名無しさん
10/03/03 00:30:48
>>358
とりあえず、マニュアル(ヘルプ)読んでから、質問しろ

function CopyFrom(Source: TStream; Count: Int64): Int64;

ってのが見つかるはずだから


367:デフォルトの名無しさん
10/03/03 13:06:15
Windows7が動くDelphiはどのバージョンまで対応していますか
Delphi2以降は一応動くと思うのですが

368:デフォルトの名無しさん
10/03/03 13:36:48
Delphi上でOSを動かそうというのはなかなか難しいのではないかと。

369:デフォルトの名無しさん
10/03/03 13:59:04
>>351 単純な手があるんじゃないの ファイルAとBを開き、Aのファイルポインタを
移動してから、あとは全部AをBへコピー メモリに覚える必要とかまったくないと思う

370:デフォルトの名無しさん
10/03/03 15:37:49
>>368
Delphiで仮想マシン作れってことか

371:デフォルトの名無しさん
10/03/03 15:53:45
対応の意味によるんじゃね。
厳密な意味で対応してるのは最新の奴だけだろうし
Vista以前のDelphiだとVistaでウィンドウのプレビューがうまくとれないなんて細かい不具合があったし。

372:デフォルトの名無しさん
10/03/04 10:10:42
超初心者です。
Delphi2005 プログラミングテクニックVOL4
に載っていた簡単なイメージビューワを作ってみましたが
作成中にフォームのOpenPictureDialogをクリックすると、
すべてのファイル(*jpg,*jpeg,*bmp・・・)と正しく表示されるのに
実行すると、jpegがすべてのファイルの中に出てきません。
bmp、ico、emf、ぐらいしか表示されません
フィールターも見たのですが・・・・

コードはメニュー開く(&O)...の中に
if OpenPictureDialog. Execute then
begin
Image.Picture.Bitmap.LoadFromFile(OpenPictureDialog.FileName);
MainForm.Caption := OpenPictureDialog.FileName;
end;

ご教授頂ければ幸いです。

373:デフォルトの名無しさん
10/03/04 10:28:30
uses
jpeg;

374:351
10/03/04 18:50:43
とりあえずfilestreamで読み込み、指定の位置へ移動、バッファいれるためのメモリ確保までは問題なく動作しているようです。
ですが、readが間違えているのかうまくいかず、指定の位置からではなく、そのままファイルをコピーするものになったしまいました。
やりたいことは指定した位置から最後まで読み込んで、その読み込んだ部分だけをファイルとして書き出すことです。以下がソースになります。
ms := tmemorystream.Create;
fs:= TFileStream.Create('C:\AAA.dat',fmOpenRead);
try
fs.Seek(targetposition, 0);
Buff := AllocMem(SrcSize + 1);
fs.Read(buff^,srcsize);
ms.LoadFromStream(fs);
ms.SaveToFile('C:\ABC.dat');
finally
FreeMem(Buff);
ms.Free;
fs.Free;
end;
どうかご回答の程、よろしくおねがいします。Copyfromよりこちらの方が楽そうに思いしようしました。

375:デフォルトの名無しさん
10/03/04 19:16:24
buffは何のために確保してるの?

376:デフォルトの名無しさん
10/03/04 19:20:26
>>374
君がやっていることを例えると、

本を借りてきて、
メモ用紙に必要な事項だけ書き写して、
本をコピー機で全部複製して、
メモ用紙を捨てて、
本を返してる

377:デフォルトの名無しさん
10/03/04 20:32:46
>>375
部分的に読み取ったものを格納して・・・と思ったんですが、違うんですか?
>>376
その例えの必要な事項だけ書き写したのを欲しいんですが、余計なコード書きすぎとかですか?
この指定した位置から読み取ったバッファ=fsという理解ではないのでしょうか?

378:デフォルトの名無しさん
10/03/04 21:18:41
buffに格納したものを利用せずに捨ててる

379:デフォルトの名無しさん
10/03/04 21:51:23
>>378
この読み取ったバッファをファイル保存するために、
ms.LoadFromStream(fs);
ms.SaveToFile('C:\ABC.dat');
としたんですが、どうもうまくいかないのです。
何か良い手はございますか?

380:デフォルトの名無しさん
10/03/04 22:37:23
msにbuffを書き込めよw

381:デフォルトの名無しさん
10/03/04 22:49:54
>>380
レスありがとうございます。
言われた通りにしたらうまくいきました。
これまでお付き合いくださった方、ありがとうございました。
そしてお騒がせ致しました。

382:デフォルトの名無しさん
10/03/05 00:02:09
いいねぇくだすれらしくてw


383:デフォルトの名無しさん
10/03/05 02:27:05
もどかしいが嫌いじゃないぜ、この流れw

384:デフォルトの名無しさん
10/03/05 12:06:52
無意味なエラートラップならやらないほうがいい

385:デフォルトの名無しさん
10/03/05 12:51:14
無意味なエラートラップはない

386:デフォルトの名無しさん
10/03/05 15:07:49
try
 abort;
except
 abort;
end;


387:デフォルトの名無しさん
10/03/05 15:16:16
それは無意味なエラートラップじゃなくて無意味なコード

388:デフォルトの名無しさん
10/03/10 18:08:50
よく改造サイトでエミュでチートを・・・とか書いてありますが、これを(チートを)そのエミュ上で行うのではなく、
自作のプログラムで行おうとする場合どのような流れになるのでしょうか?
簡単にいうと、エミュでチートを行わずに、自作のプログラムでいま起動されてるエミュ上のゲームのデータを書き換える
というものを作りたいのです。


389:デフォルトの名無しさん
10/03/10 20:23:01
ガキ臭いやつだなぁw

390:デフォルトの名無しさん
10/03/10 22:33:19
>389
素直に「答えられません」と降伏宣言したらだどうだ?。嫌ならゴミレスするな

391:デフォルトの名無しさん
10/03/10 22:38:14
答えられません
ですから諦めて下さい

392:デフォルトの名無しさん
10/03/11 02:50:49
改造板行けよ

393:デフォルトの名無しさん
10/03/11 06:39:25
Delphi6まで使っていましたが、最近またDelphiで開発する
はめになりました。
で、Delphi2010の購入を考えております。

そこでお聞きしたいのですが、Delphi2010は、Delphi6
と比較して、何が良くなっているのでしょうか?
特にエディタの使い易さなどはどうでしょうか。

メーカが出している機能比較のPDFなどは見ておりますが、
実際の開発者さんの感想をお聞きしたいです。

作成するアプリは、SQLServerおよびAccessMDBを使う業務
アプリです。

よろしくお願い申し上げます。

394:デフォルトの名無しさん
10/03/11 06:53:43
使い勝手は人によるので。

>特にエディタの使い易さ
となれば、D6 でどこが不満だったのかをまとめれば答えやすいと思うよ


395:デフォルトの名無しさん
10/03/11 09:28:58
Delphi 2010 Architect - 30 day trial
URLリンク(downloads.embarcadero.com)

396:デフォルトの名無しさん
10/03/11 13:57:05
>>393
エディタはコードの折りたたみ等必要ないなら外した方がいい。
若干バギーな部分もあるが実用できるとは思う。
ただしvimなど外部エディタに慣れてるならそっちで環境整えた方がいいっていうレベル。
でもリファクタリングは便利。

生産性は上がってる。ジェネリクスがあるのでコードの記述量が劇的に減る。
C++でテンプレートを使えていたなら何も考えずに使えるはず。
テンプレートもよく分からないのなら、Delphi2009Handbookを読めば解説がある。

397: [―{}@{}@{}-] デフォルトの名無しさん
10/03/11 16:03:34
ジェネリクスはバグだらけ。とナカムラセンセが言っていますよ?


398:デフォルトの名無しさん
10/03/11 16:18:15
中村先生が指摘してたバグはすでに修正されてますが?
何年前の話を持ち出してるんだよ情弱

399:デフォルトの名無しさん
10/03/11 16:22:41
「Delphi ジェネリクス バグ」で検索すると中村の指摘が真っ先に引っかかるからな。
一番上のネタを持ってくる辺り、検索して知ったにわか知識ということがよくわかる。

400:デフォルトの名無しさん
10/03/11 22:54:43
なんかごめん・・・・

401:デフォルトの名無しさん
10/03/12 13:01:50
ジェネリクスなどのコンパイラの新機能にエディタは追いついてないので
古いバージョンからアップグレードすると既存の機能でいらいらする事結構ある。
前できた宣言の検索(Ctrl+Shift+上下キー)とか動かない部分とかあるし。
仕方なく通常のCtrl+F2の文字列の検索でソース追うはめになったり。

402:デフォルトの名無しさん
10/03/13 04:21:43
Delphi 2010のlicense_ja.rtfに書かれている
「指名ユーザーが本製品の使用を許可された唯一の個人である場合、
 適正な数のコンピュータに本製品をインストールすることができます。」
というのは、
「俺だけが使うのなら、自宅のデスクトップPCと、カバンに入れている俺資産のノートPCと、
 XPmode上の仮想PCの3つにインストールできるじゃん」
という認識でOKでしょうか?

自宅でも出先でも開発したいのよ。

403:デフォルトの名無しさん
10/03/13 07:01:11
その認識で良いと思いますが
ライセンス関連の質問は Embarcadero サポートに問い合わせることを勧めます。


404:デフォルトの名無しさん
10/03/13 08:48:25
へー グーグルってあてにならないんだな、ヤフーサーチ使おうっと

405:デフォルトの名無しさん
10/03/13 09:47:15
>>402
その認識で良いです。

確か「ナンセンス」でない「ライセンス」という考え方で、有名な
ライセンス形態だったはずです。

406:デフォルトの名無しさん
10/03/13 10:02:52
古き良き時代の「ナンセンスではないライセンス」は、かなり以前に撤廃されています。
当時はデジタルコピーを配布することが、今よりは大変だったため、ライセンス所有者でなくても
(複数の人が同時に使うので無い限り)利用可能でした。

その後ネットワーク速度の向上により、CD 一枚くらいなら気兼ねなく複製をコピーできるようになって、
ライセンス所有者でないと利用できないように変わりました。

実際には、インストール後にアクティベーションを行い、ユーザー名とシリアル番号とコンピューターを
結びつける作業を行います。

「適正な数のコンピュータ」というのは、アクティベーションの回数に上限があることを意味しています。
普通に使う分には問題にならないはずですが、もし上限に達したらサポートにメール/電話すれば
解除してもらえます。実際の値は10回か20回くらいらしいです。


407:405
10/03/13 10:38:29
>>406
そうだったのですか、それは大変失礼しました。間違った
書き込みをしてすみませんでした。

408:デフォルトの名無しさん
10/03/13 11:01:41
>406
今は上限はwebからincrementできる。名義変更は電話する必要があるけど。

409:デフォルトの名無しさん
10/03/13 14:28:16
incrementは1回ずつしか増やしてくれないのが面倒といえば面倒な現在

410:402
10/03/13 16:24:40
>>403,405,406,408,409
ありがとうございます。
週明けにでもEmbacarderoさんのサポート窓口に聞いてみます。
結果が分かったら報告しますね。

411:393
10/03/13 20:00:14
>>394,395,396
回答ありがとうございます。


>D6 でどこが不満だったのかをまとめれば答えやすいと思うよ

エディタに関して言えば、
 ・フリーカーソルモードが不便(ふつうのエディタみたいなほうがいい)
 ・次を検索はF3でOKだが、前を検索はShift+F3でできて欲しい。

IDEに関して言えば、
 登録したコンポーネントを探しにくい
 
VCLに関しては、
 TListViewがショボい(.NETの方が格段に高機能)

こんなところです。
Delphi2010ではどうなんでしょうか?

412:デフォルトの名無しさん
10/03/13 22:35:40
フリーカーソルはD6の時点で無効化方法あっただろ
少しは自分で調べろよ…
Shift+F3は可能、コンポーネントは名前で探せる
TListViewはそもそもListViewのラッパーで
コモンコントロールのバージョン(OSのバージョン)によって機能が違う
D6のメインターゲットOSは2000だし機能が少なくて当然

413:デフォルトの名無しさん
10/03/14 09:44:30
>>412
Delphi 2009のVCL機能
URLリンク(www.codegear.com)
TListViewは、Windows XP/Vistaで追加された機能が使えるようになった。

414:デフォルトの名無しさん
10/03/14 09:56:13
それってExplorerのグループで表示みたいなのもできる?

415:デフォルトの名無しさん
10/03/14 13:37:52
>>414
まさしくそれが追加された。


416:デフォルトの名無しさん
10/03/14 13:46:43
SHBrowseForFolderでフォルダー選択ダイアログを出すようにしているのですが、
ダイアログを表示させる時に過去に選択されたフォルダーがある場合、そのフォルダーを
選択した状態で表示させるにはどうすればいいでしょうか?

ググってサンプルコードをコピペして試しているのですが、BrowseInfo構造体で
lpfn := @FolderCallback;
lParam := LongInt(PChar(FolderPath)); //初期フォルダ指定
って、設定してもlParamの設定がおかしいらしくコンパイルエラーになってしまいます。

Dlphi7とXPの環境です。
よろしくお願いします。

417:デフォルトの名無しさん
10/03/14 14:33:29
そのコンパイルエラーの内容を書こうぜ

418:デフォルトの名無しさん
10/03/14 15:16:18
すみません。
解決しました。
lpfn := @FolderCallback;
の@を消して

lpfn := FolderCallback;
lParam := LongInt(FolderPath);

これで動きました。
でも、ここの設定はコールバック関数を指定するから
@っているはずですよね?
ググったサンプルコードも皆@付いてました。

419:デフォルトの名無しさん
10/03/14 15:28:13
FolderCallbackが(名前で推測できるとはいえ)何を表してるのか書いてないのに、どう回答しろと?

URLリンク(homepage1.nifty.com)

420:デフォルトの名無しさん
10/03/14 15:29:05
>>412

>フリーカーソルはD6の時点で無効化方法あっただろ
>少しは自分で調べろよ…

D6にフリーカーソルモードの無効化方法があるのですか?
調べても見つかりません。
済みませんが教えていただけないでしょうか。


421:デフォルトの名無しさん
10/03/14 15:33:56
Delphi6 フリーカーソル 無効 に一致する日本語のページ 約 5,280 件中 1 - 100 件目 (0.57 秒)

422:デフォルトの名無しさん
10/03/14 17:20:50
>>420
逆に何を調べたら情報が見つからないのか教えて欲しい

423:デフォルトの名無しさん
10/03/14 17:25:56
あなたには聞いてません。黙っててください。

424:デフォルトの名無しさん
10/03/14 17:33:39
またヴビ厨の自作自演か。さっさとハローワーク行ってこい。

425:デフォルトの名無しさん
10/03/14 21:55:58
>>423は偽善です。私が本物です。

426:デフォルトの名無しさん
10/03/15 09:13:44
フリーカーソル無効化のソースをいじくってDelphi2009、2010でも
うごくようにして使ってるぞ

基本的にはコンパイルエラーを取り除くだけで動く
メモリリークしているかもしれないがw

427:デフォルトの名無しさん
10/03/15 10:19:32
>>414
URLリンク(www.gesource.jp)

428:デフォルトの名無しさん
10/03/15 12:01:32
アプリケーションの実行フォルダにできるdel01.mbっていうファイルは何ですかね。

429:デフォルトの名無しさん
10/03/15 13:35:29
最近のって例えばTStringsにShuffleメソッドを後付けするような機能ってつきました?
古いのでも無理やりできない事もなかったけどオフィシャルな機能として。

430:デフォルトの名無しさん
10/03/15 17:38:45
いい加減秋田
本当に知りたいなら体験版で試せば?

431:デフォルトの名無しさん
10/03/15 17:51:49
海の水はどうしてですか?

432:デフォルトの名無しさん
10/03/15 18:10:44
はい

433:デフォルトの名無しさん
10/03/15 18:20:00
TListViewのSubItemがダブルクリックされた時に
いい感じに編集エリアを出す方法を教えれ。

434:デフォルトの名無しさん
10/03/15 21:09:34
>428
そんなファイルができたのみたことないわ。

>429
クラスヘルパ

435:292
10/03/15 23:22:02
>>428
DBアプリでBDEが作るテンポラリーファイルだったと思う。
アプリ終了しても残ってたら削除しちゃって大丈夫のはず。

436:デフォルトの名無しさん
10/03/16 14:22:20
>>433
ダブルクリックされたら動的に生成すれば素敵やん

437:デフォルトの名無しさん
10/03/16 17:15:17
編集エリアって何??

438:デフォルトの名無しさん
10/03/16 19:08:45
ああもう説明めんどくさい
こんな感じ
URLリンク(www1.axfc.net)

URLリンク(www.codeproject.com)
これをサル移植したけど、いんだかわるいんだか。

439:デフォルトの名無しさん
10/03/16 19:18:20
わるい

440:デフォルトの名無しさん
10/03/16 19:49:02
がっかり

441:デフォルトの名無しさん
10/03/16 20:49:37
わかる

442:433
10/03/16 22:33:14
くそう
せっかく作った(?)のだがウケが悪かったか。

443:デフォルトの名無しさん
10/03/17 02:35:29
がんばれ!ベアーズ

444:デフォルトの名無しさん
10/03/17 09:32:14
ふるぅ

445:デフォルトの名無しさん
10/03/17 15:11:13
それゆけ!レッドビッキーズ

446:デフォルトの名無しさん
10/03/17 20:31:10
コンボボックスのOnMouseLeaveがなんだか変で困っています。
コンボボックス上でマウスを動かすたびにすさまじい
回数OnMouseLeaveイベントが発生します。
エディット等ではなりません。

フォームにコンボボックスとメモだけ貼り付けて、
コンボボックス上でマウスを動かすと、
メモの行数がどんどこ増えていきます。
procedure TForm1.ComboBox1MouseLeave(Sender: TObject);
begin
Memo1.Lines.Add(IntToStr(Memo1.Lines.Count));
end;

環境はDelphi2010です。
なにかうまい対処法はないでしょうか…?

447:デフォルトの名無しさん
10/03/17 21:18:44
ほんとだ、MouseMove並みに呼ばれるなw
飛んでくるウィンドウメッセージ調べたら実際に大量に飛んできてるからVCLのバグとかではなさそうだが・・・・

448:デフォルトの名無しさん
10/03/18 05:12:59
とりあえずの対処としてはイベントの中でFindVCLWindow(Mouse.CursorPos)<>Senderをチェックするのが手っ取り早そう。

449:デフォルトの名無しさん
10/03/18 15:27:19
>>446
とりあえず原因はわかったけど書くと長くなるので対処法だけ
StyleをcsDropDownListにする、これだけ
csDropDownで使う必要がある場合はちょっと面倒なことになるけど

>>448
当たり前だけど全部TComboBox宛の正規のメッセージだから意味がない
違うコントロール宛のメッセージが誤配されてるわけじゃないからね

450:446
10/03/18 16:08:58
ありがとうございます。
やりたかったのは、「自作コンボボックスでMouseLeave時にヒントを隠す」
というものでしたので、無駄にメッセージは飛んできますが、対症療法的に
↓みたいな感じにしてみました。

procedure TMyComboBox.WndProc(var AMsg: TMessage);
begin
 if (AMsg.Msg = CM_MOUSELEAVE) then
 begin
  // 自分自身の上にカーソルがあるときは捨てる
  if (FindVCLWindow(Mouse.CursorPos) = Self) then
  begin
   Exit;
  end;

  // ヒント隠す処理
  :
 end;

 inherited;
end;

ちなみに気が付いたのは、コンボボックスのCustomHintにTBalloonHintを
割り当てたときに、激しくヒントがちらついたためです。
仮にバグではないにしても、実用上問題があるような…。

>>449
ユーザーの入力で絞込み、みたいなことをする必要があるので、
csDropDownにしなくてはならないのです…ジレンマです。
エディット部分が何か悪さしているのでしょうか?

451:デフォルトの名無しさん
10/03/18 17:12:30
Delphi で書かれたアプリがあるんですが
PC 環境を入れ替えたら一部(かつメイン)のファイル出力が出来なくなってしまいました
それ自体は '06-07 ぐらいで開発が止まっています
自分の環境は XP で、最近クリーンインストールしたばかりです
ファイアウォールでの出力禁止はしていません

症状は
「ファイル」メニューから「別名でファイル保存」を選択
ファイル出力のダイアログは出ず、メニューの「別名で…」が選択不能の状態になる
エラーメッセージやイベントログへの吐き出しはありません

替わりになるようなソフトが他にないため、バージョンを遡って試したり
関連情報をググったりしていますが正直お手上げ状態です…
スレ違いかと思いますが、少しでもヒントいただければ助かります

452:デフォルトの名無しさん
10/03/18 18:20:56
>>450
本筋とは外れるけど、フィルタリングみたいなことするならComboBox不向きじゃね?
TEditとTListBoxの方がいい気が

453:デフォルトの名無しさん
10/03/18 21:14:18
>>451
MLで聞いた方が早い気がする。
作者が参加している確率高いだろうし。

454:デフォルトの名無しさん
10/03/18 23:07:43
>451
互換モードでWin2kなり何なり指定してみては?あとは作者に聞くしかなかろう。
Delphiだからどうこういう問題じゃないと思うが。

455:451
10/03/19 00:07:39
>>453-454
レスありがとうございます

そうですね、作者とやりとりできれば最善なんでしょうが
東欧の人だし自分も英語に自信がなく…
ソースは公開されているので、もうちょっとやれるとこまでやってみます

456:デフォルトの名無しさん
10/03/19 07:20:27
ソース公開されてるならリンク書いておけば見てもいいと思う奴もいるだろうに

457:デフォルトの名無しさん
10/03/19 08:58:12
オープンソースなら自分で直せよ

458:デフォルトの名無しさん
10/03/19 10:18:39
>>451
その手の問題って大抵互換モードで解決できるがダメか?
そもそもオープンソースでファイル出力に問題あるとわかっているなら
そこ書き換えるだけじゃないか?

459:デフォルトの名無しさん
10/03/19 22:52:13
あーそうですね

460:451
10/03/19 23:20:30
件のソフトは初代氏と後継氏の二人?がメインで
最新版ソースには初代氏オリジナル部分は含まれず「必要だからここでDLしてくれ」的指示が入っていました
しかし指定サイトは消滅済み
結局、初代氏サイトの旧版ソース(丸ごと)に行き着きました
そこから必要部分をきれいに引き抜けるかどうかは、いまのところ不明
ちなみに初代氏exeのファイル出力はOKでした…。使い勝手も初代と最新で一長一短

とまあ、オープンでも時間が経っていると色々あるんだなぁと思った次第です
以上報告でした。以後名無しに戻ります

461:デフォルトの名無しさん
10/03/20 00:40:52
なんか突っこむ気も起きない
帰ってくれるようだから何も言わないけれども

462:デフォルトの名無しさん
10/03/20 11:05:05
コンポーネントのあるイベントに引数を追加したい時って
コンポーネントを継承した新たなコンポーネントを作らないといけない?
それとも、イベントをオーバーライドして普通のプロシージャーみたいな
使い方って出来る?

463:デフォルトの名無しさん
10/03/20 11:35:48
そのイベントってそのクラス内から呼ばれるんだろ?
だったら持たせたい引数をクラスのメンバーにしてやればいいんじゃないの?

464:デフォルトの名無しさん
10/03/20 11:52:46
>使い方って出来る?
無理です。

OnClick(Sender)に引数追加しようとしたら
呼び出し側もOnClick(Sender, data)とやらないといけないから
どうしてもコンポ側にも手を入れないといけないので。

465:デフォルトの名無しさん
10/03/20 16:36:32
Sender に無理やりポインタ渡すとかの話かと思った。

466:デフォルトの名無しさん
10/03/20 19:25:03
>>462
呼び出し元コンポがそのイベントを呼ぶためにClickやDoClickなどのメソッドを定義していて、
なおかつそれがvirtual、dynamic、messageで宣言されているならオーバーライドできると言えなくもない

実際にClickやDblClickなどのメソッドは仮想メソッドだから、
事実上OnClickやOnDblClickなどの呼び出しはオーバーライドできるし、
それがなくてもウィンドウメッセージがイベントの起点となっているような場合は
そのメッセージハンドラをオーバーライドしてやれば同じことができる

467:デフォルトの名無しさん
10/03/21 11:59:23
>>462
コンポーネントのイベントハンドラから、引数を追加したイベントを発行するってのは?

れい
type TNotifyEventEx = procedure (Sender, Option : TObject) of object;

...

property OnNotifyEx : TNotifyEventEx;

...

procedure THoge.HogeNotifyEvent(Sender : TObject);
var
uge : TUge;
begin
if Assigned(Self.OnNotifyEx) then begin
uge := TUge.Create;
Self.OnNotifyEx(Sender, uge);
uge.Free;
end;
end;



468:462
10/03/21 12:36:02
皆さん、レス有り難うございます。
自分にはレベルの高い話の気がしないでもないですが、
出来る前提で色々試そうとも思います。


469:デフォルトの名無しさん
10/03/21 17:18:14
具体的に何したいんよ
それによっては引数なんか追加しなくてもいい気がする

470:デフォルトの名無しさん
10/03/21 18:15:39
普通に Sender だけで何が不足なのかな?
イベントハンドラ内で Sender を通してそのオブジェクトが特定できれば、public な
プロパティーやらフィールドにアクセスするのは簡単だろうに・・

471:デフォルトの名無しさん
10/03/21 22:16:51
あなたには聞いてませんからw

472:462
10/03/21 23:10:05
ListViewのSubItemの編集をしたくてググったり
MLの過去ログ見たりしたんだけど、編集するセルの
ところにEditを出す方法しか見あたらないんで、
Draw系のイベントにstringの引数を追加したら
簡単に出来ないかなと思って。

473:デフォルトの名無しさん
10/03/21 23:11:13
あなたに回答してませんから

474:デフォルトの名無しさん
10/03/21 23:53:45
あなたに答えてませんから

475:デフォルトの名無しさん
10/03/22 08:02:06
DelphiのGUIアプリから、ApacheHTTPサーバにアクセスし、様々な情報を
やりとりしたいです。

使えそうなコンポーネントありますでしょうか?
(Delphi2010 Pro版を使っています)

476:デフォルトの名無しさん
10/03/22 08:43:55
>>476
Indy?

477:デフォルトの名無しさん
10/03/22 08:44:42
安価違い。>>475だた

478:デフォルトの名無しさん
10/03/22 09:02:02
>>476

説明不足ですみません。
私が探しているのは、Indy(など)の上位層になり、例えばフォームにあるTStringGridのデータとか
TEdit.TextなどをまとめてXMLエンコードしIndyに渡すようなコンポを探しています。
フォームとIndyの中間に位置するようなコンポです。

479:デフォルトの名無しさん
10/03/22 12:25:26
冗談だよね

480:デフォルトの名無しさん
10/03/22 13:20:03
いったい何がしたいんだw

481:433
10/03/22 16:24:22
>>462
>ListViewのSubItemの編集をしたくてググったり
おまえは俺か。
URLリンク(cc.embarcadero.com)
ここのは、キャプションの編集を横取りするタイプ。
BCCの文法が混じっていてコンパイル通らないという
サンプルとしていいんだかわるいんだか。


482:デフォルトの名無しさん
10/03/22 17:26:51
>>478
渡すだけとかそんなの自分でコーディングすればええやん
10行もあれば書けるでしょ…

483:402
10/03/22 21:43:34
すみません。サポート窓口に聞くまでもなく自己解決しました。
結局、店頭で購入した場合は「指名ユーザ使用権」であり、
このライセンスなら、自分の所有する複数のPCにインストールOKでした。

定義されていたのは、下記の3カ所。

License_ja.rtfの第2条
「(略)使用証書で他の種類の権利の取得が特定されていない限り、
お客様の取得した権利は指名ユーザー使用権です。(略)」

License_ja.rtfの第2条第3項
「(略)指名ユーザーが本製品の使用を許可された唯一の個人である場合、
適正な数のコンピュータに本製品をインストールすることができます。(略)」

Database Software and Developer Tools Licensing
URLリンク(www.embarcadero.com)
「指名ユーザー ライセンスは、特定の個人に使用権が与えられるライセンスです。
ソフトウェアは複数のコンピューターにインストールして使用することができますが、
同時に 使用できるのは1つのみです。指名ユーザーライセンスを、
複数のユーザーで共有したり譲渡することはできません。
現在、多くのCodeGear開発ツール が、このライセンス形態を採用しています。」

これで安心してノートPCにもXPmodeにもインストールできます。

みなさんコメントありがとうございました。
では名無しに戻ります。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch