08/11/14 11:16:40
>102
えぇ、
普通にRandomで、出てきた数字を覚えておいて重複したら却下すれば良いだけじゃないの?
104:デフォルトの名無しさん
08/11/14 11:19:55
>>103
時間の無駄。
105:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/14 16:28:47
この流れちょっと前にも見たな
107:76
08/11/14 18:45:47
>>97
つきあってくれてありがとう。質問者側じゃないようなレスしてスマソ
ReportMemoryLeaksOnShutdown の出力結果張り忘れてました。
はっときます。
つまり、両方(TTestとTSubTest)のDestroyが呼ばれてないんです。
どちらかの開放の責任を循環参照の外側に出せば、開放されるはずなので、
いろいろ弄繰り回して試してみたいと思います。
108:76
08/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
08/11/14 18:51:32
Delphi2009をお持ちの方にお聞きしたいのですが、
こちらの記事にて、
Delphi 2009で追加された3つの便利な機能をコードで検証 - TechTargetジャパン
URLリンク(techtarget.itmedia.co.jp)
> 注4.関数内関数を匿名関数型の変数に代入することもできる。
とあるのですが、これは本当でしようか?
今までは関数内関数の参照は取得できず、
以下のサイトのようなテクニックで無理やり実現していました。
λ with INNER FUNCTION
URLリンク(hp.vector.co.jp)
もし、「関数内関数を匿名関数型の変数に代入」ができると、
さらなる可能性が広がるのですが・・・
110:109
08/11/14 18:52:16
名前欄消し忘れたorz 76と関連性はないです。
111:デフォルトの名無しさん
08/11/14 18:58:02
それが2009の拡張なんだろ
112:デフォルトの名無しさん
08/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
08/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:デフォルトの名無しさん
08/11/15 02:49:14
>>105のソース読みにくそうだな
115:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/15 05:24:09
OnDataStateChangeにも同じコード書いたら行けたみたいです
今度はCtrl+クリックに反応しなかったんで両方でコード実行しないと駄目ぽいけど・・・
117:デフォルトの名無しさん
08/11/15 08:40:53
>>113
でもさぁ、たかがビンゴでパフォーマンス云々言われてもねぇって感じ。
見た目簡単なほうが良いんじゃね?
まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。
118:デフォルトの名無しさん
08/11/15 08:44:16
>>117
>まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。
9 × 9 - 真ん中1つ = 80
じゃない?
119:デフォルトの名無しさん
08/11/15 09:00:04
間違ってたらごめんね。
ビンゴって1-75じゃなかったっけ?
その数字が5*5のマスの真ん中以外にランダムに配置されてるんじゃ?
あ、ビンゴにもいろいろあるんですか??
120:デフォルトの名無しさん
08/11/15 10:30:13
全員にすべての数字が揃ってるわけじゃない
121:デフォルトの名無しさん
08/11/15 14:15:30
TEditを継承したクラスをつくるって方法を使わず、FormCreate時にEdit1をキャレット非表示のものにする方法をどなたか教えてください!
122:デフォルトの名無しさん
08/11/15 14:22:15
>>121
Edit1.Enabled:=False;
123:デフォルトの名無しさん
08/11/15 14:40:02
Create時じゃないが
procedure TForm1.Edit1Enter(Sender: TObject);
begin
HideCaret(Edit1.Handle);
DestroyCaret(Edit1.Handle);
end;
でどうだ
124:デフォルトの名無しさん
08/11/15 16:38:28
>>123
それでやってみるようにします。
ありがとうございます。
125:デフォルトの名無しさん
08/11/15 16:40:58
うまく説明できないかもしれませんが、
・どんなときでもForm1のKeyDown(Press)がメッセージを取る
ようにするにはどうすればいいんでしょうか?
126:デフォルトの名無しさん
08/11/15 16:42:43
KeyPreviewプロパティかな?
127:ななしへたぐらま ◆XcB18Bks.Y
08/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
08/11/15 16:50:40
>KeyPreviewプロパティかな?
うまくいきました。
どうもありがとう。
129:デフォルトの名無しさん
08/11/15 17:18:36
>>127
玉を一個一個出すビンゴゲームの雰囲気ではないですけど、いいですね。
わかりやすい。
130:125
08/11/15 18:15:17
Form1をKeyPreview:=trueにして、Form1.OnKeyDownでButton1.SetFocusとかでフォーカスを設定しようとしたのですが、
Tab移動のほうに処理が取られるようでうまくいきません。
Tab移動を眠らせてOnKeyDownの中でフォーカスを移すにはどうすればいいんでしょうか?
131:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/16 02:53:54
Delphi2009高いな
商用不可でいいから
低機能だけどコンポは使えて
9800でだしてくれんかな。
シェア広げることも大事だと思うんだが
133:デフォルトの名無しさん
08/11/16 02:58:58
Del6personalでDelユーザーを増やせたのにねー
Del8以降の迷走で損してるわ。
134:デフォルトの名無しさん
08/11/16 09:45:48
Delphiはもうガラパゴス諸島化してるだろ。
135:デフォルトの名無しさん
08/11/16 10:24:23
.NETバブルにのって崩壊
136:デフォルトの名無しさん
08/11/16 10:42:27
>>134
つまり手厚く保護されるということだな
137:デフォルトの名無しさん
08/11/16 10:45:02
TurboDelphiExplorerがあるじゃない
138:デフォルトの名無しさん
08/11/16 12:43:20
>>137
Turboは、.net1.1に依存してるのと、
コンポが使えないのがネック。
商用不可でいいから6Personalみたいな形で
だしてほすい
139:デフォルトの名無しさん
08/11/16 12:57:36
URLリンク(www.itwriting.com)
上記サイトのDelphiラッパーを使おうと思い、まず同梱のTestSqlite.dprを実行させようとしたところ
エラーが出てコンパイルできませんでした。どこを修正するといいのでしょうか?
[エラー] SQLiteTable3.pas(470): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(627): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(787): 'TCollateXCompare' と 'Pointer' には互換性がありません
[致命的エラー] uTestSqlite.pas(7): 'SQLiteTable3.pas' ユニットはコンパイルできませんでした
140:デフォルトの名無しさん
08/11/16 15:39:40
>>139
問題無くコンパイル出来た@Del6
141:デフォルトの名無しさん
08/11/16 15:47:12
>132
シェアを広げることが(企業としての)利益を増やす、ということに繋がるのかどうか、が問題みたいですね。
これをCodeGearの人たちに納得させられればいいのですが。
Borlandから独立することによってBorland(ALM/Together)の連中がやっていたIDEの安売り、投げ売りから
解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
現状からすると、しばらくの間は難しいんじゃなかろか、というのが個人的な意見です。
142:デフォルトの名無しさん
08/11/16 16:00:15
某もたいして安くなかったのにね
マイナー言語のくせに偉そうだな
143:デフォルトの名無しさん
08/11/16 17:16:34
>解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
>現状からすると、
ソースぷりーず
144:デフォルトの名無しさん
08/11/16 17:19:11
>自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、
糞ヘルプ、バグだらけの正当な評価だろうけどな。
145:デフォルトの名無しさん
08/11/16 17:20:09
起きたらオッチャスレ落ちてたんだけど誰か立てないのか
146:デフォルトの名無しさん
08/11/16 17:53:31
>143
forum(private含む)でのCodeGear関係者の発言からはそう読めるけどね。ディスカウントとか無料とか
なんでそんなことしなきゃいけないの?利益に貢献するの?ってな感じ。
ソースは脳内なので当たっていないと思うなら無視してくれて構わないよ。
>142
Personal/Turbo Explorerはただでこれ以上安くできないけど?バージョンアップとかも新規に比べりゃ
安いもんだったしな。でも今はマイナーだからこそ稼がないと消滅しちゃうわけで。MSみたいに
ボッタクリ部門があるわけじゃないからな。
>145
あら、ほんとだ。
147:デフォルトの名無しさん
08/11/16 17:59:20
スレリンク(db板:100番)
100 名前:NAME IS NULL[sage] 投稿日:2008/11/16(日) 12:56:23 ID:???
URLリンク(www.itwriting.com)
上記サイトの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
08/11/16 18:09:10
>>138
データベース(に接続して読み書きする機能)で差を付けられなくなってしまった現在では
有料版とどこかで差別化しなければならなかったわけで落としどころとしては悪くないと思います。
またコンポは設計時に貼り付けられないだけで実行時にコードで生成することはできますので
私はここ1~2年はこれで頑張っています。
フレームを積極的に使い始めたためか標準でないビジュアルコンポーネントをポトベタしたくなる場面が
かなり減ったのでそんなには困っていませんがさすがにそろそろポトベタできる有料版が欲しいです…
149:デフォルトの名無しさん
08/11/16 18:11:08
俺の不満はDelphiのシェア低いから使えるライブラリの種類少ないことだな。
Delphiのクラスライブラリが.NET並とはいかないまでも、もっとリッチならまぁ気にならないが。
正規表現にしてもDelphiのVCLに標準で用意されていないし。まぁ、PCREや鬼車使えるけど、
アプリに静的リンクしようとかなるとたちまち、メンドくさいし。
前はDelphiで構文解析やろうとして、Delphiのソース吐くやつが余りないから、
C#のコードを吐くパーサジェネレータをDelphiのコードを吐くように改造したり。
めんどくせぇ。
150:デフォルトの名無しさん
08/11/16 18:19:07
隔離スレに帰れ
151:デフォルトの名無しさん
08/11/16 19:07:36
まじでめんどくさいぉ。
152:デフォルトの名無しさん
08/11/16 21:15:48
オッチャなくなったので、こちらで活動開始。
オッチャすれ アンチ対策テンプレ v1.0(案)
(p)URLリンク(codegearwatcher.web.fc2.com)
> オッチャすれ アンチ対策テンプレ v1.0(案)
> 以下はオッチャすれに出没する、アンチの持ちネタです。
> これらのネタは、4年以上にわたる不毛な議論と逆予言により終息しています。
> しかしアンチは自作自演を交えつつ、無限ループを続けています。
>
> このスレでアンチを見かけた場合は、このテンプレを提示しましょう。
153:デフォルトの名無しさん
08/11/16 21:46:51
マンセがうるさいので、これからここに質問に来た初心者をけなしてDelphiユーザーの
妨害活動をしますのでよろしく。
154:デフォルトの名無しさん
08/11/16 22:01:33
>>152 はまんせじゃなくて最凶アンチ。きもい。
155:デフォルトの名無しさん
08/11/16 22:36:45
【Embarcadero】CodeGearオッチャ その13
スレリンク(tech板)
156:デフォルトの名無しさん
08/11/16 23:00:46
既存のコンポを継承したコンポを使いたいんですけども
どうやって呼び出したらいいんでしょうか?
例えば、TCustomEditを継承したTEditExを作ったんですけども
フォームへの貼り付け方法がわかりません。
環境はTurboDelphi Explorerです。
157:デフォルトの名無しさん
08/11/16 23:11:13
TDEじゃ無理です
158:デフォルトの名無しさん
08/11/16 23:12:03
あ、FormのOnCreateで
EditEx1 := TEditEx.Create(Self);
EditEx1.Parent := Self;
とすれば貼り付けじゃなくてもおk
159:デフォルトの名無しさん
08/11/16 23:57:34
>>158
ぬぉぉぉ
できました。
ありがとうございます!
160:デフォルトの名無しさん
08/11/17 01:24:56
「→」や「→」などを「→」のように文字に変換する方法はありますか?
161:デフォルトの名無しさん
08/11/17 01:29:15
全部同じにしか見えない
162:デフォルトの名無しさん
08/11/17 01:29:28
ミスったorz
「&#8594;」や「&#8594;」などを「→」のように文字に変換する方法はありますか?
163:デフォルトの名無しさん
08/11/17 01:32:26
再び・・
「&#8594;」や「&#rarr;」です
164:デフォルトの名無しさん
08/11/17 01:35:29
「&#8594;」や「&#rarr;」を「 → 」に置き換えればいいんじゃないの?
165:デフォルトの名無しさん
08/11/17 01:39:22
全ての全角文字と記号がこの形式になっているもので・・
166:デフォルトの名無しさん
08/11/17 02:06:06
キーボードが壊れてしまって「あ」が「あ」になってしまうんです。
思い出した。
167:デフォルトの名無しさん
08/11/17 03:19:21
classとinterfaceを継承したclass(例えば TTest = class(TObject, IInterface))があるとき、
自身を、IInterfaceを引数に取る関数に渡す場合はどうすればいいんでしょうか?
168:デフォルトの名無しさん
08/11/17 03:36:48
>>167
Self as IInterfaceとかじゃね?
169:デフォルトの名無しさん
08/11/17 03:39:16
>>168
「この型には指定した演算子は使えません」と出ます
170:デフォルトの名無しさん
08/11/17 03:50:52
>>169
そのままSelfか、IInterface(Self)でどう?
171:デフォルトの名無しさん
08/11/17 04:01:29
>>170
それも無理でした
172:デフォルトの名無しさん
08/11/17 04:50:18
interfaceを使うときは一般的にはTObjectじゃなくTInterfacedObjectから継承する。
そうでなければQueryInterfaceや参照管理を自前できちんと実装しないといけない。
分かってやってるならいいけど。
173:デフォルトの名無しさん
08/11/17 04:57:07
あちゃ、本当は class(TObject, IDispatch)ってやってたんですけど、
キャストする時はIInterfaceも追加しないといけないんですね
>>172
URLリンク(tobysoft.net)
のようにやってました
参考にしておきます
174:デフォルトの名無しさん
08/11/17 12:24:35
OSを替えたんでDELPHI6を再インストールしたら
前の使用許諾コードが入らないんです。それで新たに発行してもらおうとしたら
以前に使ってたメアドで登録してたんで、今の使ってるメアドで登録しなおそうと思っても
シリアル発行終了してるんでどうしたら良いのか困ってるんです。
一度は登録済みだから未許諾ままでも良いですかね。
フリーソフトとかで配布したいんですけど
175:デフォルトの名無しさん
08/11/17 13:08:01
ポップアップメニューがポップしてるかという判断ってどうやればいいですか。
ポップしている間にTimerイベントが発生してしまい
ちょっと望ましくない挙動になってしまうのでif文を追加したいのです。
176:デフォルトの名無しさん
08/11/17 13:09:04
HKEY_CURRENT_USER\Software\Borland\Delphi\6.0のLMKEYを前のとあわせたらどうかな
でもバックアップ取ってないよね
まあ登録しようがしまいが構わんさ
それでソフト配ってる奴なんか山のようにいる
177:デフォルトの名無しさん
08/11/17 13:09:56
LMKEYじゃなくてLMかも分からんね
178:デフォルトの名無しさん
08/11/17 14:52:48
>>175
WM_ENTERMENULOOPでフラグ立ててWM_EXITMENULOOPでフラグ降ろす
179:174
08/11/17 14:56:10
>>176 >>177
バックアップのと照らし合わせたら同じでした、と言う事は
インストール番号とキーは今のOSでは使えない(インストールだけは出来る)ので
メールでインストール番号とキーを書いて送って帰ってきた
使用許諾コードも使えないと言う事ですよね、困ったなぁ
>それでソフト配ってる奴なんか山のようにいる
EXEの中に未許諾の情報とか入ってないんですか
180:デフォルトの名無しさん
08/11/17 15:02:29
>>179
むむ・・・すまん
じゃあもういっその事レジストリ全部上書きでもいいと思うよw
> EXEの中に未許諾の情報とか入ってないんですか
Kylixにはあると思う(System.pasにそんなことがちらり)けど、Delphiにはないんじゃないかなあ
181:174
08/11/17 15:56:17
>>180
上書きは項目が沢山あるんで諦めましたw
情報はDELPHIの方には入って無いんですか、じゃあそのままにしときます。
一応登録する意思はあるんで、出来ないんじゃどうしようも無いですし。
自分せいじゃあ無いんでしょうがないです。
色々ありがとうございます、ちょっと安心しました。
182:デフォルトの名無しさん
08/11/17 17:21:40
OSとか換えなくてもDel6入れ直しただけで前の使用許諾コード使えなくなったな
俺はそのまま赤いまま
183:デフォルトの名無しさん
08/11/17 19:26:44
Delphiのimplements指令がいまいちわかりません。
下記サイトでサンプルコードがあったのですが、
An Introduction to COM Programming with Delphi (3 / 6)
URLリンク(delphi.about.com)
結局、implementsを書いたクラスは一度interfaceにキャストしないと
メソッドよめないんでしょうか?
var
Test: TTest;
Foo: IFoo;
begin
Test := TTest.Create;
Foo := Test;
Foo.Bar; // FooにキャストしないとBarに呼べない
184:デフォルトの名無しさん
08/11/17 19:27:26
> メソッドよめないんでしょうか?
メソッド呼べないんでしょうか?
185:デフォルトの名無しさん
08/11/17 20:01:50
>>174
登録コードの数字と使用許諾コードがあればレジストリでLMの最後にある数字を
元の登録コードの数字に書き換えれば登録できる
186:ななしへたぐらま ◆XcB18Bks.Y
08/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:デフォルトの名無しさん
08/11/18 01:11:12
>>183
TestはあくまでDelphiのオブジェクトなので実装されていない
メソッドが呼べないのは当たり前じゃないでしょうか。
188:デフォルトの名無しさん
08/11/18 01:28:33
>>181
・SerialNumber:インストール番号と
・AuthorizationKey:インストールキーは、そのまま使える
ってか使えるからインスコ出来る訳で
インスコし直し(とかD6RegClean.exe実行)すると
・RegistrationKey:登録コード が変わる
その登録コードで有効な許諾コードを取得
URLリンク(reg.codegear.com)
メアドはDeveloper Networkのアカウントにログインして変えれば良い
Borlandの時の返信Mailは登録コードも書いてあったけど
Embarcaderoのには書いてない。
念のため事前に数字メモっとかないと。。。
189:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/18 05:09:52
コンストラクタで生成元を渡すような仕様にしたらいいんでは?
191:デフォルトの名無しさん
08/11/18 05:16:04
メッセージが何のことやら
192:189
08/11/18 05:16:24
>>190
ありがとうございます。
procedure TObjA.foo();
begin
objB := TObjB.create(self);
end;
などとして、引き回すということですよね?
この方法が一番スマートですかね…?
193:174
08/11/18 05:55:54
>>182 >>185 >>188
返事遅れてすいません、>>185 さんの方法で上手く出来ましたw
OSの違いじゃなくて登録コードが合ってなかったんですね。
入力欄に入れようとしても変えられなかったんで関係ないと思ってました。
いや本当に助かりました、これでスッキリとDELPHI6を使い続ける事ができます。
本当にありがとう御座いました。
194:デフォルトの名無しさん
08/11/18 11:36:24
これはいいライブラリになるかも。試してないけど。
309 名前:View ◆AcQTmXmylo [sage] 投稿日:2008/11/18(火) 05:25:01 ID:bqCSxa7a
今回導入した鬼車もオープンソース(BSDライセンス)なので、それに対する貢献はなんだろうと考え、
delphiから鬼車を使うためのラッパークラスTOnigRegExpのソースを公開しました。
URLリンク(www.geocities.jp)
OnigRegExpは、Km氏が作成したdllラッパーのoniguruma.pas, onig.pasの改造品を
さらにラップしてクラス化したものです。
URLリンク(homepage2.nifty.com)
195:デフォルトの名無しさん
08/11/18 12:39:51
人によってクセがあるので自分で書いたほうが
使い易かったりもするけどね
196:デフォルトの名無しさん
08/11/18 12:55:40
>>189 なんでそんな面倒なことするの? メンバ変数で記録すればいいじゃないか
procedure TMain.foo();
begin
objA := TObjA.create();
objA.foo();// objBを生成
end;
↑これobjB作れてないじゃん objAとかobjBは結局ポインタなんだけどわかってる?
197:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/18 16:33:58
>>196
全部読めよ
199:デフォルトの名無しさん
08/11/18 16:36:05
>>197
lp^じゃねぇの?
200:デフォルトの名無しさん
08/11/18 17:35:53
>>199
漏れもそう思ったんだが、両方文字列に変換してから比較るらしい。
D5だとequal言うんよね。
201:デフォルトの名無しさん
08/11/18 17:43:46
あの、流れ無視でごめん。
所でDelphi2009は.Net対応?
みんなは.Netに移行するんですか?Win32維持ですか?
Delphiはその流れに付いて行っているんですか?
202:デフォルトの名無しさん
08/11/18 18:48:36
いまのDel使いは.NETに乗り遅れた人達なんだよ・・
203:デフォルトの名無しさん
08/11/18 19:07:13
oniguruma.pasに接頭辞Tで始まるデータタイプを定義してほしい。
もうね、
var
RegExp: OnigRegExp;
Windows.pasも例えばTLogFont = tagLogFont;と別名定義してんだし、
合わせろよ。
と、>>195に同意。
204:デフォルトの名無しさん
08/11/18 20:16:57
>>188
ありがとう
居座ってた赤いの消すことが出来た
205:デフォルトの名無しさん
08/11/18 21:19:06
VBSなRegExp風にラップしてくれ~
あれが一番使いやすい。
ついでにコールバックによる置換なんかに対応してくれれば言うことない。
206:デフォルトの名無しさん
08/11/18 21:26:00
「VBSなRegExp」がどんなのか分かったら暇なときにやらないこともない
207:197
08/11/18 21:56:01
>>197
del5でもShortStringに変換して比較してた>AStrCmp
WideCharの比較でなんでShortStringが出てくるのかわからないけど、仕様ならしょうがないか。
208:デフォルトの名無しさん
08/11/18 21:58:34
UnicodeStringへの添え字でのアクセスはShortStringになるのが関係ありそうでなさそうでありそう
209:デフォルトの名無しさん
08/11/18 21:58:57
>>187
まあそれはそうなのですが、単純にブリッジ処理書くのが省ければなあ、
という用途で使おうと思ったら、
面倒くさい仕様なので残念!といったところなのです。
210:デフォルトの名無しさん
08/11/18 22:01:53
Ordをかましたらどうだろ
211:デフォルトの名無しさん
08/11/18 23:44:44
Orz
212:デフォルトの名無しさん
08/11/19 01:18:28
delphiで、一部の文字の色を変えるエディタって簡単に作れるの?
213:デフォルトの名無しさん
08/11/19 01:21:26
>>212
そんなこと聞いてるあなたには簡単ではないでしょうね
214:デフォルトの名無しさん
08/11/19 01:33:40
richeditで出来るだろ
215:デフォルトの名無しさん
08/11/19 10:12:46
Delphi2009のバージョンアップ版ってインストール時に
前バージョン(Delphi4持ってる、2は行方不明)の確認ありますか?
VBとの比較検討用だったんでユーザー登録もしてないんだけど...
216:デフォルトの名無しさん
08/11/19 11:05:41
おそらく前バージョンのユーザー登録してないならアクティベーション通らないんじゃないかな?
CDNのアカウントで認証してるみたいだし。サポートに問い合わせた方がいいかと。
217:デフォルトの名無しさん
08/11/19 21:33:50
>>192
TObjBでイベントを定義して、ObjBを生成したときに
イベントハンドラとしてObjAのメソッドをを代入するのがいい。
ObjAの参照を持たせるよりも結合度を小さくできる。
218:デフォルトの名無しさん
08/11/19 23:19:20
特定のオブジェクトの参照を保持するのと、そのメソッドを保持するのと
結合度に差があるの? メッセージを送りたいんだから TObject の Dispatch()
を使えるし、だからすべてのクラスで参照を保持できたほうが汎用性の意味では
よりいいんでは?
219:217
08/11/21 01:04:58
んー、どうだろね。
メッセージというのがwindowsメッセージやdelphiのディスパッチのメカニズムを
利用する話なら>>218で正しいと思うけど、>>189にはOOPの話と断りが入ってる。
OOPでのメッセージという用語はオブジェクト間のやりとりの総称なので、
メソッドの呼び出しなども当然に含まれる。俺はそういう理解で解答してる。
220:デフォルトの名無しさん
08/11/22 08:52:35
>>186
なんかりんごの皮をチェンソーで剥いてる様な気がするのは俺だけ?
221:デフォルトの名無しさん
08/11/22 10:57:03
そりゃ金の取れる芸のレベルだよ
222:デフォルトの名無しさん
08/11/22 10:58:45
正規表現コンポに金使えばいいのか
223:デフォルトの名無しさん
08/11/22 11:12:54
FreeMemにサイズを指定するメリットってあるんでしょうか?
Sizeが無指定だとちゃんと全部開放されないとかあるんでしょうか
224:デフォルトの名無しさん
08/11/22 16:37:35
Delphi6 Personal使ってます。
manifest適用時にTComboBoxのSelText、SelStart、SelLengthの値が
正しく取得できなくて困ってます。
Textに「あいうえお」と入力して「うえ」を選択したとき
SelText:
SelStart: 1
SelLength: 1
という結果が返ってきます。
半角だと問題ないのですが全角だとおかしくなります。
正しい値を取得するにはどうすればいいでしょうか?
225:デフォルトの名無しさん
08/11/22 17:31:56
Delphi 2007でも同様の結果になるようですね。
226:デフォルトの名無しさん
08/11/22 18:26:08
manifest適用しなければおk
227:デフォルトの名無しさん
08/11/23 12:04:15
ユニコード対応のD2009じゃね?
Tntは修正が不完全だけど、一応使えるレベルだと思う。
228:225
08/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:デフォルトの名無しさん
08/11/23 13:16:48
TNTって無料版の開発終わったよね
230:225
08/11/23 13:34:43
まーでも古い版はダウンロード可能だし。mh-nexusさんとことか。でもDelphi 6 Personalは別版が必要かも?
231:225
08/11/23 14:01:52
TNTは現在はTMSで売ってる。
URLリンク(www.tmssoftware.com)
個人なら30Euro(3600円くらい)。
232:デフォルトの名無しさん
08/11/23 15:08:16
有料版でも直ってないそうですね
まあ、英語圏の人は他言語IMEなんて使ってないだろうし
FastCodeの中の人なんて、LowerCaseのTable作りに
CharUpperBuff使っただけで、「Ansi」StringReplaceとか言っちゃってるしなぁ
233:デフォルトの名無しさん
08/11/23 15:10:37
いけね、UpcaseのTableだ
234:デフォルトの名無しさん
08/11/24 21:47:14
>>230
そのままだとコンポが足りないのでエラーが出るけど
ちょっと書き換えればD6Perでも動くよ
235:デフォルトの名無しさん
08/11/24 22:45:46
DBとBandアクチョン削ればOKだったかな
で、必要な人はsoft-gemsのThemeManager入れる、と
236:デフォルトの名無しさん
08/11/25 18:14:27
特待販売の葉書が来た。
久々にバージョンアップしてもいいかなぁと思ってるところ。
今C#を主に使用しているんだけど、Delphiならではのメリットっていうと、
VCLとネイティブコンパイルぐらい?
237:デフォルトの名無しさん
08/11/25 20:39:27
バージョンアップしなくても「Delphiならではのメリット」は変わらんだろ・・
238:デフォルトの名無しさん
08/11/25 22:22:05
昔、Delphi 7 では、デバッグでカーソルを変数に合わせるだけで値をインスペクトできた。
先日、Delphi 2006 を借りて使ってみたら、それができないじゃん。
新しい Delphi ではどうなっているのか知ってる人、どーか教えてくだしゃい。
239:デフォルトの名無しさん
08/11/25 22:40:42
>>236
おれんとこにも来たな、特待販売の葉書。
見たら会社名に「エンバカデロ・テクノロジーズ」って書いてある。
エン バカ デロ
は、日本じゃアウトだろフツー。
C++Builder でまともなプログラム組めたことなかったし、
Delphi 2005, Delphi 2006 も安定しなかったんでまともに使ってなかったし、
エン「バカ」デロ Delphi と C++Builder はマジで悩む。
240:デフォルトの名無しさん
08/11/25 22:42:04
えっ?できますよ?
241:デフォルトの名無しさん
08/11/25 22:50:35
>>239
うわぁ・・・
242:デフォルトの名無しさん
08/11/25 22:54:41
>>239
安定しなかったってどういうこと?
ちなみに、Delphi7で業務アプリ作ったけど、その時は割と安定してたけどな。
Delphiで気になるのは、ネイティブコンパイルと、VCLかな。
ビジュアルコンポーネントの使い勝手は優秀だと思った。
StringListとかObjectListなどの非ビジュアルコンポも優秀だけど、
いまじゃC#でもList<String>とかで代用できてしまうし、
コンポーネントもVCLライクに仕上がって遜色ない出来になってるしなぁという感じで悩む。
ま、.NETFrameworkがないと動作しないのは相変わらずなんだけど。
243:デフォルトの名無しさん
08/11/25 23:33:59
Delphi7は安定していたが、Delphi 2005は統合環境がなぜかフリーズしまくり。
Delphi 2006 はコードエディタな若干不安定で、箱形コピペなどすると、ずれ
てペーストされる。また、何もしなくとも、しばらくするとCPUを食うよ
うな処理が統合環境内部で起こる。そして、Delphi7より何か重たい。
また、>>238 のように、デバッグでカーソルを変数に合わせるだけで値を
インスペクトできない。(あれは便利だった!!!!)
これらの現象は、コードギアが提供したパッチを当ててもダメだったんだな。
そんで、今もDelphi7を使っているんだよな、おれ。
ただし、どこかにあったGoogleMap を組み込んだデモだけは、Delphi7では
コンパイルできなかったのでDelphi 2006 で試したらうまくいった。
ハーア、何かうまくゆかないもんだな。
244:デフォルトの名無しさん
08/11/25 23:38:21
>>240
>えっ?できますよ?
えっ?できるの?
245:デフォルトの名無しさん
08/11/25 23:46:46
>244
>238のことですよね?できますよ。もちろんローカル変数ウィンドウでも評価ウィンドウでも見られますけど、
変数にカーソルをあてるだけでインスペクションできるし、最近のものでは構造体のメンバやポインタの
示す先を追っていくこともできます。できないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?
246:デフォルトの名無しさん
08/11/25 23:47:58
× できないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?
○ Delphi5以降でできないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?
247:デフォルトの名無しさん
08/11/26 00:00:42
>>238 >>244
「メニュー」ツール → オプション
「オプションダイアログ」 エディタ設定 → 支援機能 → ツールチップ式評価 をチェックでOK
デバッグの機能なんだけど、「デバッガオプション」ではなく「エディタ設定」にあるのがミソ
248:デフォルトの名無しさん
08/11/26 12:33:02
IDEが不安定ってことなのか。
いつからかIDEが.NET上でしか動作しないようになったんかな。
若干、重いイメージは確かにあったけど。
ネイティブで動作させることを目的としなければ、VS2005移行で十分に
Delphi並のRAD環境になってるから、選択に難しいところではあるよね。
249:デフォルトの名無しさん
08/11/26 12:58:37
IDEは.Netだけど、コンパイルされるコードはネイティブ。
250:デフォルトの名無しさん
08/11/26 14:05:53
D2009はIDEはネイティブでそ?
ヘルプのために.NETがいるだけで
251:デフォルトの名無しさん
08/11/26 14:30:54
Delphiって算術シフトの演算子ってないの???
252:デフォルトの名無しさん
08/11/26 14:35:28
shlとshr
253:ななしへたぐらま ◆XcB18Bks.Y
08/11/26 17:34:36
>>251
ビットシフトこのとでしたら shl、shr で。
綴りで分かるかもしれませんがそれぞれ左シフト(SHift Left)と右シフト(SHift Right)。
254:ななしへたぐらま ◆XcB18Bks.Y
08/11/26 17:35:51
って一番下の252が見えてなかった…すいません
255:デフォルトの名無しさん
08/11/26 18:56:32
ファイルの先頭からあるバイト目からをMemoに読み込むにはどうしたらよいのでしょうか?
というのも、ファイルの先頭にいらない物が付いていてそのまま
256:デフォルトの名無しさん
08/11/26 18:59:58
途中送信してしまった・・・orz
ファイルの先頭からあるバイト目からをMemoに読み込むにはどうしたらよいのでしょうか?
というのも、ファイルの先頭にいらない物が付いていてそのまま
Memo1.Lines.LoadFromFile(Filename);
とやっても文字化け?して読めないんです。
でもその無駄なのを取り去ってやるとMemoに読み込めます。
257:デフォルトの名無しさん
08/11/26 19:14:15
>>256
それはウニコードだね
258:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/27 01:16:21
Delphi 2006でコンポーネントのインストールをしたい。
だが、「コンポーネントのインストール」がメニューから消えており、
HELPで「コンポーネントのインストール」を検索すると
『コンポーネントコンポーネントのインストール』
このダイアログボックスでは,コンポーネントを新規パッケージ
または既存のパッケージにインストールします。
とある。
いったい、どうやってダイアログボックスまでたどり着くのだろう?
どなたか教えて下され。
260:デフォルトの名無しさん
08/11/27 01:47:15
>>259
2006のヘルプを見ろよ
>すべてのコンポーネントはパッケージとして IDE にインストールされます。したがって,
>ユーザー自身がコンポーネントを作成するときには,まずそのコンポーネントを入れる
>パッケージを 作成してコンパイル する必要があります。コンポーネントのソースコードは,
>コンポーネント作成の概要 で説明されているモデルにしたがって記述する必要があります。
261:デフォルトの名無しさん
08/11/27 10:21:20
>>260
なるほど、Delphi2006は 「ファイル」メニュー から辿ってパッケージを作るようになってたんだ。
Delphi7では 「コンポーネント」メニュー からいきなり「コンポーネントのインストール」ができ、そこで
パッケージを新規に作成してたんで(これには)気付かなかった。Delphi2006のように
パッケージ・プロジェクトとして開発する方が、Delphi7のときよりも少しだけ楽だね。
助かった。ありがとうございました。
262:デフォルトの名無しさん
08/11/27 12:57:36
Turbo DelphiでFastMM4.90を利用しています。
デバッグ時にステップ実行していると、メモリの確保や解放時などFastMMのソースに飛ばされます。
これを無視したい(デバッガがFastMMのコードまで追わないようにしたい)のですが、どうすればいいのでしょうか。
263:262
08/11/27 13:03:36
とりあえず、コンパイラ指令の{$D-}をFastMMのソースに加えることで抑制しました。
264:デフォルトの名無しさん
08/11/27 13:33:23
ソースに飛べないようにすればいいじゃない
削除するなり移動するなり
265:デフォルトの名無しさん
08/11/28 12:38:27
>>264
そーすると、例外が起きるたびにソースを要求されるそーすよ。
266:デフォルトの名無しさん
08/11/29 13:19:11
そーすね
267:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/30 10:34:14
FastMMがいつの間にやら新しくなってたので落とそうと思ったらアカウントが必要になってたのね
そう思って登録しようとしても、必要事項書いてRegistration押してもその後何にも起こらん
どうすりゃいいの?メール来るのかと思ったら来ないし
269:デフォルトの名無しさん
08/11/30 10:38:09
とりあえずお前が英語苦手だってことは理解した
270:デフォルトの名無しさん
08/11/30 10:41:19
>>268
ダウンロードにパスなんて必要ないんだけど
271:デフォルトの名無しさん
08/11/30 10:41:46
パスじゃなかったアカウントだ
272:デフォルトの名無しさん
08/11/30 10:52:54
あれー?Download押すとトップページに飛ばされるから
そう思ってた。俺だけ?
273:デフォルトの名無しさん
08/11/30 10:58:33
URLリンク(sourceforge.net)→Download→FastMM 4.92→FastMM492.zipだろ?
どこで踏み外せばいいんだ
274:デフォルトの名無しさん
08/11/30 12:18:31
すぐ上で言ってるとおり、Downloadだよ
俺だけのようだ…会社でも家でも同じだったんだよなあ
なんでだろ
275:デフォルトの名無しさん
08/11/30 12:22:10
ブラウザのせいだったようだ
すまんです
276:デフォルトの名無しさん
08/11/30 12:26:34
どんな糞ブラウザ使ってんだよw
277:デフォルトの名無しさん
08/11/30 13:40:11
Turbo Delphiを使用しています。
ローカルバックアップの保持ファイル数の上限を増やすことはできるでしょうか?。
私の環境では、どうも100個くらいしか保持してくれないようです。
これを1000個くらいまで保持してくれれば、個人的にはだいぶ楽になるのです。
よろしくお願いします。
278:デフォルトの名無しさん
08/11/30 13:43:03
あまりそれでがんばらずに素直にバージョン管理システム使ったら。
TortoiseSVN + pdumpfsの組み合わせて使ってるけどソース紛失で泣く事はなくなったな。
279:デフォルトの名無しさん
08/11/30 14:02:22
>>278
どうも。
IDE標準の、変更のたびにバックアップが作成されるというのは、
利点でもあり弱点でもありますね。
トイレに行った後、レジストリの方も調べてみましたが、
BDS-4.0-Editor-OptionにあるFile Backup Levelというキーで、
上限を増やせるようです?(実際に増えるかは未確認)。
当座はこれでしの(げるならしの)ぎます。教えていただいたソフトウェアについても、
調べてみたいと思います。ありがとうございました。
280:デフォルトの名無しさん
08/11/30 22:00:56
かなりくだらない質問なんですが
皆さんbegin...endのbeginをどこにで書いてますか?
例えば
if hoge then
begin
hage;
end;
とか
if hoge then begin
hage;
end;
281:デフォルトの名無しさん
08/11/30 22:07:05
>280
俺は上派だな。elseがある場合は下みたいな感じ。
if hoge then
begin
end else if mage then
begin
end else
begin
end;
VCL内でも統一した書式はないと思う。
282:デフォルトの名無しさん
08/11/30 23:55:55
懐かしい議論だ。俺は下派。
283:デフォルトの名無しさん
08/11/30 23:58:51
使ってるモニタ次第
UXGAでちまちま詰める必要はないし
ノートで縦にだらだら書いてたら確実に生産性が低下する
284:デフォルトの名無しさん
08/12/01 00:02:59
モニタでいちいち書式かえたらよけい生産性が下がるわな・・
285:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/01 02:04:49
>>286 で書き忘れたけど、式の中の「文」は、単文でも複文でもいいと思ってくれ。
289:デフォルトの名無しさん
08/12/01 10:31:39
if 条件 then
begin
end
else if 条件 then
begin
end
else begin
end;
よくこういう議論を見かけるが、俺と同じやり方の奴って
見たこと無いんだよなー
290:デフォルトの名無しさん
08/12/01 10:32:54
お前は俺か
291:280
08/12/01 11:43:21
皆さんありがとうございます。
よくbegin...endの数が合わなくてエラー出てたもんで皆さんはどんな感じで書いているのか気になったんです。
教えていただいたものを色々試してみたいと思います。
とても参考になりました。どうもありがとうございました。
292:デフォルトの名無しさん
08/12/01 11:44:03
それはお前の頭が悪いww
293:デフォルトの名無しさん
08/12/01 12:02:36
でもさ、前々から思ってたんだけど、
ALT+[とかで対応する括弧は追えるのに
なんでbegin/endは追えないんだろ?
294:デフォルトの名無しさん
08/12/01 12:03:28
>>287
くだらねぇ、気持ち悪いルール使ってんじゃねぇよ。基本はdelphiならVCL、JavaならJavaのクラスライブラリ
のソースに合わせろよ。おまえらなみたいな奴のソースは見苦しくてかなわんわ。
295:デフォルトの名無しさん
08/12/01 12:43:40
こういうのが沸くからアンケートネタはWikiの投票pluginかなんかを使ってやってくれ
296:デフォルトの名無しさん
08/12/01 14:32:29
以下のように記述するのが正式だというのを海外のサイトで読んだことがある。
if 条件 then
文
else
if 条件 then
文
else
文;
if 条件 then
begin
文
end
else
begin
文
end;
文が短い場合は
if 条件 then 文 else 文;
って書いちゃうけどね。
297:デフォルトの名無しさん
08/12/01 15:08:49
書き方に正しいも糞もあるかよww
298:ななしへたぐらま ◆XcB18Bks.Y
08/12/01 16:29:02
>>286
QuickBASICやVisual Basicではまさにそんな感じの構文になっていて使いやすかったです。
>>293
C/C++の { } ほどの地獄ではないからかもしれません。
299:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/01 19:05:19
融通が利かない人はどんな職業でもいい発想ができない。
301:デフォルトの名無しさん
08/12/01 19:30:57
case ofのかっこいい書き方を教えれ
どうもelseだけしっくりこなかったりする
302:デフォルトの名無しさん
08/12/01 19:43:44
たしかにcase文はうざい
303:デフォルトの名無しさん
08/12/01 19:50:59
case n of
1:
foo;
2:
begin
bar;
end;
else
baz;
end;
304:デフォルトの名無しさん
08/12/01 20:13:24
case n of
1:
foo;
2:
begin
bar;
end;
else
baz;
end;
305:Delフサギコ ◆A6VzDeLphI
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/01 23:34:44
気持ち悪い
308:デフォルトの名無しさん
08/12/01 23:42:18
caseの中はcaseより引っ込める
ラベルの中身も引っ込める、begin-endの中も引っ込める
ラベルの後ろにbeginを書くと、対応するendもおなじインデントに書きたい
横に伸び~
309:デフォルトの名無しさん
08/12/01 23:43:14
case~endの間を字下げで解決。
310:デフォルトの名無しさん
08/12/01 23:44:53
typeのクラス宣言内のprivateなprocedureとか、自動生成で変なインデントを付けられた日にはもうー
311:デフォルトの名無しさん
08/12/01 23:47:30
record型のconstの配列の初期化の記述がめんどくさい
コンパイラサボりすぎ
312:デフォルトの名無しさん
08/12/01 23:51:10
>>308
おいらもおんなじ気持ちだけど、これやるとインデント深くなるんだよなあ。
だからおいらはインデントをスペース3文字分にしてるんだが、それでも深くなる。
これがインデントがスペース8文字分で表示された日にゃー目がぶっ飛ぶ。
313:デフォルトの名無しさん
08/12/02 08:08:53
え!Del党ってインデントはスペース2文字でしょ。
314:デフォルトの名無しさん
08/12/02 08:42:41
オレは2文字だな。
if ~ then begin
文
end else if ~ then begin
文
end;
case i of
1 : begin
文
end;
end;
315:デフォルトの名無しさん
08/12/02 08:51:14
caseとelseとendをそろえてる。
caseに関しては自動インデントを使わずなるべく詰める様にしている。
17インチCRTからの流れで横も縦も圧縮する様な書き方になってしまった。
ifなんかでも改行してbeginの方が見やすいのに。
316:デフォルトの名無しさん
08/12/02 09:22:53
>>305
ifが常に行頭だと、別のif分と区別がつきにくいから嫌だな
case分は無駄にインデントが増えるな
case hoge of
A:
begin
end;
B:
begin
end;
else
end;
これでやると、else内だけインデントがずれるのがむかつく
317:デフォルトの名無しさん
08/12/02 09:23:34
if分、じゃなくてif文だし、case分じゃなくてcase文
orz
318:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/02 11:05:18
秋田
320:デフォルトの名無しさん
08/12/02 11:07:07
>>318 の最初の例が崩れてたから訂正するね。
if a = b then begin
c:= 2;
........
(2ちゃんは左側の半角スペース取っちゃうんだよね.....。)
321:デフォルトの名無しさん
08/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
08/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:デフォルトの名無しさん
08/12/02 18:24:36
どうせソースの書き方なんて十人十色なんだからいい加減飽きろよ
324:デフォルトの名無しさん
08/12/02 18:26:21
新しい話題を提供しろよw
325:デフォルトの名無しさん
08/12/02 18:36:34
>324
「CodeGear RAD Studio 2009 日本語版」販売開始だって
326:デフォルトの名無しさん
08/12/02 21:47:10
delphiはなかなか良い言語だとは思うけど
C++ライクに記述できるような仕組みがあれば、いいなぁ。
あと、delphiにC++を埋め込めるようにできれば、なおよし。
begin~endはうざい。
あと、function/procedureと区別する意味がわからん。
C++歴5年、delphi歴3ヶ月より。
327:デフォルトの名無しさん
08/12/02 21:52:56
C++に、Pascalライクに記述できたらいいなあ。
なんて言われたら、ウザッとか思わない?
328:デフォルトの名無しさん
08/12/02 21:55:28
DLLとかC++ Builderとか使えば出来るけどね
329:デフォルトの名無しさん
08/12/02 21:55:43
>>327 そんな需要はないから。
delphiでC++ライクに使えれば、ポインタ使いまくれるし
C++脳の人間にとっては、とても楽。
330:デフォルトの名無しさん
08/12/02 21:56:14
でもちょっと違うか
331:デフォルトの名無しさん
08/12/02 21:56:52
>>329
それは工夫が足りないんじゃね?
332:デフォルトの名無しさん
08/12/02 21:59:10
C++記述するときにはいつも
「もっとDelphiライクなら・・・」
って思っちゃう俺はアホなのかもしれん^^;
333:デフォルトの名無しさん
08/12/02 22:00:59
じゃあおまいらどんな記述がいいのよ
334:デフォルトの名無しさん
08/12/02 22:21:56
教えてください。
既存のプロジェクトなのですが、DataModuleのSession,Aliasのアイコンが半透明に
なっています。
実行するとデータベースに接続するところで異常終了します。
つなげるべきデータベースはわかっているのですが、どのように設定したらよいので
しょうか。
335:デフォルトの名無しさん
08/12/02 22:28:21
Pythonが綺麗って言われてるよね。
Delphiと似てるからすぐに使えるようになるよ。
336:デフォルトの名無しさん
08/12/02 22:28:27
begin
end
が
{
}
ならDelphiが無敵
337:デフォルトの名無しさん
08/12/02 22:34:17
if True then {
MessageBox(Handle, 'test', 'test', MB_OK);
};
こうですか分かりません><
338:デフォルトの名無しさん
08/12/02 23:07:14
むしろBegin~endの方が俺は見やすくて好きw
変態ですので
339:デフォルトの名無しさん
08/12/02 23:10:48
Begin~endよりbegin~endのがよっぽど見やすい
340:デフォルトの名無しさん
08/12/02 23:48:59
細かいやつって嫌われるよな
341:デフォルトの名無しさん
08/12/02 23:58:26
C++のコードは見づらい
342:デフォルトの名無しさん
08/12/03 00:01:42
>>340
C++は嫌われて無いじゃないですか
343:デフォルトの名無しさん
08/12/03 00:38:28
CoolBarの行を1行固定にしたいんだけどどうすればいいの?
アイコンバンド1、アイコンバンド2、検索窓の3つ設置。
実行してCoolBandを弄ってると必ず2行目が出来てしまう。
344:デフォルトの名無しさん
08/12/03 00:42:07
C++ の :: と -> がウザイ。
345:デフォルトの名無しさん
08/12/03 01:02:04
俺も
346:デフォルトの名無しさん
08/12/03 11:57:27
フォーム上の末代までのコントロール数をカウントする方法ってあります?
347:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/03 15:51:56
教えてください。
Nscripterで集積エフェクトを使いたいのですが,
lsp 0,"****.jpg",208,32
print 99,3000,"breakup.dll/ulP"
これだと左,中央,右の指定ができず困っています。
どうしたらいいですか?
349:ななしへたぐらま ◆XcB18Bks.Y
08/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:デフォルトの名無しさん
08/12/03 21:11:09
そういえば昔、SQL Anywhere というデータベースを使ったことがあったが、
そのストアードプロシジャーは if文が
if 条件 then 文1 else 文2 end
という構文で、文1と文2は単文でも複文でも begin end が不要だったな。
ありゃあ見やすいし、書きやすかった。
begin end や { } なんて過去の遺物、消え去るよ。
351:デフォルトの名無しさん
08/12/03 21:19:41
graphics32ってMPL1.1ですけど、改造しないで普通に使用して公開する場合は
ソースを公開する必要はないと聞きますけど
ここの URLリンク(ja.wikipedia.org)
特徴のところで
バイナリ形式で配布する場合には、ソースをバイナリと一緒に公開しないと
いけないみたいな事かいてるんですけどどっちが本当ですか?
352:デフォルトの名無しさん
08/12/03 21:39:55
>>349
どれのことだ
URLリンク(ja.wikipedia.org)
CPB
* ビルマ共産党
* キャンベル・スープ・カンパニーのNYSEコード。
* 公共放送機構 (Corporation for Public Broadcasting)
* セントラル・パシフィック・バンク
353:デフォルトの名無しさん
08/12/03 21:57:27
BCBだな
354:デフォルトの名無しさん
08/12/03 22:42:57
>>351
Delphi持ってるならGLSceneを使え
スレリンク(tech板)
の 25 辺りから見るとよいよー
355:351
08/12/04 04:45:25
>>354
やっぱりソースは公開しなくても良いんですね
おかげでスッキリしました、ありがとうございます
356:ななしへたぐらま ◆XcB18Bks.Y
08/12/04 16:30:30
すいません、思いっきり略称間違えました… orz
357:デフォルトの名無しさん
08/12/05 02:03:30
onKeyDown や onKeyPress などを使って、
『キーの同時押し』を検知する方法ってありますか?
たとえばAlt + Tab を検知するなど。
358:デフォルトの名無しさん
08/12/05 02:36:22
Downならif Shift = [ssAlt] thenで
359:デフォルトの名無しさん
08/12/05 18:41:49
GetAsyncKeyStateはだめ?
360:デフォルトの名無しさん
08/12/06 00:02:20
同時押しの検出ならGetKeyStateかShiftパラメータでは?
361:デフォルトの名無しさん
08/12/06 09:00:10
Del7+Win2000
フォームを半透過指定してフォーム上のコンポーネントは非透過ってのは可能?
Transparentみたいな色指定透過っぽい感じ
362:デフォルトの名無しさん
08/12/06 10:45:21
Pascal を C++ っぽくしろって、
日本語は英語と同じ文法にしろっていうような門やん
363:デフォルトの名無しさん
08/12/06 15:16:53
>>362
Begin...Endの事?
そうは思わないな…
日本語だって英語の良いところはカタカナという形で吸収するんだから
コメントと文法くくりはBegin、{両方サポートしてくれたら私もうれしいな。
でもそうなると過去のソースが動かなくなるわけで、そこまでして言語仕様を拡張することには反対
結果として{は無理だと思うけど。
コンパイラ指令で切り分けできたら面白いすね、デフォルトはOFFで。
364:デフォルトの名無しさん
08/12/06 15:45:26
TEditの枠線の色を赤色に変えるにはどうしたらいいでしょうか?
よろしくお願いします。
365:デフォルトの名無しさん
08/12/06 15:51:45
OSの管轄なので無理
あるいはオナニードロドロ
366:364
08/12/06 15:58:30
早速回答ありがとうございます。
ちょっと変えてくれと言われたんだけど厳しそうだし、
見た目の問題だけなのでそのまま放置しますw
367:デフォルトの名無しさん
08/12/06 16:00:53
>>364
一回り大きいPanelに乗せてPanelの色を変える
368:デフォルトの名無しさん
08/12/06 16:12:37
>>366
ならそいつにVSでも変えてろハゲとでも言ってればいい希ガス
369:デフォルトの名無しさん
08/12/06 19:18:45
Delphi2006でヘルプを使いDelphi終了すると、タスクにdexplore.exeが残り、
再びDelphi2006起動してヘルプを使いDelphi終了すると、タスクにdexplore.exeが2つ残り、
とドンドンdexplore.exeがタスクに増えて行きます。(OSはXPです)
これって、メモリーけっこう食ってますが、Delphiのバグでしょうか?
370:デフォルトの名無しさん
08/12/06 21:16:21
dexplorerのバグでしょう、きっと。
371:デフォルトの名無しさん
08/12/07 09:41:05
VS だとそんなことないから Delphi のIDEのバグじゃないの?
372:デフォルトの名無しさん
08/12/07 11:49:41
食わせてるデータがまずいからだとは思うんだけど、それで逝っちゃうようなのはやっぱりバグだと思うんだ。
DelphiのIDEはDExplorerをキックしてるだけだしね。ちなみにXPで発現することが多いみたい。
373:デフォルトの名無しさん
08/12/07 16:17:50
Borland Developer Studio 2006 (Professional)をデフォ状態でDelphi使うと
ヘルプにC++の内容まで検索されてウザイ。
C++の内容が検索されなくなる設定ができるかどうか調べても未だに分からない。
どなたかHELP!
374:デフォルトの名無しさん
08/12/07 19:34:12
それが円馬鹿クオリテー
375:デフォルトの名無しさん
08/12/08 02:15:33
フィルタ条件ではあかんのか
376:デフォルトの名無しさん
08/12/08 09:20:16
6とかだとヘルプファイルの検索対象の範囲とか設定できるんだけどねぇ‥‥
CLXのヘルプ外したりとか。
377:デフォルトの名無しさん
08/12/08 11:59:47
ヘルプはひどいな
リンクも不十分だし、欲しい情報になかなかとべん
378:ななしへたぐらま ◆XcB18Bks.Y
08/12/08 17:35:10
旧ボーランド時代からヘルプは良くなかったですねぇ。
初代Delphiの頃はまだ良かったのですが…
>>367
さらにEditを枠無しにしたら完璧ですね。
379:デフォルトの名無しさん
08/12/09 16:44:35
>>378
やってみたけど枠を消すと文字がずれて、枠有りの状態のようにはいかなかった。
380:ななしへたぐらま ◆XcB18Bks.Y
08/12/09 17:47:19
確かにうまくいきませんでした。
赤パネル
Editと同じ色のパネル
Edit
の三段重ねでEditの位置を調整してなんとかそれらしく?なりましたがなかなか骨の折れる作業です。
複数貼り付けるならアンカーを使ったり赤パネルの代わりに赤フレームにすると作業効率は多少ましになるかもしれませんが
AutoSizeが利かなくなるのかフォントサイズを変えてもウィンドウサイズが変わらないのはつらいですね。
381:デフォルトの名無しさん
08/12/09 18:32:27
そんなことするよりTCustomEdit継承して新しく作った方が楽じゃない?
382:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/09 21:23:34
TEdit も TDateTimePicker もウィンドウズのコントロールだから、その機能は
本質的には Delphi と関係ない。MSDN 読むほうがいい。 >>381 は馬鹿回答。
384:382
08/12/09 21:49:28
>>383
そうでしたかぁ。
ありがとうございました。
385:デフォルトの名無しさん
08/12/10 00:48:07
>382
Timeプロパティに何が入ってるか確認したほうがよいかも。
386:デフォルトの名無しさん
08/12/10 08:21:07
>>373
俺も2006でDelphiだけが表示される正式なヤリ方がしりたい。
前にどこかを見てやったときは、ヘルプのアプリ?がバグバグで
設定したのに設定したことにならなかったり嫌になった覚えがあるな。
しかし、どうやって設定したか憶えてなくて困る。
Delphiヘルプのみってのが確かできたはずなんだが。
6の時はテキスト弄るだけで簡単だったけどな。
387:382
08/12/10 13:20:42
>>385
Timeプロパティを00:00:00にしたら正しく動きました!
ありがとうございました!
388:デフォルトの名無しさん
08/12/11 00:17:14
TEditの枠のありなしでサイズが変わるのはVCL内で実装されているから、
継承してサイズが変わらないようにすればおk
それ以前にコントロールは自分でも描画できるから、簡単に枠を描画することが可能
↓にサンプルがある
URLリンク(www.delphipages.com)
VCLはただWindowsコントロールをラップしてるだけでなく独自のコードも追加してるし、
>>383はかなり見当違いの回答なので初心者は参考にしないようにね
389:デフォルトの名無しさん
08/12/11 00:22:03
2006ではDelphi以外のHELPも(親切に)表示するのが仕様ということでハイ {{{{(+_+)}}}}。
(アーーーーめんどくさい)
しかし、こんな簡単なことがデフォでできてないなんて、何なのこの会社?
390:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/11 00:44:39
宿題でダイヤモンドパターンのプログラムがあるのですが教えてください!!!!
392:デフォルトの名無しさん
08/12/11 00:45:27
couの初期値って何なの?
393:デフォルトの名無しさん
08/12/11 03:01:18
>>388 そうなんですか。それで変な動作をするんですね・・ TEdit くらい単純なラッパーの方がいいのに。
394:386
08/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
08/12/11 10:06:04
根本的に削除する方法みつけた。これでいけるんじゃね?
ヘルプを登録しなおすには:某所:So-net blog
URLリンク(bousyo.blog.so-net.ne.jp)
某所 - C++Builder のヘルプを削除するには
URLリンク(bousyo.blog45.fc2.com)
396:386
08/12/11 10:08:25
ああ、やべえ、 >>394 はやらん方がいいわw
(フィルタなし) に Saveすると、以下の様にでて元に戻せなくなるわw
---------------------------
Windows Internet Explorer
---------------------------
Filter cannot be saved without a definition
---------------------------
OK
---------------------------
欠陥ヘルプww
397:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/11 10:39:17
>>397
念のため編集前に mergeWin32.xml はバックアップを取っておいた方がよいです
400:デフォルトの名無しさん
08/12/11 12:52:35
>>394-399
サンキューベリーマッチ! m(_ _)m
401:390
08/12/11 13:28:48
>>392さん
初期値は設定していません。設定しないとうまくいかないんでしょうか?
引き続きご回答いただければ幸いです。よろしくお願いします
402:デフォルトの名無しさん
08/12/11 13:33:07
cou:=cou+1;
の行にBreakPointを置いて、実行。
止まったときのcouの値は?
cou:=0;
で初期化しないとだめじゃないの?
自動で0にしてくれたっけ?
403:390
08/12/11 13:57:43
>>402さん
cou:=0;で設定し、ブレークポイント置いて実行してみました
couは1で止まってしまっているみたいです…
404:デフォルトの名無しさん
08/12/11 14:22:02
ランダムに再生の前に、普通に再生は出来るの?
video: array[1..9]of Integer に適当に数値を入れて、再生させると再生できるの?
それとも、それでも再生できないの?
ランダムの部分がいけないのか、再生部分がいけないのかの切り分けはしましたか?
405:ななしへたぐらま ◆XcB18Bks.Y
08/12/11 14:41:32
>>402
ローカル変数は初期化されません(0にしてくれません)。
だから自分で初期値として0を代入しなければなりません。
ちなみにグローバル変数は初期化されます(0にしてくれます)。
たまたま0になっているときもありますがこれを当て込んではいけません。
406:390
08/12/11 14:42:17
>>404さん
ボタンを押しても何も起きません。読み込みもしてくれなくてうんともすんともです
再生部は問題ないようです。前半部のランダムの部分が良くないようです
説明不足な点が多くすみません
407:デフォルトの名無しさん
08/12/11 14:50:19
この板の上の方にBINGOの問題があって、
そこで同じようにランダムに数値を並べる例が出てるから、みて見れば?
その例にそってvideo[1..9]にちゃんとランダムに数値を入れるところまで、
頑張ってみようよ。
408:デフォルトの名無しさん
08/12/11 16:18:31
Del7でバックグラウンド、最小化状態のウィンドウを
フォアくグラウンドに持ってきたくて
URLリンク(www.swissdelphicenter.ch)
のコードを組み込んでみたところ
バックグラウンドからは成功したものの
最小化状態からはフォアグラウンド化できません。
どうやればいいんでしょうか。
409:デフォルトの名無しさん
08/12/11 22:52:35
マウスのホイールをフックしたいのですがホイールの上下を感知することってできるのでしょうか?
410:デフォルトの名無しさん
08/12/11 23:00:56
すみません
wParamを見ればいいことがわかりました
お騒がせしました
411:デフォルトの名無しさん
08/12/13 03:08:36
var a: array[0..10] of Byte;
みたいな感じで定義した配列に、@a[0]を対象にMoveMemoryとかをやっても大丈夫なんですか?
配列はメモリ上で常に連続しているものなんですか?
Cardinal型とByte型の配列を相互に入れ替えるとき、Moveは面倒くさくて
412:デフォルトの名無しさん
08/12/13 03:40:11
連続して無いとFileName: array[0..MAX_PATH] of Char;とか使えなくなる
ので連続してるだろう
413:デフォルトの名無しさん
08/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の続き
08/12/13 18:42:22
和の値(小数点以下3桁目を四捨五入する)
平均の値(小数点以下3桁目を四捨五入する)
二乗和の値(小数点以下3桁目を四捨五入する)
も是非是非お願いします!!!!
415:デフォルトの名無しさん
08/12/13 18:44:36
これぐらい分からないとしょうがないぞ
0
0
for
do
begin
i
i*i
200
s
ss
416:デフォルトの名無しさん
08/12/13 18:46:11
おれも出来てなかった
417:デフォルトの名無しさん
08/12/13 18:47:08
自力で解く気ゼロだな
418:デフォルトの名無しさん
08/12/13 18:54:21
5にrandomize入れてしまったw
4はdo beginで
419:390
08/12/13 22:00:35
>>407さん
いろいろとアドバイスいただきありがとうございました。お礼が遅くなり申し訳ありません
420:デフォルトの名無しさん
08/12/13 22:34:48
>>413
宿題スレはこちら
Pascalの宿題は俺にやらせろ!!Part2
スレリンク(tech板)
421:デフォルトの名無しさん
08/12/13 23:40:05
宿題を丸投げする413が教授に怒られますように
ニヤニヤ
422:デフォルトの名無しさん
08/12/13 23:44:44
大学でDelphi習うところあるんだね
423:デフォルトの名無しさん
08/12/14 00:05:58
どっちかというとDelphiというよりはPascalだろーけどな
424:デフォルトの名無しさん
08/12/14 00:09:20
Delphi2006でファイルメニューの「開き直す」を選んだとき、過去のプロジェクトがたった4件しか表示されません。
これだと、ちょっと別のプロジェクトをいじっていると肝心のプロジェクトが表示されなくなったりして面倒です。
そこで「開き直す」プロジェクト数を増やそうと思ってオプションを見ましたが、該当するパラメータが見つかりませんでした。
このようなプロジェクト数を増やす設定は可能でしょうか。
425:デフォルトの名無しさん
08/12/14 01:53:01
>>424
それは俺も不便に思ってる。
スタートページも確かパス表示なしな上に、
プロジェクトの履歴少ないよな
426:デフォルトの名無しさん
08/12/14 04:33:00
>>424
プロジェクトのショートカットをデスクトップにでも作っておけ
427:デフォルトの名無しさん
08/12/14 06:18:44
ショートカットだと、もう一個IDEが起動する(´・ω・`)ショボーン
428:デフォルトの名無しさん
08/12/14 11:26:28
Delphi2006なら
HKEY_CURRENT_USER\Software\Borland\BDS\4.0\Closed Projects
を書き換えるだけのソフトを作っておけばいい
コマンドラインにプロジェクトファイルをくっつけて
429:デフォルトの名無しさん
08/12/14 11:42:52
それって簡単?
430:デフォルトの名無しさん
08/12/14 11:45:35
簡単かどうか試せばいいんじゃね?
431:デフォルトの名無しさん
08/12/14 12:04:00
ActiveProjectsとかいうフォルダにショートカット作っておいて
タスクバー右クリツールバーの登録で指定して
>>から起動したいファイルをIDEにドラッグドロップすれば開けるんじゃね。
432:デフォルトの名無しさん
08/12/14 12:41:52
>>430
やってみたけどIDE起動してると効かないみたい。そしてIDE終了さ
せるときエラーになる。
IDE起動してない状態で書き換え、IDE起動させれば確かに効くけど、
IDEの再起動が面倒かな。
433:デフォルトの名無しさん
08/12/14 13:18:43
>>431
やってみた。
ショートカットだと .lnk ファイルが開かれるだけ。
実プロジェクトファイルだと、現行プロジェクトを非アクティブにしてプロジェクトグループに追加される。
しかし、元々関係ないプロジェクト同士でプロジェクトグループにすると、どのユニットが何がなんだか分か
らなくなる。
434:デフォルトの名無しさん
08/12/15 08:39:54
いくつものスレッドでメインスレッドにある一つの配列をいじくる場合って衝突する危険性があると思います
どうやって衝突を回避するんですか?
435:デフォルトの名無しさん
08/12/15 08:50:37
>>434
補足です
その共通に使う配列は構造体の配列でaddしたりDeleteしたりする関数を呼ぶ事で操作しています
スレッドから操作関数をよぶときにどこかが呼んでいる時は待つ、みたいなことができればいいと考えています
どうすればそういうことができるのでしょうか?
436:デフォルトの名無しさん
08/12/15 09:40:13
mutexやCriticalSectionで衝突する可能性のあるコードを保護する。
TCriticalSectionでも使っとけ。
437:デフォルトの名無しさん
08/12/15 12:17:00
下記スレッドの説明から
異なるスレッドが所有する VCL または CLX のメソッド/関数/
プロパティを別のスレッドの中から扱う場合、排他処理の問題が
発生します。
メインスレッドの所有するオブジェクトに対しては Synchronize
メソッドを使う事ができます。他のオブジェクトを参照するため
のメソッドをスレッドクラスに追加し、Synchronize メソッドの
引数として渡します。
438:デフォルトの名無しさん
08/12/15 13:43:44
>>434 >>437
玄人ではありませんし、add,deleteの頻度にもよりますが、add,deleteが1秒内に何十回も発生するなら
そのたびにSynchronizeを多用するとスレッド化のメリットが失われますのでいかがなものかと思います。
その場合、私なら全配列を丸々コピーしてスレッド内処理後、Synchronizeもしくはterminate後に元にコピーします。
当然、メモリー効率は犠牲にします。
低頻度ならそのたびにSynchronizeで良いのでは?
439:デフォルトの名無しさん
08/12/15 14:04:42
>>438
>434
>いくつものスレッドでメインスレッドにある一つの配列をいじくる場合
ということなので、各スレッドがコピーして保持し処理後にリストアするならばスレッドにする必要が無いと思う
>Synchronizeを多用するとスレッド化のメリットが失われます
メリットはまさに衝突回避なのだと思うけど、ここで頻度については議論の外でいいのでは?
まー後は434さんが実装して確認するのがはやいわな
440:ななしへたぐらま ◆XcB18Bks.Y
08/12/16 01:20:02
>>411
亀ですが、言語仕様では
「静的配列はその配列の要素型の連続した変数の並びとして格納されます」
とあります。
わかりにくいのですが「連続した変数の並び」ということなので
連続して並んでいることを保証していると考えて良いと思います。
441:デフォルトの名無しさん
08/12/16 04:00:12
動的配列は連続してないかも、ってそんなことあるかいな・・
442:デフォルトの名無しさん
08/12/16 09:53:45
動的配列はポインタ1個だから、1つのメモリブロックしか扱えない。
だから連続してないってことはありえない。
443:デフォルトの名無しさん
08/12/16 10:44:42
初期化にFillCharルーチンなんぞを使ってるけど、動的配列や静的配列が
どんなに大きくてもここ数年まったく問題なく動いていますんで、間違い
なく連続してると思いますヨ。
444:デフォルトの名無しさん
08/12/16 18:16:34
case文のelseはbegin,endでくくらなくてもOK?
case i of
1: aa;
2: bb;
else
cc1;
cc2;
end;
445:デフォルトの名無しさん
08/12/16 18:21:38
ok
446:ななしへたぐらま ◆XcB18Bks.Y
08/12/16 19:42:58
し、知りませんでした… orz
Delphi 4とDelphi 5の言語ガイド「case文」の項を見るとひとつの文しか記述出来ないような文面なのですが
Turbo Delphi Explorerのヘルプ「宣言と文」の項を見ると複数の文を記述できるという内容が書いてありました。
しかし試してみたところDelphi 5とTurbo Delphi Explorerの両方でコンパイルが通ってかつすべての文が実行されるのを確認しました。
case 文の else 以降にbegin~endを付けなくて良いとなるとコードもかなりすっきりしそうですね。
447:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/12/16 20:30:33
俺も知らなかった
でもcase文ってそんなに使わないよねってか使えないよねcase文って
449:デフォルトの名無しさん
08/12/16 20:38:12
縁の下の力持ちってとこだろう
450:ななしへたぐらま ◆XcB18Bks.Y
08/12/16 20:58:11
>>447
私がVCLのソースを参考にしたものはこんな感じです:
・TStringsとその派生クラス
・TCollection/TCollectionItemとそ(ry
・Resultをループ変数に使う
>>448
( ))))))))))))
//(;;;`∀´;;;) 使うんだな、それが!
/ \
__| | | |___
||\  ̄ ̄ ̄ ̄
|| \ -●-●
451:デフォルトの名無しさん
08/12/16 21:28:59
case文使わなかったら、if then地獄になるじゃん
452:デフォルトの名無しさん
08/12/16 21:42:49
相変わらずドキュメントがだめだなぁ
453:デフォルトの名無しさん
08/12/16 21:51:30
ならWikiか何かで強力なドキュメント作っておくれよ
454:デフォルトの名無しさん
08/12/16 22:46:44
何かでcase文よりIF文の方が早いって見てから、ずっとifelse羅列してる俺がいる。
455:デフォルトの名無しさん
08/12/16 22:56:55
どう考えても逆w
5万で組んだマシンがあまりにも速すぎてゲーム以外では持て余し気味で
もうプロファイルも取らずに局所的な高速化を試みることもなくなったな。
456:デフォルトの名無しさん
08/12/16 22:57:32
そんな超微量な時間のために可読性を捨てるのもちょっとな
457:デフォルトの名無しさん
08/12/16 23:44:29
多態を使えばcaseの出番は減る。
多重なwithはスコープを不明確にするので控えめがお勧め。
458:デフォルトの名無しさん
08/12/17 00:03:35
withって読みづらいからいらない
459:デフォルトの名無しさん
08/12/17 00:49:01
case sender of
btn1 : ~;
btn2 : ~;
btn3 : ~;
end;
とかいつかは出来るようになると思って早・・・3.0からかな。
まぁ無理なんだけどね。なんかcase文って惜しいイメージ。
勿論多用する派。
460:デフォルトの名無しさん
08/12/17 01:42:08
他の方法で
461:デフォルトの名無しさん
08/12/17 02:56:24
case TButton(Sender).Tag of
1 : ~;
2 : ~;
3 : ~;
end;
で済ますかな自分なら。
462:デフォルトの名無しさん
08/12/17 09:21:06
ヘルプ「宣言と文」を見てみたらひでえな。
コードが読みづらいし、間違ったセミコロン付いてるし。
463:デフォルトの名無しさん
08/12/17 10:28:34
リストに格納した構造体のポインタを使う時なんかは、
いちいちキャストしなきゃならないのがうっとうしいからWith使うなぁ
464:デフォルトの名無しさん
08/12/17 10:34:09
>>462
elseやendの前のセミコロンのことか?
それだったらずっと以前に拡張になったことと記憶してるが。
465:デフォルトの名無しさん
08/12/17 10:49:03
いつからif文のelseの直前にセミコロン付けても良くなったんだ??