5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Delphi Tech

1 :D使い :2000/10/04(水) 05:57
Windows最強の開発環境と呼ばれるDelphi
Delphiとその言語ObjectPascalの Technology/Technique についてのスレッド
質問・議論など
他の言語やツールはこうして実現している、という参考になる話は歓迎


2 :D使い :2000/10/04(水) 06:00
まず、さっき知ったInterfaceの利用法
 −自己開放型クラスを使った簡易複素数ライブラリ
type //Interface部
 IComplex = interface
  procedure Complex(r, i: Double);
  procedure Add(C: IComplex);
  function GetR: Double;
  function GetI: Double;
  procedure SetR(Value: Double);
  procedure SetI(Value: Double);
  property r: Double read GetR write SetR;
  property i: Double read GetI write SetI;
  function ToString: string;
 end;

 TComplex = class(TInterfacedObject, IComplex)
 private
  FR, FI: Double;
  function GetR: Double;
  function GetI: Double;
  procedure SetR(Value: Double);
  procedure SetI(Value: Double);
  procedure Add(C: IComplex); overload;
 public
  constructor Create; overload;
  constructor Create(r, i: Double); overload;
  procedure Complex(r, i: Double);
  function ToString: string;
  class function Add(C1, C2: IComplex): IComplex; overload;
 end;

3 :D使い :2000/10/04(水) 06:06
長くてすまんっ (>>2の最後は省略されてません。)
次に実装部(implementatoin部)
{ TComplex }

procedure TComplex.Add(C: IComplex);
begin
 Self.FR := Self.FR + C.GetR;
 Self.FI := Self.FI + C.GetI;
end;

class function TComplex.Add(C1, C2: IComplex): IComplex;
begin
 Result := TComplex.Create(C1.GetR + C2.GetR, C1.GetI + C2.GetI);
end;

procedure TComplex.Complex(r, i: Double);
begin
 Self.FR := r;
 Self.FI := i;
end;

constructor TComplex.Create(r, i: Double);
begin
 inherited Create;
 Self.Complex(r, i);
end;

constructor TComplex.Create;
begin
 Self.Create(0, 0);
end;

function TComplex.GetI: Double;
begin
 Result := Self.FI;
end;

function TComplex.GetR: Double;
begin
 Result := Self.FR;
end;

procedure TComplex.SetI(Value: Double);
begin
 Self.FI := Value;
end;

procedure TComplex.SetR(Value: Double);
begin
 Self.FR := Value;
end;

function TComplex.ToString: string;
begin
 Result := FloatToStr(Self.FR) + ' + ' + FloatToStr(Self.FI) + ' i';
end;


4 :D使い :2000/10/04(水) 06:17
使い方:
procedure TForm2.Button1Click(Sender: TObject);
var
 a, b, c: IComplex;
begin
 a := TComplex.Create(5, 6);
 b := TComplex.Create(3.5, 1.1);
 b.Add(TComplex.Create(0.14, 0.1));
 c := TComplex.Add(a, b);
 ShowMessage('a=(' + a.ToString + '), b=(' + b.ToString +
  '), c=(' + c.ToString + ')');
end;
-------------------------------------------------------
constructor Create(C: IComplex); がほしいとか、
そういう機能追加に当たるところは除いて、
ここまででまずいところがあるでしょうか?
ちなみに上のコードでメモリリークはありませんでした。(MemCheck.pasで確認)

個人的には a.GetI などとするとプロパティを介さずに
アクセスメソッドが使えてしまうのがちょっと嫌。
Interfaceだから仕方ないかな。


5 :J使い :2000/10/04(水) 07:41
僕は immutable が良かったから SetX は実装しなかったけれど。

6 :名無しさん@お腹いっぱい。 :2000/10/04(水) 09:34
これは基本かな?
with XX.create do try
 ・・プログラム・・
finally free; end;
クラスを作って作業して捨てるのをローカル変数無しやる

7 :名無しさん@お腹いっぱい。 :2000/10/04(水) 09:39
>>6
そういうのいいならこうゆーのも?
with ListView1,TreeView1 do

8 :>7 :2000/10/04(水) 09:59
それは悪い見本って事?

9 :名無しさん@お腹いっぱい。 :2000/10/04(水) 10:15
>6
Cから移ってきた当初はそういうwithの働きが分らなかった。
どこに参照が保持されるんだろうって。
ブロックのネストが深くならない点でも標準的書き方。
>7
双方に同じ名前のメンバがいた場合混乱しない?
まあ、そこだけメンバ修飾すればいいんだけど。

10 :名無しさん@お腹いっぱい。 :2000/10/04(水) 10:46
というか、ListViewとTreeViewは重なりまくってますがな

With ListView1 is L , TreeView1 is T do
みたいに書ける時代が来るのを待つべきだね

11 :名無しさん@お腹いっぱい。 :2000/10/04(水) 10:50
>>4
私は以前自前のクラスライブラリにインターフェースを導入しかけましたが、
結局やめました。
理由は
・Delphiには既に3種類のクラスの生成・廃棄ルールがあり、
もうこれ以上増やしたくない
・インターフェース導入によってIとTが入り乱れて可読性が落ちる
・インターフェースはコードの量を削減に寄与しない
・単一継承だけでも破綻しない

というわけでインターフェースに関わるのは
COMがらみの場合のみにすると決めました。

これを踏まえた上でなお
インターフェースを導入するメリットはありますか?

またInpriseが提供しているライブラリで(VCL以外のものも含む)
COM関連以外でインターフェースを使っているものはありますか?


12 :名無しさん@お腹いっぱい。 :2000/10/04(水) 10:55
try

except

finally

end
って書きたい

13 :D使い :2000/10/04(水) 11:14
>5
なるほど。immutable objectっていうのはそういうことだったのか!
(immutable:不変の)
JavaのStringクラスみたいな感じですね。
propertyさえもいらなくなってずいぶんすっきりするなぁ。
複素数みたいなプリミティブなクラスはimmutableの方がいいのかな。


14 :名無しさん@お腹いっぱい。 :2000/10/04(水) 14:11
Cの#defineみたいなの採用してくれないかなぁ‥
記述量がすごく減るのになぁ‥

15 :名無しさん@お腹いっぱい。 :2000/10/04(水) 14:18
>11
>COM関連以外でインターフェースを使っているものはありますか
OpenToolsAPI


16 :かなりダサイコード :2000/10/04(水) 15:39
>>12
try try
except
end finally
end;
これって動く?


17 :名無しさん@お腹いっぱい。 :2000/10/04(水) 15:52
動くけどこう書くんだよ。
try try
//処理
except
//処理
end;
finally
//処理
end;

ダサクない。ネストはどれだけでもOKよ。

18 :16 :2000/10/04(水) 16:11
技術と離れてすまないが、
トライトライって書くと松野ちかおねえさん思い出すの
俺だけか?

19 :名無しさん@お腹いっぱい。 :2000/10/04(水) 16:26
でポン。

20 :名無しさん@お腹いっぱい。 :2000/10/04(水) 16:52
>14
#define は下手な使い方されると可読性下がるので嫌い


21 :J使い :2000/10/04(水) 17:01
Delphi で書いた自己解放型クラスと Java で書いたものでベンチをとってみました。
結果、 Delphi で書いた場合 Java の2倍近くの時間がかることがわかりました。
以上。

22 :名無しさん@お腹いっぱい。 :2000/10/04(水) 17:04
>15
OpenToolsAPI ってどんなことできるの?

>18
その人自体知らないです。

>20
賛成。

23 :>21 :2000/10/04(水) 17:07
Javaは実際には即座に開放してないからしょうがないね(^^;
ガベージコレクションの威力って奴ですね

24 :名無しさん@お腹いっぱい。 :2000/10/04(水) 17:28
>>21
TObject.NewInstance メソッドをオーバーライドしたらどうすか?

25 :名無しさん@お腹いっぱい。 :2000/10/04(水) 17:31
ミンナ分かってないなぁ、HotSpotってC++の2倍速いんだよ。
ttp://java.nikkeibp.co.jp/Java/News98/0327HotSpot.shtml

26 :漢太郎>25 :2000/10/04(水) 17:37
だからそれが、ガベージコレクションの威力なんでしょ?

27 :25>管太郎 :2000/10/04(水) 18:16
え、ネタなんだけど...(HotSpotは宣伝文句では速い、実際は遅いよっていう)

28 :漢太郎>27 :2000/10/04(水) 18:41
そうなの? そこ読んだだけだけど、何かプログラム作ったら
単純に結果が速かったんだと思った

29 :310 :2000/10/04(水) 18:55
type
TTest=class
published
procedure test;
end;
で実行時情報を使ってメソッド"test"を検索して、
testを実行したい。という処理を書きたいのですが、
全然わかりません。
サンプルコードが解説ページへのリンク希望


30 :漢太郎>29 :2000/10/04(水) 18:59
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=961558082
のDelphi版ギコbasicで使われているので丹念に読めば判ります。

書籍上の情報は、何月号かのCマガにあるのでバックナンバーをそろえるといいでしょう

31 :310 :2000/10/04(水) 20:06
>>21
普通にCreate/Freeする場合はどうなんでしょう

32 :J使い :2000/10/04(水) 20:57
>31
どうせ変わらないだろ、と思ってやったら、

Java: 5127 msec.
Delphi(Create/Free): 8262 msec.
Delphi(interface): 12899 msec.

になった。interface がもっと速ければなぁ。

33 :名無しさん@お腹いっぱい。 :2000/10/04(水) 21:05
>16,17
汚いなー
ブロックが{}ならそこそこ見れるんだろうけど
>12
の構文をサポートせよ!

34 :名無しさん@お腹いっぱい。 :2000/10/04(水) 21:09
>>32
うーんこの結果は信じがたい

実際のヒープを切り刻むような複雑なアプリでも
この傾向は変わらないの?


35 :>32 :2000/10/04(水) 21:17
まあね。コンパイラ系の言語はOOPした時のヒープメモリの機構が重くなりがちだよね
C++はnew deleteをオーバロードすればなんとか出来るけど
Delphiも場合によって選択出来るような仕掛けがそろそろ欲しいな

36 :>32 :2000/10/04(水) 21:28
InterlockedIncrement,InterlockedDecrementで時間がかかっていますね。

TObject.Create.Free を10000000回実行すると 6375 ms
InterlockedIncrement(val);InterlockedDecrement(val); を10000000回実行すると 1687 ms


37 :名無しさん@お腹いっぱい。 :2000/10/04(水) 22:58
開発環境のエディタ、Emacs のようにインデントとか勝手にしてくれるようには
できますか?

38 :名無しさん@お腹いっぱい。 :2000/10/04(水) 23:05
直接は無理じゃない?
ctrl+jのコード補完機能を活用せよ

delphi32.dci
[b|begin/end]
begin
  |
end


39 :37 :2000/10/04(水) 23:11
>38
OpenTools API って怪しいんだけれど、これでできないかなぁ?
<ドキュメントが無い・・?

40 :初心者質問 :2000/10/04(水) 23:26
Javaのnewってコードセグメントも実行時にロードされる(←正しい?)遅いんでは?
もしそうなら、何もしないクラスのcreate/new、free/?比較ならJavaがはやくても、
メソッドが大きいものになれば変わってくるかも。

41 :>40 :2000/10/04(水) 23:47
うんとね。もっと勉強したら判るから

42 :41の解説 :2000/10/05(木) 00:17
結果だけ知ってもしょうがないでしょ。仕組みをしらないとね
で仕組みはこんなスペースじゃ書けない。とりあえず答えを知
りたい欲求があるなら勉強してみたら? 答えかいちゃうと勉
強しなくなるでしょ? だから書かないよ。

43 :名無しさん@お腹いっぱい。 :2000/10/05(木) 01:17
>35
んが?メモリマネージャ丸ごととっかえられますけど?


44 :名無しさん@お腹いっぱい。 :2000/10/05(木) 01:30
しかし釈然としない結果だな...
http://pcgaz.nikkeibp.co.jp/tokusyu/bestsoft00/bestsoft_08.shtml


45 :D使い :2000/10/05(木) 01:42
>44
荒れるから他でやってほしいっす。
Delphiの技術話とは直接関係ないですし。

46 :名無しさん@お腹いっぱい。 :2000/10/05(木) 03:25
Delphiってしばらく見ないうちにえらく複雑になってるね。

47 :>43 :2000/10/05(木) 08:22
だから>場合によって選択出来るような仕掛ってあるじゃん?
new みたいにオブジェクト毎に別のメモリ管理したいって事でしょ?

48 :>>47 :2000/10/05(木) 10:09
それなら TObject.NewInstance, FreeInstance メソッドを
オーバーライドすれば?

49 :47 :2000/10/05(木) 10:30
あ、ホントだ。virtualで定義されてる。ゴメン 勘違いしてた

50 :47 :2000/10/05(木) 10:47
でも、あれ? じゃVMTってメモリ確保する前に既に存在するのか
うーん。VCLソースもっと読んでみよう。なんか勘違いしてたみたい

51 :D使い :2000/10/05(木) 12:08
>46 煽りじゃないと考えてレス
この辺の話は普通にDelphiで開発してる分にはほとんど使わない。
必要となったら深いとこまで入れるって事。
って、Interface以外はDelphi1や2の頃から変わってない話じゃないのかな?
俺は新入りだから詳しくは知らないけど。

52 :名無しさん@お腹いっぱい。 :2000/10/05(木) 12:34
日本のインプライズのホームページにKylixのページが出来た。
少しだけゴールが見えたのかな。
http://www.inprise.co.jp/kylix/index.html

53 :名無しさん@お腹いっぱい。 :2000/10/05(木) 14:50
>52
Kylixが出たら作りたいソフトのアイデアが幾つかあるので楽しみです。
Linuxプログラマーが一気に増えそうですね。
Kylix製のフリーソフトが増えてくればゲーム以外の環境はLinuxに以降出来そう。


54 :名無しさん@お腹いっぱい。 :2000/10/05(木) 15:01
つかよー、FormStyleいじってて、気になったんだが・・・。
FormStyleにfsStayOnTop指定したとき、メインフォームとそれ以外のフォームじゃあ、動作が違うんだね。
メイン以外のを、常に手前に表示したい場合、みんなはどうしてるの?
過去スレに、Application.Norm〜を使うってのがあったから、オレはそれ使ってるけど・・・
なんか、スマートに決まるやり方、無い?

55 :名無しさん@お腹いっぱい。 :2000/10/05(木) 17:26
ところで、 Delphi6 は何か機能増えるんかな?
個人的には template が欲しいところ・・・。

56 :名無しさん@お腹いっぱい。 :2000/10/05(木) 18:19
>55
よし、それここに書き込め。
news://newsgroups.borland.com/borland.public.delphi.non-technical

57 :ねこま :2000/10/06(金) 01:56
SetWindowPos(Handle, HWND_TOPMOST,


58 :ねこま :2000/10/06(金) 01:57
ていうか,一緒か.

59 :>54 :2000/10/06(金) 07:05
ニフテイのFDELPHI過去ログに色々あったなあ。
でもそれが一番簡単だったみたいだけど?

60 :>56 :2000/10/06(金) 09:10
日本語で書き込んでもいいのかい

61 :56 :2000/10/06(金) 10:58
>>60
I want templete.
じゃ通じないか。

Why don't using templete in Delphi.
I wish using templete in Delphi.
ごめん俺も英語駄目だ。


62 :名無しさん@お腹いっぱい。 :2000/10/06(金) 11:04
templete and generic container library,pleaseでじゅうぶん

63 :名無しさん@お腹いっぱい。 :2000/10/06(金) 12:01
悪いけどテンプレートは個人的には嫌い。
理由:使うと、ただでさえ大きい実行ファイルが一挙に膨張しそうに思えるから
それに、演算子のオーバーロードか 演算子の新設機能が無いとあんまり意味ないかも。

というかそれが欲しい。
たとえば a + b は書けなくていいから a @ADD b
みたいには書きたい

64 :名無しさん@お腹いっぱい。 :2000/10/06(金) 12:17
でもObjects[i] as TEditとかキャストばっかりってのもなんだよね
TObjectのみしか保持できないコンテナライブラリって嬉しい?

65 :64 :2000/10/06(金) 12:18
sageちゃった

確かに自分ではtemplate使わないと思うけどね


66 :名無しさん@お腹いっぱい。 :2000/10/06(金) 12:20
おいらもtemplateみたいなプリプロセッサに毛が生えたようなもの
じゃなくてもっとエレガントなのが欲しいね。


67 :名無しさん@お腹いっぱい。 :2000/10/06(金) 12:24
>>66
充分エレガントな気がするが‥‥‥
もっとエレガントなのって、例えばどんなのよ?

68 :名無しさん@お腹いっぱい。 :2000/10/06(金) 12:25
代案として型関係なくオブジェクトaがメソッドfooを持っていたら
呼び出せてしまうというのは?

Rubyとかのより動的な言語であるんだけど、
実行効率とトレードオフする必要がある

69 :>64 :2000/10/06(金) 12:56
>Objects[i] as TEditとかキャストばっかりってのもなんだよね
というかそれがDelphiの良さだと思ってた。
だって、何やってるか局所的に見て判るもの

最初は、作るのに手間かかるなあと思ってたけどさ

70 :名無しさん@お腹いっぱい。 :2000/10/06(金) 13:01
>61
日本のニュースグループに投稿したら?

71 :名無しさん@お腹いっぱい。 :2000/10/06(金) 13:45
あれ何て言ったかなあ、スレッドみたいに非同期じゃなくてコルーチン
みたいに関数の途中で帰って来るけど 次呼び出したらそこから実行
させる機能。
これをDelphiで実装してほしいなあ。

72 :55 :2000/10/06(金) 14:43
ああ、別に template じゃなくて、正確には parameterized type の機能が欲しいのう。

73 :名無しさん@お腹いっぱい。 :2000/10/06(金) 14:52
>63
template はコードを膨張させるとは限らないんだよ。
C++ の実装がたまたまそうなっているだけ。

>69
>だって、何やってるか局所的に見て判るもの
は?意味不明。

74 :名無しさん@お腹いっぱい。 :2000/10/06(金) 15:14
>>71
NTではFiber APIとして実装されています。


75 :D使い :2000/10/06(金) 15:15
以前はTemplateほしいと思ってたけど最近はあんまり思わないなぁ。
TObjectStackとかTObjectQueseとかから、property Itemと
Add()だけオーバーライドした派生クラス作るし。
Template 作ったら演算子オーバーロードも必要だし、
そこまでするとC++になってしまう。
今ぐらいがちょうどいいバランスかな、と。
どうしても使いたいならC++使うし。


76 :名無しさん@お腹いっぱい。 :2000/10/06(金) 15:21
>Template 作ったら演算子オーバーロードも必要だし、
なぜですか?

77 :D使い :2000/10/06(金) 15:30
templateって言語機能としては強力だけどシンプルさが失われてしまう。
多分コードの可読性が落ちることだろう。
TObjectしか格納できないコンテナライブラリってJavaもおなじ。
Platform NativeなJavaっていうのがDelphiの進むべき方向だと最近思ふ。


78 :名無しさん@お腹いっぱい。 :2000/10/06(金) 15:34
>77
>多分コードの可読性が落ちることだろう。
キャスト繰り返すこととか、型ごとにクラスをつくる
(Java3D の Vector3d, Vector3f とか)ことの方が、
可読性落ちると思うけれど。

79 :D使い :2000/10/06(金) 15:36
>>Template 作ったら演算子オーバーロードも必要だし、
>なぜですか?
比較演算子なかったらソートさえもできない

80 :名無しさん@お腹いっぱい。 :2000/10/06(金) 15:40
演算子オーバロードとかテンプレートとか、
ややこしいのはコンパイラ上ではなく、
pascal的スクリプトを用意してそれで実現して欲しいなあ

object.script('c:=a+b;');みたいな感じ

81 :名無しさん@お腹いっぱい。 :2000/10/06(金) 15:47
>比較演算子なかったらソートさえもできない
ソートするためには比較(関数・演算子)が必要だが、
template → ソート は発想が飛びすぎ。

Effective C++に載ってる、総称ポインタとtemplateを使った
Stackクラスはみた?
templateがなければ、あのエレガントさは実現できないでしょう。
(つまり、使用する型毎に派生させる必要がある)

82 :75>79 :2000/10/06(金) 15:48
すみません。もう少し具体的にどういうことか教えてもらえませんか?

83 :80 :2000/10/06(金) 15:51
あ、a,b,cは 当然object上のpublishedプロパティね。publishedメソッド
も自動的にスクリプト側から使えるものとするね。


84 :>81 :2000/10/06(金) 16:20
演算子オーバーロードが無いとテンプレートはリスト/スタックなどの
ただ値を保持するだけのクラスにしか使えないな

85 :名無しさん@お腹いっぱい。 :2000/10/06(金) 16:25
>84
関数をオーバーロードするって考え方は出来ないのかね〜

86 :>85 :2000/10/06(金) 16:32
それは同一ユニットでしか通用しないじゃん。

87 :名無しさん@お腹いっぱい。 :2000/10/06(金) 17:15
なんか、
「template = 演算子のオーバーロード」とか
「template = コンテナクラス」と考えている人が多いな。

「template = アルゴリズムの継承」でしょ。
演算子オーバーロードは、アルゴリズムをスマートに記述するための
手段に過ぎないし、コンテナクラスは応用例に過ぎない。
さらに、javaもそうだけど、
templateがないまま汎用コンテナクラスを実装すると、
危険or効率の悪いダウンキャストが必要になる。
templateでラップすれば安全性がずっと高まる。

ちなみに、C言語にはqsortという関数があるが、
これは、オブジェクトのアドレスと比較関数を
パラメータとして、一般的な「ソート」を実現している。
このように、コンテナクラス程度の基本的なアルゴリズムのためなら、
compareとequalがあれば十分。さらにis-aもあれば言う事なし。

>それは同一ユニットでしか通用しないじゃん。
そうなの?知らんけど。で、
  関数のオーバーロードは同一ユニットのみ
→ 演算子のオーバーロードがなければ使いものにならない
→ templateは価値が全く無い
になる訳ね。

仮にtemplateが導入されても「使わなけりゃいいじゃん」
templateのせいでコンパイル時間が2倍になったら嫌だろうけど、
それ以外に弊害はあるわけ?
誰も使う事を強制しているわけじゃないでしょうが。
何故そこまでして不用論を展開するのか、理由がわからないな。
旧バージョンでコンパイルできないから?
それとも、「今の仕様が最良」で、改変は認めたくないって事?
確かに言語仕様は複雑になってしまっているけどさ。

「Delphiが最良、改善点(劣る面)はない」
この考えで固定されている人があまりに多いから、
「デル厨は・・・」と言われるんだよ。<煽り

88 :>87 :2000/10/06(金) 17:32
まあ良く判ってないから漠然とした不安を感じてるんだ。怒らせたならゴメン。

どんな感じの文法と、実装になるのかな?
テンプレートだけ定義したユニットみたいなのが必要だよね?
でその記述方法は?
そして利用時の記述方法は?

・・・・具体性が無いと不安な人より。

89 :名無しさん@お腹いっぱい。 :2000/10/06(金) 17:32
>>77
>templateって言語機能としては強力だけどシンプルさが失われてしまう。
使う分には非常にシンプルだが?
まさか、キャストを多用してる方がシンプルだとかいう寝言は言わないよね?

確かに、<>の記述はうざい気もするけど、typedefや#defineもあるからうまく使え
ばそんなに問題にはならないと思うが。

あと、クラステンプレートの記述は確かにシンプルとは言い難いけど、関数テンプ
レートの記述はかなりシンプルだよ。

90 :名無しさん@お腹いっぱい。 :2000/10/06(金) 17:33
Java は 「まともな」 "template" を導入する場合VM の仕様変更が必要だから、
template を導入するのは難しいかもしれないが、
Delphi の場合は template 導入しても、87が言うように
「使わない」っていう選択肢があるから、いいんじゃない?

91 :名無しさん@お腹いっぱい。 :2000/10/06(金) 17:49
C++ でテンプレートを実装するためにどれだけ苦労するか、
知っていれば気楽に「テンプレートを」とはいうまい。

Java も、C++ より単純化した、パラメタライズド・オブジェクト
を導入するでしょ?

C++ テンプレートの処理系にとっての一番の問題は、
実体化されるまでコードを吐けないということだな。

こういった問題を、C++ では「すべてのコードが同じ
ヘッダーファイルを読み込む」ことを仮定して逃げている。
個々のソースごとにコードを生成し、「運がよければ」
リンカが重複コードをまとめてくれるだろう。という
戦略だ。

これは、.H を持たない Pascal にとってはきつい。
売りである、コンパイル速度を維持することは
難しいだろう。

92 :テンプレート不要派 :2000/10/06(金) 19:17
テンプレートの具体的な実装方法は?
C++と同じマクロみたいなのが欲しいなら
単にプリプロセッサをかませばいい。
欲しい人が自分で作って公開したらいいんじゃないの?
ようは、ユニットの自動作成機能みたいなものじゃない。
言語に無理に組込んで貰う必要はないと思う。

その為にエディタとかが異常に重くなるよりはよほど良いのでは?

93 :名無しさん@お腹いっぱい。 :2000/10/06(金) 20:35
>ようは、ユニットの自動作成機能みたいなものじゃない。
ほんじゃ、ウィザード(エキスパート)を作ればいい訳だ。


94 :名無しさん@お腹いっぱい。 :2000/10/06(金) 21:47
>C++と同じマクロみたいなのが欲しいなら
うーん。#define 使ったトリックで、Generic Programing を
したくないからテンプレートが出てきたんであって、
それを逆戻りする必要性はないな。

95 :>94 :2000/10/06(金) 22:37
じゃなくて、テンプレートライブラリがいわゆる実コードの入ったライブラリ
ではなく、実コードに展開する為の方法を記述したライブラリ方式で実現する
事をもって マクロみたいなものと言ってるんでは?


96 :名無しさん@お腹いっぱい。 :2000/10/06(金) 23:47
希望してるテンプレートって
uses <嵌めたいクラス名> in 'テンプレート定義ファイル'
とかやると 自動的にユニットが作られるみたいな感じかな?

97 :名無しさん@お腹いっぱい。 :2000/10/07(土) 00:56
Turbo Pascal時代にこんなやり方でgenericなコンテナライブラリを作りました。
例は関数ですがクラスにも応用できます。
#そういえば当時はresultなんてなかったな

max.int.pas
function Max(a, b: T): T;
[eof]

max.imp.pas
function Max(a, b: T): T;
begin
if a > b then
Result := a
else
Result := b;
end;
[eof]

int_max.pas
unit int_max;
interface
type T= Integer;
{$i max.int.pas}
implementation
{$i max.imp.pas}
end.
[eof]

使い方
uses int_max, chr_max;
var
n: Integer;
c: Char;
begin
n := int_max.max(10, 30);
c := chr_max.max('A', 'B');
end;

98 :名無しさん@お腹いっぱい。 :2000/10/07(土) 01:02
ありゃ
何でインデントが消えちゃうんだろ?

99 :>98 :2000/10/07(土) 01:19
全角スペースに置換するしかないみたいよ

100 :名無しさん@お腹いっぱい。 :2000/10/07(土) 01:55
>>98
スペースを&nbsp;に置換するという手もある。
コピペにはこっちの方が便利。

101 :名無しさん@お腹いっぱい。 :2000/10/07(土) 10:12
求む Delphi6 情報!

102 :名無しさん@お腹いっぱい。 :2000/10/07(土) 13:38
SOAPをサポートする。>Kylix & D6

103 :名無しさん@お腹いっぱい。 :2000/10/07(土) 13:40
TPageControlは ShowFrameプロパティが追加される。>Kylix

104 :名無しさん@お腹いっぱい。 :2000/10/07(土) 13:43
http://www.drbob42.com/Delphi6/index.htm


105 :名無しさん@お腹いっぱい。 :2000/10/07(土) 15:17
>104
本を買えってこと?

106 :名無しさん@お腹いっぱい。 :2000/10/07(土) 15:27
既にこんな本も。
Delphi 6 Developer's Guide
Osborne McGraw-Hill; ISBN: 0072129956


107 :名無しさん@お腹いっぱい。 :2000/10/07(土) 16:57
template 不要論もわからなくはないが、キャスティングの問題とかは
どうするんだ?

108 :名無しさん@お腹いっぱい。 :2000/10/07(土) 17:19
えーと、とりあえず言語仕様にブチ込んで
いらねー奴は使うなというのは反対。

Delphiの最重要キーワードである「最終的な生産性の高さ」という観点からみた場合、
# 好き・嫌い、ラクチン・面倒だけで議論してもしょうがないよね。
どこでもキャストは問題あり。
asが安全と言ったところで配布したアプリで例外出したらしょうがないでしょ?
可能な限りコンパイル時に検出したい。

コンテナクラスについては
>>75
>TObjectStackとかTObjectQueseとかから、property Itemと
>Add()だけオーバーライドした派生クラス作るし。
が妥当な意見。確かにこれやる度に野暮ったくってうんざりするけど、
増加するコード量・オーバーヘッドはわずかだし、検証も簡単でバグもでない。


109 :名無しさん@お腹いっぱい。 :2000/10/07(土) 18:32
>108
># 好き・嫌い、ラクチン・面倒だけで議論してもしょうがないよね。
まぁ、楽チンってのは重要だよな。
楽チンだけれど、可読性が下がるとかあればまた別だけれどね。

TObjectList を継承する方法もあるが、
TList -> TMyObjectList とするより、
TList<TMyObject> とした方が楽だし読みやすいのではないか。

110 :名無しさん@お腹いっぱい。 :2000/10/07(土) 23:14
高度な話んなかで、腰折りっぽくてもうしわけねぇ。
プロジェクトのソースを、バージョンごとに管理・・・。
CVS,RCSっぽいやつのDelphi版ってありませんか?

111 :108 :2000/10/07(土) 23:30
>>増加するコード量・オーバーヘッドはわずかだし、検証も簡単でバグもでない。
>TList<TMyObject> とした方が楽だし読みやすいのではないか。
まあそれは認めるし、(俺 as プログラムヲタ)の血が騒ぐ。
でも見てくれがよいという程度のメリットでは、
templateなんて大技が持ち込まれることは無いだろうね。

たぶんInpriseはそれを理解した上で>75の手法を取り入れたんじゃないかな。
# なんか議論が循環的になってきぞ

112 :108 :2000/10/07(土) 23:32
>まぁ、楽チンってのは重要だよな。
>楽チンだけれど、可読性が下がるとかあればまた別だけれどね。
"楽チン"は書こうかどうか迷ったんだけど、
やっぱりつつかれちゃったね。

生産性を下げるような超短期的な楽チンのお手本が>6。
いちいちローカル変数を宣言すべきか省略すべきか意識的に判断する必要があるし、
デバッガで参照できないし、コード補完を利用できないor2種類用意する必要があるし、
さらにはこんな書き方教科書に載ってないから新卒DEL坊が必ず聞きにくるというおまけつき。
んで最後にメソッドfooに参照を渡す必要がでてきてローカル変数を使うように書き直して一件落着。

これだけのリスクを冒してまで、数バイトのタイプをケチる必要ある?
頼むから上っ面だけのクレバーなコード書くのやめて > ウチのDEL坊s

話を戻すとPascalは元々冗長なコーディングをする言語であるから、
生産性を上がらないようなら、
無理して変なスタイル・機能を持ち込んだりしないで、
我慢して普通のコーディングをしてね。
というのが俺の考え。


113 :名無しさん@お腹いっぱい。 :2000/10/07(土) 23:38
110>
Enterprise版にはTeamSourceというのが統合されてる。
単体でも確か売ってたと思う。

それ以外の外部の管理ツールは
例えばUnit1.pasとUnit1.dfmを
常にペアで扱う必要があって結構注意が必要。
# 以前Visual SourceSafeでpasだけ管理してひどい目にあった
だからプロジェクト単位・ディレクトリ単位で管理するのが楽。


114 :109 as D厨 :2000/10/07(土) 23:52
>111
なるほど。
むやみに言語を拡張する必要がない(しないほうが良い)という意味では
template はいらないとは思う。
少なくとも導入するなら、 Eiffel の総称(制限つきの総称)
みたいなのを導入して欲しい。

・・・というか、template(%総称)って、コンテナ以外の使い道って
結構あるのかなぁ?

115 :D使い :2000/10/08(日) 00:42
templateについてはどうしてもC++の実装で考えてしまう。
身近な例が他にないからなぁ。
とりあえず、>91さんの言うJavaのParameterized Objectかな?
勉強しよっと。参考ページとかないですかねぇ?

Templateに近いものが導入されたら、絶対にSTLもほしくなると思う。
どっちにしても肥大化は避けられないのね。

>>97 すごい!目から鱗!

>CVS
K2Editorの作者はCVS使ってるようだけど。どうなんだろ?


116 :名無しさん@お腹いっぱい。 :2000/10/08(日) 00:59
コマンドライン版CVSは勘弁してほしいけど
WinCVSはとても良い。半端だけどリファレンスもでた。
www.wincvs.com
アンチMS派はこれに統一されるんじゃないかな。


117 :名無しさん@お腹いっぱい。 :2000/10/08(日) 03:49
静的な型付けのオブジェクト指向言語は、テンプレート(のような仕掛け)が
ないと、キャストが増えてイヤーンな感じがする。

118 :名無しさん@お腹いっぱい。 :2000/10/08(日) 06:40
www.linkclub.or.jp/~tumibito/soft-an/cvs/download.html

119 :名無しさん@お腹いっぱい。 :2000/10/08(日) 12:19
ところで、 Continue や Break が手続きなのはなぜなんだ?
と、 Writeln みたいな、引数の数に制限ないのは自分では宣言できない
のも気持ち悪いのぉ。

120 :>119 :2000/10/08(日) 14:46
continue;break;exit;が手続きなのは、文法的に手続の書ける位置に
書くものだからです。もちろん、書いて間違いな位置は沢山ありますが
Pコード式の体系なら実際に手続きだったのかもしれません

引数の数については最近のDelphiならoverloadで対応可能かもしれません
しかしwritelnは型を自動判別する機能もありますから同じようにするには
全部の組み合わせを書かなければならない訳で、実際にやるのは苦しいかも
それよりオープン配列という便利なものがありますから無意味ですね。

まあこれはヘソみないなものですね。特に不要だけどついてる

121 :名無しさん@お腹いっぱい。 :2000/10/08(日) 15:33
>>114
>少なくとも導入するなら、 Eiffel の総称(制限つきの総称)
>みたいなのを導入して欲しい。
Object Pascalの仮想拡張文法によるサンプルコード希望。
# 昔メイヤー先生のOOP本読んだけど
# サンプルで使われてたEiffelの事は完全に忘れちゃってる

>>115
>Templateに近いものが導入されたら、絶対にSTLもほしくなると思う。
>どっちにしても肥大化は避けられないのね。
ライブラリの肥大化は大歓迎。ライブラリの貧弱なOOPLは役に立たない。
OOPはある意味ライブラリの効率的な作成・利用技術だからね。
逆に言語仕様の肥大化はこんな事になる。
http://piza.2ch.net/test/read.cgi?bbs=tech&key=970844960
PL/I症候群てやつね。

>>117
goto 107

堂に入った堂々巡りだな。
仮にtemplate入れてもTStrings.ObjectsやTag,Dataプロパティの
キャストは消えないよ。それとも消えるの?よくわからん。


122 :名無しさん@お腹いっぱい。 :2000/10/08(日) 16:04
キャストや継承云々は、
 ライブラリの使用者が意識して使う必要があるか?
という点が重要じゃないかな。

class GenericStack {
protected:  // 実体を作らせない
  GenericStack();
  ~GenericStack();
  void push(const void *object);
  void * pop();
private:
  struct StackNode {・・・};
  StackNode *Top;
};
class IntegerStack: public GenericStack {・・・}
継承して使うのが普通の考え方だけど、

template <class T>
class Stack: private GenericStack {
public:
  void push(T *object) { GenericStack::push(object); }
  T * pop() { return static_cast<T *>(GenericStack::pop()); }
};
インターフェースをそのまま利用可能にし、階層の知識は不要
キャストを使わずに利用でき、出力コードの増加はゼロ

generic.hライクなマクロでも実現できるけど、
その場合、型名を引数にしなければいけないね。

123 :名無しさん@お腹いっぱい。 :2000/10/08(日) 16:26
> >>117
>goto 107
>
>堂に入った堂々巡りだな。
>仮にtemplate入れてもTStrings.ObjectsやTag,Dataプロパティの
>キャストは消えないよ。それとも消えるの?よくわからん。

Javaなんかでコンテナクラスを使用してると、ダウンキャストが
増えるんで、テンプレートがあればなぁ、と思うことがあるよ。
あ、Delphiってコンテナクラスが無いんだっけ?

124 :名無しさん@お腹いっぱい。 :2000/10/08(日) 16:41
結局「欲しい」「いらない」は、
実装したときのメリットとデメリットのトレードオフだから、
実際に実装されたモノを見ないと、大きさは計れない。
また、立場(設計側・使用側)により見解も異なる。
つーか、ここでうだうだ言っても、結局Inpriseの方針が全てだから・・
みんなそれは理解した上で言いたい事を言ってるだけだからね。

マクロとか、プリプロセッサは、
言語仕様に取りこまれるかどうかで生産性は大きく変わるでしょ。
自作のプリプロセッサをかけたソースを元にデバッグするとなんて、
修正しながらのテストが出来ないし、makeもMakefileから。

「ほぼ実現出来る」から「いらない」って単純に考えられるかなあ。
トレードオフと考えて判断するなら納得だけど。
例えば「C++にfinallyが欲しい」という意見があるけど、
デストラクタとマクロを使って似たような構文は実現出来る。
でも、それでも欲しいのは何故?
finallyが「あった方が便利」だからだと思うんだけど。

125 :>122 :2000/10/08(日) 17:24
それは、ようは継承を効率良く書くためというか、下位プログラマに書かせるなんだよね?
自分で書くなら要らんように思うが?
自分で書く時に効率良く書きたいなら、>>97の方法で使いたい時ソースをインクルードでは駄目かな?
まあDelphiはC++のようにどこでも型定義出来る訳じゃないから難しいか。

何故反対するかというと、この機能を実現したとすると、今の usesで
使いたいユニットをリンクする仕掛けを踏襲するには、コンパイル済ユニット
に、その手の情報(コンパイルしてない情報)を持たせなければならない。
すると、元のユニットを修正すると、そのユニットを使うと宣言してる全てを
コンパイルしなければならない。
たとえば、コンポーネントがソース無しで提供される事は良くあるけど、
そのコンポーネントでテンプレートが使われていたら、その依存関係が
非常にややこしくならないか?

126 :125 :2000/10/08(日) 17:34
あるテンプレート提供された関数的ライブラリAが公開されているとする
別のコンポBがAを使っていてソース無しで公開されいた。
AとBを同時に使ってCを作った。
ところがAがバージョンアップされた。
普通のライブラリならAを更新するだけで問題無い。
でもテンプレートライブラリだとBを再コンパイルしなければならないのでは?

127 :220 :2000/10/09(月) 01:44
げっ、文字が多いよ。ヨッパライにはつらすぎる。
おまけにジャックルーシェはゴミだし...

>>122
>階層の知識は不要
これはウソ。親クラスのインターフェースを知っとく必要があるでしょ。
class library利用者は最低限継承を理解してないとだめ。
実際は(データベース)コンポを使うだけという最下層があるんだけど。

>>123
その議論を今までえんえんとしてたの。>>64あたりから読んでね
現状は基底クラスであるTObjectのみしか保持できないコンテナライブラリのみある
おかげでダウンキャストをソース全域でやる必要がある。でも抜け道もある。>75

>>124
C++のfinallyは絶対必要。いくつかのバグが未然に防げる可能性が非常に高い。ブロックローカルなクラスなんてナンセンス。
あるいは>>12をサポートしてもいいかもしれない。生産性向上にはほとんど寄与しないけど。
ではなぜtemplateはだめでこっちは賛成なのか?
それは上記2つの改善は導入したところで全然副作用がないから。
templateは125,126の言うように、副作用がでかすぎる。
最悪VCL,コンテナライブラリの再設計が必要になる。
このコストはtemplateの導入メリットを遙かに上回る
#一日中コンテナクラスを宣言してるわけじゃないでしょ?
よって導入の必要性なし。これがトレードオフの結果。

...なんてのは、ここで言うまでもなくInpriseが判断した結果だと思うよ。
ここらへんのInpriseのエンジニアの徹底した現実主義に基づいた
判断力(サポートするアプリ・プラットフォームの範囲、
控えめでフラストレーションがたまるが強力な言語仕様、
実行速度などなど)はDelphiに関しては絶対的に信頼できるよ。
というか少なくとも俺はしてるの。いまのところ。



128 :121 :2000/10/09(月) 01:45
げっ、文字が多いよ。ヨッパライにはつらすぎる。
おまけにジャックルーシェはゴミだし...

>>122
>階層の知識は不要
これはウソ。親クラスのインターフェースを知っとく必要があるでしょ。
class library利用者は最低限継承を理解してないとだめ。
実際は(データベース)コンポを使うだけという最下層があるんだけど。

>>123
その議論を今までえんえんとしてたの。>>64あたりから読んでね
現状は基底クラスであるTObjectのみしか保持できないコンテナライブラリのみある
おかげでダウンキャストをソース全域でやる必要がある。でも抜け道もある。>75

>>124
C++のfinallyは絶対必要。いくつかのバグが未然に防げる可能性が非常に高い。ブロックローカルなクラスなんてナンセンス。
あるいは>>12をサポートしてもいいかもしれない。生産性向上にはほとんど寄与しないけど。
ではなぜtemplateはだめでこっちは賛成なのか?
それは上記2つの改善は導入したところで全然副作用がないから。
templateは125,126の言うように、副作用がでかすぎる。
最悪VCL,コンテナライブラリの再設計が必要になる。
このコストはtemplateの導入メリットを遙かに上回る
#一日中コンテナクラスを宣言してるわけじゃないでしょ?
よって導入の必要性なし。これがトレードオフの結果。

...なんてのは、ここで言うまでもなくInpriseが判断した結果だと思うよ。
ここらへんのInpriseのエンジニアの徹底した現実主義に基づいた
判断力(サポートするアプリ・プラットフォームの範囲、
控えめでフラストレーションがたまるが強力な言語仕様、
実行速度などなど)はDelphiに関しては絶対的に信頼できるよ。
というか少なくとも俺はしてるの。いまのところ。



129 :名無しさん@お腹いっぱい。 :2000/10/09(月) 12:28
>126
それは、つまりバイナリレベルで template が表現できない、
ってことだよね。
その考えが間違っていると思う。
確かに、 C++ の template をそのまま導入したら、
ソースが必要になるが、きちんと設計されていれば
バイナリのままで問題ないはず。

130 :提案 :2000/10/10(火) 09:49
という事で、このスレでは、バイナリレベルでどうやって
テンプレートを実現するか的方向は如何? 非常に興味あります。

単に、継承を気軽に書く機能程度なら想像つくのですが・・・

131 :>130 :2000/10/10(火) 10:47
確かに俺も想像力が貧困みたい。 継承を気軽に書く=クラスの割当てしか思い付かない。
こんな感じかな?

新クラス名 Allocate 親クラス名 配給クラス名
例:
TFormsList Allocate TList TForm
機能としては 親クラスのTObjectを配給クラス名に呼び替えて使うだけ

132 :名無しさん@お腹いっぱい。 :2000/10/10(火) 10:51
なんか必要性もロクにプレゼンできてないのに
実装論に突入しちゃうの?俺はもう飽きたから抜けるけど。

まとめ
・過去にTStackがボトルネックになって困ったる人いるの?
・それをvirtual使わない自前のTMyStackでリプレースして改善されたの?
・TObjectStack継承してタイプ数増えてバグ出てスケジュール遅れた人いるの?
・総称で充分じゃん、という議論はないの?
・templateいれたらinlineも入れるの?
・inlineいれたらinterfaceにコード書くの?
・コード展開したらさらに最適化弱くなるよ?
・上の入れても結局オプティマイザの貧弱さによる速度低下の方が大きくない?
# 関数呼び出しのオーバーヘッドすら問題になるような
# クリティカルなプロジェクトはそもそもBCB,Delphiじゃ無理
# てゆーか、どうしてC++であるBCBはDelphiより速くないの?
・コンパイラ・ライブラリの大改造より先にInpriseにやって欲しいことないの?


133 :名無しさん@お腹いっぱい。 :2000/10/10(火) 10:55
>・コード展開したらさらに最適化弱くなるよ?
これはウソだね。ごめんなさい。

134 :130 :2000/10/10(火) 11:04
いや、テンプレート論は 他の言語でのプログラミング用語スレでやってるみたいだからって意味で

135 :130 :2000/10/10(火) 11:06
こっちのスレは、バイナリ(コンパイル済ユニットファイル)レベルで
実現出来ない機能は要らない的な方向みたいに感じたので・・・勝手に提案しました

136 :ソース管理 :2000/10/10(火) 13:41
う〜んむ、やっぱ、CVSなのかなぁ・・・。
CVSは若干、高機能すぎる気がしたのと、重かったりするのがちょっと・・・。
う〜んむ・・・ 簡単なのでいいんだよね・・・。
なんか、不毛な気もするけど、自分で作ってみる事にします。
どっかで作ってるの見かけたら、優しくしてね・・・。

137 :名称未設定 :2000/10/10(火) 14:45
自分でやるなら
バージョン名・日付などをディレクトリ名にして
WinDiffというのが簡単ですよ。

138 :名無しさん@お腹いっぱい。 :2000/10/11(水) 12:08
>>136
つーかCVSでないと、複数のファイルまとめてバージョンXXみたいな管理
やりにくいんだよね。RCSのstate使ってできなくもないけど面倒くさい。

ブランチ分けて-current, -stableみたいにできるのも便利だし。

139 :名無しさん@お腹いっぱい。 :2000/10/11(水) 15:22
>>138
ブランチわかってない奴にプロジェクト引き渡したら、
データ壊しやがった。(バックアップはあったけど)
ツールは周りのレベルをよく見て使いすぎに注意しましょう。

>>135
>132は勝手に抜けただけなんだから、
勝手に続けちゃっていいよ。それが2chじゃん。

どうせならC++のSTLを1行も変えずに導入でき、
さらになるべくObject Pascal文法拡張を最小限に抑えるような
実装を話し合ってくれると面白いぞ。


140 :名無しさん@お腹いっぱい。 :2000/10/11(水) 20:35
確かに制限つきの総称はいらないな。

141 :>139 :2000/10/11(水) 20:37
>どうせならC++のSTLを1行も変えずに導入でき
この段階で既にpascalソースを吐くコンパイラを作れと同義かも

142 :名無しさん@お腹いっぱい。 :2000/10/11(水) 20:43
>141
STL移植&アップデートするより
コンパイラ・コンバータ作ったほうが楽じゃん<-暴論?

143 :名無しさん@お腹いっぱい。 :2000/10/11(水) 21:01
>140
理由を述べよ

144 :名無しさん@お腹いっぱい。 :2000/10/11(水) 22:07
では、まじめな案。

type
TCollection(ItemType : TObject) = class
protected
FItems: array of ItemType;
FCount: Integer;
function GetItem(Index: Integer): ItemType;
procedure SetItem(Index: Integer; Value: ItemType);

public
procedure Add(Item: ItemType);
function IndexOf(Item: ItemType): Integer;
procedure Remove(Item: ItemType);
property Count: Integer FCount;
property Items[Index: Integer]: ItemType read GetItem write SetItem;
end;


使い方の例
type
TControlCollection = TCollection(TControl);

肝は、型引数として Delphi Class のみに限定するところ。
Delphi Class は実体としてはヒープ上のメモリブロックへの
ポインタでしかない。だからコンパイル時の型チェックさえ処理できれば
生成コードそのものはポインタのやり取りと RTTI で実装可能。

その代償として、TCollection(integer) は宣言できない。


145 :>144 :2000/10/11(水) 22:17
実装としては、TCollectionの ItemType=TObjectにしてコンパイル
してしまって、利用側で隠れて As 使うって事だよね?

146 :名無しさん@お腹いっぱい。 :2000/10/11(水) 22:54
そ。理解できる人は一人はいるか。
実際には、コンパイラ側で最適化できる部分は多いので
暗黙の as はかなり削除できる。

147 :名無しさん@お腹いっぱい。 :2000/10/12(木) 04:16
一人しか、いないみたいだね。

148 :名無しさん@お腹いっぱい。 :2000/10/12(木) 10:19
>132眺めてておもうんですが、
Delphiアプリのボトルネックってどこなんでしょ?
個人的にはこんな感じだと思います
UI(人間) = DBコンポ >>>> 最適化の弱さ
>>> virtualメソッド呼び出し >= 普通のメソッド呼び出し

149 :名無しさん@お腹いっぱい。 :2000/10/12(木) 10:55
>144,145
実行時のasは余計な気がする
EditCollection.Add( TEdit(Form1) )
とかできなくなっちゃうし(必要性云々は別として)

逆にこんなタコなコードをいちいちチェックするための
コストを支払う必要はないのでは?

ビルド時のチェックのみで十分だと思いますよ。


150 :名無しさん@お腹いっぱい。 :2000/10/12(木) 12:09
asは
Assert(xxxx is Tyyyy)であると心得よ

asに頼りすぎちゃいかんよ

151 :名無しさん@お腹いっぱい。 :2000/10/13(金) 08:22
TListを継承すればいいじゃん

152 :29 :2000/10/21(土) 17:26
TObject.MethodAddressを使えば
publishedメソッドを呼べることはわかりました。

publishedメソッドを検索・列挙して自動的に
全部(あるいはメソッド名でフィルタをかけて)呼ぶ
という事は可能でしょうか。


153 :名無しさん@お腹いっぱい。 :2000/10/21(土) 17:31
オブジェクトにリンクされているのならね

154 :リンクされているのならね:2000/11/15(水) 13:15
http://piza.2ch.net/test/read.cgi?bbs=tech&key=970151348

155 :名無しさん@お腹いっぱい。:2000/11/15(水) 13:32
>29 出来ると思うけど、あまり意味ないように思うんだが?

156 :名無しさん@お腹いっぱい。:2000/12/03(日) 20:00
たまにはあげる

157 :名無しさん@お腹いっぱい。:2000/12/04(月) 11:34
TStatusBarの右下に三角のマークツマミがあります
あれをFormやPanelに描くにはどうしたらいいんですか?

ついでにその上にマウスカーソルをもっていくと
カーソルが変化するとうれしいです。
ヨロツク

158 :名無しさん@お腹いっぱい。:2000/12/04(月) 16:34
Delphiでシェルのコンテキストメニューに独自のメニュー追加する方法教えて下さい。
例えばコンテキストメニューに"ファイル名をクリップボードにコピー"とか
追加してみたいです。たぶんDLL作る必要があるんだと思いますが。

159 :名無しさん@お腹いっぱい。:2000/12/04(月) 17:27
貴方なんども聞いてますね、ご苦労さん
>158
Delphiシェル本を読んで、DelphiデモのContextMenuを動かしたら
まあまあわかりますよ。


160 :名無しさん@お腹いっぱい。:2000/12/04(月) 21:05
Delphi買ったけど、マニュアルが難しくて何やっていいのか
わからないです。


161 :名無しさん@お腹いっぱい。:2000/12/04(月) 22:10
>>160
何をしたくて買ったのか思い出してください。

162 :名無しさん@お腹いっぱい。:2000/12/05(火) 01:59
Delphi5で、Integerに対してshr演算子使うと、ほんとにshr命令を出してしまうのですが
sar命令にしたい時ってどーしたらいいのでしょうか
というか符合付き右シフトなんですけど


163 :名無しさん@お腹いっぱい。:2000/12/05(火) 02:20
div 2

164 :名無しさん@お腹いっぱい。:2000/12/05(火) 02:50
>div 2
うーん、それだと-1をsarしても-1なんだけど
-1 div 2 だと0になっちゃうんですよね〜

165 :名無しさん@お腹いっぱい。:2000/12/05(火) 04:12
>>164
インラインアセンブラを使っては?。簡単だし。

166 :名無しさん@お腹いっぱい。:2000/12/05(火) 06:28
結局
function sar16(aVal: Integer): Integer; register;
asm
sar eax,16
end;
式の中だったんで面倒くさいんで、こんな関数でくるみました

167 :名無しさん@お腹いっぱい。:2000/12/06(水) 15:38
Cの、

#pragma comment(linker, "-section:Shared,rws")

#pragma data_seg("Shared")
HWND hTest = NULL;
#pragma data_seg()

ってDelphiでもやりたいんですけど。
どうやって書くの?

168 :名無しさん@お腹いっぱい。:2000/12/06(水) 16:37
メモリマップトファイルをつかう

169 :167:2000/12/08(金) 13:58
>168
やっぱそうなっちゃうのね(;_;)

170 :名無しさん@お腹いっぱい。:2000/12/15(金) 18:25
if (v >= minValue) and (v <= maxValue) then
のつもりで
if v in [minValue, maxValue] then
と書いていて、バグの原因を突き止めるのに2時間掛った俺萎え
可読性よくしようとして逆に嵌まる見本みたいだったな〜

171 :名無しさん@お腹いっぱい。:2000/12/15(金) 18:59
if v in [minValue..maxValue] then
じゃないの?


172 :名無しさん@お腹いっぱい。:2000/12/15(金) 19:02
>170,171
その書きかたって、速度的には>=<=使うのと変わらないの?

173 :名無しさん@お腹いっぱい。:2000/12/15(金) 19:22
速度的には1回の比較で済むので速いよーな気がする。
ただし集合型は要素数が256以下で0〜255
までの範囲しか取れない。

関係ないけど範囲チェックなら、自分は直感的に
if (minValue <= v) and (v <= maxValue) then
こー書く。逆判定なら、

if (v < minValue) or (maxValue < v) then
こーね。


174 :170:2000/12/15(金) 21:55
>if v in [minValue..maxValue] then
>じゃないの?
そーです、てんてんにしなければいけなかったのです
速度的にはわがんねけど(ぉ
andとかor使うと、vを2回書かなくちゃいけないから
書き換えたときに片方だけ忘れるといやだと思ったのね



175 :名無しさん@お腹いっぱい。:2000/12/16(土) 00:19
>>172-174
おまえら、なぜアセンブラ出力で確認しない?

176 :名無しさん@お腹いっぱい。:2000/12/16(土) 01:21
直接は関係ないんだけどWZ EditorでDelphiのIDEと同等の
コード補完機能ってマクロかなんかでないの?


177 :名無しさん@お腹いっぱい。:2000/12/16(土) 02:36
ブレークポイントで止めてCPUウインドウで確認してみた。
集合演算ではcmp命令にならないようだ。

178 :名無しさん@お腹いっぱい。:2000/12/16(土) 13:13
>関係ないけど範囲チェックなら、自分は直感的に
>if (minValue <= v) and (v <= maxValue) then
おれも!

179 :名無しさん@お腹いっぱい。:2000/12/17(日) 00:35
>>176
無理だろー。型の情報をどっから持ってくるん?

180 :176>179:2000/12/17(日) 00:44
ごめん、そっちじゃなくて「コードテンプレート」だった。
(ctrl+jでwhilebをwhile do begin endに展開する機能。
Wzに類似の機能もあるけどどーも使いづらい)

# でもC++,Javaなどのコード補完はmuleのマクロでできるらしい

181 :名無しさん@お腹いっぱい。:2000/12/17(日) 01:00
関係無いけどB2のキーワード設定に
Pascal構文を入れると、MLが見やすくてよいね。

182 :名無しさん@お腹いっぱい。:2000/12/17(日) 01:15
>>180
定型文をクリップボードにコピーするソフトを
Delphiで自作すれば?あ、でもインデントが問題
になるね。

外部エディタはFree版EmEditorぐらいしか使ってないので
わかりませ〜ん。

183 :ばかもの国津慎吾じゃないぞ:2000/12/21(木) 20:06
20c最後の指令である。

ttp://www.sfdata.ne.jp/windev/iij/htdocs/msg00075.html

これを作れ!



184 :D使いγ:2000/12/21(木) 20:54
へ?

185 :D使いβ:2000/12/21(木) 21:10
何故にVB ML?
新手の煽り?

186 :D使いγ:2000/12/21(木) 21:30
ってゆーか、タスクバーのプロパティで[時計の表示]をOff
にして代わりに自作のタスクトレイ(ステータスエリア)
に表示すれば済む話では?



187 :名無しさん@お腹いっぱい。:2000/12/21(木) 21:55
Delphi使いの平均月収はいくらですか?
21万?

188 :D使いβ:2000/12/22(金) 14:23
まあた煽りか・・・

189 :183:2000/12/22(金) 23:39
なーんだ、まだ出来てないの?
はやくつくれつくれ、って。

Techスレだよ、Tech、
さっさとつくりなさいよ。

190 :名無しさん@お腹いっぱい。:2000/12/23(土) 03:09
interfaceにプロパティ持たせたいとき、
名前と型だけで勘弁してもらう方法ありませんか。
実装クラスでは単にフィールドに結び付けたいのに
いちいちメソッドにしなきゃいけないのってうざったいっす。


191 :デフォルトの名無しさん:2000/12/23(土) 10:40
>>190 実装上インターフェースが示すインスタンスは元のインスタンスとは別に
 作られるのでメソッドは難しくないが、フィールドに結びつけるには
 あまり効率よい方法はないので、メソッドで解決したほうが簡単ではあるまいか

>189 仕様が良く判らん。仕様を書きなさい

192 :名無しさん@お腹いっぱい。:2000/12/23(土) 14:30
TComponent派生でFormに置くと
実行時に内部的にCanvasを生成して
Widht、Heightで、タスククロックのサイズ部分を横取りさせる。

内部Canvasに描画すると
TClockが描画するような感じになってくれるとよいでフ。

つまりTClockアプリが
巷にあふれんばかり登場するように作ってほしい。

誰が答えているのか、わかりそうなもんだな(w

193 :名無しさん@お腹いっぱい。:2000/12/23(土) 14:33
>>183
ってゆーか、自分で作れ阿呆。

194 :名無しさん@お腹いっぱい。:2000/12/23(土) 14:52
>>193
あほっていうヤツがあほ
っていうか、作れない193はあほ?

195 :デフォルトの名無しさん:2000/12/23(土) 14:55
余計に判らん・・・・
 解読すると、
1)名前はTClock
  フォームにある時は非ビジュアルコンポーネント
  プロパティ
   Canvas
   Width・Height
   OnPaintイベント

2)実行時
  常駐してる TrayClockWClass クラスを探しサブクラス化

という事ですか? ならば
 任意のコントロールに対して同じ仕様のコンポーネントを
 親コンポーネントとして作ればもっと応用が利きますね


196 :名無しさん@お腹いっぱい。:2000/12/23(土) 19:24
TClockってのは
有名なフリーソフトだと思うぞ。

197 :名無しさん@お腹いっぱい。:2000/12/24(日) 00:53
ってゆーより、単なる煽り目的だからマジに捉えん方が
いいと思うぞ。

198 :名無しさん@お腹いっぱい。:2000/12/24(日) 01:26
なんか「VBで万年カレンダー」を思い出すよ・・・
(んなこと書くとまた1がしつこく上げてきそうだな。)

199 :名無しさん@お腹いっぱい。:2000/12/24(日) 13:14
>>197
194の厨房的反応といい、VB-MLからの振りといい、
まず間違いなく煽りだろう。(ベクトルVB元気?)

200 :名無しさん@お腹いっぱい。:2000/12/24(日) 16:22
http://www.foo.com/bar.bin
をメモリまたはファイルに保存する最も短いコードはどんなんでしょう?


201 :名無しさん@お腹いっぱい。:2000/12/25(月) 02:13
start http://www.foo.com/bar.bin

202 :Del歴一週間:2000/12/25(月) 11:30
質問なんですが、Outlookの送信者、件名、日付と並んでいるメール選択コンポIは、Delphiでは
何という名前のコンポーネントなんでしょうか?

203 :名無しさん@お腹いっぱい。:2000/12/25(月) 12:05
TListView

204 :名無しさん@お腹いっぱい。:2000/12/25(月) 12:49
TStringGrid(w

205 :Del歴一週間:2000/12/25(月) 16:37
>203
どうもありがとうございました。
一見しただけでは、わかりませんでした。

206 :名無しさん@お腹いっぱい。:2000/12/25(月) 17:08
読んどけ
ttp://www.int21.co.jp/pcdn/vb/noriolib/vbmag/6/aki/

207 :名無しさん@お腹いっぱい。:2000/12/25(月) 18:32
スレ違い。

208 :名無しさん@お腹いっぱい。:2000/12/29(金) 08:32
age

209 :183,192:2001/01/02(火) 14:55
ばかもの、山城慎吾だぞ
21世紀も始まった。

いいかげんに、Delphiで
ttp://www.sfdata.ne.jp/windev/iij/htdocs/msg00075.html
を作れ。

TrayClockWClassは探し当ててハンドルもわかるが
キャプションを変更したりサブクラス化ができないぞ

さっさとコードを書け

ばかものおれは山城慎吾だぞ

210 :デフォルトの名無しさん:2001/01/02(火) 21:19
209は一体何を期待しているのだろう?
山城慎吾ってのも厨房っぽくてものすごく
さむい。

211 :デフォルトの名無しさん:2001/01/04(木) 22:08
俺も昔つくりたかったからわからずともないけど
TClockと同じようなソフトを作りたいんだと思うよ。

TClockはソースも公開しているから
やるきさえあれば、改造できそうだね。
http://homepage1.nifty.com/kazubon/tclock/indexj.html

それにしても、狂いっぷりがすごいね。

212 :デフォルトの名無しさん:2001/01/07(日) 18:48
達人の方にお聞きします。
ttp://www.chuosystem.co.jp/delphi/dev2-1-2.htm
これってどう思います。

俺はやりすぎじゃないかと思う。

213 :名無しさん@一周年:2001/01/07(日) 19:40
今更で申し訳ないんですが、
VB使いとDel坊の戦争はどっちが勝利を収めたのですか?

214 :デフォルトの名無しさん:2001/01/07(日) 20:01
>213
かわいそうにそれくらいしか加われる話題がなかったのね。
Perlスレに行ってマンセーとでも叫んでれば?

215 :デフォルトの名無しさん:2001/01/07(日) 20:58
Delphi欲しいよ〜お金が無いよぉ

216 :デフォルトの名無しさん:2001/01/08(月) 00:57
>>215
働きなさい。
学生だったら学割でラーニング版1万ぐらいで買えるだろ。

217 :デフォルトの名無しさん:2001/01/08(月) 19:17
ToolBar内に動的にToolButtonを追加・削除ってできます?

218 :デフォルトの名無しさん:2001/01/08(月) 20:16
出来るよ。当たり前


219 :デフォルトの名無しさん:2001/01/08(月) 20:38
どうやって?

220 :デフォルトの名無しさん:2001/01/08(月) 20:39
Createすればいいじゃん。

221 :ほり:2001/01/08(月) 20:43
procedure TForm1.Button1Click(Sender: TObject);
var
 ToolBtn: TToolButton;
begin
 ToolBtn := TToolButton.Create(Self);
 ToolBtn.Parent := ToolBar1;
end;


222 :ありがと:2001/01/08(月) 20:52
普通に追加すればいいんですね。
ToolBarの専用メソッドをずっと探してました。

223 :デフォルトの名無しさん:2001/01/09(火) 00:13
TThreadでスレッドを作って中でwhileループさせ、メインスレッドと同時に
処理を行っているのですが、メインが終了するときOnClose()で
terminate,destroyしていますが、終了時にkernelが例外を起こして
しまいます。これは裏のスレッドが終了していないということなのでしょうか?

強制終了フラグを作ってtrueになると裏スレッドが終了するように
して、Close時に立てたりしてみたのですが(もちろんクリティカルつき)ダメでした・・・。


224 :デフォルトの名無しさん:2001/01/09(火) 00:17
waitfor(だっけ?スペル違うかも)で
スレッドが終わるのまってみてください。

225 :デフォルトの名無しさん:2001/01/09(火) 01:05
waitforって、Synchronizeと衝突するとか読んだんですが
併用はできないということなんでしょうか?
(waitforはメッセージ受け取らないし、syncはメッセージ受け取るまで終わらない)


226 :デフォルトの名無しさん:2001/01/09(火) 01:31
誰か
function IsUrl(s: WideString): Boolean
を実装してください。

227 :D使い(久々):2001/01/09(火) 03:03
>>223
Terminate()メソッドはスレッドオブジェクトのTerminatedプロパティを
Trueにしてるだけだから
スレッドのExecute()中でTerminatedプロパティを監視しておく。
スレッドはTerminatedがTrueになったら自分で終了(Execute()を抜ける)

メインスレッドは、
Terminte()して、
WaitFor()でスレッドが自分で終了するのを待って、
Destory()する。 (or FreeOnTerminate = True)

>waitforって、Synchronizeと衝突するとか読んだんですが
Synchronizeに突入する前にTerminated見れ。


228 :デフォルトの名無しさん:2001/01/09(火) 03:28
スレッドのWaitForではまったなぁ

229 :D使い(久々):2001/01/09(火) 03:41
>>Destory()する。 (or FreeOnTerminate = True)
わわ、Free() の間違い。スマソ


230 :デフォルトの名無しさん:2001/01/09(火) 11:21
>>226
仕様はhttp://が先頭にあるか無いかを判定するだけ
か?

231 :226>230:2001/01/09(火) 14:40
いえ、やりたいのはこんなのです
s := 'www.hoge.com';
if IsUrl(s) then
 s := NormalizeUrl(s); // s := 'http://www.hoge.com/'


232 :デフォルトの名無しさん:2001/01/09(火) 15:33
オートコンプリートみたいな機能ですね。
末尾が.comとか.co.jpとか.netとかで判定するのでは
駄目?(直IPアドレスな所もありますが。)

233 :223:2001/01/10(水) 00:30
ありがとうございます。なんとか解決しました。

今日のお馬鹿・・・OnFormCreateで実行環境を初期化して、それが終わる前に
MMTimer走らせたらクラッシュ。マルチスレッドって難しいですね・・・。


234 :奥さん、名無しです:2001/01/10(水) 00:54
余計かもしれんが、
231みたいな用途だとするとIsUrlという名前は不適切じゃないかな。



235 :デフォルトの名無しさん:2001/01/10(水) 04:36
IsHostName


236 :デフォルトの名無しさん:2001/01/10(水) 20:59
ものすごく初歩的な質問で恐縮なんですが、、
手続きや関数でローカル変数って使いますよね?
そのとき割り当てたメモリっていつ解放してるんですか?
アプリケーション終了時には解放するんでしょうけど、
たとえば何時間も起動しっぱなしにしてる場合、無駄な領域が
塵も積もれば山となる的にどんどん増え続けてしまうものなんですか?

237 :デフォルトの名無しさん:2001/01/10(水) 21:35
手続きや関数を出たとき


238 :バッカーです:2001/01/10(水) 21:46
Delphian World 落ちっぱなしなんだけど

239 :バッカーです:2001/01/11(木) 00:00
あ 復活した

240 :D使いβ:2001/01/11(木) 00:27
>>236
正確にはスタックポインタの位置を関数が呼ばれる前に
戻してます。スタックサイズはデフォルトで最少16K、
最大1MByte程なので関数の中で馬鹿でかい配列なんか
宣言するとセグメントフォールトなんか出たりします。

そのため通常はポインタやオブジェクト参照などの
スタック消費量の少ない変数を使用し、実オブジェクトは
ヒープ領域と呼ばれる別セグメントなどに動的に確保します。
それらは明示的に開放する必要があります。

ただし長い文字列型や動的配列、バリアント型などは自動的な
メモリー管理を行っているものが有ります。

241 :236:2001/01/11(木) 01:24
明快な解答ありがとうございます。
馬鹿でかい配列などではなく、ただのIntegerやStringを使う度に気になって
いたんですが、神経質過ぎたみたいでお恥ずかしい限りです。

あと、もう一つ伺いたいんですが、Delphiの内部メッセージ(CM_DialogKeyなど)
についての説明が、ヘルプなどを見ても何一つ記述がありません。
コンポを自作している人はどうしてるんでしょうか?
解説本とかでいいものがあったらぜひ教えてください。

242 :デフォルトの名無しさん:2001/01/11(木) 12:23
VCLソースを検索。後は使用例を参照。
([検索]-[ファイル検索])

本は↓か、
ttp://home.impress.co.jp/books/programming/delphi4pbible/index.htm

↓の「Inside Delphi」がいいと思う。
ttp://www.ascii.co.jp/pb/tech/inprise/inprise.html

Webは定番だけど↓
ttp://www.asahi-net.or.jp/~HA3T-NKMR/


243 :デフォルトの名無しさん:2001/01/11(木) 13:19
みんなレヴェルたか淫だから、
ギコバシックの開発手伝ってやれE

正月ボケも治ってきたろ?

244 :デフォルトの名無しさん:2001/01/12(金) 02:13
HeaderControlメモリリークしてない?

while True do
 THeaderControl.Create(nil).Free;

でメモリが減りまくる

245 :デフォルトの名無しさん:2001/01/12(金) 02:17
>244
ニュースグループでも報告があった。
FImageChangeLink
を開放してないらしい。
しかしなんかかっこいいな<while True do THeaderControl.Create(nil).Free;




246 :236:2001/01/14(日) 04:44
>242
亀レスごめん。取り敢えず「バイブル」の方だけ買ってきました。
が、よく解らない。と言っても、これはこれで良い本ですが。
「Inside Delphi」に期待しようと思います。まだ手に入るかな?
それと、中村さんのところは一応知ってました。レスどうもでした。

#ああ・・・こんなに苦労するくらいなら、
#おとなしくCでSDKやってれば良かった・・・かも知れず。


247 :デフォルトの名無しさん:2001/01/20(土) 14:24
シツモソー。
TCheckBoxで、Checkedプロパティ変更するたびに、
OnClickイベント起動されてうざいんだけど、
こんな風に、イベントハンドラを退避させるしかないのかなぁ。

var tmpEvent: TNotifyEvent;

 tmpEvent := CheckBox.OnClick;
 CheckBox.OnClick := nil;
 CheckBox.Checked := True;
 CheckBox := tmpEvent;

もっと簡単な方法ないノン?

248 :デフォルトの名無しさん:2001/01/20(土) 21:52
OnClickイベントを

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if FProgramChanging>0 then Exit;
ほにゃら
end;

として

Inc(FProgramChanging);
try
CheckBox1.Checked := True;
finally
Dec(FProgramChanging);
end;

でどうよ? このテクはどのコントロールでも使えるよ。

249 :デフォルトの名無しさん:2001/01/20(土) 22:03
b.Parent = aとなるようなTWinControlのインスタンスbのリストって
どうやれば作れるの?Components[]は違うよね。


250 :247:2001/01/20(土) 23:02
>>248
ナノレホドー。
カウンタ使うのがミソやねー。
まとめて複数のプロパティ変更するときにもベソリっぽいし。
thanx!!

よいスレだ

251 :デフォルトの名無しさん:2001/01/21(日) 14:52
>>249
Controls[] だ。

252 :名無しさん@お腹いっぱい。:2001/01/21(日) 16:32
kylixは?


253 :デフォルトの名無しさん:2001/01/22(月) 18:40
>>252
http://expo.nikkeibp.co.jp/netcom21/
ブース4515だ。逝ってこい。



254 :デフォルトの名無しさん:2001/01/26(金) 00:33
ThreadとTimerを使ってリアルタイムシミュレーションのプログラムをしていますが、
片方のスレッドの処理が重く、Timerのスレッドまで圧迫して困っています。
(処理が重くなるとだんだんTimerが遅くなる)

解決法はないものでしょうか?


255 :デフォルトの名無しさん:2001/01/26(金) 00:41
>>254
重いほうのスレッドのプライオリティを下げてみれば?

256 :デフォルトの名無しさん:2001/01/26(金) 00:49
タイマーの代わりにマルチメディアタイマーを使う。
根本的な解決にならんが‥

257 :デフォルトの名無しさん:2001/01/26(金) 03:10
重い方のスレッドに適当にSleep(0)とか紛れこませておく。


258 :デフォルトの名無しさん:2001/01/26(金) 10:39
Kylixは何と呼んでますか?
「カイリックス」「キーリクス」「キゥリクス」?

259 :turbo type D:2001/01/26(金) 23:08
カイリックス

260 :254:2001/01/27(土) 00:30
重いのは描画の関数で、呼び出してから抜けるまでが長いんです。
これが、MMTimerのInterval内で終わればいいんですが、遅いマシンだと
足を引っ張ってしまうって感じです。

sleep(0)を入れようにも、drawメソッド自体が重くて・・・。
やっぱり描画関数のソースを分解しないとダメでしょうか。
(プライオリティについては初めてですがやってみます)


261 :デフォルトの名無しさん:2001/01/27(土) 00:50
>>254
スレッドのプライオリティでダメなら別のプロセスに分けてみたら。
タイマー用のプログラムを別に動かして本体の方にメッセージを投げるとか。
一応本体のプロセスのプライオリティは下げた方がいいかも。

262 :デフォルトの名無しさん:2001/01/27(土) 23:55
揚げてみる。

263 :turbo type D:2001/01/30(火) 10:23
どうしてWindowsのコーディングがすべて
Delphiにならないんだろう。いや、なってくれ頼むから。

適材適所の言語を覚えるのは何ら苦はない。
だがあきらかに
Delphiパスカルより劣ったC++を
Windowsプログラミングのために
覚えなければならないのは面倒だ。



264 :デフォルトの名無しさん:2001/01/30(火) 12:38
BorlandがOSのデストリビューターになればいいんだよ。

265 :デフォルトの名無しさん:2001/01/30(火) 12:40
だれか俺に買ってクレー。
http://shop.borland.com/Product/0,1057,3-15-CQ100477,00.html


266 :デフォルトの名無しさん:2001/01/30(火) 12:41
こっちでもいいからさー。
http://shop.borland.com/Product/0,1057,3-15-CQ100480,00.html

267 :デフォルトの名無しさん:2001/01/30(火) 13:58
よーしおれが買ってや。

268 :デフォルトの名無しさん:2001/01/30(火) 16:37
>>263
ただでさえ糞なWindozeがさらに糞になるから。

>Delphiパスカルより劣ったC++を
VBより劣ったDelphiがC++に勝るわけないだろ。


269 :デフォルトの名無しさん:2001/01/30(火) 18:53
>>263 >>268
どちらも放置決定。

270 :デフォルトの名無しさん:2001/01/30(火) 19:10
DelphiにUML表記のクラスビルダーなんか付かないかなあ。
メソッドや属性を入力していくとそれがそのままコードエディタ
に反映されたりするの。

GUIを作っている時はビジュアルデザイナとコードエディタの
2-Wayなんだけどクラス作る時はコードエディタだけなんだよね・・・

今のコードエクスプローラやコード補完でも十分に使えてはいるけど・・・

271 :デフォルトの名無しさん:2001/01/30(火) 20:47
DelphiにこだわらずにOCL似の言語も登場したらいいんじゃないかな。


272 :>270:2001/01/31(水) 01:35
とりあえずテスティングフレームワークを標準で付けて欲しいかも

273 :デフォルトの名無しさん:2001/01/31(水) 03:28
MLで話題に上っていたが
なんなの?テスティングフレームワークって。

あと>>OCLってなに?

274 :名無さん:2001/01/31(水) 03:38
>264
賛成。
Linuxのディストリビューターになれば良いのに。
そしたらBorland流にOSをいろいろ発展させられるだろうに。


275 :デフォルトの名無しさん:2001/01/31(水) 03:56
>>274
corelとの合併はそれが目的だったんだけど…

corelの株が暴落しておじゃんに。

276 :デフォルトの名無しさん:2001/01/31(水) 11:24
辞書ファイルのような一つの巨大なテキストファイルから、欲しい語句の部分を
読み出すにはどのようなコードを書けば効率よくできるのでしょうか?

277 :276:2001/01/31(水) 11:25
すみません追加です。
語句は五十音順、もしくはアルファベット順に並んでいる場合です。

278 :デフォルトの名無しさん:2001/01/31(水) 11:35
ファイルを一旦全部読んでいいのなら メモリ上に目次を適当な頻度で作る
 目次をバイナリ検索して、ファイルの該当部分を読んで検索すればいい。
 これを別のファイルで保存しとけば次の起動からは高速に起動できる。


それが許されないなら、ファイル全体をバイナリ検索。

279 :278:2001/01/31(水) 11:40
2048バイトを1ブロックとする。
検索中は隣り合う2ブロックを読み、最初にCRとか語句の区切りに使う単語迄を捨てる

まずファイル全体のサイズを調べて真中へんのブロックを読み 後は比較しながらバイナリ検索

280 :276:2001/01/31(水) 12:04
>278
どうもありがとうございます。
目次の作成の部分なんですが、具体的にはaで始まる語句、bで始まる語句
のファイルアドレスを、ファイルなどに書き出すということでしょうか?


281 :not 278:2001/01/31(水) 15:55
>>280
まあ、それで間に合うならそれでいいけどアルゴリズムの本でハッシュを調べると
もっと効率的になるかも。あと一般的な手法としては辞書から検索木を作っちゃう
っていう方法もある。ここはDelphiだからしゃーないけどSTLを使うと楽ちん。

282 :not 278:2001/01/31(水) 16:17
って辞書か、ボケてた。278の方法のほかには二分検索があるね。

283 :not 278:2001/01/31(水) 16:18
ってそれは278のいってることじゃん。鬱山車脳

284 :デフォルトの名無しさん:2001/01/31(水) 17:54
>目次の作成の部分なんですが、具体的にはaで始まる語句、bで始まる語句
>のファイルアドレスを、ファイルなどに書き出すということでしょうか?

それでもいいけど、たとえば100単語毎に語句とそのアドレスを書くようにすれ
ばもっといいと思う。たとえば10万単語あっても目次は1000単語でいい。

で、アドレス間のファイルを(100単語文)一括で読む程度はどうせ
HDが一周するのに収まるだろうから大小はそれほど問題なし。


285 :デフォルトの名無しさん:2001/02/01(木) 00:47
>>276
DBは使えない事情があるの?xBASEのファイルなんて
ダンプしたらまんまテキストのISAMファイルなんだけど・・・

286 :デフォルトの名無しさん:2001/02/01(木) 01:07
>>284の方法にさらに 先頭1文字の変更点も単語表に追加し、
 先頭1文字の表をメモリ上に用意しておけば、もう
  カンペッキ

287 :デフォルトの名無しさん:2001/02/01(木) 01:09
>>285
辞書ファイルの更新が無い状態なら DBは必ずしも効率的でないぞ
中身はB木かその変形だからね

288 :ななし:2001/02/03(土) 19:40
どこかで、漢字を入力するとその読みを表示してくれるソフトをみたのですが、
これはどのようにやれば出来るのでしょうか。
なんかATOKとか関係してるみたい。ATOK用とMS-IME用とで別れてたので。


289 :デフォルトの名無しさん:2001/02/03(土) 20:53
>>288

こんな漢字?

http://www.asahi-net.or.jp/~gv4j-sgur/narik/compo.htm


290 :ななし:2001/02/03(土) 23:49
>>289
おーありがとうございます。
試してみます!

291 :ななし:2001/02/04(日) 02:02
>>289
今そのページにあったコンポーネントを試してみました。
結果ですが、ユーザーによって入力された漢字なら読みを表示出来ますが、
クリップボードからの貼り付けだと、読みは表示できませんでした。

どなたかクリップボードからの貼り付けでもちゃんと読みを表示する方法をご存じないでしょうか。

292 :デフォルトの名無しさん:2001/02/04(日) 02:18
おいおい、漢字には音読み訓読みがあるのはもちろん知ってるよな?
意味解析までしなきゃ到底無理だぞ。

293 :ななし:2001/02/04(日) 02:28
>>292
えっとでもそういうソフトが実際にあるんです。
↓です。
http://hp.vector.co.jp/authors/VA009883/


294 :turbo type D:2001/02/04(日) 02:40
ほんとうだ!
作者にメールしなさい。

295 :デフォルトの名無しさん:2001/02/04(日) 07:26
kakasi って知ってる? dozer にはメジャーじゃないのかな。
http://kakasi.namazu.org/

296 :デフォルトの名無しさん:2001/02/04(日) 13:18
>>291
ユーザーによって入力された漢字はプログラムで比較的楽にとれるんだけど、
読みを解析するとなると急に大変になるぞ。

297 :turbo type D:2001/02/05(月) 01:39
>>293
のソフトはそれほど大変に作られているようには見えないのだが
IMEの再変換を使っているんだろうな。
EmEditorでも再変換機能がある
どうやるんだっけ?


298 :デフォルトの名無しさん:2001/02/05(月) 01:44
マニュアル読め。>297
それでもわからんなら作者に連絡しろ。
それから、デルファイ厨房逝って良し!

299 :turbo type D:2001/02/05(月) 03:55
どうやるんだっけってのは
EmEditorの操作ではなくて
プログラミングでどうやるんだっけ。って事な。

作れないヤツにイって良し呼ばわりされる覚え無し
テメエが先首くくって氏ね.

300 :デフォルトの名無しさん:2001/02/05(月) 10:15
ImmGetConversionListあたりであると推測する。
とにかく頭にImm〜の付くものをヘルプで調べてみては?
英語のヘルプにしか無い様だが。(MSDNでも和訳は無い)

301 :turbo type D:2001/02/05(月) 12:46
自分で作るのめんどいな、
解説してるページどこかにないですか?

302 :デフォルトの名無しさん:2001/02/13(火) 11:51
TRichEd98をDelphi5で使いたい!
やっぱ自分でソース読んで直さなきゃダメ?

303 :デフォルトの名無しさん:2001/02/13(火) 12:30
ソースあるんなら使えるじゃん

304 :turbo type D:2001/02/13(火) 12:30
普通に使えてるけど?>>302

305 :デフォルトの名無しさん:2001/02/13(火) 15:24
Delphiで非同期モニカを使いたいのですが、解説や具体的な例が無くて苦労しています
CreateURLMoniker でIMonikerを得た後にどうしたらいいのでしょう?


306 :デフォルトの名無しさん:2001/02/13(火) 17:01
>>305
私もハッキリ言って判りません。
複数のインターフェースを呼び出さなければならないので面倒みたいです。
WinInet系の を使った方がDelphiでは一般的かもしれません。

Builderでの解説ですが、ここが参考になると思います。
http://www.geocities.co.jp/SiliconValley-PaloAlto/1512/


307 :305:2001/02/13(火) 18:15
>>306
ありがとうございます。
MSDN見て非同期モニカが主流なのかと勘違いしていました。
どちらも日本語資料が見当たらなくて苦労しています。
これから勉強します

308 :305:2001/02/13(火) 20:55
調べてみました。確かに WinInetについての情報は非同期モニカより
2桁くらい多くみつかりした。 306さんの情報のほかに
検索してみつかった情報です

猫でも
http://www.kumei.ne.jp/c_lang/sdk3/sdk_216.htm

InternetReadFile を使用してファイルを取り込む方法
http://www.microsoft.com/japan/support/kb/articles/J030/3/08.htm

VBで WinInet APIでHTTP上のデータを読む
http://www.geocities.co.jp/SilkRoad/4511/vb/wininet.htm

IE5.0付属の WININET.DLL には日付に関するバグがある
http://www.daifukuya.com/ffsync/

309 :デフォルトの名無しさん:2001/02/14(水) 00:13
TClientSocketを使って簡単なHTTPクライアントを作りたいんですが、
TClientSocket.Socket.ReceiveTextで受け取った文字列を
TMemo.Lines.Addでメモに貼っても上手く改行されません。
HTTPサーバから送られてくる文字列はCFかLFが欠けてる様で、
改行部分が黒い点「・」←こんな感じになってしまいます。
どうすれば良いんですか?

310 :デフォルトの名無しさん:2001/02/14(水) 07:04
>309
文字列を一文字ずつ調べてCFかLFが来たときそれが繋がってなかったら繋がるように置換する。

311 :デフォルトの名無しさん:2001/02/14(水) 07:06
>309
ちゃんと繋がってるかいないか調べろよ。
UNIX系のサーバーだと改行コードがCFのみ(LFのみだっかたな?)
MACだとその逆。
WinNT系だとCF・LFになってる。

312 :デフォルトの名無しさん:2001/02/14(水) 09:06
HTTPって行末コード規定されてないの?


313 :turbo type D:2001/02/14(水) 09:34
AdjustLineBreaksつかえ

314 :デフォルトの名無しさん:2001/02/14(水) 14:58
>312
されてないないよ。
ヘッダ(HTTPが通信用に作った部分)は決まってるけど。
送信するデータ部分はテキストだろうがバイナリだろうがそのまま転送。


315 :311:2001/02/14(水) 15:20
ごめん。
サーバーは関係ないや。
HTML作ったコンピュータの改行コードだった。
でも一般的にFTPがサーバー側の改行コードに変換する。
CGIプログラムのファイルの場合は文字コードも変えるんだっけ?

316 :309:2001/02/14(水) 18:29
みなさん色々ありがとうございます、
>>313さんの教えてくれた関数で問題が解決しました。
ところで、
スレッドオブジェクトを使ってプログラムを作っているんですが、
ExcuteメソッドからVCLのメソッドやプロパティを使う場合、
必ずわざわざ新しく別のメソッドを作って
Synchronizeで呼び出さないと駄目なんですか?
これってかなり面倒だと思うんですけど。
1つのメソッドの中に処理を全部詰め込んでも良いんですかね?
Executeの中はただWhileループと
Synchronizeによる呼び出しだけになっちゃいますけど。

317 :turbo type D:2001/02/14(水) 18:45
面倒でもそうするの。
本当は必ずじゃないはずだけどね。

318 :turbo type D:2001/02/14(水) 18:46
Syncで読んだ関数からまた関数よべばいいでしょ。

間違ってたら許してね。

319 :デフォルトの名無しさん:2001/02/15(木) 17:14
DELPHI5のラーニング版で作ったソフトって自由に配布して良いんですか?
それとも何か制約みたいなのがあります?

320 :turbo type D:2001/02/15(木) 18:06
>>319いいです。

321 :turbo type D:2001/02/15(木) 18:07
スマソ、すごいばかげた質問かもしれないが
以下のコードをトレース実行したら落ちる。
なぜ?
マジレスキボーン

procedure TForm1.Button1Click(Sender: TObject);
var
 SL: TStringList;
 Moji: String;
begin
 SL := TStringList.Create;
 try
  SL.LoadFromFile(ExtractFilePath(Application.ExeName)+'Unit1.pas');

  ShowMessage(sl.Text);

  Moji := SL.Text;
 finally
  SL.Free;
 end;

 ShowMsg(Moji);
end;

procedure TForm1.ShowMsg(Str: String);
var
 S: String;
begin
 S := AnsiUpperCase( Str );

 ShowMessage(S);
end;

322 :デフォルトの名無しさん:2001/02/15(木) 18:20
>>321

どこまでは落ちずにトレースできるのか
くらいは書かないか?


323 :デフォルトの名無しさん:2001/02/15(木) 18:35
文字列は単に代入された時は中身はコピーされず参照だけ
がコピーされる。書き換えようとした時に初めてコピーが
作成される。(コピー・オン・ライト)

324 :デフォルトの名無しさん:2001/02/15(木) 19:04
試したけど、落ちない。

325 :デフォルトの名無しさん:2001/02/15(木) 19:09
まずは落ち着いて、Windowsを再起動してみようよ。

326 :デフォルトの名無しさん:2001/02/15(木) 19:15
>323リファレンスカウント

327 :デフォルトの名無しさん:2001/02/15(木) 19:19
恐らくコードは省略されている。上記コードはStringListが解放された
後別になにもしていないので、メモリ内容は運良くそのままである。

328 :デフォルトの名無しさん:2001/02/15(木) 19:20
>>326
それは参照された側の方。

329 :turbo type D:2001/02/15(木) 19:54
ソースは省略抜きデシ

>>322スマソ
ShowMsgまでいったらトレースで落ちる
トレースしないと落ちない。

さっきから3回目のインストでようやく原因がわかりそう。

D5エンプラ版にUpdate当てたら落ちる。
Updateあてなきゃおちない!
なんだこりゃ。ふざけてる。訴えてやるーーー(wウソ

Delphiは参照コピーにはなっていないはず。

330 :デフォルトの名無しさん:2001/02/15(木) 19:58
ProでUpdate1当ててるけど落ちない。

331 :デフォルトの名無しさん:2001/02/15(木) 20:06
エンプラ版かー、いーなー。何落ち?OSは?

332 :デフォルトの名無しさん:2001/02/15(木) 20:22
>Delphiは参照コピーにはなっていないはず
ヘルプで「長い文字列」の説明よむべし。

333 :turbo type D:2001/02/15(木) 20:57
念のため
procedure TForm1.ShowMsg(const Str: String);
でテストやっていたがupdate前は正常動作だしupdate後は落ちる。

落かたはIDEフリーズproject1.exe終了できない
user32.dllマキコミ落ち。ウザ落ちだ。

もしかしてBCBLrnのUpdateを入れたからかも?

ああ、もう最悪。

334 :turbo type D:2001/02/15(木) 20:57
>>332
読んだ、なるほど。
procedure TForm1.Button1Click(Sender: TObject);
var
 SL: TStringList;
 Moji: String;
begin
 SL := TStringList.Create;
 try
  SL.LoadFromFile(ExtractFilePath(Application.ExeName)+'Unit1.pas');
  ShowMessage(sl.Text);
  Moji := SL.Text;
 finally
  SL.Free;
 end;

 ShowMsg(Moji);

 ShowMessage(Moji);
end;

procedure TForm1.ShowMsg(Str: String);
begin
 Str := '参照?'
end;

procedure TForm1.ShowMsg(var Str: String);
begin
 Str := '参照?'
end;
はなぜ結果が違うノ?

335 :turbo type D:2001/02/15(木) 21:05
そういや落ちる時、ダイヤログでまくりの中に
こんなエラーも出てくる

Assertion failure "(!" Unrecognized interface passed to ReleaseDbkInitf!")"
in ..\win32src\dbkcom.cpp at line 594
Continue execution?

なんじゃこれ。

336 :デフォルトの名無しさん:2001/02/15(木) 21:12
上のはそのプロシージャ内のローカルな変数だけど、
下のは呼出し元の別名になってる。だから呼出し元の
変数の内容も変更できる。(ヘルプ「変数パラメータ」参照)

337 :デフォルトの名無しさん:2001/02/15(木) 21:15
Windows2000?

338 :デフォルトの名無しさん:2001/02/15(木) 21:27
取りあえず、CPUウインドウとアサートの使用は控えた方がいいな。


339 :turbo type D:2001/02/15(木) 21:33
>>336
理解しました。
>>323の読み方が甘かった。

NT4SP5

このマシンが腐れなだけかも。......最悪。投げやり。

340 :デフォルトの名無しさん:2001/02/15(木) 21:51
SP5を当てた時何かのソフトが動かなくなったから
SP3に戻した事がある。M$よ、お願いだからパッチに紛れて
新しい機能付け足さないでおくれ。

341 :デフォルトの名無しさん:2001/02/15(木) 21:59
ウィンドウズ用のソフトで一般的に使われているツールバーのボタン画像

新規作成・開く・ファイルに保存・印刷・切り取り・コピー・貼り付け・・・その他色々

を自分の作っているソフトにも使いたいんですが、どこにあるんですか?
他のソフトのボタン画像をキャプチャーする方法も考えたんですが、
皆さんはどうしてます?
DELPHIに付属してるボタン画像は変なので使いたくないんです。

342 :turbo type D:2001/02/15(木) 22:21
治った!レジストリがぶっこわれていたみたい。

お騒がせしてメンゴm○m

環境をリカバーするために
壊れたレジストリを必死で毎回インストールしてた。

343 :デフォルトの名無しさん:2001/02/15(木) 22:30
>>341

DelphiMLで紹介されているRzBmp/glyphs!/RimrockSoftware
とtoolbar97に付属のもの
DelphianWorldで2種類数は少ない
以前、世界征服宣言サイトで配っていてコレハ今はwebには存在しない。

DatulaのカスタムツールバーD-Rascalで利用できるアイコン集
QXエディタのカスタムアイコン集作者3人で11種類
DelphianWorldのgifファイル全部

ぐらい持っている。
この程度あると
ツールバーのデザインに困るという事はなくなった。
が、他にいいものがあるのなら欲しい。

MSOfficeのツールボタン画像はMSDNでは最近見付からない
VBAマクロで抽出すればすべて取り出せる気がする。

344 :デフォルトの名無しさん:2001/02/15(木) 23:02
>>341
HINST_COMMCTRLの中の、
IDB_STD_LARGE_COLOR,IDB_STD_SMALL_COLOR,IDB_VIEW_LARGE_COLOR,
IDB_VIEW_SMALL_COLOR。


345 :デフォルトの名無しさん:2001/02/15(木) 23:06
323は的外れだったような・・・TStrings.TextはプロパティでGetText
を呼んでるんだから、SLの開放もへったくれもないんじゃない。ま、いいけど。

346 :turbo type D:2001/02/16(金) 00:22
>>345
もっと内部の話じゃない?
オレみたいなデル厨には理解しなくてもいい部分だとオモワレ

347 :デフォルトの名無しさん:2001/02/16(金) 00:52
TParserクラスを派生してTHtmlParserは簡単に作れるでしょうか。

348 :turbo type D:2001/02/16(金) 02:43
家のDel5Proも
>>321のコードで見事に落ちる。

何らかのセッティングによって落ちる模様。
もしくは変なコンポーネントか?
何を設定したらそうなるのかは全く不明だが。

349 :デフォルトの名無しさん:2001/02/16(金) 08:46
>348 ShowMessageでソースファイルを表示しようとするからだろう。
 そんな想定してなさそうな使い方しちゃ winは弱いよ。

やるなら動的にmemo乗ったフォームれ


350 :デフォルトの名無しさん:2001/02/16(金) 08:58
>>347
同じ事考えたけど、結構大変だぜー。
結局派生じゃなくて、ソース改造した変種になっちまったぜー。
IHtmlDocument2にwriteして使う方が楽かもしれないぜー。

351 :turbo type D:2001/02/16(金) 09:49
>>349
単なるテキストソース見るのにWinが弱いわけないよ。
そういう問題じゃない。
コンパイラの設定で"長い文字列"使うにしてるのだがそのあたりが
壊れているのだろうか。いずれにせよレジストリだけインストで
解決する問題のようだわ。

知ったかして、レジストリ弄ってた報い。すべては因果律のままに。

   そんな所か。朝から浮津だmonazillaろう。

352 :デフォルトの名無しさん:2001/02/16(金) 09:55
>>344
意味わからん。詳説キボン

353 :デフォルトの名無しさん:2001/02/16(金) 12:09
>>341
http://community.borland.com/article/0,1410,25911,00.html

354 :デフォルトの名無しさん:2001/02/16(金) 13:48
>turbo type D
落ちた壊れたとだけ言われても困るのは理解出来るよね?
こういう時は ShowMessageの記述されてるソース dialigsを
プロジェクトに追加してコンパイルgoするとVCL内部でも
ソースでバック出来るから自分で原因を探してくれ

やり方はShowMessageでマウス右ボタンから定義の検索
dialogsが表示されたらプロジェクトに追加

355 :344:2001/02/16(金) 16:02
>>352
SDKのヘルプに書いてあるよ。TBADDBITMAPのところに。

Delphi 3でTImageと空のTToolBar貼り付けて書いてみたけど、
素直にTBitmap.LoadFromResourceIDでは読み込めないみたい。

uses
 CommCtrl;

procedure TForm1.FormCreate(Sender: TObject);
var
 tbab: TTBAddBitmap;
 tbb: TTBButton;
 himl: HImageList;
 i: Integer;
begin
 tbab.hInst := HINST_COMMCTRL; {-1。ハンドルじゃない}
 tbab.nID := IDB_STD_LARGE_COLOR;
 tbb.iBitmap := SendMessage(ToolBar1.Handle,TB_ADDBITMAP,1,LParam(@tbab));
 tbb.idCommand := 0;
 tbb.fsState := TBSTATE_ENABLED;
 tbb.fsStyle := TBSTYLE_BUTTON;
 tbb.dwData := 0;
 tbb.iString := 0;
 SendMessage(ToolBar1.Handle,TB_ADDBUTTONS,1,LParam(@tbb));
 himl := SendMessage(ToolBar1.Handle,TB_GETIMAGELIST,0,0);
 for i := 0 to ImageList_GetImageCount(himl) do
  ImageList_Draw(himl,i,Image1.Canvas.Handle,i*16,0,ILD_NORMAL);
end;


356 :デフォルトの名無しさん:2001/02/16(金) 16:52
>>353のICON量すごい。
1万5000以上あるね。
SunのJAVAの所
http://developer.java.sun.com/developer/techDocs/hi/repository/
だけ、User登録が必要のようだが
登録したらもっとたくさんのアイコンが手に入るのか??

>>354純粋にあのコードだけで落ちるんだから、
  IDE(のレジストリ)が壊れようなんだよ。
  トレスした瞬間にIDEごと落ちるのに
  原因追求は無理。お騒がせしてスマソ

>>355試してみる。蟻が十


357 :デフォルトの名無しさん:2001/02/16(金) 23:04
>>353
すげえ…。ありがと。

358 :デフォルトの名無しさん:2001/02/16(金) 23:16
>>350
>結局派生じゃなくて、ソース改造した変種になっちまったぜー。
>IHtmlDocument2にwriteして使う方が楽かもしれないぜー。

ご親切に有難うございました。TParserクラスは名前は魅力的ですが使うのやめます。
IHtmlDocument2を理解しなきゃ...

359 :turbo type D@monazilla:2001/02/23(金) 20:00
あり?互いのヘッダから互いのクラスを参照したくて
循環参照エラになっちゃった。
こういう場合どうすりゃいいんだっけ?アレアレ????

unit Board2ch;
interface
uses
 ..
 Browser;

type
 TNichSite = class;
 TNichCategory = class;
 TNichBoard = class;
 TNichThread = class;
 TNichResponse = class;

 TNichSite = class
 private
  ..
  property WebBrowser: TNichWebBrowser read FWebBrowser write FWebBrowser;
 end;
implementation
.......................................
unit Browser;
interface
uses
 ..
 Board2ch

type
 TNichBrowser = class
 private
  ..
  procedure NavigateThread(Thread: TNichThread);
 end;

implementation
こんなのTechじゃないって?(藁

360 :デフォルトの名無しさん:2001/02/23(金) 20:58
implementation部のuses節で参照すべし。
共通の先祖で互いに内包オブジェクトを宣言し、
キャストして使用すべし。

361 :turbo type D@monazilla:2001/02/23(金) 21:15
>implementation部のuses節で参照すべし。
べし...って出来ないから聞いてるのに。

>共通の先祖で互いに内包オブジェクトを宣言し、
>キャストして使用すべし。

出てくるクラスは全部TObject派生なんだけど。
もそっと具体的にタノンマス。

362 :デフォルトの名無しさん:2001/02/23(金) 21:49
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
Other: TForm;
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.FormShow(Sender: TObject);
begin
Other := Form2;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Other.Show;
end;

end.
------
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
Other: TForm;
end;

var
Form2: TForm2;

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.FormShow(Sender: TObject);
begin
Other := Form1;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
Other.Show;
end;

end.


363 :turbo type D@monazilla:2001/02/23(金) 21:56
なるほど、TFormを引数としてわたせ、って事ですか。
そりゃそうだけど納得いかないなあ。

まあ、いっか。

364 :turbo type D@monazilla:2001/02/23(金) 21:57
お礼を忘れてました。
>>362アリガトウ。

365 :デフォルトの名無しさん:2001/02/23(金) 22:05
>なるほど、TFormを引数としてわたせ、って事ですか。
違うよ〜面倒だったから適当に書いただけだよ〜

君には以前何度か煽られたけど。 ま、同じD使いだしな。


366 :デフォルトの名無しさん:2001/02/23(金) 23:38
>>363
設計がまずいからそんな事態になっちゃうんだろ。
データ部と表示部をまず完全に別にユニットに分けてみな。

367 :デフォルトの名無しさん:2001/02/24(土) 00:03
ん?逆に関連が深いクラスなんだから同一ユニットで定義しても
いいんじゃない?

368 :デフォルトの名無しさん:2001/02/24(土) 00:50
あー、おれも、これのエレガントな解決法知りたいわ。まじでage

369 :デフォルトの名無しさん:2001/02/24(土) 00:57
NichThread.pas作ってBoard2ch,Browserからusesする。
あるいはすべてひとつのunitにまとめる。
これしかねーぞ。

邪道な回答としては
interface部ではTObjectとして保持して
implementation部でusesしてキャスト。
あるいはどっちかのクラスをimplementation部で宣言する。

370 :turbo type D:2001/02/24(土) 02:13
煽ってごめんね。>>365
あおり煽られアオアオオオ

>>366
オレも今までそう思っていて
その通りなんですが。きびしいのよ。

なんでだろーなんでだろーーー
なぜがなんでだろーーー


現状は相互参照をやめて実装してる最中(モナカ)。

>>369[ギャフン]


371 :デフォルトの名無しさん:2001/02/24(土) 10:54
オブジェクト間通信を仲介するブローカー
オブジェクトを作るとか。通信するオブジェクトが
1:nやn:mだったらこれがスマートだと思う。

1:1の限定された通信なら相互に参照を保持するのも
いいと思うけど。

372 :デフォルトの名無しさん:2001/02/25(日) 10:57
エディタをカスタマイズ可能なキーマッピング機能とか使ってる人いる?
つーか、使い方わかる人いる?

373 :turbo type D:2001/02/25(日) 15:43
>>372
日本で10人くらいならいると思う。(藁
オラはわからん。(ヘヘヘ.......シクシクシクシク

374 :ななし:2001/02/25(日) 19:30
Delphi相談室スレのほうの116の質問がわかる方がいらっしゃったら
教えてください。(あちらのスレで)

QuadrupleのDirectPlay機能での質問です。



375 :ななし(374):2001/02/25(日) 23:38
>>374は解決しました。どうもです〜

376 :turbo type D@monazilla.org(藁:2001/03/01(木) 12:02
スンマソンTechスレあげさせていただきやす。

http://piza.2ch.net/test/read.cgi?nofirst=true&st=142&to=142&bbs=tech&key=974446449
ここをみて

TWebBrowserをスクロールする方法はわかったのだけど
var
 Doc: IHTMLDocument2;
 y: Integer;
begin//
 Doc :=
  WebBrowser1.Document as IHTMLDocument2;
 y := 100;
 Doc.parentWindow.scroll(0, y);

スクロールしている現在の位置を取得する事が出来ない。
 Doc :=
  WebBrowser1.Document as IHTMLDocument2;
 y := Doc.body.top;//<<ここでエラー
 ShowMessage(IntToStr(y));

オセーテクレマンセ--

377 :デフォルトの名無しさん:2001/03/01(木) 12:32
http://piza.2ch.net/test/read.cgi?nofirst=true&st=142&to=144&bbs=tech&key=974446449
だべさ。
もしそれでも駄目なら、IHTMLElementにバインドする必要があるかも???

378 :turbo type D@monazilla:2001/03/01(木) 13:02
さんくすこ。m(。w。)m

オレ頭悪い事に前後みてなかったよ。
コード補完も出ないしね(ミグルシイイワケ)

関係無いけどリンク先
HTMLDocument := Browser.Document as IHTMLDocument2;
ここで変数名にHTMLDocumentを使うと
MSHTMLで定義されているからよろしくないね。

379 :turbo type D@モナヂラドットオルグ(ワラ:2001/03/01(木) 13:11
つことで。
TWebBrowserをスクロールさせる方法

usesにMSHTMLユニットを追加

procedure TForm1.Button1Click(Sender: TObject);
var
Doc: IHTMLDocument2;
y: Integer;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;

y:=olevariant(Doc).body.scrollTop;

ShowMessage('現在のスクロール位置は'+
IntToStr(y)+'だぞ(゚Д゚)ゴルァ'+#13#10+
'勝手にスクロルさせるから覚悟しておけ');
y := y + 100;
Doc.parentWindow.scroll(0, y);
end;

プレステ:
クスコってあれだよね。アレを広げる道具の事だよね?銀色の?
オシエテクレマン................ハズカシクテイエマセン

380 :turbo type D@monazilla:2001/03/02(金) 16:46
おればっかでスソマセソ

えっと、DOS日付でも作成日でも更新日でもなんでもいいのですが
ファイルに日付情報をセットする方法と
同時にファイルを取得する方法を教えて欲しい。

いろいろ探したんだけどセットする方法がわからない。

何の種類の日付情報でもいいのだけど
書き込んだ内容を取得する事が出来るとよいのです。

よろしくお願いします。


381 :turbo type D@monazilla:2001/03/02(金) 17:31
スンマソン自己解決してしまった。

// ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄/ ̄
{
// 名前:turbo type D@monazilla.org(藁
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
聞いてアロエリーナ ちょっと言いにくいんだけど
聞いてアロエリーナ

ココカラノコードハ: ファイルの処理
      SetFileDate ファイルに日付をセットする
      GetFileDate ファイル日付を求める
      GetFileSize ファイルサイズを求める
コウシン日ワ:  2001/03/02
ホカニ逝ットクコトハ:なにもなし

聞いてくれてありがと アロエリーナ♪
\________ _______/
         |/
         ∧_∧
   Ψ    (∀・ )
   □    (∩∩ノ)
// ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ }
procedure SetFileDate(FileName: String; DateTime: TDateTime);
var
 FileHandle: Integer; FileDate: integer;
begin
 FileHandle := FileOpen(FileName, fmOpenWrite);
 if FileHandle > 0 then
  FileDate := FileSetDate(FileHandle, DateTimeToFileDate(DateTime))
 else
  FileDate := -1;
 FileClose(FileHandle);

 if FileDate<>0 then
  raise Exception.Create('ファイルに日付が書き込めなかったんじゃ(゚Д゚)ゴルァ');
end;
{ウエ(´Д`) homepage1.nifty.com/kens-hp/delphi.htm#Q03}

function GetFileDate(FileName: String): TDateTime;
var
 FileHnd   : integer;
 intDosDate : integer;
 datFileDate : TDateTime;
begin
 FileHnd := 0;
 Try
  { ファイルのハンドルを取得 }
  FileHnd := FileOpen(FileName,fmOpenRead);
  { ファイルのタイムスタンプを取得 }
  intDosDate := FileGetDate(FileHnd);
  { タイムスタンプを日付型に変換 }
  datFileDate := FileDateToDateTime(intDosDate);
  Result := datFileDate;
 Finally
  FileClose(FileHnd);
 end;
end;
{ウエ(´Д`) homepage2.nifty.com\boheme\delphi\tips\tec0070.htm}

function GetFileSize(FileName: String): Integer;
var
 Rec   : TSearchRec;
 intSize : integer;
begin
 Result := 0;
 { ファイルの検索 }
 if FindFirst(FileName, faAnyFile, Rec) = 0 then
 begin
  { サイズの取得 }
  intSize :=  Rec.Size;
  { KBに変換して表示 }
  Result := intSize;
 end;
 FindClose(Rec);
end;
{ウエ(´Д`) homepage2.nifty.com\boheme\delphi\tips\tec0060.htm}
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_

382 :デフォルトの名無しさん:2001/03/06(火) 09:22
Memo1.Lines.Textを正規表現で検索することはできますか?

383 :デフォルトの名無しさん:2001/03/06(火) 10:11
>>382
正規表現で検索するルーチンを自作するか、
もしくは、そういうライブラリを見つけてこれば可能。

というか、そういうコンポーネントがあるよ。

384 :デフォルトの名無しさん:2001/03/06(火) 14:00
URLと簡単な使い方教えて。

385 :デフォルトの名無しさん:2001/03/06(火) 14:11
コンポーネントがあるよ、といわれたらまずはここらを探しなさいって(´д`;)
http://home1.infonia.ne.jp/~delphian/delphi/
http://delphi.icm.edu.pl/
http://www.torry.net/



386 :デフォルトの名無しさん:2001/03/09(金) 08:21
Windows9x, 2000対応のインストーラを自作するハメになったのですが、
なにかよい資料はないでしょうか。
資料はWindowsのものであれば、言語はDelphi以外でもかまいません。

ちなみに、FDelphiを見ろ!は聞き飽きました(藁
(見れねーっての!!)

387 :デフォルトの名無しさん:2001/03/09(金) 14:35
>>386
Delphiに付いてくるInstall Shield Express使えよ。素人が
インストーラ作ると迷惑なんだよ。

388 :デフォルトの名無しさん:2001/03/09(金) 16:00
Win32Helpのファイルインストールライブラリ。

389 :デフォルトの名無しさん:2001/03/09(金) 16:00
>>387
仕事なんじゃないの?

ま、そういう糞仕様は無視しましょう

390 :デフォルトの名無しさん:2001/03/09(金) 21:20
delphiやるんならfdelphiは見られるようになっといたほうがいいぞ
仕事ならなおさらだ。

391 :turbo type D:2001/03/09(金) 22:10
Delphiでのんびり働けるどこかいい場所ないですか?(藁

明日転職フェアに行こうかとオモイマフ

392 :デフォルトの名無しさん:2001/03/09(金) 23:02
やめとけ、この時期にわざわざ転職フェアに参加してるって事は
それなりに事情がある会社ってことだ。

393 :某厨房作者:2001/03/09(金) 23:49
オレにも紹介して。


394 :デフォルトの名無しさん:2001/03/10(土) 11:53
OpenToolsをバリバリ活用してる人っている?
GExpertsで間接的に、ってんじゃなくて。

395 :turbo type D:2001/03/10(土) 17:07
寝坊した...鬱だし....
>>393
Delphiで就職なんて存在するかな?

396 :turbo type D:2001/03/10(土) 17:28
>>394
MLで聞いたら?

397 :デフォルトの名無しさん:2001/03/11(日) 04:16
CoolBar上のToolBarの位置をINIファイルに保存・復旧したいんだけど
どのプロパティを使えばいいの?

398 :デフォルトの名無しさん:2001/03/11(日) 04:30
dfmファイルをテキストで保存して覗けば分かるんじゃな〜い(やる気なし)

399 :デフォルトの名無しさん:2001/03/11(日) 11:25
>>395

>Delphiで就職なんて存在するかな?

まれにあるよ。
俺はDelphi使いじゃないんで見送ってるが。


400 :turbo type D:2001/03/11(日) 12:59
>>397
AboutDelphiミレ

>>399
紹介してよ。
つかBuilderでもいいけどね。
C++Builder指定で就職って大変だろうな。

401 :デフォルトの名無しさん:2001/03/11(日) 19:28
今新しい職さがして面接いってるが
「前の会社ではDelphiとC++Builderで開発していた」っていったら
Builderかよ顔されたよ…。
VisualC++使ったことないからなぁ…。

402 :デフォルトの名無しさん:2001/03/12(月) 19:11
>>401それはそれは。

ところでスレッドについて質問
TMyThread = class(TThread)
でコードは一切書かずに

procedure TForm1.FormCreate(Sender: TObject);
begin
 FMyThread := TMyThread.Create(True);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 FMyThread.Free;
end;

こんな事しただけで
メモリリークが1回起きるのだけど、何これ?

403 :デフォルトの名無しさん:2001/03/12(月) 19:29
>>401
ゲーム系はなー。ビジネス系は存在さえ知らんと思われ。
>>402
FormDestroyが本当に呼ばれているかどうか怪しい。

404 :402=turbo type D:2001/03/12(月) 19:38
>>403
メインフォームなので呼ばれているよ。
ブレイクするもの。

procedure TForm1.FormCreate(Sender: TObject);
begin
 FMyThread := TMyThread.Create(False);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 FMyThread.Suspended := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 FMyThread.Free;
end;

で、このようにするとメモリリークしない。
マルチスレッドコーディングムズすぎ。(゚Д゚)ゴルァ

簡単にスレッドがコーディングできるサンプルとか
コンポーネントとかない?

405 :デフォルトの名無しさん:2001/03/12(月) 21:14
TThread.Destroyのヘルプで、

「説明 Destroy メソッドはスレッドに終了を通知し,
スレッドがリターンするのを待ってから継承 Destroy
メソッドを呼び出します。」って書いてあるけど
スレッドが何か返すまで待ちぼうけしてるとか?

406 :405:2001/03/12(月) 21:19
ちなみに私が知ってるのはここぐらいかなあ。
ttp://homepage2.nifty.com/boheme/delphi/techdoc/dad0010.html

407 :Dax:2001/03/12(月) 23:07
>>404
ホットゾヌで TThreadつかってみたけどリーク無しみたいです、
参考にならんかもしれませんが、いちよ、ほーれんそー。

408 :デフォルトの名無しさん:2001/03/12(月) 23:52
キャストするのに
型(変数)

変数 as 型
とどう違うのですか?
そしてどちらが推奨されますか?
変数 as 型
はポインタ型だけみたいですけれど・・・。

409 :デフォルトの名無しさん:2001/03/12(月) 23:54
TThread.Create.Free;でメモリリークするバグがある。

thread := TTread.Create;
thread.Execute;
thread.Free;
のように一度Executeするとメモリリークしない

410 :>408:2001/03/13(火) 00:01
型(変数)
は強制的にキャストする。
TForm(Buttom1).ShowModal
のような無茶苦茶なことができる。
当然アクセス違反などのエラーが発生する。

(Sender as TForm).ShowModalはSenderが実際に
TFormのインスタンスであった場合のみキャストできる。
TFormのインスタンスでない場合は例外が発生する。
以下のコードと大体同じ
if Sender is TForm then
TForm(Sender).ShowModal
else
 raise Exception.Create('キャストエラー'); // いいかげん

411 :408:2001/03/13(火) 00:22
>410
ありがとー。
ということはできるだけ as を使ったほうが良いってことですね。
全部 as でできれば文句ないのですけれど・・・。

412 :デフォルトの名無しさん:2001/03/13(火) 00:22
確かに処理が残ってるのにインスタンス勝手に
破棄されたらマズイかも。

413 :turbo type D:2001/03/13(火) 09:42
>>409
サンクス。多分同じ問題
疑問が晴れました。

414 :デフォルトの名無しさん:2001/03/13(火) 12:42
>>395
さがせばあるね。かなりレベル高そう。
http://www.mediafusion.co.jp/html/recruit/index.html


415 :デフォルトの名無しさん:2001/03/13(火) 14:36
メモリリークって、どう確かめるのですか?
(デストラクタが動いているかどうか?)

416 :デフォルトの名無しさん:2001/03/13(火) 14:51
>>415
これを使ってみそ>http://www.yks.ne.jp/~hori/MemCheck.html

417 :turbo type D:2001/03/13(火) 19:10
どっちもデフォかと。
http://www.sakaki.keiaikai.or.jp/convroom/webconv.exe/read?No=9666&Response_Root=9632


418 :415:2001/03/13(火) 19:25
>416, 417
ありがとうございます。
GetMemとFreeMemの呼び出された回数を利用しているんですね。
<ヒープの利用はすべてここに行き着くのか。

419 :turbo type D:2001/03/14(水) 11:01
>>414、紹介ありがと。
あんなところにそんな会社があるんだ。
でも、府内じゃなくて都内がいいな。(藁


420 :turbo type D:2001/03/14(水) 11:02
TThread.Synchronizeでメソッドを使っているんだけど
procedure of object;だけで引数付procedureが呼び出せなくて
結構不便。

procedure(AAA: String) of object;
なんかをSynchronizeで渡すのによい方法はないでしょうか?

現状は
  begin
   FItem := xxx
   Synchronize(AAA);
  end;

  procedure AAA;
  begin
   BBB(FItem);
  end;
こうしていて、少々不便なのです。

421 :デフォルトの名無しさん:2001/03/14(水) 11:41
OnExecute, OnSynchronize, OnTermintateイベントと
デッドロック->例外変換機能もってるTThreadラッパーコンポーネント持ってるよ。

発掘できたらあげるよ。


422 :>:2001/03/15(木) 17:54
アゲ

423 :デフォルトの名無しさん:2001/03/16(金) 00:53
>>421
ttp://www.asahi-net.or.jp/~nk2w-ishr/progdtl.htm#KThdComp
これかな?

424 :turbo type D:2001/03/17(土) 18:54
リンク先に
>TThreadに存在するWaitForメソッドやSuspend,Resumeメソッドはこのコンポーネントではわざと実装しませんでした。
>これらは扱いを間違えるとメモリリークが発生したりデッドロックを引き起こしたりと多少危険な面があるからです。
とありますね、実感するわ。

シンクロナイズと逆に
メインスレッドから自作スレッド側の
オブジェクトや変数にアクセスするときは
一度Suspendしてアクセスすればいいみたい。
なんとなくそんな気がする。

425 :Delphiをもってない人:2001/03/17(土) 23:25
何か思うんだけど
Suspend,Resumeってスレッドを強制的に一時停止するんでしょ?
それって見るからにすごく危険な香りが。

そもそもSuspendやResumeをしなくてすむように書くべきだと思うんだけど…
………あるんだからしかたないけどね。

WaitForはスレッドが終了するまで待つの?
それはないと困ると思う。


426 :>425:2001/03/18(日) 00:33
suspend, resumeはWin32APIの単なるラッパー。
たとえばダウンロード・検索を
一時停止・再開するときなんかに普通に使うよ。

で、停止中にアプリを終了したときに
どうするかはアプリの責任。

ここではまるのはアプリの設計がいいかげんなだけ。
状態遷移図でも書いて、前もってあらゆるケースを洗い出しておけば、
バグもでにくくなるよ。


427 :turbo type D:2001/03/18(日) 21:10
あってもいいと思うけど、独自コンポ作るなら
Suspended系はオレならユーザー側からは触れないようにしたい。
挙動が嫌すぎる。

ま、一時停止/再開には有用なのはわかるけど、初心者向けではない
かと。

428 :turbo type D:2001/03/18(日) 22:53
すんまそん、質問っす。
monazillaスレと重なりまくりですが、とりあえず質問はここで
してみるですわ。

WinInetでタイムアウトとか
ユーザーによるダイヤルアップ切断が行われた場合どうなるでしょうか?

よくわからないので対応してないんですが、やばい?

429 :>428:2001/03/19(月) 00:57
(ダウンロード)ライブラリが例外を投げるようにするのは絶対に必要。
例外投げる(=現在の処理を強制中断)のをサボると、
最悪の場合、処理が成功したようになって別のバグを誘発する。

例外を処理するのはアプリケーションの責任なんだけど、
仮にアプリが処理を手抜きしてもユーザーに通知されるので、
ユーザーがリトライor終了できる。

サブスレッドが例外投げるとどうなるのか知らないけど。
もしメインスレッドでその例外を補足できないとしたら、
synchronize+エラーイベントにするといいかも。


430 :turbo type D:2001/03/19(月) 01:31
いや、必要なのはわかってるんですが
さぼってしまっていたので
どうなってしまうのかが知りたいのです。

例外発生せずに止まるのだろうか?>>WinInet.
それを補足するのは面倒だなあ...

431 :デフォルトの名無しさん:2001/03/20(火) 01:16
alLeftとalBottomのパネルを組み合わせると必ず
□□
□□
□□
■■■■■
■■■■■
となってしまうんだけど
□□
□□
□□■■■
□□■■■
のようにalLeftが優先(?)されるようにはできない?

432 :デフォルトの名無しさん:2001/03/20(火) 02:19
私の場合、パネルを3枚使って解決してます。
左のパネルを、alLeft
右のパネルを、alClient
右のパネルに、更にパネルを置いて、alBottom

433 :432:2001/03/20(火) 02:20
×右のパネルに
○右のパネルの上に

434 :turbo type D:2001/03/20(火) 15:23
Cマガで中村さんが解説していたと思う。

435 :デフォルトの名無しさん:2001/03/21(水) 03:25
>でも、府内じゃなくて都内がいいな。(藁
うちの会社に来てもらいたいマジで>Delphi使い
土日休日無しで、こんな時間でも働ける(働かされる)環境ですが(泣)

436 :デフォルトの名無しさん:2001/03/21(水) 09:18
そういやGExpertsって使ってる人いる?
俺は関数ジャンプとIDEのショートカット変更のためだけに使ってるけど(藁


437 :turbo type D:2001/03/21(水) 10:11
>>436
話題になっていたので入れたけど
何が便利なのかがわからなくて放置してる。GExp

438 :turbo type D:2001/03/21(水) 10:14
>>435
・・・・・・・・・・・・・(・∀・;)週休二日は欲しいな.........

439 :turbo type D:2001/03/21(水) 12:39
monazilla作ってます。
んで、質問です。

WebBrowserでスクロールバー位置を取得変更する事は可能なのですが
どのタイミングで取得するとよいと思います?
俺的にはタイマーで取得したろうかと、ショボイ事しか思いつきません。

なんか、スクロールした時点で発生するイベントなどありますか?
よろしくぅ。

440 :ヒロユキ@ギコナビ:2001/03/21(水) 23:25
ギコナビっていうソフト作ってます。
質問です。

Delphi5でクールバー使ってるんだけど、TCoolBandのFixedをTrueにすると、
おかしな動作になります。
# TCoolBarにツールバー2つ、TAnime1つを乗せてます。
# んで、TAnimeの乗っているTCoolBandのFixedをTrueにしてます。
# Fixedが一つもないと正常なのですが・・・

おかしな動作って言うのは、ツールバーが乗っているTCoolBandのつまみを
捕まえたまま、上下に激しく動かすとTCoolBarのサイズが正常に変わらなくなります。
(CoolBarを一列にしても高さが2列分ある。描画がおかしくなる。)

コモンコントロールのバグなのか、Delphiのバグなのか、オレの頭がおかしいのかが
分からないので、みなさん、試してみてもらえないでしょうか?
DelphiのDemoについてくるCoolstufっていうブラウザでも再現します。

#エクスプローラで問題ないからVCLのバグかなぁ。

当方環境:
Delphi5 + Update
Windows2000pro
CommonControlVersion: 5.81.4522.1800


441 :turbo type D:2001/03/22(木) 13:53
>>DelphiのDemoについてくるCoolstufっていうブラウザでも再現します

オレのところでもなるよ
2台のマシンで両方とも再現した。

>>440
バグだろうね。



442 :デフォルトの名無しさん:2001/03/22(木) 16:41
>>440
バグです。
D4でもD5でもなります。
D4の時にバグを回避するためだけのコンポを作ったのですが、詳細を全く思い出せません(w
たしか、Fixedが絡むとBreakの数を誤判定するようになってたような気がします。
重要な変数がPrivateに隠されてたので、ちと邪魔くさい回避法を取ったことだけは覚えてる。

443 :turbo type D:2001/03/22(木) 18:37
左右のリサイズしたら直りますよね。

444 :turbo type D:2001/03/22(木) 18:52
>>439は無視か。宇津田氏脳


445 :デフォルトの名無しさん:2001/03/22(木) 19:26
>>444
じゃあ適当に書いてみる。やったことないので空想。
でも、Delphi知らないのでDelphiに
PreTranslateMessageがあるかしらないが、あるなら、
その中で、
WM_LBUTTONUP
WM_MOUSEWHEEL
WM_KEYDOWN
その他、スクロールさせられそうなメッセージが飛んできた
ときにスクロール位置を保存する。てなかん字。


446 :デフォルトの名無しさん:2001/03/22(木) 20:52
>>444-445
WM_MOUSEWHEELも来るナリ。
PreTranslateMessageってなに?


447 :デフォルトの名無しさん:2001/03/22(木) 20:54
>>441-443
VCLのバグだったのですね。
たしかに、リサイズでOK。
Delphi6に期待しよう。

448 :turbo type D:2001/03/23(金) 10:45
リサイズ時のVCLを追ってみたけど
解決できなかったよ(゚∀゚)ゴルァ

だらかMLに情報を流してくれ。

449 :コロスケD:2001/03/23(金) 10:47
>>445-446
PreTranslateMessage
コロスケもわからないなりー

messageは忘れてたナリ、ありがと。


450 :デフォルトの名無しさん:2001/03/23(金) 12:38
>>447
こんなところに書いても誰もチェックしないよ。ML に流してもだめ。
日本語でいいから、US borland のバグ登録フォームに流しなさい。


451 :デフォルトの名無しさん:2001/03/23(金) 14:38
この程度ならMLで解決してくれるだろ、

452 :デフォルトの名無しさん:2001/03/23(金) 16:40
>>446 >>449
PreTranslateMessageはMFCのCWndのメンバ関数。
Win32のイベント配送メカニズムと、MFC固有ののイベント配送メカニズム
を分離して理解してないので、他の言語でいうとどうなるのかは知らん。
働きとしては、そのウインドウとその子ウインドウへのイベントディスパッチ
をするまえにいろいろ前処理する/できる。
でも、PreTranslateMessageとかOnKeyDownとかはMFCのイベントマッパ
の機能っぽいから、DelphiにはDelphiのイベント配送補助システムが
あるんだろう。

453 :turbo type D:2001/03/23(金) 20:10
>>452さんサンクス
2chブラウザさんかな。

PreTranslateMessageはないけど
メッセージハンドラでフックしてみたら
全然取得できませんでした。

ホイールメッセージが
スクロール限界まで来たときにようやくはっせいする

VCLのTWebBrowser継承のメッセージハンドラではダメなのか...
サブクラス化でもしないと...

空想して実装したいなあ。

あと、WebBrowserでナビゲートした直後にスクロールバーを
動作させようと思ってもこれまたうまく動かない。

トホホホオホホホホオホオホホ

454 :turbo type D:2001/03/23(金) 20:27
もうだめだ、だめだよう。ぐすんぐすん(・∀・、)

455 :デフォルトの名無しさん:2001/03/24(土) 21:35
あきらめるのは、まだ早い。

456 :デフォルトの名無しさん:2001/03/24(土) 21:54
スクロールした時点じゃなくて、
次のファイルを Navigateする直前に保存するのはだめ?


457 :turbo type D:2001/03/24(土) 23:55
>>456
あ、それもらい!

スクロール位置を保存するのはそうするとして

復帰するほうなんだけど、んー。
とりあえず、Navigateが終わって即スクロールかましても動作しない!

458 :turbo type D:2001/03/26(月) 13:27
日曜日に何の反応も無しかよ。

459 :turbo type D:2001/03/26(月) 13:32
別の質問しておきます。
TWebBrowserの履歴をGoBackせずに
URLを取得する方法はどうやるのでしょう。

IEなんかだと数段階戻るという事が実現できているので
出来そうなもんだが、やり方はさっぱり。

あと、履歴と関連づいたデータのポインタを保持させる事は
出来ないでしょうか。
履歴に関連したスレッドの情報を
保持させたいのだけど
どうも自分でコーディングしていたらバグでまくりなので
WebBrowser自体に処理を任せたいのです。

460 :デフォルトの名無しさん:2001/03/26(月) 15:35
>459
セキュリティーの関係で取り出せないと聞いた事がある
かちゅの作者も使ってるEmbeddedWbも多分自前で管理してると思う。

461 :turbo type D:2001/03/26(月) 16:47
>>460
さんきゅう。そうか自前でやるとどうしてもバグがでる。
ちゃんとメッセージが流れてきてくれていたらいいのだが...


462 :turbo type D:2001/03/26(月) 16:55
>>457のこと、

サンプルを作ってみた。
function TForm1.GetWebBrowserScrollPos: TPoint;
var
Doc: IHTMLDocument2;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;

Result.y:=olevariant(Doc).body.scrollTop;
Result.x:=olevariant(Doc).body.scrollLeft;
end;

procedure TForm1.SetWebBrowserScrollPos(Value: TPoint);
var
Doc: IHTMLDocument2;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;

Doc.parentWindow.scroll(Value.x, Value.y);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Point1: TPoint;
begin
Point1 := GetWebBrowserScrollPos;
Form1.Left:= Point1.x;
Form1.Top := Point1.y;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
SetWebBrowserScrollPos(Point(Form1.Left, Form1.Top));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
WebBrowser1.Navigate('www.yahoo.co.jp');
// while WebBrowser1.Busy do Application.ProcessMessages;
Button2Click(nil);
end;
ボタン3を押してもうまく動かない。
コメントアウトしている部分を追加しても実行していると変。
navigate後に正しくスクロール位置を復帰させるには
どうしたらいいでしょうか。
ちゃんとスクロールしてくれない。

463 :turbo type D:2001/03/26(月) 17:12
スマソ、字下げ忘れと
uses MSHTMLも追加してください。D5pro以上です。


464 :turbo type D:2001/03/26(月) 17:27
あと、話が先頭に戻るのですが
リファレンスカウンタについて
もう少し教えてください、誰か。

TInterfacedObjectの使い方も今ひとつわかりません。

465 :デフォルトの名無しさん:2001/03/26(月) 17:53
>>458 >>457
じゃ、書いてみる。
ひょっとしたらNavigateした後、次のステートメントでスクロールしてないか?
Navigateは非同期動作なので、別スレッドを起動してすぐに関数から
戻ってくるけど、動作が完了するのはその後、OnNavigateCompleteイベント
が発生したとき。なので、NavigateCompleteを受けて関数呼ぶとよろし。
OnDocumentCompleteでもOK。違いはよく知らん。

466 :turbo type D:2001/03/26(月) 18:11
for i:=1 to 200くらい do
 感謝!!;

ありがとーー。

OnNavigateComplete2
とOnDownloadComplete
とっきどき誤動作しているみたいだけど
とりあえず、これでやってみるよ。


467 :turbo type D:2001/03/27(火) 15:27
今日はガンガンいくぜ。
つーことで シツモソです。教えてくださいマソコ

WinInetのページをぐるっとまわって
どこかで見たので改善したつもりだけど自信ないです。
どちらが正しいのでしょうか。

 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 try
  hService := InternetOpenUrl( hSession, PChar(URL), nil, 0, 0, 0);
  try

  //適当に処理

  finally
   InternetCloseHandle( hService );
  end;

 finally
  InternetCloseHandle( hSession );
 end;

 hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 if Assigned( hSession ) then
 begin
  hService := InternetOpenUrl( hSession, PChar(Edit1.Text), nil, 0, 0, 0);
  if Assigned( hService ) then
  begin

  //適当に処理

  end;
  InternetCloseHandle( hService );
 end;
 InternetCloseHandle( hSession );
end;

468 :デフォルトの名無しさん:2001/03/27(火) 15:54
WinInetはDelphiの関数じゃないから例外は投げないでしょ。
よって後者が正しいはず。

469 :turbo type D:2001/03/27(火) 16:04
明解回答ありがとう、サンクスコ
hSessionにnilが入っていてもInt..OpenUrlしてしまうし
例外吐かずにまずいッてことですね。



470 :デフォルトの名無しさん:2001/03/28(水) 14:38
>あーぁ…こんな俺でもいつか好きになってくれる女が出来るのかなー?

出来ません。妄想に浸るなボケ>>59

471 :デフォルトの名無しさん:2001/03/28(水) 16:11
>>470 そう思ったらスレ間違えんなボケ

472 :turbo type D:2001/03/28(水) 17:45
リファレンスカウンタオブジェクトクラスを適当に作ってみたのですが
どうも動作しません。
自分自身を破棄する部分で
自分自身をnilにするのはどうしたらよいでしょうか。

procedure TRefObject.DecRefCounter;
で、Self:=nil を行なっているのですが
これが正常に動作しないために
 if Assigned(FRefObject1) then
で正しく判断されません。
FreeAndNilやFRefObject1<>nilとしてもダメみたい。

違う方法でnilにも出来るけど、ちょっと気になったので。
教えてくださいな。
///////////////////////////////////////
unit Unit2;

interface

uses
 Sysutils, Dialogs;

type
 TRefObject = class(TObject)
 private
  FRefCounter: Integer;
 public
  constructor Create;
  procedure IncRefCounter;
  procedure DecRefCounter;
 end;

 TMyRefObject = class(TRefObject)
 public
  Name: String;
  procedure Message(S: String);
 end;

implementation
{ TRefObject }
constructor TRefObject.Create;
begin
 FRefCounter := 0;
end;

procedure TRefObject.DecRefCounter;
begin
 Dec(FRefCounter);
 if FRefCounter<=0 then
 begin
  Self.Free;
  Self := nil;
 end;
end;

procedure TRefObject.IncRefCounter;
begin
 Inc(FRefCounter);
end;

{ TMyRefObject }

procedure TMyRefObject.Message(S: String);
begin
 ShowMessage(S);
end;

end.

//////////////////////////////////////////////
//-------------------------------
procedure TForm1.Button2Click(Sender: TObject);
begin
 FRefObject1 := TMyRefObject.Create;
 FRefObject1.Name := 'リファレンスカウンタオブジェクト';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 FRefObject1.IncRefCounter;
 FRefObject1.Message('あ');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 FRefObject1.DecRefCounter;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
 if Assigned(FRefObject1) then
 begin
  Self.Caption := FRefObject1.Name;
  TButton(Sender).Caption := '定義されてるよ'
 end else
 begin
  TButton(Sender).Caption := '定義されてない';
 end;
end;


473 :デフォルトの名無しさん:2001/03/28(水) 17:50
>472
IUnknown使えば?

474 :デフォルトの名無しさん:2001/03/28(水) 18:05
>自分自身をnilにするのは
むりなんじゃあ?DecRefAndNilみたいな手続き作るとか。

475 :turbo type D:2001/03/28(水) 18:52
>>473
このスレの先頭で出てるインターフェースの実装は
仕組みがいまいちわからなかったので使うの止めておきました。

>>474
かなり試したけど無理だったみたい。(藁

で、関数にしたところでクラス変数をvar渡ししないといけないので
二つのアプローチがあると思うが、どっちがいいと思います?
以下みてください。
長文ごめんよ。オレは2系列の方、FreeAndNilの実装と同じ方が
よいと思っているんですが。
unit Unit2;

interface

type
 TRefObject = class(TObject)
 private
  FRefCounter: Integer;
 public
  constructor Create; virtual;
  property RefCounter: Integer read FRefCounter;
 end;

 TRefClass = class of TRefObject;

procedure DecRefCounter1(var RefObj: TRefObject);
procedure DecRefCounter2(var RefObj);
procedure IncRefCounter1(var RefObj: TRefObject; RefClass: TRefClass);
procedure IncRefCounter2(var RefObj; RefClass: TRefClass);
procedure FreeRefObject1(var RefObj: TRefObject);
procedure FreeRefObject2(var RefObj);

(*--▽---------------------------▼--
var
 FRefObject1: TMyRefObject;
1系列の使い方
 IncRefCounter1(TRefObject(FRefObject1), TMyRefObject);
 DecRefCounter1(TRefObject(FRefObject1));
 FreeRefObject1(TRefObject(FRefObject1));
キャストが必要

2系列の使い方
 IncRefCounter2(FRefObject1, TMyRefObject);
 DecRefCounter2(FRefObject1);
 FreeRefObject2(FRefObject1);
キャストは不要
//--▲---------------------------△--*)

implementation

procedure IncRefCounter1(var RefObj: TRefObject; RefClass: TRefClass);
begin
 if RefObj=nil then
 begin
  RefObj := RefClass.Create;
 end;

 Inc(RefObj.FRefCounter);
end;

procedure IncRefCounter2(var RefObj; RefClass: TRefClass);
begin
 if TRefObject(RefObj)=nil then
 begin
  TRefObject(RefObj) := RefClass.Create;
 end;

 Inc(TRefObject(RefObj).FRefCounter);
end;

procedure DecRefCounter1(var RefObj: TRefObject);
begin
 if RefObj=nil then Exit;

 Dec(RefObj.FRefCounter);
 if RefObj.FRefCounter<=0 then
 begin
  RefObj.Free;
  RefObj := nil;
 end;
end;

procedure DecRefCounter2(var RefObj);
begin
 if TRefObject(RefObj)=nil then Exit;

 Dec(TRefObject(RefObj).FRefCounter);
 if TRefObject(RefObj).FRefCounter<=0 then
 begin
  TRefObject(RefObj).Free;
  TRefObject(RefObj) := nil;
 end;
end;

procedure FreeRefObject1(var RefObj: TRefObject);
begin
 while Assigned(RefObj) do
  DecRefCounter1(RefObj);
end;

procedure FreeRefObject2(var RefObj);
begin
 while TRefObject(RefObj)<>nil do
  DecRefCounter2(RefObj);
end;

{ TRefObject }

constructor TRefObject.Create;
begin
 FRefCounter := 0;
end;

end.


476 :デフォルトの名無しさん:2001/03/28(水) 19:16
2でいいんじゃないでしょうか。
ダイナミックキャストの方がいいのかも知れませんが。

477 :turbo type D:2001/03/28(水) 19:27
ダイナミックキャストってBCBの機能じゃ??

478 :デフォルトの名無しさん:2001/03/28(水) 20:08
そのとおりハズカシ、、、asの事でした。

479 :turbo type D:2001/03/29(木) 11:37
もし、2だと、TRefObject派生じゃないクラスを入れたら
えらいことになるんだけど...
その辺の防御とかどうやってやるのか、突っ込んでホシィ

でも、誰もリファレンスカウンタとか興味ない?

宇津田氏のう...

480 :C++でごめんね:2001/03/29(木) 14:26
String系を例にすると、(皆そうなっていると思うけど)データ構造は
class String {
  StringRef *ref;
}
class StringRef {
  int counter;
  StringData *data;
}
class StringData {
  char *str;
};
が一般的だと思う。そのまま書けば、こんな感じ。(試してないけど)

class StringData {
  char *str;
public:
  StringData(const char *s): str(new char[strlen(s)+1]) { strcpy(str, s); }
  ~StringData() { delete[] str; }
};
class StringRef {
  int counter;
  StringData *data;
public:
  StringRef(const char *s): counter(0), data(new StringData(s)) {}
  ~StringRef() { delete data; }
  void IncRef() { ++counter; }
  void DecRef() { if (--counter < 0) delete this; } //delete出来なければ、String中で
}
class String {
  StringRef *ref;
public:
  String(const char *s): ref(new StringRef(s)) {}
  String(const String& rhs) { ref->IncRef(); } //Assign
  ~String() { ref->DecRef(); }
  const char *c_str() { return ref->data->str; }
}

この形をベースにして、
・メモリ上でStringDataとStringData.strをつなげる
=構造体の最後のサイズ0のメンバ(char str[0])に持たせる
・メモリ上でStringRefとStringDataをつなげる
=StringにDataを持たせ、Ref参照を*((StringRef *)Data-1)にする。
等の工夫をしているはず。
(この両方を実装すれば、c_str()は、ただのchar *と同じコストになる)

Accessor(String)と実体(StringData)以外の
カウンタ管理クラス(StringRef)自体は汎用性がある。
でも、実際に汎用性を持たせる(色々なxxxDataを扱う)ためには
templateか多重継承(両方かも)が必須になる気がする。

481 :turbo type D:2001/03/29(木) 17:07
む、、、むずかしいです。
話が見えない....理解ロクなくてスマソ

482 :デフォルトの名無しさん:2001/03/29(木) 20:50
>>480
MoreEffectiveC++に、汎用リファレンスカウンタの
はなしが長々と載ってるよん。


483 :turbo type D:2001/03/30(金) 11:25
戻り値で返すこんな方法も考えました。

これの使い方はこんな感じ。
 FRefObject1 := TMyRefObject( IncRefCounter(FRefObject1, TMyRefObject) );
 FRefObject1 := TMyRefObject( DecRefCounter(FRefObject1) );
 FRefObject1 := TMyRefObject( FreeRefObject(FRefObject1) );

しかし、これも、邪魔なキャストばかり。
もっとエレガントな書き方がしたいのですが
テンプレートの使えないDelphiではしかたないのか...

type
 TRefObject = class(TObject)
 private
  FRefCounter: Integer;
 public
  constructor Create; virtual;
  property RefCounter: Integer read FRefCounter;
 end;

 TRefClass = class of TRefObject;

function IncRefCounter(RefObj: TRefObject; RefClass: TRefClass): TRefObject;
function DecRefCounter(RefObj: TRefObject): TRefObject;
function FreeRefObject(RefObj: TRefObject): TRefObject;

implementation

function IncRefCounter(RefObj: TRefObject; RefClass: TRefClass): TRefObject;
begin
 Result := RefObj;
 if RefObj=nil then
 begin
  Result := RefClass.Create;
 end;

 Inc(Result.FRefCounter);
end;

function DecRefCounter(RefObj: TRefObject): TRefObject;
begin
 Result := RefObj;
 if RefObj=nil then Exit;

 Dec(Result.FRefCounter);
 if Result.FRefCounter<=0 then
 begin
  Result.Free;
  Result := nil;
 end;
end;

function FreeRefObject(RefObj: TRefObject): TRefObject;
begin
 Result := RefObj;
 while Result<>nil do
  Result := DecRefCounter(Result);
end;

484 :turbo type D:2001/03/30(金) 11:27
FreeAndNilなんかみていても感じるけど
オブジェクトのvar渡しだけ特殊な処理してくれてもいいのにな。
例えば上位クラスにキャストして扱ってくれるとか。
オレがしらないだけでやり方があるの?

FreeAndNilのHELP
警告 Obj が TObject またはその下位オブジェクトの
インスタンスでない場合は,
Obj に値を渡さないようにしてください。

とあるが、これを言語レベルで警告や禁止する方法は必要だろうに。

485 :デフォルトの名無しさん:2001/03/30(金) 12:13
>>484
少し考えれば駄目だって分かるよね?

procedure CreateObj(var Obj: TObject);
begin
 Obj := TObject.Create;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 Obj: TObject;
 Comp: TComponent;
begin
 CreateObj(Obj); // これはコンパイル出来て当然として
 CreateObj(Comp); // これはコンパイル通っちゃあかんだろ。
end;

で下のように書き換えるのはどうよ? 戻り値がPointer型だから
型チェックは出来ないけど。

interface

function IncRefCounter(RefObj: TRefObject): Pointer;
function DecRefCounter(RefObj: TRefObject): Pointer;
function FreeRefObject(RefObj: TRefObject): Pointer;

implementation

function IncRefCounter(RefObj: TRefObject): Pointer;
begin
 InterlockedIncrement(RefObj.FRefCount);
 Result := RefObj;
end;

function DecRefCounter(RefObj: TRefObject): Pointer;
begin
 Result := nil;
 if (RefObj<>nil) and (InterlockedDecrement(RefObj.FRefCount)<=0) then
  RefObj.Free;
end;

function FreeRefObject(RefObj: TRefObject): Pointer;
begin
 Result := nil;
 RefObj.Free;
end;



486 :turbo type D:2001/03/30(金) 12:48
んー、まだわかりませんです。

んじゃ、これは通っちゃってもいいのかな?
通るけど。
procedure CreateObj(Obj: TObject);
begin
 Obj := TObject.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 Obj: TObject;
 Comp: TComponent;
begin
 CreateObj(Obj);
 CreateObj(Comp);
end;

487 :turbo type D:2001/03/30(金) 13:07
なぜかsageてしまったのでage

Pointerもいいんですが、
>>475
に上げた
procedure IncRefCounter1(var RefObj: TRefObject; RefClass: TRefClass);
procedure DecRefCounter1(var RefObj: TRefObject);
がキャストの厳しい言語として
あるべき姿なのかなあと、考えなおし初めてます。

だって、
procedure IncRefCounter2(var RefObj; RefClass: TRefClass);
procedure DecRefCounter2(var RefObj);
こっちだと、TRefObject派生じゃないものを
渡した時にどうしてもAccessバイオが出るし..

こういう実装は痛い気がする。
procedure IncRefCounter(var RefObj; RefClass: TRefClass);
var
 Object1: TObject;
begin
 try
  if TRefObject(RefObj)=nil then
  begin
   TRefObject(RefObj) := RefClass.Create;
  end;

  Inc(TRefObject(RefObj).FRefCounter);
 except
  on EAccessViolation do
   raise EConvertError.Create('リファレンスカウンタクラスではありません');
 end;
end;

procedure DecRefCounter(var RefObj);
begin
 try
  if TRefObject(RefObj)=nil then Exit;

  Dec(TRefObject(RefObj).FRefCounter);
  if TRefObject(RefObj).FRefCounter<=0 then
  begin
   TRefObject(RefObj).Free;
   TRefObject(RefObj) := nil;
  end;
 except
  on EAccessViolation do
   raise EConvertError.Create('リファレンスカウンタクラスではありません');
 end;
end;



488 :デフォルトの名無しさん:2001/03/30(金) 13:21
>Accessバイオ
いい響きだ

489 :turbo type D:2001/03/30(金) 13:40
レ--ス--それだけーーか--よーーー(TwT


490 :( ゚Д゚):2001/03/30(金) 18:50
みんな、よく知っているなぁ・・・。うらやましい。

491 :デフォルトの名無しさん:2001/03/30(金) 20:23
文法よく知らんが、なんとか解読してくれ。
type
 TDataObject = class(TObject)
 public
  Name: String;
  procedure Message(S: String);
 end;

 TRefObject = class(TObject)
 private
  FRefCounter: Integer;
  FDataObject: TDataObject;
  procedure IncRefCounter;
  procedure DecRefCounter;
 public
  function Getter: TDataObject;
 end;

 TMyObject = class(TObject)
 private
  FRefObject: TRefObject;
 public
  procedure Message(S: String);
 property
  property Item: TDataObject read FRefObject.Getter;
 end;

MyInstance1 ┐
MyInstance2 ┼──→ RefInstance ──→ DataInstance
MyInstance3 ┘
この形にするのが基本。
TDataObjectをTRefObjectから派生させるなら、FDataObjectをnilには出来ない。
→カウンタを見てGetterがnilを返すしかない。

492 :491:2001/03/30(金) 20:43
追加。
MyInstanceは常に(有効な)RefInstanceを持つ。
Refが持つDataはnil(無効)である場合もある。

493 :turbo type D:2001/04/01(日) 14:54
遅くなってスンマソ。
土日はなにやら忙しいです。

で、>>491
で示されている方式が一般的にC++などで実装されている
リファレンスカウンタの仕組みなんでしょうか。

TDataObjectの生成/破棄などを
対になるTRefObjectのGetterを使って行えばいい?
そうすればTDataObject部分がどんなデータ構造でも
リファレンスカウンタの機能を付随させることが
できるわけか。

レスありがとう。勉強になりました。

サンプルを作って遊んでみるかな。

494 :デフォルトの名無しさん:2001/04/02(月) 01:37
Win2k+Delphi5です。
イースターエッグでOSごと固まりました。
Win2kが行方不明になったのこれが初めてで、ちとびっくり。
他の人はどうかな?

495 :turbo type D:2001/04/02(月) 12:00
おれも固まった>>494

496 :494>495:2001/04/03(火) 18:11
おお、そうですか。安心しました。

BorlandはWin2k対応パッチ(+ライブラリ)なんて
これっぽっちも考えてないんだろうな。。(やれやれ

497 :turbo type D:2001/04/03(火) 19:52
NT4でD5イースターエッグが固まったよ。
2000は対応パッチとかいらないのでは?問題なく動くし。

2000固有の機能なんてつかわないし。
たしか、>>496のような発言してた人は
どこかで煽られていたような気がするぜ。


ところで、改めてC#のページみていたら
http://www.atmarkit.co.jp/fdotnet/csharptips/001skeleton/001skeleton.html
にてるなーDelphiそっくり!(藁

コンストラクタでButtonを生成する所がよいね。


498 :デフォルトの名無しさん:2001/04/03(火) 19:52
ディレクトリを監視して、そのディレクトリ内のファイルが
変更されたら通知するAPIなかったっけ?

499 :turbo type D:2001/04/03(火) 20:06
FindFirstChangeNotification
のへん?

Delphi広場へどぞ

500 :turbo type D:2001/04/03(火) 20:09
http://homepage2.nifty.com/boheme/delphi/tips/tec0650.htm
こっちの方がいいかも

501 :496>497:2001/04/03(火) 23:42
要するに、前向きな姿勢がまるっきり見られない、この停滞感が
なんだかなぁ、ってことなのよ。

>498
ちと違うかも知れないけど、こんなのもあるよ。
http://backno.mag2.com/reader/BackBody?id=200101150630000000016258000

502 :デフォルトの名無しさん:2001/04/04(水) 04:23
データベースを作りたいんだけど、どうやってつくるの〜?

503 :デフォルトの名無しさん:2001/04/04(水) 04:38
移転先発見!
http://tokyo1.virtualave.net/
http://tokyo1.virtualave.net/
http://tokyo1.virtualave.net/
http://tokyo1.virtualave.net/
http://tokyo1.virtualave.net/
http://tokyo1.virtualave.net/

504 :seven:2001/04/04(水) 07:17
>>502
MS-Excelを買ってきて、データをせっせと打ち込みましょう。
終わってみれば、ほら、「データベース」が完成してます。
それだけでは不満ですか?、さて、何が不満なのでしょう?
Delphi以外の問題は、他のスレッドでお願いしたいです。
プログラム以外の問題は、他の板でお願いしたいです。
>>503
針に餌が付いてないから、誰も食いつかないと思いますです。

505 :turbo type D:2001/04/04(水) 07:34
>>seven
朝早いのに、厨房駆逐ありがと(w

506 :>502:2001/04/04(水) 09:45
Delphiでデータベース作るならBDEを使う。
でもlearningには付いてないよ。

507 :turbo type D:2001/04/04(水) 10:44
TWebBrowserのリンク先に対してポップアップHintが表示される
もっとも簡単なサンプルを誰かおせーて!キボーン

ホットゾヌブラウザのソースで
procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;
const Text: WideString);
を見てもわかんない、
。°°(≧w≦)°°。

508 :デフォルトの名無しさん:2001/04/04(水) 10:48
Textが'#'+数値の形式かどうかで判断するんじゃだめなの?

509 :デフォルトの名無しさん:2001/04/04(水) 16:21
>>502
CREATE DATABASE DB名;

510 :turbo type D:2001/04/04(水) 19:29
そもそも、'ヒントだよ'
という文字列をヒント表示する方法がわかんないのです、>>508

511 :デフォルトの名無しさん:2001/04/04(水) 20:01
StayOnTopなフォームにヒント描いて
マウスカーソルの左上に座標セットして
Showするだけじゃん。

512 :turbo type D:2001/04/04(水) 20:14
まじ?、hintWindowを継承したと思うが...

513 :ヒロユキ@ギコナビ:2001/04/05(木) 00:03
>>512
var
p: TPoint;
ARect: TRect;
begin
FHint := THintWindow.Create(Self);

GetCursorpos(p);
p.x := p.x + 15; //なんとなく調整
p.y := p.y + 15;
ARect := FHint.CalcHintRect(Screen.Width, s, nil);
Rect.Top := ARect.Top + p.y; //なんかwinapiあったような…
ARect.Left := ARect.Left + p.x; //なかったっけ?Rectを一回で変更するやつ。
ARect.Bottom := ARect.Bottom + p.y;
ARect.Right := ARect.Right + p.x;
FHint.ActivateHint(ARect, 'ヒンート');
end;

あと、どっかに宣言。
FHint: THintWindow;


514 :Dax:2001/04/05(木) 00:09
>>507
えっと、ホットゾヌブラウザはギコナビぱくりました!
やり方は >>513 ヒロユキ@ギコナビ氏が書いたとおりです。
ただ、ホットゾヌブラウザではタイトルの部分を着色するために
THintWindowをわざわざ継承して Paintメソッドをオーバーライドしてます。
ただヒントを出すだけなら継承せんでよかですよ。

515 :seven:2001/04/05(木) 07:09
>>504のばーじょんあっぷ版(前のはDelphi対応ではないという蟲があったため)
FormにStringGridを貼りつけて実行し、データをせっせと打ち込みましょう。
終わってみれば、ほら、「データベース」が完成してます。
それだけでは不満ですか?、さて、何が不満なのでしょう?
Delphi以外の問題は、他のスレッドでお願いしたいです。
プログラム以外の問題は、他の板でお願いしたいです。

516 :ああもう下がりすぎ〜:2001/04/16(月) 10:24
原水さんDelphi Users Groupのページどこいったのよ〜。
もう勝手に名乗っといて勝手に消さないでくれる?

517 :デフォルトの名無しさん:2001/04/16(月) 10:36
ここかい?
http://www.users.gr.jp/ml/delphi.asp

518 :デフォルトの名無しさん:2001/04/16(月) 12:14
それはMLのログページだよう。以前は下にあったのに・・・
http://www.users.gr.jp/delphi/

519 :デフォルトの名無しさん:2001/04/16(月) 12:45
ログはこっちでは?
http://www.users.gr.jp/ml/archive/Delphi/

520 :デフォルトの名無しさん:2001/04/16(月) 13:08
結局だれも存在すら知らなかったのね・・・ここも知られて
ないだろうなあ・・・
http://www.users.gr.jp/WebBoard/list.asp?ID=Delphi

521 :デフォルトの名無しさん:2001/04/18(水) 19:32
質問ですが、エクスプローラで右ボタンでドラッグして適当な場所で
ボタンを離すと
----------------------
ここにコピー
ここに移動
ショートカットをここに作成
----------------------
キャンセル
----------------------
というメニューがでてきますが、これは何らかの方法で自分のアプリ
でもAPI等を使って表示&処理させられるものなのでしょうか?

それとも自分で自アプリ上でマウスボタンが離されたらそういう
メニューをだすようにゴリゴリ書くべきものなのでしょうか?
(あ、Delphiとはあまり関係なかった…)

522 :デフォルトの名無しさん:2001/04/18(水) 20:15
たぶん後者

エクスプローラからならこれ。
http://www.melander.dk/delphi/dragdrop/

523 :デフォルトの名無しさん:2001/04/18(水) 21:29
>>522
レスどうもです。
実はDrag and Drop Component Suite使ってるのです。
でも上記のメニューがでないんだよなぁ。うーむ。

今色々探してますけど、OLEでごりごりやればだせそうな…。
もうちょっと修行してきます!

524 :デフォルトの名無しさん:2001/04/18(水) 21:33
おぉ、今気がついたけどDrag and Drop Component Suiteのページの
下によさげな参考リンクがいくつか。。。
早速修行します。

525 :turbo type D:2001/04/20(金) 11:44
ようやく時間がとれた。。。疲れすぎ。

質問します。
AssignFileの使い方
try〜finally end
の使い方が今ひとつはっきりしません。

 AssignFile(datF, FNAME);
 rewrite(datF, 1);
 try
  blockWrite(datF, varA, sizeof(varA));
  blockWrite(datF, varB, sizeof(varB));
 finally
  CloseFile(datF);
 end;

これがいいのか、
AssignFileとrewriteなどもtry〜finally間に
入れた方がいいのかって事です。

monaUtils見てて気になったです。

よろしくおねがいします。

526 :turbo type D:2001/04/20(金) 11:45
また違う質問で、教えてください。

ファイルのエラーが出た場合
例えば、ファイルが存在してなかったりする場合
どんな例外を発生させればいいのでしょう。

そもそも、何かの例外が出るという場合
何の例外を発生させるべきかという事が
全くわからないのですが、
例外コード一覧などという資料がどこかにありますか?

DateTimeToStringみたいなのを
自作したときに期待値以外のパラメータがきた場合
どんな例外を作成すればいいのかな。

527 :デフォルトの名無しさん:2001/04/20(金) 11:58
>>526
おまえHelp読めよ…

528 :turbo type D:2001/04/20(金) 12:34
まあ、きびしい。

529 :turbo type D:2001/04/20(金) 12:47
Sysutils ユニットに載っているのが
例外のすべてなのですか?

530 :デフォルトの名無しさん:2001/04/20(金) 13:04
「コード一覧」なんて寒い概念から
例外を救ったのが、例外クラスというやつだと思う。

コードってのは番号とかのことだと推察するけど、
番号だと「似た/似てない例外」ってのを
把握するのがめちゃめちゃ面倒なんだな。

その点、例外の種類をクラス使って分類するようにすると、
継承ツリーに「似た例外」を当てはめれば良くなる。
すっきり。

つーわけで答え。
クラスツリーブラウザ(ご免正式名称忘れた)で
Exceptionクラスだかの下を一通り眺めろ。以上。

あとクラスだから当然、自作もなんぼでも可能ね。
これがコード(番号)だと、既存番号体系と矛盾せずに
新しい番号を付け加えるのが一苦労なんだよな。
例外クラスまんせー



531 :turbo type D:2001/04/20(金) 13:34
>クラスツリーブラウザ(ご免正式名称忘れた)で
>Exceptionクラスだかの下を一通り眺めろ。以上。

まあ、ご親切に。ありがとう。
モジュールエクスプローラというやつかな。
こりゃ便利です。すっかり忘却してました。

俺、例外クラスの概念は氏ってたけど
なんとなく例外コードとしてしか認識できていなかった。

なるほど、例外クラスマンセーものです。


532 :turbo type D:2001/04/20(金) 13:34
ageわすれ,えいっと。

533 :デフォルトの名無しさん:2001/04/20(金) 13:49
OCXの利用でちょっと悩んでいます。

外部I/Fのコントロールなのですが、仕様書には、
>object.inp Port As String, Pin As Integer
>(PortはPortAまたはPortBを指定)

とあって、inp('PortA',1); とかすると
"TOleEnumとSmallIntの互換性が云々"と出ます。

原因は何なのでしょうか・・・?


534 :デフォルトの名無しさん:2001/04/21(土) 07:16
>>530
便乗感謝

535 :デフォルトの名無しさん:2001/04/21(土) 14:33
'foo;bar;baz'
を'foo', 'bar', 'baz'
に分割する方法はないですか?
最終的にTStringsにセットしたいのですが。

536 :デフォルトの名無しさん:2001/04/21(土) 15:27
>>535
「正規表現」コンポーネントを使ってる。
文字列を切り刻んだりするのは「正規表現」が
一番強力なので、分割パターンがちょっとフクザツに
なったりする(かも知れない)状況では、迷わずコレ。
ま、フクザツでなくても、今時のCPUなら
処理コストを考える必要もさほど無いだろし。

正規表現って文法(?)が結構壊れてるんで、
覚えたり、まして読んだり(笑)するのは
ちょっと面倒だけど、どうせ正規表現自体を
そんなに長々と書くことは滅多に無いんで、
なんとかなる範囲です。
正規表現は、さくっと覚えておくと有利です。色々な場面で。

#あとunix畑と行き来しやすくなる(ぉ

bmRegExpとかいう正規表現コンポ集だと、
Awkコンポとかいうのがあって、
切り取る部分の正規表現(ここでは';')を与えると、
splitメソッド一発でTStringsに結果を出力してくれるよ。

537 :デフォルトの名無しさん:2001/04/21(土) 15:35
>>531
あれ?モジュールだっけか?
継承図が出る奴は違ったと思うけど。
#御免。今手元にdelphiが無い環境なので、判らず。

まず継承図からException以下をなんとなく見る。
もし自分が今出したい例外にビンゴな「名前の」例外クラスがあったら
もうけものと思ってそれを使う。
ちょうどいいのが無かったら、できるだけ近そうな「名前の」例外を
選んで、それを継承して自分で好きな「名前の」例外を作る。

特に例外は、名前に拘るのが味噌だと思う。
例外Objectは実際にプログラムとして動くわけでもないんで、
#少なくとも、例外クラスに、意味のあるメソッドを書いたことが
#ないようなきがする(笑)
あるのはひたすら、「私はこう分類しました」という
名前のつけかただけ。ここで旨い名前をつけておけば
あとあと混乱しないで済むので、ちょっと気合入れて
名前を選ぶのをお勧め。

538 :デフォルトの名無しさん:2001/04/22(日) 00:28
>>535
セミコロンをカンマに置き換えて
CommaTextに代入すればいいだけ。

539 :デフォルトの名無しさん:2001/04/22(日) 00:55
>>538
それ駄目。'a,b;c,d' とかいったデータで誤動作しちゃうよね。

540 :>535:2001/04/22(日) 01:00
function Splitter(s: String; delimiter: String; list: TStrings): TStrings;
var
i: Integer;
begin
Result := list;
list.Clear;
while s <> '' do
begin
i := AnsiPos(delimiter, s);
if i=0 then
begin
list.Add(s);
Exit;
end;
list.Add(Copy(s, 1, i-1));
s := Copy(s, i + Length(delimiter), High(Integer));
end;
end;


541 :Del厨:2001/04/22(日) 16:32
>>681
じゃ、あんたからどーぞ。

というか経験でしか物を見られないのかね。幸せな頭だ。

人月の神話なんて信じている典型ドキュなんじゃないの?
数百人月で複数ベンダーでとかでえらぶって
実は優秀な奴にやらせたら十数人月でした。ってのは
よくある話。

コテハンだとしょうもない事言われるから、本当にさよならね。
フリーで仕事してまーす。って言っても信じてもらえんかね。(w

言っている事の反論じゃなくて
人の経験数とかで何かを決めようなんて
2chを読んでいる人間からはどう思われるかねえ。

ま、そう反論でもしないと自分の心を守れないのだろうから
哀れではある。

モナーシステム開発の部長だって
周りからはバカにされてるけど
部長には部長の主張があるわけだ。
せいぜい現実世界ではバカにされないようにな。

542 :デフォルトの名無しさん:2001/04/22(日) 16:33
まずった(藁

543 :デフォルトの名無しさん:2001/04/22(日) 16:52
>>541
すげー部長はいるね。さすがに@@@で部長になるだけはあるな、っての。

うちの部長は、まじで何やってるんだろ?
会った事無いし、出先に来ないし、納品すら課長までで関係無いし。
俺、自分で商談取ってくるから営業とも会ったことないし。

人月は?受注価格÷会社の人月です。
だから作業期間と一切関係無いです(鬱だし脳

っていうか681って????

544 :デフォルトの名無しさん:2001/04/22(日) 17:09
スレ間違えるな!>>541
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=986993653

545 :デフォルトの名無しさん:2001/04/22(日) 17:13
こんな糞スレにリンク張るな!>>544

546 :543:2001/04/22(日) 17:55
>>544
俺もスレ違いになっちまったなスマソ
唐突だと思ったよっていうか氏ね>>541


547 :デフォルトの名無しさん:2001/04/22(日) 19:40
>>541
若いねえ君も。焦りすぎは禁物だぞ。世の中そんなにスグ
には変らん。

548 :デフォルトの名無しさん:2001/04/22(日) 23:01
Delphiで作ったプログラムって、サイズどれぐらいですか?
VC++とWTLだと、特別なDLLなしで20kぐらいでダイアログ表示だけのexeが作れます。
Delphiだとどれぐらいですか? ランタイムDLLとか、OCXとか必要になります?


549 :デフォルトの名無しさん:2001/04/22(日) 23:04
>>548
DelphiだってSDKできるだろ。
おまえは馬鹿か?

550 :デフォルトの名無しさん:2001/04/22(日) 23:07
>>549
厨房相手にムキにならんでも。

551 :548:2001/04/22(日) 23:08
>>549
Delphi使うんだったら、VCL使いたいべ?


552 :>548:2001/04/22(日) 23:09
コンソールアプリから作りこめば
数kのアプリも簡単に作れます


553 :543:2001/04/22(日) 23:09
>>548
そんなプログラム作る意味無い。vbsで数バイトだ。
VCユーザは万能言語をうたうから、脳味噌が硬直するんだsage


554 :548:2001/04/22(日) 23:12
>>553
機能のコアになる部分は大してサイズが変わんないだろ?
だから、フレームになる部分がどれぐらいのサイズになるか知りたいんだよ。


555 :デフォルトの名無しさん:2001/04/22(日) 23:14
>Delphi使うんだったら、VCL使いたいべ?

ダイアログ表示したいだけなら
どれだっていーよ。

556 :デフォルトの名無しさん:2001/04/22(日) 23:20
>>549
おまえみたいなやつがDelphi使いの品位を落とすんだよ。
黙っとけ。


557 :548:2001/04/22(日) 23:26
もしかして、Delphiがサイズでかいプログラムしか作れない、とかあおってると思われてる?
今はVC++だけど、TurboPascal3.0から、初代のDelphiも使ってるんで、そこんとこよろしく。


558 :デフォルトの名無しさん:2001/04/22(日) 23:27
>>548
>Delphiで作ったプログラムって、サイズどれぐらいですか?
空のフォーム1枚のアプリで285 KB (291,840 バイト)
メモリ使用量はタスクマネージャの表示で2720KB(仮想メモリサイズ 680KB)

ランタイム切り離すと
13.5 KB (13,824 バイト)
メモリ使用量は3,552KB(仮想メモリサイズ 1,012 KB)

ランタイムを切り離すと使用メモリが増えるのは
関係ないモジュールまで(動的に)リンクされてしまうためだと思う。

559 :デフォルトの名無しさん:2001/04/22(日) 23:29
じゃあ、答え。
Delphiでも「特別なDLLなしで20kぐらいでダイアログ表示だけのexeが作れます」


560 :549:2001/04/22(日) 23:32
黙ってたけど・・・駄目だ、もう一回だけ言わせてくれ。
「おまえは馬鹿か?>558」

>ランタイムを切り離すと使用メモリが増えるのは
>関係ないモジュールまで(動的に)リンクされてしまうためだと思う。



561 :548:2001/04/22(日) 23:36
>>558あんがと。あんまり昔と変わらんね。
やっぱり適材適所で使うしかないかな。
kylixがでるから、Delphi系に全部移行しようかと思ったんだけど、
仕事によってはどうしても小さいプログラムにしなくちゃならなかったりするので。

もう一個教えて君で悪いんだけど、DelphiとC++Builderって、ソースコードを混在させたりとかできるの?
C++BuilderでVCLのソースを追っていったら、いきなりPascalになったんでビクーリしたよ。


562 :デフォルトの名無しさん:2001/04/22(日) 23:46
>>560
 ぷぷー
 スタティックリンクで必要ないDLLが使われなくなったら、
そうなるんじゃねえのかよ。ドヴァカ。

563 :デフォルトの名無しさん:2001/04/22(日) 23:54
うーむ。del厨房逝って良し!>>548-562

564 :デフォルトの名無しさん:2001/04/22(日) 23:54
>>561
>もう一個教えて君で悪いんだけど、DelphiとC++Builderって、ソースコードを混在させたりとかできるの?
>C++BuilderでVCLのソースを追っていったら、いきなりPascalになったんでビクーリしたよ。
Delphi/C++Builder共にC/C++形式のobjが生成可能なので一応可能です。
コンポーネントはDelphi->C++Builderのみ可能だったと思います。
ただ、あんまり突っ込んで試したことないけど。

>>560
>>ランタイムを切り離すと使用メモリが増えるのは
>>関係ないモジュールまで(動的に)リンクされてしまうためだと思う。
補足すると、例えばvcl50を静的にリンクするとスマートリンカが
vcl50の一部(この場合はTForm関連のみ)がリンクされ、
TButtonなどの使用していないコンポーネント部分のライブラリはリンクされない。
動的にリンクすると常にvcl50「全体」がリンクされるために
静的リンク時よりもメモリ使用量が増える。

というように理解してます。

565 :553:2001/04/23(月) 00:07
>>563
え、俺も?


566 :563>553:2001/04/23(月) 00:09
参照用です。omit>>553

567 :553:2001/04/23(月) 00:17
>>566
そか。


568 :>558,561:2001/04/23(月) 01:28
おまえらコンソールアプリ作ったことねぇ〜のかよ!
まさかDelphiはフォームのあるアプリしかつくれねぇとでも
思ってんのか?

馬鹿は逝け!


569 :デフォルトの名無しさん:2001/04/23(月) 01:41
寝ろ>568

570 :デフォルトの名無しさん:2001/04/23(月) 02:13
>補足すると、例えばvcl50を静的にリンクするとスマートリンカが
>vcl50の一部(この場合はTForm関連のみ)がリンクされ、

スマートリンカをもってしても、VCLを使う奴はでかいよね。
やっぱりあれだけ充実(笑)したOOP仕掛けを演出するには
それくらいのコスト(リンクされるものの多さ)を
払わないとならないんだろうな。

初めて(初代)delphiを触ったときは
Exeのでかさでびっくりした(TP7まで素朴に
スマートリンカ=小さいと思っていたので)けど、
まぁ時代がHDDを大きくしてくれた(笑)ので
あれでもいいやというか、そういう肩の力抜いた感じで
Borlandは先見の明あったと思う。

#あと、Exeがでかくなるせいか、ソースレベルでの流通が
#多かった感じする(^^;のが嬉しい。

571 :デフォルトの名無しさん:2001/04/23(月) 10:38
使わないユニットは極力Usesから外さないと
ぜんぜんサイズがちがってくるよねー。

DLLやEXE分割、パッケージを使った方が有利になる
トレードオフってどの位のもんだろう?
(分けたらわけたでメモリ共有がめんどそう。)

572 :548:2001/04/23(月) 12:19
あんがとね〜。
久しぶりにDelphiやるぜ〜。kylixも買うぜ〜。
あと、偉そうなこと逝ってるくせに実力ない厨房君たちは、せいぜいスキルアップに努めること。
DelphiはVBみたいに馬鹿でも使える、とか思われると腹立つんだよね〜。

573 :名無しさん:2001/04/24(火) 02:55
>>572
VBは馬鹿でも使えるが、ソース見れば真性ヴァカか即わかるけどな。


574 :デフォルトの名無しさん:2001/04/24(火) 05:45
馬鹿でも使える、ある意味素晴らしい言語ってないですかね?


575 :デフォルトの名無しさん:2001/04/24(火) 09:43
>>574
馬鹿でも使えるってのはある意味すごいけど、
馬鹿を馬鹿のままにしておくってのはクソ言語。
まぁ言語というよりそいつのおかれた環境がクソなんだろうけど。

576 :デフォルトの名無しさん:2001/04/24(火) 10:18
Delphiのおかげでずいぶんと成長できた。


577 :デフォルトの名無しさん:2001/04/24(火) 12:27
>>575
言語が人を育てるわけではないのだが・・・
例えばドキュソな上司が作ったコーディング規約で
ドキュソなコードしか書かせてもらえないというのは
良くありそうだ。サラリーマンプログラマの場合。

578 :デフォルトの名無しさん:2001/04/24(火) 12:50
コンソールアプリ作るときは、SysUtilsもはずしとけ。
数十KByte削減できるぞ(藁

579 :デフォルトの名無しさん:2001/04/24(火) 12:51
WTLって、結構よさげだねー。
Delphi版つくれねぇかなぁ(w
って、テンプレートないからつれえか・・・。


580 :名無しさん:2001/04/24(火) 13:28
>>574
ぴゅう汰の日本語ベーシック


581 :デフォルトの名無しさん:2001/04/24(火) 16:54
>>580
大人でそれを使うのは馬鹿っぽいが子供なら
天才かもしれんぞ。

582 :名無しさん:2001/04/24(火) 19:31
>>581
オト ダス 1


583 :Delphi5で:2001/04/24(火) 19:55
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
begin
end.
をコンパイルすると40k。
uses SysUtils;を除いてコンパイルすると16k。

ついでに{$APPTYPE CONSOLE}外すせばDOS窓も出ないアプリが
つくれます。

厨房でごめん。


584 :575:2001/04/24(火) 20:06
>>577
> 言語が人を育てるわけではないのだが・・・
そうなんだけど、言語が現すパラダイムというのもあると思うので。
後半は悲しく同意。

585 :デフォルトの名無しさん:2001/04/24(火) 20:19
>>583
Sysutils外すと実質使えるのはSystemユニットのみ
なのでこれで何が出来るかと言えば・・・なんだろ?
やっぱパケジかなあ。

586 :デフォルトの名無しさん:2001/04/24(火) 22:26
Windowsユニットはあんまりサイズ増えないよ。

587 :デフォルトの名無しさん:2001/04/25(水) 06:34
Windowsユニットは全くサイズは増えないと思うが。

588 :デフォルトの名無しさん:2001/04/25(水) 14:21
>>577
言語は人を育てる。
上司も人を育てる。

ただし、育つといってもマイナス方向も有るようで(笑)、
ドキュな言語や上司に出会うと、しばしば人は
マイナス成長を遂げてしまう。

マイナス教師をうまく反面教師に転嫁できることを
祈っています。



589 :デフォルトの名無しさん:2001/04/29(日) 16:56
Borlandマンセー♪
http://www.excite.co.jp/world/url/body/?wb_url=http%3A%2F%2Fwww.santacruzsentinel.com%2Farchive%2F2001%2FApril%2F27%2Ftop%2Fstories%2F1top.htm&submit=%83E%83F%83u%83y%81%5B%83W%96%7C%96%F3&wb_lp=ENJA&wb_dis=2&wb_co=excitejapan

590 :デフォルトの名無しさん:2001/04/30(月) 18:06
>>589
?ブラクラ?

591 :Exciteの翻訳ページだよ:2001/05/01(火) 00:29
>>590
なんかBorlandが儲かってるって記事の日本語訳みたいだけどExciteの翻訳が
醜いからいまいちわかりづらい。原文見たほうが良いかもね。


592 :デフォルトの名無しさん:2001/05/01(火) 01:07
PASCALはもともとプログラミング教育用の言語だと情報学科
の友人に聞きましたが、どこがどう教育用なのでしょうか?

593 :デフォルトの名無しさん:2001/05/01(火) 01:47
>>592
いまじゃ当たり前だけど構造化記法を意識しはじめた
はしりではなかったかと。
Cより1年ぐらい早かったんだっけ?よくわからん。

594 :デフォルトの名無しさん:2001/05/01(火) 01:56
Cが実利主義的、悪く言うとOSを書くための高級アセンブラ
だったのに対しPASCALはプログラムをお行儀よく書くための
言語として開発されたんじゃなかったっけ。

そのためカニはんかリッチのどちらかから
「PASCALはオモチャ」とのありがたい言葉を受けたらしい。

595 :デフォルトの名無しさん:2001/05/01(火) 03:28
>>592
教育を目的に作られたから。
当初の目的と違った使われかたをするのは良くある事。


596 :デフォルトの名無しさん:2001/05/01(火) 03:53
>>595
あまり答えになっとらんやん。
アレだ、学生がレポートで出してくるスパゲッティでパズルで
暗黙の型変換バシバシで自己改変なクソコードを読んで
採点するのに疲れた先生が考えたのがPASCAL。

型チェックが厳しく、ループ変数の制限が厳しく、ポインタの
概念を大幅に切り捨て、ライブラリはなかったことにして、
ともかく読みやすいコードを書くことを第一義に置いたものやね。

だから、素のPASCALはオモチャというのはまさにその通り。
TPやDelphiはちゃうよ。ボーランドが拡張しまくってるからね。

597 :578:2001/05/01(火) 06:49
>>585
一度、修行にSysUtilsなしでアプリ組んだことあるよ。
アプリっつーかゲームでだけど。
ソース公開してるから、見た人驚いてるかも(いろんな意味で)

車輪の再発明になるから、そういうのが好きでない人の場合
あまり意味はない(藁

598 :名無しさん:2001/05/01(火) 07:31
>>596
でもDelphiの方が、オブジェクト指向も若干わかりやすくない?


599 :デフォルトの名無しさん:2001/05/01(火) 10:17
>>598
そりゃ、Delphiが既にPascalを元にした独自言語になってるから
だよ。

600 :デフォルトの名無しさん:2001/05/01(火) 10:33
>>598
うんうん。オブジェクト指向の入門には最適なんだけどなー。
(C++の様に初心者の頭をこんがらかせる多重継承、演算子オーバロード、
テンプレートがない)

そういう意味で塚越氏の「Delphi オブジェクト指向プログラミング」
絶版は非常に残念。UMLなど取り入れて再版望む。

601 :デフォルトの名無しさん:2001/05/01(火) 10:34
「TDatabase-BDE-ODBC」で接続しているとき、
ODBCの関数を呼びたいのですがODBCステートメントハンドルが必要です。
どうすればODBCステートメントハンドルを取得出来るのでしょう?

602 :デフォルトの名無しさん:2001/05/01(火) 12:25
>>600
より「純粋」なOOPに近いよね。
TClassなんかも使える辺りが強力。

初心者だけじゃなくてもっとひろく使って欲しい感じ。

え?絶版?(t_t)



603 :デフォルトの名無しさん:2001/05/01(火) 13:02
Delphiがオブジェクト指向の入門には最適なんてうそだろー。
そんなこと言ってる奴は、きっとDelphi入門者なんだろうな。

604 :デフォルトの名無しさん:2001/05/01(火) 13:06
>>603
じゃ何がいいの?

605 :!603:2001/05/01(火) 13:14
>>604
Java

606 :!603:2001/05/01(火) 13:14
>>604
Java

607 :デフォルトの名無しさん:2001/05/01(火) 13:22
Javaは入門用というより、OOPが理解出来てないと
話にならん。OOPを強制させる、って趣向かな?

608 :turbo type D:2001/05/01(火) 13:53
JAVAとかC++のスタチックメソッドってのは
Delphiのクラスメソッドの事ですか?

どうでもいいけど、
JAVAのオブジェクト指向は変だと思うけど。

609 :デフォルトの名無しさん:2001/05/01(火) 14:18
>Delphiのクラスメソッドの事ですか?

そうです。

ただし、 DelphiのClassMethodは、virtualに出来る
っていう辺りが、圧倒的なアドバンテージ(笑)。

これのおかげで、ファクトリー云々パターンなんてものを
使う必要がなくなるんだよね。

TClassまんせー

でも、別に難しい概念ってわけでもないから、
初心者にも熟練者にも美味しいと思うぞ、delphiのOOP仕様は。



610 :デフォルトの名無しさん:2001/05/01(火) 14:20
>>603

delphiのOOPの中で初心者向きじゃない面って、どこ?



611 :turbo type D:2001/05/01(火) 18:33
JAVAを少しだけ使ってみましたが単なる関数や手続きが作れないから
staticメソッドばかり記述してたら
オブジェクト指向ってなんだろうかと思う。

JAVA風クラスメソッドを作ってみました。
意味無いけど。
type
 TInteger = class(TObject)
 public
  class function parseInt(Value: String): Integer;
 end;

class function TInteger.parseInt(Value: String): Integer;
begin
 Result := StrToInt(Value);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Button2.Caption := IntToStr( TInteger.parseInt('123456') );
end;
インスタンス化しなくてもいいというメリットはあるけれど
Delphiスタイルじゃないよね。

612 :デフォルトの名無しさん:2001/05/02(水) 01:03
>>607
そうでもないよ。>>611みたいにすれば幾らでも抜け道なんざあるから。
あとは見た目の問題。Classを単なる名前空間もどきとして使うっていうアレね。

>>611
というか、あんまりクラスメソッド(Java風)のサンプルになってないのでわ?
このネタで思い出すのはどちらかというとJavaのIntegerクラス
(生intのラッパーObject)かな。ガベコレのないdelphiでやるのは
ちょっと度胸いるけどね(^^;;;

ああ。それで思い出した。delphiでヤな点といえば、
名前空間とClassの区別が構文上つけにくいこと。
ん?これはJavaも同じか。
しかしdelphiにはJavaみたいな階層化名前空間(笑)もないので、
ちょっとそういう面は弱いとは思う。Javaの名前空間は凶悪だもんな…

613 :Dでなくてすまん:2001/05/02(水) 02:04
Javaは名前空間がディレクトリと強制ギプスでがっちり極められちまってるのがな。
初心者は必ずはまる。

614 :seven:2001/05/02(水) 07:11
>塚越氏の「Delphi オブジェクト指向プログラミング」
この本は、なぜかすいすいと読めました。kylix版での復活を望みます。

615 :デフォルトの名無しさん:2001/05/02(水) 10:17
>>614
かなり古い本だが同氏が書いた
「ゲーム&&オブジェクト指向プログラミング」もなかなかいい。
TurboPascal時代に書かれたものだがTC++とTPの両方で
ソースが書かれているので両言語の表現の差が理解出来る。

616 :デフォルトの名無しさん:2001/05/02(水) 10:23
Kylix相談室で書いたけどDelphi寄りの話題なんでこちらに、
http://www.clubepalm.com.br/PocketStudioEng.htm
http://www.pocket-technologies.com/products_examples.html

DelphiのIDEを利用してPalmOS用の画面をデザインしちゃうって製品らしい。
BorConでのお披露目もするらしい。

617 :デル坊:2001/05/02(水) 13:28
>616
う〜ん、これは面白いね!Palmware作りたいと思ってたけど、
今更コードウォーリアもなぁ〜、と思ってたんで楽しみ。
こんなことまでできちゃうんだね。パフォーマンスもいいみたい
だし、出たら速攻買います。

618 :デフォルトの名無しさん:2001/05/02(水) 13:57
PASCALについて:
みなさんこんにちは。私は今、趣味でVB,VCを使っています。
別にMS信者でもなく、プログラミングが好きなのです。

他にも色々(JAVA、Perl、C、シェルスクリプト)とか勉強し
ています。そこで気になっているのがPASCALなのですが、
工学部の友人と話していると、大学に入って最初に受ける
プログラミングの講義が、

電子・電気系の工学科:アセンブラ、C
情報系の工学科:PASCAL

という具合なんですが、これはどう解釈すればよいので
しょうか?電子・電気系がアセンブラってのは分かるの
ですが。また、情報系の学生しかPASCALの講義がない
らしいのですが、これも不思議です。

私自身、PASCALについて何もしらないし、他言語と比較して
述べることは出来ないのですが、PASCALを勉強すれば
他言語と違う何を得ることができるのでしょうか?

情報系だけに講義があるので、何か狙いがあると思うのですが。

よろしくお願い致します。

619 :デフォルトの名無しさん:2001/05/02(水) 15:57
>>618
電子・電気系はデバイス組込みが前提なのでC,アセンブラは
必然的でしょう。情報系はプログラムの基礎を学ばせる為に
PASCALが選択されていると思います。
アルゴリズムの学習が主でしょう。

趣味ですでにプログラミング経験があるなら楽勝でしょう。
ttp://www.google.com/search?hl=ja&safe=off&q=%8Du%8B%60+PASCAL+%8F%EE%95%F1%8DH%8Aw%89%C8&lr=

620 :デフォルトの名無しさん:2001/05/03(木) 06:32
c2pって無かったでしょうか?

以前、どこかで見た気がするのですが
いざ探すとなると見つからないものですね。

621 :>618:2001/05/03(木) 08:38
なんで情報系なのにSchemeやんないんだよ〜
C使えりゃPascalなんて応用で覚えられるのにい。
授業で使うPascalの言語的な仕様がどの程度の物なのかわからないけど、
素のパスカルじゃあんまり役に立たないよ?

622 :デフォルトの名無しさん:2001/05/03(木) 09:50
>>PASCAL
たぶんDelphiでもやるんだろ。

623 :デフォルトの名無しさん:2001/05/03(木) 12:01
Delphi(ObjectPascal)やってるとJava覚えるときに楽。
逆もまた然り。

なかまなかま。

624 :デフォルトの名無しさん:2001/05/03(木) 15:09
JavaやるとC#覚えるとき楽。
逆もまた然り。

なかまなかま・・・んなわきゃない。
>>620
p2cならあるけど・・・逆ってあんまりいらなさそうな
http://www.google.com/search?hl=ja&safe=off&q=p2c+PASCAL+translator&btnG=Google+%8C%9F%8D%F5&lr=

625 :624:2001/05/03(木) 15:11
逆だったスマン
http://www.google.com/search?hl=ja&safe=off&q=c2p+PASCAL+translator&btnG=Google+%8C%9F%8D%F5&lr=

626 :620:2001/05/03(木) 16:42
そっか、「translator」って入れるといいのか。
さんくす>624氏

627 :デフォルトの名無しさん:2001/05/03(木) 16:51
BorlandのNewsグループに変なキティーが現れているな。

こいつが教師(のようだ)というのもなんか泣ける。

628 :618:2001/05/03(木) 17:33
>621
私は経済学部なもので。友人が工学部です、すいません。

>アルゴリズムの学習が主でしょう。
>主でしょう。
んー、なるほど。そういうことですか。情報学科の新入生でも
プログラミング未経験者がいるそうですから納得できます。

余談ですが、世界プログラミングコンテストってありますよね(つい先日知った)。
1位は中国の清華大学だったようです。日本は東京工業大が5位だったか!?
詳細に覚えてませんが。これは言語に何を使用しているのかな?

先日NHKで清華大学のコンピュータ学科に入学した少女のことを言ってましたが、
いましたがコンピュータが好きで好きでたまらないのに貧乏でパソコンが買えず、
ダンボールでキーボードを作って遊んでたというか、勉強していたらしい。

おそらく出力は少女の脳ということだろう。中国は凄い奴がいるもんだなあ
と改めて感じました。

629 :デフォルトの名無しさん:2001/05/03(木) 18:15
中華少女が脳内プログラミング。
ハァハァ(´д`)

630 :turbo type D:2001/05/03(木) 20:25
>>629
ハァハァって。
想像力たくましいな。国語の成績がよくなりそうだ。

きっと単なるオタ少女だと思うよ........

631 :turbo type D:2001/05/03(木) 20:28
あ、P2CやC2Pの話題が出ているので
もし
D2BCBやBCB2Dの変換ソフト見つけたら
教えてください。

他力本願だけどね。

VB2DやD2VBってのも広い世の中
作っている人いても不思議じゃないよなあ。
ないですかね。

632 :デフォルトの名無しさん:2001/05/03(木) 20:33
変換するくらいだったら片方で書く。

633 :デフォルトの名無しさん:2001/05/03(木) 22:39
P2CとC2Pって可逆変換ですか?
そうだとしたら面白いな。
cat src | p2c | c2p | p2c ....

634 :デフォルトの名無しさん:2001/05/04(金) 02:54
>>628
言語は選べるっぽい。

635 :デフォルトの名無しさん:2001/05/04(金) 07:26
> cat src | p2c | c2p | p2c ....
ワラタ
イミネー(;´д`)

636 :>627:2001/05/04(金) 10:52
>>627
Delphi初心者がうれしくてしょうがないって感じが出てていいと思うけど。
たぶん、Delphiに感動してるんでしょ

おれもはじめは感動したもん

637 :デフォルトの名無しさん:2001/05/04(金) 19:04
クラスからクラスの定義されてるソースのパスを取得することはできる?

638 :デフォルトの名無しさん:2001/05/04(金) 19:12
なんであんなに色んな人から説得されているのに自分の考えに疑問を
持たないのかな。中村さんにNECの応対の悪さの話を言ったりとか、
個人で参加している達に失礼じゃないのか?

ところでかの人は「Closeメソッドで即アプリケーションは終了すべき」
という主旨の主張を繰り返しているけど、それ自体には問題ないの?
本当にその方が便利ならとっくにそういう仕様になってても良さそうな
もんなのにそうなっていないということは、都合があっての現在の仕様
だと思っているだけど。

639 :デフォルトの名無しさん:2001/05/04(金) 19:41
この人大学の教授なのか、講師なのか。。。

人に物を教える立場に居続けると
自分の意見が正しい意見だとしか
考えられないようになるのじゃないのかな?

>ところでかの人は「Closeメソッドで即アプリケーションは終了すべき」
>という主旨の主張を繰り返しているけど、それ自体には問題ないの?

だよなあ、ループが終了せずに突然終了されたら
それこそ困りそう。
回避方法があるのならそれで対処してもらうほうが
よっぽど理にかなってる。

まあ、アプリケーションの起動と終了処理は
素人が手を出せないほど面倒になってるとは
この人は知るよしもないだろうな。

興味ある学生にはこのやり取りを印刷して配ってやればいいの。

640 :デフォルトの名無しさん:2001/05/04(金) 20:16
>普通なら、ボーランドからの正式な回答が必要ならサポートへ、というところですが、
>この件について必要だというのであればお応えしましょう。
>「Close の動作は仕様です。」
>理由については、すでに多くの方が述べられているとおりです。
>大野

おおのさん、ユーモアのある人だねえ。(藁

だけど Y.Okamoto の典型的厨房脳には
通じるかどうか。
玄なんとかみたいな寒い反応されたら嫌すぎだ。

641 :デフォルトの名無しさん:2001/05/04(金) 21:39
Nさんまで怒らせるような
あまりにも自己中心的なひどい言動が続いたので
2chに呼び出してみました。(藁

くるかな Okamoto 君

642 :デフォルトの名無しさん:2001/05/04(金) 22:51
なんかML実況っぽくてアレですが、
Ohnoさんがトドメを刺そうとしている模様。

だけど、きっとY.Okamotoさんは勘違いしたままに違いない。
根本的にわからない、わかろうとしないと、あの文を読んだだけでは
納得いかないだろう。

643 :デフォルトの名無しさん:2001/05/04(金) 22:56
うんこはかわいそう・・・

644 :デフォルトの名無しさん:2001/05/04(金) 23:08
ニュースグループ実況中継
> 要望を書いていただくのは自由ですが、コメントされている方々は、
> 今回の要望がナンセンスなものだということを詳細な理由をつけて説明されています。
> (これは、非常に嬉しいことです。この場を借りてお礼申し上げます)

いやあ、オオノさま、とどめをさしてくださいまして
ありがとうございます。
この場を借りてお礼を___

見ていて気分がイィd(・∀・)

厨房はどうして自分が厨房だという事に気がつかないのだろう。
え?「オマエモナー」ですか?、すいません逝ってまいります。(藁

645 :デフォルトの名無しさん:2001/05/05(土) 01:02
でもNewsGroup自体投稿量少なかったので楽しめました。
MLも最近つまんなかったし。<こういう俺が一番くずだ。

646 :デフォルトの名無しさん:2001/05/05(土) 07:08
>>645
ヒッデェ(w

647 :デフォルトの名無しさん:2001/05/05(土) 15:47
しかし、こんな教師に教えられるとはたまったものではないな。
教師とはこうも傲慢な職業なのか。

自分の視野の狭さというものを感じることはないらしい。
やだやだ。

648 :デフォルトの名無しさん:2001/05/05(土) 16:49
>教師とはこうも傲慢な職業なのか。

水野朋子?

649 :デフォルトの名無しさん:2001/05/05(土) 21:40
岡本安晴のホームページ
http://homepage2.nifty.com/okamotoy/
http://web.kanazawa-u.ac.jp/~psy/Okamoto/y_okamoto.html

650 :デフォルトの名無しさん:2001/05/05(土) 21:44
>648
そういえばミヅノは英語教師でしたな。(藁

651 :デフォルトの名無しさん:2001/05/05(土) 22:10
ぐぇ。こいつ、Delphiの本まで書いてるのか。
そうするとある程度はDelphiに詳しいと思うが
なぜCloseの仕様変更が不可能だという事すらわからないのだ。

心理学を学んでるって
そうするとわざと怒らせて他の人間の行動を
分析したりしてるのか?

ヤナ奴だなあ。コイツの書籍持ってなくてよかったよ。

652 :デフォルトの名無しさん:2001/05/05(土) 22:26
>>651
Delphiに詳しいかもしれないけど、Windowsには詳しくなさそう。

実は後日「今までのは心理学の実験でした。お騒がせしました〜」
なんて投稿をするとか…。余計マズいか(w。

653 :デフォルトの名無しさん:2001/05/05(土) 22:36
偽名でやってくれたまえ。頼むから(藁
2chネラーのたちの悪さを存分に発揮しようぜ

654 :デフォルトの名無しさん:2001/05/06(日) 00:42
>2chネラーのたちの悪さを存分に発揮
なにするきだ?

655 :デフォルトの名無しさん:2001/05/06(日) 01:23
本当に同一人物か?

656 :デフォルトの名無しさん:2001/05/06(日) 07:00
Delphiの心理学本ってのが、前に立ち読みしたのと同じなら、あれは、DelphiというよりPascalって感じでした。
あんまりVCLを使ってないんですね。

657 :デフォルトの名無しさん:2001/05/06(日) 08:40
>>656
確かあの本しかそういう本はないので同じ本。

本書いている奴よりも、ネットの常連の方が
良識な人たちばかりでほっとした。

もっとも必要のないDelphi本著者として記憶しておこうっと。

658 :デフォルトの名無しさん:2001/05/07(月) 00:02
岡本氏の本はCQ出版からは何冊か出てるはず。

岡本氏の主張を通したいならGUIアプリじゃなくて
コンソールアプリで学生達に授業すればいいのになあ?

それともNewsGroup活性化の為に一芝居打ったのだろうか?
中村氏や大野氏を引きずり出すのには成功してるし。

659 :sage:2001/05/07(月) 03:28
>>655
同じメールアドレスだよ。

>>658
>それともNewsGroup活性化の為に一芝居
なんで彼がそんなことを?
だいたい,喧嘩が起きないと活性化しないコミュニティってなんだ?

660 :( ´∀`)さん:2001/05/07(月) 04:05
659
>だいたい,喧嘩が起きないと活性化しないコミュニティってなんだ?

2ちゃんねる

661 :デフォルトの名無しさん:2001/05/07(月) 06:49
否定できん(´д`;)

662 :デフォルトの名無しさん:2001/05/07(月) 16:20
これでいいのになあ。
procedure TForm1.Button1Click(Sender: TObject);
var n : integer;
begin
repeat
n := StrToInt(InputBox('Set an integer... n = 0 for Close',
'N =', '0'));
case n of
0 : ;
1 : ShowMessage('Case - 1');
else ShowMessage('Case - else');
end;
until n = 0;
Close;
end;

663 :デフォルトの名無しさん:2001/05/08(火) 19:25
Delphi6発表記念アゲ。
http://www.borland.com/about/press/2001/del6released.html

664 :デフォルトの名無しさん:2001/05/08(火) 19:35
お、とうとう出ましたか。

665 :turbo type D:2001/05/08(火) 19:37
反応早いですね。

666 :デフォルトの名無しさん:2001/05/09(水) 12:20
英語でよければこちらもどうぞ。やはり時代の趨勢はWebサービス
ですか。
http://www.drbob42.com/Delphi5/index.htm

667 :turbo type D:2001/05/09(水) 13:26
eWeekを英語がわからないなりに読んでいたのですが
http://www.excite.co.jp/world/url/body?wb_url=http%3A%2F%2Fwww.zdnet.com%2Feweek%2Fstories%2Fgeneral%2F0%2C11011%2C2712635%2C00.html&wb_lp=ENJA&wb_dis=3

読者の反応が怖いな,ある意味(藁

668 :turbo type D:2001/05/09(水) 14:19
で、なんでMLでは誰も発言しないの?D6のこと。

669 :厨房:2001/05/09(水) 15:37
>>668
日本のサイトしか見てないんじゃないの?

670 :デフォルトの名無しさん:2001/05/09(水) 17:41
今日はじめてMLに話題が出てきた。
やはり中村さん。

671 :turbo type D:2001/05/09(水) 17:53
DataSnapというのがメインなのかな。>>D6

672 :デフォルトの名無しさん:2001/05/09(水) 18:19
BCBのコードガードはつかないのかなぁ

673 :デフォルトの名無しさん:2001/05/10(木) 02:27
BCB5を使ってて、最近Delphi5も使い始めましたが、
てっきりCodeGuardがあるもんだと思っていましたので
驚きました。結構便利に使っていたので残念でもあります。
Delphi6には無いんでしょうか。

674 :672:2001/05/10(木) 05:07
コードガードつかないかなぁと言っておいてなんですが、
実際CodeGuardの使い勝手はどんなもんなんですか?

675 :デフォルトの名無しさん:2001/05/10(木) 09:39
Delphi6についてストリーミング配信が多数コミュニティ
のページに上がっております。ヒアリング出来る人どうぞ。
http://community.borland.com/

676 :turbo type D:2001/05/10(木) 09:53
>>674
同意。教えてくださいな。
MemCheckと同じような感じなのかな。

677 :turbo type D:2001/05/10(木) 10:54
質問。

ある数値が素数かどうかを高速に求めるのはどうしたらよいでしょうか?

678 :デフォルトの名無しさん:2001/05/10(木) 11:17
Helpからの転載。適度に改行を入れてます。

CodeGuard は,C++Builder で開発されたアプリケーション用の
ランタイムデバッグ機能を提供します。CodeGuard は,構文規則に
違反していないためにコンパイラに報告されないエラーを報告します。
CodeGuard は,ボーランドのラインタイムライブラリに加えて,
多くの Windows API 関数も追跡し,マルチスレッドアプリケーションを
完全にサポートしています。

CodeGuard には,次に示す 2 つの概念があります。

メモリとリソースの使用
CodeGuard が検査するのは,誤ったメモリの使用法,
不適切なメモリの割り当てまたは解放,無効なファイルストリームまたは
ハンドル,およびファイルストリームやハンドルの不適切な使用によって生じる
リソースリークなどです。CodeGuard は逆参照時にポインタを検査して,
ポインタの演算内容を確認します。メモリやリソースが解放される場合に,
ユーザーのプログラムがその解放されたメモリ領域やリソースにアクセス
しようとすると,CodeGuard はエラーを報告します。

関数の使用方法についての正当性
CodeGuard は関数の引数を調べ,関数の
戻り値によってエラーを報告します。また,関数呼び出しで使われている Windows リソースハンドルの
有効性を検査します。

CodeGuard の有効化と設定

CodeGuard は,静的なライブラリ(CG32.LIB)またはダイナミックリンク
ライブラリ(CG32.DLL)を使用します。これらのライブラリには,関数の引数と
戻り値を検査するラッパー関数が含まれています。CodeGuard は,
CodeGuard コンパイラオプションを有効にしてコンパイルした実行形式
ファイルのエラーだけを検出できます。

追加のランタイムオプションを設定するには,CodeGuard 環境設定
ユーティリティを使います。環境設定ユーティリティのマニュアルを
参照すれば,CodeGuard のエラーログの内容や,CodeGuard を効果的に
使う方法について理解することができます。

679 :>677:2001/05/10(木) 12:50
使用目的がわからないのでなんともいえないけど
値域が十分狭くて、何度も判定するなら
素数リストを生成して検索すればいいんじゃない。

680 :turbo type D:2001/05/10(木) 15:11
>>679
ピタゴラスの三角形という数学ロジックを見るプログラムを
作っているので値域が十分に広いので
素数リストの方法は
ちょっと厳しいですわ。

まあ、パフォーマンスにシビアな
ソフトではないので、
泥臭く計算する事にします。

サンクスコね。

681 :デフォルトの名無しさん:2001/05/10(木) 16:15
> 680
”エラトステネスのふるい”を、ある数の平方根まで行うのは?
100までなら、100の平方根の10までの素数(2,3,5,7)に対して
ふるいをかける。あとは再帰。

682 :turbo type D:2001/05/10(木) 17:30
じぇーんじぇんわからません。(゚∀゚)ゴ...ゴルァ

683 :turbo type D:2001/05/10(木) 17:31
”エラトステネスのふるい”
なんかつおそうだ、
アルテミスの首飾りくらい強いのですか?(w

684 :681:2001/05/10(木) 17:43
Excel VBA のソースなら、
http://arch.arch.kumamoto-u.ac.jp/hagane/yamanari/joho2/kougi3.html
自分で検索くらいしてくださいよ・・・。
有名なアルゴリズムです。

685 :672:2001/05/10(木) 18:16
>>678
アリガトゥヽ( ´ー`)ノ
これはつけてもらわねば

686 :デフォルトの名無しさん:2001/05/10(木) 18:47
Delphi6のニュースリリースの日本語訳出ました。
http://www.borland.co.jp/whatsnew/

687 :turbo type D:2001/05/10(木) 19:35
あってるかな?
2/3/5/7/11/13/17/19/23/29/31/37/41/43/47/53/59/61/67/71/73/79/83/89/97/101/
103/107/109/113/127/131/137/139/149/151/157/163/167/173/179/181/191/193/197
/199/211/223/227/229/233/239/241/251/257/263/269/271/277/281/283/293/307/
311/313/317/331/337/347/349/353/359/367/373/379/383/389/397/401/409/419/421
/431/433/439/443/449/457/461/463/467/479/487/491/499/503/509/521/523/541/
547/557/563/569/571/577/587/593/599/601/607/613/617/619/631/641/643/647/653
/659/661/673/677/683/691/701/709/719/727/733/739/743/751/757/761/769/773/
787/797/809/811/821/823/827/829/839/853/857/859/863/877/881/883/887/907/911
/919/929/937/941/947/953/967/971/977/983/991/997/

688 :turbo type D:2001/05/10(木) 19:36
//-------------------------------
//素数リスト
procedure TForm1.SosuuList(Value: Integer);
var
 SqrNum: Extended;
 Limit, i, j: Integer;
 SosuuList: array of Boolean;
begin
 SqrNum := Sqrt(Value);
 Limit := Trunc(Int(SqrNum));

 if Value <= 1 then Exit;

 SetLength(SosuuList, Value+1); //0..Limitまでの配列を用意

 SosuuList[0] := False;
 SosuuList[1] := False;
 for i := 2 to Value do
 begin
  SosuuList[i] := True;
 end;

 for i := 2 to Limit do
 begin
  if SosuuList[i]=True then
  begin
   for j := 2*i to Value do
   begin
    if (j mod i) = 0 then
     SosuuList[j] := False;
   end; //for j
  end; //if SosuuList
 end; //for i

 for i := 2 to Value do
 begin
  if SosuuList[i] = True then
  begin
   Form1.Memo1.Lines.Add(IntToStr(i));
  end;
 end; //for i
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SosuuList(1000)
end;

689 :turbo type D:2001/05/10(木) 19:54
アリガトね>>684
素数って計算するというよりかわ、
データとして保持しておけばいいものなのね。
考えてみたらあたりまえか。

690 :デフォルトの名無しさん:2001/05/10(木) 20:01
>>686
はじめて気が付いた。
なんじゃこりゃ。(藁
http://www.borland.co.jp/about/column/

691 :デフォルトの名無しさん:2001/05/10(木) 22:18
>>690
http://www.borland.co.jp/whatsnew/
十日付の最新情報にあるよ。って今日じゃん。
せめてトップページにリンク書かないと
誰も知らないままなんじゃ…。

692 :デフォルトの名無しさん:2001/05/15(火) 02:17
Delphi版仕様書工房みたいのありませんか、しかもフリーのもので。

693 :デフォルトの名無しさん:2001/05/15(火) 10:30
Delphi4を使っていたが今朝Delphi5の最終バージョンアップ
案内が届いてD5にバージョンアップするとD6が無償!
一気に2バージョン揃えるチャ〜ンス(^ー^)
やってくれるぜBorland。

694 :デフォルトの名無しさん:2001/05/15(火) 12:31
なんか最近、Borland調子よさげですな。
売上あがってるのかなあ

695 :デフォルトの名無しさん:2001/05/15(火) 21:36
D6記念あげ

あと、ここも。
プログラマーの「VB離れ」が進む?
http://www.zdnet.co.jp/news/0105/15/e_vb.html

>なお,Evans DataはDelphiを独立した言語として認めていないため,同言語に関するデータは集めていない
こんな時代遅れの調査会社の
データが信頼に足るものなのかは疑問だが。

696 :デフォルトの名無しさん:2001/05/15(火) 22:04
日経LinuxのKylixの広告も結構インパクトあるな〜

697 :デフォルトの名無しさん:2001/05/16(水) 02:54
>>693-694
D5が余っている。
すぐにお金が必要。
だと思うが。

698 :デフォルトの名無しさん:2001/05/18(金) 09:51
>>692
これなんかどよ?
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=16140

699 :デフォルトの名無しさん:2001/05/18(金) 09:59
ユニットリポータは非営利については無料だよ。
http://www2.big.or.jp/~osamu/Delphi/MyLibrary.htm

700 :デフォルトの名無しさん:2001/05/18(金) 10:09
ModelMaker萌〜。どっかローカライズしてくれんかのう。
http://www.modelmaker.demon.nl/

701 :デフォルトの名無しさん:2001/05/18(金) 13:34
右クリックした時に何らかの処理をさせたい(例えばclose;)
のですが、どのように記述したら宜しいのでしょうか?
tipsサイト片っ端から探してみたのですが、何故かありませんでした。
Del職人の方のご教授をお願い致します。

702 :デフォルトの名無しさん:2001/05/18(金) 13:48
>>701
マニュアル読もうやsage

703 :>701:2001/05/18(金) 14:00
TForm.Popup, TPopupMenu

704 :turbo type D:2001/05/18(金) 14:59
マウスダウンイベントでミギをみる。かな。

705 :デフォルトの名無しさん:2001/05/18(金) 15:28
また誰かプログラマ板で煽ってる奴がいる。
MLの転載だめ。

706 :デフォルトの名無しさん:2001/05/19(土) 06:05
他のアプリケーションで保持されている文字列を
取得するには、どうしたらいいでしょうか?

FindWindow 指定アプリを取得
GetWindowThreadProcessId プロセスID取得
OpenProcess プロセス開いて
ReadProcessMemory メモリから読みこんで
closeHandle 閉じる・・・

読みこむ対象が数値であれば、出来ているのですが、
文字列になると動作しなくなります。
お願いします。

707 :デフォルトの名無しさん:2001/05/19(土) 08:43
>>706
文字列って String 使ってる?
PChar 使ったらいけるんじゃないかな

708 :706:2001/05/19(土) 14:43
はい、PChar使っております。

709 :デフォルトの名無しさん:2001/05/19(土) 16:52
ぴーちゃー?

710 :デフォルトの名無しさん:2001/05/19(土) 17:26
ピーシーハア

711 :デフォルトの名無しさん:2001/05/19(土) 17:41
他プロセスの情報を読むってOSによって方法違うんだよね。
デスクトップアイコンの位置を保存するときにハマったよ(^^;

NT系だと
GetWindowThreadProcessID
OpenProcess
VirtualAllocEx
// ここで文字列の取得とかいろいろ
ReadProcessMemory
VirtualFreeEx
CloseHandle

って流れでアイコンの位置・文字列を取ったことがある。
VirtualAllocEx/FreeEx してるとこだけ 706 のと違うな。
このへん試してみたらどう? > 706

712 :デフォルトの名無しさん:2001/05/19(土) 17:48
>>711
そのネタしってる人は数人に絞られてるなあ
と感じる俺もマニアックかねえ(w

デスクトップアイコン位置保存のテクを知りたいといわれて
突然見知らぬ中国人から英語メールが山ほど来た時は
少々辟易した。

713 :706:2001/05/19(土) 18:34
>>711
やってみます。どうも

>>712
ネット検索しても1個とかして出てこないぐらいコアですね(ww

714 :デフォルトの名無しさん:2001/05/19(土) 19:04
>712
俺はフックで強引にやったけどな

715 :デフォルトの名無しさん:2001/05/19(土) 19:07
オレもフックでやりました。ていうか、フックが普通かと思ってました。
そういうことで、711はやはりマニアックかと。

716 : :2001/05/19(土) 20:31
>>710
ぴーきゃら?

717 :デフォルトの名無しさん:2001/05/19(土) 20:38
ぽいんた おぷ きゃらくたー

718 :717:2001/05/19(土) 20:38
>おぶ
おぷ

719 :717:2001/05/19(土) 20:39
(´д`;)

720 :デフォルトの名無しさん:2001/05/19(土) 20:48
おんぷたん(´д`;)

721 :デフォルトの名無しさん:2001/05/19(土) 20:59
ぼいんたん萌え(´д`;)

722 :717:2001/05/19(土) 21:12
ごめん もうそのへんで ゆるして(´д`;)

723 :デフォルトの名無しさん:2001/05/19(土) 23:02
DelphiとVisual SourceSafeの
組み合わせで開発している人いますか?

今ちょっと試しているんですが
・DelphiのIDEとVSS両方起動
・フォームは*.dfm, *.pas両方をペアで管理
・ファイルをチェックアウトしたらIDEのファイルを
 一度閉じてから再度開く(リードオンリー属性を解除するため)
といった点が面倒ですね。

なんか良い方法があったら教えてください

724 :デフォルトの名無しさん:2001/05/20(日) 13:47
興味あるのでage

725 :706:2001/05/21(月) 16:09
えーできました(w
Pcharの初期化が肝でした。
Buffer : Pchar;
Buffer := StrAlloc(256);
ですです。
ありがとうございました。

726 :706:2001/05/22(火) 02:46
とりあえず、NT系の関数を使用しても
98SEでは、問題ないようです。

727 :デフォルトの名無しさん:2001/05/22(火) 20:45
DelphiのNuts Shell本の翻訳がやっと出る〜age
http://www.oreilly.co.jp/

728 :デフォルトの名無しさん:2001/05/23(水) 09:57
このケダモノはいったいなんだ?
http://www.oreilly.co.jp/reserve/delphi_s.gif

729 :デフォルトの名無しさん:2001/05/23(水) 10:12
>>728
山猫

730 :デフォルトの名無しさん:2001/05/23(水) 10:41
>>728
おお、実写版ギコが。

731 :デフォルトの名無しさん:2001/05/23(水) 12:16
>>730
止めてくれよう。表紙見るたびに想像するじゃないか。(藁

732 :デフォルトの名無しさん:2001/05/23(水) 12:51


733 :デフォルトの名無しさん:2001/05/25(金) 17:45
一応・・・ね

734 :デフォルトの名無しさん:2001/05/31(木) 00:42
でるふぁい

735 :デフォルトの名無しさん:2001/05/31(木) 03:38

                     |\
┌──────────┘- \
│                    \
|   気のふれた方が        >
│                     /
└──────────┐- /
      ヽ(´ー`).ノ       |/
        (  へ)
        く
                  - = ≡三                    |\
               - = ≡三  ┌──────────┘- \
               _ = ≡三    │                   \
            ―  =三三    |    います              >
                ̄ = ≡三    │                    /
               - = ≡三  └──────────┐- /
        (´ー`)        - = ≡三                     |/
      ( ヽ ヽ)
       /  >

736 :デフォルトの名無しさん:2001/05/31(木) 04:07

自覚しろよ

737 :seven:2001/05/31(木) 05:35
>>728
爆笑、Delphiは、ギコ猫だったのか。

738 :デフォルトの名無しさん:2001/05/31(木) 05:52
gikonekonanoka-...(wara

739 :デフォルトの名無しさん:2001/05/31(木) 10:08
あれはカナダヤマネコというのだそうだ。
UMLクイックリファレンスと並べてみるとギコとモナみたいだぞ。
http://www.ohmsha.co.jp/data/books/contents/4-900900-90-7.htm

740 :デフォルトの名無しさん:2001/05/31(木) 14:13
delphi用のjavadocみたいなのってないですか?
フリーのやつで。

741 :デフォルトの名無しさん:2001/05/31(木) 14:55
>>740
コミュニティサイトのCode CentralでDelphiDocというのを
見かけた。まだ結構粗い。

あとPascal CentralにPasDocってのがある。
http://www.pascal-central.com/tools.html

742 :デフォルトの名無しさん:2001/06/02(土) 21:13
株式会社 エス・エー・エス ジャパン
のバカ、うぜえ。
http://www.sasjapan.com/index.html

743 :デフォルトの名無しさん:2001/06/03(日) 13:31
Delphiにて、Pythonインターフェィスの組み込み方ってどうやる?
Iriaとかやってるよね?

744 :デフォルトの名無しさん:2001/06/05(火) 01:12
あー、IriaさんPythonやめるっぽいね。
なんか組み込み用のスクリプトでいいのないかなー。
ライセンス周りが緩やかなヤツで。フリーで商用OKとかのね。
自作するしかないのか?

745 :デフォルトの名無しさん:2001/06/05(火) 01:23
時期Iriaに組み込む予定で公開されているアレは駄目なのかい?

746 :デフォルトの名無しさん:2001/06/05(火) 06:40
DMonkeyっすかー。ってソース公開されてるしー。すげ。

747 :デフォルトの名無しさん:2001/06/05(火) 15:29
この機会に、↓スレでも読んでがんばってみるかなー

【コンパイラ・スクリプトエンジン】相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981672957

748 :デフォルトの名無しさん:2001/06/05(火) 17:19
>>747
が・ん・ば・れ

749 :名無しさん:2001/06/06(水) 21:28
DelphiXって、なんでリファレンス以外に実ソース解析しか理解する方法ないの?
どっかにマシなチュートリアルないのかぇ
本買ったが、添付Helpとサンプル印刷しただけじゃん。鬱。

750 :デフォルトの名無しさん:2001/06/07(木) 01:12
よくしらんが、ダイレクトセックス8が出た時点で
だめなんじゃないのか?>>749

751 :デフォルトの名無しさん:2001/06/07(木) 06:24
学習に一番いいのがサンプルソースっていう考えなんじゃあないかな。

752 :デフォルトの名無しさん:2001/06/07(木) 12:10
なんかスレ趣旨と違うみたいですが、新スレたてるほどでもないと思うんで
ここに書かせてもらいます。

Delphi始めたばっかのビギナーです。ビギナーなので慣れるまであれやこれ
やと教えていただきたいことが出ると思います。そういう質問を受け付けて
いる、活発な掲示板のあるサイトご存知でしたらご紹介頂けないでしょうか。
Delphiはじめるなら、まずはここに行けという定番サイトというか。

VBでいえば
http://www2j.biglobe.ne.jp/~little-g/vbtomo.html
ここみたいなところがあれば嬉しいです。よろしくお願いします。

753 :turbo type D:2001/06/07(木) 12:22
Delphi広場とAboutDelphi(DelphiMLの過去ログ検索)は押さえておいてください。
URLは検索してちょ。

754 :デフォルトの名無しさん:2001/06/07(木) 13:24
onIdle とか使うとCPU使用率100%になるね・・・
winampとか、1%なのに・・・
なじょ・・・

755 :turbo type D:2001/06/07(木) 14:17
シュレッド?ナジョ

756 :デフォルトの名無しさん:2001/06/07(木) 15:59
>>752
オレおせっかいやきだからURLだしといてやるよ。

AboutDelphi(DelphiML)
http://www2.big.or.jp/~osamu/Delphi/

Delphi広場
http://www.sakaki.keiaikai.or.jp/

Delphiマンセー

757 :デフォルトの名無しさん:2001/06/07(木) 16:00
次スレたてるときは、1に書いといたほうがいいなこのアドレス

758 :752:2001/06/07(木) 16:24
>>753
>>756
しばらくその2つのサイトに通いつめることにします。
どうもありがとうございました(__)

759 :turbo type D:2001/06/07(木) 16:38
じゃ、そっちで会いましょう(藁

760 :名無しさん:2001/06/07(木) 16:43
Delphi6を待ちきれずにDelphi5を買ったじょ。
楽しいなぁ。楽しいなぁ。
ATLでCOM作っていたときの苦しみがうそのようだ。

761 :デフォルトの名無しさん:2001/06/07(木) 16:51
シュレッドつかっても100なの・・・
なじょ・・・

762 :デフォルトの名無しさん:2001/06/07(木) 18:51
>シュレッド
シュリープしてなからかな?

763 :turbo type D:2001/06/08(金) 00:14
BorlandのnewsGで、UMLツールくっつけろ
って意見が出てますね。

大賛成。

例のエクストリームプログラミングの
ユニット試してみたいな。
なんか乗り遅れちゃった感じ。

764 :デフォルトの名無しさん:2001/06/08(金) 01:59
>>754
Sleep(100);

765 :デフォルトの名無しさん:2001/06/08(金) 10:09
Delphiのプログラムからプロセスを起動して
そのプロセスと標準入出力でやりとりする
サンプルかコンポーネントってないですか?

766 :デフォルトの名無しさん:2001/06/08(金) 10:56
シュリープしたらへったよ!ありがとぉ!
でもね、75fpsぐらいだしてCPU使用率が3%なwinampってなんでしゅか?
でるFight!!じゃーむりのかなぁ。

767 :デフォルトの名無しさん:2001/06/08(金) 10:59
だいれくとせっくすを使ってるのが、だめだったかなー
ぶひーん

768 :デフォルトの名無しさん:2001/06/08(金) 12:11
>>766
Soniqueなんかだと、CPUバリバリ食ってるけど
winampの起動時に別のプロセスの使用率が高くなってないか見てみよう。

769 :デフォルトの名無しさん:2001/06/08(金) 12:13
>でるFight!!じゃーむりのかなぁ。
こんなこと言ってると他の環境でもきっとできないぞ。がんばれ。

770 :デフォルトの名無しさん:2001/06/08(金) 13:43
procedure TForm1.FormCreate(Sender: TObject);
begin
beep;
beep;
beep;
end;
おとが3回なるよ!3回なるソフトちゅくったにょんー

771 :デフォルトの名無しさん:2001/06/08(金) 17:53
ほう。

772 :デフォルトの名無しさん:2001/06/09(土) 20:47
Canvas.TextOut で表示される文字を、アンチエイリアス処理したいのですが
どうすればいいでしょうか?

773 :デフォルトの名無しさん:2001/06/09(土) 21:35
念じる!

774 :772:2001/06/10(日) 00:07
>>773
早速のご返事ありがとうございました。
今晩、徹夜で念じてみます。

775 :デフォルトの名無しさん:2001/06/10(日) 01:36
>>774
早く寝なさいね。

776 :デフォルトの名無しさん:2001/06/10(日) 14:51
>>772
ほい。
ページの移転先に記事がないのでgoogleのキャッシュだけど
http://www.google.com/search?q=cache:gnUmbZHx8Zo:buin2gou.hoops.ne.jp/Delphi.html+Delphi+Canvas.TextOut+%83A%83%93%83%60%83G%83C%83%8A%83A%83X&hl=ja&lr=lang_ja

777 :デフォルトの名無しさん:2001/06/10(日) 14:53
あと、ここと
http://hp.vector.co.jp/authors/VA012950/AA/

776の移転先のページにあるライブラリのソースが参考になる。
http://members.jcom.home.ne.jp/buin2gou/DelphiTABM.htm

778 :デフォルトの名無しさん:2001/06/10(日) 22:52
age

779 :デフォルトの名無しさん:2001/06/11(月) 13:16
Delphi5のExcelChartコンポーネントのサンプルがあるURL
または使い方を解説してる書籍ってないですか?

780 :seven:2001/06/12(火) 03:06
>>779
市販品では、だめですか?

エクセルクリエーター
http://www.adv.co.jp/products/Excelcrt/default.htm

781 :横レス:2001/06/12(火) 10:32
>Delphi5のExcelChartコンポーネントのサンプルがあるURL
>または使い方を解説してる書籍ってないですか?

無い。C++Builder5から使ったときは辛かった。Webで解説したり書籍出したら売れるかも。

>市販品では、だめですか?エクセルクリエーター

だめ。高速コンポーネントとして配布されているのに、市販ライブラリを通すと遅くなる。

782 :デフォルトの名無しさん:2001/06/12(火) 19:30
age

783 :デフォルトの名無しさん:2001/06/12(火) 23:23
Delphi使い始めて一年足らずの厨房ですが、宜しくお願いします。
ageてもよい物なのかわかりませんので、sageさせていただきます。

Delphiって、マルチステートメントてっと出来ないモンでしょうか?
たとえば、ButtonClickイベントでユーザの入力を判定して、
入力が変な場合メッセージを表示してExit;したい場合、

if 〜 then
begin
 messagebox(Handle, '入力変ですよん', nil, MB_ICONERROR);
 exit;
end;

ってしなきゃいけないじゃないですか。
それを

if 〜 then messagebox(〜) : exit;

って書きたいんです。
もしくは、

if 〜 then
 messagebox(〜): exit;

とか。

784 :デフォルトの名無しさん:2001/06/12(火) 23:51
>>783
if 〜 then Begin MessageBox(〜); Exit End;
っていうかマルチステートメントなんて悪い習慣
早く忘れなさい。

785 :デフォルトの名無しさん:2001/06/13(水) 00:33
>>783
そんなもんまとめてraiseしたれ。

try
 if チェック1 then
  raise Exception.Create('エラー1');
 if チェック2 then
  raise Exception.Create('エラー2');
Except
On E: Exception do begin
MessageDlg(E.Message, mtError, [mbOk], 0);
  Exit;
 end;
end;

786 :デフォルトの名無しさん:2001/06/13(水) 01:09
>>783です。レスありがとうございます。
>>784殿
あ、あれって悪い習慣だったんですか(^^;
簡潔になるから結構好きだったりするんですが。

しかし、やはりそうするか方法はないみたいですね。

>>785殿
なるほど、そういう手もありますね。
しかし、Except節で

On E: Exception do begin
 MessageDlg(E.Message, mtError, [mbOk], 0);
 Exit;
end;

二つのステートメントを begin..end; で囲っているあたり、
業が深いですな(^^;

787 :デフォルトの名無しさん:2001/06/13(水) 01:42
ていうか、マルチステートメントなんていう
糞みたいな概念、忘れなさい。
#ありゃBasicだったか?

pascal(やC)の「文」の概念を一度きちんと覚えるよろし。
強く推奨。くれぐれもきちんとだぞ。半端だと逆効果だ。

788 :デフォルトの名無しさん:2001/06/13(水) 01:54
>>783です。

>>787
ご教授ありがとうございす。
検索してみたんですが、いまいち、マルチステートメントの悪と、
Pascal、C の「文」の概念を解説したサイトが見つけられないのですが…
もしご存知でしたら、ご教授下さい。

マルチステートメントは、HSPやVBをメインにしていた頃に使用していました。

789 :デフォルトの名無しさん:2001/06/13(水) 06:44
>マルチステートメント
久々に効いたよこの言葉。懐かしい。
昔Basic覚えたてのころ使ってた覚えが。

790 :デフォルトの名無しさん:2001/06/13(水) 10:42
BASICなどは基本的に1行=1ステートメントだから
複数のステートメントを記述する為マルチステートメント
なるものが考案された。
しかし、ソースがごちゃごちゃして論理の流れが掴みにくく
なるし、しかもラベルの終端もコロンなもんだから
ステートメントをラベルと誤認するなどあまりいい事が
ない。メモリーが少なかった頃の遺物と考えていい。

791 :デフォルトの名無しさん:2001/06/13(水) 10:54
わたしもがんばあて、かんがえてみたよ!みてね!
procedure errDayo;
begin
 messagebox(〜);
 exit;
end;

begin
 if 〜 then errDayo;

これでどお?('-`)?

792 :turbo type D:2001/06/13(水) 10:57
マルチステートメントなんて聞いたことも無かった。
N88BASICはやったんだけどなあ。

793 :デフォルトの名無しさん:2001/06/13(水) 12:00
>>791
それ、Exit意味ないYO。

794 :デフォルトの名無しさん:2001/06/13(水) 12:08
Cだと、
if (〜 ) messagebox(〜), exit;
ってのが出来た気がするが、DelphiのPascalはできなかった気が・・・。

そういや、みなさんブロックの終わりの行の最後のセミコロン付けてる?省いてる?

begin
 hogehoge;
 exit
end

こんなかんじに。

795 :デフォルトの名無しさん:2001/06/13(水) 12:21
>>791
しかもメッセージ固定だし〜。こうすれば?

type
 EMyError = class(Exception);

procedure ErrorPitcher(const msg: String);
begin
 raise EMyError.Create(msg);
end;

procedure ErrorCatcher(E: Exception);
begin
 MessageDlg(E.Message, mtError, [mbOk], 0);
end;

begin
 try
  if 条件1 then ErrorPitcher('エラー1');
  if 条件2 then ErrorPitcher('エラー2');
  if 条件3 then ErrorPitcher('エラー3');
 except
  on E: EMyErrorException do ErrorCatcher(E);
 end;
end;

796 :795:2001/06/13(水) 12:24
スマン、
× on E: EMyErrorException do ErrorCatcher(E);
○ on E: EMyError do ErrorCatcher(E);

797 :791:2001/06/13(水) 12:31
>>791
ぎゃふん!まちがえちゃった!
exit;をhalt;にしてね!

798 :デフォルトの名無しさん:2001/06/13(水) 12:51
>>797
プログラム止めてどうするよ!

799 :791:2001/06/13(水) 13:25
あぼ〜んするのだ〜

800 :ぼぼ〜ん:2001/06/13(水) 13:59
ぼぼ〜ん

801 :デフォルトの名無しさん:2001/06/13(水) 14:55
VCLってDelphi?

802 :デフォルトの名無しさん:2001/06/13(水) 16:35
>>788
delphiの文法のヘルプは如何?

>>794
ピリオド演算子な。棄却演算子とかいうんだっけか?
2項演算子で「演算子の左の式の値を単純に捨て、右の式の値を返す」
という「演算子」だ、たしか。
演算子だから「式」の中には好きに書けるわけだ。

for (s=1, t=2; hoge(s,t); s++, t++){}
なんて書いた場合も、

s=1, t=2
および
s++, t++
という「2つの」式が有ると見なされるわけ。

なんでもかんでも演算子ってところがいかにもC的。
よしあしはさておき、pascalとは随分雰囲気が違うわな。

803 :デフォルトの名無しさん:2001/06/13(水) 18:10
つまらんツッコミで申し訳ないがカンマ演算子です…
使えてもプログラムがわかりにくくなるから滅多に使わないけど。

804 :デフォルトの名無しさん:2001/06/13(水) 22:45
>>783=>>788です。
ご教授ありがとうございます。

>>789
最初はHSP、次にVBとやっておりました。
ですので、マルチステートメントがあるのを当然かと
思っておりました。

>>790
>メモリーが少なかった頃の遺物と考えていい。
なるほど。ご教授ありがとうございます。

>>791
errDayo 中で Exit を使用しても errDayo を抜けるだけで、
意味無いように感じます。
と思ったら>>793氏でがいしゅつでした。(^^;

>>792
申しわけありません、N88BASICは名前を聞いただけで、
実際に触った経験はないので何とも…

>>794
自分は付けています。
省略したあと、その近辺を変更するとコンパイルエラー
の温床になってしまうので非常に煩わしいので。

>>795-796
なるほど。また一つ勉強させていただきました。

>>798-800
大変失礼で不躾な質問ですが、漫才でしょうか?

>>802
なるほど、Delphiヘルプですか。
見落としていました。まさに灯台もと暗しです。
一度じっくり読んでみようと思います。

>>803
「申し訳ない」というような書き込みとは思いません。
些細なこととはいえ、そのまま間違った知識を
広めるよりはよいと思います。

偉そうで申しわけありません。

805 :まゆちゃん:2001/06/14(木) 03:24
でるぽいってむずかしいよね!
がんばおー!

proceudre TForm1.Creare(Sender : TObject);
var
 i : integer;
begin
 for i := 1 to 10 do
 begin
  beep;
  sleep(500); //おぼえたよ!すりーぷ!おしえてもらったよ!
 end;
end;

音が10かい、休みながらなるよ!

806 :デフォルトの名無しさん:2001/06/14(木) 09:35
>>805
なんじゃこれ?

807 :デフォルトの名無しさん:2001/06/14(木) 10:30
proceudre TForm1.Creare(Sender : TObject);
var i : integer;
begin
 for i := 1 to 10 do
 begin
  beep;
  sleep(i*100);
 end;
end;

やはりこのくらいやらないと i が可哀相。

808 :名無しさん:2001/06/14(木) 12:09
>>805>>807
お前らFortranスレ逝け

809 :デフォルトの名無しさん:2001/06/14(木) 15:52
Delphiはもう終わっているときいたのですが本当でしょうか?
もうバージョンアップもしないそうなんですが...

810 :デフォルトの名無しさん:2001/06/14(木) 15:59
TNoteBook のページに動的に TEdit とかを作るのって
どうやったら良いんですかね?
いろいろ試してるんだけど良くわからんです。

811 :デフォルトの名無しさん:2001/06/14(木) 16:33
>>809
ここぞとばかりに煽りですか?

812 :デフォルトの名無しさん:2001/06/14(木) 17:16
>>811
そういうのは無視しようYO!

813 :デフォルトの名無しさん:2001/06/14(木) 18:37
DelphiXPなんて出たらヤだね。

814 :デフォルトの名無しさん:2001/06/14(木) 18:51
>>813
激しく同意。

815 : :2001/06/14(木) 20:21
終わってるのはVBの方だと思うが、、、

816 :デフォルトの名無しさん:2001/06/14(木) 20:45
>>815
言うなって。荒れるから。

817 :デフォルトの名無しさん:2001/06/14(木) 21:36
マターリ逝きましょう、マターリ。

818 :まゆちゃん:2001/06/15(金) 00:48
またあり!またあり!
なんでも出来ることは、いいことだ!
あいであとこんじょーさ!

819 :デフォルトの名無しさん:2001/06/15(金) 08:26
ソースの場所を記憶するのに「しおり」ってありますよね?
デフォルトだとCtrl+Shift+[数字]でマークして、Ctrl+[数字]でジャンプやつです。

これ、Delphi閉じちゃうと消えてしまうけれど
そうならないような、かわりになるものってあります?
もしくは、みなさんソースのマーク付けにどんな工夫しておられます?

820 :デフォルトの名無しさん:2001/06/15(金) 08:26
ageます

821 :デフォルトの名無しさん:2001/06/15(金) 09:16
まだD厨房のレベルですが。
>>819
コメントをある程度目立つように書く、
これくらいかな?

あとはブレークポイントを仕掛けっぱなしにしておくとか…

速度を考慮しなくていい場所なら、

if GetTickCount = 0 then
 Application.ProcessMessage;

とでも書いて、ProcessMessages; に仕掛ける。
でもやっぱコメントかな?

822 :819:2001/06/15(金) 09:38
しおりの代わりに、

・おしげなくTODO機能を使うとか、
(エディタにTODOリストをドッキングさせておいていつでも参照可能なようにしておく)
・無効状態にしたのブレークポイントを設置するとか、
(同様に、ブレークポイントリストをエディタにドッキングさせておく)

とか考えていたんですが、しおりと違ってショートカットで移動できないので
いかんせん常用できないんですよね(´д`;)
Delphiお得意の環境拡張でなんとかならないかなーと思っていたり。

823 :740:2001/06/15(金) 09:55
えーと、JavaDocみたいのないかなーといっていた者ですが、
こんなの発見しました。

『PASCAL仕様書作成』
指定されたディレクトリ以下にある *.pas ファイルを解析して、
仕様書を *.html ファイルに出力します。
http://www.lares.dti.ne.jp/~tkumagai/delphi/index.html

報告までに。

824 :デフォルトの名無しさん:2001/06/15(金) 10:10
そういやGExperts1.01でてますね
http://www.gexperts.org/

825 :turbo type D:2001/06/15(金) 14:33
しおりの
保存機能は是非欲しいですね。

Borlandに要求しおうぜ!

826 :turbo type D:2001/06/15(金) 14:53
Borland Mail Newsアゲ
◆「Delphi 3 または 4 → Delphi 5」バージョンアップは6月20日まで
だって。

827 :デフォルトの名無しさん:2001/06/15(金) 19:33
>>825
それ実装したら、Delphi6 買ってくれる?

828 :turbo type D:2001/06/15(金) 19:42
実装してなくても買っちゃうね (w

でも、しおりがどうして保存されないのかは
以前からナゾだったです。はい。

829 :デフォルトの名無しさん:2001/06/15(金) 19:59
逆探知用(w
http://www.borland.com/
http://www.borland.co.jp/

830 :デフォルトの名無しさん:2001/06/15(金) 21:39
>>828

IOTAEditView の BookmarkPos プロパティで読み書きできるよ.
アドイン作ってみたら?もうあるかも.

831 :turbo type D:2001/06/15(金) 23:10
>>830
そんなスキルあらしません、(゚Д゚)

832 :デフォルトの名無しさん:2001/06/16(土) 00:10
他に、なにかあるとうれしいもの無いの?

833 :デフォルトの名無しさん:2001/06/16(土) 00:28
Borlandに、自社製品使ったソリューション丸ごと。
カスタマイズ無制限・ノンロイヤリティー。

834 :デフォルトの名無しさん:2001/06/16(土) 00:34
>>832
Tools API のソースのコメント、訳してよ・・・

あとサンプルコード、コンポーネントのテストで使ったものでも
いいから今の倍ぐらいにしてよ・・・

835 :デフォルトの名無しさん:2001/06/16(土) 00:38
>>826
思い出して申し込んだ。Delphi6はCLXの絡みもあるから
買っておくかというところで。

836 :デフォルトの名無しさん:2001/06/16(土) 00:38
DDKのHeaderFileも入れといて欲しいんだけど。
自分でPascalに直すの面倒だよ。( ´Д`;)
あ、俺まだDelphi4なんだけど、Delphi5に付いてる?>DDKのヘッダ
付いてたら直ぐUpgradeするニョ。なるべく6月20日までに教えて・・(我侭

837 :デフォルトの名無しさん:2001/06/16(土) 00:49
>>836
ヘッダーということはインポートユニットにゃ?
ほいじゃついでにTASMも。

838 :デフォルトの名無しさん:2001/06/16(土) 00:56
>>834
>Tools API のソースのコメント、訳してよ
これくらいなら今のスケジュールでも何とかなるかな.

839 :デフォルトの名無しさん:2001/06/16(土) 01:16
>>832,838
某陸の人じゃ、無いよね?

840 :デフォルトの名無しさん:2001/06/16(土) 02:29
KylixでのMySQL接続プログラムはDelphi6でも使えるのかな?

841 :デフォルトの名無しさん:2001/06/16(土) 02:36
>>839
細かいところは気にしないことにしましょう。

842 :836:2001/06/16(土) 03:25
>>837
そです>インポートユニット
TASM、俺も欲しい。たまにBC4で使うけどやっぱ便利。

843 :デフォルトの名無しさん:2001/06/16(土) 04:31
TASMはまだ売ってるんですか?

844 :デフォルトの名無しさん:2001/06/16(土) 04:34
と思って検索したらあるみたいですね。失礼しました。

845 :デフォルトの名無しさん:2001/06/16(土) 05:41
>>要望
inline asmでMMXやらSSEやらを正式対応もとむー。
アドインで無理やり使うのもなあ。

846 :デフォルトの名無しさん:2001/06/16(土) 05:43
で、思うんだけど
Delphiって、IDEの環境がカスタマイズができると言っても難しすぎる。
というか、あまりにサンプルや解説が少ない。
よって、気軽にカスタマイズできない。
その辺なんとかならないだろか。

847 : :2001/06/16(土) 07:38
プロジェクトにコンポーネントライブラリを含められるようにして欲しい。
パッケージを再コンパイルしなくても使えるやつ。

848 :デフォルトの名無しさん:2001/06/16(土) 07:44
>>845
Kylix 以降、MMX, SSE, 3DNow サポートしちょりまっせ。

849 :デフォルトの名無しさん:2001/06/16(土) 08:51
>>847
パッケージグループを使って、アプリとパッケージをまとめて
ビルドかけたら?

850 :デフォルトの名無しさん:2001/06/16(土) 11:34
>>849
逆にいうと、コンポーネントパレットに
「グローバルに」コンポを所属させたくない!という
希望を叶えることって出来ますか?

他のプロジェクトでも同じコンポをパレットに載せたくない。
載せられちゃう(少なくとも昔のverはそうだったよね)と
コンポのクラスをプロジェクトローカルに出来ない。
名前空間どころの騒ぎじゃなくなり、他のプロジェクトにまで
名前汚染をしちまう。つまり同じ名前の違うコンポを作れなくなる。

これ痛い。せっかくの(或る意味究極の)ライブラリ化技術なのに、
名前空間が制御できないんで事実上使い物にならない、つまり
「あるプロジェクトに属する」ライブラリを積極的にコンポ化
するというモチベーション(?)を、失ってしまう。

(コンポはプロジェクト非依存でないと「おかしい」という
考え方は、なんか変です。コンポの便利さを使える場面が
限定されてしまうってのは、技術的必然では無いはず)

あれって、最近では改善されましたか?

851 :デフォルトの名無しさん:2001/06/16(土) 12:45
複数のプロジェクトで使うコードだからライブラリにコードを
移動するんじゃないの?ここのプロジェクトのみで使うだけなら
コンポーネントとして独立させる必要は無いでしょ?

便利さとのトレードオフだと思うけど。

一つのプロジェクト内の複数のフォームで使い回すだけなら
フレームを使ったら?

852 :デフォルトの名無しさん:2001/06/16(土) 12:48
ようは、プロジェクトファイル(グループ)開いたときに、
そのプロジェクトで使用されるコンポーネントが自動で組み込まれ、
プロジェクトを閉じたときにアンインストールされる、
みたいな感じだよね?

確かに今のままだと不便なんだよな。
delphiで作られたツールのソース拾ってきても、
プロジェクト開く前に付属されてるコンポーネントを先にコンパイル、インストールして
自分の環境汚さなきゃいけない。うーむ。

自分でつくるものも、組み込む(人に渡すときには組み込ませる)手間が別途かかるので、
コンポーネント化しても、FormCreate時に動的生成ですませちゃう・・・。

853 :デフォルトの名無しさん:2001/06/16(土) 13:04
個人的にはコンポーネントの登録などしないで
uses(かusescomponent)すれば
パレットに並ぶようにして欲しいね。

ユニットはuses myunit in '..\old\myunit.pas'できるんだから。

854 : :2001/06/16(土) 13:05
>>851
constでもいいんですが、オブジェクトインスペクタで初期値を指定する
のも捨てがたいんですよ。

855 :デフォルトの名無しさん:2001/06/16(土) 13:08
>>854
>オブジェクトインスペクタで初期値を指定する
>のも捨てがたいんですよ。
つーか、コンポーネントの利点ってこれにつきるような
自分でCreateしたらただのクラスじゃん

856 :turbo type D:2001/06/16(土) 13:47
>>852-853
使ってると不便に思う事はみんな同じなんだな。

usescomponent案サンセー

Create時に自分で生成するの反対。面倒すぎ

既存コンポーネントとの
名前空間のぶつかりが気になるけど
Borlandなら出来るだろうし。

opentoolsApiも使いにくぃ。

857 :デフォルトの名無しさん:2001/06/16(土) 14:04
>uses(かusescomponent)すれば
>パレットに並ぶようにして欲しいね。
これができればコンポーネントの開発・デバッグもかなり楽になるね。
Delphi6にこれ実装しないとC#に移るぞ、ゴルァ!! > Borland

858 :デフォルトの名無しさん:2001/06/16(土) 14:11
>>851
>コンポーネントとして独立させる必要は無いでしょ?

まさか。
コンポをパレットに並べたい(ぽとりぺたりするために)という欲求と
コンポを「常に」パレットに並べた(くな)い という欲求とは
全然別モノなんですよ。そこを理解できますか?

あなたの説が正しいとすると、同じことはコンポ以外にも言えるはず。
つまり、1つのプログラムの中のサブルーチンを
プログラマが自由にProcedure/Functionにする(分割する)
こともまた、駄目だってことになりますよ?
いちいちライブラリ化してProjectから追い出す必要がある、
という話になっちゃいますよ?
それ、受け入れられますか?コンポだって同じです。

>便利さとのトレードオフだと思うけど。

それ、違う。
トレードオフになっちゃうのは、たまたま今のDelphiの実装が
そういう風になっているせいに過ぎないっしょ。
Project従属コンポという概念は、どう考えても
「実装不可能」ではナイよね?

>フレームを使ったら?

フレームも悪くないけど、あれ「だけ」だと足りないんだよね。
あくまでコンポのサブセットだよあれって。

ん?そういや最近使ってないんで忘れたが、
Frameって自分でプロパティを追加できたっけか?
俺ぁ他のコンポへのポインタをプロパティとして持たせる
(DBコンポみたいな感じで)のが好きなんだが…

あと細かい話だけどFrameがWinControlっていうか
OSに直接認知されるObjectっていうか
Java畑でいうところの重量コンポーネントなので、
リソース食いすぎるという悩みも。
こないだFrame作って
いい気になってInstanceを100枚くらい貼ったら
win9xで動かなくなった(藁
まぁこの話はVCL全体のアーキテクチャの問題なんで
自作コンポの話とはちょっとズレルけど。

859 :デフォルトの名無しさん:2001/06/16(土) 14:13
delphiの設計時コンポーネントパッケージって
Projectごとに取捨選択できないのか?

860 :デフォルトの名無しさん:2001/06/16(土) 14:16
コンポーネント(のソース/DCU/パッケージ)の所在pathを
delphiの設定画面の一箇所で集約的に書かないとならない。

あの設計だと、プロジェクトごとに分散するという構成は
とりにくいと思われ。

直せ。きぼん>某陸
それからこの案で特許取るなよ(藁)>某陸

861 :デフォルトの名無しさん:2001/06/16(土) 14:21
糞VCの、「プロジェクト間の依存関係」という考え方は
よかったと思う。

VCLコンポ自作の場合、その自作自体がプロジェクトにはならず
ソースが単体で存在するだけだよね。

あれやめて、VCLもProjectにするようにして、
VCみたいに依存関係を設定できるようにする、と、
きっと開発デバッグとかも楽になると思われ。
トレース実行が依存関係に基づいて隣のProjまで
飛んで行ってくれたりするし。

で、依存関係といっても一対多じゃなくて多対多にすると
幸せになると思う。コンポProjとアプリProjが
互いに複数どうしの依存関係を持つっていう。
幸いにしてコンポとアプリの依存関係は一方通行だから、
アプリ側を関係の終端とすることで、循環依存とかの問題は
解決できるんじゃないかと。

862 :デフォルトの名無しさん:2001/06/16(土) 15:00
>>861
なんかいろんな事をぶちまけているので主張が読みとりづらいが

>トレース実行が依存関係に基づいて隣のProjまで飛んで行ってくれたりするし。
これ、当たり前にできるでしょ?

コンポーネントもパッケージという形のプロジェクトなんだが。

863 :デフォルトの名無しさん:2001/06/16(土) 15:00
みんな同じところで不便に思ってるもんだなあ。ほっとしたような(スンナ

つーわけで、Borland様お頼み申し上げます。
C#がネェティブコンパイルできたらそっちにうつっちゃうよぉー。

864 :デフォルトの名無しさん:2001/06/16(土) 15:01
... しかし某MLなんかより、よっぽど建設的な意見が並ぶやね。

865 :デフォルトの名無しさん:2001/06/16(土) 15:08
>864
あそこはただの人工無能搭載FAQ検索エンジンだよ
知らなかった?

866 :デフォルトの名無しさん:2001/06/16(土) 15:18
>>864-866
確かに

867 :デフォルトの名無しさん:2001/06/16(土) 15:27
IDE に登録されているパッケージ(のリスト)は IDE 全体で一つなので
入れたり抜いたりはグローバルな動きをしますが、どのパッケージを使うか
はプロジェクト単位でコントロールできますから、たとえば Project1 は
Pack1.bpl の TButtonX をつかい Project2 は Pack2.bpl の TButtonX を
使う事ができます。

ってことではだめ?

868 :デフォルトの名無しさん:2001/06/16(土) 15:30
>>863
>C#がネェティブコンパイルできたらそっちにうつっちゃうよぉー。

そのころにゃ CLR で動く Delphi があるんだろうよ。

869 :デフォルトの名無しさん:2001/06/17(日) 16:22
VBで仕事してる人教えてください。
http://piza.2ch.net/test/read.cgi?bbs=tech&key=992504712

のスレで、こんなこと言っているヤツいますぜダンナぁ。

>39 デフォルトの名無しさん  2001/06/17(日) 16:18
>誰かDelphiのみで喰ってる人はいないの?

870 :デフォルトの名無しさん:2001/06/17(日) 17:59
OpenToolsAPIの詳しくてわかりやすい解説ないですかage

871 :デフォルトの名無しさん:2001/06/17(日) 18:32
Delphiってもう新バージョンが出ないって本当でしょうか?
VCかBCBをやったほうがいいのでしょうか?

872 :デフォルトの名無しさん:2001/06/17(日) 22:25
>>871 がいしゅつ。
せめて検索掛けようね?
お馬鹿さんじゃないんだからさ。

873 :デフォルトの名無しさん:2001/06/17(日) 22:43
>>871
よくこの話題でるけどさ、ソースどこよ?(w

874 :名無しのDelphi使い:2001/06/17(日) 22:47
OpenToolsAPIの資料ほんとに少ないね。

http://216.239.35.100/search?hl=ja&safe=off&q=OpenToolsAPI&lr=lang_ja
日本語のページからOpenToolsAPIを検索しました。
約12件中1 - 10件目 ・検索にかかった時間0.04秒

http://216.239.35.100/search?hl=ja&safe=off&q=OpenToolsAPI&lr=
全言語のページからOpenToolsAPIを検索しました。
約157件中1 - 10件目 ・検索にかかった時間0.29秒

とりあえず急ぎの用事が目の前にあるのでこれにて失礼

875 :デフォルトの名無しさん:2001/06/17(日) 23:48
>869
うちの会社の仕事は半分くらいはDelオンリーだから
自分がそのチームに回されたら、たっぷり向こう1年くらいは
「Delのみで飯食う」状態になるね。俺も何度もそのプロジェクト
(のサブプロジェクト)に居たんで、該当する。

ちなみにそれ以外はUnixが多いかな。Linux+Kylixの出番が
来るかどうかはかなり怪しいけど、CUIも嫌いじゃないから、いいや。
むしろGUIでもVBやらされる(以前はそういう仕事もあった)よりは
ずっとマシだし。

個人的な好みだが、Delのみで飯食うとなると、やっぱり
しばらく後には自力でComponent書くくらいになって欲しいな。
BOCだかなんだかにお世話にならずに済むわけだわな。
安上がりだしスキルも上がるし。いいことづくめ。わーい。

876 :デフォルトの名無しさん:2001/06/18(月) 00:10
>>875
ちょっと気になるんですが…
Del厨房なリアル工房なので愚問とは思いつつ質問
させてください。

コンポーネント作るのにも難易度あると思うんだけど、
どの程度まれ作れれば大丈夫なのでしょうか?

目的にマッチしたメッセージハンドラとかを作って
プロパティ化、イベント化する程度でも大丈夫で
しょうか?

877 :デフォルトの名無しさん:2001/06/18(月) 00:14
>>869
そういうスレは放っておくのが吉。

878 :デフォルトの名無しさん:2001/06/18(月) 00:56
>>876
その程度の事はマニュアルに載っているのだけれども。

879 :デフォルトの名無しさん:2001/06/18(月) 01:07
>>875
>うちの会社の仕事は半分くらいはDelオンリーだから

ほんとにそんな会社があるの?
あ、「半分くらいはDelオンリー」がポイントかな?
社員二人とか?

880 :デフォルトの名無しさん:2001/06/18(月) 07:00
>>879
Delphi を貶めることが生き甲斐ですか?

881 :デフォルトの名無しさん:2001/06/18(月) 10:07
>>880
そういう発言も放っておくのが吉。

882 :turbo type D:2001/06/18(月) 10:08
>>880
相手にしない方がいいんじゃない?

>>876
とりあえず、そこまでわかれば
人の作ったコンポのソースが
読めるようになるので、よろしいのじゃないでしょうか。
マニアルには載ってるけどコンポ作成が出来ない
Del使いってのも沢山いらっしゃるでしょう。実際。

>>867
ユーザーフレンドリーではないような気が....

883 :デフォルトの名無しさん:2001/06/18(月) 11:54
delphiがもうバージョンアップされないという話は本当なのでしょうか?
VCかdelphiをやろうか迷っているのですが

884 :名無しさん:2001/06/18(月) 12:36
>>883
Visual C++も、終了します。

885 :デフォルトの名無しさん:2001/06/18(月) 12:43
>>883
がいしゅつです(w

886 :turbo type D:2001/06/18(月) 12:43
>>883(゚Д゚)ハァ?
そういう話は聞いたことがありません。

とでも答えたらいいんでしょうか?

887 :デフォルトの名無しさん:2001/06/18(月) 13:41
>>876です。
>>882
なるほど、ありがとうございます。
人のソースを読むことももっと勉強して置いて
損はなさそうですね。
もっと精進しておきます。

>>883の様な愚問(wが多いので、
次のスレを建てるときは>>1>>2あたりに
FAQとして入れておくのはどうでしょう?

888 :デフォルトの名無しさん:2001/06/18(月) 13:58
delphiがもうバージョンアップされないという話は本当なのでしょうか?
VCかdelphiをやろうか迷っているのですが

889 :デフォルトの名無しさん:2001/06/18(月) 14:30
>>888
あなたの会話の中味はこれ以上バージョンアップされないという話は本当なのでしょうか?

890 :883:2001/06/18(月) 15:50
どうしてdelphi使いの人は不親切なのでしょうか?
ただ知りたかっただけなのに.....

891 :デフォルトの名無しさん:2001/06/18(月) 16:40
はぁ?
みんな親切です。
マジレスしちまった(ぉ

892 :デフォルトの名無しさん:2001/06/18(月) 17:36
>>882
>ユーザーフレンドリーではないような気が....

文章で書くとめんどくさそうに聞こえるけど実際にやってみればわかるよ。
デフォルトのプロジェクトはほんとに最低限のコンポーネントしか
現れないようにして、必要に応じて追加していけばらくちん。

プロジェクトごとにユニット検索パスも変更できるし。

そりゃ、同名のユニット、パッケージをまぜこぜにするのはつらいけど
現状で不満はないが。

893 :デフォルトの名無しさん:2001/06/18(月) 18:01
>>881 >>882 つい反応しちゃった,すまんこってす.

話を変えて,ショートカットキーで判らんことがあるんだけど,
`Ctrl+/' はショートカットキーとして無効なんすかね.
TMenuItem.ShortCut に割り当てても OnClick が呼ばれないんすよ.

これは Windows と,Delphi のどちらの仕様なんでしょう.

話題の,OpenToolsAPI でアンドゥに割り当てたかったんですけどね.

894 :879:2001/06/18(月) 18:06
>>893>>879 です.

895 :880:2001/06/18(月) 18:07
>>894 >>880 だった.
鬱出汁脳.

896 :デフォルトの名無しさん:2001/06/18(月) 19:49
>>893
できるけど?すっぴんのフォームでやってみな。

897 :D使いβ:2001/06/18(月) 20:51
>>896
俺もスラッシュだけは出来ない。他にセミコロンも駄目だった。
カンマやピリオドでは出来た。
キーボードが旧PC98のせいかなあ?

898 :デフォルトの名無しさん:2001/06/18(月) 21:53
>>897
NEC98 キーボードでもできるけど?

----
Form に HotKey1, Memo1, Menu アイテムとして N1 をおいて

HotKey の OnChange に
 N11.ShortCut := HotKey1.HotKey

MenuItem の OnClick に
 Memo1.Lines.Add('test')

とやって、実行時に CTRL-/ を指定してみたら?
それでうまくいったら、プログラムに何かある。
それもだめならきっと OS に。

899 :D使いβ:2001/06/18(月) 23:56
あ、ShortCutプロパティに'Ctrl+/'って直書きしてました。
そのせいかあ?

900 :デフォルトの名無しさん:2001/06/19(火) 01:21
おれんとこはそれ(直書き)でも動くけど?

901 :デフォルトの名無しさん:2001/06/19(火) 02:12
会社のPC98 NT4.0では駄目だったけど
自宅のDOSV Win95ではうまく行った???

あ、900行っちゃったね。次はしばらく相談室1本で行く?

902 :デフォルトの名無しさん:2001/06/19(火) 03:04
Delphi 専用の空間とか作れないのかな。さすがに閑古鳥かな。

ボーランドも、ニュースサーバーなんかやめて、2チャンネル風のユーザーインターフェースを
持った Web 会議室を作ると面白いかな?

どうせ、匿名性という点ではメール、ニュースも似たもんだし。

903 :880:2001/06/19(火) 19:47
>>898 の通りやってみたけどやっぱ駄目.

最後の手段かと RegisterHotKey で試してみた.

procedure TForm1.FormCreate(Sender: TObject);
var
key: Word;
shift: TShiftState;
begin
ShortCutToKey(TextToShortCut('Ctrl+/'), key, shift);
if not RegisterHotKey(Handle, $00FF, MOD_CONTROL, key) then
ShowMessage('fail');
end;

procedure TForm1.Hotkey(var H: TWMHotkey); (* message WM_HOTKEY; *)
begin
ShowMessage('on Hotkey');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnregisterHotKey(Handle, $00FF);
end;

これも駄目.キーボードか,Windows の問題かな?

一応環境,
DOS/V
OS WinNT 4.0
Keyboard PFU HHK Lite

904 :デフォルトの名無しさん:2001/06/19(火) 20:05
>Delphi 専用の空間とか作れないのかな。
作っちゃえばいいじゃん。
monazilla掲示板みたいなのただでできるんでしょ。
さびれたって誰も損しないだろうし。

905 :turbo type D:2001/06/19(火) 20:19
専用空間だったら2chじゃなくてもいいのに(ワラ
2chで他の言語とも気軽に交流できる所がよいと思われ。

気軽過ぎてVBと争う事もしばしば?

あとーーー
Dマガの中村氏、髪伸ばしすぎだよ。
記事はinterfaceについてわかり易くてよいです。

ただinterface、っつう仕様が物事を複雑化しようと
するような方向であまり好きじゃない。

駄文だ............ウツ....

906 :D使い:2001/06/20(水) 11:58
作っときました。
Delphi/Kylix Tech 2nd
http://piza.2ch.net/test/read.cgi?bbs=tech&key=993005709

タイトルが長くなっちゃいましたが。

260 KB
■ このスレッドは過去ログ倉庫に格納されています

>>1648>>2449>>9899t>>3364r>>5640>>9257>>3882>>8786
m}★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)