( ゚Д゚)ノ Delギコ猫のプログラミング相談室part2
1 :
Delギコ :
01/09/03 11:09 ID:wHGoXFco
2 :
:01/09/03 11:09 ID:k4Hy6CEI
2
3 :
Delギコ :01/09/03 11:09 ID:wHGoXFco
___ ヽ _ /⊂ `∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | \( ゚Д゚)< 答えられない事もあるが、切れるなよ | / ∪ ∪ \____________________  ̄ ダレデモ シラナイコト ハ アル
4 :
Delギコ :01/09/03 11:10 ID:wHGoXFco
| 電 | |∧ ∧ 柱 |,,゚Д゚) <アラツは勘弁してね。 ⊂ | | | コノスレ ガ 板ヨゴシ トカ イワナイデ |∪ , ' , ; ' ; ∧∧∩゛ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚)ノ < ではヨロツク U / \____________ | | ノ∪∪
5 :
Delギコ :01/09/03 11:11 ID:wHGoXFco
2chの調子がワルゲ ☆ ・ ゚ * * ☆ ・ ゚ ☆ * ∧ ∧ トンデ ヨシ (,,゚Д゚) つ * ─ γ  ̄ ̄ ̄ ̄ ヘ ゚ ─ ─ /◎ ○ ◎ ○ヘ ─ ─ <_______> ・ ─ `―' `―' `―' _∧ ∧________ ∧ ∧ __ (_(,,゚Д゚).________(,,゚Д゚).__○ ⊂ ノ│ 2chねる │ ⊂ ノ 〜| _つ│ 復旧中 | 〜| _つ し '  ̄ ̄ ̄ ̄ ̄ し '
6 :
Delギコ :01/09/03 11:43 ID:wHGoXFco
無駄なコピペより有益なリンク貼れ
8 :
Delギコ :01/09/03 11:56 ID:wHGoXFco
9 :
Delギコ :01/09/03 11:57 ID:wHGoXFco
10 :
Delギコ :01/09/03 11:59 ID:wHGoXFco
フーーーーニャー
,,'''~''~'∧,,∧
〜′,,,;;,, (,゜Д゜)
>>7 オマエが晴れ
UU" " U U
11 :
名無しさん :01/09/03 12:13 ID:DHdGRFqU
12 :
デフォルトの名無しさん :01/09/03 12:30 ID:oDYd29Ko
TSaveDialog の OverwritePrompt を True にすると、 同名ファイルが存在するときに警告が出るよね? 仮に、あるディレクトリに hoge.txt hoge.html hoge.csv の三つのファイルがあったとする。 フィルタから テキスト文書(*.txt) を選んで hoge と入れても、 確認プロンプトは出ないよね。 hoge.txt ではないから。 フィルタから HTMLドキュメント(*.html) を選んで hoge と入れても、 確認プロンプトは出ないよね。 hoge.html ではないから。 だから、ダイアログ内のテキストエディタに入力した時点で 拡張子を補完し、上書き確認メッセージを出したかった。 これって需要あると思う、マジで。
13 :
Delギコ :01/09/03 12:34 ID:wHGoXFco
∧ ∧ 需要はともかく (;゚Д゚) ちょっと調べなければわからないのよ。 (| |つ CommonDialogを拡張して何かをするような 〜| | 技術情報をしらべなさい。>>MLのログに載ってるはず ∪∪ 折れはそれにはまだ疎い 氏ってる人教えてあげて。
15 :
Delギコ :01/09/03 12:56 ID:wHGoXFco
(\ /) \\ // (\\ //) \\\ /// (\\\\ ////) (\\\\\ /////) \\ ||| ||| // ( ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ | ⊂⊃ ⊂⊃ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄)  ̄ ̄( ̄ ̄//// ̄\ ∧ ∧ ∧ ∧ / ̄\\\\ ̄ ̄) ̄ ̄  ̄(//// ̄\\( ゚Д゚) (゚Д゚ )// ̄\\\\) ̄ (/(/// ̄(つ つ ⊂ ⊂) ̄\\\)\) (/(/| | | | \)\) (/((/ ∧| |∧ V))\) ∪ ∪ ∪ ∪ ニヂウ ジンカク カモ 蛯型だし
16 :
Delギコ :01/09/03 14:28 ID:wHGoXFco
∩ ∩ | ∪ | | 〜 |∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ,,゚Д゚)つ < 質問いいかな。 U \________ クラスメソッドというのはわかるのだが クラスフィールドというのは どうやってつくるのだ?無理なのかな。 1クラスで共通に保持したい内容があるのだが。
17 :
名無しさん :01/09/03 14:31 ID:DHdGRFqU
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>12 本当にそう動作するか確認したナリか?
(O)----(O)U-U) \__________
とりあえずD4ではそう動作しなかったナリ
testと入れて*.txtから*.cvsにフィルタ変更しても「test.txtに上書きしますか?」と出るナリ
つまりファイル名入れた時点の拡張子がファイル名に付随して有効になっているナリ
txt/cvs/html全部でどう切替えても訊いてくるから前提がおかしいナリ
推察するに、この時フィルタ変更にファイル名を追随させたのか?
type TMyClass = class(TObject); implementation var TMyClass_ClassField: Integer; とかやってるけど
19 :
デフォルトの名無しさん :01/09/03 15:03 ID:oDYd29Ko
>>17 いまD6つかってるけど、聞いてこないよ。
それはデフォルトの拡張子にTXTを指定してるからじゃないかな。
デフォの拡張子を無しにすると、拡張子のないファイルを
入力しても、何も言ってくれない。
>>18 おれもそんな感じ。
外部からアクセスしたいときはクラスメソッド経由で。
21 :
Delギコ :01/09/03 16:42 ID:wHGoXFco
>>クラスフィールド ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < 現在 実装中 Π ̄ ̄ ̄| \ |つ 感謝 ()  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | |___.| ∪∪
22 :
名無しさん :01/09/03 18:05 ID:DHdGRFqU
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>17 FilterIndex=0で再現〜
(O)----(O)U-U) \__________
疑って正直スマン
選択してるフィルタってGET出来ないでやんのクソだね
23 :
Delギコ :01/09/03 18:24 ID:wHGoXFco
>>22 ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ゚Д゚)っ < SaveDialog1TypeChangeイベントじゃないの?
|''U ̄| \_________________________
| ̄ ̄|
/ ゙ヽ
( ゚Д゚ )
人____ノ
24 :
Delギコ :01/09/03 18:25 ID:wHGoXFco
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ @' ― (,,゚Д゚) < クラスフィールドって、こんなんで実現する? し― し-J \___________ 自分自身のクラスインスタンスを保持する方法 interface 省略 implementation var FMyClassList: TList; constructor TMyClass.Create(AOwner: TComponent); begin inherited; FMyClassList.Add(Self); end; destructor TMyClass.Destroy; begin FMyClassList.Extract(Self); inherited; end; initialization FMyClassList := TList.Create; finalization FMyClassList.Free; end. これでFMyClassListのCountみたら同一クラスがいくつあるかわかるし 中身みたら他のものも参照できるしね。
25 :
Delギコ :01/09/03 18:52 ID:wHGoXFco
プルプルプル (( ∩ )) プルプルプル γ'⌒ヽ∧ ∧ し'ゝつ( ゚Д゚)つ D6のTLabeledEditの真似っこコンポーネント TComponent派生で BaseControlとMoveControlをプロパティで設定して Baseが動けばMoveも動くようなものを作ってたんだよ。 IDEが落ちて落ちてまいったよ。 しかも使いにくくてだめだめだわ。 IDE上で動作するプログラムってすごく大変。 アンカーともろぶつかるし こいつの2つのインスタンスが Edit → Button Base→Move Move←Base と設定されると無限に移動しつづけて行方不明になる不具合を 防止するためにクラスフィールドが欲しかったのよ。 教えてくれてありがとね。勉強になった。 なんかに応用できるといいんだがな。 何に応用するんだろう。
26 :
デフォルトの名無しさん :01/09/03 19:20 ID:MMfG58Tc
>>25 ComponentStateプロパティみて
実行時・設計時などの状態を判別させながらやらんといかんから
ちゃんとしたコンポつくんのってけっこうたいへんなんだよね。
27 :
デフォルトの名無しさん :01/09/03 21:18 ID:7q79cUcE
クラスフィールドって何? 4年間DELやってるけど、初めて聞いた(ようなきがする)
クラスメソッドに対してクラスフィールドって勝手にいってるだけっしょ
メンバー関数とかメンバー変数とかも同じかな
30 :
Delギコ :01/09/03 23:31 ID:7WmdGYpw
∧ ∧ / 読み方なんてどうでもよかれ (,,゚Д゚)< 実装みりゃ意味通じるだろ。 |つ つ \ ユニットオブジェクトとでも言えば通じるのか? @ | ∪ ∪
31 :
デフォルトの名無しさん :01/09/03 23:32 ID:GJWptisM
>>29 それって普通でしょ
ところで、このスレがスレッド一覧からじゃないと見えないのは
俺のところだけかな?
32 :
デフォルトの名無しさん :01/09/03 23:32 ID:GJWptisM
今、書き込んだら直った・・・ ???
33 :
デフォルトの名無しさん :01/09/03 23:37 ID:7WmdGYpw
>>32 URLのindex2.htmをindex.htmに直してください
34 :
Delギコ :01/09/03 23:42 ID:7WmdGYpw
( ) ( ) ( ) ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (゚Д゚,,)< 風呂は良いね、心を満たしてくれる。 | ̄ ̄ ̄| \_______ |二二二| |___| 从从从从 ( ) ( ) ( ) ( ) ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (゚Д゚,,)_ < なんか熱くなってきた。 |U ̄U | \_______ |二二二| |___| 从从从从
35 :
Delギコ :01/09/03 23:43 ID:7WmdGYpw
( ) ( ) ( ) ( ) ( ) ∧ ∧( ) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (;゚Д゚) < ウオァチャァ!! / づ \_______ | ̄ ̄ ̄| |二二二| |___| 从从从从 ( ) ( ) ( ) ( ) ____バシャァ | | │ |∧ ∧ ・・・・・ 从从 | | │ |(*゚Д゚) 从从从从 | | │ | _つつ  ̄ ̄ ̄ ̄~~~~~~~~~~~~~~
36 :
Delギコ :01/09/03 23:44 ID:7WmdGYpw
スレ立てすぎ>Del坊
あ、そうでもないや
39 :
名無しさん :01/09/04 00:06 ID:m9mxC.IA
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>23 イベント発生はつかまるが、じゃあ今何番目のフィルタかな〜ってのが取れん
(O)----(O)U-U) \ FileNameにも拡張子は憑いてやがらねぇナリ
.. \__________
∩
| |
∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ´Д`)// < 先生!
>>36 のスレ終了早すぎます!!
/ / \
/ /| /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
__| | .| | __
\  ̄ ̄ ̄ ̄ ̄ \
||\ \
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
.|| ||
41 :
デフォルトの名無しさん :01/09/04 02:28 ID:JE/PAhhI
>>23 , 39
おおおお
できたよォォォォ
SaveDialog1 の Filter に
TXT|*.txt|HTML|*.html|CSV|*.csv
を指定。OverwritePrompt を True にして
TypeChange イベントに以下のコードを。
case SaveDialog1.FilterIndex of
1: SaveDialog1.DefaultExt:='txt';
2: SaveDialog1.DefaultExt:='html';
3: SaveDialog1.DefaultExt:='csv';
end;
これで、拡張子に応じて上書き確認出るよ!
ただ…
1回目はどんなにいじっても上書き保存は表示されず、
2回目以降に表示したときに、上書き保存メッセージが
ちゃんとでてくるようになる。ナゼダ
42 :
デフォルトの名無しさん :01/09/04 02:53 ID:wmtIYgNo
コンポーネントの初期値としての DefaultExt プロパティが埋まっていないからだろ。
43 :
デフォルトの名無しさん :01/09/04 03:09 ID:aXNgoToA
∩ | | ∧_∧ | | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´Д`)// < 先生!AAをクロスプラットフォームにしたいです。 / / \ / /| /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ __| | .| | __ \  ̄ ̄ ̄ ̄ ̄ \ ||\ \ ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ || || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| .|| ||
png っていってあげなよ。
46 :
デフォルトの名無しさん :01/09/04 04:46 ID:hGMwuNT.
はじめまして、snafkinと申します。 タイピングゲームを製作中なのですが、 問題文をLabelで表示しています。 しかし、問題文が変わるとき、正確には 問題文の長さ(つまりLabelのCaption) が変わるときにフォーム全体がちらつきます。 リアルタイムのゲームとしては非常に 気になるところなのですが、なんとか 直す方法はないでしょうか?
47 :
正しい答え :01/09/04 04:49 ID:QTCWvBIA
Form の DoubleBufferd を True にしなさい。 ただし Tlabel.Repaint; を呼んではいけない。
49 :
Delギコ :01/09/04 10:13 ID:rI/kNmo6
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < おはようございまる ./ <V> \___________ ( U ノ .U U >先生!AAをクロスプラットフォームにしたいです。 リナクス板へGO 折れのNT4&IE5.5でもAAがズレるので ここはじっくり我満の子 SaveDialog問題は完全解決ということでよいですの? 半分カイケツしただけでほったらかしというのがMLには多いし。 >MLからヨウコソ!! | | | ∧ ようこそようこ ッテ シッテル? |Д゚) ⊂| | `〜 |∪  ̄ ̄ ̄ ̄ ̄ ̄ ̄ アイドルの田中ようこハ タバコ スッテテ ツカマチャタ ンダヨネ
50 :
デフォルトの名無しさん :01/09/04 11:20 ID:MmUrMvH6
有益になるように、きちんとしたまとめを書きましょう。 ■SaveDialog 問題結論 SaveDialog1 の Filter に TXT|*.txt|HTML|*.html|CSV|*.csv を指定。OverwritePrompt を True 、 DefaultExt txt に指定 TypeChange イベントに以下のコードを。 with SaveDialog1 do case FilterIndex of 1: DefaultExt:='txt'; 2: DefaultExt:='html'; 3: DefaultExt:='csv'; end; これで、選択中のフィルタに応じた上書き確認が出る。
51 :
デフォルトの名無しさん :01/09/04 11:24 ID:MmUrMvH6
>>ML 1年程前には毒舌マンセーの PCode 氏がいたんだが… ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ @' ― (,,゚Д゚)つ < 最近見かけねーナ し― ∪ \___________
52 :
32 :01/09/04 11:35 ID:64QSl782
54 :
デフォルトの名無しさん :01/09/04 12:08 ID:/Xfn2x2w
Delphi5 で作成中のCTI用のシステムがあります。 ダイレクトで担当の電話にコールされたときや、コール中に応答 した場合などに、他のアプリよりも最前面に表示するようにしています。 しかし、ポップしたときに他のアプリケーションなどで入力をしていた 場合などに、入力中の未変換文字がポップしたCTIのアプリへ 付いてきてしまいます。 変換文字が確定されていないので、当然の動作と思いますが これを、ポップしてきたCTI用のアプリへ移動しないようにすることは 可能なのでしょうか。
55 :
デフォルトの名無しさん :01/09/04 12:08 ID:/Xfn2x2w
CreateInputContext を呼び出して,入力空間を分離しなさい。
56 :
名無しさん :01/09/04 12:52 ID:w/.HSIv6
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>50 DefaultExtの使い方が全然違うのな。ビクーリしたYO
(O)----(O)U-U) \__________
57 :
Delギコ :01/09/04 13:38 ID:rI/kNmo6
なにこの結果??  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧ ∧ マターリ (,, ゚Д゚)∫ / つ旦O 〜(._[ ̄ ̄ ̄.]  ̄ ̄ ̄ function OneTenOne: Double; begin Result := 1.1; end; procedure TForm1.Button4Click(Sender: TObject); begin if 1.1=OneTenOne then ShowMessage('イコール') else ShowMessage('ノットイコール'); end; ノットイコールになるんですが。
58 :
デフォルトの名無しさん :01/09/04 13:40 ID:KScw1J2s
59 :
Delギコ :01/09/04 13:45 ID:rI/kNmo6
>>58 ∧ ∧∩ アータにとっては当たり前でも
(゚Д゚,,)ノ ワタシニャー当たり前でござらん
| つ
| ⊂)〜
∪ 教えてよ。
60 :
Delギコ :01/09/04 13:55 ID:rI/kNmo6
___ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ___( ゚Д゚)< キックボード持ってる奴・手挙げて __ /⊃三つ \_______ _〜′ / \ _ ∪ ∪ \ ◎ ̄ ̄ ̄ ̄◎ function OneTenOne: Double; begin Result := 1.1; end; function OneTenZero: Double; begin Result := 1.0; end; procedure TForm1.Button4Click(Sender: TObject); var A: Double; begin if 1.1=OneTenOne then ShowMessage('イコール') else ShowMessage('ノットイコール'); //○ A := 1.1; if A=OneTenOne then ShowMessage('イコール') //○ else ShowMessage('ノットイコール'); if 1.0=OneTenZero then ShowMessage('イコール') //○ else ShowMessage('ノットイコール'); end; ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜''~(,,゚Д゚) < サパーリわからんニャ。 UU'UU \________ 演算誤差??
61 :
言語ガイドをよく読むよ〜に :01/09/04 14:00 ID:4UyXpXxw
定数1.1の型は何か? Writeln(1.1-OneTenOne)の出力結果はいくつか?
62 :
デフォルトの名無しさん :01/09/04 14:12 ID:EcqU4D62
十進数の0.1は二進浮動小数点表記では割り切れないから丸め誤差が入るんだよ。
63 :
Delギコ :01/09/04 14:21 ID:rI/kNmo6
∧ ∧ / ̄
∩(,,゚Д゚) < にゃろめー。
⊂,,⌒ ,,つつ. \_
 ̄ ̄
>定数1.1の型は何か?
わからん。
>Writeln(1.1-OneTenOne)の出力結果はいくつか?
-8.87961579265628E-17
だった。
>言語ガイドをよく読むよ〜に
言語ガイドのどこニャ。それくらいオシエレ。けちんぼーめ。
・・・って、『真の定数』のところのこれか!
>定数式が実数の場合,その型は Extended です。
こんな1文・氏ッてるわけニャー。よ
>>62 そうかな?型が違うだけみたい。
const
B: Extended = 1.1;
C: Double = 1.1;
begin
if B=C then
ShowMessage('イコール')
else
ShowMessage('ノットイコール'); //○
end;
どうやらこうらしい
浮動小数点を=で判定することが間違ってると思うが・・・
65 :
62 :01/09/04 14:27 ID:EcqU4D62
>>63 割り切れないから型(精度)が違うと丸め位置も変わって値も変化するってこと。
そして
>>64 に同感。
66 :
Delギコ :01/09/04 14:35 ID:rI/kNmo6
>64 >浮動小数点を=で判定することが間違ってると思うが・・・ ∩ ∩ | ∪ | | 〜 | ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |( ,,゚Д゚) < じゃあどうすりゃいいの? U U \________ そもそもほとんど浮動小数点系の 処理を書いた事ないんだよ。 整数の場合、通常4バイトのIntegerで処理するのがいいので その感覚で4バイトのDoubleで処理してみたのだが… フドオショスウテンものの扱いはExtended で 行なうべきなのかな? Power関数なんて全部Extendedだし。 それともFloatToStrでもしろと?
67 :
デフォルトの名無しさん :01/09/04 14:48 ID:EcV/Ydtw
>>66 =で判定することはせずに
>,<,<=,>=とかで行う。
浮動小数点を扱う場合は許容誤差はいくらまでか
仕様決めるときにでてくるだろ。
68 :
デフォルトの名無しさん :01/09/04 14:52 ID:UBYhxRDc
10進数で説明しよう。 1/3 を小数点以下4桁まで格納できる変数と 小数点以下8桁まで格納できる変数に代入すると 0.3333 と 0.33333333 になるな。 この値が 1/3 から生成されたことをいったん忘れて、変数の 値を比較すると 0.33330000 と 0.33333333 を比較することになるな。 となればこの二つを異なる物と判断すべきだね? だから理屈はあるし、精度の異なる数値を直接比較してはいけない。 一律に「浮動小数点を=で判定することが間違ってる」といってはいけないのだが そのためにはちゃんとした誤差評価が必要になるので多くの場合は 差が「計算機イプシロン」と呼ばれる非常に小さな数より小さければ同じ物と 見なす。 D6 なら Math ユニットに SameValue とか IsZero, CompareValue があるからそれをつかえ。 その場合でも Double と Extended を比較することはできない。 既に情報が劣化しているのだからね。
69 :
補足 :01/09/04 14:55 ID:UBYhxRDc
情報の中に一つでも劣化した物があるなら、残りもすべてそれに 合わせる決断をしなきゃいけないよ。 Double を Extended に変換するのではなく、Extended を Double に 落として扱うこと。 MS のコンパイラは、最大精度でも(Delphi の) Double だから 逆にあまり問題が出ないんだよね...
70 :
名無しさん :01/09/04 15:04 ID:w/.HSIv6
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< ってか1.1と書くなら精度は小数1桁だから (O)----(O)U-U) \__________ procedure TForm1.Button1Click(Sender: TObject); function OneTenOne: Double; begin Result := 1.1; end; begin if Abs(1.1-OneTenOne) < 0.1 then ShowMessage('イコール') else ShowMessage('ノットイコール'); end; でイインジャネーノ?
71 :
Delギコ :01/09/04 15:26 ID:rI/kNmo6
>if Abs(1.1-OneTenOne) < 0.1 then
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) < これが重要かい?
ヽ/つ且~~ \___________
(__ _)
こんなんつくーてみたけど
少数点第○位まで数字が一致しているのを調べる関数
function IsshoValue(A, B: Extended; Digit: Byte): Boolean;
begin
if Abs(A - B) < (IntPower(10, -1*Digit)) then
Result := True
else
Result := False;
end;
これでよろしいか?ひとけた分ずれてるかな。
テストしてみまする。
>>67 > 浮動小数点を扱う場合は許容誤差はいくらまでか
> 仕様決めるときにでてくるだろ。
D6ダウソすれで四捨五入ネタがでていたので
任意の桁で四捨五入をする関数を作ってみたんだが
その最中で変になったのだ。
仕様なんてあるかい。
>>68 めっさわかりやすかた。サンクスコ。
72 :
Delギコ :01/09/04 15:33 ID:rI/kNmo6
∧∧ プハー (,, ゚Д゚) =3 < どうやらちがうな。 /つ日 難しいやこりゃこりゃ 〜(__ノ 考え中
あと、 固定小数点と違って浮動小数点は精度が同じでも指数部が違うと 表せる最小値にも違いが出てくるからExtended同士でも一度1.1を 代入してから1.0を引いた値と 0.1を比較しても不一致になるよな。
74 :
デフォルトの名無しさん :01/09/04 15:38 ID:4UyXpXxw
難しく考えすぎ。つーか遅すぎ。 大体それじゃ1001.0と999.0を近似できないじゃん。 function IsSame(A, B: Extended; e: Extended): Boolean; overload; begin Result := Abs(A-B) <= e; end;
75 :
Delギコ :01/09/04 15:54 ID:rI/kNmo6
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ゚Д゚) <
>>74 もそっと頼む
.=| |==U=U==.| |= \___________
| | | | | |
| | ノU U. | |
| | .| |
実際の数値をダイヌウしたテストコードなど見せてくれると
ありがたい。
IsSame(1001.0, 999.0, ?)=True
IsSame(1001.0, 999.0, ?)=False
IsSame(0.00019, 0.00020, ?)=True
IsSame(0.00019, 0.00020, ?)=False
ハテナにあてはめる"べき"なのはいったいなんの数値なんだ?
微妙にわからないが、100/10/1/0.1/0.01/0.001
という値を入れればいいの?
え、テストくらい自分でやれって。
汗ってやってる最中(モナカ)だよ。
76 :
デフォルトの名無しさん :01/09/04 16:16 ID:4UyXpXxw
IsSame(1001.0, 999.0, ?)=True の場合Abs(1001.0 - 999.0)は約2.0 なので余裕を持って IsSame(1001.0, 999.0, 10.0)=True IsSame(1001.0, 999.0, 1.0)=False いまいち何にはまってるのかわからないけど a±eの範囲内にbが収まってるかを判定する関数。 と解釈するとわかるかも?
77 :
Delギコ :01/09/04 16:28 ID:rI/kNmo6
∧ ∧ カタ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚),__カタ_ _< テストテストテスト ./ つ_|| ̄ ̄ ̄ ̄ ̄| \_____________ (, |\|| バイオ | '\,,|==========|  ̄ ̄ ̄ ̄ ̄ procedure Check(A, B: Boolean; Msg: String = ''); overload; begin if A <> B then raise Exception.Create('Checkエラー'+ Msg); end; function IsSame(A, B: Extended; e: Extended): Boolean; begin Result := Abs(A-B) <= e; end; procedure testIsshoValue; begin Check(True, IsSame(1001.0, 999.0, 10)); Check(False, IsSame(1001.0, 999.0, 1)); Check(True, IsSame(0.19999900, 0.20000000, 0.01)); Check(True, IsSame(0.19999900, 0.20000000, 0.001)); Check(True, IsSame(0.19999900, 0.20000000, 0.0001)); Check(True, IsSame(0.19999900, 0.20000000, 0.00001)); Check(True, IsSame(0.19999900, 0.20000000, 0.000001)); Check(False, IsSame(0.19999900, 0.20000000, 0.0000001)); Check(False, IsSame(0.19999900, 0.20000000, 0.00000001)); end; procedure TForm1.Button4Click(Sender: TObject); begin testIsshoValue; end; > いまいち何にはまってるのかわからないけど 自分でも混乱しまくり。慣れないことはつらい。 > a±eの範囲内にbが収まってるかを判定する関数。 > と解釈するとわかるかも? おー。 ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ゚Д゚) 目< わかったよー。 |つ つ || \ _____________ TTTTTTTT|TTTTTT  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ::.... |
78 :
デフォルトの名無しさん :01/09/04 16:30 ID:UBYhxRDc
IsSame の第3引数は省略可能。省略、または0を指定すると、適当な「小さい数」が 使われる。 しかし、1001.0と999.0 を同じとみなしたいのか。かなり大雑把だね。差が2でも 等しいとしたいのだから、IsSame の第3引数には2(実際には2よりちょびっと大きい値)を 指定するしかない。
79 :
名無しさん :01/09/04 16:33 ID:w/.HSIv6
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( TДT)< フォロー誰もくれん (O)----(O)U-U) \__________ IsSame( 1.1 , 1.1 , 0.1 )か
80 :
Delギコ :01/09/04 16:40 ID:rI/kNmo6
____∧ ∧_ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
___( ゚Д゚)<
>>79 だってレス流れるの早いんだもん
__ / ⊃ つ \______________
_〜′ /
_ ∪ ∪
>78
> しかし、1001.0と999.0 を同じとみなしたいのか。かなり大雑把だね。差が2でも
> 等しいとしたいのだから、IsSame の第3引数には2(実際には2よりちょびっと大きい値)を
> 指定するしかない。
∧ ∧ ──────
(゚Д゚ ) <そだそだ。2より微妙に大きくないとダメなのだ。
⊂⊂ \──────
\ 〜 ────
し し ─────
たぶん、1001と999は2というのは関係なく
一例として誤差の範囲10でTrue,誤差範囲1でFalseと
いう事になるのでしょう。
81 :
デフォルトの名無しさん :01/09/04 16:51 ID:4UyXpXxw
> (゚Д゚ ) <そだそだ。2より微妙に大きくないとダメなのだ。 いや、用途によるんだって。 近似の用途は浮動小数点演算の計算誤差に限定されるわけじゃないからね。 例えばこんなの if IsSame(30, age, 10) then ShowMessage('はたちでーす');
82 :
:01/09/04 16:55 ID:SLhNcKBE
Delphi関係の本が一冊も売ってない!Kylixが一冊あったが。。 だれかIndyを使ったプログラミングを詳しく解説してるものを 本でもサイトでもなんでもいいのでポインタ示してくれェェェ!!!
83 :
デフォルトの名無しさん :01/09/04 16:59 ID:UBYhxRDc
なんだ。IsSame を自分で定義しているのか。
84 :
デフォルトの名無しさん :01/09/04 17:29 ID:wcxkXuMg
C++BuilderとDelphiはどちらを選択すべきでしょう? VCLを使う分にはあまり変わらないのでしょうか。 どちらかというとC++の方が経験があるのですが...
>>84 C++の経験があるのならBCBでいいと思う。
ただしVCLのソースはPascalなので、ある程度知識が必要になってくると思う。
86 :
Delギコ :01/09/04 17:33 ID:rI/kNmo6
むむ?IsSameはどこにあるんだ?  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧ ∧ マターリ (,, ゚Д゚)∫ / つ旦O 〜(__n n[ ̄ ̄ ̄.]  ̄ ̄ ̄ > IsSame の第3引数は省略可能。省略、または0を指定すると、適当な「小さい数」が > 使われる。 > なんだ。IsSame を自分で定義しているのか。 D6PersonalにもD5エンプラにも付属していないみたいだが。 IsSameDayってのはあるけどね。
87 :
Delギコ :01/09/04 17:36 ID:rI/kNmo6
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(゚Д゚;) < はて?
⊂ ⊂| \___________
| |〜
∪ ∪
>>81 >if IsSame(30, age, 10) then ShowMessage('はたちでーす');
見事にたとえになってないと思うが,,,?なんで±10でハタチ?
if IsSame(17, age, 2) then ShowMessage('およそ女子高生でーす');
じゃないのか?(歌舞伎町もえましたな。こわいこわい)
>>80 では
1001.0と999.0これだと1001.000001...と998.9999999999と誤差がでてると
2だとIsSame = Trueにならないということがいいたいんだけど。
88 :
デフォルトの名無しさん :01/09/04 17:35 ID:AggqKte2
すみません、 HTMLタグ関連の質問はどこですればいいでしょうか、 多分、みなさんにとってアホらし過ぎる質問だと思いますが・・
89 :
Delギコ :01/09/04 17:45 ID:rI/kNmo6
>>84 -85 折れもBCBをお勧めする
∧ ∧
( ゚Д゚)
|∪ |
〜| |
U U
いずれVCLのPascalをよまなけりゃいけない場面もあるが
Delphiでも結局C++をよまなきゃいけないのと
同じことで必要だし。
ただ、C++を挫折しかけているならDelphiをやるのがヨシ
>>88 スレたてるまでもない質問スレをさがせ。
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) < 浮動小数点系の話。大変ためになりました
Π ̄ ̄ ̄| \
|つ 感謝 ()  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |___.| 教えてくれたりしたひと、みなさんにひとまず感謝。
∪∪
グッスリ眠れそうだ。
でもBCBってコンパイル遅くて氏ぬ。 Delphiと違いすぎ。
91 :
:01/09/04 18:06 ID:SLhNcKBE
92 :
デフォルトの名無しさん :01/09/04 18:32 ID:gKDhbZkI
>>90 BCBとDelphiで同じ物作ると
exeのサイズは違うの?
93 :
デフォルトの名無しさん :01/09/04 18:36 ID:94pNP4M6
透明のウインドウを作るにはどうしたらよいでしょうか? FormのプロパティーのVisibleをFalseにしても消えませんでした。 BorderStyle を bsNone にして Width と Height を 0 にすれば 見えないウインドウができましたが、これではタスクバーに表示されて しまうようです。
94 :
Delギコ :01/09/04 18:41 ID:rI/kNmo6
∧ ∧ ・・・・。 ( ゚Д゚) 〜( uu) IsSameというのはD6のSameValueの事か。 > function SameValue(const A, B: Extended; Epsilon: Extended = 0): Boolean; > overload; > > SameValue 関数を呼び出すと,2 つの浮動小数点値が等しいかどうか,またはおよそ等し > いかどうかを確認できます。 > A と B は比較対照の値です。 > Epsilon は,A と B が同じ値であると判断される最大の差です。 自作する場合もD5以前では0を代入してしまえばいいのか?
>>93 タスクバーになくてかつ、見えなければよいのか?
タスクバーから消す方法はあるよ。
96 :
デフォルトの名無しさん :01/09/04 18:50 ID:M7JWPLwA
97 :
93 :01/09/04 18:52 ID:94pNP4M6
ごめんなさい。 解決しました。 ヘルプに「メインフォームを非表示にする」って項目がありました。
98 :
93 :01/09/04 18:55 ID:94pNP4M6
>>96 ありがとうございます。
FAQのページも参考にさせてもらいます。
99 :
88 :01/09/04 18:55 ID:AggqKte2
89さん91さんありがとうございます。
100 :
デフォルトの名無しさん :01/09/04 19:00 ID:xjPsFd/I
昔から変わってないが、 >Borland Delphi 6 使用許諾契約 >『ボーランドのナンセンスでないライセンス規定』および制限付保証 このタイトルはジョークなのか??
101 :
名無しさん :01/09/04 19:08 ID:w/.HSIv6
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>100 ナウなヤングにバカウケだと思ったんでしょう
(O)----(O)U-U) \__________
102 :
Delギコ :01/09/04 19:16 ID:rI/kNmo6
∧ ∧ / ̄ ∩(,,゚Д゚) < たしか、バカウケってお菓子が・・・・・・・ ⊂,,⌒ ,,つつ. \_  ̄ ̄
103 :
デフォルトの名無しさん :01/09/04 19:18 ID:4niCzD4w
104 :
デフォルトの名無しさん :01/09/04 19:22 ID:xjPsFd/I
ところで… テキスト形式の外部データファイルを実行時に取り込み、 利用するプログラムがある。当然、実行ファイル以外に いくつかのデータファイルも配布するのだが、 このデータファイルというのがどれも1KB未満ぐらいの ごく小さなもので、なんとなく無駄に感じる。 なので、1つのファイルに結合してしまい、 そこから自由に指定のデータ文字列を得られるような関数は ないだろうか。 たとえば、 hoge1.dat hoge2.dat hoge3.dat をまとめた hoges.dat が あったとして、 Hoge1Strings := ExtractFileText( 'hoges.dat', 'hoge1.dat' ) のような感じでアーカイブから自由に取り出したり、また アーカイブに追加したり、編集したりする関数… つくりかた教えて。。。
105 :
デフォルトの名無しさん :01/09/04 19:28 ID:snX5e2Lk
106 :
104 :01/09/04 19:33 ID:xjPsFd/I
データファイルってのが、HTML等のテンプレートファイルなのね。 アプリで扱っているデータを出力する際のフォーマットを決めるためのファイルなのよ。 だから、改行ありまくりだし、アーカイブの状態でも テキストエディタでの編集が楽になるようにしたい… %begin hoge1.txt hoge1.txt の内容 %はエスペープに置き換え %end %vefin hoge2.txt hoge2.txt の内容 %はエスケープに置き換え %end てな感じで。
>>106 やり方判ってるならその通りの動作をするように作ればいいじゃん。
108 :
104 :01/09/04 19:56 ID:xjPsFd/I
だって面倒なんだもん。
リソースにでもしたら?
がいぞんのアーカイバのソースを参考にしてはどうだ? ソース公開されているものは結構あるぞ つってもファイル結合して取り出すくらいなら自力で組めると思うんだが・・・。
111 :
名無しさん :01/09/04 20:24 ID:w/.HSIv6
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>100 無料で賃金GETするなゴルァ
(O)----(O)U-U) \__________
<?xml version = "1.0" encoding = "Shift_JIS"?>
<!element テンプレート(ファイル名)>
<!element ファイル名(内容)>
<!element 内容(#PCDATA)>
<テンプレート>
<ファイル名>hoge1.txt</ファイル名>
<内容>
内容が無いよう
</内容>
<ファイル名>hoge2.txt</ファイル名>
<内容>
やるきも無いよう
</内容>
</テンプレート>
これでいいのかゴルァゴルァ
112 :
111 :01/09/04 20:25 ID:w/.HSIv6
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< 100じゃなくて
>>104 だスマンぞゴルァ
(O)----(O)U-U) \__________
113 :
デフォルトの名無しさん :01/09/04 20:27 ID:4UyXpXxw
>なんとなく無駄に感じる。 これが実際どれだけ無駄なのか、 許容できないくらい無駄なのか きっちり検証して、クライアントや周りに 意見を聞いてみたほうがいいよ。 勝手な想像で言わせてもらえば 数百以下ならファイル単位で管理したって 全然問題にならないと思うよ。 XMLもどきの独自フォーマットを導入することはできるけど お気軽に編集してタグ壊されたらどうすんの?
114 :
104 :01/09/04 21:20 ID:xjPsFd/I
半分ヤケクソで”面倒だから”と書いたのだが、 怒らずにマジレスしてくれた2chねらーにちょっと感動。 アーカイブ化関数、分解関数 まじめに考えてみるYO。
115 :
デフォルトの名無しさん :01/09/04 21:57 ID:UBYhxRDc
ひとつのファイルの内容をひとつの String 型変数に代入し、 それを保持するコンポーネントを作ってしまえばよい。 保持実体を String の動的配列にしておけば、増減も簡単。
>115 いまいち Sections: TStringListってしといて Sections.Strings[]にセクション名・ファイル名一覧を Sections.Objects[] as TStringListにセクション名に対応した本文を格納 ってのが良いね。
117 :
104 :01/09/05 05:06 ID:0bwO4T7E
第一段階:複数ファイルの(ヘッダ尽きでの)結合。 {Files で指定されたファイルをヘッダ付きで結合する ファイル名は256バイトまでで、それ以上は切り捨てられる 上書き確認はしない} procedure MakeArchive(const Files:TStrings; const Newfile:string); var i,p,Size:integer; Source:TMemoryStream; Dest:TMemoryStream; Buf:array [0..256-1] of Char; SizeBuf:array [0..16-1] of Byte; Name:string; begin Source:=TMemoryStream.Create; Dest := TMemoryStream.Create; try for i:=0 to Files.Count-1 do begin {ファイルを読み込む} if not FileExists( Files[i] ) then begin showmessage('FILE NOT FOUND'+#13+Files[i]); Exit; end; Source.LoadFromFile( Files[i] ); {ファイル名をBufにセット} Name := ExtractFileName( Files[i] ); StrPLCopy( Buf, Name, SizeOf( Buf ) ); {ヘッダ:最初の256バイトはファイル名を示す} Dest.WriteBuffer( Buf, 256 ); {ヘッダ:次の 16 バイトはファイルサイズを示す} Size := Source.Size; for p:=0 to High( SizeBuf ) do begin SizeBuf[p] := Size and $FF; Size := Size shr 8; end; Dest.WriteBuffer( SizeBuf, 16 ); {データ:バイナリを書き込む} Dest.CopyFrom( Source, 0 ); end; Dest.SaveToFile( Newfile ); finally Dest.Free; Source.Free; end; end;
118 :
104 :01/09/05 05:10 ID:0bwO4T7E
すまん、インデント忘れ。 {Files で指定されたファイルをヘッダ付きで結合する ファイル名は256バイトまでで、それ以上は切り捨てられる 上書き確認はしない} procedure MakeArchive(const Files:TStrings; const Newfile:string); var i,p,Size:integer; Source:TMemoryStream; Dest:TMemoryStream; Buf:array [0..256-1] of Char; SizeBuf:array [0..16-1] of Byte; Name:string; begin Source:=TMemoryStream.Create; Dest := TMemoryStream.Create; try for i:=0 to Files.Count-1 do begin {ファイルを読み込む} Source.LoadFromFile( Files[i] ); {ファイル名をBufにセット} Name := ExtractFileName( Files[i] ); StrPLCopy( Buf, Name, SizeOf( Buf ) ); {ヘッダ:最初の256バイトはファイル名を示す} Dest.WriteBuffer( Buf, 256 ); {ヘッダ:次の 16 バイトはファイルサイズを示す} Size := Source.Size; for p:=0 to High( SizeBuf ) do begin SizeBuf[p] := Size and $FF; Size := Size shr 8; end; Dest.WriteBuffer( SizeBuf, 16 ); {データ:バイナリを書き込む} Dest.CopyFrom( Source, 0 ); end; Dest.SaveToFile( Newfile ); finally Dest.Free; Source.Free; end; end;
119 :
104 :01/09/05 05:12 ID:0bwO4T7E
続き。
>>103 で結合したファイルを分離。
{ MakeArchive関数で結合されたアーカイブ Filename を分離し
DestPath ディレクトリ内に保存する ファイル名は 256 バイトまででそれ以上は切り捨て
上書き確認はしない}
procedure SeparateArchive(const Filename, DestPath:string);
var
Filesize:Int64;
i:integer;
Source:TMemoryStream;
Dest:TMemoryStream;
Buf:array [0..256-1] of Char;
SizeBuf:array [0..16-1] of Byte;
Name:string;
begin
Source:=TMemoryStream.Create;
Dest := TMemoryStream.Create;
try
Source.LoadFromFile( Filename );
repeat
{ヘッダ:最初の256バイトをGET}
Source.ReadBuffer( Buf, 256 );
Name := Buf;
{ヘッダ:次の16バイトをGET}
Source.ReadBuffer( SizeBuf, 16 );
Filesize:=0;
for i:=0 to 16-1 do
Inc( Filesize, SizeBuf[i] shl (i*8) );
{ファイルを抽出}
Dest.Clear;
Dest.CopyFrom( Source, Filesize );
{保存}
Dest.SaveToFile( IncludeTrailingPathDelimiter(DestPath) + Name );
until Source.Position >= Source.Size;
finally
Source.Free;
Dest.Free;
end;
end;
120 :
104 :01/09/05 05:14 ID:0bwO4T7E
>>119 >続き。
>>103 で結合したファイルを分離。
103じゃなくて118だ…
両関数とも動作確認済み。
もうすこし効率よくかけそうなのでアドバイスキボン。
121 :
104 :01/09/05 05:33 ID:0bwO4T7E
さらにつくってみた。動作確認済み。 { MakeArchive関数で結合されたアーカイブ Filename をから、 Target で指定されたファイルを探し出し Stream に抽出する。 アーカイブ内に目的のファイルが存在するならば True を返す} function ExtractFromArchiveToStream(Stream:TStream;const Archive, Target:string):Boolean; var Filesize:Int64; i:integer; Source:TMemoryStream; Dest:TMemoryStream; Buf:array [0..256-1] of Char; SizeBuf:array [0..16-1] of Byte; Name:string; begin result := False; Source:=TMemoryStream.Create; Dest := TMemoryStream.Create; try Source.LoadFromFile( Archive ); repeat {ヘッダ:最初の256バイトをGET} Source.ReadBuffer( Buf, 256 ); Name := Buf; {ヘッダ:次の16バイトをGET} Source.ReadBuffer( SizeBuf, 16 ); Filesize:=0; for i:=0 to 16-1 do Inc( Filesize, SizeBuf[i] shl (i*8) ); {ターゲットファイルかどうか} if AnsiSameText( Name, Target ) then begin {ファイルを抽出} Dest.Clear; Dest.CopyFrom( Source, Filesize ); Dest.SaveToStream( Stream ); {終了} Result := True; Exit; end else {POSITION をサイズぶんだけ移動} Source.Position := Source.Position + Filesize; until Source.Position >= Source.Size; finally Source.Free; Dest.Free; end; end;
122 :
104 :01/09/05 05:34 ID:0bwO4T7E
コレで最後。 { MakeArchive関数で結合されたアーカイブ Filename をから、 Target で指定されたファイルを探し出し DestPath ディレクトリ内に保存する アーカイブ内に目的のファイルが存在するならば True を返す} function ExtractFromArchive(const Archive, Target, DestPath:string):Boolean; var Stream:TMemoryStream; begin Result := False; Stream := TMemoryStream.Create; try if ExtractFromArchiveToStream(Stream,Archive,Target) then begin Stream.SaveToFile( IncludeTrailingPathDelimiter(DestPath)+Target ); result := True; end; finally Stream.Free; end; end;
123 :
104 :01/09/05 05:36 ID:0bwO4T7E
うーむ、ソースUP板に書くべきだったか…? しかし、これに圧縮関数を組み合わせれば 相当いろんな事ができると思うのだが。 有益な関数だと自負するぞ。
124 :
104 :01/09/05 06:00 ID:0bwO4T7E
さらに調子に乗ってみた。動作確認済み。 { MakeArchive関数で結合されたアーカイブ Archibve から Target で指定されたファイルを削除する。アーカイブ内に目的のファイルがない場合は Falseを返す} function RemoveFromArchive(const Archive, Target:string):Boolean; var Filesize:Int64; i:integer; Source,Dest:TMemoryStream; NameBuf:array [0..256-1] of Char; SizeBuf:array [0..16-1] of Byte; Name:string; begin result := False; Source:=TMemoryStream.Create; Dest := TMemoryStream.Create; try Source.LoadFromFile( Archive ); repeat {ヘッダ:最初の256バイトをGET} Source.ReadBuffer( NameBuf, SizeOf( NameBuf ) ); Name := NameBuf; {ヘッダ:次の16バイトをGET} Source.ReadBuffer( SizeBuf, SizeOf( SizeBuf ) ); Filesize:=0; for i:=0 to High( SizeBuf ) do Inc( Filesize, SizeBuf[i] shl (i*8) ); {ターゲットファイルかどうか} if AnsiSameText( Name, Target ) then begin { position をサイズ分だけ移動し、読み飛ばす} Source.Position := Source.Position + Filesize; end else begin {新アーカイブへ内容をコピー} Dest.WriteBuffer( NameBuf,SizeOf( NameBuf ) ); Dest.WriteBuffer( SizeBuf,SizeOf( SizeBuf ) ); Dest.CopyFrom( Source, Filesize ); end; until Source.Position >= Source.Size; Dest.SaveToFile( Archive ); finally Source.Free; Dest.Free; end; end;
125 :
104 :01/09/05 06:01 ID:0bwO4T7E
とどめだ。動作確認済み。 { MakeArchive関数で結合されたアーカイブ内のファイル名リストを得る Files.strings にファイル名が、 Files.objects にファイルサイズ(バイト)が格納される} procedure ArchivedFiles(const Archive:string; Files:TStrings); var Filesize:Int64; i:integer; Source:TMemoryStream; NameBuf:array [0..256-1] of Char; SizeBuf:array [0..16-1] of Byte; begin Files.Clear; Source:=TMemoryStream.Create; try Source.LoadFromFile( Archive ); repeat {ヘッダ:最初の256バイトをGET} Source.ReadBuffer( NameBuf, 256 ); {ヘッダ:次の16バイトをGET} Source.ReadBuffer( SizeBuf, 16 ); Filesize:=0; for i:=0 to 16-1 do Inc( Filesize, SizeBuf[i] shl (i*8) ); {ファイル名とサイズを追加} Files.AddObject( NameBuf , TObject(Filesize) ); { position をサイズ分だけ移動し、読み飛ばす} Source.Position := Source.Position + Filesize; until Source.Position >= Source.Size; finally Source.Free; end; end;
126 :
104 :01/09/05 06:03 ID:0bwO4T7E
>>117 -125
しかしなんだな。もう少し考えて書くべきだった。
同じようなコードがほぼ全ての関数に含まれている…
指定した position を基点に、ファイル名ーサイズー内容
を取り出す関数を一つ作っておくべきだった…
鬱だ。ねむいので、あとは任せた。
ファイルネーム長が256固定はヘッダでかすぎるから、可変でもいいかもしれんな。
128 :
Delギコ :01/09/05 10:16 ID:cQB7nAtY
∧ ∧ / ̄
( ゚Д゚)っ <
>>126 何時に寝てるんだよ!
|''U ̄| \_
| ̄ ̄|
/ ゙ヽ
( ゚Д゚ ) <キセツ ノ カワリメ カゼ ヒクナ
人____ノ
oooo
│ │
∧_l ∫ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) ∬ < 朝スパゲチを3日連続つくる
|∪ |つ=● \___________
〜| ̄|
U U イイ オヨメ サン ニナレルゾ
ダレカ モラッテクレ
エイキュウ シュウショク サセロ
129 :
デフォルトの名無しさん :01/09/05 10:22 ID:kk0fRdk.
もしかしたらあほな俺を笑ってくれ! Buf:array [0..255] of Char をゼロで初期化するのに SetPLCopy( Buf,StringOfChar(#0,SizeOf(Buf)),SizeOf(Buf)); こう書いている俺を笑え。ああ、笑うがいいさ。 他の書き方知らないんだよ!!教エレ
>>129 あはは
FillChar(Buf, SizeOf(Buf), #0);
131 :
Delギコ :01/09/05 10:41 ID:cQB7nAtY
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) <
>>116 オブジェ嗜好的にはその通りだ
ヽ/つ且~~ \
(__ _) まるでXMLパーサー作成方法のような木が・・・
>>104 HTMLテンプレートならテキストだと思うが
汎用的にバイナリも扱いたかった?
一回一回の関数呼び出しでファイルアクセスせずに
こんなの作れば綺麗くない?
アーカイブクラス
private
FFileText: TStringList;
//ファイル名を管理 Objectsプロパティでファイル内容を示すTStringListにアクセス可能
public
procedure SaveToアーカイブファイル(XMLファイル名: String);
procedure LoadFromアーカイブファイル(XMLファイル名: String);
procedure SaveTo複数ファイル(複数ファイル名: TStrings);
procedure LoadFrom複数ファイル(複数ファイル名: TStrings);
property Text[Index: Integer]: String;
property FileText: TStringList; read FFileText write FFileText;
end;
これなら複数ファイルに展開せずとも
アーカイブファイルを取り出して中身をイジクリたおしてから
アーカイブに書き込むという事も可能だよ。
プログラムのデータをアーカイブと複数ファイル同時に書き出したりも出来るし。
132 :
デフォルトの名無しさん :01/09/05 11:00 ID:sRu7fn.A
アーカイブファイルの構造って ファイル名[改行] ファイルの中身.CommaText[改行] ... ってやってReadlnでいいんじゃない。 ファイルなんていらないような。
133 :
名無しさん :01/09/05 12:44 ID:qbdJpBq6
134 :
104 :01/09/05 13:22 ID:kk0fRdk.
135 :
デフォルトの名無しさん :01/09/05 13:50 ID:qbdJpBq6
-下手人--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>134 ヤパーリ文字制限が気になるな
(O)----(O)U-U) \__________
要求仕様的には問題無いんだろうけど、一般的とは言わないだろうな
136 :
デフォルトの名無しさん :01/09/05 13:52 ID:kk0fRdk.
ところで、with ってすごく便利なんだけども with TStringList.Create do begin //この場所で、TStringList を引数にするような //関数を呼び出す事が出来ないんだよね end; 律儀に Hoge:=TStringList.Create ってやって、 関数に引数として Hoge を渡してやる以外に スマートなやり方ってないのかな。
137 :
ない :01/09/05 14:05 ID:sQAZ0lYk
138 :
デフォルトの名無しさん :01/09/05 14:34 ID:kk0fRdk.
ファイル名の長さに応じた、ヌル文字終端文字列ってどうやって 生成するんだ? NameBuf:PChar; Filename:string; Dest:TMemoryStream; ------------------------- NameBuf:=PChar( FileName ); Dest.WriteBuffer( NameBuf , Length(Filename)+1 ); だとダメだし、 P:Pointer; NameBuf:array of Char; Filename:string; Dest:TMemoryStream; ------------------------- SetLength(NameBuf,Length(Filename)+1); P := @NameBuf; StrPCopy( P, FileName ); Dest.WriteBuffer( P , Length(Filename)+1 ); だと当然エラーだ なんかわけわかんなくなってきたYO
140 :
ななし :01/09/05 15:35 ID:bRu2GJiw
>>138 Stream が出てくるのがよくわからんが
buf: PChar;
j: integer;
j := Length(Filename) + 1;
buf:=StrAlloc(i);
try
// 諸々の処理
finally
StrDispose(buf);
end;
で、PChar から参照するのはダメなの?
はずしてる?
141 :
Delギコ :01/09/05 15:40 ID:cQB7nAtY
ヘ ヘ (;゚Д゚) 全然わからんが (つつ U U PChar(Str)じゃだめ?
Streamにnull終端文字列として書き出したいのかな? dest.WriteBuffer( pchar(filename)^, Length(filename)+1 ); でよくないすか? pointerではなく参照を渡さないといかん程度
143 :
デフォルトの名無しさん :01/09/05 15:50 ID:kk0fRdk.
ありがとう、まさにそのとおり
>>142 おかげでファイル名長を制限しない
アーカイバができました
>>133 あはは
ZeroMemory(@Buf, SizeOf(Buf));
真面目な話をすると、#0とやってnull文字を指定するより、
手続き名で直感的に分かるので視認性の向上にも繋がると思われ。
でも内部では FillChar 呼び出してるのは秘密(藁
145 :
130 :01/09/05 18:40 ID:iRnxvvb6
>>144 誤爆?
ちょっと教えて。
ZeroMemoryってD6から? 手許のD5にはないんだけど。
146 :
デフォルトの名無しさん :01/09/05 18:41 ID:F4TkSYjU
>>146 Σ(゚д゚lll)ガーン
そうだったのか。気づかなかった。
さんきゅ。
-馬鹿垂--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< ウプCGIを腐らせてしまっているので、お待ちください (O)----(O)U-U) \__________
>ZeroMemory つっても、実際の実装はFillChar(,,0)だけどな。Windows.pas参照。
150 :
Delギコ :01/09/05 23:42 ID:2b4KrEsE
∧ ∧ (*゚Д゚) /つ□ やっとD6を手に入れた。 〜( ノ CLXで遊んでみよう。 U U
151 :
Delギコ :01/09/05 23:59 ID:2b4KrEsE
∧ ∧ / ̄ ̄ ̄ ̄ (゚Д゚ ,,)< アプリケーションWindowはどこかへ逝ってる _| ̄ ̄||_) \____ /旦|――||// /| | ̄ ̄ ̄ ̄ ̄| ̄| . | |_____|三|/ タスクバーボタンの表示がForm1だ。 いったいどうなってるんだろう・・・?? 既存のコンポーネントは動作するんだろうか?
-馬鹿垂--∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< 一部復旧 (O)----(O)U-U) \__________ 原因は、調子に乗って差別用語登録しまくったら(w EUC非対応漢字?書いちまったらしい。んでチェッカーがコケてた djデータはバックアップから修復中なんで大丈夫だと思います。 迷惑かけて正直スマン やっぱり差別は良くないと体で覚えたーよ
153 :
Delギコ :01/09/06 00:53 ID:aeR3sw7s
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚),_______< ウニコードなんとかならん? ./ つ_|| ̄ ̄ ̄ ̄ ̄| \_____________ (, |\|| VAIO | '\,,|==========|  ̄ ̄ ̄ ̄ ̄ D6でも元の形式にならないものだろうか。 とりあえず object Button1: TButton Caption = #12508#12479#12531#65297 end ↑↓ object Button3: TButton Caption = 'ボタン1' end テキスト相互置換えツールつくってよ!
154 :
デフォルトの名無しさん :01/09/06 01:04 ID:zoVld8hw
まぁ、修正を待て。
155 :
Delギコ :01/09/06 01:21 ID:aeR3sw7s
∧ ∧ /
(,,゚Д゚) < VCLとCLXどっちでアプリ作るか悩むぞ。
|つ つ \
〜 |
∪ ∪
微妙なライブラリが違いが
別世界のDelphiを使っているみたいだよ
チョイ興奮気味
∧ ∧ / ̄
∩(,,゚Д゚) <
>>154 修正で治るのかにゃろめー。
⊂,,⌒ ,,つつ. \_
 ̄ ̄
∧∧∩゛ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚)ノ <
>>152 ご苦労様
U / \____________
| |
ノ∪∪ オヤスミナサイ
156 :
デフォルトの名無しさん :01/09/06 01:24 ID:vrE4kITk
そーいえば、エディトボクースで、ウニコード入力できるようにするにはどうしたらよいのでしょう。
157 :
Delギコ :01/09/06 02:07 ID:aeR3sw7s
___ ヽ
_ /⊂ `∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | \( ゚Д゚)<
>>156 CLXならEditのフォントのCharSetを設定だ
| / ∪ ∪ \____________________
 ̄
fcsUnicode にすると、ハートマークまで表示された。
VCLは氏らん、というか教えろ。
158 :
デフォルトの名無しさん :01/09/06 06:26 ID:LzNtG3po
Delphi6落としてみたけど、TClientSocketとTServerSocketのヘルプがない・・・ (SockCompユニットの中身はヘルプ全くなし?) 使い方とかサンプルの載ったurlきぼんぬ。
>158 人を頼らずに自分でやれ。 まあ、他力本願だから、たいしたことも出来ずにデルファイ引退っぽいな。 TClientSocketと検索かけたら大量に出てくるぞ。 158みたいな人間は、どうせろくなプログラムをかけないんだからやめたほうがいいです。 自分で探してみて無ければ聞くのなら分かるけどな。
160 :
デフォルトの名無しさん :01/09/06 06:51 ID:kSDzajWs
Delphi6 のヘルプは正直不備がおおいので、 Borland のダウンロードページから Delphi5の ヘルプ最新版をDLして、並行利用したほうが良い。
161 :
VB厨 :01/09/06 08:51 ID:87jVERoo
DelphiってDirectXをバリバリにつかった3Dのアクションとか作れます? まぁ、作れるんでしょうけどゲーム用途に向いていますか? 実行速度とか含めて。
162 :
デフォルトの名無しさん :01/09/06 09:30 ID:EuzXF8BA
>161 速度が問題にならない限りは普通に使える。 でもチューニングに突入してポインタ(参照にあらず)使い出すと むちゃくちゃ汚いコードになる。この辺はC/C++の方がすっきりかける。
>>161 ぜんぜんオッケー。
つかむしろDelphiでゲーム作ってる人って結構多くない?
ただ、まともな3Dアクションなんて言語に関係なくそうそう見たことない。
ていうかそんなのはいわれなくてもわかるだろうけど。
いや、なにが言いたいかって言うと、つくれますか?と聞かれて、
ハイ作れますと言えるが、実際にそういうのをいちいち聞いてくる人間が
作ったためしはないということ。
FF作れる言語はなに?と対して変わらん。
164 :
デフォルトの名無しさん :01/09/06 10:50 ID:kSDzajWs
>>157 >CLXならEditのフォントのCharSetを設定
ルーチンユニットにはCLXとVCLの2種類があるというのは
わかったんだけど、コンポーネントにも2種類あるの?
165 :
Delギコ :01/09/06 11:00 ID:ARZrt0jo
StrToInt('xFF'); StrToInt64('xFF'); ∧∧ どうして上はOKで ( ゚Д゚) 下は"整数じゃあ〜りません"なんだYO ∪ | ボランドのイケズー。 〜 つ ∪"'
166 :
Delギコ :01/09/06 11:05 ID:ARZrt0jo
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,, ゚Д゚) <
>>164 =====U U====\________
| ギコ |
| まっしぐら |
 ̄ ̄ ̄ ̄ ̄ ̄
ルーチンユニットではなくて、同じTEditという名前でも
VCLはWindowsのコントロールを
CLXはWinでもLinuでもQtをラッピングしているから、別物だ!
でないとCLXがクロスプラットホームで同じ動作するわけないニャ
虫眼鏡でジーーーットみると微妙にフォントが違うなり。
ちなみにD6PersonalではCLXアプリは作れないよ
167 :
デフォルトの名無しさん :01/09/06 11:17 ID:kSDzajWs
>>166 なるほど、Del6Perだからどのタブを見ても
普通のコンポーネントしか見当たらなかったんダネ。
168 :
デフォルトの名無しさん :01/09/06 11:23 ID:kSDzajWs
ところで、2つのファイルパスが同じファイルを指 しているかどうかを判定したいのだけど、WINで は大小文字を区別しないで比較しないといけないし 、短いファイル名と長いファイル名を考慮しないと いけないでしょ。でもLinuxでは、そのまんま パス文字列を比較するだけでよいでしょ。 KylixかDelphiか、コンパイラによって {$IFDEF}で処理を分けたいんだけど、どち らの環境で何がDEFINEされているかがわから ない。そういう一覧ってどこかにない?もしかして HELPにのってるのか…?
169 :
Delギコ :01/09/06 11:25 ID:ARZrt0jo
StrToInt64('-$000FFFF'); StrToInt('-$000FFFF'); ∧∧ ヤッテラレン (#゚Д゚) ∪ | 〜 つ ∪"' どうして上はOKで 下は"整数じゃあ〜りません"なんだ! いいかげんにしてくれ!
170 :
デフォルトの名無しさん :01/09/06 11:41 ID:kSDzajWs
なんか Integer だと、符号 + - と $ を連続しては 付けられないみたいだね。 Val( '-$FF', int, E ); だと2文字目がエラーになるし Val( '+$FF', int ,E ); でも2文字目がエラー Val( '-$FF', i64, E ); や Val( '+$FF', i64 ,E ); はぜんぜん平気ね。
>>168 全部かどうか知らないが
「条件コンパイル指定の使い方」にのっている
172 :
デフォルトの名無しさん :01/09/06 12:16 ID:kSDzajWs
>>171 ありがとう、
Delphiプログラマーズガイド→
CLXをつかったクロスプラットフォーム開発→
クロスプラットフォームアプリケーションの作成
に載っていたよ。
173 :
VB厨 :01/09/06 12:19 ID:87jVERoo
>>163 >ていうかそんなのはいわれなくてもわかるだろうけど。
>いや、なにが言いたいかって言うと、つくれますか?と聞かれて、
>ハイ作れますと言えるが、実際にそういうのをいちいち聞いてくる人間が
>作ったためしはないということ。
>FF作れる言語はなに?と対して変わらん。
うっ、痛い所を突かれた。
でも、ガンバってみます。はい。
>>173 Delでゲーム作りは仲間も多いし、ツールの能力的にも必要十分なので
VCとかでやるよりはやりやすいと思うぞ。
つ〜わけで頑張って下され。
175 :
デフォルトの名無しさん :01/09/06 12:41 ID:kSDzajWs
あのー Del6ヘルプのVCL−CLX対応表に、 >FileCtrl 使われなくなっている と書いて歩けど、LINUXで実現できないとかではなくて、 あくまでも「使われていないから移植しない」て事でしょ? FileCtrl の SelectDirectory はよく利用してるんだけど、 もしかしてもっと良い別の関数が用意されている?
176 :
Delギコ :01/09/06 13:23 ID:ARZrt0jo
177 :
Delギコ :01/09/06 13:39 ID:ARZrt0jo
178 :
175 :01/09/06 14:28 ID:lykpdZBY
>>176 あ…もしかして、Win3.1ライクなSelectDirectoryが
FileCtrl製であって、もう一つのSelectDirectoryは
FileCtrlではないという事か!
納得。
>>168 LinuxというかUnixではlinkがあるから、ファイルの同一性はパス名だけじゃ
分からない。stat(2)かfstat(2)を使うこと。
Kylixでstat(2)がどういう風に使えるのか知らんし、pascalなんて忘れてるの
で文法的に正しくないかも知れんが。
function identical_file(path1: string, path2: string): boolean;
var
s1, s2 : stat;
begin
if stat(path1, s1) < 0 then
is_same_file := false
else if stat(path2, s2) < 0 then
is_same_file := false
else
is_same_file := s1.st_dev = s2.st_dev and s1.st_inode = s2.st_inode;
end;
もし存在しないファイル同士の比較するなら、ファイル名部分を取り出して比
較、一致するならディレクトリ部分に対して同じことを繰り返す。あとUnixで
は/が連続していてもWindowsのようにエラーにはならない。
180 :
179 :01/09/06 15:03 ID:BXn1AL22
>> is_same_file := false しまった。is_same_fileじゃなくてidentical_fileね。途中で関数名変えたも んでミスった。
181 :
名無しさん :01/09/06 17:06 ID:38m1ExPU
乖離ックス-.∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< 復旧完了 (O)----(O)U-U) \__________ 問題あったら指摘4649
182 :
デフォルトの名無しさん :01/09/06 18:32 ID:NES0mnLA
VBからDelphi(正確にはkylix)に乗り換えました。 分からないところがいっぱいあるので質問させてください。 1.vbのcall命令みたいな物は無いのでしょうか? prosudureで宣言されてる所に飛ぶとかそういうのです。 ------------------------------------------- Prosudure TForm1.Button1click(Sender: Tobject); begin 式1 end; Prosudure TForm1.Button2click(Sender: Tobject); begin 式1に飛ぶ end; ------------------------------------------- こんなのです
>>182 Button1Click(Sender);
だが、
イベントハンドラ直接呼ぶのはちと痛いので
Procedure TForm1.Shiki;
begin
式1;
end;
Procedure TForm1.Button1click(Sender: TObject);
begin
Shiki;
end;
// Button2の処理も同じならButton2のOnClickはButton1Clickを選んでおく /
みたいにしたいところ
184 :
163 :01/09/06 18:38 ID:fxSN01Ss
>>173 ゴメンいいすぎた。これじゃ俺も厨房丸出しだ。
せっかくDelphiに来たというのにきついこといってすまん。
>>182 関数間goto(イヤーン)じゃなくて単なる関数呼び出しなら
Prosudure TForm1.Button2click(Sender: Tobject);
begin
Button1click(Sender);
end;
185 :
163 :01/09/06 18:40 ID:fxSN01Ss
かぶった('д`;) 182の方法の方がいいね
186 :
デフォルトの名無しさん :01/09/06 18:41 ID:fxSN01Ss
>182の方法の方がいいね 183の方法の方がいいね もういい。氏んでくる
188 :
Delギコ :01/09/06 18:54 ID:ARZrt0jo
∫ ∧,,∧ ∬ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚ノ,っ━~ < 氏なんでよろし。 _と~,,, ~,,,ノ_. ∀ \_________ .ミ,,,/~), .| ┷┳━  ̄ ̄ ̄ .し'J ̄ ̄|... ┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ .┻ 酒でも飲んで落ち着け
189 :
デフォルトの名無しさん :01/09/06 18:56 ID:lykpdZBY
…TListView でアイテム部分をオーナードローしようとして、 コード書いて実行したらそのままOS巻き込んでフリーズ。 それ以来 TListView のオーナードローは鬼門だと思い 手を出さなかったが… そうか、VCLのバグだったのか…
190 :
Delギコ :01/09/06 19:06 ID:ARZrt0jo
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
¶(,,゚Д゚) <、、、
>>189 聞いてみりゃよかったのに。
ゝ|し |┐ \___________
(_|./ |┘
U U
情報は大切ね、
当然、既にリークしない用のD5用ListViewは
配布されている。
191 :
Delギコ :01/09/06 19:08 ID:ARZrt0jo
192 :
名無しさん :01/09/06 19:28 ID:3lNca4.E
193 :
デフォルトの名無しさん :01/09/06 22:42
194 :
デフォルトの名無しさん :01/09/06 23:40
こんにちハハハ。 Tリストビューを使っています。 クリックイベントとダブルクリックイベントの両方を使っているのですが、 ダブルクリックをしてもクリックイベントが走ります。(当たり前) クリックのときは、クリックイベント、 ダブルのときは、ダブルクリックイベント「のみ」を実行したいのですが、 どうすればできるでしょうか? クリックイベントで非常に重い処理をしているので、ダブルクリックするたびにガッカリします。 チェンジとかセレクトイベントは、使いたくないです。(マウスでクリックのときだけ処理をしたい) デルファイのすごいひと教えて!!
195 :
Delギコ :01/09/07 00:06
196 :
デフォルトの名無しさん :01/09/07 00:06
重要な質問です。 TRect は TRect = record case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end; と宣言されていますね。 ARect.TopLeft := Point( 30, 40 ); としたあとで ARect.Left ARect.Top を参照すると、どうして Left Top にも値がちゃんと代入されていますか。 いくら共用体とはいえ TopLeft と Top, Left には関連性は ないと思っていたのですが。RightBottom と Right, Bottom に関しても 同様ですね。こういったことはクラスのプロパティでないと 実現できないものと思っていましたが。
197 :
デフォルトの名無しさん :01/09/07 00:10
>0: (Left, Top, Right, Bottom: Integer); >1: (TopLeft, BottomRight: TPoint); 各変数のアドレス調べてみなよ。 「たまたま」ぴったりあうようにデザインされてるんだよ。
198 :
Delギコ :01/09/07 00:20
∧ ∧ ∧∧ ( ゚Д゚) ( ) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |つ つ⊂ | < ぴったりんこ 〜 | | 、〜 \________ ∪ ∪ ∪∪ ヘルプの『レコードの可変部分』を見るといいかも。
>いくら共用体とはいえ TopLeft と Top, Left には関連性はない じゃなくて, TopLeft と Top, Left に関連性を持たせるのが,共用体なの。
200 :
デフォルトの名無しさん :01/09/07 00:51
なるほど、サイズが合っていないとダメなのか。 ということは、 TPointEx = object X,Y:Extended; procedure MoveTo(AX,AY:Extended); end; TRectEx = object case Integer of 0: (Left, Top, Right, Bottom:Extended); 1: (TopLeft,BottomRight:TPointEx); end; procedure Center:TPointEx; function Width:Extended; function Height:Extneded; end; なんてやってたりすると、サイズが違うからできないってことね。 つーか、クラスを使えって突っ込みが入りそうだが…
201 :
Delギコ :01/09/07 00:52
♪ ∧ ∧ ∧ ∧♪ (,,゚Д゚) (゚Д゚,,) IDガ キエテル ニャ /つつ⊂⊂ヽ 〜 ノ | |〜 (/ し ∪∪ ヤメトケ∧∧ ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ゚Д゚) ( ゚Д゚) < 思う存分自作自演出来ル! | ⊃|⊃ゞ |⊃ \________ 〜| _ |ガシッ!!|″ ∪∪ ∪∪
202 :
デフォルトの名無しさん :01/09/07 01:01
あっ いつのまに…?
203 :
デフォルトの名無しさん :01/09/07 01:04
いやー ID無いと精神的にのびのびできてイイネー
>194 その文章、DelphiMLの初期の頃にいたイズミなんとかを思い出す。
205 :
デフォルトの名無しさん :01/09/07 01:15
206 :
デフォルトの名無しさん :01/09/07 01:28
>>195 ありがとう。まだ試してないけど、うまくいきそうな感じ。
>>204 -205
ちちがうっつーの。
関係ないけど、
>>195 のスレの質問者を見てちょっとガッカリ。
208 :
デフォルトの名無しさん :01/09/07 01:42
若かりし日の戸田さんだ〜
209 :
デフォルトの名無しさん :01/09/07 02:07
すっげー謎。 unit Unit1; interface type TEPoint = object X,Y:Extended; function DistanceTo(const p: TEPoint): Extended; end; implementation function TEPoint.DistanceTo(const p: TEPoint): Extended; begin end; end. これでどうして 'DistanceTo' の宣言がすでに定義されているものと異なります ってえらーが起きる??
210 :
デフォルトの名無しさん :01/09/07 02:20
>>209 よくわからんが、自分自身のオブジェクトを引数の型に使っているのが
いけないんじゃ? type PEPoint = ^TEPoint; として PEPoint 型を
引数の型に使ったらコンパイル出来た。
211 :
デフォルトの名無しさん :01/09/07 02:35
>>210 ああ、なるほどそういうことか。
クラスにするか…
212 :
デフォルトの名無しさん :01/09/07 04:27
すまねぇ・・・何となく素人質問です。 stringlist の items をクリップボードに入れたいのだですが それらしいメソッドが無いのです。 アイテムごとに改行で区切るって事で。 最初は assign か savetostream のような気がしたんだが。 教えてくだせぇ。
自己レス。 よくわかんないから 非表示の memo に assigh して copyToClipboard してみた。 どうも美しくない気がする。
>>213 言いたいけど初心者だから言えない。
引きこもってよっと。
216 :
デフォルトの名無しさん :01/09/07 07:47
学校逝ってきます!
217 :
デフォルトの名無しさん :01/09/07 09:26
>>212 Clipboard.AsText := StringList.Text;
で出来るよ。
>217 OpenとClose忘れちゃアカンと思われ、、、 クリップボードは詳しくないのでアレだが、 OpenとCloseの処理は try..except..end でまとめて、 クリップボードが開けなかったときの対策は必須と思われ。 って、漏れが慎重すぎるのか?
219 :
デフォルトの名無しさん :01/09/07 10:27
重要な質問!! for i:=0 to 8 do ... の部分をステップ実行しながらデバッグしていたら、 i の値がどうも 9→0 と変化している。 監視式にはそう書いてあるのよ。 でも、その他の変数の変化を見ると、実際には i は 0→8 と、ちゃんと変化しているらしい。 これってバグ?
>>219 バグではありません。コンパイラの最適化によりそうなります。
221 :
Delギコ :01/09/07 10:39
∩ ∩
| ∪ |
| 〜
|∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ,,゚Д゚)つ < 重要な質問とかいうな。
U \________
はっきりいって
>>219 の質問は
今まで数十回は聞いた事がある。
聞くなとはイワナーイが、重要扱いされるとウザッ
質問者以外には重要でもなんでもなし。
222 :
Delギコ :01/09/07 10:51
>>218 ∧∧ プハー
(,, ゚Д゚) =3 < VCLソースみるとSetAsTextでは
/つ日 例外処理はキチンとやってる。
〜(__ノ
procedure TClipboard.SetBuffer(Format: Word; var Buffer; Size: Integer);
みるといいかも。
AsTextでOpen/Closeする必要はない(タブン)
気になったのでテスト。 一つのアプリにはボタン1個のみぽとり。 クリップボードのオープン/クローズのみする。 厨房的コードでスマソ。 最初のCaptionは'Open'でよろしこ //アプリ1 procedure TForm1.Button1Click(Sender: TObject); begin If Button1.Caption = 'Open' then begin Clipboard.Open; Button1.Caption := 'Close'; end else begin Clipboard.Close; Button1.Caption := 'Open'; end; end; もう1個のアプリにはMemo1個にボタン1個。 //アプリ2 procedure TForm1.Button1Click(Sender: TObject); begin Clipboard.AsText := memo1.Text; end; これでアプリ1でクリップボード開いたときにアプリ2でボタン クリックすると、ヤパーリ例外発生。 処理次第ではエラー処理は必須か…… タダでさえ悪いのに眠い頭で考えてるので、変なこと口走ってたらスマソ。
ああやっぱり変なこと書いてた鬱だ氏脳。
>>223 は無視してOK。慣れない徹夜はつらいっす(;´Д`)
とりあえずOpen/Closeは必要ないです。
MemoはReadOnlyにしないでいろいろやると
わかるっす。
…ところでかちゅの書込時のエラーはどうにかならないかね。
ウザイしスレごとに名前とか覚えてくれないし…
>>224 Win板のかちゅスレで聞いてみれば?
と悪魔の声をかけてみる。
226 :
Delギコ :01/09/07 11:36
かちゅの挙動はクライアント環境によりけりだな。
仕事場ではわざわざブラウザ開いてカキコしなきゃなんね。
。°゜ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
__ ∧ ∧゚ / マイルニャ…、ホットゾヌ逝こうかな。
〜⊂_⊂( ゚Д゚)っ <____________
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜' ― (,,゚Д゚) < ところで検証サンクス
>>224 し― し-J \___________
>とりあえずOpen/Closeは必要ないです。
いいのかな?
>225 仕様なのは分かるってるが… おみとろんとか、別のローカル串で対処できないかなと。 かちゅへのパッチでも(・∀・)イイ! おみとろん用フィルタが無いかなと思ったが… 厨房な俺には無理だし… だれかかちゅ専用ローカル串つくってくれい! 出来ればDel6Personalでも使える、Server/Client Socketを 駆使して作れる猛者のソース公開きぼんw とりあえずスレ違いなので幕。 >226 >>とりあえずOpen/Closeは必要ないです。 >いいのかな? (・∀・)イイ!! あれで普通にコピーできるみたい。 メモに適当に文字打ってボタン押してメモ消して メモで今度はCTRL+Vすると検証可能。
228 :
デフォルトの名無しさん :01/09/07 12:10
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>226 何故に?
(O)----(O)U-U) \__________
串pacならpacソース見れ
229 :
Delギコ :01/09/07 12:14
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ゚Д゚) 目< 金曜日だよー。 |つ つ || \ _____________ TTTTTTTT|TTTTTT  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ::.... | サテ キョウモ フルパワー デ シゴト サボルカ
230 :
Delギコ :01/09/07 12:16
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (゚Д゚;) < よくわからん ⊂ ⊂| \___________ | |〜 ∪ ∪ なぜかちゅがそうなるのかも。よくわからん >串pacならpacソース見れ この文章の意味も。よくわからん
231 :
デフォルトの名無しさん :01/09/07 12:32
ところでメソッドと関数の違いは何でしょうか。 オブジェクトに従属した関数を関数と呼ぶのは間違いですか。 メソッドとメンバ関数は同義ですか。
232 :
Delギコ :01/09/07 12:34
233 :
Delギコ :01/09/07 13:14
|
電 |
|∧ ∧
柱 |,,゚Д゚) <
>>231 フィいリング。
⊂ |
| |
|∪
, ' , ; ' ;
似たようなもんで似たような使い方はできるけど
場面によってはキッチリ区別をつけよう。
>オブジェクトに従属した関数を関数と呼ぶのは間違いですか。
メソッドと呼んだ方がいいかも。
>メソッドとメンバ関数は同義ですか。
同義かも。
メンバ関数のなかでもPublicのものをメソッドと呼ぶべきかも
>メンバ関数のなかでもPublicのものをメソッドと呼ぶべきかも
privateだろうがprotectedだろうがメソッドでしょ。
言語ガイドにはそういう区別はないから。
>>231 自分で関数と呼ぶのは構わないけど、他人に理解してもらえないことも
あるから、注意した方がいいと思う。
>>193 stat(2)というのはシステムコールのstat。man 2 statしてみ。
Cだと構造体名の名前空間は分かれてるんで関数名と構造体名両方とも同じな
んだけど、Kylixだとそのへんはどう処理してるのかな。
struct stat st;
if (stat(path, &st)) {
error();
}
236 :
Delギコ :01/09/07 14:47
∧ ∧ / ̄ ∩(,,゚Д゚) < 今度はCanStrToFloatだ ⊂,,⌒ ,,つつ. \_  ̄ ̄ とやり始めたら 恐ろしいことにきがついた。 '.0001' というのがStrToFloatで変換可能なのは誰でも分かるが '0.0000…0を10000個ほど省略…001' こんな文字列まで一応、変換可能とは、、、、 値がどんなものになるのかは知らんが(どうせ0になるんだろうよ。) さては少数点以下の桁数判断はしていないな。 桁判断はeで表されるときだけみたいだな。 '3.6e-4999'これは変換可能 '3.6e-5000'これは変換不可能 HELPの記述と全然違うなあ。 ○'36.0e-4951' ○'0.36e-4952' ○'3.6e-4999' ×'3.6e-5000' ×'1.0e-5001' ×'36.0e-5000' ○'3.5e-4999' ○'0.1e-4999' ○'0.0001e-4999' どうやらe-5000よりも桁が下がるとダメらしい。 ○'.000…0を10000個ほど省略…001e-4999' ×'.000…0を10000個ほど省略…001e-5000' なんとまあ変な仕様だこと。
普段StrToIntはStrToIntDef使うだけで例外なしに判定してる。 例外は処理時間食うので、そこでほんとに処理止めるしかないときには 使うけど、正常系に戻って続くようなのにはあんまり使いたくないな。 しかしStrToFloatには同Def関数ないのか。
>かちゅーしゃの書き込みエラー かちゅスレで今聞くと、過去ログ読めの荒らしか放置のどちらかがもれなくプレゼントされます。 # あっちのスレ見てるとわかるが、10回近く聞かれてるから住人があきれてる
239 :
Delギコ :01/09/07 15:39
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜' ― (,,゚Д゚) < じゃ、スレたてるまでもないかちゅーしゃ質問すれがいるな し― し-J \___________ FAQ作って欲しいものだ。
>>238 以前、耐えてた方がいらっしゃいましたので「頑張れ!」とエールを贈りました。
>>239 いや、1に「仕様です」って書いてあるの。
242 :
Delギコ :01/09/07 16:12
>'0.0000…0を10000個ほど省略…001' いちまんこ!! \  ̄ ̄ ̄ ̄ ̄ |/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧ ∧∧∧ (,,*゚Д゚) _ ,,) ハニャーン パコパコ/ つ | (((ヽ ノ /U U UU
243 :
Delギコ :01/09/07 16:13
| 電 | |∧ ∧ 柱 |,,゚Д゚) <引いた? ⊂ | | | タマニハ シモネタ デ ナゴンデ モラオウカト・・・ |∪ , ' , ; ' ;
>>236 浮動小数点数そのものの仕様/表現可能な数値の範囲と
それの文字列表現値の変換仕様をごちゃ混ぜにしとるな。
245 :
Delギコ :01/09/07 17:05
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) <
>>244 逝っちゃ割るイが
| つ[|lllll]). \_________
〜| |
∪∪
折れのつくりたいのはMyStrToFloatではなく
あくまで、CanStrToFloatだという事を忘れておるな。
既に、MyStrToFloatを作った方がイイという声が
お空の遠くから
聞こえては着ているのだが。聞こえナかったことにする。
246 :
デフォルトの名無しさん :01/09/07 18:03
じゃ、つくれば? 開発ツールなんだからコードを作ることを否定はしないよ。 ただ、 0.00 --(結果が0になるくらいいっぱい)-- 001 を CanStrToFloat に渡したときの結果をどうする気でいる? True ? False ?
247 :
Delギコ :01/09/07 18:06
| 電 | |∧ ∧ 柱 |,,゚Д゚) <チュルーで。どう? ⊂ | | | if CanStrToFloat(S) then |∪ A := StrToFloat(S); , ' , ; ' ; 結果が0でも。OKじゃない? CanStrToIntも実際そうしてるし。
CanStrToFloatって? ・・・なんか変な所にハマってんだね そんな個所がとても大事なんだったら MyStrToFloat MyCanStrToFloat を作った方がいいように思うぞ 思いつく必要な個所は、何かインタプリタ的な場面か数式処理の一部だろうしね
そんなら if MyStrToFloat(S, A) then ...;// Aに入ってる値を見る とかのほうが合理的では? いちいちチェックと解読それぞれのために 合計2回もパースするのは無意味だ。
250 :
デフォルトの名無しさん :01/09/07 18:36
Delギコ氏ね
251 :
デフォルトの名無しさん :01/09/07 18:39
Delギコ氏ねDelギコ氏ねDelギコ氏ねDelギコ氏ねDelギコ氏ね Delギコ氏ねDelギコ氏ねDelギコDelギコ氏ね氏ねDelギコ氏ね Delギコ氏ねDelギコ氏ねDelギコ氏ねDelギコ氏ねDelギコ氏ね Delギコ氏ねDelギコ氏ねDelギコ氏ねDelギコ氏ねDelギコ氏ね Delギコ氏ねDelギコ氏ねDelギコ氏ねDelギコ氏ねDelギコ氏ね
253 :
デフォルトの名無しさん :01/09/07 19:11
>>249 //二つ用意すれば全く問題ない。
function IsStrFloat(Str:string;var Value:Extended):Boolean;overload;
function IsStrFloat(Str:string):Boolean;overload;
254 :
Delギコ :01/09/07 20:09
>>250 -251これ使え
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄
(´∀` )< Delギコ逝ってよし!
と と ) \______
| | |
∧∧ /\ ( ( )
(゚Д゚/ /\ / ̄ ̄ ̄ ̄ ̄
/ / /\ |
\/ / / |
ゞヾ \/ /〃 |
〜〜〜ヾ∽〃〜〜〜〜〜
255 :
デフォルトの名無しさん :01/09/07 20:22
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ (´∀` )< Delギコ逝ってよし! と と ) \______ | | | ∧∧ /\ ( ( ) (゚Д゚/ /\ / ̄ ̄ ̄ ̄ ̄ / / /\ | \/ / / | ゞヾ \/ /〃 | 〜〜〜ヾ∽〃〜〜〜〜〜
256 :
Delギコ :01/09/07 20:53
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | お前が逝け! \ _ _____ ∨ ∧ ∧ .∧_∧ (,, ゚Д゚) .( ´∀`)∵‥プシュ ━━つ━つ━━∞∞∞( =======∵‥ 〜/ ノ | | | ∵‥ ι' U (__)_)
_ 、 , _ / ヽ l / / { l l l / | ・ ・ | | | みかんばこ! l {( lIIIIIl | | ノ (O`ー―― ´O _)
259 :
デフォルトの名無しさん :01/09/07 21:44
>>245 StrToFloat 関数の戻り値は Extended 型だよね?
で、文字列を Extended 型の浮動小数点値に変換したときに
きちんと元の文字列通りに表現できているかチェックしたいんだよね?
StrToFloatした結果を途中でDouble型なんかに代入したら、さっきの
チェックは全く意味無くなるから当然プログラムでは浮動小数点値の型を
すべて Extended 型で統一してコーディングするんだよね?
これを守れないのなら厳密なチェックをする意味がない。
260 :
Delギコ :01/09/07 21:57
∧∧ / ̄ @_(,,゚Д゚) < ばらっちににらまれながらも。 ⊂,,__つつ. \_ StrToFloatの調査。 文字列からピリオドを消して 先頭0をトリムしたあとに判定して '1' + '1897314953572317648499999999999999999999999999999999999999999999999999999999999999999999999999999999' + StringOfChar('9', 900) + StringOfChar('9', 3000) + StringOfChar('9', 900) + '99999999999999999999999999999999'//全部合わせて4933桁 これは例外発生せずに通過するが '1' + '1897314953572317648500000000000000000000000000000000000000000000000000000000000000000000000000000000' + StringOfChar('0', 900) + StringOfChar('0', 3000) + StringOfChar('0', 900) + '00000000000000000000000000000000' //全部合わせて4933桁 これは例外が発生する。 そんな感じ。 いやあ、面倒だったよ。これ求めるの。
261 :
Delギコ :01/09/07 21:59
∧∧ / ̄
@_(,,゚Д゚) <
>>259 ヲ。フォローサンクス。
⊂,,__つつ. \_
>きちんと元の文字列通りに表現できているかチェックしたいんだよね?
そではないの。
>当然プログラムでは浮動小数点値の型をすべて Extended 型で統一してコーディングするんだよね?
それはそうなんだけど
単一のプログラムの事を想定してるのではなくて
標準汎用的関数をつくりたいのさ。
//文字列がFloatに変換可能かどうか調べる関数
//実際にStrToFloatを動作させて例外発生を捕らえる方法
function TrueCanStrToFloat(const S: String): Boolean;
begin
try
StrToFloat(S);
Result := True;
except
on E:EConvertError do
Result := False;
end;
end;
これの完全互換関数が作りたいわけでしゅわ。
文字列から実数変換するごときで例外が発生するのはウザイからね。
ねずみのはいでる隙もなく完全なヤツね。
これで例外発生せずにStrToFloatDefを作れそうだな。
IDEの設定やブレークポイントでで例外キャッチを無効にするのは
データが完全に保存されないから嫌なのよ。
せめてIFDEFで囲んで例外を捕らえないように
なってればよかったのだが…
262 :
デフォルトの名無しさん :01/09/07 22:01
VCL ソースコード持ってないの? 見れば一発で作れるんだけど。 function CanStrToFloat(const S: string): Boolean; begin Result := TextToFloat(PChar(S), Result, fvExtended); end;
264 :
デフォルトの名無しさん :01/09/07 22:04
Delphi6のVCLソース見れ。 Source\Rtl\SysUtils.pas StrToFloat探すとザクザクと function StrToFloat(const S: string): Extended; function StrToFloatDef(const S: string; const Default: Extended): Extended; function TryStrToFloat(const S: string; out Value: Extended): Boolean; overload; function TryStrToFloat(const S: string; out Value: Double): Boolean; overload; function TryStrToFloat(const S: string; out Value: Single): Boolean; overload; こんなのも出てくるね。 function TextToFloat(Buffer: PChar; var Value; ValueType: TFloatValue): Boolean; とか
>>264 Source\Rtl\Sys\SysUtils.pas
だった。
266 :
デフォルトの名無しさん :01/09/08 00:56
リージョンを扱ったプログラムを実行すると、必ずフリーズします。 これはリージョンを使うなというボーランドの思し召しですか。
267 :
Delギコ :01/09/08 01:21
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ゚Д゚) <
>>262 すこぶるアクセスバイヲが起きるがなぜだろう?
|∪ |つ∀ \___________
| |
U U チョウサチュウ
⊂⊃
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) <
>>266 重い飯です。
ハ ̄ ̄` \____________
し ╋ .J
|___| オボシメシ ダッチューノ
∪ ∪
∬ ∬
>>267 スマヌ。激しくバグが仕込まれていた。正しくは下記の通り…
お詫びとして CanStrToInt, CanStrToInt64 も付ける。
function CanStrToFloat(const S: string): Boolean;
var
tmp: Extended;
begin
Result := TextToFloat(PChar(S), tmp, fvExtended);
end;
function CanStrToInt(const S: string): Boolean;
var
E: Integer;
tmp: Integer;
begin
Val(S, tmp, E);
Result := (E=0) and (@tmp=@tmp);
end;
function CanStrToInt64(const S: string): Boolean;
var
E: Integer;
tmp: Int64;
begin
Val(S, tmp, E);
Result := (E=0) and (@tmp=@tmp);
end;
趣旨が他人にわからんと、変な雰囲気になるよ>Delギコ 漏れ的には、もちっとマターリしてくれた方がありがたい
270 :
Delギコ :01/09/08 02:20
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ゚Д゚)< 失礼したーよ。
>>269 |⌒|U U \_______
川 | |
ノU.U ちょっと暴走気味でした。。
>>268 検証中だけど。お見事。
それにしても
(@tmp=@tmp); 何これ?暗号みたい。
サパーリわからない。
E≠0まではVCLを見て把握してたんだけど...すごいニャ。
Del6のSysUtils.pasには function StrToInt(const S: string): Integer; function StrToIntDef(const S: string; Default: Integer): Integer; function TryStrToInt(const S: string; out Value: Integer): Boolean; function StrToInt64(const S: string): Int64; function StrToInt64Def(const S: string; const Default: Int64): Int64; function TryStrToInt64(const S: string; out Value: Int64): Boolean; なんてのも同様になあるな。 Try〜が全部変換可能かどうかを確認しつつ結果の値も貰う関数ね。 従って作る必要なし。
272 :
Delギコ :01/09/08 02:35
| |_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |Д゚) <
>>264 教えてくれてサンクスコ
| ⊂| \_他の皆様もサンクスコYO.
| | |
| |U
 ̄ ̄ ̄ ̄ ̄
すっげー。D6。マニア心くすぐりまくり。
(HELPに載ってないあたりがイィd(・w・)
out指令ってなんじゃろか。
調べていると、D6ではStrToDateTimeDef。までもが実装されてる!
273 :
Delギコ :01/09/08 02:39
聞いてアロエリーナ ちょっと言いにくいんだけど 聞いてアロエリーナ Delphi6っていいじゃん。よすぎ! 聞いてくれてあーりがと アロエリーナ♪ \_____ ________/ |/ ∧∧ セッカク ジッソウ シタノガ ムダニ ナタケド イイノ ソレデモイイノ ( ゚Д゚) | っ日 Ψ と_)_) □ ソリャ ヨカッタナ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
274 :
デフォルトの名無しさん :01/09/08 03:03
>>268 > (@tmp=@tmp);
どう見ても無駄だが。なにをしようとした?
ここは厨房の溜まり場か
だから何だっていうんだこのチキン野郎
277 :
デフォルトの名無しさん :01/09/08 04:02
うるさいぞチカン野郎(・∀・)
278 :
デフォルトの名無しさん :01/09/08 04:14
ヽ( ´∀`)ノ <厨房でーしゅ へノ / ε ノ >
279 :
デフォルトの名無しさん :01/09/08 04:16
∧∧ ヽ( ゚Д゚) ノ <板違 へノ / ε ノ >
11よりも2を前にするソートなんでどうやりゃ良いんだクソッ。
281 :
デフォルトの名無しさん :01/09/08 05:32
>>279 Λ_Λ
ヽ( ´∀`)ノ <オマエモナー
へノ /
●ノ
>
>(@tmp=@tmp) そろそろ気づいてるだろうけど、tmpが使用されていないというコンパイル時のヒント抑制のためだろう。 {$HINTS OFF}{$HINTS ON}で囲んでもいいと思うが。
>>272 >out指令ってなんじゃろか。
var 指令と(変数宣言の var ではなく、引数指令の var)
と似たような働きをもつが、out の場合は関数に渡される際に
値が破棄される。つまり…
procecure swap(var a, b :Integer );
var
t: Integer;
begin
t := a;
a := b;
b := t;
end;
の場合は、
a:=0;
b:=6;
swap(a,b);
と書けば a = 6, b = 0 になっているが、
procecure swap(out a, b :Integer );
var
t: Integer;
begin
t := a;
a := b;
b := t;
end;
の場合は、
a:=0;
b:=6;
swap(a,b);
としても a = 不定, b = 不定 になる。
swap(var ...) の場合は a =0, b =6 という値を保持したまま swap 関数に突入するけど、
swap(out ...) の場合は a と b の値が swap に突入する前に破棄されてしまうからだ。 a, b は 0 になっている保証は無い。
>>280 昇順ソートしてから反転すればいいじゃん
>>284 いくらなんでもそんなところでは悩まない・・・
stlinglist に 1, 2, 5, 11, 102, 200 とあって sortメソッドを使うと
1, 102, 11, 2, 200, 5 って並ぶじゃない?
これを数字順にしたかったの。
286 :
デフォルトの名無しさん :01/09/08 09:18
じゃあ、あたまにゼロ文字を保管してからソートし、 そのあと頭のゼロを削除。 もしくは、素直に整数型に直してからソート。 with StringList do begin while Length( Strings[i] ) < 10 do Strings[i] := '0' + Strings[i]; Sort; while Copy( Strings[i], 1, 1) ='0' do Strings[i] := Copy( Strings[i], 2, MaxInt ); end;
287 :
デフォルトの名無しさん :01/09/08 11:24
varとoutは生成されるコードは同じ (自分で確認した範囲内では)。 varは値を渡して加工して返すために使い、 outは値を返すためだけに使う。 要するに値を複数返す事のできる関数として使う。 プログラマに対する目印みたいなものだね。 >285 TStringList.CustomSort使えばいいよ。
ヽ( ´∀`)ノ <
>>285 あたま使えよバーカ
へノ /
ε ノ
>
289 :
デフォルトの名無しさん :01/09/08 11:47
>>287 引数にインターフェース型を使うと生成コードが変わるよ。
Delphi 3 でインターフェースサポートのために out 指令が
追加されたと記憶している。
290 :
デフォルトの名無しさん :01/09/08 12:13
const でクラスを引数にして渡した場合、 procedure Hoge ( const SList : TStringList ) begin SList . Add ( 'HOGEHOGE' ) ; end ; は可能?Addはただのメソッドだよね。
291 :
◆Z6G0yP9Q :01/09/08 13:00
Delギコ大嫌い
292 :
◆Z6G0yP9Q :01/09/08 13:01
Delphiさぶい 自分はemacsとmakeでJava
>>291 Λ_Λ
ヽ( ´∀`)ノ <オマエモナー
へノ /
●ノ
>
294 :
デフォルトの名無しさん :01/09/08 14:19
Λ_Λ ヽ( ´∀`)ノ <オマエモナー へノ / Фノ >
emacsとantとJavaじゃないの?
296 :
Delギコ :01/09/08 14:56
∧ ∧ 〜′ ̄ ̄(メ゚Д゚)つ UU ̄ ̄U イミナイ アオリ イッテヨシ ツーカ ツネ ______∧________________ IDが消えたら早速煽りか?
297 :
デフォルトの名無しさん :01/09/08 15:05
>>290 可能。SList 引数自体を変更することが出来なくなるだけ。
SList := nil; <これは駄目だが
SList.Add(.. <これは出来る
>>296 つーかここ、自作自演の匂いがプンプンするんだけど
どうよ?
299 :
Delギコ :01/09/08 15:29
∧_∧ / ̄ ̄ ̄ ̄ ̄
( ´∀`)<
>>298 自作自演なわけないモナー
( ) \_____
| | |
(__)_)
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧∧ < ふー。IDが消えてから大忙しだぜ
(゚Д゚∧)_∧ \____________
( ̄⊃ ´∀`)
| | ̄| ̄
(__)_)
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧∧ハッ! < なに見てんだゴルァ!!
(#゚Д゚∧_∧ \____________
( ̄⊃ ´∀`)
| | ̄| ̄
(__)_)
(・∀・) 300 Get you!!!
301 :
HIROMI :01/09/08 16:42
302 :
Delギコ :01/09/08 16:48
_________
∧ ∧ /
( ゚∀゚)<
>>301 HIROMI・ゴゥー
|つ つ \_________
〜 | イヤ ナントナク
∪ ∪
303 :
Delギコ :01/09/08 17:12
∧∧ / ̄ @_(,,゚Д゚) < out指令 教えてくれてサンクスコ。 ⊂,,__つつ. \varと独鈷居独鈷居の指令だね。 混乱するかもしれないのでvarだけ考えとコっと。 ∧ ∧ / ̄ ∩(,,゚Д゚) < 先頭ゼロ埋めはFormat関数でもよいよ。 ⊂,,__つつ. \_ Format('%.?d', [変数]); これで動作確認してね。 procedure StrTest(A, B: String); overload; var S: String; begin if A <> B then begin S := A + ' ≠ ' + B; ShowMessage(S); Form1.Editor1.Lines.Add(S); end; end; procedure TForm1.Button7Click(Sender: TObject); var I: Integer; begin I := 1; StrTest('0001', Format('%.4d' , [I]) ); StrTest('0001', Format('%4.4d', [I]) ); StrTest(' 0001', Format('%6.4d', [I]) ); StrTest(' 1', Format('%6d', [I]) ); I := 12345; StrTest('12345', Format('%.4d' , [I]) ); StrTest('12345', Format('%4.4d', [I]) ); StrTest(' 12345', Format('%6.4d', [I]) ); StrTest(' 12345', Format('%6d', [I]) ); end; ∧ ∧ / ̄ ∩(,,゚Д゚) < ついでに重箱墨だが ⊂,,__つつ. \_ > while Length( Strings[i] ) < 10 do > Strings[i] := '0' + Strings[i]; Strings[i] := StringOfChar('0', 10 - Length(Strings[i])) + Strings[i]; この一行でいいかも。 分かって使ってらっしゃるならいいですが。
>>304 わざとだって・・・
I got 300th number at this thread!!!
(なんかこれもおかしいな・・・)
306 :
Delギコ :01/09/08 17:31
>>287 >TStringList.CustomSort使えばいいよ。
まあ!また便利なものが...D6から...
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
∧ ∧ ホカホカ
(,, ゚Д゚)∫
/ つ旦O
〜(__n n[ ̄ ̄ ̄.]
 ̄ ̄ ̄
307 :
Delギコ :01/09/08 17:46
∧ ∧||| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (||゚Π゚)< Formatのトコ。間違えた。前方0を付属したいのは数値じゃなくて文字列だったのね。 〜/J. | |J \_______________________________ UU | | キガツイタ ヒト ダケ ムシ シテクレ
308 :
Delギコ :01/09/08 17:52
∩ ∩ | ∪ | | 〜 | ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |( ,,゚Д゚) < こんな感じでソートデキる U U \________ function NumberSort(List: TStringList; Index1, Index2: Integer): Integer; var S1, S2: String; begin S1 := StringOfChar('0', 15 - Length(List[Index1])) + List[Index1]; S2 := StringOfChar('0', 15 - Length(List[Index2])) + List[Index2]; Result := not AnsiCompareStr(S1, S2); end; procedure TForm1.Button1Click(Sender: TObject); var SL: TStringList; begin SL := TStringList.Create; try SL.CommaText := '1,2,5,11,102,200'; SL.CustomSort(NumberSort); Memo1.Lines.Assign(SL); finally SL.Free; end; end; ソートされた文字列。 200 102 11 5 2 1
普通にStrToInt使って比べりゃいいのに。 負数ははどうするんだ?
310 :
Delギコ :01/09/08 18:17
>>309 >負数ははどうするんだ?
ガビーン
∧ ∧||| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(||゚Π゚)< 忘れてた。
〜/J. | |J \_______________________________
UU | |
311 :
Delギコ :01/09/08 18:53
とつぜん話かえるけど ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < Delphianでデザパタやってる人いる? ヽ/つ且~~ \___________ (__ _) なんの本を読んだらいいかニャー?
>>305 (I) Got it! でええのでは?
取っちゃった! 解っちゃった! という意味。
>>311 Delphianというのが、デルファイを使う人という意味なのか、
それとも製品名なのか知らんけど、
デザインパターンは使ってる。
つーか、C++でバリバリ使ってたからね。
314 :
デフォルトの名無しさん :01/09/08 21:07
バリバリ。。。
すまぬ、中年オヤジだから許しておくれ。
中年Delphiプログラマーオヤジ、カコ(・∀・)イイ!!
317 :
デフォルトの名無しさん :01/09/08 22:38
>>311 普通にGoFの「デザインパターン」でも読めば?
ちなみに
>>317 のGoFとはErich Gamma, Richard Helm,
Ralph Johnson, John Vlissides著
「オブジェクト指向における再利用のためのデザインパターン」
知らない人用に、お節介。
319 :
デフォルトの名無しさん :01/09/08 23:26
Delギコ暇そうだからObject Pascal版 デザインパターンのサンプル23本書けや
321 :
デフォルトの名無しさん :01/09/08 23:42
>>319 Delギコのデザパタ本欲しい(w
サンプルソースにもAA入ってるんだよね。もちろん。
322 :
デフォルトの名無しさん :01/09/08 23:52
へこへこ GTK のプログラミングについてききたいよ. ここじゃだめってときはどこか教えてよ. Widgetをgtk_container_add などなどした場合 親のポインタから 子このポインタを探る方法がしりたいよぉ. できれば賢く知る方法がいいよ.
323 :
Delギコ :01/09/09 00:45
> Delギコ暇そうだからObject Pascal版 > デザインパターンのサンプル23本書けや 何せもうすぐ会社辞めるからね。 フリーだよ、フリー。一日中フリータイムね。  ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧∧ ( ) / | 〜(,_,,ノ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (;゚Д゚) < …それって無色カモ ./ | \__________ (___/ / ヒッキー マッシグラ?
delphiの初心者質問スレはどれなんだ・・・
325 :
ななしぷろぐらま :01/09/09 01:47
>>287 値を返す目印かぁ.なるほど.
いままで引数名の頭にwをつけたりして区別していたのですが,
out を使うほうがわかりやすくていいですね.
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< 必ずInしてこないという事は、初期値は不定値でよろしいか? (O)----(O)U-U) \__________ 仕事テンパーリ中
327 :
Delギコ :01/09/09 03:03
>>287 によるとvar指令とアセンブラレベルで一緒らしいから
実際は呼び出し側の値が引き継がれるのでは?
保証されないという名目で実はvarと同じと思う。
∧∧ / ̄
@_(,,゚Д゚) < わからーんけど。
⊂,,__つつ. \_
328 :
デフォルトの名無しさん :01/09/09 03:15
>>326 -327
>>283 にかいてあるじゃん。ヘルプにも。
---------------
呼び出し側で(中略)の内容が解放され,すべてのフィールドが未定義の状態に戻されます。
(中略)
out パラメータの値は必ずしもゼロにクリアされるわけではありません。レジスタに置かれた値は,そのまま呼び出し先に渡ることがあります。しかし,out パラメータ経由で渡された値を使った場合は,予期できないことが起こりえるため,使わないようにしてください。
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< 燃え尽きてきたからもう寝るです
(O)----(O)U-U) \__________
>>328 スマソ&サソケス
330 :
Delギコ :01/09/09 03:38
∧ ∧ / だから、保証されないけど (,,゚Д゚) < ジッソウはout=varじゃないのかな? |つ つ \ と考えたんだけど、違うみたいね。 〜 | とりあえず、必ず初期化はしとけよ。ってことで。 ∪ ∪ varがあるからout使わんけどね。
>>330 outっちゅう宣言があれば最適化や警告の足しになるね。
やってるか知らんけど。
COMにおけるoutなんかは、特にリモートの場合に元の値を送信しなくて済む
なんて効果もあるね。
332 :
デフォルトの名無しさん :01/09/09 08:28
var とか out よりも、 pascal とか register とかの予約語の意味がサパーリ。 まあ、使わないからいいけど…
>>331 リモートアクセスは、単にObjectに触ろうとするだけでコストかかるんで、
色々悩みがあるね。
ローカルなら「最適化よりRADのすばやさを取る」というDel的アプローチでも
(今時の処理速度なら)結構OKだったりするのだが。
334 :
デフォルトの名無しさん :01/09/09 08:33
あと、 WideChar てのはユニコード文字列なの? 1,2バイトを区別して文字数を取得したい場合は s : string; ------------ len := Length( WideString( s ) ); でしょ?で、 WideString( s )[1] と書いた場合、これは WideChar なの? 文字コードはどーなってんの?
335 :
デフォルトの名無しさん :01/09/09 10:18
私はいま、私のツールによってデスクトップ上にあるウインドウを 綺麗に繋ぎ合わせようとしています。 私の理想は、ウインドウが移動したときに、WM_MOVEDメッセージを受け取って 処理を行おうと考えいる事です。しかしながら、私にはその方法が わかりません。現在、数秒ごとに全ての窓の位置を調べて、 その情報を元にして処理をしています。 どうすれば、ほかのアプリーケションのメッセージを私のプログラムに よって監視する事が可能ですか。
それWinAmpの窓やAutoWindow(だっけ?)みたいな奴でしょ。 ぜひWin2kに対応して公開してよ。 つーかWin32APIスレのがレス付きそう。
338 :
デフォルトの名無しさん :01/09/09 13:50
ちんこ
340 :
デフォルトの名無しさん :01/09/09 16:03
>>311 Delギコ氏よ
>>320 のページの作者が書いている
「Java言語で学ぶデザインパターン入門」
がかなりおすすめだぞ。
俺が勉強してた頃はガンマ本しかなくて苦労したが、
今これを読むともっと楽できたのにと思う。
341 :
デフォルトの名無しさん :01/09/09 18:11
Delギコは氏んで下さいよ。
342 :
Delギコ :01/09/09 20:14
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′ ̄ ̄( ゚Д゚)<
>>340 サンサンサンクス。
UU ̄ ̄ U U \_____________
∧ ∧
〜′ ̄ ̄(メ゚Д゚)つ
UU ̄ ̄U
______∧________________
おまえが市ね。下らんアオリするヒマがあったら首くくれ。
343 :
Delギコ :01/09/09 20:27
カキワスレ ∧∧ ¶( ゚Д゚) || <あ゙〜 ゝ|し |つ|| (_|./ | 人 342 の後半は341宛てね。 U U 川
くくろうかとオモタヨ。
345 :
Delギコ :01/09/09 21:06
>>340 スマソ
∧ ∧ ・・・・。 ブルーニャ
( ゚Д゚)
|∪ |
〜| |
U U
じつは、つまずいてころんで
捻挫してしばらく松葉杖生活…
足。痛すぎ。痛み止めないとあまり思考ができない。
医者に骨に小さいヒビ入ってるかも氏れんと言われた
346 :
Delギコ :01/09/09 21:30
___ ヽ
_ /⊂ `∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | \( ゚Д゚)< 仕事が忙しすぎるから
| / ∪ ∪ \_____________
 ̄
,,ヽ
⊂, `\⊃ ベチャ / ̄ ̄ ̄ ̄ ̄ ̄
\∧∧ < 怪我でもしたい。
⊂(,,゚Д゚)つ)) \______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
と考えてしまったアナータは
すでにヤバイ状態なので仕事休めよ。
これ読んどけ。
ITプロフェッショナルを襲う“心の病”
http://www42.tok2.com/home/from2ch/kokoro/ 実際、怪我したらつらいな。コンビニに出かける事も苦痛だ。
347 :
デフォルトの名無しさん :01/09/09 21:44
>>346 俺プログラマ志望だけど…
みなさんはこれを読むと「うん、うん、あるある」って
感じ何ですか。
あの… 周りに居るプログラマで心の病気にかかる人の割合は どのくらいで…
350 :
名無しさん :01/09/09 22:28
まぁ60%かな。あとは転業が40%
>>349 プログラマ板にいくと、その関連のスレッドがいくつかあるぞ。
(゚Д゚) 結局100%じゃん... プグラマ版に逝ってきます。
354 :
デフォルトの名無しさん :01/09/10 01:00
不思議に思っているんだけど、 type PInt = ^Integer; procedure Swap(a,b: PInt); var t:integer; begin t:=b^; b^:=a^; a^:=t; end; という書き方が可能ならば、 procedure Swap(a,b: ^Integer); var t:integer; begin t:=b^; b^:=a^; a^:=t; end; も可能であって然るべきだとおもうんだけど、 どうして文法エラーになるの?
Cぢゃなぃから
VBで色色な周波数の音を鳴らしたいんですけど、どうしたらいいですか
>>356 まず適切なスレッドを探す技能を身に付けてください。なぜ Del スレに書く?
>>359 そーだったのか・・・356すまん。
Delギコ氏んでください。
362 :
名無しさん :01/09/10 01:41
(笑)
(夫)
(供)
(抵)
370 :
デフォルトの名無しさん :01/09/10 08:35
Delギコ氏ね
そろそろDELスレに戻る事を期待する。
372 :
ななしヘタぐらま :01/09/10 08:58
>>334 WideCharはユニコード文字です.
WideString( s )[1] でWideCharとして取り出せますね.
ヘルプの記述は見つけられませんでしたが.
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
wc: widechar;
o: integer;
begin
s := 'ももこ120%'; // (笑)
wc := widestring(s)[1];
o := ord(wc); // 文字型や列挙型を数値に
showmessage(inttohex(o, 4)); // "も"=3082(16進数)
end;
ある文字がユニコードでどの数になるかは
IMEパッドとかで調べられます.
というかこれで確認しました.
(ATOKでも可)
>>362 ありがとうございます。
指定した周波数の音を鳴らす関数が見つからなかったので助かりました。
以下余談
Delphi6personalをダウンロード、インストールしましたがCOMオブジェクトに関するヘルプは無いようです。
professional版を買わないとだめかもしれません。
374 :
ななしヘタぐらま :01/09/10 09:18
>>331 outはたしかDel4から出てきたキーワードなので
COMでの使用を想定したものではないかと思います.
>>374 Del3のヘルプにも乗ってる
out パラメータより変数パラメータの方が効率的なため,
out パラメータは COM メソッドに対してのみ使うようにしたほうがいいでしょう。
COM にいての詳細は,「インターフェース」を参照してください。それ以外の点では
out パラメータは変数パラメータと同様に動作します。
OutもCOMも使ったこと無いので詳細は任せる
376 :
デフォルトの名無しさん :01/09/10 10:09
>>372 おー、なるほど。
やはりウニコードだったんだね。
てことは、ByteType( UnicodeString, ... ) とか
って使い方は出来ないのね。文字コード違うし。
わざわざ愚かな俺の質問に答えてくれてありがとう。
(いや、嫌味っぽく聞こえるかも
知れんけど、嫌味じゃないよ
おお、いつのまにかread.cgiがアップグレードしている… ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜′ ̄ ̄( ゚Д゚)< 見やすくなってヨシ! UU ̄ ̄ U U \_____________
378 :
名無しさん :01/09/10 11:52
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>373 ちょいと補足
(O)----(O)U-U) \__________
元々WAVEデヴァイスは与えられた波形をDA変換するものだから
MIDI/FM音源等と違って、「与えられた周波数を鳴らす」という仕組みは無いっス
関数で鳴らすという意味ではVBだろうがVCだろうが、んなこたーできない
んじゃどうするかというと440Hzの音を鳴らすなら
440Hzのサイン波をメモリ上に作って、それをWAVEに渡してるだけっス
くわしいバッファリング等の仕組みはそのリンクに説明あるから読んでちょ
RIFFフォーマットはここに(英文だけど)
http://www.wotsit.org/
379 :
デフォルトの名無しさん :01/09/10 11:54
DelでCOM使うと便利なのってどんな時? VCL+Win32APIでカバーできないのはどんな領域?
帳票ツールのAPIがCOMになってる場合
>>379
383 :
デフォルトの名無しさん :01/09/10 13:52
TListBox に Count プロパティついたんだね。 いままで ListBox1.Items.Count と書こうとして ListBox1.Count としてコンパイル失敗した事が何度あった事か… ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ @' ― (,,゚Д゚)つ < うれしいぞ!! し― ∪ \___________
>>378 んじゃどうするかというと440Hzの音を鳴らすなら
たとえば sound(440) 見たいなことが出来るものとおもってました。
ありがとうございます。
>>379 周辺機器付属のライブラリがCOMオブジェクトとして提供されているので使わざる終えません。
385 :
デフォルトの名無しさん :01/09/10 16:20
OH NO! TMemoeyStream を使ってファイル結合ソフト作ったんだけど、270MBの動画を5つに分割したファイル、これを 結合しようとしたら、 「メモリ展開中に領域が足りなくなりました」 ってエラーがでた。 どうすりゃいいですか…
>「メモリ展開中に領域が足りなくなりました」 だれが出してるメッセージだい?
387 :
Delギコ :01/09/10 16:29
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < 足イタイ U ,つ゛ \____________ | | ノ∪∪ リョウヨウチュウ WideCharやCOMやout指令のお話 調べてくれてる人。ありがとう。 勉強になるよ。
388 :
Delギコ :01/09/10 16:31
| | | | | | | |゜⌒/..| \ | ゜| ゜ ⌒// ..| ゜ \ ゜ | | / / | | |ヽ゜ \⌒゜ | | . ̄ ̄ ̄ ̄|| ̄ ̄ ̄ ̄ | ∧ ∧|| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | (,,゚Д゚)|| < みなさま、台風にはお気をつけて。 ゜ | ..|∪ つ \______________ | |.| | | | ___.U..U____ ゜ 台風の時は自動車保険が出ないので くれぐれも事故には注意! …14台玉突き事故もあったって。 Delには関係なくてスマソ
389 :
デフォルトの名無しさん :01/09/10 17:15
Edit1に番号(例:001)を入力してから、Bottun1をクリックすると ブラウザ(例:IE5.5)で表示するようなプログラムを作りたいです サンプルコードありませんか?
×Bottun1 ○Button1
391 :
Delギコ :01/09/10 18:17
392 :
デフォルトの名無しさん :01/09/10 18:30
Delギコ氏んでくれ マジで。 かわいこぶりっこしてるとこがむかつく。
393 :
デフォルトの名無しさん :01/09/10 18:32
394 :
Delギコ :01/09/10 18:40
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) < いいかげん。しつこいな。
>>392 U ,つ \____________
| |
ノ∪∪ オマエ ガ 氏 ンダラ カンガエテ ヤル
マターク 2ch ネンチャク ツーノハ・・・
∧∧
(,, ゚Д⊆0___,,
|⊃二O,---' ̄ ̄
〜| |
.∪∪ ヂウ ノ オテイレ スルカ ニャ
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< マイムマイムマイムマイム♪マイムメッサッソ♪ (O)----(O)U-U) \__________ ファイルウプ機能の実装中 パラメタをMIMEデコードにバラさにゃならん方式変更だけウルトラめんどい あとは、きっとなんとかなりそうです 作者にめっさ失礼だがベースのソースがきちゃな過ぎ 共通関数をplに纏めろよって思いまくりsage
396 :
Delギコ :01/09/10 19:28
∧ ∧ タレメ シャチョウ コラム(ダイ3カイ) ヨンダ? (,,゚Д゚) U U 〜| | U U > 従来からトレーニング、サポート、コンサルティングというサービスビジネスは行って > いたのですが、さらに拡大して、システム受託、Pilot Programの作成、Feasibility > Study、プログラマーの派遣等も行います。 金儲けのためとはいえ 一介のJava業務アプリ請負屋なんかにはならないでもらいたいな
397 :
デフォルトの名無しさん :01/09/10 20:12
>共通関数をplに纏めろよって思いまくり すんません、plってなんですか? 私も自分のソースを公開したいと思っているので とても気になります。
>391 なるへそさんくす
.plってperlのソースコードの拡張子。 つーかperlで汚いは誉め言葉。>395
>>396 気づくのおそかったな。日本のユーザーは見捨てられたんだよ。
>399 サンクス。Perlか… >>共通関数をplに纏めろよって思いまくり なんか混乱してるんだけど、Delphiのソースコードを Perlに埋め込むのか??? それともDelphiとはマターク関係ない話なのか。
>>401 マターク関係ないPerlの話だと思われ。
403 :
Delギコ :01/09/10 21:45
あ、なるほど。読解力が足りませんでした。 Delphiソースコードの話じゃなくて ファイルウプ版CGIのPerlソースの話ね。 日本語修行に逝ってきます。
405 :
デフォルトの名無しさん :01/09/10 23:15
>>385 TMemoryStreamはメモリ使うんだから
空きメモリが270MB異常ないと無理だな。
くっつけるだけでしょ?TFileStreamつかえば?
まぁ、それもHDDの空きが270MB異常ないとだめだよ。(w
406 :
デフォルトの名無しさん :01/09/10 23:18
Delギコ氏よ 392なんて無視だよ 反応を楽しんでるだけだよ
たぶん>385は270MBくらい、物理メモリ足りなくても、 スワップしてメモリ確保してくれるだろうという予想を裏切られたのだと思われ。
408 :
デフォルトの名無しさん :01/09/10 23:30
つまり、 TMemoryStream はメモリ上に展開して バイナリデータを操作するのに対し、 TFileStream はどこかに作業用ファイルを確保して そこに展開してからデータ操作するって感じですか。
>>385 はドキュンプログラマなので放っておきましょう
いやガンバッテね 米ヤフからのダウンツール作ってんでしょ?
>>408 なんつーか。
TFileStreamはどこにも何も展開しないよ。
ただcreate時に指定されたファイルを開き、
Read/Writeで単純にファイルに読み書きをするだけ。
Fileへの単純なアクセスをTStream派生に共通化しただけのものだよ。
特段のバッファリングすらしない。
413 :
デフォルトの名無しさん :01/09/11 00:04
ところで、TMemoryStream は仮想記憶を使うので、
物理メモリが少なくても「ちゃんと」十分なスワップファイルを定義していれば
(下の例では約 600M くらい定義してあればよし)
var
M : TMemoryStream;
begin
M := TMemoryStream.Create;
M.SetSize(500*1024*1024);
M.Free;
end;
正しく動く。
>>385 の「メモリ展開中に領域が足りなくなりました」は
まったく別のえらだと思うよ。だいたいそのエラーメッセじ、VCL で定義されてないぞ。
もういちど確認してみました。 「メモリストリームの拡大中にメモリが足りなくなりました」ってエラーがでてます。ハイ。
415 :
デフォルトの名無しさん :01/09/11 00:30
飛び入りですいません。初心者は結局何の言語からはいるべきですか? perlしか書いたことがないので一向にきれいなソースが 書けるようになりません。 やっぱCですか?
スレ違い(藁
綺麗なソースならJavaがええな
Java って with .. of にあたる文ってあるの? あれがなきゃ無駄に長くなるだけだと思うが… それとも変数に代入してから使うのか? Form1.ListBox1.Items.Objetcs[0] Form1.ListBox1.Items.Objetcs[1] Form1.ListBox1.Items.Objetcs[2] こういったものを TStrings s = Form1.ListBox1.Items; s.Objects[0]; s.Objects[1]; s.Objects[2]; 見たいな感じで書くのか?
withがあるのdelphiだけだからね こぴぺでgoe
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>399 じゃあ「ばっちぃ処理」って事で(ワラ
(O)----(O)U-U) \__________
なーんて、偉そうな事いえる職人じゃないのでsage
422 :
デフォルトの名無しさん :01/09/11 01:21
waveOutOpen やらなんやら、 Delphiで任意の音波形を出力する サンプルプログラムはありませぬか。
>>403 ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ,,) < 題名なんて飾りです!
./ | \ それが偉い人にはわからんのですよ
(___/ \_____________
/
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) < なんつったりして
./ | \_____________
(___/
/
424 :
デフォルトの名無しさん :01/09/11 01:47
すいません。IDEで質問なんですが、設計時にコンポーネントを貼り付けると コンストラクターが呼ばれてその後IDEに制御が戻ってしまうんですが、 制御が戻った後でもタイマーイベントか何かでコンポーネントに制御を戻す ことは出来ないんでしょうか? 考えてることは、設計時にフォームにそのコンポを貼り付けると コーディングを監視できるとか、あるいは簡単なゲームができる とか、お遊びかもしれませんが出来ないでしょうか?
>>414 「メモリストリームの拡大中にメモリが足りなくなりました」
(仮想記憶 - (OS その他が使うメモリ) ) / 2 までなら確実に処理できるよ?
微妙な場合は, ストリームをちびちび伸ばしていくんじゃなくて,最初にボンとでっかく確保。
>>418 -420
JとD両使いだが、最近は
>TStrings s = Form1.ListBox1.Items;
>s.Objects[0];
こっちの書き方のほうが好きだな。変数名はもっとマシなのにするが。
withが対象が明確じゃなくなるから。
Javaは使う場所で変数宣言できるからそれほど不自由しない。
Delphiはvar節で変数宣言しなきゃならんから上のような書き方は多用しにくいわな。
ま、慣れの問題だ。
>>424 コンストラクタで別スレッド生成してそいつが行動すればいいんじゃないか?
コーディング監視はOpenToolsの範疇か?
可能かどうか分からんが。
そういや昔And, Or, Not回路コンポとか作ったな
429 :
デフォルトの名無しさん :01/09/11 02:13
>>426 こっちはC++とD両使いだけど、激しく同意。
間違った対象を読み書きしてハマッた経験もしたし。
Form1.ListBox1.Items.Objetcs[0] = Form2.ListBox1.Items.Objects[0];
こういうとき困るし。
TStrings &s1 = Form1.ListBox1.Items;
TStrings &s2 = Form2.ListBox1.Items;
s1.Objects[0] = s2.Objects[0];
としたい。
431 :
デフォルトの名無しさん :01/09/11 02:55
>>427 あっ、ありがとうございます。
OpenToolsですか。早速、調べてみます。m(_ _)m
>>424 昔、海外でコンポーネントさがしてたら、
Fireエフェクトを表示するImageコンポがあったが(aboutダイアログに貼り付け用?)、
設計時でもリアルタイムにメラメラ燃えてて笑った覚えがある。
433 :
Delギコ :01/09/11 11:00
∧ ∧ / (,,゚Д゚) < withのご利用は計画的に。 |つ つ \ @| | ∪∪ デバッグ中にwithで指定しているフィールドは 参照できなかったんじゃない?(旧Verでは) 対象が明確じゃなくなりそうになった瞬間に withやめたりwith内でも明示的に指定した方がいいっす。 あくまでもwithは読みやすくするためだけのキーワードなんですから. 逆に読みにくくなっちゃヤーよ。
434 :
デフォルトの名無しさん :01/09/11 13:03
そうだったのか… てっきりタイプ量を減らすためのモノかと。
435 :
名無しさん :01/09/11 13:23
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>433 with使うとmovが1個減りますので微小に速いです(ワラ
(O)----(O)U-U) \__________
>>422 delphian worldに、Wave出力APIをラップしたコンポが幾つか上がってる。
あれを使う(またはソースを参考にする)ってのはどう?
437 :
Delギコ :01/09/11 13:34
>with使うとmovが1個減りますので微小に速いです(ワラ ∧ ∧ ソ--ナンダ (;゚Д゚) / | 〜'( UUノ 下手人さんサンクス。 >てっきりタイプ量を減らすためのモノかと。 beging..endのPascalなので タイプ量減らすベクトルは小さいかと… Form1.BoundRect := Rect(Form2.BoundRect.Top+10, Form2.BoundRect.Left+10, Form2.BoundRect.Bottom+10, Form2.BoundRectRight+10); よりかは with Form2.BoundRect do Form1.BoundRect := Rect(Top+10, Left+10, Bottom+10, Right+10); の方が読みやすいってだけでは?
438 :
デフォルトの名無しさん :01/09/11 13:42
>>437 あまりに長くなる場合は↓のように書くな。
(場合1)
Form1.BoundRect := Rect(
Form2.BoundRect.Top+10,
Form2.BoundRect.Left+10,
Form2.BoundRect.Bottom+10,
Form2.BoundRectRight+10
);
(場合2)
Form1.BoundRect := Rect(
Form2.BoundRect.Top+10, //Top
Form2.BoundRect.Left+10, //left
Form2.BoundRect.Bottom+10, //bottom
Form2.BoundRectRight+10 //right
);
(場合3)
with Form2.BoundRect do
begin
ATop := Top+10;
ALeft := Left+10;
ARight := Right+10;
ABottom := Bottom+10;
end;
Form1.BoundRect := Rect( ATop, ALeft, ABottom, ARight);
関係ないけど left, top , right, bottom の
順番じゃなかったっけ?
439 :
デフォルトの名無しさん :01/09/11 13:43
前から with で別名定義出来たらいいなって 米ボーランドの要望ページに出したり してたけどなあ・・・・・ with 変数名 is 別名 do 別名で短い名前が使えると混同も少ないし with TStringList.Create as s do try s.LoadFromFile(filename); ・・・ finally s.Free; end; こんな感じでローカル変数的にも使えて便利 皆も要望出してくれよ
>>440 classの場合はそれでも効率変わらないけど
recordの場合は効率違うでしょ?
442 :
デフォルトの名無しさん :01/09/11 14:42
LaBVIEW使ってる人、あれはつかえるのか?
443 :
デフォルトの名無しさん :01/09/11 16:18
444 :
Delギコ :01/09/11 16:26
445 :
デフォルトの名無しさん :01/09/11 16:36
∧ ∧ ・・・・。
(;゚Д゚) 自分でも意味不明だ。
U U
〜| |
U U
>>444 > Window同士が磁石でくっついたりするの
> 作ってるのかな?
Window同士が磁石でくっついたりするような
インターフェースを実現させる
ソフトを作っているのかな?
SmartUIってソフトでデスクトップの隅に対しては行なえるんだけど
http://www7.cds.ne.jp/~hayakawa/ すべてのWindowに対して行なえるとうれしいです。
446 :
デフォルトの名無しさん :01/09/11 16:38
いままで見たことないのだが、with をこんな風に 使っている人って本当に居るのだろうか。 よけいに混乱しそうな気がするが。 with Form1, Form1.ListBox1 do caption := Items[0] + ' ' + Items[1]; ちなみに、 with Label1, Label2 do caption := 'giko'; って書くと Label2 の方にくっつくのね… with 式の右側が優先されるみたいだ。
447 :
デフォルトの名無しさん :01/09/11 16:42
>>4446 HELPみれ
with obj do 文
または次の構文を使用します。
with obj1, ..., objn do 文
obj の解釈に配列の添字付けやポインタの逆参照が必要な場合は,複合文が実行される前にそれらの処理が 1 回だけ実行されます。このため,with 文は簡潔であるだけでなく効率も優れています。また,このため,with 文の実行中は文内部での変数への代入によって obj
の解釈が影響を受けることはありません。
with の後に複数のオブジェクトまたはレコードを指定すると,文全体が一連のネストした with 文のように扱われます。次の文があるとします。
with obj1, obj2, ..., objn do 文
これは次と同じです。
with obj1 do
with obj2 do
...
with objn do
文
448 :
デフォルトの名無しさん :01/09/11 16:43
449 :
デフォルトの名無しさん :01/09/11 16:52
ちと亀だが...
>>319 >Delギコのデザパタ本欲しい(w
>サンプルソースにもAA入ってるんだよね。もちろん。
ヲレもほし〜。
どう?>Delギコ 殿
450 :
Delギコ :01/09/11 17:10
451 :
Delギコ :01/09/11 17:15
>>446 出来ることと、すべき事とは違うし。
いくらなんでも読みにくい&混乱の元の
withはやめようYO
もちろん446さんは使ってないだろうけどね。
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
∧ ∧ デザパタ ヨリモ XPシタイカモ
(,, ゚Д゚)
ノつl⌒|⌒l
〜(._[ ̄ ̄ ̄.]
 ̄ ̄ ̄
452 :
デフォルトの名無しさん :01/09/11 18:04
ねえねえ、コンポーネントの名前、どうやってつけてる? Button1 → btnOK, btnBrowse, btnCancel, ...Edit1 → edtFilename, edtMask, ...Menu1 → mnuOpen, mnuSaveAs, mnuClose, ... てな感じで、コンポーネントの種類(分類)をあらわすと、 ProgressBar とか StatusBar とか、あまり使わない コンポーネントのときに破綻する。 まあ、この2つの場合は一つのウィンドウに1つって場合がほとんどだから あまり気にしなくてよいけど…
>>452 コンポ名を略さずにくっつけてるな。
PlayButtonとかFileNameListBoxとか。
GroupBoxやLabelはプログラムからいじらない場合にはデフォルトのまま
GroupBox1とかになるけど(笑)
454 :
デフォルトの名無しさん :01/09/11 18:11
でもさ、頭にコンポーネント名がきた方が オブジェクトインスペクタでソートされて、 種類ごとに表示… あ 機能名を頭につけた方が機能ごとにソートされるか… それともDel6でオブジェクトツリーが出来て、 オブジェクトインスペクタのソート順序は どうでもよくなったのか。
アーヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャ ∧_∧ Λ_Λ゚∀゚ ) アーヒャヒャヒャヒャヒャ ( ゚∀゚ ⊂ ) ヒャヒャヒャヒャヒャ!!! \ / Y 人 (/) (__)_) ι .(/) | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (/)っ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ι (/) ∧_∧ ι / \(゚∀゚ ) アーッヒャッヒャッヒャッヒャッヒャッ 人 ヽノ⊂ ) ヒャッヒャッヒャッヒャヒャヒャヒャ し(__) Y 人  ̄ ̄ ̄ ̄ ̄| (__)_)  ̄ ̄ ̄ ̄ ̄ あーひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃ ひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃ
456 :
Delギコ :01/09/11 20:18
シツモーソ ∧∧ / ̄ @_(,,゚Д゚) < 列挙型の変数から列挙型の名前を取得するの ⊂,,__つつ. \どうするのでしたでしょうか。 オボロゲ ニ TypeInfoユニトあたりに関数があったような記憶。
457 :
Delギコ :01/09/11 20:29
458 :
デフォルトの名無しさん :01/09/11 20:46
>>456 >オボロゲ ニ TypeInfoユニトあたりに関数があったような記憶。
まじで!?
いままでずっと
type
TSignalColor = (scRed, scBlue, scYellow);
const
SignalColorString:array [TSignalColor] of string=
('scRed','scBlue','scYellow');
こうやってたYO!
調べてみるか…
459 :
Delギコ :01/09/11 21:09
∧ ∧ /
>>458 ∩(,,゚Д゚) < RTTI関係の強化はタチカD5からだから
⊂,,^__つつ. \下位互換コードじゃなくなるのかな。
ヲキヲツケテーテ
たしかプロパティ経由なら取れたような・・・ 誰も書かなかったら明日調べて書く、といってみるテスト
461 :
デフォルトの名無しさん :01/09/11 21:29
上位互換とは、 上位機種でしか使えない機能の事ですか? 「完全上位互換」とは、昔のものはまったくコンパイルできないという意味ですか。 下位互換とは、上位機種でも 下位機種の機能を使う事ができるという意味でしょうか。「完全下位互換」とは、どんな昔のコードでも最新版で コンパイル可能である事を示しますか。
With使いこなしコンテスト! procedure Form1.Hoge(Sender : TObject); begin TForm(Sender).BoundRect := Rect( (Form2.BoundRect.Top + Form3.BoundRect.Top) / TForm(Sender).BoundRect.Top, (Form2.BoundRect.Left + Form3.BoundRect.Left) / TForm(Sender).BoundRect.Left, (Form2.BoundRect.Bottom + Form3.BoundRect.Bottom) / TForm(Sender).BoundRect.Bottom, (Form2.BoundRect.Right + Form3.BoundRect.Right) / TForm(Sender).BoundRect.Right, ); end;
464 :
デフォルトの名無しさん :01/09/11 22:25
Delギコさん死んじゃってください
465 :
デフォルトの名無しさん :01/09/11 22:30
>>461 http://wdic.asuka.net/?title=%BE%E5%B0%CC%B8%DF%B4%B9 上位互換
・元となるものとの互換性を維持しながら, より高性能を実現したもの.
http://www.nttpub.co.jp/paso/0418.html 新しい製品でも、古い製品の機能が使えるようになっていること。
たとえば、ソフトのバージョンアップがある。あるソフトがバージョン3になったとしよう。
その前にはバージョン1と2があった。そして普通は、バージョン1や2で作ったファイルを、
バージョン3でも開くことができる。
これが典型的な上位互換。上位にある(この場合だとバージョンが新しい)製品は、下位
(バージョンが古い)製品の機能も持っている、つまり互換性があるということ。
通常は、バージョンアップがあると、新しい機能が追加される。そのため、新しいバージョ
ンで作ったファイルは、古いバージョンでは開けないことが多い。しかし、機能を制限する
ことで古いバージョンのファイル形式で保存できる場合もある。この場合は、下位互換がある
という。
466 :
デフォルトの名無しさん :01/09/11 22:33
ビルにジェトー機突っ込みました。 ニュース見ろ。
うお、マジだ
速報板入れない(´д`;)
さんきゅ >> 466 ただ、二度とやるな。ここは「プログラム技術」だ。 これでまた、アクセス殺到で 2ch がとまるかな?
これで、ビルの重みを支えきれなくなって崩壊の瞬間が全世界に放映…
471 :
デフォルトの名無しさん :01/09/11 23:07
事故?攻撃?
アメリカとんでもない事になってるね。 列挙型の文字列を得るサンプル。あんま厳密でないけど。 フォームにMemo1,Button1があるとして、 uses TypInfo; procedure TForm1.Button1Click(Sender: TObject); var i: Integer; p: PTypeData; ps: ^ShortString; begin p := GetTypeData(GetPropInfo(PTypeInfo(Self.ClassInfo), 'Align')^.PropType^); ps := @p^.NameList; for i := p^.MinValue to p^.MaxValue do begin Memo1.Lines.Add(ps^); Inc(Integer(ps), Length(ps^) + 1); end; end;
475 :
Delギコ :01/09/12 10:01
∧∧∩゛ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚)ノ < ニューヨークに行きたいかー!! U / \____________ | | ノ∪∪ ∧∧ ・・・・. ( ,,) / | 〜(,_,,ノ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < 全然逝きたくニャイ! ./ | \__________ (___/ /
さすがにしゃれになんねーよ。今日は失せろ。
477 :
デフォルトの名無しさん :01/09/12 10:35
Delギコうざいよね、氏んでほしい
478 :
Delギコ :01/09/12 10:55
| ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| しばらく休業
|_______|
∧ ∧ ||
(,,゚Д゚)||
/つ つ
>>474 サンクス
479 :
デフォルトの名無しさん :01/09/12 11:01
480 :
Delギコ :01/09/12 11:23
| ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| 事実は小説より奇なり
|_______|
∧ ∧ ||
(,, ゚Д゚)||
/つ つ
>>479 Sunクスコ
でも、気楽にプログラしてる気分でもないし
変な荒し対策にAA貼る気力もないので
折れはちょっち休むよ。newsに釘付けだし。
このスレでネタになってる話題は
気にせず続けてくださいな。
Delギコ氏でも
>>475 はちょっと。。。
でも御冥福を祈りつつこちらはこちらでマターリとがんばりましょ。
復帰求むDelギコ氏よ。
482 :
デフォルトの名無しさん :01/09/12 14:49
確信犯はたちが悪いよな。 自分が正しいと思ってるから。 あー怖ひ怖ひ
483 :
デフォルトの名無しさん :01/09/12 14:57
Delphi似のスクリプト作ってんだけど、 DelphiっつーかPascalのBNFってない? ネットで探してももどきばっか・・・ さがしかたわるいんかな
484 :
デフォルトの名無しさん :01/09/12 15:13
Delphiヘルプについてるやつじゃ駄目なの?BNFかどうかは知らんけど。
485 :
デフォルトの名無しさん :01/09/12 15:37
じゃ、調子にのってもう1問。 1 3 5 7 □ 10 □ 上の数列(?)はある規則によって並んでいます。 □の中に当てはまる数字を答えなさい。 また、その規則も答えなさい。
1 3 5 7 9 10 11 for i=1 to 11 step 2
n次間数の次数nを上げればいくらでも答えがでるんじゃないのか?
>>485
489 :
デフォルトの名無しさん :01/09/12 17:20
>>485 ━┓ ____
] ┃ / /
┃ / 2ch /
] ┃ /Λ_Λ /
┃ 逝くぞぬっ!! / (´∀` ) /
] ┃ / ∧∧ )/
┃ / (゚Д゚ ) ̄ ̄ /
] ┃ _______________________/ U U ̄ ̄/ _
┃ / ・・・・・|_|・・・・・ Λ_Λ ∩∩ /)_/) i⌒――⌒i  ̄ | __
] ┃ /● ● 2ch Airlines (・∀・ ) (・x・)ノ (,’ー’) (´(Å__)` ) / ̄ ̄ ̄ ̄ ̄/
┃ / _ _ ( ) ノ|x| _( U__U) /ヽ / /_ノ ヽ  ̄ ̄ ̄ / ̄
] ┃ | ▼ |_|・・・・・・・・・・|_|・・・・・・ ・・ |_|・・・・_・・・・|_|・・・/_/ |_|((.l_ll))) /
┃ |_人_ (-_-)ヽ(´ー`)ノ/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/ ̄ ̄ ̄ ̄ ̄ / (lロ-ロl) /
] ┃ \ (∩∩)(___)\== / ̄ ̄ ̄ /|| ̄| ̄|\/ ̄ ̄ ヽ ∀ノ/
┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄| ̄|\/ ̄|| | | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄
] ┃ || | | | || |_|/
┃ || |_|/  ̄ ̄
] ┃  ̄ ̄
西向く侍とかいうなよ
491 :
デフォルトの名無しさん :01/09/13 00:01
プログラム超初心者です。 いろいろわからないことがあるので教えてください。 一応Delphi6を買ってみて動かしてますが以下の部分がわかりません。 ------Unit1-------------- if Key = 49 then begin 処理1 end else if Key = 50 then begin 処理2 end else if Key = 51 then begin 処理3 end; -------------------------x10フォーム 上記のコードをFrom10個くらいに同じのを使うので効率悪いです。 友人に聞くと「constでやれば良いよ」と言いますがどうやれば良いのかわかりません。 どう言うことなのでしょうか?
>>485 無駄にレス。
1 3 5 7 8 10 12
>>491 constでやればいい という意味はワカランが
case でやればいいの間違いかな。それならこんなの。
この場合if then else よりよっぽど解りやすい。
処理が一文なら begin end はいらない。
case key of
49: begin
//処理1
end;
50: begin
//処理2
end;
51: begin
//処理3
end;
495 :
デフォルトの名無しさん :01/09/13 02:44
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< 処理を1〜3にわける必要がない可能性は無いか? (O)----(O)U-U) \__________ あとマジックナンバー使うなゴルァ
>>491 いっそのことやりたいこと全部書いて見ろ
やべ。MemCheck組み込んだままVectorに登録しちまったぜ
>>493 なんか「Key= 」の部分をconstにしろとか言ってました。
>なんか「Key= 」の部分をconstにしろとか言ってました。 的外れ
マジックナンバーつかわず定数にしろって意味かね?
501 :
デフォルトの名無しさん :01/09/13 08:51
const KEY_I = 49; //小文字の i かも KEY_J = 50; KEY_K = 51; ------------------- case Key of KEY_I: 〜; KEY_J: 〜; KEY_K: 〜; end;
502 :
デフォルトの名無しさん :01/09/13 09:02
const?ようわからんね。 言った本人に聞くのが手っ取り早いと思うが。どうよ。
503 :
379@間があいちゃったけど :01/09/13 11:09
COMの用途は異言語間で使えるクラスライブラリってことなんですね。 # あまりにあたりまえすぎる結論ですが・・・ ではObject Pascalで完結している場合、interfaceを使うメリットは何でしょう? 一般的なインターフェースのメリットは理解していないわけではないけれど、 VCLなインターフェースとはちょっと合わないような気がしてます。 自前のライブラリでinterface使っている人います?
504 :
491@初心者 :01/09/13 11:53
>>501 ありがとうございました。
出来ました。
491の処理がすっきりしました。
友人の言ってた事はこういう事だと思います。
505 :
デフォルトの名無しさん :01/09/13 12:18
Del6のサンプルコンポ ShellListView で、特定の拡張子をもった ファイルのみを表示するということは出来ないですか? Win3.1の FileListBox はマスクを指定できて便利だったんだけど…
え、マジであってたの? 49 が I ってのはかなり勘でやってたんだけども。 確か 41 が A だったような。
507 :
491@初心者 :01/09/13 12:29
>>506 いえそのまま使った訳じゃ無く少し変えて使いました。
const
key1 = 4144; //F1
key2 = 4145; //F2
------中略-------
case key of
key1 : btn1Click(nil);
key2 : btn2Click(nil);
end;
-----------------
こんな感じです。
もう一つ質問です。
const
key1 = 4144; //F1
を全フォームで宣言するのは効率よくないのでモジュールなりで宣言して使い回したいのですが
出来るでしょうか?
>>504 多少マシになるかもしれんが同じコードをForm10個に貼り付ける
ダサさはそのままだろ。だから「的外れ」と言ったんだが。
ま、最初はしょうがないかな。そのうち気づくだろ。
解決策考えようにもなにやりたいのかサパーリ分からんからどうしょうもないが
ちなみに意味のある数字(=今回のように定数で表せる)を素の数字のまま表記
したものをマジックナンバーという。Delギコの言ってたやつだ。
読みにくくて嫌われるな。
509 :
デフォルトの名無しさん :01/09/13 12:36
例えば、ファイル→新規作成→ユニット で、interface と書いてある場所の次の行に const KEY_F1 = 4144; KEY_F2 = 4145; ... と書いていく。そしてユニットを保存する。 (例えば KeyCode.pas としよう) で、 Form1.pas の uses に KeyCode を追加すれば、 Form1.pas 内で KeyCode.pas の interface 部で宣言されている 定数を使う事ができる。 …が、それ以前の問題で、 ファンクションキーには VK_F1, VK_F2, .. という定数が 既にあったような…
510 :
491@初心者 :01/09/13 12:38
>>509 ありがとうございます
早速やってみます。
>ファンクションキーには VK_F1, VK_F2, .. という定数が
>既にあったような…
最初それをやったんですよ。
でもkylixではそれが無効らしくて
511 :
デフォルトの名無しさん :01/09/13 12:42
それから、ファンクションキーにボタンクリックを対応付けたい のならば、 TAction の使い方を覚えるといい。 新規 Action を作成し、ボタンイベントの内容はすべて そちらに書くようにする。例えば、Button1 の処理内容は Action1, Button2 の処理内容は Action2 といった感じで。 詳しい Action の設定方法はDelネコに任せる. んで、Action1 の ShortCut プロパティに F1 を、 Action2 の ShortCut プロパティに F2 ... というようにショートカットキーを設定する。 最後に Button1 の Action プロパティを Action1 に設定、 Button2 の Action プロパティを Action2 に設定すればよい。
>>510 ああ、Kylix かー
それじゃあ VK 定数はむり。あれはWindowsのキーコードだから。
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< VK_F1はwindows.pasに定義済だが (O)----(O)U-U) \__________
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< 遅かった (O)----(O)U-U) \__________
Del6 開発者ガイド +-- Delphi プログラマーズガイド +-- CLX で異なる機能 その他の違い -------------------------------- Windows では,〔Enter〕キーの OnKeyDown イベントと KeyUp イベントのキー値は 13 です。Linux では, この値は 4100 です。ハードコードされた数値をチェック する場合(〔Enter〕キーの値 13 など)は,Delphi アプ リケーションを Kylix に移植するときに数値を変更する 必要があります。
516 :
デフォルトの名無しさん :01/09/13 13:10
遅かった。
ん?じゃぁKylix/CLXではキーコード定数自分で定義しろってこと?
518 :
Delギコ :01/09/13 15:02
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | そろそろ平常操業 | |_________| ∧∧ || (,,゚Д゚)|| マターリ イクカ / づ||O @(___ノ
Delギコ氏マターリと復活!!
521 :
Delギコ :01/09/13 16:07
∧∧ / ̄
_(,,゚Д゚) <
>>505 試したけど簡単には無理みたい。
乙,,__つつ. \_ シェルだし。HELPないし…
ネコ ニャ ワカラン
出来たら便利なんだけどなあ。
OpenDialogみたいなのが簡単に作成できるよね。
事故レスだ。 ShellListView の AddFolder イベントは、 フォルダだけではなく、どんな種類のファイルでも とにかくリストビューに追加する時には いつでも発生するみたい。 故に、以下のようにすればよいと思われる。 procedure TForm1.ShellListView1AddFolder(Sender: TObject; AFolder: TShellFolder; var CanAdd: Boolean); var Ext:string; begin Ext := ExtractFileExt( AFolder.PathName ); if AFolder.IsFolder then Exit; //フォルダは無条件でOK CanAdd := if AnsiMatchText( Ext, ['.jpg', '.jpeg', '.bmp' ] ); end;
>522 駄レスだが… 判定順序を変えては? こうした方がフォルダがたくさんあるの時は動作が比較的軽くなるかと思われ。 あと CanAdd := if 〜 のif は不要と思われ。 procedure TForm1.ShellListView1AddFolder(Sender: TObject; AFolder: TShellFolder; var CanAdd: Boolean); var Ext:string; begin if AFolder.IsFolder then Exit; //フォルダは無条件でOK Ext := ExtractFileExt( AFolder.PathName ); CanAdd := AnsiMatchText( Ext, ['.jpg', '.jpeg', '.bmp' ] ); end; こんな感じ?
524 :
デフォルトの名無しさん :01/09/13 16:44
>>523 おお、スマソ。確かに if はいらん…
ShellListView の問題も解決したところで…
ShellTreeView で、指定したフォルダを
開いている状態にするにはどうするんだろうか。
たとえば、 C:\Windwos と指定すると。
デスクトップ→マイコンピュータ→C→windows
が展開されて、かつスクロールインする感じ。
>>524 ShellListViewにはShellTreeViewというプロパティ、
ShellTreeViewにはShellListViewというプロパティがある。
(同様にPopupMenu, ShellComnoBoxというプロパティもあるね)
めぼしいイベントがないから、これで自動でやれということか?
Del6はまだPerしかないからVCLのソース見れないからわからんが…
がいしゅつだったらスマソ。
526 :
Delギコ :01/09/13 17:23
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|
>>522 -523すごいですやん!(関西風)
\___ _________
∨
♪ ∧ ∧ ♪
(,,゚Д゚). ♪
|つ[|lllll]).
〜| | ShellListViewトテモ ベンリ ニ ナタ
U U
AddFolder…フォルダの新規作成時に出る
イベントかと思ってしまた。
>>524 調査中。
527 :
Delギコ :01/09/13 17:46
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) < SampleのVCLはソース月?
U ,つ゛ \____________
〜| |
∪∪
>>525 (D6パソナルでも)TCustomShellTreeViewのソースはこの辺。
$(DELPHI)\Demos\ShellControls\ShellCtrls.pas
TCustomShellTreeView.Pathプロパ辺りがぁゃιぃ。
ソースみるにはProじゃないとつらいな。
つらくなくても、理解には程遠いが。
528 :
491です :01/09/13 21:51
お昼はありがとう御座いました。 無事解決しました。 起動時に複数あるフォームにあるボタンのフォントサイズをコード内で"11"にしたいのですが 効率の良い方法は無いでしょうか? 例: -------------------Unit1 Label1.Font.Size := 20; Label2.Font.Size := 20 Label2.Font.Size := 20 ------------------- このようなコードを全フォームに書くのは見た目的にも汚いのでどこか一つにまとめて そこから呼び出せないでしょうか?(ユニットやモジュールなど) 本当はオブジェクトインスペクタで設定すれば良いだけのことなのですが、そこで設定しても起動時にフォントサイズが 変わってしまいます。(FontPitchなども関係してくるんでしょうか。) コード内に書くと固定され大丈夫らしいです。 こちらで解決すれば良いのですが、、、 質問を小出しにすると嫌われるので一度に質問しました。 どうかよろしくお願いします。
529 :
デフォルトの名無しさん :01/09/13 22:04
>>528 Font.Size の初期値を 20 にした TLabel2ch ってコンポーネントを作ってしまえば?
531 :
デフォルトの名無しさん :01/09/13 22:50
∧ ∧ /
>>528 (;゚Д゚) < すごく汚いソースが生成されてる気がする
|つ つ \
〜 |
>>508 チョウ ドウイ
∪ ∪ マジクナンバー&const ナンテ タイシテ モンダイナイ
アマリ カシコクナイ ゴユウジン ヲ オモチデスナ
コントロール配列ってある程度の人になると
マターク使わなくなるよ。
LabelのParentFontをTrueにして
FormのFontを変更してみーな(富永)。
もしくは
uses TypInfoを追加して
procedure TForm1.Button3Click(Sender: TObject);
var
i : Integer;
f : TFont;
c : TComponent;
begin
for i := 0 to Self.ComponentCount -1 do
begin
c:=Self.Components[i];
if IsPublishedProp(c,'Font') then
begin
f:=TFont(GetObjectProp(c,'Font',TFont));
f.Size:=trunc(f.Size*1.25);
end;
end;
end;
Delphi6CLX&VCLで動作確認。
ComponentsやControlsプロパティを勉強して
for i := 0 to Self.ComponentCount -1 do
begin
if c is TLabel then
//フォント変更処理
このようにするのも手だね。
532 :
Delギコ :01/09/13 22:51
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) < もそっと。質問上手にナーレ
U ,つ \____________
@| |
∪∪ ナマエ ワスレタ
なんにしても、もっと勉強してサンプルの掲載も上手になって欲しい。
情報が無さすぎて答えるのが困難。
まさか、TLabelを複数同時選択して
フォントかえるだけでよかったりしない?
>>528
533 :
528=491 :01/09/13 23:29
>>532 えーっと、実はDelphiでは無くkylixなんです。
フォントは都合上変更できないんです。(上からの指示で、、)
534 :
Delギコ :01/09/13 23:42
>>533 >実はDelphiでは無くkylixなんです。
∧∧ / ̄
@_(,,゚Д゚) < そりゃ、わかっちょるって。
⊂,,__つつ. \_
だから、Delphi6CLXで動作確認してるって書いたデソ。
>変更できないんです。(上からの指示で、、)
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/\( ´∀`/| < やめてくれー
\ (⊇__|/∧ ∧\/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ̄ | (, ゚Д゚)< その上司捨てとく?
| ミカンC= | \_____________
|____|/| |
| | 〜
U U
でも、Fontを変えるんじゃなくてFont.Sizeを変えたいんでしょ?
フォントサイズも変えてはだめなの??(そんなわけないと思うが)
いったいぜんたい、何をしたいのか全然わからない。
アナタがどこまで理解しているかもわからないので。
それが伝わるように注意してクダちイ。
1つの質問もきっちり相手に伝えられないようじゃ
この業界ツラーイYO
>>534 上でも書きましたが実行時に起動時にフォントサイズがFontsizeが変更されてしまうんですよ。
コード内でフォントサイズを指定すると大丈夫です。
でもLabelの数が大量にあるため全部にフォントサイズを指定するのが大変だと思いまして、、
<わかりやすく書くと・・・>
オブジェクトインスペクタで13と指定する
実行すると10のフォントサイズになる
なんとかしたい
コードに書き込もう!
直った!
でもラベルの数が大量にある&コードが汚くなる、、
教えてください!!
こういう事です。
536 :
Delギコ :01/09/14 00:19
>上でも書きましたが実行時に起動時にフォントサイズがFontsizeが変更されてしまうんですよ。 ∧ ∧ / ̄ ∩(,,゚Д゚) < それは再現性のあること? ⊂,,^__つつ. \_ なんらかのほかの原因は考えられない?? アプリケーションを1から作ったとして、それでも再現するのかどうかを まず伝えてくれよ。 Formが沢山あるらしいが アナタが1から作ったもの?引継ぎ? それがわからないと >コード内でフォントサイズを指定すると大丈夫です。 これに対する返事の仕方が出来ないでしょ。 Kylixのバグかもしれないし。
537 :
Delギコ :01/09/14 00:21
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜''~(,,゚Д゚) < 質問を解読することが疲れるニャヨ。
UU'UU \________
あと、
>>531 のレスや
>>530 さんのリンク先
を応用すれば
全部望むことは出来ると思う。まずはそれを理解してよ。
そこがわからないなら具体的な質問ができるっしょ。
Buttonクリクイベントあたりに
for i := 0 to Self.ComponentCount -1 do
begin
if c is TLabel then
TLabel(c).Size := TLabel(c).Size + 5;
end;
書いて実行シテミソ。
Delphiの勉強とともにネットでの質問の仕方。勉強して欲しい。
AboutDelphiって所でdelphiMLの検索をするといい。
http://www2.big.or.jp/~osamu/Delphi/
538 :
Delギコ :01/09/14 00:25
∧∧ / ̄ _(,,゚Д゚) < 江良そうに、逝たのにマチガタヨーン 乙,,__つつ. \_ ゴメンチャイ 失礼しました。 × TLabel(c).Size := TLabel(c).Size + 5; 訂正 ○ TLabel(c).Font.Size := TLabel(c).Font.Size + 5;
>>536 >アプリケーションを1から作ったとして〜
あした会社で再現してみます。
家にkylixは無いので、、
>アナタが1から作ったもの?引継ぎ?
そうです。私が作った物です。
Form数は20以上になります。
もしかしたらkylixのバグかもしれないしKDEの設定かもしれないです。
KDE2.2に上げたあたりからおかしくなったのですが、おかしくなったタイミングが全く一緒じゃ無いんですよ。
余談
kylixはそのほかにもいろいろなバグがあって困ってます。
FormBorderStyleをfbsNoneにするとキープレビューが取れなくなります。
全く同じソースをWindows側に持っていきCLXで動作すると大丈夫なんですけどね。
もちろんブレークポイントかけても引っかかりません。
(これにはまいった・・・)
もしCLXでVCLと同じように逝くなら… こんな感じのコード書いてはどうよ? Del6 Per VCLで確認。 これを適当に応用してみそ。 procedure SetBigFontToLabel(Ctrl: TControl); var I, J: Integer; begin If Ctrl is TLabel then begin TLabel(Ctrl).Font.Size := 18; end else begin J := Ctrl.ComponentCount - 1; If J >= 0 then for I := 0 to J do If Ctrl.Components[I] is TControl then SetBigFontToLabel(TControl(Ctrl.Components[I])); end; end;
おっと書き忘れた。 適当にLabelをポンポンおいて、PanelやGroupBoxなどの中にも 適当に配置する。 んでFormのOnCreateなどに SetBigFontToLabel(Self); などとして使う。
てかログ見たら思いっきりDelギコと被ってた…鬱打スマソ聞き流してくれ
543 :
Delギコ :01/09/14 00:43
∧∧ / ̄
_(;゚Д゚) < Kylixはまだまだなのかな?
乙,,__つつ. \_
>もしかしたらkylixのバグかもしれないしKDEの設定かもしれないです。
そうでしか。そうなるとわからなくなりますね。
悪かったでございます。それも含めて再現性の追及が出来るといいっすね。
余談の内容はチョチ怖い。
KylixMLが寂れに寂れてるので
質問をして盛り上げてみるのはどうですか?
バグだとしたら中村先生タンは教えてくれるんじゃないかな。
(あくまでも簡単に再現性を確認できるようにしてね)
>>540 さん。サンクスコ。
∧∧∩゛ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚)ノ < では。おやすみ、なっさい。
U / \____________
@| |
∪∪
>>540 -541 & Delギコ
ありがとう御座います
いまDelphi6で動きました。
あした会社でkylixで試してみたいと思います。
545 :
デフォルトの名無しさん :01/09/14 00:56
LabelってTlabelで宣言されてるのでフォーム上の全部のLabelがコード上のフォントサイズになりますよね? 一部のLabelのみ指定フォントサイズにする(もしくはその逆)って出来ないですか? PanelやGroupBox使えば出来そうなんですが、、
546 :
Delギコ :01/09/14 01:05
∧ ∧ /
(,,゚Д゚) < 何をもって一部のものか一部以外のものかを
し |つ \わける方法を考えれ。
〜| | ソレニヨテ コタエ カワルジャナーイ
∪∪
・TLabelのTagを設定して振り分ける
・
>>530 のリンク先のようにFindComponentで名前で切り分ける
・TLavel(c).ParentがPanel1とかで切り分ける
・特定のPanelに載っているかどうか切り分ける
(Panel1.Controls配列をしらべーる。)
親コントロールのフォントを継承するっていう プロパティがあるから、それをFalseにすればいいのでは。
ParentFont?
549 :
デフォルトの名無しさん :01/09/14 01:53
ParentFont あるなら Form1.Font.Size := 13; とするだけで、フォーム上全てのコントロールのフォントが サイズ13になるのでは…
552 :
424です :01/09/14 08:11
>>540 -541
無事kylixでも動きました。
一部のLabelのみフォントサイズ指定も出来ました。
If Ctrl.Components[I].Tag = 1 Then
で解決です。
555 :
Delギコ :01/09/14 12:50
∧∧ / ̄ @_(,,゚Д゚) < D5-D6のVersion間互換性、低すぎない? ⊂,,__つつ. \_ Font.Name = #65325#65331' '#65328#12468#12471#12483#12463 この文字列を Font.Name = 'MS Pゴシック' この文字列に変換するのを OpenToolsで組み込んで欲しいよ。 ∧∧ / ̄ @_(,,゚Д゚) < D5-D6のVersion間互換性、低すぎない? ⊂,,__つつ. \_ Font.Name = #65325#65331' '#65328#12468#12471#12483#12463 この文字列を Font.Name = 'MS Pゴシック' この文字列に変換するのを OpenToolsで組み込んで欲しいよ。
556 :
デフォルトの名無しさん :01/09/14 12:52
>555 VCL ソースみりゃ、一発だろ?
557 :
Delギコ :01/09/14 13:16
∧ ∧ ・・・・。 ( ゚Д゚) 〜( uu) ニジウ カキコ スマソ D6入れるスペース作るために D4アンインストしたら D5が道連れでお亡くなりになられました。 がんばたけど…コードエクスプローラがどうしても現れない…カナチイ
558 :
デフォルトの名無しさん :01/09/14 13:38
>>557 D5 再インストールすればよい話では?
559 :
デフォルトの名無しさん :01/09/14 14:19
>>556 これか!DFM ファイルの形式が今までのと同じになるね。
[HKEY_CURRENT_USER\Software\Borland\Delphi\6.0\FileFormat]
"DFMFormat"=dword:00000000
560 :
デフォルトの名無しさん :01/09/14 15:40
EJBのsessionBeanでstatelesssessionを作っているのですが、 EJBクラスの中のejbActivate(),ejbPassivate()というメソッドが何のために必要なのかわかりません。 教えて下さい。
561 :
デフォルトの名無しさん :01/09/14 15:52
>>551 深さ優先で検索してるけど、幅優先で検索したほうが
早いかと。一度 node の items をスキャンして、
パス名に一致する items が見つかれば、そこを掘って行く
てな感じで。
つーか、それ以前にそういうメソッドがありそうで
ならないんだが…
IndexOf ではキャプション文字列での検索が出来ないし…
562 :
Delギコ :01/09/14 16:11
ンマーー ネコ ビックリ
∧ ∧∩
(゚Д゚,,)ノ
| つ
| ⊂)〜
∪
>>559 すげーよ。アンタが大将♪アンタが大将♪アンタが大将♪
動作確認しました。
FileFormatってキーを自分で作成するのね。
最初、ネ夕かと思テシマタ。
大サンクスコ
>>562 某国のことだからそのくらいの細工はしているだろうとは思ったが
ほんとにあるんだね。
ただそれやっちゃうとせっかく UNICODE にした意味がなくなっちゃうんだろうね。
EUC とか Shift-JIS とかを考えなくてすむので、CLX アプリにとっては
大事な機能です。
>>559 はブラクラ。もとい IDE が立ち上がらなくなります。
誰か削除願いを。
565 :
Delギコ :01/09/14 17:46
>>564 ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
@' ― (,,゚Д゚)つ < 折れのではうまくいってるが?
し― ∪ \___________
IDEが立ち上がらなくなったら
レジストリ元に戻せばいいことだろ。なぜ削除願いをせねばならん?
デマ野郎なら放置PLAY。
>>566 Enterprise JavaBeans?
568 :
Delギコ :01/09/14 18:01
ヤッカイ ナリ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜' ― (,,゚Д゚) < 例のdesignintf問題が発生した! し― し-J \___________ D6のプロパテエデタ分離問題で [致命的エラー] DesignEditors.pas(517): ファイル 'Proxies.dcu' が見つかりません これが解決できないニャ。 MLもそれにまつわるの読んだのに… ろくに答えられてる投稿がない… TDefaultEditorを継承したプロパティエディタを作成すると uses に DesignEditors;を追加する必要があるのに これがコンパイルできないってドユコトYO!! ◆[Delphi:59073] Re: DsgnIntf 周りの変更について > Borland のニューズグループでは designide.dcpを design time package > の requires に追加しろ、というレスポンスが付いてました。 これをもう少し詳しく氏ってたら、具体的に教えてくださいな。 ◆[Delphi:59359] Re: delphi6>Proxies.dcuが見つかりません ここは詳しいけど、結局解決方法載ってないね。
569 :
Delギコ :01/09/14 18:05
∧ ∧ /
(;゚Д゚)< いきなりEJBの話ふられても
|つ つ \
@ | エンタープライズ ト イエバ トレッキー
∪ ∪
∧ ∧ ──────
(゚Д゚ ) < ワープ速度5くらいで、ガンバッチクレ
>>560 ⊂⊂ \──────
\ 〜 ────
し し ─────
ビュヲーン
>>568 だからぁ。Proxies ユニットは単体で再配布されず、かならず designide パッケージ
内から提供されているものを使え。っていっているの。
この変更は Delphi4 からなんだから、いまさら文句言うなよ。
繰り返し、パッケージを使え。と書かれていたのに、今まで修正しなかったほうが
悪い。
>>568 一回しかやったこと無いんであやふや
Libフォルダにdesignide.dcpがあるから
パッケージのウインドウのRequireの欄に追加したらOKだったような
572 :
Delギコ :01/09/14 18:39
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
@' ― (,,゚Д゚)つ <
>>570 全然わからん・・ワン
し― ∪ \___________
あ。ネコダッタ
>かならず designide パッケージ
>内から提供されているものを使え。っていっているの。
っていわれましても具体的なやり方がわかんないがな。
>今まで修正しなかったほうが悪い。
修正方法わからんのにどうやって直せと…ご無体な
∧∧ / ̄
@_(,,゚Д゚) <
>>571 Libフォルダにdesignide.dcp
⊂,,__つつ. \_ あるけど、バイナリファイルみたいなんですが…
これをどうやて、修正すればいいニャ??
573 :
デフォルトの名無しさん :01/09/14 18:42
自分のコンポーネントを含んでいるパッケージに パッケージマネージャ経由でパッケージを追加しろ。っていってんだよ
574 :
Delギコ :01/09/14 19:19
∧ ∧ / ̄
∩(,,゚Д゚) < 匍匐前進並に…ちょっぴり進んだ。
⊂,,⌒ ,,つつ. \_
>>573 サンクス
 ̄ ̄
だけど今度は変なエラーが出てきました。
[エラー] : 'EditProperty' の宣言がすでに定義されているものと異なります
なんか、TDefaultEditorのEditPropertyの実装変わってない?
procedure EditProperty(const Prop: IProperty; var Continue: Boolean); virtual;
D6HELPの"EditProperty 例"と違うんだけど。
実装が変わったのか、ヘルプの誤植なのか。 相対的に見ればどちらも正しく、どちらも間違えている。 絶対的に見てどちらが間違えているかは、開発者に聞くしかない。
576 :
Delギコ :01/09/14 23:48
_________
//////////\ ミ☆
////////// ギコ.\ ミ☆
 ̄┃ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄┃ ̄
┃☆ ____ ┃
┠─┐ ‖∧ ∧ ‖ ┃ / ̄ ̄ ̄ ̄ ̄ ̄
┃ │ ‖(,,゚Д゚)..‖ ┃< プロパティエディタ。難しいよ
┃°│  ̄∪∪ ̄ ┃ \______
━┻━┷━━━━━━━┻━━━━━━━━━━━━
教えてくれた人。サンクス。
なんとか解決できました。
互換性のなくなるコンポ少なきゃいいけどね。
>>575 やぱり伝統的にHELPがイマイチ出来てないだけかも。
577 :
デフォルトの名無しさん :01/09/14 23:52
MP3のタグ読み書きコンポない?
579 :
デフォルトの名無しさん :01/09/15 00:37
質問です。 MDIアプリケーションにおいてメニューをToolBarで代用しているとき、 子ウィンドウを最大化すると「最小化」「閉じる」などのボタンや 子ウィンドウのアイコンが表示されなくなってしまいます。 こいつをうまいこと表示するにはどうすればいいんでしょうか。
580 :
デフォルトの名無しさん :01/09/15 01:11
Delギコたん萌え
581 :
素直じゃないね :01/09/15 09:49
582 :
newsgroups.borland.comも見ようね :01/09/15 10:04
>>572 newsgroups.borland.com
の
borland.public.delphi.opentoolsapi
で
proxiesあたりを検索すれば引っ掛かるよ
あちらでもすでに報告されてますね
583 :
Delギコ :01/09/15 16:04
584 :
デフォルトの名無しさん :01/09/15 21:46
質問があります。 TUIWebBrowserを使ったアプリケーションを作成しているのですが、 OfflineプロパティをTrueにセットしても、オフラインでNavigateして くれません。ヘルプを見て、DownloadControlにCS_OFFLINEをセット してみたのですが、それでもダメでした。 TUIWebBrowserを使って「オフライン作業」を実現するにはどうすれ ばよいのでしょうか。
585 :
Delギコ :01/09/15 21:56
∧ ∧ ・・・・。 (;゚Д゚) U U 〜| | U U ActionManegerの使い方が全然わからん。
587 :
Delギコ :01/09/15 22:45
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ゚Д゚) < わかった!アクトン マネジャ!
/⊃⊃ \
〜( ノ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
⊂`J ピョン
||
||
ωωω
マネジャノ カテゴリ ドラッグアンドドロップ ゴク ビミョウニ バグ アルミタイ
サイショ デキナクテ ウロタエタ ヨ
>>584 MLで聞いたら親切な作者さんが出てくる事が多いぞ。
>586 そうですね、迂闊でした。 とりあえずEmbeddedWbをインストールしたので今から 使ってみるです。
589 :
デフォルトの名無しさん :01/09/15 23:34
以下の仕様を満たしたコンポーネントの作り方を教えてください。 TImage を配置。マウスボタンが押されたらへこんだ状態の 絵(DownedImage)を表示、マウスボタンが離されたら元に戻った状態の 絵(RaisedImage)を表示、マウスカーソルがボタン上にある場合は アクティブ(ActivateImage)状態を示す画像を表示 これをコンポーネント化したもの。ただし、 コンポーネント上でマウスボタンを押す。 押したままの状態でコンポーネントから離れたい値まで カーソルを持っていき、そこでマウスボタンを離す。 通常、この場合は MouseUp イベントは発生しない。 これをうまく処理して、普通のボタンのように振舞う 画像コンポーネントをつくりたい。
SpeedButton
591 :
Delギコ :01/09/15 23:50
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) <
>>589 ジブンで考えろや。
U ,つ゛ \____________
〜| |
∪∪ ジブンデ ツクッタ ソース デモ アップ シロ
ヒトノ ソース ツクッテ ヤルホド ヒマジャネェ
∧∧ プハー / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) =3 < アクトンマネジャ保持のActionが1つもない状態で
| つ日~~ \ActionListのActionカテゴリをActionMainMenuBarにD&Dしようとしても
〜| ) 出来ないにゃ。
U U
コレ バグ チャウ?
ActionManeger系のGUIかなり使いにくいぞ。
592 :
デフォルトの名無しさん :01/09/16 01:25
593 :
Delギコ :01/09/16 02:27
ActionManegerをひととおり使ってみたが・・・ 見事なくらいバグだらけというか。使えない、、、はぁ。。。溜息 D6Pro版持ってる人はActMane使えなくても Demos\ActionBandsをさわってみるとわかります。 ∧ ∧ タイヘン カナシイ..... (,,゚Д゚) U U 〜| | U U FormのDockingもそうだけど。(パソナでも使えるからDemos\Dockingで遊んでみー) 新方式のUIに関しては、なぜいつもこんなにいいかげんな 実装をするんだろう。>>某蘭土 ちゃんとデバッグしてるのか? 開発チームがFormのDockingもActionManegerも同じなのかなあ。 だとしたら、ずいぶんとデバッグをいいかげんにするチームらしい。 一度バグ入りで実装しちゃった部分は 将来的にも治らない事多いし。なんかヤだなあ。
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>594 デモsrcの遊び方に間違いも何もないと思うが
(O)----(O)U-U) \__________
596 :
Delギコ :01/09/16 05:02
∧ ∧ / (,,゚Д゚) < ActManegerこんなかんじでどーよ |⊃ ,⊃ \ 〜| | ∪∪ Demos\ActionBands\WordPad.exeで Windowを目イッパイせまくして Customizeダイヤログ呼び出してそのまま閉じる >>ツールバー太いまま。 また、CustomizeMenuそのものを消してみる。 >>settings.datを削除しない限り2度とCustomize不可能。 ダイアログを開いてツールバータブを開いて EnabledFalseになっているMainMenuActionBar1を選択 [戻す]ボタンヲクリック >>MainMenu消えます。 こんな代物をユーザーさんに使ってもらうわけには....
597 :
Delギコ :01/09/16 05:04
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜''~(,,゚Д゚) < それにしても・・・ UU'UU \________ あと、Actionのショートカットキーって ActionManegerではカスタマイズできないみたい。 Borlandって妙な所抜けてない? IDEのキーバインド変更もいまだに簡単には出来ないし。 GExper氏ラ無い頃はCtrl+Aもなくて苦労したよ。 D6からはCtrl+Aも定義されてるけど。
borlandのプログラマー社員って何人勤めてるのかな? もう営業しかいないのかな?
↑ 社長しかいません。
TSpeedButtonはだめ。 だって、ボタンより小さい画像しか使えないし、 ボタンを現す矩形が表示されてしまうし。
601 :
ひとりごと :01/09/16 11:38
function IntToZeroStr(dt,keta:integer):string; var i:integer; begin // Result:=''; を入れなくてもエラーにならないし // 単独で試験したら動くからいいのかと思ったけど // 連続して使うとなんか動作変なんだよね // つい忘れちゃうから注意しないとダメだな for i:=1 to keta do begin Result:=char(ord('0')+(dt mod 10)) + Result; dt:=dt div 10; end; end;
602 :
デフォルトの名無しさん :01/09/16 11:57
>>601 そんな面倒なことしなくても、
format の精度指定子と間接指定子で簡単に実現できるよ
function IntToZeroStr(dt,keta:integer):string;
begin
result := Format('%.*d',[keta,dt]);
end;
603 :
デフォルトの名無しさん :01/09/16 11:59
604 :
デフォルトの名無しさん :01/09/16 12:01
うん、だから、Trueにするとね、 マウスカーソルをFlatButton上に持ってきたときに やはりボタン周囲に影が表示されてしまうでしょ。 それに、どちらにせよボタンより小さい範囲にしか画像が 表示されないし。たとえば、スキンを利用した ソフトを作りたい場合に、それじゃあ困るわけね。 いや、いいんだけどさ。面倒だから書き込んだだけだし。
605 :
Delギコ :01/09/16 12:15
>スキンを利用した ソフトを作りたい場合に ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < そんなら結局リージョンも必要だろ? | つ[|lllll]). \_________ 〜| | ∪∪ ヂミチ ニ ガンバッタラ? 一朝一夕で適当に出来るもんじゃないし。 作り方、さらっと教えれるもんでもないが・・・ Compo探した方がよくない?
>>602 それだと入力が 指定した桁数以上あるとズレてしまうから
function IntToZeroStr(dt,keta:integer):string;
begin
dt:= dt mod power(10,keta); // こっちを入れるか
result := Format('%.*d',[keta,dt]);
result := copy(Result , length(Result)-keta,keta); //こっちを入れる必要があるかと
end;
はじめまして! 疑心暗鬼といいます。 ちょっと質問なんですけど、 下記のVBのプログラムの結果が同じにならないのは どうしてなのかご教授願えますか? 質問内容 Fix関数でDoubleとVariantで同じ値が 入っているのに、Fixすると結果が違ってしまう。 環境 VB6 + SP6 Win2000 よろしくお願いします。 '********* ここからプログラム Dim a As Variant Dim b As Variant Dim c As Variant Dim t As Variant Dim d As Double Dim e As Double Dim f As Double Dim tt As Double Dim g As Variant Dim h As Variant Dim i As Variant Dim ttt As Variant a = 24600 d = 24600 g = 24600 b = 24000 e = 24000 h = 24000 'VariantでDoubleの時と同じ結果を出すための苦肉の策 c = a * 1000 / b * 1000 / 10 t = Fix((c + 5) / 10) / 10 'Doubleでの正しい結果が出る f = d / e * 100 tt = Fix(f + 0.5) 'Variantでは正しい結果が出ない i = g / h * 100 ttt = Fix(i + 0.5) MsgBox "ただしい計算結果 " & Str(t) & vbCrLf & _ "ただしい計算結果 " & Str(tt) & vbCrLf & _ "誤ってる計算結果 " & Str(ttt) '********* ここまで
っていうか VB専用のスレありましたね。 すいません。逝ってきます。m(_ _)m
∧∧∩゛ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚)ノ < 逝ってらっしゃい。 U / \____________ @| | ∪∪ イヤ イイイミデ デス・・・ ガンバテネ
>> 609 ガムバリマス アリガトウゴデス
611 :
デフォルトの名無しさん :01/09/16 15:03
おれ、まえから言いたくてしょうがなかったんだけど、 COPY関数で、特定の場所から右側の文字列を取得したいときに 以下のようにする人がいっぱい居るよね(このさい Del6のRightStr関数のことは考えずに) S := Copy( S, Index, Length(s)-Index+1 ); でも、これって S := Copy( S, Index, MaxInt ); というふうに、長さ指定に式を使わなくても簡単に 実現できるんだよね。S の範囲を超えた部分は 自動的に無視されるから。 つーか、VCLのソースでもこういう使いかたしてる。
612 :
デフォルトの名無しさん :01/09/16 15:06
>>606 Del6を使っているならば、
result := RightStr( Format('%.*d',[keta,dt]), keta );
でOKかと思われますが。
613 :
Delギコ :01/09/16 15:11
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
@' ― (,,゚Д゚) < また重箱墨つつき。
し― し-J \___________
D6のTControlbarのバンドがTCoolbarと同じになってる。
・・・話題に出てたっけ?
TCuteControlbarがあるからどうでもいいけど。(D6で動くかな)
>>611 微妙に知ってるが、時々書いてしまう。癖かもね。
614 :
Delギコ :01/09/16 16:04
しぶとく、D6お試しレビュー _________ ∧ ∧ / ( ゚∀゚)< をっ!TToolBar.Customizableケッコ。イイかも。 |つ つ \_________ 〜 | ∪ ∪ WinAPIのToolbarカスタマイズダイアログがラップされてる TActMngよりも、こっちの方がよさそうだよ。 ん?保存先はRegistryだけなのかな? あれ?ヤパリ微妙なバグだらけ・・・ どんどん、Toolbuttonが消えるぞ。 OnCustomize系イベントが沢山あって何とかなりそうだけど。 そういえばTMenubarを使わなくても TToolbar.Menuプロパが存在するね。 これまたAltに対応しないという、バグありまくり。。 なんだかなあ。
>>614 TToolBar.Customizable系は,コード見ると分かるけどWindowsコモンコントロールを
直接呼んでいるからOSのバグじゃないかな?
616 :
Delギコ :01/09/16 16:25
まだ、ソースは見てないんだけど。そなんだ。
>>615 クスコ
普通のアプリ(WWWCとかBecky2)みたいに
カスタマイズダイアログの左項目に
元々のデフォルトButtonを表示させることは出来るのかな?
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
∧ ∧ マターリ
(,,゚Д゚)∫
/ つ旦O
〜(._[ ̄ ̄ ̄.]
 ̄ ̄ ̄
いや、リージョンは必要ない。 そこまで複雑にするつもりは無いし、 スキンつうか、ごく普通のアプリでも使うし。
>>600 だから、TSpeedButtonのソースをパクれって。
標準ではないことをやろうとしているのだから、標準のものだけで解決しようとせず、
似たもののコンポーネントのソースを見て、自分で作ればいいだけではないか。
ボタンを表す矩形が表示されるなら、矩形を描画している部分を実行しなければいい。
ボタンより小さい画像しか使えないなら、ボタンいっぱいに描画するように実装すればいい。
>>619 威張るな。うるさい。
もしかして P か?
621 :
デフォルトの名無しさん :01/09/16 21:54
ビットマップ画像、ビットマップBがあるとして、 画像Aの中から画像Bに完全一致する場所を見つけたいの ですが、もっと速いアルゴリズムは無いものでしょうか。 ここで、Bは、Aよりも小さいことが保証されています。 また、A,Bともに16色ビットマップです。 最初は、B画像の左上をA画像中の(X,Y)に重ね、 TBitmap.ScanLine を使って1ピクセルずつ比較、 これを全てのX,Yについて調査していましたが、 速度が遅く、あまり使い物になりませんでした。 そこで、Delで実装されている機能ならすこしは 早いだろうと、次のようなコードを考案しました。 1.B画像の左上が、A画像中の(X,Y)に重なるようにし、 その状態でXOR合成した画像を作成する。2画像が一致するならば、この段階で重ねた部分の画像全てのピクセルの値はゼロになっているはずだ。 2.重ねた部分の画像を抜き出し、それを左右に2分割する。 3.左半分の画像を、右半分の画像にOR合成する。 4.出来上がった画像を、さらに2分割し1〜2を繰り返す。 5.最終的に、横1ピクセルの画像が出来上がる。このすべての ピクセル値がゼロならば、画像は一致することになる。 これでもまだ速さに不満が残るんですが。
622 :
デフォルトの名無しさん :01/09/16 21:57
>>621 文字列検索に使うBM法を応用してみたら?
623 :
デフォルトの名無しさん :01/09/16 22:00
>Delで実装されている機能 ではなくて,Windows で実装されている機能だな。それは。 BitMap を直接扱っている限り ScanLine より速くはならない。 繰り返し ScanLine を参照するのをやめて,いったん配列に読み出してしまうことを 考えてみたら? あと処理速度を気にするのなら比較コードを書く前にどれくらいの時間がかかっているのかを 調べなさいね。
とりあえずTBitmapはやめて自前の二次元配列にした方がいいよ。 アルゴリズムはmpegエンコーダがそんなことやってたような。 たしか3D NOW!だのSSEを使ってアセンブラレベルで高速化してたな。
>Bは、Aよりも小さいことが保証 ってあるけど,小さなBを,繰り返しAから探し出すんだったら, Aの(部分の)ハッシュ値を作って枝狩りするのが常套手段。 この説明で分からなかったらプログラムの手を止めて適当なアルゴリズム 事典を買いなさい。
626 :
デフォルトの名無しさん :01/09/16 22:14
私はハッシュを実際にプログラムで使用したことが無く、 その考え方しか知らないのですが、 Bと一致する可能性のある全てのA部分について、 ピクセルの並び方からハッシュ値を作成し、 ハッシュ値をキーにして位置を探り出す という事でしょうか。
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>618 自分の本当に求める自分仕様は、自分しか作れません
(O)----(O)U-U) \__________
と思うがどうよ
あれがおいらの自分仕様
あとはDelphian WorldかDSPに似たの無い?
とかとしか言いよう無いッス
>621 2次元配列化するだけで10倍くらい高速化されそうな予感。 640x400x16の全検索程度なら力技で十分いけそう。
やりたい事をもう少し詳しく書きます。 大きい画像 Sourceと、 小さい画像 P[0],P'[0] P[1],P'[1] ... P[n],P'[n] があります。 Source 中で P[0] に一致する部分があれば、その部分を P'[0] に置換する。 .... Source 中で P[n] に一致する部分があれば、その部分を P'[n] に置換する。 P[0] から P[n] についてこの作業を行うわけです。
ありがとう、それではまず2次元配列にしたものを つくってみようとおもいます。
631 :
デフォルトの名無しさん :01/09/16 22:40
最初に縮小した絵を作成してそれでラフチェックしてからってのは どうよ
>631 縮小したりハッシュ値生成したりする必要は無くって 単に最初に8ドットおきに比較してやればいいね
633 :
デフォルトの名無しさん :01/09/16 22:56
なんで?
635 :
デフォルトの名無しさん :01/09/16 23:05
>>634 飛び越してしまう危険があるから、とかかな。
Aは8ドットおきで読むにしても、Bは1ドットづつずらしてAの注目点に重なるピクセルだけ
比較していけばまあ飛び越す危険はないか。でもあんまり速くなさげだがどうよ?
頂点抽出以上の速度向上法はないだろうね あとはMPEGの仕組みの勉強
637 :
デフォルトの名無しさん :01/09/16 23:14
質問です。開始値が 0 だと保証されている配列の長さを得るとき、 High( ArrayVar )+1 と Length( ArrayVar ) どちらが効率良いでしょか。
638 :
デフォルトの名無しさん :01/09/16 23:37
>>621 どのくらいの大きさの画像からどのくらいの大きさの画像をどのくらいの時間で
検出したのか参考に書いてよ
で、どのくらいの時間以内ならOKなのかを書いてくれればサジェスチョンできるかもよ
634>635 一番単純な比較に比べてましってだけで最速には程遠いね。 ただ氏が凝ったコードひねり出してる間に さっさと実装してさっさと処理できる問題だと思うってだけ。 最悪のケースも考慮しなくてよさそうだし。 あるいはバックグラウンドで動かしてればいいし。 技術的な話じゃなくてごめんよ。 >637 High, Lengthはどっちもおんなじ。なので+1,-1のつかないほうが速い。 そこらへんの違いが気になるならCPUウィンドウで確認してみればいいよ。
>637 ArrayVarがコンパイル時にサイズが決まってる配列なら 定数に変換されるので+/-1つくつかないに関係なくおんなじ。
641 :
デフォルトの名無しさん :01/09/16 23:51
現在、以下の使用で 作成しています。 【1】100 X 100程度の画像 Source から、20X20 程度の大きさの 画像 P[i] に完全一致する部分を検索し、 その場所を同サイズの画像 P'[i] で置き換える。 【2】この検索→置換を、P[0] から P[n] の画像について行う。 (n の値は5〜20程度) 【3】P[0] から P[n] まで調べたら、これを1ステップとする。 同ステップ内で、同一の領域が置換対象になる事は無い。 例えば P[0] を見つけ出し P'[0] に置換した場合、Source 中の その領域は、P[1] 〜 P[n] までの画像の置換対象には ならない。つまり、統一のピクセルが複数回置換されることは無い。 【4】1〜3を繰り返し、アニメーションを行う。 この1ステップ(つまりアニメの1コマ)を1/10秒ほどで 行いたいです。 もう少ししたら、暫定版のプログラムEXEを アップするので、そうしたらもっとイメージを つかんでもらえると思います。
あ、画像を変更するときは、かならず■ボタンで アニメーションを停止させてください。 止まってるように見えても、置換されていないだけで アニメーションタイマーは動いていますから。
644 :
デフォルトの名無しさん :01/09/17 00:22
あのー。 どこの誰かが作った実行ファイルを信用しろと? ソースを出しなさい。
>641 なかなか面白いね。が、確かに重いみたい。 これなら高速化は簡単で前回書き換えのなかった部分を 検索しない(=前回書き換えた部分の周辺のみを検索する) ようにすればいいよ。
これが最終目的なら、アプローチに疑問を感じるのって俺だけ? Delギコさんこないとサビシイ
>646 このプログラムのミソはシステムが何も理解していないのに 結果的に工場が稼動し、迷路を抜けちゃうところ。 これってプログラマブルなLIFEだね。 思わず点滅信号機とグライダー作っちゃったよ。 ちなみに>645はLIFEでも使われてる高速化手法だよ。
ちなみに、元ネタは Visulan という、京大の人が 開発したビジュアルプログラム言語です。 検索すれば論文が見つかると思います。
>>649 あ、すみません
修正しておきました。
ちなみに、Del6でコンパイルするとエラーが出ると思います。
型付定数への代入を許可しておいてください。
653 :
Delギコ :01/09/17 01:25
∧ ∧ / ̄
∩(,,゚Д゚) <
>>627 いいこと言うね。
⊂,,^__つつ. \_
スキン化するくらいなら
折れなら必ずリージョンまで入れる。
リージョン入れないBitmapButtonは途中段階だな.
だって、完成したら自分以外の人にもかなり有用そうだもの。
でも、XP的には必要になったときにリファクタすればいいのかな。
∧ ∧ それにしても、画像系の話。
( ゚Д゚) トテーモ高度ちゃう?
〜( uu) 読んでるだけでワクワクシチャーウYO.
アプローチ???
>>652 KDialogs_untInputDlg.DFMもないーよ
>>654 たびたびスマンです…
再び修正しました
なんていうか、人にソースを渡すって予想以上に大変なんですね。 コンパイルに必要なファイルを一覧表示してくれる機能はないものでしょうか。
>656 コンパイルされたdcuみれば大体見当はつくんじゃない。 ソフトのほうは地図とパターンを別画像に分離して欲しいかも。 あと編集はイメージエディタやペイントに任せて、 タイムスタンプが変更されたらリロード・コンパイルして欲しい。 まあ、どうでもいい部分ではあるけど。
>>651 それそれ、そのページを読んで
面白そうだからちょっと作ってみたんです。
透過色とか、キーボード入力なんかも欲しかったので。
これを機会に、ライブラリ.pas から別の ライブラリ.pasを 参照する事を極力避けようかと思います。 あるライブラリを一つ渡そうとすると、 参照している全ての ライブラリ.pas を渡さないといけない…
>>660 KDialogs_untInputDlg.DFMがないんすよー。フォームファイル
pasだけしかない…
印刷したら全部で66ページもある。しかも用紙切れっぽい... まだ全然読んでないんだけどこれって言語と呼べるほどの 汎用性や広がりを持ち得るのかな? みたところたまたま迷路を抜けてたまたまソーティングされて、 たまたまチューリングマシンが動いてるだけのようにも見える(藁
いまライブラリを整理しているので、 ちょっとまってください。 KDialog もその他のものも、 今回のプログラムで使用してないんですね。 ライブラリが参照しているだけで。
666 :
デフォルトの名無しさん :01/09/17 02:46
667 :
デフォルトの名無しさん :01/09/17 02:49
>>663 広がりというか、大元のコンセプトは
グラフィックのプログラムは
グラフィックによって記述しよう
という事じゃないかな。
668 :
デフォルトの名無しさん :01/09/17 04:34
Builderのコンポ、インストールできる?
669 :
デフォルトの名無しさん :01/09/17 06:53
>668 出来ない
670 :
Delギコ :01/09/17 13:09
∧ ∧ / 結城タンのJavaデザパタ本を買った。 (,,゚Д゚) < ・・・・・・ |つ つ \ 3800円もした。 @| | ∪∪ 人月の神話とXP本も買ったら万円dダ…
671 :
デフォルトの名無しさん :01/09/17 14:02
項書換系の応用もの?。っていうか項書換系そのものか。
672 :
◆WjpJ5Iis :01/09/17 15:46
ML に OfficeXP の愚痴,書き込むなよ。 それに返事付けるなよ。 ...早く NEC/NTT 軍団出てこないかな。
> 3800円もした。 この分野では、"も"ってほどじゃないような…。
674 :
デフォルトの名無しさん :01/09/17 16:39
Delphi6 Personalでリソースにアイコンを詰め込みたいのだが どうしたらよいのだろう...
675 :
support ◆WjpJ5Iis :01/09/17 16:45
>>674 Personal にもリソースコンパイラ/イメージエディタがあるじゃないか
icons.res ができているなら適当なソースコードで
{$R icons.res}
*.rc があるなら,プロジェクトファイルに .rc を追加。
まだ何も作っていなければイメージエディタで .res を作ってしまえ。
676 :
デフォルトの名無しさん :01/09/17 16:47
質問です。 Imageでクリッカブルマップを作りたいのですがどうしたらいいでしょうか? たとえば640x480のimage領域のうちimage座標からTOP100、Left100の場所に128x128の クリック範囲を作りたい場合などです。
677 :
デフォルトの名無しさん :01/09/17 17:11
>>675 アイコンを新規で追加ではなく既存ファイルから追加はできないかな?
icon1.ico icon2.ico ...って複数のアイコンがあって
それをまとめて icon.res にしたいのだが...
Delphiにはその手のツールは付属してない?
>>676 空のTImageやTShapeを貼るとか。
>>678 最初はそれを思いついたんですけどCSV(もしくはiniファイル)から座標を持ってくるらしくて、、、
それに画像情報がコロコロと変わるらしいんです。
「画像のクリッカブルポイントをソースを触ることなくテキスト修正だけで触れるようにしろ」って事らしいです。
可能ですかね?
別にImageじゃなくてもPaintBoxでもShapeでもいいんです。
今はPaintBoxでがんばってますが。
680 :
support ◆WjpJ5Iis :01/09/17 17:23
>>677 >その手のツール
イメージエディタ。
細かい操作が必要なら x.rc ってファイル作って
Icon1 icon icon1.ico
Icon2 icon icon2.ico
て書いて、プロジェクトファイルに追加。
681 :
デフォルトの名無しさん :01/09/17 17:33
>>680 ラジャー∠(@O@) ビシッ!
rcからコンパイルすることにいたしまする。
>画像情報がコロコロと変わるらしいんです だったらなぜ TPaintBox.Left TPaintBox.Top TPaintBox.Width TPaintBox.Height に「プログラムで」代入しようとしないんだ?
補足 座標だけでなく個数も変わるなら「プログラムで」Createすればいいだけだが。
684 :
Delギコ :01/09/17 18:02
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜' ― (,,゚Д゚) < KylixMLって配信方法とか変わった? し― し-J \___________ ずーっと。とどかないニャリ?
685 :
support ◆WjpJ5Iis :01/09/17 18:10
>>684 9/6 の #717 / Re: TIdSMTP って
が最後
687 :
デフォルトの名無しさん :01/09/17 18:25
>>670 お、買ったね。どうだい感想は。>Delギコ氏
俺はガンマ本は挫折して、
いろんな本から慣れてったんだが、
この本がもっと早く出ていればなぁと思った。
デザパタはVCLを参考にするのもいいけど
Javaのクラスライブラリも参考にすると良いよ。
>>679 TListかもしくはTRectの動的配列を宣言しておいて、
起動時に設定ファイルから読みこむ。
で、後はマウスイベントで座標を判定して処理する。
とか。
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>679 遊ぶDelphiだかいう本で範囲内をクリックしたか判定するサンプルが
(O)----(O)U-U) \__________
690 :
デフォルトの名無しさん :01/09/17 18:51
>>679 仕様の詳細や判定領域の数がわからんので、
>>688 の方法が正攻法だね。
数少なくて決まっているなら、PaintBoxが手っ取り早い。
なんか、感じからすると動的なオブジェクトの生成もできなさそうなので、
(違ったら失礼(違ってなくても失礼か))
時間があれば、
>>688 の方法をできるようになっておいた方がいいぞ。
コマンドラインのパラメータをみるのにParamstr(1)でやろうかと思ったんですが これだと半角スペースのところで途切れてうまくファイル名を見ることができないです。 一応関連付けの時に"%1"を付ければうまくいくんですが、付けないときでもうまくいくようにしたいです。 なにかいい方法はないんでしょうか? TeraPadでもそうだから無理なのかな。
>>691 そういう仕様なので仕方ないです。文句はMSにいってくり。
あーていうか、それを何とかしたいと言ってるのか。 とりあえずCmdLine変数でパラメータ丸ごととって、 自力で解析するしかあるまい。 空白を発見したら、実在するファイル名かどうか調べるのか? いやでも、「c:\un ko」というのがパラメータがあったとき、 「c:\un」という絶対パス指定ファイルと「ko」という相対パスのファイルが あったときの判定も考えると・・・えらい面倒だな。
694 :
デフォルトの名無しさん :01/09/17 20:25
for i:=1 to ParamCount-1 do begin if S = '' then S := ParamStr(i); if FileExists( S ) then begin FileNames.Add( S ) s:=''; end else S := S + ' ' + ParamStr(i); Inc(i); end;
695 :
デフォルトの名無しさん :01/09/17 20:29
{ファイル名にカンマが含まれていたらアウト。} S := ''; for i:=1 to ParamCount-1 do begin {ドライブが含まれるなら直前までをファイル名とみなす} if ExtractFileDrive( ParamStr(i) ) <> '' then begin if S <> '' then FileNames.Add( S ); end else S := S + ' ' + ParamStr(i); end;
そういうしょうもない小細工してるアプリって いつか誤動作してトラブルになるからやめて欲しいかも
697 :
デフォルトの名無しさん :01/09/17 21:01
私、Javaは嫌い。しかし 一つ うらまやしい 有る。 クラス プロパティ に 定数 していできる 良い。 THoge = class public const Milk:string = 'yukijirusi'; end; みたいに やりたい。
698 :
Delギコ :01/09/17 21:38
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ @' ― (,,゚Д゚) < クラスプロパティに定数。別にうれしくない し― し-J \___________ THoge = class(TObject) private class function ConstValue: String; end; class function THoge.ConstValue: String; const Value: String = 'イッテヨシ'; begin Result := Value; end; やれるとしたら、この程度かしら? 定数なんてWM_とか接頭語をつけて区分すればいいだけでないの?
699 :
デフォルトの名無しさん :01/09/17 21:40
書き換えられないことを保証したいだけなら property にするなり、引数なし関数にすれば? 可視性をクラス内に限定したいのなら出来ないけど、上に書いた方法で 対応できないかな? どちらにしろ言語仕様の重箱つつきにあまり意味はない。
700 :
デフォルトの名無しさん :01/09/17 21:44
>>698 プロパティ版。FConstString も ConstString も同じ可視性を
持つから情報隠蔽としては役に立たないコードだ。
THoge = class(TObject)
private
FConstString : String;
property ConstString read FConstString;
end;
701 :
デフォルトの名無しさん :01/09/17 22:17
>>700 こうでは?
THoge = class(TObject)
private
FConstString: string;
public
constructor Create; //ここでFConstStringを設定
property ConstString read FConstString;
end;
702 :
デフォルトの名無しさん :01/09/17 22:20
>>701 あれ?確かに 697 では public。
698 にひきづられちゃったよ........
703 :
Delギコ :01/09/17 22:37
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ @' ― (,,゚Д゚)つ < それだとインスタンス毎に領域とるでしょ。 し― ∪ \___________
704 :
デフォルトの名無しさん :01/09/17 22:51
>>694 -695
for i:=1 to ParamCount-1 do
↓
for i:=1 to ParamCount do では?
705 :
デフォルトの名無しさん :01/09/18 00:17
>>695 if S <> '' then FileNames.Add( S );
の後で S := ''; も必要だYO
706 :
デフォルトの名無しさん :01/09/18 00:26
>>703 じゃあこうかな?
THoge = class(TObject)
private
function ReadConstString: string;
public
property ConstString: string read ReadConstString;
end;
fonction THoge.ReadConstString: string;
const
Value: string = 'イッテヨシ';
begin
Result := Value;
end;
>>698 とほとんど変わらないっていうツッコミはなしね
707 :
デフォルトの名無しさん :01/09/18 00:34
これでOK! const GIKO = 'GIKO!' ; type THoge = class public property ConstString : string read GIKO; end;
708 :
701=706 :01/09/18 00:45
>>707 プロパティがクラスの外のやつも参照できるなんて知らなかったよ
ただ使う機会は少なそう
C++のstaticなメンバ変数みたいに使えるかのな
ところでじつは
>>579 で質問していたんだけど、
誰も使ってないのかな>TToolBarでメニュー
TCoolBar上において、VC風にしてみたんだけど、
MDI子ウィンドウの最大化時の処理がいまいち…
一応TToolBarをもう一個置いてその上にボタンを配置して、
子ウィンドウの状態が変わったときに出し入れしてるんだけど、
どうもいまいち見た目が本物に似ない…
誰か他にやってる人いませんかね?
>自分自身のクラスインスタンスを保持する方法 とっくに解決済みかも知れませんが、少々気になったので。 type TArxForm1 = class(TForm) private FMyClassList: TList; published property List: TList read FMyClassList; // 読み込み専用 end; implementation constructor TMyClass.Create(AOwner: TComponent); begin inherited; FMyClassList.Add(Self); end; destructor TMyClass.Destroy; begin FMyClassList.Extract(Self); inherited; end; end.
710 :
デフォルトの名無しさん :01/09/18 03:07
>>709 うぁ。ML からきたな?玄ちゃんみたいにならないでね。
んで何番に対するコメントだ?
711 :
デフォルトの名無しさん :01/09/18 03:31
Delphi に Java の Hashset クラスみたいなのはないの?
713 :
デフォルトの名無しさん :01/09/18 05:32
>>712 単純だけど TBucketList (ただし D6)
おおサンキュウ。 googleする前にヘルプを検索すればよかった。 自作のクラスのデータ検索に使うのでこれで十分。
715 :
デフォルトの名無しさん :01/09/18 06:17
BucketFor メソッドを書き換えることで,自分の好きなハッシュ関数が使えるんで
いろいろ調整してみてください
>>714 ただね... 今のコードにはバグがあるから項目の削除はできない。気をつけて。
MLで紹介すんなゴルァ
>717 まったくもって同意。 MLにギコとか書くなよ、ヴァカが。
719 :
Delギコ :01/09/18 08:36
∧ ∧ 〜′ ̄ ̄(メ゚Д゚)つ UU ̄ ̄U ______∧________________ MLで紹介するな。烈しく逝ってよし。 これだからPersonalでプログラミングしはじめた厨房ってやつは・・・
正直MLで紹介したやつはバカとしかいえない。 被害者としての玄ちゃんみたいのが増えてほしくない。
721 :
デフォルトの名無しさん :01/09/18 08:45
>>707 できねーって!!
どちらにせよ、propertyで出来てもインスタンス生成しないと
参照できないとしたらつかえんな。class propertyみたいのがいるのか?
結局、今のDelphiでやるとしたら、class functionしかないか。
MLはレベルも下がってきたが礼儀も下がってきた MLの説明読まないやつばっか こっちの方が言いたいこと言えていいNa
723 :
Delギコ :01/09/18 10:03
∧ ∧
>>720 同意
(;゚Д゚) あれには関わらないのがよさそう。
(| |つ
〜| |
>>722 ∪∪ Subjectと内容の合ってないものや( 【 Delphi 4 について】)
送信日時のズレてるヤツとか
ストレートにOutlookの話を聞いてくるのとか(Outlook Express Set User ???)
カルシウム不足だから即切れしそうだよ。
>>708 MDIがあまり使われないような気が…
>>709 なぜにList…
前に話題になった折れが勝手にクラスフィールドって読んでいる方法でもないと
Listに自分自身を代入する意味があまりないと思うのだが。
2chが紹介されたって、何番の記事? みてみたい。
>>709 すまん。俺の読解力がないのか、
ソースがおかしいのかよくわからん。
何がしたいのか誰か解説してくれ。
727 :
デフォルトの名無しさん :01/09/18 10:58
ML に紹介された割には静かだね。
はじめまして。MLから来ました。 早速ですがDelphi6 Personalでメモ帳とペイント互換ソフトの作り方を教えてください。 初心者なのでなるべく詳しくお願いします。
730 :
Delギコ :01/09/18 11:17
∧∧ プハー / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) =3 < MLノ ヒトタチ ダッテ 2chはチェックしてるさ | つ日~~ \ イマサラ 厨房に紹介されるまでもなし。 〜| ) U U
動的配列の内容を一気にコピーする方法ってある? A, B : array of Integer; - - - - - - - - - - - - - - - - CopyArray( A, B ); みたいな。
>>729 ここで厨房な質問するとMLよりもひどい目にあう。
A := B;
734 :
Delギコ :01/09/18 11:24
>>729 MLからきましたなんてかいて
sageてるのでちがうとおもわれ。
http://vvv.geocities.co.jp/SiliconValley/5634/t82B5_0017.html#76 初心者ですので、簡潔にお願いします。 【発言】
----------------------------------------------------
(1)スゴイ・・・
・某所で見かけた発言。 発言と言うより、サブジェクト。
・いや、それにしてもスゴイなぁ、何と言うか、う〜んスゴイ。
・ここまで有無を言わせず、自己都合を押し付ける勢いを持っているサブジェクトと言うのは、なかなか無いですな。
■この文章から読み取る事ができるのは・・・
・自分がした質問にだけ答えろ!
・お前たちは「それは何故ですか?」などと下らない質問をするな!!
・ましてや「もう少し調べてください」などと偉そうな事を抜かすな!!!
・・・・と、いう事なんでしょうね。
(2)しかし、一つ疑問点が・・・。
・それは、質問内容から察するに、彼の御仁には、どうしようもなく知識も調べる気も無いようなご様子なのに、「簡潔な回答」だけで、事が終わるのかな?という事。
・しかし、「初心者」と言って免罪符を振りかざす連中の中にも、「できる限り詳しく教えろ」と言う人も居るし、色々種類が居るんですねぇ。
・でも、こんな傍若無人なメールにも返答をする奇特な人って居る事と、その懐の深さにビックリ。
procedure TForm1.FormShow(Sender: TObject); begin Caption := 'メモ帳'; end;
だからネタだってばよ
740 :
デフォルトの名無しさん :01/09/18 11:39
「MLから来ました」 ってのは、たぶん、つかみだと思う。(笑) ここで一発笑いを取っといて「メモ帳の作り方教えて」などと言う 逆撫でする言葉を入れといて、最後に「詳しく教えろ!」という とどめを指して読み手を怒りの渦に巻き込んでいると思われ
本筋に戻ろうぜ。
画像検索はどうなったんだ。
>>725 >何がしたいのか誰か解説してくれ。
くらすふぃーるどの定義方法の提示かと思ってたら
今元ネタもう一回見たら・・・
>自分自身のクラスインスタンスを保持する方法
でしたね。思いっきり外してました、失礼しました〜。(^^ゞ
744 :
デフォルトの名無しさん :01/09/18 12:26
>>743 正直者なんだろうけど、メールアドレス欄に実アドレスを入れるのは止めときなさい。
正直、親切すぎるからMLはレヴェル下がってるよな
あとpちゃんがらみで、うっかり自爆して脱出した人多すぎ
>>724 [Delphi:60611] 2ch の Delphi 関係スレッド
BB弾の人
>>743 すまん。ネタかと思ったんだよ。
きみは2ちゃんには向かないかも。
メアドは書いちゃいけないよ。人を信用してはいけないよ。
>pちゃんがらみ pcodeになりすまそうとして失敗したとか? > [Delphi:60611] 2ch の Delphi 関係スレッド 残念、過去ログにはまだ収録されていなかった…
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>729 すごく簡単です
(O)----(O)U-U) \__________
ShellExecute(Handle,'OPEN','notepad.exe',Nil,Nil,SW_SHOW);
ShellExecute(Handle,'OPEN','mspaint.exe',Nil,Nil,SW_SHOW);
互換性高過ぎて失神します
751 :
デフォルトの名無しさん :01/09/18 12:46
はじめまして。失礼いたします。 >あとpちゃんがらみで、うっかり自爆して脱出した人多すぎ とはどのような意味なんでしょうか。 もし、この掲示板のマナーを間違えておりましたらご教授お願いします。 あと、E-mail には何を書けばよいのでしょうか。 よろしくお願いします
>>731 copy関数、後はヘルプ見てくれ。ちなみに性的配列ならMove関数。
753 :
Delギコ :01/09/18 12:57
∧ ∧ / (,,゚Д゚)< クラスフィールド? |つ つ \ @ | ∪ ∪ ひらぽん氏が話題を負ってくれたので紹介してみる。 こういう事がやりたいんじゃないの? 2chのどこかで教えてもらったけど、どこか忘れた。 TMyClass = class(TObject) private FName: String; public constructor Create; destructor Destroy; override; class function ClassList: TObjectList;//クラスメソッド property Name: String read FName write FName; end; { TMyClass } var MyClassList: TObjectList; //Unit内Object class function TMyClass.ClassList: TObjectList; begin Result := MyClassList; //Unit内Objectをクラスメソッドを利用してアクセス end; constructor TMyClass.Create; begin MyClassList.Add(Self); //クラスを生成するたびにListに登録 end; destructor TMyClass.Destroy; begin MyClassList.Extract(Self); //クラスを破棄するときにListから破棄 inherited; end; initialization MyClassList := TObjectList.Create; //Unit内Objectはここで生成 finalization MyClassList.Free; //Unit内Objectの破棄 end.
754 :
Delギコ :01/09/18 12:59
___ ヽ _ /⊂ `∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | \( ゚Д゚)< 使い方。 | / ∪ ∪ \_____________  ̄ ///////////////////////////////////// procedure TForm1.Button1Click(Sender: TObject); begin TMyClass.Create.Name := 'Button1で生成されたMyClass'; end; procedure TForm1.Button2Click(Sender: TObject); begin TMyClass.Create.Name := 'Button2で生成されたMyClass'; end; procedure TForm1.Button3Click(Sender: TObject); begin TMyClass.Create.Name := 'Button3で生成されたMyClass'; end; procedure TForm1.Button4Click(Sender: TObject); begin TMyClass.Create.Name := 'Button4で生成されたMyClass'; end; procedure TForm1.Button5Click(Sender: TObject); var i: Integer; begin Memo1.Lines.Add('インスタンスは'+IntToStr(TMyClass.ClassList.Count)+'個あります'); Memo1.Lines.Add('インスタンスの内容は以下の通り'); for i := 0 to TMyClass.ClassList.Count-1 do begin Memo1.Lines.Add(TMyClass(TMyClass.ClassList.Items[i]).Name); end; end; 実行結果 インスタンスは4個あります インスタンスの内容は以下の通り Button4で生成されたMyClass Button3で生成されたMyClass Button2で生成されたMyClass Button1で生成されたMyClass
755 :
デフォルトの名無しさん :01/09/18 13:29
>>751 そういう質問は初心者版逝ってくれ。
2chはほかの場所と比べるとかなり特殊な
礼儀とローカルール(用語や漢字の読み方にいたるまで)
があるから、すべてを教える気にはならない。
756 :
デフォルトの名無しさん :01/09/18 13:45
Copy だと完全代入になるよね。それはよいんだけど、 次のような場合はコードをがりがり書くしかないのかな A , B : array of Integer ; - - - - - - - - - - - - - - - - - - SetLength ( A , LengthOfA ); SetLength ( B , LengthOfB ); で、 A [ m ] 〜 A [ m+c ] に B [ n ] 〜 B [ n+c ] を代入したい場合。
757 :
デフォルトの名無しさん :01/09/18 13:51
Copyは命令としても使えるって知ってた? Copy(A, m, c ) := Copy(B, n, c); ↑配列 A の m から c 個分を、配列 B の n から c 個分で置換する
>>753 実際に使用する場面が思い浮かばない....
どんなときに使った?
>>751 蒙古ない方がいいと思われ、売買
759 :
Delギコ :01/09/18 14:18
∧ ∧ /
>>758 実際には使用したことはないです。
(,,゚Д゚) < クラス外にインスタンス数保持しておけばいいもんね。
U ,つ゛ \
〜| |
∪∪
でも、よくあるButtonの動的生成する時などに
TMyButtonとTMyButtonListなどを作っておいて
別UnitにしておくとFindComponentなんて必要なくなってちょっとベンリかも。
760 :
Delギコ :01/09/18 14:18
761 :
デフォルトの名無しさん :01/09/18 14:22
>>757 >Copy(A, m, c ) := Copy(B, n, c);
デマ流すの楽しいかい?
762 :
デフォルトの名無しさん :01/09/18 14:27
763 :
Delギコ :01/09/18 14:29
∧ ∧
_(゚Д゚ )__
/| ∪∪ /\
/| ̄ ̄ ̄ ̄|\/
| |/
 ̄ ̄ ̄ ̄
>>761 指摘サンクス。
デマは困る。
>>762 逝ってよしい
CopyはFunctionだから、戻り値に代入出来ないよね。
>>756 その程度はガリガリいこう。
範囲が超えた時の例外処理考えたら頭痛くなりそ。
>>751 空気をつかむのがマナー
意味わからなければMLに戻った方が宵
DelのCPUウィンドウをメニューから開く裏技があったよう な気がするんだけど、知ってる?
>>765 裏技? 普通にメニューにないか?
表示-デバッグ
767 :
Delギコ :01/09/18 15:51
∧ ∧ /
(,,゚Д゚) <
>>760 ネコ ニハ ワカンネーゼ
|⊃ ,⊃ \
@| |
∪∪
猫でもわかるプログラミング
第142章 ツールバーをカスタマイズする
http://www.kumei.ne.jp/c_lang/sdk2/sdk_142.htm …"ネコプロ"評価高いみたいだけど、実際
SDK第二部のこのあたりになると
SampleプログラムもDLできないみたいだし
投げやりで独り善がりな記述ばかりで
非常に読みにくい。
説明だけに終始してるしなあ。
とか逝ったら怒られる??
分かりやすいと思われる方は、
VCLでToolbarCustomizeを実装してみてちょー。
とか逝ってみる。
768 :
Delギコ :01/09/18 16:20
クラスふぃーるどの使う事例 思い出しました。  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧ ∧ マターリ (,, ゚Д゚)∫ / つ旦O 〜(__n n[ ̄ ̄ ̄.]  ̄ ̄ ̄ Form上で動作するComponentで 設計時にProperty ACompoとProperty BCompoで 指定したものに対してAが動くとBも連動して動くというもの。 つくった。名前はMoveCompoとしよう。 MoveCompo1でACompo=Button1BCompo=Label1として Button1を移動させたら、Label1もくっついて移動するものデシ。 そのときに MoveCompo2でACompo=Label1 BCompo=Button1と されると動作的に非常によろしくないので(無限に移動しつづけそうだから) 同じクラスのインスタンス中で指定しているCompoは A/BCompoプロパティで指定できないようにしました。
769 :
Delギコ :01/09/18 17:05
なんか、一人でカキコんでる気がするが… ∧∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (゚Д゚)ノ < シツモーーーーソ (| | \__________ 〜| | ∪∪ 各種ControlにActionを指定すると TAction.Updateイベントが発生するけど あれは何のメッセージを見てUpdateイベントが発生してるの? VCLのソースのどこみたらわかるーとか。教えてCRAY イマまでActionのUpdateイベントで処理していた部分を サブクラス化してみたんだけど何のメッセージをフックすればいいのか わかんないのです
>>767 猫プロのすごいところは継続しているところだからね。
あの量は真似できんわ。
Delギコもwebページ作ってくれないかなあ。
>>770 文章よりもAAの方が多かったり・・・。
772 :
Delギコ :01/09/18 18:15
>>769 自己レフ
∧∧∩゛ /わかった!
(,,゚Д゚)ノ < WM_PAINTダ!
U / \
| |
ノ∪∪
∧ ∧ ・・・・。 タ・・タブン
(,,゚Д゚)
U U アテルカシラ?
〜| |
U U
WM_AA
昨日の質問の続きになります。 --------------------------------------------- procedure TFrom1.FormPaint(Sender: TObject); var Rek : TRect; begin Lef := 500; //Left Tp := 200; //Top Rig := 550; //Right Bot := 250; //Bottom Rek := Rect(Lef,Tp,Rig,Bot); Pen1.Canvas.TextRect (Rek,Lef,Tp,'Ok!'); end; --------------------------------------------- 指定座標に文字や四角を書くのはいいのですが それにクリックイベントを付ける方法が分かりません。
procedure TForm1.FormMouseDown(Sender:TObject; x,y:Integer;Shift:TShift;Button:TMouseButton); begin if InRange( x, BUTTON_LEFT, BUTTON_RIGHT ) and InRange( y, BUTTON_TOP, BUTTON_BOTTOM ) then begin ....... end;
776 :
デフォルトの名無しさん :01/09/18 19:19
UNDO の実現方法て… A.手順を全てスタックに保存しておき、UNDOする場合は 逆の手順を辿っていく。 B.その時点での全てのデータを保存しておき、UNDOする場合は 一つ前のデータを読み出していく。 Aだと機能が一つ増えるごとに、それに対応したUNDO機能が必要になるような。 Bだと簡単だが、ものすごい量のメモリが必要になるような。
777 :
デフォルトの名無しさん :01/09/18 19:22
>>756 まあ、あまり誉められたコーディングスタイルではないんだろうけど、
Move((PChar(ArrayA) + m * SizeOf(Integer))^, (PChar(ArrayB) + n * SizeOf(Integer))^, C * SizeOf(Integer))
という手もあるにはある。範囲チェックは自己責任。
>>723 むう。複数ウィンドウをぼこぼこ表示するようなのだったら
MDIのほうがいいかなと思ったんだが。
ちょいとインターフェースを変えてSDIにするか。
>>776 Bの方法で、変更箇所だけ保存しておけば
それほどメモリは使わないんじゃない?
もっとも、全消しとか使った場合はメモリ量は多くなるが…
779 :
デフォルトの名無しさん :01/09/18 19:42
>A [ m ] 〜 A [ m+c ] に >B [ n ] 〜 B [ n+c ] を代入したい場合。 var p,q:pointer; begin p:=@A+m; q:=@B+n; for i:=1 to c do begin p^:=q^; inc(p); inc(q); end;
780 :
デフォルトの名無しさん :01/09/18 20:44
お勧めのbug tracking systemってありますか? なければDelphiで作っちゃおうかなと思っているんですが。
781 :
デフォルトの名無しさん :01/09/18 20:52
>>776 多くの場合、
A.手順を全てスタックに保存
だね。emacs もそう。
操作Xを作るときに、必ずその逆操作を組にして作る。と決めてしまえば
よし。もし逆操作提供できない(めんどくさいとか、メモリ確保が出来ないとか)
ときは、「その操作は復元できませんぞ」ってダイアログを出すようにする。
782 :
デフォルトの名無しさん :01/09/18 21:05
MLで紹介とか好意的に見えるが、これは事件の臭いがする! 吉田が2chで叩かれた。 ↓ 吉田、2chを潰したい。 ↓ 2chのアクセス数増大問題発生。 ↓ もっと客を増やして、潰してやれ! ↓ MLで紹介。 ↓ 人が殺到。2ch閉鎖! ↓ 吉田(゚д゚)ウマー
783 :
デフォルトの名無しさん :01/09/18 21:13
>781 文字を処理対象にしたツールの場合は良いけど、 画像処理系の場合は不可逆処理の オンパレードだからね…
>>774 失礼とは思いますが・・・
メッチャワラタ
昔描き順を全部記憶しておいて nをundoしたら画面クリアして0..n-1を再描画って ペイントソフトがあったな。
786 :
もっとうまく書けないかな? :01/09/18 21:37
// ↓これの標準ライブラリがあるといいんだけど... function pchar2str(p: pchar): string; begin if assigned(p) then result := p else result := ''; end; procedure output(p: pchar); begin // pはnilかも知れない memo1.lines.add(format('%s', [pchar2str(p)])); end;
787 :
デフォルトの名無しさん :01/09/18 22:17
>>785 それ面白そう。手順をファイルに保存できるようにすれば、
CGそのものを保存するよりも
ファイルサイズが小さくなったりするかも。
適度にウェイトかけて再生できれば
書き順を知れておもろいかも。
788 :
デフォルトの名無しさん :01/09/18 22:24
>>787 Illustratorで代表されるベクタ系ドロウツールはみんな"手順記録系"と
いえるし、Flashもこの範疇だな。
790 :
デフォルトの名無しさん :01/09/19 01:01
>>789 これおもしれええええええええええええ!
いやあ、いいもん紹介してもろたー
しかし一ヶ月の投稿数が900って…
ギャラリー一覧見るだけでも疲れるな、こりゃ。
--下手人-∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<
>>786 ネタ?
(O)----(O)U-U) \__________
var
pc:pchar;
str:string;
begin
pc := 'test';
str := string(pc);
edit1.Text := str;
end;
誰かおいらに休みを下さい
792 :
デフォルトの名無しさん :01/09/19 02:33
なんつーか、あれだな。 Inside DelphiX の著者は19歳なんだな。
なんですと!>792 あっちは発育が良いから・・
>>789 4700円 のシェアウェアか。
うーむ。
795 :
デフォルトの名無しさん :01/09/19 02:59
>>793 >>あっちは発育が良いから・・
もしかして私の誤解かも知れないけど・・
「Inside DelphiX 」って日本人が書いているんですけど..
たった一通のメールのせいで 今日はクソレスばっかりだったな。もうねよ
797 :
デフォルトの名無しさん :01/09/19 03:20
>>789 ほー。OpenCanvas は Delphi 製ですか。1999年というと D4 くらいかな?
798 :
デフォルトの名無しさん :01/09/19 03:23
>>796 まぁまぁ。どうなることかと思ったけど,MLでは無視された用だし
こちらも荒れ模様というほどでは無かったから良いんじゃない?
>>795 じゃあこっちも発育が良くなったのか!
いい時代じゃの〜
たいしたレスしない奴に限って...
>797 まじで!? VCLScanner で調べてみよう
802 :
デフォルトの名無しさん :01/09/19 09:30
本当だ… Delphi でこんなにスムースな画像処理プログラムがつくれるのか… ついでに JGrep もDelphiだったんだね…
803 :
Delギコ :01/09/19 09:47
∧ ∧ / (,,゚Д゚)< OpenCanvasすごすぎ! |つ つ \ @ | ∪ ∪ フリーの画像ツール調べていてoC1.1を見てた事があったが こんなすごいシェアウェアになっていたのねん。 会社みたーいだけど、すごい技術力ありそう。 ネット時代に即したサイト運営も○ダ〜ニャ
webだけ見てる限り、何者が開発・運営してるのかサパーリわからん。 匿名なのか? > OpenCanvas downloadしないと分からないようにでもしてるのか? ってさすがにDelphiと関係ない話になるな。
>OpenCanvas BCBの可能性は無いの?
>>802 Delphiでもスピード的に問題なくできるよーん。
ただTCanvas使ってたんじゃだめだけどね。
TCanvasなんとかしてほしいね。
しかし書き方が学べるって、OpenCanvasいいねぇ。
807 :
Delギコ :01/09/19 10:10
∧ ∧ ここにいるDelphianは
(;゚Д゚) すでに、BCBとDelphiの差異なんてマターク
(| |つ 気にしていないのだ。
>>805 〜| |
∪∪
ホボ オナジコト デキルノ シッテルカラ
>>807 描画の処理だけCでガシガシにかいてたりもありかなぁ
と思ったもんで
809 :
デフォルトの名無しさん :01/09/19 10:52
【Q】ライブラリパスには複数のパスを指定できますが、 仮に複数のディレクトリ内に Hoge.pas が有る場合、 uses Hoge; と指定したらどこにある Hoge.pas が参照されるのでしょうか。 C:\Piyo\Hoge.pas と C:\Giko\Hoge.pas では ライブラリパスに C:\Piyo; C:\Giko とあった場合、最初にある Piyo の方が優先されますか。 正直日本語おかしいけど 日本語を母国語とする皆さんなら理解していただけますねOK。
>809 その通り。ファイルパスを明示したい場合はinを使う。
811 :
デフォルトの名無しさん :01/09/19 11:02
>>810 in 指定はプロジェクトファイル(.dpr)でしか効き目がないため
個々のユニットが参照するユニットとは食い違う可能性があり
混ざるとめんどくさくなるぞ。
自分のライブラリがたまってくると 似たようなライブラリの名前つけるのとか管理がめんどくさい。 Javaみたいにしてほしいなぁ。 もうかなり独自拡張してるんだから良いでしょ。 >Borland
OpenCanvasはもともとdemo系のプログラマさんが作ったものだから、 技術もそうだが、処理速度なんかもはやくて納得。 ある意味、Pascal使ってるのも納得。
814 :
デフォルトの名無しさん :01/09/19 12:52
ソースコードにフォルダパスが入るのダサいYO
>>812 ライブラリのフォルダ階層変えるとコンパイル通らないじゃん。
COBOLのソースにコンパイルマシン名を書くのもダサいね。
>>814 >ライブラリのフォルダ階層変えるとコンパイル通らないじゃん。
in使うのも一緒のような気が。。。
なんかもっといい方法あるかなぁ。
>>in使うのも一緒のような気が。。。 全然違う。ライブラリのフォルダを指定しとけば、 inの中ではフォルダパス要らないんだYO!(だって、標準dcuがそうでしょ)
もしかして、ライブラリを全部プロジェクトに入れてたりしないよNE?
>>812
818 :
デフォルトの名無しさん :01/09/19 14:55
カンマ区切りのテキストファイルを別々の変数に読み込むにはどうしたらいいでしょうか? ど素人な質問ですいません。 ex. [test.csv] aaa,1,2,5 ↑ これを別の変数に
819 :
Delギコ :01/09/19 15:04
∧ ∧ /
>>818 (,,゚Д゚) < TStringList.CommaTextに大入
|つ つ \ TStringListはオブジェクトだから気をつけて。
〜 |
∪ ∪
820 :
Delギコ :01/09/19 15:06
∧ ∧ / (,,゚Д゚) < またもや、しつもーん。 |つ つ \ 〜| | ∪∪ コントロール(具体的にはStringGridなんだけど) のzオーダーに他のコントロール(例えばScrollbar)を あわせたい時はどうしたらいいのでせう? つまり、Gridのひとつ上にBarをもってきたいの。 他のControlのZ位置関係はずらしたくないの。
>>814 >inの中ではフォルダパス要らないんだYO!(だって、標準dcuがそうでしょ)
今確認できないんだが、標準のライブラリってinいるんだっけ?
いままでは個人のライブラリフォルダを作って
環境設定のライブラリパスを設定していたんだが、
似た内容のライブラリとかがいっぱいできてきたり
他人のライブラリで名前かぶったり
そろそろ何とかしようかなと思ってるんだけど。
ライブラリの管理ってどうしてる?
822 :
デフォルトの名無しさん :01/09/19 15:37
>>820 Scrollbar(子)のparentプロパティにGridを入れれば良いんじゃないの。
そういう意味ではない?
823 :
Delギコ :01/09/19 15:48
||
| |
∧| |
Σ (゚Д| |
/つ| |
〜 ||
(/ ||
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ハッ……ワスレテタ
>>822 そうかも。タメシテミマス
MLでD6→D5のdfm変換が公開されたようですね。
イマはレジストリ変更で対応してるけど。
[HKEY_CURRENT_USER\Software\Borland\Delphi\6.0\FileFormat]
"DFMFormat"=dword:00000000
824 :
Delギコ :01/09/19 16:02
| | ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |Д゚) <
>>822 パレントだめでした。
| ⊂| \________
| | |
| |U
 ̄ ̄ ̄ ̄ ̄
Editに対するUpDownみたいな事がやりたいの。
Parentにするとどうも妙な動作する。
Zオダ〜ってTComponent or TControl プロパ順に並んでるのかな?
┬┴┬┴┤ ∧ ! "ライ" ノ ツカナイ "ブラ" ガスキ
┴┬┴┬┤゚Д゚)
┬┴┬┴┤ .U
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ライブラリの管理は、パッケージを活用するとかなりイイカンジ。
ソレデモ、ヤパーリ、ユニット名やクラス名は別々にしないとダメな気する。
Javaに比してDelの名前空間(っていう?)はちょっぴりイヤ。
825 :
デフォルトの名無しさん :01/09/19 16:11
あれっ、できなかった?ごめん。。。 Delphian WorldのMOStringGridとか参考にしてみれば? パッケージかぁ。やったことないんだよね。 結構頻繁にリファクタするし。。。
826 :
デフォルトの名無しさん :01/09/19 16:31
>>825 リファクタすれば?
必要に応じてパッケージのリビルドもやってくれるよ。
827 :
デフォルトの名無しさん :01/09/19 17:01
>リファクタすれば? >必要に応じてパッケージのリビルドもやってくれるよ。 おおっ、ちょっと光明が見えたかも。 ガイドを読んでみると、ソースとか指定してまとめられてよさそう。( ´∀`) でもこれって名前解決できるの?
LoadFromFile(FileName);temp.CommaTextにファイルから読み込んでも互換性が無いと いわれちゃいます。
829 :
Delギコ :01/09/19 17:17
∩ ∩ | ∪ | | 〜 | ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | i ,,゚Д゚) < たぶん、こうする U U \________ temp.LoadFromFile(ファイル名); temp.CommaText := temp.Text; temp[0〜temp.Count-1]までにComma区切りの内容が入る
830 :
デフォルトの名無しさん :01/09/19 19:46
ScrollBarがGridのスクロールに憑いて来ちゃうね パネルの子にGridとScrollBar持たせれば?
String(nil)=''になることは保証されてる? リファレンスには見当たらないんだけど
832 :
デフォルトの名無しさん :01/09/19 21:35
>>831 されている。
長さ0の長い文字列は、メモリアロケートされない。
RTL ソース読みなさい。
833 :
デフォルトの名無しさん :01/09/19 21:51
dpr から、コンパイルに必要な全てのファイルを調べるには 1.Delphiのライブラリパスをセミコロン区切りの文字列として TStringList にぶち込む 2.dpr の uses 節を調べる 3.ライブラリパスの最初に有るものから順番に、uses されたファイルを検索する 4.ファイルが見つかったら一覧に登録し、そのファイルの uses 節を調べて検索する(再帰処理)。ただし、既に一覧にある場合は無視する。 この方法でぬかりないですか?
>832 いや、実装ではなくって仕様の話なんだけど
835 :
デフォルトの名無しさん :01/09/19 22:02
>>833 リンカにマップファイルを生成させて、それを読むのが一番確実。
836 :
デフォルトの名無しさん :01/09/19 22:09
>>834 すまん。質問を誤読していた。
String(nil) は、nil が長さ0の文字列だから、
「Pascal 文字列とヌルでおわる文字列の混在」に書かれているように
'' と等しい文字列に変換される。
837 :
デフォルトの名無しさん :01/09/19 22:15
処理時間が非常に長い関数で、途中経過を報告したい場合は 一般的にどういう実装をするのでしょうか。 私は以下のようにやってました。 procedure OmoiSyori( Status : TStatusBar = nil ); begin ..... if Status is TStatusBar then Status.SimpleText := '現在〜の処理中です'; ..... end; でも、これだとステータスバーにしか対応できないし、 もっと一般的にしたいんですけど…
>837 プログレスバー+ラベルを貼ったフォームをShow(Modal)する
839 :
デフォルトの名無しさん :01/09/19 22:31
一般的というならこれでどうよ。 type TOnReport = procedure ( report:string ); procedure OmoiSyori( Proc:TOnReport=nil ); begin ... if Assigned(Proc) then Proc( '〜を処理中' ); ... end;
これなら、Captionに表示だろうがStatusBarだろうが プログレスバーだろうがフォームだろうが、 OnReport関数を描くだけで何にでも対応できる。
841 :
デフォルトの名無しさん :01/09/19 22:32
>> 837 .RePaint
>>839 この方法でやったのですが、互換性が無いというエラーがでます。
TForm1 = class( ... )
...
procedure Report(s:string);
...
end;
.....
procedure TForm1.Button1Click( ... );begin
NagaiSyori( Report ); ←ここでエラー
end;
procedure TForm1.Report(s:string); begin StatusBar1.SimpleText:=s; end;
>>841 すみません、Repaint をどういう風に使えばいいのでしょうか?関数内からフォームを呼び出してラベルなりキャプションを
変更し、フォーム.Repaint して画面を更新という事ですか。
でも、それだとそのフォーム専属の関数になってしまい、
結局メソッドにしたほうが良いという事になってしまいますよね…
あ、 type TOnReport = procedure ( report:string ) of object; とやったら何故かうまくいきました。解決です。
846 :
デフォルトの名無しさん :01/09/20 05:13
>>837 質問の答になってませんが
一般の関数や手続きじゃなくて
クラスのメソッドならイベントにしてしまうのですが.
THeavyJobProgressEvent = procedure (Sender: TObject; const Msg: string);
THeavyJob = class
protected
procedure Progress(procedure const Msg: string); virtual;
public
constructor Create;
destructor Destroy; override;
function Execute; virtual;
property Settei1: string read FSettei1 write SetSettei1;
property Settei2: integer read FSettei2 write SetSettei2;
property OnProgress: THeavyJobProgressEvent read FOnProgress write FOnProgress;
end;
(中略)
procedure THeavyJob.Progress(procedure const Msg: string);
begin
if Assigned(FOnProgress) then
end;
(後略)
public
constructor Create;
destructor Destroy; override;
function Execute; virtual;
property Settei1: string read FSettei1 write SetSettei1;
property Settei2: integer read FSettei2 write SetSettei2;
property OnProgress: THeavyJobProgressEvent read FOnProgress write FOnProgress;
end;
847 :
ななしヘタぐらま :01/09/20 05:15
う,間違えて書き込んでしまいましたごめんなさい.
>>837 質問の答になってませんが
一般の関数や手続きじゃなくて
クラスのメソッドならイベントにしてしまうのですが.
THeavyJobProgressEvent = procedure (Sender: TObject; const Msg: string);
THeavyJob = class
protected
procedure Progress(procedure const Msg: string); virtual;
public
constructor Create;
destructor Destroy; override;
function Execute; virtual;
property Settei1: string read FSettei1 write SetSettei1;
property Settei2: integer read FSettei2 write SetSettei2;
property OnProgress: THeavyJobProgressEvent read FOnProgress write FOnProgress;
end;
(中略)
procedure THeavyJob.Progress(procedure const Msg: string);
begin
if Assigned(FOnProgress) then
FOnProgress(self, Msg);
end;
procedure THeavyJob.Execute;
begin
// 処理のループの中でProgressメソッドを呼び出す
end;
(後略)
848 :
Delギコ :01/09/20 10:37
∧ ∧ /procedure of Objectはメソッド (,,゚Д゚) < U ,つ \ @| | ∪∪ モウ ワカッテルト オモウケド
849 :
名無しさん :01/09/20 11:07
quadrupleおとして、インストールしたんですが、 ウイルススキャンでここのファイルがいつもひっかかる。 これは誤認ですか?
850 :
Delギコ :01/09/20 11:15
∧ ∧ ・・・・。 (,,゚Д゚) U U サブクラス化してると 〜| | 激しくDelphiが死亡するノ…ツラーイニャ U U ACompoをBCompoでサブクラス化するとき ACompoに対してBCompo1/BCompo2/BCompo3... でサブクラス化しちゃだめっぽいね 多重にサブクラス化したことある人いる??
851 :
デフォルトの名無しさん :01/09/20 11:24
Delギコまともな文章書け。
852 :
デフォルトの名無しさん :01/09/20 11:42
>>850 親が存在するコンポは親が解放されるとともに自分自身も
解放されるからじゃない?
どのようにサブクラスしたいの?
853 :
デフォルトの名無しさん :01/09/20 11:45
てゆうかあ、サブクラスが使えないDelギコもう駄目だろ。消えろ。
854 :
デフォルトの名無しさん :01/09/20 12:01
わかるなら教えてやれよ 偉そうなくせに使えない奴だなぁ
855 :
デフォルトの名無しさん :01/09/20 12:03
教えてやりたいが、何でサブクラスで 「激しくDelphiが死亡するノ…ツラーイニャ 」になるんだ。有り得ないYO!
856 :
Delギコ :01/09/20 12:14
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < 日本語くちゃくちゃになってしまったの ヽ/つ且~~ \ゆるしたもれ。 (__ _) 標準コンポTStrGridに対してTMyGridBarを作成しました。 んで、このTMyGridBarはGridプロパでGridを一つ選択できます。 選択したとたんにGridをサブクラス化して とあるGridに流れるMessageを見てTMyGridBarにお知らせしまする。 で、このTMyGridBarを複数作ってからプロパティで ひとつのStringGridを指定しました。 StringGridは何回も何回もサブクラス化されまする。 それはうまくいくのですが
857 :
Delギコ :01/09/20 12:15
∧ ∧ コマットルデ (,,゚Д゚)∫ / つ旦O 〜(._[ ̄ ̄ ̄.]  ̄ ̄ ̄ ___/\_____ その状態から MyGridBar1.Gridプロパにnilを代入したときに (もしくはStringGrid2を代入してもいいよ) 元のStringGrid1のWndProcを正しく戻してやらなきゃいけないのだけど。 それが出来ないの。 通常。サブクラス化では一度StringGridのWndProcをバッファに入れるじゃない。 FOldWndProc := StrGrid.WndProc; StrGrid.WndProc := NewGridWndProc;//New...はメソッド で、元に戻すときは StrGrid.WndProc := FOldWndProc FOldWndProc := nil; だよねえ。このStrGrid.WndProcが他の所でサブクラス化されているから 勝手にもとのものを代入していいのかわるいのか… というか、Delがフリーズしたりアクセスバイオるからダメなんだろう… うーん、むずかしけりよ。 なんか、複雑に考えすぎているのかな。
858 :
Delギコ :01/09/20 12:16
∧∧ * />サブクラスが使えないDelギコもう駄目だろ。消えろ。 (,,゚Д゚) / < 単純なサブクラス化くらいできるわ、 | つ●) \ 〜| | U U サンプルヲ アゲル ジュンビ シテミル
859 :
デフォルトの名無しさん :01/09/20 12:25
procedure of object がメソッドだという事は、 TFunc:procedure of object; と書いた場合、TFunc と、普通の手続き(クラスに依存しない手続き)は代入互換性が無いって事?
860 :
デフォルトの名無しさん :01/09/20 12:26
!! procedure of object って、 「オブジェクトの手続き」って事か!!! なんでいままで気が付かなかったんだろう…
>857 単純なリンクリストだから A->B->C となってBを消去する時は A->C とつないでやらなければならないだけでは?
862 :
Delギコ :01/09/20 12:45
>>861 ∧ ∧ ・・・・。
( ゚Д゚) ソデス
|∪ |
〜| |
U U デモ デキニャイ
ドキュソ デスカ?
この場合、 StrGrid.WndProc が 自分(NewGridWndProc)を指していなければ 安全には取り外せない。 安全に取り外すには、 StrGrid.WndProcが指しているメソッドに 取り外せというメッセージを送りつけて、取り外されたら元に戻した後 再度 取り外す前の StrGrid.WndProc に取り付けろとメッセージを送るとか あるいは安全に取り外せないと判ったら取り外さないのも方法かもね
864 :
デフォルトの名無しさん :01/09/20 12:50
CマガのDelphi 6J Enterpriseトライアル版を試しているんだが、 データベースプログラミングをわかりやすく解説してあるHPを教えろ。
865 :
デフォルトの名無しさん :01/09/20 12:52
ActionListをつかって、イベントを MenuItem と SpeedButton に割り振っています。 が、しかし! Action にキャプションを指定すると、当然そこで指定した キャプションが MenuItem と SpeedButton の両方に 表示されることになりますが、SpeedButton には Glyph だけで キャプション文字列は表示したくないんです。 現在、Action にはキャプションを指定せず、MenuItemに手動で キャプション指定していますが、スマートに解決する方法はありませんか。
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ @' ― (,,゚Д゚)つ < WinProc系の話難しくてついて逝けない… し― ∪ \___________
>>865 ToolBar.ShowCaption
この場合、TMyGridBarしかサブクラスをしないのなら
WindProcは ob object だよね?
StrGrid.WndProc が 自分(NewGridWndProc)を示していなければ
示しているポインタから
関数ポインタとオブジェクトに分解して、
そいつのOldWndProcを書き換えてしまうのが素早い方法だろう
ただ、グループで開発しるような場合は、
>>863 の方法をお勧めする
869 :
デフォルトの名無しさん :01/09/20 13:03
870 :
Delギコ :01/09/20 13:03
871 :
Delギコ :01/09/20 13:06
∧ ∧ / ̄
>>869 ∩(,,゚Д゚) < SpeedButton.Caption := '';
⊂,,^__つつ. \_ Actionを設定したあとにな。
872 :
デフォルトの名無しさん :01/09/20 13:11
>>870 メソッドをTMethod型にキャストすることでそのメソッドのインスタンスと
関数アドレスが分かります。この二つを比較することで同一性が判断できます。
if (TMethod(method1).Code=TMethod(method2).Code) and // 関数アドレス比較
(TMethod(method1).Data=TMethod(method2).Data) then // インスタンス比較
begin
// method1 と method2 は一致した!
end;
Win98で、タスクバーのアイコン(最小化されている奴)が点滅する場合がありますが、この点滅の発動条件はいったい何ですか?
874 :
デフォルトの名無しさん :01/09/20 13:27
875 :
Delギコ :01/09/20 13:28
∧ ∧∩ しょええええ。
(゚Д゚,,)ノ
>>872 出来たよ出来たよ
| つ
| ⊂)〜 すごーいよ。
∪ メソッドはイチド of Objectに代入しなきゃいけないみたいだけど。
∧ ∧ スバラシイ!
(,,゚Д゚) カンシャノ キモチ ウケトッテ!!!!
|つIO
〜 |
∪ ∪
876 :
デフォルトの名無しさん :01/09/20 13:41
この場合は、特別なメッセージを用意しておいて その送り主が自分かどうかという方法もあるよ。 というか、そういうメッセージを定義しておくべきだったんじゃないか? >MS サブクラス解放時にサブクラスのリンクを WM_DetachProc,DetachStart,this でthis=selfでなければ解放 WM_DetachProc,DetachEnd,this 再度接続 するメッセージ
878 :
デフォルトの名無しさん :01/09/20 13:49
879 :
Delギコ :01/09/20 13:57
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(゚Д゚,,) <
>>863 あんたはすごい
⊂ ⊂| \___________
| |〜
∪ ∪
Delギコ、自分がペーペーだと知る2001年セプテムバー
880 :
Delギコ高速回答 :01/09/20 13:58
____∧ ∧_ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
___( ゚Д゚)< このスレはーーー
__ / ⊃ つ \______________
_〜′ /
_ ∪ ∪
>>873 あれは窓がActiveになりたがっているんじゃない?
OSの設定でレジを弄るとActiveになりたがるやつは
点滅せずにActiveになるとオモワレ
∧ ∧ ──────
(゚Д゚ ) < チャットかよーーー
⊂⊂ \──────
\ 〜 ────
し し ─────
>>878 StringReplace使う
while (1<=AnsiPos('--', S))
S := StringReplace(S, '--', '-', [rfReplaceAll]);
んな漢字
881 :
Delギコ :01/09/20 14:02
∧⊂ヽ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚)ノ <
>>878 | ⊃| | あら?ちがった?
| | \_____________
⊂ノ〜
∪ 正規表現はイマイチわからん
他のネコにおまかせ
882 :
デフォルトの名無しさん :01/09/20 14:20
∧ ∧ >880 ありがとう (,,゚Д゚) とりあえずこれでやってみます |つ(1)O でも他のやりかたあったら教えてください 〜 | >正規表現わかる人 ∪ ∪
883 :
デフォルトの名無しさん :01/09/20 14:25
う〜ん、ここ見てると勉強になるぅ
>>878 正規表現って
s/(\-\-|==)+/$1/g;
でなんで「--------==========」が「---===」になるの?
鬱死
885 :
デフォルトの名無しさん :01/09/20 14:38
//連続したスペースを、1つのスペースに圧縮する function CompressSpace( s:string ):string; const Space = ' '; begin while AnsiPos( Space, s ) >= 1 do s := ReplaceStr( s, Space+Space, Space ); result := s; end;
886 :
Delギコ :01/09/20 14:42
∧ ∧ / ( ゚Д゚)< 1ッ点か… |つ つ \ 〜| | ∪ ∪ 改めてSubClass化に思いをはせたのですが 多重のサブクラス化って 同じクラス内で防止しても限定的にOKなだけで アリアラな所でサブクラス化されているかどうかをチェックしだすと 安全にサブクラス化を解除する方法って無理なのでは?? とりあえず すべてのコンポーネントにOnMessageイベントが欲しい! なんていってみる。 TUpDownコンポはうまくやっているみたいだけど、 あれって、Editをサブクラス化してますの??
887 :
デフォルトの名無しさん :01/09/20 14:42
1.$1 は 括弧で囲まれた部分を表す。 2.\- はハイフンそのものを表すエスケープ文字である 3.+ は連続を示す。 4.| で区切られたものは、左右どちらかに一致する事を示す。 これらの事から、正規表現 s/(\-\-|==)+/$1/g; の $1 は文字列 -- もしくは文字列 == を表し、 -- の連続したもの、又は == の連続したものに一致する部分が、 -- 又は == で置き換えられることになる。
888 :
デフォルトの名無しさん :01/09/20 14:45
従って、 while AnsiPos( '----', S) > 0 do S := ReplaceStr(S, '----', '--' ); while AnsiPos( '====', S) > 0 do S := ReplaceStr(S, '====', '=='); が正しい。
889 :
デフォルトの名無しさん :01/09/20 15:04
>>856 -857
設計をこう変更した方が簡単じゃないの?
TStrGridに最初に張り付いたTMyGridBarがオーナーになって
他に張り付いたTMyGridBarの一覧を保持しておく
2番目以後に張り付いた TMyGridBarはサブクラスはせず
最初にオーナーになったTMyGridBarがWinProcメッセージを
分配する。
TMyGridBar.gridが設定される時は Gridに対してUSERメッセージを送る。
既にサブクラスされていればUSERメッセージでオーナのTMyGridBarが帰って来る
から、そのオーナにコネクトするようにすればいい
オーナーが取り外される場合は自分の持っているリストの
先頭にオーナーを譲る
890 :
Delギコ :01/09/20 15:19
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < それも一応考えました。 U ,つ゛ \____________ 〜| | ∪∪ > 既にサブクラスされていればUSERメッセージでオーナのTMyGridBarが帰って来る > から、そのオーナにコネクトするようにすればいい この辺がちょっとわからないですが > 最初にオーナーになったTMyGridBarがWinProcメッセージを > 分配する。 このオーバーヘッドがチョット大きいかと思ったもので,,, 悩み中だったのです。 TMyGridBarを沢山作ったらそれだけ サブクラスのWndProcの中で全てのものをチェックしなきゃいけないし StringGridも複数だと 各々TMyGridBarを付けると 単純に1つのインスタンスだけがサブクラス化する というわけにも逝かなくなるし… いろいろ難しいです。 とりあえず、サブクラス化解除できない時は EComponentErrorを発生させることにしました。
Delギコさんって暇人?
>887 あ、先に解説されてた。サンクスです。 ちなみに「s」は置換コマンドで、お尻の「g」は繰り返しを意味します。 >Delギコさんって暇人? オレもそう思った(藁
893 :
Delギコ :01/09/20 15:41
/ ̄ ̄ ̄ ̄ ̄ ̄ | 暇人? | r―――――――――― ∨ ̄ ̄ ̄ ̄ ̄∧_∧ |ヒッキーなの? ∧_∧ (´∀` ) < ( ´∀`) ( ∧∧ |_________ ( つ/ ̄ ̄ ̄ ̄(´∀` ) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ∧ ∧ /(⊂ )o < 2ch中毒だよ /_( ;)__/ / \________ || ̄/ | ̄ ̄||/ ┌─────── ||, (___/ || < ほっとケ └─────── ∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < ちょっと休むか… @/つ且~~ \___________ (__ _)
894 :
デフォルトの名無しさん :01/09/20 18:14
>>890 TOwnerGridBar をつくる。サブクラス化するのは
こいつだけ。TMyGridBar のインスタンスは、こいつ
のメソッドでいくらでも作成する。こいつは、その
リストを保持してメッセージを分配する。TMyGridBar
は、自分が破棄されるときは、こいつに通知してリスト
からはずしてもらう。
>>887 >>892 ぃゃマジレスくれるとは思わんかったサンクス
ところで「--------==========」は「--==」じゃないの?
「--」x複数=>「--」
「==」x複数=>「==」
なんじゃないの?サッパリ
896 :
Delギコ :01/09/20 18:46
∩ ∩ | ∪ | . | 〜 __| ∧ ∧ ┌┐ | \,,゚Д゚)、 │| ̄)〓( ,, ̄ ̄ ̄) └. ̄  ̄ ̄ ̄ ̄ 3時間で充電完了
897 :
Delギコ :01/09/20 18:47
( ) ( ) ( ) ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (゚Д゚,,)< SubClass化コンポすべてに対応するのは無理なのかな。 | ̄ ̄ ̄| \_______ |二二二| |___| 从从从从 以下のようなTCompo継承コンポを用意してみた。 constructor TFormFucker.Create(AOwner: TComponent); begin inherited; if (AOwner is TCustomForm) then begin FOldFormProc := TCustomForm(AOwner).WindowProc; TCustomForm(AOwner).WindowProc := FormWndProc; end else begin FOldFormProc := nil; end; end; ( ) ( ) ( ) ( ) ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (゚Д゚;)_ < 思いもしない罠アリコード |U ̄U | \_______ |二二二| |___| 从从从从 destructor TFormFucker.Destroy; begin if Assigned(FOldFormProc) and (Self.Owner is TCustomForm) then begin TCustomForm(AOwner).WindowProc := FOldFormProc; FOldFormProc := nil; end; inherited; end; procedure TFormFucker.FormWndProc(var Message: TMessage); begin FOldFormProc(Message); end;
898 :
Delギコ :01/09/20 18:48
( ) ( ) ( ) ( ) ( ) ∧ ∧( ) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (;゚Д゚) < 動作結果ぁああ / づ \_______ | ̄ ̄ ̄| |二二二| |___| 从从从从 FormFucker1を配置、FormFucker2を配置 FormFucker2を削除、FormFucker1を削除>>ダイジョウブ FormFucker1を配置、FormFucker2を配置 FormFucker1を削除、FormFucker2を削除>>IDE コワレテヨシ ( ) ( ) ( ) ( ) ____バシャァ | | │ |∧ ∧ ・・・・・ 从从 | | │ |(*゚Д゚) SubClass化ってけっこう危険? 从从从从 | | │ | _つつ  ̄ ̄ ̄ ̄~~~~~~~~~~~~~~ TFormFuckerクラスだけがFormをSubClass化するだけなら 対応策はあるけれども似たようなFormSubClass化コンポーネントの TAFormFucker/TBFormFuckerを作られると どうしようもなくないですか?? それとも対策ありますか?
899 :
Delギコ :01/09/20 18:53
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ゚Д゚)< 次スレの準備完了済み ノつ つ \__________ 〜/ ノ し' ∪ アンシンシテ900Getセヨ
ん
901 :
デフォルトの名無しさん :01/09/20 19:11
たまに初心者向けの話題も出るので、わけわからんながらも見てます。 Delギコさんがんばれー (充電完了が気に入ったYO!)
902 :
デフォルトの名無しさん :01/09/20 19:28
Delギコ→中級 相談室→初級 Delphi/Kylix Tech→中・上級 という住み分けでいいのかしらん?
903 :
デフォルトの名無しさん :01/09/20 20:59
OnMessage WindowProc SetWindowsHookEx などメッセージを操作する方法がいろいろあって どのときにどれを使ったらいいのかよくわからん 優先順位も??? 誰か説明Please
では、ここに常駐していて、かつスレ全体のうち70%ぐらいの 話の内容が理解できる私は中級に認定されますか。
905 :
デフォルトの名無しさん :01/09/20 21:42
>>903 Windows メッセージパッシングの基本原理を知っているかどうかで、
説明がかなり変わるんだが...
SetWindowsHook(Ex) は Windows API で用意されていて、直接ウィンドウプロシージャを
書き換える。VCL/TWindow コントロールでなくても利用可能。
WindowProc は、VCL 側で定義されている、コントロールごとに存在する
ウィンドウプロシージャ。コントロールのソースコードがある場合には
これを書き換えるほうがメンテナンスしやすい。
さらに、メッセージを処理するたびに呼び出される OnMessage が
用意されていて、この構文を使えばイベントと同様にコードが書ける。
「イベントと同様」とは、あるインスタンスでデフォルトとは異なる振る舞いを
させたいときに、継承クラスを作成してバリエーションを作るのではなく、
最初から用意されているイベントに対してコードを追加することで対応する
ことを意味します。
ところがすべての Windows メッセージに対して、Dynamic メソッドを
定義できるため、コントロールのソースがある場合、わざわざ WindowProc を
変更する必要はほとんどない。
ソースがない/書き換えると大事になりそうな基本クラスなどの定義
済み動作を置き換えたいときくらいかな?
一部の重要なウィンドウズメッセージは扱いやすい形に書き換えられ
ちょっと知りつぼみな説明になった。
わからんところがあれば質問!
906 :
Delギコ :01/09/20 21:52
907 :
rock me :01/09/20 22:17
>サブクラス化コンポの開放 class procedure サブクラス化コンポ.XXX(var Msg: TMessage); type PMethod = ^TMethod; var m: TWndMethod; begin TMethod(m).Code := PMethod(Self)^.Code; TMethod(m).Data := PMethod(Self)^.Data; m(Msg); end; っていけるかな?これなら「罠」は消えるはずだけど。 PMethod(p)^に目的のプロシージャいれて Form.WindowProcにはTObject(p).XXXをいれて 開放する時はPMethod(p)^にOldWindowProc入れてやる。 いくらかごみ出るけど、気になるならリスト作って finalizationででも開放するとか。
class procedureにしなくてもOK? とにかくSelfとして渡される変数に真の呼び出し先の情報を入れといて、 WindowProc変数は開放時にも変更しないというアイデア。品が無いけど。
>>898 何度も出てるように多重サブクラスの特効薬は、特定のメッセージで
解放させる事じゃない?
解放させるメッセージ番号が決まっていれば一番いいんだけどね。
とりあえずプロジェクトで定数を決めておけばいいでしょ
WM_DatachProcを WndProcで受け取ったら
LParamを見て送信者=受信者でなければ
WParam=WM_DetachProcDetach なら取り外し
WParam=WM_DetachProcReConnect なら再接続
msg.Msg :=WM_DetachProc;
msg.WParam:=WM_DetachProcDetach;
msg.LParam:=self;
Nproc:= TCustomForm(AOwner).WindowProc;
TCustomForm(AOwner).WindowProc := FOldFormProc;
Nproc(msg);
msg.Msg :=WM_DetachProc;
msg.WParam:=WM_DetachProcReConnect;
msg.LParam:=self;
Nproc(msg);
910 :
デフォルトの名無しさん :01/09/20 23:08
あと、VCL では結構気軽にウィンドウハンドルの再構築が行われるので、 API レベルでフックしていると大変なことになる。 何度いわれても懲りないなぁ > Halbow
911 :
Delギコ :01/09/20 23:14
∧ ∧ ・・・・。
( ゚Д゚)
|∪ |
〜| | ナンカ ワケワカ
U U
>>905 OnMessageはTApplicationにしかないと思う。
TWinControl全てにあっていいと思うけど
そしたら多重SubClass化なんてくだらない問題も解決かな。
> ところがすべての Windows メッセージに対して、Dynamic メソッドを
> 定義できるため、コントロールのソースがある場合、わざわざ WindowProc を
> 変更する必要はほとんどない
ここ以下がサパーリわかりません??
わからなすぎて、何がわからないのかもわからな・・・
>>907 スンマソン、またーくわからないでし。
罠、消えますの?PMethod(Self)^.自分のMethod??
現在、
>>897 で
元に戻す時にTMethod(ナンカ.WndProc) = TMethod(Self.新しいWndProcメソド)
を確認して、Trueなら戻すし Falseなら例外でサブクラス化解除しないよにしてます。
IDE上からなら
サブクラス化、解除不可でCompo削除不可になっても
プロジェクトを閉じて開きなおせばたぶんCompo削除可能なのですが
プログラム上からTFuckCompoClassをCreateしたりFreeしたりすると
やぱりだめでしょうね(そんなことする奴はイネーと思うが)
サブクラス化は各Compo一つに1回だけを心がけるべきかしら。
>>906 事故レス
>>909 の方法は間違いだ。途中の順番逆だし
これだと多重にサブクラスされていた場合に対応出来ない。
再帰的に、
WM_DetachProcが送られたら
LParamを見て送信者=受信者でなければ
元に戻してFOldWndProcに同じメッセージを投げつける
メッセージから帰って来たら再度コネクトする
LParamを見て送信者=受信者なら
元に戻して完了
とすればどうだろ
検証してないけど procedure TFormFucker.FormWndProc(var Message: TMessage); begin case Message.Msg of WM_DetachProc: begin TCustomForm(AOwner).WindowProc := FOldFormProc; if (TFormFucker(LParam) <> Self) then begin //呼び出したのが自分でなければ FOldFormProc(Message);//さらに解放を続ける FOldFormProc:=TCustomForm(AOwner).WindowProc ; TCustomForm(AOwner).WindowProc := FormWndProc;//接続しなおす end; end; else FOldFormProc(Message); end; end; destructor TFormFucker.Destroy; var msg:TMessage; begin msg.Msg :=WM_DetachProc; msg.WParam:=Longint(FormWndProc); msg.LParam:=Longint(self); end;
> ところがすべての Windows メッセージに対して、Dynamic メソッドを > 定義できるため、コントロールのソースがある場合、わざわざ WindowProc を > 変更する必要はほとんどない message指令とか、WM〜メソッドをoverrideするってことかも。 907の説明)サブクラス化を行うコンポを削除すると問題なのは、 自分のメソッド(FormのWindowProcと置き換えていたやつ) が他のコンポにOldProcみたいなかんじで保存されていて、 インスタンスが破壊された後にも呼び出される事があるってことだと思う。 だからWindowProcを置き換えるメソッドはクラスメソッドにして、 そこから処理本体のメソッドを呼び出すようにするという仕組み。 で、使い終わったら、処理本体でなくて、置き換える前のFormのメソッドを 呼び出すようにしてやる。 インチキをしているのは、クラスメソッドを呼ばせる時、TMethod.Data に当たる部分のデータを、書き換えてしまうところ。 ここの数値が正当じゃなくても、ちゃんと呼んでくれるみたい。 説明下手でスマソ
そういや昔「ばか者」を意味するfuckerって 名前をつけるのは不適切とかのたまってたのがいたな
916 :
デフォルトの名無しさん :01/09/20 23:54
917 :
Delギコ :01/09/21 00:11
∧ ∧ / ̄ ̄ ̄ ̄ ̄ (゚Д゚*,) < 書いてみた _φ_⊂)__ \_____ /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | |千葉ピーナッツ|/  ̄ ̄ ̄ ̄ ̄ こんな感じでなってるよね。 Form1.WndProc =A.NewProc begin ・・・ A.FOldProc=B.NewProc end; begin ・・・ B.FOldProc=C.NewProc end; begin ・・・ C.FOldProc=サブクラス化しないときのForm1のWndProc end; A/B/Cは一応、自分が作れるものとしましょう。 他人が作ったものでも対応できればいいけど、さすがにそりゃ無理でしょ で、A/B/CのClassは全く別だとしましょう。 TA,TB,TCとでも考えてくださればいいっす。
918 :
Delギコ :01/09/21 00:12
∧ ∧ / ̄ ∩(,,゚Д゚) < おもしろい。 ⊂,,⌒ ,,つつ. \_  ̄ ̄ ソンナニ sage ンデモ エエデ(関西風) Bをサブクラス化から開放したいとき A.FOldProc:=B.FOldProcする必要があって それってWM_DetachProcメッセージ伝達で出来るのかしら?? ちょっとイメージできてないです。 というか、Bを開放するときに、Aも一緒にはずしてしまうって事かしら。 でもコンポーネントは配置されているのに 理由もなくサブクラス化されていない物が混じっているのも ちょっときついかも そのあとAを開放しようとすると プログラム側がワケワカな挙動しないかな。
>Delギコさん 新スレ立てるとき、ここの1みたく「その他のプログラム」って書くと またVBの質問とか出てきそうだからやめよう。 検討済みだったらスマソ。
921 :
デフォルトの名無しさん :01/09/21 08:11
多段サブクラス取り外し問題は 取付順 ↓ objA ─────────────── WndProc → FoldwndProc ↑ │ ↓ objB ────────── WndProc → FoldwndProc │ ↑ │ ↓ objC ───── WndProc → FoldwndProc │ ↑ │ ↓ objD WndProc → FoldwndProc │ ↑ │ msg ……………> (サブクラス先の.WndProc )←──┘ こういうふうになっていると安全に取り外せるのは objDだけ objAを取り外したい場合は objA,B,Cの順に取り外さなければいけない これはメッセージの流れる順だから 取り外せというメッセージを送ればいい。 そのメッセージを処理するWndProc内部で取り外し処理をしては 送ったメッセージが自分のメッセージでなければ FoldWndProcを通じてルートを遡らせてゆき そのFoldWndProcが帰って来たら再度接続しなおす。 メッセージさえ共通にしておけばいいから複数のオブジェクトを設計する場合も それほど難しい問題は起きない。
検証した。 問題なく取り付け取り外しできるように見えるぞ const WM_DatachProc = WM_USER; type TtestLabel = class(TLabel) public FoldWndProc:TWndMethod; constructor Create(AOwner: TComponent);override; destructor Destroy;override; procedure MyWndProc(var Message: TMessage); end; constructor TtestLabel.Create(AOwner: TComponent); begin inherited; if (AOwner is TCustomForm) then begin FOldWndProc := TCustomForm(AOwner).WindowProc; TCustomForm(AOwner).WindowProc := MyWndProc; end else begin FOldWndProc := nil; end; end; destructor TtestLabel.Destroy; var msg:TMessage; begin msg.Msg:=WM_DatachProc; msg.WParam:=longint(self); (Owner as TCustomForm).WindowProc(msg); inherited; end; procedure TtestLabel.MyWndProc(var Message: TMessage); begin case Message.Msg of WM_DatachProc:begin (Owner as TCustomForm) .WindowProc := FOldWndProc; if ( Message.WParam <> LongInt(Self)) then begin FOldWndProc(Message);//さらに解放を続ける FOldWndProc:=(Owner as TCustomForm) .WindowProc; (Owner as TCustomForm) .WindowProc:= MyWndProc; end else FOldWndProc:=nil; end; WM_CHAR: begin //コンポーネントの動作チェック用 text:=Char(Message.WPARAM); if assigned(FoldWndProc) then FoldWndProc(Message); end; else if assigned(FoldWndProc) then FoldWndProc(Message); end; end; procedure Register; begin RegisterComponents('Samples', [TtestLabel]); end; end.
923 :
デフォルトの名無しさん :01/09/21 09:02
という事でココをご覧のコンポーネント作家さん WM_DatachProc = WM_USER; をサブクラス取り外し用メッセージという事にして WParamでSelfを送るという約束にしましょう。 LParamは空きとして
924 :
デフォルトの名無しさん :01/09/21 09:07
さらにWindowsへのサブクラスの場合も考えて LParam にはプロセスユニークと思われる番号(とりあえずプロセスID)が 与えられる事にしましょう。
おっと、
>>922 のコードでは
FOldWndProc がnilかどうか確認せずに使ってる個所が
何箇所かあるから修正してね
>>922 -925
ふと思ったんだが、
WM_USERだとすでに使われていて別の意味を持つ場合もあると思うから、
RegisterWindowMessage('WM_SubclassFreeNotify');
みたいにして使った方が(・∀・)イイ!と思われ。
もしくはWM_USER+222みたいにするとか。222の意味は2chということで:-)
WM_USERってVCL自体で使ってたような。はまったことある。 WM_APP以降にせんと安心できなかったな。 RegisterWindowMessageがやはり無難な感じ
928 :
デフォルトの名無しさん :01/09/21 09:50
ではサブクラス解放についてのまとめ WM_DatachProc = RegisterWindowMessage('WM_SubclassFreeNotify'); WParam,LParam はユニークな値が入る この2つの値で送信者が自分かどうか判断し 自分でなければリンクを解放して下位にメッセージを送り メッセージが帰って来たらリンクを再接続する 送信者が自分ならリンクの解放だけを行う VCL上のサブクラス取り外し WParam で selfが渡される WParam = LongInt(self) LParamは無視してよい Win上のサブクラス取り外し LParamでプロセスID WParamはプロセス内ユニークな値(メソッドアドレス等それぞれのプロセスで管理)
929 :
Delギコ :01/09/21 09:51
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
@' ― (,,゚Д゚) < 正規表現はわからんちー。
し― し-J \___________
2chのどこかで正規表現すれがあったような気もする
>>921 さんは
>>922 さん?
>こういうふうになっていると安全に取り外せるのは objDだけ
これで妥協してしまうのだったら
問題は非常に簡単なんですけどね。
> objAを取り外したい場合は objA,B,Cの順に取り外さなければいけない
??なんかわからなくなってきました。
objAを取り外したい場合はobjBのFoldWndProcを
サブクラス先の.WndProcに接続しなきゃいけないですよね。
> そのFoldWndProcが帰って来たら再度接続しなおす。
イチドサブクラス化解除させてから再度サブクラス化させるってことかな
>>922 のコードはイマからみてみます。
×Datach ○Detach
×objAを取り外したい場合は objA,B,Cの順に取り外さなければいけない ○objAを取り外したい場合は objD,C,Bの順に取り外さなければいけない
>objAを取り外したい場合はobjBのFoldWndProcを >サブクラス先の.WndProcに接続しなきゃいけないですよね。 結果的にはそういう事だけど、 それに拘るからハマルんだよ 基本的にobjAからは objBが見えない。確実に割り出す方法はないんだよ。 サブクラスがobjA,objBの2段だけなら サブクラス元のメソッドポインタから割り出せるけど さらにサブクラスされているともうダメ だから、メッセージを使う方法が一番安全で確実だと皆言ってるじゃないか
933 :
Delギコ :01/09/21 10:15
∧ ∧ /
(,,゚Д゚)< こりゃまたすごいや。
|つ つ \
@ |
∪ ∪
動作コードみてようやくわかりました。
サンサンサンクスコクスコクスコーーーー
>>921 の図でいうと
objAを取り外す場合
objAからメッセージを投げる
objDに伝わる
objDのサブクラス化を解除
objDからobjCに連絡
objCに伝わる
objCのサブクラス化を解除
objCからobjBに連絡
objBに伝わる
objBのサブクラス化解除
obfBからobfAに連絡
objAに伝わる
objAのサブクラス化解除
objAは自分自身なので何もしない
objAの処理が終わったので
objBに処理が戻り再度SubClass化
objBの処理が終わったので
objCに処理が戻り再度SubClass化
objCの処理が終わったので
objDニ処理が戻り再度SubClass化
こういう事になっているわけですね。
934 :
Delギコ :01/09/21 10:27
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) < んまー。するどい
>>932 | つつヾ \_______
〜| | ユルシテヨ
∪∪
> 結果的にはそういう事だけど、
> それに拘るからハマルんだよ
ええ、しっかりと浜りました。
みっちりときっちりと。
> 基本的にobjAからは objBが見えない。確実に割り出す方法はないんだよ。
そうっすね。
ということは、他人の作ったものが混じった場合、例えばここのCompo
http://www.psn.ne.jp/~nagayama/program/0017.html (ごめんねサイト作者さん)
この仕組みは動作しないから…一体どうなるんだろ。
…テストをしている限りは変な挙動はしていないみたい。
ちゃんとtestLabelは取り外せますね。
正しいのかな?
> サブクラスがobjA,objBの2段だけなら サブクラス元のメソッドポインタから割り出せるけど
> さらにサブクラスされているともうダメ
ですねー。
> だから、メッセージを使う方法が一番安全で確実だと皆言ってるじゃないか
やっとわかたでし。
935 :
デフォルトの名無しさん :01/09/21 10:39
再度 サブクラス解放についてのまとめ >>コンポーネント作家の方々へ
サブクラスを利用するコンポーネントは以下の手順で解放する事
var WM_DetachProc:Cardinal; をローカル変数として定義し
コンポーネントの初期化部で
initialization
WM_DetachProc := RegisterWindowMessage('WM_SubclassFreeNotify');
end.
とする。
サブクラス解放時にはこのメッセージIDで
WParam,LParam はユニークな値を入れて サブクラス先に送信する
それを受信したWindowProcでは、
この2つの値で送信者が自分かどうか判断し
自分でなければリンクを解放して下位にメッセージを送り
メッセージが帰って来たらリンクを再接続する
送信者が自分ならリンクの解放だけを行う
VCL上のサブクラス取り外し
WParam で selfが渡される WParam = LongInt(self)
LParamは無視してよい サンプルコード
>>922 Win上のサブクラス取り外し
LParamでプロセスID
WParamはプロセス内ユニークな値(メソッドアドレス等それぞれのプロセスで管理)
注意: WM_DetachProc は定数ではないので case では使えない ifで判断する事
>>934 リンク先みてみた。
これが簡単に暴走しない理由は、
FNewWndProc := MakeObjectInstance(WndProc);
とサンクを使っていて、オブジェクト解放時にこのサンクを解放していないからじゃないかと思う
937 :
Delギコ :01/09/21 11:02
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ゚Д゚) < ほかの自作FormフックCompoも試した .=| |==U=U==.| |= \___________ | | | | | | 普通にVCLでフック解除するヤツだよ | | ノU U. | | | | .| | testLabelを削除された時に 暴走はしないのですが 自作の方のサブクラス化は解除されてしまうます。 自作の方は正しくサブクラス化解除できないときは 例外を出すようにしてるからいいけど タブン、マトモに削除するとWndProcがどこかに逝ってしまい 暴走するだろーな。 WM_DetachProc が流れた所で 安全にサブクラス化解除されない場合は例外発生して 元に戻るようにできないかいニャ。 考え中..... そこまで拘らなくてもいいって肝するけどー。
938 :
Delギコ :01/09/21 11:04
∧ ∧ /なんにせよ ( ゚Д゚) < 教えてくれたデフォルトの名無しさんズ。 ノつノつ \ありがとーう。 ( 人 ソ ) ノ ノ ( 人 ネジッテ ミマシタ ソ ) ノ ノ UU
>>895 最初の例が間違えてたっす。スマソ。
s/(\-\-|==)+/$1/g; の場合
「-」奇数→「---」
「-」偶数→「--」
ですな。例では「-=」ともに偶数だから結果は
895が書いてる通りになります。
940 :
デフォルトの名無しさん :01/09/21 11:09
いまさらですが、サブクラスとは具体的にどういう作業を指すのでしょうか。 オブジェクト指向の一部ですか?それとも 単にテクニックの一つでしょうか。 サブクラスとWinProcとはどういう関係がありますか。 つーか、WinProcは何者ですか。
941 :
デフォルトの名無しさん :01/09/21 11:16
Delphiでは、メッセージハンドラとしてメッセージマップなんかより、 ずっと綺麗にメッセージを隠蔽してるから、使わなくて問題無い。 また、Delphiでコールバック関数やメッセージ使うと、 あっという間に超読めないコードになる。 だから、メッセージ操作コード出さないでね>>Delギコ
942 :
Delギコ :01/09/21 11:23
( ヽ ―――― ○ ――――
, ⌒ヽ ( ) // | \
( ' ( ヽ⌒ヽ 、 / / | \
ゝ `ヽ( ) | (⌒ 、
( 、⌒ ヽ ( ヽ
( (⌒ ) (
( Y⌒ ヽ
( `)
ゝ ノ ノ
_________________________________________________________________________________________
〜〜 〜〜 〜〜〜 〜 〜〜 〜〜 〜 〜〜 〜
〜〜 〜〜 〜〜 〜〜〜 〜
〜 〜〜 〜〜 〜〜 〜〜 〜〜 〜〜〜
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.... ∧ ∧ .... ..... .... .....
.... (,,゚Д゚) .. .... .... .....
.... | ∪ .... ... ... .
.... 〜 | ナツガ オワッタ スレ モ オワッタ ....
.... ∪∪
.... アツイ オモイデ サヨウナラ .... .... ...
新スレ立てました。サブクラス化などの続きはこちらで、、
( ゚Д゚)ノ Delギコ猫のプログラミング相談室part3
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001039863
ああ、そうか、
このメッセージが経路を辿る時に途中で解放せずにそのまま渡されて来る場合もある訳で
経路の全てがこのメッセージをサポートしてるかどうかチェックする方法が無いといけないのか
という事で、このメッセージを受け取った時のサブクラス先のポインタが自分が設定した時の
状態に戻っていなければ・・・・・
どうしようもないかな?
せいぜいメッセージを出して別の何もしないコンポを動的に作成してそいつを割り当てておくしかないかも
という事でコンポ作家の皆さん
>>935 をよろしく
945 :
デフォルトの名無しさん :01/09/21 11:53
つまり、コントロールに送られたウィンドウメッセージを 最初に受け取るのが WinProc 関数であり、 これを別の関数に置換して、そちらにメッセージが 流れるように仕向ける操作を「サブクラス化」と呼ぶわけですか。
>>939 ぁぁ納得したです
これで正規表現はバッチリだ(嘘
947 :
デフォルトの名無しさん :01/09/21 12:08
>>941 何がいいたいんだ?
>頻繁に必要になるものでもないが、必要なときには使うしかあるまい?
Delギコ生意気。使わずにできるぞ。
サブクラスの作成でつまずいてるんだろ。それがメッセージのせいって分からんのか。
分からんのだったら、人にアドバイスするな。
マターリいこうぜ
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < え〜、牛乳いかがっすかー。 ./\品品昌_ \___________ ( U__| 雷印 | .U U ̄ ̄ ̄ カルシウム不足の方が1名おられるようで 他のお客様のご迷惑になりますので,,, 牛乳飲んどけ。 折れもカルシウム不足かも。ノンどくか。 でも、ウシって今・危ニャーかも??
>>949 牛乳には狂牛病の原因と考えられているプリオンは含まれません。
神経系の体液が関与しない限り安全です。
951 :
デフォルトの名無しさん :01/09/21 21:11
終いには「Delギコ猫のプログラミング相談室」なんていう書籍が出そうだね(w
952 :
デフォルトの名無しさん :01/09/22 06:13
なんで”サブクラス化”と言うのでしょうか? サブクラスと言うと、子クラスを連想します。
数学の集合辺りの用語とか聞いた >サブクラスと言うと、子クラスを連想します 合ってるやん
新スレあるのにageるとはこれいかに
こっちのスレに書かしてもらいます。 なんとなく実装の改良案。 destructor TTestLabel.Destroy; var TempWindowProc: TWndMethod; Msg: TMessage; begin TempWindowProc := TCustomForm(Owner).WindowProc; TCustomForm(Owner).WindowProc := FOldWindowProc; Msg.Msg := WM_DetachProc; Msg.LParam := 0; Msg.WParam := WPARAM(Self); Msg.Result := 0; TempWindowProc(Msg); inherited Destroy; if Msg.Result = 0 then raise Exception.Create('サブクラス化解除がおかしいですよ〜'); end; procedure TTestLabel.MyWindowProc(var Msg: TMessage); begin if Msg.Msg = WM_DetachProc then begin if Msg.WParam = WPARAM(Self) then begin Msg.Result := 1; end else begin FOldWindowProc(Msg); FOldWindowProc := TCustomForm(Owner).WindowProc; TCustomForm(Owner).WindowProc := Self.MyWindowProc; end; end else FOldWindowProc(Msg); end;
/\ ________ /ギッコー / /____\ < 新スレでやろーう | ゚Д゚| \ ノ| || || || |し  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ sageるよ
保守
にゃんまげ
保守