Delphi相談室その3

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Delphi関連のTips Q&A はこちらです。

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

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

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

つづく >>2-3 あたり


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

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

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

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

前の  Delphi相談室
http://piza.2ch.net/tech/kako/971/971261573.html
むむむ、2分割を想定してるものを一括で書いてしまった(^^;
★クライアントサイド最強の Delphi に物申す★
ttp://pc.2ch.net/test/read.cgi/tech/1001442200/
しかも1000行って終わってるだろこれ
>>3 終ってるのは
Delphi/Kylix Tech 2nd
http://pc.2ch.net/test/read.cgi/tech/993005709/

の方、 これは昨夜いきなりDel無用論の荒らし風状態になって終了
5前スレの1 ◆woDeLPHI :02/01/04 23:33
>>1 お疲れ様

  いや去年の暮れに1つたてただけだったんだけど 厳しいなあ
6デフォルトの名無しさん:02/01/05 00:05
新スレオメ!
7デフォルトの名無しさん:02/01/05 00:36
Delphi/Kylixを一緒にするのは無理ないか?
オレ、Kylixには全く興味無いなぁ。
無理あるかどうか以前に話題がないような>Kylix
まだ使ってる人いるのか?
9デフォルトの名無しさん:02/01/05 09:51
Delphi相談室 別館
http://paming.s7.xrea.com/yukiwiki/yukiwiki.cgi?[[44656C706869918A926B8EBA814095CA8AD9]]

手始めにリンク集をまとめてみました。
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違うのにソースそのままでコンパイルできたって言うのに
11 :02/01/05 20:18
超超初心者ですが
メインフォームとサブフォームがあってメインフォームで
ボタンをクリックするとサブフォームが表示される命令文を教えてください

ちなみに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にも有るのと同様に。
15Delフサギコ:02/01/05 20:55
   ∧,,∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < しつもソや!
   U  ミ   \____________
 〜ミ  ミ
   ∪''∪

 StringList.LoadFromFileで読み込む時は
 当然ShiftJISのファイルがテキストで読めますが
 HTMLでよくあるEUCを読み込んでSHIFTJISの文字列リストとして
 格納するのはどうやるんでしょうか。

また、
HTMLってShiftJISとEUC以外に縁コードの方法はありますか?(日本語で)
あるのならそれもStringListにShiftJIS形式で格納したいっす。

教えてください。
17デフォルトの名無しさん:02/01/05 21:29
Access2000のデータをDelphi4の中のテーブルで
表示させたいのですが、どうすればよろしいでしょうか?
教えてください

ちなみにWindows上の設定のODBCまでは何とかエラー無く行けたと思います
>>15 前もってnkf通すというのはだめなん?
>HTMLってShiftJISとEUC以外に縁コードの方法はありますか?
JIS と UNICODEが有名かと
20Delフサギコ:02/01/05 21:46

  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡 < 愛してくれとはいわーないわー♪
  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/se020949.html
↑ nkf32.dll
UNICODEは無理かも。だけどwebページは普通JIS/EUC/SJISなので大丈夫だらう。
24Delフサギコ:02/01/05 22:42
http://www.vector.co.jp/soft/win95/util/se031296.html

  ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ ゚Д゚ミっ < 車輪の再発明はするなってことですかい
  |''U ̄|   \_________________________
  | ̄ ̄|
 /    ゙ヽ
(   ゚Д゚  ) リダイレクション デ ドウヤッテ StringList ニ.......
人____ノ
  Pascalソースがありゃあいいのになー.....

DLLもあるんですね....
そんでもってDLLの作者の方々に.....

ウワァアァァアァア!!!!!
∧,,∧
ミ;゚Д゚彡
ワラタ
26Delフサギコ:02/01/05 23:21
>>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ニデキルジャン
ッテソウイウコトデハナイ?
29Delフサギコ:02/01/06 02:07
  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡 < で、こういう場合にインターフェースを学んでしまおうか
  UU""" U U   \_

ShortCutという同名のプロパティを持つが
継承依存関係の無いTMenuItemとTAction、
それぞれをインターフェース変数に代入すると
同一のプログラムソースで同じ処理が行える
はずなんだけど.....

  ∧,,∧,,,,,,,,,,,,,,,      / ̄
 ミ゚Д゚,,彡,,,,,,,,,,,,ヾ〜  <  恥ずかしいかしら
   U U """"UU     \_
俺、いまだにインターフェースに慣れません
なんか苦手意識...

だから、誰か例、書いてくれないかなー。。。(汁
30Delフサギコ:02/01/06 02:08
   .∧,,∧  />>28
@'"ミ,,゚Д゚ミ < ごめん、めんどくさがりなの。
 UU''UU   \_C文字列苦手...
 でも、やるならリダイレクソンよりDLLだね
31下手人:02/01/06 02:19
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | 改行コードの問題もあるんで                               |
 | http://home1.infonia.ne.jp/~delphian/delphi/compo/miscella.html#MI0031  .|
 | 使いませう                                          .|
 |_________________________________|
.    ∧∧ ||
    ( ゚д゚)||
    / づΦ
32下手人:02/01/06 02:21
    ∧ ∧   /
    ( ゚Д゚)<  アンカー飛ばないんでjconvert.pasね
     |つ つ  \
   〜   |
    ∪ ∪
> でも、やるならリダイレクソンよりDLLだね
よっぽどコンソールアプリとかがトラウマになっとるようだ・・
別にたいした違いはないんだが。
34ねこま:02/01/06 02:23
既存の派生元の異なるコンポーネントのプロパティを同様に扱うためだけにインターフェースを利用するというのは冗長でしかありません.
35Delフサギコ:02/01/06 03:42
   ∧ ∧  標準入力でリダイレクション受け取る方法が
    ミ ゚Д゚彡 わからないです。
  〜ミ,,,,uuミ
         DLLの方がいろんな場面で使いやすいと
         思うんだけど。違う?

>>34 そなの?
Javaではそういう使い方が日常で使われると思う。
誰かがそういう目的でよく使っている
と2chで言っていたような…ガセだったかな。

そこんとこDelもJavaみたいになればいいのにナ。
36Delフサギコ:02/01/06 03:55
  ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < しゅ・・・宗教上の理由から
  ,;゙  ミ     \_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コンポーネントはここだ!
http://pc.2ch.net/test/read.cgi/tech/1010277581/
>>40
Delphiはコンポーネントを自作してなんぼ。
見たところ趣味だろうから生産性は無視しな。
と、言う想いを込めて>>41
43デフォルトの名無しさん:02/01/06 10:46
type foo=(bar, baz);
foo f;
case f of
bar: xxx;
baz: yyy;
end
ってした時に通常ありえないelse部分ってどうしてる?
>>43
abort
45ななしヘタぐらま ◆B18Bks.Y :02/01/06 12:29
>>43
else
Exception.Create('内部エラーだゴルァ');

社外に出すソフトでこれをやるのは危険.
>>45
何が危険?って口調がヤバイってコト?
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表示で代替できてしまうので考えてしまうのです。
このネタもう飽きた
56Delフサギコ:02/01/07 00:18

____∧ ∧_ / ̄>>49 ヘタぐらまさん
___ミ,,゚Д゚ミ< もっと暴走だ!
__ ミ ⊃ つ  \_
_〜ミ,, ,,〃 いつか、2chネラと会える日が来るはず。
_ ∪ ∪  

>>55
そこがJava鯛C#の戦いの争点になるのではないかしら。
暗い蟻マシンのGUIにIEってのはやはりつらいから
VBで作るという案件も世の中イパイイパイで溢れてるかも。

ソースエヂタをコンポーネント化してくれ。
>>9 で紹介されてるDelphi相談室 別館ですが、
スクリプトのバージョンを上げました。
以後は以下を使ってください。お願いします。
http://paming.s7.xrea.com/ykwk166_kai/yukiwiki.cgi?mycmd=read&mypage=%5B%5BDelphi%91%8A%92k%8E%BA%81%40%95%CA%8A%D9%5D%5D
58Delフサギコ:02/01/07 01:28
  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 <  なぜやろか
  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 も利用できないので
素人にはおすすめできない。
63Delフサギコ:02/01/09 00:46
  ∧,,∧ おそなったけど、サンクスコ。
 ミ,,゚Д゚彡 モナユーティルスのファイルから文字列直読み関数
 ミつ[|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にしたいができなかった)どうしたら良いですかね。
適当な上位クラスを継承させたら良いんですかね。
65んと:02/01/09 03:24
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探したほうがいい
7574:02/01/09 10:32
D3はアセンブラはmmxasmを使えばインラインでSSE2まで使えるし、
一番安定している。

もうひとつ欠点をいうならばD4,D5以降のコンポーネント取り込みには
一苦労するという点だけどたいていD3用のコンポーネントもあるからOK

D6 perにいくくらいならFreePascalにいったほうが将来性がある
SSE/FreePascal厨房が暴れとるな
Delphi/VCL使わないなら
今時Pascalにこだわる必要性は皆無だよ。

もっとまともな選択肢が山ほどある。
相変わらずですねー。D3というキーワードに弱いんでしょう。
つーか(・∀・)?
78 ◆woDeLPHI :02/01/09 10:57
7973:02/01/09 11:04
>>78
サンクス!!
助かったよ、ありがとう。
>>68
遅レスですがありがと!
>>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
自分の持っている/長く使っている道具が良い。って話になっているぞ

ホンとのプロは道具を選ばない。
8987:02/01/09 23:39
>>88
でもint64無いとつらい事多くない?
>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);

の間違いね ・・・鬱
93ねこま:02/01/10 10:33
Delphi4.1 が一番安定していた.
D3 もいいんだけど,COM のサポートがイマイチ

もういいか,古い話題は…….
9484:02/01/10 10:44
>>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 + パッチ?
>>91-92
まじで?
>>98
オプション次第でそうなると思いますが?
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
ヶ月は修行して空を飛べるようになってから出直せ。
>>102
MLウォッチスレは終了しました。
>>94
>例えばユーティリティが10個あって合計1Mというのと合計10Mというのは

そのサイズなら、パッケージを分離したら?
105ねこま:02/01/10 22:40
>98
Delphi4 + sp(2|3) あたり (w

>104
それ言おうと思ったけど,もしかして作者が違うというケースじゃないのかと推測
106105:02/01/10 22:43
>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
114112:02/01/11 14:11
>>113
Win32形式??

って何でしょうか・・
(当方delphi暦2週間なうえにIIS最近初めて触ったばっかの厨なもんで)
>>111
したら死刑
>>113 の言いたいことは

プロジェクトオプション の中の リンカ タブの中の
EXE/DLLオプション のところの コンソールアプリケーション の
スイッチがちゃんと on になってるか?

ということだと思われ
コンソールアプリも 一応Win32アプリなんだよね
118112:02/01/11 15:03
>>116
>プロジェクトオプション の中の リンカ タブの中の
>EXE/DLLオプション のところの コンソールアプリケーション の
>スイッチがちゃんと on になってるか?

なってませんでした。で、onにして再構築してみたんですけど、やっぱりダメでした。
う〜ん、そもそもIISだとdelphiで作ったexeファイルをSSIで実行ができない、なんて事ぁないですよね?
IIS では Delphi に限らず exe ファイルを SSI として実行することはできない。

が正解じゃないかな?ISAPI フィルタにする必要があったと思うけど。
>>118

Apacheにすれば?そういう問題じゃない?
121112:02/01/11 15:15
>>119
それは無いと思います。同じIIS環境でC++で組んだexeファイル(「test」って文字列を返すだけのもの)
はSSIからきちんと動作してくれたんで・・・

>>120
Apacheにはできそうにないスね。仕事場がIISばっかしで
色々とやっているようなので
使えると思うんだけど
http://www.microsoft.com/japan/support/kb/articles/J049/1/77.asp

ここ見ると
<!--#exec cmd="cmd.exe /c dir"-->
ってあるけどなあ

とりあえず実行されたかどうか見てみたら?
exec cmd か exec cgiの差?
124112:02/01/11 15:31
ちなみに、exec cgiをexec cmdに変更すると
「CMD のオプションは #EXEC の呼び出しに対して使用可能になっていません」
なるエラーを返してきます。厨房には何の意味やらさっぱりで・・くそー
Delphiのプロジェクトで、
CGI,Win-CGI,ISAPI,Win32実行ファイルを選択するようになってる。
Del6パーソナルではCGIは無理だYO!
サンプルに従い
<!--#exec cmd="cmd.exe /c dir"-->
をやってみてみたら?
それができない場合は、セキュリティその他の問題で IIS の振る舞いが
変わっている可能性が。

ところで IIS のバージョンと動作 OS は?
127112:02/01/11 15:56
>>125
URLに直接http://〜/xxx.exeってファイル名を打ち込めば
ちゃんと動いてくれるんですけど・・

>>122 >>126
ひーん!実行できないです・・(またもや「CMD のオプションは #EXEC の呼び出しに対して使用可能になっていません」の文字が・・)
128デフォルトの名無しさん:02/01/11 15:59
>>125 Delphi ProにできてPersonalにできないことはない...
もちろんそのままじゃだめだけどさ。
なぜってProとの差はほとんど再配布可能ファイルとフリーソフトだからさ
129112:02/01/11 16:06
>>126
っと、使用環境はIIS5.0のWin2000、
んでDelphiは5.0のprofessionalです。
>>111
直接的、あるいは間接的にお金を受け取りさえしなければ良い。
ライセンス読もうね。
CMD のオプションは #EXEC の呼び出しに対して使用可能
これはここ参考にする
http://www.microsoft.com/JAPAN/developer/library/jpiis/core/iiregwww.htm
>>127 ちょっとまてコラ、SSI と CGI は共用できんぞ?

たとえば、だ。http://foo/bar/baz.exe

<!--#exec cgi="http://foo/bar/baz.exe"-->

として動くように設計されているならば、ブラウザで直接

http://foo/bar/baz.exe

へアクセスするとエラーにならないとおかしい。

まず、なにをどうして baz.exe を作ったか説明せよ。
まさかとは思うが、Delphi で新規作成の

Webサーバアプリケーション

とか選んでいるなんて馬鹿なことはしてないよな??
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マガジンって、まだ本屋で見たことないんだけど、
幻の雑誌?
それとも取り寄せないと読めない愉快な雑誌?
138ねこま:02/01/11 23:22
普通に本屋で売ってるけど,取り扱い店が少ないのかも.
139デフォルトの名無しさん:02/01/11 23:24
>>138
売ってるんだ!見たこと無い。本屋寄る度にチェックしてるのだが…。
VBやCはあるね。
140ななしヘタぐらま ◆B18Bks.Y :02/01/12 00:14
>>139
発行元が非常に小さいところ,
というかDelphiマガジンのために設立したような感じですね.

扱っている店が非常に少ないのは
発行部数の問題もあるでしょうけど,
書店流通は新規参入の会社の商品はまず扱ってくれないらしいので,
それも影響していると思います.
でっかい本屋でしか見たことない。
定期購読出来るから、そっちにしたら?
なるほどサンクス>教えてくれた人
現物見て内容を吟味して値段を考慮しないと、なかなか定期購読はね…(^^;
http://www.thedelphimagazine.com/
こっちしか読んでない
>>133
ソース読めばわかりますが、その辺はオブジェクト生成時にやってしまってます。
145144:02/01/12 08:29
おっと、それはQueryInterfaceに関してだった。

ま、とりあえず、その辺の面倒なことはTWebBrowserの親のTOleControlがやってくれてるみたい。
その辺やってくれないと、コンポーネント貼り付けで手軽に出来ないしな。
COMオブジェクトのAddRef/ReleaseはDelphiのinterface型が勝手にやってくれる。
だから、変なことをする場合以外は自分では何もしなくても平気。
QueryInterfaceはinterface型に対してasを使えばいいだけ。

COMコントロールはDelphiで取り込んだときにポトペタで扱えるところまでは、
Delphiが勝手に必要なコードを作ってくれる、だからTWebBrowserはポトペタ
で使えるし、それで大丈夫。
147133:02/01/12 10:50
解説ありがとうございます。動的に生成するのでない限りはDelphiが自動でやってくれるということですね。

そういえばフォームに置いたボタンとかも勝手にCreate,Freeしてくれますしね。
Personal版なので、その辺は想像するしかないのですが。
動的/静的はまったく関係ないぞ、よく読め
149133:02/01/12 11:44
えーと、「フォームに貼ったとき」はオブジェクト生成は自動的にやってくれる、という理解でよろしいでしょうか。
それで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
ソース見たけど分かんなかったよ。
でも、通常は存在しないアイテムに代入することはないと思うので
いいんじゃないかな。
154152:02/01/14 19:44
>>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
>>152
なんのエラーがでるのか教えて。
IDEから実行した場合、nilの時、止まるってのはうちでもなる。
が、プログラム自体が正常に動くってのがわからんな。

DirectXのアプリでLockからUnlockまでの個所内はデバッガが止まっちゃう
ってことはあったけど。
>>163
DirectX の Lock/Unlock は win16mutex を使っているから
そこへステップインするとハングするのは OS の仕様。
165112:02/01/15 11:04
激遅レスですが、112です。
>>131 >>135の情報を元にレジストリの変更を行って、
どうにか <!--#exec cmd="cmd.exe /c dir"--> ←こいつは動くようになってくれました。
でも相変わらずexeファイルは動いてくれない・・・
「スクリプト './xxx/test.exe' を実行できませんでした: Win32 エラー コード = 2」←エラーメッセージ
#EXEC の呼び出しに対して使用可能になってないよーのエラーよりは若干進歩したようですが・・・

こんな厨房の質問にお付き合いできる方、引き続きご教授お願いたします。
166112:02/01/15 11:24
自己レスです。
SSIを呼び出しているアドレスを「http://〜」から「D:/〜」に変更したら動いてくれました!!
あ゛〜長かった、色々付き合ってくれた皆様に感謝いたします。
167ななしん:02/01/15 11:41
NetUserEnum などの関数が使いたいのですが、
netapi32.lib の宣言した pas は標準ではついてないようです。
(Delphi Ver5 を使用しています)

自分で起こすしかないんでしょうか。
どっかにころがってないですかねえ?
やっぱ、ローカルルールの場所にgoogleの検索フォームがいると思った

http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=netapi32%2Epas
169ななしん:02/01/15 13:55
>>168
いやいや、
google で「NetUserEnum delphi」とか
「netapi32.lib delphi」で検索したら
関係ないのしかヒットしなかったんで
ここでの質問したというわけのです。

ずばり「netapi32.pas」で検索すればよかったんですね。
というわけでスペシャルサンクス!!>>168
170ななしん:02/01/15 14:01
> ここでの質問したというわけのです
ここで質問したというわけなのです

もうだめだ俺・・・逝ってきます
>>167

Torry's

http://www.torry.net/index.htm

に行って、NetAPI で検索すると4つのコンポーネントが
ヒットする。フリーでソース付きのがあるから参考になると
思う。
172152:02/01/15 15:21
>>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;

に書き直しました。
173152:02/01/15 15:58
>>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はバグっているのだろうか?
>>訳の分からない動作をします。
それを説明してくれないと誰もコメントをつけることはできない。

たいていのバグは自分自身から。
176ななしん:02/01/15 17:58
>>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に貼り付けてから)
使ってるけど?
183ねこま:02/01/16 05:03
TListView を使えばいいのに…….
>>182
なら、実際に使っているコードを載せてくれ。

確認してくれる奇特な人に打ち直しさせるきですか?
185ねこま:02/01/16 05:25
と思ったけど,そういえば OwnerData だと CheckBoxes が有効にならないんだったっけ
186ねこま:02/01/16 05:41
OwnerData := True にして
OnAdvancedCustomDraw で描画
GetHitTestInfoAt で判定

以上,独り言.
187152:02/01/16 15:25
188152:02/01/16 15:30
>>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バイト文字に変換するには?
190ねこま:02/01/16 15:44
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
>>195
君がアホなのが問題
197デフォルトの名無しさん:02/01/18 16:52
アイコンが入ったDLLは、
16色アイコンしかつくれないのでしょうか?
>>197
白黒や256色のアイコンもリソースに入れられますよ。
ただし、Delphi付属のImageEditorでは256色アイコンが作成出来ないので、
別途アイコン作成ソフトなどを利用してアイコンを作成する必要があります。
199デフォルトの名無しさん:02/01/21 23:18
例えば何らかの「画像ファイル」を表示するアプリを適当に
作ったとして、そのファイルは出来たアプリにどのような形で
入ってるんですかね?
結果的にバイナリでくっついちゃってるんですかね?
変な質問ですか?(^^;
作り方によるよ。
bitmapファイルとして読み込むように作れば当然別ファイルになっているし、
リソースとして結合することもできるし。
独自形式でexeの後ろにくっつけておくこともできる。

関係ないけど200げっとズザー
言葉だけズザーって言ってもAAないと何の感慨も湧かん。
202199:02/01/21 23:34
>>200
ははぁ。そうなんですか。ありがとうございます。
後から読み込むのではなくて、「決まった画像をImageコントロールに
表示させるだけ」ってヤツはどーなってるのかな?と思った次第でして。
その場合は、バイナリでくっついちゃってるんですよね?

「ズザー」ってあのAAのズザーか(^^;
>>198

何か「16bitリソースは扱えない」とか怒られてしまいました。。
もっと根本的なところから勉強してみます。
>>202 とりあえずリソースハッカーというのを探してごらん
205Delフサギコ:02/01/22 09:20
\\\     \ \\
   \\ヾ__ ∧_∧_ヾ\ 
\   \ \ (*´∀`)_\ \
\\     | ̄ ̄∧∧  |  ヾ
\\\ ヾ   |\ ミ;゚Д゚  ∧_∧
  \\\      | ̄ ̄ ( *・∀・) 今だ!205番ゲットォォォォ!!!
   \\\ ヾ  |\ ̄/っ y っ\
     \\       |  ̄ ̄ ̄ ̄ ̄ |
206197@サ骨:02/01/22 12:06
>>198
brcc32でつくることができました。ありがとうございます。

とりあえず自分用の「icoファイルをまとめてDLLにする」ソフトをつくってみようと重います。
207デフォルトの名無しさん:02/01/22 17:10
Delphiでアクセス解析を作ろうとここ数週間がんばってる厨房が質問スレに戻ってきてしまいました・・
環境変数からアクセス者のドメイン(「*.*.プロバイダ名.ne.jp」形式のもの)を取得したいんですけど、
なぜかIP(「数字.数字.数字.数字」形式)ばっかり返ってきてしまいます。

環境変数名はキチンとREMOTE_HOSTで取得してるのですが・・・
(本来、IPを返すのはREMOTE_ADDRの方ですよね??)
だったらそのIPを
ドメインにかえちゃえば?
GetHostByAddrつかって
210207:02/01/22 17:20
>>208-209
GetHostByAddrですか?
初めて聞く単語なんで(←ぉぃ)それを少し調べてからもう一回戻ってきます。
すごい良さげなヒントありがとうございます。
もう少しいうと
inet_addrもつかう
212デフォルトの名無しさん:02/01/22 18:34
逆引きできないところからのアクセスばっかしとか
213207:02/01/22 18:41
Delphi MLの過去ログで「GetHostByAddr」を検索したら
IP(xxx.xxx.xxx.xxx)をそのままドメイン名(*.プロバ名.ne.jp)で返してくれる
関数が見つかりました、おかげで問題も解決です。ありがとうございました。
(GetHostByAddrを使うのにwinsockを組み込むのが気づかなくて少々てこずりましたが)

ちなみにこいつです。
ttp://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/033/033662.html
214サ骨:02/01/23 01:40
(´-`)oO(バッチファイルとwshになってしまった)
215 :02/01/23 03:38
結構wshは使えるよね
216デフォルトの名無しさん:02/01/24 10:12
DelphiをつかってNTPの扱い方を書いてあるページとか、文献無いですかね?
217デフォルトの名無しさん:02/01/24 11:28
>>216
Indy のサンプル
#bye
#end
>>218
かなり藁
つーか、最近多すぎ
220デフォルトの名無しさん:02/01/27 21:14
既出かも知れないけど?
Formを持ったアプリケーションで、
タスクバーにアプリケーションアイコンを出さない簡単な方法あります?
>>220
TIPSで見たぞ。検索すれ!
222デフォルトの名無しさん:02/01/28 08:45
あのー、恥ずかしい事ですが、Indyとかにサンプルがあるじゃないですか。
たとえば↓コレとか。
ftp://delphi-jedi.org/api/Winsock2.zip
で、コレをどうやったら使えるようになるのかサッパリなんです。
凄い基本的な事らしく何処行ってもやり方乗ってないし、、、
どなたかヘルプ
223デフォルトの名無しさん:02/01/28 09:27
>>222
>ftp://delphi-jedi.org/api/Winsock2.zip
↑これってIndyとは無関係のような、、、

何がやりたいのかわからんけど、ソケットを使ったプログラムなら VCL で
普通に書いたほうがいいんじゃないかな。
224222:02/01/28 09:52
>>223
いやあのそのですねハイ。
それ展開したら「WinSock2.pas」と「svcguid.pas」ってのができたんです。
んで、コレ何だろう、コンポーネントなんかな?とか思って別プロジェクト
立ち上げて「コンポーネントのインストール」をやってみたのです。
でも何にもできないし。
たぶん壮大な勘違いな予感なんですけど、何処でどう勘違いしたのかもわからない。
とりあえずコイツを動かしてみたいんです。
>>224
なんだ、中身は単なる宣言だけじゃん。
これ、コンポーネントじゃなくてヘッダみたいなもんだよ。
これをusesしておけばWinsock2の関数が呼べる。
後はWinsockの知識があるかどうか。
226222:02/01/28 10:32
>>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
手始めに乱数を使った単純なゲームを作ってみるといいよ

電卓とコンピュータの違いがよく分かる(・∀・)
>>232
1)ネットワーク関係
2)ゲーム
には興味があります
>>233
私は
http://pc.2ch.net/test/read.cgi/tech/1011649179/
の90です
>>235
マルチポストうざい。氏ね。
>>235 とりあえず 名前欄に

"モナーの90#覚えとける文字" とでも入れてね

じゃ、
先輩がアニメ絵モエな系統なら
こんなのはどう?
http://www2s.biglobe.ne.jp/~wind_f/projectd/project1.htm

238222:02/01/28 14:58
>>230
ありがとう。
つか勉強なるわコレ。
Delphi使った事なかったから知らんかったんだけど、
なんやコレVCとJAVAとVBのいいとこ取りみたいな言語なんね。
>>235
こんなことで騙されるような頭の弱い奴に一週間でできるというのは
人を小馬鹿にしてるとしか言いようがないな

http://www.text2music.com/mine/delphi/2.html
↑これやってみてできなかったら、先輩に金を返してもらえ
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
>>247
そ。
秀丸みたいにいかんかね。
249247:02/01/28 17:39
>>248
そのようにはいかなさそうなのでスペースのみに変えたよ。
結局常用のテキストエディタもスペースのみになってしまった。
250デフォルトの名無しさん:02/01/28 17:45
getoptみたいなParamCount/Strのラッパークラスってない?
>>250
そのクラスで何をラップするの?
ParamCount/Str って、もう充分ラッピングされている
と思うが? グローバル変数だし。
これも
FindCmdLineSwitch
253 :02/01/28 23:33
OS製品と言語製品がクチャクチャになってるし
鯖ってもんがわかんねーなら既成CGI使えよ
もうだめぽ
>>253 MLネタだね。
サーバをWinにすると、Delphiは無駄にならない(w
しかしこの程度の奴にサーバを公開されたらたまらんね。
ダイアルアップでサーバを公開したらIPがどんどん変わるので困ります
HPも.comとかになってくれません
バージョンが上がり今やDelphi6となっていますが、やっぱり無理なのでしょうか?
このままではDelphi6を買った意味が無くなってしまいます・・・
>>255
ソフマップに売ってVB買え。
257254:02/01/29 01:21
>>255
ハゲシクワラタ
>>254
アメリカには Delphi で作った ISAPI のホスト業者があるのよ..
条件はソースの提供。
>>255
gekiwara
260デフォルトの名無しさん:02/01/29 10:33
>>258
あー。そういう商売もいいかもなあ。
日本にあるWindows鯖屋で人が集まらないとこは、そういうサービスを始めるといいかもしれんなあ。
でも、MLとかみると、無茶苦茶やりそうな人がいるから怖いなあ。
MLネタはこっちでやれ。おめーらうぜーよ。
http://pc.2ch.net/test/read.cgi/tech/1002111468/
>>261
山田く〜ん、座布団1枚取り上げなさい。
>>260
>無茶苦茶やりそうな人
そのためにソースを出してもらう。コンパイルもサーバー側で行う。
管理者がいちいちソース見なきゃならないのか
大変だなぁ
265デフォルトの名無しさん:02/01/29 12:52
>220です。
>221に言われて、検索して見つけたんだけど。↓
http://www.nifty.ne.jp/forum/fdelphi/faq/00039.htm

これでこのソースを保管し、タスクバーに出したくないアプリが
必要になったら、このソースのあるPathを検索Pathに加え、さら
にプロジェクトオプションの条件定義に、HIDEAPP
を加えてからコンパイルします。

「検索Path」を加えるって言うところが分からないので、
アドバイスを下さい。


>>265  IDE のプロジェクト -> オプション
ディレクトリ/条件タブ
267220:02/01/29 16:20
>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 をプロセスとして呼び出すのが簡単なように思うけど?
275268:02/01/30 10:20
>>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
プログラマなら一度は書庫ファイルを扱ってみたいようですね。
>>288
べつに。
290デフォルトの名無しさん:02/01/31 20:26
ダレかActiveFormの作り方おせーて!
ウィザード実行したはいいが、プロパティの追加方法とかじぇんじぇんわかりません。
タイプライブラリでプロパティ追加しても、ユニット上から値が参照できないんですが
291 ◆woDeLPHI :02/01/31 20:48
>>290

XX_TLB.pas の方で
IHoge = interface(IDispatch)
と定義されてるでしょ?
 プロパティもRead/Write両方メソッドになってますよね?
 実装の方も それと同じメソッド名にします
ActiveXを動かしてプロパティを読み書きするとそのメソッドが呼ばれるという仕掛けです
292名無し~3.EXE:02/01/31 22:02
TaskBarを縦においたときに、幅を変更したいのだが
サブクラスしないと無理なのかな。
SHAppBarMessageとかSetWindowsPos, MoveWindowとか
いろいろ試したけど、どれもだめだったよ。

なぜ、幅を変えたいかというと、WindowsXPでTaskBarを
縦においたとき、再起動するたびに幅が縮むからです。

どなたか、お知恵を。。。
293290:02/01/31 23:49
サンクスです。
また質問あったらよろしくです...
294デフォルトの名無しさん:02/02/01 00:10
>>290
タイプライブラリからプロパティ足せるよ。
295ねこま:02/02/01 05:36
統合アーカイバコンポーネントがダウンできるのは
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 も見る必要があるかもしれない。
でも、いっそオーナードローで全部自分で描いた方が面倒がないと思われ。
298296:02/02/01 10:40
>>297 レスありがとうございます
あれから、色々実験してドロップダウンして勝手に元に戻るのは
補完機能のようなのがcomboBoxに備わっているからのようだと判りました
結局 WM_GETTEXT で無理やりセパレータの部分に#0を代入する事にしました。

最初からオーナードローにした方が簡単でしたね。
楽しようとして失敗するパターンのようです。
299デフォルトの名無しさん:02/02/01 14:56
ソース開こうとしたら「TTimeAnalyzerが見つかりません」って言うエラーが出てきます。
これって何か必要なのですか?
Delphi初心者です。
>>299 なんのソース? 
301299:02/02/01 15:09
仕事のやつです。

他の人が作ったやつでそれのメンテしようと思ったら以上のようなエラーが出ました。
>>301
標準のコンポーネントやクラスじゃないみたい(Del6Entのヘルプにもない)

TTimeAnalyzer.pasを検索してみるといいよ
多分、そこへのパスが通っていないのだと思う
>>302 いけね
× TTimeAnalyzer.pas
○ *.pas
とにかくライブラリを探そう
304299:02/02/01 15:20
>>302
自分が使ってるのはDelphi6proです。

どうやら標準ではパス通ってないみたいです。
探してみます。
305デフォルトの名無しさん:02/02/01 15:53
作った人に聞いたほうがいいような。。。
306299:02/02/01 17:10
>>305
居ないです、、
>>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 やらずにヘルプ広げても落ちるの?

312309:02/02/02 03:28

>ちゃんと .gid 消した?
消しました。
C:\Program Files\Borland\Delphi6\Help\*.gid
ですよね

>1-4 やらずにヘルプ広げても落ちるの?
メニューからだと、大丈夫。エディタからF1でも平気みたい。
コントロールを選択して。F1キーの時がダメみたいです。
>>312
W2k でやってみたけど再現せんな。
Win9x で要追試。ってとこですね。
315309:02/02/02 08:02
>>309 の追加情報です。
何故か、C:\WINDOWS\HELP\Delphi6.gid が出来ていたので、消しました。
.gidを消した直後は、逝きませんでしたが、何回か同じことをするとやっぱり逝きます。

メニューから ヘルプ(H) → Delphiヘルプ(D) を選ぶと、Delphi6.hlpを見に行くけど、
コントロールを選んでF1キーを押すと、Del6vcl.hlpを直接見に行っているみたい。
Open Helpって意識したこと無かったけど、これって仕様?

Delphi使うときは、Help窓ほとんど開きっぱなしなんです。Help窓開いた状態でF1キー押すと
高確率でhelp窓が死んでしまうので、かなり不便。本体には影響ないけど。
みんなF1ヘルプって使わないのかな?
>315
使ってるけど、そんな症状がでないのよ。
317309:02/02/02 08:46
だよね。
いまどき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だったかも
322270:02/02/02 14:16
かぶってたか
Delphiのデフォルトの引数スタイルはregister これはVCのfastcallとは互換ではない
VCは _cdecl がデフィルとのスタイル

こういう場合 APIと同じ  stdcall  に双方するのが良いと思う

それと LPCTSTR だと オプションによってunicodeという扱いになるから注意
323318:02/02/02 14:36
レスサンクスです。
Cdecl; と Stdcall; Register各々でコンパイルしなおしたんですが、
やはりダメでした。
VCからでは呼び出せないんでしょうかね...
もうちょっとやってダメなら、Cスレにでもポストしてみます。
シンボル名に_が付く付かないって関係なかったっけ?
GetProcAddress は成功した時の関数呼び出しでおかしくなるんだよね?

Delphiを立ち上げといて VCで作ったアプリを実行時引数のホストアプリケーションにして 
AnFunctionName でブレークポイントかけたら・・・


あ! var sHost : PChar; sUserID : PChar


だから呼び出す方は
LPCTSTR & , LPCTSTR
じゃないとダメじゃないの?

双方stdcallにして やってみて?
326茶碗:02/02/02 15:11
フサギコさんのスレが何処かに行かれた様なのでこちらで、

メールで受信した場合の添付ファイルでBase64でエンコードされた

pDA6rdFUeg7AVQca2fY+LhIgeNqQTwahRCwFHAART18V0ackp/1lWPfxjCe9OONeCCDpdFDeOoqq
1nUV6OSQw06SrUh24u3zY5CTP7bEmKRfKpEEGYk59aNyurYrBiJKlEKC06i2JBOL8qeVgDmkvp5b
Yk2M5+RgEPKJSuEZlNYPYKthvyNHNFG2vmHE2FKjGAD3PJWRSo48qJKOEhylWFjPM5/ki+GPXRSh

みたいなのを元の画像ファイルに戻すにはどうすれば良いのでしょうか?
jconvertなんかを使ってみましたが的を外していますか?
どなたか教えてください。
>>326 なんにも的は外れてないと思うが? 何か不便なの
>326 フサギコスレは禁句(w
Indyに TIdBase64Decoder ってのがあるんだけど、どうだろ?
俺その辺全然知らないんだけどさ。
329茶碗:02/02/02 15:31
>>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))
 とやれば一番簡単かもね
332茶碗:02/02/02 15:46
>>230
はい、
329のようにして保存したところ、その画像ファイルは見れず
エディタで開いても

�リ�

とこれだけしかありません。
ちなみにそのややこしい文字列を
ttp://beetools.trustbee.com/b64dec/
で復元してみたらちゃんと表示されたので
ややこしい文字列に問題は無いと思われます。
333茶碗:02/02/02 16:02
>>331
後者の方法を使ってうまく行きました。
みなさんありがとうございました。
334318:02/02/02 16:41
>>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書き出し。
別ファイルの方がディスクアクセスは多いのに・・・・・
341MMF?:02/02/02 22:25
「部分書き換え」部分のコード/方針を書いてくれないとわからないが。

そうだね 木やハッシュで管理してないように思うな
344デフォルトの名無しさん:02/02/02 23:37
TQueryコントロールを使用してDBEditコントロールに
データベースのレコード(名前、住所など)を表示させたのですが、
値を修正することができません。
TUpdateSQLコントロールも設定しています。

TQueryではなく、TTableであれば値を更新することが出来ました。

何か設定のミス、漏れがあるのでしょうか?
それとも、TQueryでは値を直接更新することはできないのでしょうか?

初心者ですいませんが、よろしくおねがいします。
345318:02/02/03 00:59
DLLの件なんですが、Del、VC共にstdcallで、うまくいきました。
FreeLibraryのエラーも、解決です。

>>335さんへですが、第1、第2引数ともに、VC→Delのリードオンリー
です。
自分は、
typedef BOOL (__stdcall *ANFUNCNAME)( LPCTSTR &, LPCTSTR );
で、第1引数にだけ&が付いているのが理解できていないのですが、
このことでしょうか?
ただのLPCTSTRにすると引数が渡せなくなるので、付けています。
346 ◆woDeLPHI :02/02/03 08:29
>>344
http://www.geocities.co.jp/SiliconValley-Oakland/8522/data/sql_delphi.html
ここ見てた感じだけど
RequestLiveはTrueになってる?

>>345
奇異に見えるのはそれなら >>334
function AnFunctionName( var //<-- このvar が不要でしょう?
sHost : PChar;
sUserID : PChar): bool; stdcall;

このvarが付いてるという事は ポインタそのものが変更されるという事になるので
347334:02/02/03 13:53
>>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ってなに?
350348:02/02/03 16:30
>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で良さそうだけど
352348:02/02/03 16:51
いや、特に置くモノがあるわけじゃないです。
まだよく分かってないんで…
タブでウインドウを切り替える部分のソースを書いて頂けると
有り難いんですが…
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にするコードは
自分で書かないといけない。
356348:02/02/03 17:13
>353
ありがとうございます。
何故か思い通りのウインドウに切り替わってくれませんが
おかげで何とかなりそうです。
index管理ぐらい頑張れw
358デフォルトの名無しさん:02/02/03 21:00
DBLookupComboBoxに複数項目をリストに表示させているのですが、
各項目の幅を設定することは出来ないのでしょうか?
また、コントロールの幅よりも大きくリストを表示することはできないのでしょうか?

359デフォルトの名無しさん:02/02/03 21:11
TDBGridで列のヘッダをクリックしたとき、
内容をソートさせる方法はどんな方法がありますかのう?
360348:02/02/03 23:51
うぅ、結局わかんない。
ヘルプによると

MDIChildren プロパティを使うと,子フォームにアクセスできます。
I パラメータはアクセスする子フォームのインデックスを指定します。
MDI 子フォームの順序は,別の MDI フォームがアクティブになると変わります。
初期状態では,フォームは作成した順序でリストされ,
新しいフォームは配列の最後に追加されます。
しかし,MDI 子フォームはアクティブになると,常にリストの先頭に移動します。
そのため,I パラメータを使うと,配列内のすべてのフォームをインデックス化できますが,
特定のフォームを参照することはできません。

との事だから
どうも他のを使った方が良いっぽいのだけど、
どうしたらいいのかがわからん…
361348:02/02/03 23:56
>>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.
369 :02/02/08 00:48
begin
age;
end;
end.
では?
370368:02/02/08 03:30
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
>>373
あってるよん
でるっぴ
>>374
調べているから
>やっぱ、「デルファイ」?
が出てきたと思うのだが、この考えは間違い?
>>377 検索すれば、本家ボーランドでそうカナ表現してるのがすぐ見つかるだろ?
アメリカにDELPHI Automotive Systemsという会社(自走車部品メーカー)があるが
殆どのマスコミはデルファイ・オートモーティブと表記しているぞ。
>>378
>>377だけど =>>373じゃないよ
もう数年Delphi
ただ>>374の解釈がちと早とちりではないかと思ったまで。
381380:02/02/08 14:56
あ゛、打ってる最中に書き込んでしまった…欝氏

×もう数年Delphi
○もう数年Delphi使ってるのでんな初心者質問はしない。
ボーランドからの製品案内なんかみると思いっきりカタカナで書いて合って萎える(w
デルファイ、シープラスプラスビルダー
お願いします
Delphi6のShellTreeViewでselectしたアイテムの
パスを知るにはどうすればいいですか?
>>382
ちゃんとカタカナで書いておかないと、取次ぎからの電話で大混乱が
おきるのですよ。
>383
parentを再帰的に遡ってパスを取得する。
これから、Delphiを勉強しようとしているのですが、
ObjectPascalについてのいい本はありませんか?
レベルが低いんでポインタ辺りの解説から無いと駄目だと思っています。
オフィシャルコースウェア(Delphi付き)
メモリリークはソース(Create〜Free)やシステムモニタ等でチェックするしかないんでしょうか?
何か自動で調べてくれるようなのあります?
>>387
オフィシャルコースウェアをamazonで注文して来ました。
有難うございました。あと、オライリーのDELPHIリファレンスは無駄
でしょうか?なんか逆引きも無いしリファレンスとしては云々との
意見も書いてありましたが、初心者には難しいでしょうか、持ってい
る方のご意見が聞きたいです。
390 ◆t8tNbYYk :02/02/09 09:34
 初めまして。
今、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はそれよりも楽に書けるというだけで、勉強不要で出来るものじゃないので勘違いしないでね
397394:02/02/09 11:49
>>TClientSocket
名前からしてラクそうじゃないですか〜!!
T(TCPっしょ?)とかClientとかついてるあたりが、ラクそう。
こーゆーファンクションってたいてい立ち読み目コピで済むから、イイ。(貧;
>>なお、BCC55なら、GUIアプリだって書けますよ。 かけなかったのは勉強不足のせいです。
396って相当のアピ師?弟子入りしたいっす。
>>394
あなたが勉強不足名だけかと。
>>397
TはTypeの略です。Delphiの流儀ではプレフィックスにTをつけるのです。

ちなみにTClientSocket使うよりIndy使う方がオススメです。
http://www.nevrona.com/Indy/
400395:02/02/09 13:01
>なお、BCC55なら、GUIアプリだって書けますよ。 かけなかったのは勉強不足のせいです。

あれでGUIアプリ作ろうとすると発狂します。
おとなしくDelphi使いましょう >>394
Indy の解りやすい本かウェブサイトありませんかね。ぜひ日本語で。
del6 pro でヘルプ解りにくいので・・・
402デフォルトの名無しさん:02/02/09 14:05
>>400 ダイアログアプリの範囲で我慢すれば発狂するほどのことはあるまい

>>401 モナジラ http://members.jcom.home.ne.jp/monazilla/document/indytips.html
>>391-392
レスありがとうございます。
今度はそれらをキーワードに探してみます。
405Delフサギコ: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;

と文字列で受けたらいいんじゃないの?

409408:02/02/10 09:25
ゴメン 途中のpcはsに変えてね
>NowEditingFileName := String(pc);
内部ではポインタの代入だけが行われて、
いざ使おうとしたときにコピーされるんだけど、
そのときにはすでに解放されてて中身は不定ってことなのか?
411408:02/02/10 11:45
>>410
 あ、ダメな理由かかなかったね

 String 型 はサイズ+文字で構成されている
 これをPCHARに型変換した場合、 文字の部分を指すように工夫されている。
 つまりString型のポインタは、文字の位置を示していて、そのポインタ-4にサイズが入っている


 PCHAR型をstring型に代入したら、暗黙の変換としてヌル終端文字列からのコピーが起きるからこれは問題ない。
 しかし、PCHARをStringに型変換したら、PCHARにはサイズを示してる部分を持っていないからサイズが不定になる。
 Stringはクラス型でかつプロパティみたないイメージで考えるといいと思う。


だから、C:\Temp\無題.txt が途中で変にならないんじゃなくて何文字で変になるかは判らないという事
412390 ◆t8tNbYYk :02/02/10 15:33
>>393
 レスありがとうございます。
SetWindowsHookExを色々と引いてありましたが、すいません、よく分かりません。
コールバック関数の意味は何とか理解できたのですが、その先がよく分かりません。
何か上手く説明してあるサイト等がありましたら、教えてくれれば助かります。
413413:02/02/10 17:29
 ウィンドウの端の部分の長さを取得するにはどうしたら良いでしょうか?
(Width - ClientWidth) div 2などの方法ではうまくいきません。
まして、(Height - ClientHeight)div 2 では、全く出来ませんし。
 つまり、やりたいこととしては、
座標の指定を、デスクトップ全体で取得した座標を使って行いたいのです。
414Delフサギコ ◆zE1iiRdQ :02/02/10 17:31
>>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() メソッドです。どちらか/両方使えばやり
たいことができるんでは。
416413:02/02/10 20:07
>>415
 ありがとうございました!
お陰様でプログラムが完成しました!
Delphi6付属のExcel2000.pasは、前の版から大幅に変わって(簡素化された?)
Cells[1,1] とかできなくなってるんですけど、どういう理由でそうなっている
のでしょう?
418417:02/02/11 02:41
訂正します。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
>>422
ボーランドのDelphi4
TQuery のヘルプは見た?
とりあえず(わかりづらくても)付属マニュアルの SQL 関連のところを
ざっと読め。
TQuery の SQL プロパティに SQL 文を指定して execute または open
TDatabase で BDE 経由でサーバーにつなげておくことを忘れずに。
>>421 >>346 の過去ログはだめ?
427デフォルトの名無しさん:02/02/11 22:01
設定はわかるのですが、用はSQL文の書き方はわかりません
たとえばただ単にbeginとendの間に
 select〜
  From〜
を指定すると思うのですが、それだけでは当然エラーが出てしまいます。
それ以前のDelphiにSQLを使うという宣言が必要だと思いますが、それがわかりません
どうぞ教えてください。
それはDelphiでなくSQLの・・・
429 ◆xdL3JlCE :02/02/11 22:28
プログラム初めて2週間程度の物です。
アドベンチャーゲームのエンジンを作ってるのですが表示した文字が隠れると消えちゃいます。

原因はcanvasでTestOutしてるのだからだと思うんですが、ウィンドウが隠れたあとも文字を保持しておく
方法は無いでしょうか?
OnPaintでやれば良いんでしょうか?

パソコン初めて自体初心者なので分からないことが多いです。
すんません。

プログラム本体はこちらにあります
http://members.tripod.co.jp/xdL3JlCE/

こっちのスレにも出没します。
http://game.2ch.net/test/read.cgi/gamedev/1013170036/
あれ?うわさの人が現れた。

持続的なイメージを作成したい場合には TImage を使います。
>>427
425 さんが書いてるように、TQueryのSQLプロパティに文字列として書きます

もしかしてDDLについてという事?
http://www.geocities.co.jp/SiliconValley-Oakland/8522/data/sql_delphi.html の24を参考に
Open  または ExecSQL; です
432デフォルトの名無しさん:02/02/11 23:35
>>431
Query1.SQL.Add('SELECT * FROM 〜');

みたいな感じでよろしいのでしょうか?
>>432 そうです。 >>431の46を参考にして
434デフォルトの名無しさん:02/02/12 00:08
ありがとうございました
435417:02/02/12 01:15
>>417 Cells.item[1,1] とすればよい。
http://www.undu.com/Articles/010316c.html
436デフォルトの名無しさん:02/02/12 15:23
 技術的な質問ではないのですが、Delphi6のインストール時の使用規約(だったかな?)を見たら、
 「DELPHI 6 PROFESSIONAL 版およびDELPHI 6 ENTERPRISE 版に適用される追加条項
 〜略〜...お客様が作成したソースコードやそのコンパイルしたコードの配布は,配布に対して
 直接的にも間接的にも報酬を受け取らないこと,そのアプリケーションが個人用途で
 あり商用ではないということ,この限りにおいて配布制限は受けません。...〜略〜」
と書かれていました。これって、Delphi製のシェアウェアは存在しないって事ですか?
なかったっけかな・・。
437436:02/02/12 15:26
 あ、すいません・・。板間違えてました。ここは技術だったんですね。申し訳ないです。
>>436
パソナル版のみぞな。
440436:02/02/12 16:01
>438
>439
 あ、修正されてたんですね・・。こんな重要なこと間違えてるなんて・・。
 疑問が解けました。ありがとうございました。
>>388
遅レスですがDelphiXで有名な堀さんのページで
チェック用のユニットが公開されていますよん.
442デフォルトの名無しさん:02/02/12 19:42
「バカのコーディング規約」スレ見てたんですけれど、
DelphiVCLの定数や列挙型の命名ってヤバく(ダサく)ないっすか?
clWhiteとか、psSoildとか。
普段からVCLに合わせてるもんだから、自分でつけるときもついそうやってしまうんだけれども。
みなさんどうやってます?
ダサくない代替案キボーン。

ごめん向こうのスレじゃ、まともなレスが得られそうに無いので、
こっちで話題振ってみました。
>>442
私は結構好きですが、なにか?
>>442
色の名前で(ダサく)ないかっこいい命名法の例を挙げよ!

命名法についての議論は、結局、たいした意味がありません。
で、具体的にどういった実害があるんだ?
アルファベット2文字で名前の衝突をほぼ避けられるんだから
これほどうまい話はないだろ。
ぶつかっちゃったらUnit名つければ回避できるし。

どうしても嫌ならC#流にClassName_EnumNameにすればいい。
446442:02/02/12 20:57
自分の場合、2文字であきたらず単語の区切りで略語作ってやってるのが悪いのかも。
THogeMogeBarFooならhmbfってやっちゃうので・・・。

>>445
C#流ですか。参考にしてみます。
447442:02/02/12 21:00
class内にstatic constなメンバ置けないのが気になってたんすけど、
よく考えたら、Unit名つけりゃいいんすね・・・
448デフォルトの名無しさん:02/02/12 23:06
どうせ他人のプログラムだから、どうでもいいっちゃー
どうでもいいんだけど…

hmbf

こうやって、つながりの無いアルファベットの羅列をつけるのは、
まさに2文字が限界だと思われますが。
どうでもいいことをうだうだ議論するのは無駄のような....
>>441
そこも早速参考にしました、
やはり最終的には自分でソースをきちんとするしかないようですね。
>>449
どうでもいいということは自分で納得のいく方法をとっておられるということだと
思うのですが、あなたはどうやっておられますか?
>>451
どうでもいいことを聞いてどうするつもりですか?
>451
どうでもいいということではなく、
2文字のプレフィックスをつけるという命名規則が
十分広く知れ渡っているので
この規則を守るべきかどうかということについて
議論の余地が無いということです。
>>453
>十分広く知れ渡っているので
どうでもいい派としては、上記の根拠について示すことを要請したい。
オレははつみみです。
455442=451:02/02/12 23:48
煽りのつもりではなかったのですが・・・

マジでどうでもいいことにしたいので、
2文字プレフィックスの有用性か
代替になるものがないかと悩んでます。
456442=451:02/02/12 23:50
まあ
・VCLで使われている
・VCLに習ってDelphiユーザーの多くが使っている
だけで十分な理由かあ・・・
457これ以降:02/02/12 23:57
このドキュメントを読まずにコーディングスタイル・命名規則について
議論することを禁じます。
http://community.borland.com/soapbox/techvoyage/article/1,1795,10280,00.html
>>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 の文法のどこに書いてあるか教えてください。
煽り禁止。
466442:02/02/13 00:17
>>457
了解
>>466=442
あんたさぁ、
>DelphiVCLの定数や列挙型の命名ってヤバく(ダサく)ないっすか?
↑この文章書いたの誰だと思ってるの? 思い出した?
英語の文章読んでさぁ、「了解」というのはどうゆうことよ。
急にヤバく(ダサく)なくなったわけ?
468442:02/02/13 00:30
前者はダサくはないですか、どうですか、みなさんはどう思いますかと聞いただけですよ。
後者も了解と言っただけで、ダサくなくなったとも言ってないですし。

うえーん、荒らすつもりはないんだよお。

>468
Del房はDelphiの不備を指摘されると逆上するからね。
MLで質問しなかったのが残念でならん(藁
470442:02/02/13 00:44
MLじゃこんなこと聞けないよ(w
>>468
カラミついでにほんとに最後。
>了解と言っただけで、ダサくなくなったとも言ってないですし。
「了解」ということは、ダサいと思いつつ Calvert 氏の提案に
従うってこと?
もし、あの文章が日本語で Geocity かどこかの HP に山田太郎の
署名で書かれていたらどうでしたか?

あの命名法は、Delphi のローカルルールだね。Borland でも C++
ではちがうし、他の言語ではハンガリアン記法のほうが圧倒的に優勢
ですね。でも、張本人のMSのドキュメントでも破綻していて、笑わ
れているし、命名法の一般解というのはないみたいね。寄らば大樹の陰、
みたいに権威に従うのも安全かもね。でも、それが絶対ではないことも
お忘れなく。
ウゼーよ馬鹿
473442:02/02/13 00:58
了解と書いたのがまずかった。わかったよ、参考にするよと言うことです。

あの提案自身に全面的に賛成できるわけではありません。
細かいところで自分のスタイルとは違っていますし。
迷っている、迷った部分に関しては参考にするっつーことで。
まったく、こんなことやってるからDEL厨なんて言われるんですよ。
すこしは自重したらどうですか。
475442:02/02/13 01:34
           ヽ(`Д´)ノ  ウワァァン DEL厨ッテイワレタヨ モウコネーヨ
             (  )
             / ヽ
「Del房」とは言われているけど「DEL厨」と言っているのは、この文脈では
474が最初では?

別にここで話題にしてもおかしくはないのでは?

場所柄、ここよりずっと丁寧な言葉づかいですが、同様なことは
ML でも行われていますよ。457 の文書まで同じです。(URLはちと違うが)

http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=056598


マ板では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 良いアドバイスじゃないのは承知で、

解像度変更するのって、ノートや液晶じゃ汚くなるからイヤン
>>481
動作環境がFMVとか・・・(ぉぃ
勝手に解像度変更するスクリーンセーバなんか使いたくないような
486481:02/02/13 21:07
>>485
スクリーンセーバって決まった訳じゃ無いです。
「みたいなの」です。
んじゃゲーム感覚でDirectX使えばいいんでは
>>481
なぜ解像度を変更する必要があるのですか?
解像度を変更するメリット、必要性がなければ
フォームの上のバーを消して最大化すれば?
それじゃあだめかな?
このスレ使えねえー!

>>481もギコ猫のスレッド行ったら?
>490
必死だな(藁
解像度変更するのはゲームにしか許されてない事だと思うよ。
だから素直にDirextX使いなさい
493デフォルトの名無しさん:02/02/13 23:46
6のパソナルで、オラクルよりデータの抽出は可能?
データ自体は加工しなくてもいいんだけど。
一応それっぽいのフリーで見つけたんだけど・・・
「ODBC access コンポーネント」ってやつ。
>>493
TDataSet派生って書いてあるからProじゃないと使えない雰囲気。
そもそもPro版のDBコンポ使えなかったらDelphiでDBの意味ないだろ。
あと業務で使ったらタイーホね
>>493
たとえばこの辺。
http://www.allroundautomations.nl/doa.html

パソナルで使えるかどーかはしらんが
TDataSet継承してるからだめかもしれんな。

海外のサイトさがせばVCL非依存のDBドライバあるかもね。
496495:02/02/14 00:18
チョトかぶった
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 ソースが付いていることにあり
504Delフサギコ ◆zE1iiRdQ :02/02/14 01:46
    ∧,,∧     / ̄ ̄ ̄ ̄ ̄
   ミ    ミ  < ユーザーが
   ミ    つ   \_____
   ミ @ ミ
   '∪'''∪'

ピキューン      + / ̄ ̄ ̄ ̄ ̄
 +   ∧,,∧    <  増えている
   ミ,゚Д゚ ,,ミ     \_____
((  ⊂ .  つ   ))
 +  ミ   ミ   
    ''とノ''  +

キュピィィィン   +   / ̄ ̄ ̄ ̄ ̄
     ∧,,∧   < らしい!
    ミ,, ゚Д゚ミ .  \_____
    ミ  つ つ ))
 +   ミ ⊂.ミ
     ''∪''''   シュイショクデスシ  
505Delフサギコ ◆zE1iiRdQ :02/02/14 01:50
   ,∧,,∧∩  /
  ミ,,゚Д゚ 彡< 先生!!DB接続の為にProを買うのは
__ミ ミ  ミ   \ シゴク真っ当だと思われ、だと思います。
\,,∪  ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||"  イチブ デハ 設計時からテーブル参照できる
 ...|| ̄ ̄ ̄ ̄||   DelphiのDB機能は開発ツール中でも絶賛的評価なり。
Delフサギコタンカワイイ・・・

かっかっちゃおうかな〜(ハァチョ
507481:02/02/14 02:20
>>492
解像度変更の件ですが自分のPCがNT4の為DirectX使えません。
ChangeDisplaySettingsのAPI、DirectX以外の方法で今はフルスクリーンのみは出来る状態です。
もどす方法だけが分からないのでどうしたら良いのか、教えていただきたく思いました。

481の書き方が紛らわしかったのですがスクリーンセーバと決まったわけではありません。
>>507
 そこまでやりたいなら このサイトをご覧・・・・
ttp://www.kt.rim.or.jp/~s-matsu/sub/prog/unskill018.html
>>507=481
なんどもすいませんが、どうして解像度を変更する必要があるのか
教えてくれませんか。それと、「ChangeDisplaySettingsのAPI」
を使わないのは、なにか問題があるからですか?
目的がはっきりしないのに答えようがないよな
>>507=481
どうやってフルスクリーンにしたのか教えてください。戻す方法が分かるかも
しれませんので。
ま、まさか変更前の解像度を覚えてないだけとは言わないだろうなっ?
素直にDirectXにしとけって・・・。
アイコンやウインドウぐちゃぐちゃにされたくないしな。
強制終了してもまず元の解像度に戻ってくれるし。

そういやNT4ってDirectXだめだっけ?DirectX3まではOKじゃなかったか?
それなら解像度変更くらいできる。
514513:02/02/14 09:47
とりあえずエラー処理なしの最低限のところだけ。
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のバージョンによっては解放処理が違うので注意
515 :02/02/16 12:40
DELPHI6パーソナルで
ADO使いたいんだけど
どうすりゃいいの?
タイプライブラリの取り込みで。OLE-DB直接も可能だよん。
517515:02/02/16 13:44
>516
 おかげさまで、取り込みはできましたが
 DEL坊の私にはそっから先どうしたらいいのかさっぱりわかりません
 用はローカルのMDBにつながりゃいいのですがどうしたらいいのでしょうか?
CreateObject("ADODB.Connection")ってやる代わりにuses ADODB_TLB;して
CoConnection.Createってやれば後はVBSとかと同じです。パラメタ省略したいときは
EmptyParamを渡せばよいです。
519デフォルトの名無しさん:02/02/16 19:46
>518
ありがとうございます
やっとできました。
520 :02/02/16 21:28
Wininetを使ってhttpでLZHファイルのDLしてファイルへ書き込むのがうまくいきません

テキストファイルだとうまくいくのですが・・・
どうしたらいいの?
>>520
デバッグしなさい。
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 文を見せてみなさい。
527Delフサギコ ◆zE1iiRdQ :02/02/17 06:49
   ∧,,∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < しつもーそ
   U  ミ   \____________
 @ミ  ミ
   ∪''∪

ShellTreeViewでRoot = rfDesktopのまま
最初からTreeを展開して、とあるパスを表示させたい時
って、どうやるのでしょうか?

おしえてくださいな。お願いします。
自分宛にpostmessage・・・・・ゴメソ、ただの思い付きです
529522:02/02/17 09:38
>524

ありがとうございます。
>>527 news://newsgroups.borland.co.jp/3C060EA6.90D0EAF1%40moonlight.gr.jp
531デフォルトの名無しさん:02/02/17 19:52
Delphiで圧縮ファイル(zipやLzh)に入ってるファイルをプログラム上で展開して覗くことは可能でしょうか?
VBでは出来たのですがDelphiでは出来るのかわかりません。

また出来るとしたらどのような圧縮形式で出来るのでしょうか?

>531
使ったことないけどこれでできるんじゃない。
http://www.csdinc.co.jp/archiver/
>>531
自力で展開ルーチン組むかライブラリ使えば、
どんな圧縮形式も対応可能。

VBってそいういうの標準ライブラリレベルで楽に出来るの?
>>531
unlha32.dllとかunzip32.dll使え。
Delphi固有の話題じゃないからsage
WindowsXPでは.zipを標準で扱えるようになったから
それっぽいAPIがあるかも。
536Delフサギコ ◆zE1iiRdQ :02/02/17 22:17

  ∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚ミ < >>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 節を修正しました。
コンポーネントは無事登録されたのですが、
オブジェクトインスペクタで、貼りつけたコンポーネントの
色関係のプロパティの色定数リストを表示させる(リストをスクロールさせる)と、
このコンポーネントで独自に追加したと思われる色定数について、
「***は数値ではありません」というエラーが表示されてしまいます。

どうすれば、ちゃんと使えるようになるでしょうか。
こっちにageれば?
http://www2.to/source
ShellTreeView は Community.borland.com で修正版が出ているから
そちらを使った方がよかろう。
>541
再現しないんだけど、D6用のパッケージだよね?
ん?D6 用パッケージがあるの?
544 さん, あとは任せたぁ。
546541:02/02/17 23:54
はい。ZIPを展開して、Packages\FlatStyle_D6.dpkをインストールしました…
547デフォルトの名無しさん:02/02/17 23:58
どの時点でどういうエラーメッセージがでたの?>541
548541:02/02/18 00:34
>>547
えと、541に書いてある通りです。
例えば、TFlatScrollBar なり TFlatMemo なりをフォームに貼りつけて、
色関係のプロパティを弄りますね。最初オブジェクトインスペクタの
色定数リストには cl*** しか表示されていないと思うのです。

色定数リストの前半は cl*** という定数ですが、多分後半は
em*** という独自の定数になっていると思うのです。

で、このリストを下にスクロールさせると、やがて em*** がリストに
出てくるはずです。その em*** がリストに表示されようとした瞬間に、
どうもエラーがでるみたいです。
メッセージは、「em***は数値ではありません」です。
FlatStyle_D6.dpkにはFlatDesignRegister.pasは含まれてないような……
まだ完全にはD6対応になってないみたい。
もしかしたら、dfn.incの頭に{$DEFINE VER130}って加えてから、
パッケージを再構築すれば通るかも。
割とかっこいいコンポだね。紹介サンクス。
550541:02/02/18 02:01
>>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; [email protected]; 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

ログを突っかかる部分の半角スペースをエディタで書き直すと突っかかりは解消されるのですが・・・」
同じ半角スペースでもなぜ書き直すと大丈夫で元々のデータの場合はつっかかってしまうのでしょうか?

どなたかいい知恵を授けていただけたら幸いです。
552522:02/02/18 11:53
>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上に出てこないのは気のせいか?
560Delフサギコ ◆zE1iiRdQ :02/02/18 23:04
>>538-540さん
                _______________
       ,∧,,∧    < 
    /,,ミ,,゚∀゚彡     \ ありがとうです
   //\ ̄ ̄ ̄\      \ 
  // ※.\___\       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 \\※ ※ ※ ※ ※ヽ  動作確認しました。
   \`ー──────ヽ  微妙に動作が遅いきもしますが・・・・・
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
>>543ソースを修正してもコンパイルできないのに
修正版をインスコするのできそうにないです。
561559:02/02/19 11:23
ちょっと自己解決。
http://www.drbob42.com/soap/soap42.htm
この辺が参考になりました。

サンプルくらい付けろ>某
562557:02/02/19 17:41
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
だろ
564557:02/02/19 17:59
>563
そうだった、でも、そこを直しても上手くいかない・・・

やっぱり「キーワードの使用が無効です キーワード:=」って言うエラーになる。
:= が紛れていない?

PASCAL 構文と SQL 構文がまざっているのかと。
566557:02/02/19 18:52
>565
紛れているとは?

色々いじっているが・・・

Delphiでデータベース(特にSQL)に詳しく書かれている、
お勧めのHP・書籍は無いですかね?
567559:02/02/19 19:09
関係なさげだが
>>562
> Query1.SQL.Add('values(TEST1 =: GIKO1,TEST2 =: GIKO2)');
単に
Query1.SQL.Add('values(:GIKO1,:GIKO2)');
でいいんでない?

ParamByName以前にもともとのSQL文が間違ってるに100ユーロ


Query1.ExecSQLする前にQuery1.SQLをどっかに吐き出して内容確認してみては?
568557:02/02/19 19:18
>567
ありがとう。

>Query1.SQL.Add('values(:GIKO1,:GIKO2)');

これで上手くいきました。
569Delフサギコ ◆zE1iiRdQ :02/02/19 23:24
>>566
  読むといいかも

   ̄ ̄ ̄ ̄ Ο  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ο
♪   ∧,,∧゚ ♪
    ミ,,゚Д゚彡  ♪
    ミつ[|lllll]).
   〜ミ  ミ
    U''U

Delphiデーターベースアプリケーション開発ガイド
570デフォルトの名無しさん:02/02/20 13:02
Delphi 6 Update 2 (英語版) 公開あげ。

http://community.borland.com/article/0,1410,28405,00.html
( ´∀`)/ 先生!! 質問です!
Update2 というのは Update1 を当てずとも素の状態から Update できるのでせうか?

Delphi5からのユーザなのですが、5はUpdate1までしか出ていないので分かりませんです(;´Д`)
つうかDel5のUpdate2もだせや(#゚Д゚)ゴルァ! >某陸
英語版もってるのなら、英語読めるようにしとけ。ぼけ。
573 ◆10000jp. :02/02/20 17:26
(´∀`)<update2出てるのか
BCB6 が 3/19 出荷だからそれまでには日本語アップデート2がでるな。
Update2は、ほとんどエンプラ版のみの機能とAction関連っぽい。
576デフォルトの名無しさん:02/02/20 19:51
ActionManagerの勝手に Enable が false になっちゃうよバグは治るかな。。。
577デフォルトの名無しさん:02/02/20 20:42
>>571
普通はそういう風に作るものでしょ
>>576
バグがあるならレポートを。

時間はあるぞ。どどんがどん。
579デフォルトの名無しさん:02/02/21 01:09
>>577
DEL4、BCB4の時は差分アップデートなので
#1を当てたあと#2を当てる必要があった。
これ、Borland式。
580 ◆10000jp. :02/02/21 09:52
(´∀`)<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 の期間延長っていうダイレクトメールが来たよ
売れてないのかなー?
587 ◆10000jp. :02/02/22 07:37
>>582
(´∀`)<DBは何でしょう?
588通りかかった初心者・・・:02/02/22 08:22
>587
Paradox 7 です。

ローカルSQLガイドに下記のように書いてあったんだけど、
「計算によって求められた値(計算フィールド)を基準に GROUP BY 節でグループ化を行うことはできません。」
これに当てはまっていると言う事なのかな?
589 ◆10000jp. :02/02/22 10:35
(´∀`)<LocalSQLの制限かな。IB6も駄目でした。
      Oracle8では大丈夫でしたよ。
590通りかかった初心者・・・:02/02/22 11:37
>589
調べてくれてありがとう。

こういう場合ってどうすればいいの?
自分的に考えたのは、
ワークを作り(年・月・詳細金額)を抜き出しコピー
それをグループ化

ほかに何か手間要らずの方法はないですかね?
591デフォルトの名無しさん:02/02/22 12:40
Delphi5proを使っているのですが、BDE無しに
住所録程度のソフトを作りたいのですが、
何か良い手はありませんでしょうか?

初心者なので出来れば優しくお願いしますー
>>591
 D6にバージョンアップすると BDE無しに使えるMyBaseというのがあるそうです
593591:02/02/22 12:57
>>592
バージョンを上げたいとは思っているのですが予算と
初心者なので新しい機能はまだまだ縁が無いので
ちょっと手が出ません。
>>593 それではODBC経由で使えるデータベースを利用してはどうですか?

やりかた
http://www.google.co.jp/search?q=cache:F5BKq5HU-0IC:61.121.66.222/~ytm/oldhome/Tips2.html+TDataSet&hl=ja&lr=lang_ja
>>591
勉強の為にDBを使うなら、ODBCかDel6にする。
勉強の為に作るけど、DBはいや。つー場合は、ファイルに適当に書き込む。
だれかに使ってもらう為に作るなら、素直にDel6を購入かファイルに適当に書き込む。
100件程度で、ちょっとした検索が付いたくらいの住所録ならファイルに書き込んでも
全然OKな気がする。
596591:02/02/22 13:17
>>594
ありがとうございます。 さっそく見てみました。

最初の説明で漏れていたのですが、作った物を
他所にも持って行きたいと思っていますので
ODBCの設定をいじる分は、すみません ちょっと外れです。

できたらCD-ROMに、プログラムとデータを入れて
そのまま実行できるような物をイメージしています。
597 ◆10000jp. :02/02/22 13:23
>>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
ありがとうございます。
早速試してみます。
605 ◆10000jp. :02/02/23 08:00
(´∀`)<ParadoxでもVIEWが使えたのか…
606559:02/02/23 12:41
>>602
OSはW2k です
デフォルトのフォルダに入れてないからかな?
iAtokも落ちるし
>>606
>iAtokも落ちるし

それは... ATOK 側の問題の気がするなぁ。
608559:02/02/23 14:47
>>607
どもです
今はiAtok使わないようにしてるし
こまめに保存してるけど
落ちるときはF9押してアプリが動き出す瞬間みたいだから
デバッグモードの時のIMEの設定か初期化くさいです
でもいつもじゃない所がいやらしい
justのアフォ金返せ!!
609デフォルトの名無しさん:02/02/24 00:56
>>608
http://www.justsystem.co.jp/
ここでどうぞ。
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って動作します?
614 ◆10000jp. :02/02/24 14:13
>>611
(´∀`)<D6のdbxpressを使ってます。 スタティックリンクが便利です〜
615 610 :02/02/24 14:31
すみません、MyBaseの事ですが、今まで通りTDBGridなど使えるのでしょうか?
616 ◆10000jp. :02/02/24 14:56
>>615
(´∀`)<使えると思うよ〜
617lily:02/02/24 16:18
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;
619lily:02/02/24 22:29
TInplaceEdit の Handle プロパティから Canvas とればいいんですか。なるほど。

でも描画のタイミング(Paint)はどうすれば良いですか。
>>619
描画のタイミング?
普通Gridで色々やりたい時はDrawCellでやっちゃうんじゃないの?
621620 :02/02/24 23:01
あ、でも表示だけならいいけど入力したいなら入力中は消えるね
ぉいぉい。ふつーは、カスタムインプレースエディタとカスタムグリッドをペアで
作成して、

function TCustomGrid.CreateEditor: TInplaceEdit;
を継承して自作のカスタムインプレースエディタを返すようにし、
カスタムインプレースエディタは、TInplaceEdit から継承すればよい。
TInplaceEdit は、T(Custom)MaskEdit から継承しているから、
実態は TEdit だ。

だから、TEdit に罫線を入れる方法を作れば問題は解決する。
623通りかかった初心者・・・:02/02/26 20:29
InstallShied Express for Delphi の使用方法について書かれているHPとか、書籍知りませんか?
Googleで検索すると全部外国語のもの・・・
>>623
ISXのヘルプじゃ足りない?
>>623
あそこまで単純なインターフェースで、何がわからないのか。
626Delフサギコ ◆zE1iiRdQ :02/02/26 23:50
   ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < わかってる人にはわかるが
   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を始める初心者です。
おすすめの書籍がありますでしょうか?
>>630

http://www.cbook24.com/

こちらなら送料だけで返品可能
http://www.amazon.co.jp/
632デフォルトの名無しさん:02/02/27 15:51
>>631
ありがとうございます。
とりあえず、「基礎からわかる Delphi6」を買ってみようと思います。
Delphiを基礎からやりたいのですが、Web上はなかなかいいとこがなくて。
633委員長 ◆ABoneCRY :02/02/27 16:14
>632
私はDelphiではないですが、MLに入って、過去ログ検索サイトを
教えてもらうのもいいですよ。
ヘタな参考書より、過去ログを検索した方がズバリな事がかかれてたり
しますから。
635Delフサギコ ◆zE1iiRdQ :02/02/27 20:45
   ∧,,∧    / ̄
  ミ,,゚Д゚彡 < 基礎DelEはいいっすね
   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を呼び出してるメソッドはオーバーライド出来るんじゃないの?
642640:02/02/28 17:15
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 で取得できる
648640:02/03/01 16:30
>>643さん
 ありがとうございます 過去ログ追いかけてサンプルコードも見つけました
これにも同じ方法が使われていますね
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1004530597_1/MyDraw.pas

>>644さん
WM_ERASEBKGND は明示的には送っていません

>>645さん
 検索したけど他に具体的に提唱してる人もいないようですし、実際、複数のフックコンポを
 使った時の解放問題はやっかいそうですから、使ってみようと思います

>>646さん
 たとえばTLabelの文字を変更すると ラベルのあった文字の部分が無効になります
 その部分だけ描画したいけど、その領域をVCL上で知る方法が無いので困っているのです
 現状、全領域を描画するしかないので

>>647さん
ヘルプに書いてあるのを読むとそういうふうに読めるんですが Delphi5はそうなっていません
単にGetClipBoxを呼んでいるだけした。実験してもフォーム全体が得られるだけでした。
649640:02/03/01 16:42
あ! DoubleBufferd:=falseにすると 最初にクリップボックスが設定されるようです

うーん 困った DoubleBufferd:=trueじゃないとチラツク場所があるんだよなあ
>>649
よーわからんがTImage張り付けちゃだめ?
再描画はTImageにまかせると。
651640:02/03/01 17:15
>>650さん
 TImage貼り付けるのも考えたのですが、フォームが最大化されると数Mになるんで
 なんかそれだけでそれだけメモリ取るのもどうかなと・・・といってもDoubleBufferd:=Trueなんて
 やってたら同じですね (^^;

DoubleBufferd:=Falseにして チラツキを減らすの探して
ControlStyle:=ControlStyle+[csOpaque];
というのを見つけました。
Form.Invalidateされるとダメだけど これでだいぶチラツキが減りました
652640:02/03/01 17:17
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
ラーニングを買う以外にどうやって手に入れるのですか?
657656:02/03/03 00:22
あ、、ラーニングって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;
669668:02/03/03 23:29
ゴメンかんちがいでした・・・鬱
あるテーブルのカレントレコードの内容を
別なテーブルに追加する処理を書いているのですが,
ソース側にメモ型項目が含まれていると
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を経由してコピーするとか
672Delフサギコ ◆zE1iiRdQ :02/03/09 00:08
   ∧,,∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡  < 久しぶりにDelコード書けてうれいいや
  ミ つ且~~   \___________
〜ミ,,,,,, ,,ミ

こんな定義を
type
 TTextLineBreakStyle = (tlbsLF, tlbsCRLF);

マックも含めて
type
 TTextLineBreakStyleMultiPlatform = TTextLineBreakStyle + (tlbsCR);

こんな風に定義したいんですが
列挙型の定義を足し算っつうのはどうすりゃいいでしょうか。
>672
TTextLineBreakStyleMultiPlatform =
  (Low(TTextLineBreakStyle)..High(TTextLineBreakStyle), tlbsCR);
でできないかな。
674Delフサギコ ◆zE1iiRdQ :02/03/09 23:50
         タマニハ age
        ∧,,∧    / ̄
       ミ ゚Д゚彡 < >>673サンクス
       〃   ミ   \_ でも出来ないみたい。
       〜OUUづ

ところで、改行コードの相互変換関数を作りました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238

だけど、速さに自信がないので
どなたか高速化してくださいな。

ちょっとでかいサイズのStringから
1文字-例えば#13とかだけ
削除するのって、どうやって高速化すればいいんでしょ?
675デフォルトの名無しさん:02/03/10 03:02
質問です。
複数のテキストを1つのファイルに保存したい時は、どうすればいいですか?
1回1つにまとめて、読み込み時に、また分割でできるんでしょうが、
なんか、他に方法ないっすかねぇ???
Append
677デフォルトの名無しさん:02/03/10 03:15
また分割だから、アーカイバでは?
678675:02/03/10 03:31
>>676
正直、私へのレスだかもわかりませぬ・・・レス早すぎな気もするし、HELPみたら
俺へのレスな気も・・・

>>677
そうなんですけど、便利な関数とかないかなーって・・・

というか、二人様レス感謝なんですが、わかりませんごめんなさい・・・
めちゃくちゃ初心者なんです。
もうちょっと調べますです。
679Delフサギコ ◆zE1iiRdQ :02/03/10 03:47
  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡< TMemIniFile
  UU""" U U   \_______________
>>674
もう少し自分で考えなさい!
681Delフサギコ:02/03/10 10:43

            ∫    _________
   ∧,,∧     ∬   /
   ミ,,゚Д゚彡っ━~  < 漏れは素人童貞ですた。
_と~,,  ~,,,ノ_.  ∀   \
    ミ,,,,/~), │ ┷┳━   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ .じ'J ̄ ̄| ┃
 ̄ ̄ ̄ ̄


682Delフサギコ ◆zE1iiRdQ :02/03/10 12:34

  ∧,,∧   ・・・・・・・
 ミ,,  彡 
 ミ   ミ  
 ミ〜,, ミ
  ∪ ∪

   ∧,,∧   怒られた…
  ,ミ ゚Д゚彡
  ミ  ∪  
 ミ〜,, ミ
  ∪ ∪
こんな感じでガンバレ
ものすごく大きい文字列を変換する場合はメモリーが勿体ないから
最初に少し余裕取って、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;
684683:02/03/10 13:10
言ったら悪いけどさあ、
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覚えとけ。
それから改行コード変換なんてフルスクラッチで書くな過去ログ漁れ。
689688:02/03/10 14:17
なぜか途中で送信してしまった。

上記URLの3に、>>685 な書き換えやってみたコードを貼った。
>>683 を書き換えていった結果なのだが、もう不要なlabel宣言が残ってた。

>>687 まあ、頭の体操でいいんじゃない?
690688:02/03/10 14:36
他にもconstに使おうと思って書いたが使わなかったテーブルが残ってたな。

ちなみに最適化とともにコードを単純にするため、テストに現れない仕様変更をしてある。

「改行文字要素が続く間、最初の改行文字と一致する文字の回数だけ新しい改行を出力」
つまり
CR+LF+CR+LF とか LF+CR+LF+CR, CR+CR, LF+LF ならばいずれも改行を2個出力するが
CR+LF+LF というシーケンスが現れた場合、改行を一個しか出力しない。

普通は問題は無いと思うが、改行コードの種類を連続して混在させているソースを扱うのなら(笑)まずいかな。
まあこの部分は他の最適化と独立して調整可能だけどね。
691下手人:02/03/10 22:00
|  | ∧
|_|Д゚) .....
|文|⊂) 速度の話なのに、ベンチ幕すらやらないの
| ̄|∧| 
692683:02/03/10 22:38
ちょっと >>634は言い過ぎたかなあ・・反省・・

でも、元のコードは ソートでいえば挿入ソートをしてるようなもの
ちょっとファイルサイズが大きくなるとファイルサイズの2乗で時間がかかってしまう

それと、考えずに作って不具合見つけては対症療法的に作ったような感じがしたもんだから
XPが好きなら、そういうやり方を排除しないと・・・みたいな
693Delフサギコ ◆zE1iiRdQ :02/03/10 22:57
    ∧ ∧  ツョック!
    ミ;゚Д゚彡  BASIC使いのコードとか言われた…
  〜ミ,,,,uuミ
        でもアリガdございます。

そうか。SetLengthで確保しておいて
S[X]で書き換えて最後にSetLength呼ぶと
速いのですね。そかそか。
よい勉強になりました。

>>686
テストもさらっと書き換え(追加し)ておくれYO

>>687
ログで見つからなかったよ?
ログ漁るのより、自分で作った方がマシな
事も多いから検索忘れてたけど。
…Cですか………なんかチョット…敬遠でして…
 特に文字列扱いがムズすぎて…

>>688-690
4のコードはPCharとMoveがスゴイっすね
PCharの引き算してこんな事出来るんだ。

CR+LF+LFは改行コード二つがいいかしら。
ちょと改造してみるっす。

サンクスコ
    ∧ ∧  
    ミ,,。_。彡  
  〜ミ,,,,uuミ

>>692 
対処療法ってわけではないのですが
そもそも、どこで時間がかかるかを
マッタク考慮していなかったものでして。
そのテのコードを書く経験がそんなにないんですな。俺。

>>691
どうやったらベンチできるかしら。
694683:02/03/10 23:13
>>693 一度再帰下降で四則演算するコード書いてみたら? 

一文字先読みするテクニックを覚えると応用が広いよ

まず、 CR/LF/普通の文字の3つに分けて
表を作ってから

・CRがあれば次がLFなら読み飛ばす
・LFがあれば次がCRなら読み飛ばす
・CRかLFなら改行コードを吐き出す
・普通の文字ならその文字を吐き出す
 と4つの条件を並べ書いて状態遷移で書き下す方式でやれば書くのも速くなるし


ベンチの方法は、単純にファイルを読んで改行形式を順に変換して元と一致するか比較して終了する
関数作って、その時間を測ればいいのでは?
>>671
遅レスながら原因?は別なところに….
社長がデータ作っているところで
私がリモートで書き込みしているのがまずかったらしいです.

データ自体も壊れていたのが発覚して気がつきました.
(同一タイムスタンプの実行ファイルでいきなり壊れたので)
アホな結末ですいませんです.

696下手人:02/03/11 00:56
 ∩ ∩
 | ∪ |
 |  〜     ../ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | ∧ ∧   / 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は誤差大きすぎ。
698688:02/03/11 01:17
>>696
もっと細かい、QueryPerformanceCounter もよく使うね。

最適化のために測るときは、実際に使いたい対象データの性質に合わせたデータを
用意してやらないと、見当違いな最適化する危険があるよね。

>688で書いたやつは、1行がある程度長いときに有利になるように書いた。
テキストファイルを扱うときみたいな。構造としてフォーカスしただけなので、
計測するときはさらに Move をやめて手でループした場合どうか、とか比較してみたり
する必要はあるね。

ちなみに、>683は、短い行が多いデータのときに強そう。

>>693
文字列の a := a + b 形式での順次追加は、大きな文字列相手にやると
ものすごいパフォーマンスヒットになる。Delphiだと安易にやると陥りやすいよね。
最大サイズがあらかじめ分かるのなら先に確保してしまうのは常套句。
分からなくても、別の文字列変数にある程度のサイズになるまで溜めるとかでも効く。
699下手人:02/03/11 01:29
 ./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 |  「高分解能パフォーマンスカウンタがある場合」って脅しにしか聞こえませんが
 | 普通実装されてると期待して良いの?
 | ってかコレ何の事言ってるのさ。マルチメディアタイマじゃ無いの?
 \___________ ._________________
______ ∀        ∨
         | ┷┳━    ∧,,∧,,,,,,,,,,,,,,,
 ̄ ̄ ̄ ̄ ̄ ̄ ̄|. ┃     ミ ゚Д゚,,彡,,,,,,,,  ゙〜
 ̄ ̄ ̄ ̄ ̄ ̄ ̄....┻       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は測り易かった…
705下手人:02/03/11 02:22
よほどデータ大きくしないとキャッシュ効いちゃわない?とか
forよりwhileの方がコンパイル最適化されるよ
とか煽ってみるテスト

    ∧ ∧         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ̄~.ミ ゚Д゚彡~~ ̄|   <  もう寝
|\⌒⌒⌒⌒⌒⌒\   \
|  \           \    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\  |⌒⌒⌒⌒⌒⌒|
  \ |_______|
706697:02/03/11 02:23
>>698
>見当違いな最適化する危険があるよね。
今回の改行コード変換ルーチンは
前段階として、文字列に対して末尾にしか
改行コードがないように整形・正規化しておくのが一番高速で実装も楽かもね。

>>699
PerformanceCounterは消費したCPUクロック/一秒あたりのクロックで計測する方法で、
今のCPUには必ずついてる機能。動作確認したOSは98/NT/2000/XP。

>>701
実開発ではベンチ専用プロジェクトを起こすことは稀で
# 他クラスに依存してるクラスの単体ベンチなんて
# メソッドひとつ呼ぶのも一苦労
実コード内で計測することが多いので
実行回数を指定することはほとんどないよ。
なので回数が少なくてもいいように最も精度の高いものを選ぶ。

VCみたいにまともなプロファイラついてる
処理系なら選びようがないけど。

>>704
もちろんアプリの種類にもよるけど
ホットスポットは数秒・数十秒消費していることが多いので
他プロセスなどの外部要因があまり大きな影響を及ぼしたことはないよ。
リアルタイムなアプリの場合はプロセスのプライオリティをあげて計測してる。
>>701
レス先の番号といいなんか文章変よ
kylix共用にしたくてAPIコールがやりたくないなら
PerformanceCounterの代わりにRDTSCを使えばいいと思う

RDTSCの使い方はWeb検索ですぐ見つかる
709下手人:02/03/11 11:39

/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|[Delphi-ML:52426] Re: ボタンのドラッグとクリック
| でも見てくださいな>>700
\_______ _______
             |/
  ☆彡 。   ∧,,∧
       \ ミ・Д・ミ
         ⊂  ミつ
          "ミ  ;'ξ
           し
710683:02/03/11 12:39
もし >>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のほうがってのも状況次第だな。
712683:02/03/11 13:12
>>710 の方針で昼休み中で出来る範囲で書き換えてみました
 octを準備してる部分がなんかもっさりしてるけど

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238&res=7
713683:02/03/11 13:16
今思いついた

oC:=char( ord(S[rp]) xor (ord(CR) XOR ord(LF)) );

とやれば octを作らなくてもいいんだ
>Length(S) は const S でも関数に展開される

…マジデスカ。最適化されると思って毎回Length呼んでたよ。鬱死
>>711
実際にはこの手の変換は1度限りしかしないのだから
データキャッシュに入らない状態でどれだけのパフォーマンスかを見た方がいい
それ以上に最適化しても無駄。

データバス速度はCPUの実行速度の数10分の1にしかすぎないから

純粋な処理速度見るならむしろキャッシュに入ってたほうがいいんでないの?
まあ、それもどういう使われ方想定するかによるけど。

一連の流れの中で、「キャッシュ」という言葉が指してるものも複数登場しているようだなあ。
717683:02/03/11 17:55
>>713の改良と、普通の文字が連続した時の改良を加えた

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238&res=8
>683
なんかインデント変。

>717
かなりごちゃごちゃしてきたね。
ところで、ポインタの大小関係見るのにcardinal castは不要でしょ。
719688:02/03/11 18:15
そういえば。

>SetLength( Result, Length(S) * 2 );
この2が気に入らないな。速度とは関係ないけど。

SetLength( Result, Length(S) * Length(ReplaceTo) );
がいいかね。
720Delフサギコ ◆zE1iiRdQ :02/03/11 22:46
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| マターリの呪文 ビビデバビデブー♪
\___  _________
      ∨
♪   ∧,,∧ ♪
    ミ,,゚Д゚彡  ♪
    ミつ[|lllll]).
   〜ミ  ミ    オレ モ ウプした。
    U''U   きっとソコソコ速い
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238&res=10
>>719 メモリは対応しました。

やぱりブロックコピーしてる
むこうの>>3のコードが最速なんかな?

なんで>>3のコードの

const S: Stringの

sCurrent: PChar(S);

の終端が#0になるのか、わからんです。
自動でなるの?
>>720
自動でなる
722デフォルトの名無しさん:02/03/11 23:31
>>706
>前段階として、文字列に対して末尾にしか
>改行コードがないように整形・正規化しておくのが一番高速で実装も楽かもね。
局所的にちまちま高速化するより、
こっちみたいに大域的な高速化を検討したほうがいいぞ>フサ&all
まさかテキスト全体を一つの文字列として
処理するなんてアフォなことやってないよな?
723Delフサギコ ◆zE1iiRdQ :02/03/11 23:48
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ゴメン。意味わかんない>>722、サンクスコ>>721そなんだ。

   ̄ ̄ ̄ ̄ Ο  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ο
♪   ∧,,∧゚ ♪
    ミ,,゚Д゚彡  ♪
    ミつ[|lllll]).
   〜ミ  ミ
    U''U
>>722
ここでいう正規化ってのはつまり、一行づつ呼ばれるようにすること?

今は普通、大抵のテキストはメモリに入りきってしまうし
まとめて一括でやってる方式のほうが速かったりしてね。
アフォとは言い切れないんではないか。

入力をstringとしている方式からメモリアドレスとサイズ与えるように変更することで
メモリマップトファイルから読ませたりとかね。
725下手人:02/03/12 00:54
            ∫    _________
   ∧,,∧     ∬   /
   ミ,,゚Д゚彡っ━~  < で、結局どれが一番速いの?
_と~,,  ~,,,ノ_.  ∀   \
    ミ,,,,/~), │ ┷┳━   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ .じ'J ̄ ̄| ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄  ┻
726Delフサギコ ◆zE1iiRdQ :02/03/12 01:03
  俺の席取るな
___ ,,,,,,, _____
  ミ。Д。彡
   ∨゙∨∪ エィ


   ||| || グチャ
  ,.__∩__ 
   | ,.:. '.;§, |;
,・. ,.'|_@δ,_|,.': ノ;;つ \  
.': ;,・∧,:;。д ミ ;;>,.': ;.      ~
_と;・':ζ,,, 。,.':ξ_.  A 
    .ミ,,,/~),  .| ┷┳━
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄   .┻
727Delフサギコ ◆zE1iiRdQ :02/03/12 01:10

               \   テケテケ      /
___.___.  ∀     ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
       .   .| ┷┳━    ∧,,∧,,,,,,,,,,,,,,,
 ̄ ̄ ̄ ̄ ̄ ̄ ̄|... ┃    ミ゚Д゚,,彡,,,,,,,,  ゙〜
 ̄ ̄ ̄ ̄ ̄ ̄ ̄   .┻       U U """"UU



       ∫ プハー
   ∧,,∧ ∬      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,-Д-ノ,っ━~  < ・・・
_と~,,,  ~,,,ノ_. ∀  \_________
    .ミ,,,/~),  .| ┷┳━
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄   .┻
AA張りたかっただけとちゃうんかと、小一時間問い詰め......
  >>スマソ下手人さん

で、一体誰が速度測ってくれるん?
>724
たかだか一関数にツール並みの汎用性持たせるのは明らかに無駄って事だよ。
変換にこだわるのは変。ブロックコピーも無駄。
各行の頭と末尾(改行コード含まず)を順々に検索する機能だけつけりゃ十分。
後は外部にまかせる。
大体ほんとにこの関数が遅くて困ってる奴がいるのかどうかも謎。
それ以前にこの程度のコードすら満足に書けない厨房の
業務の宿題肩代わりしてやってる奴らもいみふめ。

と支離滅裂に書いてみる。
729下手人:02/03/12 01:30
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |   バレタか   |
 |_______|
      ||∧,,∧
      ||,゚д゚,,;彡ベンチ ガンバッテネ>フサ
      ||⊂ ~ヽ
730Delフサギコ ◆zE1iiRdQ :02/03/12 01:40

 | ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |  デンパか? .|
 |_______|
   ∧,,∧||
  ミ;,,゚д゚||
 〃  ⊃||
    業務とか、何言ってんの?
    このお方....

  もしかして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
735683:02/03/12 09:01
計測しました
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238&res=11

結果はてまえみそですが >>717 が一番高速です
・・・まあ自分のコードが速くなるようにテストしたという見方もあるかもなので皆でテストしてみて
736683:02/03/12 09:29
>>732
先読み・余分書きのテクニックを使うので、ポインタを使うとキャストしたり
abosoluteする必要があるので、余計に読みにくくなります

また、ポインタも配列も今は速度に差は殆どありません。
分岐とメモリへのアクセス回数を減らすのが一番高速になります
>ポインタも配列も今は速度に差は殆どありません。
んなこたない。特にDelphiでは。
738683:02/03/12 09:34
>>737 実証してみて下さい
自分でやれよ
740683:02/03/12 09:37
もちろん、配列を使えばインデックスアクセスとなるので 理論的には遅くなる筈ですが
今時のCPUだとインデックス演算は並列に実行されるので、
実際にその効果が現れるようにするには
同時に加減算を並列でさせるような事をしないとオモテに現れない筈です。
普通の文字列処理で差を見せるのは逆に難しいでしょう
741下手人:02/03/12 12:38
    ∧ ∧   /
    ミ,,゚Д゚彡<  スーパースケーラやパイプを意識するのって別の話題だと思いませんか
    ミ,つ ~,つ  \
   〜ミ   ミ
    ∪''∪
確かにモットモな話だけど、配列を使うとレジスタを2つ使ってしまう
ポインタだとレジスタ一つですむから 文字列操作をする場合で読み書きが
複数ある場合は ポインタの方がレジスタ使われて高速になる可能性高し

というか 自分だって >>717のコードでポインタアクセスしてるじゃないか
と思って、>>717のコード(つまりfunc08)を 

rp^ を S[rp] に rpを初期値1で終了条件 while rp<=LengthS do

とて実行させたら そっちが速かった・・・・ あれ?
おかしいと思って色々やってみたら、関数の順番入れ替えるだけで逆転した

結局配列かポインタかより、キャッシュとかメモリアライメントの方が実行時間に影響する
って事だな・・・・・
745683:02/03/12 15:01
>>744 試してみました。 私の環境ではポインタを使う方が1割程早くなりました。

1割程度の改善はあんまり意味がないと思います。
改善するなら5割程度の効果があるかが目安だと思います

正直、最初のコード以外の差は最大で3倍なので 改行コード変換ルーチンと
してはどれを選んでも大差ないと思います。

最初のコードは 3Kで10倍 10Kで100倍も時間がかかりますから論外ですが
そろそろプロセッサ別の最適化になってきそうだから、
やめた方がいいんでないの?
誰かがインラインアセンブラコードを出すまでは嫌です ハァハァ
>>731
Splitterで隠れるコントロール.Visible := false
で起動すればどうよ?
749Delフサギコ ◆zE1iiRdQ :02/03/13 00:05
 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | こっちも手前味噌だゴルァ
 \_ ________________
    |/
   ∧,,∧
  ミ,,゚Д゚ミ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
750683:02/03/13 08:31
>>749

おめでとう。 アルゴリズムの改善で1000倍、チューニングで3倍。 こんなものだと思います。

アセンブラでチューニングしてもさらに1.5倍は厳しいです。
結果を見ると 配列使うコードの勝?

Cだとstaticなデータにはポインタより配列が速かったけどローカル変数にはポインタの勝なんだけどなあ・・
752デフォルトの名無しさん:02/03/13 10:17
>>749
 400Kで5000倍って事は元のコード単に改行取るのに1分くらいかかってたんじゃないのか?

そりゃベーシッカー扱いされてもしょうがないぞ age
753Delフサギコ ◆zE1iiRdQ :02/03/13 20:33
    ∬   ∧,,∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ~━っミ ゚Д゚彡,,    <  遅いコードを書いたら即ベーシッカー扱いかよ
    ∀._(,,,~  ,,,~⊃_   \_オメデテーナ_______________
━┳┷ |. ,(~ヽ,,,ミ.
  ┃...| ̄ ̄し'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,,ミ
        めちゃ勉強にナタ。アリガトウ。
754Delフサギコ ◆zE1iiRdQ :02/03/13 20:48
    ∬   ∧,,∧      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     ~━っミ ゚Д゚彡,,    <  遅いコードを書いたら即ベーシッカー扱いかよ
    ∀._(,,,~  ,,,~⊃_   \_オメデテーナ_______________
━┳┷ |. ,(~ヽ,,,ミ.
  ┃...| ̄ ̄し'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,,ミ
        めちゃ勉強にナタ。アリガトウ。
755Delフサギコ ◆zE1iiRdQ :02/03/13 20:51
         _________
  ∧,,∧   /
 ミ;゚Д゚彡< あり?
  ミ⊃ ⊃  \
〜ミ ,, ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∪∪   多重カキコスマソ
756デフォルトの名無しさん:02/03/13 20:55
>>754
ちょっと認識が変だぞ

遅かったのは文字列のメモリ確保に関するオーバヘッドじゃなくて
改行コードを見つける都度コピーした点だろうが!

コピーはサイズに比例する時間を消費する
だから改行数*文字列サイズ/2 の時間を食っていたのが根本的な原因

単にメモリ確保だけなら、サイズに比例する時間しか喰わないっての!
757Delフサギコ ◆zE1iiRdQ :02/03/13 21:09
>>347
    ∧,,∧    / 
  _ ミ,,゚Д゚彡_<  はぁ。。。
.=| |==U==U=| |= \
 | |@ミ  ミ .| |
 | | ∪''∪ | |
 | |      | |

ピーコするときにメモリ確保するでしょ?
それにかかる消費時間が頭から抜けてた
って事を言いたいんだけなんだけど。

ジヅラの間違い指摘は
わざわざageて言うことなんか?
>>757
どうでもいいがどこにレス返してるんだ?
糞コード書いといて居直るなよ・・・
つーかネタは辞スレでやれ
760Delフサギコ ◆zE1iiRdQ :02/03/13 22:46
>>759
┏━━━━━┯━━━━━
┃          |
┃          |
┃       ∩∩  
┃       ∧ ∧
┃      ミ,,゚Д゚ミ 
┃       ミ  ミ ゴメンナチャイ
┃       ミ  ミ
┃       ミ  ミ
┃       ..U..U
┃         
┃         晒しage

文字列に対して何度もDelete処理がある場合は
バカ正直に何度もDeleteなんてせずに
大きめの値をSetLengthして中身書き換えて
大きさが決まったら
再度SetLengthする方が
全然速いって事ですね。これは結構大切やね。
…知らないだけで糞コードとかベーシッカーとは思わんが。

ここでも、しっかり語られてました。
http://hp.vector.co.jp/authors/VA015850/program/dtips11.html
http://hp.vector.co.jp/authors/VA015850/program/dtips21.html
読んでたけど身についてなかったのねん。

ところでリンク先のコード、日本語に対応してない
気がしるじゃが...

D6にはVB風にマルチバイト文字対応の
ReverseStringってのも標準で付属してて便利かも。
761下手人:02/03/14 00:17
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 | アセンブラチューン キボン |
 |_________|
.    ∧∧ ||
    ( ゚д゚)||ハァハァ
    / づΦ
762デフォルトの名無しさん:02/03/14 00:39
C++Builder 6 発売後に、XPに正式対応した Delphi 6.1 が出そうな気がする。
>>760
確かに日本語対応してないね。
日本語未対応と書いておこうか?(笑)
>>762
XP対応は、時期的に見てもUPDATE #?で対応して欲しいものだ。
>>764

http://community.borland.com/article/0,1410,28423,00.html
"We are planning to support the new ComCtrls in the next major release"

つーことで、完全サポートは Delphi7 以降。
上記の文章には、とりあえずサポートするための技術情報(へのリンク)
サポートしている 3rd party コンポーネントの紹介、
XP コントロールの非互換性の問題
などにふれている。
日本語版 UPDATE2 はいつよ?
767デフォルトの名無しさん:02/03/14 08:47
C++Builder 6 は、XP対応なのにね。あと一年以上待たないといけないのか…
768683:02/03/14 09:05
>>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月前後か
771770:02/03/18 01:11
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出るのは早そうだな。
同一製品になるなら結構かかるんじゃないか?
775Delフサギコ ◆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で嫌なことがあったの?
>>790
ご想像通りペガサス級です。
>>787
前から探してるんだけどないんだよなー。
データベース全般に関してはDelフサがよく挙げる本
(データベース開発者なんちゃら)がいいと思う。

で、MyBaseに関してはそんなに面倒な話ではないと思うが。
XMLベースのParadoxだと思えばいいくらいなんでないかい?
イメージ的にはTDataSet + TStringListくらいかな?
794デフォルトの名無しさん:02/03/21 18:45
スレッドセーフなTStringList作って
>>785-786
クラス型(オブジェクト)ではなくクラス参照型のプロパティにしたかったのです.
確かに言語ガイドを見てもクラス参照型がpublishedプロパティにできるとは
書いていませんのでこれはあきらめて,
クラス参照の代わりにクラス名を文字列で持つようにしてみました.
これでうまくいきました.

新しく定義したクラスを書いているユニットをusesに入れなくてもよいので
かえって良くなった感じです.
>795
珍妙なインタフェースだなぁ
ほんとにそんなことする必要あるの?

まあTTable.DataBaseNameがあるから
空前にして絶後な珍妙さではないが。
797Delフサギコ ◆zE1iiRdQ :02/03/22 01:04
>>へたグラマさん
どうも、お久です。
とりあえず、クラス参照はだめなんでせうか?
http://www.wwlnk.com/boheme/delphi/tips/tec1290.htm

それにしても、そういう場合は
設計を見直して各機器のクラスを持たすのではなくて
TMyHardware1のインスタンスを持たすべきかと思われ。

DelphiのダイアログページもUMLのクラス図っぽいけど
クラスについて記述するのではなくて
インスタンスについて記述する方法だし、実際のプログラミングでは
そちらの方がよっぽど分かりやすいんじゃないかしら。

 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧    春ですなマターリ
  ミ,, ゚Д゚彡 
   〃つ旦O
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄
798Delフサギコ ◆zE1iiRdQ :02/03/22 01:31
VBで作ったActiveXDLLを
Delphiに取り込むのって

タイプライブラリの取り込みで
dclusr60.bplとかいうのを作ってみて
動作させてみたんですが

    ∧,,∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,゚Д゚彡 <  これでよかったのかな。
   ミ つ日   \___________
 〜ミ,,,,,, ,,ミ
EarlyBindingとかLateBindingとか
考えなくてもええんかしら?
>>783
>ハードの種類を切り替えるプロパティはクラス参照型にしており

こういう場合は、ハードの種類に対応した列挙型を定義して、
その型のプロパティーにすると思うんだが
800787:02/03/22 09:07
>>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での実装例に
似ているような気がしないでもないです.

クラス名の代わりにクラス識別子(ハードウェア識別子)として
数値や文字列を使うようにすればもっとスマートになりそうです.
これなら同じハード用のクラスを別なクラスで差し替えたりもできますからね.
今更だけど改行変換のアセンブラ化したのをあげとくよ。
意味無いけど。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238&res=13&fi=no
807デフォルトの名無しさん:02/03/22 18:55
>>806 おつかれさん どう? 速くなった
>>806

> mov ah,[ebx]
> cmp eax,$0a0d
これって巧い方法だけど、パーシャルレジスタストールとかにかかるんじゃなかったっけ?
>805

   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< 人を小馬鹿にしてますね。
  (    )  \_____
  | | |
  (__)_)
810806:02/03/22 19:15
>807
試してないけど大して変わらんと思うよ。

>808
面倒だったからパイプラインとかストールは無視してたよ。
movzx ax,[ebx-1]
に書き換えればOKかな?
>>806
 うーん ギコ猫の仕様とは一致しないようだね
 速度も残念ながらの結果か

でもサイズだけはメリットがある
>>809
          ヽ(`Д´)ノ "サイショカラ ソウ セツメイシロ!" トイウコトデシタラ オワビシマス!!
            (  )   ウワァァン!!
            / ヽ
                 ソレトモ、 ベツノコト?

   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ・∀・)< オマエモナー
  (    )  \_____
  | | |
  (__)_)
814806:02/03/22 19:41
>811
ギコ猫仕様って間違った改行コード(LFCR)も認識するということかな?
というわけで直して見たよ。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1015685238&res=14

間違っていたらすまん。
>800
BDEを使わずDBが組めるとの触れ込みでD6買ったけど
漏れもよく分からず困ってる。
誰か知らない?
816デフォルトの名無しさん:02/03/23 00:03
任意の言語で作成されたDLL内での例外はどうしていますか?
DLL内でどう処理しょりしたものか・・・。
1)戻り値で返す
2)GetLastError の様なものを使う
3)DLL内でエラーメッセージを出し、EXEへは連絡しない。
等々
どんなのがいいのでしょうか?
3は論外(エラーリカバリがDLL内部で完結するならいいけど)
1が無難では
質問しておいて、回答が来ると、そのあとどんどん条件を加えて
行く、というパターンがあるよね。明らかに本来知りたいことを
一般化できなくて失敗した質問をしてしまったときと、
かなり意図的に回答者を誘導しようという意思が見え隠れしている
時もある

どちらも、質問の前提条件を小出しにすることには変わりなく、
結果的に回答者を小馬鹿にすることになる

こういうのを見ると、こいつには二度と回答を書くまい、と
思う
うぜーな
そんなにお作法ゴッコがしたいんならML逝け
>>819
おまえはあっち逝け
>>819
オレんとこへ来い。
>>816
うー3だけ、はイヤだが、設定によってはDLLからエラーダイアログとか
出してくれる、というのだと楽なこともある(例:GOGO.DLL)
2は結局ラッパ作ってしまうので面倒。1がイイ。
オレは809じゃないが、809の気持ちは分かるな
805は、回答者に、すまん、とか、ありがと、の一言を加える
べきだったとオモフ
一方的に、しかも長々と条件を追加してるだけだからなぁ
(しかも、自己解決してるみたいだし)

お作法ごっこじゃないぞ。匿名でも、どこかに最低まもるべき
ことがあると思うんだよ
だからうぜーってんだよ
アフォをアフォととがめる奴はより異常にアフォなんだよ
いちいちレス付けんなよ
つーか投げーんだよ
無視するか市ねヴォケの一行にしとけ
825816:02/03/23 00:50
>>817-822
うーむ、
2)GetLastErrorなら、戻り値をTrue/Falseで比較できてわかりやすいんですよね。
でも、1)と同じで戻り値の定義が面倒・・・。
3)はエラーダイアログが金太郎飴化する危険性がある。
3)なら手っ取り早く詳しいエラーメッセージを出せるんですけどね・・・。

>>818
そういう場合は質問で返せばいい。
826823:02/03/23 00:55
>>824
>アフォをアフォととがめる奴はより異常にアフォなんだよ

そーか、そういうもんなんだね。ご忠告、アリガト
827816:02/03/23 01:04
エラー時は表示したいメッセージを設定して、戻り値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
D6 UP2公開
ftp://ftp.borland.co.jp/pub/delphi/delphi6update2.exe

D6についてるIndy8はめっちゃバグ多くてアレなので,英語版ではUP2で
Indy9.02bに置き換えてるのに,日本語版ではしてくれないのね。
833デフォルトの名無しさん:02/03/23 10:50
UP2の更新内容の詳細が知りたい。
834 :02/03/23 11:01
>>833
http://www.borland.co.jp/delphi/readme_61.txt
↑このくらい自分で調べたら〜?
836 :02/03/23 11:02
あれ?2じゃないな・・・
http://www.borland.co.jp/delphi/readme_62.txt
の間違い・・・
837 :02/03/23 11:03
>>835 株他
>832
Indyは9でも日本語関係はほとんどテストしてないと思われ
あんまりソースが変わっていない
>>815
いま手元にDelないんで未確認だが
とりあえずサンプルついてたはずなんでそれを見てみれば程度わかる(と思う)

>>793にも書いたが、単独で使う分にはXMLフォーマットのParadox
ってくらいの操作感だった。
わかりやすいのはdbExpressでRDBMSに接続して、TSQLClientDataSetで
SaveToFile?してみるとか。
そのあとRDBMSと切り離してLoadFormFile?すると簡単にブリーフケースモデル
みたいなものが出来上がる。
前にTDataSet + TStringListって挙げたが、
CacheUpdateのローカルデータが保存可能なTDataSetってほうがわかりやすいかな。

使って見ればだいたいわかるYO!
840833:02/03/23 18:39
>>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
とりあえず、ボーランドにクレームのメール送っときました。
844名無し~3.EXE:02/03/23 20:53
>>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を越えてないじゃないか

847845:02/03/23 23:28
>>846
ありがと。
>BCBよりは速いけどDelphiよりも速いとは思わないな
コンパイル速度はこれで十分かも。

>なんだ C#って2Wayツールじゃないのかよ!
2Wayじゃないのは特許関連で縛りでも入ってるのかな。
でもあんまり重要でもないような。そうでもない?
>2Wayじゃないのは特許関連で縛りでも入ってるのかな。
>でもあんまり重要でもないような。そうでもない?
2Wayは特許だったかも
(普段あまりにも当たり前に使ってて
 どの辺が2Wayなのか実は把握しきれてなかったりする・・・恥
 コンポーネント名を変えると
 ソースのイベントハンドラが自動的に書き換わるあたりかな?
 VBはそれができてないはずだから)

DelがDBの中身を設計中も表示してくれるのは有難いと思うけど
C#はだめなのかな
849Delフサギコ ◆zE1iiRdQ :02/03/24 03:17
  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ;゚Д゚彡< ・・・・・
  UU""" U U   \_______________

俺は2Wayってのは
Button1をClipboardにコピしたら
テキストでペストできる機能の事とばかり思ってた
んだけど。間違ってたろうかしら。
>>849
おもっきり間違っています
>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
知らんかった→テキストでペーストできる。
855Delフサギコ ◆zE1iiRdQ :02/03/24 16:32
>>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
はい、ダメです。
メニューウィンドウはいけますが、書いたようにオブジェクト…は元に戻ります。
859初心者:02/03/25 21:21
クラスのプロパティーは、それ自体では値を持たないんですか?
必ずしも持つとは限らない。

property Zeikomi: Integer read GetZeikomi;

function foo.GetZeikomi: Integer;
begin
 Result := Trunc( Zeinuki * 1.05 );
end;

みたいに直接値を持たずに他のプロパティから計算して求められる場合もあるし。
↑ちょっと違うか...

プロパティはそれ自体は値ではない。
変数・関数の代表・象徴(?)みたいなもの。
仮想変数とでも言うべきか。
862859:02/03/26 15:46
>>861
ありがとうございます。
えっと、プロパティは仮想変数みたいなもんで、ゲッタ/セッタっぽい
関数を後ろに書いてフィールドにアクセスするんですね。
Delphi で学ぶデザインパターン入門
キタ━━━━━━(゚∀゚)━━━━━━ !!
http://www.acesekkei.com/dp_frame.htm
アドレスワスレタ━━━━━━(゚∀゚)━━━━━━ !!
865デフォルトの名無しさん:02/03/29 00:11
OracleのStoredFunctionの戻り値ってどうやって受け取ればいいの?
StoredProcedureなら実行できるけど・・・・ なにか見落としているのかなぁ
なぜにIteratorや生成ネタにこだわるかね
振る舞い・構造に関するパターンのがよっぽど役に立つよ
867デフォルトの名無しさん:02/03/29 01:35
ほんじゃここも載せとくかね。英語読めなくてもUML
とサンプルコードで雰囲気掴めるでしょ。

http://www.delphi-jedi.org/Jedi:VOYPATTERNS
ボス!
列挙型の各タイプについて処理をしたい訳なのですよ。
で、ループで処理すると楽なので、型の最大値を整数型(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
>を実行してください。
だそうだ
>>872
うぉぉいまじかよthanx
ちぇ、漏れはPersonal版しか持ってないから関係ないよ
すんなり入ったけど
Fixの方はインストールのチェックしてないのか?
もしかして誰でもそーすもらえるのけ
876Delフサギコ ◆zE1iiRdQ :02/03/30 00:03
       ∫
   ∧,,∧ ∬      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,-Д-ノ,っ━~  < また、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;
883882:02/04/01 22:55
アセンブラのような感じのツールを作りたくて
数字フィールドを切り出すルーチンを作ってる所です
>>882 はその途中なんですが

目標仕様は

  引数 str の posからの文字が数値なら帰り値=trueでvalで値を返す
  またposは数値であった最後の文字の次の位置を示す
  10進以外に
  16進数 $FF 0xFF 0FFH
  2進数 0b1010 1010B

というものなんですが、 $FF 0xFF 0b1010  プリフィックス式は対応してるのですが
0FFH 1010B のようなpostfixにも巧く対応させる良いアイデアが浮かびません

難しそうなのは 01B23H のような感じの場合なんです
盗りあえずBNF書け
885882:02/04/01 23:05
>>884 ゴメン 書けません というかよく判らない
Delphi.NETなんてやめとけ>某
887882:02/04/01 23:15
あ!別の関数を作って
1、 postfix式16進数かどうか調べる 
2、 postfix式2進数かどうか調べる
3、>>882
という方法でいけそう

なんか格好悪いけど これでいいや
>>882
まず、IntNumber() と言う、わけわからん名前を何とかしろ。
話はそれからだ。
889882:02/04/02 00:25
>>888 どんな名前がいい?
890882:02/04/02 00:30
とりあえず >>887 の方法で動いたからもういいや

ちょっと3回もスキャンするのがイヤンな感じだけど パソコン早いから問題なしと
891Delフサギコ ◆zE1iiRdQ :02/04/02 00:45
       たぶん、逝ってよしな質問なんだけどいいかな?
   ∧,,∧   
  ,ミ ゚Д゚彡 ・・・・・アオラレマセンヨウニャ
  ミ  ∪  
 ミ〜,, ミ
  ∪ ∪

画像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に同意。
901900:02/04/02 01:16
一つ目の「全く」は「だいたい」ね。
沢山のアルゴリズムで調べて、そのうちのどれか一つでも
近ければ、近いと判断する。
画像認識の話じゃなくて?
|  | ∧頂点 抽出 画像 判定
|_|Д゚)ニューラルネットワーク 画像 判定
|文|⊂)モザイク 画像 判定
| ̄|∧|ガムバレ
905デフォルトの名無しさん:02/04/02 01:19
もっと具体的に言って。
たとえば、モンタージュと顔の写真を比較して、
同一人物かどうか調べるとか。

警察庁はそういうシステムつかってるのかな?
モンタージュなら、顔の特徴を分けて調べた方がいいですね。
907デフォルトの名無しさん:02/04/02 01:22
モーフィングの技術は使えないかな?
よく知らないけど。
横レススマソ
人物の顔は特定の位置、目、鼻など決まった箇所で
点を取ってその点と点における距離の比率で割り出す方法が
どこぞの国では実用化されている
ただ単に重複したエロ画像削除したいだけとか。
Delギコ様、Delギコ様、至急下記スレッドまでお越しください。 x 2
http://pc.2ch.net/test/read.cgi/prog/1017676738/22-
こんばんわ。エセグラマ@Delphiです。
ちょっと諸先輩方にお尋ねしたいことがあります。
あるデータをリスト管理したいのですが、
管理方法がこれであってるかどうか分からないのでご教授願いたいです。
データ(この場合レコードになるかもしれませんが)とは、
複数のデータを一まとめにしたもので、型付きファイル(レコード)なのです。
自分の中で今のところ最善な(と思っている)のは、
データ一塊をクラスとして実装して、それをTObjectListクラス(?)で管理する方法なのですが、
この方法であっているのか、また、
他の方は同じ様な事をどのような形で管理されているのか知りたいです。
書籍やネットで、自分なりに頑張って調べたのですが、
やはり『これでOK』というやり方が分からなかったもので、
すいませんがよろしくお願いいたします。

環境:WindowsMe,Delphi 6 personal

至らない点があったら指摘もお願いします。
912Delフサギコ ◆zE1iiRdQ :02/04/02 02:18
WInShotみたいなソフトで
画像に変化があったら
ScreenShotを取ろうと思うの。

だってインストール時に
いろんな設定を覚えるために
いちいちボタン押してキャプチャするのが
面倒なので.

画像の違いによって比較するアプローチはいろいろ
あるみたいですね。
レスくれたかた、ありがとっす。

       zzzZZZZ
    ∧,,∧      ゴメンとりあえず今日はもう
| ̄ ̄ミ,,-Д-ミ ̄|   ねるです。
|\⌒⌒⌒⌒⌒⌒\
|  \           \  
\  |⌒⌒⌒⌒⌒⌒|
  \ |_______|
なんだエロ画像じゃないのか
>911
TObjectListで問題無し。
915911:02/04/02 03:51
>>914さま
おぉ!さっそくのレスさんくすです。
うぅん。TObjectListであってますか!
ふむふむ分かりました、早速その線で考えたいと思います。
ありがとうでした。
他にも意見があったらお願いします。
916デフォルトの名無しさん:02/04/02 09:18
>>882 それは何の言語ですか? と思わず聞きたくなるようなコードですな アゲ
メールの特定のヘッダ (From:) に特定の文字列 (戸田) が含まれていたら、
まるでそれが存在しないかのように扱うようにしたいんですが、こういう場合
はメールソフトが違うと同じ方法ではダメですよね?

どうしたらいいでしょう?
>>917
全体的に文意がワケワカメなのでリテイク!
>>917
普通のメーラなら振り分けとかあるでしょ。
振り分けすらも無いメーラは使わなければいい。
それか、どうやっているかは分からんが、ノートンウンチウィルス2002は
メールの送受信を横取りしてウィルスのチェックをしている。
それと同じことをやればいいんじゃないのかな。
920戸田:02/04/04 01:34
何をやっても無駄さ
921りんね:02/04/04 01:56
今度新曲出ます。
>>917
POP3でヘッダの送信元見て削除できませんか?
過去ログからPOP3、ヘッダで検索してみてください。

外していたらゴメンなさい。m(_~_)m

---- (^_^)(^_^)(^_^) THE REAL PROGRAMMER (^_^)(^_^)(^_^) ----
At the beach, The Real Programmer is the one drawing flowcharts in the sand.
戸田 英夫 mailto:[email protected];[email protected]
>>922
不覚にもワロタ
しかし署名の丸ごとコピペはいかがなものか。
[Delphi:66072]
こんにちは、宮本です。

なお、高岡さんの言われているコンポーネントは、
別途にインストールが必要ですので、難しいでしょう。
これらのコンポーネントは、世界中のプログラマが
無償で開発している、プログラミング支援の一環です。

[Delphi:66177]
こんにちは、宮本です。

!! さすが中村さん、しかし、コンポーネント化
までするとは... (^^
Anan さん、良かったですね。

--
setup.exe をダブルクリックするだけでインストールできるコンポーネントを
紹介した場合は、「難しい」からダメで、自分でユニットの生成からインストー
ルまでしないといけない上に、低機能で誰もまだテストすらしてないコンポー
ネントを中村が書いたら「良かった」になるとはすごいね。



ところでオチスレはどうなったのよ?
>>922
2ちゃんねるにメールアドレスを
晒しちゃまずいんじゃ・・・。
スパムとかウィルスとか届かなきゃいいけど。
>>923
当人では?
>>926
あれが本人だったら名前を名無しじゃなくて、
実名にして欲しかったなとか思ったり。
928Delフサギコ ◆zE1iiRdQ :02/04/04 12:50
  ,,,,,,,,,,,,,,,,∧,,∧ 
〜′,,,,,,,,,,ミ,,゚Д゚彡
  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って右クリックでキャンセルできないから嫌いだ。
>>936
VBやれば。
938デフォルトの名無しさん:02/04/05 00:24
VCLのD&Dで、メッセージを受け取っているウィンドウハンドルを取得できますか?
>>938
VBやれって。
940デフォルトの名無しさん:02/04/05 01:03
あの腐れたD&Dは客先からクレームが来るから、うちもOLE使ってるな。
なんで、あんな実装にしたのだろう。
941デフォルトの名無しさん:02/04/05 01:05
>>940
VBやれってばよ!
942デフォルトの名無しさん:02/04/05 01:09
Delphiにケチをつけるやつはこのスレから消えろ!
>>942
VBやれ!
944デフォルトの名無しさん:02/04/05 01:10
>>943
VBやれ!
Vaka Bakkashi
>>938
TWinControl(Source).Handle
947?:02/04/05 02:21
DragHandleでいけそうです。
そろそろ次スレの季節でス
       v
      (゚ω゚) <そろそろ出番だな
     /(  )\        
      /'\
>>936
単にチミのスキルが足りないだけ(プ
951ネタじゃないのよ:02/04/06 14:28
Delphi2の頃にちょこっとだけいじっててver6がただで使えるので遊ぼうと思っていたのだけど
新規フォームにボタンを一個だけ配置してButton1Clickに
Close;
と書いただけなのに終了しなくなっちゃった。
昔はこれでプログラムが終了したんだけど今は何か余計な事を書かないといけなくなっちゃったの?
[エラー] Unit1.pas(30): 文が必要な場所に 'TButton' 型の式があります
と言われても昔はこのコードで通ったから良く分かんないっす。

誰かアドバイスください。
952デフォルトの名無しさん:02/04/06 14:50
>>951
1から勉強し直してください。
953デフォルトの名無しさん:02/04/06 14:55
>>951
ここは性格異常者の隔離スレだから、こっちへ行きなさい。
http://pc.2ch.net/test/read.cgi/tech/1017803412/l50
954ネタじゃないのよ:02/04/06 14:55
>>952
そんなこと言わんと教えてください。おながいします。
955ネタじゃないのよ:02/04/06 14:57
>>953
ありがとう。逝ってきます。
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の処理
ってのはどのようにすればいいのでしょか?
959958:02/04/06 22:14
補足説明
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文を並べれば出来ないこともないのですが、もっと
スマートな方法があるだろうと思いまして。
>>963
TDateTimeじゃ駄目ですか?
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
{
}
968961:02/04/07 01:43
今までなにも考えずにネストしてました…
969Delフサギコ ◆zE1iiRdQ :02/04/07 01:46
         _________
  ∧,,∧   / 
 ミ;゚Д゚彡<  つくってみたけど
  ミ つI)  \ 
〜ミ  ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  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 = "外";

です。
971970:02/04/07 03:05
暇なので勉強も兼ねて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;
972Delフサギコ ◆zE1iiRdQ :02/04/07 03:18
   ∧,,∧∩  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < こうですね!
   U  ミ   \____________
 @ミ  ミ
   ∪''∪

  if (CompareTime(StartTime, Time) = LessThanValue)
   and (CompareTime(Time, EndTime) = LessThanValue) then

そっかそっか。LessとかGreaterとかいうとついわけわかですね

MyCompareTime(StartTime , '<', Time)
とかで比較できたらいいかも。

あ。それって
TimeOf(StartTime) < TimeOf(Time) ってやればいいのか。

ちょっと勉強にナタ。ありがとうです>>970さん
973970:02/04/07 03:52
Delphiのコードの間違い探しをしたり、自分で書いてみたりして
私も今日はいい勉強になりました。
974970:02/04/07 04:11
>>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
とか表示されるんだけどこれって回避する方法ある?
例外出るとワケワカメなヤツ探しにいくヤツだろ?
パッチあてると治るらしいぜ。
オレはパソナルだから面倒でそのままだけど(ワラ
982名無し~3.EXE:02/04/08 04:14
Ent版を買って[プロジェクトオプション]-[コンパイラ]-[デバッグ用DCUを使う]に
チェックを入れる。
983ageだ:02/04/08 05:19
ageだ
新スレ立てますた

Delphi相談室その4
http://pc.2ch.net/test/read.cgi/tech/1018211735/l50
新スレ移行のついでに埋め立て協力カキコ
埋め。
埋め埋め。
 梅
埋め埋め埋め
990!
ume
 992!
       v
      (゚ω゚) <それそれ出番だな
     /(  )\        
      /'\
 埋め埋め埋め埋め
静かだ・・・
       v
     <(゚ω゚) <うっ!
      (  )\        
      /'>
       v
      (゚ω゚)> <はっ!
     /(  )        
       <'\
       v
     <(゚ω゚)> <うっ!
      (  )        
      /'>
       v
      (゚ω゚)/ <はっ!
     /(  )        
       <'\
10001000:02/04/08 15:56
     v       w
    (゚ω゚)/ \(゚δ゚)<ジーンギスカーン!
   /(  )    (  )ゝ
     <'\    / >
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。