Delphi相談室その2

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
ちょっと内容が高度になりすぎてしまう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
86: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;
1211:2001/07/26(木) 09:16
>>11 は 教科書通りの再帰下降法
  1レスに収める為に 多少書き方は汚いけどちゃんと動くよ

#1 は数値シンボルね

関数は文字列の後に他の演算子が入らなくて(があれば
って処理すれば組み込めるよ。
13Dr.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 が帰るぞ

だいたい空白が入るとダメじゃないか
1511: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
(・∀・)イイ! バグフィックス版をアプして下さい
2111:2001/07/27(金) 15:53
>>20 バグじゃないよ 仕様なんだって

どんな仕様が希望? 希望によっては変更してもいいよ
2211:2001/07/27(金) 15:55
>>18 なるほど
 でもおっしゃる通り -- や ++ は別の演算子に使いたいし
 -(-(1)) と書いてくれたらいいんだし
2320:2001/07/27(金) 16:01
バグじゃないなら良いです。
2411: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
君だけ。再インストールしたら。
2725: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
良くわかってもないのに書くなよ

設計時に設定しろとかいう寒い解決方法なんて望んではいないんだ。
3634:2001/07/31(火) 08:23
それは1つの解決法としか書いてないだろ、

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

わざわざそのときの注意点まで書いてあるんだし
3734: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
おまえ邪魔
4037: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
その設定を変える必要は無いから,誰も変更していないんだけど?
5437: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
サブクラスでメソッドとかの制限ゆるめられるってのに
違和感がー
7370: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のない言語でああいうものをやると悲劇が訪れるだろうな…
82turbo 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メソッドの多態」で難なく乗り切れる。
トリッキー(笑)かっこいーなー
88turbo type D:2001/08/03(金) 15:33
> 嘘だろ…あれのどこがエレガント…
> たった2文字で何を表現したかが(人間様に)判るのか?

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

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

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

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

> ただし導入するなら、C++風の無用に重い奴じゃなく、
> GenericJavaみたいに軽量な奴だけ、許可。
C++のテンプレを詳しくはしらないんだけど
重厚な奴はいらない。
8970: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 テーブルの大きさは入らない。
だから,未使用であることが確定できるメソッドは,存在しなくても破綻しない。
分かるかな?
106105: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
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)...'になってる?
123120:2001/08/05(日) 22:47
&記号は入れています。
ちなみにWin2000上だけで起こります。
Delphiのメニュー自体もそのような状態になっています。
124120:2001/08/05(日) 22:47
&記号は入れています。
ちなみにWin2000上だけで起こります。
Delphiのメニュー自体もそのような状態になっています。
125120: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
物を知らないことをとやかく言う気はないが,いったん物を知ったら少しは自分で調べたらどうだ?
教えて君は辞めてくれ。
135120: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はかっこわるくて、誰も使わないんだぞ。
店でも置いてないところがおーいんだぞ。どうしてくれんだよ?
139turbo type D:2001/08/06(月) 11:36
遅くなったが
>>98
テンプレートの事、教えてくれてありがとう。

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

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

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

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

>>138
おいおい。電波かよ。
140デフォルトの名無しさん:2001/08/06(月) 11:40
>>139
このスレの品位を落とすような書き込みは禁止です。
そんなこと書くからみんなdelphi使いは馬鹿だって言うんだよ。
わかるか馬鹿で禿げで臭いって言うんだよ。
141127: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
旬ですか、すこし気が楽になりました。
148turbo 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 幅の調整もやれよ
152turbo 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 幅をつかって計算するんだよ
155turbo 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/
168161:2001/08/07(火) 23:20
レスありがとう!
一応落としてみます。>お二人がた
169PG初心者:2001/08/08(水) 14:04
VBでいうISNUMERICと同じような関数はデルファイに用意されているのでしょうか?
170デフォルトの名無しさん:2001/08/08(水) 14:20
ない。
171デフォルトの名無しさん:2001/08/08(水) 14:25
>>169
ちょっと考え方が違うから完全に同等のものは無いけど
A) Val 手続きを使う
B) StrToxxを使って例外をキャッチする

という方法で対応出来ると思うよ
172PG初心者:2001/08/08(水) 14:34
へーなるほど
やってみます
ありがとう
17370: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とおなじかもしらん。
17770:2001/08/08(水) 17:31
>174-175
なるほど、コンパイル時にそのオブジェクトが存在しないから
コンパイルエラーが発生していたのですね。
普段使っているのがPerlなのでその概念が頭の中にありませんでした。

TListを使うことでうまくできました。ありがとうございますっ!!
178turbo 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または出鱈目な値だ。

そう。あくまで関連付けなんだ。変数そのものにオブジェクトが入っているのではない。
ここ覚えておくとイツの日か大失敗を未然に防げる日が来るぞ。
18370: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);
191190: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
196PG初心者 169:2001/08/10(金) 15:15
整数チェックは確かにVAL手続きでOKでした。ありがとうございました
さらに質問
小数点を含んだチェックはどうすれば?
197デフォルトの名無しさん:2001/08/10(金) 15:18
Val でいいよ > 少数
0x40 や $40 という表記だって大丈夫 > Val
198PG初心者 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
先頭にゼロを含めると何か変化するのか?
207Delギコ: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;
213212: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 するのが楽だろう。
217215: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って、相対サイズにできるんですか?
234Delギコ:2001/08/14(火) 12:41
 ∧ ∧
 (,, ゚Д゚) Min,Max,PageSize
 (|  |つ
〜|  |
  ∪∪ "相対サイズ"の意味、よくわからん
235>>234:2001/08/14(火) 12:48
TScrollBar のグリッド部分。
例えば TMemo のスクロールバーだったら、
全体の文字領域に対する 実際の表示領域の割合で
グリッドの長さが変化するでしょ。
236ModelViewユニット: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
237ModelViewユニット(続き):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.
238Delギコ:2001/08/14(火) 13:01
  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚) < >>233=235 TScrollbarでさっさと試せ
Π ̄ ̄ ̄| \_____________
|つでしょ ()
| |___.|
  ∪∪
239236,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
それらしきプロパテーもメソドも無いけど…
242Delギコ: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ったんだあああああああああああああ
244Delギコ: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 に分かるように書き直してくれ
248Delギコ: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 同意
249Delギコ:2001/08/15(水) 19:11
  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (;゚Д゚) < …ネンノタメ>>246
  ./  |    \__________
 (___/


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

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

DBでTQueryは複数使ったりするし
StringGrid保存TComponent派生クラスというのもあるし。
250デフォルトの名無しさん:2001/08/15(水) 21:00
>>248
なぜにって、オマエモナー
251Delギコばす:2001/08/15(水) 21:34
  --------∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜□□ □□ ( ゚Д゚)< 前例踏襲
  (O)----(O)U-U) \__________

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

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

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

コンポーネント参照ね。あれは良いよね。
ビジュアルプログラミングもどきが出来る。
253Delギコ: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
258デフォルトの名無しさん:2001/08/17(金) 01:53
あなたの疑問はこれで解決できましたか?

◎はい ○いいえ

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

◎はい ○いいえ

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

彼女が欲しい
259デフォルトの名無しさん:2001/08/17(金) 09:44
え? じゃあ、あの人はMLにHTMLメールを送ってるのか?
そういうことはしない方が良いと教わったけど、そういう
時代じゃないのか。知らんかった。
260デフォルトの名無しさん:2001/08/17(金) 09:58
HTMLというかRichTextだわな
261259: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()というメソッドが一般的。
でも実装は自分でやってね(藁
273271: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で実行時の適当なコマンドライン引数を設定して
プログラムで判別する方法もあるけど。スマートじゃないね。
280Delギコ:2001/08/20(月) 10:57
  ∧∧
 (゚Д゚ )
  ⊂  ヽ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   〉 ノノ~ <  CmdShowが9になってたりするな
   ∪∪   \______________

姑息な手だが。
281278: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 にソースコードがあるから、それを使うかサポート外
ってことで
284Delギコ:2001/08/21(火) 14:59
> Win95 では IsDebuggerPresent API がないが、MS の
> KB にソースコードがあるから、それを使うかサポート外

 ∧ ∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)  <  せっかくだから、Delphiコードで示してくれ
  | つ[|lllll]). \_________
〜|   |
  ∪∪   ショウカイ スルナラ URL クレ
285デフォルトの名無しさん:2001/08/21(火) 15:01
MSのKBってなんじゃらほい
286Delギコ: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によるオブジェクト指向

この三部作。技術評論社。
293288:2001/08/22(水) 09:10
ありがとー
初めに、初めてのDelphi買ってみます

>>289
地方なので売ってません(TT)
294デフォルトの名無しさん:2001/08/22(水) 10:01
>Delphiによるオブジェクト指向

これ良書らしいから見てみたいんだけど、秋葉原のどこにも無かったよ
ネットで注文しようとしても在庫無しだし、今でもまだ刷ってるの?
295Delギコ:2001/08/22(水) 10:11
|   |  |     |  | |
|  |゜⌒/..| \ | ゜|
゜ ⌒// ..| ゜ \  ゜  |
| / / | | |ヽ゜ \⌒゜ |
| . ̄ ̄ ̄ ̄|| ̄ ̄ ̄ ̄
 |  ∧ ∧||   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|   (,,゚Д゚)|| < もう酢ってないよ
゜ | ..|∪ つ  \______________
 | |.| |   |   |
___.U..U____     ゜
296294: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
メニューとアクションをリンクしたら、メニューのショートカットではなく
アクションのショートカットが優先されるのでは?
311309:2001/08/24(金) 01:32
あ、すみません。
(309の一行目)メニューの方でなくて、アンドゥアクションの
ShortCutの方を設定しています。
変更したときにメニューのShortCutも自動的にアクションと同じものに
なっているようですが、普通はそれで正しく動作するんですよね?
312デフォルトの名無しさん:2001/08/24(金) 01:46
フォームにTImage、TStatusBar、TMenu、TActionListを置いて、
Action1.ActionUndoExecuteにCTRL+Zを割り振ったけど、
ちゃんと動いたぞ。
313309:2001/08/24(金) 02:18
>>312
チェックしてくださって有難うございます。
俺もチェックしました・・・動きました。謎です。
とにかくもう少し悩むことにします。
314デフォルトの名無しさん:2001/08/24(金) 10:00
[SoftwareTechnology 22]
Delphiオブジェクト指向プログラミング
技術評論社
堀越一雄 著
\1980
ISBN4-7741-0427-2 C3055

コレ最高。俺はオブジェクト指向については
コレ一冊で十分理解している。
315Delギコ: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
317Delギコ:2001/08/24(金) 12:39
   ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   (,, ゚Д゚) < >>316 エロじゃん!
=====U U====\________
|   ギコ  |
| まっしぐら |
318dd: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 ノ
  (_(__)
322Delギコ: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
に入ってるみたいですけど。。。

わかんない設定とかはいじらないようにしているんで、
ほぼデフォルトのままなんですけど、
何がおかしいんでしょうね。
338335=337:2001/08/25(土) 15:31
>>336
あぅ。つまりコーディングにミスが有ったってことですか。。。
339335=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を使用しないように設定すると、
ファイルがないといわれることはないのではないでしょうか。
どちらにせよエラーはでますが。
341335=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
「レバー」
焼き肉か?

「リバー」
だ。
猫んところで「レバーのようなコントロールだからレバー」
ってやったのが誤りの根幹か?
352350:2001/08/25(土) 22:51
ちなみに、シェブロンが押されたときにやって来るメッセージは、
RBN_CHEVRONPUSHEDです。
どうも、Delphi6でも宣言されていないっぽい。

RBN_CHEVRONPUSHED = RBN_FIRST - 10;
でオケ。
353350:2001/08/25(土) 22:54
>>351
ホントニ?
リバーだったのかー。
いままで、ずっとレバーレバー言っていたよ。
焼肉のレバーは好きだけど。
354350: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
シェブロンって,アメリカでは至る所にあるガソリンスタンドの名前なんだけど
聞いたこと無い?

平沢進の曲名にもあるが,こちらはちとマイナー
358Delギコ: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;
362Delギコ:01/08/26 17:31
    ∧∧   / ̄
  _(,,゚Д゚) < >>359 サンク--ス
⊂,,__つつ.  \_

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

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

NUL で終わる文字列ルーチンは、 NUL で終わるから
(文字数+1)文字分の容量が必要なのさ
>>362
プラス1は C の文字列ターミネーター確保のため。
365Delギコ:01/08/26 18:16
       ∧∧l||l
       /⌒ヽ)  トホホ
     〜(___)
    ''" ""''"" "''

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

天然だよ、天然

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

>>363-364アリガト
366厨房われざー:01/08/26 18:18
Professional版をMXで落としたんだけど尻がワカラン!!
>>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
> 平沢進の曲名にもあるが,こちらはちとマイナー

まわるよシェブロン、ひゅーーーーーーーーーー
374test: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のは
ちょいやばいかも。
380Delギコ: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
ループに効率的なコードを生成できるようにするための制約事項です。
382Delギコ: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を使いまわしているのかはわからんが。
383Delギコ: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!
389378: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;
400398:01/09/02 16:11 ID:psNHQDZo
あぁ、勝手に納得した。

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

誰か解説してくれー
401398:01/09/02 16:13 ID:psNHQDZo
>>399さん、サンキューです。

まさに今、その事に気がついたばかりです。
なるほどね〜
402Delギコ: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
なんでですか?(厨房でスマソ)
405Delギコ: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オブジェクト指向"本に
超明快な解説が載ってるんだけどなあ。手に入りにくいんだよな。
406Delギコ: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よりも例外を発生させた方が素直だと思う。
408397: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;

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

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

てこと。
411409:01/09/02 18:12 ID:SHIZw3Bc
…と、俺だったらこう説明するんだけど、
ツッコミどころある?
412400: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は、メンバー変数の初期化作業って考えて良い?
413Delギコ: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を使ったコード
どちらか楽か、どちらが(自分以外の)誰でも変更しやすいかを
判断したら、わかってもらえると思うのだが…
414Delギコ:01/09/02 18:21 ID:oukomFDw
   ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜''~(,,゚Д゚) < 間違った事覚えると危険という実例だ。
  UU'UU    \________

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

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

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

そうじゃなくて
オブジェクトの実態(インスタンス作成)って事。
それと同時にメンバー変数が初期化される。
(メンバーの実態も生成されるから。)
415400: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 しなくても使えると初めて知った
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|
418Delギコ:01/09/02 18:55 ID:oukomFDw
    ∧∧   / ̄
  _(,,゚Д゚) < >>417 こんなこともできたり...
⊂,,__つつ.  \_

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

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

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


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


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

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

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

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

ちょっと微妙なのでいろんなヒトの意見は聞きたいネタです。
420400: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;
429407: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〜の中で使うとコンパイラに怒られる。
勉強になったよ。。。
430408: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ループを途中で抜けたかどうかで分岐する処理を綺麗に記述できないことのようですね。
431408: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論争的になってきそうなのでやめておきます。

だな。
勉強にナターヨ。
433Delギコ: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でいうとどれになりますか?
>>451
ClassesとContnrsユニットの中から使えそうなのを探すことになると思われ
453Delギコ:01/09/07 00:23
 ___ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ___( ゚Д゚)<  >>451 TListとかTCollectionあたりか?
 __ /⊃三つ \_______
 _〜′ / \
 _ ∪ ∪    \   YOー ワカラン
    ◎ ̄ ̄ ̄ ̄◎
454ななしヘタぐらま:01/09/09 02:23
>>435
ニフチーのFDELPHIにはフリーカーソル無効化ツールがあったのですが(D6対応は不明).
配色が標準色からしか選べないのは私も不満ですが,
ウィンドウズの前景色と背景色をつかうようにして
ウィンドウズの色設定のほうを色々変えています.
チョコレート色とか桃色とか何でもありです.
リアルうんこチョコレート味
>>450
わかったぞ!きっと「delphiの奇跡」を執筆した吉田弘一郎のことを言いたいのだろう。

あの本でいきなり*説明書も読まずに*動的生成をしないコードを書いて
動かない動かないって焦る、という描写が有ったもんな。

言語なんてものは原理的に「どんな造りもアリ」なんだから、
説明を読まずに他の言語からの類推で使い始めるってのは
言語に対する姿勢としては、単なるドキュの姿勢。
458誤爆人:01/09/09 09:51
>>435-436
sl := TStringList.Create;
try
  sl.LoadFromFile(FileName);
  TextFileBody := sl.Text;
finally
  sl.Free;
end;

(゚д゚)ウマー
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 の組を使えるだろうに・・・
速さだけならstream系よりBlockRead/Writeのが
速そうだけど計った人いる?
462デフォルトの名無しさん:01/09/09 16:08
>>461
はやいよ。
単体の呼び出しでは

FileRead < TFileStream < BlockRead

BlockRead がもっとも遅く FileRead がもっとも速い。

単純な I/O では上記の通りだが、ストリームインターフェスが
必要なら必然的に TFileStream を利用することになる、バッファ
付き I/O によって高速化したりできるのもストリーム系だけ。

そして、FileRead と TFileStream のコストは最適化で消える
程度なので BlockRead/FileRead ではなくて TFileStream を
使うべし。
< の使い方おかしいように感じるが
<> を、大なり、小なり としてではなく
矢印として使っていると推測される。
解りづらいから逆にせい>>463
BlockReadってバッファもたないから遅いんではなかったけ?
Delphi の操作レベルではどれもバッファはないぞ

BlockRead が遅いのは BlockIO を呼び出したり、その中で
関数ポインタを利用して低レベルの入出力を実行したりと、
まわり道が多い上に、最適化が効かないようなコードが多い
からだ

>>465

BlockRead > TFileStream > FileRead

ってことか? 矢印なのかな? コストが少ないとか
動作が軽いって意味で FileRead が小さいって意味じゃない?
468sage:01/09/19 20:54
Delphi 6 エンタープライズ 60日体験版 
を下記キージェネを使えば製品版になります
ぜひご利用ください
http://www.crackbest.net/chcrack/crack/delphi6.exe
469Delギコ:01/09/20 15:28
     ||  || ̄ ̄|| ̄ ̄ ̄||
     ||  ||    ||    /||
     ||..∧||  /||  //||
   ジー ||..(:゜||//||//  ||
     || |つ/  ||/    ||
     || |. ||    ||___||
    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|

    /_________ヽ
     ||    三 || ̄ ̄ ̄ ||
  ガラッ! ||シネ!...三 ||    / ||
     || ∧∧Ξ||  // ||
     ||(゚Д゚ ) .||//   ||
     ||ι   ⊃||/     ||
     || | | ||___ ||
    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|

    /_________ヽ
     || ̄ ̄ ̄ || ̄ ̄ ̄ ||
     ||    / ||    / || >>1
 ピシャ! ||  // ||  // || ケッ! ヴァーーーカ
     ||//   ||//   ||
     ||/     ||/     ||
     ||___ ||___ ||
    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
>> 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

なんかあきらかな逆アセ対策・・・怪しすぎ
ageてみる
>>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'] := '[email protected]';
end;

みたいにやると EAccessViolationが発生します。
CPUウィンドウを見ると TIdHeadersList.GetValueFormLineで
問題が発生しているようなのですが。
>>475
Add();
にするとか
8.1.0-Aならその構文でできるけど
メール関係しか試してないけどIndyまだバグ多し
たぶん英語のみならうまくいくのかな
477475:01/09/21 12:07
>>476
う、エラーはCreateしてなかったからだ。
Msg := TIdMessage.Create(idSMTP1);

Msg.AddHeader('[email protected]');
Msg.ExtraHeaders.Values['Errors-To'] := 'hoeohe';
Msg.Headers.Add('[email protected]');
はダメ。

Msg.Headers.Values['Errors-To'] := 'hoeohe';
でいけたようです。お騒がせ〜。(´∈`)

しかしそうするとなんのための ExtraHeadersなんだ??
478名無しさん:01/09/21 13:05
468のファイル実行した人いるのかな・・・
考える間もない。>>478
本物だったとしても、ウィルスだったとしても、実行してはならない物。
480名無しさん:01/09/21 17:09
了解しました。
本物だったとしても実行してはダメですね
てーか自腹で買わんヤツがEnt使う理由が思い当たらん(藁
482sage: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
画像ファイルをドラッグ&ドロップすると、その画像が
表示されるようなプログラム作りたいんですけど
どんなコンポーネントを使うとよいのでしょうか?
わけわかんないこと書いて鱈すみません
484Delギコ:01/09/21 23:05
___  ヽ
_ /⊂ `∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | |  \( ゚Д゚)< TImage貼り付けて
  | /   ∪ ∪  \LoadFromFile(ファイル名)したらよろしくない?


エクスプローラなど他のアプリケーションからファイルをドラッグアンドドロップで受け取る方法は?
http://www.sakaki.keiaikai.or.jp/faq/delfaq002.html
485デフォルトの名無しさん:01/09/22 11:40
>>484 出張ありがとうございます
やってみます!
486Delモナ:01/09/22 21:46
 / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | Delモナで対抗
 \__ ____
    ∨    ___
   ∧_∧  ||\   \  ̄|  ̄|
  (  ´∀`)  || | ̄ ̄||: |
 ┌(  つ/ ̄||/  ̄ ̄/ |=|
 | ヽ |二二二」二二二二二二二二」
   ̄]|__)  | |        | |
  / ̄\  /  |      /  |
  ◎  ◎ [__」     [__」
487Delギコ:01/09/22 22:00
            Delモナ、イイカンジ
          ∧_∧ ☆
          (*゚Д゚)
          / |
      ,, ,,,,  (_,ノ ,,, , ,,
          ノ ,,
488BlockRead/Write野郎:01/09/23 00:11
なんかレスついてた(^^;

>>460
Reset/RewriteはCreateFile/OpenFileだと思うけど・・
BlockRead/Writeとの置き換えって??

BlockRead/Writeするときは、自前でバッファリングするか
バッファなしを前提で速くなるようにアルゴリズム組むから
速度が遅いとかはあんまり困ってないね。まぁ、悪しき慣れだな。


いい加減なんとかしようと、なるべくTFileStreamを使うようには
してつけどねー

そういえばスレッドの中からTFileStreamって安全に使える?
BlockRead/WriteはAPI直呼びだから問題ないとは思うんだけど、
やっぱりVCLだからSyncronizeしないと駄目かな?
>>488
TFileSTreamもAPIをオブジェクトにラップしてるだけだから
スレッドセーフな気が。
>>482
タイケンバソはVCLのソースコードらしいけど、本当なの?
なければそんなの使えない。

まぁ、マニュアルの付いていない言語製品なぞ、
始めから使う気など無いけどな。
491490:01/09/23 04:20
>タイケンバソはVCLのソースコードらしいけど、本当なの?
タイケンバソはVCLのソースコード無いらしいけど、本当なの?

恥カキスマソ
>>489
まさか API がスレッドセーフだと思ってるのか?
WriteFile はスレッドセーフじゃないから2つのスレッドから同じファイルハンドルに対して書き込むとファイルは壊れるぞ
だから、TFileStream の単一のインスタンスに対して複数のスレッドから書き込みを行えばファイルは壊れる。

偶然だが CPU が1つの環境では CPU の使いまわしの都合で壊れないけどな
493デフォルトの名無しさん:01/09/23 22:42
>>492

VCLのスレッドセーフティーと、スレッド間の同期の問題を
ごっちゃにしているね。
  Ruby     は      クソです!    ゴミ      箱     逝きです!
  ∧_∧   ∧_∧    ∧_∧   ∧_∧     ∧_∧    ∧_∧
 ( ・∀・)  ( ・∀・)   ( ・∀・)  (  ・∀)    (∀・  )   (・∀・ )
⊂ ⊂  )  ( U  つ  ⊂__へ つ  ( ○  つ   ⊂ ○ )   ⊂ ∩  つ
 < < <    ) ) )     (_)|   \\ \   / //   / /\ \
 (_(_)  (__)_)    彡(__)   (_(__)  (_(_)   (__)  (__)

この発言をコピペしていただければ幸いです。
Rubyって何ですか?
Perlで検索>495
あの、本気で悩んでるんです、教えてください。
Delphiでオブジェクト追加していくとソースに反映されるじゃないですか?
たとえば、
メニューアイテム追加>アクション>メニューアイテム追加>...
こうやってくと、宣言がめっちゃ汚くなりますよね。
あと、ソース上では階層構造も無くずらずらとオブジェクトが並ぶのもダサいんですが、
どうにかなりませんか?
498デフォルトの名無しさん:01/09/24 03:33
age忘れました
499デフォルトの名無しさん:01/09/24 03:36
>>497
どうなれば良いと思いますか?

これって人によって好きずきだから,あまり勝手に変更してもらいたくないな。
500Delギコ: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〜"で統一し,
あとはソースを直接いじって並べ替えています.
でもできるだけいじらずにすむように,
メニューデザイナで項目を増やしたら
キャプションを決める前に変数名を書き換えてしまいます.
503BlockRead/Write野郎:01/09/24 10:31
>>492
>>493でフォローされているからあえて突っ込まない(w

うーん、やっぱりちょっとスレッドで使うには調べた方がよさそう
かな。たぶん、489さんの言ってるのと同じ感じはするので、大丈夫だと
は思うけど・・・
IDE を拡張して、最初の published の部分を折り畳んで見えなくするヤツとかないかな
>>501
あまり建設的な意見ではないようだ。煽りか?
オブジェクトに名前を付ける。ってのはプログラムから操作したい。ってことだけど
メニューセパレータを操作するってよくあることか?
目障りなら、名前を取ってしまえばよい。

Delphi のメニューエディタでの名前置き換えは VB/VC にはない面白い仕掛けが
してあるが。
TShellTreeViewなどのソースってどこにあるのでしょうか?
Sourceフォルダにはないような・・・。
507Delギコ:01/09/25 12:08
 (`´`) 
 │ │
 ∧_l   ∫   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (,,゚Д゚)   ∬  <  $(DELPHI)\Demos\ShellControls
  |∪ |つ=●   \___________
〜| ̄| ヒルメシダ
  U U
>>505
なんていうか、あんまりうまく説明できてないね。
とりあえず、全部散らばらせるんではなく、
管理クラスを作るなり名前空間を使うなりで種類ごとに
分けてくれるとずいぶん綺麗になると思うんですが
509Delギコ:01/09/25 12:30
現状では、あのソースの部分はどうにもなりません。
Delphiが管理する所だからDelphiに任せて
"人間は見ない&編集しない"のがよいと思われ

もしかしたらソース整形AddInがあるかもだけど
聞いたことはないです。

オブジェクトツリーと同じような並びで
表示されると結構マンセーですね。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧    マターリ
   (,,゚Д゚)∫
   /  つ旦O
 〜(._[ ̄ ̄ ̄.]
       ̄ ̄ ̄
VS.NETのIDEは自動生成された所は畳めるようになってるな
すっきりするようだが開け閉めに余計なマウス操作が増えてかえってうざかった
>>510
それって使ったことないけど、畳むか畳まないかユーザが選択できれば便利だと
思うけどなぁ。
viのholdみたいにキーボードから折りたためたりできりゃいいんだがな。
そうか? 初心者だからって定義部を隠してもしょうがないような気もするし
定義部はIndex代わりで便利じゃないかと思うんだが?

それとも最近の人はコードエクスプローラがあるから不要なのかな?
>>513
>定義部はIndex代わりで便利じゃないかと思うんだが?
そうそう、それよ。
全然関係ないけど。JAVAはそういう「全体を見渡す」ことが出来ないから、好きになれない。
515511:01/09/26 09:26
>>513
俺自身はそれほど必要だとは思わないんだけど、フィールドやプロパティへのアクセス
メソッドなんかはほとんど見ることがないから、そこだけ折り畳んでおくとちょっと
便利かなと思った次第。
private全部を折り畳むとかいう機能ならいらないな。
多分その辺は開発環境や、エディタの機能で補えるからという理由で
なくしてるのではないかと思う。
実際、コードエクスプローラは全体見渡すのに役に立つ
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
519Delギコ: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
一つ質問。
Delphiでワイルドカードマッチを高速に行うルーチンってない?
一々TMask作ると凄く効率悪いんだけど。
自分で作れば良いんだが、ヘタレ故…
521517:01/09/28 09:57
>>519
TDatabaseを使って解決できました。
ありがとうございました。 m(__)m ペコリ
522120:01/09/29 18:22
O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。
523ボクの嫌いなヒトたち:01/09/29 20:10
>>522

 オンラインソフトの作者の掲示板で、あまりにも具体的すぎるプログラミング手法(ソース)を教えろという方(^^;

 アナタの実現したい事のソースを書いたら、どっちが作者か解るめぇ?ちっとは、自分で勉強しないとな。

 「自作ソフトの???に実装したいのですが...」

 なんてくだりは1度や2度ならともかく、何度も何度も書き込んであると見てる方がドツいてやりたくなります、いやマジで。

 ひとしきり質問攻めが済んで、自分で理解できるレベルにまで解説してもらっといて

「これで拙作???に???の機能が付けられます、ありがとうございました」

 ...も同罪。後ろ足で砂かけて去って行くんだね、キミは。

#売名行為にしか見えないもの。
#そういう行為は自分のHPでやってくれ!!
524127:01/09/29 21:01
>>523 氏ね。

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。
525532:01/09/29 21:09
>>524
氏ね。

>>524がうんこで作られているということを知りました。
あれと同じようなうんこになりたいのでうんこ
526129: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 で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。
529134:01/09/29 22:24
>>527 も氏ね。

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。
530デフォルトの名無しさん:01/09/29 22:36
>>529
あなたは、パーソナル版をお使いのようですね
エンタープライズ版でしか作成できないので、購入してください
531デフォルトの名無しさん:01/09/29 22:40
Ruby >>>>>>>>>>>>>>>>>>>>>>>>> Delphi = 糞
532147:01/09/29 22:52
>>530 氏ね。俺はプロのプログラマーだ。エンタープライズ使っている。

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。
>あれと同じようなものを作りたいのでやり方を教えてください

マジレスします。

 勉強しましょう。

どんな勉強しなければいけないかは、私はアナタの友達じゃないのでアナタの
事はわかりません。お友達かセンセイに聞いてみなさい。
534デフォルトの名無しさん:01/09/29 23:04
>あれと同じようなものを作りたい
誰も作ったことの無いようなものを作ってやろうという方が
楽しいと思うけどね
535147:01/09/29 23:21
俺の質問に答えろ。
お前らカスプログラマが偉そうに諭すな。
どうせ分からないんだろ?

O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。

早く教えてください。
536デフォルトの名無しさん:01/09/29 23:37
>>535
おぬま氏に聞いてこい。
537デフォルトの名無しさん:01/09/29 23:39
>535
ここにはカスぷろぐらましかいないよ。
>俺の質問に答えろ。
わかりました。
>お前らカスプログラマが偉そうに諭すな。
偉そうにはしていません。
>どうせ分からないんだろ
はい。
>O'sEditor が Delphi で作られているということを知りました。
違います。
>あれと同じようなものを作りたいのでやり方を教えてください。
私は知りません。
539デフォルトの名無しさん:01/09/30 00:03
るby >>>> でlpひ
>>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
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
厨房が一人か二人、紛れ込んでいるようだ。
放置きぼん。
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;
549sage:01/09/30 19:02
>>547
int64 を返す関数にしておけば,sum に代入するオーバーヘッドを削除できるぞ
Win32API
>>547 Int32x32To64
>>548 MulDiv
その他
Int64ShrlMod32とかいくつかこの手のAPIすでにあるね。
551デフォルトの名無しさん:01/09/30 19:11
>>550
API バージョンはやたら重たいよ。
Turbo Pascalのころはつかえたinline指令が
今は無視されてるのが痛いな。
これぐらいの小さなコードなら埋め込みたいね。
Object Pascal 言語ガイド - アセンブラ手続きと関数

を読めば inline が常に指定されていることがわかるだろ
>>553
Object Pascal 言語ガイド - asm文
>予約語 inline と assembler 指令は,下位互換性のためにのみ残されています。コンパイラはこれらを無視します。
Turbo Pascalのinline指令で書かれたprocedureは、
C++のinlineやMicrosoftのCのintrinsic同様に
使う場所でcallではなく直接コード自体が埋め込まれる物だったんだよ。
Delphiにはそれがない。
アセンブラ手続きと関数 を見てもinline相当には全く見えないが。
>まわし殿
上のレスがレスだけに、最初コピペ嵐に見えた…
鬱打氏脳…
557545:01/10/01 08:38
>>556
 厨房除けの意味でコピペしたので まあ荒らしと同じでしたね

完全にまわしてもよかったんだけど、こっちの荒らし度マシになってしまうし
まあ4つくらい書いとけば誰かコメントくれるだろうと思ったので

>>594
 この関数をアセンブラにしたのは内部でCFがたったらクリッピング
 するような処理を追加したかったからかも・・・・理由忘れた

>>552 inline でアセンブラ関数を定義すると
  結局レジスタ割り付けを制限するからレジスタの少ないx86では有利にならないかも
  関数呼び出しのオーバーヘッドは演算命令と並列処理されるから無視出来るだろうし
あっちは元気だなぁ。

ところでここにあるファイル,なんだと思う?
ftp://ftp.borland.co.jp/pub/delphi/
>>558
こういうアドレスが平気で載ってるところが2chの魅力だよなあ。
情報感謝。
でも自分はヘタレなので公式発表まで待ちます(w
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
もう少し落ち着いて離せ
565563: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プロパティが表示されるけど
そういうのとは違うのか・・・
567566:01/10/05 11:07
スマソ・・・普通のフォームでも表示できるから全然違ったね
568Delギコ:01/10/05 11:24
・・・
TNotifyEvent型のブックマークなの?

イベントそのものに処理を書いている時点で
内部のコードが、よろしくないと思うんだけど…

どうしてもやりたいなら
設計時だけTLabelを内部で生成して
Self.Top/Self.Leftの近所に
貼り付けたらどうかな。

Label.CaptionにTNotifyEventに関連づいた
メソッド名を取得する方法は
サパリわからんけどね。

オブジェクトインスペクタで見るだけで
いいと思うんだけどなあ。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧    マターリ
   (,,゚Д゚)∫
   /  つ旦O
 〜(._[ ̄ ̄ ̄.]
       ̄ ̄ ̄
569563: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プロパティに代入しようかな
そうしたらヒントで区別はつくけど
570Delギコ:01/10/05 11:53
> with TMethod(Value) do EventName:=TObject(Data).MethodName(Code);
ナイス

>まだコンパイルされてない設計時でもこれで
実は設計時にもコンパイルされたものを扱っているそうです。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧ ∧   
   (,,゚Д゚)∫
   /  つ旦O
 〜(._[ ̄ ̄ ̄.]
       ̄ ̄ ̄
571563:01/10/05 12:25
でも 組み込んだコンポーネントはDLLになってるからそうだと判るけど
イベントをクリックした段階ではフォームのメソッドとしてコードが
挿入されるわけで、これってまだコンパイルされてないでしょ?

たぶんポインタには仮の値が入ってるんじゃないかな?
572563:01/10/05 15:01
残念
  Name プロパティを イベントプロパティのSetメソッドで書き換えると
Nameは書き換わるけど、肝心のイベントの登録がされなくなったよ
573Ruby!: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を作りたいんですけど良いコンポありますか?
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);
みたいなことはできないの?
やっぱ配列使うのが常道なんでしょうか?
array of Byte使えば動的にサイズ変えたり廃棄できるよ。
580デフォルトの名無しさん:01/10/06 01:46
>>578
どうもです
そうですね。やっぱ配列使うしかないんですね。
581 :01/10/06 02:35
>578
PByte(Integer(p) + 1)^
他にも

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;

とか
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;

とか
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;

とか
Win2000上でDelphiで作ったプログラムにディスクの
空き容量を表示する機能を付けたんですが、エクスプローラで
表示される空き容量(***MB,や***GB)と値が違うんですが、
なぜでしょうか?
バイトでは正しい値になってるんで MBやGB換算が違ってる
と思うのですが、どのように計算したらよいのでしょうか?
動的配列なら

var
 p: array of Byte
 i: integer;
begin
 SetLength(p, 100);
 for i:=Low(p) to High(p) do p[i] := Random(256);
end;

とか
>>585
まさ1000で割ってるとか・・・はないわな
588デフォルトの名無しさん:01/10/06 05:10
Delphi6Personalを使って、CSVベース(ファイルロック付き)でデータベースを作ると、MS-Accessみたいに利用者の端末にアプリをインストしなくても使えるようになってうれしいのですけど、そういうのは流行らないのでしょうか?
>588
 規模によるでしょ。 数千件くらいなら今のパソコンなら余裕でしょ
個人用の住所録とかなら十分

 CVS はサイズに比例して重くなる
 データベースを使うと大きさに殆ど関係なく中程度に重い
CVS と CSV を間違える人は多い。
>>>589
データーベースにCVSって???
>>591
コンビニエンスストア = CVS
593588:01/10/06 22:02
はい、もちろん一万件以内です。
DelphiでDBというと、なぜか専用DBMSの話が出てしまうし、書籍のほとんど全てがそれだというのが疑問なのです。
ネットワークで使えるPerl掲示板程度の簡易ロック付きCSVのDB用コンポとか無いのでしょうか?
固定長テキストじゃ駄目?
595588:01/10/07 04:08
>>594
固定長だと、フィールド長の設計とかが必要になってしまうので、できれば、フィールド属性も文字列決め打ちのイージーなものが欲しいです。
XMLとか
597588:01/10/07 07:51
>>596
XMLも良いのですけど、パーサの問題とかがゴタゴタしてるので、とりあえず引用符付きCSVが良いのかなと。
BDE の Paradox や ASCII Driver はダメなの?
あとは海外のフリーコンポーネントとか、ちゃんと探した?
            
      
                         
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!RubyUzai!!
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 メガンテですね
603601:01/10/07 22:08
ま、俺の存在価値は第2王子並かもね(w
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;

最初と最後の代入が格好悪いんだけど、綺麗に書くには?
 インラインでメソッド書く時のメンバは どのポインタから参照すればいいの?
605588:01/10/08 20:59
>>598
BDE使うと、各端末にBDEをインストールする必要がありますよね?
それに、Personal版は、BDEは、使えるのでしたっけ?
>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みたいに使えないかな?
↑Delphiスレageまくって楽しいですか?
すっごくうざいんですけど
610デフォルトの名無しさん:01/10/08 22:04
>>609
じゃ、どんなスレがあがると楽しいのかなぁ?
611デフォルトの名無しさん:01/10/08 22:05
早速煽りに反応してる人がいます!
612デフォルトの名無しさん:01/10/08 22:07
Ruby厨の総攻撃開始か?
>>661-612
決め付けはいかんよ
609=610=611=612
だとするとオレがアホって事か・・
MyBase が XML 形式で保存するオンメモリのDB(簡単なSQLも使える)じゃないのかな?
615誤爆人:01/10/08 22:35
>MyBase
そうなんだけど、Personalの人とかD5の人は使えないじゃない。
織れはまだD5ProだけどDでもXMLもっと流行って欲しいから
D5でもPersonalでも使えるってのは(・∀・)イイ!と思うんだがなぁ
普通にファイルロック機能つきCVS処理クラス書けばいいじゃん。
そんなに難しくないよ。
617デフォルトの名無しさん:01/10/08 22:40
ああ、ファイルロックがあったねえ。
ださー。
>MLで出てたXMLモジュール
ってなに?
Delphiスレは一つに統一して頂けませんでしょうか?
上でもうざいって言ってた人いたけど実際うざいんだよね
みんながみんなDelphi使ってるわけじゃないんだし

あぁ、煽りとか言われるんだろうなあ
>>619
煽りとは言いませんが、現在は住み分けが出来てますし、
アンチ厨が立てたクソスレを除けば3本です。
つーわけで嫌です。
公平にVB・VCが1つになったらDelphiも統一するって事で
622誤爆人:01/10/08 23:30
>>618
XDOMとかいうやつ

>>619
煽りがいなくなれば中身のある上がり方だからいいんじゃねーの
ちょっと前は6つも7つもあったんだから、しばらくしたら自然に減るよ
Techスレが沈んでるのは寂しいが。
Delギコが来る前まではage控えめだったんだが・・・
624618:01/10/08 23:41
>>622
サンクス。いやMLには参加してないもんで。確かDelマガでも特集してたやつだね。
625誤爆人:01/10/08 23:57
>>624
それだけど、日本語使えるらしい。
ttp://hp.vector.co.jp/authors/VA017148/delphi/xml/
今時ですから SQL が貧弱でも通らないと やっぱりダメでしょ

MyBase は Pro以上添付だけど 実行ファイルに含まれる=DLL類不要だから
作ったアプリ配布するにはそんなに苦労しないんじゃないの?
627誤爆人:01/10/09 00:47
上記の理由からMyBaseあんまり見てなかったんだが、MyBaseって
「ファイル格納形式としてXMLが使える」ってだけで、XMLパーサーではないようだね。
(内部では勿論使ってるだろうけど)
SQLが使える、ってのは、言い換えればRDB程度の表現能力しかないわけで・・・
XMLのライブラリとしては魅力が少ないと思う。(SQLしか使えなさそうだし<MyBase)
でも >>588 の用途にはぴったりだな。

フツーに標準XMLパーサー使おうと思ったらEnt版になっちゃうのかな。
別にDelphi固有の問題というわけでもないのですが、
今開発しているのがDelなのでここで質問させていただきます。

Win32プラットフォームで、一度フック用のDLLを読み込みフックを仕掛けると、
そのDLLは解放されてもなぜロックされているのですか?
正直、デバッグやその他の作業の邪魔でしょうがないのですが。

このWindowsの仕様の理由を教えていただけませぬか?
630デフォルトの名無しさん:01/10/11 11:40
>>629
つーことは、解放直前にDLL側が UnhookWindowsHookEx を呼んでいないことになるね。何のDLL?
>>630
いや、コード上は明らかに呼んでいます。自作のでもそうでした(といっても自分はフックに関する
経験は浅いので間違えた実装してる可能性もあります)し、他のアプリが
使用しているTcmhook.dllもそうですし。
OSは関係ないみたいです。Tcmhook.dllについてはWin98のころからそうでしたし、
Win2kでも自作dllをコンパイルしようとすると怒られましたし。

と思ってW2kで検証したらdll削除できた…(汗
自分が書き込んだ経緯は、

1.開発/デバッグ中のアプリを正規の手続きを経て終了
2.コード変更(文字列定数のTypoの修正なので数秒)
3.コンパイル
で 「なんちゃら.dll を作成できません」と怒られました。
(Del6Per+W2kSP2)

で、資料漁って書き込んで資料漁って、OS再起動せずに
コンパイルできないか…と思って試しにファイル移動/デリート
したら出来ました(汗

もしかして、解放までラグが数分ほどあるとか、でしょうか…?

う〜ん、自分が厨房と自覚(鬱
>>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.
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 僕は英語が出来ますって言ってるわけだ

   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (  ・∀)  ∧ ∧ < 言ってないですよ・・・ソンナコト
 (     )  (;゚Д゚)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\|Libretto|\
        ̄   =======  \
635デフォルトの名無しさん:01/10/11 14:07
UnhookWindowsHookExはフックプロシージャを含む DLL を解放しない。
他の別のプロセスのためにFreeLibrary 関数を呼び出せないので、その時 DLL を解放する方法がない。DLLを結び付けた全部のプロセスが終了するまで DLL は解放されない。
636デフォルトの名無しさん:01/10/11 14:15
DLLを結び付けた全部のプロセスが終了されるとWindows が DLL を解放する。
637631:01/10/11 15:07
>>633-636
なるほど、ようやく飲み込めました。

ありがとうございました。
あれ、開放しないの?勘違いしてた。でもHook->Unhook->Hookってやると
Dll内の変数、その都度初期化されるよね。何でだ?
639デフォルトの名無しさん:01/10/13 21:26
http://www.borland.co.jp/kylix/report/ohishi_2.html
このページのものを
D6Proで動作させたいのですが、どのようにするとよいのでしょう。

アパッチというものはよくわかりません。
クライアントサイドだけで動くものでよいです。

よろしくお願いします。
>>639
単に電卓を作りたいということならば、レポートにソースがあるわけでもないので
そのページは参考にはならない。
# そもそも電卓を作るのが目的じゃない、そのレポートは

webアプリを作ってみたいということならば、
わからないとおっしゃられているapache等のwebサーバーをWindowsに入れて動かして、
CGIを動作させる環境を整えなくてはならない。
組みたいのはWebアプリです。
CGIってWinアプリと違って環境設定が面倒ですよね。

単にwebアプリ作成を楽しみたいという目的なら
httpdとかでもよいのでしょうか。
IISという選択肢もあるのですよね。
Apacheとともに調べてみます。
Delphi6 Pro なら標準で Web Application Debugger が
付属しているので Apache も IIS もなくてもとりあえずは大丈夫。
643デフォルトの名無しさん:01/10/14 04:40
>>642
Pro についていたっけ?

IIS5 なら、IDE で直接 ISAPI アプリをデバッグできるようになったので
らくちんよ。
perlis.dll を使うサンプルどこかにありませんか?
メインフォームとアプリケーションの最小化最大化
がごっちゃで分かり辛いな
Web Application Debugger の存在はどこで確認できますか?
なにせ、使ったことがないのでさっぱりです。
メニューから [ファイル|新規作成|そのほか|Web アプリケーション]

または

メニューから [ツール|Web アプリケーションデバッガ]
>>647
>メニューから [ツール|Web アプリケーションデバッガ]
ありました!(藁

>メニューから [ファイル|新規作成|そのほか|Web アプリケーション]
Web サーバーアプリケーションのことですね。
こちらもありました。

ありがとう。
Delphiで使える Lex/Yacc を探しています

リンクがあるのでどっかにあると思うのです
http://www.idiom.com/free-compilers/TOOL/BNF-21.html
http://www.freepascal.org/tools/tools.html

がどこもリンク先が死んでるようです
650649:01/10/14 16:39
ごめんなさい 検索キーワードを変更したら見つかりました

http://wwwusers.imaginet.fr/~tcoq/US-lexyacc.html
ftp://iecc.com/pub/file/lyprg.zip
Web アプリケーションデバッガの使い方全然わからないです。
こまったな。
>>651
マニュアルよんだら?
653デフォルトの名無しさん:01/10/15 11:50
>Delphiで使える Lex/Yacc

Lex/Yaccの記述はそのままで、吐き出すコードがDelphiなのかなぁ。
654653:01/10/15 11:51
Lexの方はコールバックされる関数なのか?ならLexはDelか?
655Delあめ猫にゃ:01/10/15 14:30
>>649
 たぶん 上のリンクの使う時は \binにある .COD が .L .y と同じ
 ディレクトリにないと動かない奴かもしれない
656653:01/10/15 16:27
Lex/Yaccコード見たけど、あんまり簡単じゃないね。
定義の難しいコードジェネレータだねぇ。
657デフォルトの名無しさん:01/10/16 18:30
PNGを表示せる方法を教えて
658Delフサギコ: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
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関係のコンポって
ないのでしょうか。
661Delあめ猫にゃ:01/10/17 11:45
DWORD は昔は integer でした
今は符号無しになっています

ですから -1 を $ffffffff と書くか DWORD(-1) と書替えればOK
662Delフサギコ:01/10/17 16:29
  ∧,,∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < しつもーそ
  U  ミ   \____________
  ミ  ミ
 ノ∪∪

TButtonやTMainMenuのコンポーネントアイコンリソースを
見たいのですが、
それらのdcrファイルはどこにありますか?

確か、dcrファイル形式じゃなかったと思われなのですが。
>>662
bplファイルの中と思われ
664デフォルトの名無しさん:01/10/17 18:20
>>662
メニューの方がわからんのだけど
ボタンは Delphi6\Lib\Buttons.res ではなかろうか
665-:01/10/17 18:39
Buttons.res は TBitBtn のリソースです.
666Delフサギコ:01/10/17 18:53
         _________
  ∧,,∧   /
 ミ;゚Д゚彡< bplファイルの中身確認できません。
  ミつ つ  \
〜ミ  ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  U U

>>664-665、情報サンクス
Buttons.resの中身はBitBtnのはいとかいいえのマークでした
667660:01/10/17 18:56
>>661
DWORD(-1)でいけました。ありがとうございます。
>>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
>>669
さすがにオモイ
重いどころではない
ADSLなのに10KB/secを切ってしまった
遅すぎ
終わった!!と思ったら、インストールにCDキーが必要ヽ(`Д´)ノ !!
帰ってからか・・・
674デフォルトの名無しさん:01/10/18 23:07
>>673
CD キーは,登録済みなら「使用許諾コードの取得」ツールを起動すると
表示される。ってダイアログに書いてあるのに・・・・
>>674
インストール自体は試してなかったのよ・・・
676Delphiマガジンのなめた記事(怒#:01/10/19 10:29
そんなことより聞いてくれよ、>>1よ。
先月号から気になってたのだがDelphiマガジンの記事

「理系専門家のためのグラフィック入門」

なめんじゃぇ〜ぞ!ゴノレア!

これ見てむかついた人は多いと思われ。
677デフォルトの名無しさん:01/10/19 10:33
StringGridでフォーカスをほかのイベントからあわせるにはどうしたら良いでしょうか?

たとえばButton1を押したらGridの2列目を選択するようにしたいんです。

Gridは横一列全選択にしてます。
678677:01/10/19 10:43
Gri1.Row := n;
こうですか。
679デフォルトの名無しさん:01/10/19 18:37
デルファイはビットフィールドって使えないんでしょうか?
フラグ1bit+データ7bitとかしたいんですが・・・・
>>679
だいぶ前のTechスレに集合演算子での実例書いた。
・・・でも自分でも忘れた・・・
681デフォルトの名無しさん:01/10/19 20:18
サービスパックをダウンロードする前に変更点を知りたいのですが、
D601FIXES.html を見ることはできますか?
case hensuu of
0:i:=kansuu1;
1:i:=kansuu2;
2:i:=kansuu3;
end;//of case
というプログラムで、条件分岐を減らすため、
i:=kansuu[hensuu+1];
という感じに出来ますか?
>>682
関数ポインタ使えます。当然配列にも出来ます。
684682:01/10/19 20:55
>>683
えーっとたしかアットマークがつくヤツですよね?
ありがとうございます。調べてみます。
685Delあめ猫にゃ:01/10/19 21:03
こんなふうな定義
var kansuu:array[0..2] of function:Integer=(kansu1,kansu2,kansu3);

ただし、関数内関数はダメ

それからメソッドはまた別の書き方ね
686682:01/10/19 23:34
>>685
すみません。IDEに叱られました。
この方法はvarで宣言するとき引数が必要ですか?
kannsu1(i:integer):integer;
である場合です。
必要ですよん。引数の名前は適当でいいけど。
>それからメソッドはまた別の書き方ね
そそ、「〜 of Object」が必要。
689682:01/10/20 00:15
いろいろやってみましたが、
定数式が必要ですとか、
変数が必要ですとか、
いろいろ叱られてうまくいきません。
もう少し勉強してきます。
初歩的な質問ですみません・・・

グローバル変数で確保した
  St: TStrings;
に、
  RichEdit1: RichEdit.Lines;
の内容をコピーしたいんですが、
  St := RichEdit1.Lines;
ってやるとうまくいかないんです。
ヘルプを見ると、文字列リストのコピーは
  TStrings.Assign(Source);
ってやった方がいいって書いてあったので、
  St.Assign(RichEdit.Lines);
ってやってみたんですが何故かエラー・・・
どうしたらいいんでしょう?(泣)
誤 RichEdit1: RichEdit.Lines;
正 RichEdit1: TRichEdit;
St := TStringList.Create
とかやってます?
>>692
試しに入れてみたんですが動きませんです・・・
でも何故か、新しいプロジェクトでやってみたら動きました(泣)
う〜〜ん・・

#回答ありがとうございます。
694682:01/10/20 01:19
勉強してきました。
どうやら、関数配列にprivate部で宣言した関数を代入できないようです。
そのために叱られ続けたんだと思います。
勉強させてもらい、ありがとうございました。
>>694
private部ってメソッドじゃんか!
>>688
696682:01/10/20 01:39
>>695
type
Tkansuu=function:integer of object;
..
..
private
kansuu:array[0..2] of Tkansuu;
funcution kansu1:integer;
..

って感じでコンパイル通りました!お世話になりました。
697682:01/10/20 01:55
追記です。しっかり動作している上に、ファイルサイズが20KB位小さくなっていいことだらけ。
>690
なんのエラーが出たのか書かないと駄目!
699デフォルトの名無しさん:01/10/22 11:24
ぐぅぉ〜、デルファイってArray of Byteを返す関数って書けないの?
Pointerにすればいいんだけど、キャストしまくらないといけなくなるんで
超面倒臭いyp!こんなもんなのかな?
type TByteArray = array of Byte;
function getArray: TByteArray;
とか。
>699 verで返すのが普通なように思うけどなあ

動的配列返すといい事あるの?
>>700
うぃ〜、できたです。
()付けたり''で囲んだり、全然的外れな解決法を模索してました(鬱

>>701
そうなんですか?今日(って言うか、つい今しがた)ダウンロード
したばかりなんで、よく分かってないです(´д`;)

動的配列を返してるのは、呼び出し側ではサイズが特定できな
いんで、動的配列にしてみたんですが・・・・
上手い方法が他に思いつかなかったのです。
Pascal では、型の同一性を定義内容ではなく定義名で判断するから
下のようなことが起きる。これを嫌う人は、特に C から来た人には
多い。わかるけどね。

使う前に型定義。

type
 a = array of byte;
 b = array of byte;
procedure TForm1.Button1Click(Sender: TObject);
var
 AA : a;
 BB : b;
begin
 AA := BB; // コンパイルエラー
>>702
 えと、そういう事なら
type TByteArray = array of Byte;
procedure func(var array:TByteArray);
begin
・・・
SetLength(array, XX);
・・・
end;

てな感じにして

配列そのものは呼び出し元で定義するのが普通だと思うよ
>>703
ふぉ!ホントだ、エラーになる・・・とても不思議感覚。
type TByteArray = Array of Byteの時
Array of Byte ← TByteArray //可
TByteArray ← Array of Byte //不可
TByteArray ← TByteArray(Array of Byte) //可
う〜む、デルファイの流儀が、ちょっぴり分かった気分
多分に怪しいけど(´д`;)

>>704
それイイ!凄く分かりやすい。
ところで、SetLengthで確保したメモリーは、使い終わっ
た後、nilを代入して後始末をするべきです?
参照してる変数がスコープから抜けた時に、自動的に
解放してくれることを期待したら駄目ッスか?
>>705
nilの代入の件はVBじゃないからやらないでいいと思うけど
707デフォルトの名無しさん:01/10/22 14:09
JavaでいうHashtable, Perlでいう連想配列のようなMapを
Delphiで使うにはどうすればいいの?
>>705
解放はnilの代入じゃないぞ!!
Finalizeだ。
>>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が呼ばれてメモリ解放されます。
MemCheckでテストしてみたです。
SetLengthで確保したメモリは、明示的に解放する必要はないんですね。
凄い!超便利!SetLengthマンセー
>>707
探せばネットにライブラリとかあるみたいだけど、単純な(string->何か)の連想配列なら、
TStringListのIndexOfやFindメソッドとObjectプロパティを組み合わせて使ってる。
ハッシュの易しい解説ってどっかにないかな…
できればDelphiで…
つーか、動的配列の実装はstringと同じだからなあ。

>>714
Del6のTHashedStringListのソースとか。
ソースがないなら、Iriaの作者さんの自作スクリプト(DMonkey)のハッシュクラスとか。
716707:01/10/23 00:41
TStringListって線形探索かなとおもって嫌だったんだけどたけど
THashedStringListつかえば速そう。
ありがとうみんな
717デフォルトの名無しさん:01/10/23 01:27
長い文字列とか動的配列のメモリ管理ってどうなっているのですか?
718>717:01/10/23 01:32
内部的に参照カウンタで管理されてるので
確保・開放はすべて自動的に行われてる。
なので通常は気にする必要はない。
詳細は言語ガイド参照。
>>714
ハッシュを使いたいというようなレベルであればC程度は読めるようにして
おいた方がいいと思うよ。
>>714
Delphi アルゴリズムという本があるよ。
>714
VCL内をHashで検索。
>>719
激しく同意。世の中にはすでに作られたCのプログラムが山ほどある。
その資産を生かさないのはもったいなさ過ぎるものな。
723714: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さんへのレスとかぶってしまいますが、まだいきなり実装見ても
混乱するだけと思うので、まずは本を見てからにしたいと思います。

レスくださったみなさんありがとう御座いました。
>>723
C/C++で書く気がないならあまり真面目に勉強しなくていいよ。
コードを見て流れが読めればいいだけ。
Delphiでそこそこ書ければC/C++もそこそこ読めるようになると思う。
725デフォルトの名無しさん:01/10/25 21:44
初心者です。
IEなどのブラウザからINTERBASEに接続するISAPIアプリケーションを作っています。
「INTERBASEサーバ←→WEBサーバ(INTERBASEクライアント)←→ブラウザ」って感じで。
一定時間、ブラウザからの操作がなかったら
自動的に「INTERBASEサーバ←→WEBサーバ」のDB接続を切断するには
どうしたらいいのでしょうか?
そもそも、繋ぎっぱなしにするのがよくないのでしょうか?
みなさんお教えください。
726725:01/10/25 21:50
補足:
環境はDelphi6PRO+IIS5(Win2000)です。
>>725
えーと、IBDatabase にタイムアウト時間を指定するプロパティがありますが、
それではダメ?
728725:01/10/26 11:46
レスありがとうございます。
IdleTimerのことですか?
試してみたけどだめでした。
ISAPI、CGI、普通(?)のフォーム
などのタイプによって動きが違うのでしょうか?
729ねこま:01/10/26 12:36
だめなら自分でアイドル時間を計測して切れば?
730725:01/10/26 13:49
>>729
「自分で計測する」&「自分で切る」
ということですか?
具体的にはどうやったらいいのでしょうか?
731ねこま:01/10/26 14:22
TVIdleTimer
Torry's とかにあるよ
732デフォルトの名無しさん:01/10/29 16:01
ドキュメントアップデート公開あげ
delphi用のドキュメント生成ツールってねえ?
doxygenみたいなの。
734デフォルトの名無しさん:01/10/29 22:24
あげ
735デフォルトの名無しさん:01/10/29 22:27
736デフォルトの名無しさん:01/10/29 22:53
任意のディレクトリのファイル&ディレクトリ一覧を
取得するにはどうすればよいですか?
>>736
FindFirst FindNext
738733:01/10/30 07:03
とりあえず見つけたものをいくつか

「PASCAL仕様書作成」
HTMLへの出力のみ可能な、perlを使用したドキュメント生成ツール。
perlといってもactive perlを入れて、付属のGUIフロントエンドで操作するだけ。
もちろんというか、perlなのでソース付き。
ttp://www.lares.dti.ne.jp/~tkumagai/delphi/index.html#spec

「UnitDoc」
テキスト、HTMLのドキュメントを生成可能。
DelphiMLで有名な中村さんが作ったもの。
ソースのみの配布。だが、GUI部分は全然未完成。
ドキュメント生成エンジンを利用して、自分の好きなように改造するのがよさそう。
http://home1.infonia.ne.jp/~delphian/delphi/compo/tools.html#TO0052

「D/Scribe」
FREE版とSHARE版がある。印刷かWord形式のみ。FREE版は印刷のみの模様。
オンライン派の自分にはHTMLで出力できないのがちょっとアレか。
share版のWord出力を見た限りは、かなり細かなデータが出せる模様。
http://www.cyberware.co.jp/

「Unit Reporter」
非商用フリー。使い方がいまいちわからん・・・。
http://www2.big.or.jp/~osamu/Delphi/MyLibrary.htm


微妙に有料のは試す気がせんのでスマソ。
739デフォルトの名無しさん:01/10/30 18:34
>>736
非表示でFileListBoxを利用
やり方は間抜けかもしれないがとっても楽(w

関係ないけど、ファイルが2000近くあるフォルダの一覧を取得しようとすると
FindFirstの方がFileListBoxよりはるかに時間がかかる・・
何故なんだろ。きっと勉強不足なせいだな
Windows.FindFirstFile使うとあるいは結構速くなるかも
741デフォルトの名無しさん:01/10/31 04:54
>>740
なるほど。試してみたら、わずかですけど早くなりますね
ありがとうございます
このわずかを積み重ねていけば全体が早くなる…といいなぁ
>>690
自分は
St.Text:=RichEdit.Lines.Text;
って感じでコピーしてますね

どうでもいいけどTStringListの文字列追加に
ADDメソッドを使うと今までより10倍近く早くなったよ…
知らんかった。あまりの馬鹿さ加減に逝ってきます…
TStringListの文字列追加にAddメソッド以外のどんな方法があるのですか?
sl.Text := s.Text + newline;とかやってたんとちゃう?
これなら激しく遅いだろな(笑)
742の
>St.Text:=RichEdit.Lines.Text;
この方法が速いだろう
★解決した問題はこちらへ★

2chで解決したDelphi質問をFAQ収集するスレ
http://pc.2ch.net/test/read.cgi/tech/1004501183/
747デフォルトの名無しさん:01/11/01 09:26
サブクラス化コンポ使うと出る

[警告] シンボル 'MakeObjectInstance' を使用することは推奨されていません

って代わりは何?
748747 :01/11/01 21:06
 Del6から >>747 のメッセージが出るようになったんだけど、
という事は他に推奨する方法があるんだよね? って意味なんだけど
749デフォルトの名無しさん:01/11/01 21:18
>>747
Forms.MakeObjectInstance じゃなく Classes.MakeObjectInstance なら
いけたよ
>749
(^v^)(^i^)(^v^)(^a^)!
751デフォルトの名無しさん:01/11/03 16:20
自作コンポ-ネントに、アンカーがあるバージョンではアンカープロパティを
付けたくて条件コンパイルを使おうと思ったのですが
 あちこち調べて以下のようになっているようです

VER80 - D1.0
VER90 - D2.0
VER100 - D3.x
VER120 - D4.0
VER130 - D5
VER140 - D6

VER93 - BCB 1.0
VER110 - BCB 3.0
VER125 - BCB 4.0

Delphi4以後ならって IFNDEF をネストするしかないのでしょうか?
752ななしヘタぐらま ◆B18Bks.Y :01/11/03 16:52
>>751
この仕様には困ってますが
ぼくは以下のように対応しています.

まず次の内容のテキストを書いて
'delver.inc'とでも言う名前で保存,
-----------------------
{
'DelVer.inc' - Delphi Compiler Version Definer (Include file)
Written by ****** *********
}

{$IFDEF VER80}
{$DEFINE DELPHI1_OR_LATER}
{$ENDIF}
{$IFDEF VER90}
{$DEFINE DELPHI1_OR_LATER}
{$DEFINE DELPHI2_OR_LATER}
{$ENDIF}
{$IFDEF VER100}
{$DEFINE DELPHI1_OR_LATER}
{$DEFINE DELPHI2_OR_LATER}
{$DEFINE DELPHI3_OR_LATER}
{$ENDIF}
{$IFDEF VER120}
{$DEFINE DELPHI1_OR_LATER}
{$DEFINE DELPHI2_OR_LATER}
{$DEFINE DELPHI3_OR_LATER}
{$DEFINE DELPHI4_OR_LATER}
{$ENDIF}
{$IFDEF VER130}
{$DEFINE DELPHI1_OR_LATER}
{$DEFINE DELPHI2_OR_LATER}
{$DEFINE DELPHI3_OR_LATER}
{$DEFINE DELPHI4_OR_LATER}
{$DEFINE DELPHI5_BCB5_OR_LATER}
{$ENDIF}
-----------------------
なんかちょっと"VERxxx"のシンボルがちょっと間違ってるかもしれませんが
そこは上手く直してください(D6の情報も足してくださいね).で,
各ユニットの頭のほうでこのファイルをインクルードします.
----------------
unit ItteYoshi;

{$INCLUDE 'delver.inc'} // インクルードする指令

(中略)
type
TMyControl = class(TCustomControl)
(中略)
published
{$IFDEF DELPHI4_OR_LATER}
property Anchor;
(中略)
{$ENDIF}
end;

(以下略)
----------------
という感じです.
753751:01/11/03 22:38
>>752 何度か読み返して、やっと意味が判りました・・・・
   なるほど、それでやってみます
754ななしヘタぐらま ◆B18Bks.Y :01/11/04 18:13
>>753
ごめんなさい.具体的にどういう処理をやっているか,
説明すればよかったですね.

その他の皆様のために今更ながら説明をば.
長文ですいませんが.
---------------------

Delphiでバージョン違いへの対応を条件定義で行う場合に
プログラマが欲しい情報っていうのは
『バージョンなになにかどうか』ではなくて
『バージョンなになに以後か』だったりするわけです.

もし『バージョンなになに以降か』という条件が定義されていれば
ソースファイルは次のようにシンプルになるでしょう.

{$IFDEF バージョンなになに以降}
書きたいコード
{$ENDIF}

そこでその『バージョンなになに以降か』という条件を
自分で定義してしまうのです.

これは意外と簡単で
たとえばDelphi2を示す条件が定義されていれば
Delphi1以降,Delphi2以降,というのを定義するだけです.
これをコンパイラのバージョンを示す全ての条件に対して行えばOK.

ただこれを全てのソースファイルの先頭に書いていたのでは
書くのがめんどくさい,邪魔クサイ上,
さらに新しいバージョンが出るたびに全てのソースを直さなければならない.
最悪なのは,打ち込みミスがあればタチの悪いバグの元になること.

しかしありがたいことにデルファイでは
CやC++ではおなじみのインクルードファイルを使うことができます.

#include <stdio.h>

みたいなアレですが,上の処理をインクルードファイルにして
個々のソースファイルでこれをとりこむようにします.
これによってソースファイルは見た目スッキリとなります.

また新しいバージョンが出ても
インクルードファイルは変更するほかは
仕様が変わっていなければソースファイルの変更は不要となります.
今更ながら、真のシングルトン実装方紹介
http://community.borland.com/article/0,1410,22576,00.html

定型処理だから、もっと楽に実装できるといいんだけど。
シングルトンって何って検索したら見つけた
ttp://www.hyuki.com/dp/cat_index.html
757デフォルトの名無しさん:01/11/14 14:01
こんにちは、

既成コンポーネントを利用する時に、それに関連したオブジェクト(TObject継承)への参照を持たせたい時
一般的に、どう解決するのが一番良いのでしょう?

1)TObjectでなく無理やりTComponet継承に変更
  コンポ.InsertComponent で持たせ
  コンポ.FindComponent で参照する

2)それだけの為に 既成コンポーネントを継承して、登録
  ・・・でも、管理の手間がメンドクサイから嫌だな

3)コンポーネントとオブジェクトのペアのテーブルを作り
  コンポーネントのインスタンスアドレスから逆引きする
  ・・・1、2)よりはマシだけど・・・
758Delフサギコ:01/11/14 17:35
  ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < @もなかなかよさそうな気がします。
  ,;゙  ミ     \_____________
 ミ.  ミ  ドウカシラ
/゛゛゛゛
759757 :01/11/14 22:43
InsertComponent が InsertObjectなら躊躇が少ないんだけど
 なんか無駄なような感じ
 勿体無いおばけが出そうな雰囲気というか・・・・

2つのオブジェクトをペアで登録して相互に高速検索出来る
仕掛けがあれば最高なんだけどね
>>757
TMyObject型にFComponentを含め、TMyObject型の全オブジェクトはTListで管理する。
FComponentから FObject を探す時は、リストから検索すればいい。

あるいは Tag を使うか。

それと、InsertComponentだと参照にはならないような・・・。
761デフォルトの名無しさん:01/11/21 07:36
ミ,,゚Д゚彡DelフサギコのフサフサDelphi談話室
http://pc.2ch.net/test/read.cgi/tech/1003664165/

モナーの *やさしい* Delphi質問スレ
http://pc.2ch.net/test/read.cgi/tech/1003113413/
Delスレってキャラ物ばっかでキモイ
763 :01/11/21 09:33
>>762
もめるだけしか能のないjavaスレよりまし。
「まし」ってことはお前もやっぱイヤなんだろ(藁
つーか固定少ないよね、ここ
偉そうな奴は多いくせに
766デフォルトの名無しさん:01/11/21 16:29
リストヴューのチェックボックスを反転したときのイベントって取得できる?
Delって、コンポをちょっと派生するか、ネットで拾うか、位で対処できるから、
Del特有の技術って要らないんだよね。
だからスレに入り浸りの人が居ない>>765
768デフォルトの名無しさん :01/11/21 20:55
Delphi6 Personal版を使っています。
フォームにコンボボックスを配置して、StyleにCssimpleを選択しました。
コンボボックスのサイズを、メモ帳のテキスト領域のようにサイズを
フォームにぴっちりと合わせたのですが、実行してみると、
画面の下部の方に鉛筆の2本文くらいの太さの灰色の部分が表示されてしまいます。
どうすれば無駄な領域が表示されずにぴっちりとフォームに収められるのでしょうか?
769765:01/11/21 21:29
いや、Delphiに限らず"この板で"ね
言葉足らずでした

あんまDelphiスレが盛り上らないのは正にそれ(>>767)かも
>>768
コンボボックスは文字の高さに合わせてリスト部分が調整されちゃうので
フォームの方を合わせた方がいいかも。

関係無いけどこれってどうよ?(D/Scribe、!DOCと比べて)
https://sw.vector.co.jp/swreg/detail.info?srno=SR026004&site=v
771>768:01/11/21 21:35
HeightをItemHeightの整数倍にすると吉
>>768
CBS_NO_INTEGRALHEIGHT
TListBox のようにプロパティにしたほうが使いやすいでしょう。
肝だけ抽出。わからなかったら勉強しなさい。

type
 TComboBox1 = class(TComboBox)
 protected
  procedure CreateParams(var Params: TCreateParams); override;
 end;

implementation

procedure TComboBox1.CreateParams(var Params: TCreateParams);
begin
 inherited;
 Params.Style := Params.Style or CBS_NOINTEGRALHEIGHT;
end;
774768:01/11/22 00:09
レスありがとうございます!
フォームとコンボボックスのサイズをItemHeightの整数倍にし、
>>773のコードを、組み込んでみました結果、うまく行きました!!
(Delphiのプログラム経験が無いので間違って組み込んでいるかもしれませんが、
とりあえずコンパイラエラーが起こらないようにしました)

>>770-773は神!
773 のコードが入れば、高さ調整は起きないよ。

紙というか... これが仕事だから。
776771:01/11/22 00:51
>これが仕事だから
ゼニくれ(w
777ゼニクレイジー:01/11/23 01:32
ゼニクレイジー      
778Delフサギコ:01/11/23 01:50
スリーセブンですね。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧    マターリ
  ミ,,゚Д゚彡∬
   〃  つ旦O
 〜ミ,,,n,,n[ ̄ ̄ ̄.]
        ̄ ̄ ̄
779デフォルトの名無しさん:01/11/23 03:58
質問です。
c++でのdeclspecみたいのつかってdelphiでクラスをdllにエクスポートは
どうすればいいのでしょうか。
サンプルor参考ページor参考文献なんでもいいので教えてください。

もしかして、dllでクラスってあまり使わないものなのでしょうか・・
パッケージを使うのではだめ?
パッケージならめんどくさいことを考える必要が無くなる。
781デフォルトの名無しさん:01/11/23 04:42
実数を小数点第2位まで表示したいのですが、
3位を四捨五入されてしまいます。
四捨五入されないようにするには、どのようにすればいいのでしょうか?
>781
http://pc.2ch.net/test/read.cgi/tech/1003664165/874
と同一人物ですか?
783デフォルトの名無しさん:01/11/23 07:53
>782
違います。

2位以下を四捨五入するのではなく、
2位以下を切り捨てて表示したいんです。
どなたか、お願いします。
>>783
第2位まで表示したいのか、第2位以下を切り捨てたいのかどっちやねん
ですけど、前者だとして、100倍して小数点以下を切り捨てて100倍する
ってのはどうかな?
785784:01/11/23 10:01
>100倍して小数点以下を切り捨てて100倍する
100倍して小数点以下を切り捨てて100で割る
鬱打詩嚢
10000!
787デフォルトの名無しさん:01/11/25 01:54
タダになったからdelphi始めたクチなんだけどさぁ、
デルファイマガジンのHPって、前から…あのー…なんちゅーか…
そのー…
あんな感じなの?
788ボーランドマンセー:01/11/25 02:05
delphi6のプロフェッショナルを
買おうかどうか迷ってるんだけど
無料のパーソナル版で充分かな。
ちなみに初心者
買っておいて損はないですかね
789  :01/11/25 02:07
>>787
確かに初心者にはつらいよな、、、
790787:01/11/25 02:19
初心者にはつらいってゆーかさー…。なんちゅーの?
えーと…。
「殺風景」ってゆーかさー…。ちょっとねー…。
個人の素人のサイトじゃないんだからさー。
そりゃ綺麗に着飾ればいいってもんじゃないとは思うが…。
791 :01/11/25 03:04
まぁデザイナー雇うぐらいなら濃い情報と濃い内容と安い値段という方向性らしいですから。
でも個人的にはダレ気味なんで、Oh!Xぐらいの装丁・価格・ペースの方が楽しい気も。
792編集部:01/11/25 03:42
わかったよ
WEBサイトと雑誌の表紙を女子高生シリーズに戻せばいいんだろ
後でまた文句言うなよ
>>792
マジで勘弁してください。





どうせなら秋山莉奈にしてください。
石絵未季でも可。
時代は中学生!
中村タンが地元の女史中学生達に手取り足取りDelphiを教える企画がいい。
>>792
男物の大きめカッターシャツと赤ブルマーで一つお願いします。
796デフォルトの名無しさん:01/11/25 23:08
>>792
「具にもつかないオバハンの乳首に★、股間をリンゴで隠してる写真」で
一つお願いします。
>>792
ツインタワーをお願いします。
編集長直々の4コマ漫画!

http://www.lerx.to/lereaux/

こんな絵で、いい年で、独身で親に養ってもらって、デブで、アニメ好きで
ろくなプログラムも書かず、デザインセンスはなく…………
79926,000円!:01/11/27 01:08
www.vector.co.jp/soft/win95/prog/se198613.html

これって、どんな人が買って、どんな用途で使うのか教えてください。
800デフォルトの名無しさん:01/11/27 01:13
>>799

そういうところは直リンクしろよ・・・面倒だなぁ・・・・・
>799
それはろくに設計もせずにアプリを開発して
後から仕様書をひねりだす必要のあるドキュソ開発者の為のツール。
JavaDoc非互換、Excel形式って使い物になるのか疑問。

time2helpかC++Builderならdoxygenにしとけ。
802799:01/11/27 01:47
>>801
そんな感じだよね。うーむ…。26000円…。
>>801
オイオイそんなことゆうなよ
ドキュメント生成ツールは便利だぞ。javadocを出すまでもなく。
これは試用不可ってのが難だが。
804Delフサギコ:01/11/27 12:46
  仕事で仕様書を書く必要があるなら
  26k円でドキュメント生成ソフトが使えるなら
  超お安いと思うぞ
  !DOCはビックリドックと呼べばいいのかな。.

  . ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    . ∧,,∧
     ミ ゚Д゚ ミ
     (ミ  ミ)
    〜ミ  ミ
      ∪∪
C/C++にはフリーで使えるdoxygenがあるのにー、シクシク。
806寒いのでとりあえずage:01/12/06 02:04
マジで寒いね…。DELPHI人口少ないのかしらん?
って、googleキャッシュでも「少ないのか?」って
いつも拾うのも哀しい…。

前に、「実行時パッケージを使って構築」にチェック入れると
サイズが小さくなることについて質問したんだけど、まだよー分かってないので、
引き続き情報ください。おねがひ。
>>806
何がどうわからんのか,説明してください。

Delphi でも VC でも VB でも共有ライブラリの基本は,
単独プログラムだと
(ユーザーのコード)+(ユーザーコードが使うライブラリ).exe
となる。

これを
(ユーザーのコード).exe

(ユーザーコードが使うライブラリ).dll/.bpl
の二本立てにすれば,.exe の大きさが小さくなる(ことが期待できる)のは納得してもらえるだろう。

単独プログラムの場合には,リンクする必要がないライブラリを見つけることができる。
それに対して共有ライブラリの場合には .exe が使う機能を列挙することができないので,
最小公分母的,ライブラリすべてをリンクして用意しておかねばならない。

だから,共有ライブラリは(一般に)大きくなる。
808806:01/12/06 07:57
>>807
レス、ありがとございまふ。
うーん。よーするに、「チェックを入れて小さくなったexeを配布した場合」ってのは、
受け取る相手に「さっぴいた分(=小さくした分)」が無ければ動かない、
ってことでよろしいですか?
もしかして、変なことで悩んでるのかな(^^;
>>808
原則、正解。
VC だと MSVCRTxx / MFCxx.dll
VB だと MSVBMxx.dll
Delphi では VCLxx.bpl

アプリケーションひとつ配布する場合には強いうメリットはないけれど、
複数配布する場合には合計のファイルサイズが小さくなる。と期待できる。

ただし MS はライブラリを OS に組み込んで出荷できるから、つじつまが合っている範囲では
共通ライブラリの存在を気にしないですむ。

それに対して、どのユニットをどのパッケージに入れるか/入れないかを柔軟に指定できるところが
Delphi の強み。設計時パッケージが使う実行時パッケージと .exe が使う実行時パッケージの構成を
変えることも許される。

もし、三つ以上の Delphi アプリケーションを配布する可能性があるのなら、実行時パッケージを使うことを
考えてみるとよい。必要最小限のユニットだけを含むカスタムパッケージを使うことで
トータルファイルサイズをかなり削減できる。
810808:01/12/07 01:01
>>809
またまたありがとうございまふ。
なるほどー。VCLxx.bplってのは、delphiのインストールされてない
マシンには無いってことですかね?VBみたいに「別途ランタイム入れてネ」
ってことになるのかな?
某言語用DLL(隠すことも無いんですが(^^;)も、趣味程度に作って
みたりしたんですけど、DLLでも「例のチェック外す」と動かないマシンが
出てきたりすんでしょうか?
なんか、くどくてスンマソン…。
811デフォルトの名無しさん:01/12/07 01:23
www.forest.impress.co.jp/article/2001/12/06/osp2001_borland.jpg
スレが寒いので、ボーランドの人写真age
>>811
これが大野タンだよ。
813デフォルトの名無しさん:01/12/07 07:16
パッケージやDLLつかうと、EXEが解析されやすくないですか?
誰に?
>>813
UPX掛けてヘッダをバイナリエディタでごにょごにょっとな…(ボソ
>>815
ライセンス違反ですが……。
817808:01/12/08 00:37
もう冷え込んじゃったか…。このスレ…。早いなぁ…(TT。
>>810
だってあなたの質問、つまらないんだもん。
DLL を使うように指定して作ったのだから、DLL がないところでは動きようがないでしょ。
同じことを二度三度説明する暇人はいない。
819 :01/12/08 04:54
くだらねぇからDLL使うな
絶対使うな
使うなら氏ね
820デフォルトの名無しさん:01/12/08 04:55
下記の例で、(1)と(2)の宣言を絶対に間違えないようにする方法は
あるのでしょうか?
function Beep(dwFreq, dwDuration: DWORD): BOOL; stdcall;
を$INCLUDEでWindows.pasとkernel32.dprの両方で取り込む
やり方の他に・・・。

//-----------------------------------
unit Windows;

interface

function Beep(dwFreq, dwDuration: DWORD): BOOL; stdcall; // (1)

implementation

function Beep; external kernel32 name 'Beep';

//-----------------------------------
library kernel32;

function Beep(dwFreq, dwDuration: DWORD): BOOL; stdcall; // (2)
begin
 // 音を出す
end;

exports
 Beep;
821820:01/12/08 05:13
Windows.pasでBeepの実装し、$IFDEFで場合分けするのは駄目。
Windows.pasを公開するので。

オブジェクトインターフェースは気軽にメソッドを増やせないので駄目。
>>819
そ。Delphi ならパッケージを使いなさい。
>>820
間違えたくない。ってのは関数定義の記述を間違えたくない。
ってこと?言語仕様上、自由な定義を許しているんだから、
外部ツール(include ふくむ)を使わない限り無理じゃないかな?

けど、そのファイル名、ちょっと怖いね。何を作る木だ?
824820:01/12/08 05:35
>>823
>間違えたくない。ってのは関数定義の記述を間違えたくない。
そうです。

>何を作る木だ?
解りやすく説明するためのサンプルです。
DLL一般について話しています。
825デフォルトの名無しさん:01/12/08 05:36
>>818
うるせーハゲ!
826818:01/12/08 05:44
>>825
どっ、どうしてわかったの?
>>825-826
ワロタ
828 :01/12/08 12:09
マイナーなだけのdelphi使うメリットって何?
macみたいにならないの?
また煽りか
飽きたよ
830M$:01/12/08 15:27
品の無い奴ぁ俺んトコに来い
俺も無いから心配するな
見ろよ青い画面白い髪
そのうちベンダー泣くだろう
>>820
ほんとに危ない名前だなぁ。

これで作成される kernel32.dll の外部公開情報は "Beep" という文字列と
Ordinary 番号だけだから、本質的に無理だよ。

1. 定義を一ヶ所で行う -> include
2. 単一の定義情報ファイルからソースを生成
3. Beep の実装コードを .dpr から beep.pas に移動し、ifdef で external で解決するか
uses beep で解決するかを切り替えるようにしてテストビルドを行う。

ってところかねぇ。C++ 風、マングリングされた識別子名にしてタイプセーフリンク
する気はないのでしょう。
832820:01/12/09 07:41
>>831
3.は知らなかったのでやってみます。
ありがとうございます。
833デフォルトの名無しさん:01/12/09 17:25
実行中にBMPを使いたい というか 複数の個所で使うから節約したいんだけど
 今まではリソースにしてたんだけど、新人が入ってきて、これだと判り難いんだよね。

で、コンポーネントにしてDataModuleに置きたいたいんだけど、
 どうやったらスマートかな?
 一番スマートなのは TPicture がコンポーネントになる事だけど
 TPersistent 継承だから無理だよな・・・・可能?


やっぱりTPicture をプロパティに持つコンポを作成するしかないのかな?
FormにTImageとか
たまーにWinControlなコンポーネント使いまわすときはこうしてる。
835833:01/12/09 20:13
とりあえず、こんなふうなコンポを作りました
 コンポの新規作成で

  上位クラスを TComponent
  クラス名を   TPictureTray
その後 publishedに
   property Picture:TPicture;

publicに
    constructor Create(AOwner: TComponent); override;
を追加してshft+ctrl+c で

type
TPictureTray = class(TComponent)
private
FPicture: TPicture;
procedure SetPicture(const Value: TPicture);
protected
public
constructor Create(AOwner: TComponent); override;
published
property Picture:TPicture read FPicture write SetPicture;
end;

となるので、メソッド部に3行以下のように追加変更します

constructor TPictureTray.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FPicture := TPicture.Create;
end;

procedure TPictureTray.SetPicture(const Value: TPicture);
begin
FPicture.Assign(Value);
end;

つまり合計5行で出来るコンポーネントです。・・・・でも、 やっぱりTPicture がコンポだったらいいのに
836833:01/12/09 20:16
単にリソース代わりに使うだけでも一応 Destroyで解放しといた方がいいですね

destructor TPictureTray.Destroy;
begin
FPicture.Free;
inherited Destroy;
end;
837833:01/12/09 20:27
まてよ・・・・TPicture がコンポだったら コンポエディタの定義に困るからしょうがないのか
コレクションにしてItems[]でアクセスがいいな
面倒だけど
839833:01/12/09 20:39
>>838 たしかにプロパティエディタまでそれやると必要だからメンドクサイな

>>834 その方法だとフォームインスタンスを作らなければアクセス出来ないんじゃ?
840834:01/12/09 21:11
>その方法だとフォームインスタンスを作らなければアクセス出来ないんじゃ?
フォーム一枚くらい問題ないでしょ
今試してみたらDel6Perで一枚13kbくらいだった
(DataModuleは100byte程度)
そういやDataModuleがない時代によく使ってたんだった
841833:01/12/09 21:33
たしかに、たいした事は無いんだけど、なんか嫌なんだよなあ・・・

まあ TImageならどの絵がどこにあるか一発で判るから
開発効率が上がるメリットがあるからって言い訳は出来るけど
842うすいさちよ28才独身様:01/12/10 00:22
さむい…。寒いわぁ…このスレ…。ううううぅぅ…。
(ぼーぇぼーえーぼー♪(うすいさんのテーマが流れています))
843820:01/12/10 07:47
>>831
3.の意味がよく分からない・・・。
>>821のやり方と同じなのだろうか・・・。
844ななしヘタぐらま ◆B18Bks.Y :01/12/12 09:06
>>833
やはりデータモジュールに置くべき.
内部処理と内部データはフォームには置かないようにするのが賢明です.
プログラムの見通しが悪くなりますよね.
コンポを作ってデータモジュールに置く方法でいいと思いますよ.

>>838-839
コレクションにしておけば
自分でプロパティエディタ書かなくても
とりあえず使えるからいいんじゃないかな.
845教えを請いたし:01/12/12 11:32

日本語Delphiver3.1でコンパイルしたアプリを、
WIN98SEのUS版で文字化けをクリアする技をご教授きぼんぬ。。。。
パッチもないそうで、超裏技かもしれないけど。ヨロ。
>>845
ソースは無いの?あれば再コンパイル。

なければ exescope (だっけ?) で各フォームの Font プロパティを削除。
または適当な英語フォントに置き換え。

裏技、というほどのものではない。
847ありがとう:01/12/12 16:47
>846
ございます!
フローティングウィンドゥの×を押したときに呼ばれるイベントはないのかな?
ttp://homepage2.nifty.com/boheme/delphi/tips/tec1080.htm
OnCloseQueryじゃないのか・・・。
850デフォルトの名無しさん:01/12/13 23:46
誰か>>831 の 3. を説明して・・
関数の宣言と定義を別のユニットにできませんよね・・・。
>>831
終電出ちゃうんで、家に帰ってからでいいね?
2:00 pm ごろ。それまでに誰かが説明してくれているといいな。
852ねこま:01/12/13 23:51
pas ファイル作ってそこへ移せと言っているだけでしょう.
>851
14時間後でもいいです。
854デフォルトの名無しさん:01/12/14 00:16
テストビルドで使うプロジェクトはこんな感じですか?
program Project1;

uses {$IFDEF TEST}Beep{$ELSE}Windows{$END};
// (Windows.pasでBeepはexternalされている)

begin
Beep(1000, 1000);
end.

これだと、呼び出し規約のチェックが行われませんが・・・。
855833:01/12/14 10:00
うーん。 >>835のコンポを他のコンポにつなぐ場合、
FFreeNotifies は便利なんだけど
 これが protected になってたら良かったのになあ

プロパティが変更された時にメッセージを送りたいんだけど、
その送り先が FFreeNotifies にあるのになあ・・せめてその関係のメソッドがvirtualならいいのに
856831:01/12/15 01:24
マダカナ・・・
c:\dir1\dir2\dir3\
 みたいなのを一挙に作るのはどうやってますか?

とりあえずこんなのでやってるけど、いい方法ある?

function MyCreateDir(Dir:string):boolean;
begin
Result:=false;
if FileExists(Dir) then exit;
if DirectoryExists(Dir) then Result:=true
else
if MyCreateDir(ExtractFileDir(Dir)) then
Result:=CreateDir(Dir);
end;
858デフォルトの名無しさん:01/12/15 19:36
>>857
フォースディレクトリーズ関数。
まだかなまだかな〜♪
学研のおばさんまだかな〜♪
860デフォルトの名無しさん:01/12/15 23:31
>>859
ごはんだから、早く帰ってらっしゃい!
>>859
涙がでるほど懐かしいな。
あの頃は良かったよ、彼女なし、童貞、小学生好きのアニヲタでも
変態扱いされなかったもん。
今じゃ道逝く人がみんな指差して変態呼ばわりだもんな、ツライよ(w
学研のおばさんが本を持ってきてくれたの?
863デフォルトの名無しさん:01/12/15 23:49
かぶとえびは、水を換えないと長生き出来ません。
使う水は、天日に晒した物を使いましょう。
864857:01/12/19 07:45
>>858 みつかりました ありがと
865デフォルトの名無しさん:01/12/19 07:47
うっかり登録してしまったタイプライブラリは
どうすれば削除できますか?
866デフォルトの名無しさん:01/12/19 10:14
C系のプログラムをdelphiに移植しない場合
objにして取り込めればいいけれどそうでない場合dllにして使っています。
exeにdllを取り込もうとしてフォームにぶちこんだり
リソースにぶち込んだりして動的に使う方法(HDDに展開・削除)はできたんだけど
リソースにdllをおいてHDDにおとさずに読み込む方法
あるいはコンポーネントってないですか?
867Delphi初心者:01/12/19 11:54
簡単なインタプリタを作っているのですが識別子(英文字)からオブジェクト内の
メソッドを呼び出すのに何か良い方法は無いでしょうか?
例)
'RUN'と言う文字があったらTHoge.Runメソッドを呼び出す。

・考えたこと
1.IF文連発(藁
2.Const ReservedWord : array[..] of ShortString = ('END','GOTO');
でループで一致確認後Case文でメソッドを並べる
3.処理するメソッドをパブリッシュメソッドにしてMethodAddressクラスメソッド
で検索して呼び出す。

以下失敗したやり方
type ReservedWordAndProc = record
RevWord : ShortString;
Proc : Procedure of object;
end;
これが出来ればスマート?なのですが、Constで定義するときに定数じゃないと
怒られます(当たり前ですが…)
3番目のはあんま意味ないような。DMonkeyっていうECMAScript互換の
組み込み用インタプリタがソース付きで公開されてるから、参考になるかも。
でも一番手っ取り早いのは3だと思われ。
実行用クラスを内部に持って、そのクラスでPublished連発、
てのが(・∀・)イイ!!かも。
870867:01/12/19 13:04
ありがとうございます参考にしてみます。

>3番目のはあんま意味ないような。
と、とりあえずこの方法で試験・実行してました(藁
871868:01/12/19 13:10
ごめんなさい。3番目の確かに楽かも。
872867:01/12/19 14:27
あう…と、とりあえず3の方法でやっていきます

>実行用クラスを内部に持って
なるほど!そうすればコード補完の時に泣かずに済みますね

気にせずコード書いていたのですがパブリッシュメソッドは
呼び出すコードが無くてもちゃんとコンパイルされるんですね。

メソッドアドレスとオブジェクトアドレスの配置がわからず特権違反
出しまくってしまった(鬱

このスレってsageないとダメなのかな…と思いつつsage
それなら ギコbasic(ム板にある) スレに参考になる事書いてあったような・・・
みつけた

ギコBASIC拡張計画
http://pc.2ch.net/test/read.cgi/prog/961558082/

48 66 で ソースの場所は 200
875867:01/12/19 21:25
>>873-874
ありがとうございます TMethod型なんて有ったんですね、知らなかった。
自分で定義してました(藁
しかもAbsolute使ってるし俺…(脳内TP5でUNION嫌い)
>867 で自分は2番のCaseが先ず思いついたんだが、
これだと何か致命的な悪いこととかある?
>>876
いちいちarrayにするのタイヘンだし。
Caseでメソッド並べると実行メソッドが長ったらしいし。
他モロモロ。

↓漏れよりもっと(・∀・)イイ!!説明してくれる人を期待
最初の一文字で振り分けたあと、二分検索するのはどぉ?
実際いろいろ作ってみて
実行速度を比較したら・・・と思うが面倒だな。
exportしてGetProcAddressでやるとか。

procedure RUN;
begin
 Hoge.Run;
end;

exports
 RUN;
Delphi6proなんですけど。
OleContainerにひな形のExcelをのせて、DBから参照した値を入れ込んで
表示させたいのですが、表示される行数が60行程度で切れてしまいます。
これってどーにもならないの?
計算式が複雑でしかも頻繁に変化するんでExcelを使って表示させた方が便利
なのでStringGridじゃない方が良いのですが、やっぱ駄目っすか?
882志士叡山:01/12/21 15:21
>>881

それは仕様がない書
883デフォルトの名無しさん:01/12/21 16:49
delphi初めてまだ1週間経ってないヘタレからの質問で申し訳ないですが、
Char型をTSysCharSetに変換するのにはどうしたらいいんでしょうか?
(delphiのMLの過去ログ漁っても出てきませんでした・・・)
type TSysCharSet = set of Char;
です。 つまり256個のどの文字を使うかのフラグになっています。

var w:TSysCharSet ;
なら
w:=['#',','];
みたいに定義します
885デフォルトの名無しさん:01/12/21 16:55
>>877

このコードを参考にしなさい
http://www.kobira.co.jp/sakura/d_Con_Cgi.htm
Delphiインタープリタ(Delphi interpreter).
>>885 どれも追いかけるのが嫌になるコードばかり
 こうして比べると ギコbasicも案外素直に書いてるんだな
887デフォルトの名無しさん:01/12/21 17:15
>>884
おー動いた!ありがとうございます。
そしてまた便乗質問になってしまいますが、
今度はString型→TString型のパターンなんですが・・・
(delphiって、なんか型がいっぱいあるんスね・・)
っと、TString『s』ですね。
>>887
あ、「TStrings型の変数 :=Tstringlist.create;」で自己解決しました。
どーもお騒がせいたしました・・・
Innerfuse Pascal Script そのままつかっちゃあかんの?
コンボボックスをフラットにした状態で、
外枠に黒い線を付けることは可能なのでしょうか?

テキストボックスはBorderStyleで設定できましたけど・・・
m(__)m 初心者質問ですいません
892891:01/12/21 20:14
すいません、いろいろなプロパティをさわっていたら出来ました。
どこをさわって出来たのか、わかりませんけど(泣

お騒がせしてすいませんでした、逝ってきます・・・・

   ||
 Λ||Λ
( / ⌒ヽ
 | |   |
 ∪ 亅|
  | | |
  ∪∪
893881:01/12/22 00:32
>>882
やっぱ仕様ですか。Delphiの仕様なのかExcelの仕様なのか
よくわからんが、仕方ないのでこの部分はDelphiじゃなくて
完全にExcelのVBAでかくよ、ありがとう。
894デフォルトの名無しさん:01/12/24 11:51
>>881 TF1Book ではダメ? 使い方は vcf1.hlp
895デフォルトの名無しさん:01/12/24 12:24
プログラミングを始めてみようと思い、
フリーのDelphi 6 Personalを使ってみようと思うのですが
説明をみると、インターネットアプリケーションはXのマークが書いてあったのですが
monazillaで公開されているソースで2chブラウザが作れないということでしょうか?
だめならエディタ辺りから作り始めて勉強して行こうとおもっているのですが、
1stステップに向いているプログラミングでちょっとしたツールを作る場合
何がいいでしょう?
896デフォルトの名無しさん:01/12/24 13:14
DelphiでCGIを作ろうと勉強中なのだが、
パーソナルWebサーバー上では上手くいくのだが。
いざアップロードすると上手くいかない。
この手のことを詳しく書いてあるHP知らない?
>895 作れないのではなく 一部のコンポが標準で付いていないだけです。

>1stステップに向いているプログラミングでちょっとしたツールを作る場合
WindowsならDelphiでしょう。
 教育用の堅い言語であるpascalが下地ですから、変な癖も付き難く
 高速コンパイルのRAD環境は カットアンドトライ方式で学ぶには最高です。
 たとえばインラインアセンブラを使ってさえコンパイルは一瞬で終ります。

必要があればRADを使わずアプリやDLLの作成も可能ですし、リソース
コンパイラ機能なども一体化され非常に使いやすく、 1stステップどころか
ラスボス直前までDelphiで学ぶ事が可能でしょう。
>896 まさか普通のレンタルサーバにアップロードしてるんじゃないですよね?

当然Delphiで作っCGIはWindows環境でしか動きませんよ。
>896
参考になるHP
http://www.tmd.ac.jp/med/mrad/delphi/index.htm

確か、以前やった時は3つくらいの方式があるのをDelphiのコンポーネントが
その差を吸収してくれる仕掛けになってたような記憶が・・・
なんでレコード型の初期化の方法がヘルプに載ってないんですか?
901Delフサギコ:01/12/24 22:11
>>900
ここで話題になっていますが
[Delphi:62809] レコード型の初期化

    ∧ ∧  でも、このメールでも具体コードわかんねーぞ
    ミ ゚Д゚彡
  〜ミ,,,,uuミ  サマリーかけやゴルァ

で、試してみました。こんな感じで初期化してちょ。
type
 TMyRecord = record
  Value1: Integer;
  Value2: Integer;
 end;

var
 MyRecord1: TMyRecord;

procedure Check(A, B: Integer);
begin
 if A <> B then
  raise Exception.Create('テストエラー');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Check(MyRecord1.Value1, 0);
 Check(MyRecord1.Value2, 0);

 MyRecord1.Value1 := 10;

 Check(MyRecord1.Value1, 10);
 Check(MyRecord1.Value2, 20);

 FillChar( MyRecord1, SizeOf(MyRecord1), 0);

 Check(MyRecord1.Value1, 0);
 Check(MyRecord1.Value2, 0);
 MyRecord1.Value2 := 20;

end;

最近 Delphi 6 Personal を入れました。
ただ、いかんせん本は古いしウェブ上の情報も5ぐらいで止まっているため、
なかなか勉強がはかどらず、つらいときがあります。

今は『はじめてのDelphi』で勉強しています。この後のステップとして
みなさん、どのような勉強法をされていますか? 近くに教えてくれる人も
いないし、書籍もほとんどないのでどうしようかなぁ…と思っています。
とにかく何か作って見れ。
MP3プレイヤーでもいいし(コンポがあるので簡単にできる)
壁紙チェンジャーでもなんでもいい。
するとすぐに疑問にぶつかる。そしたら2chで聞いてもいいし、webで調べて一つずつ解決。
そうやってステップアップしていくのが一番の近道じゃないかな。
904902:01/12/24 23:08
>>903
なるほど、ありがとう! 勇気付けられました。
Delphiってユーザーの互助で成り立ってるんだなぁ、とか思ってみたり。
>>904
「ユーザーの互助でしか成り立たない」の間違いでしょ(藁
906902:01/12/24 23:40
>>905
それ以上書いちゃ怒られると思ってあえて書かなかったのに(w
907Delフサギコ:01/12/25 00:18
         _________
  ∧,,∧   /
 ミ;゚Д゚彡< まあまあ、マターリいこうぞえ
  ミつ つ  \
〜ミ ,, ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∪∪ 言語宗教間で争ってもいいことないヨ


Delphiは下位互換性が高いのでD6でも
D3〜5までの本が役に立つものばかりだよ。
最新の機能を追わなくても面白いものは
イパーイ作れるぞ。

あとソフトウェアはアイデアひとつで
面白いものが作れるかもね。
有名ソフトの真似っこするのもいいかも
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | ユーザ同士が殺伐とした          .|
 | 吉野屋みたいな言語もいかがなものかと |
 |__________________|
.    ∧∧ ||
    ( ゚д゚)||
    / づΦ
909895:01/12/25 05:13
>>897
Delphiではじめてみようとおもいます。

当方、お金が無いのでとりあえずはPersonal+WEBの文献で学んでいこうとおもっています。
>一部のコンポが標準で付いていないだけです。
とのことですが、通信系のツールを特に作りたいならばやはりProfessionalを購入する必要があるでしょうか?
追加できるものが配布されているのでしょうか?
>>909
Indy 使っとけというのが定説
http://www.nevrona.com/Indy/
Pro版のメリット〜
・コードエクスプローラーでコーディングが楽々

初心者のうちはコードディングより考えている方が長いんだから不要。
ある程度はツールで補えるし。過去ログ参照。

・通信系のコンポがついている
IndyというフリーのコンポがあるのでPersonalでもかまわない

・商用に使える
趣味にしか使わないなら不要

というわけで、Personalでバリバリ物が作れるようになってからPro版を買うのが良いかと。
コンポーネント(というかVCL)にあまり頼らない作り方していけば
昔のバージョンの参考書やwebの資料はすごくやくに立つ。
そうなると、VC用のwebサイトの資料も役に立つ。
資料が一気に増える。

素人(,つか初心者)にはオススメできないが。
何がいいたいかって言うと、
通信系コンポーネントがないから出来ないなんていうのはツマランいいわけで、
Socekt系のAPIを自分で叩けば普通に出来るよということ。
しかも、他の環境だとそちらが当たり前だろうから、
Delphi以外のそちらの資料も参考になるよってことさ。
# Socketに関してはIndyでいいんだけど
スペルミスリマクリで偉そうなこと言ってスマン
細かく言うとスペリングだけどな
クラスの概念を教えてください
12ダース
JFK
ハシブトとか。
大岡越前の前とか。
ヤマトの敵。
Delphiの場合、
 1)データをひとまとめにした(レコード型)
 2)データや関数(メソッド)をひとまとめにした(オブジェクト型)
 3)さらにコンストラクタとデストラクタをつけ、実行時型情報の機能を付けた
    結果、クラス型の変数はインスタンスの参照に

 という発展の仕方ですね クラス型は
923916:01/12/25 15:20
>>922
ありがとう
>>910
>>911
>>912
>>913
とっても参考になりました。Indyで十分みたいですね。
難しいことは良く分かっていませんが、バリバリ使えるようになるまではPersonalで
十分ということは分かりました。
レスどうもありがとうございました。
925便乗:01/12/26 03:36
Indyの使い方を解説してるページは無いですかね?
2ちゃんつながり(?)のmonazilla以外で。
926デフォルトの名無しさん:01/12/26 03:41
ひたすらサンプル嫁
927便乗 :01/12/26 04:35
>>926
タメになるレス、ありがとハゲ
928デフォルトの名無しさん:01/12/26 14:05
>>925
Indyつっても沢山あるクラスのうち何を知りたいの?
確かにパーソナルでも使えるけど、プロ以上なら日本語ヘルプが付いてくるYO!
929デフォルトの名無しさん:01/12/26 16:38
ヤフオクで複数のログインIDを切り替えられるソフト(アイコンがDelphi)
見たことあるんだけどどうやってんのかね?
クッキーって編集できんの?
キャッシュアップデートについて、勉強していますが、
ヘルプやマニュアルだけでは理解できないので、
サンプルソースを探しています。

キャッシュアップデートのサンプルソースが
公開されている場所をご存じであれば、教えて下さい。
931デフォルトの名無しさん:01/12/26 20:07
delphiでwinAPIは普通に使えるんですか?
ハァ?
933931:01/12/26 20:14
なんだァ!?
>>931 使えますよ
まあまあ、マターリとしましょう
uses Windows;だな
>931 普通に使えますよ。 普通に使えない API は一つしかありません(wprintf)

興味があるならこちらへどうぞ(あげないでね)

Delphiで小さな実行ファイルを作ろう
http://pc.2ch.net/test/read.cgi/tech/1009080085/
937デフォルトの名無しさん:01/12/26 22:38
フォームのリサイズに合わせてメモのサイズも変えたいので
procedure TForm1.FormResize(Sender: TObject);
begin
Memo1.Width:=Form1.Width-Memo1.Left-8;
Memo1.Height:=Form1.Height-CoolBar1.Height-Memo1.Top-40;
end;
としたんですがこの2行があるとフォームを小さくリサイズしたときに
ステータスバーが正しく描画されずに下にはみ出たり(表示されず)
全く表示されなかったりします。
ステータスバーはalign=alBottomを設定していますが
どうもtopの座標がおかしいようです。
どうしたらいいでしょうか。
>>936
wprintf も D6 から追加された varargs 指定を使えば利用可能。
>937
Memo1.Anchors調べてみ
940デフォルトの名無しさん:01/12/26 23:34
>>939
akLeft,akTopがtrueになってます。
ここはこれじゃダメですか?
941もうすぐこのスレも終わりですね:01/12/26 23:43
「手続き」って言葉に慣れない人〜〜!
なぜだろう?何かがイヤ<手続き
オレだけか…。
>940
align:=alBottom, Anchors:=[akTop]だけでいけるはず
937のコードいったん削ってみ
( ´D`)ノ<ぷろしーじゃあれいいのれす>>941
>>941
procedure = 手続き じゃないっけ?
945941:01/12/27 01:44
そうれす。ぷろしじゃーれす。でも「手続き」と言うのれす。
ぷろしじゃーと言えばいいかもしれないれすが、
やっぱり正式に日本語だと手続きなのれす。
なんかイヤれす。
てへ★
procedureも関数これ最強。
947  :01/12/27 02:16
ボーランドのC++スイートって奴
15000円なんだけど買っても損しない?
ってスレ違いか、、、
>>947
そんではないかは、自分次第。
俺はきっとTASMしか使わないだろうから、\15kだと微妙。
C++スイートって何?
旧製品の廉価版たたき売り
>938 ほんとだ! wsprintf って使えたよ!
>>952 ウ ソ ツ キ !
954952:01/12/27 09:55
>>953 ウソじゃないぞ 試してみ

function wsprintf(var Output ; Format: PChar): Integer;
cdecl; varargs; external user32 name 'wsprintfA';

procedure TForm1.FormCreate(Sender: TObject);
var s:string;
begin
setlength(s,1000);
wsprintf(pchar(s)^,'%5d %5d', 1,100);
Caption:=PChar(s);
end;
ワオ。知らなかった。

>>953
Helpに書いてあるぞ
956953:01/12/27 17:06
いや、いいわけすると、windowsユニットのをそのまま使っても使えないんだよ
957デフォルトの名無しさん:01/12/28 09:04
もしかして
 Caption:=PChar(s);
 ってやると ゼロ終端探して長さ調整してくれるの? それは仕様?
PChar(s)はゼロ終端文字列として扱われるから仕様。(string→PCharへのキャスト)
途中に\0があるとLength(s)とLength(PChar(s))の結果も違う。
ヘルプに記述あったかな?
959957:01/12/28 09:30
そうか、堅い言語だと思ってたけど案外なんでもありって面もあるんだな

pchar(s)^ もなんだか驚き
960ねこま:01/12/28 11:55
var
 s: string;
 p: PChar;
begin
 p := PChar(s);
 while (p^ <> #0) do
 begin
  Inc(p)^;
 end;
end;
961デフォルトの名無しさん:01/12/28 13:07
>>960 s に対する setlength を忘れてる 危険
962ねこま:01/12/28 16:18
いやまあそうだけど (w

> while (p^ <> #0) do
これが言いたかっただけ
963デフォルトの名無しさん:01/12/28 23:37
string型はポインタでないのに、ポインタ型であるPCharにキャストできるのって、
変じゃない?
@(string+1)=PChar(string)だから変だとは思わないけど・・・・・・
>>963
var S: String;
begin
S[1] := '1';
とか出来る所を見るとSはオブジェクト参照型の一種のように
見える。オブジェクト参照型はポインタ型と同じアドレス格納型
だからキャスト出来て問題無い。(でもnilは代入出来ないな・・)

まあ、コンパイラからはかなり特別扱い受けてる型だかバリアント
に比べれば・・・
@string にはもしかして、参照数が書き込まれてるのか。
PChar(@S[1])を使えばいいのか。

S[1]:='1';
が出来るのは、以前のバージョンとの互換性を持たせたからですよね。
短い文字列型ではSは配列になるから・・・。
>966
参照数は Integer(@string) - 8 では?
長さが -4?
@stringから文字列が始まるの?
そのくせ文字列はs[1]から始まるんですよね。
短い文字列の仕様に合わせてですよね
>>969
CとPascal文字列両方との互換性を持たせるため。
長い文字列型は実際にはポインタ型だね。
[言語ガイド]-[メモリ管理]-[長い文字列型]参照。
stringの内部構造は旧バージョンの構造引きずってるんだよな。
たまに[1]で始まるの忘れててバグ作っちまうときがあるよ。
でも最初、ポインタの前のアドレスに文字列数なんかのデータあるってのが、
びっくりした。
短い文字列は、0byte目に長さ、1byte目以降に文字列が入ってて
長い文字列は、-8byte目に参照数、-4byte目に長さ、0byte目以降に
文字列が入ってるんだっけ?よくよく考えてみると訳ワカメだな。
stringは内部ではクラス扱いに近いとかって中村師言ってなかった?
確か参照カウンタで管理されてて、
他の文字列に代入してもすぐにはコピーされず、
変更したときに初めてコピーされるんだっけ?
TBitmapなんかもこんな感じだよな
>>974
「コピーオンライト」だね。
9761:02/01/03 11:55
スレッドたてすぎらしくて たてられません・・・どなたかお願いします
---以下テンプレート----------------------------------------
Delphi関連のTips Q&A はこちらです。

気楽な雰囲気がよければこちら
モナーの *やさしい* Delphi質問スレ
http://pc.2ch.net/test/read.cgi/tech/1003113413/

希望や夢はこちらに
★クライアントサイド最強の Delphi に物申す★
http://pc.2ch.net/test/read.cgi/tech/1001442200/

メーリングリストのウオッチすれはこちら
Delphi/Kylix Tech 2nd
http://pc.2ch.net/test/read.cgi/tech/993005709/

つづく >>2-3 あたり


キャラ系雑談はこちらで
ミ,,゚Д゚彡DelフサギコのフサフサDelphi談話室A
http://pc.2ch.net/test/read.cgi/tech/1006602102/

APIで直接な漢な人はこちら
Delphiで小さな実行ファイルを作ろう
http://pc.2ch.net/test/read.cgi/tech/1009080085/

ギコBASIC拡張計画
http://pc.2ch.net/test/read.cgi/prog/961558082/

前の Delphi相談室2
http://pc.2ch.net/test/read.cgi/tech/995950803/

前の  Delphi相談室
http://piza.2ch.net/tech/kako/971/971261573.html
977 :02/01/04 18:30
Delphi相談室を統一してほしい、
と、思うのは私だけ?
978デフォルトの名無しさん:02/01/04 18:49
もっとあってもいいくらいだとおもふ。

入らんコンポーネントを述べるスレとか
DEL6 perでプロを越えるためのツール探しのすれとか
979デフォルトの名無しさん:02/01/04 19:05
Delphi 6 いいかげんに XP スタイルに対応してくれ
980デフォルトの名無しさん:02/01/04 19:40
D6Pro起動するまで、やたら時間が掛かる。
要らないコンポーネントを削除したりすれば、起動時間短縮は可能?
てか、要らないコンポーネントて言っても、どれが要らないものやら・・・・・
パッケはロード/アンロード自由だから、とりあえず全部外してみたら?
982デフォルトの名無しさん:02/01/04 20:23
試してみたけど、実感できるような違いはなかった・・・・・
起動時間と登録されてるコンポーネントの数は関係ないらしい。
D5と何が違うんだろ?
漏れはD6の起動に16秒かかるんだが、試しにすべてのパッケージを
デフォルトでアンロードに設定したら1秒で起動したYO!

でも、コンポーネントが TFrame しかない Delphi なんて・・・
984デフォルトの名無しさん:02/01/04 21:56
TActionManagerと、TActionMainMenuBar, TActionToolBar使って
UIを作っているのですが、ツールバーの方のキャプションを変更
しても、実行時に反映されないのですが、何か間違っているんでしょうか?
ツールバーのボタンをクリックすると、オブジェクトインスペクタに
TActionClients[n](nはクリックしたボタンによる)が出てきますよね?
そこのCaptionを消去しても、実行時にはキャプションが復活してる
んです。
>>983
ごめん、パッケージのアンロードってどうやったらいいんでしょう?
「コンポーネント→パッケージのインストール」で、設計時パッケージの
チェックを外すだけじゃ駄目?これだと殆ど変化なしです。何故だ〜
986デフォルトの名無しさん:02/01/04 23:12
>>985 [デフォルト] にチェックしわすれたとか
988デフォルトの名無しさん:02/01/05 09:31
どこかDelphi6の初心者向け講座とかありませんか?
webで入門はやめとけ。書籍買え。
990デフォルトの名無しさん:02/01/05 11:00
>>989
どういう本がお勧めですかね?
Delphi6 開発者ガイド
992デフォルトの名無しさん:02/01/05 11:43
サルでも分かるDelphi
1000