くだすれDelphi(超初心者用)その48at TECH
くだすれDelphi(超初心者用)その48 - 暇つぶし2ch2:デフォルトの名無しさん
08/11/03 00:52:24
<関連スレ>
【Delphi】 Indyコンポーネント 【C++Builder】
スレリンク(tech板)
Delphi初心者のための寺子屋
スレリンク(tech板)
delphiで作った有名ソフトって何があるの?
スレリンク(tech板)
Delphi持ってるならGLSceneを使え
スレリンク(tech板)
【Delphi互換!?】FreePascal【GPL】
スレリンク(tech板)

【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
スレリンク(gamedev板)
Delphiでアクションゲームが作りたい!! Part2
スレリンク(gamedev板)
ネットワークゲーム作成のお勉強(Delphi専用スレ)
スレリンク(gamedev板)
delphiでMMO
スレリンク(gamedev板)

3:デフォルトの名無しさん
08/11/03 03:39:45
おう

4:デフォルトの名無しさん
08/11/03 04:41:51
デルッピィ

5:デフォルトの名無しさん
08/11/03 04:57:56
Delphiがんばれ、というか、Borlandがんばれw
昔のUIがDelphi、処理がCとか懐かしいな・・
お、1.0のディスクが出てきた。。。

6:デフォルトの名無しさん
08/11/03 07:43:12
Borlandは星になりましたが?

7:デフォルトの名無しさん
08/11/03 10:03:17
case文でhresultの値を扱おうとすると$80000000で警告が発生します。
hresultは本来、$00000000~$FFFFFFFFまで取り得ると思うのですが
なぜ、"範囲を超えました"となるのでしょうか?

//ケース1
case hresult(0) OF
$7fffffff:;
end;

//ケース2
case hresult(0) OF
$80000000:;
end;
//[警告] Unit1.pas(33): 定数式が範囲を越えました

8:デフォルトの名無しさん
08/11/03 10:27:13
HRESULTはSystem.pasでtype Longint;と定義されてるが?

9:デフォルトの名無しさん
08/11/03 17:22:40
無料の某6使ってるけど
アクションマネージャってなに?アクションリストとは全然違うの?

10:デフォルトの名無しさん
08/11/03 17:32:27
つヘルプ

11: ◆XcB18Bks.Y
08/11/03 17:39:41
>>1
乙であります。


12:デフォルトの名無しさん
08/11/03 17:46:20
>>10
ごめんヘルプ見ても理解不能
アクションバンドとか出てきたし
3行でいいから特徴をおせーてプリーズ

13:デフォルトの名無しさん
08/11/03 17:59:27
>>12
タイトル見ようぜ
> 新しいアクション機能(Professional 版および Enterprise 版)

14:デフォルトの名無しさん
08/11/03 18:42:41
>>13
それはわかっとる
Personalで使えないからどんなもんか知る術がない

15:デフォルトの名無しさん
08/11/03 18:43:20
>>13
それはわかっとる
Personalで使えないからどんなもんか知る術がない

16:デフォルトの名無しさん
08/11/03 18:44:17
どうあがいても使えないものを必死に使いこなそうとする男の人って・・・

17:デフォルトの名無しさん
08/11/03 18:46:56
いや使えないことはわかっとるがな
どんなもんかちょっと聞いてみただけやがな
ちょっと3行で教えてーなプリーズ?

18:デフォルトの名無しさん
08/11/03 22:47:07
>>9
Office2000形式のメニューとか作れるんじゃなかったか。
Actionをドラッグ&ドロップして。

19:デフォルトの名無しさん
08/11/03 22:51:52
>>5
昔はCで書かれてたのかぁ
無料のTurboDelphiインストールしようとしたら、.NetとかJ#とかMSですら使ってない
ような物を入れさせられて嫌だったなぁw
ちゃんと全部Delphiで書いて貰いたいものだ

20:デフォルトの名無しさん
08/11/03 22:54:36
>>19
> 昔はCで書かれてたのかぁ

Delphiは最初からDelphi製でしょ。

> 無料のTurboDelphiインストール

今はそうでも無いよ。

21:デフォルトの名無しさん
08/11/03 22:56:42
「今は」ってどういう意味?
Delphi2009が.NETいらなくなってってこと?
それがどうTurboDelphiに掛かってるのか良く分からない

22:デフォルトの名無しさん
08/11/03 22:58:35
>>20
あ、そういう事ね
自分でアプリ作るときにUIだけDelで作って、処理はCで書いてたって意味かな?

23:デフォルトの名無しさん
08/11/03 23:02:50
>>17
使った事ないんであれだけど、動的UI作れるんじゃないのかな?
D&Dでメニューやツールバーを動的に構築できるとかいう話かなと、わからんけど

24:デフォルトの名無しさん
08/11/03 23:16:02
>>21
> Delphi2009が.NETいらなくなってってこと?

.NET SDKはほぼ100%要らない。
ヘルプビューワーのみ。ドキュメントのインストールも無し。
.NET ランタイムは要る。

25:デフォルトの名無しさん
08/11/03 23:32:52
>>24
で、「無料」のTurboDelphiへの批判レスにはそれが妥当だと思ったわけだね

26:デフォルトの名無しさん
08/11/04 00:08:27
話しかみ合ってる?

27:ななしへたぐらま ◆XcB18Bks.Y
08/11/04 17:45:15
データベースに関する質問です。
画像を格納できるテーブルを作成・編集するアプリを開発中なのですが
クライアントの要望で音声も格納できるようにしようとしています。

しかし音声にはDBImageコンポみたいなコンポがありません。
ググってもTorryをみてもそれっぽいコンポを見つけらなかったのですが
何か良いコンポはありますでしょうか。


28:デフォルトの名無しさん
08/11/04 19:49:25
バイナリーで保存するんじゃねーの。

29:ななしへたぐらま ◆XcB18Bks.Y
08/11/04 21:42:32
やはり自前で実装ですかね。
DBWaveコンポ(仮称)つくってみます。


30:デフォルトの名無しさん
08/11/04 23:54:23
SQliteでバイナリも保存できるんじゃね?

31:デフォルトの名無しさん
08/11/05 16:24:46
>>27はDB awareなコンポーネントないか聞いてるのにバイナリだの
なんだの見当違いなこと言ってる秋の夕暮れ


32:デフォルトの名無しさん
08/11/05 22:47:04
「じゃね」使いはアホ。

33:デフォルトの名無しさん
08/11/06 06:03:05
俺Jane使ってるよ
使いやすくてオススメ!

34:デフォルトの名無しさん
08/11/06 10:42:06
既存のデータの入ってる実際に使っているテーブルに
新たにフィールドを追加する必要がでてきました。
TTableで

フィールドA
フィールドB

があるテーブルに
「フィールドCがなければフィールドCを追加」
という処理をしたいんですがどのようにすればいいんでしょうか?

TQueryのSQLを使ってALTER TABLE ... ADD ...すればフィールドは追加できますが「フィールドCがなければ」という処理をどう書いていいかわかりません。
Table.FindField('フィールドC') = nil
で調べれるのかとも思ったのですが、これはTFieldがあるかどうかを調べるだけで、データベース内にフィールドがあるかまでは調べてくれません。

いったんテーブルを削除して作り直せば簡単には出来ますが
レコードは残したままでやりたいのです。
何かいい方法はありますでしょうか?

35:デフォルトの名無しさん
08/11/06 11:44:59
TableXXX.FieldDefs.IndexOf('フィールドC') < 0

36:デフォルトの名無しさん
08/11/06 12:13:11
引継ぎもなく、古いDelphiの修正しろといわれたのですが、
実行してみようとすると
wwDataInspector, wwrcdpnl, wwdblook,TwwDBLookupCombo
などがないと言われます。

これらはどういうコンポーネントを入れればいいのでしょうか?
Delphi2006をいれたのですが、元のプロジェクトはどのバージョンか不明です。



37:デフォルトの名無しさん
08/11/06 12:14:05
Explorer終了すると

---------------------------
Error
---------------------------
Runtime error 217 at 019CF57D
---------------------------
OK
---------------------------

とかいうエラーが出るんだけど常駐しているDelphi製アプリと関係ある?

38:デフォルトの名無しさん
08/11/06 12:19:26
>>36
そのくらいググレカス

39:デフォルトの名無しさん
08/11/06 22:25:47
>>37
Explorer終了ってつまりシャットダウンとかログアウトだよな

40:デフォルトの名無しさん
08/11/07 01:23:44
>>34
Firebird / Interbaseならrdb$relations
Oracleならuser_tab_columns
を検索

ほかのDBはシラネ

41:36
08/11/07 12:25:08
>>38
いやまじググッてもでなくて。

DelphiてVerごとの上位互換とか結構高いんですか?

42:デフォルトの名無しさん
08/11/07 12:26:40
検索して出てこないなら内部で作ったコンポなんじゃないの。
CDだかPCだかを全grepしてみたら。

43:デフォルトの名無しさん
08/11/07 14:48:46
>>41
wwと接頭辞付いてるところ見るとInfoPowerのコンポーネントかな。
URLリンク(www.woll2woll.com)


44:デフォルトの名無しさん
08/11/07 15:06:01
質問です。

procedure EdiToolCdExit(Sender: TObject);
begin
if ( ( BitBtnEnd.Focused   = False ) and
( BitBtnCancel.Focused = False ) and
( RadGrpKey1.Focused = False ) and
begin
//キー部の入力チェックを行う
if ( LFncKeyCheck ) then
begin
LProUseToolTblCtrl;
end;
end;
end;

このようなExitイベントがあり、特定のボタン(終了、取り消しなど)を
押下された時には入力チェックを行わないようにしています。
ですがBitBtnEndとBitBtnCancel.押下時は入力チェックが走らないで正常に動作するのですが
RadGrpKey1を押下時はなぜか入力チェックが走ってしまいます。
どなたか分かりますでしょうか?
ちなみにRadGrpKey1はRadioGroupです。

45:デフォルトの名無しさん
08/11/07 15:09:30
>>44
なんか色々とおかしいぞ・・・

46:デフォルトの名無しさん
08/11/07 15:21:17
つーかなんのためにsender持ってんだ

47:デフォルトの名無しさん
08/11/07 15:46:51
endが変な位置に行ったのはコピペしたからですwすいません。
Sender使ってif(Sender <> RadGrpKey1)then
を追加してみたけどだめでした。。。


48:デフォルトの名無しさん
08/11/07 18:41:41
DELPHI6での
コンポーネントとパッケージとパレットの関係を教えてください。
DELPHIは拡張子が多すぎて初心者の方は混乱しませんか?

49:デフォルトの名無しさん
08/11/07 22:57:21
>>44
RadioGroupの場合、フォーカス持ってるのは中のRadioButtonだから。
ActiveControl is TRadioButtonかどうか見て、さらにそのParentを調べるか
RadioGroupのOnEnterとOnExitでフラグ立てるかお好きな方で。

50:デフォルトの名無しさん
08/11/08 04:46:04
ちょいと教えて欲しいんですが、Captionを欧文フォントにして
全角(漢字とか)入れると急激に重くなるのはどういうことでしょうか。
これをC++Builderで書くと、ほんの少し軽くなる。
これってDelphiが悪いのか、WINDOWSが悪いのか
良くわからないんですけど、誰か知ってたらお願いします。

51:デフォルトの名無しさん
08/11/08 08:40:35
Delphi/C++Builderのバージョン、OSを明示すべし。

52:41
08/11/08 09:29:32
>>43
ありがとうございます。
DelphiってBorlandしかコンパイラーとか作ってないのかと思ってましたが、
別のIDEとかもあるんですね。
しかし、前任者はなぜこれを使ってたのか。。



53:ななしへ(ry ◆XcB18Bks.Y
08/11/08 09:38:43
>>50
OpenTypeの欧文フォントで文字セットを日本語にすると
日本語の文字が出てくるたびに
あらかじめ関連づけられた日本語フォントファイルからフォントを持ってくるという
面倒なことをやっていますのでガクッと重くなるのかもしれません。
(駅の売店でものを売るときに奥の棚から商品を引っ張り出すような感じでは?)

BCBが若干軽いのはBCB未経験ゆえにわかりませんが
DelphiとBCBとでは文字列処理の実装が異なるとすれば影響するかもです。


54:デフォルトの名無しさん
08/11/08 12:56:18
>>19
今思えばJ#使ってるのってヘジたんのせいだったんだな

55:デフォルトの名無しさん
08/11/08 18:38:22
JBuilder こコードを流用しただけだろ

56:デフォルトの名無しさん
08/11/08 18:39:06
× JBuilder こコードを流用しただけだろ
○ JBuilder のコードを流用しただけだろ

57:デフォルトの名無しさん
08/11/08 19:31:15
ヘジは、J#開発者だが、
そのころにはすでにBorland去ってるからなあ
Delphi2の開発時にMSにいっちゃったんだっけか

58:デフォルトの名無しさん
08/11/08 20:13:15
delphi2009のことについてききたいんだが
活発なスレどこ?

59:デフォルトの名無しさん
08/11/08 20:19:52
そんなものない
ML池

60:デフォルトの名無しさん
08/11/08 20:33:23
欧文フォントで文字セットを日本語にすると、フォントマッパによって
フォントフェイス名より文字セットの方が優先されると思うから、
実体化で指定したフォントと異なるフォントが大抵選択されていると思うが。


61:デフォルトの名無しさん
08/11/08 20:40:08
だから?

62:デフォルトの名無しさん
08/11/09 06:36:37
>>58
【Embarcadero】CodeGearオッチャ その12
スレリンク(tech板)

63:Delフサギコ ◆A6VzDeLphI
08/11/09 18:58:30
    ∧ ∧  いまさらながら、
    ミ ゚Д゚彡 BDEの使い方について
  ~ミ,,,,uuミ   ききたいのですが。。。
詳しく知っている人いらっしゃるでしょうか....

環境はD2007と付属のInterbaseを使いたいのですけれども
うまく接続できません。

コンパネのBDE Administratorを起動すると

databaseとして
  dBASE Files
  DBDEMOS
  Excel Files
  GlobalCar
  IBLocal
  MS Access Database
  Visio Database Sample

とあるのですが(初期状態?)
これ、それぞれ、どうやって接続すればいいんでしょうか。


64:Delフサギコ ◆A6VzDeLphI
08/11/09 19:06:46
IBLocalはどうやら
ユーザー名:SYSDBA
パスワード:masterkey
らしいのですが(ネットで調べると)

データベース エンジン エラー
IDAPI サービスライブラリをロードできません。
ファイル:SQLINT32.DLL
エリアス:IBLocal

と、表示されて接続できません。

BDEのエリアス設定方法、特にInterbaseやら
paradoxやら、ExcelFilesやらが、わかったらうれしいかなと
思ってます。

    ∧ ∧ オシエテ.... 
    ミ ゚Д゚彡
  ~ミ,,,,uuミ


65:Delフサギコ ◆A6VzDeLphI
08/11/09 21:49:31
誰もいないからいまのうち。
          _____________
   .∧,,∧  /
@'"ミ,,゚Д゚ミ < どんどん質問してしまうぞ。
 UU''UU   \___________

世界のすべてのDelphi質問を俺の質問だけで埋めてシマヘ

IB2007付属のIBConsole2007ならつながったんだけど
DEKOさんのIBConsole、Firebird対応版で
D2007Pro付属のIB2007に対して接続するには
どうしたらいいんじゃろーか。

ローカルのInterbaseとしては
インスタンスがgds_dbという名前で存在するんですが
それを設定するのがどこにあるのかしらと。。。


66:デフォルトの名無しさん
08/11/09 22:23:15
>63
なぜIBにつなぐのにBDEなの?IBXなりdbExpressでいいじゃない。

67:Delフサギコ ◆A6VzDeLphI
08/11/09 23:05:03

    ∧ ∧  比較をしたいんです。
    ミ ゚Д゚彡
  ~ミ,,,,uuミ

しっかし、DB系の技術はわけわかですね。

dbExpressで接続しようとしてもなっかなかうまくいかない。

みつけた文章がこれ。

URLリンク(www.borland.com)

プロバイド/リゾルブアーキテクチャ…
なにこの奇天烈な用語は。


68:デフォルトの名無しさん
08/11/09 23:28:55
ん~D2007ではBDEはParadox/dbase用に残されている、という状況だったはずなんで。
今試してみたけどうまく繋がらんね(XPSP3+D2007+IB7.1)。

69:Delフサギコ ◆A6VzDeLphI
08/11/10 00:19:28
上記のURLの
Borland Database EngineアプリケーションのdbExpress への移行

    ∧,,∧  なんて読みにくい
   ,,ミxдxミ  くず文章だ....
  .とミ,,,,,U,,U   頭イタイ...

このサンプル見て、サンプル通りに物を作れるとおもっておんのか....

サンプル構築手順と説明文書が
合わさって書いてあって、ものすごい読みにくい。
せっかくのdbExpressが台無しだな…

>>68さん
調べてくださってありがとうございます。


70:デフォルトの名無しさん
08/11/10 19:50:13
Delphi7 ProでBuild 4.453ってちゃんとパッチが当たってる状態ですか?
使っている人いたら最新のビルド番号教えてください。

71:68
08/11/10 20:52:16
>69
DEKOさんがお答えくださってるようなのでそちらへドゾ。

72:デフォルトの名無しさん
08/11/12 16:14:35
Delphiにて、ハッシュテーブル的(Dictionary的な)クラスはありませんでしょうか?

THashedStringList というのを見つけたのですが、ヘルプを呼んでもイマイチ使い方がわかりません。

TStringListと同様につかえる、という記述をネットで拝見したのですが、
文字列をキーにして、文字列を得たい場合、

 Hash.Values["Hoge"] := "Value of Hoge";

のような感じで、使ってよいものなのでしょうか?

73:デフォルトの名無しさん
08/11/12 17:17:51
PopupMenuとその中のitemを動的生成した場合って、PopupMenuを解放すれば
中のアイテムも解放されるんでしょうか?
それとも個別にfree?

74:デフォルトの名無しさん
08/11/12 19:05:51
>>72
文字列をシングルクオートで括ってるならいいと思うよ

>>73
ソースを読めば分かるとおり、解放される

75:デフォルトの名無しさん
08/11/12 20:18:27
>>73
やってみればわかるだろw

76:デフォルトの名無しさん
08/11/12 20:28:40
以下のinterfaceを使ったコードにおいて、メモリーリークが発生するのですが、対処法はありませんでしょうか?
こちらのdSpec URLリンク(delphixtreme.com) で同様のコードがありどうしたものかと困っております。

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 続き
08/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 続き
08/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
08/11/12 21:00:52
なんとなく、わかてきた・・・
Delphiのinterfaceが参照カウンタ実装でGCがないので、interfaceを循環参照にするとメモリーリークを起こす、
という奴でしょうか?

TTestのフィールドにTSubTestを持たせないようにすれば、いけそうな気がしてきました。

弄ってみたいと思います。
何か助言あればぜひお願いします

80:デフォルトの名無しさん
08/11/12 21:05:27
バッチファイルで処理していたことをDelphiのボタンを押した際に処理する
ようにする場合、以下の文はどのように書くのでしょうか?

AAA remove root\BBB
AAA install BBB.inf root\BBB

どなたか力を貸して下さい。
よろしくお願いします。

81:デフォルトの名無しさん
08/11/12 21:27:19
>>80
調べる気もないなら使うな

82:デフォルトの名無しさん
08/11/12 22:00:49
>>81
調べてみたのですが分かりませんでした。
バッチファイルの操作でしたら
WinExec('AAAt.bat',SW_SHOW);
で可能でしたがバッチファイルの中身を操作することが出来ませんでした。


83:デフォルトの名無しさん
08/11/12 22:37:06
>>82
Tmemo.loadfromfile(aaa.bat)

84:デフォルトの名無しさん
08/11/12 23:01:10
そもそも以下の様なドライバのインストールはDelphiで可能なのでしょうか?
AAA install BBB.inf root\BBB

>>83
すいません!未熟なので内容が伝わりません。

85:デフォルトの名無しさん
08/11/12 23:03:14
>>83見たいな奴のソースとか読みたくねえ

86:デフォルトの名無しさん
08/11/12 23:33:02
>>75
それが判る初心者なら質問しませんって・・・
次いでと言ってはなんですがどうやったら判るんです?
解放されてるかどうかの判定。

87:超初心者
08/11/12 23:38:50
Delphiでビンゴゲームを作ろうと思っているのですが、1~80のランダムな数を1回ずつだけ表示させるやり方がわかりません
Random()だと同じ数が出てきてしまうので…
超低レベルな質問なんでしょうが調べてみても良く分からなかったので勇気を持って書き込んでみました
Delphi使いの皆様、どうかご教授ください。お願いします

88:デフォルトの名無しさん
08/11/12 23:43:00
stringlistに1-80入れて
行をシャッフルして上から見てけば?

89:Delフサギコ ◆A6VzDeLphI
08/11/12 23:57:00
    ∧ ∧  >>68さん
    ミ,,。_。彡  >>DEKOさん
  ~ミ,,,,uuミ
ありがとです

90:Delフサギコ ◆A6VzDeLphI
08/11/13 00:09:24
   ∧,,∧    / ̄
\,,,,ミ,,゚Д゚彡 < しつもんす!
⊂,,,,,,,,,つつ.    \_

配列定数初期化は、ここにあるようにかっこよくかけるんだけど
URLリンク(delfusa.main.jp)
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:デフォルトの名無しさん
08/11/13 01:09:09
ActiveXコントロールを「スクリプトを実行しても安全だとマークする」
URLリンク(homepage3.nifty.com)

Delphiで作ったActiveXに同様の措置をしたいのですが、どうすればいいかわかりませんか?
Del2007を使ってます。

92:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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
08/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
08/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
08/11/13 19:41:55
>>94
勝手に開放される側の話じゃなく、開放されないっていう話なのですが・・・('A`)

>>94の方法はDelWikiにある奴ですよね

97:ななしへたぐらま ◆XcB18Bks.Y
08/11/13 22:52:12
>>96
なるほどそれは失礼しました。
TSubTest.DestroyでFreeAndNil(FTest)(自分で解放する)では駄目ですか?
せっかくの自動解放システムを捨てるのももったいない話ですが…

>>94はDelWikiを見る前からやっていましたが
もし知っていたら余計な苦労をしなくて済みましたね。


98:デフォルトの名無しさん
08/11/13 23:00:29
TMemoに読み込んだファイルの内容を操作したいんだけど
行を指定するのはMemo1.Lines[i]といった形でできる。
では行の中のさらに文字の部分を指定するのはどうすればいいんでしょうか?



99:Delフサギコ ◆A6VzDeLphI
08/11/13 23:58:29
    ∧,,∧   >>92さん
    ミ,,゚Д゚,彡  ありがと....
   ミ(旦⊂ ミ  
    (~,,(~,,,ミ@   でも、そのコード、動かんがな...

>>93さんもありがと。
>TObjectList/array ofベースの
いや、そこまでは。。。

>Delphiの定数表記は貧弱だからあまりがんばる余地がない。
そのようですね。

とりあえずBlogに書いてみたので、この程度の使い道っす。

>>DEKOさん
内緒ですし、あと、猫の耳が
Λ∧
ラムダになってます。
耳は"および"のほうがカワイイですよ。
MSPゴシックだとわかりませんが。明朝だとわかる思います。



100:Delフサギコ ◆A6VzDeLphI
08/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
08/11/14 00:32:08
>>100
助かりました。
ありがとうございます!
おかげで色々と操作ができまして懸念が1つ解消されました。

102:87
08/11/14 09:25:46
>>88
ご回答ありがとうございます。やってみます

103:デフォルトの名無しさん
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 や { } なんて過去の遺物、消え去るよ。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch