1 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:50:40 ] Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。 <前スレ> くだすれDelphi(超初心者用)その47 pc11.2ch.net/test/read.cgi/tech/1214292265/ <過去スレ> DelWiki避難所(Delphi 関連の過去スレッド) delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89
12 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:46:20 ] >>10 ごめんヘルプ見ても理解不能 アクションバンドとか出てきたし 3行でいいから特徴をおせーてプリーズ
13 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 17:59:27 ] >>12 タイトル見ようぜ > 新しいアクション機能(Professional 版および Enterprise 版)
14 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:42:41 ] >>13 それはわかっとる Personalで使えないからどんなもんか知る術がない
15 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:43:20 ] >>13 それはわかっとる Personalで使えないからどんなもんか知る術がない
16 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:44:17 ] どうあがいても使えないものを必死に使いこなそうとする男の人って・・・
17 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 18:46:56 ] いや使えないことはわかっとるがな どんなもんかちょっと聞いてみただけやがな ちょっと3行で教えてーなプリーズ?
18 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:47:07 ] >>9 Office2000形式のメニューとか作れるんじゃなかったか。 Actionをドラッグ&ドロップして。
19 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:51:52 ] >>5 昔はCで書かれてたのかぁ 無料のTurboDelphiインストールしようとしたら、.NetとかJ#とかMSですら使ってない ような物を入れさせられて嫌だったなぁw ちゃんと全部Delphiで書いて貰いたいものだ
20 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:54:36 ] >>19 > 昔はCで書かれてたのかぁ Delphiは最初からDelphi製でしょ。 > 無料のTurboDelphiインストール 今はそうでも無いよ。
21 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:56:42 ] 「今は」ってどういう意味? Delphi2009が.NETいらなくなってってこと? それがどうTurboDelphiに掛かってるのか良く分からない
22 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 22:58:35 ] >>20 あ、そういう事ね 自分でアプリ作るときにUIだけDelで作って、処理はCで書いてたって意味かな?
23 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:02:50 ] >>17 使った事ないんであれだけど、動的UI作れるんじゃないのかな? D&Dでメニューやツールバーを動的に構築できるとかいう話かなと、わからんけど
24 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:16:02 ] >>21 > Delphi2009が.NETいらなくなってってこと? .NET SDKはほぼ100%要らない。 ヘルプビューワーのみ。ドキュメントのインストールも無し。 .NET ランタイムは要る。
25 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 23:32:52 ] >>24 で、「無料」のTurboDelphiへの批判レスにはそれが妥当だと思ったわけだね
26 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 00:08:27 ] 話しかみ合ってる?
27 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/04(火) 17:45:15 ] データベースに関する質問です。 画像を格納できるテーブルを作成・編集するアプリを開発中なのですが クライアントの要望で音声も格納できるようにしようとしています。 しかし音声にはDBImageコンポみたいなコンポがありません。 ググってもTorryをみてもそれっぽいコンポを見つけらなかったのですが 何か良いコンポはありますでしょうか。
28 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 19:49:25 ] バイナリーで保存するんじゃねーの。
29 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/04(火) 21:42:32 ] やはり自前で実装ですかね。 DBWaveコンポ(仮称)つくってみます。
30 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:54:23 ] SQliteでバイナリも保存できるんじゃね?
31 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 16:24:46 ] >>27 はDB awareなコンポーネントないか聞いてるのにバイナリだの なんだの見当違いなこと言ってる秋の夕暮れ
32 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 22:47:04 ] 「じゃね」使いはアホ。
33 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 06:03:05 ] 俺Jane使ってるよ 使いやすくてオススメ!
34 名前:デフォルトの名無しさん [2008/11/06(木) 10:42:06 ] 既存のデータの入ってる実際に使っているテーブルに 新たにフィールドを追加する必要がでてきました。 TTableで フィールドA フィールドB があるテーブルに 「フィールドCがなければフィールドCを追加」 という処理をしたいんですがどのようにすればいいんでしょうか? TQueryのSQLを使ってALTER TABLE ... ADD ...すればフィールドは追加できますが「フィールドCがなければ」という処理をどう書いていいかわかりません。 Table.FindField('フィールドC') = nil で調べれるのかとも思ったのですが、これはTFieldがあるかどうかを調べるだけで、データベース内にフィールドがあるかまでは調べてくれません。 いったんテーブルを削除して作り直せば簡単には出来ますが レコードは残したままでやりたいのです。 何かいい方法はありますでしょうか?
35 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 11:44:59 ] TableXXX.FieldDefs.IndexOf('フィールドC') < 0
36 名前:デフォルトの名無しさん [2008/11/06(木) 12:13:11 ] 引継ぎもなく、古いDelphiの修正しろといわれたのですが、 実行してみようとすると wwDataInspector, wwrcdpnl, wwdblook,TwwDBLookupCombo などがないと言われます。 これらはどういうコンポーネントを入れればいいのでしょうか? Delphi2006をいれたのですが、元のプロジェクトはどのバージョンか不明です。
37 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:14:05 ] Explorer終了すると --------------------------- Error --------------------------- Runtime error 217 at 019CF57D --------------------------- OK --------------------------- とかいうエラーが出るんだけど常駐しているDelphi製アプリと関係ある?
38 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 12:19:26 ] >>36 そのくらいググレカス
39 名前:デフォルトの名無しさん mailto:sage [2008/11/06(木) 22:25:47 ] >>37 Explorer終了ってつまりシャットダウンとかログアウトだよな
40 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 01:23:44 ] >>34 Firebird / Interbaseならrdb$relations Oracleならuser_tab_columns を検索 ほかのDBはシラネ
41 名前:36 [2008/11/07(金) 12:25:08 ] >>38 いやまじググッてもでなくて。 DelphiてVerごとの上位互換とか結構高いんですか?
42 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 12:26:40 ] 検索して出てこないなら内部で作ったコンポなんじゃないの。 CDだかPCだかを全grepしてみたら。
43 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 14:48:46 ] >>41 wwと接頭辞付いてるところ見るとInfoPowerのコンポーネントかな。 ttp://www.woll2woll.com/index.html
44 名前:デフォルトの名無しさん [2008/11/07(金) 15:06:01 ] 質問です。 procedure EdiToolCdExit(Sender: TObject); begin if ( ( BitBtnEnd.Focused = False ) and ( BitBtnCancel.Focused = False ) and ( RadGrpKey1.Focused = False ) and begin //キー部の入力チェックを行う if ( LFncKeyCheck ) then begin LProUseToolTblCtrl; end; end; end; このようなExitイベントがあり、特定のボタン(終了、取り消しなど)を 押下された時には入力チェックを行わないようにしています。 ですがBitBtnEndとBitBtnCancel.押下時は入力チェックが走らないで正常に動作するのですが RadGrpKey1を押下時はなぜか入力チェックが走ってしまいます。 どなたか分かりますでしょうか? ちなみにRadGrpKey1はRadioGroupです。
45 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 15:09:30 ] >>44 なんか色々とおかしいぞ・・・
46 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 15:21:17 ] つーかなんのためにsender持ってんだ
47 名前:デフォルトの名無しさん [2008/11/07(金) 15:46:51 ] endが変な位置に行ったのはコピペしたからですwすいません。 Sender使ってif(Sender <> RadGrpKey1)then を追加してみたけどだめでした。。。
48 名前:デフォルトの名無しさん [2008/11/07(金) 18:41:41 ] DELPHI6での コンポーネントとパッケージとパレットの関係を教えてください。 DELPHIは拡張子が多すぎて初心者の方は混乱しませんか?
49 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 22:57:21 ] >>44 RadioGroupの場合、フォーカス持ってるのは中のRadioButtonだから。 ActiveControl is TRadioButtonかどうか見て、さらにそのParentを調べるか RadioGroupのOnEnterとOnExitでフラグ立てるかお好きな方で。
50 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 04:46:04 ] ちょいと教えて欲しいんですが、Captionを欧文フォントにして 全角(漢字とか)入れると急激に重くなるのはどういうことでしょうか。 これをC++Builderで書くと、ほんの少し軽くなる。 これってDelphiが悪いのか、WINDOWSが悪いのか 良くわからないんですけど、誰か知ってたらお願いします。
51 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:40:35 ] Delphi/C++Builderのバージョン、OSを明示すべし。
52 名前:41 [2008/11/08(土) 09:29:32 ] >>43 ありがとうございます。 DelphiってBorlandしかコンパイラーとか作ってないのかと思ってましたが、 別のIDEとかもあるんですね。 しかし、前任者はなぜこれを使ってたのか。。
53 名前:ななしへ(ry ◆XcB18Bks.Y mailto:sage [2008/11/08(土) 09:38:43 ] >>50 OpenTypeの欧文フォントで文字セットを日本語にすると 日本語の文字が出てくるたびに あらかじめ関連づけられた日本語フォントファイルからフォントを持ってくるという 面倒なことをやっていますのでガクッと重くなるのかもしれません。 (駅の売店でものを売るときに奥の棚から商品を引っ張り出すような感じでは?) BCBが若干軽いのはBCB未経験ゆえにわかりませんが DelphiとBCBとでは文字列処理の実装が異なるとすれば影響するかもです。
54 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 12:56:18 ] >>19 今思えばJ#使ってるのってヘジたんのせいだったんだな
55 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:38:22 ] JBuilder こコードを流用しただけだろ
56 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:39:06 ] × JBuilder こコードを流用しただけだろ ○ JBuilder のコードを流用しただけだろ
57 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 19:31:15 ] ヘジは、J#開発者だが、 そのころにはすでにBorland去ってるからなあ Delphi2の開発時にMSにいっちゃったんだっけか
58 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 20:13:15 ] delphi2009のことについてききたいんだが 活発なスレどこ?
59 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 20:19:52 ] そんなものない ML池
60 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 20:33:23 ] 欧文フォントで文字セットを日本語にすると、フォントマッパによって フォントフェイス名より文字セットの方が優先されると思うから、 実体化で指定したフォントと異なるフォントが大抵選択されていると思うが。
61 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 20:40:08 ] だから?
62 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 06:36:37 ] >>58 【Embarcadero】CodeGearオッチャ その12 pc11.2ch.net/test/read.cgi/tech/1221142134/
63 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/09(日) 18:58:30 ] ∧ ∧ いまさらながら、 ミ ゚Д゚彡 BDEの使い方について 〜ミ,,,,uuミ ききたいのですが。。。 詳しく知っている人いらっしゃるでしょうか.... 環境はD2007と付属のInterbaseを使いたいのですけれども うまく接続できません。 コンパネのBDE Administratorを起動すると databaseとして dBASE Files DBDEMOS Excel Files GlobalCar IBLocal MS Access Database Visio Database Sample とあるのですが(初期状態?) これ、それぞれ、どうやって接続すればいいんでしょうか。
64 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/09(日) 19:06:46 ] IBLocalはどうやら ユーザー名:SYSDBA パスワード:masterkey らしいのですが(ネットで調べると) データベース エンジン エラー IDAPI サービスライブラリをロードできません。 ファイル:SQLINT32.DLL エリアス:IBLocal と、表示されて接続できません。 BDEのエリアス設定方法、特にInterbaseやら paradoxやら、ExcelFilesやらが、わかったらうれしいかなと 思ってます。 ∧ ∧ オシエテ.... ミ ゚Д゚彡 〜ミ,,,,uuミ
65 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/09(日) 21:49:31 ] 誰もいないからいまのうち。 _____________ .∧,,∧ / @'"ミ,,゚Д゚ミ < どんどん質問してしまうぞ。 UU''UU \___________ 世界のすべてのDelphi質問を俺の質問だけで埋めてシマヘ IB2007付属のIBConsole2007ならつながったんだけど DEKOさんのIBConsole、Firebird対応版で D2007Pro付属のIB2007に対して接続するには どうしたらいいんじゃろーか。 ローカルのInterbaseとしては インスタンスがgds_dbという名前で存在するんですが それを設定するのがどこにあるのかしらと。。。
66 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 22:23:15 ] >63 なぜIBにつなぐのにBDEなの?IBXなりdbExpressでいいじゃない。
67 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/09(日) 23:05:03 ] ∧ ∧ 比較をしたいんです。 ミ ゚Д゚彡 〜ミ,,,,uuミ しっかし、DB系の技術はわけわかですね。 dbExpressで接続しようとしてもなっかなかうまくいかない。 みつけた文章がこれ。 www.borland.com/resources/jp/pdf/products/delphi/delphi_bde_to_dbexpress_jp.pdf プロバイド/リゾルブアーキテクチャ… なにこの奇天烈な用語は。
68 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 23:28:55 ] ん〜D2007ではBDEはParadox/dbase用に残されている、という状況だったはずなんで。 今試してみたけどうまく繋がらんね(XPSP3+D2007+IB7.1)。
69 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/10(月) 00:19:28 ] 上記のURLの Borland Database EngineアプリケーションのdbExpress への移行 ∧,,∧ なんて読みにくい ,,ミxдxミ くず文章だ.... .とミ,,,,,U,,U 頭イタイ... このサンプル見て、サンプル通りに物を作れるとおもっておんのか.... サンプル構築手順と説明文書が 合わさって書いてあって、ものすごい読みにくい。 せっかくのdbExpressが台無しだな… >>68 さん 調べてくださってありがとうございます。
70 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:50:13 ] Delphi7 ProでBuild 4.453ってちゃんとパッチが当たってる状態ですか? 使っている人いたら最新のビルド番号教えてください。
71 名前:68 mailto:sage [2008/11/10(月) 20:52:16 ] >69 DEKOさんがお答えくださってるようなのでそちらへドゾ。
72 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 16:14:35 ] Delphiにて、ハッシュテーブル的(Dictionary的な)クラスはありませんでしょうか? THashedStringList というのを見つけたのですが、ヘルプを呼んでもイマイチ使い方がわかりません。 TStringListと同様につかえる、という記述をネットで拝見したのですが、 文字列をキーにして、文字列を得たい場合、 Hash.Values["Hoge"] := "Value of Hoge"; のような感じで、使ってよいものなのでしょうか?
73 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 17:17:51 ] PopupMenuとその中のitemを動的生成した場合って、PopupMenuを解放すれば 中のアイテムも解放されるんでしょうか? それとも個別にfree?
74 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 19:05:51 ] >>72 文字列をシングルクオートで括ってるならいいと思うよ >>73 ソースを読めば分かるとおり、解放される
75 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:18:27 ] >>73 やってみればわかるだろw
76 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:28:40 ] 以下のinterfaceを使ったコードにおいて、メモリーリークが発生するのですが、対処法はありませんでしょうか? こちらのdSpec delphixtreme.com/wordpress/?p=15 で同様のコードがありどうしたものかと困っております。 program circular_reference; {$APPTYPE CONSOLE} uses SysUtils, Classes; type ITest = interface ['{38C68C6A-7CBD-42FE-9249-0ED869119A29}'] procedure Foo; end; TTest = class; TSubTest = class FTest: ITest; public constructor Create(NewTest: ITest); destructor Destroy; override; end; TTest = class(TInterfacedObject, ITest) FSubTest: TSubTest; public constructor Create; destructor Destroy; override; procedure Foo; end; procedure CallFoo(Test: ITest); begin if Assigned(Test) then Test.Foo; end;
77 名前:>>76 続き mailto:sage [2008/11/12(水) 20:29:13 ] { TSubTest } constructor TSubTest.Create(NewTest: ITest); begin FTest := NewTest; CallFoo(FTest); end; destructor TSubTest.Destroy; begin inherited; end; { TTest } constructor TTest.Create; begin inherited; FSubTest := TSubTest.Create(Self); end; destructor TTest.Destroy; begin FreeAndNil(FSubTest); inherited; end; procedure TTest.Foo; begin Writeln('TTest.Foo!!'); end;
78 名前:>>76 続き [2008/11/12(水) 20:31:35 ] procedure Main(); var Test: ITest; begin Test := TTest.Create; CallFoo(Test); end; begin ReportMemoryLeaksOnShutdown := True; Main; // Writeln('push ENTER key to end!!'); Readln; end. -------------------- で終わりです。 TSubTest.FTestをTTestにし、TSubTest.Create(NewTest: TTest)にした場合は大丈夫のようなのですが、 どうようの入れ子構造にし、TSubSubTestが、ITestを持っていると駄目?なようです。
79 名前:76 mailto:sage [2008/11/12(水) 21:00:52 ] なんとなく、わかてきた・・・ Delphiのinterfaceが参照カウンタ実装でGCがないので、interfaceを循環参照にするとメモリーリークを起こす、 という奴でしょうか? TTestのフィールドにTSubTestを持たせないようにすれば、いけそうな気がしてきました。 弄ってみたいと思います。 何か助言あればぜひお願いします
80 名前:デフォルトの名無しさん [2008/11/12(水) 21:05:27 ] バッチファイルで処理していたことをDelphiのボタンを押した際に処理する ようにする場合、以下の文はどのように書くのでしょうか? AAA remove root\BBB AAA install BBB.inf root\BBB どなたか力を貸して下さい。 よろしくお願いします。
81 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:27:19 ] >>80 調べる気もないなら使うな
82 名前:デフォルトの名無しさん [2008/11/12(水) 22:00:49 ] >>81 調べてみたのですが分かりませんでした。 バッチファイルの操作でしたら WinExec('AAAt.bat',SW_SHOW); で可能でしたがバッチファイルの中身を操作することが出来ませんでした。
83 名前:デフォルトの名無しさん [2008/11/12(水) 22:37:06 ] >>82 Tmemo.loadfromfile(aaa.bat)
84 名前:デフォルトの名無しさん [2008/11/12(水) 23:01:10 ] そもそも以下の様なドライバのインストールはDelphiで可能なのでしょうか? AAA install BBB.inf root\BBB >>83 すいません!未熟なので内容が伝わりません。
85 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:03:14 ] >>83 見たいな奴のソースとか読みたくねえ
86 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:33:02 ] >>75 それが判る初心者なら質問しませんって・・・ 次いでと言ってはなんですがどうやったら判るんです? 解放されてるかどうかの判定。
87 名前:超初心者 [2008/11/12(水) 23:38:50 ] Delphiでビンゴゲームを作ろうと思っているのですが、1〜80のランダムな数を1回ずつだけ表示させるやり方がわかりません Random()だと同じ数が出てきてしまうので… 超低レベルな質問なんでしょうが調べてみても良く分からなかったので勇気を持って書き込んでみました Delphi使いの皆様、どうかご教授ください。お願いします
88 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:43:00 ] stringlistに1-80入れて 行をシャッフルして上から見てけば?
89 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/12(水) 23:57:00 ] ∧ ∧ >>68 さん ミ,,。_。彡 >>DEKOさん 〜ミ,,,,uuミ ありがとです
90 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/13(木) 00:09:24 ] ∧,,∧ / ̄ \,,,,ミ,,゚Д゚彡 < しつもんす! ⊂,,,,,,,,,つつ. \_ 配列定数初期化は、ここにあるようにかっこよくかけるんだけど delfusa.main.jp/delfusafloor/opensource/emeditorplugin/20070830170942/Product/DelphiCommentDelete/DelphiCommentDelete.dpr.txt braceTable: array[TBraceType] of TBraceInfo = ( (beginMark: ''''; endMark: ''''; remove: false), (beginMark: '{$'; endMark: '}'; remove: false), (ry 動的配列の初期化は下記の風にしかかけないのかな。 var braceTable: TBraceTable; begin SetLength(braceTable, 5); with braceTable[0] do begin beginMark := ''''; endmark := ''''; remove := False; end; with braceTable[1] do begin beginMark := '{$'; endmark := '}'; remove := False; end; with braceTable[2] do begin beginMark := '{'; endmark := '}'; remove := True; end; (ry なんだか、配列定数風にかけたらかっこいいと思うんだけど方法ない? 動的配列に配列定数をほりこむとかでもいいから、なんかきれいな記述方法があればオシエテくで。
91 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:09:09 ] ActiveXコントロールを「スクリプトを実行しても安全だとマークする」 homepage3.nifty.com/LILILIN/HOWTO/activex_safe.htm Delphiで作ったActiveXに同様の措置をしたいのですが、どうすればいいかわかりませんか? Del2007を使ってます。
92 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 04:45:02 ] >>86 FastMMとか >>90 俺は綺麗な方法なんて知らんので関数作るな procedure SetBraceInfo(var Brace: array of TBraceInfo; beginMark, endMark: String; remove: Boolean); var I: Integer; begin for I := Low(Brace) to High(Brace) do begin Brace[I].beginMark := beginMark; Brace[I].endMark := endMark; Brace[I].remove := remove; end; end;
93 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 08:51:51 ] 自分ならTBraceTableをTBraceInfoを保持するTObjectList/array ofベースのgenericなコンテナにして TBraceInfo = record or object public constructor Init(beginMark, endMark: String; remove: Boolean); end function BraceInfo(beginMark, endMark: String; remove: Boolean): TBraceInfo; begin Result.Init(beginMark, endMark, remove); end; braceTable[0] := BraceInfo('''', '''', False); braceTable.Add(BraceInfo('''', '''', False)); braceTable[1].Init('{$', '}', False); braceTable.Add('{', '}', True); なんて書けるようにするな。どこまで書きやすくするかは利用頻度次第。 Delphiの定数表記は貧弱だからあまりがんばる余地がない。
94 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/13(木) 18:14:12 ] >>76-79 条件がよく分からないのですが別のオブジェクトに所有されるときに参照カウントが0になって勝手に解放されてしまうようですね。 手っ取り早い解決法は参照カウントが無効なクラスを用意してTInterfacedObjectの代わりに使うことです。 // 参照カウントを無視するインターフェイスクラス(TObject版)※TInterfacedObjectのコピペ改造 TNoRefCountInterfacedObject = class(TObject, IUnknown) protected function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; public function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall; end; function TNoRefCountInterfacedObject.QueryInterface(const IID: TGUID; out Obj): HResult; const E_NOINTERFACE = HResult($80004002); begin if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE; end; function TNoRefCountInterfacedObject._AddRef: Integer; begin Result := -1; // これで参照カウントが無効になるらしい end; function TNoRefCountInterfacedObject._Release: Integer; begin Result := -1; // これで参照カウントが無効になるらしい end;
95 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/13(木) 18:41:43 ] >>90 レコード型変数は直接代入できますので配列定数からコピペする場合は const cBraceTable: array[TBraceType] of TBraceInfo = (ry var e: TBraceType; SetLength(BraceTable, Length(cBraceTable)); for e := Low(TBraceType) to High(TBraceType) do BraceTable[ord(e)] := cBraceTable[e]; …くらいにはできそうです(一応テスト済み)。
96 名前:76 mailto:sage [2008/11/13(木) 19:41:55 ] >>94 勝手に開放される側の話じゃなく、開放されないっていう話なのですが・・・('A`) >>94 の方法はDelWikiにある奴ですよね
97 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/13(木) 22:52:12 ] >>96 なるほどそれは失礼しました。 TSubTest.DestroyでFreeAndNil(FTest)(自分で解放する)では駄目ですか? せっかくの自動解放システムを捨てるのももったいない話ですが… >>94 はDelWikiを見る前からやっていましたが もし知っていたら余計な苦労をしなくて済みましたね。
98 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 23:00:29 ] TMemoに読み込んだファイルの内容を操作したいんだけど 行を指定するのはMemo1.Lines[i]といった形でできる。 では行の中のさらに文字の部分を指定するのはどうすればいいんでしょうか?
99 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/13(木) 23:58:29 ] ∧,,∧ >>92 さん ミ,,゚Д゚,彡 ありがと.... ミ(旦⊂ ミ (~,,(~,,,ミ@ でも、そのコード、動かんがな... >>93 さんもありがと。 >TObjectList/array ofベースの いや、そこまでは。。。 >Delphiの定数表記は貧弱だからあまりがんばる余地がない。 そのようですね。 とりあえずBlogに書いてみたので、この程度の使い道っす。 >>DEKOさん 内緒ですし、あと、猫の耳が Λ∧ ラムダになってます。 耳は"および"のほうがカワイイですよ。 MSPゴシックだとわかりませんが。明朝だとわかる思います。
100 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/14(金) 00:02:20 ] >>98 さん ∧,,∧ こんな感じかしら ミ゚Д゚,,彡 ミ(旦⊂ ミ 操作なので。 (~,,(~,,,ミ〜 これ動かして慣れてみてください。 procedure TForm6.Button1Click(Sender: TObject); var i: Integer; j: Integer; s: String; begin for i := 0 to Memo1.Lines.Count - 1 do begin s := Memo1.Lines.Strings[i]; for j := 1 to Length(s) do begin s[j] := '*'; //読み出しだけならこんな書き方もできたり。 // s := s + Memo1.Lines[i][j]; end; Memo1.Lines[i] := s; end; end;
101 名前:98 mailto:sage [2008/11/14(金) 00:32:08 ] >>100 助かりました。 ありがとうございます! おかげで色々と操作ができまして懸念が1つ解消されました。
102 名前:87 [2008/11/14(金) 09:25:46 ] >>88 ご回答ありがとうございます。やってみます
103 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:16:40 ] >102 えぇ、 普通にRandomで、出てきた数字を覚えておいて重複したら却下すれば良いだけじゃないの?
104 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:19:55 ] >>103 時間の無駄。
105 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:32:56 ] ざくっと書いて見た。 procedure TMainForm.Button1Click(Sender: TObject) var o: array[0..79]of Boolean; i, n: Integer; function AllOut: Boolean; var i: Integer; begin result := false; for i := 0 to 79 do if( not( o[i] ) )then exit; result := true; end; begin for i := 0 to 79 do o[i] := false; while( not( AllOut ) )do begin n := Random( 80 ); if( not( o[n] ) )then begin o[n] := true; // ここに新たに数字が出たときの処理 end; end; end;
106 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 16:28:47 ] この流れちょっと前にも見たな
107 名前:76 mailto:sage [2008/11/14(金) 18:45:47 ] >>97 つきあってくれてありがとう。質問者側じゃないようなレスしてスマソ ReportMemoryLeaksOnShutdown の出力結果張り忘れてました。 はっときます。 つまり、両方(TTestとTSubTest)のDestroyが呼ばれてないんです。 どちらかの開放の責任を循環参照の外側に出せば、開放されるはずなので、 いろいろ弄繰り回して試してみたいと思います。
108 名前:76 mailto:sage [2008/11/14(金) 18:48:23 ] 出力結果張る前に投稿しちゃった・・・ 以下は、>>76-79 の ReportMemoryLeaksOnShutdown の出力結果です。 --------------------------- Unexpected Memory Leak --------------------------- An unexpected memory leak has occurred. The unexpected small block leaks are: 1 - 12 bytes: TSubTest x 1 13 - 20 bytes: TTest x 1 --------------------------- OK ---------------------------
109 名前:76 mailto:sage [2008/11/14(金) 18:51:32 ] Delphi2009をお持ちの方にお聞きしたいのですが、 こちらの記事にて、 Delphi 2009で追加された3つの便利な機能をコードで検証 − TechTargetジャパン techtarget.itmedia.co.jp/tt/news/0811/11/news02.html > 注4.関数内関数を匿名関数型の変数に代入することもできる。 とあるのですが、これは本当でしようか? 今までは関数内関数の参照は取得できず、 以下のサイトのようなテクニックで無理やり実現していました。 λ with INNER FUNCTION hp.vector.co.jp/authors/VA028375/delphi/delphipascal_xx_lambda.html もし、「関数内関数を匿名関数型の変数に代入」ができると、 さらなる可能性が広がるのですが・・・
110 名前:109 mailto:sage [2008/11/14(金) 18:52:16 ] 名前欄消し忘れたorz 76と関連性はないです。
111 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:58:02 ] それが2009の拡張なんだろ
112 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:46:00 ] >>106 procedure Main(); var Test: ITest; begin Test := TTest.Create; CallFoo(Test); end; Test変数がスコープ外れた後、参照カウンタが-1されるが、まだ、TTestクラスのインスタンスは 自身の内部変数FSubTestによって参照されているので、参照カウンタ1のまま、TTest.Destroyが永遠に呼ばれず メモリリーク。