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
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の安売り、投げ売りから 解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という 現状からすると、しばらくの間は難しいんじゃなかろか、というのが個人的な意見です。
142 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 16:00:15 ] 某もたいして安くなかったのにね マイナー言語のくせに偉そうだな
143 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:16:34 ] >解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という >現状からすると、 ソースぷりーず
144 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:19:11 ] >自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、 糞ヘルプ、バグだらけの正当な評価だろうけどな。
145 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:20:09 ] 起きたらオッチャスレ落ちてたんだけど誰か立てないのか
146 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:53:31 ] >143 forum(private含む)でのCodeGear関係者の発言からはそう読めるけどね。ディスカウントとか無料とか なんでそんなことしなきゃいけないの?利益に貢献するの?ってな感じ。 ソースは脳内なので当たっていないと思うなら無視してくれて構わないよ。 >142 Personal/Turbo Explorerはただでこれ以上安くできないけど?バージョンアップとかも新規に比べりゃ 安いもんだったしな。でも今はマイナーだからこそ稼がないと消滅しちゃうわけで。MSみたいに ボッタクリ部門があるわけじゃないからな。 >145 あら、ほんとだ。
147 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:59:20 ] pc11.2ch.net/test/read.cgi/db/1220581676/100 100 名前:NAME IS NULL[sage] 投稿日:2008/11/16(日) 12:56:23 ID:??? 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' ユニットはコンパイルできませんでした
148 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/16(日) 18:09:10 ] >>138 データベース(に接続して読み書きする機能)で差を付けられなくなってしまった現在では 有料版とどこかで差別化しなければならなかったわけで落としどころとしては悪くないと思います。 またコンポは設計時に貼り付けられないだけで実行時にコードで生成することはできますので 私はここ1〜2年はこれで頑張っています。 フレームを積極的に使い始めたためか標準でないビジュアルコンポーネントをポトベタしたくなる場面が かなり減ったのでそんなには困っていませんがさすがにそろそろポトベタできる有料版が欲しいです…
149 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 18:11:08 ] 俺の不満はDelphiのシェア低いから使えるライブラリの種類少ないことだな。 Delphiのクラスライブラリが.NET並とはいかないまでも、もっとリッチならまぁ気にならないが。 正規表現にしてもDelphiのVCLに標準で用意されていないし。まぁ、PCREや鬼車使えるけど、 アプリに静的リンクしようとかなるとたちまち、メンドくさいし。 前はDelphiで構文解析やろうとして、Delphiのソース吐くやつが余りないから、 C#のコードを吐くパーサジェネレータをDelphiのコードを吐くように改造したり。 めんどくせぇ。
150 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 18:19:07 ] 隔離スレに帰れ
151 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:07:36 ] まじでめんどくさいぉ。
152 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:15:48 ] オッチャなくなったので、こちらで活動開始。 オッチャすれ アンチ対策テンプレ v1.0(案) (p)codegearwatcher.web.fc2.com/faq/anti.html > オッチャすれ アンチ対策テンプレ v1.0(案) > 以下はオッチャすれに出没する、アンチの持ちネタです。 > これらのネタは、4年以上にわたる不毛な議論と逆予言により終息しています。 > しかしアンチは自作自演を交えつつ、無限ループを続けています。 > > このスレでアンチを見かけた場合は、このテンプレを提示しましょう。
153 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:46:51 ] マンセがうるさいので、これからここに質問に来た初心者をけなしてDelphiユーザーの 妨害活動をしますのでよろしく。
154 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 22:01:33 ] >>152 はまんせじゃなくて最凶アンチ。きもい。
155 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 22:36:45 ] 【Embarcadero】CodeGearオッチャ その13 pc11.2ch.net/test/read.cgi/tech/1226842439/
156 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:00:46 ] 既存のコンポを継承したコンポを使いたいんですけども どうやって呼び出したらいいんでしょうか? 例えば、TCustomEditを継承したTEditExを作ったんですけども フォームへの貼り付け方法がわかりません。 環境はTurboDelphi Explorerです。
157 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:11:13 ] TDEじゃ無理です
158 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:12:03 ] あ、FormのOnCreateで EditEx1 := TEditEx.Create(Self); EditEx1.Parent := Self; とすれば貼り付けじゃなくてもおk
159 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:57:34 ] >>158 ぬぉぉぉ できました。 ありがとうございます!
160 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:24:56 ] 「→」や「→」などを「→」のように文字に変換する方法はありますか?
161 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:29:15 ] 全部同じにしか見えない
162 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:29:28 ] ミスったorz 「&#8594;」や「&#8594;」などを「→」のように文字に変換する方法はありますか?
163 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:32:26 ] 再び・・ 「&#8594;」や「&#rarr;」です
164 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:35:29 ] 「&#8594;」や「&#rarr;」を「 → 」に置き換えればいいんじゃないの?
165 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:39:22 ] 全ての全角文字と記号がこの形式になっているもので・・
166 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 02:06:06 ] キーボードが壊れてしまって「あ」が「あ」になってしまうんです。 思い出した。
167 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:19:21 ] classとinterfaceを継承したclass(例えば TTest = class(TObject, IInterface))があるとき、 自身を、IInterfaceを引数に取る関数に渡す場合はどうすればいいんでしょうか?
168 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:36:48 ] >>167 Self as IInterfaceとかじゃね?
169 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:39:16 ] >>168 「この型には指定した演算子は使えません」と出ます
170 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:50:52 ] >>169 そのままSelfか、IInterface(Self)でどう?
171 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 04:01:29 ] >>170 それも無理でした
172 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 04:50:18 ] interfaceを使うときは一般的にはTObjectじゃなくTInterfacedObjectから継承する。 そうでなければQueryInterfaceや参照管理を自前できちんと実装しないといけない。 分かってやってるならいいけど。
173 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 04:57:07 ] あちゃ、本当は class(TObject, IDispatch)ってやってたんですけど、 キャストする時はIInterfaceも追加しないといけないんですね >>172 tobysoft.net/wiki/index.php?Delphi%2Finterface%A4%F2%BB%C8%A4%AA%A4%A6%2F%C9%AC%BF%DC%A4%CE%A5%B5%A5%DD%A1%BC%A5%C8%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA のようにやってました 参考にしておきます
174 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 12:24:35 ] OSを替えたんでDELPHI6を再インストールしたら 前の使用許諾コードが入らないんです。それで新たに発行してもらおうとしたら 以前に使ってたメアドで登録してたんで、今の使ってるメアドで登録しなおそうと思っても シリアル発行終了してるんでどうしたら良いのか困ってるんです。 一度は登録済みだから未許諾ままでも良いですかね。 フリーソフトとかで配布したいんですけど
175 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 13:08:01 ] ポップアップメニューがポップしてるかという判断ってどうやればいいですか。 ポップしている間にTimerイベントが発生してしまい ちょっと望ましくない挙動になってしまうのでif文を追加したいのです。
176 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 13:09:04 ] HKEY_CURRENT_USER\Software\Borland\Delphi\6.0のLMKEYを前のとあわせたらどうかな でもバックアップ取ってないよね まあ登録しようがしまいが構わんさ それでソフト配ってる奴なんか山のようにいる
177 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 13:09:56 ] LMKEYじゃなくてLMかも分からんね
178 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 14:52:48 ] >>175 WM_ENTERMENULOOPでフラグ立ててWM_EXITMENULOOPでフラグ降ろす
179 名前:174 mailto:sage [2008/11/17(月) 14:56:10 ] >>176 >>177 バックアップのと照らし合わせたら同じでした、と言う事は インストール番号とキーは今のOSでは使えない(インストールだけは出来る)ので メールでインストール番号とキーを書いて送って帰ってきた 使用許諾コードも使えないと言う事ですよね、困ったなぁ >それでソフト配ってる奴なんか山のようにいる EXEの中に未許諾の情報とか入ってないんですか
180 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:02:29 ] >>179 むむ・・・すまん じゃあもういっその事レジストリ全部上書きでもいいと思うよw > EXEの中に未許諾の情報とか入ってないんですか Kylixにはあると思う(System.pasにそんなことがちらり)けど、Delphiにはないんじゃないかなあ
181 名前:174 mailto:sage [2008/11/17(月) 15:56:17 ] >>180 上書きは項目が沢山あるんで諦めましたw 情報はDELPHIの方には入って無いんですか、じゃあそのままにしときます。 一応登録する意思はあるんで、出来ないんじゃどうしようも無いですし。 自分せいじゃあ無いんでしょうがないです。 色々ありがとうございます、ちょっと安心しました。
182 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 17:21:40 ] OSとか換えなくてもDel6入れ直しただけで前の使用許諾コード使えなくなったな 俺はそのまま赤いまま
183 名前:デフォルトの名無しさん [2008/11/17(月) 19:26:44 ] Delphiのimplements指令がいまいちわかりません。 下記サイトでサンプルコードがあったのですが、 An Introduction to COM Programming with Delphi (3 / 6) delphi.about.com/library/weekly/aa120704a.htm 結局、implementsを書いたクラスは一度interfaceにキャストしないと メソッドよめないんでしょうか? var Test: TTest; Foo: IFoo; begin Test := TTest.Create; Foo := Test; Foo.Bar; // FooにキャストしないとBarに呼べない
184 名前:デフォルトの名無しさん [2008/11/17(月) 19:27:26 ] > メソッドよめないんでしょうか? メソッド呼べないんでしょうか?
185 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 20:01:50 ] >>174 登録コードの数字と使用許諾コードがあればレジストリでLMの最後にある数字を 元の登録コードの数字に書き換えれば登録できる
186 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/17(月) 22:04:12 ] >>162 こんな時こそ正規表現ライブラリを使うべし。 正規表現ライブラリはいろいろありますけど今回はskRegExpで。 日本語のヘルプもあるので比較的使いやすいと思います。 そのものズバリのコードも書いてしまったのですが勉強にならないと思うので 今回は変換したい部分を特定するコードのサンプルだけ。 const cSample = 'I want to convert "→" and "rarr;" into right arrow!'; var exp: TSkRegExp; Converted: string; begin Writeln('Sample:"', cSample, '"'); exp := TSkRegExp.Create; try exp.Expression := '[0-9]+;|[A-Za-z]+;'; // 見つけたいパターンは「,0から9のどれかが1文字以上,;」または「,A〜Zかa〜zが1文字以上,;」 if exp.Exec(cSample) then // 先頭からパターンに一致するところを探せ.もし見つかったなら… repeat Writeln('見つけた!: 「', exp.Match[0], '」 ', exp.MatchPos[0], '文字目から', exp.MatchLen[0], '文字分'); until not exp.ExecNext; // 次を探せ.見つからなかったらループを抜ける. finally exp.Free; end; end. >>168-169 as 演算子によるインターフェースへのキャストはGUIDを付けないと使えないみたいです。 でも今回はそれが原因ではない気もします。
187 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 01:11:12 ] >>183 TestはあくまでDelphiのオブジェクトなので実装されていない メソッドが呼べないのは当たり前じゃないでしょうか。
188 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 01:28:33 ] >>181 ・SerialNumber:インストール番号と ・AuthorizationKey:インストールキーは、そのまま使える ってか使えるからインスコ出来る訳で インスコし直し(とかD6RegClean.exe実行)すると ・RegistrationKey:登録コード が変わる その登録コードで有効な許諾コードを取得 https://reg.codegear.com/srs6/sanctone_serial_number.jsp メアドはDeveloper Networkのアカウントにログインして変えれば良い Borlandの時の返信Mailは登録コードも書いてあったけど Embarcaderoのには書いてない。 念のため事前に数字メモっとかないと。。。
189 名前:デフォルトの名無しさん [2008/11/18(火) 05:07:48 ] OOPについての基本的な質問なのですが・・・ オブジェクト"objA"からオブジェクト"objB"を生成するとします。 procedure TMain.foo(); begin objA := TObjA.create(); objA.foo();// objBを生成 end; procedure TObjA.foo(); begin objB := TObjB.create(); end; この場合、objAからobjBにメッセージを送ることはできますが、 その逆(objBからobjAにメッセージを送る)はできないと思います。 (objBは、どのオブジェクトから生成されたか知らないため) objBが、生成元のオブジェクトobjAにメッセージを送れるようにするには、 どうすればいいでしょうか?
190 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 05:09:52 ] コンストラクタで生成元を渡すような仕様にしたらいいんでは?
191 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 05:16:04 ] メッセージが何のことやら
192 名前:189 mailto:sage [2008/11/18(火) 05:16:24 ] >>190 ありがとうございます。 procedure TObjA.foo(); begin objB := TObjB.create(self); end; などとして、引き回すということですよね? この方法が一番スマートですかね…?
193 名前:174 mailto:sage [2008/11/18(火) 05:55:54 ] >>182 >>185 >>188 返事遅れてすいません、>>185 さんの方法で上手く出来ましたw OSの違いじゃなくて登録コードが合ってなかったんですね。 入力欄に入れようとしても変えられなかったんで関係ないと思ってました。 いや本当に助かりました、これでスッキリとDELPHI6を使い続ける事ができます。 本当にありがとう御座いました。
194 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 11:36:24 ] これはいいライブラリになるかも。試してないけど。 309 名前:View ◆AcQTmXmylo [sage] 投稿日:2008/11/18(火) 05:25:01 ID:bqCSxa7a 今回導入した鬼車もオープンソース(BSDライセンス)なので、それに対する貢献はなんだろうと考え、 delphiから鬼車を使うためのラッパークラスTOnigRegExpのソースを公開しました。 ttp://www.geocities.jp/jview2000/oniguruma.html OnigRegExpは、Km氏が作成したdllラッパーのoniguruma.pas, onig.pasの改造品を さらにラップしてクラス化したものです。 ttp://homepage2.nifty.com/Km/onig.htm
195 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 12:39:51 ] 人によってクセがあるので自分で書いたほうが 使い易かったりもするけどね
196 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 12:55:40 ] >>189 なんでそんな面倒なことするの? メンバ変数で記録すればいいじゃないか procedure TMain.foo(); begin objA := TObjA.create(); objA.foo();// objBを生成 end; ↑これobjB作れてないじゃん objAとかobjBは結局ポインタなんだけどわかってる?