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

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

Delphi相談室その2

1 :デフォルトの名無しさん:2001/07/24(火) 14:00
ちょっと内容が高度になりすぎてしまうTechスレじゃ質問しずらい
とかはいりにくい人の為に DelphiのTips Q&A はこちら


Delphi/Kylix Tech 2nd はこちら
http://piza.2ch.net/test/read.cgi?bbs=tech&key=993005709
つづく>>2

2 :デフォルトの名無しさん:2001/07/24(火) 14:02
前の Delphi相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=971261573

Delph6 の話でもはじめますか?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989950788

delphiで作られた有名ソフトって何がある?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=990056026

3 :デフォルトの名無しさん:2001/07/24(火) 14:09
Techの方もリンクはってればよかったね。

4 :デフォルトの名無しさん:2001/07/24(火) 14:35
1>>
すぐに削除依頼を出すように。
むやみにスレ立てんなよ

5 :デフォルトの名無しさん:2001/07/24(火) 14:38
delphiってもうバージョンアップしないんでしょ。
そんなのに新しいスレ建てるなんてばかげてると思わない会。

6 :デフォルトの名無しさん:2001/07/24(火) 14:45
変なのが増えてきたので以後の質問は以下でお願いします。
このスレはsage進行で

http://piza.2ch.net/test/read.cgi?bbs=tech&key=993933402

7 :名無しさん:2001/07/24(火) 14:56
>>1 スレ立てお疲れでーす。
しかし、変な嫌がらせ野郎がいるな。>>4-6

8 :6:2001/07/24(火) 15:55
>>7
人の迷惑も考えずにスレを乱立してっからだろーがよ。
いくつあると思ってんだ、delphi関係のスレが。
もっと自粛セーよ。ぼけがー。

9 :デフォルトの名無しさん:2001/07/24(火) 16:10
変なドキュ煽りは無視しておいて

前スレの916の質問。

Becky風TreeView描画コード書いた。

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
 DefaultDraw := True;

 TreeView1.Canvas.Font.Color := clBlue;
 TreeView1.Font.Color := clRed;
 TreeView1.Font.Size := 15;
end;

procedure TForm1.TreeView1CustomDraw(Sender: TCustomTreeView;
const ARect: TRect; var DefaultDraw: Boolean);
var
 NodeRect: TRect;
 i: Integer;
begin
 DefaultDraw := True;

 TreeView1.Canvas.Font.Color := clGreen;
 for i := 0 to TreeView1.Items.Count-1 do
 begin
  if (not TreeView1.Items[i].IsVisible) then continue;
  NodeRect := TreeView1.Items[i].DisplayRect(True);
  TreeView1.Canvas.TextOut(NodeRect.Right, NodeRect.Top, '('+IntToStr(i)+')');
 end;
 TreeView1CustomDrawItem(nil, nil, [], DefaultDraw); //※
end;

※のコードが無いと
Label1のフォントにItalicなどしている場合
TreeView1.Items[0]番の右項目(上の例では'(0)')の
初期描画位置がどうしてもずれる
別にイベントハンドラ呼ぶ必要がるのではなくてFontを設定しなおしているだけなんだけど

理由がわからない。
なぜだ!教えてくれ。

よろしく。

10 :デフォルトの名無しさん:2001/07/24(火) 16:38
>4=5=6=8
激しくウンコ(;´д`)

11 :四則演算数値化関数:2001/07/26(木) 08:57
function FourNum(s:string):double ;
var num:double;
var sym:char;
 procedure addsub;forward;
 procedure next;
 var i,j:integer;
 const sep='^+-/*()<>';
 begin
  if s='' then begin sym:=#0;exit;end;
  for j:=1 to length(sep) do
  if s[1]=sep[j] then begin sym:=s[1]; delete(s,1,1); exit;end;
  sym:=#1;
  for i:=2 to length(s) do
  for j:=1 to length(sep) do
  if s[i]=sep[j] then begin
    num:=StrToFloat(copy(s,1,i-1)); delete(s,1,i-1); exit;end;
  num:=StrToFloat(s);s:='';
 end;
  procedure factor;
  begin
  if(sym = #1) then next
  else if(sym = '(') then
   begin next; addsub;
     if(sym <> ')') then raise Exception.Create(' )がない');
     next;
   end;
  end;
  procedure muldiv;
  var savenum:double;  var oldsym:char;
  begin
  factor;
  while (sym in ['*','/','^'] ) do begin
   savenum:=num;oldsym:=sym; next;
  factor;
   case oldsym of
      '*': num:=savenum*num;
      '/': num:=savenum/num;
      '^': num:=power(savenum,num);
   end;
  end;
  end;
 procedure addsub;
 var savenum:double; var oldsym:char;
 begin
   case sym of
    '+': begin next; muldiv;  end;
    '-': begin next; muldiv; num:=-num; end;
     else    muldiv;
   end;
  while (sym in [ '+','-'] ) do
   begin savenum:=num;oldsym:=sym; next; muldiv;
    case oldsym of
    '+': num:=savenum+num;
    '-': num:=savenum-num;
    end;
   end;
 end;
begin //ここがFourNum関数の根っこ
 next;  addsub;  Result:=num;
end;

12 :11:2001/07/26(木) 09:16
>>11 は 教科書通りの再帰下降法
  1レスに収める為に 多少書き方は汚いけどちゃんと動くよ

#1 は数値シンボルね

関数は文字列の後に他の演算子が入らなくて(があれば
って処理すれば組み込めるよ。

13 :Dr.GHI:2001/07/26(木) 10:39
>>9
迷医はあなたの質問の解決には十分な睡眠と適度な運動が必要だと
考えます。カスタム描画と VCL のイベントの関係と順序を多少理
解する必要にあるかもしれません。

この症状を対する処方箋は TreeView1 のフォントの設定を設計時に
行っておくというものです。設計時の TreeView1.Font のサイズや
スタイルを OnCustomDrawItem で設定するものとは別の内容にして
いるのが原因の1つだからです。

このため OnCustomDrawItem よりも先に発生する OnCustomDraw イ
ベントでは、まだフォントは設計時に設定した値のままです。
OnCustomDraw イベントで利用している DisplayRect メソッドは現
在のフォントに従ったラベル領域の幅を得ることになるため、設計
時のフォントの幅が OnCustomDrawItem で設定しているフォントよ
り小さいと期待した位置より左に、大きいと右にずれているでしょう。

あなたは TreeView1.Font が未設定だという迷医の診断を受けて
OnCustomDraw の中で TTreeView1.Font を設定するようなコードを
用意すればいいと考えるかもしれませんが、それは迷医の思うつぼ
にはまってしまいます。

OnCustomDraw の中で TTreeView1.Font に変更を行っても Display
Rect の返す領域は依然設計時に設定した TTreeView.Font のままに
なっています。カスタム描画ステージに突入したコモンコントロー
ルはステージを完了するまでフォントの変更を適用しないからです。

14 :デフォルトの名無しさん:2001/07/26(木) 18:00
>>11 バグレポート

"--1" が -1になるぞ

"3+" で 6 が帰るぞ

だいたい空白が入るとダメじゃないか

15 :11:2001/07/26(木) 21:00
>>14
文法チェックは殆どしてないからね
1レスに収まる為って事で勘弁してくれ

空白についてはあちこちTrimを入れると修正出来るだろう

16 :デフォルトの名無しさん:2001/07/26(木) 21:03
>>13
なげー文載せんなよ。ばーか

17 :デフォルトの名無しさん:2001/07/26(木) 21:55
>>16
日本語を

18 :デフォルトの名無しさん:2001/07/27(金) 07:33
>>11
 --1で1が帰る方がいいのかどうか判らないけど

    '+': begin next; muldiv;  end;
    '-': begin next; muldiv; num:=-num; end;
この2行の muldivを addsub に変更すれば再帰処理されて1になるよ

まあでも 普通は -- はデクリメント演算子に使いたいよな

19 :デフォルトの名無しさん:2001/07/27(金) 08:42
>>11
(・∀・)イイ! 使わせてもらいやす。

20 :デフォルトの名無しさん:2001/07/27(金) 10:03
(・∀・)イイ! バグフィックス版をアプして下さい

21 :11:2001/07/27(金) 15:53
>>20 バグじゃないよ 仕様なんだって

どんな仕様が希望? 希望によっては変更してもいいよ

22 :11:2001/07/27(金) 15:55
>>18 なるほど
 でもおっしゃる通り -- や ++ は別の演算子に使いたいし
 -(-(1)) と書いてくれたらいいんだし

23 :20:2001/07/27(金) 16:01
バグじゃないなら良いです。

24 :11:2001/07/27(金) 16:26
そういわれると弱いなあ

> "3+" で 6 が帰るぞ

については、 factor の if の end; を
   end
else raise Exception.Create('数があるべき');
とやってくれたら直る。

空白が入るとダメなのは next の

if s[1]=sep[j] then begin sym:=s[1]; delete(s,1,1); exit;end;

if s[1]=sep[j] then begin sym:=s[1]; delete(s,1,1);s:=trim(s); exit;end
とtrimを挿入してくれ

25 :デフォルトの名無しさん:2001/07/28(土) 22:49
D5を使ってるのですが、
設計時 TMemoのLines プロパティに 大量のメッセージを書いておいたら
どうもふと気付くと失ってる事が頻繁に起きます。
しょうがないから外部テキストにして読み込んでるけど

これって俺だけ?

26 :デフォルトの名無しさん:2001/07/28(土) 22:52
>>25
君だけ。再インストールしたら。

27 :25:2001/07/28(土) 23:57
そうか。俺だけか・・・じゃ再インストールしてみるよ

28 :デフォルトの名無しさん:2001/07/30(月) 16:02
Delphi6 でツールバーのカスタマイズがサポートされましたが、
これをプログラムから実行するにはどうすればいいでしょうか?

29 :デフォルトの名無しさん:2001/07/30(月) 16:04
>>28
意味がよくわからんのだが。

30 :デフォルトの名無しさん:2001/07/30(月) 16:14
たぶんこれだろ。

property TToolBar.Customizable: Boolean;

説明

Customizable プロパティを True に設定すると,ユーザーはツールバーボタン
を実行時に追加,削除,および移動できます。
ユーザーは次の 2 通りの方法でカスタマイズ可能なツールバーを変更できます。

ユーザーは,〔Shift〕キーを押しながらツールボタンをドラッグする方法で,
ツールバー上の新しい位置にボタンを移動することや,
ツールバー外にドラッグしてボタンの削除を行うことができます。

ツールバー上をダブルクリックすることで,ユーザーはツールバーの
カスタマイズダイアログを表示できます。
このダイアログには,ツールバー上にないボタンを収めているリストボックスと,
ツールバー上に表示中のボタンを収めているリストボックスの 2 つがあり、
その 2 つですべての可能なボタンが表示されます。
ユーザーはこのダイアログを使って,ボタンの追加や削除,
その順序の変更を行うことができます。

31 :デフォルトの名無しさん:2001/07/30(月) 16:56
>>25-27
Windowsの32KB制限にひっかかってるとか

32 :デフォルトの名無しさん:2001/07/30(月) 20:07
で、Win2kで開発してる人は気付かない、と。

33 :デフォルトの名無しさん:2001/07/30(月) 23:55
9です。
>>13
もうすこし、わかりやすく言ってもらえないですか?

どうして、TreeView.Items[0]だけRectがずれているのかが
わからなくて問題なんだ。
・・・Items[1以降]ではちゃんと描画されているんだい!

で、解決方法を教えてくれよ。

OnCustomDraw時に一度だけUpdateやRefreshなどの
メソッドを出すようにしたらよいのかい?

迷医さん迷える患者を助けてくだされ。

34 :デフォルトの名無しさん:2001/07/31(火) 01:29
>>33
理由も解決方法も書いてあるじゃん

35 :デフォルトの名無しさん:2001/07/31(火) 01:59
>>34
良くわかってもないのに書くなよ

設計時に設定しろとかいう寒い解決方法なんて望んではいないんだ。

36 :34:2001/07/31(火) 08:23
それは1つの解決法としか書いてないだろ、

それから DisplayRect の挙動について説明してるわけだから、
設計時に設定したくないなら、そっちを読んで自分でコードを
書けばいいわけだよ。

わざわざそのときの注意点まで書いてあるんだし

37 :34:2001/07/31(火) 09:07
ついでだから再現パターン例だけ書いておいてやる

前提1) 設計時のフォントサイズを 11 とする
前提2) 計算を楽にするため文字 x は幅とサイズが等しいと仮定

1) フォームがされて TreeView を描画する要求がくる

2) OnCustomDraw イベントが発生する

3) OnCustomDraw で DisplayRect() が呼び出される
この時、前提1と前提2から、DisplayRect の戻り値
の右端はアイテムが xxx だったら 11*3 = 33 だろ
左から 33px のところから描画が走る

4) 次に OnCustomDraw が発生して TreeView1 のフォ
ントのサイズが 15px になる。アイテム xxx は
15x3 = 45px の幅を消費する。
左から 33px の位置から描画していた内容の先頭
10px が上書きされて潰れてしまう。

5) 1つ目のアイテムを描画しおわったらカスタム描画
ステージが一段落するので、次の DisplayRect()
は Font.Size = 15 で 45 を返すので、2つ目以
降は正しく描画される


DisplayRect で正しい幅を得たいなら描画が始まるよ
り先にフォントのサイズを正しく設定すること、その
1例が設計時だろ。

他には DisplayRect を使わずに Canvas.TextWidth
などを使って自分で各要素の幅・丈を足し算するとか

38 :デフォルトの名無しさん:2001/07/31(火) 09:52
なげー文載せんなよ。ばーか(コピペ

39 :デフォルトの名無しさん:2001/07/31(火) 12:17
>>36-37
ありがと・
>DisplayRect で正しい幅を得たいなら描画が始まるよ
>り先にフォントのサイズを正しく設定すること、その
>1例が設計時だろ。
いや、そりゃそうなんだけど
描画直前にOnCustomDraw/OnCustomDrawItem
どちらかで設定して反映できないかな?

>他には DisplayRect を使わずに Canvas.TextWidth
>などを使って自分で各要素の幅・丈を足し算するとか
おっしゃるとおりですな。

なぜfor..でまわしているのに最初のItemだけ変になるんだ?
全部のItemがずれるのなら迷医の主張もわかるんだ。
だけど、DisplayRectでずれるのはItems[0]だけだぜ。
納得いかないよ。

>>38
おまえ邪魔

40 :37:2001/07/31(火) 13:53
そうか、確かにループだから変だな。

DisplayRect で TREEVIEW の処理が進むのかと思ってダミーで
呼び出してみたが変化しないな、迷医の解説希望。

AdvancedCustomDraw を使うという解決策もあるぞ。

41 :デフォルトの名無しさん:2001/07/31(火) 20:29
いま、試せる環境にいないので、わからないけど>>40
情報サンキュ。

TextWidthやAdvancedCustomDrawも試してみる。

基本的にOwnerDraw時も
TreeViewのデフォルトのFontと同じようにして
色だけ変更したりして描画するのが限界なのかモナー

42 :デフォルトの名無しさん:2001/07/31(火) 20:42
>>30
の続報希望
出来るの?出来ないの?

43 :デフォルトの名無しさん:2001/07/31(火) 22:04
DEMOにドッキングフローティングのサンプルコードがありますが
あのドッキング状態をプログラム終了時に保存して
プログラム起動時に復帰する簡単な方法ってありますでしょうか

どの設定を保存してどのタイミングで復帰すればいいのでしょう
おしえてください。

44 :デフォルトの名無しさん:2001/07/31(火) 22:10
>>30

SendMessage(ToolBar1.Handle, WM_LBUTTONDBLCLK, 0, 0)
ってやってみたけど無理だった。
やっぱり、直接ダブルクリックするしか方法がないんだろうか…。

45 :デフォルトの名無しさん:2001/07/31(火) 22:14
ひっそりとではあるが、
Delphi6 で TreeView の複数同時選択がサポートされてたのが嬉しい。

46 :デフォルトの名無しさん:2001/07/31(火) 22:25
>>45
ほんとに?
旧版ではCreateParamsで設定するとかで実装できないの?

47 :デフォルトの名無しさん:2001/07/31(火) 22:40
delphiってversion4,0が最近でたって本当ですか。
買ったほうがいいんでしょうか。

48 :デフォルトの名無しさん:2001/07/31(火) 23:02
>>44
 SendMessage(Toolbar1.Handle, TB_CUSTOMIZE, 0, 0);

CommCtrl の uses が必要。

.... 47 は無視しようね。

49 :デフォルトの名無しさん:2001/07/31(火) 23:39
>>47
ネタウザイ。del6スレ有るだろうがゴラァ!!ネタにマジレスカコワルイ。

50 :デフォルトの名無しさん:2001/08/01(水) 00:38
>>48>>44
画像アプしてくれ。

51 :デフォルトの名無しさん:2001/08/01(水) 01:57
Delphiの不思議

ほとんどのソースはTabは2スペース分なのに
エディタの初期設定では8スペース分になっている

# 毎回、バージョンアップのたびにここの設定を変えてます
# はっきり言ってうざい

52 :デフォルトの名無しさん:2001/08/01(水) 01:59
NEC、4000人の人員削減!

中村さん、大丈夫だろうか?

53 :デフォルトの名無しさん:2001/08/01(水) 02:34
>>61
その設定を変える必要は無いから,誰も変更していないんだけど?

54 :37:2001/08/01(水) 03:44
>>51

タブの幅とインデントの幅は別々に指定できるんだよ

55 :デフォルトの名無しさん:2001/08/01(水) 11:17
>>52
リストラされたら晴れてBorland社員になるか
正式なライターになってくれ。

56 :デフォルトの名無しさん:2001/08/01(水) 12:26
富士通の方が深刻。有名社員いないけど。

57 :デフォルトの名無しさん:2001/08/01(水) 14:06
>>55
>リストラされたら晴れてBorland社員になるか
Borland も嫌がるだろうよ。実物は性格悪くて。二度と原稿依頼はしないぞ。と誓った。

58 :デフォルトの名無しさん:2001/08/01(水) 17:55
>>57
どこの出版社?

59 :ふりすく:2001/08/01(水) 20:35
Delphiって他の言語と比較して何がいいところなん?
全然分からん。。。

60 :デフォルトの名無しさん:2001/08/01(水) 20:42
言語と捕らえ方すると見誤る
RADツールとして優秀だから評価されてる
正直Pascalうざい

61 ::2001/08/01(水) 21:39
みなさんはDelphiで、どんなものを
作っているのでしょうか?

62 :デフォルトの名無しさん:2001/08/01(水) 21:52
>>61
エロゲー

63 :デフォルトの名無しさん:2001/08/01(水) 21:54
game

64 :デフォルトの名無しさん:2001/08/01(水) 22:40
tool

65 :デフォルトの名無しさん:2001/08/01(水) 22:55
OS

66 :デフォルトの名無しさん:2001/08/02(木) 03:38
97年の本がなんで今ごろ売られてるのか謎だけど、「やさしいDelphi」って本いいッスねー。

タイトルに毒を感じるのは私だけ?

67 :デフォルトの名無しさん:2001/08/02(木) 15:25
>>59
Borland独自のOOP拡張はいけてる。
「RADのためのOOP」って奴(by DDJJに書いてた某氏)。
RTTIもTClassもpropertyもpublishedもおおかた素晴らしい。
しかも、単にRADにしか役立たないわけじゃなく、他の場面でも
色々役立たせることが出来る汎用技術。

一方、もともとのPascal(の影響を引きずってる部分)は、おおかた糞。
単にTP系のノウハウを投入しないと超速コンパイラを作れなかったから
選択したんだと思う(というか思いたい)。

言語というか字面の仕様としては、Javaのほうが数段マシ。
Pascal風の順序依存性の強い文法より、Javaのように
(C以上に)順序依存性を減らした言語のほうが、
OOP言語としては使いやすい。

そうそう。OOP機能と呼ぶべきかどうか微妙だが、
名前空間の機能は、ちと弱いねdelphi。もう少し改善して欲しい。
いまどき名前空間をネストというか構造化することができないってのは痛すぎ。
その皺寄せが、"csDesigning"などいう定数名に現れる。頭の2文字ださい。

68 :デフォルトの名無しさん:2001/08/02(木) 15:42
好みの問題じゃないか?俺もCからDelphiに移ってきた最初は
結構戸惑う部分多かったけど今じゃCやJavaの書き方の方が
なんだか違和感が有ったりする。

69 :デフォルトの名無しさん:2001/08/02(木) 16:32
>>67

名称空間については同意
あと、個人的には最適化エンジンを強化してほしい。
ProTools とかでソースレベルでのオプティマイズは時代遅れだ。

Java はだんだんよくなってきているな, Delphi の TList や
コンテナ/コレクションに持っている type-safe なプログラムが
書きにくいという同じ欠点はあったが、それも解決の方向性に向っ
ている。

しかし、Delphi の OOP のための拡張のほうがまだまだ Java よ
りは使いやすい感じが否めないところもある。

あと、実行環境がいまだに整備されきってないのが痛いな。
Java2 の実行環境が手軽にアプリケーションに要求できない。
Windows 主体のクライアント環境だとこれがさらに深刻化。

70 :デフォルトの名無しさん:2001/08/02(木) 18:20
Name := 'ImageList1';
TImageList(FindComponent(Name)).AddMasked(Bitmap, clLime);

のように、String型変数に入った名前でTImageListにアクセスしようと
しているのですが、クラスの例外を生成したと言われてしまいます。
FindComponentではこのようなことはできないのでしょうか?

71 :デフォルトの名無しさん:2001/08/02(木) 18:22
ImageList1 がまだ作成されていないだけじゃない?

as や is をつかいなされ。

72 ::2001/08/02(木) 18:42
サブクラスでメソッドとかの制限ゆるめられるってのに
違和感がー

73 :70:2001/08/02(木) 18:50
>71
あらかじめImageList1は作られているので、直接指定すると
問題なくできました。で、結局

procedure TForm1.AccessImageList( Tmp:TImageList );
begin
 tmp.AddMasked(Bitmap, clLime);
end;

というちょっと情けない感じではありますが目的は達成できました。
as演算子使う場合って

(TObject(Name) as TImageList).AddMasked〜

とかやれば良かったんでしょうか?
どうもうまくいきませんでした。

74 :デフォルトの名無しさん:2001/08/02(木) 19:03
>FindComponentではこのようなことはできないのでしょうか?

できますよ。

Nameって変数名がちょっと怪しいけど大丈夫ですか?
あとFindComponentからnil以外の値が返るかどうかもチェックして
みてください。

75 :デフォルトの名無しさん:2001/08/02(木) 21:58
>>69
TListは、そもそもTListという命名が詐欺(わら
TArrayとかのほうが相応しいように思える。

>>73
おーい。Name(文字列)をTObjectにキャストしてどうするよ?(^^;
(FindComponent(Name) as TImageList).AddMasked(Bitmap, clLime);
だがや。

あと>>74が言うようにNameってTComponentのプロパティ名と衝突してるんで
きちんと作ってないとおかしなことになるぞ。

76 :デフォルトの名無しさん:2001/08/02(木) 23:52
TArray だと途中の要素を削除しにくそうなイメージが

77 :アホ:2001/08/03(金) 00:25
いつパーソナルはダウンロード出来るようになりますか?ウキウキ☆

78 :デフォルトの名無しさん:2001/08/03(金) 01:56
4000人のリストラ発表してから急に出てこなくなっちゃったけど
大丈夫なんだろか?中村さん

79 :デフォルトの名無しさん:2001/08/03(金) 03:44
中村氏がいなくても特に問題は無いことがよく分かる。

きっと夏休みでしょ

80 :デフォルトの名無しさん:2001/08/03(金) 08:16
中村氏がいなくても得に問題はないことがよく分かる。
pちゃんがいないと問題であることもよく分かる。

81 :デフォルトの名無しさん:2001/08/03(金) 08:18
>>76
TListだとランダムアクセス出来なさそうなイメージが。

ところでListというとLispのCellみたいなものを思い出すが、
GCのない言語でああいうものをやると悲劇が訪れるだろうな…

82 :turbo type D:2001/08/03(金) 10:04
名前空間って列挙型にも適応されるものなんでしたっけ?
先頭2文字は結構エレガントに感じるんだけどなあ。

列挙型の名前よりかは(だってあれ重複OKだもの)
ユニット名の重複がありそうで
その点はJava的なフォルダみたいな(フォルダそのものか?)
名前空間がいいんだが...

それより、テンプレートを導入して欲しい。

83 :デフォルトの名無しさん:2001/08/03(金) 10:33
クラス内に列挙型おけたらいいんだけど。

T2ch = class
public
  TMode = (SageMode, AgeMode);
  :
  :
end;

T2ch.SageModeって感じでアクセス。
C++のenumみたいな。

84 :デフォルトの名無しさん:2001/08/03(金) 12:32
>>83
ReadOnly のプロパティ/定数値を返す関数を定義したら?

85 :デフォルトの名無しさん:2001/08/03(金) 12:44
>>80
p 本人?

86 :デフォルトの名無しさん:2001/08/03(金) 14:40
>>82
>先頭2文字は結構エレガントに感じるんだけどなあ。

嘘だろ…あれのどこがエレガント…
たった2文字で何を表現したかが(人間様に)判るのか?

>その点はJava的なフォルダみたいな(フォルダそのものか?) 名前空間がいいんだが...

階層構造な名前空間ね。まぁフォルダと同型。

理想はやっぱりclassとunitの同一視かな。コンパイル言語じゃ苦しいかもだが。
delphiの場合、 classとunitは何らコンパチ性の無い概念であるくせに
classとunitが名前空間を共有してるってのが、痛い。

>テンプレートを導入して欲しい。

ただし導入するなら、C++風の無用に重い奴じゃなく、
GenericJavaみたいに軽量な奴だけ、許可。
C++みたいにprimitive型まで扱い出したらキリが無い。
せっかく「全てのclassの親であるTObject」が有るんだから。

>>83
>T2ch.SageModeって感じでアクセス。
>>84
>ReadOnly のプロパティ/定数値を返す関数を定義したら?

ちょうどいいや。定数を返すClassメソッドを作ったら如何?
もろにそういう呼び出し手順で呼べるし。

しかも子Classで違う値を返したいなんて思ったときも、
delphiなら「Classメソッドの多態」で難なく乗り切れる。

87 :デフォルトの名無しさん:2001/08/03(金) 15:05
>>>83
>>T2ch.SageModeって感じでアクセス。
>>>84
>>ReadOnly のプロパティ/定数値を返す関数を定義したら?
>ちょうどいいや。定数を返すClassメソッドを作ったら如何?
>もろにそういう呼び出し手順で呼べるし。
>しかも子Classで違う値を返したいなんて思ったときも、
>delphiなら「Classメソッドの多態」で難なく乗り切れる。
トリッキー(笑)かっこいーなー

88 :turbo type D:2001/08/03(金) 15:33
> 嘘だろ…あれのどこがエレガント…
> たった2文字で何を表現したかが(人間様に)判るのか?

そうか…もちろん先頭小文字3文字でも4文字でもいいけど
あの頭文字を羅列した命名則が好きなんだ

> 理想はやっぱりclassとunitの同一視かな。コンパイル言語じゃ苦しいかもだが。
> delphiの場合、 classとunitは何らコンパチ性の無い概念であるくせに
> classとunitが名前空間を共有してるってのが、痛い。

若干痛いかな?
ネット時代だと他人の配布しているコンポーネントと
命名がぶつかることは現在もかなりあるだろうね。

関係ないけど1ファイル1クラスの思想はオレは嫌い。

> ただし導入するなら、C++風の無用に重い奴じゃなく、
> GenericJavaみたいに軽量な奴だけ、許可。
C++のテンプレを詳しくはしらないんだけど
重厚な奴はいらない。

89 :70:2001/08/03(金) 16:50
>>74-75
ありがとうございます。
他の部分が問題なのかと思い以下のような最小限でやってみたら
やはり例外が発生してしまいました。

procedure TForm1.FormCreate(Sender: TObject);
var
  NewImgList : String;
  NewBitmap : TBitmap;
  hoehoe : TImageList;
begin
  NewBitmap := TBitmap.Create;
  NewBitmap.Width := 32;
  NewBitmap.Height := 32;

  NewImgList := 'hoehoe';
  hoehoe := TImageList.CreateSize(32,32);
//  hoehoe.AddMasked(NewBitmap, clLime);
  (FindComponent(NewImgList)as TImageList).AddMasked(NewBitmap, clLime);
end;

FindComponent行をコメントアウトし、その上をコメント解除すると
問題ありませんでした。ひょっとしてなにか別のUnitを useしておかなくては
いけないとか?^^;

とりあえず、あらかじめ ImageListを作って
procedure TForm1.FormCreate(Sender: TObject; ImgListTemp: TImageList);
で渡すという方法で処理していますので問題はないのですが、後学のために
問題点を指摘していただけると嬉しいです。^^;

90 :デフォルトの名無しさん:2001/08/03(金) 17:10
>先頭小文字3文字でも4文字
あーおれもやっちゃってるけど、あまり好きじゃないんだよなー。
うーん。


テンプレートは確かにほしい。JAVAっぽやつキボンヌ

91 :デフォルトの名無しさん:2001/08/03(金) 17:11
動的に作成したコンポーネントをフォームに登録していない。
フォームに登録していないから、FindComponent は検索に失敗し、nil を
返す。nil に対するメソッド呼び出しで例外発生。

前に誰かが書いていたけど、(FindComponent(NewImgList)as TImageList) が nil かどうかを
確認してから使いなさい。あまり1行に詰め込むのは汚いしバグの元。
生成コードに対して違いは出ないから、各ステップを変数につんで処理をしなさい。

92 :デフォルトの名無しさん:2001/08/04(土) 02:51
pちゃん復活あげ

93 :デフォルトの名無しさん:2001/08/04(土) 02:53
>>92
なんかあったの?

94 :デフォルトの名無しさん:2001/08/04(土) 04:45
pはくたばったって書いたら出てきたってことはpは2chねらーだな(藁

95 :デフォルトの名無しさん:2001/08/04(土) 06:56
p氏ふっかーつ!!
お久しぶり〜

96 :デフォルトの名無しさん:2001/08/04(土) 07:22
DelphiXの堀さんのページ
http://www.yks.ne.jp/~hori/
が消えてるんですが何があったのでしょうか?

97 :デフォルトの名無しさん:2001/08/04(土) 08:43
>>96
>8月4日2時より緊急メンテナンスを行います。一時、アクセスができなくなりますのでご了承下さい

98 :デフォルトの名無しさん:2001/08/04(土) 19:43
>>87
鳥っ木ーなんじゃなく、それが出来ない他言語たちがダサイだけ。

>>88
>ネット時代だと他人の配布しているコンポーネントと

そやね。ネット時代になったせいで、そういう気配りも
世間に注目(わら)してもらえるようになった。
それ以前の時代なら、「なに贅沢こいてんだ?」で一蹴されちまったとこ。

95年にJavaがあの仕様を引っ提げて出てきたのは、だから衝撃だった。
米国はともかく日本じゃInternet普及はまだまだこれからっていう時期だったからね。

>1ファイル1クラスの思想はオレは嫌い。

たしかにあれも痛い。
Javaだと.classバイナリファイルは人間様にとってはどうでもいい
(しかもアーカイブ作成もサポートされてるし)けど、ソースが…。

>C++のテンプレを詳しくはしらないんだけど

C++のテンプレートは「全ての」型に対応できる。
一方GJのは「Object(DelのTObjectに相当)クラスのサブクラス」だけに対応してる。
だから、テンプレートの仕掛けを実現するために背後で多態を使う、
というような(いわば)ことを、GJはやっているけど、C++はやっていない。
int型とかはObjectじゃないからね。
で、多態を使えないってことは、全てをコンパイラが面倒見るっていうことになる>C++
ちょっと重すぎ。

コンパイラ(を動かすCPU(わら))が速ければいいと思ってる奴もいるようだが、
コードをコンパイルしてバイナリ化するときに、テンプレートを使われた件数(!)に
相当する個数の擬似クラス(?)がバイナリの中に作りこまれることになる。
これはサイズ的にも痛い。だから弱小モバイル計算機にも実は不適。

GJのテンプレートは単に強制キャストに変換されるだけ。簡単。

99 :デフォルトの名無しさん:2001/08/05(日) 00:58
BorlandのDelphiトレーニングコースって
どうですかね??
やっぱ本買って独学ですか?

100 :デフォルトの名無しさん:2001/08/05(日) 01:01
100だ

101 :デフォルトの名無しさん:2001/08/05(日) 01:44
>>98
> コードをコンパイルしてバイナリ化するときに、テンプレートを使われた件数(!)に
> 相当する個数の擬似クラス(?)がバイナリの中に作りこまれることになる。
template の specialization を使うことで、簡単に実装の共有を実現
できます。しかも型安全性を維持しながら、キャストのオーバーヘッド
もありません。

確か「プログラミング言語C++」にサンプルが載ってたと思います
が、もしかして >>98 は「プログラミング言語C++」も規格書も読
まずに文句言ってます?

102 :デフォルトの名無しさん:2001/08/05(日) 03:39
>>98,101
ここは「Delphi相談室」だ。ボケ。

テンプレートの効率に関しては,内部的にマクロ相当で処理している VC の古いやつは
確かに使いもしない実装をばんばんはき出していた。BC も 4 くらいまではそんな感じじゃ無かったかな?
現在の主流の実装では,仮想的な関数定義を作って最後にリンカがまとめるため,爆発は起きない。

実装が共有されるか否かまでは,規格書は何もいっていないよ。

103 :デフォルトの名無しさん:2001/08/05(日) 12:34
>>102
レシーバであるObjectのサイズや、その中でのメンバのオフセット
とかを、コンパイル時じゃなくリンク時に確定するってこと?

104 :デフォルトの名無しさん:2001/08/05(日) 13:29
tech スレいってください
相談室のネタには濃いすぎます

せっかく多スレッドあるんだから棲み分けをっ

105 :デフォルトの名無しさん:2001/08/05(日) 16:40
>>104
C++ 系の方に移りたいんだけどね...

>>103
sizeof( SomeObject ) には VMT テーブルの大きさは入らない。
だから,未使用であることが確定できるメソッドは,存在しなくても破綻しない。
分かるかな?

106 :105:2001/08/05(日) 16:43
無理矢理 Delphi の話に戻すと,
Delphi のリンカは 105 で書いた作業をちゃんとやっている。直接にも間接にも
使っていないメソッドは削除される。

107 :デフォルトの名無しさん:2001/08/05(日) 17:30
>>105
結論としてはVCを使った方がいいってことだよね。
同意するよ。

108 :ななーし:2001/08/05(日) 17:47
Delphiで3Dポリゴンの描画は可能ですか?

109 :デフォルトの名無しさん:2001/08/05(日) 17:50
>>108
無理ですね(まじで)。VCなら可能です。買い換えましょう。

110 :デフォルトの名無しさん:2001/08/05(日) 18:05
>>108
VCでどうやって描画するのですか?

111 :ななーし:2001/08/05(日) 18:05
そうなんですか。
Delは最近やりはじめたんすけど(VCは2年位前からやってます)
けっこうDelでゲームをつくるっていうのをききますが、
どうやってるんだろう・・・

112 :デフォルトの名無しさん:2001/08/05(日) 18:07
>>111
directX使えよ。

113 :てきと〜:2001/08/05(日) 18:08
http://www.google.co.jp/search?hl=ja&safe=off&q=Delphi+%83Q%81%5B%83%80&lr=

114 :ななーし:2001/08/05(日) 18:11
おお!DelphiでDirectXつかえたのか・・・
しらんかった・・・そしてありがとう。

115 :デフォルトの名無しさん:2001/08/05(日) 18:14
外部ライブラリが使える言語ならなんでも使えると思うが……

116 :デフォルトの名無しさん:2001/08/05(日) 18:15
DelphiXはコンポ化されてりょ

117 :デフォルトの名無しさん:2001/08/05(日) 18:17
それこそjavascriptでもな。

118 :デフォルトの名無しさん:2001/08/05(日) 18:35
日曜日の夜なんで,基地外がはびこっているな

119 :デフォルトの名無しさん:2001/08/05(日) 19:00
門外漢には基地外なのかどうかわからない

120 :デフォルトの名無しさん:2001/08/05(日) 22:23
メニュー(TMainMenu) の横にイメージを表示するように設定すると、
アクセラレータキーを表す下線 ( _ ) が表示されません。

開く(O)... ← こんなやつ

どのようにすればいいでしょうか?

121 :デフォルトの名無しさん:2001/08/05(日) 22:28
>>120
VCでなんですが、&Oみたいに&をいれればオーケーです。

122 :デフォルトの名無しさん:2001/08/05(日) 22:28
Captionはちゃんと'開く(&O)...'になってる?

123 :120:2001/08/05(日) 22:47
&記号は入れています。
ちなみにWin2000上だけで起こります。
Delphiのメニュー自体もそのような状態になっています。

124 :120:2001/08/05(日) 22:47
&記号は入れています。
ちなみにWin2000上だけで起こります。
Delphiのメニュー自体もそのような状態になっています。

125 :120:2001/08/05(日) 22:58
120 です。
説明が足りなかったので補足します。
この問題は、Windows2000 上だけで起こります。(Win95/98 では大丈夫)
もちろん、& 記号は入れております。(開く(&O)...etc)
メニューの横にイメージを表している(TMainManu.Images を設定している)場合だけ起こります。
Delphi の開発環境自体のメニューも同様の状態です。
同じような現象を確認された方、おられますでしょうか?

(ミスで連続書き込みしてしまいました。すみません。)

126 :デフォルトの名無しさん:2001/08/05(日) 23:04
>125
いわれてみればDel5,6両方のIDEで出てないね

127 :デフォルトの名無しさん:2001/08/06(月) 00:39
Windows2000 からの新機能で、メニューアクセラレイタの機能を
有効にしたまま下線が消せるようになったんだよ。

menus.pas より
 if Win2K and (odNoAccel in State) then
  DrawStyle := DrawStyle or DT_HIDEPREFIX;

128 :デフォルトの名無しさん:2001/08/06(月) 00:47
odNoAccel と同時に追加された odNoFocusRect には
対応してないようだ、VCL を grep してもひっかからん。

129 :デフォルトの名無しさん:2001/08/06(月) 00:55
JpegユニットのようにusesするだけでTImageから読み出せるようになる
susieのユニットってないですか?

130 :デフォルトの名無しさん:2001/08/06(月) 02:04
>>127
英語版の W2K はデフォルトで下線を消す
日本語の W2K はデフォルトで下線を表示。

ほとんどの人はこのモードを切り替えることはしないんだけど,みんな英語 OS 使っているのかい?

131 :デフォルトの名無しさん:2001/08/06(月) 02:09
>Windows2000 からの新機能で、メニューアクセラレイタの機能を
>有効にしたまま下線が消せるようになったんだよ。

なんの為の機能なのですか?

132 :デフォルトの名無しさん:2001/08/06(月) 02:10
>130のデフォルトってなんか逆のような...
英語の'&File'は下線明示しないとどれだかわからないし
日本語の'ファイル(&F)'は明らかにFってわかるので下線不要。

デフォルトってDelphi固有の話?
だとするとバグだか不適切な仕様だよね。

133 :デフォルトの名無しさん:2001/08/06(月) 02:28
OS のデフォルトで日本語は下線表示がオフだよ

>>131

下線が入っていると見た目が格好悪いから、格好良く見せようとしてるのさ
odNoFocusRect も同じ

134 :デフォルトの名無しさん:2001/08/06(月) 02:44
>>132
物を知らないことをとやかく言う気はないが,いったん物を知ったら少しは自分で調べたらどうだ?
教えて君は辞めてくれ。

135 :120:2001/08/06(月) 06:13
Delphi では、下線表示を強制的にONにはできないよ。

136 :デフォルトの名無しさん:2001/08/06(月) 10:52
>>134
あーん、お前みたいな奴がいるからDelphiユーザーは不親切で
馬鹿ばっかりって言われるんだよ。ボケで糞で時代遅れで
デブで腐ってて、臭くて、オタクで意地っ張りで、ボケてて、
意固地でノー足りんで禿げてて、息臭くて、礼儀知らずで
すぐにスレを作りたがって、世間知らずだって言われるんだよ。
おめーのせいだよ。どっかいけや。

137 :デフォルトの名無しさん:2001/08/06(月) 11:02
逆ギレかよ・・・。

138 :デフォルトの名無しさん:2001/08/06(月) 11:09
>>137
お前みたいなのがいるからこのスレを終了させなきゃいけないんだぞ。
自分勝手なやつめ。どっかいけよ。
お前みたいなのがいるからDelphiはかっこわるくて、誰も使わないんだぞ。
店でも置いてないところがおーいんだぞ。どうしてくれんだよ?

139 :turbo type D:2001/08/06(月) 11:36
遅くなったが
>>98
テンプレートの事、教えてくれてありがとう。

オレのやりたいことは
所詮Variantでも出来ることなのかもしれない
と、ふと気がついた2001年夏でした。

しかし
コンパイルエラーの出ない(と思う)Variantって
使いたくないんだな。変なジレンマだ。

>>104
あっちは、p氏監視スレになっている模様(w

Win2KMenu下線表示ユニットがあると思うんだが…

>>138
おいおい。電波かよ。

140 :デフォルトの名無しさん:2001/08/06(月) 11:40
>>139
このスレの品位を落とすような書き込みは禁止です。
そんなこと書くからみんなdelphi使いは馬鹿だって言うんだよ。
わかるか馬鹿で禿げで臭いって言うんだよ。

141 :127:2001/08/06(月) 11:52
すまぬ、おれが上げたからへんなのが来た気がする

142 :デフォルトの名無しさん:2001/08/06(月) 11:53
natuchu keihou!!

143 :デフォルトの名無しさん:2001/08/06(月) 12:03
>>141,142
このスレの品位を下げるような書き込みはゆるさんぞ。
どっかいけ!

144 :デフォルトの名無しさん:2001/08/06(月) 12:15
>>143
p 氏登場。

145 :デフォルトの名無しさん:2001/08/06(月) 13:16
>>144
帰れ!
Delphiはお前なんて必要としてねーんだよ。
氏ね、ぼけっ。

146 :デフォルトの名無しさん:2001/08/06(月) 13:47
>>141
あんたのせいじゃない。
季節ものだから無視してりゃいいだけ。

147 :デフォルトの名無しさん:2001/08/06(月) 13:56
旬ですか、すこし気が楽になりました。

148 :turbo type D:2001/08/06(月) 14:45
TextWidthで文字幅を求めているんだけど
Italicにすると、TextWidthの値より幅が必要みたいなんだけど
Italicでもフォント描画幅を求める方法ってどうやったらいいの?

149 :デフォルトの名無しさん:2001/08/06(月) 15:07
TextWidth は GetTextExtentPoint32 を呼ぶだけだからな

When returning the text extent, this function assumes that the text is horizontal,
that is, that the escapement is always 0.

だから、イタリックフォントにすると正しい幅を得ることはできない。
GetCharABCWidths API で C 幅を見ればどれだけずらせばよいかわかる

150 :デフォルトの名無しさん:2001/08/06(月) 15:13
function GetTextWitdhWithStyle(Canvas: TCanvas; s: String);
var
storeStyle: TFontStyles;
 abcNormal: TABC;
 abcItaric: TABC;
begin
storeStyle := Canvas.Font.Style;

 Canvas.Font.Style := [];
 GetCharABCWidths(Canvas.Handle, Ord(s[Length(s)]), Ord(s[Length(s)]), abcNormal);

 Canvas.Font.Style := storeStyle;
 GetCharABCWidths(Canvas.Handle, Ord(s[Length(s)]), Ord(s[Length(s)]), abcItaric);

 Result := Canvas.TextWidth(s) - (abcItaric.abcC - abcNormal.abcC);
end;

こんな感じかー?

151 :デフォルトの名無しさん:2001/08/06(月) 15:25
おおむねそんな感じだが、その関数名なら A 幅の調整もやれよ

152 :turbo type D:2001/08/06(月) 15:45
@AB
それぞれ、微妙に違うんだな。
@と互換性が欲しいとすると、普通にAを重ねて書けばいいのか。

procedure TForm1.Button1Click(Sender: TObject);
begin
 //@
 Image1.Canvas.TextOut(0, 0, 'AAABBB');

 //A
 Image1.Canvas.TextOut(0,
  Abs(Image1.Canvas.Font.Height), 'AAA');
 Image1.Canvas.TextOut(
  Image1.Canvas.TextWidth('AAA'),
  Abs(Image1.Canvas.Font.Height), 'BBB');

 //B
 Image1.Canvas.TextOut(0,
  2*Abs(Image1.Canvas.Font.Height), 'AAA');
 Image1.Canvas.TextOut(
  GetTextWitdhWithStyle(Image1.Canvas, 'AAA'),
  2*Abs(Image1.Canvas.Font.Height), 'BBB');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 FontDialog1.Font.Assign(Image1.Canvas.Font);
 if FontDialog1.Execute then
 begin
  Image1.Canvas.Font.Assign(FontDialog1.Font);
 end;
end;

>>149-151,
厨房撲滅にご協力サンクス、

153 :デフォルトの名無しさん:2001/08/06(月) 15:46
>>151
うそ教えんなよ。おまえなー。だからDelphi使いは陰険だって
いわれるんだよ

154 :デフォルトの名無しさん:2001/08/06(月) 16:22
@とBが違うのは当然だろ

GetTextWitdhWithStyle は最後の文字に対して必要になる余白を含め
た幅を求める関数だ、次の文字の A 幅に対して発生する共有位置の先
頭を返す関数じゃねーよ

Bを@と同様になるように調整するためには 'A' の C 幅と 'B' の
A 幅と Overhang 幅をつかって計算するんだよ

155 :turbo type D:2001/08/06(月) 16:59
A幅/C幅/Overhang 幅っていうのはFontの専門用語なの?
ややこしい話ですな。

156 :デフォルトの名無しさん:2001/08/06(月) 18:04
コンポーネントパレットのsamplesのタブの所にある
ShellTreeViewというコントロールってどうやって使うのでしょうか?

ひととおりヘルプやマニュアルは見たのですが載ってないようなんです。
カスタムコントロールのサンプルって事ですか?昨日から始めた
ばっかなんで全然わけわかってないですけど

157 :デフォルトの名無しさん:2001/08/06(月) 19:24
Sampleタブの中身は伝統的にHELPはつかないです。

158 :デフォルトの名無しさん:2001/08/06(月) 21:13
>>157
Borland の人?

159 :デフォルトの名無しさん:2001/08/06(月) 23:00
あんなもん、ヘルプみんでも分かるだろ。

160 :デフォルトの名無しさん:2001/08/07(火) 03:09
へるぷみん
ぷらすみん
もんだみん

161 :デフォルトの名無しさん:2001/08/07(火) 07:10
フリーのデルファイコンパイラって・・・。ないよね?

162 :デフォルトの名無しさん:2001/08/07(火) 07:49
>>161
殆どDelphi2の頃のソースならある程度コンパイル出来るのはあるよ
http://www.brain.uni-freiburg.de/~klaus/fpc/fpc.html

ただコンパイル速度や、出来上がるサイズはDelphiが圧倒的だけどね

163 :デフォルトの名無しさん:2001/08/07(火) 10:08
>>161

Delphi6 Personal


まだでてないけどな

164 :デフォルトの名無しさん:2001/08/07(火) 11:13
日本語版のKylixOpenとDelphiPersonalのダウソドーロまだ?

いつから?

165 :デフォルトの名無しさん:2001/08/07(火) 11:35
>>161
英語版はもうでてる

166 :デフォルトの名無しさん:2001/08/07(火) 12:01
>>165
どこでGETできる? URLきぼん

167 :デフォルトの名無しさん:2001/08/07(火) 14:47
>>166
borlandのサイトにまんまあるんだけど(;´д`)
http://www.borland.com/delphi/personal/

168 :161:2001/08/07(火) 23:20
レスありがとう!
一応落としてみます。>お二人がた

169 :PG初心者:2001/08/08(水) 14:04
VBでいうISNUMERICと同じような関数はデルファイに用意されているのでしょうか?

170 :デフォルトの名無しさん:2001/08/08(水) 14:20
ない。

171 :デフォルトの名無しさん:2001/08/08(水) 14:25
>>169
ちょっと考え方が違うから完全に同等のものは無いけど
A) Val 手続きを使う
B) StrToxxを使って例外をキャッチする

という方法で対応出来ると思うよ

172 :PG初心者:2001/08/08(水) 14:34
へーなるほど
やってみます
ありがとう

173 :70:2001/08/08(水) 15:46
ども、実はいまだに FindComponentでつまづいてます。
ヘルプの「FindComponent例」を試すと確かにエディットボックスが
作成出来るのですが、それを直接

MyEdit1.Left := 32;
のようにするとエラーが出てしまいます。
TEdit(FindComponent('MyEdit1')).Left := 32;
はできました。

TEdit.Create(self).Name := 'MyEdit1'l;
というふうに作ったものは FindComponent経由でしか
アクセスできないのでしょうか?

以前91さんがおっしゃっていた「フォームに登録していない」
というのは Parentプロパティのことなのでしょうか?

174 :デフォルトの名無しさん:2001/08/08(水) 16:09
>MyEdit1.Left := 32;
>のようにするとエラーが出てしまいます。
>TEdit(FindComponent('MyEdit1')).Left := 32;
>はできました。

>TEdit.Create(self).Name := 'MyEdit1'l;
>というふうに作ったものは FindComponent経由でしか
>アクセスできないのでしょうか?

そりゃ当然だ。
エラー(ところでこれはコンパイルエラーだよね?質問するなら明記してね)が
出るのは、そういう「変数」名が存在しないからだ。

たまたまdelphiのComponentは、それ自体(およびIDE)の仕掛けとして、
DragDropしたインスタンスは、NameプロパティとPascalソース上の変数名が
「連動する」ように作られている。これが所謂2way開発って奴ね。
これのおかげで、Nameを実行時に動的に検索する(=FindComponent)ことも
ソースに変数名を書くことも、同じようにやれるわけだ。

が、DragDropじゃなくて実行時にプログラムによってCreateが指示
されたインスタンスについては、実行時の仕掛け(FindComponent)はともかく、
ソースが追随してくれるってのは逆立ちしても無理。

蛇足:
Smalltalkみたいなインタプリタ言語なら、変数名自体を実行時にいじることが
出来る(かも知れない)のだが、静的コンパイル言語では無理。
それを補い、便利に使えるようにした、という仕組みが2way開発。

てゆーか、生成したコンポ(の参照)を変数に保持したらいいのでは?
MyEdit1とかの変数を予めFormのメンバとして作っておき、
MyEdit1:=TEdit.Create(self); とかってやれば、
以降は(MyEdit1を殺すまでは)MyEdit1という変数名でアクセスできるよ。

175 :デフォルトの名無しさん:2001/08/08(水) 16:18
174さんと同じことだけど

TFormのメンバ^にEdit1: TEditと書かれてあるよね。
あれの真似を自分でしなければならない。

動的生成コンポーネントにNameを指定しようとする方が
どうかしてる。
普通はTListやTObjectList array of TEditに確保しておく。


>Smalltalkみたいなインタプリタ言語なら、変数名自体を実行時にいじることが
>出来る(かも知れない)のだが
http://www.shiro.dreamhost.com/scheme/trans/beating-the-averages-j.html
ここのLispの話も同じことなの?

176 :デフォルトの名無しさん:2001/08/08(水) 17:30
>>169
Delphi6なら
function IsNumeric(c: Char): Boolean;
がIdGlobalにあるとHelpにのってる
使ったことはないしVBとおなじかもしらん。

177 :70:2001/08/08(水) 17:31
>174-175
なるほど、コンパイル時にそのオブジェクトが存在しないから
コンパイルエラーが発生していたのですね。
普段使っているのがPerlなのでその概念が頭の中にありませんでした。

TListを使うことでうまくできました。ありがとうございますっ!!

178 :turbo type D:2001/08/08(水) 19:36
こんばんは
D6のIsNumericってIndy製です?

StrToIntのソースを見るとこんか

  function IsNumeric(S: String): Boolean;
  var
   E, V: Integer;
  begin
   Val(S, V, E);
   if E <> 0 then
    Result := False
   else
    Result := True;
  end;

ところで質問。
HELPのValのところでこういう記述になっている
procedure Val(S; var V; var Code: Integer);

SやVにはなぜ型指定がないのでしょうか?
Variant?

あと、ソースを眺めているとよく思うのですが
Valのソースを見ようとすると
Systemユニットにジャンプして
どこにValがあるかわからないのは
どうして?

どうやってValは定義されているの?

179 :デフォルトの名無しさん:2001/08/08(水) 20:03
>SやVにはなぜ型指定がないのでしょうか?
「型なしパラメータ」で検索してみれ。

180 :デフォルトの名無しさん:2001/08/08(水) 22:23
>>178
APIつかって
if ((not IsCharAlpha(c)) and IsCharAlphaNumeric(c)) then
は?

181 :デフォルトの名無しさん:2001/08/08(水) 22:34
>>180
日本語環境じゃ使いにくいな IsCharAlphaNumeci では DBCS の判断を
絡めないといけなくなるので IsCharAlphaW/IsCharAlphaNumericW を
呼ぶことにはなるだろうけど、大元の話題が半角数字だけを調べたいので、
'1' が Numeric だと判断されるので NG の可能性が高い。

182 :デフォルトの名無しさん:2001/08/08(水) 22:42
>>175
>ここのLispの話も同じことなの?

微妙に違う。Lispのあれは(あえてdelphi風に言い喩えるなら)言わば、
「コンパイル結果」をプログラムで生成できる、っていう感じだ。
「ソース」の生成とは違う。

変数(みたいなもの)をプログラムで作ることが出来るんだけど、
Lispではソースそのものの字面上の「変数」と切り離した形で
中間コード(とでもいうか)の上での「変数」のようなものがあり、
それをプログラムからコントロールできる。

delphiだと多分同じような情報をIDEが持っているんだろうな。
ついでにいえば、FindComponentでNameで問い合わせられるわけだけど、
あれも似たようなものだな。それを推し進めて言語処理系そのものに
合体させちゃったのがLispとかのやり方。

>>177
>コンパイル時にそのオブジェクトが存在しないから

念のため指摘しとくけど、「オブジェクト」じゃなく「変数」だぞ。
変数には、Objectの参照(Createメソッドの返し値とか)を「代入」して
はじめてObjectが関連づけられる。それまではnilまたは出鱈目な値だ。

そう。あくまで関連付けなんだ。変数そのものにオブジェクトが入っているのではない。
ここ覚えておくとイツの日か大失敗を未然に防げる日が来るぞ。

183 :70:2001/08/09(木) 00:26
>>182
オブジェクトではなく変数。
なるほど、自分の解釈が微妙に違っていたことに気付きました。
肝に銘じておきます。

184 :デフォルトの名無しさん:2001/08/09(木) 01:01
>>183
でも、あの説明だけで
TListに代入する事がわかるとは
センスあるよ。

>>182
Thanx

185 :デフォルトの名無しさん:2001/08/09(木) 20:13
あのーカルネージハートのようなビジュアル言語ってDelphiで作れますか?

186 :デフォルトの名無しさん:2001/08/09(木) 20:16
つくったことあるぞ

187 :デフォルトの名無しさん:2001/08/09(木) 20:33
>>186
アリガトです。夢が膨らみます。

188 :デフォルトの名無しさん:2001/08/09(木) 23:41
>>163
Delphi6 Personalなら

LAOX COMPUTER館 ダイレクト
http://direct.laox.co.jp/

で売ってるよ

ソフトウェア→Windowsビジネス→開発言語
で出てきます
http://direct.laox.co.jp/ec/EcTRMC.dll?FUNC=SEARC_PDTL00&Kind=0&ID=319543

189 :デフォルトの名無しさん:2001/08/09(木) 23:52
>>188 フリーじゃないやん。そのうちなるけど。

190 :デフォルトの名無しさん:2001/08/10(金) 00:22
列挙型などで、範囲外の演算をしてもエラーにならないんですが、
どうすれば型範囲外エラーをだしてくれますか。

例えばこんなことしたときにエラってもらいたい。
 TBool = (bTrue,bFalse);
 ...
 B := bTrue;
 Inc(B);
 Inc(B);
 Inc(B);

191 :190:2001/08/10(金) 00:25
すんません
プロジェクト→オプション→コンパイラに
もろに設定ありましたね。

192 :デフォルトの名無しさん:2001/08/10(金) 01:34
>>189
たしか9月末までにはダウンロードできるようになるはず

193 :デフォルトの名無しさん:2001/08/10(金) 03:10
>>19
雑誌の付録に付くとか?

194 :デフォルトの名無しさん:2001/08/10(金) 09:48
DelphiやKylixフリー版の公開で得するのは雑誌社と思われ

195 :デフォルトの名無しさん:2001/08/10(金) 14:07
> Borland Mail News◆米国ボーランド本社へ、日本のユーザーの声を!
>
> □■□■
> ■ 日本のユーザーにとって必要なものは...
>
> 米国ボーランドの本社では、「日本のユーザーにとって必要なことは何か」につ
> いて、皆様の考えを知りたがっています。
> そこで、メンバーの皆様にご協力いただいてアンケートを実施し、その結果を改め
> て「日本のユーザーの声」として、米国本社に提供したいと考えています。
>
> 今回は「日本語化」に関するアンケートです。
> 皆様がお使いになっているボーランド製品について「日本語化されていて良かった
> と思うこと」を選択していただくだけの簡単なものです。
> ご協力をお願いいたします!
>
> 【日本語化に関するアンケート】
>  ⇒ http://forums.borland.co.jp/poll/poll.dll/q?q=japanization

196 :PG初心者 169:2001/08/10(金) 15:15
整数チェックは確かにVAL手続きでOKでした。ありがとうございました
さらに質問
小数点を含んだチェックはどうすれば?

197 :デフォルトの名無しさん:2001/08/10(金) 15:18
Val でいいよ > 少数
0x40 や $40 という表記だって大丈夫 > Val

198 :PG初心者 169:2001/08/10(金) 15:24
あっそうなの?
ありがとう。

199 :デフォルトの名無しさん:2001/08/10(金) 17:22
逆に
IsIntやIsFloatを作るにはどうしたらいいのでしょう??

例外をtry exceptでキャッチせずに出来ます?

200 :デフォルトの名無しさん:2001/08/10(金) 18:00
>>199 出来ます。 方法は沢山あります
単純に
if not s[i] in ['0'..'9'] then Result := false;
を繰り返すのでいいのでは?

201 :デフォルトの名無しさん:2001/08/10(金) 18:25
function IsInt(const s: String): Boolean;
begin
 Result := MatchesMask(s, '[1-9][0-9]*');
end;

と書けたらいいんだけどな、* はこういう用途に使えない

202 :デフォルトの名無しさん:2001/08/10(金) 18:32
>>201  別に先頭ゼロでも良いのじゃないかな?

203 :デフォルトの名無しさん:2001/08/10(金) 18:32
そういうことじゃなく、VCLと同じ実装でやりたいんだけど…

204 :デフォルトの名無しさん:2001/08/10(金) 18:54
>>203
無理。

205 :デフォルトの名無しさん:2001/08/10(金) 20:01
ストリーミングしよう!(なぢょ

206 :デフォルトの名無しさん:2001/08/10(金) 21:54
>>202
先頭にゼロを含めると何か変化するのか?

207 :Delギコ:2001/08/10(金) 22:47
 ∧ ∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ゚Д゚)  <  StrToIntは先頭ゼロでもいいのだよ ヤマトの諸君
  |∪ |つ∀ \___________
  |  |
  U U
  ワイン トイエバ デスラ-

208 :デフォルトの名無しさん:2001/08/10(金) 23:42
>>201

が言いたいことは MatchsMask の * は「任意の文字の繰り返し」だから
数字の連続を検出する用途には使えないってことだろ。

>>202>>207 はそれがわかってないんじゃないかな?

209 :デフォルトの名無しさん:2001/08/10(金) 23:57
>>208
ん?ああ、delのはいわゆる正規表現とは別物なんだっけ。
いわゆる正規表現なら「[1-9][0-9]*」は
お望みの意味になるんだがなあ…

210 :デフォルトの名無しさん:2001/08/11(土) 01:42
  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚) < >>208 * は任意タン "何か"?
Π ̄ ̄ ̄| \_____________
|つニボシ()
| |___.|
  ∪∪
  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚) < Perl5互換の正規表現エンジン使える?
Π ̄ ̄ ̄| \_____________
|つセイ〜キ()
| |___.|
  ∪∪
http://www2.big.or.jp/~osamu/Delphi/MyLibrary.htm

211 :デフォルトの名無しさん:2001/08/11(土) 02:00
BRegExp 使うくらいなら http://www.activestate.com/
ActivePerl を使うほうが Perl5 の正規表現の全能力を生か
せて良い、外に DLL が必要になるのはいっしょだしな

外部 DLL がイヤなら正規表現エンジンとしてはすこし弱いが
DelphianWorld の Awk/Grep コンポーネントあたりで

212 :デフォルトの名無しさん:2001/08/11(土) 08:25
function IsInt(s:string):boolean;
 function get:char;
  begin
  if s<>'' then begin result:=s[1]; delete(s,1,1);end
  else abort;
 end;
begin
 try
 if s<>'' then
  case get of
   '$': while get in ['0'..'9','A'..'F','a'..'f'] do ;
   '0'..'9': while get in ['0'..'9'] do ;
  end;
 Result:=false;
 except Result:=True;end;
end;

213 :212:2001/08/11(土) 08:46
スマン '-'を忘れていた。 足してくれ
function IsFloat(s:string):boolean;
function get:char;
begin
if s<>'' then begin result:=s[1]; delete(s,1,1);end
else abort;
end;
procedure exp1;
begin
if get in ['-','0'..'9'] then
while True do
case get of
'0'..'9': ;
else exit;
end;
end;
procedure sub2;
begin
while True do
case get of
'e','E': begin exp1;exit;end;
'0'..'9': ;
else exit;
end;
end;
procedure sub1;
begin
while True do
case get of
'e','E': begin exp1;exit;end;
'.': begin sub2;exit;end;
'0'..'9': ;
else exit;
end;
end;
begin
try
if s<>'' then
case get of
'-': if get in ['0'..'9'] then sub1;
'0'..'9': sub1;
end;
Result:=false;
except Result:=True;end;
end;

214 :デフォルトの名無しさん:2001/08/11(土) 09:21
>>212
199の希望は
>例外をtry exceptでキャッチせずに出来ます?
なのに思いっきり except 使ってるじゃないか

まあvalかexcept使うのに何で不満があるか判らんけどさ

215 :デフォルトの名無しさん:2001/08/11(土) 22:42
Form1で[実行|実行]をクリックするとForm2.ShowModalします。
Form2がアクティブになると重い処理を行います。
処理が終わるとForm2.は.Closeします。

そこで質問なのですがこの「重い処理」はどこに記述すべきでしょうか?

例えばこのようなコードです

count := GetTickCount;
while GetTickCount - count < 10*1000 do
begin
 // 重い処理
 Label1.Caption := IntToStr(GetTickCount);
 Application.ProcessMessages;
end;
Close;

Form2Activateに記述するとなぜかCloseが無視されます。
Timer1Timerに記述するとうまくいきますがあまりスマートではないように思います。
フォームが最低一回描画された直後に呼び出されるようなイベントハンドラがあればよいのですが。

216 :デフォルトの名無しさん:2001/08/11(土) 22:51
OnActivate で PostMessage してそのメッセージハンドラで
処理してから Close かな

あとでボタンを押して実行するような形式に変更する時も楽だし。

OnActivate 内で処理するなら、Close の変わりに WM_CLOSE を
PostMessage するのが楽だろう。

217 :215:2001/08/11(土) 23:20
>>216
FormActivateのCloseを
PostMessage(Self.Handle, WM_CLOSE, 0, 0);
に変えてみたところうまくいくことを確認しました。

が、いままでメッセージ関連を避けてきたため
なぜCloseがだめでWM_CLOSEがよいのかが理解できてません。
というわけでこの際一通りお勉強してみます。
ありがとうございました。

# なぜこのようなありふれた(?)処理をVCLの枠組みの中で
# 実現できないのか少々疑問ではありますが。

218 :デフォルトの名無しさん:2001/08/12(日) 00:27
ShowModal で表示されたモーダルなフォームは、ModalResult に
0 以外の値が設定されると終了する、これはわかるね?
だから、ボタンなどの ModalResult を mrOk なんかに設定して、
そのボタンを押すとフォームは閉じる

Close メソッドはフォームを閉じるメソッドだけど、モーダルの
時は ModalResult := mrCancel; を実行するようになっている。
だから、結果的にフォームは閉じるわけだ。

ところが、OnActivate の時はそうはいかない、これは処理の順
序が

・ShowModal を呼び出す
・ShowModal が OnActivate を呼び出す
・ModalResult を 0 にする
・ModalResult が 0 以外になったらフォームを閉じる

という順番に行われているからなんだよ

219 :デフォルトの名無しさん:2001/08/14(火) 00:15
>>214
例外を使わないという希望の理由はそもそも何だろう?
パズル挑戦的な意味以外に感じないけど。
デバッガでひっかけられるのがウザイとかいう話?(ならば例外クラスを新調すればいい)

>>218
その説明m(__)mを読んで思ったのだが、「Close予約コンポーネント」
なんてものが作れそうに思える。
そのコンポにClose予約をしておくと、そのコンポが次にMessage処理されたときに
自分(が載ってるForm)をCloseされる、っていう感じの。
駄目?

220 :デフォルトの名無しさん:2001/08/14(火) 03:50
TDrawGridを継承してコンポーネント作っているんですが、
このスクロールバーのグリッド部分を相対サイズにする方法はないですか?

221 :デフォルトの名無しさん:2001/08/14(火) 04:06
こんだけでいいんじゃないの?

function IsInt(s:string):Boolean;
var
 i:extended;
 code:integer;
begin
 result:=false;
 Val(s,e,code);
 if code > 0 then exit; if trunc(e)<>e then exit;
 result:=true;
end;

222 :デフォルトの名無しさん:2001/08/14(火) 09:35
>デバッガでひっかけられるのがウザイとかいう話?(
そう。例外クラス新調しても
StrToIntつかうと
EConvertErrorは発生するでしょ。

ブレークポイントで例外無視させることは出来るが
いまいち邪道だ。

223 :デフォルトの名無しさん:2001/08/14(火) 09:44
という事は >>212-213 が使ってる abort はOKなのね?

224 :デフォルトの名無しさん:2001/08/14(火) 09:51
そういえば、そうだな。

225 :デフォルトの名無しさん:2001/08/14(火) 09:53
     ∧ ∧__  
    /(*゚Д゚)っ/\
  /| ̄∪ ̄ ̄|\/
    |____|/
>>220
TDrawGridのScrollbarの真上に
TScrollbarをはっ付けたらなんとか可能
ヤラシイ実装だがな。

226 :デフォルトの名無しさん:2001/08/14(火) 10:13
abort で Except って多用していいもんなの?

227 :デフォルトの名無しさん:2001/08/14(火) 10:15
というか abort で”正常でした” って意味が帰るのがなんか嫌なんだけど?

228 :デフォルトの名無しさん:2001/08/14(火) 10:43
>>215
> Form1で[実行|実行]をクリックするとForm2.ShowModalします。
> Form2がアクティブになると重い処理を行います。
> 処理が終わるとForm2.は.Closeします。
>
> そこで質問なのですがこの「重い処理」はどこに記述すべきでしょうか?
そもそもそれはモーダルダイアログが行う処理なのか?
単に処理経過の表示とかだけなら、ダイアログとは独立したところに
記述すべきだと思うが。

229 :デフォルトの名無しさん:2001/08/14(火) 11:12
>そもそもそれはモーダルダイアログが行う処理なのか?

いいこと言った!

たしかに、この視点を忘れるとドキュスパゲティプログラムになっちゃうな。
RADで陥りやすい罠だ。みんなも気をつけよう!

MVCなんてなものも有ることだし、処理やデータは
本来はフォームから出来るだけ分けるべきものなんだよな。

RADだとついついフォーム(幾つかあるうちのドレか)にいれないとならんような
気分になっちゃうけど、そんなの気のせい。
「どこに?」と問われたら、DataModuleと答えるのが理想、ですかね。

Java等の連中がデザパタとか大騒ぎしてやってるわけじゃん。
綺麗な設計しましょうって。
あの方向性を漏れたちも考慮しとかないと、気付いたらDel界はゴミコードの山、ってことに成り果てかねない。
それは不味い。漏れたちにとって、凄く。

SmalltalkにはMVC Inspectorとかいうものが有るらしい。
漏れも名前を聞いただけで見たことは無いんだが、名前を聞いた瞬間に衝撃受けた。
名前だけで十分衝撃だということだ。
Object1つのInspectをするだけ(=Delの現状)で満足しちゃアカンのだな、と。

230 :デフォルトの名無しさん:2001/08/14(火) 11:36
>>229
やたら偉そうなんだけど,あんた誰や?

231 :デフォルトの名無しさん:2001/08/14(火) 11:48
実装をどこに置くかといえば、コンポーネントプログラミングとしては

非ビジュアルコンポーネントを作ってそのイベントハンドラに書く

が正解じゃないのかね。
「だらだら処理をできる非ビジュアルコンポーネント」を用意するわけ。

それをどこに貼り付けるか、という話になればフォームの上やデータモ
ジュールの上ということになるのでは。

いきなりデータモジュールに書いてしまうと再利用がコピペになってし
まうだろ? 再利用できそうな部分はコンポーネント化して ぽとぺた
にしておくのがコンポーネントプログラミングの生産性アップだから。

そのコンポーネントではイベントを別スレッドで簡単に呼び出せるとい
いな、GUI に透過的に安全なアクセスを提供しにくいから無理かね。

232 :デフォルトの名無しさん:2001/08/14(火) 11:52
    ∧ ∧  ・・・・。
    ( ゚Д゚)
  〜( uu)

>「どこに?」と問われたら、DataModuleと答えるのが理想、ですかね。
そうでもない。
通常の関数処理ならUNITで
データ構造としてのオブジェクトが必要なら
UNITにクラスを作成してそれを使おう。
単なる機能を実装するためだけに
DataModuleのメソッドとしてのは微妙に変(あくまで微妙)

DataModuleは
機能TComponentを沢山保持するときに使う時に用いるのが正解。
だから、DBでよく使われるんだね。

>MVCなんてなものも有ることだし、処理やデータは
>本来はフォームから出来るだけ分けるべきものなんだよな。

実際、どこまでVisualコンポーネントに機能を持たせるかという事は
難しい問題を含んでいるけど
完全にVisualと非Visualとを切り分けて実装するのもナンセンス
と、ネコは思うよ。

自然な思考で、
・これはVisual部分に含んでしまおう
・これはVisualとは分離だな
という嗜好に基づいて実装するのが綺麗なんだな。
だいたい、VCLやDelphianWorldのコンポーネントは
そうなっているのでDelphiやってれば自然に身につく。

このGUIアプリ構築で自然に身につくOO指向がネコは好き。

233 :>>225:2001/08/14(火) 12:35
TScrollBarって、相対サイズにできるんですか?

234 :Delギコ:2001/08/14(火) 12:41
 ∧ ∧
 (,, ゚Д゚) Min,Max,PageSize
 (|  |つ
〜|  |
  ∪∪ "相対サイズ"の意味、よくわからん

235 :>>234:2001/08/14(火) 12:48
TScrollBar のグリッド部分。
例えば TMemo のスクロールバーだったら、
全体の文字領域に対する 実際の表示領域の割合で
グリッドの長さが変化するでしょ。

236 :ModelViewユニット:2001/08/14(火) 12:59
unit ModelView;

interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Contnrs;

type
 TFormView = class(TForm)
 protected
  procedure UpdateModel(Sender: TObject; Args: array of const); virtual; abstract;
 end;

 TModel = class(TObject)
 private
  FItems: TObjectList;
 protected
  property Items: TObjectList read FItems;
 public
  constructor Create; virtual;
  destructor Destroy; override;

  procedure AddView(View: TFormView);
  procedure DeleteView(View: TFormView);
  procedure DeleteAllView;

  procedure NotifyUpdate; overload;
  procedure NotifyUpdate(Sender: TObject); overload;
  procedure NotifyUpdate(Sender: TObject; Args: array of const); overload;
 end;

implementation

237 :ModelViewユニット(続き):2001/08/14(火) 12:59

{ TModel }

constructor TModel.Create;
begin
 FItems := TObjectList.Create(False);
end;

destructor TModel.Destroy;
begin
 FItems.Free;
 inherited;
end;

procedure TModel.AddView(View: TFormView);
var
 i: Integer;
begin
 i := Items.IndexOf(View);
 if i < 0 then
  Items.Add(View);
end;

procedure TModel.DeleteAllView;
begin
 Items.Clear;
end;

procedure TModel.DeleteView(View: TFormView);
var
 i: Integer;
begin
 i := Items.IndexOf(View);
 if i >= 0 then
  Items.Delete(i);
end;

procedure TModel.NotifyUpdate;
begin
 NotifyUpdate(Self,[]);
end;

procedure TModel.NotifyUpdate(Sender: TObject);
begin
 NotifyUpdate(Sender,[]);
end;

procedure TModel.NotifyUpdate(Sender: TObject; Args: array of const);
var
 i: Integer;
begin
 for i := 0 to Items.Count-1 do
  (Items[i] as TFormView).UpdateModel(Self, Args);
end;

end.

238 :Delギコ:2001/08/14(火) 13:01
  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚) < >>233=235 TScrollbarでさっさと試せ
Π ̄ ̄ ̄| \_____________
|つでしょ ()
| |___.|
  ∪∪

239 :236,237:2001/08/14(火) 13:06
RubyのObserbableのパクリです。長くてゴメン。

個人的にはDelphiではModel-Viewが常に良いわけではないと思ってます。
というのもTTreeView, TListViewなどのコンテナコンポーネントがモデル的な性質を持っているからです。
これを無視してModel-Viewを導入するとModelとViewで同じ情報を二重に管理する必要が出てきます。
これはModelに対するViewが1つしか無い場合はまったく無駄になってしまいます。

240 :ぐは:2001/08/14(火) 14:47
del6パーソナルってクラス補完機能ないの?

241 :デフォルトの名無しさん:2001/08/14(火) 14:49
>>238
それらしきプロパテーもメソドも無いけど…

242 :Delギコ:2001/08/14(火) 14:57
   ∧ ∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ( ゚Д゚)   < >>241 >>234をよくミネフジコ
.=| |==U=U==.| |=  \___________
 | | |  |  | |
 | | ノU U.  | |
 | |      .| |

 with Scrollbar1 do
 begin
  Min := 0;
  Min := 100;
  PageSize := 50;
 end;

Delphi5だけどな。

243 :デフォルトの名無しさん:2001/08/14(火) 14:58
まさかそんなことhがああああああああああああああああ
いままmでのくろうはなんだkったんだあああああああああああああ

244 :Delギコ:2001/08/14(火) 15:45
>>243
    いたいの
     いたいの・・・
               ∧ ∧
               (゚Д゚ )
           /ゝ/ゝ⊂ U|
       ノ ~ ~ ~; ゚Д゚; |   〜′
    __ ;~ UU~;~;じ;;J~;_ U U
  ⊂ _ __ __ _⊃

        ↓
    
      とんでけ!
              ∧ ∧∩
              (゚Д゚ )ノ
           ∧ ∧ |  つ
     〜′ ̄ ̄(,,゚Д゚) | ⊂)〜
    __ UU ̄ ̄U U __ ∪
  ⊂ _ __ __ _⊃

245 :デフォルトの名無しさん:2001/08/15(水) 15:41
>>232
>データ構造としてのオブジェクトが必要なら
>UNITにクラスを作成してそれを使おう。
>単なる機能を実装するためだけに
>DataModuleのメソッドとしてのは微妙に変(あくまで微妙)

ん。そりゃまぁそうだ。
ただ、そのObjectのコンテナはドレよ?という問題がある。
コンテナなしでやるのはウンザリだし、
Formをコンテナにしちゃうんじゃ元の木阿弥だし、
UNITだけ存在するという作り方だとコンテナ(とその中のObjectたち)の寿命管理が面倒。
ObjectをDataModuleにぶら下げるのが幸せでないかぃ?

>DataModuleは
>機能TComponentを沢山保持するときに使う時に用いるのが正解。
>だから、DBでよく使われるんだね。

それ「だけ」に向いている、というわけじゃないと思うが>DM

#ところで「機能TComponent」ってのは、ここでは状態を持たないComponentという意味、だよね?

>実際、どこまでVisualコンホ゜ーネントに機能を持たせるかという事は
>難しい問題を含んでいるけど

del(VCL)自体がそういう考え方を半ば否定してしまっている「ので」
更に難しくなってる、という面はあるね。支援してくれてない。

246 :デフォルトの名無しさん:2001/08/15(水) 15:47
>>231
>非ビジュアルコンポーネントを作ってそのイベントハンドラに書く
>が正解じゃないのかね。
>「だらだら処理をできる非ビジュアルコンポーネント」を用意するわけ。

ここでいう「コンポを作る」ってのは、TComponentを継承したClassを作る、
という意味のだよね?
#TFrameを使っての再帰的RADの話なら以下は無かったことにしてくれ。

だったらそれは、「今必要としている」状態を記憶する手段が無いね。
手続きは書ける(それとてコンテナ上でぐちゃぐちゃになっちゃう)けど。

rubyみたいに属性を実行時に後付けできる言語ならともかく、
そうでないなら、状態をどこに記憶するの?という問題が生じるだろう。

>いきなりデータモジュールに書いてしまうと再利用がコピペになってし
>まうだろ?再利用できそうな部分はコンポーネント化してぽとぺた
>にしておくのがコンポーネントプログラミングの生産性アップだから。

でも、あっち世界風に言うところの「Scripting」が困るんだよな、それ。
コンポとコンポの間を繋ぐコーディングが。
あと、間を繋ぐ「状態(を保持する変数)」も。

247 :デフォルトの名無しさん:2001/08/15(水) 18:18
「あっち世界」の単語を使わずに delphian に分かるように書き直してくれ

248 :Delギコ:2001/08/15(水) 19:04
 なぜにsage進行
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
   ∧ ∧  ドクショ
   ( ゚Д゚)
   ノつl⌒⌒l
 〜(._[ ̄ ̄ ̄.]
      ̄ ̄ ̄
微妙と書いたのはDMはそれにも使うだろうって事。
DMをそういう意味で便利で使えるカモ。

>>229の内容では
MVCを推薦する&Formの処理を安易にDMに移動するような事を
逝っているわけでそれは意味不明ではある。

クラスを機能別に分けて作っていって
そのコンテナにDMを使うのならわかるが
(コンテナとしてFormでもいいとは思うが)

DMのメソッドを増やしても特な事はなにもなかろう?
処理内容によってはDMを沢山用意しなければならなくなるし

理想をいうと
処理部分は自作クラスユニットで定義しまくって
その連携で機能を実装し、そのObject保持にDMを使う
という所かな。

なんか、229と245の発言内容レベルが異なるんだが
いろいろ考えたから?

ネコなのでヨクは氏らんが。
VCLのActionはMVCをむしろ肯定していることないかな?
設計時のVisual操作で必要なObjectを作成できるというのは
驚くべき機能じゃない?

>>247 同意

249 :Delギコ:2001/08/15(水) 19:11
  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (;゚Д゚) < …ネンノタメ>>246
  ./  |    \__________
 (___/


普通はしないかもしれんが
TComponentを複数配置したり
そのPropertyで属性を保持したりするし
(TOpenDialogを複数置いた方が便利な場合もある)

Propertyで他のコンポーネントに
接続(?)出来たりするよ、

DBでTQueryは複数使ったりするし
StringGrid保存TComponent派生クラスというのもあるし。

250 :デフォルトの名無しさん:2001/08/15(水) 21:00
>>248
なぜにって、オマエモナー

251 :Delギコばす:2001/08/15(水) 21:34
  --------∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< 前例踏襲
  (O)----(O)U-U) \__________

TWebModuleはTDataModule継承!

252 :デフォルトの名無しさん:2001/08/16(木) 14:01
>普通はしないかもしれんが
>TComponentを複数配置したり
>そのPropertyで属性を保持したりするし

それを「属性」と呼ぶのかなあ?
TForm.FindComponentで名前で検索するとか?

>Propertyで他のコンホ゜ーネントに
>接続(?)出来たりするよ、

コンポーネント参照ね。あれは良いよね。
ビジュアルプログラミングもどきが出来る。

253 :Delギコ:2001/08/16(木) 18:43
 ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (゚Д゚) < 属性の意味がずれているか?
  | ⊃|⊃ \________________________
 ⊂ノ〜
  ∪
>>246
> rubyみたいに属性を実行時に後付けできる言語ならともかく、
> そうでないなら、状態をどこに記憶するの?という問題が生じるだろう。

ん?、なんか話が通じてないぞ。
ダイタイ、Ruby氏らんしRubyでいう所の属性って何なのかも
想像つかない。ちょっと説明してや。

> >普通はしないかもしれんが
> >TComponentを複数配置したり
> >そのPropertyで属性を保持したりするし
>
> それを「属性」と呼ぶのかなあ?
> TForm.FindComponentで名前で検索するとか?

ん?FindComponent、あんなの使うのは
いきあたりバターリのコーディングだよ。
普通はつかっちゃダメだね。

サガリスギage

254 :デフォルトの名無しさん:2001/08/16(木) 20:48
MLのU氏の謎の添付メールはなんなの?

255 :デフォルトの名無しさん:2001/08/16(木) 22:55
>>254
添付物なんて届いていないが...
何番?

256 :>255:2001/08/16(木) 23:30
59523とか。Outlookで受信したらWINMAIL.DATってのが付いてた。

257 :デフォルトの名無しさん:2001/08/17(金) 01:38
あぁ。なるほど
http://www.trendmicro.co.jp/esolution/solutionDetail.asp?solutionId=2756

258 :デフォルトの名無しさん:2001/08/17(金) 01:53
あなたの疑問はこれで解決できましたか?

◎はい ○いいえ

「はい」の場合、すぐに検索結果は見つかりましたか?

◎はい ○いいえ

その他ご希望・ご要望をご記入ください。(255文字まで)

彼女が欲しい

259 :デフォルトの名無しさん:2001/08/17(金) 09:44
え? じゃあ、あの人はMLにHTMLメールを送ってるのか?
そういうことはしない方が良いと教わったけど、そういう
時代じゃないのか。知らんかった。

260 :デフォルトの名無しさん:2001/08/17(金) 09:58
HTMLというかRichTextだわな

261 :259:2001/08/17(金) 10:09
>>260
すまん。Outlook Expressしか知らんので上の書き込みになった。
Outlook Expressでいうと 「リッチテキスト形式」は「HTML形式」
なので区別してなかった。

262 :デフォルトの名無しさん:2001/08/18(土) 14:32
■Delphi逝ってよし■
begin end なんて長すぎだゴルァ {}で十分だ
標準の関数名が長すぎる タイプするのにストレスたまる
大文字と小文字を区別しない時点で邪道。逝ってよし。
条件判定にブール型しか使えない時点で終わってる
いちいち function やら proceger やら書いてられるかボケ
大体、型が多すぎるのがクソ。整数と実数、文字列があれば十分。大は小をかねる。
関数内関数なんてわかりにくいだけ。
だいたいマクロも無いような言語でまともな
プログラムなんかつくれない。

263 :デフォルトの名無しさん:2001/08/18(土) 14:32
だいたい、ボーランドからしてDQNだろ。
なんで社名を変えて、また元に戻すんだ?

264 :デフォルトの名無しさん:2001/08/18(土) 14:42
>>262
コピペ?
整数、実数、文字列しか使えない言語こそ逝ってると思うが…

265 :デフォルトの名無しさん:2001/08/18(土) 14:43
>>262
> begin end なんて長すぎだゴルァ {}で十分だ
には違う意味で賛成。begin endより{}の方が目だってわかりやすそう。
他は、厨房の意見だとしか思えないが・・・。

266 :デフォルトの名無しさん:2001/08/18(土) 14:44
>>263 まあ身の丈にあわなくてイライラするのも判るが、
 道具にあたるのは無意味だぞ

 拾った道具なら捨てればいいし、与えられた道具なら
コードテンプレートをヘルプで調べてみろ多少は楽になるだろう

マクロが好きなら自分で作ればいいと思うがどうだ?

267 :緑茶。:2001/08/18(土) 14:45
_________>>263はボーランドの無償ダウンロード大好きの厨房君。_________

268 :デフォルトの名無しさん:2001/08/18(土) 14:53
>整数と実数、文字列があれば十分。大は小をかねる。

それって逆の「小は大をかねる」(一般的諺ではないが)といいたかったのかな?

数系と文字列系しかない「参照すら使えねぇ」糞言語は煎ってよし。
#逆に、ほとんど参照しかなくても一応やっていけることを証明しちまったのが、Lisp。

関数内関数は無くてもいいとは思う(Privateメソッドとかにしとくとか)が、
マクロは単なる「つたない言語仕様からの逃げ」でしかないだろ。
どうしても欲しければプリプロセッサを自作しろ。
万一(藁)便利なら他人にも受け入れてもらえるぞ。

269 :デフォルトの名無しさん:2001/08/18(土) 15:10
関数内関数はPascalよりも、むしろCみたいな言語に実装されてそうなもんだが。

270 :デフォルトの名無しさん:2001/08/18(土) 15:30
>>11のような再帰構造のプログラムをコンパクトに書くのには便利だろ

271 :デフォルトの名無しさん:2001/08/18(土) 15:36
オブジェクトのディープコピーをしたいのですが、
Javaでいうclone()みたいなメソッドはあるのでしょうか。

272 :デフォルトの名無しさん:2001/08/18(土) 15:42
>>271
Assign()というメソッドが一般的。
でも実装は自分でやってね(藁

273 :271:2001/08/18(土) 16:25
>>272
ありがとう。見つけました。

274 :デフォルトの名無しさん:2001/08/19(日) 05:18
>いちいち function やら proceger やら書いてられるかボケ

スペル違うよね… ボソッ

275 :デフォルトの名無しさん:2001/08/19(日) 18:47
>>262のデルには'ぷろせげー'が存在すると思われ

276 :デフォルトの名無しさん:2001/08/19(日) 19:16
>>275
あー、オレは結構 ’ぷろせげー’ 使ってるよ。
やっぱ、ありゃ使ってて気持ちいいね。

277 :デフォルトの名無しさん:2001/08/19(日) 22:51
ぷろせゲーってどんなジャンルのゲームですか?(あ、綴りが違うか…鬱)

278 :デフォルトの名無しさん:2001/08/20(月) 10:36
プログラムがIDE上で実行されているか単独で実行されているかを
プログラム上でチェックする方法は無いでしょうか?

279 :デフォルトの名無しさん:2001/08/20(月) 10:46
んーあったかなあ
誤魔化し的方法なら、IDEで実行時の適当なコマンドライン引数を設定して
プログラムで判別する方法もあるけど。スマートじゃないね。

280 :Delギコ:2001/08/20(月) 10:57
  ∧∧
 (゚Д゚ )
  ⊂  ヽ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   〉 ノノ~ <  CmdShowが9になってたりするな
   ∪∪   \______________

姑息な手だが。

281 :278:2001/08/20(月) 11:28
どっかで副作用が出そうな気が...
キーフックしたプログラムをデバッグしてると
デバッグ用のキーがプログラムに反応してちょっと???になります
マウスを使えばいいんだがついキーを押してしまう

282 :デフォルトの名無しさん:2001/08/20(月) 14:14
>>278
ApplicationやFormもComponentの一種(サブクラス)だから、
それらのComponentStateを見れば判る、というわけにはいかぬか?
いま手元にDelが無いんで未確認だが。

283 :デフォルトの名無しさん:2001/08/20(月) 15:07
IDE の判別じゃないが IsDebuggerPresent API で
true が戻ればデバッガの上だから IDE の上だって
ことがわかる。

Win95 では IsDebuggerPresent API がないが、MS の
KB にソースコードがあるから、それを使うかサポート外
ってことで

284 :Delギコ:2001/08/21(火) 14:59
> Win95 では IsDebuggerPresent API がないが、MS の
> KB にソースコードがあるから、それを使うかサポート外

 ∧ ∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)  <  せっかくだから、Delphiコードで示してくれ
  | つ[|lllll]). \_________
〜|   |
  ∪∪   ショウカイ スルナラ URL クレ

285 :デフォルトの名無しさん:2001/08/21(火) 15:01
MSのKBってなんじゃらほい

286 :Delギコ:2001/08/21(火) 15:13
 ∧ ∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)  < Knowledge Baseじゃねーの?
  | つ[|lllll]). \_________
〜|   |
  ∪∪  まさか、`バイト?  

287 :デフォルトの名無しさん:2001/08/21(火) 15:23
IsDebuggerPresentってもしかして定義されてない?
windows.pasになかったけど

288 :デフォルトの名無しさん:2001/08/22(水) 06:18
Delphi6でDelphiをはじめてみようと思うのですが、
Delphiの本でおすすめなのを教えてほしいです。

289 :デフォルトの名無しさん:2001/08/22(水) 07:07
本屋で立ち読みして良いと思ったの買え

290 :うの・こーほー:2001/08/22(水) 07:33
>>289
 それは無理!
 都心部はともかく地方に行くとVBの本を200冊置いている本屋が
Delphiに関しては10冊も置いてない

291 :>290:2001/08/22(水) 08:46
置いてある本全部買い占めろ。売れるのがわかれば本屋も置いてくれるようになるよ。

292 :デフォルトの名無しさん:2001/08/22(水) 08:53
初めてのDelphi
Delphi応用プログラミング
Delphiによるオブジェクト指向

この三部作。技術評論社。

293 :288:2001/08/22(水) 09:10
ありがとー
初めに、初めてのDelphi買ってみます

>>289
地方なので売ってません(TT)

294 :デフォルトの名無しさん:2001/08/22(水) 10:01
>Delphiによるオブジェクト指向

これ良書らしいから見てみたいんだけど、秋葉原のどこにも無かったよ
ネットで注文しようとしても在庫無しだし、今でもまだ刷ってるの?

295 :Delギコ:2001/08/22(水) 10:11
|   |  |     |  | |
|  |゜⌒/..| \ | ゜|
゜ ⌒// ..| ゜ \  ゜  |
| / / | | |ヽ゜ \⌒゜ |
| . ̄ ̄ ̄ ̄|| ̄ ̄ ̄ ̄
 |  ∧ ∧||   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|   (,,゚Д゚)|| < もう酢ってないよ
゜ | ..|∪ つ  \______________
 | |.| |   |   |
___.U..U____     ゜

296 :294:2001/08/22(水) 11:17
>>295
やっぱり?(TT
無いと解ると余計に読んでみたくなるな

お返事ありがとう

297 :デフォルトの名無しさん:2001/08/22(水) 12:55
>>294
良書なのに何故か絶版です

技術評論社は商売根性がありません(w

298 :デフォルトの名無しさん:2001/08/22(水) 22:52
>>297
絶版だったのか。
かなり入手困難になってきたようなので、盆休み前に買ってきた。
かれこれ1年以上も本屋の棚に眠り続けていたやつを・・・
全然売れないので、貴重な本が見つかるのは田舎ならではと思う。

299 :デフォルトの名無しさん:2001/08/22(水) 22:55
D6フリー化したからユーザーも増えるだろうし、
良書の類は改訂してまた出版されるんじゃないの?

300 :デフォルトの名無しさん:2001/08/22(水) 23:02
(・∀・)300!!

301 :デフォルトの名無しさん:2001/08/22(水) 23:04
>>294
確かにいいわ、これ。
ただ、その昔Delphi始めた頃は難しそうで避けてたけど。(藁

302 :デフォルトの名無しさん:2001/08/22(水) 23:20
もしどうしても見付からない人は同じ著者、同じ技評の
「ゲーム&&オブジェクト指向プログラミング」を探して
読んでみることをお勧めする。C++&TurboPascalだが、著者が
語りたいことは同じ。

303 :デフォルトの名無しさん:2001/08/23(木) 09:18
いつごろから無料になりますか?
ダウンロードまだですか?

304 :デフォルトの名無しさん:2001/08/23(木) 09:19
もうできるよ。ftp サイト探してみ。

305 :デフォルトの名無しさん:2001/08/23(木) 09:45
>>304
ftp.borland.co.jp ?

306 :デフォルトの名無しさん:2001/08/23(木) 10:40
昔の本もフリー化してほしい

307 :デフォルトの名無しさん:2001/08/23(木) 15:05
>>283
KBを検索してみたが見つけられなかった
KB番号きぼん

308 :デフォルトの名無しさん:2001/08/23(木) 16:58
win95 がないからテストしてないぞ

var
 PIsDebuggerPresent: function: BOOL; stdcall;

function IsDebuggerPresent: Boolean;
 function IsDebuggerPresent95: Boolean;
 type
  TdwArray = array [0..9] of DWORD;
  PdwArray = ^TdwArray;
 var
  dwThreadId,
  dwProcessId: DWORD;
  p: PdwArray;
 begin
  dwThreadId := GetCurrentThreadId;
  dwProcessId := GetCurrentProcessId;
  asm
   MOV AX,  FS
   MOV ES,  AX
   MOV EAX, $18
   MOV EAX, ES:[EAX]
   SUB EAX, $10
   XOR EAX, dwThreadId
   XOR EAX, dwProcessId
   MOV p,  EAX
  end;

  if IsBadReadPtr(p, 190) then
   raise EInvalidOperation.Create('Invalid ProcessDatabase Pointer');
  
  Result := (p^[8] and 1)=1;
 end;
begin
 if Assigned(PIsDebuggerPresent) then
  Result := PIsDebuggerPresent
 else
  Result := IsDebuggerPresent95;
end;

initialization
 PIsDebuggerPresent := GetProcAddress(
             GetModuleHandle(kernel32), 'IsDebuggerPresent');

309 :デフォルトの名無しさん:2001/08/24(金) 01:14
自作のソフトにアンドゥ機能を付けたいと思い、アンドゥメニューの
ShortCutプロパティにCtrl+Zを割り当てました。
実行すると、メニューから選択した場合はきちんとアンドゥしてくれますが、
Ctrl+Zを押しても何の反応も無しです。
(ちなみにShortCutプロパティを他のキーに変更したら、そのキーでちゃんと
アンドゥしてくれます)
原因は何でしょうか?

Delphiを使って初めてのプログラムなので、見当違いな情報もあるかも
しれませんがやっていることを書いておきます。
・フォームのKeyPreviewはTrue
・アンドゥの処理はActionListに登録したものをメニューのAction
 プロパティで割り当てている
・フォームに貼りつけたのはImageコンポとStatusBarコンポのみ

310 :デフォルトの名無しさん:2001/08/24(金) 01:22
メニューとアクションをリンクしたら、メニューのショートカットではなく
アクションのショートカットが優先されるのでは?

311 :309:2001/08/24(金) 01:32
あ、すみません。
(309の一行目)メニューの方でなくて、アンドゥアクションの
ShortCutの方を設定しています。
変更したときにメニューのShortCutも自動的にアクションと同じものに
なっているようですが、普通はそれで正しく動作するんですよね?

312 :デフォルトの名無しさん:2001/08/24(金) 01:46
フォームにTImage、TStatusBar、TMenu、TActionListを置いて、
Action1.ActionUndoExecuteにCTRL+Zを割り振ったけど、
ちゃんと動いたぞ。

313 :309:2001/08/24(金) 02:18
>>312
チェックしてくださって有難うございます。
俺もチェックしました・・・動きました。謎です。
とにかくもう少し悩むことにします。

314 :デフォルトの名無しさん:2001/08/24(金) 10:00
[SoftwareTechnology 22]
Delphiオブジェクト指向プログラミング
技術評論社
堀越一雄 著
\1980
ISBN4-7741-0427-2 C3055

コレ最高。俺はオブジェクト指向については
コレ一冊で十分理解している。

315 :Delギコ:2001/08/24(金) 10:57
  ________________

| 君の書籍紹介、とてもいい出来だと思うのだけれど・・・

   ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧  カタカタ  / ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  ∧ ∧ < ほ、ほんとですか!
 (  ⊃ )  (゚Д゚;)  \______
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| BIBLO |\
        ̄   =======  \
  ________________

| でも、スーパー部長がなんて言うかな・・・

   ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        | ガイシュツデ ゼッパンダッテ イットルダロ!!. イッテヨシ
       \ >>292-302
         ∧ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧ (゚H゚)         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (  ・∀)^( )^  ∧ ∧  < ・・・
 (     )つ    (゚Д゚;)    \____________
 ̄ ̄ ̄ ̄  ̄ ̄ ̄ ( つ_つ__
 ̄ ̄ ̄ ̄ ̄日∇ ̄\| BIBLO |\
           ̄   =======  \

._________
|             |
| とりあえずCMです .|
|_________|
   ∧,,∧ ||  復刊ドットコム
⊂ミ.,,゚Д゚彡つ  http://www.fukkan.com/bbs.php3?act=topic&t_no=1823

316 :デフォルトの名無しさん:2001/08/24(金) 12:20
Undoか。
//hiroproject.homeip.net/cats/disptn.asp?gn=ari_andoh

317 :Delギコ:2001/08/24(金) 12:39
   ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (,, ゚Д゚) < >>316 エロじゃん!
=====U U====\________
|   ギコ  |
| まっしぐら |

318 :dd:2001/08/24(金) 12:58
あん どぅ とろわ

319 :デフォルトの名無しさん:2001/08/24(金) 13:29
>Delphiオブジェクト指向
絶版なら、俺が全文書をテキストファイル化しようか?
要望が多ければマジでやるかも。

絶版→再発行の意思なし→
欲しがっている人が居ても、でない→
著作権を放棄したも同然→
犯罪ではない。

320 :デフォルトの名無しさん:2001/08/24(金) 13:31
ヤッター!!

321 :デフォルトの名無しさん:2001/08/24(金) 13:40
  Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ´∀`) <  絶版なら犯罪じゃないよね
 (    )   \___________
 | | |
 (__)_)

  Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ´∀`) <  なんでやねん
 ( つ  つ  \___________
  ヽ Y ノ
  (_(__)

322 :Delギコ:2001/08/24(金) 13:41
           ムウ・・・
     ∧ ∧____
    /(;゚Д゚) ./\
  /| ̄〇〇 ̄|\/
    |______|/


     ∧ ∧____ソレ ハンザイ チャウ?
    /(;゚Д゚) ./\
  /| ̄∪∪ ̄|\/
    |____|/
     ,,,,∪∪,,, ,,


 そういうのはマジで著者に連絡とらないとダメ。
 つうか、勝手な解釈するなって。

 Delphi/Kylix市場がにぎやかになって
 市場価値が高まれば
 自然と世に出てくると思うが …

 今は金に比して単に増刷の採算が合わないだけじゃないの?

 それに、>>319 自分でオブジェ指向の原稿書いてみたら?

323 :デフォルトの名無しさん:2001/08/24(金) 13:47
自分が欲しいために1冊の絶版本を
印刷してもらうには、何円かかると思いますか。

324 :デフォルトの名無しさん:2001/08/24(金) 13:59
>>323
いくらなの?
正確に知りたいです

325 :デフォルトの名無しさん:2001/08/24(金) 14:08
>324
なんとなく
 「誰が!?
  いつ!?
  何時何分何秒!?」
ってのを思い出してしまった、

326 :デフォルトの名無しさん:2001/08/24(金) 14:41
だれか図書館に寄贈してそれを回し読みしよう。
各都道府県1冊ずつ。

327 :デフォルトの名無しさん:2001/08/24(金) 17:17
>>325
最後の「何秒?」だけ答えられなくて悔しい思いをしたのを思い出した

328 :デフォルトの名無しさん:2001/08/24(金) 19:18
国会図書館に逝け

329 :デフォルトの名無しさん:2001/08/24(金) 19:24
>>319

 更正ビーム!!
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   Λ_A_Λ  シビビビ
  ( ・∀・) //___∧___∧___∧__∧__
  ( つ o/つ。  マ モ ロ ウ ミ ン ナ ノ キ マ リ ゴ ト ♪
  ノ∧)∧) \ ̄ ̄∨ ̄ ̄ ̄∨ ̄ ̄ ̄∨ ̄∨ ̄∨ ̄
 (__)(_)

330 :デフォルトの名無しさん:2001/08/25(土) 13:01
TToolBarでWindowサイズが変更されてボタンが表示しきれなくなったときに、
IEみたいに右端に矢印が出てメニュー表示できるようにしたいんですけど、
どなたかご存知でしょうか?

331 :>330:2001/08/25(土) 13:04
Del6Pro買ってActionManagerと関連コンポを使用する。

332 :デフォルトの名無しさん:2001/08/25(土) 13:20
とりあえずTPageScrollerでいいと思ったのですが、
プログラムの中でWidthを変更しても、設計時のWidthを覚えているらしくて
設計時Widthより小さくならないと矢印が表示されないんですよ・・・。
これはDelphiのバグ?私のコードが不正?

333 :デフォルトの名無しさん:2001/08/25(土) 13:30
>>331
ActionToolBarの矢印ははみでた分を表示するためのものじゃない。

334 :デフォルトの名無しさん:2001/08/25(土) 15:13
申し訳ないんですけれど、プログラミングしていて分かんない事が出てきたので
教えて頂けないでしょうか。開発には、Delphi6 Personalつかっています。

何で困っているかというと、StrPCopyとかの関数を使うと、
SysUtils.pasが見つからないと怒られてしまうのです。
実際ファイル検索かけてみるとSysUtils.pasはDelphiのフォルダにはないようです。

どうすればStrPCopyとかが使えるようになるんでしょうか。

335 :>334:2001/08/25(土) 15:17
ちゃんとuses SysUtils;してるか?
SysUtils.dcuがフォルダに無いか?
Personalには*.pasは無いよ。

336 :デフォルトの名無しさん:2001/08/25(土) 15:26
MLでもあったkが、例外が起きたときにpersonalでは存在しないソースを見にいってしまうとかいうやつでは。

337 :デフォルトの名無しさん:2001/08/25(土) 15:29
>>335 レスありがとう。

uses節にはSysUtilsがちゃんと加わっているようです。

SysUtils.dcuなら \Program Files\Borland\Delphi6\Lib\SysUtils.dcu
に入ってるみたいですけど。。。

わかんない設定とかはいじらないようにしているんで、
ほぼデフォルトのままなんですけど、
何がおかしいんでしょうね。

338 :335=337:2001/08/25(土) 15:31
>>336
あぅ。つまりコーディングにミスが有ったってことですか。。。

339 :335=337:2001/08/25(土) 15:39
アプリケーションを新規作成して、ボタンとエディットを配置して、

procedure TForm1.Button1Click(Sender: TObject);
var
pTemp: PChar;
strTemp: String;
begin
strTemp := Edit1.Text;
StrPCopy(pTemp, strTemp);
end;

でエラーです。なんか変ですか?

ちなみに、uses節はこう。
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

340 :デフォルトの名無しさん:2001/08/25(土) 15:44
>>399
変です。pTempにメモリが割り当てられてません。
ポインタを勉強したほうがよいと思います。

とりあえず、オプションでデバッグ版dcuを使用しないように設定すると、
ファイルがないといわれることはないのではないでしょうか。
どちらにせよエラーはでますが。

341 :335=337:2001/08/25(土) 15:55
>>340
教えてくれてありがとう。
ポインタって宣言したら自動で使えるようになるわけじゃないんだね。。
勉強して出直してくる。(T^T)

strTemp := Edit1.Text;
New(pTemp);
StrPCopy(pTemp, strTemp);
Dispose(pTemp);

これでエラーは出なくなった。

342 :デフォルトの名無しさん:2001/08/25(土) 16:02
>>399
ポインタがわからない打ちは
ヘルプの「文字列処理ルーチン(ヌルで終わる)」
にあるルーチンは使用しない方がいいと思われ
Personalのスレの方があってるような

343 :デフォルトの名無しさん:2001/08/25(土) 16:17
>>330
俺もこの処理実装したいな。
どうやってやるんだろう?

344 :デフォルトの名無しさん:2001/08/25(土) 16:17
>>341もやばいコードなんじゃ?

345 :デフォルトの名無しさん:2001/08/25(土) 20:07
復刻リクエスト。
http://www.fukkan.com/list/index.php3?c_no=0&mode=1

「Delphiオブジェクト指向プログラミング」は未登録だったので、だれか
登録してください。私は個人情報晒すの嫌なんで登録してません。

登録されたらみんなで投票しましょう!

346 :デフォルトの名無しさん:2001/08/25(土) 20:15
>>245
登録済みとちがうか? ほれ。

http://www.fukkan.com/list/index.php3?sort=vc&c_no=1600

347 :デフォルトの名無しさん:2001/08/25(土) 20:15
もとい
>>345だ。

348 :デフォルトの名無しさん:2001/08/25(土) 22:07
>>341
(’д‘;)

349 :デフォルトの名無しさん:2001/08/25(土) 22:11
コンパイルが通っただけですな。
New(pTemp); は、char1個分しか確保されません。
コピーする文字列分確保しておかないと。
実行時に、いつエラーがでてもおかしくないです。

つーかポインタ勉強しろよゴラァ!!
それかstringのみにしとけ!!

350 :名無しさん:2001/08/25(土) 22:43
>>330 >>343
シェブロン(シェーブロン?チェブロン?)って言うみたい。
TReBarBandInfoのfStyleにRBBS_USECHEVRONをつけてやると出るよ。
クリックされたときメッセージが来るので、自分でツールバーのボタンを
数えて非表示の部分だけをポップアップメニューに追加して表示する必要が
ある。はっきり言って面倒だよね。
しかも、IE5以上についてくるコモンコントロールDLLが必要。
だれかTCoolBarに実装してー。
(てっきりツールバーの機能かとおもっていたのに、レバーの機能だった。。。)

351 :デフォルトの名無しさん:2001/08/25(土) 22:48
「レバー」
焼き肉か?

「リバー」
だ。
猫んところで「レバーのようなコントロールだからレバー」
ってやったのが誤りの根幹か?

352 :350:2001/08/25(土) 22:51
ちなみに、シェブロンが押されたときにやって来るメッセージは、
RBN_CHEVRONPUSHEDです。
どうも、Delphi6でも宣言されていないっぽい。

RBN_CHEVRONPUSHED = RBN_FIRST - 10;
でオケ。

353 :350:2001/08/25(土) 22:54
>>351
ホントニ?
リバーだったのかー。
いままで、ずっとレバーレバー言っていたよ。
焼肉のレバーは好きだけど。

354 :350:2001/08/25(土) 22:59
こんなのありました。2つめは日本語です。
そういえば前に、ここみてシェブロンって読み方分かったんだ。
http://www.codeproject.com/docking/chevrons.asp
http://www.kumei.ne.jp/c_lang/sdk4/sdk_308.htm

355 :デフォルトの名無しさん:2001/08/26(日) 01:36
>>353
それは「Re:」を「れ」って言うのと同じだな。

356 :デフォルトの名無しさん:2001/08/26(日) 01:38
これ。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_182.htm
>レバーコントロールとは、IE4.0のツールバーのように左端に「とって(レバー)」がついたものです。

取っ手のレバーは "lever"
コモンコントロールのは "ReBar"

357 :デフォルトの名無しさん:2001/08/26(日) 01:41
シェブロンって,アメリカでは至る所にあるガソリンスタンドの名前なんだけど
聞いたこと無い?

平沢進の曲名にもあるが,こちらはちとマイナー

358 :Delギコ:2001/08/26(日) 02:36
  ∧∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (,,゚Д゚)  <  こんなん?
 ヽ/つ且~~  \___________
  (__ _)

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 My_PChar:PChar;
 i:Integer;
begin
 GetMem(My_PChar,1000);
 StrPCopy(My_PChar,'ABCDEFG');
 for i:=0 to 6 do
 begin
  ListBox1.Items.Add(My_PChar+i);
 end;
 FreeMem(My_PChar);
end;

素直にString使えって。

ちなみにGetMemではこの場合最低いくつ確保すればいいの?
即答できる人いたらおせーて。

359 :>356:2001/08/26(日) 02:38
Length('ABCDEFG')+1か2G

360 :デフォルトの名無しさん:2001/08/26(日) 02:40
禿同

361 :デフォルトの名無しさん:2001/08/26(日) 05:26
>>358

たしかに String 使うのがいい

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 My_String: String;
 i:Integer;
begin
 My_String := 'ABCDEFG';
 for i:=1 to 7 do
 begin
  ListBox1.Items.Add(Copy(My_String,i,MaxInt));
 end;
end;

362 :Delギコ:01/08/26 17:31
    ∧∧   / ̄
  _(,,゚Д゚) < >>359 サンク--ス
⊂,,__つつ.  \_

プラス1は例の文字列サイズを確保した先頭バッファ?

>>361
多分元質問者はC++あがりなんだろうね。

363 :デフォルトの名無しさん:01/08/26 17:59
>>362

NUL で終わる文字列ルーチンは、 NUL で終わるから
(文字数+1)文字分の容量が必要なのさ

364 :デフォルトの名無しさん:01/08/26 18:02
>>362
プラス1は C の文字列ターミネーター確保のため。

365 :Delギコ:01/08/26 18:16
       ∧∧l||l
       /⌒ヽ)  トホホ
     〜(___)
    ''" ""''"" "''

思いっきり、Pascal文字列と
C文字列を間違ったよ。

天然だよ、天然

典型Delphi厨房にナチマッタ…

>>363-364アリガト

366 :厨房われざー:01/08/26 18:18
Professional版をMXで落としたんだけど尻がワカラン!!

367 :デフォルトの名無しさん:01/08/26 18:24
>>366
マルチポストうざい

368 :デフォルトの名無しさん:01/08/26 18:33 ID:VEqjDKHE
>366
0120-444-444

369 :デフォルトの名無しさん:01/08/26 21:00 ID:Uj3iWCOo
てれほんしょっぴんぐぅ

370 :デフォルトの名無しさん:01/08/26 22:18 ID:Abz7ycFk
>>366
実家の電話番号教えてくれたら電話で教えてあげるよ?

371 :デフォルトの名無しさん:01/08/26 22:23 ID:MV3zKzJ.
AnsiStringってほんとにANSIで定められた規格なの?

372 :デフォルトの名無しさん:01/08/26 22:44 ID:VyLE7Tmo
>>371
ANSI規格なのではなく、ANSI文字を対象にしてるからだよ。

373 :デフォルトの名無しさん:01/08/27 13:00 ID:Uj69oYog
>>357
> 平沢進の曲名にもあるが,こちらはちとマイナー

まわるよシェブロン、ひゅーーーーーーーーーー

374 :test:01/08/29 16:16 ID:rgk66mm2
DBGrid で 行番号を表示させる方法教えてください

375 :デフォルトの名無しさん:01/08/29 16:53 ID:VzBaXdbY
元のDBにシリアル型で番号振っとく

376 :デフォルトの名無しさん:01/08/29 18:56 ID:lzEeweFo
データベースの行に行番号なんて何の意味があるんだ?

377 :デフォルトの名無しさん:01/08/29 23:23 ID:dqwo9Br6
>>374
直接は無理っす。
RelationalDB自体が行の順番って概念を否定してるデータベース方式なんで。
つけたきゃ自分でそういう項目を用意するのは可能。

378 :デフォルトの名無しさん:01/09/01 09:59 ID:f29jsh3A
finally の使い方だけど
 KEYが見つからなければ挿入という処理の場合

try
 for n=0 to High(datas) do
  begin
   if datas[n].key = nkey then exit;
  end
 n=Length(datas);
 SetLength(datas , n+1);
 datas[n].key:=key;
finally
 datas[n].data:=data
end;

みたいに使っていいの?
 使わないと、goto 使うか、データの書換えを2重に定義するかになって格好悪いんだけど?

379 :デフォルトの名無しさん:01/09/01 10:30 ID:baJQonXA
Delphiだとforループを抜けた時のカウンタは不定のはずだから>>378のは
ちょいやばいかも。

380 :Delギコ:01/09/01 20:59 ID:TgdqYMp.
>forループを抜けた時のカウンタは不定のはずだから

  ∧ ∧∩
  (゚Д゚,,)ノ  うそ〜ん。
   |  つ
   | ⊂)〜  そんな話聞いたことないYO
   _∪

381 :デフォルトの名無しさん:01/09/01 21:16 ID:74THsOQE
コンパイルで警告出るし、ヘルプにも書いてあるよ↓

85. for ループ脱出後のループ制御変数の値は不定です
FOR-Loop variable '<Name>' may be undefined after loop
-------------------------------------------------------
説明

この警告は for ループの制御変数の値をループの後に使った場合に表示されます。for ループの制御変数の最終値を当てにしてもよいのは,goto 文か Exit 文でループを出た場合だけです。これはコンパイラが for
ループに効率的なコードを生成できるようにするための制約事項です。

382 :Delギコ:01/09/01 21:20 ID:TgdqYMp.
   ∧∧   / ̄
 ∩(,,゚Д゚) < >>359 サンク--ス
⊂,,__つつ.  \_

var
IndexOf: Integer

IndexOf := -1;
for n:=0 High(Datas) do
begin
if not (datas[n].key = nkey) then
begin
IndexOf := n;
break;
end;
end;

if IndexOf = -1 then
begin
 n=Length(datas);
 SetLength(datas , n+1);
 datas[n].key:=key;
end else
begin
datas[n].data := data;
end;

なぜnを使いまわしているのかはわからんが。

383 :Delギコ:01/09/01 21:23 ID:TgdqYMp.
   ∧∧   /まちがた。
 ∩(,,゚Д゚) < >>381 サンク--ス
⊂,,__つつ.  \ ほんとだったのね。
            今まで普通につかってた機がする__

インデントも忘れたし・・・
var
 IndexOf: Integer

 IndexOf := -1;
 for n:=0 High(Datas) do
 begin
  if not (datas[n].key = nkey) then
  begin
   IndexOf := n;
   break;
  end;
 end;

 if IndexOf = -1 then
 begin
  n=Length(datas);
  SetLength(datas , n+1);
  datas[n].key:=key;
 end else
 begin
  datas[n].data := data;
 end;

384 :デフォルトの名無しさん:01/09/01 21:29 ID:pc/GW0EI
言語規定上は「不定」だけど実装上は For 文の 終値+1 の値が
セットされていることが「多い」という話。

最適化により反対方向に進む場合も有るし,誘導変数経由で参照されるために
値が変わらないこともある。可能性という話ではね。

385 :デフォルトの名無しさん:01/09/02 00:29 ID:1B.EZ816
Delphi以外の実装なんてあるの?

386 :デフォルトの名無しさん:01/09/02 01:29 ID:G5YLyhVc
borland.co.jp の newsgroup の面子は object 小島が
ただの煽り・あらし・クレーマーだとなぜ気が付かない?
奴の言動に一貫性はないし、矛盾だらけだろ。

まあ、すでに奴を無視して話を進めている奴もいるが。
あ、GON も同類な、fj でも暴れてた

387 : :01/09/02 02:30 ID:b.AvvIJc
TCustomEditをベースにコンポーネント作ってるのですけど、
上下のマージンを指定できず困っています。
なにか、良い方法はないでしょうか?
それとも、EDITコントロールをベースにする以上無理なのでしょうか?

388 :デフォルトの名無しさん:01/09/02 02:53 ID:yhjI958.
TPanel 上に BorderStyle を bsNone にした TEdit を貼り付ける。
TPanel は
BebelInner = None
BebelOuter = None
Color = clWindow
BorderStyle = bsSingleCaption = ''

そうすれば外観上はTEditそのものだYO!

389 :378:01/09/02 10:12 ID:6hJ7KTEI
>>381 という事は >>378 のコードは exitで抜けてるから違反していないのでは?

for がループ終了した場合は n:=Length(datas)で再設定してるし

390 :デフォルトの名無しさん:01/09/02 10:31 ID:wcrDccQU
>>378のは大丈夫かな。ただ、ちょっと変えて
try
for i := 0 to 20 do
if random(10) > 5 then exit;
i := 6;
finally;
ShowMessage(IntToStr(i));
end;
みたいなのを実行すると、forループを最適化して、値がおかしくなる。
だから俺はforの近くでは余りトリッキーなやつは避けてる。
あーでも、そんなに気にしなくてもいいのかな?

391 :物申す:01/09/02 11:22 ID:yhjI958.
そもそも、制御変数に変更を加えたいなら
while を使うべきではないだろうか。

for 文は、ループ回数が特定されている場合に利用するものであって、
そのような制約があるからこそ、while よりも高速に作動する。
そもそも、for の制御変数を変更しようなんて考えは
CやBASICプログラマの悪い癖だとおもう。
Cの for と while はなにが違うのか、俺には分からん。

392 :デフォルトの名無しさん:01/09/02 11:24 ID:yhjI958.
そのような利点があるからこそ、
for i:=0 to 100 step 2
なんて書き方が出来なくても良いのだ。

「for は初期値から終了値まで1づつ変化していくもの」
という認識だけですむから。下手に高機能なforを用いると
たかがfor の条件ごときに解読の手間を費やさなければならない
(CやJAVAのようにね)

393 :デフォルトの名無しさん:01/09/02 12:01 ID:G96xcqig
ようはCなんかのforの感覚で使ってる人が多いということですな。
だがそれは間違いだと。

394 :デフォルトの名無しさん:01/09/02 14:50 ID:TwlrpNBk
Cだろうが、業務でそんなコード書いたらソースレビューで殺されるがなぁ
悪い癖は直した方が自分の為だと思うがなぁ

395 :デフォルトの名無しさん:01/09/02 15:03 ID:UqRjzi66
>>387
EM_SETRECTでマージンを設定できると思われ。

396 :デフォルトの名無しさん:01/09/02 15:17 ID:Wsbd1Hv2
exit ・・・ finally;
はやっぱり、 exitを見たらそれで終わりという印象を与えるのに
finallyで処理してる点が 有罪でしょうかね

これするなら goto 使った方がマシ?

397 :デフォルトの名無しさん:01/09/02 15:26 ID:yCMII86.
>>396
exitしてもfinallyされるのは最初は???だけど
合理的な動作であるし言語ガイドにも明記されているので
積極的に使うべきかと。gotoは論外でしょう。

398 :デフォルトの名無しさん:01/09/02 15:57 ID:psNHQDZo
クラスを作る勉強してるんだけど、
どうしてもエラーが出る。
誰か添削してくれ。

TFolder=class
private
    Name:String;
public
    function GetName:String;
end;

implementation

function TFolder.GetName:String;
begin
    Result:=Name;
end;

こいつを、メインで呼び出すとエラーが出る。
どうして?

399 :デフォルトの名無しさん:01/09/02 16:10 ID:UqRjzi66
ちゃんと生成してる?

var
  Folder: TFolder;
  AName: string;
begin
  Folder := TFolder.create;
  AName := Folder.GetName;
end;

400 :398:01/09/02 16:11 ID:psNHQDZo
あぁ、勝手に納得した。

createが必要だったらしい。
ということは、メンバー変数は、createして初めて使えるようになるということかな。

誰か解説してくれー

401 :398:01/09/02 16:13 ID:psNHQDZo
>>399さん、サンキューです。

まさに今、その事に気がついたばかりです。
なるほどね〜

402 :Delギコ:01/09/02 16:40 ID:oukomFDw
   ∧ ∧   / ̄
 ∩(,,゚Д゚) < >>397チョットマター
⊂,,__つつ.  \_ (ねるとん)

んー、Exitでfinallyを通過させるのは
良くないと思うな。
可読性の面から積極的に使うものではないと。

上記のコードなら、キーのあるなしを判断する部分と
キーの挿入or代入を処理する部分は別々になるのだから
冗長にわかりやすく書くとこうじゃない?

var
 IndexOf: Integer;
DataLen: Integer;

 IndexOf := -1;
 for n:=0 High(Datas) do
 begin
  if not (datas[n].key = nkey) then
  begin
   IndexOf := n;
   break;
  end;
 end;

 if IndexOf = -1 then
 begin //キーガないなら挿入
  DataLen:=Length(datas);
  SetLength(datas , DataLen+1);
  datas[DataLen].key:=key;
  datas[DataLen].data := data;
 end else
 begin //キーがあったら代入
  datas[IndexOf].data := data;
 end;

forに使う変数のfor以外での使いまわしのご利用は計画的に

   ∧ ∧   / ̄
 ∩(,,゚Д゚) <  Forにまつわる話はサンクス。
⊂,,__つつ.  \_ Stepは使いたくなる場面もあるが、安易に使ってはいかんね。
           関係ないけどcontinueは便利だよなあ。

403 :デフォルトの名無しさん:01/09/02 16:41 ID:nrg.Hj5w
Folder.Free;

で廃棄もちゃんとしろよ。
ちなみに
Folder.Destroy;
はよぶなよ。

404 :デフォルトの名無しさん:01/09/02 16:43 ID:psNHQDZo
>>403
なんでですか?(厨房でスマソ)

405 :Delギコ:01/09/02 16:54 ID:oukomFDw
   ∧ ∧   / ̄
 ∩(,,゚Д゚) <  こんなんどう?
⊂,,__つつ.  \_

type
TForm1 = class(TForm)
//Formのマウスアップイベント
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
  //自分で追加しろ
FBtnCounter: Integer;
procedure BtnClick(Sender: TObject);
public
end;

//イベントハンドラ
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
UserCreateButton: TButton;
begin
UserCreateButton := TButton.Create(Self);
UserCreateButton.Parent := Self;
UserCreateButton.BoundsRect :=
Rect(X, Y, X + UserCreateButton.Width, Y + UserCreateButton.Height);
UserCreateButton.OnClick := Self.BtnClick;
UserCreateButton.Name := 'MyButton'+IntToStr(FBtnCounter);
Inc(FBtnCounter);
end;

//自分で書いた手続き
procedure TForm1.BtnClick(Sender: TObject);
begin
Self.Caption :=
'あんたの押したボタンは' +
(Sender as TButton).Name +
'だよ';
end;

   ∧ ∧   /
 ∩(,,゚Д゚) <  >>404生成したものは破棄しなきゃ
⊂,,__つつ.  \メモリがどんどん減るのよ。
          (上記の例はButtonのCreate時のOwnerを
           Formに指定しているので自動破棄されるのでOKだけど。

UserCreateButton := TButton.Create(Self);

UserCreateButton := TButton.Create(nil);
こうしてしまうと基本的にはいけない。


FreeとDestroyの話は有名な"Delphiオブジェクト指向"本に
超明快な解説が載ってるんだけどなあ。手に入りにくいんだよな。

406 :Delギコ:01/09/02 16:59 ID:oukomFDw
   ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜''~(,,゚Д゚) < ぐはっ。またインデント忘れた。ゴメソ
  UU'UU    \________

407 :デフォルトの名無しさん:01/09/02 17:04 ID:nrg.Hj5w
>>402
>んー、Exitでfinallyを通過させるのは
>良くないと思うな。
>可読性の面から積極的に使うものではないと。

同感
ExitとかGotoとかはよっぽど処理の流れが分かり切っている場合には
シンプルになるしいいと思うが。

try〜は例外処理のための制御機構だから
このような使い方の場合は>>402の方がいいと思う。

どうしてもtry〜を使いたい>>378の場合は
Exitよりも例外を発生させた方が素直だと思う。

408 :397:01/09/02 17:50 ID:yCMII86.
>>402
>冗長にわかりやすく書くとこうじゃない?
個人的には行あたりの密度を下げる冗長性は可ですが
同一内容の処理を複数箇所にばら撒く冗長性は不可です。

>>407
>どうしてもtry〜を使いたい>>378の場合は
>Exitよりも例外を発生させた方が素直だと思う。
これはtry-finallyの用途を必要以上に限定してしまっていると思います。
上の例は単純すぎるのであまりありがたみがないけれど、
(例外に関係なく)必ず通過するパスを明示できるメリットは少なくないです。

このあたりの議論はCマガの千言万語「例外」でなされていてその中で
exitは内部では例外であり以下のように処理されているとみなせる。
という記述があったはずです。

procedure Foo;
begin
 try
  if xxx then
   raise EExit; // exit
 finally
  ... // 当然ここを通過する
 end;
except // 暗黙のexcept部
 on E: EExit do // 何もしない
end

この前提(と多少の慣れ)があればexitとfinallyの組み合わせはとても自然に思えます。

409 :デフォルトの名無しさん:01/09/02 18:07 ID:SHIZw3Bc
>>400
つまり、クラスの宣言と実装部分↓↓は…
TFolder=class
private
    Name:String;
public
    function GetName:String;
end;

implementation

function TFolder.GetName:String;
begin
    Result:=Name;
end;

↑↑クラスの設計図でしかないわけです。
「このクラスは、こんな構造をしていて、それぞれのメソッドは
こんな働きをするよ」という風に、クラスの構造や働きを”説明”
しているだけなの。

たとえば、車の設計図がいくらあっても、
車がなければ、車を利用する事はできないでしょ?それと同じ事で、クラスを使いたければ、クラス(車の設計図)だけでなく、
クラスのインスタンス(車そのもの)をも作る必要があるって事です。

410 :409:01/09/02 18:11 ID:SHIZw3Bc
では、なぜ
var
Folder:TFolder
だけではクラスの実体が作成されず、わざわざクリエイトしてやる
必要があるのかといえば、今の段階ではこの恩恵はわからないかも
しれません。
Delphiでは、クラス変数はかならずポインタとして機能します。
したがって、 var Folder:TFolder としただけでは、Folder は
あくまでも「 TFolder を指し示すモノ(ポインタ)」でしかない。

当然一番最初は Folder は何も指していない(つまり Folder = nil )
だから、TFolder を作り、( TFolder.Create ) つくった
クラスのある場所を、 Folder が指し示すようにしなければならない。
つまり、

Folder := TFolder.Create;

てこと。

411 :409:01/09/02 18:12 ID:SHIZw3Bc
…と、俺だったらこう説明するんだけど、
ツッコミどころある?

412 :400:01/09/02 18:13 ID:psNHQDZo
1つわからないことがあるんだけど、

TFolder=class
private
    Name:String;
public
    function GetName:String;
end;

implementation

function TFolder.GetName:String;
begin
    Result:='c:\';        // ←こんな風にメンバー変数を使わない。
end;

こうすると、createしなくても問題なく動くんだけど、
要するにcreateは、メンバー変数の初期化作業って考えて良い?

413 :Delギコ:01/09/02 18:18 ID:oukomFDw
   ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜''~(,,゚Д゚) < 言語論だニャ
  UU'UU    \________

>>408
> 個人的には行あたりの密度を下げる冗長性は可ですが
ん?どういう事を言ってる?

> 同一内容の処理を複数箇所にばら撒く冗長性は不可です。

 if IndexOf = -1 then
 begin //キーガないなら挿入
  DataLen:=Length(datas);
  SetLength(datas , DataLen+1);
  datas[DataLen].key:=key;
  datas[DataLen].data := data; //★
 end else
 begin //キーがあったら代入
  datas[IndexOf].data := data; //★
 end;

★の所が重複している事をさしてる?
それとも一度条件判断したあとに再度IF..THENしていることを逝ってる?


キーの挿入か代入かを判断した後に
それに応じた処理をするというのは
可読性の高いコードを書く上で必須なんだけどなあ。

 IndexOf := -1;
 for n:=0 High(Datas) do
 begin
  if not (datas[n].key = nkey) then
  begin
   IndexOf := n;
   break;
  end;
 end;
この部分が関数一まとめになってしまえるというのはいいかな。
これで"キーが重複しているか否か"という機能を示してるの。

今は"キーが重複しているかどうか"を判断して
重複しちたら>>代入
重複しちなかたら>>挿入
という処理だから
finally .. end
で共通部分を実行させてるけど

仕様が変更されて

"キーが重複しちえるかどうか"を判断して
重複しちたら>>処理をキャンセル
重複しちなかたら>>挿入
という処理に変わったら

try .. finally end のコードとIndexOfを使ったコード
どちらか楽か、どちらが(自分以外の)誰でも変更しやすいかを
判断したら、わかってもらえると思うのだが…

414 :Delギコ:01/09/02 18:21 ID:oukomFDw
   ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜''~(,,゚Д゚) < 間違った事覚えると危険という実例だ。
  UU'UU    \________

>>412
> こうすると、createしなくても問題なく動くんだけど、

動くけどやっちゃだめ。
それをやるように
クラスメソッドというものが用意されている。

> 要するにcreateは、メンバー変数の初期化作業って考えて良い?

そうじゃなくて
オブジェクトの実態(インスタンス作成)って事。
それと同時にメンバー変数が初期化される。
(メンバーの実態も生成されるから。)

415 :400:01/09/02 18:25 ID:psNHQDZo
>>414
親切にありがとう。

インスタンス作成の重要性を再確認しますです。

416 :デフォルトの名無しさん:01/09/02 18:25 ID:SHIZw3Bc
>>datas

どうでもよいけど
data は datum の複数形だったような…

417 :デフォルトの名無しさん:01/09/02 18:29 ID:SHIZw3Bc
     _____
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、Create しなくても使えると初めて知った
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|

418 :Delギコ:01/09/02 18:55 ID:oukomFDw
    ∧∧   / ̄
  _(,,゚Д゚) < >>417 こんなこともできたり...
⊂,,__つつ.  \_

TEditを継承してTEditExに追加メソドつくて
TEぢtのインスタンスをTEditExに無理キャストして追加メソドを四部
何つう事が普通にできてマンセー(なのか?)

このバヤイTEヂtExにメンバーつくっちゃだめ。
TEditをTEぢtExに無理キャストした時点で転ぶんじゃなかたかな。(忘れた)

先のDelphiオブジェクト指向本には
どうやってメンバーとメソッドがコンパイルされて
バイナリになるのかを説明してあって
わかりやすいんだけどなあ。
あの本絶版ってマヂになんとかならん?


メソッドの処理バイナリはインスタンスごとに生成されるんじゃなくて
クラスに一つだけ生成される
メンバーのバイナリはインスタンスごとに生成されるんだって。


微妙に言葉まちがーてたら指摘きぼんぬ。

419 :Delギコ:01/09/02 19:13 ID:oukomFDw
> このあたりの議論はCマガの千言万語「例外」でなされていてその中で
> exitは内部では例外であり以下のように処理されているとみなせる。
> という記述があったはずです。
>
> この前提(と多少の慣れ)があればexitとfinallyの組み合わせはとても自然に思えます。

   ∧∧   / ̄
〜''~(,,゚Д゚) < >>397 これもあまり同意できんな
  UU'UU    \_>>407に同意。

言語仕様を隅々まで知らなければ
中身を読み間違ってしまうコードは
あまり好んで書くべきではなくない?

try..finally..endでExit時にfinallyも通過するってのは
氏ってるべきだと思うが
日常茶飯にざくざく使われているコードの保守は
やりたくねーぞ。

ちょっと微妙なのでいろんなヒトの意見は聞きたいネタです。

420 :400:01/09/02 19:15 ID:psNHQDZo
createするときに、クラスを定義してる場所にconstructorを付け加えます。

もしかしたら、すごいアホな質問かもしれないけれど、
クラスをcreateしたら、最後にfreeにするってのはわかるけれど、
destructorって何の為にあるんすか?

421 :デフォルトの名無しさん:01/09/02 19:19 ID:G96xcqig
>>412
メンバを使っていないから、たまたま動いてるだけですな。
実際にメンバを使わずに、classメソッドにすれば公認。

TFolder=class
private
    Name:String;
public
    class function GetName:String;   // クラスメソッドとして宣言
end;

implementation

class function TFolder.GetName:String;
begin
    Result:='c:\';        // ←メンバー変数にアクセスしていない
end;


// これが可能
a := TFolder.GetName:String;

422 :デフォルトの名無しさん:01/09/02 19:24 ID:G96xcqig
>>420
destructorはクラスを破棄したときに必ず実行したい処理をかくのがよいかと。

TFoo = class
public
  FList: TList; 
public
  constructor Create;
  destructor Destroy; override;
end;

constructor TFoo.Create;
begin
  FList := TList.Create;
end;

destructor TFoo.Destroy;
begin
  FList.Free;
end;

余談だが、個人的にはFList.FreeよりもFreeAndNil(FList)推奨だな

423 :デフォルトの名無しさん:01/09/02 19:25 ID:G96xcqig
ワリイinherited抜けてた。

destructor TFoo.Destroy;
begin
  FList.Free;
  inherited;
end;

424 :デフォルトの名無しさん:01/09/02 19:30 ID:fSJZ9fBI
C++は知ってるつもりでDel勉強中の身何だが。

C++と違って、変数がスコープから外れたら勝手にデストラクタを起動してくれたりしないよね?
自分でFree呼ばないとだめなんだよね?

だとしたらあまりデストラクタの意味ないんじゃ。

425 :デフォルトの名無しさん:01/09/02 19:42 ID:0GEkTz1s
確かにデストラクタの意味あんまりないですね。普通のメンバ関数と思っていいんじゃないのかな

426 :デフォルトの名無しさん:01/09/02 20:24 ID:7AX4a1Vo
>C++と違って、変数がスコープから外れたら勝手にデストラクタを起動してくれたりしないよね?
>自分でFree呼ばないとだめなんだよね?

そりゃ、C++と違って実体は扱えなくて参照だけだからな。

427 :デフォルトの名無しさん:01/09/02 20:26 ID:9j5Bw8Z2
TFoo = class (動的オブジェクト)
の部分を
TFoo = object (静的オブジェクト)
にすれば、いちいち生成・破棄しなくてすむよ。
最近はほとんど使われないけど。

428 :デフォルトの名無しさん:01/09/02 20:49 ID:c.lxxTMk
>>424
デストラクタは重要な意味を持っています。つまりデストラクタは
デストラクタ"全体"の実行が終わったときにインスタンスのメモリ領域を
自動的に解放する機能を持ちます。

この"全体"ってのが重要で、これのおかげで例えば親クラスのデストラクタを
初めに呼び出してから次に子クラス内での後始末をするような事も出来ます。

C++ ではデストラクタ自身はインスタンスのメモリ領域の解放機能を持たず
delete 演算子がメモリ領域の解放作業を行っていると思います。
また親クラスのデストラクタは子クラスのデストラクタの
実行が終わった直後に呼びだされると言語仕様で決まっており、
自分の好きなタイミングで親クラスのデストラクタを呼び出せなかったと思います。
(C++ のことあまり知らないので間違っていたらすみません)

仮にデストラクタを通常のメソッドとして以下のように実装しても
前述のことは実現出来ないと思います。

type
 TObject = class
  procedure Destroy; virtual;
 end;

 TTestObject = class
 private
  FStrings: TStringList;
 public
  constructor Create;
  procedure Destroy; override;
 end;

procedure TObject.Destroy;
begin
 FreeInstance; // インスタンスのメモリ領域を開放します。
end;

constructor TTestObject.Create;
begin
 inherited Create;
 FStrings := TStringList.Create;
end;

procedure TTestObject.Destroy;
begin
 inherited Destroy;

 // ここ↑で親クラスの Destroy メソッドが呼び出されてインスタンスの
 // メモリ領域が解放されたため、この時点以降でメンバ変数にアクセスすると
 // 不正なメモリアドレスを参照となります。

 FStrings.Free; // エラーとなる
end;

429 :407:01/09/02 21:15 ID:nrg.Hj5w
>>408

>このあたりの議論はCマガの千言万語「例外」でなされていてその中で
>exitは内部では例外であり以下のように処理されているとみなせる。
>という記述があったはずです。

ということでヘルプを調べてみると
goto文と違いAbort、Break、Continue、Exit、Halt、RunError等の
フロー制御手続きは「手続き」とされていて
すべてtry 節を離れると finally 節に入ると書かれている。
408のいうとおりこれらは例外の機構を使っているのかな。
だとするとexitとfinallyの組み合わせもいいと思うけど。。。。

>この前提(と多少の慣れ)があればexitとfinallyの組み合わせはとても自然に思えます。

多少の慣れというのは。。。ちょっと。この辺熟知している人がどれだけいるか。。。
ここまでくるとまぁ、人それぞれかな。。。
自分としてはやっぱ例外を生成するかな。

ちなみにgotoはtry〜の中で使うとコンパイラに怒られる。
勉強になったよ。。。

430 :408:01/09/02 23:35 ID:yCMII86.
>>413
>> 同一内容の処理を複数箇所にばら撒く冗長性は不可です。
もはやexit-finallyと無関係ですが...
413のコードを要約すると
if 見つからない then データ挿入 else データ変更;
となりますがデータ挿入は空データ挿入+データ変更に展開され
if 見つからない then begin 空データ挿入; データ代入; end else データ代入;
となり明らかに2箇所に記述されたデータ代入処理が冗長です。
# データベースのレコード・TListItemなどの場合、代入処理は複数行にわたります。
# 例外はTStrings.Addなどで、挿入・代入を一命令でできる為413のコードが最適となる場合があります。
よって
if 見つからない then 空データ挿入;
データ変更;
と書いたほうが無駄がなく見やすいです。実際のコードは以下のようになります。

 function search: Integer; // 見つからなかったらLength(data)を返す
 begin
  for Result := 0 to Length(data)-1 do
   if data[Result].key = nkey then exit;
  Result := Length(data);
 end;
var idx: Integer;
begin
 idx := search;
 if idx = Length(data) then
  SetLength(data, idx+1); // 空項目追加
 data[idx].data := ndata; // データを設定
end; // このコードを見やすくないといわれたら議論が終わってしまいます:-P

問題はforループを途中で抜けたかどうかで分岐する処理を綺麗に記述できないことのようですね。

431 :408:01/09/02 23:47 ID:yCMII86.
千言万語は調べたところ2001年3月号の「例外(2)」でした。
C++での説明だと記憶してましたが(よく考えたらfinally無いですね)、Pythonでした。

>言語仕様を隅々まで知らなければ
>多少の慣れというのは。。。ちょっと。この辺熟知している人がどれだけいるか。。。
exit-finallyが重箱の隅的知識のように言われていますが、
リソース保護の観点から必須の知識です。

少なくとも言語ガイドの第2−7章(特に7章!!)は熟読すべきで
しかもC++と違って十分読みこなせる量だと思います。

これ以上は新goto論争的になってきそうなのでやめておきます。

432 :デフォルトの名無しさん:01/09/03 10:01 ID:MMfG58Tc
>これ以上は新goto論争的になってきそうなのでやめておきます。

だな。
勉強にナターヨ。

433 :Delギコ:01/09/03 12:52 ID:wHGoXFco
    ∧ ∧  / >>430
    (,,゚Д゚)<  それなら読みやすい
     |つ つ  \
   @   |  
    ∪ ∪

># 例外はTStrings.Addなどで、挿入・代入を一命令でできる為413のコードが最適となる場合があります。
基本的にはどんな配列/リスト構造でも
Addなどは関数として構造化してしまえば分かりやすいから
function MyDataAdd(xxx);というようなのをすぐ作るようにしてるぞ
だからその構造化がすぐに出来るようなコードを書くようにしているわけだ。

>明らかに2箇所に記述されたデータ代入処理が冗長です。
データ挿入を空データ挿入+データ代入に解釈する方が変だと思うのだが
ま、ここまでくると人それぞれではないか?

>これ以上は新goto論争的になってきそうなのでやめておきます。
ぐはっ。折れも書かなきゃヨカタ。

434 :デフォルトの名無しさん:01/09/04 01:22 ID:rY2zOTg2
D6が無償でダウンロードできるようになったのに、
Delphi談話室が閑散としてるのはなぜですか?

435 :デフォルトの名無しさん:01/09/04 02:16 ID:P7FNYZTo
>>434
1.Personal専用スレに逝ってる>Borland Delphi 6 Personal をダウンロードした
                     http://piza2.2ch.net/test/read.cgi?bbs=tech&key=998878393

2.挫折したユーザが多くてほとんど残ってない(w

3.Vectorを知らず、未だにftpa.borland.co.jpに連アタかましてる。


しかし、ツールでっち上げるにはえらく便利だ。
ファイル変数ってのがよく解らんのでヘルプに使うなと書いてあるFileOpen/FileRead関数使ってるが。
だが、フリーカーソルなエディタはやめてくれ!エディタの配色も好きな色使わせてくれ!!

436 :デフォルトの名無しさん:01/09/04 02:31 ID:VSy5B8BA
>>435
TFileStreamを使うがよろし。

437 :デフォルトの名無しさん:01/09/04 03:07 ID:HYOp.zqI
>エディタの配色も好きな色使わせてくれ
好きに帰られるでしょ?

438 :デフォルトの名無しさん:01/09/04 07:39 ID:qTrwX4uw
>>437
配色どころかフォントや斜体・太字等も変えられるよね。

439 :デフォルトの名無しさん:01/09/04 21:20 ID:rY2zOTg2
一太郎で育ったので、フリーカーソル大好きです。

440 :デフォルトの名無しさん:01/09/04 22:58 ID:QjlESLvE
エディタの配色変えられるといっても限られてるから、
細かく指定できないって言いたいんでしょ、435は。
白は目がつかれてイヤだから、微妙に薄い灰色にしたいとか。

441 :デフォルトの名無しさん:01/09/04 23:02 ID:QjlESLvE
>FileOpen/FileRead関数使ってるが。
なぜにわざわざそんな低レベルな方法で・・・。

442 :デフォルトの名無しさん:01/09/05 16:51 ID:8rva7LPQ
正真正銘の初心者です。早速ですが質問があります。TWebBrowser
を使っているのですが、2つほど質問があります。
procedure TForm1Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);

begin
if Key = VK_Return then
OleVariant(Browser.Document).URL:=Edit.text;
とすると一応、Edit1.Textに書き込まれたURLをブラウズするのですが、
エラーサウンドがなります。(エラーダイアログは出ません。また、その後
も普通に使えます)どうも気持ちが悪いのですが、どう書き直せばよろしいでしょうか?

もう一つの質問は、
procedure TForm1.BrowserNavigateComplete2(Sender: TObject;
pDisp: IDispatch; var URL: OleVariant);

begin
Edit1.text:=OleVariant(WebBrowser1.Document).URL;
end;
とすると、Edit1.TextにURLが書き込まれますが、最初にftp://とか空白
には&20とかが付け足されて表示されます。コレをなくすにはどうすれば
いいのでしょうか?

Delphi presonalを最近ダウンロードして使ってます。まだ初めて3日くらい
なので分かりやすくお願いします。

443 :デフォルトの名無しさん:01/09/05 19:09 ID:oML5oW52
>>442

OnKeyDown で Return キーを処理したことを呼び出し側に通知していないから。
Return キーに限らず、自前で処理しきってしまいたいときは

Key = #0;

を入れる。

444 :デフォルトの名無しさん:01/09/06 00:01 ID:n7Ju2c1Y
だから、静的オブジェクト使えよ!!!!!!!!

445 :デフォルトの名無しさん:01/09/06 00:25 ID:B/YsuwnQ
俺、いまだにBlockRead/BlockWrite使いまくってる。。
TurboPASCAL以来の癖が抜けない・・・

446 :デフォルトの名無しさん:01/09/06 01:03 ID:SKkheClk
>>443
Key= #0; はどこにいれればいいのでしょうか?

>>444
静的オブジェクトが分かりません。勉強します。よろしければサンプルでも・・・。

447 :デフォルトの名無しさん:01/09/06 02:01 ID:zoVld8hw
>>444
誰に対して言っているの?

448 :デフォルトの名無しさん:01/09/06 09:42 ID:fyvoW94A
>>444
オブジェクトの生成、破棄が面倒だと言っている奴へ。

449 :デフォルトの名無しさん:01/09/06 09:55 ID:fxSN01Ss
静的オブジェクトの生成の仕方を教えてください。

450 :デフォルトの名無しさん:01/09/06 10:26 ID:U6UjSx9Y
>>448
だーら,何番に対するコメントだよ?
誰も動的生成で面倒なぞといっていないようだけど?

451 :デフォルトの名無しさん:01/09/06 22:09
C++のSTLのvectorとmapみたいなのが使いたいのですが
Delphiでいうとどれになりますか?

452 :デフォルトの名無しさん:01/09/06 22:40
>>451
ClassesとContnrsユニットの中から使えそうなのを探すことになると思われ

453 :Delギコ:01/09/07 00:23
 ___ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ___( ゚Д゚)<  >>451 TListとかTCollectionあたりか?
 __ /⊃三つ \_______
 _〜′ / \
 _ ∪ ∪    \   YOー ワカラン
    ◎ ̄ ̄ ̄ ̄◎

454 :ななしヘタぐらま:01/09/09 02:23
>>435
ニフチーのFDELPHIにはフリーカーソル無効化ツールがあったのですが(D6対応は不明).
配色が標準色からしか選べないのは私も不満ですが,
ウィンドウズの前景色と背景色をつかうようにして
ウィンドウズの色設定のほうを色々変えています.
チョコレート色とか桃色とか何でもありです.

455 :デフォルトの名無しさん:01/09/09 02:37
リアルうんこチョコレート味

456 :デフォルトの名無しさん:01/09/09 03:24


457 :デフォルトの名無しさん:01/09/09 08:40
>>450
わかったぞ!きっと「delphiの奇跡」を執筆した吉田弘一郎のことを言いたいのだろう。

あの本でいきなり*説明書も読まずに*動的生成をしないコードを書いて
動かない動かないって焦る、という描写が有ったもんな。

言語なんてものは原理的に「どんな造りもアリ」なんだから、
説明を読まずに他の言語からの類推で使い始めるってのは
言語に対する姿勢としては、単なるドキュの姿勢。

458 :誤爆人:01/09/09 09:51
>>435-436
sl := TStringList.Create;
try
  sl.LoadFromFile(FileName);
  TextFileBody := sl.Text;
finally
  sl.Free;
end;

(゚д゚)ウマー

459 :デフォルトの名無しさん:01/09/09 13:18
with TStringList.Create do
try
LoadFromFile(FileName);
TextFileBody := Text;
finally
Free;
end;

(゚д゚)ウマー

460 :デフォルトの名無しさん:01/09/09 14:13
>>445
>俺、いまだにBlockRead/BlockWrite使いまくってる。。
>TurboPASCAL以来の癖が抜けない・・・

TP 世代なら,Assign/Reset/ReWrite の組を使えるだろうに・・・

461 :デフォルトの名無しさん:01/09/09 14:21
速さだけならstream系よりBlockRead/Writeのが
速そうだけど計った人いる?

462 :デフォルトの名無しさん:01/09/09 16:08
>>461
はやいよ。

463 :デフォルトの名無しさん:01/09/10 11:53
単体の呼び出しでは

FileRead < TFileStream < BlockRead

BlockRead がもっとも遅く FileRead がもっとも速い。

単純な I/O では上記の通りだが、ストリームインターフェスが
必要なら必然的に TFileStream を利用することになる、バッファ
付き I/O によって高速化したりできるのもストリーム系だけ。

そして、FileRead と TFileStream のコストは最適化で消える
程度なので BlockRead/FileRead ではなくて TFileStream を
使うべし。

464 :デフォルトの名無しさん:01/09/10 18:51
< の使い方おかしいように感じるが

465 :デフォルトの名無しさん:01/09/11 02:17
<> を、大なり、小なり としてではなく
矢印として使っていると推測される。
解りづらいから逆にせい>>463

466 :デフォルトの名無しさん:01/09/11 09:42
BlockReadってバッファもたないから遅いんではなかったけ?

467 :デフォルトの名無しさん:01/09/11 10:26
Delphi の操作レベルではどれもバッファはないぞ

BlockRead が遅いのは BlockIO を呼び出したり、その中で
関数ポインタを利用して低レベルの入出力を実行したりと、
まわり道が多い上に、最適化が効かないようなコードが多い
からだ

>>465

BlockRead > TFileStream > FileRead

ってことか? 矢印なのかな? コストが少ないとか
動作が軽いって意味で FileRead が小さいって意味じゃない?

468 :sage:01/09/19 20:54
Delphi 6 エンタープライズ 60日体験版 
を下記キージェネを使えば製品版になります
ぜひご利用ください
http://www.crackbest.net/chcrack/crack/delphi6.exe

469 :Delギコ:01/09/20 15:28
     ||  || ̄ ̄|| ̄ ̄ ̄||
     ||  ||    ||    /||
     ||..∧||  /||  //||
   ジー ||..(:゜||//||//  ||
     || |つ/  ||/    ||
     || |. ||    ||___||
    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|

    /_________ヽ
     ||    三 || ̄ ̄ ̄ ||
  ガラッ! ||シネ!...三 ||    / ||
     || ∧∧Ξ||  // ||
     ||(゚Д゚ ) .||//   ||
     ||ι   ⊃||/     ||
     || | | ||___ ||
    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|

    /_________ヽ
     || ̄ ̄ ̄ || ̄ ̄ ̄ ||
     ||    / ||    / || >>1
 ピシャ! ||  // ||  // || ケッ! ヴァーーーカ
     ||//   ||//   ||
     ||/     ||/     ||
     ||___ ||___ ||
    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|

470 :デフォルトの名無しさん:01/09/20 16:08
>> 468

その実行ファイル

xx00 C1 EE 00 shr esi,0
xx03 66 8B C9 mov cx,cx
xx06 EB 01 jmp 009h
xx08 EB -- jmp ?
xx09 60   pushad
xx0A EB 01 jmp 000Dh
xx0C EB -- jmp ?
xx0D 9C   pushfd
xx0E E8 00 00 00 00 call 00418013
xx13 5E    pop esi

なんかあきらかな逆アセ対策・・・怪しすぎ

471 :デフォルトの名無しさん:01/09/20 16:28
ageてみる

472 :デフォルトの名無しさん:01/09/20 23:19
>>471
すぐ下がる。

ギコ猫みたいなキャラクターが無いとはやらないのかなぁ。

473 :デフォルトの名無しさん:01/09/21 11:10
>>472
まぁキャラがいると雰囲気柔らかくて発言しやすいよね。
Delギコさんの反応早いのもあるし。

474 :デフォルトの名無しさん:01/09/21 11:12
賛成>>473
絵だけみてる。文章は役に立たんな。

475 :デフォルトの名無しさん:01/09/21 11:25
Del6から入ったIndyの TidMessageについて質問です。
「Errors-To」のような TidMessageで対応していないものは
ExtraHeadersプロパティでできるとあるのですが

var Msg : TidMessage;
begin
 Msg.ExtraHeaders.Values['Errors-To'] := 'hoehoe@auau.com';
end;

みたいにやると EAccessViolationが発生します。
CPUウィンドウを見ると TIdHeadersList.GetValueFormLineで
問題が発生しているようなのですが。

476 :デフォルトの名無しさん:01/09/21 11:49
>>475
Add();
にするとか
8.1.0-Aならその構文でできるけど
メール関係しか試してないけどIndyまだバグ多し
たぶん英語のみならうまくいくのかな

477 :475:01/09/21 12:07
>>476
う、エラーはCreateしてなかったからだ。
Msg := TIdMessage.Create(idSMTP1);

Msg.AddHeader('Errors-To=hoehoe@auau.com');
Msg.ExtraHeaders.Values['Errors-To'] := 'hoeohe';
Msg.Headers.Add('Errors-To=hoehoe@auau.com');
はダメ。

Msg.Headers.Values['Errors-To'] := 'hoeohe';
でいけたようです。お騒がせ〜。(´∈`)

しかしそうするとなんのための ExtraHeadersなんだ??

478 :名無しさん:01/09/21 13:05
468のファイル実行した人いるのかな・・・

479 :デフォルトの名無しさん:01/09/21 15:55
考える間もない。>>478
本物だったとしても、ウィルスだったとしても、実行してはならない物。

480 :名無しさん:01/09/21 17:09
了解しました。
本物だったとしても実行してはダメですね

481 :デフォルトの名無しさん:01/09/21 18:55
てーか自腹で買わんヤツがEnt使う理由が思い当たらん(藁

482 :sage:01/09/21 21:03
Borland J Builder5J Enterprise 60日体験版
を下記キージェネを使えば製品版になります
ぜひご利用ください
http://www.cracks.am/d.x/Borland_JBuilder_4.0-5.0.zip
当然オーサライズ可能です
低能言語のDelphiからJAVAに乗り換えてみてはいかがでしょう?

483 :デフォルトの名無しさん:01/09/21 22:41
画像ファイルをドラッグ&ドロップすると、その画像が
表示されるようなプログラム作りたいんですけど
どんなコンポーネントを使うとよいのでしょうか?
わけわかんないこと書いて鱈すみません

484 :Delギコ:01/09/21 23:05
___  ヽ
_ /⊂ `∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | |  \( ゚Д゚)< TImage貼り付けて
  | /   ∪ ∪  \LoadFromFile(ファイル名)したらよろしくない?


エクスプローラなど他のアプリケーションからファイルをドラッグアンドドロップで受け取る方法は?
http://www.sakaki.keiaikai.or.jp/faq/delfaq002.html

485 :デフォルトの名無しさん:01/09/22 11:40
>>484 出張ありがとうございます
やってみます!

486 :Delモナ:01/09/22 21:46
 / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | Delモナで対抗
 \__ ____
    ∨    ___
   ∧_∧  ||\   \  ̄|  ̄|
  (  ´∀`)  || | ̄ ̄||: |
 ┌(  つ/ ̄||/  ̄ ̄/ |=|
 | ヽ |二二二」二二二二二二二二」
   ̄]|__)  | |        | |
  / ̄\  /  |      /  |
  ◎  ◎ [__」     [__」

487 :Delギコ:01/09/22 22:00
            Delモナ、イイカンジ
          ∧_∧ ☆
          (*゚Д゚)
          / |
      ,, ,,,,  (_,ノ ,,, , ,,
          ノ ,,

488 :BlockRead/Write野郎:01/09/23 00:11
なんかレスついてた(^^;

>>460
Reset/RewriteはCreateFile/OpenFileだと思うけど・・
BlockRead/Writeとの置き換えって??

BlockRead/Writeするときは、自前でバッファリングするか
バッファなしを前提で速くなるようにアルゴリズム組むから
速度が遅いとかはあんまり困ってないね。まぁ、悪しき慣れだな。


いい加減なんとかしようと、なるべくTFileStreamを使うようには
してつけどねー

そういえばスレッドの中からTFileStreamって安全に使える?
BlockRead/WriteはAPI直呼びだから問題ないとは思うんだけど、
やっぱりVCLだからSyncronizeしないと駄目かな?

489 :デフォルトの名無しさん:01/09/23 00:13
>>488
TFileSTreamもAPIをオブジェクトにラップしてるだけだから
スレッドセーフな気が。

490 :デフォルトの名無しさん:01/09/23 04:20
>>482
タイケンバソはVCLのソースコードらしいけど、本当なの?
なければそんなの使えない。

まぁ、マニュアルの付いていない言語製品なぞ、
始めから使う気など無いけどな。

491 :490:01/09/23 04:20
>タイケンバソはVCLのソースコードらしいけど、本当なの?
タイケンバソはVCLのソースコード無いらしいけど、本当なの?

恥カキスマソ

492 :デフォルトの名無しさん:01/09/23 13:46
>>489
まさか API がスレッドセーフだと思ってるのか?
WriteFile はスレッドセーフじゃないから2つのスレッドから同じファイルハンドルに対して書き込むとファイルは壊れるぞ
だから、TFileStream の単一のインスタンスに対して複数のスレッドから書き込みを行えばファイルは壊れる。

偶然だが CPU が1つの環境では CPU の使いまわしの都合で壊れないけどな

493 :デフォルトの名無しさん:01/09/23 22:42
>>492

VCLのスレッドセーフティーと、スレッド間の同期の問題を
ごっちゃにしているね。

494 :デフォルトの名無しさん:01/09/23 23:17
  Ruby     は      クソです!    ゴミ      箱     逝きです!
  ∧_∧   ∧_∧    ∧_∧   ∧_∧     ∧_∧    ∧_∧
 ( ・∀・)  ( ・∀・)   ( ・∀・)  (  ・∀)    (∀・  )   (・∀・ )
⊂ ⊂  )  ( U  つ  ⊂__へ つ  ( ○  つ   ⊂ ○ )   ⊂ ∩  つ
 < < <    ) ) )     (_)|   \\ \   / //   / /\ \
 (_(_)  (__)_)    彡(__)   (_(__)  (_(_)   (__)  (__)

この発言をコピペしていただければ幸いです。

495 :デフォルトの名無しさん:01/09/23 23:47
Rubyって何ですか?

496 :デフォルトの名無しさん:01/09/24 00:50
Perlで検索>495

497 :デフォルトの名無しさん:01/09/24 03:32
あの、本気で悩んでるんです、教えてください。
Delphiでオブジェクト追加していくとソースに反映されるじゃないですか?
たとえば、
メニューアイテム追加>アクション>メニューアイテム追加>...
こうやってくと、宣言がめっちゃ汚くなりますよね。
あと、ソース上では階層構造も無くずらずらとオブジェクトが並ぶのもダサいんですが、
どうにかなりませんか?

498 :デフォルトの名無しさん:01/09/24 03:33
age忘れました

499 :デフォルトの名無しさん:01/09/24 03:36
>>497
どうなれば良いと思いますか?

これって人によって好きずきだから,あまり勝手に変更してもらいたくないな。

500 :Delギコ:01/09/24 03:43
      ∧∧  / ̄
 @' ― (,,゚Д゚) < >>497 あの部分は見ない振りして触らないのがよいのでは?
   し― し-J   \_今まで気にしたこともなかったニャ

関係ないんだけど
 privateの前の所にイベントハンドら以外にも
 自作のメソッド宣言や変数宣言を
 すべてぶち込んでいるソースみた日には泣きました。

501 :デフォルトの名無しさん:01/09/24 05:49
>>499 >>500

今までC++つかってて、Delタダなんで、昨日から使ってみたんですが。

ActionはActionListに追加、MenuItemはMenuに追加みたいな。
せめて、コレだけあればずいぶん綺麗になると思うんですけどね。

セパレータもS1とか言う名前で追加されて見通し悪すぎですし。

まだ、全然使い方分かってないんですけどね。

502 :ななしヘタぐらま:01/09/24 08:19
>>497
確かに.私の場合,変数名を
アクションオブジェクトは"Acttion_〜",
メニューアイテムの場合は"mi〜"で統一し,
あとはソースを直接いじって並べ替えています.
でもできるだけいじらずにすむように,
メニューデザイナで項目を増やしたら
キャプションを決める前に変数名を書き換えてしまいます.

503 :BlockRead/Write野郎:01/09/24 10:31
>>492
>>493でフォローされているからあえて突っ込まない(w

うーん、やっぱりちょっとスレッドで使うには調べた方がよさそう
かな。たぶん、489さんの言ってるのと同じ感じはするので、大丈夫だと
は思うけど・・・

504 :デフォルトの名無しさん:01/09/24 18:22
IDE を拡張して、最初の published の部分を折り畳んで見えなくするヤツとかないかな

505 :デフォルトの名無しさん:01/09/25 08:54
>>501
あまり建設的な意見ではないようだ。煽りか?
オブジェクトに名前を付ける。ってのはプログラムから操作したい。ってことだけど
メニューセパレータを操作するってよくあることか?
目障りなら、名前を取ってしまえばよい。

Delphi のメニューエディタでの名前置き換えは VB/VC にはない面白い仕掛けが
してあるが。

506 :デフォルトの名無しさん:01/09/25 11:57
TShellTreeViewなどのソースってどこにあるのでしょうか?
Sourceフォルダにはないような・・・。

507 :Delギコ:01/09/25 12:08
 (`´`) 
 │ │
 ∧_l   ∫   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)   ∬  <  $(DELPHI)\Demos\ShellControls
  |∪ |つ=●   \___________
〜| ̄| ヒルメシダ
  U U

508 :デフォルトの名無しさん:01/09/25 12:16
>>505
なんていうか、あんまりうまく説明できてないね。
とりあえず、全部散らばらせるんではなく、
管理クラスを作るなり名前空間を使うなりで種類ごとに
分けてくれるとずいぶん綺麗になると思うんですが

509 :Delギコ:01/09/25 12:30
現状では、あのソースの部分はどうにもなりません。
Delphiが管理する所だからDelphiに任せて
"人間は見ない&編集しない"のがよいと思われ

もしかしたらソース整形AddInがあるかもだけど
聞いたことはないです。

オブジェクトツリーと同じような並びで
表示されると結構マンセーですね。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧    マターリ
   (,,゚Д゚)∫
   /  つ旦O
 〜(._[ ̄ ̄ ̄.]
       ̄ ̄ ̄

510 :デフォルトの名無しさん:01/09/25 13:05
VS.NETのIDEは自動生成された所は畳めるようになってるな
すっきりするようだが開け閉めに余計なマウス操作が増えてかえってうざかった

511 :デフォルトの名無しさん:01/09/25 15:11
>>510
それって使ったことないけど、畳むか畳まないかユーザが選択できれば便利だと
思うけどなぁ。

512 :デフォルトの名無しさん:01/09/25 15:58
viのholdみたいにキーボードから折りたためたりできりゃいいんだがな。

513 :デフォルトの名無しさん:01/09/26 08:05
そうか? 初心者だからって定義部を隠してもしょうがないような気もするし
定義部はIndex代わりで便利じゃないかと思うんだが?

それとも最近の人はコードエクスプローラがあるから不要なのかな?

514 :デフォルトの名無しさん:01/09/26 08:42
>>513
>定義部はIndex代わりで便利じゃないかと思うんだが?
そうそう、それよ。
全然関係ないけど。JAVAはそういう「全体を見渡す」ことが出来ないから、好きになれない。

515 :511:01/09/26 09:26
>>513
俺自身はそれほど必要だとは思わないんだけど、フィールドやプロパティへのアクセス
メソッドなんかはほとんど見ることがないから、そこだけ折り畳んでおくとちょっと
便利かなと思った次第。
private全部を折り畳むとかいう機能ならいらないな。

516 :デフォルトの名無しさん:01/09/26 09:55
多分その辺は開発環境や、エディタの機能で補えるからという理由で
なくしてるのではないかと思う。
実際、コードエクスプローラは全体見渡すのに役に立つ

517 :デフォルトの名無しさん:01/09/27 20:10
みなさん、初めまして

TQueryコンポーネントを使って、
SQL-Serverに接続しているのですが、
毎回[ID]と[パスワード]を確認されます。

ID,パスワード共に固定なので、デザイン時に設定したいのですが、
できるのでしょうか?

ちなみに、Delphi3なのです・・・
Delphi6 Personalを落として、良さそうなだったので、
押入に眠ってたDelphi3を引っ張って使ってます(まだ3日目)。
バージョンが古いので、話が合わないのかもしれません。

m(__)m スイマセン、ある程度覚えたら Delphi6 Proを買います。
よろしくおねがいします。

518 :えろぱいだー:01/09/27 20:30
http://www.himawari.sakura.ne.jp/%7Eloveseat/Adu/index4.html

519 :Delギコ:01/09/27 20:38
        ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′  ̄ ̄( ゚Д゚)<  >>517 そういう目的のためにTDatabaseを使う。
  UU ̄ ̄ U U  \____________
TDatabase を使用したパスワード入力ダイアログの抑制方法
http://www.borland.co.jp/qanda/delphi/d0003342.html
Loginダイアログを出さない
http://homepage2.nifty.com/boheme/delphi/tips/tec0610.htm
ログインダイアログを抑制する
http://homepage2.nifty.com/boheme/delphi/dbtips/css0110.htm

520 :デフォルトの名無しさん:01/09/27 22:19
一つ質問。
Delphiでワイルドカードマッチを高速に行うルーチンってない?
一々TMask作ると凄く効率悪いんだけど。
自分で作れば良いんだが、ヘタレ故…

521 :517:01/09/28 09:57
>>519
TDatabaseを使って解決できました。
ありがとうございました。 m(__)m ペコリ

522 :120:01/09/29 18:22
O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

523 :ボクの嫌いなヒトたち:01/09/29 20:10
>>522

 オンラインソフトの作者の掲示板で、あまりにも具体的すぎるプログラミング手法(ソース)を教えろという方(^^;

 アナタの実現したい事のソースを書いたら、どっちが作者か解るめぇ?ちっとは、自分で勉強しないとな。

 「自作ソフトの???に実装したいのですが...」

 なんてくだりは1度や2度ならともかく、何度も何度も書き込んであると見てる方がドツいてやりたくなります、いやマジで。

 ひとしきり質問攻めが済んで、自分で理解できるレベルにまで解説してもらっといて

「これで拙作???に???の機能が付けられます、ありがとうございました」

 ...も同罪。後ろ足で砂かけて去って行くんだね、キミは。

#売名行為にしか見えないもの。
#そういう行為は自分のHPでやってくれ!!

524 :127:01/09/29 21:01
>>523 氏ね。

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

525 :532:01/09/29 21:09
>>524
氏ね。

>>524がうんこで作られているということを知りました。
あれと同じようなうんこになりたいのでうんこ

526 :129:01/09/29 21:22
>>525 も氏ね。

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

527 :デフォルトの名無しさん:01/09/29 22:10
>>522
1、Delphiを起動
2、プログラム作成
3、コンパイル
4、Readme.txt、Helpファイル作成
5、圧縮
6、無料サイトのアカウント取得
7、FTPであぷ

528 :デフォルトの名無しさん:01/09/29 22:15
O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

529 :134:01/09/29 22:24
>>527 も氏ね。

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

530 :デフォルトの名無しさん:01/09/29 22:36
>>529
あなたは、パーソナル版をお使いのようですね
エンタープライズ版でしか作成できないので、購入してください

531 :デフォルトの名無しさん:01/09/29 22:40
Ruby >>>>>>>>>>>>>>>>>>>>>>>>> Delphi = 糞

532 :147:01/09/29 22:52
>>530 氏ね。俺はプロのプログラマーだ。エンタープライズ使っている。

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

533 :デフォルトの名無しさん:01/09/29 22:57
>あれと同じようなものを作りたいのでやり方を教えてください

マジレスします。

 勉強しましょう。

どんな勉強しなければいけないかは、私はアナタの友達じゃないのでアナタの
事はわかりません。お友達かセンセイに聞いてみなさい。

534 :デフォルトの名無しさん:01/09/29 23:04
>あれと同じようなものを作りたい
誰も作ったことの無いようなものを作ってやろうという方が
楽しいと思うけどね

535 :147:01/09/29 23:21
俺の質問に答えろ。
お前らカスプログラマが偉そうに諭すな。
どうせ分からないんだろ?

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

早く教えてください。

536 :デフォルトの名無しさん:01/09/29 23:37
>>535
おぬま氏に聞いてこい。

537 :デフォルトの名無しさん:01/09/29 23:39
>535
ここにはカスぷろぐらましかいないよ。

538 :デフォルトの名無しさん:01/09/29 23:41
>俺の質問に答えろ。
わかりました。
>お前らカスプログラマが偉そうに諭すな。
偉そうにはしていません。
>どうせ分からないんだろ
はい。
>O'sEditor が Delphi で作られているということを知りました。
違います。
>あれと同じようなものを作りたいのでやり方を教えてください。
私は知りません。

539 :デフォルトの名無しさん:01/09/30 00:03
るby >>>> でlpひ

540 :デフォルトの名無しさん:01/09/30 00:05
>>539
はいはい、よく出来ました。

541 :デフォルトの名無しさん:01/09/30 00:19
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!
Delphi厨房殺せ!

542 :デフォルトの名無しさん:01/09/30 09:28
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342

543 :デフォルトの名無しさん:01/09/30 09:28
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342

544 :デフォルトの名無しさん:01/09/30 09:32
厨房が一人か二人、紛れ込んでいるようだ。
放置きぼん。

545 :まわし:01/09/30 18:19
// a*b/2^32
function Int32x32SHR32(X, Y: Integer): Integer; register;
asm
IMUL Y
MOV EAX,EDX
end;

546 :まわし:01/09/30 18:20
function Int32x32SHR16(X, Y: Integer): Integer; {X*Y/2^16}
asm
MOV EAX,X {register呼び出し規約の場合はXはEAXなのでホントは不要}
IMUL Y
SHRD EAX,EDX,16
end;

547 :まわし:01/09/30 18:21
procedure Int32x32Sum(X, Y: Integer;var sum:int64);
asm
MOV EAX,X {register呼び出し規約の場合はXはEAXなのでホントは不要}
IMUL Y
add eax,sum[0]
adc edx,sum[4]
add sum[0],eax
adc sum[4],edx
end;

548 :まわし:01/09/30 18:23
function Int32x32Div(X, Y, Z: Integer): Integer;
asm
// MOV EAX,X {register呼び出し規約の場合はXはEAXなのでホントは不要}
IMUL Y
IDIV Z
end;

549 :sage:01/09/30 19:02
>>547
int64 を返す関数にしておけば,sum に代入するオーバーヘッドを削除できるぞ

550 :デフォルトの名無しさん:01/09/30 19:07
Win32API
>>547 Int32x32To64
>>548 MulDiv
その他
Int64ShrlMod32とかいくつかこの手のAPIすでにあるね。

551 :デフォルトの名無しさん:01/09/30 19:11
>>550
API バージョンはやたら重たいよ。

552 :デフォルトの名無しさん:01/09/30 19:14
Turbo Pascalのころはつかえたinline指令が
今は無視されてるのが痛いな。
これぐらいの小さなコードなら埋め込みたいね。

553 :デフォルトの名無しさん:01/09/30 19:54
Object Pascal 言語ガイド - アセンブラ手続きと関数

を読めば inline が常に指定されていることがわかるだろ

554 :デフォルトの名無しさん:01/09/30 20:01
>>553
Object Pascal 言語ガイド - asm文
>予約語 inline と assembler 指令は,下位互換性のためにのみ残されています。コンパイラはこれらを無視します。

555 :デフォルトの名無しさん:01/09/30 20:10
Turbo Pascalのinline指令で書かれたprocedureは、
C++のinlineやMicrosoftのCのintrinsic同様に
使う場所でcallではなく直接コード自体が埋め込まれる物だったんだよ。
Delphiにはそれがない。
アセンブラ手続きと関数 を見てもinline相当には全く見えないが。

556 :デフォルトの名無しさん:01/10/01 02:25
>まわし殿
上のレスがレスだけに、最初コピペ嵐に見えた…
鬱打氏脳…

557 :545:01/10/01 08:38
>>556
 厨房除けの意味でコピペしたので まあ荒らしと同じでしたね

完全にまわしてもよかったんだけど、こっちの荒らし度マシになってしまうし
まあ4つくらい書いとけば誰かコメントくれるだろうと思ったので

>>594
 この関数をアセンブラにしたのは内部でCFがたったらクリッピング
 するような処理を追加したかったからかも・・・・理由忘れた

>>552 inline でアセンブラ関数を定義すると
  結局レジスタ割り付けを制限するからレジスタの少ないx86では有利にならないかも
  関数呼び出しのオーバーヘッドは演算命令と並列処理されるから無視出来るだろうし

558 :デフォルトの名無しさん:01/10/02 02:07
あっちは元気だなぁ。

ところでここにあるファイル,なんだと思う?
ftp://ftp.borland.co.jp/pub/delphi/

559 :デフォルトの名無しさん:01/10/02 04:52
>>558
こういうアドレスが平気で載ってるところが2chの魅力だよなあ。
情報感謝。
でも自分はヘタレなので公式発表まで待ちます(w

560 :デフォルトの名無しさん:01/10/02 09:18
del6up1beta.exe(藁

561 :デフォルトの名無しさん:01/10/04 10:49
ついで上げ

562 :デフォルトの名無しさん:01/10/04 16:12
GExperts 1.1 Pre-Release 3 いつのまにか出てたあげ。
http://www.gexperts.org/
>The third pre-release of GExperts 1.1 for Delphi 5 and Delphi 6 is available for download.
>The main addition is support for the Standard, Personal, and Professional versions of those IDEs.
>As usual, the Readme.txt file contains the list of recent changes and known issues.
>Please send bug reports and comments to the discussion mailing list.

Personalでもいけるっぽい。

563 :デフォルトの名無しさん:01/10/05 10:23
非ビジュアルコンポーネントで設計中に文字を表示したいんだけどどうやったらいい?

やりたいのは、実行中何もしないイベント一つだけ持つコンポーネントを作りたいの

設計中にクリックだけでその場所が編集出来るからしおり便利そうだから作りたいの

で、イベントのメソッド名を設計中に表示したいのよ

564 :デフォルトの名無しさん:01/10/05 10:28
もう少し落ち着いて離せ

565 :563:01/10/05 10:49
つまり、こういうコンポーネント書いたんだけど

TEventBookmark = class(TComponent)
private
  FOnMarkEvent: TNotifyEvent;
published
  property OnMarkEvent:TNotifyEvent read FOnMarkEvent write FOnMarkEvent;
end;

ホントに実装部何もないコンポなんだけど、ブックマーク代わりに案外便利

これだけだと 複数フォームに貼り付けたらどれがどれやら判らなくなるから
設計時にイベント名を表示させたいって事

566 :デフォルトの名無しさん:01/10/05 11:00
データモジュールに貼り付ければNameプロパティが表示されるけど
そういうのとは違うのか・・・

567 :566:01/10/05 11:07
スマソ・・・普通のフォームでも表示できるから全然違ったね

568 :Delギコ:01/10/05 11:24
・・・
TNotifyEvent型のブックマークなの?

イベントそのものに処理を書いている時点で
内部のコードが、よろしくないと思うんだけど…

どうしてもやりたいなら
設計時だけTLabelを内部で生成して
Self.Top/Self.Leftの近所に
貼り付けたらどうかな。

Label.CaptionにTNotifyEventに関連づいた
メソッド名を取得する方法は
サパリわからんけどね。

オブジェクトインスペクタで見るだけで
いいと思うんだけどなあ。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧    マターリ
   (,,゚Д゚)∫
   /  つ旦O
 〜(._[ ̄ ̄ ̄.]
       ̄ ̄ ̄

569 :563:01/10/05 11:34
Delギコさんありがと

イベント名の取得はこれで成功しました
procedure TEventBookmark.SetOnMarkEvent(const Value: TNotifyEvent);
begin
 FOnMarkEvent := Value;
 with TMethod(Value) do EventName:=TObject(Data).MethodName(Code);
end;
 まだコンパイルされてない設計時でもこれで取得出来るのが不思議でしたが

しょうがないからNameプロパティに代入しようかな
そうしたらヒントで区別はつくけど

570 :Delギコ:01/10/05 11:53
> with TMethod(Value) do EventName:=TObject(Data).MethodName(Code);
ナイス

>まだコンパイルされてない設計時でもこれで
実は設計時にもコンパイルされたものを扱っているそうです。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧   
   (,,゚Д゚)∫
   /  つ旦O
 〜(._[ ̄ ̄ ̄.]
       ̄ ̄ ̄

571 :563:01/10/05 12:25
でも 組み込んだコンポーネントはDLLになってるからそうだと判るけど
イベントをクリックした段階ではフォームのメソッドとしてコードが
挿入されるわけで、これってまだコンパイルされてないでしょ?

たぶんポインタには仮の値が入ってるんじゃないかな?

572 :563:01/10/05 15:01
残念
  Name プロパティを イベントプロパティのSetメソッドで書き換えると
Nameは書き換わるけど、肝心のイベントの登録がされなくなったよ

573 :Ruby!:01/10/05 23:25
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
Del厨断末鬼の叫び!!!
拙い言いがかりからRubyを必死に煽ろうとしたDel厨が逆襲を受けて死亡!
理論的にDelphiはRubyの足元にも及ばないことが証明された!!!
「Ruby撲滅スレ」
http://piza2.2ch.net/test/read.cgi/tech/1001125342/
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

574 : :01/10/05 23:43
たまにいる「UNIX以外は氏ね」みたいな方々だね
好きなの使えばいいじゃん

575 :デフォルトの名無しさん:01/10/05 23:44
DelphiでOSを作りたいんですけど良いコンポありますか?

576 :デフォルトの名無しさん:01/10/05 23:55
TKernelとTShellを今すぐDownLoad!!

577 :デフォルトの名無しさん:01/10/06 00:37
派生元のTMicroSoftでバグ発見!(´Д `)

578 :デフォルトの名無しさん:01/10/06 01:16
Delphiのポインタで
var
 p: PByte;
 i: integer;
としといて
GetMem(p,100);
for i:=0 to 99 do (p+i)^:=Random(256);
FreeMem(p);
みたいなことはできないの?
やっぱ配列使うのが常道なんでしょうか?

579 :デフォルトの名無しさん:01/10/06 01:19
array of Byte使えば動的にサイズ変えたり廃棄できるよ。

580 :デフォルトの名無しさん:01/10/06 01:46
>>578
どうもです
そうですね。やっぱ配列使うしかないんですね。

581 : :01/10/06 02:35
>578
PByte(Integer(p) + 1)^

582 :デフォルトの名無しさん:01/10/06 04:21
他にも

var
 p0, p1: PByte;
 i: integer;
begin
 GetMem(p0,100);
 p1 := p0;
 for i:=0 to 99 do begin
  Inc(p1);
  p1^ := Random(256);
 end;
 FreeMem(p1);
end;

とか

583 :デフォルトの名無しさん:01/10/06 04:22
var
 p: PByteArray;
 i: integer;
begin
 GetMem(p,100);
 // for i:=0 to 99 do p[i] := Random(256); C風にこれでも可
 for i:=0 to 99 do p^[i] := Random(256);
 FreeMem(p);
end;

とか

584 :デフォルトの名無しさん:01/10/06 04:22
var
 p: PByte;
 i: integer;
begin
 GetMem(p,100);
 // for i:=0 to 99 do PByteArray(p)[i] := Random(256); これも可
 for i:=0 to 99 do PByteArray(p)^[i] := Random(256);
 FreeMem(p);
end;

とか

585 :デフォルトの名無しさん:01/10/06 04:23
Win2000上でDelphiで作ったプログラムにディスクの
空き容量を表示する機能を付けたんですが、エクスプローラで
表示される空き容量(***MB,や***GB)と値が違うんですが、
なぜでしょうか?
バイトでは正しい値になってるんで MBやGB換算が違ってる
と思うのですが、どのように計算したらよいのでしょうか?

586 :デフォルトの名無しさん:01/10/06 04:25
動的配列なら

var
 p: array of Byte
 i: integer;
begin
 SetLength(p, 100);
 for i:=Low(p) to High(p) do p[i] := Random(256);
end;

とか

587 :デフォルトの名無しさん:01/10/06 04:27
>>585
まさ1000で割ってるとか・・・はないわな

588 :デフォルトの名無しさん:01/10/06 05:10
Delphi6Personalを使って、CSVベース(ファイルロック付き)でデータベースを作ると、MS-Accessみたいに利用者の端末にアプリをインストしなくても使えるようになってうれしいのですけど、そういうのは流行らないのでしょうか?

589 :デフォルトの名無しさん:01/10/06 09:18
>588
 規模によるでしょ。 数千件くらいなら今のパソコンなら余裕でしょ
個人用の住所録とかなら十分

 CVS はサイズに比例して重くなる
 データベースを使うと大きさに殆ど関係なく中程度に重い

590 :デフォルトの名無しさん:01/10/06 12:22
CVS と CSV を間違える人は多い。

591 :デフォルトの名無しさん:01/10/06 12:54
>>>589
データーベースにCVSって???

592 :デフォルトの名無しさん:01/10/06 20:05
>>591
コンビニエンスストア = CVS

593 :588:01/10/06 22:02
はい、もちろん一万件以内です。
DelphiでDBというと、なぜか専用DBMSの話が出てしまうし、書籍のほとんど全てがそれだというのが疑問なのです。
ネットワークで使えるPerl掲示板程度の簡易ロック付きCSVのDB用コンポとか無いのでしょうか?

594 :デフォルトの名無しさん:01/10/06 23:58
固定長テキストじゃ駄目?

595 :588:01/10/07 04:08
>>594
固定長だと、フィールド長の設計とかが必要になってしまうので、できれば、フィールド属性も文字列決め打ちのイージーなものが欲しいです。

596 :デフォルトの名無しさん:01/10/07 04:53
XMLとか

597 :588:01/10/07 07:51
>>596
XMLも良いのですけど、パーサの問題とかがゴタゴタしてるので、とりあえず引用符付きCSVが良いのかなと。

598 :デフォルトの名無しさん:01/10/07 15:10
BDE の Paradox や ASCII Driver はダメなの?
あとは海外のフリーコンポーネントとか、ちゃんと探した?

599 :デフォルトの名無しさん:01/10/07 19:12
            
      
                         
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!

600 :デフォルトの名無しさん:01/10/07 19:12
RubyUzai!!RubyUai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!

601 :デフォルトの名無しさん:01/10/07 21:05
ウザいって書く奴が一番ウザい
これ定説

602 :デフォルトの名無しさん:01/10/07 22:00
>>601 メガンテですね

603 :601:01/10/07 22:08
ま、俺の存在価値は第2王子並かもね(w

604 :デフォルトの名無しさん:01/10/08 10:21
type TRAND127 = object
 reg:array[0..3]of integer;
 function rand:integer; // p=127 τ=63
 procedure init(r1,r2,r3,r4:integer);
end;

function RAND127.rand:Integer; // p=127 τ=63
var w0,w1,w2,w3:Integer;
begin
w0:=reg[0];
w1:=reg[1];
w2:=reg[2];
w3:=reg[3];
 asm
  mov EAX,w2;
  rcl EAX,1
  rcl w3,1
  mov EDX,w0;
  mov EAX,w1;
  SHLD EAX,EDX,2
  XOR EAX,w3
  mov Result,EAX
 end;
reg[3]:=w2;
reg[2]:=w1;
reg[1]:=w0;
reg[0]:=Result;
end;

最初と最後の代入が格好悪いんだけど、綺麗に書くには?
 インラインでメソッド書く時のメンバは どのポインタから参照すればいいの?

605 :588:01/10/08 20:59
>>598
BDE使うと、各端末にBDEをインストールする必要がありますよね?
それに、Personal版は、BDEは、使えるのでしたっけ?

606 :デフォルトの名無しさん:01/10/08 21:59
>605 ご発言の通りですよ

では MyBase をお使いになってはどうですか?

607 :移動しませう:01/10/08 22:00
165 名前:下手人 投稿日:01/10/08 21:58
ファイルアクセスはAssignFileとFileStreamどっちがマシですかね?
どっちにしろシーケンシャルなんだけど

速度最優先ならWin32API直叩きがいいんじゃない。
ReadFileかメモリマップファイル。

608 :誤爆人:01/10/08 22:01
MLで出てたXMLモジュールってどう?
>>588 のローカルDBみたいに使えないかな?

609 :デフォルトの名無しさん:01/10/08 22:02
↑Delphiスレageまくって楽しいですか?
すっごくうざいんですけど

610 :デフォルトの名無しさん:01/10/08 22:04
>>609
じゃ、どんなスレがあがると楽しいのかなぁ?

611 :デフォルトの名無しさん:01/10/08 22:05
早速煽りに反応してる人がいます!

612 :デフォルトの名無しさん:01/10/08 22:07
Ruby厨の総攻撃開始か?

613 :デフォルトの名無しさん:01/10/08 22:09
>>661-612
決め付けはいかんよ
609=610=611=612
だとするとオレがアホって事か・・

614 :デフォルトの名無しさん:01/10/08 22:15
MyBase が XML 形式で保存するオンメモリのDB(簡単なSQLも使える)じゃないのかな?

615 :誤爆人:01/10/08 22:35
>MyBase
そうなんだけど、Personalの人とかD5の人は使えないじゃない。
織れはまだD5ProだけどDでもXMLもっと流行って欲しいから
D5でもPersonalでも使えるってのは(・∀・)イイ!と思うんだがなぁ

616 :デフォルトの名無しさん:01/10/08 22:37
普通にファイルロック機能つきCVS処理クラス書けばいいじゃん。
そんなに難しくないよ。

617 :デフォルトの名無しさん:01/10/08 22:40
ああ、ファイルロックがあったねえ。
ださー。

618 :デフォルトの名無しさん:01/10/08 22:43
>MLで出てたXMLモジュール
ってなに?

619 :デフォルトの名無しさん:01/10/08 23:02
Delphiスレは一つに統一して頂けませんでしょうか?
上でもうざいって言ってた人いたけど実際うざいんだよね
みんながみんなDelphi使ってるわけじゃないんだし

あぁ、煽りとか言われるんだろうなあ

620 :デフォルトの名無しさん:01/10/08 23:06
>>619
煽りとは言いませんが、現在は住み分けが出来てますし、
アンチ厨が立てたクソスレを除けば3本です。
つーわけで嫌です。

621 :デフォルトの名無しさん:01/10/08 23:22
公平にVB・VCが1つになったらDelphiも統一するって事で

622 :誤爆人:01/10/08 23:30
>>618
XDOMとかいうやつ

>>619
煽りがいなくなれば中身のある上がり方だからいいんじゃねーの
ちょっと前は6つも7つもあったんだから、しばらくしたら自然に減るよ
Techスレが沈んでるのは寂しいが。

623 :デフォルトの名無しさん:01/10/08 23:32
Delギコが来る前まではage控えめだったんだが・・・

624 :618:01/10/08 23:41
>>622
サンクス。いやMLには参加してないもんで。確かDelマガでも特集してたやつだね。

625 :誤爆人:01/10/08 23:57
>>624
それだけど、日本語使えるらしい。
ttp://hp.vector.co.jp/authors/VA017148/delphi/xml/

626 :デフォルトの名無しさん:01/10/09 00:02
今時ですから SQL が貧弱でも通らないと やっぱりダメでしょ

MyBase は Pro以上添付だけど 実行ファイルに含まれる=DLL類不要だから
作ったアプリ配布するにはそんなに苦労しないんじゃないの?

627 :誤爆人:01/10/09 00:47
上記の理由からMyBaseあんまり見てなかったんだが、MyBaseって
「ファイル格納形式としてXMLが使える」ってだけで、XMLパーサーではないようだね。
(内部では勿論使ってるだろうけど)
SQLが使える、ってのは、言い換えればRDB程度の表現能力しかないわけで・・・
XMLのライブラリとしては魅力が少ないと思う。(SQLしか使えなさそうだし<MyBase)
でも >>588 の用途にはぴったりだな。

フツーに標準XMLパーサー使おうと思ったらEnt版になっちゃうのかな。

628 :デフォルトの名無しさん:01/10/09 14:45
http://www.google.com/search?num=30&hl=ja&q=csv+delphi+dataset+component+without+bde&lr=

629 :デフォルトの名無しさん:01/10/11 11:33
別にDelphi固有の問題というわけでもないのですが、
今開発しているのがDelなのでここで質問させていただきます。

Win32プラットフォームで、一度フック用のDLLを読み込みフックを仕掛けると、
そのDLLは解放されてもなぜロックされているのですか?
正直、デバッグやその他の作業の邪魔でしょうがないのですが。

このWindowsの仕様の理由を教えていただけませぬか?

630 :デフォルトの名無しさん:01/10/11 11:40
>>629
つーことは、解放直前にDLL側が UnhookWindowsHookEx を呼んでいないことになるね。何のDLL?

631 :デフォルトの名無しさん:01/10/11 11:56
>>630
いや、コード上は明らかに呼んでいます。自作のでもそうでした(といっても自分はフックに関する
経験は浅いので間違えた実装してる可能性もあります)し、他のアプリが
使用しているTcmhook.dllもそうですし。
OSは関係ないみたいです。Tcmhook.dllについてはWin98のころからそうでしたし、
Win2kでも自作dllをコンパイルしようとすると怒られましたし。

と思ってW2kで検証したらdll削除できた…(汗
自分が書き込んだ経緯は、

1.開発/デバッグ中のアプリを正規の手続きを経て終了
2.コード変更(文字列定数のTypoの修正なので数秒)
3.コンパイル
で 「なんちゃら.dll を作成できません」と怒られました。
(Del6Per+W2kSP2)

で、資料漁って書き込んで資料漁って、OS再起動せずに
コンパイルできないか…と思って試しにファイル移動/デリート
したら出来ました(汗

もしかして、解放までラグが数分ほどあるとか、でしょうか…?

う〜ん、自分が厨房と自覚(鬱

632 :デフォルトの名無しさん:01/10/11 12:24
>>631
以前フック用DLL作ったとき、同じ現象に遭ったよ。
実行後、しばらくはコンパイル(というかDLLの出力)不能状態になるやつね。
どうもロック開放まで遅延があるみたい。
OSの仕様?

633 :デフォルトの名無しさん:01/10/11 13:41
You can release a global hook procedure by using UnhookWindowsHookEx,
but this function does not free the DLL containing the hook procedure.
This is because global hook procedures are called in the process context
of every Windows-based application in the system, causing an implicit
call to the LoadLibrary function for all of those processes. Because a
call to the FreeLibrary function cannot be made for another process,
there is then no way to free the DLL. Windows eventually frees the DLL
after all processes explicitly linked to the DLL have either terminated
or called FreeLibrary and all processes that called the hook procedure
have resumed processing outside the DLL.

634 :デフォルトの名無しさん:01/10/11 14:08
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 僕は英語が出来ますって言ってるわけだ

   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (  ・∀)  ∧ ∧ < 言ってないですよ・・・ソンナコト
 (     )  (;゚Д゚)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\|Libretto|\
        ̄   =======  \

635 :デフォルトの名無しさん:01/10/11 14:07
UnhookWindowsHookExはフックプロシージャを含む DLL を解放しない。
他の別のプロセスのためにFreeLibrary 関数を呼び出せないので、その時 DLL を解放する方法がない。DLLを結び付けた全部のプロセスが終了するまで DLL は解放されない。

636 :デフォルトの名無しさん:01/10/11 14:15
DLLを結び付けた全部のプロセスが終了されるとWindows が DLL を解放する。

637 :631:01/10/11 15:07
>>633-636
なるほど、ようやく飲み込めました。

ありがとうございました。

638 :デフォルトの名無しさん:01/10/11 22:21
あれ、開放しないの?勘違いしてた。でもHook->Unhook->Hookってやると
Dll内の変数、その都度初期化されるよね。何でだ?

639 :デフォルトの名無しさん:01/10/13 21:26
http://www.borland.co.jp/kylix/report/ohishi_2.html
このページのものを
D6Proで動作させたいのですが、どのようにするとよいのでしょう。

アパッチというものはよくわかりません。
クライアントサイドだけで動くものでよいです。

よろしくお願いします。

640 :デフォルトの名無しさん:01/10/13 21:48
>>639
単に電卓を作りたいということならば、レポートにソースがあるわけでもないので
そのページは参考にはならない。
# そもそも電卓を作るのが目的じゃない、そのレポートは

webアプリを作ってみたいということならば、
わからないとおっしゃられているapache等のwebサーバーをWindowsに入れて動かして、
CGIを動作させる環境を整えなくてはならない。

641 :デフォルトの名無しさん:01/10/14 01:52
組みたいのはWebアプリです。
CGIってWinアプリと違って環境設定が面倒ですよね。

単にwebアプリ作成を楽しみたいという目的なら
httpdとかでもよいのでしょうか。
IISという選択肢もあるのですよね。
Apacheとともに調べてみます。

642 :デフォルトの名無しさん:01/10/14 02:52
Delphi6 Pro なら標準で Web Application Debugger が
付属しているので Apache も IIS もなくてもとりあえずは大丈夫。

643 :デフォルトの名無しさん:01/10/14 04:40
>>642
Pro についていたっけ?

IIS5 なら、IDE で直接 ISAPI アプリをデバッグできるようになったので
らくちんよ。

644 :デフォルトの名無しさん:01/10/14 06:00
perlis.dll を使うサンプルどこかにありませんか?

645 :デフォルトの名無しさん:01/10/14 09:54
メインフォームとアプリケーションの最小化最大化
がごっちゃで分かり辛いな

646 :デフォルトの名無しさん:01/10/14 11:29
Web Application Debugger の存在はどこで確認できますか?
なにせ、使ったことがないのでさっぱりです。

647 :デフォルトの名無しさん:01/10/14 12:41
メニューから [ファイル|新規作成|そのほか|Web アプリケーション]

または

メニューから [ツール|Web アプリケーションデバッガ]

648 :デフォルトの名無しさん:01/10/14 13:04
>>647
>メニューから [ツール|Web アプリケーションデバッガ]
ありました!(藁

>メニューから [ファイル|新規作成|そのほか|Web アプリケーション]
Web サーバーアプリケーションのことですね。
こちらもありました。

ありがとう。

649 :デフォルトの名無しさん:01/10/14 16:34
Delphiで使える Lex/Yacc を探しています

リンクがあるのでどっかにあると思うのです
http://www.idiom.com/free-compilers/TOOL/BNF-21.html
http://www.freepascal.org/tools/tools.html

がどこもリンク先が死んでるようです

650 :649:01/10/14 16:39
ごめんなさい 検索キーワードを変更したら見つかりました

http://wwwusers.imaginet.fr/~tcoq/US-lexyacc.html
ftp://iecc.com/pub/file/lyprg.zip

651 :デフォルトの名無しさん:01/10/15 00:14
Web アプリケーションデバッガの使い方全然わからないです。
こまったな。

652 :デフォルトの名無しさん:01/10/15 10:17
>>651
マニュアルよんだら?

653 :デフォルトの名無しさん:01/10/15 11:50
>Delphiで使える Lex/Yacc

Lex/Yaccの記述はそのままで、吐き出すコードがDelphiなのかなぁ。

654 :653:01/10/15 11:51
Lexの方はコールバックされる関数なのか?ならLexはDelか?

655 :Delあめ猫にゃ:01/10/15 14:30
>>649
 たぶん 上のリンクの使う時は \binにある .COD が .L .y と同じ
 ディレクトリにないと動かない奴かもしれない

656 :653:01/10/15 16:27
Lex/Yaccコード見たけど、あんまり簡単じゃないね。
定義の難しいコードジェネレータだねぇ。

657 :デフォルトの名無しさん:01/10/16 18:30
PNGを表示せる方法を教えて

658 :Delフサギコ:01/10/16 19:34
PNGフォーマットの画像ファイルを読み書きできるコンポーネント(ほぼライブラリ)です。
http://www.phoenix-c.or.jp/~taki/del.cgi?p=main

  ∧,,∧ つかえるかな?
 ミ,,゚Д゚彡
 ミつ[|lllll]).
〜ミ  ミ
  U''U

659 :名無しさん:01/10/16 22:52
http://home.t-online.de/home/PeterJHaas/PNG_en.htm

660 :デフォルトの名無しさん:01/10/17 11:39
http://home1.infonia.ne.jp/~delphian/delphi/direct.html?id=NE0008
にある「RASユニット」を使って、現在RAS接続されているか
ということを調べようと思ったのですが、付属のdemoをコンパイル
してみると lmcons.pas の153行目

MAX_PREFERRED_LENGTH : DWORD = -1;

で「定数式が範囲を越えました」と言われてしまいます。
なにか事前の手順が必要なのでしょうか?

Delphi6を使用しています。むしろDel6にRAS関係のコンポって
ないのでしょうか。

661 :Delあめ猫にゃ:01/10/17 11:45
DWORD は昔は integer でした
今は符号無しになっています

ですから -1 を $ffffffff と書くか DWORD(-1) と書替えればOK

662 :Delフサギコ:01/10/17 16:29
  ∧,,∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < しつもーそ
  U  ミ   \____________
  ミ  ミ
 ノ∪∪

TButtonやTMainMenuのコンポーネントアイコンリソースを
見たいのですが、
それらのdcrファイルはどこにありますか?

確か、dcrファイル形式じゃなかったと思われなのですが。

663 :デフォルトの名無しさん:01/10/17 17:14
>>662
bplファイルの中と思われ

664 :デフォルトの名無しさん:01/10/17 18:20
>>662
メニューの方がわからんのだけど
ボタンは Delphi6\Lib\Buttons.res ではなかろうか

665 :-:01/10/17 18:39
Buttons.res は TBitBtn のリソースです.

666 :Delフサギコ:01/10/17 18:53
         _________
  ∧,,∧   /
 ミ;゚Д゚彡< bplファイルの中身確認できません。
  ミつ つ  \
〜ミ  ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  U U

>>664-665、情報サンクス
Buttons.resの中身はBitBtnのはいとかいいえのマークでした

667 :660:01/10/17 18:56
>>661
DWORD(-1)でいけました。ありがとうございます。

668 :デフォルトの名無しさん:01/10/17 20:13
>>666 Demos\ResXplor を使う

669 :マルチします:01/10/18 14:19
Delphi6 Update1あげ

Borland - Delphi 6 Update File Download
http://www.borland.co.jp/delphi/del6up.html

直リソ
ftp://ftp.borland.co.jp/pub/delphi/delphi6update1.exe

670 :デフォルトの名無しさん:01/10/18 14:54
>>669
さすがにオモイ

671 :デフォルトの名無しさん:01/10/18 15:26
重いどころではない

672 :デフォルトの名無しさん:01/10/18 19:51
ADSLなのに10KB/secを切ってしまった
遅すぎ

673 :デフォルトの名無しさん:01/10/18 20:00
終わった!!と思ったら、インストールにCDキーが必要ヽ(`Д´)ノ !!
帰ってからか・・・

674 :デフォルトの名無しさん:01/10/18 23:07
>>673
CD キーは,登録済みなら「使用許諾コードの取得」ツールを起動すると
表示される。ってダイアログに書いてあるのに・・・・

675 :デフォルトの名無しさん:01/10/19 06:43
>>674
インストール自体は試してなかったのよ・・・

676 :Delphiマガジンのなめた記事(怒#:01/10/19 10:29
そんなことより聞いてくれよ、>>1よ。
先月号から気になってたのだがDelphiマガジンの記事

「理系専門家のためのグラフィック入門」

なめんじゃぇ〜ぞ!ゴノレア!

これ見てむかついた人は多いと思われ。

677 :デフォルトの名無しさん:01/10/19 10:33
StringGridでフォーカスをほかのイベントからあわせるにはどうしたら良いでしょうか?

たとえばButton1を押したらGridの2列目を選択するようにしたいんです。

Gridは横一列全選択にしてます。

678 :677:01/10/19 10:43
Gri1.Row := n;
こうですか。

679 :デフォルトの名無しさん:01/10/19 18:37
デルファイはビットフィールドって使えないんでしょうか?
フラグ1bit+データ7bitとかしたいんですが・・・・

680 :デフォルトの名無しさん:01/10/19 19:27
>>679
だいぶ前のTechスレに集合演算子での実例書いた。
・・・でも自分でも忘れた・・・

681 :デフォルトの名無しさん:01/10/19 20:18
サービスパックをダウンロードする前に変更点を知りたいのですが、
D601FIXES.html を見ることはできますか?

682 :デフォルトの名無しさん:01/10/19 20:38
case hensuu of
0:i:=kansuu1;
1:i:=kansuu2;
2:i:=kansuu3;
end;//of case
というプログラムで、条件分岐を減らすため、
i:=kansuu[hensuu+1];
という感じに出来ますか?

683 :デフォルトの名無しさん:01/10/19 20:48
>>682
関数ポインタ使えます。当然配列にも出来ます。

684 :682:01/10/19 20:55
>>683
えーっとたしかアットマークがつくヤツですよね?
ありがとうございます。調べてみます。

685 :Delあめ猫にゃ:01/10/19 21:03
こんなふうな定義
var kansuu:array[0..2] of function:Integer=(kansu1,kansu2,kansu3);

ただし、関数内関数はダメ

それからメソッドはまた別の書き方ね

686 :682:01/10/19 23:34
>>685
すみません。IDEに叱られました。
この方法はvarで宣言するとき引数が必要ですか?
kannsu1(i:integer):integer;
である場合です。

687 :デフォルトの名無しさん:01/10/19 23:40
必要ですよん。引数の名前は適当でいいけど。

688 :デフォルトの名無しさん:01/10/19 23:53
>それからメソッドはまた別の書き方ね
そそ、「〜 of Object」が必要。

689 :682:01/10/20 00:15
いろいろやってみましたが、
定数式が必要ですとか、
変数が必要ですとか、
いろいろ叱られてうまくいきません。
もう少し勉強してきます。

690 :デフォルトの名無しさん:01/10/20 00:28
初歩的な質問ですみません・・・

グローバル変数で確保した
  St: TStrings;
に、
  RichEdit1: RichEdit.Lines;
の内容をコピーしたいんですが、
  St := RichEdit1.Lines;
ってやるとうまくいかないんです。
ヘルプを見ると、文字列リストのコピーは
  TStrings.Assign(Source);
ってやった方がいいって書いてあったので、
  St.Assign(RichEdit.Lines);
ってやってみたんですが何故かエラー・・・
どうしたらいいんでしょう?(泣)

691 :デフォルトの名無しさん:01/10/20 00:29
誤 RichEdit1: RichEdit.Lines;
正 RichEdit1: TRichEdit;

692 :デフォルトの名無しさん:01/10/20 00:30
St := TStringList.Create
とかやってます?

693 :デフォルトの名無しさん:01/10/20 01:01
>>692
試しに入れてみたんですが動きませんです・・・
でも何故か、新しいプロジェクトでやってみたら動きました(泣)
う〜〜ん・・

#回答ありがとうございます。

694 :682:01/10/20 01:19
勉強してきました。
どうやら、関数配列にprivate部で宣言した関数を代入できないようです。
そのために叱られ続けたんだと思います。
勉強させてもらい、ありがとうございました。

695 :デフォルトの名無しさん:01/10/20 01:22
>>694
private部ってメソッドじゃんか!
>>688

696 :682:01/10/20 01:39
>>695
type
Tkansuu=function:integer of object;
..
..
private
kansuu:array[0..2] of Tkansuu;
funcution kansu1:integer;
..

って感じでコンパイル通りました!お世話になりました。

697 :682:01/10/20 01:55
追記です。しっかり動作している上に、ファイルサイズが20KB位小さくなっていいことだらけ。

698 :デフォルトの名無しさん:01/10/20 04:41
>690
なんのエラーが出たのか書かないと駄目!

699 :デフォルトの名無しさん:01/10/22 11:24
ぐぅぉ〜、デルファイってArray of Byteを返す関数って書けないの?
Pointerにすればいいんだけど、キャストしまくらないといけなくなるんで
超面倒臭いyp!こんなもんなのかな?

700 :デフォルトの名無しさん:01/10/22 11:28
type TByteArray = array of Byte;
function getArray: TByteArray;
とか。

701 :デフォルトの名無しさん:01/10/22 11:31
>699 verで返すのが普通なように思うけどなあ

動的配列返すといい事あるの?

702 :デフォルトの名無しさん:01/10/22 12:00
>>700
うぃ〜、できたです。
()付けたり''で囲んだり、全然的外れな解決法を模索してました(鬱

>>701
そうなんですか?今日(って言うか、つい今しがた)ダウンロード
したばかりなんで、よく分かってないです(´д`;)

動的配列を返してるのは、呼び出し側ではサイズが特定できな
いんで、動的配列にしてみたんですが・・・・
上手い方法が他に思いつかなかったのです。

703 :デフォルトの名無しさん:01/10/22 12:14
Pascal では、型の同一性を定義内容ではなく定義名で判断するから
下のようなことが起きる。これを嫌う人は、特に C から来た人には
多い。わかるけどね。

使う前に型定義。

type
 a = array of byte;
 b = array of byte;
procedure TForm1.Button1Click(Sender: TObject);
var
 AA : a;
 BB : b;
begin
 AA := BB; // コンパイルエラー

704 :デフォルトの名無しさん:01/10/22 12:17
>>702
 えと、そういう事なら
type TByteArray = array of Byte;
procedure func(var array:TByteArray);
begin
・・・
SetLength(array, XX);
・・・
end;

てな感じにして

配列そのものは呼び出し元で定義するのが普通だと思うよ

705 :デフォルトの名無しさん:01/10/22 13:17
>>703
ふぉ!ホントだ、エラーになる・・・とても不思議感覚。
type TByteArray = Array of Byteの時
Array of Byte ← TByteArray //可
TByteArray ← Array of Byte //不可
TByteArray ← TByteArray(Array of Byte) //可
う〜む、デルファイの流儀が、ちょっぴり分かった気分
多分に怪しいけど(´д`;)

>>704
それイイ!凄く分かりやすい。
ところで、SetLengthで確保したメモリーは、使い終わっ
た後、nilを代入して後始末をするべきです?
参照してる変数がスコープから抜けた時に、自動的に
解放してくれることを期待したら駄目ッスか?

706 :デフォルトの名無しさん:01/10/22 13:48
>>705
nilの代入の件はVBじゃないからやらないでいいと思うけど

707 :デフォルトの名無しさん:01/10/22 14:09
JavaでいうHashtable, Perlでいう連想配列のようなMapを
Delphiで使うにはどうすればいいの?

708 :デフォルトの名無しさん:01/10/22 14:13
>>705
解放はnilの代入じゃないぞ!!
Finalizeだ。

709 :デフォルトの名無しさん:01/10/22 14:21
>>705
だいたい nil 代入なんてできたか?動的配列はポインタじゃないんだし。

type
 a = array of byte;
 b = array of byte;

の a と b の代入互換性をなくすということは、逆に (array of byte)
の定義を一箇所にまとめる必然性をプログラマーに要求する。これって
「きれいな」コードまたは複数人共同開発時には当たり前にやらなきゃ
いけない行為であって、それを普段から身につけることができる。

だから嫌いだ。というひとの意見もわかるけどね。

710 :デフォルトの名無しさん:01/10/22 14:52
>>708,709
動的配列はAnsiString型と同様に参照カウンタを持ったポインタだよ。

だから

var
 A,B: array of Byte;
begin
 SetLength(B, 1);
 A := B; // A の先を B と同じにする。
 B[0] := 100; // A も同時に書き変わったように見える。
end;

このような事が起きるわけです。nil を代入すると参照カウンタが
デクリメントされ、結果的にFinalizeが呼ばれてメモリ解放されます。

711 :デフォルトの名無しさん:01/10/22 16:10
MemCheckでテストしてみたです。
SetLengthで確保したメモリは、明示的に解放する必要はないんですね。
凄い!超便利!SetLengthマンセー

712 :デフォルトの名無しさん:01/10/22 17:42
>>707
探せばネットにライブラリとかあるみたいだけど、単純な(string->何か)の連想配列なら、
TStringListのIndexOfやFindメソッドとObjectプロパティを組み合わせて使ってる。

713 :デフォルトの名無しさん:01/10/22 18:31
http://vclcomponents.com/search.asp?GRP=&KEYWORD=hashlist&TYPE=0&ID_CATEGORY=0
これなんかどうかな?

714 :デフォルトの名無しさん:01/10/22 18:52
ハッシュの易しい解説ってどっかにないかな…
できればDelphiで…

715 :デフォルトの名無しさん:01/10/22 23:09
つーか、動的配列の実装はstringと同じだからなあ。

>>714
Del6のTHashedStringListのソースとか。
ソースがないなら、Iriaの作者さんの自作スクリプト(DMonkey)のハッシュクラスとか。

716 :707:01/10/23 00:41
TStringListって線形探索かなとおもって嫌だったんだけどたけど
THashedStringListつかえば速そう。
ありがとうみんな

717 :デフォルトの名無しさん:01/10/23 01:27
長い文字列とか動的配列のメモリ管理ってどうなっているのですか?

718 :>717:01/10/23 01:32
内部的に参照カウンタで管理されてるので
確保・開放はすべて自動的に行われてる。
なので通常は気にする必要はない。
詳細は言語ガイド参照。

719 :デフォルトの名無しさん:01/10/23 02:37
>>714
ハッシュを使いたいというようなレベルであればC程度は読めるようにして
おいた方がいいと思うよ。

720 :デフォルトの名無しさん:01/10/23 02:44
>>714
Delphi アルゴリズムという本があるよ。

721 :デフォルトの名無しさん:01/10/23 03:05
>714
VCL内をHashで検索。

722 :デフォルトの名無しさん:01/10/23 06:24
>>719
激しく同意。世の中にはすでに作られたCのプログラムが山ほどある。
その資産を生かさないのはもったいなさ過ぎるものな。

723 :714:01/10/23 16:27
レス書き終わった瞬間W2kで珍しくブルースクリーン出てウトゥ…

>>715さん
すみません、まだDel6Pro買ってないんです。
欲しいし買うつもりではいるのですが、なにぶん手元の資金が…(汗

また、いきなり実装みても混乱するだけと思うので、
せめて概念が分かってからにしようかと思います。

>>719さん、>>722さん
分かりました、まだDel勉強中の身ですがC/C++の勉強も
平行してします。

>>720さん
早速見つかりました。
Delphiアルゴリズム
Rod Setphens 著 光田 秀 訳
サイズ種別 B5変 1色
ページ数 416
ISBN 4-7973-0845-1
本体価格 \3,800
出版日 99/03/19
(http://books.softbank.co.jp/bm_detail.asp?sku=4797308451)
だそうですね、今度アキバにでも逝って探してきます。

>>721さん
>>715さんへのレスとかぶってしまいますが、まだいきなり実装見ても
混乱するだけと思うので、まずは本を見てからにしたいと思います。

レスくださったみなさんありがとう御座いました。

724 :デフォルトの名無しさん:01/10/23 16:40
>>723
C/C++で書く気がないならあまり真面目に勉強しなくていいよ。
コードを見て流れが読めればいいだけ。
Delphiでそこそこ書ければC/C++もそこそこ読めるようになると思う。

725 :デフォルトの名無しさん:01/10/25 21:44
初心者です。
IEなどのブラウザからINTERBASEに接続するISAPIアプリケーションを作っています。
「INTERBASEサーバ←→WEBサーバ(INTERBASEクライアント)←→ブラウザ」って感じで。
一定時間、ブラウザからの操作がなかったら
自動的に「INTERBASEサーバ←→WEBサーバ」のDB接続を切断するには
どうしたらいいのでしょうか?
そもそも、繋ぎっぱなしにするのがよくないのでしょうか?
みなさんお教えください。

726 :725:01/10/25 21:50
補足:
環境はDelphi6PRO+IIS5(Win2000)です。

727 :デフォルトの名無しさん:01/10/25 23:10
>>725
えーと、IBDatabase にタイムアウト時間を指定するプロパティがありますが、
それではダメ?

728 :725:01/10/26 11:46
レスありがとうございます。
IdleTimerのことですか?
試してみたけどだめでした。
ISAPI、CGI、普通(?)のフォーム
などのタイプによって動きが違うのでしょうか?

729 :ねこま:01/10/26 12:36
だめなら自分でアイドル時間を計測して切れば?

730 :725:01/10/26 13:49
>>729
「自分で計測する」&「自分で切る」
ということですか?
具体的にはどうやったらいいのでしょうか?

731 :ねこま:01/10/26 14:22
TVIdleTimer
Torry's とかにあるよ

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)