モナーの *やさしい* Delphi質問スレ Ver2

このエントリーをはてなブックマークに追加
1DELモナー
01/10/15 11:36
DELモナーがどんな厨房疑問でもやさしく答えます。
DELモナは時に私であり、時には別の人。
他のスレに書き込んで罵倒される前に、まずここで質問しよう。
 ∧ ∧
( ´∀`)(    )

22:02/01/22 06:40
Ruby!
3DELモナー:02/01/22 06:40
モナーの *やさしい* Delphi質問スレ 前スレ
http://pc.2ch.net/test/read.cgi/tech/1003113413/
新スレおつかれ>DELモナー
最近あまり出てこないので、DELギコと間違われて刺されたのかと
思ってたよ。
5デフォルトの名無しさん:02/01/22 10:44
Delphi6 Personalを一度アンインストールしたいのですが、
アプリケーションの追加と削除にDelphiの項目が無く、アンインストーラーも見当たりません。
どうすればアンインストールアンインストール出来るのでしょうか
フォルダごと削除
7デフォルトの名無しさん:02/01/22 11:02
DirectInput使うとかいうのは無しで5ボタンマウス対応にするAPIがわからん
なんでD6は3つしかマウスに対応しないんだ?
エクスプローラーも対応しているのに
おせーて
8デフォルトの名無しさん:02/01/22 11:21
>6
それも考えたのですが、それだとレジストリにゴミが残りませんか?
問題無いのならフォルダごと削除しますが・・・
俺は追加と削除の項目に
Del6あるけど、
ない人もいるのか
>>8
フォルダごと削除して再インストール。そのあとアプリケーションの追加と削除からアンインストール。
やっぱりなかったら諦める。
5 はどうやってインストールしたんだろう。

クラック
13デフォルトの名無しさん:02/01/22 11:58
Delphi に VB のような、コントロール配列はありますか?
大至急、マジレス頼む!
155=8:02/01/22 12:41
>10
アンインストール出来ました。ありがとうございました

>11-12
BolandのサイトからDLし、インストールキーを取得して
あとは画面の表記に従ってインストールしていきましたが・・・
16デフォルトの名無しさん:02/01/22 13:02
>10
どうもです。あせってると駄目だ。
ハマリ脱出!
17プッ:02/01/22 13:07
>>12
Personalをクラック?
>>15
なんというか、インストール/アンインストールはインストールシールド(と Windows Installer)の
管理する部分だから Delphi とは関係ない。

インストールしないでクラックしてバイナリを手に入れる位のスキルの持ち主なら
こんなタコな質問はしないだろうから、インストールユーザーとアンインストール時の
ユーザーが異なっている。ってくらいかな?
>>18 あるいは、インストール後にマシンがトンで、
レジストリがインストール前に戻ってしまったとか。
>>19 あるいは XP/Me のシステムの復元でレジストリを元に戻してしまったとか。
>>20 あるいはインストールもせず使ってもいなかったとか。
22ド素人:02/01/22 14:25
Delphi6PersonalにIndyをインストールしたいんですが、
バッチフィルを起動してもエラーでインストール出来ません。
どのようにすればインストール出来ますか?
23Delフサギコ:02/01/22 14:29
   ∧,,∧    / ̄
  ミ,,゚Д゚彡 < 日経ソフトに書いてあったような...
  (ミ  ミ)   \_
 〜ミ  ミ
   ∪''∪
24ド素人:02/01/22 14:32
>>23
今月号ですか? だとしたら本屋に逝ってきます。
25DEL初心者:02/01/22 14:54
D5を使っているのですが動的配列は常に連続してメモリ上にあるのでしょうか?
例えば
var
Data : array of longint;
begin
Setlength(Data,100);
// 処理(ここで配列の数がかわる)
// ストリームに書き出し
Stream.Write(Data[0],SizeOf(Data[0])*Length(Data));
の様にやっても大丈夫でしょうか? HELP見たけどいまいちわかりません
よろしくお願いします。
2625:02/01/22 15:00
すみません訂正です
誤:// 処理(ここで配列の数がかわる)
正:// 処理(ここで配列の長さがかわる)
>>25
連続していると仮定していいはずです。
動的配列は参照カウンタ、長さ、実際の配列しか定義がないからです。
ObjectPascal言語ガイドのメモリ管理を参照してみてください。
2825:02/01/22 15:16
>>27 ありがとうございます!すっきりしました
Helpのメモリ管理知りませんでした
実数型の所が手書き風味で良いですね(w
29ド素人:02/01/22 16:54
>>24
立ち読みしてきましたけど、インストールの方法は書いてなかったです(涙
あれは US のライブラリかどうかをチェックしているのだ。
Indyはバージョンが一つ古い9.0.1Bじゃないとインストーラではだめ。
日本語Updateを認識してくれないので。

こんなサイトを見つけた。手動で入れる方法について。
http://www.sakaki.keiaikai.or.jp/Library/webconv/compile.html
32ド素人:02/01/22 21:20
>>31
おかげさまでインストール出来ました、ありがとうございました。\(^o^)/
33デフォルトの名無しさん:02/01/23 01:01
だれかいます?
いますが、何か?
35デフォルトの名無しさん:02/01/23 01:23

WinHndd := FindWindow('TfrmChat', nil);
SetForegroundWindow(WinHndd);
EdtHndd := FindWindowEx(WinHndd, 0, 'TRichEdit', nil);
SendMessage(EdtHndd,WM_PASTE,0,0);
Ebtnn := FindWindowEx(WinHndd, 0, 'TButton', nil);
SendMessage(Getparent(Ebtnn),WM_COMMAND,1,(BN_CLICKED shl 16) + Ebtnn);
これで偽メッセンジャーからクリップボードの内容を送信できると
思うのですが実行しても送信できていませんわかりますでしょうか??
デバッグを人にまかすな。ボケ!
37デフォルトの名無しさん:02/01/23 02:02
やはりあなたでもだめですか ふぅ・・・
38デフォルトの名無しさん:02/01/23 02:56
たすけてください。
ClientSocket と ServerSocket を使ってテスト通信ソフトをつくりましたが、
サーバからクライアントに送信すると、必ずエラーが発生してしまいます。

ソースコードを下に置いたので、エラー原因を教えていただけないでしょうか。

http://www.geocities.co.jp/SiliconValley-PaloAlto/4845/socket.zip
39冒険開始1日目:02/01/23 03:25
コンポーネントパレットの[Additional]ページにある
ActionManager コンポーネントてのはD6Personalでは使えないんですか?
それとも、アップデートすればイイだけのことですか?
>>38
デバッグを人にまかすな。ボケ!
>>38
この程度のバグを取れないようでは困ると思うが...
バグは2カ所。

TForm1.socServerClientRead で,一つのイベントに対して
Socket.ReceiveText と (socServer.Socket).ReceiveText の2カ所で
文字列を取ろうとするから2回目でエラー。

TForm1.Button3Click で,EdtText.Text をクライアントに送り返すはずのコードが
なぜか ReceiveText を SendText しようとしている。何も受信していないだろ?

もし,周りにデバッグのうまい人がいたら頼み込んでデバッグの現場を見せてもらいなさい。
他人のデバッグ手法は見ていておもしろいぞ。
逆立ちしてデバッグするの?
43前スレではお世話になりました:02/01/23 11:00
細かい質問をちょこちょこっと。
お時間がございましたら答えてやってください。

1)
iniファイルにFont.Styleの値を保存しようと思うのですが、
これはWriteStringではダメなんでしょうか?

2)
メモ帳の「右端で折り返す」処理を実装しようと思い、
以下のようにCheckdで作成してみました。
procedure TForm1.TurnOnRight1Click(Sender: TObject);
begin
{[設定]-[右端で折り返す]}
// Checkedの反転&スクロールバーの処理
If TurnOnRight1.Checked Then
begin
Memo1.ScrollBars := ssBoth;
TurnOnRight1.Checked := False;
end
else
begin
Memo1.ScrollBars := ssVertical;
TurnOnRight1.Checked := True;
end;
end;

これ、使っている分にはちゃんと折り返されてるみたいなんですが、
こんなんでいいんでしょうか?(邪道っぽい気がするもんで)

宜しくお願いします(´∀`)ノ
>>43
1)だけ。
型が違うやん。
ini.WriteInteger(Section, Ident, Byte(Font.Style));
でどうよ?
>>44さん、出来ました(笑
てっきり[fsBold]だからStringかと思ってたのですが…。

回答有難うございました(´∀`)
46デフォルトの名無しさん:02/01/23 11:43
>>43
では2)
  TurnOnRight1.Checked := not TurnOnRight1.Checked;
  Memo1.Wordwrap := TurnOnRight1.Checked;
  if TurnOnRight1.Checked then
    Memo1.ScrollBars := ssVertical
  else
    Memo1.ScrollBars := ssBoth;
47DEL初心者:02/01/23 11:50
>>43さん
解決されているようですが… こんなんも出来ますよん
uses typInfo; // どっかにあるので探してね
//オブジェクトインスペクタ風味の書き出し
ini.WriteInteger(Section, Ident,GetSetProp(Self.Font,'Style',true));
48デフォルトの名無しさん:02/01/23 11:51
>>47 もうちょっと頑張れば 文字列としても取り出せるよ
4947:02/01/23 11:52
げは…また間違った
ini.WriteInteger( は ini.WriteString( です。
逝ってきます
5044:02/01/23 11:55
>>49
コピペしやがったな(w
5147:02/01/23 12:22
>>50 はい。すみません(汗

一応投稿前にCTRL+F9押してエラーが無いことを確認したのに…
IEだったら意味無かった
5238:02/01/23 12:57
>>41
ほんとうにどうもありがとうございます。
なるほど、ReceiveTextのヘルプにもそう記述されていますね。
デバッグ手法を見たいのは山々なのですが、
私はアマチュアで、まわりにDelphiを使う人が一人もいないので
独学でやるしかないのです…
5338:02/01/23 13:02
ついでに…

ローカルアドレス
ローカルホスト
リモートアドレス
リモートホスト

の違いを教えてくれませんか…
>>53
ヘルプで「ソケットコンポーネント」を検索すると「ソケットコンポーネントの使い方」と
いうのが出てくるから、それを順に読め。

独学ならば、それこそ調べる癖をつけないと困るよ。
5538:02/01/23 13:39
そのことなんですが、キーワード欄に何も表示されないのは
どういう事なのでしょうか。目次は存在するし、コード編集ウィンドウ内の
キーワード上でF1するとちゃんと出てくるのですが。

Delphi6Pro + Win98SE です
>>55
もしかして。

ヘルプ→カスタマイズでOpenHelpを開いて、キーワードタブに登録してあるヘルプのうち
要らなさそうの消してみ。CLXリファレンスとか。
ここの容量がでかいとWin95系では表示されなくなるとかってのを聞いたことがある。
5738:02/01/23 13:49
>LocalHost プロパティと LocalPort プロパティを使って,
>ローカルのクライアントまたはサーバーのソケットが使った
>アドレスとポート番号を確認するか,RemoteHost プロパティと
>RemotePort プロパティを使って,リモートのクライアントまたは
>サーバーのソケットが使ったアドレスとポート番号を確認できます。

つまり、Local は「自分」で、Remoteは「相手」ということ?

Host と Address プロパティは、IPアドレスに変換する必要があるかどうかですね。
Host にはドメイン名も指定できるが、それをIPアドレスに変換する手間がかかる。
一方、Address にはIPアドレスしか指定できないが、そのぶん早く接続できると。
5843:02/01/23 13:58
46、47さんご教授ありがとうございます。
46さんのTurnOnRightの例を使わせて頂きました(´∀`)
47さんの例は今度ライブラリ?を集めた時に使ってみようと思いますー

で、申し訳ないのですが追加の質問を…。
上でiniファイルに保存したStyleの値を読もうとしているのですが、

 Memo1.Font.Style := IniFile.ReadInteger('Font','Style',Byte(Memo1.Font.Style));
 もしくは
 Memo1.Font.Style := IniFile.ReadInteger('Font','Style',Memo1.Font.Style);

のように記述しても読んでくれません。
iniには

 [Font]
 Size=12
 Color=-2147483640
 Name=MS Sans Serif
 CharSet=0
 Style=0      ←

のように保存されているのでReadIntegerで大丈夫だとは思うのですが…。
(´・ω・`)ショボーン
5944:02/01/23 14:08
>>58
ini.WriteInteger(Section, Ident, Byte(Font.Style));
の「Byte」の意味がわかってないね?
TFont.Styleのヘルプを見ると集合型だろ。これはIntegerと互換性がない。
だから無理矢理「これはByte型だ、Byte型と思い込め」とDelphiに教えてやってるんだよ。

だったら逆の場合も同じようにしてやらないといけない。
Integerで返ってきたものを「これはTFontStyles型だ、TFontStyles型と思い込め」とDelphiを
催眠術にかけてやればいい。

 Memo1.Font.Style := TFontStyles(IniFile.ReadInteger('Font','Style',Byte(Memo1.Font.Style)));
60デフォルトの名無しさん:02/01/23 14:08
こんどは読んだ Integer の値を TFontStyles でキャストしましょう
6160:02/01/23 14:09
負けた…
6244:02/01/23 14:12
>>61
勝ったぁ!(w

で、その催眠術は>>60の書いてる通り「キャスト」と言うんだよ。
50 :参加するカモさん :01/11/30 21:16
28 名前:西村の同級生 投稿日: 2001/02/12(金) 10:08
中学の頃クラスでイタズラ電話や下駄箱の靴が紛失する事件が頻発したんだけど
その時、女子の間では「犯人西村」説が跋扈していた。
真相は藪の中だけど、実は私もそう思ってたうちの一人。
証拠もないのに疑いをかけるのは悪い事だと思うけど、西村にはそういう嫌疑を抱かせる
雰囲気があったのも事実。

52 :参加するカモさん :01/11/30 22:33
50を読んでも驚かないところが不思議
ふーんて感じ
そういうダーティーなところも含めてひろゆきカッコイイ

53 :参加するカモさん :01/12/01 05:08
オレも52と同様、1変人として素晴らしいと感じる。
我等変態をナメるな。
ひろゆき擁護者として、間違い無く彼が犯人だったと断言するぞ。

54 :参加するカモさん :01/12/01 16:47
堂々たる変人ぶりだ、、、
6438:02/01/23 14:19
>>56
おおおお
どうもありがとうございます。
ちゃんとキーワードが表示されるようになりました。
6543:02/01/23 14:21
素早い解答ありがとうございます。
さっそく試したところ、見事に反映しました!
もしかしたら一般的な技法なのかもしれませんが、
知らなかった分勉強になりました。>キャスト

ではしばらく他のデバッグ作業に戻ります…(;´Д`)
66デフォルトの名無しさん:02/01/23 17:10
やばいです
webサイトの更新日を取得する方法がわかりません
HttpQueryInfoですか? 
67デフォルトの名無しさん:02/01/23 17:53
>66
何を使ってんのか知らんけど、Headerに更新日情報は入ってるよ。
あなたは RFC から読む事をお薦めする
でも Indy とか使ってるとわからなくてもできちゃうからな・・・
HttpQueryInfoってなんなんだろ? 知ってる方いらっしゃいます?
71デフォルトの名無しさん:02/01/23 18:04
とあるアプリからサイトが更新されたどうかを確認して
されていたらメッセージを送るみたいなことをしたい
どうだろうか?
72デフォルトの名無しさん:02/01/23 18:13
>>71
いいんじゃないでしょうか
73sage:02/01/23 18:15
どうやるのか方法をご教授して頂けませんか?
どうだろうか?
>>73
これを使う。
http://www.koizuka.jp/wwwd/
tesu
76吐駄:02/01/23 18:31
77sage:02/01/23 18:32
ソフトの紹介ではなくて方法をご教授して頂けませんか?
どうだろうか?
何の方法を教授されたがっているのだろうか?
どうだろうかはどうだろうか?
>>77
WWWDのようなソフトのコードを書いてタダでよこせという意味でいいですか?
>>67-69 は読まれましたか?
>>78
とあるアプリからサイトが更新されたどうかを確認して
されていたらメッセージを送るみたいなことをしたい
ソフトの紹介ではなくて方法をご教授して頂けませんか?
HttpQueryInfoでHTTP_QUERY_LAST_MODIFIEDを取りましたが
以前の更新日時との比較のしかたがわかりません
又は、上記のやり方以外で更新日時を取る方法はあるのでしょうか?
うざい
厨房質問にも限度がある
8470:02/01/23 19:07
>>76
うっ、WIN32ヘルプまでは見たのだが・・・。申し訳ないです。

>>82
なぜ比較の仕方がわからないのかがわかりません。
>82
文字列で比較して1文字でも違っていたら更新されたってことにしとけ。
全部別人が質問してたりして。
なんか教えて君が増殖しているなぁ。なんかあったっけ?
1に
>他のスレに書き込んで罵倒される前に、まずここで質問しよう。
と書いてあるのだが、肝心の*やさしい*DELモナーがいない(w

質問の仕方がなってない奴は叩かれる、典型例ですな。
いきなり>>82が書いてあればここまで罵倒されることもなかったのに。
「*やさしい*」が教えて君を引き寄せているのかな?
しかし初代スレに比べて急に増えた気がするが。それも Delphi 系だけ。

某 ML でいじめられたから、とか
某広場でかまってもらえなくなったとか
某情報局でボロクソいわれたからとか
90デフォルトの名無しさん:02/01/23 20:37
初めて書き込みします
先輩にdelphiというものを8000円で買わされしかも1週間以内に
なんか作れといわれてしまいました
先輩はdelphiは本当は何万円もするぞと言ってましたが本当ですか?
どうしたらいいかわかりません
どうかみなさん助けてください
>>90
ネタか?

Delphiを起動してヘルプメニューからバージョン情報を見る。
Professionalと書いてあったら6万8千円、Enterpriseと書いてあったら36万円。
Personalと書いてあったら0円。
Personalに1000ぺリカ
>先輩はdelphiは本当は何万円もするぞと言ってましたが本当ですか?
嘘です。

>なんか作れといわれてしまいました
↓きっとお役に立つでしょう。
http://www.monazilla.org/
94デフォルトの名無しさん:02/01/23 21:12
>>91
箱にはPersonalと書いてあります
>>93
リンク先に行ってみましたがよくわかりません
なんか作れと言われましたが何が作れるのでしょうか?
95某 ML より:02/01/23 21:17
.....
それから、別の話題ですが、先日2ちゃんねるのデルファイ初心者用の
掲示板を覗いてみたら、質問をされた方が「ヘルプを読め!」と怒られて
いるのを見てしまいました(笑)。ヘルプや過去ログという話はどこへ
いってもありますし、自助努力という姿勢も良いことだとは思うのですが、
学校で隣の席の友人に「ねえ、ねえ」と言って訊ねたりできるという
感じがあれば助かるなぁ・・と思っています。先生に聞きに行くよりも
手軽な感じです。

具体的には、

・「ヘルプを見なさい」「過去ログを見なさい」禁止の
・初心者同士の初心者同士による初心者同士のための
・休み時間のようなメーリングリスト。

を立ち上げようかなーどーしよーかなーと考えています。
みんなで「わからん、わからん」と言ってるような、
烏合の衆のようなMLです(笑)。
http://www.borland.co.jp/delphi/prodinfo/

Borland Delphi 6 Personal \4,800 (無料版あり。違いは箱と紙のマニュアル)
Borland Delphi 6 Professional \68,000
Borland Delphi 6 Enterprise \360,000
初心者には2種類あって
1.プログラムの初心者
2.Delphiの初心者
がいるんだよね。で、両方とも初心者でくくっちゃうから混乱する。

2.にはプログラムの経験者も含まれるから、いきなりAPIの
話したりDBやWebの話したりとかする(でもDelphiは初心者)。

1.こそが本当の初心者だと思うんだけどね。
>>94
ここに1週間で丁度出来そうな
ゲームのソースがあるから これをダウンして 作ったといいなさい
http://www5.tok2.com/home/luminel/

その後お礼をこのスレに書いてあげような
http://pc.2ch.net/test/read.cgi/tech/1010318049/
99デフォルトの名無しさん:02/01/23 21:39
今日初めてDelphi6をさわったのですが

var
iHoge: Integer;
iFoo: Integer;
case iHoge of

1: iFoo := iFoo + 10;
2: iFoo := iFoo + 20;
3: iFoo := iFoo + 30;
end;

var
sHoge: String;
iFoo: Integer;
case sHoge of

'hoge1': iFoo := iFoo + 10;
'hoge2': iFoo := iFoo + 20;
'hoge3': iFoo := iFoo + 30;
end;

文字列を使用した条件分岐は出来ないのですか?
>>99
case セレクタ式 of
ケースリスト1: 文1;
...
ケースリストn: 文n;
end
セレクタ式には順序型の任意の式を使用できます。文字列型は無効です。
101デフォルトの名無しさん:02/01/23 21:48
みなさん本当にありがとうございました
これで一週間後の先輩どうにかなりそうです
var
 sHoge: String;
 iFoo: Integer;
begin
  if sHoge = 'hoge1' then iFoo := iFoo + 10
 else if sHoge = 'hoge2' then iFoo := iFoo + 20
 else if sHoge = 'hoge3' then iFoo := iFoo + 30;
end;
前から思ってたんですけど「ほげ」ってなんですか?
10599:02/01/23 22:12
>>100

そうですか、ちょっと使いづらいですね

>>102
そうすれば良いのは解るのですが
ソースのわかりやすさを考えると

case sHoge of
'hoge1': iFoo := iFoo + 10;
'hoge2': iFoo := iFoo + 20;
'hoge3': iFoo := iFoo + 30;
end;

できると幸せだなぁと思ったんですが
10699:02/01/23 22:19
もう一つ質問なのですが
http://isweb30.infoseek.co.jp/computer/hotzonu/hotzonu2.html
ホットゾヌのスレッド一覧を提供している
コンポーネントみたいな物を作るのは難しいですか?

あまりプログラムは得意では有りませんが
ファイラーみたいな物が作りたいのですが
リスト形式でさらにファイルの属性によって色を変えたりしたいのです。

107デフォルトの名無しさん:02/01/23 23:02
>106
TListView もしくは TDrawGrid もちろん OwnerDraw で。
 ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ∧ ∧
( ´∀`)
(    )
108モザイク:02/01/23 23:03
http://homepage1.nifty.com/beny/index.html
ここのサイトのモザイク処理で
var
X, Y, I, J: Integer;
xR, xG, xB, XX, YY: Integer;
Cnt, BlockW, BlockH: Integer;
pSrcCache: PCacheLines;
pSrcLine: PLine24;
begin〜〜
とありますがPCacheLinesって何でしょうか?当方D6です

>>108
BBS まで用意しているんだから作者に聞きなよぉ。
110モザイク:02/01/23 23:15
あ、すみません。では そうして見ます 急ぎだったもので・・
111Delフサギコ:02/01/23 23:24
           >>97
  ∧,,∧    / たまに 
 ミ,,゚Д゚彡 <   人生の初心者も
Π ̄ ̄ ̄|  \  まざっとる
|つオレモナー()   
| |___.|
  ∪∪
112モザイク:02/01/23 23:24
TCacheLines = array[0..MaxInt div SizeOf(Pointer) -1]of Pointer;
PCacheLines = ^TCacheLines;
自己解決。。。。あほや、自分。
113デフォルトの名無しさん:02/01/23 23:44
Delphiで複数行を一発でコメントできないかな?
それとも手作業なの?
>>113
{ } か (* *) で囲んじゃダメ?

もしかして、全ての行頭に // を入れているの?
116113:02/01/23 23:59
>>114
そりゃそーだ。ハズカシイ・・・

いやVBみたいに一括でできないかとフト思ったんだけど、俺逝ってヨシ。
117113:02/01/24 00:01
>>115
ゴメンヨーゴメンヨー
Del1では、//形式のコメントは使えなかったね。
119ビクーリ!:02/01/24 00:47
Hotkeyちゃんが自前HP作ったみたいYO!
ビクーリ!でも、プロフィール無いから何歳か分からないYO!
せめて、URL書いてくれないと・・・
ウザいよ?
122ビクーリ!:02/01/24 00:52
>>120
ヲッチャーなので、晒すようなことは出来ませぬ。
>122
オナニーしてな。
124はて?:02/01/24 02:44
デルファイってどんな言語なんですか?
125無視しないで:02/01/24 05:07
>124
どんな回答を期待しているのですか?
あなたが使える言語を例に教えて下さい。

VC++→Microsoftが売っているコンパイラー
と教えてくれれば、
Delphi→Borlandが売っているコンパイラー
と答えられます。
126黙阿弥上人:02/01/24 06:29
>101

ネタじゃなかったのか?

まぁ、いいさ。 よろこんでもらえりゃ。

先輩にもヨロシクな。

(これが、もって回った皮肉なら、あっぱれ!みごとなり! と賞賛に
 値する。複線の張りかたなど用意周到だ)

コレも人生。 合掌...
127黙阿弥上人:02/01/24 06:31
あ、
「複線」→「伏線」ね。
(俺のせいじゃねぇ、IME...)
128デフォルトの名無しさん:02/01/24 08:08
>>116
GExpertsで出来ますよ
>>105
処理系によってはできますね。
出来ないのはDelphiの言語仕様としか言えないです。

書きやすさに対して実行時のコストが高いからでしょう。
# それでもそんなに頻繁に使うものでもないでしょうから、
# あってもいいようなものです

ちなみにどうしてもやりたければ
文字列をキーとするハッシュに数字を割り当ててcase ofするのがよいかと。
130Delフサギコ:02/01/24 08:50
  ,,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡 < CaseStr構文でも導入してもらいたいかも
  UU"""" U U    \_______________
 ナクテモイイケド
>>130
要らんでしょ?文字列を単純な数字列にする関数内関数を書いて
constで数字列と文字列を対応付ければ済むと思うが・・・・・
13243です:02/01/24 10:20
おはようございます。(;´Д`)
昨日の書き込みで書いた通りFont.Styleが反映したと思っていたのですが、
今日になって実行してみるとなぜかエラーが吐き出されてしまいました。

 Memo1.Font.Style := TFontStyles(IniFile.ReadInteger('Font','Style',Byte(Memo1.Font.Style)));
 [エラー] Unit1.pas(100): 正しくない型キャスト

>>59さんのアドバイスを参考にして記述したのですが、
どこかおかしな所などございますでしょうか?
ヘルプを見てみたら

TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut);
TFontStyles = set of TFontStyle;

と言う記述があったのでここかと思われる場所に set of を記述してみたのですが、
これもダメなようで…。

ちなみに、当方Delphi6Personalです。
あと亀レスですが>>95のメーリングリストいいですね。(゚д゚)ウマー
13343です:02/01/24 10:21
sageてた・・・鬱
確かに面白い>>95
立ち上がったら告知キボーン
13544:02/01/24 10:36
>>132
ごめん。
 Memo1.Font.Style := TFontStyles(Byte(IniFile.ReadInteger('Font','Style',Byte(Memo1.Font.Style))));
だった。申し訳ない。
13643です:02/01/24 11:28
44さんフォローありがとうございます(´∀`)
と言うか、自分でもよくわからぬままiniを実装しようとしたのも反省しとります。
とりあえずキャストはしっかりと頭に叩き込んでおきます!

こちらも何度も申し訳ございませんでした。
13799:02/01/24 11:43
>>107
ありがとう


ListItemにオブジェクトを関連づけるってイメージわかないんですが・・・
ListItemにクラスや配列を関連づけたりして
それに対応した処理をさせたりとかするんですか?

たとえばDBのレコードとかそういう物を関連づけたりする?

procedure TForm1.FormCreate(Sender: TObject);
var
Aho : String;
NewItem:TListItem;
begin

Aho := 'hogege';

NewItem := ListView1.Items.Add;
NewItem.Caption := 'なんとか';
NewItem.Data := @Aho; // データへの参照.
NewItem.SubItems.Add('hoge1);
end;

procedure TForm1.ListView1Click(Sender: TObject);
begin

end;

この場合のSenderってのは何が引数で渡されるのですか?
138デフォルトの名無しさん:02/01/24 11:55
これからDelphiを始めるのですが、ソフトがまだ買えません。
Delphi初心者が読んで使いやすいマニュアル本などあったら
教えてください。(みなさんが使っているお勧めの本など)
本当は自分で見て選びたいのですが本屋にあまり置いてなくて
中身が見れなくて不安です。よろしくお願いします。
経験言語はaccessとCOBOLです。
>Delphiを始めるのですが、ソフトがまだ買えません。

( ゚д゚)ポカーン
Delphi6 Personal は無料ですが?
140Delフサギコ:02/01/24 12:42
 Delphi無料版をゲットォォォォ!!! スレ>>138
  ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄
      ∧,,∧          (´´
   \,,,,ミ,,゚Д゚彡      (´⌒(´
  ⊂,,,,,,,,,つつ.≡≡≡(´⌒;;;≡≡≡
           (´⌒(´⌒;;
      ズザーーーーーッ

>>137
Senderにはイベントを呼び出したコントロールが入るので
この場合はListView1辺りが入っているでしょう。

Ahoという文字列のアドレスを渡すよりは
Stringをフィールドに持つTAhoクラスでも作って
それをDataプロパに登録する方がわかりやすいかと。
ところでDelphiってDelphiで作られているのですか?
だったら私でもDelphi7作れますか?
>>141 Delphi7を作るのは商標とかいろいろなしがらみでダメでしょうね

また、Delphiのフォームの使い方は特許になってるかもしれません。


世の中にはFreePascalというのがありますから、これを元にDelphi並の
ものをお考えになっては?
143デフォルトの名無しさん:02/01/24 13:11
最初にコマンドラインDelphiコンパイラを作る
コンポーネントやライブラリをメモ帳で作成。
Delphi統合環境プログラムをメモ帳で作成し、コンパイル

Delphi統合環境の出来あがり。
144謎絵だ:02/01/24 13:16
>>140
それ逆向きに飛んでんのかw
いや 前足で砂をかけてる図かと
先輩だが
おまえら1時間以内になんか作れ
変な入れ知恵しやがって
>>139
説明不足ですいません。
客先の都合でDelphiで開発指示がきました。
正式受注後にpro版を買って貰えるのですが、それまでの勉強と
リファレンス的な使い方ができる本が欲しいと思ったので。。
(本は自費です)
148デフォルトの名無しさん:02/01/24 13:58
とりあえずPer使えよ
Perl?Haa?Ruby Only makes sense!
>>147 そういう事ならこれからでいいのかな?

http://www.cbook24.com/bm_detail.asp?sku=99925917
152147:02/01/24 14:20
>>150
ありがとうございます。
「基礎編」というトコにひかれてました。
やはり実際読んだ方のお勧めを聞きたかったもので。
他に候補として他にインプレ○・オライリ○があったのですが・・・
もし読んだ方いましたらお勧め度聞かせてください。
149の馬鹿っぷりにワラタ
>>152
全部買って12万程度だよ 全部買ったら?


DelphiによるWindowsプログラミング入門 綿貫 啓一 (著) <1995/12/1< 日刊工業新聞社 :¥1,845
Delphiプログラミング大全 Programmer’s SELECTION ジェフ ダンテマン (著),<1995/12/1< 翔泳社 :¥5,631
Delphiパーフェクトマニュアル―ボーランド公式 チャールズ カルバート (著),<1996/3/1< インプレス :¥5,631
やさしいDelphi 村上 宣寛 (著) <1997/6/1< 日刊工業新聞社 :¥2,200
Delphiで作る高速CGI 田原 孝 (著) <1998/12/1< エーアイ出版 :¥3,200
ここまでできる Borland Delphi4パワーガイド 小出 俊夫 (著),<1999/4/1< 秀和システム :¥2,800
Delphi Win32 APIリファレンス Ascii books John Ayres (著), 光田 秀 (翻訳) <1999/5/1< アスキー :¥8,800
使いながら覚える Borland Delphi4プログラミング入門 やさしいWindowsプログラミング 竹田 英雄 (著) <1999/5/1< エーアイ出版 :¥2,500
Delphi 4プログラミングバイブル マルコ カントウ (著),<1999/6/1< インプレス :¥5,680
Borland Delphi4オフィシャルコースウェア クライアントサーバシステム構築編 Inprise公式コースウェアシリーズ 真木 保 (著) <1999/7/1< アスキー :¥5,200
DelphiでWindowsゲームを作ろう! 青山 学 (著) <1999/7/1< ピアソン・エデュケーション :¥3,400
Delphi4プログラミング技法〈Vol.2〉コンポーネントとDBの実践テクニック Borland Press ザビエル パチェコ (著),<1999/8/1< ピアソン・エデュケーション :¥5,700
これで完璧!Delphi5裏技170選 金井 利美男 (著) <1999/10/1< エーアイ出版 :¥2,800
基礎からわかるDelphi5 三原 幸一 (著) <1999/10/1< 秀和システム :¥2,400
Delphi Object Pascalリファレンスブック アンク (著) <1999/11/1< 技術評論社 :¥2,480
Delphi5実践データベースプログラミング―DBコンポーネントとQuickReportの活用 田中 和明 (著) <2000/6/1< カットシステム :¥3,800
Delphiデータベースアプリケーション開発ガイド―データベースフレームワークから帳票作成、Oracle8i入門まで 三原 幸一 (著) <2000/6/1< 秀和システム :¥2,800
Delphi & C++Builder即戦力コンポーネントライブラリ―Windowsプログラミングの効率アップ 中島 信行 (著) <2001/1/1< CQ出版 :¥3,000
Delphi Win32 Graphics APIリファレンス ジョン アイレス (著),<2001/3/1< アスキー :¥8,800
Delphiクイックリファレンス レイ リシュナー (著),<2001/5/1< オライリー・ジャパン :¥4,500
Delphi 魔法のTIPS 500 Programmer's Bible Series EXPERTGIG開発室 <2001/8/31< エキスパートギグ :¥8,500
Delphi6プログラミングテクニック裏技180選+新機能20選 金井 利美男 (著) <2001/9/1< エーアイ出版 :¥2,980
VBユーザーのためのDelphi6プログラミング 佐藤 親一 (著) <2001/12/1< オーム社 :¥2,600
Delphi DB&Webプログラミング 松浦 健一郎 (著), 司 ゆき (著) <2001/12/1< ソフトバンクパブリッシング :¥3,200
Borland Delphi 6オフィシャルコースウェア (応用編) Borland official courseware series 井上 勉 (著) <2002/1/1< アスキー :¥4,800
Borland Delphi 6オフィシャルコースウェア (基礎編) Borland official courseware series 服部 誠 (著) <2002/1/1< アスキー :¥2,800
Delphiゲームプログラミングのエッセンス 日高 徹 (著) <2002/1/1< ソフトバンクパブリッシング :¥3,400
>DelphiプログラマのためのCGI入門―WebBrokerでらくらくプログラミング TRY COMPUTING BOOKS
>山本 秀樹 (著)

この本廃刊だけど良い本だと思ってるの自分だけかな?
>>155 それも持ってるよ。 
 良い本だと思うけど、 お勧め出来るかどうかはその人の経験とか色々で違うからな
>Delphiパーフェクトマニュアル―ボーランド公式 チャールズ カルバート (著),<1996/3/1< インプレス :¥5,631
これ、Delphi1用。

続編がDelphi2.0J 32ビットパワープログラミング。
いい本だけど、枕になる可能性もある諸刃の剣。初心者にはお薦めできない。

それ以降のは邦訳は出てないけど、原書の方はあるらしい。
Delphiって関数の戻り値とかはどうなってるの?
そもそも戻り値っていう概念が有るのだろうか・・・
159147:02/01/24 17:41
>>154- >>157
ありがとうございます。
こんなにあるんですね・・・
とりあえずインプレスは対象からハズすことにします。
160Delフサギコ:02/01/24 17:54
  ∧,,∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ミ ゚Д゚ミ  < 何がいいたいん?>>158
 (ミ  ミつ)ビシッ\_________
〜ミ  ミ
  ∪ ∪ カオアラッテ デナオセ

function AAA: Integer;
begin
 Resutl := 666;
 //AAA := 666;
end;
とりあえず>>158には戻り値の無い関数を教えてもらいたい…
162158:02/01/24 19:29
>>160
出直します・・・

>>161
Pascalって古いイメージ有るから
Basicみたいにサブルーチンしか無かったらなぁと思ったり
>>162
Cも古いですけど。
164161:02/01/24 19:55
なるほど…確かにPascalは1623年生まれだからな…(とボケてみる)
C(hrist)は紀元前4年頃だっけ
166デフォルトの名無しさん:02/01/24 20:12
TStringGrid では、一つのCellに表示できるのは1行だけですよね。
Borlandのサイトには複数行表示できる物が載っていますが、
WordWrapできる複数行 TStringGrid はどこかにないでしょうか。

今は TDrawGrid を継承して、自力で描画しています。ところが、
TStringGrid のように、各セルに文字列を関連付ける方法がわからなかったため、
OnDrawString というイベントを作って、その都度書きこむ文字列やフォントを
指定しています。
>>162
多子化Cの一年先輩だった気がする。
アセンブラマンセーのリッチーらにオモチャってコケにされたんだっけ?
168Delphi初心者:02/01/24 20:23
すいません クラスメンバーの可視性で質問なのですが…
疑問@
type
TForm2 = class(TForm)
Button1: TButton;
この場合Button1はパブリッシュメンバーになるのですよね?
疑問A
type
TMyClass = class(TObject)
169168=Delphi初心者:02/01/24 20:26
すみません 途中で投稿しました…(鬱
疑問A
type
TMyClass = class(TObject)
 hoge : TList;
この場合hogeは何になるのでしょう?
{$M+}の時はバブリッシュ? それともいつでもパブリック?

特に問題は無いのですが気になって…
>>166
>OnDrawString というイベントを作って、その都度書きこむ文字列やフォントを
>指定しています。

そこまでできるならコンポーネントにできるだろうに。
抽象化能力が足りないのかな?でも自分で作って自分で使うのなら
それでも良いと思うよ。
171デフォルトの名無しさん:02/01/24 20:30
ちょっとお聞きしたいのですが
タブを利用したプログラム(同じタブを沢山)で
オブジェクト(ボタンとかリストとか)を動的に作成したいのですが
その場合は
タブに含まれるオブジェクトを格納するクラスを作って
新しいタブを作るときに動的配列にそのクラスを生成すればいいのですか?
まずやって、それでダメなら聞いてみてください
173Delフサギコ:02/01/24 20:37
  ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < 今日は冷えるね
  ,;゙  ミ     \_____________
 ミ.  ミ
/゛゛゛゛
>>168-169
@publishというよりpublicですが
あまりButtonの属性は気にせずにどぞ。

DelphiIDEが管理する部分なので
自分でコード書くときはprivateとかpublicとか
に書くようにしませう。

Aちゃんとprivateとかpublicのトコに移動
させて、くださいな。

publicとpublishってオブジェインスペクタに現れる
かどうかだけだからButtonやhogeは
public族生だと思われ。
174168=Delphi初心者:02/01/24 20:39
>>172
あわわ、すみません とりあえずRTTIが有るのか調べてみます。
>>172
各オブジェクトのparentをTABページにすること。
176168=Delphi初心者 :02/01/24 21:52
>>173 Delフサギコさん
すみません 寒い質問ばかりで…(汗

色々調べたのですがやはり{$M}に左右される様です。
{$M+}だとパブリッシュ で{$M-}でパブリックのようです。

>publicとpublishってオブジェインスペクタに現れる
>かどうかだけだからButtonやhogeは
>public族生だと思われ。

これはpublishedだとメンバが呼び出されていなくても
実行コードに埋め込まれる点を除いて同じようです。
#RTTIに載るメンバのコードは必ず実行コードに含まれるようです。

HELPには{$M-}の状態で{$M+}でコンパイルされたクラスの
派生クラス以外はPublishedメンバを作れませんと書いてあるし…
(Del5)

うーん TP3→TP5→Del1→Del5 と某社の使ってますが
HELPの難解度は変わりませんね(w
177Delフサギコ:02/01/24 22:33
 いや、そうではなくて
 ホントに気温が低いって言いたいだけです。

  . ̄ ̄∨ ̄ ̄ ̄
    . ∧,,∧  質問内容はスッキシして
     ミ ゚Д゚ ミ  いいと思うです
     (ミ  ミ)  というか、凄い事追求されてますのね。
    〜ミ  ミ
      ∪''∪ ゴメンヨ マギラワシイ コメントデ

 俺の部屋、1Fなので
 床下から冷えがね。結構、くるのよ
 ああ、寒い寒いわ〜
178名無しヘタぐらま ◆B18Bks.Y :02/01/25 05:12
>>166
ボーランドのサイトにあるTipsってこれですよね.
http://www.borland.co.jp/tips/delphi/dh011/sgrid_1.html
ワードラップは壱カ所いぢるだけで出来ます.

Options := DT_EDITCONTROL;

これを

Options := DT_NOPREFIX or DT_WORDBRAK;

に変えればOK(のはず).

        ☆        ☆

DT_WORDBRAK がワードラップ指定で改行コードの処理もやってくれます.
DT_NOPREFIX はワードラップには全く関係ありませんが,
これを入れないとたとえば
"Tom&Jerry"は"TomJerry"となってJに下線がつきます(メニューの表示みたいになる).

DrawCellEx については詳しくはここをご覧になるとよいでしょう.
http://www.microsoft.com/JAPAN/developer/library/jpgdipf/_win32_drawtextex.htm
ワードラップのほかに位置合わせもできるAPIなので覚えておいて損はないでしょう.
179168=Delphi初心者:02/01/25 10:22
>>177 Delフサギコ さん
うう。。深読みしすぎました すみません(汗

ブランクが長かったのとWinベース(Del)になってからちゃんとクラス型のことを
調べずにやってたandちょっと暇が出来たので最上位クラスから見直そうかと思い
色々やってます。

ってか HELPを読み直すと「クラスメンバーの可視性」でちゃんと書いて有りました(鬱
でも「パブリッシュメンバー」の最後の説明はよくわからない(w

TP5やってたからなんとなくわかるけどDelからいきなり始めた人はOOPを覚えるの
大変じゃないのかな?OOP周りのHELPが殆ど無い&ボロボロのような気が…

俺がアフォなだけという可能性が高いですが(鬱
180166:02/01/25 10:45
>>177
うう、わざわざありがとうございます。
でもごめんなさい、超重要なことを忘れてました。
どうして悩んでるかといえば、WORDWRAP 自体には、それほどの問題はないのです。
問題は、
「WordWrapされた文章が常に全部表示されるように、その行の Height を自動調整したい」

ことなんです。Drawイベント時に、その行に含まれるセルの中で、最も
Height を必要としているセルを割りだし、そのHeight値を得て、その行のHeightを設定しています。
でも、すごく処理が重くなってしまうのです。たまに再描画されないときもあるし、
最後の1行(セルの行ではなく、セルに含まれる文字列)が表示されないときもあるしで…

最終的に何がしたいのかというと、

(1) Gridコントロールの横幅にあわせ、一番右側のセル列の幅を自動調整する(横スクロールバーを出さないように)
(2) 各セルに表示された文字列を、セル内での横スクロールをしなくても読めるように、WordWrapしておく。
(3) 各セルに表示された文字列を、セル内での縦スクロールをしなくても読めるように、セルの高さを自動調整する。
(4) 各セルにフォント情報を埋め込めるようにする(Cells[x,y].Fontみたいに)

こういう事をしたいのです。
いや、「なら、つくれよ」といわれれば確かにその通りですし、
作ったのですが、どうにも効率が悪いような気がして…
18143です:02/01/25 10:49
前スレからずっとテキストエディタ作ってます。ヽ(;´Д`)ノ
今は参考書なども購入してなんとか調べつつ作っている状況でございます。
完成度はだいたい90%くらいでもうすぐ終わりそうなんですが、
結局今日も懲りずに質問に参った次第でして…。

最後にGUIアプリによくある「実行ファイルにファイルをドラッグ&ドロップすると
ファイルを読み込む」と言うのを実装しようと思ってます。
んで自分なりに調べた所、前にやってたVBだと
command.comから引数を取ってなんちゃら…と言うのがあったと思ったので、
Delphiでもそれを応用してみようと思ったのですが、
…いかんせんまだ初心者なんでどうにも調べようがなく…(;´Д`)
(Memoコンポーネントにドラッグ&ドロップするのは出来たんですが)

厨房的な質問ではございますが、ご教授頂ければ幸いです。

>>52さん
私も学校の課題で自分しか学んでないのでかなり孤独です。
VBに詳しい友達となんとか手取り足取りやってますが、
やっぱり噛み合わない部分も多かったりでいろいろ疲れますな(笑
>>181 ParamStr をヘルプで 
でも、ParamStrだと、スペースの入ったパスが分割される問題が。

Name1 := ParamStr(1);
Name2 := Name1 + ' ' + ParamStr(2);
if FileExists( Name2 ) then FileName := Name2 else
if FileExists( Name1 ) then FileName := Name1 else
FileName := '';

とか?
>180
>(4) 各セルにフォント情報を埋め込めるようにする(Cells[x,y].Fontみたいに)
StringGridならObjectsプロパティを利用するのがいいのだろうけど、DrawGridにはないのか・・・。

Grid系って妙に重いような気がするので、1から作っちゃった方がいいかもしれない。
昔、マインスイーパーをDrawGridで作ったらゲームにならなかったのでPaintBoxで
描画するように作り直した覚えがある。
>>179 RTTIを利用したいかどうかだけなので、あんまり考えなくていい所のように思います

フォームを継承するような場面で、そのユニットには.DFMを持たせずに
 下位クラスの別.DFM で初期化させたい時とかには手動で書いたりしますけど

後、RTTIを使って 列挙型の文字列を取りたい時くらいかな
>>183 Drag&Dropなら ""が付いて自動的にParamStrが解釈して ""を取り外してくれるよ
187186:02/01/25 11:08
コマンドライン入力がそのまま欲しい場合は GetCommandLine というAPIを使うといいよ
18843:02/01/25 11:21


沢山の回答ありがとうございます。
やはりParamStrを使うのですな。(182,183さん)
187さんのGetCommandLineと言うのも良さそうなので、
とりあえず自分なりに解釈して頑張ってみます…。

ハマったらまたお世話になるかもしれません(;´Д`)(ぉ
18943@ハマリ中:02/01/25 13:36
すいません、ParamStrについて質問させてください(;´Д`)

Param関数において、
ParamStr(0)が実行ファイルのパス、
ParamStr(1)がその後に続く値、
ParamStr(2)がその後…と言う感じに続くのであれば、
Windowsの[ファイル名を指定して実行]で行うコマンド…
つまりはメモ帳にパラメータを追加して実行するみたいに

 notepad testfile.txt
   ↑     ↑
 ParamStr(0) ParamStr(1)

と解釈して良いのでしょうか?
それだとParamStr(1)に対する処理を書けば良いのかな?
と思っているのですが…。
>>189 その通りです。ParamCountで数がわかります
IDEの実行メニューの実行時引数に色々入れて試してみては?
>>189 うろ覚えだけど ParamStr(0)はフルパスじゃなかったかな
notepad testfile.txt "this is a pen.txt"
なら
ParamStr(0) = c:\windows\notepad.exe のようにフルパス
ParamStr(1) = testfile.txt
ParamStr(2) = this is a pen.txt のように " は除かれる
19343@ハマリ中:02/01/25 14:01
>192さん
では、空白の入るファイル名に関して特に懸念することは無いのでしょうか?
>>193 無い
ためしにやってみれば判るが 複数ファイルを同時にD&Dしても自動的に""が付いて
Delphi側で除かれるから
19543@ハマリ中:02/01/25 14:10
ありがとうございます。
しばらく作業してみます。
>>178
×→DrawCellEx
○→DrawTextEx

×→Options := DT_NOPREFIX or DT_WORDBRAK;
○→Options := DT_NOPREFIX or DT_WORDBREAK or DT_EDITCONTROL;

>>180
文字列グリッド(TStringGrid)で作ってみました.Delphi4以降専用です.
(セルごとのフォント指定は実装していません)

フォームに文字列グリッドを貼り,グリッドのAlignプロパティをalClientにして,
フォームのOnCreate,OnResize,グリッドのOnDrawCellイベントハンドラ
およびUpdateCellHeightsメソッドを以下のように書きます.

const
cDefaultDrawTextOptions = DT_NOPREFIX or DT_WORDBREAK or DT_EDITCONTROL;

procedure TForm1.FormCreate(Sender: TObject);
var
aRow, aCol: integer;
begin
for aRow := 0 to StringGrid1.RowCount - 1 do
if not (aRow in [1, 4]) then
for aCol := 0 to StringGrid1.ColCount - 1 do
StringGrid1.Cells[aCol, aRow] := format('This cell is %s 行 %s 列', [
StringOfChar('R', aRow), StringOfChar('C', aCol)]);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
// グリッドのセルの幅の変更…(1)
StringGrid1.DefaultColWidth :=
StringGrid1.ClientWidth div StringGrid1.ColCount - StringGrid1.GridLineWidth;
// グリッドのセルの高さの変更…(3)
UpdateCellHeights;
end;

(つづく)
(つづき)

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.FillRect(Rect);
// ワードラップして描画…(2)
DrawText(StringGrid1.Canvas.Handle, PChar(StringGrid1.Cells[ACol, ARow]),
-1, Rect, cDefaultDrawTextOptions);
end;

// グリッドのセルの高さの変更…(3)
// フォントやセルの文字列を変えたときにはこのメソッドを実行してください.
procedure TForm1.UpdateCellHeights;
var
aRow, aCol, MaxHeight, aHeight, MinHeight: integer;
aRect: TRect;
begin
MinHeight := StringGrid1.Canvas.TextHeight('gM');
for aRow := 0 to StringGrid1.RowCount - 1 do
begin
MaxHeight := MinHeight;
for aCol := 0 to StringGrid1.ColCount - 1 do
begin
aRect := Bounds(0, 0, StringGrid1.ColWidths[aCol], 1);
// ワードラップして描画したときの高さを求める
aHeight := DrawText(StringGrid1.Canvas.Handle,
PChar(StringGrid1.Cells[aCol, aRow]), -1,
aRect, DT_CALCRECT or cDefaultDrawTextOptions);
if aHeight > MaxHeight then
MaxHeight := aHeight;
end;
StringGrid1.RowHeights[aRow] := MaxHeight;
end;
end;

198デフォルトの名無しさん:02/01/25 23:36
TWebBrowserでActiveXのビデオ表示した場合、
音が出ない形で表示されちゃうんだけど、
これはなぜでしょう?
一応、検索してみたけどヒットしないみたい…。
199198:02/01/26 00:05
「<OBJECT>のタグで」が抜けました。同じ物をIEで見ると、
普通に表示されます。不思議…?
Windowsのボタンやメニューで標準で使われているフォントを調べるのって、
直接レジストリを見に行かないとできないんでしょうか?
D6で自作コンポ作ったのだが、都合で他の奴がAccessからそのコンポを使いたい
とケチつけやがった、そこで、ActiveX版も作ってやろうとした、
ActiveXなんて初めての挑戦だったのだが、Borlandのホームページ見ると
VCLコンポから簡単にActiveXが作れるような事が書いてあった。で、
新規作成の所でActiveXコントロールを選択しても、VCLの欄に俺のコンポが
出てこないのだがなぜ?(他のは出てくるし、俺のもEditから派生させた
のは出てる)非ビジュアルコンポってActiveXにできないのか?
>>201 非ビジュアルは出ない
継承元をTComponentからTWinControlかTCustomControlに
>>202
やぱし、そーなの?助かったよ、ありがと。これでAccess野郎も喜ぶだろう。
でも、継承元がTComponentなコンポはなぜ出てこないの?継承元が単純すぎるから?
204デフォルトの名無しさん:02/01/26 14:01
TServerSocket使ってたものです。挙動が異なり困っています。具体的には…

クライアントがサーバに接続している際、クライアントプログラムを一方的に強制終了すると、サーバ側ではエラーにならず、切断イベントが発生していました。が、

自作サーバクラス内に TServerSocket を組み込んで使用したところ、
クライアント側が強制終了するとエラーが発生するようになってしまいました。どこがいけないのでしょう?

type
TReportEvent = procedure (Sender:TObject; AText:string) of object;

TChatServer = class( TComponent )
private
 { サーバソケット }
 Server: TServerSocket;
 FOnReport:TReportEvent;
 procedure SetPort(const Value: Integer);
protected
 { TServerSocketのイベントに関連付けるイベント手続き }
 procedure OnClientConnect(Sender:TObject;Socket: TCustomWinSocket); virtual;
 procedure OnClientDisconnect(Sender:TObject;Socket: TCustomWinSocket); virtual;
 procedure OnClientError(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);virtual;
 { ステータスやログ等を出力 }
 procedure Report(AText:string);
public
 constructor Create( AComponent: TComponent ); override;
 destructor Destroy; override;
 procedure Open;
 procedure Close;
 property Port:Integer write SetPort;
published
 property OnReport:TReportEvent read FOnReport write FOnReport;
end;

const
 SocketErrorMessage:array [TErrorEvent] of string = (
  {eeGeneral} 'ソケットは,どのカテゴリにも属さないエラーメッセージを受け取った',
  {eeSend} 'ソケット接続に書き込もうとしたときにエラーが発生した',
  {eeReceive} 'ソケット接続から読み出そうとしたときにエラーが発生した',
  {eeConnect} '接続要求が完了できなかった',
  {eeDisconnect} '接続を閉じようとしたときにエラーが発生した',
  {eeAccept} 'クライアント接続要求を受け付けようとしたときに問題が発生した',
  {eeLookup} 'LOCKUP ERROR'
 );

205デフォルトの名無しさん:02/01/26 14:01
implementation

{ TChatServer }

procedure TChatServer.Close;
begin
 Server.Close;
end;

constructor TChatServer.Create(AComponent: TComponent);
begin
 inherited;

 { Server の生成と設定 }
 Server := TServerSocket.Create( Self );
 Server.ServerType := stNonBlocking;

 { イベントの関連付け }
 Server.OnClientConnect := Self.OnClientConnect;
 Server.OnClientDisconnect := Self.OnClientDisconnect;
 Server.OnClientError := Self.OnClientError;
end;

destructor TChatServer.Destroy;
begin
 Server.Free;
 inherited;
end;
206デフォルトの名無しさん:02/01/26 14:02
{ クライアントが接続した際に発生(TServerSocketに関連付けられるイベント) }
procedure TChatServer.OnClientConnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 Self.Report('[接続] /アドレス:'+Socket.RemoteAddress);
end;

{ クライアントが切断した際に発生(TServerSocketに関連付けられるイベント) }
procedure TChatServer.OnClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
 Self.Report('[切断] /アドレス:'+ Socket.RemoteAddress );
end;

procedure TChatServer.Open;
begin
 Self.Server.Open;
end;

procedure TChatServer.Report(AText: string);
begin
 if Assigned( Self.OnReport ) then
  Self.OnReport( Self, AText );
end;

procedure TChatServer.SetPort(const Value: Integer);
begin
 Server.Port := Value;
end;

procedure TChatServer.OnClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
 Self.Report( '[エラー] '+ SocketErrorMessage[ ErrorEvent ] );
end;
207デフォルトの名無しさん:02/01/26 14:46
>>204
ちょっと漠然としてる感じがします。

1.「サーバ側ではエラーにならず、切断イベントが発生していました」というのは
  どういう条件だったんですか?
2.どんなエラーが発生するんですか?
3.エラーをトラップして切断イベントの代わりにはできないんですか?
Delphi6 Personalを使ってます。

FormよりForm内のコンポーネントが大きい場合にす小ロールバーが出ますよね。
そのスクロールバーのサイズってどう取得すれば良いんでしょうか?
ButtonSizeもSizeも0なので困っています。

後、タスクバーのWindowクラス名ってなんになるんでしょうか?
209デフォルトの名無しさん:02/01/26 16:24
保守age
210デフォルトの名無しさん:02/01/26 17:59
Delphi初心者です。
TMemoでファイルから読み込み表示するときに、
特定キーワードのみ文字色を変えたいのですが、
どうすればよいでしょうか。ヒントだけでも教えてください。
>>210 TMemoでなければダメですか?
シェアウエアとかのエディターコンポを使うのが簡単なように思うんですが?
>>210
TRichEdit使えば。
フリーのAFEditも色分けできるよん
俺はTEditor使いだが。
214デフォルトの名無しさん:02/01/26 19:36
kylixでも動くようにしたいので、TMemoの方法が知りたいです
あと(いつか)できたらソース付きで公開したいので、
シェアウェアとかフリーウェアを使わないでやりたいと思ってます
TMemoにコダワルと、とても難しい。
 自分でビュアー作った方がマシなくらい難しい
>>215
と、言うかテキストボックスってオーナードローできるの?
まだ見てますので>>208わかる方おられたらお願いします。
>>215
エディタ部分が分離可能な設計にしましょう

CLXベースで一から自作するんならそうでなくてもいいが。
219ねこま:02/01/26 20:47
「スクロールバーのサイズ」って漠然と言われてもねぇ……

GetSystemMetrics ?
>>219
試してみます。
>>219
できました。助かりました。
OCXをDELPHIで作って、VBから使おうとすると文字列が帰ってこないがなぜ?

function TTestOCX.REC(var fpRec:WideString):Integer;
begin
fpRec:='2ちゃんねる';
result:=0;
end;

-------------- vb -----------------
dim tmp_rec as string
dim rc as integer
rc=TestOCX.rec(tmp_rec) <--- tmp_recの中身は空になってる
>>222 WideString を使うなら 
 ええとど忘れした・・・とにかく VBから読める使える型にしてやっておくれ
224 :02/01/26 21:35
WinSightってどこかでDL出来ません?
Delphi6に入ってないんです・・
225224:02/01/26 21:38
解決しました・・・
スレ汚しスマソです・・・
226222:02/01/26 22:54
>>223
StringToWideChar使えって事かな?
227198:02/01/26 23:14
レス無かったか…。
どなたかTWebBrowserでobjectタグのメディアプレーヤ埋め込み型で
音が出ないことについて知ってる人はいないですかね?
自分だけなのかな?
TWebBrowserでは音声不可になる…ってことはあり得るのかな?
228名無し:02/01/27 00:22
他のアプリの、MainFormから3階層目のハンドル(TTabControlのハンドル)を得たいのですが、
 hHWND := FindWindow('TMainForm', nil);
 hHWND := FindWindowEx(hHWND, 0, 'TPanel', nil);
 hHWND := FindWindowEx(hHWND, 0, 'TPanel', nil);
 hHWND := FindWindowEx(hHWND, 0, 'TTabControl', nil);
としたところ、0が返ってきてしまい上手くいきません。
どこらへんがマズイでしょうか?

メインフォームにパネルが幾つか貼ってあり、その中の一つにまたパネルが貼ってあり、
そのパネルにタブコントロールが貼ってあるという状況です。
>>222
ActiveXでVBに渡すなら、WideStringじゃなくて普通にStringでいいだろ
230ねこま:02/01/27 00:49
TWebBrowser を貼り付けたアプリと IE とで code="〜" のパスの介錯に違いがあるのではないかと予測するがどうか?
231198:02/01/27 00:52
>>230
おっ!レスあるとウレシイですねー。
えーと、「音声のみ」不可となって表示されるんですよ。
動画(メディアプレーヤ自体も)は出るんです。
が、「音出ないよ」のマークになっちゃってるんですよねー?
もちろん、その動画(mpeg)は音あるし、IEで見るとちゃんと
音出るんです。不思議…??
232222:02/01/27 01:09
>>222 で書いた者です
>>223 VBで使える文字列の型がいまだに探し出せません(;;)
>>229 ocxの場合、DELPHIのStringは駄目だと思いますが、WideStringだから
駄目ってのはアリですか?単にプロパティで設定された条件により文字列を
返したいだけなのですが・・・。
233貧乏人:02/01/27 01:17
「delphiで作られた有名ソフトって何がある?」ってスレ
すごく短命でしたな。それほど浸透してない(?)ってことだろうか?

あの4800円くらいするデカイ本を本屋で見た。デカかった・・・。
欲しかったけど、高いなー。基礎編の方は割と必要なさげだった。
アレはエロゲーパッケージに通ずるデカさだ(藁
>>228
> どこらへんがマズイでしょうか?
たぶん、複数のパネルのうち TTabControl がのっかっているのと
ちがうのが最初に見つかるためでしょう。

以下の FindClassInChilds( ) 関数では、直接の子のほかに
孫、ひ孫...も検索して、指定のクラス名のウィンドウハンドルを
返します。見つからなかったらゼロを返します。

type
pFindData = ^TFindData;
TFindData = record
ClassName:string;
FindHandle:HWND;
end;

function GetClassNameString(hWindow:HWND):string;
var
p:PChar;
ret:integer;
begin
GetMem(p,100);
ret := GetClassName(hWindow,p,100);
SetString(result,p,ret);
FreeMem(p);
end;

function EnumCldProc(hWindow:HWND;Data:LParam):Boolean; stdcall;
begin
result := true;
if GetClassNameString(hWindow) = pFindData(Data)^.ClassName then
begin
pFindData(Data)^.FindHandle := hWindow;
result := false;
end;
end;

function FindClassInChilds(hParent:HWND;ClassName:string):HWND;
var
FindData:TFindData;
begin
FindData.ClassName := ClassName;
FindData.FindHandle := 0;
EnumChildWindows(hParent,@EnumCldProc,integer(@FindData));
result := FindData.FindHandle;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
hParent:HWND;
begin
hParent := FindWindow('TMainForm', nil);
Label1.Caption := IntToStr(FindClassInChilds(hParent,'TTabControl'));
end;

235誰か教えとくれぇ〜 :02/01/27 04:10
>>232
VCLからActiveXを作成したのであれば、自動で変換できなかった部分もある
かもしれない、もう一度ActiveX変換後のソースを眺めてみれ。
と、人の蝿おってる場合じゃない、折れもActiveXに挑戦中(^^;

折れが作った非ビジュアルActiveXだが、貼り付けた時にアイコンが表示さ
れないのだが、何処にアイコンを設定すりゃいいのさ、誰か知ってる?
236171:02/01/27 04:11
>>172
ほかの人はどうやっているのか気になったんです
ただDelphiでのクラスの作り方がよく解らなかったんで
クラス化するのは後にすることにしました。
今はタブ、ツリー、リスト、スプリッターの動的配列を確保して
インスタンスを生成してます

>>175
Borlandのページにタブとボタンを動的生成するページが有ったんで参考にしました。
取りあえず動作するようになり前に進みました。


今困ってるのは新規タブを作成した場合
一番左はしに出来てしまうのです。
右側に作りたい場合などはどうすればいいのか解る方がいたら
アドバイス欲しいです。

237デフォルトの名無しさん:02/01/27 04:26
>>200
//メニューのフォント
var
 lf: LOGFONT;
 nm: NONCLIENTMETRICS;
begin
 nm.cbSize := sizeof(NONCLIENTMETRICS);
 SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @nm, 0);
 lf := nm.lfMenuFont;
//
 lf.lfFaceName//フォント名
 lf.lfHeight//フォント高さ
 lf.lfWeight//700以上でBold
 lf.lfItalic//1の場合はitalic
>>228
最後だけ0を返すの?
239デフォルトの名無しさん:02/01/27 05:48
Shift-JIS ←→ EUC-JP 相互コンバートなコードを書ことしています。
String でデータがある時は ByteType を使って if 文を簡略化してますが、
文字コードしか無い場合には、すべて if 文で総当りしてコンバートするくらいしか
方法を思いつきません。その手しか無いのでしょうか???
もっと賢いやり方があるような気はしているのですが・・・・・
240239:02/01/27 05:53
ちなみに漢字は対象外にしています。
1バイト文字と2バイト文字が混ざっていますが
2バイト文字の方は英数字記号ひらカナなどの
合計500文字程度なので、少々おバカで無駄の多いコードでも
何とかなりそうではあるのですが・・・
241ムッチムチの名無しさん :02/01/27 05:59
ハイ!質問です。

IEを取り込んで、ボタンでIE上のフォームに記入するのはどのようにすればいいでしょうか?
パスワードとかIDとかを自動入力させるみたいな・・・
あの方はどちらへ逝かれたのでしょうか・・・。
243デフォルトの名無しさん:02/01/27 09:00
>>239-240
素直に既存のライブラリ(jconvert.pasとか)を使うわけにはいかないの?
244 ◆iWks40y. :02/01/27 10:10
 Delphi初心者です。
Delphi6.0PersonalとDelphi2.0を使っています。

ユーザーがキーボードを入力したのを、感知するにはどうしたらいいでしょうか?
フォーム上でなら感知することは出来ますが、フォームが非アクティブになると、
感知できません。TForm.OnMessageでも反応しないようです…。
どうかよろしくお願いします。
>>242
pちゃん?
246名無し:02/01/27 10:55
>>234
出来ました!
完璧ッス。
ありがとうございました!
247デフォルトの名無しさん:02/01/27 11:31
メニューアイテムの座標を知りたいのですが、なにか良い方法はありませんか?具体的には、メインフォームからの相対座標を取得したいのです。
そこで以下の関数を作ったのですが、3階層目あたりの
サブメニューになると、正確な値が取得できず困っています。

{ フォーム AForm からのメニュー AMenu の相対座標を得る }
function GetMenuRect(AForm:TForm;AMenu:TMenuItem):TRect;
 function ShiftRect(ARect:TRect;dx,dy:integer):TRect;
 begin
  Result:=Rect( ARect.Left+dx, ARect.Top+dy, ARect.Right+dx, ARect.Bottom+dy );
 end;
var
 DRect: TRect;
 IMenu: TMenuItem;
begin
 { その位置のスクリーンでの座標取得 }
 GetMenuItemRect( AForm.Handle, AMenu.Parent.Handle, AMenu.MenuIndex, Result );
 { フォームからの相対座標に変換 }
 Result:=ShiftRect( Result, -AForm.Left, -AForm.Top-24 );

 IMenu:=AMenu.Parent;
 while IMenu.Parent is TMenuItem do
 begin
  { その位置のスクリーンでの座標取得 }
  GetMenuItemRect( AForm.Handle, IMenu.Parent.Handle, IMenu.MenuIndex, DRect );
  { フォームからの相対座標に変換 }
  DRect := ShiftRect( DRect, -AForm.Left, -AForm.Top-24 );
  Result := ShiftRect( Result, DRect.Left, DRect.Top );
  IMenu := IMenu.Parent;
 end;
end;
248デフォルトの名無しさん:02/01/27 12:48
クラスのメンバー関数を呼び出したとき
そのクラスの先頭ポインタはどこにあるのですか?
Bレジスタかと思っていたのだけれどはっきりしない。
249239:02/01/27 12:51
>>243
なんと!こんな素晴らしいものが!
これで十分。全然オッケィです。
この前検索した時は見つけられなくて・・・
情報サンクスでした!
>>235
おっしゃる通りでした、有難うございました。
但し、私も非ビジュアルActiveXだが、貼り付けた時にアイコンが表示さ
れないです、非ビジュアルなocxだからそんなものなのではないでしょうか?
251 :02/01/27 18:11
別のアプリにF3押しを伝えるには↓でいいんですよね?
SendMessage(Form1.Handle,WM_KEYDOWN,VK_F3,0);

上手くいかないんですが・・・
別のアプリだったら、別のアプリのHANDLEなんじゃないの?
別アプリに送るのに Form1.Handle というのはあるまい
254デフォルトの名無しさん:02/01/27 21:55
これからDelphiを始めようと思って、Delphi 6 Personalを買おうと思っています。
超初心者にお勧めの本ってありますか?
おすすめのサイトなんかもあったら教えてください。
255書けませんよ。。。:02/01/27 21:57
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ 
personalは買うもんではなくダウソするもの。

実用に耐えるのはプロフェッショナル版。
257デフォルトの名無しさん:02/01/27 22:19
>>256
ダウンロードできるんですか?
それじゃあ製品版の意味ってなんなんでしょうね…
>>257
メディア、言語リファレンス本代。
5000前後でしょ。

それから、ダウソが面倒ならC魔蛾のCDに付いてるYO!
>254
PersonalならCDが付属する入門書を購入するという手も有りますよ。

http://www.ascii.co.jp/books/detail/4-7561/4-7561-4002-5.html

なんか「オフィシャル」って名が付いてるから良いかも。
260デフォルトの名無しさん:02/01/27 22:30
>>258
それだけで\5,000もするんですか…
C魔蛾って何ですか?

>>259
その本は超初心者がDelphiを始めるに当たっていい本なんでしょうか?
あれ。この著者、服部誠/謎さんじゃない。
262デフォルトの名無しさん:02/01/27 22:38
>>261
誰それ?
実際
見てきめれば?
264デフォルトの名無しさん:02/01/27 22:39
>>260
Cマガジン だYO!
1000円くらいするかな。
買う前にその月のCD-ROM内容確認してNE!
265デフォルトの名無しさん:02/01/27 22:42
>>263
そうですね。実際に見て決めたいと思います。

>>264
それって本屋に普通に売っているんでしょうか。聞いたことないです…
>それって本屋に普通に売っているんでしょうか。聞いたことないです…
うそ、、、もしかして僻地にお住まい?
267デフォルトの名無しさん:02/01/27 22:49
>>267
僻地… まぁ確かに田舎ですね。30分くらい歩かないと本屋ないですし…
268:02/01/27 22:50
間違えました。
>>266
ですね…
>>267
学生さんなら時間があるだろうから最寄の電脳街へ行ってみるといいよ
270デフォルトの名無しさん:02/01/27 22:56
>>269
今、ネットで検索して調べたんですが難しそうな内容ですね…
これ買って読んでいけるかものすごく心配です。
プログラム初心者の自分でも大丈夫なんでしょうか?
CマガはDelphi 6 Personalの入ったCD-ROMの入手用と割り切って
参考書は別に買ったほうがいいでしょう
(Cマガも読んで無駄にはならないと思うけど)
たとえ本が難しかったとしても、del本体は初心者にやさしいYO!
プロレベルになってコードが大きくなっても読みやすいし。

とりあえず、ダウソか安い本かで始めちゃえば。
273デフォルトの名無しさん:02/01/27 23:09
>>271-272
Cマガ買ってDelphi手に入れたいと思います。
これからDelphiの世界に足踏み入れますので、よろしくお願いします!
274259:02/01/27 23:14
>254
本屋で見かけたら買おうかなとは思って居るのですが、
見かけないので内容はよく分かりません。
私は、「基礎から分かるDelphi5」を買って勉強しました。

今、家にある雑誌を確認したところ、「日経ソフトウェア」の
一月号にDelphi6を収録したCDがついていましたよ。
275231:02/01/27 23:16
私はCにゃ「まだ」興味が無いので(delphiが先という意味)、
付録目当てにCマガ買うのはもったいないな…
と思ってたらテックウィンに付いてたのでラッキーでした まる。

あいやー、まだ問題が解決出来ない…(TT。なぜなんだー。
誰かTWebBrowserで作ったブラウザで「objectタグ」のビデオ、
音が出るぞ!って人いませんかね?うーむ。検索もしてるのだが、
うまくヒットさせられない…。潮時かな、ここでは…。
276デフォルトの名無しさん:02/01/27 23:44
>>274
ありがとうございます。日経ソフトウェアというのも実は恥ずかしながら聞いたことないです…
今度書店で「基礎から分かるDelphi5」を見てみたいと思います。

>>275
CマガジンってC言語なんかの雑誌なんですか?プログラムの総合誌かと思いました。
昔は C 言語マガジンだったが、とちゅうから Computer マガジンの C に
変わった。
ぼろくそいう人も多いけど、存在は知っておいても損はない。
>CマガジンってC言語なんかの雑誌なんですか?プログラムの総合誌かと思いました。
元々は「C言語の雑誌」だったけど今は「プログラムの総合誌」になったらしいね
279275:02/01/27 23:48
>C言語なんかの雑誌なんですか
です(^^;。
280275:02/01/27 23:52
>>278
ありゃ。そーなんですか。読んでなかったから…。
いつの間に総合誌に…。
>>253
なんとなく意味をくんで欲しかったのだが、
こー書けば理解して頂けるでしょうか?
var
wfHWND:HWND;
begin
wfHWND:=FindWindow('xxxxxxxx',nil);
if (wfHWND <> 0) then
begin
SetForegroundWindow(wfHWND);
keybd_event(VK_F3,0,0,0);
end;
282253:02/01/28 03:06
>>281
SetForegroundWindowは、Win98以降失敗の可能性大。
したがって、keybd_event() は目的のアプリに届かないよ。
283281:02/01/28 03:53
>>282
それは知らなかったよ
AttachThreadInputでスレッド結合しても駄目なのか?
284281:02/01/28 04:03
ちょっと調べて見た、
SystemParametersInfo 使ったらSetForegroundWindow 出来そうだが
285281:02/01/28 05:20
↑駄目だった
286デフォルトの名無しさん:02/01/28 06:26
japan.comp.lang.delphi
って何なのですか?
287デフォルトの名無しさん:02/01/28 06:28
news group
288デフォルトの名無しさん:02/01/28 07:27
吐田じゃねーが過去ログみろやゴルァ
SetActiveWindow…
これもだめぽ?
>>288は吐駄
291253:02/01/28 10:09
>>281
ここを読んでね。Cだけど参考になるよ。

必ずウィンドウをフォアグラウンドまたはアクティブにするには?
http://techtips.belution.com/ja/vc/0012/
29290:02/01/28 10:45
先輩に作品を見せましたが嘘だとばれてしまいました
こんどはちゃんと作ってこいと言われてしまい何を作って良いかわかりません
みなさんどうかお知恵をお貸しください
293デフォルトの名無しさん:02/01/28 12:51
OS作れ
Windows上で動くOSでいいですか?
>Windows上で動くOS
ワラタ
Personalを8000円で売ってくれた先輩なんか放置。>>292
29743@ハマリ中:02/01/28 13:10
43です。
ドラッグ&ドロップの件で土日を使って試行錯誤してみたのですが、
今ひとつ理解できない部分があり困っております。

(1)
project.dprにParamStr関数を使用した命令を記述して
ドラッグ&ドロップの処理をしようと思い、以下のように記述しました。

// -------------------
// project1.dpr (参考:ttp://www.w-frontier.com/tips.html
// -------------------

program Project1;

uses
Forms,Windows,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {FrmAbout};

{$R *.res}

begin
Application.Initialize;
Application.Title := 'Lite';
Application.HelpFile := 'C:\Program Files\Borland\Delphi6\Projects\20020117\readme.html';
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TFrmAbout, FrmAbout);
Application.Run;

Form1.DDFileOpen(ParamStr(1));
 
end.
(続く)
29843@ハマリ中:02/01/28 13:11
で、Unit1.pas(メインのウィンドウ)に

type
  TForm1 = class(TForm)
  Memo1: TMemo;
  StatusBar1: TStatusBar;
  …
  procedure DDFileOpen(Sender:TObject; var DFName: string);
  private
  { Private 宣言 }
  FName:string;
  DFName:string;

{$R *.dfm}
  …
  procedure DDFileOpen(Sender:TObject; var DFName: string);
  begin
  {D&Dによるファイルのオープン}
  // テキストが変更されていた場合
  if Memo1.Modified then
  case MessageDlg(ExtractFileName(FName)+'は変更されています。'+Chr(13)+Chr(13)+'保存しますか?',mtWarning,mbYesNoCancel,0) of
  mrYes:Save1Click(Sender);
  mrCancel:Exit;
  end;

  // [開く]の処理
  begin
  FName:=DFName;
  Memo1.Lines.LoadFromFile(FName);
  Form1.Caption:=Application.Title+' - '+FName;
  end;
  end;

などと書いてみたのですが、どうも上手く起動しない…と言うか、
これもしかして僕が全く見当違いな事やってたりしますか?
とりあえず自前でファイルを開く関数を作ろう(DDFileOpen)と思って作ってみたのですが。

「関数の勉強しろ(,,゚Д゚)ゴルァ!」と言われそうですが、
現在関数についていろいろ調べている最中です。
明らかに勘違いしている場所など指摘して頂ければ幸いでございます。
>>297
Application.Run はメインフォームが閉じるまで帰ってこない。
30043@ハマリ中:02/01/28 13:33
Runしてから値を渡すのだろうか、と思っていたのですが…。
では、CreateFormのすぐ後に記述してみます。

$R *.res}

begin
Application.Initialize;
Application.Title := 'Lite';
Application.HelpFile := 'C:\Program Files\Borland\Delphi6\Projects\20020117\readme.html';
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TFrmAbout, FrmAbout);
Form1.DDFileOpen(ParamStr(1));
Application.Run;
 
end.
>>298
>などと書いてみたのですが、どうも上手く起動しない…と言うか、
そもそもコンパイルできなでしょ? 関数の宣言と実装がことなり、
また、呼び出し時のパラメータも間違ってるよ。

TForm1 の OnCreate() イベントハンドラで

if Length(ParamStr(1)) then
Memo1.Lines.LoadFromFile(ParamStr(1));

というところから始めて下さい。
 

>>299
実のところそうとも限らんかったはず。
例外発生時なんかRunから戻ってきたような気が。

気のせいとか記憶違いだったらスマソ。

>>301
TForm1のOnCreateかOnShowイベントに書いてみたら?
>>295 昔ソフマップで売ってたMADO-OS って知ってるか?
グーグルしたらまだ現役でびっくり ttp://www.mado.info/
304301:02/01/28 13:42
>if Length(ParamStr(1)) then
訂正 if Length(ParamStr(1)) > 1 then
305302:02/01/28 13:54
おろ、レス番間違ってたスマソ
× >>301
>>298
30643:02/01/28 13:56
>>301さん

>そもそもコンパイルできないでしょ?
はい、出来ませんでした(汗

>TForm1 の OnCreate() イベントハンドラで〜
早速参考にさせて頂いたのですが、見事に出来ました。
あれだけ試行錯誤したのが…。

CとVBを少ししかかじった事しかなくて
自前の関数と言うのは少し無理があったかもしれません…。
次のアプリを作る際には勉強しておきたいものです。
ともあれ、色々とアドバイス有難うございました(´∀`)
あともう少し付け加えたいしたい機能があるので(と言っても簡単なものですが)
すべて実装して完成した際にもう一度ここに戻ってきたいと思います。

では、改めてありがとうございました。
ああなるほど
 実装部の
procedure DDFileOpen(Sender:TObject; var DFName: string);
は確かに手続きだけど、ホントはメソッドにしたかったんだね
procedure TForm1.DDFileOpen(Sender:TObject; var DFName: string);
 とクラス名を付けてやる事

それから上のForm1でのメソッド定義部はpublishに書いてあるけどpublicに移した方がいい

実際にやってみることも大事だけど
検索すればサンプルが見つかるので
そういうのを見て定義、実装の仕方を
参考にすると良いと思われ。
D&Dのやり方なんか定番なんだし・・・

そうすればぐいぐい実力アップだよ!
309301:02/01/28 15:26
>>308 同意。
43は、ちょっとしたコツさえつかめば、上達ははやい、とみた。
なかなか、根性もセンスもあると思いますよ。ガンバッテ!
31043:02/01/28 16:37
>>307さん
お察しの通りでございます。
ただVBの知識だけで作ったのでだいぶボロボロです(笑
クラス名が必要なのですか…よく叩き込んでおきます。
宣言の場所も…あぁ覚える事が多いw
今度時間が空いたときにじっくり取り組んでみますね。

>>308さん
助言ありがとうございますー。
とりあえず自分的には一通り検索をかけてみて、
どうしてもダメな場合に書き込むようにしております。
プロの皆さんから見れば他愛も無い質問だと思うのですが…
なかなか自分の思っているような解説をしているページを
探すのは難しいです(;´Д`)
ゆっくりではございますが、よく噛み砕きながらやりたいと思っております。

>>309さん
どもです。正直嬉しいです(*´∀`)
今回の学校の課題(卒業制作です)でDelphiは僕一人だけなので、
わざと自分を追い詰める感じでプログラミングしております。
今週末に提出なんでそれまで頑張ります!

では、また制作に戻ります。
>>310
メソッドの場合は場合は、そのクラスに宣言を書く。
そこで Ctrl+Shift+C を押すとそのメソッドの雛型ができる。便利だよ。

Personal版だと出来るかどうか知らないけど。
別noDelスレではレスの2〜5番目くらいに
参考、関連リンクがあって便利だったんだけど
このスレにはないな・・・
訂正:別no→別の
>>311
コードエクスプローラの機能らしくて、perだとできないぽ。
315TIcon:02/01/28 19:01
TIconにアプリケーションのアイコンを取り込んで保存するアプリ作っているのですが
Icon.Handle := ExtractIcon(HInstance,PChar(FileName),0);
にて取得したTIconオブジェクトの以下の症状で悩んでます。

1.アイコン取得後は256カラー(?)で表示されるが ファイルに保存後読み込むと
色が変わる(16色かな?)

2.一部のアプリケーションのアイコンを取得後保存しようとすると
 「ビットマップイメージが不正です」とエラーが出る。

以上なにか解決の手がかりなりそうな情報は無いでしょうか?
グーグルで検索したのですがなかなか情報が見つかりませんでした…
>>314
さんくす。perはダメですか。
この辺もperに解放しないとなぁ・・・>某島
317デフォルトの名無しさん:02/01/28 20:26
TButtonを枠付きのフラットボタンにするため、

凹んだボーダースタイルのパネル上に、ボタンを配置して使っています。

Panel.BevelOuter:=bvLowered;
Button.Parent:=Panel;
Button.Top:=1;
Button.Left:=1;
Button.Width:=Panel.Width-2;
Button.Height:=Panel.Height-2;

このようにすると、丁度フラットボタンに
枠がついたように見えます。
これを TFlatButton としてコンポーネントにしたいのですが、
どのようなコードを書けば良いのでしょうか。
PanelにButtonが「含まれている状態」とはいえ、これはあくまでも
Buttonなので…
これはButtonではなくPanelと見なされてしまうのでしょうか。
318昔はグレーゾーン(レ○タル屋)だったくせに:02/01/28 23:17
>>303
遅レスだが、なっつかしーなー(藁
なーんか、やってたなー。そーいえば。あのころはプログラミング
「なんだそりゃ」と思っていたけど。なにやら「早い早いィィッ!」
みたいな宣伝やってましたなぁ。思い出した。思い出した。
誰か使ってるヤツいんのかねー(藁
319318:02/01/28 23:20
わ。変なレスになってもた…。スマソ。
「プログラミング」は余計だす。トホホ。
320デフォルトの名無しさん:02/01/28 23:42
>>315
TIconは16色以外非対応。48x48とかも非対応。
全部自分で管理するしかなかばってん
MADO-OSはWindowsXPになって現役だよん
322315:02/01/29 00:54
>>315さん

やっぱそうなんですか、なんとなく思っていたのですが
読み込み&描画が上手くいったのでそのまま保存して
やってました。
とりあえずTBitMapに変換してやります。

ちなみに保存時エラーになるのはかちゅ〜しゃを起動する
Kage.exeのICONです(w
323デフォルトの名無しさん:02/01/29 10:12
DELPHIで他のアプリを終了させるにはどうしたら良いんですか?
以下にあるフリーソフトみたいなことがしたいのですが
ttp://members.jcom.home.ne.jp/shinonon/gabaquit.html
324デフォルトの名無しさん:02/01/29 10:23
遅レスですがTMemoで質問した者です。
レスありがとうございました。>>215>>218
325デフォルトの名無しさん:02/01/29 10:25
>>320
TIconって、256色に対応したんじゃなかったっけ?
保存は知らんが。
厨房質問なんですが、DirectXについて質問。
・DelphiでDirectXを扱うことは可能か?
・可能なら単純なDirecxtXスクリーンセーバー程度の物なら、DelとVCどっちが開発楽?
>>326
>・DelphiでDirectXを扱うことは可能か?
可能。探せばunitが見つかる。
クラスライブラリもいくつかある。

>・可能なら単純なDirecxtXスクリーンセーバー程度の物なら、DelとVCどっちが開発楽?
GUI作らなきゃわざわざDel選択するメリットなし。
>>326
VC使えるなら、VC使っとけ。頭にDirectと付く類のは、その方が楽だ。
>GUI作らなきゃわざわざDel選択するメリットなし。
コンポーネント自作するだけの能力があるならメリット無い事もないだろけど
それはには先にDirectXが使える事が条件なわけで、
それが使えない人の場合は、サンプルがそのままコンパイル出来るVCが
楽という結論だな
330デフォルトの名無しさん:02/01/29 13:32
TGraphicControl を継承した自作コンポーネントをコンパイルして登録し、
フォームに貼りつけようとすると、
「コントロール””は親ウィンドウを持っていません」
といわれますが、どういうことですか?
331315:02/01/29 14:29
>>322 独り言になってる(鬱 >>320さんの間違いです

>>325さん
とりあえず保存以外は大丈夫です。とりあえず取得後すぐBMPに変換する方法で
対処しました。
>>326
資料の多さを考えると、VCでしょうな。
俺はそれでもDelphiでやってるけど
333デフォルトの名無しさん:02/01/29 17:54
そろそろ後少しでDel歴3年目突入なんですが、
未だ持って分からんことがあるので質問。

TFormのプロパティのデフォルト値なんですが、
AutoScroll := True
ShowHint := False
の2つのプロパティは何故デフォルトでこの値なんでしょうか?
自分にはこの2つは逆の方がよい気がしますが…

特にHintは未設定でも問題ないわけですし、
ユーザに優しいUI考えたらTrueの方がよい気がします。

いや「某陸がそう設定したから」「お前だけ」「変えれば済む話」
とか言われればそれまでなんですが、ずっと気になってまして。
334デフォルトの名無しさん:02/01/29 18:09
>>333

俺もHintプロパティ設定したのに、ツールチップ出てこねーじゃん、
と最初の頃ちょっと困りました。

確かに一度知ってしまえばたいしたことないんですが。
335(′∀`):02/01/29 18:33
1. 自分が使いやすいようにプロパティを変更したフォームを
右クリックして[リポジトリに追加]。適当な名前とか付けて登録。

2.ツールバーの[ツール]-[リポジトリ]で今登録したフォームを
選び、[フォームの新規作成時に使用]にチェックする。
336なゆなゆ:02/01/29 19:11
なんで、C_Builderじゃなくて、わざわざDelphi使うの?
すごく不思議。。。
337インディアソポーカ:02/01/29 19:19
今日、Cマガを買いました。Delphiもインストールしました。
それにしてもCマガって難しいですね…
338(′∀`):02/01/29 19:20
>>336
好みの問題としか言いようが無い。Delphi使ってる人間なら
逆の事を考えるだろう。
339デフォルトの名無しさん:02/01/29 19:28
でもさ〜、pascalよりC++の方が良いようなような気がする…。
>>339
だから立場が違えば逆だってば。

とかいいつつ最近はBuilderもいいかなって・・・思ってる。鬱。
Delphiはストレスが無いから。>>336
BCBで大型コードコンパイルすると鬱。
ヘッダーファイルってのも時代遅れナ気が。
だって、コード小さくても展開されるし。
342339:02/01/29 19:46
ほうほう。いや、知り合いにもDelphiユーザー一杯いるからDelphiの魅力を聞いてみたかっただけです。
343名無し:02/01/29 19:47
>>336
自分としてはBuilderも使ってみたいと思ってるんですが、
学生には少々値段高くて手が出しづらいです。
コンパイラは使ってますけどね。
Delphiは無償版を使ってます。
344339:02/01/29 19:49
>>343
すいません…。無償版のリンク貼って貰えます?
使ってみたいかも…。
>341
爆速のコンパイルは何ものにも代え難い。
346339:02/01/29 19:53
すいません。メインページに無償版がありました。
今日から使ってみます。皆さんの仲間になるかもです。。。
347デフォルトの名無しさん:02/01/29 23:05
また一人地獄に向かうか…。
クソ!何人の犠牲をだせば気が済むんだ!
おまえらRuby仕え!!!
一人でどうぞ
>>347
そんなに Ruby 使いたかったら、Apollo でも使ったら?

http://www.users.yun.co.jp/~moriq/apollo/

Ruby でデータベース処理もできるしねぇ。
Ruby厨氏ね。
351デフォルトの名無しさん:02/01/30 00:44
バイナリファイルからテキストを抜き出したいのですが、

[offset]: +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F 0123456789ABCDEF
----------------------------------------------------------------------------
00000000: 97 E9 96 D8 00 88 C9 8F 57 89 40 00 90 58 00 鈴木.伊集院.森.

例えばこんな感じで文字列の長さは不定なので$00なら終わりと判定してます。
また、文字列の数も不定なのでひとつのString変数を使いまわしてTMemoなどに
渡しているのですが、どうもケツにゴミがついてしまいます。

m:TmemoryStream;
s:String;
b:Byte;
c:Char;
i:Integer;

for i:=1 to 終わり値 do
begin
m.Read(b, sizeof(b));
c:=Chr(b);
s[i]:=c;
end;

大体こういう流れなのですが、String変数を初期化(?)しなければ
ならないような気がしつつも方法がわかりません。

こういう場合は普通こうやるんだよ、みたいな
セオリー的な方法があったら教えてください。
>351
SetLengthを調べてみ。
サイズがわかってるのならSetLengthで良さそうだが。
s := s + c;
の方がいいんじゃないの?

m.Read(c, SizeOf(c));
でもよさそうだし。
355デフォルトの名無しさん:02/01/30 01:11
>352
>353
ああ、こんなのがあったのですね
早速SetLength使ってみます、どうもありがとう!

>354
すみません、説明を割愛したのですが一旦バイト単位で
データを取得する必要があって、351みたいにしてました。
その処理を別で済ませれば354の方が簡単なんですよね。
ちょっと考え直してみます。助言ありがとう!
>>347
お前面白い、テンプレとして使わせもらうよ(w
>>351
SetLength(s,終わり値+1);
m.Read(pChar(s)^ ,終わり値);
s:=pChar(s);
Del初心者です、宜しくお願いします。

データベースのテーブルにデータを追加する際に、
レコードのキーを MAX + 1 で取得したいのですが、
簡単な方法はありますか?
PostgreSQLとDelphiでシステム考えていますが、
PQコンポ使うのとODBC経由で作るのとどっちがいいと思いますか?
自分的には、ODBCの方がいいような気がするのですが、レスポンス
テストしたらPQコンポも捨てがたい・・・。
そーいや、最近のKylix等でのMySQL関連の動向等をみても、
今後は、DelphiにおいてもBDEの幻想は崩れたのでしょうか・・・。
ディレクトリを取得したくて

FindFirst('C:\*',faDirectory,SearchRec);

としてみたところ、なぜか全てのファイルが取得されてしまったのですが、何が悪いんでしょうか?
>360
APIの仕様です。取得したファイルから自力でディレクトリだけを抽出しないといけません。
DelphiでDLL作ったんだけどさ、上手く動きません、たぶん、
DLL内でグローバル変数を使って処理しようとしてるからだろうと思うが、
結局、DLL内で定義されたグローバル変数は、どの段階で破棄されてるの?
呼ばれた関数が終了した時?(1つのDLLに複数関数がある)
呼んだプログラムが終了した時?
それとも、明示的に破棄するような処理が必要?
363デルファイで遊ぼう:02/01/31 04:00
右舷猿人直撃です浣腸!age
364 :02/01/31 04:12
マルチポストまがいですが下記の質問にお願いします。。。
http://pc.2ch.net/test/read.cgi/tech/1006602102/973
MSDNの英語版FindFirstFileより抜粋
This function searches for files by name only; it cannot be used for attribute-based searches.
日本語版に頼ってるとたまに落とし穴にはまります
日本語でだってちゃんと書いてある
持ってるのが古いせいかな?
普段使ってるのはPlatformSDKのヘルプだけど、日本語で持ってるのはVS6についてたやつだから……
(もう一回見直してみたけど書いてないし…)
368?切望?:02/01/31 06:37
「Delphi オブジェクト指向プログラミング」塚越一雄著、技術評論社刊
の復刊へむけて投票よろしくお願いしまーす >ALL

http://www.fukkan.com/vote.php3?no=4407
>>364
大抵の人向こうも見てるから意味ないってーの(それがマルチポストって言うやつだよ・・・
>>359
確かにBDEはびみょーに使いづらい感があるが、まあ妥当なところだと思ってる。
dbExpressって接続エンジン + ClientDataSet(?)だから扱い的にはBDEとそう大差はない。
>>358
やり方は大きく分けて2通り
1.データベースに任せる
 @Accessならオートナンバー
 AParadoxならカウンタ型
 BOracleならCREATE SEQUENCEを使う
2.プログラムで処理する
 @起動時に最大値を変数へ読み込んでおいて
  レコード作成時に加算してゆく
 A毎回SQL等で最大値を所得する

単にユニークなインデックスが欲しいだけなら
データベースに任せたほうが確実
あるアプリの起動を知りたいんですが、
どんなAPIを使えばよいですか?
>>372
EnumWindows

374372:02/01/31 19:34
どうも。やってみます。
375373:02/01/31 19:45
でも実はそれだけでは不完全なんだわ。理由は自分で考えてくれ。

とりあえずEnumWindowsの使い方。コールバック関数という奴だ。
(ListBox1とButton1を用意しる!)

function EnumWindowProc(Handle:hwnd; lParam:Integer):Bool; stdcall;
var
  szTitle:array[0..255] of char;
begin
  If GetWindowText(Handle, szTitle,255 ) > 0 then Form1.ListBox1.Items.Add(szTitle);
  Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox1.Clear;
  EnumWindows(@EnumWindowProc, 0);
end;
376372:02/01/31 20:27
373サン、ありがとうございました。
あと、起動したアプリのある場所を割り出したいんですが、
そんな事は出来ますか?
377not 373:02/01/31 22:09
>>376
位置というのがEXEのフルパスなら
http://www.microsoft.com/japan/support/kb/articles/JP175/0/30.asp

そのまんまウィンドウ位置なら
→GetWindowRect API
378372:02/01/31 22:20
>位置というのがEXEのフルパスなら
それです。ありがとうございました。
>>359
>>370
しかし、現実問題としてBDEの優位性は損なわれつつあるのも事実だろう、
359が書いたようにPgSQL等を使う場合、ODBCを経由させてBDE接続させる
意味は希薄になる、しかもDBGrid等の既存コンポが使えない事でのデメ
リットは、プログラム次第で補えるだろう、捨てがたい機能としては、
グリッドに対する更新処理とキャッシュアップデート機能だが、これを
実務で活かす事は難しいと感じる、俺は、PQコンポーネントの優位性の
方が高いと感じる。
380370:02/02/01 00:31
>>379
いまの仕事Oracle8iでやってるがDelのTransactionの扱いがいまいち不透明なんで
(Edit,Post/StartTransaction,Commit)CacheUpdate使ってます。
多少レスポンス悪くなるが、こっちのほうがわかりやすい。
ISAM感覚で使えるし。

あと、TClientDataSetってxmlでデータ吐き出せるからけっこう便利だNE!

おれがいまやってる仕事では低速回線(56kとか)でDB鯖と接続とかするから
そういう環境ではCacheUpdateは結構役に立つ。
ついでにDB鯖と切り離した場合(モバイルとか)も想定してるんで、
そうなるとClientDataSetつかうとかなり楽ちんですな。
381379:02/02/01 00:40
なる、当然ながら用途によってってことか・・・。
そう言えば、ParadoxはまだDel6に付いてるけど、あれ使ってる人いるのか?
Borlandは将来的には、今のParadoxの用途にMySQL辺りを据えたいと
思っているのかと感じたこともあったが、ノートPCが普及すると、
持ち出し時にDBを切り離す使い方ではなく、レプリケートしたりして
持ち歩く事が多いんじゃないの?(まぁ、携帯も常時接続的に使える
時代だから、そっちで対応するのかもしれんが)
デスクトップレベルでもOracleとか使うのが常識なのかな?
はい!先生!
Delphi(Pascal)のソースからJavaのソースを生成できますか?
ブルドッグソースか、おたふくソースなら出来(略)
>そう言えば、ParadoxはまだDel6に付いてるけど、あれ使ってる人いるのか?
DelのDBコンポーネントの機能を一番やりたい放題に使えるのはParadox
(Oracle等単方向のデータセットには色々制約がある)

俺はローカルデータベースとしては良く使うよ
DBLookupComboBoxとかも何の工夫もせずにリアルタイムで動作するし
(さすがにC/Sは無理があるのでOracleとかになるけど
 場合によっては併用も考える)
>>375
これをやってみたが

EnumWindows(@enumWindowProc,0);
のところで 変数が必要です というエラーが出る・・・なにか足りない??
386デフォルトの名無しさん:02/02/01 19:15
      ヘ  ⊂⊃ヘ
    ι/ヽ.∧__ ∧ヽ╋  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ιノ ノ  ( ・∀・) ┃< 1000ゲットして幸せになろう。
  ιノノ ノ⊂ __ †  つ  \_______________
 ιノノノ  /|__二二|. ┃
 ιノ   /_(__)_)┃ 
>>382
Delphi用のパーサー書いて、Javaソースにコンバートするアプリ書けば出来るけれど、
VCLのことを考えると頭が痛い
388382:02/02/01 22:11
そこまで作るならjavaで書き直した方がはやそうですね。
(誰か作らないかなぁ、需要あると思うけど・・・)
全くないわけではないが、無い。
>>385
ひょっとしたら、EnumWindowProcをTForm1のメソッドとして作っていない?
独立した関数として作らないとうまくいかないよ。
391悪いけど:02/02/02 00:25
無いと思う。
392391:02/02/02 00:29
>>388へ。
http://homepages.borland.com/dthorpe/products.html
Delphi J-code

compiling Delphi source code into a different machine code format - Java byte code.

394385:02/02/02 02:55
>>390 
なぜ独立してないとだめなのか全く解らないままですが
リストがうじゃうじゃと出てきましたー ありがとう。
395デフォルトの名無しさん:02/02/03 00:37
オフィシャルコースウェアの応用編買っちまっただよ。
アレについてるパッチは今、ボーランドのHPにアップされてる
ヤツと同じかなぁ?
なんで20メガもあるんだろう?
>>394
ヘルプでメソッドでも引いてみな
397デフォルトの名無しさん:02/02/03 04:49
TPen.colorってどうやって処理されてるんですかね?。
以下の2つの処理で重さが全然違ってしまいます。

処理1)
for i := 0 to 〜
Canvas.Pen.Color := clRed;
Canvas.PolyLine( 〜
Canvas.Pen.Color := clBlack;
Canvas.PolyLine( 〜
end;

処理2)
Canvas.Pen.Color := clRed;
for i := 0 to 〜
Canvas.PolyLine( 〜
end;

Canvas.Pen.Color := clBlack;
for i := 0 to 〜
Canvas.PolyLine( 〜
end;

描画している線の数は同じでも処理1の方がはるかに重い。
単にColorプロパティを変更するのがそんなに重いとも思えない。
Windows上での描画システムを根本的に理解できてないのでしょうか?


>Windows上での描画システムを根本的に理解できてないのでしょうか?
そうです
APIヘルプを見ると CreatePen はあるけど SetPenはないです
ですから Pen.Color:= も内部ではいちいち CloseObjectしてCreatePen SelectObjectしてるかと

試しに、ペンを2つ先に用意しておいて ペンごと交換してみては?
Personalユーザか・・・
401397:02/02/03 15:25
397でTpen.Colorについて質問した者ですが、
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl2.htm
このサイトとかを読んでボンヤリとですが、わかってきました。

TPenはGDIオブジェクトって奴で限られたリソースであって、
Canvasごとにインスタンスを持っているわけでなく、
リソースマネージャで管理され、いろんなとこと共有していると。
だからPenのプロパティをセットすると、いちいちリソースマネージャに共有できそうなPenがすでに存在するかどうか
いちいち問い合わせにいっちまうので、重くなってしまう。

こんなかんじの理解であってるかな?
つまり漏れがした質問はWindowsの問題であって、
このスレで聞く事ではないってことですな。スマソ、逝ってきます。
とりあえず 全角やめれ
>397
完全に間違い。GDI 処理が遅いんであって、それを極力回避するためのメカニズムが
リソースマネージャ。
ループ回数を100として、処理1だと毎回色を変えて描画。200回色を変えなきゃいけない。
処理2だと色の変更はわずか2回。
Ver2.0 以来、久しぶりにDelphiをいじってます。
メニューを追加しようとして、FormにMainMenuを配置し、テンプレート
のファイルメニューを選んだところでとりあえずコンパイルしたんです
がなぜかメニューが表示されないんです。他にしなくてはならないこ
とって、ありましたっけ?
表示させるだけなら他にはない。
406390:02/02/04 08:56
>>401

 単純にやるとTPen.Colorだけを変更したつもりでも実際には Windowsに対して
  CloseObject(Handle) -> CreatePen ->SelectObject
 と3つのAPIが呼ばれてしまいます。APIコールはそれだけで重い処理なので
 リソースマネージャを使ってそれを軽減する為にハッシュで検索する処理が入っ
 ています。

速度を追求しなければいけないなら
 ペンを先に2つ用意しておいて SelectObjectだけですむようにした方が速いです
 しかしそれよりも同じ色は連続して描画するとか APIコールを減らす為に
 Canvas.PolyLine よりもAPIのPolyPolylineを使うとかの工夫が必要です

しかしそういう事をする場合は、それを隠蔽するように上手に組んで下さい
でなければ 速度を追求する事が必要かどうか考えなおした方がいいでしょう
>>405
ですよね。なんでかなぁ。
408404:02/02/04 11:16
解決しました。FormのBorderStyleがbsDialogのままになってました。
1:多の関係にあるレコードの、多側の外部キー項目を画面で更新した際に、
1側の項目をテキストに表示させるにはどうすればよいのでしょうか?

ここまで作ってみました(以下

地区マスタ(1側)
顧客マスタ(多側)

1.顧客マスタの入力画面に、Queryで地区マスタと顧客マスタの結合したSQLを設定
2.初期表示状態では、きちんと地区に該当する項目がテキストに表示される
3.地区コードを変更しても、テキストに該当する項目が反映されない

SQLを設定しておけば、自動的に1側の参照項目は表示されると思うのですが
コードで書かないとダメなのでしょうか?

よろしくお願いします。



410デフォルトの名無しさん:02/02/04 20:06
再問い合わせ
またはTTableを使う。
412411:02/02/04 20:08
くばっ
アボーンで見たらすごいことに…。
初心者ですみません。
うんこはどうやってサポートできますか?
>413
面白いと思ったわけだ、君は。
>>414 冷静なつっこみにワラタ。
TDBGridを利用して、固定行をクリックなり右クリックなりで、
内容をソートしたいのですが、SQL解析してORDER BY句を入れる以外に方法ありますか?
>>413
寝なさい
>>416
そーゆーことをするためのローカルデータベースなのだが、近頃は嫌われることが多いようだ。
クライアントデータセット/Midas/Mybase を使う方法もある。

ただ、こったことをすればするほど、データ更新時の作業が面倒なことになるので
気をつけて。表示と更新を異なる画面にするのが楽チンかな。
419デフォルトの名無しさん:02/02/04 23:44
>>414 ワラタ。
>413
僕がサポートするよ。もぐもぐもぐ。
>表示と更新を異なる画面にするのが楽チンかな
プログラマの都合で使い勝手を悪くするのはいかがなものかと
422デフォルトの名無しさん:02/02/05 01:49
質問です。ごめんなさい。
1、form1のボタンにa:=yes;って書いてform2のedit1にedit1.text:=a;みたいな感じでやりたい時は
どのようにやればいいのでしょうか?

2、button1,button2とedit1をform1に配置。
button1を押した時にa:='yes!'
button2を押した時にa:='no!'
ってedit1のtextに入れたいんですが、button1,button2両方にedit1.text:=aって入れないと
上手くいきません。
edit1にedit1.text:=aって書くだけじゃ駄目なもんなんでしょうか?

解りづらくて申し訳ないです。ご教授お願いします。
当たり前だろ!!
変数に入れただけで何で関係ないコントロールの値まで変わるんだよw
424423:02/02/05 02:01
まあ、いいや


「uses Unit2;」を追加
Form2.Edit1.Text := 'yes';


Edit1.Text := 'yes!';
Edit1.Text := 'no!';

aはString変数でしょ?
変数に値入れても"使わなきゃ"入ったまんまよ?
すでに>>423-424が解説してくれてるけど一言

自分がやらなきゃ誰もやってくれないよ。
426デフォルトの名無しさん:02/02/05 02:43
>>423
あ!ありがとうございます!
1番わっかりました!感動です!HP色々見ても、意味不明だったんで・・・
ちょっと近道しすぎですね。(汗

2番なんですが、a:='yes!'で変数に入れます。そのままじゃ意味ないって事はわかるんですが、
そのaをedit1のtextに入れたい場合はどうすればいいのかと・・・・
var s:string;
s:='yes!!';
edit1.text:=s;
buttonに書けば出来るんですが、editではこれじゃ駄目なんですか?
イベントがないから???
一応やってみましたが、駄目でした。

>>425
あ、もちろんやってみましたよ。で、駄目なんで出来ないのかなぁと気になったので・・・
私の書いたの見るとやって無いように見えますね。すいませんです。
>>426
意味不明。
とりあえず付属のsample見て出直せ。


一応レスしとくが、
イベントドリブンだからイベントが発生しなければ(そのイベントの)コードは実行されない。
edit1.text := sをbutton1のOnClickイベントの間に書けば医院で内科医?
>あ、もちろんやってみましたよ。
そうじゃなくて
>変数に値入れても"使わなきゃ"入ったまんまよ?
という話。
>>426
おまえ、他所のDelphi板でもイベントのことで聞いてただろ?
430409:02/02/05 09:08
>>410 レスありがとうございます。

>再問い合わせ
>またはTTableを使う。

TTableで>>409の動作を実現するには
どうすればよいのでしょうか?

質問ばかりですいません・・・


431Delフサギコ:02/02/05 10:14
>>426
小学校の文章問題みたく
文章の意味が通じないのですが
単にローカル変数以外の変数を使いたいって事?

  ,,,,,,,,,,,,,∧,,∧   /
〜′,,,,,,,ミ,,゚Д゚彡 < あってるかな。
  UU""" U U   \

 Form1 = class...
 private
  FStr: String;
 public
 end;

procedure Button1クリック
begin
 FStr := '逝ってよし';
end;

procedure Button2クリック
begin
 Edit1.text := FStr;
end;

procedure Button3クリック
begin
 Edit2.Text := FStr;
end;
>>426
もしかして2番はこういう事をしたいのかな?

TForm1 = class(TForm)
   |略
private
procedure SetEditStr(const Value: string);
public
property EditStr : string write SetEditStr;
end;
   |略
implementation
   |略
procedure TForm1.SetEditStr(const Value: string);
begin
Edit1.Text := Value;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EditStr := 'yes!';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
EditStr := 'no!';
end;

違うか…
 ところでDelフサギコさんは見かけますがモナーさんは居ないのですか?
>>432
>>1
>DELモナは時に私であり、時には別の人。
あなたがやってもいいです。
434432:02/02/05 12:14
ぎゃー >>1に書いてあったのね すみません

>>433
>あなたがやってもいいです。
DelはWinがわからんので無理かな 現役の頃はTP3〜5なので…(鬱

Pasはカセットテープに入ってた頃からっす(w
>434 それくらいのレベルがこのスレでは丁度いいかも
436435:02/02/05 12:49
いや、バカにしてるんじゃなくて、質問者が質問し易いという意味ですよ
>>409
TTableの項目エディタで新規作成−参照項目でOK
438デフォルトの名無しさん:02/02/05 15:25
Delphiで640x480のフォームを解像度変えてフルスクリーン化する方法って無いですか?
よくDirectXとかでやってるやつです。

>>438
DirectX 使えば?
Windows の通常の API では画面解像度の変更はできないから、ビデオドライバ依存、
または DirectX API を使うしかない。
この瞬間ChangeDisplaySettingsはAPIではなくなったようです
この瞬間ChangeDisplaySettingsはAPIではなくなったようです
この瞬間ChangeDisplaySettingsはAPIではなくなったようです
この瞬間ChangeDisplaySettingsはAPIではなくなったようです
この瞬間ChangeDisplaySettingsはAPIではなくなったようです
この瞬間ChangeDisplaySettingsはAPIではなくなったようです
>ChangeDisplaySettings
確実に他のウインドウ巻き込んでリサイズするので、
ちゃんとウインドウを元に戻してくれる手法を確立しない限りは使用しないで欲しい。
ゲームで使うのはもっての他。
OpenGL系で多くてこまる・・・

ただし、DirectXの場合でもタイミングによっては、
他のウインドウ巻き込むので注意されたし。
442デフォルトの名無しさん:02/02/05 17:30
>>441
アイコンが640x480にちっちゃくなっちゃうあれか。
まあしゃあ無いんじゃ無い?
443434:02/02/05 17:32
>>435-436
いえいえWinAPIに関しては十分馬鹿にされるレヴェルです。
なかなかWin絡みじゃない質問が無いのですが 出来る時はレスしてみます。
>>442
アイコンもそうだけど現在開いているウインドウね。
445デフォルトの名無しさん:02/02/05 20:36
初心者です。よろしくです。
TWebBrowserを含んだTTabSheetを作りたいと思い、
なんとなく下記のようにしてみたところ
[エラー] Unit1.pas(43): 読み込み専用プロパティに書き込むことはできません
と言われてしまいます。
どうやってparentを指定すればいいのでしょうか?

procedure TForm1.FileNewExecute(Sender: TObject);
var
NewTabSheet:TTabSheet;
begin
NewTabSheet := TTabSheet.Create(Self);
NewTabSheet.PageControl := PageControl1;
NewTabSheet.Caption := 'Page' + IntToStr(PageControl1.PageCount);
with TWebBrowser.Create(NewTabSheet) do
begin
Parent := NewTabSheet; //この行がエラー
Align := alClient;
end;
NewTabSheet.Show;
end;
構造体を作成して、文字列を入れたいけど?
type
 TRec = record
  aaa:char;
  bbb:char;
end;
<その後>
var
 wRec:TRec;
 wStr:String;
begin
 wStr:='12';
 wRec:=wStr; <---- これ駄目でしょ?

VBだと簡単なのだが、Delphiだと出来ない?
447432:02/02/05 20:57
>>446 何種類か方法はありますが可変部分を持つレコード型にしてみては?

type
 TRec = packed record
 case boolean of
  false : (aaa,bbb : char);
  true : (str : array[0..1] of char);
 end;

procedure hoge;
var
 Rec : TRec;
begin
 Rec.str := '12';
 :

packed 忘れないでね
448432:02/02/05 21:01
>>447 間違った ごめんなさい
449432:02/02/05 21:06
>>448 正解書けよ
type
 PRec = ^TRec;
 TRec = packed record
  aaa,bbb : char;
 end;

procedure TForm1.SetEditStr(const Value: string);
var
 Rec : PRec;
 A : string;
begin
 A := 'HOGE';
 Rec := @A[1];
 ShowMessage(Rec.aaa);

やっぱりpacked忘れないでね(詳しくはHELPを
>>449
それって代入になってないんだけど、>>446的にはどうなんだろ?
451446:02/02/05 21:16
みなさんありがとう、でもなんか違う感じがするのですが・・・

>>446 でやりたかったのは、代入した後で
wRec.aaa とか wRec.bbbが使いたいんですよ。
本当は、構造体の中は2つだけじゃなくてもっと複雑なんです。
使えるんじゃないの?
やりたいこともっと具体的に書いた方が良いかと。
453デフォルトの名無しさん:02/02/05 21:41
遅くなりましたがお礼を言わせてください。
>>427
わけのわからん、質問にレス感謝です!
でも、私のやりたい事はそうじゃないんです・・・
>>429
いや、まったく。初めてこの板に書き込みしましたが?
>>431
そうですね、自分の解らない事、伝えるって難しいです。
それは、知っておりました。
でも、わざわざレス感謝です。
>>432
ビンゴ!!!!!!!
そうです!そうしたかったのです!
あ〜すごくすっきりしました!ありがとうございます!!
いやぁ俺プログラム勉強する前に、日本語勉強するべきですね。
難解な文章を読み取ってくれてうれしいです(汗

でも、こうゆうのって、どう書いて説明すれば、いいんでしょう?
いつもは、ネットで検索かけてなんとかするんですが、今回はお手上げでした。

レスくれた皆様ありがとうございました。
454446:02/02/05 21:50
すみません、>>449で出来そうな感じがして、やってみてるんですが、
Rec := @A[1];
の所でエラーになってコンパイル出来ません、
(が必要な場所に:=があるとかって怒られてます。(T_T)
455446:02/02/05 22:10
>>449
本当に、ありがとうございました、出来ました!
当然ですが、僕が間違ってました。
 Rec : PRec;
の所が、
 Rec : TRec;
になってました。m(..)m
その後、HELPとか見て勉強したのですが、これって文字列の位置
つまり、文字列の格納してあるアドレスをポインタで渡してるって
事ですか?この方法で他の型の違う物でも無理やりバッファとか
に押し込んでおくとかも出来るのでしょうね、凄い。
実は、先月までVB厨房だったのですが、正月からVB捨てて
Delphiを勉強しているアホです。また質問するかもしれませんが、
よろしくお願いします。
型違い。PCharからPRecへの代入は禁止されてる。
Rec := PRec(@A[1])ならいけるはず。
にしても汚いコードだ。
素直に添え字かPChar使えよ。
457409:02/02/05 22:22
>>437
遅いレスですが、ありがとうございます。
早速、確認してみます。
458446:02/02/05 22:29
>>456 型違いの代入は駄目なのですか?
それは、もしも将来に型の仕様が変化した場合の為ですか?
やりたかったのは、StringListに溜まっている固定長のデータから
数十種類ある構造体へ振り分けてデータを分離して保存する為に
Copyで区切るよりも判り易いかな?と思っての事でした。
とりあえず、切り出しには成功したのですが、添え字を使っては
切り出しみたいな事は面倒になりますよね?
Delphi6をWindowsXP上で動かしている人いますか?
先日、ノートパスコンを買ったらWindowsXPHomeが入っていたのですが、
Delphi6でデバッグをしているときに、マウスクリックが5分後くらいに反応するくらい
重くなる場合があります。
メモリは512MBです。ステップ実行時によくおきます。
同じプログラムをデスクトップパスコン(Windows2000)でステップ実行しても全然OKです。
XPじゃダメなの?XPプロ版ならOKなの?
>>459
起きる人と起きない人がいるようです。
私は XPPRO を常用して問題起きていませんが、会社の XPHome でも問題が
起きませんでした。

システムの復元が ON になっていると、よけいな物を保存するので OFF にした方が
よい。という話を聞いたことがあります。確かめてみては?
うちのXPはDelphi固まってもタスクバーボタンを右クリックすると直る事がある。
462デフォルトの名無しさん:02/02/06 00:02
richedit上で右クリックしても無反応なのは仕様ですか?
DelphiはLinuxへ移植されてKylixが出来た、
WinCEやPalmへは移植されないのか?
特に今後WinCEはクライアントの主力になるのだろう、移植とまで
は行かなくてもクロスコンパイルが出来れば良いと考えるがどうか。
Palm 用の VCL のサブセットと Windows IDE ならサードパーティで出しているよ。

Palm は CPU パワーの問題。
CE はプラットフォームの寿命の問題から開発元の MS 以外ではサポートしづらいだろうよ。
CEはこれからしばらくは仕様変更が相次ぎそう
466462:02/02/06 00:42
アレ?richeditでのコピー&ペーストのメニュー(なんて言うんだっけ?)が
出ないのは至極当たり前なのかな?
オレの環境だけってこたー無いよね?ね?
でるよ
468462 :02/02/06 01:14
>>467
マジ?
469462:02/02/06 01:34
オレの環境、win95っていう素晴らしい環境なんだけど、
98以上だとメニューでるとか…。なんてこたーない?
なんか妙なこと聞いてる気がして赤面してしまふ。
popupmenuで指定して実装
471462:02/02/06 01:57
>>470
いや、最終的にはソレだとは思ってるんだけど、もしも!
「オレ以外の環境ではメニュー出るのにpopup実装しちゃったら!?」
愉快なことになりそうだったから(汗
472462:02/02/06 02:19
検索してみたら(何て検索したらいいのか思いつかなかった)、
「popup実装してみましょう」みたいなページがあった。
よーするに、出ないんだね。richeditでは。
エクスプローラでのファイル上の右クリックとまったく同じメニューを出すにはどうしたらいいんでしょうか?
API名だけでもいいので教えてください…
474457:02/02/06 09:18
>>437 さん
参照項目を使って、イメージしていた動作>>409を実現できました。
結果の報告です。
ありがとうございました。
>445
TOleControl(WebBrowser).Parent := NewTabSheet;
>>460 >>461
レスありがとです。
今日試してみます。
477445:02/02/06 18:29
>475
うまくいきました!
ありがとうございます!
478476:02/02/07 01:21
>>460
システムの復元をOFFにしたのですが、やはり固まります。
と、思ったら、Borlandのサイトに書いてありました。。。
どうやら、互換モードで動かすとOKらしいです。
今、見つけたばかりだから、まだ試してないけど。
http://www.borland.co.jp/delphi/devsupport/d6issues.html
479デフォルトの名無しさん:02/02/07 04:44
あの、どうにも納得いかないのですが、
プログラムの挙動が予想していたものと異なるので
ブレークポイントを設定し、ステップ実行したところ、
以下のようになりました。

http://www.geocities.co.jp/SiliconValley-PaloAlto/4845/delphi_nazo.png

つまり、

if ( A = False) and B then ...

と書いていて、A が False , B が True になっているにもかかわらず
if 文の中身が実行されなかったのです。

なぜ??

コンパイルされていないのかとおもい、念ののため再構築しましたが
結果は同じでした。どなたか、原因を教えてください。
480デフォルトの名無しさん:02/02/07 04:48
???
ところが、

if A = False then
 if B then ...

とやったら、ちゃんと実行されました。(??)
そのあと if (A = False) and B then に戻してみたら、また
おかしくなりました。 ???
481デフォルトの名無しさん:02/02/07 05:01
>>480
最適化がらみじゃない?

IDEで変数の中身をみてもそれが正しくないことがあるから
OutputDebugString 関数でログ出してみたら。
if (not A) and B then でも駄目?
ダメ元でもう1重かっこつけてみるとか・・

if ((A = False) and B) then
・>481のようにIDEでの変数が実際の値と異なるなら、
 実際の値を出力して確認する
・本当に同じ条件で、>480のような状態でちゃんと実行されるならば
 CPUウインドウでアセンブラレベルで見る
485484:02/02/07 07:36
実際には>481の可能性が大。
自分もよくはまりました。特にwith文の中などはよく間違えますね。
486Delフサギコ:02/02/07 09:08
  ,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,ミ,,゚Д゚彡 < 再現性のあるコード掲載しる
  UU""" U U   \_______________
487 ◆xDd9P2XM :02/02/07 11:12
>484 さんの
・本当に同じ条件で、>480のような状態でちゃんと実行されるならば
 CPUウインドウでアセンブラレベルで見る
が確実。

Player.Unfinish がメンバー変数ではなく関数呼び出しを伴うプロパティ
の場合、関数呼び出しによる副作用の問題もあり得るから(デフォルトでは
副作用が起きる評価は抑止するようになっているが)再確認を。
レスどうもありがとうございました。
再現性のあるコードは、なにぶんソースコードが入り組んでいるので、
単純化するのに時間がかかりそうです。今はトータルで4000行程度です。多分。

ご指摘の通り、Player.Unfinish は内部で GetUnfinish メソッドを呼び出しています。そういえば、ヘルプで関数呼び出しの副作用について呼んだような気がするのですが、どこに書いてあったか忘れてしまいました…

>>479
これは『ショートサーキット評価』と呼ばれるものです.

(A and B)がTrue(真)かFalse(偽<ぎ>)かを求める場合,
AがFalseならBがTrueであろうがFalseであろうが
(A and B)はFalseになります.

また,(A or B)でAがTrueだった場合は必ず(A or B)はTrueになります.

つまり,両方を調べなくても全体の結果がわかってしまう場合があるわけです.
Aの結果によってBを調べなくても全体の結果がわかってしまう場合に
Bを調べないやり方が『ショートサーキット評価』です.

Delphiのコンパイラはデフォルトで『ショートサーキット評価』を使うので
>479の例ではBの中の関数は呼び出されなかったわけです.

『ショートサーキット評価』を使いたくない場合は
『プロジェクトオプション』ダイアログの『コンパイラ』ページ,『文法オプション』の枠にある
『完全な論理評価(B)』チェックボックスをオンにします.

詳しくはDelphiのヘルプでキーワード『ショートサーキット』で検索してみてください.
ほんとにヘタぐらま。

論理式の評価結果が真なのに IF 文のなかに入っていかない(ようにみえる)
ということを問題にしているの。
>>488
おかしい部分の CPU 逆アセンブル結果だけでも貼れない?
>>488
あと、Delphi のバージョン。
493Delフサギコ:02/02/07 13:34
  ∧,,∧   /しかし、ショートサーキット評価
  ミ,,゚Д゚ミ <  が怪しいとは折れも思ってる
  ミ   ミ   \
〜ミ,UU_ミ  IFの所で勘違いしてるだけちゃう?


>再現性のあるコードは、なにぶんソースコードが入り組んでいるので、
>単純化するのに時間がかかりそうです。
怪しいなあ。

アセンブラみるとか言う前にコーディング全般を
見直した方がいいかも。
494484:02/02/07 13:52
>>488
>論理式の評価結果が真なのに
というが前提であると思ってるとハマるんだって。
本当に真なのかをうたがったほうがいいよ。
そこ、ステップ実行じゃなくて トレース実行してみたら?

GetUnfinish で再帰してない?
アセンブラでステップ実行すりゃ5秒で解明するよ
>>490
          ヽ(`Д´)ノ ゴウカイニカンチガイシタヨ゙!!
            (  )   ウワァァン!!
            / ヽ
498デフォルトの名無しさん:02/02/07 15:41
やっと最低限のコードが出来ました。

TChatClient を Create して、Test メソッドを実行してみてください。
そして、Testメソッド内の

if (Player.Unfinish = False) and UMsg then

にブレークポイントを設定して、値をみてみてください。
Player.Unfinish は False しか返さず、UMsg も必ず True になりますが、
IF 文は実行されませんです。

-----------------------------------------------------------
type
TPlayer = class
private
function GetUnfinish:Boolean;
public
property Unfinish:Boolean read GetUnfinish;
end;

TChatClient = class( TComponent )
protected
procedure Report(Player:TPlayer; Attr:Integer);
public
procedure Test;
end;


implementation

function TPlayer.GetUnfinish: Boolean;
begin
Result := False; { Falseしか返さない }
end;

procedure TChatClient.Test;
var
P:TPlayer;
begin
P := TPlayer.Create;
Report( P, 2 );
end;

procedure TChatClient.Report(Player:TPlayer; Attr:Integer);
var
UMsg:Boolean;
begin
UMsg := Boolean( Attr and 2 ); { UMsg は Ture になるはず。 }

Showmessage( Inttostr( Ord(UMsg) ) );

{ ここでおかしくなる }
if (Player.Unfinish = False) and UMsg then
begin
ShowMessage('B');
end;
ShowMessage('C');
end;
クリックするとファイル開くダイアログが出るボタンを作ろうとした。

unit Test;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls,Dialogs;

type
TFileSelBtn=class(TButton)
private
  FOpenDialog:TOpenDialog;
protected
public
  constructor Create(AOwnder:TComponent);override;
  procedure Click;override;
published
  property OpenDialog:TOpenDialog read FOpenDialog write FOpenDialog;
end;

implementation//------------------------------------

constructor TFileSelBtn.Create(AOwnder: TComponent);
begin
  inherited;
  FOpenDialog := TOpenDialog.Create(Self);
end;

procedure TFileSelBtn.Click;
begin
  inherited;
  FOpenDialog.Execute;
end;

end.

しかし、OpenDialogにプロパティをセットしても、実行時に反映されず、
プロパティの値もセーブできない。何が不足しているかおしえてきぼんぬ。
500ゲト(してなかったら藁ってくれ)

>499
FOpenDialogを自分でCreateする必要はない。っつーかしちゃダメ。

Clickイベントの所は
 if Assigned(FOpenDialog) then FOpenDialog.Execute;
のようにする。
>>498
UMsg := Boolean(Attr and 2);
で、UMsgがFalseになる。これって正しい挙動なの?非0はTrueなのかと思ってた。
D6PersonalをDLしたばかりの超が付く初心者の俺には分からんヽ(;´Д`)ノ
因みに、UMsg := Boolean(Attr and 1);だと、if文の中身が実行される。
502501@超初心者:02/02/07 16:12
ごめん、勘違い。
Report(Player, 1)で呼び出してたのが原因だった。
1 and 2が0になるのは当たり前だヽ(;´Д`)ノ

と言うわけで、D6Personalでは再現しないです>>498
503498:02/02/07 16:15
あ、私が使っているのは Del6 Pro です。
504501@超初心者:02/02/07 16:19
度々ごめんなさい。
ChatClient.testを呼ぶと確かにif文の中に入っていかないです。
Player.Unfinish = falseだしUMsgはTrueなのに、何故?不思議・・・・・
UMsg := Boolean( Attr and 2 );
のキャストが原因。

言語ガイドによると、Booleanは0がFalseで1がTrueだから、2は範囲外。
0がFalseで非0がTrueになるByteBoolでキャストすると正常に動作する。

これがバグか仕様かということだが、俺には判断できない。
Booleanに入る数値がいつかのバージョンで変わったことがあったような。
VB?に合わすとかなんとか。
506 ◆xDd9P2XM :02/02/07 16:40
う。遅かった。 >>505 正解。

微妙なバグだよ。うん。
大本をたどると C と VB とで論理偽の値が異なることが問題だったんだな。
OLE Automation 関係で VB 流儀が Windows に大量に流れ込んだ時点でいろんな
ところに破綻が起きた。MS-C / MFC にも影響がでている。

507Delフサギコ:02/02/07 16:50
フサは
   UMsg := Boolean( Attr and 2 );
こんなコードを自分で書くことは”絶対”ないので
すごく読みにくく感じるのですが
これって、いったい何がしたいのですか?
 ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
   ∧,,∧  ハテ?
  ミ,, ゚Д゚彡 
   〃つl⌒|⌒l
 〜ミ,,[ ̄ ̄ ̄.]
      ̄ ̄ ̄
ビットが1か0かを調べるには
なんか他に方法があったような気が…
508501@超初心者:02/02/07 16:59
>>498
えーと、分かったです。
if (Player.Unfinish = False) and UMsg thenの場合
Call Player.Unfinish
test al, al //Player.Unfinish = Falseの比較をしてるです。
setz al //必ずTrueになるから、最適化されたのかな?だとしたらtest al, alは無駄なような?
test al, bl //blはUMsgだから、文字通りPlayer.UnfinishとUMsgをandしてるらしい<オイ!
結果は0になるので、if文の中に入れないですよ(´д`;)

if (Player.Unfinish = False) and (UMsg) thenとしてやれば
test al, al
jnz //if文の外へ
test bl, bl
jz //if文の外へ
となり、OKでした。

UMsg := Boolean(UMsg and 2)してもUMsgの中身が2のままなのが妙に不思議な気もしますが・・・・・
509498:02/02/07 16:59
なんか、フサギコさん性格変わりました?
いぜんはそんなに嫌味じゃなかったような。

それはいいとして、
Boolean は非ゼロでもTrueとみなされないのですね。
というか実行時エラーオプションで
範囲チェックを有効にしているので、そういうのはエラーになると
安心していました。

以後気をつけます。
どうもお騒がせしました。
510505:02/02/07 17:01
>>506
ふぉろーさんくす。
OLE Automationか。すっかり忘れてた。

>>507
俺なら
UMsg := (Attr and 2) <> 0;
かな。キャストしなくても論理値になるし。

>>509
ギコ系だからそんなもんでしょ(w
511498:02/02/07 17:03
というか、ByteBool 使わずに素直に

UMsg := Attr and 2 <> 0

と書くことにします。
ヘルプから引用。
>範囲チェック 配列と文字列の添字が範囲内にあるかどうかを検査する。
513501@超初心者:02/02/07 17:22
やっぱ、>>498の例はDelphiのバグでは?
試してみたけど、Booleanは非ゼロをTrueと評価してるように見える。
そもそも、(Player.Unfinish = False) and UMsgは
Boolean(Player.Unfinish = False) and Boolean(UMsg)と
見なすのが唯一の解釈で、Player.Unfinish and UMsgとは見なせない。
だって、UMsgはBoolean型だからTrue、False以外の値を持ち得ないのだから
それに、UMsgがTrue&Flase以外の値(この場合2)を持ち得るとすれば
Boolean型と非Boolean型のandってことになるから、コンパイルが通るのは
おかしいと思うんだけど、どうかな?
514 ◆woDeLPHI :02/02/07 17:43
検証用のコード
function A:boolean;
begin result:=false;
end;
var B:boolean;
begin
B:= Boolean( 2 );
if (A=false) and B then
caption:='OK';
end;

コンパイル結果
mov bl,$02
call A
test al,al
setz al
test al,bl
jz +$0c
mov edx,$00450324
mov eax,esi
call TControl.SetText

>>513 あくまでも、Boolean型なのに無理やり型変換したのがバグの原因です
  型変換は、その型を安全に変換してくれる訳ではありません
  型変換を使う時はそのチェックは自分ですべきです
515Delフサギコ:02/02/07 17:51
俺もトリップでヲーデルファしたいかも
インデントは全角スペースで。

|,,∧
|Д゚彡 ジー   
⊂ミ
| ,;゙   時々マターリが不足して
|´    カラダヂウ イヤミン に満たされたり…
     きっとあれですね。月に一度やってくるというアレ

フサならxバイト目のビット
を調べる関数を作ってしまうかな。

0000 0000 0000 0010
と and とって<>0
って何を表して…るんだ??

論理演算苦手なの。。。

ああ、きっとまた「おまえほんとにプログラマか?」
とか言われちゃう
>月に一度やってくるというアレ
狼男?娘男?
>>516
引用がちょっとズレているような?
513 は不満を表明しているようには見えんが。ただ、議論は
間違っているが。

デルファイありきで語ると、反デルファイは敵に見えちゃうらしいな(w

A, B: Boolean; A := Boolean(2); B := Boolean(4);とした時
if A thenはTrueとなり、if B thenもTrueとなるが
if A and B thenはFalseになり、if (A) and (B) thenはTrueになる。

対処はいくらでも可能だから、これをもってデルファイは云々と
言うつもりは全然ないけど、なんか美しくない。
520 ◆woDeLPHI :02/02/07 18:16
ヘルプ見てみました

>ByteBool 型,LongBool 型,または WordBool 型の値は,
>順序値が非ゼロの場合に True と見なされます。
>Boolean が期待される状況でこれらの値が使用された場合,
>コンパイラは順序値が非ゼロの値を自動的に True に変換します。

ここだけ読むと 常に0か0でないかで区別してるように見えますね
だから if A then ・・ という処理は Aが0でなければ実行されると思います

しかし、
>変数を論理型に型キャストしても結果は保証されません
という文もあります。これは論理演算を使う場合にはダメだよという意味と思いますよ


また、論理型は順序型の一つです ですから LOW(boolean)〜High(boolean)の
範囲になければいけません。
>>518
Delphiのバグにしたいようなので。
522 ◆woDeLPHI :02/02/07 18:23
理屈からいうと、たぶん論理型は0か1しかダメだよとしたいけど
それではAPIの呼び出しとか 他の言語と通信するのが不便だから
単独で条件分岐した場合は 0かそうじゃないかになるようにしたんじゃないかな

でもこれ気を付けないといけないな 特にAPI呼び出しとかでは論理演算使わないようにしないと
>デルファイありきで語ると、反デルファイは敵に見えちゃうらしいな(w
Delphiであろうとなかろうと、処理系よりも先に自分で書いたコードを疑うべき
ではないかと思っているだけ。
524519:02/02/07 18:46
>>522
省略せず、if (A = True) and (B = True) thenとすれば、特に意識する
必要はないと思う。
勿論、if (A) and (B) thenでも構わないけど、省略はせず多少回りくどい
くらいの方がパスカルらしいかも?
>>524
案外 、
if (A <>False) and (B <>False) then
じゃないとダメだったりして
個人的には合法な手段(UMsg := (Attr and 2) <> 0;)があるのに、無理やりキャストしたほうがやっぱり悪いと思ふ。
527519:02/02/07 19:37
>>526
オイオイ、見えてねーな。もう誰もそんな話はしてないだろ?

例えば、Boolean型を引数に取るライブラリを組むとして、渡されたBooleanが
整数型をキャストしたものでないとは限らないだろ?
だから、ライブラリ内でif boolean and boolean thenを使う時は、()で囲むか
省略せず(boolean = True)しといた方が安全だというお話、OK?
例えば
if ( 1000-999-1 ) then
が行儀良いと思わんがのぅ
あほやなあ。
Boolean 型で渡されたっていうんなら Boolean 型でしかないからそれがどのような形で作られたかを気にする必要はないだろ。
今回は Boolean 型を作るときに Int 型を無理に Boolean 型にキャストするという非合法なことして自分のミスでバグったんだろ。
だからその関数が本当に Boolean 型で返ってくるんなら (boolean = True) なんて無駄なことをする必要はかけらもない。

要するに
UMsg := Boolean( Attr and 2 ); { UMsg は Ture になるはず。 }
の "なるはず" に問題があったって話じゃないか。

本人も UMsg := (Attr and 2) <> 0;) とすべきだといってただろ。

520 だって
>また、論理型は順序型の一つです ですから LOW(boolean)〜High(boolean)の
>範囲になければいけません

といってるだろ。

要するに 整数型 を 論理値型 に強制キャストするのが悪いっつーの。
C言語や Basic では論理値型として明示的に整数を使ってるけど Derlphi はそうじゃない。
>Object Pascal では論理型の式を整数や実数と等価に見なすことはできません。
とヘルプにもかかれているだろ。

Delphi は整数型と論理型を明確に区別してんだよ。
他言語と似たようなもんだと勘違いしてとろいこといってんじゃないよ。
>>528
行儀も何も非合法だってば。
Boolean のヘルプの下のほうの例にちゃんと書いてある。
例では X という整数変数を使ってるけど即値だって条件は同じ。
519 のソースなんて Integer を Boolean にキャストしている時点で非合法だよ。
たまたまうまくいっていると合法を勘違いしないで欲しいね。
Cで作られたDLLをDelphiで使った時に、Boolean でハマったことがあったな。
たとえば
 C側: void foo(BOOL bFlag);
 Delphi側: procedure foo(bFlag: Boolean);
のように宣言して、foo(True); を呼び出すと、foo には -1 が渡される。
Cの方では if (bFlag == TRUE) なんて判定してたから、
常にFALSEの方の処理しか実行されなかった。
DLLには手が加えられなかったから、仕方なく Boolean を Integer に
変えて対処したよ。

そんなわけで>524よ、Trueと比較するのはやめとけ。
>>532
論理型のヘルプを見る限りではそういった用途には Boolean ではなく ByteBool,WordBool,LongBool あたりを使うらしい。
> ほかの言語や Windows 環境との互換性を提供するために用意されています。
とも書かれてるしな。
おもしれーな、ここの議論。

個人的には、C の Bool がゼロ、非ゼロでキャスト可能なのより、
Delphi の Pascal の Boolean のほうが論理値という意味で純粋
なので好きです。でも、APIとの関連などで、どうしても代入しなけれ
ばならない時は、必ず、(式)<>0 の形で、論理値にしてから
代入すべきだと思っています。
Boolean に型キャストで代入するな!、ということで。

今回のことで自戒もこめて。

それから、if 文などの論理式のなかで Boolen 型の変数と
true または false を比較するのは二重に論理式を評価しているので
混乱するばかりか、冗長でもあると思います。
535デフォルトの名無しさん:02/02/07 22:21
こんばんは。初めまして。
C++Builderのexeをスタートアップに登録して
起動時にある処理を行いたいのですがその時フォームを非表示
にして処理を行いたいのです。
で,下記の様に記述するとフォームを非表示にできる事は
解ったのですが最初の処理をどこに記述したら良いかよく
解らないのです。
VBの場合だとSub Main()ルーチンに記述するのですが・・・
Formのshowイベントとかはまずいし・・・・・・
参考になる物があったら教えて下さい(T__T)
Application->ShowMainForm = false;
MainFormのOnCreateは?
537 ◆woDeLPHI :02/02/07 22:29
>>535
CTRL+F12 を押して、アプリ名と同じユニットを探して下さい

そのファイルの
Application->Run();
の前に入れると良いでしょう。

それから Builderスレは
http://pc.2ch.net/test/read.cgi/tech/997074601/
>>535
そもそも、フォームが必要ないならフォームを使わなければいいだけだろ。
なんで、非表示にする必要あるんだ?スレ違いだし。
>>535
WinMain
540459:02/02/08 01:50
XPの互換モードでDelphi6を動かしても固まった。。。
もうだめぽ。。
DelphiのBooleanはTrue = 1, False = 0
ByteBool, WordBool, LongBoolはTrue = -1, False = 0
とどこかのDelphi本で読んだような気がする。
542498:02/02/08 04:11
>>498
くっそー、おもしれーネタだったのに乗り遅れた(涙)
かなり遅レスだが・・・俺にも言わせてくれ〜!

そんな変な書き方がどーしてもしたいのならば、

> UMsg := Boolean( Attr and 2 ); { UMsg は Ture になるはず。 }
ここを

UMsg := (Attr=2);
こーだ。(w;
543542:02/02/08 04:14
はぁ・・・。俺が498になってらぁ・・・。(涙)
自作自演じゃねーよ、コピペミスってただけだい!
>>ByteBool, WordBool, LongBoolはTrue = -1, False = 0
正解。で VB 由来の値。-1 は正確には全ビット1が立った値です。

Windows そのものを作っている C では False = 0 で,それ以外の値は全部 True。
C には論理型は組込型としては存在しないことに注意。

MS-C/Visual-C では Version4 の時に VB-Bool とのすりあわせが行われたようだ。
ちょっと細かい時期まではわからない。

C++ には言語仕様に論理型が加わり,当然 ANSI-C++ としては C の論理型を踏襲したため
bool と BOOL の二種類の「論理型」が存在する。

bool
http://www.microsoft.com/JAPAN/developer/library/vccore/_langref_bool.htm

BOOL
(みつからん)
545ネタニマジレス:02/02/08 04:26
>>542
いや、それだと Attr := 2 or 4 とかってやってた場合に対処できないジャン

ヘルプ読まないやつ多すぎ。

>>544
ByteBool, WordBool, LongBool は
Ord(False) = 0
Ord(True) <> 0
と定義されてる。
-1 とは限らない。
-1 が True であるのは確かだが。
出遅れたか(w
ザクっと読んでみたが
1.if A and B then
2.if (A) and (B) then
の違いが理解できてる奴は半分くらいしかいないな。
これが理解できないと、本質的な問題は理解できないだろ。
>>547
そういう煽りはマ板で。
      ∧∧  ミ _ ドスッ
      (   ,,)┌─┴┴─┐
     /   つ 釣り禁止
   〜′ /´ └─┬┬─┘
    ∪ ∪     ││ _ε3
            ゛゛'゛'゛
>>547
 教えて下さい!
テストコード

program bool;
{$APPTYPE CONSOLE}
 procedure CheckBoolean(a: Boolean);
 begin
  if (a = true) then
   Write(True)
  else if (a = false) then
   Write(False)
  else
   Write('out of boolean range.');
 end;
const
 Ints: array [0..5] of Integer = (-1000, -1, 0, 1, 2, 1000);
var
 i: Integer;
 a, b: Boolean;
begin
 for i := Low(Ints) to High(Ints) do begin
  Write(Ints[i]);
  Write(', ');

  a := Boolean(Ints[i]);
  if a then
   Write(True)
  else
   Write(False);
  Write(', ');

  if (a) then
   Write(True)
  else
   Write(False);
  Write(', ');
  
  CheckBoolean(a);
  Writeln;
{
  // 場合によってはランタイムエラー
  a := Boolean(Ints[i]);
  Writeln(a);
}
 end;
 Writeln;

 a := Boolean(2); Write('a = '); CheckBoolean(a); Writeln;
 b := Boolean(4); Write('b = '); CheckBoolean(b); Writeln;
 Write('a and b = ', (a and b)); Writeln;
 Write('(a) and (b) = ', ((a) and (b))); Writeln;
 Write('CheckBoolean(a and b) = '); CheckBoolean(b); Writeln;
 Write('CheckBoolean((a) and (b)) = '); CheckBoolean(b); Writeln;
end.
実行結果(Delphi6 Pro)

-1000, TRUE, TRUE, out of boolean range.
-1, TRUE, TRUE, out of boolean range.
0, FALSE, FALSE, FALSE
1, TRUE, TRUE, TRUE
2, TRUE, TRUE, out of boolean range.
1000, TRUE, TRUE, out of boolean range.

a = out of boolean range.
b = out of boolean range.
a and b = FALSE
(a) and (b) = TRUE
CheckBoolean(a and b) = out of boolean range.
CheckBoolean((a) and (b)) = out of boolean range.
C言語は論理型の変わりに整数でやってるからすぐに問題になるんだけれど、
Delphiは隠しちゃってるからいざ問題に遭遇するとあわてちゃうね。
  if (a = true) then
   Write(True)
  else if (a = false) then
   Write(False)
  else
   Write('out of boolean range.');

これがおもしろいところで、論理型も単なる順序型の1つつーことで。
>>550
al = A; bl = B

if A and B then
{ if (A and A) = 0 then A = 1 else A = 0}
test al, al
setz al
{ if (A and B) = 0 then False else True}
test al, bl
jz False

if (A) and (B) then
{ if (A and A) = 0 then False }
test al, al
jz False
{ if (B and B) = 0 then False }
test bl, bl
jz False

A := Boolean(2); B := True;
1.if A and B then True else False;
2.if B and A then True else False;
さて、1.と2.の結果はどうなるでしょう?(w
556555:02/02/09 16:49
×:{ if (A and A) = 0 then A = 1 else A = 0 }
○:{ if (A and A) = 0 then A := 0 else A := 1 }
557デフォルトの名無しさん:02/02/10 09:32
順序型の範囲外の値は実行時エラーにはならないものかのォ
もしくは警告を出すとか。

「警告 順序型の範囲を越える可能性があります。」

構文チェッカー、だれかツクッテヨ
いや、まじで。コンパイラで拾えないエラーや、バグの原因にありがちな
書き方を警告してくれるという。
>>557
型変換はアプリレベルではむやみにやらないというので良いのでは?
String<-PCHAR のおかげで型変換のクセがついてしまってるのが元凶でCスタイルの侵食かもね

>>558
「型変換」って何?
ヘルプでは「型変換ルーチン」とかあって、Rect() とか StrToInt() とか
あるが。

> String<-PCHAR のおかげで型変換のクセがついてしまってるのが元凶

これの「型変換」ってどうするの? 矢印の向きが逆では?

型キャストと「型変換」は別な概念では?
>>557
「あなたにはこれは使いこなせません」という警告が出たりして
「(致命的エラー) 構文エラーが多すぎます」

ってエラーメッセージを出してほしいもんだ。

「警告 あなたのコードはいたるところでエラーになる可能性があります。」
>>557
> 型変換はアプリレベルではむやみにやらないというので良いのでは?

型変換が型キャストのことだとすると、型キャストなしではOOPの
多態性を利用できませんが、どうしましょう?

ちゃんと意味のある型キャストは、アプリレベルで利用しても何の害
もありません。むしろ有用な場合が多いです。

「むやみ」というのが「意味も分からず」ということでしたら、
そのとおりだと思うんですが。
>>563
>型変換が型キャストのことだとすると、型キャストなしではOOPの
>多態性を利用できませんが、どうしましょう?

そんなことはないだろう。
まぁ、型キャストは使ったほうが便利ではあるが、多態性の利用に
とって必須ではないよ。
565563:02/02/10 16:56
>>557 じゃなくて >>558 ね。

>>564
>まぁ、型キャストは使ったほうが便利ではあるが、多態性の利用に
>とって必須ではないよ。

そうですかぁ、上位クラスへの代入互換性も型キャストの一種という
ことではだめですか?
 マウスがフォームの外にあっても、マウスのデスクトップ全体からの座標を取得するには
どうしたら良いでしょうか?
 現在、TTimer(Interval=1)と、GetCursorPosを組み合わせているのですが、
どうもしっくり来ません。
564の言ってるのは明示的なキャストのことで、565の言ってるのは暗黙的な
キャストだろ? で、564は使い分けてるけど、565はどっちも同じモノとして
見たいと。
>>566
何がしっくりこないのですか?
>>566
フックかSetCaptureだな。
常にマウスの動きを監視したいならフック、
TScrollBarみたいに限られた時間だけ監視するならSetCapture。
570566:02/02/11 13:14
>>568
 タイマーを使うと重くなりそうだし、また、必要以上にちらつくからです。
正しくない感じもしますし。

>>569
 フックをするにはどうすればいいでしょうか?
フックプロシージャのインストールの仕方や、コールバック関数の書き方がよく分かりません。
もし宜しければ教えてくれませんか?
566さん 何をしたいのか書いてみては?

D&Dを実現する程度の事なら SetCaptureで間に合いますよ
572566:02/02/11 15:10
>>571
 えーと、書いたとおりなんですが、
常に、マウスの位置を取得したいのです。
具体的にやりたいことを言いますと、マウスの動きを記録したいのです。
>>572
そうじゃなくて、なんのためにマウスの動きを記録して、どうするわけ?
俺はそんなアプリなんて書かないから、目的がわからん。
だから目的がわかれば別解も出てくるんじゃないの?

ついでに言うと
>フックプロシージャのインストールの仕方や、コールバック関数の書き方がよく分かりません。
というのは自分なりに調査した結果だろうから、例えば「〜のページを見て書いて
みたけど〜の所がわからないので教えろ」とか書けば誰か教えてくれると思う。
574571:02/02/11 15:56
もしかしてこういうソフトを作りたいの?
http://www.vector.co.jp/magazine/spotlight/001011/sl00101115.html

だとしたら、 SetWindowsHookEx をMSDNで検索してみたらいい
全アプリに対するフックをかけるにはDLLを作らないとダメだよと思うよ

>>572
http://www.kumei.ne.jp/c_lang/sdk2/sdk_162.htm
まずはこれをDelphiに移植してみては?
>>572
http://www2.biglobe.ne.jp/~sakai/usehook.htm
このページって有名なところ?俺も今勉強中なんだけど、超分かり易いよ。
TThread の派生クラスにメンバとして
procedure OnTerminate(Sender:TObject) を持たせて、
それを property OnTerminate に代入することはできないのでしょうか。
TForm などではオブジェクトインスペクタを使って、同一クラス内で
プロパティと同名のプロシージャを設定できるようですが。
というか、こういうときは同じ名前を使うわないほうがいいんでしょうか。
 
また、汎用の関数を作るとき、処理に時間がかかりそうな場合は最初からTThreadを
継承して作るべきですか?
578Delフサギコ ◆zE1iiRdQ :02/02/11 22:05
         _________
  ∧,,∧   / KJHookってのがあったような。
 ミ,,゚Д゚彡<  Wired
  ミつ つ  \ http://www.asahi-net.or.jp/~nk2w-ishr/programs.htm
〜ミ  ミ.     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  U U  ここのサンプルを試してみるのはいいとおもう
      動かし方にコツが合ったと思うので
      うごかなかったらカキコしてください。
>>576
作者はもう放棄しているみたいだけどDelphi創世記くらいから有名みたいだよ
579Delフサギコ ◆zE1iiRdQ :02/02/11 22:09
  ∧,,∧     /
 ミ,,゚Д゚彡  < ちょっと意味がわからんですが
  U  U    \
〜ミ  ミ
  ∪∪

procedure DoTerminateとか
procedure Terminateとか名付けるものではないかと...

プロパティと同名の手続きは設定できないのでは?

>また、汎用の関数を作るとき、処理に時間がかかりそうな場合は最初からTThreadを
>継承して作るべきですか?
知らない。
580577:02/02/11 23:01
>>579
はい、設定できないと思うんですが、オブジェクトインスペクタで Form1 とかのイベントを
いじると OnClick イベントに OnClick プロシージャが設定できたりするので聞いてみました。
Do を付けたりするのが一般的ならそちらにしようと思います。
>>577
TThread に限らず、「継承してぶち込む」って考え方は間違っているので考え直しなさい。

単独テストをしておいてスレッド関連以外のバグをつぶしておいてから、
TThread から「呼び出す」

もちろん呼び出す関数自体はスレッドから呼び出されることを考慮して作るんだよ。
グローバル変数なんかはつかってはいけない。
582577:02/02/12 00:44
>>581
すみません、質問が言葉足らずでした。
処理に時間のかかる関数をTThreadから呼び出した場合、Terminate しても
その関数からすぐに抜けることができないのでちょっと困るような気がします。
(アプリケーションごと終了するときなど、結果が出ていなくても中断しなければいけない時がある)
それで、その関数を作り直して TThread にしたほうがいいかな、と思ったんです。
583Delフサギコ ◆zE1iiRdQ :02/02/12 01:01
    ∧ ∧  常に停止指令がくることを
    ミ ゚Д゚彡  予想してプログラミングヲ
  〜ミ,,,,uuミ
          ループとかでフラグ見て途中停止処理を入れましょう

        スレッドハ中々難しいんですよね

サブフォルダまでファイル名列挙とか、
誰かスレッドを使って実現したクラス持ってないかしら。
>>582
固有のスレッドにしたからといって、好きなときに止められるわけではないが。
スレッドは同時に複数実行できるってことでしかないのだよ。
>>582
気持ちは凄いわかる。
俺もその辺の理想的な回答を知りたいと思ってるけど
多分、理想的な回答はないんだと思う。

いっそ時間の掛かる処理は全部COMにしてみっか?
とか真面目に思ってるんだけど・・・・・
デバッグが超面倒なんで挫折気味ヽ(;´Д`)ノ ムツカシー
何が起きても良いから中断したいのなら Halt しちゃえば?

それがいやなら、ちゃんと自分から終了しにいくようなコードを作らないと。
スレッドにしようが外部プロセスの COM にしようが、後始末の問題は残るし。

例外をうまく使えば、多重ループの奥の奥から一気に終了させることができるから
そちらを考えた方が良いよ。l
Haltはマジ強制終了でまずくない?
嫌ならちゃんと後始末できるコードを作るしかない
589デフォルトの名無しさん:02/02/12 09:20
以下のような処理関数を作れば良いかと。
そうすれば、特定のクラスなどに依存しない、汎用ルーチンができると。

type
 //中断すべきならばTrueを返すような関数
 TCheckFunc = function of TObject;
 EHalt = Expression?;(例外のスペル忘れた…

function Proc(Param1,Param2,..; CheckFunc:TCheckFunc=nil):Boolean;
begin
 try
  処理内容。
  事あるごとに if CheckFunc then raise EHalt; と書いておく。
 extract
  on EHalt do 強制終了時の処理;
 end;
end;
590589:02/02/12 09:21
訂正。

if Assigned(CheckFunc) and CheckFunc then raise EHalt;

>>589
で、[処理内容]を実行中はどうやって CheckFunc の内容を変更するの?
やはり別スレッドで、ということですか?
>>590
> if Assigned(CheckFunc) and CheckFunc then raise EHalt;

関数の宣言をみると、Boolean を返してないようだが?
of TObject って何?
593デフォルトの名無しさん:02/02/12 11:00
TCheckFunc = function:Boolean of TObject;
です。of object は、TCheckFunc はルーチンではなくメソッドだってこと。

[処理内容]部分には、長くても数秒ですむような(いや、短いほどいいんだけど、そうするとオーバーヘッドで余計処理時間が長くなるし)
コードを書いておく。たとえば、ディレクトリ一覧をつくるのであれば、

function Proc(Root:string; Files:TStrings; CheckFunc:TCheckFunc=nil):Boolean;
begin
 try
  Rootに含まれる最初のファイルを探す.
  Files.Add( Root );
  while まだ次のファイルがあれば do begin
   if ファイルがディレクトリであれば then
    Proc(ディレクトリ名, CheckFunc)
   else
    Files.Add( ファイル名 );
   if Assigned(CheckFunc) and CheckFunc then
    raise EHalt;
  end;
 extract
  on EHalt do 強制終了時の処理;
 end;
end;

ていう感じで…

594デフォルトの名無しさん:02/02/12 11:04
また訂正。

function Proc(Root:string; Files:TStrings; CheckFunc:TCheckFunc=nil):Boolean;
begin
 Result := False;

 try
  FindFirst(...); //Rootに含まれる最初のファイルを探す.
  Files.Add( Root );
  while まだ次のファイルがあれば do begin
   if ファイルがディレクトリであれば then begin
    if Proc(ディレクトリ名, CheckFunc) then
     raise EHalt;
   end
   else
    Files.Add( ファイル名 );
   if Assigned(CheckFunc) and CheckFunc then
    raise EHalt;
  end;
 extract
  on EHalt do 強制終了時の処理;
  Exit; //EHalt が発動されたら、結果をTrueにすることなく抜け出る
 end;

 Result := True;
end;
595591,592:02/02/12 13:19
いや、of Object は知っているんだが of TObject というのは
初めて見たもんで。

594 で処理を実行している間、どうやって CheckFunc が false
を返すようにするのかが分かりません。別スレッドでもない限り
ボタンを押すこともできないし、Timer メッセージも処理されな
いし。
596591,592:02/02/12 13:23
あ、中断するためには true を返すんだね。
597デフォルトの名無しさん:02/02/12 13:54
ごめん、TObject は typo.

>594 で処理を実行している間、どうやって CheckFunc が false
>を返すようにするのか

それは、中止ボタン等に
DoStop := True とかいておいて、

function TForm.CheckFunc:Boolean;
begin
 Application.ProcessMessage;
 Result := DoStop;
end;

とかやっておけばよいのでわ。
598591,592:02/02/12 14:12
>>597
なるほど、了解しました。ご教示ありがとう。

ボタンを押せるのは、CheckFunc で

Application.ProcessMessage;

を実行しているからですね。ふーむ、だとすると、
594 の Proc()の中の while ループに

Application.ProcessMessage;

を置いておいて、CheckFunc をわたす代わりに Boolean 型のフィールド変数を
参照するのと同じですね。関数を渡すことの利点について教えて下さい。
599591,592:02/02/12 14:14
Application.ProcessMessages; ですね
600デフォルトの名無しさん:02/02/12 14:21
>関数を渡すことの利点

それは、たんにルーチンを一般化するってだけ。
たとえば、関数内で直接 Boolean変数を参照すると、
グローバル変数の参照になっちゃうでしょ。

例に出したディレクトリ検索ルーチンみたなものを
自作ライブラリなんかに入れたときに困ることがあるし。

それに、中断機能を使わない場合なんかに、グローバル変数だけ
残るのもなんか汚いし。使う必要が内場合でも気持ち良く出来るように、
関数を指定しなくても良いようにしてあるという…

function Proc(....; CheckFunc:TCheckFunc=nil):...

の =nil のぶぶん。
…俺なんか間違ってる事言ってるかな。
有識者の意見キボン
>>600
禿同。
ライブラリにすることを考えると、極力グローバル変数は使わない方向に行きますね。
603591,592:02/02/12 14:31
>>600
>たとえば、関数内で直接 Boolean変数を参照すると、
>グローバル変数の参照になっちゃうでしょ。

いや、関数内で何かのクラスのメソッドを参照するのと、
そのクラスの Boolean 型のフィールド変数を参照するのと
は同じではありませんか。597では変数 DoStop を使って
いるので結局同じではありませんか。

でも、関数のほうが一般化できる分だけ有利ですね。確かに。
必要ないときは Application.ProcessMessages; を実行しな
くて済む分だけでも、関数を渡した方がよいですね。

ありがとうございました。
いやいや、メソッドの参照とフィールド変数の参照はちがうよ。
「フィールド」は、あくまでも「ある特定のクラスに属する変数」
でしょ。「特定のクラス」。例に出した Proc 関数は、
特定のクラスに依存しないルーチンであってメソッドということ。

あるルーチンがフィールド変数を直接参照していると、そのルーチンを利用するためには、たとえ全く使わなくてもそのルーチンが「必要とする」クラスを生成しないといけないでしょ。

「特定のクラスの、特定のフィールド変数」を利用するのではなく、
あくまでも「只のメソッド」を利用することによって、それがいかなるクラスに属する物であれ、引数が無く、Booleanを返すものであればなんでも指定できることになる。 …と思う。
訂正。

× 特定のクラスに依存しないルーチンであってメソッドということ。
○ 特定のクラスに依存しないルーチンであるということ。
606591,592:02/02/12 14:52
>>604
おや、そうですか。
関数を渡す代わりに、Boolean型の変数を var 渡しにしても
同じではないですか? メソッドだって、「あるクラスに属する
関数」じゃないですか?

Proc を別ユニットに作成したとしても var StopFlag:Boolean
のパラメータでどうして特定のクラスに依存することになるのですか?
いや、その「あるクラス」をルーチンが決めたのでは困るという意味。
たとえば、あるルーチンが「内部でクラス THoge のフィールドを参照しています」
というのであれば、それを使う時は必ず THoge を利用しないと
いけないじゃない。「あるクラス」はあくまでも単なるクラス
であって、特定の THoge とかを指すのではないという
意味だったんだけど…

というか、 var 指定ってそう言う使い方が出来るのか。いや、
考えてみればそうだな。ごめん、全く思いつかなかった。
確かにそのほうがよいね。
608591,592:02/02/12 15:30
>>607
>確かにそのほうがよいね。

いや、603で書きましたように、最初の通り、関数(メソッドでもよい)
渡しの方が汎用性があってよいと思います。APIのコールバック関数み
たいにライブラリ関数のユーザが自由にコードを書ける、という意味で。

おつきあい、ありがとうございました。
609デフォルトの名無しさん:02/02/12 18:11
WinSightのように、クラスを獲得出来るソフトって無いでしょうか?
>>609
「クラスを獲得」ってどういう意味?
WinSight じゃなぜだめなの?
611 :02/02/12 21:32
うっ・すいません
WinSightはProfessional以上にしかないので
http://www.vector.co.jp/soft/dl/win95/prog/s0067974.html
とりあえずこれでやってみます
612Delフサギコ ◆zE1iiRdQ :02/02/12 22:19
        ∫
   ∧,,∧ ∬       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,゚Д゚ノ,っ━~  < 今日も寒いやね。
_と~,,,  ~,,,ノ_. ∀  \_________
    .ミ,,,/~),  .| ┷┳━
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄   .┻

よくわからんですが、Application.ProcessMessageを
呼ぶタイミングと同じタイミングで
イベントをよんで、ライブラリを使う側から
Applicaion.ProcessMessageを呼んだり
他の処理させたり、ストップ命令出したりすると
よいと思われ。

ま、関数渡しと変わらんけど、イベントの方が
より柔軟では?

って、同じ事逝ってるか…

procedure TFom1.AruEvent(var Stop: Boolean);
begin
 if AruJyoken then
  Stop := True
 else
  Stop := False;
end;
>>612
>同じ事逝ってるか…

同じだと思います。イベントハンドラは単なるメソッドですからね。
>>612
どうでもいいけど、フサギコさん、トリップ使うようになってから
スキル落ちてないですか?
615デフォルトの名無しさん:02/02/13 00:46
スキルあげ
616デフォルトの名無しさん :02/02/13 01:11
教えてDELモナ

解像度(画面の領域)を変えるにはどうすればいいでしか?
Enum/ChangeDisplaySettings
>>617
ありがとうDELモナ
漏れには分からないモナ
>>616=618?
617のAPIで確かにできるけど
うまく逝かない場合があって
ttp://www.kt.rim.or.jp/~s-matsu/sub/prog/unskill018.html
のように結構面倒。
ここまでするかどうかは場合によるだろうが
620ボソッ:02/02/13 02:55
俺は素直にTThread継承させるなぁ・・・
>>620
そうだね。きれいな中断方法教えてください。
622sage:02/02/13 03:11
if Assigned(CheckFunc) and CheckFunc then
だるいんで
function TForm1.NullCheckFunc:Boolean;
begin
 Result := False;
end;
if CheckFunc then ...
TThread.Executeが800行
逝ってくる
こっちでも。

じさくクラスに、プロパティ類コピーの目的で

THoge.Assign(Source:THoge)

とか作るとするじゃない。
そうするとさ、Assignメソッドのなかで、少なくとも全部のプロパティを
コピーしなきゃならないでしょ。

あとでプロパティを増やしたりしたときに、Assignメソッド内に
そのプロパティをコピーする項目を増やすの、絶対忘れちゃうんだよね。

みんなはどうしてるの?
根性で思い出してるの?

625( ´∀`):02/02/13 10:26
サンプルコードに、スレッドとTreeViewを組み合わせた奴が… なかったっけ?
Sortだけだったっけ。
626エフェドリンながヰ:02/02/13 10:54
http://www.puchiwara.com/hacking/
           __,,,-‐――‐-、__   ヽ、
        __=ニ-―''''"""゙゙`‐-、_`ヽ、  ヽ.
      __,/ ,.--ヾ/''''''"'''"''ー、、ヽ、ヽ、  ヽ.
    / / /            ミ `ヽヽ  i
   / / i /              ヾ__ヽヽ  |
  / / ,| |             __L i |  |
  / /| |ヽ |        ,,,,-∠''''""  ミ  i|  |
  { | { |-+ヽ,,,,,,,    ,,illニ-==三`゙`‐---+  |  |
  ||  i |┼'"三三ヽ    ;/(ソ::ノ T´  ヽ-、.| |
   ヽ ヽー'"(ソ:)` !     ‐‐-‐'´    ∧`}| .|
       .| ``''"´ /            ヽ. { !| .|
       .i    <             '´/ | ||
       !    ヽ `          ○  | ||
       ハ.    _,=---         /   | |.|
       .| ヽ.   `'''''''´      / | |  | | |
       | | ヽ         ,. ' /  .| .| || || |
      .| |  / ヽ      ,/ /   |  | || || |
      | | /   `_t‐‐‐'"´,.----―''''''7 | || || |
      .| | / / <"ヽj  /    __. /┐| || || |
     ./ // /,.-‐ゝ->‐/-‐ヽ__/‐‐‐/ ヽ|_ || |.| |
     ./ // //,.-〈 〈‐、  \--/    ``ー、!_|
>>.624
Published だけなら実行時型情報で列挙してコピーするなんて出来るかもしれないけど

nameとか コピーしちゃいけないのって出てくるから難しいかもね
628デフォルトの名無しさん:02/02/13 11:19
>Published だけなら実行時型情報で列挙してコピーするなんて出来る
これって、どうやるの?
629デフォルトの名無しさん:02/02/13 12:24
.NETもいいが
旧世代Windows向けの究極の開発ツールとして「Borland C#」出してホスィ
Nativeなやつね
TStringGridの内容Excel等の表計算ソフト向けにコピペするソフトを作っているのだが

現状はお約束通りの方法↓

function _GridTo:String;
var
  X,Y:Integer;
begin
  Result:='';
  with Grid do
  for Y:=0 to RowCount -1 do
  begin
    for X := 0 to ColCount-2 do Result := Result + Cells[X,Y] + #$9;
    Result := Result + Cells[X,ColCount-1] + #$D#$A
  end;
end;

でやっているのだが、500行以上になると遅くてヽ(`Д´)ノゴルァ!な状態。
スピードアップ改善策を練っているのだが、速度改善のコツがあったら教えてきぼんぬ。
632デフォルトの名無しさん:02/02/13 19:56
TMemoryStreamなんですが、ひとつのTMemoryStreamで動的に確保できる
最大の容量が16MBまでだったり、複数のTMemoryStreamの合計が最大32MBまで
だったりの制限なんてあるのでしょうか??どうもバグを発見できなくて…
>>632
ソースみるよろし
634デフォルトの名無しさん:02/02/13 20:15
自分で書いたソースですか?それともVCLの?
自分で書いたソースの方は何度も見直しているのですが
疑わしい箇所を発見できなくて、もしかしてTMemoryStreamに
そういう制限があるのならこの挙動も納得できる、
っていう仮説を立ててみたのですが、そんな制限は無いのでしょうか?
とりあえずそういったバグは聞いたことない。
48MB扱うサンプル書いてみたら?
>>631
TStrings.Assignで一行(or一列)まとめて取り出したら?
>628
with TMemoryStream.Create do
begin
WriteComponent(Source);
Seek(0,0);
ReadComponent(Self);
Free;
end;
とか。でも>>627のいうとおりややこしい部分もあるかも。
>>628
Web 上のどこからのコピペコードだが

uses TypInfo;

procedure GetPublishedProperties(comp: TComponent; lst: TStrings);
var
Props: PPropList;
TypeData: PTypeData;
i: Integer;
begin
TypeData := GetTypeData(comp.ClassInfo);
if (TypeData = nil) or (TypeData^.PropCount = 0) then Exit;

GetMem(Props, TypeData^.PropCount * sizeof(Pointer));
try
GetPropInfos(comp.ClassInfo, Props);
for i := 0 to TypeData^.PropCount-1 do
begin
with Props^[i]^ do
lst.Add(Name);
end;
finally
FreeMem(Props);
end;
end;
639632:02/02/13 21:17
解決しました。
ただ単に最初にSetSizeで48MBなり64MBなり設定して確保しておくだけで
問題がクリアしました。今までSetSizeしなくても動的に確保してくれて
いたのでほとんど疑っていなかったのですがこれで前に進める〜
泣きそうでしたよマジで。SetSizeしなかった理由は、Sizeを参照して
現在のサイズを調べてたからなんです。この辺は複数メモリストリームを
用意して解決できそうです。回答してくれた方ありがとう!
>>631
http://hp.vector.co.jp/authors/VA015850/program/dtips21.html
を参考に。

>for X := 0 to ColCount-2 do Result := Result + Cells[X,Y] + #$9;
>Result := Result + Cells[X,ColCount-1] + #$D#$A
ここがバッファリングなしで単純に足し算しているので改善の余地あり。
641Delフサギコ ◆zE1iiRdQ :02/02/14 00:58
   ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < WriteCompoもどぞ
   U  つ∀ \____________
 〜ミ  ミ
   ∪''∪ MidNightはワインでも・

var
 MemStream: TMemoryStream;
 NameBuffer1, NameBuffer2: String;
begin
 MemStream := TMemoryStream.Create;
 try
  NameBuffer1 := Compo1.Name;
  NameBuffer2 := Compo2.Name;

  Compo1.Name := 'XX';
  MemStream.WriteComponent(Compo1);
  Compo1.Name := NameBuffer1;

  MemStream.Position := 0;
  MemStream.ReadComponent(Compo2);
  Compo2.Name := NameBuffer2;
 finally
  MemStream.Free;
 end;

こんなんで動くかしら?
642デフォルトの名無しさん:02/02/14 01:12
ここだったかな?UPXの話題が出てたのは。スレが多くて…。
初めて使ってみたけど半分くらいにはなるのな。
どーもアングラなニホヒがして使っていいものやら困る(^^;。
ボーランドさんが正式に採用して、自動的にUPXの圧縮当てるとか
するのはどーか(藁
643お腹いっぱい:02/02/14 01:22
またサイズの話かよ...
644Delフサギコ ◆zE1iiRdQ :02/02/14 01:34
  たった今
    ∧,,∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,゚Д゚彡 <  昨日のノミの腰のビルーを飲んだ
   ミ つ日   \___________
 〜ミ,,,,,, ,,ミ

    ∧,,∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  Σミ゚Д゚,,彡  <  どえらいマズイ
   ミ つ日   \___________
 〜ミ,,,,,, ,,ミ ペッペっ
            (実話)

 そんな話題>>Exeのサイズ

 実行時パケージ使いなさい
時々、Delphiでプログラム作成中にDelphiで作られたで
あろうと思われるプログラムを起動すると起動できない
事があるのですが、これって定説?おれだけ?
例えば、WinXP上でD6あげてて ギコナビあげた時とか。
646デフォルトの名無しさん:02/02/14 01:54
ずぃっこーじぱっけーずぃを使うと、別途配布せにゃーならんべ?
その辺解説してるページ知らんべか?
647ななしっす:02/02/14 02:01
だれか、Delphi Base Library プロジェクトを立ち上げてください。
648Delフサギコ ◆zE1iiRdQ :02/02/14 02:08
>>646さん
    ______
     |  カコログ   |
     | 四露死苦  |
     |______|
     ∧,,∧..||
    ミ,,トДダ||    
    ミ  づΦ   
  〜ミ  ミ   MLの・・…・・
    U''''.U  
649636:02/02/14 02:09
>>631
気になって試してみた。500x600のGridでAssignするとかなり遅くなった。5秒ぐらい。
681のコードで試してみたら文字列作成に850msぐらい。そんなに遅いか?
641のtipsで多少速くなるかも。

ただ、Memo1.Lines.Add(s);したら返ってこなくなったので、
前後の処理に時間がかかってると思われる。
ClipBoead.AsText := s;
は一瞬で終った。メモリ256MB,セレ400
650646:02/02/14 02:14
カコログダベカ...
651デフォルトの名無しさん:02/02/14 02:33
昔、「MFC」って書かれたアイコン見るたびに、「どうして違うソフトで
同じアイコンなんだろう?」って思ったりしてたのだが、アレって
VC?で作るとデフォルトであーなるんでしょ?
H○Pのは「スープに湯気」のアイコンとか…。
どうして自分で作らんのだろうか…。でも、delphiの「柱に緑丸にイナズマ」
ってゆーワケワカメなヤツのまんまって見たこと無い。見たこと有る人いますか?
>>651
フリーでも沢山みてるけど?
俺も気分が乗らないような仕事の時はアイコンまで作らない。
653651:02/02/14 02:48
>>652
へー!あるんだ。そっかー。
青にたいまつ?のアイコンもDelphiじゃなかったっけ?
655636:02/02/14 02:54
>青にたいまつ
D3 あれが一番かっこよかった
656651:02/02/14 02:54
>>654
そだね。バージョンの違いかな?
しかし、イナズマは何を意味してるやら。
「VCL」って書かないだけマシかなぁ。
デルファイに存在したであろう神殿のアイコンもあったな。
それともアテネ神殿か。

※知ってるとは思うけど、「デルファイ」はギリシャの古都の名前。
>>645
2重起動防止のコードをコピペして使ってるいつがいるに十票。
Mutexにどのアプリケーションも同じサンプルの文字列を渡してるに違いない。
>>655
激しく同意。
Delphi5でアイコン周りにガクーっときた。
ドット絵マンセー
660631:02/02/14 11:29
>>640
やっぱこのへんがやばいと思っていたが
上手い解決方法がわからなかったので激しく参考になった。
>>658
あ〜、Mutexじゃないけど、それでトラブったことあるよ。
俺の場合、システムフック用のDLLで、他で使ってる文字列を
そのまま使ってファイルマップしてた。
なぜクラッシュするのか原因が分からなくて悩みまくったよ(w

教訓:CreateFileMappingの後は要GetLastError!
>>645 >>658
ひどいや!ギコナビのmutex名は「gikoNaviInstance」だよ。
えーと。同時起動の話、再現性高いですか?
本気で調べてみようと思いますが。
664デフォルトの名無しさん:02/02/14 16:22
*.dpkで配布されているコンポーネントって、
どうやってインストールするんですか?
665デフォルトの名無しさん:02/02/14 16:50
Delphi6Proをつかっていますが、コンポーネントを使おうとするとエラーが起きます。

http://delphi-area.fs-tools.de/pdl_downloads.php?file=14

からアーカイブをダウンロードし、インストールしたのですが、
コンパイルエラーがおきました。
ヘルプにある互換性のページ

>プロジェクト内の DsgnIntf への参照は,新しい Delphi 6 の名前 DesignIntf に
>変更する必要があります。また,uses 節に DesignEditors,VCLEditors,
>および RTLConsts を追加する必要もあります。

を参考に、

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

どうすれば、ちゃんと使えるようになるでしょうか。
666デフォルトの名無しさん:02/02/14 16:59
>>664
Delphi 6 なら普通に開いてインストールできるよ。
667デフォルトの名無しさん:02/02/14 21:27
関数を手続きとして使ったとき(戻り値を無視したとき)、
警告を発してくれるようなコンパイラオプションがあったとおもうのですが、
みつけられません。なんというオプションか教えてくださいませんか。
X-
669667:02/02/14 22:32
おお、ありがとうです

でも推奨さてないみたいですね…

>$X 指令は,下位互換性を提供します。Delphi のアプリケーション
>を記述するときは,{$X-} モードを使用してはなりません。
670デフォルトの名無しさん:02/02/14 23:30
他言語から使用可能なDLLを作る場合
varによる参照引数は使用してよし、それとも駄目?
C++には参照があるけど、Cにはないから駄目かな?とか思ったんだけど・・・・・
671傍観者:02/02/15 00:08
Delphi は UNICODE 対応してないってホントですか?
672解脱者:02/02/15 00:11
>>671
心の眼で見るのだ。さすれば何もかも分かる。
673傍観者:02/02/15 00:16
>672

ハァ?
674先行者:02/02/15 00:17
>>673
バーカ
WideString ?
676傍観者:02/02/15 00:20
>674

redirect
677傍観者:02/02/15 00:29
やっぱり、UNICODE 対応してないんですか? 最近の開発言語とは思えませんね。
アレだな。自分で調べもしないで、ほざいてる馬鹿はいるもんだな。
679マジレスきぼんぬさん:02/02/15 00:46
文字列リストへの削除がわからないので教えてください.

list.Delete(位置); <--- 指定した位置の文字列を削除
ここまでは分かります。位置の指定がわかりません。
680ビクーリ!:02/02/15 00:52
Halbowさんって、談話室で有名人なんでしょ?
Hotkeyちゃんったら、自分のページでレスを
載せてるようだけど、承諾してんのかな。
つーか、デスクトップの一部分拡大ってよくあるヤツをシェアウェアに
しちゃったYO!
681傍観者:02/02/15 00:53
>678

Delphi - ML の I wish List で話題になりましたよ。調べてないのは678では?
682馬鹿にマジレス:02/02/15 00:57
>やっぱり、UNICODE 対応してないんですか? 最近の開発言語とは思えませんね。
↑ここで聞いてる馬鹿が「調べた」って言えるとは驚いた。
683傍観者:02/02/15 01:05
俺もあんたの「しったか」には驚いた。
>>679
最初がゼロ、次が1、ウーム、なぜヘルプを読まないのか不思議です。
(´-`)。o ○ (あんたって誰だろう?質問してるのに偉そうなのはなぜだろう?)
686ビクーリ!:02/02/15 01:22
誰もHotkeyヲッチャーはいないのか?うーむ。シェアウェアって
誰か金払うとでも思ってんのかなぁ?人に聞きまくってシェアか…。
でも、ベクタとかだと、1本2本だと振込み手数料がかかる
から相殺しましたとかって言って銭払ってもらえないが知ってるか?
結局、その小銭はベクタの懐に入るってすんぽうさ。
ベクタも昔はクズが詰まったCDを送ってくれてたけど、
最近はそれも止めたしフリーソフト作ってる人間からすれば
メリット無くなったな、googleの恩恵か、自分とこのホームページ
で公開してても結構人来るし、よくよく考えたら、別に使ってもら
わなくてもいいんだよなぁ。
>>663
うちじゃ、そのようです。
689683は結局何が言いたいんだ?:02/02/15 04:09
>>687
まぁまぁ。気持ちは分からんでもないけど。つーか、シェアウェア作る人の
気持ちが分からん。いや、「有益で利用する価値があって金払いたくなるほど
素晴らしいソフト」の作者はいいんだ。
そーじゃない人っているじゃん。「そのソフトでいくらもらったんだ、今までに」
って聞いてみたくなる人ってさ。不思議だなぁ、っていつも思うよ。
500円くらいの「フリーでいくらでも同じ(それ以上)のがあるよ」って
ヤツ、公開してるのってよくあるけど、金払う人がいるとするなら、その人の
気持ちも分からん。
スレ違いにつきsageで、

まあね、でも、初心者とかが騙されるんだよ。
ネット詐欺の一種だと思われ(w

目的のページが見つかったんで、つづきね。
ttp://www.geocities.co.jp/SiliconValley/3765/
↑もう随分昔の話だけど
こんな明らかに妖しい有料登録に金払って登録したDQNもいるのよ。
692デフォルトの名無しさん:02/02/15 11:20
TTreeView で、各項目ごとにツールチップを表示させるには
どうすればいいのでしょうか?
TListView には OnInfoTip イベントがありますが、TTreeView には
そういったものが見あたりません。
いろいろと調べてみたのですが、分かりませんでした。

ご存じの方いましたら教えてください。
>>671
念のためにマジレスすると,ちゃんと対応してますぞ.
(Delphi 3からだったと思います)
>>689
下を見るなよ。DQNなんてリアル世界でいくらでもいるだろ。
>>688
おいらの環境じゃ再現しませんでしたyo
>>693
そりゃ、あれだろ、UNICODE用の文字列関数があるって事だろ、
厳密には対応したってより、変換関数を取って付けたってだけ
では?

折れが思うには UNICODEよりも何よりも.Net戦略に騙されて
駄目にならなきゃいいと願うばかりだ。
Delphiは、今のままでもいいと思うが、MSDN又は、同規模の
情報を付けて欲しいなぁ、結局、MSDNも買うんだよなぁ。
>>696 VBでのShiftJISの扱いよりはマシに対応してると思うが?
>結局、MSDNも買うんだよなぁ。
そうなんだよなあ(笑

699デフォルトの名無しさん:02/02/16 00:00
delphiマガジンの発行部数を教えてください。
だいたい800〜1250くらいかな
701デルファイの名無しさん:02/02/16 00:07
delphiのインラインアセンブラについて解説してるいいページ
知らないですか?
検索したけど、なかなかヒットせなんだ。
702699:02/02/16 00:08
>>700
マジ?
>>701
なにが知りたい?
>>700
誰が見てもわかるウソ
残念ですが、それは機密扱いなんで教えられません。
ヒントとしてはVBマガジンより少し少ないとお考え下さい。
706デルファイの名無しさん :02/02/16 00:12
>>703
命令っちゅーか、とりあえず、いろいろ。ヘルプもなんか、うまくヒット
せなんだ。「こうこうこーゆーことするとこーなる」って感じに書いてない
気がする。
メールマガジンの「Delphiマガジン オンライン」が、最新号で 4158 部。

メールを読まない読者数を考えると、6000 ± 1000 くらいと見るのが妥当ではないか?
>>706
アセンブラそのものの説明がほしいの?
だとすると、ちょっと大変だな。
709デルファイの名無しさん :02/02/16 00:21
>>708
でっかー…。むかーしアセンブラかじった位だから、「そこはかとなく」は
分かるんだが…。とりあえず、「delphiの」は、どんなんかな?と…。
特に変わらん?
インラインアセンブラには共通だろうけど、アセンブラとの違いは、
変数領域の確保はpascalでやって、そのシンボルをそのまま使える。
その代わりマクロは少なめ。
って感じかなあ
711デルファイの名無しさん :02/02/16 00:38
>>710
ダスかぁ。どもありがとダス。
とりあえずfor i:=1 to 10 do inc(sum, i)とか書いてCPUウインドウでアセンブラコードチェックすればなんとなくわかるかも。
713デフォルトの名無しさん:02/02/16 00:49
お願いします、みなさんの技術を教えてください。

相互参照するようなコンポーネントの場合、どのように実装するのが
一番スマートですか。例えば、

データベースを表わすコンポーネントが1つに対して、それを
表示・操作するコンポーネントが複数あるとします。


表示・操作コンポーネントは、プロパティ DataBaseComp で
データベースコンポーネントを指定するとします。そうすることで、
操作コンポーネントでデータベースを変更したいときは、
自身の DataBaseComp プロパティにアクセスすれば良いことになります。

問題は、その逆なんです。

データベースが変更された際に、表示・操作コンポーネントに
そのことを通知して、画面を更新したいのですが、データベースと
表示・操作コンポーネントの関係はあくまでも一方通行です。

現在は、表示・操作コンポーネントに Update メソッドを用いて、
データベースの OnChanged イベント内で、
全ての表示・操作コンポーネントの Update メソッドを
呼び出しているのですが、どうにも不自然な感じがします。

表示・操作コンポーネント → データベース
のアクセスは、プロパティを使えばいいだけなのに、

データベース → 表示・操作コンポーネント
のアクセスは、そのためのコードを毎回記述しなければならないなんて…

どうすればスマートにいきますか?
observerパターンの考え方をVCL風に実装してみたら?
715デフォルトの名無しさん:02/02/16 01:13
delphiでMDBを出力させたいのですが
AccessをつなげてTTableやTQueryで表示させると
Accessでルックアップで入力した個所は1、2、3みたいな感じで数字で出てしまうのですが
そのままルックアップで指定したデータを出せないのでしょうか?

一応リレーションシップも繋がっています
>713
まあアドホックだけどCM_DATABASECHANGEDを定義して、
wParamにデータベースコンポのアドレスでも入れて、
MainForm.Broadcastするとか。
データベース操作/表示コントロールはwParamが自分の
属するデータベースコンポか調べて、更新するの。
717Delフサギコ ◆zE1iiRdQ :02/02/16 01:24
   _____
 /:\._____\  />>713
 |: ̄\ ミ,,゚Д゚ミ  < VCLでは普通にプロパティで
 |:   :|: ̄U U ̄:|  \相互参照しているような.

 TreeViewとTreeNodeとか。

 DataBaseCompoにリストで表示操作コンポを
 登録するというスタイルはダメかしら?
718デフォルトの名無しさん:02/02/16 01:25
それはつまり、データベースを表わすコンポーネントに
「表示・操作コンポーネントリスト」プロパティと、
「コンポーネントリストに登録」メソッドを用意し、

表示・操作コンポーネントの DataBaseComp プロパティで

procedure THoge.SetDataBaseComp(Value:TDataBaseComponent);
begin
 FDataBaseComp := Value;
 Value.コンポーネントリストに登録メソッド( Self );
end;

のようにするという意味でしょうか。

なるほど、ためしてみます。

…というか、デザインパターンつかうと
こんなに説明というか、楽になるんですね…
(手元にデザインパターンの本があって良かった…)
719名無しさんです:02/02/16 01:30
VB6使いだったんですが今日Del6を使い始めました。で、
ちょっろっとコントロールを貼ってコンパイルしただけで
500kbになったのですが、もう少しダイエットは出来ない
ものですか?
VBなら40kbくらいで済みそうなのですが。ランタイムって
イヤだったけど、サイズを考えるとデメリットばかりでも
ないですね。でもコンパイル早くて「あれ?反応しない」と
思って何度も実行してしまった。
720714:02/02/16 01:31
>>718
それでいいと思う。
Valueにnil渡したときにリストから削除する処理も忘れずに。
>>719
ランタイムの分を足したら40kbじゃ済まないだろ
>>719
Delでもランタイムは使えるよん。プロジェクト→オプション→パッケージ
→実行時パッケージを使って構築する にチェックでGO
723719:02/02/16 01:39
>>721
でもランタイムってほぼ共通(ほぼでもないか)だから、VB6の
ランタイム最新版フルパック一つ入れておけば済むかな、その
サイズで済む、と。ま、ランタイムはかなりウザイ要素なのだが。
724719:02/02/16 01:40
>>722
なるほど。でもそれやっちゃうとDelのランタイムを配布しなきゃ
ならないってこと?もしそれやっちゃうとDelに移行するメリットが
無くなってしまう(笑)。
725Delフサギコ ◆zE1iiRdQ :02/02/16 01:43
TDataBaseCompに全部内包しちゃってはだめなのかしら。

TDataBaseComp.CommandList(i) で操作コンポにアクセスして
TDataBaseComp.CommandSet(命令の種類)で
コマンドを生成してリストに登録するとか。。
  ____
 /......  .. .../
 ||:::   ∧,,∧ TCompo派生というわけにはいかんけど
 |: ̄\ ミ,, ゚Д゚ミ
 |:   :|: ̄U U ̄:|
 |:   :|:     .:|

>>719
VB使っているとどうしてもそう思うけど
VBはランタイムが元々ごっそりOSに入っているんだYO
VBランタイム4,5,6とさらにライブラリ足してますが何か?
また、既存のモノを使わずに1から組んでいけばサイズをおさえることもできます。
この辺もさんざん話したね。
727719:02/02/16 01:48
>>725
当方win98無印なので標準ではVB5しか入ってナイッす。あと、
ツリ^ビューやツールバーなんか使っちゃうと標準では済まなく
なってしまうし…。サポートはいつもランタイムのことがほとんど
っす。

>>726
イチから?過去ログに答えがありそうですね。見てきます。
728デフォルトの名無しさん:02/02/16 01:50
つい先日、サイズのこと書いて「またか」ってレスされたばかりなんだけど…。

>>727
小さいexeがどーたらこーたらってのでも検索してみれ。
729Delフサギコ ◆zE1iiRdQ :02/02/16 01:51
>もしそれやっちゃうとDelに移行するメリットが 無くなってしまう(笑)。

ほんとにそうだろうかと、小一時間・・・・


  ∧,,∧    乗りかかった船で
 ミ,,゚Д゚彡   いろいろ評価してミソが
 ミつ[|lllll]).   よろしいかと。
〜ミ  ミ
  U''U

日Del振のリンクの最後みてみー
http://hp.vector.co.jp/authors/VA009712/take/delphi/dellink.htm


"イチから組む"という方法は並の人間には難しく
人造人間にしかでけない技なので
http://halbow.cool.ne.jp/top.html
ここみて、5分程度であきらめよう
で、定番のページが出てきて
ttp://halbow.cool.ne.jp/top.html
ttp://www.vector.co.jp/soft/win95/prog/se076841.html
ここまでやるんだったらC++と・・・
という話になる、と。
731719:02/02/16 02:00
>>728
スマソ。今日始めてこのスレ見たんだわ。今過去ログ漁ってます。

>>729
ttp://halbow.cool.ne.jp/top.html

ここ今日見た(ワラ)。サッパリでしたわ。

>>もしそれやっちゃうとDelに移行するメリットが 無くなってしまう(笑)。
>ほんとにそうだろうかと、小一時間・・・・

実はちと気に入ったコンポーネントを落としてきたんですわ。で、
ちょっろっとコーティングしてみたんですが、これがイイ!
他人のコンポーネントに頼るのは厨なのかどうかはまだDel始めた
ばかりでわからないけど、かなりの魅力を感じた。

>>730
>ここまでやるんだったらC++と・・・
ん〜、まだ始めたばかりだからなんとも…。
誰かexeのサイズネタをwikiにまとめろよ
Delphiのコンポーネントは利便性において最大の利点であり、
またプログラミングにおける欠点でもある。
用は使いよう
>またプログラミングにおける欠点でもある。
ハァ?
735Delフサギコ ◆zE1iiRdQ :02/02/16 02:18
>他人のコンポーネントに頼るのは厨なのかどうかはまだDel始めた
>ばかりでわからないけど、かなりの魅力を感じた。

           クラスライブラリ使いを
  ∧,,∧     /厨だと言いたい人には言わせておく。
 ミ ゚Д゚ミ  <  
 (ミ  ミつ)ビシッ\だけど、生産性は負けない
〜ミ  ミ       それがDel使い
  ∪ ∪

---- (^_^)(^_^)(^_^) THE REAL CHU-BOU (^_^)(^_^)(^_^) ----
海岸では、実際のプログラマが砂の中のフローチャートを引くプログラマです。
∧,,∧ イミワカンネー
ミ゚Д゚彡 Delフサギコ mailto:[email protected]
DelフサギコってP-Codeなの?
737Delフサギコ ◆zE1iiRdQ :02/02/16 02:48

 チガウ
      ∧,,∧l||l  マチガワレタ
       ;゙⌒ヽ彡  
     〜ミ___ミ
    ''" ""''"" "''




          クワッ
       ∧,,∧l||l  毒舌ですか...?
       ;;゙ミ゚Д゚彡  
     〜ミ___ミ
    ''" ""''"" "''
738デフォルトの名無しさん:02/02/16 02:52
教えてください
Delphiで下記のように設定しても、表示はされるがSQLとしては何もおこりません
どこか間違っているのでしょうか?

begin
Database1.AliasName := 'ABC; // ODBCのデータソース名
Database1.DatabaseName := 'Aテーブル'; // DBのエイリアス
Database1.LoginPrompt := False; // DBのログインダイアログを抑制

Table1.DatabaseName := 'Aテーブル';
Table1.TableName := 'Aテーブル'; // MDB内に作ったテーブル名称

DataSource1.DataSet := Table1; // TTableコンポーネントを指定
DBGrid1.DataSource := DataSource1; // TDataSourceコンポーネントを指定
Query1.DataSource := DataSource1;

Query1.SQL.Add('SELECT *');
Query1.SQL.Add('FROM Aテーブル');
Query1.SQL.Add('ORDER BY タイトル DESC');

Database1.Open;
Table1.Open;
Query1.Open;
end;
フリー版のD6を入手しましたがObject Pascal?のポインタ関連に
つてい理解できません、なんかポインタとか詳しく書いてある本あり
ませんか?
>>736
P-Code = 玄ちゃん説は?

どちらも酒飲みだし。
>>739
PASCAL では C のような、物理アドレスに密接に関連した「ポインタ」は扱いません。
ほかのオブジェクトに対する参照としてのポインタとなります。当然配列とは何の関係も
ありません。

しかし、実装としては物理アドレス値を使っていますからメモリ空間の直接参照もできます。
それじゃ和歌ランだろ
>>740
アホ。レベルが違う
744Delフサギコ ◆zE1iiRdQ :02/02/16 03:40
   ∧,,∧    / ̄
  ミ,,゚Д゚彡 < つまり、ポインタわからんでもヨシと
  (ミ  ミ)   \_
 〜ミ  ミ
   ∪''∪                     …ホントカ?

引数のvar渡しと
クラスの参照がわかればいいとおもうけどね
>>744
いや、他のオブジェクトを参照する「何か」といったポインタがないと
ツリー構造すら満足に作れなくなるから、ポインタは知っておかなきゃいけない。

「Java にはポインタがない」伝説と似た部分あり。
歴史的経緯で Java ほどポインタ否定にはなっていないが。

もちろん、厳密には C/C++ でも規格書にはポインタが物理アドレスを示して
いる保証などないんだけどね。
>>738
以下2点を簡潔に述べよ。
・どこに何が表示されたのか。
・SQLとして、どのようなことが起きることを期待していたのか。

あと、ほとんどのプロパティを実行時に設定しているが、オブジェクトインスペクタからの
設定に何か問題でも?
>>738
DataSouce2 を追加して、まんなかへんを

DataSource1.DataSet := Table1;
Query1.DataSource := DataSource1;
DataSource2.DataSet := Query1;
DBGrid1.DataSource := DataSource2;
>>735
>---- (^_^)(^_^)(^_^) THE REAL CHU-BOU (^_^)(^_^)(^_^) ----
>海岸では、実際のプログラマが砂の中のフローチャートを引くプログラマです。

「真のプログラマとは、海辺で砂にフローチャートを描くようなプログラマのことである」

賛成できません。ちょっとこわいかもね。

749真のプログラマとは:02/02/16 05:46
真のプログラマは トイレで頭の中にフローチャートを描く
750真のプログラマとは:02/02/16 05:48
真のプログラマは

var
programmer:Real

のことである
751真のプログラマとは:02/02/16 05:50
真のプログラマとは 山本 真 のことである
752デフォルトの名無しさん:02/02/16 07:07
DLLを使わないで、システム全体のキーイベントやマウスイベントを
フックすることはできますか?
>>752
多分、できない。つーか、DLLを使いたくない理由が分からない。
なんだか難しそうとか思ってるなら、実際は難しくないから、とりあえずやってみれ。

本当はVC使った方が簡単なんだけどね・・・・・
>VC使った方が簡単
ShareMemoryの話?だったらレジストリ渡しで初期化するという手も。
>>750
const
programmer:Boolean=True;
756750:02/02/16 13:48
>>755
たしかに....
function check(programmer: boolean; skill: boolean): boolean;
begin
 if programmer and skill then
  Result := True
 else
  Result := False;
end;

var
 programmer: boolean;
 skill: integer;
begin
{ snip }
check(programmer, boolean(skill)); //False;
check(programmer, skill > 0); //True;
758デフォルトの名無しさん:02/02/16 14:00
すんません。
会社のDEL4 (NT)で、カラーパレットから色を作るとザラザラした色ができます。
ピンクを作ればピンクの小さい四角と白の小さい四角、といった感じで。
一方、自宅(windows98) DEL4で同じ色を作るときれいなムラのない色が作れます。
ザラザラにならないためにはどうすればよいのでしょうか。

激しく厨房で自分でも恥ずかしいのですが、よろしくお願いします。
           +
      +         +     +
  +
.      / ̄\  +.  ∧_∧アハハハ  +
ノリカエセヨー( ´∀`)    (´∀` )  
      (つ  つ     (つ  つ■
.   +  ( ヽノ      ( ヽノ        +
      し(_)      し(_)



>>758
そりゃ、NTの方のPCの色数とWin98の色数が違うだけだろ、
Windowsの画面のプロパティで設定して下さい。
>>759
それは早く返した方がいい
彼のアイデンティティだし
>761
ワラタ
(*゜ー゜)教えてDelモナ
Delphi6のShellTreeViewでマウスダウンしたディレクトリの
フルパスを知るにはどうすればいいですか?
>>763
手っ取り早くやるなら
コソーリShellListViewを配置してShellTreeViewと同調させて
ShellListView.Folder[0]を見るとか。
>>764
(*゚ー゚)レスありがとう。
でもダメでした。\マウスダウソ のフルパスがしりたいのに
\マウスダウソの下にディレクトリがあるとそれも取ってきちゃう
C:\マウスダウソ\hogehoge
766デフォルトの名無しさん:02/02/16 22:46
質問なんですけど、
Delphiの\Help\Examplesに入っているプログラムは
日本語表示させると文字化けするんです。
日本語表示させるにはどうしたらいいのですか?
767デフォルトの名無しさん:02/02/16 23:45
>>766
何が「日本語表示」なの?何を表示させたいワケ?
フォントの初期値が英語なんでしょ。
あんまり細かいところを気にするな。
769デフォルトの名無しさん:02/02/17 01:28
教えてください
Delphiでテーブルやクエリを使用して実行したら
データベースへのログインというダイアログが出てしまいますが
出ない事ようにできないのですか?
770Delフサギコ ◆zE1iiRdQ :02/02/17 01:51
TDatabase.LoginPrompt を falseにして
TDatabase.Paramsの値を

SERVER NAME=なんちゃらサーバー
USER NAME=ほにゃららユーザー
PASSWORD=ちょめちょめパスワド

にすると

____∧ ∧_ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
___ミ,,゚Д゚ミ< で、パスワード聞かれなくなる!
__ ミ ⊃ つ  \______________
_〜ミ,, ,,〃
_ ∪ ∪


---- (^_^)(^_^)(^_^) THE REAL CHU-BOU (^_^)(^_^)(^_^) ----
真のプログラマは今時フローチャートなんて書かない。
∧,,∧ フツー カカネーダロ
ミ゚Д゚彡 Delフサギコ mailto:[email protected]
>>748さんサンクスコ
771Delフサギコ ◆zE1iiRdQ :02/02/17 01:57
http://www.borland.co.jp/qanda/delphi/d0003342.html
http://www.borland.co.jp/tips/cbuilder/cb002/cb_2.html
http://www.wwlnk.com/boheme/delphi/dbtips/css0110.htm

  ∧,,∧ ──────
 ミ゚Д゚,,彡 < いちお、URL
 ⊂⊂ ミ──────
    ヾ ,,ミ〜 ────
     し じ ─────
772デフォルトの名無しさん:02/02/17 01:59
>>770,771
thanks
773766:02/02/17 03:04
>>768
その通りでした。
つまんない質問してごめんなさい。
>>769
わかっていると思うが、ユーザー名/パスワードがベタテキストでフォームに埋め込まれるので
パスワードつけた意味がなくなります。
775デフォルトの名無しさん:02/02/17 06:34
Delphiのシェルを作りたいんですが、
ツリーに登録されている関数名や変数は如何したら取り出せますか。
>わかっていると思うが、ユーザー名/パスワードがベタテキストでフォームに埋め込まれるので
>パスワードつけた意味がなくなります。
よい子は文字列を分散させておいて実行時に組み立てて代入します
もっとよい子は乱数などで暗号化しておきます
ボタンをクリックするとボタンを追加する、ということは出来るのでしょうか?
>>777
できます。
>>777
procedure TForm1.Button1Clien(Sender: TObject);
var button: TButton;
begin
button := TButton.Create(Self); // 必須
button.Parent := Self; // 必須
button.OnClick := Button1Click; // ボタンが押された場合のイベントハンドラ登録
... // その他座標・サイズ・キャプション等設定
end;
780デフォルトの名無しさん:02/02/18 03:47
>>692
俺もそれやりたい。
TVS_INFOTIPをスタイルに加えて、TVN_GETINFOTIPメッセージを
捕まえればいいのかと思ったけど、どうもうまくいかない。
誰か知ってたら教えてください・・・
TreeView の InfoTip は、領域が「完全に見えない状態」の時に表示されるものなので
スクロールバーがでるくらいに幅を狭めては?
で、自動的に項目ごとに異なる文字列が出てくるが。

それとは別の話?
782デフォルトの名無しさん:02/02/18 07:00
>781
コードエクスプローラの情報を取り出したいのです。
783デフォルトの名無しさん:02/02/18 07:59
ごみ箱の「中身」のプロパティを出したいのですが、ごみ箱そのもののプロパティが出てしまいます。
なんで〜?Demoの中のvirtuallistviewやShellCtrlsなら問題ないのに…。

const
 EnumOption = SHCONTF_FOLDERS or SHCONTF_NONFOLDERS or SHCONTF_INCLUDEHIDDEN;
var
 Desktop, Bitbucket, Folder: IShellFolder;
 ID, Item, It: PItemIDList;
 Malloc: IMalloc;
 Enum: IEnumIDList;
 Got: DWORD;
 Menu: IContextMenu;
 Arg: TCMInvokeCommandInfo;
 PMenu: HMENU;
begin
 SHGetMalloc(Malloc);
 SHGetDesktopFolder(Desktop);
 SHGetSpecialFolderLocation(0, CSIDL_BITBUCKET, ID);
 Desktop.BindToObject(ID, nil, IID_IShellFolder, Bitbucket);
 Folder := Bitbucket;
 It := nil;
 Folder.EnumObjects(0, EnumOption, Enum);
 while Enum.Next(1, Item, Got) = S_OK do
 begin
  if It = nil then It := CopyPIDLs(Malloc, Item);
  Malloc.Free(Item);
 end;
 Malloc.Free(ID);
 if It <> nil then
 begin
  Folder.GetUIObjectOf(0, 1, It, IContextMenu, nil, Menu);
  PMenu := CreatePopupMenu;
  Menu.QueryContextMenu(PMenu, 0, 1, 100, CMF_NORMAL);
  DestroyMenu(PMenu);
  FillChar(Arg, SizeOf(Arg), 0);
  Arg.cbSize := SizeOf(Arg);
  Arg.nShow := SW_SHOW;
  Arg.lpVerb := Pointer(19); //'properties';
  Menu.InvokeCommand(Arg);
  Malloc.Free(It);
 end;
end.
784783:02/02/18 08:22
事前にコントロールパネルの中の「タスク」を列挙しておくと正常動作することが判明。
なおさら謎だ〜!

( 何で思いついたかというと、
コントロールパネルの中の「フォント」を扱う時
先に「タスク」をやっとくと上手くいったことが… )
785デフォルトの名無しさん:02/02/18 08:35
>「タスク」をやっとくと上手くいったことが

具体的にどんなことをしたの?
>>785
タスクスケジューラのスケジュールの列挙っちゅーことかな?
漏れは>783じゃないから分からないけど…
787デフォルトの名無しさん:02/02/18 11:40
TDBGridの列に、
テーブルの内容を横向きの棒グラフで表示したいのですが、
どなたか方法を教えてください。
788デフォルトの名無しさん:02/02/18 11:54
TIBTableのLocateについてなんですが、Delphi5で問題なくLocateできていたコードが
Delphi6では失敗します。IBTableに仕様の変更があったのでしょうか?
ソースみれ
Locateは怪しそうなので相当関数を作ってつかってる
TListViewでカラムの境界線をダブルクリックしたときに、
カラムのwidth設定をいじりたいんですが、
カラムの境界線をダブルクリックしたときに発生するイベントはあるんでしょうか?
791788:02/02/18 13:17
>>789
RESありがとうございます。
でもソース見る根性無かったので、いろいろ試してみた結果、
日付フィールドの扱いが5と6で異なっていたみたいです。
5は日付形式で渡してOKだったのですが、6は文字列に直してやらないと
ダメでした。
792780:02/02/18 15:08
>>781
いや、見えない部分を補完するあれではなくて、
項目ごとにTextプロパティとは別にヒントを表示したいのです。
たとえばIrvineなんかでは、そういう処理をしているとおもうのですが、
どうやっているんでしょう。
コンボボックスをフラットな状態?で表示させたいのですが、
Ctl3D:=Falseしても何も変化がありませんが、こんなもの?
他と違和感があるので、是非ともフラットにしたいのですが
回避策ありませんか?
巷にある、Delで書かれた正規表現検索オブジェクト
の使い勝手(速度や使いやすさ)レポートきぼんぬ。
>>793
BevelKind
796デフォルトの名無しさん:02/02/18 19:36
ClientDataSetで
UpdatesPending: キャッシュバッファに未適用のレコードが入っているかどうか調べる
ってものが欲しい。何かで代用は出来ないものでしょうか?
それとも派生コンポつくって解決できるんですか?
797793 :02/02/18 19:37
>>795
できました、ありがとう!
798783:02/02/18 21:19
>>786
コントロールパネルと、その下のタスクの中の列挙です。
自分以外の環境ではどうなるか気になる所です。

( そういえばタスクスケジューラをサービスごと切っていた記憶も…
799デフォルトの名無しさん:02/02/19 00:17
このスレだったかなぁ?デルスレ多くて…。
「ViXの作者がUPXでXPのなんたらかんたらで使うのやめた」って
吹聴してまわってるヤツいないか?
他の掲示板でまるまる同じレス見たよーな気がするんだが気のせいか?
800800:02/02/19 00:38
(;´д`)
801茶碗:02/02/19 00:38

質問です。

例えば
FormにRichEditとButtonとPopUpMenuがあります。
PopUpMenuにコピー、切り取りなどを適当に用意して
RichEdit1にPopUpMenuを関連付けてButtonのプロシージャで
for int1 := 0 to 10000 do begin
RichEdit1.Lines.Add(inttostr(int1));
RichEdit1.SetFocus;
application.ProcessMessages;
end;

等としたらずらーっと表示されていきます。
その処理中にRichEditで右クリックしPopUpMenuを
表示した場合ずらーっが止まってしまいます。
これを止まらずに行う方法は無いでしょうか。
802デフォルトの名無しさん:02/02/19 00:46
>>801
すまんのぅ。意味が分からんのじゃ。
803茶碗:02/02/19 00:53
いえ、こちらこそ。文章書くのが苦手で・・・
804素数2:02/02/19 00:58
popupメニューのアイテムを全部削除するとポップアップしないみたいだけど・・・
一時的に削除したらどうだろうか・・・役にたたんなこの情報
>804
大麻やれ。
806茶碗:02/02/19 01:21

>804
どうもありがとうございます。
>805
タイマーですか?

やりたい事は長い処理中にログみたいなのを表示したくて
PopUpMenuやMainMenuが表示されると処理が止まってしまう
のを何とかしたいのです。
Threadなどを使ってみたのですがどの部分をスレッドかすれば
良いかと思いやってみましたが上手く行きませんでした。

上手く言えないのですが例えば
Iriaでダウンロード中にログが表示されますが
その時にPopUpMenuが表示させたりMainMenuを表示させても
ログが流れて行きます。
そう言う事をやりたいのですが。
(´-`)。o ○ (それで何がしたいのだろう?popupがドバーっと出たらイヤだな…)
つーか、標準のpopupでなくて、自分で作れば?
右クリックを検知して自作のもんを出すとか…。
なーんて知ったかぶったりして。
RichEditとIriaのソレでは随分違うような・・・
810茶碗:02/02/19 01:50
>808
それだとずらーっは大丈夫なんでしょうか。
やってみます。

>809
そうなんですか、あれはどうやってるんでしょうか。
簡単であれば教えて貰えませんか?
なんか話が逸れてしまいそうなので、適当に流して欲しいのだが
ログの表示はレスポンス(反応)に対して文字が書き込まれるのであって
単純にループで回すような仕組みではないと・・・
TClientSocketとTServerSocketについて解説してるページってないですか?
ていうか何でマニュアル付いてないんだ…
>>812
Helpついてるぞ?
PopUpMenuやMainMenuはモーダルダイアログの一種です
つまり、それを表示した窓のメッセージを止めてしまいます。
これはメッセージを止めるのであってスレッドを止めるのではないことに注意。
だから、タイマーを使うと、タイマーは隠れた別の窓を使いますからそれとは
別のタイミングで動かせます
815デフォルトの名無しさん:02/02/19 09:36
はじめまして
顕微鏡で細胞分裂を観察しているのですがdelphiで録画と画像処理をやろうと思います。
カメラから画像を取り込むためのライブラリはございますでしょうか?
ご指導のほどよろしくお願いいたします。
カメラ付属のソフトでビットマップで取り込んで
あとは好きなようにってのは駄目なの?
817デフォルトの名無しさん:02/02/19 10:18
818デフォルトの名無しさん:02/02/19 11:35
>>815
ここで聞いても無駄。技量のあるやつなんかイネーヨ(ワラ
VB使え!
質問の仕方が初心者だな。
要らない情報が詳しくて、必要な情報が足りていない。
>>813
Helpの場所はどこですか?
・IDEでTClientSocketにカーソルを合わせてF1
・VCLリファレンスヘルプでキーワード検索
・VCLリファレンスヘルプの目次から「オブジェクト・コンポーネント(アルファベット順)」→「TC」
以上のどれでやっても出てこないんですが…俺の環境がどっかおかしいんでしょうか。
>>820 もしかしてフリー版? あれにはついてないかもね
822デフォルトの名無しさん:02/02/19 14:29
TWebBrowserで表示しているページを保存したいのですが、
簡単な方法って有りますか?
Panelの上に複数のObjectが乗せてあるとする。
これと同じ物を実行時に複製したいよ。
Panelの上じゃなくて、全てを個別に作成するしかないかな?
結構数がある上に、後々変更とかで楽がしたいんでPanelの
コピーでオブジェクトが作成できれば楽かと思っているのだが
どーすりゃいいモナー。
824デフォルトの名無しさん:02/02/19 14:34
>>823 TFrameではダメ?
>>825
いッいつの間に!こんな機能が!
恥ずかしながら全く知りませんでした。(汗)
>>823
フォームデザイナでパネルを選択してCtrl+Insしてコピー。その後親となるコントロールをクリックしてShift+Insで貼り付けでコピーできる。

TFrameとの違いは手軽に使えることと、一方を修正しても他方に反映されないこと。
>>827
>>832の逝っている事と少し違うような気がするけど
それってデザインでの話しでしょ、832は実行時って書いてるようだが
832間違い >>823 だね
>>828
TFrame のインスタンスを実行時に動的に複製すればいいのでは?
>815 Win32APIを使いなさい。詳しくは解説書を買いなさい。

>816-819 頭の足りない者は無理して答えなくても結構。
832茶碗:02/02/19 15:59

>814

出来ました。ありがとうございました。
>>821
最初からついてないんですか…残念。
>>823-830
Frameねぇ、便利なんだけどWin9xだと使えないかもよ?
リソース食いまくるからね、まあ、激しく使わなきゃ大丈夫か。

20個固定だが、その辺りはなんとかしてくれ、
取りあえずこんな感じでどお?

// Frame2を新規フレームとして作成しておいて、
// Form1 に ScrollBox1を張る。
var
  Frame: array[1..20] of TFrame2;
    ・
    ・
    ・
procedure TForm1.FormCreate(Sender: TObject);
var
  idx:Integer;
begin

  for idx:=1 to 20 do
  begin
    Frame[idx]:=TFrame2.Create(Self);
    Frame[idx].Parent:=Self.ScrollBox1;
    Frame[idx].Name:='iFrame'+IntToStr(idx);
    Frame[idx].AutoSize:=True;
    Frame[idx].Top:=(Frame[idx].Height*(idx-1));
end;

end;
835823:02/02/19 17:34
有難うございます、おかげさまで出来ました。

しかし、なぜフレーム使うとリソースが足りなくなるのかわかりませんが、
もしかして、フレームって貼り付ける度にフォーム生成してるのと同じ?

便利なんで、色々なフォームの共通点をフレームにしちゃおうかと思って
いたのですが、止めた方がいいでしょうか。
>>835 Windowsハンドル持ってるコンポなら同じじゃないの?
837719:02/02/20 02:03
ちと困ってます。
フォームを追加してちょろっと手を加えて、その時は普通に
動いていたのですが、Delphiを閉じてからしばらくしてまた
立ち上げたら

「[致命的なエラー]Project1dpr(7)ファイル'AFEdit.dcu'が見つかりません」

と出て実行できなくなりました。
AFEeditは追加したコンポーネントです。閉じる前までは
正常に起動できていたのですが…。原因と対策を教えて
ください。
838デフォルトの名無しさん:02/02/20 03:19
VCLリファレンスによると、TColor型の色指定でツールチップの
色clInfoText、clInfoBkは「Win95、NT4.0のみ」となっているのですが、
これ以外のOSの場合はどのように指定すればいいのでしょうか?

一応私の環境(Win98SE)では、clInfoText、clInfoBkで指定しても
反映されるのですが、Me、2k、XPなどはどうなんでしょう?
>>835
内部構造はわからないけど
リソースメーターとにらめっこしながら
フレームを使う場合と使わない場合で実験してみてはどうでしょうか.

あんまり人気のないフレームですが(笑)
余計な作業は減るしコードはシンプルになるしで
個人的にはかなりお世話になっています.


>>838
私が仕事で使ってるXPは大丈夫でした.
たーぶーん,同じでよいと思うのですが.

そちらのDelphiのバージョンがわかりませんが,
Delpht 5の場合はWin98登場の頃だったためかWin98の対応がなく,
(Windows の英語ヘルプもWin95/NT4.0時代のものです)
またWindowsでは将来の互換性が保証されているわけではないので
『のみ』という表記になったものと思われます.
(Delphi6でも同じ表記ならボーランドの手抜き?)

ちなみに clInfoText と clInfoBk は
Delphi 5 ではGraphic.pasで以下のように記述されています.
> clInfoText = TColor(COLOR_INFOTEXT or $80000000);
> clInfoBk = TColor(COLOR_INFOBK or $80000000);
COLOR_INFOTEXT と COLOR_INFOBK はWindows API の
GetSystemColor でツールチップのそれぞれ文字色,背景色を得るために使う定数ですが
ttp://www.microsoft.com/JAPAN/developer/library/jpsetupf/_win32_getsyscolor.htm
ここを見る限りWin95/NT4.0以後の変更については何も書かれていないので
おそらく大丈夫ではないかと.
840838:02/02/21 03:41
>>839
レスありがとうございます。VCLリファレンスはDelphi6のものです。
clGradientActiveCaption、clGradientInactiveCaptionは、
「Win98とWin2k」になっているので、Delphi5と同じということは
無いと思いますが、やはり手抜きなんでしょうか。
私のはDelphi6PersonalなのでGraphic.pasついてません。(^^;

XPでもOKということは、気にしなくてもよさそうですね。
ありがとうございました。
841昼寝:02/02/21 15:08
みなさん、初めまして
Delphiに触れて1週間未満の初心者ですが宜しくお願いします。

TTableコンポーネントのキャッシュアップデートを使用して
C/S環境のシステムを構築しようと思うのですが

画面に表示されたデータを、
他のユーザーがレコードを変更した場合、
ApplyUpdates
CommitUpdates
を実行すると例外エラーが発生します。

どのようにすれば良いのでしょうか?
842デフォルトの名無しさん:02/02/21 15:18
>>841
C/SでTTableは使わないほうがいいよ。
TQueryを使ったほうが良い。
843昼寝:02/02/21 16:01
842さん コメントありがとうございます。

TTableは、どういった理由で使わない方が良いのでしょうか?
TQueryだと、841の様なエラーは発生しませんか?

質問ばかりで、すいません
844デフォルトの名無しさん:02/02/21 16:26
C/Sならデータトラフィックなどが結構重要になってくるし、
SQLでないと柔軟にデータを取り出せないと思われるのでQueryをすすめています。
ちなみにCashedUpdatesプロパティはTrueになってますか?
TQueryなら Cachedupdates := True; RequestLive := True;にしなきゃダメだよ。
845デフォルトの名無しさん:02/02/21 16:30
申し訳ない。よく質問をみたら「他のユーザーがレコードを変更した場合、 」
と書いてありましたね。
そりゃ他のユーザーが変更したあとに新しくFetchしないでApplyかけたらエラーがかえってきますよ。
私なら行ロックをかけて変更不可にしますがどうでしょう?
846デフォルトの名無しさん:02/02/21 16:35
DBがOracleなら
BeforeEditで SELECT HOGE FROM HOGE_TABLE WHERE〜〜 FOR UPDATE NOWAIT;
をかけてエラーが帰ってきたらロックされてますとか出した方がユーザーも納得するでしょう。
他の人ならどうするかわかりませんが・・・。
847昼寝:02/02/21 16:40
>>845 コメントありがとうございます。

すいません、レコードのロックはかけたくないので、
例外エラーが発生したら、
「既に他のユーザーに変更されています、上書きしますか?」
「既に他のユーザーに削除されています、更新は行えません」
といったメッセージを表示し、処理を中断したいのですが、
どうすれば良いのでしょうか?


TQueryの件、ありがとうございました。
データトラフィックという説明で理解できました。
848デフォルトの名無しさん:02/02/21 16:44
中断させるのはAbortメソッドあたりで出来そうですね。
そのまま上書きはどうすれば良いのか・・・・。申し訳ないですが解りません。
>>847
漏れ、DBサパーリだけど。

例外をtry..exceptでキャプチャ、except節で

if ExceptObjectがその手の物であれば then
begin
  メッセージを表示;
  Exit;
end;
else //そうでなければ
  Raise;

てのはどうよ?
漏れだったらとりあえずこういう風に組んでみる。
OnUpdateErrorイベントのヘルプの説明を見よ。
851デフォルトの名無しさん:02/02/21 22:23
Delphi6使い始めたばっかりなんですけど、Stringの扱いに戸惑っています。

ヘルプにあるとおりに、 FileWrite(FileHandle, AString, Length(AString));
してみるも、変なバイナリを吐かれました。
FileWrite(FileHandle, PChar(AString)^, Length(AString)); でうまくいくようです。
何が起きているのかは想像できますが、何故そうなるのかがわかりません。
FileWriteの引数 Buffer が型無しなので、何を期待されているのか不明ですし、
そもそもどうしてヘルプにある書き方でうまくいかないのでしょうか?

また、Stringにヌルを含むバイト列を代入する方法もわかりません。
StrLCopyではヌル文字が見つかった時点で止まってしまいます。
MemCpy相当品、或いは任意のメモリ領域を参照させる方法はないですか?


まだ使い始めたばかりだからそう思うのかもしれませんが、
Delphiの文字列は相当に使いにくいような気がします。
文字列は任意のメモリ領域(倍取れる)であるとして、任意の文字(ヌル文字や
改行等)をデリミタとして扱うほうがわかりやすい思うんですがねぇ……
852デフォルトの名無しさん:02/02/21 22:27
>851
ぐぁ…訂正
(倍取れる) -> (バイト列)

倍取れるって……鬱死
>>851
C を覚えているのなら C を使い続けた方がよいのでは?
>>851
悪いこと言わないからC++Builder使え
これからDelphi6 Personalを始めようと思っているので、
本を購入しようと思うのですが、
基礎からわかるDelphi6
http://www.cbook24.com/bm_detail.asp?sku=99926228

Borland Delphi6 オフィシャルコースウェア 基礎編
http://www.cbook24.com/bm_detail.asp?sku=99925917

ではどっちをやったほうがいいのでしょうか?
あまりプログラミングの経験が無いのですが。
>853
いや、VCLは使いたいんですよ。
ポトペタで簡単にUIを作れる魅力は捨てがたいです。
フリーなBCB(IDEつき)ってありましたっけ?
857Delフサギコ ◆zE1iiRdQ :02/02/21 22:45
   ∧,,∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ミ,,゚Д゚彡 < よくわからですが
   U  つ∀ \____________
 〜ミ  ミ
   ∪''∪ MidNightはワインでも・

>>FileWrite(FileHandle, AString, Length(AString));
それ使った記憶がないので知らん

>>MemCpy相当品
TMemoryStreamとかかな?
どういう処理させているんだろうか。

>>デリミタとして
・・・・・・

>854-855
胴衣

>>855
基礎からは、比較はともかく、いい本だと思われ。

オフィサルは読み物として面白さがない教科書的ぽっさを感じて
フサは立ち読みだけでイッパイイッパイです。
>855
漏れが立ち読みした感じだとどっちも悪い本じゃないので、
書店へ行ってみて、わかりやすそうだと思ったほうを買えばいいと思うよ。
ただどっちも基本的なことしか書いてないけど。
859855:02/02/21 22:49
>>857
レスありがとうございます。
ではさっそく基礎からわかるDelphi6を買おうと思います。
860851:02/02/21 23:12
おや、名前書いてなかったですね。
>856 自分す。


>857

>>>FileWrite(FileHandle, AString, Length(AString));
>それ使った記憶がないので知らん

えと……これってファイル入出力の最も基本的なやつじゃないんですか?
んじゃ、 FileStream.Write(AString, Length(AString)); でもいいんですが。
今試したところ、同様の結果になりました。

>>>MemCpy相当品
>TMemoryStreamとかかな?
>どういう処理させているんだろうか。

単に Buffer : array[0..x] of Byte を
SetLength(AString, SizeOf(Buffer)); して
StrLCopy(AString, Buffer, SizeOf(Buffer)); したいだけなんですが。
これだと Bufferにヌルあるとそれ以降コピーされないんですよね。
(ヘルプ見ずに書いているので引数に間違いなどあるやも知れず、為念)
これを全部コピー(或いは参照)させたいわけですよ。

要は単に0を含むバイナリをStringにぶち込みたいだけなんですが。
こういう使い方をするべきではないのかな?
「基礎からわかるDelphi5」を持ってるんですが、
「基礎からわかるDelphi6」って5との違いはどれくらいなんでしょうか?

それなりに内容が違うなら購入しようと思っているのですが、
本屋で見かけないので比較も出来ず、取り寄せてもらって
内容がほぼ一緒だと悲しいですし…
CopyMemoryじゃない?
863Delフサギコ ◆zE1iiRdQ :02/02/21 23:30
        ∫
   ∧,,∧ ∬       / もっとも基本的な奴は
   ミ,,゚Д゚ノ,っ━~  <  ラップされたリッチライブラリに
_と~,,,  ~,,,ノ_. ∀  \ 及ぶべくもないから
    .ミ,,,/~),  .| ┷┳━  あまり使わないという罠
 ̄ ̄ ̄ .し'J ̄ ̄|... ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄   .┻
文字列IOならTStringListとか
MonaUtilsの関数を使うだけなんだけど…

Delファの文字列は#0で変な処理を
起こす部分がイパイですから、塗る文字含むのを使う場合は
文字列として扱っちゃダメダメ

そもそも、バイナリをどうして文字列に入れる必要が?

バイナリ系は
苦手分野なので他の方にまかせるです

>>861
確か内容は8割方同じです。サンプルで作るものが違ってたかな。

基礎D5をクリアしたなら、違う本にステップアップするよろし
864del6無料から始めた男:02/02/21 23:55
本買うより、検索しまくっていろんなページ見る方が勉強になると思うよ。
その後で本買うといいと思うな。個人的に。オレ、そうしたし。
オフィシャルの応用コースしか、本は買ってないよ。
>>860
Delphi6使ってんだから、昔みたいに文字列を動的配列みたいに使うのはやめようよ。

>FileWrite(FileHandle, AString, Length(AString));
AStringはCみたいに配列の先頭ささないから駄目ですよ。
何でも渡せるからつい渡しちゃんのはわかるけれど。
 FileWrite(FileHandle, AString[1], Length(AString));
でだめですか?

そういや、FileWriteって使ったこと無いなあ。
FileOpenのヘルプ見ても推奨されないみたいなことかいてあるし、
大抵はStream使うのでは?
>大抵はStream使うのでは?
いいすぎた。
AssignFileとかBlockWriteかなと。
867851:02/02/22 00:07
>862
おお、これこそ求めていたもののようです。
ありがとうございます。

……しかし、これ、ヘルプに載ってないのね。

>863
>文字列IOならTStringListとか
>MonaUtilsの関数を使うだけなんだけど…
>
>Delファの文字列は#0で変な処理を
>起こす部分がイパイですから、塗る文字含むのを使う場合は
>文字列として扱っちゃダメダメ

そうでしたか、勉強になります。

>そもそも、バイナリをどうして文字列に入れる必要が?

TIdCoderが引数としてStringを要求するから
TIdHTTPがHTTP BodyをStringで返すから。

>865 >866

どうもです。
調べてみます。
868851:02/02/22 00:08
>861
上の書き込みの通り私も初心者なんですが、
「基礎からわかるDelphi4」を持ってます。
2つも前のバージョンですけど、私にはこれで十分でした。
Delphiは昔から完成度が高かったのか、今のバージョンと
あまり変わりがないように見えます。(この本を見る限りでは)
なので、この本の5も6も大して違いはないのでは?

この本には基本的なコンポーネントのさわりしか書いてないし、
実際にそのコンポを使うときはヘルプを見ますからね。
基本的なコンポの紹介とチュートリアルしては役立つと思いますよ。

それよりもObject Pascalの文法的な部分が少なすぎる気がします。
他の言語をかじった事があるなら話は別ですが、プログラミングの
初心者にはわかりにくいのではないかと。

それよりも 「Borland Delphi6 オフィシャルコースウェア 基礎編」
の方が良さそうに思えます。
5分程立ち読みした程度の感想ですが。
値段はどちらも大して変わりませんしね。

869851:02/02/22 00:21
>868
ちょい加筆修正。

>この本には基本的なコンポーネントのさわりしか書いてないし、

もちろん簡単なアプリの組み方や、IDE(開発環境)の使い方、
DataBaseの作り方まで書いてあるのでこの一文は訂正します。
この辺は自分にとっても役に立ちました。
ただまぁ、言いたいことは

>それよりもObject Pascalの文法的な部分が少なすぎる気がします。

これに尽きるということで。
870デフォルトの名無しさん:02/02/22 00:27
もっと広まるように、デルマガを本屋にたくさん置いてもらう嘆願書を
作りましょう!
あと、はなっからVCLがシステムにインストールされてる環境にするように
ビルゲイツに頼みましょう!
871デフォルトの名無しさん:02/02/22 00:36
いきおいでDel6proを買ったんだけど
今押し入れです。
personalでじゅうぶんでした。
でもデルマガの記事って、わかってる人はわかってるし
わからない人は読んでもわからんし、かといって中道的ナチュラルネタをやる訳でもなし。
なんつーかこう。。。
>>867
CopyMemoryはWinAPIだーよ
>>871
Personal使うならProつかっとけって
875三村:02/02/22 00:41
>>871
押し入れかよ!
876デフォルトの名無しさん:02/02/22 01:46
メモ帳に書いてある内容を読み込む方法ってありますか?
877デフォルトの名無しさん:02/02/22 01:51
>>876
死ぬほど検索して質問してるのだろうな?
878デフォルトの名無しさん:02/02/22 02:18
paradoxのpass解析ソフト あったら教えてください
879デフォルトの名無しさん:02/02/22 02:29
>>878
死ぬほど検索して質問してるのだろうな?
880三村2:02/02/22 03:09
>>887,879
死ぬほどかよ!
つーか、ひつけーよ!
881三村2:02/02/22 03:11
>>880
つーか、887かよ、877だろ!
>>876
とりあえず、クリップボード経由版

procedure TForm1.Button1Click(Sender: TObject);
var
hEdit:HWND;
begin
hEdit := GetWindow(FindWindow('Notepad',nil),GW_CHILD);
if hEdit = 0 then exit;
SendMessage(hEdit,EM_SETSEL,0,-1);
SendMessage(hEdit,WM_COPY,0,0);
SendMessage(hEdit,EM_SETSEL,0,0);
Memo1.Clear;
Memo1.PasteFromClipboard;
end;
>>876 WM_GETTEXT版

procedure TForm1.Button1Click(Sender: TObject);
var
hEdit:HWND;
len:integer;
s:string;
begin
hEdit := GetWindow(FindWindow('Notepad',nil),GW_CHILD);
if hEdit = 0 then exit;
len := SendMessage(hEdit,WM_GETTEXTLENGTH,0,0);
SetLength(s,len+1);
SendMessage(hEdit,WM_GETTEXT,len+1,LPARAM(PChar(s)));
Memo1.Text := s;
end;
>>851

もう解決しているかもしれませんが

文字列は、「参照カウンタ、長さ、内容」を保持したメモリーブロックへのポインタで
実装されているので、データそのものの先頭へのポインタは
PChar(AString) か @AString[1]で取れます。
で、参照渡しの場合は、
PChar(AString)^ か、(@AString[1])^ = AString[1] となります。

AStringへのバイナリーデータ設定は、
SetString(AString, 先頭へのポインタ, 長さ) が便利です。

>>863で書かれているように、SysUtilsの文字列関数は
内部でWindowsAPI(C文字列を扱う)を使ってますので#0で誤動作します。
(しかしCompareStringみたいに明示的に長さを渡せるものはOK)
Systemの文字列関数(Pos, Delete, Insertなど)は
純正Pascal関数なので#0を含んでいても正常動作します。
885851:02/02/22 10:26
いちおう結果報告

CopyMemory(PChar(AString), @Source[0], Length(Sourch));
CopyMemory(@AString[1], @Source[0], Length(Sourch));

で望みどおりの結果が得られました。
IOの場合も同様に、但しアドレスではなく実体を渡すと。
なんで実体なのかさっぱりわからないけれど、これはきっとC++の
参照渡しみたいなものなんだろーなということで納得。

結局Stringに任意の場所を参照させる方法はわかりませんでしたが、
Stringの参照先を書き換えることはできるようなのでよしとします。
みなさん、どうもありがとうございました。


それからいろいろ試した結果、

DynamicArray := @StaticArray[0] とすると
@StaticArray = @StaticArray[0]
@DynamicArray <> @DynamicArray[0] = @StaticArray[0]
@aString <> @aString[1] = Pointer(aString)

だったんですね。
Stringが1originなのはShortStringとの互換のためですか。
いやはや、この辺はCと同じと思っていたので嵌りました。

それにしても動的配列まで参照カウントつきだったとは驚きでした。
配列については組み込みでauto_ptrが用意されてるわけですな。
メモリリークの心配もなく、Shallow Copyできて万々歳と。
……いや、ちょっとまて、それはいいとしても、(標準で)Deep Copy
‘できない’動的配列てなんかおかしくないですか?
普通Deep Copyする手段を用意した上で、デフォをShallow Copyにするものでは。
このへんどういうつもりなんでしょうかね? 


>865
>Delphi6使ってんだから、昔みたいに文字列を動的配列みたいに使うのはやめようよ。

昔は文字列が動的配列の代わりだったんですか?
遅延書き込みつきでさらに高機能なんだし、いいじゃないですか。
あ…それだと今度はポインタ的な使い方ができないのか。

いや、それよりも文字列と配列(というかコンテナ)を区別する理由ってなんでしょう?
(> 863 の理由ならまぁ納得ですが)
文字列といっても単なるバイト列、一種の動的配列じゃないですか。
親子関係にあるべきとまでは言わないけど、操作はできるだけ互換にして欲しいな。

886851:02/02/22 10:34
>884
あ、どうもすみません。
新着がないか確認するべきでしたね。

>883 の通り解決済みですが、自分の考えに間違いが
なかったとわかったので安心できました。


> >>863で書かれているように、SysUtilsの文字列関数は
> 内部でWindowsAPI(C文字列を扱う)を使ってますので#0で誤動作します。
> (しかしCompareStringみたいに明示的に長さを渡せるものはOK)
> Systemの文字列関数(Pos, Delete, Insertなど)は
> 純正Pascal関数なので#0を含んでいても正常動作します。

なるほど、そうですか。
参考になりました。
どうもありがとうございます。

887851:02/02/22 10:37
>886
訂正するまでもないかもですが

> >883 の通り解決済み

> >885 ですね
ひつこい ではなくて しつこい ですよ。正しくは。
889865:02/02/22 13:25
>>885
>昔は文字列が動的配列の代わりだったんですか?
そういう風に使ってる人がいたということで。
俺はC見たいにメモリ確保、解放してやってたけど。

今なら、array of byteのstring文字列実装とほぼ同じの動的配列があるんで・・・。
>>888
ここは、「なんだ、しつこいかよ!」と書くべきだろ。
しかも、888かよ!
891デフォルトの名無しさん:02/02/22 13:53
Try ... except を使用して例外を取得しているのですが、
ApplyUpdatesで例外エラーが発生した場合、
exceptの処理が実行されずに、システムのエラーメッセージが表示されます。

以下、ソース抜粋
dbs.StartTransaction;
try
tbl.ApplyUpdates;
dbs.Commit;
except
dbs.Rollback;
end;

tbl.CommitUpdates;

どうすれば、システムのエラーメッセージを表示させずに、
例外を処理することができるのでしょうか?
>>885
すでに解決済みのようですが,

Move(Source[0], AString[1], Length(AString));

という手もありますです.
Moveは標準手続きです.

#私がかつて作った汎用リストクラスは1個の文字列をバッファにしていました(笑).

>>888
お江戸の方なのでしょう.
893デフォルトの名無しさん:02/02/22 17:22
>>867
>>そもそも、バイナリをどうして文字列に入れる必要が?
>TIdCoderが引数としてStringを要求するから
>TIdHTTPがHTTP BodyをStringで返すから。

TIdCoder はよく知らんけど、TIdHTTP の場合は Stream で Body を返す
Method もきちんと用意されてるよん。String で返すシリーズは返ってくるのが
String で処理できるデータだとわかってる場合に使おうね。
894783:02/02/22 19:16
すみませんが、>>783のコード「だけ」で、
正常にごみ箱の「中身」のプロパティが出せる環境の人いらっしゃいますか?
(VCLも使わない)

当方Windows2000SP2, IE5.5なのですが、結構怪しい環境なので、
この動作が、一般的に起こり得るのか、うちの環境が変なのか知りたいのです。

あれから試したかぎり、
・コントロールパネルのフォントのFORPARSINGで得られるディレクトリ
・コントロールパネルの管理ツールのFORPARSINGで得られるディレクトリ
・コントロールパネルのネットワークの中身
・ごみ箱の中身のプロパティ
が、事前に、コントロールパネルの中のタスクを調べておかないと変になります。
さらにタスクを調べるのはスレッド毎に必要なようです。
895851:02/02/22 21:57
>892
> Move(Source[0], AString[1], Length(AString));
>
> という手もありますです.
> Moveは標準手続きです.

……こ、これはまた、ずいぶんとストレートなお名前ですな。
ということは、Copy やら Fill なんてのも…あった。

いや、お恥ずかしい、探し方が全く足りなかったようで、海よりも深く反省。
あまりに安直なので逆に考えもしなかったというか、StrCopyにつられて
MemXXだとかMemoryXXXなんてのばかり探してました。
やっぱりこの手の処理が標準で用意されていないわけなかったですね。


>889
メモリ転送の方法がわかった以上、最早配列の仕様に何の文句もありません。
が、Stringを動的配列の代わりにするべきではないというのはやっぱりわからないです。
遅延評価が必要かどうかで使い分ければいいのでは?
配列として扱う分にはどちらも同じように扱えるようだし。


>893
> TIdCoder はよく知らんけど、TIdHTTP の場合は Stream で Body を返す
> Method もきちんと用意されてるよん。String で返すシリーズは返ってくるのが
> String で処理できるデータだとわかってる場合に使おうね。

そうはいっても、ダウンロードしてみるまで中身がTextかどうかわからないですよ。
Content Typeをみて判断しろってことですかね。
というか、TIdCoderに至っては、Hash値がStringで返されるんですが。
これはTIdCoderの仕様が悪い?
896デフォルトの名無しさん:02/02/22 23:12
>>895
>そうはいっても、ダウンロードしてみるまで中身がTextかどうかわからないですよ。
>Content Typeをみて判断しろってことですかね。

いや、だから >>893にも書いたように、中身が Textかどうかわからない場合は Stream
で Body を返す Method を使えばいいんじゃないかな?

戻り値の型が String なんだから NULL混じりのバイナリを扱えないというのは
当たり前の話だよね。
897三村:02/02/22 23:34
当たり前かよ!
Tedit(FindComponent('EditA')).Text:='あいう';
みたいな感じをしたいのですが、この時に文字列として存在して
いるフォーム名も指定できる方法ありますか?
StringListにフォームの名称を入れておいて、その中に該当する
EditがあればStringListをグリグリして値をぶち込みたいです。

TStringListの中身のテキストデータサイズ、
Length(StringList.Text)
よりコストパフォーマンスの良い取得方法ないですかねぇ…
それっぽいメソッドもないし、ググルで検索しても無駄な物ばかり引っかかる…

検索とコーディングに疲れたので質問して寝ますスマソ


>>898
いまいちやりたいことが飲み込めん…
Screen.Formsは使えないかな?
900Delフサギコ ◆zE1iiRdQ :02/02/23 01:57
TComponent.FindComponent

    ∧,,∧     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ミ,,゚Д゚彡 <  TCompoのメソドだから…
   ミ つ日   \ 各FormのFindCompoを
 〜ミ,,,,,, ,,ミ       呼ぶのヨロシ。

Length(StringList.Text)
素直がよろしいのでパフォはあきらめたら?
っていうか、遅いのか?その程度の処理が?

>それっぽいメソッドもないし、
どうせそれっぽいメソドあっても
「よりコストパフォのよい取得方法は?」
っつう、質問が出てくるだけじゃないかしら?
901デフォルトの名無しさん:02/02/23 01:59
>>900
900ゲットオメコォ!
902Delフサギコ ◆zE1iiRdQ :02/02/23 02:06
         ∧,,∧ ・・ゲトォーメコ サレタ・・
      Σミ゚Д゚,,彡
        ⊂ ⊂ミ  
       ⊂゙゙ 〃  
       /(/″
903デフォルトの名無しさん:02/02/23 02:15
>>882 >>883
丁寧なレスどうもありがとう!!
できるかできないかだけ教えてもらえさえすれば、
あとは自分で調べようと思ってたのだけど。
感動した!あんたいい人だ。
予想外に名スレになったもんだ、次でVer3か、
D相談を追い抜く勢いだな、そのうち、こっちがメインになるのか?(w;

少し前にFrameのネタが出ていたが、俺も今まで使った事がな
かった少し試してみたが、知ってる人がいるか知らんが、
MS-Accessのサブフォームと似た物なのかなと感じたのだが、
Frameを使ってる人は何に使っているのだ?
当然だが、FrameにはOnCreateイベントなんかもないし、
結構使い方が限定されそうだが、やはり、コンポーネント風に
使えるPanelって感じの使い方なのだろうか。
>905
たとえばページコントロール使ってプロパティシートみたいなのを作る時、
Frameを使うとそれぞれのページの中身を独立したモジュールとして
作れるので気持ちイイ、とか。
907デフォルトの名無しさん:02/02/23 04:44
>>905
メインフォームにコードが集中しないように、適当な単位で Frame に分割
してる。例えば 3-Pane型のアプリなんかはそれぞれの Pane を個別の
Frame で実装して、メインフォームに乗っけてる形。

コードの見通しがよくなるんで、俺的には手放せない機能だな。

>当然だが、FrameにはOnCreateイベントなんかもないし、
コンストラクタで代用してる。(それはそれでいろいろ注意が必要だったり
するわけなんだけど)
908ねこま:02/02/23 04:51
>>899
これでいかがか?

n := 0;
for i:=0 to strlist.Count-1 do
begin
 Inc(n, Length(strlist[i]));
end;
>908
結果は Length(StringList.Text) と同じですか?
>>905-907
複雑な画面になればなるほど、Frameで別のフォームに
してしまうと確かに、見通しはよくなるな
あと、繰り返しとか必要な処理を >>834 のように書けば、
昔よく言われてた、Delphiに配列が無いから云々も
かなり楽に扱えるようになるな、Frameの中のオブジェクト
名は同じnameが使えるわけだし
しかし、うちの会社では、俺以外は誰もFrame使ってない、
D4->D6にアップグレードしたから、誰も存在自体を知ら
ないのだろうか・・・・
改行分が…
912ねこま:02/02/23 05:01
そういえば,CRLF が入らないからちょっと違うかも.
913デフォルトの名無しさん:02/02/23 05:05
TMemoStringsとかじゃないだろな。
StringList.Count分をnに加算すればいいかな。
でも、カラの行ってCountに含まれたっけ?
915 ◆10000jp. :02/02/23 07:55
>>891
(´∀`)<ApplyUpdatesの返値をチェックしたらどうだろ?
      んで、raise EDatabaseError.Create('もうだめぽ')
916lily:02/02/23 12:28

Deilphi で 旧文化オリエントの作った DenpyoMan に負けないコントロールを作りたいと思いますが
どのように始めればいいか分かりません。Grid から始めればいいんでしょうか?
APIはどのあたりを勉強すると良いですか?

質問ばっかりでスミマセンがお願いします。
917783:02/02/23 12:57
誰もシェルネームスペースなんて興味ないのかな…
918デフォルトの名無しさん:02/02/23 14:12
Personal版使ってるけど、
MSecsToTimeStampとか使えない・・・?
Pro版買うしかないのか・・・
919891:02/02/23 14:34
>>915さん レスありがとうございます
返り値を判断してやってみます
>>916
コンポーネントを作った事がなければ、最初はラベルを継承して影
をつけたり、TEditを継承して数値入力コンポを作ったりして組み方を
学んでからの方が良いのでは?

実際には、StringGridを継承して作れば良いのだろうがコンポ以前に、
StringGridにコンボボックスを描くやり方とかを先に勉強した方が良い
と思われる。それに特殊なAPIなんかは使わなくても出来ると思うが。
921デフォルトの名無しさん:02/02/23 14:37
キャッシュアップデートを使い
ApplyUpdatesでキャッシュをDBに反映させる際、
レコードのキーが重複している場合に、システムが応答不能になります。

tryで例外をキャッチできていないようなのですが、
ApplyUpdatesでキー重複が発生した場合は、
どのようにエラーを取得すればよいのでしょうか?
922 ◆10000jp. :02/02/23 15:21
>>921
(´∀`)<>>915と被るかな? ApplyUpdatesの返値を調べて
      raise EDatabaseError.Create('うわ〜ん')でexcept部へ跳ぶ。
      詳しいエラーの内容が必要ならOnReconcileError イベントハンドラ
      (TCustomClientDataSet)でエラーの調査&処理するのはどうかな?
923921:02/02/23 15:39
>>922
すいません、ApplyUpdatesの返り値は
どうやって調べたらよいのでしょうか?

924 ◆10000jp. :02/02/23 16:35
(´∀`)<ApplyUpdatesは確かエラーの数を返すので、
      rslt := cds.ApplyUpdates(-1)等でrsltをチェック
      するのは駄目かなぁ?
      
925923:02/02/23 17:21
>>924
ApplyUpdatesに引数設定や、戻り値の取得を行おうとすると
コンパイルエラーが出ました。

私はTQueryのApplyUpdatesを実行してますけど
これがいけないのでしょうか・・・
926lily:02/02/23 17:28
>920

あーなるほど。数値入力Editを作っておいて
StringGridの中に書いてみるってことですか。
やってみよ。
927ああ:02/02/23 18:57
Delphiで複数のフォームでテーブル、クエリ、データソース、
データベースグリッド使用しているのですが、
その際、すべてのプロパティをセットして実行しようとしたら
「データソース1、データ間の循環参照は許されません」
が出てしまいます。どうぞ教えてください
データソース1、データ間の循環参照は許されないんです。

929ああ:02/02/23 19:07
>>928
「データソース1、データ間の循環参照」の意味が
いまいちわかりづらいのですが
930 ◆10000jp. :02/02/23 19:15
>>925
(´∀`)<TClientDataSetかと思ったらTQueryでしたか、、、ごめんなさい。
      僕のところのTQuery.ApplyUpdatesはキー違反で例外出します。
      Delphiのバージョンは6です。 構成はTQuery+TUpdateSQLですか?

>>927
(´∀`)<もう少し情報が必要かも。TTable/TQueryのDataSourceはmaster-detailで
使わないのであれば指定しなくて良いらしいですよ?
931925:02/02/23 19:23
>>930
>TClientDataSetかと思ったらTQueryでしたか、、、ごめんなさい。
私のミスですので、こっちの方が、ごめんなさいです。

念のため、
TBDEClientDataSetで試しましたけど、ApplyUpdatesで
応答不能になりました。

TBDEClientDataSetは、
◆10000jpさんが使われているTClientDataSetとは別物ですよね
Delphi6 Pro版でも使えますか?
932925:02/02/23 19:26
>>930
>Delphiのバージョンは6です。 構成はTQuery+TUpdateSQLですか?

はい、Delphi6 Proで、TQuery+TUpdateSQLを使ってます。
ApplyUpdatesでキー重複の場合はシステムの応答がなくなりました。

とりあえず、教えていただいた
TClientDataSetを使おうと思うのですが、
TBDEClientDataSetで大丈夫ですか?
たとえば、実行時に

Table1.MasterSource := DataSource1;
DataSource1.DataSet :=Table1;

ってやると、Table1 のマスターテーブルが自分自身になるので実行時エラーとなる。
オブジェクトインスペクターから設定する場合には、選択肢に出てこないからもともと
設定できないんだが。

これでわかるかな?
934 ◆10000jp. :02/02/23 19:45
>>932
(´∀`)<TBDEClientDataSetはコード見れば解るけど危険な爆薬の香りです。
      僕は、ClientDataSet+Providerの方が安心かなぁ。偉そうですみません>ボーランド様
      でもTQuery+TUpdateSQL でもちゃんと動きましたよ。ApplyUpdate周辺の
      コード晒しできます?
935ああ:02/02/23 19:52
>>930
やはりDataSourceをはずしたらエラーはなくなりました
ありがとうございました
936デフォルトの名無しさん:02/02/23 19:55
有名アクセスランキング系のサイト全容ってどこも大体似てるんだが、どこの「アクセスランキング」CGIスクリプト使っているか知ってる?
>>936
どうして個々で聞くの?
>>936
誤爆?
939 ◆10000jp. :02/02/23 20:19
>>932
(´∀`)<あ、もしかして、、、重複キーのエラーダイアログがフォーム
      の後ろに出ているという事は無いですよね? IDEでのデバッグ中
      にはフォーカスが狂うこともしばしばあります。僕だけかもしれませんが、、、
      一度IDEデバッガを切って実行してみては?
940932:02/02/23 20:37
>>934 親切に答えていただいて、ありがとうございます。

>でもTQuery+TUpdateSQL でもちゃんと動きましたよ。

ということは、私のコーディングか、プロパティ設定が
悪いのでしょうね・・・

>ApplyUpdate周辺のコード晒しできます?

はい、大丈夫です。(以下、コマンドボタンのクリック時イベント)

procedure TfrmInput.btnUpdateClick(Sender: TObject);
var
intAppliUpdates : integer;
begin
dmdDb.dbsOffice.StartTransaction;
try
intAppliUpdates := dmdDb.qryTokuisaki.ApplyUpdates(-1);
if intAppliUpdates <> 0 then
raise EDatabaseError.Create('うわ〜ん');
dmdDb.dbsOffice.Commit;
except
dmdDb.dbsOffice.Rollback;
ShowMessage('err');
end;
end;

dmdDb = データモジュール
dbsOffice = TDataBase
qryTokuisaki = TQuery(TUpdateSQL設定済み)

データベースは、Access97のMDBを使用しています。

>>939
>一度IDEデバッガを切って実行してみては?

素人質問ですいません
[ツール]-[デバッガオプション]-[言語固有の例外]
Delphi以外の例外で停止のチェックをOffにすればいいですか?

941 ◆10000jp. :02/02/23 20:56
(´∀`)<[ツール]-[デバッガオプション]-[総合開発環境を使う]をOFFです
942 ◆10000jp. :02/02/23 21:13
>>940
(´∀`)< exceptでは on e: EDatabaseError でキャッチしてあげて
ShowMessage(e.Message);しRollbackした後、変更分を
      キャンセルして、データベースと再同期をとった方が良いですよ。
943940:02/02/23 21:58
>>942
了解です。

それと、
IDEデバッガを切って実行してみましたけど、
システムは応答なしのままでした。
TQuery + TUpdateSQL の組み合わせでApplyUpdates(引数指定できない)
で試してみました。

キーはフォームに張ったDBEditコントロールに手入力しているのですが、
重複しない値であれば、正常に動作しています。


944親切な人:02/02/23 21:59

ヤフーオークションで、幻の人気商品、発見!!!

今は無き「コピーガードキャンセラー」↓
http://page.auctions.yahoo.co.jp/jp/auction/42757955

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
945 ◆10000jp. :02/02/23 22:27
>>943
(´∀`)<自分のTQuery+TUpdateQueryだとこんな感じでやってます。
      IDEでもデバッガ外してもちゃんとrollbackします。
      Access固有のバグなのかなぁ? ODBCじゃないよね?
      それでは、皆さんおやすみなさい。

procedure TForm1.Button1Click(Sender: TObject);
begin
 Database1.StartTransaction;
 try
  Query1.ApplyUpdates;
  Database1.Commit;
 except
  Database1.Rollback;
 end;
 Query1.CancelUpdates;
end;
946デフォルトの名無しさん:02/02/23 22:39
整数型とTpointでは型が違うと怒られてしまいます。これって
Tpointを整数型に変換できますか?
TPointって整数を二つ含んでるけどどう変換したい?
948946:02/02/23 22:43
>>947
えっと、実はテキストエディタの検索を作っているのですが、Posで
見つけた位置をLongint型に代入したいのです。
Posの戻り値はIntegerでLongIntに普通に代入できるよ。
TPointは無関係。ヘルプとサンプル見てみなよ。
950デフォルトの名無しさん:02/02/23 22:50
Pos関数とTPointってどういう関係があるんだろう…
951946:02/02/23 22:56
>>949
そうですか、もう少しヘルプを見てみます。

>>950
なんかそう言われると、やり方自体間違ってるかもと思うように
なってきた。

VBから移行してきたばかりでまだ良くわかってないのです。
とりあえずVB6で使ってたInstr関数の変わりでPosを使って
みたのですが…。Delで文字列検索の定番みたいなのが
あればヒントだけでも教えてもらえると助かります。
952デフォルトの名無しさん:02/02/23 23:04
var
 I : Integer;
 S : string;
begin
 S := 'あいうえおABC1234.';
 I := Pos( 'ABC', S );
 ShowMessage( 'ABC は'+ IntToStr(I)+'文字目にあります');
end;

とか。
Posは漢字の検索で誤動作することがあるからAnsiPosだな。
>レス数が950を超えています。1000を超えると表示できなくなるよ。

そろそろ次スレを
955デフォルトの名無しさん:02/02/23 23:13
大小文字を区別するのかがわかりにくいから、

TextPos と StrPos みたいに分けてほしいなァ
AnsiCompareText と AnsiCompareStr,
AnsiSameText と AnsiSameText みたいに。
ついでに
AnsiReplaceText と AnsiReplaceStr も。
>>954
じゃ、君が立てておくれ。
957943:02/02/23 23:17
>>945
ODBC接続してました・・・ すいません
BDEだと教えていただいた通りの動作ができました。

ODBCだと、こういう動作があるのですね。
動作的な違いは無いのかと思ってました。

>それでは、皆さんおやすみなさい。

親切に答えて頂いてありがとうございました。
m(__)m ぺこり おやすみなさい
958946:02/02/23 23:32
>>952 >>953 >>955
どうもです。見たことの無い関数ばかりなのでもう少し調べて
試行錯誤してみたいと思います。
959デフォルトの名無しさん:02/02/23 23:32
モナーの *やさしい* Delphi質問スレ Ver3
http://pc.2ch.net/test/read.cgi/tech/1014474727/
960デフォルトの名無しさん:02/02/23 23:33
モナーの *やさしい* Delphi質問スレ Ver3
http://pc.2ch.net/test/read.cgi/tech/1014474727/ 
961ヲッチャー:02/02/23 23:36
誰だよ。Hotkeyちゃんの掲示板に辛辣なこと書いたの。
ちょっとヒドイぞ。どうせ2ちゃんねらーだろ?
>961
わけのわからない書き込みで新スレを汚さないでください。
963ヲッチャー:02/02/24 01:31
>>962
はい。分かりました。
964 ◆10000jp. :02/02/24 13:53
>>957
(´∀`)<ODBCドライバのバグですかね〜
      ともあれ動くようになって良かったですね〜
965957:02/02/24 14:18
>>964
ありがとうございます お陰で動くようになりました。
m(__)m ぺこり これからはBDEを使うことにします。
966デフォルトの名無しさん:02/03/16 12:22
 あうー、おかしいです。spineditに何も入力されてない状態でボタンを押すと
止まっちゃいます。
「プロジェクト aaa.exeがEconvertErrorクラスの例外を生成しました。
""は整数ではありません'」
て出ます。
ウインドーの右上の×は押しても平気ですが、それ以外は全部ダメみたいです。
何の処理も記述してないボタンでも、押すと固まります。
他のspineditをいじっても固まります。
何故か実行ファイルそのもの(aaa.exe)を実行すると固まらないんですが・・。

 "spineditに整数が入力されてないときに他のボタンを押すと、
変数の値(整数)をspineditに代入する" って形にしたいんですが・・・。
その処理をボタンに記述しても、押すと処理を開始する前に固まります。
 一応2ちゃんねる検索とBorland Maniacs とDelphi Maling list でも検索しましたが全然ダメでした・・。
 回避方法分かる方、どうかお願いします。

 使ってる言語はDelphi6のpersonalです。
>966
気にせずそのままF9で続行するか、前もって
[ツール]-[デバッガオプション]-[言語固有の例外]-[Delphi言語の例外で停止]
のチェックを外しておく。
例外をキャッチするようにしていても、上のチェックが付いていると
デバッガで停止させられるのはDelphiの仕様。
漏れはウザいから、Valueプロパティを自前のやつに置き換えた
コンポーネントを作ったけどな。
968966:02/03/16 13:18
>967
ありがとうございました!!解決できました。
969DELモナー:02/03/19 20:18

  ∧ ∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ´∀`)< まだ書き込めるみたいだから
 (    )  | 書いておくよ。
 | | |   \_____________
 (__)_) 

次の次のスレが立っています。こちらへどうぞ。

モナーの *やさしい* Delphi質問スレ Ver4
http://pc.2ch.net/test/read.cgi/tech/1016467137/
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´∀`)< Delモナーは
  (    ) | 普通のモナーとは
  | | |  | 微妙に違うモナ
  (__)_) \_____
971デフォルトの名無しさん:02/03/24 23:16
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´♥`) 
  (    ) |  
  | | |  |  
  (__)_) \_____
   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ´♣`) 
  (    ) |  
  | | |  |  
  (__)_) \_____
973春だから…:02/04/05 03:52

   ∧_∧  / ̄ ̄ ̄ ̄ ̄
  ( ♥♥♥)<無意味age♥ 
  (    ) |  
  | | |  |  
  (__)_) \_____
どうやら埋めたほうがいいらしいな
975Delモナー ◆fPymXWHY :02/04/06 01:20
古いスレなので埋めておきます。

新スレ
モナーの *やさしい* Delphi質問スレ Ver.5
http://pc.2ch.net/test/read.cgi/tech/1017803412/
976Delモナー ◆fPymXWHY :02/04/06 01:21
976
977Delモナー ◆fPymXWHY :02/04/06 01:23
977
新スレへどうぞ。
978Delモナー ◆fPymXWHY :02/04/06 01:25
モナーの *やさしい* Delphi質問スレ Ver4(HTML化待ち)
http://pc.2ch.net/test/read.cgi/tech/1016467137/
Indy WinInet について書いてある

ttp://members.jcom.home.ne.jp/monazilla/document/index.html
間違えた。こっちじゃなかった>>979
981誤爆:02/04/06 01:26
なんで虎ノ門、1時間にするんだよッ!!
バカテレ朝!!
無能テレ朝!!
982Delモナー ◆fPymXWHY :02/04/06 01:26
モナーの *やさしい* Delphi質問スレ Ver3(HTML化待ち)
http://pc.2ch.net/test/read.cgi/tech/1014474727/
983Delモナー ◆fPymXWHY :02/04/06 01:27
モナーの *やさしい* Delphi質問スレ(HTML化済)
http://pc.2ch.net/tech/kako/1003/10031/1003113413.html

ageないよう注意。
984Delモナー ◆fPymXWHY :02/04/06 01:28
■関連スレ
一番上が新しいスレです。書き込みは新しいスレに。

○ミ,,゚Д゚彡DelフサギコのフサフサDelphi談話室
Delphi や Borland に関する話題、雑談や質問をしながらマターリくつろごうや
A http://pc.2ch.net/test/read.cgi/tech/1013298748/
@ http://pc.2ch.net/test/read.cgi/tech/1003664165/
( ゚Д゚)ノ Delギコ猫のプログラミング相談室
DelphiやBorlandに関する雑談や質問しながらみなーで、くつろごうや
part4 http://pc.2ch.net/tech/kako/1002/10024/1002469894.html
part3 http://piza2.2ch.net/tech/kako/1001/10010/1001039863.html
part2 http://pc.2ch.net/tech/kako/999/999482946.html
part1 http://piza2.2ch.net/tech/kako/997/997348797.html
985Delモナー ◆fPymXWHY :02/04/06 01:28
○Delphi相談室 現在その3
Delphi関連のTips Q&A はこちらです。
その3 http://pc.2ch.net/test/read.cgi/tech/1010153466/
その2 http://pc.2ch.net/tech/kako/995/995950803.html
その1 (逝ってしまったようです)
986Delモナー ◆fPymXWHY :02/04/06 01:29
987Delモナー ◆fPymXWHY :02/04/06 01:30
○Pascal の初心者用の質問・相談所
コンソールのみ。GUI は扱いません。
http://pc.2ch.net/test/read.cgi/tech/1009903617/
988Delモナー ◆fPymXWHY :02/04/06 01:30
○kylix相談室(閑散)
http://pc.2ch.net/test/read.cgi/tech/988815580/
1 (行方不明)
989Delモナー ◆fPymXWHY :02/04/06 01:31
○Delphiで小さな実行ファイルを作ろう
http://pc.2ch.net/test/read.cgi/tech/1009080085/
990Delモナー ◆fPymXWHY :02/04/06 01:31
○delphiで作られた有名ソフトって何がある?
delphi自身もdelphi?てか、今delphiやってる人へ希望を与えてやって下さい。
http://pc.2ch.net/test/read.cgi/tech/990056026/
991Delモナー ◆fPymXWHY :02/04/06 01:32
■Delphi製品情報

○公式サイト
http://www.borland.co.jp/delphi/
992Delモナー ◆fPymXWHY :02/04/06 01:33
○Delphi 6 Personal
無料でダウンロードできる。持っていない人はこれを機にやってみよう。
ダウンロードするファイルはは59MBあり、またサーバーが重いので注意。
使用者登録が必要。
http://www.borland.co.jp/delphi/personal/
993Delモナー ◆fPymXWHY :02/04/06 01:33
○Delphi 6 アップデート・ダウンロードサービス
最新のアップデートは次の通り。
Personal: Update Pack 2 (2002/3/19)
Professional, Enterprise: Update Pack 2 + 追加アップデート (2002/3/29)
http://www.borland.co.jp/delphi/del6up.html
994Delモナー ◆fPymXWHY :02/04/06 01:38
■関連リンク

ここに貼っておきました。
どんどん追加して構いません。

こちらへ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=999486538
995Delモナー ◆fPymXWHY :02/04/06 01:39
■質問者へ

○ここはDelphiのプログラミングに関する質問スレです。
スレ違いの質問は罵倒されるので、ほかのスレを探してください。

○厨房並みの初心者の質問はOKですが、厨房は質問するな。

○まずは自分で調べてみよう。回答にGoogleの検索結果を貼られないように。
Google http://www.google.com/intl/ja/
2ちゃんねる検索 http://2ken.net/
Delphi-ML検索 http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/search.cgi
996Delモナー ◆fPymXWHY :02/04/06 01:39
■ソース置き場

このスレのソース置き場を作ってみました。
このスレに載せきれないソースはここへどうぞ。
○3000行までOKです。
○ソース書き込み時は等幅に設定してください。インデントが使えます。
○激しく長いソースは、同時にソースファイルを添付しておくと(゚Д゚)ウマーです。
○置くのはソースでなくても構いません。
ファイルのアップローダーとしてもどうぞ。

こちらへ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1017673221
997Delモナー ◆fPymXWHY :02/04/06 01:41
「連続投稿ですか?」に阻まれる。
998Delモナー ◆fPymXWHY :02/04/06 01:42
「2重カキコですか?」違うって・・・。
999Delモナー ◆fPymXWHY :02/04/06 01:43
999です。
1000デフォルトの名無しさん:02/04/06 01:45
1000!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。