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
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が永遠に呼ばれず メモリリーク。
113 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/15(土) 00:38:14 ] ∧,,∧ たぶんね ミ,,゚ 3 ゚彡 遅いかも>>103 さん、105さん ミ つ旦)~~ 〜と,,,~),,~) いや、パフォーマンスを気にする必要が無い場面は 多々あるんだと思うだが、この場合、 1000個目の乱数を出すために大変だよ。 出力済みの999個は重複しているから。 何を出力してもほとんどははじかれる。 こういう時には>>88 さんのいうように リストでも配列でもいいんだけど 1 2 3 4 5 6 … を用意しておいて、 1番目の箱を乱数1-1000で決めた他の番号の箱と中身を入れ替えて、 2番目の箱を乱数1-1000で決めた他の番号の箱と中身を入れ替え。。 と、1番目から1000番目の箱を入れ替えていくのがセオリーかと。 >「関数内関数を匿名関数型の変数に代入」ができると、 さらなる可能性 そうなの? 面白い事やってますね。
114 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:49:14 ] >>105 のソース読みにくそうだな
115 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:31:58 ] TListViewでOwnerDataがTrueの場合、複数選択はどのように取得すればいいんでしょうか OwnerDataがFalseのときはItemIndex番目からSelCount個見つかるまで 一つずつItems[i].Selectedを調べていたんですが使えないみたいです。 ヘルプの例に従い以下のようにやってみても駄目でした。 選択数が1個の時だけ検出されます。複数になると1個目すら検出できません。 (Ctrl+クリックのときだけいけるっぽい) OnSelectItem内で ListItem := ListView1.Selected; while ListItem <> nil do begin ほげほげ ListItem := ListView1.GetNextItem(ListItem, sdAll, [isSelected]); end; よろしくお願いします
116 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 05:24:09 ] OnDataStateChangeにも同じコード書いたら行けたみたいです 今度はCtrl+クリックに反応しなかったんで両方でコード実行しないと駄目ぽいけど・・・
117 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 08:40:53 ] >>113 でもさぁ、たかがビンゴでパフォーマンス云々言われてもねぇって感じ。 見た目簡単なほうが良いんじゃね? まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。
118 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 08:44:16 ] >>117 >まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。 9 × 9 - 真ん中1つ = 80 じゃない?
119 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 09:00:04 ] 間違ってたらごめんね。 ビンゴって1−75じゃなかったっけ? その数字が5*5のマスの真ん中以外にランダムに配置されてるんじゃ? あ、ビンゴにもいろいろあるんですか??
120 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 10:30:13 ] 全員にすべての数字が揃ってるわけじゃない
121 名前:デフォルトの名無しさん [2008/11/15(土) 14:15:30 ] TEditを継承したクラスをつくるって方法を使わず、FormCreate時にEdit1をキャレット非表示のものにする方法をどなたか教えてください!
122 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 14:22:15 ] >>121 Edit1.Enabled:=False;
123 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 14:40:02 ] Create時じゃないが procedure TForm1.Edit1Enter(Sender: TObject); begin HideCaret(Edit1.Handle); DestroyCaret(Edit1.Handle); end; でどうだ
124 名前:デフォルトの名無しさん [2008/11/15(土) 16:38:28 ] >>123 それでやってみるようにします。 ありがとうございます。
125 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 16:40:58 ] うまく説明できないかもしれませんが、 ・どんなときでもForm1のKeyDown(Press)がメッセージを取る ようにするにはどうすればいいんでしょうか?
126 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 16:42:43 ] KeyPreviewプロパティかな?
127 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/15(土) 16:47:28 ] >>117 人間が手でやるとしたら1から80までのカードを作ってかき混ぜるでしょうから コンピューターでもそうやるほうが自然ではないかと思います。(作ってみたらこっちの方がわかりやすいとオモウ) // Num1 と Num2 の値を入れ替える procedure SwapNumbers(var Num1, Num2: integer); //inline; var TempNum: Integer; begin TempNum := Num1; Num1 := Num2; Num2 := TempNum; end; // Numbers のシャッフル:奥村先生のコードを移植. procedure Shuffle(var Numbers: array of integer); var i1, i2: Integer; begin for i1 := High(Numbers) downto 1 do begin i2 := Random(i1 + 1); SwapNumbers(Numbers[i1], Numbers[i2]); end; end; var Numbers: array [1..80] of integer; begin Randomize; for iNum := Low(Numbers) to High(Numbers) do Numbers[iNum] := iNum; Shuffle(Numbers);
128 名前:125 mailto:sage [2008/11/15(土) 16:50:40 ] >KeyPreviewプロパティかな? うまくいきました。 どうもありがとう。
129 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:18:36 ] >>127 玉を一個一個出すビンゴゲームの雰囲気ではないですけど、いいですね。 わかりやすい。
130 名前:125 mailto:sage [2008/11/15(土) 18:15:17 ] Form1をKeyPreview:=trueにして、Form1.OnKeyDownでButton1.SetFocusとかでフォーカスを設定しようとしたのですが、 Tab移動のほうに処理が取られるようでうまくいきません。 Tab移動を眠らせてOnKeyDownの中でフォーカスを移すにはどうすればいいんでしょうか?
131 名前:デフォルトの名無しさん [2008/11/15(土) 19:18:23 ] >>127 玉を一つ一つ取り出す随時抽選方式のビンゴ風に改造してみました。 var Numbers: array[0..74]of Integer; LotNumber: Integer; 当選番号 LotCount: Integer; 抽選回数 74->0 procedure BingoStart; var i: Integer; begin LotCount := 74; for i := 0 to LotCount do Numbers[i] := i; end; procedure BingoLot; var n: Integer; procedure SwapNumber(var a, b: Integer); var c: Integer; begin c := a; a := b; b := c; end; begin n := Random( LotCount ); LotNumber := Numbers[n]; SwapNumber( Numbers[n], Numbers[LotCount] ); Dec( LotCount ); end;
132 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 02:53:54 ] Delphi2009高いな 商用不可でいいから 低機能だけどコンポは使えて 9800でだしてくれんかな。 シェア広げることも大事だと思うんだが
133 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 02:58:58 ] Del6personalでDelユーザーを増やせたのにねー Del8以降の迷走で損してるわ。
134 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 09:45:48 ] Delphiはもうガラパゴス諸島化してるだろ。
135 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:24:23 ] .NETバブルにのって崩壊
136 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:42:27 ] >>134 つまり手厚く保護されるということだな
137 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:45:02 ] TurboDelphiExplorerがあるじゃない
138 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:43:20 ] >>137 Turboは、.net1.1に依存してるのと、 コンポが使えないのがネック。 商用不可でいいから6Personalみたいな形で だしてほすい
139 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:57:36 ] www.itwriting.com/blog/a-simple-delphi-wrapper-for-sqlite-3 上記サイトのDelphiラッパーを使おうと思い、まず同梱のTestSqlite.dprを実行させようとしたところ エラーが出てコンパイルできませんでした。どこを修正するといいのでしょうか? [エラー] SQLiteTable3.pas(470): 'TSQLite3Destructor' と 'Pointer' には互換性がありません [エラー] SQLiteTable3.pas(627): 'TSQLite3Destructor' と 'Pointer' には互換性がありません [エラー] SQLiteTable3.pas(787): 'TCollateXCompare' と 'Pointer' には互換性がありません [致命的エラー] uTestSqlite.pas(7): 'SQLiteTable3.pas' ユニットはコンパイルできませんでした
140 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 15:39:40 ] >>139 問題無くコンパイル出来た@Del6
141 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 15:47:12 ] >132 シェアを広げることが(企業としての)利益を増やす、ということに繋がるのかどうか、が問題みたいですね。 これをCodeGearの人たちに納得させられればいいのですが。 Borlandから独立することによってBorland(ALM/Together)の連中がやっていたIDEの安売り、投げ売りから 解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という 現状からすると、しばらくの間は難しいんじゃなかろか、というのが個人的な意見です。