トップページ⇒tech
1001コメント331KB

Delphi相談室(中級者以上)その12

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
Delphiに関する中級以上の技術相談室です。
初心者は「くだすれDelphi(超初心者向け)」へどうぞ。
0002デフォルトの名無しさんNGNG
過去ログ
ミ,,゚Д゚彡フサギコとモナーのDelphi質問相談談話室2
http://pc2.2ch.net/test/read.cgi/tech/1061142216/
ミ,,゚Д゚彡フサギコとモナーのDelphi質問相談談話室
http://pc2.2ch.net/test/read.cgi/tech/1052312038/
ミ,,゚Д゚彡フサギコのフサフサDelphi相談室�H
http://pc2.2ch.net/test/read.cgi/tech/1045813143/
Delphi相談室その8
http://pc2.2ch.net/tech/kako/1037/10371/1037146781.html
Delphi相談室その7
http://pc3.2ch.net/tech/kako/1032/10325/1032576325.html
Delphi相談室その6
http://pc3.2ch.net/tech/kako/1028/10284/1028436692.html
Delphi相談室その5
http://pc3.2ch.net/tech/kako/1022/10229/1022921598.html
Delphi相談室その4
http://pc.2ch.net/tech/kako/1018/10182/1018211735.html
Delphi相談室その3
http://pc.2ch.net/tech/kako/1010/10101/1010153466.html
Delphi相談室その2
http://pc.2ch.net/tech/kako/995/995950803.html
Delphi相談室
http://piza.2ch.net/tech/kako/971/971261573.html
0003デフォルトの名無しさんNGNG
●関連ページ

Borland Japan Delphi
http://www.borland.co.jp/delphi/
Borland Delphi 6 Personal ダウンロード
http://www.borland.co.jp/delphi/personal/
Delphiマガジン
http://dmj.psnet.ne.jp/
DelWiki
http://onigiri.s3.xrea.com:8080/delphi/
0004デフォルトの名無しさんNGNG
ミ,,゚Д゚彡フサギコとモナーのDelphi質問相談談話室
http://pc2.2ch.net/test/read.cgi/tech/1052312038/
ミ,,゚Д゚彡フサギコのフサフサDelphi相談室�H
http://pc2.2ch.net/test/read.cgi/tech/1045813143/
Delphi相談室その8
http://pc2.2ch.net/tech/kako/1037/10371/1037146781.html
Delphi相談室その7
http://pc3.2ch.net/tech/kako/1032/10325/1032576325.html
Delphi相談室その6
http://pc3.2ch.net/tech/kako/1028/10284/1028436692.html
0005デフォルトの名無しさんNGNG
●関連ページ

Borland Japan Delphi
http://www.borland.co.jp/delphi/
Borland Delphi 6 Personal ダウンロード
http://www.borland.co.jp/delphi/personal/
0006デフォルトの名無しさんNGNG
>>4-5
同じの貼るなよ
0007デフォルトの名無しさんNGNG
TComboBox,TListBox,TToolBar,TListView にバッファオーバーフロー
ttp://memo.st.ryukoku.ac.jp/archive/200309.month/6508.html
0008デフォルトの名無しさんNGNG
> かちゅーしゃとかのDelphi製2chブラウザで板一覧取得してListViewに表示する処理で
> サーバクラックして不正な文字列埋め込んだりすると危険かもね。

十分外部から引き起こすことが出来るバグです。

0009デフォルトの名無しさんNGNG
>ついでに言っておくが、実行コードを走らせるには実行可能フラグの設定されたメモリ領域ではならない。
>通常のヒープやスタックは実行不可。さらにオーバーフローされたとしても大抵は
>隣接する関係のないデータが書き換わるかAVが発生してあぼーんして終わり。


Windowsアプリケーションソフトウェアにおけるバッファオーバーフローの危険性
http://www.shadowpenguin.org/sc_documents/spsdocument21.pdf
> 5. スタック上に置かれたコードの実行
> カーネルにより割り付けられたスタック領域は、読み
> 書き可能であると同時に実行可能です。つまり、スタック
> 上にコードを置き、EIPを適切に移すことができれば、置
> かれたコードは問題なく動作します

釈明ま〜だ〜?
0010デフォルトの名無しさんNGNG
GetSearchString使わなければいいじゃん。
というより かちゅーしゃ 使ってるの?このメソッド。
大体そんな長い板名設定できないんじゃないかな?
起こせないじゃん。よく考えてからほざけよヴァカ!
0011デフォルトの名無しさんNGNG
キタキタキタキタキタ━━━ (゚∀゚≡(゚∀゚≡゚∀゚)≡゚∀゚) ━━━━!!!!!!!!!!

379 名前:****緊急**** 投稿日:03/09/25 01:18 ID:AitgqY+Y
開発ツールDelphiで作成されたアプリケーションに深刻なセキュリティーホールが発見されました。

TComboBox,TListBox,TToolBar,TListView にバッファオーバーフロー
http://memo.st.ryukoku.ac.jp/archive/200309.month/6508.html

同じ会社から販売され上記コンポーネントを使用している開発ツールC++Builderで開発されたWinny2にも
同種のセキュリティーホールが存在する可能性はきわめて高いです。
特にTListView(データを一覧表示するコンポーネント)のセキュリティーホールを利用することで
ファイル一覧を表示するだけでネットワークからダウンロードされた
任意のコードが強制的に実行されてしまう危険性があります。
# たとえばバッファを溢れさせるほど非常に長いファイル名の後ろにコードを埋め込むなど。

具体的な方法はまだ見つかっていませんが、おそらくは時間の問題です。
作者の安全宣言がでるまでは使用を控えるなどの自衛手段をとることを強く推奨します。


380 名前:[名無し]さん(bin+cue).rar 投稿日:03/09/25 01:29 ID:pFLFxdHr
がくがくぶるぶる((((((
0012デフォルトの名無しさんNGNG
>>10
> というより かちゅーしゃ 使ってるの?このメソッド。

> 大体そんな長い板名設定できないんじゃないかな?

何も知らないくせに勝手に結論出すな。ヴォケ。ヴァカはお前だ。ヴォケ。
0013デフォルトの名無しさんNGNG
■はじめたばっかな人はこちら
くだすれDelphi(超初心者向け) Part6
http://pc2.2ch.net/test/read.cgi/tech/1063202727/
■.NETの話題はこちら(現Delphiはまだ.NET未対応のため)
ミ,,゚Д゚彡フサギコのフサフサ.NET談話室
http://pc2.2ch.net/test/read.cgi/tech/1033489735/
■VCLを使わないプログラムはこちら
Delphiで小さな実行ファイルを作ろう
http://pc2.2ch.net/test/read.cgi/tech/1009080085/
■C++Builder
C++Builder相談室 Part7
http://pc2.2ch.net/test/read.cgi/tech/1061594556/
■Kylix
Kylix3
http://pc2.2ch.net/test/read.cgi/tech/1030031001/
■Delphi以外のPascal処理系
Pascal の初心者用の質問・相談所
http://pc2.2ch.net/test/read.cgi/tech/1009903617/
■VBの名前を出したければこっちでやれ
VB vs Delphi @夏厨2003
http://pc2.2ch.net/test/read.cgi/tech/1060779022/
■技術的でない話題はこちら
Delphi談話室
http://pc.2ch.net/test/read.cgi/prog/1064399807/

ちょっと遅れたけど関連スレ、こんなもんでいい?
0014デフォルトの名無しさんNGNG
上級者スレたてなきゃ。
0015デフォルトの名無しさんNGNG
>>9
EIP移せないし。
0016デフォルトの名無しさんNGNG
>>15
バッファオーバーフロー利用して移すのですよ。
0017デフォルトの名無しさんNGNG
>>16
それはできないって。
できるなら、今回の件での方法を提示してみな。
0018デフォルトの名無しさんNGNG
>>17
>>9を読みましたか?
出来ないって言っている奴はスタック上のコードが実行できないと
勘違いしていた奴なのであてになりません。
0019デフォルトの名無しさんNGNG
できる
asm
mov EAX, ESP
jmp EAX
end;

しかし、今回の件では行えない訳だが。
0020デフォルトの名無しさんNGNG
>19
なんで?
溢れないから?それとも溢れても行えない?
0021デフォルトの名無しさんNGNG
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その10
http://pc2.2ch.net/test/read.cgi/tech/1064423473/
0022デフォルトの名無しさんNGNG
しかしVCLってarray [0..xxx] of byte/charの嵐だな。
他にもありそうな悪寒。
0023デフォルトの名無しさんNGNG
>>20
取得元はウィンドウだし、ウィンドウはnull終端で終わる文字列として保持しているから0が入る命令は書けない。
元ネタに戻るがバグを含むVCL側のコードを実行する機会がなければ、ハグが発生する機会さえないわけで。
報告された問題は内部で意図的に作り出さないと起きない問題なため通常は発生しない。
0024デフォルトの名無しさんNGNG
ネット越しの汚い文字列を取り込まず攻撃コードに0x00が含まれず
わりと新しい環境でビルドされ(そういえばかちゅはDel6以前だったよな)等々・・・の
条件をクリアしてれば通常は安全といえばそりゃ安全と言い張っても構わないけどさ(藁
0025デフォルトの名無しさんNGNG
微妙に表現が違うぞ。全部orで、どれかひとつでも満たされれば安全だ。
ListViewに至っては、加えてユーザーの操作(頭文字のキーを押しての検索)かつ、
標準の検索動作をわざわざ変えている、かつ、その時GetSearchString使用、かつ、
「ユーザーが入力したキーが」1024文字を超えて悪意のあるコードにならないといけない。

そもそもListView標準の検索動作に手を加えてるプログラムすらサンプル以外では見たことないしね
0026デフォルトの名無しさんNGNG
実は、Iniファイルの読み出しも2048文字に制限されてたりするので実際につくのは難しいかもね。
0027デフォルトの名無しさんNGNG
>>24-25 の条件を満たした場合に
このバグを実際に利用するには
バッファをオーバさせ(オーバさせた領域はスタック)リターンアドレスを書き換えて乗っ取るわけだけど
リターンアドレスはダイレクトアドレスでなければいけない。
他のパソコンで実行されるプログラムが同じアドレスに配置される可能性は低いので、これは乗っ取る側
が何度かアドレスを変更しトライする必要があり、その間に暴走・異常終了してしまう可能性大。
もし利用されても、他の手段ほど危険な状態にはならないだろう。
002827NGNG
>>27は 実行コード側に利用出来るコードが含まれている場合だけど、
それが無い場合はバッファオーバランを利用してそこにコードを書かなければいけない。
そうなると、スタックアドレスはアプリの状況により刻々変化するので余計に難しいように思う
0029デフォルトの名無しさんNGNG
ゆえにバッファオーバーフローは一般に危険ではないと。
0030デフォルトの名無しさんNGNG
バッファオーバーランは
1、API等のOSの機能
2、ネットワークに接続し、不特定の相手からデータを受信する
の場合に悪用されえる。

通常のアプリでもこれが起きれば誤動作、異常終了の原因となりえるので根絶すべきなのは当然だと思うが
0031デフォルトの名無しさんNGNG
> 他のパソコンで実行されるプログラムが同じアドレスに配置される可能性は低いので、
間違い。高い。仮想メモリを採用しているため、
物理的には異なっても論理的に
同じアドレスに配置される可能性が高い。
そんなことも知らないの?
0032デフォルトの名無しさんNGNG
> そうなると、スタックアドレスはアプリの状況により刻々変化するので余計に難しいように思う
どう変化しようが、変わるのはスタックの一番底なので
ある時点でのスタックアドレス=スタックの上(すぐに取り出す部分)は変わりません。
0033デフォルトの名無しさんNGNG
> 1、API等のOSの機能
関係ない

> 2、ネットワークに接続し、不特定の相手からデータを受信する
ネットワークに接続する必要はない。
0034デフォルトの名無しさんNGNG
>>30-33
スレ違いです。

Delphiではネットワークで通信するようなアプリケーションは開発しないし
そもそもセキュリティーホールを狙われるほど広く普及したDelphi製のアプリケーションなどありません。
つまりこの問題は修正をしてもしなくても発生しないのです。断固セキュアなのです。

そこまでしてDelphiを貶めるのには何かわけがあるんですか?
もしかして滅びつつあるVBユーザーですか?
それとも予定ほどには普及していないまたGUIの貧弱なC#ユーザーですか?
我々の問題は我々自身で解決するので(そもそも問題自体が無効なのですが)これ以上スレを荒らさないでください。

これ以上続けるようなら管理者に連絡してアクセス禁止等の処置を取りますよ。
0035デフォルトの名無しさんNGNG
>>34
ボーランド社員必死だな(w
0036デフォルトの名無しさんNGNG
Delphi相談室(上級者以上)スレを作って
そこで話したほうがいいんじゃね?
明らかに技術不足な奴がいるよ。
27とか30とか
0037デフォルトの名無しさんNGNG
>>31
へえ
procedure hoge;begin end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Caption := Format('%p',[@hoge]);
end;

試してみたよ。 ホントだ。 

>>32
でも、その場合、相対では指定出来ないでしょ。
0038デフォルトの名無しさんNGNG
>>37
まあ読め
http://linux.ascii24.com/linux/linuxcom/2000/06/13/465216-000.html
0039デフォルトの名無しさんNGNG
いまだに暫定パッチすら出ていないということはBorlandの危機意識の低さを表しているよな。
まぁ信者がリスクを全部自分で負うから問題ないって言ってんだから問題ないんだろ。
0040デフォルトの名無しさんNGNG
>>38
やはりスタックの位置がわからないとダメみたいだね。

でも
procedure TForm1.Button1Click(Sender: TObject);
var test:integer;
begin
Caption := Format('%p',[@test]);
end;
として試してみると、やはり必ず同じアドレスになるようだ。
よって、スタックの位置が必ずわかっているのと同じだね。
0041デフォルトの名無しさんNGNG
という事で、想定しないバッファオーバラン対策として

.dpr の先頭で

var reg:Integer;
begin
reg:= GetTickCount and $FF0;
asm sub ESP,reg end ;

のようにするアイデアが浮かんだよ。 これでスタックを強制的にランダムに動かせるから
アタックが成功する率を 1/256 に出来る。
0042デフォルトの名無しさんNGNG
バカか
0043デフォルトの名無しさんNGNG
>>41 じゃオールアセンブラで
procedure muddleSP;
asm
  call GetTickCount
  mov edx,[esp]
  and eax,$00000ff0
  sub esp,eax
  jmp edx
end;
0044デフォルトの名無しさんNGNG
どこがオールだ
0045デフォルトの名無しさんNGNG
>>44
GetTickCount  の部分も手続きに入れた所が
0046デフォルトの名無しさんNGNG
Del厨にとってはアセンブラ=埋め込み言語としか知らないのさ。
0047デフォルトの名無しさんNGNG
あとは、プログラムの配置アドレスを毎回動的に変更出来ればいいのだが・・・
スタテックリンクのDLLのサイズで配置アドレスって変わらないかな?
もし変わるなら、実行終了時に別のプログラムを起動して、変更するとか可能なのだけど
0048デフォルトの名無しさんNGNG
興味を持つのは構わないけど思いつきで物言ってないで
ちょっとは既存の対策方法をあさってみたら?
0049デフォルトの名無しさんNGNG
>>48
検索したら既存の対策方法も同じ感じだね。
・ 毎回ロードアドレスを変更する
・ スタックのベースアドレスも毎回変更する

既に巨大システムになったアプリケーション全てのバッファオーバラン対策を行うコストよりこっちが少ないからだってさ。
0050デフォルトの名無しさんNGNG
前スレで言ったけど、バグが起きる機能使わないだけでいいんだって。
普通に使えば遭遇しないって何回言ったらわかるの?
起きないものに対して対策して楽しいですか?
0051デフォルトの名無しさんNGNG
ああ、スタックポインタを256*16バイト程度動かすだけなら
16バイトごとに同じコードを配置したら抜けられてしまうね。

もっと大きく動かさないとあんまり効果ないか。
0052デフォルトの名無しさんNGNG
>>50
まあね。 今回のVCLの不具合はまあ大した事はないけど、
つい自分でも同じような事やっちゃう場合もあるでしょ。

そんな時の安全策は無いかと思ってさ
0053デフォルトの名無しさんNGNG
>>50
>ついでに言っておくが、実行コードを走らせるには実行可能フラグの設定されたメモリ領域ではならない。
>通常のヒープやスタックは実行不可。さらにオーバーフローされたとしても大抵は
>隣接する関係のないデータが書き換わるかAVが発生してあぼーんして終わり。


Windowsアプリケーションソフトウェアにおけるバッファオーバーフローの危険性
http://www.shadowpenguin.org/sc_documents/spsdocument21.pdf
> 5. スタック上に置かれたコードの実行
> カーネルにより割り付けられたスタック領域は、読み
> 書き可能であると同時に実行可能です。つまり、スタック
> 上にコードを置き、EIPを適切に移すことができれば、置
> かれたコードは問題なく動作します

釈明ま〜だ〜?
0054デフォルトの名無しさんNGNG
釈明ってなんのさ? このスレ全部読めば?(プ
0055デフォルトの名無しさんNGNG
>>51
スタックをもっと大きく動かすと勿体無いお化けが出そうだから
別スレッドをランダムな個数作ってからそのスレッドをメインスレッドにするというのはどうだろか?
0056ななしへたぐらま ◆XcB18Bks.Y NGNG
>>38
なるほど,『バッファオーバーフロー』の意味がよくわかりました.ありがとう.
0057デフォルトの名無しさんNGNG
Application.Run 内で1回メッセージループが回る都度 スタックをシャッフルするとかは意味あるかな?
0058デフォルトの名無しさんNGNG
初心者はカエレ
0059デフォルトの名無しさんNGNG
こっちに引越しする。

リターンアドレスはスタックに入ってるだろ。4バイトだがどうしても上位に0が入ってしまう。
Windowコントロールの仕様上文字列はnullで終わるので、メッセージ投げて取得しに行った時には既に0以降読み込めない。
また他のスタックデータも設定する場合もこの0問題があるので、正しくハックすることは不可能。

昨日も同じこと書いたぞ。

あとなToolbarとListViewは内部でDQN操作しない限り発生しないからバグはユーザー(作る人)の責任だぞ。
ライブラリのメンテナンスに期待しても無駄。自分で対処するのがプロってもんだろ。なんのためのソースだい?
0060デフォルトの名無しさんNGNG
>>59
そんなことで誤魔化そうってのか(綰听邵
Del厨必死だな(綰听邵
0061デフォルトの名無しさんNGNG
>>59
試してみた。 Win2K では スタック領域はコード領域より前にくるようだ。
コードは$400000番地代 よって、スタック領域は必ず上位は 00 になるのは間違いない。

ただし、上位が00という事は 丁度リターンアドレスの最上位でデータ列を終わらせれば不可能ではない。
コード部をその前の4096バイトの部分におけば良いからだ。
0062デフォルトの名無しさんNGNG
>>59
数多のクラックコードは当然'\0'を避けたコードを書いているんだけどな。
0使う命令には体外代替命令があるしデータの0なんて演算でいくらでも作り出せる。
0063デフォルトの名無しさんNGNG
>>60
どのあたりが必死なのか具体的に説明してくれませんか?
0064デフォルトの名無しさんNGNG
>>62
だから、命令の事じゃなくて、コードの流れを自分のコードに持ってくる為の最初の1ステップである
リターンアドレスを変更する為のデータが置けないと言ってるのだろう。

もちろん、たった一つだけなら0を置くことは出来る
0065デフォルトの名無しさんNGNG
>>61
ソースコード嫁

>>62
そんなことを言うのならば今回のケースで実際に動くコードを書いてみろ
0066デフォルトの名無しさんNGNG
>>65
言いたい事は、たぶん
4096バイトもスタックに取る場合は スタックフレームも作られるだろうから
帰り番地の前にスタックフレームもちゃんと書いてやらなければならないという事かな?
そうすると2つの#00を置くことは出来ないから帰り番地を書き換えられないと


0067デフォルトの名無しさんNGNG
俺を含めて4人だけかよ!
0068デフォルトの名無しさんNGNG
function TComboBoxStrings.Get (Self: TComboBoxStrings;
var result Result: System.AnsiString; Text: array[$0..$FFF] of System.Char; Len: System.Integer;
begin
| PUSH EBX
| PUSH ESI
| PUSH EDI
| ADD ESP,$FFFFF004
| PUSH EAX
| MOV EDI,ECX   | MOV ESI,EDX
| MOV EBX,EAX   | MOV EAX,ESP
| PUSH EAX    | PUSH ESI
| PUSH $00000148
| MOV EAX,DWORD PTR [EBX+12]
| CALL TWinControl.GetHandle{0xF0}
| PUSH EAX
| CALL SendMessage{0x190}
| CMP EAX,-1
| JNE +2; (0x2E)
| XOR EAX,EAX
| MOV EDX,ESP
| MOV ECX,EDI
| XCHG EAX,ECX
| CALL @LStrFromPCharLen{0x2B6}
| ADD ESP,$00001000
| POP EDI
| POP ESI
| POP EBX
| RET NEAR
end;

0069デフォルトの名無しさんNGNG
>>68
初心者はカエレ
ttp://pc2.2ch.net/test/read.cgi/tech/1063202727/
0070デフォルトの名無しさんNGNG
>>68 は >>66への反証だ。

つまり、スタックフレーム(EBP)は作られていない。
よって、もしも何らかの方法で任意の文字列を置けるならば、
攻撃者がリターンアドレスをスタックフレーム内に書き換える事は可能。
0071デフォルトの名無しさんNGNG
結局、CALLでのSPが$123456 だとしたら
4096+3*4 バイトの後に #$56#$34#$12#00 というデータを作り
この文字列の先頭からウイルスプログラムを書けばいいという事だね。

こういう攻撃法に対しては >>41 >>43 もある程度は有効。
ただし、>>51 の方法で回避されるから、もう少し大きめ と4byte単位で
0072デフォルトの名無しさんNGNG
俺Delphi7使いだから関係ねーし
0073デフォルトの名無しさんNGNG
.dpr じゃなく ユニットのinitialization 節でやる方法はないかな?
それが出来ればダミーコンポをポトペタしてもらえば解決するというふうにできるのだけど。
0074デフォルトの名無しさんNGNG
この瞬間Del厨の間に非本質的で小手先なバッファオーバーフロー対応が広がろうとしています!!
0075デフォルトの名無しさんNGNG
>>74
いいじゃないか

暴走原因としてのバッファオーバフローはデバッグして取るべきものだけど
それでも残る事はあるさ、その場合でも攻撃者に利用し辛くしておくことには意味はある。

今回の件は、そもそもセキュリティネタに入れるのはどうかと思うようなことだけどね。
0076デフォルトの名無しさんNGNG
75 = 荒らし本人
0077デフォルトの名無しさんNGNG
はせがわの謝罪まだー
0078デフォルトの名無しさんNGNG
結局誰もセキュリティを破ることは出来ないってわけね。
0079デフォルトの名無しさんNGNG
なんだかんだいってもDel厨って放置できないからマヌケだよね。(w
0080デフォルトの名無しさんNGNG
>>41 >>43 を使う場合は、.dprの中で実行して end の前に元に戻すようにしないとダメなんじゃない?・・・・

と思ったら、end の所で RETは実行されないのか・初めて知ったよ。
0081デフォルトの名無しさんNGNG
>63
そんなVB厨はスルーがイチバン
0082デフォルトの名無しさんNGNG
http://memo.st.ryukoku.ac.jp/archive/200309.month/6508.html

Delphiにはとんでもないセキュリティホールが隠されていたそうです。
Del厨はこんなものをマンセーしていたのかよw
やはりネイティブコードは駆逐されるべきだな。
0083デフォルトの名無しさんNGNG
>>73
.dpr の begin の前に @InitExe という隠れた手続き中で initializationは呼ばれ
initialization は ret で終わり、その後 pop /retが何度かある
という事で、 initialization 中ではスタックを変更するのは無理。

initialization 中で InitProc を設定して
Application.Initialize; でやる方法もあるけど
そうすると、 InitProc は他のユニットからもリンクチェイン式に使われるので難しいかもね

やるとすれば initialization 中に@InitExe の ret の帰り番地を書き換えて
パッチをあてる方法だけど、こういうコードがexeに入っていると、逆に攻撃者にこれを
利用されてしまうような気がする・・・大丈夫かな?
0084デフォルトの名無しさんNGNG
そんな細工しなくても、VCL コードを直せばすむと思うんですが。
0085デフォルトの名無しさんNGNG
>>84
いや >>82 の問題じゃなくて、オーバラン一般の対策としての話ね。
0086デフォルトの名無しさんNGNG
オーバーラン対策は、オーバーランしない用にコードを書くこと。
あたりまえなんだけど、これが一番。

Linux 系で、ライブラリ/メモリマネージャに手を入れてオーバーランを検出できるように
したものがあるけどね。
0087デフォルトの名無しさんNGNG
>>86
まあそうなんだけど、今回の騒ぎのように、使ったライブラリに入ってしまった場合とか
テストコードのつもりで書いたのがデグレで混入してしまったり、
5万行くらい書いてると、完璧だって言い切るのは難しくなるでしょ?

まあ、GUIアプリだと CUIのようにGCIから呼ばれて使われるという事もないから、
ネットワークとの入出力の部分だけに限ってチェックすればいいとは思うけど
0088デフォルトの名無しさんNGNG
>>87
でも片手落ちだと思うよ。

1、確かにスタック上の任意のコードを走らせる確率は減るけどゼロではない。
 まあ、失敗したら例外で落ちるだろうから大多数は攻撃に気づくだろうけど、ゼロでない事は重要。

2、スタック上の任意コードはガード出来たとしても、プログラム領域はガード出来ない。
 任意のコードは書けないが、普段とおらない筈の部分をいくらでも呼び出せる。
 たとえば、個人情報を吸い出されたり、パスワードを解除するような部分を呼び出してパスワードを解除したり、
 コード上にある全ての機能を呼び出せてしまう。

と、書くと今度はコード領域もシャッフルすると言い出すんだろうな。
まあそれも有効な方法だから否定はしないけど。


0089デフォルトの名無しさんNGNG
ライブラリに問題があったら直す。自分のコードに問題があったら直す。
ってことだとおもうんだけど。

スタックオーバーフローに関してならスタックにバッファを取らない。と規定すればよし。
String / Dynamic Array を使えばほとんどのコードはそのまま使える。

88 さんの #1 も #2 も非現実的な話。
0090デフォルトの名無しさんNGNG
>テストコードのつもりで書いたのがデグレで混入してしまったり、
>5万行くらい書いてると、完璧だって言い切るのは難しくなるでしょ?

それを言い始めたら「プログラムが正しいことの証明」ってことになって不可能。
できるだけおきないようにする。とか、おきたら検出できるようにする。
ってするしか。

C/C++ では、歴史的に文字列バッファをスタック上の Char 配列でとるコードが使われており、
それを長さチェックなしで操作しているコードが多くあったので問題が出た。

Delphi だと文字列型はヒープだし、範囲チェックを ON にすれば配列オーバーランも実行時検出できる。

実際のところ、C# / Java でも「不正メモリアクセスを検出」することができるだけで、それはうまく使えば
DOS (サービス不能攻撃) を起こすことができるわけで、そこまで行ったらやはりアプリ側での対応の問題となるでしょ。


0091デフォルトの名無しさんNGNG
まあ、ヒープであっても PCHAR( 文字型 ) を使うと、常にバッファオーバランの可能性はあるわけで・・・・
範囲チェックをONしても 配列を外部DLLに渡すような場合まではチェックしてくれないし・・・・

ただ、ヒープだとアプリの状態によって、オーバランしたときにどこを壊すかというのが変わってくるから攻撃は難しいか。
0092デフォルトの名無しさんNGNG
>>90
いや、だから、そういう注意を優先項目の一つとしておざなりにすべきではないと思うし、
現在は自分だって注意してコーデングしてるつもりだよ。
しかし、長年使ってると、自作したライブラリはとても大きいし、貰ってきたライブラリも多数あるって事でさ、


おきてしまったときに、攻撃し難くしておこうというのが、スタックスクランブルの手法で、
この為に支払うコストは僅かなスタック上のゴミだけで、実行には何の影響もない。

僅かなコストを支払って、大きなメリットがあるのだから、入れて問題は無いと思うのだが?
0093デフォルトの名無しさんNGNG
いや自分でやる分には反対はしないけどね。
ただ、 initialization であんまりお手軽に対策出来るようにすると
初心者が何も考えずに、これでOKってなりゃしないかなと。
0094デフォルトの名無しさんNGNG
>>88 の追加

3、データ領域にもコードを置いて実行させる事が出来る。
 文字列の場合、元と同じサイズまでなら同じアドレスに配置されるので、文字列にコードを埋め込んでおいて
 そのアドレスに分岐することも出来る。 


その検証コード
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
type TGetSP=function:Integer;
begin
 s:='XPテ';
 caption:=IntToHex(TGetSP(PChar(s)),4);
end;

これで 文字列中の XPテ を実行してかえってくる

X: POP EAX
P: PUSH EAX
テ: RET
0095デフォルトの名無しさんNGNG
簡単にわずかでもリスクを減らす。ってのなら否定はしない。
「大きなメリット」かどうかには疑問があるが。
その方向でちょっと研究/まとめてみたら? 

bdn に投稿すればお金ももらえるし。
0096デフォルトの名無しさんNGNG
>>94
のように、データ領域を使って任意コードが実行出来るとなると
ここに数バイトのコードさえ置けるなら、これを使ってSP相対で分岐されてしまい
スタックをシャッフルするという対策は意味のないものになってしまう。

結論として、スタックシャッフルを入れても悪い訳ではないが、それを入れて安全とは言えない。
0097デフォルトの名無しさんNGNG
話が発散してないか?
データ領域のデータに実行可能属性が付いているのは OS の問題なんだし、それをいまさら発見のように書かれても。

問題は Exploit でつつくことが可能かどうか?という点でしょ?
0098デフォルトの名無しさんNGNG
>>97
もし、ネットワークで任意データを取得するプログラムでバッファオーバランが起きた時に
事前に設定した文字列・あるいは数値が固定アドレスに配置されているなら、それと組み合わせてつつく事が可能。

文字列はネットワークデータからのデータで再配置されてしまう可能性が高いが、
文字列上の数値を利用するような場合、数値は固定番地におかれる可能性が高い。
グローバル変数でなく、クラス等使ってヒープ上にそれがあっても、そのヒープはプロセスの先頭で確保されているなら
同じアドレスとなってしまうためだ。 特に負数が設定出来るような場合は・・・
0099デフォルトの名無しさんNGNG
わかってるって。
「バッファオーバランが起きた時」には何でもできる。それをいまさら大騒ぎしなくてもいいでしょ?ってこと。
穴をつつくコードはアセンブラの知識があれば良い話し出し。

だから「オーバーランが起きないように」しましょう。ってのと、
もしおきたら、それを検出/遮断しましょう。って話をしているのでは?
0100デフォルトの名無しさんNGNG
>>99
いや、オーバランしてもスタックをスクランブルすれば効果があるというのに対して、
スタックをスクランブルしても、別の攻撃方法があるよという事。

条件:
 ・>>68のコードがあるとする
 ・データが $00789ABC に配置されてる整数型変数があるとする

攻撃者
1、整数型変数に $802464FF を設定する これは JUMP [ESP-128]相当
2、攻撃コードは 4096+3*4-128バイトからに配置
 乗っ取りコードは4096+3*4 バイトの後に #$BC#$9A#$78#00

これで、JUMP [ESP-128]が実行された後、スタックの位置に関係なく攻撃コードが実行される。
0101デフォルトの名無しさんNGNG
そろそろ Delphi 固有の話ではなくなってきていませんかね?

ライブラリへの介入でオーバーフロー問題が解決するなら Linux/MS がとっくに対応しているでしょ?
C/C++ の方が傷口が大きいのだから。

FUD したいなら別のところで。
0102デフォルトの名無しさんNGNG
>>101
LINUXの方は OS 側でもあるていど対応しようとしてるみたいだね。
1、スタック・データ・コード再配置アドレスのシャッフル
2、スタック領域の実行不可属性
3、データ領域(ヒープ)の実行不可属性

Windowsの方は何のアナウンスもないようだ。
同じようなせ制限とアドレスシャッフルは有効だと思うのだけどね

ただMSはMAC用のIEで、これと似た手法で対策を入れたらしい。
0103デフォルトの名無しさんNGNG
それと C/C++ではコンパイラ側で
スタック上、retアドレスの直前にガードデータを入れておくとか
ある程度の対応を入れてるようだ。
0104デフォルトの名無しさんNGNG
で、102, 103 で言及している方法でも完全ではない。ってこともわかっているんだよね?
0105デフォルトの名無しさんNGNG
ごめん LINUX じゃなかった OpenBSD だったよ
http://www.zdnet.co.jp/news/0304/15/ne00_openbsd.html

1、メモリの中の「スタック」(アプリケーションとそのデータを記録する構造)の常駐場所を無作為化する
2、アドレスが修正されたら検知できるように、メモリ構造の中に「カナリア」と呼ばれる小さなタグを配置
3、メインメモリを書き込み可能領域と実行可能領域に分割

という事だ
0106デフォルトの名無しさんNGNG
>>105
うん。だからもう少しその関係を勉強しなさい。
Linux にもその実装はあるの。で既存のコードとの非互換性とかがおきているの。
ソースコードレベルで再コンパイルできる UNIX でそれだから MS Windows ではちょっと
難しい。

で、どこらへんが Delphi ?
0107デフォルトの名無しさんNGNG
>>106
もともと WindowsのEXE/DLLは再配置可能モジュールで実際 NT/9xでアドレスも違ってたので
アプリの配置アドレスのシャッフルでは影響は出難いと思うよ。

で、その話のどこがDelphi?
0108デフォルトの名無しさんNGNG
結論としては、
リターンアドレスを書き換えるタイプの攻撃に対しては
 スタック領域+データ領域+ヒープ領域+コード領域の4つ同時にシャッフルしなければ意味がない。
 Windowsがソレをやってくれればいいが、そうでない以上、
  Delphi側で簡単に対応可能なのはスタック・ヒープのみ。
 他の2つは難しい。・・・・何か方法ある?
0109デフォルトの名無しさんNGNG
いや、だからそれで簡単に結論出ちゃうと、世の中に Exploit はなくなっちゃうのだよ。
Java/.NET のようにがちがちにしても、まだ穴があくんだから。

0110デフォルトの名無しさんNGNG
W2Kで>>94のコードに追加して

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
type TGetSP=function:Integer;
var OldAcc:Integer;
begin
 s:='XPテ';
  VirtualProtect(PChar(s),10,PAGE_READWRITE , @OldAcc)
 GetLastError;
 caption:=IntToHex(TGetSP(PChar(s)),8);
end;

とやったけど  例外が出ない。
Win2KではPAGE_READWRITE 属性だと実行可能なのか・・・
0111デフォルトの名無しさんNGNG
確かに 実行不可で Read/Write可能って属性をページ毎に割り振れるなら
スタックとデータ領域にそれをかければ、問題の多くは解決してしまうようにも思うな。

なんでそういう設計になってないんだろ?
0112デフォルトの名無しさんNGNG
>>111
うぅ。先人の苦労を一から踏む気か。i386 の資料を読んで頂戴。
0113デフォルトの名無しさんNGNG
そろそろもっとレベルの高い話してくれませんか?
知ってることばかりでつまらないです。
0114デフォルトの名無しさんNGNG
>>113
自分がネタふりしたらいいじゃん。
0115デフォルトの名無しさんNGNG
そういえば、何でスタックは上からなのでしょうね?
下から使えば、バッファ溢れを利用した攻撃なんて心配しなくていいような。
0116デフォルトの名無しさんNGNG
>>115
汎用CPUだとデータ領域は上からスタックを下から取れば領域を動的に目いっぱい使えるからでしょう。
DSPなんかではスタックをどっち方向に使うか切り替えられるものもありますよね。
0117デフォルトの名無しさんNGNG
>>116
ちゃんと>>115のネタに付き合ってやれよ。
「スタックは下からだよバーカ」でもいんだよ。そこからネタが広がるんじゃないか。
0118115NGNG
あ、ひょっとして上下間違えました?
仮想アドレスが32ビット00000000..ffffffffとあったら、00000000が下位…と思ってたのですが

貧弱な記憶だと、00000000から順に、OS、コード、データ、空間、スタック、の順で、
上下こんがらがってるので矢印で書くと、空間に向けて、データが→、スタックが←方向で伸びる…ですよね…

115は、仮にスタックを→方向に使えるなら、バッファオーバーフローでリターンアドレスが上書きされる
心配が無くなるのでは、という意図のつもりでした。
0119デフォルトの名無しさんNGNG
>>118
昔の人は、メモリマップを描く時に 0番地を上に書いたので 上、下というと逆の意味になる事が多いです。
上位・下位と言えばその通りになります。

上の報告だと Win2000では OS →スタック → コード →データ みたい。これは 調べてみたら? 
だから、空間を有効利用出来るという事では意味が無いですね。

バッファオーバーフローの件はその通りですね。 そこまで考えなかったのでしょう。
そこまで考えていれば i386 で読/書可能で実行不可な状態を簡単に作れるようにしてくれたでしょうし
0120デフォルトの名無しさんNGNG
調べてみました。SDK見ても、

Windows NT/2000/XP: The 2 GB partition in low memory (0x00000000 through 0x7FFFFFFF) is
available to the process, and the 2 GB partition in high memory (0x80000000 through 0xFFFFFFFF) is
reserved for the system.

としか書いてなかったので、

program MemLayout; {$APPTYPE CONSOLE} uses SysUtils;
function Stack: Cardinal;
asm mov eax, esp end;
var P: Pointer;
begin
WriteLn('コード: ', IntToHex(Cardinal(@Stack), 8));
WriteLn('データ: ', IntToHex(Cardinal(@AllocMemCount), 8));
P := HeapAlloc(GetProcessHeap, 0, 1);WriteLn('ヒープ: ', IntToHex(Cardinal(P), 8));
WriteLn('スタック: ', IntToHex(Stack, 8));
GetMem(P, 1);WriteLn('Delphiのはvirtualalloc: ', IntToHex(Cardinal(P), 8));ReadLn
end.

コード: 00408148
データ: 0040A5AC
ヒープ: 00132700
スタック: 0012FF88
Delphiのはvirtualalloc: 00C70984

結果、スタック→ヒープ→コード→データ→OS or VirtualAlloc?
0121デフォルトの名無しさんNGNG
俺は基礎知識としてCを覚えておけという主張には常々否定的だったんだが、
このスレの厨房みてるとやっぱ一度はC&UNIX&socketプログラミング
やっといたほうがいいような気がしてきたよ。
0122Delフサギコ ◆A6VzDeLphI NGNG
 キョウモ シコシコ コーデング
    ∧,,∧  ノートPC用に環境ごとに
   ミ*゚Д゚彡  ネットワーク設定を
    ミ つ旦)~~  一発切り替え
  〜と,,,~),,~)   できるソフトを
           作りたくなりました。

IPアドレス・サブネット・デフォゲ・DNS
LMHOSTS・etc....
レジストリの変更箇所は追えましたが
([Delphi-ML:15656]とか参考)

手動で変更しても、設定に反映されませんです。
ネットワークの接続先アイコンのCaptionやら
プロパティの中身やらを、自由に取得変更する方法を
どなたかご存知でしたら教えてください。

http://redmaru.hp.infoseek.co.jp/index.html
NetSet
と同じような機能のソフトを作りテー表ます
0123デフォルトの名無しさんNGNG
皆さんやっぱりソフトとか作る前には
大まかな仕様とか紙に書いたりするんですか?
0124デフォルトの名無しさんNGNG
UMLでデザインしているぜ。
0125デフォルトの名無しさんNGNG
>>122
スレ違い。
0126デフォルトの名無しさんNGNG
>>122
作者に聞けよ
0127デフォルトの名無しさんNGNG
HSPにフサギコが負けた。
0128デフォルトの名無しさんNGNG
こんばんわ、
いきなりで申し訳ないですが
キャンバスに出力する文字列も幅と高さを知るのに
CanvasのTextExtent メソッドがありますが、
Canvasを使わず幅高さを知る方法を知ってたら教えて下さい。
0129デフォルトの名無しさんNGNG
こんばんわ、
いきなりで申し訳ないですが
キャンバスに出力する文字列も幅と高さを知るのに
CanvasのTextExtent メソッドがありますが、
Canvasを使わず幅高さを知る方法を知ってたら教えて下さい。
0130デフォルトの名無しさんNGNG
こんばんわ、
いきなりで申し訳ないですが
キャンバスに出力する文字列も幅と高さを知るのに
CanvasのTextExtent メソッドがありますが、
Canvasを使わず幅高さを知る方法を知ってたら教えて下さい。
01311ミ*゚Д゚彡ファンNGNG
>>122
SHChangeNotifyで行けないかな?
Shell系の関数だから関係ないか。
0132デフォルトの名無しさんNGNG
>>128-130
内部的にキャンバスでやればいいじゃん。
つうか、何度も書くなよ。
0133デフォルトの名無しさんNGNG
>>132
内部でキャンバス作ってやったんだけどうまくいかなかったもんで・・・
やり方が悪かったかな、
0134デフォルトの名無しさんNGNG
>>132
もしよければ簡単なサンプルを教えてもらえませんか?
0135デフォルトの名無しさんNGNG
誰かお願いします。どうしてもやりたいもんで・・・
0136デフォルトの名無しさんNGNG
何度もageてゆーなっつーとろーが。
サンプルはくだすれに書くよ。(ここは中級者以上)
0137デフォルトの名無しさんNGNG
>>136
どもありがとです、
くだすれみてみます。
場違いでした、すみません。
0138デフォルトの名無しさんNGNG
だからsageを覚えてくれ。頼むから。(TT)
0139デフォルトの名無しさんNGNG
Canvas、つまりデバイスコンテキストを使わずに文字列の大きさを取得する方法は
十分中級者以上の話題では?
0140デフォルトの名無しさんNGNG
上級者だと思われ。
0141デフォルトの名無しさんNGNG
言ってることが矛盾してるな。取得しようとしている値はDC依存だろ。DC使わないで何を取得するの?
自称中級者はカエレ
0142デフォルトの名無しさんNGNG
DCって何の略?
0143デフォルトの名無しさんNGNG
0144デフォルトの名無しさんNGNG
>>142
デバイスコンテキスト
0145デフォルトの名無しさんNGNG
デジ・キャラットとか思ったそこのお前!
0146デフォルトの名無しさんNGNG
デ・ジ・キャラットなわけだが。
0147デフォルトの名無しさんNGNG
ドリームキャスト
0148デフォルトの名無しさんNGNG
>>130
http://www.google.co.jp/search?&q=GetTextExtentPoint32&lr=lang_ja
結局 ハンドルが必要になります。

0149デフォルトの名無しさんNGNG
>>130
ということは、出力さきのデバイスに依存してるっと事なんですね。
一応内部的にキャンバスを作り解決しました。
みなさんどうもありがとうでした。
0150Delフサギコ ◆A6VzDeLphI NGNG
    ∧,,∧  >>131さん
   ミ,,゚Д゚彡  どもです。
    ミ つ旦)~~
  〜と,,,~),,~)

検索してみてもなかなかうまくいきません。
VBですが、この辺を参考にしたらいいのかな?
http://www1.harenet.ne.jp/cgi-bin/cgiwrap/unaap/chtml/chtml.cgi?key=spec_netnt
0151デフォルトの名無しさんNGNG
内部的にCanvas使ってるなら、結局Canvas使ってるじゃない。
あほな質問すなや。

>>141
DCが保持しているパラメータを使ってシミュレートするんじゃない?
0152デフォルトの名無しさんNGNG
描画はしないけど情報だけほしい。ってときには CreateDC の変わりに CreateIC を
使いますが、そのことを聞きたいのでは?


たぶんちがうだろうけどね。
0153デフォルトの名無しさんNGNG
たしかにたぶん違うね。
フォント情報とセットにして解析するのはめんどくさい上、精密でない可能性もあるしね。
01541ミ*゚Д゚彡ファンNGNG
>>150
uses, ShlObj;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, nil, nil);

でレ痔ストリの内容がシステムに反映されます。
ただ、おいらはアプリの *.icoを更新しただけだから、フサ氏のやりたいことが
このコードでできるかどうかは不明。
クズレスならスマソ。
0155デフォルトの名無しさんNGNG
これだからDel厨は
0156デフォルトの名無しさんNGNG
コンポーネント作成の話題はこちらでいいでしょうか?

TGraphicControl継承のコンポーネントで 背景や枠を持たせない設定が出来るようにしようと
const clNone = TColor(-1) ; なら Polygon -> Polyline あるいは枠を描画しないようにしています。
ただ、問題は オブジェクトインスペクタでは $FFFFFFFF と表示されてしまう事です。

これを clNoneと表示させる為に、 プロパティエディタを作りました。
ところが、 TColor型の全てのプロパティが $FFFFFFFF なら clNoneとなってしまいました。r

自作コンポーネントは複数あるので、
そこで TColor型ではなくTColorNone型というのを作ってみたのですが やはり同じ結果になりました。

どうやれば上手くいくでしょう? 
0157156のコードですNGNG
interface
uses DsgnIntf, Graphics;
 const clNone = TColor(-1);
type TColorNone =TColor;
 TColorNoneProperty = class( TColorProperty)
 public
  function GetValue: string; override;
  procedure SetValue(const Value: string); override;
 end;
procedure Register;
implementation
uses Sysutils;
 const clNoneStr='clNone';
function TColorNoneProperty.GetValue: string;
begin
 if GetOrdValue = clNone then Result :=clNoneStr
 else Result := ColorToString(TColor(GetOrdValue));
end;
procedure TColorNoneProperty.SetValue(const Value: string);
begin
 if AnsiSameText(Value,clNoneStr) then SetValue('$'+IntToHex(clNone,8))
 else  inherited SetValue(Value);
end;
procedure Register;
begin RegisterPropertyEditor(TypeInfo(TColorNone), nil, '', TColorNoneProperty);
end;
0158デフォルトの名無しさんNGNG
RegisterPropertyEditor の第2、第3引数を厳密に指定してみたらどうなる?

それぞれプロパティエディタを変更したいクラスと、そのプロパティ名を指定します。
0159156NGNG
>>158
恥ずかしい・・・既に clNone という色は定義されてたのを忘れていました。

名前を変更したらいけそうです。ドロップダウン時に参照されるようなので
>>157のコードではエラーが出るようになりましたが。
0160156NGNG
というか、Delphi定義済のclNoneをそのまま使って、clNoneを使わないという意味に使っても大丈夫みたいですね。
使われてる所みても、そんな感じみたいだし。
コンポーネント作成関係ない話題になってしまいました。ごめんなさい。
0161デフォルトの名無しさんNGNG
釣れた(藁
0162デフォルトの名無しさんNGNG
IDEでコンポーネントを最初に貼り付けた時に特別な初期値を用意したいのですが可能でしょうか?

整数型の場合、単にCreateで初期化し、初期値を default で指定すればよかったのですが
double型のプロパティを 100 で初期化した場合に困ってしまいました。
double型では default が使えないのです。
その為、プロパティを0 にするとプロパティが保存されず、結果 次にロードされると100に戻ってしまう現象が起きてしまいました。
0163162NGNG
自己解決しました。

Createで
if csDesigning in ComponentState then begin
と場合別けすりゃいいだけですね・・・・・どうも思考が硬直して型に嵌ってしまったようです。
0164Delフサギコ ◆A6VzDeLphI NGNG
    ∧,,∧  どもーー、
   ミ*゚Д゚彡  ごぶたさです。
    ミ つ旦)~~
  〜と,,,~),,~)

レスサンコ>>154、フサファンさん。

進中のページを見ますと
http://www.asahi-net.or.jp/~GV4J-SGUR/narik/stp001.htm#SHChangeNotify
SHChangeNotifyについての、オプションがいろいろ変えられることがわかるのですが
いったい、どれがTCP/IP設定変更時のレジストリ更新に
有効なのか、とんと、検討もつきません。

TCP/IPの設定はレジストリ更新差分比較ツールでみたところ
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{NIC名}\Parameters\Tcpip]
このあたりにあると思ワレなのですが、

レジストリを変更してSHChangeNotifyを実行しても
うまく動かないっすね。

なんか、特殊なやり方があるように思うのですが…
どこかに情報ないかしら。
0165デフォルトの名無しさんNGNG
リバースエンジニアリング。しなさい
0166デフォルトの名無しさんNGNG
TCustomControlを継承して、付箋紙のようなウィンドウを表示するにはどうすればいいのでしょうか?
普通はTCustomFormを継承して作成するのだろうけど、いらない機能が多すぎて。。。
0167デフォルトの名無しさんNGNG
>>166
WinAPI使ってウィンドウ作れ。
0168デフォルトの名無しさんNGNG
TControl はウィンドウを持たないから...
最低限、TWinControl からはじめたら?

アプリ側で設定ダイアログを一つでも持てば TForm のコードが引きずり込まれるわけで
機能が多いからといって無駄になるわけではない。
0169デフォルトの名無しさんNGNG
TCustomControlはTWinControlからの継承だよ。

>>166
THintWindow とかのソースを参照したら?
0170166NGNG
THintWindowのソースが参考になりました。thx!
0171バグですか?NGNG
超初心者に書いてしまいましたが、以下の内容は中級者で良い?
Delphi5・BDE5.11でTBatchMoveを使用してParadoxテーブルのコピーを
行った所、「ディスク容量が足りません」って出ます。
ディスクの空き領域が4.00G(4,295,634,944)付近の場合のみ発生します・・・
ちなみにテーブルは200M程度なので、足りないわけ無いはずなのですが、
ディスクの空き領域が3.99Gになると発生しません。
何か分かる方居ますか?
0172デフォルトの名無しさんNGNG
>>171
だったら適当にファイルを作って容量を減らせばいい。

2の32乗ってわかる?
0173デフォルトの名無しさんNGNG
>>171
バグだと思いますよ。 レポートを上げておくべきでしょう。
0174デフォルトの名無しさんNGNG
DWORD付近ですねぇ。
0175デフォルトの名無しさんNGNG
>>171
どこか間違えてるが95%、バグの可能性が5%と見た
0176デフォルトの名無しさんNGNG
フォトショップの選択ツールで見られる「蟻の行列」を
実装するにはどのようにすればいいんですか。

0177デフォルトの名無しさんNGNG
xor モードで画面枠の点点を描いては?
0178バグですか?NGNG
いろいろ試したが、2147483648Byteで割り切れるサイズを境に、TBatchMoveが
正常に動作しない模様!
TBatchMove自体がコピー先のディスク空き容量を見ている感じ・・・
そして、TBatchMoveがディスク空き容量の確認にGetDiskFreeSpaceExを使わずに
GetDiskFreeSpaceを使ってるから、2147483648Byteで割り切れるサイズでは
「ディスク容量が足りません」って出してると推測しました!!!
Delphi7では直っているんでしょうね〜・・・
0179デフォルトの名無しさんNGNG
>>178
よくやった!!!
0180デフォルトの名無しさんNGNG
>>178
delphi側では DiskFreeを使ってないみたい。だからたぶんBDEの問題じゃないかな。
0181デフォルトの名無しさんNGNG
自称中級者はカエレ
0182デフォルトの名無しさんNGNG
delphiでパケットモニタみたいなの作れる?
さすがにindyにそんなのないよな。
いいコンポーネントでもクラスでもあったら教えて下さい

0183デフォルトの名無しさんNGNG
パケットモニタの原理が解らないわ!
0184デフォルトの名無しさんNGNG
>>182
http://winpcap.polito.it/install/default.htm
0185デフォルトの名無しさんNGNG
>>182
漏れもわからんのだが80番ポートを監視したらできそうな気がするが
違うん?
0186デフォルトの名無しさんNGNG
port:80はHTTP専用では?
WinSockレベルで監視と言うと、listenするって事ですよね?
つまり、サーバーになっちゃう。
0187デフォルトの名無しさんNGNG
なんつー低レベルな会話・・・
おまいら、ここは中級者以上ですが?
0188デフォルトの名無しさんNGNG
WinsockだけでNETSTATみたいなのは作れないよ。
0189デフォルトの名無しさんNGNG
NETSTATはSNMPかと。パケットキャプチャと関係ない。
まあ作ろうと思えばWinsockでも作れないことはないが、実行するにはOSの設定が必要。
0190デフォルトの名無しさんNGNG
>>184
それ見ると、デバイスドライバ作ってるね。



0191デフォルトの名無しさんNGNG
NDIS中間ドライバなるもので実現しているみたい。
デバイスドライバ用のコールバック関数は
デバイスドライバで作るしかないって事か。

そのドライバ(DLL)をDelphiからも使えたら、
Delphiでもパケットモニタを作れる…。
0192デフォルトの名無しさんNGNG
あれ、たしかActiveXだったと思ったが。Delphiから利用できるっと。
0193デフォルトの名無しさんNGNG
THintWindow上の子ウィンドウを表示するにはどうすればいいのでしょうか?
ボタン等を動的作成して、ParentをHintWindowに設定しても表示されませんが。。。
0194デフォルトの名無しさんNGNG
>>193
くだすれDelphi Part7 (超初心者向け)
http://pc2.2ch.net/test/read.cgi/tech/1065195699/
0195デフォルトの名無しさんNGNG
>>193
普通に表示されましたよ?

var w:THintWindow;
begin
w:=THintWindow.Create(Self);
w.Parent:=Self;
w.Left:=10;
w.Top:=30;
w.Width:=100;
w.Height:=40;
with TButton.Create(w) do begin
Parent:=w;
Caption:='test';
end;

0196デフォルトの名無しさんNGNG
デル厨はレベルが低いなぁ(ゲラゲラ
0197デフォルトの名無しさんNGNG
>>193
Delphi相談室(上級者用)その12 に逝け
http://pc2.2ch.net/test/read.cgi/tech/1064766880/l50
0198193NGNG
>>195
w.Parent:=nil; の場合は表示されませんよ。
0199デフォルトの名無しさんNGNG
>>198

だからさ、親にTCustomForm継承が無いと上手く動かないようになってるんだよ。
どうしてもやりたいなら、そこの部分を自前で処理しないといけない。
とりあえず表示させたいなら、


w:=THintWindow.Create(Self);
w.Left:=10;
w.Top:=50;
w.Width:=100;
w.Height:=40;
with TButton.Create(w) do begin
Parent:=w;
Caption:='test';
SetWindowPos(Handle, 0, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE + SWP_NOZORDER + SWP_NOACTIVATE + SWP_SHOWWINDOW);
end;
SetWindowPos(w.Handle, 0, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE + SWP_NOZORDER + SWP_NOACTIVATE + SWP_SHOWWINDOW);

とか無理やりに表示フラグをオンしてやれば表示はするけど、Visibleフラグは更新されないぞ。
0200199NGNG
とりあえず、Parentにnilが嫌なら

ParentWindow:=Application.Handle;

で我慢するというのはダメかい?
0201193NGNG
>>199-200
子ウィンドウをすべて検索して、一個一個表示させないといけないようですね。
>ParentWindow:=Application.Handle;
MainFormを最小化したら、HintWindowも最小化されてしまいました。
0202デフォルトの名無しさんNGNG
パケットモニタを作るのはやめなの?
0203デフォルトの名無しさんNGNG
難しいのでやめらしい。
0204デフォルトの名無しさんNGNG
WinSockAPIのフックならDelphiでも出来るんだけどね。
0205デフォルトの名無しさんNGNG
>>204
Rawソケット使うんじゃないの?フックつかうの?
0206デフォルトの名無しさんNGNG
Rawソケットを使うやり方はWindows2000以降で
WinSockレベルのパケットキャプチャが出来るんだって。

NDISはWinSockを経由しないので、Rawソケットより強力。
0207デフォルトの名無しさんNGNG
お前らいつまでも馬鹿なこといってないでさっさとetherealのplugin作ってしまえ
0208デフォルトの名無しさんNGNG
dcc32でターゲットファイル名を指定できないのはバグですか?
0209デフォルトの名無しさんNGNG
>>208
お前が使い方を知らないだけだろ
0210デフォルトの名無しさんNGNG
ファイル名に空白を含んでいるのでは?
0211デフォルトの名無しさんNGNG
"" でくくってください。
0212デフォルトの名無しさんNGNG
くくりたくない場合はどうすればいいですか?
0213デフォルトの名無しさんNGNG
氏ね
0214デフォルトの名無しさんNGNG
くくればいいじゃんかよぉ
0215デフォルトの名無しさんNGNG
首くくれ。
0216デフォルトの名無しさんNGNG
病院坂逝け
0217デフォルトの名無しさんNGNG
プロジェクトオプションのリンカのタブにある
「TD32デバッグ情報を含める」をチェックすると
exeファイルがでかくなるんだけど
このファイルのフォーマットの情報ってどこにあるか知ってる方居ません?
0218デフォルトの名無しさんNGNG
>>217
はるか太古の昔からの機能ゆえ、俺も最初のリファレンスを知らん。
JCLにTD32の情報を読み取るクラスがあるのでそれらから調べることができるかもしれない。
Jediに聞けば答えてくれるかもね。
0219217NGNG
おおっサンクス。
かなり参考になります。

折を見てJEDIに聞いてみようかな。英語苦手なんだけどなぁ。
そのまえにMemCheckの堀氏に聞いてみるかな。
0220デフォルトの名無しさんNGNG
古の Borland デバッグ情報は、
ハンドブック風の書籍としてBorland 自身が公開していたとおもったが
タイトルがおもいだせないなぁ。
0221デフォルトの名無しさんNGNG
8キタ-
0222デフォルトの名無しさんNGNG
堤さやか \952
「とびっきりSUNDAY,・・・fall in love ♥」
0223デフォルトの名無しさんNGNG
文字列にメソッドポインタを割り付けて、メソッドを呼び出したいのだが
全然やり方がわからん。誰か教えてくれ。

下のようなコードを書いてみた。

type
TDict = record
key: String;
value: Pointer;
end;

登録しようとするとエラー

begin
dict[0].key := 'Enter';
dict[0].value := PEnter; //ここでエラー
dict[1].key := 'Exit';
dict[1].value := PExit; //ここでもエラー
end;

利用しようとしてもエラー

procedure TUserManager.Execute(command, mess: String);
var
i: Integer;
begin
for i := Low(dict) to High(dict) do
if dict[i].key = command then dict[i].value(mess); //だめ
end;
0224デフォルトの名無しさんNGNG
すまん、↑のやつの補足。

PEnter も PExit もTUserManagerで定義しているメソッドで、
どちらもString一つを引数に取る手続き。

なんだけど、上のコードでは「実パラメータが足りません」とか言われる。
で、適当なパラメータをつけてやると
例) dict[0].value := PEnter(s);

「関数とか形無しとかとポインタとは互換性がありません」みたいに言われる。
じゃあポインタにしようと思って@つけてみると
例) dict[0].value := @PEnter(s);

「変数が必要です」とかいう。もうね。なんとかならないかと。
0225デフォルトの名無しさんNGNG
type
 procedure TEnterEvent(value: String) of object;
 TDict = recort FOnValue: TEnterEvent; end;
0226デフォルトの名無しさんNGNG
↑早速ありがとうっす。

でも、相変わらず
「TEnterEventと形無しなんちゃらに互換性がない」って怒られるっす
0227デフォルトの名無しさんNGNG
↑すんません自己解決しました。
登録時に
dict[0].value := PEnter(s) //←この引数部分がヤバかった

こうすればOKでした。
dict[0].value := PEnter
0228デフォルトの名無しさんNGNG
IntraWebって、簡単にWebソフトができそーな予感がするんだけど、
みんな使ってるの?
どこまでのことがIntraWebでできますか?
0229デフォルトの名無しさんNGNG
Delphiではprivateメソッドの引数の型は非公開にできないのでしょうか?
C++で書くと、こんな事をやりたいのですが・・・・
//----------------------------
class TX {
private:
//----------------------------
// ↓このクラスを隠蔽したい。
 class TY {
 public:
   void Exec(int num);
 };
//----------------------------
 int m_num;
 void Init(TY *pobj);
public:
 TX(int n);
};
//----------------------------
TX::TX(int n) {
  TY a;
  m_num = n;
  Init(&a);
}
void TX::TY::Exec(int num) {
  Form1->Caption = Format("Hello:%d",OPENARRAY(TVarRec,(num)));
}
void TX::Init(TY *pobj) {
  pobj->Exec(m_num);
}
//----------------------------
Init をProcedure手続きにしてimplement するしかないのでしょうか?
0230デフォルトの名無しさんNGNG
>>229
現状できないね…。Delphi.NETだと確か入れ子宣言が可能になったはずだけども。
0231デフォルトの名無しさんNGNG
>>230
ありがとうございます。
そうですか、Delphi.Netから対応ですか・・・(これだけの為に買うのも・・・)
クラス内クラス以外でも実現できないとすると、
InitメソッドをProcedureに置き換えるしかないなぁ。
0232デフォルトの名無しさんNGNG
ComboBoxをオーナードローで描画したら、ComboBoxのエディット部分を編集できなくなったす。

#前提条件
ComboBox1.Style := scOwnerDrowFixed
ComboBox1.DrawItem := TForm1.ComboBox1DrawItem

ComboBox1のItemsにAddObjectとして clBlack, clBlue, clRedとかを入れてる

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
with ComboBox1.Canvas do
begin
FillRect(Rect);
Font.Color := TColor(ComboBox1.Items.Objects[Index]);
TextOut(Rect.Left+1, Rect.Top+1, ComboBox1.Items[Index]);
end;
end;

エディット部分を編集できるようにするためには、あとなにをしたらいいの?
0233デフォルトの名無しさんNGNG
プロパティを何も設定しない状態で(Style=csDropDown)

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

//TXComboBox

procedure TXComboBox.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
with Params do
Style := Style or CBS_OWNERDRAWFIXED;
end;

を適用する。

VCLはオーナードローでエディット可のスタイルを標準でサポートしていません。
ちなみにSetWindowLongは効かないのでCreateParamsをいじるは絶対条件です。

Delphi8では変わっていればいいなあ。
0234デフォルトの名無しさんNGNG
こんにちは。教えてください、スゴイひと。
Delphi7のActiveXコントロールウィザードでTextBoxを
継承したOCXを作りました。
そのOCXをほかのプロジェクトで使うとデフォルトで
Textが 'XXXEdit1' ってなっちゃうんですけど、
これをはじめから空白にするにはどうしたら良いですか?
0235デフォルトの名無しさんNGNG
ControlStyleからcsSetCaptionを削除すると幸せになれるかもしれません。
0236234NGNG
回答ありがとうございます。
して、それをどこに記述すれば良いんでしょうか?
設計時にフォームに貼り付けたときに走るコンストラクタの
ようなものはありますか?そしてそれは(あるとしたら)
どのようにデバッグすれば良いんでしょう?
0237デフォルトの名無しさんNGNG
コンストラクタをオーバーライドすればいいだけじゃないのか?
0238デフォルトの名無しさんNGNG
Delphi2や3ではTFTPコンポーネントがあったと思うのですが、Delphi6や7では
なくなっていますね。IPアドレスを指定して、そこにあるフォルダを持ってきたいのですが、
どのようにすればいいのでしょうか?教えて頂けないでしょうか?お願いします。
0239デフォルトの名無しさんNGNG
>>238
Indyに代わりました。検索するとサンプルが出てくるかもしれません。
0240234NGNG
”静的メソッドはオーバーライドできません。” だそうです。
0241234NGNG
240は237さんへのレスです。
0242デフォルトの名無しさんNGNG
>>240
で、君はそのメッセージをヘルプで調べたのかね?
0243デフォルトの名無しさんNGNG
>>242
それがどうかしたのか? 答えになってねーぞ。
0244デフォルトの名無しさんNGNG
はぁ…
0245デフォルトの名無しさんNGNG
>>243
説明してほしければ、くだすれ逝けよ。
0246デフォルトの名無しさんNGNG
もう自己解決した。お前らみたいな口だけの馬鹿に聞いたのが間違いだったな。
0247デフォルトの名無しさんNGNG
さすがDelphiのスレだな。
0248234NGNG
何か荒れてる。。。
>>234=>>236=>>240=>>241=私で、>>243・>>246は別人です。

いずれにしても自己解決しました。TEditを継承しようとしていたのが
間違いで、TCustomEditを継承すれば希望の動作をあっさり実現できました。
0249デフォルトの名無しさんNGNG
自称中級者sage
0250デフォルトの名無しさんNGNG
どこのスレで質問するのが一番適当なのか悩んだのですが、ここで質問させていただきます。

現在、DB2をDelphiで使用する方法を模索しています。
今のところ分かっているのは、
1.Delphi付属のBDE、DBExpress等のコンポーネント
2.migaroのDelphi/400
3.IBMのCSレボリューション
の3つです。

新規開発においては1.のDelphi付属のコンポーネントでも十分なのでしょうが、
AS/400にすでにある資産(帳票等)を流用したいので、Delphi付属のコンポーネントでは、
物足りないです。
また、2.のDelphi/400は以前使用したことがあり、機能的にはメッセージ、コマンド、SQLが
使用できて十分なのですが、レスポンスは満足できるものではありませんでした。
3.のCSレボリューションはソケットを使用した伝聞でPC、AS/400間をやり取りするそうで、
レスポンスの点ではダントツのようですが、全ての開発において伝聞の形式を定義しなければ
ならず、開発効率がかなり悪いようです。

どなたか、他にツールをご存知の方はいらっしゃいますでしょうか?
よろしくお願いします。
0251デフォルトの名無しさんNGNG
Dephi7のインラインアセンブラでSSEとか、SSE2コードを書いていると、
デバッガでステップトレースした際に、頻繁にInternal Error が出てしまいます。
何とかならないもんでしょうか(^^;
現在は、クリティカルなコードはなるべくステップトレースを避けるなどして、
どうにか対処してますけど・・・。
4,5000行もインラインアセンブラで組んでいると、
そうも行かないところも出てきてしまって…。

Borlandに言っても、修正パッチとかは出そうに無いですし・・・。
それと、デバッグ時にXMMレジスタの中身が確認できないのも辛い。
0252デフォルトの名無しさんNGNG
手伝ってくれる方キボンヌ
http://program.dot.thebbs.jp/1071486463.html
0253デフォルトの名無しさんNGNG
氏ね
0254デフォルトの名無しさんNGNG
21インチのモニタでビデオカードも最強な漏れ

フルスクリーンでしか起動しないゲームを
フォームの中に4つ程埋め込んで同時ハァハァしたいんだが
手っ取り早いコーポーネント無い?

ゲームって所を突っ込むとアッチ系なわけだが、みなまで言わせるな
漏れの欲望を実現させてくれ
0255デフォルトの名無しさんNGNG
PC4台とモニタ4台。
0256254NGNG
>>255
あんた賢いね!!!
でもそれじゃダメなんだよ
なぁ分かってくれよ…
0257デフォルトの名無しさんNGNG
ソリティア、ハーツ、フリーセル、スパイダーでハァハァする254萌え
0258254NGNG
フルスクリーンのソリティアって何なんだよ!!
なぁ分かってくれよ…
ネタじゃなくてマジなんだよ…
たぶんマジなんだよ…
0259デフォルトの名無しさんNGNG
見習え!
http://pc3.2ch.net/test/read.cgi/jisaku/1068645450/117-
0260デフォルトの名無しさんNGNG
自アプリにフォーカスが当たっている以内に関係なく
たとえばCTRL+Pが押されたことを検出するにはどうすればいいですか?
0261デフォルトの名無しさんNGNG
ttp://forum.nifty.com/fdelphi/samples/00356.html
0262デフォルトの名無しさんNGNG
>>254
DelphiML:79620にこんなのあったけど。
面倒だからインデントなし。

procedure TForm1.Button1Click(Sender: TObject);
var
Wnd: HWnd;
begin
if WinExec('Notepad',CmdShow)<32 then exit;
Wnd:=FindWindow('Notepad', nil);
if Wnd<>0 then
Windows.SetParent(Wnd,Panel1.Handle);
end;
0263デフォルトの名無しさんNGNG
コードエディタの右に線が引かれてますけど
あれはどうやれば描画出来るのでしょうか?
0264254NGNG
おお、教えて君な漏れにマジレスサンクス

メモ帳を埋め込むサンプルですね。
そこの所を変えればいいわけだ。
10時間ぐらい頑張ってみる。
0265デフォルトの名無しさんNGNG
>フルスクリーンでしか起動しないゲームを
この時点でもうだめだろ。VMWAREでも使っとけ。
0266254NGNG
>>265
ありがとう
あんたの一括が無ければ、10時間を無駄にする所だったよ。
VMWARE?なんじゃそりゃ。5時間以内に調べて来る。
0267254NGNG
よし、リサーチ完了出来た。
つまり46,000円を払えという事だな。
3時間以内に買ってくるわ。
0268254NGNG
だめぽ
納期一週間
体験版もDLできぬしな

262の方法で本当に無理か、10時間かけて確認してから
あきらめる事にする。
0269デフォルトの名無しさんNGNG
もう一台PC買ったら? ゲームやるやつらはよく複数台のPCでプレイしているよ。
0270デフォルトの名無しさんNGNG
>>263
PolyLine
0271ななしへたぐらま ◆XcB18Bks.Y NGNG
>>263
TMemoやTRichEditをベースにして実現する事は恐らく出来ないと思います.

DelphiのコードエディタはWindowsに標準で付いてくるエディットコントロール(TEditやTMemoの実体)や
リッチエディットコントロール(TRichEditの実体)をベースに作っているわけではなく,
一からすべて自前で作られているものと思われます.

出回っているテキスト編集コンポの中にはそういうものもいくつかあるようですが
これらの中で背景のオーナー描画を自由に出来るものがあればそういう機能を実現する事が出来るかも知れません.
0272263NGNG
271さんありがとうございます<(_ _)>
かなり大変そうですね。
必要に迫られたわけではなかったのですが、
ふと気になったので相談させていただきました。

でも実現出来れば作成出来るものの幅も広がりそうなので、
これを機会にコンポーネントを探してみます。
0273デフォルトの名無しさんNGNG
いまふとタスクマネージャみたら、delphi32.exe様が48,276KBも
お使いになられているわけですよ。それって普通なの?

お漏らししてるの?
0274デフォルトの名無しさんNGNG
正常終了できなかったときはよくなる
そんな時漏れはプロセスで抹殺
0275273NGNG
いや、ふつうにコーディング→実行→デバッグを
くりかえしていただけなんでつが。
0276デフォルトの名無しさんNGNG
C++BuilderXは立ち上げただけで69,276KB
0277デフォルトの名無しさんNGNG
>276 Javaだからな。
0278デフォルトの名無しさんNGNG
ListBoxをオーナー描画すると、再描画のたびにちらつくのですわよ
0279デフォルトの名無しさんNGNG
>>278
ソース
0280デフォルトの名無しさんNGNG
むず・・・
0281デフォルトの名無しさんNGNG
オーナー描画ってのはいったいどうやるんでしょうか?
継承とかってのがよく分からなくて・・・
0282デフォルトの名無しさんNGNG
>>281=>>278?
もしそうなら、ソース出してみ。
「再描画のたびにちらつく」
とだけ言われてもどうしようもない
0283デフォルトの名無しさんNGNG
タスクトレイに常駐し、メールの新着をお知らせするアプリを作ってるんですが、
ダイアログでお知らせをしてるんですが、他のアプリの後ろに隠れてしまいます。
これを必ずトップウィンドウにする方法をご教授願います。
0284デフォルトの名無しさんNGNG
SetForeGroundWindow
0285デフォルトの名無しさんNGNG
最小化したときにしたのタスクバーにCaptionの内容が反映されるように
したいのですが

MainFrm.Caption := 'テスト'
とやってから最小化してもタスクバーの文字には
あいわらず
Project1と出たままです。
どうやったらタスクバーにキャプションを反映させられるんでしょうか?
よろしくお願いいたしますm(_ _)m
0286デフォルトの名無しさんNGNG
Application.Titleだったような
0287デフォルトの名無しさんNGNG
>>286
おお、それでした
0288デフォルトの名無しさんNGNG
>>281
正月休みの間やってみようとしたけど僕にも無理でした・・
0289デフォルトの名無しさんNGNG
>>288
何のオナニー描画をしたいのか言え。
コンポによって使うイベントが違ったりする
漠然としすぎた質問はスルーされる
0290Delフサギコ ◆A6VzDeLphI NGNG
                Winny 2.0b7.1のメニュー
     Λ,,Λ   ___    [検索履歴][再読込]
    ミ,,゚Д゚ミ .||::::::::||    を自作アプリから
    ミ   つ___||_____||     クリックさせたいのですが
   | ̄ ̄|__ミ―――――   どうしたらいいですか?
   `ー┬‐''
     ┴   ワカラヘンネン
0291Delフサギコ ◆A6VzDeLphI NGNG
    ∧,,∧  わかりました。
   ミ,,゚Д゚彡     TagetWndにWinnyのハンドルを入れて
    ミ つ旦)~~     こうすると、Alt+H/Alt+Rを
  〜と,,,~),,~)      押したことになりますね。
var
 TargetWnd: HWND;
 FC:Boolean;

   SetForegroundWindow(TargetWnd);
   BringWindowToTop(TargetWnd);
   FC := GetKeyState(VK_MENU) < 0;
   if not FC then Keybd_event(VK_MENU,0,0,0);
   Keybd_event(Ord('H'),0,0,0);
   Keybd_event(Ord('H'),0,KEYEVENTF_KEYUP,0);
   Keybd_event(Ord('R'),0,0,0);
   Keybd_event(Ord('R'),0,KEYEVENTF_KEYUP,0);
   if not FC then Keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
0292デフォルトの名無しさんNGNG
>>281
とっかかりがほしいのか?
とりあえず以下のとおりやってみ

・ListBox1を配置しる
・プロパティ「Style」に「lbOwnerDrawFixed」設定
・プロパティ「Items」に適当なアイテムいくつか設定
・イベント「OnDrawItem」に以下のコードを記述しる

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
begin
ListBox1.Canvas.Brush.Color := clWhite; //←(A)
ListBox1.Canvas.FillRect(Rect);
ListBox1.Canvas.Brush.Color := clWhite; //←(B)
ListBox1.Canvas.TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]);
end;

以上のコードがうまく動くこと確認したら、(A)とか(B)に適当な色を入れて楽しんでみれ
慣れたらRect.Leftあたりの数値いじってみたり、Canvasに絵を埋め込んでみたり
0293デフォルトの名無しさんNGNG
タブ区切りテキストをStringList.DelimitedTextで読み込むと、
空白を適当に切り詰められちゃうんですが、
切り詰めないようにはどうしたらいいでしょう?

text := (右はテキストの例)[タブ] [タブ] [タブ] aaaa [タブ] bbbb [タブ] [タブ] cccc [タブ]
StringList1.Delimiter := #9;
StringList1.Delimitedtext := text;
StringGrid1.Rows[0].AddStrings(StringList1);

→ StringGrid1には aaa, bbb, ccc の3個だけ並ぶ
0294デフォルトの名無しさんNGNG
デルファイをはじめたいのですが、何からはじめたらいいでしょうか?
パーソナルだと1万ぐらいで、プロだと4万ぐらいで売っていました。
どういう違いがあって、どちらを買ったほうがいいでしょぷか?
0295デフォルトの名無しさんNGNG
>>294
取りあえず公用語のC言語の本とフリーのコンパイラ。
それで3ヶ月ほど勉強してみ。
0296デフォルトの名無しさんNGNG
>>294
えっパーソナル版はタダでダウンロードできるって知らないの?
0297デフォルトの名無しさんNGNG
>>296
昔の話だな。
0298デフォルトの名無しさんNGNG
×昔の話だな。
○昔のヴァージョンならな。
0299デフォルトの名無しさんNGNG
>>294
Delphiの入手とインストール
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BDelphi%A4%CE%C6%FE%BC%EA%A4%C8%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%5D%5D
0300デフォルトの名無しさんNGNG
SetForegroundWindowでウインドウとそれに関連するスレッドも全部前面に出るんだから
BringWindowTopはいらなくない?
と思ったら98では効かないのか…
0301パントマイマの軌跡● ◆xPantyHouQ NGNG
すんまへん、正規表現で番号付きグループができるコンポーネント探してるんですけど・・・
どっかありませんかね?

【例】
<a href="index.html">トップページ</a>を
<a href="([^"]+)\1">([^<]+)\2</a>

みたいに書いて、\1と\2が別途の変数として取れるようなものです。
bmonkeyさんのところも、BRegExpも両方見てみましたが実装していなかったっぽいんですが。

0302デフォルトの名無しさんNGNG
TRegExpr
0303パントマイマの軌跡● ◆xPantyHouQ NGNG
>>302
ウワーイアッター!!!
早速使って見るです!�dクス!!
0304デフォルトの名無しさんNGNG
USBカメラの画像を横取りしてPGで処理してから、
イメージングデバイスに流すことは可能でつか??
0305デフォルトの名無しさんNGNG
難しいかどうかは別として可能です
0306304NGNG
デバイス制御は初めてでとまどってます。
参考になるHPか文献ありませんか?
どっから手をつけて良いのやら…
0307デフォルトの名無しさんNGNG
悪いことはいわないから制御系はCかC++にしておけ。
Del使ってもフロントエンド程度にした方が良い。
0308デフォルトの名無しさんNGNG
>>307
で、何が制限となるのか具体的に説明して下さい。

VBならスダンディングマスターベーションするが。
0309デフォルトの名無しさんNGNG
また一人VBにコンプレックスをいだいている奴が釣れたとw
0310デフォルトの名無しさんNGNG
デバドラでしょ。
0311デフォルトの名無しさんNGNG
>>310
シリアルとかパラレルならそんなもん書くまでも無いっしょ。
0312デフォルトの名無しさんNGNG
>>309
いや、単純にvbってポート叩けたっけ?みたいな。
DelphiはTPの名残で普通にできるけど。
0313304NGNG
USBカメラからの画像を加工(文字入れ)してから、
メディアサーバー(FLASH)に流すだけなんですが…
難しいでしょうか
0314デフォルトの名無しさんNGNG
>>313
アンチエイリアシングとか面倒です。
0315デフォルトの名無しさんNGNG
delphi6 PersonalでSOPAって使える?
PureSoapってのを見つけたんだけど、オフィシャルが消えてるっぽい。

って、この質問はここであってる? もしスレ違いなら誘導してください。
0316デフォルトの名無しさんNGNG
ゴメン、あげてしまった。
0317デフォルトの名無しさんNGNG
>>315
XMLとhttpでスクラッチするというのもありかと。
0318デフォルトの名無しさんNGNG
そぱ
0319デフォルトの名無しさんNGNG
あるexeファイルから別のexeファイルを呼び出したときにウィンドウ自体に
フォーカスが移らず困っています。
ググッたら
SetForegroundWindow(form1.Handle);
とかでアクティブになるみたいな情報を見つけましたが、うまくいきません。
たしかWindows95・NTとWindows2000,XPではウィンドウ制御の仕組みが変わってたと
思うのでそれが原因かも。

あと、
SetWindowPos(form1.Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE or SWP_NOSIZE)
でウィンドウを最前面に持ってくることはできましたが、やっぱりフォーカスは移ってくれません。
何かいいアイデアはありませんか?開発OSはWindowsXPです。
0320デフォルトの名無しさんNGNG
>>319
そのexeで SetForegroundWindow してもダメ?
0321デフォルトの名無しさんNGNG
自分自身を最背面に移動するんだ。
0322デフォルトの名無しさんNGNG
>319
ttp://hp.vector.co.jp/authors/VA016117/setfore.html

俺が参考にした場所。
win2kではでけた。
0323319NGNG
会社から1回以上カキコすると規制がかかるのなー。初めて知ったよ。

>>322
ありがとうござます。
Cはよくわからないのですが設定を変更する箇所をDelphiで書くと
SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(0), 0);
ですよね?
やっぱりうまくアクティブになりませんでした。

ちょっと説明を追加すると
"(呼出)元.exe"から"(呼出)先.exe"を呼び出す際、CreateProcessメソッドを使って
呼び出してます。
で、先.exeが表示されたら元.exeのフォームのVisibleをFalseにして、画面が遷移したように
見せかけてるわけです。
元.exeは、先.exeが終了するまでsleepさせています。
先.exeが終了したら元.exeのフォームのVisibleをTureにして表示してるのですが、この仕組み
が悪いのかな?
ちなみにSetForegroundWindowを組み込んだのは元.exeの再表示直後です。
0324デフォルトの名無しさんNGNG
>>319
BringWindowToTop
0325デフォルトの名無しさんNGNG
>会社から1回以上カキコすると規制がかかるのなー。初めて知ったよ。
おまえの会社から 2ch にカキコんでいるやつが多数いる。ってことだろ?
0326デフォルトの名無しさんNGNG
うちの会社なんてアダルトサイト扱いだよ…
真っ赤な画面で「業務とは関係ないサイトにアクセスしようとしています」と警告が出る。
0327デフォルトの名無しさんNGNG
OSの設定でClearTypeを有効にしておくと、
TextOutなどで自動的にアンチエイリアスされてしまいますが、
これをコーディングでClearTypeを無効にする方法とかありますか?
0328319NGNG
できました!
というか、社内の別の人が組んでくれました。一応ご参考までに。
procedure SetForeWnd(hWnd:HWND);
var
dwID,dwForeID: DWORD;
begin
dwID := GetWindowThreadProcessId(hWnd, nil);
dwForeID := GetWindowThreadProcessId(GetForegroundWindow, nil);
if dwID = dwForeID then
begin
BringWindowToTop(hWnd);
end
else
begin
AttachThreadInput(dwID, dwForeID, True);
SetActiveWindow(hWnd);
AttachThreadInput(dwID, dwForeID, False);
BringWindowToTop(hWnd);
end;
end;

アクティブにしたいウィンドウのハンドルと現在アクティブなウィンドウのハンドルを比べ
異なるようであればアタッチして、ウィンドウをアクティブにし、再び切り離してる・・・ようです。
0329デフォルトの名無しさんNGNG
>>327

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_0xgn.asp

CreateFont するときに NONANTIALIASED_QUALITY を lfQuality に追加する。と。

0330デフォルトの名無しさんNGNG
>>328
どうでもいいことだけど
ifの中がBringWindowToTopのみ かつどちらでも実行されるなら
if dwID <> dwForeID then
begin
//ここにelseでの処理Attatch…(…False);まで
end;
BringWindowToTop(hWnd);
のほうがコード量少なくて済む。
が、可読性は下がりそう(スマン
0331デフォルトの名無しさんNGNG
MySQLのテーブルのBLOBフィールドにバイナリデータを書き込むことに成功した方って
いらっしゃいますか?

もし、おられたら、書き込む部分のソースを教えて下さい。
宜しくお願いします。
0332デフォルトの名無しさんNGNG
だからー
ミドルウェアなに使っているのか書け。ってばよ。

ttp://pc2.2ch.net/test/read.cgi/tech/1074523803/l99
で紹介されている
ttp://www.fichtner.net/delphi/mysql.delphi.phtml
でも使ってみたら?
0333331NGNG
>>332
もうそんなんどうでも良いから、成功した人のやり方を真似させて下さい。
成功した事がない人は黙ってて下さい。
0334デフォルトの名無しさんNGNG
>>333 やだよー
0335デフォルトの名無しさんNGNG
>>333
切に願う。
自分でプログラムやる気がない人は来ないでください。
0336331NGNG
偽者は黙れヴォケカス
答えられない奴もしゃしゃり出てくるなヴァカ
0337デフォルトの名無しさんNGNG
だから答え様がないんでしょ。(w
0338デフォルトの名無しさんNGNG
MySQLのBlob clumnにはDelphiからは書き込めません。
ODBC経由でもmysql.pas(libmysql.dll)を使っても不可能です。
原因は不明です。
どうしてもやりたいなら、別の言語でdllを作るなりしてやるしかありません。
0339デフォルトの名無しさんNGNG
http://www.programmersheaven.com/zone2/cat772/17277.htm
0340デフォルトの名無しさんNGNG
>>338
うそつき.
別の言語でdllを作ってできるなら原因不明ということになるはずないだろ?
0341デフォルトの名無しさんNGNG
>>339
注意:商用利用は有料です。
(ソース無しバージョンで一人の開発者が使う時は約$60必要です)
0342デフォルトの名無しさんNGNG
ま、無料でやるなら、blobは使うなってこった。
0343デフォルトの名無しさんNGNG
FUD はやめましょうね。
私は普通に接続できていますが。
0344デフォルトの名無しさんNGNG
ソースは?
0345デフォルトの名無しさんNGNG
>>342
マジっすか?
次の開発はDelphi + MySQLで行こうと思ってたのに、やめようかなぁ。
0346デフォルトの名無しさんNGNG
業務開発で 6000円出せないんだったら、その会社、やめたほうがよいよ。
個人で作っているなら無料だ。
0347デフォルトの名無しさんNGNG
大体 MySQL 自体、自分のソースを公開したくない場合はライセンス料(\29,800)が必要なんだから

ところで、ODBC 接続で何の問題もなく BLOB アクセスできるんですが。
何が問題なんだろう
0348デフォルトの名無しさんNGNG
>>347
Jpeg格納してみ
俺はできんかった。
ちなみにDel7。
0349デフォルトの名無しさんNGNG
正直、ライセンス料払わずに販売してる奴はいるとおもた。
0350デフォルトの名無しさんNGNG
FireBird使え、無料だぞ
ドキュメント少ないけどな。。。
0351デフォルトの名無しさんNGNG
HyperThread に対応していないサーバー RDB かい。> FireBird
0352デフォルトの名無しさんNGNG
>>351
それって動作しないってこと?それとも最適化されてないってこと?
0353デフォルトの名無しさんNGNG
>>352
今MLで話題になってるが、遅くなるらしい。
0354デフォルトの名無しさんNGNG
まじ?>>353
どのMLか教えて。

まぁデータは飛ばんし、遅くなっても我慢して使うかな。
0355デフォルトの名無しさんNGNG
HT - along with hardware SMP - will be a problem for Firebird Superserver
(which Firebird 1 is) on Windows OS platforms.
There are no workarounds.
^^^^^^^^^^^^^^^^^^^^^^^^^
0356デフォルトの名無しさんNGNG
>>347
私が試したところバイナリデータの中に
F*27とか
E*27とか
9*27とかの数値があるデータは書き込めませんでした。
(*はワイルドカード)
もしこれらの数値があるデータでも書き込めたのなら、やり方をご教授下さい。

環境
WindowsXP HomeEdition
MySQL 4.0.15(Windows版 文字コードsjis)
MySQL ODBC 3.51 Driver
Delphi6 Enterprise(BDE 5.01)

コード
  ms := TMemoryStream.Create;
  ms.LoadFromFile('test.dat');//test.datの内容はE727というバイナリデータ

  Table1.Edit;
  Table1.Insert;
  table1.FieldByName('id').AsInteger := 1;
  st := TBlobStream.Create(TBlobField(Table1.FieldByName('data')), bmWrite);

  try
   ms.SaveToStream(st);
   Table1.Post;
  finally
   St.Free;
   ms.Free;
  end;
0357デフォルトの名無しさんNGNG
E7 27
という2バイトのデーター?

まさか
E 7 2 7
の4バイト。ってことではないよね?
0358デフォルトの名無しさんNGNG
問題ないな。

4.0.16 で blob 周りのバグが少しとれています。
16 または 17 で試してみては?私は 4.0.17 を使っています。

あと、この検証コードで問題が起きるのなら、ODBC/MySQL のバグなら他の言語でも
同じ問題が出るだろうし、Delphi/BDE の問題なら他の ODBC ドライバでも同じ問題が出るだろう。
0359デフォルトの名無しさんNGNG
Delphi7 ProfessionalでTUdpSocketを使用してUDPパケットを受信する
ソフトを作っています。
Delphi5でNMUDPを使用したときは問題なく動作したのですが,
Delphi7のTUdpSocketではなぜかOnReceivedイベントが発生しません。
Delphi-MLの過去ログにもこの現象の報告がありますがレスがついていません。
http://130.158.124.192/~takeuchi/delphi/browse.cgi?index=062605&back=http%3A%2F%2F130%2E158%2E124%2E192%2F%7Etakeuchi%2Fdelphi%2Farticle%2F062%2F062605%2Ehtml
他にも同様の現象が出ています。これも解決していません。
http://www.delphiedintorni.it/geoxml/forumgetthread?groupname=borland.public.delphi.internet.winsock&messageid=40036940$1@newsgroups.borland.com&displaymode=all
他人事だと思っていたら私もはまってしまいました。
どなたか回避方法をご存じの方がいたらよろしくお願いいたします。
0360デフォルトの名無しさんNGNG
Delphi7 ProfessionalでTUdpSocketを使用してUDPパケットを受信する
ソフトを作っています。
Delphi5でNMUDPを使用したときは問題なく動作したのですが,
Delphi7のTUdpSocketではなぜかOnReceivedイベントが発生しません。
Delphi-MLの過去ログにもこの現象の報告がありますがレスがついていません。
http://130.158.124.192/~takeuchi/delphi/browse.cgi?index=062605&back=http%3A%2F%2F130%2E158%2E124%2E192%2F%7Etakeuchi%2Fdelphi%2Farticle%2F062%2F062605%2Ehtml
他にも同様の現象が出ています。これも解決していません。
http://www.delphiedintorni.it/geoxml/forumgetthread?groupname=borland.public.delphi.internet.winsock&messageid=40036940$1@newsgroups.borland.com&displaymode=all
他人事だと思っていたら私もはまってしまいました。
どなたか回避方法をご存じの方がいたらよろしくお願いいたします。
0361デフォルトの名無しさんNGNG
UDPソケットなんて使った事ないです。
0362デフォルトの名無しさんNGNG
>>360
TUdpSocket の話はつい最近、どこかで見たような...
「他人事だと思っていたら私も」って Delphi-ML でコメントつかないからこっちに振ったんでしょ。
性格悪いな。教えてあげない。
0363デフォルトの名無しさんNGNG
要するにまるぽなんだな
0364デフォルトの名無しさんNGNG
ばれたか。くそどもが。
0365293NGNG
すまん、だれか、俺が前に質問したやつを
引き上げて答えてくれ・・・

> タブ区切りテキストをStringList.DelimitedTextで読み込むと、
> 空白を適当に切り詰められちゃうんですが、
> 切り詰めないようにはどうしたらいいでしょう?

> text := (右はテキストの例)[タブ] [タブ] [タブ] aaaa [タブ] bbbb [タブ] [タブ] cccc [タブ]
> StringList1.Delimiter := #9;
> StringList1.Delimitedtext := text;
> StringGrid1.Rows[0].AddStrings(StringList1);

> → StringGrid1には aaa, bbb, ccc の3個だけ並ぶ
→ "" "" "" "aaaa" .... と並んで欲しい。

うまいように行くTStringsのプロパティとか、他のコンポーネントとか見つからない。
こういうときって、みんな自力でパースしてるもんなの?
0366デフォルトの名無しさんNGNG
>365
適当だけど、
StringList1.Text := StringReplace(text, #9, #10, [rfReplaceAll]);
0367デフォルトの名無しさんNGNG
>>365
偉そう
0368デフォルトの名無しさんNGNG
>>359-360 (キートン○田)

TUdpSocket は UDP なので、OnReceive は発生しません。仕様です。
その代わりに ReceiveFrom を使います。

 ReceiveFrom TUdpSocket

でググればヒントが出てくるよ。

Indy の方が使いやすいのは事実だが
0369デフォルトの名無しさんNGNG
がんがれよ>普通のサラリーマン
0370デフォルトの名無しさんNGNG
普通のサラリーマンです。ありがとうございます。結局Indy使っちゃいました。
Delphi5だとNMUDPはサンプルがあってあっさり動いたんですけど
Delphi7でこんなに手こずるとは思いませんでした。
もうちょっとサンプル充実して欲しいです。
0371デフォルトの名無しさんNGNG
>>370
直にWinsock叩くと言う手もありますよ〜。
0372デフォルトの名無しさんNGNG
Winsockを使ってみようぜ

昔読んだけどいまいち分からなかった
今なら分かるかも知れない
0373デフォルトの名無しさんNGNG
>>370
Delphi7 では、TUDPSocket は使うな。Indy に移行しろ。と書かれているのはよんだのか?
0374sageNGNG
>370
Indy9のサンプルはここにあるよ。もっとよく調べたら?
http://www.indyproject.org/download/Files/Indy9.html
0375デフォルトの名無しさんNGNG
Jpegファイルの明度を明るくするライブラリとかありますか?
一旦、Winコントロールに描画するしかないんかな。
0376デフォルトの名無しさんNGNG
スレ違いかもしません。QuadrupleDの質問です。

TDDSDCaptureのBlockCopyは、録音された内容を配列にコピーできるのですが、
TDDSDWaveDataのBlockCopyは、配列の内容をバッファに書き込み、処理が逆です。
TDDSDWaveDataの内容を配列にコピーしたいのですが、どうすればいいですか?
0377デフォルトの名無しさんNGNG
Delphiでユビキタスコンピュータは作れますか?
0378デフォルトの名無しさんNGNG
言語煽りなどという程度の低いことをやっている奴には永劫未来無理。
0379デフォルトの名無しさんNGNG
>>377
it is up to you
0380デフォルトの名無しさんNGNG
それを貴方にあげます。
0381ななしへたぐらま ◆XcB18Bks.Y NGNG
>>375
画像をビットマップオブジェクト(TBitmap)に書き出してからTBitmapのScanLineプロパティ経由でピクセルを直接いじる感じになるのでは?
とりあえずイメージコンポに読み込んだ画像から明るさ2倍?の画像を作ってペイントボックスに表示する例.
procedure TForm1.Convert; // Image1.Pictureに画像を読み込んだ後に呼び出す
var x, y: integer; p: PByte;
begin
FWorkBitmap.Assign(Image1.Picture.Graphic); // FWorkBitmapはフィールド変数.あらかじめCreateしてPixelFormatをpf24bitにする
for y := 0 to FWorkBitmap.Height - 1 do
begin
p := FWorkBitmap.ScanLine[y];
for x := 0 to FWorkBitmap.Width * 3 - 1 do
begin
p^ := Min(255, p^ * 2); // usesにMathユニットを追加
inc(p);
end;
end;
PaintBox1.Invalidate; // ペイントボックスの再描画
end;
0382デフォルトの名無しさんNGNG
>>356
俺も無理だった。データが1234だったらOK。F727だったらNG。
---------------エラーメッセージ--------------------------
一般 SQLエラーです
[MySQL][ODBC 3.51 Driver][mysqld-4.0.17-max-debug]You have an error in your SQL syntax.Check the manual that corresponds to
your MySQL server version for the right syntax to use near "・")'at line 1.
---------------------------------------------------------
なんでだろね。ただ俺はMySQLに詳しくないのでどこか設定が間違ってるのかも。

OS:WindowsXP
開発環境:Delphi7 Pro + BDE 5.01
データベース:MySQL 4.0.17
ODBCドライバ:MySQL ODBC 3.51.06

fm := TMemoryStream.Create;
fm.LoadFromFile('test.dat');
with TQuery.Create(self) do begin
  RequestLive := true;
  SQL.Text := 'select * from test';
  Open;
  Append;
  FieldByName('code').AsInteger := 1;
  st := TBlobStream.Create(TBlobField(FieldByName('bdata')), bmWrite);
  fm.SaveToStream(st);
  try
   Post;
  finally
   Free;
   st.Free;
   fm.Free;
  end;
end;
0383デフォルトの名無しさん NGNG
Delphi6 pro,paradoxでデータベースアプリケーションを作成しているのですが、
TDBMemoでメモ型項目に長文を格納したいのですが、240バイトほどしか保存されません。
blobというのを使うらしいということまではわかったんですが、どうやって
保存するのか、ネットやヘルプを調べても情報がほとんどありませんでした。
ご存じの方がおりましたらご教授よろしくお願いします。
0384デフォルトの名無しさんNGNG
blob とは関係ありません。

240 バイトしか保存されない。というのをどうやって確認しましたか?
0385デフォルトの名無しさんNGNG
実際に保存してみました
0386デフォルトの名無しさんNGNG
>>384
私は383であり385の発言はしておりませんが、実際に保存したら240バイト
くらいしか保存されていませんでした。判定方法は、保存された文字数を
数え、170文字(2バイト文字と1バイト文字の混合)くらいしか保存されて
いませんでした。
0387デフォルトの名無しさんNGNG
コードを書かずに TTable -> TDataSet -> TDBMemo とつなげたんだよね?
任意長のテキストの読み書きができるはずですよ?

データベース側がメモ型ではなく文字列型だったとか?
TDBMemo ではなく TDBEdit だったとか?
TTable コンポーネントで項目の追加とかしていない?
0388デフォルトの名無しさんNGNG
煽りは勝手に無視するから、フォローがいいよ。

Demos\Db\FishFact に簡単なデモがあるからそれ見てごらん。
魚の説明のところが DBMemo だよ
0389デフォルトの名無しさんNGNG
s/フォローがいいよ。/フォローはいいよ。/
0390デフォルトの名無しさんNGNG
383です。
みなさん、どうもありがとうございました。
魚のサンプルを見て確かめました。特に間違っていなかったので再度
長文を保存してみたところきちんと保存されていました。原因はよく
わからないのですが勘違いかもしれません。お騒がせして申し訳ないです。
また、質問したいのでその時はよろしくお願いします。
0391デフォルトの名無しさんNGNG
>>376
自分で解決するしかない。 がむばれ。
0392デフォルトの名無しさんNGNG
フォーム上のコンポーネントをすべて見えなくしたいんですが・・

procedure TfrmDelStudy.Button6Click(Sender: TObject);
var
i : integer;
begin
for i := 0 to ComponentCount -1 do
begin
Components[i].Visible := false;
あるいは
TComponent.Visible := false;

end;
end;

などと思いつくことはやってみたんですがうまくいきません。
よろしければご教授くださいませ。
0393デフォルトの名無しさんNGNG
>>392
for i := 0 to ComponentCount -1 do
begin
 if Components[i] is TControl then
  (Components[i] as TControl).Visible := false;
end;
0394デフォルトの名無しさんNGNG
isしたらasは不要だろ
0395デフォルトの名無しさんNGNG
>>393
ばっちりです。とても助かりました。
どうもありがとうございましたm(__)m
0396デフォルトの名無しさんNGNG
色々なアプリを操作したいんですが

ボタンを乗っ取る方法はありますか?

とくに、スキンで特殊なボタンになってるアプリの。
0397デフォルトの名無しさんNGNG
UNIX ユーザーオフ 2月15日
http://off.2ch.net/test/read.cgi/offevent/1075197039/
0398デフォルトの名無しさんNGNG
乗っ取るってのは
押せなくする
連打する
どっちだろう
0399デフォルトの名無しさんNGNG
>>396さんは、そのボタンがそこに「ある」とはどーゆーことか考えた事はありませんか?
0400デフォルトの名無しさんNGNG
>>394
はぁ?
0401デフォルトの名無しさんNGNG
 if Components[i] is TControl then
  TControl(Components[i]).Visible := false;
0402デフォルトの名無しさんNGNG
>>401
(Components[i] as TControl).Visible := false;
TControl(Components[i]).Visible := false;
上の2つは何が違うの?
0403デフォルトの名無しさんNGNG
>>402
型の解決をコンパイル時にやるか実行時にやるかみたいな話だったかと。
0404デフォルトの名無しさんNGNG
>>403
つまり実用上はどちらも変わらないということでしょうか?
0405デフォルトの名無しさんNGNG
いいえ
0406ななしへたぐらま ◆XcB18Bks.Y NGNG
>>392 見えたり見えなかったりするのはコントロールだけなのでこれでよいはず.
var
i: integer;
begin
for i := 0 to ControlCount - 1 do
Controls[i].Visible := False;
end;

>>402
●前者( オブジェクト as クラス型 )
 オブジェクトが指定されたクラス型またはその派生クラス型のオブジェクト,あるいはnilかどうかをチェックします.
 いずれにも当てはまらない場合は例外を生成します.

●後者( クラス型(オブジェクト) )
 オブジェクトが指定されたクラス型かどうかをチェックをせずに
 強引にそのクラス型のオブジェクトであると解釈します.
0407デフォルトの名無しさんNGNG
TWebBrowserを使って、User_Agentを書き換えたいのですが

URL := 'http://hogehoge/'
flg := 0;
Header := ''hogehoge Browser;
WebBrowser1.Navigate(URL, flg, tmp, tmp Header);

上記のやり方では、無理なのでしょうか?
よろしければご教授ください。
0408407NGNG
自己解決しました。

URL := 'http://hogehoge/'
flg := 0;
Header := 'HTTP_USER_AGENT: hogehoge Browser';
WebBrowser1.Navigate(URL, flg, tmp, tmp, Header);
これでできました。
0409デフォルトの名無しさんNGNG
Canvasの一部にDraw()メソッドで
描画するとCanvas全体が再描画される為か
処理が非常に遅くなり、困っています。

処理が遅くならないDraw()のやり方はあるのでしょうか?
0410デフォルトの名無しさんNGNG
DrawでCanvas全体が描画されるって部分が良く判らないんだけど

具体的な最小コードを書いてみて
0411デフォルトの名無しさんNGNG
画面に表示されていないCanvasに書いて、
画面に表示されているCanvasに一括転送
0412409NGNG
>>410
レスありがとうございます。

TImageのCanvasに
cv.Draw(x, y, CharImg);
と描画しています。
描画イメージのサイズは32*32
TImageのサイズは500*180です。
TImageのTransparentはTrueにしています。
0413409NGNG
>>411
ありがとうございます。

早速試してみたのですが
あまり改善しませんでした…
0414デフォルトの名無しさんNGNG
つまり、TImageでTImage.Canvasをアクセスして自動的に作られた TBitmap.Canvasにアクセスしてるんだよね。
そうすると、Picture.OnChangeが設定されてしまっていて、一部でも書き換えたら、TImage全体が書き換えられてしまう。

一番簡単な対策は、TImageを使わずに、フォーム直接か TPaintBoxに描画する事だと思うけど。
つまり、TPaintBox.OnPaintで TBitmapを全部表示して
普段は、その一部だけ書き換える。
0415デフォルトの名無しさんNGNG
>>414
今のマシンは速いから、ダブルバッファで十分じゃないの?
0416デフォルトの名無しさんNGNG
一部でも書き換えられたら全体が描画されるといっても Invalidateが発行されて TImage.paintが遅延実行される訳だから
ダブルバッファと同じだと思うんだけどね。

それで重いというなら Bitmapの一部を書き換える時に、そこだけ画面も書き換えるしかないと思うよ。
0417デフォルトの名無しさんNGNG
ダブルバッファは速度向上ではなく、ちらつき防止なのだが。
0418デフォルトの名無しさんNGNG
ガイシュツ気味だが。
TImageってあまり書き換えないような絵を表示するには向いてるけど、すごく重いという感覚がある。
オフスクリーンでTBitmapに描画、それをCopyRectでTPaintBoxに転送するというのが俺の定番。
0419デフォルトの名無しさんNGNG
質問です。

SHFileOperation関数を利用してファイルを転送・削除するときに、
進捗ダイアログボックスが表示されますよね。

あれが出てくる位置を変更することはできないんでしょうか?
0420デフォルトの名無しさんNGNG
>>419
質問です。
あれが出てくる位置を変更するのはどうしてでしょうか?
0421デフォルトの名無しさんNGNG
>>419
死ぬ気でWindowハンドルなりダイアログハンドルなどを取得してごにょごにょ
0422デフォルトの名無しさんNGNG
難しいんじゃないの? 似たの自前で作った方が速いように思うけどなあ
0423419NGNG
>>420
転送する時に、エクスプローラーの真上に出てくるじゃないですか。
あれをやられると、次に転送するファイルを探しにくいというか・・・。
邪魔なので、右上とか左上に追いやりたいんですけどね。

>>421
・・・ホント死ねるかも。
ちょっともう少し調べてみることにします・・・。

>>422
やっぱりそっちのほうが早いですか。
私がやり方を知らないだけで、
比較的簡単に出来るのかもしれないと思ったんですけどね。

とりあえず、421さんのやり方で出来ないかもうちょい検討して、
どうしても難しいと悟ったら422さんの案で、自前で用意することにします。
レスありがとうございました。
0424デフォルトの名無しさんNGNG
そういう時こそ W2kのソースがあれば・・・・
0425409NGNG
>>414-418
ありがとうございます。

上に置くビットマップ素材を作り直すことで
TImageのTransparentをFalseにしても上手く表現
出来たので、今回はTImageを使うことにします。
少なくとも私の環境ではTImageの方で画像を透過しようとすると
大幅なパフォーマンスダウンが見られました。

今回は時間が無かったのでTImageのままですが
次回はTBitmap&TPaintBoxにチャレンジしてみます!
0426デフォルトの名無しさんNGNG
そうだね。 透過をTrueにするなら、下の絵を含めて TBITMAP上で合成してから
書き換えた領域だけを描画させるようにしたら 速くなると思うよ。
0427デフォルトの名無しさんNGNG
中級レベルの話かどうか定かじゃないですが、ご教授ください。

var
PC: String;
Point:Pointer;
begin
PC := '$64FA6C';
 Point := 何らかの関数?(PC); <---ここ

上のソースのように変数PCに文字列を代入し
Pointer型のPointに変数PCに代入したアドレスを入れたいのですが
どのようにしたらいいのでしょうか?

PCに入れる値はファイルからとってきています。
0428デフォルトの名無しさんNGNG
function toPointer(var dt):Pointeger;
begin
Result:=@dt;
end:
0429428NGNG
という冗談は置いておいて

Point:=Pointer( StringToInt( pc ) );

でも Pointer型より PChar とかにした方がいいよ。
0430427NGNG
>>429
ありがとうございます。

それを組み込んでみたんですが、
 未定義の識別子:'StringToInt'
となったんですが、特別な関数なのでしょうか?

PointerよりPCharの方がなぜいいのでしょうか?
0431デフォルトの名無しさんNGNG
>でも Pointer型より PChar とかにした方がいいよ。
Why?
仮に、ポインタの加減算が出来るなら、PAnsiCharの方が1byte単位であることが
保証されていいような気がします。
どうなんですか?その辺知っている方教えてください。
0432デフォルトの名無しさんNGNG
> 未定義の識別子:'StringToInt'
>となったんですが、特別な関数なのでしょうか?
StrToIntの間違えっしょ。
0433デフォルトの名無しさんNGNG
>>431
StrToInt。 
後半確かにね。 言いたいのは、Pointer型だとそのままじゃ殆ど使えないからって事。
何かポインターとして使いたいなら、その型で使うべきだと思うよ。
0434427NGNG
Pointer型の加減算もできなくてこまっていたんです

var
 PC: String;
 Point,Point2:Pointer;

begin
 PC := '$64FA6C';
 Point := StrToInt(PC);
 Point2 := StrToInt(PC) + 4;

という感じでいけそうですね。ありがとうございました。

最後にString型よりPAnsiCharの方がいいとおっしゃってましたが
String型からPAnsiCharにしたばあいはStrToInt使えないけど
どうするんでしょうか?(だんだん初歩的なことになってる・・・)
0435デフォルトの名無しさんNGNG
strtoint(point^)
0436デフォルトの名無しさんNGNG
> 最後にString型よりPAnsiCharの方がいいとおっしゃってましたが

うーむ、誰も言ってないと思うけど?
0437デフォルトの名無しさんNGNG
PChar より PAnsiChar がいい、という理由はないと思うよ
型なしポインタは。加減算が不便だけどもっとも汎用的。キャストすると Inc() Dec()
で簡単
0438デフォルトの名無しさんNGNG
>>473
でも、PCharだと、Incしたときに、何バイト分ポインタが進むかが、コンパイラに
依存するぞ。




もっとも、現在存在する全てのコンパイラは1バイト単位だけど。
0439デフォルトの名無しさんNGNG
くだらね
0440デフォルトの名無しさんNGNG
>>438
Delphiごときに標準規格なんて無いだろw
0441デフォルトの名無しさんNGNG
>>440
そういう神経の持ち主が作ったソフトは使いたくないなw
0442デフォルトの名無しさんNGNG
・PChar は 8 ビット文字で構成される,ヌルで終わる文字列へのポインタです。
・PAnsiChar は 8 ビット文字で構成される,ヌルで終わる文字列へのポインタです。
・PWideChar は 16 ビット文字で構成される,ヌルで終わる文字列へのポインタです。
0443デフォルトの名無しさんNGNG
>Char が汎用文字型であり,これはAnsiChar と同じです。Char の実装は変更される
>可能性があるので,サイズの異なる文字を処理する可能性のあるプログラムを作成する
>ときは,ハードコーディングした定数を使用するかわりに標準関数SizeOf を使用した
>ほうがよいでしょう。

ヘルプより抜粋
0444デフォルトの名無しさんNGNG
ま、よってバイト数が固定されることが保証される文字を扱うには、
AnsiChar型、UCS2Char型、UCS4Char型のいずれかを使いなさい、ってこった。

文字列やポインタについても同じ。
String型やPChar型の実装は、コンパイラ依存ですよ>>442
確実に8ビット文字列のポインタを扱いたければPAnsiCharを使うのが正解。
0445デフォルトの名無しさんNGNG
こんなスレあったんだ…。
0446デフォルトの名無しさんNGNG
> よってバイト数が固定されることが保証される文字を扱うには、

質問者は「バイト数が固定されることが保証される文字を扱うには」とは
言ってないよ。あんたが勝手に思いこんでるんでは?
0447デフォルトの名無しさんNGNG
PAnsiChar をつかうんなら、文字列も AnsiString にしておかないとね。
String 型に対応するのは汎用型の PChar じゃないの?
0448デフォルトの名無しさんNGNG
> String型やPChar型の実装は、コンパイラ依存ですよ>>442

だから PChar が正解なんでは
0449デフォルトの名無しさんNGNG
>>446
質問者っつーか、442が間違いとも取られかねない発言をしているのに対しての意見じゃないの?

>>447
それはケースバイケースでしょう。
少なくとも、例えばフォーマットの固定されたファイルから文字列をコピーする
時なんかは俺はちゃんとAnsiStringにしてるが。
内部で一時的に記憶する文字列は汎用のStringで一応使い分けている。
0450デフォルトの名無しさんNGNG
>>449
あのね、PChar をつかうより PAnsiChar をつかえ、とか偉そうに説教してるのが
いるでしょ。そもそも質問者は型なしポインタをつかってるのよ。なにを指して
るのかわからんけど。だから一般的には、PChar でも PAnsiChar でも正解なんか
ないのよ。

>>444 確実に8ビット文字列のポインタを扱いたければPAnsiCharを使うのが正解。

「確実に8ビット文字列のポインタを扱いたければ」なんて誰もいってないの。
そもそも文字列のポインタかどうかさえ分からないんだから。

あなたがどう使い分けてるかは関係ないの
0451デフォルトの名無しさんNGNG
> そもそも文字列のポインタかどうかさえ分からないんだから。

string → PChar
AnsiString → PAnsiChar
一般的なバイナリ → PByte
Integer の配列 → PInteger
レコード型の配列(例えば TRect の) → PRect
......

というふうになるんじゃないの

0452デフォルトの名無しさんNGNG
Delphi.NETへのポータビリティ無視した妄想の議論は無意味だな
0453デフォルトの名無しさんNGNG
> Delphi.NETへのポータビリティ

笑わせるなよ(爆笑
0454デフォルトの名無しさんNGNG
基本型と汎用型を混同している奴がいるな・・・本当に中級スレ?
IntegerとLongint、CardinalとLongWordとかも混同して使ってるんだろうな・・・
0455427NGNG
なんか話が大げさになってしまってますね(滝汗)

みなさんの回答で一応解決しました、ありがとうございます

結局こう使いたかったんです

p := '$64FA6C';
ReadProcessMemory(hProcess,Pointer(StrToInt(p)),PC1,4,numRead);
0456デフォルトの名無しさんNGNG
元が文字列なのにはなんか意味あるのか?
0457デフォルトの名無しさんNGNG
>>456
たぶん、ゲームなんかのデータ変更ツールを作ってるんだよ。
で、誰かがどこかに流してるデータを・・・
0458デフォルトの名無しさんNGNG
他プロセスのメモリの内容を読みとるのね。アドレスを絶対値(リテラル)で指定して
大丈夫なんだろうか?
0459デフォルトの名無しさんNGNG
WindowsではEXE は同じアドレスにロードされるから大抵は大丈夫。
ロードアドレス以外も、大抵は毎回同じ。
だからバッファオーバランとかにとても弱い訳だ。
0460デフォルトの名無しさんNGNG
> WindowsではEXE は同じアドレスにロードされるから大抵は大丈夫。

そなの? ベースアドレスが同じ指定の異なるアプリを起動したときはどうなるの?
0461デフォルトの名無しさんNGNG
あっ、そうか、仮想アドレスなのかな
0462デフォルトの名無しさんNGNG
>>459
(゚Д゚)ハァ?
0463427NGNG
質問です。

UWSCというソフトをご存知でしょうか?↓
http://www.vector.co.jp/soft/win95/util/se115105.html

このソフトはマウスやキーボードの動きを記録して
再生することができるんですが
マウスクリックはどうやって実現されているのかがわからないんです。

マウスを動かすことまではできたんですが、よろしくお願いします。
どうやったかは以下のソースのようにしました。

procedure TForm1.Button5Click(Sender: TObject);
var
hCalc: HWND;
Rect: TRect;
begin

hCalc := FindWindow(nil, '電卓');
GetWIndowRect(hCalc,Rect);
SetCursorPos(Rect.Left+23,Rect.Top+79);
sleep(3000);
sendmessageA(hCalc, WM_LBUTTONDOWN, 0, 0);
sleep(10);
sendmessageA(hCalc, WM_LBUTTONUP, 0, 0);

end;

サンプル的に電卓の16進数のラジオボタンをクリックするようにしてみたんです。
なにがだめなんでしょうか?
0464デフォルトの名無しさんNGNG
>>463
procedure TForm1.Button5Click(Sender: TObject);
var
  hCalc: HWND;
  Rect: TRect;
  hButton: HWND; //追加
begin
  hCalc := FindWindow(nil, '電卓');
  GetWIndowRect(hCalc,Rect);
  SetCursorPos(Rect.Left+23,Rect.Top+79);
  hButton := WindowFromPoint(Point(Rect.Left+23,Rect.Top+79)); //追加
  sleep(3000);
  sendmessageA(hButton, WM_LBUTTONDOWN, 0, 0); //修正
  sleep(10);
  sendmessageA(hButton, WM_LBUTTONUP, 0, 0); //修正
end;
0465デフォルトの名無しさんNGNG
Del用のCodeGuardみたいなツールって無いんでつか?
0466デフォルトの名無しさんNGNG
BoundsCheker買え
0467デフォルトの名無しさんNGNG
>>466

Del用はDel2用以降死滅して居るんだが。
0468デフォルトの名無しさんNGNG
Cheker ですよ?
0469デフォルトの名無しさんNGNG
CodeGuard買ったが、その後、ぜんぜんメンテナンスやらねーんだよな。
Delphiは文法的に完全的と思うなら、コードガード買わせるんじゃねーよ。
0470デフォルトの名無しさんNGNG
完全的
0471デフォルトの名無しさんNGNG
Pascalだけは絶対言い残させないと。
0472デフォルトの名無しさんNGNG
Delphiでアプリのオプション設定のような、フォームを書いているときに、
Edit1.Enabled := false;
Edit1.Color := clBtnFace;
みたいに、入力できないコントロールの表示をいちいち変えるのが面倒で、
Enabledがfalseになったら、自分の色を変えるようなコンポーネントを書きました。
(単に、Enabledのプロパティ変更時に、自身のColorプロパティを変更)

で、こんどは、グループとか、パネルのEnabledの設定変更にあわせて、
子コンポーネントのEnabledの設定変更が呼ばれるようにしたいと思うんですが、
こういうのって、TCustomGroupBoxとか、TCustomPanelとかを継承して、
継承したコンポを使うしかないんですかね。

なんか、筋が悪いような気がするんですけど。

#そもそも、コンポの色変更をするほうも、
#Enabledのプロパティ変更(SetEnabled)を、オーバーライドすればいいのか、
#CMEnabledChangedの方をしたほうがいいのかってのもよくわかんない...

おしえて、VCLの偉い人!

0473デフォルトの名無しさんNGNG
CM_COLORCHANGED でフックをかければどう?
0474デフォルトの名無しさんNGNG
TAction.OnUpdateに常時監視させるのも手かな
0475デフォルトの名無しさんNGNG
引数にTWinControlとEnabled状態をとる関数作って、それで処理しる
0476デフォルトの名無しさんNGNG
こんな手続きをつくってみた
procedure EditEnable(Edit: TEdit; Enabled: Boolean);
begin
Edit.Enabled := Enabled;
if Enabled then Edit.Color := clWhite
else Edit.Color := clBtnFace;
end;
あんまり綺麗にならなかった_| ̄|○
しかも、質問に答えてねぇ
0477デフォルトの名無しさんNGNG
>>476
さらに脇道にそれるが、
Edit.Color := IfThen(Enabled, clWhite, clBtnFace);
0478デフォルトの名無しさんNGNG
三項演算子がそんなに珍しいのか?
0479デフォルトの名無しさんNGNG
>>472
パネルのEnabled を変更したら自動的に子供も変更されなかったっけ?

作った方のコンポーネントから、親の CM_ENABLEDCHANGEDをフックして処理すればいいんじゃないの?
そうすれば親のコンポーネント(パネル)には手を付けなくていい。

あるいは、逆に非表示コンポーネントを作って、パネルの COLORCHANGED をフックして
乗ってる子コントロールの色を全部変更してしまえば・・・ってのは既に >>473が書いてるのかな?
0480デフォルトの名無しさんNGNG
ここでいうフックっていうのは、
WindowProcプロパティを自分のインスタンス内に保存(SaveWindowProc)した上で
自分のメソッドに置き換えて、
自分のメソッド内で ENABLEDCHANGEDなら処理してそれ以外なら SaveWindowProcの方を呼ぶってことね。

で、サブクラスをするコンポーネントを使う時は
( ゚Д゚)ノ Delギコ猫のプログラミング相談室part2 http://piza2.2ch.net/tech/kako/999/999482946.html 928

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で判断する事
0481472NGNG
いろいろ、どうもです。
コンポいじりというか、DELPHIもまだまだ初心者(←3項演算子も知らんかったくらい)なので、
とっても参考になります。

できれば1度作ったら、あとは張るだけでいいようなものを目指してますので(できるん?)、
ちょっと時間をとって、メッセージの流れを追ってみたいと思います。
すぐ試せそうにはないんですが、それなりにできたら、経過を投げますね。

ありが�dございました。_o_
0482デフォルトの名無しさんNGNG
>>481
フォームに貼り付けたら、フォーム上の全部のTControlのメッセージフックをして
自分の思うスタイルを実現するっていう非ビジュアルコンポーネントを作れば出来るよ。

仕掛けそのものは簡単だけど、フックしてるから、コンポ設計中につけ外しされた時の処理
(これはパネルやフォームにCM_CONTROLCHANGEとかのメッセージが来る)
をしっかり考えとかないと、IDEが暴走して悲しい事になる。

でも、そこらへんを考えるのが一番面白いよね。
0483デフォルトの名無しさんNGNG
半日くらい調べて結局判らなかったので質問させてください。

やりたい事は、現在開いているウィンドウに対して、マウスによるD&D以外で
ファイルを渡す事です。

D&Dが可能なアプリケーションを列挙して選択させるようなフリーソフトが
あったりしますが、どのように処理しているのでしょうか?
それもソフトによって微妙に表示されるアプリが違ったりするので、いくつかの
アプローチがあるのかと思いますが・・・。

また、全然別のアプローチでも構いませんので、なにかいい方法があれば
教えていただけませんでしょうか?
0484デフォルトの名無しさんNGNG
追記。

WM_DROPFILE捕まえたりとか、OLEつかったD&Dの処理なんかはできています。
0485デフォルトの名無しさんNGNG
言っていることがよくわかりません。
そのフリーソフトとやらを紹介してくれれば少しは分かりやすくなるかも
>マウスによるD&D以外で
以外って言われても困ります。もっと具体的に
0486デフォルトの名無しさんNGNG
>>483
つまり、D&Dをサポートしたアプリに、 WM_DROPFILE を自分が送り付けてやりたいという事かな?
でも、WM_DROPFILEだけ送りつけても その後そのアプリがシェル API呼ぶからダメだと
0487デフォルトの名無しさんNGNG
OleDropTargetInterface と WS_EX_ACCEPTFILES で列挙。
あとはそのインターフェイスを呼び出すかメッセージ送ればいいんじゃない?
0488デフォルトの名無しさんNGNG
DFとか、PyxisやSpringMやCraftDropあたりでしょうか。
ドロップもしくはドロップオープン、といった感じの名称の機能で、キーボードでD&Dを
エミュレートする機能です。

ウィンドウを列挙するのはいいとして、そのウィンドウがD&Dに対応しているかどうかの
判断をどのようにしているのかな、と。
そして、判断できたとして、WM_DROPFILESはどうやって送るのかな・・・と思いましたが
これは情報が発見できました。
また、WM_DROPFILES送る以外に何か方法はないのか、とか・・・。
0489デフォルトの名無しさんNGNG
>487
おお!まさにそれっぽい・・・
検索するとうんじゃり出てきますねー。どうして見つからなかったのか・・・。

OleDropTargetInterfaceのほうは余り情報なさそうですが、ちまちま調べてみます。
どうもありがとうございましたー。
0490デフォルトの名無しさんNGNG
ScriptControl (ActiveX)使って自分のアプリをスクリプトにいじらせたいんだけど、
スクリプトにForm1を引き渡す処理がうまくできないっす。

AddObjectっていうメソッドがうまくやってくれそうなんだけど、
いまいちうまく動かない。どっかDelphiでScriptControl使ってる例ないですか?
0491490NGNG
あ、追記。

試したソースはこんな漢字。

procedure TForm1.Button1Click(Sender: TObject);
begin
  ScriptControl1.AddObject('Form1', Form1, true);
  ScriptControl1.ExecuteStatement(Memo1.Text);
end;

これをコンパイルしようとすると、「IDispatchとTFormには互換性がありません」
って言って怒られる。

でもVBでScriptControl使ってる例では、特に小細工なしにFormぶち込んでOKみたいだし、
IDispatch調べようとしたらなんかCOMの深い世界に行きつくらしいし、
どっちの方向に進めばいいかわからないです。

教えてエロの人
0492デフォルトの名無しさんNGNG
>>490 VBが フォームそのまま使えるのはVBのフォームがIDispatch持ってるから
Delphiでは そのままという訳にはゆかない。
0493490NGNG
>>492
O.K!じゃあ、さっそくIDispatchとやらをForm1につけてやろう。

type
  TForm1 = class(TForm, IDispatch)
・・・・

コンパイル通った。Goooood!!!
よっしゃ、さっそくいじくりまわしてやるぜ!
とりあえず

Form1.Caption = "test"
↓
エラー:
このオブジェクトではサポートされていない操作です Form1.Caption

ヽ(`Д´)ノ
0494デフォルトの名無しさんNGNG
'test'
0495490NGNG
>>494

いや、上のコードはScriptControl上のVBScriptに書いてるコードだから、
文字列のリテラルは "test" でいいのよ。
(正確に言うと、Memo1.textに書いているVBScriptのコードを
ScriptControl.ExecuteStatementに引き渡している。
説明不足でした。すんません)

あといろいろいじってみたんだけど、
どうやら AddObjectで渡された'Form1'は何者か知らないけど、オブジェクトなんだろう
ということは認識しているらしい。 ScriptControl君は。

いろんなコードを引き渡して観察してみると・・・

Msgbox "test" → OK
Msgbox Form1.Caption → 「このオブジェクトではサポートされていない操作です」
Msgbox hoge.Caption → 「オブジェクトがありません」

というわけで、かろうじて名前は認識しているらしいが、彼にもっとものを教えるにはどうしたら・・
0496デフォルトの名無しさんNGNG
>>495
フォームじゃなくて、オートメーションオブジェクトを渡す
 or
IDispatchのメソッドを自力で実装する

Delphi中で、OleVariant経由で操作できるものじゃないと、渡しても意味がない
0497Delフサギコ ◆A6VzDeLphI NGNG
     ∧,,∧,,,,,, )      (´⌒(´
  ⊂ミ゚Д゚⊂,,,,,,,`つ≡≡(´⌒;;;≡≡≡
ズザーーーーーッ    (´⌒(´⌒;;

やってみたんだけど、ものすごい簡単に
アプリにVBScriptが搭載できるんですね。

MsgBoxで出力するのは出来たのですが
この中で計算させた値を
変数に代入するにはどうしたら…??

Form1.FValueに代入するのも
やっぱり>>496の書きこみみたいのを
実装しなきゃだめ?
0498デフォルトの名無しさんNGNG
>>497
( ̄ー ̄)
0499Delフサギコ ◆A6VzDeLphI NGNG
     ∧,,∧,,,,,, )      (´⌒(´
  ⊂ミ゚Д゚⊂,,,,,,,`つ≡≡(´⌒;;;≡≡≡
ズザーーーーーッ    (´⌒(´⌒;;

http://www.delphidevelopers.com/learnbooks/Scripting_your_Delphi_Application.htm
このあたりかニャー
0500470NGNG
そいつはEvalメソッドでできるすけどYO

procedure TForm1.Button2Click(Sender: TObject);
begin
  Caption := ScriptControl1.Eval(Memo1.Text);
end;

アプリケーションをコントロールさせたり、
例えば自前のオブジェクトをコントロールさせたりするには、
やっぱり >>496を実践しなきゃいけないようです。

http://www.delphidevelopers.com/learnbooks/Scripting_your_Delphi_Application.htm

↑では「新規作成のActiveXウィザード使えば簡単ヨー」なんて言ってますが、
俺はDel6Personal使いです。そんなメニューありません。
_| ̄|○ < IDispatch自力実装? なんか、ムチャっぽいすよ・・・ COMスレ見てると。
0501デフォルトの名無しさんNGNG
きっと、世界のどこかに コンポーネントを指定したら publishedメンバーがアクセス出来るような IDispatchクラスがあるに違いない。

無ければ作れ。
0502デフォルトの名無しさんNGNG
rubyのApolloやら、DMonkeyが似たようなことやってるから、お前もがんばれ
0503デフォルトの名無しさんNGNG
ライブラリはそろっているので、ソースがあれば D6Personal でも動かせるのだが、
Wizard がない。ってことがあれだな。
誰かに雛形ソースを作ってもらって後は手でメンテナンスかな?

手元に Personal 版がないのでどこまでやってあげればいいのかわからない。
0504490NGNG
>>499のページと、あと

http://www.wwlnk.com/boheme/delphi/techdoc/dad0030.html

なんか参考にして作ってみた。

ComObjユニットにあるTAutoObjectっていうクラスが、あらかじめIDispatchを実装しているらすぃ。
なので、TAutoObjectと、自分が実装したい機能を持ったインターフェースをくっつけて、
新しいクラスを作ればとりあえずOK?みたいな?

uses にComObjを追加

IExposingObjectsDemo = interface
  function Get_Age: Integer;
  function Get_Name: OleVariant;
  procedure Set_Age(Value: Integer);
  procedure Set_Name(Value: OleVariant);
end;

TExposingObjectsDemo = class(TAutoObject, IExposingObjectsDemo)
  function Get_Age: Integer;
  function Get_Name: OleVariant;
  procedure Set_Age(Value: Integer);
  procedure Set_Name(Value: OleVariant);
end;

続く・・
0505490NGNG

で、あとは>>499に書いてあるのを多少自分の環境にあうように改変して実行!!

→エラー:
TExposingObjectsDemo クラスの オブジェクトファクトリがありません

(・∀・) ダメポ!!

むずかしいなあ・・・それにしても、COMってググりづらくねえすか?

>>501
それかっこいいよ。アッツいよ。
最終目標はそういうコンポの作成だな。

>>502
Apolloいじってみた。
すげーよ!まさにコレやりたかったんだよぅ。
Apolloのソースで勉強するかぁ

>>503
ええ、動くソースさえあれば、壊しながら勉強しますとも
サンプルくれるの? (゚-゚ ) ←期待でいっぱいの目
0506デフォルトの名無しさんNGNG
>>504
まず、タイプライブラリが必要
ほら、ActiveXを読み込むと xxx_TLB.pas が出来るでしょ?アレ。 アレを真似する。
interfaceで公開したいのと同じ名前の dispinterface を作る。で、それに dispid を付けてゆく。
これが無いと、外部からメソッド名が判らないでしょ?

あと、メソッドはsafecallにするのと GUIDを付ける GUIDはinterfaceと dispinterface で同じにする


>>505
>ExposingObjectsDemo クラスの オブジェクトファクトリがありません
initialization
TAutoObjectFactory.Create(ComServer, TExposingObjectsDemo, CLASS_xx, ciInternal);
なんてのを書けってエラーだと思うよ

http://www.wwlnk.com/boheme/delphi/techdoc/dad0080.html
ここの サーバーアプリケーションのコード を参考に
0507デフォルトの名無しさんNGNG
>COMってググりづらくねえすか?
xxx.com に引っかかる。って話かな?

.net も検索しづらいし。キャッチーな宣伝文句だったんだろうけど。
0508デフォルトの名無しさんNGNG
>>505

>>501の方向がやりたいなら、TAutoObjectを使わず IDispatchを自前でサポートする必要があると思うぞ
0509デフォルトの名無しさんNGNG
>>507
COMは一般的な単語のため検索には使われません。

と言う恐ろしいwarningを出してくれる。
0510デフォルトの名無しさんNGNG
COMとか.NETとか…なんか恨みでもあるんか。
0511デフォルトの名無しさんNGNG
delphi5でプログラム開発しているんですが
普通のプログラムはちゃんとデバッグできるんですが

マルチスレッドのプログラムをデバッグしようとして、「カーソルの位置まで実行」などで
ブレークポイントで停止させると delphi自体がハングアップして
デバッグできないのですが 
マルチスレッドのプログラムはデバッグ不可能なのでしょうか。

0512デフォルトの名無しさんNGNG
>>511
Del6でやってましたが止めてるスレッド以外は動いてたりして結局ややこしくなります。
0513デフォルトの名無しさんNGNG
>>510
ネットでの検索をしにくくして書籍を買わそうという魂胆
とか言ってみる
0514511NGNG
>>512
やっぱりスレッドのデバッグは、ムリみたいですね。
(ブレークポイントで停止しても、delphi自体がハングします)

そこで一時的にスレッドのユニットをシングルのユニットにしたら、
ちゃんとデバッグできました。

そうするとスレッドのユニットにはあまり複雑な処理を記述せず、
ほとんどのロジックを普通のユニットとして作成して
スレッドのユニットはそれらのユニットを呼び出すだけの処理に
する必要がありますね。
0515デフォルトの名無しさんNGNG
>>514
ひょっとしてDirectX使ってたりしてる?
0516デフォルトの名無しさんNGNG
NT系だとマルチスレッドのデバッグでも問題なかったと思うけど、
どうなんでしょう
0517514NGNG
>>515
DirectXは使ってません。

pradoxのデータベースを使っています。

osはXPを使ってます。

原因は結局、0での割り算だったんですが、マルチスレッドのままで
デバッグしようとすると、ブレークポイントで停止しても、delphiがハングアップして
しまいます。そして、普通アプリがハングしてもXP自体の再立ち上げは不要なんですが
このdelphiのハングアップの場合は、もう一切の操作をXPが受付なくなります。
再立ち上げしか方法がない、でもアプリでこんな目に会ったのは何年もXP使っているけど
初めてです。
また何回かはブレークポイントで停止し、ハングするのが一定の箇所でなかったため
マルチスレッドのままデバッグしようとしてまる2日も原因究明にかかりました。
(疲れた)
0518デフォルトの名無しさんNGNG
>>513
テストはやめですか?
0519デフォルトの名無しさんNGNG
>>511
FAQ
詳細なテキストサービスをオフに汁
0520デフォルトの名無しさんNGNG
>>517
て言うかスレッドで発生する未キャッチの例外ってたまに通知してくれない気がする。
0521デフォルトの名無しさんNGNG
質問です。

[Windows] + [M]ですべてのウインドウを最小化できると思いますが、
それによって発生するイベントというのが見つかりません。
お心あたりないでしょうか?代替手段でもOKです。

Application.OnMinimize
FormのWM_SYSCOMMANDのSC_MINIMIZEをキャッチ

ではダメでした。
0522デフォルトの名無しさんNGNG
EnumWindowsで取得したウィンドウに手当たり次第WM_MINIMIZE送りつけるとか。
これそのままではヤヴァイので、最小化して良いウィンドウか判別しなければならないが。
0523デフォルトの名無しさんNGNG
>>522
タスクバー(appbar)的なプログラムをDelphiで書いていて、ユーザが[Win] + [M]を押しても
巻き添えにならない方法を探しているんです。
0524デフォルトの名無しさんNGNG
拡張子scfを持つテンポラリファイルを作って、
それに「クイック起動」にある「デスクトップの表示」の中身を書き込んで、
ShellExecuteで実行すれば実現できるけど、
これでは不満なんだろ?
0525デフォルトの名無しさんNGNG
>>523
AppBar にするとよいのでは。参考になると思ふ。

http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=051302
0526デフォルトの名無しさんNGNG
>>525
appbarにはしてます。
でもアレってTApplication.Handleを設定するのが筋っぽいですよね。
で、このリンクだと思うのでちょっと呼んでみます。
0527デフォルトの名無しさんNGNG
>>523
釣りと思いつつ、そんなことやっていたら、Winではなくなるだろうが。
変なの
0528デフォルトの名無しさんNGNG
>>527
多くのランチャはタスクバーからの整列や最小化などには追随しないようにできている。
ちゃんとした Windows の作法がある。それが AppBar アプリ。
0529デフォルトの名無しさんNGNG
>>527
タスクバーはWindowsアプリではないってこったな。タダのcoolbarなんだけれど。
0530デフォルトの名無しさんNGNG
Winの作法、Macの作法それを守れないなら、プログラム作るなよ。
バカヤロ。
0531デフォルトの名無しさんNGNG
>>528
いくつかの優秀なグラフィックソフトやオーディオシーケンサを否定する発言ですね。
0532デフォルトの名無しさんNGNG
Macの作法をWinに持ち込んでいるから?
まあ、代え難い実績があるアプリは例外だろう。
0533デフォルトの名無しさんNGNG
>>531
君は集合論や論理学の初歩をしらないの。
ある機能を実現する正式な方法ある、と主張しているのが 528 だろ。
それ以外の方法では駄目とはいってないだろ?
0534デフォルトの名無しさんNGNG
>>533
自分を正当化するのに多大な労力をかけるより、素直に引っ込むなり謝るなりした方が
コストパフォーマンスは高いと思うが。
0535デフォルトの名無しさんNGNG
>>534
自己レスですか?
0536デフォルトの名無しさんNGNG
なぜだか一人熱くなってるイタイやつがいるな。527はなにをいいたいんだろう?
Delphi でランチャつくってはダメってことなんだろうか?
0537デフォルトの名無しさんNGNG
>>536
そうだよ。お前はMACにでも逝けば?
何、おまけにdelで作ってる?言語道断だな!
0538デフォルトの名無しさんNGNG
あっ、そういう人なんだぁ。
そうだよ、ってことはやはりイタイ人だと自覚してるんだね。
MAC だとDelphiでランチャつくれるの?
0539デフォルトの名無しさんNGNG
すみません、Macにはdelのような高価なコンパイラ無いからな。
只で使えるもので十分だし。済みませんでした。
0540デフォルトの名無しさんNGNG
すみません、ちょっとオフトピですが、まじめに....
MAC は友人が使っているとき画面を見たことがある程度です。
MAC 上ではメジャーなプログラミングツールは何ですか。言語はどの系統ですか。
0541デフォルトの名無しさんNGNG
CodeWarrierかね? C++もPascalも使える。しかもクロスプラットフォーム。
0542デフォルトの名無しさんNGNG
>>541
ありがとう。ちょっと興味がでてきました。539によるとタダでついてくるんだよね。
0543デフォルトの名無しさんNGNG
>>542
使えないとか言うよな。
インタフェースビルダーくらいは憑いて来るが、がんばれよ。
0544デフォルトの名無しさんNGNG
はい、すこし調べてみます。ありがとう
0545デフォルトの名無しさんNGNG
MACでタダで使える開発環境・・・
AppleScriptとOSXのgcc・・・?

で、なんの話だっけ?
0546デフォルトの名無しさんNGNG
Windows の AppBar について。
0547デフォルトの名無しさんNGNG
面倒くさいのでVC++で組み直すことにしました。
アルゴリズムは十分移植可能なので。
0548デフォルトの名無しさんNGNG
Win32APIをコールするアルゴリズムを教えてください。
0549デフォルトの名無しさんNGNG
VC++ だと面倒くさくないの? Delphi の方がずっと簡単だと思うが。
0550デフォルトの名無しさんNGNG
>>549
そう言う変な動きに対しての気遣いが少なくて済む。
メイン画面はDCが一枚あればいいので大して難易度は上がりません。
0551デフォルトの名無しさんNGNG
やっと規制解除さえた(´ω`)=3

>>521
WM_WINDOWPOSCHANGING見れ。
Win+M, +Dは最小化ではなくて画面外にウィンドウを移動させてる。
0552デフォルトの名無しさんNGNG
>>551
ありがたいです。

しかしながら、挫折して云年、久々に触るVC++はなんともわかりやすく、コレで一度戦ってみようと思います。
ダイアログベースにするだけでCTRL + M対策ができたりとか素直なので。


画面外に移動は良いんですがタスクバーのボタンで元の位置に戻るってのはWindowsさんが
親切でやってくれるんでしょうか。
0553デフォルトの名無しさんNGNG
>>551
イベントは取れるようになりましたがWin+Mに対して踏みとどまれません。
LParamのポインタに対してごにょごにょしたりMoveWindowを呼んでも消えてなくなりやがります。
0554デフォルトの名無しさんNGNG
ダイアログベースにしたらいけるなら、Delphiでダイアログアプリに・・・まあ素直にVC++かな
0555デフォルトの名無しさんNGNG
みんなデータベースは使わないんだね…
データベースを使わなきゃ仕事にならないおいらとしては
VC++の方が効率がいいなどということは有り得ないわけで…
0556デフォルトの名無しさんNGNG
Delphiのユーザでお仕事モードの人は少ないんじゃないの?
DBクライアントのフロントエンドなら、Delphiは便利かもね。でもそれ専用の
ツクールアプリみたいなのもあるんじゃないの?知らないけど。
0557デフォルトの名無しさんNGNG
>>556
知り合いの会社はAccessを使ってるらしいよ。
UIの自由度やら配布のしやすさを考えるとDelphiの方に分があるのは明らかなんだけどね。
大きな会社ほどM$製じゃなきゃ駄目なんだと思うと少し気の毒な気もする。

VS.NETでもあんまり状況は良くなってないし…
(DB用の部品を「買えば」いいらしいけど)
0558デフォルトの名無しさんNGNG
> 大きな会社ほどM$製じゃなきゃ駄目なんだと思うと少し気の毒な気もする。

いや、それで間に合ってるんならそれでいいのでは?
なぜ気の毒になるのか分かりません。ごちゃごちゃプログラムつくらなくても
既製品で間に合うなら、それでいいのでは?

> UIの自由度やら配布のしやすさを考えるとDelphiの方に分があるのは明らかなんだけどね。

「UIの自由度やら配布のしやすさ」より優先すべき重要なことがあるんだね、きっと。
0559デフォルトの名無しさんNGNG
単純にその会社のデファクトスタンダードがMSと言うだけだと思われ。

大きな会社->設計フェーズでぐいぐい意見を通すことができる->自社のデファクトスタンダードを採用。
小さな会社->大きな会社からの仕様書->いろんなOSなりアプリ。

例えばうちでは独自OSかHP-UX、TurboLinux以外は認められません。
AIXとか口走ったら会社が揺れます。多分。

去年からメーカ系で働いてるけどなんか凄いです。

「せんぱい〜。ここの仕様ってわかりにくくないですか?」
『ああ。適当に解釈して仕様書改訂しといて。』
「(・・・いや、他社が作ってる通信相手どうすんだよ。)」

とか、

「(あ、この通信エラーって俺が悪いんだよな)ああ、仕様の相違がありますね・・・。」
『あ!すぐに直しますんで!!』
「(いや、なんであんたが・・・)お願いします。」

怖いね。力って。
0560デフォルトの名無しさんNGNG
氏ね
0561デフォルトの名無しさんNGNG
自作フリーソフトのメインのpasが、13000行を突破・・・。
そしてまだまだ書くことはたくさん。なんとかならんもんか・・・。
0562デフォルトの名無しさんNGNG
そろそろ機能分割すべきでしょうね。
0563デフォルトの名無しさんNGNG
Unit1.pasに全部書いちゃいました。【現在1万行】
http://pc2.2ch.net/test/read.cgi/tech/1064424521/
0564デフォルトの名無しさんNGNG
>いや、それで間に合ってるんならそれでいいのでは?
>なぜ気の毒になるのか分かりません。ごちゃごちゃプログラムつくらなくても
>既製品で間に合うなら、それでいいのでは?
全然間に合いません。
結局、VBAで開発するわけです。
0565デフォルトの名無しさんNGNG
> 結局、VBAで開発するわけです。

いや、だからそれでいいんでは?
0566デフォルトの名無しさんNGNG
VBAの方が
「ごちゃごちゃプログラムつく」る必要があると
思いませんか?
0567デフォルトの名無しさんNGNG
そう思わないひとの方がおおいし、それで間に合ってるならいいのでは?
どうしてもDelphiでつくりたいならつくればいいんだし。>>557 のように
気の毒に思うのはどうか、ということから始まっているんだよ。
0568デフォルトの名無しさんNGNG
┐(´ー`)┌
0569↑(´∀`)NGNG
ごちゃごちゃの基準も曖昧だしな。

まぁ、他人のコードバカにする暇があったら満足度の高い成果物を作れと。それが正義だ。
0570デフォルトの名無しさんNGNG
おれがマサヨシだ。
0571デフォルトの名無しさんNGNG
> まぁ、他人のコードバカにする暇があったら満足度の高い成果物を作れと。それが正義だ。

ユーザの多い方が正義だと思いますよ。(藁
0572デフォルトの名無しさんNGNG
"自己"満足度
0573デフォルトの名無しさんNGNG
> "自己"満足度

あぁ、なるほど。ひとりでするアレと同じですね。(藁
0574デフォルトの名無しさんNGNG
以下をMMX で高速化できないものでしょうか?

var
BufX,BufY:array[0..16500] of integer;//座標と色を保持した構造体
wRGB:array[0..16500,0..2] of Byte;

0575つづきNGNG
procedure TForm1.MMXDraw(cY1,cY2,m:integer);
var
j,i,r,y,x:integer;
v:array[0..2500] of PByteArray;
begin
for j:=0 to (cY2-cY1) do begin
y:=cY1+j;
v[y]:=BmpB.ScanLine[y];//まとめてポインタ先に保持
end;

for i:=0 to m do begin
y:=BufY[i];
x:=BufX[i]*3;//RGB 3バイト単位

   // BmpB.Canvas.FillRect(Rect(x,y,2,2));以下相当の処理

for r:=0 to 1 do begin 
v[y+r,x ]:=wRGB[i,0];
v[y+r,x+1]:=wRGB[i,1];
v[y+r,x+2]:=wRGB[i,2];
v[y+r,x+3]:=wRGB[i,0];
v[y+r,x+4]:=wRGB[i,1];
v[y+r,x+5]:=wRGB[i,2];
end;

end;
end;
0576デフォルトの名無しさんNGNG
塗り潰しのように大量のメモリアクセスの発生する処理は、あんまり速くならないよ。

MMXでなくとも
折角2ピクセル毎に塗ってるんだから、4ピクセル一度に塗ったら?
つまり 3ワード分一度に塗るように変更すれば 3/12 =1/4になるよ・・・・
・・・・塗る場所が広いと結局メモリアクセスに引っ張られて変わらんのだよね
0577デフォルトの名無しさんNGNG
prefetchしとけ
0578デフォルトの名無しさんNGNG
塗り潰しだから読み込みはしていない。 書込みの前にフェッチしたら、余計に遅くなるわな
0579デフォルトの名無しさんNGNG
スプライト高速化に使えるらしいよ>MMX
0580ななしへたぐらま ◆XcB18Bks.Y NGNG
>>574-575
ループの中で2次元配列の同じ要素へ[]を使って何度もアクセスするのをやめてポインタを使うようにしたり,
ピクセルをRGB個別ではなく一括で転送すれば多少は速度が上がるようです(一応実験しました).

今回のコードをCPUウィンドウをのぞいてみたら
1バイトを転送するための処理が非常に長いばかりか毎回Push/Popしていました.
0581デフォルトの名無しさんNGNG
>>576
delphiの場合、Pentium3やPentium4では、確実に早くなるぞ。

なぜかというと、P3以後ではフェッチされるバス幅、
および、ライトコンバイニングバッファが32ビット(=4バイト)ではなく、
32バイト単位(P4では64バイト)なので、使用するデータ幅が大きいほど、
バス効率が上がるから、CPUのロードバッファ、ストアバッファの負担が下がる為。
P4以後でSSE2命令のレイテンシがMMX命令より悪くても、
MMXより高速化できる場合があるのはこの為。

プリフェッチもひとつの手段だが、CPUごとにプリフェッチの時間距離計算を
変える必要が出たり、色々不定要素が絡むので難しいぞ。
0582デフォルトの名無しさんNGNG
>>581
ふむ、わしには理解できぬ
0583デフォルトの名無しさんNGNG
>>581
よく読んでやれよ
塗る場所が広ければと書いてる つまりはキャッシュが溢れたら メモリ書込速度のみに調速される。

それから、 プリフェッチについては >>578
0584デフォルトの名無しさんNGNG
ようしらんけど書き込みって一次キャッシュ経由じゃないの?
一バイトずつ書き込んだら一バイトずつ物理メモリに書き込まれる?
0585デフォルトの名無しさんNGNG
1バイトづつ書いたら、読み出しサイクルがタマに発生するんじゃないのか
0586デフォルトの名無しさんNGNG
復旧記念パピコ
0587デフォルトの名無しさんNGNG
Y < 0
DX > 0
DY > 0
DX > DY
のとき、ループを使わないで C を求めたいのですけれど、どうすればいいのでしょうか?

var
 Y, C, DX, DY, S: Integer;
begin
 C := 0;
 Y := -34;
 DX := 1252;
 DY := 92;
 S := DX shr 1;
 while True do
 begin
  Inc(C);
  Dec(S, DY);
  if S < 0 then
  begin
   Inc(S, DX);
   Inc(Y);
   if Y >= 0 then Break;
  end;
 end;
end;
0588デフォルトの名無しさんNGNG
おまいが何をしたいのかがさっぱり解からん
0589デフォルトの名無しさんNGNG
高速化のため、ループ無しで C を求めたいのですよ。
C := Trunc(DX / DY * -Y);
S := S + -DY * C + DX * (-Y);
これじゃだめです。
0590ななしへたぐらま ◆XcB18Bks.Y NGNG
確かにCが何なのかの説明がないとサパーリですね.
0591587NGNG
説明不足でした。
本当はSを求めたいのです。

if の中は -Y回実行されるので、S に DX * (-Y1) が追加されます。
後は Dec(S, DY) が何回実行されるか解れば、Sが求まります。
つまり、S := S + -DY * C + DX * (-Y); になる

C にはループの実行された回数が入ります。
0592デフォルトの名無しさんNGNG
方程式たてればいいじゃない
Cがc番目ならYがy番目
S = (DX shr 1) + y*DX - c*DY ; if S<0 then inc(y)


最終的に
S =(DX shr 1) -Y*DX - C*DY

Sは必ず正 S>=0 で c=(DX shr 1) div DX まではyは変化しない
それ以上になるとおよそ y:c = DY:DX
これを S=0で解いてから、整数関係を調整したら?
0593587NGNG
>>592
そのやり方は理解できませんでした。
で、結局591を手直ししてできました。

C = ループ回数
DX * (-Y - 1) = 最後のifブロック実行前のSの増加分
DY * C = 最後のifブロック実行前のSの減少分

S + DX * (-Y - 1) - DY * C < 0
C > (S + DX * (-Y - 1)) / DY
を満たす、最小の正の整数 C を求める。

(S + DX * (-Y - 1)) を A に置き換えると、
C > A / DY になる。

C := A div DY + 1;
となるので、
C := (S + DX * (-Y - 1)) div DY + 1;
0594587NGNG
また質問です。
こんどはループの回数が決まっている場合です。

Sの初期値 >= 0
DX >= DY > 0 のとき
ループを使わずに S の値を求めたいのですが、どうすればいいのでしょうか?

for I := 0 to C - 1 do
begin
Dec(S, DY);
if S < 0 then Inc(S, DX);
end;

ループを展開すると、

Dec(S, DY);
if S < 0 then Inc(S, DX);
Dec(S, DY);
if S < 0 then Inc(S, DX);
Dec(S, DY);
if S < 0 then Inc(S, DX);
...
C回繰り返す。
になります。
0595デフォルトの名無しさんNGNG
>>594
function hoge(C,DX,DY: Integer):Integer;
var
 p,r: Integer;
begin
 Result := S;
 r := C;
 if r = 0 then exit;
 Dec(Result,DY);
 Dec(r);
 p := Result div (DX
 if p = 0 then
  Dec(Result,DY*
 else
 begin
  Dec(Result,(D
  Dec(Result,DY*(r
 end;
end;
0596デフォルトの名無しさんNGNG
>595
ヴァカ?
0597デフォルトの名無しさんNGNG
どの辺が「ヴァカ」なのかすら、解らない…
0598デフォルトの名無しさんNGNG
>595
文字化け?
0599デフォルトの名無しさんNGNG
まぁ 594 あたりが「中級者」ではないことはよくわかった。
0600594NGNG
>>599
(DX や DY* の意味が解らなくてすみません。

 for I := 0 to C - 1 do
 begin
  Dec(S, DY);
  if S < 0 then Inc(S, DX);
 end;
↓
 for I := 0 to C - 1 do
  Dec(S, DY);
 for I := 0 to C - 1 do
  if S < 0 then Inc(S, DX);

が言えたらいいのですけど。
if S < 0 then が無ければ分割できるのですけど。
 for I := 0 to C - 1 do
 begin
  Dec(S, DY);
  Inc(S, DX);
 end;
0601デフォルトの名無しさんNGNG
他にも初級者の質問があるのに、どうして>>594は>>599から指摘を受けたのだろう…?

0602デフォルトの名無しさんNGNG
i:1..C 番目迄に何度 Inc(S, DX) が実行されたかを K[i] とする

S0 を初期値
K[0]:=0;
for i=1 to C do begin
 if S0 - i*DY + K[i-1]*DX < 0 then K[i]:=K[i-1]+1 else K[i]:=K[i-1] ;
 S[i] := S0 - i*DY + K[i]*DX
end;

 S[c] := S0 - c*DY + K[c]*DX

もし S0>c*DY なら K[c]:=0
そうでなければ、
  0=< S[c] <DX
0603デフォルトの名無しさんNGNG
Del6EntでTADODataSeを使ってるんですが、Nextメソッドが異常に遅いです。
CursorTypeなどのパラメータを変更してみたんですがどうにも改善せず、しかたな
いので現在は生のRecordsetを操作するようにしています。
スピードを比較したところ、TADODataSet.NextはRecordset.MoveNextに比べて
100倍時間が掛かっていました。
これはこういう物なんでしょうか?
0604デフォルトの名無しさんNGNG
つまり、一度でもS<0になったらループ終了後のSの値は 0<=S<DX になるって事か。
0605デフォルトの名無しさんNGNG
質問です。
VC++のように、リリースビルドとデバッグビルドを一気に生成する方法ってないのですか?
リリースチェック時とかにバグが見つかったりするたびに、オプション変更してコンパイルしなおすのが面倒です。
できれば、VCみたく、Release, Debugのように別フォルダにdcu/exe作ってくれるようにしたいのですが...
IDE使わずに、makeでも使えばできるのでしょうか??

皆さんどうされてます?
0606デフォルトの名無しさんNGNG
再コンパイルが速いから気にしない。
0607デフォルトの名無しさんNGNG
こんなの使ってみたら?
http://www.atozedsoftware.com/finalbuilder/
0608デフォルトの名無しさんNGNG
それほどディレクトリを複雑にしていないなら dcc32 -Uコンポーネントフォルダ hoge.dpr で作成出来ると思う
あるいはhoge.dprをフォルダ掘ってコピーを作っておいて、そのコンパイルオプションを別にするとか
0609デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1082177340/126
126 名前:デフォルトの名無しさん :04/04/17 16:16
これは明らかにDelphi対抗だ!!
0610デフォルトの名無しさんNGNG
>>605
IDEではできない。
makeかなんか使うしかない。
wantってのもある。
俺はantを使ってる。
0611605NGNG
フォローどうもです。>>皆様

そうですか、やはりmake/antですか...
特別IDEが好きだってわけじゃないですが、ちょっとばかり残念です。

業務で使ってると、
Debug/Releaseの話と、日本語DLLウィザードの使えなさ加減(*)は気になります。
もうちょっとなんとかしてほしいなぁ。

(*:日本語版だと謎のエラーが出るとか、
バイナリの出力パスに相対指定使っただけで、exe参照できないとか..
こいつもも、コマンドラインから指定できるのかな?
ついでに一緒に調べてみるかな..)

ほんと、Delphi自体はかなり好きなんですけどねぇ...

0612デフォルトの名無しさんNGNG
>日本語版だと謎のエラーが出るとか
それは D7 以降は仕様。D6 以前はバグ。細かく話すときりが無いが
生成された .RC に codepage(932) の一行を入れればコンパイルできると思うぞ
0613605NGNG
Delphi make dofでググって見たところ、なぜか情報がドイツ語ばかり...
http://www.dummzeuch.de/delphi/delphi_make/deutsch.html
http://www.sdgn.nl/Default.asp?A1PID=57PDGUH&A1SID=510423200447&URL=515PSXX
しかたがないので、とりあえず英訳サイトで英語に変換して、ちらちら読んでますが。

>>612
レスどうも。そうなんですか。
私の場合は、D7で、とりあえずコンパイルは通ってるんですけど、
ウィザード君が一発で終わらないのです。
0614デフォルトの名無しさんNGNG
もう少し、詳細を。D7 Pro?
どんな形でもいいからレポートしていかないと、結局何時までたっても直らないぞ。
0615デフォルトの名無しさんNGNG
「日本語版だと謎のエラーが出る」ってことかな?
なんてエラーメッセージ?
0616デフォルトの名無しさんNGNG
TClientDataSetをオンメモリDB(MyBase)として使っている方います?

フィルタHit全件Deleteしているんだけど、2回目以降フィルタ前後で件数が
合わない... そもそも2回目以降フィルタHit0件なのはナゼ... orz

初回Delete件数以上いなくなってしまったオレは人望なさすぎですか?(w

後で再現コード晒します。
0617デフォルトの名無しさんNGNG
>>616
各種バージョン情報もよろしく。
0618デフォルトの名無しさんNGNG
DelForExpソースフォーマッタを使ってみて、
ttp://www.dow.wau.nl/aew/DelForExp.html
日本語環境でフォームの大きさがくずれるので、Del7でビルドしようと思ったのですが、
ExpIntf.pasが見つからないって言われ、Buildできません。
これって、標準のモジュールなんでしょうか。
Del用ウィザード作るのに使うやつみたいなので、当然Borland謹製のものだと思うんですが...
0619デフォルトの名無しさんNGNG
そのページのトップに
>New: DelForExp now supports Delphi 7
と出ているが?
0620デフォルトの名無しさんNGNG
この Expert は DLL で作っているのか。
source\toolsapi\ExptIntf.pas が見つからないかな?
ホントに ExpIntf.pas て中江だとするとわからない。
0621618NGNG
>>620
あれ、うちではみつかりません。
あれ、D7Proをデフォルトインスコなんですが、
標準では入らないのかなぁ。

V:\usr\delphi7\Source\ToolsAPI のディレクトリ

2002/09/06 16:00 7,363 ClxDesignWindows.pas
2002/09/06 16:00 24,764 ClxEditors.pas
2002/09/06 16:00 7,904 ClxSprigs.pas
2002/09/06 16:00 1,949 DesignConst.pas
2002/09/06 16:00 90,411 DesignEditors.pas
2002/09/06 16:00 48,713 DesignIntf.pas
2002/09/06 16:00 5,057 DesignMenus.pas
2002/09/06 16:00 6,460 DesignWindows.pas
2002/09/06 16:00 14,609 PropertyCategories.pas
2002/09/06 16:00 164,917 ToolsAPI.pas
2002/09/06 16:00 70,674 TreeIntf.pas
2002/09/06 16:00 45,121 VCLEditors.pas
2002/09/06 16:00 7,812 VCLSprigs.pas
2002/09/06 16:00 3,539 VcsIntf.pas

んー。
0622デフォルトの名無しさんNGNG
Del5で使いやすいシリアル通信コンポってないですかね?
用途はシリアルポートによるレシートプリンタ出力です。
いままでDel3などでdukeさんのTComm使っていたんですが
Del5では使えないようなのです。
0623デフォルトの名無しさんNGNG
>>621
D7 Pro には無いね。なんでこれを抜いたんだろう..
0624デフォルトの名無しさんNGNG
Delphiには期待していないのでどうでもいい。
0625デフォルトの名無しさんNGNG
>>622
http://sourceforge.net/projects/comport/
これどうよ? Del3〜7、BCB3〜6対応
0626デフォルトの名無しさんNGNG
すんませ〜ん!!
ちょっと質問聞いてください。

最近Delphi8を買ったんですけど、一緒についてきたDelphi7の意味がさっぱり
分からずに困ってるんですよ。
なんかDelphi8を構成するために必要ですとか書いてあったんだけど
Delphi8だけインストールできたし、起動も出来たし、
いったい何のために有るのか知りませんか?
0627デフォルトの名無しさんNGNG
追加で、なんですけど。

Delphi8の一部を構成するために必要ならDelphi7を共存させないといけない
じゃないですか。
どうなんでしょうかそこのところは。
誰か教えてください。まじ困ってますtt
0628デフォルトの名無しさんNGNG
マルチ
0629デフォルトの名無しさんNGNG
Delphi8 → for .NET Framework
Delphi7 → for Win32

全く別物。知らないで買ったのなら、驚異。呆然。
0630デフォルトの名無しさんNGNG
まぁ、知らないから買った、とも言える。(藁
0631デフォルトの名無しさんNGNG
101人目のユーザですか?
0632デフォルトの名無しさんNGNG
>>629
いや知らないわけではないんですけど。

都合上最新モデルでプログラムを改良せよとの命令が下りましてねt
で、どうなんでしょう?共存させちゃっていいんでしょうか?
0633デフォルトの名無しさんNGNG
>>629
普通のWin32用のプログラムが作りたきゃDelphi7つかえってことですかい?
0634デフォルトの名無しさんNGNG
そゆこと
0635デフォルトの名無しさんNGNG
どうなんだろDelphi5とDelphi6いっしょにしたときはむちゃくちゃに
なったんだけど、Delphi7とDelphi8か・・・。
まぁ今から共存させてみるよ
0636デフォルトの名無しさんNGNG
>Delphi5とDelphi6いっしょにしたときはむちゃくちゃに
>なったんだけど
おまえだけ。
0637デフォルトの名無しさんNGNG
ん?なんか設定ファイルがかぶらなかったかい?
わっけわかんなくなったんでアンインストールしたよtt
0638デフォルトの名無しさんNGNG
>ん?なんか設定ファイルがかぶらなかったかい?
かぶらないけど?
ディレクトリもレジストリも別だし。

.pas を開くときにどちらになるか。ってのがあるけど、これは拡張子関連付けの問題だから
しょうがないし
0639デフォルトの名無しさんNGNG
>>638
・・・・・OTLw
0640デフォルトの名無しさんNGNG
追加。
D5, D6, D7, D8 と4世代同居しているけど問題ない。
0641デフォルトの名無しさんNGNG
>>640
ありがとーね。
0642デフォルトの名無しさんNGNG
えーと、どこで聞いた話かもう忘れたけど、

異なるバージョンの Delphi が共存できない。と騒ぐ人がいて、症状を聞いてみたら
C: のルートにインストールしていた。というのがありました。

c:\bin\Delphi32.exe

って感じ。そんなディレクトリ選ばれちゃ、さすがにどうしようもないが。
世の中にはいろんな人がいる。ということで。
0643デフォルトの名無しさんNGNG
> 世の中にはいろんな人がいる。ということで。

ほんとだね。Delphi に限らないけど、いろんな書き込みの内容を読むとしみじみ
そう思うね。個人的には、Delphi8 を買う人がいるってのが(略
0644デフォルトの名無しさんNGNG
デルフィアンサイコ−でしょ
0645デフォルトの名無しさんNGNG
マジシャンテンコーでしょ
0646デフォルトの名無しさんNGNG
StrToDateTimeだと、OSのロケールに影響を受けてしまいます。
影響を受けないで、DateTime型に変数を入れる方法を教えて下さい。
0647デフォルトの名無しさんNGNG
日付表現は原則ロケール依存なので、何か書式を決めないと。
1/2/3 を 2001年2月3日と見るか、2003年1月2日とするかはプログラマーであるあなたが決めること。
0648デフォルトの名無しさんNGNG
で、
>1/2/3 を 2003年1月2日
と決めた場合、
Windowsのロケールに影響受けない、StrToDateTimeはありまつか?
0649デフォルトの名無しさんNGNG
厳密には無いです。

StrToDateTime の第二引数に 'yy/mm/dd' と指定するか、
自分でパースしてから EncodeDate でしょうか
0650デフォルトの名無しさんNGNG
>>649
第二引数ってありましたっけ?
0651デフォルトの名無しさんNGNG
D7 にはあるが。
0652デフォルトの名無しさんNGNG
>>651
本当ですね、D7はオーバーロードしてますね。
BCB6には無い...
0653デフォルトの名無しさんNGNG
で、
じゃねえよ、アホ
0654デフォルトの名無しさんNGNG
ShortDateFormatを変更すれば?
0655デフォルトの名無しさんNGNG
System or Windowsユニットに数値->文字列変換する手続きか関数ありますか?
逆ならValというのを見つけたのですが。
0656デフォルトの名無しさんNGNG
>>655
SystemにStr手続きがあります。
0657デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1064766880/
0658デフォルトの名無しさんNGNG
え?君デルフィアン? もうサイコ−でしょ
0659デフォルトの名無しさんNGNG
このスレもう要らないのでは
0660デフォルトの名無しさんNGNG
Variant型にNullを入れたいんだけどDelphi7じゃ入らないんだよね
だれかNullの代わりになるもの教えてくれない?
ひょっとして「''」とか?
0661デフォルトの名無しさんNGNG
>>660
UnAss(ry
0662デフォルトの名無しさんNGNG
>>661
もっと詳しく!!お願い!!
0663デフォルトの名無しさんNGNG
Unassinged (バリアント)これか!!
T・H・X !
0664デフォルトの名無しさんNGNG
Variant変数 := UnAssingedでOk?
0665デフォルトの名無しさんNGNG
どうせバリアントなんだろ
0666デフォルトの名無しさんNGNG
Nullを入れるときVariantは便利だな。
0667デフォルトの名無しさんNGNG
質問です。

アプリ起動時にGetCurrentDirをやるとアプリパスが帰ってきますが、
TOpenDialogの初期パスはどんなアプリでも共通のパスを開くようです。
一度OpenDialogで選択すれば、カレントパスもそこに移動するようですが・・・。

この共通のパスの取得方法ってなんかありますか?
0668デフォルトの名無しさんNGNG
あげときます
0669デフォルトの名無しさんNGNG
ここの
ttp://msdn.microsoft.com/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/CommonDialogBoxLibrary/CommonDialogBoxReference/CommonDialogBoxStructures/OPENFILENAME.asp

lpstrInitialDir の解説をよみな。
0670デフォルトの名無しさんNGNG
または
ttp://www.microsoft.com/japan/developer/windows2000/technologies/ac-win2kcompat/ac-win32apichanges.asp
の lpstrInitialDir かな?
0671デフォルトの名無しさんNGNG
見てみましたが・・・。

Win2000以降に限定された話になりますが、InitialDirにNullが入っていた場合、
現在のディレクトリをみて、フィルタに指定されたファイルがあればそこを、
なければマイドキュメントを開く、という動作をすると読みました。あってますか?

この時の「現在のディレクトリ」というのが問題で、普通にGetCurrentDirをすると
アプリパスが取得されるわけですが、実際に初めてOpenDialogを開いた場合などは、
他のアプリのダイアログで開いたパスが開かれるわけです。

「現在のディレクトリ」というものに、アプリごとのものと共通のものが在るのか?
また共通のがあるのなら、その取得方法は?というのが疑問です。
0672デフォルトの名無しさんNGNG
引数の渡し方について、ちょっと教えてください。

video for windowsの定義:
function AVIMakeCompressedStream(
var ppsCompressed : PAVISTREAM;
ppsSource : PAVISTREAM;
lpOptions : PAVICOMPRESSOPTIONS;
pclsidHandler : PCLSID
): HResult; stdcall; external AVIFILDLL;

呼び出し:
SourceStream, DestStream: PAVIStream;
opt: TAVICOMPRESSOPTIONS;
if AVIMakeCompressedStream(DestStream, SourceStream, @opt, nil) <> AVIERR_OK then exit;

手本にしたCソース:
AVICOMPRESSOPTIONS opt;
PAVISTREAM pstm,ptmp;
if (AVIMakeCompressedStream(&ptmp,pstm,&opt,NULL)!=AVIERR_OK) return 0;
-----
DelphiからのAVIMakeCompressedStream関数の呼び出しが実行時にエラーに
なるんですが、どうしてでしょう? 最初の引数に問題があると思うんですが?

ちなみに、以下のページで何か言ってるようだけど、英語わからん。
ttp://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_10246460.html

よろしくお願いします。
0673自己レスNGNG
>>672
何でか分からないが、キャストする必要があるみたいだった。

AVIMakeCompressedStream(DestStream, SourceStream,
PAVICOMPRESSOPTIONS(@opt), nil)
0674デフォルトの名無しさんNGNG
> 何でか分からないが

@opt は PAVICOMPRESSOPTIONS 型じゃないからだろ
0675デフォルトの名無しさんNGNG
@opt は ^TAVICOMPRESSOPTIONS 型なの?
0676673NGNG
定義はこうなってる。

PAVICOMPRESSOPTIONS = ^TAVICOMPRESSOPTIONS;
TAVICOMPRESSOPTIONS = record

分からないんだけど、型キャストするかどうかで
この場合、渡されるアドレスが変わるの?
0677デフォルトの名無しさんNGNG
アドレスが変わるはず無い、はず。
デバッグしてみればわかるけど。
以前試した限りではなかった。
0678デフォルトの名無しさんNGNG
そもそも型が違えばコンパイラエラーになる。
まったく関係無い所にバグは潜んでいるのかも…。
0679デフォルトの名無しさんNGNG
Indy9使っているんですけど
TIdMessageをそのままSendするだけでは
Shift Jisのまま送信されてしまうのでしょうか?
0680デフォルトの名無しさんNGNG
ソース見て。
0681679NGNG
>680
IdCoderHeader.pas内のEncode2022JPっていう
関数で、エンコードしているっぽいのですが…

メールを受け取る環境によっては文字化けを起こすらしいのです。
原因などわかる方がいらっしゃいましたら教えていただけませんでしょうか?
0682デフォルトの名無しさんNGNG
>>681
ステップ実行するとどこがバグってるのかよくわかるよ。
勉強だと思って追ってごらん。
0683デフォルトの名無しさんNGNG
フィールドが通貨項目だった場合、DBGrid に表示させると \1,000 と表示されますが、
Table1->FieldByName("Field1")->AsString
などとして取り出すと、 1000 になってしまいます。
AsInteger や AsVariant で取り出してから変換してもいいんですが、
ビミョーに気持ち悪いので、直接、取り出す方法ないですか?
0684デフォルトの名無しさんNGNG
意味不明
0685デフォルトの名無しさんNGNG
Format関数つかえば?
0686683NGNG
誤爆でした。スマソ。
0687デフォルトの名無しさんNGNG
VB の DSUM 関数みたいなことをやるにはどうしたらいいでしょうか?
TQuery 使えよって言われそうですが、
すでに Query1 に合計を求めたいレコードが抽出してあるので、
それを利用したいんです。

たとえば
Query1 の SQL : select * from order.db where (いろいろ条件)
の時に、
Query2 の SQL : select sum(price) from order.db where (いろいろ条件)

と書けば目的のことはできるんですが、両方に条件書くのはいかにも
無駄っぽい。
Query1 の結果をテンポラリテーブルに書き出せばいいんでしょうけど、
Query1 を DBGrid に表示させている場合は、別のクエリを用意しなければ
いけないので、それはさらに無駄っぽい。

SumOfPrice := DSum('price',Query1)

みたいなことをしたいんです。

VB にできるんだから、Delphi にできないはずはないと思うんですが・・・。
よろしくお願いします。
0688デフォルトの名無しさんNGNG
例外エラーのエラーメッセージを取り込みたいのですがどうすればいいでしょうか?

try
s := IdHTTP1.Get(url);
except
on E: EIdHTTPProtocolException do
begin

end;
end;
0689デフォルトの名無しさんNGNG
>>687
> VB にできるんだから、Delphi にできないはずはないと思うんですが・・・。
愉快なご意見。
0690デフォルトの名無しさんNGNG
CでできるんだからDelphiにできないはずはないと思うんですが・・・。
0691デフォルトの名無しさんNGNG
E.Message
0692デフォルトの名無しさんNGNG
Delphi は VB 以下ですか・・・
0693デフォルトの名無しさんNGNG
function DSUM(const FieldName: String; AQuery:TQuery):Int64;
begin
Result := 0;
with AQuery do
begin
Open;
First;
while not Eof do
begin
Result := Result + FieldByName(FieldName).AsInteger;
Next:
end;
end;
0694デフォルトの名無しさんNGNG
ありがとうございます。
クエリで sum を使う方向でしか考えてなかったものですから、
自分で全部足す方法は思いつきませんでした。
0695デフォルトの名無しさんNGNG
D7.1きた〜
http://bdn.borland.com/article/0,1410,32337,00.html

でも駄目ぽ(エラーでまくりらしい)
0696デフォルトの名無しさんNGNG
うちではアップデートしてもエラーは何もでてないよ。
0697デフォルトの名無しさんNGNG
>>695 はマルチ
0698デフォルトの名無しさんNGNG
>>696
それは素晴らしい。漏れもやってみようかな・・・
0699デフォルトの名無しさんNGNG
D8 付属の D7 は大丈夫。
D7 初期出荷版だとだめ。

ということだそうだ
0700デフォルトの名無しさんNGNG
700get
0701デフォルトの名無しさんNGNG
>699
そりゃバカにしてるな・・・
付属のD7の時点で、一部アップデートされてるって事か?
0702デフォルトの名無しさんNGNG
テストミスか製品管理ミスか。
まぁ、まだ日本ではアナウンスされていないわけだし。
0703デフォルトの名無しさんNGNG
D8の付属版D7って以前のと全く同じじゃんグルァ
って話じゃなかったっけ?
0704デフォルトの名無しさんNGNG
同じじゃなかった。ってことでしょ?
同じだといっていたのは誰?
0705デフォルトの名無しさんNGNG
そこら中の人々
0706デフォルトの名無しさんNGNG
>>699
ニュースソースはどこよ?

Updateしてみたが、バージョン上がらないのは確か・・・欝死
0707デフォルトの名無しさんNGNG
>706
バージョン情報は変わらないみたい。
下のスレの821以降参照。

ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その12
http://pc5.2ch.net/test/read.cgi/tech/1076095856/
0708デフォルトの名無しさんNGNG
>691
Thx!!
0709デフォルトの名無しさんNGNG
>>703
D7インスコして環境構築し終わった時点で、D8付属のCDの方は番号が1あがってるのに気づいた。
が、なんか入れなおすのが怖いのとマンドクサイので放置...してたのにーーー。

0710デフォルトの名無しさんNGNG
Delphiで、MACのPICTファイルを扱えますか?
0711デフォルトの名無しさんNGNG
扱えます
0712デフォルトの名無しさんNGNG
MACのPICTファイルには、
Windowsで扱いやすいものと扱い難いものと2種類あると聞きましたが、
両方扱えますか?
扱うとは、ファイル操作だけでなくて、描画や画像形式変換も含みます。
0713デフォルトの名無しさんNGNG
どのレベルで扱いたいんだ?
ライブラリが欲しいのか、フォーマットが知りたいのか。
ライブラリが欲しい場合、DLLでいいのかexeにスタティックリンクしたいのか。
0714デフォルトの名無しさんNGNG
>ライブラリが欲しいのか、フォーマットが知りたいのか。
Yes、Noでつ。

>ライブラリが欲しい場合、DLLでいいのかexeにスタティックリンクしたいのか。
どちらでも良いから欲しいでつ。(スタティックリンクの方が楽は楽ですが)
0715デフォルトの名無しさんNGNG
質問の内容がはっきりしたところで、Delphi PICT でぐぐって下さいでつ。
0716デフォルトの名無しさんNGNG
ググっても、PICTのライブラリは無さそうですね。
拡張子辞典ばかりひっかかる。
0717デフォルトの名無しさんNGNG
susie
0718デフォルトの名無しさんNGNG
Delphi PICT でぐぐると、先頭にPICT→Jpeg変換の質問がでてくる。
それを見ればとりあえず解決方法はわかる。
また、その中にPICTのフォーマットについてのリンクもある。

もう少し、検索を上手く使えるようになるといいね。
0719デフォルトの名無しさんNGNG
>>718
日本語ページの検索だとそうなるけど、その次のサイトが・・・。
0720デフォルトの名無しさんNGNG
susieのコンポーネント調べましたが、
オブジェクトモジュールだけのソース無しでした。
使うの怖い。
(コンポーネントはちゃんとしているんでしょうが、将来の話として)
0721デフォルトの名無しさんNGNG
>>720
俺もソースなしは気になったので自分で書いた。
これが参考になった。
ttp://www2f.biglobe.ne.jp/~kana/spi_api/spi_api_delphi.html
0722デフォルトの名無しさんNGNG
>>721
ソースクレクレ
0723デフォルトの名無しさんNGNG
>>722
一部抜き出したので、これで勘弁。

procedure TSPI.GetBitmap(ms: TMemoryStream; bm: TBitmap);
var
hBmpInfo, hBitmap: HLOCAL;
pBmpInfo, pBitmap: Pointer;
BmpInfo: PBitmapInfo;
begin
GetPicture(ms.Memory, ms.Size, 1, hBmpInfo, hBitmap, nil, 0);
pBmpInfo := GlobalLock(hBmpInfo);
pBitmap := GlobalLock(hBitmap);
BmpInfo := pBmpInfo;
bm.Width := BmpInfo^.bmiHeader.biWidth;
bm.Height := BmpInfo^.bmiHeader.biHeight;
SetDiBits(bm.Canvas.Handle, bm.Handle, 0, BmpInfo^.bmiHeader.biHeight, pBitmap, BmpInfo^, DIB_RGB_COLORS );

GlobalUnlock(hBmpInfo);
GlobalUnlock(hBitmap);
GlobalFree(hBmpInfo);
GlobalFree(hBitmap);
end;
0724デフォルトの名無しさんNGNG
何言ってんだ・・・?
Delphian Worldにソース付きのがあるじゃん。
Del7のコンパニオンディスクにも入ってた奴。

まあ、俺はそのままでは使いにくかったので、それを参考に自作したけど。
0725デフォルトの名無しさんNGNG
サンクス>>723

>>724
念のため、コンポ名教えてYO!
0726デフォルトの名無しさんNGNG
>725
「Susie Plug-in 読込コンポとビットマップ」

World行ってspiで検索すれば、それらしいのはひとつしか出てこない。

もう一回言おうか?
もう少し、検索を上手く使えるようになるといいね。
0727デフォルトの名無しさんNGNG
susie で検索して出てきた別の奴にもソースついてた。
むしろ、ソースが付いていなかったのはどれなのかが知りたくなってきた・・・
0728デフォルトの名無しさんNGNG
と思ったらあったよ。ゴミレスすまん。
ま、上記のやつを参考に頑張ってみておくれ。
0729デフォルトの名無しさんNGNG
Susieプラグ印がそんなにDelphiに普通に繋がる良質なインターフェースとは思わなかった。
それともDelphiが賢い?

とりあえず、勉強になった。
0730デフォルトの名無しさんNGNG
会社には開発ツール(デル)が無い。
そこでデルがインストールされた自分のノートPCで仕事中に勝手に(指示なく)
業務用プログラムを書いた。

私は「著作権は私が保有する。しかし会社には自由に使用する権利を与える」とした。
これに対し会社は「仕事中に作ったのなら著作権は会社のもの」と主張。

しかし、開発ツールさえ所有していない会社に著作権が所属してしまうものなのだろうか?
なんか会社の都合のいいことになりそうなんですが。。。
0731デフォルトの名無しさんNGNG
業務上横領age
0732デフォルトの名無しさんNGNG
「その業務用プログラムを、開発環境フリーなC#に移植して使う」
が正解。あおりじゃなくてね。物と金がなければフリーの使う。
そういうもんだろ。
0733デフォルトの名無しさんNGNG
道具の持ち込み如何にかかわらず、
給与をもらって作ったんだから会社の物では?
0734デフォルトの名無しさんNGNG
こういう場合、作者が会社に著作権を渡すことは
デルのライセンス上問題ないんでしょうかね。
0735デフォルトの名無しさんNGNG
>>730
著作権法第15条の2
「法人その他使用者の発意に基づきその法人等の業務に従事する者が職務上作成するプログラムの著作物の著作者は、その作成の時における契約、勤務規則その他に別段の定めがない限り、その法人とする」
0736デフォルトの名無しさんNGNG
業務プログラムなら会社から給料と
時間をもらっているんでしょ。
その場合は著作権は主張できないよ。

あまりごねると別の人にCかJAVAでつくらせて
左遷かくびになるんじゃない。
0737デフォルトの名無しさんNGNG
仕事中に書いたんならダメだろ・・・
0738デフォルトの名無しさんNGNG
>>729
プラグインのインターフェースが良いわけでもDelphiが賢いわけでもない。
DelphiでDLLを利用する、それだけの話。
0739ななしへたぐらま ◆XcB18Bks.Y NGNG
Susieプラグインコンポを使えば簡単に扱えますね.
0740デフォルトの名無しさんNGNG
>>739
流れ読んでね。
0741デフォルトの名無しさんNGNG
自分のプログラムから自己解凍形式のファイルを出力というか
作成したいのですが、なにかライブラリとかコンポとか簡単な実現方法は
ありますか?
あと参考になるサイトがあれば是非教えてください。
0742デフォルトの名無しさんNGNG
著作権についていろいろ意見ありがとうございました。
素直に会社に明け渡す事にします。
0743デフォルトの名無しさんNGNG
>723

これだと、中身がビットマップのPICTしかサポートできない。
712は扱いやすい物と扱いにくい物の両方が可能か聞いているが、これは前者のみ。

本来PICTはWindowsのWMFに相当するフォーマットで、QuickDraw(Win32のGDIに相当)描画命令全般bフ記録ができる=B
所がMacにはBMPに対応するフォーマットが無いので、ビットマップ画像もPICTを使って保存されている。
Susieは前者しかサポートしていない。

もしもすべてのPICTのサポートが必要であれば、QuickTimeのイメージインポーターに対応するのが確実。
これはAppleが作っていて、QuickDrawの命令をフルサポートしている。

ヘッダは下記から取得できる。
ttp://www.delphi-jedi.org/TEAM_QTM_HOME:347231
0744Delフサギコ ◆A6VzDeLphI NGNG
 ∫,,,,,,,,,∧,,∧  そういうことを
⊂,,,,,,,,,つ,,゚Д゚ミつ  ウダウダいう会社には
         正直、委託ない。
0745デフォルトの名無しさんNGNG
About Delph は更新が止まってるらしくて
最近のログが検索できないんですが、
ほかにメーリングリストの過去ログ
検索できるサイトないですか?
0746デフォルトの名無しさんNGNG
更新が止まっているんじゃなくて、1000毎に追加されることになってる
模様。あと少しで追加されるんじゃないかな。ありがたや。

ほかにはない、と思うよ。
0747デフォルトの名無しさんNGNG
なんで作業する前に話をつけなかったか >>730
0748デフォルトの名無しさんNGNG
て言うか、>>730 みたいなことされたら、すげー迷惑だよ。
>>730 がいなくなったら誰が保守するんだ ?
0749デフォルトの名無しさんNGNG
ていうか、保守出来ないならはじめから著作権主張するなよ。
0750デフォルトの名無しさんNGNG
また、話の流れが読めてないヴァカがきたよ...。
0751デフォルトの名無しさんNGNG
LightReport2 を使っています。
見積書を作ろうと思い、TLRGridPanel に LRItemR を貼り付けて、
Aligh = alClient
LineBottom = lsSingle
LineLeft = lsSingle
LineRight = lsSingle
LineTop = lsSingle
としました。
しかしこれだと、スキマがあいてしまって、二重線で書いたように
なってしまいます。
どこか間違ってますでしょうか?
よろしくお願いしますでつ。

0752デフォルトの名無しさんNGNG
「でつ」を使う香具師には、なんだか教えても無駄になるような気がして
0753訂正NGNG
よろしくお願いします。
0754デフォルトの名無しさんNGNG
Turn := First;
while not Game.Finished do
begin
 Player := Players[Turn];
 Player.Think;
 ShowGame;
 Turn := GetNextTurn(Turn);
end;

のようなゲームのメインルーチンがあったとします。
この形を崩さずにイベントドリブンなアプリに組み込むにはどうすればいいですか?
いろんなところでApplication.ProcessMessageばら撒いておけばよさそうですが
もっと賢い方法がないですかね。
0755デフォルトの名無しさんNGNG
> もっと賢い方法がないですかね。

なにをもって「賢い」とするかで意見がわかれるな
0756デフォルトの名無しさんNGNG
>>755
お前が無能なのはわかったからだまっとけ
0757デフォルトの名無しさんNGNG
「もっと賢い方法」があると思ってる時点でアウト
0758デフォルトの名無しさんNGNG
イベントドリブンなアプリのメインルーチンはメッセージループ

ほかをメインループにしたいなら、メッセージループの代わりをさせる。
そうでなきゃ、メッセージループにそれを組み込む。

Delphi では、TApplication を継承できないので、前者しかない。
0759デフォルトの名無しさんNGNG
>>754
別にPlayerに代入する必要なくないか?
0760デフォルトの名無しさんNGNG
PICTファイルを描画するためにJQTComponent_Demoをダウソしてデモを実行しましたが、
>JQTFileDialog1.execute;
がダンマリでつ。
同様のライブラリを使ったことある方居られますか?
Apple提供のライブラリが動作しないと困りますね。
0761760NGNG
ダウンロード元です。

QuickTime Header Conversion Project
ttp://www.delphi-jedi.org/TEAM_QTM_HOME
0762760NGNG
QuickTime をインストールしたら動作しました。

ファイル選択ダイアログが動作したけど、
画像描画は別というかデモに無さそうですね。
0763760NGNG
DLLだけじゃ動作しないみたい。
QuickTimeランタイムを配布して良いのだろうか...
0764デフォルトの名無しさんNGNG
>>760
配布しちゃダメだと思う。
つーか、それ以上はスレ違いになりそうな予感。
0765 ◆XcB18Bks.Y NGNG
>>740
流れを読む以前にスレをよく読んでいなかったようで…_| ̄|○…失礼しました.

ところでエンプラ以外で英語環境でも動くアプリを作る場合,どうすればいいのでしょうか.
うちのD5ProにあるリソースDLLウィザードはいまいちよくわかりません.
(ウィザードがはき出したRCファイルはコンパイルしようとするとエラーになりました)
これを使わないとなると
自分で日本語と英語の文字列リソースからリソースDLLを作って
私の頭では実行時に必要な方を読み込む方法ぐらいしか思い浮かびませんでしたが,

私のウィザードの使い方が悪いのでしょうか.またもっとスマートな解決方法はありますでしょうか.
0766 ◆XcB18Bks.Y NGNG
…と思ったらリソースDLLウィザードで作れました.
一部の日本語文字列が(なぜか変換できない)のと
ウィザードがはき出すリソースDLLのプロジェクトファイルが
リソース行をだぶって書き出してしまっているようですが,
前者は該当行を英文に書き換えることで(それが目的なのですが),
後者はだぶった行を削除することでとりあえず動作しました.
0767デフォルトの名無しさんNGNG
ななしへたぐらまさん、今日は名前どおりみたいだね
0768デフォルトの名無しさんNGNG
フォームに貼り付けたボタンを矢印キーで動作を変えたいのですが、
通常のアプリでは正常に動きますが、ActiveXFormだと正常に動きません。

procedure TActiveFormX.Start; //HTML側で呼び出しています。
begin
 DefButtonWndProc := Button2.WindowProc;
 Button2.WindowProc := ButtonWndProc;
end;

procedure TActiveFormX.ButtonWndProc(var Msg:TMessage);
begin
 if Msg.Msg = CN_KEYDOWN then begin
  case Msg.WParam of
  VK_DOWN: begin PostMessage(0, WM_KEYDOWN, VK_TAB, 0); Exit; end;
  end;
 end;
 DefWndProc(Msg);
end;

なんか別のイベントがあるのでしょうか?教えてください
Win2K IE5.5Sp2 Delphi7Pro
0769768NGNG
追記
WM_KEYDOWNでもダメ何でだろう。
普通のキー(aやbなど)ではいいみたいなのに・・・

実際、矢印キーでTABSTOPがFalseの奴までフォーカスが逝ってしまうので
それを制御するようなコンポーネントを作成中なのですが

if Msg.WParam = VK_DOWN then Exit;

見たいにしても、フォーカスが移っていく不思議。
0770デフォルトの名無しさんNGNG
フォーカス遷移は、メッセージ処理より低レベルなメッセージループのなかで
行われるので、アクティブフォームの場合はしらないけど、普通のアプリでは、
Application.OnMessage でキー入力をトラップして制御できるよ。
0771デフォルトの名無しさんNGNG
>>768
ボタンコントロールは矢印キーを受け取らないので、代わりにフォーム側で
CM_DIALOGKEY を捕まえたらどう?

カスタムコンポーネントで矢印キーを受け取りたい場合は WM_GETDLGCODE を
捕まえて、Result に DLGC_WANTARROWS を追加してやる必要がある。

フォーカスの移動も PostMessage を使うと割り込みが入る可能性があるので、
該当コントロールの親の FindNextControl で次のコントロールを特定して、
フォームの FocusControl を呼ぶ方がいいと思う。
0772デフォルトの名無しさんNGNG
CM_DIALOGKEY でどうかな。
0773デフォルトの名無しさんNGNG
フォーカスがボタンにあるときにその親であるフォームに CM_DIALOGKEY メッセージ
が送られてくるの? どうして?
0774デフォルトの名無しさんNGNG
VCLがそういう設計だから
0775デフォルトの名無しさんNGNG
パネルにのってたらパネルにくるの?
0776デフォルトの名無しさんNGNG
メインフォームで全てのメッセージを処理しる
0777デフォルトの名無しさんNGNG
パネルにはこない
0778768NGNG
>>770-777
いろいろありがとう。今これからやってみます。
出来たらまた報告します
0779768NGNG
>カスタムコンポーネントで矢印キーを受け取りたい場合は WM_GETDLGCODE を
>捕まえて、Result に DLGC_WANTARROWS を追加してやる必要がある。
でうまく動くようになりました。

PostMessageはコンポーネントのさいは使ってませんでしたので、気づかいありがとうございます。

みなさん勉強になりました。本当にありがとうございました。またよろしくお願いします
0780デフォルトの名無しさんNGNG
ファイルの削除などの際に表示される(コモン?)ダイアログの
アニメーションを変更するにはどうすれば良いのでしょうか?
インストールしておけば、自分のアプリだけでなく
何処から呼び出されても変更された状態であってほしいのですが。
0781デフォルトの名無しさんNGNG
>>780
shell32.dll の中にあるけど、これを変更するのはやめるべきだと思う。
というか何のためにそうしたいの?
0782デフォルトの名無しさんNGNG
コモンダイアログの「コモン」の意味について考えてみる
0783デフォルトの名無しさんNGNG
DBExpress + DataAccess + DBGrid を使ってデータを更新しようと
したんだけど、Borlandの教え通りClientDataSet.ApplyUpdates(0);
を呼んでもデータが書き込まれなかった。なぜでしょう?誰か教えて
ください。
0784デフォルトの名無しさんNGNG
>783
追記
ベンダーはInterBase7 Delphi8 Ent
ソースは
if CDS_CustomerMemo.ChangeCount > 0 then
begin
if CDS_CustomerMemo.Active then
CDS_CustomerMemo.CheckBrowseMode;
CDS_CustomerMemo.ApplyUpdates(0);
SQRY_CustomerMemo.Close;
SQRY_CustomerMemo.Open;
CDS_CustomerMemo.Active := False;
CDS_CustomerMemo.Active := True;
end;
に書いてみました。
ちなみに BLOB SubType Text は書き込めるのかなぁ〜?

おっと、「〜」はFireBirdでうまく書き込めないみたい?
hさんガンバレ〜応援してますよ〜。
0785デフォルトの名無しさんNGNG
巨大なデータを移し替えるとき、
LoadFromStreamってリソースエラーをおこすときってありますよね?
バグなのかな。
何か回避する方法ありますか?
0786デフォルトの名無しさんNGNG
> LoadFromStreamってリソースエラーをおこすときってありますよね?

そりゃ、一時的に同内容の巨大なデータがメモリ上に二つ存在する事になるからでは
0787デフォルトの名無しさんNGNG
メモリを「巨大なデータ」サイズの10倍くらい積んだらいい
0788デフォルトの名無しさんNGNG
Delphiもだんだん高級な使い方の質問が増えてきたな
BlockRead/Writeの頃はこんな質問なかったのに
0789デフォルトの名無しさんNGNG
>>788
プ
0790785NGNG
さらに良くわからないのが、Syncronizedするとエラーが出なくなります。
同じ処理を同時に行うところをSyncronizedして直るならその通りですが、
ストリームの移し変えが1つしか走ってない場合にも同様です。
Syncronizedって他スレッドを完全止めちゃうのかな。
なら分かるんだけど。

そういえば、以前リッチエディットの巨大な文字列を移し変えるとき、
一旦TMemoryStreamに移して、元のStreamをクリアして次のStreamに移すと、
エラーが出なくなる、といった経験もあったけど、今回もそうすれば直るかなぁ。
0791デフォルトの名無しさんNGNG
> Syncronizedするとエラーが出なくなります。

はぁ? 別スレッドからメインスレッドの何かにアクセスしてるの?

> Syncronizedって他スレッドを完全止めちゃうのかな。

いや、呼び出したスレッドが止まってコードがメインスレッドで実行される
Syncronizedして直るなら、スレッドセーフでないVCLコンポにアクセス
してるか、競合してるかです。

> ストリームの移し変えが1つしか走ってない場合にも同様です。

だからメインレッドだって休んでいるんじゃないんだよ。アイドルしてるかもしれんけど

0792785NGNG
なるほど、何が起きてるか、感覚的に分かったような。>>791

IndyのHTTP受信コンポーネント使ってて、
受信時にスレッドが生成されその中で
ストリームの移し替えで画像変換を行ってます。
画像コンポーネントがスレッドセーフじゃないのかも。

それと、メインスレッドが関係してるかも知れないと思ったのが、
大した処理じゃないとき、
マウスで画面動かしたときに同様の現象が起きたときがあったので、
メインスレッドと画像変換スレッドが競合してるのかも。。。
0793デフォルトの名無しさんNGNG
メインいじってるときにメインのものを他からつつくな
ただそれだけのこと
0794785NGNG
>>793
重要な感じは受けるのですが、今ひとつ意味が分かりません。
噛み砕いて教えて下ちい。

今回の回避策は、
スレッドセーフじゃなさそうな部分をSyncronizedで回避、
と納得しとけば良いのかなぁ。
グラフィックコンポーネントはネットで落としたソースでつ。
0795デフォルトの名無しさんNGNG
>>783
トランザクション、コミットしてる?
0796デフォルトの名無しさんNGNG
>>795
トランザクションは使っていないです。使わなきゃダメですか?
ちなみに、Delphi6pro + InterBase6 では トランザクションを
使わなくても出来ました。プロパティに違いが何かあるのかな?
0797デフォルトの名無しさんNGNG
下ちい。 でつ。 < バカっぽくておしえたくねぇー
0798デフォルトの名無しさんNGNG
Delphi6でXML読み書きするサンプルってないですか?
0799デフォルトの名無しさんNGNG
>>796
漏れは>>795じゃないけど、データベースに対して
変更処理をしたら、直後に必ず明示的に
Transaction.Commitしたほうがいいですよ。

とくにサーバで複数のクライアントがアクセス
するような場合、commitしないと、他のクライアントで
変更がなかなか反映されない。

それと、例外処理でRollBackも。
0800デフォルトの名無しさんNGNG
>>799
とりあえず、テストで開発していたのでまだトランザクションをかけていなかったのです。
それと、解決しました。
TSQLTable,TSQLDataSet だと上手くいき、TSQLQueryだとダメでした。
なのでTSQLDataSetを採用していきたいと思います。
まだ、Delphi8の製品登録をしていないので、Update2はやっていないです。
明日、製品登録をしてから、もう一度チャレンジしてみようかと思います。
他の方で、TSQLQuery でBLOB Subtype 1 を 更新できた方がいらっしゃったら
教えてください。

あぁ。疲れた。やっと、次へ進めそうです。それにしても、Delphi8は良く落ちる。
ここまでくるのに5回落ちた。
0801デフォルトの名無しさんNGNG
Delphiで作ったEXEファイルをバイナリエディッタで開いてみると
オブジェクト名とか読めるんですけど、コンパイルってこんなもんなんですか?
0802デフォルトの名無しさんNGNG
>>801
どうしてほしいんですか?
0803798NGNG
Del厨ってXMLもろくに使えないんですね。失望しました。VB.NETを使うことにします。さようなら。
0804デフォルトの名無しさんNGNG
エディッタ・・・?
0805デフォルトの名無しさんNGNG
>>803
「失望しました。」
なにを期待してたんだか・・・・(w
浅ましい乞食ですね。
0806デフォルトの名無しさんNGNG
>>805
>803はGoogleも知らない、自分で探すことすらできないアマチュアなんだよ。
たまにいるから仕方がない。
こいつはVB.NETを使ってもまあこの程度なんだろうな。
0807デフォルトの名無しさんNGNG
まぁ、そこで、C# にいかず、VB.NET に言ってしまうあたりが自らの
レベルを暴露してるわけだが。
0808デフォルトの名無しさんNGNG
まぁ、Del7以前にとどまったり、D8に走るよりは何倍もましだが
0809デフォルトの名無しさんNGNG
Del5使いなんですが、Win32のアプリっていつまで使えますか?
次のWindowsからは動かなくなるんでっか?そもそも.NETでなんでっか?
Longhornって何時ごろでるんでっか?
0810デフォルトの名無しさんNGNG
自分で調べる
0811デフォルトの名無しさんNGNG
>>809
激しく、スレ違い。
逝ってヨシ。
0812デフォルトの名無しさんNGNG
日本語版で作ったアプリをWindows英語版で実行すると、
中のコンポーネントが激しくはみ出ます。
何ででしょう?対処法教えて下さい。
0813デフォルトの名無しさんNGNG
>>812
フォント
0814812NGNG
Scaledをfalseにすると何とか大丈夫ですが、
このプロパティ、フォームの中で変えても手遅れですね。
IDEで全部変えなきゃだめなのかな。
大変。
0815デフォルトの名無しさんNGNG
>>809
いまだにWin16のアプリがとりあえずといえども動作している現状から類推しる。
0816デフォルトの名無しさんNGNG
> いまだにWin16のアプリがとりあえずといえども動作している現状から類推しる。

動作するけど、実際に使ってるユーザはごく少数、と。
0817デフォルトの名無しさんNGNG
ゲイシにメールでも撃てや。
0818デフォルトの名無しさんNGNG
>>809
この先10年は確実に現役。
Longhornが出たからと言ってもWin2k/XPから積極的に移行する理由もないし、
Win95時代と違って古いPCだからといってそれほど困る事もないからPCの買い換え需要は伸びないかと
0819デフォルトの名無しさんNGNG
> この先10年は確実に現役。

はははは、ありえない。
0820デフォルトの名無しさんNGNG
818は自分の書いたことを日付とともにしっかり覚えておくように。
0821デフォルトの名無しさんNGNG
>>818
Longhorn・・・2年後+α=3年後?
XP・・・Longhorn登場直前に買えば、3〜5年は使用

8年は確実の予感
0822デフォルトの名無しさんNGNG
あのね、Windows95 が出た時点で Windows3.1 専用開発環境は引退。
>>821 のような数え方なら、いまならまだ Delphi1 が現役。そういう意味ならOK。
つくったもののユーザが自分だけならね。
0823デフォルトの名無しさんNGNG
つくったものが動作する = 現役

とか思ってるんじゃないの?

実務やフリーウェアとして公開できるほどのアプリが作れる = 現役

という定義なら長角出た時点でアウト。
0824デフォルトの名無しさんNGNG
>>822
Win32アプリはいつまで使えるかっていう話じゃないの?

> Windows95 が出た時点で Windows3.1 専用開発環境は引退。
っていう理屈が、どうも分からん
0825デフォルトの名無しさんNGNG
>>823
素人さんでつか?

公開ソフトなんて関係ない
企業内で業務に使われているソフトが動いている間=現役

マイクロソフトが未だにNTやWIN98を切れない理由も、その辺りにある
0826デフォルトの名無しさんNGNG
使えるかって話と、実際に使う人がいるのか、って話はぜんぜん別なのね。

おれは 16bit 版の秀丸エディタのユーザだった。なかなかよいエディタだった
がそれをそのまま Win32 で使うことはなかった。
0827デフォルトの名無しさんNGNG
3.1→95とWin32→WinFXは大分状況が異なるだろ。
95ではユーザー側に大きなメリットがあったけどLonghornってなにかこれといったメリットあるのか?
0828デフォルトの名無しさんNGNG
オマエラ、スレ違いですよ
0829デフォルトの名無しさんNGNG
>> マイクロソフトが未だにNTやWIN98を切れない理由

玄人さんは、過去むけでがんばってくださいね。>>821 のような数え方で
8年後も Del5 を使って仕事してるようじゃ、つらいものがあるね。
そのころ Del5-7 つかって遊んでる素人さんは一桁もいないと思うよ。
0830デフォルトの名無しさんNGNG
> Longhornってなにかこれといったメリットあるのか?

そんなことは知らんが、Win32 アプリが古めかしく見られて
使われなくなることは確実。
0831デフォルトの名無しさんNGNG
>>826
だからさ、個人ユーザーがどうしようと関係ないの
メーカーが気にしているのは、企業ユーザー

>>827
なんて上司に言われちゃったら反論できないだろ>826
0832デフォルトの名無しさんNGNG
パソコンは時間とともに確実に壊れて、新規の需要が生まれる。
売ってるパソコンが長角しかOSの選択肢がなければ、どんどん普及していく。
今だって、Win2000pro をOSとして新規購入するのはかなりつらい。
0833デフォルトの名無しさんNGNG
> 個人ユーザーがどうしようと関係ないの

関係あるの。プロは需要があるうちは使っていればいい。どんなに古くてもね。
Delphi のように圧倒的にアマチュアが支えてきたツールでは、8年後はDel5-7は
アマチュアにとって現役じゃないでしょ。
0834デフォルトの名無しさんNGNG
>>832
ゆっくりっと代替わりしていくんでないの?

>>833
アマチュアが支えてこなかったから、某に見捨てられたんだろ
新しいバージョン出ても買い換えない。ケチ臭いDel 使いが多いからさ
0835デフォルトの名無しさんNGNG
> アマチュアが支えてこなかったから、某に見捨てられたんだろ

うん、そうだね。どっちが見捨てたかは見方によるが、某が個人ユーザを
重視していないことだけははっきりと分かる。新ジャージョンが買い換える
だけの魅力があったか、とうことも見方によるが。

ま、これからはプロが某を支えてくださいね。
0836デフォルトの名無しさんNGNG
> ゆっくりっと代替わりしていくんでないの?

実際はね。プロと違ってアマチュアはあえて古い方の環境をターゲットに
することはないから、開発ツールとしては劇的に代替わりすると思うよ。
0837デフォルトの名無しさんNGNG
>>836
> 開発ツールとしては劇的に代替わりすると思うよ。

どうなんだろ?某は、劇的変化を演出したいみたいだけど
Kylix、C#Builder、Delphi8と失敗続き・・・

劇的代替わり=某倒産。日本撤退?
で、MSの宣伝の影で、WIN32アプリがしぶとく残る。7〜8年
0838デフォルトの名無しさんNGNG
> 劇的代替わり=某倒産。日本撤退?

某は Java とか、なんとかという上流開発支援ツールとかで生き延びればいい。
某の将来と Delphi のそれは無関係じゃないけど、某はどうなったってかまわない
が Delphi はなんとか生き延びてくれないものか?
0839デフォルトの名無しさんNGNG
ロングホーンが出れば、一般ユーザ向けの製品とか、フリーソフトなんかは
確かにさっさとWin32環境を捨てるだろう。

でも、企業向けのシステムやアプリを作る場合は、確実にWin32が残る。
だって、企業のPCは一般市場に比べて環境移行は遅いから。
だから、そういう仕事する分にはDel5-7でもしばらくは問題ないだろうさ。
それこそ10年単位で生き残るんじゃないの?

まあ、今のコボラ―のような扱いは受けるかもしれんがね・・・。
0840デフォルトの名無しさんNGNG
>>838
> Delphi はなんとか生き延びてくれないものか
漏れも信者だから、そう願っているが・・・

エンプラ版の出荷量が増えれば、日某も振り向くんだろうけど
現状でも、日某のサポート=終了っていう感じだからな・・・

これから先は海外のDel 信者と連携して生き残っていくしかない予感
0841デフォルトの名無しさんNGNG
>> MSの宣伝の影で、WIN32アプリがしぶとく残る。7〜8年

長角出て1年が限界と見た。
絶滅しない程度にはどこかで動いているだろ、という程度になる。
実はおれは Windows3.1 の時に買ったゲームがまだ動いていて、ほとんど
毎日起動している。でも、そういう程度であって、決して第一線のままで
いることはない。
0842デフォルトの名無しさんNGNG
>> 長角出て1年が限界と見た。

あっ、企業内アプリは別ね。アマチュアから見て、ということにしてください。
0843デフォルトの名無しさんNGNG
***結論***

Delphi滅亡まで
アマ・・・長角出荷1年後(残り3〜4年)
プロ・・・長角出荷5年後(残り7〜8年)
0844デフォルトの名無しさんNGNG
>>843
まっ、妥当なところだね。
0845デフォルトの名無しさんNGNG
>>843
なんか、もう駄目駄目じゃん>Delphi
と思ってたけど、まだそんなに長い間使えるのか

宝くじ当選>D6 Personal(無料)使用者
0846デフォルトの名無しさんNGNG
Delphi6per無料厨はC#Bがソース、バイナリ配布不可だったので行き場を失いますた
Delを知らなかったら喜んでVC++使ってただろうに
0847デフォルトの名無しさんNGNG
ところでDelphi終わったら何使ったらいいの?
0848初心者NGNG
JAVA 言語も、C/C++ に比べて、
Delphi 言語に対する親和性が高いと感じました。
0849デフォルトの名無しさんNGNG
>>848
寝言だな・・。
0850初心者NGNG
Delphi しか prog 言語を知らない人間にとって、
JAVA は C/C++ に比べて親しみやすい、と言う意味です。

MFC では Hello World を表示する window を作るのに3日かかりましたが、
Swing では3分でした。
開発効率は、およそ1000倍(3分>30分>300分>3日)です。
0851デフォルトの名無しさんNGNG
>>850
そうかそうか、良かったな。
0852デフォルトの名無しさんNGNG
>>847
デスクトップ・アプリ開発という意味なら

JAVA・・・速度遅すぎて、デスクトップ・アプリには向かない
DOTNET・・・まだ実験段階。コンポーネントも揃っていない

を考えると、ここ1〜2年はノンビリDelphi
+ちょっとだけDOTNETがお勧め

Delphi 9の出来を見て、DOTNET本格移行を考えるべし
0853デフォルトの名無しさんNGNG
>>852
要するにC#はじめとけって事でつか?
0854デフォルトの名無しさんNGNG
>>853
そうとも言う
0855デフォルトの名無しさんNGNG
>>852

激しく同意。

>>853

そゆこと。
0856Delフサギコ ◆A6VzDeLphI NGNG
          _______________
   ∧.,,∧   /スレタイに従った人があつまろうよ。
  ミ.,,゚Д゚彡< 
  ミ つ目(ミ . \なんで低級者以下ばかりが・・・
〜ミ,,O,,,,,,つ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0857デフォルトの名無しさんNGNG
去年の1月辺りに、この板のほぼ全てのスレに書かれていた
意味無しコピペの集合を思い出してしまった。

>>815-855
0858デフォルトの名無しさんNGNG
>>856
Delフサギコ は中級者なの? 自称するなら、だれが来ても同じだろ。

>>857
なにを思い出そうと勝手だが、個人的な感慨はスレ違い
0859デフォルトの名無しさんNGNG
857は「意味無し」とか思いながら全部読んだみたいだな(藁
0860デフォルトの名無しさんNGNG
さぁ、おもしろくなってまいりました。
0861デフォルトの名無しさんNGNG
>>860
個人的な感慨はスレ違い
0862デフォルトの名無しさんNGNG
談話室スレ逝けよ。
0863デフォルトの名無しさんNGNG
質問!
さいきんデルファイ8に興味あるんだけどさ
デルファイ5でつくったソースは使えんのかな?(変換とかやっぱあんの?)
いままでデルファイ3、5しかやったことないからその辺が心配なんだよね
誰かおしえてー!
0864デフォルトの名無しさんNGNG
>>863
スレ違い
http://pc5.2ch.net/test/read.cgi/tech/1078695271/l50
0865デフォルトの名無しさんNGNG
>>864
そーでぃすか。了解しますた。
0866デフォルトの名無しさんNGNG
BDNの賢い歩き方ってある?

CodeCentralあたりをうろついているのだが、どうも使いにくくて・・・
0867デフォルトの名無しさんNGNG
>>852
Delphi9?
たしかDelphiって8で打ち止めですよね?
もうPascalコンパイラは作らないとかって某がコメントしてませんでした?
0868デフォルトの名無しさんNGNG
Del7のアップデート、まだ入れてないけど、ヘルプがいきなり使えなくなったりとか
終了時に死ぬほどエラーでたりとか、不安定な部分って直ったのかな?

新バージョンもいいけど、フォローもきっちりやって欲しい・・・
0869デフォルトの名無しさんNGNG
>>867
今の所、IDEを統合します!って話ばかりだね
http://www.drbob42.com/delphi9/index.htm

あんまり興味ないんだけど・・・
0870デフォルトの名無しさんNGNG
>>866
Code Central玉石混交だね・・・

基本的には、素人さんが多いのかな?
で、こっそりSharewareが混ざっている(ウザ)

アメリカ人が多いが、スペイン語やフランス語も結構ある。
案外、堂々と書いても許される予感>日本語

もっと日本からの投稿が増えると良いな〜
0871デフォルトの名無しさんNGNG
だって、誰でもアップロードできる空間だから。>Code Central
よいネタには Borland からお金が出るし、ものによってはコンパニオン CD に収録される。
0872デフォルトの名無しさんNGNG
>よいネタには Borland からお金
マジ?幾らぐらい出るの?
0873デフォルトの名無しさんNGNG
質問です。delphiとは無関係になってしまうかもしれませんが、
プログラム起動時ワトソン博士が出る事が30回に1回あり、調べてみると
ファンクション: RtlTraceDatabaseEnumerate
でエラーが落ちているみたいです。
色々調べましたが、RtlTraceDatabaseEnumerateが引っかかって
こないのでこの場所に出して見ました。
環境は Win2000 + Delphi5 update1 InterBase6.0 です。
何かヒントになる事があれば教えてください。
お願いします。困っています。
0874デフォルトの名無しさんNGNG
>>873
1件出てきたが。
http://www.google.co.jp/search?q=cache:0PLjiRJCj8oJ:www.moonstone.jp/cgi/bbs/wwwforum.cgi%3Fid%3D4%26az%3Dthread%26number%3D73+RtlTraceDatabaseEnumerate&hl=ja&lr=lang_ja

「delphiを起動してる時に限って」ってんじゃないならスレ違いかもな。
0875デフォルトの名無しさんNGNG
なんで日本語だけで探すのか...
ttp://groups.google.co.jp/groups?threadm=3fb95afd%40newsgroups.borland.com&rnum=4&prev=/groups%3Fq%3DRtlTraceDatabaseEnumerate%2Bdelphi%26hl%3Dja%26lr%3D%26ie%3DUTF-8%26scoring%3Dd%26selm%3D3fb95afd%2540newsgroups.borland.com%26rnum%3D4
0876874NGNG
>>875
オレへのレス?単純にその方が分かりやすいと思っただけだけ。
0877874NGNG
だけだけって何だよ…。トホホ。
↓だけだけ
0878デフォルトの名無しさんNGNG
ワトソン博士に怒られてしまいましたとさ。
めでたしめでたし・・・
0879デフォルトの名無しさんNGNG
DelphiにPackage機能(クラス・ライブラリ?)があるって本当?
どうやって使うの?
0880デフォルトの名無しさんNGNG
>>879
ヘルプのキーワードに「パッケージ」といれろやハゲ。

>どうやって使うの?
激しく意味不明。
使ってねえのか?
てめーでパッケージ作りてえのか?
0881デフォルトの名無しさんNGNG
>>874
>>875
ありがとうございます。
意味もなく、プロジェクトソースにSleep(5000)を入れたら全然でなくなった。
スタートアップに登録して起動/終了を100回やってもワトソン君はでない。
ヨカッタ。
0882デフォルトの名無しさんNGNG
>>880
おお!「パッケージ」だとヘルプ出ますね

> てめーでパッケージ作りてえのか?
はい。コンポーネントの入れ物じゃなくて、
Javaみたいに、Unitを集めた、クラスライブラリみたいな物を
作りたいんです。

あんまり使われている所を見た事無いんですけど、
これってありですか?
0883デフォルトの名無しさんNGNG
>>882
中級スレで質問するからにはもうちょっと自分で調べてください。
0884デフォルトの名無しさんNGNG
>>883
了解でつ
0885デフォルトの名無しさんNGNG
Oracle接続で教えてください。
クライアント側の作業はプログラム本体のインストールだけにしたいのですが、
ODBC,oo4o,DBexpress
どれでやっても接続できません。
オラクルクライアントをインストールすれば接続できます。
オラクルクライアントは絶対必要なのでしょうか?
Delphi7entを使っています。
0886デフォルトの名無しさんNGNG
文字の描画で教えてください。

文字を円弧にそって曲げて描写するには、どうしたらいいでしょうか?
一文字ずつ角度をつけて、自分で位置を調整して書くしかないんでしょうか?
0887デフォルトの名無しさんNGNG
>>885
どうあがいても無理なものは無理。
自分で実装してみたら?
もし実装できたらリバースだといって訴えられるかもしれんがw
0888デフォルトの名無しさんNGNG
ODBC,oo4o,DBexpress のどれも Oracle が提供するライブラリの上で動くからね。
>どれでやっても接続できません。
当たり前です。

目的がクライアント側インストールのコスト低減にあるのなら、
データアクセスサーバーとして一台だけに Oracle クライアントを導入し、
ほんとのクライアントとは別のインターフェース(WebService とか)でつなげたら?
Enterprise 版なら道具は全部そろっているし。
0889nakaNGNG
普通は、Oracle Client なしにオラクルには接続できない。

けど、方法はあるよ。

スタンダードな方法なら
ASTA,kbmMW,RemObjects/DataAbstractとかで3階層C/S構築。

2階層なら Core' Lab の ODAC Net Optionで出来る。
自力で SQL Net と OCI を実装してる脅威のミドルウェアメーカー。
0890デフォルトの名無しさんNGNG
つか、MDACにMicrosoftのOracle ODBC Driver 入ってなかったっけ?
そもそも >>885 のクライアント環境がわからん。
0891デフォルトの名無しさんNGNG
どなたかRSA暗号のソースかコンポーネント知りませんか?
0892デフォルトの名無しさんNGNG
ttp://swiss.torry.net/crypting.htmで
PGP Components for Delphi v.3.3.5 っての見つけたんで早速入れたら
PGP Software Development Kit Core Library not foundってエラーが出て起動しなくなった・・
Libraryなんて見つからないし、、もうだめぽ..
0893デフォルトの名無しさんNGNG
>>892
これかな?読んでないけど。
http://www.pgp.com/products/sdk.html
0894デフォルトの名無しさんNGNG
ぉ、キターーー・・
、、DL出来ね・・
Delphi入れなおしてきます・・

 λ,,. .
0895デフォルトの名無しさんNGNG
コンポーネント系がおかしくなって起動できない場合は
Delphi6\Projects\Bpl\dclusr60.bpl
をいったん消してあげれば直るんですね。

直ったところでもっかいトライしてみます。
0896デフォルトの名無しさんNGNG
>>891
知ってます
0897デフォルトの名無しさんNGNG
>>896
早速使ってみます。
どうもありがとうございました。
0898デフォルトの名無しさんNGNG
質問です。
IntraWeb+WebBroker(exe型cgi)で、ページを表示させることはできたのですが、
ボタンを押しても、フォームの内容がリセットされるだけで、イベントが発生している様子がありません。
確認してみる点などありますでしょうか?
0899898NGNG
どうも、ボタンを押しても、環境変数CONTENT_LENGTHが0のようなのです。
submit関係で注意すべきプロパティでもあるのでしょうか
0900898NGNG
で、まあ、無理やりデバッグ用データ(CONTENT_LENGTHと標準入力)を渡したところ、
TCGIRequestまではデータは渡るのですが、IntraWebに伝わってないみたいなのです
IntraWebのソース欲しい…
0901デフォルトの名無しさんNGNG
TDateTimePickerの文字列を消すことは出来ませんか?
0902デフォルトの名無しさんNGNG
interface

type
THoge1 = class
end;

THoge2 = class
private
 FHoge1: THoge1; 
public
end;

implementation

private でしか使用しない THoge1 を interface 部で晒さなきゃいけない
ことに納得できないのですがこういうもんですか?
0903デフォルトの名無しさんNGNG
そういうもの。
イヤならinterfaceとインスタンス生成用関数だけ晒すとか
コンパイルして.dcuと情報削った.int飲み公開とかするしかない。
0904デフォルトの名無しさんNGNG
>>902
THoge1をTObjectなんかの上位クラスにしとけば、
interfaceにさらす必要ないよ。

ただ、FHoge1を生成するときはTHoge1をCreateすること。
0905904NGNG
その場合、
implementation
の下にTHoge1の入ったソースをusesするか、
THoge1のオブジェクトを外からTHoge2に設定してやるか、
のどちらかをやる必要がある。
0906デフォルトの名無しさんNGNG
クラス自体にはアクセス制限はないでしょ。THoge1 自体には private であること
とは関係ない。THoge2 のフィールドとして private であるだけで、どうせ外からは
THoge2 クラスを使う部分からは見えないんだし。気持ち悪ければ、THoge1 をなにか
の abstract なメソッドを宣言しておき、抽象クラスにすると。そして、実装部で
それから派生した具体クラス宣言・実装をつくり、実際に THoge2 の FHoge1 は
その具体クラスのインスタンスとして作ればよい。VCLでは常套手段だよ。
0907デフォルトの名無しさんNGNG
> implementation の下にTHoge1の入ったソースをusesするか、

それじゃ、そもそも interface で FHoge1 を宣言できないじゃないの
0908デフォルトの名無しさんNGNG
904 の方法だと、実装部でいつもキャストする必要があるでしょ。
0909デフォルトの名無しさんNGNG
Delphiにはクラスにアクセス指定できないから気にせずやるしかないよ。
無理してやってもメリットは薄い。
0910デフォルトの名無しさんNGNG
>>907
FHoge1: TObect;
と書いといて、
FHoge1にTHoge1のオブジェクトを入れれるんだよ。
0911デフォルトの名無しさんNGNG
>>908
別に、privateに、そういうpropertyを用意してもいいし
0912デフォルトの名無しさんNGNG
ところで>>898-900はどなたかわかりませんか?
0913デフォルトの名無しさんNGNG
アハァ?
0914デフォルトの名無しさんNGNG
>>911

property FHog1: THoge1 write ....

とかのように THoge1 がそもそも使えないんじゃ実装部でキャストするしかないでしょ
0915デフォルトの名無しさんNGNG
>>914
class helper…ごにょごにょ
0916デフォルトの名無しさんNGNG
>>906 のがまともだろ。例えば TMemo.Lines は抽象クラス TStrings 型だけど
実際は実装部で宣言実装されている TStrings の派生具象クラス TMemoStrings
のインスタンスが代入されている。ユーザは TStrings のメソッドを呼び出しても
多態性により実際は TMemoStrings クラスのメソッドが実行される。
0917デフォルトの名無しさんNGNG
>>916
話がずれとる。
拡張性の話とは無関係だよ。
0918デフォルトの名無しさんNGNG
>>917
拡張性の話はしていない。>>902 をよく読むこと。
0919デフォルトの名無しさんNGNG
こう書きたいんだろ。Del8なら可能だったような。
THoge2 = class
private
 class THoge1 = class
 end;
 FHoge1: THoge1; 
public
end;
0920デフォルトの名無しさんNGNG
>>918
単に晒したくないって理由で抽象クラスを用意するというのは
Delphi的にはまっとうなやり方ではないよ。
0921デフォルトの名無しさんNGNG
> Delphi的にはまっとうなやり方ではないよ。

だからまっとうなやり方を教えてよ。
0922デフォルトの名無しさんNGNG
>>921
>>909
0923デフォルトの名無しさんNGNG
まっ、意見の相違だな。宣言部で TObject で実装部でキャストしまくるのが
まっとうだとは思わないな。
0924デフォルトの名無しさんNGNG
>>923
説明としてTObjectを使っただけであって、
TWinControlでもTComponentでも構わない。
0925デフォルトの名無しさんNGNG
あぅ、気にするな、っていうのがまっとうだと。それはそうかも。
0926デフォルトの名無しさんNGNG
902はどうした?
902の結論は?
0927902NGNG
みなさんありがとうございます。ちょっと期待してたのですが残念です。
気にしなければいいのですけど名前衝突のリスクとか考えると
表に出さなくていいものは出したくないですよね・・・・・
でもそのためにキャスト多用というのもちょっと・・・ですし。
Del8で可能かもですか・・・Del8未満を切り捨てられる時代は
まだまだ先のような木もするので当面我慢して使うしかないですね・・・・
ありがとうございました。
0928デフォルトの名無しさんNGNG
ところで、文字列の長さが255までと決まってるなら
明示的にShortString使ったほうが速度面その他で有利とかありますかね?
0929デフォルトの名無しさんNGNG
そんなことは気にしない
0930デフォルトの名無しさんNGNG
AnsiStringを取る関数の引数に使ったりすると変換入って逆に不利になるし
やるなら全部ShortStringで完結させるつもりでGO
0931デフォルトの名無しさんNGNG
>>927
>ちょっと期待してたのですが残念です。

なにをどう期待してたのか分からないのですが? >>902 には納得できない、としか
書いてないけど。
0932デフォルトの名無しさんNGNG
AnsiStringを取る関数の引数に使ったりすると変換入って逆に不利になるし
やるなら全部ShortStringで完結させるつもりでGO
0933デフォルトの名無しさんNGNG
なんかいい隠蔽方法が無いか期待してたんだろ
0934デフォルトの名無しさんNGNG
>>927
> 名前衝突のリスクとか考えると

THoge2 の private で宣言するのはよくて、同じユニットで THoge1 を宣言すると
どうして名前衝突のリスクが増えることになるんですか?
0935デフォルトの名無しさんNGNG
> なんかいい隠蔽方法が無いか期待してたんだろ

だから TObject にするとか、抽象クラスをつくるとか提案があったでしょ。
隠蔽方法としてはよい提案でしょ。902 がそれを採用しないのは、隠蔽を必要
とする度合いが、キャストやら抽象クラスをつくる手間より小さいからでしょ。
つまり、簡単な方法があれば採用するけどめんどくさいのはいや、ってことね。
0936デフォルトの名無しさんNGNG
>>935
そんな当たり前の事言われても。
0937デフォルトの名無しさんNGNG
>>935
結論

> あぅ、気にするな、っていうのがまっとうだと。それはそうかも。
0938デフォルトの名無しさんNGNG
>>927
クラス名の衝突はユニット名が異なれば起こらないから
ビルドできなくなることはないよ。
問題はたまたま同名クラスの同名メソッドを呼び間違える可能性があることだけど
それほど神経質になることはないと思うよ。
0939902NGNG
>>935
おっしゃるとおりです。

interface

type
TFunc = procedure(A, B, C: integer) of object;

THoge2 = class
private
 FFunc: TFunc;
public
end;

implementation

ちなみに TFuncを隠蔽するにはどう宣言しとくのがよいでしょう?
気にしないことにしたのですが隠蔽も覚えておいた方がいいかと思いまして。
0940デフォルトの名無しさんNGNG
うーむ、今回の件は >>909 のいうとおり

>Delphiにはクラスにアクセス指定できないから気にせずやるしかないよ。
>無理してやってもメリットは薄い。

だと思う。いろいろ手をつくしても得られるメリットがそれに見合ってないよね。

いろいろなところで質問があるんだけど、回答する方は、なんとか解決しようとする。
でも、質問者は軽い気持ちで、簡単ならいいけど面倒ならまぁいいや、ってことも
あって、回答者はガックリ、ということも多い。質問者は、一応回答を得たなら、
実際に採用するかどうかはともかく、「参考にさせていただきます」とか答えて
おけばいい。

いっぽう、どんな方法でもいいから絶対解決したい、という質問もあるので、
そこらへんの見極めが難しいんだよね。

適当な質問には答えないのも節度かもね。
0941デフォルトの名無しさんNGNG
>>939 気にするな
0942デフォルトの名無しさんNGNG
>>939

Delphiには型宣言にアクセス指定できないから気にせずやるしかないよ。
無理してやってもメリットは薄い。
0943デフォルトの名無しさんNGNG
>>940
デフォルトは簡単でまともなやり方を答えつつ
無理な方法が存在することを匂わせとけば十分。
それを聞きたきゃ再度聞けばいいだけだし。

迷うのは最初からまともでないやり方を指定した質問。
直接答えるべきか勘違いを指摘しつつ代案を示すべきか。

まともでないことを自覚しつつ後者の返答をもらうと
なぜまともでないことをやりたいのかを
説明しないといけないから割にウザかったりするんだよな。
0944902NGNG
何かおおげさなことに(^^;)
こんな当たり前のことができないはずはない、私の知識不足だ、
D5ぐらいからは対応してるはず、と思っていたので
「期待してたのですが残念です」と書いたのですが・・・・
もしかして触れてはいけない話題だったのかな(^^;)
おとなしく.NET勉強します・・・
0945デフォルトの名無しさんNGNG
> こんな当たり前のことができないはずはない、

そうか、ここら辺の感覚が違うのね。そんなことのために .NET 勉強するってのも
なんかちょっと違う感じ。

たいした弊害があるわけでもないことが重大なことに思えるのかなぁ。
0946902NGNG
えーと(^^;)こんな隠蔽もできない言語といわれてくやしいとかそういうことですか?
たいした弊害でもない、といってる時点で初心者丸出しですが。
0947デフォルトの名無しさんNGNG
なんだ、手の込んだ釣りだったのか
0948デフォルトの名無しさんNGNG
>たいした弊害でもない、といってる時点で初心者丸出しですが。

しかし、あれば便利だけどなくてもこれまでやってこれたし、なんか
つまらないことをほじって釣りしてる感じだね。多重継承ができない
から不便、begin end がダサイ、とかと同じレベルのような。
0949デフォルトの名無しさんNGNG
902 は隠蔽したいから.NETを勉強するんだとさ。
0950デフォルトの名無しさんNGNG
なんつうか・・・

どこが重要で、なにが重要じゃないのかってのが正しく見極められない人間は、
どーでもいいことで拘るから仕事も遅いし融通が利かなくて使えない。

もう少し、柔軟な思考能力を身に付けられるといいな。
0951デフォルトの名無しさんNGNG
902は釣り確定だな
こんなのにいつまでも相手しなくていいよ

↓ はい、次の方どうぞ
0952デフォルトの名無しさんNGNG
句読点を使い分けて荒らしと言ってみるテスト。
0953デフォルトの名無しさんNGNG
>>901
なにをしたいかよくわからんが、
DateTimePicker.Format := ' ';
とでもしておけばとりあえず非表示になる。
0954902NGNG
(^^;) http://www.ehonnavi.net/images/ehon4076.jpg
0955デフォルトの名無しさんNGNG
くだすれでスルーされてしまいましたので、
こちらで質問させてください。

今、TPersistentを継承したTData1,TData2...TDataNという
いくつかのクラスをファイル入出力させるためTHogeというクラスを作り、
Dataプロパティに先ほどのTDataクラスを保持させるようにしています。

THoge = class(TComponent)
published
 property Data: TPersistent read FData write SetData;
end;

WriteComponentできちんと書き込みは出来ているのですが、
実行時のDataプロパティの実際の型が不定のため、
ReadComponentでうまく読み込むことが出来ません。
やはりDataプロパティの実際の型をTHogeにプロパティとして持たせ、
Dataプロパティを偽プロパティを使って、
ストリームからの読み込み時にその型を判別し
個々の読み込みを行うという方法をとるしかないのでしょうか?

なにかスマートな方法がありましたら教えてください。
0956デフォルトの名無しさんNGNG
>WriteComponentできちんと書き込みは出来ているのですが、
THogeのインスタンスをWriteComponentしても
Dataのプロパティまでは書き込み出来ない気がしますが。
0957デフォルトの名無しさんNGNG
>>956
TPersistent.GetOwner
使ったことはないが
0958デフォルトの名無しさんNGNG
>>955
TDataN を THoge の中に置くのではなく、クラスの外に作って THoge から
参照するだけにしておけばどうですか?

この場合、TDataN は TPersistent ではなく TComponent から派生します。

そうすれば Read/Write や Create/Destroy の面倒は Owner (フォームや
データモジュール) が見てくれるので、特に何もする必要はありません。
0959デフォルトの名無しさんNGNG
>>958

dData = record
case DataType: Integer of
{Data1..Nのデータ型を定義}
end;

THoge = class(TComponent)
public
property Data: dData read FData write SetData;
end;

みたいのじゃダメなの?的外れならスマソ
0960デフォルトの名無しさんNGNG
↑>>955
だった
0961デフォルトの名無しさんNGNG
>>959
955 じゃないが書き込み可能なメンバーにレコードを使うのは
何かと不便だと思うけど。
・パブリッシュできない。つまり dfm に保存することができない。
・Data.X := Data.X + 1 みたいな操作ができない。
0962955NGNG
いろいろなご意見、ありがとうございます。

>>956
Dataへの代入時にFDataを実際の型でCreateしてますんで、
WriteComponent時にはきちんと保存できているようです。

>>958
TComponentから派生させるように作り直すことも考えたのですが、
先ほど簡便性のためにTData1,TData2...TDataNなど書いたクラス群は
実際にはTCustomDataA,TCustomDataBとあり、
さらにTCustomDataAを継承したTDataA1,TDataA2...というクラスが
数十個、すでに構築されてますんで、これをすべてやり直すのも
いかがなものかと思ったわけなんです。
どうせTHogeは、ファイル入出力時に一時的にCreateするだけですし。

>>959
近いものとして、以下のようにしようかとも思いました。

THoge = class(TComponent)
public
 property Data: TPersistent read FData write SetData;
published
 property DataType: TClass read FDataType;
end;

Dataプロパティへの代入時、FDataTypeへその型を代入しておいて、
読み込み時にはFDataTypeに代入されている型をもとにFDataをCreateさせようかと。
もっともそのためにはDataプロパティを偽プロパティを設定して
読み書きする必要があるかと思うんですが。
0963デフォルトの名無しさんNGNG
なんか途方もなく無駄なことをしようとしてるような気が。
詳細はともかく、最終的に実現したいことを素朴に書いてみたら >>955
0964デフォルトの名無しさんNGNG
>>963
簡単に書くと、

 ・TData...のクラスの内容をファイル入出力したい。
 ・TData...の構成はできればあまりいじりたくない。

の、2点のみですw

>>962で書いたことを試してみたんですが、ちょっとうまくできませんでした。
やっぱりTData...をTComponentから派生させたほうが楽なのかな…
0965デフォルトの名無しさんNGNG
閉店間際ですが、質問させてください。

Delphi 7 + dbExpress を利用して、ローカルの MySQL を操作しようとしています。
カラム数が 11 あるテーブルに対して、TSQLQuery 経由で 'select * from hoge...'
としたところ、TSQLQuery.FieldCount が 6 を返します。頭 6 つ分しか取得できて
いないようです。

同じ問い合わせを SQL エクスプローラから行うと、正しく 11 カラム返って来ます。

MySQL のバージョンは 4.0.20a です。MySQL も dbExpress も初めてなので、問題の
切り分けができず困っています。心当たりのある方、いらっしゃいませんか。
0966デフォルトの名無しさんNGNG
MySQLではないけど
Last;First;
をしないと件数正しく返さないことがありました。
参考になるかどうか。

MySQL4は情報少ないよなあ。
0967デフォルトの名無しさんNGNG
>966
その件数ってレコード件数のことではなくて?
0968965NGNG
>>966
情報ありがとうございます。ただ残念ながら、今回は TSQLQuery.Open メソッドの
直後で FieldCount の値が決まっているので、それが直接の原因ではないようです。

なお、insert や update では 10 以上のカラムを同時に挿入・更新できました。
今のところ、select 文を発行するときは * を使わずに 6 つ以下のカラム名を列挙
してごまかしています。

何か分かったらここに還元します。
0969デフォルトの名無しさんNGNG
Delphi + BDE で Paradox 形式のデータファイルを使用している
スタンドアロンのデータベースアプリがあります。

これをC/S型DBアプリにする方法を教えてください。

データベースソフトに Firebird を入れて、BDE系のコンポーネントを IB系に換えれば
いいのかなぁ?と漠然と考えてますが、C/S型は作るのが初めてなのでどうしたら
いいのかよくわかりません。

クライアントは Windows XP のマシンが2台(将来的には6台程度まで増えるかもです)。
サーバーはこれから用意するので、Unix 系でも Windows でもどっちでもいいです。
開発言語は Delphi6 Professional です。

参考になるURLだけでもいいので、よろしくお願いします。
0970デフォルトの名無しさんNGNG
| 何について調べますか?
| ┌────────────┐
| | おまえの消し方         |
| |                     |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ
0971デフォルトの名無しさんNGNG
>>969

> データベースソフトに Firebird を入れて、BDE系のコンポーネントを IB系に換えれば
> いいのかなぁ?と漠然と考えてますが、

そんな感じでどうぞ。
でも、差し替えるのならBDEからdbExpressもおすすめです。

サーバはライセンス関連でUnix系がおすすめ

ただ、差し替えるにあたってデットロックが起こらないように
トランザクション関係はしっかりね
0972デフォルトの名無しさんNGNG
>>971
レスありがとうございます。

昨日、Firebird を入れてみました。
今日、Marathon を入れてみましたが、
使いかたがわかんね;;

いそいでないのでゆっくりやります。
0973デフォルトの名無しさんNGNG
>>970
ワロタ
0974デフォルトの名無しさんNGNG
>>973
非常におもしろいんだが、スレ違いだと思う。
Office アシスタントはMSですら失敗だったと認めるくらいだが。
0975ななしへたぐらま ◆XcB18Bks.Y NGNG
いるかさん,最近流行のきざし?
【お前を】Excelのイルカ【消す方法】
http://aa5.2ch.net/test/read.cgi/kao/1088168743/
0976デフォルトの名無しさんNGNG
パーソナル版ユーザーが
カスタムコンポーネントを製作する事は無謀なのでしょうか。
Unicode 対応 TMemo 派生コンポーネントを製作したのですが、
どうも挙動が不審です(終了時にメッセージを処理しきれていない模様)。

プロフェッショナル版を買うべきか、悩んでいます。
0977デフォルトの名無しさんNGNG
C#買え
0978デフォルトの名無しさんNGNG
>>976
それって版関係あるのか?
0979デフォルトの名無しさんNGNG
>>976
何版かは関係ない
0980デフォルトの名無しさんNGNG
>>978
VCLがどの様にメッセージを処理しているのか、
VCLのソースが参考になると思っているのですが。

>>977
スターターアップキャンペーンでしたっけ?
アレが終わってしまったので、今は買う気はありません。
0981デフォルトの名無しさんNGNG
パーソナル版はVCLのソースがついてこないんだっけ?

あれば確かに参考になるけど、他のコンポーネントのソースでも参考になるとおもわれ
0982デフォルトの名無しさんNGNG
Unicode対応って・・・ これじゃ不満か?

Tnt Delphi Unicode Controls
http://tnt.ccci.org/delphi_unicode_controls/
0983デフォルトの名無しさんNGNG
>>982
Win98だとまともに動かないんです。
0984デフォルトの名無しさんNGNG
Win9x で正しく動かないのは .NET Framework も同じ。

ELPack がつかえるぞ
0985デフォルトの名無しさんNGNG
>>984
どうも動かすには、Pro版に含まれる
コンポーネント(masks.pas)が必要なようです。
いやはや。やはりPro版を買うかなぁ。
0986デフォルトの名無しさんNGNG
いまから Pro 版買うのは無駄。UNICODE 対応エディタつくるんなら C# で
やっておけばいい。無駄にならないし。ベータだけど Express 版なら無料で
DLできる。あとすこしで。
0987デフォルトの名無しさんNGNG
いやもうDLできる

http://lab.msdn.microsoft.com/express/vcsharp/default.aspx
0988デフォルトの名無しさんNGNG
ベータなんて軽々しく進めるもんじゃないと思うが。
システム側に不具合出るって報告もあるし。
0989デフォルトの名無しさんNGNG
>>986
>C# でやっておけばいい。無駄にならないし。
言い切るのはどうかと。.NETイラネっていわれてるし。
0990デフォルトの名無しさんNGNG
>>988
(中級者以上)
0991デフォルトの名無しさんNGNG
Delphi8 をすすめるべきなんだろうが、ベータにも達してないし
0992デフォルトの名無しさんNGNG
>>989 ちょっとびっくりするほど認識不足だと思うよ。
0993デフォルトの名無しさんNGNG
> システム側に不具合出るって報告もあるし。

ソースキボン
0994デフォルトの名無しさんNGNG
>>987
このセキュリティ証明書は、信頼できる会社から発行されていません。
証明書を表示して、この証明機関を信頼するかどうか決定してください。

とか出るし(w
流石MS
0995デフォルトの名無しさんNGNG
> とか出るし(w

だから何?
0996デフォルトの名無しさんNGNG
>>976
とりあえず開発者ガイドのコンポーネント作成の部分読んでみれば?
色々書いてあった気がする。

Personalの場合、落としたアーカイブを展開したディレクトリのどこかにpdfで入ってるはず。
0997デフォルトの名無しさんNGNG
ディレクトリ変更してなきゃ
C:\Program Files\Borland Delphi Personal Installer\documentation\
ここにある
0998デフォルトの名無しさんNGNG
こいつを再利用してから次スレにしよう
http://pc5.2ch.net/test/read.cgi/tech/1064766880/
0999デフォルトの名無しさんNGNG
>>998
了解。
1000デフォルトの名無しさんNGNG
ということで、1000 ゲット。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。