1 :
デフォルトの名無しさん :
2001/07/24(火) 14:00
2 :
デフォルトの名無しさん :2001/07/24(火) 14:02
3 :
デフォルトの名無しさん :2001/07/24(火) 14:09
Techの方もリンクはってればよかったね。
4 :
デフォルトの名無しさん :2001/07/24(火) 14:35
1>> すぐに削除依頼を出すように。 むやみにスレ立てんなよ
delphiってもうバージョンアップしないんでしょ。 そんなのに新しいスレ建てるなんてばかげてると思わない会。
>>1 スレ立てお疲れでーす。
しかし、変な嫌がらせ野郎がいるな。
>>4 -6
>>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を設定しなおしているだけなんだけど 理由がわからない。 なぜだ!教えてくれ。 よろしく。
>4=5=6=8 激しくウンコ(;´д`)
function FourNum(s:string):double ; var num:double; var sym:char; procedure addsub;forward; procedure next; var i,j:integer; const sep='^+-/*()<>'; begin if s='' then begin sym:=#0;exit;end; for j:=1 to length(sep) do if s[1]=sep[j] then begin sym:=s[1]; delete(s,1,1); exit;end; sym:=#1; for i:=2 to length(s) do for j:=1 to length(sep) do if s[i]=sep[j] then begin num:=StrToFloat(copy(s,1,i-1)); delete(s,1,i-1); exit;end; num:=StrToFloat(s);s:=''; end; procedure factor; begin if(sym = #1) then next else if(sym = '(') then begin next; addsub; if(sym <> ')') then raise Exception.Create(' )がない'); next; end; end; procedure muldiv; var savenum:double; var oldsym:char; begin factor; while (sym in ['*','/','^'] ) do begin savenum:=num;oldsym:=sym; next; factor; case oldsym of '*': num:=savenum*num; '/': num:=savenum/num; '^': num:=power(savenum,num); end; end; end; procedure addsub; var savenum:double; var oldsym:char; begin case sym of '+': begin next; muldiv; end; '-': begin next; muldiv; num:=-num; end; else muldiv; end; while (sym in [ '+','-'] ) do begin savenum:=num;oldsym:=sym; next; muldiv; case oldsym of '+': num:=savenum+num; '-': num:=savenum-num; end; end; end; begin //ここがFourNum関数の根っこ next; addsub; Result:=num; end;
12 :
11 :2001/07/26(木) 09:16
>>11 は 教科書通りの再帰下降法
1レスに収める為に 多少書き方は汚いけどちゃんと動くよ
#1 は数値シンボルね
関数は文字列の後に他の演算子が入らなくて(があれば
って処理すれば組み込めるよ。
>>9 迷医はあなたの質問の解決には十分な睡眠と適度な運動が必要だと
考えます。カスタム描画と VCL のイベントの関係と順序を多少理
解する必要にあるかもしれません。
この症状を対する処方箋は TreeView1 のフォントの設定を設計時に
行っておくというものです。設計時の TreeView1.Font のサイズや
スタイルを OnCustomDrawItem で設定するものとは別の内容にして
いるのが原因の1つだからです。
このため OnCustomDrawItem よりも先に発生する OnCustomDraw イ
ベントでは、まだフォントは設計時に設定した値のままです。
OnCustomDraw イベントで利用している DisplayRect メソッドは現
在のフォントに従ったラベル領域の幅を得ることになるため、設計
時のフォントの幅が OnCustomDrawItem で設定しているフォントよ
り小さいと期待した位置より左に、大きいと右にずれているでしょう。
あなたは TreeView1.Font が未設定だという迷医の診断を受けて
OnCustomDraw の中で TTreeView1.Font を設定するようなコードを
用意すればいいと考えるかもしれませんが、それは迷医の思うつぼ
にはまってしまいます。
OnCustomDraw の中で TTreeView1.Font に変更を行っても Display
Rect の返す領域は依然設計時に設定した TTreeView.Font のままに
なっています。カスタム描画ステージに突入したコモンコントロー
ルはステージを完了するまでフォントの変更を適用しないからです。
>>11 バグレポート
"--1" が -1になるぞ
"3+" で 6 が帰るぞ
だいたい空白が入るとダメじゃないか
15 :
11 :2001/07/26(木) 21:00
>>14 文法チェックは殆どしてないからね
1レスに収まる為って事で勘弁してくれ
空白についてはあちこちTrimを入れると修正出来るだろう
16 :
デフォルトの名無しさん :2001/07/26(木) 21:03
18 :
デフォルトの名無しさん :2001/07/27(金) 07:33
>>11 --1で1が帰る方がいいのかどうか判らないけど
'+': begin next; muldiv; end;
'-': begin next; muldiv; num:=-num; end;
この2行の muldivを addsub に変更すれば再帰処理されて1になるよ
まあでも 普通は -- はデクリメント演算子に使いたいよな
20 :
デフォルトの名無しさん :2001/07/27(金) 10:03
(・∀・)イイ! バグフィックス版をアプして下さい
21 :
11 :2001/07/27(金) 15:53
>>20 バグじゃないよ 仕様なんだって
どんな仕様が希望? 希望によっては変更してもいいよ
22 :
11 :2001/07/27(金) 15:55
>>18 なるほど
でもおっしゃる通り -- や ++ は別の演算子に使いたいし
-(-(1)) と書いてくれたらいいんだし
23 :
20 :2001/07/27(金) 16:01
バグじゃないなら良いです。
24 :
11 :2001/07/27(金) 16:26
そういわれると弱いなあ > "3+" で 6 が帰るぞ については、 factor の if の end; を end else raise Exception.Create('数があるべき'); とやってくれたら直る。 空白が入るとダメなのは next の if s[1]=sep[j] then begin sym:=s[1]; delete(s,1,1); exit;end; に if s[1]=sep[j] then begin sym:=s[1]; delete(s,1,1);s:=trim(s); exit;end とtrimを挿入してくれ
25 :
デフォルトの名無しさん :2001/07/28(土) 22:49
D5を使ってるのですが、 設計時 TMemoのLines プロパティに 大量のメッセージを書いておいたら どうもふと気付くと失ってる事が頻繁に起きます。 しょうがないから外部テキストにして読み込んでるけど これって俺だけ?
26 :
デフォルトの名無しさん :2001/07/28(土) 22:52
27 :
25 :2001/07/28(土) 23:57
そうか。俺だけか・・・じゃ再インストールしてみるよ
28 :
デフォルトの名無しさん :2001/07/30(月) 16:02
Delphi6 でツールバーのカスタマイズがサポートされましたが、 これをプログラムから実行するにはどうすればいいでしょうか?
29 :
デフォルトの名無しさん :2001/07/30(月) 16:04
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制限にひっかかってるとか
で、Win2kで開発してる人は気付かない、と。
9です。
>>13 もうすこし、わかりやすく言ってもらえないですか?
どうして、TreeView.Items[0]だけRectがずれているのかが
わからなくて問題なんだ。
・・・Items[1以降]ではちゃんと描画されているんだい!
で、解決方法を教えてくれよ。
OnCustomDraw時に一度だけUpdateやRefreshなどの
メソッドを出すようにしたらよいのかい?
迷医さん迷える患者を助けてくだされ。
>>34 良くわかってもないのに書くなよ
設計時に設定しろとかいう寒い解決方法なんて望んではいないんだ。
36 :
34 :2001/07/31(火) 08:23
それは1つの解決法としか書いてないだろ、 それから DisplayRect の挙動について説明してるわけだから、 設計時に設定したくないなら、そっちを読んで自分でコードを 書けばいいわけだよ。 わざわざそのときの注意点まで書いてあるんだし
37 :
34 :2001/07/31(火) 09:07
ついでだから再現パターン例だけ書いておいてやる 前提1) 設計時のフォントサイズを 11 とする 前提2) 計算を楽にするため文字 x は幅とサイズが等しいと仮定 1) フォームがされて TreeView を描画する要求がくる 2) OnCustomDraw イベントが発生する 3) OnCustomDraw で DisplayRect() が呼び出される この時、前提1と前提2から、DisplayRect の戻り値 の右端はアイテムが xxx だったら 11*3 = 33 だろ 左から 33px のところから描画が走る 4) 次に OnCustomDraw が発生して TreeView1 のフォ ントのサイズが 15px になる。アイテム xxx は 15x3 = 45px の幅を消費する。 左から 33px の位置から描画していた内容の先頭 10px が上書きされて潰れてしまう。 5) 1つ目のアイテムを描画しおわったらカスタム描画 ステージが一段落するので、次の DisplayRect() は Font.Size = 15 で 45 を返すので、2つ目以 降は正しく描画される DisplayRect で正しい幅を得たいなら描画が始まるよ り先にフォントのサイズを正しく設定すること、その 1例が設計時だろ。 他には DisplayRect を使わずに Canvas.TextWidth などを使って自分で各要素の幅・丈を足し算するとか
なげー文載せんなよ。ばーか(コピペ
>>36 -37
ありがと・
>DisplayRect で正しい幅を得たいなら描画が始まるよ
>り先にフォントのサイズを正しく設定すること、その
>1例が設計時だろ。
いや、そりゃそうなんだけど
描画直前にOnCustomDraw/OnCustomDrawItem
どちらかで設定して反映できないかな?
>他には DisplayRect を使わずに Canvas.TextWidth
>などを使って自分で各要素の幅・丈を足し算するとか
おっしゃるとおりですな。
なぜfor..でまわしているのに最初のItemだけ変になるんだ?
全部のItemがずれるのなら迷医の主張もわかるんだ。
だけど、DisplayRectでずれるのはItems[0]だけだぜ。
納得いかないよ。
>>38 おまえ邪魔
40 :
37 :2001/07/31(火) 13:53
そうか、確かにループだから変だな。 DisplayRect で TREEVIEW の処理が進むのかと思ってダミーで 呼び出してみたが変化しないな、迷医の解説希望。 AdvancedCustomDraw を使うという解決策もあるぞ。
41 :
デフォルトの名無しさん :2001/07/31(火) 20:29
いま、試せる環境にいないので、わからないけど
>>40 情報サンキュ。
TextWidthやAdvancedCustomDrawも試してみる。
基本的にOwnerDraw時も
TreeViewのデフォルトのFontと同じようにして
色だけ変更したりして描画するのが限界なのかモナー
42 :
デフォルトの名無しさん :2001/07/31(火) 20:42
DEMOにドッキングフローティングのサンプルコードがありますが あのドッキング状態をプログラム終了時に保存して プログラム起動時に復帰する簡単な方法ってありますでしょうか どの設定を保存してどのタイミングで復帰すればいいのでしょう おしえてください。
44 :
デフォルトの名無しさん :2001/07/31(火) 22:10
>>30 SendMessage(ToolBar1.Handle, WM_LBUTTONDBLCLK, 0, 0)
ってやってみたけど無理だった。
やっぱり、直接ダブルクリックするしか方法がないんだろうか…。
45 :
デフォルトの名無しさん :2001/07/31(火) 22:14
ひっそりとではあるが、 Delphi6 で TreeView の複数同時選択がサポートされてたのが嬉しい。
>>45 ほんとに?
旧版ではCreateParamsで設定するとかで実装できないの?
47 :
デフォルトの名無しさん :2001/07/31(火) 22:40
delphiってversion4,0が最近でたって本当ですか。 買ったほうがいいんでしょうか。
>>44 SendMessage(Toolbar1.Handle, TB_CUSTOMIZE, 0, 0);
CommCtrl の uses が必要。
.... 47 は無視しようね。
>>47 ネタウザイ。del6スレ有るだろうがゴラァ!!ネタにマジレスカコワルイ。
Delphiの不思議 ほとんどのソースはTabは2スペース分なのに エディタの初期設定では8スペース分になっている # 毎回、バージョンアップのたびにここの設定を変えてます # はっきり言ってうざい
NEC、4000人の人員削減! 中村さん、大丈夫だろうか?
>>61 その設定を変える必要は無いから,誰も変更していないんだけど?
54 :
37 :2001/08/01(水) 03:44
>>51 タブの幅とインデントの幅は別々に指定できるんだよ
>>52 リストラされたら晴れてBorland社員になるか
正式なライターになってくれ。
富士通の方が深刻。有名社員いないけど。
>>55 >リストラされたら晴れてBorland社員になるか
Borland も嫌がるだろうよ。実物は性格悪くて。二度と原稿依頼はしないぞ。と誓った。
59 :
ふりすく :2001/08/01(水) 20:35
Delphiって他の言語と比較して何がいいところなん? 全然分からん。。。
言語と捕らえ方すると見誤る RADツールとして優秀だから評価されてる 正直Pascalうざい
61 :
厨 :2001/08/01(水) 21:39
みなさんはDelphiで、どんなものを 作っているのでしょうか?
62 :
デフォルトの名無しさん :2001/08/01(水) 21:52
game
tool
OS
66 :
デフォルトの名無しさん :2001/08/02(木) 03:38
97年の本がなんで今ごろ売られてるのか謎だけど、「やさしいDelphi」って本いいッスねー。 タイトルに毒を感じるのは私だけ?
>>59 Borland独自のOOP拡張はいけてる。
「RADのためのOOP」って奴(by DDJJに書いてた某氏)。
RTTIもTClassもpropertyもpublishedもおおかた素晴らしい。
しかも、単にRADにしか役立たないわけじゃなく、他の場面でも
色々役立たせることが出来る汎用技術。
一方、もともとのPascal(の影響を引きずってる部分)は、おおかた糞。
単にTP系のノウハウを投入しないと超速コンパイラを作れなかったから
選択したんだと思う(というか思いたい)。
言語というか字面の仕様としては、Javaのほうが数段マシ。
Pascal風の順序依存性の強い文法より、Javaのように
(C以上に)順序依存性を減らした言語のほうが、
OOP言語としては使いやすい。
そうそう。OOP機能と呼ぶべきかどうか微妙だが、
名前空間の機能は、ちと弱いねdelphi。もう少し改善して欲しい。
いまどき名前空間をネストというか構造化することができないってのは痛すぎ。
その皺寄せが、"csDesigning"などいう定数名に現れる。頭の2文字ださい。
好みの問題じゃないか?俺もCからDelphiに移ってきた最初は 結構戸惑う部分多かったけど今じゃCやJavaの書き方の方が なんだか違和感が有ったりする。
>>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ではこのようなことはできないのでしょうか?
ImageList1 がまだ作成されていないだけじゃない? as や is をつかいなされ。
72 :
初 :2001/08/02(木) 18:42
サブクラスでメソッドとかの制限ゆるめられるってのに 違和感がー
73 :
70 :2001/08/02(木) 18:50
>71 あらかじめImageList1は作られているので、直接指定すると 問題なくできました。で、結局 procedure TForm1.AccessImageList( Tmp:TImageList ); begin tmp.AddMasked(Bitmap, clLime); end; というちょっと情けない感じではありますが目的は達成できました。 as演算子使う場合って (TObject(Name) as TImageList).AddMasked〜 とかやれば良かったんでしょうか? どうもうまくいきませんでした。
74 :
デフォルトの名無しさん :2001/08/02(木) 19:03
>FindComponentではこのようなことはできないのでしょうか? できますよ。 Nameって変数名がちょっと怪しいけど大丈夫ですか? あとFindComponentからnil以外の値が返るかどうかもチェックして みてください。
75 :
デフォルトの名無しさん :2001/08/02(木) 21:58
>>69 TListは、そもそもTListという命名が詐欺(わら
TArrayとかのほうが相応しいように思える。
>>73 おーい。Name(文字列)をTObjectにキャストしてどうするよ?(^^;
(FindComponent(Name) as TImageList).AddMasked(Bitmap, clLime);
だがや。
あと
>>74 が言うようにNameってTComponentのプロパティ名と衝突してるんで
きちんと作ってないとおかしなことになるぞ。
TArray だと途中の要素を削除しにくそうなイメージが
77 :
アホ :2001/08/03(金) 00:25
いつパーソナルはダウンロード出来るようになりますか?ウキウキ☆
4000人のリストラ発表してから急に出てこなくなっちゃったけど 大丈夫なんだろか?中村さん
中村氏がいなくても特に問題は無いことがよく分かる。 きっと夏休みでしょ
中村氏がいなくても得に問題はないことがよく分かる。 pちゃんがいないと問題であることもよく分かる。
>>76 TListだとランダムアクセス出来なさそうなイメージが。
ところでListというとLispのCellみたいなものを思い出すが、
GCのない言語でああいうものをやると悲劇が訪れるだろうな…
82 :
turbo type D :2001/08/03(金) 10:04
名前空間って列挙型にも適応されるものなんでしたっけ? 先頭2文字は結構エレガントに感じるんだけどなあ。 列挙型の名前よりかは(だってあれ重複OKだもの) ユニット名の重複がありそうで その点はJava的なフォルダみたいな(フォルダそのものか?) 名前空間がいいんだが... それより、テンプレートを導入して欲しい。
クラス内に列挙型おけたらいいんだけど。 T2ch = class public TMode = (SageMode, AgeMode); : : end; T2ch.SageModeって感じでアクセス。 C++のenumみたいな。
>>83 ReadOnly のプロパティ/定数値を返す関数を定義したら?
>>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メソッドの多態」で難なく乗り切れる。
>
>>83 >>T2ch.SageModeって感じでアクセス。
>
>>84 >>ReadOnly のプロパティ/定数値を返す関数を定義したら?
>ちょうどいいや。定数を返すClassメソッドを作ったら如何?
>もろにそういう呼び出し手順で呼べるし。
>しかも子Classで違う値を返したいなんて思ったときも、
>delphiなら「Classメソッドの多態」で難なく乗り切れる。
トリッキー(笑)かっこいーなー
88 :
turbo type D :2001/08/03(金) 15:33
> 嘘だろ…あれのどこがエレガント… > たった2文字で何を表現したかが(人間様に)判るのか? そうか…もちろん先頭小文字3文字でも4文字でもいいけど あの頭文字を羅列した命名則が好きなんだ > 理想はやっぱりclassとunitの同一視かな。コンパイル言語じゃ苦しいかもだが。 > delphiの場合、 classとunitは何らコンパチ性の無い概念であるくせに > classとunitが名前空間を共有してるってのが、痛い。 若干痛いかな? ネット時代だと他人の配布しているコンポーネントと 命名がぶつかることは現在もかなりあるだろうね。 関係ないけど1ファイル1クラスの思想はオレは嫌い。 > ただし導入するなら、C++風の無用に重い奴じゃなく、 > GenericJavaみたいに軽量な奴だけ、許可。 C++のテンプレを詳しくはしらないんだけど 重厚な奴はいらない。
89 :
70 :2001/08/03(金) 16:50
>>74 -75
ありがとうございます。
他の部分が問題なのかと思い以下のような最小限でやってみたら
やはり例外が発生してしまいました。
procedure TForm1.FormCreate(Sender: TObject);
var
NewImgList : String;
NewBitmap : TBitmap;
hoehoe : TImageList;
begin
NewBitmap := TBitmap.Create;
NewBitmap.Width := 32;
NewBitmap.Height := 32;
NewImgList := 'hoehoe';
hoehoe := TImageList.CreateSize(32,32);
// hoehoe.AddMasked(NewBitmap, clLime);
(FindComponent(NewImgList)as TImageList).AddMasked(NewBitmap, clLime);
end;
FindComponent行をコメントアウトし、その上をコメント解除すると
問題ありませんでした。ひょっとしてなにか別のUnitを useしておかなくては
いけないとか?^^;
とりあえず、あらかじめ ImageListを作って
procedure TForm1.FormCreate(Sender: TObject; ImgListTemp: TImageList);
で渡すという方法で処理していますので問題はないのですが、後学のために
問題点を指摘していただけると嬉しいです。^^;
>先頭小文字3文字でも4文字 あーおれもやっちゃってるけど、あまり好きじゃないんだよなー。 うーん。 テンプレートは確かにほしい。JAVAっぽやつキボンヌ
動的に作成したコンポーネントをフォームに登録していない。 フォームに登録していないから、FindComponent は検索に失敗し、nil を 返す。nil に対するメソッド呼び出しで例外発生。 前に誰かが書いていたけど、(FindComponent(NewImgList)as TImageList) が nil かどうかを 確認してから使いなさい。あまり1行に詰め込むのは汚いしバグの元。 生成コードに対して違いは出ないから、各ステップを変数につんで処理をしなさい。
92 :
デフォルトの名無しさん :2001/08/04(土) 02:51
pちゃん復活あげ
93 :
デフォルトの名無しさん :2001/08/04(土) 02:53
pはくたばったって書いたら出てきたってことはpは2chねらーだな(藁
p氏ふっかーつ!! お久しぶり〜
96 :
デフォルトの名無しさん :2001/08/04(土) 07:22
>>96 >8月4日2時より緊急メンテナンスを行います。一時、アクセスができなくなりますのでご了承下さい
>>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だ
>>98 > コードをコンパイルしてバイナリ化するときに、テンプレートを使われた件数(!)に
> 相当する個数の擬似クラス(?)がバイナリの中に作りこまれることになる。
template の specialization を使うことで、簡単に実装の共有を実現
できます。しかも型安全性を維持しながら、キャストのオーバーヘッド
もありません。
確か「プログラミング言語C++」にサンプルが載ってたと思います
が、もしかして
>>98 は「プログラミング言語C++」も規格書も読
まずに文句言ってます?
>>98 ,101
ここは「Delphi相談室」だ。ボケ。
テンプレートの効率に関しては,内部的にマクロ相当で処理している VC の古いやつは
確かに使いもしない実装をばんばんはき出していた。BC も 4 くらいまではそんな感じじゃ無かったかな?
現在の主流の実装では,仮想的な関数定義を作って最後にリンカがまとめるため,爆発は起きない。
実装が共有されるか否かまでは,規格書は何もいっていないよ。
>>102 レシーバであるObjectのサイズや、その中でのメンバのオフセット
とかを、コンパイル時じゃなくリンク時に確定するってこと?
104 :
デフォルトの名無しさん :2001/08/05(日) 13:29
tech スレいってください 相談室のネタには濃いすぎます せっかく多スレッドあるんだから棲み分けをっ
>>104 C++ 系の方に移りたいんだけどね...
>>103 sizeof( SomeObject ) には VMT テーブルの大きさは入らない。
だから,未使用であることが確定できるメソッドは,存在しなくても破綻しない。
分かるかな?
無理矢理 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
111 :
ななーし :2001/08/05(日) 18:05
そうなんですか。 Delは最近やりはじめたんすけど(VCは2年位前からやってます) けっこうDelでゲームをつくるっていうのをききますが、 どうやってるんだろう・・・
112 :
デフォルトの名無しさん :2001/08/05(日) 18:07
114 :
ななーし :2001/08/05(日) 18:11
おお!DelphiでDirectXつかえたのか・・・ しらんかった・・・そしてありがとう。
外部ライブラリが使える言語ならなんでも使えると思うが……
DelphiXはコンポ化されてりょ
117 :
デフォルトの名無しさん :2001/08/05(日) 18:17
それこそjavascriptでもな。
日曜日の夜なんで,基地外がはびこっているな
119 :
デフォルトの名無しさん :2001/08/05(日) 19:00
門外漢には基地外なのかどうかわからない
120 :
デフォルトの名無しさん :2001/08/05(日) 22:23
メニュー(TMainMenu) の横にイメージを表示するように設定すると、 アクセラレータキーを表す下線 ( _ ) が表示されません。 開く(O)... ← こんなやつ どのようにすればいいでしょうか?
121 :
デフォルトの名無しさん :2001/08/05(日) 22:28
>>120 VCでなんですが、&Oみたいに&をいれればオーケーです。
Captionはちゃんと'開く(&O)...'になってる?
123 :
120 :2001/08/05(日) 22:47
&記号は入れています。 ちなみにWin2000上だけで起こります。 Delphiのメニュー自体もそのような状態になっています。
124 :
120 :2001/08/05(日) 22:47
&記号は入れています。 ちなみにWin2000上だけで起こります。 Delphiのメニュー自体もそのような状態になっています。
125 :
120 :2001/08/05(日) 22:58
120 です。 説明が足りなかったので補足します。 この問題は、Windows2000 上だけで起こります。(Win95/98 では大丈夫) もちろん、& 記号は入れております。(開く(&O)...etc) メニューの横にイメージを表している(TMainManu.Images を設定している)場合だけ起こります。 Delphi の開発環境自体のメニューも同様の状態です。 同じような現象を確認された方、おられますでしょうか? (ミスで連続書き込みしてしまいました。すみません。)
>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 してもひっかからん。
JpegユニットのようにusesするだけでTImageから読み出せるようになる susieのユニットってないですか?
>>127 英語版の W2K はデフォルトで下線を消す
日本語の W2K はデフォルトで下線を表示。
ほとんどの人はこのモードを切り替えることはしないんだけど,みんな英語 OS 使っているのかい?
131 :
デフォルトの名無しさん :2001/08/06(月) 02:09
>Windows2000 からの新機能で、メニューアクセラレイタの機能を >有効にしたまま下線が消せるようになったんだよ。 なんの為の機能なのですか?
>130のデフォルトってなんか逆のような... 英語の'&File'は下線明示しないとどれだかわからないし 日本語の'ファイル(&F)'は明らかにFってわかるので下線不要。 デフォルトってDelphi固有の話? だとするとバグだか不適切な仕様だよね。
133 :
デフォルトの名無しさん :2001/08/06(月) 02:28
OS のデフォルトで日本語は下線表示がオフだよ
>>131 下線が入っていると見た目が格好悪いから、格好良く見せようとしてるのさ
odNoFocusRect も同じ
>>132 物を知らないことをとやかく言う気はないが,いったん物を知ったら少しは自分で調べたらどうだ?
教えて君は辞めてくれ。
135 :
120 :2001/08/06(月) 06:13
Delphi では、下線表示を強制的にONにはできないよ。
136 :
デフォルトの名無しさん :2001/08/06(月) 10:52
>>134 あーん、お前みたいな奴がいるからDelphiユーザーは不親切で
馬鹿ばっかりって言われるんだよ。ボケで糞で時代遅れで
デブで腐ってて、臭くて、オタクで意地っ張りで、ボケてて、
意固地でノー足りんで禿げてて、息臭くて、礼儀知らずで
すぐにスレを作りたがって、世間知らずだって言われるんだよ。
おめーのせいだよ。どっかいけや。
逆ギレかよ・・・。
138 :
デフォルトの名無しさん :2001/08/06(月) 11:09
>>137 お前みたいなのがいるからこのスレを終了させなきゃいけないんだぞ。
自分勝手なやつめ。どっかいけよ。
お前みたいなのがいるからDelphiはかっこわるくて、誰も使わないんだぞ。
店でも置いてないところがおーいんだぞ。どうしてくれんだよ?
139 :
turbo type D :2001/08/06(月) 11:36
遅くなったが
>>98 テンプレートの事、教えてくれてありがとう。
オレのやりたいことは
所詮Variantでも出来ることなのかもしれない
と、ふと気がついた2001年夏でした。
しかし
コンパイルエラーの出ない(と思う)Variantって
使いたくないんだな。変なジレンマだ。
>>104 あっちは、p氏監視スレになっている模様(w
Win2KMenu下線表示ユニットがあると思うんだが…
>>138 おいおい。電波かよ。
140 :
デフォルトの名無しさん :2001/08/06(月) 11:40
>>139 このスレの品位を落とすような書き込みは禁止です。
そんなこと書くからみんなdelphi使いは馬鹿だって言うんだよ。
わかるか馬鹿で禿げで臭いって言うんだよ。
すまぬ、おれが上げたからへんなのが来た気がする
natuchu keihou!!
143 :
デフォルトの名無しさん :2001/08/06(月) 12:03
>>141 ,142
このスレの品位を下げるような書き込みはゆるさんぞ。
どっかいけ!
145 :
デフォルトの名無しさん :2001/08/06(月) 13:16
>>144 帰れ!
Delphiはお前なんて必要としてねーんだよ。
氏ね、ぼけっ。
>>141 あんたのせいじゃない。
季節ものだから無視してりゃいいだけ。
旬ですか、すこし気が楽になりました。
148 :
turbo type D :2001/08/06(月) 14:45
TextWidthで文字幅を求めているんだけど Italicにすると、TextWidthの値より幅が必要みたいなんだけど Italicでもフォント描画幅を求める方法ってどうやったらいいの?
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 幅を見ればどれだけずらせばよいかわかる
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; こんな感じかー?
おおむねそんな感じだが、その関数名なら A 幅の調整もやれよ
@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使いは陰険だって
いわれるんだよ
@とBが違うのは当然だろ GetTextWitdhWithStyle は最後の文字に対して必要になる余白を含め た幅を求める関数だ、次の文字の A 幅に対して発生する共有位置の先 頭を返す関数じゃねーよ Bを@と同様になるように調整するためには 'A' の C 幅と 'B' の A 幅と Overhang 幅をつかって計算するんだよ
A幅/C幅/Overhang 幅っていうのはFontの専門用語なの? ややこしい話ですな。
156 :
デフォルトの名無しさん :2001/08/06(月) 18:04
コンポーネントパレットのsamplesのタブの所にある ShellTreeViewというコントロールってどうやって使うのでしょうか? ひととおりヘルプやマニュアルは見たのですが載ってないようなんです。 カスタムコントロールのサンプルって事ですか?昨日から始めた ばっかなんで全然わけわかってないですけど
Sampleタブの中身は伝統的にHELPはつかないです。
159 :
デフォルトの名無しさん :2001/08/06(月) 23:00
あんなもん、ヘルプみんでも分かるだろ。
へるぷみん ぷらすみん もんだみん
161 :
デフォルトの名無しさん :2001/08/07(火) 07:10
フリーのデルファイコンパイラって・・・。ないよね?
>>161 Delphi6 Personal
まだでてないけどな
日本語版のKylixOpenとDelphiPersonalのダウソドーロまだ? いつから?
168 :
161 :2001/08/07(火) 23:20
レスありがとう! 一応落としてみます。>お二人がた
169 :
PG初心者 :2001/08/08(水) 14:04
VBでいうISNUMERICと同じような関数はデルファイに用意されているのでしょうか?
ない。
>>169 ちょっと考え方が違うから完全に同等のものは無いけど
A) Val 手続きを使う
B) StrToxxを使って例外をキャッチする
という方法で対応出来ると思うよ
172 :
PG初心者 :2001/08/08(水) 14:34
へーなるほど やってみます ありがとう
173 :
70 :2001/08/08(水) 15:46
ども、実はいまだに FindComponentでつまづいてます。 ヘルプの「FindComponent例」を試すと確かにエディットボックスが 作成出来るのですが、それを直接 MyEdit1.Left := 32; のようにするとエラーが出てしまいます。 TEdit(FindComponent('MyEdit1')).Left := 32; はできました。 TEdit.Create(self).Name := 'MyEdit1'l; というふうに作ったものは FindComponent経由でしか アクセスできないのでしょうか? 以前91さんがおっしゃっていた「フォームに登録していない」 というのは Parentプロパティのことなのでしょうか?
174 :
デフォルトの名無しさん :2001/08/08(水) 16:09
>MyEdit1.Left := 32; >のようにするとエラーが出てしまいます。 >TEdit(FindComponent('MyEdit1')).Left := 32; >はできました。 >TEdit.Create(self).Name := 'MyEdit1'l; >というふうに作ったものは FindComponent経由でしか >アクセスできないのでしょうか? そりゃ当然だ。 エラー(ところでこれはコンパイルエラーだよね?質問するなら明記してね)が 出るのは、そういう「変数」名が存在しないからだ。 たまたまdelphiのComponentは、それ自体(およびIDE)の仕掛けとして、 DragDropしたインスタンスは、NameプロパティとPascalソース上の変数名が 「連動する」ように作られている。これが所謂2way開発って奴ね。 これのおかげで、Nameを実行時に動的に検索する(=FindComponent)ことも ソースに変数名を書くことも、同じようにやれるわけだ。 が、DragDropじゃなくて実行時にプログラムによってCreateが指示 されたインスタンスについては、実行時の仕掛け(FindComponent)はともかく、 ソースが追随してくれるってのは逆立ちしても無理。 蛇足: Smalltalkみたいなインタプリタ言語なら、変数名自体を実行時にいじることが 出来る(かも知れない)のだが、静的コンパイル言語では無理。 それを補い、便利に使えるようにした、という仕組みが2way開発。 てゆーか、生成したコンポ(の参照)を変数に保持したらいいのでは? MyEdit1とかの変数を予めFormのメンバとして作っておき、 MyEdit1:=TEdit.Create(self); とかってやれば、 以降は(MyEdit1を殺すまでは)MyEdit1という変数名でアクセスできるよ。
>>169 Delphi6なら
function IsNumeric(c: Char): Boolean;
がIdGlobalにあるとHelpにのってる
使ったことはないしVBとおなじかもしらん。
177 :
70 :2001/08/08(水) 17:31
>174-175 なるほど、コンパイル時にそのオブジェクトが存在しないから コンパイルエラーが発生していたのですね。 普段使っているのがPerlなのでその概念が頭の中にありませんでした。 TListを使うことでうまくできました。ありがとうございますっ!!
178 :
turbo type D :2001/08/08(水) 19:36
こんばんは D6のIsNumericってIndy製です? StrToIntのソースを見るとこんか function IsNumeric(S: String): Boolean; var E, V: Integer; begin Val(S, V, E); if E <> 0 then Result := False else Result := True; end; ところで質問。 HELPのValのところでこういう記述になっている procedure Val(S; var V; var Code: Integer); SやVにはなぜ型指定がないのでしょうか? Variant? あと、ソースを眺めているとよく思うのですが Valのソースを見ようとすると Systemユニットにジャンプして どこにValがあるかわからないのは どうして? どうやってValは定義されているの?
>SやVにはなぜ型指定がないのでしょうか? 「型なしパラメータ」で検索してみれ。
>>178 APIつかって
if ((not IsCharAlpha(c)) and IsCharAlphaNumeric(c)) then
は?
>>180 日本語環境じゃ使いにくいな IsCharAlphaNumeci では DBCS の判断を
絡めないといけなくなるので IsCharAlphaW/IsCharAlphaNumericW を
呼ぶことにはなるだろうけど、大元の話題が半角数字だけを調べたいので、
'1' が Numeric だと判断されるので NG の可能性が高い。
>>175 >ここのLispの話も同じことなの?
微妙に違う。Lispのあれは(あえてdelphi風に言い喩えるなら)言わば、
「コンパイル結果」をプログラムで生成できる、っていう感じだ。
「ソース」の生成とは違う。
変数(みたいなもの)をプログラムで作ることが出来るんだけど、
Lispではソースそのものの字面上の「変数」と切り離した形で
中間コード(とでもいうか)の上での「変数」のようなものがあり、
それをプログラムからコントロールできる。
delphiだと多分同じような情報をIDEが持っているんだろうな。
ついでにいえば、FindComponentでNameで問い合わせられるわけだけど、
あれも似たようなものだな。それを推し進めて言語処理系そのものに
合体させちゃったのがLispとかのやり方。
>>177 >コンパイル時にそのオブジェクトが存在しないから
念のため指摘しとくけど、「オブジェクト」じゃなく「変数」だぞ。
変数には、Objectの参照(Createメソッドの返し値とか)を「代入」して
はじめてObjectが関連づけられる。それまではnilまたは出鱈目な値だ。
そう。あくまで関連付けなんだ。変数そのものにオブジェクトが入っているのではない。
ここ覚えておくとイツの日か大失敗を未然に防げる日が来るぞ。
183 :
70 :2001/08/09(木) 00:26
>>182 オブジェクトではなく変数。
なるほど、自分の解釈が微妙に違っていたことに気付きました。
肝に銘じておきます。
>>183 でも、あの説明だけで
TListに代入する事がわかるとは
センスあるよ。
>>182 Thanx
あのーカルネージハートのようなビジュアル言語ってDelphiで作れますか?
つくったことあるぞ
188 :
デフォルトの名無しさん :2001/08/09(木) 23:41
>>188 フリーじゃないやん。そのうちなるけど。
190 :
デフォルトの名無しさん :2001/08/10(金) 00:22
列挙型などで、範囲外の演算をしてもエラーにならないんですが、 どうすれば型範囲外エラーをだしてくれますか。 例えばこんなことしたときにエラってもらいたい。 TBool = (bTrue,bFalse); ... B := bTrue; Inc(B); Inc(B); Inc(B);
191 :
190 :2001/08/10(金) 00:25
すんません プロジェクト→オプション→コンパイラに もろに設定ありましたね。
192 :
デフォルトの名無しさん :2001/08/10(金) 01:34
>>189 たしか9月末までにはダウンロードできるようになるはず
193 :
デフォルトの名無しさん :2001/08/10(金) 03:10
194 :
デフォルトの名無しさん :2001/08/10(金) 09:48
DelphiやKylixフリー版の公開で得するのは雑誌社と思われ
195 :
デフォルトの名無しさん :2001/08/10(金) 14:07
> Borland Mail News◆米国ボーランド本社へ、日本のユーザーの声を!
>
> □■□■
> ■ 日本のユーザーにとって必要なものは...
>
> 米国ボーランドの本社では、「日本のユーザーにとって必要なことは何か」につ
> いて、皆様の考えを知りたがっています。
> そこで、メンバーの皆様にご協力いただいてアンケートを実施し、その結果を改め
> て「日本のユーザーの声」として、米国本社に提供したいと考えています。
>
> 今回は「日本語化」に関するアンケートです。
> 皆様がお使いになっているボーランド製品について「日本語化されていて良かった
> と思うこと」を選択していただくだけの簡単なものです。
> ご協力をお願いいたします!
>
> 【日本語化に関するアンケート】
> ⇒
http://forums.borland.co.jp/poll/poll.dll/q?q=japanization
196 :
PG初心者 169 :2001/08/10(金) 15:15
整数チェックは確かにVAL手続きでOKでした。ありがとうございました さらに質問 小数点を含んだチェックはどうすれば?
Val でいいよ > 少数 0x40 や $40 という表記だって大丈夫 > Val
198 :
PG初心者 169 :2001/08/10(金) 15:24
あっそうなの? ありがとう。
199 :
デフォルトの名無しさん :2001/08/10(金) 17:22
逆に IsIntやIsFloatを作るにはどうしたらいいのでしょう?? 例外をtry exceptでキャッチせずに出来ます?
>>199 出来ます。 方法は沢山あります
単純に
if not s[i] in ['0'..'9'] then Result := false;
を繰り返すのでいいのでは?
function IsInt(const s: String): Boolean; begin Result := MatchesMask(s, '[1-9][0-9]*'); end; と書けたらいいんだけどな、* はこういう用途に使えない
203 :
デフォルトの名無しさん :2001/08/10(金) 18:32
そういうことじゃなく、VCLと同じ実装でやりたいんだけど…
204 :
デフォルトの名無しさん :2001/08/10(金) 18:54
205 :
デフォルトの名無しさん :2001/08/10(金) 20:01
ストリーミングしよう!(なぢょ
>>202 先頭にゼロを含めると何か変化するのか?
207 :
Delギコ :2001/08/10(金) 22:47
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ゚Д゚) < StrToIntは先頭ゼロでもいいのだよ ヤマトの諸君 |∪ |つ∀ \___________ | | U U ワイン トイエバ デスラ-
>>201 が言いたいことは MatchsMask の * は「任意の文字の繰り返し」だから
数字の連続を検出する用途には使えないってことだろ。
>>202 や
>>207 はそれがわかってないんじゃないかな?
>>208 ん?ああ、delのはいわゆる正規表現とは別物なんだっけ。
いわゆる正規表現なら「[1-9][0-9]*」は
お望みの意味になるんだがなあ…
210 :
デフォルトの名無しさん :2001/08/11(土) 01:42
BRegExp 使うくらいなら
http://www.activestate.com/ の
ActivePerl を使うほうが Perl5 の正規表現の全能力を生か
せて良い、外に DLL が必要になるのはいっしょだしな
外部 DLL がイヤなら正規表現エンジンとしてはすこし弱いが
DelphianWorld の Awk/Grep コンポーネントあたりで
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;
スマン '-'を忘れていた。 足してくれ 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;
>>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に記述するとうまくいきますがあまりスマートではないように思います。 フォームが最低一回描画された直後に呼び出されるようなイベントハンドラがあればよいのですが。
OnActivate で PostMessage してそのメッセージハンドラで 処理してから Close かな あとでボタンを押して実行するような形式に変更する時も楽だし。 OnActivate 内で処理するなら、Close の変わりに WM_CLOSE を PostMessage するのが楽だろう。
>>216 FormActivateのCloseを
PostMessage(Self.Handle, WM_CLOSE, 0, 0);
に変えてみたところうまくいくことを確認しました。
が、いままでメッセージ関連を避けてきたため
なぜCloseがだめでWM_CLOSEがよいのかが理解できてません。
というわけでこの際一通りお勉強してみます。
ありがとうございました。
# なぜこのようなありふれた(?)処理をVCLの枠組みの中で
# 実現できないのか少々疑問ではありますが。
ShowModal で表示されたモーダルなフォームは、ModalResult に 0 以外の値が設定されると終了する、これはわかるね? だから、ボタンなどの ModalResult を mrOk なんかに設定して、 そのボタンを押すとフォームは閉じる Close メソッドはフォームを閉じるメソッドだけど、モーダルの 時は ModalResult := mrCancel; を実行するようになっている。 だから、結果的にフォームは閉じるわけだ。 ところが、OnActivate の時はそうはいかない、これは処理の順 序が ・ShowModal を呼び出す ・ShowModal が OnActivate を呼び出す ・ModalResult を 0 にする ・ModalResult が 0 以外になったらフォームを閉じる という順番に行われているからなんだよ
>>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は発生するでしょ。 ブレークポイントで例外無視させることは出来るが いまいち邪道だ。
という事は
>>212 -213 が使ってる abort はOKなのね?
そういえば、そうだな。
225 :
デフォルトの名無しさん :2001/08/14(火) 09:53
∧ ∧__
/(*゚Д゚)っ/\
/| ̄∪ ̄ ̄|\/
|____|/
>>220 TDrawGridのScrollbarの真上に
TScrollbarをはっ付けたらなんとか可能
ヤラシイ実装だがな。
abort で Except って多用していいもんなの?
というか abort で”正常でした” って意味が帰るのがなんか嫌なんだけど?
>>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の現状)で満足しちゃアカンのだな、と。
実装をどこに置くかといえば、コンポーネントプログラミングとしては 非ビジュアルコンポーネントを作ってそのイベントハンドラに書く が正解じゃないのかね。 「だらだら処理をできる非ビジュアルコンポーネント」を用意するわけ。 それをどこに貼り付けるか、という話になればフォームの上やデータモ ジュールの上ということになるのでは。 いきなりデータモジュールに書いてしまうと再利用がコピペになってし まうだろ? 再利用できそうな部分はコンポーネント化して ぽとぺた にしておくのがコンポーネントプログラミングの生産性アップだから。 そのコンポーネントではイベントを別スレッドで簡単に呼び出せるとい いな、GUI に透過的に安全なアクセスを提供しにくいから無理かね。
232 :
デフォルトの名無しさん :2001/08/14(火) 11:52
∧ ∧ ・・・・。 ( ゚Д゚) 〜( uu) >「どこに?」と問われたら、DataModuleと答えるのが理想、ですかね。 そうでもない。 通常の関数処理ならUNITで データ構造としてのオブジェクトが必要なら UNITにクラスを作成してそれを使おう。 単なる機能を実装するためだけに DataModuleのメソッドとしてのは微妙に変(あくまで微妙) DataModuleは 機能TComponentを沢山保持するときに使う時に用いるのが正解。 だから、DBでよく使われるんだね。 >MVCなんてなものも有ることだし、処理やデータは >本来はフォームから出来るだけ分けるべきものなんだよな。 実際、どこまでVisualコンポーネントに機能を持たせるかという事は 難しい問題を含んでいるけど 完全にVisualと非Visualとを切り分けて実装するのもナンセンス と、ネコは思うよ。 自然な思考で、 ・これはVisual部分に含んでしまおう ・これはVisualとは分離だな という嗜好に基づいて実装するのが綺麗なんだな。 だいたい、VCLやDelphianWorldのコンポーネントは そうなっているのでDelphiやってれば自然に身につく。 このGUIアプリ構築で自然に身につくOO指向がネコは好き。
233 :
>>225 :2001/08/14(火) 12:35
TScrollBarって、相対サイズにできるんですか?
234 :
Delギコ :2001/08/14(火) 12:41
∧ ∧ (,, ゚Д゚) Min,Max,PageSize (| |つ 〜| | ∪∪ "相対サイズ"の意味、よくわからん
235 :
>>234 :2001/08/14(火) 12:48
TScrollBar のグリッド部分。 例えば TMemo のスクロールバーだったら、 全体の文字領域に対する 実際の表示領域の割合で グリッドの長さが変化するでしょ。
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
{ TModel } constructor TModel.Create; begin FItems := TObjectList.Create(False); end; destructor TModel.Destroy; begin FItems.Free; inherited; end; procedure TModel.AddView(View: TFormView); var i: Integer; begin i := Items.IndexOf(View); if i < 0 then Items.Add(View); end; procedure TModel.DeleteAllView; begin Items.Clear; end; procedure TModel.DeleteView(View: TFormView); var i: Integer; begin i := Items.IndexOf(View); if i >= 0 then Items.Delete(i); end; procedure TModel.NotifyUpdate; begin NotifyUpdate(Self,[]); end; procedure TModel.NotifyUpdate(Sender: TObject); begin NotifyUpdate(Sender,[]); end; procedure TModel.NotifyUpdate(Sender: TObject; Args: array of const); var i: Integer; begin for i := 0 to Items.Count-1 do (Items[i] as TFormView).UpdateModel(Self, Args); end; end.
238 :
Delギコ :2001/08/14(火) 13:01
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,,゚Д゚) <
>>233 =235 TScrollbarでさっさと試せ
Π ̄ ̄ ̄| \_____________
|つでしょ ()
| |___.|
∪∪
RubyのObserbableのパクリです。長くてゴメン。 個人的にはDelphiではModel-Viewが常に良いわけではないと思ってます。 というのもTTreeView, TListViewなどのコンテナコンポーネントがモデル的な性質を持っているからです。 これを無視してModel-Viewを導入するとModelとViewで同じ情報を二重に管理する必要が出てきます。 これはModelに対するViewが1つしか無い場合はまったく無駄になってしまいます。
240 :
ぐは :2001/08/14(火) 14:47
del6パーソナルってクラス補完機能ないの?
241 :
デフォルトの名無しさん :2001/08/14(火) 14:49
>>238 それらしきプロパテーもメソドも無いけど…
242 :
Delギコ :2001/08/14(火) 14:57
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ゚Д゚) <
>>241 >>234 をよくミネフジコ
.=| |==U=U==.| |= \___________
| | | | | |
| | ノU U. | |
| | .| |
with Scrollbar1 do
begin
Min := 0;
Min := 100;
PageSize := 50;
end;
Delphi5だけどな。
243 :
デフォルトの名無しさん :2001/08/14(火) 14:58
まさかそんなことhがああああああああああああああああ いままmでのくろうはなんだkったんだあああああああああああああ
>>243 いたいの
いたいの・・・
∧ ∧
(゚Д゚ )
/ゝ/ゝ⊂ U|
ノ ~ ~ ~; ゚Д゚; | 〜′
__ ;~ UU~;~;じ;;J~;_ U U
⊂ _ __ __ _⊃
↓
とんでけ!
∧ ∧∩
(゚Д゚ )ノ
∧ ∧ | つ
〜′ ̄ ̄(,,゚Д゚) | ⊂)〜
__ UU ̄ ̄U U __ ∪
⊂ _ __ __ _⊃
>>232 >データ構造としてのオブジェクトが必要なら
>UNITにクラスを作成してそれを使おう。
>単なる機能を実装するためだけに
>DataModuleのメソッドとしてのは微妙に変(あくまで微妙)
ん。そりゃまぁそうだ。
ただ、そのObjectのコンテナはドレよ?という問題がある。
コンテナなしでやるのはウンザリだし、
Formをコンテナにしちゃうんじゃ元の木阿弥だし、
UNITだけ存在するという作り方だとコンテナ(とその中のObjectたち)の寿命管理が面倒。
ObjectをDataModuleにぶら下げるのが幸せでないかぃ?
>DataModuleは
>機能TComponentを沢山保持するときに使う時に用いるのが正解。
>だから、DBでよく使われるんだね。
それ「だけ」に向いている、というわけじゃないと思うが>DM
#ところで「機能TComponent」ってのは、ここでは状態を持たないComponentという意味、だよね?
>実際、どこまでVisualコンホ゜ーネントに機能を持たせるかという事は
>難しい問題を含んでいるけど
del(VCL)自体がそういう考え方を半ば否定してしまっている「ので」
更に難しくなってる、という面はあるね。支援してくれてない。
>>231 >非ビジュアルコンポーネントを作ってそのイベントハンドラに書く
>が正解じゃないのかね。
>「だらだら処理をできる非ビジュアルコンポーネント」を用意するわけ。
ここでいう「コンポを作る」ってのは、TComponentを継承したClassを作る、
という意味のだよね?
#TFrameを使っての再帰的RADの話なら以下は無かったことにしてくれ。
だったらそれは、「今必要としている」状態を記憶する手段が無いね。
手続きは書ける(それとてコンテナ上でぐちゃぐちゃになっちゃう)けど。
rubyみたいに属性を実行時に後付けできる言語ならともかく、
そうでないなら、状態をどこに記憶するの?という問題が生じるだろう。
>いきなりデータモジュールに書いてしまうと再利用がコピペになってし
>まうだろ?再利用できそうな部分はコンポーネント化してぽとぺた
>にしておくのがコンポーネントプログラミングの生産性アップだから。
でも、あっち世界風に言うところの「Scripting」が困るんだよな、それ。
コンポとコンポの間を繋ぐコーディングが。
あと、間を繋ぐ「状態(を保持する変数)」も。
「あっち世界」の単語を使わずに delphian に分かるように書き直してくれ
なぜにsage進行
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
∧ ∧ ドクショ
( ゚Д゚)
ノつl⌒⌒l
〜(._[ ̄ ̄ ̄.]
 ̄ ̄ ̄
微妙と書いたのはDMはそれにも使うだろうって事。
DMをそういう意味で便利で使えるカモ。
>>229 の内容では
MVCを推薦する&Formの処理を安易にDMに移動するような事を
逝っているわけでそれは意味不明ではある。
クラスを機能別に分けて作っていって
そのコンテナにDMを使うのならわかるが
(コンテナとしてFormでもいいとは思うが)
DMのメソッドを増やしても特な事はなにもなかろう?
処理内容によってはDMを沢山用意しなければならなくなるし
理想をいうと
処理部分は自作クラスユニットで定義しまくって
その連携で機能を実装し、そのObject保持にDMを使う
という所かな。
なんか、229と245の発言内容レベルが異なるんだが
いろいろ考えたから?
ネコなのでヨクは氏らんが。
VCLのActionはMVCをむしろ肯定していることないかな?
設計時のVisual操作で必要なObjectを作成できるというのは
驚くべき機能じゃない?
>>247 同意
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(;゚Д゚) < …ネンノタメ
>>246 ./ | \__________
(___/
/
普通はしないかもしれんが
TComponentを複数配置したり
そのPropertyで属性を保持したりするし
(TOpenDialogを複数置いた方が便利な場合もある)
Propertyで他のコンポーネントに
接続(?)出来たりするよ、
DBでTQueryは複数使ったりするし
StringGrid保存TComponent派生クラスというのもあるし。
--------∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜□□ □□ ( ゚Д゚)< 前例踏襲 (O)----(O)U-U) \__________ TWebModuleはTDataModule継承!
>普通はしないかもしれんが >TComponentを複数配置したり >そのPropertyで属性を保持したりするし それを「属性」と呼ぶのかなあ? TForm.FindComponentで名前で検索するとか? >Propertyで他のコンホ゜ーネントに >接続(?)出来たりするよ、 コンポーネント参照ね。あれは良いよね。 ビジュアルプログラミングもどきが出来る。
253 :
Delギコ :2001/08/16(木) 18:43
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(゚Д゚) < 属性の意味がずれているか?
| ⊃|⊃ \________________________
⊂ノ〜
∪
>>246 > rubyみたいに属性を実行時に後付けできる言語ならともかく、
> そうでないなら、状態をどこに記憶するの?という問題が生じるだろう。
ん?、なんか話が通じてないぞ。
ダイタイ、Ruby氏らんしRubyでいう所の属性って何なのかも
想像つかない。ちょっと説明してや。
> >普通はしないかもしれんが
> >TComponentを複数配置したり
> >そのPropertyで属性を保持したりするし
>
> それを「属性」と呼ぶのかなあ?
> TForm.FindComponentで名前で検索するとか?
ん?FindComponent、あんなの使うのは
いきあたりバターリのコーディングだよ。
普通はつかっちゃダメだね。
サガリスギage
MLのU氏の謎の添付メールはなんなの?
>>254 添付物なんて届いていないが...
何番?
59523とか。Outlookで受信したらWINMAIL.DATってのが付いてた。
258 :
デフォルトの名無しさん :2001/08/17(金) 01:53
あなたの疑問はこれで解決できましたか? ◎はい ○いいえ 「はい」の場合、すぐに検索結果は見つかりましたか? ◎はい ○いいえ その他ご希望・ご要望をご記入ください。(255文字まで) 彼女が欲しい
259 :
デフォルトの名無しさん :2001/08/17(金) 09:44
え? じゃあ、あの人はMLにHTMLメールを送ってるのか? そういうことはしない方が良いと教わったけど、そういう 時代じゃないのか。知らんかった。
HTMLというかRichTextだわな
>>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 コピペ?
整数、実数、文字列しか使えない言語こそ逝ってると思うが…
>>262 > begin end なんて長すぎだゴルァ {}で十分だ
には違う意味で賛成。begin endより{}の方が目だってわかりやすそう。
他は、厨房の意見だとしか思えないが・・・。
>>263 まあ身の丈にあわなくてイライラするのも判るが、
道具にあたるのは無意味だぞ
拾った道具なら捨てればいいし、与えられた道具なら
コードテンプレートをヘルプで調べてみろ多少は楽になるだろう
マクロが好きなら自分で作ればいいと思うがどうだ?
_________
>>263 はボーランドの無償ダウンロード大好きの厨房君。_________
>整数と実数、文字列があれば十分。大は小をかねる。 それって逆の「小は大をかねる」(一般的諺ではないが)といいたかったのかな? 数系と文字列系しかない「参照すら使えねぇ」糞言語は煎ってよし。 #逆に、ほとんど参照しかなくても一応やっていけることを証明しちまったのが、Lisp。 関数内関数は無くてもいいとは思う(Privateメソッドとかにしとくとか)が、 マクロは単なる「つたない言語仕様からの逃げ」でしかないだろ。 どうしても欲しければプリプロセッサを自作しろ。 万一(藁)便利なら他人にも受け入れてもらえるぞ。
関数内関数はPascalよりも、むしろCみたいな言語に実装されてそうなもんだが。
>>11 のような再帰構造のプログラムをコンパクトに書くのには便利だろ
271 :
デフォルトの名無しさん :2001/08/18(土) 15:36
オブジェクトのディープコピーをしたいのですが、 Javaでいうclone()みたいなメソッドはあるのでしょうか。
>>271 Assign()というメソッドが一般的。
でも実装は自分でやってね(藁
274 :
デフォルトの名無しさん :2001/08/19(日) 05:18
>いちいち function やら proceger やら書いてられるかボケ スペル違うよね… ボソッ
>>262 のデルには'ぷろせげー'が存在すると思われ
>>275 あー、オレは結構 ’ぷろせげー’ 使ってるよ。
やっぱ、ありゃ使ってて気持ちいいね。
ぷろせゲーってどんなジャンルのゲームですか?(あ、綴りが違うか…鬱)
278 :
デフォルトの名無しさん :2001/08/20(月) 10:36
プログラムがIDE上で実行されているか単独で実行されているかを プログラム上でチェックする方法は無いでしょうか?
んーあったかなあ 誤魔化し的方法なら、IDEで実行時の適当なコマンドライン引数を設定して プログラムで判別する方法もあるけど。スマートじゃないね。
280 :
Delギコ :2001/08/20(月) 10:57
∧∧ (゚Д゚ ) ⊂ ヽ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〉 ノノ~ < CmdShowが9になってたりするな ∪∪ \______________ 姑息な手だが。
281 :
278 :2001/08/20(月) 11:28
どっかで副作用が出そうな気が... キーフックしたプログラムをデバッグしてると デバッグ用のキーがプログラムに反応してちょっと???になります マウスを使えばいいんだがついキーを押してしまう
>>278 ApplicationやFormもComponentの一種(サブクラス)だから、
それらのComponentStateを見れば判る、というわけにはいかぬか?
いま手元にDelが無いんで未確認だが。
IDE の判別じゃないが IsDebuggerPresent API で true が戻ればデバッガの上だから IDE の上だって ことがわかる。 Win95 では IsDebuggerPresent API がないが、MS の KB にソースコードがあるから、それを使うかサポート外 ってことで
284 :
Delギコ :2001/08/21(火) 14:59
> Win95 では IsDebuggerPresent API がないが、MS の > KB にソースコードがあるから、それを使うかサポート外 ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < せっかくだから、Delphiコードで示してくれ | つ[|lllll]). \_________ 〜| | ∪∪ ショウカイ スルナラ URL クレ
MSのKBってなんじゃらほい
286 :
Delギコ :2001/08/21(火) 15:13
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < Knowledge Baseじゃねーの? | つ[|lllll]). \_________ 〜| | ∪∪ まさか、`バイト?
IsDebuggerPresentってもしかして定義されてない? windows.pasになかったけど
288 :
デフォルトの名無しさん :2001/08/22(水) 06:18
Delphi6でDelphiをはじめてみようと思うのですが、 Delphiの本でおすすめなのを教えてほしいです。
本屋で立ち読みして良いと思ったの買え
290 :
うの・こーほー :2001/08/22(水) 07:33
>>289 それは無理!
都心部はともかく地方に行くとVBの本を200冊置いている本屋が
Delphiに関しては10冊も置いてない
置いてある本全部買い占めろ。売れるのがわかれば本屋も置いてくれるようになるよ。
292 :
デフォルトの名無しさん :2001/08/22(水) 08:53
初めてのDelphi Delphi応用プログラミング Delphiによるオブジェクト指向 この三部作。技術評論社。
ありがとー
初めに、初めてのDelphi買ってみます
>>289 地方なので売ってません(TT)
294 :
デフォルトの名無しさん :2001/08/22(水) 10:01
>Delphiによるオブジェクト指向 これ良書らしいから見てみたいんだけど、秋葉原のどこにも無かったよ ネットで注文しようとしても在庫無しだし、今でもまだ刷ってるの?
295 :
Delギコ :2001/08/22(水) 10:11
| | | | | | | |゜⌒/..| \ | ゜| ゜ ⌒// ..| ゜ \ ゜ | | / / | | |ヽ゜ \⌒゜ | | . ̄ ̄ ̄ ̄|| ̄ ̄ ̄ ̄ | ∧ ∧|| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | (,,゚Д゚)|| < もう酢ってないよ ゜ | ..|∪ つ \______________ | |.| | | | ___.U..U____ ゜
>>295 やっぱり?(TT
無いと解ると余計に読んでみたくなるな
お返事ありがとう
>>294 良書なのに何故か絶版です
技術評論社は商売根性がありません(w
298 :
デフォルトの名無しさん :2001/08/22(水) 22:52
>>297 絶版だったのか。
かなり入手困難になってきたようなので、盆休み前に買ってきた。
かれこれ1年以上も本屋の棚に眠り続けていたやつを・・・
全然売れないので、貴重な本が見つかるのは田舎ならではと思う。
299 :
デフォルトの名無しさん :2001/08/22(水) 22:55
D6フリー化したからユーザーも増えるだろうし、 良書の類は改訂してまた出版されるんじゃないの?
(・∀・)300!!
301 :
デフォルトの名無しさん :2001/08/22(水) 23:04
>>294 確かにいいわ、これ。
ただ、その昔Delphi始めた頃は難しそうで避けてたけど。(藁
もしどうしても見付からない人は同じ著者、同じ技評の 「ゲーム&&オブジェクト指向プログラミング」を探して 読んでみることをお勧めする。C++&TurboPascalだが、著者が 語りたいことは同じ。
303 :
デフォルトの名無しさん :2001/08/23(木) 09:18
いつごろから無料になりますか? ダウンロードまだですか?
もうできるよ。ftp サイト探してみ。
>>304 ftp.borland.co.jp ?
昔の本もフリー化してほしい
307 :
デフォルトの名無しさん :2001/08/23(木) 15:05
>>283 KBを検索してみたが見つけられなかった
KB番号きぼん
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');
自作のソフトにアンドゥ機能を付けたいと思い、アンドゥメニューの ShortCutプロパティにCtrl+Zを割り当てました。 実行すると、メニューから選択した場合はきちんとアンドゥしてくれますが、 Ctrl+Zを押しても何の反応も無しです。 (ちなみにShortCutプロパティを他のキーに変更したら、そのキーでちゃんと アンドゥしてくれます) 原因は何でしょうか? Delphiを使って初めてのプログラムなので、見当違いな情報もあるかも しれませんがやっていることを書いておきます。 ・フォームのKeyPreviewはTrue ・アンドゥの処理はActionListに登録したものをメニューのAction プロパティで割り当てている ・フォームに貼りつけたのはImageコンポとStatusBarコンポのみ
メニューとアクションをリンクしたら、メニューのショートカットではなく アクションのショートカットが優先されるのでは?
あ、すみません。 (309の一行目)メニューの方でなくて、アンドゥアクションの ShortCutの方を設定しています。 変更したときにメニューのShortCutも自動的にアクションと同じものに なっているようですが、普通はそれで正しく動作するんですよね?
フォームにTImage、TStatusBar、TMenu、TActionListを置いて、 Action1.ActionUndoExecuteにCTRL+Zを割り振ったけど、 ちゃんと動いたぞ。
>>312 チェックしてくださって有難うございます。
俺もチェックしました・・・動きました。謎です。
とにかくもう少し悩むことにします。
314 :
デフォルトの名無しさん :2001/08/24(金) 10:00
[SoftwareTechnology 22] Delphiオブジェクト指向プログラミング 技術評論社 堀越一雄 著 \1980 ISBN4-7741-0427-2 C3055 コレ最高。俺はオブジェクト指向については コレ一冊で十分理解している。
315 :
Delギコ :2001/08/24(金) 10:57
________________
/
| 君の書籍紹介、とてもいい出来だと思うのだけれど・・・
\
 ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ カタカタ / ̄ ̄ ̄ ̄ ̄ ̄
( ・∀・) ∧ ∧ < ほ、ほんとですか!
( ⊃ ) (゚Д゚;) \______
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| BIBLO |\
 ̄ ======= \
________________
/
| でも、スーパー部長がなんて言うかな・・・
\
 ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ガイシュツデ ゼッパンダッテ イットルダロ!!. イッテヨシ
\
>>292 -302
∧ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ (゚H゚) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ・∀)^( )^ ∧ ∧ < ・・・
( )つ (゚Д゚;) \____________
 ̄ ̄ ̄ ̄  ̄ ̄ ̄ ( つ_つ__
 ̄ ̄ ̄ ̄ ̄日∇ ̄\| BIBLO |\
 ̄ ======= \
._________
| |
| とりあえずCMです .|
|_________|
∧,,∧ || 復刊ドットコム
⊂ミ.,,゚Д゚彡つ
http://www.fukkan.com/bbs.php3?act=topic&t_no=1823
Undoか。 //hiroproject.homeip.net/cats/disptn.asp?gn=ari_andoh
317 :
Delギコ :2001/08/24(金) 12:39
∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(,, ゚Д゚) <
>>316 エロじゃん!
=====U U====\________
| ギコ |
| まっしぐら |
318 :
dd :2001/08/24(金) 12:58
あん どぅ とろわ
319 :
デフォルトの名無しさん :2001/08/24(金) 13:29
>Delphiオブジェクト指向 絶版なら、俺が全文書をテキストファイル化しようか? 要望が多ければマジでやるかも。 絶版→再発行の意思なし→ 欲しがっている人が居ても、でない→ 著作権を放棄したも同然→ 犯罪ではない。
320 :
デフォルトの名無しさん :2001/08/24(金) 13:31
ヤッター!!
Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´∀`) < 絶版なら犯罪じゃないよね ( ) \___________ | | | (__)_) Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´∀`) < なんでやねん ( つ つ \___________ ヽ Y ノ (_(__)
322 :
Delギコ :2001/08/24(金) 13:41
ムウ・・・
∧ ∧____
/(;゚Д゚) ./\
/| ̄〇〇 ̄|\/
|______|/
∧ ∧____ソレ ハンザイ チャウ?
/(;゚Д゚) ./\
/| ̄∪∪ ̄|\/
|____|/
,,,,∪∪,,, ,,
そういうのはマジで著者に連絡とらないとダメ。
つうか、勝手な解釈するなって。
Delphi/Kylix市場がにぎやかになって
市場価値が高まれば
自然と世に出てくると思うが …
今は金に比して単に増刷の採算が合わないだけじゃないの?
それに、
>>319 自分でオブジェ指向の原稿書いてみたら?
323 :
デフォルトの名無しさん :2001/08/24(金) 13:47
自分が欲しいために1冊の絶版本を 印刷してもらうには、何円かかると思いますか。
325 :
デフォルトの名無しさん :2001/08/24(金) 14:08
>324 なんとなく 「誰が!? いつ!? 何時何分何秒!?」 ってのを思い出してしまった、
だれか図書館に寄贈してそれを回し読みしよう。 各都道府県1冊ずつ。
>>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みたいに右端に矢印が出てメニュー表示できるようにしたいんですけど、 どなたかご存知でしょうか?
Del6Pro買ってActionManagerと関連コンポを使用する。
332 :
デフォルトの名無しさん :2001/08/25(土) 13:20
とりあえずTPageScrollerでいいと思ったのですが、 プログラムの中でWidthを変更しても、設計時のWidthを覚えているらしくて 設計時Widthより小さくならないと矢印が表示されないんですよ・・・。 これはDelphiのバグ?私のコードが不正?
>>331 ActionToolBarの矢印ははみでた分を表示するためのものじゃない。
334 :
デフォルトの名無しさん :2001/08/25(土) 15:13
申し訳ないんですけれど、プログラミングしていて分かんない事が出てきたので 教えて頂けないでしょうか。開発には、Delphi6 Personalつかっています。 何で困っているかというと、StrPCopyとかの関数を使うと、 SysUtils.pasが見つからないと怒られてしまうのです。 実際ファイル検索かけてみるとSysUtils.pasはDelphiのフォルダにはないようです。 どうすればStrPCopyとかが使えるようになるんでしょうか。
ちゃんとuses SysUtils;してるか? SysUtils.dcuがフォルダに無いか? Personalには*.pasは無いよ。
MLでもあったkが、例外が起きたときにpersonalでは存在しないソースを見にいってしまうとかいうやつでは。
337 :
デフォルトの名無しさん :2001/08/25(土) 15:29
>>335 レスありがとう。
uses節にはSysUtilsがちゃんと加わっているようです。
SysUtils.dcuなら \Program Files\Borland\Delphi6\Lib\SysUtils.dcu
に入ってるみたいですけど。。。
わかんない設定とかはいじらないようにしているんで、
ほぼデフォルトのままなんですけど、
何がおかしいんでしょうね。
>>336 あぅ。つまりコーディングにミスが有ったってことですか。。。
アプリケーションを新規作成して、ボタンとエディットを配置して、 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;
>>399 変です。pTempにメモリが割り当てられてません。
ポインタを勉強したほうがよいと思います。
とりあえず、オプションでデバッグ版dcuを使用しないように設定すると、
ファイルがないといわれることはないのではないでしょうか。
どちらにせよエラーはでますが。
>>340 教えてくれてありがとう。
ポインタって宣言したら自動で使えるようになるわけじゃないんだね。。
勉強して出直してくる。(T^T)
strTemp := Edit1.Text;
New(pTemp);
StrPCopy(pTemp, strTemp);
Dispose(pTemp);
これでエラーは出なくなった。
>>399 ポインタがわからない打ちは
ヘルプの「文字列処理ルーチン(ヌルで終わる)」
にあるルーチンは使用しない方がいいと思われ
Personalのスレの方があってるような
343 :
デフォルトの名無しさん :2001/08/25(土) 16:17
>>330 俺もこの処理実装したいな。
どうやってやるんだろう?
345 :
デフォルトの名無しさん :2001/08/25(土) 20:07
346 :
デフォルトの名無しさん :2001/08/25(土) 20:15
347 :
デフォルトの名無しさん :2001/08/25(土) 20:15
コンパイルが通っただけですな。 New(pTemp); は、char1個分しか確保されません。 コピーする文字列分確保しておかないと。 実行時に、いつエラーがでてもおかしくないです。 つーかポインタ勉強しろよゴラァ!! それかstringのみにしとけ!!
350 :
名無しさん :2001/08/25(土) 22:43
>>330 >>343 シェブロン(シェーブロン?チェブロン?)って言うみたい。
TReBarBandInfoのfStyleにRBBS_USECHEVRONをつけてやると出るよ。
クリックされたときメッセージが来るので、自分でツールバーのボタンを
数えて非表示の部分だけをポップアップメニューに追加して表示する必要が
ある。はっきり言って面倒だよね。
しかも、IE5以上についてくるコモンコントロールDLLが必要。
だれかTCoolBarに実装してー。
(てっきりツールバーの機能かとおもっていたのに、レバーの機能だった。。。)
「レバー」 焼き肉か? 「リバー」 だ。 猫んところで「レバーのようなコントロールだからレバー」 ってやったのが誤りの根幹か?
352 :
350 :2001/08/25(土) 22:51
ちなみに、シェブロンが押されたときにやって来るメッセージは、 RBN_CHEVRONPUSHEDです。 どうも、Delphi6でも宣言されていないっぽい。 RBN_CHEVRONPUSHED = RBN_FIRST - 10; でオケ。
353 :
350 :2001/08/25(土) 22:54
>>351 ホントニ?
リバーだったのかー。
いままで、ずっとレバーレバー言っていたよ。
焼肉のレバーは好きだけど。
354 :
350 :2001/08/25(土) 22:59
>>353 それは「Re:」を「れ」って言うのと同じだな。
356 :
デフォルトの名無しさん :2001/08/26(日) 01:38
357 :
デフォルトの名無しさん :2001/08/26(日) 01:41
シェブロンって,アメリカでは至る所にあるガソリンスタンドの名前なんだけど 聞いたこと無い? 平沢進の曲名にもあるが,こちらはちとマイナー
358 :
Delギコ :2001/08/26(日) 02:36
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) < こんなん? ヽ/つ且~~ \___________ (__ _) procedure TForm1.BitBtn1Click(Sender: TObject); var My_PChar:PChar; i:Integer; begin GetMem(My_PChar,1000); StrPCopy(My_PChar,'ABCDEFG'); for i:=0 to 6 do begin ListBox1.Items.Add(My_PChar+i); end; FreeMem(My_PChar); end; 素直にString使えって。 ちなみにGetMemではこの場合最低いくつ確保すればいいの? 即答できる人いたらおせーて。
Length('ABCDEFG')+1か2G
360 :
デフォルトの名無しさん :2001/08/26(日) 02:40
禿同
>>358 たしかに String 使うのがいい
procedure TForm1.BitBtn1Click(Sender: TObject);
var
My_String: String;
i:Integer;
begin
My_String := 'ABCDEFG';
for i:=1 to 7 do
begin
ListBox1.Items.Add(Copy(My_String,i,MaxInt));
end;
end;
362 :
Delギコ :01/08/26 17:31
∧∧ / ̄
_(,,゚Д゚) <
>>359 サンク--ス
⊂,,__つつ. \_
プラス1は例の文字列サイズを確保した先頭バッファ?
>>361 多分元質問者はC++あがりなんだろうね。
>>362 NUL で終わる文字列ルーチンは、 NUL で終わるから
(文字数+1)文字分の容量が必要なのさ
>>362 プラス1は C の文字列ターミネーター確保のため。
365 :
Delギコ :01/08/26 18:16
∧∧l||l
/⌒ヽ) トホホ
〜(___)
''" ""''"" "''
思いっきり、Pascal文字列と
C文字列を間違ったよ。
天然だよ、天然
典型Delphi厨房にナチマッタ…
>>363 -364アリガト
366 :
厨房われざー :01/08/26 18:18
Professional版をMXで落としたんだけど尻がワカラン!!
>366 0120-444-444
てれほんしょっぴんぐぅ
370 :
デフォルトの名無しさん :01/08/26 22:18 ID:Abz7ycFk
>>366 実家の電話番号教えてくれたら電話で教えてあげるよ?
371 :
デフォルトの名無しさん :01/08/26 22:23 ID:MV3zKzJ.
AnsiStringってほんとにANSIで定められた規格なの?
>>371 ANSI規格なのではなく、ANSI文字を対象にしてるからだよ。
>>357 > 平沢進の曲名にもあるが,こちらはちとマイナー
まわるよシェブロン、ひゅーーーーーーーーーー
374 :
test :01/08/29 16:16 ID:rgk66mm2
DBGrid で 行番号を表示させる方法教えてください
元のDBにシリアル型で番号振っとく
データベースの行に行番号なんて何の意味があるんだ?
>>374 直接は無理っす。
RelationalDB自体が行の順番って概念を否定してるデータベース方式なんで。
つけたきゃ自分でそういう項目を用意するのは可能。
378 :
デフォルトの名無しさん :01/09/01 09:59 ID:f29jsh3A
finally の使い方だけど KEYが見つからなければ挿入という処理の場合 try for n=0 to High(datas) do begin if datas[n].key = nkey then exit; end n=Length(datas); SetLength(datas , n+1); datas[n].key:=key; finally datas[n].data:=data end; みたいに使っていいの? 使わないと、goto 使うか、データの書換えを2重に定義するかになって格好悪いんだけど?
379 :
デフォルトの名無しさん :01/09/01 10:30 ID:baJQonXA
Delphiだとforループを抜けた時のカウンタは不定のはずだから
>>378 のは
ちょいやばいかも。
380 :
Delギコ :01/09/01 20:59 ID:TgdqYMp.
>forループを抜けた時のカウンタは不定のはずだから ∧ ∧∩ (゚Д゚,,)ノ うそ〜ん。 | つ | ⊂)〜 そんな話聞いたことないYO _∪
381 :
デフォルトの名無しさん :01/09/01 21:16 ID:74THsOQE
コンパイルで警告出るし、ヘルプにも書いてあるよ↓ 85. for ループ脱出後のループ制御変数の値は不定です FOR-Loop variable '<Name>' may be undefined after loop ------------------------------------------------------- 説明 この警告は for ループの制御変数の値をループの後に使った場合に表示されます。for ループの制御変数の最終値を当てにしてもよいのは,goto 文か Exit 文でループを出た場合だけです。これはコンパイラが for ループに効率的なコードを生成できるようにするための制約事項です。
∧∧ / ̄
∩(,,゚Д゚) <
>>359 サンク--ス
⊂,,__つつ. \_
var
IndexOf: Integer
IndexOf := -1;
for n:=0 High(Datas) do
begin
if not (datas[n].key = nkey) then
begin
IndexOf := n;
break;
end;
end;
if IndexOf = -1 then
begin
n=Length(datas);
SetLength(datas , n+1);
datas[n].key:=key;
end else
begin
datas[n].data := data;
end;
なぜnを使いまわしているのかはわからんが。
383 :
Delギコ :01/09/01 21:23 ID:TgdqYMp.
∧∧ /まちがた。
∩(,,゚Д゚) <
>>381 サンク--ス
⊂,,__つつ. \ ほんとだったのね。
今まで普通につかってた機がする__
インデントも忘れたし・・・
var
IndexOf: Integer
IndexOf := -1;
for n:=0 High(Datas) do
begin
if not (datas[n].key = nkey) then
begin
IndexOf := n;
break;
end;
end;
if IndexOf = -1 then
begin
n=Length(datas);
SetLength(datas , n+1);
datas[n].key:=key;
end else
begin
datas[n].data := data;
end;
384 :
デフォルトの名無しさん :01/09/01 21:29 ID:pc/GW0EI
言語規定上は「不定」だけど実装上は For 文の 終値+1 の値が セットされていることが「多い」という話。 最適化により反対方向に進む場合も有るし,誘導変数経由で参照されるために 値が変わらないこともある。可能性という話ではね。
Delphi以外の実装なんてあるの?
borland.co.jp の newsgroup の面子は object 小島が ただの煽り・あらし・クレーマーだとなぜ気が付かない? 奴の言動に一貫性はないし、矛盾だらけだろ。 まあ、すでに奴を無視して話を進めている奴もいるが。 あ、GON も同類な、fj でも暴れてた
387 :
:01/09/02 02:30 ID:b.AvvIJc
TCustomEditをベースにコンポーネント作ってるのですけど、 上下のマージンを指定できず困っています。 なにか、良い方法はないでしょうか? それとも、EDITコントロールをベースにする以上無理なのでしょうか?
388 :
デフォルトの名無しさん :01/09/02 02:53 ID:yhjI958.
TPanel 上に BorderStyle を bsNone にした TEdit を貼り付ける。 TPanel は BebelInner = None BebelOuter = None Color = clWindow BorderStyle = bsSingleCaption = '' そうすれば外観上はTEditそのものだYO!
389 :
378 :01/09/02 10:12 ID:6hJ7KTEI
>>381 という事は
>>378 のコードは exitで抜けてるから違反していないのでは?
for がループ終了した場合は n:=Length(datas)で再設定してるし
390 :
デフォルトの名無しさん :01/09/02 10:31 ID:wcrDccQU
>>378 のは大丈夫かな。ただ、ちょっと変えて
try
for i := 0 to 20 do
if random(10) > 5 then exit;
i := 6;
finally;
ShowMessage(IntToStr(i));
end;
みたいなのを実行すると、forループを最適化して、値がおかしくなる。
だから俺はforの近くでは余りトリッキーなやつは避けてる。
あーでも、そんなに気にしなくてもいいのかな?
391 :
物申す :01/09/02 11:22 ID:yhjI958.
そもそも、制御変数に変更を加えたいなら while を使うべきではないだろうか。 for 文は、ループ回数が特定されている場合に利用するものであって、 そのような制約があるからこそ、while よりも高速に作動する。 そもそも、for の制御変数を変更しようなんて考えは CやBASICプログラマの悪い癖だとおもう。 Cの for と while はなにが違うのか、俺には分からん。
392 :
デフォルトの名無しさん :01/09/02 11:24 ID:yhjI958.
そのような利点があるからこそ、 for i:=0 to 100 step 2 なんて書き方が出来なくても良いのだ。 「for は初期値から終了値まで1づつ変化していくもの」 という認識だけですむから。下手に高機能なforを用いると たかがfor の条件ごときに解読の手間を費やさなければならない (CやJAVAのようにね)
ようは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 使った方がマシ?
>>396 exitしてもfinallyされるのは最初は???だけど
合理的な動作であるし言語ガイドにも明記されているので
積極的に使うべきかと。gotoは論外でしょう。
398 :
デフォルトの名無しさん :01/09/02 15:57 ID:psNHQDZo
クラスを作る勉強してるんだけど、 どうしてもエラーが出る。 誰か添削してくれ。 TFolder=class private Name:String; public function GetName:String; end; implementation function TFolder.GetName:String; begin Result:=Name; end; こいつを、メインで呼び出すとエラーが出る。 どうして?
399 :
デフォルトの名無しさん :01/09/02 16:10 ID:UqRjzi66
ちゃんと生成してる? var Folder: TFolder; AName: string; begin Folder := TFolder.create; AName := Folder.GetName; end;
400 :
398 :01/09/02 16:11 ID:psNHQDZo
あぁ、勝手に納得した。 createが必要だったらしい。 ということは、メンバー変数は、createして初めて使えるようになるということかな。 誰か解説してくれー
401 :
398 :01/09/02 16:13 ID:psNHQDZo
>>399 さん、サンキューです。
まさに今、その事に気がついたばかりです。
なるほどね〜
402 :
Delギコ :01/09/02 16:40 ID:oukomFDw
∧ ∧ / ̄
∩(,,゚Д゚) <
>>397 チョットマター
⊂,,__つつ. \_ (ねるとん)
んー、Exitでfinallyを通過させるのは
良くないと思うな。
可読性の面から積極的に使うものではないと。
上記のコードなら、キーのあるなしを判断する部分と
キーの挿入or代入を処理する部分は別々になるのだから
冗長にわかりやすく書くとこうじゃない?
var
IndexOf: Integer;
DataLen: Integer;
IndexOf := -1;
for n:=0 High(Datas) do
begin
if not (datas[n].key = nkey) then
begin
IndexOf := n;
break;
end;
end;
if IndexOf = -1 then
begin //キーガないなら挿入
DataLen:=Length(datas);
SetLength(datas , DataLen+1);
datas[DataLen].key:=key;
datas[DataLen].data := data;
end else
begin //キーがあったら代入
datas[IndexOf].data := data;
end;
forに使う変数のfor以外での使いまわしのご利用は計画的に
∧ ∧ / ̄
∩(,,゚Д゚) < Forにまつわる話はサンクス。
⊂,,__つつ. \_ Stepは使いたくなる場面もあるが、安易に使ってはいかんね。
関係ないけどcontinueは便利だよなあ。
403 :
デフォルトの名無しさん :01/09/02 16:41 ID:nrg.Hj5w
Folder.Free; で廃棄もちゃんとしろよ。 ちなみに Folder.Destroy; はよぶなよ。
404 :
デフォルトの名無しさん :01/09/02 16:43 ID:psNHQDZo
405 :
Delギコ :01/09/02 16:54 ID:oukomFDw
∧ ∧ / ̄
∩(,,゚Д゚) < こんなんどう?
⊂,,__つつ. \_
type
TForm1 = class(TForm)
//Formのマウスアップイベント
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
//自分で追加しろ
FBtnCounter: Integer;
procedure BtnClick(Sender: TObject);
public
end;
//イベントハンドラ
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
UserCreateButton: TButton;
begin
UserCreateButton := TButton.Create(Self);
UserCreateButton.Parent := Self;
UserCreateButton.BoundsRect :=
Rect(X, Y, X + UserCreateButton.Width, Y + UserCreateButton.Height);
UserCreateButton.OnClick := Self.BtnClick;
UserCreateButton.Name := 'MyButton'+IntToStr(FBtnCounter);
Inc(FBtnCounter);
end;
//自分で書いた手続き
procedure TForm1.BtnClick(Sender: TObject);
begin
Self.Caption :=
'あんたの押したボタンは' +
(Sender as TButton).Name +
'だよ';
end;
∧ ∧ /
∩(,,゚Д゚) <
>>404 生成したものは破棄しなきゃ
⊂,,__つつ. \メモリがどんどん減るのよ。
(上記の例はButtonのCreate時のOwnerを
Formに指定しているので自動破棄されるのでOKだけど。
UserCreateButton := TButton.Create(Self);
を
UserCreateButton := TButton.Create(nil);
こうしてしまうと基本的にはいけない。
FreeとDestroyの話は有名な"Delphiオブジェクト指向"本に
超明快な解説が載ってるんだけどなあ。手に入りにくいんだよな。
406 :
Delギコ :01/09/02 16:59 ID:oukomFDw
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〜''~(,,゚Д゚) < ぐはっ。またインデント忘れた。ゴメソ UU'UU \________
407 :
デフォルトの名無しさん :01/09/02 17:04 ID:nrg.Hj5w
>>402 >んー、Exitでfinallyを通過させるのは
>良くないと思うな。
>可読性の面から積極的に使うものではないと。
同感
ExitとかGotoとかはよっぽど処理の流れが分かり切っている場合には
シンプルになるしいいと思うが。
try〜は例外処理のための制御機構だから
このような使い方の場合は
>>402 の方がいいと思う。
どうしてもtry〜を使いたい
>>378 の場合は
Exitよりも例外を発生させた方が素直だと思う。
408 :
397 :01/09/02 17:50 ID:yCMII86.
>>402 >冗長にわかりやすく書くとこうじゃない?
個人的には行あたりの密度を下げる冗長性は可ですが
同一内容の処理を複数箇所にばら撒く冗長性は不可です。
>>407 >どうしてもtry〜を使いたい
>>378 の場合は
>Exitよりも例外を発生させた方が素直だと思う。
これはtry-finallyの用途を必要以上に限定してしまっていると思います。
上の例は単純すぎるのであまりありがたみがないけれど、
(例外に関係なく)必ず通過するパスを明示できるメリットは少なくないです。
このあたりの議論はCマガの千言万語「例外」でなされていてその中で
exitは内部では例外であり以下のように処理されているとみなせる。
という記述があったはずです。
procedure Foo;
begin
try
if xxx then
raise EExit; // exit
finally
... // 当然ここを通過する
end;
except // 暗黙のexcept部
on E: EExit do // 何もしない
end
この前提(と多少の慣れ)があればexitとfinallyの組み合わせはとても自然に思えます。
409 :
デフォルトの名無しさん :01/09/02 18:07 ID:SHIZw3Bc
>>400 つまり、クラスの宣言と実装部分↓↓は…
TFolder=class
private
Name:String;
public
function GetName:String;
end;
implementation
function TFolder.GetName:String;
begin
Result:=Name;
end;
↑↑クラスの設計図でしかないわけです。
「このクラスは、こんな構造をしていて、それぞれのメソッドは
こんな働きをするよ」という風に、クラスの構造や働きを”説明”
しているだけなの。
たとえば、車の設計図がいくらあっても、
車がなければ、車を利用する事はできないでしょ?それと同じ事で、クラスを使いたければ、クラス(車の設計図)だけでなく、
クラスのインスタンス(車そのもの)をも作る必要があるって事です。
410 :
409 :01/09/02 18:11 ID:SHIZw3Bc
では、なぜ var Folder:TFolder だけではクラスの実体が作成されず、わざわざクリエイトしてやる 必要があるのかといえば、今の段階ではこの恩恵はわからないかも しれません。 Delphiでは、クラス変数はかならずポインタとして機能します。 したがって、 var Folder:TFolder としただけでは、Folder は あくまでも「 TFolder を指し示すモノ(ポインタ)」でしかない。 当然一番最初は Folder は何も指していない(つまり Folder = nil ) だから、TFolder を作り、( TFolder.Create ) つくった クラスのある場所を、 Folder が指し示すようにしなければならない。 つまり、 Folder := TFolder.Create; てこと。
411 :
409 :01/09/02 18:12 ID:SHIZw3Bc
…と、俺だったらこう説明するんだけど、 ツッコミどころある?
412 :
400 :01/09/02 18:13 ID:psNHQDZo
1つわからないことがあるんだけど、 TFolder=class private Name:String; public function GetName:String; end; implementation function TFolder.GetName:String; begin Result:='c:\'; // ←こんな風にメンバー変数を使わない。 end; こうすると、createしなくても問題なく動くんだけど、 要するにcreateは、メンバー変数の初期化作業って考えて良い?
413 :
Delギコ :01/09/02 18:18 ID:oukomFDw
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜''~(,,゚Д゚) < 言語論だニャ
UU'UU \________
>>408 > 個人的には行あたりの密度を下げる冗長性は可ですが
ん?どういう事を言ってる?
> 同一内容の処理を複数箇所にばら撒く冗長性は不可です。
if IndexOf = -1 then
begin //キーガないなら挿入
DataLen:=Length(datas);
SetLength(datas , DataLen+1);
datas[DataLen].key:=key;
datas[DataLen].data := data; //★
end else
begin //キーがあったら代入
datas[IndexOf].data := data; //★
end;
★の所が重複している事をさしてる?
それとも一度条件判断したあとに再度IF..THENしていることを逝ってる?
キーの挿入か代入かを判断した後に
それに応じた処理をするというのは
可読性の高いコードを書く上で必須なんだけどなあ。
IndexOf := -1;
for n:=0 High(Datas) do
begin
if not (datas[n].key = nkey) then
begin
IndexOf := n;
break;
end;
end;
この部分が関数一まとめになってしまえるというのはいいかな。
これで"キーが重複しているか否か"という機能を示してるの。
今は"キーが重複しているかどうか"を判断して
重複しちたら>>代入
重複しちなかたら>>挿入
という処理だから
finally .. end
で共通部分を実行させてるけど
仕様が変更されて
"キーが重複しちえるかどうか"を判断して
重複しちたら>>処理をキャンセル
重複しちなかたら>>挿入
という処理に変わったら
try .. finally end のコードとIndexOfを使ったコード
どちらか楽か、どちらが(自分以外の)誰でも変更しやすいかを
判断したら、わかってもらえると思うのだが…
414 :
Delギコ :01/09/02 18:21 ID:oukomFDw
∧∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜''~(,,゚Д゚) < 間違った事覚えると危険という実例だ。
UU'UU \________
>>412 > こうすると、createしなくても問題なく動くんだけど、
動くけどやっちゃだめ。
それをやるように
クラスメソッドというものが用意されている。
> 要するにcreateは、メンバー変数の初期化作業って考えて良い?
そうじゃなくて
オブジェクトの実態(インスタンス作成)って事。
それと同時にメンバー変数が初期化される。
(メンバーの実態も生成されるから。)
415 :
400 :01/09/02 18:25 ID:psNHQDZo
>>414 親切にありがとう。
インスタンス作成の重要性を再確認しますです。
416 :
デフォルトの名無しさん :01/09/02 18:25 ID:SHIZw3Bc
>>datas どうでもよいけど data は datum の複数形だったような…
417 :
デフォルトの名無しさん :01/09/02 18:29 ID:SHIZw3Bc
_____ /_ | /. \ ̄ ̄ ̄ ̄| / / ― ― | | / - - | ||| (6 > | | | | ┏━┓| / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | | | | ┃─┃| < 正直、Create しなくても使えると初めて知った || | | | \ ┃ ┃/ \________ | || | |  ̄  ̄|
418 :
Delギコ :01/09/02 18:55 ID:oukomFDw
∧∧ / ̄
_(,,゚Д゚) <
>>417 こんなこともできたり...
⊂,,__つつ. \_
TEditを継承してTEditExに追加メソドつくて
TEぢtのインスタンスをTEditExに無理キャストして追加メソドを四部
何つう事が普通にできてマンセー(なのか?)
このバヤイTEヂtExにメンバーつくっちゃだめ。
TEditをTEぢtExに無理キャストした時点で転ぶんじゃなかたかな。(忘れた)
先のDelphiオブジェクト指向本には
どうやってメンバーとメソッドがコンパイルされて
バイナリになるのかを説明してあって
わかりやすいんだけどなあ。
あの本絶版ってマヂになんとかならん?
メソッドの処理バイナリはインスタンスごとに生成されるんじゃなくて
クラスに一つだけ生成される
メンバーのバイナリはインスタンスごとに生成されるんだって。
微妙に言葉まちがーてたら指摘きぼんぬ。
419 :
Delギコ :01/09/02 19:13 ID:oukomFDw
> このあたりの議論はCマガの千言万語「例外」でなされていてその中で
> exitは内部では例外であり以下のように処理されているとみなせる。
> という記述があったはずです。
>
> この前提(と多少の慣れ)があればexitとfinallyの組み合わせはとても自然に思えます。
∧∧ / ̄
〜''~(,,゚Д゚) <
>>397 これもあまり同意できんな
UU'UU \_
>>407 に同意。
言語仕様を隅々まで知らなければ
中身を読み間違ってしまうコードは
あまり好んで書くべきではなくない?
try..finally..endでExit時にfinallyも通過するってのは
氏ってるべきだと思うが
日常茶飯にざくざく使われているコードの保守は
やりたくねーぞ。
ちょっと微妙なのでいろんなヒトの意見は聞きたいネタです。
420 :
400 :01/09/02 19:15 ID:psNHQDZo
createするときに、クラスを定義してる場所にconstructorを付け加えます。 もしかしたら、すごいアホな質問かもしれないけれど、 クラスをcreateしたら、最後にfreeにするってのはわかるけれど、 destructorって何の為にあるんすか?
>>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;
>>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)推奨だな
ワリイinherited抜けてた。 destructor TFoo.Destroy; begin FList.Free; inherited; end;
C++は知ってるつもりでDel勉強中の身何だが。 C++と違って、変数がスコープから外れたら勝手にデストラクタを起動してくれたりしないよね? 自分でFree呼ばないとだめなんだよね? だとしたらあまりデストラクタの意味ないんじゃ。
確かにデストラクタの意味あんまりないですね。普通のメンバ関数と思っていいんじゃないのかな
426 :
デフォルトの名無しさん :01/09/02 20:24 ID:7AX4a1Vo
>C++と違って、変数がスコープから外れたら勝手にデストラクタを起動してくれたりしないよね? >自分でFree呼ばないとだめなんだよね? そりゃ、C++と違って実体は扱えなくて参照だけだからな。
427 :
デフォルトの名無しさん :01/09/02 20:26 ID:9j5Bw8Z2
TFoo = class (動的オブジェクト) の部分を TFoo = object (静的オブジェクト) にすれば、いちいち生成・破棄しなくてすむよ。 最近はほとんど使われないけど。
428 :
デフォルトの名無しさん :01/09/02 20:49 ID:c.lxxTMk
>>424 デストラクタは重要な意味を持っています。つまりデストラクタは
デストラクタ"全体"の実行が終わったときにインスタンスのメモリ領域を
自動的に解放する機能を持ちます。
この"全体"ってのが重要で、これのおかげで例えば親クラスのデストラクタを
初めに呼び出してから次に子クラス内での後始末をするような事も出来ます。
C++ ではデストラクタ自身はインスタンスのメモリ領域の解放機能を持たず
delete 演算子がメモリ領域の解放作業を行っていると思います。
また親クラスのデストラクタは子クラスのデストラクタの
実行が終わった直後に呼びだされると言語仕様で決まっており、
自分の好きなタイミングで親クラスのデストラクタを呼び出せなかったと思います。
(C++ のことあまり知らないので間違っていたらすみません)
仮にデストラクタを通常のメソッドとして以下のように実装しても
前述のことは実現出来ないと思います。
type
TObject = class
procedure Destroy; virtual;
end;
TTestObject = class
private
FStrings: TStringList;
public
constructor Create;
procedure Destroy; override;
end;
procedure TObject.Destroy;
begin
FreeInstance; // インスタンスのメモリ領域を開放します。
end;
constructor TTestObject.Create;
begin
inherited Create;
FStrings := TStringList.Create;
end;
procedure TTestObject.Destroy;
begin
inherited Destroy;
// ここ↑で親クラスの Destroy メソッドが呼び出されてインスタンスの
// メモリ領域が解放されたため、この時点以降でメンバ変数にアクセスすると
// 不正なメモリアドレスを参照となります。
FStrings.Free; // エラーとなる
end;
429 :
407 :01/09/02 21:15 ID:nrg.Hj5w
>>408 >このあたりの議論はCマガの千言万語「例外」でなされていてその中で
>exitは内部では例外であり以下のように処理されているとみなせる。
>という記述があったはずです。
ということでヘルプを調べてみると
goto文と違いAbort、Break、Continue、Exit、Halt、RunError等の
フロー制御手続きは「手続き」とされていて
すべてtry 節を離れると finally 節に入ると書かれている。
408のいうとおりこれらは例外の機構を使っているのかな。
だとするとexitとfinallyの組み合わせもいいと思うけど。。。。
>この前提(と多少の慣れ)があればexitとfinallyの組み合わせはとても自然に思えます。
多少の慣れというのは。。。ちょっと。この辺熟知している人がどれだけいるか。。。
ここまでくるとまぁ、人それぞれかな。。。
自分としてはやっぱ例外を生成するかな。
ちなみにgotoはtry〜の中で使うとコンパイラに怒られる。
勉強になったよ。。。
430 :
408 :01/09/02 23:35 ID:yCMII86.
>>413 >> 同一内容の処理を複数箇所にばら撒く冗長性は不可です。
もはやexit-finallyと無関係ですが...
413のコードを要約すると
if 見つからない then データ挿入 else データ変更;
となりますがデータ挿入は空データ挿入+データ変更に展開され
if 見つからない then begin 空データ挿入; データ代入; end else データ代入;
となり明らかに2箇所に記述されたデータ代入処理が冗長です。
# データベースのレコード・TListItemなどの場合、代入処理は複数行にわたります。
# 例外はTStrings.Addなどで、挿入・代入を一命令でできる為413のコードが最適となる場合があります。
よって
if 見つからない then 空データ挿入;
データ変更;
と書いたほうが無駄がなく見やすいです。実際のコードは以下のようになります。
function search: Integer; // 見つからなかったらLength(data)を返す
begin
for Result := 0 to Length(data)-1 do
if data[Result].key = nkey then exit;
Result := Length(data);
end;
var idx: Integer;
begin
idx := search;
if idx = Length(data) then
SetLength(data, idx+1); // 空項目追加
data[idx].data := ndata; // データを設定
end; // このコードを見やすくないといわれたら議論が終わってしまいます:-P
問題はforループを途中で抜けたかどうかで分岐する処理を綺麗に記述できないことのようですね。
431 :
408 :01/09/02 23:47 ID:yCMII86.
千言万語は調べたところ2001年3月号の「例外(2)」でした。 C++での説明だと記憶してましたが(よく考えたらfinally無いですね)、Pythonでした。 >言語仕様を隅々まで知らなければ >多少の慣れというのは。。。ちょっと。この辺熟知している人がどれだけいるか。。。 exit-finallyが重箱の隅的知識のように言われていますが、 リソース保護の観点から必須の知識です。 少なくとも言語ガイドの第2−7章(特に7章!!)は熟読すべきで しかもC++と違って十分読みこなせる量だと思います。 これ以上は新goto論争的になってきそうなのでやめておきます。
>これ以上は新goto論争的になってきそうなのでやめておきます。 だな。 勉強にナターヨ。
∧ ∧ /
>>430 (,,゚Д゚)< それなら読みやすい
|つ つ \
@ |
∪ ∪
># 例外はTStrings.Addなどで、挿入・代入を一命令でできる為413のコードが最適となる場合があります。
基本的にはどんな配列/リスト構造でも
Addなどは関数として構造化してしまえば分かりやすいから
function MyDataAdd(xxx);というようなのをすぐ作るようにしてるぞ
だからその構造化がすぐに出来るようなコードを書くようにしているわけだ。
>明らかに2箇所に記述されたデータ代入処理が冗長です。
データ挿入を空データ挿入+データ代入に解釈する方が変だと思うのだが
ま、ここまでくると人それぞれではないか?
>これ以上は新goto論争的になってきそうなのでやめておきます。
ぐはっ。折れも書かなきゃヨカタ。
D6が無償でダウンロードできるようになったのに、 Delphi談話室が閑散としてるのはなぜですか?
>>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関数使ってるが。
だが、フリーカーソルなエディタはやめてくれ!エディタの配色も好きな色使わせてくれ!!
>>435 TFileStreamを使うがよろし。
437 :
デフォルトの名無しさん :01/09/04 03:07 ID:HYOp.zqI
>エディタの配色も好きな色使わせてくれ 好きに帰られるでしょ?
>>437 配色どころかフォントや斜体・太字等も変えられるよね。
439 :
デフォルトの名無しさん :01/09/04 21:20 ID:rY2zOTg2
一太郎で育ったので、フリーカーソル大好きです。
エディタの配色変えられるといっても限られてるから、 細かく指定できないって言いたいんでしょ、435は。 白は目がつかれてイヤだから、微妙に薄い灰色にしたいとか。
>FileOpen/FileRead関数使ってるが。 なぜにわざわざそんな低レベルな方法で・・・。
正真正銘の初心者です。早速ですが質問があります。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
だから、静的オブジェクト使えよ!!!!!!!!
俺、いまだにBlockRead/BlockWrite使いまくってる。。 TurboPASCAL以来の癖が抜けない・・・
>>443 Key= #0; はどこにいれればいいのでしょうか?
>>444 静的オブジェクトが分かりません。勉強します。よろしければサンプルでも・・・。
447 :
デフォルトの名無しさん :01/09/06 02:01 ID:zoVld8hw
448 :
デフォルトの名無しさん :01/09/06 09:42 ID:fyvoW94A
>>444 オブジェクトの生成、破棄が面倒だと言っている奴へ。
静的オブジェクトの生成の仕方を教えてください。
450 :
デフォルトの名無しさん :01/09/06 10:26 ID:U6UjSx9Y
>>448 だーら,何番に対するコメントだよ?
誰も動的生成で面倒なぞといっていないようだけど?
451 :
デフォルトの名無しさん :01/09/06 22:09
C++のSTLのvectorとmapみたいなのが使いたいのですが Delphiでいうとどれになりますか?
>>451 ClassesとContnrsユニットの中から使えそうなのを探すことになると思われ
453 :
Delギコ :01/09/07 00:23
___ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
___( ゚Д゚)<
>>451 TListとかTCollectionあたりか?
__ /⊃三つ \_______
_〜′ / \
_ ∪ ∪ \ YOー ワカラン
◎ ̄ ̄ ̄ ̄◎
454 :
ななしヘタぐらま :01/09/09 02:23
>>435 ニフチーのFDELPHIにはフリーカーソル無効化ツールがあったのですが(D6対応は不明).
配色が標準色からしか選べないのは私も不満ですが,
ウィンドウズの前景色と背景色をつかうようにして
ウィンドウズの色設定のほうを色々変えています.
チョコレート色とか桃色とか何でもありです.
リアルうんこチョコレート味
次
>>450 わかったぞ!きっと「delphiの奇跡」を執筆した吉田弘一郎のことを言いたいのだろう。
あの本でいきなり*説明書も読まずに*動的生成をしないコードを書いて
動かない動かないって焦る、という描写が有ったもんな。
言語なんてものは原理的に「どんな造りもアリ」なんだから、
説明を読まずに他の言語からの類推で使い始めるってのは
言語に対する姿勢としては、単なるドキュの姿勢。
>>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
単体の呼び出しでは 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 が小さいって意味じゃない?
|| || ̄ ̄|| ̄ ̄ ̄||
|| || || /||
||..∧|| /|| //||
ジー ||..(:゜||//||// ||
|| |つ/ ||/ ||
|| |. || ||___||
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
/_________ヽ
|| 三 || ̄ ̄ ̄ ||
ガラッ! ||シネ!...三 || / ||
|| ∧∧Ξ|| // ||
||(゚Д゚ ) .||// ||
||ι ⊃||/ ||
|| | | ||___ ||
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
/_________ヽ
|| ̄ ̄ ̄ || ̄ ̄ ̄ ||
|| / || / ||
>>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まだバグ多し
たぶん英語のみならうまくいくのかな
>>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 本物だったとしても、ウィルスだったとしても、実行してはならない物。
了解しました。 本物だったとしても実行してはダメですね
てーか自腹で買わんヤツがEnt使う理由が思い当たらん(藁
483 :
デフォルトの名無しさん :01/09/21 22:41
画像ファイルをドラッグ&ドロップすると、その画像が 表示されるようなプログラム作りたいんですけど どんなコンポーネントを使うとよいのでしょうか? わけわかんないこと書いて鱈すみません
484 :
Delギコ :01/09/21 23:05
485 :
デフォルトの名無しさん :01/09/22 11:40
>>484 出張ありがとうございます
やってみます!
486 :
Delモナ :01/09/22 21:46
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | Delモナで対抗 \__ ____ ∨ ___ ∧_∧ ||\ \  ̄|  ̄| ( ´∀`) || | ̄ ̄||: | ┌( つ/ ̄||/  ̄ ̄/ |=| | ヽ |二二二」二二二二二二二二」  ̄]|__) | | | | / ̄\ / | / | ◎ ◎ [__」 [__」
487 :
Delギコ :01/09/22 22:00
Delモナ、イイカンジ ∧_∧ ☆ (*゚Д゚) / | ,, ,,,, (_,ノ ,,, , ,, ノ ,,
なんかレスついてた(^^;
>>460 Reset/RewriteはCreateFile/OpenFileだと思うけど・・
BlockRead/Writeとの置き換えって??
BlockRead/Writeするときは、自前でバッファリングするか
バッファなしを前提で速くなるようにアルゴリズム組むから
速度が遅いとかはあんまり困ってないね。まぁ、悪しき慣れだな。
いい加減なんとかしようと、なるべくTFileStreamを使うようには
してつけどねー
そういえばスレッドの中からTFileStreamって安全に使える?
BlockRead/WriteはAPI直呼びだから問題ないとは思うんだけど、
やっぱりVCLだからSyncronizeしないと駄目かな?
>>488 TFileSTreamもAPIをオブジェクトにラップしてるだけだから
スレッドセーフな気が。
>>482 タイケンバソはVCLのソースコードらしいけど、本当なの?
なければそんなの使えない。
まぁ、マニュアルの付いていない言語製品なぞ、
始めから使う気など無いけどな。
>タイケンバソは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 どうなれば良いと思いますか?
これって人によって好きずきだから,あまり勝手に変更してもらいたくないな。
500 :
Delギコ :01/09/24 03:43
∧∧ / ̄
@' ― (,,゚Д゚) <
>>497 あの部分は見ない振りして触らないのがよいのでは?
し― し-J \_今まで気にしたこともなかったニャ
関係ないんだけど
privateの前の所にイベントハンドら以外にも
自作のメソッド宣言や変数宣言を
すべてぶち込んでいるソースみた日には泣きました。
501 :
デフォルトの名無しさん :01/09/24 05:49
>>499 >>500 今までC++つかってて、Delタダなんで、昨日から使ってみたんですが。
ActionはActionListに追加、MenuItemはMenuに追加みたいな。
せめて、コレだけあればずいぶん綺麗になると思うんですけどね。
セパレータもS1とか言う名前で追加されて見通し悪すぎですし。
まだ、全然使い方分かってないんですけどね。
502 :
ななしヘタぐらま :01/09/24 08:19
>>497 確かに.私の場合,変数名を
アクションオブジェクトは"Acttion_〜",
メニューアイテムの場合は"mi〜"で統一し,
あとはソースを直接いじって並べ替えています.
でもできるだけいじらずにすむように,
メニューデザイナで項目を増やしたら
キャプションを決める前に変数名を書き換えてしまいます.
>>492 >>493 でフォローされているからあえて突っ込まない(w
うーん、やっぱりちょっとスレッドで使うには調べた方がよさそう
かな。たぶん、489さんの言ってるのと同じ感じはするので、大丈夫だと
は思うけど・・・
IDE を拡張して、最初の published の部分を折り畳んで見えなくするヤツとかないかな
>>501 あまり建設的な意見ではないようだ。煽りか?
オブジェクトに名前を付ける。ってのはプログラムから操作したい。ってことだけど
メニューセパレータを操作するってよくあることか?
目障りなら、名前を取ってしまえばよい。
Delphi のメニューエディタでの名前置き換えは VB/VC にはない面白い仕掛けが
してあるが。
TShellTreeViewなどのソースってどこにあるのでしょうか? Sourceフォルダにはないような・・・。
507 :
Delギコ :01/09/25 12:08
(`´`) │ │ ∧_l ∫ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (,,゚Д゚) ∬ < $(DELPHI)\Demos\ShellControls |∪ |つ=● \___________ 〜| ̄| ヒルメシダ U U
>>505 なんていうか、あんまりうまく説明できてないね。
とりあえず、全部散らばらせるんではなく、
管理クラスを作るなり名前空間を使うなりで種類ごとに
分けてくれるとずいぶん綺麗になると思うんですが
509 :
Delギコ :01/09/25 12:30
現状では、あのソースの部分はどうにもなりません。 Delphiが管理する所だからDelphiに任せて "人間は見ない&編集しない"のがよいと思われ もしかしたらソース整形AddInがあるかもだけど 聞いたことはないです。 オブジェクトツリーと同じような並びで 表示されると結構マンセーですね。  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧ ∧ マターリ (,,゚Д゚)∫ / つ旦O 〜(._[ ̄ ̄ ̄.]  ̄ ̄ ̄
VS.NETのIDEは自動生成された所は畳めるようになってるな すっきりするようだが開け閉めに余計なマウス操作が増えてかえってうざかった
>>510 それって使ったことないけど、畳むか畳まないかユーザが選択できれば便利だと
思うけどなぁ。
viのholdみたいにキーボードから折りたためたりできりゃいいんだがな。
そうか? 初心者だからって定義部を隠してもしょうがないような気もするし 定義部はIndex代わりで便利じゃないかと思うんだが? それとも最近の人はコードエクスプローラがあるから不要なのかな?
>>513 >定義部はIndex代わりで便利じゃないかと思うんだが?
そうそう、それよ。
全然関係ないけど。JAVAはそういう「全体を見渡す」ことが出来ないから、好きになれない。
>>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
519 :
Delギコ :01/09/27 20:38
一つ質問。 Delphiでワイルドカードマッチを高速に行うルーチンってない? 一々TMask作ると凄く効率悪いんだけど。 自分で作れば良いんだが、ヘタレ故…
>>519 TDatabaseを使って解決できました。
ありがとうございました。 m(__)m ペコリ
O'sEditor が Delphi で作られているということを知りました。 あれと同じようなものを作りたいのでやり方を教えてください。
523 :
ボクの嫌いなヒトたち :01/09/29 20:10
>>522 オンラインソフトの作者の掲示板で、あまりにも具体的すぎるプログラミング手法(ソース)を教えろという方(^^;
アナタの実現したい事のソースを書いたら、どっちが作者か解るめぇ?ちっとは、自分で勉強しないとな。
「自作ソフトの???に実装したいのですが...」
なんてくだりは1度や2度ならともかく、何度も何度も書き込んであると見てる方がドツいてやりたくなります、いやマジで。
ひとしきり質問攻めが済んで、自分で理解できるレベルにまで解説してもらっといて
「これで拙作???に???の機能が付けられます、ありがとうございました」
...も同罪。後ろ足で砂かけて去って行くんだね、キミは。
#売名行為にしか見えないもの。
#そういう行為は自分のHPでやってくれ!!
>>523 氏ね。
O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。
>>524 氏ね。
>>524 がうんこで作られているということを知りました。
あれと同じようなうんこになりたいのでうんこ
>>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 で作られているということを知りました。 あれと同じようなものを作りたいのでやり方を教えてください。
>>527 も氏ね。
O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。
530 :
デフォルトの名無しさん :01/09/29 22:36
>>529 あなたは、パーソナル版をお使いのようですね
エンタープライズ版でしか作成できないので、購入してください
531 :
デフォルトの名無しさん :01/09/29 22:40
Ruby >>>>>>>>>>>>>>>>>>>>>>>>> Delphi = 糞
>>530 氏ね。俺はプロのプログラマーだ。エンタープライズ使っている。
O'sEditor が Delphi で作られているということを知りました。
あれと同じようなものを作りたいのでやり方を教えてください。
>あれと同じようなものを作りたいのでやり方を教えてください マジレスします。 勉強しましょう。 どんな勉強しなければいけないかは、私はアナタの友達じゃないのでアナタの 事はわかりません。お友達かセンセイに聞いてみなさい。
534 :
デフォルトの名無しさん :01/09/29 23:04
>あれと同じようなものを作りたい 誰も作ったことの無いようなものを作ってやろうという方が 楽しいと思うけどね
俺の質問に答えろ。 お前らカスプログラマが偉そうに諭すな。 どうせ分からないんだろ? O'sEditor が Delphi で作られているということを知りました。 あれと同じようなものを作りたいのでやり方を教えてください。 早く教えてください。
536 :
デフォルトの名無しさん :01/09/29 23:37
537 :
デフォルトの名無しさん :01/09/29 23:39
>535 ここにはカスぷろぐらましかいないよ。
>俺の質問に答えろ。 わかりました。 >お前らカスプログラマが偉そうに諭すな。 偉そうにはしていません。 >どうせ分からないんだろ はい。 >O'sEditor が Delphi で作られているということを知りました。 違います。 >あれと同じようなものを作りたいのでやり方を教えてください。 私は知りません。
539 :
デフォルトの名無しさん :01/09/30 00:03
るby >>>> でlpひ
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
厨房が一人か二人、紛れ込んでいるようだ。 放置きぼん。
// a*b/2^32 function Int32x32SHR32(X, Y: Integer): Integer; register; asm IMUL Y MOV EAX,EDX end;
function Int32x32SHR16(X, Y: Integer): Integer; {X*Y/2^16} asm MOV EAX,X {register呼び出し規約の場合はXはEAXなのでホントは不要} IMUL Y SHRD EAX,EDX,16 end;
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;
function Int32x32Div(X, Y, Z: Integer): Integer; asm // MOV EAX,X {register呼び出し規約の場合はXはEAXなのでホントは不要} IMUL Y IDIV Z end;
>>547 int64 を返す関数にしておけば,sum に代入するオーバーヘッドを削除できるぞ
Win32API
>>547 Int32x32To64
>>548 MulDiv
その他
Int64ShrlMod32とかいくつかこの手のAPIすでにあるね。
551 :
デフォルトの名無しさん :01/09/30 19:11
Turbo Pascalのころはつかえたinline指令が 今は無視されてるのが痛いな。 これぐらいの小さなコードなら埋め込みたいね。
Object Pascal 言語ガイド - アセンブラ手続きと関数 を読めば inline が常に指定されていることがわかるだろ
>>553 Object Pascal 言語ガイド - asm文
>予約語 inline と assembler 指令は,下位互換性のためにのみ残されています。コンパイラはこれらを無視します。
Turbo Pascalのinline指令で書かれたprocedureは、 C++のinlineやMicrosoftのCのintrinsic同様に 使う場所でcallではなく直接コード自体が埋め込まれる物だったんだよ。 Delphiにはそれがない。 アセンブラ手続きと関数 を見てもinline相当には全く見えないが。
>まわし殿 上のレスがレスだけに、最初コピペ嵐に見えた… 鬱打氏脳…
>>556 厨房除けの意味でコピペしたので まあ荒らしと同じでしたね
完全にまわしてもよかったんだけど、こっちの荒らし度マシになってしまうし
まあ4つくらい書いとけば誰かコメントくれるだろうと思ったので
>>594 この関数をアセンブラにしたのは内部でCFがたったらクリッピング
するような処理を追加したかったからかも・・・・理由忘れた
>>552 inline でアセンブラ関数を定義すると
結局レジスタ割り付けを制限するからレジスタの少ないx86では有利にならないかも
関数呼び出しのオーバーヘッドは演算命令と並列処理されるから無視出来るだろうし
>>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
もう少し落ち着いて離せ
つまり、こういうコンポーネント書いたんだけど TEventBookmark = class(TComponent) private FOnMarkEvent: TNotifyEvent; published property OnMarkEvent:TNotifyEvent read FOnMarkEvent write FOnMarkEvent; end; ホントに実装部何もないコンポなんだけど、ブックマーク代わりに案外便利 これだけだと 複数フォームに貼り付けたらどれがどれやら判らなくなるから 設計時にイベント名を表示させたいって事
566 :
デフォルトの名無しさん :01/10/05 11:00
データモジュールに貼り付ければNameプロパティが表示されるけど そういうのとは違うのか・・・
スマソ・・・普通のフォームでも表示できるから全然違ったね
568 :
Delギコ :01/10/05 11:24
・・・ TNotifyEvent型のブックマークなの? イベントそのものに処理を書いている時点で 内部のコードが、よろしくないと思うんだけど… どうしてもやりたいなら 設計時だけTLabelを内部で生成して Self.Top/Self.Leftの近所に 貼り付けたらどうかな。 Label.CaptionにTNotifyEventに関連づいた メソッド名を取得する方法は サパリわからんけどね。 オブジェクトインスペクタで見るだけで いいと思うんだけどなあ。  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧ ∧ マターリ (,,゚Д゚)∫ / つ旦O 〜(._[ ̄ ̄ ̄.]  ̄ ̄ ̄
Delギコさんありがと イベント名の取得はこれで成功しました procedure TEventBookmark.SetOnMarkEvent(const Value: TNotifyEvent); begin FOnMarkEvent := Value; with TMethod(Value) do EventName:=TObject(Data).MethodName(Code); end; まだコンパイルされてない設計時でもこれで取得出来るのが不思議でしたが しょうがないからNameプロパティに代入しようかな そうしたらヒントで区別はつくけど
570 :
Delギコ :01/10/05 11:53
> with TMethod(Value) do EventName:=TObject(Data).MethodName(Code); ナイス >まだコンパイルされてない設計時でもこれで 実は設計時にもコンパイルされたものを扱っているそうです。  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧ ∧ (,,゚Д゚)∫ / つ旦O 〜(._[ ̄ ̄ ̄.]  ̄ ̄ ̄
でも 組み込んだコンポーネントはDLLになってるからそうだと判るけど イベントをクリックした段階ではフォームのメソッドとしてコードが 挿入されるわけで、これってまだコンパイルされてないでしょ? たぶんポインタには仮の値が入ってるんじゃないかな?
残念 Name プロパティを イベントプロパティのSetメソッドで書き換えると Nameは書き換わるけど、肝心のイベントの登録がされなくなったよ
たまにいる「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 どうもです
そうですね。やっぱ配列使うしかないんですね。
>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 を間違える人は多い。
はい、もちろん一万件以内です。 DelphiでDBというと、なぜか専用DBMSの話が出てしまうし、書籍のほとんど全てがそれだというのが疑問なのです。 ネットワークで使えるPerl掲示板程度の簡易ロック付きCSVのDB用コンポとか無いのでしょうか?
固定長テキストじゃ駄目?
>>594 固定長だと、フィールド長の設計とかが必要になってしまうので、できれば、フィールド属性も文字列決め打ちのイージーなものが欲しいです。
XMLとか
>>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!!
ウザいって書く奴が一番ウザい これ定説
ま、俺の存在価値は第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; 最初と最後の代入が格好悪いんだけど、綺麗に書くには? インラインでメソッド書く時のメンバは どのポインタから参照すればいいの?
>>598 BDE使うと、各端末にBDEをインストールする必要がありますよね?
それに、Personal版は、BDEは、使えるのでしたっけ?
>605 ご発言の通りですよ では MyBase をお使いになってはどうですか?
607 :
移動しませう :01/10/08 22:00
165 名前:下手人 投稿日:01/10/08 21:58 ファイルアクセスはAssignFileとFileStreamどっちがマシですかね? どっちにしろシーケンシャルなんだけど 速度最優先ならWin32API直叩きがいいんじゃない。 ReadFileかメモリマップファイル。
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も使える)じゃないのかな?
>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も統一するって事で
>>618 XDOMとかいうやつ
>>619 煽りがいなくなれば中身のある上がり方だからいいんじゃねーの
ちょっと前は6つも7つもあったんだから、しばらくしたら自然に減るよ
Techスレが沈んでるのは寂しいが。
Delギコが来る前まではage控えめだったんだが・・・
>>622 サンクス。いやMLには参加してないもんで。確かDelマガでも特集してたやつだね。
今時ですから SQL が貧弱でも通らないと やっぱりダメでしょ MyBase は Pro以上添付だけど 実行ファイルに含まれる=DLL類不要だから 作ったアプリ配布するにはそんなに苦労しないんじゃないの?
上記の理由から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 を解放する。
あれ、開放しないの?勘違いしてた。でもHook->Unhook->Hookってやると Dll内の変数、その都度初期化されるよね。何でだ?
639 :
デフォルトの名無しさん :01/10/13 21:26
>>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 サーバーアプリケーションのことですね。
こちらもありました。
ありがとう。
Web アプリケーションデバッガの使い方全然わからないです。 こまったな。
653 :
デフォルトの名無しさん :01/10/15 11:50
>Delphiで使える Lex/Yacc Lex/Yaccの記述はそのままで、吐き出すコードがDelphiなのかなぁ。
Lexの方はコールバックされる関数なのか?ならLexはDelか?
>>649 たぶん 上のリンクの使う時は \binにある .COD が .L .y と同じ
ディレクトリにないと動かない奴かもしれない
Lex/Yaccコード見たけど、あんまり簡単じゃないね。 定義の難しいコードジェネレータだねぇ。
657 :
デフォルトの名無しさん :01/10/16 18:30
PNGを表示せる方法を教えて
660 :
デフォルトの名無しさん :01/10/17 11:39
DWORD は昔は integer でした 今は符号無しになっています ですから -1 を $ffffffff と書くか DWORD(-1) と書替えればOK
662 :
Delフサギコ :01/10/17 16:29
∧,,∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < しつもーそ U ミ \____________ ミ ミ ノ∪∪ TButtonやTMainMenuのコンポーネントアイコンリソースを 見たいのですが、 それらのdcrファイルはどこにありますか? 確か、dcrファイル形式じゃなかったと思われなのですが。
664 :
デフォルトの名無しさん :01/10/17 18:20
>>662 メニューの方がわからんのだけど
ボタンは Delphi6\Lib\Buttons.res ではなかろうか
Buttons.res は TBitBtn のリソースです.
666 :
Delフサギコ :01/10/17 18:53
_________
∧,,∧ /
ミ;゚Д゚彡< bplファイルの中身確認できません。
ミつ つ \
〜ミ ミ.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
U U
>>664-665 、情報サンクス
Buttons.resの中身はBitBtnのはいとかいいえのマークでした
>>661 DWORD(-1)でいけました。ありがとうございます。
重いどころではない
ADSLなのに10KB/secを切ってしまった 遅すぎ
終わった!!と思ったら、インストールにCDキーが必要ヽ(`Д´)ノ !! 帰ってからか・・・
674 :
デフォルトの名無しさん :01/10/18 23:07
>>673 CD キーは,登録済みなら「使用許諾コードの取得」ツールを起動すると
表示される。ってダイアログに書いてあるのに・・・・
>>674 インストール自体は試してなかったのよ・・・
676 :
Delphiマガジンのなめた記事(怒# :01/10/19 10:29
そんなことより聞いてくれよ、
>>1 よ。
先月号から気になってたのだがDelphiマガジンの記事
「理系専門家のためのグラフィック入門」
なめんじゃぇ〜ぞ!ゴノレア!
これ見てむかついた人は多いと思われ。
677 :
デフォルトの名無しさん :01/10/19 10:33
StringGridでフォーカスをほかのイベントからあわせるにはどうしたら良いでしょうか? たとえばButton1を押したらGridの2列目を選択するようにしたいんです。 Gridは横一列全選択にしてます。
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 関数ポインタ使えます。当然配列にも出来ます。
>>683 えーっとたしかアットマークがつくヤツですよね?
ありがとうございます。調べてみます。
こんなふうな定義 var kansuu:array[0..2] of function:Integer=(kansu1,kansu2,kansu3); ただし、関数内関数はダメ それからメソッドはまた別の書き方ね
>>685 すみません。IDEに叱られました。
この方法はvarで宣言するとき引数が必要ですか?
kannsu1(i:integer):integer;
である場合です。
必要ですよん。引数の名前は適当でいいけど。
>それからメソッドはまた別の書き方ね そそ、「〜 of Object」が必要。
いろいろやってみましたが、 定数式が必要ですとか、 変数が必要ですとか、 いろいろ叱られてうまくいきません。 もう少し勉強してきます。
初歩的な質問ですみません・・・ グローバル変数で確保した St: TStrings; に、 RichEdit1: RichEdit.Lines; の内容をコピーしたいんですが、 St := RichEdit1.Lines; ってやるとうまくいかないんです。 ヘルプを見ると、文字列リストのコピーは TStrings.Assign(Source); ってやった方がいいって書いてあったので、 St.Assign(RichEdit.Lines); ってやってみたんですが何故かエラー・・・ どうしたらいいんでしょう?(泣)
誤 RichEdit1: RichEdit.Lines; 正 RichEdit1: TRichEdit;
St := TStringList.Create とかやってます?
>>692 試しに入れてみたんですが動きませんです・・・
でも何故か、新しいプロジェクトでやってみたら動きました(泣)
う〜〜ん・・
#回答ありがとうございます。
勉強してきました。 どうやら、関数配列にprivate部で宣言した関数を代入できないようです。 そのために叱られ続けたんだと思います。 勉強させてもらい、ありがとうございました。
>>695 type
Tkansuu=function:integer of object;
..
..
private
kansuu:array[0..2] of Tkansuu;
funcution kansu1:integer;
..
って感じでコンパイル通りました!お世話になりました。
追記です。しっかり動作している上に、ファイルサイズが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)のハッシュクラスとか。
TStringListって線形探索かなとおもって嫌だったんだけどたけど THashedStringListつかえば速そう。 ありがとうみんな
717 :
デフォルトの名無しさん :01/10/23 01:27
長い文字列とか動的配列のメモリ管理ってどうなっているのですか?
内部的に参照カウンタで管理されてるので 確保・開放はすべて自動的に行われてる。 なので通常は気にする必要はない。 詳細は言語ガイド参照。
>>714 ハッシュを使いたいというようなレベルであればC程度は読めるようにして
おいた方がいいと思うよ。
>>714 Delphi アルゴリズムという本があるよ。
>714 VCL内をHashで検索。
>>719 激しく同意。世の中にはすでに作られたCのプログラムが山ほどある。
その資産を生かさないのはもったいなさ過ぎるものな。
レス書き終わった瞬間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接続を切断するには どうしたらいいのでしょうか? そもそも、繋ぎっぱなしにするのがよくないのでしょうか? みなさんお教えください。
補足: 環境はDelphi6PRO+IIS5(Win2000)です。
>>725 えーと、IBDatabase にタイムアウト時間を指定するプロパティがありますが、
それではダメ?
レスありがとうございます。 IdleTimerのことですか? 試してみたけどだめでした。 ISAPI、CGI、普通(?)のフォーム などのタイプによって動きが違うのでしょうか?
だめなら自分でアイドル時間を計測して切れば?
>>729 「自分で計測する」&「自分で切る」
ということですか?
具体的にはどうやったらいいのでしょうか?
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
任意のディレクトリのファイル&ディレクトリ一覧を 取得するにはどうすればよいですか?
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; この方法が速いだろう
747 :
デフォルトの名無しさん :01/11/01 09:26
サブクラス化コンポ使うと出る [警告] シンボル 'MakeObjectInstance' を使用することは推奨されていません って代わりは何?
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;
(以下略)
----------------
という感じです.
>>752 何度か読み返して、やっと意味が判りました・・・・
なるほど、それでやってみます
754 :
ななしヘタぐらま ◆B18Bks.Y :01/11/04 18:13
>>753 ごめんなさい.具体的にどういう処理をやっているか,
説明すればよかったですね.
その他の皆様のために今更ながら説明をば.
長文ですいませんが.
---------------------
Delphiでバージョン違いへの対応を条件定義で行う場合に
プログラマが欲しい情報っていうのは
『バージョンなになにかどうか』ではなくて
『バージョンなになに以後か』だったりするわけです.
もし『バージョンなになに以降か』という条件が定義されていれば
ソースファイルは次のようにシンプルになるでしょう.
{$IFDEF バージョンなになに以降}
書きたいコード
{$ENDIF}
そこでその『バージョンなになに以降か』という条件を
自分で定義してしまうのです.
これは意外と簡単で
たとえばDelphi2を示す条件が定義されていれば
Delphi1以降,Delphi2以降,というのを定義するだけです.
これをコンパイラのバージョンを示す全ての条件に対して行えばOK.
ただこれを全てのソースファイルの先頭に書いていたのでは
書くのがめんどくさい,邪魔クサイ上,
さらに新しいバージョンが出るたびに全てのソースを直さなければならない.
最悪なのは,打ち込みミスがあればタチの悪いバグの元になること.
しかしありがたいことにデルファイでは
CやC++ではおなじみのインクルードファイルを使うことができます.
#include <stdio.h>
みたいなアレですが,上の処理をインクルードファイルにして
個々のソースファイルでこれをとりこむようにします.
これによってソースファイルは見た目スッキリとなります.
また新しいバージョンが出ても
インクルードファイルは変更するほかは
仕様が変わっていなければソースファイルの変更は不要となります.
757 :
デフォルトの名無しさん :01/11/14 14:01
こんにちは、 既成コンポーネントを利用する時に、それに関連したオブジェクト(TObject継承)への参照を持たせたい時 一般的に、どう解決するのが一番良いのでしょう? 1)TObjectでなく無理やりTComponet継承に変更 コンポ.InsertComponent で持たせ コンポ.FindComponent で参照する 2)それだけの為に 既成コンポーネントを継承して、登録 ・・・でも、管理の手間がメンドクサイから嫌だな 3)コンポーネントとオブジェクトのペアのテーブルを作り コンポーネントのインスタンスアドレスから逆引きする ・・・1、2)よりはマシだけど・・・
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < @もなかなかよさそうな気がします。 ,;゙ ミ \_____________ ミ. ミ ドウカシラ /゛゛゛゛
InsertComponent が InsertObjectなら躊躇が少ないんだけど なんか無駄なような感じ 勿体無いおばけが出そうな雰囲気というか・・・・ 2つのオブジェクトをペアで登録して相互に高速検索出来る 仕掛けがあれば最高なんだけどね
>>757 TMyObject型にFComponentを含め、TMyObject型の全オブジェクトはTListで管理する。
FComponentから FObject を探す時は、リストから検索すればいい。
あるいは Tag を使うか。
それと、InsertComponentだと参照にはならないような・・・。
761 :
デフォルトの名無しさん :01/11/21 07:36
Delスレってキャラ物ばっかでキモイ
>>762 もめるだけしか能のないjavaスレよりまし。
「まし」ってことはお前もやっぱイヤなんだろ(藁
つーか固定少ないよね、ここ 偉そうな奴は多いくせに
766 :
デフォルトの名無しさん :01/11/21 16:29
リストヴューのチェックボックスを反転したときのイベントって取得できる?
Delって、コンポをちょっと派生するか、ネットで拾うか、位で対処できるから、
Del特有の技術って要らないんだよね。
だからスレに入り浸りの人が居ない
>>765
768 :
デフォルトの名無しさん :01/11/21 20:55
Delphi6 Personal版を使っています。 フォームにコンボボックスを配置して、StyleにCssimpleを選択しました。 コンボボックスのサイズを、メモ帳のテキスト領域のようにサイズを フォームにぴっちりと合わせたのですが、実行してみると、 画面の下部の方に鉛筆の2本文くらいの太さの灰色の部分が表示されてしまいます。 どうすれば無駄な領域が表示されずにぴっちりとフォームに収められるのでしょうか?
いや、Delphiに限らず"この板で"ね
言葉足らずでした
あんまDelphiスレが盛り上らないのは正にそれ(
>>767 )かも
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;
レスありがとうございます!
フォームとコンボボックスのサイズをItemHeightの整数倍にし、
>>773 のコードを、組み込んでみました結果、うまく行きました!!
(Delphiのプログラム経験が無いので間違って組み込んでいるかもしれませんが、
とりあえずコンパイラエラーが起こらないようにしました)
>>770-773 は神!
773 のコードが入れば、高さ調整は起きないよ。 紙というか... これが仕事だから。
>これが仕事だから ゼニくれ(w
ゼニクレイジー
スリーセブンですね。  ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ∧,,∧ マターリ ミ,,゚Д゚彡∬ 〃 つ旦O 〜ミ,,,n,,n[ ̄ ̄ ̄.]  ̄ ̄ ̄
779 :
デフォルトの名無しさん :01/11/23 03:58
質問です。 c++でのdeclspecみたいのつかってdelphiでクラスをdllにエクスポートは どうすればいいのでしょうか。 サンプルor参考ページor参考文献なんでもいいので教えてください。 もしかして、dllでクラスってあまり使わないものなのでしょうか・・
パッケージを使うのではだめ? パッケージならめんどくさいことを考える必要が無くなる。
781 :
デフォルトの名無しさん :01/11/23 04:42
実数を小数点第2位まで表示したいのですが、 3位を四捨五入されてしまいます。 四捨五入されないようにするには、どのようにすればいいのでしょうか?
783 :
デフォルトの名無しさん :01/11/23 07:53
>782 違います。 2位以下を四捨五入するのではなく、 2位以下を切り捨てて表示したいんです。 どなたか、お願いします。
>>783 第2位まで表示したいのか、第2位以下を切り捨てたいのかどっちやねん
ですけど、前者だとして、100倍して小数点以下を切り捨てて100倍する
ってのはどうかな?
>100倍して小数点以下を切り捨てて100倍する 100倍して小数点以下を切り捨てて100で割る 鬱打詩嚢
10000!
787 :
デフォルトの名無しさん :01/11/25 01:54
タダになったからdelphi始めたクチなんだけどさぁ、 デルファイマガジンのHPって、前から…あのー…なんちゅーか… そのー… あんな感じなの?
788 :
ボーランドマンセー :01/11/25 02:05
delphi6のプロフェッショナルを 買おうかどうか迷ってるんだけど 無料のパーソナル版で充分かな。 ちなみに初心者 買っておいて損はないですかね
初心者にはつらいってゆーかさー…。なんちゅーの? えーと…。 「殺風景」ってゆーかさー…。ちょっとねー…。 個人の素人のサイトじゃないんだからさー。 そりゃ綺麗に着飾ればいいってもんじゃないとは思うが…。
まぁデザイナー雇うぐらいなら濃い情報と濃い内容と安い値段という方向性らしいですから。 でも個人的にはダレ気味なんで、Oh!Xぐらいの装丁・価格・ペースの方が楽しい気も。
わかったよ WEBサイトと雑誌の表紙を女子高生シリーズに戻せばいいんだろ 後でまた文句言うなよ
>>792 マジで勘弁してください。
どうせなら秋山莉奈にしてください。
石絵未季でも可。
時代は中学生! 中村タンが地元の女史中学生達に手取り足取りDelphiを教える企画がいい。
>>792 男物の大きめカッターシャツと赤ブルマーで一つお願いします。
796 :
デフォルトの名無しさん :01/11/25 23:08
>>792 「具にもつかないオバハンの乳首に★、股間をリンゴで隠してる写真」で
一つお願いします。
www.vector.co.jp/soft/win95/prog/se198613.html ↑ これって、どんな人が買って、どんな用途で使うのか教えてください。
800 :
デフォルトの名無しさん :01/11/27 01:13
>>799 そういうところは直リンクしろよ・・・面倒だなぁ・・・・・
>799 それはろくに設計もせずにアプリを開発して 後から仕様書をひねりだす必要のあるドキュソ開発者の為のツール。 JavaDoc非互換、Excel形式って使い物になるのか疑問。 time2helpかC++Builderならdoxygenにしとけ。
>>801 そんな感じだよね。うーむ…。26000円…。
>>801 オイオイそんなことゆうなよ
ドキュメント生成ツールは便利だぞ。javadocを出すまでもなく。
これは試用不可ってのが難だが。
仕事で仕様書を書く必要があるなら 26k円でドキュメント生成ソフトが使えるなら 超お安いと思うぞ !DOCはビックリドックと呼べばいいのかな。. . ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ . ∧,,∧ ミ ゚Д゚ ミ (ミ ミ) 〜ミ ミ ∪∪
C/C++にはフリーで使えるdoxygenがあるのにー、シクシク。
806 :
寒いのでとりあえずage :01/12/06 02:04
マジで寒いね…。DELPHI人口少ないのかしらん? って、googleキャッシュでも「少ないのか?」って いつも拾うのも哀しい…。 前に、「実行時パッケージを使って構築」にチェック入れると サイズが小さくなることについて質問したんだけど、まだよー分かってないので、 引き続き情報ください。おねがひ。
>>806 何がどうわからんのか,説明してください。
Delphi でも VC でも VB でも共有ライブラリの基本は,
単独プログラムだと
(ユーザーのコード)+(ユーザーコードが使うライブラリ).exe
となる。
これを
(ユーザーのコード).exe
と
(ユーザーコードが使うライブラリ).dll/.bpl
の二本立てにすれば,.exe の大きさが小さくなる(ことが期待できる)のは納得してもらえるだろう。
単独プログラムの場合には,リンクする必要がないライブラリを見つけることができる。
それに対して共有ライブラリの場合には .exe が使う機能を列挙することができないので,
最小公分母的,ライブラリすべてをリンクして用意しておかねばならない。
だから,共有ライブラリは(一般に)大きくなる。
>>807 レス、ありがとございまふ。
うーん。よーするに、「チェックを入れて小さくなったexeを配布した場合」ってのは、
受け取る相手に「さっぴいた分(=小さくした分)」が無ければ動かない、
ってことでよろしいですか?
もしかして、変なことで悩んでるのかな(^^;
>>808 原則、正解。
VC だと MSVCRTxx / MFCxx.dll
VB だと MSVBMxx.dll
Delphi では VCLxx.bpl
アプリケーションひとつ配布する場合には強いうメリットはないけれど、
複数配布する場合には合計のファイルサイズが小さくなる。と期待できる。
ただし MS はライブラリを OS に組み込んで出荷できるから、つじつまが合っている範囲では
共通ライブラリの存在を気にしないですむ。
それに対して、どのユニットをどのパッケージに入れるか/入れないかを柔軟に指定できるところが
Delphi の強み。設計時パッケージが使う実行時パッケージと .exe が使う実行時パッケージの構成を
変えることも許される。
もし、三つ以上の Delphi アプリケーションを配布する可能性があるのなら、実行時パッケージを使うことを
考えてみるとよい。必要最小限のユニットだけを含むカスタムパッケージを使うことで
トータルファイルサイズをかなり削減できる。
>>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
813 :
デフォルトの名無しさん :01/12/07 07:16
パッケージやDLLつかうと、EXEが解析されやすくないですか?
誰に?
>>813 UPX掛けてヘッダをバイナリエディタでごにょごにょっとな…(ボソ
もう冷え込んじゃったか…。このスレ…。早いなぁ…(TT。
>>810 だってあなたの質問、つまらないんだもん。
DLL を使うように指定して作ったのだから、DLL がないところでは動きようがないでしょ。
同じことを二度三度説明する暇人はいない。
くだらねぇから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;
Windows.pasでBeepの実装し、$IFDEFで場合分けするのは駄目。 Windows.pasを公開するので。 オブジェクトインターフェースは気軽にメソッドを増やせないので駄目。
>>819 そ。Delphi ならパッケージを使いなさい。
>>820 間違えたくない。ってのは関数定義の記述を間違えたくない。
ってこと?言語仕様上、自由な定義を許しているんだから、
外部ツール(include ふくむ)を使わない限り無理じゃないかな?
けど、そのファイル名、ちょっと怖いね。何を作る木だ?
>>823 >間違えたくない。ってのは関数定義の記述を間違えたくない。
そうです。
>何を作る木だ?
解りやすく説明するためのサンプルです。
DLL一般について話しています。
825 :
デフォルトの名無しさん :01/12/08 05:36
マイナーなだけのdelphi使うメリットって何? macみたいにならないの?
また煽りか 飽きたよ
品の無い奴ぁ俺んトコに来い 俺も無いから心配するな 見ろよ青い画面白い髪 そのうちベンダー泣くだろう
>>820 ほんとに危ない名前だなぁ。
これで作成される kernel32.dll の外部公開情報は "Beep" という文字列と
Ordinary 番号だけだから、本質的に無理だよ。
1. 定義を一ヶ所で行う -> include
2. 単一の定義情報ファイルからソースを生成
3. Beep の実装コードを .dpr から beep.pas に移動し、ifdef で external で解決するか
uses beep で解決するかを切り替えるようにしてテストビルドを行う。
ってところかねぇ。C++ 風、マングリングされた識別子名にしてタイプセーフリンク
する気はないのでしょう。
>>831 3.は知らなかったのでやってみます。
ありがとうございます。
833 :
デフォルトの名無しさん :01/12/09 17:25
実行中にBMPを使いたい というか 複数の個所で使うから節約したいんだけど 今まではリソースにしてたんだけど、新人が入ってきて、これだと判り難いんだよね。 で、コンポーネントにしてDataModuleに置きたいたいんだけど、 どうやったらスマートかな? 一番スマートなのは TPicture がコンポーネントになる事だけど TPersistent 継承だから無理だよな・・・・可能? やっぱりTPicture をプロパティに持つコンポを作成するしかないのかな?
FormにTImageとか たまーにWinControlなコンポーネント使いまわすときはこうしてる。
とりあえず、こんなふうなコンポを作りました コンポの新規作成で 上位クラスを 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 がコンポだったらいいのに
単にリソース代わりに使うだけでも一応 Destroyで解放しといた方がいいですね destructor TPictureTray.Destroy; begin FPicture.Free; inherited Destroy; end;
まてよ・・・・TPicture がコンポだったら コンポエディタの定義に困るからしょうがないのか
コレクションにしてItems[]でアクセスがいいな 面倒だけど
>>838 たしかにプロパティエディタまでそれやると必要だからメンドクサイな
>>834 その方法だとフォームインスタンスを作らなければアクセス出来ないんじゃ?
>その方法だとフォームインスタンスを作らなければアクセス出来ないんじゃ? フォーム一枚くらい問題ないでしょ 今試してみたらDel6Perで一枚13kbくらいだった (DataModuleは100byte程度) そういやDataModuleがない時代によく使ってたんだった
たしかに、たいした事は無いんだけど、なんか嫌なんだよなあ・・・ まあ TImageならどの絵がどこにあるか一発で判るから 開発効率が上がるメリットがあるからって言い訳は出来るけど
842 :
うすいさちよ28才独身様 :01/12/10 00:22
さむい…。寒いわぁ…このスレ…。ううううぅぅ…。 (ぼーぇぼーえーぼー♪(うすいさんのテーマが流れています))
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 ございます!
OnCloseQueryじゃないのか・・・。
850 :
デフォルトの名無しさん :01/12/13 23:46
誰か
>>831 の 3. を説明して・・
関数の宣言と定義を別のユニットにできませんよね・・・。
>>831 終電出ちゃうんで、家に帰ってからでいいね?
2:00 pm ごろ。それまでに誰かが説明してくれているといいな。
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. これだと、呼び出し規約のチェックが行われませんが・・・。
うーん。
>>835 のコンポを他のコンポにつなぐ場合、
FFreeNotifies は便利なんだけど
これが protected になってたら良かったのになあ
プロパティが変更された時にメッセージを送りたいんだけど、
その送り先が FFreeNotifies にあるのになあ・・せめてその関係のメソッドがvirtualならいいのに
マダカナ・・・
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
まだかなまだかな〜♪ 学研のおばさんまだかな〜♪
860 :
デフォルトの名無しさん :01/12/15 23:31
>>859 涙がでるほど懐かしいな。
あの頃は良かったよ、彼女なし、童貞、小学生好きのアニヲタでも
変態扱いされなかったもん。
今じゃ道逝く人がみんな指差して変態呼ばわりだもんな、ツライよ(w
学研のおばさんが本を持ってきてくれたの?
863 :
デフォルトの名無しさん :01/12/15 23:49
かぶとえびは、水を換えないと長生き出来ません。 使う水は、天日に晒した物を使いましょう。
865 :
デフォルトの名無しさん :01/12/19 07:47
うっかり登録してしまったタイプライブラリは どうすれば削除できますか?
866 :
デフォルトの名無しさん :01/12/19 10:14
C系のプログラムをdelphiに移植しない場合 objにして取り込めればいいけれどそうでない場合dllにして使っています。 exeにdllを取り込もうとしてフォームにぶちこんだり リソースにぶち込んだりして動的に使う方法(HDDに展開・削除)はできたんだけど リソースにdllをおいてHDDにおとさずに読み込む方法 あるいはコンポーネントってないですか?
867 :
Delphi初心者 :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連発、 てのが(・∀・)イイ!!かも。
ありがとうございます参考にしてみます。 >3番目のはあんま意味ないような。 と、とりあえずこの方法で試験・実行してました(藁
ごめんなさい。3番目の確かに楽かも。
あう…と、とりあえず3の方法でやっていきます >実行用クラスを内部に持って なるほど!そうすればコード補完の時に泣かずに済みますね 気にせずコード書いていたのですがパブリッシュメソッドは 呼び出すコードが無くてもちゃんとコンパイルされるんですね。 メソッドアドレスとオブジェクトアドレスの配置がわからず特権違反 出しまくってしまった(鬱 このスレってsageないとダメなのかな…と思いつつsage
それなら ギコbasic(ム板にある) スレに参考になる事書いてあったような・・・
>>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じゃない方が良いのですが、やっぱ駄目っすか?
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
>>885 どれも追いかけるのが嫌になるコードばかり
こうして比べると ギコbasicも案外素直に書いてるんだな
887 :
デフォルトの名無しさん :01/12/21 17:15
>>884 おー動いた!ありがとうございます。
そしてまた便乗質問になってしまいますが、
今度はString型→TString型のパターンなんですが・・・
(delphiって、なんか型がいっぱいあるんスね・・)
っと、TString『s』ですね。
>>887 あ、「TStrings型の変数 :=Tstringlist.create;」で自己解決しました。
どーもお騒がせいたしました・・・
Innerfuse Pascal Script そのままつかっちゃあかんの?
コンボボックスをフラットにした状態で、 外枠に黒い線を付けることは可能なのでしょうか? テキストボックスはBorderStyleで設定できましたけど・・・ m(__)m 初心者質問ですいません
すいません、いろいろなプロパティをさわっていたら出来ました。 どこをさわって出来たのか、わかりませんけど(泣 お騒がせしてすいませんでした、逝ってきます・・・・ || Λ||Λ ( / ⌒ヽ | | | ∪ 亅| | | | ∪∪
>>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環境でしか動きませんよ。
なんでレコード型の初期化の方法がヘルプに載ってないんですか?
>>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で調べて一つずつ解決。 そうやってステップアップしていくのが一番の近道じゃないかな。
>>903 なるほど、ありがとう! 勇気付けられました。
Delphiってユーザーの互助で成り立ってるんだなぁ、とか思ってみたり。
>>904 「ユーザーの互助でしか成り立たない」の間違いでしょ(藁
>>905 それ以上書いちゃ怒られると思ってあえて書かなかったのに(w
_________ ∧,,∧ / ミ;゚Д゚彡< まあまあ、マターリいこうぞえ ミつ つ \ 〜ミ ,, ミ.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪∪ 言語宗教間で争ってもいいことないヨ Delphiは下位互換性が高いのでD6でも D3〜5までの本が役に立つものばかりだよ。 最新の機能を追わなくても面白いものは イパーイ作れるぞ。 あとソフトウェアはアイデアひとつで 面白いものが作れるかもね。 有名ソフトの真似っこするのもいいかも
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | ユーザ同士が殺伐とした .| | 吉野屋みたいな言語もいかがなものかと | |__________________| . ∧∧ || ( ゚д゚)|| / づΦ
>>897 Delphiではじめてみようとおもいます。
当方、お金が無いのでとりあえずはPersonal+WEBの文献で学んでいこうとおもっています。
>一部のコンポが標準で付いていないだけです。
とのことですが、通信系のツールを特に作りたいならばやはりProfessionalを購入する必要があるでしょうか?
追加できるものが配布されているのでしょうか?
Pro版のメリット〜 ・コードエクスプローラーでコーディングが楽々 初心者のうちはコードディングより考えている方が長いんだから不要。 ある程度はツールで補えるし。過去ログ参照。 ・通信系のコンポがついている IndyというフリーのコンポがあるのでPersonalでもかまわない ・商用に使える 趣味にしか使わないなら不要 というわけで、Personalでバリバリ物が作れるようになってからPro版を買うのが良いかと。
コンポーネント(というかVCL)にあまり頼らない作り方していけば 昔のバージョンの参考書やwebの資料はすごくやくに立つ。 そうなると、VC用のwebサイトの資料も役に立つ。 資料が一気に増える。 素人(,つか初心者)にはオススメできないが。
何がいいたいかって言うと、 通信系コンポーネントがないから出来ないなんていうのはツマランいいわけで、 Socekt系のAPIを自分で叩けば普通に出来るよということ。 しかも、他の環境だとそちらが当たり前だろうから、 Delphi以外のそちらの資料も参考になるよってことさ。 # Socketに関してはIndyでいいんだけど
スペルミスリマクリで偉そうなこと言ってスマン
細かく言うとスペリングだけどな
クラスの概念を教えてください
12ダース
JFK
ハシブトとか。
大岡越前の前とか。
ヤマトの敵。
Delphiの場合、 1)データをひとまとめにした(レコード型) 2)データや関数(メソッド)をひとまとめにした(オブジェクト型) 3)さらにコンストラクタとデストラクタをつけ、実行時型情報の機能を付けた 結果、クラス型の変数はインスタンスの参照に という発展の仕方ですね クラス型は
>>910 >>911 >>912 >>913 とっても参考になりました。Indyで十分みたいですね。
難しいことは良く分かっていませんが、バリバリ使えるようになるまではPersonalで
十分ということは分かりました。
レスどうもありがとうございました。
Indyの使い方を解説してるページは無いですかね? 2ちゃんつながり(?)のmonazilla以外で。
926 :
デフォルトの名無しさん :01/12/26 03:41
ひたすらサンプル嫁
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は普通に使えるんですか?
ハァ?
なんだァ!?
>>931 使えますよ
まあまあ、マターリとしましょう
uses Windows;だな
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 = 手続き じゃないっけ?
そうれす。ぷろしじゃーれす。でも「手続き」と言うのれす。 ぷろしじゃーと言えばいいかもしれないれすが、 やっぱり正式に日本語だと手続きなのれす。 なんかイヤれす。 てへ★
procedureも関数これ最強。
ボーランドのC++スイートって奴 15000円なんだけど買っても損しない? ってスレ違いか、、、
>>947 そんではないかは、自分次第。
俺はきっとTASMしか使わないだろうから、\15kだと微妙。
C++スイートって何?
旧製品の廉価版たたき売り
>938 ほんとだ! wsprintf って使えたよ!
>>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に書いてあるぞ
いや、いいわけすると、windowsユニットのをそのまま使っても使えないんだよ
957 :
デフォルトの名無しさん :01/12/28 09:04
もしかして Caption:=PChar(s); ってやると ゼロ終端探して長さ調整してくれるの? それは仕様?
PChar(s)はゼロ終端文字列として扱われるから仕様。(string→PCharへのキャスト) 途中に\0があるとLength(s)とLength(PChar(s))の結果も違う。 ヘルプに記述あったかな?
そうか、堅い言語だと思ってたけど案外なんでもありって面もあるんだな pchar(s)^ もなんだか驚き
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 を忘れてる 危険
いやまあそうだけど (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なんかもこんな感じだよな
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
Delphi6 開発者ガイド
992 :
デフォルトの名無しさん :02/01/05 11:43
サルでも分かるDelphi
1000