くだすれDelphi(超初心者用)その41

このエントリーをはてなブックマークに追加
1高島彩
Delphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者用)その40
http://pc11.2ch.net/test/read.cgi/tech/1172844367/


<過去スレ>
DelWiki避難所
http://delwiki.info/?Delphi+%B4%D8%CF%A2%A4%CE%B2%E1%B5%EE%A5%B9%A5%EC%A5%C3%A5%C9
2デフォルトの名無しさん:2007/04/18(水) 12:53:09
□質問しながら多少、相手してもらいながら
Delphi初心者のための寺子屋
http://pc11.2ch.net/test/read.cgi/tech/1132756268/
Delphiで無料でプログラミングしてみるお
http://pc11.2ch.net/test/read.cgi/tech/1158233434/

□雑談類は以下のスレに
バカボンのDelphi不買・販促・その他談話室その29
http://pc11.2ch.net/test/read.cgi/tech/1153227982/
【Turbo】 CodeGearオッチャ 【Delphi】
http://pc11.2ch.net/test/read.cgi/tech/1175128103/
Borland Developer Studio 2006 No.13
http://pc11.2ch.net/test/read.cgi/tech/1175861395/
Borland Developer Studio 2006 アンチスレ
http://pc11.2ch.net/test/read.cgi/tech/1153353434/
VB vs Delphi @夏厨2006
http://pc11.2ch.net/test/read.cgi/tech/1152851763/
3デフォルトの名無しさん:2007/04/18(水) 12:53:56
□Webとかの通信関係
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc11.2ch.net/test/read.cgi/tech/1093654251/
delphiで2ch保守プログラムを作ろう
http://pc11.2ch.net/test/read.cgi/tech/1165632604/

□ゲームを作りたい人
Delphi持ってるならGLSceneを使え
http://pc11.2ch.net/test/read.cgi/tech/1163269079/
【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
http://pc11.2ch.net/test/read.cgi/gamedev/1097836469/
Delphiでアクションゲームが作りたい!! Part2
http://pc11.2ch.net/test/read.cgi/gamedev/1027482533/
ネットワークゲーム作成のお勉強(Delphi専用スレ)
http://pc11.2ch.net/test/read.cgi/gamedev/1028278884/
delphiでMMO
http://pc11.2ch.net/test/read.cgi/gamedev/1072515100/

□borland/CodeGear以外の実装もあるよ
【Delphi互換!?】FreePascal【GPL】
http://pc11.2ch.net/test/read.cgi/tech/1137051510/
4デフォルトの名無しさん:2007/04/18(水) 16:49:54
>>http://pc11.2ch.net/test/read.cgi/tech/1172844367/966
「基礎からわかるDelphi6」で基本的な使い方を覚えて、あとはVCL等を真似して
コンポ作ったり、公開されてるコンポを研究して使いこなせるように試行錯誤。

ヘルプ見てよくわからなかったらググるととりあえずなんかコードが出てくるのでそっから学ぶ。
日本語でなくても英語やロシア語、中国語でそれを使ったコードが出てくることが多い。

最後にHalbow資料館でWinAPIを使いこなせるようになればWindowsでできないことはなくなる。

あとこのスレは非常に役立ちます。Delphiの生き字引がいっぱいいますw
5デフォルトの名無しさん:2007/04/18(水) 21:00:45
前スレ954です

なんとなくDelphiとC++Builderの違いがつかめてきました。

Delphi
・VCLはDelphiで作成されているため拡張が容易
・Object PascalのコンパイラしかないためBCBのコードは使えない
・BCBよりはメジャーなため、サンプルや
 インターネットで公開されているコンポーネントは多い

C++Builder
・Object PascalとC/C++の両方のコンパイラがあるため
 C++の記述もそのまま使え、Delphiのコードも取り込める
・Delphiよりも知名度では劣るため、
 資料や公開されているコンポーネントは少なく
 Delphiとは完全に互換性があるわけではないので
 Delphiで作成されたコンポーネントでソースがないものは
 使用出来ない。
 そのため使えるコンポーネントは限られてしまう。

といったところでしょうか。

私みたいにC++の知識がない場合は
C++Builderを始めてもコンポーネントを拡張する場合は
Object Pascalで記述しなければいけないため、
両方の言語を覚えなければならないみたいですので
Delphiを始めたほう習得はしやすそうですね。

色々と教えて頂いてありがとう御座いました。
6デフォルトの名無しさん:2007/04/18(水) 21:04:45
×Object PascalのコンパイラしかないためBCBのコードは使えない
  BCBやフリーのBCC55でObjを吐かせれば DelphiにリンクしてCのコードも利用出来る
 実際、Zlibなんかは objで提供されてるよ
7デフォルトの名無しさん:2007/04/18(水) 22:05:46
>>6
DelphiでもCのソースは取り込めるんですか。
なおさらDelphiを勉強して損はないですね!
8デフォルトの名無しさん:2007/04/18(水) 22:10:16
Cのソースは取り込めない。 Cのソースをコンパイルして出来る .objの状態で利用出来る。

ただし、CのCRTが必要になるようなコードを使ってるとCRT自分で用意しないと
利用出来ないので注意。 たとえば浮動小数点演算とか除算とか、
9デフォルトの名無しさん:2007/04/18(水) 22:19:09
Delphi暦11年の俺も今でも使ってるが、これから始める人にDelphiはすすめない。
働き蜂のプログラマを目指してるならともかく、センスのよいプログラミングに
いまや時代遅れなWin32べったりのVCLとか、中途半端なOOPLであるDelphi言語を
これからやるなんてあまりにも悲惨。

Python、Java、Ruby、C# なんかのほうがずっとおすすめ。
10デフォルトの名無しさん:2007/04/18(水) 22:21:29
どれもインタプリタ型だねえ・・まあ今は人も道具も使い捨ての時代だから・・・
11デフォルトの名無しさん:2007/04/18(水) 22:21:52
.NETとかは起動が遅くなるからイヤなんだけど他にいい言語ある?
Delphiは簡単にできて起動も早いから好きなんだけど
12デフォルトの名無しさん:2007/04/18(水) 22:22:14
初学者が習うといい言語は何?(除PerlとJava)
http://pc11.2ch.net/test/read.cgi/tech/1075035410/
13デフォルトの名無しさん:2007/04/18(水) 22:25:27
誘導ありがと。
せっかくDelphiやり始めたんだしもうちょっとやってみるよ。
14デフォルトの名無しさん:2007/04/18(水) 22:37:11
すいません。ちょっと話が難しくて
わからなくなってきてしまったのですが
特殊な処理をするような場合にCより出力された
オブジェクトファイルをリンクして関数を
使用するようなイメージでしょうか。
(VB6でいうAPIを使用する場合にLIBを宣言するような感じ?)

私はまだ入門者なのでまだそれを利用する
ことはないと思いますが
慣れてきたころにまた勉強したいと思います。
15デフォルトの名無しさん:2007/04/18(水) 22:39:06
そんなきわめて特殊なことは、知らないほうが幸せ
16デフォルトの名無しさん:2007/04/18(水) 22:41:49
別に特殊な処理とか関係ない。
再利用できるというだけ。
17デフォルトの名無しさん:2007/04/19(木) 04:09:04
WindowsXP上でDelphi6 Personalを使って
ttp://www.tcp-ip.or.jp/~mt2knm/etc/ToDoChart.html
のソースを
ttp://d.hatena.ne.jp/kanata_ail/20050823
を参考にコンパイルしたのですが、出来上がった
実行形式を動かすと、上記のページと同様に
EAccessViolationが発生してしまいます。
このEAccessViolationの解消方法が知りたいのですが、
どなたかご教授いただけませんでしょうか?
18デフォルトの名無しさん:2007/04/19(木) 11:50:42
VBとDelphiどっちが優れてるか教えてください
19デフォルトの名無しさん:2007/04/19(木) 11:57:07
言語の優劣は使用者の優劣を覆せないから無意味。
20デフォルトの名無しさん:2007/04/19(木) 12:02:51
>>18
VB vs Delphi @夏厨2006
http://pc11.2ch.net/test/read.cgi/tech/1152851763/
ってスレがあるんで、そっちでどうぞ
21デフォルトの名無しさん:2007/04/19(木) 12:03:47
自信を持って「Delphiの方が優れてる」とは言えないんだな
22デフォルトの名無しさん:2007/04/19(木) 12:05:39
D7でOracle9iのBLOBフィールドに保存したBMP画像をDBImageに表示しようとしたのですが
TTableを使用するとちゃんと表示されるのにTQueryを使用すると画像の一部分しか表示できません。
SQLは単にSELECT * FROM TABLEで全件SELECTしているだけです。
なにかやり方が悪いのでしょうか。
接続にはBDE5.01を使用しています。
23デフォルトの名無しさん:2007/04/19(木) 12:09:28
Oracle 使ってるならOracle に聞いた方が速いんじゃない?
24デフォルトの名無しさん:2007/04/19(木) 12:24:40
Orcale使うならVBの方が相性いいですよね!
25デフォルトの名無しさん:2007/04/19(木) 12:33:06
それは絶対に無い。
ブビはブビアプリ内でメモリ不足エラーを発生する。
ブビはDBアプリに不向き。
26デフォルトの名無しさん:2007/04/19(木) 12:33:47
>>25
スレ嵐乙
27デフォルトの名無しさん:2007/04/19(木) 12:35:17
どーも荒らすための自演っぽいな。
次はVBがどーのこーの自演するのだろうか?
28デフォルトの名無しさん:2007/04/19(木) 12:44:58
VBはWin64対応済みですがDelphiは64bitで使えますか?
29デフォルトの名無しさん:2007/04/19(木) 12:47:15
VBはUNICODE対応済みですがDelphiはきちんとUNICODE使えますか?
30デフォルトの名無しさん:2007/04/19(木) 12:48:50
せっかくの良スレが……('A`)
31デフォルトの名無しさん:2007/04/19(木) 12:51:43
平日の昼間から仕事にあぶれたVB厨が沸いてるのか。
32デフォルトの名無しさん:2007/04/19(木) 13:10:23
>>28-29なんて普通のDelphiの質問だろ。何で過剰反応してるの?
33デフォルトの名無しさん:2007/04/19(木) 13:13:38
ヒント:質問の内容に反応してるんじゃない
34デフォルトの名無しさん:2007/04/19(木) 13:27:58
将来性のない言語を初心者に騙して使わせるのがどこが良スレなの?
VBやった方がいいじゃん。
35デフォルトの名無しさん:2007/04/19(木) 13:32:50
>(´・ω・`)アップグレード・ウィザードもお手上げ? VB 6と.NETの印刷の違い('A`)
ttp://www.atmarkit.co.jp/fdotnet/vblab/vbwizard_04/vbwizard_04_01.html

ブビの正体。
36デフォルトの名無しさん:2007/04/19(木) 13:33:27
>>24=25=28=29=34=35

NGWord:VB, ブビ
37デフォルトの名無しさん:2007/04/19(木) 13:55:40
http://msdn2.microsoft.com/en-us/library/ms364068(vs.80).aspx
V B 9.0ってオブジェクト指向言語からさらに関数型言語の要素も入るんですね!
すごく先進的。

Delphiってまだgenericsすら使えないんですよね?
Delphiの方がオブジェクト指向度が高かったなんて大昔の話ですね。
38デフォルトの名無しさん:2007/04/19(木) 13:58:03
読んでもらう為に「V」と「B」を離してるwwwwwwwww
39デフォルトの名無しさん:2007/04/19(木) 14:00:10
Delphi 6 Personalのキーが取得できないのですが、使うなということですか?
V B Expressに乗り換えます。無償ですし。
http://www.microsoft.com/japan/msdn/vstudio/express/vbasic/
40デフォルトの名無しさん:2007/04/19(木) 14:01:34
ブビ注がV B Expressに乗り換えるとはwwwwwwwww
41デフォルトの名無しさん:2007/04/19(木) 14:08:41
NGWord: V\s*B, ブ\s*ビ
42デフォルトの名無しさん:2007/04/19(木) 14:14:58
くだらない質問で申し訳ないんですが、
自分で書いていいるクラスから導出クラス(というのかな?)を作る予定がない場合には、
privateもprotectedも同じですか?
あと、クラスをdllとかにするつもりがない場合には
publicもpublishedも同じですか?

以前自分で書いたコードのはずなのに、見直してみるとなんだか無駄に混在してて、
本当のところはどうなのか気になったので質問してみました。
43デフォルトの名無しさん:2007/04/19(木) 14:17:29
>>42
えーと予定があるないじゃなくて、守りたい、守らなくて良いのを考えて設計するんですよ?
44デフォルトの名無しさん:2007/04/19(木) 14:17:40
>>34
正直、言語なんて何でもいいんだが……。
その時によってVBも使うしJAVAも使うしな。
たまたまDelphiを使う時はここで聞くまでであって。
45デフォルトの名無しさん:2007/04/19(木) 14:41:38
>>42
クラス設計もできないのはDelphi使わないでください。
ユーザーの質が下がります。
46デフォルトの名無しさん:2007/04/19(木) 14:56:19
>>45
つ スレタイ
47デフォルトの名無しさん:2007/04/19(木) 14:57:50
>>24=25=28=29=34=35=37=40=45
NGWord: V\s*B, ブ\s*ビ, ユーザの質
48デフォルトの名無しさん:2007/04/19(木) 14:59:29
>自分で書いていいるクラスから導出クラス(というのかな?)を作る予定がない場合には、
>privateもprotectedも同じですか?

導出クラスって派生クラスのこと?
なら同じだお。

>あと、クラスをdllとかにするつもりがない場合には
>publicもpublishedも同じですか?

publishedって初期値をdfmファイル持てるってやつじゃなかった?ちょっと自信無い。
49デフォルトの名無しさん:2007/04/19(木) 15:03:54
>>42
基本的に道具なんで、使い手次第。 好きに使えばいいのでしょう。

実際、自分が作って自分が使う分は、手直ししては必要があれば移動という感じですね。

継承する予定が無いなら 全部privateにして、
後から要求が出てから移動という事でも十分です。

publicとpublishedはDLLの有無ではなく、実行時型情報を使うかどうかという差になります。
列挙型を文字列で列挙したり、文字列から変換したりを
使いたい時に publishedを使うととても便利ですよ
50デフォルトの名無しさん:2007/04/19(木) 15:08:12
>>49
>列挙型を文字列で列挙したり、文字列から変換したりを
具体例はどんなの?
51デフォルトの名無しさん:2007/04/19(木) 15:15:28
コンポーネントを作るときにオブジェクトインスペクタに表示
したいプロパティだけpublishedにするのかと思っていた。
52デフォルトの名無しさん:2007/04/19(木) 15:17:54
>>50
uses TypInfo すると GetEnumName / GetEnumValue
GetEnumProp / SetEnumProp で出来るよ
使い方はgoogleで検索すれば判るでしょ

あと、TObject 直下だと、 published だけでは実行時型情報は作られないので注意ね
詳しい事は
"パブリッシュメンバー"でヘルプ検索してね。
53デフォルトの名無しさん:2007/04/19(木) 15:33:45
具体例は、
procedure GetEnumNameList(TypeInfo: PTypeInfo; str: TStrings);
var i: integer;
 T: PTypeData;
 s: string;
begin
 T := GetTypeData(GetTypeData(TypeInfo)^.BaseType^);
 for i := T^.MinValue to T^.MaxValue do
 begin
  s := GetEnumName(TypeInfo, i);
  if s <> '' then str.Add(s) else break;
 end;
end;

として GetEnumNameList(TypeInfo(型名) ,コントロール.Items);
で、ドロップダウンに一覧を出して、
SetEnumProp で文字列をそのままプロパティに代入すればOK みたいな使い方
54デフォルトの名無しさん:2007/04/19(木) 15:38:49
>>53
publishedにあるメソッドの実行って出来るの?
55デフォルトの名無しさん:2007/04/19(木) 15:43:00
メソッドは published  に出来るし、
それを名前文字列からGetMethodPropでメソッドポインタを検索する事も出来る。
簡単なスクリプトなんか作るのに便利だね
56デフォルトの名無しさん:2007/04/19(木) 16:23:37
Delphi6からTurboDelphiへの移行を考えているんですが(現在は両方インストールして使用中)
Delphi6で作っていたプロジェクトをTurboDelphiに移すことのデメリットってどんなことがありますか?

とりあえず、貼り付けるタイプのカスタムコンポーネントを使ってると
そのコントロールが消えてしまうのは理解しました。
他にもあれば教えてください。

また、.dskファイルにさえ気を付ければTurboDelphiのプロジェクトをDelphi6で編集することも可能だと考えていますが
正しいでしょうか?
57デフォルトの名無しさん:2007/04/19(木) 16:26:50
Del6でdfmファイル使えなくなると思うよ。

確か、Del7以降からdfmがバイナリからテキストに変った。
バージョンが高い方は両方扱えるけど、Del6がバイナリのみ対応。
58デフォルトの名無しさん:2007/04/19(木) 16:40:01
>>56
Delphi6→TurboDelphiは、全然可能なはずだけど。
外部コンポーネントをはっつけないようにすれば。
※動的生成に変える

ていうか、消えるのか
59デフォルトの名無しさん:2007/04/19(木) 17:03:39
>>55 古いバージョンだと GetMethodPropが動かない場合がある
var method:TMethod;

  method.Data:=Me;
  method.Code:=Me.MethodAddress( 'Hoge');
TNotifyEvent(method)(Self); ここで呼び出し

の方がいいかも
60デフォルトの名無しさん:2007/04/19(木) 17:14:58
そうじゃないや。 GetMethodProp はイベントを取得する
obj.MethodAddress がメソッドアドレスの取得だから
61デフォルトの名無しさん:2007/04/19(木) 23:09:47
シッタカの気が済んだか
62デフォルトの名無しさん:2007/04/20(金) 01:27:50
いよいよ>>61の本気が見られるぞ! みんな。
63デフォルトの名無しさん:2007/04/20(金) 02:42:53
ひといないだろ・・
64デフォルトの名無しさん:2007/04/20(金) 03:22:15
>>18
一般的には、VBプログラマとDelphiプログラマでは、
Delphiプログラマの方が優れていると思われている。
それに、Delphiで作られたアプリの方が良く出来ている。
65デフォルトの名無しさん:2007/04/20(金) 03:26:20
>>64
66デフォルトの名無しさん:2007/04/20(金) 04:36:51
一般的にはDelphiなんて誰も知らないだろ。
67デフォルトの名無しさん:2007/04/20(金) 06:42:19
>>66
学生乙
68デフォルトの名無しさん:2007/04/20(金) 06:53:41
116 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/04(土) 17:25:13
ttp://beeography.wordpress.com/2006/09/12/just-wanna-let-you-know/
ここに書いてある方法でTurbo Exprorerでも合法にコンポ入れれるよ

117 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/04(土) 18:02:21
あとこれ。
dclusr経由のコンポーネントインストールが、ライセンス違反かどうかの話。
ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200609/06090014.txt
6956:2007/04/20(金) 13:14:41
>>57
>>58
>>68
ありがとうございます。

他に致命的なデメリットはないようですね
とりあえずDelphi6のプロジェクトをコピーして残しておいて移行して
TurboDelphiでどうにもならない問題にぶつかったら泣く泣くDelphi6に戻ることにします。

>>57
Delphi6でテキスト形式のdfmの読み込み・編集できましたよ。
70デフォルトの名無しさん:2007/04/21(土) 15:11:18
VBは1.0(US版)の頃から使っている。
Delphiは2.0から使っている。

Delphiは良くできている。優れたコンポーネントも数多い。
良質なOOPの設計方法が自然に身につく。
EXEも軽くて、スピードもまったく問題ない。
DBからゲームまで何でも、Delphi1本でいける。

VBにはウンザリだ。
初心者がVBから入ると、クソ設計が身についてしまう危険が高いと思う。
EXEの動作速度が遅いためゲームは作れず、かといってDBまわりを
いじるビジネスアプリにも向かない。

良質なソフトは生き残る。将来を危惧する心配はない。
特に開発環境を選べる職業プログラマ以外の人にはDelphiを
オススメする。
71デフォルトの名無しさん:2007/04/21(土) 15:42:29
そんなVBなんかと比べても・・・
ひどいのよりマシとか言われてもぜんぜん食指が動かん。
72デフォルトの名無しさん:2007/04/21(土) 15:43:35
VB1ってDOS版の? パッケージは見た事あるけど
73デフォルトの名無しさん:2007/04/21(土) 18:50:53
VBの話をここですると荒れやすいからやめようぜ
74デフォルトの名無しさん:2007/04/21(土) 19:23:52
function A(const S: String; P: PChar):PChar;
var
 len, n: Integer;
 pa: PChar;
begin
 n:= Integer(s);
 (略)
 len:= PInteger(n-4)^;

 pa:= p+len;
 Result:= pa;
 とか
 p:= p+len;
 Result:= p;
end;

paやlen/nがローカル変数だけど
こんなふうに戻り値に返すのは問題ないですか?
75デフォルトの名無しさん:2007/04/21(土) 19:47:42
それはおkだけど、
> len:= PInteger(n-4)^;
len := Length(s);
でいいんじゃない
一々Intergerにしてるあたり何か妙な事やってるのかも知らんけど
76デフォルトの名無しさん:2007/04/21(土) 21:52:33
>74
DelphiではResult(またはfunction名と同名の変数)は暗黙に宣言されているローカル変数。
function終了時にこの変数の値がfunctionの戻値となる。
というわけで、そもそも
> paやlen/nがローカル変数だけど
> こんなふうに戻り値に返すのは問題ないですか?
という考え方は成立しない。それよりも>75の指摘のとおり、
>  n:= Integer(s);
>  len:= PInteger(n-4)^;
はやめとけ。
7774:2007/04/21(土) 22:11:33
ありがとう

Length()はインライン非対応の旧バージョンとで
生成されるコードが変わっっちゃうのがいやんなので。
まあ、気にする程でもないですけど
78デフォルトの名無しさん:2007/04/22(日) 08:31:37
Lengthって旧バージョンでは関数呼び出しなの?
79デフォルトの名無しさん:2007/04/22(日) 11:01:56
ハマってしまいました。

Delphi2005で、CDからAUTORUNで実行されるタスクトレイ常駐型アプリを
作成しました。
このアプリは、起動時およびユーザ操作によりウィンドウを表示し、
ウィンドウのOKとCancelのボタン処理の最後で
Application.Minimize;
を使ってウィンドウを非表示とするようにしました。

このOKもしくはCancelボタンを1回押した後、プログラムを常駐させたまま
PCを休止状態にし、その後復帰したらCD-ROMへのアクセスが失敗し、
"External Exception C0000006"が表示されるようになってしまいました。

試行錯誤の結果、ウィンドウの非表示処理を
Visible := false;
に変更したところ、休止後もCD-ROMへアクセスできるようになりました。

…最小化手続き、休止復帰、CD-ROMドライブと、それぞれ全然関係ない
ように思えるのですが、Delphi2005でこのようなIssueがあるかご存じの方は
いらっしゃいませんか?
80デフォルトの名無しさん:2007/04/22(日) 13:14:51
日本でDelphi2005 Personalが出ると聞いたんですが、いつ出ますか?
81デフォルトの名無しさん:2007/04/22(日) 14:41:32
空耳だろ。ことしはもう2007だし。
82デフォルトの名無しさん:2007/04/22(日) 16:34:20
>>79
・AUTORUNで、CDから起動
・常駐
・Application.Minimize;
・休止状態→復帰
これから導き出される答えは・・・

なんだろう・・・ね?
83デフォルトの名無しさん:2007/04/22(日) 16:52:56
Delphi6で作ったアプリケーションで稀に(条件がよくわからない)
右上の最小化ボタンで最小化するとタイトルバーが残ることがあるんですけど
何か情報をお持ちのかた居られませんか?
8483:2007/04/22(日) 16:57:27
このタイトルバーは消し忘れみたいな感じで
その領域を再描画すると簡単に消えます。
85デフォルトの名無しさん:2007/04/22(日) 17:23:29
>>83
今まで、Delphi6でアプリ一杯作ってきたけど、そんな症状にあったことがないな。

・グラフィックカードのドライバを最新にする

う〜ん・・・
86デフォルトの名無しさん:2007/04/22(日) 17:29:51
まあ、タイトルバーが残ったって事は、その裏の再描画指示が出てないのだから
Windowsのバグなんだろうな。
8783:2007/04/22(日) 17:46:25
>>85
>>86
う、うちだけなのか・・がーん。ちょっとショック。
自作のDelphi6アプリ以外ではこの症状をみたことがないので
勝手にDelphi6のせいだと思っていました。
検索しても全然でてこないし、やっぱりうちだけなのか・・
88デフォルトの名無しさん:2007/04/22(日) 17:53:39
とりあえずOSとかグラフィックボードとかドライバのバージョンくらい書けよ
8983:2007/04/22(日) 17:58:58
OSはXP pro Sp2
グラボはWinFast PX6600 GT
ドライバのバージョンは・・よくわからないけど「6.14.10.7777」だろうか
9083:2007/04/22(日) 18:01:01
ドライバのバージョンは「7.7.7.7」でした。ドライバファイルのバージョン見てた
91デフォルトの名無しさん:2007/04/22(日) 18:11:27
Geforceだな。nVidiaのドライバは、最新の派、ForceWare Release 90 バージョン: 93.71
になっとるが、入れてみたらどうか?
# Radeonなら、最新入れろとは言えんがw
9283:2007/04/22(日) 18:23:23
いろいろありがとうございます。
これらの情報を元にちょっといろいろやってみます。
ただ、症状の発生条件がわからないのですぐに結果を確かめられないのがネックですが
93デフォルトの名無しさん:2007/04/23(月) 01:04:55
俺んところも残ることがある。
ソフトは D5 製で bsNone の上に ApplicationEvents.OnDeactivate で
Application.Minimize;

ShowWindow(Application.Handle, SW_HIDE);
とかやってる。

Vista にする前はそんなこともなかったから、OSのせいか、
ソフトの特殊性が原因だとあきらめていたんだが、やっぱビデオカードかな。

カードは、オンボードの nVIDIA GeForce 6150 なんだが、最新ドライバは、
インストールに失敗するんだな。これが。

ttp://www.asusjp.com/mb/vistadriver.html
V9.6.8.5 2007/01/30 アップデート
NvidiaDisplay9685_Vista.zip
9483:2007/04/23(月) 02:52:32
自分なりに再現手順を考えてみました。

Delphiを起動して新規作成。
ボタンを1個貼り付けてクリックイベントを作成する
procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
begin
 for i := 0 to 5 do
 begin
  Application.Minimize;
  Form1.Top := Form1.Top + 30;
  Application.Restore;
 end;
end;
コンパイルしてEXEを作っておく。


インターネットエクスプローラを起動し以下のページを開いて最大化しておく
http://homepage2.nifty.com/Mr_XRAY/Halbow/Chap08.html

先ほどのEXEを起動し、
インターネットエクスプローラの画面上で、Button1をクリックする。
アプリケーションが最小化・復帰を繰り返しながらちょっとずつ下がっていくが
この時にタイトルバーが残る。

3回ぐらいボタンをクリックしても1個もタイトルバーが残らなかった人は多分大丈夫な人。
うちの環境では3回もクリックすると12個は残像が残る。
9583:2007/04/23(月) 02:59:43
ドライバも入れ直して、91のやつも入れてみましたがダメでした。
Virtual PCの環境下では再現しないので、グラボやドライバが原因の可能性は高そうです。
それでもDelphi6、TurboDelphiで作ったソフト以外では再現しないようです。
96デフォルトの名無しさん:2007/04/23(月) 03:51:51
>>95
OSは、Vistaじゃないよな?
97デフォルトの名無しさん:2007/04/23(月) 04:38:53
ちゃんと嫁

>OSはXP pro Sp2
98デフォルトの名無しさん:2007/04/23(月) 06:58:13
rect:=Self.BoundsRect;
InvalidateRect(0, @rect, true);
Application.Minimize;
と、無理やり再描画させたらどう?
99デフォルトの名無しさん:2007/04/23(月) 08:43:27
Radeonに買い換えると描画も直ってさらに人生が明るくなるよ!
10079:2007/04/23(月) 10:16:16
>>82
ぜんぜんわかりません><

現象を再現するミニプログラムを作成している途中なのですが、追加条件が
ありました。

・AUTORUNで、CDから起動
・常駐
・Application.Minimize;
★1回以上CD-ROMに対するアクセスを実施
・休止状態→復帰

しかも、★で実行しているCD-ROMへのアクセス処理は、VC6で作成した
DLLの呼び出しで実現されています。

…この現象は一般化できなさそうですので、ここまでとさせていただきます。
お騒がせしました。
10183:2007/04/23(月) 19:59:18
>>98
procedure TForm1.MyMinimize;
var
 rc: TRect;
 pWnd, cWnd: THandle;
begin
 Application.Minimize;
 rc := BoundsRect;
 pWnd := WindowFromPoint(rc.TopLeft);
 Windows.ScreenToClient(pWnd, rc.TopLeft);
 cWnd := ChildWindowFromPoint(pWnd, rc.TopLeft);
 rc.Bottom := rc.Top + GetSystemMetrics(SM_CYCAPTION);
 rc.Right := rc.Left + Width;
 InvalidateRect(cWnd, @rc, true);
end;

こんな関数を作って
TForm1.WMSysCommandと、Application.OnMessageのSC_MINIMIZEの箇所に組み込んだところ、残らなくなりました。

この現象が起こるのはインターネットエクスプローラやHTMLヘルプといった
IEコンポーネント上だけのようなので一概にDelphiのせいだけではないようです。

とりあえず、これでこの質問はクローズさせていただきます。
ありがとうございました。
102デフォルトの名無しさん:2007/04/23(月) 20:02:29
Delphi使うのって大変だな・・
103デフォルトの名無しさん:2007/04/23(月) 20:34:07
不具合多し、ウィンドウ構造が特殊、ヘルプが腐ってる、本がない

初心者にやさしいDelphiなんていうのは嘘だな
104デフォルトの名無しさん:2007/04/23(月) 22:02:45
それぐらいでくじけるやつはいらないね
105デフォルトの名無しさん:2007/04/23(月) 22:07:20
LinuxとWindowsのデバイスドライバ アーキテクチャ比較
ttp://www.geekpage.jp/blog/?id=2007/4/23

Dellのマイケル・デル会長、自宅ではUbuntu Linuxユーザ
ttp://japanese.engadget.com/2007/04/20/dell-ubuntu-linux/
106デフォルトの名無しさん:2007/04/23(月) 22:50:11
ドトネトとWin32でDrawコマンドの使い方って違うのでしょうか?
Drawが未定義識別子といわれて困っております。
107デフォルトの名無しさん:2007/04/23(月) 23:21:41
>>106
同じだよ。
WinFormアプリケーションならまた話は別だが・・
Canvas.を書き忘れてるんじゃない?
108デフォルトの名無しさん:2007/04/23(月) 23:33:06
109デフォルトの名無しさん:2007/04/23(月) 23:48:15
チクショーまだページ直らないのかよ
110デフォルトの名無しさん:2007/04/23(月) 23:49:42
>>104
いらないっていうか、このごろは初心者にも相手にされてないけど
111デフォルトの名無しさん:2007/04/23(月) 23:51:03
>>109 高感度アップしたとかいってたヤツは逃げたのか?
112 ◆XcB18Bks.Y :2007/04/24(火) 01:33:27
どうでもいいマルチレスですが.
>>57,69
●フォームファイル(.dfm)の変化

・〜Delphi 4
 バイナリ形式のみ.文字列はShift-JISで格納.
・Delphi 5
 テキストファイル形式でも読み書きできるようになり,テキストファイル形式がデフォルトになった.
・Delphi 6
 文字列の記録形式の変更
 (2バイト文字を実体参照(数値文字参照)で格納するようになった…みたい)

※以後は知りません(すいません)

>>72
初代VBはWindows用です(たぶんWindows 3.1).
最初に開発したのは他社でMSが権利を買ったみたいです.
その後,DOS版のVBが作られました.
DOS用のQuickBASICを元に作られたようで,
BIOS画面みたいな文字ベースのウィンドウアプリを作ることが出来ました.
113デフォルトの名無しさん:2007/04/24(火) 13:04:24
教えてください。

MDIアプリで、
子でファイルを開いた時、
スクロールは表示されるのですが、
スクロールがアクティブならなず、

親のフォームのフレーム(アプリの外枠)を広げたら、
このスクロールがアクティブなるのですが、
ファイルを開いた時から、スクロールがアクティブになるにはどうすればいいでしょうか?
114デフォルトの名無しさん:2007/04/24(火) 14:25:18
コード無いと手がかりが乏しいが、といってコード書いてといわれて何レスにもコピペされてもアレだから
適当に想像で答えると、
ファイルを開いてるというのは、TListViewか何かを使ってるのかな?
で、自動的にスクロールバーが付くのだけど、それがサイズの関係で表示出来ないと
だったら 設計時はAlign:=alNoneで余白があるようにしておいて、
実行時に Align:=Clientniしてみてはどうかな
115デフォルトの名無しさん:2007/04/24(火) 14:43:53
今日、Borland Developer Studio 2006を
8万近くも払って買った俺は恐らく負け組み。
来週からdelphi始めるんでお前らよろしくな!
116デフォルトの名無しさん:2007/04/24(火) 16:42:12
>>114
ありがとうございます。
それだっ!と思い試したところ、うまくいかなかったです。・・・。orz
子にsoneditを乗せています。 
ちょっと外枠をドラックしてやればスクロールがアクティブになるのですが。

何かよい方法があれば、どうかご教授お願いします。
117デフォルトの名無しさん:2007/04/24(火) 17:12:17
>>116
どっかにソースをうpしてみては?
118デフォルトの名無しさん:2007/04/24(火) 18:23:46
Delphiを始めようと思うのですが、無償版はVer.6だけでVer.7は試用版ですか?
119デフォルトの名無しさん:2007/04/24(火) 18:30:19
無償版はTurboDelphiが最新
120デフォルトの名無しさん:2007/04/24(火) 18:37:50
>>119
ありがとうございます、Delphiはじめの一歩を買ってきたんですが、
Ver.6のシリアルがもらえなくて困ってました。
121デフォルトの名無しさん:2007/04/24(火) 22:45:32
VBみたいなもんですね、これ。
122デフォルトの名無しさん:2007/04/24(火) 22:46:20
ですです
123デフォルトの名無しさん:2007/04/24(火) 23:09:23
>>113
何だかよくわからないけど、

TForm.AutoScroll := False;
TSonEdit.HorzScrollBar := True; // 好きな値を入れる
TSonEdit.VertScrollBar := True; // 好きな値を入れる

とか。
124デフォルトの名無しさん:2007/04/25(水) 04:23:59
>>121
ビジュアル開発環境だからとっかかりはいいでしょう。

上級者になってもVC++に引けをとらないアプリを作れますよ。
問題は会社の存亡だけ。そこが一番問題なんだけどね。
125デフォルトの名無しさん:2007/04/25(水) 07:38:48
会社はなくてもDelphiは残るのでは。Lazarusという手も。
126デフォルトの名無しさん:2007/04/25(水) 14:06:30
>>117 >>123
レスありがとうございます。

結局、親と子の間にを入れて消したり付けたりでごまかせました。
127デフォルトの名無しさん:2007/04/26(木) 06:47:53
     .i\ /i
    < '´  ̄ ヽ
   __彡ノメノノlノリ〉 
   \ `ソリ!゚ ヮ゚ノi Delphi for PHPの話はここでいいのかしら?
     ><(つ!>つ 
    / ,く//_|l〉   
     ̄ l.ノl.ノ
128デフォルトの名無しさん:2007/04/26(木) 06:54:06
このスレで質問しても問題は無いだろうケド、回答者がいるかどうか
専用スレはないので、 for PHP の話題・質問は

【Turbo】 CodeGearオッチャ 【Delphi】
http://pc11.2ch.net/test/read.cgi/tech/1175128103/

が適当と思う。 
129デフォルトの名無しさん:2007/04/26(木) 14:34:39
PopupMenuのMenuItemをクリックして移動させることは出来ませんか?
130デフォルトの名無しさん:2007/04/26(木) 15:31:38
>>128
そこはグチルスレだからなあ・・・
131デフォルトの名無しさん:2007/04/26(木) 15:57:45
>>129
メヌーエディタで出来るよ。
132デフォルトの名無しさん:2007/04/26(木) 16:16:42
MDIアプリを作っています。

親フォームから子フォームのsoneditをコントロールしたいのですが、
今日一日ぐぐったのですがまったくもって操作できず、
TMDICHild(MDIChildren[0]).ShowLineNumber := True;
TMDICHild(MDIActiveChild).ShowLineNumber := Tuee;
などなど と、
このようにするのはわかったのですが、どちらもうまいくいかなく、

どのようにすればアクセスできるでしょうか? どなたか教えてください。
133デフォルトの名無しさん:2007/04/26(木) 16:32:23
>>131
あー、これです、これ!
メニューデザイナでやっているこれと同じことを
プログラム動作中にしたいんです。
134デフォルトの名無しさん:2007/04/26(木) 17:15:47
>>133
メニューデザイナはPopupMenuを使っていない。
そういうの自分で作る。

135デフォルトの名無しさん:2007/04/26(木) 18:24:43
>>134
TMDICHildを子フォームのクラス名(TForm2とか)に変更すれば動くと思う
136デフォルトの名無しさん:2007/04/26(木) 18:25:41
ミスった。>>132
137デフォルトの名無しさん:2007/04/26(木) 19:50:15
ふとしたことからDelphiで作成されたソフトで構築されているサイトを
引き継いでいるのですが
鯖をLINUXに移そうと考えています
もちろんDelphiで書かれたexeファイルはLINUXで動かせませんよね?
138デフォルトの名無しさん:2007/04/26(木) 19:58:02
Wineとか特別な事しない限りは。
139デフォルトの名無しさん:2007/04/26(木) 20:02:01
Winで動かしてる.exeなCGIってことならもちろん動かない。
古いバージョン使ってるならKylixに移植できるかもな。
140デフォルトの名無しさん:2007/04/26(木) 20:03:15
>>137
Lazarusでどう?
141デフォルトの名無しさん:2007/04/26(木) 20:05:53
>>138
>>139
すいませんLINUXの事はまださっぱりなんです
それと引き継いだ人とも連絡とれないので仕様もさっぱりわかりません
Delphiもしらないので・・・
http://www.gororin.net/sentori/download.htm
これなんですけどそこまではめんどうみてくれないですよね・・・
142デフォルトの名無しさん:2007/04/26(木) 20:12:39
>>138
>>140
wineとLazarusについてググってみました
これでなんとかしてみようとおもいます
できなかったらフリースペースでもとって他のウインドウズPCで動かそうかと思います
ありがとうございました
143デフォルトの名無しさん:2007/04/26(木) 21:21:04
>>132 です。

>>135
レスありがとうございます。
それだっ! と思ったのですが、残念ながらTMDICHildがクラス名でした。orz

何か解決さくはないでしょうか? どうかよろしくお願いします。
144デフォルトの名無しさん:2007/04/26(木) 21:23:14
>>143
一度、その現象が出てくる最小のプログラムでを作ってここでうpしてみ。
145デフォルトの名無しさん:2007/04/26(木) 22:09:38
>>144
ありがとうございます。 で、できました。 

MDIを新規作成して、ツールボタンで
procedure TMainForm.ToolButton13Click(Sender: TObject);
begin
TMDIChild(ActiveMDIChild).Memo1.Lines.Add('test');
end;

で、あっさりできました。 作り変えてみます。

ありがとうございました。

146デフォルトの名無しさん:2007/04/27(金) 01:05:53
Printerオブジェクトを使って画像の印刷、文字列の印刷、などができるようになりました。
で、よく工場や事務所などで多量の顧客達への領収書やらをガチャコン、ガチャコンと連続印刷してるのを見ますが、
あれって、専用のハード(汎用系?)でないとできないんでしょうか?
Delphiで実現できそうな方法があったら教えてください。
147デフォルトの名無しさん:2007/04/27(金) 05:52:18
専用の用紙とかないと難しいんじゃねーの
148デフォルトの名無しさん:2007/04/27(金) 07:01:38
必要なのはプリンタと用紙だな
用紙は、複写紙だと、あらかじめ2枚目3枚目に会社名とか印刷しておいた用紙じゃないとダメだしな
149デフォルトの名無しさん:2007/04/27(金) 10:51:51
>>145です。
MDIでアプリを作ってます。
>>145で解決したかと思ったのですが、
>>132 の原因がpanelの上に子フォームを乗せる
Child.Parent := Panel3;
このようにすることで、子フォームを>>132の方法で操作できなくなっていました。

Panelをparentした状態で、子フォームを操作する方法はありますでしょうか?
どなたか教えてください。
150デフォルトの名無しさん:2007/04/27(金) 11:08:43
>>146
複写用紙は未だにドットインパクトプリンタだな。
PC用のドットインパクトプリンタもまだ売られているから不可能な話では無い。
だが連票印刷は難しいぞ。トラクタフィーダのピッチが合っていないとすぐ印字がずれる。
ジャムったり(用紙の吸入・排出に失敗する)のもしばしばなのでいつでも止めて
再調整できるようにしないといけない。

で、汎用機なんだが実際の所現在は生粋の汎用機と言うものは殆ど残っていない。
クライアントもサーバーもPCにエミュレータ入れてその上で動作させている。

実はDelphiでもIBMの汎用機OSであるAS400と接続できる製品が売られている。
ttp://www.migaro.co.jp/contents/products/delphi400/point/index.html
151デフォルトの名無しさん:2007/04/27(金) 11:17:08
定義されている関数に一発で飛ぶ方法(ショートカットキー等)は
ないでしょうか。

------------------------------------
procedure aaa();
procedure bbb(); ←【※】

procedure TForm1.aaa();
var x : integer;
begin
x := 1;
bbb(); ←【ここにカーソルがある時に】
end;

procedure TForm1.bbb();
begin
Self.Enabled := True;  ←【ここへ一気に飛びたい】
end;
------------------------------------

「定義の検索」や、[Ctrl]を押しながら bbb(); をクリックすると、
※の部分に飛んでしまうので・・・。
いつも関数名を検索してひたすら[F3]連打で不便です。
プロジェクトマネージャのような感じで関数が一覧に出ていて、
そこをダブルクリックして飛ぶ形でも構わないのですが、
何か簡単に実コードのところへ飛ぶ方法があれば嬉しいです。
宜しくお願いします。
152デフォルトの名無しさん:2007/04/27(金) 11:19:50
※の位置に仮に飛んでも、そこから ctrl+shift+↓ で実装部に飛べるない?
153デフォルトの名無しさん:2007/04/27(金) 11:20:14
>>151
環境をかけ。
Delphi6personal以外ではジャンプ機能が標準で付いてる。
オレはそれらの機能だけのためにTurboDelphiに乗り換えたと言っても過言ではない
154151:2007/04/27(金) 11:45:11
>>152
そのショートカットキーは知りませんでした。
それで行けました。他に方法がなければこれで行ってみます。
ありがとうございます。

>>153
うっ……焦りすぎて超基本的なことを書いてなかったです。
申し訳ないです。Delphi2005、OSはXP(SP2)です。

欲しいと思っているのは、VB6の
[Shift]+[F2] (現在のカーソル位置にある関数等の定義位置へ移動)
[Ctrl]+[Shift]+[F2] (上で移動する直前の位置に戻る)
と同じ機能です。
155デフォルトの名無しさん:2007/04/27(金) 12:31:30
>>149
Formの管理下をはなれるんだからあたりまえ。
Componentsでも調べて走査すればいい。
156デフォルトの名無しさん:2007/04/27(金) 13:22:24
>>155
で、できました。(`・ω・´)
TMDIChild(Application.Components[3]).Memo1.Lines.Add('test');
ありがとうございました。
157デフォルトの名無しさん:2007/04/27(金) 15:54:18
ネトゲのツールを作成しようとしてパケット関係を調べているのですが
何かよい参考になるサイト等はございませんか?
158デフォルトの名無しさん:2007/04/27(金) 16:39:01
>>157
IndyとかDirectPlayとか
159デフォルトの名無しさん:2007/04/27(金) 17:28:59
>>150
サンクスです。
ちょっとあきらめますorz
16017:2007/04/28(土) 00:51:30
MemChkとかいうモジュールを組み込んでみたところ、
アプリの終了時にいくつかコンポーネント側の
メモリリークがあるのでEAccessViolationになるみたい。

だが、どのコンポーネントがリークの原因になっているか
までは漏れの技量では掴めない。。。
161デフォルトの名無しさん:2007/04/28(土) 07:05:17
>>157
mabi?
162デフォルトの名無しさん:2007/04/28(土) 09:31:49
>>160 Node.Dataがあやしい。
163デフォルトの名無しさん:2007/04/28(土) 14:10:49
TForm.Createをするとき、AOwnerに何いれてますか?
Self?
Application?
164デフォルトの名無しさん:2007/04/28(土) 14:18:02
Application.CreateForm(TForm1, Form1); とやれば自動的に Applicationになるな
165デフォルトの名無しさん:2007/04/28(土) 14:22:43
Formを自分でCreateする利点って何かあるの?
166デフォルトの名無しさん:2007/04/28(土) 14:28:36
リソースの節約とか同じフォームを何個も表示するときとか。
16717:2007/04/28(土) 14:33:20
>>162
レス、ありがとうございます。
その線で追跡してみます。
168162:2007/04/28(土) 16:14:35
>>167
TSchItem.Destroyの最後に↓を書くとよいかも?
inherited Destroy;
169デフォルトの名無しさん:2007/04/28(土) 18:24:20
ちょっぴりマルチですが・・・

Delphiを使用してVBMP3.dllを利用した音楽プレーヤーを作っていたのですが、問題が起きました。
"vbmp3_getState"(以下getState) 関数を使おうとすると、エラーが起きます。
コンパイル時ではなく、getStateを実行するステップに入った瞬間エラーが起きるのです。

元来VB用なのでエラーを出しているのか、私の書き方がおかしいのかもサッパリです。

READMEには"引数 : sec = 再生時間取得用"との記述もありますが、これが何を示すのかもサッパリ分かりません。
再生経過時間を取得する関数に何を渡せばいいのかが・・・

使用不可能なのか、可能だが私が間違えているのか。
宜しくお願いします。環境は以下の通り

使用DLL : VBMP3.DLL(v1.3.1.0とv1.6.1.5両方で試行)
開発環境 : BorlandDelphi6 Personal

この関数の宣言文(これがおかしい可能性大) :
function vbmp3_getState(sec:LongInt):LongInt;stdcall;external 'VBMP3';
170デフォルトの名無しさん:2007/04/28(土) 18:48:57
拡張子書かなくていいの?
171デフォルトの名無しさん:2007/04/28(土) 18:52:05
まず、そういうの聞くならVBの定義も書いてくれ。
元の定義はこうだ。
Declare Function vbmp3_getState Lib "VBMP3.dll" (sec As Long) As Long
LongはIntegerかLongInt相当、これはいいけど、
ByValが付いてないので、参照渡しという事になる。
つまり、これに成功すればSecが書き換わる

だから、
function vbmp3_getState(var sec:Integer):Integer;stdcall;external 'VBMP3'
あるいは値を返す為だけに使ってるみたいだから
function vbmp3_getState(out sec:Integer):Integer;stdcall;external 'VBMP3'
172デフォルトの名無しさん:2007/04/28(土) 19:45:46
>171
申し訳無い。実を言えばVBの定義すら分からなかった。
ググれば分かるし、ただの言い訳なんだけど。

マジでdクス、解決出来た
173デフォルトの名無しさん:2007/04/28(土) 19:48:16
マルチ先を見つけた。
http://www.kotaete-net.net/Default.aspx?pgid=14&qid=100361611551

元はさらに int64に間違ってたのか
174デフォルトの名無しさん:2007/04/28(土) 20:06:11
>173
恥ずかしい。LongIntの存在を完全に忘れていたもので・・・
175デフォルトの名無しさん:2007/04/29(日) 00:33:21
恥ずかしいのはマルチしたこと
176デフォルトの名無しさん:2007/04/29(日) 01:08:57
DelphiでMIDIメッセージを送信してMIDI音源の設定を操作するプログラムを自作しようかと思っているのですが、
Delphiを使ったmidi関係のプログラミングについて解説している参考書で何かオススメはないでしょうか?

midiOutなどのプログラミングの基本的な部分から勉強したいので初心者向けの内容のものを探しているのですが、
midi関係のものはなかなか本が見つからないのです・・・
177デフォルトの名無しさん:2007/04/29(日) 03:45:54
トラックバーのドラッグを解除した時の処理は、どうすれば良いのでしょうか?
TrackBarのイベントは全部試したのですが・・・書き方を間違えてるのかな・・・
178デフォルトの名無しさん:2007/04/29(日) 07:36:00
>>176 Delphiに拘らない事だ。 
 低レベルオーディオAPIの解説があれば、 他の言語で書かれていてもそのまま利用出来る。
あとMidiの基本は押えているんだよね?
179デフォルトの名無しさん:2007/04/29(日) 08:11:17
>>177 良く判らないのだが、マウスを放した時の処理なら

type
TMyTrackBar = class(TTrackBar)
procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
end;
procedure TMyTrackBar.WMLButtonUp(var Message: TWMLButtonUp);
begin
 with Form1 do Memo1.Lines.Add(format('%5d',[TrackBar1.Position])); //単なるサンプルコード
 inherited;
end;
////////////////
// 登録してあるものと置き換え
procedure TForm1.FormCreate(Sender: TObject);
begin
ChangeComponent(TrackBar1, TMyTrackBar);
end;

ChangeComponentはここ
http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2F%A5%B3%A5%F3%A5%DD%A4%CE%C9%D5%A4%B1%C2%D8%A4%A8

180デフォルトの名無しさん:2007/04/29(日) 08:14:41
2つのフォルダ内に同一ファイルがあるか検索をかける処理を教えてほしいのですが。
181デフォルトの名無しさん:2007/04/29(日) 08:17:54
findfirst
findnext
182デフォルトの名無しさん:2007/04/29(日) 09:45:25
>179
thx、しかし良く分からないな・・・
183デフォルトの名無しさん:2007/04/29(日) 10:01:21
.>>182
何をやりたいのか書いてくれればと思う。

・マウスの左ボタンを離した時の処理なら、TTrackBarにはイベントが無いので
 それを継承して追加しなければいけない。
一番簡単なやり方が >>179 だ。 追加コードは
 with Form1 do Memo1.Lines.Add(format('%5d',[TrackBar1.Position])); //単なるサンプルコード
の部分。

でも、このままだと、コードで生成して自分で位置あわせとか面倒。

で、貼り付けたコンポーネントと置き換えると簡単なのでそれをするのが
ChangeComponent(TrackBar1, TMyTrackBar);

184デフォルトの名無しさん:2007/04/29(日) 11:23:10
>183
勉強がてら簡単なプログラムを作ってるのですが・・・そうですね。
WMPの再生位置を変えるツマミ、あのような部品を作りたいのです。

トラックバーを使わない方法もあるのだと思いますが、思い付かなかったのでトラックバーで実装したんですが、
Changeイベントでトラックバーをドラッグして再生位置を変える、と実装したがために再生位置をトラックバーに自動反映する他のメソッドとぶつかって、
再生位置が進むごとにChangeイベントが発生し、再生位置がどんどんずれていくのです。


分かり辛い説明です。すみません・・・
185デフォルトの名無しさん:2007/04/29(日) 11:28:48
>>184
オレはこんな感じで回避してる
TrackBar1.OnChange := nil;
TrackBar1.Position := (ここで位置変更)
TrackBar1.OnChange := TrackBar1Change;
186デフォルトの名無しさん:2007/04/29(日) 11:37:02
俺は、主にフラグで回避だな
OnChangeで
if fGate then exit; と逃げて

fGate:=True;
try
TrackBar1.Position := (ここで位置変更)
finally fGate:=false end
187デフォルトの名無しさん:2007/04/29(日) 15:15:33
>185-186
マジで助かった。解決出来たよ・・・ありがとう
188デフォルトの名無しさん:2007/04/29(日) 17:34:35
今の今まで同等のコードを書いて使ってたけど
IncludeTrailingPathDelimiter 関数という関数が標準であることを今日はじめて知った。
こういう関数の存在はどうやって知ればいいわけ?
189デフォルトの名無しさん:2007/04/29(日) 17:36:10
>>188
パス関係でヘルプ検索。
それに関係するものを調べれば出てくる。
190デフォルトの名無しさん:2007/04/29(日) 19:50:40
ChangeComponentいいね
191デフォルトの名無しさん:2007/04/29(日) 21:23:20
FList : TList;

とか変数の命名規則について質問です。
このFって何の略なんでしょうか?ハンガリアン記法とはまた
違うもののような気もしますし…よくわかりません ><
192デフォルトの名無しさん:2007/04/29(日) 21:25:36
>>177
漏れは、OnChangeイベントを使わないで、タイマーでトラックバーを
動かして、CN_HSCROLL,CN_VSCROLLメッセージのTB_ENDTRACK
を処理するという↓の方法を使ったことがある

http://130.158.124.192/~takeuchi/delphi/article/060/060060.html

けど、>>185-186のやり方のほうが簡単かもね。

参考:
第26章 トラックバーとプログレスバー
http://homepage2.nifty.com/Mr_XRAY/Halbow/Chap26.html

>>191
"Field"のFだった希ガス。
193デフォルトの名無しさん:2007/04/29(日) 21:50:06
>>192
d。ATempList: TStringList; とかも発見したけど
これは Array の略っぽいね。Fはクラスのフィールド。ちぃおぼえた

http://post.138b.com:81/discuz/archiver/?tid-754.html
194デフォルトの名無しさん:2007/04/29(日) 22:16:14
AHogeってのは、Argumentのことじゃないかな…

こんな感じで。
function EnsureRange(const AValue: Integer; const AMin: Integer; const AMax: Integer): Integer; overload;
195デフォルトの名無しさん:2007/04/29(日) 22:50:04
Delphi2007が届いたけど、全く話題になってないな。
196デフォルトの名無しさん:2007/04/29(日) 22:51:35
>>195
使ってみた感じどう?
D7よりも軽い?
197デフォルトの名無しさん:2007/04/29(日) 22:52:02
最近はハンガリアンのように型ではなく
スコープ毎にプレフィックスをつけるのが流行り。
198デフォルトの名無しさん:2007/04/29(日) 22:53:21
>>197
pub_Excute見たいな感じか?
199デフォルトの名無しさん:2007/04/29(日) 23:14:28
>>194
すみません(´д`)よく見たら A は Argumet の A みたいでした。
AValue: Integer とか同じような箇所がある時点でArrayではないと
気がつくべきだよ漏れ orz
200デフォルトの名無しさん:2007/04/29(日) 23:16:44
this is a pen.
の a かと思ってた
201デフォルトの名無しさん:2007/04/29(日) 23:39:42
設計時はD7の方が軽い。
実効速度はあまり差を感じない。

IDEは重いけど、D7に比べると機能が充実してて、結構便利ですよ。
202デフォルトの名無しさん:2007/04/30(月) 05:30:13
ちょっとお聞きしたいのですが、
Application.ProcessMessagesをwith文で挟むと、
[エラー] 未定義の識別子:ProcessMessages となってしまいます。
withを使わなければいい話ですが、もし原因がわかれば教えて欲しいです。
203デフォルトの名無しさん:2007/04/30(月) 05:50:12
>>202
ん?
with Application do
 ProcessMessages;
でやってみたけど正常にコンパイルできたよ。
なにでwithしたの?
204デフォルトの名無しさん:2007/04/30(月) 05:53:42
おそらくApplicationというプロパティかメソッドを持つクラスでwithしたんだろう。
で、そのクラスのApplicationプロパティかメソッドの戻り値はProcessMessageというフィールドを持ってないんだろう。
205デフォルトの名無しさん:2007/04/30(月) 06:19:37
新規でMDIを開いた時、子フォームにはMemoが付いています。

それをRichEditに変えても別に変化ないのですが、
TEditorに変更したら、切取り コピー 貼り付け が動かなくなります。
Memoの時は、コピー 切取り 貼り付け する関数もなく 動いています。

これはどうしてこうなるのでしょうか?
206デフォルトの名無しさん:2007/04/30(月) 06:37:31
>>205
TEditCut, TEditCopy, TEditPasteのExecuteTargetで使われてる
GetControlがTCustomEditにしか対応してないから。
(TEditorはTCustomControlから派生してる)
207202:2007/04/30(月) 06:47:00
204さんの言うとおりでした。orz

で、Forms.Application.ProcessMessages と直すことで
Applicationプロパティを持つクラスをwithで指定してもエラーが出なくなりました。
ありがとうございます。
208デフォルトの名無しさん:2007/04/30(月) 06:54:29
あー、DirectXを標準コンポでつけてくれないかなぁ。
そしたら速攻で乗り換えるよ!
209デフォルトの名無しさん:2007/04/30(月) 07:00:55
>>206
ありがとう 
memoとかとは別物なんですね。 
210デフォルトの名無しさん:2007/04/30(月) 10:04:45
ManagedDirctXやっとけ
211デフォルトの名無しさん:2007/04/30(月) 12:43:38
管理辞書X に見えた俺は…orz
212デフォルトの名無しさん:2007/04/30(月) 13:27:13
よろしくお願いします。Delphi 6 Personalです。
PCのリカバリを行ったあと、DelphiとIndyをインストールして
過去に作ったプログラムを開こうとしたら、
「IdHTTP.MaxLineActionの読み込み中のエラー:プロパティが存在しません」
というエラーが出て、無視して開いても
「異なるSystem.RTL.Versionによりコンパイルされています」
というエラーが出てコンパイルできません。

もしかして自分が過去に使っていたのと違うバージョンのIndyを入れてしまっている
というエラーなのでしょうか? そのバージョン等を知る方法はありますか?
213デフォルトの名無しさん:2007/04/30(月) 14:04:49
Delphi6 RTLアップデート当ててないんじゃないの?
214デフォルトの名無しさん:2007/04/30(月) 14:12:24
>>213
うわー! それっぽいです!
今から当ててみます! ありがとうございました!
215214:2007/04/30(月) 14:33:26
喜び勇んでRTLアップデートを落としに行ったら配布終了してました…OTL
検索しまくっても配布されてるページが見つかりません。
どこかで再配布は行われていないでしょうか?
216デフォルトの名無しさん:2007/04/30(月) 14:40:23
>>214
検索したらぶち当たった。どういうサイトなのかは知らん。ご利用は自己責任で
http://202.33.253.145/delphi/del6up.html
217デフォルトの名無しさん:2007/04/30(月) 14:43:29
NS Lookupかけたら「www.borland.co.jp」だといわれた・・どういうこと?
www.borland.co.jp指定でアドレス移動するとsupport.borland.comにすっ飛ばされるんだが・・
218214:2007/04/30(月) 14:47:19
>>216
すごい! ありがとうございます。入れてみます。
自分、検索ヘタなのかな…
219デフォルトの名無しさん:2007/04/30(月) 14:59:05
Del6は非公式パッチも山ほどあるし再セットアップはほんと泣ける
220デフォルトの名無しさん:2007/04/30(月) 18:03:16
ListBox1.Items[1] := '';

とすると、エラーが出るのでしょうか。

先ほどからListBoxの処理でエラーが出てるのですが、どこがおかしいのか分からなくて・・・
221デフォルトの名無しさん:2007/04/30(月) 18:06:13
>>220
ListBoxに行が2行以上あればエラーにはならない。
コード晒せ。これだけの情報でどこがおかしいのか指摘するのは無理だ。
222デフォルトの名無しさん:2007/04/30(月) 18:08:20
221の言う通り、行がないのでエラーになってるキガス。
エラーメッセージを晒せ。

行が無い場合、ListBox1.Items.Add(''); で。;
223222:2007/04/30(月) 18:14:18
ふと思ったんだけど、もしや1行目に何か既に文字が入っていて、それを消そ
うと思ってる?
その場合、1行目は[0]なので、ListBox1.Items[0] := '';になるお。
224デフォルトの名無しさん:2007/04/30(月) 18:17:58
1行目代入して、2行目以降すっ飛ばしていきなり10行目を書き換えようとしてた・・・

ありがとう、解決した気がする
225デフォルトの名無しさん:2007/04/30(月) 18:46:21
itemindexとかcount使わなきゃ危ないよ
226214:2007/04/30(月) 21:37:02
だめだ…
RTLアップデート当てたり、Indy入れ直したり、Delphi本体を入れ直したり、
順序を入れ替えたりしまくってみましたがダメでした。
検索を続けてたら同じ症状の人がいました。
ttp://shonan.arrow.jp/modules/wordpress/index.php?p=68
結構メジャーな問題なのかもしれませんね。あきらめます。ありがとうございました。
227デフォルトの名無しさん:2007/04/30(月) 21:39:30
delwikiに手順が書いてあった気がする
228デフォルトの名無しさん:2007/04/30(月) 22:21:09
大変だな・・・いちいちネット検索しないと満足に使えない環境・・・
229デフォルトの名無しさん:2007/04/30(月) 22:24:42
FORTRANならネット検索しなくても使えるのにね
230デフォルトの名無しさん:2007/04/30(月) 22:34:46
RTLのバージョンが違うだけならIndyを再構築すれば問題ないと思うけど
231デフォルトの名無しさん:2007/05/01(火) 10:01:10
http://i-get.jp/upload500/src/up2879.png
こんな感じの見た目ソフトについて質問です
○とか☆がボタン代わりとして動作する予定です

これを作るために画像を用意し
イベントを受け取るのはどうにかなりそうなんですが
透過したい部分をどうすれば設定できるのかがわかりません
どこらへんの情報を探せばよいのかわからず困っております。
どうすれば良いかご存知の方教えていただけませんか?
232デフォルトの名無しさん:2007/05/01(火) 10:19:00
新規でMDIアプリを開いて、
ファイルを複数開いて、ウィンドウ 水平に並べて表示 と 垂直に並べて表示 クリっくで、
3ファイルまでは並ぶのですが、4つ以上になると乱れます。
どうすれば正常な状態に設定できますでしょうか?
233デフォルトの名無しさん:2007/05/01(火) 11:09:24
>>231
透過する部分は マウス座標のピクセルを見て透過色なら無効にすればいいのでは?
透過する部分に別のボタンがあるなら、そっちに再度メッセージを送らねば

>>232
水平に並べるのって、どういうコードでやってるの?
MDIは流行過ぎてしまって最近やらないから
234デフォルトの名無しさん:2007/05/01(火) 11:57:59
>>232
それは仕様です、としか言いようがないけどな。
別にDelphiに限らず、どのMDIも同じ動作をするもんだが・・。
どうしても気に入らないなら、自分でコードを書くしかない
235デフォルトの名無しさん:2007/05/01(火) 12:11:06
>>233
いまの流行って何?タブ型?
236デフォルトの名無しさん:2007/05/01(火) 12:12:50
ドッカブルなマルチタブをきっちり実装してるのが一番使いやすいな。
237デフォルトの名無しさん:2007/05/01(火) 12:24:35
>>233 >>232
どうもです。 

ただ気持ち悪かったので使用なら仕方ないです。 
MDI流行ってないかも?しれないけど、
MDIが当たり前に付いてるご時世なのでMDIでいきますう。
238デフォルトの名無しさん:2007/05/01(火) 19:19:21
procedure incint(var n: integer);
begin
inc(n);
end;

function incint(n: integer): integer;
begin
result := n + 1;
end;

といった引数を変更するものと戻り値で返す2つの関数を作る場合
一般的VCL的な命名ってありますか?
(上のコードはただの例で無意味なものです)
239デフォルトの名無しさん:2007/05/01(火) 20:18:03
>>238
自然に付けたら違いが出ると思うのだが、
たとえば、
increment は 参照渡しには適当だけど、下の例には違和感がある。

あと、同じような処理するならどっちかに統一した方がいいと思うよ
240デフォルトの名無しさん:2007/05/01(火) 21:01:45
>一般的VCL的な命名ってありますか?

ない
241デフォルトの名無しさん:2007/05/01(火) 21:39:16
>>226
RTLアップデートだけど
先に#2入れてから#3入れた?
これ順序正しく両方入れてないと駄目よん
indy君は
242デフォルトの名無しさん:2007/05/02(水) 00:59:20
indyって、ただインストーラを実行すれば使えるんですか?
正しい順序で入れてるのに使えないです。このあと何か作業が?
243デフォルトの名無しさん:2007/05/02(水) 01:47:54
超初心者です。

プログラムの画面にテキストボックスがあって、
そこに y=x^2+2 等と入力すると
その関数のグラフが描画されるというプログラムは簡単に作れますか?
244デフォルトの名無しさん:2007/05/02(水) 01:49:34
>>243
作れる

けど簡単かどうかはあなた次第では?
245デフォルトの名無しさん:2007/05/02(水) 02:00:08
'x^2+2' -> '0.5^2+2' -> 2.25
に変換するような電卓コードはそこら辺に転がってるから拾ってくればよし。
あとは
Image1.Canvas.Pixels[0..Width-1, 0..Height-1]の領域と
グラフの(-2, -2)-(2, 2)とかを相互変換するコードを書いてプロットしていけばよし。

グラフ描くだけならPowerCalcで十分って話もあるが。
246Delフサギコ ◆A6VzDeLphI :2007/05/02(水) 02:04:04
|,,∧   普通に
|Д゚彡 難しいと
⊂ミ   思います。
| ,;゙


このあたりを使ったほうが、よろしいんじゃないでしょうか。

関数グラフで遊ぼ!
http://tokyo.cool.ne.jp/inouemakjp/
BearGraph(Windows95/98/Me / ビジネス)
http://www.vector.co.jp/soft/win95/business/se090636.html
introfv
http://hp.vector.co.jp/authors/VA017172/introfv.htm
247デフォルトの名無しさん:2007/05/02(水) 08:10:45
>>233
TransparentColor,BorderStyle,bsNone,WMNCHITTEST
あたりを触ったらうまくいきました
ずっとAlphaBlendに引っ掛かって躓いておりました。
イベントの受取は画像を透過させた時点で自動的に解釈してくれるようです
Versionは 6.0 Personal Build 6.240 です。

ありがとうございました
248243:2007/05/02(水) 08:58:29
ちょうどFunctionViewに似たようなアプリを作りたいのですが、
こういうソフトは内部でテキストボックス内の数式をコンパイル(?)して、
数値計算部分も自分で作っているのでしょうか?
249デフォルトの名無しさん:2007/05/02(水) 09:45:29
通常DLLのApplicationってnilみたいなんですが、
このときApplication.ProcessMessagesは違反なんでしょうか。
250デフォルトの名無しさん:2007/05/02(水) 09:59:06
>>248
再帰下降のコードならそう難しくないよ。
浮動小数点?
251デフォルトの名無しさん:2007/05/02(水) 10:00:54
>>249
DLLの呼び出し元もDelphiなら Application変数に親のApplication変数を入れてやる
そうじゃないなら、誰かがメッセージループを回してくれないと困る事になる。
誰も回してくれないなら自分で回さないといけない
252デフォルトの名無しさん:2007/05/02(水) 10:00:56
そりゃ nil のオブジェクトのメソッドは呼び出せないだろうさ
253デフォルトの名無しさん:2007/05/02(水) 10:35:45
>>243
GikoBasicを使うと四則演算が出来るよ
http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2FGikoBasic
procedure TForm1.Button1Click(Sender: TObject);
var i , y:Integer;
begin
for i:=0 to 100 do begin
GikoScript.LET('x=' + IntToStr( i ) );
GikoScript.LET(Edit1.Text);
y:=round(GikoScript.ExecToVar('y') );
Canvas.LineTo( i , y);
end;
254デフォルトの名無しさん:2007/05/02(水) 11:39:53
某MLにはDLLのApplication.HandleにEXEのApplication.Handleを
代入してあげればいいようなことが書いてありましたが、
これだけではだめなんですかね。
255デフォルトの名無しさん:2007/05/02(水) 12:18:05
Application 変数がnilでなければソレでいいけど nilならソレではダメだ
uses Controls があればApplication 変数のインスタンスが作られている筈だけど
DLLの場合 バージョンが古いと initialization が呼ばれていないのかもしれない

でも、exe側にAppication変数があるなら代入した方がいいんじゃないのか?
256デフォルトの名無しさん:2007/05/02(水) 12:19:13
>>254
俺もDLL作ったことがあるけど、Application.Handleの代入なんてしたことないよ。

何を作ってて何ができなくて困ってるの?
それを書かずに「これだけではだめなんですかね」と言われても・・
257デフォルトの名無しさん:2007/05/02(水) 12:42:43
確かにDLLは自作アプリ用に使う事はあんまりないし
DLLに必ずVCLが必要な設計にすると他のツールでDLLを作って貰えない事にもなる。

何かのアプリのプラグインとかを作るなら、まずは作ってみて
それでメッセージループが回ってないとか、回ってるけど欲しいメッセージが飛んで来ないとか
の問題が出たら、しょうがないから自前でスレッドたてて回すしかないけどさ
258デフォルトの名無しさん:2007/05/02(水) 20:13:21
Application.ProcessMessages は、メッセージループとは直接関係ないよ。
259243:2007/05/02(水) 21:04:13
>>250
浮動小数店ではなく、固定の予定です。

再帰下降でぐぐってみます。
260デフォルトの名無しさん:2007/05/02(水) 22:17:33
再帰下降だろうがなんだろうが、数式評価は2,3日がんばればできるとか、
そんなに簡単じゃないよ。
261デフォルトの名無しさん:2007/05/02(水) 22:22:56
>>260
ヴィルト先生の本なり、コンパイラの作り方の本なり読めばすぐ出来ると思うが
262デフォルトの名無しさん:2007/05/02(水) 22:35:16
足し算と掛け算だけなら、この前ネタで書いた
http://pc11.2ch.net/test/read.cgi/prog/1173776887/950
一度書けば簡単
263デフォルトの名無しさん:2007/05/02(水) 22:38:47
「超初心者」
「簡単」
は人それぞれ感じ方が違うからな

ほかにも
Delphiは超初心者だがプログラミングは玄人
簡単だが半年程度の期間を要する作業
とか
264デフォルトの名無しさん:2007/05/02(水) 22:41:42
>>242
使える
RTLアップデートすると当然RTLのVer.が変わるから
そのあとにIndy入れる
元からIndy入れてて違うVerのIndy入れたいなら、
Indy関係をすっぱり消してから違うの入れる
ポトベタで使わないなら単にソースの場所を指定するだけでもOK

なんだけどねぇ
Vistaでインストーラだと問題あるのかもしれんけど
265デフォルトの名無しさん:2007/05/02(水) 23:03:18
過去ログにも四則演算にべき乗も出来るのがあったよ
http://piza2.2ch.net/tech/kako/995/995950803.html
この11
266デフォルトの名無しさん:2007/05/03(木) 00:05:18
数式入れてグラフ描きたいんだろ。平方根とか三角関数とかめんどくさそう。
267デフォルトの名無しさん:2007/05/03(木) 00:13:41
平方根は x^(0.5) で計算出来るだろ
三角関数は >>253 のなら簡単に追加出来るから、やりかた書こうか?
268デフォルトの名無しさん:2007/05/03(木) 00:57:42
いやだから、GikoBasic と何とか猿とかを使うのがいちばん実用的。ってことを
言いたいわけ。再帰下降でうんぬんは、初心者じゃ事実上無理。
269デフォルトの名無しさん:2007/05/03(木) 01:13:30
そりゃゼロから書くのは無理でも、
サンプルになるコードがあるんだから、それみて
ステップ実行させたりしてコード追いかければ判るだろ

1文字先読みと、演算子の優先順位を付けるために関数を別け、
優先する演算子が右側にないか見て貰うために上位の関数を先に呼ぶこと。
演算子を見つけたら関数のローカル変数に保存しては再帰してゆく事

こんだけだ
270デフォルトの名無しさん:2007/05/03(木) 01:49:16
           _________
   ∧,,∧∩  /  とりあえず
  ミ,,゚Д゚彡 <  文字列解析で
   ミつ旦.ミ   \  参考になったページ伝えておくぜ
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪

地球にやさしいアルゴリズム
第6回 上手なアルゴリズムの見つけ方:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070313/264703/

Delphiコードに移植してみると、楽しそうだね。
271デフォルトの名無しさん:2007/05/03(木) 03:16:01
TstringlistでObjects[i]の値がなぜかnilになってしまいます。
こういうことあるんでしょうか?
272デフォルトの名無しさん:2007/05/03(木) 03:18:54
基本的にNil
273デフォルトの名無しさん:2007/05/03(木) 03:36:07
objects[i]を変更した直後に確認するとnilでないのすが、違うところで確認すると
nilになってるみたいなんです。
何かが悪さしてるのかなぁ。
ありがとうございました。
274243:2007/05/03(木) 08:14:55
三角関数と対数のやり方も知りたいです。
275デフォルトの名無しさん:2007/05/03(木) 09:54:17
>>274
http://www.hamada-masahiro.com/products/default.aspx
にある EasyGraph がソースコード付きで公開されている。
 これは Delphi4 で開発されているが、俺の持っている Delphi5 では実行した
ときに
「不正な浮動小数点演算命令」
の例外が発生する。原因は unit EGUtils で定義されている TPairPoint 型(実
数の座標の対)にあるらしい。TPairPoint を自分流に書き換えればいいだろう。
当然これを使っている unit EGScreen も適切に書き換えればOK! 全体として
Delphi 初心者にはとても参考になるコードだと思われる。
276デフォルトの名無しさん:2007/05/03(木) 10:10:17
そっちがいいみたいね。
とりあえず、sinとexpだけ使えるようにしたもの
http://delwiki.info/?c=plugin;plugin=attach_download;p=%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2FGikoBasic;file_name=UGIKOSCR_test.lzh
277デフォルトの名無しさん:2007/05/03(木) 10:19:29
WideStringってUTF8の事なんですか?
C#の文字列と一緒?
あとAnsiPosやTStringListのWide対応版ってないんですか?
278デフォルトの名無しさん:2007/05/03(木) 10:49:57
WideStringってUTF8の事なんですか? ==> いいえ 16bit単位の入れ物です
C#の文字列と一緒? ==> いいえ
あとAnsiPosやTStringListのWide対応版ってないんですか? ==> 探すより作りましょう
279ミ,,゚Д゚彡 ◆A6VzDeLphI :2007/05/03(木) 11:33:31
>あとAnsiPosやTStringListのWide対応版ってないんですか?

作ってるよ。
AnsiPosのWide対応版は
http://delfusa.main.jp/delfusalibrary/20060527212010/StringUnit/StringUnitLight.pas
WidePosForward って関数を使ってください。

StringListのWide対応版は
http://delfusa.main.jp/delfusalibrary/20060527212010/TemplateList/WideStringRecordList.pas

CRLFもリストに含む形になるんだけど
便利に使っているよ。

ファイルの入出力は
http://delfusa.main.jp/delfusalibrary/20060527212010/StringUnit/StringUnitHeavy.pas
LoadWideStringFromFile/SaveWideStringToFileで、
WideStringの変数とファイルで直接やりとりができるようにしている。

軽い説明は、ここに書いておいてます。
http://delfusa.main.jp/delfusalibrary/20060527212010/Readme.txt

280デフォルトの名無しさん:2007/05/03(木) 14:33:13
277ではないが・・・
279をさっそくDLさせてもらいますた。
家帰ったら試してみるお!
281デフォルトの名無しさん:2007/05/03(木) 14:42:40
UTF8は文字のエンコードの種類で
WideStringは文字列を保持する変数の型

AnsiStringはUTF8の文字列を保持できないが
WideStringならUTF8の文字列を保持することが出来る。

で、あってる?
282デフォルトの名無しさん:2007/05/03(木) 14:46:50
表示できないけどね
283デフォルトの名無しさん:2007/05/03(木) 14:47:53
つかAnsiStringからの代入時に自動で文字コード変換までするのに
ただの入れ物呼ばわりはねーだろ。
まるっきりの嘘ではないけど説明が雑すぎ。
まずはWideStringの説明読んでおくといい。
284デフォルトの名無しさん:2007/05/03(木) 14:53:33
type UTF8String = string; で stringは for WIN32の場合 AnsiString だから

AnsiStringはUTF8の文字列を保持できない というのは間違いかもね。

285243:2007/05/03(木) 15:13:52
みなさんありがとうございます。
頂いたURLにあるソースコードを見て勉強してみます。
286デフォルトの名無しさん:2007/05/04(金) 01:17:29
MODALなShowMessageに似た機能はないでしょうか?
デバッグで使うためにDelphiを一時中断させたいのです
287デフォルトの名無しさん:2007/05/04(金) 01:40:37
ShowMessageでいいじゃn
288286:2007/05/04(金) 01:57:34
ひょっとしたら私がmodalの意味を間違えたかもしれないのでやりたいことを具体的に説明します。
TForm1.ApplicationEvents1Idleでループ毎にストップさせたいです。
そこで文字の表示と流れの中断が同時にできれば便利だと思い
modalな機能=Delphiの処理を中断してくれるものという認識で質問しました。
ShowMessageをTForm1.ApplicationEvents1Idleループの中で使ってみると
次々とポップアップするのでこれはmodalじゃないなと勝手に思っています

・TForm1.ApplicationEvents1Idleループを中断できる
・中断する条件を決められる(例えばif文によって)
・再開できる

といった機能を求めています
私の認識ではそれはModalなものであればよいという認識だったので先の質問になりました
ブレークポイントでは毎回止まってしまうので機能不足です
デバッガの機能も探しましたが条件にあうものを見つけられませんでした
よろしくお願いします
289デフォルトの名無しさん:2007/05/04(金) 02:05:11
>>288
ブレークポイント設定したら、赤丸右クリック。
或いは
if hoge then
 Beep; // この行にブレークポイント
290デフォルトの名無しさん:2007/05/04(金) 02:15:53
>>289
右クリックしたところブレークポイントが大変高機能だとわかりました
条件を指定して望みのタイミングで処理を止めることができました
まことにありがとうございます
291デフォルトの名無しさん:2007/05/04(金) 02:17:38
ようするに OnIdle を呼ばないModalループがあればいいのね。
ShowMessage()に相当するAPIのラッパ関数があったはずだ。それつかえばいい。
292デフォルトの名無しさん:2007/05/04(金) 04:53:55
Delphi の無料版をダウンロードして使ってみたのですが、
TChartは最新版では無くなってしまったのですか?
代用できるコントロールはありますか?
293292:2007/05/04(金) 16:26:12
TChartを何とか探し出してみました。
それで質問なんですが、

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type
TForm1 = class(TForm)
Chart1: TChart;
Series1: TPointSeries;
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
function Func(x: double): double; forward;


294292:2007/05/04(金) 16:26:53
procedure TForm1.FormCreate(Sender: TObject);
var
x, y: double;
i: Integer ;
begin
x := -5.0;
i :=1 ;
// グラフを描く
while x < 5.0 do
begin
y := Func(x);
x := x + 0.1;
Chart1.Series1.XValue[i]:=x;
Chart1.Series1.YValue[i]:=y;
i:=i+1
end;
end;



function Func(x: double): double;
begin
Result := x * x;
end;

end.

このようにコーディングすると、Series1が未定義というエラーになってしまいます。
上で定義しているはずなのですが、場所が間違っているのでしょうか?
295デフォルトの名無しさん:2007/05/04(金) 16:35:11
>Chart1.Series1.
 ~~~~~~~~
296292:2007/05/04(金) 16:39:16
>>295
早速ありがとうございます。

type
TForm1 = class(TForm)
Chart1: TChart;
Chart1.Series1: TPointSeries;
procedure FormCreate(Sender: TObject);

このように変更すると、

':' が必要ですが '.' が見つかりました.

となってしまうのですが、何故でしょうか?
297デフォルトの名無しさん:2007/05/04(金) 16:47:09
>>296 使い方が間違えているからだろう。
Chart1.Series1.XValue[i]:=x;

    Series1.XValue[i]:=x;

と、Chart1を外すべきだったろ
298292:2007/05/04(金) 16:54:54
>>297
修正してみました。

今度はリストがインデックスの範囲を超えているというエラーが出てしまいました。
何か初歩的なミスをしているみたいです。
299292:2007/05/04(金) 17:11:47
すいません、
リスト"の"インデックス"が"範囲を超えているでした。
300デフォルトの名無しさん:2007/05/04(金) 17:17:03
それは報告してるの? それとも、質問なの?
それとも、ヘルプ付いてないの?
 MaxValue プロパティは,リスト内の値の最大値を返します。
 新しいポイントが系列に追加される際,TChartValueList オブジェクトは MaxValue,MinValue および TotalABS プロパティを計算します。
 これは,XValues,YValues などのすべての系列の値リストに適用されます。
 TChartValueList.RecalcMinMax メソッドを呼び出すと,MaxValue,MinValue および TotalABS の値を再計算します。
301292:2007/05/04(金) 17:49:05
>>300
質問しているつもりでした。
手始めにx^2のグラフをプロットしてみようと思ったのですが、
みなさんならどのように組みますか?
302デフォルトの名無しさん:2007/05/04(金) 17:54:52
普通は PaintBox をフォームとかパネルに貼り付けて OnPaintに

with PaintBox1 do begin
x:=0 : Canvas.MoveTo( x , Height-x*x );
for x:=1 to Width do Canvas.LineTo( x , Height-x*x );
end;
303デフォルトの名無しさん:2007/05/04(金) 17:59:18
自分でデバッグできないなら辞めちまえ
304デフォルトの名無しさん:2007/05/04(金) 18:05:26
>>292はこの調子ですべてのコードを誰かに書かせる気か?
305デフォルトの名無しさん:2007/05/04(金) 18:11:18
他の言語はやったことあるけど
Delphiは初めて触ります、みたいな初心者臭がする。

ま、そんな人のためのくだすれなんだけど
306292:2007/05/04(金) 18:19:02
>>302
このコードで描けました

何かものすごく遠回りしたけど一気に解決しました。
後は何とかなりそうです。
307デフォルトの名無しさん:2007/05/04(金) 21:19:55
タブブラウザでTabControlとかTabSetってやっぱり使えないよな?w
308デフォルトの名無しさん:2007/05/04(金) 21:51:37
>>305
>>292はとても他言語やったようには思えないな
309デフォルトの名無しさん:2007/05/04(金) 22:10:11
よろしくお願いします。 Delphi 6 Personalです。
メインのフォームが出てる時、タスクバーに表示されている名前を
変える方法は、コンパイルのオプションでアプリケーションのタイトルを
変える以外にないでしょうか?
310デフォルトの名無しさん:2007/05/04(金) 22:13:54
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.Title := 'aiueo';
end;
311309:2007/05/04(金) 22:19:07
>>310
ありがとうございます。そういう方法でタイトルを変えることもできるんですね。
では、タイトルを変えずにタスクバーに出る文字だけを変えることはできないでしょうか?
312デフォルトの名無しさん:2007/05/04(金) 22:24:22
>>311
??
タイトルはForm1.Caption
タスクバーの文字はApplication.Titleじゃ納得できない?
313デフォルトの名無しさん:2007/05/04(金) 22:28:10
>>311 その質問は意味不明だよ。
タスクバーの文字列以外 Application.Title は見えないだろ
314309:2007/05/04(金) 22:29:05
>>312
あ、なるほど! そうですよね。やってみます!
315デフォルトの名無しさん:2007/05/04(金) 22:31:18
コンパイルのオプションでアプリケーションのタイトルを設定するのって
project1.dprに
Application.Title := 'タイトル';
が追加されるだけだろ?
316309:2007/05/04(金) 22:35:41
みなさんありがとうございました。無事できました。
Application.Titleという名前が、なんとなく大層な感じなので
触れてはいけないような気がしてただけでした。
317デフォルトの名無しさん:2007/05/04(金) 23:01:01
>>151
ショートカットではないのだが、
GExpertsの Procedure List は使っとけ。

Ctrl+Gに割り当てて使ってる。
インクリメンタル検索できて、一発で関数に飛べるのに便利だよ。

GExperts: Programming Tools for Delphi and C++Builder
http://www.gexperts.org/index.html


>>173-174

> 質問者からのコメント投稿日時:2007/04/28 18:21
>
> 締め切ります。

「 締め切ります」じゃねーよww
解決したら、解決策も向こうに書いておけよ。
せめて、このスレの該当レスにリンク張るとかよw
向こうの回答者はどういう気持ちか考えろ。

318デフォルトの名無しさん:2007/05/04(金) 23:16:41
遅レスすぎないか
319デフォルトの名無しさん:2007/05/04(金) 23:18:24
あるあるwwwwwww
「自己解決しました」とかw
どうやって解決したか書いとけよwwwwwwww
320デフォルトの名無しさん:2007/05/04(金) 23:24:21
321デフォルトの名無しさん:2007/05/04(金) 23:38:27
               __________
       ∧,,∧   / 自分で質問した事について
      ミ ,,゚Д゚ミ <  まとめを書いて
    ∬ (し, ミ_と)_ \ アップする
   /且       /||    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   || ̄ ̄ ̄ ̄ ̄||

さすれば、より成長できるでありましょうね。
322Delフサギコ ◆A6VzDeLphI :2007/05/04(金) 23:59:19
( )
 ( )   ( )
   ∧=∧ ポゎ〜
   ミ*゚Д゚彡 
| ̄ ̄∪∪ ̄|
|  ┼─┼ .|  
|   /\ .|
|  / ホ \|
\____/
  └─┘

ところで、質問、よろしいっすか〜
相変わらず漏れは、EmEditorPluginで、激しく楽しく文字列処理を行っているのですが
(なじみのエディタに追加する文字列処理が、Delphiコードで書けるってのは、 素敵に心地よいものです)

ソート処理として
通常の辞書ソート、、、は、CompareStringW
で、やってていいんですが
数値でソートということもやりたくなってきました。

漏れの考えている数値でソートっていうのは

ABC1DEF
ABC2DEF
ABC10DEF

という順番で並ぶソートなのですが
323Delフサギコ ◆A6VzDeLphI :2007/05/05(土) 00:00:02
 ( )   ( )   
  ∧=∧    / ここで、ちょっと疑問が。
 ミ,,゚Д゚彡∩ <
| ̄U ̄ ̄ ̄.|  \
|  ┼─┼ .|   

ある文字列中に含まれているものから
数値を抽出するコードが悩ましいのです。

ABC+123.567DEF、から、+123.567を抽出したいし
ABC.567DE123F、から、.567と、123を抽出したい。

function(文字列): Extendedの動的配列;
という処理を書きたいのですが

『+-0〜9.,』(カンマ3桁区切りも数値として認識させたいから)
これらの文字を数値として認識し、
文字列から複数抽出するという
コードを、スタックマシン>>270参照

で、導き出したいと思ってます。

....誰か、こーいうコード、書くの得意で
教えるのも得意で、漏れにいろいろヒントくれる人
いませんですか....GWのパズル遊びがてら気分で。

・・・・なんか専門学校の宿題っぽいんですけど(w

EmEditorでは、辞書ソートPluginと数値ソートPlugin、
どちらも公開しているんですが
ソースは特に読んだことないっす。(C++だろうから(w
324デフォルトの名無しさん:2007/05/05(土) 00:12:16
てかDelフサギコってまだいたのかよwww
かなり懐かしいなwwwww
325デフォルトの名無しさん:2007/05/05(土) 00:38:30
>>323
ほいほい、20年ほど前にFORTHで遊んでたおっさんが来ましたよ
GWはもうすぐ終わりだね
そこで言うスタックマシンって再帰的な構造の文字列(リンク先ではhtmlのタグのネスト)
を解析するために使ってるんだろ、
君が作りたいものに当てはめるのは、無理がないかい?
326デフォルトの名無しさん:2007/05/05(土) 00:41:51
>>323
そんなもん正規表現で楽にいけねーか?
327ミ,,゚Д゚ミノ ◆A6VzDeLphI :2007/05/05(土) 02:03:18
ぃょぅ、久しぶり!

そなの。FORTHで遊んでましたですか。素敵ですね。
再帰系には使えないの?スタックマシン。

いちおう、そのリンク先のコードはDelphiで置き換えられるくらいの理解はしたんだが、
応用がまだねえ。奥が深いわね、文字列パーサーは。

例えば
あいうえお2007/05/20
かきくけこ2007/4/30
こういうものも、日付順にソートするために

[2007][5][20]と
[2007][4][30]を、抽出したいんだよ。

できるかしら。

Regular Expression(Riue ちゃんの正規表現講座) - Index
http://www.sixnine.net/regexp/index.html
正規表現はここの内容で理解して、ページ自体はすばらしくわかりやすくていいんだけど
正規表現、それ自体が、
なんか、嫌いなんだよね。使えそうで使えなさそうで、わけわかな記号の嵐で
可読性の低いあたりが、、、
今回の件で使えるなら、教えてくださればうれしいっすー。
328325:2007/05/05(土) 02:26:08
>>327
>再帰系には使えないの?スタックマシン。
そうじゃなくてね、再帰的だからスタック使うわけで
君のやりたいことは再帰的じゃないでしょ?ってこと
頭からサーチして抜き出すだけじゃん

スタックマシンとか言ってるけど、リンク先の話はスタックを利用した
アルゴリズムであって、スタックマシンじゃないよね

ちなみにはじめのPascalコンパイラはスタックマシン用に実装されたそうだ
そのときのヴィルト先生の教え子の一人がフィリップ・カーンだったとか

pcodeインタプリタも仮想スタックマシンだったし、スタックマシンとPascalは縁が深いね
329デフォルトの名無しさん:2007/05/05(土) 02:50:15
>>322,323
正規表現で該当数値をぱっぱと抽出して自然順ソートを使えば?

http://textexpage.s154.xrea.com/software/ttknatsort/
ここで自然順ソートのDelphi移植版が公開されてるよ。
330デフォルトの名無しさん:2007/05/05(土) 02:55:03
>>327
2007/05/20を

(\d)/(\d)/(\d)



$1…2007
$2…05
$3…20

が格納される。


正規表現は是非覚えるべきかと。
一日あれこれ試してたらすぐにある程度は使いこなせるようになるから。
331デフォルトの名無しさん:2007/05/05(土) 03:07:57
ウインドウ右上の最小化ボタンをクリックした時の処理はどう記述すれば良いのでしょう?
332デフォルトの名無しさん:2007/05/05(土) 03:10:38
>>331
Application.Minimize;
333デフォルトの名無しさん:2007/05/05(土) 03:12:05
>>327
Ruby なんかだと、正規表現で、

"ABC+123.567DEF ABC.567DE123F".scan(/[+]?\d*\.?\d+/).to_a.each {|s| puts s.to_f}

みたいに一発でかけるんだが、Delphiだとちと面倒じゃの。(そんなに変わらんか)
334その1:2007/05/05(土) 03:12:49
ローカル変数(procedure内でvarした)のPItemはDisposeしなくていいのでしょうか。
ローカルだしいいのかな。
type
{ リスト が保持するデータ }
PItem = ^TItem;
TItem = record
Item: pointer; { データへのポインタ }
Prev, { 前のデータ }
Next: PItem; { 次のデータ }
end;

{ 双方向線形リスト }
PList = ^TList;
TList = object
{ private }
Name: String[255];
Head, { データの先頭 }
Current, { 現在のデータ }
Tail: PItem; { 最後のデータ }
{ public }
constructor Init;
destructor Done;
procedure Add(Item: pointer);
function Get: pointer;
procedure Rewind;
procedure Delete(IndexN: Integer);
procedure Swap(IndexA, IndexB: Integer);
procedure Insert(IndexN: Integer; Item: Pointer);
end;
.
.
.
335デフォルトの名無しさん:2007/05/05(土) 03:14:25
>>334
場合によりけりです。

Createして、責任があるのなら、Disposeすべきだし
参照しているだけなら、しなくてよい。
ローカルかどうかかは関係がない。責任の有無の問題。
336その2:2007/05/05(土) 03:14:56
{ A行目とB行目を入れ替える }
procedure TList.Swap(IndexA, IndexB: Integer);
var
ProvA, ProvB, Prov: PItem;
a, a0: Integer;
begin
New(ProvA);
New(ProvB);
New(Prov);
Current := Head;
if Current <> Nil then { リストが空でないなら }
begin
a0 := 1;
if IndexA > 1 then { 2行目以降なら }
begin
for a := 2 to IndexA do { A行目まで進めて }
begin
if Current <> Nil then
begin
Current := Current^.Next;
a0 := a0 + 1;
end;
end;
end;
if a0 = IndexA then
begin
ProvA := Current;
end;
end;
337331:2007/05/05(土) 03:17:22
言い方が悪かったのかな・・・訂正します。

ウインドウ右上の最小化ボタンをクリックした時に実行したい処理はどう記述すれば良いのでしょう・・・
最小化をクリックしたらタスクトレイに格納する、という処理をしたいのですが・・・
338334:2007/05/05(土) 03:18:09
>>335
早速のレス感謝します。
Disposeしちゃうと遠隔操作でグローバルのデータ消しちゃったことになるのでしょうか。
339その3:2007/05/05(土) 03:19:36
//
Current := Head;
if Current <> Nil then { リストが空でないなら }
begin
a0 := 1;
if IndexB > 1 then { 2行目以降なら }
begin
for a := 2 to IndexB do { B行目まで進めて }
begin
if Current <> Nil then
begin
Current := Current^.Next;
a0 := a0 + 1;
end;
end;
end;
if a0 = IndexB then
begin
ProvB := Current;
end;
end;
//
prov^.Item := provA^.Item;
provA^.Item := provB^.Item;
provB^.Item := prov^.Item;
//
{これをコメントアウトしないとエラーになる。
Dispose(ProvA);
Dispose(ProvB);
Dispose(Prov);
}
end;
340デフォルトの名無しさん:2007/05/05(土) 03:20:31
>>337
フォームの最小化ボタンはTForm1.WMSysCommandで
タスクバーのメニューから最小化を選んだときはApplication.OnMessageで
それぞれSC_MINIMIZEの時の処理を書く
341340:2007/05/05(土) 03:27:19
procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
 if (message.CmdType and $FFF0 = SC_MINIMIZE) and (Application.MainForm = Self)then
 begin
  (処理)
 end;
 inherited;
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
 case Msg.message of
  WM_SYSCOMMAND:
   case Msg.wParam of
    SC_MINIMIZE : (処理);
   end;
 end;

(処理)は関数化しておくと楽。
342デフォルトの名無しさん:2007/05/05(土) 06:03:24
タスクトレイに格納したいんだろ。質問がそもそも見当ちがいだが
343デフォルトの名無しさん:2007/05/05(土) 06:39:08
TApplicationEventsコンポーネントをフォームに追加して
OnMinimizeイベント内にSelf.Visible := Falseの1行を追加すればOK

但し、フォームサイズが最小化された時全てにおいて発生するから
フォーム右上の最小化ボタンを押されたときだけにしたいなら
>>341が書いてるようにSC_MINIMIZEを捕まえる必要があるが
344デフォルトの名無しさん:2007/05/05(土) 07:04:45
>>323 >>327
なんでソレでスタックマシンだの正規表現が出てくるのかわからん。
やりたい事はあくまでも2つの文字列の比較だろ?

2つの文字を示すポインタか、2つの文字のストリームを
順に比較していって、双方が数値になったら比較するという処理になる。

ポインタでやるのか、ストリームでやるのか、どっちが好きなんだ?
345デフォルトの名無しさん:2007/05/05(土) 07:21:35
>>336
その場合、 Newしてるのが間違い。
ProvA := Current;
ここでポインタが書き換わってしまっているので、
New(ProvA); した実体はポイント先が無くなり つまりメモリリークしてる

>>339で Dispose(ProvA);  したのは、 New(ProvA) した実体ではなく
ProvA := Current;  で代入された リンク内の実体になってしまっている
346デフォルトの名無しさん:2007/05/05(土) 07:57:17
>>322
まず、
ABCDEF
ABC DEF
ABC  DEF
ABC 1DEF
ABC 01DEF
ABC01DEF
ABC10DEF
の場合、 どういう順に並べたいの?
まず空白を
   文字に含めるのか、
   数字に含めるのか、
   あるいは文字や数字よりも順位を下にしたいのか
347デフォルトの名無しさん:2007/05/05(土) 08:06:18
XPのエクスプローラのファイル名順と同じようにしたいんじゃないか?
348デフォルトの名無しさん:2007/05/05(土) 08:07:34
正規表現覚えるより性技表現を覚えた方がいい人生になるよ
349デフォルトの名無しさん:2007/05/05(土) 08:30:35
>>347
という事は
1、文字より数字が小さい
2、空白は文字
3、数字が連続していれば数字として比較
という事だね
350デフォルトの名無しさん:2007/05/05(土) 08:36:47
4、数字において 01 と 1は同じ 
5、01と1のように同じ数字が続いた場合は次の文字列で比較される
6、最後まで同じなら、なぜか文字列が長い方が小さいとなる

こんなところか?
351デフォルトの名無しさん:2007/05/05(土) 09:12:17
正規表現は使えなきゃ駄目だろ・・・
プログラミング以前にさ・・・
352デフォルトの名無しさん:2007/05/05(土) 09:25:09
>>322
それは、普通に文字列を順に比較していって、両方が数字の時だけ
数字として切り出して比較するという処理でいいわけで

もしかして
AnsiChar なら
if (src[si] in['0'..'9']) and
(dst[di] in['0'..'9']) then begin と書けるけど
WideCharだとメンドクサイという話?
353336:2007/05/05(土) 10:45:29
>>345
レス感謝です。
なるほど、
なんでもかんでもNewすればいいというものではないんですね。

Newをコメントアウトしてみました。
コンパイルすると警告で「初期化されてない可能性があります」と出ます。
実行してTList.Swapを試みると、ダイアログで「書き込み違反がありました」と出ます。

現状ではNewだけいれてDispose無しの状態で実行していますが
これのせいでメモリにポインタ領域がたまりまくってしまうのではという心配があったので
質問しました。

他の手続きではNew無しで実行できているのもありますし、もうすこし研究してみます。
ありがとうございます。
354デフォルトの名無しさん:2007/05/05(土) 11:20:06
>>353
Newを外してエラーが出るのは、その手続きに問題がまだあるから
リストの個数が十分にない場合とか、リストの参照が得られずに交換されてしまう
355336:2007/05/05(土) 14:22:02
>>354
作ってみてわかったんですがこれってAとBを入れ替えるだけです。
作りたかったのはBの位置にAを挿入(B以降は1ずつずれる)する手続きだったので
Bの位置にInsertして元の位置のAをDeleteするという方法でやってみようと思います。
うまくいけばそれらを1つの手続き(or関数)としてまとめらると思いますし。
ありがとうございます。
356デフォルトの名無しさん:2007/05/05(土) 14:30:43
>>355
ええと、AとBを入替えるだけなら
Item へのポインタだけを入れかえる、今のスタイルの方がいいよ。

ただ、双方向リストで、何番目という情報を渡すのはどうかと思う。
俺なら
Type TAPItem = record arrays: array of PItem; end

function GetArrays: TAPItem ; // 現在のリストをアレイに固定する
という関数を用意して処理するけどね。
357336:2007/05/05(土) 15:27:32
>>356
ご親切、感謝します。
function GetArrays: TAPItem; についてですが、
今の私には運用方法がいまひとつ掴みかねるので
この方法は設計に取り入れられず申し訳ありません。
InsertとDeleteでなんとか組み立ててみました。
全てを関数内部で処理できていないのでややスマートさに
欠ける感じはありますが、InsertとDeleteは何回かのテストで
安心できるレベルでしたのでこちらでいこうとおもいます。

やはり双方向リストはインデックスで追跡することが
難しいですね。
GetArraysの方法も勉強します。
ありがとうございます。
358デフォルトの名無しさん:2007/05/05(土) 16:59:45
generics 使えるとといとも簡単なんだがなぁ・・いまだ対応してないし
359デフォルトの名無しさん:2007/05/05(土) 17:10:50
リスト構造の事? 336さんが嵌ったのはリスト構造の部分じゃなくてポインタについての部分。
この段階で理解せずにリスト構造使おうとすると、
Delphiは高級言語といっても今の基準からいうとローレベルな言語だから、
基本は自分で押さえないと、仮にgenerics あっても使えないのは C++と同じ事情になるだろう
360デフォルトの名無しさん:2007/05/05(土) 18:16:00
ポインタなんかはgenericレベルじゃ意識しなくて済む。データ構造のアルゴリズムを
型セーフに継承できるから、項目の型を意識しなくてすむし、キャストも必要なくなる。
361デフォルトの名無しさん:2007/05/05(土) 18:16:05
>340,343
マジ感謝。
学校で勉強させられてるのがcobol(笑)だから、こういう言語はどうにも不慣れで・・・
362デフォルトの名無しさん:2007/05/05(土) 18:21:47
>>360
まあ、Delphiが唯一提供してるgenericである 動的配列だけで、なんとか後5年はガンバレるさ
363デフォルトの名無しさん:2007/05/05(土) 18:31:57
> Delphiが唯一提供してるgenericである 動的配列だけで
kwsk
364デフォルトの名無しさん:2007/05/05(土) 18:45:44
そんな簡単に釣られるなよ。
365デフォルトの名無しさん:2007/05/05(土) 19:46:19
mp3ファイルなど名前をリネームすることはできるんですが…
wmpで表示される
タイトル、アーティスト、アルバム、ジャンルなどの各要素を
delphで任意に書き換えるにはどうすればよいでしょうか?

是非、ご教授よろしくお願いします
366デフォルトの名無しさん:2007/05/05(土) 19:56:21
TFileStreamを使えば可能です。

なお、
タイトル、アーティスト、アルバム、ジャンルは
ファイルの先頭にある場合と、ファイルの一番後ろにくっつけられてる場合があります
検索キーワードとしては

RIFF
ID3タグ

367331:2007/05/05(土) 20:05:36
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
 Self.Visible := False;
 TaskTrayMini1.SetIcon(KIND_ADD,Application.Icon,Form1.Caption);
end;


procedure TForm1.Undo1Click(Sender: TObject);
begin
 Application.Restore;
end;

procedure TForm1.ApplicationEvents1Restore(Sender: TObject);
begin
 Self.Visible := True;
 TaskTrayMini1.SetIcon(KIND_DELETE,Application.Icon,Form1.Caption);
end;


TaskTrayMiniと言うコンポーネントを使って、最小化をしようとした時にタスクトレイヘ、
元の大きさに戻す時にタスクトレイから消去という処理をこう記述しているのですが、
2回目以降の最小化で、何故かタスクバーから消えずタスクバーとタスクトレイ両方に表示されると言う現象が起きてます。

頼りっぱなしですが、宜しくお願いします。
368デフォルトの名無しさん:2007/05/05(土) 22:32:06
>>367
Application.OnMinimizeはApplication.Minimize後に呼び出されるんやけど

Application.Restoreの実装の都合上、
Application.Minimize後にMainFormを非表示にした場合は
Application.Restoreを呼び出す前に、MainFormを表示状態に戻しとかなあかんみたい。

だから367のコードの場合
procedure TForm1.Undo1Click(Sender: TObject);
begin
 Self.Visible := True; // ←追加
 Application.Restore;
end;

にしとくと望みどおりに動作する、はず。
369デフォルトの名無しさん:2007/05/05(土) 23:20:20
配布されてるDelphiの実行ファイルが、どのバージョンのDelphiで
作られたものか見分ける方法はないでしょうか?
370デフォルトの名無しさん:2007/05/05(土) 23:27:04
知ってどうしたいの?
371デフォルトの名無しさん:2007/05/05(土) 23:28:10
>368
解決しました。thxです。

ヘルプとグーグル先生だけでは限界があるなぁ・・・
372デフォルトの名無しさん:2007/05/06(日) 01:23:35
>>366
とても参考になりました
ありがとうございます!


以下改めて質問です

kensaku_moji ←検索キーワード
honbun ←キーワードが含まれるか調べる任意の文字列
AnsiPos('kensaku_moji',honbun);

この時
任意の文字列にNull文字が含まれるか調べる場合
kensaku_mojiはどの用に設定したらよいのでしょうか

自分が考えたのは
'',ord(0),#0
なのですがどれを使うのが良いのでしょうか?

これが良いorそんなんじゃできないよ
どうぞ教えて下さいorz

※使用目的はID3タグの各要素の終端を調べる処理です。
(ファイルの各要素がもしNUll文字を含むならNull文字の1文字前までをCopy()したいのです)
373デフォルトの名無しさん:2007/05/06(日) 01:36:11
>>372
$0
374デフォルトの名無しさん:2007/05/06(日) 05:47:03
質問がありますが、自己解決しました。

ありがとうございました。
375デフォルトの名無しさん:2007/05/06(日) 06:22:35
>>374
解決したら、解決法を書くことw
376デフォルトの名無しさん:2007/05/06(日) 07:37:08
>>372
AnsiPosは#0が入っているとそこで検索を打ち切る筈
だからヌル文字は終端として扱えばいいので考慮する必要はない

なお、
'',ord(0),#0
の3つでヌル文字なのは 3番目の#0だけ 。他の表現は char(0) とか AnsiChar(0)


またPChar型の変数からstringにコピーすると、ヌル文字を終端として打ち切ってくれるし
stringからPCharに型変換すると#0が付いてる

だから 
文字列SにNUll文字を含むならNull文字の1文字前までをCopy() する処理は
S:=PChar(S); と書ける
377デフォルトの名無しさん:2007/05/06(日) 10:07:40
つまり、

type TID3v1=packed record
  Signature: array [0..2] of Char; { Should be: 'TAG' }
  Title, Artist, Album: array [0..29] of Char;
  Year: array [0..3] of Char;
  Comment: array [0..29] of Char;
  Genre: Byte;
end;

var tag:TID3v1;
var s:string;

tag.Signature:='TAG';
tag.title:='abcdef';
s:= tag.title;

length(tag.title) --> 30 を返す
length(s) ----> 6 を返す

文字列型に代入した段階で、ヌル文字までのサイズになる
378デフォルトの名無しさん:2007/05/06(日) 11:24:11
手持ちにDelphiのVer3、4、5、6、7、2006があります。
けっこうVer7をつかっていたのですが、最近不安になることがあります。
2006をいれたとき、7は消去しました。まだ大丈夫だと思うのですが、
何回も消去して再インストールすると認証しなくなるそうですね。
リナクスをマスターしようと思って何度もパーティーションを切ったりして
OSごと再インストールを繰り返したので、もう10回ぐらい再インストールを
繰り返しました。後何回ぐらい大丈夫でしょうか?
それから、5までは認証がないので5を使い続けるのもありかと思いますが
BDEを強制インストールするのが嫌でたまりません。どうしたらいいでしょうか。
379デフォルトの名無しさん:2007/05/06(日) 11:26:36
LinuxなんてVMPlayer+Ubuntuでも使っとけよ。
インスコするならHDD別にしてBIOSのブートデバイスで選択・起動がお勧め。
380378:2007/05/06(日) 11:27:50
私のマシンは富士通のノートパソコンでPenM1.7Ghzです。
メモリは1.5GBフル装備にしました。でも2006は起動が爆遅です。
マシンは当面買い換えることができません。もうすこし軽い環境と
いうことでturboを考えていますが、2006と同居できないそうで、
アンインストールするのも認証問題であまりしたくないし。
どんなものでしょうか?2007がお勧めでしょうか?
381デフォルトの名無しさん:2007/05/06(日) 11:31:00
>>378
CodeGearに電話しれ。回数リセットしてくれるから。
382デフォルトの名無しさん:2007/05/06(日) 11:34:21
>>378
それは、ボーランドに聞いてみたらどう?
俺はD7の登録キー方式でそこまで複雑な管理が出来る筈が無いと思っているから聞かないが、

心配なら自分で確認すればいい。
383デフォルトの名無しさん:2007/05/06(日) 11:42:44
>>280
2007は軽いらしいがどうだろう?
だれか、2007使っている人いる?
起動だけなのかな?
384デフォルトの名無しさん:2007/05/06(日) 12:32:57
>380
Turboは別に軽くない(はず)。スタートメニューからたどってBDS2006のなかにC++Builderとか
Delphiとか単一のパーソナリティのみのショートカットから起動することで若干軽くなるみたい。
Delphi2007は起動とか動作とかD7なみと公称しているが、まだ導入していないんで不明。
アクチの回数については確か10回で、Borland(CodeGear)のアクチ窓口に電話してリセットしてもらえる。
385デフォルトの名無しさん:2007/05/06(日) 13:52:10
>>376-377
コードまで書いて下さって
マジありがとうございますm(_ _)m
386デフォルトの名無しさん:2007/05/06(日) 14:44:43
TBitmapの画像をTImageのDrawメソッドでコピーしたら、
TImageに設定していた透過色が有効でなくなってしまいました。
透過色はTImageのもののままで、TBitmapの画像をコピーするにはどうすればいいんでしょうか?
387デフォルトの名無しさん:2007/05/06(日) 14:58:40
TBitmap を Draw する直前に、TBitmap の Transparent も True にしたら、無事透過できました。
m(_ _)m
388デフォルトの名無しさん:2007/05/06(日) 14:59:22
>>387
よかったね(^-^)
389386:2007/05/06(日) 16:30:01
>>387
どなたか存じ上げませんが、TransparentをTrueにしたらできました。
ありがとうございました。
390378:2007/05/06(日) 18:02:44
>>379>>384
レスポありがとうございます。
アクチは10回ですか・・・。
CDケースについていたIDと現在の登録キーをTELすればよろしいですかね。

ボーランドのメールマガジンを解除しようと思ったら。アメリカのサイトに
飛ばされて、なんと現住所や勤務先名まで入力せよとのご命令。
あなた、最初の登録ではメールアドレスと名前と自分で決めたパスワード
だけだったやん。いやばい、米国からこれ以上スパムメールがくるのは・・・。
391デフォルトの名無しさん:2007/05/06(日) 18:52:38
>>390
そうなん?
登録してるけど、メルマガとか一度も来たことないよ
むしろ、郵便物とか送ってほしいのにバージョンアップ時しかこねえし
392デフォルトの名無しさん:2007/05/06(日) 19:25:46
おれはバージョンアップのお知らせさえ来なくなった。だから、以後絶対購入しないことにした。
393378:2007/05/06(日) 20:39:41
>>391
福岡の人間なのに東京のセミナーやカンファレンスの招待が
よく来ますよ。登録はTurboPascal6が最初だったかな。
Delphi1からもまめに登録しているからかもしれませんね。

というか、メール送っていい?って、登録のとき、問い合わせが
ありますよね。あのオプションたしか、デフォで「送る」だったと思う。

起動の早さからVC++に浮気しようかと思うこのごろ(最近MFCに目覚めた私)
394デフォルトの名無しさん:2007/05/06(日) 21:02:07
     _____  
   /::::::::::::::::::::::::::\〜プーン
  /:::::::::::::::::::::::::::::::::::::::\〜プーン
  |:::::::::::::;;;;;;|_|_|_|_|〜プーン         
  |;;;;;;;;;;ノ∪  \,) ,,/ ヽ〜          
  |::( 6∪ ー─◎─◎ )〜        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |ノ  (∵∴ ( o o)∴)〜      < 最近MFCに目覚めた私
  | ∪< ∵∵   3 ∵>         \_____________
  \        ⌒ ノ_____
    \_____/ |  | ̄ ̄\ \   カチャ
___/      \   |  |    | ̄ ̄| カチャ
|:::::::/  \___ | \|  |    |__|   
|:::::::| \____|つ⊂|__|__/ /
|:::::/        | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕  
395378:2007/05/06(日) 21:23:12
>>394
せめてAAは女にして、一応 私は

           お ん な
396デフォルトの名無しさん:2007/05/06(日) 21:28:05
せめて隔離スレでやれ
397デフォルトの名無しさん:2007/05/06(日) 21:28:50
     _____  
   /::::::::::::::::::::::::::\〜プーン
  /:::::::::::::::::::::::::::::::::::::::\〜プーン
  |:::::::::::::;;;;;;|_|_|_|_|〜プーン         
  |;;;;;;;;;;ノ∪  \,) ,,/ ヽ〜          
  |::( 6∪ ー─◎─◎ )〜        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  |ノ  (∵∴ ( o o)∴)〜      < ずっとpascalしかできないオレ
  | ∪< ∵∵   3 ∵>         \_____________
  \        ⌒ ノ_____
    \_____/ |  | ̄ ̄\ \   カチャ
___/      \   |  |    | ̄ ̄| カチャ
|:::::::/  \___ | \|  |    |__|   
|:::::::| \____|つ⊂|__|__/ /
|:::::/        | ̄ ̄ ̄ ̄|  〔 ̄ ̄〕  
398デフォルトの名無しさん:2007/05/06(日) 21:39:07
ネカマ隔離スレ
399Delフサギコ ◆A6VzDeLphI :2007/05/06(日) 22:55:13
    ∧ ∧  レスありがとう
    ミ ゚Д゚彡
  〜ミ,,,,uuミ
>>328さん
そうか、、、この場合は別に再帰的じゃないっすね。

ページで紹介されたやり方全部がスタックマシンかと
思ってしまったけど
第6回 上手なアルゴリズムの見つけ方:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20070313/264703/?ST=develop&P=2
Forthの例が出てる。これがスタックマシンか。

>>329さん
すげーー、、ありがとう。参考にする!

>>320さん
…んーーっと、、、カレンダー日付は適当に例で出しただけで
テキストエディタのソート機能だから
全然、予測不可能な文字を数値認識してソートするのですが
抽出出来るかなあ。
正規表現...ほんと嫌いなんだよなあ...
おかげでPerlも嫌いで...あんまりよくないと思うけどね。

>>333さん
をーー。これは確かに言語機能としてすごいね。
こういう所、Delphiでも正規表現が標準で取り込まれて欲しいね。
たぶん、Delphiチームの人間も正規表現とか嫌いなんだぜ(w
違うかな...
だから進化が止まる?
400ミ,,゚Д゚彡 ◆A6VzDeLphI :2007/05/06(日) 22:56:06
>>344さん
双方が数値になったら比較するという思考を俺もしてたんだが
どうにも限界がくるんだよね。
ABC+123DEF
ABC123DEF
ABC123.4DEF
ABC-123.4DEF
こうなってくると、人間はすぐわかるけど
実装すると、非常に大変でないかな。
だから、まず文字列から数値を切り出す。って方向で考えてみてるんだ。

TListのSort関数として実装するから
S1, S2:Stringに対して
-1と0と1とで値を返せばいいように実装するつもり〜

>>346さん
んーーーと、、んーーっと
ABC DEF
ABC  DEF
ABCDEF
まず、これは辞書順にしたい。数値が含まれないという理由。

ABC1DEFとABCDEFは、どっちが先かはどっちでもいいや。

数値が含まれる系の以下のものは
んとんと...これは難しいな...
ABC 1DEF
ABC 01DEF
ABC01DEF
ABC10DEF
スペースは無視するとしてよいのでこうかな。
401Delフサギコ ◆A6VzDeLphI :2007/05/06(日) 22:56:44
>>349-350さん
そそそ、そやそや!というか、まあ・・・
数字としては、先頭の+と-、
数値内のカンマやスペース、
小数点としてのピリオド
あたりも実装出来れば、すっげ〜〜〜、
ってな感じなのですが、贅沢っすかね?

>>351さん。はいすいません。

>>352さん、むぅ〜〜、2文字列を比較しだすとですな..
ABC 123DEF456GHI
ABC123DEF457GHI
この2つのことに頭を悩ますことになってくるのですよ。

...しかし、スレが流れるのが恐ろしく早い...みんな、素早いレスありがとん。

    ∧ ∧  
    ミ,,。_。彡  
  〜ミ,,,,uuミ
402Delフサギコ ◆A6VzDeLphI :2007/05/06(日) 23:00:34
  ∧,,∧   まあまあ
  ミ,,  ;彡  あんまり
 ミ   ミつ  AA使ってあらさんでも
 ミ〜,, ミ
  ∪ ∪   餅つけよ


ついつい、ホットゾヌで透明アボーンしちゃったじゃないか...



     ア  レ

   ∧,,∧   エ?
  ,ミ ゚Д゚彡
  ミ  ∪  
 ミ〜,, ミ
  ∪ ∪

まさか、漏れの2chカキコミ人生すべてを自己否定?!
403328:2007/05/06(日) 23:16:44
>>401
君の想定している数値文字列の定義をBNFかなんかで書き出してみ
そしたら、開始と終了条件はおのずと明らかになるはず
あとは文字列の先頭からサーチして開始を検出したら終了まで切り出せばいい
404デフォルトの名無しさん:2007/05/06(日) 23:19:57
つか初心者スレでコンパイラコンパイラ言ってる奴はもう少し説明の仕方を考えたほうがいい
405Delフサギコ ◆A6VzDeLphI :2007/05/06(日) 23:27:58
           _________
   ∧,,∧∩  / 
  ミ,,゚Д゚彡 <  がんがれ! >>漏れ
   ミつ旦.ミ   \ 
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪  そしてありがとうございます。>>328さん

  ・ 数値切り出しロジックは
    [+-,.0〜9スペースタブ]を使って
    ・ これが文字列中に入ってきたら、数値認識処理開始
      スタックに数値と思われる文字を載せていく
    ・ 数値認識処理の場合
    ・ スペースやタブは無視(スタックにつまない)
      ただしカンマの前後にスペース、タブは許容しないので
      数値認識処理終了
    ・ ,も無視(スタックにつまない)
    ・ 初回時以外に+か-が出現すれば数値認識処理終了
    ・ +-以外で最初には0〜9か.がこなくてはいけない。
    ・ .が2回出現すれば数値認識処理終了
    ・ ,が連続して出現すれば数値認識処理終了
    ・ スタックに積み重なった数値文字列と思われるものを
      Extended変換して数値なら数値として認識させる

こんな感じでございましょうか!
とりあえずメモだけ書いてみましたが
今日はもう寝ませんと....すません。

文字列解析を自由自在にする。ってのは、漏れの長年の夢で...
そのわりには、大変正規表現は嫌いでという屈折してて...

おやすみなさい。
406デフォルトの名無しさん:2007/05/06(日) 23:30:48
今回のフサギコは妙に必死で痛いなw
407デフォルトの名無しさん:2007/05/06(日) 23:35:05
俺は嫌いじゃないぜこういう奴
408デフォルトの名無しさん:2007/05/06(日) 23:54:06
まあ正規表現を覚えろとw

VBScript_RegExp_55_TLBを取り込めばDelphiでWSHの正規表現ライブラリ使えるよ。
Jane派生はこれでゴリゴリ文字列を弄くってるはず。
409デフォルトの名無しさん:2007/05/06(日) 23:54:53
>>405
一文字づつ読み出す関数を getA,getB として書いていけばいい

A:=getA;
B:=getB;

一方が数字列で、片方がそうでないなら、大小比較はそこで決着が付くのだから
先頭から比較していって、数字列同士の場合だけ 数値として比較すればいい。

A in ['+' , '0'..'9'] とは書けないので、検索関数を作っておこう
if FindCharW( A , '+-0123456789') and FindCharW( B , '+-0123456789') then というように書けるようにね。

スタックに載せなくても、数値は何10桁も普通はならんので、
切り出した数字は文字列変数に加算してゆけばいい
"." の個数は数えていけばいい 
410デフォルトの名無しさん:2007/05/07(月) 00:08:36
文字列から数値の領域を切り出すのは

 1、文字列から切り出す関数を作る。
   ・ 既に比較してしまった文字列を削除して渡す
   ・ 切り出した文字列を返す
   ・ どこまでが数値だったかも返す

 2、TStringStream を渡して切り出す関数を作る
   ・ 現在文字を判定しては 1文字先読という方式で作る
   ・ 切り出した文字列を返す、
   ・ Streamのポインタは次の文字位置を示させる

と色々考えられるけど、2か、2のエッセンスである1文字先読みできるだけのクラスを作る方が応用が利く 
411デフォルトの名無しさん:2007/05/07(月) 00:31:48
>>410
便乗レスですが、
1の方法はよく使うのですが、2の方法はやり方もよくわからないですし、
有効な場面も思いつきません。
そこら辺をご教示していただけませんですか?
412デフォルトの名無しさん:2007/05/07(月) 00:40:34
2の方法は、再帰下降とかの手法を使う時に便利なのと
この手法で作ったものを組み合わせて使う場合に便利
413デフォルトの名無しさん:2007/05/07(月) 00:44:20
2の方法はヴィルト先生の教科書に出てるね
414デフォルトの名無しさん:2007/05/07(月) 01:12:31
現在文字 と 先読みするだけのクラス では悲しいので、それにメソッドを追加する
TMyStringW = class
private
  str: WideString;
  rdPos: Integer;
public
  constructor Create(wstr: WideString);
  function NowChar: WideChar; //現在の文字
  procedure Next; //次の文字

  function ChkChar(s: WideString): boolean; //strのどれかの文字なら真
  function GetNumStr: WideString; //数字が続く間
  function UnCorresponds(s: WideString): WideString; //strのどれかの文字でない文字が続く
end;

constructor TMyStringW.Create(wstr: WideString);
begin
  str := wstr;
  rdPos := 1;
end;

procedure TMyStringW.Next;
begin
  if rdPos <= length(str) then inc(rdPos);
end;

function TMyStringW.NowChar: WideChar;
begin
  if rdPos <= length(str) then Result := str[rdPos] else Result := #0;
end;

415デフォルトの名無しさん:2007/05/07(月) 01:15:10
//現在文字が strのどれかの文字なら真 を返す比較関数

function TMyStringW.ChkChar(s: WideString): boolean;
var
  i: Integer;
  c: WideChar;
begin
  c := NowChar;
  Result := True;
  if c=#0 then exit;
  for i := 1 to length(s) do if s[i] = c then exit;
  Result := False;
end;


//現在文字がstrのどれか、または終端の直前までの文字列を返す 
function TMyStringW.UnCorresponds(s: WideString): WideString;
begin
Result := '';
while not ChkChar(s) do
begin
Result := Result + NowChar;
next;
end;
end;
416デフォルトの名無しさん:2007/05/07(月) 01:28:31
function TMyStringW.GetNumStr: WideString;
var DotCnt, sepCnt: Integer;
begin
 DotCnt := 0; sepCnt := 0;
 Result := '';
 if not ChkChar('+-0123456789') then exit;
 Result := NowChar; next;
 while ChkChar('.,0123456789') do
 begin
  case NowChar of
   #0 :exit;
   '.': begin
     inc(DotCnt);
     if DotCnt >= 2 then exit;
     Result := Result + NowChar;
     next;
     if NowChar=',' then exit;//ドットの後のカンマは終端
    end;
   ',': begin
     inc(sepCnt);
     if sepCnt >= 2 then exit;
     next;
     if NowChar='.' then exit;//カンマの後のドットは終端
    end;
  else   begin
    sepCnt := 0;
    Result := Result + NowChar;
    next;
   end;
  end;
 end;
end;
417デフォルトの名無しさん:2007/05/07(月) 01:58:03
上のクラスを使って 比較関数は
function CompNumW(A, B: string): integer;
var strA, strB: TMyStringW;
 cA, cB: WideString;
 dA, dB: Double;
begin
 strA := TMyStringW.Create(A);
 strB := TMyStringW.Create(B);
 result := 0;
 try
  while (strA.NowChar <> #0) and (strB.NowChar <> #0) do
  begin
   if strA.ChkChar('+-0123456789') and strB.ChkChar('+-0123456789') then
   begin
    dA := StrToFloat(strA.GetNumStr);    dB := StrToFloat(strB.GetNumStr);
    if dA <> dB then
    begin
     if dA > dB then Result := 1 else Result := -1;
     exit;
    end;
   end else  begin
    Result := ord(strA.NowChar) - ord(strB.NowChar);
    if Result <> 0 then
    begin
     if Result > 0 then Result := 1 else Result := -1;
     exit;
    end;
    strA.next;  strB.Next;
   end;
  end;
 finally strA.Free; strB.Free; end;
end;
418デフォルトの名無しさん:2007/05/07(月) 02:03:55
1の方法は
・ 既に比較してしまった文字列を削除して渡す
この時点で、メチャクチャ遅いだろ。コピーを渡すわけだから。1MB の中に100個
検索文字列がランダムにあったとしたら、平均して500k x 100 = 50MB の
コピーが生じる。2の方法は逐次的に再帰下降していくので、検索文字列自身以外の
コピーを作成しなくていいので速い。
419デフォルトの名無しさん:2007/05/07(月) 03:08:31
Javaをちょっとかじってdelphiも駆け出しなのですが
delphiにはstaticなクラスは定義できないのでしょうか。
Singletonなパターンをどうやって実装したらいいのか
よくわからないのでお教えください。
420デフォルトの名無しさん:2007/05/07(月) 03:54:34
>>419
class function xxx
だったかな
421デフォルトの名無しさん:2007/05/07(月) 03:57:00
>>419
InitializationでCreateしてFinalizationでFreeしたら?
422デフォルトの名無しさん:2007/05/07(月) 04:11:14
static なクラスは定義できないはず。

Delphi でも Clipboard や Printer は、ほんとは singleton にすべきなんだよね。
デフォルトのオブジェクトでなく。
423デフォルトの名無しさん:2007/05/07(月) 04:31:48
コード上で音量を変えるにはどうすればいいですか?

>サンプル: "RE:ボリューム(音量)を変える【訂正】"Delphi FAQ一覧
>サンプル蔵. FDelphi FAQ 16番会議室「玉石混淆みんなで作るSample蔵」に


ググってもリンク切れでみつけられませんでした・・
424デフォルトの名無しさん:2007/05/07(月) 10:03:06
>>423
Direct Sound?
425デフォルトの名無しさん:2007/05/07(月) 11:25:20
426デフォルトの名無しさん:2007/05/07(月) 11:33:42
よろしくお願いします。

今、文字列を渡して文字列が返ってくるdllの作成に挑戦してみたのですが、
dllを呼び出す側のPublic宣言に

function hoge(pHuga: Pchar): Pchar; stdcall; external 'Project1.dll';

と入れたところ、「メソッドまたはプロパティ定義の後にフィールドを定義することはできません」
というエラーが出てコンパイルできません。書き方は合ってそうな気がするのですが、
どうしてエラーが出るのでしょうか?
427デフォルトの名無しさん:2007/05/07(月) 11:40:59
んなもん、Delphiに用意されてるTParserクラス参考にすればいいだろ。
字句解析なんてコンパイラの初歩の第一段階だぞ。
エディタコンポーネントで強調表示をカスタムする場合には必須だろうが。
SynEditやTEditorのパーサークラス見てみろ。
428デフォルトの名無しさん:2007/05/07(月) 11:49:35
>>426
クラスのメソッドに解釈されているという事は、
class 〜 end の間に書いてるんじゃない?

単なる関数として定義するなら、定義部では extern は書かずに、実装部に書かないとね。
windows.pas を参考にしたらどう?
429デフォルトの名無しさん:2007/05/07(月) 11:55:06
>>428
レスありがとうございます。どういうことかまだわかりませんが、調べてみます。
430デフォルトの名無しさん:2007/05/07(月) 12:07:21
単独のメソッドをインポートエクスポートしたいようには見えないので、
public宣言ではなく implementation に移動すれば解決するように思うな。

クラスをインポート・エクスポートしたいならCOM作るか パッケージ作るか
431デフォルトの名無しさん:2007/05/07(月) 12:09:45
>>426
要するに書く位置を間違えているんじゃないの?
432デフォルトの名無しさん:2007/05/07(月) 12:11:54
>>419
Delphiの定番Singletonパターン(VCLでも使われている)

interface
function Hoge: THoge;

implemetation
var FHoge: THoge;

function Hoge: THoge;
begin
 if FHoge = nil then FHoge := THoge.Create;
 Result := FHoge;
end;

initialization
finalization
 FreeAndNil(FHoge);
433426:2007/05/07(月) 12:40:02
ありがとうございます! やっぱりわからなくて戻ってきましたが、
implementationに移動したらできました。

定義部じゃなくて実装部に書くっていうことなんですね。
「宣言しなきゃいけない」という言葉にとらわれてPublic宣言に入れてました。
434デフォルトの名無しさん:2007/05/07(月) 14:39:06
>>423
ごりごり書く(書ける)のなら>>425
マスターボリュームだけでいいのならttp://hp.vector.co.jp/authors/VA016117/mixer1.html
メディアプレイヤーを使って、その音量だけをいじるのならttp://delphi.about.com/od/adptips2006/qt/mediaplayer_vol.htm

自分のソフトで実装するため、数日前に探したばかり。
435デフォルトの名無しさん:2007/05/07(月) 16:47:26
http://www2.big.or.jp/~osamu/Delphi/tips.cgi?index=0125.txt
このThWndCaptureってどこかで入手できないでしょうか。
436423:2007/05/07(月) 17:43:00
>>424
>>425
ありがとうございます。
学校いってたのでお礼が遅れました。

DDDDなどのコンポを使うと簡単にできそうですが・・
なんとかAPIかDirectSoundのヘッダーファイルだけで自分でできないか研究してみます。
Sound関係のアプリを作ってみたいんです。
437デフォルトの名無しさん:2007/05/07(月) 17:53:05
438デフォルトの名無しさん:2007/05/07(月) 18:02:31
>>433
いや、interface部でもいいはずだよ。
クラス宣言内に書いたらアカンてこと。
439423:2007/05/07(月) 18:05:20
>>437
わお、英語サイトですね。
3流私大の俺がかろうじて読める感じです。

基本的にusesにヘッダファイル名を入れて、該当関数を探して呼べばおkですかね?
まだボトペタしか使ったことがないし、APIとやらを直接使ったことないんですが、疲れてるし頭使うんで今から昼寝して夜中にとりかかってみます。

どうもありがとうございます(チュッ
440デフォルトの名無しさん:2007/05/07(月) 18:15:25
Formの任意の場所に文字を表示するにはどうすればよいのでしょうか?
TLabelを使えば簡単に出来るのですが、これを直接Formに表示する方法が知りたくて・・・。
以上、よろしくお願いします。
441デフォルトの名無しさん:2007/05/07(月) 18:25:09
OnPaintイベントハンドラでCanvas.TextOut
442デフォルトの名無しさん:2007/05/07(月) 18:29:09
>>441
レス、ありがとうございます。
頂いたヒントを元に頑張ってみたいと思います。
443デフォルトの名無しさん:2007/05/07(月) 18:32:28
・・・ヒント?
444デフォルトの名無しさん:2007/05/07(月) 19:17:16
Delphi 6 Personal と Indy10.1.5を使っています。
文字列をURLエンコードしたくて検索してみたのですが、
「DelphiでURLエンコードをするには、HTTPAppに含まれるHTTPEncode()を使う」
「HTTPAppはPro版以上にしか入ってない」
ということがわかりました。
Personal版ユーザに使えるURLエンコード方法は無いでしょうか?
Indyやjconvert.pasを使えば何とかなるかと思ったのですが、よくわかりませんでした。
よろしくお願いします。
445デフォルトの名無しさん:2007/05/07(月) 19:33:02
ようするに先頭から見ていって、怪しい文字を
w:= w + IntToHex(ord(s[i]), 2) else w:= w+ s[i]
とやるだけだから自前で作ればいいじゃない
446デフォルトの名無しさん:2007/05/07(月) 19:52:04
>>444
Indy入れたのなら HTTPApp.pas ってついてこなかったか?
少なくともTurboDelphiにはついてきてるが・・
447444:2007/05/07(月) 19:56:39
>>445
何かすごく難しいことを言われてる気が…
>>446
いえ、ついてきてないみたいです。Indyのフォルダにもありませんでした。
448447:2007/05/07(月) 20:11:49
>>444
ごめん。Indyに付属するものじゃなかったんだな。
一応「Delphi URLEncode」で検索したらそれらしいのがいくつか出てきたが
これらじゃ不満なの?
449デフォルトの名無しさん:2007/05/07(月) 20:13:20
すみません。448は446です
450444:2007/05/07(月) 20:17:03
>>448
ありましたね…
ttp://wiki.landhere.info/pukiwiki.php?cmd=read&page=Delphi%2FURL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89

自分で書く根性は無いので、これを使いたいと思います。ありがとうございました。
451デフォルトの名無しさん:2007/05/07(月) 22:08:10
>>444
漏れもDelphi6 Personalで、インストールしているIndyのバージョンは9.0.18だけど
IdURI.pasに、こんなのがあったので参考にどうぞ。

procedure TForm1.Button3Click(Sender: TObject);
var
 IdURI: TIdURI;
 Str: string;
begin
 IdURI := TIdURI.Create('');
 try
  Str := IdURI.PathEncode('正規表現');
  Memo1.Lines.Add(Str);
  Str := IdURI.URLDecode(Str);
  Memo1.Lines.Add(Str);
 finally
  IdURI.Free;
 end;
end;
452デフォルトの名無しさん:2007/05/07(月) 22:10:41
>>444
Janeに入ってるソースをコピペして使う
Indyに入ってるのは使い物にならないので放置しとけ
453デフォルトの名無しさん:2007/05/07(月) 22:20:54
454デフォルトの名無しさん:2007/05/07(月) 22:32:12
フリーの turbo delphi って、openSSL は無理?
455デフォルトの名無しさん:2007/05/07(月) 22:42:27
Delphi6 Personalを使っています。
Proxomitronみたいに、ブラウザでプロキシを設定することで文字列を置換したり、
フィルタリングみたいなことをしたいんですけど、何をどうすればいいのかわかりません。
TCP/IPとは違うんですか?
456デフォルトの名無しさん:2007/05/07(月) 22:48:33
>>455
TServerSocketでIEからの接続を受け付けてその内容を解釈して
TClientSocketでWEBサーバーに接続する
IEへ返すときは逆順の経路をたどる
457デフォルトの名無しさん:2007/05/07(月) 23:38:53
>>456
感謝です。キーワードを元に勉強したいと思います。
ありがとうございました。
458デフォルトの名無しさん:2007/05/08(火) 00:14:48
スレ違いになるかもしれませんが、ご容赦のほどを。
Del6 or7 Proエディッションを購入しようと思うのですが、
もはやオクにも中々出てこない有様でして。

店舗、ネットショプを問わず、販売している情報がありましたなら、
ご教示のほど、お願い申し上げます。
459デフォルトの名無しさん:2007/05/08(火) 00:43:31
460デフォルトの名無しさん:2007/05/08(火) 02:16:28
TTreeViewの複数のノードを自動で選択させたいのですが、
うまく動きません。

TTreeViewのMultiSelectをtrueにして、MultiSelectStyleを
msControlSelectとmsShiftSelectにしました。
この状態でTTreeNodeのSelectedを何個かtrueにすると、
最後の一個だけが選択されて、他が選択されません。
何が足りないんでしょうか
461デフォルトの名無しさん:2007/05/08(火) 02:34:03
TTreeViewのSelectメソッドを使う方法では何か問題ありますか?
462460:2007/05/08(火) 02:34:07
自己解決しました。

TTreeNodeのSelectedをtrueにするのではなく
TTreeViewのSelectを呼び出せばできました。
第二引数にTShiftStateを渡しますが、一回目の呼び出しは
何も付けず、二個目以降のノードの呼び出しではssCtrlを付けました。
463デフォルトの名無しさん:2007/05/08(火) 04:47:30
WMDrawItem fails under WOW64
ttp://qc.borland.com/wc/qcmain.aspx?d=19859
464458:2007/05/08(火) 06:07:46
>>459
価格コムにありましたか!(お恥ずかしい)
ありがとうございました。
465デフォルトの名無しさん:2007/05/08(火) 11:36:21
OutputDebugStringモニタコンポないですか?
Jediで見かけたような気もしたけど単品もので。
466デフォルトの名無しさん:2007/05/08(火) 11:50:18
これで探してみたら?
http://www.google.co.jp/search?q='DBWIN_BUFFER'+pas
467デフォルトの名無しさん:2007/05/08(火) 14:24:20
Del6Perです。ラベルやテキストボックスの背景色を、
「clwindow」や「clwhite」などではなく16進数で指定する
書き方はありますでしょうか?
468デフォルトの名無しさん:2007/05/08(火) 14:35:29
>>467
$00FFFFFF
469467:2007/05/08(火) 14:52:25
>>468
ありがとうございます。できました。
RGBの指定がHTMLなどで使われるのとは逆で、
$00 + BBGGRRって感じなんですね。
470デフォルトの名無しさん:2007/05/08(火) 15:16:45
>>467
TColorのヘルプを見ると良い。
471デフォルトの名無しさん:2007/05/08(火) 18:12:39
つか普通にインスペクタで適当な色を選択すれば表示されるだろ。
472467:2007/05/08(火) 18:22:04
>>470 こういうのですね 勉強になりました
ttp://www.asahi-net.or.jp/~HA3T-NKMR/tips015.htm

>>471 本当だ OTL ダブルクリックで出ますね

ありがとうございました
473デフォルトの名無しさん:2007/05/08(火) 21:46:13

       FOX★公認!!!

俺たちのクリックで日本を一位にしようぜ!!
“30年は日本に手は出せないな”という勝ち方をしたい
http://wwwww.2ch.net/test/read.cgi/news4vip/1178602852/

1. ポーランド  139,797,680
2. チリ     137,040,439
3. ★日本    86,475,213★
4. イスラエル  80,930,530
5. スロベニア  57,137,042
6. フィンランド  40,857,499

石を投げる戦争から人は進化・進歩を遂げ、剣や槍などの武器をもって戦うようになった
人間はさらに発展し兵器を使う戦争を始めた
そして今、指先一つを武器とした電脳戦争が勃発したのであった・・・
皇国を勝利へと導くには貴様らの参戦が不可欠である

・戦場
http://www.clickclickclick.com/default.asp
・まとめサイト
http://www33.atwiki.jp/clickvip/
474デフォルトの名無しさん:2007/05/08(火) 21:55:04
コピペ君って馬鹿だな、まで読んだ。
475デフォルトの名無しさん:2007/05/08(火) 22:16:02
リストボックスなんだけどさ、アイテムが例えば

aaa
bbb
ccc
abccdd
bdfg
cghs
bqqqq

とかあって一番上のaaaが選択状態(青くなってる状態)になってたとする。
で、リストボックスにフォーカスが当たってるときに一回 b 押すと、bbbが
青くなってaaaは白くなり、も一回 b 押すと、bdfg が青くなり、bbbは白くな
る。
リストボックスってこういうもんだと思ってたのだが、Delphi 6 Personal で
普通にフォームに貼り付けたリストボックスは、b 押しても変化なかったり、
飛ばして選択されたり、たまーに普通に動いたりと、なんだか挙動がおかしい。

環境のせいかと思いC++で試した(VC++2005EEにて)んだけど、こっちは
ちゃんと動いた。
これってどうなの? うちだけの現象? それともこんなもんなの?
476デフォルトの名無しさん:2007/05/09(水) 00:38:59
>>475
ここはエスパー募集スレじゃないよ?
477デフォルトの名無しさん:2007/05/09(水) 01:10:11
>>476
んなこと言ってるってことは、おまいのところではきちんと動いているんだな。
常駐ソフトのせいかな。
478デフォルトの名無しさん:2007/05/09(水) 01:11:27
>>477
でbってなにさ
もう少し日本語を混ぜてください
479デフォルトの名無しさん:2007/05/09(水) 01:13:43
うろ覚えだが、たしか、VCLではタイマかけて一定時間キー入力無いと
マッチングの文字列クリアしてたと思うんで
キー押下のタイミングとクリアのタイミングの問題だと思うよ
480デフォルトの名無しさん:2007/05/09(水) 09:34:49
>>479
そいうことか。
素早く bbbb... と打つと bbb bdfg bqqqq を順番通り巡回するから、
キーフックしてるソフトが悪さしてるのかと思ったが、VCLの仕様じゃどう
にもなんないな。
Ctrlキーを押しながらだと意図通りの動作するから、当面はこれで我慢するか。

ちなみに bq と素早く打つと、インクリメンタルサーチっぱい挙動をし、一番
下の bqqqq がセレクトされる。なんだかなあ。

>>478
ちゃんと理解してる人いるんだけど?
481デフォルトの名無しさん:2007/05/09(水) 12:06:08
D5ではその現象は起きないな
D7では確認した。
Format('%8.8x %8.8x',[
GetWindowLong(ListBox1.Handle,GWL_STYLE ),
GetWindowLong(ListBox1.Handle,GWL_EXSTYLE)]);
した結果は同じだから、やっぱり後付の処理みたいだね。
482デフォルトの名無しさん:2007/05/09(水) 21:22:55
タイマーつけて、なんかいいことあんのかな。使い辛くなってるだけのような希ガス。
かといってAPI駆使する気にはなれんから、この程度の不具合なら許容範囲だけどね。
483479:2007/05/09(水) 21:32:39
ファイルエクスプローラの動きに似せたんだと思うよ
気に入らなければ、TCustomListBoxを継承して独自のListBoxを作るといい
僕は以前、自作アプリにDelphiのエディタみたいな入力支援機能付けるときそうしたよ
まあ、PersonalだとVCLのソースついてないからつらいけど
484デフォルトの名無しさん:2007/05/09(水) 21:35:51
いまどき、Explore 類似アプリに ListBox なんぞ使わんだろ・・
485デフォルトの名無しさん:2007/05/09(水) 21:38:21
>まあ、PersonalだとVCLのソースついてないからつらいけど
ついてるよ
486デフォルトの名無しさん:2007/05/09(水) 21:46:45
Classesしかついてないよ
487デフォルトの名無しさん:2007/05/09(水) 22:10:12
>>477
全角だったんじゃね?
488デフォルトの名無しさん:2007/05/09(水) 23:11:47
>>483
も少し力つけてから挑戦する。

>>487
んなこたねーよ。再現してる人もいるし。
489デフォルトの名無しさん:2007/05/10(木) 00:57:38
1 534
2 645
3 860
4 960
・・・
1024 593

のような区切りのテキスト形式のファイルを読み込み、
配列xと配列yに代入するコードを書きたいのですが、
良い方法はありますか?
490デフォルトの名無しさん:2007/05/10(木) 01:22:18
>>489
なにを聞きたいのかもひとつよくわからない
xとyそれぞれになにを代入したいんだい?
491デフォルトの名無しさん:2007/05/10(木) 01:45:34
>>490
わかりにくくて申し訳ないです。
とある測定のデータです。
測定するコンピュータから出てくる生データがタブ区切りのテキストで
上記の例だと1と534、2と645がそれぞれ対応しています。
配列を定義し、その配列にそれぞれ左の列と右の列を代入するにはどうしたらよいのかと…
492デフォルトの名無しさん:2007/05/10(木) 02:24:41
>>491 こんな感じか?てきとーだがw
var
s : TStringList;
buf : string;
F : Text;
i : integer;
begin
s := TStringList.Create;
s.Delimiter := #9;
AssignText(F, filename);
Reset(F);
i := 0;
while not Eof(F) do
begin
ReadLn(F, buf)
s.DelimitedText := buf;
x[i] := StrToInt(s.Strings[0]);
y[i] := StrToInt(s.Strings[1]);
inc(i);
end;
CloseFile(F);
end;
493492:2007/05/10(木) 02:26:18
sのFreeが抜けてるな、あと適当にエラーチェックやら範囲チェックやらいれれ
494デフォルトの名無しさん:2007/05/10(木) 07:38:32
116 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/04(土) 17:25:13
ttp://beeography.wordpress.com/2006/09/12/just-wanna-let-you-know/
ここに書いてある方法でTurbo Exprorerでも合法にコンポ入れれるよ

117 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/04(土) 18:02:21
あとこれ。
dclusr経由のコンポーネントインストールが、ライセンス違反かどうかの話。
ttp://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200609/06090014.txt
495デフォルトの名無しさん:2007/05/10(木) 08:46:59
TBitmap(キャラが描画されてある)からTBitmap(背景が描画されてある)へ、透過でCopyRectしたいんですができません。
キャラBitmapのTransparentをtrueにしておき、
Bitmap(背景).Canvas.Draw(0,0,Bitmap(キャラ));としたときはできるんですが…

キャラBitmapから背景色抜きで背景BitmapにCopyRectするほうほうを教えてください。
496デフォルトの名無しさん:2007/05/10(木) 09:29:56
できない、と思うよ。
497デフォルトの名無しさん:2007/05/10(木) 09:53:34
APIでやりたいなら、
マスク画像を作って ラスタオペレーションで AND/ORして透過させるか
AlphaBlend APIを使うか
 ttp://www.geocities.jp/asumaroyuumaro/program/winapi/bitmap.html

ゲームに使うならビットマップの回転させたり色加工したりするんで
scanlineでコピーしてる事が多いからAPIあんまり使わんが
498デフォルトの名無しさん:2007/05/10(木) 10:01:17
AlphaBlend API で背景だけ透過できるの?
499デフォルトの名無しさん:2007/05/10(木) 10:03:25
>マスク画像を作って ラスタオペレーションで AND/ORして透過させるか

これは Canvas.Draw がやってることと同じ
500デフォルトの名無しさん:2007/05/10(木) 10:23:42
>>495です。
どうやらcopyRectではTransparentは効かないようですね。
AndやOr合成がよくわからないので、結局ワンクッションTBitmapをおいてそこにCopyRect→Drawすることにしました。
無駄だらけ、ってのがなんとなくわかるんですが、未熟な素人なもんでしかたない…
501デフォルトの名無しさん:2007/05/10(木) 11:04:33
bitmapで色数は合わせてるんだろ?
だったらscanlineで自前コピーした方が速度も出るし楽だぞ
502デフォルトの名無しさん:2007/05/10(木) 11:46:17
TABitmapでは無理?
503デフォルトの名無しさん:2007/05/10(木) 12:06:04
あと、ゲーム作ってるなら
ttp://pc11.2ch.net/test/read.cgi/gamedev/1097836469/
このスレもおすすめ。
504502,503:2007/05/10(木) 12:19:31
>>495
試してみた。
ColorKeyAlphaMMXで出来るっぽい。
505デフォルトの名無しさん:2007/05/10(木) 14:00:47
TToolButtonでBTNS_WHOLEDROPDOWNスタイルはサポートされてませんか?
使ってるバージョンはTurboDelphiです。
506デフォルトの名無しさん:2007/05/10(木) 14:13:04
BTNS_WHOLEDROPDOWN って何?
TToolButton は TGraphicControl 継承で 窓ハンドルを持っていない
507デフォルトの名無しさん:2007/05/10(木) 17:17:14
>>492
ありがとうございます。
いろいろ試してみます!
508デフォルトの名無しさん:2007/05/10(木) 19:34:58
ID3タグについて教えて下さい

type ID3v1 = Record
 Headert: array[0..2] of Char; //Shuld 'TAG'
 Titlet: array[0..30] of Char;
 Artistt: array[0..30] of Char;
 Albumt: array[0..30] of Char;
 Yeart: array[0..3] of Char;
 Comment: array[0..30] of Char;
 Genre: byte
end;

type ID3v1.1 = Record
 Headert: array[0..2] of Char; //Shuld 'TAG'
 Titlet: array[0..30] of Char;
 Artistt: array[0..30] of Char;
 Albumt: array[0..30] of Char;
 Yeart: array[0..3] of Char;
 Comment: array[0..27] of Char;
 separator: byte
 Track: byte
 Genre: byte
end;

ID3v1とID3v1.1を区別して処理するにはどうすれば良いでしょうか?
IDタグ情報がある部分(ファイル終端128バイト)のうち
先頭から125バイト目がbyte型なのかChar型なのか判断できれば
いけそうだと愚考するのですが
ファイルのある特定の位置のデータが
何型のデータか判断するにはどうすれば良いでしょうか?

またほかにやり方があったら教えて下さい
509デフォルトの名無しさん:2007/05/10(木) 19:59:37
> 先頭から125バイト目がbyte型なのかChar型なのか判断できれば

これは不可能。タグ規格はしらんけど Headert 部分で区別できないものなのか?
510デフォルトの名無しさん:2007/05/10(木) 20:02:07
separator: byte

で区別とか?
511デフォルトの名無しさん:2007/05/10(木) 20:20:48
>>508 区別する方法は無い。
しいて言えば、トラック0というのは無いから

separatorが0で Trackが1〜30までは ID3v1.1 とやる事くらいだけど
これは完全ではない。
512デフォルトの名無しさん:2007/05/10(木) 20:25:28
>>507
Header部分は両バージョンとも「TAG」の3文字のみですT_T

>>510
wikipediaによると
ID3v1.1では125バイト目がZero byte separator.となっていますが
これはbyte型で常に値が「0」ってことなんですかねぇ?

125バイト目をbyte型で読込む
if 値が0なら → 97〜124バイト目をコメント部と判断
else 97〜127バイト目をコメント部と判断

こうなるのかな?

俺マジ頭悪いorz

教えて下さいエロイ人…
513デフォルトの名無しさん:2007/05/10(木) 20:31:56
>>512
常に ID3v1.1で読めばいいと思うよ。 ID3v1.1で読むけど トラックを表示するかどうかは >>511によると
514デフォルトの名無しさん:2007/05/10(木) 22:22:38
Delphi6PersonalにSpTbxLibをインストールしたいのですがうまくいきません。
MultiInstaller.exeによるとTNTUnicodeControlsのコンパイル中に
TntUnicodeVcl_R60.dpk(32) 致命的エラー: 要求したパッケージ 'vcldb' が見つかりません
と出て止まってしまいます。
インストール方法をご存知の方は教えてもらえないでしょうか。お願いします。
51517:2007/05/10(木) 22:56:45
>>168
ダメでしたorz

D4だとLeakにならないけどD6だとLeakになる
書き方ってなんだろう?
516Delフサギコ ◆A6VzDeLphI :2007/05/11(金) 00:47:34
   ∧,,∧     /
  ミ,,゚Д゚彡  < まいつた。
   U  U    \
うーん、、、数値切り出しが、、さっぱり理解できないな
それより、スレの速度についていけん...
とりあえず、下記のように並べたい。
人間なら、ABCは共通だから無視してすぐわかるんだけど

ABC-1 DEF
ABC +1 DEF
ABC 1 DEF
ABC1 DEF
ABC001 DEF
ABC 1.1 DEF
ABC2 DEF
ABC10 DEF
ABC20 DEF
ABC 20 DEF

>>417さん、サンクス。コード実行してみたけど、微妙に動作が理解できていないから
望むものと違っても、改造できない...難しいね。ヒントありがとう。勉強してみる。

ABC +1 DEF
ABC 1.1 DEF
ABC 20 DEF
ABC 1 DEF
ABC-1 DEF
ABC1 DEF
ABC001 DEF
ABC2 DEF
ABC10 DEF
ABC20 DEF
517デフォルトの名無しさん:2007/05/11(金) 01:27:48
Delフサギコってこんなにスキル低かったっけ?なんか幻滅
518デフォルトの名無しさん:2007/05/11(金) 01:39:23
>>516
考えてもわからんだろから、本読んで勉強したら?
コンパイラの作り方の類の本が初心者向けにも色々出てるから
字句解釈の勉強してみ
以前もBNF書いてみろとアドバイスしたんだが、BNFとかってわかる?
519デフォルトの名無しさん:2007/05/11(金) 01:54:39
また、コンパイラおたかよ・・・
520デフォルトの名無しさん:2007/05/11(金) 01:59:14
>>519
じゃあ、お前がなにか的確なアドバイスをしてやれよw
521デフォルトの名無しさん:2007/05/11(金) 02:24:52
BNF書いてみろとか、な。
522デフォルトの名無しさん:2007/05/11(金) 02:36:39
Delphi 7 Personalが良さそうなら買ってみようかと思うのですが、
6Personalに比べてどこが良くなってるのか情報が全然ありません。
何かご存知の方がいらっしゃいましたら教えてください。
523デフォルトの名無しさん:2007/05/11(金) 02:42:54
なぜ今、Del7のしかもPersonalなんだ・・。
TurboDelphiじゃダメなのか?
524489:2007/05/11(金) 04:58:31
コンマ区切りでやっています。

var
Form1: TForm1;
FileData: String ;
x:array[0..1100,0..5] of Integer;

procedure TForm1.open1Click(Sender: TObject);
var
SL:TStringList;
SL2:TStringList;
i,j:integer;
nam:string;
begin SL := TStringList.Create;
SL2 := TStringList.Create;
if opendialog1.Execute then
begin
nam:= OpenDialog1.FileName;
SL.LoadFromFile(nam);// ここで止まる
for i := 0 to SL.count-1 do begin
SL2.CommaText := SL[i];
for j:=0 to SL2.Count do begin
x[i][j]:=Integer(SL2[j]);
end;
end;
end;
SL.Free ;
SL2.Free ;
end;

これで実行するとリストのインデックスが範囲を超えていますと出るのですが、
何故でしょうか?
525デフォルトの名無しさん:2007/05/11(金) 05:05:25
>>524
for j:=0 to SL2.Count do begin

for j:=0 to SL2.Count-1 do begin
526デフォルトの名無しさん:2007/05/11(金) 06:26:18
>>518の言うように。
BNF書くのが一番だよ。BNFでどういう文字の並びを数値とみなすか
自分でまず定義しなきゃ切り出せん。

527デフォルトの名無しさん:2007/05/11(金) 07:30:58
ふさギコの為の文字列処理講座
http://delwiki.info/?%BB%F1%CE%C1%2F%A4%D5%A4%B5%A5%AE%A5%B3%A4%CE%B0%D9%A4%CE%CA%B8%BB%FA%CE%F3%BD%E8%CD%FD%B9%D6%BA%C2
ココ読んで判らん所を聞いてくれ
528デフォルトの名無しさん:2007/05/11(金) 09:14:00
MainFormをオーナーにして、TDataModuleとSubFormを表示したとき、
SubFormからTDataModuleの参照は普通にusesでいいのでしょうか。
それともMainFormからTDataModule(のアドレス??)を渡してあげないと
いけないのでしょうか。
529デフォルトの名無しさん:2007/05/11(金) 09:17:54
var Form2: TForm2;
とか
var DataModule1: TDataModule1;
とかユニットのinterface部分に書いてあって
変数を参照できるようになってるからusesだけでOK。

もしメインフォーム内で
mysubform := TForm2.Create(nil);
とか独自にやっているならそれを渡す必要がある。
530Delフサギコ ◆A6VzDeLphI :2007/05/11(金) 09:30:24
    ∧,,∧    おおぅ、
   ,,ミ*゚Д゚ミ  ありがdクス
  .とミ,,,,,U,,,,つ

かたじけのうござる。

BNFってのは、ジェイコム男じゃあないよね.....
531Delフサギコ ◆A6VzDeLphI :2007/05/11(金) 09:49:18

  ∧,,∧    /
  ミ;゚Д゚彡 < いきなり課題がわかりません。
  ,;゙  ミ     \_のですけれども。
 ミ.  ミ
/゛゛゛゛

> 課題:eof メソッドを追加してみよう。

> 文字列処理(字句解析(lexical analysis))では、以下の 3 つの動作を基本にします。
> 1. まず、文字を 1 文字取り出す事 - NowChar (取り出しても読み出し位置は動かしません)
> 2. その文字が終端である事 - eof (NowChar = #0 で代用)
> 3. 文字位置を一つすすめる事 - Next

ここの2の日本語が理解できんがな...
1.と3.はコードに落ちてるからわかるけど
日本語ってあいまいで...
532デフォルトの名無しさん:2007/05/11(金) 09:55:32
文字列の終わりである事 と変更しておくよ。 これで判る?
533528:2007/05/11(金) 10:00:59
>>529 ありがとうございます。
ところで、MainFormではなくMDIChildだったとして、
同じ画面を複数表示するようにした場合は、
interfaceでTDataModuleを宣言するのって良くないですよね?
534デフォルトの名無しさん:2007/05/11(金) 10:03:51
>>533
共通にするデータがあるのなら TDataModuleは一つでいいし
それぞれのフォーム毎に別のデータを持つなら、そのデータ構造だけのunitを作って
そのデータ構造をフォームのメンバーにしてしまうといい
535528:2007/05/11(金) 11:06:03
>>534 解説スマソ。
しつこくなってしまいますが、
MDIChild─DataModule

KoForm

MagoForm
だったとしてMagoFormからDataModuleの参照はusesでおk?
536デフォルトの名無しさん:2007/05/11(金) 11:17:19
>>535
DataModule のインスタンスが1つならね。
そんだけ聞くって事は何か変な事やってる?
537528:2007/05/11(金) 11:26:37
特に変なことは。。。
参照がどうつながるのか知りたくて。
MDIChild毎にDataModuleを作るので
DataModuleを子や孫に渡すのが正解ですね。
ありがとうございます。
538デフォルトの名無しさん:2007/05/11(金) 11:27:47
Delphi2006のIDEのタブ位置っておかしくない?
日本語のある行と無い行で揃わないんだけど。
539デフォルトの名無しさん:2007/05/11(金) 11:33:01
>>537
フォーム新規作成毎に DataModuleを作ってるのか
別に悪くはないけど、それならフォームに貼り付けてもいいように思うな
もっともDoc-Viewの分離性が悪い=再利用性が無いと言われるかもしれないが
540デフォルトの名無しさん:2007/05/11(金) 11:50:03
>>538 矩形選択して固まるようならアップデートしたら?
もうアップデートしてるなら、 まだ矩形選択もズレるようだから、そんなものかもな

対策ではないけど
コーデング中の整形は
http://www.dow.wau.nl/aew/delforexp.html
これ使いながらやれば、そういうズレは気にならなくなるかも
541デフォルトの名無しさん:2007/05/11(金) 13:08:20
XPManの日本語問題と関係あったりして
542489:2007/05/11(金) 14:29:59
>>525
ありがとうございます。初歩的なミスでした。

上のコードでコンマ区切りのcsvを読み込むと、
x[i][j]にあらぬ数値が入ってしまって困惑しているのですが、
SL2から数値を切り出す部分が間違っているのでしょうか?
SL2をウォッチしていると'423,5334'のようになっていました。
543デフォルトの名無しさん:2007/05/11(金) 15:36:20
>>527読んだけど実装がややこしくね??
おとなしく、位置(Run)を二つもたせればいいじゃん。
type
 TTokenKind = Integer;
 TCustomParser = class(TObject)
 private
  FText: WideString;
  FOldRun: PWideChar;
  FRun: PWideChar;
  FTokenKind: TTokenKind;
  function GetIsEOF: Boolean;
  function GetToken: WideString;
  function GetTokenKind: TTokenKind;
 protected
  function InternalNext(var ARun: PWideChar): TTokenKind; virtual; abstract;
 protected
  function CheckEof(ARun: PWideChar): Boolean;
 public
  constructor Create;
  destructor Destroy; override;
  procedure CheckNext(var AToken: WideString; var ATokenKind: TTokenKind);
  procedure Next;
  procedure SetText(AText: WideString);
  property IsEof: Boolean read GetIsEof;
  property Token: WideString read GetToken;
  property TokenKind: TTokenKind read GetTokenKind;
 end;

implementation
544デフォルトの名無しさん:2007/05/11(金) 15:38:17

function TCustomParser.GetIsEOF: Boolean;
begin
 Result := (FRun - PWideChar(FText)) = Length(FText);
end;

function TCustomParser.GetToken: WideString;
begin
 Result := Copy(FText, FOldRun - PWideChar(FText) + 1, Integer(FRun - FOldRun));
end;

function TCustomParser.GetTokenKind: TTokenKind;
begin
 Result := FTokenKind;
end;

function TCustomParser.CheckEof(ARun: PWideChar): Boolean;
begin
 Result := (ARun - PWideChar(FText)) = Length(FText);
end;

procedure TCustomParser.CheckNext(var AToken: WideString; var ATokenKind: TTokenKind);
var
 TempRun: PWideChar;
begin
 TempRun := FRun;
 ATokenKind := InternalNext(TempRun);
 AToken := Copy(FText, FRun - PWideChar(FText) + 1, Integer(TempRun - FRun));
end;
545デフォルトの名無しさん:2007/05/11(金) 15:41:11
procedure TCustomParser.Next;
begin
 FOldRun := FRun;
 FTokenKind := InternalNext(FRun);
end;

procedure TCustomParser.SetText(AText: WideString);
begin
 FText := AText;
 FRun := PWideChar(FText);
 FOldRun := FRun;
end;
で、後はこのクラスを継承して抽象メソッドのInternalNextを実装して自分の都合にあった字句解析を
どうぞ。
546デフォルトの名無しさん:2007/05/11(金) 15:51:12
例としてTabを解析する例、それ以外は未定義のトークン。

// トークンの種類
const
 tkUndefined = 0;
 tkTab = 1;
function TParser.InternalNext(var ARun: PWideChar): TTokenKind;
begin
 case ARun^ of
 WideChar($0009):
 begin
  Inc(ARun);
  Result := tkTab;
 end
 else
  Result := tkUndefined;
  Inc(ARun);
 end;
end;
使う時は
while not Parser.IsEof do
begin
 case Parser.TokenKind of
 tkTab:
  // Tabの処理
 tkUndefined:
  // その他
 end;
 Parser.Next;
end;

547デフォルトの名無しさん:2007/05/11(金) 16:38:10
TreeViewを使って
親:携帯
子:au,Docomo
と設定して
親(携帯)を選択していた場合
子のauとDocomoを返す方法を教えてください
548デフォルトの名無しさん:2007/05/11(金) 16:55:31
>>542
間違えて無いように思うけど、カンマが大文字とかではないのかな?
なら自前で

function SepInteger(var s: string): Int64;
var
 minus: boolean;
 n: Int64;
begin
 if s = '' then raise Exception.Create('文字列が無い');
 result := 0;
 n := 1;
 minus := false;
 while s[n] in [#7, ' '] do inc(n);
 if n > length(s) then raise Exception.Create('空白だけだった');
 if s[n] in ['+', '-'] then
 begin
  minus := s[n] = '-';
  inc(n);
 end;
 while s[n] in ['0'..'9'] do
 begin
  Result := Result * 10 + strToInt(s[n]);
  inc(n);
  if n > length(s) then break;
 end;
 while s[n] in [#7, ' '] do inc(n);
 delete(s, 1, n - 1);
 if minus then Result := -Result;
end;
549デフォルトの名無しさん:2007/05/11(金) 16:57:01
548 の続き 
呼び出し方は
procedure TForm1.open1Click(Sender: TObject);
var
 SL: TStringList;
 i, j, k: integer;
 nam, s: string;
begin
 if opendialog1.Execute then
 begin
  SL := TStringList.Create;
  try
   nam := OpenDialog1.FileName;
   SL.LoadFromFile(nam);
   for i := 0 to SL.count - 1 do
   begin
    s := SL.strings[i];
    for j := 0 to 5 do
    begin
     if s = '' then break;
     x[i][j] := SepInteger(s);
     if copy(s, 1, 1) = ',' then delete(s, 1, 1) else
     if copy(s, 1, 2) = ',' then delete(s, 1, 2) else break;
    end;
   end;
  finally SL.free end;
 end;
end;
550デフォルトの名無しさん:2007/05/11(金) 17:02:51
みんなこのスレのログとかって後学の為に保存してる?

どうぞご勝手に言われるだろうけど、これからそうしよっかな
551デフォルトの名無しさん:2007/05/11(金) 17:09:53
ム板でいつも見てるスレだけは全部保存してるな
552デフォルトの名無しさん:2007/05/11(金) 17:10:34
>>550
wikiがあるお。
553162:2007/05/11(金) 17:21:01
>>515 ExHeaderが原因らしい。
場所を特定してないが、HeaderControlとかに変えたらリーク消えた。
554Delフサギコ ◆A6VzDeLphI :2007/05/11(金) 17:33:06

♪   ∧,,∧ ♪
    ミ,,゚Д゚彡  ♪
    ミつ[|lllll]). あいからわずスレ流れはやいなあ。
>>516の件でレスくれたひと、ありがとう。


つーか、漏れも普通に出来てしまいまして
Sortロジックというか、文字列から数値切り出しの方。

んーー、なんか他の人がクラスでやってるんですが
俺は、状態を持って単にForループで回せばできたんだけど
こっちのほうが簡単そうに思うんだけどその
BNFとかいうのに慣れてないだけ?

思想は一緒だと思うけど
結局、文字列の区切り条件は自分で相当考え
定義しなきゃならん、ということなのかねえ。


ということで、ソースコピペが2chでは非常にやりやりづらかったので
ブログに書いたんだけど、リンク貼り付けすると
書き込めん....orz...
555デフォルトの名無しさん:2007/05/11(金) 17:36:51
使い方が間違ってた
Parser.SetText('あいうおえ かきくけこ');
while not Parser.IsEof do
begin
 Parser.Next;
 case Parser.TokenKind of
 tkTab:
  // Tabの処理
 tkUndefined:
  // その他
 end;
end;
で、最初に解析する文字をSetTextで設定して、IsEOFでなければ、Nextメソッドを呼び出し、
次のトークンを解析(パース)。解析されたトークンの種類とトークンはそれぞれ、
TokenKind,Tokenプロパティで取得。で必要に応じて処理。で、再びIsEOFでなければ、ループと。
CheckNextメソッドは位置(Run)を変えずに、更に次のトークンを先読みしたくなる時があるので
そのためのメソッド。なくても問題なし。>>527で主従関係とかなんかややこしいことしてたけど、
BNFと状態遷移できてれば、そんなことしなくても問題ないような気がする。
肝心の解析部分は前に書いたのあるので気がむいたらあげる。

556デフォルトの名無しさん:2007/05/11(金) 17:47:08
>>554
ここか? http://delfusa.blog65.fc2.com/

これは文字列中の数字だけ取り出して、ソレだけ比較するという仕様になってるが
文字列比較の為に作ってたんじゃないのか?
わけわからん

  ABC123
  DDE123

は同じになるわけ?

>>555
主従関係の話は、たぶんこう辿るだろなあというので順にやってみた。
557デフォルトの名無しさん:2007/05/11(金) 17:50:00
>思想は一緒だと思うけど
>結局、文字列の区切り条件は自分で相当考え
>定義しなきゃならん、ということなのかねえ。
定義しなきゃいけんだろ。
その区切り条件みたいのまぁ、いわいるどういう文字の並びを数値とみなすかを
単に式で表現する方法がBNF。別に頭の中で表現できるなら別にいいけどさ。。
当たり前だけど、大抵の言語ではソースを先頭から解析し、変数名の先頭に、
数字使えないけど、もし使えるようにすると、その数字が変数名の一部なのか数値の一部なのか
判断できなくなるので、かぶらないように定義されている。
クラス作るか作らないかはご自由でいいんじゃ。


558デフォルトの名無しさん:2007/05/11(金) 18:01:45
>俺は、状態を持って単にForループで回せばできたんだけど
Forループ使わないか使うかは単に実装の違いだけでしょ。
BNFは先も書いたように表現方法。ってBNFで一度もググッてないでしょ?
>>543からグダグダクラス書いたけど、フサのソースみたけど、数値切り出すぐらなら
それでもいいと思う。ただ、本格的に色々文字列やら、なにやらコンパイラの字句解析
まがいのことをするつクラス作って使った方が、ソースも見通しよくなるくらいなだけ。

って長々書いたがこのへんで。
559デフォルトの名無しさん:2007/05/11(金) 18:04:16
http://delfusa.blog65.fc2.com/
 比較に実際に利用するなら、やっぱり主従関係の逆転が必要
 比較しないのに全部の文字をスキャンするのは無駄。

PickOutInt64FromStringVer3という関数の中でStrOutputNumericを呼び出してるが、
このStrOutputNumericの部分で実行中断させなければいけない。
関数を中断するとなると、その作業用の変数が必要になる。
だからクラス化してるわけだ。
560デフォルトの名無しさん:2007/05/11(金) 18:21:54
あぁ、主従なんたらってのは、比較の話なのね。比較の話は興味なかったので
しっかり読んでなかった。読んでみて何かあったらコメントします。
まぁ、俺が書いたクラスもトークン単位でなら途中で全部解析せずに、これ以上
比較する必要がなければ打ち切れるので。これは、実装者の実装次第になるので
おまかせします。
561デフォルトの名無しさん:2007/05/11(金) 18:29:25
フサギコさん
とりあえず、コードを見た感じでは

1),[01234567890123456789]の1個以上の連続
2),1の間に[,,]が連続しないである場合はその文字を除く
3),[+-+−] の後に [  #7]の0個を含む繰返しの後に2

という定義みたいだけど、これでいいの?
562デフォルトの名無しさん:2007/05/11(金) 18:53:26
WideStringだと、
 '0'..'9','0'..'9' てな表現が出来ないから苦労するんだな。
 '0'..'9',#65296{0}..#65305{9} : と書くしかない
563デフォルトの名無しさん:2007/05/11(金) 19:12:39
うーん。比較での主従関係がようわからん。後は普通に、
// StrA = StrB なら0 StrA > StrB なら 1 それ以外-1
function CompareStr(StrA: WideString; StrB: WideString): Integer;
var
 ParserA, ParserB: TParser;
 TokenA, TokenB: WideString;
begin
 ParserA := nil; ParserB := nil;
 try
  ParserA := TParser.Create; ParserB := TParser.Create;
  ParserA.SetText(StrA); ParserB.SetText(StrB);
  // StrA, StrBを先頭から順にトークン単位に切り出して比較。
  // 途中で大小が決定されれば、解析を打ち切り
  while not ParserA.IsEOF do
  begin
   // ごにょごにょ
  end;
 finally
  ParserA.Free; ParserB.Free;
 end;
end;
みたいな比較関数を用意して、後はこの比較関数を用いて文字列の配列を
バブルソートなりして、ソートすれば終了かな。
文字列の解析・2つの文字列の比較・ソートを分けて実装すれば、見やすくシンプルな
設計になると思う。詳しい仕様はようしらんので、概略だけ。
564デフォルトの名無しさん:2007/05/11(金) 20:41:33
なんかほかにおもしろいネタないのか?
565デフォルトの名無しさん:2007/05/11(金) 21:12:48
>>547
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
Lst:TStringList;
begin
if not TreeView1.Selected.HasChildren then exit;
Lst:=TStringList.Create;
try
for i:=0 to TreeView1.Selected.Count-1 do
Lst.Add(TreeView1.Selected[i].Text);
ShowMessage(Lst.Text);
finally
Lst.Free;
end;
end;
566デフォルトの名無しさん:2007/05/11(金) 22:13:45
>>514
PersonalにDBは入ってないからTntとかからDB関係を消してインスコ
567デフォルトの名無しさん:2007/05/11(金) 23:16:56
TurboDelphi無料版を使ってる人に聞きたいんですが、
トレイアイコンのコンポーネントは入ってますか?
あと、Del6Perに無かったもので、便利なコンポーネントはありますか?
568デフォルトの名無しさん:2007/05/11(金) 23:31:28
>>567
TTrayIconか・・こんなコンポーネントがあるなんて知らなかったな。
これがあればちょっと前の最小化時にトレイに表示とか簡単にできそうだ
TurboDelphiに入ってる
569489:2007/05/11(金) 23:32:58
>>548-549
ご丁寧にありがとうございます。
お陰様で読み込めました。
これをdouble型でやるとしたら大分改良が必要ですか?
Stringからdoubleに型キャストしようとするとエラーになるのですが…
570Delフサギコ ◆A6VzDeLphI :2007/05/11(金) 23:59:38
   ∧,,∧∩  /にゃるにゃる
  ミ,,゚Д゚彡 < ほどほど!!
   U  ミ   \
 @ミ  ミ   
>>556さん、うん、一応、そなのよ。

今日はがんばった、2007/4/10
今日はつかれた、2007/04/12
今日は布団でぐっすりだった、2007/5/1
今日は雪が降りそうだった、2006/12/3

こんな文字列を、整数抽出ソートをしてみたくなってしまったのです....

>>557さん
そかそか、ありがとです。
> クラス作るか作らないかはご自由でいいんじゃ。
なるほどな〜、頭がすっきりするね〜。
クラスをつくってやる方が、慣れてくれば考えやすいのかな。

571Delフサギコ ◆A6VzDeLphI :2007/05/12(土) 00:01:12
>>558さん
いやいや、BNFでぐぐったけど、
とりあえず思いっきり挫折しそうだったので
さっさと自分で書いたらかけちゃったので、ビクーリしたのよ。

>>561さん
そんな所です。
 りんご 1,000,000円
 みかん 1,100,000円
こんなもののソートが出来るのですよ。
 今日 + 120c
 明日 - 2120c
こんなものもソート出来....
          
   ∧,,∧   / 
  ミ*゚Д゚彡 <  ああ、素敵
   ミ つ旦)~~ \ この実装感を
 @ミ   ミ     味わいながら。。。


572デフォルトの名無しさん:2007/05/12(土) 00:03:13
>今日はがんばった、2007/4/10
(\d+)/(\d+)/(\d+)
で一発なのに100倍時間かけて七転八倒しまくってでも絶対にやりたくないんだよな。
不思議不思議。
573Delフサギコ ◆A6VzDeLphI :2007/05/12(土) 00:57:22
   ∧,,∧    /たぶん、きみは著しく
  ミ,,゚Д゚彡 < 勘違いしているに
   U  つ   \1万ペソ
>>572
574デフォルトの名無しさん:2007/05/12(土) 01:14:34
今日はがんばった、2007/4/10
今日はつかれた、2007/04/12
今日は布団でぐっすりだった、2007/5/1
今日は雪が降りそうだった、2006/12/3
りんご 1,000,000円
みかん 1,100,000円
今日 + 120c
明日 - 2120c

これらの文字列を一気に指定してソートしたいなら話は別だが、
これらを個別にソートしたいなら>>572だと思うが。

りんご 1,000,000円
みかん 1,100,000円

([\d,]+)で抽出後,をリプレイス

今日 + 120c
明日 - 2120c

([+-])?(?: )?(\d+)

とかじゃね?テストしてないから正しい表現化わからんけど。
575Delフサギコ ◆A6VzDeLphI :2007/05/12(土) 01:31:31
           _________
   ∧,,∧   / 
  ミ,,゚Д゚彡 <  えっと・・・
   ミつ旦(ミ~~ \ 
 @ミ   ミ     ̄ ̄なんつ〜か、、、、

ソートするための正規表現を記載することが必要なソートではなく
エディタのソートプラグイン処理なので、
なぞった範囲をソートするっていう処理になるので
おのおので正規表現で表せても目的には使えないのっす。

Blogから流用しますが
『ABC123DEF- 456,789GHI123,,456 2007/05/11 17:12JKL』という文字列から
123 -456789 123 456 2007 5 11 17 12

を数値として正規表現で抽出できたら、いいなー、とは思うが
複雑すぎて、漏れにはかけない。
念のため、BRegExp.hlp を見たけど、出来そうで出来なさそうな
そのあたりの感覚がなんか好きじゃないな。
あと、もう一つ正規表現が嫌いな理由が、可読性が低いからだと気がついた。

では、とりあえずお休みなさい。様々なヒントくださったみなさん

とくに、DelWikiに教えてくれる内容を書いてくださった方。
漏れのコードを恐るべき理解力で理解するところに驚きました。ありがとです。
576デフォルトの名無しさん:2007/05/12(土) 02:22:51
> 『ABC123DEF- 456,789GHI123,,456 2007/05/11 17:12JKL』という文字列から
> 123 -456789 123 456 2007 5 11 17 12
>
> を数値として正規表現で抽出できたら、いいなー、とは思うが

文字列が上記の方で一定してるなら、それこそ正規表現の得意分野だと思うけどw
577デフォルトの名無しさん:2007/05/12(土) 04:13:38
>>566
エラーが出る奴を片っ端からパッケージから外したらよくわかんないけどインストールできました。
ありがとうございました。
578デフォルトの名無しさん:2007/05/12(土) 05:46:50
キー入力を受け取って処理をしたいのですが
第一歩から躓いてしまい
只今 めいっぱい めげてます。

procedure TForm1.OnKeydown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = Byte('Z') then
Form1.Edit1.Text := 'hoge';
end

if Chr(Key) = 'Z' も試してみましたが hoge とは入力されませんでした。

何か根本的な間違いをしてると思うのですが
どこを直せば良いのかわかりません。アドバイス宜しくお願いします
579デフォルトの名無しさん:2007/05/12(土) 06:02:21
というか、そこにブレークポイント設定して、実行すると、そこでちゃんと止まる??
イベントが発生してないんじゃないの??
フォームのイベント?何のイベント?イベントハンドラ設定されてる??
フォームのイベントハンドラならKeyPreviewは?
何でこっちがいっぱい質問しなきゃいけないの??
後は頑張れ。
580デフォルトの名無しさん:2007/05/12(土) 06:04:14
難しいな・・原因はわかるんだがどうしたらいいんだろう?
キー入力のフォーカスがForm1じゃなくてフォーム上に配置されたEdit1とかにあるのが原因だと思う。
procedure TForm1.FormClick(Sender: TObject);
begin
ActiveControl := nil;
end;
とかすれば一時的には受け付けるようになるだろうが、根本的な解決じゃないよな・・
581デフォルトの名無しさん:2007/05/12(土) 06:08:22
んだったら、さっき書いたようにKeyPreview := Trueでいんじゃまいか
582580:2007/05/12(土) 06:10:16
>>581
なるほど!
もう7年以上使ってるがこのプロパティ初めて知ったよ!
578ではないがサンクス
583デフォルトの名無しさん:2007/05/12(土) 08:06:25
>>579
丁寧な指摘ありがとうございます。

ブレークポイントを設定して確認してみると
言われた通り Onkeydown のイベントが呼ばれていませんでした。

それで、Form1 でイベントを受けたいので
procedure TForm1.Form1OnKeyDown と書き換えて
KeypreviewをTrueにしましたが それでも OnkeyDownのイベントは呼ばれません

ネットでサンプルを探し回ったのですが
OnkeyDownと OnKeyPressの違いとか
Ctrl、Shiftキーとの同時押しの説明とか。内部処理の解説とか
仮想キーコードはどうだ とか
しか見つからず くたびれております。

短めのサンプルどこかにありませんでしょうか…?
584デフォルトの名無しさん:2007/05/12(土) 08:28:12
いや、そんなわけないだろ。
>procedure TForm1.Form1OnKeyDown と書き換えて
ってあるけど、名前だけ書き換えたとかそんなことしてないよね。というか別に名前は
なんだっていいんだけど、
フォームを選択して、オブジェクトインスペクタのイベントタブで、
OnKeyDownでForm1OnKeyDownってなってる空欄だとイベントとコードの関連付け
がされてないので呼ばれる訳が無い。
585デフォルトの名無しさん:2007/05/12(土) 08:30:09
訂正>>
OnKeyDownがForm1OnKeyDownってなってる?空欄だとイベントとコードの関連付け
がされてないので呼ばれる訳が無い。
586デフォルトの名無しさん:2007/05/12(土) 08:59:33
>>584-585
orz

…まさにそれです。
イベントパンドラは自動的にその名前で呼べるもんだと思ってました
本当にありがとうございました。
587デフォルトの名無しさん:2007/05/12(土) 09:02:20
これが斜め上の発想というヤツか
588デフォルトの名無しさん:2007/05/12(土) 09:04:35
このスレにマッチした質問です。大変すばらしい。フサギコはしね
589デフォルトの名無しさん:2007/05/12(土) 09:10:56
>>575
>『ABC123DEF- 456,789GHI123,,456 2007/05/11 17:12JKL』という文字列から
>123 -456789 123 456 2007 5 11 17 12
>を数値として正規表現で抽出できたら、いいなー、とは思うが
正規表現スレ行けば5分で解決するようなことを長々と・・・
1
+3.14
-10,123,456.9999
あたりににマッチする正規表現
([+-]?(\d{1,3}(,\d{3})+|\d+)(\.\d+)?)

>あと、もう一つ正規表現が嫌いな理由が、可読性が低いからだと気がついた。
書くときにインデントして考えればなんてことはない。
(
    [+-]? (?# "+" or "-" or "")
    (
        \d{1,3}(,\d{3})+ (?# "12,123,456,789")
            |
        \d+ (?# "123093524")
    )
    (\.\d+)? (?# ".12391412" or "")
)
590デフォルトの名無しさん:2007/05/12(土) 09:19:30
>>569
procedure SkipBlank(var p: PChar); //空白ならスキップする
begin
 while p^ in [#7, ' '] do inc(p);
end;

function GetDotNum(var ptr: PChar; var retVal: Extended): boolean;
var
 s: string;
 DotCnt: Integer;
 iret: int64;
 Minus: boolean;
 p: PChar;
begin
 p := ptr; SkipBlank(p); if p^ = #0 then exit;
 Result := false; DotCnt := 0; Minus := false;

 if p^ in ['+', '-'] then
 begin  minus := p^ = '-';  inc(p); SkipBlank(p); end;
 while true do
  case p^ of
   '0'..'9': begin s := s + p^; inc(p);  end;
   '.':    begin inc(DotCnt); if DotCnt >= 2 then break; s := s + p^; inc(p); end;
  else break;
  end;
 if s <> '' then begin
  ptr := p;  retVal := StrToFloat(s);  Result := True;
  if minus then retVal := -retVal;
 end;
end;
591デフォルトの名無しさん:2007/05/12(土) 09:21:20
590 の続き >>549 の590対応版
var
 SL: TStringList;
 i, j, k: integer;
 nam: string;
 dt: Extended;
 p: PChar;
begin
 if opendialog1.Execute then
 begin
  SL := TStringList.Create;
  try
   nam := OpenDialog1.FileName;
   SL.LoadFromFile(nam);
   for i := 0 to SL.count - 1 do
   begin
    p := PChar(SL.strings[i]);
    for j := 0 to 5 do
    begin
     if p^ = #0 then break;
     if not GetDotNum(p, dt) then break;
     SkipBlank(p);
     x[i][j] := dt;
     if p^ = ',' then inc(p) else
      if copy(p, 1, 2) = ',' then inc(p, 2) else break;
    end;
   end;
  finally SL.free end;
 end;
end;
592デフォルトの名無しさん:2007/05/12(土) 09:23:52
>>589
仕様は >>561 だから、全角数字や 全角カンマ
全角符号の後の全角空白 にも対応しないといけないよ
593デフォルトの名無しさん:2007/05/12(土) 09:45:06
統一のとれてない滅茶苦茶なCSVだわな。そんなの読み込みたくないわ

594デフォルトの名無しさん:2007/05/12(土) 10:21:37
まあ、VBやDelphiのパスカル文字列派は、こういう場合は 全角コンマを 半角コンマに置換してから処理するんだろな。
で、もっさりアプリが出来上がると。

正規表現も同じで、一見便利に見える正規表現も全角文字が入ると途端に面倒になる。
これも、全角文字を先に半角に置換しろよとなるんだろ?

Cコンパイラのコンパイルが遅いのも、プリプロセッサがコンパイルとリンクで最低3パスになるから
Delphi使いなら1パスで処理するのを目指したいものだ
595デフォルトの名無しさん:2007/05/12(土) 10:24:59
×プリプロセッサがコンパイルとリンクで

実際はasm/リソースを使うと
プリプロセッサ=>コンパイル=>asm=>リソースコンパイ=>リンクだな
596デフォルトの名無しさん:2007/05/12(土) 10:32:46
徹頭徹尾激しくどうでもいいです
597デフォルトの名無しさん:2007/05/12(土) 10:42:31
知らない事はどうでもいい事らしい
598デフォルトの名無しさん:2007/05/12(土) 11:45:43
>>575
そういう目的なら
今日はがんばった、2007/4/10
今日はつかれた、2007/04/12
今日は2階に移動、2007/04/15
今日頑張って1番だぜ、2007/04/17
てな場合に 1,2が抽出されるのはマズイんじゃないのか?

フィールド形式の指定が出来ないなら
日付が入ってる場合は、日付を優先するとかさ
599デフォルトの名無しさん:2007/05/12(土) 13:30:30
>>590のコード
 p := ptr; SkipBlank(p); if p^ = #0 then exit;
 Result := false; DotCnt := 0; Minus := false;

---------------------------
 Result := false; 
 p := ptr; SkipBlank(p); if p^ = #0 then exit;
 DotCnt := 0; Minus := false;

と順番を入替えて
600デフォルトの名無しさん:2007/05/12(土) 15:16:07
>>569
> これをdouble型でやるとしたら大分改良が必要ですか?
端から見てると、仕様がコロコロ変わってるみたいだね。
>>489の例はカンマ区切りではないし、実数型でもない。


>>575
> 『ABC123DEF- 456,789GHI123,,456 2007/05/11 17:12JKL』という文字列から
> 123 -456789 123 456 2007 5 11 17 12
>
> を数値として正規表現で抽出できたら、いいなー、とは思うが
できるよ。>>589さんが書いてるけど、実数値をWritelnでテキストファイルに
書き出した

0.00000000000000E+0000 1.00000000000000E+0000

なんていうのも、正規表現でまとめて抽出できる。
60117:2007/05/12(土) 15:44:59
>>553
情報ありがとうございます。
再トライしてみます。
602デフォルトの名無しさん:2007/05/12(土) 15:45:44
抽出できたとして、それがどうだと言うんだ?

ただし、全角の数字もサポートしし、全角符号の後の全角の空白を削除し、
かつ全角カンマも削除するという仕様だぞ。

さらには漢数字や△を負数に使うようなのにも対応したいなんて言い出すかもしれん。
こういう曖昧な仕様に柔軟に対応なんて場面では、字句解析ゴリゴリにはカナワンンさ。
実際、 既に、同じ判定を返す関数が2つもある
http://delwiki.info/?%BB%F1%CE%C1%2F%A4%D5%A4%B5%A5%AE%A5%B3%A4%CE%B0%D9%A4%CE%CA%B8%BB%FA%CE%F3%BD%E8%CD%FD%B9%D6%BA%C24
http://delfusa.blog65.fc2.com/blog-entry-49.html#more

なんで、さっさと正規表現組みはコードが出ないんだ?
そんなに簡単にコードが書けるなら書いてみろよ。
ようは出来ないんだろ?

603デフォルトの名無しさん:2007/05/12(土) 15:58:07
(´-`)。oO(なんで正規表現が出てくると拒絶反応が起きるんだろう…)
604デフォルトの名無しさん:2007/05/12(土) 16:01:12
そりゃ正規表現使うと、簡単に見えて実は大変だなからな。
抽出までは楽だけど、その後、数字に直す段階で、
結局全角文字を半角にしたり、空白削除したりで、パースのやり直し。
605デフォルトの名無しさん:2007/05/12(土) 16:16:07
>>603
このスレでは正規表現使え、そんなのスクリプトでやればいいじゃん。はNGワードです。
606デフォルトの名無しさん:2007/05/12(土) 16:18:12
>>543だけどさ、
そもそもフサの細かい仕様わからんし、正規表現そこそこやったことあるし、
今回は流れで字句解析の事書いたけど、正規表現でもぜんぜん問題ないと思う。
正規表現便利だしさ。やり方色々あるからやってみるのをお勧めする。
字句解析も正規表現もやってみるとおもろいし。たくさんの事を学べる。
>あと、もう一つ正規表現が嫌いな理由が、可読性が低いからだと気がついた。
ってフサが言ってるけど、俺的には、正規表現使えるところはそれ使えば、
その分コード量少なくなるし、シンプルになるからトータル的には使った方が
いいと思う。もちろん、実装する機能・仕様しだいだけどさ。
俺的にはVCLに標準で取り込んでほしいところ


607デフォルトの名無しさん:2007/05/12(土) 16:27:09
独り言はチラシの裏へ
608デフォルトの名無しさん:2007/05/12(土) 16:32:58
ここがペーパレスなチラシの裏です
609デフォルトの名無しさん:2007/05/12(土) 16:38:16
便所の落書きと呼ばれてるのはここの掲示板のことです。
610デフォルトの名無しさん:2007/05/12(土) 17:24:58
初心者スレの嵐は最低だな
611デフォルトの名無しさん:2007/05/12(土) 20:11:09
Delphi用のLEXがWideString対応ならいいんだけどね
612デフォルトの名無しさん:2007/05/12(土) 20:35:07
レックス&ヤックル
ヤックル「ぷいにゅ」
613デフォルトの名無しさん:2007/05/12(土) 20:51:39
VCLがUnicodeにまだ対応してないんだから、それは言わない約束だお
614デフォルトの名無しさん:2007/05/12(土) 22:31:49
でもUTF8Decodeとかあるよね
615デフォルトの名無しさん:2007/05/12(土) 22:34:48
>>614
>VCLが
616デフォルトの名無しさん:2007/05/12(土) 22:36:51
そろそろうにこーどに対応しろよまじで
617デフォルトの名無しさん:2007/05/12(土) 22:49:04
168 :デフォルトの名無しさん :2007/05/10(木) 07:29:46
for win32を、unicode対応汁!ってやつは頭がどうかしてると思うよ


169 :デフォルトの名無しさん :2007/05/10(木) 09:28:27
まぁ、いまだにDelユーザやってる時点で頭が(ry


170 :デフォルトの名無しさん :2007/05/10(木) 17:09:54
デルフィおわったな

618Delフサギコ ◆A6VzDeLphI :2007/05/12(土) 23:52:07
           _________
   ∧,,∧   / 
  ミ,,゚Д゚彡 <  きょうはあたかかったね
   ミつ旦(ミ~~ \ 
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪
>>589さん
たぶん、考えていることが全然違うから、
正規表現スレに行っても、抽出出来ないと思うんですけど,,,

>>594さん
・・・アプリの作りを楽にしたいのか、
ユーザーの使い勝手を考えるのか・・・

>>598さん
うん、確かに実はそうなんだよ。
そこは、ユーザーが理解してくれて選択するかなあ。
と考えてますです。
やや、矛盾をはらんでいますが
どんなエディタでも、自然数ソートって、その手の
仕様矛盾があるのかしら?と、適当な所で妥協してます。

>>589さん
そうなのか!
ブログで書いてあるんだけど
PickOutInt64FromStringVer3
のクローン関数を正規表現で、作れる?

とりあえず、漏れは正規表現より、文字列パーサークラスなどに
興味があるんだけれども。
619Delフサギコ ◆A6VzDeLphI :2007/05/12(土) 23:59:25
   ∧,,∧   / 
  ミ,,゚Д゚彡 <  ・・・ 
   ミ つ旦)~~ \ 
とちゅうまで読んでからレス書いたんだが....

>>603さん
なんか嫌な思い出でもあるのかと

というか、宗教的に漏れも正規表現反対派なので
>>602さんのカキコミがわからなくもない気がする。

だーーって、わかりにくくない?正規表現。
単なるウィンドウアプリつくるのにVCLや.NETじゃなくて
MFCとかWinAPIゴリゴリで書くような
わざと物事を難解にして喜んでいるような気がしてならないんだ。

しかも、正規表現を押してくる人って、なんだか高圧的で。
"知ってるから偉い!知らないと無能。"
みたいなセンスがあって、閉口しぎみというか...

といっても、とりあえず漏れは
Regular Expression(Riue ちゃんの正規表現講座) - Index
http://www.sixnine.net/regexp/index.html
この内容はほどほどに理解してますよ。
こういうよいページはありがたいよね。

>>606さん
標準で取り込むのは、漏れも賛成です。漏れは使わないかもしれないが
それで利益を受ける人が多数いることには、賛成を一票。
620デフォルトの名無しさん:2007/05/13(日) 00:02:34
いい加減隔離スレ逝ったら。お前の趣味なんて知ったことか。
621デフォルトの名無しさん:2007/05/13(日) 00:04:50
オナニーも程ほどにナ
622デフォルトの名無しさん:2007/05/13(日) 00:06:40
初心者スレ荒らして、なにが面白いんだろうなぁ・・
コテハンたたきじゃないけど、ちょっと今回はひどすぎ
623デフォルトの名無しさん:2007/05/13(日) 00:13:18
寺小屋すれにいったらいいのに。あそこで好きなだけやればいい。
624デフォルトの名無しさん:2007/05/13(日) 00:19:46
Delphi用の質問系スレッドがここしかないんだから
超初心者以外の質問が出てしまうのも
ある程度仕方が無いような気がする

質問の意味さえ理解できない俺からの意見w
625デフォルトの名無しさん:2007/05/13(日) 00:21:55
そうだけど、まじめな質問&回答になってないだろ。あーだ、こうだ、好きだ嫌いだ
ってもう無意味
626Delフサギコ ◆A6VzDeLphI :2007/05/13(日) 00:22:00
 ∩| 
 ミ ゙''゙゙゙つ 
 ミ∧,,∧  およよ
 ミ,,゚Д゚彡
 U U   なにがご不満に入ったのか知らんが...
       >>620-623、の方がどうみても.......

ま・いっか。

お気に入りに入ってなかったんで気がつかなかったけど
昔あった上級者質問スレのようなのが
寺子屋スレなのね。

次に質問するときはそっちにします。
どもどもー。

・・・でも初心者のためとかのスレタイだな・・・

>>624さん
すません〜〜、お騒がせしました。
627デフォルトの名無しさん:2007/05/13(日) 01:12:51
いいんじゃねぇの。ここに何書いたって。
>>お前の趣味なんて知ったことか。
はぁ?展開されてる話題がお前の興味の範囲外であろうと知ったことかボケ。

628デフォルトの名無しさん:2007/05/13(日) 01:19:10
多分正規表現の好き嫌いのことだろ
別に大した脱線でもないし、長々とスレ違いの議論をやられるわけでもなけりゃ許容範囲だと思うけどね
629デフォルトの名無しさん:2007/05/13(日) 01:31:52
というかブログ連動型質問されてもわけわからんし。
>>575の要望に答えたら全角対応してねぇとか言われるし。
630デフォルトの名無しさん:2007/05/13(日) 02:03:56
オマイラ少し落ち着けw
631デフォルトの名無しさん:2007/05/13(日) 02:04:09
タイプライブラリの取り込みでDelphiから簡単にWSHを使えるようになる。
D6perでも簡単に正規表現使えるんだぜ?

まあこの話は質問スレでどうこういう話じゃないな。
こういう文字列からここれを抽出したいって質問だと思ってるから、
回答者も正規表現でぱっぱと書いてはい終了って感じだろし。

そもそも後出しじゃなくて仕様をはっきりさせてから来いと。
632デフォルトの名無しさん:2007/05/13(日) 02:22:19
> タイプライブラリの取り込みでDelphiから簡単にWSHを使えるようになる。
くわしく
633デフォルトの名無しさん:2007/05/13(日) 03:12:42
>>632
プロジェクト>タイプライブラリの取り込み>Microsoft VBScript Regular Expression 5.5(Version5.5)
634デフォルトの名無しさん:2007/05/13(日) 04:40:49
TurboDelphiExplorer でもできますか?
635デフォルトの名無しさん:2007/05/13(日) 08:43:00
>>631
たぶん、みんなが欲しいのはLEXのような正規表現case文
英語圏の人はDelphiLEXがあるから必要を感じないんだろな。

という事で、正規表現派の人 Delphi用LEXのWideString版を作らない?
636Delフサギコ ◆A6VzDeLphI :2007/05/13(日) 11:00:12
     ∧,,∧   ___  
    ミ,,゚Д゚ミ .||::::::::||
    ミ   つ___||_____|| 
   | ̄ ̄|__ミ―――――
   `ー┬‐''
     ┴
そのスクリプトの取り込みかた
漏れのブログで書いたがな....
637デフォルトの名無しさん:2007/05/13(日) 11:13:29
>>636
リンクキボン
638デフォルトの名無しさん:2007/05/13(日) 11:30:17
Delphiで動くPerl互換の正規表現ユニット作って!
http://pc8.2ch.net/test/read.cgi/tech/1093355303/

サーバーが見つかりません
http://regexpstudio.com/
639デフォルトの名無しさん:2007/05/13(日) 11:47:59
正規表現版

type
TInt64DynArray = array of Int64;

function PickOutInt64FromStringVer3(Source: WideString): TInt64DynArray;
var
 RegExp : TRegExp;
 pMatches: MatchCollection;
 pSubMatches: SubMatches;
 i, j, k: Integer;
 s: WideString;
 OutValue: Int64;
begin
 SetLength(Result, 0);
 RegExp := TRegExp.Create(nil);
 try
  RegExp.Global := True;
  RegExp.Pattern := WideString('([+\-+−]?[\s\t ]*(?:[\d0-9][,,]?)+)');
  // パターンマッチ
  pMatches := RegExp.Execute(Source) as MatchCollection;
640デフォルトの名無しさん:2007/05/13(日) 11:48:15
おとなしく鬼車をDelphiから呼べば事足りるんじゃないの。
早いし、WideString使えるし、BSDライセンスだし言うことなしだと思うけど
641デフォルトの名無しさん:2007/05/13(日) 11:49:02
  // マッチ結果の加工
  for i := 0 to pMatches.Count - 1 do
  begin
   pSubMatches := (pMatches.Item[i] as Match).SubMatches as SubMatches;
   for j := 0 to pSubMatches.Count - 1 do
   begin
    s := pSubMatches.Item[j];
    // 残していい文字以外を削除
    RegExp.Pattern := '[^+\-+−\d0-9]';
    s := RegExp.Replace(s, '');

    // 全角→半角変換
    for k := 1 to length(s) do if (ord(s[k]) >= $FF00) and (ord(s[k]) < $FF5F)
     then s[k] := WideChar(ord(s[k]) - $FF00 + $20);

    // 数値に変換して格納
    if TryStrToInt64(string(s), OutValue) then
    begin
     SetLength(Result, Length(Result)+1);
     Result[Length(Result)-1] := OutValue;
    end;
   end;
  end;
 finally
  pSubMatches := nil;
  pMatches  := nil;
  FreeAndNil(RegExp);
 end;
end;
642デフォルトの名無しさん:2007/05/13(日) 11:49:37
使用の前に:

>>633の手順に従って
プロジェクト>タイプライブラリの取り込み>Microsoft VBScript Regular Expression 5.5(Version5.5)
を取り込む。

どういうわけか(タイプライブラリインポータがさぼってるとしか思えん)
一部のプロパティが使用できなくなっているので
VBScript_RegExp_55_TLB.pasを開き
procedure TRegExp.Set_Global(pGlobal: WordBool);
begin
 Exit;
end

procedure TRegExp.Set_Global(pGlobal: WordBool);
begin
 DefaultInterface.Global := pGlobal;
end
に修正して保存。

プロジェクト>プロジェクトに追加
で VBScript_RegExp_55_TLB.pas を追加。
ユニットの uses に VBScript_RegExp_55_TLB を追加。
643デフォルトの名無しさん:2007/05/13(日) 12:01:07
>>639
お疲れ様。 ソレって逐次的に実行は出来ないの?
Wikiのコードは1回の呼び出し毎に 文字列又は数値が帰って来るんで

比較の都度全部スキャンしてると、効率が違って来ると思うんだけど
644デフォルトの名無しさん:2007/05/13(日) 12:04:22
最初はDelwikiで紹介されてた TRegExpr を使ってたが
後方参照しないグループ化 (?:) が使えないのと、
グローバルマッチが使えないので断念。

パターン文字列自体は、小一時間で形になったが
+-+− の - 記号が範囲指定働きをしているのを失念して1時間無駄にした。

全角→半角変換のルーチンも正規表現で書けなくはないが
delwikiのコードより長くなりそうだったのでdelwikiのコードを流用


個人的には、正規表現を人に勧めるのは
Delphiの標準コンポーネントになってからでも遅くないと思う。(もうありえそうにないが)
645デフォルトの名無しさん:2007/05/13(日) 12:44:53
function Int64FromPtr(var p: PWideChar; var ret: Int64): boolean;
var s: WideString;
label numMode;
begin
 s := '';
 result := False;
 while true do case p^ of
   #0: exit;
   '+', '-', #65291 {+}, #65293 {−}:
    begin
     s := ZenToHan(p^); inc(p);
     while true do case p^ of
       #0: exit;
       #9, ' ',#12288{ }: inc(p);
       '0'..'9', #65296 {0}..#65305 {9}:
        goto numMode;
      else begin  s:='';break;end;
      end;
    end;
   '0'..'9', #65296 {0}..#65305 {9}:
    begin
   numMode:
     while true do case p^ of
       '0'..'9', #65296 {0}..#65305 {9}: begin s := s + ZenToHan(p^); inc(p); end;
       ',', #65292 {,}: begin inc(p); if not ChkChar(p^,'01234567890123456789') then break; end;
      else break;
      end;
     ret := StrToInt(s);  result := true; exit;
    end;
  else inc(p);
  end;
end;
646デフォルトの名無しさん:2007/05/13(日) 12:47:56
使った関数。

function ChkChar( c: WideChar; s: WideString): boolean;
var
 i: Integer;
begin
 Result := True;
 for i := 1 to length(s) do if s[i] = c then exit;
 Result := False;
end;

function ZenToHan(c: WideChar): WideChar;
begin
 if (ord(c) >= $FF00) and (ord(c) < $FF5F)
  then result := WideChar(ord(c) - $FF00 + $20)
 else result := c;
end;

>>645
DelWikiのコードは文字と数字に別けて返す関数なんで、
数字の時だけ返すようにして、参照ポインタで渡すようにした。
647デフォルトの名無しさん:2007/05/13(日) 13:00:47
>>644 標準コンポーネントになるより、言語に取り込んで欲しいな
RegCase p of
'ABC': で文字列ABCにマッチした場合にpをABCの次のポインタまで移動してくれればと
PAnsiCharとPWideChar だけでいいからさ。

>>645
お疲れ様。
結局、Delphiでも字句解析をやろうとしたらポインタ型だよね
648デフォルトの名無しさん:2007/05/13(日) 13:17:50
だめだな、
RegCase p to str of でマッチした結果はstr変数に入ってくれないと使えないか
649デフォルトの名無しさん:2007/05/13(日) 15:19:00
([+\-+−]?[\s\t ]*(?:[\d0-9][,,]?)+)
今までパターン文字列は出てきても読み方が説明されたことがないので説明しとくね

[+\-+−]?
+ か - か + か − のいずれかが0回か1回出現し、

[\s\t ]*
続けて、半角スペースかタブ文字か全角スペースが0回以上出現し、

([\d0-9][,,]?)+
続けて、
(半角数字か全角文字の0〜9が1回出現し、続けて , か ,が0回か1回出現する)
というグループが1回以上出現する


という文字列に適合するパターン

マッチした文字列として () で囲われた部分が返ってくる。
マッチした文字列として返すわけではなくただグループとして囲う場合は
(?:パターン)
と書く。
650デフォルトの名無しさん:2007/05/13(日) 15:44:57
でもさ、俺、最初仕様を、

 文字列で頭からソートするけど、途中に数字が入ってたらそこは数字順にする

と思ってたんだけど、そういう仕様だと、正規表現でのマッチだけじゃダメだよね
そうじゃない場合部分と、マッチした部分に別けないといけない。
さらに>>649だと、数字の前の空白と、数字が終わったあとのカンマが数字に含まれてしまう。

651デフォルトの名無しさん:2007/05/13(日) 15:51:36
>>650
その場合なら
(文字列部に適合するパターン)(数字部に適合するパターン)
というパターンを書けば、文字列部と数字部が一度に取得できるので
それで文字列順にソートした後、数字順にソートすればいいんでない?
ま、パターン考えるのが大変そうだけど
652デフォルトの名無しさん:2007/05/13(日) 15:53:32
超初心者が絶滅しても当分このすれは大丈夫だな、こりゃ・・・
653デフォルトの名無しさん:2007/05/13(日) 15:59:32
いい加減にしないと
初心者さんが質問できないぞw

長ながと議論が必要な質問は過疎ってる寺子屋のが良いんでない?
654デフォルトの名無しさん:2007/05/13(日) 16:03:32
お、なんか質問できそうなふいんき(←なぜかry

Tmemo.Lines.SaveToFileで作ったtxtファイルの文字コードを
UTF-8に変換したいんですがどうすればいいんでしょうか?
ちなみにDelphi6です

>>279もDLしてみたんですが、リンク切れがあって使えませんでした
655デフォルトの名無しさん:2007/05/13(日) 16:22:21
procedure TForm1.Button1Click(Sender: TObject);
var
 sl: TStringList;
begin
 sl := TStringList.Create;
 try
  sl.LoadFromFile('test.txt');
  sl.Text := UTF8Encode(widestring(sl.Text));
  sl.SaveToFile('test2.txt');
 finally
  sl.Free;
 end;
end;
656デフォルトの名無しさん:2007/05/13(日) 16:44:04
即答有難う御座いました
相当の暇人ですね(笑)
ちゃんと動きました!
神よ感謝します!!!
657デフォルトの名無しさん:2007/05/13(日) 16:44:41
AnsiToUtf8 って D6には無かったのかな? まあ中身は >>655 のUTF8Encode(widestring(s)) なんだけどさ


こういう ふいんき (←なぜか変換出来ない) って、結晶の時代って言うんだよな?
ttp://tenjin.coara.or.jp/~tomoyaz/higa9707.html#970718
658654:2007/05/13(日) 16:45:31
>>655
無事出来ました
ありがとうございます!
659654:2007/05/13(日) 17:24:22
調べてみたらAnsiToUtf8もありました
まあ初心者的には結果さえきちんとかえってくるならなんでもOKっす
もう>>655氏ので実装しちゃったんでこのままいきますよ
660デフォルトの名無しさん:2007/05/13(日) 17:32:23
ふいんきの間違えについて指摘してやったら
マジレスするなとかここは2chだとか
訳の解らない事を言ってくる
661デフォルトの名無しさん:2007/05/13(日) 17:39:06
自アプリのボタン等を別ウインドウにドラックして、そのドラック先のハンドルを取得したいのですが
どのようにすればよいのでしょうか?
662デフォルトの名無しさん:2007/05/13(日) 18:10:08
ボタンで、ドラッグを開始する
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
SetCapture(Button1.Handle);
end;

//ドラッグ中(マウスを押し続けてる間はキャプチャーされる)
procedure TForm1.Button3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
pt: TPoint;
hdl,hdl2: HWND;
s: string;
begin
pt := Point(x, y);
Windows.ClientToScreen(Button3.Handle, pt);
Edit1.Text := format('%5d %5d', [pt.x, pt.y]); //テストの為に座標を表示してるだけ
hdl := Windows.WindowFromPoint(pt);
if hdl <> 0 then
begin
hdl2:=ChildWindowFromPoint(hdl,pt);
if hdl2<>0 then hdl:=hdl2;
GetWindowText(hdl, PChar(s), length(s));
SetLength(s, 1000);  //テストの為に表示してるだけ
s := Pchar(s);
Memo1.Lines.Add(s)
end;
end;
放した時に、  ReleaseCapture(); を忘れない
663デフォルトの名無しさん:2007/05/13(日) 18:23:38
>>662
ありがとうございます。
早速試してみましたが、私の言葉が足らないのかちょっと希望している動作と違っていました。

私の考えている動作としては下記のリンク先にあるソフトのようなものを希望しています。
ttp://mosa.oh.land.to/wiki/index.cgi?page=SCFH

引き続き、よろしくお願いします。
664デフォルトの名無しさん:2007/05/13(日) 18:41:39
>>663 その機能全部入れろっての?

窓ハンドルが手に入れば GetWindowRect でその領域が手に入るし
GetDC(0) で全体の描画用ハンドルが手に入るから、それをTCanvasに入れて
CopyRectしてくればいい
665デフォルトの名無しさん:2007/05/13(日) 22:22:14
>>640
鬼車もUnicodeだと今ひとつ速くないっていうか、改造しないと
WinAPIなWSHみたいに2バイト文字のinsensitiveに対応できないでしょ
WSHはPerlみたいに(?i)でオプションONとか出来ないのは不満だけんど
666デフォルトの名無しさん:2007/05/13(日) 22:25:17
>>642
それTruboは直ってる
667デフォルトの名無しさん:2007/05/13(日) 22:30:24
いけねえ「Turbo」だw
668デフォルトの名無しさん:2007/05/13(日) 22:30:55
trubo…?
turbo…ターボ
turbe…鶴瓶師匠
669Delフサギコ ◆A6VzDeLphI :2007/05/13(日) 23:38:54

   ∧,,∧   / もう、元ネタふり者の
  ミ,,゚Д゚彡 <  漏れの意向とか
   ミつ旦(ミ~~ \ 完全に無視して
 @ミ   ミ     世界がススんでいった
   ∪''∪     気がする。

まあ、盛り上がるなら、それもヨキコトカナ
とりあえず、VBScriptの取り込み方なぞ。

Delphi で VBScript を使うhttp://delfusa.blog65.fc2.com/blog-entry-30.html
DelphiでVBScriptを使う(もうちょっとちゃんとした記事に...)http://delfusa.blog65.fc2.com/blog-entry-33.html
VBScriptとの連携めんどうです。http://delfusa.blog65.fc2.com/blog-entry-34.html
DelphiとVBScriptとの連携、VBScriptの関数に値渡したり、戻り値を受け取ったりするhttp://delfusa.blog65.fc2.com/blog-entry-35.html

まあ、まんまここのパクリともいえるが
Malcolm Groves
http://www.malcolmgroves.com/stories/2004/09/23/scriptingYourDelphiApplications.html
そもそも、このサイトがどこからかのコピペな気がする。
こことかの方が元だよね。http://web.archive.org/web/20050311232008/http://www.delphidevelopers.com/learnbooks/Scripting_your_Delphi_Application.htm

M&Iさんのところでも紹介されてますね。
オートメーションサーバ機能を使ったマクロの実現
http://homepage3.nifty.com/m-and-i/tips/autosvr.htm

まあ、漏れらは、おそらく、VBScriptではなくDelphiスクリプトが
高度に実現してくれたらうれしいのに、と思うわけだが。
670デフォルトの名無しさん:2007/05/13(日) 23:52:01
はい、次の質問どうぞ!
671デフォルトの名無しさん:2007/05/14(月) 00:18:00
そろそろ製品版を買おうと思うんだがどれがオヌヌヌ?
無料版はもう2、3年使ってきたし使いにくさを感じてきたんだが
672デフォルトの名無しさん:2007/05/14(月) 00:32:57
>>671
Delphi7
673デフォルトの名無しさん:2007/05/14(月) 00:47:09
>>671 無料版の使いにくさってどこが?
674デフォルトの名無しさん:2007/05/14(月) 01:53:09
普通にTurboDelphiかDelphi 2007 for winでいいんじゃない?
675デフォルトの名無しさん:2007/05/14(月) 07:28:03
タイトルバー非表示のツールをつくっています。

クライアント領域の一部を右クリックされた時に
タイトルバーが右クリックされた時に出るメニューを出したいのですが
どのイベントをどうやってかっさらってくれば良いのでしょうか?
676デフォルトの名無しさん:2007/05/14(月) 07:31:53
その「一部」にメニュー付ける
677ミ,,゚Д゚彡 ◆A6VzDeLphI :2007/05/14(月) 08:36:08
>>675
これか
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
begin
 if (Msg.hwnd = Panel1.Handle)
  and (Msg.message = WM_LBUTTONDOWN) then
 begin
  SendMessage(Self.Handle, WM_SYSCOMMAND, SC_MOVE or 2, 0);
        {↑Panel1.Handleとすると
         Panelをドラッグで移動できる}
  Handled := True;
 end;
end;

これ
procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if ssLeft in Shift then
 begin
  ReleaseCapture;
  SendMessage(Handle, WM_SYSCOMMAND, SC_MOVE or 2, MakeLong(X, Y));
 end;
end;
678デフォルトの名無しさん:2007/05/14(月) 13:17:38
>>676
どうやるんでしょうか?
>>677
ドラッグの操作ではなくて、閉じるとか最大化とかが選べるメニューです。
679デフォルトの名無しさん:2007/05/14(月) 13:40:09
"Delphi システムメニュー 表示"
http://homepage1.nifty.com/MADIA/delphi/Win32API/SYSPOP.htm
680デフォルトの名無しさん:2007/05/14(月) 22:32:17
>>664
いえ、機能の一部をみていただいて、理解していただきたかっただけです、

ちなみにフォーム貼り付けるはButton1とButton3,そしてEdit1とMemo1ですよね?
これだと>>662はまともに動作しないのでButton1=Button3としたところ
Memo1には"Edit1"が延々と表示されてまして・・・。

何か根本的なことを勘違いしてますか?
681デフォルトの名無しさん:2007/05/14(月) 22:35:05
OnMouseDownとOnMouseUpでいい気がする
682デフォルトの名無しさん:2007/05/14(月) 22:37:51
>>681
やってみましたが相変わらずEdit1としかMemo1には表示されないです・・・。
683デフォルトの名無しさん:2007/05/14(月) 22:39:50
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    SetCapture(Button1.Handle);
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
    hWnd: Windows.HWND;
    s: String;
begin
    hWnd := WindowFromPoint(Mouse.CursorPos);
    SetLength(s, GetWindowTextLength(hWnd));
    GetWindowText(hWnd, PChar(s), Length(s)+1);

    Caption := s;
    ReleaseCapture;
end;
684デフォルトの名無しさん:2007/05/14(月) 22:43:36
>>683
グレイト!!
感動しました。
本当にありがとうございました。
685デフォルトの名無しさん:2007/05/15(火) 09:18:41
>>679
あのメニューの名前はシステム表示だったんですね。
ありがとうございます。
686デフォルトの名無しさん:2007/05/15(火) 11:03:03
Delphi6で作成したソフトを
Windowのサイズに会わせてコントロールのサイズや位置、フォントサイズを調整する
別ソフトを作成したいのですがうまくいきません。

Windowとボタンのハンドルは取得できるのですが、LabelとShapeが取得できないのですが
(WinSight32にも表示されません)何かいい方法ないでしょうか?
687デフォルトの名無しさん:2007/05/15(火) 11:12:40
>>686
Labelは窓ハンドルを持っていません。
ですから、Delphi6で作成したソフトが自分のものでしたらソッチで何とかするしかないでしょう
688ドラッグ中のハンドル:2007/05/15(火) 11:49:45
こんにちは。
いぜんドラッグ中のハンドル取得について質問していたものです。
またつまってしまいましたので、どなたか力を貸していただけないでしょうか?

現在のソースは

procedure Button1MouseDown(略);
begin
  FOldHWND := 0;
  SetCapture(Button1.Handle);
  FIsCapture := True;
end;

procedure Button1MouseUp(略);
begin
  FIsCapture := False;
  ReleaseCapture;
  InvalidateRect(FOldHWND, nil, True);
  FOldHWND := 0;
end;
689ドラッグ中のハンドル:2007/05/15(火) 11:55:59
procedure Button1MouseMove(略);
var
  hWnd: Windows.HWND;
  DC: HDC;
  Canvas: TCanvas;
  Rect: TRect;
begin
  if not FIsCapture then exit;
  hWnd := WindowFromPoint(Mouse.CursorPos);
  if FOldHWND = hWnd then exit;
  InvalidateRect(FOldHWND, nil, True);
  DC := GetDC(hWnd);
  Canvas := TCanvas.Create;
  Windows.GetClientRect(hWnd, Rect);
  Canvas.Handle := DC;
  Canvas.Pen.Width := 5;
  Canvas.Pen.Mode := pmBlack;
  Canvas.MoveTo(Rect.Left, Rect.Top);
  Canvas.LineTo(Rect.Right, Rect.Top);
  Canvas.LineTo(Rect.Right, Rect.Bottom);
  Canvas.LineTo(Rect.Left, Rect.Bottom);
  Canvas.LineTo(Rect.Left, Rect.Top);
  ReleaseDC(Canvas.Handle, DC);
  FOldHWND := hWnd;
end;

このソースは、取得したハンドルのクライアント領域に枠を描画するといったものです。
このソースである程度うまくいくのですが、窓のタイトル?をドラッグすると何も描画されなくて困っています。
希望する動作は>>663にあるようなソフトと同じようなものをイメージしています。
どうぞ、よろしくお願いします。
690デフォルトの名無しさん:2007/05/15(火) 13:32:42
DC := GetDC(hWnd);
Canvas := TCanvas.Create;
Windows.GetClientRect(hWnd, Rect);
   ↓
DC := GetDC(0);
Canvas := TCanvas.Create;
try
Windows.GetWindowRect(hdl, Rect);

・・・

finally Canvas.Free end;
691ドラッグ中のハンドル:2007/05/15(火) 15:44:11
>>690
ご回答ありがとうございます。
InvalidateRectもInvalidateRect(0, nil, True);
このようにして早速やってみました。

その結果、望みの動作をしているのですが、今度は描画できるウインドウと
出来ないウインドウが出てきました。
また、ちらつきも以前よりも増してるようです。

んー、根本的に何かおかしいのかな・・・?
692ドラッグ中のハンドル:2007/05/15(火) 16:48:40
んー、動作自体はいいのだけど、画面全体を再描画させるとどうしてもちらつく・・・。
画面全体の上に乗せるような感じで、枠を書いたり、消したり出来れば最高なんだけどなぁ。
でも、これだと、窓が時間経過とともに動くようなものだと無理か・・・。
となると、やっぱりクライアント領域に直接描画するのが一番なのかな?

うー、頭がこんがらがってきた・・・。
693デフォルトの名無しさん:2007/05/15(火) 16:57:29
>>691
>InvalidateRectもInvalidateRect(0, nil, True);
これが何のためにやるわけ? これだと全画面書き換えろって言ってるわけで、そりゃちらつくだろ
694ドラッグ中のハンドル:2007/05/15(火) 17:06:04
>>693
そうなんですよねぇ。

でもInvalidateRect(FOldHWND, nil, True); のままだと後が残ってしまうんですよ。
んで、pmNotで消すかーと思ってやってみても、白くなるだけで意味がなく
もうお手上げの状態です。

>>691で描画できないと書いてありますが、どーもこれは自分で消しちゃってる(InvalidateRectを使って)っぽいです。

むぅ・・・。
695デフォルトの名無しさん:2007/05/15(火) 17:09:29
後が残るのは、ど太い線で描画してるからだろ?

1、まず、領域に収まるサイズで描画する事 =太い線使うならその分小さくする
2、InvalidateRect でそのサイズのRECTを渡してやる、
696ドラッグ中のハンドル:2007/05/15(火) 17:29:01
>>695
Offsetつかったりして、描画領域の調整をしたりしているのですが、
窓の部分部分によって再描画されない領域のようなものがあってうまくいかないのです・・・。

もう一度やってみて、再度、ソースを上げますね。
697デフォルトの名無しさん:2007/05/15(火) 18:09:23
UPしましたです。
ttp://cgi.2chan.net/up2/src/f256315.zip

んーやはり窓のタイトルのラインがどうやっても消えない・・・。

>>695
>2、InvalidateRect でそのサイズのRECTを渡してやる
このときのハンドルは指定するのでしょうか?
それとも0にして、その領域のRect(ソース内の変数だと@FOldRect)を渡すのでしょうか?
前者だと残ってしまうし、後者だとちらつきが酷くなってしまいました。

後者の方法、全体を再描画してる気がするんで、もしかしたら渡し方がいけないのかもしれない・・・。
698ドラッグ中のハンドル:2007/05/15(火) 18:15:21
>>697
不要なものが入ってましたので再うp。
ttp://cgi.2chan.net/up2/src/f256322.zip
699ドラッグ中のハンドル:2007/05/15(火) 19:45:03
流れてしまったようなので別のところにうp
ttp://www.bnbest.net/uploader/src/up0535.zip

InvalidateRectの第一引数に0を指定すると、第二引数を指定しても、指定しなくてもちらつくのは何故だろ・・・?
700デフォルトの名無しさん:2007/05/15(火) 19:54:43
>>699
InvalidateRectが何なのかはちゃんと解かってるのか?
701デフォルトの名無しさん:2007/05/15(火) 20:00:18
>>700
理解してるかはわかりませんが↓に書いてある文は読みました。
ttp://msdn.microsoft.com/library/ja/jpgdi/html/_win32_invalidaterect.asp?frame=true

って、そんな悪戯な質問じゃなく、「ここおかしいよ」って指摘してソースを正してくれるとありがたいっす。
手法は何でもいいからお願いしますです。
702デフォルトの名無しさん:2007/05/15(火) 20:16:38
こんな実装してるとは思えないけど、とりあえずデキターヨ

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
 hWnd: Windows.HWND;
 DC: HDC;
 Canvas: TCanvas;
 Rect: TRect;
begin
 if not FIsCapture then exit;
 hWnd := WindowFromPoint(Mouse.CursorPos);
 if FOldHWND = hWnd then exit;
 DC := GetDC(0);
 Canvas := TCanvas.Create;
 try
  Canvas.Handle := DC;
  Canvas.Pen.Width := 4;
  Canvas.Pen.Mode := pmMergePenNot;
  Canvas.Polyline([FOldRect.TopLeft, Point(FOldRect.Right, FOldRect.Top), FOldRect.BottomRight, Point(FOldRect.Left, FOldRect.Bottom), FOldRect.TopLeft]);
  Windows.GetWindowRect(hWnd, Rect);
  Canvas.Polyline([Rect.TopLeft, Point(Rect.Right, Rect.Top), Rect.BottomRight, Point(Rect.Left, Rect.Bottom), Rect.TopLeft]);
 finally
  ReleaseDC(Canvas.Handle, DC);
  Canvas.Free;
 end;
 FOldRect := Rect;
 FOldHWND := hWnd;
end;

Button1MouseUpもうまく処理してやってね
703デフォルトの名無しさん:2007/05/15(火) 20:28:06
おまえ、ここまで俺達の手を焼かせるんならオープンソースにするんだろな?

こういうのをやるなら、注目窓の回りに蟻の行列アニメでもした方がいいんじゃないか?

まあそれは無理そうだから、
XORで描画して、InvalidateRect使わん方がスマートに行くぞ。

あと、新しい窓を捕まえた時と、その窓から出た時の処理を書いた方がいいぞ
704ドラッグ中のハンドル:2007/05/15(火) 20:30:16
>>702
ぬぉぉぉぉ!!!
これは完璧だ!!
というか理想どおり過ぎて笑いがこみ上げてくるよ!

MouseUpも消す為に
>Canvas.Polyline([FOldRect.TopLeft, Point(FOldRect.Right, FOldRect.Top), FOldRect.BottomRight, Point(FOldRect.Left, FOldRect.Bottom), FOldRect.TopLeft]);
を書けばいいということですね。

やっと先にすすめます。
ありがとう!
705ドラッグ中のハンドル:2007/05/15(火) 20:43:32
>>703
そんな、オープンソースなんて大袈裟なぁ。

って
>あと、新しい窓を捕まえた時と、その窓から出た時の処理を書いた方がいいぞ
これは何で?
改良したソースで残っている問題といえば、
ターゲットの窓が線を引いたのより後に再描画すると線が消えるって事ぐらいなんだけどなぁ。
もしかして他にも何かある?

再描画に対応するにはフックとかいろいろしないといけないような気がする。
というか、知ってるアプリの全てがコレには対応出来てないみたいだから
技術的に不可能(というか非効率?)なのかも〜。

何はともあれ>>702さん、ありがと(#  ̄ー ̄)〇"グッ
70617:2007/05/16(水) 03:53:28
>>553
ExHeaderのリークはDestroyでFIcons[]をFreeしてないのが
原因のようです

が、相変わらずEAccessViolationがでてます。。。
class.pas内のRemoveFreeNotificationで落ちているみたい
なので、どっかのFreeNotificationあたりが原因なのかも。。。

もしよければ、
>HeaderControlとかに変えたら
ってどうやるのか教えていただけませんか?

HeaderControlをFormに追加して、ExHeaderの使われ方
となるべく同じになるように関数やプロパティを変更する
のでしょうか?
707553:2007/05/16(水) 16:31:20
ExHeaderを削除して、HeaderControlをFormに追加して、
プロパティ合わせて、多々コメントアウト。
でもこれはリークチェックのために一時的にそうしただけだぞ。

EAccessViolationはたぶんTreeList

Treelist.pasの上のほうにある
$DEFINE EXHEAD を有効にする
708デフォルトの名無しさん:2007/05/16(水) 16:45:30
他の言語で言うkconvとかみたいな、文字コード変換ライブラリって、無いですかね?
とは言え、やりたいことは、UTF-16 BOM付きファイルを出力したいだけなのですが。
709デフォルトの名無しさん:2007/05/16(水) 16:58:05
つ VB.NET
710デフォルトの名無しさん:2007/05/16(水) 17:10:20
WideStringを使いたくないって事?

WideCharToMultiByte
MultiByteToWideChar
711デフォルトの名無しさん:2007/05/16(水) 17:25:13
あ、WideStringって、UTF-16?
712デフォルトの名無しさん:2007/05/16(水) 17:35:52
Delphi 2005(Win32アプリ) on WinXP環境下で、プロジェクト内の
特定のフォームでの突然ブレークポイントが効かなくなりました。
(それまでは同箇所でのブレークポイントは効いていました。
 他フォームのブレークポイントは現在も有効)

そこで、
・dcuファイルの削除
・resファイルの削除
・ビルド
・コンパイル
・ブレークポイントが効かないPasファイルの切り離し、再追加
・新規プロジェクト生成、全Pasファイル追加しなおし
・[プロジェクト]→[オプション]→[コンパイラ]→[デバッグ情報]の
 On/Offそれぞれでコンパイル、再度Onでコンパイル
・[プロジェクト]→[オプション]→[リンカ]→[TD32デバッグ情報を含める]の
 On/Offそれぞれでコンパイル、再度Onでコンパイル
上記を試すものの、改善しません。
アップデータは最新版の3まで適用済みです。
丹念にぐぐってみたものの、どうしても改善策が分かりません。
お知恵をお貸しください。どうか宜しくお願いします。
713デフォルトの名無しさん:2007/05/16(水) 17:50:44
>>712 同じ名前の別Unitがある。
714デフォルトの名無しさん:2007/05/16(水) 17:51:49
そういうの昔っからあるよな
715デフォルトの名無しさん:2007/05/16(水) 18:34:02
BDSの2006のヘルプ使いにくくないですか?

単語検索でヒットしなかったりします。

たとえば、「累乗」で検索して、Powerに辿り着きたかったのですが、
検索しても出てきませんでした。
結局、Mathユニットのヘルプ見て、探し当てた始末・・・
716デフォルトの名無しさん:2007/05/16(水) 18:38:05
俺はdelphi6についてたWinhelpを外部ツールに登録して使ってる
つーか、BDSヘルプ閉じてもdexplore.exeがプロセスリストに残ってることがあるんだけど大丈夫なの?
717デフォルトの名無しさん:2007/05/17(木) 01:17:35
非VCLウィンドウの上にVCLコントロールを作成するにはどうすればいいでしょうか?

とあるプログラムのプラグイン的なものを作成しているんですが、
プログラム本体からはパネル(たぶん)のウィンドウハンドルしか送られて来ません。
TWinControlから派生したコントロールなら
ParentWindowにそのハンドルを設定すれば出来るのですが、
動作がちょっとおかしかったり、TImageなどTWinControlから派生していないコントロールだと、
上記の方法は使えません。

こうゆう事は直接APIを使ってコントロールを作成しないと駄目なんでしょうか?
どなたか詳しい方いたら教えて下さい。

718デフォルトの名無しさん:2007/05/17(木) 01:24:41
初心者なんですけど
コンパイルするときに
"cl ファイル名"でやると、
「"cl"は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。」
ってでるんだけど"cl"じゃ駄目なの??
719校正ヌンジャ:2007/05/17(木) 01:28:18
×こうゆう
○こういう
720デフォルトの名無しさん:2007/05/17(木) 01:29:13
>>718
IDEからF9でいいじゃん
わざわざコマンドプロンプトでやる理由が無い。
721デフォルトの名無しさん:2007/05/17(木) 01:31:28
>>720
どういうことですか??
初心者なんで…
722デフォルトの名無しさん:2007/05/17(木) 01:34:12
>>721
Delphiを起動して、目的のプロジェクトを開いて、F9キーを押す。
723デフォルトの名無しさん:2007/05/17(木) 01:36:40
>>722
すみません…
そのDelphiの起動方法を教えてもらえませんか??
724デフォルトの名無しさん:2007/05/17(木) 01:37:49
お前どうやって開発してんだよ
725デフォルトの名無しさん:2007/05/17(木) 01:41:26
ここはDelphiのスレだぞw
おまいの使ってる開発環境/コンパイラのスレに逝けw
726デフォルトの名無しさん:2007/05/17(木) 01:48:50
Delphiのコマンドラインコンパイラはdcc32.exe
72717:2007/05/17(木) 02:21:37
>>707
TreeList.pasのEXHEADは有効になっておりまする

そろそろ手詰まり。。。
728デフォルトの名無しさん:2007/05/17(木) 02:27:25
もうお前が何の話してるかわかんないし、俺みたいな奴はわざわざレス追って状況把握までしてやらないから
そろそろ話をまとめて、ソースでもうpれ
729デフォルトの名無しさん:2007/05/17(木) 07:11:17
>>717
窓ハンドルを持ってない = TWinControlでないコンポーネントは巧くゆかない
それは親になるコントロールが処理しているから
もらった窓ハンドルの上に、パネルを張って処理すればある程度動くだろうけど
でも、メッセージポンプが自前で無いから特定のメッセージが送られて来なかったりするだろう
そのあたり我慢出来る範囲で使うしかない
730712:2007/05/17(木) 09:00:58
>>713-714
レスありがとうございます。
同名別ユニットはありません(プロジェクトだけでなく、フォルダ内も確認済み)。
原因が探れないため、例外的な事象としてブレークポイントを使わずに
デバッグを進めてみます。
731デフォルトの名無しさん:2007/05/17(木) 11:04:40
>>730
ブレークポイント前後のコードここに書けないか?
多分、最適化でコードが削除されてる気がする。
以前はそこでブレークできてても前後のifの条件とか変数の使用の変更とかで削除されることはよくある。
732デフォルトの名無しさん:2007/05/17(木) 11:05:46
・そのformと同名のClassが別ユニットにある
・{$**}みたいなコメント書いたつもりがコンパイラ指令になってるとか{$D- }とか
733デフォルトの名無しさん:2007/05/17(木) 11:31:26
1. そのユニットの先頭行に$$ERRORとか書いて意図的にコンパイルエラーを引き起こして、
本当にそのユニットがコンパイル対象になっているかどうかを確認。

2. 以下のコンパイルスイッチをフォームのinterface直下に直接埋め込んでみる
{$DEBUGINFO ON}
{$LOCALSYMBOLS ON}
{$DEFINITIONINFO ON}

これで駄目ならもうわがんね
734730:2007/05/17(木) 11:42:33
>>731
どの場所にブレークポイントを貼っても効かない(実行時に緑色になる)ので、
最適化の弊害ではないと思います。
ブレークポイントの効くフォームから、そのフォームをShowする直前に
ブレイクポイントを貼り、トレース実行しても同じでした。
ShowModalで開くと、そのフォームをクローズした後に再びステップ実行に
切り替わります。
735デフォルトの名無しさん:2007/05/17(木) 11:44:59
皆さんの丁寧かつ的確なレス、本当にありがとうございます。

>>732
同名のClassは探してみましたが、ありませんでした。
また、コメントのつもりがコンパイラ指示・・・もありません。

>>733
1.
作為的にコンパイルエラーを起こしての確認は行いましたが、
確かにコンパイル対象となっていました。

2.
早速試してみます。
736730:2007/05/17(木) 11:46:51
結果報告です。

>>733
コンパイルスイッチを早速試してみましたが、やはりNGでした。
737デフォルトの名無しさん:2007/05/17(木) 11:47:04
>729
やっぱり色々問題がありそうですね…
レスありがとうございました。
とりあえず教えてもらった方法を試してみます。
738デフォルトの名無しさん:2007/05/17(木) 12:11:53
>>730 そのFormを名前を変えて保存してみな。ダメならソース晒せ。
739730:2007/05/17(木) 12:42:53
>>738
Form名変更後保存も行ってみましたが不可でした。
ソースは当該ユニットだけで70,000行超ですので、ごく一部を晒します。

---------------------------------
 strCap := '現在表示されているページの入力内容がすべて破棄されます。' + #13#10 +
       '本当によろしいですか?';

 if (Application.MessageBox(PChar(strCap) ,
   'クリア確認',
   MB_YESNO + MB_DEFBUTTON2 + MB_ICONWARNING ) = mrYes) then
 begin
  if _PnlP01.Visible Then
  begin
   FV_ClearAllDataOnPanel(_PnlP01);
   FV_CtrlInputArea(Self);
   _FS_Cash();
  end;
---------------------------------
※インデントを見せるために、各行冒頭を全角スペースにリプレイスしています

他のどこでもそうですが、当該ユニット内のどこにブレークポイントを貼っても
不可でした。
740デフォルトの名無しさん:2007/05/17(木) 12:46:44
>ソースは当該ユニットだけで70,000行超ですので、ごく一部を晒します。
ここが激しく臭いな
今の某なら65k以上のソースは扱えませんとか平気でやりそうだし
741デフォルトの名無しさん:2007/05/17(木) 12:49:32
そうだな。 そのサイズならDoc-Viewに別けるべきだろうな
742デフォルトの名無しさん:2007/05/17(木) 12:51:20
>  _FS_Cash();

>  _FS_Cache();
にすれば直りそうな予感w
743739:2007/05/17(木) 14:42:50
>>740-741
そこですかね。
ファイルサイズの小さいユニットはきちんとブレイクするので、
ひょっとしたらそうかもしれません。

>>742
他の人が作ったパッケージのカスタマイズをしているので、
元のソース作った人にスペルミス言っておきますw
それにしてもよくそっち(CashではなくCache)のキャッシュの処理って
分かりましたね。流石。
744デフォルトの名無しさん:2007/05/17(木) 16:26:36
TListViewのvsReportで行の幅ってどうやって変えるんですか?
745デフォルトの名無しさん:2007/05/17(木) 16:30:27
Columns
746デフォルトの名無しさん:2007/05/17(木) 16:38:56
Columnsでどうやればいいんですか?
747デフォルトの名無しさん:2007/05/17(木) 17:33:56
widthプロパティに列の幅をピクセル単位で指定する
748デフォルトの名無しさん:2007/05/17(木) 17:35:27
あ、行の幅か・・勘違いしてた。ゴメン
749デフォルトの名無しさん:2007/05/17(木) 18:47:44
行の幅じゃなくて行の高さならImageListを設定すればいいんじゃないの。
750デフォルトの名無しさん:2007/05/17(木) 19:10:19
初歩的ですが、
2つのクラスのメソッドでお互いのクラスを引数に使います。
ユニットを分けると循環参照になり
同一ユニットに記述すると、未定義の識別子となります。
どうすればいいんでしょう。おねがいします。
751デフォルトの名無しさん:2007/05/17(木) 19:43:27
type
TB = class;

TA = class
procedure foo(b: TB);
end;

TB = class
proceudre bar(a: TA);
end;

こんな感じ
752デフォルトの名無しさん:2007/05/17(木) 20:00:37
>>751
ありがとうございます。それだ!
たった今、過去ログその6(03/09/11)で同様の書き込みを見つけました。
そこでは循環参照になるのは設計が悪いと言われているようなので
もうちょっとログを読んでみようと思います。ありがとうございました。
753デフォルトの名無しさん:2007/05/17(木) 22:01:37
一概に悪いとも言えないけどな。
親が子を所有し、子が何かするとき親の参照辿って情報を盗み見るというのはままあること。
まあ手抜きといえば手抜きなんだが。
754デフォルトの名無しさん:2007/05/17(木) 22:12:49
コンストラクタとかプロパティとかで、自分と同じクラスを参照するような
クラスも面倒だよね、と少し別の話をしてみる。
755デフォルトの名無しさん:2007/05/17(木) 22:37:55
リッチエディットのCaretPosプロパティーでできるのは、表示行・列を取得/設定の
ようですが、物理行・列を取得/設定する方法ってあるのでしょうか?
地道にCRLFを数えるしかないのでしょうか?
756デフォルトの名無しさん:2007/05/17(木) 22:42:37
>>753
悪い
757デフォルトの名無しさん:2007/05/18(金) 16:17:15
>>755
取得はEM_LINEFROMCHARを投げればいいのでは?設定はEM_LINEINDEXを投げて
行頭の文字インデックスから必要な場所へ移動させればいいと思う。
758デフォルトの名無しさん:2007/05/18(金) 16:17:24
MDIのちらつきを出なくするほうを教えてください。

MDIの子フォームを新規で呼び出した時
子フォームはまず、小さいフォームで出現し、
それから親フォームへ向かって拡大しています。

呼び出した時だけ、表示しないようにすればいいと思い、
試したところ、子フォームを隠すことはできないと、delphiにおこられました。

どうすればよいでしょうか? 教えてください。
759デフォルトの名無しさん:2007/05/18(金) 16:51:15
LockWindowUpdate(親フォーム.Handle);
{MDI子フォーム作成}
{MDI子フォーム作成完了}
LockWindowUpdate(0);
760デフォルトの名無しさん:2007/05/18(金) 19:19:54
>>757
あれから少し調べてみたのですが、CaretPosのy座標はどうやらご指摘の
EM_LINEFROMCHARで取得しているとの記述をTRichEditではなくTMemoについ
てですが、下記の質問コーナーで発見しています。実際試してみたところ、やは
り物理行ではなく論理行を取得してました。

ttp://bbs.com.nifty.com/mes/cf_wrentC_list/FDELPHI_B004/wr_type=C/wr_page=2/wr_sq=FDELPHI_B004_0000000060
の63の記事

目的の処理部分についは、755にも書いたTextプロパティーの#10を地道に数え
る上げる方法で実現できているので気楽な質問ではあるんですが、もっと一般
的な方法があれば、後学のために知っておきたいんですよね。
761757:2007/05/18(金) 20:53:15
>>760
あ、物理行か。それは数え上げるしかないな。
762デフォルトの名無しさん:2007/05/18(金) 22:09:13
>>739
CPUViewにプレークポイントを設定してみてはどうかな。
763デフォルトの名無しさん:2007/05/18(金) 23:16:47
>>761
それしかないですか。
改行コードをカウントするだけなんだから、メソッドやプロパティーとして入
れといてもいいと思うんですけどね。>Borland
自作エディタで行番号表示つけるときなんか、モロ必要だろうに。
764デフォルトの名無しさん:2007/05/19(土) 01:40:24
Delphiに連想配列ってないですかね

Hash['Hoge'] := Pointer(FHoge);
FHoge := THoge(Hash['Hoge']);

みたいな
765デフォルトの名無しさん:2007/05/19(土) 02:01:36
TBucketListというものがあるらしい。
が、使ったことはない。
766デフォルトの名無しさん:2007/05/19(土) 02:12:50
>>764
IniFiles..pasにTStringHashがある。
767デフォルトの名無しさん:2007/05/19(土) 02:41:32
>>765
文字列をKeyにできないから私の使いたいのとちと違った

>>766
THashedStringListというのは見つかった

Hash.Values['Hoge'] := IntToStr(Integer(Pointer(FHoge)));
FHoge := THoge(Pointer(StrToInt(Hash.Values['Hoge'])));

こんな感じになったが
文字しか入れられないから激しくキャストしてIntToStrで変換して入れてるけどこんなんで大ジョブかね
768デフォルトの名無しさん:2007/05/19(土) 03:39:32
769デフォルトの名無しさん:2007/05/19(土) 07:07:57
>>767
IndexOfName 使って Objects に入れた方が少し速いよ
連想配列的にやるなら継承しないといけないけどさ
770デフォルトの名無しさん:2007/05/19(土) 08:43:30
Hash.Values['Hoge='] := 'moge';
すると・・・
771デフォルトの名無しさん:2007/05/19(土) 08:47:27
>>770 "=" が入ってるなら、エスケープしないといけないね
772デフォルトの名無しさん:2007/05/19(土) 11:05:27
実数型の変数を独自形式のファイルに保存したいんですけど、
字数型の変数のメモリにあるビット(指数とか底で表されてるもの)を参照するにはどうしたらいいんでしょうか?
773デフォルトの名無しさん:2007/05/19(土) 11:06:22
字数型は実数型の間違いでした。すみません。
774デフォルトの名無しさん:2007/05/19(土) 11:26:32
var dd:double;
var di:int64 absolute dd;
var de:Extended;
var db:array [0..9] of byte absolute de;

のようにすれば、浮動小数点のバイナリイメージを固定小数点型で見る事が出来るけど
たぶん、Frexp  のことじゃないのかなと
775デフォルトの名無しさん:2007/05/19(土) 13:14:39
ListViewでカラムで右クリックメニューを表示しないようにしたいのですがどうすればいいでしょうか?
procedure ListViewContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
if not(ListView.GetItemAt(MousePos.X,MousePos.Y) = nil) then
PopupMenu.Popup(
ListView.ClientToScreen(MousePos).X,
ListView.ClientToScreen(MousePos).Y);
end;
これだとカラムの下のほうも反応してしまいました。
776761:2007/05/19(土) 14:57:15
>>763
改行コードをカウントするのは論理行じゃないの?自作エディタで物理行表示が必要な
場合なんかは、ふつう自分で描画するから付いていないのだと思う(どこでどう改行する
かはプログラム作る人によって違うだろうから)。

ボーランドの前にWindowsのRich Editのラッパーだから、そっちの方に機能がないものは
付けて良いか微妙(標準コントロールと動きが変わってしまうから)。
777デフォルトの名無しさん:2007/05/19(土) 15:28:11
改行コードでカウントするのが物理行だよ
778デフォルトの名無しさん:2007/05/19(土) 16:07:01
>>772
文字列にする
779デフォルトの名無しさん:2007/05/19(土) 16:25:22
>>777
ああ、ダブルで勘違いしていた(RichEditの動作と物理行)。改行コードを数えるよりは、
Linesの文字数を数えてSelStartと比較するほうが楽かも(改行コード分を忘れずに)。
780デフォルトの名無しさん:2007/05/19(土) 16:25:57
>>769
こんな感じですかね?

//入れるとき
Idx := Hash.IndexOf('Hoge');
if Idx = -1 then
begin
 Hash.AddObject('Hoge', TObject(FHoge));
end
else
begin
 Hash.Objects[Idx].Free; //これは好みで
 Hash.Objects[Idx] := TObject(FHoge);
end;

//取り出すとき
Idx := Hash.IndexOf('Hoge');
if Idx = -1 then
begin
 FHoge := nil;
end
else
 FHoge := THoge(Hash.Objects[Idx]);
end;
781デフォルトの名無しさん:2007/05/20(日) 00:04:07
>>779
Lines[i]は物理行ではなく論理行一行の文字列が返ってくるんですよね?
だとすると、ちょとイメージ湧かないんですけど。

例えば、物理行の3行目、論理行では5行目(ただし処理の前に5行目である
ことは分からない)の行頭にキャレットを移動させたい場合、どんな感じのコ
ードになりますか?
782デフォルトの名無しさん:2007/05/20(日) 15:24:15
>>774
absolute指令というのがあったんですね。
バイナリの独自形式なので一番ぴったりの動作をしてくれました。
>>774さん>>778さん、ありがとうございました。
783758:2007/05/20(日) 15:48:32
>>759
ありがとうございます。
でも、タイミングがわからず、ロックするのを確認できたのですが、
小さいフォームの枠までも表示されてロックされていて・・・
子を作ったよりも前にしかけるのか?  ←失敗
子オブジェクト作った直前なのか?  ←失敗
と、お手上げ状態になってしまいました。

MDIの子フォーム作成 → 完了 

この、タイミングをどなたか、教えてください。 
784779:2007/05/20(日) 16:00:59
>>781
うそ、こっちも論理行でしたっけ?じゃあ、物理行での管理はRichEditではやって
いないってことなのかな。とすると、論理行は別に管理しておく必要があるかも。
って凄く面倒くさそう。

でも、改行はちゃんと管理している(サイズ変更をすると改行はちゃんと改行されるし、
改行のないところはちゃんと前の行につながる)みたいなんだけど、取得する方法が
ないのかな。

TextプロパティーでCRLFを数えるか、TStringList.TextにTextプロパティーの値を
読ませて文字数を数えていくしかないのかも。
785デフォルトの名無しさん:2007/05/20(日) 18:08:42
タイトルバー以外でドラッグするソースを色んなところで見つけることが出来るのですが
ソース内の"SC_MOVE or 2"の2がなんなのかいまいち理解できません。
これはなんなのでしょう?
それとReleaseCaptureもコメントアウトしてもいいような気がするのですが
この必要性もいまいち・・・。
なんだか気持ち悪いので、どなたかずばっ!と答えることが出来る方いらっしゃいませんか?

以下、ソース。
procedure TForm1.FormMouseDown(Sender:TObject;Button:TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
     ReleaseCapture; // これって何のため?
     SendMessage(Handle, WM_SYSCOMMAND, SC_MOVE or 2, 0); // 2っているの?
  end;
end;
786デフォルトの名無しさん:2007/05/20(日) 18:21:17
幼女に中出しした後に
チャックを開けたままで街にくり出す
これが非常に不快
だからリリースする
787デフォルトの名無しさん:2007/05/20(日) 18:32:18
>>785
2はHTCAPTION
つまり、タイトルバーでドラッグしてますよ、と騙すためだ
788デフォルトの名無しさん:2007/05/20(日) 19:03:56
>>787
おぉ!なるほど。ありがとう!
ん、でも、何でこんな事する必要があるんだろ?
右クリックしたときに、タイトルバーをクリックした時に出るメニューを出す為かな?
ぬぬ??
789デフォルトの名無しさん:2007/05/20(日) 19:06:00
タイトルバーでドラッグしてる事にしないと、ウィンドウが移動してくれないだろ。
790デフォルトの名無しさん:2007/05/20(日) 19:07:21
こんなおまんこ野郎は相手にしないに限るが
超初心者スレだから仕方が無い
791デフォルトの名無しさん:2007/05/20(日) 19:15:36
>>789
あ、ほんとだ。
コメントアウトして再コンパイルしてみたら挙動が変になるね。
教えてくれてありがと。
792デフォルトの名無しさん:2007/05/20(日) 20:04:02
他のウインドウを監視(Windowの状態、位置、サイズ)したいのですが
どのようにすればよいのでしょうか?
793デフォルトの名無しさん:2007/05/20(日) 20:46:53
>>784
ただ物理行を取得するためだけには大袈裟かもしれませんが、TSynEditという
海外製のコンポを使うという手もありそうです。
少し遊んでみたのですが、これのCaretX、CaretY、CaretXYは物理行・列が返
って来ます。

ただし問題が2つ。
物理行は取れるんですが、PerformでEM_〜を投げても0しか返ってきませんし
Lines[idx]も物理行単位です。つまり論理行が取得できません。(あるかもし
れませんが発見できてません)
そしてもっと大きな問題は、ヘルプ、マニュアル、使用例等の資料がネット上
にあまり見あたらないことです。
まあソース付きなので、時間に余裕がある人ならなんとかなるかもしれません
が。

794デフォルトの名無しさん:2007/05/20(日) 21:05:55
>PerformでEM_〜を投げても0しか返ってきませんし

なにやってるの? カスタムコンポがMSが決めたメッセージを理解する、と
期待するほうが無理だろ。
795デフォルトの名無しさん:2007/05/20(日) 21:09:19
ソース付きなら、むしろどうやって物理行取得してるか調べた方が早くない?
796デフォルトの名無しさん:2007/05/20(日) 21:53:36
zipファイルを解凍しないで中身を見るのって
delphiだとどんな方法があるの?
797デフォルトの名無しさん:2007/05/20(日) 22:03:57
素直にうんじp
798デフォルトの名無しさん:2007/05/20(日) 22:12:45
>>797
↓ひの表だとUNZIP32.DLLに一覧取得が無さそうだけど…
http://www.geocities.jp/norg1964/cmarc/
799デフォルトの名無しさん:2007/05/20(日) 22:12:45
>>796
ヘッダの構造調べて適当に
http://www.wotsit.org/list.asp?fc=4
800デフォルトの名無しさん:2007/05/20(日) 23:48:09
>>799
面倒だなー
コンポ無いかな
801デフォルトの名無しさん:2007/05/21(月) 00:02:23
>>800
だから798のコンポーネントでいいんじゃないの?
798の表は古いけど最新版ではちゃんと一覧取得可能になってるよ
802デフォルトの名無しさん:2007/05/21(月) 00:23:07
>>801
ほう、試してみるよ
803momo:2007/05/21(月) 01:04:02
お願いします。
datetimepickerの日付の初期化の仕方を教えてください。
804デフォルトの名無しさん:2007/05/21(月) 01:19:23
初期化というのが何を指してるのかは知らんがDateTimeプロパティに好きな値入れればいいんじゃないの?
805デフォルトの名無しさん:2007/05/21(月) 08:12:04
StringToWideCharの使い方がわかりません。
↓引数とすべきstringの他にDestとかDestSizeとかがありまして…

function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;

仮に内容が'0'のstringをこの関数でWideCharにする場合、どのように書けばいいんでしょう?
806デフォルトの名無しさん:2007/05/21(月) 08:27:11
>>805
var buf:array [0..100] of WideChar;
StringToWideChar( '0' , @buf[0] , length(buf) );

普通は使わない。 WideString の変数に代入するだけで変換されるから、そっちを使う
807デフォルトの名無しさん:2007/05/21(月) 08:41:47
>>806
ありがとうございます。
実は文字列と配列の関係をWideStringで実験中なんですが、WideString[hoge]に'0'を入れてみようとして行き詰っていたのです…

いまいじっててまた悩んでいるのですが、逆にWideCharToStringの場合の引数が(Source: PWideChar): string;と、ポインタになっているので^WCharaのようなものを入れてみたんですが、うまく行きません…
多分、ぼくがポインタってものをよく理解してないからだと思うんですが、こういう場合はどのような引数の形にして入れるんでしょうか?
808デフォルトの名無しさん:2007/05/21(月) 08:45:17
>WideString[hoge]に'0'
var ws : WideString;

setlength(ws,hoge);
ws[ hoge ] := '0';

ってこと?
809デフォルトの名無しさん:2007/05/21(月) 08:50:06
>>808

いえ、str1: string;
str1 := '0';
ws[ hoge ] := str1;

みたいに、とりあえず、1バイト文字を思ったところに入れてやろうと、
そうしたらWideCharとstringは型が違います、と怒られて…
str1をWideCharの変数に入れてやろうと思ったわけです。
810デフォルトの名無しさん:2007/05/21(月) 08:57:45
それは 
ws:='xxxxxxxxxx';
p:=PWideChar(ws);
inc(p,hoge);
StringToWideChar( '0' , p, 2 );

のようにするって事? でも、コレだと 1#0 と#0が付いてしまうからうまくゆかない
素直に
for i:=0 to length(str1)-1 do ws[ hoge +i ] := str1[ i+1 ];
とやるべきでしょ
文字列のサイズは指定忘れないようにね
811デフォルトの名無しさん:2007/05/21(月) 09:00:31
>>810

うーん、そのようになりますか…
ま、素人にはポインタで、ってよりそのやり方のほうがわかりやすいかもしれません。

ありがとうございます。
大変参考になりました。
812デフォルトの名無しさん:2007/05/21(月) 14:01:48
>>803
すいません。
プロパティの書き方がわかりません。
おしえてください。
813デフォルトの名無しさん:2007/05/21(月) 14:06:09
>>803
ひょっとして、NULLにしたいっていうこと?
(日付が何も入ってない状態にしたい、という意味)
だとしたら出来ません。
創意工夫して、NULLっぽく見せるように自分で考えてください。
814デフォルトの名無しさん:2007/05/21(月) 14:12:22
Delphi6Proのアップデートパッチってもう入手負荷なの?
URLが消えてる・・・
815デフォルトの名無しさん:2007/05/21(月) 14:23:04
816デフォルトの名無しさん:2007/05/21(月) 14:31:33
ありがと。
このIPって某のもの?
DelWiki直しておこうかと思うんだけど載せちゃっていいものなのかね。
817815:2007/05/21(月) 14:41:23
>>816
一応IPはBorlandのものだったよ。
------------------------
inetnum: 202.33.253.0 - 202.33.253.255
netname: BORLAND-JP
descr: Borland Co., Ltd.
country: JP
------------------------
載せていいかどうかは分からない。
っていうかアップデータ自体、ぐぐればすぐ出てきたよ?
818デフォルトの名無しさん:2007/05/21(月) 15:43:35
CODEGEARのサイトにあるじゃない。
ttp://www.codegear.com/jp/downloads/regusers/delphi
819デフォルトの名無しさん:2007/05/21(月) 16:54:31
>>803
いえ日付を2年前にしたいだけなんです。
820デフォルトの名無しさん:2007/05/21(月) 17:01:12
>>819
DateTimePicker1.Date := DateTimePicker1.Date - (365 * 2)
ただしうるう年が入ると1日ズレます。

それが嫌なら、 DecodeDate と StrToDate をうまく使ってください。
http://www.wwlnk.com/boheme/delphi/vbtodel/daf0630.html
http://www.wwlnk.com/boheme/delphi/vbtodel/daf0090.html
あとは自分で考えましょう。
821デフォルトの名無しさん:2007/05/21(月) 17:15:12
久しぶりにくだすれらしい質問だ
822デフォルトの名無しさん:2007/05/21(月) 18:18:03
ftpサイトもまだ死んではいないようだ。必要な人は今のうちにダウンロードしといたほうがいいかも。
823デフォルトの名無しさん:2007/05/21(月) 19:26:09
>>794
試しもしないことを責めるんならまだしも、試して文句言われるんでは納得い
かないんですが。

>>795
自分が初心者でなければどこに書いてあるのか見当がすぐにつくのかもしれま
せんが、とにかくコード量が膨大なので追い切れてません。
なので、暇な時にやりたいと思ってます。




論理行が取得できないと>>793で書きましたが、その後の調査で、DisplayX、
DisplayY、 DisplayXYで取得できるようです。
まあこんなことは、TSynEditに興味がない人にはどうでもいい情報でしょうが、
2chは検索に結構引っ掛かるのでネット上に残しておくために書いておきます。
824デフォルトの名無しさん:2007/05/21(月) 20:03:38
>>823
TEditor は「EM_ 系の一部のメッセージに対応」してるよ。
期待してもおかしくないんでない?
825デフォルトの名無しさん:2007/05/21(月) 20:29:26
指定した窓を監視したいのですが
スレッドを作成してGetWindowInfoで指定の窓を見張るやり方でよいのでしょうか?
それとも他に何か良い方法がありますか?
826デフォルトの名無しさん:2007/05/21(月) 20:40:11
GetWindowInfoでまにあうなら、それでいいんじゃないの?
グローバルフックでメッセージを横取りするほどの事じゃないと思う
827デフォルトの名無しさん:2007/05/21(月) 20:51:51
>>826
ありがとう。
早速実装にとりかかります。
そういえばフックってdllが必要なんですよね?
昔、単一Unitでフックしてたのをどこかでみかけたけどどこだったんだろ?
Halbowさんとこだと思ったけど、みつかんないなぁ・・・。
828デフォルトの名無しさん:2007/05/21(月) 22:56:20
ADOでデータベースにアクセスするOLEオートメーションサーバーを作りたいのですが、
オートメーションインタフェースのメソッドの引数や戻り値としてADOのRecordsetを使えるんでしょうか。

たとえばExcelからDelphiで作ったOLEサーバーにSQLを渡して、Recordsetを返してもらうといった使い方をしたいのですが・・・。

タイプライブラリエディタの型のリストには該当するものがないので、使いないんですかね
829デフォルトの名無しさん:2007/05/21(月) 23:49:16
>827
XRAYさんのところは?
830デフォルトの名無しさん:2007/05/21(月) 23:53:10
831デフォルトの名無しさん:2007/05/22(火) 01:15:43
Delphi6のProってまだ売ってましたっけ?
832デフォルトの名無しさん:2007/05/22(火) 03:51:37
TURBOのコンポ追加できたバージョンのインストーラ
まだお持ちの方譲って頂けませんか。
TServerSocketが使えないので。
833デフォルトの名無しさん:2007/05/22(火) 04:19:48
SkypeはDelphiで作られています。
Delphiは決して日曜プログラマーのための玩具ではないのです。
834デフォルトの名無しさん:2007/05/22(火) 05:35:34
いまは日曜プログラマにも相手にされてないけどな。↑これって、自らおもちゃだと認めてるところがすごい。

こわれたオモチャだけどな。

835デフォルトの名無しさん:2007/05/22(火) 09:43:46
>>819
質問に答えてもらったら、お礼を言いましょう。
ネットマナーの基本です。
836デフォルトの名無しさん:2007/05/22(火) 09:48:01
837デフォルトの名無しさん:2007/05/22(火) 10:22:21
別プロセスのWindowのフォント(サイズ)を変更したいのですが
WM_SETFONT使ってみたのですが変更できませんでした
Windowやコントロールのサイズは変更できるのですが

環境は、WindowsXP + Delphi6です
838デフォルトの名無しさん:2007/05/22(火) 11:07:44
WM_SETFONT は自前の窓だと対応してない方が多いと思うよ
839デフォルトの名無しさん:2007/05/22(火) 11:53:06
>>838
ありがとうございます
NT系は、別プロセスにWM_SETFONTを使ってもだめなような書き込みを見つけましたので
たぶん無理みたいですね

Delphiの話題からそれてますが、別な方法あればお願いします。
840デフォルトの名無しさん:2007/05/22(火) 11:56:31
BDS2006にタスクバーみたいな動きをするパネルってありますか?
841840:2007/05/22(火) 11:57:23
すみません、タスクバーを自動的に閉じる設定をしたときの動きです。
842デフォルトの名無しさん:2007/05/22(火) 11:59:42
WM_SETFONT はハンドルを渡すから、単に別プロセスから送ってもダメなわけで、
グローバルフックでもして、一度そのプロセスでハンドルを作ってから送りなおしてるんだろ?
843デフォルトの名無しさん:2007/05/22(火) 12:55:20
グローバルフックしておいて
TFONT をシリアライズしてATMを作り独自のメッセージIDでメッセージを送って
そのメッセージをフックしたら、フォントを作ってWM_SETFONTを投げなおす
という事か?
844番組の途中ですが名無しです:2007/05/22(火) 15:54:09
delphi6のFormatDateTimeで、
元号を(M,T,S,H)で表示する方法無いですか?
この関数じゃなくてもいいですけど
845デフォルトの名無しさん:2007/05/22(火) 16:41:32
>>844
g
846デフォルトの名無しさん:2007/05/22(火) 16:48:23
>>844
Delphi標準ではないように思う。
gやggで「平成」とか取得してそれを「H」に置換する関数自作したらどうだろう?
847番組の途中ですが名無しです:2007/05/22(火) 17:16:08
>>845
古いバージョンならそれでokなんだけど6だと「平」になるんだ
>>846
美しくないけどそうするw
848デフォルトの名無しさん:2007/05/22(火) 19:19:31
メタファイルでプレビューを描画していますが、TMetafile の Height を
ディスプレーの高さ以上にすると、高さを超える部分の描画ができないと
いいますか不完全に表示されてしまいます。何が原因なのでしょうか。
(Delphi6 Personal と WindowsXpです)
849デフォルトの名無しさん:2007/05/22(火) 19:34:51
>>848
>>何が原因なのでしょうか。
>TMetafile の Height をディスプレーの高さ以上にする
素直にここじゃね?
850デフォルトの名無しさん:2007/05/22(火) 19:59:59
う、メタファイル描画後に TImageのCanvas に縮小して画面には収まるように
表示しています、と言う説明が抜けてました。
851デフォルトの名無しさん:2007/05/22(火) 20:42:15
TImageのBitmapのサイズはどうなってるの?
というかPictureプロパティに代入するだけじゃダメ?
852デフォルトの名無しさん:2007/05/22(火) 20:45:53
>>824
ですよね。
853デフォルトの名無しさん:2007/05/22(火) 21:14:27
TEditor と SynEdit は無関係。Windows のエディットコントロールと違って
ソースがあるなら、わざわざ試さなくたってグレップすれば一瞬でわかるわな。
854758:2007/05/22(火) 21:51:02
テキストファイルを開くとき、EUCとかだと文字化けするんですが、
Delphi6ではどうすれば、文字化けせずに出力しますか? 
855デフォルトの名無しさん:2007/05/22(火) 21:56:38
JConvert.pasを使って変換するとか。
856758:2007/05/22(火) 22:07:30
>>855
ありがとうございます。
ダウンロードできましたので試してみます。
857デフォルトの名無しさん:2007/05/23(水) 11:06:27
DelphiについているParadoxというデータベースは「2Gまでしか入らない」という噂を聞きました。
この場合の2Gというのは、一つの.dbで2Gということなんでしょうか、Appendする一つのレコードは2Gまでじゃないといけない(Blobみたいな巨大なデータとか)ということなんでしょうか?

InterBase(FireBird?)ならこの最大値はいくらくらいあるんでしょうか?
858デフォルトの名無しさん:2007/05/23(水) 11:25:55
2ギガというのは 2^31 = 2147483648 という事で 符号付32bit整数の最大値に制限されるという事
ようするにあらゆる部分で32bit整数を使ってるんだと思うよ。
859デフォルトの名無しさん:2007/05/23(水) 11:31:14
>>858
ということは一つの.dbで2Gということですか?
画像とか溜めたらあっというまですね…
860デフォルトの名無しさん:2007/05/23(水) 12:35:03
Delphi製アプリのListViewって
Vistaだとクリックで音が鳴りませんか?
861デフォルトの名無しさん:2007/05/23(水) 23:13:27
datetimepickerで日付を常に今日にする方法を教えてください。
862デフォルトの名無しさん:2007/05/23(水) 23:20:04
それって体験版を永遠に使えますね
863デフォルトの名無しさん:2007/05/24(木) 01:47:39
日経ソフトウェアのDelphi風林火山
せっかく面白くなってきたのに
来月号で最終回とな。
残念なり。
864デフォルトの名無しさん:2007/05/24(木) 02:52:25
>>863
やはり半年で終了か。予想通り。
となると、VBパラダイスも終わりかな?
時間があれば今までのVBパラダイス(俺はC#で打ち込んでるけど)のプログラムも
Delphiに書き換えようと思っている。
865デフォルトの名無しさん:2007/05/24(木) 04:17:46
「Delphi風前の灯火」とか始まるかもな・・・
866デフォルトの名無しさん:2007/05/24(木) 09:10:03
>>861
DateTimePicker1.Date := Date;
867デフォルトの名無しさん:2007/05/24(木) 10:42:44
教えて下さい。 Turbo Delphiではタイプライブラリの取り込みも 出来ないのでしょうか?
868デフォルトの名無しさん:2007/05/24(木) 12:59:35
>>866
ありがとうございます。
869デフォルトの名無しさん:2007/05/24(木) 21:58:58
>>867
作成は出来る
インスコは出来ない
870デフォルトの名無しさん:2007/05/24(木) 22:00:13
って無料版の話ね
871デフォルトの名無しさん:2007/05/24(木) 22:06:10
VistaってTOSVersionInfoExのdwMajorVersionは"6"?
それともdwMajorVersionは"5"でdwMinorVersionが"3"以上だっけ?
872デフォルトの名無しさん:2007/05/24(木) 22:07:49
>>871
dwMajorVersionは6。
873デフォルトの名無しさん:2007/05/25(金) 12:29:49
集合型の中身を知りたいときにはどうするの?

var
a: set of Byte;
begin

a := {1,3,5};

このaの1番目、2番目に何が入っているか知りたい
 つまりデータ作ったあとの逆引き
なんかincludeで「5が含まれるかどうか」しかわからないらしく・・・

874デフォルトの名無しさん:2007/05/25(金) 13:29:02
順に調べるしかないでしょ
var
 a: set of Byte;
  i:Byte;
begin
 allocConsole;
 a := [1,3,5];
  for i:=low(i) to High(i) do
  if i in a then
  Writeln(i);
875デフォルトの名無しさん:2007/05/25(金) 15:01:20
for i in a do
 WriteLn(i);
876デフォルトの名無しさん:2007/05/25(金) 17:11:59
>>873
配列を使った方が良いかも。どうしても集合型でなければだめなら>>874しかない。
877デフォルトの名無しさん:2007/05/25(金) 18:45:42
まぁ、そもそも集合の要素に順番なんてないわけだが・・
878デフォルトの名無しさん:2007/05/25(金) 19:13:19
まぁ

for i:=low(i) to High(i) do

こんなのが動くわけないわけだが
879デフォルトの名無しさん:2007/05/25(金) 19:19:09
>>878
Byteだから別にそれくらいの負荷問題じゃないだろ
高速化したいならByteじゃなくて 範囲をもっと狭くするか
ビットを直接処理するか
880デフォルトの名無しさん:2007/05/25(金) 19:26:39
>>879
どうでもいいが、彼は君の揚げ足取ってるだけだと思うよ。
for i:=low(Byte) to High(Byte) do
881デフォルトの名無しさん:2007/05/25(金) 19:30:16
? どこか問題が?
882デフォルトの名無しさん:2007/05/25(金) 19:35:15
>>874 の定義の部分を

type THoge=1..5;
var
a: set of THoge;
i:THoge;

としておけば、   for i:=low(i) to High(i) do は 1〜5になる
Byteだと for i:=low(i) to High(i) do は0〜255だから無駄って事
883デフォルトの名無しさん:2007/05/25(金) 19:35:15
ネチネチ百済ねー事やってんな・・・
i: byte;のとき
low(i) = low(byte) = 0
high(i) = high(byte) = 255
884デフォルトの名無しさん:2007/05/25(金) 19:41:15
(i)←おまえらわざとやってんだろwww
885デフォルトの名無しさん:2007/05/25(金) 19:46:17

integer や Int64 だったらどうするのだろう?

886デフォルトの名無しさん:2007/05/25(金) 19:50:20
何十万行もあるテキストファイルをマッハで処理したいんですがどうすればいいのでしょうか?
今はStringListに読み込んで一行ずつ検査(Posで指定文字列の検索)しているのですが遅すぎて困っています。
分散処理なんかも視野にいれるべきなのでしょうか?
アドバイスお願いします。
887デフォルトの名無しさん:2007/05/25(金) 19:50:23
unsigned __int64って、Delphiだとどう書くの?
888デフォルトの名無しさん:2007/05/25(金) 20:12:27
>>884
俺もそう思ったんだけどね、(i)で問題ないよ。
889デフォルトの名無しさん:2007/05/25(金) 20:13:59
>>886
var f: text;

AssignFile(f, 'foo.txt');
Reset(f);
while not Eof(f) do readln(f, s);
とかやって一行ずつ処理。
StringListは無駄が多すぎるのでテキストのサイズが大きいときには使い物にならない。
890デフォルトの名無しさん:2007/05/25(金) 20:18:49
byte で50倍の無駄。integer だったら果てしなく無駄なコードが問題ないわけないだろ・・・
     ∧_∧
    ( ´・ω・`)     ∧_∧
    /     \   (´∀` ) ハハハ
.__| |    .| |_ /      ヽ
||\  ̄ ̄ ̄ ̄   / .|   | |
||\..∧_∧    (⌒\|__./ ./
||.  (    )     ~\_____ノ|   ∧_∧
  /   ヽアホか       \|   ( ´_ゝ`) 何言ってんだコイツ?
  |     ヽ           \/     ヽ.
  |    |ヽ、二⌒)        / .|   | |
  .|    ヽ \∧_∧    (⌒\|__./ /
892デフォルトの名無しさん:2007/05/25(金) 20:27:22
>まぁ
>for i:=low(i) to High(i) do
>こんなのが動くわけないわけだが
はじめは、「動くわけない」と動く・動かないを問題にしてたのに、
動くことがわかったので、誰かさんはこっそりと速度の問題にすりかえてるよ。
893886:2007/05/25(金) 20:31:54
>>889
ありがとうございます。試してみます。


速くするならWinAPIだろ!と思ってReadFileでバッファに入ってきたデータをstrpasして中身見てみたら改行コードをどう処理すればいいのかわからなくて挫折。むずい。
894デフォルトの名無しさん:2007/05/25(金) 20:48:26
遅すぎるってどれくらい時間かかってんの?
ファイルを読む部分なのか、Posで検索する部分なのか
ボトルネックを調べたら??
895デフォルトの名無しさん:2007/05/25(金) 21:00:37
stringlistの無駄の多さがボトルネックと上に書いてある
896デフォルトの名無しさん:2007/05/25(金) 21:16:36
>>893
メモリ(string)に全部読んで
http://delwiki.info/?%A5%B3%A1%BC%A5%C9%C1%D2%B8%CB%2FUnicode%C2%D0%B1%FE%B0%C6%A4%BD%A4%CE%A3%B1
function LoadFromFileToStr(fname:WideString):string;
 var hin:THandle;
 var rsize:DWORD;
begin
 result:='';
 hin:=CreateFileW(PWideChar(fname),GENERIC_READ,0,nil,OPEN_EXISTING ,FILE_ATTRIBUTE_NORMAL,0);
 if hin<>0 then try
  SetLength(Result, GetFileSize(hin, nil));
  ReadFile(hin,PChar(Result)^,Length(Result),rsize , nil);
  finally CloseHandle(hin);
  end
end;
あとは1文字づつ見ていけばいいんだよ。
Delphiはネイテブコンパイラだから、1文字づつ見るコードが一番速い
897デフォルトの名無しさん:2007/05/25(金) 21:51:03
文字列検索で一文字づつ見るとかだるい
898デフォルトの名無しさん:2007/05/25(金) 22:07:16
だるくても、一度そういう手続きを作っておけば、次からは楽なんだからガンバレよ
899デフォルトの名無しさん:2007/05/25(金) 22:17:08
>>896
> メモリ(string)に全部読んで
ええー10万行を超えるテキストファイルをー?
もしかしたら数100MBあるかもしれないのにー?
900デフォルトの名無しさん:2007/05/25(金) 22:31:15
1行が平均千文字近くあるの?
901デフォルトの名無しさん:2007/05/25(金) 22:37:49
> 速くするならWinAPIだろ!と思って

基本的にAPIは遅いよ
中の人が便利に色んな事してくれてるから

つーか、10万行とか数100MBとかSQLiteかなんか使った方が。。。
902デフォルトの名無しさん:2007/05/25(金) 22:40:24
相変わらずわけのわからないがんばり方だなぁ
903デフォルトの名無しさん:2007/05/25(金) 22:55:54
>>899 そんなに大きかったの? なら
CreateFileして、
CreateFileMapping でメモリに割り付けて、
後はポインタで1文字づつ処理すればいいでしょ

>>901 
最初からデータ形式を自前で設計できるならともかく
与えられたテキストファイルを読みたいのが目的なんだから、ソレは目的を外れているだろ。
904デフォルトの名無しさん:2007/05/25(金) 22:58:15
10万行とか何をするんだろうな
ヘッダファイルの検索・置換だろうか?
905デフォルトの名無しさん:2007/05/25(金) 23:02:42
質問した当の本人はどっかいってしまったから第3者でにぎわってもしょうがない
906886:2007/05/25(金) 23:11:57
>>896
そのResultを一文字ずつ判定って概念はわかるのですが
具体的にどういったコードを書けばいいのか見当も付かないです。
copyで切ったりするの?
>>900
一行は多くても100byteくらいですが行数だけが半端なく多いのです。
>>903
メモリとかポインタとかよくわかんないので、勉強してきます。
>>905
紅の豚見てた。

なんだか速度を追求すると相応の技術が要求されるようでみんな何の話してるかわかんなくなってきた。
907デフォルトの名無しさん:2007/05/25(金) 23:26:20
>>906
やりたい事は具体的にどういう事なの? 検索するだけ? 検索してカウント? それとも置換?
908886:2007/05/25(金) 23:30:31
>>907
一行ずつ検索してカウントです。
元のデータには変更を行いません。
909デフォルトの名無しさん:2007/05/25(金) 23:31:34
>>885 集合型を作れる基本型の要素は最大256個までだから、そういう心配は杞憂
910デフォルトの名無しさん:2007/05/25(金) 23:38:04
>>908
全部メモリに読み込んで、探したい文字列の最初の一文字があるところ探して
そっから文字列比較とかしてみ
911デフォルトの名無しさん:2007/05/25(金) 23:40:20
>>908
その1行づつ検索する理由は何?
たとえばその出現した行番号を表示したいとか?

もし、
単に個数をカウントするだけなら、検索文字の先頭文字を見つけては、
その部分をcopyして比較するといい。 
もちろん、さらに高速にする方法は色々あるけど、

for i:=1 to length(str) do if str[i] = c then
if copy(str , i , length(dst)-1) = dst then

行番号をカウントしないといけないなら、 LF=#10 の個数も数えるといい
for i:=1 to length(str) do 
if str[i] = #10 then inc(lineNo)
else if str[i] = c then if copy(str , i , length(dst)-1) = dst then
912デフォルトの名無しさん:2007/05/25(金) 23:48:23
さらに効率を上げるなら
KMP法(KnuthMorris Pratt) BM法(Boyer Moore)
でgoogle検索をどうぞ
913886:2007/05/25(金) 23:54:27
>>910
今後も役に立ちそうだからメモリやらポインタについて調べてみます。
できれば直接参照して検索した方が速いんでしょうね。
>>911
一行ずつ検索する理由は、基本的には読んだファイルの中に任意の指定文字列がいくつあるのか数えたいからです。
stringって一文字ずつバラして取り出すことができるんですね。勉強になりました。
>>912
ありがとうございます。ぐぐってみます。
914デフォルトの名無しさん:2007/05/26(土) 00:38:48
100MBぐらいメモリにつっこめよと思うのだが・・・。
こういう考えはプログラマ失格かね?
915デフォルトの名無しさん:2007/05/26(土) 00:52:57
今時のPCなら問題なし
916デフォルトの名無しさん:2007/05/26(土) 00:53:14
Delphiでデバイスドライバは作れますか?
917デフォルトの名無しさん:2007/05/26(土) 01:12:28
>>916
作れるかといわれれば、作れるよ
面倒くさいから、誰もやらんが
918デフォルトの名無しさん:2007/05/26(土) 03:34:09
単独ではつくれないだろ。
919デフォルトの名無しさん:2007/05/26(土) 03:35:33
DelphiでVC++相当をつくって、それで作ればいいから、つくれるっていやぁ作れる。
920デフォルトの名無しさん:2007/05/26(土) 07:44:15
http://www.grahamwideman.com/gw/tech/Delphi/iopm/index.htm
ようするに、単純には出来ない。 それはリンカが対応してくれてない
というかDelphiにはリンカがそもそも無いから。
でも、外部に汎用アダプタを置いて、そこからコールバックさえさせれば何でも書ける。
その汎用アダプタの部分もパスカルコードで吐き出す事は可能だ。
921デフォルトの名無しさん:2007/05/26(土) 11:30:22
delphi2008って出るのかな?
Vista対策にいーかげん買い換えたくなってきた。
922デフォルトの名無しさん:2007/05/26(土) 12:48:41
Delphi7使ってるんですが
同じ構造体の代入は出来るんですが
比較演算子で「互換性の無い型です」と怒られるます。
出来ないんでしょうか?
923デフォルトの名無しさん:2007/05/26(土) 13:01:34
できないよ。
フィールドに文字列やオブジェクトとかぶら下がってることもあるから機械的な比較は不可能。
あえてやりたいならCompareMem。
924デフォルトの名無しさん:2007/05/26(土) 13:16:45
構造体の比較は2006以降でないと無理。
925デフォルトの名無しさん:2007/05/26(土) 13:31:31
(´・ω・`)ショボーン
ありがとやんした。
926初心者:2007/05/26(土) 14:24:04
TStringGridについて質問です。
一覧性を高めるために、デフォルトのセルの高さを11に設定してフォントのサイズを8に(これ以上小さいと字がくずれてしまう)設定しているのですが、
文字を入力するときに小さい入力ボックスのようなものが出て直で入力ができません。

これは防ぎようがないことなんでしょうか?

WinXP HOME
Delphi 5J です。お願いします。
927デフォルトの名無しさん:2007/05/26(土) 14:50:39
>文字を入力するときに小さい入力ボックス
は自前で出してるんだろ? だったら、大きくしたらいいんじゃないの?
928デフォルトの名無しさん:2007/05/26(土) 14:57:27
>>926
StringGridの入力使わずに、入力するタイミングでGridの上にTEdit貼り付けるといいよ
929デフォルトの名無しさん:2007/05/26(土) 19:24:02
半ば諦め気味の質問なんですが・・

Delphi6personalからTurboDelphiに移行したんですが
XPManを適用したところ、
InputQueryのフォームのサイズが変わってしまいました。

これはどうしようもないですか?
930デフォルトの名無しさん:2007/05/26(土) 21:28:19
var
a: set of byte;

a := [1,3,5];

 はできるのに、

a: Array [0 .. 2] of byte;

a := [1,3,5];

 と書けないのはなぜ・・・ 配列を一気に定義したいのに
931デフォルトの名無しさん:2007/05/26(土) 22:49:13
オープン配列ならそうかけるので、
オープン配列の引数を使えばどう?
932デフォルトの名無しさん:2007/05/26(土) 22:51:52
オープンハイレェェェェェツッ!
チェーーーンジ!ゲッターbyte!
スイッチッ!オンッ!
933デフォルトの名無しさん:2007/05/26(土) 22:52:35
キー入力を同期させたいのですがどのようにすればよいのでしょうか?
例えば現在自分のForm内のEdit1にフォーカスがあったとして、
そのEdit1内でのキー入力を別の窓のEdit(ハンドルは取得済み)と同期(入力)させたいのです。

詳しい方、どうぞよろしくお願いします。
934デフォルトの名無しさん:2007/05/26(土) 23:00:16
自分のエディットが変更された時のイベントで
エディットの文字列を取得
SetWindowTextで別窓のエディットに
935デフォルトの名無しさん:2007/05/26(土) 23:02:30
>>934
回答ありがとう。
出来ればEdit内だけでなくGridやその他のコントロールでも同期させてみたいです。
そこでキー入力自体をキャッチしたいのですが、どのようなメッセージをキャッチすればよいのでしょうか?
936デフォルトの名無しさん:2007/05/26(土) 23:27:48
WM_KEYDOWN / WM_CHAR だろ
937デフォルトの名無しさん:2007/05/26(土) 23:28:26
>>936
サンクス。
938デフォルトの名無しさん:2007/05/27(日) 22:09:05
ヒントを任意のタイミングで表示したり、消したりしたいのですが
どのようにすればよいのでしょうか?

THintInfoあたりを弄ってみても、少し待たないとヒントが表示されず困ってます・・・。
939デフォルトの名無しさん:2007/05/28(月) 00:15:39
コンポーネントの名前(Nameプロパティ)を変数で指定する方法はありますか?
たとえばEdit1,Edit2...とあってXが2ならばEdit2に表示するといったことがしたいのですが。
940デフォルトの名無しさん:2007/05/28(月) 00:18:00
findcomponent
941デフォルトの名無しさん:2007/05/28(月) 00:29:29
現状で楽してネイティブ作れるのってこれだけか
C+WIN32APIは糞面倒臭いにも程がある
942デフォルトの名無しさん:2007/05/28(月) 07:50:01
c++builder
943デフォルトの名無しさん:2007/05/28(月) 08:17:55
>>938
Application変数にある Hint に ''ShortHint | LongHint' で入ってる
ヒントには短いヒントと 長いヒントがある。 | で区切れば、区別出来る。

ロングヒントは、
Application.OnHintを使うと StatusBar.AutoHintがTrueでもロングヒントが表示されない
自前でGetLongHint して表示しないといけない。

ShortHintは
HintPause/HintHidePause/HintShortPause とHintColor/HintShortCuts で調整

ショートヒントをマニュアルで出すには
GetCursorPos(P);
Application.ActivateHint(P);

ショートヒントをマニュアルで消すには
Application.CancelHint
944デフォルトの名無しさん:2007/05/28(月) 08:37:40
945デフォルトの名無しさん:2007/05/28(月) 09:28:55
>>943
お〜、丁寧に有難うございます!!
946デフォルトの名無しさん:2007/05/28(月) 18:57:01
VirtualTreeを使ってるんだけどどんな風に"使用してます"ってかけばいいのかな?

バージョン情報のウインドウなんかに
VirtualTree配布もとのリンクを貼ればOKなのだろうか・・・?

この手のライセンスのコンポを使用している有志、ご意見を聞かせてもらえないでしょうか?
947デフォルトの名無しさん:2007/05/28(月) 21:22:45
VirtualTreeの配布元のページにVirtualTreeが使われてるソフトがギャラリーみたいく
並んでいなかったけ?それらのソフト参考にすれば??
俺はバージョン情報のダイアログにのっけてる。
948デフォルトの名無しさん:2007/05/28(月) 22:32:09
>>940
>>944
thx
949デフォルトの名無しさん:2007/05/28(月) 22:55:11
41個の整数を要素とする母集団があり、
その中から任意の2〜40個、及び41個の要素の和を総当りで調べる
プログラムを作ってみたんだけれど、(Del6Per)

四半世紀ほど年齢が上の上司がJIS-BASICで作ったモノに
実行速度で負けたのはショックだった orz
950デフォルトの名無しさん:2007/05/28(月) 22:56:20
で?
951デフォルトの名無しさん:2007/05/28(月) 23:14:00
Delユーザにはそんなレベルのが多いよね
952デフォルトの名無しさん:2007/05/28(月) 23:16:50
そこでインラインアセンブラ
953デフォルトの名無しさん:2007/05/28(月) 23:36:12
2個の場合は、最初は1〜40の中から1つ選ぶんだ N[0] とするよ
次は N[0]〜41 の中から選ぶんだ

3個の場合は 最初は1〜39
次はN[0] 〜30
最後は N[1] 〜31だ
954デフォルトの名無しさん:2007/05/28(月) 23:40:38
アルゴリズムの坂
955デフォルトの名無しさん:2007/05/29(火) 02:08:57
レコード型にメソッドを付けられるようになったのはいつからでしょうか?
956デフォルトの名無しさん:2007/05/29(火) 02:15:37
TurboPascal5.5からじゃなかったかな
957デフォルトの名無しさん:2007/05/29(火) 08:02:55
2006からだね。object型なら昔からできたけど。
958デフォルトの名無しさん:2007/05/29(火) 22:27:18
>>949
ちょい前にも出てたけどアルゴ方面へ逝け。

ただし、だ。配列使いまくりで演算させていたならその結果は当たり前。
Delphiの伝統として、配列の使用はタブーだろw

959デフォルトの名無しさん:2007/05/29(火) 23:54:44
>Delphiの伝統として、配列の使用はタブーだろw

いみふめ
960デフォルトの名無しさん:2007/05/30(水) 07:44:50
配列の使用はタブーのコンパイラ・・・糞ですな
961デフォルトの名無しさん:2007/05/30(水) 07:59:56
How many files (0−15)?
962デフォルトの名無しさん:2007/05/30(水) 08:19:04
動的配列の導入以後は全く事情が違うさ。
963デフォルトの名無しさん:2007/05/30(水) 08:45:34
配列使わず何を使うんだ?
964デフォルトの名無しさん:2007/05/30(水) 08:56:55
AllocMemでメモリ確保してポインタで舐めてたんだろ
965デフォルトの名無しさん:2007/05/30(水) 09:46:04
チューニングパラノイアが初心者スレ引っ掻き回すのはやめてもらいたいなぁ
966デフォルトの名無しさん:2007/05/30(水) 10:00:02
動的配列の追加はよかったよな。 今では動的配列無しに書けない体になっちゃった。
967デフォルトの名無しさん:2007/05/30(水) 10:49:31
Stringもそうだけど配列もクラスとして記述できるくらいのパワーが言語に欲しかったな。
Stringはユーティリティ関数が散らばりすぎだし、動的配列は可能な操作が貧弱すぎる。
968デフォルトの名無しさん:2007/05/30(水) 11:00:22
クラスとして表現といっても現状のOOPの機能の追加を継承による方法では
手続きの引数で表現する方法に比べて良くなるとは思えない。
969デフォルトの名無しさん:2007/05/30(水) 11:04:47
一番目の引数について自動的にドットシンタックスが適用出来るような 仕様にすればどう?

function Add( A:Integer ; B:Integer ):Integer;
で、  C := 1 .Add(2) と書けるような
970デフォルトの名無しさん:2007/05/30(水) 11:26:10
それで、どう便利になるか判らん。 教えてくれ
971デフォルトの名無しさん:2007/05/30(水) 11:52:15
>>969
.NET 3.0正式対応のIDE待ちだな。
もしかしたらWin32版でも追随してくるかもしれないな。
972デフォルトの名無しさん:2007/05/30(水) 15:54:10
Delphi2005で、画像の印刷で苦しんでいます。

 Printer.BeginDoc;
 Printer.Canvas.CopyRect(Rect(0,0,1024,768),Image1.Canvas,Rect(0,0,Image1.Width,Image1.Height));
 Printer.EndDoc;

※ Image1.Picture には、emfファイルを読み込ませてあります。

これを実行すると、
「ビットマップを持っている時のみイメージの変更が可能です」
というダイアログが出て、印刷出来ません。
Image1で持っているemfデータを、内部的にBitMap化させないと
いけないのでしょうか。参考になるURLでも結構ですので、
ご教示くだされば幸いです。よろしくお願いします。
973デフォルトの名無しさん:2007/05/30(水) 16:01:11
メタファイルなら直接印刷してしまえばいいんじゃないの?
http://support.microsoft.com/kb/145999/ja
974972:2007/05/30(水) 16:08:35
>>973
TImageで持っているメタファイルをPrinter.Canvasに展開した後、
TextOutで文字を追記する必要があるので、直接印刷だと都合が悪いです・・・。
975デフォルトの名無しさん:2007/05/30(水) 16:14:12
PlayEnhMetaFile で印刷した後、TextOutすればいいじゃない
976デフォルトの名無しさん:2007/05/30(水) 16:20:40
CopyRectじゃなくて普通にDrawすればいいのでは?
977972:2007/05/30(水) 16:32:07
>>975
PlayEnhMetaFileでメタファイルをキャンバスのハンドルに展開しても、
結局TImageからTPrinterへ渡すのと変わらないようですが……。

>>976
Drawしてみました。
 Printer.Canvas.Draw(0,0,Image1.Picture.Graphic);
エラーは出なくなりましたが、絵が一切印刷されませんでした・・・。
978972:2007/05/30(水) 16:50:06
自己レスです。
下記のやり方でなんとか印刷できるようになりました。
(TPictureにロードして、ビットマップに変換、その内容をTPicture.Bitmapに還元)
お騒がせしました。

procedure TForm1.Button1Click(Sender: TObject);
 pic_Wk: TPicture;
 bmp_Wk: TBitmap;
begin

 pic_Wk := TPicture.Create;
 bmp_Wk := TBitmap.Create;

 pic_Wk.LoadFromFile('【emfファイル】');
 bmp_Wk.Width := pic_Wk.Width;
 bmp_Wk.Height := pic_Wk.Height;
 bmp_Wk.Canvas.Draw(0, 0, pic_Wk.Graphic);
 pic_Wk.Bitmap := bmp_Wk;

 Printer.BeginDoc;
 Printer.Canvas.Draw(0,0,pic_Wk.Graphic);
 Printer.EndDoc;
 pic_Wk.Free;
 bmp_Wk.Free;

end;
979デフォルトの名無しさん:2007/05/30(水) 18:34:15
>>978
天才だなあんた
980デフォルトの名無しさん:2007/05/30(水) 18:40:56
おちんぽみるくでちゃった
981デフォルトの名無しさん:2007/05/30(水) 19:05:30
>>978
でもDPIとか合わせないときちゃなくなっちゃうんじゃない?
たぶんデフォルト96DPIとかだろうし
982ななしへたぐらま ◆XcB18Bks.Y :2007/05/30(水) 22:32:50
>>977
Drawの代わりにStretchDrawだとどうですか?

 Printer.Canvas.StretchDraw(Rect(0, 0, Printer.PixelWidth, Printer.PixelHeight), Image1.Picture.Graphic);

ちなみにビットマップの印刷では
DDB(デバイス依存ビットマップ,TBitmapをCreateしたときのデフォルト)を
プリンターのキャンバスに描画するのはNGみたいですよ.
http://www.asahi-net.or.jp/~HA3T-NKMR/tips004.htm

983デフォルトの名無しさん:2007/05/31(木) 01:14:49
TTableのftCurrency項目の範囲はいくらからいくらなんでしょうか?

金額をintegerで管理するのと比べてのメリットはなんなんでしょうか?
984デフォルトの名無しさん:2007/05/31(木) 01:20:14
テキトーな答えだが、固定小数点じゃなかったかcurrency
985デフォルトの名無しさん:2007/05/31(木) 01:23:02
ヘルプのCurrency型の項見れ
986983:2007/05/31(木) 01:24:17
↓こんな感じですか?

1,000
ftIntegerで管理すると30億円とかの額になると溢れてしまうし、金額をカウントするときはどの型がいいんでしょうか?
987983
うお、元にCurrency型ってのがあったなんて知りませんでした。
ありがとうございます。