09/12/01 20:43:51
<関連スレ>
【Delphi】 Indyコンポーネント 【C++Builder】
スレリンク(tech板)
Delphi初心者のための寺子屋
スレリンク(tech板)
delphiで作った有名ソフトって何があるの?
スレリンク(tech板)
Delphi持ってるならGLSceneを使え
スレリンク(tech板)
【Delphi互換!?】FreePascal【GPL】
スレリンク(tech板)
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
スレリンク(gamedev板)
Delphiでアクションゲームが作りたい!! Part2
スレリンク(gamedev板)
ネットワークゲーム作成のお勉強(Delphi専用スレ)
スレリンク(gamedev板)
delphiでMMO
スレリンク(gamedev板)
では質問どうぞ。
3:デフォルトの名無しさん
09/12/02 00:39:08
>>1
乙です
4:デフォルトの名無しさん
09/12/02 02:50:09
待ってました 乙~
5:デフォルトの名無しさん
09/12/02 14:26:09
質問です。
XP SP3 IE8
Delphi6 Personal にて
メインFormにTWebBrowserを張り
WebBrowser1.Navigate('URLリンク(www.ugtop.com)');すると
使用ブラウザに、
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;
と表示され、IE8の互換モードであると出てきます。
IE8で表示すると、ちゃんと
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;
となります。
TWebBrowserを使うと、互換モードになってしまうみたいですが
IE8モードにするにはどうすれば良いでしょうか。
6:デフォルトの名無しさん
09/12/02 16:14:32
>>5
今までWebBrowserコントロールを使っていたソフトがちゃんと動くように互換モードが規定値になってて、
IE8モードを指定するためには自分のソフトのファイル名をレジストリに登録する必要があるみたい
詳しくはMSDN参照
URLリンク(msdn.microsoft.com)
7:デフォルトの名無しさん
09/12/02 16:17:55
IE8モードは色々と動かないサイトが多すぎる
8:デフォルトの名無しさん
09/12/03 13:35:45
AvastアンチウィルスがDelphi製ソフトの一斉検出祭りらしいぞ!
9:デフォルトの名無しさん
09/12/03 20:39:51
Delphi製以外でも大量誤検知らしい
10:デフォルトの名無しさん
09/12/04 11:29:07
Delphi6 PersonalをWindows7 x64に入れたいんだがインストール出来ない・・・
回避策はありませんか?
11:デフォルトの名無しさん
09/12/04 11:31:56
動かないんならエミュるしかないんじゃね
12:デフォルトの名無しさん
09/12/04 14:15:14
7上のXPで動かせばいいじゃん
13:デフォルトの名無しさん
09/12/05 20:14:45
タイトルバーにアプリケーションの名前と一緒に、
アプリケーションをコンパイルした日付を表示したいのですが、
アプリケーションをコンパイルした日付を取得する方法ってあるのでしょうか?
毎回手作業で入力するのが面倒なので、プログラム的に何か方法が無いかなー?と思ってます。
hogehoge [ver.3.2.1.20091205]
みたいな感じです。
バージョンの取得は出来ているので後は日付だけなのですが…。
どなたかご存知の方よろしくお願いします。m(_ _)m
14:デフォルトの名無しさん
09/12/05 20:22:02
ファイルタイムスタンプからとれば。
15:デフォルトの名無しさん
09/12/05 20:22:19
>>13
ファイルの作成日時を取得すればいいんじゃね?
16:デフォルトの名無しさん
09/12/05 21:05:15
>>14
>>15
レスどーもです!
更新日時を使えばいけそうな気がしてきました。
一つ気になったのは人に配布する時、
一度zipかなんかで圧縮すると思うのですが、
解凍した時のタイムスタンプってどうなるのでしょう?
自分のPCの中にある圧縮解凍ソフトでは
作成日時は変更になるけど更新日時は問題ないみたいですが…
ソフトによって違いってあるのでしょうか?
17:デフォルトの名無しさん
09/12/05 21:15:19
自分なら
version.pas
に文字列リテラル埋め込んでスクリプトで更新するかな。
リリースビルドはコマンドラインからやるようにしているから間にそういうのを挟むのも簡単だし。
実際は日付なんてつけずにバージョン番号のビルド番号の自動更新に任せてるけど。
GExpertだかJEDIだかに__DATE__もどきがあったような気もしたけど忘れた。
18:デフォルトの名無しさん
09/12/06 21:35:39
Delphi2010の体験版のIDEのツールバーがバグってるんですが直す方法ないですか?
具体的には URLリンク(up.ultra-zone.net) みたいな感じで縦に伸びたり
ツールバー同士が重なってしまう状態です。
うろ覚えですが、インストール直後は大きさは普通で一部重なっているだけだったと
思うんですが、使ってるうちにだんだんと大きくなってきてますw
環境はXPSP3+IE8です。
19:デフォルトの名無しさん
09/12/08 09:40:56
>Delphi2010の体験版のIDEのツールバーがバグってる
私も XPSP3/IE8 ですがこのような問題には出会っていません。
記憶では、ツールバーの不具合はビデオドライバが古い場合に出るように思います。
ツールバーを右クリック、カスタマイズダイアログの「戻す」ボタンを、個々のツールバーに対して押していったら
どうなりますか?リセットできるかもしれません
20:デフォルトの名無しさん
09/12/08 10:20:04
>>18
これ見てワンワン
URLリンク(andy.jgknet.de)
治るかも
21:デフォルトの名無しさん
09/12/08 17:21:26
Win7にDel7インスコできるのかな?
以降、自分で試せは無しの方向で
22:デフォルトの名無しさん
09/12/08 19:26:34
自分の手で試せ
23:デフォルトの名無しさん
09/12/08 21:19:44
>>19,20
ありがとうございます、一応自己解決できましたので報告です。
修復インストールとか色々試したんですが、レジストリを弄ってなんとか直りました。
HKEY_CURRENT_USER\Software\CodeGear\BDS\7.0\Toolbars
のキーの中身を全部消したら大きさは元に戻りましたが、重なるのは相変わらずみたいです…
多分、一時凌ぎで根本的な解決にはなってないと思うのでビデオドライバの更新やパッチ当て
等もやってみようと思います。
D7から乗り換えの評価目的で入れて10日位ですが、なんか相変わらずバギーなIDEだなぁと言う印象
VSみたいにモッサリしてないのはいいんですけどね
ただ、言語仕様の拡張は結構魅力的なんですよね
24:デフォルトの名無しさん
09/12/08 21:26:09
コード補完がもっさりしてるんだよなぁ。頻繁に使うだけあって、気になる。
25:デフォルトの名無しさん
09/12/09 03:32:58
>23
ビデオ系ハードウェアの情報とかが無いと、これ以上は分かりませんね
ただ5年くらい前ならしも、最近はツールバーがらみのバグを聞いたことは無いので
かなりレアケースなのでは。とも思います。
画像とハード/ソフトウェア情報込みで、Embarcadero 本家フォーラムに投稿してみたら?
URLリンク(forums.embarcadero.com)
26:デフォルトの名無しさん
09/12/14 17:07:50
開発環境はDelphi6で使用データベースはInterBaseです。
伝票入力画面にて得意先参照フォームを表示して得意先コードを設定しています。
伝票登録後、前回選択した得意先を選択状態にするためにLocateを使用して得意先参照フォームを表示しています。
得意先コードが得意先参照フォーム内のDBGridに表示されている場合はうまくいくのですが(例:得意先コードが
1から35でDBGridの表示行数が12行の場合で前回選択得意先コードが10の場合)、
DBGridから隠れている部分の場合(例:得意先コードが14)、「グリッドインデックスが範囲を超えています。]という
エラーメッセージが表示されます。
そのときDBGridの最終行には空のレコードが追加されています。Locateの戻り値はTrueです。
Googleで検索した結果、フォームのOnShowイベントにてDBGrid1.DataSource := DataSource1;
という記述をすればいいという検索結果がありましたので、試してみましたが効果はありませんでした。
なにがよい対処法はあるのでしょうか。よろしくお願いします。
(読みづらい文章ですみません。)
27:デフォルトの名無しさん
09/12/14 17:51:33
こういうの見ていつも思うんだが、読みづらい文章だと自分で気付いてるなら
免罪符みたいに「読みづらい文章ですみません」なんて書かずに直せよ
28:デフォルトの名無しさん
09/12/14 17:58:57
>>26
えーとなんだっけ?
delphiやめて5年ぐらいたつけどたしかbookmark系の処理で幸せになれるはず
29:デフォルトの名無しさん
09/12/15 13:29:36
ちょっと特殊な環境なんですけど、英語版のWinXP(職場)と日本語版のVista(自宅)で、
ソースを持ってきたり帰ったりしながら開発しています。Delphiは7の英語版です。
それぞれ、新規にプロジェクトを作成して、TLabel等のCaptionに日本語を入力すると、
問題なく日本語で表示されるのですが、このソースをそのままもう片方のPCに持ってきて、
プロジェクトを開くと、Captionが文字化けしてしまいます。
ちなみに、dfmファイルを通常のテキストエディタで開くと、
object Button1: TButton
省略
Caption = #381#192#141's'
省略
end
このような感じになっています。
Delphiでフォームをテキストで表示した場合は、
object Button1: TButton
省略
Caption = '実行'
省略
end
このように文字化けせずに表示されます。
現状は、フォームをテキストで表示しクリップボードにコピーして、それをテキストエディタで
貼り付けて持って帰るようにしているのですが、大変面倒です。
何か良い解決方法はありますでしょうか。
30:デフォルトの名無しさん
09/12/15 13:39:17
ん?何がしたいの?
文字化けはParent(Form側)のエンコードを固定させればいいだけな気がするけど
31:デフォルトの名無しさん
09/12/15 13:50:23
>>30
フォームのフォントの文字セットはどちらの環境でも日本語になっています。
エンコードって、どこか別のところで設定できるのですか?
32:デフォルトの名無しさん
09/12/15 14:01:24
使った事ないけどこういうの使うとか
URLリンク(www.geocities.jp)
33:デフォルトの名無しさん
09/12/15 14:23:13
>>32
すみません。これで解決するような問題ではないような気がします。
どちらもDelphi7ですし…
34:デフォルトの名無しさん
09/12/15 14:28:47
>>33
それで解決するからやってみろ
ったくしょうがねぇな
これも提示してやるから後は自分でやれ
URLリンク(homepage1.nifty.com)
35:デフォルトの名無しさん
09/12/15 15:00:20
procedure TForm1.Button1Click(Sender: TObject);
begin
IdHttp1.Request.ContentRangeStart := 100;
memo1.Lines.Text := IdHttp1.Get(edit1.Text);
end;
とやっても指定した位置から読み込みできないのですがどのようにすればいいのでしょうか?
現象としてはHTMLの先頭から表示されてしまいます。
環境はDelphi7 + Indy10.0.52です
どなたかわかる方よろしくお願いします。
36:デフォルトの名無しさん
09/12/15 15:12:37
まずはリクエストヘッダを確認
Content-Range: bytes 100-/ほにゃらら
みたいになってるか?
なってないならカスタムヘッダつけろ
なってるならレスポンスコードを確認しろ
206以外が来たら鯖が対応してねぇ
つーかdelphi使ってもないのに何で俺しかいねぇんだよw
37:デフォルトの名無しさん
09/12/15 15:27:43
>>36
うおーありがとうございます
リクエストヘッダ見たら付いてなかったのでカスタムヘッダ付けてみました
見事に成功しました感謝です
38:デフォルトの名無しさん
09/12/15 15:31:24
>>34
どちらもDelphi 7なんですが、どういう事??
どう設定すればいいんですか?
39:デフォルトの名無しさん
09/12/15 16:22:36
バイナリDFMにしたら?
40:デフォルトの名無しさん
09/12/19 02:54:07
DBGridの仕様の問題でしょ。エラー出るならtryでトラップすればいい
41:デフォルトの名無しさん
09/12/20 18:21:33
del7のコンソールアプリでたまに
---------------------------
test.exe - アプリケーション エラー
---------------------------
アプリケーションを正しく初期化できませんでした (0xc0000142)。[OK] をクリックしてアプリケーションを終了してください。
---------------------------
OK
---------------------------
というエラーが出るんだけどこれってunitのinitialization~メインブロックより前の段階で出るメッセージ?
42:デフォルトの名無しさん
09/12/20 23:03:47
ブレークポイント張ってみればいいじゃない
43:デフォルトの名無しさん
09/12/21 06:09:30
OS が出す、.exe ローダーのエラーなので普通の人はブレークポイントは置けない。
エラーメッセージの英語版は
"Application failed to initalize properly (0xc0000142)"
URLリンク(systemwalker.fujitsu.com)
URLリンク(www.tomshardware.com)
あたりをみるに、システムの DLL の初期化に失敗。
「たまに」でるエラー。ということから
デスクトップヒープが足りない。ということかな。
もしそうだとしたら
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems
あたりを調整する必要がある。
まず、イベントビューアで OS のログを確認してみたら?
44:デフォルトの名無しさん
09/12/21 12:32:04
そこまで言うならお前がやってよ
45:デフォルトの名無しさん
09/12/21 15:40:44
初心者ってコンソールアプリ作りたがるけどコンソールのほうがデバッグ面倒臭そう
46:デフォルトの名無しさん
09/12/21 17:57:13
>デバッグ面倒臭そう
そんなことはありませんよ
47:デフォルトの名無しさん
09/12/24 22:45:10
FreePascal/Lazarus のスレは結局消滅して終わりか?
48:デフォルトの名無しさん
09/12/26 23:55:38
Delphiで構造体を引数にとるDLLを作って、VC++から呼び出そうとおもったんですが、値の渡し方としては
void func1( TRec* rec );
void func2( TRec& rec );
のように参照渡し、ポインタ渡し、どちらのほうがいいんでしょうか?
49:デフォルトの名無しさん
09/12/27 00:40:54
どっちでもいいが、NULLあるいはnilを渡したいときもあるだろうからポインタがおすすめ
50:デフォルトの名無しさん
09/12/27 16:47:26
>>49
ありがとうございます。ポインタ渡しでいこうと思います
51:デフォルトの名無しさん
10/01/03 02:32:26
すみません教えてください
日経ソフトウエアのTurboDelphiで始めるWindowsプログラムの本で
ジャンケンプログラムでラジオグループのイベントハンドラを作ろうとすると
エラーが出て作れません。
対策はあるでしょうか?
よろしくお願いいたします。
52:デフォルトの名無しさん
10/01/03 02:34:41
エスパーさんは今休みじゃないかな?
53:51
10/01/03 03:41:33
使ってるバージョンはDelphi2010です。
よろしくお願いいたします。
54:デフォルトの名無しさん
10/01/03 04:12:48
ソースぐらいうpしろksg
55:デフォルトの名無しさん
10/01/03 04:42:53
宣言部分無しで実装部分だけ書いちゃったんじゃないかとエスパーしてみる
とりあえずエラー出たならエラー内容も書こうよksg
56:51
10/01/03 08:49:41
すみませんでした。
ジャンケンプログラムを入力してコンパイルすると、
本には書いてませんが、セミコロンが必要と表示されて
コンパイルすることができません。
57:デフォルトの名無しさん
10/01/03 09:28:51
(´ρ`)そうなのかー
58:デフォルトの名無しさん
10/01/03 09:30:12
( ゚д゚ )そうなんすか!
59:51
10/01/03 09:37:57
すいません自己解決しました。
お騒がせいたしました。
60:デフォルトの名無しさん
10/01/04 00:08:23
メモ帳を編集中にF2キーを押したら自前アプリで音を鳴らす という動作をするアプリを自作したいんですが
ぐぐってもくそ難しいページしか出てきません。
他アプリにフォーカスがある状態でキーイベントが発生したらそれを取得するサンプルコード下さい。
明日の朝までに欲しいので早くしてくれ。
間に合わなくなっても知らんぞ?
61:デフォルトの名無しさん
10/01/04 00:14:09
ああ、ガムやるよ
62:60
10/01/04 02:21:17
というかソース貼られてもわかんねぇからもういいや。ソース貼りたい奴はここ見ろ。
URLリンク(www2.biglobe.ne.jp)
>>61
くっちゃくっちゃくっちゃ・・・・ぺっ
63:デフォルトの名無しさん
10/01/04 04:32:43
結局何が言いたいんだ?
64:60
10/01/04 04:44:15
>>63
質問取り消しな。俺には無理だ。
65:60
10/01/04 05:31:20
もう見に来ないから売買
66:デフォルトの名無しさん
10/01/04 17:04:55
delphi2010で、コード整形について質問です。
if then begin
1
end else begin
2
end;
のように、endとelseのあいだに改行の入らないようにしたいのです。
67:デフォルトの名無しさん
10/01/04 17:13:25
>>66
URLリンク(edn.embarcadero.com)
うそん。(><)
// INCORRECT
end else begin
// CORRECT
end
else
begin
おじさん泣いちゃうぞ。
68:デフォルトの名無しさん
10/01/04 20:01:25
>>66
delphi2010でそれできなくなったの?
69:66
10/01/04 20:35:09
>>68
いままでのdel5しか使ったこと無かったので、ソースの整形は初めてですわ。
end else
begin
みたく、elseとbeginのあいだの改行がどう設定しても取れなくて。
前からそうだったのかな?
70:デフォルトの名無しさん
10/01/04 21:08:42
>>69
俺の使ったことある物の記憶ではdelphi6,7,2007,2009はそんなことなかったと思う
俺も同じ書き方だからそれは不便だなー
71:デフォルトの名無しさん
10/01/04 22:28:09
Delphi2010のエディタで、コメント等日本語を入力していると
時々バグって(文字化けみたくなる)落ちるのは、うちだけでしょうか?
72:デフォルトの名無しさん
10/01/04 23:32:11
落ちるのは無いけど、コメント削除中とかにカーソルが変なとこ飛んで文字化けになるのはたまに起きる
73:デフォルトの名無しさん
10/01/05 23:07:53
>>72
おおよそ、同じような現象だと思います。
コメントの途中で挿入したり消したりしてると、
変なところで改行されたり文字化けしたり。
最新アップデートでも直ってなかったので
諦めるしかないかな…
74:デフォルトの名無しさん
10/01/06 07:21:02
あきらめられても。ねぇ。
再現できるデータとか何か無いかな。> エディタ周りバグ
75:デフォルトの名無しさん
10/01/06 07:21:51
化けた直後の画面とかだけでも有れば助けになるかとおもう。
76:デフォルトの名無しさん
10/01/06 17:56:21
つ キーロガー
でも、うちはIDEfix入れてるからかわからんけど
そいうことないなぁ。
77:デフォルトの名無しさん
10/01/07 17:37:32
用語の使い方が良く分からないので難解なところはエスパーしてください。
Application.CreateForm(TForm2, Form2);
これを、ですね。
procedure TEST00(h:TComponentClass; f:TForm)
begin
Application.CreateForm(h, f);
end;
な感じにフォームを引数にした関数にして
TEST00(TForm2, Form2);
みたいな呼び出し方をすることはできませんか。
ちなみに上のやり方はペケです。
コンパイルはとおりますけど、実行すると激しく長いエラー文で怒られます。
78:デフォルトの名無しさん
10/01/07 17:52:53
動作確認済み。
procedure test(InstanceClass: TComponentClass; var Reference);
begin
Application.CreateForm(InstanceClass, Reference);
end;
第二引数に Var がついていないので
TEST00(TForm2, Form2);
の呼び出しで Form2 の内容が更新されないことが、実行時エラーの直接の原因です
79:デフォルトの名無しさん
10/01/07 18:12:49
動きます、たしかに。
これで朝から夕方まで悩んでました。
ありがとうございました。
80:デフォルトの名無しさん
10/01/07 20:35:58
それをやる意味にすごく興味があるんだけど、
なぜそんなことをしようと思ったの?
81:71
10/01/07 22:28:18
来週開発環境がXP→7になるのでそれで直るかもしれないし
まあいいやと思いつつ、参考までにエディタが文字化けした
ときの画像を貼っておきます(モザイクの箇所はすべて正常です)。
ブレークポイントが張られていますが、これも私が張ったのではなく、
エラー発生時に勝手にこうなります。
URLリンク(convini.ddo.jp)
日本語部分の途中で挿入や削除をしようとすると
発生する気はします。IME(MS-IME2003)との
相性とかでしょうか…。
URLリンク(andy.jgknet.de)
に置いてあったIDE Fixも当ててみましたが、変わらずでした。
82:デフォルトの名無しさん
10/01/08 04:41:55
文字列入力中に文字化けが起きて
勝手にブレークポイントのマークが付く。と。
メモリ上のエディタバッファが壊れているように見えますね。
ここまでひどいとバグレポートが他にも有っても良いような.....
83:デフォルトの名無しさん
10/01/08 09:59:10
あの超つかいにくいエディタを使っている人っているんだね。
基本的に日本語処理部分は十分なテストは行われていないから
避けられるものなら、避けた方が無難。
使い慣れた外部エディタ使えば問題は一気に解決。
Indyの日本語処理もひどかったなぁ。
84:デフォルトの名無しさん
10/01/08 11:02:37
>Indyの日本語処理もひどかったなぁ。
Indy に関しては、あきらめずに、バグレポートを送り続けるしかないでしょう。
85:72
10/01/08 17:01:34
>>81
うちではATOK使ってそうなってるから、IMEとの相性はあまり関係ないかも
何となくだけど、2バイト文字の片方のバイトだけ削除したりして化けてる気がする
あとブレークポイントが勝手に張られたことはないなぁ
86:デフォルトの名無しさん
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を使う業務
アプリです。
よろしくお願い申し上げます。