1 :
デフォルトの名無しさん :
02/01/04 23:11
むむむ、2分割を想定してるものを一括で書いてしまった(^^;
>>1 お疲れ様
いや去年の暮れに1つたてただけだったんだけど 厳しいなあ
6 :
デフォルトの名無しさん :02/01/05 00:05
新スレオメ!
7 :
デフォルトの名無しさん :02/01/05 00:36
Delphi/Kylixを一緒にするのは無理ないか? オレ、Kylixには全く興味無いなぁ。
無理あるかどうか以前に話題がないような>Kylix まだ使ってる人いるのか?
9 :
デフォルトの名無しさん :02/01/05 09:51
10 :
デフォルトの名無しさん :02/01/05 10:21
以前からDelphiスレが多いという書き込みは結構あったと思う。 Delphiがどんなにだめになっても割りとAPIレベルから再構築できるから 素人からバカ(プログラム中毒者)まで使える。OO用だけど実はアンチOOでもOK 欠点はマクロ展開できないことぐらいじゃないかなあ。 リンクがないのがとにかく好きだ kylix/delphiってのはインターベースやオラクルを前提にして いわゆるプログラマーでない人がやる分には悪くないとは思うけれど TCP/IPベースならばおんなじことがNETSCAPEブラウザーで テキストベースのhtmlとjavascriptでできそうな気がする。 ところでD6ってのはNULL変数がなくなったんですか? あと absolute 0 って使い方ができないから D6のおまけCD-ROMについているJEDIのDirectDrawでエラーが出る。 ちなみにこれは const nullGUID :TGUID =(D1:0;D2...); var nilGUID :TGUID absolude nullGUID ってやったら直ったけれど こう仕様が変わるとほんとにつらい。 Delphi1からDelphi2に変わったときなんて OS違うのにソースそのままでコンパイルできたって言うのに
超超初心者ですが メインフォームとサブフォームがあってメインフォームで ボタンをクリックするとサブフォームが表示される命令文を教えてください ちなみにForm1.Close;で終了するのはわかりますが・・・
Form2.ShowModal
13 :
デフォルトの名無しさん :02/01/05 20:30
>>12 ShowModalそれが知りたかったのです。ありがとうございました
14 :
デフォルトの名無しさん :02/01/05 20:53
>TCP/IPベースならばおんなじことがNETSCAPEブラウザーで >テキストベースのhtmlとjavascriptでできそうな気がする。 それはもしかして、wwwアプリみたいなものを作る話ですかな? あれで普通のGUI構築ツールと同じ表現力を求めて開発するってのは、 まるでお薦めできませんぜ。 というか漏れのプロジェクトが、それっぽい安易な発想しかないアフォどものせいで 月曜の初仕事からの暗礁のりあげが保証されていると思われ(わら(T_T del(この文脈ではVBでも可)ならば、こんなことくらい楽勝で出来るのに!と 歯噛みすることが、なんどもなんども有ります。やってられないっすwwwアプリは。 wwwだと、(serverとのやりとり無しには)絵も描けないわけだしね。 JavaAppletの出番をあおぐくらいなら、delとかを使うのと同じことだし。 >リンクがないのがとにかく好きだ これ、なんのこと? delにもリンクは有るでしょ? はやすぎて判らないかも知れないけど。 VCにもgccにも有るのと同様に。
∧,,∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < しつもソや! U ミ \____________ ~ミ ミ ∪''∪ StringList.LoadFromFileで読み込む時は 当然ShiftJISのファイルがテキストで読めますが HTMLでよくあるEUCを読み込んでSHIFTJISの文字列リストとして 格納するのはどうやるんでしょうか。 また、 HTMLってShiftJISとEUC以外に縁コードの方法はありますか?(日本語で) あるのならそれもStringListにShiftJIS形式で格納したいっす。 教えてください。
17 :
デフォルトの名無しさん :02/01/05 21:29
Access2000のデータをDelphi4の中のテーブルで 表示させたいのですが、どうすればよろしいでしょうか? 教えてください ちなみにWindows上の設定のODBCまでは何とかエラー無く行けたと思います
>HTMLってShiftJISとEUC以外に縁コードの方法はありますか? JIS と UNICODEが有名かと
,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
~′,,,,,,,ミ,,゚Д゚彡 < 愛してくれとはいわーないわー♪
UU""" U U \_______________
ストーカーニハ ナラーナイデー♪
レスありがとうです。
>>16 HenkanJ.pas.....変換はword単位なんですね。
Stringを全部変換するのはどうやるのかな.....
SiftJIS以外テキストをStringListに入れて
そのStringをShiftJISに変換なんて事が出来るのでしょうか...
>>18 nkfって何でしょうか。
関連しつつ、別質問ですが
テキストファイルがそれぞれJISかSiftJISかEUCかUnicodeかを判別する
のはどのようにしたらいいのでしょうか?
質問ばかりでスマソ
21 :
デフォルトの名無しさん :02/01/05 21:51
メニューのショートカットキーをカスタマイズできる機能を 実装しようと思っているんですけど、 何かいい方法ありませんか? 教えてください。
>>20 google見れ
>>21 TActionList使ってメニューを全てTAction化して
TActionListのショートカット編集フォーム作成すればよい。
http://www.vector.co.jp/soft/win95/util/se031296.html ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ ゚Д゚ミっ < 車輪の再発明はするなってことですかい
|''U ̄| \_________________________
| ̄ ̄|
/ ゙ヽ
( ゚Д゚ ) リダイレクション デ ドウヤッテ StringList ニ.......
人____ノ
Pascalソースがありゃあいいのになー.....
DLLもあるんですね....
そんでもってDLLの作者の方々に.....
ウワァアァァアァア!!!!!
∧,,∧
ミ;゚Д゚彡
ワラタ
>>21 ∧,,∧ 2002ネソ 今年のフォーフ
ミ,,゚Д゚彡 「ネタの中にもマジレス」
ミつ[|lllll])
~ミ ミ
U U.
Actionのショートカットの管理は
実装例はホットゾヌを見るといいです。
が、初心者にはムズイと思います。
どこかの方がやっていたアイデアですが
Shiftを押しながらMenuItemをクリックすると
ショートカット変更ダイアログ
(FormにTHotkeyが張り付いただけのForm)
が表示されてそれを入力したら
ショートカットが変更されるというもの。
実装の概要は
MenuItemでもActionでもいいけど
クリックされたイベントハンドラで
begin
if (Shiftキーが押されてる?) then
begin
MyChangeShortCutDialog.Hotkey1.ShortCut := (Sender as TAction).ShortCut
if MyChangeShortCutDialog.ShowModal=OK then
beign
(Sender as TAction).ShortCut := MyChangeShortCutDialog.Hotkey1.ShortCut;
end else
exit
end else
begin
//元々のイベントハンドラの処理
end
end;
こんな事を行えば楽にショートカットキー変更機能が搭載できて
いいんじゃないでしょうか。
27 :
デフォルトの名無しさん :02/01/06 00:19
TForm.Border.Icons := [biHelp]のヘルプってどうやって表示するの?
>>24 >リダイレクション デ ドウヤッテ StringList ニ.......
DLLツカエバ、CモジレツヲカイシテStringListニデキルジャン
ッテソウイウコトデハナイ?
,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ~′,,,,,,,ミ,,゚Д゚彡 < で、こういう場合にインターフェースを学んでしまおうか UU""" U U \_ ShortCutという同名のプロパティを持つが 継承依存関係の無いTMenuItemとTAction、 それぞれをインターフェース変数に代入すると 同一のプログラムソースで同じ処理が行える はずなんだけど..... ∧,,∧,,,,,,,,,,,,,,, / ̄ ミ゚Д゚,,彡,,,,,,,,,,,,ヾ~ < 恥ずかしいかしら U U """"UU \_ 俺、いまだにインターフェースに慣れません なんか苦手意識... だから、誰か例、書いてくれないかなー。。。(汁
.∧,,∧ /
>>28 @'"ミ,,゚Д゚ミ < ごめん、めんどくさがりなの。
UU''UU \_C文字列苦手...
でも、やるならリダイレクソンよりDLLだね
∧ ∧ / ( ゚Д゚)< アンカー飛ばないんでjconvert.pasね |つ つ \ ~ | ∪ ∪
> でも、やるならリダイレクソンよりDLLだね よっぽどコンソールアプリとかがトラウマになっとるようだ・・ 別にたいした違いはないんだが。
既存の派生元の異なるコンポーネントのプロパティを同様に扱うためだけにインターフェースを利用するというのは冗長でしかありません.
∧ ∧ 標準入力でリダイレクション受け取る方法が
ミ ゚Д゚彡 わからないです。
~ミ,,,,uuミ
DLLの方がいろんな場面で使いやすいと
思うんだけど。違う?
>>34 そなの?
Javaではそういう使い方が日常で使われると思う。
誰かがそういう目的でよく使っている
と2chで言っていたような…ガセだったかな。
そこんとこDelもJavaみたいになればいいのにナ。
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < しゅ・・・宗教上の理由から ,;゙ ミ \_nkf32.dll は使えません。 ミ. ミ /゛゛゛゛ ダッテダッテ アノヒトガ サンカシテルモノ >誰かがそういう目的でよく使っている デlpヒでInterfaceをそのように使っているという事です。 ねこまさん、下手人さんありがとう。 jconvert.pas を調べてみます。 ああ、また夜型になってしもた。
>>27 OnHelp か HelpContext
38 :
デフォルトの名無しさん :02/01/06 09:43
Win32CheckのCLX版ってある? EWin32Errorに対するEOSErrorはあるのに見当たらないような。
>ダッテダッテ アノヒトガ サンカシテルモノ 俺もその事実を知ったときは驚愕した。
40 :
デフォルトの名無しさん :02/01/06 09:51
丸ボタン(ステレオのボタンとか、かっちょえーヤツ)用のビットマップて 何処かに公開されてたりしませんか? 普通のと違う、かっちょえーコントロールが使いたいです、激しくハイ!
>>40 Delphiはコンポーネントを自作してなんぼ。
見たところ趣味だろうから生産性は無視しな。
と、言う想いを込めて
>>41 。
43 :
デフォルトの名無しさん :02/01/06 10:46
type foo=(bar, baz); foo f; case f of bar: xxx; baz: yyy; end ってした時に通常ありえないelse部分ってどうしてる?
45 :
ななしヘタぐらま ◆B18Bks.Y :02/01/06 12:29
>>43 else
Exception.Create('内部エラーだゴルァ');
社外に出すソフトでこれをやるのは危険.
Assert(False, 'ありえねーぞゴラァ!!');
デルファイのソースを書くエディタってなんか使いにくい。
49 :
ななしヘタぐらま ◆B18Bks.Y :02/01/06 15:25
>>46 ハイ,以前恥ずかしいエラーメッセージを
社外で出して恥ずかしい思いをしました.
50 :
デフォルトの名無しさん :02/01/06 16:19
Delphiで作られたオンラインソフト知りませんか?
窓の手、かちゅ~しゃ、Irvine、Iria、何か、ホットゾヌ、wyvern、CD2WAV32、TTWC、Jane2ch
53 :
デフォルトの名無しさん :02/01/06 20:25
>>36 ちょっとタイミングのずれたレスだけど
日本語コードではユニコードはつかわず UTF8,UTF7(ほとんどUTF8)を使うのが標準
で実際にはShift-JISがスタンダードでUNIX系ホストはEUC-JP 一部がJIS
でJISコードはメールでは標準だけど改行や英字に切り替えるたびに制御コード入れないといけないので
サイズがでかくなる。
昔のCGIで半角かな禁止だったところはたいてい頭に¥の入ったコードが誤変換しているって事を聞いた
だからコンバートおたくになるのでないのなら
現実問題としてS-JIS,JIS,EUC-JP,UTF-8を抑えておけばいいんだと思う。
どっかで見つけたソースコードを元に一回作ったんだけどちょっとみあたらない。
確かIEのデータ(UTF8)をクリップボードに入れてどうこうというのだったと思うんだけど
54 :
デフォルトの名無しさん :02/01/06 20:27
>>48 Delphiの唯一の長所がソースエディターだと思うよ。
>>14 Webアプリではなくてインターフェースとしてのブラウザー
Delphiってストリームからフォーム読み込む仕様なのに設計時デザインが原則なのはもったいない
あと思うのはdelphiについている表示用コンポーネントはWIn依存物も含めて
HTML表示で代替できてしまうので考えてしまうのです。
でもIEってなんかWIndowオブジェクト貼り付けてるだけらしくて
テキストのところでカーソルがアイビームになるから、効率はわるいのかも....
って結局自作かい...オリ...
フレームとテーブルと画像の入れ替えと矩形探索に特化したパネルつくればいいんだな。
ってもVCLベースでなくてWin32APIベースだけど
>あと思うのはdelphiについている表示用コンポーネントはWIn依存物も含めて >HTML表示で代替できてしまうので考えてしまうのです。 このネタもう飽きた
____∧ ∧_ / ̄
>>49 ヘタぐらまさん
___ミ,,゚Д゚ミ< もっと暴走だ!
__ ミ ⊃ つ \_
_~ミ,, ,,〃 いつか、2chネラと会える日が来るはず。
_ ∪ ∪
>>55 そこがJava鯛C#の戦いの争点になるのではないかしら。
暗い蟻マシンのGUIにIEってのはやはりつらいから
VBで作るという案件も世の中イパイイパイで溢れてるかも。
ソースエヂタをコンポーネント化してくれ。
,,,,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ~′,,,,,,,,,,ミ,,゚Д゚彡 < なぜやろか UU"""" U U \_______________ なんか、RichEditでEUCのコンバートだけ誤動作するみたい 一部、文字化けする。 procedure TForm1.Button6Click(Sender: TObject); begin if CheckBox1.Checked then begin RichEdit1.Lines.LoadFromFile('C:\Temp\無題EUC.txt'); RichEdit1.Text := ConvertJCode(RichEdit1.Text, SJIS_OUT); end else begin RichEdit1.Lines.LoadFromFile('C:\Temp\無題EUC.txt'); end; end; どうやら改行コードを勝手に改変しやがるのか>>RichEdit ヤナ仕様だな。 ConvertJCodeはjconvert.pas の関数です。 jconvert.pasはUTF-8はサポーとしてないみたいですね。 ちょと残念。ま。いいか。
Delphi/Kylix Tech 2nd のパート3スレは無いのですか?
2nd は2番目の意味ですから、これのパート3はありません(笑)
いや なんかスレ建てすぎで建てられませんなんだよね。 たててないのにさ みんな同じような症状なんじゃない?
RichEdit.Text (RichEdit.Lines) はただの文字列保存場所じゃないのだから > RichEdit1.Lines.LoadFromFile('C:\Temp\無題EUC.txt'); > RichEdit1.Text := ConvertJCode(RichEdit1.Text, SJIS_OUT); こんな横着なことしてはイカンよ。 ちゃんとした文字列保存用の TStringList などを用意するように。 どうしても TRichEdit に直接読み込みたいのであれば、 type TJaConversion = class(TConversion) function ConvertReadStream(Stream: TStream; Buffer: PChar; BufSize: Integer): Integer; end; function TJaConversion.ConvertReadStream(Stream: TStream; Buffer; BufSize: Integer): Integer; begin { EUC から SJIS に変換する } end; というようなクラスを作って RichEdit1.DefaultConverter := TJaConversion; RichEdit1.Lines.LoadFromFile( FileName ); のように読み込みながら変換しないといけない。 この用途には NKF32.DLL も Jconvert.pas も利用できないので 素人にはおすすめできない。
∧,,∧ おそなったけど、サンクスコ。 ミ,,゚Д゚彡 モナユーティルスのファイルから文字列直読み関数 ミつ[|lllll]). を使ったよ。 ~ミ ミ U''U フユハサムイネ function FindFile(const FileName: String): TSearchRec; begin if FindFirst(FileName, faAnyFile, Result) = 0 then FindClose(Result) else raise Exception.Create(FileName+'の情報の取得に失敗しました。'); end; function LoadStringFromFile(const FileName: String): String; var size: Integer; F: File; begin size := FindFile(FileName).Size; if size = 0 then begin Result := ''; Exit; end; SetLength(Result, size); AssignFile(F, FileName); Reset(F, size); try BlockRead(F, PChar(Result)^, 1); finally CloseFile(F); end; end;
質問ですがうぃ コンポーネントを作る際 コンポーネント→コンポーネントの新規作成を選んで 上位クラスを選ぶわけですが、特に上位クラスを選びたくないとき (TObjectにしたいができなかった)どうしたら良いですかね。 適当な上位クラスを継承させたら良いんですかね。
Deiphi3のプロフェッショナル持ってるけど趣味ならこれでも いいかなぁ??あえて6のパーソナルにするべきだろうか・・
Tcomponent とか Tclass はどうだ?
趣味なら Deiphi3のプロフェッショナル >>>>> D6 personal だと思うぞ
>TObjectにしたいができなかった TComponent クラスから直接/間接に派生しないと、「コンポーネント」とは 言わないんだよ。コンポーネントパレットに乗らないし。 TObject から派生してつくるのは、たんなる「クラス」ですよ。 コードエディタに直接書けるよ!
69 :
デフォルトの名無しさん :02/01/09 06:24
>>63 >BlockRead(F, PChar(Result)^, 1);
最後が 1 だけどいいの?
>>65 プロからパーソナルになると
IDEが使いにくく感じるから微妙。
あえて換えなくてもいいような。
>70 それはD4以降の話では?
D3とD6は両立出来るので両方入れたらいいんじゃない? ファイルタイプの関連付けを入れとくと便利だよ でもD3ProとD6Personalなら同じようなもんかもね ちょっとだけD6Personalが便利かも
ちょい質問。 コモンダイアログの所謂「ファイルを開く」ダイアログで、 リストに追加されるファイル名をゲトしてそのファイル から条件分岐で追加/不追加を制御したいんですが、 イマイチOnIncludeItemのイベントの引数、 const OFN: TOFNotifyEx からファイル名を取得する方法が分かりません。 Googleも検索してみたけどうまく引っかかりませんでしたです。 メモリエディタで覗いてみると、 OFN.pidl の指してるアドレス周辺にファイル名があるみたいなのですが、 構造体の定義も分からず、困っています。 OnIncludeItemのイベントでファイル名をゲットする方法、 ご存じの方ご教授下さい。 動作/開発環境は Win2kProSP2+D5Pro Up1 です
74 :
デフォルトの名無しさん :02/01/09 10:26
>>65 D3 pro とD6 pro持っているけれどD6のメリットなんてほとんどない。
D6だとフォームだけで360kbyteになっちゃうyo
あえてD3の欠点があるとしたら
Dword型がLongIntでInt64がcompになるので
整数演算がややこしいこととタイプライブラリーでInt64を使っているものをととりこめないことだ
D6の長所っていったらインストールシールドついていることぐらいだから
Per版はやめたほうがいい
インターネットコンポーネントはほとんどWebでダウンロードできるyo
ちなみにFastnetのFree版も1.61になった。
もしもD6 per買うぐらいならば どっかでD5 learning探したほうがいい
D3はアセンブラはmmxasmを使えばインラインでSSE2まで使えるし、 一番安定している。 もうひとつ欠点をいうならばD4,D5以降のコンポーネント取り込みには 一苦労するという点だけどたいていD3用のコンポーネントもあるからOK D6 perにいくくらいならFreePascalにいったほうが将来性がある
SSE/FreePascal厨房が暴れとるな Delphi/VCL使わないなら 今時Pascalにこだわる必要性は皆無だよ。 もっとまともな選択肢が山ほどある。
相変わらずですねー。D3というキーワードに弱いんでしょう。 つーか(・∀・)?
>>76 キニスルナ
所詮Delphiが好きな奴同士だ。仲良くせい
82 :
デフォルトの名無しさん :02/01/09 18:36
>>76 言語的に慣れているしもってるんだからDelphi使わない理由もなかろう。
でVCL使うならD3しかないでしょう。
まともな選択肢なんて一つでもあるの?
Webでのサンプルの圧倒的な量
似たようなコードばかりのC++とはおーちがい
D6-perの最大の難点は作ったEXEの扱いだと思うのだが...
はっきりいってWindows nativeアプリを作ることに関してはDelphi最強でしょう。
でもソースはボーランド以外のができがいいけど
Delphi/VCL使わない場合の選択肢ってことでは
84 :
デフォルトの名無しさん :02/01/09 19:03
>>83 VCL使わない場合D6はかなり微妙だと思う。
実は病巣部は Classes,varientsなので
Delphiのクラスをちょっとでも使おうとするといきなりファイルサイズが
120kbyteくらいになっちゃう。
どうもグローバル関数とか初期化部分が多くて循環参照しているのが原因みたい
TlistやTstreamくらいはつかいたいのに
でも一回ライブラリーがそろえばいいし、
Delphiの場合Webのサンプルが多いのがありがたい
まぁ非VCLでもVCLでも一番バランスが取れているのはD5なのかな?
D6でもKolとか使えばファイルサイズは小さくなるけれど
あまりに独自なクラスで(Tobjectすら使っていない)
D3は使うかもしれないけれどD5を使うのはあまりにも癪なので
アプリのデータを増やしてかってに入っている関数を使い尽くすつもりで
やるっきゃない。
HDDの容量も回線スピードも増したこの時代、1MB以下のファイルサイズなんか気にするな。
>>85 禿同
などどいいつつ、逆にVCL使わないで頑張ってらっしゃる同業者が
何人もおられると思うとちょっと感動。
D4proの方がベターだと思うんだけど、何か厳しい問題あったっけ?
>>87 自分の持っている/長く使っている道具が良い。って話になっているぞ
ホンとのプロは道具を選ばない。
>89 用途によるからなんとも言えないな 俺はもうD3は使わない D1は使うけど D4,D5 お試しでD6だけかな
91 :
デフォルトの名無しさん :02/01/10 10:23
やっちゃったよ for i:=0 to cnt -1 do func(i); みたいなコードで、どれか一度でも成功したら別の処理をしたくて funcの帰り値をboolにして for i:=0 to cnt -1 do flag:=or func(i); if flag then funcB; とやったんだ・・・・もう判るよね。 func(0)がtrueを返すと func(1)は呼ばれないなんて・・・・
あ for i:=0 to cnt -1 do flag:= flag or func(i); の間違いね ・・・鬱
Delphi4.1 が一番安定していた. D3 もいいんだけど,COM のサポートがイマイチ もういいか,古い話題は…….
>>85 例えばアップデートとかする時 50kbyteと500kbyteはやっぱ違うと思うよ
大体Delphiで作るときって画面レイアウトは設計時に決まっちゃうので
フォームってデザイン時しかいらんのよ。
ちりも積もれば山になるというけれど
例えばユーティリティが10個あって合計1Mというのと合計10Mというのは
やっぱ違うと思うし、実行時ファイルサイズが大きければそれだけ重くなる。
零細企業は大変なのよ。あとおいらけちだし
>>89 Int64て D4からだっけというよりD3はLongWordがないほうが痛い
そう考えると最終安定版はDelphi4ということ?
Delphi5はフォームがテキストというけれど元々エディターで表示できるので
関係ない気もする。
スプラッシュはD3かD4がいいねぃ。D5はださいしD6は寒い
しかもWin2Kだとユーザーかえると未許諾になっちゃうし..
インテルのIJLがレジストリーをいじんないとIJGより速くないそうだし
COM関連を考えるとあるライブラリーを無理に使わない必要もないから
ボーランドオリジナルソースでは、
sysutiles、jpeg,graphics,classes,varientsくらいは使ってよさそうだけど
Delphiってフォントの回転できないから結局API使っちゃう
D6はif def でOS分けないでユニット別名使ってほしかったなぁ。
どのみちもうAPIでの環境整っちゃったからがんばってD5も使わないで
D6で逝こう。
95 :
デフォルトの名無しさん :02/01/10 10:55
>>94 そういう開発スタイルならdfmtodprみたいな変換ツールも使ってみたら?
フォーム固定ならRCでいいわけだし...
D3,D4,D5の場合フリーのツール類をそろえればそうとうよいと思う
MMXasm,CtoPas,HtoPasとかもお勧め
使用許諾コードの取得をすればいいのではないのか。
>>93 Delphi4.1ってあったっけ?
Delphi4 + パッチ?
100 :
デフォルトの名無しさん :02/01/10 14:23
これって正解は for i:=0 to cnt -1 do flag:= flag or func(i); をひっくり返して for i:=0 to cnt -1 do flag:= func(i) or flag と書けばいいんだよね 確かに最初驚くだろなあ
if func(i) then flag := true;
どうでもいいがDelphi6Personalの連中がMLになだれ込むと iwaaskiみたいなのがあふれかえっちまうのかね。 そうなったら、あのMLはどうなるんだろうな。 ていうかiwasakiはもっと基礎からやりなおせ、MLに書いて いるようなiwasakiの造りたい物を作れるようになるには3 ヶ月は修行して空を飛べるようになってから出直せ。
>>94 >例えばユーティリティが10個あって合計1Mというのと合計10Mというのは
そのサイズなら、パッケージを分離したら?
>98 Delphi4 + sp(2|3) あたり (w >104 それ言おうと思ったけど,もしかして作者が違うというケースじゃないのかと推測
>97 の間違いゴメン
107 :
デフォルトの名無しさん :02/01/11 02:03
>>91-92 最初意味が分からなかったが、、、
ショートサーキットの事ね。
for i := 0 to cnt - 1 do
flag := flag or func(i);
つまり、 flag = True の時、 func(i) が実行されないって事が問題らしいが。
考え方が変だと思う。
flag := func(i) or flag;
も変。
で?
そっかショートサーキットは、条件式以外でも有効なんだ・・・ しらなんだ。 やばいな潜在的バグがあるかも
110 :
デフォルトの名無しさん :02/01/11 13:36
for 文中で flag := func(i) or flag; だと
xor esi,esi
call func
or bl,al
inc esi
>>101 は安全だけど、分岐命令になってしまう
xor esi,esi
call func
test al,al
jz +$02
mov bl,$01
inc esi
111 :
デフォルトの名無しさん :02/01/11 13:55
Personal版で作ったものは、金儲けさえしなければ配布してもいいの?
112 :
デフォルトの名無しさん :02/01/11 13:55
delphiで作ったexeファイル(アクセスログ取得プログラム)をSSIで実行しようとしてるのですが、
SSIを埋め込んでいるhtml部分に「スクリプト '
http://localhost/xxx/xxx.exe ' を実行できませんでした: Win32 エラー コード = 123」
とのエラーが表示されていて困っています。htmソースは以下のような感じです
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY background="logoback.gif">
<!--SSIここから-->
<!--#exec cgi="
http://localhost/xxx/xxx.exe "-->
<!--SSIここまで-->
</BODY>
</HTML>
IISの設定をいじくってもうまくいかないし・・解決策がわかる方、ぜひともおながいします。
(微妙にスレ違いのような気もしますが・・・)
まさかWin32アプリケーション形式じゃないだろうね?
>>112
>>113 Win32形式??
って何でしょうか・・
(当方delphi暦2週間なうえにIIS最近初めて触ったばっかの厨なもんで)
>>113 の言いたいことは
プロジェクトオプション の中の リンカ タブの中の
EXE/DLLオプション のところの コンソールアプリケーション の
スイッチがちゃんと on になってるか?
ということだと思われ
コンソールアプリも 一応Win32アプリなんだよね
>>116 >プロジェクトオプション の中の リンカ タブの中の
>EXE/DLLオプション のところの コンソールアプリケーション の
>スイッチがちゃんと on になってるか?
なってませんでした。で、onにして再構築してみたんですけど、やっぱりダメでした。
う~ん、そもそもIISだとdelphiで作ったexeファイルをSSIで実行ができない、なんて事ぁないですよね?
IIS では Delphi に限らず exe ファイルを SSI として実行することはできない。 が正解じゃないかな?ISAPI フィルタにする必要があったと思うけど。
>>118 Apacheにすれば?そういう問題じゃない?
>>119 それは無いと思います。同じIIS環境でC++で組んだexeファイル(「test」って文字列を返すだけのもの)
はSSIからきちんと動作してくれたんで・・・
>>120 Apacheにはできそうにないスね。仕事場がIISばっかしで
色々とやっているようなので
exec cmd か exec cgiの差?
ちなみに、exec cgiをexec cmdに変更すると 「CMD のオプションは #EXEC の呼び出しに対して使用可能になっていません」 なるエラーを返してきます。厨房には何の意味やらさっぱりで・・くそー
Delphiのプロジェクトで、 CGI,Win-CGI,ISAPI,Win32実行ファイルを選択するようになってる。 Del6パーソナルではCGIは無理だYO!
サンプルに従い <!--#exec cmd="cmd.exe /c dir"--> をやってみてみたら? それができない場合は、セキュリティその他の問題で IIS の振る舞いが 変わっている可能性が。 ところで IIS のバージョンと動作 OS は?
>>125 URLに直接
http:// ~/xxx.exeってファイル名を打ち込めば
ちゃんと動いてくれるんですけど・・
>>122 >>126 ひーん!実行できないです・・(またもや「CMD のオプションは #EXEC の呼び出しに対して使用可能になっていません」の文字が・・)
128 :
デフォルトの名無しさん :02/01/11 15:59
>>125 Delphi ProにできてPersonalにできないことはない...
もちろんそのままじゃだめだけどさ。
なぜってProとの差はほとんど再配布可能ファイルとフリーソフトだからさ
>>126 っと、使用環境はIIS5.0のWin2000、
んでDelphiは5.0のprofessionalです。
>>111 直接的、あるいは間接的にお金を受け取りさえしなければ良い。
ライセンス読もうね。
TWebBrowser使ってちょっとしたお遊びツール作ってます。 COMについてよく知らないんですが、TWebBrowserってCOMコンポーネントですよね。 COMはQueryInterfaceで使うとか、_Addref,_Releaseで管理するという話を聞きました。 TWebBrowserの場合、それらは必要ないんでしょうか。 とりあえずポトリペタで使えてしまうのですが。。。 よくわからないです。ポインタでも結構ですので、詳しい方アドバイスお願いします。
ブラウザサンプルが付いてたような
>>131 のリンク見てないの?
SSIEnableCmdDirective
REG_DWORD
範囲 : 0、1
既定値 :0 (有効)
サーバー側インクルードの #exec cmd ディレクティブがシェル コマンドを実行します。
EXE のプロパティで ユーザに対して実行アクセスを許可しなければいけないのは判ってるよね
>>112
137 :
デフォルトの名無しさん :02/01/11 23:16
>>133 あ、オレも知りたいなっと。
ところで、delphiマガジンって、まだ本屋で見たことないんだけど、
幻の雑誌?
それとも取り寄せないと読めない愉快な雑誌?
普通に本屋で売ってるけど,取り扱い店が少ないのかも.
139 :
デフォルトの名無しさん :02/01/11 23:24
>>138 売ってるんだ!見たこと無い。本屋寄る度にチェックしてるのだが…。
VBやCはあるね。
140 :
ななしヘタぐらま ◆B18Bks.Y :02/01/12 00:14
>>139 発行元が非常に小さいところ,
というかDelphiマガジンのために設立したような感じですね.
扱っている店が非常に少ないのは
発行部数の問題もあるでしょうけど,
書店流通は新規参入の会社の商品はまず扱ってくれないらしいので,
それも影響していると思います.
でっかい本屋でしか見たことない。 定期購読出来るから、そっちにしたら?
なるほどサンクス>教えてくれた人 現物見て内容を吟味して値段を考慮しないと、なかなか定期購読はね…(^^;
>>133 ソース読めばわかりますが、その辺はオブジェクト生成時にやってしまってます。
おっと、それはQueryInterfaceに関してだった。 ま、とりあえず、その辺の面倒なことはTWebBrowserの親のTOleControlがやってくれてるみたい。 その辺やってくれないと、コンポーネント貼り付けで手軽に出来ないしな。
COMオブジェクトのAddRef/ReleaseはDelphiのinterface型が勝手にやってくれる。 だから、変なことをする場合以外は自分では何もしなくても平気。 QueryInterfaceはinterface型に対してasを使えばいいだけ。 COMコントロールはDelphiで取り込んだときにポトペタで扱えるところまでは、 Delphiが勝手に必要なコードを作ってくれる、だからTWebBrowserはポトペタ で使えるし、それで大丈夫。
解説ありがとうございます。動的に生成するのでない限りはDelphiが自動でやってくれるということですね。 そういえばフォームに置いたボタンとかも勝手にCreate,Freeしてくれますしね。 Personal版なので、その辺は想像するしかないのですが。
動的/静的はまったく関係ないぞ、よく読め
えーと、「フォームに貼ったとき」はオブジェクト生成は自動的にやってくれる、という理解でよろしいでしょうか。 それでAddRefとReleaseによってinterface型が自動的に管理してくれる、と。 146さんのをよく読んでませんでした。 そういえば、DelphiもJavaみたく参照で扱うのですべて動的と言えるんでしょうか?
150 :
デフォルトの名無しさん :02/01/12 18:26
MDBのテーブル(Access97)をDelphiのコンボの中のアイテムとして出力したいのですが・・・ 教えて下さい
>>150 普通に、TDBLookupComboBoxを使うのではダメなの?
それか、TComboBoxに流し込むとか。
トラフィック・負荷・速度を考えると前者、細かいところをイジリたいなら後者かな。
152 :
デフォルトの名無しさん :02/01/14 16:03
TListBoxとTCheckListBoxなのですが、 ListBox.Items[0] := 'A'; は大丈夫で CheckListBox.Items[0] := 'A';だとエラーがでるのは仕様なのでしょうか? なんか納得がいかない・・・。(del4,del6で確認しました)
>>152 ソース見たけど分かんなかったよ。
でも、通常は存在しないアイテムに代入することはないと思うので
いいんじゃないかな。
>>153 いや、TListBoxの内容を書き換えるときに使ってたのですが、
これだとItemIndexやSelectedをとばさずに、1部だけListBoxの
内容を書き換えられたのですが
ListBox.Item[RewriteIndex] := RewriteText;
という感じで、
これと同じことをTCheckListBoxですると、なぜかエラーがでてしまう・・・。
今は、
CheckListBox.Clear;
CheckListBox.Add;
CheckListBox.Checked;
CheckListBox.ItemIndex
を組み合わせてプログラムを書いています・・・。
CheckListBox.Item[Index] := String;さえ使えればこの手間が省けるのに。
ヘルプをみてもエラーになる理由が書いてない、というよりもTListBoxと
一緒なのが。
あと、これとは関係ないけどDel6で今書いているプログラムステップ実行をすると
確実にハングアップする部分があります。
なにも派生してないTListにポインターを放り込むだけなのに・・・。
止まる部分は
List.Items[Index] := Pointer;
と、止まりようがない部分でDelphiが固まってしまいます。
その部分だけステップ実行をしないようにすると平気で動くのに・・・。
どうもDel6のIDEはメモリ操作がらみでバグがありそうな気がする。
絶妙のタイミングでListがnilってるときに呼び出しちゃってるとか。
156 :
デフォルトの名無しさん :02/01/14 22:26
>>155 うーん、これだとメモリ書き込みがらみのエラーが出るんですけど・・・。
ってゆうか、Step実行でDelphiがとまってしまうのは何でだろう。
プログラム自体は正常に動くのに・・・。
Delphiのコンポーネントライブラリは便利だけど、意味不明な
エラーが出てくると対処に困る・・・。
>>156 そのコードだけ新規プロジェクトに移してステップ実行してもまだ起こる?
158 :
そすぃんさ :02/01/14 23:48
「ActiveXの取り込み」でコンポーネントに登録したヤツを 使用して作成したアプリには「どの程度」まで含まれてコンパイルされるのでしょうか? 例えばrealmediaのプレーヤとか…。
159 :
そすぃんさ :02/01/15 00:30
補足説明: ちょっと意味不明ぽかったので…。 ようするに、「配布先は、そのアプリ以外に入手するべきものがある」のか無いのか が知りたいのですが…。まだよく分からん気もするな…(^^;。 realプレーヤを作ったとして、配布した場合、必要なdllとかは先方が用意する 必要があるんですよね? ※ウザかったら失せますので…※
COMコンポーネントの実体はたいていDLLなので、配布先にも同じバージョン以上のDLLがインストール されている必要があると思われ。
161 :
そすぃんさ :02/01/15 01:02
>>160 あ、やっぱり…。ということは、「ActiveXの取り込み」でコンポーネントに登録したヤツを
使用して作成したアプリ(長い…)は自由に配布出来るワケですよね?
dllは先方がインストールするなりして用意する必要があるということは。
レス、ありがとうございました!
162 :
デフォルトの名無しさん :02/01/15 01:07
IDEから実行した場合、nilの時、止まるってのはうちでもなる。 が、プログラム自体が正常に動くってのがわからんな。 DirectXのアプリでLockからUnlockまでの個所内はデバッガが止まっちゃう ってことはあったけど。
>>163 DirectX の Lock/Unlock は win16mutex を使っているから
そこへステップインするとハングするのは OS の仕様。
激遅レスですが、112です。
>>131 >>135 の情報を元にレジストリの変更を行って、
どうにか <!--#exec cmd="cmd.exe /c dir"--> ←こいつは動くようになってくれました。
でも相変わらずexeファイルは動いてくれない・・・
「スクリプト './xxx/test.exe' を実行できませんでした: Win32 エラー コード = 2」←エラーメッセージ
#EXEC の呼び出しに対して使用可能になってないよーのエラーよりは若干進歩したようですが・・・
こんな厨房の質問にお付き合いできる方、引き続きご教授お願いたします。
自己レスです。
SSIを呼び出しているアドレスを「
http:// ~」から「D:/~」に変更したら動いてくれました!!
あ゛~長かった、色々付き合ってくれた皆様に感謝いたします。
NetUserEnum などの関数が使いたいのですが、 netapi32.lib の宣言した pas は標準ではついてないようです。 (Delphi Ver5 を使用しています) 自分で起こすしかないんでしょうか。 どっかにころがってないですかねえ?
>>168 いやいや、
google で「NetUserEnum delphi」とか
「netapi32.lib delphi」で検索したら
関係ないのしかヒットしなかったんで
ここでの質問したというわけのです。
ずばり「netapi32.pas」で検索すればよかったんですね。
というわけでスペシャルサンクス!!
>>168
> ここでの質問したというわけのです ここで質問したというわけなのです もうだめだ俺・・・逝ってきます
>>162 いろいろやってみて、TListBoxとTCheckListBoxの微妙な違いがわかってきました。
基本的には153さんが指摘したように、存在しないItemにStringを代入したときに
どのような処理を行ってるかなのですが、
TListBox(TCustomListBox)では、Index-1までItemが書き込まれている場合、
なにも書き込まれていないItem[Index]に文字を代入できるが、
TCheckListBoxでは文字の代入はできるが、ステータス保存用に拡張された
部分がこの状況に対応していないため、Listのインデックスの範囲が越えて
しまうようです。
TCheckListBoxで項目を書き換えるときのプログラムは
if TCheckListBox.Count = RewriteIndex //プログラム処理上Count<=RewriteIndex
then TCheckListBox.Add(RewriteText) //にしかならないようにしています。
else TCheckListBox.Items[RewriteIndex] := RewriteText;
に書き直しました。
>>172 すみません、TCheckListBoxでの処理を上のように書き換えると
メモリリークが生じるようになりました。
詳しく調べてみると、
TCheckListBox.Items[Index] := String;
の処理だけで、メモリリークが生じます・・・。
TCheckListBox.Add('12345678');
for i:=0 to 63353 do TCheckListBox.Items[0] ;= '12345678';
で、1MBほどメモリがリークします。
どうも、TCheckListBoxはステータス保存リスト処理がらみでバグが
有りそうです。
でわでわ。
174 :
デフォルトの名無しさん :02/01/15 16:48
うちも、特定のソースで、ステップ実行のときとコンパイル時に、 訳の分からない動作をします。 やっぱりDel6はバグっているのだろうか?
>>訳の分からない動作をします。 それを説明してくれないと誰もコメントをつけることはできない。 たいていのバグは自分自身から。
>>171 > Torry's
> に行って、NetAPI で検索すると4つのコンポーネントが
うわお!ヒットしました、さっそく落としてみます。
感激です!!
>>171
177 :
デフォルトの名無しさん :02/01/15 21:44
Delphiでは整数→列挙型の型変換をすることはできないのだろうか? 調べた限りでは列挙型→整数はOrd()関数で出来ることが判ったのですが。
TMyEnum(IntValue)
型変換だけでよいのなら type TFoo = (a, b, c); var Bar : Byte; Foo : TFoo; begin Bar := 1; Foo := TFoo(Bar); Assert( Foo = b ); end;
180 :
デフォルトの名無しさん :02/01/16 04:17
>>175 まあ、それはそうなんだけど、TListの派生コンポで
ステップ実行していて
inherited Items[Index] := P;
でDelphiごととまられてしまうと、どこが悪いかまったくわからないよ。
普通に実行すると、何事もないのに。
あと、173の件ですが、もうちっと詳しく調べてみると
TcheckListBox.Items[Index] := String;1回につき16Byteメモリリークしてました。
やっぱり、ちゃんとVCLがついているバージョンを買って自分でバグ取りを
しないといかんのかなー?
>>180 TCheckListBox.Itemsは駄目だろう。
182 :
デフォルトの名無しさん :02/01/16 05:01
>>181 なんで?実際に使うときは
SelectViewCheckListBox: TCheckListBox;
とかにしてから(Formに貼り付けてから)
使ってるけど?
TListView を使えばいいのに…….
>>182 なら、実際に使っているコードを載せてくれ。
確認してくれる奇特な人に打ち直しさせるきですか?
と思ったけど,そういえば OwnerData だと CheckBoxes が有効にならないんだったっけ
OwnerData := True にして OnAdvancedCustomDraw で描画 GetHitTestInfoAt で判定 以上,独り言.
>>184 一応ソースです。
フォームにButtonとCheckListBoxを張り付けてから、
----------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
begin
CheckListBox1.Items.Add('Test');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
CheckListBox1.Items.BeginUpdate;
for i := 0 to 65535 do CheckListBox1.Items[0] := 'Test';
CheckListBox1.Items.EndUpdate;
end;
----------------------------------------------------------
これ、Delphi6(Update1)だとボタン一押しで16*65536=1MBずつメモリ使用量が増えるのに、
Delphi4だと問題ないんだよなー。Del4と6でTCheckListBoxのVCLどこが変わってるの
だろう?professional以上持っているひと教えて!!
英数字の2バイト文字を1バイト文字に変換するには?
Del4 の TCheckListBox ではチェック情報を Objects に保持していたと記憶しています ソースがあっても参考にならないでしょうね
>>189 function ZenToHan(const Source: string) : string;
begin
Result := MapString(Source, LCMAP_HALFWIDTH);
end;
出典くらい明記しろ。
http://www.wwlnk.com/boheme/delphi/vbtodel/vbfaq/vbd0050.htm それに以下を定義しないと...
function MapString(const Source: string; Flag: integer): string;
var
Chr : array [0..255] of char;
begin
Windows.LCMapString(
GetUserDefaultLCID(),
Flag,
PChar(Source),
Length(Source) + 1,
chr,
Sizeof(chr)
);
Result := chr;
end;
>>193 がんばったようだが、全部的をはずしている。
195 :
デフォルトの名無しさん :02/01/17 16:52
Delphi6のADOでoracleに接続してデータを表示すると、マイナス数字の”-”の部分が表示されません。 何が問題なのでしょうか?
196 :
デフォルトの名無しさん :02/01/17 18:10
197 :
デフォルトの名無しさん :02/01/18 16:52
アイコンが入ったDLLは、 16色アイコンしかつくれないのでしょうか?
>>197 白黒や256色のアイコンもリソースに入れられますよ。
ただし、Delphi付属のImageEditorでは256色アイコンが作成出来ないので、
別途アイコン作成ソフトなどを利用してアイコンを作成する必要があります。
199 :
デフォルトの名無しさん :02/01/21 23:18
例えば何らかの「画像ファイル」を表示するアプリを適当に 作ったとして、そのファイルは出来たアプリにどのような形で 入ってるんですかね? 結果的にバイナリでくっついちゃってるんですかね? 変な質問ですか?(^^;
作り方によるよ。 bitmapファイルとして読み込むように作れば当然別ファイルになっているし、 リソースとして結合することもできるし。 独自形式でexeの後ろにくっつけておくこともできる。 関係ないけど200げっとズザー
言葉だけズザーって言ってもAAないと何の感慨も湧かん。
>>200 ははぁ。そうなんですか。ありがとうございます。
後から読み込むのではなくて、「決まった画像をImageコントロールに
表示させるだけ」ってヤツはどーなってるのかな?と思った次第でして。
その場合は、バイナリでくっついちゃってるんですよね?
「ズザー」ってあのAAのズザーか(^^;
>>198 何か「16bitリソースは扱えない」とか怒られてしまいました。。
もっと根本的なところから勉強してみます。
>>202 とりあえずリソースハッカーというのを探してごらん
\\\ \ \\ \\ヾ__ ∧_∧_ヾ\ \ \ \ (*´∀`)_\ \ \\ | ̄ ̄∧∧ | ヾ \\\ ヾ |\ ミ;゚Д゚ ∧_∧ \\\ | ̄ ̄ ( *・∀・) 今だ!205番ゲットォォォォ!!! \\\ ヾ |\ ̄/っ y っ\ \\ |  ̄ ̄ ̄ ̄ ̄ |
>>198 brcc32でつくることができました。ありがとうございます。
とりあえず自分用の「icoファイルをまとめてDLLにする」ソフトをつくってみようと重います。
207 :
デフォルトの名無しさん :02/01/22 17:10
Delphiでアクセス解析を作ろうとここ数週間がんばってる厨房が質問スレに戻ってきてしまいました・・ 環境変数からアクセス者のドメイン(「*.*.プロバイダ名.ne.jp」形式のもの)を取得したいんですけど、 なぜかIP(「数字.数字.数字.数字」形式)ばっかり返ってきてしまいます。 環境変数名はキチンとREMOTE_HOSTで取得してるのですが・・・ (本来、IPを返すのはREMOTE_ADDRの方ですよね??)
だったらそのIPを ドメインにかえちゃえば?
GetHostByAddrつかって
>>208-209 GetHostByAddrですか?
初めて聞く単語なんで(←ぉぃ)それを少し調べてからもう一回戻ってきます。
すごい良さげなヒントありがとうございます。
もう少しいうと inet_addrもつかう
212 :
デフォルトの名無しさん :02/01/22 18:34
逆引きできないところからのアクセスばっかしとか
(´-`)oO(バッチファイルとwshになってしまった)
結構wshは使えるよね
216 :
デフォルトの名無しさん :02/01/24 10:12
DelphiをつかってNTPの扱い方を書いてあるページとか、文献無いですかね?
217 :
デフォルトの名無しさん :02/01/24 11:28
#bye #end
220 :
デフォルトの名無しさん :02/01/27 21:14
既出かも知れないけど? Formを持ったアプリケーションで、 タスクバーにアプリケーションアイコンを出さない簡単な方法あります?
222 :
デフォルトの名無しさん :02/01/28 08:45
223 :
デフォルトの名無しさん :02/01/28 09:27
>>223 いやあのそのですねハイ。
それ展開したら「WinSock2.pas」と「svcguid.pas」ってのができたんです。
んで、コレ何だろう、コンポーネントなんかな?とか思って別プロジェクト
立ち上げて「コンポーネントのインストール」をやってみたのです。
でも何にもできないし。
たぶん壮大な勘違いな予感なんですけど、何処でどう勘違いしたのかもわからない。
とりあえずコイツを動かしてみたいんです。
>>224 なんだ、中身は単なる宣言だけじゃん。
これ、コンポーネントじゃなくてヘッダみたいなもんだよ。
これをusesしておけばWinsock2の関数が呼べる。
後はWinsockの知識があるかどうか。
>>225 ありがとうございます。コンポネントじゃなかったのですね。
って事で「Sock2.dpr」とやらにTFormを追加。usesに
WinSock2,svcguid,
を加え、WinSock2と打ってみた所、候補がズラリ。
・・・でもなんか嫌な予感。内部定数まで見えてんの?コレって感じで。
そのまま↓キーをずっと押してたら、スタックオーバフローで逝ってしまいました。
どの辺で道を間違えたのでしょう?
227 :
デフォルトの名無しさん :02/01/28 10:52
>>222 >>223 delphi = コンポーネントと思っている厨房
Winsock2は非同期オブジェクトを使うためのものなので
なんだかわからないならば使いようがないのだけど
どの辺で道を間違えたかっていうか
根本的にDelphiがわかってないだけ
コンポーネントしかわかんないのならWinsock2使ったコンポーネントを使えば良し
228 :
デフォルトの名無しさん :02/01/28 10:54
>Winsock2使ったコンポーネントを使えば良し 俺も今これを探してるところなんだけど、何かお勧めってある?
229 :
デフォルトの名無しさん :02/01/28 11:10
訳あってdelphiで何かを作らなくてはいけなくなってしまって 何を作っていいかわからずこまっています みなさんどうかお知恵を貸して頂けませんでしょうか? 他の言語の経験もありませんしdelphiの経験すらありません よろしくお願いします
>>229 とりあえずどんな分野に興味がある?
1)ネットワーク関係
2)ゲーム
3)データベースとか会計ソフトみたいなの
>229 どんな訳じゃ
>>229 手始めに乱数を使った単純なゲームを作ってみるといいよ
電卓とコンピュータの違いがよく分かる(・∀・)
>>230 ありがとう。
つか勉強なるわコレ。
Delphi使った事なかったから知らんかったんだけど、
なんやコレVCとJAVAとVBのいいとこ取りみたいな言語なんね。
240 :
デフォルトの名無しさん :02/01/28 15:19
正規表現の質問です。 文字列型の変数同士を比較する時に、双方の文字列が完全に一致するのではなく 変数の中の一部だけを一致した場合にtrueを返すような書き方ってどうやるのでしょうか? 例えば変数aに文字列'abcde'が入っていて 変数bに文字列'cde'が入っていて、それを比較した場合にtrueを返すような感じなのですが・・・ if(a = '*'+b+'*') then begin TorF := true; end else begin TorF := false; end; ↑試しにこんなん書いてもダメだったんで(汗
>>240 TofF := Pos(a,b) > 0;
ゴメン × TofF := Pos(a,b) > 0; ○ TofF := Pos(b,a) > 0;
>>241 おぉ!できました!どうもありがとうございます!!
(
>>242 は手元で試したらすぐ気づきました、どうもです)
>>243 マルチバイト文字(ファイル名などはその可能性がある)を扱う時は
PosをAnsiPosに替えましょう 「DELPHI クイックリファレンス」より
245 :
デフォルトの名無しさん :02/01/28 15:54
タブをなんらかの文字に変える拡張モジュールとかないですかねぇ? スペースとタブの区別がつかなくて
StringReplace
>>245 IDE上の話?
俺はタブは使わないけど。
248 :
デフォルトの名無しさん :02/01/28 17:30
>>248 そのようにはいかなさそうなのでスペースのみに変えたよ。
結局常用のテキストエディタもスペースのみになってしまった。
250 :
デフォルトの名無しさん :02/01/28 17:45
getoptみたいなParamCount/Strのラッパークラスってない?
>>250 そのクラスで何をラップするの?
ParamCount/Str って、もう充分ラッピングされている
と思うが? グローバル変数だし。
これも FindCmdLineSwitch
OS製品と言語製品がクチャクチャになってるし 鯖ってもんがわかんねーなら既成CGI使えよ もうだめぽ
>>253 MLネタだね。
サーバをWinにすると、Delphiは無駄にならない(w
しかしこの程度の奴にサーバを公開されたらたまらんね。
ダイアルアップでサーバを公開したらIPがどんどん変わるので困ります HPも.comとかになってくれません バージョンが上がり今やDelphi6となっていますが、やっぱり無理なのでしょうか? このままではDelphi6を買った意味が無くなってしまいます・・・
>>254 アメリカには Delphi で作った ISAPI のホスト業者があるのよ..
条件はソースの提供。
260 :
デフォルトの名無しさん :02/01/29 10:33
>>258 あー。そういう商売もいいかもなあ。
日本にあるWindows鯖屋で人が集まらないとこは、そういうサービスを始めるといいかもしれんなあ。
でも、MLとかみると、無茶苦茶やりそうな人がいるから怖いなあ。
>>261 山田く~ん、座布団1枚取り上げなさい。
>>260 >無茶苦茶やりそうな人
そのためにソースを出してもらう。コンパイルもサーバー側で行う。
管理者がいちいちソース見なきゃならないのか 大変だなぁ
265 :
デフォルトの名無しさん :02/01/29 12:52
>>265 IDE のプロジェクト -> オプション
ディレクトリ/条件タブ
>266 ありがとう。 やってみたんだけど、?って感じ。 やっぱフォームが表示されるとき、タスクバーにアイコンが出る。 フォームを非表示にすると消える。 ただ単にform1.Hide;ってやっても同じような気がする・・・
268 :
デフォルトの名無しさん :02/01/29 16:59
>>255 DinamicDNSにするとかFTPクライアントと組み合わせて
動的に入り口を変えればいいだけ
ちなみに自分のIPはSMTPサーバーで対応しているところに聞くか
POP3で一回メールのやり取りをするか確認君みたいなサイトを利用するかでわかる
つーか今日日ダイヤルアップサーバーなんてやめてADSLにすれば?
>>268 ネタか?
関係ないけど、俺の住む町はADSLどころかフレッツISDNすら来てない(なく
お前
>>268 さ、かなり妄想入ってるよな
もさとかばっかしやって、自分で情報収集しない奴は駄目なんだぞ
しかも何だよ、「動的に入り口を変える」って
ろくでもない事言ってないで、もっと具体的な方法で示してやれよ
いちいち俺に注意させるなよ。わかったか?
>ちなみに自分のIPはSMTPサーバーで対応しているところに聞くか >POP3で一回メールのやり取りをするか確認君みたいなサイトを利用するかでわかる そういうのを使わないと確認できない程度の知識で何を偉そうに・・・。
ネタをネタと見抜けない悲惨な268がいるスレはここですか?
273 :
デフォルトの名無しさん :02/01/30 10:10
DelphiでDiff取るunitってない?
>>273 diff.exe をプロセスとして呼び出すのが簡単なように思うけど?
>>270 ねた?まじでわかんないの。つうか
MXなんて違法ソフトは使ったこと無いけれど
>>271 知らないの?自分のインターネットアドレスを知る方法ってないんだよ。
それともダイヤルアップしかしたこと無い?
まさかトレースルートで自分のグローバルアドレスわかると思っている?
最近無知ごりおしする厨房多くて困るねまったく。
>自分のインターネットアドレスを知る方法ってないんだよ。 あるよ。アフォ?
うわっ、マジレスだったのか。 255がネタだってことが理解できてないのか・・・。
>>275 MXが違法ソフトと思っている時点でかなり香ばしい。
違法な使いか確か思い浮かばないんだろうな。
>>275 申し訳ありませんが、あなたがどうやってネットに接続してるか教えてもらえないでしょうか?
どういう接続なら外(SMTP、POP、確認君)にアクセスしないと自分のIPアドレスを知ることが
できないのか知りたいのです。
合法かつ有益な使い方なんてねーよ おばあちゃんの秘伝のレシピでも公開するのか?(藁
アウトロウ気取り登場
>>275 お客様、ここは釣堀ではございません。いますぐお引取りをお願いいたします。
とりあえず縦読みから勉強しろ
284 :
デフォルトの名無しさん :02/01/30 15:47
素人質問ですいませんが、教えて下さい。 DBGridコントロールを使い、新規レコードに移動した際に、 フォーカスを1番目の項目に移動したいのですが、 DBGrid1.SelectedIndex := 0; こう書くしかないのでしょうか? 何か項目名を指定して移動させる事はできないのでしょうか よろしくおねがいします
=三|...................................................................................................................... =三|...お も い き り は め ら れ た........ ── ...................... =三|................................................................/ \................ =三|..........気 が す る モ ナ …...../ .......................... =三|... ... ... ... ... ... ... ... ... ... ... ... ../ ... ... ... ... ... ... ... ∧_∧.. .. .. .. .. .. .. .. .. .. .. .. | |.. .. .. (三 |). . . . . . . . . . . . . . . . | |. . . . ~|三 ,). . . . . . . . . . . . . . . . . . . . . . . . . /. . . . ヽ三 ). . . . . . . . . . \ . . . . . ;" ̄ ̄ ̄ ̄ ̄ ̄ ̄@. . . . . . ー __ /. . . . . ミミミ_、-─" ̄. . . . . . . . . . . . . . =三| ̄ ̄. . . . . . . . . . . . . . . . . . =三|
DelphianWorldで、 統合アーカイバコンポーネント for Delphi/C++Builder はどうしてダウンロード数が多いのでしょうか? 2位に倍近い差をつけていますよね。。。
>>284 項目名からインデクスを検索させる関数を作成するのが簡単
function FindDbIndex(db:TDBGrid):Integer;
>>286 プログラマなら一度は書庫ファイルを扱ってみたいようですね。
290 :
デフォルトの名無しさん :02/01/31 20:26
ダレかActiveFormの作り方おせーて! ウィザード実行したはいいが、プロパティの追加方法とかじぇんじぇんわかりません。 タイプライブラリでプロパティ追加しても、ユニット上から値が参照できないんですが
>>290 XX_TLB.pas の方で
IHoge = interface(IDispatch)
と定義されてるでしょ?
プロパティもRead/Write両方メソッドになってますよね?
実装の方も それと同じメソッド名にします
ActiveXを動かしてプロパティを読み書きするとそのメソッドが呼ばれるという仕掛けです
292 :
名無し~3.EXE :02/01/31 22:02
TaskBarを縦においたときに、幅を変更したいのだが サブクラスしないと無理なのかな。 SHAppBarMessageとかSetWindowsPos, MoveWindowとか いろいろ試したけど、どれもだめだったよ。 なぜ、幅を変えたいかというと、WindowsXPでTaskBarを 縦においたとき、再起動するたびに幅が縮むからです。 どなたか、お知恵を。。。
サンクスです。 また質問あったらよろしくです...
294 :
デフォルトの名無しさん :02/02/01 00:10
>>290 タイプライブラリからプロパティ足せるよ。
統合アーカイバコンポーネントがダウンできるのは Delphian World だけ
296 :
デフォルトの名無しさん :02/02/01 09:32
コンボBOXで ドロップダウンには '1:せつめい' '2:なんとか' みたいに表示して、選択したら1,2だけ入力するようにしたくて OnChange/OnClickとかでコードを追加してみましたが巧くゆきません ではそういうコンポーネントTMyComboBoxを作ろうと procedure xCB_GETLBTEXT(var Message: TCBGETLBTEXT); message CB_GETLBTEXT; を追加してみたのですが、確かにtextプロパティは変更されてるのに最終的には '1:せつめい'のように戻ってしまいます それで procedure WMCommand(var Message: TWMCommand); message WM_COMMAND; として無理やり変更すると巧くいったようなのですが、次にドロップダウンした時 にTextがまた元に戻ってしまいます。巧くやる方法はないでしょうか? procedure TMyComboBox.WMCommand(var Message: TWMCommand); var s:string; n,idx:integer; begin if Message.NotifyCode = CBN_SELCHANGE then begin idx:= ItemIndex; if idx>=0 then begin ItemIndex:=-1 ; s := Items[idx]; n := pos(separetor,s); if n>0 then s:=copy(s,1,n-1); inherited; Text:=s; Click; Change; exit; end; end; inherited; end;
>296 CBN_SELENDOK とか CBN_SELENDCANCEL も見る必要があるかもしれない。 でも、いっそオーナードローで全部自分で描いた方が面倒がないと思われ。
>>297 レスありがとうございます
あれから、色々実験してドロップダウンして勝手に元に戻るのは
補完機能のようなのがcomboBoxに備わっているからのようだと判りました
結局 WM_GETTEXT で無理やりセパレータの部分に#0を代入する事にしました。
最初からオーナードローにした方が簡単でしたね。
楽しようとして失敗するパターンのようです。
299 :
デフォルトの名無しさん :02/02/01 14:56
ソース開こうとしたら「TTimeAnalyzerが見つかりません」って言うエラーが出てきます。 これって何か必要なのですか? Delphi初心者です。
仕事のやつです。 他の人が作ったやつでそれのメンテしようと思ったら以上のようなエラーが出ました。
>>301 標準のコンポーネントやクラスじゃないみたい(Del6Entのヘルプにもない)
TTimeAnalyzer.pasを検索してみるといいよ
多分、そこへのパスが通っていないのだと思う
>>302 いけね
× TTimeAnalyzer.pas
○ *.pas
とにかくライブラリを探そう
>>302 自分が使ってるのはDelphi6proです。
どうやら標準ではパス通ってないみたいです。
探してみます。
305 :
デフォルトの名無しさん :02/02/01 15:53
作った人に聞いたほうがいいような。。。
>>306 ハードディスクの中から Grep したら?
Grep判らなければ エクスプローラの検索でね
>>306 たぶん、他の人がコンポーネントとしてインストールしたものに依存しているのだと思われ。
用意に手に入るものでない(作った人がいない)ならあきらめるしかない
309 :
デフォルトの名無しさん :02/02/02 03:01
昨日、Delphi6インストールしたんだけど、ヘルプが変。 環境: windows98SE Del4とCB5をアンインストールした後Del6を標準インストール 現象: 1)Delphi6を立ち上げる。 2)表示されたTForm1を選択(クリック)してから、F1キーを押す。 3)ダイアログが出たら、TForm (VCL Refarence)を選ぶ。(出ない時もある) 4)TFormのヘルプが出る。<<<ここまでは正常 5)ヘルプウインドウのメニューから、キーワードを選ぶ。 6)目次のタブをクリック。目次が出るはずが、何も表示されない。 7)キャンセルでダイアログを閉じようとすると、「このプログラムは不正な 処理を行ったので強制終了・・なんたら」でヘルプウインドウが逝く。 あと、4)の後Form1をクリックしてF1キーを繰り返すと、ヘルプウインドウが逝く。 6.1アップデート入て、Delphi6.ohx、使ったりしても改善しない。 誰か、同じ現象の人いませんか。
「ヘルプを頻繁に見る&ヘルプ以外は正常」だったらどーでもいいのでは? ヘルプが必要だと困るかも。 ま、変なら他も疑うべきか…。
>6.1アップデート入て、Delphi6.ohx、使ったりしても改善しない。 ちゃんと .gid 消した? 1-4 やらずにヘルプ広げても落ちるの?
>ちゃんと .gid 消した? 消しました。 C:\Program Files\Borland\Delphi6\Help\*.gid ですよね >1-4 やらずにヘルプ広げても落ちるの? メニューからだと、大丈夫。エディタからF1でも平気みたい。 コントロールを選択して。F1キーの時がダメみたいです。
>>312 W2k でやってみたけど再現せんな。
Win9x で要追試。ってとこですね。
>>309 の追加情報です。
何故か、C:\WINDOWS\HELP\Delphi6.gid が出来ていたので、消しました。
.gidを消した直後は、逝きませんでしたが、何回か同じことをするとやっぱり逝きます。
メニューから ヘルプ(H) → Delphiヘルプ(D) を選ぶと、Delphi6.hlpを見に行くけど、
コントロールを選んでF1キーを押すと、Del6vcl.hlpを直接見に行っているみたい。
Open Helpって意識したこと無かったけど、これって仕様?
Delphi使うときは、Help窓ほとんど開きっぱなしなんです。Help窓開いた状態でF1キー押すと
高確率でhelp窓が死んでしまうので、かなり不便。本体には影響ないけど。
みんなF1ヘルプって使わないのかな?
>315 使ってるけど、そんな症状がでないのよ。
だよね。 いまどきwin98つーのがいけないのかなぁ それとも、変なのはウチのDelp君だけ? 同じ症状の人がいたら、Borlandに問い合わせようと思ったんだけど。
318 :
デフォルトの名無しさん :02/02/02 13:51
質問っス。 Delphiで作ったDLLをVCで呼び出そうとしてるんですが、 Del側で function AnFunctionName( var sHost : PChar; sUserID : PChar ): bool; export; ... exports AnFunctionName index 1; で宣言した関数を、VCのヘルプにならって typedef UINT ( CALLBACK* LPFNDLLFUNC1 )( LPCTSTR, LPCTSTR ); ... HINSTANCE hDLL = LoadLibrary( "MyDLL" ); if ( hDLL != NULL ) { LPFNDLLFUNC1 lpfnDllFunc1 = ( LPFNDLLFUNC1 )GetProcAddress( hDLL, "AnFunctionName" ); if ( !lpfnDllFunc1 ) { FreeLibrary( hDLL ); return SOME_ERROR_CODE; } else { bool ReturnVal = lpfnDllFunc1( ( LPCTSTR )CString型のメンバ変数, ( LPCTSTR )CString型のメンバ変数 ); } } でやっても、関数の呼び出しのラインでエラー起きるんです。 Delphiから呼び出したときはうまく動きました。 ひょっとして凄い勘違いしてます?
>>318 即レスで試してないのでいいかげんアドバイスだが。
呼び出し規約の問題かも。
cdecl; export; にしてみ
>>318 register cdecl stdcall を Delphiのヘルプで調べてみたら?
cdeclじゃなくてstdcallだったかも
かぶってたか Delphiのデフォルトの引数スタイルはregister これはVCのfastcallとは互換ではない VCは _cdecl がデフィルとのスタイル こういう場合 APIと同じ stdcall に双方するのが良いと思う それと LPCTSTR だと オプションによってunicodeという扱いになるから注意
レスサンクスです。 Cdecl; と Stdcall; Register各々でコンパイルしなおしたんですが、 やはりダメでした。 VCからでは呼び出せないんでしょうかね... もうちょっとやってダメなら、Cスレにでもポストしてみます。
シンボル名に_が付く付かないって関係なかったっけ?
GetProcAddress は成功した時の関数呼び出しでおかしくなるんだよね? Delphiを立ち上げといて VCで作ったアプリを実行時引数のホストアプリケーションにして AnFunctionName でブレークポイントかけたら・・・ あ! var sHost : PChar; sUserID : PChar だから呼び出す方は LPCTSTR & , LPCTSTR じゃないとダメじゃないの? 双方stdcallにして やってみて?
フサギコさんのスレが何処かに行かれた様なのでこちらで、 メールで受信した場合の添付ファイルでBase64でエンコードされた pDA6rdFUeg7AVQca2fY+LhIgeNqQTwahRCwFHAART18V0ackp/1lWPfxjCe9OONeCCDpdFDeOoqq 1nUV6OSQw06SrUh24u3zY5CTP7bEmKRfKpEEGYk59aNyurYrBiJKlEKC06i2JBOL8qeVgDmkvp5b Yk2M5+RgEPKJSuEZlNYPYKthvyNHNFG2vmHE2FKjGAD3PJWRSo48qJKOEhylWFjPM5/ki+GPXRSh みたいなのを元の画像ファイルに戻すにはどうすれば良いのでしょうか? jconvertなんかを使ってみましたが的を外していますか? どなたか教えてください。
>>326 なんにも的は外れてないと思うが? 何か不便なの
>326 フサギコスレは禁句(w Indyに TIdBase64Decoder ってのがあるんだけど、どうだろ? 俺その辺全然知らないんだけどさ。
>>327 str = 'ややこしい文字列';
stl := TStringList.Create();
stl.Text := jconvert.DecodeBase64(str);
stl.SaveToFile('aaa.jpg');
stl.Free;
等としても上手く行かないのです。
やり方がまずいのでしょうか。
>>328 あれ、禁句なんですか?暫く来てなかったもので。
早速TIdBase64Decoder いじくってみます。
>>329 「どう うまく逝かないのか」
を説明するべきと思われ
ダメなのは、一旦 TStringsにしてるからじゃないの?
ストリームを使ってファイルを開いて
var s:string;
s:=jconvert.DecodeBase64(str);
xx.Write(PChar(s)^ , Length(s));
としてみたら?
Delphiで小さな実行ファイルを作ろう
http://pc.2ch.net/test/read.cgi/tech/1009080085/ これの 22の ソース使って
writeFileStr( 'aaa.jpg', jconvert.DecodeBase64(str))
とやれば一番簡単かもね
>>331 後者の方法を使ってうまく行きました。
みなさんありがとうございました。
>>325 さん、レスありがとうございます。
VC側を
typedef BOOL (__stdcall *ANFUNCNAME)(
LPCTSTR &,
LPCTSTR);
DLLを
function AnFunctionName( var
sHost : PChar;
sUserID : PChar): bool; stdcall;
としたところ、呼び出しはうまくいったようです。
ただ、
FreeLibrary( Handle );
を実行するとwincore.cpp内でエラーが発生するなど、
まだ問題があるようです。
もう少し研究してみます。
>>334 文字列をどっちが受け取ってどっちが設定するの?
VC側で( LPCTSTR )CString型のメンバ変数,
って前に書いてるから 2番目の引数は VC->Delphiだろうけど1番目は逆なんだよね?
1番目の引数のVC側はどう扱ってるの?
それから、LPCTSTRだから文字列は変更してないんだよね?
なんとなくだけど VC側で十分なメモリを確保しといて 1番目はLPCSTRで返した方がいいんじゃないの?
336 :
デフォルトの名無しさん :02/02/02 20:06
100MBほどの既存ファイルを開いて、部分書き換えすると嘘みたいに 遅いんだけど、それもWindows自体がハングしたように重くなる。 これは、Win98SEが悪い?それともDelphiが悪い?
マシンが悪いという選択肢は?
MMF使え
>>336 Win9X系は大きなデータをあつかうのに向いてないでしょ
以前、Win95ではハングアップするので
試しにWinNTで同じことをしたらさくさく動いたということがあった
>>337 440BXベースのリファレンスなPCなんで大丈夫だと思う。
>>338 MMFってなんすか?
一瞬、証券会社が思い浮かんだですがヽ(;´Д`)ノ タブン カケイナーイ
>>339 むむ、やっぱOSですかね?
TFileStreamが原因かと思って、OpenFile系も使ってみたんですが
変わらなかったですから・・・・・
とりあえず、部分書き換えは諦めて、元ファイル読み込み→処理→
別ファイルへ書き出しにしました。こちらの方が遥かに速かったです。
でも何故なんだろう?
別ファイルへ出力だと、100MB読んで100MB書き出し。
部分書き換えだと、40-50MB読んで、20-30MB書き出し。
別ファイルの方がディスクアクセスは多いのに・・・・・
「部分書き換え」部分のコード/方針を書いてくれないとわからないが。
そうだね 木やハッシュで管理してないように思うな
344 :
デフォルトの名無しさん :02/02/02 23:37
TQueryコントロールを使用してDBEditコントロールに データベースのレコード(名前、住所など)を表示させたのですが、 値を修正することができません。 TUpdateSQLコントロールも設定しています。 TQueryではなく、TTableであれば値を更新することが出来ました。 何か設定のミス、漏れがあるのでしょうか? それとも、TQueryでは値を直接更新することはできないのでしょうか? 初心者ですいませんが、よろしくおねがいします。
DLLの件なんですが、Del、VC共にstdcallで、うまくいきました。
FreeLibraryのエラーも、解決です。
>>335 さんへですが、第1、第2引数ともに、VC→Delのリードオンリー
です。
自分は、
typedef BOOL (__stdcall *ANFUNCNAME)( LPCTSTR &, LPCTSTR );
で、第1引数にだけ&が付いているのが理解できていないのですが、
このことでしょうか?
ただのLPCTSTRにすると引数が渡せなくなるので、付けています。
>>346 >RequestLiveはTrueになってる
Falseでした
Trueに設定したらきちんと更新できました。
ありがとうございます。
348 :
デフォルトの名無しさん :02/02/03 15:34
プログラム超初心者です。 タブブラウザを作ってみたいのですが、 タブでウインドウを切り替える方法が分かりません。 これって簡単に出来ることでしょうか? 以下のようにタブを作成してるのですが、 ここから既に間違ってますか? procedure TMainForm.CreateMDIChild(const Name: string); var Child: TMDIChild; NewTabSheet: TTabSheet; begin Child := TMDIChild.Create(Application); Child.Caption := Name; PageControl1.visible := true; NewTabSheet:=TTabSheet.Create(Self); NewTabSheet.PageControl:=PageControl1; NewtabSheet.Caption := Name; PageControl1.ActivePage:=PageControl1.Pages[PageControl1.PageCount-1]; end;
TMDIChildってなに?
>349 子ウインドウです。 348のソースは 新規作成でMDIアプリケーションを作って、 それに PageControl1.visible := true; NewTabSheet:=TTabSheet.Create(Self); NewTabSheet.PageControl:=PageControl1; NewtabSheet.Caption := Name; PageControl1.ActivePage:=PageControl1.Pages[PageControl1.PageCount-1]; を足しただけです。 わざわざ PageControl1.visible := true; としてるのは、 子ウインドウが無い状態の時に PageControl1.visible := false; としてあるからです。
MDIならTTabSheet要らないんでは?何置くの?? MDIのz-orderいじるだけならTabControlで良さそうだけど
いや、特に置くモノがあるわけじゃないです。 まだよく分かってないんで… タブでウインドウを切り替える部分のソースを書いて頂けると 有り難いんですが…
procedure TForm1.PageControl1Change(Sender: TObject); begin MDIChildren[PageControl1.TabIndex].BringToFront; end;
2ちゃんブラウザはタブブラウザみたいなものだから、 Janeやぞぬのソースを見ると何かつかめるかも。
MDIは使い勝手が悪いという罠 タブと併用したらかなりマシかもね。 標準のToolBarの下にもうひとつToolBarを追加して、その上(ToolBarの中)に TabControl追加したら見た目はそれらしくなったよ。 ToolBarのParentColor=False,Color=btnFaceで。 MainFormにPageControlをAlign=alClientにすると生成されたMDIChildが全部 PageControlに隠れてしまう。 タブをクリックした時に対応するMDIChildをActiveにするコードは 自分で書かないといけない。
>353 ありがとうございます。 何故か思い通りのウインドウに切り替わってくれませんが おかげで何とかなりそうです。
index管理ぐらい頑張れw
358 :
デフォルトの名無しさん :02/02/03 21:00
DBLookupComboBoxに複数項目をリストに表示させているのですが、 各項目の幅を設定することは出来ないのでしょうか? また、コントロールの幅よりも大きくリストを表示することはできないのでしょうか?
359 :
デフォルトの名無しさん :02/02/03 21:11
TDBGridで列のヘッダをクリックしたとき、 内容をソートさせる方法はどんな方法がありますかのう?
うぅ、結局わかんない。 ヘルプによると MDIChildren プロパティを使うと,子フォームにアクセスできます。 I パラメータはアクセスする子フォームのインデックスを指定します。 MDI 子フォームの順序は,別の MDI フォームがアクティブになると変わります。 初期状態では,フォームは作成した順序でリストされ, 新しいフォームは配列の最後に追加されます。 しかし,MDI 子フォームはアクティブになると,常にリストの先頭に移動します。 そのため,I パラメータを使うと,配列内のすべてのフォームをインデックス化できますが, 特定のフォームを参照することはできません。 との事だから どうも他のを使った方が良いっぽいのだけど、 どうしたらいいのかがわからん…
>>354 2ちゃんブラウザってほとんどオープンソースだったんだね。
しばらくはギコナビのソースを眺めて勉強しようかと思う。
>>348 MDIアプリ作ってないからセオリーは知らんが
MDIChildrenに頼らずTListかなんかで管理すれば良いんでは
MDI 子ウィンドウは複数作れて任意の順番で削除できるからしょうがないだろ? 1 2 3 4 と作成して,2 を閉じたら,1 3 4 の3個のウィンドウが残る。と。 3 番目に作成したウィンドウをアクティブにすると 3 1 4 の順になる。 だから MDIChildren[0] が最前面ウィンドウになる,以上の情報は取れない。 たとえば MDIChildren[2] が何番目に作成したウィンドウかは,MDIChildren からは 取れない。 けど,すべての MDIChildren をスキャンすることはできるのだから,MDIChildren 側が情報を提供するようにすればよい。
364 :
デフォルトの名無しさん :02/02/04 18:54
質問です。 SetImeCompositionWindow(Font,x,y) が正常のx,yに行ってくれないんです。 win95+IME95だとうまくいくのですが win2k+IME2000だとダメです。 IME2000の問題ですか?
ImmSetCompositionWindowでなく?
366 :
デフォルトの名無しさん :02/02/04 19:19
TWinControl にSetImeCompositionWindowって言うのがあるんですよ。 ソースはImmSetCompositionWindowを呼び出していると思ったんですが。 Del5で試しています。でも本当はDel2で動かしたい。(T_T)
367 :
デフォルトの名無しさん :02/02/04 20:10
複数のJInternalFrameがあって、マウスとかでアクティブ(てゆーか選択状態)にされた事を受けとりたいねんけど、、 frame.addInternalFrameListener(new InternalFrameAdapter() { public void internalFrameActived(InternalFrameEvent evt) { System.out.println("フレームが選択された!"); } } ); これでいいんでないんですかい!? なんか出来ないんやけど、どないすんの?
368 :
デフォルトの名無しさん :02/02/08 00:31
begin age; end.
begin age; end; end. では?
program Project1; {$APPTYPE CONSOLE} uses SysUtils; begin Age; end. 厳密に言えば、こーかな? begin~end. が一番上のレベルだから、368で正しい。 因みに、age; の部分をbeep; にすると、音が1回鳴って終わるプログラム になる、正常である事を確認できるアゲ
おっと、{$APPTYPE CONSOLE}の部分は特には書かなくてもいいsage
372 :
デフォルトの名無しさん :02/02/08 04:40
,. -==、 、
ヽ'
}.}
,. .:-::':::::: ̄:::`:::::ー.//
,. :' .: .:: ::::::.:::::.:::::::::::::ノ:.'::`;;,,.、
/,.へ: : .: .:.::::::;:'`:::::::::::::::::',::::;;;;;;;ヽ
,. ~、 ,:' , ' : : .: , ': .:/::: :::: ::::::::::::::l:::::;;;;;ヽ;;ヽ
/ '⌒ヽ\ ,'.:/:.,: , , : 〃,' : l l!.:l:l.}:: :: ::i::l:l ::l::l;;;;;;|l:lヽ
/ ' ` i:ヾ:;:: ,': ,' : i l.i :l. l i i!:! ! } : : :i!:!:i :}:.i:::',:l|:ill`、
くく. , ,'.ニ,ニ{::;i:::il:::l:..::|.|:.! {!.l. !.|!l:.| |l : l|l :il .:l|::l}::l}:|li ll:}
\ 、,.'/ __ ,,.!::!::;|::ll|::|::::l l`トl、;l::!:|:l |l |:...;;i|l:::l|::;l|:;l|!:l|::|l}.l|.!ヽ
.,.',ゝ`ニ-‐ 7,{:::l::::ll|:l;:::! .N」⊥[_ト、リ !:::;;l}!_ノl.イ:;l|;ll}:l|l} l!.!| |
〈〈 〃/;ゝ{ヽ!{::|N. ,イ|!i;;::.| ` ノ:/ィiTl |:}:|!:!ノソ ノ.ノ
ヽヽ、 /' ///:l|:::::`::|li. ゞニ:ソ '´ li;ソ.'ノ:l|:il'i'" ,. '/
\_'/,:'://::::l|::i:::::|:|l: .:::::::. `'':::/:|l:ll|::!// / ̄ ̄ ̄ ̄ ̄ ̄
., ', i::://i::::::l|::l::::l|:l|i ` /:i:|!:ll|::| '´ .|
// {//l|:l::::i:l|;:|;:::l|i:l|i\ ~ ,.イl!:l!:!:ll! l! < いやんえっち何見てんのよォー
.{ { //ゞi|;l|;::l;l|i:|;:::l||:l|i, ` 、 . i|! |:l|:|ノ:l|! }} |
http://www.puchiwara.com/hacking/ ヽヽ/ ` !:lゞ`ゞl|ヽlゞゞ.. _ ..`i,´レ ' ノ 'レ }:ノ !' \______
,'\\ ,く<` ' ー- ‐ ;'ニヽ`ヽ 、/./ ヽヽ
{ { ', 〉 ,.' `丶、 `ー" ヽ: : llヽ ヽヽ
!. ! l/ 〃 \ .._ ,..ゝ、:ll::ト、 } }
l ! / ヽ'´,. -‐! ll::!::i / ./
.l ', /. ==- .. _ ヽ' ´: :!::ll:}:::l !.ノ
l/ /'´-― - .._` 、、 ::`、: :l::!!:!::::!
!'´ -‐ - 、 ` 、` 、.: ::`、:!ll:!:::::!
373 :
デフォルトの名無しさん :02/02/08 11:06
すいません。新人PGです。 Delphiって、どう読むのですか? やっぱ、「デルファイ」?
>>373 質問する前に自分で調べる能力が足りないという指摘が
昔 あったにも関わらず、今回も調べてないんですね。(w
でるっぴ
>>374 調べているから
>やっぱ、「デルファイ」?
が出てきたと思うのだが、この考えは間違い?
>>377 検索すれば、本家ボーランドでそうカナ表現してるのがすぐ見つかるだろ?
アメリカにDELPHI Automotive Systemsという会社(自走車部品メーカー)があるが 殆どのマスコミはデルファイ・オートモーティブと表記しているぞ。
あ゛、打ってる最中に書き込んでしまった…欝氏 ×もう数年Delphi ○もう数年Delphi使ってるのでんな初心者質問はしない。
ボーランドからの製品案内なんかみると思いっきりカタカナで書いて合って萎える(w デルファイ、シープラスプラスビルダー
お願いします Delphi6のShellTreeViewでselectしたアイテムの パスを知るにはどうすればいいですか?
>>382 ちゃんとカタカナで書いておかないと、取次ぎからの電話で大混乱が
おきるのですよ。
>383 parentを再帰的に遡ってパスを取得する。
これから、Delphiを勉強しようとしているのですが、 ObjectPascalについてのいい本はありませんか? レベルが低いんでポインタ辺りの解説から無いと駄目だと思っています。
オフィシャルコースウェア(Delphi付き)
メモリリークはソース(Create~Free)やシステムモニタ等でチェックするしかないんでしょうか? 何か自動で調べてくれるようなのあります?
>>387 オフィシャルコースウェアをamazonで注文して来ました。
有難うございました。あと、オライリーのDELPHIリファレンスは無駄
でしょうか?なんか逆引きも無いしリファレンスとしては云々との
意見も書いてありましたが、初心者には難しいでしょうか、持ってい
る方のご意見が聞きたいです。
初めまして。 今、nrLaunchのようなランチャーソフトを作ろうと思っています。 このソフト、ホイールボタンをダブルクリック(どこでダブルクリックしても可)するとウィンドウが現れる仕組みなんですよね。 こういうのって、どうやったら実現できるでしょうか?
>>388 プログラム終了時にAllocMemCountあたりで調べる0ならリークなし
当然ながらWindowsのリソースやメモリマネージャ管轄外のリークは防げないので注意。
392 :
デフォルトの名無しさん :02/02/09 10:12
>>388 DELギコ猫の過去ログを探して検索してみたら?
確か、コンポか何かを入れるだけでいいのがあったような記憶があるから
393 :
デフォルトの名無しさん :02/02/09 10:39
>>390 アイデアは SetWindowsHookEx(WH_MOUSE でフックしてしまう事かなと
中央ボタンのダブルクリックを受信する WM_MBUTTONDBLCLK というのがありますが
クライアント領域メッセージです。つまりどこでも受信するには全画面を覆わなければいけません
アクセラレータに、マウスダブルクリックが設定出来ればいいのかもしれないけどね
394 :
デフォルトの名無しさん :02/02/09 11:32
Delphiって、フリー版のPersonalでも TCP/IPアプリとかGUIアプリ書けるんでしょうか? 始めようと思ってるのですが、 BorlandCコンパイラのフリー版はGUIアプリ書けなくて だまされた、って感じだったので。とかいいつつけっこう使ってますが。
書けます.powered by Indy
396 :
デフォルトの名無しさん :02/02/09 11:40
>>394 API/DLLは呼び放題なので、どんな種類のWindowsアプリでもかけますよ
ただし、無償ですのでお勉強はそれなりにご自分でなさる必要がありますよ
たとえば標準で TClientSocket というコンポーネントはありますが、この説明は・・・
まあ 本体無償なんだから、参考書買って勉強するお金くらい出してみてはどう?
なお、BCC55なら、GUIアプリだって書けますよ。 かけなかったのは勉強不足のせいです。
Delphiはそれよりも楽に書けるというだけで、勉強不要で出来るものじゃないので勘違いしないでね
>>TClientSocket 名前からしてラクそうじゃないですか~!! T(TCPっしょ?)とかClientとかついてるあたりが、ラクそう。 こーゆーファンクションってたいてい立ち読み目コピで済むから、イイ。(貧; >>なお、BCC55なら、GUIアプリだって書けますよ。 かけなかったのは勉強不足のせいです。 396って相当のアピ師?弟子入りしたいっす。
>なお、BCC55なら、GUIアプリだって書けますよ。 かけなかったのは勉強不足のせいです。
あれでGUIアプリ作ろうとすると発狂します。
おとなしくDelphi使いましょう
>>394
Indy の解りやすい本かウェブサイトありませんかね。ぜひ日本語で。 del6 pro でヘルプ解りにくいので・・・
402 :
デフォルトの名無しさん :02/02/09 14:05
405 :
Delフサギコ :02/02/10 05:17
,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ~′,,,,,,,ミ,,゚Д゚彡 < んニャ~、里谷・銅メダルオメデタイ UU""" U U \_______________ アイコちゃんは残念だったかな。 procedure OnCommand(hwnd:HWND);stdcall; var NowEditingFileName: String; pc: PChar; begin GetMem(pc, SizeOf(MAX_PATH)); Editor_Info(hwnd, EI_GET_FILE_NAMEA, Integer(pc)); MessageBox(0, pc, '', SW_SHOW); NowEditingFileName := String(pc); MessageBox(0, PChar(NowEditingFileName), '', SW_SHOW); FreeMem(pc); end; 久氏振りに質問っす。 上のコードはEmEditorのプラグ員ソースの一部で EMEditorのAPIを使っています。 最初にEditor_Info(....Integer(pc)); の所では正しくファイル名が取得できているのに (DelphiIDEでトレースして確認できる) NowEditingFileNameに代入したとたん 文字列がヌル文字か何かでちぎれてしまうのですが これを防ぐにはどうしたらいいのでしょうか。 例えば最初にMessageBoxで表示されるのは "C:\Temp\あいうえお.txt" なのに次にMessageBoxで表示されるのは "C:\Temp\&" となります。 C:\Temp\無題.txt なんかは途中で変にならないので不思議です。 よろしくお願いします。
406 :
デフォルトの名無しさん :02/02/10 08:11
これからDirectXの勉強はじめようとしているんですが、 DelphiXって7.0までで8.0には未対応みたいですが、8.0環境で 使用可能なのでしょうか? 環境は以下の通りです。 Windows2000+DirectX8.0a+Delphi5.0
>>406 DelphiX自身は残念ながら8.0に対応していません。
しかしDirectXの性質上、8の環境でも7相当として普通に使えます。
当然、8.0で新設された機能はDelphiXから利用できません。
よく判らんけど NowEditingFileName := String(pc); これはダメだよ。やってはいけない型変換 NowEditingFileName :=pc; と代入すれば、ヌルの付いた文字列として処理してくれるけど こういうふうにやればいいんじゃないの? var NowEditingFileName: String; s:string; begin SetLength(s,MAX_PATH)); Editor_Info(hwnd, EI_GET_FILE_NAMEA, Integer(PChar(pc))); MessageBox(0, s, '', SW_SHOW); NowEditingFileName := s; と文字列で受けたらいいんじゃないの?
ゴメン 途中のpcはsに変えてね
>NowEditingFileName := String(pc); 内部ではポインタの代入だけが行われて、 いざ使おうとしたときにコピーされるんだけど、 そのときにはすでに解放されてて中身は不定ってことなのか?
>>410 あ、ダメな理由かかなかったね
String 型 はサイズ+文字で構成されている
これをPCHARに型変換した場合、 文字の部分を指すように工夫されている。
つまりString型のポインタは、文字の位置を示していて、そのポインタ-4にサイズが入っている
PCHAR型をstring型に代入したら、暗黙の変換としてヌル終端文字列からのコピーが起きるからこれは問題ない。
しかし、PCHARをStringに型変換したら、PCHARにはサイズを示してる部分を持っていないからサイズが不定になる。
Stringはクラス型でかつプロパティみたないイメージで考えるといいと思う。
だから、C:\Temp\無題.txt が途中で変にならないんじゃなくて何文字で変になるかは判らないという事
>>393 レスありがとうございます。
SetWindowsHookExを色々と引いてありましたが、すいません、よく分かりません。
コールバック関数の意味は何とか理解できたのですが、その先がよく分かりません。
何か上手く説明してあるサイト等がありましたら、教えてくれれば助かります。
ウィンドウの端の部分の長さを取得するにはどうしたら良いでしょうか? (Width - ClientWidth) div 2などの方法ではうまくいきません。 まして、(Height - ClientHeight)div 2 では、全く出来ませんし。 つまり、やりたいこととしては、 座標の指定を、デスクトップ全体で取得した座標を使って行いたいのです。
>>408-411 ∧ ∧ サンクスコ
ミ,,゚Д゚彡
~ミ,,,,uuミ
お見事に解決しました。
procedure OnCommand(hwnd:HWND);stdcall;
var
NowEditingFileName: String;
s:string;
begin
SetLength(s,MAX_PATH);
Editor_Info(hwnd, EI_GET_FILE_NAMEA, Integer(PChar(s)));
MessageBox(0, PChar(s), '', SW_SHOW);
NowEditingFileName := String(PChar(s));
MessageBox(0, PChar(NowEditingFileName), '', SW_SHOW);
end;
このコードでばっちり動作しました!!
ちゃんと文字列として場所を確保してPCHARで
渡してやらなければいけないんですね。
くわしいセツメイまで、ありがとうございます。
>>413 >つまり、やりたいこととしては、
>座標の指定を、デスクトップ全体で取得した座標を使って行いたいのです。
普通、こういううときはボーダーの太さを考慮するんじゃなくて
TControl.ClientToScreen() メソッドを使って変換します。逆変換は
TControl.ScreenToClient() メソッドです。どちらか/両方使えばやり
たいことができるんでは。
>>415 ありがとうございました!
お陰様でプログラムが完成しました!
Delphi6付属のExcel2000.pasは、前の版から大幅に変わって(簡素化された?) Cells[1,1] とかできなくなってるんですけど、どういう理由でそうなっている のでしょう?
訂正します。Cells[1,1]はDelphi5のものでもできなかったようです。 フリーで出回っているExcelのOLE用のVCLでは、普通、Cells[1,1] くらいできると思うのですが、本家のものはなぜそうなのか疑問です。
419 :
デフォルトの名無しさん :02/02/11 10:38
> コンパイラエラー: Object Pascal >バイトコードへのコンパイル時には Object 型は使えません >Cannot use old style object types when compiling to byte code > >説明 >バイトコードへのコンパイルでは Object 型は不正です。 うぉぃ。ヘルプ見てたらバイトコード用コンパイラのエラーメッセージがのってるんすけど(藁
421 :
デフォルトの名無しさん :02/02/11 21:09
初心者です。DelphiでSQLを使いたいのですが、どうしたら良いのですが。 Selectとか中身の事はわかるのですが それ以前の宣言とかがわかりません。教えてください。
使っている Delphi のバージョンと種類は? まさか Personal とかいうなよ
423 :
デフォルトの名無しさん :02/02/11 21:18
TQuery のヘルプは見た? とりあえず(わかりづらくても)付属マニュアルの SQL 関連のところを ざっと読め。
TQuery の SQL プロパティに SQL 文を指定して execute または open TDatabase で BDE 経由でサーバーにつなげておくことを忘れずに。
427 :
デフォルトの名無しさん :02/02/11 22:01
設定はわかるのですが、用はSQL文の書き方はわかりません たとえばただ単にbeginとendの間に select~ From~ を指定すると思うのですが、それだけでは当然エラーが出てしまいます。 それ以前のDelphiにSQLを使うという宣言が必要だと思いますが、それがわかりません どうぞ教えてください。
それはDelphiでなくSQLの・・・
429 :
◆xdL3JlCE :02/02/11 22:28
あれ?うわさの人が現れた。 持続的なイメージを作成したい場合には TImage を使います。
432 :
デフォルトの名無しさん :02/02/11 23:35
>>431 Query1.SQL.Add('SELECT * FROM ~');
みたいな感じでよろしいのでしょうか?
434 :
デフォルトの名無しさん :02/02/12 00:08
ありがとうございました
436 :
デフォルトの名無しさん :02/02/12 15:23
技術的な質問ではないのですが、Delphi6のインストール時の使用規約(だったかな?)を見たら、 「DELPHI 6 PROFESSIONAL 版およびDELPHI 6 ENTERPRISE 版に適用される追加条項 ~略~...お客様が作成したソースコードやそのコンパイルしたコードの配布は,配布に対して 直接的にも間接的にも報酬を受け取らないこと,そのアプリケーションが個人用途で あり商用ではないということ,この限りにおいて配布制限は受けません。...~略~」 と書かれていました。これって、Delphi製のシェアウェアは存在しないって事ですか? なかったっけかな・・。
あ、すいません・・。板間違えてました。ここは技術だったんですね。申し訳ないです。
>438 >439 あ、修正されてたんですね・・。こんな重要なこと間違えてるなんて・・。 疑問が解けました。ありがとうございました。
>>388 遅レスですがDelphiXで有名な堀さんのページで
チェック用のユニットが公開されていますよん.
442 :
デフォルトの名無しさん :02/02/12 19:42
「バカのコーディング規約」スレ見てたんですけれど、 DelphiVCLの定数や列挙型の命名ってヤバく(ダサく)ないっすか? clWhiteとか、psSoildとか。 普段からVCLに合わせてるもんだから、自分でつけるときもついそうやってしまうんだけれども。 みなさんどうやってます? ダサくない代替案キボーン。 ごめん向こうのスレじゃ、まともなレスが得られそうに無いので、 こっちで話題振ってみました。
>>442 色の名前で(ダサく)ないかっこいい命名法の例を挙げよ!
命名法についての議論は、結局、たいした意味がありません。
で、具体的にどういった実害があるんだ? アルファベット2文字で名前の衝突をほぼ避けられるんだから これほどうまい話はないだろ。 ぶつかっちゃったらUnit名つければ回避できるし。 どうしても嫌ならC#流にClassName_EnumNameにすればいい。
自分の場合、2文字であきたらず単語の区切りで略語作ってやってるのが悪いのかも。
THogeMogeBarFooならhmbfってやっちゃうので・・・。
>>445 C#流ですか。参考にしてみます。
class内にstatic constなメンバ置けないのが気になってたんすけど、 よく考えたら、Unit名つけりゃいいんすね・・・
448 :
デフォルトの名無しさん :02/02/12 23:06
どうせ他人のプログラムだから、どうでもいいっちゃー どうでもいいんだけど… hmbf こうやって、つながりの無いアルファベットの羅列をつけるのは、 まさに2文字が限界だと思われますが。
どうでもいいことをうだうだ議論するのは無駄のような....
>>441 そこも早速参考にしました、
やはり最終的には自分でソースをきちんとするしかないようですね。
>>449 どうでもいいということは自分で納得のいく方法をとっておられるということだと
思うのですが、あなたはどうやっておられますか?
>>451 どうでもいいことを聞いてどうするつもりですか?
>451 どうでもいいということではなく、 2文字のプレフィックスをつけるという命名規則が 十分広く知れ渡っているので この規則を守るべきかどうかということについて 議論の余地が無いということです。
>>453 >十分広く知れ渡っているので
どうでもいい派としては、上記の根拠について示すことを要請したい。
オレははつみみです。
煽りのつもりではなかったのですが・・・ マジでどうでもいいことにしたいので、 2文字プレフィックスの有用性か 代替になるものがないかと悩んでます。
まあ ・VCLで使われている ・VCLに習ってDelphiユーザーの多くが使っている だけで十分な理由かあ・・・
>>455 >2文字プレフィックスの有用性か
>代替になるものがないかと悩んでます。
うーむ、こんなことに悩むひとがいるんですねぇ。
456 のとおりでいいんじゃないの。
442-ここまで のカキコみて、とっても有意義だったですか?
命名法の議論って、プログラミングなんてものがある以前から
それこそ太古の昔からされてきたけど、結局、........!?
なのよ。議論だけ熱くなって、結局、結論は本人が納得できれば
どうでもいい、ということになっているんですよね。
>>457 あっ、Clavert さんはそう思っているってことですね。それで何が言いたいの?
460 :
デフォルトの名無しさん :02/02/13 00:00
どーでもいい事を議論しているようなので、 どーでもいい事ついでに俺も質問。 じさくクラスに、プロパティ類コピーの目的で THoge.Assign(Source:THoge) とか作るとするじゃない。 そうするとさ、Assignメソッドのなかで、少なくとも全部のプロパティを コピーしなきゃならないでしょ。 あとでプロパティを増やしたりしたときに、Assignメソッド内に そのプロパティをコピーする項目を増やすの、絶対忘れちゃうんだよね。 みんなはどうしてるのよ? 根性で思い出してるの?
UnitTest
>459 馬鹿丸出しだな。 borland communityでコンセンサスの取れた規則ってことだよ。
>>462 アホ丸出しだな。権威主義者め。英語読めないヤツはどうするんだよ。
>borland communityでコンセンサスの取れた規則ってことだよ。
これの根拠を示してください。どこにコンセンサスが取れているんですか?
「規則」って、Pascal の文法のどこに書いてあるか教えてください。
煽り禁止。
>>466 =442
あんたさぁ、
>DelphiVCLの定数や列挙型の命名ってヤバく(ダサく)ないっすか?
↑この文章書いたの誰だと思ってるの? 思い出した?
英語の文章読んでさぁ、「了解」というのはどうゆうことよ。
急にヤバく(ダサく)なくなったわけ?
前者はダサくはないですか、どうですか、みなさんはどう思いますかと聞いただけですよ。 後者も了解と言っただけで、ダサくなくなったとも言ってないですし。 うえーん、荒らすつもりはないんだよお。
>468 Del房はDelphiの不備を指摘されると逆上するからね。 MLで質問しなかったのが残念でならん(藁
MLじゃこんなこと聞けないよ(w
>>468 カラミついでにほんとに最後。
>了解と言っただけで、ダサくなくなったとも言ってないですし。
「了解」ということは、ダサいと思いつつ Calvert 氏の提案に
従うってこと?
もし、あの文章が日本語で Geocity かどこかの HP に山田太郎の
署名で書かれていたらどうでしたか?
あの命名法は、Delphi のローカルルールだね。Borland でも C++
ではちがうし、他の言語ではハンガリアン記法のほうが圧倒的に優勢
ですね。でも、張本人のMSのドキュメントでも破綻していて、笑わ
れているし、命名法の一般解というのはないみたいね。寄らば大樹の陰、
みたいに権威に従うのも安全かもね。でも、それが絶対ではないことも
お忘れなく。
ウゼーよ馬鹿
了解と書いたのがまずかった。わかったよ、参考にするよと言うことです。 あの提案自身に全面的に賛成できるわけではありません。 細かいところで自分のスタイルとは違っていますし。 迷っている、迷った部分に関しては参考にするっつーことで。
まったく、こんなことやってるからDEL厨なんて言われるんですよ。 すこしは自重したらどうですか。
ヽ(`Д´)ノ ウワァァン DEL厨ッテイワレタヨ モウコネーヨ ( ) / ヽ
マ板ではDel厨じゃなかったっけ
476 のMLの投稿を読むと、いろんな提案があるみたいですね。 457 = 462 が、あの文書を金科玉条のごとく「コンセンサス」のある 規則などというもんだから、約1名が熱くなったみたいですね。ぜんぜん コンセンサスなんかないのですね。MLの投稿者もそれぞれのスタイルを 表明しているだけですし。 まぁ、命名法(コーディング規則)の話題はこの辺でやめようや。
479 :
デフォルトの名無しさん :02/02/13 10:08
まあ英語の読めないドキュソは クリエイ恥部で独創性溢れる コーディングルール撒き散らして 悦に入ってなさいってこった。
そうそう、各自、悦に入って、この話題は<終了> ということで
481 :
デフォルトの名無しさん :02/02/13 17:57
Delphiでスクリーンセーバーみたいなのを作ってるんですが、
フルスクリーン(解像度変更)にしたあと戻す処理が出来ません。(640x480)
何かうまくフルスクリーン(解像度変更)→復帰する方法無いでしょうか?
ChangeDisplaySettingsのAPIは使用してません。
またWindowsXPだと復帰の処理を書かなくてもプログラム終了時に勝手に解像度が復元するらしいです。
よい方法を教えて下さい。
ttp://www2s.biglobe.ne.jp/~mix/game_programing_display.htm ここにあるDisplayコンポーネントを使ってもうまくいかないし、、
>ChangeDisplaySettingsのAPIは使用してません。 使えよ
>>481 良いアドバイスじゃないのは承知で、
解像度変更するのって、ノートや液晶じゃ汚くなるからイヤン
勝手に解像度変更するスクリーンセーバなんか使いたくないような
>>485 スクリーンセーバって決まった訳じゃ無いです。
「みたいなの」です。
んじゃゲーム感覚でDirectX使えばいいんでは
>>481 なぜ解像度を変更する必要があるのですか?
解像度を変更するメリット、必要性がなければ フォームの上のバーを消して最大化すれば? それじゃあだめかな?
このスレ使えねえー!
>>481 もギコ猫のスレッド行ったら?
>490 必死だな(藁
解像度変更するのはゲームにしか許されてない事だと思うよ。 だから素直にDirextX使いなさい
493 :
デフォルトの名無しさん :02/02/13 23:46
6のパソナルで、オラクルよりデータの抽出は可能? データ自体は加工しなくてもいいんだけど。 一応それっぽいのフリーで見つけたんだけど・・・ 「ODBC access コンポーネント」ってやつ。
>>493 TDataSet派生って書いてあるからProじゃないと使えない雰囲気。
そもそもPro版のDBコンポ使えなかったらDelphiでDBの意味ないだろ。
あと業務で使ったらタイーホね
チョトかぶった
497 :
デフォルトの名無しさん :02/02/14 00:27
delphi6 personalダウンロードしました。 メール送りましたが、来ません。 誰かよろしければ、ライセンスキーを教えてください。 どうも失礼します。
>>494 作者のページに行ったら、パソナル用のインストールファイルみたいなのが
あったですよ。
>DB ユニットに依存した部分を除去したファイルです。
>TDataSet 派生のコンポーネントはインストールされません。
だって・・・
じゃぁ何が残るんだろう・・・?
だいたい、78000円もだせないよなー
ただだから始めたのに・・・
>>495 それも、見てみたけど、どうやらパソナルでは無理みたいです。
もうちょっと探してみますね。レス感謝です。
>>492 Delphiスレで無理にDirectXを進めるのは強引だな
解像度変更はゲームだけとか言っちゃってるし、、、
>>498 >だいたい、78000円もだせないよなー
↑みたいな「煽ってくれ!」「叩いてくれ!」みたいなことは言わないように
すれ。
pro買ったけど能力不足で結局使ってるのはpersonalの機能を越えてないぞ・・・俺の能力不足で
>>500 忠告感謝。
2chなれしてないもんで(w
でも、なんだかんだ言っても教えてくれる人がいるもんな。
みんな、結構いい奴だよなー
そうそう、なんか、
>>493 で言っていた奴なんとかなりそうな予感ですわ。
もっと勉強して、わかるようになったら、プロでも買おうかな。
と、ボーランドの作戦に、まんまとひっかかってmill。
PRO の真価は VCL ソースが付いていることにあり
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ミ ミ < ユーザーが ミ つ \_____ ミ @ ミ '∪'''∪' ピキューン + / ̄ ̄ ̄ ̄ ̄ + ∧,,∧ < 増えている ミ,゚Д゚ ,,ミ \_____ (( ⊂ . つ )) + ミ ミ ''とノ'' + キュピィィィン + / ̄ ̄ ̄ ̄ ̄ ∧,,∧ < らしい! ミ,, ゚Д゚ミ . \_____ ミ つ つ )) + ミ ⊂.ミ ''∪'''' シュイショクデスシ
,∧,,∧∩ / ミ,,゚Д゚ 彡< 先生!!DB接続の為にProを買うのは __ミ ミ ミ \ シゴク真っ当だと思われ、だと思います。 \,,∪  ̄ ̄ ̄\ ||ヽ|| ̄ ̄ ̄ ̄||" イチブ デハ 設計時からテーブル参照できる ...|| ̄ ̄ ̄ ̄|| DelphiのDB機能は開発ツール中でも絶賛的評価なり。
Delフサギコタンカワイイ・・・ かっかっちゃおうかな~(ハァチョ
>>492 解像度変更の件ですが自分のPCがNT4の為DirectX使えません。
ChangeDisplaySettingsのAPI、DirectX以外の方法で今はフルスクリーンのみは出来る状態です。
もどす方法だけが分からないのでどうしたら良いのか、教えていただきたく思いました。
481の書き方が紛らわしかったのですがスクリーンセーバと決まったわけではありません。
>>507 =481
なんどもすいませんが、どうして解像度を変更する必要があるのか
教えてくれませんか。それと、「ChangeDisplaySettingsのAPI」
を使わないのは、なにか問題があるからですか?
目的がはっきりしないのに答えようがないよな
>>507 =481
どうやってフルスクリーンにしたのか教えてください。戻す方法が分かるかも
しれませんので。
ま、まさか変更前の解像度を覚えてないだけとは言わないだろうなっ?
素直にDirectXにしとけって・・・。 アイコンやウインドウぐちゃぐちゃにされたくないしな。 強制終了してもまず元の解像度に戻ってくれるし。 そういやNT4ってDirectXだめだっけ?DirectX3まではOKじゃなかったか? それなら解像度変更くらいできる。
とりあえずエラー処理なしの最低限のところだけ。 usesにDirectDrawのヘッダつけといて。 FDirectDraw: IDirectDraw; // 改造度を640x480x24に変更するとき DirectDrawCreate(nil, FDirectDraw, nil); FDirectDraw.SetCooperativeLevel(Handle, DDSCL_EXCLUSIVE or DDSCL_FULLSCREEN); FDirectDraw.SetDisplayMode(640 480, 24); // 元に戻すとき FDirectDraw.RestoreDisplayMode; // これもいらないくらい FDirectDraw := nil; // Delのバージョンによっては解放処理が違うので注意
DELPHI6パーソナルで ADO使いたいんだけど どうすりゃいいの?
タイプライブラリの取り込みで。OLE-DB直接も可能だよん。
>516 おかげさまで、取り込みはできましたが DEL坊の私にはそっから先どうしたらいいのかさっぱりわかりません 用はローカルのMDBにつながりゃいいのですがどうしたらいいのでしょうか?
CreateObject("ADODB.Connection")ってやる代わりにuses ADODB_TLB;して CoConnection.Createってやれば後はVBSとかと同じです。パラメタ省略したいときは EmptyParamを渡せばよいです。
519 :
デフォルトの名無しさん :02/02/16 19:46
>518 ありがとうございます やっとできました。
Wininetを使ってhttpでLZHファイルのDLしてファイルへ書き込むのがうまくいきません テキストファイルだとうまくいくのですが・・・ どうしたらいいの?
522 :
デフォルトの名無しさん :02/02/17 01:43
既出だったら申し訳な~い。 Queryコンポーネントを用いてSQLを使っているんだけど、 オブジェクトインスペクターのSQLに 「select sum(明細金額) from 売上累積」 って入れ DataSource → DBEdit とやると上手く出るが。 コードにじかにSQLを書く場合、どのようにして「sum(明細金額)」を受ければいいのでしょうか? 色々調べたのですが・・・
>>522 Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select 何とか');
Query1.Open;
だったと思う。
>>523 の後に
Query1.Fields[0].AsInteger
でとれるでしょ。
525 :
デフォルトの名無しさん :02/02/17 04:29
DelphiでSQLを使用したら 書きこむコード挿入しなくても(例えば並び替えとかだけでも) 書き込み禁止がでてエラーになってしまいます 設定とかあるのでしょうか? ヘルプ見ても載ってないし…
書き換える。って?並び替えの SQL って? その SQL 文を見せてみなさい。
∧,,∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < しつもーそ U ミ \____________ @ミ ミ ∪''∪ ShellTreeViewでRoot = rfDesktopのまま 最初からTreeを展開して、とあるパスを表示させたい時 って、どうやるのでしょうか? おしえてくださいな。お願いします。
自分宛にpostmessage・・・・・ゴメソ、ただの思い付きです
>524 ありがとうございます。
>>527 news://newsgroups.borland.co.jp/3C060EA6.90D0EAF1%40moonlight.gr.jp
531 :
デフォルトの名無しさん :02/02/17 19:52
Delphiで圧縮ファイル(zipやLzh)に入ってるファイルをプログラム上で展開して覗くことは可能でしょうか? VBでは出来たのですがDelphiでは出来るのかわかりません。 また出来るとしたらどのような圧縮形式で出来るのでしょうか?
>>531 自力で展開ルーチン組むかライブラリ使えば、
どんな圧縮形式も対応可能。
VBってそいういうの標準ライブラリレベルで楽に出来るの?
>>531 unlha32.dllとかunzip32.dll使え。
Delphi固有の話題じゃないからsage
WindowsXPでは.zipを標準で扱えるようになったから それっぽいAPIがあるかも。
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ,,゚Д゚ミ <
>>530 さんサンクスコ
ミ ミ \__
~ミ,UU_ミ
ShellTreeViewのソースを修正するのはわかったけど
修正して、コンパイルが出来ないです。
VCLのサイコンパイルってどうやるんだっけか。
よろしかったら、教えてくんさい。
>>522 sum(明細金額) as MEISAIKINGAKU
FieldByName('MEISAIKINGAKU').AsInteger
でもいいかも・・・
538 :
デフォルトの名無しさん :02/02/17 23:26
以前書いたコードだけど、それでよければ。
ShellTreeViewで、特定のフォルダをOPEN状態にするコード。
------------------------------------------------------
{フォーム上に ShellTreeView1 と、Edit1、Button1を配置する
Edit1 には 'C:\Windows' などと入力しておく。
ボタンを押すと、Edit1 で指定したフォルダ又はファイルのノードを
ShellTreeView1 中から検索し、展開する。
}
procedure OpenFolder( STreeView:TShellTreeView; APath:string; const ASetFocus:Boolean=True );
//パスの深さを \ の数で示す
function Depth( Path:string ) :Integer;
var
i:integer;
begin
result := 0;
Path := ExcludeTrailingPathDelimiter( Path );
for i:=1 to Length(Path) do
if (ByteType( Path,i) = mbSingleByte) and (Path[i] = '\') then
inc( Result );
end;
// アクセス可能なドライブかどうか
//
http://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=27 function IsDriveReady(drive : char) : boolean;
var
oldmode : word;
searchrec : tSearchRec;
begin
drive := upcase(drive);
oldmode := SetErrorMode(SEM_FAILCRITICALERRORS); (* ここと *)
result := DiskSize(ord(drive)-$40) <> -1;
{$IFDEF WIN32}
if result and (GetDriveType(pchar(drive+':\')) in [DRIVE_REMOTE, DRIVE_CDROM]) then begin
{$ELSE}
if result and (GetDriveType(ord(drive)-$41) = DRIVE_REMOTE) then begin
{$ENDIF}
result := FindFirst(drive+':\*.*',$3f, searchrec) = 0;
FindClose(searchrec);
end;
SetErrorMode(oldmode); (* ここね *)
end;
539 :
デフォルトの名無しさん :02/02/17 23:27
function SameFilename( A, B:string):Boolean; begin result := AnsiSameText( A, B ); end; //指定されたフォルダを開く function Open(const Node:TTreeNode):Boolean; var CurrentPath,d:string; e:boolean; i:Integer; begin result := False; {ノードを選択する} STreeView.Selected := Node; d:= ExtractFileDrive(STreeView.SelectedFolder.PathName); if (Length(d) > 0) and not IsDriveReady( d[1] ) then Exit; CurrentPath := STreeView.SelectedFolder.PathName; {選択状態にあるファイルが検索目標と同一ならば正常終了。} if SameFilename( CurrentPath, APath) then begin Node.Expand(False); result := True; Exit; end; {選択中のノードから見て、検索目標の相対パスが .. で始まるならばダメ} if Copy( ExtractRelativePath( CurrentPath, APath ) , 1 ,2 ) = '..' then begin Exit; end;
540 :
デフォルトの名無しさん :02/02/17 23:27
{子ノードがある場合} if Node.HasChildren then begin {検索目標の階層よりも自分の階層が等しいか、深い場合はダメ} if Depth( CurrentPath ) >= Depth( APath )+1 then Exit; {ノードの展開状況を記録する} e := Node.Expanded; {ノードを展開し、子ノードを晒す} Node.Expand(false); {子ノードについて調べる} for i:=0 to Node.Count-1 do if Open( Node.Item[i] ) then begin result := True; Exit; end; {元の展開状態に戻す} Node.Expanded := e; end; end; var i:integer; begin with STreeView do begin Items.Beginupdate; for i:=0 to Items.Count-1 do if Open( Items[i] ) then Break; if ASetFocus then SetFocus; Items.endupdate; end; end;
541 :
デフォルトの名無しさん :02/02/17 23:30
モナーのほうではレスがつかなかった…(哀
だれか原因をおしえてくださいいい
Delphi6Proをつかっていますが、コンポーネントを使おうとするとエラーが起きます。
http://delphi-area.fs-tools.de/pdl_downloads.php?file=14 からアーカイブをダウンロードし、インストールしたのですが、
コンパイルエラーがおきました。
ヘルプにある互換性のページ
>プロジェクト内の DsgnIntf への参照は,新しい Delphi 6 の名前 DesignIntf に
>変更する必要があります。また,uses 節に DesignEditors,VCLEditors,
>および RTLConsts を追加する必要もあります。
を参考に、
TFlatDesignRegister.pas の uses 節を修正しました。
コンポーネントは無事登録されたのですが、
オブジェクトインスペクタで、貼りつけたコンポーネントの
色関係のプロパティの色定数リストを表示させる(リストをスクロールさせる)と、
このコンポーネントで独自に追加したと思われる色定数について、
「***は数値ではありません」というエラーが表示されてしまいます。
どうすれば、ちゃんと使えるようになるでしょうか。
ShellTreeView は Community.borland.com で修正版が出ているから そちらを使った方がよかろう。
>541 再現しないんだけど、D6用のパッケージだよね?
ん?D6 用パッケージがあるの? 544 さん, あとは任せたぁ。
はい。ZIPを展開して、Packages\FlatStyle_D6.dpkをインストールしました…
547 :
デフォルトの名無しさん :02/02/17 23:58
どの時点でどういうエラーメッセージがでたの?>541
>>547 えと、541に書いてある通りです。
例えば、TFlatScrollBar なり TFlatMemo なりをフォームに貼りつけて、
色関係のプロパティを弄りますね。最初オブジェクトインスペクタの
色定数リストには cl*** しか表示されていないと思うのです。
色定数リストの前半は cl*** という定数ですが、多分後半は
em*** という独自の定数になっていると思うのです。
で、このリストを下にスクロールさせると、やがて em*** がリストに
出てくるはずです。その em*** がリストに表示されようとした瞬間に、
どうもエラーがでるみたいです。
メッセージは、「em***は数値ではありません」です。
FlatStyle_D6.dpkにはFlatDesignRegister.pasは含まれてないような…… まだ完全にはD6対応になってないみたい。 もしかしたら、dfn.incの頭に{$DEFINE VER130}って加えてから、 パッケージを再構築すれば通るかも。 割とかっこいいコンポだね。紹介サンクス。
>>549 ありがとうです。
自己解決しました。
いちどFlatコンポーネントをすべて削除し、
もういちどインストールしなおしたら
不具合が直ってました。
551 :
デフォルトの名無しさん :02/02/18 11:39
アクセスログを改行ごとにTstringListに流しこむ処理を行っているのですが、 なぜか一部のログでつっかかってしまい、それ以降のログを取得してくれません。 ログ取得部分のソースはこんな感じです。 Fdir := 'D:\xxx\xxx\log\'; Fname := 'xxx.log'; month_log := TStringList.Create; try month_log.LoadFromFile(Fdir+Fname); //テキストファイル読み込み except; writeln('<html>'+ Fdir+Fname +'読み込み作業中にエラーが発生しました</html>'); month_log.Free; end; ログの突っかかる部分ですが、下記の2行目、「Mozilla 3.0 (Slurp cat・・」の3.0と(の間の半角スペースです。 ,xxx.xxx.xxx.xxx, MSIE 5.01,Win98,2002/02/16,土曜日,14:56:47 ,xxx.xxx.xxx.xxx,Netscape3.0,Mozilla 3.0 (Slurp cat; slurp@inktomi.com; http: /www.inktomi.com slurp.html),2002/02/17,日曜日,06:57:05 ,xxx.xxx.xxx.xxx, MSIE 5.5,Win2000,2002/02/17,日曜日,07:07:44 ログを突っかかる部分の半角スペースをエディタで書き直すと突っかかりは解消されるのですが・・・」 同じ半角スペースでもなぜ書き直すと大丈夫で元々のデータの場合はつっかかってしまうのでしょうか? どなたかいい知恵を授けていただけたら幸いです。
>537 ありがとう。 こっちのやり方のほうが後々ソースを見たとき分かりが良いかな? ただ、記述するとき。 「Query1.」と入力したとき「コード補完機能」の候補に、 「FieldByName」が出てこないのはなぜなんだろう?
>>551 バイナリエディタで該当部分を見てみたら?
実はLFコードとかで、表示の際半角スペースで代用されていただけかもしれないし。
554 :
デフォルトの名無しさん :02/02/18 13:16
>>553 うーん、おそらくそっち系の原因だと思います。
問題の部分を直すのではなく、ただ単にエディタで開いたログを中身の変更をせずに
上書き保存しただけでもつっかかり無く取得してくれるんで・・・
でもバイナリエディタで確認した時に、問題の部分もきっちり半角スペース(20)で
認識されているのはこれいかに(汗
555 :
デフォルトの名無しさん :02/02/18 13:23
>>553-554 っとと!よく見たら半角スペース(20)じゃなく00になってました。
・・・で、この00をdelphi上で20に変換する方法っていうのはどうやるのでしょうか?
そもそも00って文字上で言うところの何ですか?(厨房質問で申し訳ないですが・・)
自己解決しました。普通に while (Pos(#00, Str) > 0) do begin; USER_AGENT[Pos(#00, Str)] := #20; end; こーすりゃいいだけですよね、失礼いたしました。
SQLで「INSERT UPDATE 」などを実行する場合は、 Queryコンポーネントでは無理なの?
>>557 できるよ
Query1.ExecSQL
しつもんさせてください。 Del6EntのDataSnap,WebSnap周り使ってる人いない? いまSOAPで2層のDBアプリ作ろうと思ってるんだがぜんぜんうまくいかない。 (Oracle8i -> SOAP -> クライアントみたいな感じ) sampleの中にはDCOMしかないし。 一応\WebServiceのなかに想像に近いやつがあったけどわけわかんないし。 素直にCORBAにしたほうがいいのかな~。 どっか解説してるサイトとかないですかね? ところで、BizSnapって言葉、さんざん宣伝してた割に IDE上に出てこないのは気のせいか?
>>538-540 さん
_______________
,∧,,∧ <
/,,ミ,,゚∀゚彡 \ ありがとうです
//\ ̄ ̄ ̄\ \
// ※.\___\  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\\※ ※ ※ ※ ※ヽ 動作確認しました。
\`ー──────ヽ 微妙に動作が遅いきもしますが・・・・・
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>543 ソースを修正してもコンパイルできないのに
修正版をインスコするのできそうにないです。
Query1.SQL.Add('insert into テスト.db'); Query1.SQL.Add('(TEST1,TEST2)'); Query1.SQL.Add('values("マータリ","マータリ")'); Query1.ExecSQL; 上記だと上手くいくんだけど、 下記のようにパラメーターで追加しようとすると駄目。 何かよいアドバイスをお願いします。 Query1.SQL.Add('insert into データ.db'); Query1.SQL.Add('(TEST1,TEST2)'); Query1.SQL.Add('values(TEST1 =: GIKO1,TEST2 =: GIKO2)'); Query1.ParamByName('GIKO1').AsString := Edit1.Text; Query1.ParamByName('GIKO2').AsString := Edit2.text; Query1.ExecSQL;
=: GIKO1 じゃなくて = :GIKO1 だろ
>563 そうだった、でも、そこを直しても上手くいかない・・・ やっぱり「キーワードの使用が無効です キーワード:=」って言うエラーになる。
:= が紛れていない? PASCAL 構文と SQL 構文がまざっているのかと。
>565 紛れているとは? 色々いじっているが・・・ Delphiでデータベース(特にSQL)に詳しく書かれている、 お勧めのHP・書籍は無いですかね?
関係なさげだが
>>562 > Query1.SQL.Add('values(TEST1 =: GIKO1,TEST2 =: GIKO2)');
単に
Query1.SQL.Add('values(:GIKO1,:GIKO2)');
でいいんでない?
ParamByName以前にもともとのSQL文が間違ってるに100ユーロ
Query1.ExecSQLする前にQuery1.SQLをどっかに吐き出して内容確認してみては?
>567 ありがとう。 >Query1.SQL.Add('values(:GIKO1,:GIKO2)'); これで上手くいきました。
>>566 読むといいかも
\
 ̄ ̄ ̄ ̄ Ο  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ο
♪ ∧,,∧゚ ♪
ミ,,゚Д゚彡 ♪
ミつ[|lllll]).
~ミ ミ
U''U
Delphiデーターベースアプリケーション開発ガイド
570 :
デフォルトの名無しさん :02/02/20 13:02
( ´∀`)/ 先生!! 質問です! Update2 というのは Update1 を当てずとも素の状態から Update できるのでせうか? Delphi5からのユーザなのですが、5はUpdate1までしか出ていないので分かりませんです(;´Д`) つうかDel5のUpdate2もだせや(#゚Д゚)ゴルァ! >某陸
英語版もってるのなら、英語読めるようにしとけ。ぼけ。
(´∀`)<update2出てるのか
BCB6 が 3/19 出荷だからそれまでには日本語アップデート2がでるな。
Update2は、ほとんどエンプラ版のみの機能とAction関連っぽい。
576 :
デフォルトの名無しさん :02/02/20 19:51
ActionManagerの勝手に Enable が false になっちゃうよバグは治るかな。。。
577 :
デフォルトの名無しさん :02/02/20 20:42
>>576 バグがあるならレポートを。
時間はあるぞ。どどんがどん。
579 :
デフォルトの名無しさん :02/02/21 01:09
>>577 DEL4、BCB4の時は差分アップデートなので
#1を当てたあと#2を当てる必要があった。
これ、Borland式。
(´∀`)<update1の変更分も含むって書いてあるね
581 :
デフォルトの名無しさん :02/02/21 11:23
いいかげんにXP正式対応してほしいよ。
582 :
通りかかった初心者・・・ :02/02/21 14:00
Query3.SQL.Clear; Query3.SQL.Add('Select EXTRACT(Year from YMD),EXTRACT(Month from YMD),sum(Meisai)'); Query3.SQL.Add('From Data.db'); Query3.SQL.Add('GROUP BY EXTRACT(Year from YMD),EXTRACT(Month from YMD)'); Query3.Open; 上記を実行すると「この機能は使用できません。」って言うエラーが出るんだけど、 年・月 別の合計金額出したいんですが、何か良い方法無いですか? それともSQLが根本的に間違っていますかね?
583 :
デフォルトの名無しさん :02/02/21 15:20
>>582 RequestLiveがTrueになっていたら「この機能は使用できません。」とかのエラーでるね。
原因がそれでないなら解らんな。SQLはあっていそうだしね。
584 :
通りかかった初心者・・・ :02/02/21 18:40
>583 ありがとう。 調べてみたけど「RequestLive」はfalseでした。
585 :
デフォルトの名無しさん :02/02/22 03:14
>>581 D6ではXPに正式対応しないんじゃないの?
D7が出る方が速そうな気がするし、D7ってやっぱ今年でしょうか。
流石に毎年じゃ辛いんですけどねぇ。
D5→D6 の期間延長っていうダイレクトメールが来たよ 売れてないのかなー?
588 :
通りかかった初心者・・・ :02/02/22 08:22
>587 Paradox 7 です。 ローカルSQLガイドに下記のように書いてあったんだけど、 「計算によって求められた値(計算フィールド)を基準に GROUP BY 節でグループ化を行うことはできません。」 これに当てはまっていると言う事なのかな?
(´∀`)<LocalSQLの制限かな。IB6も駄目でした。 Oracle8では大丈夫でしたよ。
590 :
通りかかった初心者・・・ :02/02/22 11:37
>589 調べてくれてありがとう。 こういう場合ってどうすればいいの? 自分的に考えたのは、 ワークを作り(年・月・詳細金額)を抜き出しコピー それをグループ化 ほかに何か手間要らずの方法はないですかね?
591 :
デフォルトの名無しさん :02/02/22 12:40
Delphi5proを使っているのですが、BDE無しに 住所録程度のソフトを作りたいのですが、 何か良い手はありませんでしょうか? 初心者なので出来れば優しくお願いしますー
>>591 D6にバージョンアップすると BDE無しに使えるMyBaseというのがあるそうです
>>592 バージョンを上げたいとは思っているのですが予算と
初心者なので新しい機能はまだまだ縁が無いので
ちょっと手が出ません。
>>591 勉強の為にDBを使うなら、ODBCかDel6にする。
勉強の為に作るけど、DBはいや。つー場合は、ファイルに適当に書き込む。
だれかに使ってもらう為に作るなら、素直にDel6を購入かファイルに適当に書き込む。
100件程度で、ちょっとした検索が付いたくらいの住所録ならファイルに書き込んでも
全然OKな気がする。
>>594 ありがとうございます。 さっそく見てみました。
最初の説明で漏れていたのですが、作った物を
他所にも持って行きたいと思っていますので
ODBCの設定をいじる分は、すみません ちょっと外れです。
できたらCD-ROMに、プログラムとデータを入れて
そのまま実行できるような物をイメージしています。
>>590 (´∀`)<IB使用可ならVIEWを定義しgroup byで集計する
住所録ならCSVとTstringgridで良いんじゃないだろか
599 :
デフォルトの名無しさん :02/02/22 15:42
Delphi5使ってるんだけどIMEをATOK15にして開発してたら たまにATOK15W.IMEがアプリケーションエラーで落ちるんです 当然Delphiも落ちます 一緒にIE5.5も道連れにします こんな症状、俺だけですか?
600 :
デフォルトの名無しさん :02/02/22 19:33
ストックオブジェクトってVCLには無いのですか? それとも Canvas.Brush.Handle:=GetStockObject(LTGRAY_BRUSH); Canvas.Pen.Handle:=GetStockObject(BLACK_BRUSH); こんなふうに書けばいいの? 一応動いてるみたいだけど あるいはストックオブジェクトを無理に使う必要はない?
ストックオブジェクトを無理に使う必要はない. GDI オブジェクトは VCL レベルでキャッシュされているので、普通に使う場合には 何も気にすることは無い。
>>599 OS は?
XP/Pro + ATOK15 + D6 だけど問題ないな
603 :
デフォルトの名無しさん :02/02/22 23:38
>>582 Select EXTRACT(Year from YMD) Y, EXTRACT(Month from YMD) M, Meisai
From Data.db
上記のSQLをエディタなどで作成して、dbファイルと同じフォルダに、
view1.sql というファイル名で保存する。(ファイル名は任意、拡張子は
sqlにすること)
これがParadox用のViewになるので、これに対して
Select Y, M, Sum(Meisai) from view1.sql
Group by Y, M
というSQLを発行すれば良い。
604 :
通りかかった初心者・・・ :02/02/23 06:53
>603 ありがとうございます。 早速試してみます。
(´∀`)<ParadoxでもVIEWが使えたのか…
>>602 OSはW2k です
デフォルトのフォルダに入れてないからかな?
iAtokも落ちるし
>>606 >iAtokも落ちるし
それは... ATOK 側の問題の気がするなぁ。
>>607 どもです
今はiAtok使わないようにしてるし
こまめに保存してるけど
落ちるときはF9押してアプリが動き出す瞬間みたいだから
デバッグモードの時のIMEの設定か初期化くさいです
でもいつもじゃない所がいやらしい
justのアフォ金返せ!!
609 :
デフォルトの名無しさん :02/02/24 00:56
610 :
デフォルトの名無しさん :02/02/24 12:44
MyBaseの話が挙がってましたが、いまTTabeで組んだ(by Del5)ソフトを Del6を買うと簡単にBDEなしに移行できるものでしょうか?
なるかならないかはプログラム次第。 MyBase/Midas はオンメモリデータベースだから、本質的にマルチユーザーには 対応していない。 非 BDE ってのを配布ファイル削減という意味で考えているのなら、ほとんどすべての Windows に存在している ADO を使うことを考えるのも意味があると思う。
612 :
610 :02/02/24 13:46
>>611 レスありがとうございます。
プログラムは大した事ないのとLocal・シングルユーザー仕様です。
質問のポイントは、使用コンポーネントの若干の置き換えや設定の変更で
使えるなら休み明けにでもDel6を注文しようかと思ってます。
ADOについては、当方不勉強ゆえ敷居が高いです。
613 :
デフォルトの名無しさん :02/02/24 14:02
winxpでdelphi5.0って動作します?
>>611 (´∀`)<D6のdbxpressを使ってます。 スタティックリンクが便利です~
615 :
610 :02/02/24 14:31
すみません、MyBaseの事ですが、今まで通りTDBGridなど使えるのでしょうか?
StringGrid の InplaceEdit を置き換えて 伝票のような桁ごとに縦点滅線有り、カンマ有りの入力画面を提供したいと考えています。 で、Canvas とか Paint とかのメソッドを使って頑張ろうかと思っていたら InplaceEdit には Canvas も Paint もありません。 どうすればよいでしょうか?
>>617 procedure TForm1.Button1Click(Sender: TObject);
var
CT:TCanvas;
DC:HDC;
begin
CT := TCanvas.Create;
DC := GetDC(Button1.Handle);
CT.Handle := DC;
CT.MoveTo(0,0);
CT.LineTo(Button1.Width,Button1.Height);
CT.Free;
end;
TInplaceEdit の Handle プロパティから Canvas とればいいんですか。なるほど。 でも描画のタイミング(Paint)はどうすれば良いですか。
>>619 描画のタイミング?
普通Gridで色々やりたい時はDrawCellでやっちゃうんじゃないの?
あ、でも表示だけならいいけど入力したいなら入力中は消えるね
ぉいぉい。ふつーは、カスタムインプレースエディタとカスタムグリッドをペアで 作成して、 function TCustomGrid.CreateEditor: TInplaceEdit; を継承して自作のカスタムインプレースエディタを返すようにし、 カスタムインプレースエディタは、TInplaceEdit から継承すればよい。 TInplaceEdit は、T(Custom)MaskEdit から継承しているから、 実態は TEdit だ。 だから、TEdit に罫線を入れる方法を作れば問題は解決する。
623 :
通りかかった初心者・・・ :02/02/26 20:29
InstallShied Express for Delphi の使用方法について書かれているHPとか、書籍知りませんか? Googleで検索すると全部外国語のもの・・・
>>623 あそこまで単純なインターフェースで、何がわからないのか。
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < わかってる人にはわかるが U つ \使った事無い奴に分かるわけないです @ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪''∪ 最詳しいかわわからんですが [Delphiデタベス開発者ガイド]本 [AcidFloor][Magic of Delphi]サイト あたりが詳しいかとオモワレ ほな。
627 :
デフォルトの名無しさん :02/02/27 01:21
ははーん。これ↓のことか…。今分かった。 ---- (^_^)(^_^)(^_^) THE REAL PROGRAMMER (^_^)(^_^)(^_^) ----
>>626 使えばいいじゃん。って言うか、これから使うんでしょ?
ダイアログにも全てヘルプボタン付けてるし、ヘルプにも
ちゃんと入門やらシーケンスボタンやらが付いててかなり
丁寧に説明されている。
何度か作ってみれば自然と覚えられるはず。
>>628 間違ったからといって、ソースが消えるわけでもなく、
俺もやってみりゃいいだけだと思うけどなぁ。
出張してインストールするのだが1発勝負ってのは
無いだろし。
一応、依存関係とかあったら困るんで、俺はVirtualPC
で一回テストしていると逝ってみるテスト
630 :
デフォルトの名無しさん :02/02/27 15:09
今からDelphiを始める初心者です。 おすすめの書籍がありますでしょうか?
632 :
デフォルトの名無しさん :02/02/27 15:51
>>631 ありがとうございます。
とりあえず、「基礎からわかる Delphi6」を買ってみようと思います。
Delphiを基礎からやりたいのですが、Web上はなかなかいいとこがなくて。
>632 私はDelphiではないですが、MLに入って、過去ログ検索サイトを 教えてもらうのもいいですよ。 ヘタな参考書より、過去ログを検索した方がズバリな事がかかれてたり しますから。
∧,,∧ / ̄ ミ,,゚Д゚彡 < 基礎Del⑥はいいっすね U つ∀ \たまたま立ち読みしてきたです ~ミ ミ ┴ ∪''∪ インスコシルドExのUIがD6前とD6とで変化しているなんて しらなんだよ。 WebBroker入門とか Webアプリデバッガとその他の形式との切り替え なんかも載っていて俺も買いたくなったです。
> インスコシルドExのUIがD6前とD6とで変化しているなんて > しらなんだよ。 おれもあれ見てかなりびびった。 相変わらずユーザーに優しくないな>InstallShield
Delphi6 から、Windows Installer (*.msi) 形式に切り替わったからね。 いつまでも古いままの方がよいのか?
>>637 いや、msiはむしろ歓迎だが、D6のInstallShield使うと正規版ほしくなる罠
で、正規版買おうかと思ってるんだが、某Editionじゃなくても問題ないのか?
639 :
デフォルトの名無しさん :02/02/27 23:21
>>632 いいとこ、いっぱいあるけどなぁ?オレ、本買ったの1冊だけ。
あとはネットで十分だけど。
感謝してますよー>ネットでdelについて書いてる人
640 :
デフォルトの名無しさん :02/02/28 16:31
フォームの背景が寂しいので何か描こうかと思うのですが 単純にビットマップを貼ると大きいので 演算で描こうとしました。 OnPaintイベントで描けばいいやと単純に考えてました ところが、画面に張ったコントロールが少し変化すると画面全体の再描画がおきてしまいます その為に非常に重くなってしまいました。 描画が必要な場所だけを描くにはBeginPaint した時の TPaintStruct構造体が必要です これはVCLソースを見ると スタック上に取られて読み出せないようです といってもWMPaintはPrivateになってるので継承出来ませんよね? それに、後から再利用しようと思ったので、フォームのOnPaintをフックするだけの コンポーネントにするつもりでしたから WMPaintは目的に合いません もしかして、サブクラスによるメッセージフックしかないですか?
>640 Delとメッセージフックは非常に相性悪いよ。 フックのコールバック関数が破棄されたオブジェクトを参照したりとか。 ソースまだ見てないけど、OnPaintを呼び出してるメソッドはオーバーライド出来るんじゃないの?
OnPaintを呼び出してるのは protected にある Paintメソッドで 継承可能ですが BeginPaintは PaintHandler か WMPaintでされますDoubleBufferd=Trueなら WMPaintです PaintHandler は protected ですが Virtualではありません WMPaintはprivateですがメッセージハンドラなので 継承は出来ませんが置き換えは出来る筈です ですから WMPaint相当のコードを書けばいいみたいではあるんですが・・・うーん
>>640 コンポを貼り付けて実現するなら サブクラスしかないと思うよ
とりあえずサブクラスコンポ作るなら2CH式規約を守ろう
http://piza2.2ch.net/tech/kako/999/999482946.html ------------- コピペ -------------------------------------------
935 名前:デフォルトの名無しさん 投稿日:01/09/21 10:39
再度 サブクラス解放についてのまとめ >>コンポーネント作家の方々へ
サブクラスを利用するコンポーネントは以下の手順で解放する事
var WM_DetachProc:Cardinal; をローカル変数として定義し
コンポーネントの初期化部で
initialization
WM_DetachProc := RegisterWindowMessage('WM_SubclassFreeNotify');
end.
とする。
サブクラス解放時にはこのメッセージIDで
WParam,LParam はユニークな値を入れて サブクラス先に送信する
それを受信したWindowProcでは、
この2つの値で送信者が自分かどうか判断し
自分でなければリンクを解放して下位にメッセージを送り
メッセージが帰って来たらリンクを再接続する
送信者が自分ならリンクの解放だけを行う
VCL上のサブクラス取り外し
WParam で selfが渡される WParam = LongInt(self)
LParamは無視してよい サンプルコード
>>922 Win上のサブクラス取り外し
LParamでプロセスID
WParamはプロセス内ユニークな値(メソッドアドレス等それぞれのプロセスで管理)
注意: WM_DetachProc は定数ではないので case では使えない ifで判断する事
単純にWM_ERASEBKGNDしなきゃ軽いと思うが
>2CH式規約 こんなローカルルール守ってなんの意味がある? 誰も知りません >Delとメッセージフックは非常に相性悪いよ。 特別に相性のいい開発環境なんてありません
>>640 >コンポーネントにするつもりでしたから WMPaintは目的に合いません
>もしかして、サブクラスによるメッセージフックしかないですか?
TLabel は自分を描画するタイミングを知っているし、TPaintBox には
OnPaint イベントがある。結局、TGraphicControl を継承すると、親
の WM_PAINT 相当のメッセージを受け取れるんじゃない?
>>640 TCanvas.ClipRect で取得できる
あ! DoubleBufferd:=falseにすると 最初にクリップボックスが設定されるようです うーん 困った DoubleBufferd:=trueじゃないとチラツク場所があるんだよなあ
>>649 よーわからんがTImage張り付けちゃだめ?
再描画はTImageにまかせると。
>>650 さん
TImage貼り付けるのも考えたのですが、フォームが最大化されると数Mになるんで
なんかそれだけでそれだけメモリ取るのもどうかなと・・・といってもDoubleBufferd:=Trueなんて
やってたら同じですね (^^;
DoubleBufferd:=Falseにして チラツキを減らすの探して
ControlStyle:=ControlStyle+[csOpaque];
というのを見つけました。
Form.Invalidateされるとダメだけど これでだいぶチラツキが減りました
649は BeginPaintした時にDCのクリップボックスがWindowsで設定されてると訂正
653 :
デフォルトの名無しさん :02/03/02 23:47
フリーダウンロード版だと 「あれができない」「これができない」 と結構、困るみたいなので、ちゃんと勉強するなら、何か有料バージョンを買ったほうがいいのですか? たとえばVBなら、ラーニングを買うとひどい目にあうので最初からプロフェッショナル買っとけ、みたいな。
>>653 ラーニング「買う」ならプロを進める。
けど、Del6Personalはフリーだから、Personalに限界感じてから、
Pro以上に乗り換えても遅くないと思うよ。
655 :
デフォルトの名無しさん :02/03/03 00:14
デルファイも「.N○T」とか付けて30万近い値段で売り出す… とかしないでくれよ!頼むぜ。 つーか、アレはそんだけ出す価値があるのかなぁ? いまいち、何が凄いのか分からん。
>>654 ラーニングを買う以外にどうやって手に入れるのですか?
あ、、ラーニングってVBのことだけ指しているわけではないのね。
658 :
デフォルトの名無しさん :02/03/03 00:24
プロフェッショナルって、アカデミック版でも3万だよね。高すぎ。 パーソナルって、商用アプリ作れないよね。 GPLにもできないよね。
>658 お前何がしたいんだよ。 つかどうせ何もしたくない/できないんだろ。
660 :
デフォルトの名無しさん :02/03/03 00:38
>>658 商用アプリを作れないのは本当。
ソースコードだけのリリースをするなら、GPLでも大丈夫なのではないかと思うけど。ダメ?
661 :
デフォルトの名無しさん :02/03/03 01:23
MSの.NETの値段見てから、デルファイラインナップ見れば あら不思議、安く見える(藁 つーか、買って欲しいならDMに値段書けよ>MS
以前にも話題になったが別にGPLにはできるだろ。
663 :
デフォルトの名無しさん :02/03/03 01:56
>>663 何を言いたいのかわからないが、あるソースコードを GPL として公開することを
禁止するツール/開発環境ってあるのか? MS はやりそうだけど。
そこまでいったらエディタとかはどうなる?
GPL で公開する。ってことは要求されたらソースを公開しなきゃいけないってことで、
ふつーはめんどくさいからソースをつけて公開するのです。
「ソースをくっつけて配布する義務はありません。
665 :
デフォルトの名無しさん :02/03/03 02:59
>>658 「代価を受け取ってはならない」みたいなことを聞いたことがあります。
だから商用に限らず、シェアウェアも駄目です。
まあ、儲けたくなったら、その時にプロフェッショナル版に変えればいいこ
とになっているのですが。
逆に、GPL で提供することは問題ないみたいです。ただ、配布に際して代
価を受け取ってはならない、と。
#実費は問題ないようですが……
>配布に際して代価を受け取ってはならない、と。 それは GPL の話では?
>>666 GPL は販売に関して何も言わないよ。
ただし、購入者が自由に頒布するのを妨げることは出来ない(笑)
その縛りのせいで実際には商売にならないってだけ。
フォントの縦横のサイズ比って変えられないのでしょうか? 以下のようなコードで回転は成功するのですが、 Heightだけが有効で widthに設定した値は無視されるようです function SetSizedFont(canvas:TCanvas;xsize,ysize,angle:integer):TObject; var lf:LOGFONT; var hFnt:HFont; var fnt:TSaveFont; begin hFnt:=GetCurrentObject(canvas.Handle ,OBJ_FONT ); GetObject(hFnt,SizeOf(lf),@lf); lf.lfWidth := xsize; lf.lfHeight := ysize; lf.lfEscapement := angle; fnt:=TSaveFont.Create; fnt.canvas:=canvas; fnt.Font:= CreateFontIndirect(lf); fnt.saveFont:= SelectObject(Canvas.Handle , fnt.Font); Result:=fnt; end; ////// デストラクタでフォントリソースの解放を復元をさせる/// type TSaveFont=class public canvas:TCanvas; saveFont:HFont; Font:HFont; destructor Destroy; override; end; destructor TSaveFont.Destroy; begin SelectObject(Canvas.Handle , saveFont);DeleteObject(Font); inherited; end;
ゴメンかんちがいでした・・・鬱
あるテーブルのカレントレコードの内容を 別なテーブルに追加する処理を書いているのですが, ソース側にメモ型項目が含まれていると Postを呼び出したところで帰らぬアプリになってしまいます. Query_Dest.Append; for iField := 0 to Query_Dest.Fields.Count - 1 do try Query_Dest.Fields.Fields[iField].Assign( Query_Src.FieldByName(Query_Dest.Fields.Fields[iField].FieldName)); except on EDataBaseError do ; // ソースにないフィールドを参照 end; Query_Dest.Post; // ここで帰らぬアプリに… 以前は両テーブルのフィールド定義が(名前だけですが)同一だったので for iField := 0 to aSrcDataSet.Fields.Count - 1 do Query_Comp2002.Fields.Fields[iField].Assign( aSrcDataSet.Fields.Fields[iField]); こんな風にして,不具合も起きませんでした. ちなみにDelphi5 (Update 1),テーブルはすべてdBASEです.
671 :
デフォルトの名無しさん :02/03/06 09:03
Assign が良くないように思うな 値をコピーする関数を作った方がいいように思う つまり型が同じならそのままコピーし 型が違うなら文字列かVariantを経由してコピーするとか
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < 久しぶりにDelコード書けてうれいいや ミ つ且~~ \___________ ~ミ,,,,,, ,,ミ こんな定義を type TTextLineBreakStyle = (tlbsLF, tlbsCRLF); マックも含めて type TTextLineBreakStyleMultiPlatform = TTextLineBreakStyle + (tlbsCR); こんな風に定義したいんですが 列挙型の定義を足し算っつうのはどうすりゃいいでしょうか。
>672 TTextLineBreakStyleMultiPlatform = (Low(TTextLineBreakStyle)..High(TTextLineBreakStyle), tlbsCR); でできないかな。
674 :
Delフサギコ ◆zE1iiRdQ :02/03/09 23:50
675 :
デフォルトの名無しさん :02/03/10 03:02
質問です。 複数のテキストを1つのファイルに保存したい時は、どうすればいいですか? 1回1つにまとめて、読み込み時に、また分割でできるんでしょうが、 なんか、他に方法ないっすかねぇ???
Append
677 :
デフォルトの名無しさん :02/03/10 03:15
また分割だから、アーカイバでは?
>>676 正直、私へのレスだかもわかりませぬ・・・レス早すぎな気もするし、HELPみたら
俺へのレスな気も・・・
>>677 そうなんですけど、便利な関数とかないかなーって・・・
というか、二人様レス感謝なんですが、わかりませんごめんなさい・・・
めちゃくちゃ初心者なんです。
もうちょっと調べますです。
,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ~′,,,,,,,ミ,,゚Д゚彡< TMemIniFile UU""" U U \_______________
∫ _________ ∧,,∧ ∬ / ミ,,゚Д゚彡っ━~ < 漏れは素人童貞ですた。 _と~,, ~,,,ノ_. ∀ \ ミ,,,,/~), │ ┷┳━  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ .じ'J ̄ ̄| ┃  ̄ ̄ ̄ ̄
∧,,∧ ・・・・・・・ ミ,, 彡 ミ ミ ミ~,, ミ ∪ ∪ ∧,,∧ 怒られた… ,ミ ゚Д゚彡 ミ ∪ ミ~,, ミ ∪ ∪
こんな感じでガンバレ ものすごく大きい文字列を変換する場合はメモリーが勿体ないから 最初に少し余裕取って、CRLF毎に余裕残を減らすとかすればいいけど 今時のパソコンならこれで十分だろう function ChangeLineBreakes(const S: String; Style: TTextLineBreakStyleMultiPlatform): String; const CR =#$D; //#13 LF =#$A; //#10 crlf:array [TTextLineBreakStyleMultiPlatform] of String=(CR+LF,CR,LF); var rp,wp,i:Integer; repstr:string; label putCRLF; begin repstr:=crlf[Style]; rp:=1; wp:=1; SetLength(Result,Length(S)*2); for i:=1 to Length(S) do Result[i]:=#0; while rp<=Length(S) do begin case S[rp] of CR: begin if not (rp=Length(S)) then if S[rp+1] =LF then inc(rp); goto putCRLF; end; LF: begin if not (rp=Length(S)) then if S[rp+1] =CR then inc(rp); putCRLF: for i:=1 to Length(repstr) do Result[wp+i-1]:=repstr[i]; inc(wp,length(repstr)); end; else begin Result[wp]:=S[rp];inc(wp);end; end; inc(rp); end; setLength(Result,wp-1); end;
言ったら悪いけどさあ、 Delギコどこでこんな書き方覚えたんだ? 元のソースは BASIC使いのコードだぞ
>>683 フサギコは速度要求という話だったよね?
なら1文字づつ前進させるより、CR, LFを検索して、その前まではブロックコピーとか
したほうが速いかも。
(文字列全体に対して改行文字の割合が低い場合。一般的には当てはまる)
テストコードに無駄がありすぎ s1=CRLF+'あい'+CRLF+う'+CRLF+CRLF+'えお'+CRLF s2=LF+'あい'+LF+う'+LF+LF+'えお'+LF s3=CR+'あい'+CR+う'+CR+CR+'えお'+CR s4=LF+CR+'あい'+LF+CR+う'+LF+CR+'えお'+CR+LF ってやって相互に変換しろ。
それから効率的な文字列処理やるんならC覚えとけ。 それから改行コード変換なんてフルスクラッチで書くな過去ログ漁れ。
なぜか途中で送信してしまった。
上記URLの3に、
>>685 な書き換えやってみたコードを貼った。
>>683 を書き換えていった結果なのだが、もう不要なlabel宣言が残ってた。
>>687 まあ、頭の体操でいいんじゃない?
他にもconstに使おうと思って書いたが使わなかったテーブルが残ってたな。 ちなみに最適化とともにコードを単純にするため、テストに現れない仕様変更をしてある。 「改行文字要素が続く間、最初の改行文字と一致する文字の回数だけ新しい改行を出力」 つまり CR+LF+CR+LF とか LF+CR+LF+CR, CR+CR, LF+LF ならばいずれも改行を2個出力するが CR+LF+LF というシーケンスが現れた場合、改行を一個しか出力しない。 普通は問題は無いと思うが、改行コードの種類を連続して混在させているソースを扱うのなら(笑)まずいかな。 まあこの部分は他の最適化と独立して調整可能だけどね。
| | ∧ |_|Д゚) ..... |文|⊂) 速度の話なのに、ベンチ幕すらやらないの | ̄|∧|
ちょっと
>>634 は言い過ぎたかなあ・・反省・・
でも、元のコードは ソートでいえば挿入ソートをしてるようなもの
ちょっとファイルサイズが大きくなるとファイルサイズの2乗で時間がかかってしまう
それと、考えずに作って不具合見つけては対症療法的に作ったような感じがしたもんだから
XPが好きなら、そういうやり方を排除しないと・・・みたいな
∧ ∧ ツョック!
ミ;゚Д゚彡 BASIC使いのコードとか言われた…
~ミ,,,,uuミ
でもアリガ㌧ございます。
そうか。SetLengthで確保しておいて
S[X]で書き換えて最後にSetLength呼ぶと
速いのですね。そかそか。
よい勉強になりました。
>>686 テストもさらっと書き換え(追加し)ておくれYO
>>687 ログで見つからなかったよ?
ログ漁るのより、自分で作った方がマシな
事も多いから検索忘れてたけど。
…Cですか………なんかチョット…敬遠でして…
特に文字列扱いがムズすぎて…
>>688-690 4のコードはPCharとMoveがスゴイっすね
PCharの引き算してこんな事出来るんだ。
CR+LF+LFは改行コード二つがいいかしら。
ちょと改造してみるっす。
サンクスコ
∧ ∧
ミ,,。_。彡
~ミ,,,,uuミ
>>692 対処療法ってわけではないのですが
そもそも、どこで時間がかかるかを
マッタク考慮していなかったものでして。
そのテのコードを書く経験がそんなにないんですな。俺。
>>691 どうやったらベンチできるかしら。
>>693 一度再帰下降で四則演算するコード書いてみたら?
一文字先読みするテクニックを覚えると応用が広いよ
まず、 CR/LF/普通の文字の3つに分けて
表を作ってから
・CRがあれば次がLFなら読み飛ばす
・LFがあれば次がCRなら読み飛ばす
・CRかLFなら改行コードを吐き出す
・普通の文字ならその文字を吐き出す
と4つの条件を並べ書いて状態遷移で書き下す方式でやれば書くのも速くなるし
ベンチの方法は、単純にファイルを読んで改行形式を順に変換して元と一致するか比較して終了する
関数作って、その時間を測ればいいのでは?
>>671 遅レスながら原因?は別なところに….
社長がデータ作っているところで
私がリモートで書き込みしているのがまずかったらしいです.
データ自体も壊れていたのが発覚して気がつきました.
(同一タイムスタンプの実行ファイルでいきなり壊れたので)
アホな結末ですいませんです.
∩ ∩ | ∪ | | ~ ../ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ∧ ∧ / 1マソ回ループして前後にGetTickCount | i ,,゚Д゚) < って常套手段ぢゃないの? U U \________ var Tm:WORD; TmStr:string; FuncLoop:integer; begin Tm := GetTickCount(); for FuncLoop := 0 to 9999 do begin {処理} end; Tm := GetTickCount() - Tm; TmStr := Format('%dmsだよもん',[tm]); MessageBox(0,PChar(TmStr),'べんち幕',MB_OK);
1回ループして前後にQueryPerformanceCounter ってのが常套手段だ。GetTickCountは誤差大きすぎ。
>>696 もっと細かい、QueryPerformanceCounter もよく使うね。
最適化のために測るときは、実際に使いたい対象データの性質に合わせたデータを
用意してやらないと、見当違いな最適化する危険があるよね。
>688で書いたやつは、1行がある程度長いときに有利になるように書いた。
テキストファイルを扱うときみたいな。構造としてフォーカスしただけなので、
計測するときはさらに Move をやめて手でループした場合どうか、とか比較してみたり
する必要はあるね。
ちなみに、>683は、短い行が多いデータのときに強そう。
>>693 文字列の a := a + b 形式での順次追加は、大きな文字列相手にやると
ものすごいパフォーマンスヒットになる。Delphiだと安易にやると陥りやすいよね。
最大サイズがあらかじめ分かるのなら先に確保してしまうのは常套句。
分からなくても、別の文字列変数にある程度のサイズになるまで溜めるとかでも効く。
./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | 「高分解能パフォーマンスカウンタがある場合」って脅しにしか聞こえませんが | 普通実装されてると期待して良いの? | ってかコレ何の事言ってるのさ。マルチメディアタイマじゃ無いの? \___________ ._________________ ______ ∀ ∨ | ┷┳━ ∧,,∧,,,,,,,,,,,,,,,  ̄ ̄ ̄ ̄ ̄ ̄ ̄|. ┃ ミ ゚Д゚,,彡,,,,,,,, ゙~  ̄ ̄ ̄ ̄ ̄ ̄ ̄....┻ U U """"UU
700 :
デフォルトの名無しさん :02/03/11 01:30
TShapeコントロールで、 クリックとドラッグがそれぞれ出来るようにしたいのですが、 OnMouseUp にクリックイベント内容を書き、 OnMouseDown に BeginDrag(False,4) とすると、 マウスボタンを押した瞬間に OnMouseUp が発生してしまいます。 どうすれば上手く行くでしょうか。
>>667 誤差を無くすための1万回ループでしょうが
1回ループのほうが何倍も誤差が大きい
そもそも分解能が高いからそっちのほうが良いだろうというのは単なる盲信
てゆーか、timeGetTime でいーんでないの? QueryPerformanceCounter なんて持ち出さなくても。
>>702 持ち出さなくてもっていうか、別にどれ使ったって大した手間かからないし。
なら一番細かいの使うのが調整しやすいかと。
>701
同意。
誤差は、精度が高ければループの回数減らしてもいいんだけど、 マルチタスクOSではその他色んな撹乱要因があるから 何回も手で再実行させたりとかして平均とらないとね。 DOSは測り易かった…
よほどデータ大きくしないとキャッシュ効いちゃわない?とか forよりwhileの方がコンパイル最適化されるよ とか煽ってみるテスト ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | ̄~.ミ ゚Д゚彡~~ ̄| < もう寝 |\⌒⌒⌒⌒⌒⌒\ \ | \ \  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ \ |⌒⌒⌒⌒⌒⌒| \ |_______|
>>698 >見当違いな最適化する危険があるよね。
今回の改行コード変換ルーチンは
前段階として、文字列に対して末尾にしか
改行コードがないように整形・正規化しておくのが一番高速で実装も楽かもね。
>>699 PerformanceCounterは消費したCPUクロック/一秒あたりのクロックで計測する方法で、
今のCPUには必ずついてる機能。動作確認したOSは98/NT/2000/XP。
>>701 実開発ではベンチ専用プロジェクトを起こすことは稀で
# 他クラスに依存してるクラスの単体ベンチなんて
# メソッドひとつ呼ぶのも一苦労
実コード内で計測することが多いので
実行回数を指定することはほとんどないよ。
なので回数が少なくてもいいように最も精度の高いものを選ぶ。
VCみたいにまともなプロファイラついてる
処理系なら選びようがないけど。
>>704 もちろんアプリの種類にもよるけど
ホットスポットは数秒・数十秒消費していることが多いので
他プロセスなどの外部要因があまり大きな影響を及ぼしたことはないよ。
リアルタイムなアプリの場合はプロセスのプライオリティをあげて計測してる。
kylix共用にしたくてAPIコールがやりたくないなら PerformanceCounterの代わりにRDTSCを使えばいいと思う RDTSCの使い方はWeb検索ですぐ見つかる
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|[Delphi-ML:52426] Re: ボタンのドラッグとクリック
| でも見てくださいな
>>700 \_______ _______
|/
☆彡 。 ∧,,∧
\ ミ・Д・ミ
⊂ ミつ
"ミ ;'ξ
し
もし
>>683 のコードを元に高速化するなら
1、 Length(S) は const S でも関数に展開される
だから一旦変数に代入して while ループ内の Length(S) を置換する方がいい
2、文字列への Moji[ i ]:= の代入は関数に置換されてしまう
高速化するなら文字列ではなく文字配列かポインタにするといい
ポインタの例は既にあるので、文字配列にする場合の例
type sarray=array[1..$10] of char; //気持ち悪いけどHighは無視されるからOK
var pD:^sarray; と文字配列のポインタと宣言
pD:=@Result[1]; として ループ中の result[wp] を pD^[ wp ] に置換
3、ループ内の for i:=1 to Length(repstr) do Result[wp+i-1]:=repstr[i]; は勿体ない
var repstr:array[0..1]of char; と文字配列にして
Result[wp ]:=repstr[0];
Result[wp+1]:=repstr[1];
inc(wp,repstrLen);
とする。 repstrLen=1の時は無駄なコピーだけど、比較して禁止するにもコードが必要
>>705 むしろキャッシュに入ったほうが実質的な速度計測には便利かもね。
周辺要因が「変化する」ことは計測をまどわすので不便だが
安定してくれるのならなんでもいいっちゃいい。
そしてキャッシュは性質上、2回目以降はずっと溜まってるわけなので
キャッシュに入った状態のほうが「安定している」。
(余分なディスクアクセスの時間まで計測してしまうこともないし)
forよりwhileのほうがってのも状況次第だな。
今思いついた oC:=char( ord(S[rp]) xor (ord(CR) XOR ord(LF)) ); とやれば octを作らなくてもいいんだ
>Length(S) は const S でも関数に展開される …マジデスカ。最適化されると思って毎回Length呼んでたよ。鬱死
>>711 実際にはこの手の変換は1度限りしかしないのだから
データキャッシュに入らない状態でどれだけのパフォーマンスかを見た方がいい
それ以上に最適化しても無駄。
データバス速度はCPUの実行速度の数10分の1にしかすぎないから
純粋な処理速度見るならむしろキャッシュに入ってたほうがいいんでないの? まあ、それもどういう使われ方想定するかによるけど。 一連の流れの中で、「キャッシュ」という言葉が指してるものも複数登場しているようだなあ。
>683 なんかインデント変。 >717 かなりごちゃごちゃしてきたね。 ところで、ポインタの大小関係見るのにcardinal castは不要でしょ。
そういえば。 >SetLength( Result, Length(S) * 2 ); この2が気に入らないな。速度とは関係ないけど。 SetLength( Result, Length(S) * Length(ReplaceTo) ); がいいかね。
722 :
デフォルトの名無しさん :02/03/11 23:31
>>706 >前段階として、文字列に対して末尾にしか
>改行コードがないように整形・正規化しておくのが一番高速で実装も楽かもね。
局所的にちまちま高速化するより、
こっちみたいに大域的な高速化を検討したほうがいいぞ>フサ&all
まさかテキスト全体を一つの文字列として
処理するなんてアフォなことやってないよな?
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ゴメン。意味わかんない
>>722 、サンクスコ
>>721 そなんだ。
\
 ̄ ̄ ̄ ̄ Ο  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ο
♪ ∧,,∧゚ ♪
ミ,,゚Д゚彡 ♪
ミつ[|lllll]).
~ミ ミ
U''U
>>722 ここでいう正規化ってのはつまり、一行づつ呼ばれるようにすること?
今は普通、大抵のテキストはメモリに入りきってしまうし
まとめて一括でやってる方式のほうが速かったりしてね。
アフォとは言い切れないんではないか。
入力をstringとしている方式からメモリアドレスとサイズ与えるように変更することで
メモリマップトファイルから読ませたりとかね。
∫ _________ ∧,,∧ ∬ / ミ,,゚Д゚彡っ━~ < で、結局どれが一番速いの? _と~,, ~,,,ノ_. ∀ \ ミ,,,,/~), │ ┷┳━  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ .じ'J ̄ ̄| ┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ┻
俺の席取るな ___ ,,,,,,, _____ ミ。Д。彡 ∨゙∨∪ エィ ||| || グチャ ,.__∩__ | ,.:. '.;§, |; ,・. ,.'|_@δ,_|,.': ノ;;つ \ .': ;,・∧,:;。д ミ ;;>,.': ;. ~ _と;・':ζ,,, 。,.':ξ_. A .ミ,,,/~), .| ┷┳━  ̄ ̄ ̄ .し'J ̄ ̄|... ┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ .┻
\ テケテケ / ___.___. ∀  ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ . .| ┷┳━ ∧,,∧,,,,,,,,,,,,,,,  ̄ ̄ ̄ ̄ ̄ ̄ ̄|... ┃ ミ゚Д゚,,彡,,,,,,,, ゙~  ̄ ̄ ̄ ̄ ̄ ̄ ̄ .┻ U U """"UU ∫ プハー ∧,,∧ ∬ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,-Д-ノ,っ━~ < ・・・ _と~,,, ~,,,ノ_. ∀ \_________ .ミ,,,/~), .| ┷┳━  ̄ ̄ ̄ .し'J ̄ ̄|... ┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ .┻ AA張りたかっただけとちゃうんかと、小一時間問い詰め...... >>スマソ下手人さん で、一体誰が速度測ってくれるん?
>724 たかだか一関数にツール並みの汎用性持たせるのは明らかに無駄って事だよ。 変換にこだわるのは変。ブロックコピーも無駄。 各行の頭と末尾(改行コード含まず)を順々に検索する機能だけつけりゃ十分。 後は外部にまかせる。 大体ほんとにこの関数が遅くて困ってる奴がいるのかどうかも謎。 それ以前にこの程度のコードすら満足に書けない厨房の 業務の宿題肩代わりしてやってる奴らもいみふめ。 と支離滅裂に書いてみる。
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| | バレタか | |_______| ||∧,,∧ ||,゚д゚,,;彡ベンチ ガンバッテネ>フサ ||⊂ ~ヽ
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| | デンパか? .| |_______| ∧,,∧|| ミ;,,゚д゚|| 〃 ⊃|| 業務とか、何言ってんの? このお方.... もしかしてpcode氏の酒飲み毒舌だったりして。
731 :
デフォルトの名無しさん :02/03/12 03:37
TSplitteこんとろーるで、AutoSnapをtrue にすると、 コントロールがMinSize 以下になった場合にスナップされ、非表示状態になりますよね。 この、「スナップされた状態」で起動するようにしたいのです。 TForm.OnShow で Splitte.Left := 0 にしても上手くいかないし、 Splitte によってサイズ変更されるコントロールの width に 0 を 設定しても上手く行きません。どうすればよいですか。
732 :
デフォルトの名無しさん :02/03/12 03:59
たとえPCharにキャストしても、インデックスでアクセスしたら遅くなりませんか? ポインタを進めた方がコードが分かりやすいと思うけどな。
733 :
口説いてみよー :02/03/12 04:30
Delフサさん 俺とえっちしませんか?
>730 突っ込みどころが違うだろ厨房君(w
>>732 先読み・余分書きのテクニックを使うので、ポインタを使うとキャストしたり
abosoluteする必要があるので、余計に読みにくくなります
また、ポインタも配列も今は速度に差は殆どありません。
分岐とメモリへのアクセス回数を減らすのが一番高速になります
>ポインタも配列も今は速度に差は殆どありません。 んなこたない。特にDelphiでは。
自分でやれよ
もちろん、配列を使えばインデックスアクセスとなるので 理論的には遅くなる筈ですが 今時のCPUだとインデックス演算は並列に実行されるので、 実際にその効果が現れるようにするには 同時に加減算を並列でさせるような事をしないとオモテに現れない筈です。 普通の文字列処理で差を見せるのは逆に難しいでしょう
∧ ∧ / ミ,,゚Д゚彡< スーパースケーラやパイプを意識するのって別の話題だと思いませんか ミ,つ ~,つ \ ~ミ ミ ∪''∪
確かにモットモな話だけど、配列を使うとレジスタを2つ使ってしまう
ポインタだとレジスタ一つですむから 文字列操作をする場合で読み書きが
複数ある場合は ポインタの方がレジスタ使われて高速になる可能性高し
というか 自分だって
>>717 のコードでポインタアクセスしてるじゃないか
と思って、
>>717 のコード(つまりfunc08)を
rp^ を S[rp] に rpを初期値1で終了条件 while rp<=LengthS do
とて実行させたら そっちが速かった・・・・ あれ?
おかしいと思って色々やってみたら、関数の順番入れ替えるだけで逆転した 結局配列かポインタかより、キャッシュとかメモリアライメントの方が実行時間に影響する って事だな・・・・・
>>744 試してみました。 私の環境ではポインタを使う方が1割程早くなりました。
1割程度の改善はあんまり意味がないと思います。
改善するなら5割程度の効果があるかが目安だと思います
正直、最初のコード以外の差は最大で3倍なので 改行コード変換ルーチンと
してはどれを選んでも大差ないと思います。
最初のコードは 3Kで10倍 10Kで100倍も時間がかかりますから論外ですが
そろそろプロセッサ別の最適化になってきそうだから、 やめた方がいいんでないの?
誰かがインラインアセンブラコードを出すまでは嫌です ハァハァ
>>731 Splitterで隠れるコントロール.Visible := false
で起動すればどうよ?
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| こっちも手前味噌だゴルァ
\_ ________________
|/
∧,,∧
ミ,,゚Д゚ミy━~~
U ミ
~ミ ミ
U''U
>>735 func2よりfunc9が遅いのはどうにも理解できん
と思ってしらべたら、俺のfunc9,func10は
わざわざ少メモリにするために改行コード数えてるのね。
そこが遅くなってる。
あっさりと、SetLengthに元文字列2倍確保と
#0で初期化コードを取り除いて計測したら
func10は相当速い。
func10を修正
//現在の文字列長と最高で改行の数だけバイト数増える分をメモリ確保
SourceLength := Length(S);
// ResultMaxLength := SourceLength+CountCRLF(S);
ResultMaxLength := SourceLength * 2;
SetLength(Result, ResultMaxLength);
PResultStr:=@Result[1];
// for j:=1 to ResultMaxLength do PResultStr^[j]:=#0;
FileSize=9639
レス 1 100.00% = 100 / 1.00
レス 2 5.90% = 100 / 16.96
レス 3 3.23% = 100 / 30.99
レス 7 3.15% = 100 / 31.76
レス 8 2.36% = 100 / 42.41
レス 9 3.60% = 100 / 27.78
レス10 1.41% = 100 / 71.09
FileSize=126311
レス 1 100.00% = 100 / 1.00
レス 2 0.21% = 100 / 484.40
レス 3 0.13% = 100 / 778.84
レス 7 0.12% = 100 / 859.28
レス 8 0.10% = 100 / 970.60
レス 9 0.15% = 100 / 675.93
レス10 0.05% = 100 / 1900.63
FileSize=455501
レス 1 100.00% = 100 / 1.00
レス 2 0.07% = 100 / 1419.33
レス 3 0.04% = 100 / 2377.14
レス 7 0.04% = 100 / 2468.09
レス 8 0.03% = 100 / 2925.36
レス 9 0.05% = 100 / 2011.05
レス10 0.02% = 100 / 5014.22
ただーし!
for i:=High(prog) downto Low(prog) do with prog[i] do begin
計測はレス10.9.8.7...の順で行ってるけど。(w
>>749 おめでとう。 アルゴリズムの改善で1000倍、チューニングで3倍。 こんなものだと思います。
アセンブラでチューニングしてもさらに1.5倍は厳しいです。
結果を見ると 配列使うコードの勝? Cだとstaticなデータにはポインタより配列が速かったけどローカル変数にはポインタの勝なんだけどなあ・・
752 :
デフォルトの名無しさん :02/03/13 10:17
>>749 400Kで5000倍って事は元のコード単に改行取るのに1分くらいかかってたんじゃないのか?
そりゃベーシッカー扱いされてもしょうがないぞ age
∬ ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ~━っミ ゚Д゚彡,, < 遅いコードを書いたら即ベーシッカー扱いかよ ∀._(,,,~ ,,,~⊃_ \_オメデテーナ_______________ ━┳┷ |. ,(~ヽ,,,ミ. ┃...| ̄ ̄し'J.  ̄ ̄ ̄ ┻ ヽ ̄ ̄ ̄ ̄ ̄ ̄ ̄ そんな短絡思考してるからVBや.NETの人にDel厨扱いされるんじゃないの? 文字列のメモリ確保に関するオーバーヘッドの仕組みを 理解していないと、遅いコードを書く事があるってだけでしょ。 というか、元コードのソースぐらい一瞬で理解してよ。 AdjustLineBreakesでCRLFに変換してからCRかLFを削除しているだけじゃん。 その方式の、どこで遅くなっているかを知ってるなんて事は タンナル1知識。Tipsだよ。 func9,10が速いのは、配列とポインタの区別じゃなくて (って、モット早くなるかもね) ループ中に判定する条件判断が俺のは 見ている文字と次の文字がCRなのかLFなのかで func2の見ている文字と次の文字と次の文字が文字列の最終かどうか を判断するコードとはIFの数が違うんでないのかな? あと、誰も突っ込みいれないからアレなんだけど > ただーし! > for i:=High(prog) downto Low(prog) do with prog[i] do begin > 計測はレス10.9.8.7...の順で行ってるけど。(w フサのよくわからない所でキャッシュが効いているようなので for i:=Low(prog) to High(prog) do with prog[i] do begin とすると、最速はfunc8だね。 タンナル1知識とか言ってしまったけど とりあえず、いろいろやって下さった方>おーる ∧,, ∧ ミ。_。彡 ペコッ ~ミ,,,U U,,ミ めちゃ勉強にナタ。アリガトウ。
∬ ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ~━っミ ゚Д゚彡,, < 遅いコードを書いたら即ベーシッカー扱いかよ ∀._(,,,~ ,,,~⊃_ \_オメデテーナ_______________ ━┳┷ |. ,(~ヽ,,,ミ. ┃...| ̄ ̄し'J.  ̄ ̄ ̄ ┻ ヽ ̄ ̄ ̄ ̄ ̄ ̄ ̄ そんな短絡思考してるからVBや.NETの人にDel厨扱いされるんじゃないの? 文字列のメモリ確保に関するオーバーヘッドの仕組みを 理解していないと、遅いコードを書く事があるってだけでしょ。 というか、元コードのソースぐらい一瞬で理解してよ。 AdjustLineBreakesでCRLFに変換してからCRかLFを削除しているだけじゃん。 その方式の、どこで遅くなっているかを知ってるなんて事は タンナル1知識。Tipsだよ。 func9,10が速いのは、配列とポインタの区別じゃなくて (って、モット早くなるかもね) ループ中に判定する条件判断が俺のは 見ている文字と次の文字がCRなのかLFなのかで func2の見ている文字と次の文字と次の文字が文字列の最終かどうか を判断するコードとはIFの数が違うんでないのかな? あと、誰も突っ込みいれないからアレなんだけど > ただーし! > for i:=High(prog) downto Low(prog) do with prog[i] do begin > 計測はレス10.9.8.7...の順で行ってるけど。(w フサのよくわからない所でキャッシュが効いているようなので for i:=Low(prog) to High(prog) do with prog[i] do begin とすると、最速はfunc8だね。 タンナル1知識とか言ってしまったけど とりあえず、いろいろやって下さった方>おーる ∧,, ∧ ミ。_。彡 ペコッ ~ミ,,,U U,,ミ めちゃ勉強にナタ。アリガトウ。
_________ ∧,,∧ / ミ;゚Д゚彡< あり? ミ⊃ ⊃ \ ~ミ ,, ミ.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∪∪ 多重カキコスマソ
756 :
デフォルトの名無しさん :02/03/13 20:55
>>754 ちょっと認識が変だぞ
遅かったのは文字列のメモリ確保に関するオーバヘッドじゃなくて
改行コードを見つける都度コピーした点だろうが!
コピーはサイズに比例する時間を消費する
だから改行数*文字列サイズ/2 の時間を食っていたのが根本的な原因
単にメモリ確保だけなら、サイズに比例する時間しか喰わないっての!
>>347 ∧,,∧ /
_ ミ,,゚Д゚彡_< はぁ。。。
.=| |==U==U=| |= \
| |@ミ ミ .| |
| | ∪''∪ | |
| | | |
ピーコするときにメモリ確保するでしょ?
それにかかる消費時間が頭から抜けてた
って事を言いたいんだけなんだけど。
ジヅラの間違い指摘は
わざわざageて言うことなんか?
>>757 どうでもいいがどこにレス返してるんだ?
糞コード書いといて居直るなよ・・・ つーかネタは辞スレでやれ
| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| | アセンブラチューン キボン | |_________| . ∧∧ || ( ゚д゚)||ハァハァ / づΦ
762 :
デフォルトの名無しさん :02/03/14 00:39
C++Builder 6 発売後に、XPに正式対応した Delphi 6.1 が出そうな気がする。
>>760 確かに日本語対応してないね。
日本語未対応と書いておこうか?(笑)
>>762 XP対応は、時期的に見てもUPDATE #?で対応して欲しいものだ。
日本語版 UPDATE2 はいつよ?
767 :
デフォルトの名無しさん :02/03/14 08:47
C++Builder 6 は、XP対応なのにね。あと一年以上待たないといけないのか…
>>761 アセンブラでやる前に改善できるかどうか調べる必要があります
まず QueryPerformanceCounter の代わりに RDTSCで命令数を数えるようにします
function RDTSC:int64;
asm
DW $310F //RDTSC
end;
cnt0:= RDTSC;
delete(tests,1,1);
write( ( RDTSC-cnt1 ) div ( length(tests) ) );
のようにして 単なるコピーに必要な平均の命令サイクルを調べます。
結果は、現在のコードでも私のパソコンでは改善の余地は無いと出ました
えーと。ところで「文字列に1文字追加するたびに全データコピー」ってことは 実際にはおきません。各文字列毎に末尾に小さな余裕が残っていて(1~3文字) それを使い切るまではメモリ再確保はおきない。 再確保がおきても領域拡大ができる場合はその場で処理。 文字列毎の拡大用バッファを通常の物より大きめにとったライブラリを使うと 大規模文字列を扱うアプリでの高速化ができる。
C5 1999-9-22 C5 2000-3-24 D6 2001-7-25 C6 2002-3-19 D7は来年の8月前後か
C5 1999-9-22 は D5の間違い
Kylix が途中から入っていることを考慮しないと。 D5 1999- 9-22 C5 2000- 3-24 : 184 日 K1 2001- 5-18 : 420 日 D6 2001- 7-25 : 68 日 K2 2001-12-12 : 140 日 C6 2002- 3-19 : 97 日 Kylix 1 が難産であったことがよくわかる。よくつぶれなかったな。 んで次は K3 : 2002/8 で、その次が D7 : 2002/11 遅れても今年末から来年頭かな
D1~D5までは1年おきにでてるから意外とはやかったり
D7とDelphi.NETが別製品になるならD7出るのは早そうだな。 同一製品になるなら結構かかるんじゃないか?
775 :
Delフサギコ ◆zE1iiRdQ :02/03/18 23:43
,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ~′,,,,,,,ミ,,゚Д゚彡< SetLengthってWideStringに対して UU""" U U \容量確保はどうするの? 10文字分のWideString領域確保の場合 SetLength(WideStr, 10); が正しいか SetLength(WideStr, sizeof(WideChar) * 10); とするのが正しいか。どっちでしょうか。 多分前者だと思うのですが、よくわかりません。 ご存知でしたら教えてくださいな。 どっち指定してもエラーでないで終わることが多いので デバグやりにくいーYO
>>775 つーか、なんでLength()で確認してみないんだ?
>775 今調べたら前者みたい. procedure TForm1.Button1Click(Sender: TObject); var ws: WideString; begin SetLength(ws, 10); ShowMessageFmt('wsの長さは%dだぜ', [Length(ws)]); end; procedure TForm1.Button2Click(Sender: TObject); var ws: WideString; begin SetLength(ws, sizeof(WideChar) * 10); ShowMessageFmt('wsの長さは%dだぜ', [Length(ws)]); end; 前者は10,後者は20でした.
つーか、なんでライブラリソース読んで確認しないんだ?
>>774 Kylixもそーなんだが、Delphiの種類増やすよりも、1枚のCDへ
全部入れて欲しいよ。可能なら価格据置でさ。(藁)
銭かかってしょーがねぇ・・・。
Borlandが倒産する前にこっちが逝ってしまう。
貧乏学生なので毎年のアップデートですでに逝ってます。
そもそも5→6へのアップデートすら覚束無い(汁 奇数バージョンごとにアップデートで乗り切ってますが…
学生は無料版でよくない?
ある種のハードを制御するコンポーネントを作っているのですが ハードの種類が複数になったのでプロパティを追加して そこを変更するだけでいいようにいいようにしようと考えました. ハードの種類が増えても元のソースを一切書き換えなくてもいいように, ハード固有を操るための部分の枠組みを抽象クラスにして, 個々のハードの制御はこの派生クラスで行うようにしました. (TGraphicとTBitmap, TMetafileみたいなやつですね) ハードの種類を切り替えるプロパティはクラス参照型にしており, 実際に動作しているのですが, 悩みの種はpublished型にしてもオブジェクトインスペクタに現れないのです. どうやらクラス参照型をpublishedにすることはできないようです. しかし,せっかくDelphiを使っているので設計時にも変更できるようにしたいのですが, どうしたらよいでしょうか.
>>782 Proに乗り換えた今、正直Personalは使えないっす(´д`)
昔はLearningだっけ?使ってたけどさ。
TMyCompo=class published Hardware: THardware; end; THardware=class(TComponent) end; TMyHardware1=class(THardware) end; TMyHardware2=class(THardware) end;
>>783 >(TGraphicとTBitmap, TMetafileみたいなやつですね)
TImage がどうやっているか見習ったら?
クラス型は published にできるよ
787 :
デフォルトの名無しさん :02/03/20 08:45
MyBaseの優しい使い方を解説している本やHPなどありましたら ぜひ紹介してください。
MyBaseの激しい使い方 MyBaseのくだらない使い方 MyBaseのいまいましい使い方 MyBaseの優しくて美しい使い方
789 :
デフォルトの名無しさん :02/03/21 05:37
MyBaseに優しいエネルギー MyBaseを256倍楽しむ本 間違いだらけのMyBase MyBaseについて語ろうか(秋元康) 塀の中のMyBase 一杯のMyBase
790 :
デフォルトの名無しさん :02/03/21 05:41
ホワイトベースと何か関係があるのでしょうか?
791 :
デフォルトの名無しさん :02/03/21 11:47
>788-790 MyBaseで嫌なことがあったの?
>>787 前から探してるんだけどないんだよなー。
データベース全般に関してはDelフサがよく挙げる本
(データベース開発者なんちゃら)がいいと思う。
で、MyBaseに関してはそんなに面倒な話ではないと思うが。
XMLベースのParadoxだと思えばいいくらいなんでないかい?
イメージ的にはTDataSet + TStringListくらいかな?
794 :
デフォルトの名無しさん :02/03/21 18:45
スレッドセーフなTStringList作って
>>785-786 クラス型(オブジェクト)ではなくクラス参照型のプロパティにしたかったのです.
確かに言語ガイドを見てもクラス参照型がpublishedプロパティにできるとは
書いていませんのでこれはあきらめて,
クラス参照の代わりにクラス名を文字列で持つようにしてみました.
これでうまくいきました.
新しく定義したクラスを書いているユニットをusesに入れなくてもよいので
かえって良くなった感じです.
>795 珍妙なインタフェースだなぁ ほんとにそんなことする必要あるの? まあTTable.DataBaseNameがあるから 空前にして絶後な珍妙さではないが。
>>へたグラマさん
どうも、お久です。
とりあえず、クラス参照はだめなんでせうか?
http://www.wwlnk.com/boheme/delphi/tips/tec1290.htm それにしても、そういう場合は
設計を見直して各機器のクラスを持たすのではなくて
TMyHardware1のインスタンスを持たすべきかと思われ。
DelphiのダイアログページもUMLのクラス図っぽいけど
クラスについて記述するのではなくて
インスタンスについて記述する方法だし、実際のプログラミングでは
そちらの方がよっぽど分かりやすいんじゃないかしら。
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
∧,,∧ 春ですなマターリ
ミ,, ゚Д゚彡
〃つ旦O
~ミ,,[ ̄ ̄ ̄.]
 ̄ ̄ ̄
VBで作ったActiveXDLLを Delphiに取り込むのって タイプライブラリの取り込みで dclusr60.bplとかいうのを作ってみて 動作させてみたんですが ∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,゚Д゚彡 < これでよかったのかな。 ミ つ日 \___________ ~ミ,,,,,, ,,ミ EarlyBindingとかLateBindingとか 考えなくてもええんかしら?
>>783 >ハードの種類を切り替えるプロパティはクラス参照型にしており
こういう場合は、ハードの種類に対応した列挙型を定義して、
その型のプロパティーにすると思うんだが
>>793 レスありがとうございます。
でもMyBase関連本はやっぱり無いですか・・・
私の見方が悪いのか、マニュアルにもほとんど記述が無いし。
初心者なので、どうしたらいいのかさっぱりです。
他の方はどうされています? それとも使っては無いのでしょうか・・・
>>799 だけ後から対応するハードウェアを追加できない仕様
>>797 にあるように個々のハードウェアのインスタンスを参照するのが
もっともよくあるパターンだろうと思うよ
クラス参照を保持するということはハードウェア操作クラスである TMyCompo
がハードウェアクラスのインスタンスを自由に生成できるということだ
が、ハードウェアクラスのインスタンスを動的に多数生成する必要が本
当にあるのかどうかという点が重要かもね、ないと思うんだけど。
仮にあったとしても、ハードウェアクラスのインスタンスを生成する
ファクトリークラスのインスタンスを保持するようにすると良いので
はないかな。
802 :
デフォルトの名無しさん :02/03/22 16:17
デュアルディスプレイのセカンダリー側で使いたいのだけど 起動時から、そっち側に固定する方法ってあるの?
>>802 IDEの話なら最大化しないで移動しとけば位置を記憶しておいてくれる。
フォームの話ならDefaultMonitor, Positionプロパティを指定。
>803 いや駄目です。プライマリ側に固定されてしまいます。 なにかレジストリいじる方法でも良いから手が無いのでしょうかねー
>>796-797 ,799,801
大事なことを説明し忘れていたのですが
『一つのアプリで制御するハードは一つ』
『プログラム中でパラメータは常に一定』
なのです.
ハードといっても制御系のプログラムでは全然なくて
プロテクトキー(不正使用防止の装置)なのです.
もともと他の人が作ったコンポで主要アプリに使っているので
互換性を捨てるわけには行かず,
またコンポを呼び出す側でハードウェアクラスのインスタンスを作るコードを書くのは
びゅーりほーな解決策とは思えませんで.
で,私が書いたコードを詳しく書くと
・制御コンポのユニットにハードウェアクラス(参照)のリストがあります.
(クラス参照型プロパティにしていたときに使っていなかった(←アホ))
・ハードウェアクラスを追加した場合はこのリストにクラス参照を追加します.
・制御コンポのハードウェアを識別するプロパティ(文字列型)に代入すると
・もとのハードウェアオブジェクトがあれば破棄
・クラスのリストからこの名前のクラス参照を検索する.
・見つかったらそのクラス参照のCreateでハードウェアオブジェクトを生成
ということをやってます.
『オブジェクト指向における(中略)デザインパターン・改訂版』の
Factory Method パターンを読んでみたのですが,
なんとなく『factory methodをパラメータ化する』と次のSmalltalkでの実装例に
似ているような気がしないでもないです.
クラス名の代わりにクラス識別子(ハードウェア識別子)として
数値や文字列を使うようにすればもっとスマートになりそうです.
これなら同じハード用のクラスを別なクラスで差し替えたりもできますからね.
807 :
デフォルトの名無しさん :02/03/22 18:55
>>806 > mov ah,[ebx]
> cmp eax,$0a0d
これって巧い方法だけど、パーシャルレジスタストールとかにかかるんじゃなかったっけ?
>805 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ( ´∀`)< 人を小馬鹿にしてますね。 ( ) \_____ | | | (__)_)
>807 試してないけど大して変わらんと思うよ。 >808 面倒だったからパイプラインとかストールは無視してたよ。 movzx ax,[ebx-1] に書き換えればOKかな?
>>806 うーん ギコ猫の仕様とは一致しないようだね
速度も残念ながらの結果か
でもサイズだけはメリットがある
>>809 ヽ(`Д´)ノ "サイショカラ ソウ セツメイシロ!" トイウコトデシタラ オワビシマス!!
( ) ウワァァン!!
/ ヽ
ソレトモ、 ベツノコト?
∧_∧ / ̄ ̄ ̄ ̄ ̄ ( ・∀・)< オマエモナー ( ) \_____ | | | (__)_)
>800 BDEを使わずDBが組めるとの触れ込みでD6買ったけど 漏れもよく分からず困ってる。 誰か知らない?
816 :
デフォルトの名無しさん :02/03/23 00:03
任意の言語で作成されたDLL内での例外はどうしていますか? DLL内でどう処理しょりしたものか・・・。 1)戻り値で返す 2)GetLastError の様なものを使う 3)DLL内でエラーメッセージを出し、EXEへは連絡しない。 等々 どんなのがいいのでしょうか?
3は論外(エラーリカバリがDLL内部で完結するならいいけど) 1が無難では
質問しておいて、回答が来ると、そのあとどんどん条件を加えて 行く、というパターンがあるよね。明らかに本来知りたいことを 一般化できなくて失敗した質問をしてしまったときと、 かなり意図的に回答者を誘導しようという意思が見え隠れしている 時もある どちらも、質問の前提条件を小出しにすることには変わりなく、 結果的に回答者を小馬鹿にすることになる こういうのを見ると、こいつには二度と回答を書くまい、と 思う
うぜーな そんなにお作法ゴッコがしたいんならML逝け
>>816 うー3だけ、はイヤだが、設定によってはDLLからエラーダイアログとか
出してくれる、というのだと楽なこともある(例:GOGO.DLL)
2は結局ラッパ作ってしまうので面倒。1がイイ。
オレは809じゃないが、809の気持ちは分かるな 805は、回答者に、すまん、とか、ありがと、の一言を加える べきだったとオモフ 一方的に、しかも長々と条件を追加してるだけだからなぁ (しかも、自己解決してるみたいだし) お作法ごっこじゃないぞ。匿名でも、どこかに最低まもるべき ことがあると思うんだよ
だからうぜーってんだよ アフォをアフォととがめる奴はより異常にアフォなんだよ いちいちレス付けんなよ つーか投げーんだよ 無視するか市ねヴォケの一行にしとけ
>>817-822 うーむ、
2)GetLastErrorなら、戻り値をTrue/Falseで比較できてわかりやすいんですよね。
でも、1)と同じで戻り値の定義が面倒・・・。
3)はエラーダイアログが金太郎飴化する危険性がある。
3)なら手っ取り早く詳しいエラーメッセージを出せるんですけどね・・・。
>>818 そういう場合は質問で返せばいい。
>>824 >アフォをアフォととがめる奴はより異常にアフォなんだよ
そーか、そういうもんなんだね。ご忠告、アリガト
エラー時は表示したいメッセージを設定して、戻り値FALSEでExitする。(E.Messageの様なもの) しかるべき時にEXE側でそのメッセージをダイアログで表示する。 がいいかな・・・。 う~ん
>>825 3の問題点はユーザーに勝手にエラーを伝えてしまうこと。
呼び出し側でエラーを表示しないでリカバリ・終了しようと思っても
できなくなってしまい、使い方が限定されてしまう。
ライブラリはエラーを呼び出し側に伝えるだけで、
エラーの処理方法は(その都度)呼び出し側が決める。が鉄則。
例外処理機構もこれにのっとってるでしょ。
>>783 の事を言っているの?
質問の意味が分からないので無視。
>>816-828 の辺り・・・
1)なんだけど、エラーが発生したとき返ってくるエラーコードから、
適当なエラーメッセージ文字列に変換する関数をDLLで用意されてると
助かるなぁ・・・
function ErrCodeToErrStr(err:Integer):PChar;
みたいなのね。
>>818 ,823
うう,そういえばお礼の言葉,何も書いてない.最低だよ(T_T.
今更ながら785さん786さん796さんDelフサギコさんありがとう.
809さんごめんなさい.
そして本来なら私が824さんのおっしゃるような仕打ちを受けてもおかしくないところを
私の失敗点を指摘してくださった818さんと823さん,ありがとう.
832 :
名無し~3.EXE :02/03/23 09:49
833 :
デフォルトの名無しさん :02/03/23 10:50
UP2の更新内容の詳細が知りたい。
>832 Indyは9でも日本語関係はほとんどテストしてないと思われ あんまりソースが変わっていない
>>815 いま手元にDelないんで未確認だが
とりあえずサンプルついてたはずなんでそれを見てみれば程度わかる(と思う)
>>793 にも書いたが、単独で使う分にはXMLフォーマットのParadox
ってくらいの操作感だった。
わかりやすいのはdbExpressでRDBMSに接続して、TSQLClientDataSetで
SaveToFile?してみるとか。
そのあとRDBMSと切り離してLoadFormFile?すると簡単にブリーフケースモデル
みたいなものが出来上がる。
前にTDataSet + TStringListって挙げたが、
CacheUpdateのローカルデータが保存可能なTDataSetってほうがわかりやすいかな。
使って見ればだいたいわかるYO!
>>834-836 もちろんそこは読んでますよ。知りたいのはその詳細。
UP1のときは D601FIXES.html に書いてあったけど、UP2にはそれがなかったので。
( readme_62.txt には D602FIXES.html に詳細が書いてあると記述されているのに )
>英語版ではUP2でIndy9.02bに置き換えてるのに, してない。してない。 自分で Indy インストールしたでしょ。
D602FIXES.html 欠落はどうしようかねぇ。 またうん十メガダウンロードするわけにもいかないし。 Web で公開。ってところか。
843 :
デフォルトの名無しさん :02/03/23 20:03
>>842 とりあえず、ボーランドにクレームのメール送っときました。
>>841 ごめん。勘違いでした。>Indy9.02b
845 :
デフォルトの名無しさん :02/03/23 22:47
誰かC#の体験レポートしてくれ~ 特にRAD周りの比較お願い。
>>845 Visual Studio .net スレから拾ってみたよ
954 :神 :02/03/22 21:08
やっぱC#いいわ。
しかも冗談じゃなく、VBにどっぷり漬かった奴には理解できないと思った。
C++やったことあるなら楽勝。VBの経験もほんのちょっとあったら操作方法には馴染むからいいかもね。
24 :デフォルトの名無しさん :02/03/22 21:30
Windows2000で Delphi先にインストールしてて VS.NET 入れた人
Delphiの動きに支障は無かったですか?
56 :24 :02/03/22 23:26
>>54 ありがとう 大丈夫。インストール終ったみたい。
心配だったDelphiへの影響も今のところ出ていない。
C#は ホント 見た目Delphi+VBって感じでマニュアル見なくてもGUI部は触れるみたい
でもコンパイル速度滅茶苦茶速いというのは話半分だったみたい。
BCBよりは速いけどDelphiよりも速いとは思わないな
それとIDEから実行したらコントロールがひとつづつ表示されるのが見えるくらい遅い
まるでJAVAみたい。 直接実行したらそうでもない所みたら IDEが重すぎてスワップしまくりなんだろなあ
122 :デフォルトの名無しさん :02/03/23 13:42
なんだ C#って2Wayツールじゃないのかよ!
結局Delphiを真似てDelphiを越えてないじゃないか
>>846 ありがと。
>BCBよりは速いけどDelphiよりも速いとは思わないな
コンパイル速度はこれで十分かも。
>なんだ C#って2Wayツールじゃないのかよ!
2Wayじゃないのは特許関連で縛りでも入ってるのかな。
でもあんまり重要でもないような。そうでもない?
>2Wayじゃないのは特許関連で縛りでも入ってるのかな。 >でもあんまり重要でもないような。そうでもない? 2Wayは特許だったかも (普段あまりにも当たり前に使ってて どの辺が2Wayなのか実は把握しきれてなかったりする・・・恥 コンポーネント名を変えると ソースのイベントハンドラが自動的に書き換わるあたりかな? VBはそれができてないはずだから) DelがDBの中身を設計中も表示してくれるのは有難いと思うけど C#はだめなのかな
,,,,,,,,,,,,,∧,,∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ~′,,,,,,,ミ;゚Д゚彡< ・・・・・ UU""" U U \_______________ 俺は2Wayってのは Button1をClipboardにコピしたら テキストでペストできる機能の事とばかり思ってた んだけど。間違ってたろうかしら。
>802-804 いろいろやってみましたが、やっぱりダメです。 詳しく書くと、メニューウィンドやフォームはセカンダリ側に指定できるのだが オブジェクトインスペクタなどは、欲しい位置に移動しても コンパイル・実行し終了させると、プライマリー側に戻ってしまいます。 誰かマルチディスプレイ環境で使用してませんか?
ビジュアル開発とソースコード開発を両立させる2Way-Tool -------------------------------------------------------------------------------- Delphiの統合開発環境には、迅速なアプリケーション開発を実現するビジュアル開発と、 きめ細かい処理を記述するためのソースコード開発を密接に連携させる2Way-Toolという 機能が組み込まれています。 2Way-Toolでは、ビジュアル環境で開発した内容をソースコードに展開するだけでなく、 ソースコードで入力したプログラムの内容をビジュアル開発で利用したり、 ビジュアル開発とソースコード開発の双方向でコンポーネントやフォームを カットアンドペーストすることもできます。 2Way-Toolにより、開発者はいつでもビジュアル開発に対応するソースコードに アクセスできるため、ビジュアル開発の制約について心配する必要はありません。
853 :
デフォルトの名無しさん :02/03/24 13:14
MyLog: TStringListにログ情報書き込んでるんだけど、 あるモードではMyLogに変更あり次第Memo1.Linesに同じ情報を書き込まないといけない。 毎回deep copyするのも無駄なのでMemo1.LinesのインスタンスをMyLogにしたい。 でもMyLogはMemo1などのコンポに依存したくない。(間接的にもMyLog := Memo1.Linesはしたくない) こんなの無理?
>849 知らんかった→テキストでペーストできる。
>>853 さん
,,,,,,,,,,,,,∧,,∧ /ログ書き出し関数の引数をTStringsにして
~′,,,,,,,ミ,,゚Д゚彡< MyLogを渡したりMemo1.Linesを渡したりして
UU""" U U \よし
>853 メモコンポの代わりにリストビューコンポを使い, オーナーデータ機能を使ったらうまくいくかも. 以下,MyLog が TForm1 のフィールド変数だという前提で この内容をリストビューコンポに表示させるサンプルです. (当方のDelphi5で動作確認しました) リストビューコンポを置いてこれの ・OwnerData を True に ・ViewStyle を vsReport に ・ShowColumnHeaders を False に またカラムエディタを起動して(リストビューコンポを右クリック→カラムの設定) カラムを1個だけ追加します(カラムエディタの追加ボタン) あとボタンを1個置いてください. // リストビューコンポがある項目のデータを要求したときの応答 procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem); begin Item.Caption := MyLog[Item.Index]; end; // MyLogの内容が変わったときの応答 procedure TForm1.MyLogChange(Sender: TObject); begin // リストビューに項目数を教える ListView1.Items.count := MyLog.Count; // 再描画命令 ListView1.Invalidate; // 一番下の項目が見えるようにする. if ListView1.VisibleRowCount < ListView1.Items.count then ListView1.Items[ListView1.Items.count - 1].MakeVisible(True); end; procedure TForm1.FormCreate(Sender: TObject); begin MyLog := TStringList.Create; MyLog.OnChange := MyLogChange; end; procedure TForm1.FormDestroy(Sender: TObject); begin MyLog.Free; end; // ボタンが押された→MyLogに項目を追加 procedure TForm1.Button1Click(Sender: TObject); begin MyLog.Add(FormatDateTime('hh:mm:ss', Now)); end; まだ工夫の余地があると思いますが何かのヒントにでもなれば.
>>851 「デスクトップ位置の保存」(だっけ?)ではダメれすか。
>857 はい、ダメです。 メニューウィンドウはいけますが、書いたようにオブジェクト…は元に戻ります。
クラスのプロパティーは、それ自体では値を持たないんですか?
必ずしも持つとは限らない。 property Zeikomi: Integer read GetZeikomi; function foo.GetZeikomi: Integer; begin Result := Trunc( Zeinuki * 1.05 ); end; みたいに直接値を持たずに他のプロパティから計算して求められる場合もあるし。
↑ちょっと違うか... プロパティはそれ自体は値ではない。 変数・関数の代表・象徴(?)みたいなもの。 仮想変数とでも言うべきか。
>>861 ありがとうございます。
えっと、プロパティは仮想変数みたいなもんで、ゲッタ/セッタっぽい
関数を後ろに書いてフィールドにアクセスするんですね。
Delphi で学ぶデザインパターン入門 キタ━━━━━━(゚∀゚)━━━━━━ !!
865 :
デフォルトの名無しさん :02/03/29 00:11
OracleのStoredFunctionの戻り値ってどうやって受け取ればいいの? StoredProcedureなら実行できるけど・・・・ なにか見落としているのかなぁ
なぜにIteratorや生成ネタにこだわるかね 振る舞い・構造に関するパターンのがよっぽど役に立つよ
867 :
デフォルトの名無しさん :02/03/29 01:35
ボス! 列挙型の各タイプについて処理をしたい訳なのですよ。 で、ループで処理すると楽なので、型の最大値を整数型(ByteとかIntegerとか)で 手に入れる方法を教えてくださいな。 例えば>673あたりに出てくるTTextLineBreakStyleMultiPlatformを例にすると、 High(TTextLineBreakStyleMultiPlatform); でもだめぽ、 High([Ord(tlbsmpCRLF)..Ord(tlbsmpLF)]); でもだめぽ ヘルプ見てもよくわ 頼みの綱のGoogleでもよくわ… というわけでボス助けて!
High([Ord(tlbsmpCRLF)..Ord(tlbsmpLF)]);って間抜けなような…(スマソ Ord(High(TTextLineBreakStyleMultiPlatform))では?
>>869 いろいろ試してダメで、藁をもすがる思いでやったので…
>Ord(High(TTextLineBreakStyleMultiPlatform))では?
あれ、さっきそれでやったら型の互換性がないと怒られたんだけど、
今やったら成功した(;´Д`)
Typoだったのか…? 宇津氏
なにはともあれサンクスコ!
871 :
デフォルトの名無しさん :02/03/29 14:36
>>871 >※お詫び 本アップデートにて、修正点(英文)を記載したファイルがインストールされません。
>お手数ですが D602FIXES.html をご参照ください。また、Professional 版および Enterprise 版
>ではアップデートの際にソースコードの一部がインストールされません。この問題に対処する
>ため、delphi6update2.exe を実行後に、delphi6update2profix.exe または delphi6update2entfix.exe
>を実行してください。
だそうだ
ちぇ、漏れはPersonal版しか持ってないから関係ないよ
すんなり入ったけど Fixの方はインストールのチェックしてないのか? もしかして誰でもそーすもらえるのけ
∫ ∧,,∧ ∬ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ミ,,-Д-ノ,っ━~ < また、Updateの修正版か... _と~,,, ~,,,ノ_. ∀ \_________ .ミ,,,/~), .| ┷┳━  ̄ ̄ ̄ .し'J ̄ ̄|... ┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ .┻ 毎度のことなので、Updateが出ても しばらくは様子見するのがいいのかな。
>>868 列挙型は数に変換しなくてもそのまま for 文で使えますよん.
var
e := TTextLineBreakStyleMultiPlatform;
で,
for e := Low(TTextLineBreakStyleMultiPlatform) to High(TTextLineBreakStyleMultiPlatform) do
または
for e := Low(e) to High(e) do
// 以下,蛇足.
type
TDayOfWeek = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
const
cDayOfWeekNames: array [TDayOfWeek] := (
'日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日');
procedure TForm1.Button1Click(Sender: TObject);
var
e: TDayOfWeek;
begin
// 各々の曜日について
for e := Low(TDayOfWeek) to High(TDayOfWeek) do
case e of
Sunday:
s := '日曜日に市場に出かけ 糸と麻を買ってきた';
Thursday:
s := '木曜にバラを買い,手紙を添えた';
else
s := format('%sは深夜まで働いてた', [cDayOfWeekNames[e]]);
end;
ShowMessage(s);
end;
end;
878 :
デフォルトの名無しさん :02/04/01 01:00
ちゅらちゅらちゅらちゅらちゅらちゅらら~♪
このページは最新の JavaScript を使えるブラウザでご覧下さい。 こ の ペ | ジ は 最 新 の J a v a S c r i p t を 使 え る ブ ラ ウ ザ で ご 覧 下 さ い 。 このページは最新の JavaScript を使えるブラウザでご覧下さい。
何?縦読みすればいいの?
横書きを縦書きにするツールを作った事を自慢したいのでしょう。
function IntNumber(const str:string;var pos, val:Integer):boolean; var c:Char; npos:Integer; function getc:Char; begin pos:=npos; if pos>length(str) then c:=#0 else begin c:=str[pos];npos:=pos+1;end; Result:=c; end; var s:string; procedure hex; begin s:='$'; if not (getc in ['0'..'9' , 'A'..'F' , 'a'..'f'] ) then abort; repeat s:=s+c until not (getc in['0'..'9' , 'A'..'F' , 'a'..'f']); val:=StrToInt(s); end; procedure bin; var dt:Integer; begin dt:=0; if not (getc in ['0'..'1' ] ) then abort; repeat dt:=dt*2+(ord(c)-ord('0')); until not (getc in['0'..'1' ]); val:=dt; end; label nxt; begin npos:=pos; Result:=true; try case getc of '0':case getc of 'X','x':hex; 'B','b':bin; else goto nxt;//func(0); end; '$':hex; '1'..'9': begin nxt: s:=c; while getc in['0'..'9'] do s:=s+c; val:=StrToInt(s); end; else Result:=false; end; except Result:=false;end; end;
アセンブラのような感じのツールを作りたくて
数字フィールドを切り出すルーチンを作ってる所です
>>882 はその途中なんですが
目標仕様は
引数 str の posからの文字が数値なら帰り値=trueでvalで値を返す
またposは数値であった最後の文字の次の位置を示す
10進以外に
16進数 $FF 0xFF 0FFH
2進数 0b1010 1010B
というものなんですが、 $FF 0xFF 0b1010 プリフィックス式は対応してるのですが
0FFH 1010B のようなpostfixにも巧く対応させる良いアイデアが浮かびません
難しそうなのは 01B23H のような感じの場合なんです
盗りあえずBNF書け
>>884 ゴメン 書けません というかよく判らない
Delphi.NETなんてやめとけ>某
あ!別の関数を作って
1、 postfix式16進数かどうか調べる
2、 postfix式2進数かどうか調べる
3、
>>882 を
という方法でいけそう
なんか格好悪いけど これでいいや
>>882 まず、IntNumber() と言う、わけわからん名前を何とかしろ。
話はそれからだ。
とりあえず
>>887 の方法で動いたからもういいや
ちょっと3回もスキャンするのがイヤンな感じだけど パソコン早いから問題なしと
たぶん、逝ってよしな質問なんだけどいいかな? ∧,,∧ ,ミ ゚Д゚彡 ・・・・・アオラレマセンヨウニャ ミ ∪ ミ~,, ミ ∪ ∪ 画像Aと画像Bとが≒かどうかを判定するルーチンって みなさま、どないしてお書きなさるのでござましょう。 アイデアからして、サパーリなので、教えてクスコ ちょっと考えたのは 画像からランダムに点を取得して その色がほとんど近いものならば一致と判断して 点がいくつ一致するかで、大体AとBが似ていると 判断させるとかかな。 一応、画像A,Bは同じ大きさとして考えてます。
>>891 2つのTImageに表示させ、「同じ」「違う」のボタンをおいて、
ユーザに判断させる。
893 :
デフォルトの名無しさん :02/04/02 01:00
(´-`)。o ○ (そのアルゴリズムを一度でも考えたことのある人って どのくらいいるのかなぁ?オレの知る中でフリーなのは一つしかないなぁ。 シェアならあるのかなぁ?)
画像A≒画像Bがどういう状態か理解(定義)しないと。
>>891 もうちょい真面目に。
ObjectBinaryToTextでテキストにして文字列比較。
遅いだろうけど。
(´-`)。o ○ (
>>895 あ、それちょっと面白いなぁ…)
>895 ??
たとえば、10ピクセルずれた画像はどうなるの? 二つの画像は近いといえるの?
899 :
デフォルトの名無しさん :02/04/02 01:12
895はどういう事なの?
900 :
デフォルトの名無しさん :02/04/02 01:14
2つの画像が全く同じかどうかを高速に判定するための≒なのか、
2つの画像の中の図形のずれが≒なのか、
2つの画像の色相や彩度などの違いが≒なのか、
それとも他の≒なのか。
つまり
>>894 に同意。
一つ目の「全く」は「だいたい」ね。
沢山のアルゴリズムで調べて、そのうちのどれか一つでも 近ければ、近いと判断する。
画像認識の話じゃなくて?
| | ∧頂点 抽出 画像 判定 |_|Д゚)ニューラルネットワーク 画像 判定 |文|⊂)モザイク 画像 判定 | ̄|∧|ガムバレ
905 :
デフォルトの名無しさん :02/04/02 01:19
もっと具体的に言って。 たとえば、モンタージュと顔の写真を比較して、 同一人物かどうか調べるとか。 警察庁はそういうシステムつかってるのかな?
モンタージュなら、顔の特徴を分けて調べた方がいいですね。
907 :
デフォルトの名無しさん :02/04/02 01:22
モーフィングの技術は使えないかな? よく知らないけど。
横レススマソ 人物の顔は特定の位置、目、鼻など決まった箇所で 点を取ってその点と点における距離の比率で割り出す方法が どこぞの国では実用化されている
ただ単に重複したエロ画像削除したいだけとか。
こんばんわ。エセグラマ@Delphiです。 ちょっと諸先輩方にお尋ねしたいことがあります。 あるデータをリスト管理したいのですが、 管理方法がこれであってるかどうか分からないのでご教授願いたいです。 データ(この場合レコードになるかもしれませんが)とは、 複数のデータを一まとめにしたもので、型付きファイル(レコード)なのです。 自分の中で今のところ最善な(と思っている)のは、 データ一塊をクラスとして実装して、それをTObjectListクラス(?)で管理する方法なのですが、 この方法であっているのか、また、 他の方は同じ様な事をどのような形で管理されているのか知りたいです。 書籍やネットで、自分なりに頑張って調べたのですが、 やはり『これでOK』というやり方が分からなかったもので、 すいませんがよろしくお願いいたします。 環境:WindowsMe,Delphi 6 personal 至らない点があったら指摘もお願いします。
WInShotみたいなソフトで 画像に変化があったら ScreenShotを取ろうと思うの。 だってインストール時に いろんな設定を覚えるために いちいちボタン押してキャプチャするのが 面倒なので. 画像の違いによって比較するアプローチはいろいろ あるみたいですね。 レスくれたかた、ありがとっす。 zzzZZZZ ∧,,∧ ゴメンとりあえず今日はもう | ̄ ̄ミ,,-Д-ミ ̄| ねるです。 |\⌒⌒⌒⌒⌒⌒\ | \ \ \ |⌒⌒⌒⌒⌒⌒| \ |_______|
なんだエロ画像じゃないのか
>911 TObjectListで問題無し。
>>914 さま
おぉ!さっそくのレスさんくすです。
うぅん。TObjectListであってますか!
ふむふむ分かりました、早速その線で考えたいと思います。
ありがとうでした。
他にも意見があったらお願いします。
916 :
デフォルトの名無しさん :02/04/02 09:18
>>882 それは何の言語ですか? と思わず聞きたくなるようなコードですな アゲ
メールの特定のヘッダ (From:) に特定の文字列 (戸田) が含まれていたら、 まるでそれが存在しないかのように扱うようにしたいんですが、こういう場合 はメールソフトが違うと同じ方法ではダメですよね? どうしたらいいでしょう?
>>917 全体的に文意がワケワカメなのでリテイク!
>>917 普通のメーラなら振り分けとかあるでしょ。
振り分けすらも無いメーラは使わなければいい。
それか、どうやっているかは分からんが、ノートンウンチウィルス2002は
メールの送受信を横取りしてウィルスのチェックをしている。
それと同じことをやればいいんじゃないのかな。
何をやっても無駄さ
今度新曲出ます。
>>917 POP3でヘッダの送信元見て削除できませんか?
過去ログからPOP3、ヘッダで検索してみてください。
外していたらゴメンなさい。m(_~_)m
---- (^_^)(^_^)(^_^) THE REAL PROGRAMMER (^_^)(^_^)(^_^) ----
At the beach, The Real Programmer is the one drawing flowcharts in the sand.
戸田 英夫 mailto:toda@dear.ne.jp;hideo.toda@ssc.chugoku.west.ntt.co.jp
>>922 不覚にもワロタ
しかし署名の丸ごとコピペはいかがなものか。
[Delphi:66072] こんにちは、宮本です。 | なお、高岡さんの言われているコンポーネントは、 別途にインストールが必要ですので、難しいでしょう。 これらのコンポーネントは、世界中のプログラマが 無償で開発している、プログラミング支援の一環です。 [Delphi:66177] こんにちは、宮本です。 | !! さすが中村さん、しかし、コンポーネント化 までするとは... (^^ Anan さん、良かったですね。 -- setup.exe をダブルクリックするだけでインストールできるコンポーネントを 紹介した場合は、「難しい」からダメで、自分でユニットの生成からインストー ルまでしないといけない上に、低機能で誰もまだテストすらしてないコンポー ネントを中村が書いたら「良かった」になるとはすごいね。 ところでオチスレはどうなったのよ?
>>922 2ちゃんねるにメールアドレスを
晒しちゃまずいんじゃ・・・。
スパムとかウィルスとか届かなきゃいいけど。
>>926 あれが本人だったら名前を名無しじゃなくて、
実名にして欲しかったなとか思ったり。
,,,,,,,,,,,,,,,,∧,,∧
~′,,,,,,,,,,ミ,,゚Д゚彡
UU"""" U U
彼は晒しageなキャラクタだよね。
>>924 禿同
さらに、
D&DコンポもIndyと同じように、VCLに取り込んで欲しい。
C#もD&D標準なんだし。
>>928 >彼は晒しageなキャラクタだよね。
しかし、くっだらない質問でも毎度毎度答えてあげる姿勢には感心するよ。
930 :
デフォルトの名無しさん :02/04/04 17:28
すいません。よろしくおながいします。 TListViewを使ってリスト表示したいんですが、 カラムは入れられてもアイテムを挿入できません。 ネットとか本で探したんですけどなかなかみつからなくて・・・ カラム数は3個で、簡単な文字列と数です。 ListView1 := TListView.Create(ListView1); ListView1.Items.Add(); みたいなもので、これから先がわかりません。 参考になるページのURLだけでもかまいません。よろしくおながいします。
with ListView1.Items.Add do begin Caption := 'Caption'; SubItems.Add('SubItem1'); SubItems.Add('SubItem2'); end;
おながいかよ!(by 三村)
933 :
デフォルトの名無しさん :02/04/04 23:56
なんかオブジェクトのインスペクトすげぇめんどくさくね? デバッガに入ってるやつ やる気あんのかって感じだよ
934 :
パソナラー! :02/04/04 23:58
タダでもらってるので、ワガハイは文句言わないナリ。 買った人はボーランドさんに文句言うナリ。
>>924 たしかに標準付属にしてほしいが、VCL の Drag and Dock と
OLE の Drag and Drop が誤用されて混乱の元にもなりかねんぞ。
VCL の Drag and Dock を OLE Drag and Drop ベースに書き
換えるのは無理があるだろうから難しいんじゃないかな。
Pro 版以上なら Option でセットアップできてもいいんじゃな
いかと思うが今でも2枚目のディスクに入ってるしな。
パーソナルにもプロ以降の2枚目のディスクの中身のHTMLだけ
を付属しておけばいいのにね。たいしたサイズじゃないだろうし。
そういえば、商品版のパーソナルには2枚目のディスクついて
るんですか?
936 :
デフォルトの名無しさん :02/04/05 00:17
VCLのDrag and Dropって右クリックでキャンセルできないから嫌いだ。
938 :
デフォルトの名無しさん :02/04/05 00:24
VCLのD&Dで、メッセージを受け取っているウィンドウハンドルを取得できますか?
940 :
デフォルトの名無しさん :02/04/05 01:03
あの腐れたD&Dは客先からクレームが来るから、うちもOLE使ってるな。 なんで、あんな実装にしたのだろう。
941 :
デフォルトの名無しさん :02/04/05 01:05
942 :
デフォルトの名無しさん :02/04/05 01:09
Delphiにケチをつけるやつはこのスレから消えろ!
944 :
デフォルトの名無しさん :02/04/05 01:10
Vaka Bakkashi
>>938 TWinControl(Source).Handle
DragHandleでいけそうです。
そろそろ次スレの季節でス
v (゚ω゚) <そろそろ出番だな /( )\ /'\
951 :
ネタじゃないのよ :02/04/06 14:28
Delphi2の頃にちょこっとだけいじっててver6がただで使えるので遊ぼうと思っていたのだけど 新規フォームにボタンを一個だけ配置してButton1Clickに Close; と書いただけなのに終了しなくなっちゃった。 昔はこれでプログラムが終了したんだけど今は何か余計な事を書かないといけなくなっちゃったの? [エラー] Unit1.pas(30): 文が必要な場所に 'TButton' 型の式があります と言われても昔はこのコードで通ったから良く分かんないっす。 誰かアドバイスください。
952 :
デフォルトの名無しさん :02/04/06 14:50
953 :
デフォルトの名無しさん :02/04/06 14:55
954 :
ネタじゃないのよ :02/04/06 14:55
>>952 そんなこと言わんと教えてください。おながいします。
955 :
ネタじゃないのよ :02/04/06 14:57
956 :
デフォルトの名無しさん :02/04/06 15:00
これとよーく見比べてみな。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Close; end; end.
957 :
デフォルトの名無しさん :02/04/06 20:43
v (゚ω゚) <そろそろ出番だな /( )\ /'\
時刻処理をしたいのだけど、15時から16時の間はAの処理、それ以外はBの処理 ってのはどのようにすればいいのでしょか?
補足説明 GetLocalTimeを使うと現在時刻が取れるのだけど15時から16時の間とかは wHourを使ってきちんとif文で処理出来るのだけど15時半とかの場合はif文が 使えないっす。
>>958 "日付時刻ルーチン"でヘルプを検索しる!
>>959 >15時半とかの場合はif文が使えないっす。
って15時半から16時の間なら・・・っていう事が
if文で出来ないってことですか?
962 :
デフォルトの名無しさん :02/04/07 00:23
>>960 検索したけど使い方が分からんかった。
やり方教えてくれぃ。
963 :
デフォルトの名無しさん :02/04/07 00:27
>>961 行き違いになってましたすみません。
>って15時半から16時の間なら・・・っていう事が
>if文で出来ないってことですか?
はい。例えば
if Localtime.wHour>14
とすれば15時以降か以前かの判断が出来るのですけど、
この方法だと分単位の判断が出来ないので良い方法があればと思いまして。
まあ強引に入れ子にしてif文を並べれば出来ないこともないのですが、もっと
スマートな方法があるだろうと思いまして。
965 :
デフォルトの名無しさん :02/04/07 01:05
>>964 毎度どうも。
TDataTime型に現在の時刻を入れる方法あるのでしょうか?
>>965 あ、いや初レスです。
TDateTimeのメソッド一覧は見ました?
CurrentDate
CurrentTime
CurrentDateTime
辺りだと思います。
967 :
デフォルトの名無しさん :02/04/07 01:37
Delphiでの書き方がわからないので、 BCBでスマソですが、こんな感じでしょう。 if (TDateTime::CurrentTime() >= StrToTime("15:30:00") && TDateTime::CurrentTime() <= StrToTime("16:00:00")) { } else { }
今までなにも考えずにネストしてました…
_________ ∧,,∧ / ミ;゚Д゚彡< つくってみたけど ミ つ⑩) \ ~ミ ミ.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ U U なんか、 [Form1.Caption: '今は1:43:15なので2:00:00から3:00:00の間です'] こんなふうな意味わからん表示になるんだけど なんでだろ~~なんでだろ~~(テツ&トモ) procedure TForm1.Button1Click(Sender: TObject); var i: Integer; StartTime, EndTime: TTime; begin for i:=0 to 23 do begin StartTime := EncodeTime(i , 0, 0, 0); EndTime := EncodeTime(i+1, 0, 0, 0); if (CompareTime(StartTime, Time) = GreaterThanValue) and (CompareTime(Time, EndTime) = LessThanValue) then begin Form1.Caption := '今は'+TimeToStr(Time)+'なので'+ TimeToStr(StartTime)+'から'+ TimeToStr(EndTime)+'の間です'; Break; end; end; end; なんか、どこか間違ったかな? D6UP1です。
>>969 × CompareTime(StartTime, Time)
○ CompareTime(Time, StartTime)
かな?
あと、iが23のとき、EncodeTime(i+1, 0, 0, 0); で例外が出るような。
またBCBで申し訳ないですが、
日付をまたぐ場合にも対応すると、
TDateTime dtStart = StrToTime("23:00:00");
TDateTime dtEnd = StrToTime("1:00:00");
TDateTime dtCurr = Time();
if (dtEnd < dtStart)
{
if (dtCurr < dtEnd)
dtCurr++;
dtEnd++;
}
if (dtCurr >= dtStart && dtCurr <= dtEnd)
Caption = "内";
else
Caption = "外";
です。
暇なので勉強も兼ねてDelphiで。 function Hoge: Boolean; var StartTime, EndTime, CurrTime: TDateTime; begin StartTime := StrToTime('23:00:00'); EndTime := StrToTime('1:00:00'); CurrTime := Time; if (EndTime < StartTime) then begin EndTime := EndTime + 1; if (CurrTime < EndTime) then CurrTime := CurrTime + 1; end; Result :=(CurrTime >= StartTime) and (CurrTime <= EndTime); end;
∧,,∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ミ,,゚Д゚彡 < こうですね!
U ミ \____________
@ミ ミ
∪''∪
if (CompareTime(StartTime, Time) = LessThanValue)
and (CompareTime(Time, EndTime) = LessThanValue) then
そっかそっか。LessとかGreaterとかいうとついわけわかですね
MyCompareTime(StartTime , '<', Time)
とかで比較できたらいいかも。
あ。それって
TimeOf(StartTime) < TimeOf(Time) ってやればいいのか。
ちょっと勉強にナタ。ありがとうです
>>970 さん
Delphiのコードの間違い探しをしたり、自分で書いてみたりして 私も今日はいい勉強になりました。
>>971 訂正です。
EndTime := EndTime + 1;
if (CurrTime < EndTime) then CurrTime := CurrTime + 1;
↓
if (CurrTime < EndTime) then CurrTime := CurrTime + 1;
EndTime := EndTime + 1;
そろそろ、そろっと、新しいスレ立てないと1000になるよ
976 :
デフォルトの名無しさん :02/04/07 15:09
963 です。971をベースにしてできました。ありがとうございました。 969でやろうとしたらCompareTimeとGreaterThanValueとLessThanValueが 未定義だ!と怒られちゃったので。(^^;
爽やかな展開だ、いやに
978 :
デフォルトの名無しさん :02/04/07 19:33
DelphiでXMLをコチョコチョやりたいんですが 情報が集まっているところをご存知でしたら教えていただけないでしょうか
Delphi Magazine 4月号に、interfaceの自動参照カウント処理と、 interfaceを返す関数を呼び出したときに戻り値を受け取らなくても コンパイラが勝手に一時オブジェクトを作って、スコープ脱出時にその開放をやってくれる機能を うまく使って記述コードをすっきりさせる手法が紹介されてた。 C++っぽくておもしろいな。 function AutoFree(obj: TObject): Iなんたら; ってのがあるとすると(Iなんたらはデストラクト時にobjをfreeしてくれるものがあるとする)、 begin sl := TStringList.Create; AutoFree(sl); slを使った処理... end; みたいに、try-finallyを記述しなくても確実に開放できるんだな。 mutexとかの管理なんかも同じ調子ですっきりできそうだ。 バイナリのサイズはむしろ増えそうだが。
980 :
デフォルトの名無しさん :02/04/08 01:16
デバッグをしてると時々、 ソースファイルが見つかりません。ExtCtrls.pas とか表示されるんだけどこれって回避する方法ある?
例外出るとワケワカメなヤツ探しにいくヤツだろ? パッチあてると治るらしいぜ。 オレはパソナルだから面倒でそのままだけど(ワラ
Ent版を買って[プロジェクトオプション]-[コンパイラ]-[デバッグ用DCUを使う]に チェックを入れる。
ageだ
新スレ移行のついでに埋め立て協力カキコ
埋め。
埋め埋め。
梅
埋め埋め埋め
990!
ume
992!
v (゚ω゚) <それそれ出番だな /( )\ /'\
埋め埋め埋め埋め
静かだ・・・
v <(゚ω゚) <うっ! ( )\ /'>
v (゚ω゚)> <はっ! /( ) <'\
v <(゚ω゚)> <うっ! ( ) /'>
v (゚ω゚)/ <はっ! /( ) <'\
v w (゚ω゚)/ \(゚δ゚)<ジーンギスカーン! /( ) ( )ゝ <'\ / >
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。