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

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

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

<雑談・討論などはこちらへ>
ミ,,゚Д゚彡フサギコのフサフサDelphi不買談話室その27
http://pc8.2ch.net/test/read.cgi/tech/1130648644/

<その他>
Borland Home Page
http://www.borland.co.jp/
DelWiki (無料版Delphiの入手方法など)
http://onigiri.s3.xrea.com:8080/delphi/
2前スレ1000:2005/11/05(土) 14:24:51
3デフォルトの名無しさん:2005/11/05(土) 16:20:16
4デフォルトの名無しさん:2005/11/05(土) 16:21:11
5デフォルトの名無しさん:2005/11/05(土) 17:13:47
6デフォルトの名無しさん:2005/11/05(土) 19:19:33
7デフォルトの名無しさん:2005/11/05(土) 21:00:27
8デフォルトの名無しさん:2005/11/06(日) 00:11:07
【狂牛情報】アルツハイマーによる死者が50倍以上に アメリカ

159 - 衆 - 農林水産委員会 - 13号 平成16年04月27日 ○山田委員

エール大学神経病理学科外科部門の研究チームの検討を含め複数の研究で、剖検によりアルツハイマー病
あるいは痴呆症と診断されていた患者の三―一三%が実際はクロイツフェルト・ヤコブ病に罹患していた
ことが判明したとしている。米国では毎年アルツハイマー病と診断される患者が四百万人、痴呆症患者は
数十万人が発生していることから、最も少なく見積もって一万二千人以上のクロイツフェルト・ヤコブ病患者
が検出されず、公式統計に含まれない可能性がある。 注:12万人以上と思われる
                           
実際、アルツハイマー病と診断された死亡患者数は一九七九年には八百五十七例であったものが、
二〇〇〇年には五十倍以上の五万例近くとなった。

159 - 衆 - 農林水産委員会 - 7号 平成16年03月18日 ○松木委員 

記事の中に、アメリカでは、アルツハイマー病あるいは痴呆症と診断される人が年間四百万人いるそう
なんです。複数の研究機関の合同研究によると、このうち三から一三%が実際はヤコブ病であったことが
判明しております。少なく見積もっても十二万人はヤコブ病の公式統計に含まれていない可能性がある。


【狂牛病】米国食肉輸出連合会の米牛肉「安全」パンフを政府調査会座長代理が監修
http://news19.2ch.net/test/read.cgi/newsplus/1129163175/l50

「アルツハイマーや若年性痴呆の中に変異型ヤコブ病患者が」・・米国牛輸入再開に京大医学部教授衝撃的指摘
http://news18.2ch.net/test/read.cgi/dqnplus/1120196765/

【vCJD】牛海綿状脳症(BSE)と同じ病気“日本人発症しやすい”…厚労省研究班
http://news16.2ch.net/test/read.cgi/scienceplus/1088575874/l50
9デフォルトの名無しさん:2005/11/06(日) 01:07:29
質問です。
例えばTHogeを継承したTHogeExというクラスを作って、

hoge: THoge;
hoge := THogeEx.Create;

とした場合、hoge.Freeで呼ばれるのってやはりTHogeのFreeですか?
その場合、THogeExのサイズが継承元より大きい時、メモリリークしたりします?
10デフォルトの名無しさん:2005/11/06(日) 01:21:15
Free内で呼ばれるデストラクタDestroyはvirtualだから
overrideしてればちゃんとTHogeEx.Destroyが呼ばれる。
hoge: TObject;であってもちゃんと開放される。
11デフォルトの名無しさん:2005/11/06(日) 01:33:09
Free は仮想メソッドじゃないから override できないはず。

10さんの説明のとおりなんだが、これが多態性の一側面。
129:2005/11/06(日) 02:24:32
>>10-11
なるほど、thxです。
ということは、継承後のメンバを使いたい時にいちいちキャストしないといけないってこと以外は
特にデメリットはないと考えて良いですか?
13デフォルトの名無しさん:2005/11/06(日) 02:50:55
>>11
overrideできないって、overrideするのはFreeじゃなくてDestroyなんだが。
14デフォルトの名無しさん:2005/11/06(日) 03:31:24
>>12
まあそうなんだけど、メンバを参照するためにアップキャストが必要というのは
その時点ですでにあまり好ましくない。

まず、hogeにTHogeExしか代入されないならhoge: THogeExにするべき。
そうではない場合、
if hoge is THogeEx then THogeEx(hoge).HogeHoge;
なんて書き方が必要になる。
このような呼び出し側がオブジェクトの中身を気にする書き方はよくない。
あらかじめTHogeでカラのHogeHogeを定義してTHogeExでoverrideするなど、
オブジェクトの側で違いを吸収するのが正しい。

まあ、よくないと言いながらも他人の作ったアプリやコンポーネントの改造を
するときには思わずやってしまう手ではあるのだけれどもね。

>>13
>>11は分かって書いてると思うよ。
そもそも、きっとTHogeのFreeは存在しなくて、TObject.Freeが呼ばれている事も。
15デフォルトの名無しさん:2005/11/06(日) 03:38:07
なに書いてんだ俺。
アップキャストじゃなくて、ダウンキャストね。
16デフォルトの名無しさん:2005/11/06(日) 04:35:31
> そもそも、きっとTHogeのFreeは存在しなくて、TObject.Freeが呼ばれている事も。

いやだから、仮想メソッドじゃないんだから Free は TObject.Free しかないでしょ。
17デフォルトの名無しさん:2005/11/06(日) 04:37:11
ごちゃごちゃ書いてるのは、多態性をちゃんと理解してないからだろう。
18デフォルトの名無しさん:2005/11/06(日) 05:46:18
俺の彼女のオマンコはFreeできません。
19デフォルトの名無しさん:2005/11/06(日) 07:36:09
俺の彼女のおまんこはFreeですよ。
20デフォルトの名無しさん:2005/11/06(日) 12:18:15
>>19
以前確保した彼女を開放(Free)したという事は、つまり振られたわけか。
21デフォルトの名無しさん:2005/11/06(日) 14:38:20
>>20
そういう事になるな
22デフォルトの名無しさん:2005/11/06(日) 14:46:56
能動態なんだから「振った」になるわけだが
23デフォルトの名無しさん:2005/11/06(日) 16:48:40
僕の時はFreeしたら例外が発生しました
24デフォルトの名無しさん:2005/11/06(日) 18:22:44
>>16
間違い。静的メソッドにも隠蔽される可能性がある。
procedure THoge.Free; reintroduce;
25デフォルトの名無しさん:2005/11/06(日) 18:25:49
どーでもよすぎる
26デフォルトの名無しさん:2005/11/06(日) 19:15:29
> 静的メソッドにも隠蔽される可能性がある。

で、>>9 質問にはどう答えるつもり?
27デフォルトの名無しさん:2005/11/06(日) 20:10:30
今更だが>>3-7は一体何なんだ
28デフォルトの名無しさん:2005/11/06(日) 20:49:39
>>27
にくちゃんねるのログじゃん
29デフォルトの名無しさん:2005/11/06(日) 21:03:31
>>26
それくらいのことは自分で調べな。
30デフォルトの名無しさん:2005/11/06(日) 21:13:50
なんだシッタカか、つまらん。
319:2005/11/06(日) 21:23:04
つまり、静的メソッドはアドレスがコンパイル時に決定するので、変数の型のメソッドが、
仮想や動的メソッドは実行時にアドレス決定するので、インスタンスの型のメソッドがそれぞれ使われる、
という認識に至ったのですが、これで大丈夫ですか?
32デフォルトの名無しさん:2005/11/06(日) 21:37:30
どうやってポリモーフィズムが実現されているか、なんかはどうでもいい。
ポリモーフィズムとはなんぞや、ってことが重要。
33デフォルトの名無しさん:2005/11/06(日) 21:44:50
重要、なんて言いつつ特に説明しないのは単なる知ったか
多態性と言わずポリモーフィズムなんて言うのも知ったかによくある例
34デフォルトの名無しさん:2005/11/06(日) 22:21:54
↑ 自己紹介乙
35デフォルトの名無しさん:2005/11/06(日) 22:23:28
くだすれで多態性を説明するのはつらすぎ。ま、33は知ったかじゃなさそうだから
説明してくれるだろうけどね。
36デフォルトの名無しさん:2005/11/06(日) 23:13:13
↑こいつ馬鹿
37デフォルトの名無しさん:2005/11/06(日) 23:25:52
またアスペ共の集団発作か
38デフォルトの名無しさん:2005/11/07(月) 00:14:37

 こいつら馬鹿
39デフォルトの名無しさん:2005/11/07(月) 00:24:23
うっぴょろげ〜!
40デフォルトの名無しさん:2005/11/07(月) 02:19:38
>>33 説明マダー チンチン AA(ry
41デフォルトの名無しさん:2005/11/07(月) 02:46:07
33の口先男は、素早く逃げますた。残念〜!
42デフォルトの名無しさん:2005/11/07(月) 03:30:49
32が自演してるように見えるw
あ、32と33が2人で頑張ってるのかな?
43デフォルトの名無しさん:2005/11/07(月) 08:49:09
>>33 説明マダー チンチン AA(ry
44デフォルトの名無しさん:2005/11/07(月) 10:19:11
俺も33から多態性の説明ききたいな。ちんちん
45デフォルトの名無しさん:2005/11/07(月) 13:39:11
>>23
Freeに失敗した例外が暴れてるぞ。早くデバッグ作業に戻るんだ。
4633:2005/11/07(月) 17:53:16
お前ら暇だな(プ
47デフォルトの名無しさん:2005/11/07(月) 18:06:45
シッタカ口先男あらわる!
48デフォルトの名無しさん:2005/11/07(月) 18:08:12
>>33 ポリモーフィズム説明まだぁー? チンチン
49デフォルトの名無しさん:2005/11/07(月) 19:50:19
お前ら何してんの?

死ねよ
50デフォルトの名無しさん:2005/11/07(月) 20:38:03
すみません質問です。
プログラム実行中にコンポーネントのプロパティをいろいろ変えた後、
全部初期値に戻したいのですが、可能でしょうか?
初期値はどこかには保存されていると思うのですが、引っ張り出す
方法がわかりません。
よろしくお願いします。
51デフォルトの名無しさん:2005/11/07(月) 20:43:33
変える前に自分で記録しておくんだよ
52デフォルトの名無しさん:2005/11/07(月) 20:47:45
そんな方法はない。
削除してもう一度配置するか
もう一個配置してフォームをエディタで表示してプロパティ部分をコピペ。
53デフォルトの名無しさん:2005/11/07(月) 20:49:28
>実行中に
5450:2005/11/07(月) 20:53:47
>>51
ということは、プロパティエディタで設定しておくよりも
コード中に初期化部分を用意して呼び出したほうが楽ということですね。

>>52
設計中ではなくアプリケーション実行中に、起動時の初期設定値に
戻したいのです・・・

55デフォルトの名無しさん:2005/11/07(月) 21:04:32
MemoryStream.WriteComponent/ReadComponent
5650:2005/11/07(月) 22:17:06
>>55
ありがとうございます。
FormをRead/Writeすると、載ってるものも全部再生してくれるのには
ちょっと困りましたが。
こんな感じでなんとかなりそうです。

procedure TForm1.Button1Click(Sender: TObject);
var
n:integer;
ms:TmemoryStream;
begin
ms:=TmemoryStream.create;
ms.WriteComponent(self);
for n:=ComponentCount-1 downto 0 do Components[n].Free;
ms.Position:=0;
ms.ReadComponent(self);
ms.free;
end;
57デフォルトの名無しさん:2005/11/07(月) 22:27:30
牛刀を以て鶏を割くって感じだな
58デフォルトの名無しさん:2005/11/07(月) 22:57:31
try...finally...end;
59デフォルトの名無しさん:2005/11/08(火) 00:56:12
try...again...finally...seconde;
60デフォルトの名無しさん:2005/11/08(火) 03:09:55
質問です。
Delphi2005ではデフォルトでC#言語をサポートしているようですが、
Delphi言語(Object Pascal)とC#言語は共存させることができますか?
61デフォルトの名無しさん:2005/11/08(火) 08:42:14
上級者スレは立たないのか?
62デフォルトの名無しさん:2005/11/08(火) 09:56:39
>>60 IDE 共有だけでコードは混合できない。
63デフォルトの名無しさん:2005/11/08(火) 10:36:06
>>62
それなら別々の製品にしてほしいな。
64デフォルトの名無しさん:2005/11/08(火) 11:27:13
そうなんだけど、某さんは重くして高価にしたいみたいです。
ばら売り希望のユーザの要望はD2005発売以前からあったけど、無視されつづけています。
65デフォルトの名無しさん:2005/11/08(火) 12:02:45
いや融合に意味があるならいいんだけど。
66デフォルトの名無しさん:2005/11/08(火) 12:20:47
融合に意味を見出すひともいるだろうし、そういう人は統合版を買い、
Delphi.NET だけ使いたい人は、個別ばら売り版を買い、となぜ選択できるように
しないのか謎。手が足りない、とかいう人がいるけど、実際そうだとしたら、
そんな製品は品質も信頼性も疑わしい。
67デフォルトの名無しさん:2005/11/08(火) 12:31:44
雑談は不買スレで
68デフォルトの名無しさん:2005/11/08(火) 12:56:39
初心者にも有用な情報
69デフォルトの名無しさん:2005/11/08(火) 12:59:40
個々が見出すとかじゃなく一般的に意味があるならいいよ
70デフォルトの名無しさん:2005/11/08(火) 13:02:37
買うのは個々の決断
71デフォルトの名無しさん:2005/11/08(火) 14:23:36
DBGridを使っています。
以下の機能を実現したいのですが、どうやったら可能でしょうか??
(前提条件)
列A=ドロップダウンリスト(0,1)
列B=小数点以下含む数値データ

・列Aの値が0の場合、列Bの数値は整数で表示・編集
・列Aの値が1の場合、列Bの数値は小数点以下含む数で表示・編集

ただしこれは同じ行のみ、そうしたいのです。(以下イメージ)
     列A    列B    
行1   0     112    
行2   1     212.5   
行3   0     312    


苦し紛れの方法として、OnDrawColumnCellイベントで
TextRectして表示だけ少数点以下表示・非表示を切り替えることはできたのですが
編集状態に入ると小数点表示のままです。
いい方法はないでしょうか?
よろしくお願いいたします。
72デフォルトの名無しさん:2005/11/08(火) 14:49:02
VS2005は製品版Expressを無料配布なのにDelphi2006は無料配布しないのですか?
73デフォルトの名無しさん:2005/11/08(火) 15:07:42
貧乏人は麦を食え
74デフォルトの名無しさん:2005/11/08(火) 15:08:25
金持ちは有料VSをどうぞ
75デフォルトの名無しさん:2005/11/08(火) 15:15:51
>>74
それがプロフェッショナルも3000円(旧Spokeから無料アップグレード)らしいですよ
76デフォルトの名無しさん:2005/11/08(火) 16:23:24
なに! なになになに! Del 終わった・・・・
77デフォルトの名無しさん:2005/11/08(火) 16:44:15
.NETも終わってるからまあいいじゃん。
78デフォルトの名無しさん:2005/11/08(火) 16:54:43
名前が変わるだけ。まだ始まってない感じ
79デフォルトの名無しさん:2005/11/08(火) 17:36:41
Delphiも.NETじゃないの?
それともネイティブ64bit対応すんの?
80デフォルトの名無しさん:2005/11/08(火) 17:44:10
素人が2chブラウザを作れるようになるのに最適なサイトを教えて下ちい。
81デフォルトの名無しさん:2005/11/08(火) 17:46:00
>>80
VB・なでしこ・C++・C・Delphi・JavaなどでVIPブラウザを作るスレ
http://ex10.2ch.net/test/read.cgi/news4vip/1129736009/
82デフォルトの名無しさん:2005/11/08(火) 17:48:25
すまん、スレ落ちてた
次スレまだ建ってないみたいだから参考スレ
ttp://age.s22.xrea.com/talk2ch/
http://info.2ch.net/wiki/pukiwiki.php
83デフォルトの名無しさん:2005/11/09(水) 00:06:46
質問させてください。
DDEコンポーネントを使って、
300のトピックを扱おうと思っています。
アプリでは不可視なコンポーネントですが、
開発時はフォームデザイナにコンポーネントを300個おかなければならないのでしょうか?
ソースで書くだけで実現する方法はありませんか?

また、アプリ実行時に任意の数だけコンポーネントを配置することはできないでしょうか?
84デフォルトの名無しさん:2005/11/09(水) 00:42:19
Createすれば良い。
85デフォルトの名無しさん:2005/11/09(水) 00:59:56
>>84
最初はそう思ったんですが、
未定義の識別子とか怒られたりしたもんで・・・

ソースでCreateすることで動的にインスタンスを作成できるということですよね?
ちょっと勉強してきます。
ありがとうございました。
86デフォルトの名無しさん:2005/11/09(水) 02:10:36
自問自答乙
87デフォルトの名無しさん:2005/11/09(水) 09:51:16
誤爆してやんの(藁
88デフォルトの名無しさん:2005/11/09(水) 15:43:21
 FormのOnKeyDownで Ctrlキーと Shiftキーを押した状態でDeleteキーを押した
状態を実現するために
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
 if (Shift in [ssCtrl,ssShift]) and (Key = VK_DELETE) then //エラー!

 if (Shift = [ssCtrl]) and (Key = VK_DELETE) then //これはOK
・・・・・・・・
end;
としたのですがエラーになってしまいます。なんででしょ?
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
なので問題ないと思うのですが。
89デフォルトの名無しさん:2005/11/09(水) 15:48:44
ssctrl in shift
90デフォルトの名無しさん:2005/11/09(水) 16:20:49
>>88
in のオペランドは順序型と集合型。
Shiftは集合型、[ssCtrl, ssShift]も集合型。
ヘルプの集合演算子を嫁
91デフォルトの名無しさん:2005/11/09(水) 20:19:30
ttp://www.borland.com/products/downloads/download_delphi.html

房ですみませんが
英語が読めなくてdelphi6のライセンスが取れません↑
どうやって取るんでしょうか?

92デフォルトの名無しさん:2005/11/09(水) 20:26:34
英語読むも糞もないだろ
適当に個人情報を入力して適当に某に登録すんだよ
その程度気合で解読しろ
93デフォルトの名無しさん:2005/11/09(水) 20:45:32
9491:2005/11/09(水) 21:06:32
気合って言われても無理です

「英語が読める」方いませんか?
95デフォルトの名無しさん:2005/11/09(水) 21:12:50
辞書も引けないの?
それでは今後が思いやられる
96デフォルトの名無しさん:2005/11/09(水) 21:22:05
>>95
>1を100回読んで消えろ
97デフォルトの名無しさん:2005/11/09(水) 21:32:06
英語教えろって書いてないが?
96が教えろ
98デフォルトの名無しさん:2005/11/09(水) 22:13:30
日本のサポセンに電話をかけなさい。

Delphi6の場合、ここは関係ないと思うし。
ttp://www.borland.com/products/downloads/download_delphi.html
99デフォルトの名無しさん:2005/11/09(水) 22:35:30
関係あったね。スマソ。
100デフォルトの名無しさん:2005/11/09(水) 22:39:41
>>91をチラッと見たが小学生でもわかる英語じゃん
101デフォルトの名無しさん:2005/11/09(水) 22:41:36
>>100
背伸び乙
102デフォルトの名無しさん:2005/11/09(水) 23:21:35
背伸びって・・・

Delphi6 Personalをクリックして
New Userをクリックして
赤項目(氏名と住所など)を入力。
State/ProvinceにはN/Aを入力。
Registerをクリック。
103デフォルトの名無しさん:2005/11/10(木) 00:18:27
ありがとうございます。ライセンス入手できました
しかしインストール中に
Error
C\WINDOWS\デスクトップ\program 〜 .damの読み込みエラー
ファイルが存在していてアクセスできることを確認してください
と表示され「再試行」「無視」もできずに「キャンセル」しかできません。

どのような問題が発生しているのでしょうか
解決方法を教えてください
104デフォルトの名無しさん:2005/11/10(木) 01:04:51
よく分からんが、デスクトップだと駄目なのかも。
105デフォルトの名無しさん:2005/11/10(木) 01:06:20
c:\program files\borland\delphi6
にインストールしろよ
106デフォルトの名無しさん:2005/11/10(木) 03:10:57
英語どころかコンピューターの基本的なところも怪しそう。
まあ、楽しんで。
107デフォルトの名無しさん:2005/11/10(木) 08:10:31
デルファイ6パーソナルのインストールキー取得のアンケートのアドレスを教えてとうだい
108デフォルトの名無しさん:2005/11/10(木) 10:22:50
Delphi6Personalで関数ってどう作るんですか?
Del5Entだとctrl+shift+cで簡単に作れた気がするんですが・・・
109デフォルトの名無しさん:2005/11/10(木) 10:26:43
Pro/Ent買え
110デフォルトの名無しさん:2005/11/10(木) 10:41:49
そういうコード支援機能を削るところが某クォリティー
111デフォルトの名無しさん:2005/11/10(木) 16:45:36
でもperのチュートリアルの間違いは放置するんだよね
112デフォルトの名無しさん:2005/11/10(木) 16:50:02
BCB6のはちゃんと修正されてるのにね
113デフォルトの名無しさん:2005/11/10(木) 17:21:52
114デフォルトの名無しさん:2005/11/11(金) 00:12:25
>>108
1. Ctrl + J
2. 自分で書く
115デフォルトの名無しさん:2005/11/12(土) 08:48:25
buraブラウザのサンプルってどっかにないですか
116デフォルトの名無しさん:2005/11/12(土) 12:38:33
質問があります。
i: Integer;
というのがあってこれを文字列にしたとき
0001
っといった感じで4桁にするにはどうすればいいですか?
IntToStr(i);
だと一桁になってしまいます。よろしくお願いします。
117デフォルトの名無しさん:2005/11/12(土) 12:54:09
s := Format('%04d', [i]);
118116:2005/11/12(土) 13:03:52
自分の環境ではスペースが入ってしまいます。
スペースではなく0を入れるにはどうしたらいいですか?
119116:2005/11/12(土) 13:07:21
すみません。Formatでググったらでてきました。’.’をつけたらうまくいきました
ありがとうございました。

ttp://www.borland.co.jp/qanda/delphi/d0000877.html
120デフォルトの名無しさん:2005/11/12(土) 13:08:11
Format('%.4d', [i])
121デフォルトの名無しさん:2005/11/12(土) 17:38:24
BitBlt で TImage の画像をメインフォームに転送しているんですけど、
他のアプリを前面に出した部分の画像だけちょん切れるんです。
FAQ かもしれませんが原因、対策のおわかりの方がいましたら、お願いします。
122デフォルトの名無しさん:2005/11/12(土) 17:39:14
質問です
複数のスレッドからform1にあるCheckBox1.Checkedを参照する時って
Synchronize使わないとダメですか?
123デフォルトの名無しさん:2005/11/12(土) 18:14:56
>>121
FAQ 以前に当たり前。ウィンドウの再描画はコードで行われる、って当然のことを
さぼってるだけ。普通は TPaintBox の OnPaint で画像を描く。TImage にすると
再描画が自動的に行われる。それから BitBlt を使うんじゃなくて 普通は
TCanvas.Draw() などのメソッドをつかう。そのために Canvas があるんだから。
124デフォルトの名無しさん:2005/11/12(土) 18:16:31
>>122
VCL はスレッドセーフじゃないから、メインスレッドのコントロールを操作するときは
Synchronize をつかってください。読むだけでもそうすべきです。
125デフォルトの名無しさん:2005/11/12(土) 18:18:58
>>121
RefreshとかApplication.ProcessMessageを挟むといいかも

>>122
TControlはスレッドセーフじゃないから駄目
何がスレッドセーフかはヘルプでSynchronize引けば載ってるよ
126デフォルトの名無しさん:2005/11/12(土) 18:20:22
>>124>>125
分かりました
ありがとうございました
127121:2005/11/12(土) 19:30:48
回答ありがとうございます。BitBlt を使ったのは、実は簡単なアニメーションの
練習をしておりまして、参考にした某書籍のコードをそのまま実行させてみたのです。
PaintBox でできるか、試してみたいと思います。
128デフォルトの名無しさん:2005/11/12(土) 19:31:36
パフォーマンスが問題になりそうならCheckedを毎回参照せずに
OnClickで普通の変数にコピーして参照したり
ThreadのプロパティにセットするようにすればSynchronize不要になるな。
まあForm自体無駄の塊だからあまり気にする必要ないんだけど。
129デフォルトの名無しさん:2005/11/12(土) 20:11:23
それでどうして Sychronize 不要なるのかな。たんに変数にコピーしただけじゃ
排他制御になってないし。
130デフォルトの名無しさん:2005/11/12(土) 20:16:13
あたまわるいね
131デフォルトの名無しさん:2005/11/12(土) 20:22:01
第一書き込めないし
132デフォルトの名無しさん:2005/11/12(土) 22:06:41
delphiのイベントハンドラの仕組みってどうなっているのでしょうか?
気になっているのは、
イベントが同時に起こった時の優先度は?
イベント処理中にイベントが起こった時は?
どなたか教えてくれませんか
133デフォルトの名無しさん:2005/11/12(土) 22:56:06
>>128が正解。 
Checkedを読むのは、実際にはメソッド呼び出しになる。
たんに変数にコピーしただけだけだけど、Checkedを参照したいだけなら、これで十分

>>132

イベントは割り込みじゃないから、そのスレッド実行中に勝手にイベントが挿入されるわけじゃない。
134132:2005/11/12(土) 22:58:53
>>133
ほー、ということはイベント処理中に違うイベントが起こったときは、
その処理が終わってから次のイベントの処理を始めるってことでしょうか?
135デフォルトの名無しさん:2005/11/12(土) 23:00:37
>>91
英語を読めばいいです
136デフォルトの名無しさん:2005/11/12(土) 23:45:23
TMediaPlayerって2倍速再生とかできますか?
137デフォルトの名無しさん:2005/11/13(日) 00:03:04
>>133
>Checkedを参照したいだけなら、これで十分

何言ってるの? 参照して変更することもあるでしょ。ウィンドウズのコントロール
なんだからメソッドっていってもメッセージ処理だよ。
138デフォルトの名無しさん:2005/11/13(日) 00:07:12
>>134
>ほー、ということはイベント処理中に違うイベントが起こったときは、
>その処理が終わってから次のイベントの処理を始めるってことでしょうか?

イベントは割り込みではないってこと。メッセージポンプっていって、メッセージ
があるかどうかを見にいってはじめてイベントが起こるかどうか決まる。
だからイベント処理中にイベントが起こることはない。わざとメッセージ処理を
するようにコードで記述することはできるけど。
139デフォルトの名無しさん:2005/11/13(日) 00:07:12
無理に話し広げて反論しなくていいよ。
参照は参照。
140デフォルトの名無しさん:2005/11/13(日) 00:08:14
CheckBox1.Checked := ture; ってコードは CheckBox1 を参照してるんですけど。
141デフォルトの名無しさん:2005/11/13(日) 00:09:50
参照を読み込みだけって思うのはOOPを知らないんだろなぁ
142デフォルトの名無しさん:2005/11/13(日) 00:14:04
君達、話が噛み合ってなくね?
Delphiより日本語の勉強しろ
143132:2005/11/13(日) 00:14:08
>>138
なんとなくわかりました。
周期的に拾うってことですね。
ありがとやんした。
144デフォルトの名無しさん:2005/11/13(日) 00:37:50
>>140-141
元のお題はChecked値の参照だよとり頭君
14583:2005/11/13(日) 00:50:22
すいません。やっぱりわかりません。
コンポーネントを配置して、宣言しないと使えないんですが・・・
宣言しないでcreateするにはどうしたらいいんですか?
146デフォルトの名無しさん:2005/11/13(日) 01:15:30
DDE固有の話なのか、単にコンポーネントを動的に生成する方法がわからないのか。
後者なら
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200408_04080009.html
14783:2005/11/13(日) 01:32:03
>>146
ありがとうございます。
これでいけそうです!
14883:2005/11/13(日) 03:06:34
すいません、新たな問題が・・・
コンポーネントを大量に作成することはできたのですが、
それぞれのOnChangeイベントに同じ処理を加えたいのですが何か方法を教えてください。
おねがいします。
149デフォルトの名無しさん:2005/11/13(日) 03:50:17
>>144
で、Checked が変更されて、変数にコピーするまえに参照されたらどうなるの?
150デフォルトの名無しさん:2005/11/13(日) 05:03:50
>>148
それぞれのOnChangeに同じイベントハンドラを設定する。
151デフォルトの名無しさん:2005/11/13(日) 09:03:30
ユーザがクリックして、親が WM_COMMAND を受け取ってから、コントロールの OnClick が
呼び出されるまで VCL のなかでは結構長いコードが実行される。その間に、コピーした
変数を読むと、同じタイミングで Synchronize して読むのとでは結果が異なる。

排他制御はまさにこのようなことが起こる確率をゼロにするためにある。
152デフォルトの名無しさん:2005/11/13(日) 09:03:39
timerは一つのフォームにいくつまで使えるんですか?
環境に依存するらしい事はわかったのですがそれがどのくらいの単位での話なのかわかりません
153デフォルトの名無しさん:2005/11/13(日) 09:21:26
何個使うつもりですか?
リソースについて明言するのは難しいですが、10個くらいならOKでは
154デフォルトの名無しさん:2005/11/13(日) 09:36:07
>>153
最大6個になります。ありがとうございました。

155デフォルトの名無しさん:2005/11/13(日) 11:00:41
delphiのインデント幅ってみなさんいくつぐらいに指定してますか?
8でいいんでしょうか?
156デフォルトの名無しさん:2005/11/13(日) 11:51:25
全エディタで4に統一してる。
telnet経由でいじるエディタだけ2。
157デフォルトの名無しさん:2005/11/13(日) 12:22:11
2
158デフォルトの名無しさん:2005/11/13(日) 12:44:48
2とかでやってる奴って、そうとう頭がいいんだろうなァ。
一般人は4で、年寄りや目かビーンズページが弱い人が8なんだろうなァ。
159158:2005/11/13(日) 12:54:03
勘違いだった。
Delphiのコードエディタは見やすいから、馬鹿や弱視でも2で十分実用可能だ。
160デフォルトの名無しさん:2005/11/13(日) 14:54:31
16183:2005/11/13(日) 16:02:13
>>150
オブジェクトインスペクタ以外で、ソースコードで登録することってできるんですか?
162デフォルトの名無しさん:2005/11/13(日) 16:12:31
動的にコンポーネントを作成した後、onClickメソッドに結びつける

hoge.onChange := onChangeProc;
onChangeProcはpublic節に定義しておいて
onChangeイベントでやりたい内容を記述する
16383:2005/11/13(日) 16:29:05
よくわかりました。
ありがとうございます。
16483:2005/11/13(日) 17:04:33
すいません、そのonChangeProcに引数を渡すことってできませんか?
例えば、100個のDdeClientItemのonChangeで100個の対応するLabelに表示するってことをやりたいんですが・・・
165デフォルトの名無しさん:2005/11/13(日) 17:11:44
onClickイベントをオーバーライドすればいいじゃない
166デフォルトの名無しさん:2005/11/13(日) 17:17:43
16783:2005/11/13(日) 17:20:35
あざーす。
勉強してきます。
168デフォルトの名無しさん:2005/11/13(日) 17:25:13
scanlineって画像の一部の領域だけを対象にして使うこともできるんですか?
BMP画像で指定の範囲のRGB値の平均を取得するってことをやろうとしてるんですが。
169デフォルトの名無しさん:2005/11/13(日) 17:46:47
>>168
単に画像のメモリアドレス指してあるだけだから当然出来る
32bitフォーマット、左から10ピクセルなら+4*10バイト
170デフォルトの名無しさん:2005/11/13(日) 19:42:48
【Delphi初心者】今から始めるDelphi Part01
http://pc8.2ch.net/test/read.cgi/tech/1062422335/977

誘導されてきました
今からここは次スレです
抵抗しても無意味です
ありがとうございました
171デフォルトの名無しさん:2005/11/13(日) 20:32:21
ロキュータス乙
172デフォルトの名無しさん:2005/11/13(日) 20:39:03
>>170
漏れもあっちから誘導されて来ました。
まだまだ駆け出しなので、よろしくお願いします。m(_ _)m
173デフォルトの名無しさん:2005/11/13(日) 22:22:04
>>169
回答ありがとです、安心しました。

ところで↓のプログラムでラベルにRGB値を表示してるのですがマウスカーソルが画像の範囲外になっても値が表示、変動して困ってます。
おそらく内部で画像が右側にいくつもつながってるようになっていると思うんですが(画像の右から外にいくと数値がループしてます)、画像外は取得しない(表示しない)ようにするにはどうすればいいんでしょうか?

http://www.uploda.org/file/uporg237043.zip
174ななしへたぐらま ◆XcB18Bks.Y :2005/11/13(日) 23:29:51
>>173
このソースでしたらたとえば以下のようにすればOKです.

if (X < Image1.Picture.Width) and (Y < Image1.Picture.Height) then
 (既存のコード)
else
 (画像外の時のコード);

このソースではイメージコンポのStretchがFalse(拡大縮小しない)でCenterがFalse(画像を左上に配置)ですので
Image1MouseMoveイベントハンドラのX,Yパラメータの値は画像のX,Y座標と一致します.
そのため上のような単純なコードでOKになります.
175デフォルトの名無しさん:2005/11/13(日) 23:53:53
前スレ968です
http://pc8.2ch.net/test/read.cgi/tech/1062422335/968

ヒントをいただいたのですがまだわかりません
今やってることをまとめました
・ResetやReadlnで発生した例外をexceptで処理する
・発生する例外はどちらもEInOutErrorなので
 ErrorCodeで例外の内容を判断
・ErrorCodeが2(ファイルを開けない)の場合はwriteln(filename);のあと
 例外を再生成して外側のexceptに同じ例外を渡す
・ErrorCodeが2以外の場合はException.Create('読み込めねー');を
 外側のExceptに渡す

ファイルがない場合や読み込めない場合を試したところ問題の通り動いています
どこが悪いのか検討もつかず、とっかかりが無い状態です
言語ガイドやKodersで色々なソースを読んでるのですがどうにもわかりません
ヒントの追加をお願いします
176173:2005/11/14(月) 00:05:10
>>174
できました!原因がわからなかった別のエラーもでなくなったようです、ありがとうございました。
177デフォルトの名無しさん:2005/11/14(月) 02:21:30
例えばImageを10個作るとするよ?
img1:=TImage.Create(Self);
img2:=TImage.Create(Self);
(以下繰り返し)

って書いてたら、for文使いたくなってきたのさ
で、ヘルプの真似して
for i:=1 to 10 do
begin
TImage.Create(Self).Name:='img'+IntToStr(i);
end;
と書いて、ここまではいいんだけど、その後に
img1.Visible:=false;
ってやったらものすごい勢いで怒られました。
どうやったらうまく行くの?
178デフォルトの名無しさん:2005/11/14(月) 02:34:27
Name プロパティーは単なる文字列。インスタンスの変数名じゃないよ。
この違い分かる?

TForm1 の public のところに

img: array[0..9] of TImage;

と手書きで書きくわえて

for i:=1 to 10 do img[i] := TImage.Create(Self);

としてつくっておき、アクセスするときは

img[1].Visible := false;

とかにする


179デフォルトの名無しさん:2005/11/14(月) 02:35:31
× for i:=1 to 10 do img[i] := TImage.Create(Self);
○ for i:=0 to 9 do img[i] := TImage.Create(Self);
180デフォルトの名無しさん:2005/11/14(月) 02:52:13
ああぁん…なんとなくわかりました
ImageにはNameのほかにもTopとかVisibleとかいろんな性質があるけど、
その入れ物を作らずに、名前だけ作ってたってことですかね?
なんか無理矢理納得して直しておきます。
答えてくれてありがとう

いや、あれか。Nameってのはただの名札であって、本名じゃないと
181デフォルトの名無しさん:2005/11/14(月) 03:03:59
修正したら無事、怒られないですみました
1時間試行錯誤してた問題がすっきり解決。本当にありがとうございました

いやいや、とりあえず入れ物込みでImageを作っておいて、そいつの名札だけは決めておいたと…
ということは、TImage(FindComponent('img'+IntToStr(i))).Visible とかにすれば怒られないですむのかな?
でも、こんな長いの入力するの面倒なんで教わった方法でこの先もやっていきます
182デフォルトの名無しさん:2005/11/14(月) 03:14:14
Delphiのことを調べているうちに "Why Pascal is Not My Favorite Programming Language" という論文の存在を知りました
読んでみたいのですが日本語訳はないでしょうか?
183デフォルトの名無しさん:2005/11/14(月) 03:20:00
Image1 := TImage.Create(self);
Image1.Name := 'HogeHoge';

とした場合、

HogeHoge.Visible := true;

という文が馬鹿げていることは明白でしょう。

Image1.Visible := true;

が正しい。名前はオブジェクトのプロパティーの一つにすぎない。
オブジェクト自体の参照は Image1 という<変数>に代入してる。
変数なんだから、変数名はなんだっていい。

var
Honyarara: TImage;

と予め宣言してあれば、 Honyarara := Image1 と代入できるし、以後

Hanyarara.Visible := true;

としてもOK。
184デフォルトの名無しさん:2005/11/14(月) 04:14:54
あぁ、そう言われると納得しますねぇ

あれっすか?
Image1って変数は実は本当のImage1そのものじゃなくて、本当のImage1の性質を記録した箱(って言うかタンス?)に過ぎないってこと?
なんていうか、伝えにくいんだけど、そんな気がしてきた。
ShowMessage(Image1.Name);ってやると、Image1って名前のタンスのNameっていう引出しの中身を見せろ ってこと?
で、TImageという型式の設計図でHonyararaってタンスを作って、
変数Honyararaの中身は変数Image1と同じですよー
つまりHonyararaに記録されているのは"本当のImage1"のいろんな性質なんだよ と
あれ?なんだか意味不明になってきた
185デフォルトの名無しさん:2005/11/14(月) 04:22:26
Image1 := TImage.Create(self);
をどう解釈するか。これで混乱してるっぽい
イメージコンポーネントを作って、そいつのいろんな性質を変数Image1に関連付けますよ って感じですか?
次に、Honyararaの関連付け先はImage1と同じにしてるってこと?
186ななしへたぐらま ◆XcB18Bks.Y :2005/11/14(月) 07:32:56
>>184
Image1という変数は箱どころか
イメージコンポーネントがどこにあるかを書いた紙切れに過ぎません.

ですから>>183

> var
> Honyarara: TImage;

は場所を記憶しておく紙切れを用意したに過ぎませんし,

> Honyarara := Image1

は場所を書き写しているに過ぎません.


187デフォルトの名無しさん:2005/11/14(月) 10:18:13
クラスを新しく記述する時、その中の一部のメソッドを
別のユニットにて定義するとかできないすか?
長いのがいくつかあるので、分けて書きたいのです。
188デフォルトの名無しさん:2005/11/14(月) 10:35:02
できない
189デフォルトの名無しさん:2005/11/14(月) 10:35:52
メソッドから別ユニットの関数を呼んだらいいんでないの
190デフォルトの名無しさん:2005/11/14(月) 10:48:58
.NET2.0にフル対応したDelphi.NETでないと無理だな
191デフォルトの名無しさん:2005/11/14(月) 11:40:26
邪道だけどインクルードファイル
{$include foo.pas}
192デフォルトの名無しさん:2005/11/14(月) 11:48:19
メールサーバからUIDLを取得する方法を教えてください。
193デフォルトの名無しさん:2005/11/14(月) 11:55:57
すいません
http://pc8.2ch.net/test/read.cgi/tech/1062422335/
でも質問した者ですが
IEコンポーネントを表示することはできたのですが、
そこにHTMLを追加するにはどうすればいいんでしょう?
の質問に対してWebBrowser1.Navigate('URL');との回答が得られたのですが、
これはHTMLファイルを表示するための方法ではないでしょうか。
私がやりたいのはIEコンポーネント内のHTMLを追加したりしたいんです
どうすればできるのでしょうか?
194デフォルトの名無しさん:2005/11/14(月) 12:48:43
Delphi7 で作っているアプリケーションがあるのですが、英語 Windows 環境
で動かす必要が出て気ました。メッセージ等は英語に変えられたのですが、
MessageBox の「はい」や「いいえ」の文字がそのまま表示され文字化けします。
日本語OS なら日本語で、英語OS なら英語で表示されればベストなのですが、
できないようであれば、YES や NO に固定でかまいません。

どなたかアドバイスください。
よろしくお願いします。
195デフォルトの名無しさん:2005/11/14(月) 14:48:52
ちょっと恥ずかしいのですが、よろしく。
この関数をPascalで書くとどうなるのでしょうか?
void f(int i)
{
for( ; !t[i]; i++)

if(43<=i) {
return; }

if (3==t[i]) {
t[i]-=3;
f(i);
t[i]+=3; }

if(t[i+1]&&t[i+2]) {
t[i]--,t[i+1]--,t[i+2]--;
f(i);
t[i]++,t[i+1]++,t[i+2]++; }
}
196デフォルトの名無しさん:2005/11/14(月) 15:12:27
自分で調べろよ
197デフォルトの名無しさん:2005/11/14(月) 16:49:59
>>195
Voidの関数はprocedure、i++はi := i + 1、for文はwhileに展開、!a はa=0、
i-=3はi:=i-3、if(a&&b)はif a and b thenで良いかな。

問題は標準Pascalにはreturnに相当する文がないこと。labelとgoto文を
使うか、フラグで処理しなくちゃならない。Turbo PascalもしくはDelphiなら
exitが使えるんだけど。

あとは頑張れ。私はCは嫌いだから、必要に迫られない限り読む気はしない
けど。
198ななしへたぐらま ◆XcB18Bks.Y :2005/11/14(月) 16:53:54
>>187
メソッドがやたら長いことが問題です.

他人(あるいは未来の自分)がソースコードを見たときに
何がなんだかさっぱりわからないコードになるからです.

そのメソッド内の処理の一部を別のクラスやメソッド,
あるいは汎用の関数や手続きに切り分けられないか検討してみて下さい.

(ちなみに私は過去に700行近くあるメソッドを書いたことがあります…手が付けられない)
199デフォルトの名無しさん:2005/11/14(月) 16:54:06
>>193
「IEコンポーネント内のHTML」って何? それにHTMLを追加って何をする
つもりなの? 何がしたいかよく分からないから、どう答えればいいかも
分からない。
200デフォルトの名無しさん:2005/11/14(月) 17:35:59
201デフォルトの名無しさん:2005/11/14(月) 18:21:27
>>199
すみません、書き足すという意味です。
>>200
ここに書き込む前にそこを読みましたが
>uses に SHDocVw_TLB, MSHTML_TLBを追加して
の意味がわかりません・・・
まだDelphiはじめて5日なんです。
202199:2005/11/14(月) 19:00:37
>>201
だから「IEコンポーネント内のHTML」が何を指していて、「HTMLを追加」
ってコンポーネントの何にどう追加(書き足す?)ってことなのかさっぱり
分からないんだけど。

こっちはそっちの状況が見える訳じゃないし、何をしたいのかも、何が出来
ないのかも、どうすれば目標が達成されたか(どういう方向に目標があるか)
も何も分からないんだから、分かるように細かく書いてくれないとどうしよう
もないぞ。
203デフォルトの名無しさん:2005/11/14(月) 19:03:21
204デフォルトの名無しさん:2005/11/14(月) 19:13:17
わからないなら黙ってればいいのに。
205デフォルトの名無しさん:2005/11/14(月) 19:16:57
>>201
ファイルUnit1の上の方に
uses Windows, Messages, SysUtils, ...
というのがあるので
uses
 Windows, Messages, SysUtils, ...,
 SHDocVw_TLB, MSHTML_TLB;
と書き足す。
206デフォルトの名無しさん:2005/11/14(月) 20:01:24
>>201
まずはDelphiの基礎から勉強した方が早いと思う
usesも分からないようだと先が思いやられるし
ヘルプで見るだけでいいから、まずはその辺理解してから来なよ
207デフォルトの名無しさん:2005/11/14(月) 20:15:37
>>205
解かりました!そういうことだったんですね。
しかし ファイル 'MSHTML_TLB.dcu' が見つかりません となってしまいました
が、そのメッセージで検索してみるとActiveX取り込みから
Microsoft HTMLなんとかをインストールするといいそうでした。
何とかエラーなく思い通りの事を出来ました。ありがとうございました!


208デフォルトの名無しさん:2005/11/14(月) 21:20:46
209駆け出し名無し:2005/11/14(月) 21:27:47
>>207
前スレ(【Delphi初心者】今から始めるDelphi Part01)で紹介したけど、
このサイトを一通り実際に入力しながらやると、やりたいことの参考になると思うよ。
実際、漏れはこれで実地に学んでコーディングのやり方を学べたから。初めは怒られたけど。(w

・Delphi はじめの一歩(ブラウザを作ってみよう)
 ttp://delphi.sakura.vg/index2.html
210176:2005/11/14(月) 21:31:01
http://www.uploda.org/file/uporg237673.zip

あれからちょびちょび追加してるんですが、RGB値を全部格納した配列から画像全体のRの合計値を表示させるつもりが微妙に数値がおかしいみたいなんです。
640×480の真っ白の画像で計算すると本来は640×480×255=78336000になるはずなんですが、78337330になります。

それだけならいいんですけど、画像を読み込むとエラーが出たり出なかったりで・・・。
どこをどう修正すればいいですか?
211デフォルトの名無しさん:2005/11/14(月) 21:47:43
ここ見て Scanline アクセスを研究するとか

ttp://junki.main.jp/
212デフォルトの名無しさん:2005/11/14(月) 22:12:47
>>210
あんまりよく見てないけど、recordをpackedにするとか
213デフォルトの名無しさん:2005/11/14(月) 22:54:41
http://pc8.2ch.net/test/read.cgi/tech/1062422335/957
すいません、まだ前スレの問題やってます
もうギブアップです、答え教えてください
214デフォルトの名無しさん:2005/11/14(月) 23:37:49
>>209
はい、ありがとうございます。
215駆け出し名無し:2005/11/14(月) 23:49:16
>>214
でも、予想していた通り、あっちに比べてレベルが高いね。orz
216デフォルトの名無しさん:2005/11/15(火) 00:05:07
>>211-212
すごく単純なことでした・・数値は取得範囲がおかしかったようです
エラーは画像が表示されてない部分の座標を取得しようとしてたからっぽいです
217デフォルトの名無しさん:2005/11/15(火) 00:05:43
http://pc8.2ch.net/test/read.cgi/tech/1131282679/l50

237 :デフォルトの名無しさん :2005/11/14(月) 23:38:29
さあ話をそらしにかかりました
218デフォルトの名無しさん:2005/11/15(火) 00:21:41
>>195
> ちょっと恥ずかしいのですが、よろしく。
> この関数をPascalで書くとどうなるのでしょうか?
t[i] というのが何なのかわからないので、答えようがないと思われ。
219駆け出し名無し:2005/11/15(火) 00:58:41
漏れのようなまだまだ初心者のために役立つ情報を以下にまとめてみることにします。

Delphiは統合環境でエディターはIDEを使って書くので、知るとすぐに役立つ情報です。
・Delphi 6 のショートカットキー: ttp://www.ss.iij4u.or.jp/~somali/extra/_delphi_shortcut.html
・IDE Tips(e-manual): ttp://www.kanazawa-net.ne.jp/~pmansato/IDE_Tips.htm
・IDE の小技: ttp://kakinotane.s7.xrea.com/delphi/faq/f003.html
実際に漏れはこれを知ることで今は大変便利に使っています。きっと大多数にも役立つと思います。

次にコーディングスタイルについての情報です。正書法という基礎的な話ですが、基礎は何事も大事です。
・コーディング規約
ttp://onigiri.s3.xrea.com:8080/delphi/index.php?plugin=related&page=%A5%B3%A1%BC%A5%C7%A5%A3%A5%F3%A5%B0%B5%AC%CC%F3
・Delphi の格言: ttp://kakinotane.s7.xrea.com/delphi/faq/f004.html

DelphiではGUIプログラミングが出来るので、画面デザイン・ユーザーインターフェースも大変重要なことです。
・ダメなユーザインタフェイス講座: ttp://www.geocities.co.jp/SiliconValley-Oakland/8192/

あと、前スレで教えてもらったこのツールもご紹介しておきましょう。
GExperts(日本語解説): ttp://onigiri.s3.xrea.com:8080/delphi/index.php?GExperts
GExperts(本家): ttp://www.gexperts.org/

実際にコードを書かなくても、これらの情報をどれか一つだけでも読むだけで確実にレベルアップします。

最後に、GExpertsを教えてもらったのですが、そのトップもご紹介しておきますね。殆どはここからです。
DelWiki - Borland Delphi用PukiWiki: ttp://onigiri.s3.xrea.com:8080/delphi/index.php?FrontPage
220デフォルトの名無しさん:2005/11/15(火) 01:13:12
実際にコード書かなくてレベルアップなんかするか。
221デフォルトの名無しさん:2005/11/15(火) 01:14:57
>>215
昔はそうでもなかったけど、スレの主旨を理解してくれない人が増えた。
222デフォルトの名無しさん:2005/11/15(火) 01:31:58
質問です。自分なりにがんばってみましたが、できなかったので
教えてください↓
円単位で与えられたお金を紙幣(千円、二千円、五千円、一万円)
貨幣(1,5、10,100,500)を使い最も紙幣や貨幣の合計数
が少なくなるようにして表示せよ。
というプログラムをつくらなければなりません。本当にどうしたらいいか
わかりません。助けてください
223デフォルトの名無しさん:2005/11/15(火) 01:32:52
>>222
まずどこまでやったか書いてみ。
224デフォルトの名無しさん:2005/11/15(火) 01:43:01
大きい方から割ってくだけじゃだめなのかな
225デフォルトの名無しさん:2005/11/15(火) 01:51:22
一桁ずつ分けて考えればいいじゃない
226デフォルトの名無しさん:2005/11/15(火) 01:54:19
相変わらず質の低い回答者だな
227駆け出し名無し:2005/11/15(火) 01:55:19
>>222
それ、Excelの研修でやったけど、金種表のやつだね。
問題には二千円が入っているから、ちょっと大変だけど、
アルゴリズムの参考にはなると思う。ぐぐったら以下か。

2000円札に対応した金種表を作る:
ttp://arena.nikkeibp.co.jp/tec/excel/20040310/107740/
228デフォルトの名無しさん:2005/11/15(火) 02:08:54
>>222
給与計算で常に必要になる金種表計算だね
ぐぐってみたら多分あるからそれをdelphiにしてみ
(ただ個人的には2000円に対応にしたものは見たことないな)
229デフォルトの名無しさん:2005/11/15(火) 02:14:39
大きいのから順にごり押しで作ろうとしてる自分がいる
230デフォルトの名無しさん:2005/11/15(火) 02:31:06
>>222
プログラムで考えようとせず、手動でやるならどういう手順になるか考えれ
それをうまく手順としてまとめられたら、あとはそれをコード化するだけだ
分かりませんじゃこっちもどうしようもない
自分でまずやってみて、つまづいた箇所で聞け
231デフォルトの名無しさん:2005/11/15(火) 02:59:13
大きい方から割っていく意外にどんな解き方がありますか?
232デフォルトの名無しさん:2005/11/15(火) 03:35:25
総当り
233デフォルトの名無しさん:2005/11/15(火) 04:45:03
じゃ、どうやって総当りしようって考えると・・・
やっぱ大きい方から総当りしちゃうなw
234デフォルトの名無しさん:2005/11/15(火) 05:15:38
総当りなんだからどうやっても何もないじゃん
全部やるんだから
235デフォルトの名無しさん:2005/11/15(火) 05:19:30
総当りするならループの速度を最適化すべきだろう
236デフォルトの名無しさん:2005/11/15(火) 05:24:04
単純化して三種類あるとすると、

procedure Calc(Money: Integer; var Y1, Y1000, Y10000: Integer);
var
 A1, A1000, A10000: Integer;
 MinSum: Integer;
begin
 MinSum := MaxInt;
 for A1 := 0 to 999 do
 begin
  for A1000 := 0 to 9 do
  begin
   for A10000 := 0 to Money div 10000 do
   begin
    if A1 + A1000 * 1000 + A10000 * 10000 = Money then
    begin
     if A1 + A1000 + A10000 < MinSum then
     begin
      MinSum := A1 + A1000 + A10000;
      Y1 := A1;
      Y1000 := A1000;
      Y10000 := A10000;
     end;
    end;
   end;
  end;
 end;
end;
237デフォルトの名無しさん:2005/11/15(火) 05:42:53
procedure Calc(Money: Integer; var Y1, Y1000, Y10000: Integer);
var
 A1, A1000, A10000: Integer;
 MinSum: Integer;
begin
 MinSum := MaxInt;
 for A10000 := 0 to Money div 10000 do
 begin
  if A10000 * 10000 > Money then Exit;
  for A1000 := 0 to 9 do
  begin
   if A10000 * 10000 + A1000 * 1000 > Money then Exit;
   for A1 := 0 to 999 do
   begin
    if A1 + A1000 * 1000 + A10000 * 10000 > Money then Exit;
    if A1 + A1000 * 1000 + A10000 * 10000 = Money then
    begin
     if A1 + A1000 + A10000 < MinSum then
     begin
      MinSum := A1 + A1000 + A10000;
      Y1 := A1;
      Y1000 := A1000;
      Y10000 := A10000;
     end;
    end;
   end;
  end;
 end;
end;
238デフォルトの名無しさん:2005/11/15(火) 05:46:52
if A10000 * 10000 > Money then Exit; は有り得なかった。
239デフォルトの名無しさん:2005/11/15(火) 07:32:45
馬鹿麦価
240デフォルトの名無しさん:2005/11/15(火) 09:16:12
>>213
ここは流れ早いから別に立てたよ
http://pc8.2ch.net/test/read.cgi/tech/1132013685/
241デフォルトの名無しさん:2005/11/15(火) 10:11:00
糞スレ立てるな
Pascalの宿題は俺にやらせろ!!Part1
http://pc8.2ch.net/test/read.cgi/tech/1089719714/
242デフォルトの名無しさん:2005/11/15(火) 10:33:33
>>241
ちょっとみてきたけどキモイAAとかいっぱいあったので合流は遠慮しときます
243デフォルトの名無しさん:2005/11/15(火) 10:36:49
お前の好みで糞スレ乱立させるなと
244デフォルトの名無しさん:2005/11/15(火) 11:59:57
“くだすれ” の限度は知らないけど、ここどうでもいい質問ばかりなのは気のせい?
Google検索すればすぐヒットしそうな質問を何時間〜何日〜何週間も待ってる弱小開発者ばかりなのはくだすれクォリティかしら
245デフォルトの名無しさん:2005/11/15(火) 12:03:28
VCLや主要APIのカプセル化等小学生にも優しい機能を備えてるDelphiはそれが長所で短所なんだろうなぁ。
まともに情報収集(検索)も出来ない頭の弱いボウズが食い付いてくるし。
別に初心者はやるなとは言わないけど、最低限の事はしてほしいねとチラ裏でしたpwq 板汚しすまそ
246デフォルトの名無しさん:2005/11/15(火) 12:16:25
くだすれの質問者の前提条件を求めるのはスレの趣旨を理解してない証拠だな
247デフォルトの名無しさん:2005/11/15(火) 12:19:19
ちょっと上級者って振りをしたいだけだろ。どうせろくな回答もできないんだよな、こういうヤツ
248デフォルトの名無しさん:2005/11/15(火) 12:26:37
RichEditで右クリックしたときにメニューが出ないんですが
Memoコンポで標準で出る右クリックメニューを出すにはどうコードを書けばいいのでしょうか?
249デフォルトの名無しさん:2005/11/15(火) 13:04:14
>>244
>>1

ちゃんと回答する俺ってやさしいな。
250デフォルトの名無しさん:2005/11/15(火) 13:28:56
>>248
古いログにこういうのがあったけど・・・。

65 名前: デフォルトの名無しさん 投稿日: 02/09/30 13:06

TRichEditを右クリックしたとき
TMemoを右クリックしたときと同じように
ポップアップを表示させるのにはどうしたらよいのでしょうか?
TPopupMenuで作成するしかないのでしょうか?



66 名前: デフォルトの名無しさん 投稿日: 02/09/30 17:04

>>65
他に方法があるなら教えてくれ。
251222:2005/11/15(火) 17:34:42
友達の協力もあり、完成しました。
本当にありがとうございました^^!!
252駆け出し名無し:2005/11/15(火) 20:39:03
>>251
折角だから、そのコードも貼っていってよ。
自分の書き方のどこが悪いか、添削してくれると思うよ。
253デフォルトの名無しさん:2005/11/15(火) 23:25:17
EditコントロールのWindowProcにRichEditのハンドルとWM_CONTEXTMENUを送っても駄目だった
254デフォルトの名無しさん:2005/11/15(火) 23:55:09
普通に TPopupMenu つかってメニューをつくり RichEdit の PopupMenu プロパティー
にセットするだけ
255デフォルトの名無しさん:2005/11/16(水) 00:48:25
>>248
PasteFromClipboard
CutToClipboard
SelectAll
あたりを使って、それぞれ「Memoのメニューと同じ動作」を考えて
コーディングしていく作業は、そんなに難しくないし
ある意味逆に楽しいかもw
256デフォルトの名無しさん:2005/11/16(水) 11:52:44
random関数の乱数の周期はどのくらいでしょうか?
257デフォルトの名無しさん:2005/11/16(水) 11:55:11
精度が気になるならMT使っとけ
258256:2005/11/16(水) 12:36:31
>>257
使ってますが、random関数の周期が知りたいです。
vbのrndの周期は2^24らしいですが、
randomはどの程度でしょうか?よろしくおねがいします。
259デフォルトの名無しさん:2005/11/16(水) 12:45:42
TWebBrowserなのですが、表示されたhtmlの文字列を範囲選択して
コピー操作(Ctrl+C or 右クリック->コピー)しても文字列がコピーされません。
VBでは何もコード書かなくてもWebBrowserコントロールで選択文字列のコピーが出来たのですが
DelphiでTWebBrowserに表示された文字列を選択コピーするにはどうすれば良いのでしょうか?

コード書かなくちゃならないんだとしたら、文字列変数の値をクリップボードに格納する方法は解るのですが
TWebBrowser上で範囲選択した文字列を取得する方法がわからないので
その辺の具体的なコードも教えてください。

WinXP Delphi6Personalです。よろしく御願いします。
260デフォルトの名無しさん:2005/11/16(水) 13:47:11
...Copy, Delete, Cut in the TWebbrowser?

http://www.swissdelphicenter.ch/en/printcode.php?id=1174
261デフォルトの名無しさん:2005/11/16(水) 14:24:06
・Delphi はじめの一歩(ブラウザを作ってみよう)
 ttp://delphi.sakura.vg/index2.html

ここを参考にWebブラウザを作りまして、プログレスバーをつけたのですが
全く動作しません。
よろしければ、どなたか教えて下さい。
よろしくお願いします。
262デフォルトの名無しさん:2005/11/16(水) 15:23:37
僕に聞かないで下さい。迷惑です。
263デフォルトの名無しさん:2005/11/16(水) 15:27:00
>>262
お前には聞いてないから大丈夫w
264デフォルトの名無しさん:2005/11/16(水) 15:47:50
>>258
Randomのソースが見つからない・・・@D7
265デフォルトの名無しさん:2005/11/16(水) 19:06:18

あるアプリを実行中に、そのアプリの実行ファイルに
何らかのファイルをひとつD&Dしたら、既に実行されてるアプリに
そのパスを渡すってものを作りたいんだけど簡単なサンプルとか無いですか?

ttp://forum.nifty.com/fdelphi/faq/00191.htm
にサンプルはあったんですが、コマンドラインの制限文字数を
限界まで使って複数の引数を渡すことを考慮していてなんか面倒

ParamStr(1)をひとつ送るだけでいいので
そのために必要な最低限のコードを教えてください
現在、二重起動を防止あたりは出来てます

Del6Personalです
266駆け出し名無し:2005/11/16(水) 19:28:43
>>261
> プログレスバーをつけたのですが全く動作しません。
その書いたコードを貼らないと、エスパーじゃないからわからないよ。
267デフォルトの名無しさん:2005/11/16(水) 19:54:38
エスパーの人だけでいいので答えてください
268デフォルトの名無しさん:2005/11/16(水) 20:30:16
僕はエスパー
一千年の未来から時の流れを超えてやってきた
Delphi5応答せよ
269デフォルトの名無しさん:2005/11/16(水) 20:42:08
このアプリは応答していません。すぐに終了しますか?
270駆け出し名無し:2005/11/16(水) 20:49:55
>>267
だから、それじゃわからないんだってば。
恐らくフォームに貼っただけじゃないの?
コードを書かないと駄目だよ。
何をどう表示するか、流石のDelphiちゃんにもわからないよ。

>>268
うまい!座布団1枚

というか、こんな雑談を書きたいんじゃないんだけどなあ・・・。


271デフォルトの名無しさん:2005/11/16(水) 21:51:49
  な あ    /       ___    \     、 m'''',ヾミ、、 /,) 竜  え 
  い ま    L_   /    \   \、_,r Y  Y ' 、 /';,'', ヽ 騎  | 
  方 り    /   | ^   ^ |   、 ,\ヽ, | | y /、 ,;;,,'';, i 士 マ 
  が 私    /   | .>ノ(、_, )ヽ、.|   \、\::::::::::/, /,, ;;, ;;く !? ジ 
  い を    i     __! ! -=ニ=- ノ!___ ヽ\ o 、 ,o / { ;;;;;;;,,//⌒l  /` 
  い 怒   l´ ̄ ̄ |\`ニニ´/    `ソ [ \|:::|/ ]  >"'''''      !/ 
  よ ら    _ゝ     |__  ̄ ̄ヾ    >、.>ノ(、_, )ヽ、,, <,.< 
  ね せ  「 r---イ     /|,、_,,  ,',;:ノ ! ! -=ニ=- ノ!  ト 
   l      ヽ }  /;\     / ヽ /''"L \\`ニニ´// 
⌒レ'⌒ヽ厂 ̄  } ./;;;,, \   / ;;;;;;ヽ ,,;;','i _人__人ノ_ 
人_,、ノL_,iノ!   / /;;,',';;  ノ--, ',',;;::',',゙i ,,';';i 「  キ   L_ 
ハ キ  /';  /./,',',';;" /   \ ',',',;;,'i ,;',i ノ  モ    了 
ハ ャ  {   / i 、  /    ヽ ',;::'、|   )   |     | 
ハ ハ  ヽ ヾ丿  〈       ヽ''  {//く   イ    > 
272デフォルトの名無しさん:2005/11/16(水) 22:07:49
Del厨のゆかいななかまたちと戯れたいならこっちでやれ
おまいら!今日からDelphi言語を学んでいくぞー!02
http://pc8.2ch.net/test/read.cgi/tech/1132013685/
273261:2005/11/17(木) 00:00:16
>>270
すいません。>>267は自分じゃないです。
プロパティのpositionを増やしていけば良いと思うのですが、
その数値をどこから持ってくれば良いのかわかりません。
宜しくお願いします。
274デフォルトの名無しさん:2005/11/17(木) 00:02:21
>>264
call @RandInt
275デフォルトの名無しさん:2005/11/17(木) 00:04:31
>>273
何をしたいのか分からないので、
エスパーじゃないとどの数値を使えばいいか分かりません

つーか学習しろよ、小出しにするんじゃねボケ
276デフォルトの名無しさん:2005/11/17(木) 00:18:13
>>275
てめえには聞いてねえ。
偉そうな口きいてんじゃねボケ。
277デフォルトの名無しさん:2005/11/17(木) 00:49:24
Delphiの仕事ってあるの?
278デフォルトの名無しさん:2005/11/17(木) 00:59:22
あるけど俺が独占してる
279デフォルトの名無しさん:2005/11/17(木) 01:22:07
DelphiのIDEはDelphi製

>>278
バグ大杉だザケンナ。
280デフォルトの名無しさん:2005/11/17(木) 01:28:27
Delphi2005も引き続きDelphi製なの?
281デフォルトの名無しさん:2005/11/17(木) 02:54:13
>>252
>>237を添削してくれないのだから、期待出来ない。
因みに>237は、小さすぎる場合は Continue できる。
ループのネストも必要無い。
こうなると総当たりとは言わず、割り算の替わりにループと掛け算で
求めることになる。
282デフォルトの名無しさん:2005/11/17(木) 03:26:07
>>261
漏れもブラウザ作った事があるんだけど、プログレスバーを実装しようと
色々調べてるうちに結局めどくなったのでやめた。
んで、改めて気になってぐぐってみたら、簡単に実装できる方法を発見。

TWebBrtowserのOnProgressChangeイベントに次のように記述するだけ。

//Progress    ダウンロードの進行状況のバイト単位での数値、完了時に-1を返す
//ProgressMax  ダウンロードするデータの大きさ(バイト単位)

 if ProgressMax > 0 then //Progressが0で除算されるのを防ぐ
  ProgressBar1.Position := Round(Progress / ProgressMax * 100);

ただしこれだとプログレスバーが100%表示されたままになっちゃう場合があるので、
後は自分で工夫するべし。
283デフォルトの名無しさん:2005/11/17(木) 03:51:46
横から質問なんですがステータスバーにプログレスバーを入れるにはどうすればいいでしょうか…
284デフォルトの名無しさん:2005/11/17(木) 04:06:49
285デフォルトの名無しさん:2005/11/17(木) 06:33:11
dfmファイルに手書きという手も有る。
286261:2005/11/17(木) 08:59:17
>>282
おお!
ありがとうございます。
早速やってみます。
287デフォルトの名無しさん:2005/11/17(木) 23:55:18
>>286
釣りじゃなかったのか…。
煽るワケじゃないけど、あのページにプログレスバーのことは
書いてないじゃん。今、確認してきたけど。
ってことは、「(貼っただけで)動きません」って主張してたんだよね?
ちょっとそれはどうだろう…。
288デフォルトの名無しさん:2005/11/18(金) 01:02:02
貼っただけで動かないことは知ってたんだよ。たぶん。でもどうコードを書いたらいいか
まるっきり見当がつかなかったと。だから、ああいう書き方になっても、まぁ、
仕方ないかと。くだすれだし。
289デフォルトの名無しさん:2005/11/18(金) 01:04:24
プログレスバーで、なにかリアルタイムでの進行状況を表示するって、けっこう難しいことなんだよな、一般に。
290デフォルトの名無しさん:2005/11/18(金) 01:04:41
>>288
ふーむ。そっか。
291デフォルトの名無しさん:2005/11/18(金) 01:44:01
>>289
MS製品のプログレスバーなんて9割ぐらいでピタッと止まって、
その後物凄く待たされたりするなんてことも良くあるしな
進捗を示すにあたって何を基準とするかが重要
292デフォルトの名無しさん:2005/11/18(金) 02:47:50
バックすることもあるし(藁
293デフォルトの名無しさん:2005/11/18(金) 05:50:15
>>287
チャント答えてくれた人がいるってのにごねるなよ。
自分は読解力のない馬鹿ですって告白してるようなもんだぞ。
294デフォルトの名無しさん:2005/11/18(金) 06:44:23
>>293
ん?
295デフォルトの名無しさん:2005/11/18(金) 11:26:18
使用するプリンタ、用紙サイズ、向きなどを保存して次回起動時に再現したいんですが、
どのようにするといいのでしょうか。
296デフォルトの名無しさん:2005/11/18(金) 11:28:41
>>295
プリンタ関連は面倒なんで、NkPrinterとかのコンポーネント使ったほうがいいと思います。
297デフォルトの名無しさん:2005/11/18(金) 11:29:47
>>296
ありがとうございます。使ってみます。
298デフォルトの名無しさん:2005/11/19(土) 02:06:58
Writelnで出力する内容にtabをいれるにはどうすればいいのでしょうか?
299デフォルトの名無しさん:2005/11/19(土) 02:08:21
#9
300デフォルトの名無しさん:2005/11/19(土) 02:12:21
Writeln('hoge' + #9 + 'hoge');
301デフォルトの名無しさん:2005/11/19(土) 02:31:10
ありがとう
302駆け出し名無し:2005/11/19(土) 15:36:54
>>301
ついでに、これらもまとめておきますね。

・DELPHIで良く使用する制御文字

改行コード CR: #13
改行コード LF: #10 
改行コード CRLF: #13#10
タブ: #9
303デフォルトの名無しさん:2005/11/19(土) 16:51:41
演算子付けない書き方もあるよ。
Writeln('hoge'#9'hoge');
304駆け出し名無し:2005/11/19(土) 17:22:00
>>303
ということは、以下はどっちも通るってことですか?

Writeln('hoge'#9'hoge');
Writeln('hoge' + #9 + 'hoge');

違いがあるのは、他の言語からの移行性の考慮?
305デフォルトの名無しさん:2005/11/19(土) 22:27:33
>>304
どっちでも通る。漏れは付けない(すっきりする)。
移行性云々はシラネ。
306ななしへたぐらま ◆XcB18Bks.Y :2005/11/19(土) 23:16:59
単に見た目の問題と考えても良いのではないかと思います.

Writeln('hogehoge') と書いても
Writeln('hoge' + 'hoge') と書いても
同じ結果になるでしょう?
それと同じ.
307デフォルトの名無しさん:2005/11/19(土) 23:18:03
でも

Writeln('hoge''hoge')

とは書けないが
308デフォルトの名無しさん:2005/11/20(日) 00:01:16
>>307
それは書けるよ
もちろん意図したものとは異なることになるが
309デフォルトの名無しさん:2005/11/20(日) 04:03:48
いや306の例が不適切なことをいいたいだけなんだが
310デフォルトの名無しさん:2005/11/20(日) 04:44:45
知ったかぶりを発揮したら間違っていたので真っ赤になってる307萌え
311ななしへたぐらま ◆XcB18Bks.Y :2005/11/20(日) 06:01:42
>>309
ではこんな感じではどうでしょうか?
------------------------------------
・ 'hoge'#9'hoge' これはひとつの文字列

・ 'hoge' + #9 + 'hoge' これは2つの文字列と1つの文字をつないだ式(式の値がひとつの文字列になる)

'hoge'#9'hoge' はあくまでひとつの文字列なので
たとえば文字列変数 s1, s2 をタブ文字でつなごうとして

 s1#9s2

と書いてもダメです.この場合は s1 + #9 + s2 と書いてください.
------------------------------------
※ちなみにWriteln手続きなら Writeln('hoge', #9, 'hoge')と書けますね(すっかり忘れていました).
312デフォルトの名無しさん:2005/11/21(月) 05:34:23
C++で作られたDLLの

func( int *a )

と言う整数配列ポインタ指定を引数とした関数にアクセスしたいのですが

Delphi側からは何を渡せばいいのでしょうか?

下記の感じで適当に配列を作って渡したみたのですが例外が出て動きません。。。。

var a: array[0..100] of integer;
begin
func ( int a );
end;


@で試しても例外にて停止しました
313312:2005/11/21(月) 06:02:16
自己レス

動作確認はまだですが

宣言時にstdcall;追加でエラーはでなくなりました
314デフォルトの名無しさん:2005/11/21(月) 10:14:45
関数宣言の引数パラメータにvarが付いてないのが原因では
配列ポインタが引数ならちゃんと参照渡しにしないとダメ

静的配列だから@付ける事で参照渡しになるけど
動的配列だったら暗黙で参照渡しだから@付けると参照の参照で
悲惨な目に会う予感
315デフォルトの名無しさん:2005/11/21(月) 10:27:58
どっちでも @a[0] でOK
316デフォルトの名無しさん:2005/11/21(月) 15:11:20
>>314
おまいさんは基本をやり直した方が良い感じ
317デフォルトの名無しさん:2005/11/21(月) 20:45:21
配列に格納された値の中から”ある値”に最も近い値を探して返す
というのをやりたいのですが、ヘルプを見るとEnsureRangeというのがありますけど、この場合(配列から探すという場合)使えるんですかね?
318デフォルトの名無しさん:2005/11/21(月) 21:35:22
EnsureRange は全く関係ないような・・・
ループ回して "ある値" との差の絶対値が最も小さい値を見つければいいんでね?
319デフォルトの名無しさん:2005/11/21(月) 21:39:59
>>317
ほらよ('A`)ノ
function hoge(foo: Integer; bar: TIntArray): Integer;
var
 i: Integer;
begin
 i := Low(bar);
 Result := bar[i];
 Inc(i);
 while i <= High(bar) do
 begin
  if Abs(foo - Result) > Abs(foo - bar[i]) then
  begin
   Result := bar[i];
  end;
  Inc(i);
 end;
end;

つーかこれくらい自分で作りやがれボケ
添字の範囲チェックや高速化くらいは自分でやれよ
320デフォルトの名無しさん:2005/11/21(月) 21:45:25
文面では別に答えを求めていた訳じゃないのに、
何故か勝手に答えを提示した319に罵倒されてる317カワイソス
321デフォルトの名無しさん:2005/11/21(月) 21:52:38
ヘルプを読んだ上で、配列で使える?って質問する >>317 もどうかと思うが。
もっとも Del のヘルプは信用できんから実は使えたり…と思ったのかもしれんが。
322デフォルトの名無しさん:2005/11/21(月) 21:52:47
たぶんツンデレだなw
文句言いつつエラーチェックや高速化を教えてくれてる辺り
323デフォルトの名無しさん:2005/11/21(月) 21:53:53
答えもなく罵倒されるよりはいいんじゃね?
正しいかどうかは別にして
324デフォルトの名無しさん:2005/11/21(月) 21:59:20
319の人気に嫉妬^^;
325デフォルトの名無しさん:2005/11/21(月) 21:59:28
警告(320-323): スレ密度が低下しつつあります。
326駆け出し名無し:2005/11/21(月) 22:14:28
>>325
くだすれでそれを言ってもねえ。
燃料でいいんじゃね?落ちるよりもさ。
327デフォルトの名無しさん:2005/11/21(月) 22:39:54
近頃は過疎すぎ。さびしいねぇ。たそがれ時は。
328駆け出し名無し:2005/11/21(月) 22:46:27
>>327
あっちでマターリしていればいいし。
だけど、上級スレが落ちたのはショックだったなあ。
続かせないと、どんな形であれ。Delphi、未だここにありって感じで。
329320:2005/11/21(月) 22:49:08
何がツンデレだカスが
罵倒されるよりはいい?は?
そんなのやられるくらいなら無い方がいいっつーの
勘違いしてんじゃね
330デフォルトの名無しさん:2005/11/21(月) 23:05:44
まあモチツケ
大人の話をしようじゃマイカ
331デフォルトの名無しさん:2005/11/21(月) 23:17:59
質問させてください。
DDE通信関連のアプリを作っているのですが、
1トピックの150アイテムでOnChangeイベントを使っています。
ログを取るためにOnChangeイベント内でファイル操作(開いて閉じる)をしたところ、
かなりデータに抜けが出てしまいました。
(値が変わっているのに、OnChangeイベント内の処理が行われない)
処理が重くなるかもとは思いましたが、抜けるとは思っていなかったのでびっくりしました。
そういうもんなんでしょうか?

アプリが動いている間、ずっとファイルを開いていていいもんでしょうか?
プログラムとしてあまり望ましくないですよね?
332デフォルトの名無しさん:2005/11/21(月) 23:35:02
>>331
DDEは触ったことないんで、その動作が正常なのかどうかは知らないんで置いておいて。

onChangeではキューにログを追加するだけで、後はTTimerのonTimerなり
TApplicationEventsのonIdleでキューから取り出してファイルに書き込むとか。
もっとクリティカルな状態であれば、キューから取り出してファイルに書き込む部分を
別スレッドにするとかでいいんでないかい。
333331:2005/11/21(月) 23:42:54
やっぱ貯めて書くって感じになりますよね。
別スレッドにするとどんな感じになるんでしょうか?
やっぱり一回の値の変化でファイル操作をするとかなり重くなって
本スレッドの処理を圧迫してしまいますよね・・・

ちょっと教えて欲しいのですが、
DDEで最終的には300トピック、10000アイテムくらいを監視したいと思ってるんですが、
300スレッドに分けてしまったらさすがにまずいですよね・・・
そもそも別スレッドにしたものでOnChangeイベントを拾う方法ってあるのでしょうか?
334デフォルトの名無しさん:2005/11/21(月) 23:44:24
タイムアウト時間がどれぐらいなのかさっぱり知らんけど、
DDEも通信である以上は拾い損ねもあるよ。
335デフォルトの名無しさん:2005/11/21(月) 23:46:45
…ていうかDDEで300とかやめれ。
DDEはSendMessageで実装されてるぐらいなんで、いくらなんでも限度あるだろ。
336デフォルトの名無しさん:2005/11/21(月) 23:47:44
自作アプリの通信ログを表示するためにTMemoを使い、
行数制限をするために、一定行数を超えたらMemo1.Lines.Delete(0)としてるのですが、
内部で配列を再確保、コピー、解放とやってるようで、かなり負荷があります。
また、ログの追加も頻繁なので、Addのコストもあります。
これらを解決する(負荷コストを下げる)良い方法ってあるでしょうか?
337331:2005/11/21(月) 23:50:39
>>334
エクセルで値を監視してるとかなりきっちり拾ってるんですよ。
プログラムをうまく作れば、千アイテムくらいならきっちり拾えるはずなんです。
OnChangeイベント内で重い処理ができないとなると、
考えているアプリを実現するのは結構難しいです・・・

>>335
しょうがないんです・・・
宿命なんです。
DDEで300トピック監視せざるを得ないのです・・・
338デフォルトの名無しさん:2005/11/21(月) 23:51:31
自分で描く

いやまじで。
メモ帳でちょっとでかいファイル開いてみてもわかるように
Windowsのエディットコントロールはあんま性能良くない。
339デフォルトの名無しさん:2005/11/21(月) 23:53:54
>>336
ListViewのカスタムデータ表示に切り替える。
Memo.Linesは重すぎ。
340デフォルトの名無しさん:2005/11/21(月) 23:55:09
取りこぼしがマズイであれば何らかのプロトコルを実装しないと
どうしようもないんぢゃないの?
341デフォルトの名無しさん:2005/11/22(火) 00:00:12
>>337
宿命ですかそうですか。

んー…。
DDEコンポーネントもメインスレッドのメッセージキューを使ってる筈なんで、
いくらマルチスレッド化してもメインスレッドが耐えられなくなったら終わりそうなんで…
であればDDEコンポーネント使うのやめて、各スレッドでDDEML APIでも使って
通信まで別々にやっちまうぐらいしか?
しかも通信相手の都合もあるし、DDEの開始メッセージはブロードキャストされるしで、
自分の側だけどうにかして果たして効果が出るものなのかもわからん…。

すまんね。
342デフォルトの名無しさん:2005/11/22(火) 00:03:51
>>338-339
つまりデータの追加削除にかかるコストより、
描画処理の方が重いってことですか?
てっきりTMemoStrings内での配列のコピー周りで時間食ってると思ってました
343デフォルトの名無しさん:2005/11/22(火) 00:07:32
>>342
それで合ってるよ。
そして、TMemo(エディットコントロール)の内部構造なんかTMemoを使う限りどうしようもないっしょ?
だから、そもそもエディットコントロールを使わない、という選択肢が出てくるわけだ。
344デフォルトの名無しさん:2005/11/22(火) 00:12:16
あ、フォロー。
合ってる、というのは、データの移動が描画より重いってあたりで。

あとエディットコントロールはUnicodeの合成文字とか
右から左へ書く言語とか全部サポートしてるので
重いのはそれなりの理由が合ったりする。
でも今回の役にはたたんでしょ?

自分で中身も管理するなら、追加と削除が高速なリンクリストにするなどの
データ構造への工夫を凝らすことができる。
345デフォルトの名無しさん:2005/11/22(火) 00:20:26
>>331
なにが問題なんだ。
DDEがからの通信が拾えてないのか、ログ書き込み時のファイル操作に失敗しているだけなのか。
後者ならいちいち閉じずにファイルハンドル使いまわして書き込めばいいだけ。
CreateFile/WriteFileはスレッドセーフだから一行単位で書き込む限り破綻しない。
346デフォルトの名無しさん:2005/11/22(火) 00:28:43
>>344
なるほど。
リンクリストとなるとスクロール時とかの表示がめんどくさそうですけど、
とりあえずそれで何とか頑張ってみます。
ありがとうございました。
347331:2005/11/22(火) 00:31:55
>>345
拾えてないんですよね・・・
OnChangeイベントが発生したら、Editの値を変えて、
ファイルを開いて、一行書き込んで閉じるってことをしてるんですが、
Editの値からして変わらないんです・・・
おそらく、ファイル操作してる時にイベントが起こって、
破棄される(?)かなんかしてるのかな
ファイルハンドル使いまわしてってのは、
一度開いたら閉じないで置くって意味ですか?

ファイル操作ってかなり重いですよね?
ファイル操作の代わりにそこそこの演算しても平気な可能性ありますよね?
348デフォルトの名無しさん:2005/11/22(火) 00:36:04
ファイルへの書き込みやめたらちゃんと拾えるのか?
349デフォルトの名無しさん:2005/11/22(火) 00:39:00
いちいちオープンクローズは重い。
開きっぱなしで書き込んでいけばバッファリングされるからフォーマンスはかなり上がるはず。
350331:2005/11/22(火) 00:39:50
>>348
おそらく拾えると思われる。
色々事情があって、
そのテストをするのが明日の朝か明々後日の朝になる・・・

同時にイベントが起こったりしたら拾えない仕様だったりするんですかね?
処理が遅れるのはしょうがないと思ってたけど、
イベント自体はしっかり拾って保持してくれると思ってたんで、
ちょっと想定外。
どうやってプログラミングすればいいんだろ・・・
351331:2005/11/22(火) 00:41:01
>>349
フォーマンスUP!!

アプリが何時間もファイル開きっぱなしにするのは、
別にいいことなんですかね?
気にしすぎかな?
352デフォルトの名無しさん:2005/11/22(火) 00:47:05
てかExcelならCOM使えばええやん
353デフォルトの名無しさん:2005/11/22(火) 00:48:14
>アプリが何時間もファイル開きっぱなしにするのは、
>別にいいことなんですかね?
運用方法による。
tail -fなんかで外部から閲覧できればいいならFILE_SHARE_READすればいいし
フルコントロールしたいなら一定間隔でファイル名変えたりopen/closeするとか。
354331:2005/11/22(火) 00:49:13
>>352
私のことですか?
ExcelのVBAだと重いかなと思いまして、
複雑な処理がしたいこともあってdelphiでアプリを作ってます。
COMってのを使うとどんなことができるんでしょ?
355デフォルトの名無しさん:2005/11/22(火) 00:51:02
速度的な話したら同プロセスで動くVBAがかなり速いと思うんだが
356331:2005/11/22(火) 01:00:39
>>353
んじゃ、全然問題ないですね。
アプリを実行中にログを書き込む以外でファイルにアクセスするつもりないので。
明日はファイル開きっぱなしで抜けがでるか試してみます。

>>355
え・・・
http://pc8.2ch.net/tech/
このスレの1を見てdelphiなら間違いないと思ったのに・・・
357デフォルトの名無しさん:2005/11/22(火) 01:02:26
どのスレだよw
358デフォルトの名無しさん:2005/11/22(火) 01:08:37
先にログの書き込みなしで抜けるかどうかチェックしろよ。
それで駄目なら100万倍高速化しても無理だぞ。
359331:2005/11/22(火) 01:11:08
す、すみま・・・
http://pc8.2ch.net/test/read.cgi/tech/1099112351/
このスレっす!このスレっす!
360デフォルトの名無しさん:2005/11/22(火) 01:14:07
>>359
それは単体動作する場合だろ
どんなに凄い速度で動く言語があっても、
別のプロセスとやりとりするならかなり意味が無い
361デフォルトの名無しさん:2005/11/22(火) 01:14:50
なんかこの人基礎がダメ過ぎる気がしてきた。
362331:2005/11/22(火) 01:23:53
す、すいません。
意味が分からなくなってきてます!
単体動作が早いのが重要じゃないんですか?
DDE通信で得た値で結構複雑な演算をしたいと思っているので、
VBAだと重いのかなと思ったんです。
複雑な処理はしづらいのかなとも思って。
363デフォルトの名無しさん:2005/11/22(火) 01:29:44
そんな、何十年もまえのPCじゃ有るまいし
364331:2005/11/22(火) 01:38:07
>>363
いや、可能なら毎秒変化する数千の値で演算しまくりたいもんで・・・
365デフォルトの名無しさん:2005/11/22(火) 01:40:09
366331:2005/11/22(火) 01:44:52
>>365
>>356
明日か明々後日の朝じゃないと確かめられないんすよ・・・
367デフォルトの名無しさん:2005/11/22(火) 01:45:01
同一メソッド内でraiseしてexceptなんてやらせ臭いな
368デフォルトの名無しさん:2005/11/22(火) 02:11:16
同一プロセスのメモリを参照できるものと、
間接的にも読まずメッセージでやり取り、
しかも通信に失敗する可能性のあるものと、
普通の人間が考えたらどっちが良いと思う?
369331:2005/11/22(火) 02:26:16
すいません、理解できてきました!
あらぬ誤解を招いてしまったようで・・・

DDEServer側は全く違うアプリです。
そのアプリを通してしか、インターネット上のサーバにアクセスできません。
DDEClient側をExcelにするかDelphiでプログラミングしたアプリにするかって話です。
わかりづらくてすんません。
370デフォルトの名無しさん:2005/11/22(火) 07:41:52
言ってることがコロコロ変わる奴の質問に誰が答えるよ?
ちゃんとまとめろアホ
371デフォルトの名無しさん:2005/11/22(火) 09:00:31
↑ こいつはなんで威張ってるんだ?
372デフォルトの名無しさん:2005/11/22(火) 09:13:23
回答者の心の声を大便
373331:2005/11/22(火) 09:16:51
す、すいません・・・

ファイル操作なしでも抜けまくりでした・・・
OnChangeイベントって同時に起こると拾えないのでしょうか?
DDEコンポーネントの問題でしょうか?
どうしたらいいかなぁ
374デフォルトの名無しさん:2005/11/22(火) 10:20:02
だから詳細書けっての
エスパーは滅多にいないんだよ
375メ力名無しさん:2005/11/22(火) 16:26:16
わからないので教えてください。
以下のような設定ファイルから「SLOPE」の行だけを読み出してDouble型のvolt[1]とDouble型のvolt[2]に代入し、
それをInt型の値と乗算しDouble型をString型に変換して出力することが解らずに悩んでいます。

----------------------------
STORAGE_MODE interlaced
FILE_TYPE INTEGER
SLOPE 1.87500E-04,1.87500E-04
X_OFFSET 0.00000E+00
Y_OFFSET 0.00000E+00,0.00000E+00
----------------------------

~~~~~~C 言語での例~~~~~~
for(ch=1;str[0]!='S' || str[1]!='L';ch++)fgets(str,60,fp2);  /* SLOPE確定 */
sscanf(str,"%s %le,%le",&word,&volt[0],&volt[1]);

~~~~~~Delphiでやった部分~~~~~~~
while not Eof( hdrfile ) do // ファイルの終端までループ
begin
Readln( hdrfile, s );
if s[1]='S' then if s[2]='L' then Memo1.Lines.add(s); // SLOPE確定
// volt[1] volt[2] に読み込む
end;

まとめると解らないのは以下の2点
○ C言語でいう #le 型の読み込みがわからない
○ Double型をString形式にできない

是非教えていただきたく、お願いします。
376デフォルトの名無しさん:2005/11/22(火) 16:50:04
そのファイルそのまま使いたいならStringlist使えばいいのかな
DoubleからStringはFloatToStrの事かな

馬鹿でごめんなさい><
377デフォルトの名無しさん:2005/11/22(火) 16:54:20
配列をその要素数をプログラム実行中に決定(ファイルから読み込み等)した上で
その配列を動的確保したいのですが、どういう風にしたら良いのでしょうか?
Cでの経験から自分なりにやってはみたのですが、コンパイラに弾かれます・・・
378デフォルトの名無しさん:2005/11/22(火) 16:55:58
s: array of string;
setlength(s, 10);
s[1] := 'hello';
379デフォルトの名無しさん:2005/11/22(火) 16:56:32
setlengthじゃだめかな
380デフォルトの名無しさん:2005/11/22(火) 17:18:37
>>375
こんなんでいかがでしょうか?DelphiらしくTStringListを使ってみました。

procedure TForm1.Button1Click(Sender: TObject);
var
fp: TextFile;
s: String;
sList: TStringList;
begin
AssignFile(fp, 'C:\test.txt');
Reset(fp);
try
while not Eof( fp ) do
begin
Readln( fp, s );
if (s[1]='S') and (s[2]='L') then
begin
Memo1.Lines.Add(s);
sList := TStringList.Create;
try
sList.CommaText := s;
Edit1.Text := sList.Strings[1]; Edit2.Text := sList.Strings[2];
finally
sList.Free;
end;
end;
end;
finally
CloseFile(fp);
end;
end;
381デフォルトの名無しさん:2005/11/22(火) 18:33:53
>>378
配列の添え字は0から使えるよ
382デフォルトの名無しさん:2005/11/22(火) 18:35:41
必ず0から、だろ
383デフォルトの名無しさん:2005/11/22(火) 19:46:09
「始まる」と「使える」は別。
384デフォルトの名無しさん:2005/11/22(火) 20:08:29
別だから書き込んだんだろ、変なヤツ
385375:2005/11/22(火) 20:56:38
>380さん
ありがとうございます。
その方法だと「SLOPE」の文字が残りそうなので「SLOPE」をDELETEしておけばいいんですね。
さっそく組み込んでみたいとおもいます。

>>Double型をString形式にできない
というのは「Str(X,S)」を用いることで解消できました。
そのままCSV形式で書き出したらExcelで読み込めたので、それでOKとしておきます。

デジタルオシロの出力ファイル(中身はバイナリ)を卒業研究用に変換するソフトでした。ありがとうございました。
386ななしへたぐらま ◆XcB18Bks.Y :2005/11/23(水) 00:41:48
既に結論が出ている話題ですが…

>>336
> 内部で配列を再確保、コピー、解放とやってるようで、かなり負荷があります。

メモコンポのテキストはWindowsのMEMOコントロールが持っているのがすべてで
VCL内部では何も持っていません.

たとえば TMemoStrings.Delete(インデックス) では
以下の各処理でMEMOコントロールにメッセージを送っています.

・インデックスで指定された行の先頭位置を調べる
・次の行の先頭位置を調べる
・両者の間を選択する
・選択範囲を空文字列で置き換え(=削除)

387デフォルトの名無しさん:2005/11/23(水) 00:54:00
あの、コードエディタで100行目から200行目までの全ての行の文字列を2マス左にずらす
みたいな裏技は無いんですか?

頼む!「有る」って答えて!
388デフォルトの名無しさん:2005/11/23(水) 00:57:49
逆インデントか?100~200行を選択してCtrl+Shift+Uだ
反対はCtrl+Shift+Iな
389デフォルトの名無しさん:2005/11/23(水) 01:00:37
うお!マジ!すげー!
>>388さんありがとう! とても興奮してます
390デフォルトの名無しさん:2005/11/23(水) 01:02:34
いままで1行ずつSPACEとBSをチマチマ押してたのがアホだった
391デフォルトの名無しさん:2005/11/23(水) 01:11:24
この時間帯にはレベル高い方が常駐してるのかな?
俺も以前質問して即レスもらった
392デフォルトの名無しさん:2005/11/23(水) 01:25:09
いや、ほとんど常識だと思うが
393ななしへたぐらま ◆XcB18Bks.Y :2005/11/23(水) 01:51:38
「どうしてこんなあほらしいことしなくちゃいけないんだよ!」と疑問を感じられればOK.
(まぁこんなもんだろう)とか(しかたがないよ)とか思ったらなんの進歩もありませんから.
プログラミングの進歩も「どうすればもっと楽になるか」の繰り返しです.
394駆け出し名無し:2005/11/23(水) 01:55:50
>>387
Delphi 6 のショートカットキー: ttp://www.ss.iij4u.or.jp/~somali/extra/_delphi_shortcut.html

あと、何か役立つものが落ちているかもしれないからこっちも紹介。
おまいら!今日からDelphi言語を学んでいくぞー!02
ttp://pc8.2ch.net/test/read.cgi/tech/1132013685/
395デフォルトの名無しさん:2005/11/23(水) 04:13:47
とあるホームページのhtmlファイルの最終更新日やサイズやファイルサイズをTidHTTPで調べたいのですが
具体的にどういったコードで知る事ができるのでしょうか?
環境はindy9、Delphi6Personalです。
396デフォルトの名無しさん:2005/11/23(水) 04:27:55
「ソース出せ」と?
397デフォルトの名無しさん:2005/11/23(水) 04:42:01
398デフォルトの名無しさん:2005/11/23(水) 09:45:09
>>387
フリーカーソル無効化アドイン入れればTabでインデント、Shift+Tabで逆インデントできるよ
399デフォルトの名無しさん:2005/11/23(水) 17:43:33
へたれが多くなりまつたね
400デフォルトの名無しさん:2005/11/23(水) 18:34:31
きみがVBやってればよかったのに。一気にDel厨のレベル低下。
401デフォルトの名無しさん:2005/11/23(水) 18:35:38
exeファイルの更新日時からいろいろ判定してるんだけど、
普通に使ってればアプリのexeファイルの更新日時って変化しないよね?
402デフォルトの名無しさん:2005/11/23(水) 19:19:51
普通じゃない使い方…??
403デフォルトの名無しさん:2005/11/23(水) 23:20:31
>>402
バイナリエディタで書き換えたりする人もいるかも。
404デフォルトの名無しさん:2005/11/24(木) 00:29:58
>>399
へたれが多くなったのではない。残っているユーザの中のへたれ比率が高まっただけ。
405デフォルトの名無しさん:2005/11/24(木) 00:42:02
406デフォルトの名無しさん:2005/11/24(木) 11:05:22
>>401
漏れは良くリソースを書き換える

特にアクセラレータあたり
407401:2005/11/24(木) 21:36:36
401です
いろいろ情報ありがとです
むーん、変わっちゃう事もあるんですか。まいったなぁ…
408デフォルトの名無しさん:2005/11/25(金) 08:16:20
Delphi5 です。
DelphiのMainForm.exeから
同一フォルダにあるVBで作ったEXEを、
コマンドライン引数を渡して起動させる方法をお教え下さい。
409デフォルトの名無しさん:2005/11/25(金) 08:21:56
ExtractFilePath
Application.ExeName
ShellExecute
410デフォルトの名無しさん:2005/11/25(金) 08:56:30
同一フォルダにあるときはファイル名だけで起動してたんだけど、だめなのかな?
411デフォルトの名無しさん:2005/11/25(金) 09:16:11
>>408
会社名丸出しでKylix-MLに投稿して、Delphi-MLで聞いたら?と言われたのでしょ。
それをスルーして、2chにカキコですか。。。大胆でつね。
後、VBのスレとマルチはおやめ。
412デフォルトの名無しさん:2005/11/25(金) 09:25:11
>>410
カレントディレクトリ次第
413デフォルトの名無しさん:2005/11/25(金) 09:26:52
>>408
別Exeの起動はCreateProcessAPIを使う。参考までにDelphiの例を
aExeの部分にExeのfフルパスと引数を入れる

var
Si: TStartupInfo;
Pi: TProcessInformation;
begin
FillChar(Si, Sizeof(TStartupInfo), 0);
FillChar(Pi, Sizeof(TProcessInformation), 0);
GetStartupInfo(Si);
 CreateProcess(nil, PChar(aExe), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI);
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
end;

>>409
駄目じゃないけどカレントパスが変わると
やっかいな事が起こりそうだからフルパス指定の方が安全
414デフォルトの名無しさん:2005/11/25(金) 09:42:43
411
反省します
415デフォルトの名無しさん:2005/11/25(金) 10:09:40
>>410
誤爆の可能性があるから、
自分でパスを扱うときの基本は絶対パス
416デフォルトの名無しさん:2005/11/25(金) 11:17:18
ここにCreateProcessの使い方があります。
ttp://www.wwlnk.com/boheme/delphi/tips/tec0260.htm
PChar(aExe)のところはシングルクォーテーションでくくらないと
コンパイルできませんでした。。

procedure TForm1.Button1Click(Sender: TObject);
var
Si: TStartupInfo;
Pi: TProcessInformation;
begin
 FillChar(Si, Sizeof(TStartupInfo), 0);
 FillChar(Pi, Sizeof(TProcessInformation), 0);
 GetStartupInfo(Si);
 CreateProcess(nil, PChar('test.exe'), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI);
 CloseHandle(PI.hProcess);
 CloseHandle(PI.hThread);
end;
end.
417410:2005/11/25(金) 11:19:53
ショートカットの作業フォルダを変更して起動してみたら、だめでした。
全然おけって思い込んでた。Windows の基本から勉強し直します…
418デフォルトの名無しさん:2005/11/25(金) 11:27:35
こんなレベルでも仕事になるんだね
いいなぁ
419デフォルトの名無しさん:2005/11/25(金) 17:40:09
キモいのが一匹常駐してるな
420デフォルトの名無しさん:2005/11/25(金) 20:11:55
いつものことだよ
421デフォルトの名無しさん:2005/11/26(土) 00:20:49
メモリマップドファイルのStreamってないですか?
422デフォルトの名無しさん:2005/11/26(土) 01:34:07
>>421
サンプル蔵かどこかにあったからぐぐれ
423デフォルトの名無しさん:2005/11/26(土) 01:34:36
あとどうでもいいがメモリマップ「ト」ね
424デフォルトの名無しさん:2005/11/26(土) 01:42:24
どうでもよくないよ。
検索で引っかからなくなるから、
そういう指摘は貴重であり重要。
初心者にとってはありがたい。
425デフォルトの名無しさん:2005/11/26(土) 01:57:22
GNU Pascal や Free Pascal などの 非Borland製Pascalコンパイラを、
Delphi 搭載のBorland製コンパイラに置き換えて使うことってできます?
Borland製のコンパイラと同じことができて、安定しているならそっちにしてみたいななんて思っています。

できた人、できた事例をご存じの人、やり方を知っている人がいましたらヒントをください。
426デフォルトの名無しさん:2005/11/26(土) 02:04:13
出来ないと思うよ。VCLはボーランド独自の物だから。

Windowsならボーランド製コンパイラが性能も安定性もたぶん一番だと思うし
置き換える意味は無いと思う。

Lazarusに移行するという話なら分かるけどね。
http://www.lazarus.freepascal.org/
427デフォルトの名無しさん:2005/11/26(土) 02:57:34
つうか、ボーランドのコンパイラってそんな不満あるか?
クソ重くて安定していないのはIDEのせいでコンパイラはまた
別物と思っていたけれど。ちがうの?
あのIDEをつかったままコンパイラだけ入れ替えてもあまり
意味ないような気がするけど、違うならぜひ教えて下さい。
428デフォルトの名無しさん:2005/11/26(土) 05:22:06
非BorlandのPascalコンパイラは、それはそれで別の過激な拡張があるので、
(演算子オーバーロードなんかとっくの昔からあるし*=とかもある)
Delphi IDEの解析機能なんかも通用しなくなるとおもわれ

…というかDelphi IDEはその手の解析にもdccxx.dll使ってるわけだが。
429デフォルトの名無しさん:2005/11/26(土) 06:02:00
厨房がちょっと思いついただけ。ほっとけ
430デフォルトの名無しさん:2005/11/26(土) 20:48:07
>>429
お前みたいな香具師が居るから、技術が進歩しないのが分からないのか?
431デフォルトの名無しさん:2005/11/26(土) 21:51:29
>>426-427
遅レスすまそです。
不安定なのはIDEのせいなんですか・・・
2005とかは使ったこともないので安定性うんぬんのことは分かりませんが、
当方のDel 6 Per でコンパイルしたプログラムと WinXPは相性が悪いみたいなので、
非Borland 製コンパイラで原因不明のエラーとか64ビットへの対応が現状よりも改善できるようなら入れ替えも考えていました。

単純にDelphi 製ソフトが不安定 -> 自作ソフト以外でも起こるからコンパイラに原因ありか? -> コンパイラを変えたら直る? ->
IDEが使えないのは不便そうだ。 ->じゃあIDEはそのままでコンパイラだけ入れ替えられないか?

ってことで質問させてもらった次第です。
なにか改善の参考になるようなものがあれば教えてください。
432デフォルトの名無しさん:2005/11/26(土) 21:52:00
>>430
本人乙
今回の件は技術の進歩とは何の縁もないと思うが
ちょっと調べれば言語としても別物だと分かるし
433デフォルトの名無しさん:2005/11/26(土) 21:53:37
>>431
D7以降を試してから言って下さい
434デフォルトの名無しさん:2005/11/26(土) 22:15:05
> 当方のDel 6 Per でコンパイルしたプログラムと WinXPは相性が悪いみたいなので、

これはDelphiのせいじゃないと思うぞ。
コンパイラを疑うより、自分のプログラムを疑えっていうのは言語にかかわらずFAQ。
435デフォルトの名無しさん:2005/11/26(土) 22:33:30
> 当方のDel 6 Per でコンパイルしたプログラムと WinXPは相性が悪いみたいなので
> -> コンパイラを変えたら直る?

典型的な厨房発想。言語、IDE、結果として出来るEXE、なんにも知らないらしい。
436デフォルトの名無しさん:2005/11/27(日) 00:42:26
>>434
これでも一応趣味グラマの端くれですから、自分のプログラムを疑うというのは当然のことというのは理解しているつもりです。
自分で作った以外のDelphi 製プログラムでも強制終了がかかる時があります。
現物を出せと言われたら困りますが、OpenJaneのソースを拾ってきて自分のところでコンパイルしてもエラーが出ることもあります。
(いつもいつもじゃないのでやっかいなんですが)

コンパイラを置き換えることが不可能に近くて、あんまり意味がないのは分かりました。
ありがとうございました。

>>435
レスしてもらっておいて悪いですけど、ちゃんと読んでください。
"自作ソフト以外でも起こるから" って書いたでしょ?
437デフォルトの名無しさん:2005/11/27(日) 00:46:36
D6 Personal+MSXMLでXMLを操作する方法をご教授願えませんか?
COM使えってどこかに書いてあったけど、どうやって使えばいいのか
分からないっす><
438デフォルトの名無しさん:2005/11/27(日) 01:48:38
>>436
> OpenJaneのソースを拾ってきて自分のところでコンパイルしてもエラーが出ることもあります。

こんな物があるから使ってみほ。
http://onigiri.s3.xrea.com:8080/delphi/index.php?cmd=read&page=FastMM
439デフォルトの名無しさん:2005/11/27(日) 02:09:29
delphi→Javaの勉強順番ってどう思います?
delphiは初心者用らしいので、ゆっくりプログラムを覚えるために
Javaは将来食うためです

最初にdelphi覚えたいって言ったら叩かれる事なんか多い
440デフォルトの名無しさん:2005/11/27(日) 02:11:00
441デフォルトの名無しさん:2005/11/27(日) 06:31:46
>>436
なんだか、実行時のエラーの事を言ってるみたい。
442デフォルトの名無しさん:2005/11/27(日) 07:51:57
単にメモリが不良だったりして(w
443デフォルトの名無しさん:2005/11/27(日) 07:55:02
TFileFormatsListにアクセスしたいんですけど、良い方法はないでしょうか?
TPictureで登録されてるフォーマットを拡張子から探したいのです。
444デフォルトの名無しさん:2005/11/27(日) 08:18:06
>>436
Delphi6をアンインストールして別のフォルダで再インストールして、さらに
一度、フォルダーの dcuとか再構成可能なファイル全部消してみたら?
del /S *.dcu
del /S *.~*
del /S *.dsk
del /S *.dsm
del /S *.tds
445デフォルトの名無しさん:2005/11/27(日) 08:39:23
>>436
おまえのパソのハードかOSが不良なだけじゃねw
446sage:2005/11/28(月) 13:35:15
>>436
こういった場合、往々にしてOSの不具合、または、他のアプリとの関係による
場合が多いと思います。
できるのでしたら、一旦OSを入れ直し、まず初めにD6をインストールして
試されたら良いかと思います。
無理なようでしたら、別のPCで試したり、VMWAREで試したり、色々やってみて、
問題となっているPC+OSとの差を調べるのが良いかと思います。
447デフォルトの名無しさん:2005/11/28(月) 15:45:55
>>436
漏れはDelphi6Personalで作ったコードをWindowsXPでコンパイルしてるけど
出来上がったプログラムがXP上で問題を起こしたことは無いな。
ついでに言うと、Windows9xでの動作も問題ない。
というか、最初は問題出まくりだったんだが、コードを弄りまくったおかげで
Windows9xとXPでの互換性はバッチシだす。

で、そのプログラムを自分のHPで公開してるんだが、つい最近になってWindows2000で
実行すると妙な挙動をするのが判明した。
ホント 互換性は地獄だぜ! フゥハハハーハァーorz
448デフォルトの名無しさん:2005/11/28(月) 16:55:07
if リターンキーを押したら then

をDelphi語に訳すとどうなりますか?
449デフォルトの名無しさん:2005/11/28(月) 17:02:27
リターンキーが押されたことを検知するのは何処なんだ
TEdit?TListBox?TForm?
450デフォルトの名無しさん:2005/11/28(月) 17:02:45
if key = #13 then
451デフォルトの名無しさん:2005/11/28(月) 17:05:04
VK_RETURNを使おうぜ
452デフォルトの名無しさん:2005/11/28(月) 17:11:11
教え方のへたくそな奴らだな。
ちょっとはGotDotNetを見習ったらどうだ。
453デフォルトの名無しさん:2005/11/28(月) 17:42:19
>>452
何も教えない無知の貴方よりよっぽどマシです
454デフォルトの名無しさん:2005/11/28(月) 17:46:57
説明不足スイマセン。検知するのはTFormです
455デフォルトの名無しさん:2005/11/28(月) 17:52:50
自分で作ったフォームを表示させて、
リターンキーを押したら閉じるというのをやろうとしてました

OnKeyDownのところに
if Key = VK_RETURN then close;
て書いたらできました
ありがとうございました
456デフォルトの名無しさん:2005/11/28(月) 17:54:28
procedure TForm1.onKeyPress(Sender: TObject; var Key: Char);
begin
if Key = Chr(VK_RETURN) then
 begin
  なんたらかんたら〜
end;
end;
457デフォルトの名無しさん:2005/11/28(月) 22:30:12
数字を入力してその数だけ円を右にずらしながら表示する(for文を使用)という
プログラムをつくっているのですが、全ての円がいっぺんに表示されて
しまいます。
0.5秒にひとつ、といったように表示するのはどうすればよいのでしょうか。
458デフォルトの名無しさん :2005/11/28(月) 22:34:44
関数でTry〜Exceptでエラーを抜ける際、
自分自身の関数名を返したいと思っています。
関数がたくさんあるので、全関数抜けるコーディングを同じにしたいのですが、
自分自身の関数名を取得する方法はあるのでしょうか?
459デフォルトの名無しさん:2005/11/28(月) 22:50:52
2ちゃん発の新しいチャットソフト作ろうぜ
http://pc8.2ch.net/test/read.cgi/friend/1107658167/

ツワモノ求む
460デフォルトの名無しさん:2005/11/28(月) 22:51:08
>>457
前の円を消す
移動した円を表示
sleep(500);
461デフォルトの名無しさん:2005/11/28(月) 22:53:44
あぁ前のは消さなくてもいいのか
462デフォルトの名無しさん:2005/11/28(月) 22:56:46
Sleepだとアプリが固まってしまうだろ
この手の場合、TTheadかTTimerを使うべき
463デフォルトの名無しさん:2005/11/29(火) 01:21:15
>>458
適当な値を抜けるコードに引数として渡したらどうだろう
464デフォルトの名無しさん:2005/11/29(火) 03:38:58
例えば

procedure hoge1(a: THoge); overload;

procedure hoge1(a: THoge2); overload;

があった場合、hoge1(nil) で呼び出したら(THoge, THoge2ともTObjectから継承ね)
どっちが呼び出されるか決まってる?
465デフォルトの名無しさん:2005/11/29(火) 05:38:53
後で定義したほうが呼ばれるようだがアホっぽい挙動だな。
あいまいな〜でエラーとしてハネとけよ。
466デフォルトの名無しさん:2005/11/29(火) 07:32:31
別々のユニットに同名の関数があって両方usesした場合も、
何も言わずに後にusesしたほうを使うからな。
467デフォルトの名無しさん:2005/11/29(火) 07:47:01
全然全くこれっぽっちも関係のない話だな
468デフォルトの名無しさん:2005/11/29(火) 08:08:09
>>458
こんなんどうでしょう

function hoge1; Integer; begin
 try
  なんとかかんとか
 except
  raise Exception.Create('hoge1');
 end
end;

function hoge2; Integer begin
 try
  なんとかかんとか
 except
  raise Exception.Create('hoge2');
 end
end;

procedure Main;
begin
 try
  hoge1;
  hoge2;
 except
  on E: Exception do begin
   ShowMessage(E.Message);
   exit;
  end;
 end;
end;
469デフォルトの名無しさん:2005/11/29(火) 08:24:27
>>465-466
まともな言語ならエラーにしますよねーww
さすがですねDelphiってw
470デフォルトの名無しさん:2005/11/29(火) 08:34:00
BCBならエラーが出るお( ^ω^)
471デフォルトの名無しさん:2005/11/29(火) 09:40:44
Delphi7でもあいまい〜でエラーでるお
472デフォルトの名無しさん:2005/11/29(火) 11:01:39
処理を何秒か止めたいんですがどうすればいいんでしょうか

Edit1.Text = '';
(ここで10秒くらい待つ命令を書く)
Edit1.Text = '1';

みたいにしたいんですが。
473デフォルトの名無しさん:2005/11/29(火) 11:07:14
Sleep(10000);
474472:2005/11/29(火) 11:07:26
すんません、自己解決しました
sleep()ですね。おさわがせしました。
475472:2005/11/29(火) 11:08:52
ああ〜473さん、ありがとうございます。
ホント申し訳ない。許してください。
476デフォルトの名無しさん:2005/11/29(火) 11:10:55
>>474-475
カワイイな。やらないか?
477472:2005/11/29(火) 11:22:09
>>476
切れ痔なんでごめんなさい、勘弁してください
478デフォルトの名無しさん:2005/11/29(火) 11:37:39
>>469
なんだpersonalの貧乏人かよ。
479デフォルトの名無しさん:2005/11/29(火) 11:40:18
Personalってそんな所も削られてんのか
まあタダだからしょうがないけど>>469は恥ずかしいなw
480デフォルトの名無しさん:2005/11/29(火) 12:29:24
>>472
その10秒の間にウィンドウ動かしたりアプリを終了させることができないから
Sleepはあまりいいやり方とはいえない。
Timerコンポーネント使っとけ。
481デフォルトの名無しさん:2005/11/29(火) 14:47:37
>>480
それだったらその10秒待たなきゃ行けない処理全体を別スレッドでやったほうが‥
482デフォルトの名無しさん:2005/11/29(火) 17:43:46
別スレッドでビジーループか?
CPU無駄使いするぐらいならタイマー使っとけ
483デフォルトの名無しさん:2005/11/29(火) 18:29:48
>>462
回答ありがとうございました。TTheadとTTimerについて、調べてみますね。
484デフォルトの名無しさん:2005/11/29(火) 19:07:27
っつーか何で待ちたいのか、の目的によってもやり方変わるでしょん。
485デフォルトの名無しさん:2005/11/29(火) 19:29:40
> 別スレッドでビジーループか?

ワーカスレッドなら安心して Sleep() 使えるからビジーループにならない
486デフォルトの名無しさん:2005/11/29(火) 19:32:45
何でスレッドネタ振るやつってアホばっかりなの?
487デフォルトの名無しさん:2005/11/29(火) 19:53:54
ここがくだすれだから
488デフォルトの名無しさん:2005/11/29(火) 21:54:31
DLLからoverloadした関数を呼びたいのですが、引数にかかわらずexportsで
最初に指定した関数が自動的に呼ばれてしまいます。
delphi5なんですが、どういった原因が考えられますでしょうか?
489デフォルトの名無しさん:2005/11/29(火) 23:44:38
別々にコンパイルしたもので、overload していることをなぜ exe 側が知ることが出来ると期待しますか?
490デフォルトの名無しさん:2005/11/30(水) 00:52:16
無知だからです
491デフォルトの名無しさん:2005/11/30(水) 01:42:11
TShellTreeViewでCD-ROMドライブを選んで、
TShellTreeView.Pathでフォルダパスを取得しようとしたんだが、
階層が深くなるとちゃんと取得できん!
そうゆうもん?
おしえてエロい人。
492デフォルトの名無しさん:2005/11/30(水) 02:00:25
知ってるがエロくないからなぁ・・・
493デフォルトの名無しさん:2005/11/30(水) 02:52:54
エロいが知らないからなぁ・・・
494デフォルトの名無しさん:2005/11/30(水) 03:15:55
エロくない上に知らないからなぁ・・・
495デフォルトの名無しさん:2005/11/30(水) 06:56:27
>>488
別名の関数も用意したら?

>>491
IShellFolder::GetDisplayNameOf で取得してるのだけど  
フルパスはMAX_PATHで260バイトとかに制限されている
496デフォルトの名無しさん:2005/11/30(水) 08:46:56
>>472

//指定時間待関数
procedure pWaitMiliSec(lwMiliSec: Longword);
{
lwMiliSec: 待ち時間(単位:ミリ秒)
}
var
StartTime, WaitTime: TDateTime;
begin
WaitTime := lwMiliSec/1000/24/60/60;
StartTime := Now;
while True do begin
Application.ProcessMessages;
if StartTime + WaitTime < Now then Break;
end;
end;

497デフォルトの名無しさん:2005/11/30(水) 09:51:42
別に無理して珍回答をひねり出す必要はありませんから
498デフォルトの名無しさん:2005/11/30(水) 13:32:45
>>497
どれに対するレス?
499デフォルトの名無しさん:2005/11/30(水) 13:47:53
自分に対してだろ。独り言。レスするだけ損。
500デフォルトの名無しさん:2005/11/30(水) 13:59:51
人生、損得だけじゃないのさ
501デフォルトの名無しさん:2005/11/30(水) 14:27:10
>>469
・無駄にビジーウェイト
・ウェイト中にフォームを閉じられない
という2点で没だな。
502デフォルトの名無しさん:2005/11/30(水) 14:37:13
まあ確かに>>469は没だと思うけどさ
503デフォルトの名無しさん:2005/11/30(水) 15:23:03
でも質問に一番的確な答えはSleepだぞ
フォーム閉じたいなら、すでに出てるけど詳しい解説ここ
ttp://gumina.sakura.ne.jp/CREATION/OLD/COLUMN/CD1MATI.htm
504デフォルトの名無しさん:2005/11/30(水) 15:39:35
回答者の添削コーナーじゃないんだから粗悪なコード貼らずに
最初に張ればいいのに
505デフォルトの名無しさん:2005/11/30(水) 15:53:13
>>504
とりあえず誰に言ってるのかハッキリしような
506デフォルトの名無しさん:2005/11/30(水) 16:04:44
何をどう勘違いしたら超初心者スレで472のコードごときに
超基本のTTimerを勧めるべきじゃないなんて考えちゃったんだろう
507デフォルトの名無しさん:2005/11/30(水) 16:09:40
TTimerは472が求めているものではない
設計が悪いのでそれを変更すべきかもしれないが
質問の答えとしては適当でない
508デフォルトの名無しさん:2005/11/30(水) 19:18:22
解決したと本人が言ってるんだからそれでいいだろ
509デフォルトの名無しさん:2005/11/30(水) 19:52:05
> 解決したと本人が言ってる

何番?
510デフォルトの名無しさん:2005/11/30(水) 19:57:50
timerでもsleepでも出来ればどっち使ってもいいだろうがアホかお前等
511デフォルトの名無しさん:2005/11/30(水) 20:14:58
>509
>508
512デフォルトの名無しさん:2005/11/30(水) 20:44:22
本人が納得しても質問が解決してなければスレの財産にならない
513デフォルトの名無しさん:2005/11/30(水) 21:15:15
麌がましいこと言ってんじゃねぃ
514デフォルトの名無しさん:2005/11/30(水) 23:05:43
本人があれだから、あれなんだな。まったくあれじゃどうしようないな、あれ。
515デフォルトの名無しさん:2005/12/01(木) 00:01:29
くだすれで財産とか言ってんじゃね
過去ログ見るようなやつばかりならそもそもこんなスレなくていい
516デフォルトの名無しさん:2005/12/01(木) 00:05:01
10秒間固まるのが嫌なら適当に

t := GetTickCount;
while (Now-t)<10000 do
begin
Sleep(16);
Application.ProcessMessages;
end;

こんなかんじでいいんじゃね?
517デフォルトの名無しさん:2005/12/01(木) 00:05:33
すまん、Nowはちげぇな
518デフォルトの名無しさん:2005/12/01(木) 01:16:38
>>516
(;゚Д゚)・・・
519デフォルトの名無しさん:2005/12/01(木) 06:50:01
固まらないけど、再起動されてしまうので、他の機能を殺したくて

t := GetTickCount;
Enabled:=false;
try
while (GetTickCount-t)<10000 do // GetTickCount-tは片方がオーバーフローしてラップアラウンドして来ても 大丈夫
begin
 Sleep(33);
  Application.ProcessMessages;
end;
finally Enabled:=true end;

としたら、やっぱり固まるのと変わらなかったと
520デフォルトの名無しさん:2005/12/01(木) 07:43:57
こんな話題で盛り上がっていいのは前世紀までだろ
521デフォルトの名無しさん:2005/12/01(木) 13:11:17
なあに、かえって免疫がつく。
522デフォルトの名無しさん:2005/12/01(木) 15:45:12
質問です。string 変数に代入した文字列って連続してるのでしょうか。
実験すると連続っぽいのですが、どなたかご存知でしたら教えてください。
(ポインタで参照したいと思ってますので)
523デフォルトの名無しさん:2005/12/01(木) 15:46:45
>(ポインタで参照したいと思ってますので)
PCharでキャストすりゃぁいいじゃん
524デフォルトの名無しさん:2005/12/01(木) 15:50:03
もちろん連続してる
525デフォルトの名無しさん:2005/12/01(木) 15:54:20
うわっ 回答早杉ありがとです。
>>523 はい、そうしますです。
>>524 安心しました。どっかで違う場所にリンクしてる、何てしてないかと
心配だったので。
526デフォルトの名無しさん:2005/12/01(木) 16:06:24
またまたカワイイのが現れたな
やらないか
527デフォルトの名無しさん:2005/12/01(木) 21:09:30
String型のstrに'Button1'と入っていて
フォームにButton1というTButtonのコンポーネントが張ってあったとして
ソースに直接Button1と書かずにstrを使ってButton1を操作する方法ないですか?
528デフォルトの名無しさん:2005/12/01(木) 21:11:53
tbutton(findcomponent(str)).unko
529デフォルトの名無しさん:2005/12/01(木) 21:13:07
>>528
どうもありがとうございます
530デフォルトの名無しさん:2005/12/02(金) 14:57:18
Windowをフラッシュしたり出来ますか?
531デフォルトの名無しさん:2005/12/02(金) 15:03:19
FlashWindowAPIでどうよ
532デフォルトの名無しさん:2005/12/02(金) 16:38:47
midiを再生したいのですが、半角スペースがあると再生できません。

mciSendString('play "C:\test A\test.mid"',nil,0,0);
"で括ってるのに、これじゃダメなんでしょうか?

mciSendString('play "C:\testA\test.mid"',nil,0,0);
だと再生できます。
533デフォルトの名無しさん:2005/12/02(金) 16:39:55
ファイル名を8.3のショート形式に変換して渡してやるとか
534デフォルトの名無しさん:2005/12/02(金) 16:43:48
535532:2005/12/02(金) 17:18:30
素早いレス有難うございます。
>>533
ExtractShortPathNameを使っても、C:\test~1\test.midとしてもダメでした。(TT)
>>534
リンク先の記事を見たんですが、やっぱりフルパスを"で括るんですよね??
だと、532の内容で再生できると思ったのですが。
536デフォルトの名無しさん:2005/12/02(金) 17:55:46
mciSendString('play ' + "C:\test A\test.mid",nil,0,0);
537532:2005/12/02(金) 18:15:03
解決しました!
openしてからaliasをplayに渡してやったら鳴りました!!
直playは半角スペースが無い時のみ有効なのでしょうか。
だったら最初から鳴らせないようにして欲しいヨ。・゚・(ノД`)・゚・。

//--ソース--
name:='C:\test A\test.mid';
mciSendString(Pchar('open "'+ Name +'" type sequencer alias midifile'),nil,0,0);
mciSendString(Pchar('play midifile'),nil,0,0);
538デフォルトの名無しさん:2005/12/02(金) 21:30:18
参照のリストにMicrosoft VBScript Regular Expressions 5.5が表示されないんですが・・・・。
539デフォルトの名無しさん:2005/12/02(金) 22:13:55
WSH最新版入ってるか?
540デフォルトの名無しさん:2005/12/02(金) 23:19:48
>>539
5.6なら二回ほど入れました
541デフォルトの名無しさん:2005/12/03(土) 00:48:46
542デフォルトの名無しさん:2005/12/03(土) 12:20:44
>>541
ありがとう
使ってみますね
543デフォルトの名無しさん:2005/12/03(土) 21:43:54
Delphiでトリップ検索ソフトつくりたいのですが、
画面にエディットボックス1個とボタンが1個だけあって
ボタンを押すとトリップが表示されるような簡単なやつを
とりあえず作ってみたいのですが、どっかにいいサイトとか
ないでしょうか?

それを見てあとは勉強しながら進めていきたいので。
544デフォルトの名無しさん:2005/12/03(土) 21:49:11
545デフォルトの名無しさん:2005/12/03(土) 21:52:12
>>544
それが俺があほだからかもしらんけど、
Delphiとcrypt3ではよくわからんのしかでてこないのよね。
546デフォルトの名無しさん:2005/12/03(土) 21:52:45
ここはsageてるのか。。。
すんません。
547デフォルトの名無しさん:2005/12/03(土) 22:08:29
同じソースコードをDel6PerとDel6Proでコンパイルした場合、何か違いは出てくるのでしょうか?
548デフォルトの名無しさん:2005/12/03(土) 23:25:02
>>543
http://www.geocities.com/tk2001b/utripper/
ここでトリップ検索ソフトのソース公開しているから、
これを読んでPascalに翻訳するのが簡単かと。

>>547
バイナリを比較すると微妙に違う。
動作やパフォーマンスは変わらないはず。
549デフォルトの名無しさん:2005/12/03(土) 23:48:19
>>548
ありがとです。
ソース公開してくれてるのは勉強になるなぁ。

で、中身みたけどわけわからねーorz
トリップの部分だけでいいのに、いっぱいあって混乱中。
550547:2005/12/03(土) 23:53:50
>>548
なるほど。ありがとうございます。

>>549
探すと、PerlやPHPのサンプルコードが結構あったりします。
http://www.google.co.jp/search?hl=ja&q=2ch+%E3%83%88%E3%83%AA%E3%83%83%E3%83%97+%E7%AE%97%E5%87%BA&lr=
551デフォルトの名無しさん:2005/12/04(日) 00:08:37
>>550
たびたびありがとうございます。

そこに面白いページがあったので参考にしたいと思います。
552デフォルトの名無しさん:2005/12/04(日) 00:13:20
janeのソースの中にあったような
553デフォルトの名無しさん:2005/12/04(日) 07:06:50
 TEdit に全角文字を入力させないために以下のようにコーディングしたのですが
(効果を確認するためにIMEをオンにする)エンターキーを押した瞬間に Edit1.Text
に変換された文字が残り警告が何度も出てしまいます。これを避けるにはどうした
らいいのでしょう?

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
 C: Char;
begin
 C := Edit1.Text[1];
 if Key in [#$81..#$9F, #$E0..#$FC] then //全角文字の処理
 begin
  MessageDlg('全角文字は入力できません',mterror, [mbok], 0);
  Edit1.Text := ''+C;
 end;
end;
554デフォルトの名無しさん:2005/12/04(日) 07:31:03
意味がよくわからんけど
最後にedit1.text := ''+c;するからいつまでも入力されたkeyが残るんじゃないの?

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in [#$81..#$9F, #$E0..#$FC] then //全角文字の処理
MessageDlg('全角文字は入力できません',mterror, [mbok], 0)
else edit1.text := edit1.text + key;
end;
こんな感じでどう?
555デフォルトの名無しさん:2005/12/04(日) 07:35:27
ImeModeをimDisableにするんじゃ駄目なのか
556デフォルトの名無しさん:2005/12/04(日) 07:37:43
ごめんelseの処理間違えてるな
557デフォルトの名無しさん:2005/12/04(日) 07:50:12
どっち道それじゃコピペを防げないし。
そこであまりがんばらずにOKボタン押したときに入力のチェックをして
2バイト文字が入ってたらエラー出してFocusをEdit1に移すとか
OnChangeでチェックしてOKボタンを無効にして押せないようにするのが定石。
558デフォルトの名無しさん:2005/12/04(日) 15:00:36
delphiでユーザーから与えられた時系列データ(気温や湿度等)を元に以下の機能を提供するソフトを作りたい

・与えられた時系列データからグラフを描画。
・与えられた時系列データから出来たグラフの線の長さを表示する。

開発環境delphi6

どなたかご教示お願いします・・・!
559デフォルトの名無しさん:2005/12/04(日) 16:19:47
>>558
自分で描画すればいいじゃん
560デフォルトの名無しさん:2005/12/04(日) 18:18:16
stringgridのセルに文字列を表示させるために以下のように書いたんですが・・・

procedure TForm1.FormCreate(Sender: TObject);
begin
with stringgrid1 do
begin
cells[1,0]:='X座標';
cells[2,0]:='Y座標';
cells[0,1]:='始点';
cells[0,2]:='終点';
end;
end;

何にもエラーはでませんが実行してもセル内に文字が表示されません(当然ながらstringgrid自体は表示されてます)
文字を表示するために何か追加しないといけないことがあれば教えてください。
561デフォルトの名無しさん:2005/12/04(日) 20:58:19
全角文字はこんな感じで防げるか?
uses
Clipbrd;

var
OldEditProc: TWndMethod;
MultiByte: Boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
OldEditProc := Edit1.WindowProc;
Edit1.WindowProc := EditProc;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if MultiByte then
begin
Key := #0;
MultiByte := False;
end
else
begin
if WORD(Key) >= $80 then
begin
Key := #0;
MultiByte := True;
end;
end;
end;
562デフォルトの名無しさん:2005/12/04(日) 20:58:43
procedure TForm1.EditProc(var Message: TMessage);
var
i: integer;
s: string;
begin
if Message.Msg = WM_PASTE then
begin
if Clipboard.HasFormat(CF_TEXT) then
begin
s := Clipboard.AsText;
for i := 1 to Length(s) do
if WORD(s[i]) >= $80 then
Exit;
end;
end;
OldEditProc(Message);
end;
563560:2005/12/05(月) 00:51:41
ttp://vista.x0.com/img/vi13522.zip
ttp://vista.x0.com/img/vi13523.zip

↑この2つはどちらもStringgridのみのプログラムで内容も同じなんですが、片方はセル内に文字が表示されて(23のほう)片方は表示されてません(22のほう)。
この2つの差がわかれば表示されない原因もわかると思うんですが・・・どうやら解凍すると勝手に圧縮前にはなかったファイルが生成されるようで(22のほうだけ)そこもよくわかりませんが・・・
564デフォルトの名無しさん:2005/12/05(月) 01:22:48
>>558
>・与えられた時系列データから出来たグラフの線の長さを表示する。
というのがよくわからないけど、
Del6PerならばSGraphというコンポーネントを使ってみてはどうだろう。
ttp://pod0.chat.ru/prg_staf.htm
565デフォルトの名無しさん:2005/12/05(月) 01:27:43
『3×3型の二つの行列A=[aij],B=[bij]を読み込み、積ABとBAを
求めるプログラムを作成せよ。また一般的にはABとBAが等しくならない
ことを確認せよ。』ですがどなたか教えてくれませんか?お願いします。
566デフォルトの名無しさん:2005/12/05(月) 01:33:02
宿題は自分でやって下さいよ
567560:2005/12/05(月) 03:13:43
procedure TForm1.FormCreate(Sender: TObject);
begin
stringgrid1.cells[1,0]:='X座標';
stringgrid1.cells[2,0]:='Y座標';
stringgrid1.cells[0,1]:='始点';
stringgrid1.cells[0,2]:='終点';
end;

あれこれ調べましたけど、こうやってかくだけで本来は文字表示されるはずですよね
いったい何が原因なんだろう・・・
568デフォルトの名無しさん:2005/12/05(月) 03:23:32
>>567
最小限のプロジェクト作って少しづつ足していくとか、
逆にプロジェクトごとコピーして少しづつ削っていくとかして確認。
569568:2005/12/05(月) 03:25:04
と、その前に Cells に代入後、参照してみたら値はちゃんと入ってる?
570デフォルトの名無しさん:2005/12/05(月) 03:28:43
ttp://vista.x0.com/img/vi13531.zip

これでstringgrid単体の最小のものだと思うんですけど、何も表示されないんですよね
インスペクタをいじっても特に変化はないようで
571デフォルトの名無しさん:2005/12/05(月) 05:31:47
>>570
オブジェクトインスペクタのForm1.OnCreateを確認してください。
572デフォルトの名無しさん:2005/12/05(月) 05:40:37
>>571
で、出来ました・・・物凄く初歩的でしたね(汗
ありがとうございます
573デフォルトの名無しさん:2005/12/05(月) 08:06:12
>>565
二次元配列と、行列の基本的演算で試合終了じゃないか?
574デフォルトの名無しさん:2005/12/05(月) 14:03:09
TMemoのKeyDownでCtrl+Eとかに
独自のキー操作を拵えたいのですが、
Ctrl+Vのような既に用意されている以外のキー操作では
ポンというビープ音が鳴ってしまいます
この音を抑制するにはどうすれば良いのですか?
575デフォルトの名無しさん:2005/12/05(月) 15:29:05
TPopupMenuか、TAction でコマンドつくって
それの ShortcutKey に Ctrl+V を割り当て。
576デフォルトの名無しさん:2005/12/05(月) 15:43:51
Key := 0じゃだめなん?
577デフォルトの名無しさん:2005/12/05(月) 17:09:41
#0
578デフォルトの名無しさん:2005/12/05(月) 17:14:27
ああ、本当だ
KeyPressに#0したらポンが消えました
ありがとうございました
579デフォルトの名無しさん:2005/12/05(月) 17:44:16
>>578
ww
580ななしへたぐらま ◆XcB18Bks.Y :2005/12/06(火) 21:10:10
実行時にポップアップメニューを生成しているのですが,
メニューアイテムのショートカットキーが働きません.
働くようにするにはどうすればよいでしょうか.
581デフォルトの名無しさん:2005/12/06(火) 21:26:55
晒しなさい。
582デフォルトの名無しさん:2005/12/06(火) 22:16:39
質問する側は情報を出し惜しみするなといつも言っているではないですか。
出せる情報を全て出すことが早期解決への近道です。
583デフォルトの名無しさん:2005/12/06(火) 22:20:18
全バージョンのどんなコードでも再現するんだよバカ
試してから言えよ糞が
584デフォルトの名無しさん:2005/12/07(水) 00:00:16
Delphiでポインタを表示させるにはどうすればよいでしょうか?
ShowMessageとIntToStrで表示できないか試してみたけどダメでした
585デフォルトの名無しさん:2005/12/07(水) 00:04:02
ShowMessage(Format('Pointer=%p', [p]);
586デフォルトの名無しさん:2005/12/07(水) 01:33:13
>>583
m9(^Д^)プギャー
587デフォルトの名無しさん:2005/12/07(水) 01:42:06
>>585
ありがとうございます
うまく表示されました
588デフォルトの名無しさん:2005/12/07(水) 09:03:51
>>580
function ShortCut(Key: Word; Shift: TShiftState): TShortCut;
??
589デフォルトの名無しさん:2005/12/07(水) 13:05:11
>>580
         ∧ ∧
       ヽ(・∀ ・)ノ <ソース出しなよー!
       (( ノ(  )ヽ ))
         <  >
590デフォルトの名無しさん:2005/12/07(水) 21:02:20
フォームにフレームを貼り、エラーが出たときに
フォームにあるラベルにエラーメッセージを表示しようとしています。

フレーム側で、エラーが発生したときに
[TClass型変数].ClassParent;
をループし、フォームを探し出す処理を入れました。

通常のフレームだとこれで表示されるのですが、
フレームの中にフレームを貼った場合、親フレームでクラスのループが終わってしまい、
そのまた親のフォームを探し出すところまで進みません。
フレームだったときにそのまた親にループを進めるにはどうしたらいいでしょうか。
591デフォルトの名無しさん:2005/12/07(水) 21:12:39
>>590
GetParentForm
ValidParentForm
592デフォルトの名無しさん:2005/12/08(木) 03:02:53
例えば1,2,3などの数字の中から3桁の組み合わせを表示するソフト
例 123 132 213 231 312 321
ってどういう感じで作れば良い?教えて
593デフォルトの名無しさん:2005/12/08(木) 03:08:29
label
randomize
random()
594デフォルトの名無しさん:2005/12/08(木) 03:10:43
inttostr()

labelがイヤならShowMessage( )
595592:2005/12/08(木) 03:24:38
ありがたまきん。コンポネントはわかったけど肝心の数式がわからんぽ
596デフォルトの名無しさん:2005/12/08(木) 03:25:10
>>592
n個の場合
1個目の数字を選ぶ
選ばれていない数字の中から2個目を選ぶ
選ばれていない数字の中から3米を選ぶ



選ばれていない数字の中からn-1個目を選ぶ
n個目はガチ
表示する


選ばれたかどうかのフラグは配列で持つ
もっと速い方法もあるけど簡単なのはコレ
597592:2005/12/08(木) 03:26:41
なるほど!イメージつきました!サンキュウ!
598デフォルトの名無しさん:2005/12/08(木) 15:55:58
初心者ゆえか、さっぱりわかんなくなってきたので質問させてください。
環境:Delphi 6 Personal
unit1とunit2の2つのフォームを用います。
unit1には、Doubleの配列形式(3列500行)のデータがあります。
Unit1側のButton1ClickでUnit2のImage1にそれをグラフ化させようと考えてなんとかUnit2の呼び出しまでは完成しました。
ですが、ポインタが上手く渡せてないみたいで悩んでしまいました。

---[unit1]----
use unit2;
public //大域変数です。
gyouretu : Array [ 1..3,1..500] of Double;

procedure TTrance.Button1Click(Sender: TObject);
begin
 form2:=Tform2.create(@gyouretu);
 form2.show;
end;
---[unit2]----
use unit1;
procedure TForm2.FormCreate(var gyouretu : Array of Double);
var
  s: String;
begin
 s:=floatTostr(gyouretu[2,2]);
 Label1.Caption:=s;
end;
------------
[エラー] 配列型が必要です。

とりあえず、unit2に数値を一個でも表示させようとしています。
教えてください・・・m(_ _)m
599デフォルトの名無しさん:2005/12/08(木) 16:07:36
ヘルプで [オープン配列パラメータ] の説明を読みなされ.
600デフォルトの名無しさん:2005/12/08(木) 16:15:48
無理に引数で渡さなくてもいいんじゃないの
unit unit3
interface
gyouretu : Array [ 1..3,1..500] of Double;
implementation
end.

としてuses unit3;とすれば
gyouretuを両方のフォームからアクセスできる。
601デフォルトの名無しさん:2005/12/08(木) 16:31:23
引数で渡したい場合は
type tgyouretu = array[1..3,1..500]of double;
procedure foo(var g: tgyouretu);
602デフォルトの名無しさん:2005/12/08(木) 17:15:39
>>598
TDoubleArray = Array [ 1..3,1..500] of Double;
TpDoubleArray = ^TDoubleArray;
THoge = class(TObject)
constructor Create; virtual;
destructor Destroy; override;
private
gyouretu : TDoubleArray;
function getHoge : TpDoubleArray;
public
property Hoge : TpDoubleArray read getHoge;
end;

603602:2005/12/08(木) 17:17:45
つづき
constructor THoge.Create;
begin
inherited;
gyouretu[2,2] := 100;
end;
begin
whith THoge.Create do
try
ShowMessage(
Format('%f', [FHoge.Hoge[2,2]])
);
finally
free;
end;end;
604デフォルトの名無しさん:2005/12/08(木) 17:18:13
Delphiの記述における慣習を無視した素晴しいコードですね
605602:2005/12/08(木) 17:19:59
つづき
function THoge.getHoge: TpDoubleArray;
begin
Result := @gyouretu;
end;

606602:2005/12/08(木) 17:22:24
>>604
Del記述ならどう書くか教えろ
607デフォルトの名無しさん:2005/12/08(木) 17:28:12
ポインタ渡すならpublicにするかアクセス用のプロパティにするな。
つうかvarで十分なんだろ。
608602:2005/12/08(木) 17:33:23
>>607
varで十分ならなんでもどんな型でもvarやconst渡しで十分だろ
プロパティも内部はprocedureだろ
なぜプロパティ化していけないのか?
おしえろ
609デフォルトの名無しさん:2005/12/08(木) 17:37:27
varとかproperty以前の問題だな

THoge = class(TObject)
constructor Create; virtual;
destructor Destroy; override;
private
public
end;

とりあえずオレの環境ではコレではコンパイルすら出来ないわけだが
610602:2005/12/08(木) 17:40:27
>>609
なぜコンパイルできない?
こっちはDel7で動いているが...
おしえれ
611デフォルトの名無しさん:2005/12/08(木) 17:44:34
609は普通に釣りだろ
少し落ち着け
612602:2005/12/08(木) 17:47:00
>>611
そうか dくす
613デフォルトの名無しさん:2005/12/08(木) 17:48:28
602は半年ROMっとけ
614598:2005/12/08(木) 18:12:04
つたないコードのために知恵をありがとうございました。
上記のコードを元にいろいろ弄ってみます。

609はどうみても釣りです。
ありがとうござ(ry
615デフォルトの名無しさん:2005/12/08(木) 18:57:18
あえて言うなら、
>TpDoubleArray = ^TDoubleArray;

PDoubleArray = ^TDoubleArray;
にしようぜってくらいか
616ななしへたぐらま ◆XcB18Bks.Y :2005/12/08(木) 20:41:17
>>581-582
すいません,一日休みになってしまいましたが,一部晒します.その1.

procedure TPM01Form.AddMenuItem(aShortCut: TShortCut;
 const aCaption: TCaption; ClickEvent: TNotifyEvent);
var
 NewItem: TMenuItem;
begin
 NewItem := TMenuItem.Create(self);
 try
  NewItem.ShortCut := aShortCut;
  NewItem.Caption := aCaption;
  NewItem.OnClick := ClickEvent;
  FPopupMenu.Items.Add(NewItem);
 except
  NewItem.Free;
 end;
end;

procedure TPM01Form.Build_FPopupMenu;
begin
 AddMenuItem(ShortCut(ord('V'), [ssCtrl]), '貼り付け', Menu_Paste);
 AddMenuItem(ShortCut(VK_DELETE, [ssCtrl, ssShift]), '全削除', Menu_DeleteAll);
end;

constructor TPM01Form.Create(AOwner: TComponent);
begin
 inherited;
 FPopupMenu := TPopupMenu.Create(self);
 Build_FPopupMenu;
end;
(つづく)
617ななしへたぐらま ◆XcB18Bks.Y :2005/12/08(木) 20:44:32
(その2(完))
procedure TPM01Form.Menu_DeleteAll(Sender: TObject);
begin
 ListBox1.Items.Clear;
end;

procedure TPM01Form.Menu_Paste(Sender: TObject);
var
 LinesToAdd: TStringList;
begin
 LinesToAdd := TStringList.Create;
 try
  LinesToAdd.Text := Clipboard.AsText;
  ListBox1.Items.AddStrings(LinesToAdd);
 finally
  LinesToAdd.Free;
 end;
end;

procedure TPM01Form.Action_ExitExecute(Sender: TObject);
begin
Close;
end;

procedure TPM01Form.Action_PopupExecute(Sender: TObject);
begin
FPopupMenu.Popup(0, 0);
end;
(以上)
バージョンはDelphi 5 (Update2適用)です
618ななしへたぐらま ◆XcB18Bks.Y :2005/12/08(木) 20:50:15
あれ?なんでこんなコード書いたんだろう?
なんか凄い初歩的な間違いをしてるかも…汗
619ななしへたぐらま ◆XcB18Bks.Y :2005/12/08(木) 20:52:01
いや想像していたのはあってました.
620デフォルトの名無しさん:2005/12/08(木) 21:15:36
効くぞ。
621ななしへたぐらま ◆XcB18Bks.Y :2005/12/08(木) 21:41:09
調べて頂いてありがとうございます.
なんでこっちは駄目なんだろう….
622デフォルトの名無しさん:2005/12/08(木) 21:57:07
FormがbsDialogとか、
623ななしへたぐらま ◆XcB18Bks.Y :2005/12/08(木) 23:14:06
直りました.
コンストラクタに以下の行を追加.

PopupMenu := FPopupMenu;

または

ListBox1.PopupMenu := FPopupMenu;

実行時,設計時にかかわらず,
どのコントロールとも関連づけられていないポップアップメニューでは
ショートカットキーが働かないようです.

>>622 BorderStyleは影響しませんでした.

というわけで皆様ありがとうございました.
624デフォルトの名無しさん:2005/12/08(木) 23:21:40
procedure hoge;
begin
 ShowMessage('hoge');
end;

procedure TForm1.hoge;
begin
 ShowMessage('TForm1.hoge');
end;

procedure TForm1.FormClick;
begin
 hoge; // (1)
end;

とすると (1) で TForm1.hoge が表示されますが、
hoge の方を明示的に呼び出す方法はありますか?
(C++ での ::hoge のように)
625624:2005/12/08(木) 23:26:23
自己レス
Unit1.hoge; のようにユニット名付けたら呼び出せました
626デフォルトの名無しさん:2005/12/10(土) 13:27:02
整数/実数 の答えを整数型の変数に代入したいのですが不可能でしょうか?
divやRoundやTruncも 指定した演算子は使えません と怒られます。
627デフォルトの名無しさん:2005/12/10(土) 13:28:16
×整数型の変数に代入
○実数型の変数に代入
628デフォルトの名無しさん:2005/12/10(土) 13:46:05
ただ代入するだけ
629デフォルトの名無しさん:2005/12/10(土) 13:47:37
わり算は / を使う。整数と実数との演算は実数の演算になる
630デフォルトの名無しさん:2005/12/11(日) 02:55:22
>>624
勘だけど ユニット名.hoge; でどうかな?
631デフォルトの名無しさん:2005/12/11(日) 03:03:32
632デフォルトの名無しさん:2005/12/11(日) 22:32:20
嘘か真かわからんが、QualityCentralにQC#21940で、「Delphi2006 ハング」との事です。時々、ハングアップするとの事です。んー。今まで、Qualityを無視しつづけたツケだな。 -- 2005-12-07 05:54:52 (水) New

2005なんか 最初 吹っ飛んで消滅していたじゃん。 消滅からハングに 大差ないしおどろくことではないかと  先行バグ取り隊の情報引き続きよろしく  -- 2005-12-07 09:14:09 (水) New

>「消滅からハングに 大差ないしおどろくことではない」 どっちにしろ、真面目につかうものではなさそうですね。

「どっちにしろ、真面目につかうものではなさそうですね」 しらずに2005のときせっかく数時間かけて書いたコードが消滅して悲しい思いしたよ -- 2005-12-07 15:22:52 (水) New
633デフォルトの名無しさん:2005/12/12(月) 00:18:54
クラスの変数を使って、別のクラスを指定する方法ってどうすればよいですか?
下のサンプルをつかって具体的に言うとsiteiを使って別のクラスのiの値を求めたり、
あるいは変更させたりしたいのですが。

Ttest = class;
sitei :string;
i : integer;
end;

Ttest1 :=Ttest.create;
with Ttest1 do begin sitei :='Ttest2'; i := random(100) end;
Ttest2 :=Ttest.create;
with Ttest2 do begin sitei :='Ttest3'; irandom(100) end;
Ttest3 :=Ttest(略
・・・
634デフォルトの名無しさん:2005/12/12(月) 00:21:04
Ttest1, Ttest2, Ttest3を他のクラスのpublishedに置いてFieldAddress
635デフォルトの名無しさん:2005/12/12(月) 01:39:58
TStringList の Objects を使って連想配列かな
636デフォルトの名無しさん:2005/12/12(月) 03:07:18
if Nameプロパティが'hoge'のコンポーネントがCaptionプロパティを持ってたら then

ってどうやって表現すればいんでしょうか
1日考えたんですけどFindComponent('hoge')ぐらいまでしか出てこないです
637デフォルトの名無しさん:2005/12/12(月) 03:17:00
よく意味がわからないが
if tbutton(findcomponent('hoge')).caption <> '' then
ってこと?
638デフォルトの名無しさん:2005/12/12(月) 03:25:40
フォームにたくさんコンポーネントを張りました
張ったコンポーネントのCaptionまたはTextプロパティを自動で変更したいんですけど、どうやったらいいのかわからないです
例えばラベルだったらCaptionを、エディットボックスだったらTextを変えたいんです
639デフォルトの名無しさん:2005/12/12(月) 03:27:41
if FindComponent('hoge') has Property('Caption') then
 hoge.Caption := '新しいキャプション';
みたいな感じです
640デフォルトの名無しさん:2005/12/12(月) 05:08:36
random関数ってかなり偏りがある気がするんですがなんとかなりませんか
641デフォルトの名無しさん:2005/12/12(月) 07:06:11
メルセンヌツイスターでも使いなさい
642デフォルトの名無しさん:2005/12/12(月) 10:26:51
> random関数ってかなり偏りがある気がするんですがなんとかなりませんか

気がするだけ。偏りがあるかどうかを評価するプログラムがあるらしいよ。
あまり詳しくは知らないんだが、Delphi の Random() のアルゴリズムは
それなりに数学的には認められたアルゴリズムらしいよ。
643デフォルトの名無しさん:2005/12/12(月) 11:20:07
マウスドラッグでコントロールのサイズを変更したいのですが、どうすればよいのでしょう。
if GetKeyState(vk_LBUTTON)<0 then
begin
img.Width:= img.Width-???;
end;
end;
644デフォルトの名無しさん:2005/12/12(月) 11:59:22
設計時のフォームデザイナと同じだけ、面倒。
645デフォルトの名無しさん:2005/12/12(月) 12:05:22
>>640
Randomizeしてるか?
646デフォルトの名無しさん:2005/12/12(月) 13:15:49
Delphiの乱数組成って確かM系列乱数だっけ?
まぁ仮に線形合同法でもC標準のrandomと同じ程度の
質の乱数が生成されるはずだし、何も問題ないな
647デフォルトの名無しさん:2005/12/12(月) 17:17:14
最近Delphiを始めた初心者なんですが、ClientSocketでファイルストリームを作成して
SendStreamすれば簡単にファイルを送信する事ができると知ったんですが、MSN Messengerみたいに
送信側が今どのくらい送信が完了したか進行度をTProgressBarで表したいのですが、OnWriteも反応してくれず、
どうやればいいのか分かりません・・(´・ω・) どうか知恵をお貸し下さい。
648デフォルトの名無しさん:2005/12/12(月) 17:36:14
649デフォルトの名無しさん:2005/12/12(月) 19:22:19
>>639
ランタイムソースの中のTypInfo.pasを見てみ
650デフォルトの名無しさん:2005/12/12(月) 20:15:23
小さめのフォームをボタンを押したら指定の座標まで移動させたいんですけど
どうしたらいいでしょうか?
651デフォルトの名無しさん:2005/12/12(月) 20:18:13
LeftとTopに代入
652デフォルトの名無しさん:2005/12/12(月) 20:19:29
TopとLeft
653デフォルトの名無しさん:2005/12/12(月) 20:19:34
TopとLeftに代入でも、SetBoundsでも。
654デフォルトの名無しさん:2005/12/12(月) 20:22:52
>>651-653
ありがとうございます
実行した直後の位置は指定できたんですけど
ボタン押した後の代入の仕方がわからないのです
どうかお願いします
655デフォルトの名無しさん:2005/12/12(月) 20:25:34
OnClick×3
656デフォルトの名無しさん:2005/12/12(月) 20:26:04
これがなんでわからんの

procedure TForm1.Button1Click(Sender: TObject);
begin
  Left := 10;
  Top := 10;
end;
657デフォルトの名無しさん:2005/12/12(月) 20:30:09
>>656
すいません。ありがとうございました
658デフォルトの名無しさん:2005/12/12(月) 20:43:30
D8 発売直後に、海外でもDelphi関係の個人サイトがバタバタ閉鎖された。
当時つくったリンク集をクリックしてみたら、半分以上がリンク切れだった。
結構有名どころだったのに・・・
659デフォルトの名無しさん:2005/12/12(月) 21:02:12
で、何が聞きたいの?
660デフォルトの名無しさん:2005/12/12(月) 22:50:33
誤爆です。失礼しました。
661デフォルトの名無しさん:2005/12/13(火) 04:51:34
EXEのアイコンを書き換えようとしています。UpdateResourceを使って書き換えようと思うのですが、
どうもよくわかりません。参考文献などを教えていただければうれしいです。英語もおkです。
662デフォルトの名無しさん:2005/12/13(火) 04:55:02
>>661
そのソフト、知らないけど
どうしてもソレじゃないとダメなの?
日本製のでフリーなのもあるけど。
663662:2005/12/13(火) 04:57:08
失敬w
664デフォルトの名無しさん:2005/12/13(火) 04:59:58
UpdateResourceは関数です。
665デフォルトの名無しさん:2005/12/13(火) 05:37:43
右上のxボタンを押した時に、アプリケーションを終了せずに
メインフォームを非表示にするにはどうすれば良いのでしょうか。

子フォームを作成すれば似たような事は可能なのですが。。
666ななしへたぐらま ◆XcB18Bks.Y :2005/12/13(火) 07:52:13
>>638-639
TControlクラスのSetTextBufメソッドを使うと良いでしょう.

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
 NewCaptionOrText: string;
begin
 for i := 0 to pred(ComponentCount) do
  if Components[i] is TControl then //※1
  begin
   NewCaptionOrText := format('%d番目のコンポ', [1 + i]);
   (Components[i] as TControl).SetTextBuf(PChar(NewCaptionOrText)); //※2
  end;
end;

ラベルコンポやエディットコンポなど,実行時に目に見えるコンポーネントは基本的にTControlの仲間で,
SetTextBufというCaptionまたはTextを変更するメソッドを持っています.
そこで※1でis演算子を使ってフォーム上の番号iのコンポがTControlの仲間かどうかを調べ,もしそうなら,
※2でas演算子を使ってTControlの仲間として解釈し,SetTextBufメソッドを実行しています.
667636,638,639:2005/12/13(火) 09:08:50
>>666
レスありがとうございます。おかげ様で解決できました
>>636を書き込んだ時点で、
フォーム上に貼り付けたコンポーネントの全てのメソッドのヘルプを見ていたのですが、(もちろんSetTextBufも含む)
読解力が足りずにそのような事ができるとは読み取れてませんでした
自分のレベルに合わせて詳細な例文までつけてくれてとても助かります
668デフォルトの名無しさん:2005/12/13(火) 09:14:29
RTTIバージョンplz
669デフォルトの名無しさん:2005/12/13(火) 09:18:56
>>665
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 Canclose := false;
 Hide;
end;

でできたっぽいけど、これだと他の手段で終了させようとしたときも隠れるだけで終了しないので、
もう一工夫必要っぽいです
ちなみに本当に終了させたいときは CanClose := true; にすれば終了します
670デフォルトの名無しさん:2005/12/13(火) 09:35:29
>>669
レスありがとうございます。

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
h : HWND;
begin
h := GetForegroundWindow;
if h = Form1.Handle then
begin
CanClose := False;
Hide;
end
else CanClose := True;
end;

のようにしてみたら、理想の動作をさせることができました。
ありがとうございました。
671デフォルトの名無しさん:2005/12/13(火) 09:39:24
CanClose := GFW <> Form1.Handle;
if not CanClose then hide;
でいいやん
672デフォルトの名無しさん:2005/12/13(火) 09:40:33
>>671
なるほど。。そんな書き方ができたとは^^;
どうもありがとうございます。
673デフォルトの名無しさん:2005/12/13(火) 12:55:10
ボーランドへのご意見・ご要望の窓口→ feedback mailto

 効き目ありません。連絡してもどこかに消える模様。

Quality Central

 公式窓口はこちら

  こちらに報告してもみてないふりをされます。
  数え切れないくらいたくさん放置されているから、みにいけばわかります。 そのつけがどんどんのしかかってお粗末なバグがおおいソフトへと成長するのです。

※12月末出荷予定のBorland Developer Studio 2006に含まれるBorland C++Builderは「テクノロジープレビュー」版となります。 年末にご提供予定のアップデートを適用するまではサポートの対象になりません。
674デフォルトの名無しさん:2005/12/13(火) 15:53:21
           i::::::::/'" ̄ ̄ヾi
           |:::::::| ,,,,,_  ,,,,,,| 
           |r-==( 。);( 。)   
           ( ヽ  :::__)..:: }
        ,____/ヽ  ー== ;  ほほうッ ほうほう、それでッ!?
     r'"ヽ   t、   \___ !
    / 、、i    ヽ__,,/
    / ヽノ  j ,   j |ヽ 
    |⌒`'、__ / /   /r  |
    {     ̄''ー-、,,_,ヘ^ |
    ゝ-,,,_____)--、j
    /  \__       /
    |      "'ー‐‐---''
675デフォルトの名無しさん:2005/12/13(火) 19:48:49
フォームとボタンを透明(半透明)にするにはどうしたらいいですか?
676デフォルトの名無しさん:2005/12/13(火) 23:57:40
>>675
オブジェクトインスペクタをじっくり見なさい
677デフォルトの名無しさん:2005/12/14(水) 03:22:32
てすと
678デフォルトの名無しさん:2005/12/14(水) 08:16:05
>>673
日本語やでたらめ英語じゃだめだよ。
679デフォルトの名無しさん:2005/12/14(水) 09:17:44
きちっとした英語を使える人だけがDelphiユーザと認められる、ってか?
日本では絶滅するね。
680デフォルトの名無しさん:2005/12/14(水) 10:28:23
きちっとした英語を使える人が少ない事自体、問題だと思うのだがどうか。
681デフォルトの名無しさん:2005/12/14(水) 10:43:54
>>680
すれ違い
682デフォルトの名無しさん:2005/12/14(水) 15:43:42
>>680
7000万円
683デフォルトの名無しさん:2005/12/14(水) 15:51:18
>680
You is big fool man! ha ha ha!
684デフォルトの名無しさん:2005/12/14(水) 22:25:21
>>676
レスありがとう
じっくり見てきます
685デフォルトの名無しさん:2005/12/14(水) 23:29:21
>>683
be 動詞の2人称現在活用形は are です
686デフォルトの名無しさん:2005/12/14(水) 23:37:22
>>685
レス先に対するネタだろ
687デフォルトの名無しさん:2005/12/15(木) 00:36:10
ネタにマジレスって久々に見ました
いやー、いつ見ても恥ずかしいものですね^^;
688デフォルトの名無しさん:2005/12/15(木) 02:31:47
いやー、マジレスにもいろいろあるが今回のはかなり恥ずかしいな。
689デフォルトの名無しさん:2005/12/15(木) 03:38:01
実はマジレスに見せかけた釣りだったんだよ!

なんだってー ΩΩΩ
690デフォルトの名無しさん:2005/12/15(木) 07:54:49
釣りかどうかは本人にしか分からない・・・このもどかしさを改善するソフトをDelphiで作っていただけませんか!?
691デフォルトの名無しさん:2005/12/15(木) 07:56:07
>>690
7000万円
692デフォルトの名無しさん:2005/12/15(木) 09:27:58
「実は釣りだった」の半分以上は負け惜しみ。ほんものの釣りはいちいち注釈入れない。
693デフォルトの名無しさん:2005/12/15(木) 13:41:37
"You is big fool man" の検索結果 約 351 件
694デフォルトの名無しさん:2005/12/15(木) 14:22:08
"You are big fool man" の検索結果 約 9 件
695デフォルトの名無しさん:2005/12/15(木) 19:44:19
昔のハカーの名セリフでしたね
ttp://members.tripod.com/~HackerZBBS/
696デフォルトの名無しさん:2005/12/16(金) 06:31:31
最新の開発環境が無料で使えます。みんなで乗り換えましょう。

Visual Studio 2005 Express Edition
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/

Microsoft .NET Framework Version 2.0 Redistributable Package (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyId=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=en

Microsoft .NET Framework 2.0 日本語 Language Pack (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=39c8b63b-f64b-4b68-a774-b64ed0c32ae7&DisplayLang=ja

Microsoft .NET Framework 2.0 SDK 日本語版 (x86)
http://www.microsoft.com/downloads/details.aspx?familyid=FE6F2099-B7B4-4F47-A244-C96D69C35DEC&displaylang=ja
697デフォルトの名無しさん:2005/12/16(金) 06:34:26
>>696
うざいとかスレ違いとか以前に、
そうやって貼りまくってると、猫も杓子もダウンローダーにかけてサーバー重くして
本当に熱心にVSを使おうとしてそれを落とそうとしてる人の迷惑にならないか?
698デフォルトの名無しさん:2005/12/16(金) 07:00:44
シェア奪還の決め手を欠く某社員は焦りの色が隠せない様子だなw
699デフォルトの名無しさん:2005/12/16(金) 08:07:24
>>697
踏む人が少ないから平気でしょうw
700デフォルトの名無しさん:2005/12/16(金) 08:59:59
>>696
MFCを使ったVC++6のプロジェクト、上の2005 Express Editionだとビルドできず。
C++Builder 6 Proffesional Editionだとビルドも実行もできたのに。
701デフォルトの名無しさん:2005/12/16(金) 10:32:42
スレが閑散としてるなぁ
みんなVB.NETスレに移っちゃったのかな?
702デフォルトの名無しさん:2005/12/16(金) 11:02:08
2chは荒らしが暴れてるのでQ&A掲示板に避難してます。
703デフォルトの名無しさん:2005/12/16(金) 11:14:49
なるほど。だからひどいことになってるのか、あそこ。
704デフォルトの名無しさん:2005/12/16(金) 14:00:50
●問題2
エディットボックス(Edit1)に入力した数字までの合計値を、ボタン(Button1)を押したら、表示(Label1に表示)させよ。
なお変数は、エディットボックスの入力値(a)、合計値(Sum)、ループのカウンタ(i)とする。

procedure TForm1.Button1Click(Sender: TObject);
var
i,Sum:□□□□□□□;
a:integer;
begin
a:=StrToInt(Edit1.text);
Sum:=0;

for i:= □ to □ do
begin
Sum:= □□□+□
end;

Label1.Caption:=IntToStr(Sum);
end;

教えて!↑
705デフォルトの名無しさん:2005/12/16(金) 14:10:27
>>704
Integer, 0, a, Sum, i

答えた代わりとして、その問題集みたいな奴をください。
706デフォルトの名無しさん:2005/12/16(金) 14:15:32
ループなんかいらんわね

Sum := a*(a+1) div 2;
707デフォルトの名無しさん:2005/12/16(金) 14:26:35
●問題3
ボタン(Button1)を押したら、サイコロを600回振り、それぞれの目が出た回数を数えて表示(Label1に表示)しなさい。
なお変数は、1次元配列(Ary)、発生した乱数(n)、ループのカウンタ(i)とする。
【必須条件】要素数が6の1次元配列(Ary)を宣言し、RandomizeとRandom関数を使って乱数を発生させ、1〜6の目が出た回数を記録。

procedure TForm1.Button1Click(Sender: TObject);
var
n:Integer;
i:Integer;
Ary:array [1.. □] of Integer;
begin
Randomize;

//Aryの初期化
for i:= □ To □ do
Ary[□]:=0;
//出た目を数える
for i:= □ to □□□ do
begin
//Randomは、0<=X<Rangeの範囲にある乱数を返す
n:=Random (□)+ □;
//Label2.Caption:=Label2.Caption+IntToStr(n)+#13;
Ary[□]:=Ary[□] + 1;
end;

//結果の表示
for i:=1 To □ do
Label1.Caption:=Label1.Caption+IntToStr(Ary[□])+#13
end;

708デフォルトの名無しさん:2005/12/16(金) 14:34:15
Random() とサイコロとは違う。ちゃんと、石鹸でも削ってつくれよ。
709デフォルトの名無しさん:2005/12/16(金) 14:38:11
//Label2.Caption:=Label2.Caption+IntToStr(n)+#13;

コメントアウトしてるところが微笑ましい。
710デフォルトの名無しさん:2005/12/16(金) 14:42:18
>>707
馬鹿が湧くから宿題スレ池
711デフォルトの名無しさん:2005/12/16(金) 16:17:11
1,6
0,600
i
0,600
6,1
n,n
6
i
712デフォルトの名無しさん:2005/12/16(金) 16:38:49
馬鹿が湧くからりちぎに回答するな
713デフォルトの名無しさん:2005/12/16(金) 16:44:15
>>712
どこかおかしい解答がまぎれこんでいるはずだ
そしてそのまま提出した>>707はボロクソに怒られて>>696化すると
714デフォルトの名無しさん:2005/12/16(金) 16:47:52
間違った、0,600じゃなくて1,600だった
715デフォルトの名無しさん:2005/12/16(金) 17:03:37
どっかの小学校のパソコンクラブの課題か何かか? えらく程度低いが。
716デフォルトの名無しさん:2005/12/16(金) 18:29:42
最新の開発環境が無料で使えます。
Delphiユーザも試してみる価値はあります。

Visual Studio 2005 Express Edition
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/

Microsoft .NET Framework Version 2.0 Redistributable Package (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyId=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=en

Microsoft .NET Framework 2.0 日本語 Language Pack (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=39c8b63b-f64b-4b68-a774-b64ed0c32ae7&DisplayLang=ja

Microsoft .NET Framework 2.0 SDK 日本語版 (x86)
http://www.microsoft.com/downloads/details.aspx?familyid=FE6F2099-B7B4-4F47-A244-C96D69C35DEC&displaylang=ja

ユーザコミュニティーも賑わっています。

http://www.gotdotnet.com/japan/

書籍も続々刊行予定です!
717デフォルトの名無しさん:2005/12/17(土) 07:45:48
最初の□は6で無くても良いのでは?
6以外の答えを許さない問題を考えないと。
718デフォルトの名無しさん:2005/12/17(土) 09:14:30
最新の開発環境が無料で使えます。
Delphiユーザも試してみる価値はあります。

Visual Studio 2005 Express Edition
http://www.microsoft.com/japan/msdn/vstudio/express/maninstall/

Microsoft .NET Framework Version 2.0 Redistributable Package (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyId=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=en

Microsoft .NET Framework 2.0 日本語 Language Pack (x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=39c8b63b-f64b-4b68-a774-b64ed0c32ae7&DisplayLang=ja

Microsoft .NET Framework 2.0 SDK 日本語版 (x86)
http://www.microsoft.com/downloads/details.aspx?familyid=FE6F2099-B7B4-4F47-A244-C96D69C35DEC&displaylang=ja

ユーザコミュニティーも賑わっています。

http://www.gotdotnet.com/japan/

書籍も続々刊行予定です!
719デフォルトの名無しさん:2005/12/17(土) 10:36:30
>>717
>【必須条件】要素数が6の1次元配列(Ary)を宣言し

6 以外の答えって何?
720デフォルトの名無しさん:2005/12/17(土) 16:38:09
Delphi6 PersonalにThemeManagerをインストールしたいのですが、Delphi 6 Personal.txt通りにやってもパッケージを追加できません。
どなたか詳しく手順を教えてください
721デフォルトの名無しさん:2005/12/17(土) 16:49:23
DelWiki嫁ば分かるだろ
722720:2005/12/17(土) 16:55:29
sageわすれてました^^;
>>721見れませんよ?<DelWiki
723デフォルトの名無しさん:2005/12/17(土) 18:27:51
Delphi 6 Personal.txt通りにやればできます。
724720:2005/12/17(土) 18:43:38
すいません適当にやったらインストールできちゃいました(ゲラ
725デフォルトの名無しさん:2005/12/17(土) 21:31:40
Delphi.NETでWindowsサービスを作ろうと思ったら、
新規プロジェクトにWindows Serviceがないんですが、
Unitファイルからガリガリ作れってことですか? orz
726デフォルトの名無しさん:2005/12/17(土) 23:52:19
Delphiやってみようと思ったがまともな入門サイトがないな
727デフォルトの名無しさん:2005/12/18(日) 00:54:20
Delphi2005日本語版、WinXP日本語版で作ったアプリが、
英語XPに持っていくとレイアウトが崩れます。
ボタンとかMemoコンポとかがウィンドウからはみ出すかんじ。
日本語フォントは使っていないし、まあそれでもフォントの
問題は一応疑ってみたけど、到底フォントのせいでボタン
がでかくなったとかそういうレベルのずれ方じゃないんです。

どなたか解決策わかるかたいましたら教えてください。
728デフォルトの名無しさん:2005/12/18(日) 01:07:06
Delphi2005英語版、WinXP英語版で作ればよし
729デフォルトの名無しさん:2005/12/18(日) 04:03:46
>>726
そうそうあんまないね。
本買うしかねーな
おれも最近delphiやりだしたんだけどネットだけじゃだめだね。
基本の本と、Tips系の本を5冊買ったらなんとかなったよ。
730デフォルトの名無しさん:2005/12/18(日) 07:36:15
731デフォルトの名無しさん:2005/12/18(日) 08:53:15
本買わずにネットだけで今までやってきたんだが、今特に不自由してない。

まぁ、急ぎで英語読めないなら本買うのがいいかもな。
732デフォルトの名無しさん:2005/12/18(日) 08:58:36
ここも割とイイかも?英語だけどなー
http://www.delphibasics.co.uk/
733デフォルトの名無しさん:2005/12/18(日) 14:50:39
練習にメモ帳を作ってみようかと思ったのですが・・・
インデント機能を追加しようとしたときに

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=VK_RETURN then
begin
Memo1.lines.Add(' ');//エンターキーが押されたときに次のラインの先頭にタブを追加したい

end;

if Key=VK_TABthen
begin
Memo1.lines.Add(' ');//タブ押したら' 'を先頭に追加したい
end;
end;


と、言うふうに書いてみたのですが、実行すると
エンターキーを押したときは

aniki     //一行目、ここでエンターを押した
        //二行目、「' '」が追加されている
       //三行目、ここにカーソルが来てしまう

タブを押したときに至っては全く反応無しという有様なのですが、どのように書けばいいのでしょうか?
734デフォルトの名無しさん:2005/12/18(日) 15:51:23
>>733

ApplicationEvents を Form1 の置いて、その OnMessage イベントを使うと良い。

  public
    procedure WMApp(var Msg: TMessage); message WM_APP;
  end;

....
procedure TForm1.WMApp(var Msg: TMessage);
begin
  case Msg.WParam of
    VK_RETURN: Memo1.SelText := #13#10'RET';
    VK_TAB : Memo1.SelText := 'TAB';
  end;
end;

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if (Msg.message = WM_KEYDOWN) and (Msg.hwnd = Memo1.Handle) then
    case Msg.wParam of
      VK_RETURN, VK_TAB: begin
        PostMessage(Handle, WM_APP, Msg.wParam, 0);
        Handled := true;
      end;
    end;
end;
735デフォルトの名無しさん:2005/12/18(日) 16:27:13
>>734
おお!ありがとうございます。しっかり動きました。
では、中身を理解する作業に戻ります
736デフォルトの名無しさん:2005/12/18(日) 18:42:38
イベントハンドラ無しにイベントを処理させるにはどうすればいいですか??
737デフォルトの名無しさん:2005/12/18(日) 20:54:22
>726
オフィシャルコースウェア買えカス
738デフォルトの名無しさん:2005/12/18(日) 21:49:41
BDS2006はNECのMC-MK22で動きますか?
739デフォルトの名無しさん:2005/12/18(日) 21:50:15
談話室スレと間違えたorz
740デフォルトの名無しさん:2005/12/19(月) 07:17:45
>>1のDelWiki消滅してるぽ?
741デフォルトの名無しさん:2005/12/19(月) 07:18:53
粘着の言論統制がキモいので閉鎖しました。
742デフォルトの名無しさん:2005/12/19(月) 07:51:09
>>736
詳しく
743デフォルトの名無しさん:2005/12/19(月) 17:16:31
>>742
フォームを起動した瞬間にイベントが起こるようにしたい

ちょっと的はずれ的な考えだと思うが

フォームにチェックボックスをひとつ
チェックが入ってる状態だと常に最前面
入ってない状態だとノーマルにしたい

Onkeypressだと思ってやってみたがそれだと一度チェックつけてからチェックはずしても常に最前面の状態のままになってしまう。
744デフォルトの名無しさん:2005/12/19(月) 17:27:04
それってチェックボックスのOnClick使えばいいんでね?
ちなみにフォームが起動する瞬間ってのはOnCreateかOnActivate?
どっち使うかは書き方次第だが。
745デフォルトの名無しさん:2005/12/19(月) 17:41:28
>>744

>>Onkeypressだと思ってやってみたがそれだと一度チェックつけてからチェックはずしても常に最前面の状態のままになってしまう。

OnClickと間違えたかも

で、OnClickを使うと一度チェックつけてからチェックはずしても常に最前面の状態のままになってしまう。

746デフォルトの名無しさん:2005/12/19(月) 18:03:50
今作ってみたけど普通にできたよ
procedure TForm1.cbformstyleClick(Sender: TObject);
begin
 if CheckBox1.Checked then
  Form1.FormStyle := fsStayOnTop
 else Form1.FormStyle := fsNormal;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CheckBox1.Checked := False;
end;
747デフォルトの名無しさん:2005/12/19(月) 18:04:51
あぁ悪い
procedure TForm1.CheckBox1Click(Sender: TObject);
748デフォルトの名無しさん:2005/12/19(月) 19:06:23
Del6Perなんですが、VBのDir関数のようなものは無いですか?
ディレクトリパスと拡張子を指定して、あるディレクトリにある
任意拡張子のファイルのファイル名のみを列挙したいのです。
749デフォルトの名無しさん:2005/12/19(月) 19:10:43
>>748
FindFirst
750デフォルトの名無しさん:2005/12/19(月) 19:18:42
FindFirst,FindNext
ファイル名のみはChangeFileExtで取得してる
751デフォルトの名無しさん:2005/12/19(月) 22:24:35
すんません、誘導されてこちらのスレにきました。教えてください。

TPopupMenuに動的にメニューを追加する方法なんですが、サブメニューも追加したくて・・・
例えば

MenuA
 -SubMenuA
 -SubMenuB
MenuB
 -SubMenuA
 -SubMenuB
 -SubC

こんな感じでサブメニュー含めて動的に追加するにはどうしたらいいですかね?
752デフォルトの名無しさん:2005/12/19(月) 22:50:06
>>751
TMenuItemを動的に生成してAddしてやる
753デフォルトの名無しさん:2005/12/19(月) 22:59:21
配列に関して基本的なことですが、教えてください。

文字列型二次元配列を宣言して代入した文字列をTMemo.Lines.Addで出力したいのですが
Addでの出力で StringとArrayには互換性が無い と言われます。宣言と代入は

words: array [0..9,0..29] of String

words[0] := '文字列1'
words[1] := '文字列2'
words[2] := '文字列3'


みたいな感じで記述したのですがどこが悪いのでしょうか。
754デフォルトの名無しさん:2005/12/19(月) 23:07:14
words: array [0..9,0..29] of String
と宣言したのなら、

words[i]は要素数30のStringの配列じゃん
755ミ,,゚Д゚彡 ◆A6VzDeLphI :2005/12/19(月) 23:14:47
>>751

MenuItem := TMenuItem.Create(Self);
MenuItem.Caption := 'MenuA';
PopupMenu1.Items.Add(MenuItem);
 SubMenuItem := TMenuItem.Create(Self);
 SubMenuItem.Caption := 'SubMenuA';
 MenuItem.Items.Add(SubMenuItem);
 SubMenuItem := TMenuItem.Create(Self);
 SubMenuItem.Caption := 'SubMenuB';
 MenuItem.Items.Add(SubMenuItem);
MenuItem := TMenuItem.Create(Self);
MenuItem.Caption := 'MenuB';
PopupMenu1.Items.Add(MenuItem);
 SubMenuItem := TMenuItem.Create(Self);
 SubMenuItem.Caption := 'SubMenuA';
 MenuItem.Items.Add(SubMenuItem);
 SubMenuItem := TMenuItem.Create(Self);
 SubMenuItem.Caption := 'SubMenuB';
 MenuItem.Items.Add(SubMenuItem);
 SubMenuItem := TMenuItem.Create(Self);
 SubMenuItem.Caption := 'SubC';
 MenuItem.Items.Add(SubMenuItem);
756デフォルトの名無しさん:2005/12/19(月) 23:24:41
>>754
つまり宣言の仕方が違うのですか?
とりあえず自分でもう少し調べてみます。
ちなみに↓と同じ様なことを実現したかったのです。

int i;
char words[10][30] = {
"文字列1", "文字列2", "文字列3",…
};
for (i = 0; i < 29; i++) {
printf("%s\n", word[i]);
}
757ななしへたぐらま ◆XcB18Bks.Y :2005/12/19(月) 23:58:55
>>740
>>722さんも指摘していますが確かに File not found になっていますね.

>>743
別解.アクションオブジェクトを使う方法.
・フォームにアクションリストコンポを置く.
・アクションを追加(ここでは名前をAction_StayOnTopとする)
・アクションのCaptionを「最前面に表示」とでもする
・チェックボックスのActionプロパティにこのアクションオブジェクトを指定.
・起動時にフォームを最前面に表示する場合はフォームのFormStyleにfsStayOnTopを指定.
・アクションオブジェクトのOnExecuteとOnUpdateイベントのイベントハンドラを以下のように書く.

procedure TForm1.Action_StayOnTopExecute(Sender: TObject);
begin
 if FormStyle = fsStayOnTop then
  FormStyle := fsNormal
 else
  FormStyle := fsStayOnTop;
end;

procedure TForm1.Action_StayOnTopUpdate(Sender: TObject);
begin
 (Sender as TAction).Checked := (FormStyle = fsStayOnTop);
end;
758デフォルトの名無しさん:2005/12/20(火) 00:05:35
クリックするだけでweb上のエディットボックスに貼り付け作業を行うにはどうすればいいですか?
759デフォルトの名無しさん:2005/12/20(火) 00:12:52
web 上にエディットボックスなどない
760753:2005/12/20(火) 00:20:24
HelloWords[0,0] := 'TEST1';
HelloWords[1,0] := 'TEST2';
HelloWords[2,0] := 'TEST3;
として
for i:=0 to 2 do
Form1.TMemo1.Lines.Add(HelloWords[i,0]);
で出力できましたが、これは正しいのでしょうか?
761デフォルトの名無しさん:2005/12/20(火) 00:23:07
>>756
Delphiのstringは可変長。
固定長にしたいなら、array[0..9] of string[30];とか、array[0..9, 0..29] of Char;とか。このふたつもちょっと違う。
762デフォルトの名無しさん:2005/12/20(火) 00:23:28
>>756
Delphiのstringは、文字列の長さに応じて動的に確保してくれるので
Cのように長さを指定する必要はありません。
(長さを指定する事も可能ですが、あまり使われません)

もし、Cの文字列を同じものが欲しいのなら、
array[0..9] of AnsiChar とすると、要素数10のchar配列と同等になります。

stringの配列を作るのなら、単純に
words: array[0..29] of string;
とすれば要素数30のstring配列を宣言でき、
words[0] := '文字列1';
words[1] := '文字列2';
・・・と代入できますし、
Memo1.Lines.Add(words[0]);
で、Addに渡すこともできます。
763デフォルトの名無しさん:2005/12/20(火) 00:33:37
>>761-762
とてもよく分かりました。
固定だと何かと不便そうなので指定なしのStringでやることにします。
ありがとうございました。
764デフォルトの名無しさん:2005/12/20(火) 01:02:04
Lines.Addだと1行ずつ追加していきますが
1行ずつではなく、1文字ずつ横に追加する方法はないでしょうか?
765デフォルトの名無しさん:2005/12/20(火) 01:13:44
text := text+ch
766デフォルトの名無しさん:2005/12/20(火) 01:31:30
SelText := ch
767デフォルトの名無しさん:2005/12/20(火) 01:52:37
>>765
それなら簡単ですね。(なぜ気づかなかったのか・・)
でも文字列が長くなっていくと、画面がちらつく感じがしました。
>>766
まさに求めていたものです。

お二人方ありがとうございました。
768デフォルトの名無しさん:2005/12/20(火) 09:27:16
>>755
MenusユニットのNewItem,NewSubMenuあたり使うともちょっとすっきり書けるよ
769デフォルトの名無しさん:2005/12/20(火) 10:12:15
Timerの切り替えでTrueとFalseで一時停止するんじゃなく
リセットする(最初からカウント)にはどうしたらいいですか?
770デフォルトの名無しさん:2005/12/20(火) 10:15:48
いまいち意味不明だけど
カウントする変数をEnable := Trueのタイミングで初期化するしかないのでは
771デフォルトの名無しさん:2005/12/20(火) 10:24:06
>>770
レスありがとうございます
Interval内でボタン押したらタイマーを初期化したいんですけど

TrueFalseの切り替えだと間隔がまちまちになってしまい困ってます
772デフォルトの名無しさん:2005/12/20(火) 10:32:42
TTimerを動的に生成して初期化したい時に解放してからまた作ったらどうだろう
773デフォルトの名無しさん:2005/12/20(火) 10:45:43
>>772
どう見ても超初心者向けの回答じゃないみたいですね
ありがとうございました
774デフォルトの名無しさん:2005/12/20(火) 10:57:25
精度を気にするならTTimerは使えない
timeSetEvent辺りをググレ
775デフォルトの名無しさん:2005/12/20(火) 10:59:21
>>771
初期化はTimer.Createで調べてみよう
腐らないで頑張れよ
776デフォルトの名無しさん:2005/12/20(火) 14:17:10
> Timerの切り替えでTrueとFalseで一時停止するんじゃなく

Enable を true/false で切り替えるのは API で見ると一時停止じゃないよ。
777デフォルトの名無しさん:2005/12/20(火) 14:32:14
Timer1.Enabled := False;
Timer1.Enabled := True;
でInterval分がリセットされる
つう話か?
778デフォルトの名無しさん:2005/12/20(火) 15:01:28
たんに質問者が勘違いしてるだけだろ。
779769:2005/12/20(火) 16:37:55
解決しました。
いろいろとありがとうございました。
780デフォルトの名無しさん:2005/12/20(火) 21:50:51
ToolBar に ToolButton を追加して、そのボタンに PopupMenu を割り当てました。
この状態で ToolButton を右クリックするとポップアップメニューが表示されました。
で、今度は PopupMenu の TrackButton プロパティを tbLeftButton に変えたのですが、
左ボタンには反応しません(右クリックには反応します)。ご存知の方が
いましたら教えてください。(D7 Pro ,WinXP です)
781デフォルトの名無しさん:2005/12/20(火) 23:43:15
>>780
PopupMenuじゃなくてDropdownMenuに割り当てればいいって話?
782780:2005/12/21(水) 08:57:16
>>781 正解でした。目的の動作になりました。ありがとです。

TPopupMenu の TrackButton プロパティにかかわらずに、
DropdownMenu に割り当てると、左ボタンでメニューが表示
PopupMenu に割り当てると、右ボタンでメニューが表示
となりました。
783デフォルトの名無しさん:2005/12/21(水) 10:24:39
win2000 sp4 del6per
Sell_NotifyIconを使ってタスクトレイに登録すると、アイコンの色がちゃんと出ません
かすれたようになってしまいます。どうにかして色を出したいのですが、ご教示願います
784デフォルトの名無しさん:2005/12/21(水) 10:44:16
>>783
そのアイコンはWindowsのアイコンファイルとして正しいのか?
エクスプローラは拡張子だけicoの中身ビットマップも正常に表示できるけど通常はそういったファイルは表示できないぞ。

あと、アイコンとして保存する際に16色で保存してるとかパレットが変とか‥・
785デフォルトの名無しさん:2005/12/21(水) 11:10:07
小さいアイコンが16色しかないとかいうオチだったら相当笑う
786デフォルトの名無しさん:2005/12/21(水) 11:20:33
つーかそのアイコンは16*16だよね、当然。
787デフォルトの名無しさん:2005/12/21(水) 11:38:25
>>783
Windows2000はタスクトレイのアイコン表示が最大16色。
なもんで、Explorer.exeにパッチ当てると256色まで表示できるようになる。

ttp://www.dr-hoiby.com/TrayIconIn256Color/index.php
788デフォルトの名無しさん:2005/12/21(水) 11:41:00
つーか、Delphi にまぁーったく関係無し
789デフォルトの名無しさん:2005/12/21(水) 11:42:44
>>784-786
こいつら頭ワルスw
790デフォルトの名無しさん:2005/12/21(水) 12:26:20
知識がない事と頭の良し悪しを関連付けてる奴も結構頭悪いと思うよw
791デフォルトの名無しさん:2005/12/21(水) 14:23:46
あからさまな煽りを無視できず反応しちゃう奴も結構頭悪いと思うよw
792デフォルトの名無しさん:2005/12/21(水) 18:43:26
プロジェクト→オプション→パッケージで実行時パッケージを使って構築にチェックを入れると
実行ファイルのサイズが極端に軽くなりますが
チェックをいれる事によるメリット、デメリットってあるんですか?
793デフォルトの名無しさん:2005/12/21(水) 18:57:06
メリット:小さなexe
デメリット:実行時パッケージの配布
794デフォルトの名無しさん:2005/12/21(水) 19:07:07
MainMenu(内のサブメニュー)をショートカットキーでドロップダウンさせたいのですが、
そのようなことはできるものでしょうか。
OnKeyDown で MainMenu1.Items[0].Items[0].Click;
などとしてもだめでした。
795デフォルトの名無しさん:2005/12/21(水) 20:14:16
たとえば、メモ帳の場合、エディット部分にフォーカスがあるとき
Alt キーを押してから F キーを押すと [ファイル] メニューがドロップダウンする。
同様にして、コードでドロップダウンするときは、keybd_event() API でキー入力を
シミュレートするとできるよ。
796794:2005/12/21(水) 20:39:27
>>795 なーる!その手がありましたですね。
(keybd_event って昔はよく使ってたんですけど、何だかで一切使わなく
なっちゃたんですよね。何でだっけかな?)
[ファイル(&F)]−[登録(&R)]のサブメニューを表示するイメージとしては
keydown(Alt)
keydown(F)
keyup(F)
keyup(Alt)
keydown(R)
keyup(R)
てな感じかな。どっかでApplication.何とかをはさむ必要もあるかも
試してみます。
797794:2005/12/21(水) 21:03:46
OnKeyDown 内ではうまくいきませんでしたので、Timerで処理したらうまくいきました。
ただ、Alt キーが押されている状態(メニューにフォーカスがいっている状態)では
開かない、という事象がありますが。とりあえずは良しとしたいと思います。
ありがとうございました。
OnKeyDown で Timer1.Enabled := True;
Timer1 で
Timer1.Enabled := False;
keybd_event(VK_MENU, 0, 0, 0); // Altキーを押す
keybd_event(Word('F'), 0, 0, 0); // 'F'キーを押す
keybd_event(Word('F'), 0, KEYEVENTF_KEYUP, 0); // 'F'キーを離す
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0); // Altキーを離す
keybd_event(Word('R'), 0, 0, 0); // 'R'キーを押す
keybd_event(Word('R'), 0, KEYEVENTF_KEYUP, 0); // 'R'キーを離す
としました。
798デフォルトの名無しさん:2005/12/21(水) 22:27:01
Alt は押してすぐ上げてもいいのでは?
799デフォルトの名無しさん:2005/12/21(水) 22:29:56
それからタイマで非同期にするより、PostMessage() で WM_APP とかをフォームに
ポストしておけば OnKeyDown イベントのあとで実行できるよ。
800デフォルトの名無しさん:2005/12/22(木) 04:53:39
フォームの外枠をマウスでつかんでフォームの大きさを変更するのと同じような操作をパネルで再現させたいのですが、
TFormにはBorderStyleの選択肢にbsSizeableがありますが、TPanelにはありません
少ない脳みそで考えた結果、
OnMouseMoveでマウスがパネルのはじっこに乗ってるか判定して、
はじっこだったらマウスカーソルの絵を変えて、
その状態でマウスの左ボタンを押したらサイズ変更を開始させて、
ボタンを離したら左ボタンを押した時と離した時の座標の差を元にパネルのサイズを変更する
という頭の悪い方法しか考えつかないです(しかも超面倒くさそう・・・)
他にもっと簡単な方法はありませんか?
801デフォルトの名無しさん:2005/12/22(木) 05:31:24
802デフォルトの名無しさん:2005/12/22(木) 08:10:15
DelWiki消えてるな
誰かwikiの後継ぎしてくれ
803794:2005/12/22(木) 09:04:05
>>798 >>799 ご回答ありがとうございます。PostMessage の方がより良いですね。
変更したいと思います。
>>800 自分は GetWindowLong ,SetWindowLong ,SetWindowPos などの API を使った
ことがあります。
804デフォルトの名無しさん:2005/12/22(木) 10:46:14
DelWikiのミラーなんて取ってねぇよorz
805デフォルトの名無しさん:2005/12/22(木) 10:50:36
いきなり消えるのは如何なものか
806デフォルトの名無しさん:2005/12/22(木) 12:12:42
転送量か何かの問題で消されたんだろうか
807デフォルトの名無しさん:2005/12/22(木) 12:43:36
0からn−1までの整数乱数を計算するrandom(n)という関数を使うにはどのように定義すればいいんでしょうか。
ロシアンルーレットのようなプログラムを作りたいんですが。
808デフォルトの名無しさん:2005/12/22(木) 12:59:43
まず拳銃に1発だけ弾丸を入れる。
809デフォルトの名無しさん:2005/12/22(木) 13:05:06
こめかみに当てて

var
 i, n: Integer;
begin
Randomize;
 n := 100;
 i := Random(n);
end;
810デフォルトの名無しさん:2005/12/22(木) 14:01:35
RandomizeはFormCreateの際に一回だけ呼び出せば良い
関数で何度も呼び出す必要性はないな
811デフォルトの名無しさん:2005/12/22(木) 18:27:22
必要性はないっつーか、1回しかやっちゃあかんのよ。
812デフォルトの名無しさん:2005/12/22(木) 18:30:05
周期性を気にしてるんだろ?
Randomize は、何度やってもいいんだよ。ランダムなんだから(藁
813デフォルトの名無しさん:2005/12/22(木) 18:32:21
1日1回?、10日に1回?、起動時に1回?。

関数呼び出す毎に実行してなにが悪い?
814デフォルトの名無しさん:2005/12/22(木) 18:32:53
>>812
いや、Delphiクイックリファレンスにも書いてあるんだけど、
Randomizeを毎回呼ぶことによってランダム性が崩れるんだとさ。

というわけで、Randomizeは、プログラム開始時に一回だけ呼ぶのが正しいらしい。
815デフォルトの名無しさん:2005/12/22(木) 18:35:53
> というわけで、Randomizeは、プログラム開始時に一回だけ呼ぶのが正しいらしい。

なんで2回じゃ正しくないのかな?
816デフォルトの名無しさん:2005/12/22(木) 18:37:52
Randomizeは、Randseed変数に、その時の日時にもとづいてセットするんだと。

あとはよくわからん。
とりあえず、俺は本を信じとくけど。
817デフォルトの名無しさん:2005/12/22(木) 18:38:48
1回目と2回目の間で、Random() を使って、たとえばモンテカルロを実行するとか
データの間でランダム性の相関が必要なときは、1回だけが正しい。
相関が無いときは、何度実行しても関係ない。
818デフォルトの名無しさん:2005/12/22(木) 18:52:48
乱数って結構、奥深いのな
819デフォルトの名無しさん:2005/12/22(木) 19:40:04
極端な話、毎回Randomize呼ぶと何回Random呼んでも同じ値になるなんてことが起こりうるわけよ
乱数の種がどういう意味持ってるか分からない人はそれ相応の入門書でも読むとよろし
820デフォルトの名無しさん:2005/12/22(木) 20:24:50
プログラミングって、コードの間の一連の論理的なつながりが実行されることにより
一見複雑な結果が得られる。で、一様で長周期な Random() 関数の実装が、論理的な
プログラミングと一見矛盾して見えるんだよね。乱数発生のアルゴリズムは、一生を
かけて研究するに値する学問分野ではあるらしい。不思議な感じがするよね。
821デフォルトの名無しさん:2005/12/22(木) 21:24:41
812や813には人を煽る前に最低限ヘルプぐらい読んで欲しいものだな
822デフォルトの名無しさん:2005/12/22(木) 21:28:21
ヘルプの内容と関係してないだろ。意味分かって言ってる?
823デフォルトの名無しさん:2005/12/22(木) 21:29:26
何この下らないスレ
824デフォルトの名無しさん:2005/12/22(木) 21:42:38
「くだすれ」なんですけど・・・・
825デフォルトの名無しさん:2005/12/22(木) 22:00:20
>>824の発言には否定しようがない
826デフォルトの名無しさん:2005/12/22(木) 22:00:35
下らない人間は質問しろ。答えるな。
827デフォルトの名無しさん:2005/12/22(木) 22:02:51
下らない人間は命令するな。
828デフォルトの名無しさん:2005/12/22(木) 22:14:36
下らない人間は便秘
829デフォルトの名無しさん:2005/12/22(木) 22:20:48
あ、「くだすれ」の意味がようやく分かった…(マジで)
830デフォルトの名無しさん:2005/12/22(木) 22:23:31
マジでおもしろくないわ
831デフォルトの名無しさん:2005/12/22(木) 23:22:08
まぁこの板ID出ないしね
832800:2005/12/22(木) 23:32:00
>>801
>>803
まんま望み通りの事がFAQっぽいところに載ってるとは・・・勉強不足すんまそん
でもイメージ的にはあってたみたいですね
提示してくれた物の方が比べ物にならないくらいスマートですが
ちょっと改造すれば解決しそうです。ありがとう
833デフォルトの名無しさん:2005/12/22(木) 23:50:37
DelWiki 避難所作ったお。まだ何にも無いけど
http://wiki.s54.xrea.com/delphi/
もし良かったら使ってね
834デフォルトの名無しさん:2005/12/23(金) 00:07:07
つか、何でDelWiki削除されたわけ??
粘着のせい??
835デフォルトの名無しさん:2005/12/23(金) 02:20:27
場所だけ確保してあと好きにしろって
管理する気あるのかよ
836デフォルトの名無しさん:2005/12/23(金) 02:42:19
何もやってない無能がそんなこと言っても説得力ないですよ^^
837デフォルトの名無しさん:2005/12/23(金) 05:37:48
キャッシュ残ってない(´・ω・`)ショボーン
838デフォルトの名無しさん:2005/12/23(金) 07:43:12
Delphiを導入したいから早くDelWiki復活キボンヌ
839デフォルトの名無しさん:2005/12/23(金) 08:30:31
導入もできない奴がDelphiやるなんて嘘だろ?
840デフォルトの名無しさん:2005/12/23(金) 09:15:12
それをいっちゃあおしめえよ
841デフォルトの名無しさん:2005/12/23(金) 10:14:05
復活まだ〜?チンチン
842デフォルトの名無しさん:2005/12/23(金) 10:37:59
無料レンタルだからああなったんだろうね。
843デフォルトの名無しさん:2005/12/23(金) 11:15:17
wikiのバックアップ取ってる奴いないのか?
844デフォルトの名無しさん:2005/12/23(金) 11:17:47
いい加減スレ違い
845デフォルトの名無しさん:2005/12/23(金) 11:20:17
スレ違いではないことをスレ違うと言うやつがスレ違い
846デフォルトの名無しさん:2005/12/23(金) 11:42:23
俺がすれ違い
847デフォルトの名無しさん:2005/12/23(金) 14:15:12
俺とお前が擦れ違い
848835:2005/12/23(金) 15:08:32
wikiなんて1度も見たこと無いから
あっても無くてもどうでもいけどね^^
849デフォルトの名無しさん:2005/12/23(金) 15:18:28
var
S: String;
begin
SetLength(S, 100);
lstrcpy(PChar(S), 'Hoge');
end;

こういう使い方してもSは自動的に解放されるんですか?
850デフォルトの名無しさん:2005/12/23(金) 16:28:18
var
S: String; ←
851デフォルトの名無しさん:2005/12/23(金) 16:33:35
>>849
される。
852デフォルトの名無しさん:2005/12/23(金) 16:44:33
そうなんですか、どうも
少し気になってたもので
853デフォルトの名無しさん:2005/12/23(金) 18:15:50
type
TRec = record
aaa: Integer;
case Byte of
0: (bbb: array[0..10] of AnsiChar);
1: (ccc: array[0..10] of Byte);
ddd: Integer; <---未定義の識別子:'ddd' だって???
end;

わし、なんか勘違いしてますか。
854デフォルトの名無しさん:2005/12/23(金) 18:24:51
>>853
レコードの可変部分はレコードの最後でなければならない。
855デフォルトの名無しさん:2005/12/23(金) 18:28:25
>>854
じゃー、構造体の中間は再定義できないの?
856デフォルトの名無しさん:2005/12/23(金) 18:50:09
サンバディ
857デフォルトの名無しさん:2005/12/23(金) 19:29:26
>>855
できない。 Windows.pasでは以下のように対処している。

TRec = record
 aaa: Integer;
 case Byte of
 0: (bbb: array[0..10] of AnsiChar);
 1: (ccc: array[0..10] of Byte;
   ddd: Integer);
end;
858デフォルトの名無しさん:2005/12/23(金) 21:28:34
Delphi7を利用しています。

リストビューでタスクマネージャーみたいに
列を非表示にしたいのですが、どうすれば
いいでしょうか?
859デフォルトの名無しさん:2005/12/23(金) 21:32:53
できるのかもしれんけど、
以前やったときはそんなプロパティ見つからなかったので、あきらめました。

860デフォルトの名無しさん:2005/12/23(金) 21:37:29
ShowColumnHeaders を False
861デフォルトの名無しさん:2005/12/23(金) 21:38:31
あ、ごめ、勘違い。
Width := 0 じゃ・・・だめだよね。
862デフォルトの名無しさん:2005/12/23(金) 21:39:31
列って特定の一列の事じゃないんか??
それじゃ、列ヘッダだろ。
863デフォルトの名無しさん:2005/12/23(金) 21:41:18
Width := 0で、いいかもね。MinSizeとMaxSizeも0にして。

864デフォルトの名無しさん:2005/12/23(金) 21:41:40
なかなか情報はないけれど、特定の列だけ
非表示にするやり方ってあったような気が。
865858:2005/12/23(金) 21:54:18
書き忘れましたけれど、列全体ではなく特定の列です。

Widthを0にしても隠れているだけで境界をドラッグすると
列が表示されてしまいますし、MinSizeとMaxSizeを0にし
ても駄目でした。
完全に非表示にするやり方が多分存在すると思います
ので、いろいろと探してみます。
しっている方がいましたらよろしくお願いします。
866デフォルトの名無しさん:2005/12/23(金) 22:05:48
>>865
俺も調べてみるけど、解決したらこのスレに書き込んでね。
867858:2005/12/23(金) 22:23:17
>>866
了解です。
868デフォルトの名無しさん:2005/12/23(金) 23:08:50
いっそのことコレクションから削除してしまうとか。
869868:2005/12/24(土) 00:10:25
2番目の列を消してみたが内容自体が3番目の列になってしまうためリストの内容全てを再生成する必要がありそう。

procedure TForm1.Button1Click(Sender: TObject);
 var
  LC : TListColumn;
  LI : TListItem;
  I : Integer;
begin
 ListView1.Columns.Clear;
 LC := ListView1.Columns.Add;
 LC.Caption := 'One';
 LC := ListView1.Columns.Add;
 LC.Caption := 'Two';
 LC := ListView1.Columns.Add;
 LC.Caption := 'Tree';

 ListView1.Items.Clear;
 for I := 1 To 10 do begin
  LI := ListView1.Items.Add;
  LI.Caption := '1';
  LI.SubItems.Add('2');
  LI.SubItems.Add('3');
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 ListView1.Columns.Delete(1);
end;
870デフォルトの名無しさん:2005/12/24(土) 00:10:41
列ごとに表示非表示を管理するフラグ変数を用意、
リストを仮想ビューにして、OnDataでフラグ見ながらAdd

くらいしか思いつかない
871870:2005/12/24(土) 00:12:52
この場合一番左の列がAddじゃなくてCaption書き換えになり
そこに対応しようとすると処理が煩雑になるが、
タスクマネージャ仕様でいくなら、そこは非表示にできなくなってるのでおkかな
872デフォルトの名無しさん:2005/12/24(土) 00:23:17
それにしても、タスク マネージャの[表示]メニューの"列の選択"から
CPU使用率とかメモリ使用量とかを非表示にするができるけど、どう
いうふうに実現しているんだろうね。
恐らく無茶苦茶簡単な方法が用意されている予感がしてならない。
873デフォルトの名無しさん:2005/12/24(土) 00:29:10
一瞬消えるので前面書き換えっぽい。WinSightでどのメッセージが飛んでくるか追っかければわかるだろうけどそこまでする気がしない。(w
874デフォルトの名無しさん:2005/12/24(土) 00:29:58
×前面→○全面
875デフォルトの名無しさん:2005/12/24(土) 00:47:03
> Widthを0にしても隠れているだけで境界をドラッグすると列が表示されてしまいますし

http://www.sakaki.keiaikai.or.jp/cgi-bin/ConvRoom/webconv.dll/alltree?No=17730
876デフォルトの名無しさん:2005/12/24(土) 01:02:55
そこまでやるくらいなら仮想リストビューで対応した方が楽だな
これならカラムの並び順入れ替えも簡単に対応できるし
877デフォルトの名無しさん:2005/12/24(土) 01:35:13
それならStringGridの方が楽でしょ
878デフォルトの名無しさん:2005/12/24(土) 01:43:16
>>877
頭悪くね?
879デフォルトの名無しさん:2005/12/24(土) 01:46:43
それならStringGridの方が楽でしょ
色もつけれるし
880デフォルトの名無しさん:2005/12/24(土) 01:51:01
派生コンポにコード埋め込めばいいんじゃないの? そのためにVCLがあるんだし。
881デフォルトの名無しさん:2005/12/24(土) 01:55:23
ListViewでやる方法聞いてるのに、
StringGridでやれば?ってどんな回答だよwww
882デフォルトの名無しさん:2005/12/24(土) 02:44:41
それをいううなら VirtualLisView もいっしょ
883デフォルトの名無しさん:2005/12/24(土) 02:56:15
文字も満足に打てない人に言われたくありません^^;;
884デフォルトの名無しさん:2005/12/24(土) 02:56:27
>>880
だからそのコードをだな(ry

>>882
仮想リストビューは立派なリストビューだろ
885デフォルトの名無しさん:2005/12/24(土) 03:06:47
仮想リストビューは柔軟性があるね
StringGridはどうしても機能的に限界がある
886デフォルトの名無しさん:2005/12/24(土) 03:07:39
そもそも用途が違う
887デフォルトの名無しさん:2005/12/24(土) 05:26:38
> リストビューでタスクマネージャーみたいに
> 列を非表示にしたいのですが、どうすれば
> いいでしょうか?

875 で解決したんだから、議論の余地なし。
888デフォルトの名無しさん:2005/12/24(土) 10:09:04
まだだ、まだ終わらんよ
889デフォルトの名無しさん:2005/12/24(土) 10:16:14
876で解決だろ
890デフォルトの名無しさん:2005/12/25(日) 00:23:47
DelphiのFree版はバージョン6が最新?使用前に登録しないといけないようだけど
登録用のサイトってどこ?
891デフォルトの名無しさん:2005/12/25(日) 00:25:17
>>1
892デフォルトの名無しさん:2005/12/25(日) 00:26:01
http://www.borland.co.jp/delphi/personal/
↑ここに詳細があるかもしれない。
893デフォルトの名無しさん:2005/12/25(日) 01:33:12
>>890
BDNのアカウントを作る
http://bdn.borland.com/delphi/0,1419,1,00.html
894デフォルトの名無しさん:2005/12/25(日) 03:25:20
Delphi初めて約半年
超基礎事項を理解し、簡単なアプリ、ミニゲームを2〜3個作り、クラスの概念をなんとなく理解した
このあと、何を学べばいいんだろうか。なんとなく自分としては
オブジェクト指向的な設計、クラスの自作、コンポーネントの自作、Win32API、VCLの内部処理
とやっていこうと思うんだけど、脱・初心者を目的としたオススメの指南サイトありませんか?
895デフォルトの名無しさん:2005/12/25(日) 04:24:49
>>894
> コンポーネントの自作、VCLの内部処理
http://www.impress.co.jp/ebook/title/263-1.html

> Win32 API
http://homepage2.nifty.com/Mr_XRAY/Halbow/index.html
http://www.amazon.co.jp/exec/obidos/ASIN/4822228266/
http://www.amazon.co.jp/exec/obidos/ASIN/4756136001/

> クラスの自作、オブジェクト指向的な設計
http://www.amazon.co.jp/exec/obidos/ASIN/4822281957/
http://www.amazon.co.jp/exec/obidos/ASIN/4774104272/
あとはデザインパターン本を1冊かなー。

ちなみに素人さんは上流の設計論は無視して良し。
ポトペタで楽しくやっている人がユースケースを書いても詰まらないと思うから。
896デフォルトの名無しさん:2005/12/25(日) 11:19:44
>>894
DelphianWorld へいって、簡単なコンポをDLして、その動作とコードを研究する
ことを勧めるよ。OOP も Win32API も自然に身に付くと思うし。
897デフォルトの名無しさん:2005/12/25(日) 11:41:14
開発者ガイド全部読みは基本だろう
898デフォルトの名無しさん:2005/12/25(日) 14:12:52
それは面白くないな。>開発者ガイド全部読み
899デフォルトの名無しさん:2005/12/25(日) 14:31:26
【アウトラインプロセッサ】keynote【OSS】
http://pc7.2ch.net/test/read.cgi/software/1135426816/

これを日本語化しようと思っています、興味のある人は協力お願いします。
900894:2005/12/25(日) 17:25:26
レスとんクス

>>895
やっぱりそろそろ入門本を買うべきなのか
ここまで全部無料で済ませてきたからweb上の情報だけでやっていきたいけど、そろそろ限界なのかな

>>896
なるほど、その手は思いつかなかった
うまい(きれいな)コードの書き方とかも気になってたから、さっそく何か落としてみます

>>897
使ったコンポーネントのプロパティ、メソッドの全部読みはやったけど、開発者ガイドはやってなかった
けど、初心者にとってdelphiのヘルプってなんか読みづらいんだよね
901デフォルトの名無しさん:2005/12/25(日) 17:38:08
>>900
大丈夫、開発者ガイドは誰が読んでも読みづらい。
902デフォルトの名無しさん:2005/12/26(月) 11:35:09
せめて分冊くらいはして欲しい>開発者ガイド(BCB6)
903デフォルトの名無しさん:2005/12/26(月) 12:13:54
カッターでちょん切ってテープで補強しろ
904デフォルトの名無しさん:2005/12/26(月) 16:36:10
MessageDlgPosで表示したダイアログを閉じるにはどうすればよいでしょうか?
905デフォルトの名無しさん:2005/12/26(月) 16:41:54
「OK」とか「はい」ボタン押せば閉じるだろ
906デフォルトの名無しさん:2005/12/26(月) 16:42:44
>>905
Delphiでお願いします
907デフォルトの名無しさん:2005/12/26(月) 16:49:18
MessageDlgPos部分のソース出せ
なんか話が噛み合わない
908デフォルトの名無しさん:2005/12/26(月) 16:53:39
>>907
MessageDlgPos('Are you there?',mtConfirmation, mbYesNoCancel, 0, 200, 200);
よろしくお願いします
909デフォルトの名無しさん:2005/12/26(月) 16:57:31
ユーザーにはい、いいえ、キャンセルボタンを押してもらうのではなく
プログラムで閉じたいってことか?
910デフォルトの名無しさん:2005/12/26(月) 16:58:30
>>909
はい、それです
911デフォルトの名無しさん:2005/12/26(月) 17:02:29
無理、そもそも使い方自体がおかしい
ユーザーがはい、いいえ、キャンセル選んでもらうのに勝手に閉じるとかありえない
912デフォルトの名無しさん:2005/12/26(月) 17:06:09
MessageDlgPosで表示されるフォームはモーダル付きだから
ボタンが押されるまでプログラムはそこで止まる

別アプリか別スレッドでらFindWindowAPI使ってダイアログのハンドル取得して
それにWM_Closeメッセージ送るとか?
この場合戻り値は何が返ってくるのかわからん
913デフォルトの名無しさん:2005/12/26(月) 18:31:25
Timer 使えば簡単ですが
914デフォルトの名無しさん:2005/12/26(月) 19:55:35
概観そっくりの偽プログラムとかは?
915デフォルトの名無しさん:2005/12/26(月) 22:34:13
>>904
ただ単にメッセージをMessageDlgPosみたいにポップアップで表示したいなら
新たなフォーム表示させてTimerで
if MsgForm.showing = true then MsgForm.Hide;
とかで消せばいいんじゃない?
916デフォルトの名無しさん:2005/12/26(月) 22:53:24
関数の検索って出来ないんですか?
TComponentのFindComponentみたいな感じで
TForm1内に存在する関数を検索したいのですが
917デフォルトの名無しさん:2005/12/26(月) 23:04:48
delphi6を使っています。
RestoreKey関数にてレジストリデータの上書きしたいのですが関数がTrueを返してくれません。

var
 Reg: TRegistry;
begin
 Reg := TRegistry.Create;
 with Reg do
 begin
  try
   RootKey:=HKEY_LOCAL_MACHINE;
   Access:=KEY_ALL_ACCESS;
   if RestoreKey('\SOFTWARE\hogehoge\hoge', 'C:\hivefile') = True then
    ShowMessage('OK!')
   else ShowMessage('Err');
  finally
   Free;
  end;
 end;
end;

918917続き:2005/12/26(月) 23:06:44
また、dwFlagsの値で未定義の識別子などと警告されるものがありました。
REG_FORCE_RESTORE, REG_NO_LAZY_FLUSH -> 何故か未定義と言われる
REG_REFRESH_HIVE, REG_WHOLE_HIVE_VOLATILE -> 関数がERROR_INVALID_PARAMETERを返す

var
key: HKEY;
begin
 if RegOpenKeyEx(HKEY_LOCAL_MACHINE,PChar('SOFTWARE\hogehoge\hoge'), 0, KEY_ALL_ACCESS, key)
  = ERROR_SUCCESS then begin
 try
  if GetSeRestorePrivileges = ERROR_SUCCESS then begin // SE_RESTORE_PRIVILEGE特権取得成功時
   if RegRestoreKey(key,PChar(C:\hivefile),REG_WHOLE_HIVE_VOLATILE) = 0 then
    ShowMessage('OK!')
   else ShowMessage('Err');
  end;
 finally
  RegCloseKey(key);
 end;
end;
919デフォルトの名無しさん:2005/12/26(月) 23:44:52
DVDISOをA12ROM化ってどうすればいいんですか?
板違いだったらすみません。誘導してください
920デフォルトの名無しさん:2005/12/27(火) 01:18:51
みんな VS に行ってしまったようだ・・・・
921デフォルトの名無しさん:2005/12/27(火) 01:31:36
>>916
関数をpublishedに置いてMethodAddress
922デフォルトの名無しさん:2005/12/27(火) 04:44:58
>>917-918
Windows.pasくらい見ろ
Personalだからソースないは無しな、Personalでもパッチ当てればあるから
未定義って言われてなんでそのメッセージを疑うんだよ
未定義だから未定義って出てるわけ、分かる?
923デフォルトの名無しさん:2005/12/27(火) 06:03:01
なんか嫌なことでもあったか?
924デフォルトの名無しさん:2005/12/27(火) 08:12:24
>>919
九族もろとも苦しんで死ね
925デフォルトの名無しさん:2005/12/27(火) 10:21:33
personal でも Windows.pas はあるわな
926デフォルトの名無しさん:2005/12/27(火) 10:33:26
まともなひとは みんな VS に行ってしまったようだ・・・・
927デフォルトの名無しさん:2005/12/27(火) 10:34:56
VSってなんじゃらほい
928デフォルトの名無しさん:2005/12/27(火) 10:37:42
.netは死滅します
.netは死滅します
.netは死滅します
.netは死滅します
.netは死滅します
.netは死滅します
.netは死滅します
.netは死滅します
.netは死滅します
.netは死滅します
929デフォルトの名無しさん:2005/12/27(火) 10:45:02
なら Delphi のIDEもお陀仏だな
930デフォルトの名無しさん:2005/12/27(火) 10:46:03
J# も使ってるらしいな > BDS2006 のIDE
931デフォルトの名無しさん:2005/12/27(火) 20:10:33
すみません、Delphiの質問じゃなくてDelphi付属のインストールシールドの質問かもしれませんが…

簡単なアプリ(ボタンを押したら文字が出る)をつくって、インストーラーつくってみました。
すると、インストールはできるんですが、アンインストーラーがついていないんです。
インストールシールドExpress for Delphiの設定で「アンインストーラーをつける」みたいな設定項目がみつけられないんですが、
これって、自分でアンインストーラーを作成して(Delphiやなんかで)一緒に抱き合わせてインストーラーに仕立てるんでしょうか?

Delhi アンインストーラーなどでググってみたんですが、意図したようなサイトがみつからなくて・・
932デフォルトの名無しさん:2005/12/27(火) 20:26:14
> Delhi

これじゃ・・・
933デフォルトの名無しさん:2005/12/27(火) 20:28:17
>>931
とんでもない勘違いをしているので、
とりあえずヘルプよく読みなさい
934デフォルトの名無しさん:2005/12/27(火) 21:40:13
>>931
特に何もしなくても「アプリの追加と削除」に普通に項目出てくるよ。
もう一回プロジェクト作り直してみたら?
935デフォルトの名無しさん:2005/12/27(火) 22:56:32
>>931
インド人嘘つかない
936デフォルトの名無しさん:2005/12/27(火) 23:01:51
そんなしょぼインストーラやめてMS製のインストーラ使えよ
937デフォルトの名無しさん:2005/12/27(火) 23:49:23
>>935
Delphi のバージョンとか
OSくらい書かないと。
938デフォルトの名無しさん:2005/12/27(火) 23:55:02
OpenDialogで 複数のファイルから1つを選択して処理をします
次に処理するファイルを選択するためにOpenDialogを開いたときに
すでに処理したファイルは選択できないようにできるでしょうか。
できれば すでに処理したファイルだけ赤字とか赤の横線に表示できないかと…
939デフォルトの名無しさん:2005/12/27(火) 23:58:31
UI として間違ってるような・・・
940デフォルトの名無しさん:2005/12/28(水) 00:13:58
ListView使って自前でリストれ
941931:2005/12/28(水) 00:34:43
>>934
えぇ、「追加と削除」からは削除できます。でも、市販のゲームとか買うと、スタート→プログラム→○○(自作アプリ)のとこにアンインストーラーも出るでしょう?
ああいう感じのアンインストーラーを期待してたんですが・・

>>937
OSはWin2000、Delphiのバージョンは5proです。
Delphiは姉から譲りうけました。
942ななしへたぐらま ◆XcB18Bks.Y :2005/12/28(水) 00:49:53
>>904-915
実例を見せる方が勉強になるかもしれないと思ったのでとりあえず作ってみました.
ユーザーが混乱しないように残り時間が表示されるようになっています.
type
 { ●制限時間付きメッセージダイアログ風フォーム
  ◆使い方
  CountdownFormのMsgにメッセージを書き込んでShowModal.
  どれが押されたかはShowModalの戻り値でわかる.
  ◆主なプロパティ
  Msg ... 表示したいメッセージ文字列を指定
  TimeoutSeconds ... タイムアウトするまでの秒数(デフォルト:3)
  TimeoutResult ... タイムアウトしたときにModalResultに代入される値(デフォルト:mrYes)}
 TCountdownForm = class(TForm)
  Timer1: TTimer;
  YesButton: TButton;
  NoButton: TButton;
  CancelButton: TButton;
  MsgLabel: TLabel;
  CountdownLabel: TLabel;
  procedure Timer1Timer(Sender: TObject);
  procedure FormShow(Sender: TObject);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
  FTimeoutSeconds: cardinal;
  FTimeoutResult: TModalResult;
  FLeftSeconds: cardinal;
  procedure UpdateCountdownLabel;
  procedure ResetCount;
  procedure CountDown;
  function GetMsg: string;
  procedure SetMsg(const Value: string);
(※しばらくつづく)
943ななしへたぐらま ◆XcB18Bks.Y :2005/12/28(水) 00:51:42
 public
  constructor Create(AOwner: TComponent); override;
  property Msg: string read GetMsg write SetMsg;
  property TimeoutSeconds: cardinal read FTimeoutSeconds write FTimeoutSeconds;
  property TimeoutResult: TModalResult read FTimeoutResult write FTimeoutResult;
 end;

◆設計時にコンポに設定するプロパティ
Timer1:    Enabled: False
YesButton:  Caption: '&Yes', ModalResult: mrYes
NoButton:   Caption: '&No', ModalResult: mrNo
CancelButton: Caption: '&Cancel', ModalResult: mrCancel

◆↓実装

procedure TCountdownForm.CountDown;
begin
 FLeftSeconds := FLeftSeconds - 1;
 if FLeftSeconds = 0 then
  Timer1.Enabled := False;
 UpdateCountdownLabel;
end;

constructor TCountdownForm.Create(AOwner: TComponent);
begin
 inherited;
 FTimeoutSeconds := 5;
 FTimeoutResult := mrYes;
end;
(※つづく)
944ななしへたぐらま ◆XcB18Bks.Y :2005/12/28(水) 00:52:14
procedure TCountdownForm.FormClose(Sender: TObject;
 var Action: TCloseAction);
begin
 Timer1.Enabled := False;
end;

procedure TCountdownForm.FormShow(Sender: TObject);
begin
 ResetCount;
 Timer1.Enabled := True;
end;

function TCountdownForm.GetMsg: string;
begin
 Result := MsgLabel.Caption;
end;

procedure TCountdownForm.ResetCount;
begin
 FLeftSeconds := FTimeoutSeconds;
 UpdateCountdownLabel;
end;

procedure TCountdownForm.SetMsg(const Value: string);
begin
 MsgLabel.Caption := Value;
end;
(※つづく)
945ななしへたぐらま ◆XcB18Bks.Y :2005/12/28(水) 00:52:48
procedure TCountdownForm.Timer1Timer(Sender: TObject);
begin
 CountDown;
 if FLeftSeconds = 0 then
  ModalResult := FTimeoutResult;
end;

procedure TCountdownForm.UpdateCountdownLabel;
begin
 CountdownLabel.Caption := format('あと%d秒', [FLeftSeconds]);
end;

◆呼び出し側(例)

procedure TForm1.Button1Click(Sender: TObject);
var
 s: string;
begin
 CountdownForm.Msg := '内容が変更されています.保存しますか?';
 {CountdownForm.TimeoutSeconds := 7;
 CountdownForm.TimeoutResult := mrCancel;}
 case CountdownForm.ShowModal of
 mrYes:  s := 'mrYesが選ばれました';
 mrNo:   s := 'mrNoが選ばれました';
 mrCancel: s := 'mrCancelが選ばれました';
 else   s := '???';
 end;
 ShowMessage(s);
end;
(※終わり)
946デフォルトの名無しさん:2005/12/28(水) 02:42:15
public
flag:word;

procedure TForm1.Btn1,Click(Sender: TObject);
begin
flag:=randomize(15);
end;

例えばボタンを10回押してflagの値が8,4,6,8,15,1,5...
コレをn回目の情報と一緒に格納して出し入れしたいのですが。
1-8,2-4,3-6,4-8,5-15,6-1,7-5...みたいに。
947デフォルトの名無しさん:2005/12/28(水) 02:42:15
>>941
追加と削除へのショートカットをインストール時に作れ
作り方はぐぐれば分かる
948デフォルトの名無しさん:2005/12/28(水) 02:44:01
>>946
flagを配列にすればいいじゃん
あと乱数初期化してどうする
949946:2005/12/28(水) 02:45:13
訂正
randomize;
flag := Random(15);
950デフォルトの名無しさん:2005/12/28(水) 09:54:26
>>946

そういう、「出来事」の数を数えることを「ヒストグラムをつくる」といいます。
こんな感じ。

procedure TForm1.Button1Click(Sender: TObject);
var
  histogram:array[0..15] of integer;
  i: integer;
begin
  randomize;
  for i := 0 to 15 do histogram[i] := 0; // 初期化
  for i := 1 to 100 do inc(histogram[random(16)]); // 100回の「出来事」
  for i := 0 to 15 do
    Memo1.Lines.Add(Format('%.2d - %.2d',[i, histogram[i]])); // 表示
end;
951デフォルトの名無しさん:2005/12/28(水) 10:57:23
質問者の意図とちょっと違うような気もするが
952デフォルトの名無しさん:2005/12/28(水) 11:08:34
procedure TForm1.Button1Click(Sender: TObject);
begin
 flag := Random(15);
 ShowMsg(Format('%d-%d', [count,flag]));
 Inc(count);
end;

こういうことじゃないのか?
953デフォルトの名無しさん:2005/12/28(水) 11:47:12
>格納して出し入れしたい
954デフォルトの名無しさん:2005/12/28(水) 12:20:42
エロス
955950:2005/12/28(水) 12:55:44
>>951

あはっ、そうでした。たんに配列を使うだけでしたね。>>948 で解決ですよね。
956デフォルトの名無しさん:2005/12/28(水) 14:28:03
CheckBox1.Checked := True って値を入れると
CheckBox1のOnClickイベントが発生しちゃいますよね

OnClickイベントを通らずに、CheckBox1.Checkedの値を変更したいんですけど、
何か良い方法があればご教授おねがいします
957デフォルトの名無しさん:2005/12/28(水) 14:45:42
CheckBox1がForm1に貼り付けられているとして、
メンバー変数にブーリアン値を用意する。
で、それを起動時にfalseにでも初期化して、
CheckBox1のChecked値を変える直前にそのブーリアンをtrueにして、
変更したらブーリアンをfalseに戻す。
OnClickイベント内では、最初に、ブーリアンをチェックして、trueならexitする。
958デフォルトの名無しさん:2005/12/28(水) 14:47:32
>956
begin
 CheckBox1.OnClick := nil;
 CheckBox1.Checked := True;
 CheckBox1.OnClick := CheckBox1Click;


959デフォルトの名無しさん:2005/12/28(水) 15:14:48
>>957-958
ありがとうございました。うまく動きました。
958さんの方法をお借りしました。
957さんの方法のほうが分かりやすいんですけど、あまり変数は増やしたくなかったんで。
でもいろんなものに応用は利きそうですね。

脳みそにしわが1本増えました。どうもです。
960ななしへたぐらま ◆XcB18Bks.Y :2005/12/28(水) 17:02:16
そろそろ次スレの季節でございます.とりあえずテンプレを貼りますのでご意見よろしくお願いします.すいませんがまた連投いたします.
タイトル:くだすれDelphi(超初心者用)その29
※『用』がしばらく抜けていたので復活
-----------------------
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者)その28
http://pc8.2ch.net/test/read.cgi/tech/1131168199/l50

<雑談・討論などはこちらへ>
バカボンのDelphi不買談話室その28
http://pc8.2ch.net/test/read.cgi/tech/1134668922/l50

<その他>
Borland Home Page
http://www.borland.co.jp/

#過去スレは>>2-10のどこかに
-----------------------
961ななしへたぐらま ◆XcB18Bks.Y :2005/12/28(水) 17:03:45
962ななしへたぐらま ◆XcB18Bks.Y :2005/12/28(水) 17:08:14
963デフォルトの名無しさん:2005/12/28(水) 17:48:02
イラネ
964デフォルトの名無しさん:2005/12/28(水) 17:54:56
もうどうでもいいです、はい
965デフォルトの名無しさん:2005/12/28(水) 18:42:16
乙。BDNも追加して欲しぃ
http://bdn.borland.com/delphi/
966デフォルトの名無しさん:2005/12/28(水) 20:09:20
967デフォルトの名無しさん:2005/12/28(水) 20:15:46
DelWikiのところは>>833に差し替えかな?
>>966はイラネ、必要なときはいつでもVSのスレに見に行きゃいいし
968デフォルトの名無しさん:2005/12/28(水) 20:17:49
966に反応するな
969デフォルトの名無しさん:2005/12/28(水) 20:45:10
俺はたるんだ某へのプレッシャーになるから>>966はあったほうがいいな。
いや、かならず入れるべきだよ。
970毛の生えたフサギコ:2005/12/28(水) 20:48:32
>>960
すみません。入力ミスで、その1からず〜っと気にしていたことですが・・・。

>何が何だが(×)
>何が何だか(○)です。

訂正をおねがいします。
971デフォルトの名無しさん:2005/12/28(水) 20:49:12
ところでInternet Archive から本家 DelWikiってみられない気がするんだが。
972デフォルトの名無しさん:2005/12/28(水) 21:18:14
ポート番号付けたら見られるよ。
973デフォルトの名無しさん:2005/12/28(水) 21:40:53
>>972
サンクス。見られました。
974ななしへたぐらま ◆XcB18Bks.Y :2005/12/28(水) 22:18:24
某社がアレだという点には同意ですが,このスレにいらっしゃる方というのは基本的にDelphiについて情報を得たい方です.
そう考えるとそういう人たちにとってはDelphiと無関係の情報はノイズでしかないと思うのです.
このスレでしつこくリンクを貼り付けるより,Visual Studioのスレを盛り上げて興味を引かせる方が効果的でしょう.
と,いうわけで,ほぼ全部取り入れてみた新しい >>1 です.BDEは役に立つ方がどれくらいいるのかという気もするのですがとりあえず入れました.
-----------------------
このスレッドはBorland(ボーランド)のDelphi(デルファイ)について、
他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

<前スレ>
くだすれDelphi(超初心者)その28
http://pc8.2ch.net/test/read.cgi/tech/1131168199/l50

<雑談・討論などはこちらへ>
バカボンのDelphi不買談話室その28
http://pc8.2ch.net/test/read.cgi/tech/1134668922/l50

<その他>
Borland Home Page
http://www.borland.co.jp/
DelWiki 避難所。
http://wiki.s54.xrea.com/delphi/
BDN(Borland Developer Network)※英語
http://bdn.borland.com/delphi/

#過去スレは>>2-10のどこかに
-----------------------
これから帰宅なので帰宅後もう一度来るつもりですが,徹夜明けなので爆睡してしまうかもしれません,そのときはごめんなさい.
975デフォルトの名無しさん:2005/12/29(木) 00:01:59
同じxreaというか無料鯖にwiki作っても旧wikiと同じ末路を辿るとしか思えないんだが。
というわけで有料鯖か自鯖でよろしく。
976デフォルトの名無しさん:2005/12/29(木) 00:07:00
wikiってログイン必須に出来ないの?
977デフォルトの名無しさん:2005/12/29(木) 00:15:25
>>975
何もできない猿がよく言うよ┐(;´〜`)┌
978デフォルトの名無しさん:2005/12/29(木) 00:29:15
MediaWikiなら編集者の履歴が残るが…マァ折角置いてくれたんだし、どうこう言うこともなかろう
問題は、Wikiは情報を溜める場所であって議論のための議論は他所でやれ、ってのがどこまで徹底できるか、かな
979デフォルトの名無しさん:2005/12/29(木) 01:00:51
すきにやればいいじゃないの。やなら見なけりゃいいんだし。
980デフォルトの名無しさん:2005/12/29(木) 07:35:34
ライブドアのwikiならログイン必須
981デフォルトの名無しさん:2005/12/29(木) 09:04:21
乙。BDNも追加して欲しぃ

駅で階段見上げたら女子中学生がいてさ、スカートの中見ちゃったんだよ。
そんでその女子中学生にいきなり振り向かれて
「せ、責任とってお嫁に貰ってください・・・」
って言われちゃったんだ。
俺は慌てちゃってさ
「・・え?は、はぁ・・・」
みたいに返してそのまま通り過ぎようとしたら
俺のシャツをチョコンと指で掴んでずっとついてくるのね。
そんでとうとう家までついて来ちゃってさ
「はじめてですけど覚悟は出来てます・・・」
とか言うわけよ。
俺もう理性が吹っ飛んじゃって

(全てを読むにはワッフルワッフルと書き込んでください)
982デフォルトの名無しさん:2005/12/29(木) 13:29:45
ワッフルワッフル
983デフォルトの名無しさん:2005/12/29(木) 15:57:03
すいません、THashedStringListの使用方法について教えてください。

やりたいことは「キー」と「値」をハッシュで管理したいのですが、使用方法が分かりません。
データを追加するときはAdd('キー=値')で登録するとして、データを取り出すときはどうするのでしょうか。
IndexOfName(キー)でインデックスは取得できるようですが、値は自分で分解するのでしょうか?
もっとスマートなやりかたが有りそうな気がするのですがヘルプを見ても分からないし・・・

よろしくお願いします。
984デフォルトの名無しさん:2005/12/29(木) 16:20:30
LoadFromFileじゃダメだった?
985デフォルトの名無しさん:2005/12/29(木) 16:40:40
今年も残り少ないのですが質問です。動的配列にExtended型のデータを入れて
いるのですが、これをファイルに保存したり読み出したりする方法をご存知の
方がいましたらご教授お願いします。(Delphi7Pro,WindowsXPです)
986デフォルトの名無しさん:2005/12/29(木) 16:45:55
>>983
TMemIniFile.ReadStringのソース見ると
Copy(Strings[Strings.IndexOfName(キー)], Length(キー) + 2, Maxint);
って感じで取ってるからそーゆーことなんじゃ?

つーかTHashedStringListの代わりにTMemIniFile使った方が扱いは楽かもよ
987デフォルトの名無しさん:2005/12/29(木) 16:55:35
>>985
やり方は山ほどある。
俺なら、TFileStreamを使って、
配列の中身を一個ずつ
filestream.write( ex , sizeof(ex) ) ; // ex : extended ;
とかするかな。
988デフォルトの名無しさん:2005/12/29(木) 17:00:11
>>983
i := hoge.IndexOfName('キー');
Value := hoge.Values[hoge.Names[i]];
989988:2005/12/29(木) 17:04:10
ごめ、IndexOfNameに気を取られすぎてた('A`)
Values['キー']で充分だな
990デフォルトの名無しさん:2005/12/29(木) 17:36:24
ワッフル!
991983:2005/12/29(木) 17:49:07
>>984
プログラムの中でしこしこしたかったもので。

>>986
TMemIniFileなんてあるのですか。なんでIniFilesユニットなのかと不思議でした。

>>988,989
あ、なるほど。この様に使うのですか。

皆さん、有難うございました。やっと使えそうです。
992デフォルトの名無しさん:2005/12/29(木) 17:56:06
>>987 ありがとうございます。TFileStream で検討したいと思います。
ただ、配列の要素数が数万件あるのです。試してみるつもりですが、
他の方法もご存知でしたら教えていただけますでしょうか。
993デフォルトの名無しさん:2005/12/29(木) 18:12:10
1要素のサイズが分かっていて、個数も分かってるんだから一行で TFileStream に書き込めるでしょ。
994デフォルトの名無しさん:2005/12/29(木) 18:16:40
そういやそうだな
995デフォルトの名無しさん:2005/12/29(木) 18:41:42
>>993 あ、そうなんですけど、性能が心配だったもので…
でも試してみたところ、1件の動的配列の読み書きはほとんど一瞬で終わりました。
ですが実は数万件の配列要素を複数(ユーザー次第)同時にI/Oする処理が追加に
なる予定ですので、(ブロッキングみたいな?)他の方法を聞いた次第なのです。
と、ここまで書いてきて、TMemoryStream に書いといてから Write する、みたい
な方法も思いついたのでちょっと試したいと思います。
996デフォルトの名無しさん:2005/12/29(木) 19:14:48
>>995
数が固定されてるならファイルマッピングとか
997デフォルトの名無しさん:2005/12/29(木) 19:26:04
>>995
Delphiでファイル書き込みってのはさ、基本的に4つなのよ。

1 ファイル変数を使う
2 TStreamの派生クラスを使う
3 その他のクラスを使う
4 Windows APIを使う

3の場合ってのは、今回なら例えば、一項目を一行のテキストデータにしておいて、
TStringListで書き込むとかいう場合ね。
998デフォルトの名無しさん:2005/12/29(木) 19:55:43
>>996 >>997 色々と情報、ありがとうです。要素数は固定されてないのです。
ファイルのI/Oもいろいろな方法がありますですね。小出しにしてすみませんが
将来は他のバイナリデータやテキストデータもいっしょくたにひとつのファイルに
書かなくてはならないので(さっき思い出しました)、TStream を使って進めて
行きたいと思います。
999デフォルトの名無しさん:2005/12/29(木) 21:05:08
次スレは?
1000デフォルトの名無しさん:2005/12/29(木) 21:17:52
ワッフルワッフル!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。