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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
Delphiに関する上級者用の技術相談室です。
中級者は「Delphi相談室(中級者)」へどうぞ。
初心者は「くだすれDelphi(超初心者向け)」へどうぞ。
2デフォルトの名無しさん:03/09/29 01:35
だからなに?
3デフォルトの名無しさん:03/09/29 01:35
過去ログ
ミ,,゚Д゚彡フサギコとモナーの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
4デフォルトの名無しさん:03/09/29 01:35
●関連ページ

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/
バッファオーバーフロー
87 :___ :03/09/28 22:25
Delphiスレは多すぎです。人気なんか全然ないのに。
スレッドの数をもっと減らしてください。
ttp://www.atmarkit.co.jp/fdotnet/questionnaire/2002-11/2002_11.html
もっとも習得したい言語 Delphi : 0 (C# : 49)
もっとも利用したいIDE Delphi : 2 (VS.NET : 65)
8デフォルトの名無しさん:03/09/29 02:00
TComboBox,TListBox,TToolBar,TListView にバッファオーバーフロー
http://memo.st.ryukoku.ac.jp/archive/200309.month/6508.html

上級者の技術力でこのバグを解消しよう。
荒らすなよDel厨
10デフォルトの名無しさん:03/09/29 02:30
>>8のケースで上級者の対応ってどういうの?
ライブラリ書き換え。
文字列追加時にチェックする。
実行時にコード書き換え。
何もする必要なし。無駄な事はしません。
12デフォルトの名無しさん:03/09/29 03:10
>>10
OSにパッチを当てます。
13デフォルトの名無しさん:03/09/29 04:50
14初心者:03/09/29 06:03
begin:って面倒くさい構文ですね
>>8
今までそれが発覚しなかったのがいろんな意味ですごいな
>>14
そうだね。C系の言語に慣れてると面倒に見えるだろうね。
でも、これくらい頭の中で共通化して抽象化してしまえ。

>>15
2CHでも前に言ってた人がいると思うよ。
確か、iniファイルの読み込みで行制限があるという話からそっちに流れたような気もする。
>>取り出す文字列の長さを確認せずに4096バイト固定のバッファに格納するため
dephiの開発者って終わってるな。こんなとこチェックしないプログラマーが普通いるか?
18デフォルトの名無しさん:03/09/29 14:42
>>16
XMLなら行制限も桁制限もないわけだが。
>>17
以前の議論では、パフォーマンスを優先したんだろうという事になったような気がするよ。
20デフォルトの名無しさん:03/09/29 19:37
有段者向けのスレッドを立てましょう!!!!!!!!!!!!!!!!!!!!!!!!!
ぼくわ厨房でわ無いです!!!!!!!!!
>>19
文字列の取得/設定なんてそう何回も呼び出されないし、単純な長さチェックだけでそんなにロスしないと思うがな。
>>21
どうかな?
・1項目毎に呼ばれる
・サイズの取得もAPIの呼び出し(メッセージ機構で)が必要になる
 から昔は結構大きかったんじゃないの?
>>17
MSにいるじゃん。
パフォーマンスとか以前に固定のバッファに格納するなら長さをチェックしないと駄目だと思うが
2524:03/09/29 21:50
書き込みをチェックするのを忘れたスマソ
>>24はなかったことにしてください
26デフォルトの名無しさん:03/09/30 00:21
ゲームプログラムをしているのですが、描画内容の計算は1/30秒ごとに行い、
Application.OnIdle で暇なときに描画関数を呼び出し、というのをやっています。

が、このOnIdleというのはCPUに余裕があるときに発生すると聞いたのですが、
完全に暇なときなのでしょうか、それとも100%以外という意味なんでしょうか。
もし前者なら、描画できる余裕が少しあるのに描画できない、後者なら
描画を始めた時点で100%に達してしまい、終わるまで次が描けない → 描くのに1/30秒
以上かかるときに描画が等間隔にならない、と考えたのですが・・・。

理想は、通常は30fpsで描画して、維持できなくなったら徐々にfpsを減らしていく、
という形なのですが、いいアイデアは無いモノでしょうか。
>>26
上級者スレで、くだすれレベルの質問すんなよ。
てかゲーム製作スレで聞けヴァカ
>>26
タイマイベントでやりくりしろよ。つかDirectX使え。
>>26
ソース嫁。
>>26
OnIdleはCPUに余裕があるときです。
33mSのタイマーイベントを使うと希望通りCPUに余裕が無くなると自動的に等間隔でなくなります。
>>30
元々タイマーなんぞに制度を求めては行けません。
>>26
>このOnIdleというのはCPUに余裕があるときに発生する

前提から間違ってる。ヘルプ読め。ついでにソースも読め。
正確に言えば OnIdle は
メッセージキューに何もなければ実行され、Done が Trueなら WaitMessageがその後呼ばれる。
OnIdleはマウスやタイマーイベントでメッセージキューが常に一杯なら1度も実行されない。
よってCPUに余裕があれば、OnIdleが実行される。
ただし、他のアプリのせいでCPUに余裕が無くても、メッセージキューが空なら実行される。

34デフォルトの名無しさん:03/09/30 15:29
Del厨って馬鹿だなぁ(w
いい加減気づけよ(w
WM_TIMERは優先順位が低いと言われていますよね。
メッセージキューに待機中であってもマウスメッセージ等が割り込むために
正確でなくなります。
36デフォルトの名無しさん:03/10/03 19:48
age
37デフォルトの名無しさん:03/10/04 00:46
釣れた(藁
38デフォルトの名無しさん:03/10/04 00:47
釣れた(藁
WM_TIMER や WM_PAINT は必要に応じてまとめられてしまいます。
他に優先度の高いメッセージがある場合、そちらが先に処理されてしまう。
複数の WM_PAINT は再描画が必要なリージョンが統合されて一つの WM_PAINT に統合される。

逆に、自分で定義したメッセージを自分自身に送れば問題の一部は解決する。

ただし。Windows はリアルタイム OS ではないのでどうしても手の届かない部分が存在します。
DOS みたいに全権限を取得できるわけでもないしね。
いろんな部分の考え方を変えるか、いっそ全画面、CPU 100% 使用と割り切るか。

VB厨にはこれでも上級に見えるわけか。
どこにVB厨が???
煽っているのはすべてVB厨だと思い込んでいるのでしょう。
43デフォルトの名無しさん:03/10/04 18:17
こんばんわ、
いきなりで申し訳ないですが
キャンバスに出力する文字列も幅と高さを知るのに
CanvasのTextExtent メソッドがありますが、
Canvasを使わず幅高さを知る方法を知ってたら教えて下さい。
4443:03/10/04 18:23
自己解決しました。
>>43
私はそれを知りません。
TCanvas.TextExtent は GetTextExtentPoint32  を呼び出しています。
ですから、もし画面へでしたら GetDC(0)したハンドルで GetTextExtentPoint32 するか
又は これはご希望の方法ではないでしょうが、
TCanvasインスタンスを作ってGetDC(0)ハンドルを渡して Canvsa.TextExtentすればよいと思います。

CreateFontではhDCは必要ありませんが、CreateFontで作成したhFONTは
SelectObjectしなければフォント情報は引き出せません。

>>44
質問した以上は解決法をまとめて下さい。
そうすれば、検索してこのスレを見つけた人にも役立ちます
特に話題もないようなので
http://pc.2ch.net/tech/kako/1003/10035/1003559977.html
こういうスレとして活用させて貰っていいですか?
>>47
良いのではないでしょうか。
49デフォルトの名無しさん:03/10/05 14:10
 TThreadを使いたいと頑張っているのですが
スレッド側からVCLに対して操作をすると
AccessViolation例外が発生してしまいます。

 例えば、ProgressBar1.Stepby(1);や
LabelEdit1.Text:='文字列'などの一般的な
操作で発生します。(これらは当然Syncronize()を
使って操作してます)

 不思議なことにそのVCLコンポーネントがひとつ
だけの場合に発生するようです。ProgressBar
ならひとつの場合エラーが発生してふたつ置くと
エラーが起きません。仕方なくふたつ置いて、
VisibleとEnableをFalseにして凌いでいるのですが、
この点について何か解決方法など知っていませんで
しょうか。

>>49
その Syncronize で呼び出したメソッドでやってるんだよね?
そうだとしたら、必ず起きるコード書いてみて。


それから Syncronize を多発するより、メッセージを投げた方がいいよ。
SendMessage はSyncronizeと同じだから PostMessag するといい。
>>50
>SendMessage はSyncronizeと同じだから PostMessag するといい。
これはバージョンによって実装が全くことなるよ。最新のものはイベントを使用し効率よく実行されるようになっている。

というか49は、くだすれに池
52デフォルトの名無しさん:03/10/05 14:50
>>49, >>50
ありがとうございます。
該当コードは以下のとおりです。

>その Syncronize で呼び出したメソッドでやってるんだよね?
>そうだとしたら、必ず起きるコード書いてみて。

//----------------------------------------
// データを追加する
//----------------------------------------
procedure TGetDataThread.AddData;
begin
Form1.DataList.Add(DataStr);
Form1.ProgressBar1.StepBy(1);
Form1.ProgressBar1.Update;
end;

>というか49は、くだすれに池
くだすれレベルの質問ですいませんでした。
次回からそうします。
>>51
ああ実装が同じという意味じゃなくて効果が同じという意味ね。
いちいちメインと同期するのは同じという意味ね。

>>52
そのフォームが完全に作成されてから TGetDataのインスタンスは作成されているんだよね?


ところでそれはテストコードなんだよね? そこにForm1を普通は書かないよね?

名人級用のDelphi相談スレを教えてください。
名人級なら 相談は必要ないでしょう。
Delphiマンセー
http://pc2.2ch.net/test/read.cgi/tech/1029120920/

とかでご指導側に回って下さい。
SendMessageを使うサンプルコード

Type TMyThread=class (TThread)
public
  gate:boolean; //同期を取る為のフラグ(片方は見るだけ、片方は書くだけなら安全)
  WinHandle:THandle; //スレッド作成時にメッセージを送る親を定義しておく
  cnt:Integer;
  procedure Execute; override;
end;

procedure TMyThread.Execute;
begin
cnt:=0;
  while(not Terminated) do
  begin
   inc(cnt);
   if gate then  //ゲートが開いていればメッセージを送る
    begin gate:=false; //実際にはゲートを閉じてから送る
     PostMessage(WinHandle,WM_MyMessageID,Integer(Self),cnt);
    end;  //もし整数以外の情報を送るなら、クラスインスタンスを作って 送られたフォーム側で開放する
  end;
end;
//フォーム側は
procedure TForm1.RefNo(var message: TMessage); //message WM_MyMessageID;
begin
  Caption:=IntToStr(Message.LParam);
 with TMyThread(Message.wParam) do begin 
  if Message.LParam>100 then Terminate;
  gate:=True;
 end;
end;
5749:03/10/06 01:50
>>53 >>56
コードも載せていただき、ありがとうございます。

>そのフォームが完全に作成されてから TGetDataのインスタンスは作成されているんだよね?
はい。

>ところでそれはテストコードなんだよね? そこにForm1を普通は書かないよね?
いろいろ試していたので、Form1.と書いてました。
基本的にVCLの操作はSyncronize経由で、
グローバル変数はForm1.○○○で操作しています。

いろいろ削ったり、コメントアウトしたりしてうまくいくケースを
探ってみましたがダメでした。やはりエラーが起きてしまいます。
原因がよくわかりません。同じコンポーネントを2つ乗せれば
エラーが起きないので、それでよいと言えばよいのですが、
少し気になります。
SendMessageを使うか今後検討してみます。
>>57
一応、グローバル変数の操作は
TCriticalSection内で行ってます。
スレッド関連以外の原因も考えようよ。柔軟に思考を広めよう。
Syncronizeを使えば安全(メインスレッドで実行)という理由は色々あるけど
GUI周りはメインスレッドで実行しないと正しく処理されないものもいくつかある。
それはおいといて、メモリ周りはマルチスレッド時はメモリマネージャとかは基本的にちゃんと排他処理を行っている。
なのでAVが出るのはライブラリ側の排他処理周りである可能性であるのは低い。
あそらく原因はユーザー側のコーディングが問題なのだろう。
AVの出る原因特定ってAVの出た位置から呼び出し履歴やアドレスを見ていけば結構簡単にわかるよね。
大抵は初期化されていないものにアクセスしたり、無効になったポインタやインスタンスをアクセスしにいった時発生するかと。
地道にトレースして探すべし。
>>58
1、グローバル変数を使う時は Form1.メソッドで なおかつTCriticalSection内というのは意味がないよ。
2、SendMessageはSyncronizeと効果は同じ
  進行状況を表示する程度の事ならPostMessageで非同期に状態を送る方がいい
61デフォルトの名無しさん:03/10/07 10:32
>>59 >>60
>あそらく原因はユーザー側のコーディングが問題なのだろう。
 自分もそうだと思います。やはりどこかがよくない使い方してるのだと
思います。根気よく調べてみます。ありがとうございました。
マルチスレッドでは、排他処理やスレッド同期を常にやってたのでは
せっかくのマルチスレッドが生かせない。
設計を上手くやって、同期や排他処理を必要ないようにするのがコツ。

・単ワード(CPUのデータ幅以内)で構成される整数型、ポインタ型、浮動小数点型は
  あるスレッドが読み書して、他が読むだけの使い方であれば排他処理は必要ない
  この方式でスレッド間通信に使う事も可能

・int64は2ワードとなるのでダメ
・メモリ境界をまたぐ32bit変数も デュアルCPU構成等の環境でダメなので注意


これを利用して、構造体を渡す場合も、リングバッファ構造にしてそのポインタか、配列番号を渡す
ようにすれば、同期や、OSの提供する排他処理に頼らずにすむ。
63デフォルトの名無しさん:03/10/08 17:10
>>62
そういったカビの生えた古臭い知識は.Netで完全に死滅するわけだが。
>>63
ほう。
では、 .NET で通用しないとでも? それならどのあたりが?

あるいは、.NETでも通用するけど、それよりスマートな概念があるという事かな?
Windowsでは、コンパイラやRADを常に使っていたのでは
せっかくのCPUの性能が生かせない。
アセンブラやCを上手く使って、コンパイラやRADを必要ないようにするのがコツ。
まあ一生Cとアセンブラやってろよ
>42
C厨もいるのにね
>>65
ほー、Cで書いたコードはコンパイラが無くても動くと…メモメモ。
動くだろ
Delphiで書いたコードもね
>>67
C厨とやらがDelスレを煽る理由が無いんだが?
.NET もスレッドは Win32 スレッド前提だからつらいよ。
スレッドを抽象化しきった Java には、それはそれで別の問題があるが。
73デフォルトの名無しさん:03/10/09 12:51
>>62
ありがとうございます。
教えていただいたことを参考にして早速作り直しましたところ
処理速度があがりました。(まだ不安定ですが・・・)
スレッドプログラムは奥が深いですね!精進します。。
74デフォルトの名無しさん:03/10/09 15:37
delだと、30K円、
マイクロソフトだと、只なんですが、
どのようにしたら、ボーランドをぬっ殺せますか。
タダということにしたいのですね。
>>74
みんなで Del6パーソナルを使いましょう。 そうすれば ぬっ殺せるかどうか判りませんが、困ると思いますよ。
77デフォルトの名無しさん:03/10/09 15:58
デルポイを使うと金果敢だよ。視ネ。
78デフォルトの名無しさん:03/10/09 16:40
いまさら、アフォプログラムなら、自分で十分。
delphiがつまらなくしてしまった。だな。
MSならVISIOがあったし。
暇人は要らんな。俺も含めて。
誰か78を日本語に訳してくれ
80アニー・尾田:03/10/09 20:00
いまさら、アフォプログラムなら、自分で十分。
delphiがつまらなくしてしまった。だな。
MSならVISIOがあったし。
暇人は要らんな。俺も含めて。
ここで、話題にしてること事態、アフォだね。
でるぽい、ぽい有意義な話題かと思えば、文法と
ウィンばっかりじゃん。ツマンネ。
出るは、イラネ。マイクロソフト純正で十分だよ。
なんか日本語が不自由な香具師が紛れ込んでるな。
83ちんげ:03/10/18 19:06
delphiのソフトはwinnyで落とそう。
ちんげあげうざっ
85デフォルトの名無しさん:03/10/18 20:20
Delphiプログラマーの給料おいくらでつか?
>>85
ピンキリ
>>85
月収27万
ただし漏れはプログラマーではない。環境測定の工作員。


工作員コワイヨー
馬鹿は高い所が好きとは良く言ったものです。
90デフォルトの名無しさん:03/10/23 20:13
上級者もっとでてこい。
91シャザーン:03/10/23 23:32
呼んだ?
こんなところに上級者が居るわけねえだろ
俺は上級者だけど文句ある?
94デフォルトの名無しさん:03/10/24 23:45
>>93
よっ!上級者!
>>93
よっ!ジョーク者!
>>95うまいっ




アイスが。
97デフォルトの名無しさん:03/10/25 23:33
>>96寒いっ




お前が。
98謎の急浮上!:03/10/28 00:22
謎の急浮上!
99デフォルトの名無しさん:03/10/29 14:04
listViewのreport表示で
1 2   3
1 黒  青
2 黒  赤
3 黒  赤
のように個別に色を変えたいんですが
どうしたらいいのでしょうか?
>>99
マルチ氏ね & 100!
101デフォルトの名無しさん:03/10/29 22:56
私はマルチではありません
まるぽ
103デフォルトの名無しさん:03/10/29 23:16
>>99
ゴルフクラブのオーナーが借金でドロン。
104デフォルトの名無しさん:03/10/30 10:37
object pascalにはC++のANSIみたいに仕様を定めている所はありますか?
Delphiは標準にどれくらい準拠していますか?
>>104
ObjectPascalの規格があるかどうかは知りませんが、
あったとしてもDelphiは全く準拠していません。
今はボーランド自身も「Delphi言語」と称しています。
ANSI-ISO-JIS PASCAL というのは存在します。
http://www.net.intap.or.jp/oiia/cont1/p0302.html%7B0recid=10104.html

感じとして 標準PASCALの9割以上のコードはDelphiでコンパイルして動かす事が出来るようです

ObjectPascalについては、
Delphiのほかには FreePascalがあるていどで、FreePascalはDelphi互換を目指してるようですから
ほぼDelphi(たぶんD3あたり)がデファクトスタンダードだと思います。
ドラフトは残っているので確認してみては?
http://www.pascal-central.com/OOE-stds.html

なんか
  TYPE
   Student = CLASS (Person, Gradable, ... )
   ...
  END;

とか
一社独占で流行らない言語は死滅するだろうな。
macのObjectPascalが最初じゃなかったっけ?
で、TurboPascalもそれに準拠してた(object型ってやつ)
>>108
流行っていたにも関わらず、開発元に見捨てられて死滅寸前の言語もありますな。
ライブラリの方が重要。
>>110
じゃあ流行ってないDelphiはもっと死滅するな。
ところが死滅していないところが優良ツールと糞ツールの違い。
死滅しなくても使われていないんだもんなぁw
労働プログラマに使われていないから、おいしい思いが出来るんじゃないか。
まぁあの会社の主力はバージョンアップの頻度からして多分JBuilderなんだろうな
Delphiは終わってるって言われはじめてから何年経ってるんだろう
どっこい生きてるじゃん
ようするに、今のプログラマ雇用の流れ=不安定化には合わないだけでさ

残念なことに道具として使うぶんにはまだまだパフォーマンス最高の一つだからさ。
.NET は longhornが出て、longhornがサクサク動くマシンが安価になった頃からかなあ・・・
>>117
シャツの中?
Delphiバカにする人って何作ってるんだろ
C#を作ってますがなにか?
>C#を作ってますがなにか?
この一言で、貴方の薄っぺらさが解りました。
「C#を作ってますがなにか?」だって
ごめん、鼻で笑っちまった
私は英語を作りました。
DelphiでC#コンパイラを作ってるの? あんまり意味ないと思うなあ

どうせなら C# で C# コンパイラ作ればいいのに。
>>124
もっと本読め。
そんなにC#が好きなら、C#で荒らしツールでも作ってみたらどうかね?
この板でDelphiが付くスレを"Powerd by Microsoft Visual C#.NET"とか言って荒らしてみるの。


ほ れ 、 作 れ る も ん な ら 作 っ て み ろ よ。


あ、今更善人ぶらなくても良いよ。だれも聞いていないからさ。
Delphiバカにする人って何作ってるんだろ

121 名前:デフォルトの名無しさん[sage] 投稿日:03/10/31 19:57
C#を作ってますがなにか?

そうか、頑張れ。
>124
>DelphiでC#コンパイラを作ってるの? あんまり意味ないと思うなあ
あなた読解力ないね
121 は Delphi をバカにする人で、C# コンパイラ作ってる人なんだけど
だから Delphiスレで 何で を省略するという事は Delphiで作ってるんだろ? それ以外あるか?
日本人じゃないのかな。
>>129
あなたは会話の食い違いから喧嘩になる事が多くないですか?いいえ、多いに決まっています。
そんな読解力では今後大変ですよ。もっと本を読む事をお薦めします。
で、この後「まあDel厨だからな」とかワンパターンな野次が入るんだよな。

ところで C# の他には何か作ってらっしゃらないんですか?
C# はもう出来てるんじゃないんですか?
俺さ、思うんだけど、メモリ容量が32bit空間埋め尽くしそうじゃない。

今まではさ、メモリがどんどん大きくなってCPU速度を食い潰す心配してたけど
これからはメモリ空間が一杯だから、CPUが速くなればそれだけ速くなる時代なのかな?

実際32bitあればメモリ空間としては問題ないじゃない。
動画がどうとか言っても、動画データ全体をメモリに入れる必然ないしさ。

64bit化なんて言ってるけど、64bitじゃなけりゃいけない用途が見えて来ないよね。
>>132
別におまいの事情によって64bit化するわけじゃないからなぁ。
そりゃ、俺個人にも必要ではないけどさ。
世の中にはそれを必要とする分野もあるってだけ。

で、
>今まではさ、メモリがどんどん大きくなってCPU速度を食い潰す心配してたけど
>これからはメモリ空間が一杯だから、CPUが速くなればそれだけ速くなる時代なのかな?
の意味が理解できないのだが。
132は64bit化はメモリの単位だけと思っているらしい。
135デフォルトの名無しさん:03/11/09 18:41
age
136デフォルトの名無しさん:03/11/09 18:42
つーかこのすれいらなくねー?藁
放っておけばDAT逝きになるだろ。
138デフォルトの名無しさん:03/11/10 00:40
とりあえずあげとくか。
>>132
現実にテラバイト超のメモリを実装したコンピュータもあるんですが
あれは無駄な飾りですか?
>>139
そのテラバイト超のメモリを実装したコンピュータは何ビットですか?
>>121はヘジたんですか?
5年前に>>132は、メモリなんて128MBも必要なわけ無いだろ・・・と考えてました。
分子コンピュータが実用化されればメモリの量で心配することはなくなるだろ
蒸し熱いなここ。
みんな変な顔のおっさんなんだろうな。
145デフォルトの名無しさん:03/11/10 21:57
Delphi使いはすべて上級者ぁぁぁ
>>145
またC#スレで煽動してきたんですか?
147デフォルトの名無しさん:03/11/10 22:10
>>146
C#スレに返れ
まだDelphiスレなんてあったんだ
なつかしいなぁ
149デフォルトの名無しさん:03/11/15 03:11
仕方なくVCを使う。
分からずにVBを使う。
好きだからDelphiを使う。


>>149
どっちみち使わなきゃいけないんだ。頑張れ。
151デフォルトの名無しさん:03/11/18 22:03
常に高レベルな質問を!
いや上級者にはもっと低レベルな所からやるのを望みたい
上級者用ってなってるから見てみたら、低級者しかここいないんか?
はやってないとか、使われてないとか・・・、
おもいっきり広く使われて、スタンダード言語の一つが現実だと思うが?
あんた自分の世界にひたってるアマチュアヲタプログラマーか?
あんたってだれよ?
まぁまぁ。コテハンすら使わない匿名の、やたらえらそうな書き込みは無視するのが一番。
負け犬が一番よく咆える。
156デフォルトの名無しさん:03/11/22 08:24
晒しあげ
157デフォルトの名無しさん:03/11/27 10:40
質問です。

Delphiで、コ
>>157
そんなの簡単です。

まず、エ
>>157
中(ry先生の書籍がおすすめです
高いけどなかなか売ってないけど根性で手に入れてください
私は通販が怖いのでまだ手に入れてません
160デフォルトの名無しさん:03/11/27 23:55
CMYKモードでWindowsビットマップ(bmp)って作れるものなのかなぁ。
ムリだよね、WindowsビットマップってRGBモードオンリーじゃん?
イマイチ何がやりたいのかわからんが、(何かの色原版か?)
各色成分に分解してそれぞれビットマップに保存すればいいんじゃないか?
変換式は色理論とかキーワードに検索すればすぐ見つかると思う。
>>161
ただの独り言じゃないの?
163デフォルトの名無しさん:03/12/03 15:46
独り言で質問かよ?
164:03/12/04 02:09
>>163
160のレスは人に質問するような書き方じゃないと思うが。
165デフォルトの名無しさん:03/12/04 09:02
>JPEGImage->SaveToStream(Stream);

この処理がマルチスレッドで2つくらい重なると、
Windowsがリソース不足エラーを起します。
何か回避策無いかな。
一応、重ならない工夫はしましたが、他に重いアプリを起動してると駄目みたい。
166165:03/12/04 09:20
処理的には、TBitmapを使って、Pictureをコピーしてます。

Bitmap = new Graphics::TBitmap();
JPEGImage = new TJPEGImage();
try {
Bitmap->Width = Image->Picture->Graphic->Width;
Bitmap->Height = Image->Picture->Graphic->Height;
Bitmap->Canvas->Draw(0,0,Image->Picture->Graphic);
JPEGImage->Assign(Bitmap);
JPEGImage->SaveToStream(Stream);
} __finally {
delete JPEGImage;
delete Bitmap;
}
167165:03/12/04 09:26
実際にやりたいことは、bitmap等のフォーマットのJpegファイル化です。
>この処理がマルチスレッドで2つくらい重なると、
>Windowsがリソース不足エラーを起します。

あなたの書いたコードがバグってるだけだと思われます。
169165:03/12/04 10:28
>Windowsがリソース不足エラーを起します。

書き方間違えました。
Win32APIがエラーをリターンしてVCLの「リソース不足」エラーメッセージになります。
Windows自体は大丈夫でつ。
170165:03/12/04 13:42
VCLのスレッドとメモリ管理の間に、バグとかありませんでしたっけ。
171165:03/12/04 14:36
「リソース不足」と出ましたが、Syncronizeすると発生しなくなるので、リソースと関係ないかもしれません。
DelphiスレでC++書くヴァカは病院へカエレ
>>172 はいはいはい。
>>170 さすがに D6 位になると、そんな話は聞かない。メモリマネージャはだいぶ枯れたコード。

リソースというより、何かをスレッド間で共有していませんか?
「リソースがなくなったのでエラー」
ではなく「複数スレッド間で同じリソースを使ったためにエラーがおきた」
って線では?
174:03/12/04 23:18
ん?何でdelphiじゃないの言語のを書いてるのかの追求はソレで終わり?(藁
ワケ分からんな。
175174:03/12/04 23:19
「の」が一つ多かったか。
ふつ〜なDelphiグラマだったらBCBのコードぐらい読めるっしょ。
読めたらDelphiなんか使ってませんよ。
読めないわけではないが、速度がな。
いや、「ふつ〜」かどうかは知らんが、「神経を疑う」つってんだが。
BCBスレ逝けっつーの。
心の狭いこと言うな。ちょっと読み替えれば読めないソースでもなかろう。
因みにふつ〜のBCBグラマはDelのソースが読める。しかしBCBXで読む必要が無くなる。
わざわざBCBのコードをDelスレに書く理由が分からんな
読めるかどうかが問題なのか?知障?
もう一度言おう
わざわざBCBのコードをDelスレに書く理由が分からんな
>>読めるかどうかが問題なのか?知障?
本当のことを言っちゃだめだよ
単純に質問者がBCB使いでVCLの情報はDelphiの方が多いからだと思うが。
そこまで嫌う理由の方がわからん。日本に来たら日本語喋れって口なのか?
>日本に来たら日本語喋れ
例えがおかしい
すぐ隣にアメリカ人がいるのに、日本人に英語について質問しに来たようなもんだろ。
いや、何度もループして無駄だとは思うが
「B C B ス レ 逝 け っ つ っ て ん だ よ ! 」
BCBはDel以上に人少なくなってきてるしなあ。
>>185
それも例えがおかしくないか?
例えがないと理解できない低脳どもはお帰りください。お願いします。
189デフォルトの名無しさん:03/12/07 16:40
つか、Delスレ縦杉。
このスレの存在意義って何よ?
>>189
弱い犬ほど良く吠える
わけわかんね。
>>189
>Delスレ縦杉
ちょっと前にアンチどもが荒らし&乱立させた。このスレも乱立スレのひとつ。
まあここは隔離スレになっているけどな。
まぁなんだ。漏れが200getするまでもまいら手伝え
>>192
> ちょっと前にアンチどもが荒らし&乱立させた。このスレも乱立スレのひとつ。
の割りには最初の方真面目に立てたって感じがするけどな。
都合が悪くなったらアンチのせいかよ。
お仲間がやったことにちゃんと責任を持ちな。
>>74
この勘違い厨は多くいるけど…
なぜなんだ?,MSの広報部が馬鹿なんだなきっと
>>194
まともな用が無いなら来るなよ
197デフォルトの名無しさん:03/12/09 07:02
MSの広報部は馬鹿の巣靴ですよ。
198デフォルトの名無しさん:03/12/09 12:53
次期P2Pの仕様 part7
http://tmp2.2ch.net/test/read.cgi/download/1070647427/

まとめサイト(Wikiへの直リンク禁止)
 http://s2net.s41.xrea.com/

ダウソの馬鹿どもがなんかやってるぞ、からかってやろうぜ!
暇なんだねw
>>197
すくつ?w
まあ昔からまともなサラリーマン風の人はいないなと思っていたが。
(どことなく風貌がチ○ピラ風?)
手伝ってくれる方キボンヌ
http://program.dot.thebbs.jp/1071486463.html
氏ね
205デフォルトの名無しさん:04/01/28 04:55
206デフォルトの名無しさん:04/03/06 12:29
汎用サンク APIを使って 16bitコードから呼ばれる32bitDLLを作っているのですが

このDelphiで作る32bitDLLのデバッグをするのに、
 NT系だと system32\NTVDM.EXE をプロセスにアタッチで出来るのですが
  9x系だと、どうやればいいでしょう?


>>201
こんな会社に大野さん入ったんだ・・・他人事ながら心配です。
208デフォルトの名無しさん:04/03/06 12:41
QRコード(2次元コード)吐き出したいんだけど、
なんかいいのあります?
>>208
いいのかどうか知らんが、
ttp://www.psnet.ne.jp/software.html#QRCODE
>>209
あ!そんな感じのがあるんですね。
情報サンクス!
211デフォルトの名無しさん:04/03/09 12:45
*.DFMのロードって、vclのどこでやってましたっけ?
フォームのCreateから辿ってけば? >>211
デバッガで中身見てるけど、見つからない>>212
stream reader は classes にあるよ。
>>213
InitInheritedComponent がそうだよ。
で、そこから
216デフォルトの名無しさん:04/03/11 11:44
Delphi上級者の定義を教えてください
中村拓男さんの書いていることが全て理解できる。
> Delphi上級者の定義を教えてください

2chには書き込まない人
pcode氏の書き込みをみていらつかなくなる
>>218
それはないな。2ch で答えだけつけてる人。って方が正確では?
2chで書かれている事を鵜呑みにしない。
DelphiでDelphiを作れる
223116:04/03/12 20:51
> Delphi上級者の定義を教えてください

Delphi を使わないくらい使い込んだ人
>>219
pcode氏って誰? 中間コード?
検索してわざわざ読むものなの? それで「いらつかなくなる」というのも変なの
>>226
俺は「技術的には」尊敬してる。
>>227

具体的にどの部分の技術。あんまり具体的な技術を示してないような
たんなる毒舌じいさんで2,3年早く「ひとり2チャンネル」やってただけ
毒舌とは安定のための周囲の苦心や忍耐に対する甘えである、ってね。
実際、彼のレスをここのような2chに貼り付けるとただの平凡な煽りとかわらんな

MLでやったから目立つだけで、内容はただの2ch風煽り
つまり場違いだったというわけで、
227は煽りの技術について尊敬してるのかもな
煽りの技術としても並ていど
それは中島治康が大した事無いといっているのと同じ。
ふーん、煽りがうまいひとなの?
大昔の巨人選手。 >>235 の言ってるのは、当時としてはすごかった、ということか。
つまり、以前 ML に煽りのすごいひとがいた、と。でもそれはいまからみると、並程度と。
ML で煽るのはすごいとかすごくないとか以前に、電波だと思う。当時も今も。
団結力が高まるから、敵がいたほうがいいんだよ
ML で団結ってなに? なにに対して団結するの?
団結しないから最近は閑散としてるの?
ざっとみてきたが、pcode氏、技術はたしかにあるみたいだなぁ〜
今のMLで復活したら、活性化されて面白くなりそう
技術のある電波ってところだよね。
むかーし、電波技術って雑誌があったなー
馬鹿と天才は紙一重
ってよく言ったものだ
>>244
ただの技術ありそうな電波。天才は無関係。
ただの馬鹿より技術馬鹿の方がちょびっとだけマシか。
馬鹿と電波は違うぞ。
ねたんで、そねんで うらやみ やっかんで ひがむ。 そんなのが渦巻いてるスレですね。
そうそう、なにしろ上級者スレですから
248 が一番渦巻いてるがな
え〜料理の世界に五味、五色、五法というものがございます。
五味とは甘い、辛い、酸っぱい、苦い、塩辛い
五色とは赤、白、緑、黄、黒
五法とは生、煮る、焼く、揚げる、蒸す

さて、人間にも ゴミ がありまして、それは、
そねみ,ねたみ,うらやみ,やっかみ,ひがみ 
あと、「わざわざかきこみ」っていうのもあるな
>>250
Umamiは?
253デフォルトの名無しさん:04/03/17 08:48
助けて上級の人。
Windows 2003 serverにMultilingual Interface Pack日本語を被せて、
Delphiで作成したアプリを実行しました。
メニューやポップアップメニューで、
ショートカットキー(ファイル&Fの"&F"みたいなやつ)付けてないキャプションの
先頭文字が化けまつ。
どうすれば対処出来るんでしょう。
MainMenu/PopupMenu の AUtoHotkeys を False に
255253:04/03/17 10:08
thanx>>254
AutoHotkeysがフォントを間違ってHotkeysを付けてるということですか。
Windowsが間違えてるのか、VCLが間違えてるのか、日本語として処理されてないということかぁ。
「日本語として処理されてない」
ですね。とんでもないところに & を自動挿入しているのでしょう。

ユーザーロケールとシステムロケールは何をお使い?
あと Delphi のバージョンは?
会社で使うアプリをDelphiで作っているのでMLログ参照したりしてます
ちょっと躓いた部分があったのでMLログを見てたらpcode氏のサンプル
がありました
pcode氏のサンプルはすごいなって思ったり
職業delphi使いって感じがして

復活して欲しいな
>>257
番号をおしえてください。
さくら電波?
東京は明日が開花予想日。だけどすこしずれそう。
正直、上級スレが一番程度が低い
いまごろなにを? ネタスレなんだし。
上級者なんていないだろ。いても来ないし。
自称上級者なんてこんなもの。
ちょっと問題。

constructor TLanguages.Create;
var Callback: TCallbackThunk;
begin
inherited Create;
Callback.POPEDX := $5A; <---実行コードを動的に作成して
Callback.MOVEAX := $B8;
Callback.SelfPtr := Self;
Callback.PUSHEAX := $50;
Callback.PUSHEDX := $52;
Callback.JMP := $E9;
Callback.JmpOffset := Integer(@TLanguages.LocalesCallback) - Integer(@Callback.JMP) - 5; <--メソッドへジャンプしてる。
EnumSystemLocales(TFNLocaleEnumProc(@Callback), LCID_SUPPORTED);
end;

この部分、CallBackをポインタ型にして、VirtualAllocで確保して実行フラグを付けて実行させるように変更しとかないとマズイね
TLanguages ってどんなときに使うの?
言語選択のダイアログを作るような時使うんだろうけど
どっちにしても国際化対応するなら、対応国決めてしまうから、あんまり意味ないんだろうな・・・
266デフォルトの名無しさん:04/04/02 13:11
言語選択のメニュー作りたいんですが、
国旗アイコンメニュー無いですか?

アイコンだけでもあれば自作だけど。
国旗は国が苦労して考え出した独創的な物。
つまり国に著作権があります。
ですので勝手に使うことは出来ません。
各国に許可を取りましょう。きっとそのときアイコンも入手できるはずです。
Mozillaのソースからパクれ
>>266
外務省ホームページ(日本語)-世界の国旗-
http://www.mofa.go.jp/mofaj/world/kokki/index.html
パクルなよ。ちゃんと著作権があるからな。
いや、もう面白くないってば > 270

疑問なんだが、「どっからどこまでがパクリ」なんだろう?
TIPSだとかFAQレベルってのは、そのまんま使い回してるでしょ?
上級じゃない書き込みでスマンが、純粋に疑問なので。
漏れの独断と偏見による判断

コードサンプルとして置いてあったりするものは自由
ソフトウェアの根幹に関わる部分が他人が書いたコードならパクり
274272:04/04/03 00:01
>>273
うーん。そんな感じだよね。
自由かどうかはちょっと分からないけど(まぁ、断ることはしないだろうから、
結局同じではあるが…)。

※関係無いけど、某所での注釈「(この文章を)PCに無断で保存することを
禁ずる」みたいなことが書いてあったのにはビックリした。
保存もダメかよ!
転載なんてのは言語道断だが、保存くれー許してもいいんじゃないかと思った。
猫でもわかるプログラミング?
276272:04/04/03 00:24
>>275
ご想像に任せます(藁
>>274
保存されたくなかったらわざわざネットで公開するなよ、て言ってやれ。
「HP見るだけでIEのキャッシュに溜まってしまうんで見たらいけないというですか?」
って屁理屈こねてやれ
それいい。
>>277

まったく同感。公開したHPの内容について著作権を主張するのは当たり前だとしても
リンクする場所の制限したり、印刷するな、とか、コピーするな、保存するな、とか
を主張するなら、そもそも公開するな、と言いたくなる。
まあ、あそこはさぁ
一応シェアウェアとしてvectorなんかに登録してるし
真面目にお金払ってる人もいると思うから。

そういう人へのケアの意味で、
建前だけでも保存禁止にしておかないと、という考えなんじゃないのかな。
> 一応シェアウェアとしてvectorなんかに登録してるし

これDLしたことないんだけど、内容は公開してるHPのと同じなの?
だとしたら、シェアウェアにしたこと自体が間違いでしょう。
一応。
http://search.vector.co.jp/search?query=%94L%82%C5%82%E0

内容は古いけど、更新したら差分メールが来るみたいよ。
で差分は公開してないの? ふーん。
よーし、パパGetHTMLでGetしてWin(ry
つーか、意味無いんだから<保存するな
意味無いことを堂々と書いてるのが不思議。
「はい!保存しません!」って人がどのくらいいるのか。
本気で書いてるのかなぁ?
だってこのスレ的に関係ない話だし。
288286:04/04/04 23:50
>>287
いや、「保存するなって書いてる人」宛てであって。
ぬるぼ
ガッ
カ゜ッ
やれやれです(^-^;
XP に興味ありな今日この頃です。
DUnit を導入し使い方は、だいたいわかってきました。
やっぱり具体例がないとどう応用していいのかわからないので、
データベースプログラム(できれば売上管理ソフト)のテストにDUnit
使った例があったら教えてください。
(まぁ、2つほど前のスレで、DUnitに関する質問で、
いっこうにレスがつかなかったので、
このスレの住人はあまりDUnitに関心がないようですが・・・)
>>293
>あまりDUnitに関心がないようですが・
んなことないけど。

ただ、DUnit は魔法のツールではないから。単なるテスト。
テスト内容はアプリによって異なるし、人によっても異なる。

応用ではなく、ツール/部品としてみなすべきで、そのためには何をテストするのか
使う人(コードを書いている人)がはっきり認識していないとね
ttp://homepages.borland.com/abauer/2004_04_18_archive.php#108257843133836919
によると次期 IDE は NUnit/DUnit を統合するそうだ。
>>293
xUnitは関数・手続き・メソッドレベルのテストであって
データベースには使かないような。
こうあるべきというデータベースを用意して
処理後のデータベースと比較するテストをすればいいんじゃないの。
BDEのSQLって副問い合わせを使えるところが限られるみたいなんですが、

Type No Name
甲   1  A
甲   2  B
甲   3  C
乙   1  D
乙   2  E

ってテーブルがある時に、

甲 A他2名
乙 D他1名

って結果が欲しい時ってどうすればいいんでしょうか?

select Type from テーブル where No=1



select Type,count(*) from テーブル group by Type

を結合したいんですけども。

Oracle(9i以降限定みたいですが)だと副問い合わせでくっつけられるんですけど、
BDE で使えるSQLだと無理みたいです(ぼくが無知なだけかもしれませんが)。

結果格納用のテーブルを作成して、どちらかのクエリの結果をそこに保存する
やりかたしかないのでしょうか?

ひとつめのクエリは

select Type,Name from テーブル where No=1

のアヤマリでした。すいません。
>>297
こんな感じでどうかな?

select x.Type, count(*), y.Name from テーブル x, テーブル y
where x.Type = y.Type and y."No"=1
group by x.Type, y.Name
300297:04/05/14 11:57
できました!!
from句に同じテーブル2回かけるんですねぇ・・・。
知りませんでした。勉強になりました。
ありがとうございました。
顧客ID, 金額, 売上月

というフィールドがあるテーブルで、ACCESSで言うクロス集計をしたいと思います。

      4月  5月 6月 7月 8月 ・・・・
顧客A xxx円 xxx円
顧客B
顧客C

って感じにしたいのですが、BDEでどうかいたらいいかわかりません。
とりあえず、4・5月分だけ練習で書いてみました。

>select
> T.CustID, T4.Price April , T5.Price May
>from
> Customers T left join Bills T4 on T.CustID = T4.CustID left join Bills T5 on T.CustID = T5.CustID
>where
> (T4."Month" = 4 or T4."Month" is null) and
> (T5."Month" = 5 or T5."Month" is null)

しかしこれだと、5月だけ売上がある会社は消えてしまって思い通りの結果になりません。
月ごとにテンポラリテーブルをつくればいいんでしょうけど、それは煩雑なので、
それ意外になにか解決策はないでしょうか?
とりあえず保守書き込み
303デフォルトの名無しさん:04/06/21 01:56
このスレなんのためにあるの?
質問がある人は中級スレに書くがよろしい。
ここは人がいない。
>>303
低級者にはこのスレの意義が分からないだろ。中級スレへお帰り
上級者は5人しかいないんだよ。
>>304
ヽ(`Д´)ノウワァァン
>>304
自分の言ってることが、可笑しいことに
気づいてないんだろうか・・・。
まじレスのほうが可笑しい・・・・
308デフォルトの名無しさん:04/07/10 11:21
http://pc5.2ch.net/test/read.cgi/tech/1064420818/

中級者スレが1000いったのでage
再利用はスレタイがじゃまして失敗!
310age:04/07/12 22:46
age
311デフォルトの名無しさん:04/07/12 22:51
Delphiって共産党みたいだな。
もうすぐジリ貧であぼーん
Delphi-MLで聞けばいいんじゃね?
>>311
共産党員をなめるなよ。ゲパルトかけられるぞ。
学会員だって、元真言宗の武闘派でしょ?
いつから赤vs草加スレになった?
ゲパルトってドイツの対空車輌だよね。
そしてナチスは反共。
初心者 or 中級者がないのでここで質問します・・・
インターネットオプションの設定内容を取得したいのですけど
どうすればいいか解りますか?
Netを漁ってみたがうまくhitしないもんで・・・
知りたいのはプロキシ情報なんですけど。
本当に設定を取得しないといけないの?
単にプロキシの設定を利用して接続するだけならWinInetのオプション指定するだけなんだけど。
>>318
同じ設定で動かしたいんです・・・
設定すれば動くようにはできてるんですが、
環境に左右されたくないもので。
317ではシステムの設定を取得したいといい
319では環境とは無関係に独自のプロキシを設定したいといっていて
よく分からないんだけど

システムの情報を取るだけなら
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
のProxyServerあたり
>>320
すいません、わかりづらかったですね。
作っているアプリの環境設定にプロキシの項目があります。
自前で情報をもつのではなく、IEで使っている(インターネットオプションの設定内容)
で動作させたいのです。
>>320
レジストリに情報ありました。ありがとう。
323上級者:04/07/13 19:34
InternetGetOption
324デフォルトの名無しさん:04/07/15 01:03
TListViewのvsReport形式についての質問です。
ListViewの上の部分にでてくるTHeaderControlのような部分について
各ヘッダーがおかれている場所の座標を取ることはできないでしょうか?

ちょっと説明しにくいのですがTHeaderContorlにてできる
R.left := HeaderCtrl.Sections.Items[3].Left+3;
R.right := HeaderCtrl.Sections.Items[3].Right-5;
のような情報をTListViewで取得したいのです。

よろしくお願いいたします
n-1
ΣColumns[i].Width でいいと思う
i=0
326A:04/07/15 01:38
>>324
一つ一つの幅は、ListView1.Column[0].Width で判るみたいだから、
後は計算で、座標に変換、かな?
>>325 >>326
Thx、やはり手計算しかないのか…
>>327
THeaderControl も内部でそうやって計算してるみたいだけど。
高さも必要なら↓

function GetListHeaderHeight(ListView: TListView): Integer;
var
  Handle: HWND;
  Rect: TRect;
begin
  Result := 0;
  Handle := GetWindow(ListView.Handle, GW_CHILD);
  if (Handle <> 0) and Windows.GetClientRect(Handle, Rect) then
    Result := Rect.Bottom;
end;
>>328
なるほどなるほど
どうもありがとうございます!
330デフォルトの名無しさん:04/07/15 09:31
TControl.Topから、Formの絶対座標のTopを取りたいんですが、教えてください。
ClientOrigin
みんな罫線の多い帳票を作る時は、どうやって作ってるの?
QuickReport で罫線はマンドクさいし、LightReport は使い方が
よくわかんねぇよ!!
でも、仕事でやるハメになってしまいました(ハァ)
言語は Delphi6 です。
333お願い 教えて:04/07/15 10:06
かかってきた電話を
どの電話番号宛てなのかをPC画面上に
表示してくれる「CTI」システムのような
ソフトは作れるでしょうか?
334デフォルトの名無しさん:04/07/15 10:09
いつになったら俺が答える気になるような
上級者向けの質問がくるんだ?
くだすれでなく、こっちに質問書いているということは、上級者向け質問と
思っているのかね。
>>334
TComboBox(csDropDown)の高さ(Height)を変える方法をお願いします。
ここはレベルの高いインターナッツですね
ここは上級者が答えてくれる質問板だろ?
つまり>328は上級者でも>330-338は上級者とは限らない
へー、じゃあみんなここで聞いたほうがいいな。
UNIXのように自分に必要なリソースを最低限だけ取ろうっていう思想はWINユーザーには全くないのか?
>>340
Win2kを使い始めた頃からそういう意識はなくなりました。
こことあのバカスレとほぼ連続して書き込みがあるのは何でだろ
>>340
思想って(笑)
>>334
では上級者向けの質問を。

海の水はどうしてですか?
>>344
空が青いから
>>344
海水浴客の汗から塩分が出てるから
>>336
俺は334では無いが、その質問は、フォントのサイズを変える、なんて回答でもいいのか?
>>344
TECN-20811
>>336 はかなり上級者向けかもね。
フォントを維持したいなら多分次の手順でいけると思う。

元のフォントを複製する。
フォントのサイズを変える。
編集部分のフォントを戻すために EditHandle に WM_SETFONT を送る。
リスト部分をオーナー描画できるようにするため GetWindowLong で
ウィンドウスタイルに CBS_OWNERDRAWFIXED を加える。
WindowProc を付け替えてサブクラス化する。
新しいウィンドウプロシージャで CN_MEASUREITEM と CN_DRAWITEM を
処理してリスト部分を元のフォントで描画する。

フォームの直下に乗っていれば WM_MEASUREITEM と WM_DRAWITEM が
フォームの WndProc を回るのでサブクラス化する必要はない。
×GetWindowLong
○SetWindowLong
ここには、QuickReport や LightReport を
使いこなしてる方はいないってことはわかりました。
352デフォルトの名無しさん:04/07/16 00:06
もしかして>>332ですか?
仕事に必要で付属やフリーのレポートツールに満足できなきゃ商用のレポートツール買うしかないでしょ。
使いこなしてるとかの問題じゃない。
>>352
ここまで日本語読めない人ひさしぶりに見た。
354デフォルトの名無しさん:04/07/16 13:40
他のアプリが印刷した情報(枚数など)を取得する方法を教えて下さい。
>>354
他のアプリがどういうふうにその情報を記憶してるのか
わからないと答えようが無いじゃん。
>>355
分からないなら黙っててください。レスが流れてしまうので迷惑です。
>>354
他のアプリがどういうふうにその情報を記憶してるのかわからないと答えようがありません。

一般的には無理。
>>357
分からないなら黙っててください。レスが流れてしまうので迷惑です。
>>354
他のアプリが印刷した情報を書き出したファイルを読み込めばいいじゃん
>>359
分からないなら黙っててください。レスが流れてしまうので迷惑です。
> 他のアプリが印刷した情報(枚数など)を取得する方法を教えて下さい。

スキャナで取り込む
362344:04/07/16 17:40
>>348
知ってる人がいたのか・・・orz
Delphi相談室(中級者用)は死亡でつか?
前スレの終了(1000)にあたってこのスレを再利用しようと言うことになりましたです.
> 他のアプリが印刷した情報(枚数など)を取得する方法を教えて下さい。
しかたない、答えてやろう。
プリンターポートを常に監視してデータがきたらそのデータを読み取ってプリンターエミュレーターでも作って
その中で印刷枚数を数えればよい。
汎用性?しらん
366354:04/07/17 10:11
皆様、ありがとうございました。やはりだめですか・・・
スプーラーの情報には印刷枚数があるので、
これを何とか取得できないかと思いましたので・・・

メッセンジャーのポップアップのテキストから印字バイト数を
取得するのはできたのですが、これから枚数を予想するのは
無理がありますし・・・。

    ./l   ,-,   ,-,
    /i l  y'- `‐‐'‐-i,
    l i l  l ’ ι ’ l  保守。
    l j l キ  iフ  メ  
    l i l   ̄l ̄l ̄`    
    (二)、_,./  `-‐‐‐-、,.-,
      liiil`‐-‐'i,/ / l___,3 .l-‐'
     (二)二二/‐‐,-,-‐,‐'
      ""    l /  l l
         __l l   ヽヽ
         `‐ '   `"
相手のプロセスに侵入して、印刷関係のAPI(EndPageとか)へのエントリポイントを書き換えて
自前のルーチンをはさむようにして、そこで改頁の数を数えるというのは?
ここは厨房度も最上級なスレですね
370354:04/07/17 10:45
>>368
私の力では、そこまでは、とても・・・;;
タスクトレイにプリンタのアイコンが出たら、それをダブルクリックしたことにして
開いたエクスプローラの SysListView32 から取り出したらどうですか。
372354:04/07/17 12:00
371>>
それが、アイコンは一瞬で消えるので、うまくいくかどうか・・・
というかDelphiとは全く関係の無い質問ですね
374354:04/07/17 12:49
というかDelphiでいかに解決するかということです
じゃ、Delphi 以外で実現しているソフトが存在するのか?というところから始めようか。
やり方知ってるから答えてやっても良いが、358, 360 で荒らしたのはおまえか >> 354
377376:04/07/17 14:06
基本的にはプリンタの情報表示ウィンドウを自作することになる。
注意しなければいけないのは、アプリが何枚出したかったのか、ではなくプリンタ側が
受け取ったページの量しか取れない。ほとんどの場合一致するが。

それと Win9x 系と NT 系、および XP 以前と以降で API や通告メッセージの仕様が変わっている。
この部分はアプリより OS よりの機能のため、OS ごとに微妙に動作が異なる。
既存のすべての OS で動かそうとするには結構努力が必要なのでがんばること。
378376:04/07/17 14:13
スプーラーを通さずに印刷するプリンタがある場合にはもうどうしようもないが、
Windows ではまず考えなくても良いだろうから NT でのスプーラーサービスのことを考えます。
98 のことはあとで自分で調べてくれ。

NT のスプーラーは system32 の sppolss.dll (スプールサービス?) と spoolsv.exe の組で
動いています。こいつらがスプーラーの本体。
プリンタ情報ウィンドウはこれらから情報を取得して表示しているだけだ。
379376:04/07/17 14:49
鍵となるのは WM_SPOOLERSTATUS メッセージ。
誰かがプリントジョブを追加するとこのメッセージがやってきますから、EnumJobs で新しい
印刷ジョブを見つけ、その情報を取得。

380354:04/07/17 19:27
376さんありがとうございます。
WM_SPOOLERSTATUS を検索してみたら以下のコードが見つかりました。
今、自宅なので試せないのですが、休み明けにやってみようと思います。
枚数がこれで取得できれば嬉しいのですが・・・。

なお、358,360は私ではありません(もう四十路なので荒らしなどは・・・)。

type
TyourForm = class(TForm)
private
{ Private declarations }
procedure WMSpoolerStatus(var Msg: TWMSpoolerStatus);
message WM_SPOOLERSTATUS;
public
{ Public declarations }
end;

implementation

{$R *.DFM}

procedure TyourForm.WMSpoolerStatus(var Msg: TWMSpoolerStatus);
begin
ShowMessage('Now in the spooler a ' + IntToStr(msg.JobsLeft) + ' jobs';
msg.Result := 0;
end;
結局Delphiとは全く関係ないじゃん
382デフォルトの名無しさん:04/07/18 11:43
>>381
「全く」に引っかかるな・・・
枯れ木も山の賑わいです。
384354:04/07/20 14:14
あれから色々と探してみて、以下の2つのサイトを参考にして、
印刷枚数の取得ができるようになりました。ありがとうございました。

http://www.delphi3000.com/articles/article_1699.asp
http://tew.nease.net/w26.html
ポインタを配列みたいに使いたいんで

type
TIntArray = array[0..0] of integer;
PIntArray = ^TIntArray;

とかやるのって問題ある?
>>385
初心者用へいらっしゃい。
>>385
問題ない、むしろ動的配列が実装される前は、それが普通のテクニックだった
…が、{$R+}状態も考慮するなら、
array[0..High(Integer) div SizeOf(Integer)] of Integer
とかのほうがいいかな
散々外出の上にまちがっとるな
High(Integer)が$7fffffffで最初から2Gには1少ないんだから、あっちのスレの-1に意味は無いんでは?
その上妄想かよ
妄想はどっちだ。試してみろ

本当はどちらも間違ってて 0 .. (2G = $80000000 div SizeOf(T)) - 1 とすべきだが
High(Integer) = $7fffffff を使うなら、1少ない分端数がdiv SizeOf(Integer) = 4 で切り捨てられて
$1fffffffになって、添え字に0を含めるので+1して$20000000になって、
配列全体のサイズはまた*4して2Gジャストだ。-1は不要。
また妄想かよ
コード晒してみ
馬鹿の粘着か。
妄想って言いたいだけちゃうんかと小一時間…
コード晒すも何も型宣言が通るかどうかだけだろ。一行だし。
394デフォルトの名無しさん:04/07/25 11:58
ここが中級車スレに戻る日は永久にこないのかな・・・・






























age
395デフォルトの名無しさん:04/07/25 20:42
中級者スレが見当たらないのでこちらに書き込ませていただきます。

BitmapImg: array [0..30] of TBitmap;

上記の配列をfor文でCreate()し、その後、for文でループさせて
30枚の24ビットのビットマップ画像を読み込んでいるのですが
何故かWindows98/Meで実行するとPCがフリーズしてしまいます。
Windows2000/XPでは正常に動作します。

TBitmapを普通に使っているだけなので、何処に問題があるのか
分かりません。ステップ実行で追ってみたのですが
LoadFromFile()で読み込んでいる最中にPCがフリーズしてしまい
例外も拾えません。

何か情報ありましたらアドバイスお願いします。
システムリソースを食い尽くしてるのかな?
30枚程度でというのは、少々考え難いけど。
リソースモニタを表示しながら、もう一回
トレースしてみて。
ついでに、ビットマップのサイズは?
9x系だと画像のサイズとか色々制限がきつかった記憶があるが…
398395:04/07/25 21:01
>>396
トレースしようにもいきなり
フリーズしてしまうので、出来なさそうです。
フリーズするタイミングですが、必ずfor文の2ループ目に
この現象が起こります。

>>397
画像サイズに関して色々と試してみたのですが
1枚あたり5KBの画像でも、1枚あたり200KBの画像でも
必ず同じ場所(for文2ループ目)でフリーズしてしまいます。
とりあえずGDIリソース見ようぜ
400395:04/07/25 21:31
>>399
GDIリソース見てみました。
大体59%くらい残っているのですが
いきなりPCがフリーズします。

試しに8ビットのビットマップにしてみたら
フリーズせずに無事読めるようになりました。
しかし、使いたいのは24ビット画像なので
原因が分からないのは非常に困ります…
var
 BitmapImg: array [0..30] of TBitmap;
 i1,i2:Integer;
begin
 for i1 := 0 to 30 do
  BitmapImg[i1] := TBitmap.Create;
 For i1 := 0 to 30 do
  BitmapImg[i1].LoadFromFile(IntToStr(i1) + '.bmp');
 For i1 := 0 to 30 do
  Image1.Canvas.Draw(0,0,BitmapImg[i1]);
 For i1 := 0 to 30 do
 BitmapImg[i1].Free;
end;

俺のWin98環境では、このコードで1600x1200x24の
ビットマップを読ませても、何とも無いけど。
402デフォルトの名無しさん:04/07/26 04:25
Delphi超初心者スレより画像処理スレへと誘導されたのだですが上級者様のスレなら
お答えしていただける方お思いこちらへと移動してまいりました

ある画像(bmp)ファイルを入力し その画像の中から新円もしくは楕円に近い軌跡を描く線のみを抽出して
別画像ファイルとして 出力するということを考えているのですが
その画像ファイル内には他にも多くの直線部分や、塗りつぶし部分などが含まれているため
曲線部分のみの抽出方法をどうしたらいいのか悩んでおります。

http://www.eyescan.tv/images/me001.jpg

たとえばこのような画像を入力した場合ある程度のフィルタ処理をした後
データ-ベース上にある登録された個人との 照合をしある程度以上の適合率が出た場合は
OKサインを出すといった手法で考えております。
ファイルタ処理は完全に白黒レベルまで虹彩と書いてある目の外側にある放射線状に延びている多くの線は残した状態にまで
フィルタをかけデータベース上にある画像ファイルの一番外側の楕円軌道と入力画像の大外の楕円軌道が一致するよう
拡大縮小処理をした後にその2画像の適合率のようなものを出したいと考えています。

上記のような入力画像ファイルの中から曲線部分の抽出することを考えた場合どのような手法が考えられるでしょうか?
Delphiとは無関係のような
404デフォルトの名無しさん:04/07/26 04:39
Delphiでbmp画像の処理というのは出来ないものなのでしょうか?
他の言語にはめっぽう疎いものでこちらで質問させていただいたのですが
他の言語を組みこむ?という形になるのでしょうか?
そういう場合はどういった流れらになるのか教えていただけないでしょうか?
0..30
で30枚と言ってるのが怪しい。
他にも勘違いがあるのでは?

2ループ目って事は、i1=1の時?
>Delphiでbmp画像の処理というのは出来ないものなのでしょうか?

できるです。でも質問の内容は、それ以前のアルゴリズム的な内容かと。
せっかく画像処理スレを紹介したのに、
なぜここに書くかなぁ…
409デフォルトの名無しさん:04/07/26 11:59
中級スレ向けなのかもしれませんが、質問です。
最近のエクスプローラのように、"ツールバーを固定する"ことは、
Coolbarを使って簡単にはできないのでしょうか?
>>409
FixedOrder
>>395
ウィンドウズを巻き込んでクラッシュするなら、
ポインタや添え字のミスでスタックやヒープを壊しているか、
初期化忘れやFreeした後のオブジェクトを操作している気がするな。
412409:04/07/27 20:42
>>410
うーん。それは順番が変更できないだけ..

SendMessageでスタイルを設定すればできそうなのはわかりましたが、
ちょっと試しただけじゃ動かないなぁ。
シェブロンも対応大変そうだし、素直にToolBar2000かなにか試してみるかな。
413デフォルトの名無しさん:04/07/28 22:44
設計時にコンポーネントから、実行ファイル名を取得したいんですが、
何か方法はありませんか?
Application.ExeNameでは'DELPHI32.EXE'が返ってきてしまいます。
どなたか知恵をお貸しください。
>>413
ファイル名じゃなくて何を知りたい?
>>413
あ、もしかして
Paramstr(0)
のこと?
>>413
OpenToolsApiとか使えばいいんじゃないの
> 設計時にコンポーネントから、実行ファイル名を取得したいんですが

まだセーブしてないかもしれないし、コンパイルさえ一度もしてないかもしれないし
設計時に実行ファイル名を知る必要なんか思いつかないが。
>>417
プロジェクトの設定とプロジェクトファイルのパスが取得できれば分かるだろ。
> プロジェクトファイルのパスが取得できれば分かるだろ。

だからセーブする前にそのコンポ貼り付けたらどうするのよ?
>>419
project1.exeかな?
コンポーネントはコンパイルする前にも貼り付けられる。>>417 を読んでないの?
> 設計時に実行ファイル名を知る必要なんか思いつかないが。

なぁ、>>413 は何がしたくて、設計時にまだないかもしれない実行ファイル名が
知りたいの?
コンポーネントのコード内で、今設計時か実行時か知ることができることを
>>413 は知らないのでは?
>>423 なら、くだスレ行きだな
お前らもくだスレに帰れよ
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< >>425 オマエモナー
  (    )  \_____
  | | |
  (__)_)
427デフォルトの名無しさん:04/07/30 00:08
>422
設計時にコンポーネントを貼り付けて、
オブジェクトインスペクタでファイルバージョン等を
管理をしたかったんです。
コンパイル後の設計画面でもかまいません。
そりゃリソースエディタの役割だろ。
外部ツールで.resファイル編集しとけ。
429sage:04/07/30 00:45
とりあえず、設計時にファイルバージョン等を
取得して、いろいろやってみたかったんです。
無理っぽいので挫折します。
>409 こんなんでよければ...
1.FormのAutoScrollをFalseに設定
2.ScrollBarを2つ貼る
 Kind=sbHorizontal、Align=alBottom
 Kind=sbVertica、Align=alRight

3.ToolbarとPanel1を貼る。Panel1のAlignをalCliantに変更

4.Panel1にPanel2を貼る。Panel2を想定する最大サイズに変更
TopとLeftは0に設定
Anchorsを全てTrueに設定。BevelOuterをbvNoneに設定

5.FormのOnShowイベントでScrollBarの最大値を設定
 ScrollBar1.Max := Panel2.Width;
 ScrollBar2.Max := Panel2.Height;

6.2つのScrollBarのOnChangeイベントでPanelのTopとLeftを操作
 sbHorizontalの方で、Panel2.Left := - ScrollBar1.Position;
 sbVerticaの方で、Panel2.Top := - ScrollBar2.Position;
431デフォルトの名無しさん:04/07/30 21:21
自作のアプリで出力したjpgファイルを、通常使う設定になってるメーラーに添付して
メール作成画面を開くにはどうしたらいいですか?
MAPIに対応したメーラーに対しては、そういったことが可能らしいのですが・・・
Delphi固有の質問じゃないならこんな糞スレに頼るなよ
434デフォルトの名無しさん:04/08/03 00:19
中級スレかもしれませんが、ここで質問させていただきます。
C言語で書かれたプログラムをユニットとしてDelphiに組み入れる
ことは可能なのでしょうか?
それとも、おとなしくDelphiに書き換えなければならないのでしょうか?
C++Builder でコンパイルされた Objファイル はリンク可能。
Jpeg.pas はそうやってリンクしてるよ。
436デフォルトの名無しさん:04/08/03 08:37
>>435
やっぱ、宣言は__fastcallとか、引数に使えるものとか決まってんだよね。
詳細はどこに記載されてまつか?
シェルのコンテキストメニューに独自のメニュー加えたいんだけど、
良いサンプルないかな?DLLを作る必要があるようなんだけど。
それらしいものがsampleフォルダにあったり、Webにもあったりしたけど、
どれもエラーが起きたり、まともに動かなかった…
BC++5.5じゃだめ?
>>436
ヘルプのキーワード 'external 宣言' の 'オブジェクトファイルのリンク'
かなり不親切な説明しかないけど、実際には次のような感じ。

interface 部にインポートする関数の宣言を書く。
これは C++ 側で宣言されたものをそのまま Delphi 言語に翻訳する。
特に呼び出し規約に注意すること。
指定なし → 普通は cdecl
__fastcall → register
__stdcall, WINAPI, PASCAL → stdcall

implementation 部の冒頭に {$L ファイル名.obj} を入れる。
各関数の実装部は begin 〜 end; の代わりに external; と書く。
>>438
解らない。
C++Builder ver 1 は大丈夫だったから、
それより新しいC++コンパイラなら大丈夫だと思う。
フォームから別のフォームをShowした時に
呼び出したフォームの中央に表示したいのですけどどうやればいいのか教えてください。

呼び出され側のPositionプロパティはpoOwnerFormCenterにしてあります
メインフォームから呼ばれたときはちゃんと中央に表示されます・・・
その他のフォームから呼び出してもメインフォームの中央になってしまします。
Owner?を指定すればいいようなのですが・・・やり方がわかりません。
そもそも、フォームのOwnerはいつきまるのでしょう?
>>441
Position は poDesigned にしておいて Show を呼ぶ前に
Left と Top を設定する。

Owner はコンストラクタ Create の引数 AOwner で決まる。
自動作成の場合は Application グローバル変数。
>>442
ありがとうです、やはり poDesigned で位置指定ですか・・・

もう一つ質問です
PopUpMenu を表示した親を知りたいのですがどうすればいいですか?
PopUpMenu のイベント(Click)で親コンポーネントのTAGの情報を知りたいのです。
(Sender as TComponent).Owner.??? で取得してもフォームの情報のようです・・・
同じPopUpMenu を複数のコンポーネントで使いたいのです。
>>444
AutoPopup で開いた場合は PopupComponent。
コードで開く場合は、PopupComponent を設定してから Popup を呼べばいい。

Owner は単にコンポーネントを解放するコンポーネント。
Create でコンポーネントを作成すると AOwner の Components の List に
作成したコンポーネントが追加される。
Owner が廃棄されると List が廃棄され、その項目も廃棄される。
間違えた。
TMenuItem からなら GetParentMenu を呼んでメニューを取得。
それが TPopupMenu なら、その PopupComponent プロパティを見る。
>>445
うまくいきました。ありがとう。
>>444
最近の上級者ってレベル低いんですねぇ。
>>448
いまはここを埋めようとしてるんじゃ無かったっけ?
中・低級者もここを使えっていってなかったか?
そもそも上級な質問など無い
質問です。
子ウィンドウをタスクバーに表示することはCreateParamsをoverride
することで対応できたのですが・・・
メインのウインドウに対応するタスクバーをクリックしても
子ウィンドウが反応してしまい、メインをアクティブできませんどうしたら
良いのか教えて下さい。
>>451
親子関係にあるとそうなってしまう希ガス
兄弟関係じゃあかんの?
>>451
メインのウィンドウに対応するタスクバーは Application でしょ。
Application.MainForm が本当にメインのウィンドウに対応しているか
どうか確認してみたら?
>>452
兄弟でもいいけど・・・それって親もCreateParamsをoverrideということでしょうか?
そうすると、親の表示が2つになってしまう・・・(消し方が解りません)
>>453
たぶん違っていると思う、確認してみます。
変更できればいいんだけど・・・
456デフォルトの名無しさん:04/08/11 09:37
Indyは製品に入りましたが、使う場合は今でも
>バージョン情報ダイアログか起動時のスプラッシュダイアログ、
>またはドキュメントに以下の著作権表記を表示してください。
が必要でつか?

ttp://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BIndy%2FFAQ%5D%5D#content_1_5
parent-child と owner-owned の関係が混同されているのはよくあることだな
>>455
FormActivate で Application.MainForm.Handl 確認してみましたが同じ値でした。
仕方がないので、親もCreateParamsをoverrideして
表示しているウィンドウ+1の状態にしています・・・
どなたか解決の方法を知りませんか?
そもそも何でそんなことしたいの?

タスクバーから Application ウィンドウを消して不都合なく動作させるのは大変。
MLでたくさん議論されている。
460デフォルトの名無しさん:04/08/11 18:48
>>456 もキボンニュ
aa\a.txt
aa\bb\c.txt
aa\bb\d.txt
aa\ee\f.txt
aa\ee\gg\h.txt

↑このような感じの任意のフォルダを起点としたファイル名が記載されたテキストがあります。
で、このテキストを読み込んで、このツリー構造をTTreeViewとTListViewで表現したいと思ってます。
テキストはもちろん読み込めるんですが、その後のツリー構造の解析と、それをTTreeViewとTListViewに
落とし込む方法がわかりません。どなたかご教授ください。お願いします。
初心者スレじゃないんだからもっと具体的にどこまでできていて
どこでつまってるかを書きなさい。それとも丸投げしたいのか?
463A:04/08/11 20:20
>>461
初心者が妄想してみました。

テキストのフルパスを得る。
フルパスから任意のフォルダまでのパスを削除。
残りを、\ ごとに分解して、順番にツリーに登録していく。
もしすでに登録済みだった場合は、登録せずにノードを移動するだけ。
パスの最後まで繰り返す。

これを、全部のファイル分繰り返す。

こんな感じでどうかと。初心者が思いついた妄想なので、実際に正しく動くかどうかは
わかりません。もっといい方法があるかも、しれません。
>>459
普通に複数ウインドを表示していて切り替えたいだけなんですが・・・
画面サイズいっぱいのウインドが一つあるので、他のは下になるから。
>>462
すみません。ほとんど自分は初心者なんですが、
まず、あとから使いやすいように、ツリー構造をメモリに読み込んでおくんだと思うんですが、
そのツリー構造をどのように保存しておけばいいかわかりません。
ツリーの解析と、それを何型に保存するのか、がわかりません。よろしくどうぞ。
( つД`) 初心者スレの方がよかったねたぶん
223 名前:名無し~3.EXE[sage] 投稿日:04/08/11 22:14 ID:UFKHXgd0
>>113
ja_winxp_sp2.iso
CRC16:6A0B
CRC32:FFFFFFFF
MD5:35CB1233E6D8C6B7630A216B6AA75892

CRC32がオールFすげぇ…
>>459
お薦めの delphi MLを教えていただけませんか?
>>467
末尾にゴミ埋めたりすればCRC32を自由に操作するのは簡単だよね。
MD5だと一部を除き難しいんだけどね。
最近のMSはCRC32をオールFにする傾向がある
覚えやすいからか?
471A:04/08/12 05:29
>>465
>463は読んでない?( つД`)
というか、461=465 でいいんだよね? それを前提に書くけど…

>まず、あとから使いやすいように、ツリー構造をメモリに読み込んでおくんだと思うんですが、

これってどういう意味…?
読み込んでおくんだと思う、って、誰が何を…?

>そのツリー構造をどのように保存しておけばいいかわかりません。
>ツリーの解析と、それを何型に保存するのか、がわかりません。よろしくどうぞ。

ファイルにツリー構造を保存したい、ってことだよね?
ファイルに保存するための決まった形式ってのは無いと思うから、
自分が使いたいだけなら、自分で使いやすいように好きに決めていいと思うよ。
ツリーの構造だけを保存したいのなら、>461に書いてある、\で区切られた文字列の列を
テキストで書き出すだけでも保存できる。

それを読み込むのは>463の手順で、書き出すのは、ツリーを辿りながら、テキストに変換。
ツリー構造を辿るには、「再帰」ってのを使うと簡単にできるようになる。
> ファイルにツリー構造を保存したい、ってことだよね?

How to save and load a TTreeView to / from a stream
http://www.lmc-mediaagentur.de/dpool/tips/0703.htm

TStream の派生クラスとして TFileStream を使えば自動的にファイルになる。
TMemoryStream を使えばいろいろ応用できるし、LoadFromFile() SaveToFile()
でファイルにすることも可能。
>>473
ありがとう、試してないけどメイン非表示で最初のウインドを表示すればいいのか・・・
なんか、コロンブスの・・・かなぁ
>なんか、コロンブスの・・・かなぁ

いや、このTipsはけっこう巧妙にできてるよ。VCLのForm間の関係と
Windowsの作法に精通してないと、こうは書けないものだよ
>>465
TTreeView 自体が TreeNodes プロパティにツリー構造を
持ってるので、わざわざ実装しなくてもいい。

TListView との連携は TTreeNode にある Data プロパティを
活用するといい。Data は Pointer だけど任意のオブジェクトを
入れることもできるので、TreeView の選択を変更するたびに
ListView の状態をそのオブジェクトに保存/復元をする。
ファイル名だけなら保存先は TStringList あたりでいいと思う。
TListItem の方にも Data プロパティがあるので、これもうまく
利用すると相互に関連づけを行うことができる。
ただし、動的に生成したオブジェクトはちゃんと廃棄すること。
>>475
>Windowsの作法に精通してないと、こうは書けないものだよ
俺が書けるかと言われれば・・・だけど、メインを消してしまえという発送が・・・
> だけど、メインを消してしまえという発送が・・・

Delphi の VCLアプリで、複数のフォームがある場合、MainForm だけを特別
扱いしているんです。ですから、すべてのフォームを同等に扱うためには、まず、
MainForm だけを使わないようにしよう、というのはかなり自然な発想だと思うよ。
>>465
ただ単にツリーを保存するだけならTTreeViewのSaveToFileもあるよ
たとえスレッド内ローカルなオブジェクトであっても
VCLオブジェクトにアクセスする時はSynchronizeメソッドで同期をとってからアクセ
スしたほうが安全です。

って聞いたんですけど、これって本当にそうなのですか?
TThreadから派生したクラス内で動的に確保したTList等にアクセスするのにもSynchronizeメソッド
を利用しないといけないのですか?
しなくていい、っていうかしてはだめ。
>>480
そのTListのインスタンスが自分で生成したもので、
なおかつTThreadから派生したクラスがアクセスするのと同時に
メインスレッドからアクセスしないことを保証できるならSynchronizeなしでもアクセス可能。
> メインスレッドからアクセスしないことを保証できるならSynchronizeなしでもアクセス可能。

こういう場合は、アクセス可能というより、Synchronizeなしの方がいいでしょ。
中級者スレが見あたらないのでこちらへ・・・

DelphiでCADソフトを作りたいのですが
.DWG .DFX .JWC 等々のファイルフォーマットの形式を
詳しく解説しているサイトなど、ご存じの方又はCADソフトの開発に携わった方いらっしゃいましたら
ご教授頂けないでしょうか?
CAD板池
486484:04/08/14 15:00
スンマセン(´д`;)ドコ?

ビジネスsoftの所ですかね・・・
昔DXFから座標を拾い出して簡単な絵を描くソフトを書いたが、すんげー面倒で
苦労したし、二度とやりたくない。その時は知り合いが「CADユーザーのためのDXF
リファレンス・ガイド」という本を持ってたので借りてきたけどもう売ってないし、
それの改訂版すら完売らしい。



ってDFX?そいつぁしらねーな。
Delphi6 personal + Indy 9.0.14でIdFTPServerを使用しています。

StoreFileイベントに
VStream := TFileStream.Create(AFileName, fmCreate or fmShareDenyNone);
でファイルを受信しているのですが、
2,147,483,647Byte(2GB)以上のサイズのファイルを受信しようとすると強制的に転送が終了します。
この問題を回避する方法は無いでしょうか?
むろん他のFTPServerでは正常にファイルが受信できる事を確認済みです。

Indyのソースを見るとsizeやseekをintegerで操作しているので
このあたりがあやしいと思うのですが…
>Indyのソースを見るとsizeやseekをintegerで操作しているので

ヘルプより
Integer の範囲 -2147483648..2147483647 形式 符号付き 32 ビット

だから桁あふれして一気にマイナス最大値に突入してるんじゃないの
2GB以上は無理な感じだね
>>484
DWGは知らないが、DXFやJWCはそれぞれ詳しく書かれた書籍がある。
DXFに関しては海外のサイトでDelphiのサンプルコードだったか、コンポだったか忘れたが
以前落とした記憶がある。
DXFの古いバージョンならテキストエディッタで開いて見たらすぐ理解できるだろ。
自分も遊びでCAD作ったりしてみたが、この手の情報はネットには少ない。
SFXのように仕様をちゃんと公開してくれるといいんだけどね。
>>484
ものすごく手抜きになるし、勉強にならないかもしれないけど、
単にCADアプリケーションを作りたいという目的のためだけなら、こんなものもある。

ttp://www.codeidea.com/html/tcad.htm

dxfにも保存できたはず。
492488:04/08/17 21:12
>>489
やっぱりこれが原因なんだろうな。
Indyのソースは膨大で俺の力量じゃ直せないし
一から作った方が楽か…
BDE で like 演算子使うとスゲェ遅いんですけど、
早くする方法なんかないですか?

ぐぐっても、MLでもめっかんなかったーYO!!
>>492
IntegerをすべてCardinalに置換
2倍にしかならないが
FATなら4GBで十分
NTFSでもっと欲しかったらがんがれ
Int64は素人にはおすすめできない
WinSockつかって分割して読み込めばいい。
498488:04/08/21 00:57
>>494 >>496 >>497
結局、Indyのソースの怪しい箇所をInt64に直して可能になりました。
ちなみに作成しているのはHDD&DVDレコーダのソフト関連で、
扱うファイルサイズは数GBになるのが当たり前だったので必要でした。

ところでInt64が素人にお勧めできない理由ってなぜでしょう?

# ソース直すときMin関数にだまされてました。
# 標準のを使っていると思ったらIndyで独自に定義してるのね
# そのせいでいつまでも出来なかったよ…
488はShare作者
ShareははじめっからInt64使ってる
501A:04/08/21 12:44
>>488
全然関係ないのだけど…もしかして、VRDの作者さん?
502488:04/08/21 12:55
>>501
そです。
東芝HDD&DVDレコ ネットdeダビング解析
ttp://hobby5.2ch.net/test/read.cgi/av/1090733687/
から来ました。
この部分は完全にプログラム板の話だと思ったので
向こうではなくここに書き込みました。
>>498
・遅い
・オペランドへの配慮が面倒
欠点っつったらこれくらいしか思い浮かばんな
504A:04/08/22 02:34
>>502
おお、向こうと話題がシンクロしてたのでもしやと思ったのですが。
開発、がんばってください〜
BCB のスレで質問したら、あまり興味ある人がいないらしく
まともなレスがつかなかったので、こちらで質問しなおしたいと思います。

DBGridで、

1.グリッドに表示されている一番下のアイテム(仮にRow=5だとします)をクリック。
2.カーソルキーの↓を押す。  ---> Row=6に移動し、[*]と表示される。
3. 1.で選択されてたアイテム(Row=5)を再度クリック。
---> するとクリックしたアイテムの1個うえ(Row=4)のアイテムが選択される。

という症状が現れます。

環境は、BCB6 Pro SP4、WINXP Pro SP1 です。






(つづき)
調査の結果、
TDBGrid.MouseDown()
 ↓
TDatalink.MoveBy()
  ↓
TDataSet.MoveBy()
  ↓
TDataSet.CheckBrowseMode()
と呼び出されています。

CheckBrowseMode内で
TDataSet.State = dsInsert の時、TDataSet.Cancel() が実行され、
この時点で Row は一行上に移動するわけなんですが、
その分を考慮していないため、
「MoveBy の移動分+Cancel の1行分」移動してしまい、
クリックした行のひとつ上の行が選択されるようです。

ここまでわかったのですが、じゃあ具体的にソースをどうなおしたら
よいかわかりません。

また、他のプログラムに影響を与えたくないので、できれば、VCLソースの修正ではなく、
アプリケーション側で対応したいのですが、無理でしょうか?

よろしくお願いします。
特定のユニットを、そのアプリだけで修正verを使いたいなら、修正後の.pasをコンパイルして出来た.dcuを
アプリのフォルダに入れておけばOK。優先して使われますよ

ただしinterface節を変えてはダメ、修正できるのはimplementation以下のみ
質問です。
バイナリファイルの検索をしたいのですが、バイナリエディタで開いたときに
「4A 44 6C 23」と表示される場所の位置を調べるには、どのようにしたら
よいのでしょうか?
バイナリ版BM法を自前で実装しろ
4バイト程度ならbrute-forceでへらへら検索しても
たいして変わらない気もしないでもないけど
んなこたーない。
>>507
それは知らなかたーYO!!!
それなら気楽にトライできます。

というわけで、デバグに挑戦すます。
ありがと!
513デフォルトの名無しさん:04/08/29 01:54
DBGRIDで行の複数行選択して選択した行を全て下位に複写したいのですが
どのようなコードをかけばいいのですか?
514本田:04/08/29 10:54
>また、
>他のプログラムに影響を与えたくないので、
>できれば、VCLソースの修正ではなく、
>アプリケーション側で対応したいのですが、
>無理でしょうか?

VCLを修正してもスタテックリンクすれば、
他のアプリケーションに影響を与えない。
>>513
選択行をDBへAPPEND
516513:04/08/30 01:21
>>515
行追加はできるんですけどカラムのデータまでコピーされないんですけど
どうしたものか・・
>>516
普通にコードでコピー
518デフォルトの名無しさん:04/08/30 23:03
でけた 
519デフォルトの名無しさん:04/08/30 23:22
4バイトなら、Longint型にして先頭から1バイトづつ順番に調べた方が
BM方より速いのでは?
520デフォルトの名無しさん:04/09/01 10:01
Delphi7でDeCALを使おうとするとコンパイルエラー。
sourceforgeなんだし誰か直してウプしてよ。

自分はBCB派なんでSTLするしぃ。
>>520
どう直せばいいか教えてくれたらやるよ
522デフォルトの名無しさん:04/09/01 12:45
マルチページTIFFファイルを表示する方法をきぼんぬ。
TIFFならここにあるが、マルチページTIFFファイルは知らん。
ttp://www.logicnet.dk/lib/
>>524
ありがとう、でも全く使い物になりません。
>>525
じゃあこれはどうだ?
ttp://www.hicomponents.com/zzimageen.asp

一応、カタログには Load and save AVI, animated GIF, multi-TIFF
とあるが。
>>522
たったこれだけかよ。やる気うせた(´_`)
>>526
さんくそ。有料だがしばらく試用してみる。
>>527
誰かがやらないと皆困るんじゃない?
>>529
数行追加だから、各自直しても特に問題ないけどね。

現在の所有者は、現状渡しに妙に拘っているし・・・
苛めの腹いせ?
STLに該当する標準ライブラリなら各自直すんでなく、元を直すべき。
でないとライブラリが氏滅しちゃう。
532デフォルトの名無しさん:04/09/03 07:01
クイックレポートで表示させる列をで画面から任意で順番を変えたいのだが、
項目の位置のずらしかたがわかりません!どなたかお助けを!!

左から[名称][コード][区分]で表示させていたのを画面で順番を選ぶことができて
出力すると[コード][名称][区分]とかさせないといけないのです。
>>531
Delphi自体死滅予定だから大丈夫☆
>>533
お前、とっとと死滅して欲しい。
死ぬ死ぬいってる奴に限って死なないんだよな
クラスの○藤くんは、サクッと死にました
どうしてボーランドは nil as THoge で例外を出さないようにしたのですか?
>>537
ボーランド
F12でデバッガ立ち上がるのなんとかならん?
いちいちウザイ
あ、NTの機能ということは知ってていってます。
切れないものかと
>>539
切れないけど、キーを変更することは出来る

レジストリのHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\
Windows NT\CurrentVersion\AeDebugの中の

UserDebuggerHotKey=0x00000000を、例えば0x00000013 に変更後・再起動
thx!!
お勧めのコンポって何かある?
特に伝票入力に必要なグリッド系のを探してます。

教えれクリ
上級者にはおそれ多くて教えられん
>>543
TEditとかいいよ。一行入力用として最も使われてる。
特に伝票入力に必要なグリッド系のではないけど。
>>543
有名ではないけどTStringGridなんかどうだろう。かなりお勧めだよ。
入力できるし、オーナードローもできる。
>>546
それは、有名だと思います。
>>544
上級者に質問するスレなんだと思ってますたが・・・。

それはともかく中級者スレ復活しないかなぁ・・・。
>>543
TFromとかいいよ。いろいろな伝票がデザインできる。
TButtonとか、知る人ぞ知るって感じだけど、便利だよね。
>>549
TFrom とかの詳細を語ってくれないか。はじめて聞いた、そのクラス。
上級者の質問じゃないと思うんですが、初心者スレでスルーされたので
教えてください。DelphiでPythonの埋め込みってできますか? マクロ
みたいな拡張機能をPythonで書けるようにしたいんですが。
埋め込みはRubyでやろうかと思ったけど面倒そうなので一分であきらめた。
埋め込みたければ言語にはこだわらずにメジャーなの使ったほうがいいんじゃないの。
簡単だけどな・・・
どこが難しかったの?
>>555
難しいという以前にRubyの低レベルな知識が皆無な状態で
ここからここまでを読めば埋め込みできるってドキュメントが見つからなかったから。
ついでに技術デモになるようなexeも実際に採用したフリーウェアも見当たらなかった。
Apolloはチェックしたのか?
ttp://www.moriq.com/apollo/
チェックしたよ。その上での>556。
WEB眺めてもApollo\Docを眺めても(だいたいApolloのヘルプなんて置いてないし)
どこから手をつけていいのかわからなかったし
簡単に行きそうな気配が微塵もしなかった。

で結局DMokeyに落ち着いた。
シンプルなヘルプを上から下まで一読してあっさり動いたよ。
組み込みならDMonkey汎用性持たせるならWSHって線がほとんどの用途で一番無難かもね
560デフォルトの名無しさん:04/09/17 16:47:23
メソッドの引き数がdata: array of charになってまつ。
ここに、MemoryStream.Memory(メモリのポインタ)を代入したいんですが、
どうやったら良いですか?
561デフォルトの名無しさん:04/09/17 17:01:24
どうして data: array of char を渡さないの?
返ってきたら MemoryStream.Memory に内容をコピーしたらいいじゃないの
562560:04/09/17 17:02:44
いや、逆にMemoryStream.Memory の内容を関数に渡したいんです。
2重にメモリ取りたくなくて。
563デフォルトの名無しさん:04/09/17 17:12:15
ヘルプでは、
>代入の互換性
>T1 がPChar 型またはPWideChar 型で,T2 がarray [0..n]of Char(T1 がPCharの場合)またはarray [0..n]of WideChar(T1 がPWideChar)という形式の添字がゼロから始まる文字配列である
となってますね。
564デフォルトの名無しさん:04/09/17 17:12:24
じゃ、配列に内容コピーして MemoyStream Free。これで解決
565デフォルトの名無しさん:04/09/17 17:15:02
Pointer<->PChar<-Stringの変換はメモリ上の構造が同じなので可能だけど
array of char<-Pointerはメモリ上の構造が異なるので渡せない。
array of charにコピーするか
可能ならメソッド側をPCharに変更するしかない。
566デフォルトの名無しさん:04/09/17 17:16:20
なるほど、サンクス。
>可能ならメソッド側をPCharに変更するしかない。
これにしてみます。
567デフォルトの名無しさん:04/09/17 17:22:41
参照型みたいなので、array of charとPointerをマッピングしたいと思った。
568デフォルトの名無しさん:04/09/17 17:32:48
補足すると、array of char は動的配列なので、いつでも大きさが変えられる。
これは隠れたフィールドをコンパイラ/RTL が管理しているわけだ。だからいつでも
大きさを変更でき、かつ好きなときに大きさを入手できる。

ポインタは単にメモリの一点を示すだけ。

Array of char の保持する内容をポインタで操作することはできるが
ポインタを(何もせずに)array of char として渡すことはできない。
無理して渡すと、たとえば array of char の大きさを変えようとしたときに
存在しない(隠れた)変数を参照しに行くため、結果は悲惨なことになる。
569デフォルトの名無しさん:04/09/17 17:33:48
>可能ならメソッド側をPCharに変更するしかない。
メソッドオーバーライドを使って引数二種類定義したら?
570デフォルトの名無しさん:04/09/17 17:56:24
参照されるだけだとしたら、こんなん駄目かな?

type
 ArrayChar = array[0..0] of char;
 PArrayChar = ^ArrayChar;

var
 Pac: PArrayChar;
begin
 Pac := MemorySteam.Memory;
 obj.method(Pac^);
571デフォルトの名無しさん:04/09/17 18:03:58
array of charとarray[0..0] of charは全く別物。
0..0なんて小細工は勧めない方がいい。
572デフォルトの名無しさん:04/09/17 18:28:03
メソッドの引数array of charに動的配列(これもarray of char)を入れようとすると、
動的配列は入りません、てエラーが出る。

array[0..10] of charなんてしとくとコンパイル通るが、
固定サイズは何だかやり難いなー。
573デフォルトの名無しさん:04/09/17 18:29:32
新しく型宣言するんだよ、そんなときは
574デフォルトの名無しさん:04/09/17 18:31:35
やっぱ、
>>569
の通りにしまつ。
575デフォルトの名無しさん:04/09/17 22:08:38
2chに入り浸ってるからTCharDynArrayとTWideCharDynArrayを定義し忘れるんだよ>某
576デフォルトの名無しさん:04/09/17 22:25:18
しょうもねぇな、まったく
577デフォルトの名無しさん:04/09/22 12:55:58
TUpDown の Associate プロパティにTEditを指定しているのですが
マウスでアップまたはダウンをクリック後、他の場所(フォームとか他のコントロール)
をクリックすると勝手にクリックされてしまうという現象が発生します・・・
どうやら、既出の不具合のようですが今だに改善されていないのでしょうか?
W2K D6 Update Pack2 です。

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/browse.cgi?index=20127
で論議されてますが・・・
578デフォルトの名無しさん:04/09/22 13:08:39
>>577
なんとなく解決、イベントの処理中にProcessMessagesを投げてたのがまずかったみたいです・・・
579デフォルトの名無しさん:04/09/22 13:23:28
しょうもねぇな、まったく
580デフォルトの名無しさん:04/09/22 14:02:11
ProcessMessages って投げるもんなのか?
581デフォルトの名無しさん:04/09/22 17:04:11
差し込むものに一票。
582デフォルトの名無しさん:04/09/22 17:13:48
呼び出すものに一票。
583デフォルトの名無しさん:04/09/23 07:17:47
>クリックすると勝手にクリックされてしまうという現象が発生します
>なんとなく解決、イベントの処理中にProcessMessagesを投げてたのがまずかったみたいです

因果応報
584デフォルトの名無しさん:04/09/23 23:25:01
DelphiのinterfaceってCOM依存って聞いたんですけど
Javaのinterfaceみたいな気分で使えないんですか?
585デフォルトの名無しさん:04/09/23 23:34:49
無理
できなくもないという言い方もできなくもないけど
586デフォルトの名無しさん:04/09/24 13:04:35
COM に依存してませんが?
デフォルトで COM のための実装クラスだけが用意されているだけでしょ?
587デフォルトの名無しさん:04/09/24 15:44:00
クイックリファレンスにのってたTNoRefCountから継承させてインターフェイスをよく使ってる
588デフォルトの名無しさん:04/09/24 16:03:04
>>586
言語仕様的にCOM向けにデザインされてるって意味で
COMに依存してるって意味じゃないの。
自分はJavaでは使うけどDelphiでは使う気しないな。
面倒だしなんかインターフェースごっこをしてるみたいでなんかヤダw
589デフォルトの名無しさん:04/09/24 16:05:28
>自分はJavaでは使うけどDelphiでは使う気しないな。

同感
590デフォルトの名無しさん:04/09/24 16:07:20
もったいない
591デフォルトの名無しさん:04/09/24 17:23:02
もったいない。
どこら辺が「言語仕様的にCOM向けにデザインされてる」と思うの?
592デフォルトの名無しさん:04/09/24 17:30:32
ここら辺の ttp://www.borland.co.jp/delphi/del6/report/tsunoda_2.html
>ただし、Javaと異なり、DelphiのインターフェースはIUnknownを継承しているため、
>TInterfacedObjectを継承しないと個別に、QueryInterface, _AddRef, _Releaseを
>実装しなければならない。
などを無批判に信じ込んでしまっている人がいるのかな?
某結城浩が、それを無駄に広めている形跡もある...

Interface を宣言すると暗黙の IUnknow が継承されるが、これも
インターフェースでしかないのだから COM に依存なんかはしていない。
TNoRefCount でもなんでも定義して使えば済む話だ。

Java と違って GC が無いから、代わりに GC 代わりの参照カウンタを実装するための
インターフェースが二本出ているだけ。

ToolsAPI なんか COM とは一切関係の無い Interface 宣言の山だぞ

593デフォルトの名無しさん:04/09/24 17:33:19
AddRefとかのメモリ管理を強制(されないけど)される
Java,C#等で用意されている基本的なインターフェースがない(かなり貧弱)
VCL自体COM関連でしか使ってないのでインターフェースベースの設計になっていない。から拡張時に使わない。
Delphiでインターフェース使っても特に劇的に生産性が向上するわけでもない。継承ベースでもふつーにこなせる。
だから使ってない。別に役に立たないというつもりはないけどDelphi積極的に使う気がしないというだけ。
594デフォルトの名無しさん:04/09/24 17:36:04
Del房ってネガティブだよね
595デフォルトの名無しさん:04/09/24 20:49:51
ネガティブではないよ。ただ個人的に老い先短いDelphiでがんばるつもりがないってだけで。
interfaceもinterfaceとTComInterfaceを分けてくれればもう少し幸せになれたって気がしないでもないけど。
596デフォルトの名無しさん:04/09/25 09:11:29
Del7にTHTMLが無いんですが、どうしたら良いでつか?
597デフォルトの名無しさん:04/09/25 09:15:17
>>595
言語に老い先も糞もねぇだろ。
プログラマという職業が老い先短いというのは分かるが。
だいたい職業でDelってるやつなんていないし。
598デフォルトの名無しさん:04/09/25 10:46:55
言語ではなく、プラットホームに依存した開発環境というのはあります。
だからOSの変更により使えなくなる開発環境もあり得ます。

最近はSPで使えなくなる環境もあるようですね。
599デフォルトの名無しさん:04/09/25 10:55:26
>>598
プラットホームに依存しない開発環境があったら教えてください。
600デフォルトの名無しさん:04/09/25 10:57:48
Ruby
601デフォルトの名無しさん:04/09/25 11:00:49
>600
依存してるじゃねーか
602デフォルトの名無しさん:04/09/25 11:25:52
BrainFuck
603デフォルトの名無しさん:04/09/25 17:29:44
>>600
言語だしw
604デフォルトの名無しさん:04/09/26 15:12:05
久々にIrvineのvupがあったのでhp見てて思ったのだけれど
mark&sweep GCを行う ライブラリって何?便利?
605デフォルトの名無しさん:04/09/26 21:47:01
おい、苺きんたまとかいうウイルス作ったのDelphianらしいじゃねーか
責任取れよお目ーら
606デフォルトの名無しさん:04/09/27 19:21:48
ほとんどのウィルスは VC 製だけど、そこんとこよろしく。
607デフォルトの名無しさん:04/09/27 20:01:01
ちなみに過去にはVBで作られたウイルスもありましたよ。
ただVBでウイルス作れるような香具師でも
ランタイムの面倒をみる事までは出来なかったようで感染力は低い。
608デフォルトの名無しさん:04/09/27 22:20:28
vbsで十分
609デフォルトの名無しさん:04/09/29 02:22:06
C++のstl::sortよりも高速なソート方はありませんか?
610デフォルトの名無しさん:04/09/29 08:13:56
>>609
スレ違いでは?
611デフォルトの名無しさん:04/09/29 19:21:11
言葉が足りませんでしたね
C++のSTLの std::sortよりも高速なソートをDelphiで
実装できますか?
612デフォルトの名無しさん:04/09/29 19:25:38
そりゃまー、できるだろ。
高速なソートってのはデータにも依るから、データの傾向を調べてあわせれば
汎用であるstd::sortには勝てるんじゃないか?
613デフォルトの名無しさん:04/09/29 22:06:16
>>611
逆に何で実装できないと思うの?
614デフォルトの名無しさん:04/09/29 22:43:41
可能 不可能じゃなくて
勝てるなら実際に教えてください
615デフォルトの名無しさん:04/09/29 22:44:57
だからソートなんてデータに大きく依るんだって
616デフォルトの名無しさん:04/09/29 22:58:13
ポインタなら32bitだから関係ない
617デフォルトの名無しさん:04/09/29 23:34:36
ポインタでソートするわけないだろ。比較は中身
618デフォルトの名無しさん:04/09/30 01:23:31
馬鹿ばっか
619デフォルトの名無しさん:04/09/30 02:39:35
そうだな、アルゴリズムスレでも行けばいい
620デフォルトの名無しさん:04/09/30 02:59:05
std::sortはどうやってるか知りませんが、逆写像ソートは速いらしいです。
621デフォルトの名無しさん:04/09/30 05:22:27
実数や不定長文字列の逆写像ソートの効率の良いアルゴリズム、あったらおしえてくれ。
622デフォルトの名無しさん:04/09/30 05:38:36
分布数えソートの方が速いらしい。

>>621
大小関係を維持したままハッシュ値を求められればいいね。
623デフォルトの名無しさん:04/09/30 05:54:25
じゃ
>大小関係を維持したままハッシュ値
の求め方を考えてくれよぉ

でまぁ stl にしろ、汎用性と性能は衝突することがあるので、要注意。
stl だと(というか stl の目的は)アルゴリズムを取り替えられるので
使う人がいろいろ選択できる点は良いです。

その代わり stl のコードは読みやすいものではないし、不必要なコードも
大量に生成される。
624デフォルトの名無しさん:04/09/30 08:37:55
それはおまいの力不足
人のせいにするな
625デフォルトの名無しさん:04/09/30 08:41:16
>>615
だったら限りなく等しいデータでいいよ
626デフォルトの名無しさん:04/09/30 09:17:11
>>625
なんじゃそら。
大体ソート済み、とか、逆順になっている事が多い、とか、ランダム並びが多い、とか、
全データ量が膨大、とか、入れ換えより比較に時間がかかる、とか、
そういうところを見るんじゃないのか?
627デフォルトの名無しさん:04/09/30 09:29:06
アラシだろ、ほっとけ
628デフォルトの名無しさん:04/09/30 09:41:09
>>620
逆写像はバケットに比べて勝ってる所が全くない使い道0ソートです。
629デフォルトの名無しさん:04/09/30 15:07:03
PC Anywareチックなプログラムを作ろうと試みています。
クライアント側が指示を出すとサーバが指示を受けて動作するような感じのです。

//Client側
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText('01');
end;

SendText以外に
・MessageDlgのような任意のダイアログを出す場合
・その他の指示を出す場合
の記述の例を書いていただけませんか?
とても勝手なのですが是非お願いします。
630デフォルトの名無しさん:04/09/30 15:08:27
すいません投稿するスレ間違いました∧||∧
631デフォルトの名無しさん:04/09/30 16:22:45
>>614
台風ですが釣れますか?
632デフォルトの名無しさん:04/10/01 00:01:01
文字列はラディックスソートと分布数えソートを組み合わせるのが速いらしい。
実数は途中までクイックソートで残りを挿入ソートで仕上げるのはどうかな。

ところで、分布数えソートって最速なの?
633デフォルトの名無しさん:04/10/01 00:03:14
データ構造とデータの傾向に依存する。
634デフォルトの名無しさん:04/10/01 00:11:42
昇順に並んでいるデータなら挿入ソートが最速かも。

635デフォルトの名無しさん:04/10/02 09:07:36
procedure combsort11(var data: array of integer);
var
i, size, hold, gap, done: integer;
begin
size:= High(data) + 1;
gap:= size;
done:= 0;
while (gap > 1) or (done = 0) do begin
gap:= (gap * 10) div 13;
if gap = 0 then gap:= 1;
if (gap = 9) or (gap = 10) then gap:= 11;
done:= 1;
for i:= 0 to size - gap - 1 do begin
if data[i] > data[i + gap] then begin
hold:= data[i];
data[i]:= data[i + gap];
data[i + gap]:= hold;
done:= 0;
end;
end;
end;
end;

636デフォルトの名無しさん:04/10/03 02:38:54
>>635
分布数えソートの方が4〜5倍速い。
637デフォルトの名無しさん:04/10/03 10:12:13
分布数えソートって呼び方はアフォっぽい。
バケットソートと呼べ
638デフォルトの名無しさん:04/10/03 11:36:26
馬尻
639デフォルトの名無しさん:04/10/03 11:57:17
そんな変なソートアルゴリズムと一緒にしないでください
640デフォルトの名無しさん:04/10/20 15:55:36
WindowsXP上でテーマがWindowsXPの場合、
フォームにTDBGridと結果を返すデータセットをおいて、
以下のコードを実行するとTDBGridの垂直スクロールバーが消えてしまいます。

@Button1Click → ○ 垂直スクロールバー出る
AButton2Click → ○ 件数0で垂直スクロールバー消える
@Button1Click → × 垂直スクロールバーが表示されない(描画の形跡は見られる)

@AA@の様にAを2回繰り返した場合は正常に表示される。

procedure TForm1.Button1Click(Sender: TObject);
begin
ADODataSet1.Close;
ADODataSet1.CommandText := 'select item_cd from item';
ADODataSet1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ADODataSet1.Close;
ADODataSet1.CommandText := 'select item_cd from item where item_cd = ''無いコード''';
//結果は0件
ADODataSet1.Open;
end;

外国のサイトにも同様の現象で困っている人がいましたが、解決されてないみたいでした。

解決できる天才はいませんか?
641デフォルトの名無しさん:04/10/22 01:57:55
Delphi5Proにて…

ClientSocketのHostプロパティに無効なURLを入力すると
OnErrorイベントが発生しないで
「'ASync Lookup' APIでWindows ソケットエラー:そのようなホストは不明です。(11001)」
というメッセージが表示されちゃうのはなんとかできないのでしょうか?
642デフォルトの名無しさん:04/10/22 02:00:34
そんなバナナ
>>641
おい〜,あるスレで回答がもらえなかったらほかのスレで尋ねる前に
「レスがないようなのでほかのスレで尋ねてみます」とか一言断わろう.

…と!いうわけで!くだすれの方でレスつけたのでご覧下さい.
644641:04/10/26 11:13:53
…いろいろお手数かけました
645デフォルトの名無しさん:04/11/18 09:59:17
個々のプログラムが使用するメモリー容量を取得したいのですが・・・(タスクマネージャのプロセスタブみたいなの)
TMemoryStreamとかで動的に取得しているメモリー容量まで取得したいのですが方法がわかりません
どなたか、解りませんか?
646デフォルトの名無しさん:04/11/18 10:58:03
>>645
仮想メモリサイズ ってのがあるのか・・・
これはどうやれば取得できるのだろう?
647デフォルトの名無しさん:04/11/18 12:43:26
Win32APIスレ池
648デフォルトの名無しさん:04/11/18 22:58:05
こんなマルチが出没してるね。このスレにもくるかな?
 ↓
『うほっ!いいPDF
 http://www.impress.co.jp/ebook/title/263-1.html
649デフォルトの名無しさん:04/11/22 20:18:18
くだすれで返答を頂けませんでしたので
申し訳ありませんがこちらでも質問させて下さい

サイズ変更可能なタイトルバーなしのフォームを作りたく思い、
検索してサンプルなども見つかって動作するのですが、不満な点があります。

探したところCreateParamsをoverrideしてWS_THICKFRAMEを指定してあげる方法しか
見つからなかったのですが、これだと当然ながらフォームの縁に太い線が出来てしまいます。
出来れば縁がないものを作りたいのですが、良い方法がありますでしょうか?
※BorderStyleでbsNoneにしたときのような外観にしたいのです。
650デフォルトの名無しさん:04/11/22 22:15:52
WM_NCHITTEST でぐぐる
651おしえて!!:04/12/18 00:39:12
a(n)=1×2×...×n
b(n)=b(n-1)+b(n-2)、 b(1)=1、 b(0)=0

・n(≥1)が入力として与えられたとき、a(n)の値を返す再帰的なプログラムを記述せよ。
・上記の問題を再帰を用いないプログラムで記述せよ。
・n(≥1)が入力として与えられたとき、b(n)の値を返す再帰的なプログラムを記述せよ。
・上記の問題を再帰を用いないプログラムで記述せよ。
※ただし入力と出力は全ての整数型で与えられるとし、記述はDel-phiで記述せよ。
652デフォルトの名無しさん:04/12/18 00:40:35
>>651
失せろキチガイ

>どなたかわかる方いらっしゃいませんか??
>もしくはわかりそうな人がいるとこしりませんか??

お前の態度が気に食わない。かつ、マルチポストするなボケ。
653デフォルトの名無しさん:04/12/18 00:45:47
Del-phi
654デフォルトの名無しさん:04/12/18 07:24:48
>どなたかわかる方いらっしゃいませんか??
>もしくはわかりそうな人がいるとこしりませんか??

偏差値50程度の高校生なら誰でもわかるよ。
宿題は自分でやろうね。
655デフォルトの名無しさん:04/12/18 08:02:35
もう冬休みか。はえーな。
656デフォルトの名無しさん:04/12/18 08:39:32
簡単すぎて、レスする気にもならないんだよね。だから、ウザがられるってことに気がついてないのかな。
657デフォルトの名無しさん:04/12/18 08:50:53
簡単杉っていうより、それで必死なのがうざいんだろ
658デフォルトの名無しさん:04/12/19 15:16:38
学校の宿題だとして、学校でDelphi使ってるのに驚いたよ
659デフォルトの名無しさん:04/12/19 18:27:27
つかってるのは Del-phi だろ
660デフォルトの名無しさん:04/12/20 14:46:21
自作クラスのHelpInsight対応めんどくさすぎ。
.pasから.dcu, .xmlはいた時点で自動的にIDEが認識すべきだろ。
MSはVC++6.0から既に対応してるんだが。
661デフォルトの名無しさん:04/12/20 16:26:01
D2005使ってる時点で(ry
662デフォルトの名無しさん:04/12/20 18:30:48
やり放題のOSメーカーと一中小企業を比較するのが無理ってもんです。
巨人ファンは黙っててください。
663デフォルトの名無しさん:04/12/20 23:50:04
なんだ敗北宣言か > 一中小企業

つまらん
664デフォルトの名無しさん:04/12/20 23:55:03
巨人ファンが、あたかも自身が巨人であるかのように振舞う不思議
665デフォルトの名無しさん:04/12/21 01:57:29
一中小企業ファンが、あたかも自身が一中小企業であるかのように振舞う不思議
666デフォルトの名無しさん:04/12/21 13:44:20
TRichEditに読ませるリッチテキストを作ろうと思ったんですが、
リッチフォーマットって暗号みたいでつね。
テキストをリッチテキストに変換してくれるライブラリはありまつか?
667デフォルトの名無しさん:04/12/21 14:12:11
668デフォルトの名無しさん:04/12/21 14:40:24
>>666
MicrosoftWordとか
669デフォルトの名無しさん:04/12/21 14:42:48
マルチじゃないよ。
だって初心者スレでは透明人間でつから!
670デフォルトの名無しさん:04/12/21 23:57:13
TEditor作者さん、D2005インストール出来なかったそうです
671デフォルトの名無しさん:04/12/22 18:13:34
ACMを使ってMP3をデコードさせようとしてるのだが上手くいかない・・・
acmFormatSuggest
acmStreamOpen
acmStreamSize
acmStreamPrepareHeader
acmStreamConvert
acmStreamUnprepareHeader
acmStreamClose
を使うのは分かったけど
落ちてるmsacm.pasの定義だとacmStreamOpenすら通らない・・・
どなたかACM使ってデコードできてる方いません??
672デフォルトの名無しさん:04/12/24 17:18:43
TRichEdit.SaveToFileするとリッチテキストになってしまいます。
テキストファイルでSaveToFileするにはどうしたら良いですか?
673デフォルトの名無しさん:04/12/24 18:03:45
PlainText
674デフォルトの名無しさん:04/12/24 18:23:30
サンクスでつ>>673

上級な質問でなくてゴメソ
675デフォルトの名無しさん:04/12/24 22:15:24
>>670
incファイルいじればインスコはできるんだけど、たまに例外起こして止まる
676デフォルトの名無しさん:04/12/25 17:17:12
独自の画像形式のファイルがあって、それを描画するコントロールを作りたいんですが、
何のクラス(TCanvas、TGraphic、TBitmapとかとクラスが一杯あって...)を派生したら良いでつか?

関連サイトもキボンニュでつ
677デフォルトの名無しさん:04/12/25 17:26:01
>>676
内部的にビットマップに描画しておいてそれを表示するのと
WM_PAINTで毎回Canvasに描画する方法があるけどどっち?
678デフォルトの名無しさん:04/12/25 18:07:12
>内部的にビットマップに描画しておいてそれを表示するのと
こっちキボンニュ

>WM_PAINTで毎回Canvasに描画する方法があるけどどっち?
こっちは、全体の一部を描画する場合にのみ速くなるんですか?
もしそうだったら今回使いませんが、お手数でなかったら教えて下さい。
679デフォルトの名無しさん:04/12/27 08:53:38
>>676-678 の件、教えてage!

ググッてみましたが、TImageの書き込みが遅いだとか、Canvas.Pixelsが遅いだとか、難しいですね。
680デフォルトの名無しさん:04/12/27 09:14:33
>>679
Pixelsは1ピクセル書き換えるだけなのにGDIのAPI呼ぶからな。ScanLineで検索。
681デフォルトの名無しさん:04/12/27 09:33:37
ScanLineは見つけました。

なるほど、PixelsはGDIのAPIコールが遅いわけですか。
ScanLineだとビットマップイメージでこれだとAPI呼ばない、、、わけないですよね?
GDI以外のAPIコールなんかな。
まだ理解できてなくて苦しい。。。
682デフォルトの名無しさん:04/12/27 09:47:38
WindowsのビットマップにはDDBとDIBがあって、DDBはデバイス依存形式で常にAPIを介して操作する。
DIBは固定形式で作成時にビットマップ(=ビット配列)へのポインタを受け取れるので直接弄れる。
ScanLineはDIBの各ラインへのポインタを計算して返してくるだけ。
683676:04/12/27 10:46:54
なるほど勉強になりました。サンクス>>682

ビットマップ形式にしてScanLineで書くと、ビットマップのポインタに直接書けるわけですね。

もう一つ知りたいのは、せっかくScanLineしてもTImageに書くと遅いのでしょうか?
TPaintBoxとかに書くのが良いのでしょうか。
(1回書けば、再描画は意識しなくてOKですよね?)

それともう一つ、
>WM_PAINTで毎回Canvasに描画する方法があるけどどっち?
について、詳細を知りたいです。
WM_PAINTのメッセージハンドラを作るとして、そうするとなんで高速化なんですか???
684デフォルトの名無しさん:04/12/27 10:52:17
つうかJpeg
uses XYZ;
...
Image1.Picture.LoadFromFile('image.xyz');
だけできればいいんじゃないの?
やり方知らないけど
685デフォルトの名無しさん:04/12/27 10:52:42
×つうかJpeg
○つうかJpegみたいに
686デフォルトの名無しさん:04/12/27 10:54:29
とにかく、どれかひとつでもやってみては?
全部の疑問が解決しないと取り掛かれませんか?

・ビットマップのファイル形式を調べる(TBitmap について理解が進む)
・ウィンドウズにおける描画の仕組みを理解する

どっちも Delphi と直接関係ない
687デフォルトの名無しさん:04/12/27 11:10:11
>TBitmap について理解が進む
これ重要。

>ウィンドウズにおける描画の仕組みを理解する
上級なら知っとくべし。
688デフォルトの名無しさん:04/12/27 11:34:12
>WM_PAINTのメッセージハンドラを作るとして、そうするとなんで高速化なんですか???
高速化にはならないだろ。
例えばベクトルデータの配列があってそれを毎回
LineToとかで描くとかそういう話。
ビットマップ持たないで済むから省メモリだし
レンダリングに柔軟性を持たせることが出来るかも試練。
689676:04/12/27 11:37:38
納得でつ>>688
やっぱScanLineですね。
690デフォルトの名無しさん:04/12/27 14:59:39
>TImageの書き込みが遅い
これは何でだろ。
691デフォルトの名無しさん:04/12/27 15:56:40
日本ヒューレット・パッカード株式会社 SSS サポートセンター Delphi 係ってなんだ?
692デフォルトの名無しさん:04/12/27 16:56:58
>>690
>>688のようにCanvasに描画する処理は、
TImageでは一度Picture.Bitmapの上で行われてから転送されるので
メモリ的にも処理速度的にも効率が悪い。
ただし、Picture.GraphicのDrawは直接親のCanvasに行われるので
一般的な使い方なら関係ない。

あとは、状態によりWM_ERASEBKGNDで全て背景色で塗りつぶしてから
その上にPicture.Graphicを描き直すので、無駄だしちらつく。

そのほかに、TImage.Picture.Graphicへの代入は実際にはAssignなので、
代入するオブジェクトが複製される。これは画像のデータを内部の
TSharedImageで共有するVCLのTGraphic派生クラスでは問題にならないけど、
そうなっていないフリーのクラスなどでは、代入の時の複製処理が重いし、
さっさと元のオブジェクトを破棄しないと必要量の2倍のメモリを食う。
693デフォルトの名無しさん:04/12/27 17:52:01
>>688 の話は PaintBox の OnPaint のことだろ
694デフォルトの名無しさん:04/12/27 17:54:00
Bitmap の Assign てコピーなの? CopyOnWrite だから、一方が変更されるまで
実際のコピーは行われない、ってきいたことがあるけど
>>671
遅いレスですいません.

ACMは2年くらい前にPCMファイルのサンプリングレート変換に使いました.
MP3での変換は使ったことがありません.

やはり落ちていたユニットを使ってプログラムを作りました.
レコード型の宣言が一部抜けていたのでMSDNを参考に追加.
ちなみにうちにあるユニットのacmStreamOpenの宣言:

function acmStreamOpen(
phas : PHACMSTREAM;
had : HACMDRIVER;
const pwfxSrc : TWAVEFORMATEX;
const pwfxdst : TWAVEFORMATEX;
pwfltr : PWAVEFILTER;
dwCallback : DWORD;
dwInstance : DWORD;
fdwOpen : DWORD
) : MMRESULT; stdcall;
696671:04/12/27 21:52:14
>>695
レスどうもです。
やはり宣言は同じですか・・・
結局acmStreamOpenを通すのに使った宣言は
function acmStreamOpen(
phas : PHACMSTREAM; had : HACMDRIVER;
pwfxSrc : PWAVEFORMATEX;
pwfxdst : PWAVEFORMATEX;
pwfltr : PWAVEFILTER;
dwCallback : DWORD;
dwInstance : DWORD;
fdwOpen : DWORD) : MMRESULT; stdcall;
でポインタを使って通してます。
しかし、acmFormatSuggestをポインタで通すとエラーに・・・
acmStreamPrepareHeaderでもMMSYSERR_INVALPARAMが返ってくる・・・
ん〜
>>676
独自の画像形式を扱いたいときはTGraphicを派生します.詳しくはこちらに.
ttp://www.asahi-net.or.jp/~HA3T-NKMR/vcl2-10.htm
ネット上で公開されている画像クラスはほとんどTGraphicの派生です.
私も独自形式画像のためのクラスを作りましたが作りやすかったですし
誰でも簡単に使えて非常に便利です.

>>691
自動車パーツメーカーとかコクヨの机関係だったりするかもです.
>>694
「オブジェクト(インスタンス)は複製しますが画像データは複製しない」ということです.
>>696
その宣言のようにpwfxSrc, pwfxDstはポインタにした方が素直ですね.
acmFormatSuggestは使ったことがないので,すいませんがわかりません.
acmStreamPrepareHeaderですが呼び出す前にACMSTREAMHEADER構造体の要素に値を設定していますか?

var ash: TACMSTREAMHEADER;
(中略)
FillChar(ash, sizeof(ash), 0);
ash.cbStruct := sizeof(ash);
ash.pbSrc := PByte(SrcData);
ash.cbSrcLength := SrcLength;
ash.pbDst := PByte(DestData);
ash.cbDstLength := DestLength;

あとは思いつきませんでしたすいません.
699671:04/12/28 10:56:52
>>698
ACMSTREAMHEADERは設定してます。
pbSrcにFileStreamから参照させるためにFileStream.Memoryを渡してるのがまずいのですかね・・・
700デフォルトの名無しさん:04/12/28 11:18:03
TFileStream に Memory なんかない
701671:04/12/28 14:10:33
TMemoryStreamでした。スミマセン
>>699
遅くなりましたが…
読み出し側ならそれでも問題なさそうですよね.

思いつきで恐縮ですが単純にPCMからPCMへの変換ができるのでしたら
CODECの種類に固有の問題かもしれません.
703デフォルトの名無しさん:05/01/06 11:39:12
Demos\RichEdit
で、ワードパッドが作れるのは凄いんでつが、
「挿入−オブジェクト」メニューがありません。
Delphiだと簡単に実装で期末か?
704デフォルトの名無しさん:05/01/06 13:51:09
メニューは簡単の実装で期末
705デフォルトの名無しさん:05/01/06 18:55:24
Delphiの起動方法はどのこからどのようにして起動すれば良いのでしょうか、
デスクトップにアイコンがないのです。もう一度ダウンロードしたほうが良いのでしょうか?
706デフォルトの名無しさん:05/01/06 19:03:07
上級者ッ!
707デフォルトの名無しさん:05/01/06 20:07:11
>>705
なんて じょうきゅうな しつもんなんだー(棒読み)
708デフォルトの名無しさん:05/01/06 20:09:14
>>705
スタートメニュー辿ってけばあるはず。
ExplorerでC:\Program Files\Borland以下を探してもいい。
709デフォルトの名無しさん:05/01/06 23:25:17
いやきっと>>705はプログラマがゲームとかに現実逃避するのを抑止するために
Delphiをデスクトップに統合しようとしているんだ!!
ロングホーンよりすばらしいUIになるに違いない。
710デフォルトの名無しさん:05/01/07 01:27:01
そうだね
711デフォルトの名無しさん:05/01/07 06:18:13
俺達は(略)>>705を並び替えて(略)
な、なんだってー
712デフォルトの名無しさん:05/01/25 21:38:14
Delphi 7 Proで EmbeddedWbを使うにはどうしたらいいでしょうか?
713デフォルトの名無しさん:05/01/25 21:47:28
うーん、上級な質問だw
714712:05/01/25 21:51:41
ムリなんだろうか。。。orz
715デフォルトの名無しさん:05/01/25 23:24:06
くだすれDelphi(超初心者用)その21
ttp://pc5.2ch.net/test/read.cgi/tech/1104511938/l50
716デフォルトの名無しさん:05/01/28 19:37:56
初心者板で質問したのですがレス付かないので此方で聴きます

RichEditで通常と太字で大きさ同じにしたいのですが
abcde ←1行目フォント指定しない
abcde ←2行目太字
で文字位置がだんだんずれていくんですがどうすればいいのでしょうか
717デフォルトの名無しさん:05/01/28 19:41:22
何で表示装置上で文字が太く見えるか分かる?
718デフォルトの名無しさん:05/01/28 19:50:45
文字幅が大きくなるから
IDE上だとprocedureやinとかrecordとか太字じゃないですか
それでも文字位置はずれないですよね。そういうふうにしたいのですが
719デフォルトの名無しさん:05/01/28 19:55:11
そんなこと無いです。IDE上だってずれてるよ
720デフォルトの名無しさん:05/01/28 20:02:40
え?
IDEのデフォルトで右マージン位置80文字目にラインが引かれますよね
その位置は太字が含んでいても80文字目になりますし、
見た目にもずれてないと思いますが
721デフォルトの名無しさん:05/01/28 20:13:00
字詰めやるなら自分で計算するべきだな
722デフォルトの名無しさん:05/01/28 20:46:31
計算ってFONTのややこしい計算ですよね?
一字一字の計算したフォント位置を求めたとして、
RichEdit・・・というかCreateSubClass(Params, 'RICHEDIT') や
CreateSubClass(Params, 'EDIT')で作られるウインドウで反映させる事は出来るのでしょうか?
723デフォルトの名無しさん:05/01/28 20:50:27
仕方ないよ、アドビとかの存在意味なくなるじゃん。
安く上げるなら我慢しないと。
724デフォルトの名無しさん:05/01/28 21:03:41
無理と言うことになるのかな?
つまりエディタとして全実装を自前で作らないといけないとか?
カレット作ったり、PAINTでDC文字描画したり、スクロール数計算したり・・・しろって事?
725デフォルトの名無しさん:05/01/28 21:05:46
です、それで十分飯食えるほどの物です
726デフォルトの名無しさん:05/01/28 21:29:47
マジかよ・・・・
相当時間掛かるんですが、集中的にやらないと作れるようなものじゃないし

どうもありがとうございました
727デフォルトの名無しさん:05/01/29 08:50:57
HEditorやSynEdit使え
728デフォルトの名無しさん:05/01/29 10:20:37
さんく
探してみました。HEditorは金掛かるみたいなので、SynEditってほう(beta200)
すげーファイル群とコンポーネント入れられたけど、
とりあえずSimpleIDEDemoってのビルドしてみた。
目的な事が出来そうかな。Delphi無し環境で実行出来る事確認したし
なんか使い方複雑そうだけどソースもサンプルもあるし、なんとかなるかな

どうもありがとうございました
729デフォルトの名無しさん:05/01/29 10:43:13
むぅ使い方ワカラネ、サイトみて使い方覚えてくる
730デフォルトの名無しさん:05/01/30 02:39:46
したいことが SynEdit とは関係ない方に122ルギコント
731デフォルトの名無しさん:05/01/30 16:17:01
>>730
少なくとも参考にはなる罠
732デフォルトの名無しさん:05/01/31 04:17:26
VC++(非.NET)アプリ用に、DelphiでDLLを書く必要があるんですが、
VC++から関数の引数として渡されるデータアクセス用の関数ポインタを
Delphi製DLL内で、関数ポインタから関数を呼ぶ時点で例外が生じてしまいます。
cdeclをつけても、stdcallをつけても、safecallをつけても、なにもつけなくても、
同じです。

VC++アプリから渡される関数ポインタをDelphi内で利用するには、
特別な方法がいるのでしょうか?
(一応、アクセス用のVC製DLLを作って、Delphi製DLLから呼び出すと
データにはアクセスできてはいます。)
733デフォルトの名無しさん:05/01/31 04:33:03
わざとややこしく書いてるのか?もちっと、簡素に言ってみ
734732:05/01/31 04:35:24
>>733 すみませぬ。

VC++アプリから引数で送られてくる関数ポインタを
Delphiで作ったDLL内で使うには、何か特別な操作がいるのでしょうか。
735デフォルトの名無しさん:05/01/31 04:39:35
メソッド呼び出しているオチだったらぬっころしますよ?
736デフォルトの名無しさん:05/01/31 04:40:47
手続き型を宣言して、それにキャストすれば良いのでは
737デフォルトの名無しさん:05/01/31 04:43:14
>>735
いや、さすがにそれは・・・
しかし、そうおっしゃられるということは、普通にできるということですね。
もうちょっと、自分のコードにミスがないかチェックしてみます。お騒がせしました。
VC++側は多分、cdeclで呼び出しているんだとは思います。
VC++で書いたDLLでは、普通に関数ポインタから関数呼び出せますので。
738732:05/01/31 04:44:28
>>736
そのはずですよね・・・。orz
739デフォルトの名無しさん:05/01/31 04:47:52
(性的だが)実行部に
function ナンチャラ関数名; external ナンチャラDLL名 name ナンチャラ関数名;
やってるか?
740732:05/01/31 04:52:08
>>739
仕様で、VC++アプリ側から、動的にインポートされているはずです。
それから、関数の引数を通じて関数ポインタが渡されてきてます。

一応、私が勘違いだったらすみませんが、
external〜、Delphiから外のDLLを静的に呼ぶときですよね?
741デフォルトの名無しさん:05/01/31 04:54:53
実際の関数名と合ってないとか?(頭に_@が付いてるとか)
dumpbinで調べてみ
742732:05/01/31 04:56:06
>>741
そうしてみます。

って、いきなり他の仕事割り当てられました。orz
経過はまた後ほど。 お騒がせしました。
743デフォルトの名無しさん:05/02/01 04:20:14
関数ポインタの受け渡しで呼び出し規約が合っていないために
正しい関数ポインタを受け取れないか、
Delphi側の関数ポインタの宣言を間違えているか。

まずは、DLL側が受け取ったアドレスが実際にVC++側の関数のアドレスかどうか確認する。
後は、VC++側の関数の宣言と、Delphi側の型をここに出せば簡単に解かる。
関数ポインタと、エクスポートした関数の両方ね。
744732:05/02/01 04:40:06
昨日からどうもです。
今日になって、新しいVC++アプリのバイナリがあてがわれまして、
このバイナリだと、無事動作しました。
昨日の苦労はなんだったんだ orz
みなさん、本当にどうもありがとうです。
745デフォルトの名無しさん:05/02/01 07:56:39
原因不明のまま放って置く奴って伸びないよね
746デフォルトの名無しさん:05/02/01 09:55:18
動くことが優先で、追求は後でもいいじゃん?
747デフォルトの名無しさん:05/02/01 10:22:03
そういう奴は後でも追及なんかしないし
748デフォルトの名無しさん:05/02/01 12:01:44
まあそうなんだけど、そういう風に元質問者を決め付けるのはどうかな?ってことで。
749デフォルトの名無しさん:05/02/01 13:18:47
一般論
750デフォルトの名無しさん:05/02/01 23:33:30
そのうち同じ事に出くわすよ
751デフォルトの名無しさん:05/02/01 23:51:41
あー気になる。 宣言だけでも教えてくれ。
752732:05/02/02 00:32:36
どうも、お騒がせしてすみません。
結論から言うと、cdeclで良かったです。
あのあと、VC++製ホストアプリバイナリ開発元に問い合わせたら、
今更になって、dll側のサイズを見て、サイズが条件内に無いときは、蹴っているとのこと。
(そういうのは、最初に言ってくれ・・・)

結局、新しいバイナリを送ってもらって、cdeclでちゃんと動きました。
重ね重ねお騒がせして申し訳ないです。
753デフォルトの名無しさん:05/02/02 01:25:21
つまり、DLLが大きすぎたら、正しい関数ポインタを渡してくれないの?
こっそり誤動作するようにしてるのか?
754デフォルトの名無しさん:05/02/02 01:44:29
セキュリティ対策だろ、多分

どれだけ意味あるかわからんけど
755754:05/02/02 01:54:01
誤爆 スマソです orz
756デフォルトの名無しさん:05/02/02 03:36:47
誤爆に見えない。
757デフォルトの名無しさん:05/02/02 14:16:24
くだすれに書いたとたんにスレがいっぱいになってしまったので
引っ越させてください。

とあるDLL中の関数をDelphiから呼び出そうとしています。
DLLのヘッダファイルを読むと
extern "C" _declspec(dllimport) __time64_t #関数名#();
という定義になっていました。

この関数は日付を返す関数で、戻り値の型が __time64_t となっています
この値をTDateTime型に変換する方法を教えて下さい。
758デフォルトの名無しさん:05/02/02 14:37:37
TDateTimeとWindowsのFileTimeとは同じだ
759デフォルトの名無しさん:05/02/02 15:30:18
hatumimidesu
760デフォルトの名無しさん:05/02/03 05:08:53
FileDateToDateTime 関数か
761デフォルトの名無しさん:05/02/03 06:21:50
time_t系との変換はUnixTime(ry
762デフォルトの名無しさん:05/02/03 06:38:10
一旦文字列にしてTDateTimeに変換してはどうでしょう?
763757:05/02/04 11:32:33
UnixToDateTime関数は違うようでした(浮動小数点なんとかエラーが出た)。
「time_t delphi」でぐぐってみたらそれ用の関数がサンプル蔵に
あったものの、time64_tのものは見つかりません。

いっそDLL内の関数がtime64_t以外の形式で返してくれれば良かったのですが
(2006/1/31 12:34:56 なら "20060131123456" みたいに文字列で返して
 くれればまだマシだった)
DLL自体は自社のものではないため手を出すこともできず。
何するにしても、まずは__time64_tから自分で読み解ける形式にしないと
話が始まらず、今のところ手詰まりです。

また、Win32APIにはそもそもこの型を扱うものが見当たらない。
CStringクラスのメソッドがばんばん検索でヒットするので、
VC使いなら問題ないんでしょう。
というかDLL自体VCで作ってんだろうな…

まぁ、そんなところです。己の知識不足を恥じる。
764デフォルトの名無しさん:05/02/04 11:41:30
time64_tでぐぐると、トップにMSDNのページが来る。
で、これを読む限り、単にtime_tを64bitにしただけのようだ。

そして、もし、TDateTimeがFILETIMEと同じであるとするならば
単に、time_tをFILETIMEに変換すればよい。
これもぐぐれば簡単に出てくるが
time_t = (FILETIME - 0x19DB1DED53E8000) / 10000000
という式を変形すればよい。
765デフォルトの名無しさん:05/02/04 11:44:33
と、TDateTimeはFILETIMEとは違うのかな。

だとしても、
FILETIMEをSYSTEMTIMEに変更して
そのメンバからTDateTimeを作り出せばいいだけ。
766757:05/02/04 12:36:18
をぉ、ありがとう。
試しに関数作ってみますた。出来の良し悪しはさておく。

type
time64_t = int64;

function time64_tToDateTime(Time: time64_t): TDateTime;
var
filetime: TFileTime;
systemtime: TSystemTime;
begin
filetime := TFileTime(Time * 10000000 + $19DB1DED53E8000);
FileTimeToSystemTime(filetime, systemtime);
Result := SystemTimeToDateTime(systemtime);
end;

答え合わせ。
ShowMessage(FormatDateTime('yyyy/mm/dd hh:nn:ss', 1138719599));
すると、'2006/01/31 14:59:59'が表示されました。

パラメータの1138719599はDLLから取得した値で、
別の資料から2006/1/31を意味する内容である事が分かってます。
(残念ながら時刻は不明)
結果を見る限り、いちおうちゃんと動いてるくさいです。
これで今の仕事には支障ないです。助かりました。
767757:05/02/04 12:39:03
ごめん、答え合わせの方、転記間違ってた。
ShowMessage(FormatDateTime('yyyy/mm/dd hh:nn:ss',
time64_tToDateTime(1138719599)));
だった。
768757:05/02/04 14:05:01
あ、ちょっとダメだ9時間の差が出てる
ってことはTimeZoneの時差を補正してないとか、そういう話か。
もう少し考えてみます。
769デフォルトの名無しさん:05/02/04 14:37:50
FileTimeToLocalFileTime(Time, tmpTime)
FileTimeToSystemTime(tmpTime, SysTime)
SystemTimeToDateTime(SysTime)

少しは調べろ。
770757:05/02/04 15:30:34
面目ない。

で、こうなった。
type
time64_t = int64;

function time64_tToDateTime(Time: time64_t): TDateTime;
var
filetime, localfiletime: TFileTime;
systemtime: TSystemTime;
begin
filetime := TFileTime(Time * 10000000 + $19DB1DED53E8000);
FileTimeToLocalFileTime(filetime, localfiletime);
FileTimeToSystemTime(localfiletime, systemtime);
Result := SystemTimeToDateTime(systemtime);
end;

くだすれ系のネタに付き合ってくれて感謝。
771デフォルトの名無しさん:05/02/04 23:14:56
>>763
>UnixToDateTime関数は違うようでした(浮動小数点なんとかエラーが出た)。
はぁ?ちゃんと使えるぞ。
time64_tが1970/01/01 00:00:00(UTC)からの経過秒数だということを理解しているのか?
あぁ、先に言っておくとUTCとJSTは9時間ずれているから、タイムゾーン取得して補正しろ。
772デフォルトの名無しさん:05/02/05 01:41:30
>>771
0の基準知ってるよ、ここの人は
773デフォルトの名無しさん:05/02/12 01:10:26
ここは上級者スレなんだからレビューしあうようなレスなら書くな
774デフォルトの名無しさん:05/02/12 22:38:16
活性化すればなんでもヨシ。
775デフォルトの名無しさん:05/02/13 01:22:38
枯れ木も山の賑わいってか?
いよいよダメっぽいのか?
776デフォルトの名無しさん:05/02/13 05:43:39
いよいよってwww
もうとっくに、の間違いだろwwww
777デフォルトの名無しさん:05/02/13 05:44:29
しかもダメっぽいじゃなくダメじゃn
778デフォルトの名無しさん:05/02/13 05:51:25
くだすれはマターリしてていい感じなのに
何で上級スレは殺伐としてるんだろうか?w
779デフォルトの名無しさん:05/02/13 10:29:51
アンチは無視しとけって。
780デフォルトの名無しさん:05/02/13 17:15:53
実際はもう趣味範囲でしか無いのでは?
クラサバ業務ならD5〜D7はまだ案件あるけど、D8以降は企業が採用しないだろうし
Delphi実装をWeb(IIS)対応にリニューアルするならVSに変更してるのが実情
781デフォルトの名無しさん:05/02/13 19:02:45
それは当然。だから先がないことは明らかなんだが、わからん人が多いんだよな
782デフォルトの名無しさん:05/02/13 21:15:35
10年前にも781みたいなこといってた奴はいたよ。
いまだVBしかできないけど。
783デフォルトの名無しさん:05/02/13 23:49:10
だからVBしかできないんじゃないの?
784デフォルトの名無しさん:05/02/14 00:28:41
10年まえにはDelphiなかっただろ。テキトウなこというなよ
785デフォルトの名無しさん:05/02/14 00:35:30
10年前はWin3.1→Win95へホビー層に浸透する頃だ
この時期のWin環境のまともな仕事はVC++2.0(例外的にBC++4.0)しか無かったが
8年前と言うならわかるが
786デフォルトの名無しさん:05/02/14 00:45:46
>784
丁度10年ぐらいかな、正確には9.n年前だろうけど
Del1正式発売前に評価版として3ヶ月ぐらい前から雑誌の付録に付いていた
Win3.1orWin95ファイナルベータで使った
趣味でBC++使ってたがVB覚えようかなと思った時に出てきたので、VBは覚えませんでした
787デフォルトの名無しさん:05/02/14 07:18:52
先がない・・・・・変な事言うなあ・・・・・

プログラマとして仕事してたら、そもそもどんな幸せな未来があるっての?
どこもソフトの開発現場は派遣化。 現場は使い捨て。

先が暗いなら、なおさら今を楽しまなくちゃね。

だいたいさ、道具の使い方には可能性があってもさ、道具に未来があるんじゃないよ。
788デフォルトの名無しさん:05/02/14 08:36:07
つかえねぇ道具には可能性があっても小さいわな。本質論と程度論を混同するのはアフォ
789デフォルトの名無しさん:05/02/14 11:30:48
どちらにしても道具の使い方レベルの所で可能性を論じてもしょうがないと思う
所詮はスキルも使い捨ての時代。
790デフォルトの名無しさん:05/02/14 11:36:55
使えない道具か。 かわいそうに、使い方くらいのところで躓いてるのか
791デフォルトの名無しさん:05/02/14 11:53:19
IDEが落ちるから、じゃないの?
792デフォルトの名無しさん:05/02/14 11:55:14
D8もよく落ちたよなぁ、そういえば。
793デフォルトの名無しさん:05/02/14 16:04:54
D8以降は使い方以前の問題
794デフォルトの名無しさん:05/02/15 09:59:43
先細りだよね・・・・・Delphi・・・・・
795デフォルトの名無しさん:05/02/17 01:21:18
お前は激太りだけどな。
796デフォルトの名無しさん:05/02/17 02:42:42
そうだね。やはり、Delphiは死滅直前だとは思ってるんだね、みんな。
797デフォルトの名無しさん:05/02/17 03:44:45
微妙に会話成立してないワロタ
798デフォルトの名無しさん:05/02/17 10:19:28
古い安定版をちまちま改造して最新版と同程度の機能を実現するのが楽しみなD2..5ユーザ
799デフォルトの名無しさん:05/02/18 11:23:27
TFrameのResizeでTImageへの描画を行うと、
マウスでリサイズ中に物凄くチラツキます。

リサイズの最後のタイミングイベントなんか無いですかね?
800デフォルトの名無しさん:05/02/18 11:54:59
フォームのリサイズ完了後に処理を行うには
ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200405/04050034.txt
801デフォルトの名無しさん:05/02/18 12:37:43
>>799
LockWindowsUpdateは?
802デフォルトの名無しさん:05/02/18 13:28:48
>>801
いつ解除する?
803ミ,,゚Д゚彡 ◆A6VzDeLphI :05/02/19 12:40:32
興味があって、みにいったが
>>800
ものすごく役に立たないスレだな。

そんなのリンクするなゴルァ

結局どうやって解決するんだよ。
804デフォルトの名無しさん:05/02/19 14:36:29
>>803
だから、マウスボタンを押してるかどうかで判断だろ?
ものすごく役に立つと思うけど?
805デフォルトの名無しさん:05/02/19 14:39:05
>>803
解決方法が分からないのに、役に立つどうかどうやって判断したのかをききたい
806デフォルトの名無しさん:05/02/19 18:12:49
WM_SIZE ではなく WM_EXITSIZEMOVE を使うような様相でお願いすれば多分うまくいく気がしないでもない。
807デフォルトの名無しさん:05/02/19 18:55:26
まあちらつきが気になる人は画面のプロパティで「ドラッグ中にウィンドウの内容を表示する。」
をOFFにしそうな気がしないでもない。
808デフォルトの名無しさん:05/02/19 19:41:28
>>801>>806を組み合わせてみた

procedure WM_EXITSIZEMOVE (var msg:TMessage );message WM_EXITSIZEMOVE ;

var fLock:boolean=True;
procedure TForm1.WM_EXITSIZEMOVE(var msg: TMessage);
begin
LockWindowUpdate(0);
fLock :=False;

end;

procedure TForm1.FormResize(Sender: TObject);
begin
if not fLock then LockWindowUpdate(handle);
fLock :=False;
end;

ちらつかないが、枠が動かない・・・・・

という事で、やるなら WndProc メッセージフックで リサイズを適当に潰して
WM_EXITSIZEMOVE で確実にという感じかな
809デフォルトの名無しさん:05/02/19 22:23:53
みんな暇なのかな
810デフォルトの名無しさん:05/03/05 21:54:01
UTF-16LE 文字列を ANSI 文字列に変換したいのですが対応する標準関数
が解りません・・・ていうかあるのでしょうか?
811デフォルトの名無しさん:05/03/08 03:23:14
>>810
WideStringをAnsiStringに代入する
812デフォルトの名無しさん:05/03/08 17:11:45
>>799
{ Private 宣言 }
procedure WMEXITSIZEMOVE(var Message: TMessage); message WM_EXITSIZEMOVE;

・・・

procedure TForm1.WMEXITSIZEMOVE(var Message: TMessage);
begin
//ここにやりたい処理を書く
beep;

inherited;
end;
813デフォルトの名無しさん:05/03/08 19:22:24
> //ここにやりたい処理を書く

TImage を使用してるんだから、再描画は自動的に行われる。やりたいことなどなんにもない。
>>799 は質問自体がネタ
814デフォルトの名無しさん:05/03/11 01:06:09
>>811
すいません、もう少し教えてください。
UTF-16LE 文字列ですが、バイト配列のデータです・・・
最終的にはString型に変換したいのです。
WideCharLenToString とかをどのように使えばいいのかが解りません
(というか、どうすればいいのか解りません)
815デフォルトの名無しさん:05/03/11 02:02:31
バイト列の先頭アドレスを(キャストして)WideStringに代入
WideStringをそのままAnsiStringに代入

これ以外にどう解釈しろというんですかね
816デフォルトの名無しさん:05/03/12 14:23:51
>>814

const
ws: WideString = 'あいうえお';
var
 astr: string;
begin
astr := ws; <---ここでブレークしてCPUウインドウでみればどんなコードが補われているか良く分かる
end;
817デフォルトの名無しさん:2005/04/11(月) 08:54:41
インターフェース=COM専用で無い事は知っていたが

> [Kylix:01023] Re: 使えない interface
> 「親を TInterfacedObject にせずに、独自のものを使えば、
> 勝手に破棄されないものも作れます」

これは知らんかった orz
818デフォルトの名無しさん:2005/04/11(月) 08:56:30
ペイントブラシを非表示で開いてそれに印刷させる、なんてことはできますか?
819デフォルトの名無しさん:2005/04/11(月) 12:46:19
"(…)\mspaint.exe" /p "%1"
820818:2005/04/12(火) 16:37:54
ヲオ,レスサンクツ>>819
印刷出来ます田。
どうやってその内容調べられましたか?



といいますのは、
プレビューの場合のコマンドラインがどうなるのか知りたいのですが、
連続質問出すと、教えてクンみたいですよね...
821デフォルトの名無しさん:2005/04/12(火) 16:58:00
>>820
ファイルの関連付けをミロ。てかここは上級者用スレだぞ。
822デフォルトの名無しさん:2005/04/12(火) 17:17:03
>>821
エクスプローラのフォルダオプションでファイルの関連付け見ましたが、プレビューはありませんが...
823デフォルトの名無しさん:2005/04/12(火) 17:42:38
>>822
プレビュー、プレビューっていまいち意味わからんがWindowsの画像ビューワのことか?
それだったらShellExecuteで開けばえんでないかい。
824デフォルトの名無しさん:2005/04/12(火) 17:49:44
>>823
ペイントブラシのプレビューコマンドが知りたいです。
ついでに、これらの情報はWindowsのどこをみれば分かるのでしょう?
825デフォルトの名無しさん:2005/04/12(火) 17:58:48
>>824
もしかして印刷プレビューのこと?
826デフォルトの名無しさん:2005/04/12(火) 18:12:26
>>824
PC初心者板行って来い。
Delphi と何の関係もない。
827デフォルトの名無しさん:2005/04/12(火) 18:41:55
yes>>825
828デフォルトの名無しさん:2005/04/20(水) 09:59:33
初心者スレで質問をしたのですが、
結局わからなかったので、こちらでも質問させていただきます。

FormをDockしたりUndockしたりすると
Form上に配置していたコンポーネントのDataプロパティから
オブジェクトを正しく参照できなくなるのを回避するためにはどうすればよいんでしょうか。

例)
Form2にTreeViewを配置
TreeViewに適当にNodeを追加
NodeのDataプロパティに適当にオブジェクトを参照させる
Form2をForm1にドック
先ほど参照したオブジェクトが参照できなくなる

という感じです。
どなたかご存知の方、教えてください。

Delphiのバージョンは6Personalです。
829デフォルトの名無しさん:2005/04/20(水) 13:11:14
>>828
ん?別に問題なく参照できるけど?
830デフォルトの名無しさん:2005/04/20(水) 13:13:30
なんてこったい。
もう一度実験してきます。
831デフォルトの名無しさん:2005/04/20(水) 13:32:30
>>824-825 もヨロ
832デフォルトの名無しさん:2005/04/20(水) 13:46:51
833デフォルトの名無しさん:2005/04/20(水) 14:03:26
>>831
あまりいいやり方じゃないけどこれでできるんじゃない?

CreateProcess でペイントを起動する。
ペイントのウィンドウを探す。
PostMessage で WM_COMMAND を送ってメニューを操作したことにする。
Windows 2000 SP4 の場合 ItemID = 57609。ほかは違うかも。
834デフォルトの名無しさん:2005/04/20(水) 23:18:13
OLEを使って出来ないかって質問では?
835デフォルトの名無しさん:2005/04/21(木) 00:54:53
>>828
form2.dock(form1,...);
form2.dock(nil,...); //ここで参照不能になる
当環境ではundockしたら参照できなくなった
836828:2005/04/22(金) 03:10:29
どうにかして回避できませんかね。それ。
ご存知の方いらっしゃいましたらご教授お願いします。
837デフォルトの名無しさん:2005/04/26(火) 03:02:15
AnimateWindowで、ウインドウにフォーカスを移さずにフェード表示できる方法誰か知りませんか?
838デフォルトの名無しさん:2005/04/26(火) 19:43:43
TStream系の派生クラスでSeekメソッドをオーバーライドする場合、Resultには何を入れれば
いいんですか? ヘルプには何も書いてないのですが・・・。
839838:2005/04/26(火) 20:11:54
自己解決しました。Positionの値ですね。
840デフォルトの名無しさん:2005/04/27(水) 00:21:36
TStringGridの質問です。
セルの結合(2行結合)をやってみたのですが、結合したセルに入力しようとすると
1行分のフォーカスになって入力した内容が上にずれてしまいます。
EXCELのように結合したセルでも正しく表示できないでしょうか?
環境はD7です。
ご教授お願いします。
841デフォルトの名無しさん:2005/04/28(木) 10:15:25
For all you Australian pascal developers out there.
The May 2005 edition of the magazine APC comes with a copy of
Delphi 2005 Personal Edition on the DVD. You still have to obtain
a license from Borland to run it but thats the only thing required to use it for free.

I would suggest reading up on the license terms for using this application
as you can only use it for Personal and not Commercial usage.
842デフォルトの名無しさん:2005/04/28(木) 18:02:32
よし、オーストラリア行くか。
843デフォルトの名無しさん:2005/04/29(金) 08:10:41
IEコンポーネント使って変り種ブラウザ作ってるんですが、
サーバーから取得したHTMLをIEコンポーネントがレンダリングする前に
書き換えたいのです。
(あとからDHTMLで書き換えるのではダメなんです。)

都合のいいイベントとかフックする方法あったら教えてください。
844デフォルトの名無しさん:2005/04/29(金) 11:48:54
普通にhttpでソースをリクエストして、
書き換えてから書き換えたHTMLソースを
IEコンポーネントに投げる。
845843:2005/04/29(金) 12:31:21
レスありがとさん。

その方法も考えた、というかその方法でコーディングしてたんですが
リンクをクリックされた場合とかフレームの場合とかの制御が大変とか
認証が必要な画面でIE標準の動作が出来ないとか
カレントURLによってHTMLの動作が変わってしまう(相対アドレス)とかとか・・・
色々問題が出てきたんでちょっと僕には無理っぽいなと断念しました。

温泉いってる間に神様出てくることを祈っとこう・・・
846デフォルトの名無しさん:2005/04/29(金) 14:50:31
TWebBrowser.DownloadBegin // DL開始時

TWebBrowser.DownloadComplete // DL完了時。ここで TWebBrowser.Document を操作

TWebBrowser.DocumentComplete //レンダリング完了時
847デフォルトの名無しさん:2005/05/22(日) 07:09:00
スクリーンの垂直リフレッシュレートはdelphiのプログラムから取得できますか?
848デフォルトの名無しさん:2005/05/24(火) 23:38:10
>>847
やるとしたらレジストリかAPIになると思うけど
849デフォルトの名無しさん:2005/05/27(金) 05:07:07
ステータスバー上にプログレスバーを配置する方法を教えてください
850デフォルトの名無しさん:2005/05/27(金) 08:45:11
851デフォルトの名無しさん:2005/05/27(金) 11:17:46
dfm直接いじってもできるけどね
852デフォルトの名無しさん:2005/05/29(日) 02:51:18
>>851
頭いいなもまえ
853デフォルトの名無しさん:2005/06/01(水) 22:07:50
ToolBar2000+TBXで実験がてら遊んでおります。
で質問なんですが、ソフトの起動時にどのドックにはまってたのかを復元する方法が判りません。
DockRowやDockPosやらでは、はまってたドックでの位置は復元出来ますが別のドックにはめるとナニな訳です。
誰かご存知の方おられませんでしょうか?
854853:2005/06/01(水) 23:04:51
すんません、自己解決しました。CurrentDockとかLastDock使えばよかったようです。
855デフォルトの名無しさん:2005/06/08(水) 22:40:18
671〜
で書かれているACMを使って、MP3をデコードする方法を参考に自分でも組んでみましたが
つまずいてます・・・
acmStreamConvertを実行した後に入ってくるbufferに何も入ってこないのです。
どなたか分かる人いますか?
856855:2005/06/08(水) 22:41:50
ソースはこんな感じです。
var mp3buf,wavbuf : array of byte;
block_size, raw_buf_size : DWORD;

acmStreamOpen
acmStreamSize
は問題なく通過してます。
//各バッファの確保
SetLength(mp3buf,block_size);
SetLength(wavbuf,raw_buf_size);

FillChar(ash, sizeof(ash), 0);
ash.cbStruct := sizeof(ash);
ash.pbSrc := PByte(mp3buf);
ash.cbSrcLength := block_size;
ash.pbDst := PByte(wavbuf);
ash.cbDstLength := raw_buf_size;
mmr := acmStreamPrepareHeader(hstr, ash, 0);
// 結果判定
if mmr <> 0 then
begin
showmessage('ヘッダ取得に失敗しました');
end;
//ファイルからデータ読み込み
blockread(f,mp3buf[0],block_size);
//データ変換
mmr := acmStreamConvert(hstr, ash, $30);
if mmr <> 0 then
begin
showmessage('変換に失敗しました');
end;
857デフォルトの名無しさん:2005/06/09(木) 14:52:29
TPrinterの用紙トレイ値、DMBIN_とかいうやつを取得する方法教えて下さい。
858857:2005/06/09(木) 15:17:24
>用紙トレイ
給紙トレイ=ビン
というみたいでつね。
859857:2005/06/09(木) 19:49:01
TNkPrintDialogというのが給紙トレイを使えるそうなんですが、
使い方が分からない...
860デフォルトの名無しさん:2005/06/09(木) 21:57:12
>>858
DeviceCapabilities
861デフォルトの名無しさん:2005/06/10(金) 09:24:57
TPrinterSetupダイアログで設定された内容を、
Windowsに反映できますか?
862デフォルトの名無しさん:2005/06/10(金) 11:53:28
> Windowsに反映
って何だ?
863デフォルトの名無しさん:2005/06/10(金) 11:59:30
>>862
コントロールパネルのプリンタ設定の中の人が、
ダイアログで設定した通りになってる、という意味で津。
864デフォルトの名無しさん:2005/06/10(金) 12:31:43
ずいぶん身勝手なアプリだな。
865デフォルトの名無しさん:2005/06/10(金) 13:04:56
反映しないのが普通なんだ?

TPrinterSetupダイアログから、給紙トレイが取れなくて困って待つ。
で、Winに反映してから取ろうかなぁ、と。
866デフォルトの名無しさん:2005/07/08(金) 09:07:58
TFrameに独自のイベントを追加し、そのフレームを貼り付けた
フォームで、追加したイベントを発生することはできないでしょうか?
867デフォルトの名無しさん:2005/07/08(金) 09:33:19
>>866
普通のメッセージ処理と何が違うの?
868866:2005/07/08(金) 09:48:17
例えば、フレーム内にボタンが貼り付けてあるとして、
そのボタンをクリックすると、フレーム内のクリックイベントが発生しますが、
その後、フォーム側でこのボタンがクリックされたことを知りたいのです。
869デフォルトの名無しさん:2005/07/08(金) 17:04:12
貼り付けたフォームで参照できるように、フレーム内publicにOnButtonClickみたいなイベントかいたら?
870デフォルトの名無しさん:2005/07/08(金) 19:55:45
>>868
フォーム側でイベントハンドラ設定して、その中からフレームのイベントを呼ぶってのは?
871デフォルトの名無しさん:2005/07/08(金) 20:03:15
×フレームのイベント
○フレームのイベントハンドラ

スマソ
イベント呼んだら無限ループだ
872866:2005/07/11(月) 08:44:28
>>869
それが、コンポーネントのようにイベントの追加がうまくできないのです・・・
873869:2005/07/12(火) 16:35:56
>>872
フレームにあるボタンのイベントを貼り付けたフォームから設定すると解釈して
TMyFrame = class(TFrame)
private
 FMyButtonEvent: TNotifyEvent;
 procedure DoMyButtonEvent(Sender: TObject);
public
 property MyButtonEvent: TNotifyEvent read FMybuttonEvent write FMybuttonEvent;
end;

procedure TMyFrame.DoMyButtonEvent(Sender: TObject);
begin
 if Assigned(FMyButtonEvent) then
  FMyButtonEvent(Sender);
end;

procedure TMyFrame.ButtonClick(Sender: TObject);
begin
 DoMyButtonEvent(Sender);
end;

後は貼り付けたTForm側で
TMyFrame.MyButtonEvent := MyEvent; //実行したい手続き(型をTNotifyEventにあわせるように)。
て書くだけ。
いかがでしょ?
874866:2005/07/13(水) 16:24:11
>>873
ありがとうございます。
でも、TForm側のコードをどうすればいいかさっぱりです;;
ご教授お願い致します。
875デフォルトの名無しさん:2005/07/13(水) 17:27:25
流石はDelphi上級者だな
言うことが違う
876デフォルトの名無しさん:2005/07/13(水) 17:32:55
わはははは、最後の4行の意味がわからないようじゃ、絶対無理だわ
877デフォルトの名無しさん:2005/07/13(水) 18:40:58
マルチだし、ほっとけ
878デフォルトの名無しさん:2005/07/14(木) 08:50:06
QuickReportの復帰はもう無いんでつか?
879デフォルトの名無しさん:2005/07/14(木) 09:00:37
>>877
マルチだからほっとくというのは、どういう理由で?
何の根拠で?万人に理解できる返答が欲しいものだな
880デフォルトの名無しさん:2005/07/14(木) 10:36:46
あっちで解決してるから
881デフォルトの名無しさん:2005/07/14(木) 11:09:51
>>880
ここしか見てない者はどうなる?
882デフォルトの名無しさん:2005/07/14(木) 11:19:03
あっち見ればいい。
883デフォルトの名無しさん:2005/07/14(木) 11:33:53
ようするにマルチポストの弊害なわけで、それをしたほうが責められるべきで
他人に当り散らすのは筋違いだ
884デフォルトの名無しさん:2005/07/14(木) 12:01:21
>>882
あっちの存在を知らない者はどうなる?
885デフォルトの名無しさん:2005/07/14(木) 13:44:31
知らなきゃ、別にどうにもならない。
886デフォルトの名無しさん:2005/07/14(木) 13:47:38
質問者がマルチポストして、しかも両方放置しておいて逆切れはみっともないな
887デフォルトの名無しさん:2005/07/14(木) 14:53:45
>>885
違う。知らなければ、こちらしか解決の場が無いので、
マルチポストは第三者にとっては弊害ではない。
888デフォルトの名無しさん:2005/07/14(木) 15:25:38
>>879
万人がそう思ってるから。
889デフォルトの名無しさん:2005/07/14(木) 17:44:19
第三者は質問者じゃないから解決する必要なんかないじゃん
890デフォルトの名無しさん:2005/07/14(木) 17:52:07
かわった第三者だな
891デフォルトの名無しさん:2005/07/15(金) 08:38:23
>>889
同じ疑問を持った第三者がいたらどうだ?
892デフォルトの名無しさん:2005/07/15(金) 08:49:20
だったら質問しなよ。ここでもあっちでも解決ずみだよ。
質問者が理解できないだけ。
同じ疑問をもってかつ今回の質問者と同じレベルの第三者はきわめてまれだろうな。
893デフォルトの名無しさん:2005/07/15(金) 08:51:30
まっ、マルチした最初の質問者を恨むべきだろうな
894デフォルトの名無しさん:2005/07/15(金) 10:13:39
>>878 もヨロ
895デフォルトの名無しさん:2005/07/15(金) 13:00:26
>>894
ソース買うしかない。
QuickReport最初は使いにくいと思ったけど、今はコレ無しじゃ帳票作るならん・・・
896デフォルトの名無しさん:2005/07/15(金) 13:57:14
>>895
ソース買ったらD2005で使えるわけ?
なら買うぞ。
897デフォルトの名無しさん:2005/07/15(金) 22:44:54
>>896
本家みろよ。
D2005ってかいてあるだろ?
つーかソース買うのに下位で動いてて、D2005で使えないわけないだろ。
ソースからコンパイルするとヒントや警告がでてウザイかもしれんが、そこは自分で直せ。
898デフォルトの名無しさん:2005/07/26(火) 03:46:45
899デフォルトの名無しさん:2005/07/26(火) 21:38:04
製品のQuickReport買えば、Delphi2005でも使え待つか?
900デフォルトの名無しさん:2005/07/26(火) 21:44:04
製品のQuickReport買えば、Delphi2005でも使え待つか?
901デフォルトの名無しさん:2005/07/26(火) 21:46:35
製品のQuickReport買えば、Delphi2005でも使え待つか?
902デフォルトの名無しさん:2005/07/27(水) 09:07:05
>899-901
回答出てましたね。
QRのソース買う方向にしてみまつ。
でも実はD2005じゃなくて、次のBCB(Del統合予定のやつ)で使うので若干不安。
903デフォルトの名無しさん:2005/07/27(水) 11:52:50
いきなりで失礼しますが質問させて下さい。

税込み原価価格から税抜き原価価格を計算する処理をしているところで、
ごく一部なんですが、正しい価格と1銭差が出る場合があるようなのです。

 (正)税込み:80.85 税抜き:77.00
 (誤)税込み:80.85 税抜き:77.01  ← こうなる時があるようです。

ただ、私の所では再現すら出来ず、原因究明が滞っている状態です。
おかしい点や「ここでそういう事おきるって聞いたことあるよ」というご指摘が頂ければ幸いです。

原価価格は小数第2位以下は切り捨てと考え、消費税は5%計算です。
904903:2005/07/27(水) 11:53:56
ソースは下記の通りです。

function F_Get_Hontaikakaku(Hasuu:Integer): String;
var
Zeikomi:Currency;
Zeiritu:Double;
Zei:Double;
begin

Result := '0';

if txtZeikomi.Text = '' then//空だったら0を指定
Zeikomi := '0'
else
Zeikomi := txtZeikomi.Text;

Zeikomi := StrToCurr(Zeikomi);
Zeiritu := 0.05 * 100;
Zeikomi := Zeikomi * 100;//小数点の計算(切り上げ、四捨五入)ができないので*100
905903:2005/07/27(水) 11:54:59
ソースの続きです

//端数処理
if Hasuu = 1 then//切り捨て
Zei := trunc((Zeikomi * Zeiritu) / (100 + Zeiritu))
else if Hasuu = 2 then //切り上げ
Zei := Ceil((Zeikomi * Zeiritu) / (100 + Zeiritu))
else if Hasuu = 3 then //四捨五入
Zei := trunc((Zeikomi * Zeiritu) / (100 + Zeiritu) + 0.5)
else
Zei := 0;

Zeikomi := (Zeikomi - Zei) / 100;

Result := FloatToStr(Zeikomi);

end;
906デフォルトの名無しさん:2005/07/27(水) 12:09:00
それ、簡略したコード?

Zeikomi := StrToCurr(Zeikomi);
ってコンパイルエラーになるでしょ? バリアントでもないなら

で、
Zei := trunc((Zeikomi * Zeiritu) / (100 + Zeiritu))

が怪しそうだよ。
907デフォルトの名無しさん:2005/07/27(水) 13:15:32
>>906
略したコードです。
というか余計な部分を端折ってあるうえに分かりやすく少し書き換えてあります。

>Zei := trunc((Zeikomi * Zeiritu) / (100 + Zeiritu))
>が怪しそうだよ。

ここですか。。
うーん。せめて問題の現象が再現できていればもう少しなんとかなるんですが・・。

ご返答ありがとうございます。
908デフォルトの名無しさん:2005/07/27(水) 13:30:00
むかーしのことだけど、どっかのいんてりマウスドライバと、どっかのうんぬIMEが
コプロの丸め精度フラグを下げっぱなしにしてくることがあった。
(割り込み時のコントロールワードの戻し忘れ)
もしかすると誰かに銀行家丸めを変更されているとか。
0.05%とかをそのまま使わないで(小数点以下が出ないようにして)、最後の最後で100とかで割るといいよ。

あと、消費税は2進数できれいに表せる数にしてくれよ>政府

暑いから納涼話どう?
909デフォルトの名無しさん:2005/07/27(水) 13:38:28
>>908
そうしてるようだが

>>903よ、なぜCurrencyとDoubleを混在させる?
ZeikomiがCurrencyならZeiだってCurrencyでいいし
ZeirituだってCurrencyでいいじゃん
910デフォルトの名無しさん:2005/07/27(水) 13:40:22
>>908
うーん。一応消費税は
>Zeiritu := 0.05 * 100;
のところで100倍してから計算に使用してるんですけど、
なんか順序とかがおかしいんですかね?
truncするタイミングとか・・??

正しい値が出たり出なかったりとかはやっぱり環境とかも影響あるんでしょうか。
911デフォルトの名無しさん:2005/07/27(水) 13:45:10
>>909

>なぜCurrencyとDoubleを混在させる?
前任の作成した関数(さっきのソース)なので
私も「なぜ」かという所までは・・。
(前任は既に会社を辞めております)

やはりそのへんもあやしい部分なのでしょうか?
現象が再現されないうちにそういうあやしい部分を潰していくと
修正が完了したのかどうかも判断が付かないので
へたにいじることが出来ないのが現状です。。

なにぶん「なんかおかしいからコレ直して。はいソース」という状態でして・・
912デフォルトの名無しさん:2005/07/27(水) 14:09:10
913デフォルトの名無しさん:2005/07/27(水) 14:50:10
>>912
今読み終わりました!
大変参考になりました。ありがとうございます。

やっぱり>>909さんからご指摘頂いている
CurrencyとDoubleの混在あたりがいけないようですね。
Currencyで統一すれば誤差はなくなりそうです。

ただやはりこちらで再現出来ていない状態で手直しして
「直りました」は説得力がないですよね。。

うーん。
さすがにこればかりは自分の力でなんとか頑張ってみます。
皆さんのおかげでなんとかなりそうです。
たくさんのご教授ありがとうございました<(_ _)>
914908:2005/07/27(水) 16:44:07
>>910
>>Zeiritu := 0.05 * 100; 
>のところで100倍してから計算に使用してるんですけど、 

もしかしたら定数にするのに0.05を変換しきれなくて、100かけても
≠5.0かと思っただけ。
杞憂だと思うけど。

再現できる環境の確保がポイントですね〜。
あと、状況を絞り込んだ(ボタン押すと結果だけ出す)プログラムなどを相手に渡すとか。
915デフォルトの名無しさん:2005/07/27(水) 17:06:13
>>902
今のうちにD2005買っとけ。
up3+FastMMで使えるレベルだから。
次のバージョンも安定するまで半年はかかるだろうしね。
916デフォルトの名無しさん:2005/07/27(水) 17:08:55
>>908
俺も金額計算する時によくはまったな。
Currencyはたしか少数以下4桁まで保障だっけ?
Currencyが6桁まで保障してくれたらいいのにな〜なんて材木関係の仕事の時に思ったな。
917903:2005/07/27(水) 17:18:16
みなさんいろいろと案を出してくださってありがとうございます。
ですが「再現出来なきゃあてにならない」と言い換えされてしまいました。。

うぅ。そう言われるのは当然なんですけど・・。・゚・(ノд`)・゚・。
918デフォルトの名無しさん:2005/07/27(水) 17:42:27
>>917
現象が発生する環境では常に発生してないとおかしい
もしかしてやたら古い機械じゃまいか?
919903:2005/07/27(水) 17:47:25
>>918
実は常に発生しているかもハッキリしていないのです。
情報が少なくて・・。

えっと。とりあえず、
その現象が再現できるPCを特定→手直ししたものをそのPCで実行→それから判断
という流れで問題を潰していくことになりました。
私のところでやっていても再現は難しいだろうということで。

みなさん本当にお騒がせしました。。
ありがとうございました。
920デフォルトの名無しさん:2005/07/27(水) 17:50:19
>>917
データ見せられて、おかしいよって言われてるわけだよね?
そしてその計算部分の特定は出来てる。
あとは、その使用しているデータを客にきけばいいのでは?
もしくは、その部分だけ読み取って計算するような小さなプログラムを客先で動かしたら?
921デフォルトの名無しさん:2005/07/27(水) 18:02:07
>>903
>>920にも書いてあるがStrategy パターンでも使用した新しいソースと古いソースの計算結果を
照らし合わせ異なる場合のみ、そのデータを適当に抜き出すような小さいプログラムを作れ。
922デフォルトの名無しさん:2005/07/29(金) 00:26:59
計算誤差はいったんstring型にしてから、元の型に戻せば解消されることが多い。
923906:2005/07/29(金) 07:12:11
まだ解決してないの?
再現するには、大量の乱数を発生させてこのルーチンを通してやればいいじゃない。

そして、再現した数字でトレースすれば簡単に判るでしょ。


たぶん、皆が書いてるように
 Zeiritu := 0.05 * 100 ってのが実際にこう書いてるなら 5になってるけど
 0.05が変数なら (1+0.6)*2^(-5) で 0.6は 16進数で書くと 0.9999999999999999と無限小数だ
 だから、 0.05 * 100 しても5にならない。

で、
Zeiritu:Double;
Zeikomi:Currency;

でZeikomi * Zeiritu すると、結果は浮動小数点型になる。 

つまり
trunc( Zeikomi *5/(100+5) ) と
trunc( Zeikomi *4.999999999999..../(100+4.999999999999.....) ) が同じになるかという事になるわけだけど


924906:2005/07/29(金) 07:18:32
で、こういうのを予防する方法としては >>922の言うように誤差を10進化して丸めながら計算するといい

いちいち文字列形にするのは格好悪いと思うならCurrency流に計算すればいい。
変数をExtend型にして、1000倍とか1万倍してroundすればいい。

つまり、2桁で常に丸めるなら
Zeiritu := 0.05 * 100 ではなくて Zeiritu :=round( 0.05 * 100) とする
4桁必要なら
ZeirituX10000 :=round( 0.05 * 10000) とする

実際に計算する時は round(ZeirituX10000 * Daikin)/10000てな感じね
925906:2005/07/29(金) 07:26:18
それから、状況を悪くしているのは
Zeiritu:Double;  にしている事。 
浮動小数点型はExtendedで計算されるから
いわば πに 3.14 つかって、半径1メートルで円周を求めて 6280mmなんて書いてるような状態になる

Extended同士で計算させてれば、もっと滅多に起きなかったろう・・・まあもっと状況が悪いとも言えるが
926906:2005/07/29(金) 07:37:27
>>913
>Currencyで統一すれば誤差はなくなりそうです。

ってのは注意しないといけない。Currency形ってのは 1万倍して保持しているだけだから
Currency*Currency は 掛け算して1万で割るわけで
誤差が無いのは小数点2桁同士の掛算まで。

Currency同士の割算が入ると、それは浮動小数点で計算される
927デフォルトの名無しさん:2005/08/01(月) 11:32:24
 
928デフォルトの名無しさん:2005/08/01(月) 15:45:56
ファイルをPC外に持ち出されないように、
エクスプロラーで、「コピー」操作を
行った段階で、その事をDelphiから
感知する方法はありますでしょうか。
929デフォルトの名無しさん:2005/08/01(月) 15:47:22
ファイル システム フィルタ ドライバを書きましょう。
ttp://www.microsoft.com/japan/whdc/driver/filterdrv/default.mspx
ttp://www.amazon.co.jp/exec/obidos/ASIN/4774116661/250-6294777-6809015
なんのことだかわからないなら、無理です。あきらめましょう
930デフォルトの名無しさん:2005/08/01(月) 15:48:22
いわゆるクリップボード監視アプリでは似たようなことやっているけど、
ドラッグアンドドロップとか、ファイルダイアログでのファイル移動操作とかも考慮すると、
完全に防ぐのは難しい。
931デフォルトの名無しさん:2005/08/01(月) 15:57:00
satoといいます。
ファイルをPC外に持ち出されないように、
エクスプロラーで、「コピー」操作を
行った段階で、その事をDelphiから
感知する方法はありますでしょうか。
よろしく、お願いします。
Windows2000 Delphi6.0です。
932デフォルトの名無しさん:2005/08/01(月) 17:07:45
MLと2chでマルチする人も珍しい
933デフォルトの名無しさん:2005/08/01(月) 17:10:01
フィルタドライバってネットに資料全然ないな(英語では調べてないけど)
ファイルを暗号化して別ファイルとして保存、別のプログラムで復号したら
トラッキングするのはかなり難しくなりそうだけど・・・
難しいというか、面倒と言うべきかな
934デフォルトの名無しさん:2005/08/01(月) 18:21:04
929 であげた資料は日本語ですが...
普通の SDK の外の資料だからあまり読む人はいないのかもしれないけど、
プリンタドライバとかでも必要だから、読む人は読んでいるんだろう。

ファイルシステムを丸ごと作るわけではなく、ミニポートドライバを作るだけで
すむから、速度を気にしなければ COM が使える人なら簡単なんだけどね
935デフォルトの名無しさん:2005/08/03(水) 18:45:38
>>932
同じスレにもう一度投下する人もな
936デフォルトの名無しさん:2005/09/01(木) 13:39:09
すみません教えてください。
Win32APIのReadConsoleとか使ってコンソールアプリを作っているのですが
パスワード入力のところで、エコーバック無しで入力させたいのですが
どのようにすれば良いのでしょうか?
SetConsoleModeとか?いろいろやってみたのですがダメです。
937936:2005/09/01(木) 16:00:25
ありゃりゃ、このスレってよく見たら氏んでた?

Win32API質問箱でもいってくる。
マルチになるんでこの質問はスルーしてください。
938デフォルトの名無しさん:2005/09/01(木) 16:57:08
Delphiでコンソールってあんまりやらないからな
まあ、がんばってくれや
939デフォルトの名無しさん:2005/09/28(水) 20:37:06
DLL を使うアプリなんだけど、
もしDLLが無ければそのDLLを吐き出して終了して
次実行したらDLLが使えるというような仕掛けにしようと思うのだけど、
実行時動的リンク だと大量にある関数をいちいちポインタ表現するのが面倒
ロード時動的リンク だと、ロード時にエラーメッセージが出るのは良いとしても
その後の実行で SysInit InitializeModule 内でメモリアクセスエラーが出て強制終了されてしまう。

スマートな解決方法は何かあるかな?

案1、別の実行ファイルでDLLがあるかどうかだけチェックする・・・・結局格好悪いし普段の起動が遅くなる
案2、_InitExe を書き換えてしまう。 ・・・・これだけの為にはチョッと・・・
940デフォルトの名無しさん:2005/09/28(水) 20:58:53
DLLをロードする前にチェックするんじゃだめなのか?
941デフォルトの名無しさん:2005/09/28(水) 21:06:34
>>940
それは実行時動的リンクでしょ。
なにせ100近く関数があるから
全部の関数ポインタとを書くのは、ちょっと勘弁してくれって感じ。
・・・・でもそうするしかないか。

みんなどうしてるんだろ? 正規表現置換でやれば、それほどでも無いのかな?
942デフォルトの名無しさん:2005/09/28(水) 21:10:04
>DLL を使うアプリなんだけど、
>もしDLLが無ければそのDLLを吐き出して終了して
>次実行したらDLLが使えるというような仕掛けにしようと思うのだけど、
別に終了する必要はないし・・・そのまま動的リンクへ

>実行時動的リンク だと大量にある関数をいちいちポインタ表現するのが面倒
>ロード時動的リンク だと、ロード時にエラーメッセージが出るのは良いとしても
>その後の実行で SysInit InitializeModule 内でメモリアクセスエラーが出て強制終了されてしまう。
>スマートな解決方法は何かあるかな?
面倒でも動的リンクでいちいち記述するのが逆にスマートかも
943デフォルトの名無しさん:2005/09/28(水) 21:14:14
>>939読んで何かつっかかえていたんだが、ヘルプひっくりかえして思い出した。
Delphi for .NETには仮想ライブラリインターフェースっつうDLLの遅延ロードに便利そうなものが新設されてた。
まあ_InitExeなんて書いてるぐらいだから.NETはお呼びでないだろうが。
944939:2005/09/28(水) 21:33:59
今まで、実行時動的リンクする時は

procedure Hoge(hage:Integer);
begin
if assigned(pHoge) then Hoge(hage) else MyRaise( 'Hoge');
end;
こんな感じのを作ってたけど、
さすがにこれを100も書くのは無理。

それをあきらめて、直接間接コールさせれば、 正規表現置換で出来そう。

>>943 うん。 いまだにD5だし
945デフォルトの名無しさん:2005/09/28(水) 21:36:42
ロード時動的リンクでロードできなかったらDLLを吐いた後即座に終了して、
自分自身を再実行させるんではだめですか

再実行は終了直前に別のプロセスとして起動させるか
batファイルを吐いて実行させるか
946939:2005/09/28(水) 22:02:12
>>945
ロード時動的リンクはOSがまずエラーメッセージを出すみたい。

これはいいんだけど、

ロード時動的リンクに失敗すると、Delphiで作ったアプリは
その後のセットアップルーチン内でメモリアクセスエラー出してしまうんで
結局DLLを吐き出す事が出来んのです。
それには、スタートアップルーチンである InitExeを書き換えてしまうしかない


で結局
procedure Hoge(hage:Integer); stdcall;
 ↓
procedure RaiseHoge(hage:Integer); stdcall;begin MyRaise('Hoge');
type THoge = procedure (hage:Integer); stdcall;
var Hoge:THoge;

さらに

p=GetProcAddress(hModule, 'Hoge'); if p=nil then Hoge=RaiseHoge else Hoge=THoge(p);
とやれば、正規表現置換でなんとかなりそう

947デフォルトの名無しさん:2005/09/28(水) 22:35:32
なるほどね
ただLoader.exeの可能性も考えていいんじゃないか?
programからVCL抜きで小さいの作れば起動もそれほど遅くならないし
それはそれでスマートだと思うけど
948デフォルトの名無しさん:2005/09/28(水) 22:55:54
とか何とかやってる間に100個位書けるんジャマイカ
949デフォルトの名無しさん:2005/09/29(木) 00:14:36
要は実行タイミングが得られればいいんだろ?
もう一個DLL作って、それが最初にロード時リンクされるように
順番を調整して、そのDLLの中で目的のDLLの存在確認をとる
なんてのはどうだ?
思いついただけだが。
950デフォルトの名無しさん:2005/09/29(木) 00:27:09
それか、_InitExe直せるぐらいなら自己書き換えなんて楽勝だろ。
.exeでもDLL同様にエクスポートはできるから、
100個の関数をプロトタイプと名前を合わせた
ダミー関数として作っておいて自身のエクスポートテーブルに載せる。
あとは自身のエクスポートテーブルを参照して、
各関数と同名でGetProcAddressして、結果によって
ダミー関数の実体を書き換えてやれば…。
思いついただけだってば。
951デフォルトの名無しさん:2005/10/13(木) 18:33:55
procedure TForm1.Button1Click(Sender: TObject);
var
    Form2: TForm2;
begin
    Form2 := TForm2.Create(self);
    Form2.Show;
    Form2.Parent := self;
end;

こうして実行すると、チャイルドウィンドウとしてForm2が開かれます。
ここでForm2がForm1の範囲をはみ出すとForm1にスクロールバーが出ます。

その後マウスでForm2移動してを内側にした上でスクロールバーをクリックすると、
エラーが出ます。(スクロールバーはVerzとHorzと両方の場合のみ)

これって何でエラーが出るんでしょうか?
対策として、Form2が動いたときForm1のスクロールのアップデートをしようかと思っていますが、
どういうコードに
952デフォルトの名無しさん:2005/10/13(木) 18:39:47
MDIFormではダメなの?
953951:2005/10/13(木) 18:46:45
>>952
あ、その存在を忘れていました。


確かにMDIフォームならスクロールバーはリアルタイムに直されますね。

でも、ボタンの下にForm2が入っちゃう。
954951:2005/10/13(木) 18:55:57
やっぱりMDIフォームじゃない解決策お願いします。
955デフォルトの名無しさん:2005/10/13(木) 19:17:46
Form を Form に貼り付けるような厨房アプリなんてつくるなよー
956デフォルトの名無しさん:2005/10/13(木) 20:19:32
>>955
フレームがない頃はFormPanelなんてのがあったりしたなぁ。
今でもドッキングがあるし、普通じゃない?。
957デフォルトの名無しさん:2005/10/13(木) 21:26:27
なら、ドッキングさせりゃいいじゃない
958デフォルトの名無しさん:2005/10/14(金) 08:45:17
Frame もすでにあるし
959デフォルトの名無しさん:2005/10/31(月) 09:03:33
TPanelとか、回転できますか?
960デフォルトの名無しさん:2005/10/31(月) 12:08:10
そのままの形では回転できない。モニタ回すしかない。
961デフォルトの名無しさん:2005/10/31(月) 13:04:53
じゃあ、TPanelに回転機能を付けたコンポーネント希望。
ネットに落ちてないかな?
962デフォルトの名無しさん:2005/10/31(月) 13:10:09
>>959 >>961
ここってDel上級者用じゃないのか?
回転したいpanelのRectを部分の画像をコピーして回転させればイイじゃん。
それを別で表示
963デフォルトの名無しさん:2005/10/31(月) 13:18:05
>>961は自称上級なんだろ。
964デフォルトの名無しさん:2005/10/31(月) 13:27:12
>>959 はageたかっただけだろ
965デフォルトの名無しさん:2005/10/31(月) 13:37:41
>>962
その内容をコンポーネント化する方法きぼんぬ。
966デフォルトの名無しさん:2005/10/31(月) 13:46:39
画像を回転してもウィンドウを回転したことにならないよ
967デフォルトの名無しさん:2005/10/31(月) 13:48:28
TPanel は子ウィンドウなのでウィンドウとしての性質はOSが決めている。
だから真の意味では回転できない。
968959:2005/10/31(月) 13:49:35
ウィンドウ自体回転になってなくても良いです。

でも、TImage(おっと、今使ってるのTPanelじゃなかった、TImageのビットマップだった)の中の
ビットマップの人が回転してて欲しいでつ。
969デフォルトの名無しさん:2005/10/31(月) 13:52:46
イメージ 回転 Delphi でググル
970デフォルトの名無しさん:2005/10/31(月) 14:00:21
971デフォルトの名無しさん:2005/10/31(月) 16:03:11
Canvas.Pixels[X,Y]でアクセスすると激遅になるだろうし、
結構面倒だね。
972962:2005/10/31(月) 16:39:56
>>971
Scanlineで取る事ぐらいするだろww
973デフォルトの名無しさん:2005/10/31(月) 16:47:54
上級スレにしては回答も低級すぎだな
974デフォルトの名無しさん:2005/11/01(火) 01:28:21
煽れば教えてもらえるという考えは誤りです。
975デフォルトの名無しさん:2005/11/01(火) 15:17:59
2005でMSAccess2003で作ったdb1.mdbに接続したいのですが、
データエクスプローラでMSAccessに新しい接続を追加して
「接続の変更」でプロパティ画面見たいのを出して、
「Database」のところにdb1.mdbのパスを入力して
「Password」と「UserName」をくうらんにして
テストを押したのですが、
「接続が開きませんでした」とメッセージが出て接続できません。
誰かお知恵を貸してください。
976デフォルトの名無しさん:2005/11/02(水) 12:22:53
既にあるExeファイルのアイコンを書き換えようと思っているんですけど
どうすればできるのでしょうか?
Delphiに限らずどこかにサンプルとか落ちてないですかね。。。
977デフォルトの名無しさん
>>976
UpdateResourceでできるようです。