5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Delphi相談室その8

1 :デフォルトの名無しさん:02/11/13 09:19
Delphi関連のTips Q&A はこのスレです。

・もっと易しい、優しくな雰囲気がよければこちらに
モナーの *やさしい* Delphi質問スレ Ver.9
http://pc3.2ch.net/test/read.cgi/tech/1033668645/

・雑談はこちら
ミ,,゚Д゚彡DelフサギコのフサフサDelphi談話室G
http://pc3.2ch.net/test/read.cgi/tech/1035549044/
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室G
http://pc3.2ch.net/test/read.cgi/tech/1035676809/


つづく >>2-4 あたり

2 :デフォルトの名無しさん:02/11/13 09:19
<関連スレッド>

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

・なんかよく判らないが
Delphiマンセー
http://pc3.2ch.net/test/read.cgi/tech/1029120920/

delphiで作られた有名ソフトって何がある?
http://pc3.2ch.net/test/read.cgi/tech/990056026/


3 :デフォルトの名無しさん:02/11/13 09:20
<過去ログ>

Delphi相談室その7
http://pc3.2ch.net/test/read.cgi/tech/1032576325/l50
Delphi相談室その6
http://pc3.2ch.net/test/read.cgi/tech/1028436692/
Delphi相談室その5
http://pc3.2ch.net/test/read.cgi/tech/1022921598/
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 :デフォルトの名無しさん:02/11/13 09:27
日本ボーランド
http://www.borland.co.jp/delphi/

Delphiマガジン
http://dmj.psnet.ne.jp/

Delphi広場
ttp://www.sakaki.keiaikai.or.jp/

About Delphi
ttp://www2.big.or.jp/~osamu/Delphi/

その他
http://www.google.co.jp/search?q=Delphi&lr=lang_ja

5 :デフォルトの名無しさん:02/11/13 09:32
FAQ
Q D6パーソナルにアクションマネージャーは?
A ありません

Q D7Proヘルプアップデートしたらハイパーリンク無くて使い難い
A D7Extヘルプを一緒に落としてコッソリ使いましょう


6 :4:02/11/13 09:42
掲載リンクは googleヒットの先頭から選んだもので、恣意的なものではありません。

7 :デフォルトの名無しさん:02/11/13 09:52
すれ立て乙










統一の話はどうなったんだろ。

8 :デフォルトの名無しさん:02/11/13 09:56
お疲れ。

それにしてもDelphiって本当に糞言語だな

9 :デフォルトの名無しさん:02/11/13 10:00
> それにしてもVBって本当に糞言語だな
あのーここDelphiスレですが・・・

10 :デフォルトの名無しさん:02/11/13 10:23
>統一の話はどうなったんだろ

2chのシステムとして、使わないスレは勝手に下がる
のだから、不要なら使わなければいいだけでは?


11 :デフォルトの名無しさん:02/11/13 11:52
>>5
>A D7Extヘルプを一緒に落としてコッソリ使いましょう
D7 Ent(erprise) の間違いだな?

12 :デフォルトの名無しさん:02/11/13 11:53
>>9
おおっ、君には見えたのか

13 :デフォルトの名無しさん:02/11/15 18:26
今日賢くなった事 age

 構造体配列定数の定義

type THoge = record a:string;b:string; end;

const AHoge:array[0..2] of THoge=(
(a:'こう' ; b : 'いう'),
(a:'ふう' ; b : 'に'),
(a:'構造体メンバ目' ; b : 'が必要'));

14 :デフォルトの名無しさん:02/11/15 21:11
ゲームプログラムをしているのですが、描画内容の計算は1/30秒ごとに行い、
Application.OnIdle で暇なときに描画関数を呼び出し、というのをやっています。

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

理想は、通常は30fpsで描画して、維持できなくなったら徐々にfpsを減らしていく、
という形なのですが、いいアイデアは無いモノでしょうか。

15 :デフォルトの名無しさん:02/11/15 21:14
つまりPCの状態にかかわりなく優先的に処理して欲しいわけか

16 :デフォルトの名無しさん:02/11/15 21:33
>>14
18fps(55ms間隔)でよければOnTimerイベント内で処理するのがいいよ。
呼べなきゃ呼べるようになったときに呼んでくれるから。
OnIdleはそういう目的では使わないよ。
というか素直にDirec(略

17 :デフォルトの名無しさん:02/11/15 21:37
>>14
「CPUに余裕があるとき」じゃなくて何の処理もしてないとき。
これはwindows全体の話ではなく、あなたのプログラムが何の処理もしてないときに呼び出される。
(つまり、メッセージループに入っていて、かつ処理するべきメッセージがないとき)
CPUの負荷はあまり関係ない。

18 :デフォルトの名無しさん:02/11/15 21:42
>>14
OnIdleは他のジョブが動いていても時間が来たら呼ばれる筈

ホントに時間が空いてるかどうかは
パフォーマンス データを取得して調べてみるしかないのでは?
ヘッダ情報は
http://www.ez-delphi.com/sources/PDH.htm


19 :デフォルトの名無しさん:02/11/15 21:45
OnIdleはメインスレッドにメッセージがこなくなったら発動するんだと思う。
だから後者かな。
俺はゲームの経験はないんだけれども、fpsを気にするようなゲームでは、
メインループは独自に書いたほうがいいと思う。こんな感じ?↓
while GameIsOn() do
begin
if PeekMessage(...) <> 0 then ProcessMessages(...)<-もしVCLにウィンドウメッセージを処理させたいなら。
<描画とか、時間測ってsleepとかで調節したり...>
end;

20 :デフォルトの名無しさん:02/11/15 21:51

while True do
begin
 now := GetMilliSecond;
 calc;
 if realtime < processtime then
  render
 else
  NanoSleep(調整);
 Inc(processtime, GetMilliSecond - now);
 Inc(realtime, 33);
end;


21 :14:02/11/15 23:16
なるほど、勉強になりました。
OnIdleは自分が何もしていないときに呼ばれるんですね。

ゲームといってもシミュレーションに近いので、数値計算は一定時間おきに行って(MMTimer使ってます)
計算結果をボンボン放り込んで、描画はそれを取り出しながら維持できる最大のfpsで行いたい、って感じですね。
うーん、やっぱりOnIdleは使うべきではないのかな・・・。
(負荷が増えると描画間隔が不定になるので、見てて気になるんです)

>>20
参考になります。
えっと、描画が終わるまでsleepして最大33ms間隔で描き続ける・・・でしょうか。
sleepは使ったことがないんですが、全体が止まってしまうということはありませんか?
(すみません、スレッドとか扱ったことがなく、よく解らなくて・・・(´・ω・`))

22 :デフォルトの名無しさん:02/11/15 23:58
もう一個mmtimer使って、そっちで描画やったら?

23 :デフォルトの名無しさん:02/11/16 08:18
mmtimer(マルチメディアタイマー)は実は別スレッドなので、
マルチスレッドを意識しないで使うとバグの温床になります。
つか、最近それでハマった・・・・・・。

24 :デフォルトの名無しさん:02/11/16 18:50
アセンブラのようなものを作ろうとしています。

そのフィールドを表現する方法として
案1:
  type TOpFld = record LAB , OP , SRC , DST , Cmt:string; end;

案2:
  type TOpName=(opLAB,opOP,opSRC,opDST,opCmt);
  type TOpFld = array[TOpName] of string;

があると思います。
案2だとループ等の処理が容易なので魅力なんですが、普通はどうやります?

25 :デフォルトの名無しさん:02/11/16 19:58
record / 構造体の代わりにクラスを定義。
ループだろうが文字列によるインデクシングだろうが何でもできる。

26 :デフォルトの名無しさん:02/11/16 20:04
MapDKという地図開発ツールをDelphiで使っている方いらっしゃいますか?
Delphiでどうやれば使えるようになるのか知りたいのですが。。。

27 :24:02/11/16 20:08
>>25
そりゃまあ、何でも出来るけど、メンドクサイ面が多くなりませんか?
単に一時的に保存するだけでメインでない部分でクラスを使うのは・・・・


28 :24:02/11/16 20:11
>>26
知らないんだけど ActiveXみたいだから コンポーネント->ActiveXの取り込みで動くんじゃないの?

29 :デフォルトの名無しさん:02/11/16 20:13
レコードだと一気に全部ファイルへ書き出せるのにクラスだと
ファイルに書き出すのが面倒

30 :26:02/11/16 20:17
>>28
う〜ん、試してみたんですけどAcitiveXの取り込み->コンパイルで
エラーが発生してコンパイルできないんですよ。

でも、MapDKを使用して製品を開発している会社の紹介では、
Delphiを使っているというところもあるみたいだし。

31 :24:02/11/16 20:21
>>30
確かに、タマにあるよね。 手直ししないと使えない事が。 昔は IEコントロールがそうだったような気がする。

エラーメッセージはどんなの?

32 :24:02/11/16 20:24
>>29
そうだね。バイナリならそのまま書き出せるけど・・・文字列だからなあ

結局 こんな所で悩んでもしょうがないので、2の配列型にしました。
その方が面白そうだし


33 :デフォルトの名無しさん:02/11/16 20:42
>>24
速度いらないなら行全体を文字列として保持すればいいし
速度最優先なら一命令一クラス割り当てて
文字列を適切な型(アドレス・レジスタ等)にキャストしてセットすればいい。

文字列配列はその中間だけど列挙型がない方が柔軟な記述ができるから
  type TOpFld = array of string;
でいいんじゃないの。

34 :26:02/11/16 21:19
>>31
レスありがとです。
会社行かないとエラーメッセージは確認できないです。残念。
いろいろいじってみますね。

35 :デフォルトの名無しさん:02/11/17 08:01
誰か pasDoc(http://pasdoc.sourceforge.net/)
ローカライズした/する気のある奴いない?
自分でもソース手に入れて少し弄ってみたんだが、
どうも怪しげな文字化けが発生するので困ってるのよ。

36 :デフォルトの名無しさん:02/11/17 08:22
>>35
面白そうだね。 
ただ、古いTPスタイルのコードみたいだから
Delphiスタイルに変更してしまいたいな。
それからGUI付けたい。

37 :デフォルトの名無しさん:02/11/17 08:43
>>35
こういうのを若い人にやって貰いたいな。特にフサギコに。

38 :デフォルトの名無しさん:02/11/17 10:27
ちと方針を変更して pasdoc をDelphi用に記述した(?
DIpasdoc(http://www.zeitungsjunge.de/delphi/) の方を弄ってる
単純な文字の置き換え作業は終わったので上げておく。
今手元のソースでチェックしてるけど、できれば協力plz
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1037496078

Kylixは確かEUC保存だったはずなのでロシア語同様、
文字コード指定を分けた方が良いかもしれない
GUIもあった方がいいね。暇を見てサクっと作っておこう

39 :デフォルトの名無しさん:02/11/17 11:26
>>23
がちょっと気になる・・・mmtimerだけ論理的に別空間で動いてるってこと?
特に意識せずに使ってるけど、なんか覚えておかないとまずいのかな・・・。

40 :デフォルトの名無しさん:02/11/17 11:58
「論理的に別空間」ってのはよくわからんが、仮想メモリ空間は同じだぞ。
何が問題かというと、たとえばあるポインタがnilかどうかチェックしてからそのポインタを
逆参照するようなプログラムで、nilチェックしてから逆参照するまでの間に別なスレッドが
そのポインタをnilにしてしまうとバグるとかそういう話。
TThreadの使い方、特にSynchronizeメソッドあたりの使い方を勉強しる。

41 :デフォルトの名無しさん:02/11/17 20:55
>>38
DIpasdocにそのソースを入れてコンパイルしなおしたんだけど
特に今の所日本語が通らない事はないみたいだけど?


42 :デフォルトの名無しさん:02/11/17 21:00
PanasonicのHDカーナビのCMで
今日何に食べる?
ナポリタンナポリタンナポリタン〜
イタリアンね
みたいな会話がある…
どうみても
( ゚∀゚ )ぱいそんぱいそんぱいそ〜〜ん
のパクリだ…

43 :デフォルトの名無しさん:02/11/17 21:27
JavaのinterfaceみたいにDelphiのinterfaceを気軽に使いたいんですが
何かいい方法はないでしょうか?

どーもごちゃごちゃして汚くなるのと、メモリ管理が参照カウント方式になるのが
わけわからんのです。

ためしに_AddRefと_Releaseを単に-1を返すようにoverrideしてみたんですが、
それはそれで間違っているような気がします。

var
ti : IHoge;
begin
ti := SampleClass.Create;

だったらti.Freeできないですし。
Javaだったらgcがあるからかまわないわけですが、どうやるのがDelphi的に正しいのかなぁ。

44 :デフォルトの名無しさん:02/11/17 21:33
DelphiのinterfaceはCOM専用と思っておいたほうがいいよ。
Delでは自前のクラスにinterface使った事ないよ。

45 :デフォルトの名無しさん:02/11/17 21:46
stringで、「何か」ってどう表せば良いんでしょうか?
意味不明でスマソ。

46 :35=38:02/11/17 21:52
>>41 サンクス。しかしこちらの調べだと2バイト文字の影響を
食らいまくっているらしく。

・コメント中に2バイト目が{}がくる文字(”ボ”や”マ”)が
現れた場合はパースに失敗する
・2バイト目に@がくる文字(”ァ”)の後にlink等と書くと
タグであると誤認識する&文字化けする

StrByteType チェックを噛ましまくって暫定解決できた
版を作ったので、GUIとセットでソース置き場に上げときます。
しかしキモの部分に手を加えているのでエンバグ/デグレ
(特に既存他言語の処理で不具合)が起きている可能性が
極めて高いので御用心を。

47 :デフォルトの名無しさん:02/11/17 22:06
>>44
多重継承みたいなことが必要になったときにはどうしてます?
そのような事態にならんように設計で回避ですか?


48 :デフォルトの名無しさん:02/11/18 00:31
基本的なコトなんですが・・・

1. 自分でprocedureを作って、Formの上の部品にアクセスしたいとき、
Form1.label1 とか絶対指定しないとエラーになるのですが、要するにそのprocedureが
Form1を継承していないということなのでしょうか?何処かに指定がいるんでしょうか。

2. フォームの上に動的にimage1を配置したいのですが、それを見越して
Form1.image1... というのをソースに書くと、そんなモン無いぞとエラーになります。
が、image1とだけ書くとコンパイルが通ります。何故なんでしょうか?

49 :デフォルトの名無しさん:02/11/18 00:42
>>48
>1.
継承しているかどうかということではなくって
Form1を省けるのはTForm1自身のメソッドのみ。

>2.
いろいろ方法はあるけど
TForm1のprivate部分に
image1: TImage;
と書いておけばいいよ。で、FormCreateか何かで
image1 := TImage.Create(Self);
image1.Parent := Self;
としておく。
>image1とだけ書くとコンパイルが通ります。
これは別の何かを参照しているのでバグっぽいかも。
コンパイルが通るのはたまたま・偶然。

50 :デフォルトの名無しさん:02/11/18 01:06
>>48 FAQっぽいわけだが。
誰でも通る道っぽいので、気持ちはわからんでもない

1.クラスは「型」。例えばおかしのクッキー型のように
TForm1という型でForm1と同じFormをぽんぽん作れるの。
ぽんぽん作ったクッキーはそっくりでその全てにLabel1があって、
例えばLabel1と書いてもDelphiはTForm1という型で作った
どのクッキーのLabel1の事を云っているのかわからない。
よって Form1.label1 と指定しなければならない

2.まずソースを見る。TForm1という型には image1 は
存在しない筈。存在しないものを指定すればエラーになる道理です。
image1 でエラーにならない理由だが、
手続き/関数のローカル変数として宣言してないか?
ローカル変数はその名の通り特定地域内(たとえば関数内)専用の変数。
要は〜.〜の形式ではアクセスできないわけ。
詳細はHELPのスコープの項をみてくれい

51 :デルファイの名無しさん:02/11/18 01:33
>>43
それでいいんじゃないですかね。
クラスとしての参照も保存しておいて、そっちでFreeかな。

var
t: SampleClass;
ti : IHoge;
begin
t := SampleClass.Create;
ti := t;
 {ti使う}
ti := nil; {Free後_Releaseが呼ばれないよう参照を切る}
t.Free;

インターフェースに_Release以外の解放用メソッドを付けるのは、
解放後言語仕様により_Releaseが呼ばれてしまいアクセス違反を起こします。

自分は、クラス型としての使用をメインに、何かに渡す時だけインターフェースな
使い方もするので、最後はクラス型としてFreeです。

或いは、TComponentの様に、連鎖解放みたいな仕組みを作っておくとか。

52 :デフォルトの名無しさん:02/11/18 08:06
>>46
おお、修正が早いね。
2バイト目の } は見つけたんで
function TTokenizer.ReadCommentType1(var t: PToken): Boolean;
var
 c: Char;
 label LP;
begin
 ReadCommentType1 := False;
 if (not CreateToken(TOK_COMMENT, t)) then Exit;
 t^.Data^.AppendChar('{');
 repeat
 LP:
  if (not HasData) or (not getChar(c)) then
   begin
    Exit;
   end;
  if (c in LeadBytes) then begin t^.Data^.AppendChar(c);GetChar(c);t^.Data^.AppendChar(c); goto LP;end;
  if (c = #10) then
   Inc(Row);
  if (c = '{') then
   WriteLn(GetStreamInfo + 'Warning: Found opening brace { within comment, nested comments are not supported.');
  t^.Data^.AppendChar(c);
 until (c = '}');
 ReadCommentType1 := True;
end;

こんなふうに修正した所だけど、 2つ目は見つけてもなかったよ

53 :デフォルトの名無しさん:02/11/18 09:16
C言語のsystem()に相当する関数って何かありませんでしたっけ・・・?

54 :デフォルトの名無しさん:02/11/18 18:51
Windows.CreateProcess

55 :デフォルトの名無しさん:02/11/18 22:58
>>49 >>50
ありがとうございます。
Form1が持つimage1と明示してやらないとだめなんですね。

で、気になったのが、onFormCreateでimage1を作ってやって、他のTForm1の
メソッド(たとえばForm.Button1.onclick)でimage1にアクセスすると通るんですが、
自分で単体のProcedureを作って(Form1のメソッドではない)その中でForm1.image1に
アクセスしようとするとダメでした。
後者は、その時点でForm1にimage1が無いのでダメなのは、ご説明で理解できました。
前者がなんで通るのかがいまいちで・・・。
http://www.geocities.co.jp/SiliconValley/1810/hoge.txt ← アフォでスミマセン(´・ω・`

56 :デフォルトの名無しさん:02/11/18 23:24
>>39
TTimerと同じ使い方をすると原因不明の挙動で悩むことになる。
例えば、よくやるのがVCLのコンポーネントなんかにアクセスしてたりする場合。

基本的にはマルチスレッドプログラミングを適用すればよいので、
同タイトルのスレッドか、書籍やwebを見ればよいと思われ。

俺もデバッガのスレッドウインドウ見てて最近気づいた(駄目ジャン

57 :デフォルトの名無しさん:02/11/18 23:36
48=55 は、結局、クラスとかOOPが我かっとランのね

58 :デフォルトの名無しさん:02/11/18 23:51
>>57

そうだね。クラス、メソッド、フィールド、継承、self などを
しっかり勉強した方が、ここで対症療法を繰り返すより、
かえって上達への近道だと思われ。ヘルプを読むだけでも
いい


59 :デフォルトの名無しさん:02/11/19 00:32
>>54
CreateProcessパラメータ多くて面倒すぎ・・・
ただdirとかコマンドラインから実行したいだけなのに。

ウワァァァンヽ(`Д´)ノ


60 :デフォルトの名無しさん:02/11/19 00:41
WinExecという手があった。
推奨されないらしいけど。

cmd /c dirでできるね。
しかし微妙に思ったとおりの動作にならない。
コマンドラインアプリケーション作って、 cmd /c pauseってやったら
最後にEnter押すまで終了しないのが理想なのだが。


61 :50:02/11/19 01:32
>>55 もうちょっとつきあおうじゃないか。
でも>>57>>58の指摘は正しい。そのつもりで聞いとくれ
>>55の例でimage1に出来るのはimage1がグローバル変数だから。
詳しくはHelpのグローバル〜とスコープの項を読み漁る事。
その上で、以下の質問に答えよ(解答はメール欄に書く事)

Q1:a〜iのうちproc1からアクセス可能なものを挙げよ。
Q2:a〜iのうちproc2から(以下略)
Q3:unit1をuses指定しているunit2のproc3から(以下略)
unit Unit1;
interface
type
 TForm1 = class(TForm)
       a: Integer;
  public  b: integer;
  private  c: integer;
  protected d: integer;
  published e: integer;
 end;
var Form1 : TForm1;
  f: integer;
implementation
var g: integer;
procedure TForm1.proc1; var h: integer; begin end;
procedure proc2; var i: integer; begin end;

62 :デフォルトの名無しさん:02/11/19 19:17
clipboard := TClipboard.Create;

begin
clipboard.SetTextBuf(Pchar('a'));
end;

とやるのと、

Clipboard.Astext := 'a';

とやるのではどっちが良いのでしょうか?

63 :デフォルトの名無しさん:02/11/19 19:18
あり、begin と end は抜かして下さい。

64 :デフォルトの名無しさん:02/11/19 19:24
後者がいいよ。PCharなぞ見たくもない。

65 :デフォルトの名無しさん:02/11/19 19:33
やっぱりそうですか。さんくすです

66 :Delフサギコ ◆A6VzDeLphI :02/11/19 22:56
  ∧,,∧   マヅ
 ミ,,゚Д゚ミつ TClipボドのインスタンス生成イクナイ
        たぶん

67 :デフォルトの名無しさん:02/11/20 08:35
前者見て、singletonのかと思ってソース見たら違うじゃん。
利用するだけなら、後者だな。

後者も後者で遅延生成されてるんだな。
proxyパターン?

68 :Delフサギコ ◆A6VzDeLphI :02/11/20 09:13
  ∧,,∧   VCL標準の
 ミ,,゚Д゚ミ   シングルdではなかったかと。

ClipbrdユニットClipboard関数みたらわかるです。

69 :デフォルトの名無しさん:02/11/20 23:00
1 SHL 32

なんで結果が1になる?

70 :デフォルトの名無しさん:02/11/20 23:46
実行前だから

71 : :02/11/20 23:50
>>69
型のビット長の余りだけシフトするからあってるよ。
「1」とだけ書くとintegerだから32ビットシフトは
0ビットシフトと同じ。
1 shl 32 = 1 shl 0 = 1
1 shl 33 = 1 shl 1 = 2

72 :デフォルトの名無しさん:02/11/21 11:31
むしろ1でなくて何になると思ったのか聞きたい

73 :69:02/11/21 11:55
ヘルプコピペから
 >x shl y と x shr y の各演算は,x の値を左または右に y ビットだけシフトする。
 >これは x に対する 2^y の乗算または除算に相当し,

1 SHL 32 = 1*2^32 オーバフローしてゼロを期待していました。

じつは、 nビットマスク処理= 2^n のモジュラ演算として
mask := (1 SHL n) -1;
result := X and mask;

と書いたのですが、 これが動かないので気付きました

74 :デフォルトの名無しさん:02/11/21 13:07
>>73
ヘルプをそこまで読んだなら、なぜその後を読まない?

75 :69:02/11/21 13:19
なるほど、 D6パーソナルのヘルプには書いてありますね。 D5proには無かった

76 :デフォルトの名無しさん:02/11/21 13:45
>>75
げ、D5かぁ。確かに書いてないな。すまん。

77 :デフォルトの名無しさん:02/11/21 16:18
C++中級者(仕事で使ってる)ぐらいの人が
かんたんに、
Delphi勉強できるHPや書籍ってありませんか?


78 :デフォルトの名無しさん:02/11/21 16:30
>>77
中級なら基本は付属のマニュアル等で十分だと思うがダメ?

79 :77:02/11/21 16:53
>>78
Personalだっけ
無料の奴使ってるので。
付属マニュアル無いのです。

特に無いのなら、
明日、紀伊国屋で、立ち読み大会してきます。
気に入ったら買います。



80 :デフォルトの名無しさん:02/11/21 17:25
>>79
Personalか・・・ヘルプもほぼ付属マニュアルと同じなんだけどな。

とりあえずとっかかりに
ttp://www.ba.wakwak.com/~h-kova/

ttp://www.ba.wakwak.com/~h-kova/procomp.htm
なんてどうよ?

81 :Delフサギコ ◆A6VzDeLphI :02/11/21 19:15
   ∧,,∧  お役に立てたらいいかも。
  ,ミ ゚Д゚彡 メンテしてくれたらもっといいかも。
  ミ  ∪   
C++(Builder)とDelphiの対応
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999486538&res=7

82 :Delフサギコ ◆A6VzDeLphI :02/11/21 19:17
   ∧,,∧  書籍ならD6プログラバイブルが
  ,ミ ゚Д゚彡 C++/VBとDelとの対応表が載ってた
  ミ  ∪  と思うです。
 ミ〜,, ミ
  ∪ ∪  かなり詳細だったはづ

83 :デフォルトの名無しさん:02/11/22 08:05
まさか付属マニュアル見るやつが居るとは思わなかった
言い訳にしてるだけか?

84 :デフォルトの名無しさん:02/11/22 08:22
C++ → Delphi はチョイ前のC Magazine で特集組んでたよ
何月号だったかは忘れたが、割とページを割いていて分かりやすかった

85 :デフォルトの名無しさん:02/11/22 08:31
>>83
何か問題でも?

86 :ななしへたぐらま ◆XcB18Bks.Y :02/11/22 16:42
>>43 >>51
なるほど〜.

実は最近インターフェイスを使い始めていて,
終了時にソースで追えないところでアクセス違反が出ていたので
どうしたものかと思っていましたが….


87 :デフォルトの名無しさん:02/11/22 19:39
そこまでしてインタフェス使うメリットが感じられない。

88 :77:02/11/22 20:41
>>80さんや、Delフサギコさん の紹介サイトでなんとなくわかりました。
何か適当に作ってみて、慣れて見ます。
今日は忙しくて本屋いけなかったので、
次行った時にでも、D6プログラバイブル 見てみます。
ありがとうございました。

89 :デフォルトの名無しさん:02/11/22 23:32
逆に、すべての自作クラスをInterfacedObjectから派生させて
参照カウント方式にメモリ管理を任せれば、メモリーリークと無縁の世界になれる?
VCL系のオブジェクトはFreeしなきゃいけないから混乱しちゃうか。

90 :デフォルトの名無しさん:02/11/22 23:42
Delphiのメモリ管理
・Create/Free
・TComponentの親が子を開放
・Interfaceのリファレンスカウンタ
なんだかねぇ・・・

91 :デフォルトの名無しさん:02/11/22 23:43
ちなみにInterfaceは循環参照するとリークが発生する。

92 :デフォルトの名無しさん:02/11/22 23:49
>>61
すみません、超浅漬けで申し訳ないんですが勉強してきました。・゚・(ノД`)・゚・。
理論だけ見ても全く実感沸かないですね・・・実際に自分で書いて試してみます。

Formのメンバ、Unitの変数、スコープの認識がかなり曖昧デシタ・・・。

93 :デフォルトの名無しさん:02/11/23 00:08
まぁ、C++でもメモリ管理は頭痛い問題だからしょうがないべ
(shared_ptrなんかは若干使いやすいけど)

いっそGC欲しいとも思わんでもないなぁ

94 :デフォルトの名無しさん:02/11/23 00:36
ずっと思っていたのだが、 親が子を解放って事は
st:=Tstringlist.Create(Form1);
 というような感じでクリエイトすれば Free しなくても
 Form1の終了時に勝手にメモリ解放してくれますか?

95 :デフォルトの名無しさん:02/11/23 01:00
>>94
TComponentの派生クラスならそうだが
残念ながらTStringListにはOwnerはありませんにょ。

96 :デフォルトの名無しさん:02/11/23 01:04
>>94
TStringListはコンポーネント継承ではないので、その管理機構を持っていません。
TObjectTray = class(TComponent)
 public;
  constructor Create(Parent:TComponent);
  destructor Destroy:
 function CreateStringList:TStringList;
 end;

みたいなインターフェースで作るしかないかも


97 :デフォルトの名無しさん:02/11/23 01:06
>>95 ガ━━━(゚Д゚;)━━━ン!ありがとうにゅ
 勉強し直してくるにゅ

98 :デフォルトの名無しさん:02/11/23 01:10
>>96 かなり解ってきました。
TmenuItem などはオーナーを TmainMenuにしておくと個別に解放する必要は無いわけですね。

99 :デフォルトの名無しさん:02/11/23 01:12
>>96 かなり解ってきました。       
TmenuItem などはオーナーを TmainMenuにしておくと個別に解放する必要は無いわけですね。

100 :デフォルトの名無しさん:02/11/23 21:41
100
クソしてくる

101 :デフォルトの名無しさん:02/11/23 23:27
保守

102 :デフォルトの名無しさん:02/11/24 00:07
>>92 おしい。Q2、Q3とも a はアクセス可能です。
まぁ大体分かったと思うので精進してくれぃ。

103 :デフォルトの名無しさん:02/11/24 00:09
HTTPから、MP3などのストリーミングデータを取り込んで、
ストリーム再生できるMP3プレイヤコンポーネントに渡す方法は
無いでしょうか?

procedure OpenStream(Stream: TStream; StreamType: TMP3StreamType);

で、渡せるみたいなのですが、サンプルコードではClientSocketから、

stream := TWinSocketStream.Create(ClientSocket.Socket, 2000);

として、Streamを取り込んでいました。
これと同じ事をNMHTTP等から出来ないものでしょうか。

104 :デフォルトの名無しさん:02/11/24 23:45
NMHTTP なんだから HTTP プロトコル以外は無理だろ?

105 :Delフサギコ ◆A6VzDeLphI :02/11/25 11:03
 ∩|      CLXでバグ報告&対応っす
 ミ ゙''゙゙゙つ    
 ミ∧,,∧ 以前教えてもらった
 ミ,,゚Д゚彡CLXでfsStayOnTopなMainFormが
 U U   最小化/リストアするだけでどっか行方不明になる
       というバグ。Application.OnRestoreで
FormStyleを変更するという対応だけでは不十分だったので調べました。

CLXはFormStyleを変更したり
最小化/リストアするだけでForm位置がかってに変わります。
ですので以下のようにする必要があります。
なぜこんなマジックナンバー(8とか46とか)になるのかは不明
タスクバーの配置が上下左右、どの位置でもこれでOK

procedure TForm1.AppRestore(Sender: TObject);
var FormRectBuffer: TRect;
begin
 FormRectBuffer := Self.BoundsRect;
 FormStyle := fsNormal;
 Show;
 FormStyle := fsStayOnTop;
 FormRectBuffer := Rect( FormRectBuffer.Left + 8, FormrectBuffer.Top + 46,
    FormRectBuffer.Right + 8, FormRectBuffer.Bottom + 46);
 Self.BoundsRect := FormRectBuffer;
end;


106 :デフォルトの名無しさん:02/11/27 11:21
ラジオItem型のメニューの設定が簡単になるよう 
procedure SetMenuEnumProp(TypeInfo: PTypeInfo;MenuItem:TMenuItem;Click:TNotifyEvent);
var i:integer;
var T: PTypeData;
var s:string;
var nw:TMenuItem;
begin
 T := GetTypeData(GetTypeData(TypeInfo)^.BaseType^);
 for i:=T^.MinValue to T^.MaxValue do
 begin
   s:= GetEnumName(TypeInfo , i);
   if i<=MenuItem.Count then begin
     nw:=TMenuItem.Create(MenuItem);
     MenuItem.Add(nw);
   end else nw:=MenuItem.Items[i];
   nw.Caption := s  ;
   nw.Visible := True;
   nw.RadioItem:= True;
   nw.OnClick := Click;
   nw.Tag:=i;
 end;
end;
こんな関数を作り、
列挙型 THoge=(HAHA,FUFU); を定義して
フォームのpublished に property hoge:THoge;を設定して
procedure TForm1.OnHoge1(Sender: TObject);
begin Hoge:= THoge( (Sender as TMenuItem).Tag );
end;
実際の選択時のアクションは Hogeプロパティの代入メソッドで
書けばいいという事になるんだけど、 このあたりもっと自動化出来ないかな?

107 :デフォルトの名無しさん:02/11/27 20:27
かなり遅レスだが個人的にタイムリーなんで

>>26
漏れはMapDKIIIとDel6Entの組み合わせで使ってます。
ActiveX取り込みんとこでエラーは出なかったが
インポートしたpasを若干修正しないとうまく動かないかも。

108 :デフォルトの名無しさん:02/11/30 02:08
type
  TTest = class(TObject)
  public
    constructor Create;
    destructor Destroy; override;
  end;

http://www.acesekkei.com/dp_03.htm
↑ここのサンプルなどを見ると、TObjectから直接派生したクラスで、コンストラクタやデストラクタを自前で書く場合、デストラクタの方だけoverrideしてinheritedを呼んでいます。
なぜコンストラクタとデストラクタで書き方が違うんでしょうか?
TObjectのCreateは静的メソッドなのでoverrideできないのはわかるのですが、なぜあえてTObjectのCreateとDestroyは違うディスパッチの設計になっているのでしょうか?

解説していただけるとありがたいです。


109 :デフォルトの名無しさん:02/11/30 03:15
なぜって、オレにはなぜ同じでなきゃならんと思うのかの方が不思議。
Destroy には、ふつう後始末をするコードを書く、そして、override
できない Free から間接的に呼ばれて実行される。後始末は上位クラス
についても実行されるべきなので、継承の過程でえんえんと下位クラスで
override されていくべきだと思う。これに対して、コンストラクタには
普通、初期化のコードを書くので、下位クラスで新たにパラメータを
もつ TComponent.Create(AOwner: TComponent); みたいに新たに定義して
もかまわないし、そうすべきなのでは。

110 :デフォルトの名無しさん:02/11/30 04:20
>>108

オブジェクトを作るときはクラス名を指定してコンストラクターを呼び出す。
inst := TClass.Create;

オブジェクトを削除するときはインスタンスを指定する。
inst.Free

削除のときinstは基底クラスの変数を使うときがあるので仮想関数になっています。

TDerive = class(TBase)

var base: TBase;

base := TDerive.Create;
base.Free; <--- ここではTDeriveのデストラクタが呼び出される。


111 :デフォルトの名無しさん:02/11/30 09:28
>>108
TObject.Destroy
TObject.Free
ヘルプ読んだか?

112 :Delフサギコ ◆A6VzDeLphI :02/11/30 14:20
  ∧,,∧  俺も、『Delphiオブジェクト指向プログラミング(塚越氏著)』を
 ミ,,゚Д゚彡 読んでようやくわかったからなあ・・・
 ミつ[|lllll]).
〜ミ   ミ   ずばり、・なぜデストラクタは仮想かってのがP177にあり
  ∪''∪  TObject直派生のCreateやDestroyから
inheritedを呼ぶべきか否かについても書いてある。P135とP146 
しっかり読んで初めてわかるかもしれない。

名著は名著たる資格があるから名著なんでしょな。

ヘルプ読んで誰もがわかるものじゃないと思うyo。


113 :Delフサギコ ◆A6VzDeLphI :02/11/30 14:20

  ∧,,∧  で、CreateとDestoroyの宣言について。、
 ミ,,゚Д゚彡 通常、オブジェクト破棄に使われるFreeは
 ミつ[|lllll]).  TObjectのメソッド(静的)
〜ミ   ミ   
  ∪''∪ 
StringListを例にとると、
StringList1.Freeを呼び出しても、呼ばれるコードはTObject.Free。
このTObject.FreeでDestroyを呼び出すようになっているんだけど
Destroyが静的メソッドだと、呼び出されるのはTObject.Destroyに
固定されてしまうので、StringList.Destroyが呼ばれなくて困る。

だから、Destroyは仮想メソッド。
そんな感じ。

114 :Delフサギコ ◆A6VzDeLphI :02/11/30 14:22

  ∧,,∧   inherited Createとinherited Destroyは
 ミ,,゚Д゚彡  単にTObject.Create/Destroyに
 ミつ[|lllll]).  何もコードがないから呼び出していないだけ
〜ミ   ミ   
  ∪''∪  他クラスからの派生コードなら
      inherited Create / Destroyは必ず必要と
      覚えておいてよいでしょう。


こんな話題も、某MLでは"過去ログに載っている"or"HELP嫁"で
話題つぶされてしまうのかなあ、、、、2chも同じか。

今、HELPのTObject.Free/Destroy読んだけど、
俺の書いたような事は載ってないだろ、
なぜそうしなければいけないかの理由無しに
"必ず override 指令を追加"と書かれているだけ。

115 :デフォルトの名無しさん:02/11/30 14:35
その本をDelphi6,7あたりに対応して復刊してくれないかなぁTT
読みたいんだけど手に入らないんよ


116 :デフォルトの名無しさん:02/11/30 14:50
投票プリ!!
>この本は復刊交渉を開始しています
http://www.fukkan.com/vote.php3?no=4407


117 :デフォルトの名無しさん:02/11/30 18:00
復刻じゃなくて
PersonalやPoに添付してくれないかなぁ
今添付してあるのはPDFでいいよ
簡単なクラスを作って
XX.Freeの部分からF7でトレースして動きを見れば
なるほどと思うよ



118 :デフォルトの名無しさん:02/11/30 19:57
>>114
ここで話題にされているのか。

デフォルトですべてのメソッドは Virtual。ってのが正統派 OOL。
それだと速度とかが稼げないから non-virtual を指定できるようになったのが
C++ を筆頭とする OOL。

だから"必ず override 指令を追加" ってことで十分なんだけど。

で、混乱の元は「なぜデストラクタは仮想なの」ではなく「なぜコンストラクタは仮想でないの」
なのだと思うが?


119 :ねこま:02/12/01 02:02
>で、混乱の元は「なぜデストラクタは仮想なの」ではなく「なぜコンストラクタは仮想でないの」
>なのだと思うが?

TObject はオブジェクトの頂点です.つまり,この上には何もいないので
override する必要がありません.

こんな説明でよろしいかと


120 :デフォルトの名無しさん:02/12/01 04:08
>>119
全然よろしくないって

121 :デフォルトの名無しさん:02/12/01 07:33
>で、混乱の元は「なぜデストラクタは仮想なの」ではなく「なぜコンストラクタは仮想でないの」
>なのだと思うが?

継承先でコンストラクタの引数を変える場合を想定しているから。
かな。

やればわかるが、クラスのコンストラクタを仮想にすることは可能。
つまり少なくともTObjectは「意図的に仮想とはしていない」
その理由としては
クラスを継承する場合は元となるクラスに何かしら機能を追加/特化
するわけだからコンストラクタに引数が追加されるケースもありうる
そして、仮想とした場合は引数を追加することができない。

例えば、TiniFileはTObjectを継承したクラスでコンストラクタの
引数としてファイル名を要求するが、TObjectのコンストラクタを
仮想とする場合はTiniFileのためにわざわざファイル名を引数にもつ
コンストラクタを用意しなきゃいけない。無駄だと思わない?
それはまだ良いんだが。例えばコンストラクタに自分で作った
クラス(TMyClass)を渡す必要がある場合はどうする?
某に頼んでTObjectにコンストラクタを追加してもらう?
いくらなんでも無茶だと思わない?

122 :デフォルトの名無しさん:02/12/01 11:14
こんなこともできますが?
>constructor Create(s: string); overload
で警告が出るがこれは全く余計なお世話だと思う。

TMyObject = class
public
 constructor Create; virtual;
end;

TMyObjectEx = class(TMyObject)
public
 constructor Create; overload; override;
 constructor Create(s: string); overload;
end;


123 :デフォルトの名無しさん:02/12/01 11:34
ひぇーDelphi初心者の自分にはこうなるとわけわかんないよ。
コンストラクタが仮想ってことは生成したいオブジェクトが実行時にしかわからんということだよね?
どーゆー意味があるんじゃあ

124 :デフォルトの名無しさん:02/12/01 11:47
>コンストラクタが仮想ってことは生成したいオブジェクトが実行時にしかわからんということだよね?

TMyClass = class of TMyObject;
TMyObject = class ;
TMyObject2 = class(TMyObject);
TMyObject3 = class(TMyObject);
としといて
var c: TMyClass; o: TMyObject;
begin
 c := TMyObject2; o := c.Create; // TMyObject2のインスタンスが生成
 c := TMyObject3; o := c.Create; // TMyObject3のインスタンスが生成
end;
なんてことができる。

例えばオセロゲームなんかで使うとこうなるよ。
// プレイヤー選択
FirstPlayer := TManPlayer;
SecondPlayer := TCpuLevel4Player;
...
TOhelloGame.Start(FirstPlayer, SecondPlayer) // 内部でプレイヤークラスのインスタンスを生成


125 :Delフサギコ ◆A6VzDeLphI :02/12/01 13:38
   ∧,,∧!  /
  ミ,,゚Д゚彡 < なるほど、勉強になるね
  ミ.,,O),,.ミ   \
たしか、overloadはD4かD5からなので
それまでのDelphiの為に元々のVCLが
Createを静的メソッドで実装してきたのかも。

純粋OOPLなら、デフォルトでvirtualが理想なのかもしれないですが
DelphiのHELPみると、静的メソッドは
"メソッドのアドレスが決まるからデスパッチが高速"
なんて書かれていますね。virtualがデフォじゃないとか
Createがvirtualじゃないってのも決まっているのかも知れず。

ちょっと違う疑問なんだけど、overrideって指令は
"上書き""仮想"っていう二つの意味をもってんでしょうか?
TMyClass1 = class
 procedure Method; virtual;
end;

TMyClass2 = class(TMyClass1)
 procedure Method; virtual; //※
end;
override使わなくても構文としては、
これで十分だといっつも思うんだけど…


126 :デフォルトの名無しさん:02/12/01 14:15
>>119
じゃあデストラクタはって言われるな

127 :Delフサギコ ◆A6VzDeLphI :02/12/01 14:27
[Delphi:72797] Re: Delphi .NET Preview が更新

   ∧,,∧   / 見逃してたんだけど、ここみると、
  ミ,,゚Д゚彡<  .NET版は
   ミ つI)  \ 今のところすべてのコンストラクタが
           仮想コンストラクタになっている
           とか、、、、

128 :デルファイの名無しさん:02/12/01 14:52
>>125
スペルミスした時のことを考えてみてください。

129 :デフォルトの名無しさん:02/12/01 14:58
>>125
違う。ひょっとしてdynamic を忘れていないかい?
overrideはあくまで "上書き"の意味しか持っていない
"仮想"には動的仮想 dynamic と 仮想 virtualの2つがあるけど、
それを指定/変更できるのは宣言元の継承元クラスのみ。
よって継承先がどちらの仮想指定であったか意識する必要はない

130 :Delフサギコ ◆A6VzDeLphI :02/12/01 15:18
    !      _____________
   ∧,,∧    /
  ミ,,゚Д゚彡 < まあ、ダイナミーック!
  ミ.,,O),,ミ   \
 @ミ   ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪ すっかりと忘却のカナタ
    ここはひとつ、dynamicは廃止の方向でとはいきませんか?

>>128
実は、ここのコードでデストロイのつづりを間違って
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1035246186&res=10
(内緒)


131 :デフォルトの名無しさん:02/12/01 17:41
>>130
どうだろうな。VCLの中ではそれなりに意味のある使われ方してるらしいし。

132 :デフォルトの名無しさん:02/12/01 18:34
reintroduceしる

133 :デフォルトの名無しさん:02/12/01 22:03
次は、Dynamic がなぜ導入されたかかな?
誰か DelWiki に、トピック作れや。

134 :デフォルトの名無しさん:02/12/01 22:11
dynamicなんてVCL級の大規模なクラスライブラリでも作らない限りは知らなくていいだろ。

135 :デフォルトの名無しさん:02/12/01 22:38
しかしヘルプに「動的メソッドを使用するとコードのサイズを最適化できます。」
なんて書いてあるので、深く考えずに使う奴が多数かも。

136 :デフォルトの名無しさん:02/12/02 04:56
> ここはひとつ、dynamicは廃止の方向でとはいきませんか?
逆にdynamicを廃止するとVCLのメモリ使用量が増大すると何度言わせれば・・・

137 :デフォルトの名無しさん:02/12/02 08:54
VCLのdynamicを全部virtualに書き換えて試してみろ!!

138 :デフォルトの名無しさん:02/12/02 10:40
Virtual vmtにそのままメソッドポインタが格納されるので、検索が無く高速
     当然virtualを多用すれば vmtが巨大になる。

Dynamic System.GetDynaMethodを見ると、継承された dynamic method index
     だけのテーブルを作り、vmtにはそのテーブルだけを登録する。
     呼び出す都度、indexがあるかどうかみつかるまで順検索する。
     無ければさらに親も順検索する

139 :デフォルトの名無しさん:02/12/02 21:57
overrideがあるのは、偶然、同名同引数の仮想関数を新たに定義してしまうのを
防ぐためじゃないの。

140 :デフォルトの名無しさん:02/12/03 02:07
del6 personalをxp proで利用しているのですが、F9で実行しよう
とすると、フリーズするときがあります。これは、↓の
http://www.borland.co.jp/delphi/devsupport/d6issues.html
Windows XP における不安定な動作について
と解釈していいのでしょうか?

また、その際、互換モードの適当なOSでおすすめはありますか?

141 :デフォルトの名無しさん:02/12/03 02:33
その情報は古い。
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=069593
互換モードは関係ない。

142 :デフォルトの名無しさん:02/12/03 03:19
質問です。
下のようなコードを書いた場合、THogeHoge型の内容に関係なくOKと表示されますか?

var
 A: array[0..100]of THogeHoge;
 P: ^THogeHoge;

begin
 P := @A[0];
 Inc(P,23);
 if P^ = A[23] then
  ShowMessage('OK')
 else
  ShowMessage('NG');
end;

143 :デフォルトの名無しさん:02/12/03 03:28
THogeHogeが=で比較できるならOKでは。
つか試せよ。

144 :Delフサギコ ◆A6VzDeLphI :02/12/03 08:54
 ミ,,゚Д゚ミつ

>>141さんのリンク先のやり方は
私のところでは激しく効果ありまいた。
WinXPで不安定になってる人はお試しあれ。

145 :デフォルトの名無しさん:02/12/03 09:48
そういやD1の頃から IME 周りでトラブルがあるよなあ・・・・まあ勝手に仕様変更するMSが悪いんだろうが

146 :デフォルトの名無しさん:02/12/03 10:07
>>145
たとえば?
既知の問題は片付いていると思うけど。

147 :デフォルトの名無しさん:02/12/03 12:49
overrideって、優先の意味では。。。
overwriteなら上書きだけど。。。

148 :970:02/12/03 13:37
ちょいと質問

同じユニットで定義した
親子クラスがあるとします。

子クラスのすべてのメソッドから親クラスのprivate,protected
が呼び出せるのはいかがと思いますが。
皆さんは不自由していませんか?



149 :デフォルトの名無しさん:02/12/03 13:43
>>皆さんは不自由していませんか?

ぜんぜん。かえって便利。
ユーザサイドは関係なく、プログラマサイドの問題だから
呼び<だせる>ことに不自由するって感覚が理解できない

150 :148です:02/12/03 14:07
>>149さんお答えありがとうございます。
でもほかのユニットになると厳しくなるのです。
これがよくわからない。


151 :デフォルトの名無しさん:02/12/03 14:08
根本的にクラスの設計ができないんでしょ > 150

152 :デフォルトの名無しさん:02/12/03 14:24
>でもほかのユニットになると厳しくなるのです。
何が厳しいのか書いて。

153 :148です:02/12/03 14:25
>>149,151さま
そうかもしれません。ありがとうございました。

154 :デフォルトの名無しさん:02/12/03 14:26
同一ユニット内のクラスは互いに関連することが多い。
関連するクラス間ではデータのやり取りが他のクラスと比べて頻繁に行われる。
データのやり取りをする為にはプロパティ・アクセスメソッドを公開しなければならない。
特定のクラスにのみ公開する場合でもpublicにすると
全てのクラスからアクセスできてしまうので都合が悪い。
このような場合同一ユニット内で相手のクラスの中を
直接参照することで無駄なアクセサの公開を避けることができる。

155 :デフォルトの名無しさん:02/12/03 14:31
unitっていうのを クラスの親玉みたいなものだって考えたらいいんじゃないの?
同じユニット内で定義されてる関数やクラスはみんなお友達って事で



156 :デフォルトの名無しさん:02/12/03 14:42
C++から来ると焦るんだよなぁ。
なんでprivateが呼び出せるんじゃーと叫んだことがあった。
main部とクラス定義を同じファイルに書いてたときに。

157 :デフォルトの名無しさん:02/12/03 14:47
auto friend機能だよ。

158 :デフォルトの名無しさん:02/12/03 14:47
friend 指定使ったことある? > 156

159 :148です:02/12/03 14:47
154-155>>thx
すみませんです。
 >>でもほかのユニットになると厳しくなるのです
ではなく
 ユニットが異なると普通(マニュアル)の規則が適用される。
です。
あと、クラス参照プロパティ参照があぶないです。

160 :デフォルトの名無しさん:02/12/03 14:58
危なくない機能なんて言語には存在しないんだから
仕様を理解した上で慣れるしかないよ。
まさか一クラス一ユニットにするわけにもいかないだろ。

161 :148です:02/12/03 14:59
>>157


162 :デフォルトの名無しさん:02/12/03 15:12
>>158
あるよ。
今は知ってます。auto friendも。

ちょっとしたコンソールプログラム作って挙動を試すときが多いので、
auto friendはそのときは邪魔だったりする。

163 :148です:02/12/03 15:14
156>> さんとおなじなのです
だけどPascal or Algol は好きだ。

164 :デフォルトの名無しさん:02/12/03 15:20
friend が C++ の仕様の中でも毛色が変わっていることは知っているかな?
かつ、friend が存在しないと困る局面も知っていると思う。

Delphi でもそういうこと。

165 :デフォルトの名無しさん:02/12/03 15:25
毛色が変わっているものが標準で有効なのはおかしいだろ。

166 :デフォルトの名無しさん:02/12/03 15:28
C++ でもバンバン使っているだろ?

167 :デフォルトの名無しさん:02/12/03 15:30
必要ないときは使いません。

168 :148です:02/12/03 15:33
>>164 さまありがとうございます。
でもファイルスコープでfriendとおなじにするとい
うのはいかがなものかと思われます。
------
わたしはpascal好きです


169 :デフォルトの名無しさん:02/12/03 15:35
はいはい。屁理屈言うなら終わり。

cout << someVariable;

とかもつかわないのか。

170 :デフォルトの名無しさん:02/12/03 15:39
>>169
屁理屈はやめたほうがいいよ。
cout << someVariable; なんてfriendと関係ない話を出すなんてね。

171 :デフォルトの名無しさん:02/12/03 15:40
これってObject Pascalで最もセンスを感じさせる仕様だと思うよ。
C#でもより明示的に取り入れられてるし。

172 :148です:02/12/03 16:01
えーと...(すみません)
私が考えているのは他人の実装を考えたくないからなんです。
つまり、ひとつのファイルの中で完結したい。


173 :デフォルトの名無しさん:02/12/03 16:31
>>148
なんですか。これ?
http://pc3.2ch.net/test/read.cgi/tech/1037987061/908-

174 :148です:02/12/03 16:40
やっぱりDelphiの方々にはfriendは受け入れられない。
悲しいことです。さよおなら..


175 :デフォルトの名無しさん:02/12/03 17:48
さようなら。もうこないでね >> 148です

176 :デフォルトの名無しさん:02/12/03 18:26
このやり取りは何なんだ?沸け和か乱

177 :デフォルトの名無しさん:02/12/03 19:01
わたしわじゅうぶんわかっている。
みんなもわかってあげなければにほんのあしたはないのだ。

178 :デフォルトの名無しさん:02/12/03 19:29
今日の午後あたり、ム板全体に吉外の風が吹いたらしい。

179 :デフォルトの名無しさん:02/12/03 23:08
窓枠を用意して、窓の外の景色を描画するとします。
このとき、窓の外の風景をCreateしてから窓枠をCreateし、Transparent指定すると
ちょうど風景が透けてイイ感じになりますよね。

が、風景を更新しようとすると窓枠のほうが奥に行ってしまう・・・。
ここで、重ねる順番(Zオーダーってヤツでしょうか)について疑問が出たのですが、
Createした順番に重なっていくような印象なのですが、明示することはできるのでしょうか?

180 :デフォルトの名無しさん:02/12/03 23:18
>>179
そういう場合は自前で描画する方を選ぶもんだと思う

181 :デフォルトの名無しさん:02/12/03 23:19
【まさかの】ひろゆきブチキレ【降臨】

とうとうキレさせてしまった過疎板の住人達。
あの一言さえなければこんなことにはならなかったのに。。。
目の前で忽然と消えていくスレ達。
一つのスレに集中(むしろ、おいやられていく)住民達。
ひろゆきVS住民
無論、俺は面白半分w

問題の発言
http://choco.2ch.net/test/read.cgi/bobby/1038742045/119

問題のスレ
http://choco.2ch.net/test/read.cgi/bobby/1038742045/

182 :デフォルトの名無しさん:02/12/03 23:44
Object Pascalってどうやって勉強しました?
リファレンスだけ?

183 :デフォルトの名無しさん:02/12/03 23:57
1.入門書を全部読む
2.分厚い解説書の文法の章を全部読む
3.リファレンスを全部読む
これで完璧

184 :デフォルトの名無しさん:02/12/04 00:18
>>183
コードを一行も書かないんだね

185 :デフォルトの名無しさん:02/12/04 00:21
>>182
Delphi言語・・・と揚げ足を取ってみる。

186 :デフォルトの名無しさん:02/12/04 01:04
>>182
言語自体はリファレンスだけ。

187 :デフォルトの名無しさん:02/12/04 01:13
>>180
コンポーネント内で描画させようとすると手前にボーンとなるんですよ(;´Д`)
自分でやるしかないのかな・・・。

188 :デフォルトの名無しさん:02/12/04 01:15
ひょっとして TImage つかってるの?
それは駄目

189 :デフォルトの名無しさん:02/12/04 01:39
Delphi 6 Personalの使用者登録ページが開けないのですが、、、
これは一時的なことなのでしょうか?

ttp://www.borland.co.jp/delphi/personal/


190 :デフォルトの名無しさん:02/12/04 02:01
しょっちゅう落ちてるよ。
メール出さないと気づいてくれないのかも。

191 :デフォルトの名無しさん:02/12/04 02:10
>>182
Turbo Pascalとの差分のみ、ヘルプとリファレンスから。
Turbo PascalはPascal原典とA+D=PとTurbo Pascal本多数。

192 :デフォルトの名無しさん:02/12/04 02:16
>>188
TAviimageとゆーモノでつ・・・。。・゚・(ノД`)・゚・。

193 :デフォルトの名無しさん:02/12/04 02:21
>TAviimageとゆーモノでつ・・・。。

なんだか分からないが、TImage 系なら、描画しようとしたとき
ポーンと手前に来るんじゃなくて、たんにCanvasにアクセスしたので
不透明なビットマップができるだけじゃないの。

194 :デフォルトの名無しさん:02/12/04 11:09
組込み用 C ソースの検証をBCBでやってたんだけど
ライブラリ依存とか面倒になって、モジュール単位に閉じる方が楽だから
だんだんと関数ポインタと構造体ポインタを使いまくるコードになってきた。

これでいいのかな?
まあ、一人でやってるからいいんだけど、他人が見たら嫌だろうなあ


195 :デフォルトの名無しさん:02/12/04 11:38
BCB の話は C++Builder相談室 でどうぞ。

196 :デフォルトの名無しさん:02/12/04 11:39
ボタンクリック→
CALC.EXEを起動したいんですけど、
どうすればいいですか?

197 :デフォルトの名無しさん:02/12/04 11:45
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=CALC+%E8%B5%B7%E5%8B%95+Delphi&lr=


198 :デフォルトの名無しさん:02/12/04 12:31
>>193
描画メソッドを見ると、Canvas.Drawで描画していました。
ということは、奥をDrawすると手前のTransparent越しに見えてたものが
不透明になってしまうってことなのかな・・・。

コントロールの順番は不変で、透過してたら見え方はずっとそのままって
観念だったので混乱してまつ...(汗

199 :524:02/12/04 14:04
ツールバーのボタンに画像を表示させたいのですがどうすればいいでしか?

200 :デフォルトの名無しさん:02/12/04 14:46
Delphi相談室その8に接続中...
しばらくお待ちください...
接続完了!!...
相談中...


201 :デフォルトの名無しさん:02/12/04 14:46
DirectX !!

202 :デフォルトの名無しさん:02/12/04 15:12
>>198
フォームやパネルが再描画が必要になれば、その上のコントロールが描画される
その時の順番が、たぶんキミが言ってるZオーダ

で、それぞれのコントロールに直接描画しろと命令を送ると、当然そのZオーダは無視されてしまう。

だから、そういうふうにしたい場合は
1、フォームやパネルをDoubleBufferd:=true;にしておいて、
  それぞれのコントロールにではなくフォームにInvalidateを送る

2、上のTransparentに設定した窓枠からリージョンを取り出して
  リージョンでクリップして描画させる

どちらかの戦略を取レ

203 :デフォルトの名無しさん:02/12/04 15:16
>>199
http://www.google.co.jp/search?&q=ImageIndex+toolbutton&lr=lang_ja

204 :デフォルトの名無しさん:02/12/04 16:28
>>202
なるほど・・・
1はちょっと頭不足で理解が追いつかないので、2で。

1) 透明指定した部分を取り出して保存し
2) その部分だけに描画をかける
ってことですね。サンプルを探しながら挑戦してみます。

205 :デフォルトの名無しさん:02/12/04 16:35
Delphi 6 Personalです。
簡単にグラフや、散布図を書けるコンポーネントを色々探しているのですが、
なかなかこれといったものが見つかりません。
そこで、皆さんにお勧めのグラフ用のコンポーネントをお聞きしたいのですが。

206 :Delフサギコ ◆A6VzDeLphI :02/12/04 16:48
 ミ,,゚Д゚ミつ マヅはTChartのデモをみてから。

207 :デフォルトの名無しさん:02/12/04 18:19
Tchartってどこにありますか?
ちょっと分からなかったので・・・

208 :Delフサギコ ◆A6VzDeLphI :02/12/04 18:27
 ミ,,゚Д゚ミつ、 ぢやあ、Personalには無いんだ、、、、

209 :デフォルトの名無しさん:02/12/04 18:44
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. Vミ,゚Д゚ミ/
 (_フ彡        /


210 :デフォルトの名無しさん:02/12/04 18:46
>>205
お金出しても良いなら TChartPro (http://www.teemach.com)


211 :デフォルトの名無しさん:02/12/04 20:07
こんにちは。
C++のヘッダをDelphiにコンバートしてるのですが、
typedef structの構造体にメンバ関数が入ってまして、
それをDelphiのrecord型に入れられるのでしょうか?
できましたら、サンプルなどをいただけたらありがたいです。

212 :デフォルトの名無しさん:02/12/04 20:23
>>211
> こんにちは。
こんばんわ。

213 :デフォルトの名無しさん:02/12/04 20:25
>>208
戸田>>>>>>>>>>>>>>>>>>>>>>フサ

214 :デフォルトの名無しさん:02/12/04 20:35
>211
スタックなobjectかヒープなclassに置き換え。
recordでは無理。

215 :デフォルトの名無しさん:02/12/04 21:24
>>214
それは、TObjectから新しいクラスを派生させて、そこに
メンバ関数を記述するということですか?

216 :デフォルトの名無しさん:02/12/04 22:05
ヘルプで「オブジェクト型」を見たまえ

type
 Hoge = object
  :
 edn;

217 :デフォルトの名無しさん:02/12/04 23:42
>>211
メンバ関数が入ってるという構造体を見せて

c++ の場合 typedef しなくても構造体は自動的にtypedefされるので
もしかして メンバ関数ではなくて 単なる関数ポインタでないの?

218 :デフォルトの名無しさん:02/12/05 00:53
>>216
ヒントありがとうございます。ヘルプと格闘してみます。

>>217
こんな感じです。
typedef struct {
void*(*get_ycp_ofs)( void *editp,int n,int ofs );
void*(*get_ycp)( void *editp,int n );
intreserve[6];
} EXFUNC;

219 :デフォルトの名無しさん:02/12/05 00:57
Timagelistで、n番目にbitmapが格納されているかを確認する方法はありますか?
GetBitmap(n, hoge) して、hogeがnilかどうかを見るしかないのかな・・・。

220 :デフォルトの名無しさん:02/12/05 01:27
Count

221 :デフォルトの名無しさん:02/12/05 04:36
>218
それは関数ポインタ

222 :質問者:02/12/05 05:44
TListViewやTTreeViewでのDrag処理でメモリリークが発生して困ってます。

詳細:
DragModeをdmAutomaticにして、さらにOnDragOverで、Acceptをtrueにしてやる。
これを実行し、ドラッグしたまま、TreeViewやListViewの中と外をいったりきたりさせると、使用メモリ量がみるみる増えていきます。
現象は、WinXpでタスクマネージャ使って確認しました。GDIオブジェクトもリークしてるみたいです。
同じexeを2000や9xで動かしても、現象は起きません。

Delphiのバージョンは6+update2です。
Delphi6はXpに正式対応じゃないみたいなので、ひょっとしたらDelphi7では直ってるのかも知れませんが、手元に6しかないので確認できません。

どなたか回避策とかご存知ないですかね?
常駐型のアプリなものでリークすると困るんです・・・。

なお、再現用のソース一式とDelphi6でコンパイルしたexeは下記に置いてます。
ttp://www57.tok2.com/home/papers/outbox/LeakTest.zip

223 :デフォルトの名無しさん:02/12/05 05:47
次スレはここです。
http://science.2ch.net/test/read.cgi/future/1022864257/l100

224 :デフォルトの名無しさん:02/12/05 05:53
> どなたか回避策とかご存知ないですかね?

XP対応のバージョンをつかうか、OSを換える

225 :デフォルトの名無しさん:02/12/05 06:02
XP で、ビジュアルスタイルを有効にしているとか無いかな?

226 :デフォルトの名無しさん:02/12/05 06:04
>>222
つい最近、どこかで似たような質問を見かけたんだが...

227 :デフォルトの名無しさん:02/12/05 06:24
D6 で確認. Win98 では使用メモリ量に変化が無いが XP だと増えていく。
D7 でも同様。


228 :デフォルトの名無しさん:02/12/05 06:26
過去ログ、調べたか?

229 :デフォルトの名無しさん:02/12/05 07:45
>>218
type TExFunc=record
 get_ycp_ofs:procedure (var editp; n,ofs:Integer );
 get_ycp:  procedure (var editp: n:Integer );
 reserve:array[0..5]of integer;
} EXFUNC;

var editp が嫌ならポインタにしたらいい

230 :デフォルトの名無しさん:02/12/05 08:35
>>218
今回は関数ポインタだから関係ないけど、
C++では struct と class はほぼ同じ意味だと理解してるか?
デフォが public か private かの違いだけで struct でもメンバ関数は持てる。

231 :デフォルトの名無しさん:02/12/05 09:06
質問です
タブ型のメモ帳作ろうと思ってこんなコードを書きました。

procedure TForm1.newtab(filename: string); //新しいタブ
var tabsheet:TTabSheet;
var memo:Tmemo;
begin

tabsheet:=Ttabsheet.Create(PageControl1); //←この辺と
memo:=Tmemo.Create(tabsheet); // ←この辺

  memo.parent:=tabsheet;
  memo.Align := alClient;
if filename<>'' then tabsheet.Caption:=ExtractFileName(filename);

 tabsheet.PageControl:=PageControl1;

PageControl1.ActivePageIndex:=PageControl1.PageCount-1;

if filename<>'' then
begin
 memo:=Tmemo(PageControl1.ActivePage.Controls[0]);
 memo.Lines.LoadFromFile(path+CurrentDir+listbox1.Items[ListBox1.itemindex]);
end;

end;

これって同名のインスタンスがいっぱいできてるって事?( tabsheet と memo)
設計時だと作れませんけど、同名のインスタンスは作っても問題ないですかね?


232 :デフォルトの名無しさん:02/12/05 09:29
心配ならNameを書き換えればいいだけ。デフォルトは空。

233 :デフォルトの名無しさん:02/12/05 09:40
Delphiでバイナリエディタって作れるの?

234 :デフォルトの名無しさん:02/12/05 09:42
>>233
バイナリエディタ用コンポーネントは標準ではありません。

235 :デフォルトの名無しさん:02/12/05 09:45
>>234
じゃぁ、無理ってこと?

236 :デフォルトの名無しさん:02/12/05 09:53
>>233
ttp://www.nx.sakura.ne.jp/~elysium/software/pwtr/

237 :デフォルトの名無しさん:02/12/05 09:58
それだけは勘弁してください(´д`;)

238 :デフォルトの名無しさん:02/12/05 10:02
使えと言ってるつもりはないから、大目に見てくれw

239 :デフォルトの名無しさん:02/12/05 10:10
>>233
○○って作れるの?という問いの答えは
作れるけどお前じゃ無理、と決まってます。

240 :デフォルトの名無しさん:02/12/05 10:22
新しいOSや言語を学習するときにはとりあえず16進ダンププログラムを作る
ってたのは「プログラミング Windows」の Charles Petzold だっけ

241 :デフォルトの名無しさん:02/12/05 10:37
>>240
だったかな?

俺はマンデルブロ集合を描くプログラムが定番だったな。

242 :デフォルトの名無しさん:02/12/05 10:40
>Delphiでバイナリエディタって作れるの?

バイナリエディタを作ることが目的なら、自分で作ることを考えては?
少なくとも Delphi IDE と同じ程度のものを作ることは可能です。

バイナリエディタを使いたいのが目的なら、バイナリエディットに特化したコンポーネントを
入手し、使うことができます。
http://www.woodybells.com/binedit/
こんなのはどうですか?

バイナリエディタは他のことをやるための道具だ。というのであれば
市販品/シェアウェア/フリーソフトを探してもよいでしょう。
>>236 さんの提示した製品でもよかろう。

243 :デフォルトの名無しさん:02/12/05 11:50
236が言いたいのは、PWがDelphiで作られてるって事だろ。

244 :デフォルトの名無しさん:02/12/05 12:20
>>243
ふーん。そうなんだ。

245 :デフォルトの名無しさん:02/12/05 13:58
変数のread only propertyにたいして@で参照すると書き込めるのは
なぜでしょう。

246 :デフォルトの名無しさん:02/12/05 15:00
@で参照したからです

247 :質問者:02/12/05 15:00
>>226
すみません。ちょっと前に他所にも書き込みました。

>>227
D7でも同様ですか。う〜む…


248 :245:02/12/05 15:06
247>>さんへ
VCLをだますのにかなり使っていました。
最近、これではいかんと思うようになりました。


249 :デフォルトの名無しさん:02/12/05 16:12
>>245
Win32 アプリケーションには Java/.NET などのようにメモリセキュリティはないんだから、
メモリアドレスさえ取得できれば読み書きは可能。つーか、そうしてもらわないと困る。


250 :デフォルトの名無しさん:02/12/05 16:13
>>247
もちっと調べてみるけど、MFC/VC6 でも怪しい動きをする。
調査が必要だ

251 :デフォルトの名無しさん:02/12/05 16:44
乱数を発生させたいのですが、Randomを使うと毎回同じ順で数値が出てくるのですが、
完全にランダムで決定させる方法はありますか?

252 :デフォルトの名無しさん:02/12/05 16:53
最初に一回だけRandomizeを呼べ

253 :デフォルトの名無しさん:02/12/05 17:04
>>252
ありがとうございました!m(_ _)m

254 :デフォルトの名無しさん:02/12/05 17:17
なんでヘルプ読まないんだろ…


255 :デフォルトの名無しさん:02/12/05 18:11
>Delphiでバイナリエディタ

適当にbinフォルダにあるコンポーネントをインストールしたら面白いよ。
確かメモリダンプコンポーネントがどこかにある筈


256 :デフォルトの名無しさん:02/12/05 19:10
バイナリエディタ作りたいなら、
TFileStreamあたりを見るとよい。

TStream系が使えるようになるとだいぶ技術の幅が広がるよ。

257 :デフォルトの名無しさん:02/12/05 20:28
const
 ABC = (['A', 'B', 'C']);

この ABC の要素数である3を得るにはどうしたらいいでしょうか?


258 :デフォルトの名無しさん:02/12/05 22:47
これって集合型になるの?だったら要素数という概念自体がなんか変かも.

この括弧て意味ある?

259 :257:02/12/05 22:59
こんな事がしたかったの
s: string;

 if (s[i] in ABC) then
  raise Exception.Create(ABC + 'が入ってます');


260 :257:02/12/05 23:05
×が入ってます
○に入ってます


261 :デフォルトの名無しさん:02/12/06 00:36
コンコン!入ってます!

262 :デフォルトの名無しさん:02/12/06 05:01
const 定義には型宣言が存在しません。だから直接には型情報およびそれに関連する
値を取得することはできません。

変数に代入するか、または型付定数、初期化済み変数を使うか。


263 :デフォルトの名無しさん:02/12/06 10:09
>259
その用法でなぜ要素数が欲しい?
sの文字数分そうやってチェックするだけだろ?

つまり、集合型の要素の最大数の求め方は俺にはわからん訳だが.

264 :ちょっと遅いけど:02/12/06 10:57
const ABC = 'ABC';
if (Pos(s[i], ABC) > 0) then
  raise Exception.Create(ABC + 'が入ってます');


265 :デフォルトの名無しさん:02/12/06 11:12
>>246
どちらにしろ、要素数は必用ないな。

266 :257:02/12/06 13:52
こんなふうに _INVALIDCHARFILENAME にキャラクタを追加するだけでokにしたかったの
const
 _INVALIDCHARFILENAME = ['\', '/', ':', ',', ';', '*', '?', '"', '<', '>', '|', '+'];

function ValidateFileName(const Name: string): Integer;
var
 i: Integer;
begin
 for i:=1 to Length(Name)-1 do
 begin
  if (Name[i] in _INVALIDCHARFILENAME) then
  begin
   Result := i;
   Exit;
  end;
 end;

 Result := 0;
end;

if (0 < ValidateFileName(FileName)) then
begin
raise Exception.Create(_INVALIDCHARFILENAME + 'はファイル名に使えません');
end;
で、↑ここで文字列にする必要があるから要素数が必要 (無理だけど)
 SetLength(_INVALIDCHARFILENAME, Length(_INVALIDCHARFILENAME));
 for i:=0 to High(_INVALIDCHARFILENAME) do
  s[i] := _INVALIDCHARFILENAME[i];

Pos なんていやん


267 :257:02/12/06 13:54
×SetLength(_INVALIDCHARFILENAME, Length(_INVALIDCHARFILENAME));
○SetLength(s, Length(_INVALIDCHARFILENAME));


268 :デフォルトの名無しさん:02/12/06 16:05
const
 _INVALIDCHARFILENAME = ['\', '/', ':', ',', ';', '*', '?', '"', '<', '>', '|', '+'];
_INVALIDCHARFILENAMEのメモリイメージを理解すれば自動で文字列化なんて無茶なことは言わなくなるよ。無難に(Ansi)Pos方式にしとけ。

  if (Name[i] in _INVALIDCHARFILENAME) then
Nameにsjisが混入することも考慮しとけ。


269 :257:02/12/06 17:09
>_INVALIDCHARFILENAMEのメモリイメージを理解すれば自動で文字列化なんて無茶なことは言わなくなるよ。
何を読めばイメージが掴めるでしょうか?

>Nameにsjisが混入することも考慮しとけ。
気づきませんでした。ありがとうございます。


270 :デフォルトの名無しさん:02/12/06 17:57
constで集合定義するならエラー用の文字列も定数で作ったら?
そんなことで一日悩んだわけじゃないだろうけど、時間の無駄っぽい

271 :デフォルトの名無しさん:02/12/07 07:12
>>266
その使い方なら逆に
INVALIDCHARFILENAMEStr='\/:, , ;*?"<>|+';
と文字列にしてそれを集合型にするのがいいのじゃないの?

272 :デフォルトの名無しさん:02/12/07 07:33
初期化節で処理したらいいんじゃないの?


const _INVALIDCHARFILENAME = ['\', '/', ':', ',', ';', '*', '?', '"', '<', '>', '|', '+'];
var _INVALIDCHARFILENAMEs:string;

・・・他の処理・・・

var c:Char;
initialization
_INVALIDCHARFILENAMEs:='';
for c:=Low(Char) to High(Char) do begin
if c in _INVALIDCHARFILENAME then _INVALIDCHARFILENAMEs:=_INVALIDCHARFILENAMEs+c;
end;
end.


273 :デフォルトの名無しさん:02/12/08 01:13
Indy9をインスコしてIdHTTPを使おうとすると
http://lounge.dip.jp/pl/upb/data/test.png
こんなエラーが出ます。
何がまずいのでしょうか?
コードは何も書いてません。

Del6 XPHomeSP1

274 :デフォルトの名無しさん:02/12/08 01:15
↑直リンスマソです…

275 :デフォルトの名無しさん:02/12/08 02:45
>>273 想像だけど、dfmファイルが壊れているんじゃない?
フォームをテキストで表示して、確認してみ

276 :デフォルトの名無しさん:02/12/08 08:47
>>273

Indy9では HTTP.Requrst.ProxyPortとか、HTTP.Requrst.ProxyServerは
HTTP.ProxyParam.ProxyPort、HTTP.ProxyServerに変更になっている
はず。

サンプルプログラムは、この辺を直してやらないとコンパイルできない
けど、コードは書いてないんだよね。

もしかすると Indy8がうまくアンインストールされてないんじゃない?
Windows\system32フォルダに Indy8のindy60.bplが残ってるとか。



277 :デフォルトの名無しさん:02/12/08 13:02
>>275
一応壊れてはないみたいです。

>>276
とりあえずindy60.bplで検索するとC:\Program Files\Borland\Delphi6\Binにありましたが、
それを開いてみるとちゃんとパスは全てC:\Program Files\Indy\Sourceになっていました。


278 :デフォルトの名無しさん:02/12/08 14:21
>>273 イマイチ状況がわからないな。
"コードは何も書いてません" ってのは、新規プロジェクトの
フォームにIdHttpをのせて実行したら、上記のエラーが出るという事?
デバッグで追い掛けてどのタイミング/どの行で例外が発生するか
わからない?

279 :ねこま:02/12/08 15:30
フォームにのっかっていたコンポーネントの published プロパティが変更されただけでしょう.
設計時にそのフォームを開けば,無くなったプロパティを検出して修正を促してきます.


280 :デフォルトの名無しさん:02/12/09 00:04
あるプロセスが起動しているかをチェックして、もし消滅していたらWindowsをシャットダウンするという
コードを書きたいのですが・・・。(処理終了→自動終了するアプリと一緒にWindowsも終了させたいという魂胆です)
シャットダウンは標準APIでいいとして、

1) 特定プロセスに割り当てられたアドレスを知る方法
2) それが生きているかを調べる方法

があったら教えてください。(ノД`)

281 : :02/12/09 00:15
(´-`)。o ○ (シャットダウンして欲しくないなぁ… どうして「終了タイマー」
みたいなフリーウェアが氾濫してるんだろう?)

282 :デフォルトの名無しさん:02/12/09 00:33
関係ないけど、.NETServer2003ってさ、手動でシャットダウンするときに
いちいち理由を選ばないといけないのよ。(ハードウェアメンテナンスとか)

まあサーバだし、うちで3ヶ月立ち上げっぱなしで、とくに不具合ないからいんだけど。


283 :デフォルトの名無しさん:02/12/09 01:22
以下のような TBitmap を戻り値にした function を作って

 function AAA(pBmp:TBitmap):TBitmap;
 var
  tmpBmp:TBitmap;
 begin 
  tmpBmp:=TBitmap.Create;
  try
   【処理】
  finally
   result:=tmpBmp
  end;
 end;

関数を呼ぶ時にには、呼ぶ側でCreateとFreeをやっています、
 bmp:=TBitmap.Create;
 bmp:=AAA(bmp);
 bmp.free;

この時に、
 bmp:=TBitmap.Create;
 bmp:=AAA(bmp);
 bmp:=AAA(bmp);
 bmp:=AAA(bmp);
 bmp.free;

こんな感じで連続して呼び出しても一応処理は出来ているみたいなのですが
bmpのfreeが1回しかないわりに、関数中では毎回tmpBmp:=TBitmap.Create;
が走っていてなにか釈然としないものがあります、大丈夫なのでしょうか?

そもそも、関数の最後に上の例で言えば
tmpBmpをFreeしちゃいけない理由が判る方、教えて下さいお願いします。

284 :デフォルトの名無しさん:02/12/09 01:41
> 大丈夫なのでしょうか?

大丈夫じゃない!

> tmpBmpをFreeしちゃいけない理由

result に代入したあとなら Free できるが解決にはならない

そもそも function AAA(pBmp:TBitmap):TBitmap; こんな形
の関数が必要なのかね? 【処理】の内容によっては引数の加工で
済む場合がほとんどだと思うが。





285 :デフォルトの名無しさん:02/12/09 01:44
234 はオブジェクト参照というものが分かってない

>bmp:=TBitmap.Create;
>bmp:=AAA(bmp);

なぜコンストラクタを実行する必要があるの?



286 :デフォルトの名無しさん:02/12/09 01:44
@あるフォルダ内の全ファイル名を配列で取り込む
A実行ファイルを引数つきで実行する。

にはどういう関数を使えばいいですか?

287 :デフォルトの名無しさん:02/12/09 01:45
×234
○283

288 :デフォルトの名無しさん:02/12/09 01:48
何でもかんでも「関数」って言えばいいっても(略)

289 :デフォルトの名無しさん:02/12/09 01:51
>>286
@ FindFirst() と FindNext() ヘルプの例を参照
A ShellExecute() or CreateProcess() or WinExec() API →google

290 :デフォルトの名無しさん:02/12/09 01:52
>>288
スマソ
>>289
ありがとうございました

291 :デフォルトの名無しさん:02/12/09 01:52
>> result に代入したあとなら Free できるが

ごめん、まちがい、Free できない

292 :デフォルトの名無しさん:02/12/09 02:00
大丈夫でない理由

bmp:=TBitmap.Create;
bmp:=AAA(bmp); ← ここで上の行で作った TBitmap オブジェクトが行方不明
bmp:=AAA(bmp); ← ここで上の行で作った TBitmap オブジェクトが行方不明
bmp:=AAA(bmp); ← ここで上の行で作った TBitmap オブジェクトが行方不明
bmp.free; ← ここで上の行で作ったTBitmapだけが解放される


293 :デフォルトの名無しさん:02/12/09 02:03
つまり、4回コンストラクタを実行して、1回だけデストラクタを実行しているので
3つのオブジェクトが行方不明になる

294 :デフォルトの名無しさん:02/12/09 02:09
>>tmpBmpをFreeしちゃいけない理由

関数を書き直して

 function AAA(pBmp:TBitmap):TBitmap;
 begin 
  result:=TBitmap.Create;
   【処理】
  result.Free; ← これを実行すると返値がタコになるでしょ!
 end;


295 :283:02/12/09 02:11
ありがとうございます。>>283です。

>>284
>そもそも function AAA(pBmp:TBitmap):TBitmap; こんな形の関数が必要なのか
この関数はアルファブレンドしたり、エフェクト処理とかをする関数なので
処理済bmpが帰ってきた方が便利かと思いまして、利便性だけ考えて関数に
しただけなんですが、ここらが間違っているのでしょうか・・・。

>>285
>オブジェクト参照というものが分かってない
ごめんなさい、全く判っていません。


かなりアホなんで勉強して出直してきます。m(。。)m

296 :283:02/12/09 02:18
>>291-293
やっぱり駄目ですかBitmapで渡さない方向で
練り直します。ありがとうございました。

>>294
>これを実行すると返値がタコになるでしょ!

Free出来ないのでは、戻り値と言うか、たぶん、予想ですが、
戻そうとしている値があった場所を記憶していた値、
ポインタがfreeされて迷子になるだと認識しているのですが。

297 :デフォルトの名無しさん:02/12/09 02:20
>> 処理済bmpが帰ってきた方が便利かと思いまして

そういう考え方をするのは理解できる。でも、関数のなかでコンストラクタを
実行するのは、非常に危険だと思う。

function AAA(pBmp:TBitmap):TBitmap;
の形ではなく
procedure AAA(pBMP:TBitmap);
の形にして、渡した pBMP を加工するとよいと思う。呼び出し側で、加工まえの
画像を保持する必要があるときは、コピーをつくってからこの関数を呼ぶように
する。オブジェクトを参照する変数は、たとえば上の引数 pBMP などは、オブジェクト
自身を保持しているのではなく、それを指すポインタである、ということを理解する
必要がある。だから、引数の pBMP を加工しても、その結果は呼び出し側にそのまま
反映される。通常の参照渡し var の場合と同じ。オブジェクトを渡す場合は、var を
つけない方がよい。それ自体が参照なので。

298 :デフォルトの名無しさん:02/12/09 02:28
>> コピーをつくってからこの関数を呼ぶ

コピーの作り方の例

copyBMP := TBitmap.Create;
copyBMP.Assign(originalBMP);

299 :283:02/12/09 02:35
>>297
加工した画像は、戻り値で戻さないと駄目だ、
と思い込んでいたのが間違いって事ですね。
勉強になりました。ありがとうございました。

300 :デフォルトの名無しさん:02/12/09 02:37
>でも、関数のなかでコンストラクタを実行するのは、非常に危険だと思う。

時と場合によるけどね
Singletonの実装では常套手段だし


301 :デフォルトの名無しさん:02/12/09 02:39
>> 関数のなかでコンストラクタを実行するのは、非常に危険だと思う。
283のは駄目だと思うけど、通常は関数内でコンストラクタ実行してもいいんじゃないの?

302 :301:02/12/09 02:40
ごめん入れ違いになったみたい、時と場合によるのね。

303 :名無しさん:02/12/09 02:43
Pure P2Pの例題ソース書き込んで下さい。お願いします!

304 :デフォルトの名無しさん:02/12/09 02:47
>> 通常は関数内でコンストラクタ実行してもいいんじゃないの?

そうだね。文法的に駄目という意味ではなく、関数をブラックボックスと見なすとき
そのユーザに対して、この返値のオブジェクトは使用後必ず Free してください、
という注釈が必要になるでしょう。そのことが関数自体で完結していないので危険
だと思う。

>> Singletonの実装では常套手段だし

この場合は、むしろ呼び出し側では通常 Free は実行してはいけない、場合なのでは?

305 :デフォルトの名無しさん:02/12/09 02:47
折れにはオマイラが書いてることが理解できませむ!


306 :猛ランド:02/12/09 02:51
Indyコンポーネントの解説書とか発売されないのかなぁ。
数が増えたのはいいけど、イマイチわかりにくいな。
サンプルもDL汁じゃ寂しいよ、Indyはフリーとはいえ
日本語サイトも無いしなんとかしてよ某!

307 :デフォルトの名無しさん:02/12/09 02:54
妙に活気付いてるな・・・。
確かにIndyコンポが多いのは嬉しいけど使わないのも多いな。
TCP関連とかスレッド対応になってるし、一昔前より理解するのは難しいのかな?
>>303とか、IdTCP*使ったら作れるんじゃないかな。

308 :デフォルトの名無しさん:02/12/09 02:56
>>304
俺時々やるなぁ、インスタンス生成して返す関数。
絶対に開放を忘れないように、それとはっきりわかる関数名付けるけど。

TGraphicCreate(filename:sring): TGraphic;

とかで、画像フォーマットに合わせたインスタンスで、なおかつファイルを読み込んで
オープンするとか。
もちろんファイルオープンに失敗したら、関数内でインスタンスは破棄して例外を関数外に
投げるようにしてる。

309 :デフォルトの名無しさん:02/12/09 03:09
>> 絶対に開放を忘れないように、それとはっきりわかる関数名付けるけど。

なるほどね。ユーザが呼び出し側コード内で、コンストラクタとデストラクタの
呼び出し回数を数えられるような感じだといいかもね。ところで

TGraphicCreate(filename:sring): TGraphic;

この関数なかなか便利そう! コードさらすつもりない?

310 :デフォルトの名無しさん:02/12/09 03:20
TGraphicCreate(filename:sring): TGraphic;
var
 ext: string;
begin
 Result := nil;
 try
  ext := UpperCase(ExtractFileExt(filename));
  if ext = 'BMP' then Result := TBitmap.Create;
  if ext = 'JPG' then Result := TJPEGImage.Create;
  // 他いろいろ
  if Assign(Result) then begin
  Result.LoadFromFile(filename);
  end else begin
   raise Exception.Create(ext+'なんて拡張子は知らん。');
  end;
 except
  Result.Free;
  raise;
 end;
end;
こんな感じだったかな?
いまソースをとっさに持ってこれないんで、テキストエディタで適当にかいたから
スペルミスとかあるかも。

311 :デフォルトの名無しさん:02/12/09 03:21
Assign(Result)じゃなくてAssigned(Result)だった。

312 :デフォルトの名無しさん:02/12/09 03:24
>>310-311

ありがとう。使ってみる。

313 :ねこま:02/12/09 03:26
TPicture を使えばいいのに……


314 :デフォルトの名無しさん:02/12/09 03:32
既出だったらすいません。
Delphiってタダで使えるんですか?
なんか、どっかからダウンロードできるって聞いたんですけど。

315 :デフォルトの名無しさん:02/12/09 03:35
http://www.borland.co.jp/delphi/personal/

316 :デフォルトの名無しさん:02/12/09 03:37
Delphi6のパソ版なら ボーランドからダウンロードできんじゃないかな。

317 :デフォルトの名無しさん:02/12/09 03:43
わざわざすいません。
ありがとうございました。

318 :デフォルトの名無しさん:02/12/09 04:37
パソ版ってのでシェアウェア作って公開してもいいんですか?

319 :デフォルトの名無しさん:02/12/09 04:42
商用に該当するので不可です。>318

320 :デフォルトの名無しさん:02/12/09 04:50
シャアウェア

321 :デフォルトの名無しさん:02/12/09 04:53
>>319
まじっすか〜7の値段見たらパソ版で10000したんだけど、
多分これも無理って事はプロ版買わなきゃなんないんですよね〜68000円て無理だ(藁

322 :名無しさん@303:02/12/09 08:58
では、どうやってIdTCPを使って記述したらいいのですか?IdTCPはあまり使ったことがないので分かりません・・・。

323 :デフォルトの名無しさん:02/12/09 10:28
> Result.Free;
Freeした後、必ずnilするクセをつけろ!
FreeAndNil(Result); しる!

324 :デフォルトの名無しさん:02/12/09 11:12
>> Result.Free;
>Freeした後、必ずnilするクセをつけろ!

だめな例に教訓たれても・・・

325 :デフォルトの名無しさん:02/12/09 11:37
> だめな例に教訓たれても・・・
じゃあ、これで・・・

Freeした後、必ずnilするクセをつけろ!
FreeAndNil しる!

326 :デフォルトの名無しさん:02/12/09 15:52
>>321
1) D6パソをタダで入手。
2) 小銭貯金を始めると同時にD6パソで修行開始。
3) 金払ってくれるヤツがいる様なソフトを作れようになるのより\68000貯まる方が早い。
6) Pro版を買って小銭貯金の投資を回収。(←これが困難)

※ 速攻で売れるようなソフトがすぐに作れるようになれるような才能溢れるキミはガタガタ言わずにPro版買え!

327 :デフォルトの名無しさん:02/12/09 16:01
D6パソが普通に使えるようになってから
proでもD7でもD8でも買ったらいいんじゃないのか?
最低でもD6パソを普通に使いこなせないと、
売れるようなソフトなんて組めないだろ?

328 :デフォルトの名無しさん:02/12/09 19:00
Delphi6Personal版落としてきたんですが、EXEを実行すると
一般保護ダイアログが出てしまって、インストールできませんでした。
borlandとvectorの所から4回程ダウンロードし直して試したんですが、
全て駄目でした。環境はWindows98SEです。

ちなみにアップデートモジュールの方をダウンロードしてきて実行
するとちゃんとセットアップが実行される(本体居れてないので失敗
しますが)ので、Delphi6Personalのexe本体が壊れてる可能性が
高いと思うんですが、そういう情報はないでしょうか?

329 :デフォルトの名無しさん:02/12/09 19:16
インストーラーが吹き飛ぶの?
インストール後の Delphi IDE が吹き飛ぶの?

インストーラーが落ちるのなら Windows Installer の問題だろうから、
IE の最新版でもインストールしてみたらどうだろうか?

IDE が起動時に吹き飛ぶ場合は... なんだろうね。聞いたことが無いけど。
OS に変な/変わったモジュール入れていませんか?


330 :デフォルトの名無しさん:02/12/09 19:23
DelphiのインストーラーってWindows Installerじゃないだろ。

331 :328:02/12/09 19:41
EXEを実行した直後に、いきなり一般保護になります。
セットアップに関係する様なダイアログは出ません。

以下はエクスプローラーから
BorlandDelphiPersonalEditionJP.exeを実行した時の
一般保護の詳細です。
---------------------------------------------------------

EXPLORER のページ違反です。
モジュール : KRNL386.EXE、アドレス : 0002:00004317
Registers:
EAX=00005f5f CS=016f EIP=00004317 EFLGS=00000206
EBX=c18883d0 SS=1bdf ESP=0000b2d8 EBP=0000b2e4
ECX=0000fd96 DS=018f ESI=015d0ff6 FS=45df
EDX=c188c2b1 ES=018f EDI=015d1000 GS=0000
Bytes at CS:EIP:
67 ab fe 46 ff fe 46 ff e2 92 8a 46 ff 59 66 5b
Stack dump:
b2dc0000 015d205f c08f01ec 4380b2f4 2057458f 00000062 000001e8 0a9db326 ffff205f 458f01ec 458f01ce 062201c8 458f01ce 00750074 0001001e 458f01e8

332 :328:02/12/09 19:46
また、エクスプローラーからexeのプロパティを開き、
バージョン情報タブを選択すると同じ様に落ちます。
↑を見ても判る通り、落ちるときは起動したシェル毎落ちてしまいます。

333 :328:02/12/09 20:01
特に変なのを入てた覚えはありませんが、
しいて言うならCD革命です。
他のEXEは問題なく実行できるのに。

334 :デフォルトの名無しさん:02/12/09 20:05
アンインストールしろよ
CD革命

335 :デフォルトの名無しさん:02/12/09 20:39
D6パソを営利目的で使ってるやつなんて山ほどいるがな。
有名どころだと鷹月ぐみなのとことか

336 :328:02/12/09 20:49
原因がわかりました。
ConfigSafeという、パソコンにプリインストールされていたソフトでした。
(セットアップ前の状態を保存するソフト)
これをアンインストールしてBorlandDelphiPersonalEditionJP.exeを
実行したら正常にダイアログが表示されました。

337 :デフォルトの名無しさん:02/12/09 20:51
>>335
つまりDel厨はライセンス違反野郎ばかりってわけだね。

338 :デフォルトの名無しさん:02/12/09 20:55
>>331

そのインストールファイルを Explzhなどで開いて解凍。
そしてその解凍されたファイル群のなかのsetup.exeを
実行すればインストールできると思われ。

InstallShieldで作成されたインストールファイルを、Win9x
でプロパティ表示すると落ちる問題と同じと思う。

漏れも別のソフトのインストールで遭遇した。



339 :デフォルトの名無しさん:02/12/09 20:58
>>335
「VC++で作りますた!」と答えるのに中身はdel。
同人ゲーム界のスタンダード(藁

340 :デフォルトの名無しさん:02/12/09 21:04
違反者は潰そうぜ

341 :デフォルトの名無しさん:02/12/09 21:06
このままじゃDelphi Personal使いが全部違反者だと思われるもんな。

342 :デフォルトの名無しさん:02/12/09 21:19
鷹月ぐみなってここか?
http://www.campus.ne.jp/~ishigami/

違反者の癖に「同人ソフトで儲ける事について」なんてコンテンツがあるよ(w
http://www.campus.ne.jp/~ishigami/CREATION/COLUMN/DOUJIN.htm

343 :デフォルトの名無しさん:02/12/09 21:32


344 :デフォルトの名無しさん:02/12/09 21:34
>>同人は基本的には非営利活動
    ↓
>>同人活動というのは扱い上「非営利」であり
    ↓
利益が出ていなければ商用に該当しない
    ↓
>>ちなみに私の同人活動の儲けは、ほぼ現状赤黒ゼロです

del厨毒電波

345 :デフォルトの名無しさん:02/12/09 21:35
自分で使うツールは割れVC++、公開するツールはDelphi6Personal
違いのわかる漏れは使い分けてます

346 :デフォルトの名無しさん:02/12/09 21:40
>>278
そうです。どのタイミングで発生するかはちょっとわかりませんでした。

>>279
フォームはずっと表示してます。(意味取り違えてる?)

347 :デフォルトの名無しさん:02/12/09 21:43
>>345
なぜVC++なんかを使っているのかと

348 :デフォルトの名無しさん:02/12/09 21:43
if OpenDialog.Execute then
begin
CurrentFile := OpenDialog.FileName;
FileName := ;
end;

こうやったときに、FileNameにフルパスではなくただそれのファイル名を代入したいのですが、
どうすれば出来ますか?

349 :デフォルトの名無しさん:02/12/09 21:51
>>348
ExtractFileName

350 :デフォルトの名無しさん:02/12/09 21:57
>>349
あ、そうでした。何か前にそんなのをみたような気がしてたんで…。さんくすです。

351 :デフォルトの名無しさん:02/12/09 22:31
TabControlでタブ付きのメモ帳作るのって難しいですかね?
PageControlよりリソース消費が少ないからそっちの方がいいと思うんですけど。

352 :デフォルトの名無しさん:02/12/09 23:22
恐ろしいほど簡単です。

353 :デフォルトの名無しさん:02/12/09 23:43
タブを追加することは出来たんですが、タブの切り替え方法が分からず…
OnChangeに何を書けば良いのかさっぱり。

そこをどうか教えてくださいませんか?

354 :デフォルトの名無しさん:02/12/10 00:01
TabIndex見てメモの中身をすげ替えろ

355 :デフォルトの名無しさん:02/12/10 00:50
>>353
TabControl.Tabs.AddObjectとか
TabControl.IndexOfTabAtとか
TabControl.Tabs.Objectsとか
TabControl.Tabs.IndexOfObjectとか
を上手く使えば出来る。

356 :デフォルトの名無しさん:02/12/10 01:02
難しいか、難しくないか聞いてどーしようってんだろう?
出来ますか、出来ませんかって聞いてどーしよってんだろう?

357 :デフォルトの名無しさん:02/12/10 03:42
なんか教えてもらえるかもしれない、ということだろ?

358 :デフォルトの名無しさん:02/12/10 04:02
ゆ う き が ほ し い の さ 。 き っ と . . .

359 :デフォルトの名無しさん:02/12/10 15:41
難しいか、難しくないか / 出来ますか、出来ませんか
しか聞いていないので、たとえ答えをズバリ教えてもらってもお礼を言いません

「そこまで聞いてねーけど勝手に答えた」って感じ


360 :デフォルトの名無しさん:02/12/10 16:35
モノクロビットマップの操作って難しいというか判らん

bmp := TBitmap.Create ;
try
  bmp.Monochrome:=True;
  bmp.Width :=xs*Length(s);
  bmp.Height:=ys;
  bmp.Canvas.Font.Name:='MS ゴシック';
  bmp.Canvas.Font.Height:=ys;
  bmp.Canvas.TextOut(0 , 0 ,s);

このビットマップの0,1の反転したくて
1、これだと何故か下線しかひけない
  for y:=0 to bmp.Height-1 do begin
  q:=bmp.ScanLine[y];
  for x:=0 to bmp.Width div 8-1 do q^[x]:=not q^[x];
  end;

2、これは全くダメ
  for y:=0 to bmp.Height-1 do   for x:=0 to bmp.Width-1 do
      bmp.Canvas.Pixcel[x,y]:= not bmp.Canvas.Pixcel[x,y];

3、結局 Windows APIで
Windows.InvertRect(bmp.Canvas.Handle,rect);
  成功

でもなんで1,2だとダメなのかな

361 :ねこま:02/12/10 17:57
>bmp.Monochrome:=True;
これだけでは PixelFormat が pfDevices のままなのでダメです.


362 :デフォルトの名無しさん:02/12/11 00:15
コンソールアプリからのエラーメッセージを受け取るにはどうすればいいですか?
たとえばWinExec('copy file1 file2',SW_SHOWNORMAL);
でfile1が存在しなかったとき、カスタムのメッセージボックスにエラーを表示したいのですが。

363 :デフォルトの名無しさん:02/12/11 00:15
>>362
パイプ。

364 :Delフサギコ ◆A6VzDeLphI :02/12/11 09:54

    ∧ ∧  DelでC/Sシステムを作るとき
    ミ ゚Д゚彡 何を使うと、いいのでしょうか。..
  〜ミ,,,,uuミ
       VBでWinSockを使ってて、
      なかなか便利なので、Delでも同じ事したいです

365 :デフォルトの名無しさん:02/12/11 10:23
Client/Server と WinSock に何の関係が?

通信プロトコルレベルを作りこむ気か?


366 :デフォルトの名無しさん:02/12/11 10:26

VB 使いつづけたら? >> VBフサギコ



367 :360:02/12/11 10:32
>>361
ではどうすればいいのでしょう?
bmp.PixelFormat:=pf1bit; を bmp.Monochrome:=True; の
前に入れた場合、Canvas.TextOut で文字をどう描けば良いでしょうか?

後に入れた場合、出来てるのは いわゆるモノクロビットマップではなく
パレット付きの2色のビットマップが出来ています。
 (SaveToFileしてペイントブラシで見ると色付き文字になってる)


368 :360:02/12/11 10:42
>>362
http://www.google.co.jp/search?q=DuplicateHandle+Delphi&lr=lang_ja

>>364
C/Sというとデータベースの応用しか思いつきません
BDEでも小規模なら十分使えた(遅いけど)と思います

369 :デフォルトの名無しさん:02/12/11 10:48
VBフサギコの言いたいのは、ネットワークをまたいだプロセス間通信を簡単にやりたい。
ということではないかな?

DCOM 使えば?

370 :360:02/12/11 10:53
モノクロビットマップの件は

検索して
http://www.users.gr.jp/ml/archive/delphi/42732.asp
を見つけました。

pf1bit=1bit DIB(2色カラーパレット付)で Monochrome=True が 1bit DDB (モノクロビットマップ)で

DDBだと直接メモリイメージを操作出来ないという感じなのかな?

そして作成直後に pf1bitを設定すると変な色パレットが付いてるのでTextOutとかが巧くゆかないと

371 :デフォルトの名無しさん:02/12/11 15:50
>>360
>このビットマップの0,1の反転したくて

DIBのモノクロビットマップはパレットがあるんで、色データではなく
パレットの色を入れ替えるだけで反転するよ

372 :ねこま:02/12/11 17:16
>>371
私もそれがベストな方法だと思います
しかし Bitmap.Palette := CreatePalette(...) だと反転できないみたいです.
パレット 0 が clBlack 固定なのかな?
TBitmap を欺いて SetDIBColorTable すればできるけど.


373 :デフォルトの名無しさん:02/12/11 17:22
>>パレット 0 が clBlack 固定なのかな?

うーん、TBitmap ではどうだかしらないんですが、すくなくとも普通の DIB なら
ゼロが黒固定ということはないです。

374 :ねこま:02/12/11 17:25
>そして作成直後に pf1bitを設定すると変な色パレットが付いてるのでTextOutとかが巧くゆかないと
変な色パレットなんて付かないと思うんですけど……
うちでは黒白の2値パレットになります.
DDB->DIB ってビデオカードに影響されるんでしょうか?


375 :デフォルトの名無しさん:02/12/11 19:20
DDBがビデオカード依存罠

376 :Delフサギコ ◆A6VzDeLphI :02/12/11 20:32
         _________
  ∧,,∧   /
 ミ;゚Д゚彡< あうあうあ・・・・
  ミつ つ  \
〜ミ ,, ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∪ ∪   >>369さん
        イエス

377 :360:02/12/11 21:14
>>371 いや、ちょっとフォントを加工したりとかしたかったもんだから
>>372 そこらへんが色々判らないですね
>>374 その時の状態というか直前のパレットの状態によって違う様子
http://www.users.gr.jp/ml/archive/delphi/42732.asp
によると、Width Height=0 で変になるという事だから そういう事じゃないでしょうか

>>375 モノクロビットマップは DDB といってもWindows依存なだけでは?

378 :デフォルトの名無しさん:02/12/12 02:36
>>376
Indy はだめ?

379 :デフォルトの名無しさん:02/12/12 17:54
ネットワークを跨いだC/Sってのがイマイチ意味不明なんですが・・・。
DBサーバに接続するだけじゃ駄目なの?
それともP2Pみたいなシステムって事?興味あるので詳しく解説希望

380 :デフォルトの名無しさん:02/12/12 21:40
一定期間ごとに最前面に表示して入力を促すソフトを作ろうと思ってます。
そのソフトの入力画面が表示されている間だけは他のソフトの制御を出来なく
したいのですが、良い方法は無いでしょうか。

いつもは普通のソフトだけど、ある瞬間だけスクリーンセーバーとして偽装する
ことができればやりやすいと思うんだけどなかなかうまくいかないもんで。

381 :ねこま:02/12/12 21:44
一定時間ごとにスクリーンセーバーを起動するだけのソフトを作ったらいいんではないでしょうか


382 :デフォルトの名無しさん:02/12/12 21:53
https://211.10.75.189/k-sfa/index.jsp
このページ、i-mode N503iで表示されません。
P504i では表示されるのですが、
表示させる方法をお分かりの人がいたら、教えてください。
サーバー構成は、Apache+SSL(Apache1.3.27 OpenSSL0.9.6g) です。


383 :デフォルトの名無しさん:02/12/12 21:54
>>381
レスどうも。
スクリーンセーバーは今あるヤツをそのまま使いたいので
スクリーンセーバーとは別に作りたいのですよ。

384 :デフォルトの名無しさん:02/12/13 00:21
>>383
そのソフト、ものすごく使いたくないけど、
キー入力を完全に無効にしたらどう?

385 :デフォルトの名無しさん:02/12/13 00:22
Delphi7のヘルプが中途半端に日本語化されてて一部英語な罠…

386 :デフォルトの名無しさん:02/12/13 00:36
>>385
ヘルプアップデートしても?
うちのは英語出てこないけど?


387 :デフォルトの名無しさん:02/12/13 00:55
>>386
TRichEdit とか英語じゃない?
7はまだヘルプアップデート出てないし…。

388 :ねこま:02/12/13 03:10
>スクリーンセーバーは今あるヤツをそのまま使いたいので
>スクリーンセーバーとは別に作りたいのですよ。
時間が来たら一時的に入力を促すだけのスクリーンセーバーを起動して,
終わったらあなたのお気に入りのスクリーンセーバーに戻せば良い.
他にアイデアは無いです.


389 :デフォルトの名無しさん:02/12/13 05:17
>>387
これは違うの?
ttp://www.borland.co.jp/delphi/del7docup.html

390 :デフォルトの名無しさん:02/12/13 05:57
DirectXの排他モードを使えば?

391 :デフォルトの名無しさん:02/12/13 08:55
>>380
「スクリーンセイバーの作り方 delphi」を検索して、他のアプリを隠す部分だけ真似すりゃ
いいんじゃないでせうかね。

392 :Delフサギコ ◆A6VzDeLphI :02/12/13 09:25
  ∧,,∧ >>378さん
 ミ,,゚Д゚ミ インヂーの何を使えばヨロシコですか?
      >>379さん
      DBは使わないのです
     鯖も蔵も自作アプリで単に通信したいだけなんすが。
     P2Pってのは違うと思われ(ヨクワカ)

393 :デフォルトの名無しさん:02/12/13 11:23
>>392
単に通信したいだけなら WinSockレベルで書いてもしれてるでしょ


LAN内だけなら
メールスロットなんてのもあるし
数秒レベルの遅延が許されてるなら共有ファイルを決めて
共有ファイルを通してメッセージ交換すれば? 簡単だし
Win9xを無視するなら名前付パイプでやりとりとか


394 :デフォルトの名無しさん:02/12/13 11:30
>>392
SOAP/Web service なんかどうなの?



395 :デフォルトの名無しさん:02/12/13 19:14
>>392のVBフサギコさんはヘルプで「DCOM アプリケーション」を引いてみるとよろし。
つかVBもDCOM使えたような…というよりDelphiより得意なんじゃないか?

396 :379:02/12/13 20:41
>>392
なるほど、
IndyのIdTcpClientとIdTcpServerでなんとかなりませんか?

397 :デフォルトの名無しさん:02/12/13 21:23
>VBでWinSockを使ってて、
>なかなか便利なので、Delでも同じ事したいです
ここにつっこむ人はいないの?


398 :デフォルトの名無しさん:02/12/13 21:44
VB の WinSock は、それはそれは便利なんだろ?きっと。

399 :Delフサギコ ◆A6VzDeLphI :02/12/13 23:55
                _____
      ∧,,∧___   /なでか、微妙に煽られてる
    /ミ゚Д゚*ミ/\<  希ガスる...
  /| ̄∪∪ ̄|\/ \_____
    |____|/
              レスありがとです
>>393さん
WinSockスレベルのしれてる度がどれだけシレってるのかが
よくわかなのです。
スロットはしたことありません。共有ファイルは簡単しょうっすね
名前尽きパイプも吸った事無く、よくわかですた。

>>394さん
そこには逝きたいでつが、大げさすぎる肝汁ですが。

>>395さん
VBは使って使って使ってガンバッテモ鬱になる言語ですが、何か.
DCOMはみかかDOMOCOみたいなので、嫌いなのはともかく
やったー事ないのでよくわかです。

>>396さん
なんとかなりそうでし。クスコクスコクスコ

>>397さん
突っ込みどころ満載ですが、何か?
>>398さん
後ろの方が、VBでやって簡単にLAN内の2台で通信できてたので
「おや、まあ、デルファイさんでも簡単ですかねえ」
と思いましたが。

400 :勝手にMailSlot講座:02/12/14 09:09
メールスロットは Win95〜NT迄使え、LAN内のほかのパソコンともやりとり出来ます。

まずは、標準のメールスロットに送信をしてみましょう
フォームにMemoとボタンを貼り付けてボタンイベントに

procedure TForm1.Button1Click(Sender: TObject);
var hfile:THandle;
var msg:string;
var wSize:DWORD;
begin
hfile:=CreateFile('\\.\mailslot\messngr', GENERIC_WRITE,
   FILE_SHARE_READ,
   nil,
   OPEN_EXISTING,
   FILE_ATTRIBUTE_NORMAL,0);

msg:='俺'#0'お前'#0+Memo1.Text;
WriteFile(hfile,PChar(msg)^,length(msg),wSize,nil);
try finally CloseHandle(hfile);end;
end;

どのパソコンにメッセージを送るかは CreateFileの第一引数で指定します。
詳細は 
 http://www.google.co.jp/search?q=mailslot&lr=lang_ja
messngrは w2000なら普通は常にサービスとして動いています。 W9xではWinpopupです

メッセージは 誰から誰へ の欄がありその区切りは #0 です

401 :勝手にMailSlot講座:02/12/14 09:30
受信も簡単です 別のアプリを作成し、メモとタイマを貼り付けます。

1、ローカルにハンドル型変数を定義する
 var hMailSlot:THANDLE;

2、フォームのOnCreateForm イベントか 初期化節で
 hMailSlot:= CreateMailslot(
   '\\.\mailslot\2CH\test'
    ,100 // 最大メッセージサイズ
    ,0 // 読み取りタイムアウトの間隔
    ,nil);

3、タイマーイベントで
procedure TForm1.Timer1Timer(Sender: TObject);
var rSize:DWORD;
var buf:string;
begin
 setlength(buf,1000);
 if ReadFile(hMailSlot,PChar(buf)^,Length(buf),rSize,nil) then begin
   SetLength(Buf,rSize);
   if buf<>'' then Memo1.Lines.Add(buf);
 end;
end;

送信側アプリで '\\*\mailslot\2CH\test' とすればOK

402 :勝手にMailSlot講座:02/12/14 11:22
MailSlotは簡単ですが、制限もあります
1、必ず届くとは限らない=届いたかどうかはそれだけでは判らない
2、複数届く場合もある
3、ドメインを設定してなければ \\*\ が使えない=相手名を設定しなければいけない=結局WinSockAPIが必要かも
4、1回の送信バイト数には制限がある


403 :デフォルトの名無しさん:02/12/15 04:35
質問ですが、Windows.pas だけ使用して
スレッド作る方法何か無いでしょうか?
(もしくは、なるべくサイズが大きくならない方法)

あるソフトのプラグイン作ってるんですが、
なるべく軽く済ませるためにClassesは使いたくないのです。

404 :403:02/12/15 04:38
スマソ、自己レスです。
System の BeginThread でやりまつ。

405 :デフォルトの名無しさん:02/12/15 15:27
SETTING.TXT(http://pc3.2ch.net/tech/SETTING.TXThttp://pc3.2ch.net/win/SETTING.TXTなど)
のBBS_NONAME_NAMEの部分を取り出したいのですが、どうすれば出来ますか?
一応SETTING.TXTをダウンして保存するところまでは出来たんですが、取り出す方法が分からず…

Iniと似てるのでReadStringで取り出せるかな、とも思ったのですが、セクションがないしどうにも出来なくて。

406 :Delフサギコ ◆A6VzDeLphI :02/12/15 15:31
            _____________
    ∧,,∧    / StringListに入れて
  _ ミ,,゚Д゚彡_<  Valuesで取り出せるよ
.=| |==U==U=| |= \
 | |@ミ  ミ .| |     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 | | ∪''∪ | | NamesとValuesをチェックっす
 | |      | |

407 :Delフサギコ ◆A6VzDeLphI :02/12/15 15:37
            _____________
   ∧,,∧    /
  _ ミ,,゚Д゚彡 _< ネットワク関係でレスくれた人サンクスコ
.=| |==U=U==| |= \メルスロソース、ありがとん
 | | .ミ   ミ | |
 | |ノ∪''∪. | | Indyでやってみてソース書いてから
 | |      | | レスろうかと思ってたけど、禿忙しいので
         かけそうにないです

  今日も出勤…もうぬるぽ…

408 :デフォルトの名無しさん:02/12/15 15:40
>>406
おお、出来ました!さんくすです!

409 :デフォルトの名無しさん:02/12/15 15:51
すんません。
今までも OpenJaneDoe 使ってもらわせてましたけど
今回のクッキーの件でふと興味を持ち
http://www.geocities.co.jp/Milano-Killer/8366/CompOJ.html
を参考に Delphi をインストールしてみますた。
んでスレ見て問題の部分を SPID を PON に
したりしてコンパイルしてみましたが

[致命的エラー] Jane2ch.dpr(1): ファイル 'System.pas' が見つかりません

て出ます。これはどういうことでしょか。

410 :409:02/12/15 18:35
解決しますた。


411 :デフォルトの名無しさん:02/12/15 19:12
そこでどういうミスをしていたかを書いてくれれば後から見た人の役に立つのに・・・。

412 :デフォルトの名無しさん:02/12/15 21:34
>>411
おいおい、それでは教えて厨失格というものだ。

413 :Delフサギコ ◆A6VzDeLphI :02/12/15 21:41
            _____
   ∧,,∧    /
   ミ*゚Д゚,,ミ < よっしゃ、ばれてない!
   ミ つ つ  \_____
 @ミ   ミ
   (ノ'''''∪ (ヒミシ)

414 :デフォルトの名無しさん:02/12/16 00:35
|∀・)バレテルヨ…

415 :デフォルトの名無しさん:02/12/16 10:11
パワーユーザでコンパイルする方法教えれ。

416 :デフォルトの名無しさん:02/12/16 10:51
パワーユーザって 何の事?

417 :415:02/12/16 11:35
>>416
それくらい検索すれ (`Д´)

418 :デフォルトの名無しさん:02/12/16 11:57
Power Usersと書かないとわからんだろ。

419 :デフォルトの名無しさん:02/12/16 12:40
コンパイルの仕方を知らないパワーユーザ(藁

420 :デフォルトの名無しさん:02/12/16 13:37
PoorUser?

421 :デフォルトの名無しさん:02/12/16 14:42
Personalを使うべく、Borland Mail News Members アカウントの登録をしたのですが、
Step2へ進むためのメールが来ません。
ISPとhotmail両方試したけど両方音沙汰無し。
時間がかかるものなんでしょうか?それとも休止中?

422 :421:02/12/16 19:40
解決しました。19時に試した分だけメールがきました。

423 :デフォルトの名無しさん:02/12/16 23:34
自作した関数に可変数のパラメータを
とることはできないのでしょうか?

こんな感じで・・・
procedure FuncName( param1, param2, param3 ・・・ :String );

無理ならデフォルトパラメータでやることにしまつ。

424 :デフォルトの名無しさん:02/12/16 23:34
>>416
外国でリメイクしてヒットした戦隊モノ

425 :デフォルトの名無しさん:02/12/17 00:08
そら、ジュウレンジャーだって。

>>423 Format のような引数指定ではどうかな?

426 :423:02/12/17 00:25
>>425
さんくすです。解決しますた。

後の人の為に。
function Add( Base :Integer; const Args :Array of Integer ) :Integer;
var
i :Integer;
begin
for i := 0 to High(Args) do Inc(Base, Args[i]);
end;

使用例: SumOneToTen := Add(1, [2,3,4,5,6,7,8,9]);

427 :デフォルトの名無しさん:02/12/17 09:13
単なるオープン配列パラメータじゃん.

で、それに集合わたしてコンパイル通るの?

428 :デフォルトの名無しさん:02/12/17 10:05
集合?

429 :デフォルトの名無しさん:02/12/17 10:49
まず、自分でやってみな。> 427

430 :デフォルトの名無しさん:02/12/17 12:47
なるほど、オープン配列コンストラクタってやつだな.

>428
「オープン配列コンストラクタは、集合構成子と同じように、
 式をカンマで区切って全体を大カッコで囲んだものです。」

だそうだ、ヘルプによると.

431 :デフォルトの名無しさん:02/12/17 12:53
426の例はResult値がない罠

432 :デフォルトの名無しさん:02/12/17 16:23
>>431 いいつっこみだけど、許してあげな

433 :デフォルトの名無しさん:02/12/17 17:43
い。

434 :デフォルトの名無しさん:02/12/17 23:43
そんぐらい許してやれ

435 :デフォルトの名無しさん:02/12/17 23:43
よ。

436 :デフォルトの名無しさん:02/12/18 00:52
(嘘)


437 :デフォルトの名無しさん:02/12/18 01:08
あまり使う気はしないな<オープン配列コンストラクタ

なんか気持ち悪い

438 :デフォルトの名無しさん:02/12/18 08:51
といいつつ、formatで思いっきり使ってたりして

439 :デフォルトの名無しさん:02/12/18 15:16
オブジェクトの生成/消滅をモニタできるプロファイラか
Log4J のようなロギングライブラリで定評があるのって何?


440 :デフォルトの名無しさん:02/12/19 14:15
C#を使ってみたが、泣きたくなるぐらい分かりずらいのでdelphiに
戻ってきますた。あー落ち着く。単にスキルがしょぼいだけだが。

441 :デフォルトの名無しさん:02/12/19 18:06
C#とDelphiって激似だと思うのだが。どこが分かりづらい?

442 :デフォルトの名無しさん:02/12/19 18:47
たぶん言語レベルじゃなくて、ライブラリ関連だと思う。

443 :デフォルトの名無しさん:02/12/19 21:43
Delphiの・・・に相当するC#の機能はどれだってのを探し疲れるんだよな。

444 :デフォルトの名無しさん:02/12/20 03:29
Formの上でTimageを動的に作ったりしてオブジェクトの生成・掃除の練習をしてるんですが、
親子関係がよくわかっていません。Form1を閉じると、上に載っているimageも自動で消滅させるには
Ownerを設定するだけでいいのでしょうか?

445 :デフォルトの名無しさん:02/12/20 04:01
いいよ
あとParentも調べとけ
あとメモリリーク検出するユニットも使っとけ

446 :ねこま:02/12/20 04:54
Owner 浅野内匠頭
Parent 大石内蔵助
Child 大石主税


447 :デフォルトの名無しさん:02/12/21 13:55
TComponent 継承はCreateで指定した親と一緒に解放されるから TImageも同じ

TBitmapはそうじゃない。TPersistent継承だからストリーム入力機能は
あるから、コンポーネントのプロパティにすれば dfm に保存は勝手にやってくれるが
生成、解放は別に管理が必要

448 :デフォルトの名無しさん:02/12/22 12:27
TImageに画像が表示しきれないときに、スクロールバーを表示させたいのですが、どうすれば出来ますか?

449 :デフォルトの名無しさん:02/12/22 12:49
>>448
TScrollBoxにTImageをのせる


450 :デフォルトの名無しさん:02/12/22 13:10
>>449
やっぱそれしかないんですか…さんくすです。

451 :デフォルトの名無しさん:02/12/22 15:22
>>450
>やっぱそれしかないんですか

TScrollBox は、もっぱらそのような目的で使用される。
TImage は TWinControl の派生クラスではないので、それ単体で
スクロールバーをもつことはできません。

452 :デフォルトの名無しさん:02/12/22 18:30
>>451
なるほろ。色々と参考になりました。

453 :ねこま:02/12/22 19:02
>TScrollBoxにTImageをのせる
私もこの方法がお手軽で良いと思っていましたが,
画像ビュワとか作ってみると,拡大で限界が見えてくるんですよ.
コントロールのサイズを果てしなく大きくできないし
どんどん描画が遅くなるし

>やっぱそれしかないんですか…さんくすです。
それしかないわけではなくて,一番簡単な方法という事ですね.
不満があるなら TImage は諦めて,イメージの表示サイズにあわせて
自分でスクロールバーを制御する事が必要となります.


454 :デフォルトの名無しさん:02/12/22 19:03
Anders Melander氏のTGIFImage(ttp://delphi.icm.edu.pl/ftp/d20free/gifimage.exe)を使って
アニメGIFを表示させようとするとすぐ固まってしまいます。

procedure TForm1.Button1Click(Sender: TObject);
var
 GIF: TGIFImage;
begin
 GIF := TGIFImage.Create;
 try
  GIF.LoadFromFile('C:\test.gif');//←GIFアニメ
  Image1.Picture.Assign(GIF);
 finally
  FreeAndNil(GIF);
 end;
end;

デモを参考にして一応こんな風にやってみたのですが、何が問題か分かりませんか?

455 :デフォルトの名無しさん:02/12/22 19:08
UNISYSへの送金がすんでないからだろ

456 :デフォルトの名無しさん:02/12/22 19:57
んなこたーない

457 :デフォルトの名無しさん:02/12/22 23:27
form2をメインフォームとして、form2上のボタンを押すとfom1を生成して
form1をShowmodalします。で、form1で処理をいろいろ行い、form1のonCloseで
unit1が作ったオブジェクトをFreeし、form2側では form1.showmodal の次に form1.Free を書きました。

が、form1を閉じると「読み込み違反が起きました」が山のように出ます。
なにか間違ってるのでしょうか・・・。

458 :デフォルトの名無しさん:02/12/22 23:31
Release

459 :デフォルトの名無しさん:02/12/22 23:41
>>458
あ、なるほど。ヘルプ見て気付きました。

あと、Form1 := Tform1.create(Application); とかやっておけば、メインフォームを閉じたときに
form1も掃除できるのでは?と思ったのですが、どうでしょうか。
Memcheckには反応せず、LeakCheckerには反応したのでちょっと不安で(;´Д`)

460 :遅レサー:02/12/22 23:49
>>455
ワラタ

461 :デフォルトの名無しさん:02/12/23 00:00
>>459
Form1がメインフォーム=アプリと同じ寿命なら最初から自動生成しとけ。

462 :デフォルトの名無しさん:02/12/23 00:04
>>461 了解です。もうちょっと勉強してきます(`・ω・´)

463 :デフォルトの名無しさん:02/12/23 22:57
初めてActiveX DLLを作成することになったのですが、うまく例外を発生させることができません。
例外情報を渡すためのクラスとしてIDispatchインターフェースとExceptionクラスを継承したクラスを作成し、
例外発生時にはそのインスタンスを作成およびraiseして、クライアントアプリケーション側では、
そのインターフェースからエラー情報を取得するようにしたかったのですが、
クライアント側で発生する例外はただのExceptionになっています。
例外オブジェクトはActiveXとアプリケーションの間を飛び越えられてないようです。
ActiveXでエラー情報を渡す方法ってどのような方法がありますか?


464 :デフォルトの名無しさん:02/12/24 05:34
>>463
えーと、どのスレで回答すればいいのかな?
他のスレでは、もうコメントついているのかな?

465 :デフォルトの名無しさん:02/12/24 19:44
>>463
>クライアント側で発生する例外はただのExceptionになっています。
EOleException じゃない?


466 :デフォルトの名無しさん:02/12/24 23:33
タブ式のペイントソフトを作っています。
PageControlのタブ名の代わりに縮小した画像を表示したいのですがどうすれば出来ますか?

467 :デフォルトの名無しさん:02/12/24 23:36
人間やめますか?マルチポストやめますか?
マルチポストは確実にあなたを破壊します。


468 :デフォルトの名無しさん:02/12/25 00:00
ちょいとお邪魔します。
オートメーションサーバでクライアントからインターフェースを
受け取りたいのですが、下記のようにやってみたら
「EOleException'エラーを特定できません'」という例外がでてしまいます。
何かアドバイスを頂けると嬉しいです。

・サーバ側のタイプライブラリでIAgentを定義
・クライアント側で IAgnetを実装したクラスTMyAgent (TInterfacedObjectから派生)を作る
・クライアント側で
begin
FServer := CoServer.Create;
FServer.ShowStatus; // ← 普通のメソッドは呼べる
FServer.AddAgent(TMyAgent.Create as IAgent); // ← ここで例外
end;

469 :デフォルトの名無しさん:02/12/25 01:23
>>468
そういうちょっと高度な質問は ML にした方が質の高い回答が得られると思うぞ。

470 :デフォルトの名無しさん:02/12/25 09:05
>>468

>FServer.AddAgent(TMyAgent.Create as IAgent);
これだと、どの場所が問題か判らないから3行に変更してみたら?

FMyAgent:=TMyAgent.Create;
IMyAgent:=FMyAgent;
FServer.AddAgen(IMyAgent);


471 :468:02/12/25 10:30
>>470
>FServer.AddAgen(IMyAgent);
ここで例外がでました。

試しにデバッグ版DCUを使ってみたところ、(これが原因かどうか分かりませんが)
MyAgentがQueryInterfaceでIStdMarshalInfoを要求されてE_NOINTERFACEに
なっているみたいです。

うーん、わけ分かんない(-_-;;

>>469
確かにそう鴨。
てゆーかML入れよ>漏れ

472 :デフォルトの名無しさん:02/12/25 10:36
サーバ側も一緒に作ってるんでしょ?
そしたらサーバ側で AddAgent にブレークポイント仕掛けてみたら?

473 :468:02/12/25 10:45
仕掛けてみたけど、そこまで辿り着けないみたいなんです。

474 :デフォルトの名無しさん:02/12/25 10:59
>>473
じゃ クライアント側でブレークポイント仕掛けて CPU 窓を開いて ステップ実行したら?
というか まずAddAgent の定義を晒してみたら?

475 :デフォルトの名無しさん:02/12/25 15:02
BCBスレで質問したのですが、
全然関係ない事で盛り上がっていて返事が無いので、
こちらで質問します。

BCBスレによるとTRichEditとTMemoを同じ行間にする事は無理らしいのですが、
1つのTMemoコンポーネント内に
二色以上の文字列を表示させる事はできますか?
できるならばどのようにすればいいのでしょうか?

できないならば、選択して普通のテキストとしてコピーできる
TMemoと同じ行間で、2色以上の文字を表示できるようにするには、
どのような方法をとるのが一般的でしょうか?
プログラム側で文字列と色は書き込むので、
ユーザーにとってはReadOnlyで構いません。


476 :デフォルトの名無しさん:02/12/25 15:12
>> どのような方法をとるのが一般的でしょうか?

そのようなことができるエディタ用コンポーネントはたくさんあるし、
それを使ったらよいと思う。なぜ、TMemo と同じ行間にこだわるのか
謎です。

477 :デフォルトの名無しさん:02/12/25 15:28
>>476
ありがとうございます。エディタ用コンポーネントは大きい物ばかりなので
サイズが大きかったりシェアウェアだったりするので敬遠していました。
TRichEditだとWin98とWin2000で行間が変わって
Win2000だと行間が異様に広すぎて情報が表示しきれないのです。


478 :デフォルトの名無しさん:02/12/25 16:47
>>477 ゴメン 関係ない話題に食いついてた
TRichEditでフォントを調整してもダメなのですか?


479 :デフォルトの名無しさん:02/12/25 18:37
メニューの項目にマウスカーソルを合わせると
その項目にあわせた情報を文字列として生成して
Tipヘルプとして表示したいのですがどうやればいいですか?

480 :デフォルトの名無しさん:02/12/25 18:40
そうやればいいよ。

481 :デフォルトの名無しさん:02/12/25 19:11
ったく、ゴミレスするぐらいならレスすんなよな。

482 :デフォルトの名無しさん:02/12/25 19:16
TThreadについて質問です。
TThreadで複数のスレッドを作って、それらのスレッドから同じグローバル変数(Integer型)にアクセスしています。
このグローバル変数を参照・代入するときに同期処理をしなかった場合、つまり複数のスレッドから同時にアクセスした場合に、どの程度の不具合が出るのでしょうか?
計算結果がおかしくなるだけで済むのか、それともメモリ違反が起きてアプリケーションごと停止してしまうのか、エラーの程度を知りたいです。
詳しい方、お願いします。




483 :デフォルトの名無しさん:02/12/25 19:25
> 計算結果がおかしくなるだけで済む

と思う。マルチCPUでもなければ「同時に」アクセスする、という事態はない。

484 :デフォルトの名無しさん:02/12/25 19:37
>マルチCPUでもなければ「同時に」アクセスする、という事態はない。
マジ?


485 :デフォルトの名無しさん:02/12/25 20:07
たしかにないけど・・・そういうことじゃないだろ。

486 :デフォルトの名無しさん:02/12/25 20:17
>>479
確かに、D7のTMenuItemのヘルプには

| ヒントテキストは,ヘルプヒントが有効な場合
| (つまり,フォームおよびアプリケーションの ShowHint プロパティが
| true の場合)に,ユーザーがメニュー項目の上でマウスポインタを止めた
| ときにヘルプヒントウィンドウに表示されます。

とあるけど、全然表示されませんね。
バグかな?それとも、WindowsXPだから?

487 :デフォルトの名無しさん:02/12/25 21:03
>486
http://www.borland.co.jp/qanda/delphi/d0002350.html

488 :デフォルトの名無しさん:02/12/25 21:04
>>482
スレッド1がグローバル変数nに1と2を交互に書き込み続ける。
while True do
begin
 n := 1;
 n := 2;
end;

スレッド2がグローバル変数nの値を表示し続ける
while True do
 Writeln('n=',n);

このとき
スレッド2がn=1かn=2以外の値を表示することはない。
例外やエラーがでることはない。
1と2どちらが表示されるかはわからない。
値の代入・参照にSetN/GetNのような関数を使っていた場合はまともに動く保証はない。


489 :デフォルトの名無しさん:02/12/25 21:32
マルチCPUでかつ同時にアクセスしても問題ないと思うよ


490 :デフォルトの名無しさん:02/12/25 21:35
>>483,484,485,488,489
レスありがとうございます。
Integer型への単純な代入・参照ぐらいでは、変な計算結果になることはあっても致命的なエラーは起こらないということですね。

重ねて質問なのですが、同じようなケースで、複数のスレッドからInt64型やAnsiString型のグローバル変数を参照・代入したときや、インクリメントの処理(x:=x+1)などを行った場合はどうなるのでしょうか?
482のケースと同じと考えていいんでしょうか。
どなたかご存知の方がいらしたらお願いします。


491 :デフォルトの名無しさん:02/12/25 21:42
>>490  CPUバスは64bitだけどレジスタは32bitなので、int64は2つのレジスタを使っている。だから、
>>488と同じような事をした場合
$11111111 と $22222222 を 交互に書き込んだら

$11111111 と $22222222 以外に $11112222 や $222211111が読める場合がマレに出て来る。

AnsiStringについては2つのスレッドが 単なる代入をするだけなら 参照を書き換えるだけだから問題
ないだろあうが、
str:=str+"1"
str:=str+"2"
のような感じで相互に書き換えるとメモリ管理が変になるかもしれない

492 :デフォルトの名無しさん:02/12/25 21:43

threadvar ってどういう時に使うのでしょうか?


493 :デフォルトの名無しさん:02/12/25 22:12
>> 482のケースと同じと考えていいんでしょうか。

違うんじゃないか、と考える根拠はなに?
そもそもなにやりたいの?

494 :デフォルトの名無しさん:02/12/25 22:13
> $11112222 や $222211111が読める場合がマレに出て来る。

おつ、断言してるね。

495 :デフォルトの名無しさん:02/12/25 22:17
> $11112222 や $222211111が読める場合がマレに出て来る。

もと質問ではエラーの程度が知りたいみたいよ。内容がどうなるかについては
興味ないみたい。というか、そもそもどうなるかわからんし

496 :デフォルトの名無しさん:02/12/25 22:19
内容が不定ということで、エラーの程度はもとのケースと同じ

497 :デフォルトの名無しさん:02/12/25 22:56
皆様レスありがとうございます。

>>493
>>違うんじゃないか、と考える根拠はなに?
>>そもそもなにやりたいの?

説明が足りなくてすいません。
質問した理由は、マルチスレッドのサンプルを見てみると同期処理をしなければいけない場合としなくてもいいケースがあるらしく、その辺の基準を知りたかったからです。

Int64について聞いたのは、Int64は32bitCPUでは1度に処理できないと思うので、複数に分けられた処理が重なるとどうなるか、
AnsiStringは、文字列を代入するときなど内部的にメモリ操作なんかをしてそうなので、その処理が重なるとどうなるか、
インクリメントについて聞いたのは、インクリメントは参照と代入をしますから、その処理が重なるとどうなるか
というのがそれぞれ気になったので質問しました。

>>491
ということは、Int64については、Pascalのコード上では別々に実行されても、アセンブラのレベルでは処理が混ざってしまうケースがあるってことですね。
で、それでも致命的なエラーにはならないと。



498 :デフォルトの名無しさん:02/12/26 00:30
threadvarはスレッド毎に違う値を保持できるんだけど
そういう値はTThread継承してフィールドとして保持するからあまり使われない。

AnsiStringや動的配列は内部で関数コールしてるからスレッドセーフじゃないかも。


499 :デフォルトの名無しさん:02/12/26 08:28
同期処理をしなくても良い場合
○単ワードで完結したデータを 多他方が読むだけの場合
   例えば片方が読むだけの処理で片方が読んで書く処理はOK
   複数ワードのデータの場合は片方が書くタイミングによって
   は正しく送れない


基本的にそれ以外は同期処理が必要
 ただ、同期処理といっても自前で簡単に出来る場合もある。

1、複数ワードのデータ、例えば文字列をスレッド間で渡す場合は、
 文字列の領域を読むスレッドが
 完全に読める一定時間確保しておいてそのポインタを渡せばよい

2、セマファのように相互に書き換える旗を実装する場合は 
  x86ならXCHG命令を使う

3、複数スレッドでカウンタを実装する場合はアセンブラのinc命令を使う

 これを巧く組み合わせればOSの同期処理を使わなくても大丈夫

500 :デフォルトの名無しさん:02/12/26 10:52
OSの同期処理を巧く組み合わせれば、↑を使わなくても大丈夫

同期処理をさぼりたい理由って何だろうか。しなくてもよいことは
しない方がよいことは分かるが


501 :デフォルトの名無しさん:02/12/26 10:57
Synchronize つかってメインスレッドにやらせりゃ、自動的に排他処理になる
のになんでめんどくさいことしなきゃならんの。速度クリティカルならまぁ
わかる

502 :デフォルトの名無しさん:02/12/26 11:15
>>500 同期処理をサボるんじゃなくてさ・・・
マルチスレッド使いこなすには同期処理しなくてよい場面をどれだけ作れるかって事
じゃないかなと思ってたんだが・・・・
まあ、無理やり理由つけると、OSの同期処理を使ってしまうとKylix<->Delphi移行なん
て時に不便かな・・・程度かな


Synchronize は Windowsメッセージを使って、メインスレッドにやらせてる訳で
よく判らんけど結構重い処理だと思うよ。
たまに呼び出すならいいけど、例えば、処理の進展状況を報告する程度の事なら
integer のグローバル変数を介して非同期にやりとりした方がいいでしょ


503 :デフォルトの名無しさん:02/12/26 11:50
TEditで選択中の文字列の背景色と文字色を変更する事は可能ですか?

504 :デフォルトの名無しさん:02/12/26 12:22
>>503 どうだろ?
GetSysColorの呼出個所にパッチをあてておいてWM_SYSCOLORCHANGE を送るとか・・・無理かな

505 :503:02/12/26 12:36
>>504
それはTEditコンポーネントを改造するという事ですか?
ごめんなさい、良く分かりません(^^;

506 :デフォルトの名無しさん:02/12/26 13:00
>>505
いや、たぶん出来ないだろうって事だろ

507 :503:02/12/26 13:26
たぶんで答えられても困るのですが(^^;

508 :デフォルトの名無しさん:02/12/26 13:31
>> たぶんで答えられても困るのですが(^^;

できるかもしれないが、超めんどくさいことをしなけりゃならん、と
思う。これでどう。

509 :デフォルトの名無しさん:02/12/26 13:34
WM_PAINTで標準の描画が行われた後のタイミングを捉えて、
BrushCopyかなんかで色を置換するのは駄目?ちらつくか。

510 :デフォルトの名無しさん:02/12/26 13:37
>> GetSysColorの呼出個所に

1)TEdit はウィンドウズのエディットコントロールのラッパー
2)その各部の色(背景色以外)はシステムカラーで決まってる(?)
3)システムカラーを変更するとできるだろう。たぶん(藁
4)でもその結果、すべてのエディタに影響が及ぶ
5)これを回避するために・・・・よくわからんが、めんどくさいことをしなければならないだろう

ま、標準コントロールの色をいじりたがるのは初心者だけだね。

511 :503:02/12/26 13:44
ま、(?)とか「たぶん」とか書くのも初心者だろ。

よーするに有効な手段はないからてめえでコンポーネント作れ
で、よろしいか?

512 :デフォルトの名無しさん:02/12/26 13:49
あのね、たぶん、と答えたら困る、ってことで、詳しく説明したつもりなんだけどね。
なんで逆切れしてるの。

選択色を変更しなけりゃできない機能ってどんなことだい?

わざわざコンポーネントを一から作る価値に見合う機能なんだろうね?

513 :デフォルトの名無しさん:02/12/26 13:52
選択色を変更したいのでエディタコンポーネントを一から作るってのは
凶器の沙汰。

514 :デフォルトの名無しさん:02/12/26 13:57
沙汰
「沙」は砂、「汰」は選び分ける
水中でゆすって、砂を捨て米や砂金を選び分ける意

515 :504:02/12/26 14:01
>>505
そういうレベルならモナーに聞いて欲しかったな。
挑戦的な質問に聞こえたからああいう答え方になったけど、

 TEditコンポーネントを改造というかその延長では出来ないと思うよ
 だから、TRichEditで頑張った方がいいと思うよ


516 :デフォルトの名無しさん:02/12/26 14:03
ちょっとした疑問なんですが、プロジェクトのソース、pasとdcu、dfmを合わせても700KB
程度しかないのに、コンパイルすると4MB近くになってしまいました。
今までは、せいぜいバイナリは1.5倍〜2倍程度だったのですが、今回だけ異様です。
この妙なサイズはどこから来るのでしょう?
(外部リソースは全て動的にアクセスしているので、exeが巨大化する理由がわからないんです)


517 :デフォルトの名無しさん:02/12/26 14:03
誰も的確に答えられませんでした。

518 :デフォルトの名無しさん:02/12/26 14:09
皆、的確に答えたが、質問者が理解できなかった。

519 :デフォルトの名無しさん:02/12/26 14:11
ダブルバッファリングした上で>>509の方法が多分一番楽。
つか、スルーされた時点で、からかいに来たのかと疑ってる。

520 :デフォルトの名無しさん:02/12/26 14:13
また、たぶん、かよ。
やってみてから言ってよね。

521 :503:02/12/26 14:15
上の人のは偽物です(^^;

>>519
その方法を詳しく教えて頂けませんか?

522 :デフォルトの名無しさん:02/12/26 14:16
ブラシの色を変えて、それで選択部分の矩形をどうやって求めるの?


523 :デフォルトの名無しさん:02/12/26 14:17
>> その方法を詳しく教えて頂けませんか?

いい質問だね。きっと、519は具体的に答えてくれるよ。

524 :504:02/12/26 14:17
>>519 ダブルバッファにする為には今度はBeginPaintをひっかけないといけないんじゃないの?


525 :デフォルトの名無しさん:02/12/26 14:19
さあ、一体誰が 本 当 に 的 確 に 答えられるんでしょうかねえ(^^;

526 :503:02/12/26 14:20
>>507
>>511
これは偽者です。
レスが遅れまして申し訳ございません。

>>512
フォームのデザインの関係で見栄えがちょっと悪かったので
変更できるのかな〜と・・・

>>513
改造でも狂気の沙汰ですか?

>>515
私のレベルがスレと合ってなかったみたいっすね(^^;
もっと簡単に出来るのかと思ってたけど、かなり難しいようですね。
どうりでググっても見つからない分けだ。

527 :デフォルトの名無しさん:02/12/26 14:22
めんどくさいことするだけの価値があるかどうか、質問者は再考するように!

というのが一番的確な回答

528 :デフォルトの名無しさん:02/12/26 14:24
519は逃げますた。

529 :503 ◆eRDUfXaGp2 :02/12/26 14:25
>>521
こっちも偽者。
むぅ・・・、トリップ付けちゃる。

530 :デフォルトの名無しさん:02/12/26 14:25
>> 改造でも狂気の沙汰ですか?

515さんも答えてるけど、TEditの改造で簡単にできるとは思えないよ

531 :デフォルトの名無しさん:02/12/26 14:26
要するに、一回(メモリ上に)標準色で描かせておいて、
後から標準の選択色で塗られているピクセルだけ塗り替えるって事。

BrushCopyってのは、ヘルプの文面があれだけど、要するに透明色つき描画なんで、
ダブルバッファリングで得たコントロールのイメージBitmapから、
標準の選択色を透明色にして…云々。
書いてて、DIBでポインタアクセスの方が手っ取り早い気もしてきた。
まあ手段は何でもよくて、最悪GetPixel/SetPixelで1ピクセルずつ調べても、
面積にもよるけど最近のCPUならそんなに遅くならない気もする。

532 :デフォルトの名無しさん:02/12/26 14:29
>>524
標準コントロールは、WM_PAINTのWPARAMにDC送ると、
画面じゃなくそっちに描いてくれるので、ダブルバッファリングは割と楽。

533 :503 ◆eRDUfXaGp2 :02/12/26 14:31
>>527
そんなに大変だと思ってませんでした。
他の方法(TRichEditを使うとか、選択しないとか)でやってみます。

534 :デフォルトの名無しさん:02/12/26 14:32
>>まあ手段は何でもよくて、最悪GetPixel/SetPixelで1ピクセルずつ調べても、
>>面積にもよるけど最近のCPUならそんなに遅くならない気もする。

おう、すごく現実的な回答だけど、こんなのでは実装したくなくなるねぇー



535 :デフォルトの名無しさん:02/12/26 14:33
>>533
へたれ。

536 :デフォルトの名無しさん:02/12/26 14:35
一からコンポーネント作るより楽だったんじゃねえの?

537 :デフォルトの名無しさん:02/12/26 14:36
>> 一からコンポーネント作るより楽だったんじゃねえの?

それは認める。いろいろ勉強になった。ありがとう。

538 :デフォルトの名無しさん:02/12/26 14:39
実際やれと言われたら出来る人はゼロだったということか。

539 :デフォルトの名無しさん:02/12/26 14:41
>>538

537 です。実用的かどうかはともかく、実際、わたしならできるように思います。
うぬぼれでなく。

540 :503 ◆eRDUfXaGp2 :02/12/26 14:45
>>531
BrushCopyって便利そうですね。
コンポーネント単位で描きなおすんじゃなくて、
画面の標準色の有り無しを調べて塗り直すんですね。

よっしゃ、諦めよう・・・・。



541 :デフォルトの名無しさん:02/12/26 14:47
へたれはカエレ!!(・∀・)

542 :504:02/12/26 14:52
>>532
 ああなるほど、今実験したら 
type TMyEdit=class(TEdit)
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
end;

でちゃんとWMPaintも呼ばれるし、 これなら簡単ですね

543 :デフォルトの名無しさん:02/12/26 14:55
>> これなら簡単ですね

そう。あと、選択部分の矩形領域をどうやってもとめるのか、を
解決できれば、できそう。GetPixel はできればやりたくないです。

544 :504:02/12/26 15:02
あと文字の変更時は WMPaint呼ばれないから、文字変更毎に Invalidate させてとか
も必要かな。でもたいした事じゃないか

545 :デフォルトの名無しさん:02/12/26 15:02
>そう。あと、選択部分の矩形領域をどうやってもとめるのか、を

別に求める必要は無くて、使いたい色で一面に塗られたもうひとつのメモリビットマップに、
標準選択色を透明色ということにして色抜きコピーしてやれば解決。メモリの無駄とも言う。
全部調べるにしてもDIBでポインタアクセスした方がGetPixelより圧倒的に速いし。

546 :デフォルトの名無しさん:02/12/26 15:06
>>544

1) EM_GETSEL を送って、選択領域の最初と最後の文字インデックスを求める
2) EM_POSFROMCHAR で選択領域の最初と最後の文字の論理座標を求める
3) 2) で求めた座標の最初と最後のところの近辺を GetPixel で調べて
 矩形の四点を求める。うーむ、左上と右下の2点で十分だね。

一行エディットだとこれでいいと思う。

547 :デフォルトの名無しさん:02/12/26 15:10
>> 標準選択色を透明色ということにして色抜きコピーしてやれば解決

これの具体的な説明を教えて。

548 :デフォルトの名無しさん:02/12/26 15:15
TransparentBltって色抜きコピー可能なAPIがあって、BrushCopyはそのラッパー。
で、例えば、白地にひとつ青い矩形が書かれた画像があって、青を赤にしたいとする。
真っ赤な画像を別に用意して、そこへ、元の画像を青=透明でコピーすると、白地に赤い矩形になる。
こんな説明でいい?

549 :デフォルトの名無しさん:02/12/26 15:15
>537 です。実用的かどうかはともかく、実際、わたしならできるように思います。
>うぬぼれでなく。

「人に頼れば」出来ると言う事だったらしい。プ

550 :デフォルトの名無しさん:02/12/26 15:16
>>548

分かると思う。帰宅したらやってみる。ありがとう。

551 :デフォルトの名無しさん:02/12/26 15:18
>>「人に頼れば」出来ると言う事だったらしい。プ

いや、GetPixel や ScanLine を使えばできることはできる。もっと効率よく
ということさ。

552 :デフォルトの名無しさん:02/12/26 15:19
(´∀` )エヘヘ

553 :デフォルトの名無しさん:02/12/26 15:27
>>516
usesしてるユニットは?

554 :デフォルトの名無しさん:02/12/26 17:31
誰でもいいからさっさと作れよ。

555 :ななしへたぐらま ◆XcB18Bks.Y :02/12/26 19:19
>>516
もしかしたら…ですが,『プロジェクトオプション』 - 『リンカ』の
『TD32デバッグ情報を含める』にチェックが入っていませんか?


556 :デフォルトの名無しさん:02/12/26 19:29
>>503程度も実現困難なDelphiはOOPLとしての限界を露呈してしまったね。

557 :デフォルトの名無しさん:02/12/26 19:39
言うなら Windows標準コンポーネントの 限界だな。
バカはしゃべるなよ。

558 :デフォルトの名無しさん:02/12/26 19:45
>>556
.NETなら簡単なんですか?

559 :デフォルトの名無しさん:02/12/26 19:50
.NETなら多少長めに見積もって5分ってとこだな。

560 :デフォルトの名無しさん:02/12/26 20:09
>>556
アフォかそれが出来ないこととOOPLの限界とは関係ないだろ。
素人はでてくんな。バカ。

561 :デフォルトの名無しさん:02/12/26 20:10
Delphiなら4分ってところかな。って何の話?

562 :デフォルトの名無しさん:02/12/26 20:12
カップラーメンの麺が程よく伸びる時間

563 :デフォルトの名無しさん:02/12/26 20:35
最近のカップラーメンは4分が一般的だね。
ところで俺はGooTaのワンタンはおいしいと思うんだ。

564 :デフォルトの名無しさん:02/12/26 23:02
カップラーメンはちょっと堅いくらいがうまいのに

565 :504:02/12/27 09:00
>>559
 もともとのWinコントロールにその機能が無いのに無理でしょ。
 DelphiやネイテブのWinアプリだと最悪 DLL呼出部を検索してそこにパッチをあてる
という方法が使えるわけだけど、.NET だとそれも使えない訳で


566 :504:02/12/27 09:43
あ、それと実験してみたけど結構大変みたい。

試しにオーナ描画で
procedure TMyEdit.WMPaint(var Message: TWMPaint);
var str:string;
  FCanvas: TCanvas;
  PS: TPaintStruct;
begin
str:=Text;
with Message do if DC = 0 then DC := BeginPaint(Handle, PS);
FCanvas:=TCanvas.Create;
try
FCanvas.Handle := Message.DC;
FCanvas.Brush:=Brush;
FCanvas.Font:=Font;
FCanvas.TextRect(BoundsRect,0,0,str);
if SelLength>0 then begin
  FCanvas.Brush.Color:=HighLightColor;
  FCanvas.TextRect(BoundsRect,
  FCanvas.TextWidth(copy(str,SelStart,SelLength))
  ,0,SelText);
end;
finally FCanvas.free;end;
end;
とやっても、肝心の選択動作中に WMPaintが呼ばれないし、キャレットが表示されない。
OnChangeだけでなくキーボードイベントも乗っ取って描画を制御しないといけないみたい

567 :デフォルトの名無しさん:02/12/27 10:38
>>566
本題と関係ないけど、EndPaintもinheritedも無いような、気のせい?

568 :504:02/12/27 10:45
>>567
 いやその通り EndPaint忘れてたよ。 

569 :デフォルトの名無しさん:02/12/27 17:12
純粋に技術的なチャレンジとしては意味があるとは思うけど、

>>526 フォームのデザインの関係で見栄えがちょっと悪かったので
>変更できるのかな〜と・・・

のような厨房質問への回答としてはむなしいね。「労多くして功少なし」

570 :デフォルトの名無しさん:02/12/27 17:27
>>503程度も実現困難なDelphiはOOPLとしての限界を露呈してしまったね。


571 :デフォルトの名無しさん:02/12/27 17:30
>>570
で、APIプログラミングとOOPLに何の関係が?

572 :デフォルトの名無しさん:02/12/27 18:10
>>570
C# でのサンプルを提示してくれるかな?
無理だろうけど。

573 :デフォルトの名無しさん:02/12/27 18:20
挑発にのるな! >>570 みたいのは、スキルのないヤツしか書きこめんだろう、恥ずかしくて。

574 :デフォルトの名無しさん:02/12/27 23:44
>>573
いーでしょ。おまえが管理しているわけではないんだから黙っていろ。
コードを提示できるならすばらしいことなんだし。

575 :デフォルトの名無しさん:02/12/28 01:07
>>574

おっ、OOPLの意味もわからん馬鹿がきたか。>>570 は書き込みとしても意味不明
だと理解できないのか。厨房は寝る時間だぞ。

576 :デフォルトの名無しさん:02/12/28 01:20
アップデートCDキタ━━━━━━(゚∀゚)━━━━━━!!!!!



577 :デフォルトの名無しさん:02/12/28 01:36
和訳へただけど、リリース前から変更点が解説されてるのはうれしい。


578 :デフォルトの名無しさん:02/12/28 07:24
>>575
バカに対して、吉外のようにわめくあなたもすばらしい。
そろそろ帰りな。

579 :↑典型例(´∀`):02/12/28 10:13
 

580 :デフォルトの名無しさん:02/12/28 13:45
>>576
.NETのでしょ?
使ってないもので、しかも、試作品のパッチもらっても困るよな。
無料でD8が送られて来たら大歓迎だが(笑

581 :デフォルトの名無しさん:02/12/31 20:52
タイトルバーの高さを求めたいのですが、どうすれば良いんでしょうか?

582 :デフォルトの名無しさん:02/12/31 21:13
げっとしすてむめとりっくす

583 :デフォルトの名無しさん:02/12/31 21:58
>>582
実はImageとフォームの大きさを同じにしたいのですが、
SetBounds(Left, Top, Image.Width, Image.Height + GetSystemMetrics(SM_CYCAPTION));
こうやるとボーダー(?)分幅や高さが足りなくなってしまいます。

こういう場合どうするのが一番良いんでしょうか?

584 :デフォルトの名無しさん:02/12/31 22:10
ClientHeight := Image.Heightとかやる。

585 :デフォルトの名無しさん:03/01/01 01:16
>>583
つーか、「フォーム全面にイメージを載っける=見た目、イメージだけ状態」
にしたいってことでは?もしかして。

586 :デフォルトの名無しさん:03/01/01 01:20
>>584
あ、それでした。さんくすです。
>>585
いや、そうではないです。

587 :デフォルトの名無しさん:03/01/01 01:55
どなたか Shell Namespace Extension をDelphiで使ったことがあるという人いませんか?

588 :デフォルトの名無しさん:03/01/01 01:58
Delphiのソース編集を外部エディタ(TeraPad)でしたいのですが
できないのでしょうか?

589 :Delフサギコ ◆A6VzDeLphI :03/01/01 02:39
           _____________
   ∧,,∧∩  /
  ミ,,゚Д゚彡 < あけ、おめ
  (ミ  ミ   \____________
 〜ミ  ミ
   ∪''∪外部エディタではないが、
       メニューでエディタを切り替えられる方法

[ツール][ツールの設定]を選びませう

[プログラム]
  エディタの指定
    C:\Program Files\EmEditor3\EMEDITOR.EXE
[実行時引数]
  普通にファイルを引数として渡す
    $EDNAME
  EmEditorの場合、行番号も引数に渡すことが可能
    /l $ROW $EDNAME
  一度、Delphiでファイルを保存してから
  EmEditorでファイルを開く方法
    $SAVE /l $ROW $EDNAME


同様に、編集中ファイルのフォルダを開くと
実行ファイルのフォルダを開くを
作っておくと、かなり便利。

590 :デフォルトの名無しさん:03/01/01 02:48
Eclipse で Delphi を使えるようにしる!

591 :588:03/01/01 03:15
>>589
あけましておめでとうございました&ありがとうございました。
Delphiのエディタでフリーカーソルがなくなったらだいぶましになるのになぁと思ってみたり

592 :デフォルトの名無しさん:03/01/01 03:19
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5B%A5%C4%A1%BC%A5%EB%A4%CE%C0%DF%C4%EA%5D%5D

593 :588:03/01/01 03:48
>>589
こういうページがあったんですか
ありがとうございます

594 :デフォルトの名無しさん:03/01/01 03:52
ボーランドの製品は大昔からフリーカーソルなのです。
MSも最初はフリーカーソルだったのに、ラインエディタあたりから変わった。



595 :Delフサギコ ◆A6VzDeLphI :03/01/01 03:58
           _____________
   ∧,,∧∩  /
  ミ,,゚Д゚彡 < おめ あけ
   U  ミ   \
 @ミ  ミ       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪

>>592さん
> 編集中のソースのあるフォルダを開く(ツリービュー有り)
> &Explorer cmd.exe /c delphi_tool_explorer.bat $PATH($EDNAME)

[プログラム]
  エクスプローラを指定、以下のどの指定方法でもOK
    explorer
    explorer.exe
    C:\WINNT\explorer.exe
[作業フォルダ]
  設定しなくてよい
[実行時引数]
  現在開いているファイルのフォルダを開く
    "/n", "/e", $PATH($EDNAME)

こっちでよいのでは?動作確認しました。

あと、コードテンプレートを指定エディタで開くのも
いれておくと、楽に編集できますです。

>>591さん
旧版からの伝統で某に直す気一切なしです
ガリレでもフリーカソのみだったら・・・

596 :西安 ◆CYANlp4LPo :03/01/01 04:03
フリーカーソルまんせー(ぼそっ)

597 :Delフサギコ ◆A6VzDeLphI :03/01/01 04:17
   ∧,,∧
  ミ,,゚Д゚ミy━~~
   U   ミ
俺もマンセですけどね。

フリカ拒絶派も取り込まないと
ガリレが生き残る道は…

単にフリカON/OFFスイチがあればいいだけなのに
無いだけで、IDEくそ呼ばわりですから....

598 :592:03/01/01 04:29
>こっちでよいのでは?動作確認しました。
俺にゆーな。試したんなら直してくれよ。

>あと、コードテンプレートを指定エディタで開くのも
>いれておくと、楽に編集できますです。
こっちは載ってるよ。

599 :Delフサギコ ◆A6VzDeLphI :03/01/01 16:45
  ∧,,∧   Wikiの使い方がわからないのですもの。
 ミ,,゚Д゚彡
 ミつ[|lllll]).
〜ミ   ミ
  ∪''∪ コードテンプレの記述はありました。

  WZの他にEmとか秀の設定があるといいかも。
  あと、編集前に$SAVEは入れた方がいいかと。

600 :デフォルトの名無しさん:03/01/01 21:13
>>599
ヘルプ、読め。最低限の礼儀だ。

601 :デフォルトの名無しさん:03/01/01 23:22
ボーランドが非フリーカーソルをサポートしないのは、
フリーカーソルに慣れて欲しいからかもしれないね。
フリーカーソルの方が便利だから。

非フリーカーソルで、コメント2を追加したい場合はどうするの?

Line1; // コメント1
Line2;

Line1; // コメント1
Line2; // コメント2

602 :デフォルトの名無しさん:03/01/01 23:26
みんなーボーランドと一緒に滅びようなー

603 :デフォルトの名無しさん:03/01/01 23:26
>>601
Line1;の後ろ全選択してコピペ

604 :デフォルトの名無しさん:03/01/01 23:27
>>601
フリーカーソルの方が面倒では?


Line1; // コメント1|←カーソル
Line2;

Line1; // コメント1
Line2;        |←カーソル

Line1; // コメント1
Line2;|←カーソル(BS連打)

Line1; // コメント1
Line2; // コメント2|←カーソル

605 :デフォルトの名無しさん:03/01/02 00:00
フリーカーソル、もう慣れちゃったなー。今更変えられない。

606 :デフォルトの名無しさん:03/01/02 00:19
タブが消えたから分かり難かったです。

 Line1;    // コメント1
 Line2;

 Line1;    // コメント1|←カーソル
 Line2;
 ↓
 Line1;    // |コメント1  Ctrl+← で "コ"に移動
 Line2;
 ↓
 Line1;    |// コメント1  ←を3回押す
 Line2;
 ↓
 Line1;    // コメント1  ↓を押してコメントを書き始める
 Line2;    //

>>603
Line1とLine2の長さが違う場合はどうするのですか?

607 :デフォルトの名無しさん:03/01/02 00:22
>>606

非フリーカーソルの場合、

Line1; // コメント1|←カーソル
Line2;
↓(↓カーソル押)
Line1; // コメント1
Line2;|←カーソル

Line1; // コメント1
Line2; // コメント2|←カーソル


608 :デフォルトの名無しさん:03/01/02 00:22
それに非フリカで矩形選択はどうなるのだろう?

609 :デフォルトの名無しさん:03/01/02 00:24
>>607
じゃ、常に ; の二文字後からコメントが始まるの?
// を縦にそろえたりはしない?

AA;
AAAAA;
AAAAAAAAA;
AAAAAAAAAAAAA;

AA;        // コメント
AAAAA;      // コメントの続き
AAAAAAAAA;    // コメントの続きの続き
AAAAAAAAAAAAA;  // 等など

610 :デフォルトの名無しさん:03/01/02 00:26
◆◇◆◇◆最新情報◆◇◆◇◆
http://yahooo.s2.x-beat.com/linkvp/linkvp.html


611 :デフォルトの名無しさん:03/01/02 00:26
>>608
矩形選択時だけフリカになるだろ。
TeraPadとかほとんどのエディタがそういう手法だが?

612 :デフォルトの名無しさん:03/01/02 00:29
>>608
ボックス選択とカーソルモードは直接的な関係はないと思われ。

613 :デフォルトの名無しさん:03/01/02 00:30
>>611
>フリカ

通ぶって 略語作って 赤っ恥

614 :デフォルトの名無しさん:03/01/02 00:30
非フリカの利点が解らないよ!
行末で→を押すと次の行に移動する事?
リターンキーは使わないのかな…。

615 :デフォルトの名無しさん:03/01/02 00:34
キーマクロも非フリカだと使いにくそうですが。





616 :デフォルトの名無しさん:03/01/02 00:35
>>613
他の人も使ってるけど見えないのかなw

617 :デフォルトの名無しさん:03/01/02 00:39
>>614
Enterしたら改行入っちゃうじゃん。

618 :デフォルトの名無しさん:03/01/02 00:39
結局ボーランドのIDEを使いにくくするための策略でしょ?

619 :デフォルトの名無しさん:03/01/02 00:40
>>617
上書きモードで使うので大丈夫です。

620 :デフォルトの名無しさん:03/01/02 00:41
フリーカーソルかどうかなんて他の欠点と比べれば取るに足らない問題だ。

621 :デフォルトの名無しさん:03/01/02 00:42
でもね、もしDelphiのエディタがメモ帳になったらDelphiを捨てます。

622 :デフォルトの名無しさん:03/01/02 00:44






          結 局 慣 れ              











623 :デフォルトの名無しさん:03/01/02 00:44
Delphiのテキストエディタって矩形選択で右端がキャレットより一つ余分に選択されるやつ。
これ嫌。

624 :デフォルトの名無しさん:03/01/02 00:45
BorlandがTEditor使えば良いんだよ。

625 :デフォルトの名無しさん:03/01/02 00:46
JavaDoc的ドキュメンテーションツールとエディタによるサポートがないのは致命的。


626 :デフォルトの名無しさん:03/01/02 00:57
非フリカで縦書きの時はどうするんだろう?


627 :デフォルトの名無しさん:03/01/02 01:06
自動インデント

628 :デフォルトの名無しさん:03/01/02 01:10
非フリカを売りにしたソフトは無いんだから。



629 :デフォルトの名無しさん:03/01/02 01:11
そりゃWindowsで非フリカは当たり前だからね。

630 :デフォルトの名無しさん:03/01/02 01:25
最初のWindowsでは技術が無くてフリーカーソルに出来なかったんでしょ。

631 :デフォルトの名無しさん:03/01/02 01:32
>>630
ンナバカナ

632 :デフォルトの名無しさん:03/01/02 02:58
TPictureにLoadFromStreamってありますよね?
Image.Picture.LoadFromStreamとやろうとしても未定義の識別子と怒られてしまいます。

ヘルプ見てもやっぱりあるようなのですが…何か勘違いしてます?

633 :デフォルトの名無しさん:03/01/02 03:15
Imageがないんじゃないの。

634 :デフォルトの名無しさん:03/01/02 03:16
Image.Picture.Graphic.LoadFromStreamだといけるんでそれはないかなと思います。

635 :デフォルトの名無しさん:03/01/02 03:20
TPicture.LoadFromStreamはないよ。
ヘルプ確認してみ。

636 :デフォルトの名無しさん:03/01/02 03:21
TPicture.LoadFromStream

TPicture参照
LoadFromStream メソッドは,Stream から画像を読み出します。

procedure LoadFromStream(Stream: TStream);

説明

LoadFromStream を使うと,TStream オブジェクトから画像を読み出すことができます。作成される TGraphic クラスは,ストリームに格納されているデータの型によって指定されます。
ストリーム内のデータは,別の TPicture オブジェクトまたは TGraphic の下位オブジェクトの SaveToStream メソッドへの呼び出しによって書き込まれたものです。

637 :デフォルトの名無しさん:03/01/02 03:23
それはCLXリファレンスな罠

638 :デフォルトの名無しさん:03/01/02 03:25
う、そうでした…。
なんかImage.Picture.Graphic.LoadFromStream(StringStream);だとエラーが出るんで使えるのかと思ってました。

639 :638:03/01/02 03:36
Image.Picture.LoadFromFile('test.jpg');
だと大丈夫なんですが、
Image.Picture.Graphic.LoadFromFile('test.jpg');
だとエラーが出てしまいます。

これって何が原因なんでしょうか?

640 :デフォルトの名無しさん:03/01/02 03:52
>>639
何のエラーが出るの?

641 :デフォルトの名無しさん:03/01/02 03:58
Graphicが作成されていない

642 :カラス:03/01/02 05:22
アホー


643 :デフォルトの名無しさん:03/01/02 10:01
Delphiのエディタで時々Enterキーを押しても
改行に成らないときがあるのですが
どうしたら元に(改行するように)戻るのでしょうか?

644 :デフォルトの名無しさん:03/01/02 10:05
Insert

645 :643:03/01/02 11:21
>>644
ありがとうございます 治りました
こんな基本的なこと聞いてすいませんでした。

646 :デフォルトの名無しさん:03/01/02 15:00
>>641
実はBitmapとJPEGの両方を対応したいのですが、
Image.Picture.Graphic := TJPEGImage.Create;
とやるとBitmapが読めなくなってしまいます。

本当は自動的にグラフィックデータのフォーマットを判別するTPictureを使いたいのですが、
TPictureにはLoadFromStreamないようなので困っています。

647 :デフォルトの名無しさん:03/01/02 15:21
Bitmap→PNGでした スマソ

648 :デフォルトの名無しさん:03/01/02 15:57
>>646
君の考えている方法とは違うけど、俺ならこうする。
procedure TMainForm.OpenMenuItemClick(Sender: TObject);
var
  FName: string;
  ext: string;
  png: TGLDPNG;
begin
  if OpenPictureDialog.Execute then
  begin
    FName := OpenPictureDialog.FileName;
    ext := LowerCase(ExtractFileExt(FName));
    if ext = '.png' then
    begin
      png := TGLDPNG.Create;
      try
        png.LoadFromFile(FName);
        Image.Picture.Assign(png);  // Image: TImage;
      finally
        png.Free;
      end;
    end else if (ext = '.bmp') or (ext = '.jpg') or (ext = '.jpeg') then
    begin
      Image.Picture.LoadFromFile(FName);
    end;
  end;
end;


649 :カラス:03/01/03 02:19
バカー

650 :デフォルトの名無しさん:03/01/04 13:50
TWebBrowserでHttpのステータスコードを取得する方法ってありますか?

651 :デフォルトの名無しさん:03/01/04 23:34
>>650
無い。

652 :デフォルトの名無しさん:03/01/05 00:23
初歩的な質問で申し訳ないのですが・・・

TCard = class 〜〜 end;
TEventCard = class(TCard) 〜〜 end;
THappenCard = class(TCard) 〜〜 end;

というTCardを基底にした2種類のクラスがあり、
この2種類のどちらも格納できる配列を作成したいのですが、
その場合、Array of TCard とすれば問題ないのでしょうか?
もし、その配列に TEventCard を TCard に型キャストして代入したとすると、
TEventCard で拡張したフィールド変数などの情報は保持されるのでしょうか?

653 :デフォルトの名無しさん:03/01/05 00:30
されるよ。参照するときは(arr[n] as TEventCard)すれば良し。

654 :デフォルトの名無しさん:03/01/05 00:30
>>652
問題ないです。キャストが必要なのは値を取り出す場合のみです。保持されます。


655 :デフォルトの名無しさん:03/01/05 00:36
>>653-654
良くわかりました。
素早い御回答ありがとうございます。

656 :1000:03/01/05 02:45
1000getおめ♪

657 :993:03/01/05 02:47
ゴメソ、質問さしてください。

TForm.OnCloseQuery で分岐処理をしていて、TForm.Close メソッドを呼び出しても
必ずしも Form が閉じられるとは限らない場合、当該 Form が閉じられたかどうか
確認するにはどうすればいいのでしょうか。

658 :デフォルトの名無しさん:03/01/05 02:50
埋めてる奴氏ねよ。マジ迷惑なんだよ。

>>657
Form.Visible

659 :デフォルトの名無しさん:03/01/05 02:53
死ねって言われて死ぬのはおまえぐらい。プ

660 :Delフサギコ ◆A6VzDeLphI :03/01/05 02:54
           D6Up2のdemoプログラムで
    ∧,,∧  カスタマイズダイアログで
   ミ,,゚Д゚彡   ActionMainMenuBar
    ミ つ旦)~~  に"戻る"を押すと
  〜と,,,~),,~)   MainMenuが消えますね。なぜかしら。

  あと、ヒントのショートカット表示の動作が変かな?

  ちょっともてあそべば、使えるものに
  なるような気がするような、しないような。

とりあえず、ここのサンプルは勉強になるでしょう。
http://homepages.borland.com/strefethen/info/ABExpressTutorial.htm

いろいろ触ったけど
MainMenuBarだけカスタマイズOFF
という動作は出来ないみたい。
MainMenuだけは違うクラスを使った方がいいかもね。
(DelphiIDEもMenuは違うもの使っているみたいだし)
ツールバーカスタマイズに関してはそれなりに使えそうな手ごたえでした。

661 :675:03/01/05 02:57
>>658
TForm.OnClose で Action := caHide にしている場合には、Visible で
判定できそうですが Action := caFree にしている時はどうなんでしょう。
おそらく Form のメンバにアクセスしない方がいいとおもうので、
外部にフラグを用意して OnClose でセットするくらいしかないのでしょうか?

662 :デフォルトの名無しさん:03/01/05 03:03
Delphiはぬるぽないんだっけ?

663 :デフォルトの名無しさん:03/01/05 03:05
>>661
ShowModalではなくShowしてるんならフラグしかないね。

>>662
nil


664 :675:03/01/05 03:16
>>663
サンクス、おんにきります。


665 :Delフサギコ ◆A6VzDeLphI :03/01/05 03:51
          ActionManager
 / ̄ \   いろいろ試したけど
0⌒>   ヽ   [Tools][customize]
  ⊂ニニニ⊃  のメニュー部分だけ変更させたくない
  ミ,,゚Д゚,彡   って動作は出来ないみたい…
  ミ,つ酒O
  と,,,~),,~)   

なんとなく、なのですが
ActMainMenuは使いにくい
オブジェクトツリーがないとオブジェクト選択も難しいっす。

666 :デフォルトの名無しさん:03/01/05 04:18
モナースレの>990さんどうもありがとうございました
がんばって作ってみます

667 :デフォルトの名無しさん:03/01/05 04:55
>>665
季節外れだな。

668 :ComboBox1:03/01/05 08:58
ComboBoxについて質問です。

ComboBoxのイベントは OnClose → OnChange の順で起きる
のですが、OnCloseの時点で選択肢に変化があったかどうかを認識し、
それにより動作を変えたいです。

これを実現するにはどうしたらよいでしょうか。

669 :650:03/01/05 14:33
本当にTWebBrowserでHttpのステータスコードを取得する方法ってないのでしょうか?
Webを参照するプログラムを作っているのですが、どうしてもHTTPのステータス情報が
必要なのです。
WinInetで作成する方法も考えたのですが、TWebBrowserを使用するほうがはるかに
簡単なのです。(Httpステータスコードさえ解決すれば、すべて解決するのです。)
誰かTWebBrowserでHttpのステータスコードを取得する方法を見つけてください。


670 :デフォルトの名無しさん:03/01/05 14:40
型違いの質問です

'String' と 'Cardinal' には互換性がありません
'TStrings' と 'Cardinal' には互換性がありません
が出てくるんですが、どうやって互換性があるようにすればよいでしょうか


671 :て。 ◆qnISHi2Po. :03/01/05 14:46
これくらいなら答えられるぞ

Mojirets → String   Mojiretsus → TStrings  Tsuka → Cardinal として

Mojiretsu := Format('%d', [Tsuka]);
Mojiretsus.Text := Format('%d', [Tsuka]);

Tsuka := StrToInt(Mojiretsu);
Tsuka := StrToInt(Mojiretsus.Text);


672 :デフォルトの名無しさん:03/01/05 14:56
>>669
ここで答えが出ないなら

IEコンポーネントを使い倒すスレ
http://pc3.2ch.net/test/read.cgi/tech/982930049/

673 :デフォルトの名無しさん:03/01/05 15:03
>>669
こんな奴がプログラミングすんな
マジで

674 :デフォルトの名無しさん:03/01/05 15:15
OSの再インストールしたいんだけど
Delphi6のバックアップはどうすればいいの?
Borland\以下のファイルとレジストリコピーして
OSとDelの再インストールが終わったらまた上書きすればいい?


675 :20歳男:03/01/05 15:27
去年までヲチ専門だったけど、htmlタグとJavaScriptでサイト作って
二年で350万hitした。一度やってみなよ。
初回のみだけど、1枚以上のオパーイ画像晒せば4000hitくらいカウンタ回る。
転用されるだけされて警告せずにアク禁することもできるし、裁判で白か黒に
思い切って訴えてしまえば50パーセントで神になる。
カッコ良きゃオフラインでセクースすればいいだけ。暇つぶしになる。
ビデオはめ撮りとかスカトロとか色々あるのでマジでお勧め。

676 :デフォルトの名無しさん:03/01/05 15:36
なんだこのバカは。
20歳にもなってこんなレベルの人間もいるのか...。

677 :670:03/01/05 15:40
>>て。
サンスク
自分はまだ入った事のない領域だ(?)

678 :デフォルトの名無しさん:03/01/05 17:54
>>675
もっと面白く改良しろバカ。

679 :て。 ◆qnISHi2Po. :03/01/05 20:08
最小化したときにタスクトレイにアイコンを表示して
そいつをクリックで復活させたいんだけどウィンドウは復活するんだけど
どうしても復活したときにウィンドウが前面に来てくんないよ 色々やってみたけどどうしてもだめ
どうしたらいいんでしょ? 田舎帰ろうかな

{ 最小化から復活したとき }
procedure TForm1.appRestore(Sender: TObject);
begin
 Shell_NotifyIcon(NIM_DELETE, @FIconData);
 SetWindowPos(Form1.Handle, HWND_TOP, 0,0,0,0,SWP_SHOWWINDOW + SWP_NOSIZE + SWP_NOMOVE );
 SetActiveWindow(Form1.Handle);
end;


680 :デフォルトの名無しさん:03/01/05 20:10
TopMostして解除(藁

681 :デフォルトの名無しさん:03/01/05 20:13
帰れ。

682 :デフォルトの名無しさん:03/01/05 20:51
>>665はサンタさん?

683 :て。 ◆qnISHi2Po. :03/01/05 20:54
>>680
あ できた ありがと

と思ったら一番前にいるのにアクティブにならん タイトルバーがグレイだ Why!?
SetActiveWindow(Form1.Handle); ってしても
Form1.Activate; ってしてもだめだ    どちて?

684 :デフォルトの名無しさん:03/01/05 21:10
http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_allowsetforegroundwindow.htm

685 :て。 ◆qnISHi2Po. :03/01/05 21:54
>>684
できた 激しく感謝

686 :デフォルトの名無しさん:03/01/05 22:18
コードくれくれ

687 :て。 ◆qnISHi2Po. :03/01/05 22:27
>>686
 function AllowSetForegroundWindow(dwProcessId: DWORD): BOOL ; stdcall; external 'user32.dll' name 'AllowSetForegroundWindow'; stdcall;
↑をどっか見えるとこに書いて


{ 最小化から復活したとき }
procedure TForm1.appRestore(Sender: TObject);
var
 PID : DWORD;
begin
 Shell_NotifyIcon(NIM_DELETE, @FIconData);
 SetWindowPos(Form1.Handle, HWND_TOPMOST, 0,0,0,0,SWP_NOSIZE + SWP_NOMOVE + SWP_SHOWWINDOW);
 SetWindowPos(Form1.Handle, HWND_NOTOPMOST, 0,0,0,0,SWP_NOSIZE + SWP_NOMOVE + SWP_SHOWWINDOW);
 GetWindowThreadProcessId(Application.Handle, @PID);
 AllowSetForegroundWindow(PID);
 SetForegroundWindow(Application.Handle);
end;

とやったらできたよ

688 :デフォルトの名無しさん:03/01/05 23:22
Httpのステータスコードってな〜に〜?

689 :デフォルトの名無しさん:03/01/05 23:28
Q D6パーソナルにアクションマネージャーは?
A ありません
↑これって、字数の関係で>>1に書けなかったのかもしれないけど
>>1に書くべきでは…
最近は無いか…。この質問。

690 :デフォルトの名無しさん:03/01/05 23:53
WikiのFAQにリンクすればいいんでしょ

691 :デフォルトの名無しさん:03/01/06 01:14
>>688
200 とか 404 とかだろ

692 :デフォルトの名無しさん:03/01/06 02:02
>>688
403 とか 501 とかだよ

693 :668:03/01/06 05:28
自己解決出来ましたので一応ご報告。
コンボボックスを開くときにitemindexの値を変数に取得しておき、
OnCloseUpイベントでitemindexに変化があったかどうかを比較
することで変化の有無に応じて動作を変えることに成功しました。(^^;

694 :デフォルトの名無しさん:03/01/06 06:32
>>677
あの内容でわかったのか?

695 :688:03/01/06 07:33
レス番号だと思った。 そして、別スレッドで接続させたいのかと思った。
TWebBrowserってIEコンポーネントをつかうのれすね。
最初の HTTP/1.0 302 Found が欲しいと。


696 :デフォルトの名無しさん:03/01/06 12:59
TTreeViewのノードをクラスで管理したいと思い
下のようなサンプルプログラムを書いてみたのですが
これだとTreeviewのノードをクリックしたときにエラーが出てしまいます。。
よろしかったら良い方法を教えて頂けないでしょうか?


type
TForm1 = class(TForm)
TreeView1: TTreeView;
Edit1: TEdit;
Memo1: TMemo;
Button1: TButton;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
end;

TTreeItem = class
private
FTitle: String;
FData: String;
procedure SetData(const Value: String);
procedure SetTitle(const Value: String);
public
property Title: String read FTitle write SetTitle;
property Data: String read FData write SetData;
end;

697 :696の続き:03/01/06 13:02
procedure TForm1.Button1Click(Sender: TObject);
var
NewItem: TTreeItem;
begin
NewItem := TTreeItem.Create;
try
NewItem.Title := Edit1.Text;
NewItem.Data := Memo1.Text;
TreeView1.Items.AddObject(nil, NewItem.Title, @NewItem);
finally
NewItem.Free;
end;
end;
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Node: TTreeNode;
begin
Node := TreeView1.GetNodeAt(X, Y);
if Node = nil then Exit;
Memo2.Lines.Add(TTreeItem(Node.Data).Data);
end;

698 :697の続き:03/01/06 13:02
{ TTreeItem }
procedure TTreeItem.SetData(const Value: String);
begin
FData := Value;
end;

procedure TTreeItem.SetTitle(const Value: String);
begin
FTitle := Value;
end;


699 :デフォルトの名無しさん:03/01/06 13:15
NewItem.Free;

してしまったものに

Memo2.Lines.Add(TTreeItem(Node.Data).Data);


でアクセスするからでしょ

Node.Data に格納されるのは参照だけ。本体を free しちゃだめでしょ

700 :デフォルトの名無しさん:03/01/06 13:16
TTreeItem(Node.Data)が危険なような。
Assigned(Node.Data) and (TObject(Node.Data) is TTreeItem)もチェックしたら。

701 :696:03/01/06 14:51
>>699
>>700
参照だけなんすね。。ありがとうございます。
FreeをForm1のDestroy時に持っていって
MouseDownイベントを以下のようにしたのですが
EAccesViotationのエラーが出てしまいます。。

procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Node: TTreeNode;
begin
Node := TreeView1.GetNodeAt(X, Y);
if Node = nil then Exit;
if Assigned(Node.Data) and (TObject(Node.Data) is TTreeItem) then
Memo2.Lines.Add(TTreeItem(Node.Data).Data);
end;


702 :デフォルトの名無しさん:03/01/06 15:07
ふーむ、あとあやしいのは

TreeView1.Items.AddObject(nil, NewItem.Title, @NewItem);

で、@NewItem じゃなくて pointer(NewItem) じゃないかと思ふ

703 :696:03/01/06 17:38
>>702
あ、うまくいきました。
pointerにキャストと@ 演算子は違うものが
入るんですね。。中身を調べてみたら違ってました。
そこら辺また勉強しなおします。
>>702さんみなさんありがとうございました。


704 :696:03/01/06 18:23
恥ずかしながらもう一つ質問です。。
>>701
>FreeをForm1のDestroy時に持っていって
と書いたものの、Form1のDestroy時は
procedure TForm1.FormDestroy(Sender: TObject);
var
i: Integer;
begin
for i := TreeView1.Items.Count -1 downto 0 do
TreeView1.Items[i].Delete;
end;
のようにノードを解放すれば
NewItem := TTreeItem.Create;
で得たメモリは解放されるのでしょうか?

705 :デフォルトの名無しさん:03/01/06 19:55
>のようにノードを解放すれば
>NewItem := TTreeItem.Create;
>で得たメモリは解放されるのでしょうか?

開放されない。ノードを削除する前に
TTreeItem(Node.Data).Free を実行しないとダメ。
だって、TTreeNode.Data は Pointer であって、それに
何を格納しているか、TreeNode 自身は知らないわけですし。

706 :デフォルトの名無しさん:03/01/06 19:58
>TTreeItem(Node.Data).Free を実行しないとダメ。

実際の >>704 のコードでは、

TreeView1.Items[i].Delete;

の前に

TTreeItem(TreeView1.Items[i].Data).Free;

を実行します。

707 :デフォルトの名無しさん:03/01/06 20:06
706です。
あぁ、レベルの違いがあって削除するのはめんどくさいね。

TreeViewの各ノードのDataにAddするときに、別にリストとして保持しておけばいいよ。
TListを使えば純粋にリストとして保持できるし、TObjectListを使えば自動的に
メモリを解放することもできる。


708 :696:03/01/06 20:30
>>705>>706>>707
なるほど、そういった方法もあるんですね。
TObjectListを使ってもう一回書いてみます。
ありがとございます!

709 :ねこま:03/01/07 00:30
OnDeletion


710 :デフォルトの名無しさん:03/01/07 01:15
Form1とForm2と作成。
Form1がメインフォームね。
Form1とForm2と両方とも開いている状態で
タイマーでも通信でも何でも良いんだけど、
非ビジュアルな(?)方法でForm1からForm2.Closeするようにコーディング。
普通に動かすとForm2.CloseでちゃんとForm2が閉じるんだけど、
アプリケーションを最小化した状態でForm2.Closeするとなんかおかしい。
タスクバーのアプリケーションをクリックして
最小化を解除すると、Form2が残りっぱなしになってる。
しかも、この生き残りのForm2は×ボタンをクリックしても閉じない。

Form2.Hideでも同様の現象でした。
デバッガーで除いてみるとHide後、Form2.VisibleはFalseになってる。
にもかかわらず、画面上にForm2はちゃんと表示されている。
Delphi(というかWindows)ってこういうもんなの?

ガイシュツだったらスマソ。


711 :デフォルトの名無しさん:03/01/07 07:55
>>710
ありがとう。最小化した状態で勝手にクローズはしないと思うけど、覚えておくよ

712 :デフォルトの名無しさん:03/01/07 23:26
>>710
激しくガイシュツ。VCL読んでみれ。

あ、あと、Windows固有の現象ではないぜよ。
Kylix2でも再現できるはずだす。


713 :デフォルトの名無しさん:03/01/07 23:55
TCoolBarにTToolBarを何個か置くソフトを作っているのですが
TToolBarをD&Dして移動させた後の状態を保存するにはどうすれば
良いのでしょうか?
TToolBarのTop,LeftをINIファイルで保存、読み込みなどはしてみたのですか
うまくいかないです。。

714 : :03/01/08 01:41
プラウザのボタンや、テキストボックスに文字を入力したりって、
Delphiでプログラムは可能ですか?。

例えば、http://www.google.com/のテキストボックスに
検索したいキーワード(ActiveX DOM取得など)を入力して
ボタンを押すまでの処理を自動化させるには、どうすれば良いでしょうか。



715 :デフォルトの名無しさん:03/01/08 01:44
>>714
マルチすんな。クソボケ。

716 :714です:03/01/08 01:59
解決しました。

717 :マルチ用レス:03/01/08 02:00
>>714
>プラウザのボタンや、テキストボックスに文字を入力したりって、
>Delphiでプログラムは可能ですか?。
可能かもネ。

>例えば、http://www.google.com/のテキストボックスに
>検索したいキーワード(ActiveX DOM取得など)を入力して
>ボタンを押すまでの処理を自動化させるには、どうすれば良いでしょうか。
努力すればいいです。

718 :デフォルトの名無しさん:03/01/08 02:17
>>710
なんで? Close内でReleaseが呼ばれてちゃんと開放されるんじゃないの?

719 :デフォルトの名無しさん:03/01/08 05:55
>>718

ん?CloseとReleaseは関係ないのでは?


720 :718:03/01/08 06:58
ゴメーン。 caHide になってた。


721 :デフォルトの名無しさん:03/01/08 13:11
for i:=0 to hoge do begin
 temp := fuga[i]; ・・・・・

を記述したとき、もし何らかの原因で hoge に負の値が入ってしまった場合、
動作は予測できるものなのでしょうか?

実は、アクセス違反が不定な位置で出現するようになってしまい、一番
疑わしいのがコレなのです。IDEから実行しても何もエラーを吐かなかったので
疑いもしなかったのですが、環境を変えるとピョコピョコ出るんです・・・。

722 :デフォルトの名無しさん:03/01/08 14:02
>>721

負なら実行されないはず、どうしても不安ならこうしちゃうとか..w

if hoge >= 0 then
 begin
  for i:=0 to hoge do
   begin
    temp := fuga[i]; ・・・・・
   end;
 end;

これでワナを張っとくと解りやすい鴨。
if hoge < 0 then begin showmessage('hogeが負になってるゾ') end;

723 :デフォルトの名無しさん:03/01/08 14:28
>>722
たしかに、最初から 0 to -1 とかにするとコンパイル時にループが削除されますね。
動的に-1を入れても実行されませんでした。ということは、他の部分なんですね・・・。

疑わしい場所ぜんぶに try except を張って、どこで例外が
発生してるかを見るしかないようです。ショボン
(このとき、Delphiの例外か、OSの例外かというのは関係ないのでしょうか?)

724 :デフォルトの名無しさん:03/01/08 14:34
>>723
アクセス違反が不定な位置で出るのは、その出た位置ではなく

1、配列境界を越えたりして、スタック等別の領域への爆弾を落とした後
2、解放してしまったオブジェクトにアクセスしてしまった誤爆

とかで、爆弾を落としたり、誤爆を探さないといけませんよ。

だから、例外で捕捉してもみつからない事が多いです


725 :デフォルトの名無しさん:03/01/08 15:21
>>724
Σ(・ω・ノ)ノ す、すみません、一度で理解できませんでした・・・。

AccessViolationは、1) 割り当てられていない領域に手を出したとき、
2) あると思ったものが無かったとき、に発生という認識だったのですが、
これが不定に起こるということは・・・自分が確保したメモリ外の領域に書いてしまい、
それが消えてしまった → アクセスしたら何もない、ということ等でしょうか。
こればかりは簡単に検出できないか・・・。

(例外で落ちるとNTがログを吐きますが、これを見てもクラッシュした近辺は
わかっても誤爆した位置はわからないんですよね・・・。)

726 :デフォルトの名無しさん:03/01/08 15:32
ログから判る事もあるけど、不定に起こるような場合、そこから調べるよりは
 配列の境界違反あたりから調べてゆく方がいいです。

とりあえず{$R+}から


727 :デフォルトの名無しさん:03/01/08 15:58
ありがとうございます。怪しいと思われる場所で試してみます。
(境界違反が毎回発生してくれてれば有り難いのですが・・・。)

728 :デフォルトの名無しさんlo:03/01/08 16:19
ウィンドウのリサイズを禁止するにはどうすればいいんですか?
初歩的な質問ですみません。

729 :デフォルトの名無しさん:03/01/08 16:27
BorderStyle の事? D6/D7なら Constraints で固定しても変更は出来ないけど 

730 :デフォルトの名無しさん:03/01/08 18:15
Delphi7でコンパイルしたプログラムがWin98やWinMEだと
正常にプログラムが起動しないらしいのですが、
Win2000やXPだとちゃんと動きます、
当方には既にWin98/MEの環境が無いので検証できないのですが、
このバグ?をメールで知らせてくれた人に協力してもらって
ソース部分を全て削除してEdit,ComboBox,ListBox,TImageが
フォームに張り付いただけのハリボテを作成して、
それでテストしてもらいましたが、
やはり フォームが表示される前にプログラムが落ちるとの事です。
同じプログラム(ハリボテの方)をDelphi5で
コンパイルしたモノはちゃんと起動するみたいなのですが・・・・。

Delphi7でコンパイルしたプログラムはWin98やMEでは動かない
ものなのでしょうか??

731 :デフォルトの名無しさんlo:03/01/08 18:17
>>729
ありがとうございました!

732 :デフォルトの名無しさん:03/01/08 18:29
>>730
そういう時は例えば
http://preview.connectix.com/trial/jp/
こんなの入れて Win98をインストールしたら?

733 :お茶はいかが:03/01/08 20:10
文化オリエントのLEADTOOL10をDelphi6pro(アップデート2済み) + Win2000SP2
+ IE6SP2 の環境でLEAD Main Control をActiveX登録したところ、コンポーネン
トパレットには登録されているのにフォームに貼り付けようとすると「vcl60.bpl
のアドレスxxxxxで読み込み違反が起きた...」というエラーが表示され貼り付け
が失敗します。更にもう一度、同じ手順を踏むと、「フィールドメソッド名LEAD1
は既に定義済みです」とエラー表示します。ちなみに、アクロバットリーダーの
ActiveXコントロール等は同じ登録方法ですが問題ありません。OS初期化や
再Delphiインストールもやってみました。VB6SP5では問題無く使用できます。
どなたか解決法をご存知の方いらっしゃればご教授くださいませんか?



734 :デフォルトの名無しさん:03/01/08 20:39
ども。
モナーの *やさしい* Delphi質問スレ Ver.9が落ちちゃいましたね。
で、質問が…

IMEの再変換がしたいんですが、いろいろ調べた結果、「MSIME.TLB」がいるようです。
環境がWinXP,OfficeXP,IME2002なので入ってないんですよ、これが。
どこからか手に入れられますかね???
もし違法でもよければアップしてもらうとか(w

よろしくお願いします(MSIME.TLBだけあってもできなかったら悲しい...)

735 :デフォルトの名無しさん:03/01/08 20:53
その TLB は VB専用では?
詳しい情報は
http://www.users.gr.jp/ml/archive/delphi/55123.asp


736 :デフォルトの名無しさん:03/01/08 21:05
>>735
回答ども。

うーん、VB専用なんですか。
でも、使用しているエディタコンポーネント、TSonEditってやつがMSIME.TLBがあれば
再変換が簡単に実装できるようになってるんです。
でもないことには始まらない…

737 :IP記録実験:03/01/08 21:15
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。

738 :725:03/01/08 21:31
>>724 >>726
いま怪しい部分に {$R+} を適用して実験しています。

ですが、かなりの時間動かしても、特に範囲エラー例外などは出てきません。
コレのバイナリを、デバッガのない環境に持っていってもチェックできるのでしょうか?
でしたら、"なぜか例外が出るマシン"の持ち主に送ってみて、ERangeErrorが出るか確認しようと思うのですが・・・。

739 :デフォルトの名無しさん:03/01/08 21:50
>>738
それなら配列範囲外ではないのでは?
・ポインタを使っていませんか?
・型変換を使っていませんか?
・スレッドを使っていませんか?

740 :デフォルトの名無しさん:03/01/08 23:05
>>730
俺はWIN98SEにDelphi7インストールして開発してるし正常動作してる。
「メールで知らせてくれた人」の環境が腐ってる可能性もあるぞ。
あるいはCLXで作ってるとか。

741 :725:03/01/08 23:42
やはり範囲外アクセスではないようです(;´Д`)ナニモ デナイ

>>739
ポインタは使ってません。アタマがついてってないので・・・。
型変換は、数値表示用に IntToStr等が点在しています。
スレッドは意図して使ってはいませんが、別スレッドで動くVCL(というかタイマー)があります。

742 :デフォルトの名無しさん:03/01/08 23:44
大麻ってTTimerか?それともマルチメディアタイマか?
後者ならあぼーん。

743 :デフォルトの名無しさん:03/01/08 23:45
> スレッドで動くVCL(というかタイマー)があります。
その辺、もっと詳しく。
VCL標準のTTimerは今のところスレッドではない。
VCLが単なるコンポーネントをさしていて、タイマーがマルチメディアタイマーのことなら、
それはマルチスレッドになっているので、注意しなくてはならない。


744 :デフォルトの名無しさん:03/01/08 23:45
すまぬ。「スレッド」を「別スレッド」に読み替えてくれ

745 :デフォルトの名無しさん:03/01/08 23:47
>>730
D7が出た頃に誰か似たようなことを書いてたよ、
うろ覚えなんで正しくないかもしれんが
コンボかリストか忘れたけどリスト内に文字なし("")があると
落ちるとか落ちないとか.(Win95の話だったかも)


746 :725:03/01/09 02:06
>>742-743
あ、使っているのはMMTimerです。(TTimerは精度が悪かったので)

別スレッドで動くとは聞いていまして、一応オブジェクトへのアクセスはMMTimer.OnTimer内から
だけ行うものとそれ以外で分け、ぶつからないように気を付けてはいるのですが・・・。
(あっ、何カ所かOnTimer内でWriteしてそれ以外でReadするのがあったような・・・)

747 :デフォルトの名無しさん:03/01/09 02:45
祈念かきーこ

>>ヒロユキタン

いつまでやるですか?

748 :デフォルトの名無しさん:03/01/09 02:56
Del7をインストールしてみた。Del5からの移行なんだけど、どうも慣れない。

一番気になるのが、エディタの文字の横の文字間隔がなんだか広くなってること。
フォントのサイズ変えても縦に小さくなっても横幅は変わらず。

これはどっかで変更できるんでしょか?

749 :デフォルトの名無しさん:03/01/09 04:11
>>374
ZBsKvw39 みたいな厚顔無恥さも必要だね

750 :デフォルトの名無しさん:03/01/09 10:27
D6Personalでメモ帳トラッパー2.33改のソースを改造してビルドしたんだけど、
状況依存型のヘルプがポップアップじゃなくてヘルプのウィンドウの中にできてしまう。
こんなはずじゃなかったんだけど。


751 :デフォルトの名無しさん:03/01/09 11:06
>>748
Boldになってんじゃねーの?

752 :748:03/01/09 12:20
>751
それはないっす。

実際比べてみれば一目瞭然。右マージンの位置が全然違うから。
それともうちだけ?

753 :ななしへたぐらま ◆XcB18Bks.Y :03/01/09 14:28
>>748
Del7は未体験ですがDel6からBoldにしなくても
文字間隔が広いままのようですね.

私の場合は広くなること自体よりも
それによって文字間隔が空くために格好悪いのが気になりました.

『MS ゴシック』や『MS 明朝』ではそれほど気にならなかったのですが
手持ちのヒラギノやダイナフォントだと間延びして気持ち悪かったです.
買うかどうかわからないけどガリでは改善してほしいです.

最近使っている『Osaka - 等幅』(12または9ポイント)は
Del6で試していませんがDel5で予約語だけBoldにして
間延びチェックをした限りでは比較的気になりませんでした.


754 :デフォルトの名無しさん:03/01/09 16:08
>買うかどうかわからないけどガリでは改善してほしいです.
ここに書いても意味無いと思うが?

755 :デフォルトの名無しさん:03/01/09 18:20
うーん、Del6からだったのね・・・

あのスカスカ感がかなり気持ち悪いけど、しょうがないのか・・・。
ついでに言えばメインメニューのスカスカ感も同時に気になる。

実際の機能や操作には全く関係の無い趣味的な問題だけに
どうしようもないなー

756 :デフォルトの名無しさん:03/01/09 20:43
老舗の TurboPower が解散し、Jedi も活動停止。
2003 年は年明けから暗い話ばかりだ...

757 :デフォルトの名無しさん:03/01/10 00:12
馬鹿yahooがニュースにしたりするから、
何も知らんような奴が流れ込んで来る
あとZDnetも何かにつけて2chネタばっかり書きすぎ

758 :748:03/01/10 00:44
すんません、解決しました。>751のいうとおりでした。

HTMLタグのみBoldになってました。一つでもBoldがあると
全部影響受けるんだね・・・

759 :デフォルトの名無しさん:03/01/10 02:11
TToolBarにTBevelやFlatなSpeedButtonを置くと勝手にセパレータの表示に
なっちゃうのはどうすればよろしいでしょか?

760 :デフォルトの名無しさん:03/01/10 02:19
でっかいパネル置いてその中でやりくりしれ

761 :デフォルトの名無しさん:03/01/10 10:21
>>148
グッジョブ


762 :デフォルトの名無しさん:03/01/10 10:33
最近いろんな板のいろんなスレで、わけわかんない番号に
意味不明のレスをつけてるやつがいるんだけど、何?
どっかとまざってんのか?

763 :デフォルトの名無しさん:03/01/10 10:59
IP取ってる板

>>148>>15>>150


764 :デフォルトの名無しさん:03/01/10 10:59
>>762
IP記録に反対する荒らしだと思われ。

765 :デフォルトの名無しさん:03/01/10 10:58
>>762
既知外がいるんだよ...

http://pc3.2ch.net/test/read.cgi/tech/1029122103/n226-229
ということらしい。

766 :デフォルトの名無しさん:03/01/10 11:29
なんか、復活した。

ハングル。

767 :ななしへたぐらま ◆XcB18Bks.Y :03/01/10 12:10
>>758
ということはエディタの文字間隔がBoldなしでも大きくなってしまうのは
Del6だけということなのでしょうか.
(それとも私の見間違えだったのでしょうか…)


768 :デフォルトの名無しさん:03/01/10 12:11
サンクス

今後は書き込みは無いものとして脳内補完しまつ

769 :デフォルトの名無しさん:03/01/10 12:13
>767

どうでしょ?
とりあえず、普段つかわないような項目が実はこっそりBoldになってないか
調べてみたらいいかも

770 :デフォルトの名無しさん:03/01/10 12:16
とにかく2ちゃんは人が減るのを一番恐れている。


771 :デフォルトの名無しさん:03/01/10 12:45
>>916
YAHOOってめんどくさくない?

772 :デフォルトの名無しさん:03/01/10 13:42
弱虫と優しさの協奏曲。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。





















ガンバレオマエラ

773 :デフォルトの名無しさん:03/01/10 14:51
TPicture を使えばいいのに……

774 :デフォルトの名無しさん:03/01/10 14:53
うさたん ★ひさしぶりにみたの
はあはあなの

775 :デフォルトの名無しさん:03/01/10 15:19
>>767
Del2からDel6まで使ってるけど、特に文字間隔に関しては変更なかったと思うよ。

776 :デフォルトの名無しさん:03/01/10 16:21
217 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:49 ID:rLfxQ17l
   一定期間でログは消しますです。

249 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:52 ID:rLfxQ17l
   >荒らしとか犯罪のためなの?
   そす。

246 名前:心得をよく読みましょう[] 投稿日:03/01/08 17:52 ID:BH998yxV
   >ひろゆき
   俺のお気に入りのスレとか荒されてるんだがそういうのにも有効?

257 名前:ひろゆき ◆3SHRUNYAXA [] 投稿日:03/01/08 17:53 ID:rLfxQ17l
   
   いずれは。

777 :デフォルトの名無しさん:03/01/10 19:46
「アドレスFFFFFFFFに対する読み込み違反」とかいうエラーには、なにか
特別な意味があるのでしょうか?通常では使わないですよね、そんなトコロ・・・。

778 :デフォルトの名無しさん:03/01/10 19:53
-1が入っているメモリを、間違えてアドレスと解釈して使ってしまった場合とか?

779 :デフォルトの名無しさん:03/01/10 22:46
>>389さん
(笑)

780 :デフォルトの名無しさん:03/01/10 22:53
>>720
一般人はどうやってみるんだ?
掲示板といえるのか。

781 :デフォルトの名無しさん:03/01/11 00:10
匿名じゃなくなったら2ちゃんねるはただの掲示板じゃないの?
魅力がなくなる ->> 閉鎖
ってことにならなければよいが

782 :デフォルトの名無しさん:03/01/11 00:18
勉強。

783 :デフォルトの名無しさん:03/01/11 00:53
なんか、取り込中みたいだけど、ちょっと
くだらない質問するけど、いい?

Delphi 6/7 で使える DirectX のヘッダファイルって
どんなのがある? できれば DirectX8あたりの。
DirectSoundが使えるだけでいいんだけどね。

784 :デルファイの名無しさん:03/01/11 01:12
>>783
DelphiX付属のでも構わないけれど、JEDIのが一番いいと思う。
DirectX8まで揃ってて、DirectX9は翻訳中らしい。

785 :デフォルトの名無しさん:03/01/11 02:38
>>784
Jedi は解散しました

786 :783:03/01/11 03:20
どもです。

Delphi-Jediに行こうと思ってたんだけど、
サイトに行けなかった。解散してたのか。

で、結局ロシアのサイトを見つけて、
DirectX9をDL中(贅沢いえないけど、
めちゃ遅い...)。

787 :デルファイの名無しさん:03/01/11 03:31
>>785
活動停止じゃなく解散!?
…と思ってサイトへ行ってみたら、消えてる…。

こっちはまだ活動中かな?
http://clootie.narod.ru/delphi/index.html#D3D_SDKs

788 :ねこま:03/01/11 04:44
サーバのハードディスククラッシュで delphi-jedi.org に繋がらないだけみたいです.
http://projectjedi.sourceforge.net/


789 :デフォルトの名無しさん:03/01/11 09:41
えっと、無知で突っ込みを入れられるのを覚悟で。。

IPの記録が抑止にもなるなら、削除系の板のリモホ表示をやめて
みるのはどうでしょう。
依頼者のホストを削除板以外の板に晒されることもないでしょうし。

790 :デフォルトの名無しさん:03/01/11 09:43
<丶`∀´><ウェーハッハッハッハッ



791 :デフォルトの名無しさん:03/01/11 10:15
>>741あたりで、例外が捕まらないと喚いていた者です。
NT系では発生せず、9X系だと発生するために、環境を変えてデバッグしてみました。

リアルタイムで数値を表示させたくて、MMTimerの中で数値を型変換してLabelを書き換え
ていたのですが、多分コレではないかと・・・。処理が重くなると(間に合わなくなると?)
無効なポインタ操作が発生していました。

もしかして基本だったですか(;´Д`) 以降、無茶はやめます( ´・ω・`)
むぅ、計算は精度がいるのでMMTimer、表示は普通のTTimerで併用しようかな・・・。

792 :デフォルトの名無しさん:03/01/11 10:15
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────

793 :デフォルトの名無しさん:03/01/11 10:18
>>791
MMTimerは別スレッドだよね。
Label書き換え時にちゃんとsyncronizeしてる?

794 :TECH:03/01/11 10:19
>>791
 たぶんソレですね。

MMTimerではVCLを直接呼んではいけません。
計算は精度が必要というのは、サンプリング精度ですか?

なお、現在この板は別板の内容をコピペされる荒し中なので
お名欄欄に、何か デフォルトの名無しさん 以外の名前を
入れて頂くと、区別し易くてよいです

795 :デフォルトの名無しさん:03/01/11 10:34
>>786
jedi本体は死んでるが、DirectXヘッダ配布してるとこは生きてる。
ttp://www.crazyentertainment.net/

796 :791:03/01/11 10:36
>>793
同期はしてませんでした。MMTimer以外から触ってないからいいやと思いまして・・・。

>>794
直接呼んではいけないんですか!これは初めて知りました。
以降、分離させるようにします。アドバイス感謝・・・。・゚・(ノД`)・゚・。
(精度ですが、サンプリングですね。秒間数十回行っています)

797 :Delちぅ:03/01/11 10:47
別スレッドからVCLにアクセスするにはとにかくsyncronizeしなきゃダメってことで。

798 :デフォルトの名無しさん:03/01/11 10:48
ついに全板か

( ´,_ゝ`)プッ

799 :TECH:03/01/11 10:57
syncronize の中身は単に Windowsのメッセージ機構を使って
SendMessageして処理させてるだけなので

それなら MMTimer内から PostMessage してラベルを非同期に
描画させた方が軽くなっていいかもしれません。

800 :デフォルトの名無しさん:03/01/11 11:05
いままでスクリプト厨で、プログラミングははじめてなんですが、
InifileからreadStringしても2047文字目以降がどうしても読み込めないんですが
何かよい知恵ありますでしょうか。

やってることは

[mojii]
nakami="ごにょごにょと2047文字以上書いてる..."

とinifileに書いてあったとして、
str := IniFile.ReadString('moji' , 'nakami' , '');

と書いてます。strはString型です。
ちなみに2047文字までは普通に読めています。

なんかアドヴァイスおながいします。

801 :デフォルトの名無しさん:03/01/11 11:14
うん

802 :TECH:03/01/11 11:15
>>800
VCLコンポの ReadString の制限みたいですね

GetPrivateProfileString で直接読んでみては?
http://www.google.co.jp/search?q=GetPrivateProfileString+delphi&lr=lang_ja

803 :デフォルトの名無しさん:03/01/11 11:16
IniFileクラスやめて、自分でファイル入出力する。
Windowsのiniファイルは制限あったり、キャッシュされたり、くせが多すぎ。
まじれす。

804 :デフォルトの名無しさん:03/01/11 11:22
>>それなら MMTimer内から PostMessage してラベルを非同期に

MMTimer使う意味がなくなるでしょ。すなおに Sychronize をつかったほうが
いくぶんまし。

805 :TECH:03/01/11 11:30
>>804
ああ、言ってる意味は、MMTimerで測定はする。 結果はFIFOか配列に記録だけする
それとは別に表示が必要なら その
必要な項目が出来た時に、PostMessage を投げて表示させるという事です。

単に表示を定期的に更新するなら、MMTimerとは別にTTimer使えばいい


806 :TECH:03/01/11 11:34
どうして MMTimerで Sychronize 使わない方がいいかというと、
メインスレッドが重い処理をしている場合、Sychronize だと結果が返ってくるのが非常に遅れます。
その間に次のMMTimerの時間が来た場合、
 1、多重割り込みになる
 2、次のMMTimerが遅延される
のどちらかとなるわけで、どちらも好ましくない結果となります


807 :デフォルトの名無しさん:03/01/11 12:05
Sychronize は即座に処理させるのじゃなく
メインスレッドを メッセージループの個所まで動かして
それから処理して返ってくる。 

808 :800:03/01/11 12:08
さっそくの返答ありがとうございます。

>>802,803
やっぱり何かの制限に引っかかってましたか。
僕の探し方が悪いのか、ここらへんヘルプでも見つからなかったんで
途方にくれていました。
「delphi readstring 文字数」とかでググっても見つからなかったし…

直接ファイルの読み書きも考えていたんですが、具体的にINIファイルの
形式でできるようにする方法もまだ思い浮かぶレベルではなく、
いい方法教えていただいてありがとうございました。

809 :デフォルトの名無しさん:03/01/11 12:17
さよなら2ちゃんねる

810 :デフォルトの名無しさん:03/01/11 12:27
>>808
Delphiの良い所は、Pro版だと、vclのソースが付いてる。
メソッドの中のソースを読んでも良いし、デバッガで中に入っても良いし。

えー、クラスライブラリのコード読むのー?とか思うかもしれんが、
SDKなんかのサンプルコードが、クラスのメソッドやプロパティとして、
綺麗にまとめれられてる感じ。
実際の動作をDelでポトペタして、中身のソースコードを追いかける、これ最強。
後、メソッドのオーバーライドするには、クラスライブラリののソース読んどくのが間違い無いし。

811 :デフォルトの名無しさん:03/01/11 12:29
ついでに書いとくと、VCLの中身に入っていくと、
最後、Win32APIコールまで辿り着ける。ので、原因不明なんてことはまずない。
このへんもコンパイラ言語Delマンセー。

812 :デフォルトの名無しさん:03/01/11 12:35
Delphiとjavaはどう違うの?
日曜プログラムにはどちらが向きますか?

813 :デフォルトの名無しさん:03/01/11 12:39
Windows限定ならDelphi最強だろ。
フリーウェアやシェアウェアもDel多いし。

814 :デフォルトの名無しさん:03/01/11 12:46
>>813
Windows限定か。
ならjavaしかありませんな。

ありがとう。


815 :デフォルトの名無しさん:03/01/11 12:47
http://qb.2ch.net/test/read.cgi/accuse/1042020193/

前スレ
http://news2.2ch.net/test/read.cgi/newsplus/1042017485/

816 :791:03/01/11 13:04
>>806
ありがとうございます、非常に参考になりました。
表示専門のTTimerを置いて、VCLへはそこからアクセスするようにします。

別スレッドでも、MMTimer内で計算結果を書いて、TTimer内でそれを取り出して
Labelのcaptionに貼るだけの場合は、特に同期は考えなくていいですか?

817 :TECH:03/01/11 13:17
>>816
同期は MMTimerの目的から考えて使わない方がいいです。

スレッドはCPU命令の間には割り込めませんから 1命令で書き込みが
済むような場合は同期の必要ありません。
 たとえば Integer/浮動小数点などは不要

構造体や文字列の場合は 、FIFO配列を用意しておいて、そこに書いた
後、更新番号を渡すような方式で処理すると良いでしょう


818 :TECH:03/01/11 13:33
あっと、
MMTimerは別スレッドといっても、普通はその処理が終るまでメインスレッドに
切り替わったりはしないはずなので、 文字列作って渡しても大丈夫かもしれません。
というか、たぶん大丈夫です。

819 :デフォルトの名無しさん:03/01/11 13:35
>普通はその処理が終るまでメインスレッドに
>切り替わったりはしないはずなので、 文字列作って渡しても大丈夫かもしれません。
>というか、たぶん大丈夫です。

嘘はいけません。

820 :デフォルトの名無しさん:03/01/11 14:31
TListViewコンポーネントのReport表示で
アイテムの順番を入れ替えるにはどうしたらいいのでしょうか?
だれか教えてください。

821 :デフォルトの名無しさん:03/01/11 14:32
delete&insert

822 :820:03/01/11 14:43
>>821
できました。
ありがとうございました。

823 :TECH:03/01/11 15:08
ああ、そうか文字列のサイズが変更されると問題が出るかも


824 :TECH:03/01/11 15:20
いや違うか、

メインスレッドで その文字列を読んでる間に、MMTimer割り込みがかかった場合
 1、ポインタが書き換わる
    問題ない、古いポインタの情報は残ってる

 2、文字列が書き換わる
    2バイト文字が混じってると問題、
    数字なら一時的に混じって表示される=常に起きると問題

 3、サイズが書き換わる
    文字列が書き換わるのと同種の問題

だから、やっぱり FIFOとか配列をリング状に使って渡す方がいいな
まあ、文字列じゃなく、数値で渡せばめんどくさい事しなくてもいいから楽か

825 :デフォルトの名無しさん:03/01/11 15:38
427 名前:心得をよく読みましょう 投稿日:03/01/10 20:34 ID:Pp49I/sC
いっそのこと辞めればいいのに
儲かってるのか? そこまで裁判までやって続ける
意図が理解できん

433 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/10 20:36 ID:jWxHxvti
IP記録してれば、荒らしの使ったホストも規制しやすかったりして。

ゲームすかねぇ。

477 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/10 20:46 ID:jWxHxvti
ログそのものをCDROM化したりDVD化したりして出版する話が
何度かでたことがありますが、
ログを出版してしまうと、全責任を出版者が負わなければいけないので、
潰れる気のある出版社ぐらいでないと出せないです。

826 :ななしへたぐらま ◆XcB18Bks.Y :03/01/11 15:41
>>800 >802-803
Del4以降ならTIniFileの代わりにTMemIniFileを使うと良いかも.
TIniFileと違いWindowsのINIファイル処理APIを使わずに読み書きしていますが
こちらは2047バイトの制限はないようです.



827 :デフォルトの名無しさん:03/01/11 15:44
288 :ひろゆき ◆3SHRUNYAXA :03/01/08 17:56 ID:rLfxQ17l
>厨房板は本当に閉鎖なのか?
初耳。


828 :デフォルトの名無しさん:03/01/11 16:00
いいかげんうぜーなぁ・・・。

829 :デフォルトの名無しさん:03/01/11 19:40
>>828
ちゃっちゃと削除依頼出すべし。俺はこいつらに嫌気が差して自作板を捨てた。

830 :デフォルトの名無しさん:03/01/11 20:09
>800
TStringList.LoadFromFile/SaveToFileで別ファイルに保存。

.iniファイルにあまり大量のデータを保存するのはあまり好きではない。

831 :デフォルトの名無しさん:03/01/12 00:47
それがTMemIniFileだろ


832 :デフォルトの名無しさん:03/01/12 02:36
gg

833 :デフォルトの名無しさん:03/01/12 02:41
ガンダム

834 :デフォルトの名無しさん:03/01/12 09:58
一定精度以上で(少なくともTTimer以上)、しかも遅延を考慮して
Windowに描画とか、VCLの更新とかを行う場合、
MMTimerは事実上使えないということでよいですか?

解決策は結局、メインスレッドのOnIdleで自力で時間待ちですか?

835 :デフォルトの名無しさん:03/01/12 10:08
はっはっは!よう、俺のねぐらどこ?


836 :デフォルトの名無しさん:03/01/12 10:10


2ちゃん早く潰れろよ(藁

837 :デフォルトの名無しさん:03/01/12 16:39
>>Windowに描画とか、VCLの更新とかを行う場合、
>>MMTimerは事実上使えないということでよいですか?

描画の更新とかスレッドセーフじゃないVCLの更新は本来メインスレッドで
おこなうものです。ウィンドウズのようなマルチスレッドでメッセージベースの
OSなら、このような機能を別スレッドにして正確に時間間隔をはかっても
あまり意義を見出せない。なぜ、MMTimer を使うほど精度が必要なのか、そっち
のほうが興味があるんだが。

838 :デフォルトの名無しさん:03/01/12 20:54
2ちゃんねるは生まれ変わります

839 :デフォルトの名無しさん:03/01/12 20:56
じゃぁどうやって書き込んだ人に連絡をとるんですかね?

840 :デフォルトの名無しさん:03/01/12 21:06
gambleやったんだったらnews3をおまけに
やってくれるのが親切というものだと・・・。

841 :デフォルトの名無しさん:03/01/12 21:30
サブスレッドでビットマップ描いてメインスレッドでBitBltすれ

842 :TECH:03/01/12 22:22
>>834
名前欄に何か書いてくれないとイチイチ読まないといけないのでツライです

Windowに描画とかを 別スレッドや MMTimerでする意味があります?
MMTimerではデータのサンプリングや送受だけをして
描画とは切り離す設計にするのが普通だと思います


メインスレッドの OnIdleを使う方法はTTimer程度の精度しか得られません。
やはりMMTimerの方が正確です


843 :デルファイの名無しさん:03/01/13 00:09
↑って、この名前は気付いて貰ってるのだろうか?(w

MMTimer使って、なおかつ手っ取り早い同期方法は、
適当なウィンドウ(Application.Handleとか)にSendMessageCallbackで
WM_GETTEXTLENGTHみたいなどうでもいいメッセージを送りつけて、
一緒に呼ばれるコールバック関数中で描画とかをすること。

844 :TECH:03/01/13 08:01
>>843
なるほど、巧い手ですね。

 RegisterWindowMessage でメッセージID貰うと WinProcで自前でディスパッチ
 しなければいけなくなるし、
 空いてそうなID使っちゃうと 将来の Delphiのバージョンアップや 他のコンポと
 との組み合わせで問題出る可能性に怯えるわけで


845 :TECH:03/01/13 08:14
それから、あんまり考えないで書いた事をチョット反省。

MMTimerはメインスレッドとは別スレッドだが TThredではないので
Synchronize メソッドは実際には呼べないです。


846 :デフォルトの名無しさん:03/01/13 15:31
質問します。

メモリを確保するAPIってありますか?

847 :TECH:03/01/13 15:38
>>846
Windows だよね? なら
http://www.google.co.jp/search?q=HeapCreate+GlobalAlloc+VirtualAlloc

ところで
Win32API 質問箱 Build8
http://pc3.2ch.net/test/read.cgi/tech/1040964626/
と誤爆?



848 :山崎渉:03/01/13 18:43
(^^)

849 :デフォルトの名無しさん:03/01/13 22:43
人を人と思わないコイツらの死に様は悲惨だろうな

850 :HOGE:03/01/14 08:46
ゲーム作ってるのもあってサポート用のツールで高い精度のタイマーがいるんですわ。

> メインスレッドの OnIdleを使う方法はTTimer程度の精度しか得られません。
実際に調べました?
そんなことはないです。

で、まあ、結局メインスレッドで一定精度を得るならOnIdleが楽かなと。

851 :HOGE:03/01/14 08:48
>>845
あー、そうですね。
どちらにせよ、そもそもMMTimerではSyncronizeが使えないので
同期を取る必要があるとつらいですね。


852 :デフォルトの名無しさん:03/01/14 09:52
>>850
精度の意味が違うのでは?

他のプロセスが動いてる時の OnIdleと TTimerは精度が同じ。
プロセスがリソースを独占可能な時は OnIdle>TTimer
ただしTTimerも 分解能を合わせれば精度は同じ

853 :デフォルトの名無しさん:03/01/14 10:29
>プロセスがリソースを独占可能な時は
ああ、そのことです。

そいや、TTimerの精度って上げられたっけ?
timeBeginPeriodでつか?

854 :デフォルトの名無しさん:03/01/14 10:45
確か Windowsタイマーの分解能は整数値じゃないから、分解能を正しく合わせるのは無理なんじゃないかな

855 :TECH:03/01/14 12:54
>>850
なるほど、そういう使い方なら OnIdleでやればいいのでしょう。
でもCPU占有率100%になりそうな勢いですね。

timeBeginPeriod は MMTimer の精度では?


856 :デフォルトの名無しさん:03/01/15 00:20
PageControlで「全て閉じる」のようなことをやりたいのですが、こうやると
「リストのインデックスが範囲をこえています」とエラーが出ます。
どこが間違ってるのでしょうか?
var
i: integer;
ClosePage: TTabSheet;
begin
for i := 0 to PageControl.PageCount -1 do
begin
ClosePage := TTabSheet(PageControl.Pages[i]);
ClosePage.Free;
end;
end;

857 :デフォルトの名無しさん:03/01/15 00:34
>>851
MUTEXとかセマフォとか。手はいくらでもある。

858 :Delフサギコ ◆A6VzDeLphI :03/01/15 00:37
  ∧,,∧  誰もがはまる罠です。
 ミ,,゚Д゚彡   i=0で0番目のページを削除したとたん、
 ミつ[|lllll]).   もとの1番目が0番目に変わるので
〜ミ   ミ     次のループでi=1で削除すると
        元々の2番目のページが削除され…

こういうときは
for i:=PageCount-1 down to 0
で、ループまわして最後から削除っす。

859 :デフォルトの名無しさん:03/01/15 00:39
>>856
例えば、最初に A B C D E の5つのページがあるとして……
Pages[0]を削除 → B C D E
Pages[1]を削除 → B D E
Pages[2]を削除 → B D
Pages[3]を削除 → もうそんなページねぇよウワァァァン


860 :デフォルトの名無しさん:03/01/15 00:41
>>858
あー、だから半分まで閉じるとエラーになるんですね。
助かりました、さんくすです。


861 :デフォルトの名無しさん:03/01/15 00:42
>>859さんもどうもです。

862 :デフォルトの名無しさん:03/01/15 01:13
var
i: integer;
begin
for i := 0 to PageControl.PageCount -1 do
PageControl.Pages[0].free;
end;

これで(・∀・)イイ!!とおもわれ

863 :デフォルトの名無しさん:03/01/15 01:32
>>862
融通きかなそうだな(w

864 :デフォルトの名無しさん:03/01/15 02:34
どっちかと言えば↓が好きかな
while PageControl1.PageCount > 0 do PageControl1.Pages[0].Free

865 :カイ:03/01/15 05:34
おんなじだけど
with PageControl1 do while PageCount > 0 do Pages[0].Free

866 :デフォルトの名無しさん:03/01/15 07:47
>>855
ゲームとかそういう類のは組んだことはないでつか?

> でもCPU占有率100%になりそうな勢いですね。
それは組み方によります。
FPS固定なら、余った分Sleep(Sleepは精度が悪いので工夫がいるが)するとか、
OnIdleを早く抜けて処理を返すとか。
FPS非固定なら100%でぶん回すこともあるでしょう。

>timeBeginPeriod は MMTimer の精度では?
ですよねえ。標準タイマーは精度劇悪だったはずなので。

>>857
なるほど。

867 :TECH:03/01/15 08:25
>>866 じゃまとめましょう
□TTimerの分解能は 9x系列で1/30
  NT系列 2000/XP では1/100程度
  TTimerはメッセージを貰ってメインスレッドで実行される

□MMTimerの分解能は timeBeginPeriod で決まる
  MMTimerはメインスレッドとは別の特殊なスレッド。よって、
  VCLコンポを呼び出してはいけない。また、
  一般的にマルチメディア系のコールバック中で悪さするとOS
  を巻き込んでしまう場合が出易いので注意
  VCLをMMTimerをキッカケにして動かす場合は
    PostMessage/ SendMessageCallbackを使う

868 :デフォルトの名無しさん:03/01/15 08:29
>>867
単位もまともに書けん奴が精度を語るか。

869 :デフォルトの名無しさん:03/01/15 08:37
>>868
何の話?

870 :デフォルトの名無しさん:03/01/15 08:53
>>869
「1/30」「1/100」ってなに?という話だと思う。

871 :デフォルトの名無しさん:03/01/15 10:16
>>870
ああ、

TTimerの設定分解能は1ミリ秒だが 98系列ではその1/30の実分解能しかない

って事だろ。 
あそこに分解能が1/30秒と書けば正しくないし、まあもっと上手にまとめられる
というのなら、まとめてやれよ。

872 :デフォルトの名無しさん:03/01/15 22:13
>>871
98系列はもっと良くなかったか?

873 :デフォルトの名無しさん:03/01/15 22:46
>>872
PC9821タイマのこと?

874 :デフォルトの名無しさん:03/01/16 13:31
perlでの
@a = split(/hoge/, $str);
みたいのをDelphiでやるにはどうしたらいいですか?


875 :デフォルトの名無しさん:03/01/16 13:33
モナーの *やさしい* Delphi質問スレ
をまだ見てませんでした。見て分からなかったらまた来ます。すみません。

876 :デフォルトの名無しさん:03/01/16 13:39
>>874
正規表現が使いたいという意味なら
ttp://homepage1.nifty.com/bmonkey/delphi/delphi.html
とかを使うといい

単に文字列で検索して分割したいという事なら
http://www.geocities.co.jp/SiliconValley-Oakland/8522/data/uSpliter.txt
を使って

TEdit 2つ TMemo1つを貼り付け
Edit1に 分割前の文字列 Edit2に分割キーワード

with TStringSpliter.Create(Edit1.Text) do try
while not isEOF do Memo1.Lines.Add(GetSplitStr(Edit2.Text));
finally free;end;

でメモに分割結果が出る

877 :デフォルトの名無しさん:03/01/16 18:44
>>876見て出来るようになりました。ありがとうございました。

878 :デフォルトの名無しさん:03/01/17 22:28
他のフォーム(Form2)からForm1上にあるListViewに
アイテムを追加しようと下のように書いたのですが
<<のところでEAccessViolationエラーが出てしまいます。
同じようなのをForm1に書くとうまくいくのですが…
他のフォームからだとダメなのでしょうか?
どなたか良い方法を知ってる方おられましたら
教えて頂けないでしょうか?

procedure TForm2.Button1Click(Sender: TObject);
var
ListItem : TListItem;
begin
ListItem := Form1.ListView1.Items.Add;  <<
ListItem.Caption := Button1.Caption;
ListItem.SubItems.Add(Button1.Caption);
end;

879 :デルファイの名無しさん:03/01/17 22:51
>>878
まず、どこで例外が起きているのかを突き止めないと、なんとも。

//↓チェック用のコードを挿入してみるとか
Assert(Form1 <> nil);
Assert(Form1.ListView1 <> nil);
...

nil以外の値が入っていても、既に解放されている等して不正なポインタの場合が有り、
その時は中身を参照するとエラーになるので、そちらも注意。

勘で書けば、多分、TForm1をTForm1.Createで作成した時
Form1変数に代入してないとか、その辺とは思うけど。

880 :デフォルトの名無しさん:03/01/17 23:43
>>878
Form1,Form2の関係を書いた方が。


881 :878:03/01/17 23:49
>>879
>>880

>勘で書けば、多分、TForm1をTForm1.Createで作成した時
>Form1変数に代入してないとか、その辺とは思うけど。
873さん、これモロビンゴっす。。
var
Dlg: TForm1;

Dlg := TForm1.Create(Self);
てな感じでやってました。。
言われないと全く気づかなかったと思います。
ありがとうございました!

882 :デフォルトの名無しさん:03/01/18 20:36
>>873
当然98x1のことだ。他にないだろ。

883 :デフォルトの名無しさん:03/01/18 21:16
>>882
9801には高解像度タイマ付いてないが。


884 :デフォルトの名無しさん:03/01/18 23:50
TImageで画像があるかどうかを取得したいのですが、どうすれば出来ますか?

885 :デフォルトの名無しさん:03/01/19 00:19
>>884
試して無いけど、Pictureがnilかどうかで分からないかな?

886 :デフォルトの名無しさん:03/01/19 00:26
TBitmapに、IsEmptyだか、プロパティねぇ?
クソレススマソ

887 :デフォルトの名無しさん:03/01/19 01:29
ファイルに保存しないで、マイクからの入力データをLAN無いで
転送して別のPCのスピーカーから再生させたいのだが、
そもそもマイクからリアルタイムに音声が取り出せない、
なにか良い方法はありませんか?

888 :デフォルトの名無しさん:03/01/19 01:39
DirectSoundCapture

889 :デフォルトの名無しさん:03/01/19 01:51
>>888
ありがとう試してみます

890 :ななしへたぐらま ◆XcB18Bks.Y :03/01/19 13:14
>>879
素朴な疑問ですがどうしてブレークポイントを使わないのでしょうか?

>>884
Image1: TImage; だとすると
Image1.Picture.Graphic = nil だと空みたい.

空にするときはImage1.Picture := nil;
または Image1.Picture.Assign(nil); なのでややこしいですが.


891 :デフォルトの名無しさん:03/01/19 13:26
>>890
>空にするときはImage1.Picture := nil;

メモリリークしない?

892 :デフォルトの名無しさん:03/01/19 13:37
絶対にしない


893 :デフォルトの名無しさん:03/01/19 13:43
>>892
write用のメソッド定義されてるの?

894 :デフォルトの名無しさん:03/01/19 14:31
>>893
ソース見ろよ

895 :ななしへたぐらま ◆XcB18Bks.Y :03/01/19 15:02
>>891-893
今は載っているかわかりませんが初期のDelphiの説明書には
nilを代入してグラフィックを空にする説明が載っていたと記憶しています.
私は気持ち悪いので(笑)Assignを使っていましたが.

>>893
その通りです.内部でTPictureのAssignメソッドを呼び出しています.
そのメソッドは引数がnilの時に内部のGraphicを解放してnilを代入し,
イベントハンドラがあればそれを呼び出しています.

>>894
ライブラリのソースはプロ版以上でないと見られませんからね.
逆にプロ版以上の方は私の説明よりソースを見るのが吉かと思います.
プロパティ宣言のread/writeが何を意味するか理解していれば
十分理解できるコードではないかと思います.

896 :デフォルトの名無しさん:03/01/19 21:54
>>895
勉強になりました。どもです。

>>894
Del6 PersonalとDel3.1 Standerdしか持ってないんで。スマソ。

897 :675:03/01/20 11:01
ヨーダは緑色さ!

898 :デフォルトの名無しさん:03/01/20 22:39
そのヨーダな

899 :デフォルトの名無しさん:03/01/21 00:06
>>898
100点!

900 :デフォルトの名無しさん:03/01/21 17:39
D7にて、TCustomComboBoxから独自のコンボボックスコンポを作ろうとしているのですが、
設計時にオブジェクトインスペクタのプロパティに

| Items | (TStrings) […] | という欄があって [・・・]ボタンを押すと
簡易エディタのようなダイアログが表示されますよね?
あれは何処で実行されているのでしょうか?

やりたい事は、設計時に[・・・]で文字列が入力された後で値のチェックを
かけたいのですが、それらしき部分が見当たらないのです。(涙)

901 :組込もしまっせ:03/01/21 19:05
>>900
前半の質問は、プロパティエディタの設定でされてる。
自作のエディタを作りたいなら、 ヘルプの
コンポーネント開発者ガイド->コンポーネントを設計時に利用出来るようにする->プロパティエディタの追加
からを見るといい


後半は・・・・もしかしてSetItems メソッドを定義してないの?
SetItemsが呼ばれた時の値で、チェックをかければいい
チェックをかけて値が変更されてたら 
たしか、 GetParentForm(Self).Designer.Modified; みたいな感じだったと思う


902 :デフォルトの名無しさん:03/01/21 22:23
MDIアプリで、起動時に引数を受け取る方法ってありますか?
起動済みで受け取る方法は分かったんですが…。

903 :デフォルトの名無しさん:03/01/21 22:25
>>902
ParamStr(i :integer);

904 :デフォルトの名無しさん:03/01/21 23:04
>>903
for i := 1 to ParmCount -1 do
begin
if Pos('http://', ParamStr(i)) > 0 then
CreateMDIChild(ParamStr(i));
end;

タブブラウザっぽいのを作ってるのですが、こうで良いんでしょうか?

905 :デフォルトの名無しさん:03/01/21 23:09
ParmCount → ParamCount でした

906 :900:03/01/22 00:41
>>901
SetItemsでチェックするようにしたら、なんとかなりました。
あと、[プロパティエディタの追加]を読んで見て、
独自のエディタも作れそうな気になってきました、実力は無いのですが
なんとか頑張ってみます。
ありがとうございました。

907 :デフォルトの名無しさん:03/01/22 00:45
>>904
ブラウザはhttp://を省略しても補完してくれるからそれは良くないだろう。
用意したコマンドラインオプション以外の文字列があったらURLとして開くとした方が良いと思われる。

908 :..:03/01/22 10:25
DelWiki, なくなっちゃったの?



909 :デフォルトの名無しさん:03/01/22 11:49
>>908
一緒に置いていたエロ画像が原因で削除されたらしい。

910 :デフォルトの名無しさん:03/01/22 13:54
やっぱりDelやBCBでDirextXはだめですか?


911 :デフォルトの名無しさん:03/01/22 13:58
>>910
そりゃ発表されたばかりのバージョン使いたいなら苦労もあるだろうけど
ひと昔前のを拾ってゆくなら何の問題もないよ

912 : ◆qZ/VDjzu96 :03/01/22 22:08
>>908
広告貼り忘れで消されてました。
たぶん復活したと思います。お騒がせしました。

913 :デフォルトの名無しさん:03/01/22 23:05
SJISに対応したPosって無いんでしょうか?

Pos('\','表')がちゃんと0になるような。

914 :デフォルトの名無しさん:03/01/22 23:07
 

915 :デフォルトの名無しさん:03/01/22 23:22
AnsiPos

916 :デフォルトの名無しさん:03/01/23 08:35
TStringGrid上で常にヒントのポップアップを表示しておきたいのですが方法はありますか?
尚且つマウスポインタの位置が別のセル上に移動したときは、即ヒントの文字列を更新したいのです。


917 :組込もしまっせ:03/01/23 08:59
>>916
それは Popup ヒントでなければいけないの?
普通は TStatusBar を使って、StatusBar.AutoHint:=True; にすると思うのだけど

918 :デフォルトの名無しさん:03/01/23 11:32
>>916
ポップアップヒントに似せたウィンドウを一つ作成して、
OnEnterで表示、OnExitで隠蔽、OnSelectCellで内容出力したらどうかと。


919 :デフォルトの名無しさん:03/01/23 17:02
>>917>>918
おまいら答えになってないよ。

>>916
TApplication.OnShowHintイベントでTHintInfoのReshowTimeoutを適当(500)に設定し
TStringGridのOnMouseMoveイベントでHintプロパティを変えればいけるだろ。
ヒントの位置も変えたければTHintInfo.CursorPos:=Mouse.CursorPosとやればOKかな!?

920 :組込もしまっせ:03/01/23 18:09
>>919
なるほど、0.5秒毎にReShowするから、自動的にHideしないって事ですね
ほんの少しチラツキが出る以外は巧いアイデアかも

921 :山崎渉:03/01/23 20:02
(^^)

922 :デフォルトの名無しさん:03/01/25 13:18
>>919
それではその機能を組み込んだコンポーネントを作る場合どうするか教えてください。


923 :デフォルトの名無しさん:03/01/25 13:34
>>916
ttp://www.din.or.jp/~egawa-n/delphi/tips/grid_hint.html

>>920
>>916の方法では無理。ていうかやって出来ない事はないが、やってはいけない事。
グローバル変数のメソッドポインタをコンポーネント内で書き換えると
アプリケーションが意図しない動作するかもしれない。

924 :デフォルトの名無しさん:03/01/26 01:53
potatoのisoはftpで見つけたのですが、woodyのisoイメージを
発見できません、何処から落とせば良いのでしょうか?

925 :デフォルトの名無しさん:03/01/26 01:54
Debian と Delphi って似てるか?

926 :デフォルトの名無しさん:03/01/26 01:59
>>924 jigdo
>>925 (^^;

927 :924:03/01/26 11:29
ごめんなさい、誤爆してたみたいです。
>>925
なぜか間違ってしまいました。(汗
>>926
誤爆にお返事頂いて申し訳ありません。
jigdoで作れるのですね、ありがとうございました。

238 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)