[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 07/05 09:41 / Filesize : 151 KB / Number-of Response : 533
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれDelphi(超初心者用)その48



1 名前:デフォルトの名無しさん mailto:sage [2008/11/03(月) 00:50:40 ]
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その47
pc11.2ch.net/test/read.cgi/tech/1214292265/

<過去スレ>
DelWiki避難所(Delphi 関連の過去スレッド)
delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89

44 名前:デフォルトの名無しさん [2008/11/07(金) 15:06:01 ]
質問です。

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

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

45 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 15:09:30 ]
>>44
なんか色々とおかしいぞ・・・

46 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 15:21:17 ]
つーかなんのためにsender持ってんだ

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


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

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

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

51 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 08:40:35 ]
Delphi/C++Builderのバージョン、OSを明示すべし。

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





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

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


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

55 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:38:22 ]
JBuilder こコードを流用しただけだろ

56 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 18:39:06 ]
× JBuilder こコードを流用しただけだろ
○ JBuilder のコードを流用しただけだろ

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

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

59 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 20:19:52 ]
そんなものない
ML池

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


61 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 20:40:08 ]
だから?

62 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 06:36:37 ]
>>58
【Embarcadero】CodeGearオッチャ その12
pc11.2ch.net/test/read.cgi/tech/1221142134/



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

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

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

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

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


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

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

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

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

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


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

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

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

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


66 名前:デフォルトの名無しさん mailto:sage [2008/11/09(日) 22:23:15 ]
>63
なぜIBにつなぐのにBDEなの?IBXなりdbExpressでいいじゃない。

67 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/09(日) 23:05:03 ]

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

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

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

みつけた文章がこれ。

www.borland.com/resources/jp/pdf/products/delphi/delphi_bde_to_dbexpress_jp.pdf

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


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

69 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/10(月) 00:19:28 ]
上記のURLの
Borland Database EngineアプリケーションのdbExpress への移行

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

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

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

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


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

71 名前:68 mailto:sage [2008/11/10(月) 20:52:16 ]
>69
DEKOさんがお答えくださってるようなのでそちらへドゾ。

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

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

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

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

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



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

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

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

75 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 20:18:27 ]
>>73
やってみればわかるだろw

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

program circular_reference;
{$APPTYPE CONSOLE}
uses SysUtils, Classes;
type
  ITest = interface
    ['{38C68C6A-7CBD-42FE-9249-0ED869119A29}']
    procedure Foo;
  end;

  TTest = class;
  TSubTest = class
    FTest: ITest;
  public
    constructor Create(NewTest: ITest);
    destructor Destroy; override;
  end;

  TTest = class(TInterfacedObject, ITest)
    FSubTest: TSubTest;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Foo;
  end;

procedure CallFoo(Test: ITest);
begin
  if Assigned(Test) then Test.Foo;
end;

77 名前:>>76 続き mailto:sage [2008/11/12(水) 20:29:13 ]
{ TSubTest }
constructor TSubTest.Create(NewTest: ITest);
begin
  FTest := NewTest;
  CallFoo(FTest);
end;

destructor TSubTest.Destroy;
begin
  inherited;
end;

{ TTest }
constructor TTest.Create;
begin
  inherited;
  FSubTest := TSubTest.Create(Self);
end;

destructor TTest.Destroy;
begin
  FreeAndNil(FSubTest);
  inherited;
end;

procedure TTest.Foo;
begin
  Writeln('TTest.Foo!!');
end;


78 名前:>>76 続き [2008/11/12(水) 20:31:35 ]
procedure Main();
var Test: ITest;
begin
  Test := TTest.Create;
  CallFoo(Test);
end;
begin
  ReportMemoryLeaksOnShutdown := True;
  Main;
//  Writeln('push ENTER key to end!!'); Readln;
end.

--------------------
で終わりです。

TSubTest.FTestをTTestにし、TSubTest.Create(NewTest: TTest)にした場合は大丈夫のようなのですが、
どうようの入れ子構造にし、TSubSubTestが、ITestを持っていると駄目?なようです。

79 名前:76 mailto:sage [2008/11/12(水) 21:00:52 ]
なんとなく、わかてきた・・・
Delphiのinterfaceが参照カウンタ実装でGCがないので、interfaceを循環参照にするとメモリーリークを起こす、
という奴でしょうか?

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

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

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

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

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

81 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 21:27:19 ]
>>80
調べる気もないなら使うな

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




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

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

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

85 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:03:14 ]
>>83見たいな奴のソースとか読みたくねえ

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

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

88 名前:デフォルトの名無しさん mailto:sage [2008/11/12(水) 23:43:00 ]
stringlistに1-80入れて
行をシャッフルして上から見てけば?

89 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/12(水) 23:57:00 ]
    ∧ ∧  >>68さん
    ミ,,。_。彡  >>DEKOさん
  〜ミ,,,,uuミ
ありがとです

90 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/13(木) 00:09:24 ]
   ∧,,∧    / ̄
\,,,,ミ,,゚Д゚彡 < しつもんす!
⊂,,,,,,,,,つつ.    \_

配列定数初期化は、ここにあるようにかっこよくかけるんだけど
delfusa.main.jp/delfusafloor/opensource/emeditorplugin/20070830170942/Product/DelphiCommentDelete/DelphiCommentDelete.dpr.txt
braceTable: array[TBraceType] of TBraceInfo = (
(beginMark: ''''; endMark: ''''; remove: false),
(beginMark: '{$'; endMark: '}'; remove: false),
(ry

動的配列の初期化は下記の風にしかかけないのかな。
var
braceTable: TBraceTable;
begin
SetLength(braceTable, 5);
with braceTable[0] do
begin beginMark := ''''; endmark := ''''; remove := False; end;
with braceTable[1] do
begin beginMark := '{$'; endmark := '}'; remove := False; end;
with braceTable[2] do
begin beginMark := '{'; endmark := '}'; remove := True; end;
(ry

なんだか、配列定数風にかけたらかっこいいと思うんだけど方法ない?

動的配列に配列定数をほりこむとかでもいいから、なんかきれいな記述方法があればオシエテくで。


91 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 01:09:09 ]
ActiveXコントロールを「スクリプトを実行しても安全だとマークする」
homepage3.nifty.com/LILILIN/HOWTO/activex_safe.htm

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

92 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 04:45:02 ]
>>86
FastMMとか

>>90
俺は綺麗な方法なんて知らんので関数作るな

procedure SetBraceInfo(var Brace: array of TBraceInfo; beginMark, endMark: String; remove: Boolean);
var
I: Integer;
begin
for I := Low(Brace) to High(Brace) do
begin
Brace[I].beginMark := beginMark;
Brace[I].endMark := endMark;
Brace[I].remove := remove;
end;
end;



93 名前:デフォルトの名無しさん mailto:sage [2008/11/13(木) 08:51:51 ]
自分ならTBraceTableをTBraceInfoを保持するTObjectList/array ofベースのgenericなコンテナにして

TBraceInfo = record or object
public
  constructor Init(beginMark, endMark: String; remove: Boolean);
end

function BraceInfo(beginMark, endMark: String; remove: Boolean): TBraceInfo;
begin
  Result.Init(beginMark, endMark, remove);
end;

braceTable[0] := BraceInfo('''', '''', False);
braceTable.Add(BraceInfo('''', '''', False));
braceTable[1].Init('{$', '}', False);
braceTable.Add('{', '}', True);

なんて書けるようにするな。どこまで書きやすくするかは利用頻度次第。
Delphiの定数表記は貧弱だからあまりがんばる余地がない。

94 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/13(木) 18:14:12 ]
>>76-79
条件がよく分からないのですが別のオブジェクトに所有されるときに参照カウントが0になって勝手に解放されてしまうようですね。
手っ取り早い解決法は参照カウントが無効なクラスを用意してTInterfacedObjectの代わりに使うことです。

// 参照カウントを無視するインターフェイスクラス(TObject版)※TInterfacedObjectのコピペ改造
TNoRefCountInterfacedObject = class(TObject, IUnknown)
protected
 function _AddRef: Integer; stdcall;
 function _Release: Integer; stdcall;
public
 function QueryInterface(const IID: TGUID; out Obj): HResult; virtual; stdcall;
end;

function TNoRefCountInterfacedObject.QueryInterface(const IID: TGUID;
 out Obj): HResult;
const
 E_NOINTERFACE = HResult($80004002);
begin
 if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE;
end;

function TNoRefCountInterfacedObject._AddRef: Integer;
begin
 Result := -1; // これで参照カウントが無効になるらしい
end;

function TNoRefCountInterfacedObject._Release: Integer;
begin
 Result := -1; // これで参照カウントが無効になるらしい
end;

95 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/13(木) 18:41:43 ]
>>90
レコード型変数は直接代入できますので配列定数からコピペする場合は

const cBraceTable: array[TBraceType] of TBraceInfo = (ry

var e: TBraceType;

SetLength(BraceTable, Length(cBraceTable));
for e := Low(TBraceType) to High(TBraceType) do
 BraceTable[ord(e)] := cBraceTable[e];

…くらいにはできそうです(一応テスト済み)。


96 名前:76 mailto:sage [2008/11/13(木) 19:41:55 ]
>>94
勝手に開放される側の話じゃなく、開放されないっていう話なのですが・・・('A`)

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

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

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


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



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

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

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

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

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



100 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/14(金) 00:02:20 ]
>>98さん
    ∧,,∧   こんな感じかしら
    ミ゚Д゚,,彡 
   ミ(旦⊂ ミ  操作なので。
    (~,,(~,,,ミ〜   
これ動かして慣れてみてください。

procedure TForm6.Button1Click(Sender: TObject);
var
 i: Integer;
 j: Integer;
 s: String;
begin
 for i := 0 to Memo1.Lines.Count - 1 do
 begin
  s := Memo1.Lines.Strings[i];
  for j := 1 to Length(s) do
  begin
   s[j] := '*';

//読み出しだけならこんな書き方もできたり。
// s := s + Memo1.Lines[i][j];

  end;
  Memo1.Lines[i] := s;
 end;
end;


101 名前:98 mailto:sage [2008/11/14(金) 00:32:08 ]
>>100
助かりました。
ありがとうございます!
おかげで色々と操作ができまして懸念が1つ解消されました。

102 名前:87 [2008/11/14(金) 09:25:46 ]
>>88
ご回答ありがとうございます。やってみます



103 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:16:40 ]
>102
えぇ、
普通にRandomで、出てきた数字を覚えておいて重複したら却下すれば良いだけじゃないの?


104 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:19:55 ]
>>103
時間の無駄。

105 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 11:32:56 ]
ざくっと書いて見た。

procedure TMainForm.Button1Click(Sender: TObject)
var
o: array[0..79]of Boolean;
i, n: Integer;
function AllOut: Boolean;
var
i: Integer;
begin
result := false;
for i := 0 to 79 do
if( not( o[i] ) )then exit;
result := true;
end;
begin
for i := 0 to 79 do
o[i] := false;

while( not( AllOut ) )do
begin
n := Random( 80 );
if( not( o[n] ) )then
begin
o[n] := true;
// ここに新たに数字が出たときの処理
end;
end;
end;



106 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 16:28:47 ]
この流れちょっと前にも見たな

107 名前:76 mailto:sage [2008/11/14(金) 18:45:47 ]
>>97
つきあってくれてありがとう。質問者側じゃないようなレスしてスマソ

ReportMemoryLeaksOnShutdown の出力結果張り忘れてました。
はっときます。


つまり、両方(TTestとTSubTest)のDestroyが呼ばれてないんです。

どちらかの開放の責任を循環参照の外側に出せば、開放されるはずなので、
いろいろ弄繰り回して試してみたいと思います。

108 名前:76 mailto:sage [2008/11/14(金) 18:48:23 ]
出力結果張る前に投稿しちゃった・・・
以下は、>>76-79 の ReportMemoryLeaksOnShutdown の出力結果です。

---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:



1 - 12 bytes: TSubTest x 1

13 - 20 bytes: TTest x 1


---------------------------
OK
---------------------------

109 名前:76 mailto:sage [2008/11/14(金) 18:51:32 ]
Delphi2009をお持ちの方にお聞きしたいのですが、
こちらの記事にて、

Delphi 2009で追加された3つの便利な機能をコードで検証 − TechTargetジャパン
techtarget.itmedia.co.jp/tt/news/0811/11/news02.html

> 注4.関数内関数を匿名関数型の変数に代入することもできる。

とあるのですが、これは本当でしようか?

今までは関数内関数の参照は取得できず、
以下のサイトのようなテクニックで無理やり実現していました。

λ with INNER FUNCTION
hp.vector.co.jp/authors/VA028375/delphi/delphipascal_xx_lambda.html

もし、「関数内関数を匿名関数型の変数に代入」ができると、
さらなる可能性が広がるのですが・・・

110 名前:109 mailto:sage [2008/11/14(金) 18:52:16 ]
名前欄消し忘れたorz 76と関連性はないです。

111 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 18:58:02 ]
それが2009の拡張なんだろ

112 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 19:46:00 ]
>>106
procedure Main();
var Test: ITest;
begin
  Test := TTest.Create;
  CallFoo(Test);
end;
Test変数がスコープ外れた後、参照カウンタが-1されるが、まだ、TTestクラスのインスタンスは
自身の内部変数FSubTestによって参照されているので、参照カウンタ1のまま、TTest.Destroyが永遠に呼ばれず
メモリリーク。




113 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/11/15(土) 00:38:14 ]
  ∧,,∧  たぶんね
  ミ,,゚ 3 ゚彡  遅いかも>>103さん、105さん
  ミ つ旦)~~
〜と,,,~),,~) 

いや、パフォーマンスを気にする必要が無い場面は
多々あるんだと思うだが、この場合、

1000個目の乱数を出すために大変だよ。
出力済みの999個は重複しているから。
何を出力してもほとんどははじかれる。

こういう時には>>88さんのいうように
リストでも配列でもいいんだけど
1 2 3 4 5 6 …
を用意しておいて、
1番目の箱を乱数1-1000で決めた他の番号の箱と中身を入れ替えて、
2番目の箱を乱数1-1000で決めた他の番号の箱と中身を入れ替え。。
と、1番目から1000番目の箱を入れ替えていくのがセオリーかと。

>「関数内関数を匿名関数型の変数に代入」ができると、 さらなる可能性
そうなの?
面白い事やってますね。


114 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 02:49:14 ]
>>105のソース読みにくそうだな

115 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 04:31:58 ]
TListViewでOwnerDataがTrueの場合、複数選択はどのように取得すればいいんでしょうか

OwnerDataがFalseのときはItemIndex番目からSelCount個見つかるまで
一つずつItems[i].Selectedを調べていたんですが使えないみたいです。

ヘルプの例に従い以下のようにやってみても駄目でした。
選択数が1個の時だけ検出されます。複数になると1個目すら検出できません。
(Ctrl+クリックのときだけいけるっぽい)

OnSelectItem内で
ListItem := ListView1.Selected;
while ListItem <> nil do begin
ほげほげ
 ListItem := ListView1.GetNextItem(ListItem, sdAll, [isSelected]);
end;

よろしくお願いします

116 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 05:24:09 ]
OnDataStateChangeにも同じコード書いたら行けたみたいです

今度はCtrl+クリックに反応しなかったんで両方でコード実行しないと駄目ぽいけど・・・

117 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 08:40:53 ]
>>113
でもさぁ、たかがビンゴでパフォーマンス云々言われてもねぇって感じ。
見た目簡単なほうが良いんじゃね?

まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。


118 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 08:44:16 ]
>>117
>まぁ、何でビンゴなのに80まであるのかの方が疑問ではあるのですがね。

9 × 9 - 真ん中1つ = 80
じゃない?

119 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 09:00:04 ]
間違ってたらごめんね。
ビンゴって1−75じゃなかったっけ?
その数字が5*5のマスの真ん中以外にランダムに配置されてるんじゃ?

あ、ビンゴにもいろいろあるんですか??



120 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 10:30:13 ]
全員にすべての数字が揃ってるわけじゃない

121 名前:デフォルトの名無しさん [2008/11/15(土) 14:15:30 ]
TEditを継承したクラスをつくるって方法を使わず、FormCreate時にEdit1をキャレット非表示のものにする方法をどなたか教えてください!

122 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 14:22:15 ]
>>121
Edit1.Enabled:=False;




123 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 14:40:02 ]
Create時じゃないが
procedure TForm1.Edit1Enter(Sender: TObject);
begin
HideCaret(Edit1.Handle);
DestroyCaret(Edit1.Handle);
end;
でどうだ

124 名前:デフォルトの名無しさん [2008/11/15(土) 16:38:28 ]
>>123

それでやってみるようにします。
ありがとうございます。

125 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 16:40:58 ]
うまく説明できないかもしれませんが、

・どんなときでもForm1のKeyDown(Press)がメッセージを取る

ようにするにはどうすればいいんでしょうか?



126 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 16:42:43 ]
KeyPreviewプロパティかな?

127 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/15(土) 16:47:28 ]
>>117
人間が手でやるとしたら1から80までのカードを作ってかき混ぜるでしょうから
コンピューターでもそうやるほうが自然ではないかと思います。(作ってみたらこっちの方がわかりやすいとオモウ)
// Num1 と Num2 の値を入れ替える
procedure SwapNumbers(var Num1, Num2: integer); //inline;
var
 TempNum: Integer;
begin
 TempNum := Num1;
 Num1 := Num2;
 Num2 := TempNum;
end;

// Numbers のシャッフル:奥村先生のコードを移植.
procedure Shuffle(var Numbers: array of integer);
var
 i1, i2: Integer;
begin
 for i1 := High(Numbers) downto 1 do
 begin
  i2 := Random(i1 + 1);
  SwapNumbers(Numbers[i1], Numbers[i2]);
 end;
end;

var
 Numbers: array [1..80] of integer;
begin
 Randomize;
 for iNum := Low(Numbers) to High(Numbers) do
  Numbers[iNum] := iNum;
 Shuffle(Numbers);

128 名前:125 mailto:sage [2008/11/15(土) 16:50:40 ]
>KeyPreviewプロパティかな?

うまくいきました。
どうもありがとう。

129 名前:デフォルトの名無しさん mailto:sage [2008/11/15(土) 17:18:36 ]
>>127
玉を一個一個出すビンゴゲームの雰囲気ではないですけど、いいですね。
わかりやすい。


130 名前:125 mailto:sage [2008/11/15(土) 18:15:17 ]
Form1をKeyPreview:=trueにして、Form1.OnKeyDownでButton1.SetFocusとかでフォーカスを設定しようとしたのですが、

Tab移動のほうに処理が取られるようでうまくいきません。
Tab移動を眠らせてOnKeyDownの中でフォーカスを移すにはどうすればいいんでしょうか?

131 名前:デフォルトの名無しさん [2008/11/15(土) 19:18:23 ]
>>127
玉を一つ一つ取り出す随時抽選方式のビンゴ風に改造してみました。
var
Numbers: array[0..74]of Integer;
LotNumber: Integer; 当選番号
LotCount: Integer; 抽選回数 74->0

procedure BingoStart;
var
 i: Integer;
begin
 LotCount := 74;
 for i := 0 to LotCount do
  Numbers[i] := i;
end;

procedure BingoLot;
var
 n: Integer;
 procedure SwapNumber(var a, b: Integer);
 var
  c: Integer;
 begin
  c := a; a := b; b := c;
 end;
begin
 n := Random( LotCount );
 LotNumber := Numbers[n];
 SwapNumber( Numbers[n], Numbers[LotCount] );
 Dec( LotCount );
end;


132 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 02:53:54 ]
Delphi2009高いな
商用不可でいいから
低機能だけどコンポは使えて
9800でだしてくれんかな。
シェア広げることも大事だと思うんだが




133 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 02:58:58 ]
Del6personalでDelユーザーを増やせたのにねー

Del8以降の迷走で損してるわ。

134 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 09:45:48 ]
Delphiはもうガラパゴス諸島化してるだろ。

135 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:24:23 ]
.NETバブルにのって崩壊

136 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:42:27 ]
>>134
つまり手厚く保護されるということだな


137 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:45:02 ]
TurboDelphiExplorerがあるじゃない

138 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:43:20 ]
>>137
Turboは、.net1.1に依存してるのと、
コンポが使えないのがネック。
商用不可でいいから6Personalみたいな形で
だしてほすい


139 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:57:36 ]
www.itwriting.com/blog/a-simple-delphi-wrapper-for-sqlite-3

上記サイトのDelphiラッパーを使おうと思い、まず同梱のTestSqlite.dprを実行させようとしたところ
エラーが出てコンパイルできませんでした。どこを修正するといいのでしょうか?

[エラー] SQLiteTable3.pas(470): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(627): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(787): 'TCollateXCompare' と 'Pointer' には互換性がありません
[致命的エラー] uTestSqlite.pas(7): 'SQLiteTable3.pas' ユニットはコンパイルできませんでした

140 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 15:39:40 ]
>>139
問題無くコンパイル出来た@Del6

141 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 15:47:12 ]
>132
シェアを広げることが(企業としての)利益を増やす、ということに繋がるのかどうか、が問題みたいですね。
これをCodeGearの人たちに納得させられればいいのですが。
Borlandから独立することによってBorland(ALM/Together)の連中がやっていたIDEの安売り、投げ売りから
解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
現状からすると、しばらくの間は難しいんじゃなかろか、というのが個人的な意見です。

142 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 16:00:15 ]
某もたいして安くなかったのにね
マイナー言語のくせに偉そうだな



143 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:16:34 ]
>解放されて自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、という
>現状からすると、

ソースぷりーず

144 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:19:11 ]
>自分たちの技術、製品が正当な利益、正当な評価を生み出すことを実感している、

糞ヘルプ、バグだらけの正当な評価だろうけどな。

145 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:20:09 ]
起きたらオッチャスレ落ちてたんだけど誰か立てないのか

146 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:53:31 ]
>143
forum(private含む)でのCodeGear関係者の発言からはそう読めるけどね。ディスカウントとか無料とか
なんでそんなことしなきゃいけないの?利益に貢献するの?ってな感じ。
ソースは脳内なので当たっていないと思うなら無視してくれて構わないよ。

>142
Personal/Turbo Explorerはただでこれ以上安くできないけど?バージョンアップとかも新規に比べりゃ
安いもんだったしな。でも今はマイナーだからこそ稼がないと消滅しちゃうわけで。MSみたいに
ボッタクリ部門があるわけじゃないからな。

>145
あら、ほんとだ。

147 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 17:59:20 ]
pc11.2ch.net/test/read.cgi/db/1220581676/100

100 名前:NAME IS NULL[sage] 投稿日:2008/11/16(日) 12:56:23 ID:???
www.itwriting.com/blog/a-simple-delphi-wrapper-for-sqlite-3

上記サイトのDelphiラッパーを使おうと思い、まず同梱のTestSqlite.dprを実行させようとしたところ
エラーが出てコンパイルできませんでした。どこを修正するといいのでしょうか?

[エラー] SQLiteTable3.pas(470): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(627): 'TSQLite3Destructor' と 'Pointer' には互換性がありません
[エラー] SQLiteTable3.pas(787): 'TCollateXCompare' と 'Pointer' には互換性がありません
[致命的エラー] uTestSqlite.pas(7): 'SQLiteTable3.pas' ユニットはコンパイルできませんでした

148 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/16(日) 18:09:10 ]
>>138
データベース(に接続して読み書きする機能)で差を付けられなくなってしまった現在では
有料版とどこかで差別化しなければならなかったわけで落としどころとしては悪くないと思います。

またコンポは設計時に貼り付けられないだけで実行時にコードで生成することはできますので
私はここ1〜2年はこれで頑張っています。

フレームを積極的に使い始めたためか標準でないビジュアルコンポーネントをポトベタしたくなる場面が
かなり減ったのでそんなには困っていませんがさすがにそろそろポトベタできる有料版が欲しいです…


149 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 18:11:08 ]
俺の不満はDelphiのシェア低いから使えるライブラリの種類少ないことだな。
Delphiのクラスライブラリが.NET並とはいかないまでも、もっとリッチならまぁ気にならないが。
正規表現にしてもDelphiのVCLに標準で用意されていないし。まぁ、PCREや鬼車使えるけど、
アプリに静的リンクしようとかなるとたちまち、メンドくさいし。
前はDelphiで構文解析やろうとして、Delphiのソース吐くやつが余りないから、
C#のコードを吐くパーサジェネレータをDelphiのコードを吐くように改造したり。
めんどくせぇ。






150 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 18:19:07 ]
隔離スレに帰れ

151 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 19:07:36 ]
まじでめんどくさいぉ。


152 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:15:48 ]
オッチャなくなったので、こちらで活動開始。

オッチャすれ アンチ対策テンプレ v1.0(案)
(p)codegearwatcher.web.fc2.com/faq/anti.html

> オッチャすれ アンチ対策テンプレ v1.0(案)
> 以下はオッチャすれに出没する、アンチの持ちネタです。
> これらのネタは、4年以上にわたる不毛な議論と逆予言により終息しています。
> しかしアンチは自作自演を交えつつ、無限ループを続けています。
>
> このスレでアンチを見かけた場合は、このテンプレを提示しましょう。




153 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:46:51 ]
マンセがうるさいので、これからここに質問に来た初心者をけなしてDelphiユーザーの
妨害活動をしますのでよろしく。


154 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 22:01:33 ]
>>152 はまんせじゃなくて最凶アンチ。きもい。

155 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 22:36:45 ]
【Embarcadero】CodeGearオッチャ その13
pc11.2ch.net/test/read.cgi/tech/1226842439/

156 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:00:46 ]
既存のコンポを継承したコンポを使いたいんですけども
どうやって呼び出したらいいんでしょうか?

例えば、TCustomEditを継承したTEditExを作ったんですけども
フォームへの貼り付け方法がわかりません。

環境はTurboDelphi Explorerです。


157 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:11:13 ]
TDEじゃ無理です

158 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:12:03 ]
あ、FormのOnCreateで
EditEx1 := TEditEx.Create(Self);
EditEx1.Parent := Self;
とすれば貼り付けじゃなくてもおk

159 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 23:57:34 ]
>>158
ぬぉぉぉ
できました。
ありがとうございます!


160 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:24:56 ]
「→」や「→」などを「→」のように文字に変換する方法はありますか?


161 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:29:15 ]
全部同じにしか見えない

162 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:29:28 ]
ミスったorz
「&#8594;」や「&#8594;」などを「→」のように文字に変換する方法はありますか?



163 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:32:26 ]
再び・・
「&#8594;」や「&#rarr;」です

164 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:35:29 ]
「&#8594;」や「&#rarr;」を「 → 」に置き換えればいいんじゃないの?

165 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:39:22 ]
全ての全角文字と記号がこの形式になっているもので・・

166 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 02:06:06 ]
キーボードが壊れてしまって「あ」が「あ」になってしまうんです。

思い出した。



167 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:19:21 ]
classとinterfaceを継承したclass(例えば TTest = class(TObject, IInterface))があるとき、
自身を、IInterfaceを引数に取る関数に渡す場合はどうすればいいんでしょうか?

168 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:36:48 ]
>>167
Self as IInterfaceとかじゃね?

169 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:39:16 ]
>>168
「この型には指定した演算子は使えません」と出ます

170 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 03:50:52 ]
>>169
そのままSelfか、IInterface(Self)でどう?

171 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 04:01:29 ]
>>170
それも無理でした

172 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 04:50:18 ]
interfaceを使うときは一般的にはTObjectじゃなくTInterfacedObjectから継承する。
そうでなければQueryInterfaceや参照管理を自前できちんと実装しないといけない。
分かってやってるならいいけど。



173 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 04:57:07 ]
あちゃ、本当は class(TObject, IDispatch)ってやってたんですけど、
キャストする時はIInterfaceも追加しないといけないんですね

>>172
tobysoft.net/wiki/index.php?Delphi%2Finterface%A4%F2%BB%C8%A4%AA%A4%A6%2F%C9%AC%BF%DC%A4%CE%A5%B5%A5%DD%A1%BC%A5%C8%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA
のようにやってました
参考にしておきます

174 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 12:24:35 ]
OSを替えたんでDELPHI6を再インストールしたら
前の使用許諾コードが入らないんです。それで新たに発行してもらおうとしたら
以前に使ってたメアドで登録してたんで、今の使ってるメアドで登録しなおそうと思っても
シリアル発行終了してるんでどうしたら良いのか困ってるんです。
一度は登録済みだから未許諾ままでも良いですかね。
フリーソフトとかで配布したいんですけど

175 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 13:08:01 ]
ポップアップメニューがポップしてるかという判断ってどうやればいいですか。
ポップしている間にTimerイベントが発生してしまい
ちょっと望ましくない挙動になってしまうのでif文を追加したいのです。

176 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 13:09:04 ]
HKEY_CURRENT_USER\Software\Borland\Delphi\6.0のLMKEYを前のとあわせたらどうかな
でもバックアップ取ってないよね
まあ登録しようがしまいが構わんさ
それでソフト配ってる奴なんか山のようにいる

177 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 13:09:56 ]
LMKEYじゃなくてLMかも分からんね

178 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 14:52:48 ]
>>175
WM_ENTERMENULOOPでフラグ立ててWM_EXITMENULOOPでフラグ降ろす

179 名前:174 mailto:sage [2008/11/17(月) 14:56:10 ]
>>176 >>177
バックアップのと照らし合わせたら同じでした、と言う事は
インストール番号とキーは今のOSでは使えない(インストールだけは出来る)ので
メールでインストール番号とキーを書いて送って帰ってきた
使用許諾コードも使えないと言う事ですよね、困ったなぁ

>それでソフト配ってる奴なんか山のようにいる
EXEの中に未許諾の情報とか入ってないんですか

180 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 15:02:29 ]
>>179
むむ・・・すまん
じゃあもういっその事レジストリ全部上書きでもいいと思うよw

> EXEの中に未許諾の情報とか入ってないんですか
Kylixにはあると思う(System.pasにそんなことがちらり)けど、Delphiにはないんじゃないかなあ

181 名前:174 mailto:sage [2008/11/17(月) 15:56:17 ]
>>180
上書きは項目が沢山あるんで諦めましたw
情報はDELPHIの方には入って無いんですか、じゃあそのままにしときます。
一応登録する意思はあるんで、出来ないんじゃどうしようも無いですし。
自分せいじゃあ無いんでしょうがないです。
色々ありがとうございます、ちょっと安心しました。

182 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 17:21:40 ]
OSとか換えなくてもDel6入れ直しただけで前の使用許諾コード使えなくなったな
俺はそのまま赤いまま



183 名前:デフォルトの名無しさん [2008/11/17(月) 19:26:44 ]
Delphiのimplements指令がいまいちわかりません。

下記サイトでサンプルコードがあったのですが、
An Introduction to COM Programming with Delphi (3 / 6)
delphi.about.com/library/weekly/aa120704a.htm

結局、implementsを書いたクラスは一度interfaceにキャストしないと
メソッドよめないんでしょうか?

var
 Test: TTest;
 Foo: IFoo;
begin
 Test := TTest.Create;
 Foo := Test;
 Foo.Bar;  // FooにキャストしないとBarに呼べない


184 名前:デフォルトの名無しさん [2008/11/17(月) 19:27:26 ]
> メソッドよめないんでしょうか?
メソッド呼べないんでしょうか?

185 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 20:01:50 ]
>>174
登録コードの数字と使用許諾コードがあればレジストリでLMの最後にある数字を
元の登録コードの数字に書き換えれば登録できる

186 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/17(月) 22:04:12 ]
>>162
こんな時こそ正規表現ライブラリを使うべし。
正規表現ライブラリはいろいろありますけど今回はskRegExpで。
日本語のヘルプもあるので比較的使いやすいと思います。

そのものズバリのコードも書いてしまったのですが勉強にならないと思うので
今回は変換したい部分を特定するコードのサンプルだけ。

const
 cSample = 'I want to convert "→" and "&#rarr;" into right arrow!';
var
 exp: TSkRegExp;
 Converted: string;
begin
 Writeln('Sample:"', cSample, '"');
 exp := TSkRegExp.Create;
 try
  exp.Expression := '&#[0-9]+;|&#[A-Za-z]+;'; // 見つけたいパターンは「&#,0から9のどれかが1文字以上,;」または「&#,A〜Zかa〜zが1文字以上,;」
  if exp.Exec(cSample) then // 先頭からパターンに一致するところを探せ.もし見つかったなら…
   repeat
    Writeln('見つけた!: 「', exp.Match[0], '」 ', exp.MatchPos[0], '文字目から', exp.MatchLen[0], '文字分');
   until not exp.ExecNext; // 次を探せ.見つからなかったらループを抜ける.
 finally
  exp.Free;
 end;
end.

>>168-169
as 演算子によるインターフェースへのキャストはGUIDを付けないと使えないみたいです。
でも今回はそれが原因ではない気もします。


187 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 01:11:12 ]
>>183
TestはあくまでDelphiのオブジェクトなので実装されていない
メソッドが呼べないのは当たり前じゃないでしょうか。

188 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 01:28:33 ]
>>181
・SerialNumber:インストール番号と
・AuthorizationKey:インストールキーは、そのまま使える
ってか使えるからインスコ出来る訳で

インスコし直し(とかD6RegClean.exe実行)すると
・RegistrationKey:登録コード が変わる

その登録コードで有効な許諾コードを取得
https://reg.codegear.com/srs6/sanctone_serial_number.jsp

メアドはDeveloper Networkのアカウントにログインして変えれば良い

Borlandの時の返信Mailは登録コードも書いてあったけど
Embarcaderoのには書いてない。
念のため事前に数字メモっとかないと。。。

189 名前:デフォルトの名無しさん [2008/11/18(火) 05:07:48 ]
OOPについての基本的な質問なのですが・・・
オブジェクト"objA"からオブジェクト"objB"を生成するとします。

procedure TMain.foo();
begin
 objA := TObjA.create();
 objA.foo();// objBを生成
end;

procedure TObjA.foo();
begin
 objB := TObjB.create();
end;

この場合、objAからobjBにメッセージを送ることはできますが、
その逆(objBからobjAにメッセージを送る)はできないと思います。
(objBは、どのオブジェクトから生成されたか知らないため)

objBが、生成元のオブジェクトobjAにメッセージを送れるようにするには、
どうすればいいでしょうか?

190 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 05:09:52 ]
コンストラクタで生成元を渡すような仕様にしたらいいんでは?

191 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 05:16:04 ]
メッセージが何のことやら

192 名前:189 mailto:sage [2008/11/18(火) 05:16:24 ]
>>190
ありがとうございます。

procedure TObjA.foo();
begin
 objB := TObjB.create(self);
end;

などとして、引き回すということですよね?
この方法が一番スマートですかね…?



193 名前:174 mailto:sage [2008/11/18(火) 05:55:54 ]
>>182 >>185 >>188
返事遅れてすいません、>>185 さんの方法で上手く出来ましたw
OSの違いじゃなくて登録コードが合ってなかったんですね。
入力欄に入れようとしても変えられなかったんで関係ないと思ってました。
いや本当に助かりました、これでスッキリとDELPHI6を使い続ける事ができます。
本当にありがとう御座いました。

194 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 11:36:24 ]
これはいいライブラリになるかも。試してないけど。

309 名前:View ◆AcQTmXmylo [sage] 投稿日:2008/11/18(火) 05:25:01 ID:bqCSxa7a
今回導入した鬼車もオープンソース(BSDライセンス)なので、それに対する貢献はなんだろうと考え、
delphiから鬼車を使うためのラッパークラスTOnigRegExpのソースを公開しました。

ttp://www.geocities.jp/jview2000/oniguruma.html

OnigRegExpは、Km氏が作成したdllラッパーのoniguruma.pas, onig.pasの改造品を
さらにラップしてクラス化したものです。
ttp://homepage2.nifty.com/Km/onig.htm

195 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 12:39:51 ]
人によってクセがあるので自分で書いたほうが
使い易かったりもするけどね

196 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 12:55:40 ]
>>189 なんでそんな面倒なことするの? メンバ変数で記録すればいいじゃないか

procedure TMain.foo();
begin
 objA := TObjA.create();
 objA.foo();// objBを生成
end;

↑これobjB作れてないじゃん objAとかobjBは結局ポインタなんだけどわかってる?

197 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 15:50:45 ]
procedure TForm1.Button2Click(Sender: TObject);
var
lp: PChar;
str: String;
ch: Char;
begin
ch := 'A';
str := 'A';
lp := PChar(str);
if lp = ch then begin
Caption := 'equal';
end;
end;

delphi2009だと、lp = chでstring->ShortStringな警告が出るんですが、
そういうものでしょうか?思いっきり、'A'を文字数だと思って比較しています。


198 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 16:33:58 ]
>>196
全部読めよ

199 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 16:36:05 ]
>>197
lp^じゃねぇの?

200 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 17:35:53 ]
>>199
漏れもそう思ったんだが、両方文字列に変換してから比較るらしい。
D5だとequal言うんよね。

201 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 17:43:46 ]
あの、流れ無視でごめん。
所でDelphi2009は.Net対応?
みんなは.Netに移行するんですか?Win32維持ですか?
Delphiはその流れに付いて行っているんですか?


202 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 18:48:36 ]
いまのDel使いは.NETに乗り遅れた人達なんだよ・・



203 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 19:07:13 ]
oniguruma.pasに接頭辞Tで始まるデータタイプを定義してほしい。
もうね、
var
RegExp: OnigRegExp;
Windows.pasも例えばTLogFont = tagLogFont;と別名定義してんだし、
合わせろよ。
と、>>195に同意。


204 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 20:16:57 ]
>>188
ありがとう
居座ってた赤いの消すことが出来た

205 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:19:06 ]
VBSなRegExp風にラップしてくれ〜
あれが一番使いやすい。
ついでにコールバックによる置換なんかに対応してくれれば言うことない。

206 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:26:00 ]
「VBSなRegExp」がどんなのか分かったら暇なときにやらないこともない

207 名前:197 mailto:sage [2008/11/18(火) 21:56:01 ]
>>197
del5でもShortStringに変換して比較してた>AStrCmp
WideCharの比較でなんでShortStringが出てくるのかわからないけど、仕様ならしょうがないか。


208 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:58:34 ]
UnicodeStringへの添え字でのアクセスはShortStringになるのが関係ありそうでなさそうでありそう

209 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 21:58:57 ]
>>187
まあそれはそうなのですが、単純にブリッジ処理書くのが省ければなあ、
という用途で使おうと思ったら、
面倒くさい仕様なので残念!といったところなのです。

210 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 22:01:53 ]
Ordをかましたらどうだろ

211 名前:デフォルトの名無しさん mailto:sage [2008/11/18(火) 23:44:44 ]
Orz

212 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 01:18:28 ]
delphiで、一部の文字の色を変えるエディタって簡単に作れるの?



213 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 01:21:26 ]
>>212
そんなこと聞いてるあなたには簡単ではないでしょうね

214 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 01:33:40 ]
richeditで出来るだろ

215 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 10:12:46 ]
Delphi2009のバージョンアップ版ってインストール時に
前バージョン(Delphi4持ってる、2は行方不明)の確認ありますか?
VBとの比較検討用だったんでユーザー登録もしてないんだけど...


216 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 11:05:41 ]
おそらく前バージョンのユーザー登録してないならアクティベーション通らないんじゃないかな?
CDNのアカウントで認証してるみたいだし。サポートに問い合わせた方がいいかと。


217 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 21:33:50 ]
>>192
TObjBでイベントを定義して、ObjBを生成したときに
イベントハンドラとしてObjAのメソッドをを代入するのがいい。

ObjAの参照を持たせるよりも結合度を小さくできる。

218 名前:デフォルトの名無しさん mailto:sage [2008/11/19(水) 23:19:20 ]
特定のオブジェクトの参照を保持するのと、そのメソッドを保持するのと
結合度に差があるの? メッセージを送りたいんだから TObject の Dispatch()
を使えるし、だからすべてのクラスで参照を保持できたほうが汎用性の意味では
よりいいんでは?

219 名前:217 mailto:sage [2008/11/21(金) 01:04:58 ]
んー、どうだろね。
メッセージというのがwindowsメッセージやdelphiのディスパッチのメカニズムを
利用する話なら>>218で正しいと思うけど、>>189にはOOPの話と断りが入ってる。

OOPでのメッセージという用語はオブジェクト間のやりとりの総称なので、
メソッドの呼び出しなども当然に含まれる。俺はそういう理解で解答してる。

220 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 08:52:35 ]
>>186
なんかりんごの皮をチェンソーで剥いてる様な気がするのは俺だけ?

221 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 10:57:03 ]
そりゃ金の取れる芸のレベルだよ

222 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 10:58:45 ]
正規表現コンポに金使えばいいのか



223 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 11:12:54 ]
FreeMemにサイズを指定するメリットってあるんでしょうか?
Sizeが無指定だとちゃんと全部開放されないとかあるんでしょうか

224 名前:デフォルトの名無しさん [2008/11/22(土) 16:37:35 ]
Delphi6 Personal使ってます。
manifest適用時にTComboBoxのSelText、SelStart、SelLengthの値が
正しく取得できなくて困ってます。

Textに「あいうえお」と入力して「うえ」を選択したとき

SelText:
SelStart: 1
SelLength: 1

という結果が返ってきます。
半角だと問題ないのですが全角だとおかしくなります。

正しい値を取得するにはどうすればいいでしょうか?


225 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 17:31:56 ]
Delphi 2007でも同様の結果になるようですね。

226 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 18:26:08 ]
manifest適用しなければおk

227 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 12:04:15 ]
ユニコード対応のD2009じゃね?

Tntは修正が不完全だけど、一応使えるレベルだと思う。

228 名前:225 mailto:sage [2008/11/23(日) 13:08:12 ]
TNTComboBoxならSelStart/SelLengthは正常に取得できる。SelTextはTextをAnsiStringに
変換後に自前で変換すればいい。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption := Format('SelStart=%d SelLength=%d SelText=%s',
[ComboBox1.SelStart,ComboBox1.SelLength,
Copy(AnsiString(ComboBox1.Text),ComboBox1.SelStart + 1,ComboBox1.SelLength)]);
end;


229 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 13:16:48 ]
TNTって無料版の開発終わったよね

230 名前:225 mailto:sage [2008/11/23(日) 13:34:43 ]
まーでも古い版はダウンロード可能だし。mh-nexusさんとことか。でもDelphi 6 Personalは別版が必要かも?

231 名前:225 mailto:sage [2008/11/23(日) 14:01:52 ]
TNTは現在はTMSで売ってる。
ttp://www.tmssoftware.com/site/tmsuni.asp
個人なら30Euro(3600円くらい)。

232 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 15:08:16 ]
有料版でも直ってないそうですね
まあ、英語圏の人は他言語IMEなんて使ってないだろうし

FastCodeの中の人なんて、LowerCaseのTable作りに
CharUpperBuff使っただけで、「Ansi」StringReplaceとか言っちゃってるしなぁ



233 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 15:10:37 ]
いけね、UpcaseのTableだ

234 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 21:47:14 ]
>>230
そのままだとコンポが足りないのでエラーが出るけど
ちょっと書き換えればD6Perでも動くよ

235 名前:デフォルトの名無しさん mailto:sage [2008/11/24(月) 22:45:46 ]
DBとBandアクチョン削ればOKだったかな
で、必要な人はsoft-gemsのThemeManager入れる、と

236 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 18:14:27 ]
特待販売の葉書が来た。
久々にバージョンアップしてもいいかなぁと思ってるところ。
今C#を主に使用しているんだけど、Delphiならではのメリットっていうと、
VCLとネイティブコンパイルぐらい?

237 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 20:39:27 ]
バージョンアップしなくても「Delphiならではのメリット」は変わらんだろ・・

238 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:22:05 ]
昔、Delphi 7 では、デバッグでカーソルを変数に合わせるだけで値をインスペクトできた。

先日、Delphi 2006 を借りて使ってみたら、それができないじゃん。

新しい Delphi ではどうなっているのか知ってる人、どーか教えてくだしゃい。


239 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:40:42 ]
>>236
おれんとこにも来たな、特待販売の葉書。
見たら会社名に「エンバカデロ・テクノロジーズ」って書いてある。

 エン バカ デロ

は、日本じゃアウトだろフツー。

C++Builder でまともなプログラム組めたことなかったし、
Delphi 2005, Delphi 2006 も安定しなかったんでまともに使ってなかったし、
エン「バカ」デロ Delphi と C++Builder はマジで悩む。



240 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:42:04 ]
えっ?できますよ?

241 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:50:35 ]
>>239
うわぁ・・・

242 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 22:54:41 ]
>>239
安定しなかったってどういうこと?
ちなみに、Delphi7で業務アプリ作ったけど、その時は割と安定してたけどな。

Delphiで気になるのは、ネイティブコンパイルと、VCLかな。
ビジュアルコンポーネントの使い勝手は優秀だと思った。
StringListとかObjectListなどの非ビジュアルコンポも優秀だけど、

いまじゃC#でもList<String>とかで代用できてしまうし、
コンポーネントもVCLライクに仕上がって遜色ない出来になってるしなぁという感じで悩む。
ま、.NETFrameworkがないと動作しないのは相変わらずなんだけど。





243 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:33:59 ]
Delphi7は安定していたが、Delphi 2005は統合環境がなぜかフリーズしまくり。

Delphi 2006 はコードエディタな若干不安定で、箱形コピペなどすると、ずれ
てペーストされる。また、何もしなくとも、しばらくするとCPUを食うよ
うな処理が統合環境内部で起こる。そして、Delphi7より何か重たい。
また、>>238 のように、デバッグでカーソルを変数に合わせるだけで値を
インスペクトできない。(あれは便利だった!!!!)

これらの現象は、コードギアが提供したパッチを当ててもダメだったんだな。
そんで、今もDelphi7を使っているんだよな、おれ。

ただし、どこかにあったGoogleMap を組み込んだデモだけは、Delphi7では
コンパイルできなかったのでDelphi 2006 で試したらうまくいった。

ハーア、何かうまくゆかないもんだな。

244 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:38:21 ]
>>240
>えっ?できますよ?
えっ?できるの?


245 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:46:46 ]
>244
>238のことですよね?できますよ。もちろんローカル変数ウィンドウでも評価ウィンドウでも見られますけど、
変数にカーソルをあてるだけでインスペクションできるし、最近のものでは構造体のメンバやポインタの
示す先を追っていくこともできます。できないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?

246 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 23:47:58 ]
× できないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?
○ Delphi5以降でできないバージョンは(Personal/TurboExplorerを除けば)ないんじゃないかな?


247 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 00:00:42 ]
>>238 >>244
「メニュー」ツール → オプション 

「オプションダイアログ」 エディタ設定 → 支援機能 → ツールチップ式評価 をチェックでOK

デバッグの機能なんだけど、「デバッガオプション」ではなく「エディタ設定」にあるのがミソ


248 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 12:33:02 ]
IDEが不安定ってことなのか。
いつからかIDEが.NET上でしか動作しないようになったんかな。
若干、重いイメージは確かにあったけど。
ネイティブで動作させることを目的としなければ、VS2005移行で十分に
Delphi並のRAD環境になってるから、選択に難しいところではあるよね。

249 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 12:58:37 ]
IDEは.Netだけど、コンパイルされるコードはネイティブ。

250 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 14:05:53 ]
D2009はIDEはネイティブでそ?
ヘルプのために.NETがいるだけで

251 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 14:30:54 ]
Delphiって算術シフトの演算子ってないの???


252 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 14:35:28 ]
shlとshr



253 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/26(水) 17:34:36 ]
>>251
ビットシフトこのとでしたら shl、shr で。
綴りで分かるかもしれませんがそれぞれ左シフト(SHift Left)と右シフト(SHift Right)。


254 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/11/26(水) 17:35:51 ]
って一番下の252が見えてなかった…すいません


255 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 18:56:32 ]
ファイルの先頭からあるバイト目からをMemoに読み込むにはどうしたらよいのでしょうか?

というのも、ファイルの先頭にいらない物が付いていてそのまま


256 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 18:59:58 ]
途中送信してしまった・・・orz
ファイルの先頭からあるバイト目からをMemoに読み込むにはどうしたらよいのでしょうか?

というのも、ファイルの先頭にいらない物が付いていてそのまま
Memo1.Lines.LoadFromFile(Filename);
とやっても文字化け?して読めないんです。
でもその無駄なのを取り去ってやるとMemoに読み込めます。

257 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 19:14:15 ]
>>256
それはウニコードだね

258 名前:デフォルトの名無しさん mailto:sage [2008/11/26(水) 20:13:55 ]
>>256
TFileStreamとかAssignFile・Seek・Readで読み出せばいいはず
TFileStreamの方が簡単・VCL的なのでおすすめ
procedure TForm1.ButtonClick(Sender: TObject);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite);
try
Stream.Seek(10, soFromBeginning);//10バイト飛ばして読む
Memo1.Lines.LoadFromStream(Stream);
finally
Stream.Free;
end;
end;

>>257
うんこーどと断定できるとかすげえな

259 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 01:16:21 ]
Delphi 2006でコンポーネントのインストールをしたい。

だが、「コンポーネントのインストール」がメニューから消えており、
HELPで「コンポーネントのインストール」を検索すると

  『コンポーネントコンポーネントのインストール』
  このダイアログボックスでは,コンポーネントを新規パッケージ
  または既存のパッケージにインストールします。

とある。
いったい、どうやってダイアログボックスまでたどり着くのだろう?
どなたか教えて下され。


260 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 01:47:15 ]
>>259
2006のヘルプを見ろよ
>すべてのコンポーネントはパッケージとして IDE にインストールされます。したがって,
>ユーザー自身がコンポーネントを作成するときには,まずそのコンポーネントを入れる
>パッケージを 作成してコンパイル する必要があります。コンポーネントのソースコードは,
>コンポーネント作成の概要 で説明されているモデルにしたがって記述する必要があります。

261 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 10:21:20 ]
>>260
なるほど、Delphi2006は 「ファイル」メニュー から辿ってパッケージを作るようになってたんだ。

Delphi7では 「コンポーネント」メニュー からいきなり「コンポーネントのインストール」ができ、そこで
パッケージを新規に作成してたんで(これには)気付かなかった。Delphi2006のように
パッケージ・プロジェクトとして開発する方が、Delphi7のときよりも少しだけ楽だね。
助かった。ありがとうございました。

262 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 12:57:36 ]
Turbo DelphiでFastMM4.90を利用しています。

デバッグ時にステップ実行していると、メモリの確保や解放時などFastMMのソースに飛ばされます。
これを無視したい(デバッガがFastMMのコードまで追わないようにしたい)のですが、どうすればいいのでしょうか。



263 名前:262 mailto:sage [2008/11/27(木) 13:03:36 ]
とりあえず、コンパイラ指令の{$D-}をFastMMのソースに加えることで抑制しました。

264 名前:デフォルトの名無しさん mailto:sage [2008/11/27(木) 13:33:23 ]
ソースに飛べないようにすればいいじゃない
削除するなり移動するなり

265 名前:デフォルトの名無しさん mailto:sage [2008/11/28(金) 12:38:27 ]
>>264
そーすると、例外が起きるたびにソースを要求されるそーすよ。

266 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 13:19:11 ]
そーすね

267 名前:デフォルトの名無しさん mailto:sage [2008/11/29(土) 14:04:42 ]
            ___
          ,,r''"´    `"''-,,
        / ノ   ヽ、    \
         / ( ● )   ( ● ) ヽ  ヽ
        i゛ :::⌒(__人__)⌒:::  ヽ  ゛i
      l     |r┬-|       l  ノ    そーなんすかwww
        !     | |  |      レ'
      l   l  | |  |   l  , l
      |   l   `ー'´    |  l l
        !   l        ,!  | l
      l   ゛i       /  l i゛
      ゛i   ヽ     /   / /
       ヽ,__,,,ゝ    く  ノ /
        ヽ       ゛" /     __
       _  )      、(二"'''ー'"ー'__゛゛ヽ
     r'   ̄           ̄ヽ,)‐-,,_ ´┴'ノ
     ヽ__,,-──-、__,ノ  


268 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:34:14 ]
FastMMがいつの間にやら新しくなってたので落とそうと思ったらアカウントが必要になってたのね
そう思って登録しようとしても、必要事項書いてRegistration押してもその後何にも起こらん
どうすりゃいいの?メール来るのかと思ったら来ないし

269 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:38:09 ]
とりあえずお前が英語苦手だってことは理解した

270 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:41:19 ]
>>268
ダウンロードにパスなんて必要ないんだけど

271 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:41:46 ]
パスじゃなかったアカウントだ

272 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:52:54 ]
あれー?Download押すとトップページに飛ばされるから
そう思ってた。俺だけ?



273 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 10:58:33 ]
sourceforge.net/projects/fastmm/→Download→FastMM 4.92→FastMM492.zipだろ?
どこで踏み外せばいいんだ

274 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 12:18:31 ]
すぐ上で言ってるとおり、Downloadだよ
俺だけのようだ…会社でも家でも同じだったんだよなあ
なんでだろ

275 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 12:22:10 ]
ブラウザのせいだったようだ
すまんです

276 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 12:26:34 ]
どんな糞ブラウザ使ってんだよw

277 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:40:11 ]
Turbo Delphiを使用しています。

ローカルバックアップの保持ファイル数の上限を増やすことはできるでしょうか?。
私の環境では、どうも100個くらいしか保持してくれないようです。
これを1000個くらいまで保持してくれれば、個人的にはだいぶ楽になるのです。

よろしくお願いします。

278 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 13:43:03 ]
あまりそれでがんばらずに素直にバージョン管理システム使ったら。
TortoiseSVN + pdumpfsの組み合わせて使ってるけどソース紛失で泣く事はなくなったな。

279 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 14:02:22 ]
>>278
どうも。

IDE標準の、変更のたびにバックアップが作成されるというのは、
利点でもあり弱点でもありますね。

トイレに行った後、レジストリの方も調べてみましたが、
BDS-4.0-Editor-OptionにあるFile Backup Levelというキーで、
上限を増やせるようです?(実際に増えるかは未確認)。

当座はこれでしの(げるならしの)ぎます。教えていただいたソフトウェアについても、
調べてみたいと思います。ありがとうございました。

280 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:00:56 ]
かなりくだらない質問なんですが
皆さんbegin...endのbeginをどこにで書いてますか?
例えば
if hoge then
begin
hage;
end;

とか

if hoge then begin
hage;
end;

281 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 22:07:05 ]
>280
俺は上派だな。elseがある場合は下みたいな感じ。

if hoge then
begin
end else if mage then
begin
end else
begin
end;


VCL内でも統一した書式はないと思う。

282 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:55:55 ]
懐かしい議論だ。俺は下派。



283 名前:デフォルトの名無しさん mailto:sage [2008/11/30(日) 23:58:51 ]
使ってるモニタ次第
UXGAでちまちま詰める必要はないし
ノートで縦にだらだら書いてたら確実に生産性が低下する

284 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 00:02:59 ]
モニタでいちいち書式かえたらよけい生産性が下がるわな・・

285 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 00:15:54 ]
以下のような書き方してる。
if hoge then begin
end
else if uge then begin
end
else then
end;
って書いてる。
ifのブロックとelseのブロックがend挟んで分離されるので、一目でどこまでがifのブロックか見分けることができると思う。

ただし、hogeが長くなったり複数行になる場合は、例外として、
if (hogeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee)
and (ugeeeeeeeeeeeeeeeeeeeeeeeeeeeeee) then
begin
end;
としてる。

beginが右の方に行き過ぎて、書いたかどうか分からなくなるから。
もし本当に書き忘れたり、うっかり削除すると、endの対応が一致しないってエラーに悩まされる。あと、思い込みのミスもあるし。
前回のコンパイルから時間が経ってると、どこ直したか忘れて、一カ所ずつ探すはめになるので。
こまめにコンパイルすればいいんだけど、気持ちよく書いている時って、しばしば忘れるんだよね。

また、質問と外れるけど、
if hoge then
syoti1;
syori2;
って書いちゃって、なんでsyori2が常に走るんだって、悩むことになるから、if hoge then Exitのような単純な場合を除いて、ぶら下がりインデントは使用しない様にしてる。
基本的には、自分は間違っていない!という思い込みのミスを避ける方向に書くようにしてる。

286 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 01:56:00 ]
パスカルの生みの親ビルトが頭弱かったから、汚い begin end がプログラムを醜くしてしまった。
単文、複文なんて、関係ないのにね。
まあ、おいらもバカだが、if 文は次のようなものが分かり易いと思っている。

<else 句がない場合>    <else 句がひとつある場合>    <else句が複数ある場合 ※ef はelseifの意>

if 条件式 then       if 条件式 then           if 条件式 then
  文                文                    文
endif              else                   ef 条件式 then
                    文                    文
                 endif                  ef 条件式 then
                                         文
                                      else
                                         文
                                      endif



287 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 01:59:08 ]

でも、endif も ef も予約語にないから、そこでおいらは次のようにしているんだ

<else 句がない場合>    <else 句がひとつある場合>    <else句が複数ある場合>

if 条件式 then begin   if 条件式 then begin       if 条件式 then begin
  文                文                    文
end               end else begin           end else if 条件式 then begin
                    文                    文
                 end                   end else if 条件式 then begin
                                         文
                                      end else begin
                                         文
                                      endif

これで begin end に目を奪われにくくなるんで、ちょいバグだしにくくなったかな(って気がしてるだけかも)。

288 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 02:04:49 ]
>>286 で書き忘れたけど、式の中の「文」は、単文でも複文でもいいと思ってくれ。

289 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 10:31:39 ]
if 条件 then
begin
end
else if 条件 then
begin
end
else begin
end;

よくこういう議論を見かけるが、俺と同じやり方の奴って
見たこと無いんだよなー

290 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 10:32:54 ]
お前は俺か

291 名前:280 mailto:sage [2008/12/01(月) 11:43:21 ]
皆さんありがとうございます。
よくbegin...endの数が合わなくてエラー出てたもんで皆さんはどんな感じで書いているのか気になったんです。
教えていただいたものを色々試してみたいと思います。
とても参考になりました。どうもありがとうございました。

292 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 11:44:03 ]
それはお前の頭が悪いww



293 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:02:36 ]
でもさ、前々から思ってたんだけど、
ALT+[とかで対応する括弧は追えるのに
なんでbegin/endは追えないんだろ?

294 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:03:28 ]
>>287
くだらねぇ、気持ち悪いルール使ってんじゃねぇよ。基本はdelphiならVCL、JavaならJavaのクラスライブラリ
のソースに合わせろよ。おまえらなみたいな奴のソースは見苦しくてかなわんわ。



295 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:43:40 ]
こういうのが沸くからアンケートネタはWikiの投票pluginかなんかを使ってやってくれ

296 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 14:32:29 ]
以下のように記述するのが正式だというのを海外のサイトで読んだことがある。
if 条件 then

else
if 条件 then

else
文;

if 条件 then
begin

end
else
begin

end;

文が短い場合は
if 条件 then 文 else 文;
って書いちゃうけどね。

297 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 15:08:49 ]
書き方に正しいも糞もあるかよww

298 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/01(月) 16:29:02 ]
>>286
QuickBASICやVisual Basicではまさにそんな感じの構文になっていて使いやすかったです。

>>293
C/C++の { } ほどの地獄ではないからかもしれません。


299 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 17:54:25 ]
>>286 のおいらだが、おいらが C++ 使いだったころ、次の#define プリプロセッサで >>286 の構文が
コンパイラー通るようにしていたんだ。

#define if     if(
#define then   ){
#define else   }else{
#define ef    }else if(
#define endif  }

てな感じだったけかな(?)。しばらくやってないんで忘れてしまったけどね。その他 for(;;) 構文なんかも
「 for 初期値 to 終了条件 step 増加式 do 文 endfor 」とか if と同じ要領でやっていた。
プログラムがスッキリしてたね。なんせ、おいら if や for の後の ( ) が大嫌いだったからね。
これいらないと思う。C言語作った男もおいらに負けず相当オタンコナスだね。
まあ、この構文(>>286)でソースコードを渡すと、相手はビックリしてたっけ。おいらもかなりバカだね。


300 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:05:19 ]
融通が利かない人はどんな職業でもいい発想ができない。


301 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:30:57 ]
case ofのかっこいい書き方を教えれ
どうもelseだけしっくりこなかったりする

302 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:43:44 ]
たしかにcase文はうざい



303 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 19:50:59 ]
case n of
    1:
        foo;
   
    2:
    begin
        bar;
    end;
   
    else
        baz;
end;

304 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 20:13:24 ]
case n of
1:
foo;

2:
begin
bar;
end;

else
baz;
end;

305 名前:Delフサギコ ◆A6VzDeLphI mailto:sage [2008/12/01(月) 21:52:39 ]
  ∧,,∧∩  おれ、こんなん。
 ミ,,゚Д゚彡
 ミ つ旦.ミ  
   if then
   begin
   end else
   if then
   begin
   end else
   begin
   end;

if が何個ならんでも、行頭を揃えたい気がするのです。
Caseはいつも悩む。
ifを、caseに変更したときに、begin...endをわざわざ
インデント変更したくないから
  case A of
  B:
  begin
  end;
  C:
  begin
  end;
  end; //case

かな。。行が増えすぎと、caseのendとbeginendが分けにくくていやなのだが。。

306 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:27:22 ]
おいらも case 文は苦手だったな。どうやってもキレイに書けない。しかし、だいたい次のようにやってた。(case の範囲を字下げではっきりさせたいんだな、おいら)

case A of
  B: 文  
  C: begin
      文;
      文
    end
  D,E: 文
  else 文
end

case 文を 「case A of :値: 文 :値: 文 end 」とビルトが設計すればよかったかもね、次のようにスッキリする。(「文」は単文でも複文でも可だよ)
case A of
  :B:  文
  :C: 文;
     文
  :D,E: 文
  else 文
end


307 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:34:44 ]
気持ち悪い

308 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:42:18 ]
caseの中はcaseより引っ込める
ラベルの中身も引っ込める、begin-endの中も引っ込める
ラベルの後ろにbeginを書くと、対応するendもおなじインデントに書きたい
横に伸び〜

309 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:43:14 ]
case〜endの間を字下げで解決。

310 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:44:53 ]
typeのクラス宣言内のprivateなprocedureとか、自動生成で変なインデントを付けられた日にはもうー

311 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:47:30 ]
record型のconstの配列の初期化の記述がめんどくさい
コンパイラサボりすぎ

312 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 23:51:10 ]
>>308
おいらもおんなじ気持ちだけど、これやるとインデント深くなるんだよなあ。
だからおいらはインデントをスペース3文字分にしてるんだが、それでも深くなる。
これがインデントがスペース8文字分で表示された日にゃー目がぶっ飛ぶ。




313 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 08:08:53 ]
え!Del党ってインデントはスペース2文字でしょ。


314 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 08:42:41 ]
オレは2文字だな。
if 〜 then begin
 文
end else if 〜 then begin
 文
end;

case i of
 1 : begin
    文
   end;
end;

315 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 08:51:14 ]
caseとelseとendをそろえてる。
caseに関しては自動インデントを使わずなるべく詰める様にしている。
17インチCRTからの流れで横も縦も圧縮する様な書き方になってしまった。
ifなんかでも改行してbeginの方が見やすいのに。

316 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 09:22:53 ]
>>305
ifが常に行頭だと、別のif分と区別がつきにくいから嫌だな

case分は無駄にインデントが増えるな

case hoge of
 A:
  begin
  end;
 B:
  begin
  end;
 else
end;

これでやると、else内だけインデントがずれるのがむかつく

317 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 09:23:34 ]
if分、じゃなくてif文だし、case分じゃなくてcase文
orz

318 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:01:35 ]
>>313-314
インデント2文字でやってみたことあるんだけど気に入らなかったんだな、おいら。
なぜかっていうと、(一番多用される)if文のときインデント2文字だと

i f a = b then begin
c:= 2;
........

のようになって、この例で説明すると変数 a と c の頭が揃わないので美しくない。それに
if の近くに変数 c がありすぎて if が窮屈に見える。これをインデント3文字にすると

i f a = b then begin
  c:= 2;
  ........

となって、こっちの方がスッキリして見えるんだな、おいらの目には。(if文重視なんで)
まあ、バカなおいらの好みだけどね。
そんで、クラス宣言の自動生成がインデント2文字固定なんで、苦労してる。

319 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:05:18 ]
秋田

320 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 11:07:07 ]
>>318 の最初の例が崩れてたから訂正するね。

if a = b then begin
 c:= 2;
 ........

(2ちゃんは左側の半角スペース取っちゃうんだよね.....。)

321 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 13:14:15 ]
インデントは2文字。
if文は>>305に同じ。
大規模なcase文などではソースを折りたためるようにREGIONを使う。
case hoge of
 A: {$REGION '説明'}
 begin
 end; {$ENDREGION}
 B: {$REGION '説明'}
 begin
 end; {$ENDREGION}
else
end;

322 名前:321 mailto:sage [2008/12/02(火) 13:19:47 ]
あ、if文は>>305とは微妙に違った。
if then
begin
end
else if then
begin
end
else
begin
end;

個人的には、else(else if) 〜endまでの処理を消したり、
begin〜endまでの複数行の文を単数行の文に書き換える際に自然だからこれで落ち着いた。



323 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 18:24:36 ]
どうせソースの書き方なんて十人十色なんだからいい加減飽きろよ

324 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 18:26:21 ]
新しい話題を提供しろよw

325 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 18:36:34 ]
>324
「CodeGear RAD Studio 2009 日本語版」販売開始だって

326 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:47:10 ]
delphiはなかなか良い言語だとは思うけど
C++ライクに記述できるような仕組みがあれば、いいなぁ。
あと、delphiにC++を埋め込めるようにできれば、なおよし。
begin〜endはうざい。
あと、function/procedureと区別する意味がわからん。
C++歴5年、delphi歴3ヶ月より。


327 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:52:56 ]
C++に、Pascalライクに記述できたらいいなあ。
なんて言われたら、ウザッとか思わない?

328 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:55:28 ]
DLLとかC++ Builderとか使えば出来るけどね

329 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:55:43 ]
>>327 そんな需要はないから。
delphiでC++ライクに使えれば、ポインタ使いまくれるし
C++脳の人間にとっては、とても楽。


330 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:56:14 ]
でもちょっと違うか

331 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:56:52 ]
>>329
それは工夫が足りないんじゃね?

332 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 21:59:10 ]
C++記述するときにはいつも
「もっとDelphiライクなら・・・」
って思っちゃう俺はアホなのかもしれん^^;



333 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:00:59 ]
じゃあおまいらどんな記述がいいのよ

334 名前:デフォルトの名無しさん [2008/12/02(火) 22:21:56 ]
教えてください。

既存のプロジェクトなのですが、DataModuleのSession,Aliasのアイコンが半透明に
なっています。
実行するとデータベースに接続するところで異常終了します。
つなげるべきデータベースはわかっているのですが、どのように設定したらよいので
しょうか。


335 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:28:21 ]
Pythonが綺麗って言われてるよね。

Delphiと似てるからすぐに使えるようになるよ。

336 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:28:27 ]
begin
end

{
}
ならDelphiが無敵

337 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 22:34:17 ]
if True then {
MessageBox(Handle, 'test', 'test', MB_OK);
};
こうですか分かりません><

338 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:07:14 ]
むしろBegin〜endの方が俺は見やすくて好きw


変態ですので

339 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:10:48 ]
Begin〜endよりbegin〜endのがよっぽど見やすい

340 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:48:59 ]
細かいやつって嫌われるよな

341 名前:デフォルトの名無しさん mailto:sage [2008/12/02(火) 23:58:26 ]
C++のコードは見づらい

342 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:01:42 ]
>>340
C++は嫌われて無いじゃないですか



343 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:38:28 ]
CoolBarの行を1行固定にしたいんだけどどうすればいいの?
アイコンバンド1、アイコンバンド2、検索窓の3つ設置。
実行してCoolBandを弄ってると必ず2行目が出来てしまう。

344 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 00:42:07 ]
C++ の :: と -> がウザイ。


345 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 01:02:04 ]
俺も

346 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 11:57:27 ]
フォーム上の末代までのコントロール数をカウントする方法ってあります?

347 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 12:12:58 ]
Form1.ComponentCount
子供の子供まで数えたい時はComponents使って再帰とかすればいい
function CountFunc(Compo: TComponent): Integer;
var
I, Count: Integer;

procedure SaikiFunc(Compo: TComponent);
var
I: Integer;
begin
for I := 0 to Compo.ComponentCount - 1 do
begin
Inc(Count);
SaikiFunc(Components[I]);
end;
end;

begin
Count := 0;
SaikiFunc(Compo);
Result := Count;
end;

348 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 15:51:56 ]
教えてください。

Nscripterで集積エフェクトを使いたいのですが,

lsp 0,"****.jpg",208,32
print 99,3000,"breakup.dll/ulP"

これだと左,中央,右の指定ができず困っています。
どうしたらいいですか?

349 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/03(水) 18:01:45 ]
>>347
それだと非ビジュアルコンポーネントまでカウントしてしまうので
> if Components[i] is TControl then
みたいに絞り込むか ControlCount/Controls を使うと良いと思います。

>>326
Delphiはプログラミング教育用に生まれたPascalの血を引いた言語ですから
わかりやすさを捨てることはないでしょうね。

逆にPascalのbegin〜endがうざかった人間が作ったのがCですから
突き放したような結論で恐縮ですが
「Delphiのbegin〜endがうざいならCPB使え」
ということになってしまうのではないかと思います。
(…なあんてことを書いたときに限ってDelphi2010あたりで{}が実装されたりして)


350 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:11:09 ]
そういえば昔、SQL Anywhere というデータベースを使ったことがあったが、
そのストアードプロシジャーは if文が
  if 条件 then 文1 else 文2 end
という構文で、文1と文2は単文でも複文でも begin end が不要だったな。
ありゃあ見やすいし、書きやすかった。
begin end や { } なんて過去の遺物、消え去るよ。

351 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:19:41 ]
graphics32ってMPL1.1ですけど、改造しないで普通に使用して公開する場合は
ソースを公開する必要はないと聞きますけど
ここの ttp://ja.wikipedia.org/wiki/Mozilla_Public_License
特徴のところで
バイナリ形式で配布する場合には、ソースをバイナリと一緒に公開しないと
いけないみたいな事かいてるんですけどどっちが本当ですか?

352 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:39:55 ]
>>349

どれのことだ

ja.wikipedia.org/wiki/CPB

CPB

* ビルマ共産党
* キャンベル・スープ・カンパニーのNYSEコード。
* 公共放送機構 (Corporation for Public Broadcasting)
* セントラル・パシフィック・バンク



353 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 21:57:27 ]
BCBだな

354 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 22:42:57 ]
>>351

Delphi持ってるならGLSceneを使え
pc11.2ch.net/test/read.cgi/tech/1163269079/

の 25 辺りから見るとよいよー

355 名前:351 mailto:sage [2008/12/04(木) 04:45:25 ]
>>354
やっぱりソースは公開しなくても良いんですね
おかげでスッキリしました、ありがとうございます

356 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/04(木) 16:30:30 ]
すいません、思いっきり略称間違えました… orz


357 名前:デフォルトの名無しさん [2008/12/05(金) 02:03:30 ]
onKeyDown や onKeyPress などを使って、
『キーの同時押し』を検知する方法ってありますか?

たとえばAlt + Tab を検知するなど。

358 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 02:36:22 ]
Downならif Shift = [ssAlt] thenで

359 名前:デフォルトの名無しさん mailto:sage [2008/12/05(金) 18:41:49 ]
GetAsyncKeyStateはだめ?


360 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 00:02:20 ]
同時押しの検出ならGetKeyStateかShiftパラメータでは?

361 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 09:00:10 ]
Del7+Win2000
フォームを半透過指定してフォーム上のコンポーネントは非透過ってのは可能?
Transparentみたいな色指定透過っぽい感じ

362 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 10:45:21 ]
Pascal を C++ っぽくしろって、
日本語は英語と同じ文法にしろっていうような門やん



363 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:16:53 ]
>>362
Begin...Endの事?
そうは思わないな…
日本語だって英語の良いところはカタカナという形で吸収するんだから
コメントと文法くくりはBegin、{両方サポートしてくれたら私もうれしいな。
でもそうなると過去のソースが動かなくなるわけで、そこまでして言語仕様を拡張することには反対
結果として{は無理だと思うけど。
コンパイラ指令で切り分けできたら面白いすね、デフォルトはOFFで。

364 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:45:26 ]
TEditの枠線の色を赤色に変えるにはどうしたらいいでしょうか?
よろしくお願いします。

365 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 15:51:45 ]
OSの管轄なので無理
あるいはオナニードロドロ

366 名前:364 mailto:sage [2008/12/06(土) 15:58:30 ]
早速回答ありがとうございます。
ちょっと変えてくれと言われたんだけど厳しそうだし、
見た目の問題だけなのでそのまま放置しますw

367 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 16:00:53 ]
>>364
一回り大きいPanelに乗せてPanelの色を変える

368 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 16:12:37 ]
>>366
ならそいつにVSでも変えてろハゲとでも言ってればいい希ガス

369 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 19:18:45 ]
Delphi2006でヘルプを使いDelphi終了すると、タスクにdexplore.exeが残り、
再びDelphi2006起動してヘルプを使いDelphi終了すると、タスクにdexplore.exeが2つ残り、
とドンドンdexplore.exeがタスクに増えて行きます。(OSはXPです)
これって、メモリーけっこう食ってますが、Delphiのバグでしょうか?


370 名前:デフォルトの名無しさん mailto:sage [2008/12/06(土) 21:16:21 ]
dexplorerのバグでしょう、きっと。

371 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 09:41:05 ]
VS だとそんなことないから Delphi のIDEのバグじゃないの?

372 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 11:49:41 ]
食わせてるデータがまずいからだとは思うんだけど、それで逝っちゃうようなのはやっぱりバグだと思うんだ。
DelphiのIDEはDExplorerをキックしてるだけだしね。ちなみにXPで発現することが多いみたい。



373 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 16:17:50 ]
Borland Developer Studio 2006 (Professional)をデフォ状態でDelphi使うと
ヘルプにC++の内容まで検索されてウザイ。
C++の内容が検索されなくなる設定ができるかどうか調べても未だに分からない。
どなたかHELP!


374 名前:デフォルトの名無しさん mailto:sage [2008/12/07(日) 19:34:12 ]
それが円馬鹿クオリテー

375 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 02:15:33 ]
フィルタ条件ではあかんのか

376 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 09:20:16 ]
6とかだとヘルプファイルの検索対象の範囲とか設定できるんだけどねぇ‥‥
CLXのヘルプ外したりとか。

377 名前:デフォルトの名無しさん mailto:sage [2008/12/08(月) 11:59:47 ]
ヘルプはひどいな
リンクも不十分だし、欲しい情報になかなかとべん

378 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/08(月) 17:35:10 ]
旧ボーランド時代からヘルプは良くなかったですねぇ。
初代Delphiの頃はまだ良かったのですが…

>>367
さらにEditを枠無しにしたら完璧ですね。


379 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 16:44:35 ]
>>378
やってみたけど枠を消すと文字がずれて、枠有りの状態のようにはいかなかった。

380 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/09(火) 17:47:19 ]
確かにうまくいきませんでした。

赤パネル
 Editと同じ色のパネル
  Edit

の三段重ねでEditの位置を調整してなんとかそれらしく?なりましたがなかなか骨の折れる作業です。
複数貼り付けるならアンカーを使ったり赤パネルの代わりに赤フレームにすると作業効率は多少ましになるかもしれませんが
AutoSizeが利かなくなるのかフォントサイズを変えてもウィンドウサイズが変わらないのはつらいですね。


381 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 18:32:27 ]
そんなことするよりTCustomEdit継承して新しく作った方が楽じゃない?

382 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 20:53:08 ]
初心者質問お願いします。
DateTimePickerにMaxDateを設定している時、
プログラムでDateTimePickerのDate プロパティにMaxDateと同じ日付を代入することはできないのでしょうか?
手動ではMaxDateの日付を設定できます。
当方Delphi4です。

〜例〜
(MaxDate は2008/12/31と設定している)
DateTimePicker1.Date := StrToDate('2008/12/30'); ・・・日付が反映される
DateTimePicker1.Date := StrToDate('2008/12/31'); ・・・日付が反映されない
DateTimePicker1.Date := StrToDate('2009/1/1'); ・・・日付が範囲を超えているとエラーが出る
(手動で2008/12/31を設定することはできる)



383 名前:デフォルトの名無しさん mailto:sage [2008/12/09(火) 21:23:34 ]
TEdit も TDateTimePicker もウィンドウズのコントロールだから、その機能は
本質的には Delphi と関係ない。MSDN 読むほうがいい。 >>381 は馬鹿回答。

384 名前:382 [2008/12/09(火) 21:49:28 ]
>>383
そうでしたかぁ。
ありがとうございました。


385 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 00:48:07 ]
>382
Timeプロパティに何が入ってるか確認したほうがよいかも。

386 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 08:21:07 ]
>>373
俺も2006でDelphiだけが表示される正式なヤリ方がしりたい。

前にどこかを見てやったときは、ヘルプのアプリ?がバグバグで
設定したのに設定したことにならなかったり嫌になった覚えがあるな。
しかし、どうやって設定したか憶えてなくて困る。
Delphiヘルプのみってのが確かできたはずなんだが。

6の時はテキスト弄るだけで簡単だったけどな。

387 名前:382 mailto:sage [2008/12/10(水) 13:20:42 ]
>>385
Timeプロパティを00:00:00にしたら正しく動きました!
ありがとうございました!

388 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 00:17:14 ]
TEditの枠のありなしでサイズが変わるのはVCL内で実装されているから、
継承してサイズが変わらないようにすればおk
それ以前にコントロールは自分でも描画できるから、簡単に枠を描画することが可能
↓にサンプルがある
www.delphipages.com/threads/thread.cfm?ID=171344&G=171334
VCLはただWindowsコントロールをラップしてるだけでなく独自のコードも追加してるし、
>>383はかなり見当違いの回答なので初心者は参考にしないようにね

389 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 00:22:03 ]
2006ではDelphi以外のHELPも(親切に)表示するのが仕様ということでハイ {{{{(+_+)}}}}。
(アーーーーめんどくさい)
しかし、こんな簡単なことがデフォでできてないなんて、何なのこの会社?

390 名前:デフォルトの名無しさん [2008/12/11(木) 00:24:47 ]
教えてください。MediaPlayerを使って1から9までの動画をランダムにつなげて流すというプログラムを作っています(例えば2→5→8→1→3→9→4→7→6の順番で動画を流してくれるようなプログラムです)
とりあえず作ってみたのですがボタンを押してもうんともすんとも動きません。ここが間違ってる、こうしたら良いなどのアドバイスをいただけたらと思います。よろしくお願いします

var
cou,new,test,i:Integer;
video:Array[1..9]of integer;
procedure TForm1.Button2Click(Sender: TObject);
begin
cou:=cou+1;
if cou>9 then exit;
Randomize;
new:=Random(10);
repeat
test:=0;
For i:=1 to cou do
if new=video[i] then test:=1;
If test=1 then new:=random(10);
until test=0;
video[cou]:=new;
MediaPlayer2.FileName:=ExtractFilePath(application.ExeName)+'tabidachi'+IntToStr(new)+'.wmv';
MediaPlayer2.Open; MediaPlayer2.Notify:=True; MediaPlayer2.Play;

procedure TForm1.MediaPlayer2Notify(Sender: TObject);
if (MediaPlayer2.DeviceID <> 0) and (new < 10) then
begin
MediaPlayer2.FileName := ExtractFilePath(application.ExeName)+'tabidachi'+IntToStr(new)+'.wmv';
MediaPlayer2.Open; MediaPlayer2.Play; Inc(new);
end;

391 名前:デフォルトの名無しさん [2008/12/11(木) 00:44:39 ]
宿題でダイヤモンドパターンのプログラムがあるのですが教えてください!!!!

392 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 00:45:27 ]
couの初期値って何なの?



393 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 03:01:18 ]
>>388 そうなんですか。それで変な動作をするんですね・・ TEdit くらい単純なラッパーの方がいいのに。

394 名前:386 mailto:sage [2008/12/11(木) 10:02:34 ]
ヘルプの編集思い出した。
編集というか、デフォルトのフィルタを変更するだけだけど

「ヘルプ」→「フィルタの編集」
(フィルタなし) を選択して、例えば以下を突っ込んで Save

("DevLang"="Delphi") OR ("DocSet"="bds_Win32") OR ("DocSet"="PSDK") OR ("DocSet"="indy")

これで、デフォルトでDelphiとBDS Win32とPlatformSDK、Indy 10からしか検索されない。

根本的にいらないヘルプをはずすわけではなく、
実質、起動時にフィルタを選択しているのでヘルプ起動時少し重いが難

395 名前:386 mailto:sage [2008/12/11(木) 10:06:04 ]
根本的に削除する方法みつけた。これでいけるんじゃね?

ヘルプを登録しなおすには:某所:So-net blog
bousyo.blog.so-net.ne.jp/2006-01-09

某所 - C++Builder のヘルプを削除するには
bousyo.blog45.fc2.com/blog-entry-91.html


396 名前:386 mailto:sage [2008/12/11(木) 10:08:25 ]
ああ、やべえ、 >>394 はやらん方がいいわw
(フィルタなし) に Saveすると、以下の様にでて元に戻せなくなるわw

---------------------------
Windows Internet Explorer
---------------------------
Filter cannot be saved without a definition
---------------------------
OK
---------------------------

欠陥ヘルプww

397 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 10:22:02 ]
>>396 の問題は、deleteで(フィルタなし)を削除しようとしたら大丈夫だった

>>395のヘルプの編集はうまくいった。
以下C++と.NETの削除の方法 for Vista。

まずは、適当なフォルダに %PROGRAMFILES%\Borland\BDS\4.0\Help\Common\mergeWin32.xml をコピー。
以下のパッチを当てる。(といっても該当行を削除するだけ)

--- mergeWin32.org.xml  2005-11-14 10:00:00.000000000 +0900
+++ mergeWin32.xml      2008-12-11 10:12:02.910931700 +0900
@@ -10,16 +10,13 @@
 <CompiledIndex>Help\Win32\bds4Win32devguide.HxI</CompiledIndex>
 <CompiledIndex>Help\Win32\bds4Win32tasks.HxI</CompiledIndex>
 <CompiledIndex>Help\Win32\bds4Win32api_win32.HxI</CompiledIndex>
-<CompiledIndex>Help\Win32\bds4Win32api_cpp.HxI</CompiledIndex>
 <HelpTopic>Help\Win32\bds4Win32guide.HxS</HelpTopic>
 <HelpTopic>Help\Win32\bds4Win32devguide.HxS</HelpTopic>
 <HelpTopic>Help\Win32\bds4Win32tasks.HxS</HelpTopic>
 <HelpTopic>Help\Win32\bds4Win32api_win32.HxS</HelpTopic>
-<HelpTopic>Help\Win32\bds4Win32api_cpp.HxS</HelpTopic>
 </FileList>
 <Filters>
 <Filter Name="Developer Studio 2006 for Win32">"DocSet"="bds_Win32"</Filter>
-<Filter Name="Language: C++">"DevLang"="C++"</Filter>
 </Filters>
 </Merge>
 </helpConfig>

(つづく)

398 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 10:24:29 ]
同じフォルダに以下のregHelp.batファイルを作り、管理者権限で実行

copy mergeWin32.xml "%PROGRAMFILES%\Borland\BDS\4.0\Help\Common"
"%PROGRAMFILES%\Borland\BDS\4.0\Help\Common\regHelp.exe" -7
"%PROGRAMFILES%\Borland\BDS\4.0\Help\Common\regHelp.exe" 5

おもむろにヘルプを起動すると、しばらく後適用された状態で検索ができる

                   / ̄\
                  |     |
                   \_/
                 __|___
                 /        \
                  /         \
                    l            | 
              (             |
                   \       〃_/
                 >'⌒ ̄ ̄、,\
                /         \
               /  ィ     ,ノ'ヾ ヽ
                (   /  ),      l
                  ) ノ _,/    、,,  |
                /⌒ ̄ ̄ ̄          |
            l  、_          ,ノ ,/
          | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
.            └┬:‐┬───┬‐────┘
            ノ ,‐‐,)      丿,‐‐,)          ┼ヽ  -|r‐、. レ |
           (,∠/       (,∠/           d⌒) ./| _ノ  __ノ

399 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 10:39:17 ]
>>397
念のため編集前に mergeWin32.xml はバックアップを取っておいた方がよいです

400 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 12:52:35 ]
>>394-399
サンキューベリーマッチ!  m(_ _)m

401 名前:390 [2008/12/11(木) 13:28:48 ]
>>392さん
初期値は設定していません。設定しないとうまくいかないんでしょうか?

引き続きご回答いただければ幸いです。よろしくお願いします

402 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 13:33:07 ]
cou:=cou+1;
の行にBreakPointを置いて、実行。

止まったときのcouの値は?

cou:=0;
で初期化しないとだめじゃないの?
自動で0にしてくれたっけ?




403 名前:390 [2008/12/11(木) 13:57:43 ]
>>402さん
cou:=0;で設定し、ブレークポイント置いて実行してみました
couは1で止まってしまっているみたいです…

404 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 14:22:02 ]
ランダムに再生の前に、普通に再生は出来るの?
video: array[1..9]of Integer に適当に数値を入れて、再生させると再生できるの?
それとも、それでも再生できないの?

ランダムの部分がいけないのか、再生部分がいけないのかの切り分けはしましたか?


405 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/11(木) 14:41:32 ]
>>402
ローカル変数は初期化されません(0にしてくれません)。
だから自分で初期値として0を代入しなければなりません。
ちなみにグローバル変数は初期化されます(0にしてくれます)。

たまたま0になっているときもありますがこれを当て込んではいけません。


406 名前:390 [2008/12/11(木) 14:42:17 ]
>>404さん
ボタンを押しても何も起きません。読み込みもしてくれなくてうんともすんともです
再生部は問題ないようです。前半部のランダムの部分が良くないようです
説明不足な点が多くすみません

407 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 14:50:19 ]
この板の上の方にBINGOの問題があって、
そこで同じようにランダムに数値を並べる例が出てるから、みて見れば?

その例にそってvideo[1..9]にちゃんとランダムに数値を入れるところまで、
頑張ってみようよ。


408 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 16:18:31 ]
Del7でバックグラウンド、最小化状態のウィンドウを
フォアくグラウンドに持ってきたくて
www.swissdelphicenter.ch/torry/showcode.php?id=261
のコードを組み込んでみたところ
バックグラウンドからは成功したものの
最小化状態からはフォアグラウンド化できません。
どうやればいいんでしょうか。

409 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 22:52:35 ]
マウスのホイールをフックしたいのですがホイールの上下を感知することってできるのでしょうか?

410 名前:デフォルトの名無しさん mailto:sage [2008/12/11(木) 23:00:56 ]
すみません
wParamを見ればいいことがわかりました
お騒がせしました

411 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 03:08:36 ]
var a: array[0..10] of Byte;
みたいな感じで定義した配列に、@a[0]を対象にMoveMemoryとかをやっても大丈夫なんですか?
配列はメモリ上で常に連続しているものなんですか?
Cardinal型とByte型の配列を相互に入れ替えるとき、Moveは面倒くさくて

412 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 03:40:11 ]
連続して無いとFileName: array[0..MAX_PATH] of Char;とか使えなくなる
ので連続してるだろう



413 名前:デフォルトの名無しさん [2008/12/13(土) 18:39:04 ]
すみません!!!
0から1の乱数randomを200回発生させ、第1項から200項目までの和、その平均、二乗和を求めるプログラムを穴埋めで回答するように。
という課題がわかりません↓↓
教えてください!!
なお、和はedit1、平均はedit2、二乗和はedit3に出力するものとし、
s: 和
ss: 二乗和
 r: 0 から1の乱数をいれる変数
av:  平均値       とする。
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
s,ss,r,av:real;
begin
s:=[(1)];
ss:=[(2)];

[(3)] i:=1 to [(4)]
[(5)]

r:=random;

s := s+ [(6)];
ss:= ss + [(7)];
end;
av:=s/[(8)];
edit1.text:=[(9)];
edit2.text:=FloatToStr(av);
edit3.text:=[(10)];
end;

}

414 名前:413の続き [2008/12/13(土) 18:42:22 ]
和の値(小数点以下3桁目を四捨五入する)
平均の値(小数点以下3桁目を四捨五入する)
二乗和の値(小数点以下3桁目を四捨五入する)
も是非是非お願いします!!!!

415 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:44:36 ]
これぐらい分からないとしょうがないぞ
0
0
for
do
begin
i
i*i
200
s
ss

416 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:46:11 ]
おれも出来てなかった

417 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:47:08 ]
自力で解く気ゼロだな

418 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 18:54:21 ]
5にrandomize入れてしまったw
4はdo beginで

419 名前:390 [2008/12/13(土) 22:00:35 ]
>>407さん
いろいろとアドバイスいただきありがとうございました。お礼が遅くなり申し訳ありません

420 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:34:48 ]
>>413
宿題スレはこちら
Pascalの宿題は俺にやらせろ!!Part2
pc11.2ch.net/test/read.cgi/tech/1136994325/

421 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 23:40:05 ]
宿題を丸投げする413が教授に怒られますように
ニヤニヤ

422 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 23:44:44 ]
大学でDelphi習うところあるんだね



423 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 00:05:58 ]
どっちかというとDelphiというよりはPascalだろーけどな

424 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 00:09:20 ]
Delphi2006でファイルメニューの「開き直す」を選んだとき、過去のプロジェクトがたった4件しか表示されません。
これだと、ちょっと別のプロジェクトをいじっていると肝心のプロジェクトが表示されなくなったりして面倒です。
そこで「開き直す」プロジェクト数を増やそうと思ってオプションを見ましたが、該当するパラメータが見つかりませんでした。
このようなプロジェクト数を増やす設定は可能でしょうか。


425 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 01:53:01 ]
>>424
それは俺も不便に思ってる。

スタートページも確かパス表示なしな上に、
プロジェクトの履歴少ないよな

426 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 04:33:00 ]
>>424
プロジェクトのショートカットをデスクトップにでも作っておけ

427 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 06:18:44 ]
ショートカットだと、もう一個IDEが起動する(´・ω・`)ショボーン

428 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:26:28 ]
Delphi2006なら
HKEY_CURRENT_USER\Software\Borland\BDS\4.0\Closed Projects
を書き換えるだけのソフトを作っておけばいい
コマンドラインにプロジェクトファイルをくっつけて

429 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:42:52 ]
それって簡単?

430 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 11:45:35 ]
簡単かどうか試せばいいんじゃね?

431 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 12:04:00 ]
ActiveProjectsとかいうフォルダにショートカット作っておいて
タスクバー右クリツールバーの登録で指定して
>>から起動したいファイルをIDEにドラッグドロップすれば開けるんじゃね。

432 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 12:41:52 ]
>>430
やってみたけどIDE起動してると効かないみたい。そしてIDE終了さ
せるときエラーになる。
IDE起動してない状態で書き換え、IDE起動させれば確かに効くけど、
IDEの再起動が面倒かな。




433 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 13:18:43 ]
>>431
やってみた。

ショートカットだと .lnk ファイルが開かれるだけ。

実プロジェクトファイルだと、現行プロジェクトを非アクティブにしてプロジェクトグループに追加される。
しかし、元々関係ないプロジェクト同士でプロジェクトグループにすると、どのユニットが何がなんだか分か
らなくなる。


434 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 08:39:54 ]
いくつものスレッドでメインスレッドにある一つの配列をいじくる場合って衝突する危険性があると思います
どうやって衝突を回避するんですか?

435 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 08:50:37 ]
>>434
補足です
その共通に使う配列は構造体の配列でaddしたりDeleteしたりする関数を呼ぶ事で操作しています
スレッドから操作関数をよぶときにどこかが呼んでいる時は待つ、みたいなことができればいいと考えています
どうすればそういうことができるのでしょうか?

436 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 09:40:13 ]
mutexやCriticalSectionで衝突する可能性のあるコードを保護する。
TCriticalSectionでも使っとけ。

437 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 12:17:00 ]
下記スレッドの説明から


異なるスレッドが所有する VCL または CLX のメソッド/関数/
プロパティを別のスレッドの中から扱う場合、排他処理の問題が
発生します。

メインスレッドの所有するオブジェクトに対しては Synchronize
メソッドを使う事ができます。他のオブジェクトを参照するため
のメソッドをスレッドクラスに追加し、Synchronize メソッドの
引数として渡します。

438 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 13:43:44 ]
>>434 >>437
玄人ではありませんし、add,deleteの頻度にもよりますが、add,deleteが1秒内に何十回も発生するなら
そのたびにSynchronizeを多用するとスレッド化のメリットが失われますのでいかがなものかと思います。
その場合、私なら全配列を丸々コピーしてスレッド内処理後、Synchronizeもしくはterminate後に元にコピーします。
当然、メモリー効率は犠牲にします。
低頻度ならそのたびにSynchronizeで良いのでは?


439 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 14:04:42 ]
>>438
>434
>いくつものスレッドでメインスレッドにある一つの配列をいじくる場合
ということなので、各スレッドがコピーして保持し処理後にリストアするならばスレッドにする必要が無いと思う

>Synchronizeを多用するとスレッド化のメリットが失われます
メリットはまさに衝突回避なのだと思うけど、ここで頻度については議論の外でいいのでは?

まー後は434さんが実装して確認するのがはやいわな

440 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/16(火) 01:20:02 ]
>>411
亀ですが、言語仕様では

 「静的配列はその配列の要素型の連続した変数の並びとして格納されます」

とあります。

わかりにくいのですが「連続した変数の並び」ということなので
連続して並んでいることを保証していると考えて良いと思います。


441 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 04:00:12 ]
動的配列は連続してないかも、ってそんなことあるかいな・・

442 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 09:53:45 ]
動的配列はポインタ1個だから、1つのメモリブロックしか扱えない。
だから連続してないってことはありえない。



443 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 10:44:42 ]
初期化にFillCharルーチンなんぞを使ってるけど、動的配列や静的配列が
どんなに大きくてもここ数年まったく問題なく動いていますんで、間違い
なく連続してると思いますヨ。

444 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 18:16:34 ]
case文のelseはbegin,endでくくらなくてもOK?
case i of
1: aa;
2: bb;
else
cc1;
cc2;
end;

445 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 18:21:38 ]
ok

446 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/16(火) 19:42:58 ]
し、知りませんでした… orz

Delphi 4とDelphi 5の言語ガイド「case文」の項を見るとひとつの文しか記述出来ないような文面なのですが
Turbo Delphi Explorerのヘルプ「宣言と文」の項を見ると複数の文を記述できるという内容が書いてありました。
しかし試してみたところDelphi 5とTurbo Delphi Explorerの両方でコンパイルが通ってかつすべての文が実行されるのを確認しました。

case 文の else 以降にbegin〜endを付けなくて良いとなるとコードもかなりすっきりしそうですね。


447 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 20:28:16 ]
VCLのソース読むとかなり参考になるよ
例えばwith分で,で区切って複数の変数を使える
var


Edit: TEdit;
Button: TButton;
begin
中略
with Edit, Button do

Caption := Text;// ButtonのCaptionをEditのTextに設定
end;
これを知らないと
with Edit do with Button do〜とか書くことになる

448 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 20:30:33 ]
俺も知らなかった
でもcase文ってそんなに使わないよねってか使えないよねcase文って

449 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 20:38:12 ]
縁の下の力持ちってとこだろう

450 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/16(火) 20:58:11 ]
>>447
私がVCLのソースを参考にしたものはこんな感じです:

・TStringsとその派生クラス
・TCollection/TCollectionItemとそ(ry
・Resultをループ変数に使う


>>448
          ( ))))))))))))
        //(;;;`∀´;;;)  使うんだな、それが!
         /     \
      __| |     | |___
     ||\   ̄ ̄ ̄ ̄     
     || \   -●-●


451 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:28:59 ]
case文使わなかったら、if then地獄になるじゃん

452 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:42:49 ]
相変わらずドキュメントがだめだなぁ



453 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 21:51:30 ]
ならWikiか何かで強力なドキュメント作っておくれよ

454 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:46:44 ]
何かでcase文よりIF文の方が早いって見てから、ずっとifelse羅列してる俺がいる。

455 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:56:55 ]
どう考えても逆w

5万で組んだマシンがあまりにも速すぎてゲーム以外では持て余し気味で
もうプロファイルも取らずに局所的な高速化を試みることもなくなったな。

456 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 22:57:32 ]
そんな超微量な時間のために可読性を捨てるのもちょっとな

457 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 23:44:29 ]
多態を使えばcaseの出番は減る。

多重なwithはスコープを不明確にするので控えめがお勧め。

458 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:03:35 ]
withって読みづらいからいらない

459 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 00:49:01 ]
case sender of
 btn1 : 〜;
 btn2 : 〜;
 btn3 : 〜;
end;
とかいつかは出来るようになると思って早・・・3.0からかな。
まぁ無理なんだけどね。なんかcase文って惜しいイメージ。
勿論多用する派。

460 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 01:42:08 ]
他の方法で

461 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 02:56:24 ]
case TButton(Sender).Tag of
 1 : 〜;
 2 : 〜;
 3 : 〜;
end;

で済ますかな自分なら。

462 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 09:21:06 ]
ヘルプ「宣言と文」を見てみたらひでえな。
コードが読みづらいし、間違ったセミコロン付いてるし。



463 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:28:34 ]
リストに格納した構造体のポインタを使う時なんかは、
いちいちキャストしなきゃならないのがうっとうしいからWith使うなぁ

464 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:34:09 ]
>>462
elseやendの前のセミコロンのことか?
それだったらずっと以前に拡張になったことと記憶してるが。


465 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:49:03 ]
いつからif文のelseの直前にセミコロン付けても良くなったんだ??

466 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 10:54:32 ]
>>463
昔作ったプログラムを後から見たとき、長い複文にwith使ったところ
は理解するのに一苦労した。これに懲りて今では例えば

var a:Hoge ← HogeHogeHogeHogeと同じオブジェクト型とする。
  .........
begin
  ..............
  a := HogeHogeHogeHoge;
  a.Nanchara := .....;
  a.Kanchara := .....;
  Dotchida(a.Nanchara);
  ..............
のようにして、with HogeHogeHogeHoge begin 〜 end の代わりにしてることが多い。
でも、withもたまに(短いとこに)は便利に使ってるよ。


467 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 11:01:52 ]
withを使うと効率がよくなると聞いたが。

a.hoge1 := 0
a.hoge2 := 0
a.hoge3 := 0

は毎行aを参照するコードが走るけど、

with a do
でくくるとaを参照するコードが1回で済む

という感じだった。


468 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 13:09:45 ]
コード行数は少なめに短くがモットーの俺はアンチwith
ループで何万回実行するとかじゃない限りそんな些細なことは気にしないな・・

469 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 13:55:23 ]
>コード行数は少なめに短く
これも些細なことだと気づかないのか?


470 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:01:40 ]
速度は計測しない限りわからんけど、コードは見ればすぐわかる
ソースは昔のものでも結構参照するし(俺は)、易読性が最重要

471 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:05:53 ]
Label1.Left := 10;
Label1.Top : = 100;
Label1.Caption := 'hogehoge';
Label1.Font.Hoge := hogehoge;
Label1.Font.Size := 13;



with Label1 do
begin
 Left := 10;
 Top : = 100;
 Caption := 'hogehoge';
 Font.Hoge := hogehoge;
 .Font.Size := 13;
end;

で、withがない方が見やすいんですね?
それなら良いんじゃないでしょうか。


472 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:08:12 ]
俺はね
そもそもbeginで改行するのすら許せない神経質



473 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:16:00 ]
>>472
ははは、笑った。それならそれを突き通すんだ!
誰も文句は無いですよ。


474 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:42:58 ]
コードは少ない方がいい。

そう思っていた時期もありました・・・

475 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 14:45:36 ]
改行は多いほど見やすい
長い文は二行に

そう思ってた時期が、俺にもありました

476 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:00:35 ]
>長い文は二行に
これは、今でもそうですね。
ただ、長い文になる事が無いように気を使ってコーディングしますけど。

>改行は多いほど見やすい
これは、ネタでも笑えないね。


477 名前:デフォルトの名無しさん [2008/12/17(水) 15:14:39 ]
2chの書き込みでも無駄に改行いれて書き込むおかしな人がいるが
そういう類の人じゃないだろうか?

478 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:24:57 ]
コンパイルされると最適化されるからどっちでもいい

479 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 15:59:55 ]
with do
を使う・使わないでコンパイルされるものが違うんでしょ?

最適化されないんでしょ?違うのかな?
教えてください。識者の方。


480 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 16:10:52 ]
同じ参照が続いたコードなんだから、コンパイルで最適化されると思うけどね

481 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 16:11:29 ]
var
 alias: TMyType;
begin
 alias := foo.bar.baz;
 alias.aaa;
 alias.bbb := 1;
 alias.ccc;
end;



with foo.bar.baz do
begin
 aaa;
 bbb := 1;
 ccc;
end;

と同じ。

foo.bar.baz.aaa;
foo.bar.baz.bbb := 1;
foo.bar.baz.ccc;

とは異なる(可能性がある)。
プロパティbazがgetbazを呼んでいる場合
上二つは1度呼ばれ三つめは3度呼ばれる。
速度が遅くなるだけではなく副作用で実行結果すら異なることもあり得る。

482 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 16:42:31 ]
>>481さん
ありがとうございます。

>上二つは1度呼ばれ三つめは3度呼ばれる。
なので、withを使った方が速度的には有利。

>副作用で実行結果すら異なることもあり得る。
この副作用ですが、withを使ったが為に起こると解釈してもいいでしょうか?
withを使わないと副作用が出ますというようなコードはいかがなものかと思うのですが・・・





483 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 19:20:53 ]
>>446
俺も知らなかったのでテストしてみたら新たな疑問が
上と下でSenderが変わってしまうのは何故?
procedure TForm1.Button1Click(Sender: TObject);
begin
  with (Sender as TButton) do
  begin
    case Tag of
      0:Caption:='ゼロ';
      1:Caption:='いち';
    else
      Caption:='たくさん';
      ShowMessage('てすと');
    end;
    Tag:=Tag+1;
  end;
end;

  with (Sender as TComponent) do
にするとフォームのキャプションが変わる?

484 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 19:30:36 ]
Delphi の最適化はあまり当てにならないんだよね。

昔、サンプルプログラムにビットマップイメージをなるべくキレイに縮小する
コードがあったが、これは実数を使って計算していてあまりに遅いので整数に
直して数十倍のスピードにしたことがあった。ところが、面白いのは、プログ
ラムに、拡大ルーチン(縮小ルーチンとは別のプロシジャ)を組み込むと、若干
だが縮小の処理遅くなった。(拡大ルーチンは呼び出してない!!)

どうも、Delphiの最適化は、プログラムが小さいときは処理スピードが上がるように
最適化し、プログラムが大きくなるときは、処理スピードを犠牲にしてもプログラム
サイズが小さくなるようにしているみたいなんだ。
(これは Delphi2006とDelphi7で確かめた)

ま、だいたい1割くらいだったかな、遅くなったの。(ちょっとがっかりした)

485 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/17(水) 20:06:45 ]
>>458
with文は最近使うようになりました。たとえば

 Nantoka.Kantoka.Untara.Kantara.Options := Nantoka.Kantoka.Untara.Kantara.Options + [opHoeHoe, opHanyaan];

みたいな文だと

 with Nantoka.Kantoka.Untara.Kantara do
  Options := Options + [opHoeHoe, opHanyaan];

と読みやすく感じます。
最近のDelphiのIDEは入力補完でもwith文に対応してくれているようなので昔よりは使いやすいと思います。
何行にもわたる場合やwith a, b, c do とか書かれると私の場合は逆に混乱してしまいますので使いません。

>>483
TComponentにはTagはありますがCaptionはないからです。

with (なんとか) do のブロック内では
コンパイラはできる限り(なんとか)に対する記述であると解釈します。
そしてそのように解釈できない場合はwith文を使わないときと同じように解釈します.

そのため with Sender as TComponent do とした場合、
このwithブロック内で単にTagと書かれている場合には
TComponentにはTagプロパティがあるので
コンパイラはSender as TComponentのTagだと解釈します。

一方でこのwithブロック内で単にCaptionと書かれている場合には
TComponentにはCaptionプロパティがないので
コンパイラはwith文を使わないときと同じようにTForm1のTagだと解釈します。


486 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 20:09:42 ]
>>485
(最後の行)
>コンパイラはwith文を使わないときと同じようにTForm1のTagだと解釈します。
コンパイラはwith文を使わないときと同じようにTForm1のCaptionだと解釈します。

487 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 20:12:27 ]
with を使うときは、何がどれに属しているかちゃんと知っていないとあぶない。


488 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 20:14:11 ]
Delphi7で思考が止まってるけど、withって、コード補完が効かなくない?
なので、withは使わない様にしてる。

設定が足りないだけ?


489 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 21:05:33 ]
そもそもDelphiのヘルプにObject PascalのBNFの記述がないのがおかしいんだけどな。
CodeGear腐ってる。



490 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:03:18 ]
Synchronizeって引数付き関数呼べないよね?
引数付きの関数を呼ぶ場合どうすれば・・・

491 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:05:41 ]
あ、メインスレッドでクリティカルセクション作っておいて、対象関数をEnterとLeaveで挟めば同じことかな?

492 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:18:11 ]
>>491
気をつけないといけないのは、
メインスレッド側でも、サブスレッドで触る変数とかはクリティカルセクションで
ロック(?)しとかないといけない。
読み込むだけ、ならなくてもよい場合(1つの変数の値をよむだけとか)もある。
書き込むものは、しっかりとロックしとかないといけない

こういうのやるときはいきなり本番環境でやらずに、
簡単なスレッドのテストプログラムを作ってテストしてみるのがよいよ。
ポイントは(テスト駆動開発じゃないけど)必ず失敗するように組んでから、
成功するように組むとテストしやすい。



493 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:23:18 ]
なるほど。
ってか変数読むだけならクリティカルセクション要らないんですか?
読んでる最中に書き換えが起こると可能性があるとしても?(書き換え側は保護してるとして)

494 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:36:05 ]
サブスレッド側で値を書き込み
Synchronize中でメインスレッドから読みだすなら問題なし。
VCLが絡まないならCriticalSectionでももちろんいい。

>ってか変数読むだけならクリティカルセクション要らないんですか?
>読んでる最中に書き換えが起こると可能性があるとしても?(書き換え側は保護してるとして)

実際に遭遇したことはないけどマルチコア環境ではおかしくなるらしい。

495 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 22:54:16 ]
念のため両方保護しておきます
>>492さん>>494さんありがとうございました

496 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:27:07 ]
もう一つ質問すみません
クリティカルセクションはSyncronizeみたいにメインスレッドで実行するわけじゃないので、共用変数ごとに複数作っても問題ないですよね
もちろん保護内では共用変数は一つしか使わないという条件でです

497 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 00:16:02 ]
>>496
もちろん可能だけど、(上で出た with のように)ちゃんと設計しないと
恐い恐いデッドロックに遭遇するので要注意です。

498 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 14:00:11 ]
>>489

昔、breakやcontinueが「手続き」扱いで、びっくりしたことがある。


499 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 15:51:50 ]
>490
Synchronizeは子スレッドで使用するので子スレッド内のPrivate変数を利用すればok、また参照だけならSynchronize
は必要ないですSynchronizeはあくまでメインスレッドの変数更新時の衝突回避なので

500 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 16:35:21 ]
>>499
かなり昔のことで忘れたが、Synchronize で引数付き関数が呼べると「便利だなあ〜」などと思ったことがある。
コンパイラが頑張ってくれればできそうなものだと思うけど、間違ってる?


501 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 17:08:37 ]
スレッドはTThreadをラップしてコンポーネント化してしまうと便利。
OnExecuteイベントハンドラにスレッドのコード書いて
FormのPrivateフィールドの変数を好き勝手に読み書きできて
そこからSynchronizeメソッドを呼ぶとOnSynchronizeイベントが呼び出されるようにして
UseThreadプロパティをFalseにするとサブスレッドを使わずメインスレッドからOnExecuteが実行されるように
小細工してロジックのバグを事前に潰しておくとデバッグがかなり楽になる。

502 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 19:19:57 ]
なるほどね、コンポーネントにするところまでは考えなかった。
Threadを使うのに便利そうなUnitは作ったことあるけど、なんせ、マルチスレッド
にするプログラムはそう滅多になかったんで、(そのUnitは)どっかでカビが生え
たまま消滅してるはず。(ずーっと見てもいない)(^_^;
そういえばこの2年間シングルスレッドぱっかだなオレ。



503 名前:ななしへたぐらま ◆XcB18Bks.Y mailto:sage [2008/12/18(木) 19:35:08 ]
>>486
その通りでございます orz
ありがとう!


504 名前:458 mailto:sage [2008/12/18(木) 23:44:56 ]
>>485
ありがとうございました
単なる私の不注意だったようですねお恥ずかしい

>>488
with内の[ItemIndex]は昔から効きませんね


505 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 09:28:39 ]
>>501
コンポ化は便利そうだけど、イベントとして書くと貼り付けたFormのpas内に
コード書くことになるから、なんとなく抵抗があるな
スレッドは別処理するためにスレッドにすることが多いし、それだけで
ひとつのpasにまとめたい気分

506 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 09:33:42 ]
>>501
それはいいかもね。
ちょっとした、TTimerのマルチスレッド版みたいな感覚かな。

MMTimerってのもあったけど、まあ、あれにはSynchronizeがなかったからな


507 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 09:54:41 ]
>>505
つ TDataModule

508 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 21:08:05 ]
TRegExprでExpressionに指定した正規表現が正しいか確認する方法はあるでしょうか?
Compileの例外を監視するとかですかね?

509 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 18:39:58 ]
Del7でTMyForm作ってpublishedなプロパティ、イベントハンドラを追加して
それをフォームデザイナに反映させる方法ってない?

510 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 19:08:00 ]
>>509
パッケージにするとか

511 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 21:43:26 ]
>>509
フォームデザイナに反映させる時は、どうしてもIDEに組み込む必要があって
コンポーネントとかの形にしないといけないみたい
動的にはできないんだよな・・・

512 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 22:58:34 ]
>>510-511
パッケージ化すればできちゃうの?
普通にコンポーネントとして登録すると
新規作成ででてくるのかな。



513 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 23:23:07 ]
>509
ない。
あきらめろ(冷たいようだけど)。

514 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 01:06:16 ]
TRegExprでテキストファイルの空行を削除するには、どうすればよいでしょうか?
^$とかではマッチしないし、(\r\n){2,}を\r\nに置き換えようとすると、そのまま\r\nが
表示されます・・・



515 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 01:27:44 ]
>>514
^¥r¥n$だとどう?


516 名前:514 mailto:sage [2008/12/23(火) 01:34:30 ]
>>515
即レスありがとうございます。
それでもマッチしません。
置換の方は、#13#10としてもダメです・・・

517 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 02:07:29 ]
delwiki.info/?%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%2FTRegExpr%2F%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%98%E3%83%AB%E3%83%97%2FSyntax%20of%20Regular%20Expressions

518 名前:514 mailto:sage [2008/12/23(火) 06:19:49 ]
(?m)^\r\nでマッチするようになりました。
お騒がせしました。

519 名前:514 mailto:sage [2008/12/23(火) 07:16:29 ]
続けてすみません。
置換後の文字列に改行を含むようにするにはどうすればよいか
分かりますでしょうか?
#13#10とすると、#13#10がそのまま表示されます。

520 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 07:21:53 ]
'hogehoge'#13#10'fugafuga'

521 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 09:52:55 ]
'hogehoge'+sLineBreak+'fugafuga'

522 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:15:36 ]
sLineBreakって何で存在するの?
#13#10の方が短くていいじゃん



523 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:29:00 ]
・数字の羅列よりも意味がわかりやすい
・将来、改行コードが変更されても対応しやすい
そんなところかと。

524 名前:514 mailto:sage [2008/12/23(火) 10:37:55 ]
>>520-522
できました。
ありがとうございました。

525 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 17:12:04 ]
>>523
追加:
・マジックナンバーつかうような奴とは仕事したくない、という奴と仕事ができる

526 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 17:37:39 ]
じゃあ使わなくても何の問題もないな

527 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 21:58:23 ]
>424
むちゃくちゃ遅レスでもう見てないと思うけど、こんなん見つけた。
Andy’s Blog and Tools ? Increase the number of MRU items
ttp://andy.jgknet.de/blog/?page_id=198

528 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 12:52:47 ]
HTMLパーサのコンポーネントでオススメのものありますか?

529 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 17:58:20 ]
delphiに標準でついているコンポーネントのコンポーネントパレットに出ているアイコンの
画像を取りたいのですが、これらの画像はどこかのフォルダにあるんでしょうか?
delphi4です。

530 名前:デフォルトの名無しさん [2008/12/26(金) 19:15:08 ]
Print Screenキーでどうでしょ

531 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 21:43:48 ]
そんなフォルダはないです? www

532 名前:デフォルトの名無しさん mailto:sage [2008/12/26(金) 21:45:58 ]
ない








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<151KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef