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
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の安売り、投げ売りから 解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という 現状からすると、しばらくの間は難しいんじゃなかろか、というのが個人的な意見です。
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は結局ポインタなんだけどわかってる?
197 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 15:50:45 ] procedure TForm1.Button2Click(Sender: TObject); var lp: PChar; str: String; ch: Char; begin ch := 'A'; str := 'A'; lp := PChar(str); if lp = ch then begin Caption := 'equal'; end; end; delphi2009だと、lp = chでstring->ShortStringな警告が出るんですが、 そういうものでしょうか?思いっきり、'A'を文字数だと思って比較しています。
198 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 16:33:58 ] >>196 全部読めよ
199 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 16:36:05 ] >>197 lp^じゃねぇの?
200 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 17:35:53 ] >>199 漏れもそう思ったんだが、両方文字列に変換してから比較るらしい。 D5だとequal言うんよね。
201 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 17:43:46 ] あの、流れ無視でごめん。 所でDelphi2009は.Net対応? みんなは.Netに移行するんですか?Win32維持ですか? Delphiはその流れに付いて行っているんですか?
202 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 18:48:36 ] いまのDel使いは.NETに乗り遅れた人達なんだよ・・
203 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 19:07:13 ] oniguruma.pasに接頭辞Tで始まるデータタイプを定義してほしい。 もうね、 var RegExp: OnigRegExp; Windows.pasも例えばTLogFont = tagLogFont;と別名定義してんだし、 合わせろよ。 と、>>195 に同意。
204 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 20:16:57 ] >>188 ありがとう 居座ってた赤いの消すことが出来た
205 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:19:06 ] VBSなRegExp風にラップしてくれ〜 あれが一番使いやすい。 ついでにコールバックによる置換なんかに対応してくれれば言うことない。
206 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:26:00 ] 「VBSなRegExp」がどんなのか分かったら暇なときにやらないこともない
207 名前:197 mailto:sage [2008/11/18(火) 21:56:01 ] >>197 del5でもShortStringに変換して比較してた>AStrCmp WideCharの比較でなんでShortStringが出てくるのかわからないけど、仕様ならしょうがないか。
208 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:58:34 ] UnicodeStringへの添え字でのアクセスはShortStringになるのが関係ありそうでなさそうでありそう
209 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:58:57 ] >>187 まあそれはそうなのですが、単純にブリッジ処理書くのが省ければなあ、 という用途で使おうと思ったら、 面倒くさい仕様なので残念!といったところなのです。
210 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 22:01:53 ] Ordをかましたらどうだろ
211 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 23:44:44 ] Orz
212 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 01:18:28 ] delphiで、一部の文字の色を変えるエディタって簡単に作れるの?
213 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 01:21:26 ] >>212 そんなこと聞いてるあなたには簡単ではないでしょうね
214 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 01:33:40 ] richeditで出来るだろ
215 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 10:12:46 ] Delphi2009のバージョンアップ版ってインストール時に 前バージョン(Delphi4持ってる、2は行方不明)の確認ありますか? VBとの比較検討用だったんでユーザー登録もしてないんだけど...
216 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 11:05:41 ] おそらく前バージョンのユーザー登録してないならアクティベーション通らないんじゃないかな? CDNのアカウントで認証してるみたいだし。サポートに問い合わせた方がいいかと。
217 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 21:33:50 ] >>192 TObjBでイベントを定義して、ObjBを生成したときに イベントハンドラとしてObjAのメソッドをを代入するのがいい。 ObjAの参照を持たせるよりも結合度を小さくできる。
218 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 23:19:20 ] 特定のオブジェクトの参照を保持するのと、そのメソッドを保持するのと 結合度に差があるの? メッセージを送りたいんだから TObject の Dispatch() を使えるし、だからすべてのクラスで参照を保持できたほうが汎用性の意味では よりいいんでは?
219 名前:217 mailto:sage [2008/11/21(金) 01:04:58 ] んー、どうだろね。 メッセージというのがwindowsメッセージやdelphiのディスパッチのメカニズムを 利用する話なら>>218 で正しいと思うけど、>>189 にはOOPの話と断りが入ってる。 OOPでのメッセージという用語はオブジェクト間のやりとりの総称なので、 メソッドの呼び出しなども当然に含まれる。俺はそういう理解で解答してる。
220 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 08:52:35 ] >>186 なんかりんごの皮をチェンソーで剥いてる様な気がするのは俺だけ?
221 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 10:57:03 ] そりゃ金の取れる芸のレベルだよ
222 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 10:58:45 ] 正規表現コンポに金使えばいいのか
223 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 11:12:54 ] FreeMemにサイズを指定するメリットってあるんでしょうか? Sizeが無指定だとちゃんと全部開放されないとかあるんでしょうか
224 名前:デフォルトの名無しさん [2008/11/22(土) 16:37:35 ] Delphi6 Personal使ってます。 manifest適用時にTComboBoxのSelText、SelStart、SelLengthの値が 正しく取得できなくて困ってます。 Textに「あいうえお」と入力して「うえ」を選択したとき SelText: SelStart: 1 SelLength: 1 という結果が返ってきます。 半角だと問題ないのですが全角だとおかしくなります。 正しい値を取得するにはどうすればいいでしょうか?
225 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 17:31:56 ] Delphi 2007でも同様の結果になるようですね。
226 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 18:26:08 ] manifest適用しなければおk
227 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 12:04:15 ] ユニコード対応のD2009じゃね? Tntは修正が不完全だけど、一応使えるレベルだと思う。
228 名前:225 mailto:sage [2008/11/23(日) 13:08:12 ] TNTComboBoxならSelStart/SelLengthは正常に取得できる。SelTextはTextをAnsiStringに 変換後に自前で変換すればいい。 procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption := Format('SelStart=%d SelLength=%d SelText=%s', [ComboBox1.SelStart,ComboBox1.SelLength, Copy(AnsiString(ComboBox1.Text),ComboBox1.SelStart + 1,ComboBox1.SelLength)]); end;
229 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 13:16:48 ] TNTって無料版の開発終わったよね
230 名前:225 mailto:sage [2008/11/23(日) 13:34:43 ] まーでも古い版はダウンロード可能だし。mh-nexusさんとことか。でもDelphi 6 Personalは別版が必要かも?
231 名前:225 mailto:sage [2008/11/23(日) 14:01:52 ] TNTは現在はTMSで売ってる。 ttp://www.tmssoftware.com/site/tmsuni.asp 個人なら30Euro(3600円くらい)。
232 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 15:08:16 ] 有料版でも直ってないそうですね まあ、英語圏の人は他言語IMEなんて使ってないだろうし FastCodeの中の人なんて、LowerCaseのTable作りに CharUpperBuff使っただけで、「Ansi」StringReplaceとか言っちゃってるしなぁ
233 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 15:10:37 ] いけね、UpcaseのTableだ
234 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 21:47:14 ] >>230 そのままだとコンポが足りないのでエラーが出るけど ちょっと書き換えればD6Perでも動くよ
235 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 22:45:46 ] DBとBandアクチョン削ればOKだったかな で、必要な人はsoft-gemsのThemeManager入れる、と
236 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 18:14:27 ] 特待販売の葉書が来た。 久々にバージョンアップしてもいいかなぁと思ってるところ。 今C#を主に使用しているんだけど、Delphiならではのメリットっていうと、 VCLとネイティブコンパイルぐらい?
237 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 20:39:27 ] バージョンアップしなくても「Delphiならではのメリット」は変わらんだろ・・
238 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:22:05 ] 昔、Delphi 7 では、デバッグでカーソルを変数に合わせるだけで値をインスペクトできた。 先日、Delphi 2006 を借りて使ってみたら、それができないじゃん。 新しい Delphi ではどうなっているのか知ってる人、どーか教えてくだしゃい。
239 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:40:42 ] >>236 おれんとこにも来たな、特待販売の葉書。 見たら会社名に「エンバカデロ・テクノロジーズ」って書いてある。 エン バカ デロ は、日本じゃアウトだろフツー。 C++Builder でまともなプログラム組めたことなかったし、 Delphi 2005, Delphi 2006 も安定しなかったんでまともに使ってなかったし、 エン「バカ」デロ Delphi と C++Builder はマジで悩む。
240 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:42:04 ] えっ?できますよ?
241 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:50:35 ] >>239 うわぁ・・・
242 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:54:41 ] >>239 安定しなかったってどういうこと? ちなみに、Delphi7で業務アプリ作ったけど、その時は割と安定してたけどな。 Delphiで気になるのは、ネイティブコンパイルと、VCLかな。 ビジュアルコンポーネントの使い勝手は優秀だと思った。 StringListとかObjectListなどの非ビジュアルコンポも優秀だけど、 いまじゃC#でもList<String>とかで代用できてしまうし、 コンポーネントもVCLライクに仕上がって遜色ない出来になってるしなぁという感じで悩む。 ま、.NETFrameworkがないと動作しないのは相変わらずなんだけど。
243 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:33:59 ] Delphi7は安定していたが、Delphi 2005は統合環境がなぜかフリーズしまくり。 Delphi 2006 はコードエディタな若干不安定で、箱形コピペなどすると、ずれ てペーストされる。また、何もしなくとも、しばらくするとCPUを食うよ うな処理が統合環境内部で起こる。そして、Delphi7より何か重たい。 また、>>238 のように、デバッグでカーソルを変数に合わせるだけで値を インスペクトできない。(あれは便利だった!!!!) これらの現象は、コードギアが提供したパッチを当ててもダメだったんだな。 そんで、今もDelphi7を使っているんだよな、おれ。 ただし、どこかにあったGoogleMap を組み込んだデモだけは、Delphi7では コンパイルできなかったのでDelphi 2006 で試したらうまくいった。 ハーア、何かうまくゆかないもんだな。
244 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:38:21 ] >>240 >えっ?できますよ? えっ?できるの?
245 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:46:46 ] >244 >238のことですよね?できますよ。もちろんローカル変数ウィンドウでも評価ウィンドウでも見られますけど、 変数にカーソルをあてるだけでインスペクションできるし、最近のものでは構造体のメンバやポインタの 示す先を追っていくこともできます。できないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?
246 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:47:58 ] × できないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな? ○ Delphi5以降でできないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?
247 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 00:00:42 ] >>238 >>244 「メニュー」ツール → オプション 「オプションダイアログ」 エディタ設定 → 支援機能 → ツールチップ式評価 をチェックでOK デバッグの機能なんだけど、「デバッガオプション」ではなく「エディタ設定」にあるのがミソ
248 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 12:33:02 ] IDEが不安定ってことなのか。 いつからかIDEが.NET上でしか動作しないようになったんかな。 若干、重いイメージは確かにあったけど。 ネイティブで動作させることを目的としなければ、VS2005移行で十分に Delphi並のRAD環境になってるから、選択に難しいところではあるよね。
249 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 12:58:37 ] IDEは.Netだけど、コンパイルされるコードはネイティブ。
250 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 14:05:53 ] D2009はIDEはネイティブでそ? ヘルプのために.NETがいるだけで
251 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 14:30:54 ] Delphiって算術シフトの演算子ってないの???
252 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 14:35:28 ] shlとshr
253 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/26(水) 17:34:36 ] >>251 ビットシフトこのとでしたら shl、shr で。 綴りで分かるかもしれませんがそれぞれ左シフト(SHift Left)と右シフト(SHift Right)。
254 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/26(水) 17:35:51 ] って一番下の252が見えてなかった…すいません
255 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 18:56:32 ] ファイルの先頭からあるバイト目からをMemoに読み込むにはどうしたらよいのでしょうか? というのも、ファイルの先頭にいらない物が付いていてそのまま
256 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 18:59:58 ] 途中送信してしまった・・・orz ファイルの先頭からあるバイト目からをMemoに読み込むにはどうしたらよいのでしょうか? というのも、ファイルの先頭にいらない物が付いていてそのまま Memo1.Lines.LoadFromFile(Filename); とやっても文字化け?して読めないんです。 でもその無駄なのを取り去ってやるとMemoに読み込めます。
257 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:14:15 ] >>256 それはウニコードだね
258 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 20:13:55 ] >>256 TFileStreamとかAssignFile・Seek・Readで読み出せばいいはず TFileStreamの方が簡単・VCL的なのでおすすめ procedure TForm1.ButtonClick(Sender: TObject); var Stream: TFileStream; begin Stream := TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite); try Stream.Seek(10, soFromBeginning);//10バイト飛ばして読む Memo1.Lines.LoadFromStream(Stream); finally Stream.Free; end; end; >>257 うんこーどと断定できるとかすげえな
259 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 01:16:21 ] Delphi 2006でコンポーネントのインストールをしたい。 だが、「コンポーネントのインストール」がメニューから消えており、 HELPで「コンポーネントのインストール」を検索すると 『コンポーネントコンポーネントのインストール』 このダイアログボックスでは,コンポーネントを新規パッケージ または既存のパッケージにインストールします。 とある。 いったい、どうやってダイアログボックスまでたどり着くのだろう? どなたか教えて下され。
260 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 01:47:15 ] >>259 2006のヘルプを見ろよ >すべてのコンポーネントはパッケージとして IDE にインストールされます。したがって, >ユーザー自身がコンポーネントを作成するときには,まずそのコンポーネントを入れる >パッケージを 作成してコンパイル する必要があります。コンポーネントのソースコードは, >コンポーネント作成の概要 で説明されているモデルにしたがって記述する必要があります。
261 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 10:21:20 ] >>260 なるほど、Delphi2006は 「ファイル」メニュー から辿ってパッケージを作るようになってたんだ。 Delphi7では 「コンポーネント」メニュー からいきなり「コンポーネントのインストール」ができ、そこで パッケージを新規に作成してたんで(これには)気付かなかった。Delphi2006のように パッケージ・プロジェクトとして開発する方が、Delphi7のときよりも少しだけ楽だね。 助かった。ありがとうございました。
262 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 12:57:36 ] Turbo DelphiでFastMM4.90を利用しています。 デバッグ時にステップ実行していると、メモリの確保や解放時などFastMMのソースに飛ばされます。 これを無視したい(デバッガがFastMMのコードまで追わないようにしたい)のですが、どうすればいいのでしょうか。
263 名前:262 mailto:sage [2008/11/27(木) 13:03:36 ] とりあえず、コンパイラ指令の{$D-}をFastMMのソースに加えることで抑制しました。
264 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 13:33:23 ] ソースに飛べないようにすればいいじゃない 削除するなり移動するなり
265 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 12:38:27 ] >>264 そーすると、例外が起きるたびにソースを要求されるそーすよ。
266 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:19:11 ] そーすね
267 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:04:42 ] ___ ,,r''"´ `"''-,, / ノ ヽ、 \ / ( ● ) ( ● ) ヽ ヽ i゛ :::⌒(__人__)⌒::: ヽ ゛i l |r┬-| l ノ そーなんすかwww ! | | | レ' l l | | | l , l | l `ー'´ | l l ! l ,! | l l ゛i / l i゛ ゛i ヽ / / / ヽ,__,,,ゝ く ノ / ヽ ゛" / __ _ ) 、(二"'''ー'"ー'__゛゛ヽ r'  ̄  ̄ヽ,)‐-,,_ ´┴'ノ ヽ__,,-──-、__,ノ
268 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:34:14 ] FastMMがいつの間にやら新しくなってたので落とそうと思ったらアカウントが必要になってたのね そう思って登録しようとしても、必要事項書いてRegistration押してもその後何にも起こらん どうすりゃいいの?メール来るのかと思ったら来ないし
269 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:38:09 ] とりあえずお前が英語苦手だってことは理解した
270 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:41:19 ] >>268 ダウンロードにパスなんて必要ないんだけど
271 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:41:46 ] パスじゃなかったアカウントだ
272 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:52:54 ] あれー?Download押すとトップページに飛ばされるから そう思ってた。俺だけ?
273 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:58:33 ] sourceforge.net/projects/fastmm/ →Download→FastMM 4.92→FastMM492.zipだろ? どこで踏み外せばいいんだ
274 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 12:18:31 ] すぐ上で言ってるとおり、Downloadだよ 俺だけのようだ…会社でも家でも同じだったんだよなあ なんでだろ
275 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 12:22:10 ] ブラウザのせいだったようだ すまんです
276 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 12:26:34 ] どんな糞ブラウザ使ってんだよw
277 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:40:11 ] Turbo Delphiを使用しています。 ローカルバックアップの保持ファイル数の上限を増やすことはできるでしょうか?。 私の環境では、どうも100個くらいしか保持してくれないようです。 これを1000個くらいまで保持してくれれば、個人的にはだいぶ楽になるのです。 よろしくお願いします。
278 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:43:03 ] あまりそれでがんばらずに素直にバージョン管理システム使ったら。 TortoiseSVN + pdumpfsの組み合わせて使ってるけどソース紛失で泣く事はなくなったな。
279 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 14:02:22 ] >>278 どうも。 IDE標準の、変更のたびにバックアップが作成されるというのは、 利点でもあり弱点でもありますね。 トイレに行った後、レジストリの方も調べてみましたが、 BDS-4.0-Editor-OptionにあるFile Backup Levelというキーで、 上限を増やせるようです?(実際に増えるかは未確認)。 当座はこれでしの(げるならしの)ぎます。教えていただいたソフトウェアについても、 調べてみたいと思います。ありがとうございました。
280 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:00:56 ] かなりくだらない質問なんですが 皆さんbegin...endのbeginをどこにで書いてますか? 例えば if hoge then begin hage; end; とか if hoge then begin hage; end;
281 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:07:05 ] >280 俺は上派だな。elseがある場合は下みたいな感じ。 if hoge then begin end else if mage then begin end else begin end; VCL内でも統一した書式はないと思う。
282 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:55:55 ] 懐かしい議論だ。俺は下派。
283 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:58:51 ] 使ってるモニタ次第 UXGAでちまちま詰める必要はないし ノートで縦にだらだら書いてたら確実に生産性が低下する
284 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 00:02:59 ] モニタでいちいち書式かえたらよけい生産性が下がるわな・・
285 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 00:15:54 ] 以下のような書き方してる。 if hoge then begin end else if uge then begin end else then end; って書いてる。 ifのブロックとelseのブロックがend挟んで分離されるので、一目でどこまでがifのブロックか見分けることができると思う。 ただし、hogeが長くなったり複数行になる場合は、例外として、 if (hogeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) and (ugeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) then begin end; としてる。 beginが右の方に行き過ぎて、書いたかどうか分からなくなるから。 もし本当に書き忘れたり、うっかり削除すると、endの対応が一致しないってエラーに悩まされる。あと、思い込みのミスもあるし。 前回のコンパイルから時間が経ってると、どこ直したか忘れて、一カ所ずつ探すはめになるので。 こまめにコンパイルすればいいんだけど、気持ちよく書いている時って、しばしば忘れるんだよね。 また、質問と外れるけど、 if hoge then syoti1; syori2; って書いちゃって、なんでsyori2が常に走るんだって、悩むことになるから、if hoge then Exitのような単純な場合を除いて、ぶら下がりインデントは使用しない様にしてる。 基本的には、自分は間違っていない!という思い込みのミスを避ける方向に書くようにしてる。
286 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 01:56:00 ] パスカルの生みの親ビルトが頭弱かったから、汚い begin end がプログラムを醜くしてしまった。 単文、複文なんて、関係ないのにね。 まあ、おいらもバカだが、if 文は次のようなものが分かり易いと思っている。 <else 句がない場合> <else 句がひとつある場合> <else句が複数ある場合 ※ef はelseifの意> if 条件式 then if 条件式 then if 条件式 then 文 文 文 endif else ef 条件式 then 文 文 endif ef 条件式 then 文 else 文 endif
287 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 01:59:08 ] でも、endif も ef も予約語にないから、そこでおいらは次のようにしているんだ <else 句がない場合> <else 句がひとつある場合> <else句が複数ある場合> if 条件式 then begin if 条件式 then begin if 条件式 then begin 文 文 文 end end else begin end else if 条件式 then begin 文 文 end end else if 条件式 then begin 文 end else begin 文 endif これで begin end に目を奪われにくくなるんで、ちょいバグだしにくくなったかな(って気がしてるだけかも)。
288 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 02:04:49 ] >>286 で書き忘れたけど、式の中の「文」は、単文でも複文でもいいと思ってくれ。
289 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 10:31:39 ] if 条件 then begin end else if 条件 then begin end else begin end; よくこういう議論を見かけるが、俺と同じやり方の奴って 見たこと無いんだよなー
290 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 10:32:54 ] お前は俺か
291 名前:280 mailto:sage [2008/12/01(月) 11:43:21 ] 皆さんありがとうございます。 よくbegin...endの数が合わなくてエラー出てたもんで皆さんはどんな感じで書いているのか気になったんです。 教えていただいたものを色々試してみたいと思います。 とても参考になりました。どうもありがとうございました。
292 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 11:44:03 ] それはお前の頭が悪いww
293 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:02:36 ] でもさ、前々から思ってたんだけど、 ALT+[とかで対応する括弧は追えるのに なんでbegin/endは追えないんだろ?
294 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:03:28 ] >>287 くだらねぇ、気持ち悪いルール使ってんじゃねぇよ。基本はdelphiならVCL、JavaならJavaのクラスライブラリ のソースに合わせろよ。おまえらなみたいな奴のソースは見苦しくてかなわんわ。
295 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:43:40 ] こういうのが沸くからアンケートネタはWikiの投票pluginかなんかを使ってやってくれ
296 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 14:32:29 ] 以下のように記述するのが正式だというのを海外のサイトで読んだことがある。 if 条件 then 文 else if 条件 then 文 else 文; if 条件 then begin 文 end else begin 文 end; 文が短い場合は if 条件 then 文 else 文; って書いちゃうけどね。
297 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 15:08:49 ] 書き方に正しいも糞もあるかよww
298 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/01(月) 16:29:02 ] >>286 QuickBASICやVisual Basicではまさにそんな感じの構文になっていて使いやすかったです。 >>293 C/C++の { } ほどの地獄ではないからかもしれません。
299 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 17:54:25 ] >>286 のおいらだが、おいらが C++ 使いだったころ、次の#define プリプロセッサで >>286 の構文が コンパイラー通るようにしていたんだ。 #define if if( #define then ){ #define else }else{ #define ef }else if( #define endif } てな感じだったけかな(?)。しばらくやってないんで忘れてしまったけどね。その他 for(;;) 構文なんかも 「 for 初期値 to 終了条件 step 増加式 do 文 endfor 」とか if と同じ要領でやっていた。 プログラムがスッキリしてたね。なんせ、おいら if や for の後の ( ) が大嫌いだったからね。 これいらないと思う。C言語作った男もおいらに負けず相当オタンコナスだね。 まあ、この構文(>>286 )でソースコードを渡すと、相手はビックリしてたっけ。おいらもかなりバカだね。
300 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:05:19 ] 融通が利かない人はどんな職業でもいい発想ができない。
301 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:30:57 ] case ofのかっこいい書き方を教えれ どうもelseだけしっくりこなかったりする
302 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:43:44 ] たしかにcase文はうざい
303 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:50:59 ] case n of 1: foo; 2: begin bar; end; else baz; end;
304 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 20:13:24 ] case n of 1: foo; 2: begin bar; end; else baz; end;
305 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/12/01(月) 21:52:39 ] ∧,,∧∩ おれ、こんなん。 ミ,,゚Д゚彡 ミ つ旦.ミ if then begin end else if then begin end else begin end; if が何個ならんでも、行頭を揃えたい気がするのです。 Caseはいつも悩む。 ifを、caseに変更したときに、begin...endをわざわざ インデント変更したくないから case A of B: begin end; C: begin end; end; //case かな。。行が増えすぎと、caseのendとbeginendが分けにくくていやなのだが。。
306 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:27:22 ] おいらも case 文は苦手だったな。どうやってもキレイに書けない。しかし、だいたい次のようにやってた。(case の範囲を字下げではっきりさせたいんだな、おいら) case A of B: 文 C: begin 文; 文 end D,E: 文 else 文 end case 文を 「case A of :値: 文 :値: 文 end 」とビルトが設計すればよかったかもね、次のようにスッキリする。(「文」は単文でも複文でも可だよ) case A of :B: 文 :C: 文; 文 :D,E: 文 else 文 end
307 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:34:44 ] 気持ち悪い
308 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:42:18 ] caseの中はcaseより引っ込める ラベルの中身も引っ込める、begin-endの中も引っ込める ラベルの後ろにbeginを書くと、対応するendもおなじインデントに書きたい 横に伸び〜
309 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:43:14 ] case〜endの間を字下げで解決。
310 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:44:53 ] typeのクラス宣言内のprivateなprocedureとか、自動生成で変なインデントを付けられた日にはもうー
311 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:47:30 ] record型のconstの配列の初期化の記述がめんどくさい コンパイラサボりすぎ
312 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:51:10 ] >>308 おいらもおんなじ気持ちだけど、これやるとインデント深くなるんだよなあ。 だからおいらはインデントをスペース3文字分にしてるんだが、それでも深くなる。 これがインデントがスペース8文字分で表示された日にゃー目がぶっ飛ぶ。
313 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 08:08:53 ] え!Del党ってインデントはスペース2文字でしょ。
314 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 08:42:41 ] オレは2文字だな。 if 〜 then begin 文 end else if 〜 then begin 文 end; case i of 1 : begin 文 end; end;
315 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 08:51:14 ] caseとelseとendをそろえてる。 caseに関しては自動インデントを使わずなるべく詰める様にしている。 17インチCRTからの流れで横も縦も圧縮する様な書き方になってしまった。 ifなんかでも改行してbeginの方が見やすいのに。
316 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 09:22:53 ] >>305 ifが常に行頭だと、別のif分と区別がつきにくいから嫌だな case分は無駄にインデントが増えるな case hoge of A: begin end; B: begin end; else end; これでやると、else内だけインデントがずれるのがむかつく
317 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 09:23:34 ] if分、じゃなくてif文だし、case分じゃなくてcase文 orz
318 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:01:35 ] >>313-314 インデント2文字でやってみたことあるんだけど気に入らなかったんだな、おいら。 なぜかっていうと、(一番多用される)if文のときインデント2文字だと i f a = b then begin c:= 2; ........ のようになって、この例で説明すると変数 a と c の頭が揃わないので美しくない。それに if の近くに変数 c がありすぎて if が窮屈に見える。これをインデント3文字にすると i f a = b then begin c:= 2; ........ となって、こっちの方がスッキリして見えるんだな、おいらの目には。(if文重視なんで) まあ、バカなおいらの好みだけどね。 そんで、クラス宣言の自動生成がインデント2文字固定なんで、苦労してる。
319 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:05:18 ] 秋田
320 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:07:07 ] >>318 の最初の例が崩れてたから訂正するね。 if a = b then begin c:= 2; ........ (2ちゃんは左側の半角スペース取っちゃうんだよね.....。)
321 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 13:14:15 ] インデントは2文字。 if文は>>305 に同じ。 大規模なcase文などではソースを折りたためるようにREGIONを使う。 case hoge of A: {$REGION '説明'} begin end; {$ENDREGION} B: {$REGION '説明'} begin end; {$ENDREGION} else end;
322 名前:321 mailto:sage [2008/12/02(火) 13:19:47 ] あ、if文は>>305 とは微妙に違った。 if then begin end else if then begin end else begin end; 個人的には、else(else if) 〜endまでの処理を消したり、 begin〜endまでの複数行の文を単数行の文に書き換える際に自然だからこれで落ち着いた。
323 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 18:24:36 ] どうせソースの書き方なんて十人十色なんだからいい加減飽きろよ
324 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 18:26:21 ] 新しい話題を提供しろよw
325 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 18:36:34 ] >324 「CodeGear RAD Studio 2009 日本語版」販売開始だって
326 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:47:10 ] delphiはなかなか良い言語だとは思うけど C++ライクに記述できるような仕組みがあれば、いいなぁ。 あと、delphiにC++を埋め込めるようにできれば、なおよし。 begin〜endはうざい。 あと、function/procedureと区別する意味がわからん。 C++歴5年、delphi歴3ヶ月より。
327 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:52:56 ] C++に、Pascalライクに記述できたらいいなあ。 なんて言われたら、ウザッとか思わない?
328 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:55:28 ] DLLとかC++ Builderとか使えば出来るけどね
329 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:55:43 ] >>327 そんな需要はないから。 delphiでC++ライクに使えれば、ポインタ使いまくれるし C++脳の人間にとっては、とても楽。
330 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:56:14 ] でもちょっと違うか
331 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:56:52 ] >>329 それは工夫が足りないんじゃね?
332 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:59:10 ] C++記述するときにはいつも 「もっとDelphiライクなら・・・」 って思っちゃう俺はアホなのかもしれん^^;
333 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:00:59 ] じゃあおまいらどんな記述がいいのよ
334 名前:デフォルトの名無しさん [2008/12/02(火) 22:21:56 ] 教えてください。 既存のプロジェクトなのですが、DataModuleのSession,Aliasのアイコンが半透明に なっています。 実行するとデータベースに接続するところで異常終了します。 つなげるべきデータベースはわかっているのですが、どのように設定したらよいので しょうか。
335 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:28:21 ] Pythonが綺麗って言われてるよね。 Delphiと似てるからすぐに使えるようになるよ。
336 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:28:27 ] begin end が { } ならDelphiが無敵
337 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:34:17 ] if True then { MessageBox(Handle, 'test', 'test', MB_OK); }; こうですか分かりません><
338 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:07:14 ] むしろBegin〜endの方が俺は見やすくて好きw 変態ですので
339 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:10:48 ] Begin〜endよりbegin〜endのがよっぽど見やすい
340 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:48:59 ] 細かいやつって嫌われるよな
341 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:58:26 ] C++のコードは見づらい
342 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:01:42 ] >>340 C++は嫌われて無いじゃないですか
343 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:38:28 ] CoolBarの行を1行固定にしたいんだけどどうすればいいの? アイコンバンド1、アイコンバンド2、検索窓の3つ設置。 実行してCoolBandを弄ってると必ず2行目が出来てしまう。
344 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:42:07 ] C++ の :: と -> がウザイ。
345 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 01:02:04 ] 俺も
346 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 11:57:27 ] フォーム上の末代までのコントロール数をカウントする方法ってあります?
347 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 12:12:58 ] Form1.ComponentCount 子供の子供まで数えたい時はComponents使って再帰とかすればいい function CountFunc(Compo: TComponent): Integer; var I, Count: Integer; procedure SaikiFunc(Compo: TComponent); var I: Integer; begin for I := 0 to Compo.ComponentCount - 1 do begin Inc(Count); SaikiFunc(Components[I]); end; end; begin Count := 0; SaikiFunc(Compo); Result := Count; end;
348 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 15:51:56 ] 教えてください。 Nscripterで集積エフェクトを使いたいのですが, lsp 0,"****.jpg",208,32 print 99,3000,"breakup.dll/ulP" これだと左,中央,右の指定ができず困っています。 どうしたらいいですか?
349 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/03(水) 18:01:45 ] >>347 それだと非ビジュアルコンポーネントまでカウントしてしまうので > if Components[i] is TControl then みたいに絞り込むか ControlCount/Controls を使うと良いと思います。 >>326 Delphiはプログラミング教育用に生まれたPascalの血を引いた言語ですから わかりやすさを捨てることはないでしょうね。 逆にPascalのbegin〜endがうざかった人間が作ったのがCですから 突き放したような結論で恐縮ですが 「Delphiのbegin〜endがうざいならCPB使え」 ということになってしまうのではないかと思います。 (…なあんてことを書いたときに限ってDelphi2010あたりで{}が実装されたりして)
350 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:11:09 ] そういえば昔、SQL Anywhere というデータベースを使ったことがあったが、 そのストアードプロシジャーは if文が if 条件 then 文1 else 文2 end という構文で、文1と文2は単文でも複文でも begin end が不要だったな。 ありゃあ見やすいし、書きやすかった。 begin end や { } なんて過去の遺物、消え去るよ。
351 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:19:41 ] graphics32ってMPL1.1ですけど、改造しないで普通に使用して公開する場合は ソースを公開する必要はないと聞きますけど ここの ttp://ja.wikipedia.org/wiki/Mozilla_Public_License 特徴のところで バイナリ形式で配布する場合には、ソースをバイナリと一緒に公開しないと いけないみたいな事かいてるんですけどどっちが本当ですか?
352 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:39:55 ] >>349 どれのことだ ja.wikipedia.org/wiki/CPB CPB * ビルマ共産党 * キャンベル・スープ・カンパニーのNYSEコード。 * 公共放送機構 (Corporation for Public Broadcasting) * セントラル・パシフィック・バンク
353 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:57:27 ] BCBだな
354 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 22:42:57 ] >>351 Delphi持ってるならGLSceneを使え pc11.2ch.net/test/read.cgi/tech/1163269079/ の 25 辺りから見るとよいよー
355 名前:351 mailto:sage [2008/12/04(木) 04:45:25 ] >>354 やっぱりソースは公開しなくても良いんですね おかげでスッキリしました、ありがとうございます
356 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/04(木) 16:30:30 ] すいません、思いっきり略称間違えました… orz
357 名前:デフォルトの名無しさん [2008/12/05(金) 02:03:30 ] onKeyDown や onKeyPress などを使って、 『キーの同時押し』を検知する方法ってありますか? たとえばAlt + Tab を検知するなど。
358 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 02:36:22 ] Downならif Shift = [ssAlt] thenで
359 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 18:41:49 ] GetAsyncKeyStateはだめ?
360 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 00:02:20 ] 同時押しの検出ならGetKeyStateかShiftパラメータでは?
361 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 09:00:10 ] Del7+Win2000 フォームを半透過指定してフォーム上のコンポーネントは非透過ってのは可能? Transparentみたいな色指定透過っぽい感じ
362 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 10:45:21 ] Pascal を C++ っぽくしろって、 日本語は英語と同じ文法にしろっていうような門やん
363 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:16:53 ] >>362 Begin...Endの事? そうは思わないな… 日本語だって英語の良いところはカタカナという形で吸収するんだから コメントと文法くくりはBegin、{両方サポートしてくれたら私もうれしいな。 でもそうなると過去のソースが動かなくなるわけで、そこまでして言語仕様を拡張することには反対 結果として{は無理だと思うけど。 コンパイラ指令で切り分けできたら面白いすね、デフォルトはOFFで。
364 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:45:26 ] TEditの枠線の色を赤色に変えるにはどうしたらいいでしょうか? よろしくお願いします。
365 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:51:45 ] OSの管轄なので無理 あるいはオナニードロドロ
366 名前:364 mailto:sage [2008/12/06(土) 15:58:30 ] 早速回答ありがとうございます。 ちょっと変えてくれと言われたんだけど厳しそうだし、 見た目の問題だけなのでそのまま放置しますw
367 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 16:00:53 ] >>364 一回り大きいPanelに乗せてPanelの色を変える
368 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 16:12:37 ] >>366 ならそいつにVSでも変えてろハゲとでも言ってればいい希ガス
369 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 19:18:45 ] Delphi2006でヘルプを使いDelphi終了すると、タスクにdexplore.exeが残り、 再びDelphi2006起動してヘルプを使いDelphi終了すると、タスクにdexplore.exeが2つ残り、 とドンドンdexplore.exeがタスクに増えて行きます。(OSはXPです) これって、メモリーけっこう食ってますが、Delphiのバグでしょうか?
370 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 21:16:21 ] dexplorerのバグでしょう、きっと。
371 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 09:41:05 ] VS だとそんなことないから Delphi のIDEのバグじゃないの?
372 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 11:49:41 ] 食わせてるデータがまずいからだとは思うんだけど、それで逝っちゃうようなのはやっぱりバグだと思うんだ。 DelphiのIDEはDExplorerをキックしてるだけだしね。ちなみにXPで発現することが多いみたい。
373 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 16:17:50 ] Borland Developer Studio 2006 (Professional)をデフォ状態でDelphi使うと ヘルプにC++の内容まで検索されてウザイ。 C++の内容が検索されなくなる設定ができるかどうか調べても未だに分からない。 どなたかHELP!
374 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 19:34:12 ] それが円馬鹿クオリテー
375 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 02:15:33 ] フィルタ条件ではあかんのか
376 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 09:20:16 ] 6とかだとヘルプファイルの検索対象の範囲とか設定できるんだけどねぇ‥‥ CLXのヘルプ外したりとか。
377 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:59:47 ] ヘルプはひどいな リンクも不十分だし、欲しい情報になかなかとべん
378 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/08(月) 17:35:10 ] 旧ボーランド時代からヘルプは良くなかったですねぇ。 初代Delphiの頃はまだ良かったのですが… >>367 さらにEditを枠無しにしたら完璧ですね。
379 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 16:44:35 ] >>378 やってみたけど枠を消すと文字がずれて、枠有りの状態のようにはいかなかった。
380 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/09(火) 17:47:19 ] 確かにうまくいきませんでした。 赤パネル Editと同じ色のパネル Edit の三段重ねでEditの位置を調整してなんとかそれらしく?なりましたがなかなか骨の折れる作業です。 複数貼り付けるならアンカーを使ったり赤パネルの代わりに赤フレームにすると作業効率は多少ましになるかもしれませんが AutoSizeが利かなくなるのかフォントサイズを変えてもウィンドウサイズが変わらないのはつらいですね。
381 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 18:32:27 ] そんなことするよりTCustomEdit継承して新しく作った方が楽じゃない?
382 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 20:53:08 ] 初心者質問お願いします。 DateTimePickerにMaxDateを設定している時、 プログラムでDateTimePickerのDate プロパティにMaxDateと同じ日付を代入することはできないのでしょうか? 手動ではMaxDateの日付を設定できます。 当方Delphi4です。 〜例〜 (MaxDate は2008/12/31と設定している) DateTimePicker1.Date := StrToDate('2008/12/30'); ・・・日付が反映される DateTimePicker1.Date := StrToDate('2008/12/31'); ・・・日付が反映されない DateTimePicker1.Date := StrToDate('2009/1/1'); ・・・日付が範囲を超えているとエラーが出る (手動で2008/12/31を設定することはできる)
383 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 21:23:34 ] TEdit も TDateTimePicker もウィンドウズのコントロールだから、その機能は 本質的には Delphi と関係ない。MSDN 読むほうがいい。 >>381 は馬鹿回答。
384 名前:382 [2008/12/09(火) 21:49:28 ] >>383 そうでしたかぁ。 ありがとうございました。
385 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 00:48:07 ] >382 Timeプロパティに何が入ってるか確認したほうがよいかも。
386 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 08:21:07 ] >>373 俺も2006でDelphiだけが表示される正式なヤリ方がしりたい。 前にどこかを見てやったときは、ヘルプのアプリ?がバグバグで 設定したのに設定したことにならなかったり嫌になった覚えがあるな。 しかし、どうやって設定したか憶えてなくて困る。 Delphiヘルプのみってのが確かできたはずなんだが。 6の時はテキスト弄るだけで簡単だったけどな。
387 名前:382 mailto:sage [2008/12/10(水) 13:20:42 ] >>385 Timeプロパティを00:00:00にしたら正しく動きました! ありがとうございました!
388 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 00:17:14 ] TEditの枠のありなしでサイズが変わるのはVCL内で実装されているから、 継承してサイズが変わらないようにすればおk それ以前にコントロールは自分でも描画できるから、簡単に枠を描画することが可能 ↓にサンプルがある www.delphipages.com/threads/thread.cfm?ID=171344&G=171334 VCLはただWindowsコントロールをラップしてるだけでなく独自のコードも追加してるし、 >>383 はかなり見当違いの回答なので初心者は参考にしないようにね
389 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 00:22:03 ] 2006ではDelphi以外のHELPも(親切に)表示するのが仕様ということでハイ {{{{(+_+)}}}}。 (アーーーーめんどくさい) しかし、こんな簡単なことがデフォでできてないなんて、何なのこの会社?
390 名前:デフォルトの名無しさん [2008/12/11(木) 00:24:47 ] 教えてください。MediaPlayerを使って1から9までの動画をランダムにつなげて流すというプログラムを作っています(例えば2→5→8→1→3→9→4→7→6の順番で動画を流してくれるようなプログラムです) とりあえず作ってみたのですがボタンを押してもうんともすんとも動きません。ここが間違ってる、こうしたら良いなどのアドバイスをいただけたらと思います。よろしくお願いします var cou,new,test,i:Integer; video:Array[1..9]of integer; procedure TForm1.Button2Click(Sender: TObject); begin cou:=cou+1; if cou>9 then exit; Randomize; new:=Random(10); repeat test:=0; For i:=1 to cou do if new=video[i] then test:=1; If test=1 then new:=random(10); until test=0; video[cou]:=new; MediaPlayer2.FileName:=ExtractFilePath(application.ExeName)+'tabidachi'+IntToStr(new)+'.wmv'; MediaPlayer2.Open; MediaPlayer2.Notify:=True; MediaPlayer2.Play; procedure TForm1.MediaPlayer2Notify(Sender: TObject); if (MediaPlayer2.DeviceID <> 0) and (new < 10) then begin MediaPlayer2.FileName := ExtractFilePath(application.ExeName)+'tabidachi'+IntToStr(new)+'.wmv'; MediaPlayer2.Open; MediaPlayer2.Play; Inc(new); end;
391 名前:デフォルトの名無しさん [2008/12/11(木) 00:44:39 ] 宿題でダイヤモンドパターンのプログラムがあるのですが教えてください!!!!
392 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 00:45:27 ] couの初期値って何なの?
393 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 03:01:18 ] >>388 そうなんですか。それで変な動作をするんですね・・ TEdit くらい単純なラッパーの方がいいのに。
394 名前:386 mailto:sage [2008/12/11(木) 10:02:34 ] ヘルプの編集思い出した。 編集というか、デフォルトのフィルタを変更するだけだけど 「ヘルプ」→「フィルタの編集」 (フィルタなし) を選択して、例えば以下を突っ込んで Save ("DevLang"="Delphi") OR ("DocSet"="bds_Win32") OR ("DocSet"="PSDK") OR ("DocSet"="indy") これで、デフォルトでDelphiとBDS Win32とPlatformSDK、Indy 10からしか検索されない。 根本的にいらないヘルプをはずすわけではなく、 実質、起動時にフィルタを選択しているのでヘルプ起動時少し重いが難
395 名前:386 mailto:sage [2008/12/11(木) 10:06:04 ] 根本的に削除する方法みつけた。これでいけるんじゃね? ヘルプを登録しなおすには:某所:So-net blog bousyo.blog.so-net.ne.jp/2006-01-09 某所 - C++Builder のヘルプを削除するには bousyo.blog45.fc2.com/blog-entry-91.html
396 名前:386 mailto:sage [2008/12/11(木) 10:08:25 ] ああ、やべえ、 >>394 はやらん方がいいわw (フィルタなし) に Saveすると、以下の様にでて元に戻せなくなるわw --------------------------- Windows Internet Explorer --------------------------- Filter cannot be saved without a definition --------------------------- OK --------------------------- 欠陥ヘルプww
397 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 10:22:02 ] >>396 の問題は、deleteで(フィルタなし)を削除しようとしたら大丈夫だった >>395 のヘルプの編集はうまくいった。 以下C++と.NETの削除の方法 for Vista。 まずは、適当なフォルダに %PROGRAMFILES%\Borland\BDS\4.0\Help\Common\mergeWin32.xml をコピー。 以下のパッチを当てる。(といっても該当行を削除するだけ) --- mergeWin32.org.xml 2005-11-14 10:00:00.000000000 +0900 +++ mergeWin32.xml 2008-12-11 10:12:02.910931700 +0900 @@ -10,16 +10,13 @@ <CompiledIndex>Help\Win32\bds4Win32devguide.HxI</CompiledIndex> <CompiledIndex>Help\Win32\bds4Win32tasks.HxI</CompiledIndex> <CompiledIndex>Help\Win32\bds4Win32api_win32.HxI</CompiledIndex> -<CompiledIndex>Help\Win32\bds4Win32api_cpp.HxI</CompiledIndex> <HelpTopic>Help\Win32\bds4Win32guide.HxS</HelpTopic> <HelpTopic>Help\Win32\bds4Win32devguide.HxS</HelpTopic> <HelpTopic>Help\Win32\bds4Win32tasks.HxS</HelpTopic> <HelpTopic>Help\Win32\bds4Win32api_win32.HxS</HelpTopic> -<HelpTopic>Help\Win32\bds4Win32api_cpp.HxS</HelpTopic> </FileList> <Filters> <Filter Name="Developer Studio 2006 for Win32">"DocSet"="bds_Win32"</Filter> -<Filter Name="Language: C++">"DevLang"="C++"</Filter> </Filters> </Merge> </helpConfig> (つづく)
398 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 10:24:29 ] 同じフォルダに以下のregHelp.batファイルを作り、管理者権限で実行 copy mergeWin32.xml "%PROGRAMFILES%\Borland\BDS\4.0\Help\Common" "%PROGRAMFILES%\Borland\BDS\4.0\Help\Common\regHelp.exe" -7 "%PROGRAMFILES%\Borland\BDS\4.0\Help\Common\regHelp.exe" 5 おもむろにヘルプを起動すると、しばらく後適用された状態で検索ができる / ̄\ | | \_/ __|___ / \ / \ l | ( | \ 〃_/ >'⌒ ̄ ̄、,\ / \ / ィ ,ノ'ヾ ヽ ( / ), l ) ノ _,/ 、,, | /⌒ ̄ ̄ ̄ | l 、_ ,ノ ,/ | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| . └┬:‐┬───┬‐────┘ ノ ,‐‐,) 丿,‐‐,) ┼ヽ -|r‐、. レ | (,∠/ (,∠/ d⌒) ./| _ノ __ノ
399 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 10:39:17 ] >>397 念のため編集前に mergeWin32.xml はバックアップを取っておいた方がよいです
400 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 12:52:35 ] >>394-399 サンキューベリーマッチ! m(_ _)m
401 名前:390 [2008/12/11(木) 13:28:48 ] >>392 さん 初期値は設定していません。設定しないとうまくいかないんでしょうか? 引き続きご回答いただければ幸いです。よろしくお願いします
402 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 13:33:07 ] cou:=cou+1; の行にBreakPointを置いて、実行。 止まったときのcouの値は? cou:=0; で初期化しないとだめじゃないの? 自動で0にしてくれたっけ?
403 名前:390 [2008/12/11(木) 13:57:43 ] >>402 さん cou:=0;で設定し、ブレークポイント置いて実行してみました couは1で止まってしまっているみたいです…
404 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 14:22:02 ] ランダムに再生の前に、普通に再生は出来るの? video: array[1..9]of Integer に適当に数値を入れて、再生させると再生できるの? それとも、それでも再生できないの? ランダムの部分がいけないのか、再生部分がいけないのかの切り分けはしましたか?
405 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/11(木) 14:41:32 ] >>402 ローカル変数は初期化されません(0にしてくれません)。 だから自分で初期値として0を代入しなければなりません。 ちなみにグローバル変数は初期化されます(0にしてくれます)。 たまたま0になっているときもありますがこれを当て込んではいけません。
406 名前:390 [2008/12/11(木) 14:42:17 ] >>404 さん ボタンを押しても何も起きません。読み込みもしてくれなくてうんともすんともです 再生部は問題ないようです。前半部のランダムの部分が良くないようです 説明不足な点が多くすみません
407 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 14:50:19 ] この板の上の方にBINGOの問題があって、 そこで同じようにランダムに数値を並べる例が出てるから、みて見れば? その例にそってvideo[1..9]にちゃんとランダムに数値を入れるところまで、 頑張ってみようよ。
408 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 16:18:31 ] Del7でバックグラウンド、最小化状態のウィンドウを フォアくグラウンドに持ってきたくて www.swissdelphicenter.ch/torry/showcode.php?id=261 のコードを組み込んでみたところ バックグラウンドからは成功したものの 最小化状態からはフォアグラウンド化できません。 どうやればいいんでしょうか。
409 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 22:52:35 ] マウスのホイールをフックしたいのですがホイールの上下を感知することってできるのでしょうか?
410 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 23:00:56 ] すみません wParamを見ればいいことがわかりました お騒がせしました
411 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 03:08:36 ] var a: array[0..10] of Byte; みたいな感じで定義した配列に、@a[0]を対象にMoveMemoryとかをやっても大丈夫なんですか? 配列はメモリ上で常に連続しているものなんですか? Cardinal型とByte型の配列を相互に入れ替えるとき、Moveは面倒くさくて
412 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 03:40:11 ] 連続して無いとFileName: array[0..MAX_PATH] of Char;とか使えなくなる ので連続してるだろう
413 名前:デフォルトの名無しさん [2008/12/13(土) 18:39:04 ] すみません!!! 0から1の乱数randomを200回発生させ、第1項から200項目までの和、その平均、二乗和を求めるプログラムを穴埋めで回答するように。 という課題がわかりません↓↓ 教えてください!! なお、和はedit1、平均はedit2、二乗和はedit3に出力するものとし、 s: 和 ss: 二乗和 r: 0 から1の乱数をいれる変数 av: 平均値 とする。 procedure TForm1.Button1Click(Sender: TObject); var i:integer; s,ss,r,av:real; begin s:=[(1)]; ss:=[(2)]; [(3)] i:=1 to [(4)] [(5)] r:=random; s := s+ [(6)]; ss:= ss + [(7)]; end; av:=s/[(8)]; edit1.text:=[(9)]; edit2.text:=FloatToStr(av); edit3.text:=[(10)]; end; }
414 名前:413の続き [2008/12/13(土) 18:42:22 ] 和の値(小数点以下3桁目を四捨五入する) 平均の値(小数点以下3桁目を四捨五入する) 二乗和の値(小数点以下3桁目を四捨五入する) も是非是非お願いします!!!!
415 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:44:36 ] これぐらい分からないとしょうがないぞ 0 0 for do begin i i*i 200 s ss
416 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:46:11 ] おれも出来てなかった
417 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:47:08 ] 自力で解く気ゼロだな
418 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:54:21 ] 5にrandomize入れてしまったw 4はdo beginで
419 名前:390 [2008/12/13(土) 22:00:35 ] >>407 さん いろいろとアドバイスいただきありがとうございました。お礼が遅くなり申し訳ありません
420 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:34:48 ] >>413 宿題スレはこちら Pascalの宿題は俺にやらせろ!!Part2 pc11.2ch.net/test/read.cgi/tech/1136994325/
421 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 23:40:05 ] 宿題を丸投げする413が教授に怒られますように ニヤニヤ
422 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 23:44:44 ] 大学でDelphi習うところあるんだね
423 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 00:05:58 ] どっちかというとDelphiというよりはPascalだろーけどな
424 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 00:09:20 ] Delphi2006でファイルメニューの「開き直す」を選んだとき、過去のプロジェクトがたった4件しか表示されません。 これだと、ちょっと別のプロジェクトをいじっていると肝心のプロジェクトが表示されなくなったりして面倒です。 そこで「開き直す」プロジェクト数を増やそうと思ってオプションを見ましたが、該当するパラメータが見つかりませんでした。 このようなプロジェクト数を増やす設定は可能でしょうか。
425 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 01:53:01 ] >>424 それは俺も不便に思ってる。 スタートページも確かパス表示なしな上に、 プロジェクトの履歴少ないよな
426 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 04:33:00 ] >>424 プロジェクトのショートカットをデスクトップにでも作っておけ
427 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 06:18:44 ] ショートカットだと、もう一個IDEが起動する(´・ω・`)ショボーン
428 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:26:28 ] Delphi2006なら HKEY_CURRENT_USER\Software\Borland\BDS\4.0\Closed Projects を書き換えるだけのソフトを作っておけばいい コマンドラインにプロジェクトファイルをくっつけて
429 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:42:52 ] それって簡単?
430 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:45:35 ] 簡単かどうか試せばいいんじゃね?
431 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 12:04:00 ] ActiveProjectsとかいうフォルダにショートカット作っておいて タスクバー右クリツールバーの登録で指定して >>から起動したいファイルをIDEにドラッグドロップすれば開けるんじゃね。
432 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 12:41:52 ] >>430 やってみたけどIDE起動してると効かないみたい。そしてIDE終了さ せるときエラーになる。 IDE起動してない状態で書き換え、IDE起動させれば確かに効くけど、 IDEの再起動が面倒かな。
433 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:18:43 ] >>431 やってみた。 ショートカットだと .lnk ファイルが開かれるだけ。 実プロジェクトファイルだと、現行プロジェクトを非アクティブにしてプロジェクトグループに追加される。 しかし、元々関係ないプロジェクト同士でプロジェクトグループにすると、どのユニットが何がなんだか分か らなくなる。
434 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 08:39:54 ] いくつものスレッドでメインスレッドにある一つの配列をいじくる場合って衝突する危険性があると思います どうやって衝突を回避するんですか?
435 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 08:50:37 ] >>434 補足です その共通に使う配列は構造体の配列でaddしたりDeleteしたりする関数を呼ぶ事で操作しています スレッドから操作関数をよぶときにどこかが呼んでいる時は待つ、みたいなことができればいいと考えています どうすればそういうことができるのでしょうか?
436 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 09:40:13 ] mutexやCriticalSectionで衝突する可能性のあるコードを保護する。 TCriticalSectionでも使っとけ。
437 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 12:17:00 ] 下記スレッドの説明から 異なるスレッドが所有する VCL または CLX のメソッド/関数/ プロパティを別のスレッドの中から扱う場合、排他処理の問題が 発生します。 メインスレッドの所有するオブジェクトに対しては Synchronize メソッドを使う事ができます。他のオブジェクトを参照するため のメソッドをスレッドクラスに追加し、Synchronize メソッドの 引数として渡します。
438 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 13:43:44 ] >>434 >>437 玄人ではありませんし、add,deleteの頻度にもよりますが、add,deleteが1秒内に何十回も発生するなら そのたびにSynchronizeを多用するとスレッド化のメリットが失われますのでいかがなものかと思います。 その場合、私なら全配列を丸々コピーしてスレッド内処理後、Synchronizeもしくはterminate後に元にコピーします。 当然、メモリー効率は犠牲にします。 低頻度ならそのたびにSynchronizeで良いのでは?
439 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 14:04:42 ] >>438 >434 >いくつものスレッドでメインスレッドにある一つの配列をいじくる場合 ということなので、各スレッドがコピーして保持し処理後にリストアするならばスレッドにする必要が無いと思う >Synchronizeを多用するとスレッド化のメリットが失われます メリットはまさに衝突回避なのだと思うけど、ここで頻度については議論の外でいいのでは? まー後は434さんが実装して確認するのがはやいわな
440 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/16(火) 01:20:02 ] >>411 亀ですが、言語仕様では 「静的配列はその配列の要素型の連続した変数の並びとして格納されます」 とあります。 わかりにくいのですが「連続した変数の並び」ということなので 連続して並んでいることを保証していると考えて良いと思います。
441 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 04:00:12 ] 動的配列は連続してないかも、ってそんなことあるかいな・・
442 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 09:53:45 ] 動的配列はポインタ1個だから、1つのメモリブロックしか扱えない。 だから連続してないってことはありえない。
443 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 10:44:42 ] 初期化にFillCharルーチンなんぞを使ってるけど、動的配列や静的配列が どんなに大きくてもここ数年まったく問題なく動いていますんで、間違い なく連続してると思いますヨ。
444 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 18:16:34 ] case文のelseはbegin,endでくくらなくてもOK? case i of 1: aa; 2: bb; else cc1; cc2; end;
445 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 18:21:38 ] ok
446 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/16(火) 19:42:58 ] し、知りませんでした… orz Delphi 4とDelphi 5の言語ガイド「case文」の項を見るとひとつの文しか記述出来ないような文面なのですが Turbo Delphi Explorerのヘルプ「宣言と文」の項を見ると複数の文を記述できるという内容が書いてありました。 しかし試してみたところDelphi 5とTurbo Delphi Explorerの両方でコンパイルが通ってかつすべての文が実行されるのを確認しました。 case 文の else 以降にbegin〜endを付けなくて良いとなるとコードもかなりすっきりしそうですね。
447 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 20:28:16 ] VCLのソース読むとかなり参考になるよ 例えばwith分で,で区切って複数の変数を使える var Edit: TEdit; Button: TButton; begin 中略 with Edit, Button do Caption := Text;// ButtonのCaptionをEditのTextに設定 end; これを知らないと with Edit do with Button do〜とか書くことになる
448 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 20:30:33 ] 俺も知らなかった でもcase文ってそんなに使わないよねってか使えないよねcase文って
449 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 20:38:12 ] 縁の下の力持ちってとこだろう
450 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/16(火) 20:58:11 ] >>447 私がVCLのソースを参考にしたものはこんな感じです: ・TStringsとその派生クラス ・TCollection/TCollectionItemとそ(ry ・Resultをループ変数に使う >>448 ( )))))))))))) //(;;;`∀´;;;) 使うんだな、それが! / \ __| | | |___ ||\  ̄ ̄ ̄ ̄ || \ -●-●
451 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:28:59 ] case文使わなかったら、if then地獄になるじゃん
452 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:42:49 ] 相変わらずドキュメントがだめだなぁ
453 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:51:30 ] ならWikiか何かで強力なドキュメント作っておくれよ
454 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:46:44 ] 何かでcase文よりIF文の方が早いって見てから、ずっとifelse羅列してる俺がいる。
455 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:56:55 ] どう考えても逆w 5万で組んだマシンがあまりにも速すぎてゲーム以外では持て余し気味で もうプロファイルも取らずに局所的な高速化を試みることもなくなったな。
456 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:57:32 ] そんな超微量な時間のために可読性を捨てるのもちょっとな
457 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 23:44:29 ] 多態を使えばcaseの出番は減る。 多重なwithはスコープを不明確にするので控えめがお勧め。
458 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:03:35 ] withって読みづらいからいらない
459 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:49:01 ] case sender of btn1 : 〜; btn2 : 〜; btn3 : 〜; end; とかいつかは出来るようになると思って早・・・3.0からかな。 まぁ無理なんだけどね。なんかcase文って惜しいイメージ。 勿論多用する派。
460 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:42:08 ] 他の方法で
461 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 02:56:24 ] case TButton(Sender).Tag of 1 : 〜; 2 : 〜; 3 : 〜; end; で済ますかな自分なら。
462 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 09:21:06 ] ヘルプ「宣言と文」を見てみたらひでえな。 コードが読みづらいし、間違ったセミコロン付いてるし。
463 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:28:34 ] リストに格納した構造体のポインタを使う時なんかは、 いちいちキャストしなきゃならないのがうっとうしいからWith使うなぁ
464 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:34:09 ] >>462 elseやendの前のセミコロンのことか? それだったらずっと以前に拡張になったことと記憶してるが。
465 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:49:03 ] いつからif文のelseの直前にセミコロン付けても良くなったんだ??
466 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:54:32 ] >>463 昔作ったプログラムを後から見たとき、長い複文にwith使ったところ は理解するのに一苦労した。これに懲りて今では例えば var a:Hoge ← HogeHogeHogeHogeと同じオブジェクト型とする。 ......... begin .............. a := HogeHogeHogeHoge; a.Nanchara := .....; a.Kanchara := .....; Dotchida(a.Nanchara); .............. のようにして、with HogeHogeHogeHoge begin 〜 end の代わりにしてることが多い。 でも、withもたまに(短いとこに)は便利に使ってるよ。
467 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:01:52 ] withを使うと効率がよくなると聞いたが。 a.hoge1 := 0 a.hoge2 := 0 a.hoge3 := 0 は毎行aを参照するコードが走るけど、 with a do でくくるとaを参照するコードが1回で済む という感じだった。
468 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 13:09:45 ] コード行数は少なめに短くがモットーの俺はアンチwith ループで何万回実行するとかじゃない限りそんな些細なことは気にしないな・・
469 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 13:55:23 ] >コード行数は少なめに短く これも些細なことだと気づかないのか?
470 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:01:40 ] 速度は計測しない限りわからんけど、コードは見ればすぐわかる ソースは昔のものでも結構参照するし(俺は)、易読性が最重要
471 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:05:53 ] Label1.Left := 10; Label1.Top : = 100; Label1.Caption := 'hogehoge'; Label1.Font.Hoge := hogehoge; Label1.Font.Size := 13; と with Label1 do begin Left := 10; Top : = 100; Caption := 'hogehoge'; Font.Hoge := hogehoge; .Font.Size := 13; end; で、withがない方が見やすいんですね? それなら良いんじゃないでしょうか。
472 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:08:12 ] 俺はね そもそもbeginで改行するのすら許せない神経質
473 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:16:00 ] >>472 ははは、笑った。それならそれを突き通すんだ! 誰も文句は無いですよ。
474 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:42:58 ] コードは少ない方がいい。 そう思っていた時期もありました・・・
475 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:45:36 ] 改行は多いほど見やすい 長い文は二行に そう思ってた時期が、俺にもありました
476 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:00:35 ] >長い文は二行に これは、今でもそうですね。 ただ、長い文になる事が無いように気を使ってコーディングしますけど。 >改行は多いほど見やすい これは、ネタでも笑えないね。
477 名前:デフォルトの名無しさん [2008/12/17(水) 15:14:39 ] 2chの書き込みでも無駄に改行いれて書き込むおかしな人がいるが そういう類の人じゃないだろうか?
478 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:24:57 ] コンパイルされると最適化されるからどっちでもいい
479 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:59:55 ] with do を使う・使わないでコンパイルされるものが違うんでしょ? 最適化されないんでしょ?違うのかな? 教えてください。識者の方。
480 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 16:10:52 ] 同じ参照が続いたコードなんだから、コンパイルで最適化されると思うけどね
481 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 16:11:29 ] var alias: TMyType; begin alias := foo.bar.baz; alias.aaa; alias.bbb := 1; alias.ccc; end; は with foo.bar.baz do begin aaa; bbb := 1; ccc; end; と同じ。 foo.bar.baz.aaa; foo.bar.baz.bbb := 1; foo.bar.baz.ccc; とは異なる(可能性がある)。 プロパティbazがgetbazを呼んでいる場合 上二つは1度呼ばれ三つめは3度呼ばれる。 速度が遅くなるだけではなく副作用で実行結果すら異なることもあり得る。
482 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 16:42:31 ] >>481 さん ありがとうございます。 >上二つは1度呼ばれ三つめは3度呼ばれる。 なので、withを使った方が速度的には有利。 >副作用で実行結果すら異なることもあり得る。 この副作用ですが、withを使ったが為に起こると解釈してもいいでしょうか? withを使わないと副作用が出ますというようなコードはいかがなものかと思うのですが・・・
483 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 19:20:53 ] >>446 俺も知らなかったのでテストしてみたら新たな疑問が 上と下でSenderが変わってしまうのは何故? procedure TForm1.Button1Click(Sender: TObject); begin with (Sender as TButton) do begin case Tag of 0:Caption:='ゼロ'; 1:Caption:='いち'; else Caption:='たくさん'; ShowMessage('てすと'); end; Tag:=Tag+1; end; end; with (Sender as TComponent) do にするとフォームのキャプションが変わる?
484 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 19:30:36 ] Delphi の最適化はあまり当てにならないんだよね。 昔、サンプルプログラムにビットマップイメージをなるべくキレイに縮小する コードがあったが、これは実数を使って計算していてあまりに遅いので整数に 直して数十倍のスピードにしたことがあった。ところが、面白いのは、プログ ラムに、拡大ルーチン(縮小ルーチンとは別のプロシジャ)を組み込むと、若干 だが縮小の処理遅くなった。(拡大ルーチンは呼び出してない!!) どうも、Delphiの最適化は、プログラムが小さいときは処理スピードが上がるように 最適化し、プログラムが大きくなるときは、処理スピードを犠牲にしてもプログラム サイズが小さくなるようにしているみたいなんだ。 (これは Delphi2006とDelphi7で確かめた) ま、だいたい1割くらいだったかな、遅くなったの。(ちょっとがっかりした)
485 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/17(水) 20:06:45 ] >>458 with文は最近使うようになりました。たとえば Nantoka.Kantoka.Untara.Kantara.Options := Nantoka.Kantoka.Untara.Kantara.Options + [opHoeHoe, opHanyaan]; みたいな文だと with Nantoka.Kantoka.Untara.Kantara do Options := Options + [opHoeHoe, opHanyaan]; と読みやすく感じます。 最近のDelphiのIDEは入力補完でもwith文に対応してくれているようなので昔よりは使いやすいと思います。 何行にもわたる場合やwith a, b, c do とか書かれると私の場合は逆に混乱してしまいますので使いません。 >>483 TComponentにはTagはありますがCaptionはないからです。 with (なんとか) do のブロック内では コンパイラはできる限り(なんとか)に対する記述であると解釈します。 そしてそのように解釈できない場合はwith文を使わないときと同じように解釈します. そのため with Sender as TComponent do とした場合、 このwithブロック内で単にTagと書かれている場合には TComponentにはTagプロパティがあるので コンパイラはSender as TComponentのTagだと解釈します。 一方でこのwithブロック内で単にCaptionと書かれている場合には TComponentにはCaptionプロパティがないので コンパイラはwith文を使わないときと同じようにTForm1のTagだと解釈します。
486 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 20:09:42 ] >>485 (最後の行) >コンパイラはwith文を使わないときと同じようにTForm1のTagだと解釈します。 コンパイラはwith文を使わないときと同じようにTForm1のCaptionだと解釈します。
487 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 20:12:27 ] with を使うときは、何がどれに属しているかちゃんと知っていないとあぶない。
488 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 20:14:11 ] Delphi7で思考が止まってるけど、withって、コード補完が効かなくない? なので、withは使わない様にしてる。 設定が足りないだけ?
489 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 21:05:33 ] そもそもDelphiのヘルプにObject PascalのBNFの記述がないのがおかしいんだけどな。 CodeGear腐ってる。
490 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:03:18 ] Synchronizeって引数付き関数呼べないよね? 引数付きの関数を呼ぶ場合どうすれば・・・
491 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:05:41 ] あ、メインスレッドでクリティカルセクション作っておいて、対象関数をEnterとLeaveで挟めば同じことかな?
492 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:18:11 ] >>491 気をつけないといけないのは、 メインスレッド側でも、サブスレッドで触る変数とかはクリティカルセクションで ロック(?)しとかないといけない。 読み込むだけ、ならなくてもよい場合(1つの変数の値をよむだけとか)もある。 書き込むものは、しっかりとロックしとかないといけない こういうのやるときはいきなり本番環境でやらずに、 簡単なスレッドのテストプログラムを作ってテストしてみるのがよいよ。 ポイントは(テスト駆動開発じゃないけど)必ず失敗するように組んでから、 成功するように組むとテストしやすい。
493 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:23:18 ] なるほど。 ってか変数読むだけならクリティカルセクション要らないんですか? 読んでる最中に書き換えが起こると可能性があるとしても?(書き換え側は保護してるとして)
494 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:36:05 ] サブスレッド側で値を書き込み Synchronize中でメインスレッドから読みだすなら問題なし。 VCLが絡まないならCriticalSectionでももちろんいい。 >ってか変数読むだけならクリティカルセクション要らないんですか? >読んでる最中に書き換えが起こると可能性があるとしても?(書き換え側は保護してるとして) 実際に遭遇したことはないけどマルチコア環境ではおかしくなるらしい。
495 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:54:16 ] 念のため両方保護しておきます >>492 さん>>494 さんありがとうございました
496 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:27:07 ] もう一つ質問すみません クリティカルセクションはSyncronizeみたいにメインスレッドで実行するわけじゃないので、共用変数ごとに複数作っても問題ないですよね もちろん保護内では共用変数は一つしか使わないという条件でです
497 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 00:16:02 ] >>496 もちろん可能だけど、(上で出た with のように)ちゃんと設計しないと 恐い恐いデッドロックに遭遇するので要注意です。
498 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 14:00:11 ] >>489 昔、breakやcontinueが「手続き」扱いで、びっくりしたことがある。
499 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:51:50 ] >490 Synchronizeは子スレッドで使用するので子スレッド内のPrivate変数を利用すればok、また参照だけならSynchronize は必要ないですSynchronizeはあくまでメインスレッドの変数更新時の衝突回避なので
500 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 16:35:21 ] >>499 かなり昔のことで忘れたが、Synchronize で引数付き関数が呼べると「便利だなあ〜」などと思ったことがある。 コンパイラが頑張ってくれればできそうなものだと思うけど、間違ってる?
501 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:08:37 ] スレッドはTThreadをラップしてコンポーネント化してしまうと便利。 OnExecuteイベントハンドラにスレッドのコード書いて FormのPrivateフィールドの変数を好き勝手に読み書きできて そこからSynchronizeメソッドを呼ぶとOnSynchronizeイベントが呼び出されるようにして UseThreadプロパティをFalseにするとサブスレッドを使わずメインスレッドからOnExecuteが実行されるように 小細工してロジックのバグを事前に潰しておくとデバッグがかなり楽になる。
502 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 19:19:57 ] なるほどね、コンポーネントにするところまでは考えなかった。 Threadを使うのに便利そうなUnitは作ったことあるけど、なんせ、マルチスレッド にするプログラムはそう滅多になかったんで、(そのUnitは)どっかでカビが生え たまま消滅してるはず。(ずーっと見てもいない)(^_^; そういえばこの2年間シングルスレッドぱっかだなオレ。
503 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/18(木) 19:35:08 ] >>486 その通りでございます orz ありがとう!
504 名前:458 mailto:sage [2008/12/18(木) 23:44:56 ] >>485 ありがとうございました 単なる私の不注意だったようですねお恥ずかしい >>488 with内の[ItemIndex]は昔から効きませんね
505 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 09:28:39 ] >>501 コンポ化は便利そうだけど、イベントとして書くと貼り付けたFormのpas内に コード書くことになるから、なんとなく抵抗があるな スレッドは別処理するためにスレッドにすることが多いし、それだけで ひとつのpasにまとめたい気分
506 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 09:33:42 ] >>501 それはいいかもね。 ちょっとした、TTimerのマルチスレッド版みたいな感覚かな。 MMTimerってのもあったけど、まあ、あれにはSynchronizeがなかったからな
507 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 09:54:41 ] >>505 つ TDataModule
508 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 21:08:05 ] TRegExprでExpressionに指定した正規表現が正しいか確認する方法はあるでしょうか? Compileの例外を監視するとかですかね?
509 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 18:39:58 ] Del7でTMyForm作ってpublishedなプロパティ、イベントハンドラを追加して それをフォームデザイナに反映させる方法ってない?
510 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 19:08:00 ] >>509 パッケージにするとか
511 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:43:26 ] >>509 フォームデザイナに反映させる時は、どうしてもIDEに組み込む必要があって コンポーネントとかの形にしないといけないみたい 動的にはできないんだよな・・・
512 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:58:34 ] >>510-511 パッケージ化すればできちゃうの? 普通にコンポーネントとして登録すると 新規作成ででてくるのかな。
513 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 23:23:07 ] >509 ない。 あきらめろ(冷たいようだけど)。
514 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 01:06:16 ] TRegExprでテキストファイルの空行を削除するには、どうすればよいでしょうか? ^$とかではマッチしないし、(\r\n){2,}を\r\nに置き換えようとすると、そのまま\r\nが 表示されます・・・
515 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 01:27:44 ] >>514 ^¥r¥n$だとどう?
516 名前:514 mailto:sage [2008/12/23(火) 01:34:30 ] >>515 即レスありがとうございます。 それでもマッチしません。 置換の方は、#13#10としてもダメです・・・
517 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 02:07:29 ] delwiki.info/?%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%2FTRegExpr%2F%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%98%E3%83%AB%E3%83%97%2FSyntax%20of%20Regular%20Expressions
518 名前:514 mailto:sage [2008/12/23(火) 06:19:49 ] (?m)^\r\nでマッチするようになりました。 お騒がせしました。
519 名前:514 mailto:sage [2008/12/23(火) 07:16:29 ] 続けてすみません。 置換後の文字列に改行を含むようにするにはどうすればよいか 分かりますでしょうか? #13#10とすると、#13#10がそのまま表示されます。
520 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 07:21:53 ] 'hogehoge'#13#10'fugafuga'
521 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 09:52:55 ] 'hogehoge'+sLineBreak+'fugafuga'
522 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:15:36 ] sLineBreakって何で存在するの? #13#10の方が短くていいじゃん
523 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:29:00 ] ・数字の羅列よりも意味がわかりやすい ・将来、改行コードが変更されても対応しやすい そんなところかと。
524 名前:514 mailto:sage [2008/12/23(火) 10:37:55 ] >>520-522 できました。 ありがとうございました。
525 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 17:12:04 ] >>523 追加: ・マジックナンバーつかうような奴とは仕事したくない、という奴と仕事ができる
526 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 17:37:39 ] じゃあ使わなくても何の問題もないな
527 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 21:58:23 ] >424 むちゃくちゃ遅レスでもう見てないと思うけど、こんなん見つけた。 Andy’s Blog and Tools ? Increase the number of MRU items ttp://andy.jgknet.de/blog/?page_id=198
528 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 12:52:47 ] HTMLパーサのコンポーネントでオススメのものありますか?
529 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:58:20 ] delphiに標準でついているコンポーネントのコンポーネントパレットに出ているアイコンの 画像を取りたいのですが、これらの画像はどこかのフォルダにあるんでしょうか? delphi4です。
530 名前:デフォルトの名無しさん [2008/12/26(金) 19:15:08 ] Print Screenキーでどうでしょ
531 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 21:43:48 ] そんなフォルダはないです? www
532 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 21:45:58 ] ない