( ゚Д゚)ノ Delギコ猫のプログラミング相談室part2

このエントリーをはてなブックマークに追加
1Delギコ
           ________
   ∧∧   /Delphiやその他のプログラムのこと
〜''~(,,゚Д゚) < 聞いてヨシ
  UU'UU    \
            ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
前スレはこちら

( ゚Д゚)ノ Delギコ猫のプログラミング相談室
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=997348797
2 :01/09/03 11:09 ID:k4Hy6CEI
3Delギコ:01/09/03 11:09 ID:wHGoXFco

___  ヽ
_ /⊂ `∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | |  \( ゚Д゚)< 答えられない事もあるが、切れるなよ
  | /   ∪ ∪   \____________________
 ̄ ダレデモ シラナイコト ハ アル
4Delギコ:01/09/03 11:10 ID:wHGoXFco
   |
電 |
   |∧ ∧
柱 |,,゚Д゚) <アラツは勘弁してね。
  ⊂ |
   |  |  コノスレ ガ 板ヨゴシ トカ イワナイデ
   |∪
, ' , ; ' ;

 ∧∧∩゛  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)ノ < ではヨロツク
 U  /   \____________
 |  |
ノ∪∪
5Delギコ:01/09/03 11:11 ID:wHGoXFco
2chの調子がワルゲ
 ☆       ・       ゚     *
      *        ☆            ・
         ゚          ☆     *
          ∧ ∧   トンデ ヨシ
          (,,゚Д゚) つ       *
   ─   γ  ̄ ̄ ̄ ̄ ヘ           ゚
  ─ ─    /◎ ○ ◎ ○ヘ  
  ─ ─  <_______>    ・
   ─    `―' `―' `―'


  _∧ ∧________ ∧ ∧ __
 (_(,,゚Д゚).________(,,゚Д゚).__○
  ⊂  ノ│ 2chねる │  ⊂  ノ
  〜|  _つ│  復旧中 |  〜|  _つ
   し '    ̄ ̄ ̄ ̄ ̄    し '
6Delギコ:01/09/03 11:43 ID:wHGoXFco
そういえばリンク集など貼り付けてみましょう。

♪ ∧ ∧ ∧ ∧♪
  (,,゚Д゚) (゚Д゚,,)  ソウシマショウ
  /つつ⊂⊂ヽ
〜  ノ   |  |〜
 (/ し   ∪∪

まずは2chで話題になったとき
ソースを置く場所。

Delphi Source Files
http://www.ziyu.net/%7Erent/bbs/bbs.cgi?room=delphi6

置いてよし認定委員会
http://www2.to/source
7デフォルトの名無しさん:01/09/03 11:55 ID:erQfTfbg
無駄なコピペより有益なリンク貼れ
8Delギコ:01/09/03 11:56 ID:wHGoXFco
 本文長すぎます。
 改行が多すぎます
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧
   (,, ゚Д゚)∫
   /  つ旦O
 〜(._[ ̄ ̄ ̄.]
      ̄ ̄ ̄
Tipsサイト
 Delphi Acid Floor  http://homepage2.nifty.com/boheme/top.html
 Leafel's note Programing  http://hp.vector.co.jp/authors/VA015850/program.html
 日本Delphi振興会  http://hp.vector.co.jp/authors/VA009712/take/delphi/kabetop.htm
 Delphi神殿Tips  http://nug.nasu-net.or.jp/~sakai/delphi/index.html
 M&I Tips  http://member.nifty.ne.jp/m-and-i/tips/tipspage.htm
 Gen'sDelphiLabo  http://www2.biglobe.ne.jp/~sakai/gensfaq2.htm
 FDelphi  http://www.nifty.ne.jp/forum/fdelphi/faq/title.htm
 Borland Q&A Delphi  http://www.borland.co.jp/qanda/delphi/index.html
 Borland Tips Delphi  http://www.borland.co.jp/tips/delphi/index.html
 RG VEDA DELPHI TIPS  http://homepage1.nifty.com/beny/delphi.html
 Sky Engine by Delphi  http://www.geocities.co.jp/SiliconValley-SanJose/7625/index.html
 AboutDelphi  http://www2.big.or.jp/~osamu/Delphi/
 Win32 API by Object Pascal of Delphi  http://halbow.cool.ne.jp/top.html
 COSMIC TOWER DELPHI MILLION TIPS  http://homepage1.nifty.com/cosmic/delphi/delphitips.html
 Delphi広場faq  http://www.sakaki.keiaikai.or.jp/faq.html
 としのホームページTIPS  http://hp.vector.co.jp/authors/VA003525/tips.htm
 STUDIO MU Delphi Q&A  http://www.para.tutics.tut.ac.jp/~ohno/mu/devroom/delphi_qa_g.html
 中村の里  http://www.asahi-net.or.jp/~HA3T-NKMR/delphi.htm
 進め!中級プログラマ  http://www.asahi-net.or.jp/~GV4J-SGUR/narik/susucyu.htm
 Ken's Software Delphiの話題  http://homepage1.nifty.com/kens-hp/delphi.htm
 Katsuya's Home  http://www.apionet.or.jp/~tubokura/k_tips.html
 Ak's Laboratory[Delphi Construction]  http://www2s.biglobe.ne.jp/~aks-lab/delphi_lecture.htm
 MADIAのVB研究室|Delphi Page  http://homepage1.nifty.com/MADIA/Delphi/Delhpi.htm
 DEKO Delphiによるテクニック&アルゴリズム  http://homepage1.nifty.com\ht_deko\techalgo.html
9Delギコ:01/09/03 11:57 ID:wHGoXFco
 なので分割

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧    AAハ イヂデモ ハル ニャー
   (,, ゚Д゚)∫
   /  つ旦O
 〜(._[ ̄ ̄ ̄.]
      ̄ ̄ ̄
初心者向け
 Do It YourSelf---Life with Delphi http://home.onestop.net/mineko/index2.html
 ゼロからDELPHI講座 http://www.text2music.com/mine/delphi/index.html
 Delphi プログラミング事始め http://www2s.biglobe.ne.jp/~hatena/delphi/index.html
 Delphi(デルファイ)のページ http://www.threeweb.ad.jp/~satou/
 「Delphi 買ったけど。。」 http://hp.vector.co.jp/authors/VA009187/delkedo/
VBから
 Switching Delphi / VB http://member.nifty.ne.jp/deepforest/vbdel.htm
 Visual Basic から Delphi/Kylix への移行ガイド http://www.borland.co.jp/delphi/papers/vbtodel/
 [ でべろっぱのすすめ ]と[ じあぴ ] http://www.ab.wakwak.com/~greenspace/dev-api/
 DelphiAcidFloor VBtoDelphi http://homepage2.nifty.com/boheme/delphi/vbtodel/index.html
 Taurus' Home Page Delphiの部屋 http://user.shikoku.ne.jp/kasai/delphi1.html
C++から
 Delphi&C++Builder&VisualBasic徹底比較Ver0.4 http://member.nifty.ne.jp/h_kova/procomp.htm
 Gonta's Room http://www2a.biglobe.ne.jp/~gonta/
初心者から上級者まで御用達
 DelphiML検索 http://www2.big.or.jp/~osamu/Delphi/
 Delphi広場 http://www.sakaki.keiaikai.or.jp/
 BorlandManiacs http://member.nifty.ne.jp/h_kova/
コンポーネントのことなら
 DelphianWorld http://home1.infonia.ne.jp/~delphian/delphi/
 DelphiSuperPage http://delphi.icm.edu.pl/
環境のカスタマイズなら
 GExperts http://www.gexperts.org/
 フリーカーソル無効化アドイン http://homepage1.nifty.com/fuu/
書籍案内
 Delphi 書籍ランキング
 http://home1.infonia.ne.jp/~delphian/delphi/history/book.html
 http://home1.infonia.ne.jp/~delphian/delphi/history/bookrank2/book.html
 Delphi初心者のための道しるべ  http://www.valley.ne.jp/~masaiku/index1.htm
 Delphi 関連書籍 http://www.borland.co.jp/bookinfo/delphi.html
10Delギコ:01/09/03 11:59 ID:wHGoXFco
  フーーーーニャー
   ,,'''~''~'∧,,∧
 〜′,,,;;,, (,゜Д゜)  >>7 オマエが晴れ
  UU" " U U
11名無しさん:01/09/03 12:13 ID:DHdGRFqU
  -下手人--∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< コピペ貼ったYO!
  (O)----(O)U-U) \__________

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999486538&res=1
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 ではないから。

だから、ダイアログ内のテキストエディタに入力した時点で
拡張子を補完し、上書き確認メッセージを出したかった。


これって需要あると思う、マジで。
13Delギコ:01/09/03 12:34 ID:wHGoXFco
 ∧ ∧  需要はともかく
 (;゚Д゚)  ちょっと調べなければわからないのよ。
 (|  |つ  CommonDialogを拡張して何かをするような
〜|  |   技術情報をしらべなさい。>>MLのログに載ってるはず
  ∪∪   折れはそれにはまだ疎い

 氏ってる人教えてあげて。
14デフォルトの名無しさん:01/09/03 12:48 ID:NDgF6l0Q
>>5-6
Delギコ猫って双子だったのか?
15Delギコ:01/09/03 12:56 ID:wHGoXFco
        (\                          /)
         \\                     //
          (\\                    //)
           \\\                ///
           (\\\\           ////)
           (\\\\\        /////)
            \\ |||       ||| //
( ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ | ⊂⊃   ⊂⊃ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄)
  ̄ ̄( ̄ ̄//// ̄\  ∧ ∧  ∧ ∧  / ̄\\\\ ̄ ̄) ̄ ̄
      ̄(//// ̄\\( ゚Д゚) (゚Д゚ )// ̄\\\\) ̄
        (/(/// ̄(つ つ  ⊂ ⊂) ̄\\\)\)
            (/(/|  |   |  | \)\)
             (/((/ ∧|   |∧ V))\)
                 ∪ ∪     ∪ ∪
                 ニヂウ  ジンカク         カモ
                                蛯型だし
16Delギコ: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全部でどう切替えても訊いてくるから前提がおかしいナリ

推察するに、この時フィルタ変更にファイル名を追随させたのか?
18デフォルトの名無しさん:01/09/03 14:33 ID:earer8Ng
type TMyClass = class(TObject);

implementation

var TMyClass_ClassField: Integer;
とかやってるけど
19デフォルトの名無しさん:01/09/03 15:03 ID:oDYd29Ko
>>17
いまD6つかってるけど、聞いてこないよ。
それはデフォルトの拡張子にTXTを指定してるからじゃないかな。
デフォの拡張子を無しにすると、拡張子のないファイルを
入力しても、何も言ってくれない。
20デフォルトの名無しさん:01/09/03 16:01 ID:fdEwavAE
>>18
おれもそんな感じ。
外部からアクセスしたいときはクラスメソッド経由で。
21Delギコ:01/09/03 16:42 ID:wHGoXFco
>>クラスフィールド
  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚) <  現在 実装中
Π ̄ ̄ ̄| \ 
|つ 感謝 ()    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |___.|
  ∪∪
22名無しさん:01/09/03 18:05 ID:DHdGRFqU

  -下手人--∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< >>17 FilterIndex=0で再現〜
  (O)----(O)U-U) \__________
疑って正直スマン
選択してるフィルタってGET出来ないでやんのクソだね
23Delギコ:01/09/03 18:24 ID:wHGoXFco
>>22
  ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ゚Д゚)っ < SaveDialog1TypeChangeイベントじゃないの?
  |''U ̄|   \_________________________
  | ̄ ̄|
 /    ゙ヽ
(   ゚Д゚  )
人____ノ
24Delギコ: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みたら同一クラスがいくつあるかわかるし
中身みたら他のものも参照できるしね。
25Delギコ: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やってるけど、初めて聞いた(ようなきがする)
28デフォルトの名無しさん:01/09/03 22:58 ID:fdEwavAE
クラスメソッドに対してクラスフィールドって勝手にいってるだけっしょ
29デフォルトの名無しさん:01/09/03 23:19 ID:39wrh3fk
メンバー関数とかメンバー変数とかも同じかな
30Delギコ: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に直してください
34Delギコ:01/09/03 23:42 ID:7WmdGYpw
  ( )   ( )
   ( )
    ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    (゚Д゚,,)< 風呂は良いね、心を満たしてくれる。
   | ̄ ̄ ̄| \_______
   |二二二|
   |___|
   从从从从

      ( )
  ( )  
   ( ) ( )
    ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    (゚Д゚,,)_ < なんか熱くなってきた。
   |U ̄U |  \_______
   |二二二|
   |___|
   从从从从
35Delギコ:01/09/03 23:43 ID:7WmdGYpw

        (  )
  ( )   (  ) 
   ( )  ( )
    ∧ ∧( ) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    (;゚Д゚) < ウオァチャァ!!
    / づ   \_______
   | ̄ ̄ ̄|
   |二二二|
   |___|
   从从从从

                 ( )
            ( )  
             ( ) ( )
          ____バシャァ
          |  | │ |∧ ∧ ・・・・・
    从从   |  | │ |(*゚Д゚)
   从从从从 |  | │ | _つつ
           ̄ ̄ ̄ ̄~~~~~~~~~~~~~~
36Delギコ:01/09/03 23:44 ID:7WmdGYpw
オフロ イドウシキ
    ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    (゚Д゚ )_ < すごいスレがたってるな。
   |U ̄U |  \_______
   |二二二|
   |___| トコトコ
    U U

     ゞゞ
       ゞゞ


Delphi でつくろう!Pure-P2P 掲示板
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=999527387

モナーテラプロジェクトかしら。
37デフォルトの名無しさん:01/09/03 23:49 ID:1zSk4pr2
スレ立てすぎ>Del坊
38デフォルトの名無しさん:01/09/03 23:49 ID:1zSk4pr2
あ、そうでもないや
39名無しさん:01/09/04 00:06 ID:m9mxC.IA
  -下手人--∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< >>23 イベント発生はつかまるが、じゃあ今何番目のフィルタかな〜ってのが取れん
  (O)----(O)U-U) \   FileNameにも拡張子は憑いてやがらねぇナリ
..              \__________
40デフォルトの名無しさん:01/09/04 01:17 ID:nORTkWNE
             ∩
            | |
      ∧_∧  | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ( ´Д`)// < 先生!>>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をクロスプラットフォームにしたいです。
     /     /   \
    / /|    /       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
__| | .|    | __
\   ̄ ̄ ̄ ̄ ̄   \
 ||\            \
 ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
 ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
    .||              ||
44デフォルトの名無しさん:01/09/04 03:12 ID:caAHKA7M
>>43
GIFかJPGにすれば良いよ
45デフォルトの名無しさん:01/09/04 03:16 ID:HYOp.zqI
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; を呼んではいけない。
48デフォルトの名無しさん:01/09/04 08:00 ID:QjlESLvE
>>46
MLからヨウコソ!!
49Delギコ: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 氏がいたんだが…

      ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 @' ― (,,゚Д゚)つ < 最近見かけねーナ
   し― ∪     \___________
5232:01/09/04 11:35 ID:64QSl782
>>33 ありがと
53デフォルトの名無しさん:01/09/04 12:05 ID:/Xfn2x2w
>>51
そう?よくみかけるけど?
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) \__________
57Delギコ: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
当たり前だが、ネタ?>>57
59Delギコ:01/09/04 13:45 ID:rI/kNmo6
>>58
  ∧ ∧∩ アータにとっては当たり前でも
  (゚Д゚,,)ノ  ワタシニャー当たり前でござらん
   |  つ
   | ⊂)〜
    ∪     教えてよ。
60Delギコ: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は二進浮動小数点表記では割り切れないから丸め誤差が入るんだよ。
63Delギコ: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;
どうやらこうらしい
64デフォルトの名無しさん:01/09/04 14:23 ID:QjlESLvE
浮動小数点を=で判定することが間違ってると思うが・・・
6562:01/09/04 14:27 ID:EcqU4D62
>>63
割り切れないから型(精度)が違うと丸め位置も変わって値も変化するってこと。

そして >>64 に同感。
66Delギコ: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;

でイインジャネーノ?
71Delギコ: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
めっさわかりやすかた。サンクスコ。
72Delギコ:01/09/04 15:33 ID:rI/kNmo6
    ∧∧ プハー
   (,, ゚Д゚) =3 < どうやらちがうな。
   /つ日      難しいやこりゃこりゃ
 〜(__ノ
  考え中
73デフォルトの名無しさん:01/09/04 15:36 ID:EcqU4D62
あと、
固定小数点と違って浮動小数点は精度が同じでも指数部が違うと
表せる最小値にも違いが出てくるから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;
75Delギコ: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が収まってるかを判定する関数。
と解釈するとわかるかも?
77Delギコ: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 )か
80Delギコ: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++の方が経験があるのですが...
85デフォルトの名無しさん:01/09/04 17:33 ID:qTrwX4uw
>>84
C++の経験があるのならBCBでいいと思う。
ただしVCLのソースはPascalなので、ある程度知識が必要になってくると思う。
86Delギコ:01/09/04 17:33 ID:rI/kNmo6
 むむ?IsSameはどこにあるんだ?

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧    マターリ
   (,, ゚Д゚)∫
   /  つ旦O
 〜(__n n[ ̄ ̄ ̄.]
         ̄ ̄ ̄
> IsSame の第3引数は省略可能。省略、または0を指定すると、適当な「小さい数」が
> 使われる。
> なんだ。IsSame を自分で定義しているのか。

D6PersonalにもD5エンプラにも付属していないみたいだが。
IsSameDayってのはあるけどね。
87Delギコ: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タグ関連の質問はどこですればいいでしょうか、
多分、みなさんにとってアホらし過ぎる質問だと思いますが・・
89Delギコ:01/09/04 17:45 ID:rI/kNmo6
   >>84-85 折れもBCBをお勧めする

       ∧ ∧
       ( ゚Д゚)
       |∪ |
      〜|  |
       U U

  いずれVCLのPascalをよまなけりゃいけない場面もあるが
  Delphiでも結局C++をよまなきゃいけないのと
  同じことで必要だし。

  ただ、C++を挫折しかけているならDelphiをやるのがヨシ


  >>88
  スレたてるまでもない質問スレをさがせ。


  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚) <  浮動小数点系の話。大変ためになりました
Π ̄ ̄ ̄| \ 
|つ 感謝 ()    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |___.|  教えてくれたりしたひと、みなさんにひとまず感謝。
  ∪∪

  グッスリ眠れそうだ。
90デフォルトの名無しさん:01/09/04 17:50 ID:EcqU4D62
でも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 にすれば
見えないウインドウができましたが、これではタスクバーに表示されて
しまうようです。
94Delギコ: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を代入してしまえばいいのか?
95デフォルトの名無しさん:01/09/04 18:44 ID:QjlESLvE
>>93
タスクバーになくてかつ、見えなければよいのか?

タスクバーから消す方法はあるよ。
96デフォルトの名無しさん:01/09/04 18:50 ID:M7JWPLwA
9793:01/09/04 18:52 ID:94pNP4M6
ごめんなさい。
解決しました。
ヘルプに「メインフォームを非表示にする」って項目がありました。
9893:01/09/04 18:55 ID:94pNP4M6
>>96
ありがとうございます。
FAQのページも参考にさせてもらいます。
9988: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) \__________
102Delギコ:01/09/04 19:16 ID:rI/kNmo6
    ∧ ∧   / ̄
  ∩(,,゚Д゚) < たしか、バカウケってお菓子が・・・・・・・
⊂,,⌒ ,,つつ.  \_
   ̄ ̄
103デフォルトの名無しさん:01/09/04 19:18 ID:4niCzD4w
>>102
ちょっと笑ってしまった・・・
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
>>104
TInifileじゃだめ?
106104:01/09/04 19:33 ID:xjPsFd/I
データファイルってのが、HTML等のテンプレートファイルなのね。
アプリで扱っているデータを出力する際のフォーマットを決めるためのファイルなのよ。

だから、改行ありまくりだし、アーカイブの状態でも
テキストエディタでの編集が楽になるようにしたい…
%begin hoge1.txt

hoge1.txt の内容 %はエスペープに置き換え

%end
%vefin hoge2.txt

hoge2.txt の内容 %はエスケープに置き換え

%end
てな感じで。
107デフォルトの名無しさん:01/09/04 19:44 ID:Zf.1izG6
>>106
やり方判ってるならその通りの動作をするように作ればいいじゃん。
108104:01/09/04 19:56 ID:xjPsFd/I
だって面倒なんだもん。
109デフォルトの名無しさん:01/09/04 20:01 ID:EcqU4D62
リソースにでもしたら?
110デフォルトの名無しさん:01/09/04 20:14 ID:QjlESLvE
がいぞんのアーカイバのソースを参考にしてはどうだ?
ソース公開されているものは結構あるぞ

つってもファイル結合して取り出すくらいなら自力で組めると思うんだが・・・。
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</ファイル名>
  <内容>
   やるきも無いよう
  </内容>

</テンプレート>

これでいいのかゴルァゴルァ
112111:01/09/04 20:25 ID:w/.HSIv6
  -下手人--∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< 100じゃなくて>>104だスマンぞゴルァ
  (O)----(O)U-U) \__________
113デフォルトの名無しさん:01/09/04 20:27 ID:4UyXpXxw
>なんとなく無駄に感じる。
これが実際どれだけ無駄なのか、
許容できないくらい無駄なのか
きっちり検証して、クライアントや周りに
意見を聞いてみたほうがいいよ。

勝手な想像で言わせてもらえば
数百以下ならファイル単位で管理したって
全然問題にならないと思うよ。

XMLもどきの独自フォーマットを導入することはできるけど
お気軽に編集してタグ壊されたらどうすんの?
114104:01/09/04 21:20 ID:xjPsFd/I
半分ヤケクソで”面倒だから”と書いたのだが、
怒らずにマジレスしてくれた2chねらーにちょっと感動。

アーカイブ化関数、分解関数
まじめに考えてみるYO。
115デフォルトの名無しさん:01/09/04 21:57 ID:UBYhxRDc
ひとつのファイルの内容をひとつの String 型変数に代入し、
それを保持するコンポーネントを作ってしまえばよい。

保持実体を String の動的配列にしておけば、増減も簡単。
116デフォルトの名無しさん:01/09/05 00:08 ID:sRu7fn.A
>115
いまいち

Sections: TStringListってしといて
Sections.Strings[]にセクション名・ファイル名一覧を
Sections.Objects[] as TStringListにセクション名に対応した本文を格納
ってのが良いね。
117104: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;
118104: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;
119104: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;
120104:01/09/05 05:14 ID:0bwO4T7E
>>119

>続き。>>103 で結合したファイルを分離。
103じゃなくて118だ…

両関数とも動作確認済み。
もうすこし効率よくかけそうなのでアドバイスキボン。
121104: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;
122104: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;
123104:01/09/05 05:36 ID:0bwO4T7E
うーむ、ソースUP板に書くべきだったか…?
しかし、これに圧縮関数を組み合わせれば
相当いろんな事ができると思うのだが。

有益な関数だと自負するぞ。
124104: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;
125104: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;
126104:01/09/05 06:03 ID:0bwO4T7E
>>117-125
しかしなんだな。もう少し考えて書くべきだった。
同じようなコードがほぼ全ての関数に含まれている…
指定した position を基点に、ファイル名ーサイズー内容
を取り出す関数を一つ作っておくべきだった…

鬱だ。ねむいので、あとは任せた。
127デフォルトの名無しさん:01/09/05 10:13 ID:Q//JF6Ws
ファイルネーム長が256固定はヘッダでかすぎるから、可変でもいいかもしれんな。
128Delギコ: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));

こう書いている俺を笑え。ああ、笑うがいいさ。
他の書き方知らないんだよ!!教エレ
130デフォルトの名無しさん:01/09/05 10:28 ID:iRnxvvb6
>>129 あはは
FillChar(Buf, SizeOf(Buf), #0);
131Delギコ: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
  -下手人--∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< ベタベタ
  (O)----(O)U-U) \__________

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999661367&res=1
134104:01/09/05 13:22 ID:kk0fRdk.
>>133 サンクス。テキスト版参考にしてみるよ。

アーカイブ関連関数をちょっと改良して
全体量を減らしてみたけど、どうよ?
どうせ作るなら、一般的にしたほうが良いと思って。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999663627
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
139デフォルトの名無しさん:01/09/05 14:36 ID:.clmM2io
>>137 微妙に面白い・・・
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 から参照するのはダメなの?
はずしてる?
141Delギコ:01/09/05 15:40 ID:cQB7nAtY
   ヘ ヘ
  (;゚Д゚) 全然わからんが
  (つつ
   U U

PChar(Str)じゃだめ?
142デフォルトの名無しさん:01/09/05 15:41 ID:F4TkSYjU
Streamにnull終端文字列として書き出したいのかな?
dest.WriteBuffer( pchar(filename)^, Length(filename)+1 );
でよくないすか?
pointerではなく参照を渡さないといかん程度
143デフォルトの名無しさん:01/09/05 15:50 ID:kk0fRdk.
ありがとう、まさにそのとおり >>142
おかげでファイル名長を制限しない
アーカイバができました
144デフォルトの名無しさん:01/09/05 18:28 ID:Gq3L9bFM
>>133 あはは
ZeroMemory(@Buf, SizeOf(Buf));

真面目な話をすると、#0とやってnull文字を指定するより、
手続き名で直感的に分かるので視認性の向上にも繋がると思われ。
でも内部では FillChar 呼び出してるのは秘密(藁
145130:01/09/05 18:40 ID:iRnxvvb6
>>144 誤爆?
ちょっと教えて。
ZeroMemoryってD6から? 手許のD5にはないんだけど。
146デフォルトの名無しさん:01/09/05 18:41 ID:F4TkSYjU
>>145
Win API
147デフォルトの名無しさん:01/09/05 18:52 ID:iRnxvvb6
>>146
Σ(゚д゚lll)ガーン
そうだったのか。気づかなかった。
さんきゅ。
148名無しさん:01/09/05 19:16 ID:qbdJpBq6
  -馬鹿垂--∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< ウプCGIを腐らせてしまっているので、お待ちください
  (O)----(O)U-U) \__________
149デフォルトの名無しさん:01/09/05 21:08 ID:Q//JF6Ws
>ZeroMemory
つっても、実際の実装はFillChar(,,0)だけどな。Windows.pas参照。
150Delギコ:01/09/05 23:42 ID:2b4KrEsE
   ∧ ∧
   (*゚Д゚)
   /つ□  やっとD6を手に入れた。
 〜(  ノ   CLXで遊んでみよう。
   U U
151Delギコ:01/09/05 23:59 ID:2b4KrEsE
     ∧ ∧  / ̄ ̄ ̄ ̄
     (゚Д゚ ,,)<  アプリケーションWindowはどこかへ逝ってる
  _| ̄ ̄||_) \____
/旦|――||// /|
| ̄ ̄ ̄ ̄ ̄| ̄| . |
|_____|三|/

タスクバーボタンの表示がForm1だ。
いったいどうなってるんだろう・・・??

既存のコンポーネントは動作するんだろうか?
152名無しさん:01/09/06 00:49 ID:STef9XiM
  -馬鹿垂--∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  一部復旧
  (O)----(O)U-U) \__________

原因は、調子に乗って差別用語登録しまくったら(w
EUC非対応漢字?書いちまったらしい。んでチェッカーがコケてた

djデータはバックアップから修復中なんで大丈夫だと思います。
迷惑かけて正直スマン
やっぱり差別は良くないと体で覚えたーよ
153Delギコ: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
まぁ、修正を待て。
155Delギコ:01/09/06 01:21 ID:aeR3sw7s
 ∧ ∧   /
 (,,゚Д゚) <  VCLとCLXどっちでアプリ作るか悩むぞ。
  |つ つ  \
〜   |
 ∪ ∪

微妙なライブラリが違いが
別世界のDelphiを使っているみたいだよ
チョイ興奮気味

    ∧ ∧   / ̄
  ∩(,,゚Д゚) < >>154 修正で治るのかにゃろめー。
⊂,,⌒ ,,つつ.  \_
   ̄ ̄

 ∧∧∩゛  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)ノ < >>152 ご苦労様
 U  /   \____________
 |  |
ノ∪∪  オヤスミナサイ
156デフォルトの名無しさん:01/09/06 01:24 ID:vrE4kITk
そーいえば、エディトボクースで、ウニコード入力できるようにするにはどうしたらよいのでしょう。
157Delギコ: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きぼんぬ。
159デフォルトの名無しさん:01/09/06 06:49 ID:jC6yDY6U
>158
人を頼らずに自分でやれ。
まあ、他力本願だから、たいしたことも出来ずにデルファイ引退っぽいな。

TClientSocketと検索かけたら大量に出てくるぞ。

158みたいな人間は、どうせろくなプログラムをかけないんだからやめたほうがいいです。
自分で探してみて無ければ聞くのなら分かるけどな。
160デフォルトの名無しさん:01/09/06 06:51 ID:kSDzajWs
Delphi6 のヘルプは正直不備がおおいので、
Borland のダウンロードページから Delphi5の
ヘルプ最新版をDLして、並行利用したほうが良い。
161VB厨:01/09/06 08:51 ID:87jVERoo
DelphiってDirectXをバリバリにつかった3Dのアクションとか作れます?
まぁ、作れるんでしょうけどゲーム用途に向いていますか?
実行速度とか含めて。
162デフォルトの名無しさん:01/09/06 09:30 ID:EuzXF8BA
>161
速度が問題にならない限りは普通に使える。
でもチューニングに突入してポインタ(参照にあらず)使い出すと
むちゃくちゃ汚いコードになる。この辺はC/C++の方がすっきりかける。
163デフォルトの名無しさん:01/09/06 09:45 ID:fxSN01Ss
>>161
ぜんぜんオッケー。
つかむしろDelphiでゲーム作ってる人って結構多くない?

ただ、まともな3Dアクションなんて言語に関係なくそうそう見たことない。
ていうかそんなのはいわれなくてもわかるだろうけど。
いや、なにが言いたいかって言うと、つくれますか?と聞かれて、
ハイ作れますと言えるが、実際にそういうのをいちいち聞いてくる人間が
作ったためしはないということ。
FF作れる言語はなに?と対して変わらん。
164デフォルトの名無しさん:01/09/06 10:50 ID:kSDzajWs
>>157
>CLXならEditのフォントのCharSetを設定

ルーチンユニットにはCLXとVCLの2種類があるというのは
わかったんだけど、コンポーネントにも2種類あるの?
165Delギコ:01/09/06 11:00 ID:ARZrt0jo
 StrToInt('xFF');
 StrToInt64('xFF');

      ∧∧   どうして上はOKで
      ( ゚Д゚)  下は"整数じゃあ〜りません"なんだYO
      ∪ |   ボランドのイケズー。
     〜   つ
       ∪"'
166Delギコ: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にのってるのか…?
169Delギコ: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 ); はぜんぜん平気ね。
171デフォルトの名無しさん:01/09/06 11:48 ID:.IlpQb6o
>>168
全部かどうか知らないが
「条件コンパイル指定の使い方」にのっている
172デフォルトの名無しさん:01/09/06 12:16 ID:kSDzajWs
>>171
ありがとう、

Delphiプログラマーズガイド→
CLXをつかったクロスプラットフォーム開発→
クロスプラットフォームアプリケーションの作成

に載っていたよ。
173VB厨:01/09/06 12:19 ID:87jVERoo
>>163
>ていうかそんなのはいわれなくてもわかるだろうけど。
>いや、なにが言いたいかって言うと、つくれますか?と聞かれて、
>ハイ作れますと言えるが、実際にそういうのをいちいち聞いてくる人間が
>作ったためしはないということ。
>FF作れる言語はなに?と対して変わらん。

うっ、痛い所を突かれた。
でも、ガンバってみます。はい。
174デフォルトの名無しさん:01/09/06 12:25 ID:TzXlV1e6
>>173

Delでゲーム作りは仲間も多いし、ツールの能力的にも必要十分なので
VCとかでやるよりはやりやすいと思うぞ。

つ〜わけで頑張って下され。
175デフォルトの名無しさん:01/09/06 12:41 ID:kSDzajWs
あのー
Del6ヘルプのVCL−CLX対応表に、

>FileCtrl 使われなくなっている

と書いて歩けど、LINUXで実現できないとかではなくて、
あくまでも「使われていないから移植しない」て事でしょ?
FileCtrl の SelectDirectory はよく利用してるんだけど、
もしかしてもっと良い別の関数が用意されている?
176Delギコ:01/09/06 13:23 ID:ARZrt0jo
   ∧∧   / ̄
  _(,,゚Д゚) < >>175 overloadされたSelectDirectoryは氏ってる?
⊂,,__つつ.  \_

   ∧∧   / ̄
  _(,,゚Д゚) < >>173 "Delphi ゲーム"などで検索かけてみろ
⊂,,__つつ.  \ 折れはBCBをお勧めするけどな。
おもしろいネタがあったらオシエレ。

http://home4.highway.ne.jp/ora_soft/main/ora_prog.htm
http://homepage1.nifty.com/absolute/soft/abs.html
http://www.ceres.dti.ne.jp/~dycoon/
http://www2s.biglobe.ne.jp/~t_harada/index.html
177Delギコ:01/09/06 13:39 ID:ARZrt0jo
   ∧∧   / ̄
  _(,,゚Д゚) < 最も有名な2つをリンクしてなかったね。
⊂,,__つつ.  \_

DelphiX http://www.yks.ne.jp/~hori/DelphiX.html
Project Quadruple D http://www-fu.magma.ne.jp/~hayase/dddd/

   ∧∧   / ̄
  _(,,゚Д゚) < だれかDelphi&BCBゲーム開発サイトリンク集
⊂,,__つつ.  \ つくって
178175:01/09/06 14:28 ID:lykpdZBY
>>176
あ…もしかして、Win3.1ライクなSelectDirectoryが
FileCtrl製であって、もう一つのSelectDirectoryは
FileCtrlではないという事か!

納得。
179デフォルトの名無しさん:01/09/06 14:59 ID:CB3v/cXA
>>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のようにエラーにはならない。
180179: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;
-------------------------------------------
こんなのです
183デフォルトの名無しさん:01/09/06 18:37 ID:x54XUUQc
>>182
Button1Click(Sender);
だが、
イベントハンドラ直接呼ぶのはちと痛いので

Procedure TForm1.Shiki;
begin
式1;
end;

Procedure TForm1.Button1click(Sender: TObject);
begin
Shiki;
end;

// Button2の処理も同じならButton2のOnClickはButton1Clickを選んでおく /

みたいにしたいところ
184163:01/09/06 18:38 ID:fxSN01Ss
>>173
ゴメンいいすぎた。これじゃ俺も厨房丸出しだ。
せっかくDelphiに来たというのにきついこといってすまん。

>>182
関数間goto(イヤーン)じゃなくて単なる関数呼び出しなら

Prosudure TForm1.Button2click(Sender: Tobject);
begin
  Button1click(Sender);
end;
185163:01/09/06 18:40 ID:fxSN01Ss
かぶった('д`;)
182の方法の方がいいね
186デフォルトの名無しさん:01/09/06 18:41 ID:fxSN01Ss
>182の方法の方がいいね
183の方法の方がいいね

もういい。氏んでくる
187デフォルトの名無しさん:01/09/06 18:43 ID:kYlEwptk
  
188Delギコ:01/09/06 18:54 ID:ARZrt0jo
        ∫
   ∧,,∧ ∬       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,゚Д゚ノ,っ━~  < 氏なんでよろし。
_と~,,,  ~,,,ノ_. ∀  \_________
    .ミ,,,/~),  .| ┷┳━
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄   .┻
 酒でも飲んで落ち着け
189デフォルトの名無しさん:01/09/06 18:56 ID:lykpdZBY
…TListView でアイテム部分をオーナードローしようとして、
コード書いて実行したらそのままOS巻き込んでフリーズ。
それ以来 TListView のオーナードローは鬼門だと思い
手を出さなかったが…

そうか、VCLのバグだったのか…
190Delギコ:01/09/06 19:06 ID:ARZrt0jo
  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ¶(,,゚Д゚) <、、、>>189 聞いてみりゃよかったのに。
 ゝ|し |┐ \___________
 (_|./ |┘
   U U

 情報は大切ね、
 当然、既にリークしない用のD5用ListViewは
 配布されている。
191Delギコ:01/09/06 19:08 ID:ARZrt0jo
  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ¶(,,゚Д゚) <、Button1Click(nil)でもいいんだな
 ゝ|し |┐ \___________
 (_|./ |┘
   U U

読んどけ
http://hp.vector.co.jp/authors/VA009712/take/delphi/kabedel.htm#sender
192名無しさん:01/09/06 19:28 ID:3lNca4.E
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  >>190 あまり参考にはならん鴨
  (O)----(O)U-U) \__________

http://do.sakura.ne.jp/~junkroom/file/piclistv.lzh
193デフォルトの名無しさん:01/09/06 22:42
>>179
stat ってなに??
194デフォルトの名無しさん:01/09/06 23:40
こんにちハハハ。
Tリストビューを使っています。
クリックイベントとダブルクリックイベントの両方を使っているのですが、
ダブルクリックをしてもクリックイベントが走ります。(当たり前)
クリックのときは、クリックイベント、
ダブルのときは、ダブルクリックイベント「のみ」を実行したいのですが、
どうすればできるでしょうか?
クリックイベントで非常に重い処理をしているので、ダブルクリックするたびにガッカリします。
チェンジとかセレクトイベントは、使いたくないです。(マウスでクリックのときだけ処理をしたい)
デルファイのすごいひと教えて!!
195Delギコ:01/09/07 00:06
      ∧∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 @' ― (,,゚Д゚) < このへんみろ
   し― し-J   \___________

http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=007392
おそらく詳しく見ると分かると思うが
わからなかったらまた質問してくれ
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);
各変数のアドレス調べてみなよ。
「たまたま」ぴったりあうようにデザインされてるんだよ。
198Delギコ: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;

なんてやってたりすると、サイズが違うからできないってことね。
つーか、クラスを使えって突っ込みが入りそうだが…
201Delギコ: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
>>204
本人と思われ(ワラ
206デフォルトの名無しさん:01/09/07 01:28
>>195
ありがとう。まだ試してないけど、うまくいきそうな感じ。

>>204-205
ちちがうっつーの。
207206:01/09/07 01:35
関係ないけど、>>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 のような気がしたんだが。
教えてくだせぇ。
213212:01/09/07 05:20
自己レス。
よくわかんないから 非表示の memo に assigh して copyToClipboard してみた。
どうも美しくない気がする。
>>213
言いたいけど初心者だから言えない。
引きこもってよっと。
215212:01/09/07 06:28
>>214 assign の事かな・・・
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
バグではありません。コンパイラの最適化によりそうなります。
221Delギコ:01/09/07 10:39
 ∩ ∩
 | ∪ |
 |  〜
 |∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ,,゚Д゚)つ < 重要な質問とかいうな。
 U      \________

はっきりいって>>219の質問は
今まで数十回は聞いた事がある。

聞くなとはイワナーイが、重要扱いされるとウザッ
質問者以外には重要でもなんでもなし。
222Delギコ:01/09/07 10:51
>>218
    ∧∧ プハー
   (,, ゚Д゚) =3 < VCLソースみるとSetAsTextでは
   /つ日       例外処理はキチンとやってる。
 〜(__ノ

procedure TClipboard.SetBuffer(Format: Word; var Buffer; Size: Integer);
みるといいかも。

AsTextでOpen/Closeする必要はない(タブン)
223218:01/09/07 11:14
気になったのでテスト。
一つのアプリにはボタン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でボタン
クリックすると、ヤパーリ例外発生。
処理次第ではエラー処理は必須か……
タダでさえ悪いのに眠い頭で考えてるので、変なこと口走ってたらスマソ。
224218:01/09/07 11:19
ああやっぱり変なこと書いてた鬱だ氏脳。
>>223は無視してOK。慣れない徹夜はつらいっす(;´Д`)
とりあえずOpen/Closeは必要ないです。
MemoはReadOnlyにしないでいろいろやると
わかるっす。

…ところでかちゅの書込時のエラーはどうにかならないかね。
ウザイしスレごとに名前とか覚えてくれないし…
>>224
Win板のかちゅスレで聞いてみれば?



と悪魔の声をかけてみる。
226Delギコ: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ソース見れ
229Delギコ:01/09/07 12:14
    ∧ ∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ( ゚Д゚) 目< 金曜日だよー。
     |つ つ ||  \ _____________
TTTTTTTT|TTTTTT
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
::....           |  サテ キョウモ フルパワー デ シゴト サボルカ
230Delギコ:01/09/07 12:16

       ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (゚Д゚;)  < よくわからん
       ⊂ ⊂|     \___________
        |   |〜
        ∪ ∪

なぜかちゅがそうなるのかも。よくわからん

>串pacならpacソース見れ
この文章の意味も。よくわからん
231デフォルトの名無しさん:01/09/07 12:32
ところでメソッドと関数の違いは何でしょうか。

オブジェクトに従属した関数を関数と呼ぶのは間違いですか。

メソッドとメンバ関数は同義ですか。
232Delギコ:01/09/07 12:34
文字列が整数に変換可能かどうか調べるIsInt
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999491550

 ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ゚Д゚)  <  これのテスト部分10の所ってエクストリームプログラミングになりますか?
  |∪ |つ∀ \___________
  |  |
  U U  ヨクワカン ニャーイ

こういう手法はMonaUtils見て尻ました。Monazilla.orgの皆さん感謝。
233Delギコ:01/09/07 13:14
   |
電 |
   |∧ ∧
柱 |,,゚Д゚) < >>231 フィいリング。
  ⊂ |
   |  |
   |∪
, ' , ; ' ;

似たようなもんで似たような使い方はできるけど
場面によってはキッチリ区別をつけよう。

>オブジェクトに従属した関数を関数と呼ぶのは間違いですか。
メソッドと呼んだ方がいいかも。

>メソッドとメンバ関数は同義ですか。
同義かも。
メンバ関数のなかでもPublicのものをメソッドと呼ぶべきかも
>メンバ関数のなかでもPublicのものをメソッドと呼ぶべきかも
privateだろうがprotectedだろうがメソッドでしょ。
言語ガイドにはそういう区別はないから。

>>231
自分で関数と呼ぶのは構わないけど、他人に理解してもらえないことも
あるから、注意した方がいいと思う。
235179:01/09/07 14:10
>>193
stat(2)というのはシステムコールのstat。man 2 statしてみ。

Cだと構造体名の名前空間は分かれてるんで関数名と構造体名両方とも同じな
んだけど、Kylixだとそのへんはどう処理してるのかな。

struct stat st;
if (stat(path, &st)) {
 error();
}
236Delギコ: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回近く聞かれてるから住人があきれてる
239Delギコ:01/09/07 15:39
      ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 〜' ― (,,゚Д゚) < じゃ、スレたてるまでもないかちゅーしゃ質問すれがいるな
   し― し-J   \___________

FAQ作って欲しいものだ。
240225:01/09/07 15:39
>>238
以前、耐えてた方がいらっしゃいましたので「頑張れ!」とエールを贈りました。
>>239
いや、1に「仕様です」って書いてあるの。
242Delギコ:01/09/07 16:12
>'0.0000…0を10000個ほど省略…001'

  いちまんこ!!
\   
   ̄ ̄ ̄ ̄ ̄ |/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ∧ ∧∧∧
        (,,*゚Д゚) _ ,,) ハニャーン
   パコパコ/   つ   |
      (((ヽ  ノ /U
       U UU
243Delギコ:01/09/07 16:13
   |
電 |  
   |∧ ∧
柱 |,,゚Д゚) <引いた?
  ⊂ |
   |  |   タマニハ シモネタ デ ナゴンデ モラオウカト・・・
   |∪
, ' , ; ' ;
>>236
浮動小数点数そのものの仕様/表現可能な数値の範囲と
それの文字列表現値の変換仕様をごちゃ混ぜにしとるな。
245Delギコ:01/09/07 17:05
 ∧ ∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)  <  >>244 逝っちゃ割るイが
  | つ[|lllll]). \_________
〜|   |
  ∪∪

折れのつくりたいのはMyStrToFloatではなく
あくまで、CanStrToFloatだという事を忘れておるな。

既に、MyStrToFloatを作った方がイイという声が
お空の遠くから
聞こえては着ているのだが。聞こえナかったことにする。
246デフォルトの名無しさん:01/09/07 18:03
じゃ、つくれば?
開発ツールなんだからコードを作ることを否定はしないよ。

ただ、 0.00 --(結果が0になるくらいいっぱい)-- 001 を CanStrToFloat に渡したときの結果をどうする気でいる?
True ? False ?
247Delギコ: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ギコ氏ね
>>250-251
そうかっかすんな
253デフォルトの名無しさん:01/09/07 19:11
>>249

//二つ用意すれば全く問題ない。
function IsStrFloat(Str:string;var Value:Extended):Boolean;overload;
function IsStrFloat(Str:string):Boolean;overload;
254Delギコ:01/09/07 20:09
>>250-251これ使え

                ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄
               (´∀` )< Delギコ逝ってよし!
               と  と  ) \______
               | | |
   ∧∧ /\      (  (  )
  (゚Д゚/  /\   / ̄ ̄ ̄ ̄ ̄
   /  /  /\ |
   \/  /  / |
  ゞヾ \/  /〃 |
〜〜〜ヾ∽〃〜〜〜〜〜
255デフォルトの名無しさん:01/09/07 20:22
                ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄
               (´∀` )< Delギコ逝ってよし!
               と  と  ) \______
               | | |
   ∧∧ /\      (  (  )
  (゚Д゚/  /\   / ̄ ̄ ̄ ̄ ̄
   /  /  /\ |
   \/  /  / |
  ゞヾ \/  /〃 |
〜〜〜ヾ∽〃〜〜〜〜〜
256Delギコ:01/09/07 20:53
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | お前が逝け!
  \ _ _____
     ∨
         
   ∧ ∧         .∧_∧
  (,, ゚Д゚)        .( ´∀`)∵‥プシュ
━━つ━つ━━∞∞∞(  =======∵‥
〜/ ノ           | | | ∵‥
ι' U            (__)_)
     _  、  , _
   /          ヽ
  l /  /  {  l l  l
   / | ・  ・  | |  | みかんばこ!
  l {(  lIIIIIl   | | ノ
  (O`ー―― ´O _)
>>254-256
ワラタ
259デフォルトの名無しさん:01/09/07 21:44
>>245
StrToFloat 関数の戻り値は Extended 型だよね?
で、文字列を Extended 型の浮動小数点値に変換したときに
きちんと元の文字列通りに表現できているかチェックしたいんだよね?

StrToFloatした結果を途中でDouble型なんかに代入したら、さっきの
チェックは全く意味無くなるから当然プログラムでは浮動小数点値の型を
すべて Extended 型で統一してコーディングするんだよね?

これを守れないのなら厳密なチェックをする意味がない。
260Delギコ: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桁

これは例外が発生する。

そんな感じ。

いやあ、面倒だったよ。これ求めるの。
261Delギコ: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;
>>257 初めて見た。ちょっと感動した。
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
リージョンを扱ったプログラムを実行すると、必ずフリーズします。
これはリージョンを使うなというボーランドの思し召しですか。
267Delギコ:01/09/08 01:21
 ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ゚Д゚)  <  >>262 すこぶるアクセスバイヲが起きるがなぜだろう?
  |∪ |つ∀ \___________
  |  |
  U U  チョウサチュウ


   ⊂⊃
   ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (,,゚Д゚) <  >>266 重い飯です。
  ハ ̄ ̄`  \____________
  し ╋ .J
   |___|  オボシメシ ダッチューノ
   ∪ ∪
  ∬ ∬
268262:01/09/08 01:26
>>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;
269名無しさん:01/09/08 01:51
趣旨が他人にわからんと、変な雰囲気になるよ>Delギコ
漏れ的には、もちっとマターリしてくれた方がありがたい
270Delギコ: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〜が全部変換可能かどうかを確認しつつ結果の値も貰う関数ね。

従って作る必要なし。
272Delギコ:01/09/08 02:35
| |_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| |Д゚) <   >>264 教えてくれてサンクスコ
| ⊂|   \_他の皆様もサンクスコYO.
| | |
| |U
 ̄ ̄ ̄ ̄ ̄
すっげー。D6。マニア心くすぐりまくり。
(HELPに載ってないあたりがイィd(・w・)

out指令ってなんじゃろか。

調べていると、D6ではStrToDateTimeDef。までもが実装されてる!
273Delギコ: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}で囲んでもいいと思うが。
283ハッタリ:01/09/08 07:58
>>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
昇順ソートしてから反転すればいいじゃん
285280:01/09/08 09:03
>>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じゃないの?
296Delギコ:01/09/08 14:56
            ∧ ∧
      〜′ ̄ ̄(メ゚Д゚)つ
        UU ̄ ̄U    イミナイ アオリ イッテヨシ ツーカ ツネ
______∧________________

 IDが消えたら早速煽りか?
297デフォルトの名無しさん:01/09/08 15:05
>>290
可能。SList 引数自体を変更することが出来なくなるだけ。

SList := nil; <これは駄目だが
SList.Add(.. <これは出来る
>>296
つーかここ、自作自演の匂いがプンプンするんだけど
どうよ?
299Delギコ:01/09/08 15:29
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< >>298 自作自演なわけないモナー
  (    )  \_____
  | | |
  (__)_)

         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ∧∧    <  ふー。IDが消えてから大忙しだぜ
(゚Д゚∧)_∧  \____________
( ̄⊃ ´∀`)
| | ̄| ̄
(__)_)

         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ∧∧ハッ!  < なに見てんだゴルァ!!
(#゚Д゚∧_∧   \____________
( ̄⊃ ´∀`)
| | ̄| ̄
(__)_)
(・∀・) 300 Get you!!!
301HIROMI:01/09/08 16:42
>>300
ああ〜取られちゃった( ̄▽ ̄|||)
302Delギコ:01/09/08 16:48
           _________
    ∧ ∧  /
    ( ゚∀゚)< >>301 HIROMI・ゴゥー
     |つ つ  \_________
   〜   |  イヤ ナントナク
    ∪ ∪
303Delギコ: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];
この一行でいいかも。

分かって使ってらっしゃるならいいですが。
>>300
英語、変。
305300:01/09/08 17:25
>>304
わざとだって・・・

I got 300th number at this thread!!!
(なんかこれもおかしいな・・・)
306Delギコ:01/09/08 17:31
>>287
>TStringList.CustomSort使えばいいよ。

 まあ!また便利なものが...D6から...
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧    ホカホカ
   (,, ゚Д゚)∫
   /  つ旦O
 〜(__n n[ ̄ ̄ ̄.]
         ̄ ̄ ̄
307Delギコ:01/09/08 17:46

  ∧ ∧||| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (||゚Π゚)< Formatのトコ。間違えた。前方0を付属したいのは数値じゃなくて文字列だったのね。
〜/J. | |J  \_______________________________
 UU | |  キガツイタ ヒト ダケ ムシ シテクレ
308Delギコ: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
309センス悪いぞ:01/09/08 17:56
普通にStrToInt使って比べりゃいいのに。
負数ははどうするんだ?
310Delギコ:01/09/08 18:17
>>309
>負数ははどうするんだ?

    ガビーン
  ∧ ∧||| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (||゚Π゚)<  忘れてた。
〜/J. | |J  \_______________________________
 UU | |
311Delギコ:01/09/08 18:53
とつぜん話かえるけど

  ∧∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚)  < Delphianでデザパタやってる人いる?
 ヽ/つ且~~  \___________
  (__ _)

なんの本を読んだらいいかニャー?
>>305
(I) Got it! でええのでは?
取っちゃった! 解っちゃった! という意味。
>>311
Delphianというのが、デルファイを使う人という意味なのか、
それとも製品名なのか知らんけど、
デザインパターンは使ってる。
つーか、C++でバリバリ使ってたからね。
314デフォルトの名無しさん:01/09/08 21:07
バリバリ。。。
315313:01/09/08 22:12
すまぬ、中年オヤジだから許しておくれ。
中年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本書けや
ギコがデザパタと言うと、これ?(w
http://www.hyuki.com/dp/cat_index.html
321デフォルトの名無しさん:01/09/08 23:42
>>319
Delギコのデザパタ本欲しい(w
サンプルソースにもAA入ってるんだよね。もちろん。
322デフォルトの名無しさん:01/09/08 23:52
へこへこ GTK のプログラミングについてききたいよ.
ここじゃだめってときはどこか教えてよ.
Widgetをgtk_container_add などなどした場合 親のポインタから
子このポインタを探る方法がしりたいよぉ.
できれば賢く知る方法がいいよ.
323Delギコ:01/09/09 00:45
> Delギコ暇そうだからObject Pascal版
> デザインパターンのサンプル23本書けや

 何せもうすぐ会社辞めるからね。
 フリーだよ、フリー。一日中フリータイムね。

 ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ∧∧
   (   )
   /  |
 〜(,_,,ノ

  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (;゚Д゚) < …それって無色カモ
  ./  |    \__________
 (___/
/    ヒッキー マッシグラ?
delphiの初心者質問スレはどれなんだ・・・
325ななしぷろぐらま:01/09/09 01:47
>>287
値を返す目印かぁ.なるほど.
いままで引数名の頭にwをつけたりして区別していたのですが,
out を使うほうがわかりやすくていいですね.
326名無しさん:01/09/09 02:48
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  必ずInしてこないという事は、初期値は不定値でよろしいか?
  (O)----(O)U-U) \__________

仕事テンパーリ中
327Delギコ:01/09/09 03:03
>>287によるとvar指令とアセンブラレベルで一緒らしいから
実際は呼び出し側の値が引き継がれるのでは?

保証されないという名目で実はvarと同じと思う。

   ∧∧   / ̄
@_(,,゚Д゚) < わからーんけど。
⊂,,__つつ.  \_
328デフォルトの名無しさん:01/09/09 03:15
>>326-327

>>283にかいてあるじゃん。ヘルプにも。
---------------

呼び出し側で(中略)の内容が解放され,すべてのフィールドが未定義の状態に戻されます。
(中略)
out パラメータの値は必ずしもゼロにクリアされるわけではありません。レジスタに置かれた値は,そのまま呼び出し先に渡ることがあります。しかし,out パラメータ経由で渡された値を使った場合は,予期できないことが起こりえるため,使わないようにしてください。
329名無しさん:01/09/09 03:24
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  燃え尽きてきたからもう寝るです
  (O)----(O)U-U) \__________

>>328スマソ&サソケス
330Delギコ: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メッセージを受け取って
処理を行おうと考えいる事です。しかしながら、私にはその方法が
わかりません。現在、数秒ごとに全ての窓の位置を調べて、
その情報を元にして処理をしています。

どうすれば、ほかのアプリーケションのメッセージを私のプログラムに
よって監視する事が可能ですか。
336>335:01/09/09 12:03
それWinAmpの窓やAutoWindow(だっけ?)みたいな奴でしょ。
ぜひWin2kに対応して公開してよ。
つーかWin32APIスレのがレス付きそう。
337関係ないけど:01/09/09 13:17
>>335
日本人の口調とは思えない…
338デフォルトの名無しさん:01/09/09 13:50
ちんこ
339335:01/09/09 14:50
画面ぴったりネッチョリツールの副産物として生まれた
ウィンドウ操作関連APIのラッパークラス
(と呼んでいいのかな?)です。
このコードが Win2K 上で動作するかどうか確認してくれません?
問題なく動けば、いま私が作っているツールは
そのままWin2k対応になりますですハイ。

ユニットコード及びサンプルコードは↓の1と2
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1000013243
340デフォルトの名無しさん:01/09/09 16:03
>>311
Delギコ氏よ
>>320のページの作者が書いている
「Java言語で学ぶデザインパターン入門」
がかなりおすすめだぞ。
俺が勉強してた頃はガンマ本しかなくて苦労したが、
今これを読むともっと楽できたのにと思う。
341デフォルトの名無しさん:01/09/09 18:11
Delギコは氏んで下さいよ。
342Delギコ:01/09/09 20:14
      ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′ ̄ ̄( ゚Д゚)< >>340サンサンサンクス。
 UU ̄ ̄ U U  \_____________

            ∧ ∧
      〜′ ̄ ̄(メ゚Д゚)つ
        UU ̄ ̄U
______∧________________

おまえが市ね。下らんアオリするヒマがあったら首くくれ。
343Delギコ:01/09/09 20:27
カキワスレ
  ∧∧
 ¶( ゚Д゚) || <あ゙〜
 ゝ|し |つ||
 (_|./ | 人 342 の後半は341宛てね。
   U U 川
344340:01/09/09 21:00
くくろうかとオモタヨ。
345Delギコ:01/09/09 21:06
>>340スマソ

       ∧ ∧  ・・・・。 ブルーニャ
       ( ゚Д゚)
       |∪ |
      〜|  |
       U U

じつは、つまずいてころんで
捻挫してしばらく松葉杖生活…

足。痛すぎ。痛み止めないとあまり思考ができない。

医者に骨に小さいヒビ入ってるかも氏れんと言われた
346Delギコ:01/09/09 21:30
___  ヽ
_ /⊂ `∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | |  \( ゚Д゚)< 仕事が忙しすぎるから
  | /   ∪ ∪  \_____________

          ,,ヽ
         ⊂, `\⊃ ベチャ / ̄ ̄ ̄ ̄ ̄ ̄
           \∧∧   <  怪我でもしたい。
           ⊂(,,゚Д゚)つ))  \______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 と考えてしまったアナータは
 すでにヤバイ状態なので仕事休めよ。
 これ読んどけ。

ITプロフェッショナルを襲う“心の病”
http://www42.tok2.com/home/from2ch/kokoro/

 実際、怪我したらつらいな。コンビニに出かける事も苦痛だ。
347デフォルトの名無しさん:01/09/09 21:44
>>346
俺プログラマ志望だけど…
みなさんはこれを読むと「うん、うん、あるある」って
感じ何ですか。
>>347
泣きたいほどあるある
あの… 周りに居るプログラマで心の病気にかかる人の割合は
どのくらいで…
350名無しさん:01/09/09 22:28
まぁ60%かな。あとは転業が40%
>>349
プログラマ板にいくと、その関連のスレッドがいくつかあるぞ。
(゚Д゚) 結局100%じゃん...
プグラマ版に逝ってきます。
353350:01/09/10 00:47
>>352
ぶわぁ〜れたか
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ぢゃなぃから
356たのもー:01/09/10 01:13
VBで色色な周波数の音を鳴らしたいんですけど、どうしたらいいですか
>>356
まず氏んでください。
>>356
まず適切なスレッドを探す技能を身に付けてください。なぜ Del スレに書く?
>>358
微妙に>>1の書き方が悪いかも。。。
360357:01/09/10 01:35
>>359
そーだったのか・・・356すまん。
Delギコ氏んでください。
>>356-360
ジサクジエン?(・∀・
362名無しさん:01/09/10 01:41
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  あいよ >>356
  (O)----(O)U-U) \__________

http://plaza15.mbn.or.jp/~Kentaro/
このスレは Del *だけ* なの? >>1
364357:01/09/10 01:44
>>361
なんでやねん?
365(笑):01/09/10 04:32
(笑)
366(夫):01/09/10 05:12
(夫)
367(供):01/09/10 05:43
(供)
368(抵):01/09/10 06:12
(抵)
>>365-368 しょう ふ く てい?
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でも可)
373たのもー:01/09/10 09:15
>>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でカバーできないのはどんな領域?
>>379
IEコンポ
帳票ツールのAPIがCOMになってる場合>>379
>>379
DirectXとかShell関連とか
383デフォルトの名無しさん:01/09/10 13:52
TListBox に Count プロパティついたんだね。
いままで ListBox1.Items.Count と書こうとして
ListBox1.Count としてコンパイル失敗した事が何度あった事か…

      ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 @' ― (,,゚Д゚)つ < うれしいぞ!!
   し― ∪     \___________
384たのもー:01/09/10 15:23
>>378 んじゃどうするかというと440Hzの音を鳴らすなら
たとえば sound(440) 見たいなことが出来るものとおもってました。
ありがとうございます。

>>379
周辺機器付属のライブラリがCOMオブジェクトとして提供されているので使わざる終えません。
385デフォルトの名無しさん:01/09/10 16:20
OH NO!

TMemoeyStream を使ってファイル結合ソフト作ったんだけど、270MBの動画を5つに分割したファイル、これを
結合しようとしたら、

「メモリ展開中に領域が足りなくなりました」
ってエラーがでた。
どうすりゃいいですか…
>「メモリ展開中に領域が足りなくなりました」
だれが出してるメッセージだい?
387Delギコ:01/09/10 16:29
 ∧∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)  < 足イタイ
 U  ,つ゛  \____________
 |  |
ノ∪∪ リョウヨウチュウ

WideCharやCOMやout指令のお話
調べてくれてる人。ありがとう。

勉強になるよ。
388Delギコ:01/09/10 16:31
|   |  |     |  | |
|  |゜⌒/..| \ | ゜|
゜ ⌒// ..| ゜ \  ゜  |
| / / | | |ヽ゜ \⌒゜ |
| . ̄ ̄ ̄ ̄|| ̄ ̄ ̄ ̄
 |  ∧ ∧||   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|   (,,゚Д゚)|| < みなさま、台風にはお気をつけて。
゜ | ..|∪ つ  \______________
 | |.| |   |   |
___.U..U____     ゜

台風の時は自動車保険が出ないので
くれぐれも事故には注意!

…14台玉突き事故もあったって。

Delには関係なくてスマソ
389デフォルトの名無しさん:01/09/10 17:15
Edit1に番号(例:001)を入力してから、Bottun1をクリックすると
ブラウザ(例:IE5.5)で表示するようなプログラムを作りたいです

サンプルコードありませんか?
×Bottun1
○Button1
391Delギコ:01/09/10 18:17
    ∧ ∧   / ̄
  ∩(,,゚Д゚) <  これかニャ?>>389
⊂,,⌒ ,,つつ.  \_
   ̄ ̄
WebBrowser に直接 HTML を表示する方法
http://members.jcom.home.ne.jp/monazilla/document/directwrite.html

ブラウザに何を表示させるのかがわからん。
>>390そんなくだらない訂正はいらないので
質問はもっとわかりやすく書きなさい。
392デフォルトの名無しさん:01/09/10 18:30
Delギコ氏んでくれ マジで。
かわいこぶりっこしてるとこがむかつく。
393デフォルトの名無しさん:01/09/10 18:32
>>392
粘着っぷりにワラタ
394Delギコ:01/09/10 18:40
 ∧∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)  < いいかげん。しつこいな。>>392
 U  ,つ   \____________
 |  |
ノ∪∪ オマエ ガ 氏 ンダラ カンガエテ ヤル
     マターク 2ch ネンチャク ツーノハ・・・

   ∧∧
   (,, ゚Д⊆0___,,
   |⊃二O,---' ̄ ̄
  〜|   |
   .∪∪ ヂウ ノ オテイレ スルカ ニャ
395名無しさん:01/09/10 18:55
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  マイムマイムマイムマイム♪マイムメッサッソ♪
  (O)----(O)U-U) \__________

ファイルウプ機能の実装中
パラメタをMIMEデコードにバラさにゃならん方式変更だけウルトラめんどい
あとは、きっとなんとかなりそうです
作者にめっさ失礼だがベースのソースがきちゃな過ぎ
共通関数をplに纏めろよって思いまくりsage
396Delギコ:01/09/10 19:28
   ∧ ∧ タレメ シャチョウ コラム(ダイ3カイ) ヨンダ?
   (,,゚Д゚)
   U  U
  〜|  |
   U U

> 従来からトレーニング、サポート、コンサルティングというサービスビジネスは行って
> いたのですが、さらに拡大して、システム受託、Pilot Programの作成、Feasibility
> Study、プログラマーの派遣等も行います。

金儲けのためとはいえ
一介のJava業務アプリ請負屋なんかにはならないでもらいたいな
397デフォルトの名無しさん:01/09/10 20:12
>共通関数をplに纏めろよって思いまくり

すんません、plってなんですか?
私も自分のソースを公開したいと思っているので
とても気になります。
398389:01/09/10 20:20
>391
なるへそさんくす
.plってperlのソースコードの拡張子。
つーかperlで汚いは誉め言葉。>395
>>396
気づくのおそかったな。日本のユーザーは見捨てられたんだよ。
401397:01/09/10 21:26
>399
サンクス。Perlか…

>>共通関数をplに纏めろよって思いまくり

なんか混乱してるんだけど、Delphiのソースコードを
Perlに埋め込むのか???

それともDelphiとはマターク関係ない話なのか。
>>401
マターク関係ないPerlの話だと思われ。
403Delギコ:01/09/10 21:45
   ∧∧ プハー  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (,,゚Д゚) =3  < Perlはソースアップ板の話では?
   | つ日~~    \___________
  〜|  )
   U U
置いてよし認定委員会(って題名なのか?)
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
404397:01/09/10 22:21
あ、なるほど。読解力が足りませんでした。
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
はドキュンプログラマなので放っておきましょう
410385:01/09/10 23:43
>>409
理由は?
 いやガンバッテね 米ヤフからのダウンツール作ってんでしょ?
>>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 で定義されてないぞ。
414385:01/09/11 00:09
もういちど確認してみました。
「メモリストリームの拡大中にメモリが足りなくなりました」ってエラーがでてます。ハイ。
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
>>419
VBにもあるヨ
421名無しさん:01/09/11 01:17
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  >>399 じゃあ「ばっちぃ処理」って事で(ワラ
  (O)----(O)U-U) \__________

なーんて、偉そうな事いえる職人じゃないのでsage
422デフォルトの名無しさん:01/09/11 01:21
waveOutOpen やらなんやら、
Delphiで任意の音波形を出力する
サンプルプログラムはありませぬか。
423名無しさん:01/09/11 01:22
>>403
  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (  ,,) <  題名なんて飾りです!
  ./  |   \ それが偉い人にはわからんのですよ
 (___/    \_____________


  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚) < なんつったりして
  ./  |    \_____________
 (___/
424デフォルトの名無しさん:01/09/11 01:47
すいません。IDEで質問なんですが、設計時にコンポーネントを貼り付けると
コンストラクターが呼ばれてその後IDEに制御が戻ってしまうんですが、
制御が戻った後でもタイマーイベントか何かでコンポーネントに制御を戻す
ことは出来ないんでしょうか?

考えてることは、設計時にフォームにそのコンポを貼り付けると
コーディングを監視できるとか、あるいは簡単なゲームができる
とか、お遊びかもしれませんが出来ないでしょうか?
>>414
「メモリストリームの拡大中にメモリが足りなくなりました」

(仮想記憶 - (OS その他が使うメモリ) ) / 2 までなら確実に処理できるよ?
微妙な場合は, ストリームをちびちび伸ばしていくんじゃなくて,最初にボンとでっかく確保。
426誤爆人:01/09/11 02:02
>>418-420
JとD両使いだが、最近は

>TStrings s = Form1.ListBox1.Items;
>s.Objects[0];

こっちの書き方のほうが好きだな。変数名はもっとマシなのにするが。
withが対象が明確じゃなくなるから。

Javaは使う場所で変数宣言できるからそれほど不自由しない。
Delphiはvar節で変数宣言しなきゃならんから上のような書き方は多用しにくいわな。
ま、慣れの問題だ。
427誤爆人:01/09/11 02:09
>>424
コンストラクタで別スレッド生成してそいつが行動すればいいんじゃないか?

コーディング監視はOpenToolsの範疇か?
可能かどうか分からんが。
そういや昔And, Or, Not回路コンポとか作ったな
429デフォルトの名無しさん:01/09/11 02:13
>>428
なんか電子ブロックっぽくて面白そう
>>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ダイアログに貼り付け用?)、
設計時でもリアルタイムにメラメラ燃えてて笑った覚えがある。
433Delギコ: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をラップしたコンポが幾つか上がってる。
あれを使う(またはソースを参考にする)ってのはどう?
437Delギコ: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;
こんな感じでローカル変数的にも使えて便利

皆も要望出してくれよ
>>439
参照を代入すればいいだけでは?
441439:01/09/11 13:54
>>440
classの場合はそれでも効率変わらないけど
recordの場合は効率違うでしょ?
442デフォルトの名無しさん:01/09/11 14:42
LaBVIEW使ってる人、あれはつかえるのか?
443デフォルトの名無しさん:01/09/11 16:18
どなたか、このコードが Win2K 上で動作するか
どうか確認してくれません?
サンプルコードが問題なく動けば、いま私が作っているツールは
Win2k対応になるのです。

ユニットコード及びサンプルコードは↓の1と2
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1000013243
444Delギコ:01/09/11 16:26
  ∧ ∧    /
  (,,゚Д゚)  < なんの話?
  U  U   \>>442
〜|  |
  ∪∪

せめてURLクレ
http://cotangent.ni.com/worldwide/japan.nsf/c362761bd12fc417862564bc006784d3/EDC85C291B1E8A5C862568D20063A7A9?OpenDocument

  ∧ ∧    /
  (,,゚Д゚)  < がんばって!>>443
  |⊃ ,⊃   \
〜|  |
  ∪∪ イマ NTナノ

Window同士が磁石でくっついたりするの
作ってるのかな?
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
>>443
XP RTM では動いたぞ。
449デフォルトの名無しさん:01/09/11 16:52
ちと亀だが...

>>319
>Delギコのデザパタ本欲しい(w
>サンプルソースにもAA入ってるんだよね。もちろん。
ヲレもほし〜。

どう?>Delギコ 殿
450Delギコ:01/09/11 17:10
   ∧ ∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ( ゚Д゚)   <  アナタ モ キョウカラ Delギコ ニ ナロウ>>449
.=| |==U=U==.| |= \___________
 | | |  |  | |
 | | ノU U.  | | チョサクケン トカ タブンナイシ(ワラ
 | |      .| |

そもそも、新人ギコ氏のパクリだぞっと。

前スレ
( ゚Д゚)ノ Delギコ猫のプログラミング相談室part2
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=999482946

の20より
( ゚Д゚)ノ ギコ猫のプログラム相談室part5
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=980521175
( ゚Д゚)ノ ギコ猫のプログラム相談室part4
http://piza.2ch.net/tech/kako/971/971446820.html
( ゚Д゚)ノ ギコ猫のプログラム相談室part3
http://piza.2ch.net/tech/kako/965/965916840.html
451Delギコ: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   人
 ̄ ̄ ̄ ̄ ̄| (__)_)
 ̄ ̄ ̄ ̄ ̄
あーひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃ
ひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃひゃ
456Delギコ:01/09/11 20:18
シツモーソ
   ∧∧   / ̄
@_(,,゚Д゚) < 列挙型の変数から列挙型の名前を取得するの
⊂,,__つつ.  \どうするのでしたでしょうか。

   オボロゲ ニ TypeInfoユニトあたりに関数があったような記憶。
457Delギコ:01/09/11 20:29
                ∧ ∧   / ̄ ̄ ̄ ̄ ̄
                (゚Д゚ ,,)<  カイケツしました。
             _φ_⊂)__ \_____
           /旦/三/ /|
        | ̄ ̄ ̄ ̄ ̄|  |
        |千葉ピーナッツ|/
          ̄ ̄ ̄ ̄ ̄
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=057555

かちゅーしゃが止まってしまた。
458デフォルトの名無しさん:01/09/11 20:46
>>456
>オボロゲ ニ TypeInfoユニトあたりに関数があったような記憶。

まじで!?
いままでずっと

type
 TSignalColor = (scRed, scBlue, scYellow);
const
 SignalColorString:array [TSignalColor] of string=
                ('scRed','scBlue','scYellow');

こうやってたYO!
調べてみるか…
459Delギコ:01/09/11 21:09
    ∧ ∧   />>458
  ∩(,,゚Д゚) < RTTI関係の強化はタチカD5からだから
⊂,,^__つつ.  \下位互換コードじゃなくなるのかな。

ヲキヲツケテーテ
たしかプロパティ経由なら取れたような・・・
誰も書かなかったら明日調べて書く、といってみるテスト
461デフォルトの名無しさん:01/09/11 21:29
上位互換とは、
上位機種でしか使えない機能の事ですか?
「完全上位互換」とは、昔のものはまったくコンパイルできないという意味ですか。

下位互換とは、上位機種でも
下位機種の機能を使う事ができるという意味でしょうか。「完全下位互換」とは、どんな昔のコードでも最新版で
コンパイル可能である事を示しますか。
>>461
綺麗に逆です。
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
事故?攻撃?
>>466-472
ニュース板逝け
>>472
日本語わからないの?
474460:01/09/12 00:38
アメリカとんでもない事になってるね。
列挙型の文字列を得るサンプル。あんま厳密でないけど。
フォームに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;
475Delギコ:01/09/12 10:01
 ∧∧∩゛  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)ノ < ニューヨークに行きたいかー!!
 U  /   \____________
 |  |
ノ∪∪


    ∧∧   ・・・・.
   (  ,,)
   /  |
 〜(,_,,ノ

  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚) < 全然逝きたくニャイ!
  ./  |    \__________
 (___/
/   
  
さすがにしゃれになんねーよ。今日は失せろ。
477デフォルトの名無しさん:01/09/12 10:35
Delギコうざいよね、氏んでほしい
478Delギコ:01/09/12 10:55
  | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
  | しばらく休業
  |_______|
    ∧ ∧ ||
   (,,゚Д゚)||
    /つ つ

>>474サンクス
479デフォルトの名無しさん:01/09/12 11:01
>>476-477なんか気にするなDelギコ。
480Delギコ:01/09/12 11:23
  | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
  | 事実は小説より奇なり
  |_______|
    ∧ ∧ ||
   (,, ゚Д゚)||
    /つ つ   >>479Sunクスコ

でも、気楽にプログラしてる気分でもないし
変な荒し対策に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
>>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でやれば良いよ」と言いますがどうやれば良いのかわかりません。
どう言うことなのでしょうか?
492 :01/09/13 02:17
>>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;
>>492
>>490にてガイシュツ
495デフォルトの名無しさん:01/09/13 02:44
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  処理を1〜3にわける必要がない可能性は無いか?
  (O)----(O)U-U) \__________

あとマジックナンバー使うなゴルァ
496 :01/09/13 02:51
>>491 いっそのことやりたいこと全部書いて見ろ
497誤爆人:01/09/13 03:58
やべ。MemCheck組み込んだままVectorに登録しちまったぜ
498491:01/09/13 08:11
>>493
なんか「Key=  」の部分をconstにしろとか言ってました。
499誤爆人:01/09/13 08:14
>なんか「Key=  」の部分をconstにしろとか言ってました。
的外れ
500rr:01/09/13 08:41
マジックナンバーつかわず定数にしろって意味かね?
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?ようわからんね。
言った本人に聞くのが手っ取り早いと思うが。どうよ。
503379@間があいちゃったけど:01/09/13 11:09
COMの用途は異言語間で使えるクラスライブラリってことなんですね。
# あまりにあたりまえすぎる結論ですが・・・

ではObject Pascalで完結している場合、interfaceを使うメリットは何でしょう?
一般的なインターフェースのメリットは理解していないわけではないけれど、
VCLなインターフェースとはちょっと合わないような気がしてます。
自前のライブラリでinterface使っている人います?
504491@初心者:01/09/13 11:53
>>501
ありがとうございました。
出来ました。

491の処理がすっきりしました。
友人の言ってた事はこういう事だと思います。
505デフォルトの名無しさん:01/09/13 12:18
Del6のサンプルコンポ
ShellListView で、特定の拡張子をもった
ファイルのみを表示するということは出来ないですか?

Win3.1の FileListBox はマスクを指定できて便利だったんだけど…
506501:01/09/13 12:20
え、マジであってたの?
49 が I ってのはかなり勘でやってたんだけども。
確か 41 が A だったような。
507491@初心者 :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
を全フォームで宣言するのは効率よくないのでモジュールなりで宣言して使い回したいのですが
出来るでしょうか?
508誤爆人:01/09/13 12:30
>>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, .. という定数が
既にあったような…
510491@初心者: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のキーコードだから。
513名無しさん:01/09/13 13:05
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  VK_F1はwindows.pasに定義済だが
  (O)----(O)U-U) \__________
514名無しさん:01/09/13 13:08
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  遅かった
  (O)----(O)U-U) \__________
Del6 開発者ガイド
 +-- Delphi プログラマーズガイド
     +-- CLX で異なる機能
            その他の違い
--------------------------------
Windows では,〔Enter〕キーの OnKeyDown イベントと
KeyUp イベントのキー値は 13 です。Linux では,
この値は 4100 です。ハードコードされた数値をチェック
する場合(〔Enter〕キーの値 13 など)は,Delphi アプ
リケーションを Kylix に移植するときに数値を変更する
必要があります。
516デフォルトの名無しさん:01/09/13 13:10
遅かった。
517誤爆人:01/09/13 14:35
ん?じゃぁKylix/CLXではキーコード定数自分で定義しろってこと?
518Delギコ:01/09/13 15:02
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | そろそろ平常操業  |
 |_________|
    ∧∧ ||
    (,,゚Д゚)||  マターリ イクカ
    /  づ||O
  @(___ノ  
>>518
おかえり! 待ち兼ねてたよん。
Delギコ氏マターリと復活!!
521Delギコ:01/09/13 16:07
    ∧∧   / ̄
  _(,,゚Д゚) < >>505 試したけど簡単には無理みたい。
乙,,__つつ.  \_ シェルだし。HELPないし…
ネコ ニャ ワカラン

出来たら便利なんだけどなあ。
OpenDialogみたいなのが簡単に作成できるよね。
522505:01/09/13 16:17
事故レスだ。
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のソース見れないからわからんが…

がいしゅつだったらスマソ。
526Delギコ:01/09/13 17:23
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| >>522-523すごいですやん!(関西風)
\___  _________
      ∨
♪   ∧ ∧ ♪
    (,,゚Д゚).  ♪
     |つ[|lllll]).
   〜|  |   ShellListViewトテモ ベンリ ニ ナタ
    U U

AddFolder…フォルダの新規作成時に出る
イベントかと思ってしまた。

>>524調査中。
527Delギコ:01/09/13 17:46
  ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚)  < SampleのVCLはソース月?
  U  ,つ゛  \____________
〜|  |
  ∪∪

>>525
(D6パソナルでも)TCustomShellTreeViewのソースはこの辺。
$(DELPHI)\Demos\ShellControls\ShellCtrls.pas

TCustomShellTreeView.Pathプロパ辺りがぁゃιぃ。

ソースみるにはProじゃないとつらいな。
つらくなくても、理解には程遠いが。
528491です: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 ってコンポーネントを作ってしまえば?
>>528
1個だけ。
とりあえずこれ見てみ。
ttp://www2.big.or.jp/~osamu/Delphi/Tips/other.cgi#0194.txt
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
   //フォント変更処理

このようにするのも手だね。
532Delギコ:01/09/13 22:51
  ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚)  < もそっと。質問上手にナーレ
  U  ,つ   \____________
@|  |
  ∪∪  ナマエ ワスレタ

なんにしても、もっと勉強してサンプルの掲載も上手になって欲しい。
情報が無さすぎて答えるのが困難。

まさか、TLabelを複数同時選択して
フォントかえるだけでよかったりしない?>>528
533528=491:01/09/13 23:29
>>532
えーっと、実はDelphiでは無くkylixなんです。
フォントは都合上変更できないんです。(上からの指示で、、)
534Delギコ:01/09/13 23:42
>>533
>実はDelphiでは無くkylixなんです。
   ∧∧   / ̄
@_(,,゚Д゚) < そりゃ、わかっちょるって。
⊂,,__つつ.  \_

だから、Delphi6CLXで動作確認してるって書いたデソ。


>変更できないんです。(上からの指示で、、)

      ∧_∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  /\( ´∀`/|  < やめてくれー
 \ (⊇__|/∧ ∧\/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   | ̄    | (, ゚Д゚)< その上司捨てとく?
   | ミカンC=  |  \_____________
   |____|/|  |
          |  | 〜
          U U

でも、Fontを変えるんじゃなくてFont.Sizeを変えたいんでしょ?
フォントサイズも変えてはだめなの??(そんなわけないと思うが)

いったいぜんたい、何をしたいのか全然わからない。
アナタがどこまで理解しているかもわからないので。
それが伝わるように注意してクダちイ。

1つの質問もきっちり相手に伝えられないようじゃ
この業界ツラーイYO
535528:01/09/13 23:49
>>534
上でも書きましたが実行時に起動時にフォントサイズがFontsizeが変更されてしまうんですよ。
コード内でフォントサイズを指定すると大丈夫です。
でもLabelの数が大量にあるため全部にフォントサイズを指定するのが大変だと思いまして、、

<わかりやすく書くと・・・>
オブジェクトインスペクタで13と指定する
実行すると10のフォントサイズになる
なんとかしたい
コードに書き込もう!
直った!
でもラベルの数が大量にある&コードが汚くなる、、
教えてください!!

こういう事です。
536Delギコ:01/09/14 00:19
>上でも書きましたが実行時に起動時にフォントサイズがFontsizeが変更されてしまうんですよ。

    ∧ ∧   / ̄
  ∩(,,゚Д゚) < それは再現性のあること?
⊂,,^__つつ.  \_

なんらかのほかの原因は考えられない??
アプリケーションを1から作ったとして、それでも再現するのかどうかを
まず伝えてくれよ。

Formが沢山あるらしいが
アナタが1から作ったもの?引継ぎ?

それがわからないと
>コード内でフォントサイズを指定すると大丈夫です。
これに対する返事の仕方が出来ないでしょ。

Kylixのバグかもしれないし。
537Delギコ: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/
538Delギコ:01/09/14 00:25
    ∧∧   / ̄
  _(,,゚Д゚) < 江良そうに、逝たのにマチガタヨーン
乙,,__つつ.  \_ ゴメンチャイ

失礼しました。

×   TLabel(c).Size := TLabel(c).Size + 5;

訂正

○   TLabel(c).Font.Size := TLabel(c).Font.Size + 5;
539528:01/09/14 00:29
>>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);

などとして使う。
542540=541:01/09/14 00:40
てかログ見たら思いっきりDelギコと被ってた…鬱打スマソ聞き流してくれ
543Delギコ:01/09/14 00:43
    ∧∧   / ̄
  _(;゚Д゚) < Kylixはまだまだなのかな?
乙,,__つつ.  \_

>もしかしたらkylixのバグかもしれないしKDEの設定かもしれないです。
そうでしか。そうなるとわからなくなりますね。
悪かったでございます。それも含めて再現性の追及が出来るといいっすね。

余談の内容はチョチ怖い。

KylixMLが寂れに寂れてるので
質問をして盛り上げてみるのはどうですか?
バグだとしたら中村先生タンは教えてくれるんじゃないかな。
(あくまでも簡単に再現性を確認できるようにしてね)

>>540さん。サンクスコ。

  ∧∧∩゛  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚)ノ < では。おやすみ、なっさい。
  U  /   \____________
@|  |
  ∪∪
544528:01/09/14 00:46
>>540-541 & Delギコ

ありがとう御座います
いまDelphi6で動きました。
あした会社でkylixで試してみたいと思います。
545デフォルトの名無しさん:01/09/14 00:56
LabelってTlabelで宣言されてるのでフォーム上の全部のLabelがコード上のフォントサイズになりますよね?
一部のLabelのみ指定フォントサイズにする(もしくはその逆)って出来ないですか?
PanelやGroupBox使えば出来そうなんですが、、
546Delギコ: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になるのでは…
550524:01/09/14 03:08
>>524
自己解決しては見たけれど、理想には程遠いのです。
だれか、もっと頭の良いコードに改造してください(;´Д`)

↓一応問題を解決したコード。実行してみれば分かるけど … ねえ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1000404430
551524:01/09/14 03:57
少し改良しましたが、まだなんとも。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1000404430
の2です。よろしくです。
552424です:01/09/14 08:11
亀レスですが、OpenToolsAPI、面白いですね。

いろいろ調べてみて
http://www.delphi32.com/vcl/lists/sc_n_73.asp
ここのソースが参考になりました。

IDEClock 1.1ってのが非常に参考になります。
IDEのメインウィンドウに現在の時刻を表示するだけですが、
このソースを参考にしてタイマーイベントを取って来れました。

何故かDelphi6ではOpenToolsAPIが大幅に変更になったようで
以前のバージョンのソースがそのままでは使えません。

Kylixを意識して改変したのかもしれませんが、それならそれで
Borlandはこれに関する技術情報をきちんと開示してほしいです。

折角なのでわたしの調べた範囲でOpenToolsAPI関連のリンク張っておきます。

[ソース関係]
http://www.tempest-sw.com/opentools/examples.html
http://www.delphi32.com/vcl/lists/sc_n_73.asp

[FAQ,TIPS,LINKS]
http://www.gexperts.org/opentools/
http://cjandia.freehomepage.com/me/works/delphi/articles/newide/newide.html
http://www.geocities.com/SiliconValley/Way/9006/ota.html
http://delphi.about.com/library/weekly/aa033099.htm

他にもあるかも
553528:01/09/14 12:01
>>540-541
無事kylixでも動きました。
一部のLabelのみフォントサイズ指定も出来ました。

If Ctrl.Components[I].Tag = 1 Then
で解決です。
>>552
参考になります。アリガト
555Delギコ: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 ソースみりゃ、一発だろ?
557Delギコ: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 ではキャプション文字列での検索が出来ないし…
562Delギコ:01/09/14 16:11
   ンマーー ネコ ビックリ
  ∧ ∧∩
  (゚Д゚,,)ノ
   |  つ
   | ⊂)〜
    ∪

>>559
すげーよ。アンタが大将♪アンタが大将♪アンタが大将♪

動作確認しました。
FileFormatってキーを自分で作成するのね。

最初、ネ夕かと思テシマタ。

大サンクスコ
>>562
某国のことだからそのくらいの細工はしているだろうとは思ったが
ほんとにあるんだね。

ただそれやっちゃうとせっかく UNICODE にした意味がなくなっちゃうんだろうね。

EUC とか Shift-JIS とかを考えなくてすむので、CLX アプリにとっては
大事な機能です。
>>559 はブラクラ。もとい IDE が立ち上がらなくなります。
誰か削除願いを。
565Delギコ:01/09/14 17:46
>>564
      ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 @' ― (,,゚Д゚)つ < 折れのではうまくいってるが?
   し― ∪     \___________

IDEが立ち上がらなくなったら
レジストリ元に戻せばいいことだろ。なぜ削除願いをせねばならん?

デマ野郎なら放置PLAY。
>>560
EJBって何?
>>566
Enterprise JavaBeans?
568Delギコ: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が見つかりません
ここは詳しいけど、結局解決方法載ってないね。
569Delギコ:01/09/14 18:05
    ∧ ∧  /
    (;゚Д゚)<  いきなりEJBの話ふられても
     |つ つ  \
   @   |   エンタープライズ ト イエバ トレッキー
    ∪ ∪


 ∧ ∧ ──────
 (゚Д゚ ) <  ワープ速度5くらいで、ガンバッチクレ>>560
 ⊂⊂ \──────
    \  〜 ────
     し し ─────
   ビュヲーン
>>568
だからぁ。Proxies ユニットは単体で再配布されず、かならず designide パッケージ
内から提供されているものを使え。っていっているの。
この変更は Delphi4 からなんだから、いまさら文句言うなよ。
繰り返し、パッケージを使え。と書かれていたのに、今まで修正しなかったほうが
悪い。
>>568
一回しかやったこと無いんであやふや
Libフォルダにdesignide.dcpがあるから
パッケージのウインドウのRequireの欄に追加したらOKだったような
572Delギコ:01/09/14 18:39

      ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 @' ― (,,゚Д゚)つ < >>570 全然わからん・・ワン
   し― ∪     \___________
 あ。ネコダッタ

>かならず designide パッケージ
>内から提供されているものを使え。っていっているの。

っていわれましても具体的なやり方がわかんないがな。

>今まで修正しなかったほうが悪い。
修正方法わからんのにどうやって直せと…ご無体な


   ∧∧   / ̄
@_(,,゚Д゚) < >>571 Libフォルダにdesignide.dcp
⊂,,__つつ.  \_ あるけど、バイナリファイルみたいなんですが…
           これをどうやて、修正すればいいニャ??
573デフォルトの名無しさん:01/09/14 18:42
自分のコンポーネントを含んでいるパッケージに
パッケージマネージャ経由でパッケージを追加しろ。っていってんだよ
574Delギコ:01/09/14 19:19
    ∧ ∧   / ̄
  ∩(,,゚Д゚) < 匍匐前進並に…ちょっぴり進んだ。
⊂,,⌒ ,,つつ.  \_ >>573サンクス
   ̄ ̄

だけど今度は変なエラーが出てきました。

[エラー] : 'EditProperty' の宣言がすでに定義されているものと異なります



なんか、TDefaultEditorのEditPropertyの実装変わってない?

procedure EditProperty(const Prop: IProperty; var Continue: Boolean); virtual;

D6HELPの"EditProperty 例"と違うんだけど。
実装が変わったのか、ヘルプの誤植なのか。
相対的に見ればどちらも正しく、どちらも間違えている。
絶対的に見てどちらが間違えているかは、開発者に聞くしかない。
576Delギコ:01/09/14 23:48
    _________
   //////////\           ミ☆
 ////////// ギコ.\   ミ☆
  ̄┃ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄┃ ̄
   ┃☆       ____ ┃
   ┠─┐   ‖∧ ∧ ‖ ┃  / ̄ ̄ ̄ ̄ ̄ ̄
   ┃  │   ‖(,,゚Д゚)..‖ ┃<  プロパティエディタ。難しいよ
   ┃°│     ̄∪∪ ̄  ┃  \______
 ━┻━┷━━━━━━━┻━━━━━━━━━━━━

 教えてくれた人。サンクス。
 なんとか解決できました。

 互換性のなくなるコンポ少なきゃいいけどね。

 >>575
 やぱり伝統的にHELPがイマイチ出来てないだけかも。
 
577デフォルトの名無しさん:01/09/14 23:52
MP3のタグ読み書きコンポない?
578483:01/09/15 00:11
>>484
灯台下暗し。さんきゅー
579デフォルトの名無しさん:01/09/15 00:37
質問です。

MDIアプリケーションにおいてメニューをToolBarで代用しているとき、
子ウィンドウを最大化すると「最小化」「閉じる」などのボタンや
子ウィンドウのアイコンが表示されなくなってしまいます。
こいつをうまいこと表示するにはどうすればいいんでしょうか。
580デフォルトの名無しさん:01/09/15 01:11
Delギコたん萌え
581素直じゃないね:01/09/15 09:49
>>575
誤魔化してるだけだな(w
582newsgroups.borland.comも見ようね:01/09/15 10:04
>>572
newsgroups.borland.com

borland.public.delphi.opentoolsapi

proxiesあたりを検索すれば引っ掛かるよ
あちらでもすでに報告されてますね
583Delギコ:01/09/15 16:04
    ∧ ∧   / ̄
  ∩(,,゚Д゚) < 英語でこの説明読むのきついね
⊂,,⌒ ,,つつ.  \_
   ̄ ̄
http://newsgroups.borland.com/cgi-bin/dnewsweb?cmd=listall&group=borland.public.delphi.&utag=

webから見れる分の過去ログ数が少ないニャ。
584デフォルトの名無しさん:01/09/15 21:46
質問があります。

TUIWebBrowserを使ったアプリケーションを作成しているのですが、
OfflineプロパティをTrueにセットしても、オフラインでNavigateして
くれません。ヘルプを見て、DownloadControlにCS_OFFLINEをセット
してみたのですが、それでもダメでした。
TUIWebBrowserを使って「オフライン作業」を実現するにはどうすれ
ばよいのでしょうか。
585Delギコ:01/09/15 21:56
  ∧ ∧  ・・・・。
  (;゚Д゚)
  U  U
〜|  |
  U U

ActionManegerの使い方が全然わからん。
>>584
とりあえずDelphiのバージョンとIEのバージョンを書こうよ。
とりあえず、質問とかするときは、いろいろとバージョンを
書いておいたほうが良いと思う。

俺は、TUIWebBrowserよりもEmbeddedWbを進めておく。
ttp://www.euromind.com/iedelphi/
587Delギコ:01/09/15 22:45
      ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ( ゚Д゚) < わかった!アクトン マネジャ!
      /⊃⊃   \
    〜(  ノ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ⊂`J    ピョン
      ||
      ||
      ωωω

  マネジャノ カテゴリ ドラッグアンドドロップ ゴク ビミョウニ バグ アルミタイ
  サイショ デキナクテ ウロタエタ ヨ

>>584
MLで聞いたら親切な作者さんが出てくる事が多いぞ。
588584:01/09/15 23:15
>586
そうですね、迂闊でした。
とりあえずEmbeddedWbをインストールしたので今から
使ってみるです。
589デフォルトの名無しさん:01/09/15 23:34
以下の仕様を満たしたコンポーネントの作り方を教えてください。

TImage を配置。マウスボタンが押されたらへこんだ状態の
絵(DownedImage)を表示、マウスボタンが離されたら元に戻った状態の
絵(RaisedImage)を表示、マウスカーソルがボタン上にある場合は
アクティブ(ActivateImage)状態を示す画像を表示

これをコンポーネント化したもの。ただし、

コンポーネント上でマウスボタンを押す。
押したままの状態でコンポーネントから離れたい値まで
カーソルを持っていき、そこでマウスボタンを離す。

通常、この場合は MouseUp イベントは発生しない。
これをうまく処理して、普通のボタンのように振舞う
画像コンポーネントをつくりたい。
SpeedButton
591Delギコ: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
>>589
TSpeedButtonパクれ。
593Delギコ:01/09/16 02:27
ActionManegerをひととおり使ってみたが・・・
見事なくらいバグだらけというか。使えない、、、はぁ。。。溜息

D6Pro版持ってる人はActMane使えなくても
Demos\ActionBandsをさわってみるとわかります。

  ∧ ∧ タイヘン カナシイ.....
  (,,゚Д゚)
  U  U
〜|  |
  U U

FormのDockingもそうだけど。(パソナでも使えるからDemos\Dockingで遊んでみー)
新方式のUIに関しては、なぜいつもこんなにいいかげんな
実装をするんだろう。>>某蘭土

ちゃんとデバッグしてるのか?

開発チームがFormのDockingもActionManegerも同じなのかなあ。
だとしたら、ずいぶんとデバッグをいいかげんにするチームらしい。

一度バグ入りで実装しちゃった部分は
将来的にも治らない事多いし。なんかヤだなあ。
>>593
使い方間違っているんじゃないの?
595名無しさん:01/09/16 03:57
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  >>594 デモsrcの遊び方に間違いも何もないと思うが
  (O)----(O)U-U) \__________
596Delギコ:01/09/16 05:02
  ∧ ∧    /
  (,,゚Д゚)  < ActManegerこんなかんじでどーよ
  |⊃ ,⊃   \
〜|  |
  ∪∪

Demos\ActionBands\WordPad.exeで
Windowを目イッパイせまくして
Customizeダイヤログ呼び出してそのまま閉じる
  >>ツールバー太いまま。

また、CustomizeMenuそのものを消してみる。
  >>settings.datを削除しない限り2度とCustomize不可能。

ダイアログを開いてツールバータブを開いて
EnabledFalseになっているMainMenuActionBar1を選択
[戻す]ボタンヲクリック
  >>MainMenu消えます。

こんな代物をユーザーさんに使ってもらうわけには....
597Delギコ:01/09/16 05:04
   ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜''~(,,゚Д゚) < それにしても・・・
  UU'UU    \________

あと、Actionのショートカットキーって
ActionManegerではカスタマイズできないみたい。


Borlandって妙な所抜けてない?

IDEのキーバインド変更もいまだに簡単には出来ないし。
GExper氏ラ無い頃はCtrl+Aもなくて苦労したよ。
D6からはCtrl+Aも定義されてるけど。
borlandのプログラマー社員って何人勤めてるのかな?
もう営業しかいないのかな?

社長しかいません。
600589:01/09/16 11:20
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
>>589
Flatをtrueにしてみ。
604デフォルトの名無しさん:01/09/16 12:01
うん、だから、Trueにするとね、
マウスカーソルをFlatButton上に持ってきたときに
やはりボタン周囲に影が表示されてしまうでしょ。
それに、どちらにせよボタンより小さい範囲にしか画像が
表示されないし。たとえば、スキンを利用した
ソフトを作りたい場合に、それじゃあ困るわけね。

いや、いいんだけどさ。面倒だから書き込んだだけだし。
605Delギコ:01/09/16 12:15
>スキンを利用した ソフトを作りたい場合に

 ∧ ∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)  <  そんなら結局リージョンも必要だろ?
  | つ[|lllll]). \_________
〜|   |
  ∪∪  ヂミチ ニ ガンバッタラ?

一朝一夕で適当に出来るもんじゃないし。
作り方、さらっと教えれるもんでもないが・・・

Compo探した方がよくない?
606601:01/09/16 12:18
>>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;
607疑心暗鬼:01/09/16 12:27
はじめまして!

疑心暗鬼といいます。
ちょっと質問なんですけど、
下記の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)

'********* ここまで
608疑心暗鬼:01/09/16 12:34
っていうか
VB専用のスレありましたね。

すいません。逝ってきます。m(_ _)m
609Delギコ:01/09/16 12:45
  ∧∧∩゛  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚)ノ < 逝ってらっしゃい。
  U  /   \____________
@|  |
  ∪∪  イヤ イイイミデ デス・・・
      ガンバテネ
610疑心暗鬼:01/09/16 13:54
>> 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かと思われますが。
613Delギコ:01/09/16 15:11
      ∧∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 @' ― (,,゚Д゚) < また重箱墨つつき。
   し― し-J   \___________

D6のTControlbarのバンドがTCoolbarと同じになってる。
・・・話題に出てたっけ?

TCuteControlbarがあるからどうでもいいけど。(D6で動くかな)


>>611
微妙に知ってるが、時々書いてしまう。癖かもね。
614Delギコ:01/09/16 16:04
しぶとく、D6お試しレビュー
           _________
    ∧ ∧  /
    ( ゚∀゚)< をっ!TToolBar.Customizableケッコ。イイかも。
     |つ つ  \_________
   〜   |
    ∪ ∪

  WinAPIのToolbarカスタマイズダイアログがラップされてる
  TActMngよりも、こっちの方がよさそうだよ。
  ん?保存先はRegistryだけなのかな?
  あれ?ヤパリ微妙なバグだらけ・・・
  どんどん、Toolbuttonが消えるぞ。 
  OnCustomize系イベントが沢山あって何とかなりそうだけど。

  そういえばTMenubarを使わなくても
  TToolbar.Menuプロパが存在するね。
  これまたAltに対応しないという、バグありまくり。。

  なんだかなあ。
>>614
TToolBar.Customizable系は,コード見ると分かるけどWindowsコモンコントロールを
直接呼んでいるからOSのバグじゃないかな?
616Delギコ:01/09/16 16:25
 まだ、ソースは見てないんだけど。そなんだ。>>615クスコ

 普通のアプリ(WWWCとかBecky2)みたいに
 カスタマイズダイアログの左項目に
 元々のデフォルトButtonを表示させることは出来るのかな?

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧    マターリ
   (,,゚Д゚)∫
   /  つ旦O
 〜(._[ ̄ ̄ ̄.]
       ̄ ̄ ̄
617名無しさん:01/09/16 16:43
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  >>604 チョピーリ参考までに
  (O)----(O)U-U) \__________

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=library&vi=1000625853&res=1

こんな規模になりますよ。流用・応用は御自由に
ちなみにこれだけではコンポ登録できまへん。
他にも沢山^2ソースが要りますテヘ
618604:01/09/16 19:27
いや、リージョンは必要ない。
そこまで複雑にするつもりは無いし、
スキンつうか、ごく普通のアプリでも使うし。
619592:01/09/16 20:59
>>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部分について、
ピクセルの並び方からハッシュ値を作成し、
ハッシュ値をキーにして位置を探り出す

という事でしょうか。
627名無しさん:01/09/16 22:15
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  >>618 自分の本当に求める自分仕様は、自分しか作れません
  (O)----(O)U-U) \__________

と思うがどうよ
あれがおいらの自分仕様
あとはDelphian WorldかDSPに似たの無い?
とかとしか言いよう無いッス
>621
2次元配列化するだけで10倍くらい高速化されそうな予感。
640x400x16の全検索程度なら力技で十分いけそう。
629621:01/09/16 22:25
やりたい事をもう少し詳しく書きます。

大きい画像 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] についてこの作業を行うわけです。
630621:01/09/16 22:27
ありがとう、それではまず2次元配列にしたものを
つくってみようとおもいます。
631デフォルトの名無しさん:01/09/16 22:40
最初に縮小した絵を作成してそれでラフチェックしてからってのは
どうよ
>631
縮小したりハッシュ値生成したりする必要は無くって
単に最初に8ドットおきに比較してやればいいね
633デフォルトの名無しさん:01/09/16 22:56
>>632
それきっと駄目
なんで?
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ウィンドウで確認してみればいいよ。
640補足:01/09/16 23:49
>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を
アップするので、そうしたらもっとイメージを
つかんでもらえると思います。
642641:01/09/17 00:14
アップしました。
起動したら、コンパイルボタン(左上の0101と書いてあるボタン)
をクリックし、再生ボタン(中央上にある右向きの三角ボタン)
をクリックしてください。

http://www.geocities.co.jp/SiliconValley-Sunnyvale/1607/BitmapReplace.zip

赤枠の画像中から、
緑枠の左側に一致する画像を探し出し、緑枠右側の画像で置換します。

緑枠は2組あります。

両方の緑枠の置換前画像に一致する場合は、
左上にある緑枠で指定された置換式のほうが優先されます。

サンプルに同梱してある、工場.bmpをドラッグドロップして、
コンパイル→再生してください。

このぐらいの大きさになると、少し処理が重くなるんです。
643641:01/09/17 00:16
あ、画像を変更するときは、かならず■ボタンで
アニメーションを停止させてください。
止まってるように見えても、置換されていないだけで
アニメーションタイマーは動いていますから。
644デフォルトの名無しさん:01/09/17 00:22
あのー。
どこの誰かが作った実行ファイルを信用しろと?

ソースを出しなさい。
>641
なかなか面白いね。が、確かに重いみたい。

これなら高速化は簡単で前回書き換えのなかった部分を
検索しない(=前回書き換えた部分の周辺のみを検索する)
ようにすればいいよ。
これが最終目的なら、アプローチに疑問を感じるのって俺だけ?
Delギコさんこないとサビシイ
647641:01/09/17 00:51
おくれました。
これがソースファイルです。
自作ライブラリを使用しているので、
ソースに含まれる全コードのうち、半分以上は
今回のプログラムでは使用していません。

http://www.geocities.co.jp/SiliconValley-Sunnyvale/1607/BitmapReplaceSource.zip
648645:01/09/17 01:05
>646
このプログラムのミソはシステムが何も理解していないのに
結果的に工場が稼動し、迷路を抜けちゃうところ。
これってプログラマブルなLIFEだね。
思わず点滅信号機とグライダー作っちゃったよ。

ちなみに>645はLIFEでも使われてる高速化手法だよ。
>>647
KMath.pasがないYO
650641:01/09/17 01:17
ちなみに、元ネタは Visulan という、京大の人が
開発したビジュアルプログラム言語です。
検索すれば論文が見つかると思います。
これかな?ちょっと読んでみよ。
http://ryujin.kuis.kyoto-u.ac.jp/ylab/yamakaku/Papers/Thesis/Thesis.html
>>649
あ、すみません
修正しておきました。
ちなみに、Del6でコンパイルするとエラーが出ると思います。
型付定数への代入を許可しておいてください。
653Delギコ:01/09/17 01:25
    ∧ ∧   / ̄
  ∩(,,゚Д゚) < >>627 いいこと言うね。
⊂,,^__つつ.  \_

スキン化するくらいなら
折れなら必ずリージョンまで入れる。
リージョン入れないBitmapButtonは途中段階だな.
だって、完成したら自分以外の人にもかなり有用そうだもの。

でも、XP的には必要になったときにリファクタすればいいのかな。

    ∧ ∧  それにしても、画像系の話。
    ( ゚Д゚)  トテーモ高度ちゃう?
  〜( uu)  読んでるだけでワクワクシチャーウYO.

 アプローチ???
>>652
KDialogs_untInputDlg.DFMもないーよ
>>654
たびたびスマンです…
再び修正しました
なんていうか、人にソースを渡すって予想以上に大変なんですね。
コンパイルに必要なファイルを一覧表示してくれる機能はないものでしょうか。
>656
コンパイルされたdcuみれば大体見当はつくんじゃない。

ソフトのほうは地図とパターンを別画像に分離して欲しいかも。
あと編集はイメージエディタやペイントに任せて、
タイムスタンプが変更されたらリロード・コンパイルして欲しい。
まあ、どうでもいい部分ではあるけど。
>>655
あれ? 入ってないみたいな
>>651
それそれ、そのページを読んで
面白そうだからちょっと作ってみたんです。
透過色とか、キーボード入力なんかも欲しかったので。
>>655
がーっ
またか…
だんだんイライラしてきたYO

面倒なんで、ライブラリフォルダの中身全部同梱しました。

http://www.geocities.co.jp/SiliconValley-Sunnyvale/1607/BitmapReplaceSource.zip
これを機会に、ライブラリ.pas から別の ライブラリ.pasを
参照する事を極力避けようかと思います。

あるライブラリを一つ渡そうとすると、
参照している全ての ライブラリ.pas を渡さないといけない…
>>660
KDialogs_untInputDlg.DFMがないんすよー。フォームファイル
pasだけしかない…
印刷したら全部で66ページもある。しかも用紙切れっぽい...

まだ全然読んでないんだけどこれって言語と呼べるほどの
汎用性や広がりを持ち得るのかな?
みたところたまたま迷路を抜けてたまたまソーティングされて、
たまたまチューリングマシンが動いてるだけのようにも見える(藁
いまライブラリを整理しているので、
ちょっとまってください。
KDialog もその他のものも、
今回のプログラムで使用してないんですね。
ライブラリが参照しているだけで。
665641:01/09/17 02:43
やっと整理できました。
ライブラリパスをデフォルトの状態に戻して
コンパイルチェックしたので、今度こそ足りないファイルは無いと思います。

http://www.geocities.co.jp/SiliconValley-Sunnyvale/1607/BitmapReplaceSource_For_D6.zip
666デフォルトの名無しさん:01/09/17 02:46
>>665
ヤター! コンパイルできたYO!
667デフォルトの名無しさん:01/09/17 02:49
>>663

広がりというか、大元のコンセプトは

グラフィックのプログラムは
グラフィックによって記述しよう

という事じゃないかな。
668デフォルトの名無しさん:01/09/17 04:34
Builderのコンポ、インストールできる?
669デフォルトの名無しさん:01/09/17 06:53
>668
出来ない
670Delギコ: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でリソースにアイコンを詰め込みたいのだが
どうしたらよいのだろう...
675support ◆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を貼るとか。
679676:01/09/17 17:21
>>678
最初はそれを思いついたんですけどCSV(もしくはiniファイル)から座標を持ってくるらしくて、、、
それに画像情報がコロコロと変わるらしいんです。

「画像のクリッカブルポイントをソースを触ることなくテキスト修正だけで触れるようにしろ」って事らしいです。
可能ですかね?

別にImageじゃなくてもPaintBoxでもShapeでもいいんです。
今はPaintBoxでがんばってますが。
680support ◆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
に「プログラムで」代入しようとしないんだ?
683682:01/09/17 17:49
補足
座標だけでなく個数も変わるなら「プログラムで」Createすればいいだけだが。
684Delギコ:01/09/17 18:02
      ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 〜' ― (,,゚Д゚) < KylixMLって配信方法とか変わった?
   し― し-J   \___________

ずーっと。とどかないニャリ?
685support ◆WjpJ5Iis :01/09/17 18:10
>>684
9/6 の #717 / Re: TIdSMTP って
が最後
>>685
同じく。
687デフォルトの名無しさん:01/09/17 18:25
>>670
お、買ったね。どうだい感想は。>Delギコ氏
俺はガンマ本は挫折して、
いろんな本から慣れてったんだが、
この本がもっと早く出ていればなぁと思った。
デザパタはVCLを参考にするのもいいけど
Javaのクラスライブラリも参考にすると良いよ。
>>679
TListかもしくはTRectの動的配列を宣言しておいて、
起動時に設定ファイルから読みこむ。
で、後はマウスイベントで座標を判定して処理する。
とか。
689名無しさん:01/09/17 18:32
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  >>679 遊ぶDelphiだかいう本で範囲内をクリックしたか判定するサンプルが
  (O)----(O)U-U) \__________
690デフォルトの名無しさん:01/09/17 18:51
>>679
仕様の詳細や判定領域の数がわからんので、
>>688の方法が正攻法だね。
数少なくて決まっているなら、PaintBoxが手っ取り早い。

なんか、感じからすると動的なオブジェクトの生成もできなさそうなので、
(違ったら失礼(違ってなくても失礼か))
時間があれば、>>688の方法をできるようになっておいた方がいいぞ。
691小心者:01/09/17 20:01
コマンドラインのパラメータをみるのにParamstr(1)でやろうかと思ったんですが
これだと半角スペースのところで途切れてうまくファイル名を見ることができないです。
一応関連付けの時に"%1"を付ければうまくいくんですが、付けないときでもうまくいくようにしたいです。
なにかいい方法はないんでしょうか?
TeraPadでもそうだから無理なのかな。
>>691
そういう仕様なので仕方ないです。文句はMSにいってくり。
693692:01/09/17 20:17
あーていうか、それを何とかしたいと言ってるのか。
とりあえず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;
696>691:01/09/17 20:31
そういうしょうもない小細工してるアプリって
いつか誤動作してトラブルになるからやめて欲しいかも
697デフォルトの名無しさん:01/09/17 21:01
私、Javaは嫌い。しかし 一つ うらまやしい 有る。
クラス プロパティ に 定数 していできる 良い。

THoge = class
public
 const Milk:string = 'yukijirusi';
end;

みたいに やりたい。
698Delギコ: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 にひきづられちゃったよ........
703Delギコ: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;
708701=706:01/09/18 00:45
>>707
プロパティがクラスの外のやつも参照できるなんて知らなかったよ
ただ使う機会は少なそう
C++のstaticなメンバ変数みたいに使えるかのな


ところでじつは>>579で質問していたんだけど、
誰も使ってないのかな>TToolBarでメニュー
TCoolBar上において、VC風にしてみたんだけど、
MDI子ウィンドウの最大化時の処理がいまいち…

一応TToolBarをもう一個置いてその上にボタンを配置して、
子ウィンドウの状態が変わったときに出し入れしてるんだけど、
どうもいまいち見た目が本物に似ない…
誰か他にやってる人いませんかね?
709ひらぽん:01/09/18 02:49
>自分自身のクラスインスタンスを保持する方法
とっくに解決済みかも知れませんが、少々気になったので。

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
>>707
嘘書くな。
Delphi に Java の Hashset クラスみたいなのはないの?
713デフォルトの名無しさん:01/09/18 05:32
>>712
単純だけど TBucketList (ただし D6)
おおサンキュウ。
googleする前にヘルプを検索すればよかった。
自作のクラスのデータ検索に使うのでこれで十分。
715デフォルトの名無しさん:01/09/18 06:17
BucketFor メソッドを書き換えることで,自分の好きなハッシュ関数が使えるんで
いろいろ調整してみてください >>714

ただね... 今のコードにはバグがあるから項目の削除はできない。気をつけて。
716-:01/09/18 06:18
MLで紹介すんなゴルァ
>717
まったくもって同意。
MLにギコとか書くなよ、ヴァカが。
719Delギコ: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
723Delギコ: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 に紹介された割には静かだね。
>>727
大挙して押し寄せられても困る。
はじめまして。MLから来ました。
早速ですがDelphi6 Personalでメモ帳とペイント互換ソフトの作り方を教えてください。
初心者なのでなるべく詳しくお願いします。
730Delギコ:01/09/18 11:17
   ∧∧ プハー   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (,,゚Д゚) =3  < MLノ ヒトタチ ダッテ 2chはチェックしてるさ
   | つ日~~    \ イマサラ 厨房に紹介されるまでもなし。
  〜|  )
   U U
動的配列の内容を一気にコピーする方法ってある?

A, B : array of Integer;
- - - - - - - - - - - - - - - -
CopyArray( A, B );

みたいな。
>>729
ここで厨房な質問するとMLよりもひどい目にあう。
A := B;
734Delギコ:01/09/18 11:24
>>729>初心者なのでなるべく詳しくお願いします。

  ∧ ∧  /
  (#゚Д゚)<  イヤダ
   |つ つ  \
 〜|  |  オオキナ コエ デ イッテヤリタイ
  ∪ ∪

顔を洗って
D6付属のDemoを全てみてから出直せ。

あと、
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999486538&rm=100
このリンク全部見ろ。
>>734
ネタやろ。
>>729
MLからきましたなんてかいて
sageてるのでちがうとおもわれ。
http://vvv.geocities.co.jp/SiliconValley/5634/t82B5_0017.html#76

初心者ですので、簡潔にお願いします。 【発言】
----------------------------------------------------
(1)スゴイ・・・
・某所で見かけた発言。 発言と言うより、サブジェクト。
・いや、それにしてもスゴイなぁ、何と言うか、う〜んスゴイ。
・ここまで有無を言わせず、自己都合を押し付ける勢いを持っているサブジェクトと言うのは、なかなか無いですな。

■この文章から読み取る事ができるのは・・・
・自分がした質問にだけ答えろ!
・お前たちは「それは何故ですか?」などと下らない質問をするな!!
・ましてや「もう少し調べてください」などと偉そうな事を抜かすな!!!
・・・・と、いう事なんでしょうね。

(2)しかし、一つ疑問点が・・・。
・それは、質問内容から察するに、彼の御仁には、どうしようもなく知識も調べる気も無いようなご様子なのに、「簡潔な回答」だけで、事が終わるのかな?という事。
・しかし、「初心者」と言って免罪符を振りかざす連中の中にも、「できる限り詳しく教えろ」と言う人も居るし、色々種類が居るんですねぇ。
・でも、こんな傍若無人なメールにも返答をする奇特な人って居る事と、その懐の深さにビックリ。
738 :01/09/18 11:31
procedure TForm1.FormShow(Sender: TObject);
begin
 Caption := 'メモ帳';
end;
だからネタだってばよ
740デフォルトの名無しさん:01/09/18 11:39
「MLから来ました」

ってのは、たぶん、つかみだと思う。(笑)

ここで一発笑いを取っといて「メモ帳の作り方教えて」などと言う
逆撫でする言葉を入れといて、最後に「詳しく教えろ!」という
とどめを指して読み手を怒りの渦に巻き込んでいると思われ
本筋に戻ろうぜ。
画像検索はどうなったんだ。
743ひらぽん:01/09/18 12:22
>>725
>何がしたいのか誰か解説してくれ。

くらすふぃーるどの定義方法の提示かと思ってたら
今元ネタもう一回見たら・・・

>自分自身のクラスインスタンスを保持する方法

でしたね。思いっきり外してました、失礼しました〜。(^^ゞ
744デフォルトの名無しさん:01/09/18 12:26
>>743
正直者なんだろうけど、メールアドレス欄に実アドレスを入れるのは止めときなさい。
745f:01/09/18 12:32
正直、親切すぎるからMLはレヴェル下がってるよな
あとpちゃんがらみで、うっかり自爆して脱出した人多すぎ

>>724
[Delphi:60611] 2ch の Delphi 関係スレッド
BB弾の人
747725:01/09/18 12:38
>>743
すまん。ネタかと思ったんだよ。
きみは2ちゃんには向かないかも。
メアドは書いちゃいけないよ。人を信用してはいけないよ。
>pちゃんがらみ
pcodeになりすまそうとして失敗したとか?
> [Delphi:60611] 2ch の Delphi 関係スレッド
残念、過去ログにはまだ収録されていなかった…
>>740
楽しいか?
750名無しさん:01/09/18 12:46
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  >>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関数。
753Delギコ: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.
754Delギコ: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
蒙古ない方がいいと思われ、売買
759Delギコ:01/09/18 14:18
  ∧ ∧    />>758 実際には使用したことはないです。
  (,,゚Д゚)  < クラス外にインスタンス数保持しておけばいいもんね。
  U  ,つ゛  \
〜|  |
  ∪∪

 でも、よくあるButtonの動的生成する時などに
 TMyButtonとTMyButtonListなどを作っておいて
 別UnitにしておくとFindComponentなんて必要なくなってちょっとベンリかも。
760Delギコ:01/09/18 14:18

  ∧ ∧    /興味あるのでToolbarCustomize調査中。
  (,,゚Д゚)  < ほんとに、APIを軽くラップしただけミターイ
  |⊃ ,⊃   \設計とか実装とか全くなし。
〜|  |     Customizeダイアログを呼ぶメソッドすらないのかニャ
  ∪∪
 ネコデモ ワカルカシラ
 http://www.kumei.ne.jp/c_lang/sdk2/sdk_142.htm

とりあえず
WM_CUSTOMIZE
の定義すらVCLで密からナック手、ブルー
761デフォルトの名無しさん:01/09/18 14:22
>>757
>Copy(A, m, c ) := Copy(B, n, c);

デマ流すの楽しいかい?
762デフォルトの名無しさん:01/09/18 14:27
>>761
デマに反応して楽しい下位?
763Delギコ:01/09/18 14:29
       ∧ ∧
     _(゚Д゚ )__
    /|  ∪∪ /\
  /| ̄ ̄ ̄ ̄|\/
    |      |/
     ̄ ̄ ̄ ̄
>>761 指摘サンクス。
デマは困る。>>762逝ってよしい

CopyはFunctionだから、戻り値に代入出来ないよね。

>>756
その程度はガリガリいこう。
範囲が超えた時の例外処理考えたら頭痛くなりそ。
>>751
空気をつかむのがマナー
意味わからなければMLに戻った方が宵
DelのCPUウィンドウをメニューから開く裏技があったよう
な気がするんだけど、知ってる?
>>765
裏技? 普通にメニューにないか?
表示-デバッグ
767Delギコ:01/09/18 15:51
  ∧ ∧    /
  (,,゚Д゚)  < >>760ネコ ニハ ワカンネーゼ
  |⊃ ,⊃   \
@|  |
  ∪∪

猫でもわかるプログラミング
第142章 ツールバーをカスタマイズする
http://www.kumei.ne.jp/c_lang/sdk2/sdk_142.htm

…"ネコプロ"評価高いみたいだけど、実際
 SDK第二部のこのあたりになると
 SampleプログラムもDLできないみたいだし
 投げやりで独り善がりな記述ばかりで
 非常に読みにくい。
 説明だけに終始してるしなあ。

とか逝ったら怒られる??

分かりやすいと思われる方は、
VCLでToolbarCustomizeを実装してみてちょー。
  とか逝ってみる。
768Delギコ: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プロパティで指定できないようにしました。
769Delギコ:01/09/18 17:05
なんか、一人でカキコんでる気がするが…

 ∧∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (゚Д゚)ノ < シツモーーーーソ
 (|  |   \__________
〜|  |
  ∪∪

各種ControlにActionを指定すると
TAction.Updateイベントが発生するけど

あれは何のメッセージを見てUpdateイベントが発生してるの?

VCLのソースのどこみたらわかるーとか。教えてCRAY


イマまでActionのUpdateイベントで処理していた部分を
サブクラス化してみたんだけど何のメッセージをフックすればいいのか
わかんないのです
>>767
猫プロのすごいところは継続しているところだからね。
あの量は真似できんわ。

Delギコもwebページ作ってくれないかなあ。
>>770
文章よりもAAの方が多かったり・・・。
772Delギコ:01/09/18 18:15
          >>769自己レフ
 ∧∧∩゛  /わかった!
 (,,゚Д゚)ノ < WM_PAINTダ!
 U  /   \
 |  |
ノ∪∪

  ∧ ∧  ・・・・。 タ・・タブン
  (,,゚Д゚)
  U  U  アテルカシラ?
〜|  |
  U U
WM_AA
774679:01/09/18 18:45
昨日の質問の続きになります。
---------------------------------------------
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))
という手もあるにはある。範囲チェックは自己責任。
778708:01/09/18 19:35
>>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もこの範疇だな。
>>787
↓それをもろにやってる
ttp://www.portalgraphics.net/
これのおもしろいところは、画像を投稿するときに
サーバーにその手順データを送って向こう側でレンダリングするところだ。
さらにその画像をDLするときは手順データを持ってこられるので、
絵師の書き方がわかるというシロモノ。
790デフォルトの名無しさん:01/09/19 01:01
>>789
これおもしれええええええええええええ!
いやあ、いいもん紹介してもろたー

しかし一ヶ月の投稿数が900って…
ギャラリー一覧見るだけでも疲れるな、こりゃ。
791名無しさん:01/09/19 01:47
  --下手人-∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)<  >>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では無視された用だし
こちらも荒れ模様というほどでは無かったから良いんじゃない?
799エロじじい:01/09/19 04:21
>>795
じゃあこっちも発育が良くなったのか!
いい時代じゃの〜
たいしたレスしない奴に限って...
>797
まじで!? VCLScanner で調べてみよう
802デフォルトの名無しさん:01/09/19 09:30
本当だ… Delphi でこんなにスムースな画像処理プログラムがつくれるのか…

ついでに JGrep もDelphiだったんだね…
803Delギコ:01/09/19 09:47
    ∧ ∧  /
    (,,゚Д゚)<  OpenCanvasすごすぎ!
     |つ つ  \
   @   |  
    ∪ ∪

フリーの画像ツール調べていてoC1.1を見てた事があったが
こんなすごいシェアウェアになっていたのねん。

会社みたーいだけど、すごい技術力ありそう。
ネット時代に即したサイト運営も○ダ〜ニャ
webだけ見てる限り、何者が開発・運営してるのかサパーリわからん。
匿名なのか? > OpenCanvas
downloadしないと分からないようにでもしてるのか?
ってさすがにDelphiと関係ない話になるな。
>OpenCanvas
BCBの可能性は無いの?
>>802
Delphiでもスピード的に問題なくできるよーん。
ただTCanvas使ってたんじゃだめだけどね。
TCanvasなんとかしてほしいね。

しかし書き方が学べるって、OpenCanvasいいねぇ。
807Delギコ: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のソースにコンパイルマシン名を書くのもダサいね。
815812:01/09/19 13:22
>>814
>ライブラリのフォルダ階層変えるとコンパイル通らないじゃん。

in使うのも一緒のような気が。。。
なんかもっといい方法あるかなぁ。
816814:01/09/19 13:45
>>in使うのも一緒のような気が。。。

全然違う。ライブラリのフォルダを指定しとけば、
inの中ではフォルダパス要らないんだYO!(だって、標準dcuがそうでしょ)
817814:01/09/19 13:55
もしかして、ライブラリを全部プロジェクトに入れてたりしないよNE?>>812
818デフォルトの名無しさん:01/09/19 14:55
カンマ区切りのテキストファイルを別々の変数に読み込むにはどうしたらいいでしょうか?
ど素人な質問ですいません。

ex.
[test.csv]
aaa,1,2,5

これを別の変数に
819Delギコ:01/09/19 15:04
 ∧ ∧   / >>818
 (,,゚Д゚) < TStringList.CommaTextに大入
  |つ つ  \ TStringListはオブジェクトだから気をつけて。
〜   |
 ∪ ∪
820Delギコ:01/09/19 15:06
 ∧ ∧   /
 (,,゚Д゚) < またもや、しつもーん。
  |つ つ  \
〜|  |
  ∪∪

コントロール(具体的にはStringGridなんだけど)
のzオーダーに他のコントロール(例えばScrollbar)を
あわせたい時はどうしたらいいのでせう?

つまり、Gridのひとつ上にBarをもってきたいの。
他のControlのZ位置関係はずらしたくないの。
821812:01/09/19 15:23
>>814
>inの中ではフォルダパス要らないんだYO!(だって、標準dcuがそうでしょ)
今確認できないんだが、標準のライブラリってinいるんだっけ?

いままでは個人のライブラリフォルダを作って
環境設定のライブラリパスを設定していたんだが、
似た内容のライブラリとかがいっぱいできてきたり
他人のライブラリで名前かぶったり
そろそろ何とかしようかなと思ってるんだけど。

ライブラリの管理ってどうしてる?
822デフォルトの名無しさん:01/09/19 15:37
>>820
Scrollbar(子)のparentプロパティにGridを入れれば良いんじゃないの。
そういう意味ではない?
823Delギコ:01/09/19 15:48
       ||
       | |
      ∧| |
   Σ (゚Д| |
      /つ| |
    〜  ||
     (/ ||
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄     
ハッ……ワスレテタ

>>822そうかも。タメシテミマス


MLでD6→D5のdfm変換が公開されたようですね。
イマはレジストリ変更で対応してるけど。

[HKEY_CURRENT_USER\Software\Borland\Delphi\6.0\FileFormat]
"DFMFormat"=dword:00000000
824Delギコ: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
>リファクタすれば?
>必要に応じてパッケージのリビルドもやってくれるよ。

おおっ、ちょっと光明が見えたかも。
ガイドを読んでみると、ソースとか指定してまとめられてよさそう。( ´∀`)

でもこれって名前解決できるの?
828818:01/09/19 17:12
LoadFromFile(FileName);temp.CommaTextにファイルから読み込んでも互換性が無いと
いわれちゃいます。
829Delギコ: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;
840839:01/09/19 22:32
これなら、Captionに表示だろうがStatusBarだろうが
プログレスバーだろうがフォームだろうが、
OnReport関数を描くだけで何にでも対応できる。
841デフォルトの名無しさん:01/09/19 22:32
>> 837
.RePaint
842837:01/09/19 22:41
>>839
この方法でやったのですが、互換性が無いというエラーがでます。

TForm1 = class( ... )
...
procedure Report(s:string);
...
end;

.....

procedure TForm1.Button1Click( ... );begin
 NagaiSyori( Report ); ←ここでエラー
end;
843837:01/09/19 22:42
procedure TForm1.Report(s:string);
begin
 StatusBar1.SimpleText:=s;
end;
844837:01/09/19 22:44
>>841
すみません、Repaint をどういう風に使えばいいのでしょうか?関数内からフォームを呼び出してラベルなりキャプションを
変更し、フォーム.Repaint して画面を更新という事ですか。

でも、それだとそのフォーム専属の関数になってしまい、
結局メソッドにしたほうが良いという事になってしまいますよね…
845837:01/09/19 22:54
あ、
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;

(後略)
848Delギコ:01/09/20 10:37
  ∧ ∧    /procedure of Objectはメソッド
  (,,゚Д゚)  <
  U  ,つ   \
@|  |
  ∪∪ モウ ワカッテルト オモウケド
849名無しさん:01/09/20 11:07
quadrupleおとして、インストールしたんですが、
ウイルススキャンでここのファイルがいつもひっかかる。
これは誤認ですか?
850Delギコ: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!
856Delギコ:01/09/20 12:14
  ∧∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚)  < 日本語くちゃくちゃになってしまったの
 ヽ/つ且~~  \ゆるしたもれ。
  (__ _)

標準コンポTStrGridに対してTMyGridBarを作成しました。
んで、このTMyGridBarはGridプロパでGridを一つ選択できます。
選択したとたんにGridをサブクラス化して
とあるGridに流れるMessageを見てTMyGridBarにお知らせしまする。

で、このTMyGridBarを複数作ってからプロパティで
ひとつのStringGridを指定しました。

StringGridは何回も何回もサブクラス化されまする。
それはうまくいくのですが
857Delギコ: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がフリーズしたりアクセスバイオるからダメなんだろう…

うーん、むずかしけりよ。
なんか、複雑に考えすぎているのかな。
858Delギコ: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 とつないでやらなければならないだけでは?
862Delギコ: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
868863:01/09/20 13:03
この場合、TMyGridBarしかサブクラスをしないのなら

WindProcは ob object だよね?

StrGrid.WndProc が 自分(NewGridWndProc)を示していなければ
示しているポインタから
関数ポインタとオブジェクトに分解して、
そいつのOldWndProcを書き換えてしまうのが素早い方法だろう

ただ、グループで開発しるような場合は、>>863の方法をお勧めする
869デフォルトの名無しさん:01/09/20 13:03
>>867
あの、ツールバーが関係ない場合は?
870Delギコ:01/09/20 13:03
      ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ( ゚Д゚) < >>863 さんくす。
      /⊃⊃   \
    〜(  ノ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ⊂`J   ダヨネダヨネ

イマの所、グローバルなListに同一Classが入るようにしてて
そのList内を探索して

 if TMyGridBar(List.Item[i]).FOldWndProc = Self.NewGridWndProc then

こうしたいんだけど、、、これって比較できないみたいなの。
procedure of Objectの同一性ってどうやって調べますの??


        ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′ ̄ ̄(#゚Д゚)< >>864くたばれ
  UU ̄ ̄ U U  \_____________
http://homepage2.nifty.com/boheme/delphi/dbtips/index.html
http://user3.allnet.ne.jp/tadnakam/Delphi/delphi4/db/index.htm

    ∧ ∧   />>865がんばってね。
  ∩(,,゚Д゚) <  >>866まずは普通のサブクラス化を調べてみYOU!
⊂,,⌒ ,,つつ.  \>>867フォロークスコクスコサンクスコ
   ̄ ̄
871Delギコ: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
>>870
あんがとよ。死ね。
875Delギコ:01/09/20 13:28
  ∧ ∧∩ しょええええ。
  (゚Д゚,,)ノ  >>872出来たよ出来たよ
   |  つ
   | ⊂)〜  すごーいよ。
    ∪     メソッドはイチド of Objectに代入しなきゃいけないみたいだけど。

 ∧ ∧  スバラシイ!
 (,,゚Д゚)  カンシャノ キモチ ウケトッテ!!!!
  |つIO
〜   |
 ∪ ∪
876デフォルトの名無しさん:01/09/20 13:41
877863:01/09/20 13:45
この場合は、特別なメッセージを用意しておいて
 その送り主が自分かどうかという方法もあるよ。

というか、そういうメッセージを定義しておくべきだったんじゃないか? >MS

サブクラス解放時にサブクラスのリンクを
 WM_DetachProc,DetachStart,this でthis=selfでなければ解放
 WM_DetachProc,DetachEnd,this 再度接続

するメッセージ
878デフォルトの名無しさん:01/09/20 13:49
連続した同一文字列の圧縮(文字数を減らす)ていうのやりたいんですが
どんな方法がいいですか?

perlで言うところの
s/(\-\-|==)+/$1/g;
みたいのが簡潔に表記できないかなぁと。
「--------==========」→「---===」になります。

http://homepage1.nifty.com/ht_deko/algo002.html
みたいなルーチンで一文字ずつ指定するか、
http://homepage1.nifty.com/bmonkey/delphi/delphi.html
のAWK関数郡を使うのがいいんですかねぇ

    ∧ ∧   /
  ∩(,,TДT) < 教えてくださいー
⊂,,⌒ ,,つつ.  \
   ̄ ̄
879Delギコ:01/09/20 13:57
       ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       (゚Д゚,,)  < >>863 あんたはすごい
       ⊂ ⊂|    \___________
        |   |〜
        ∪ ∪  
  Delギコ、自分がペーペーだと知る2001年セプテムバー
880Delギコ高速回答:01/09/20 13:58

____∧ ∧_ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
___( ゚Д゚)< このスレはーーー
__ / ⊃ つ  \______________
_〜′ /
_ ∪ ∪  >>873 あれは窓がActiveになりたがっているんじゃない?
        OSの設定でレジを弄るとActiveになりたがるやつは
       点滅せずにActiveになるとオモワレ

 ∧ ∧ ──────
 (゚Д゚ ) < チャットかよーーー
 ⊂⊂ \──────
    \  〜 ────
     し し ─────

>>878 StringReplace使う
 while (1<=AnsiPos('--', S))
  S := StringReplace(S, '--', '-', [rfReplaceAll]);
んな漢字
881Delギコ: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;
886Delギコ: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が帰って来る
から、そのオーナにコネクトするようにすればいい

オーナーが取り外される場合は自分の持っているリストの
先頭にオーナーを譲る
890Delギコ:01/09/20 15:19
  ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚)  < それも一応考えました。
  U  ,つ゛  \____________
〜|  |
  ∪∪

> 既にサブクラスされていればUSERメッセージでオーナのTMyGridBarが帰って来る
> から、そのオーナにコネクトするようにすればいい
この辺がちょっとわからないですが

> 最初にオーナーになったTMyGridBarがWinProcメッセージを
> 分配する。
このオーバーヘッドがチョット大きいかと思ったもので,,,
悩み中だったのです。

TMyGridBarを沢山作ったらそれだけ
サブクラスのWndProcの中で全てのものをチェックしなきゃいけないし
StringGridも複数だと
各々TMyGridBarを付けると
単純に1つのインスタンスだけがサブクラス化する
というわけにも逝かなくなるし…

いろいろ難しいです。
とりあえず、サブクラス化解除できない時は
EComponentErrorを発生させることにしました。
Delギコさんって暇人?
892878:01/09/20 15:30
>887 あ、先に解説されてた。サンクスです。
ちなみに「s」は置換コマンドで、お尻の「g」は繰り返しを意味します。

>Delギコさんって暇人?
オレもそう思った(藁
893Delギコ:01/09/20 15:41
 / ̄ ̄ ̄ ̄ ̄ ̄
 | 暇人?
 |                 r――――――――――
 ∨ ̄ ̄ ̄ ̄ ̄∧_∧   |ヒッキーなの?
 ∧_∧     (´∀` )  <
( ´∀`)    (   ∧∧   |_________
(   つ/ ̄ ̄ ̄ ̄(´∀` )   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(   ∧ ∧     /(⊂   )o < 2ch中毒だよ
  /_(  ;)__/ /       \________
 || ̄/  | ̄ ̄||/ ┌───────
 ||, (___/   ||  < ほっとケ
             └───────

   ∧∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (,,゚Д゚)  <  ちょっと休むか…
 @/つ且~~  \___________
  (__ _)
894デフォルトの名無しさん:01/09/20 18:14
>>890

TOwnerGridBar をつくる。サブクラス化するのは
こいつだけ。TMyGridBar のインスタンスは、こいつ
のメソッドでいくらでも作成する。こいつは、その
リストを保持してメッセージを分配する。TMyGridBar
は、自分が破棄されるときは、こいつに通知してリスト
からはずしてもらう。
895884:01/09/20 18:31
>>887>>892
ぃゃマジレスくれるとは思わんかったサンクス

ところで「--------==========」は「--==」じゃないの?
「--」x複数=>「--」
「==」x複数=>「==」
なんじゃないの?サッパリ
896Delギコ:01/09/20 18:46
          ∩ ∩  
         | ∪ | .
         |  〜  
       __| ∧ ∧  
 ┌┐   | \,,゚Д゚)、
 │| ̄)〓(  ,, ̄ ̄ ̄)
 └. ̄     ̄ ̄ ̄ ̄
      3時間で充電完了
897Delギコ: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;
898Delギコ:01/09/20 18:48
        (  )
  ( )   (  ) 
   ( )  ( )
    ∧ ∧( ) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    (;゚Д゚) < 動作結果ぁああ
    / づ   \_______
   | ̄ ̄ ̄|
   |二二二|
   |___|
   从从从从

FormFucker1を配置、FormFucker2を配置
FormFucker2を削除、FormFucker1を削除>>ダイジョウブ

FormFucker1を配置、FormFucker2を配置
FormFucker1を削除、FormFucker2を削除>>IDE コワレテヨシ


                 ( )
            ( )  
             ( ) ( )
          ____バシャァ
          |  | │ |∧ ∧ ・・・・・
    从从   |  | │ |(*゚Д゚) SubClass化ってけっこう危険?
   从从从从 |  | │ | _つつ
           ̄ ̄ ̄ ̄~~~~~~~~~~~~~~

TFormFuckerクラスだけがFormをSubClass化するだけなら
対応策はあるけれども似たようなFormSubClass化コンポーネントの
TAFormFucker/TBFormFuckerを作られると
どうしようもなくないですか??

それとも対策ありますか?
899Delギコ: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 を
変更する必要はほとんどない。

ソースがない/書き換えると大事になりそうな基本クラスなどの定義
済み動作を置き換えたいときくらいかな?

一部の重要なウィンドウズメッセージは扱いやすい形に書き換えられ

ちょっと知りつぼみな説明になった。
わからんところがあれば質問!
906Delギコ:01/09/20 21:52
http://oshiete.goo.ne.jp/jsp/oshiete_search2.jsp?c=221&tag=207

          。°゜  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   __ ∧ ∧゚     / 教えて!goo にもDelphiが載るといいのにニャ。
〜⊂_⊂( ゚Д゚)っ  <____________
907rock 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ででも開放するとか。
908rock:01/09/20 23:01
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
911Delギコ: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;
914907:01/09/20 23:32
> ところがすべての Windows メッセージに対して、Dynamic メソッドを
> 定義できるため、コントロールのソースがある場合、わざわざ WindowProc を
> 変更する必要はほとんどない
message指令とか、WM〜メソッドをoverrideするってことかも。

907の説明)サブクラス化を行うコンポを削除すると問題なのは、
自分のメソッド(FormのWindowProcと置き換えていたやつ)
が他のコンポにOldProcみたいなかんじで保存されていて、
インスタンスが破壊された後にも呼び出される事があるってことだと思う。
だからWindowProcを置き換えるメソッドはクラスメソッドにして、
そこから処理本体のメソッドを呼び出すようにするという仕組み。
で、使い終わったら、処理本体でなくて、置き換える前のFormのメソッドを
呼び出すようにしてやる。
インチキをしているのは、クラスメソッドを呼ばせる時、TMethod.Data
に当たる部分のデータを、書き換えてしまうところ。
ここの数値が正当じゃなくても、ちゃんと呼んでくれるみたい。
説明下手でスマソ
そういや昔「ばか者」を意味するfuckerって
名前をつけるのは不適切とかのたまってたのがいたな
916デフォルトの名無しさん:01/09/20 23:54
>>915
えーあー カタカナ語はちゃんと語源を確認しようね

で、システムをフックする関数(かなにか)に
Hooker ってなずけた人がいるんです。

Hooker については
http://www.sanseido.net/sup/ItemPane.asp?P0=12&P1=MAIN,NODE,57198
を。
917Delギコ: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とでも考えてくださればいいっす。
918Delギコ:01/09/21 00:12
    ∧ ∧   / ̄
  ∩(,,゚Д゚) <  おもしろい。
⊂,,⌒ ,,つつ.  \_
   ̄ ̄ ソンナニ sage ンデモ エエデ(関西風)

Bをサブクラス化から開放したいとき
A.FOldProc:=B.FOldProcする必要があって
それってWM_DetachProcメッセージ伝達で出来るのかしら??
ちょっとイメージできてないです。

というか、Bを開放するときに、Aも一緒にはずしてしまうって事かしら。

でもコンポーネントは配置されているのに
理由もなくサブクラス化されていない物が混じっているのも
ちょっときついかも

そのあとAを開放しようとすると
プログラム側がワケワカな挙動しないかな。
919884:01/09/21 01:07
誰か>>895教えてくだされ
>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が帰って来たら再度接続しなおす。

メッセージさえ共通にしておけばいいから複数のオブジェクトを設計する場合も
それほど難しい問題は起きない。
922913:01/09/21 08:54
検証した。 問題なく取り付け取り外しできるように見えるぞ

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)が
与えられる事にしましょう。
925922:01/09/21 09:17
おっと、>>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はプロセス内ユニークな値(メソッドアドレス等それぞれのプロセスで管理)
929Delギコ:01/09/21 09:51

      ∧∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 @' ― (,,゚Д゚) < 正規表現はわからんちー。
   し― し-J   \___________
 2chのどこかで正規表現すれがあったような気もする

>>921さんは>>922さん?
>こういうふうになっていると安全に取り外せるのは objDだけ
これで妥協してしまうのだったら
問題は非常に簡単なんですけどね。

> objAを取り外したい場合は objA,B,Cの順に取り外さなければいけない
??なんかわからなくなってきました。
objAを取り外したい場合はobjBのFoldWndProcを
サブクラス先の.WndProcに接続しなきゃいけないですよね。

>   そのFoldWndProcが帰って来たら再度接続しなおす。
イチドサブクラス化解除させてから再度サブクラス化させるってことかな

>>922のコードはイマからみてみます。
×Datach
○Detach
931921:01/09/21 09:56
×objAを取り外したい場合は objA,B,Cの順に取り外さなければいけない
○objAを取り外したい場合は objD,C,Bの順に取り外さなければいけない
>objAを取り外したい場合はobjBのFoldWndProcを
>サブクラス先の.WndProcに接続しなきゃいけないですよね。

 結果的にはそういう事だけど、
 それに拘るからハマルんだよ
 基本的にobjAからは objBが見えない。確実に割り出す方法はないんだよ。
 サブクラスがobjA,objBの2段だけなら サブクラス元のメソッドポインタから割り出せるけど
 さらにサブクラスされているともうダメ

 だから、メッセージを使う方法が一番安全で確実だと皆言ってるじゃないか
933Delギコ: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化

こういう事になっているわけですね。
934Delギコ: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);
とサンクを使っていて、オブジェクト解放時にこのサンクを解放していないからじゃないかと思う
937Delギコ:01/09/21 11:02
   ∧ ∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ( ゚Д゚)   < ほかの自作FormフックCompoも試した
.=| |==U=U==.| |= \___________
 | | |  |  | |   普通にVCLでフック解除するヤツだよ
 | | ノU U.  | |
 | |      .| |

testLabelを削除された時に
暴走はしないのですが
自作の方のサブクラス化は解除されてしまうます。
自作の方は正しくサブクラス化解除できないときは
例外を出すようにしてるからいいけど
タブン、マトモに削除するとWndProcがどこかに逝ってしまい
暴走するだろーな。

WM_DetachProc が流れた所で
安全にサブクラス化解除されない場合は例外発生して
元に戻るようにできないかいニャ。

 考え中.....

  そこまで拘らなくてもいいって肝するけどー。
938Delギコ:01/09/21 11:04
 ∧ ∧   /なんにせよ
 ( ゚Д゚) <  教えてくれたデフォルトの名無しさんズ。
  ノつノつ   \ありがとーう。
 ( 人  
  ソ  )
  ノ ノ
 ( 人  ネジッテ ミマシタ
  ソ  )
  ノ ノ
  UU
939878:01/09/21 11:07
>>895
最初の例が間違えてたっす。スマソ。

s/(\-\-|==)+/$1/g; の場合
「-」奇数→「---」
「-」偶数→「--」
ですな。例では「-=」ともに偶数だから結果は
895が書いてる通りになります。
940デフォルトの名無しさん:01/09/21 11:09
いまさらですが、サブクラスとは具体的にどういう作業を指すのでしょうか。
オブジェクト指向の一部ですか?それとも
単にテクニックの一つでしょうか。

サブクラスとWinProcとはどういう関係がありますか。
つーか、WinProcは何者ですか。
941デフォルトの名無しさん:01/09/21 11:16
Delphiでは、メッセージハンドラとしてメッセージマップなんかより、
ずっと綺麗にメッセージを隠蔽してるから、使わなくて問題無い。
また、Delphiでコールバック関数やメッセージ使うと、
あっという間に超読めないコードになる。
だから、メッセージ操作コード出さないでね>>Delギコ
942Delギコ:01/09/21 11:23
>>940
     ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ピュ.ー ( ゚Д゚)<  説明リンクを探したのだけど
  =〔~∪ ̄ ̄〕\いいのがないのだ。
  = ◎――◎

ちょっと前ならTNight2000っていう面白いCompoのサイトがあったのだが
サイトがお亡くなりになってしもた。
Googleのキャッシュでちょっと見れるみたい。

他には
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm
http://homepage2.nifty.com/boheme/delphi/tips/tec1080.htm
http://www.borland.co.jp/tips/delphi/dh015/index.html
こんなかんじかなあ。

簡単な説明すると
TLabelに流れてくるメッセージを見たい場合は
TLabelを継承してメッセージハンドラ記述して見てもいいんだけど
いろんな理由からそれをやりたくない場合
TLabelをサブクラス化するとそれが見れるという仕組みらしいよ


>>941何がいいたいんだ?
頻繁に必要になるものでもないが、必要なときには使うしかあるまい?
943Delギコ:01/09/21 11:48
             (  ヽ      ――――  ○  ――――
     , ⌒ヽ    (     )          // | \
    (    '   (       ヽ⌒ヽ 、   / / |    \
    ゝ    `ヽ(              )        | (⌒ 、
   (           、⌒         ヽ     (     ヽ
  (        (⌒              )   (
 (                          Y⌒ ヽ
  (        `)
   ゝ              ノ  ノ
_________________________________________________________________________________________
 〜〜 〜〜   〜〜〜  〜  〜〜  〜〜  〜  〜〜  〜
  〜〜     〜〜      〜〜        〜〜〜    〜
〜 〜〜     〜〜   〜〜   〜〜  〜〜    〜〜〜
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ....   ∧ ∧       ....      .....        ....      .....
 ....    (,,゚Д゚) ..      ....   ....      .....
    .... | ∪   ....           ...   ...       .
....    〜 | ナツガ オワッタ スレ モ オワッタ       ....          
  ....   ∪∪
       .... アツイ オモイデ サヨウナラ  ....      ....   ...     


新スレ立てました。サブクラス化などの続きはこちらで、、

( ゚Д゚)ノ Delギコ猫のプログラミング相談室part3
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001039863
944935:01/09/21 11:49
ああ、そうか、
 このメッセージが経路を辿る時に途中で解放せずにそのまま渡されて来る場合もある訳で
 経路の全てがこのメッセージをサポートしてるかどうかチェックする方法が無いといけないのか

 という事で、このメッセージを受け取った時のサブクラス先のポインタが自分が設定した時の
 状態に戻っていなければ・・・・・

 どうしようもないかな?
 せいぜいメッセージを出して別の何もしないコンポを動的に作成してそいつを割り当てておくしかないかも

という事でコンポ作家の皆さん >>935 をよろしく
945デフォルトの名無しさん:01/09/21 11:53
つまり、コントロールに送られたウィンドウメッセージを
最初に受け取るのが WinProc 関数であり、
これを別の関数に置換して、そちらにメッセージが
流れるように仕向ける操作を「サブクラス化」と呼ぶわけですか。
946884:01/09/21 11:54
>>939
ぁぁ納得したです
これで正規表現はバッチリだ(嘘
947デフォルトの名無しさん:01/09/21 12:08
>>941何がいいたいんだ?
>頻繁に必要になるものでもないが、必要なときには使うしかあるまい?

Delギコ生意気。使わずにできるぞ。
サブクラスの作成でつまずいてるんだろ。それがメッセージのせいって分からんのか。
分からんのだったら、人にアドバイスするな。
マターリいこうぜ
949Delギコ:01/09/21 12:49
 ∧ ∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)    <  え〜、牛乳いかがっすかー。
./\品品昌_   \___________
( U__| 雷印 |
.U U ̄ ̄ ̄

カルシウム不足の方が1名おられるようで
他のお客様のご迷惑になりますので,,,
牛乳飲んどけ。

折れもカルシウム不足かも。ノンどくか。


でも、ウシって今・危ニャーかも??
>>949
牛乳には狂牛病の原因と考えられているプリオンは含まれません。
神経系の体液が関与しない限り安全です。
951デフォルトの名無しさん:01/09/21 21:11

終いには「Delギコ猫のプログラミング相談室」なんていう書籍が出そうだね(w
952デフォルトの名無しさん:01/09/22 06:13
なんで”サブクラス化”と言うのでしょうか?
サブクラスと言うと、子クラスを連想します。
数学の集合辺りの用語とか聞いた

>サブクラスと言うと、子クラスを連想します
合ってるやん
新スレあるのにageるとはこれいかに
>>Delギコ
スレが10までいったら書籍キボン。
デザパタとかも含めてお得なお値段\3Kあたりをキボンw

とりあえず終了
スレよりこれ以降は書き込みを自粛した方がよいかと思われ。
(モレモナー)

つうわけで再度誘導。

( ゚Д゚)ノ Delギコ猫のプログラミング相談室part3
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001039863
こっちのスレに書かしてもらいます。
なんとなく実装の改良案。
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;
957Delギッコー:01/09/22 11:32
    /\       ________
  /ギッコー   /
/____\ < 新スレでやろーう
  | ゚Д゚|    \
 ノ| || || || |し      ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         sageるよ
保守
にゃんまげ
保守