くだすれDelphi Part7 (超初心者向け)

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

★前スレ
くだすれDelphi(超初心者向け) Part6
http://pc2.2ch.net/test/read.cgi/tech/1063202727/

★その前
http://pc2.2ch.net/test/read.cgi/tech/1061090908/
http://pc2.2ch.net/tech/kako/1058/10588/1058834815.html
http://pc2.2ch.net/tech/kako/1055/10559/1055986736.html
http://pc2.2ch.net/tech/kako/1053/10537/1053757982.html
http://pc2.2ch.net/tech/kako/1051/10518/1051882835.html

・質問者はトリップ使用推奨。
・嘘を嘘と見抜けない香具師は質問に答えるな。
・言語叩きは他のスレでやってください。
・荒らし煽り騙りを見かけても非人道的に放置してください。
 時間もスキルも無い可哀想な人です。なま暖かく見守りましょう。
2デフォルトの名無しさん:03/10/04 00:42
質問者はトリップつけやがれい
3デフォルトの名無しさん:03/10/04 00:42
つれた
釣れた(藁
5デフォルトの名無しさん:03/10/04 00:42
Doubleの変数に格納されている数から小数点以下を取り出す、
あるいは整数部分だけを取り出す方法を教えてください。
>>5
釣れた(藁
7デフォルトの名無しさん:03/10/04 00:45
こんな時に新スレ立てるな馬鹿
>>7
釣れた(藁
9あぼーん:あぼーん
あぼーん
10あぼーん:あぼーん
あぼーん
11あぼーん:あぼーん
あぼーん
12あぼーん:あぼーん
あぼーん
.NETでもVBってところが厨っぽくて良いね
14あぼーん:あぼーん
あぼーん
15あぼーん:あぼーん
あぼーん
990 :ふらっとC♯(Part5) :03/10/04 00:03
このスレッドは

「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。

ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。

少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。

前スレッドはこちら
http://pc2.2ch.net/test/read.cgi/tech/1059028988/l50(Part4)
http://pc2.2ch.net/test/read.cgi/tech/1047210828/l50(Part3)
http://pc2.2ch.net/test/read.cgi/tech/1035895873/l50(Part2)
http://pc2.2ch.net/test/read.cgi/tech/1023766485/l50
>>16
テンプレあったのか。気づかなかった。
>>5
あっちに書いた回答をコピーしときましょ。
じきに嵐も消えるだろうし。

Frac(1.23) -> 0.23
Int(1.23) -> 1.0
Int の返り型は実数型だから必要であれば型変換を。
とあるソースをコンパイルしようとすると、
[致命的エラー] Main.pas(n): ファイル 'Hoge.dcu' が見つかりません
と出て先に進めません。こんな初心者にどうかお助けを。
まず、hoge.dcu または Hoge.pas がおまえのハードディスクにあるのかないのか。そこからだ。
>>20
検索したらHoge.pasはありました。別フォルダに。

と書いてふと思って同じフォルダにいれてやったらコンパイルできました。
同じ作者の他のソフトのソースフォルダに入ってました。
なんということだ、、、ReadMeにも書いてなかったよ。

これからは、.dcuが見つからないといわれたらまず検索かけることにします。
ありがとうございました。
>>21
ほかのフォルダにあるファイルをコンパイルしたい場合は、
プロジェクト・オプション・ディレクトリ条件の検索パスに、そのフォルダを指定するといいよ。
>>22
コピーしなくてもパスが通っていればいいのですね。
精進します。
24 ◆fkmwv8Qqe2 :03/10/04 17:16
StringGridでマウスで反転表示している部分の座標を取得するのは
どうするんですか?
イベントじゃなくって外部から判断したいんです.
25 ◆kWn0Gqv7s6 :03/10/04 21:47
Delphiの機能別関数一覧が載ったサイトはありますか?
よければ教えてください。
>>25
サイトは知らないけど、ヘルプにありますよ。
ヘルプの目次で、「VCLリファレンス」→「ルーチン一覧(カテゴリ別)」
27 ◆kWn0Gqv7s6 :03/10/04 22:11
>>26
助かりました。ありがとうございました。
28パソナラー ◆Tp0RXFvi3E :03/10/05 01:07
>>27
http://www.borland.co.jp/tips/delphi/dh002/index.html
こーゆーことじゃなくて?
>>24
StringGrid.Selectionは?
30デフォルトの名無しさん:03/10/05 01:49
delphiの質問スレは、超初心者、中級、上級に別れていますが、
どこからどこまでが超初心者なのでしょうか?

Delphiに関係するレスのテンプレを張らないのはなぜ?
31デフォルトの名無しさん:03/10/05 02:12
>>30
聞きたいこと書いて「あっち逝け」って言われたら
そこは自分と違うレベル。
32デフォルトの名無しさん:03/10/05 02:48
fpsについておしえて
33デフォルトの名無しさん:03/10/05 03:05
すいません、自己解決しました。
そいつは安心した
またアホアンチが荒らしてる
解決しました
このスレ荒らししかいないから終了だな
38600:03/10/05 21:52
なぜ>>16だけ生き残ったんだ?
>>38
レスが付いたものは削除対象から外れるというのは基本中の基本です。
荒しはスルーしないといけません。
40 ◆ng8/YNssIA :03/10/05 22:44
MDIなHogeHogeEditというのを作成して、無事動きました。
メニューのあるメインフォームと、子ウィンドウ用のフォームの二つで出来ています。
後日、これを他のアプリNanasiListで再利用しようとして、二つのpasをプロジェクトに追加。
メニューからHogeHogeEditの親を呼び出すところまではすんなりいきました。
しかし、NanasiListからHogeHogeEditのMDI 子ウィンドウをCreateさせる段階で、
「フォームが作成できません。有効なMDIフォームがありません」
と出てしまいます。
HogeHogeEditの親から子ウィンドウを作るメニューでやってみても同じく、
「フォームが作成できません。有効なMDIフォームがありません」
と出てしまいます。
どうしたらいいのでしょうか?
くそ、自己解決できない
>>40
長くてよく読んでないからハズしているかもしれなけど、
MDI親フォームはメインフォームしか出来ないよ。
>>41
氏ね
44 ◆ng8/YNssIA :03/10/06 00:29
>>42
NanasiListからHogeHogeEditのMDIの親を表示させることは表示できたのですが、子をCreateできないのです。
>>44
nanasiからhogehogeにメッセージ飛ばして
メッセージを受信したら子をcreateというのはどう?
46デフォルトの名無しさん:03/10/06 11:54
環境:Del7 WinXP

TIdFTPについて質問です。
ProxySettingsの設定について詳しく解説してあるHPなどを紹介して下さい。
もしなければ、ProxyTypeの部分だけでもご教授願います。

(ProxyのHostのところに適当なアドレスを入れて、Portのとこにも適当な数字を入れて
いるのに、なぜかデータが送信出来てしまいます。Proxy以外の設定はちゃんとしている
ので、プロキシの設定をしなければ通信出来ます。もしかしてこの状態で合っているの
でしょうか?)

宜しくお願いします。
>44
TFormのFormStyleプロパティが適切な値じゃないとかじゃない?
4846:03/10/06 14:54
訂正です。

>(ProxyのHostのところに適当なアドレスを入れて、Portのとこにも適当な数字を入れて

上記「適当」というのは「むちゃくちゃな」もしくは「デタラメな」という意味です。

>プロキシの設定をしなければ通信出来ます。

「プロキシの設定をしない状態ではもちろん通信出来ます。」という意味です。

ようするに
「デタラメなプロキシの設定にしているのに、なぜか通信出来てしまうのは
他に何か設定すべき項目を忘れていて、プロキシの設定がスルーされている
からではないでしょうか?」
という事です。

2回も書き込んでしまい申し訳ございませんが、宜しくお願いします。
"TIDFTP ProxyType"で検索するとよろし。
TImageのMouseDownからMouseUpの間だけ、
TImageのカーソルを変更しようとしたのですが、
Cursorプロパティの値としては変更されているのに、
画面上では変更されていません。

何とか画面上で反映させる方法はありませんか?
with Image1.Parent do
Perform(WM_SETCURSOR, Handle, HTCLIENT);
5250:03/10/06 23:21
>51
一応それでいきました。けど・・・
本当は自作カーソルに変更しているんです。
で、押下前Cursor1、押下中Cursor2、押下後Cursor1としているんですが、
実際には押下前Cursor1、押下中デフォルトカーソル、押下後Cursor1
って、なっちゃいました…(もしかしたら一瞬だけ押下中の最初Cursor2が出ているのかも…)

Perform止めて、SetCursor(Screen.Cursors[2]);ってしちゃいましたが、
問題ないでしょうか…(これなら一応見た目は期待通りなんですが)
変化するならSetCursorでも問題ない。マウスキャプチャ中はカーソルが自動で変更されないのがVCLの仕様だから。
自前ドラッグドロップを実装しようとする場合、この制限に苦労したりするんだよね。
余談だがOLEドラッグドロップはOLE側がカーソル変化させるから気にする必要はない。
WebBrowserを利用してちょっとしたブラウザ作っているんですが、
いくつか質問させて下さい

・ブラウザでページが表示され、その中のボタン(BBSの投稿ボタンとかのHTMLのFORMで作成されたボタン)
をEnterキーで押すことが出来ないので、押せるようにする

・キャッシュをすぐに読みに行ってしまうのをやめて、毎回しっかりとHTMLをDLするようにする

これらの方法が全くどうしていいものか解りません、どなたか教えて下さい
Enter 等、キー入力に関しては 2ch ブラウザのコードを参照すればよいかと。

キャッシュ管理に関しては WinINet の API リファレンスを見ればよいでしょう。

ドキュメントの読み込みまですべて IE コンポーネントに任せている場合でもコントロール
できると思いました。
56デフォルトの名無しさん:03/10/07 08:55
最近になって突然Delphiに触り、統合環境の起動速度 & コンパイル速度に感動したのだが

Delphiってどれぐらいの規模のプロジェクトまで一瞬でコンパイルできるの?
体験談を知りたい。
TOpenDialogにコンポーネントを追加することは出来ますか?
幾つかのコンポーネントを貼り付けたいと思っているんですが。
>57
できません。TOpenDialog は VCL のフォームではないからです。
SDK 的に拡張するにはダイアログリソースを用意する必要があります。
VCL ソースコードを読めるのであれば、OpenPictureDialog のコードを見れば
VCL だけで OpenDialog を拡張する方法がわかるでしょう。
5958:03/10/07 10:23
標準のコンポーネントでは、コンポーネントの貼り付けをフォームデザイナから行うことはできません。
探せば、デザイナに対応した拡張コモンダイアログセットがあると思う。
6058:03/10/07 10:31
>56
CPU 速度、ディスク性能、メモリの容量に影響されるので簡単には結論は出せませんが。

C/C++ と違って、ほとんどいつもプリコンパイルヘッダが利いているようなものだからね。
フルコンパイル/ビルドをかけるとそれなりに時間はかかる。

Unit1.pas 一万行の人は、フルコンパイルに何秒くらいかけてるのかな?
61デフォルトの名無しさん:03/10/07 10:39
>>56
Del1の頃に毎分35万行 Pen/90MHz
http://www.borland.co.jp/delphi/del1j.html

Del6の頃に毎分400万行(Pentium III)
http://www.borland.co.jp/delphi/papers/d6guide/d6guid20.html

6万行のプロジェクトでも1秒で終わる計算になります。

平均200行/日でコーデングしても1年で7万行です。

62デフォルトの名無しさん:03/10/07 11:11
マイコンピューターの画面で表示>詳細ってやった画面みたいな
項目名が上の一列に並んでいてそのしたにファイルやフォルダが並ぶっていう
ああいう画面はどのコンポーネントでしょうか??

additionalのStringGridが近いと思うのですが、枠の線があった若干違います。
どうかお願いします。

>>61
スゲ━━━━━━(゚∀゚)━━━━━━ !!!!!
>62
Win32タブのListView
ViewStyleプロパティをvsReprot
項目名はColumnsプロパティ
C/C++コンパイラは コンパイルの後にリンクが必要で
・リソースコンパイル・リンク
・インラインアセンブラを使うとさらにアセンブラ時間も必要だけど
Delphiは1パスで全部やっつけちゃうからね。
体感的にはめちゃくちゃ速い。
6662:03/10/07 11:42
>>64
できましたっ ありがとうございますっ
6758:03/10/07 12:04
>>65
んじゃなくて、C/C++ は原理的にソースファイルごとにヘッダファイルを読まなきゃいけないから。

Source1.c が以下で始まっていて、
#define hoge 1
#include <windows.h>

Source2.c がこうなっていたとする。
#define hoge 2
#include <windows.h>

C/C++ は言語仕様にプリプロセッサを組み込んでいるため、windows.h の数万行を読んで処理しないと
ソースコードが手に入らない。hoge の値が windows.h に影響を与えるかどうかをコンパイラが事前に知ることは
無茶なので、結局、ソースコードごとに関連するヘッダファイルを読まなきゃいけない。
プリコンパイルヘッダやヘッダのキャッシュで対応しようとしても本質的に限界がある。

これに対して Delphi ではプリプロセッサが言語仕様に存在せず、コードとコンパイル後のユニットの
同一性が保証され、かつ再利用できる割合が高い。このコンパイル済みユニットに型情報なども織り込むことで
フルビルドした場合でも、あるソースコードを参照するのは一回限り。メモリをつんでいれば
コンパイル後のユニットはメモリに残るので、RAMDISK を使っているようなものとなり、さらに速い。

SysIPAddress32(IPアドレスのEDITコントロール)を
コンポーネント化して公開しているところってありませんか?
これがあれば、IPアドレス指定が簡単になるんですが…
>>68
んなもん誰もコンポーネント化しねーだろが
>>68
そのうち俺が作る可能性Die
合計約5万行のプロジェクトをDelphi7で再構築で2秒くらいかな。恐らくファイルI/Oの時間が大半を占めている。
ちなみにSATA Raid0で1Gメモリ、P4 2.6GHzの環境です。
どういう条件で発生するかわからないけど、大きなプロジェクトだとコンパイラの内部エラーよく出るよね。
Delphi7だとそれに加えてコンパイル(リンクのほうかも)のほうもバイナリが不正に生成されることがたまにある。(Delphi6まではそんなことなかったのに)
そんな時は再構築で回避できます。速度が速いってスバラシイ。
7262:03/10/07 14:36
追加で質問させて下さい。
先ほどのListviewのクリックした地点の値を表示させようと
OnClickに

ShowMessage(ListView1.Items.Item[ListView1.itemindex].Caption);

と入力しましたが、一番左の項目以外だと例外が出てしまいます。
どうしたらよいのでしょうか・・・
お願いします
7362:03/10/07 14:56
自己解決しました。

RowSelectをtrueにしたところエラー起きなくなりました
ありがとうございました。
実は根本的解決にはなっていないがな。
7562:03/10/07 15:55
>>74
え・・・そうなんですか・・・
>69
あんたの言葉の根拠がわからん。
少なくともVB関連ではあるし、
Delphiではドイツ語圏(?)のページに
コンポというか、まぁ、サンプルはあるぞ。
>>76
URL
7954:03/10/07 17:57
>>55サン
サンクス なんとかWEBページをキー入力出来るようになりました。
なんだかよくわからないコードを貼り付けただけだけど

でもどうもキャッシュを読みに行くのが???です
flag:=4;
url := 'http://xxx.xxx/';
WebBrowser1.Navigate(url,flag,Temp,Temp,Temp);
としてやってみてるけども、キャッシュを読んでしまいます
少し変えて、Navigate2でやってみても同様の結果…
なんででしょ
>>79
対応していないから。MSDN嫁
81 ◆d03jRxpTIY :03/10/07 19:30
Delphi Personal6を使用しています。
文字列をURLエンコードしたいのですが、どうすればよいでしょうか?
82 ◆d03jRxpTIY :03/10/07 19:33
Delphi Personal6にはFastNetのコンポーネントのNMURLとかないのです。
>77
作るの?
>>81
function hoge(s: String);
var
 i: Integer;
begin
 Result := '';
 for i := 1 to Length(s) do case s[i] of
  ' ': Result := Result + '+';
  'A'..'Z','a'..'z': Result := Result + s[i];
 else Result := Result + '%' + IntToHex(Ord(s[i]),2);
 end;
end;
こうゆうこと?
TRadioGroupで、枠なし表示って出来ませんか?
>>85
TPanelの中に入れて、TopとLeftをマイナスにしてからパネルを小さくするとあら不思議
8785:03/10/07 23:05
>86
!(゚Д゚)!
88 ◆R4Q6BkIMsA :03/10/08 01:51
質問させてください。
Richeditで特定の文字だけに対して、色やフォントを変更するということはできるのでしょうか?
できます
90デフォルトの名無しさん:03/10/08 02:02
>>1
テンプレに「出来ますか系の質問はやめれ」っての加えるべきだったかも?
「出来る/出来ない」ってレスもらってもしゃーないもんな。

>>88
SelAttributesを検索してください。
9190:03/10/08 02:02
と、書いてる間に>>89が(藁
自演じゃないぞ。
>90
そんなこと書いても守るはずないじゃない。
無視すればよいだけだ
93デフォルトの名無しさん:03/10/08 02:25
右の乳首と左の乳首をint関数で暗号化したいのですけど
pingがC++だと通りませんが、delphiだとどうですか?
可能かどうかという質問に対してできると答えただけなんだが。
あとは調べればいいだけだろ。不可能なことを一生懸命調べても意味がないし。
だいたいヘルプを見るだけでわかる程度のことは事故解決しなくてはならない。
95デフォルトの名無しさん:03/10/08 02:51
>94 正論なんで、「くだすれ」にはこなくて結構です。ってことだ。
いやほんとに、時間とスレの無駄遣いはお互いしたくないでしょ。
*****をしたいと思い調べてみたのですが、解答が見つかりません。
そもそも*****は可能なのでしょうか。

これはどう?
メタ議論は別のところでやりませんか?
メタ議論ってなんだ?
99デフォルトの名無しさん:03/10/08 03:10
右の乳首と左の乳首をint関数で暗号化したいのですけど
pingがC++だと通りませんが、delphiでの参考プログラムお願いします
>>99
ネタ質はVBスレでやってくれませんか?
やはりDel厨はVBスレを荒らそうとしているのか。
102 ◆d03jRxpTIY :03/10/08 03:30
>>84
ありがとうございます。
いろいろやってWebBrowserに検索バーつけられました。
103 ◆KJX0hK92io :03/10/08 03:34
Delphi歴二ヶ月で簡単なプログラムが作れるようになりました。
次はマルチスレッドアプリケーションの勉強をしたいと思ってます。
なにかお勧めのチュートリアルや教則本はありますでしょうか?
Delphiに本なんかない。
ボーランドのサイトのDelphi部分にあるTipsかFAQのどっちかに
マルチスレッドアプリケーションの作成みたいなのがあるから
あれが分かりやすい。
106デフォルトの名無しさん:03/10/08 04:22
デルフィーとVCだと、同じ目的のプログラムでどっちの方が実行速度は速いですか?
>98 :デフォルトの名無しさん :03/10/08 02:56
>メタ議論ってなんだ?
存在する言葉なんだから自分で調べろよ。
108 ◆KJX0hK92io :03/10/08 05:19
 
109 ◆KJX0hK92io :03/10/08 05:19
>>105
Tipsのページにありました。
ありがとうございます
マルチスレッドにチュートリアルや教則本を期待されてもちょっと困るかな。
マルチタスク/マルチスレッドを作ることはとても簡単なことで、難しいのは複数の
スレッド間の協調/通信だったりする。
全体の性能を落とさずにデッドロックしないプログラムを作成するソフトウェア技術に関しては
本質的にはまだ結論が出ていない。

つーことで、深く学びたければソフトウェア科学の専門書を。
ちょこっと使うのなら、Delphi のマニュアルと、105 で指示されたドキュメント。

111デフォルトの名無しさん:03/10/08 10:15
複数人でプロジェクトを進行してますが、
変数名がバラバラで、管理していて頭が
痛くなってきました。みなさんの変数の
命名規則があったら教えてください。
変数名(ローカル変数でしょ?)くらい自由につけさせたらいいじゃない。

管理の必要もないでしょ? まさかグローバル変数使いまくり?
>>112
XPの常識に反した事言うなよ(w
好きだった女の名前を順に使ってますが・・・
RX Library
ttp://www.oxygensoftware.com/download/rx275d6.zip
これってさー、フリーで使えるの?

OverViewのところを翻訳しても商用不可とは書いてないように読めるけど、
英語に不自由の私としては自信が無くて…。
11662:03/10/08 11:53
すいません質問させて下さい。
Richeditで
RichEdit1.SelAttributes.Color := clRed;
としたのちに
if fontDialog1.Execute then RichEdit1.font := fontDialog1.font;
とダイアログでの色変更を反映させても表示はまったくかわりません。

RichEdit1.SelAttributes.Color := clRed;
をしなければダイアログで変更できたのですが、これはどうすればよいのでしょうか・・・?
11762:03/10/08 12:29
>>116
自己解決?かな

if fontDialog1.Execute then RichEdit1.font := fontDialog1.font;
の下に
RichEdit2.SelAttributes.Color := RichEdit2.Font.Color;
を加えてどうにか動きました。

お騒がせしましたぁー
フォームにメニューを貼り付けて
メニューにイメージを関連付すると
メニュー選択時の色が黒色なのは変更できないのでしょうか?
他のがWindowsで設定した色なのにここだけ黒なのは変ですよね?
119デフォルトの名無しさん:03/10/08 13:04
IEと全く同じ外観を持ったプログラムを作成中なのですが、
IEのステータスバーを見るとプログレスやらアイコンが
乗っています、Delphiでこれを実現する方法は?
120119:03/10/08 13:22
自己解決しました。
121デフォルトの名無しさん:03/10/08 13:31
>>120
引きこもりは死ね
>>118
環境の問題か、何かしら変なことをしている。普通はそのような現象は起きない。
>>119
FAQみたいなものだが、載せたいコントロールのParentをステータスバーに実行時に設定する。
>>123
なんかダサいね。
>>118
それは聞いたことがある。
とりあえず、http://www.geocities.com/delphihelp/ からメニュー関連の最新パッチを入手してみては?
Alt+F12押して.dfmちょっと弄れば設計時でも乗せられるんだけど。
機転が利かない上に文句ばかりたれる人は大変ですね。。
12746:03/10/08 17:08
>>46 >>48 です。

あれから、色々英語のHPなども見たのですが、結局分かりませんでした。

それで、思ったのですが、Indyの情報ってかなり少ないですよね?
もしかして、おとなしくTNMFTPでも使った方が良いのでしょうか?
>>122
WinXPとD7proでは 必ず再現しているみたいです、
単に新規フォームを作成してメニューを1つ貼り付けて
ImageListと関連付すると再現しませんか?

>>125
パッチを落としてみました。
ソース眺めてみます。ありがとう。
メニューはバグだらけ。
>>128
試しに他のPCで実行してみたら? 環境に影響されているかそれでわかると思うよ。
clMenuHighlight clHighlightText これらの値が期待したものかもチェック。
たまにXPのバグでこれらの値が変になっていることもあり。
とりあえず俺の環境では発生しない。

125はアクションメニューだから関係ないような。
>>130
色々と調べてみるとXPのWindowsクラシックスタイルの場合に再現するようです。
>>131
確認できた。クラッシク時に背景色がアイコン部分とテキスト部分で異なってしまうのですね。

回避するには...。互換性のあるオナニードローを実装するか、VMT書き換え(上級者向け)で
全TMenuItemに実装を変えたものを適用してしまうかかな。

最初黒色と言ったのでてっきりDC周りの初期化問題かと疑ってしまったよ。
クラッシクってなんだよw
俺の作っているアプリでも再現する可能性があるのでなにか対応しないといかんなあ。
またM$の非互換政策か…
>>131-134
がーーーっ、こんなことになっていたとは・・・。
なんで一番上だけ黒なんだよ・・・。
見えないわけじゃないからいいけどちょっと不細工
XPスタイル使用時にはメニュー関連で2色システム色が追加されているんだよね。
クラシック時にはこの2色が未定義状態となる。黒色なのはきっと0が返っているからだろう。
VCLのメニューでアイコン使用時は内部的にオナニー、もといオーナードローなんだけど
その描画メソッド内でXPという判定はしているけど、XPスタイルを使用しているかの判定は行われていない。
そのため今回のような問題が発生しているのだろう。
137118:03/10/08 23:45
だいたい場所と問題と修正箇所もわかったのですが、
マジで超初心者なものでDelphi的に良い修正方法が解りません。
この場合、直接VCLを修正するのはマズイのでしょうか?
何か良い方法はあるのですか?
138デフォルトの名無しさん:03/10/09 00:35
 処理の途中でスレッドが逝っても、自動的に
スレッドが立ち上がり、常に一定数のスレッド
が処理を行っているということがやりたいのですが、
スレッドを配列で宣言して、MyThread[i].Create(False);
とforで回しながら、一定個数のスレッドを生成して、
スレッドが死んだら、nilやTerminatedを判定して
死んだスレッドのインデックスを利用して、また
Createしてやるということをやろうとしてます。
ただ、スレッドの内部動作のせいなのか、Terminated
やnilがうまく判定できていないような気がします。
上記の実現方法でもっとよい方法があれば教えて
いただけないでしょうか。
>処理の途中でスレッドが逝っても、自動的にスレッドが立ち上がり
(((;゚Д゚)))ガクガクブルブル
ちょっとテストしたいのでガブリデュークが撃てる掲示板教えて下さい
自分でレンタルbbs借りてやってみたけど撃てないんですよね(汗
>>137
自己責任でどうぞ。
コンパイルするのはリリース版だけでもいいかもしれないけどさ、デバッグ版も別にやらないとなんとなく気持ち悪い自分。
くれぐれも環境を破壊して再インストールということにならないように。
>>138
排他処理して判定を行う
>>138
MsgWaitForMultipleObjects
144初心者:03/10/09 11:45
D7の購入を検討しているのですが、
なにやらアクティベーションがあるらしいのですが、
これは会社と自宅あるいはノートPCの2台にインスコすると撥ねられて
しまうのでしょうか?
客先でデバッグする可能性もあるのですが2ライセンスの購入が必要なのでしょうか。
>>144
ライセンスの件は直接電話で聞いて下さい。

ライセンスは契約の一つです。契約は個人と個人のものですからね。

なお、実際にやった結果は何の警告も出ませんんでしたよ。
>>137
VCLを直接直すより、派生して処理を変更する方がよい。
そうすると、Delphiを再インストールしたり、VCLのバージョンがあがっても平気。
147144:03/10/09 12:41
>>145
どうもありがとうございました。
ボーランド社に聞いてみます。
148デフォルトの名無しさん:03/10/09 12:42
>>142, >>143
ありがとうござします。もうひとつ教えてほしいのですが、
アイコンを16*16で作って、FormのIcon
プロパティに読み込ませたのですが、
実行時に上部のドラッグするバー(なんていうかわかりません)
に表示されません。また下部のタスクバーにゴワゴワしたアイコンが
表示されてしまうのですが、どうしたら直りますでしょうか。
アプリケーションのアイコンは[プロジェクト]-[オプション]で
32*32のアイコンをセットしています。
149デフォルトの名無しさん:03/10/09 13:00
MessageDlgのボタンのキャプション変更はどうすればよいでしょうか?
>>149
ぶっちゃけ無理なので、それっぽいダイアログを1から作るよろし
Delphiのアップグレードの優待価格っていくらぐらいですか?
152デフォルトの名無しさん:03/10/09 13:52
>>150
がーん
>>152
たぶん、よく使うだろうからコンポーネントで一つつくっておけば?
ついでに、プロパティでダイアログ画像かえられたりすれば完璧。
>>152
まあまあ、MessageDlgも中は自前でダイアログ作ってるんだからさ。

なお、MessageDlgは関数なんで、その作成途中に割り込めないからどうしょうもないんだよ
MessageBoxIndirect
156デフォルトの名無しさん:03/10/09 15:19
Delphiの勉強にシューティングゲームを作っているのですが、
自機が弾をいくつか撃って、3番目ぐらいに撃った弾が、敵に当たるとその
弾だけが消えるという事をしたい場合、
普通の配列変数を使うのは間違っているような気がします。

このような処理をする場合は、自前で最初から、
「この変数の次にはこの変数があって・・・」という情報を持つ
構造体などを定義して、それを処理する関数を作らないといけないのでしょうか?

他に何か便利な方法があれば教えて下さい。

宜しくお願いします。
157Del厨:03/10/09 15:21
>>154
> なお、MessageDlgは関数なんで、その作成途中に割り込めないからどうしょうもないんだよ
割り込み使えば良いじゃん。お馬鹿さん。
>>157
えー 割り込みってできるのー?
すごーい おしえてもらえませんかー?
155はスルーなのか・・・。とりあえずOSが用意しているAPIくらいは調べような。
161デフォルトの名無しさん:03/10/09 15:29
>>159
フックを調べれ。能無し。
>>156
配列構造よりリスト構造が適当か? という疑問かな?

初心者なら、
レコード型の配列でデータを持っておいて、その配列番号で管理したらいいんじゃないの?

レコード型にLinkNext というメンバーを持たせてそこに、次のデータのある配列番号を入れておく。
消去した時には、それに消去された方のリストをリンクしておく
>>161
よく考えてごらん。
モーダルダイアログなんで、メインスレッドからはそこにフックしようがないんだよ。
>>161
じゃー サンプル書いてみてよーー
フック って今知った言葉じゃないよね? ^−^
165163:03/10/09 15:38
ああ、そうか。勘違いしてた。Delphiのダイアログはダイアログじゃないから
WH_CALLWNDPROC でフックすればいけそうだね。
お前ら、いい加減にMessageBoxIndirect使ってください。お願いします。

161じゃないけど、MessageBoxでも無理やりフックすることは可能だよ。
できない言ってるやつはSetWindowsHookExを使ったことないの?
167163:03/10/09 15:48
あっと、 WH_CALLWNDPROC だとフックしてもメッセージを変更出来ないか・・・結構厄介だな。
となると、フックした最初のメッセージで、ボタンのを窓ハンドル取得して無理やり書き換えるしかないか

168デフォルトの名無しさん:03/10/09 15:52
WH_CALLWNDPROC(w
頭かてーな。
169156:03/10/09 16:04
>>158
スレ違いでした。申し訳ありません。

>>162
>配列構造よりリスト構造が適当か? という疑問かな?
そう、それです。一行で終わる話をダラダラと・・・(^^;

LinkNextの方法でやってみます。

どうもありがとうございました。
170163:03/10/09 16:35
出来た・・・・けど、格好悪いな

var First:Integer;
function WProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT stdcall;
var Msg:TMsg;
var cname:string;
begin
Msg:=PMsg(lparam)^;
SetLength(cname,1000);
GetClassName(msg.hwnd, PChar(cname),length(cname));
cname:=PChar(cname);
  if cname='TButton' then
  if First<1 then
  begin
   inc(First);
   SetWindowText( msg.hwnd ,'hoge');
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var hhk:HHOOK;
begin
First:=0;
hhk:=SetWindowsHookEx(WH_GETMESSAGE , WProc ,0, GetCurrentThreadId());
try
MessageDlg('test', mtError ,[mbYes],0);
finally UnhookWindowsHookEx(hhk) end;
end;
>>166
なんかかわいそうになってきたw
そんなの初めて知った。
Webで調べたけどのってなかったし・・・

>>138
>  処理の途中でスレッドが逝っても、自動的に
> スレッドが立ち上がり、常に一定数のスレッド

ってゆーかスレッドが逝ったらおかしいだろ。
逝かないようにしろよ。
173デフォルトの名無しさん:03/10/09 17:00
質問です。
Memo.text := IdHttp.Get('hoge');

StringList.Text := IdHttp.Get('hoge');
Memo.Text := StringList.Text;
ではどちらの方が表示まで時間がかかりませんか?
前者
>>174
thx
>>172
スレッド中でHTTPアクセスしてるので、
タイムアウトになると死んでしまうのです。
MessageBoxIndirectの使い方わかんねーよ・・・
調べたところICONが変えれるという事で利用されてるみたいだが
一般的な例が何処にも無い。
>>176
スレ違いだが、Delphiのlicense.txtにそのへんのことは書かれている。
VCLソースいじりなんぞ、単にコンパイルの設定を変えたに過ぎない。
生成物は自由に配布していいことになっている。
>>178
いっぱいあるのだが。
おや、こんな所にも!

var
Params: TMsgBoxParams;
begin
with Params do
begin
cbSize := SizeOf(TMsgBoxParams);
hwndOwner := Handle;
hInstance := SysInit.HInstance;
lpszText := 'オマエモナー';
lpszCaption := 'Captionですがなにか?';
dwStyle := MB_OK or MB_USERICON;
lpszIcon := MakeIntResource(1001); //リソース識別子は整数が必要
dwContextHelpId := 0;
lpfnMsgBoxCallback := nil;
dwLanguageId := 0;
end;
MessageBoxIndirect(Params);
end;
一時的にpopupmenuを抑止したいのですが、
どうしたらよいのでしょうか?
182181:03/10/10 08:57
解決できました。AutopopupをFalseにすれば良いだけでした。
(FormのPopupが出てくるから気が付かなかったんです。汗)
>>180のMessageBoxIndirectの例を元にボタンのキャプション変更は
どうすればいいでしょうか?
それと、リソースにICONを作りましたがMakeIntResourceの識別子の
指定方法がわかりません。
わかる方よろしくです。
>>183
モウアキラメロ
そう言わずに・・・
186151:03/10/10 15:36
結局、Delphi7Pro購入しちゃいますた
39000円だった。
.netに比べるとめちゃ安いなー
>>183
フォームもいっこ作ってって方法じゃだめなのー?
>>183
ボタンキャプションは指定することができない仕様なのでAPI一発は不可能。
まさかボタンの種類の指定方法がわからんと言うんじゃないだろうなあ。
HelpにもMSDNにもそこらへんのサイトにも説明は載っているぞ。
>>183
たぶん、それを言ってる人はダイアログのキャプションと勘違いしてるんだと思うよ。
ボタンのキャプションはムリっぽい。
>>149 これやってみぃ。ちと裏技っぽいが。

procedure Form1.Button1Click(Sender: TObject);
var
 MessageForm: TForm;
begin
 MessageForm := CreateMessageDialog('これはメッセージです', mtInformation, [mbYes, mbNo]);
 with MessageForm do
 begin
  Caption := 'NullpointerException';
  Top := 100;  //表示位置(指定しないと、Screenの中心に表示される
  Left := 100;
  Color := clAqua;
  TButton(FindComponent('Yes')).Caption := 'ぬるぽ';
  TButton(FindComponent('No')).Caption := 'ガッ!';
  try
   if ShowModal = mrOK then
    showmessage('「ぬるぽ」が押されますた。')
   else
    showmessage('「ガッ」されますた。');
  finally
   free;
  end;
end;
俺は随分前に自前のダイアログボックスを作って以来ずっとそれを使っているよ。
自分で作ってコンポーネント化して、
プロパティでボタンの数とキャプション変更
できるようにして、戻り値も決めるようなの
作ればいいじゃん。

一度作れば何回も使えるし、仲間でも
使い回しできるだろ。
>>193
よろ
「ダイアログの人」が「構って君」に認定されるまで、
あと数レス。
196デフォルトの名無しさん:03/10/11 03:48
Delphi7ProにGExperts1.12を入れるとフォーム移動時等に??(忘れた).bplが例外起こしてエラー。
さらにDel自体終了させるとエラーでまくりでぜんぜん使えないんだが、、他の方つかえてますか?
197デフォルトの名無しさん:03/10/11 13:06
TBitmapを使って画像の変換の仕方について教えてください。
TBitmapのFirstBmpを
ttp://v.isp.2ch.net/up/6a16c2d9dcab.png
のように変形してSecondBmpに入れようとしたいのです。
SecondBmpですべてのピクセルを走査して対応するFirstBmpの位置の色をコピーする
とやってみようかと考えたのですが、
どこにどう対応するのかの式がうまくつくれないのです…。
拡大、縮小ならできたのですが、台形にするのができません。
どうか教えていただけないでしょうか。
Delphiに興味あるプログラム未経験者です。
Delphi6Personalの動作環境なんですが、本屋で解説書を立ち読みしたら
XPが書かれていませんでした。でも、別の解説書を見たらXPの画面で色々、
説明していました。実際のところ、どうなんでしょうか? 
XPでも使えるんですか、使えないんですか?
>>198
Delhi6 がでたときには XP はまだ出荷されていなかったのです。
D6 は 2001/8月

XP は 2001/11月。

D6 は「Delphi 6 Update Pack 2」を当てることで XP 対応となります。
200デフォルトの名無しさん:03/10/11 14:08
>198
Delphi 6 は、Windows XP 上での包括的な動作検証は行なわれておりません。

詳しくは
ttp://www.borland.co.jp/delphi/devsupport/d6issues.html
>197

数学の時間ですか?
左上を原点としましょう。
元画像の左上原点が変換後画像の左上原点になるとします。すると
(0,0) は (0,0) に変換されることになります。

元画像の左下、(0, hi) は変換後画像の (0, h1)
元画像の右上、(wi, 0) は変換後画像の (wo, -(h2-h1)/2)
元画像の右下、(wi, hi) は変換後画像の (wo, h1+(h2-h1)/2)

にそれぞれ写像されます。変換後の図形が台形ということですから、右側の片は左の片に対して上下に (h2-h1)/2 だけ飛び出していることに気づいてください。
>197
後はこのような変形を行うための式を出すだけです。
元の画像の座標を小文字、変換後の座標を大文字とします。
一般座標変換の式として、以下の式を考えます。

X = ax + by + c
Y = dx + ey + f

これに四隅の値を入れて係数を見つけます。実際は3カ所代入すれば値は決定します。

X = ax + by
Y = dx + ey

0 = 0 + b * hi => b = 0
h1 = 0 + e * hi => e = h1/hi

wo = a * wi => a = wo / wi
k = d * wi => d = k / wi (k は -(h2-h1)/2)

よって

X = (wo / wi)x
Y = ( k / wi)x + (h1/hi)y
ただし k = -(h2-h1)/2
最後に、SetWorldTransform を調べてみましょう。
98/ME では使えませんが。

あとは GDI+ を調べることも意味があるでしょう。その場合でも基本的な変換マトリクスくらいは
自分で導出できるようにしておきましょうね。
>200
それは日本語の古い資料。
http://bdn.borland.com/article/0,1410,28187,00.html
「Delphi6 は XP の前に出荷されたんで動作保証されてないんよ。けど Update2 で動作保証とってあるから使ってくれや」

某 ML の過去ログだけを信じると、足下救われるぞ
ゴメン マチガエテタ。

元になる変換関数は以下の式で、(解き方は同じ)
X = ax + by + c
Y = dx + ey + f +gxy

これを解くと

X = (wo / wi)x
Y = ( k / wi)x + (h1/hi)y - (2k /(hi * wi)) xy
ただし k = -(h2-h1)/2

検算してね。
206198:03/10/11 16:33
>>199さん>>200さん>>204さん

ありがとうございます。とりあえず98SEにはインストールしているのですが(まだ使ってはいませんが)、
XPでも使えればいいのにな、と思っていました。これでXPでも安心して使えそうです。
207 ◆qQaAl04OQ. :03/10/11 17:57
こんにちは。
TListViewで検索結果を選択状態にしたいのですがどうすればいいでしょうか。
>>207
ListView1.Items[0].Selected:=True;のようにします。
209 ◆qQaAl04OQ. :03/10/11 21:07
>>208
ありがとうございます。
やってみます。
210197:03/10/11 23:48
>>201
ありがとうございます。
変換後画像が変換前画像より大きいこともあるので
X=f(x)、Y=f(x,y)でx,yのしらみつぶしだと空きがあいてしまいました。
汚い式になりましたけど、
x=f(X)、y=f(X,Y)にもできましたし、本当にありがとうございました。
>>206
安心してっていうか、MSはWindows98とSEのサポートを
打ち切った(よね?)し、98、SEでの開発はやめたほうが
よさげ(もちろんクライアントの都合あってのことだけど)。

なんかサポート終了後にでたDirectXだか、WMPとかいれて、
おかしくなった人がちらほらいるので、たぶん動作検証すら
していないかも・・。
212デフォルトの名無しさん:03/10/12 16:40
FormatDateTimeの表示のため、
一時的にロケールを変更したいのですが、
過去ログなど調べてみてもわかりませんでした。
どなたか教えていただけないでしょうか
>>212
何がやりたいのかわかんないけど、
各国の指定形式で表示したいなら

GetLocaleFormatSettingsでTFormatSettingsを定義して、
FormatDateTimeでやってもだめなのかしら。
試してないのでスマソ

時差がしりたいなら、設定できる国はそんなに多くないから、
手動でもいけると思うけど・・・。
214デフォルトの名無しさん:03/10/12 20:44
いま、TreeViewをいじってツリー形式の表示をさせようとしているんですが、
情報がたくさんあるので、レコードをポインタ型で扱い、TTreeNodeの
Dataプロパティにポインタで格納しています。

一定時間で書き換えるので、その都度、Treeview.Items.Clearでクリアして
再描画しているのですが、このときItemをClearした時点で確保したメモリは
解放してくれているんでしょうか。

解放してくれないようであれば、その都度、Nodeを全部なめてメモリも解放
しなくちゃいけないのですよね・・・トホホ
>>214
一個一個にOnDeletionが飛んでくるから安心しる
216デフォルトの名無しさん:03/10/13 00:40
PerlやPHPにあるような連想配列を使いたくなって色々調べたところ、
TBucketListというのがあると知りました。
ヘルプを見てみますと、
ポインタに対してポインタを割り当てるリストのようです。
これを連想配列のように使うにはどうしたら良いのでしょうか?

$AssocArray['hoge'] = 100;

↑のようなことを多少手数が多くなってもTBucketListで実現したいのです。
お願いします。
GraphicEXを使ってGifを表示できるソフトを配布したら特許侵害になりますか?
文字列に対する連想配列、って TStringList.IndexOfName('hoge') じゃだめ?
>>217
勿論、特許侵害です。
>217 & >219

日本では、個人使用の範囲では特許による制限は存在しません。
あとは、ここら辺でも読んで自分で判断してください。
ttp://www.watch.impress.co.jp/internet/www/article/2000/0210/lzw.htm


>>213
Thanks!
222216:03/10/13 14:24
>>218
TStringListは単純な文字列リストだと決めてかかっていたので、
NamesとValuesプロパティの存在を知りませんでした。
これで連想配列風の処理ができますね。
ありがとうございました。

ただ気になってしまうのがTBucketListの使い方です。
添字がポインタのため、動的に生成した添字でAddやFindやExistsは行えませんよね。

Str := 'hoge';
BucketList.Add( @Str, 関連づけたいデータのポインタ );

とすると、後から 'hoge' で参照することはできないし・・・。
ヘルプには「簡単なハッシュテーブル」とありますが。
>>222
単に使用したポインタを格納しておいて、
最後にまとめてForEachでnilするだけのもの
だったりして・・・・
誰かWDirectXの使い方を解説してるページ知らない?
DelphiXやQuadrupleDよりもプロパティやイベントいじる亊で
出来ることが多いみたいで初心者向きじゃないかなと思うけど
ヘルプやチュートリアルがない。
ちなみにgoogleで調べたはんいでは日本語のHPは
ないみたい。
functionを呼び出して、中で例外処理をしているんですが、
これってエラーが発生したときには、値がもどらないんですか?

例えば
function hoge():String;
begin
 try
  i := i / 0;
 except
  resu;t := 'Error';
 end;
 result := 'ok';
end;

みたいなのやりたいんだけど・・・
どうもnilが孵ってエラーになってるぽいなー。
ちと調べてみるか・・。
>>219-220
GraphicEXでgif表示できるソフトを配布するなら、特許期限の切れる04/6/19に配布したほうがよさそうですね
ありがとうございました
ああ、私のミスでしたすいません
try
 try
 except
 end;
finally
 result := '';
end;
でいけるっぽいですね。
ちと検証してみます。
229216:03/10/13 17:55
>>223
マジっすか?!
でもこれといった利用法が浮かばないんですよね〜。

>>226
try
 // 例外発生するかもしれない処理を書く

 // 例外が発生しなかった
 result := 'OK';
except
 // Try部で例外が発生したらここに来る
 result := 'Error';
end;

でいいんじゃないでしょうか。
必要なら>>228のように、try〜finallyでさらにネストする。
間違ってたらごめんなさい。
>>229
調べてたらTObjectBucketListとかでてきた。
海外で検索してもでてこないし、ひょっとして、
コンテナフォームとかでDelphiのコンポーネントが
使用しているような、すごくコアな部分なのかも・・・・。
>>231
そんなことはC#スレで言え。
コンプレックス丸出しで恥ずかしい奴。
C#スレの荒れ様はヒドイな。
C#って.netFrameWorkないと動かないんでそ?
その時点で駄目やん・・・・
↓バッファオーバーフローを理解していないのにバッファオーバーフロー煽り
238デフォルトの名無しさん:03/10/13 21:51
Delphiはバッファオーバーフローがあるので使ってはいけません
239デフォルトの名無しさん:03/10/13 21:52
VCLにトロイを仕掛けられます。
240デフォルトの名無しさん:03/10/13 21:55
Delphi.NETのデモ見たよ。何あれ。w
しょぼいねー。ププププ
あのくだらないことで申し訳ないんですが・・
画面にListViewがありまして
値を持っているArryList(中身がオブジェクト)をListViewにセットして
あげるという処理は Formにがつがつかかないで 別クラスで独立
させてあげたほうがベストですか?
別にビジネスロジックでもないので もしかして 別クラスに分ける
必要ないのかな?とふときになりまして。。
明日からまた仕事だと言う現実から逃避したい気持ちはわかる。
>>241
処理をどのユニットに書くかは、興味の対象が何に依るのか
による。だからその画面に関係する事柄ならその画面のユニット
に書くほうが良い。
244デフォルトの名無しさん:03/10/13 22:01
>>214
最初から別クラスにしておけば?
そのクラスを画面と同じユニットに書いたって良いんだし。
>>241
単に関数ひとつ書けば済むように思う。
関数なら移動も簡単だし
http://www.borland.co.jp/qanda/delphi/d0002785.html

String s1中の文字列
フォームをFormに、あをいに変換するにはどうすればいいん?
>>241
別Classで独立が正解だと思う。
そのArrayListになっているオブジェクトと、ListViewの
オブジェクトを、そのClassに渡す形にすれば、他でも
応用できるかもしれん。

生産性を上げるために、よく使われがちなロジックは、
すべてClassで作成して、最初は面倒かもしれないけど、
開発中のソフト専用じゃなく、汎用性を持たせたほうが
後から楽になると思う。
249デフォルトの名無しさん:03/10/14 07:53
スレッド処理を長時間行わせていると以下のような
エラーが発生します。

>EThreadがモジュールProject1.exeのXXXXXXXXXで
>発生しました。
>スレッド作成エラー:このコマンドを実行するの
>に十分なクォータがありません。


>EOSErrorがモジュールProject1.exeのYYYYYYYYで
>発生しました。
>システムエラー。コード:5 アクセスが拒否されま
>した。

スレッドは生成時にFreeOnTerminateをTrueに設定
しております。
上記エラーについてソースのgrepや検索をしてみま
したが、これといった解決に結びつく情報が見つか
りませんでした。どなたか解決方法をご存知では
ないでしょうか。
「スレッド処理を長時間行わせていると」
ってのと
>十分なクォータがありません。
からみて、リソースリーク関連かな?
タスクマネージャ等でアプリケーションとシステムの状態を監視しなさい。
まずは、問題を把握しましょう。

FreeOnTerminate を True にしても、Terminate しなかったら意味ないし、
解放し忘れリソースがあったらやはり問題だ。

>247
簡単にやるなら
s1 := StringReplace(s1, 'フォーム', 'Form', [rfReplaceAll]);
s1 := StringReplace(s1, 'あ', 'い', [rfReplaceAll]);
かね。
http://www.borland.co.jp/csharpbuilder/papers/cbuilder_from_delphi_developers.pdf
をみていて思ったのですが、C#Builderの開発意図というか、存在の意味って
どういう位置づけなんですかね。
Delphi for .net があれば十分なような気がするのですが。
>>252
Delphiに対するC++Builderの開発意図というか、存在の意味は?
>>253
C++を知っていれば、ObjectPascalを覚えなくても、その知識が使える。
多重継承等が使用できる。

意味はあるでそ。
>>254
なら、C#Builderも意味があると思わないかな?
>>255
んー、C#は新しい言語だから新たに習得するなら、その手間は
Delphiと同じだし、JAVA使いならJBuilderがあるし・・・・

あ、JBuilder for .netの予定がなくて、そのかわりがC#Builder
という意味ならわかるな。
>タスクマネージャ等でアプリケーションと
>システムの状態を監視しなさい。
いちど検証してみてみます。

>FreeOnTerminate を True にしても、
>Terminate しなかったら意味ないし、
>解放し忘れリソースがあったらやはり問題だ。
Terminateはtry〜finally〜end;のfinally節内で
やっています。
DateTimePickerで時間表示をする場合に、
デフォルトではhh:mm:ssとなっているんですが、これをhh:mmだけにするにはどうすればいいんですか?
>>251
ありがとう
Memo1にテキストファイルを呼び込んだ時に
それ加えたらできた。
>>258
表示する横幅を小さくして、時:分にするだけじゃだめかな?ww
261デフォルトの名無しさん:03/10/14 12:32
RicheditやMemoの背景に画像を表示させたいのですがどうやるのでしょうか??
色の変更のみしかできないのですか・・・?
>>258
と思ったら、Format指定できるじゃん。
プロパティのFormatにhh:mmでいける
Format プロパティ(TDateTimePicker)参照
>>261
TMemo では(標準では)できません。これは Windows そのものの制限です。

ttp://homepage1.nifty.com/cosmic/delphi/vcl.html
の「背景透明化可能 拡張エディット&メモ」はどうかな?
>>261
ttp://www.borland.co.jp/qanda/delphi/d0009386.html
ttp://abcde.e-city.tv/page1.html

詳しくはみてないですが、このあたりも参考になるかと
265261:03/10/14 13:01
>>263-264
情報ありがとうございます。
参考のページを見ながら試してみます。
ありがとうございました
>>254
TObject派生クラスは多重継承できなかったはず。
しかもnew演算子での動的確保必須。

で、THotKeyでWindowsキーを捕捉する方法 or コンポってありますか?
すいません、自己解決しました
バージョンアップを続けてきたら、最近のは重いから古いのを使ってるっていわれました。
開発に使ってるパソコンは高スペックなので、重くなったことに気がつきませんでした。
Delphiで作ったソフトで、重くなる要因ってなんですか?

たぶんここで言う重いってのは起動速度かと思っています。
レスポンスがいちいち遅くなってるとは思えません。
269デフォルトの名無しさん:03/10/14 22:24
Delphiしようと思ってるんだけど、始めは何をすればよいでつか
使用バージョンは6.0Personalです

あと、初めて作るのにお勧めのプログラムも教えてくらさい
sl := TStringList.Create;
これがしてあったら
sl.free;
を行いたいのですが、どののようにすればできるのでしょうか?
>>269
とりあえず、「こんにちは。Delphi」と表示することだな。

>>270
意味が分からん。あなたが書いているとおり、Freeすればいいだけ。
sl := TStringList.Create;
try
処理
finally
sl.Free;
end;
if sl <> nil then FreeAndNil(SL);
sl が公開されていると言う前提で、こういう話では。
FreeAndNil という奴を使った事無いので
これが正しい使用法なのかわかりませんが。
>>269
Life with Delphi(MDIなメモ帳)
http://www.geocities.co.jp/SiliconValley-Bay/3828/
Delphi はじめの一歩(ブラウザ)
http://delphi.sakura.vg/index2.html
を見ながらアプリを作って、不満なところを他のサイトを参考にして直していけば楽しく出来るよ。

>>270
if sl <> nil then sl.Free;
でも、>>271のほうが安全確実
274270:03/10/14 22:47
>>271-273
ありがとうございます。
今作っているプログラムは272さんか273さんので、できそうです。
FreeAndNilを使う前に、nil以外かどうか確認する必要はないよ。
中でやってるから。
276デフォルトの名無しさん:03/10/14 23:07
delphiなんてマイナーな言語なんで今更始めるんだろ・・
漢は黙ってFreeAndNil(sl);
if不要
278デフォルトの名無しさん:03/10/14 23:14
作り終えたexeファイルのアイコン変えるのってどうするの?
279272:03/10/14 23:15
なるほど、便利ですねぇ。
>>278
アイコン変えて作り直してください
281258:03/10/14 23:57
>>262
遅れましたけどできました。
ありがとう。
プロジェクトのオプションでアイコンファイルを指定します。
それからコンパイルしなおせばOK
メモ帳の枠サイズやフォントの設定はどこに保存されているんですか?
あと、Delphiからメモ帳のヘルプを起動する方法も教えてください。
>>283
HKEY_CURRENT_USER\Software\Microsoft\Notepad
285デフォルトの名無しさん:03/10/15 16:13
WinHelp に、ヘルプファイル名を渡せば表示されないかな? > 283
>>283
C:\WINDOWS\Help\notepad.chm
を実行するだけだと思われ
287283:03/10/15 16:39
どっちも見つかりました。
これでメモ帳になりすますソフトが作れそうです。
>>287
タスクバーの右クリック対策をお忘れなく。
289283:03/10/15 16:49
>>288も忘れてました。
           _________
   ∧,,∧   / ページ設定の
  ミ,,゚Д゚彡 <  実装は教えてホスィ
   ミつ旦(ミ~~ \ >>メモ帳
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪
あと、ショートカットキーのDelキーの
扱いとかも、注意ね。
FindComponentを使おうとしたら[エラー] hoge.pas(774): 未定義の識別子 : 'FindComponent'と出て
先にすすめません。
なにか、必要なことがあれば教えてください。
未定義の識別子エラーに対する一般論

その識別子を定義しているユニットを uses 節に追加しているか?
「使うぞ」と宣言しないと使えないよ。

エラーを出している識別子がクラスのメソッドやメンバーの場合、(クラス名).(識別子名) という長い名前を持っている。
と考えてよい。クラスの外から使う場合には何らかの形でクラス名を指定しなければいけない。

これで解決できない場合には、エラーが出ている行を提示してみなさい。
>>292
FindComponentのユニット名ってなんでしょうか?
ソースもヘルプもないの?> 293

エディタ上で "FindComponent" って打って、単語の上で F1 押して何か出ませんか?
所属するクラス名がわかるから、クラス名の説明ページに行くとそのクラスを定義している
ユニット名がわかります。
>>268
Delphi固有の重くなる要因というのはあまり思いつきません.
恐らく重くなっているのはアルゴリズム的な理由か
使っているWindowsの機能がユーザーさんの実行環境で重くなっているかだと思います.

#実はプロジェクトオプションの『最適化』のチェックがはずれているとか…
 でもたいていは最適化しなくても充分速いので可能性は低いと思います.

そのユーザーさんに遅くなる箇所や実行環境を尋ねるのがよいと思います.
本当は実際に遅いPCで実行してみるのが一番よいのですが.

Delphi7でエディタを別のエディタで開く事はできないでしょうか?

DelWikiにある「別のエディタで開くツール設定」はDel7ではできないようなので。
TEdit/TMemo で、文字を右に寄せるにはどうしたらよいのですか?
295 さんの記述に補足

>268
速度が遅いことの原因はそれこそ無数に考えられるので、具体的なものが無いと具体的な話はできません。

経験則としては
・不必要なフォームを起動時に大量に作成している。
・それらが巨大なリソース(ビットマップとか)を抱えている。
・遅いマシンは古い OS を使っていることが多く、実は OS 間の動作の差異だった
・遅いマシンは古い CPU を使っていることが多く、キャッシュが効きずらい
・機能を追加していく過程で、不必要なデータ構造を用意/作成している。

どれも Delphi 固有の話ではなく、一般論ですが。
>297
フォームデザイナ上で確認できなくてもよければ。

プログラムの適当な位置(初期化部とか)に
SysLocale.MiddleEast := True;
を追加。

あとは TEdit や TMemo の BiDiMode を bdRightToLeftに設定。
not((Boolean式)or(Boolean式))
の式って、もっと簡略化出来そうな気がするんだけど、
not削ってorをxorにするだけでいいのかなぁ…
なんかxorって直感的に理解できない…
おいおい。
義務教育から集合論が抜けた影響かなぁ?

not( B1 or B2 ) = (not B1) and (not B2)

B1 と B2 をそれぞれ分割できないのであれば、これ以上の簡略化はできません。
302300:03/10/16 06:47
>301
即レス感謝。要因として、
・xorが理解出来ていない
・Delphiでこの式を簡略化できる構文・演算子の類がサポートされてるのかなとか思った
だけですんで… まぁ義務教育程度の数学ならなんとか。
Delphi使い始めて日が浅いのでご勘弁を…
>>302
論理式としてそれ以上簡単にはできないのですよ。
せいぜい、専用の判定関数を作ってそれに渡すとか。

1 + 1

をもっと簡単に表現したい。といわれても困っちゃうでしょ?
304一応書いておく:03/10/16 09:23
A B A xor B
0 0  0
1 0  1
0 1  1
1 1  0

A xor B = ((not A) and B) or (A and (not B))
というか、xorの使い方知りたいんでしょ。

A:=A or B;
とかいってビットフラグをたてることがたまにあり、
このフラグを消す場合、
A:=A xor B;
と書くことがあるんだよ。
SetWindowLongでこういうことをよく使う。
xor は 面白い使い方が色々あるね。
1、レジスタ同士の交換
2、マスク代入 (指定したビット位置にだけ代入する)
  a :=a xor ( (a xor b) and mask) )
3、2を応用して チャタリングキャンセラ(2度同じなら採用する)
>305
ビットフラグを立てるときに A:=A or B; は使うけど、
クリアするときは A := A and (not B); ではないかな?
A:=A xor B; は反転だよ。

解っていて、ケアレスミスで間違えたんだと思うけど。
既に立っているならクリア出来るけど、あんまりやるべきじゃないね。
300 さんは 304-308 の話が理解できるようにちゃんと勉強してください。

基礎勉強は大事です。使う言語や OS, 環境が変わっても基礎は生きます。
以上、年寄りの説教ということで。
310始めました ◆1TogqVyiR6 :03/10/16 10:54
delphiを昨日から始めた物です。
質問なのですが、edit では Caption で文字を表示したりできるのですが
MemoだとCaptionがないのです。
Memo.Text := 'なんとか' で表示させられるのですが
起動時に毎回ヤルのはなんだかちょっと・・・
左のプロパティでどうにかできないでしょうか?
>>310
VBとかでは Edit(1行編集)とMemo(複数行)が同じですが
Delphiでは分かれています。

Edit の文字初期値は Text
Memo の文字初期値は Lines です
>>310
なんかよく意味がわかんないけど、
FormCreateのところで、memo1.text := ''じゃだめなのけ?
いやなら、memoを右クリック、エディタで表示、
Lines.Strings = ('')のとこの文字を変更して保存するとか。
313始めました ◆1TogqVyiR6 :03/10/16 11:08
>>311-312
左下の奴の Linesの右にある・・・をクリックしてMemoの内容を変更できました。
どうもありがとうございます。

また困ったら来ますので宜しくお願いします
ListboxやChecklistboxのItemsをiniファイルか何かに
保存して、また読み込めるようにしたいのですが、微妙に分かりません。
どなたかお助けください。
>>314
items.SaveToFileじゃだめかな
ヘルプのTStrings参照
VS.NETみたいなタブコントロールを公開してるところを見つけたら教えてください。
MagicシリーズのVCL版みたいなのを。
>>316
Magicシリーズっていわれてもわからん。
Delphian World、Indy、JEDI、TORRYを
delphi、VCLとともに検索汁
318314:03/10/16 14:01
>>315
レスどうもです。
それも試していたんですが読み込むのが分かりません。
保存はできるんですが読み込もうとするとエラーでフリーズします。
var aaa:Tstrings;
begin
aaa:=listbox1.items;
aaa.SaveToFile('text');
で保存して
begin
aaa.LoadFromFile('text');
listbox1.items:=aaa;
だとなぜ読み込めないんでしょう?よく分かりません。
>>318
listbox1.Items.SaveToFile('C:\test');
listbox1.Items.LoadFromFile('C:\test');
320319:03/10/16 14:23
>>318
TStringsで悩んでそうだから補足。

TStringsは抽象クラスだから、そういう使い方は本来できない。
直接、インスタンスしないでくださいというヘルプ通り。

もし、aaaにいったん入れてからやるのなら、TStringsを継承している
TStringListあたりを利用して

var
aaa: TStringList;
begin
aaa := TStringList.Create;
aaa.LoadFromFile('C:\test');
listbox1.Items.AddStrings(aaa);
aaa.Free;

とでもすればよろし
321デフォルトの名無しさん:03/10/16 14:27
初歩的な質問ですみませんが
ValueListEditorのヘルプはどこでしょう?
6Personalなのですがリンク切れとなっていて見つかりませんでした
また、WEB上にもほとんど情報を見つけることができませんでした
Delphi7のヘルプには存在するのだが。Delphi6貧乏ユーザのことなど知らん。
C++Builder6 Personalのヘルプにも存在するのだが。Delphi6は‥‥‥‥ごめんなさいっ!
>>321

プロパティ
Cells ColCount DisplayOptions DropDownRows ItemProps KeyOptions
Keys RowCount Strings TitleCaptions Values

メソッド
DeleteRow FindRow InsertRow Refresh RestoreCurrentRow

TCustimGridを継承。
あとはDel6の補完機能でなんとか汁

325314:03/10/16 15:26
>>319-320
レスありがとうございます。できるようになりました。
なんとなく概念が分かってきました。もちっと勉強してみます。
ありがとうございました。
326始めました ◆1TogqVyiR6 :03/10/16 15:34
でもあたしはいつもお姉系だけどね
327始めました ◆1TogqVyiR6 :03/10/16 15:36
ぁぅ・・・・
誤爆です・・・・
>>327
ワロタ
ちょっとでも気に入った。
なんでも聞いてくれww
329デフォルトの名無しさん:03/10/16 18:12
右クリックのプロパティで表示される
[場所]と[ファイルタイプ]の文字列を取得したいのですが、
どうすればよいでしょうか。
>>329
レジストリを調べる
ttp://www.hitachi-to.co.jp/prod/prod_2/inter/emk/help/TecInfo/hint/GetMediaTypeFromReg.htm
あたりを参考に。レジストリ、拡張子で検索するとたくさんでてくるよ。

場所については、順番が逆だと思うが。
通常は、このファイルをみようと思ってプロパティを開くわけで、その時点でパスはわかっていると思われ。
すいません、自己解決しました。
>>330
ありがとう。がんばってみます。
333デフォルトの名無しさん:03/10/16 22:01
ShellListViewからListViewにドラッグした際に、ドラッグされたファイルのパス
をListViewに表示させたいのですがうまくゆきません。、ListView側のDragDrop
は以下のようになっています。なにが違っているのでしょうか。

procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
Path: String;
begin
Path := (Source as TShellListView).Selected.Caption;
ShowMessage(Path);
end;
>>331
何が自己解決したのか、書いてくんないとわかんない・・
>>334
そーゆーネタでしょ。多分。
どのソフトのソースを見ても
例えばItem := TMenuItem.Createをしたのに Item.Freeがされていませんが、いいのでしょうか?
親メニューが破棄されれば自動でFreeされる。また明示的にFreeしても親メニューから削除される。
ソースを見れば一目瞭然なんだが。
ほとんど常に、メニューアイテムは TMenu/TPopupMenu と一緒に使われる。
その場合、TMenu/TPopupMenu の破棄と同時に所属する TMenuItem も破棄される。
ので、ほとんどの場合問題ない。

もし、たとえば自分で TMenuItem を挿げ替えたりしている場合など、TMenu に所属していない
単独の MenuItem を使っているときは、自分で何かをしないといけない。

TComponent 一族の共通の能力
>>338
TComponentの派生は、すべて親が破棄されれば自動的に破棄されるってこと?
それとも
type
TForm1 = class(TForm)
の中にあるか、親のFormを指定しなければいけないときはフォームを破棄すれば、
自動的に破棄してくれるってこと?
>>333
フルパス ShellListView1.SelectedFolder.PathName;
ファイル名 ShellListView1.SelectedFolder.DisplayName;
スレ違いかもだけど、パスワードの解析ってできるますか?
342デフォルトの名無しさん:03/10/17 12:25
SamplesタグのTShellListViewは見た目はいいけどイマイチだな。
Shellを扱えるいいコンポーネントないのか? (for Del7)
>>341
スレ違い。二度と来るな。
>341 コードがあればできるよ。
345341:03/10/17 12:34
すんません(´・ω・`)
>>342
>>317
ちょっと上のレスぐらいみれ
347バグですか?:03/10/17 13:42
Delphi5・BDE5.11でTBatchMoveを使用してParadoxテーブルのコピーを
行った所、「ディスク容量が足りません」って出ます。
ディスクの空き領域が4.00G(4,295,634,944)付近の場合のみ発生します・・・
ちなみにテーブルは200M程度なので、足りないわけ無いはずなのですが、
ディスクの空き領域が3.99Gになると発生しません。
何か分かる方居ますか?
>>346
DelのShell系コンポは全部バグバグで使えるこれぞ本命ってのが
ないよな。
>>348
そう?

ttp://homepage2.nifty.com/Mr_XRAY/Delphi/plFileDialog/B_OtherCompo.htm
ttp://hp.vector.co.jp/authors/VA015730/vcl/vclworld.html

あたりもだめ?
ちゃんと使ったことないからわからんけど。
>>349
>hp.vector.co.jp/authors/VA015730/vcl/vclworld.html
は使った。実行したらドライブのアイコンがなぜか
秀丸のアイコンになってたよ。
351デフォルトの名無しさん:03/10/17 14:02
クラスのインスタンスをリスト構造でつなげようと思うのですが、
こんな作りで良いのでしょうか?
アドバイス宜しくお願いします。

type
TMyProc = class
      before,next : pointer;
end;
TPMyProc = ^TMyProc;

procedure Create;
begin
new(pMyProc);
pMyProc^ := TMyProc.Create;
end;
構造体でリスト構造を作っていて、その後クラスにする必要性が出てきたので
こんな風になってしまいました。
このあと、BeforeやNextメンバに入れていくコードを書いていて、
実際に動いているのですが、クラス自体がポインタなのにそれを
さらにポインタにしている、こんなコードで良いわけないような気がしましたので、
アドバイスを宜しくお願いします。
>>350
ワラタ
TImageListで指定できないのね・・・

今の仕事が終わったら、ヒマになるし作ってみるかなw
>>351
なんだかソースをみても、よくわからんけど、以下、参考までに。

ttp://hp.vector.co.jp/authors/VA009712/take/delphi/pointer.htm
>>351

type
TMyProc = class ;
TMyProc = class
      before,next : TMyProc;

とやったら変な事やらなくても 良いと思うが?
ループがぐるぐる回っている(中でApplication.ProcessMessagesは発行しています)時、
ボタンコンポに対して、CM_MOUSEENTER、CM_MOUSELEAVEが
全然送られてこなくなってしまうのですが、対応策はないでしょうか?
>>355
.ProcessMessages -> HandleMessage ではダメ?
357351:03/10/17 16:13
>>353
とても参考になりました。
ありがとうございます。

>>354
できました!
ありがとうございます。
>356
HandleMessage…ってのが有るんですね…知らなかった…
早速試してみます。
359355:03/10/17 16:25
…なんか思いっきり処理が止まったようになる…(;´Д`)
>>355
スレッド使えよ
>>359
スッドレwはここで
www.borland.co.jp/tips/delphi/dh004/thread_1.html
362355:03/10/17 16:38
メインフォームのButton1OnClick中で
・前処理
・サブフォーム呼び出し
・サブフォーム閉じるまで空ループ
・後処理
って、しているんですが、サブフォーム呼び出し中に、
メインフォームは操作できないけど、場所移動とかは出来るように、
ShowModal使ってないのですが、どのような感じで
スレッド書けばいいのでしょうか…?
>>359
HandleMessageは Idle処理を回すから、 マウスイベントも処理してくれる筈だけど
その代わり処理がなかなかやってこない。 数回に1度 ProcessMessages -> HandleMessageとしてみたら?

ただ、ProcessMessages をそんな長い間呼ぶよりスレッドが使えるような処理ならスレッドで処理した方がいいよ
>>362
・メインフォームのButton1OnClick中で
・前処理
・サブフォーム開く
・メインフォームの WindowProcイベントの設定
・サブフォーム側の閉じる処理で後処理 + メインフォームの WindowProcイベントを元に戻す

--
メインフォームの WindowProcイベントでメインフォームメッセージ以外を殺す

てのはどう?
365355:03/10/17 16:54
みなさん色々とありがとうございます。
もう少しなんやかんやで頑張ってみます(;´▽`)
>>362
というか、その空ループの意味がわからん。
メイン→サブフォーム呼び出し
 ↓        ↓
待機  サブフォームで処理
 ↓        ↓
後処理←サブフォーム閉じたらメインに通知

みたいに、すればいいんじゃないの?
メインで空ループするんじゃなくて、処理が終わったら
メインにある後処理関数を呼び出せばいいと思うのだが、
これでも、メインは固まるっけ?
367355:03/10/17 17:05
後処理も含めて、一つの関数内なので…(;´Д`)
>>367
よくわからんが、すごい関数でつね
369363:03/10/17 17:16
あ、メインフォームの 子コントロール の全部のWindowProcを設定して
メインフォームのWindowProcは触らないようにしないと逆か

あるいは Application.OnMessage でやるか
370355:03/10/17 17:25
>368
いえ、つくりが下手なだけで…

要は1関数中で問い合わせのダイアログを表示する、
ただし、呼び出し元のフォームは触れるようにするため、
ダイアログはShowで表示し、
ダイアログのModalResultを受けて、後処理する。

…だけなんです…
>>370
やぱーり関数を二つ作ったほうがいいと思われ。

1 SendMessage、PostMessageでイベントを発生させて後処理
(サブフォームの結果はメインの変数に入れる)

2 サブフォームのボタンを押したとき、サブフォームを閉じて、
メインの関数を実行させる。結果は引数で渡す

3 タイマーで定期的に監視。メインの変数が変化していたら
フォームが閉じられていたとする。

4 TEditをVisible := Falseで設置、サブフォームの結果を
Edit.Textに入れ、EditのOnChangeをイベントがわりに後処理を開始。

待機させる方法はたくさんあるよ。
Del6.0つかいはじめますた。

Form1からForm2をどうやって開けばいいんですか。
なんにもわからなくて。
たぶん単純に作ったと思うので、
Form2.Show;で表示されるのでは?
374372:03/10/17 19:25
>>373

解決しましたありがとうございます。
usesに追加しないといけないんですね。
メッセージが出たから分かりました。

ありがとうございますた。
皆さんはデルを学ぶときに最初は本を買った?
それともネットでしらべた?
struct{
  char *moji;
  int *a;
  int  d;
}ckd[]={
  "M",    ¶_st,    0,
  "S",    ¶_st,    1,
  "16",    ¶_bit,   0,
  "8",    ¶_bit,   2,
  "",     NULL,      0,
};
これをdelphiで定義したいんだが
どう書いたらいいのだろうか
ここで知った
ttp://www.dell.com/
>>376

type

  Tckd=record
    moji:PChar;
    a:^Integer;
    d:integer;
  end;

const

  ckd:array[0..4] of Tckd = (
    (moji:'M' ; a:¶_st ; d:0),
    (moji:'S' ; a:¶_st ; d:1),
    (moji:'16'; a:¶_bit ; d:0),
    (moji:'8' ; a:¶_bit ; d:2),
    (moji:'' ; a:NIL ; d:0)
  );

(Delは基本的に変数の宣言と初期化を同時にすることが出来ない
配列も要素数を明示する必要あり)
TListの便利な使い方について等のtipsサイトってございませんか?
Tlistについて勉強中なのですが、いまいち掴めなくて……
>>375
本もネットもなかったYo! 俺の時代は。
資料はDelphiのマニュアルとVCLソースだけさ。
Del本なんてなくてもなんとかなる。
>>379
便利も何もオブジェクトのポインタ格納する動的配列でそれ以上でもそれ以下でもない気がするんだが‥‥
C++STLのstd::vectorのVCL版
>>375
オレはネットで調べまくったよ。で、めぼしいページは保存。
けっこうたってから「オフィシャルコースウェア」の内容は必要ない
ものとなってたよ(オレの思い違いって話もあるが(藁)。
初心者は断然ネットの解説ページから入った方がいいと思う。
安くあげるならね。
383デフォルトの名無しさん:03/10/18 03:56
>>347
Paradoxのエンジンには2GBの壁があって、2GBづつしか使えません
4GBはちょうど2倍のあたりなんで、それにひっかかったんでしょう

2GB以下の容量でHDDにパーテションを切って使うとよいです。
>>383
中級部屋にもう答えが書いてありました・・・
>>375
@nifty のDelphi会議室が国内ではもっとも充実した場所。
いまからだとどうやれば見れるのかなあ。
NIFTERMなんて新規ユーザーは使えないし。
スクロールバーを動かすと、そのPositonプロパティの数値を
TEditのTextぷろぱてぃにセットしたいんですけど、string()でキャスト
するとエラーになってしまいます。

どうすればよいでしょうか。
>>386
IntToStrで自己解決。

失礼。
>385
FDelphi を持ち上げて ML を出さないところが香ばしい。

今は、ここ / 2ch が一番生きがいいでしょ
2ch が一番生きがいです
活きがいい
BDE(エリアス)について質問です。
このエンジンAS/400系等のいわゆるオフコン系とのやりとりでよく使用され、実績もある
みたいですが、オラクルやMS-SQL鯖に使えますとマニュアルに書いてあります。

しかし、BDE使ってオラクルからデータを吸い上げて加工するような開発環境でデルファイ
を使用するって聞いたことがありません。(少なくとも私の範囲では。)
なぜでしょうか?

1:オフコン以外とやりとりする以外に使えないダメエンジン
2.エンジンは優秀なのだが、Web系(JAVA等)に流れている
3.パートナー企業の多さでMS製品群に押されているだけ。

いずれかだと思うんですが実際どうなんでしょう?
>>391
技術者としての自分の判断力より、他人の事例を聞きたいと。
まず、BDE にはオフコン接続能力なんてないぞ。何かと間違えているんじゃ?

あなたの周りでは、オラクルからデータを吸い上げて加工する開発環境では何を
使っているのですか?

単に
4.世界が広いことを知らない。
ではないのかな?
>392

そのとうり。
私はその他の人の開発環境をよく知りません。

技術者としてやってるわけではなく、業務上オフコンを使用する1ユーザーとして
我流でデル勉強してAS400ドライバ使ってWinの画面で操作できるように
しただけという感じで、(なので超初心者向けに)いろいろ質問できる人がいないのですよ。

で、例えば、在庫管理や人事関係はオフコンで動いているけど
経理、財務系はオラクルDBで動いるとしてそっちのDBも触れるように
してみたいけど、実績とかどうなのかと思って。
(なので超初心者向けに)
=>(なので超初心者向けに投稿)
です
Delphi/AS400 は、BDE を使って AS400 に接続しているわけではないですよね?
BDE は、SQL link というプラグインのようなものを使うことで、各種のデータベースに統一した
インターフェース/コードで操作できます。その代わりにここのデータベースに固有の機能が使えなくなります。

Oracle が Delphi/JBuilder を正式開発ツールとして売っていたことがある。ってのはご存知?
396デフォルトの名無しさん:03/10/18 22:52
ExcelのファイルをCSV形式で保存したいのですが、SaveAsのFileFormat引数の
名前を教えてください。

//ファイルを保存
ExcelWorkbook1.SaveAs('C:\Work\Test.xls'{FileName},
Null {FileFormat},
Null {Password},
Null {WriteResPasswrd},
Null {ReadOnlyRecommended},
Null {CreateBackup},
xlShared {AccessMode},
Null {ConflicResolution},
Null {AddToMru},
Null {TextCodepage},
Null {TextVisualLayout},
0);
凄いYO!
http://navi-on.jp/0.php?p=22
とってもおもしろいよ。みんな楽しんでるし・・
とりあえずみてみて
   ∧,,∧          ・
    ミ,,゚Д゚彡
.   ⊂/ ∀(つ.
    (-∞-)
     (,/ (,/
399デフォルトの名無しさん:03/10/18 22:57
>>397

早速のご回答有難うございます
RegisterClassWでつくったユニコードウィンドウに、
SetWindowTextWでキャプションを指定して文字化けします。

SetWindowTextW(Form.Handle,'あああ');
ws:='あああ'
SetWindowTextW(Form.Handle,PWideChar(ws));

ともにダメです。
なにか変換が必要なのでしょうか?
助けてください。
>>400
それは正しくUnicode化がされていない。
Unicodeバージョンを使用するには、基本的には全ての末尾WのAPIを使用する必要がある。
だが、CreateWindowWまたはCreateWindowExWを使用することでUnicodeのウィンドウを生成することができる。
それとウィンドウが生成されていない時のテキスト保持はVCLが内部的に処理しているが
その処理はAnsiベースなため、Unicode化した時の整合性を保つ工夫をしないと予期しない動作が起きるかもしれない。
標準コントロールなどはGetClassInfoWを使用して正しくサブクラス化しないとUnicode化されない。

SetWindowTextWだが、そのようにAnsiとUnicodeが混在したイリーガルな状態だと正しく動作しないことがある。
その場合直接CallWindowProcまたはCallWindowProcWでWM_SETTEXTを処理すると問題を回避できる。

部分的Unicode化はとっても面倒なのでスキルの高くない人にはお勧めしません。
次期Delphiに期待するか、開発環境を変えるほうがいいでしょう。
>>400
キャプションに何が入ってるか調べて!
403400 ◆UV8VW4VRAk :03/10/19 02:38
VCLじゃなくてKOLをいじっています。
DefWindowProcを置き換えたらキャプションはうまくいきました。
//初めに出てくるDefWindowProcの前
function DefWindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
 Result:=DefWindowProcW(hWnd,Msg,wParam,lParam);
end;
こんな感じでいくつか置き換えています。

エディットコントロールを張ったのですが、IMEからの日本語が化けます。
日本語のペーストは化けません。ハングルも化けません。
SetWindowTextWは化けます。
ほかに何か見落としてないでしょうか?
KOLって何だ?
IMEからの入力文字化けはおそらくWM_CHARを正しく処理していないかも。
SetWindowTextWの文字化けは前述した:原因で現象が発生する。SetWindowTextWを使用した回避方法はない。
WM_PASTEで化けないのはOS内部で処理しちゃっているからUnicode<->Anisな処理が介入しないためである。
ASCIIな入力とかきちんとできているかと思うけど、たまたま上位が$00なためAnsiとUnicodeで一文字単位の
メモリイメージの一致で動いていることもあるので、テストする時はWideChar(#$0101)など$00が入らないデータでやるとよい。
>>404
ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/3282/
クラスを一切使わずにObject型をベースに作ったVCLみたいなライブラリー
KOLって
ttp://bonanzas.rinet.ru/
なのか?
ソースを30秒ほど斜め読みした限りはAnsiベースですね。WM_CHARの処理はやはりバイトだったので上位8Bitの情報落ち。
それと構造というかまるまるVCLと同じ部分があることからVCLベースということが推測できる。
407デフォルトの名無しさん:03/10/19 11:02
TListItemsを別のTListItemsにマージしたいのですが、
そのためのメソッドが見当たらないのですが、どうするのでしょうか。
自分でコード書いてください
409400 ◆UV8VW4VRAk :03/10/19 22:37
>>404とか>>406とかは関係ないようです。
試しに、APIのみでユニコードエディットボックスを作りましたが同じ症状です。
このAPIのみのウィンドウのプロシージャはDefWindowProcWしか呼んでいません。
何か他にやるべきことはないですか?
401に既に書いたけど、全部Unicode版のAPIを使用しましたか?
KOLではPeekMessageを使用しているよね。Unicode版はPeekMessageW。
PeekMessageWを使わないとAnsi化されてメッセージが来ちゃうよ。
でPeekMessageWを使えば使ったで、プログラム全体に影響が出るので全体の完全Unicode化が必要になるっと。

とりあえずWM_CHARのデータがちゃんとUnicodeで来ているか確認汁。きっと'?'が着ていると思う。

Unicode Ansi混在でのIME入力を正しく処理する方法はあるけど、
まず問題をきちんと把握するのが先決だ。

ここまで書いてみたけど、最初の質問から詳しい状況が書かれていないから、予想ですまそ。

それと、Unicode化されているかはエディットコントロールの場合、ポップアップメニューを表示させるとすぐわかる。
Unicode化されている場合はUnicode特有のメニュー項目が追加されて表示されます。
411400 ◆UV8VW4VRAk :03/10/20 01:35
WM_CHARは正常で、異常なのはWM_IME_CHARと、WM_SETTEXTです。
Kolユニット内で置き換えたり、Windows.pasで置き換えたりしても直りませんでした。
原因がわかったので一応書いておきます。
メインウィンドウのループでGetMessageがFalseになるまでループというのがあり、
ここがAnsi版であるため、KolでもVCLでもおこる現象で、
これを修正するよりも、Kolをやめて、
意外に簡単なことがわかったので、全部APIでやることにしました。
せっかくかまってもらったのにすみませんでした。

参考にしたサイトは、
http://halbow.cool.ne.jp/
↑AnsiだけどAPIのみで作る方法
http://hp.vector.co.jp/authors/VA028375/contents/ObjectPascal_with_Self.html
↑Unicodeでサンプルメモ帳
C#Builder が使っている Ver7.1 の VCL には、UNICODE 対応版が含まれているって知ってた?
VCLのバージョンってどこに書いてあるの?
bin\vcl71.bpl
D7 は System32\vcl70.bpl
7.1の詳細が知りてー。ソースが見てー。
C#Builder のオブジェクトインスペクターが UNICODE に対応している。
エディタも対応しているけど、VCL を使っているわけではないから別かな?

ヒントウィンドウとかはまだまだ。

ひとつのアプリケーションで、UNICODE ウィンドウと今までのものを共存させているので
興味深い。
えーと、もしかして Wizman さんこれみてます?
指定座標が指定矩形内にあるか判定するのは
どうすればいいですか。

単純にif文羅列になってしまうんですか。
PtInRect
フォームのCanvasにLineToとかで線を書いても
フォームが隠れたり、別フォームが重なると描画したものが消えます。

消したくないのですがどうすればいいですか。
>>419
ありがとうございます。それで解決。
>>420
2つの解法をご提案します。
1、描画関数を作っておき それをフォームの OnPaint内で呼び出す
2、フォームに TImage を貼っておき、そのBitmapプロパティに描画する
>>422
どうも。おかげさまで出来ました。
424デフォルトの名無しさん:03/10/20 15:44
DateTimeToStringやFormatDateTimeが正確な日時を
取得できず、動作が怪しかったのでヘルプを読んだら
スレッドセーフとそうでない形式が載っていました。
私のプログラムはスレッドを使用していたので、
スレッドセーフの形式にしたのですが、
それでも正確な日時が取得できませんでした。
どうしたらよいでしょうか

var
DateStr, FileName: String;
TmpFormat: TFormatSettings
TmpDateTime: TDateTime;
begin

GetLocaleFormatSettings(GetUserDefaultLCID, TmpFormat);

TmpDateTime := Now();
DateTimeToString(DateStr, 'yyyy/mm/dd', TmpDateTime, TmpFormat);・・・@
Label1.caption := DateStr;

DateTimeToString(DateStr, 'yyyy年mm月dd日hh時mm分(ddd)', TmpDateTime, TmpFormat);・・・A
FileName := DateStr; 
end;

なんどコンパイル、再構築しても、@は正常な表示がされるのですが、Aは
ある特定の時間(どこから取得されているかわかりませんが)になって
しまいます
>>424
1、
DateTimeToString(DateStr, 'yyyy年mm月dd日hh時nn分(ddd)', TmpDateTime, TmpFormat);//・・・A
にしても同じ?

2、別スレッドで処理してるなら VCL は使わない方がいいよ。 つまり Label1.Caption もダメ

3、 SysUtil SysUtilsをそのユニットで別に使ってないかい? 

×3、 SysUtil SysUtilsをそのユニットで別に使ってないかい? 
○ Now そのユニットで別に使ってないかい?  SysUtils.Now ではダメ?
GetMemで確保した領域をFormOnDestroyの時にFreeMemをしたらいつも例外がおきます。
任意の時に開放するのは可能なんですが、OnDestroyの時は駄目でわけがわかりません。
どうしたらいいの?
>>427
1、OnDestroyでブレークポイントかけてポインタ値を確認したら?
2、GetMemした時に その領域とその前少しにデータブレークポイントを仕掛けて誰が書き換えてるか見てみたら?
THintWindow上の子ウィンドウを表示するにはどうすればいいのでしょうか?
ボタン等を動的作成して、ParentをHintWindowに設定しても表示されませんが。。。
430429:03/10/20 18:50
ただし、HintWindowのParentがnilの場合です。
>>430
HintWindowはコントロールです。コントロールは親を必要とします。
それ自身を親にしたいならフォームにしなさい。
432429:03/10/20 19:07
THintWindowはTWinControlを継承しているから、コンテナとして問題ないはずでは?
433デフォルトの名無しさん:03/10/20 20:06
multipart/form-data
のパラメータを受け取るにはどうすればいいですか?
>>429
ためしにやってみたがきちんと表示されたよ。
やり方が間違ってるんじゃない?
とりあえず、問題の起きるコードを出せ。話はそれからだ。
>>432
コンテナにはなっても表示が出来ないでしょ? というかだからそれで困ってるんでしょ?
だったらフォーム継承になさいな。
どうしてもというなら隠したフォームを親にするとか
436429:03/10/20 21:23
>>434
var w: THintWindow;
w := THintWindow.Create(Application);
TButton.Create(w).Parent := w;
w.ActivateHint(Rect(0, 0, 64, 64), '');

>>435
単に子ウィンドウを表示したいのではなくて、THintWindowを継承して、
子ウィンドウを表示するためのコードを知りたいということですけど。。。
(ただし、HintWindow.Parentはnil)
>>436
そのコード実行してみたけど、Delphi7だと表示されたよ。
きっとそちらで何か間違っているんじゃないかな。
もう少し自分のコードを疑いましょう。
マルチアカウント対応のメールチェッカーを作ってるのですが、
OOP的には、どんなクラスを作ればよいのでしょうか?
考えてみたのですが、上手くまとまらないっす…。
括弧がisA、罫線がhasAの関係です。
(あるソフトのプラグインとして動作させるので、TTimerなどは使ってません)

TMailCheckerPluginMain (TObject)         * メインクラス
  └ TMailCheckThreadList (TClassList)     .* スレッド用リスト
      └ TMailCheckThread(TThread)        * 周期チェックを行うスレッド
          ├ TMailChecker(TObject)        .* メールチェッカークラス
          |  ├ TIdPOP3              * Indy POP3 コンポ
          |  └ TMailAccount = record     * メールアカウント情報(設定等含む)
          └ TSimpleTimer(TObject)        .* 周期チェック用自作クラス

これだと、おかしいですかね?
439429:03/10/20 21:56
Forms.pasを参考にコードを追加したら、出来ました。。。
440429:03/10/20 22:04
>>437
Delphi6だと、表示されません。
Delphi7のTHintWindowのソースはどう変わったのだろう?
てかさ、THintWindowなんて使わなくても似たようなもの簡単にできるだろ。
本来はVCLのヒントシステムの組み込み用の基底クラスなんだから
それ以外の使い方しようとして動作しないと言われてもねえ。
他に間違ってる部分があるのは間違いない
>>438
好きにシロ
>>436
なんだ。こっちにも書いてるのか。

だからさ、 >>435 に書いたように、 基本的にフォーム継承でないと表示されないんだよ。
ソース持ってるなら TWinControl.UpdateControlState メソッドを見てゴラン。

親を辿っていって、
if (Control is TCustomForm) or (Control.FParentWindow <> 0) then UpdateShowing;
となってるでしょ? 
こいつをごまかしてやらないとダメなのさ。
446427:03/10/20 23:45
>>428
すいません。さっぱりわかりません('A`)

Form1
procedure TForm1.FormCreate(Sender: TObject);
begin
Form2 := TForm2.Create(self);
Form2.Show;
end;

Form2
var
 poin : Array [0..100] of PChar;
procedure TForm2.FormCreate(Sender: TObject);
var
 count : Integer;
begin
 for count := 0 to 100 do
  GetMem(Poin[count], 100);
end;
procedure TForm2.FormDestroy(Sender: TObject);
var
 count : Integer;
begin
 for count := 0 to 100 do
  FreeMem(Poin[count]);
end;

これでエラーが出る理由がわからんのです
自動生成からForm2をはずせ
448427:03/10/21 00:06
うまくいきますた!( ・∀・ )
>>433
取得したテキストを解析。
450デフォルトの名無しさん:03/10/21 11:33
ファイルの選択はOpenDialog使いますがディレクトリの選択はどうしてますか
>>450
1,SelectDirectory
2,API http://pc2.2ch.net/test/read.cgi/tech/1009080085/34
3,フォーム作ってDirectoryListBoxとかを貼り付ける

>>451
>1,SelectDirectory
おおっ、知りませんでした。ありがとう。
453デフォルトの名無しさん:03/10/21 11:46
>>452
 ほかにもshell系のAPI叩いてカスタマイズするのがある。
 ぐぐれば出てくるんで根気欲ガンガレ
すいません、delphiでコマンドプロンプトみたいなの作れますか?
人間が打つ部分のかわりに C:\ とかのプロンプトが表示されたら自動でコマンドを次々に発行するようなことをやりたいです。
>>454
 作れるよ。
 CMD.exe か bashあたりをCreateProcessでプロセスとして起動する。
 入出力はパイプでくっつける。
 あとは好きにしろ。

 ttp://www2.big.or.jp/~osamu/Delphi/Tips/key.cgi?key=5#0115.txt
というかコンソールアプリが作れるか聞きたいだけでは。作れるわけだが。
>>456
そうは聞こえなかった・・・。
 どっちにしろできるわけだけど。


454です。>>455さんありがとうございます。やりたいのはコンソールアプリじゃなくてコンソールを作る事で、>>455さんの書いてくれた通りです。
AllocateConnsoleで色々かかなきゃいけないみたいですね。

サンプルみてて気になったんですが、これじゃ対話型の処理できないのでは?
対話型コンソールアプリを実行して、途中で色々質問される内容に答えていくようなタイプのです。

454ですが、勘違いしてました。
もともともコマンドプロンプトに書きたい場合だけAllocateConnsoleが必要なんですね。
460455:03/10/21 13:39
>>458
 ttp://hp.vector.co.jp/authors/VA026252/tips/delphi_anonymous_pipe.html

あんまりソースみてないけどこっちのほうがいいかも(自分が使ったのはこっち)

 対象となる実行ファイルを変えて何回も起動するとか・・・。結果はパイプの入出力て取るとして。
 shellを起動したらWinアプリから対話処理はできない罠・・・(スマソ漏れのミスだ)。

 もしcmd.exeのようなshellからやりたいなら

  dwRet := WaitForSingleObject(ProcessInfo.hProcess, 0); 

 の部分の終了待ちをなくしてCreateProcessより後をループさせれば何とかなるのかも試練がやったことないのでわからん。


DELPHIって
デルフィーって読むんですか?
電話で詳しい説明を聞こうと思っているのですが恥をかきたくないので教えてください
デルポイ
>>461
デルピー
>>461
 でるふぁい萌え萌え。
>>461
ほら、よーくみて。 カナふってくれてるでしょ?
http://www.borland.co.jp/news/delphi7j.html
あーあ
>>461
日本では >>462 が正解。 デルポイ神殿の事だからね。
ほら、無知の知をソクラテスが受け取ったのがデルポイの神託で有名でしょ?


>>464だと、デルファイ法の事になってしまうので注意ね。
みなさんありがとう
デルファイだそうですね
頭良く見させるためにデルポイで逝ってみようかな
469464:03/10/21 14:41
>>468
 あとに萌え萌えをつけてくれよう (ノД`)
萌え萌えつけるとBorlandのお姉ちゃん喜んでくれるよね
わかりました
ちんぽ握りながらかけます
472450:03/10/21 16:17
SelectDirectoryを使って目的を達したのですが、
ディレクトリを選択してOKボタンを押すと
元のウィンドウが別のウィンドウの背面に
隠れてしまいます。
Self.Activate;
などでフォームを表に出そうとしたのですが、
うまくゆきません。この場合どうすればよい
でしょうか。
デルップヒ
BringToFront
>>474
>BringToFront
ダメですた。。。

問題部分はこうなってます。
begin
var
dirpath: widestring;
begin
SelectDirectory('ディレクトリを選択してください。', 'Desktop', DirPath);
Form1.BringToFront;
end;

>>473
デルップヒってなんですか?
>>475
Delphiの読みです・・・
関数で、Assignedで確認しなくてもFreeしてくれる便利なヤツの
名前ってなんでしたっけ・・・・・

わすれてもーた
一生忘れてやがれ
>>477
別にさぁ、チェックしなくてもnilなやつをFreeしても大丈夫なの知らないの?
見栄っぱりの醜い争い。
481デフォルトの名無しさん:03/10/21 19:51
文字列を入力として受け付けて、その文字列中に含まれる数字の合 値を求めよ。
例: a1b23g4 と入力された場合、1+2+3+4 で10 を出力する。
>>481
FreeAndNil
484475:03/10/21 22:01
いまだにやっているのですが、やはりSelectDirectory
のあと、どうしてもフォームが裏に隠れてしまいます。
いろいろ調べてみて、
Application.BringToFront;
Application.ProcessMessages;
とやるとよいとの情報があり、試してみましたが、
フォームが裏に隠れたあと、タスクバーが点滅
するだけでした。
結局最終的にはかっこ悪いのですが、以下のように
したら常に表に表示させることができました。

Form1.FormStyle := fsStayOnTop ;
SelectDirectory('ディレクトリを選択してください。', 'Desktop', DirPath);
Form1.FormStyle := fsNormal;
Application.BringToFront;

一応は解決できたのですが、正しい方法が
ありましたら教えてください。
普通はそんな現象は発生しない。何か特殊なことをしてないか?
とりあえず、Delphiのバージョンと詳しいフォームの関係を書け。
フォームが隠れると言われても、何に隠されているか誰一人わからんぞ。
>>485
環境はWin2000 + Del7です。

新規アプリケーションでボタンを貼り付けて、OnClickを以下のように
して実行すると、メインフォームが別の開いていたウィンドウの背面
に移動してしまいます。(たとえばExploreやDelのIDEの後ろなど、他に
開いているウィンドウならなんでも)
var
dirpath: widestring;
begin
SelectDirectory('ディレクトリを選択してください。', 'Desktop', DirPath);
Form1.BringToFront;
end;

コンパイルが通らなくて気になったのだが、VCLからQDialogsのSelectDirectoryを使っているんじゃあるまいな。
488デフォルトの名無しさん:03/10/21 23:29
>>487
>VCLからQDialogsのSelectDirectoryを使っているんじゃあるまいな。
はいそうです。使い方が違うのでしょうか。
二つ質問があります

1つ目は
Memo : TMemo
;
procedure Form1.OnCreate;
begin
Memo := TMemo.Create(Form1);
end;
これをやってもForm1にはMemoコンポーネントは出ませんがどのようにすればできるのでしょうか?

2つ目は
Stream : TMemoryStream;
procedure Create;
begin
Stream := TMemoryStream.Create;
Stream.LoadFromFile(f);
end;

procedure Close;
begin
Stream.SaveToFile(f);
Stream.Free;
end
これをやると終了時にエラーが出ますがどのようにすればできますでしょうか?;
>>487-488
FileCtrl の SelectDirectory だろ?
>>489
 座標いれてVisibleをTrueにする。

2番目はそれだけだとわからんStream がSaveToFileでnilになってない?
>>489
1 Parentを設定汁
2 Streamの管理が正しいか確認汁
たぶん、破棄済みの無効なStreamをFreeしてるとかじゃない
テキストエディタでの検索速度を追求するロジックのサンプルを探しています。
大小文字、全半角区別とか、逆方向検索、置換まで考えてやれれば尚いいです。
494質問なのか?:03/10/22 01:28
(´-`)。o ○ (「そうですか。良かったですね」ってレスしか帰ってこない
ような気がする…>>493
>>493
「そうですか。良かったですね」
496493:03/10/22 01:45
そうです。良かったです。
いまのところ、ポインターを一個ずつ移動しながら、(LeadByteなら二個)
検索したい文字列と同じ長さの部分文字列とCompareStringです。
>>491-492
うまくいきました。ありがとうございました
>>493
BM法ってのがある。


大小文字、全半角区別とか、逆方向検索まで考慮すると BM だけでは結構大変
WideString を使えば、全半角区別も逆方向検索も簡単。

ユニコードならLeadByteがないので逆方向が簡単なのはわかりましたが、
どうして全半角区別するかどうかが簡単なんですか?
WideString の半角文字は 場所が決まってるからではない?
503デフォルトの名無しさん:03/10/22 11:02
TNMFTPをDelphi7で使えるようにしたいのですが、
どうすれば良いのでしょうか?

というか、可能なのでしょうか?

宜しくお願いします。
あるファイルの特定のメモリアドレスを覗くにはどうすればいいのでしょうか?

ネットゲームのデータを取得して反映したいのですが…
HP,MPなどのメモリアドレスは分かっているのですが、それをゲームで表示されるHP,MPの数値にする方法がわかりません。

的外れな質問をしているかもしれませんが、どうかよろしくお願いします。
>>504
何言ってるかわからん。もう少し詳しく書け。
506始めました ◆1TogqVyiR6 :03/10/22 14:41
すいません また質問させてください
delphiで作ったアプリを起動時に画面の真ん中当たりにしたいのですが
人によって起動時の場所が違うのです。
私の所だと真ん中なのですが知人だと画面右下の方にいくんです
どうにかおねがいします
>>506
TFrom.Position のヘルプを確認。
poScreenCenter あたりがいいかも。
508504  ◆9ReLyaxCFw :03/10/22 15:23
すいませんでした。分かる限り詳しく書いてみます。

そのゲームのツールでは、どのツールでも一つの設定ファイルがあれば使用可能なように
規格化されたiniファイルがあります。
そのiniファイルにはC/C++の16進法で記述された、
MaxHPTable=0x00698638
などのメモリアドレスがあります。
これを利用することで、ゲーム上のデータを読み取ることができるということで使用を試みたのですが
どうしたらよいのか具体的な方法がわからりません。

自分で考えたのは、このメモリアドレスをバイナリに変換して、ゲームクライアントの対応するところを読み込み
そのアドレスに存在するデータ(HPなど)を読み込んで10進数に直し反映させる。
ということなのですが、「アドレスに存在しているデータを読み込む方法」がわかりません。

そもそもバイナリに変換しようと思ったのは、メモリアドレスというものがバイナリエディタで開いたときの
番地のことを指していると思ったからです。

根本的に間違っているのかもしれませんが、何かご助言頂けたらと思います。
509始めました ◆1TogqVyiR6 :03/10/22 15:25
>>507
ヘルプを参考にプロパティの選択でできましたぁ♪
とても助かりました またおねがいしますぅ
>>508
ReadProcessMemory
511503:03/10/22 16:32
あ、あのうぅ、無理なんでしょうか?

TidFTPで同じ事が出来るのは知っているのですが、
古いバージョンのDelphiで作られたプログラムを私が改良して行く事になってしまい、
プログラミング自体初心者なので、1万行ぐらいあるプログラムをぜんぜんコンパイル
せずにTidFTPに移行するのは難しく・・・。
かと言って、古いバージョンのDelphiが会社にはないので、インストールもできず・・・。
(新しいバージョンを無理言って買ってもらったばかりなので、今更古いのもいるとは
なかなか言い出せず・・・・)
512デフォルトの名無しさん:03/10/22 16:36
データベースにアクセスする時、ログインのダイアログが出ないようにするには
どうすれば良いのでしょうか?
513504 ◆9ReLyaxCFw :03/10/22 16:49
>>510
回答ありがとうございました。
色々と検索してみます。
>>512
LoginPromptをFalse
Paramsに
user_name=ログイン名
password=パスワード

俺はTIBDatabaseでそうやってる。
515デフォルトの名無しさん:03/10/22 17:04
>>511
[コンポーネント]-[パッケージのインストール]の追加ボタンです。

例えば、クイックレポートを追加する場合は、
Delphi7をインストールしたフォルダー内のBINより、
「dclqrt70.bpl」を選択となります。

また、その他の機能でも同様に事前にIDEを読み込ませておく必要があるようですので、
インストールCD直下のINSTALL.txtを一読されたらと思います。
>>511
FastNetのコンポはソースがシェアウェアで更にDelphi7用というかD6用も見つからないのだが。
ソース購入されていたならそのままインストールを試みるのもいいし、なければ諦めろ。
購入先探してみたが見つからんのだ。会社存在しているのか???

ここまで書いてみたがひょっとしたら、サードパーティ製コンポCDに紛れているかもしれない。

Indyでもバージョン違うと構造が少し異なることもあるしね。
たった一万行程度だろ。地道に修正したら?
517503:03/10/22 18:45
>>515
>>516

探して見たのですが、見つかりませんでした。
逝ってきます。

色々とありがとうございました。
518504 ◆9ReLyaxCFw :03/10/22 21:56
色々やってみたのですが上手く行きませんでした(´Д⊂

16進数で読み込んだアドレスとポインタとの繋がりがわからず、関数を上手く使うことができませんでした。
バイナリに変換しなくても使えるのでしょうか…
それともアドレス読み込みの時に、ポインタ型で読み込んで行うとかいう処理なのでしょうか?
iniファイルから読み込むときstiringで読み込んで、後に「^」を使ってポインタにするという処理をしています。

なんだかもうわけがわからなく…_| ̄|○
PChar型ってのはCでいうchar*とおなじでつか?
504のやろうとしていることはかなり高度なことだ。
最低限、CのポインタとWindowsAPIのメモリ管理・プロセス管理の知識がないと無理。
あきらめて、ほかの人が作ったのを使うのが早いと思うが。
Googleで"バイナリエディタ" & "セーブデータ"で検索。


>>×504のやろうとしていることはかなり高度なことだ。
>>○504のスキルが低いだけだ。
C言語を最近始めました。
アスタリスクを単語の後ろにつけているソースを見かけるのですが
どういう意味なのかわかりません。
プログラムーにまりたいので誰か教えてくだsさい。
>>518
>バイナリに変換しなくても使えるのでしょうか…

つーかさ、
MaxHPTable=0x00698638
って書かれた値をPointer型の変数に読み込む、って所までは出来てるの?
>>522
まずキーボードの打ち方を覚えろよ…

>アスタリスクを単語の後ろにつけているソースを見かけるのですが
・その単語は型の名前である
・そのアスタリスクは単なる乗算演算子である
525525 ◆FjOpeTE2Ts :03/10/23 13:46
InstallShieldを使って、DBアプリをインストールする部分で
つまっています。

DataBaseはMySQLを使っているのですが、ODBCの部分の設定が
出来ません。

例えばMySQLサーバーが別に存在するとして、
インストールするとMySQLサーバーのホスト名(もしくはIPアドレス)が
自動的に入った状態にする方法を教えて下さい。

宜しくお願いします。
>>525
スレ違い。と言ってもスレはないがMLならあったかな。
それとバージョンくらい書けよ。
527525 ◆FjOpeTE2Ts :03/10/23 14:46
>>526
レスありがとうございます。
スレ違いでしたか。失礼しました。

InstallShieldのバージョンは3.5です。
ODBCリソースのプロパティリストのところで設定する事は
出来るのですが、その設定がインストールしたコンピュータには
反映されていません。
何か間違えているのでしょうか?
528504 ◆9ReLyaxCFw :03/10/23 14:53
>>523
Ptr関数を使っています。
var PName: pointer;
としてから
PName := Ptr($00699B6C);
として、ReadProcessMemory(hprocess,PName,…)に使っています。

Ptrに直接アドレスを使っているのは、まずはゲームデータ取得だけでもしてみようと思い、
iniから読み込む処理を行っていないためです。
ありゃ?

function ReadProcessMemory(hProcess: THandle; const lpBaseAddress: Pointer; lpBuffer: Pointer;
nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;

ここに const 書いて いいのかな?

function ReadProcessMemory(hProcess: THandle ; ReadAddr Integer ; var Buffer ;
nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;


function ReadProcessMemory; external kernel32 name 'ReadProcessMemory';

とやってもダメ?
530504 ◆9ReLyaxCFw :03/10/23 15:53
>>529
>function ReadProcessMemory(hProcess: THandle ; ReadAddr Integer ; var Buffer ;
>nSize: DWORD; var lpNumberOfBytesRead: DWORD): BOOL; stdcall;

>function ReadProcessMemory; external kernel32 name 'ReadProcessMemory';

この部分を
type
TForm1 = class(TForm)
の前に書き込めばよいのでしょうか?
上の様に追加しても上手く動きませんでした。
コンパイルはいつも上手くいくのですが、いざ動かしてみるとゲームデータを取得できずに
「モジュールproject1.exeのアドレス○○でアドレス○○に対する読み込み違反が起きました」とでます。
531504 ◆9ReLyaxCFw :03/10/23 16:01
上記のように追加後

procedure TForm1.Button1Click(Sender: TObject);
type
Pstring = ^string;
var
PAName: integer;
BName: cardinal;
PMName: pointer;
CP: Pstring;

begin
PAName := $00698270;
GetHundle(rhwnd);   //ゲームクライアントのハンドル取得
if hprocess <> 0 then
begin
ReadProcessMemory(hprocess,PAName,PMName,50,BName);
CP := Pstring(PMName);
Label1.Caption := CP^;
CloseHandle(hprocess);
end
else
Label1.Caption := 'FALED';
end;

の様に組んでいます。
ゲームが起動していないときは「FALED」が返ってくるのですが、起動後実行させると
Label1.Caption := CP^;
のところで緑色の矢印が出てエラーがでます。
出力は決まった場所にしかできないのでしょうか…
>>530
Q1、そのアドレスは想定したアドレス?
   
Q2、hProcessはどうやって取得してる?
   1、ゲームをプログラム内で起動してる
   2、他の方法で調べた
>>531
それなら
var charBuf:array [0..49] of char;

とバッファをしてしてから
ReadProcessMemory(hprocess,PAName,charBuf,50,BName);
だと思うよ。
まずお前は基礎をきちんと学ぶことが必要だ。間違いだらけで突っ込みどころ満載。
少しは、頭を使ってコードかけよ。コンパイルが通ればそれで済むと思ってるのか?

それと529のは無視して大丈夫。意味ないから(藁
暇人いっぱい。トリプルでかぶった
536504 ◆9ReLyaxCFw :03/10/23 16:19
もっとちゃんと基礎的なことを学んでから、もう一度最初から取り組んでみようと思います。
お騒がせしてすいませんでした。
皆さんありがとうございました。
>>534
ほらみろ。 煽るならもうちょっとネタが熟してからにしろよ。 焦りすぎ。
>>534.537
お前らは質問しにきた奴をバカにしたいのか?
一応初心者スレなんだから、もう少し優しく接してやれ

>>504
基礎がなってないのは確かだ。
また1からガンガレ
>>538
禿同
540始めました ◆1TogqVyiR6 :03/10/23 17:59
すいません またまた質問させてください。
IndyのGet(URL)でソースを取得するのと
ClientsocketのSendtextでURLのソースと同じテキストを送った場合
どっちが早く全てを読み込めますか?

GetするひととURLまでの回線と、Getする人とSendtextする人までの回線は
考えない事にして貰ってお願いします。
541525 ◆FjOpeTE2Ts :03/10/23 18:10
自己解決しますた。
MySQLのODBCドライバを「MySQL-SJIS」から
「MySQL ODBC 3.51」にしてやってみたら出来ました。

はぁ〜、こんな程度の事で一日つぶれた。トホホのホ。

皆様、お騒がせしました。
542522:03/10/23 18:18
>>524
答えてもらって有難うございます。
2重3重に勘違いしてて書き込んだあとに自己解決しました。
自分ってあほだなぁとか思う今日この頃。
お手数かけてすいませんでした。
>>540
自分で試せよ。
544デフォルトの名無しさん:03/10/23 19:38
TTreeViewのHideSelectionで塗られる背景色(灰色)と選択色を
赤色に変更したいのですがフォントのサイズが大きくなったり
小さくなったりしてうまくいきません

どこか間違えているのでしょうか?

procedure TTreeView.CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
 ARect: TRect;
begin
 with (Sender as TTreeView).Canvas do
 begin
  if cdsSelected in State then
  begin
   Font := TTreeView(Sender).Font;
   ARect := Node.DisplayRect(True);
   Brush.Color := clRed;
   
   FillRect(ARect);
   TextOut(ARect.Left+2, ARect.Top+1, Node.Text);
  end;
 end;
end;
あいかわらずDel厨は低レベルですね。
>>545
レベルのお高いお前はなに厨?(w
>>540
 シビアなものを作るのでなければ、
簡単に実現できる方を選択すれば?
 データ容量、処理速度や通信速度なんて技術が
そのうち進歩すれば考える必要なんてないんだから。
 と、私的な意見を言ってみる・・・。
>>544
   FillRect(ARect);
   TextOut(ARect.Left+2, ARect.Top+1, Node.Text);
これを削ったら、想定通りの動作になるようです。
理由は碩学の解説をお待ちください。
>>544
バージョンによって実装が異なるからなんとも言えん。
TCanvas.Refresh を呼び出すのも一つの手。
Font := TTreeView(Sender).Font; は実行しなくても描画前にVCLがフォントを初期化してくれたはず。
550544:03/10/23 23:00
FillRect(ARect);
TextOut(ARect.Left+2, ARect.Top+1, Node.Text);

環境はDelphi7JPro+WindowsXpで
上記の部分を削ったら確かに出来ました
でも、どうしてだろう?

TTreeViewは、まだまだつかいこなせてないな〜・・・
551デフォルトの名無しさん:03/10/24 00:00
変なところでexceptまたはfinallyが必要、と怒られてしまいます。
どこが間違っているのか教えてください。
try
 TL:=TStringlist.Create;
 for
 begin
  Case i of
  1:begin
  end;
  4:begin
   if Wnd =0 then
   begin
   end;
   if TempList3.Count = 0 then
   begin
   end;
   for i:=TempList1.count-1 downto 1 do
   begin
    if strtoint(TempList1[i])> TempList3.Count then
    begin
    end;
   end;
552551の続き:03/10/24 00:01
   for i:=0 to 1 do
   begin
   end;
   for i:=0 to 50 do
   begin
   end;
   while i=1 do
   begin
   end;
  end;
  else
  end;
 end;//ここでexceptまたはfinallyが必要です。とエラーになる。何故???
 if Mai1.Count<>0 then
 begin
 end;
finally
 TL.Free;
end;
以上です。
>>551

tryをけせ

もしくはちゃんと例外処理しろ
554デフォルトの名無しさん:03/10/24 00:03
>>551
質問に答えがズバリ(略)
555551の続き:03/10/24 00:05
>>553
即レスどうもです。
tryを消してみたのですが、そのすぐ下の行で宣言が必要な場所に・・・
でエラーとなってしまいました。
>>555
すまん>>552がかかれる前に書き込んでしまった。
 begin endの対応が一つずれてるんだろ。
>>544
TCustomTreeView.OnCustomDrawItemのヘルプに
>>OnCustomDrawItem は,個々のツリー項目の描画の『前』にのみ発生します。
とあるので、イベントの中で描画を書いても、イベント終了後にコントロールが
デフォルトの描画をしようとする。表示がおかしくなるのは多分そのせい。
デフォルトの描画を停止するために、FillRect(),TextOut()の後に
DefaultDraw:=False;
を入れると改善される。
>>551
関係ないけど TL:=TStringlist.Create; はtryの外にするべき。生成する前にTL:=nilしてるなら別に構わんが。
Rect1がRect2と重なってるか判断できる関数ってありますか?
>>559
ゲーム関係のサイトを検索汁
561559:03/10/24 01:01
>>560
thx!ぐぐってきます
>>559
ない。作れ。
563559:03/10/24 01:10
>>562
作っちゃいました。

function RectInRect(R1,R2: TRect):boolean;
begin
if (PtInRect(R1,Point(R2.Left,R2.Top)) = true) or
(PtInRect(R1,Point(R2.Right,R2.Top)) = true) or
(PtInRect(R1,Point(R2.Left,R2.Bottom)) = true) or
(PtInRect(R1,Point(R2.Right,R2.Bottom)) = true) then
RectInRect := true
else
RectInRect := false;
end;
564560:03/10/24 01:14
>>563
 まあ、ゲーム作る奴は当たり判定に使うからな。
 以前自分も良く作ったし。
もっと簡単(高速)にできるよ。よく考えれ。
566559:03/10/24 01:16
>>564
そっすね。
今ゲーム作ってるんですが、自分で手続き・関数作る機会がグンと増えました。
どうもです。
てか、563は間違ってる
568559:03/10/24 01:17
>>565
む!なにやら高度な香り!

orを繰り返してる部分があやしい(というかソコしかない)・・・ちょっと考えて見ます
>>559
無駄な変数定義しなきゃいけないけど。
if IntersectRect(tmpRect, rect1, rect2) then
 重なっている
else
 重なってない;
570559:03/10/24 01:23
>>569
ぐっは!さっきまでさんざ睨めっこしてた手続きが!
これならわざわざ関数化させる必要もなさげ。
親切にありがとうございます。
>>559
2つのRectをr1,r2として、
(r1.top < r2.top) and (r1.bottom < r2.top)
 or
(r1.top > r2.botttom) and (r1.bottom > r2.bottom)
 or
(r1.left < r2.left) and (r1.right < r2.left)
 or
(r1.left > r2.right) and (r1.right > r2.right)
ならば重なってない。
>>571
頭硬いね。4つの比較だけで作れるよ。
ヒントは、絶対重ならない条件。
直線上の二つの線分が重なるかどうかで考えるべし。
>>571 は r1.top > r1.bottom でも正しく動きますね。

それと、r1.right <= r2.left では?
TFileStreamの書き込み/読み込みで使うためにバッファを確保しようと思うのですが
実行時のメモリの状況によっては「スタックオーバーフロー」になってしまいます。

そこで実行時に適切なサイズを確保するようにしたいのですが
それにはどうすればよいのでしょうか?
>>575
文字列か動的配列をバッファとして使うと良いでしょう

例:
var s:string;
begin
setlength( s , バッファのサイズ);
stream.Read( Pchar(s)^ , サイズ);
Type
TArrayChar=array of Char;
TArrayAC=array of TArrayChar;
Var
AAC:TArrayAC;
とした場合、メモリはどういう感じで連続するのでしょうか?
たとえば、
SetLength(AAC[0],Length(AAC[0]));
と、要素数を変えたときに、
AAC[1]に於いてはメモリーの移動が起こらないことを目指しています。
あってますか?
TArrayAC の要素の一つ一つに 動的配列がぶら下がっているだけ
だから、TArrayACの要素のそれぞれは無関係、連続してもいないだろう。

たぶん、他の要素を変更してもメモリは再配置されないと思うが、それは判らない。
579デフォルトの名無しさん:03/10/24 11:54
上級者スレでVCLにバッファオーバーフローを起こすバグがあるという
話題が出ていますが、下記URLにはセキュリティホールなどという
記述も見受けられます。
http://memo.st.ryukoku.ac.jp/archive/200309.month/6508.html

私の理解では、例えばコンボボックス内に格納されている文字列の長さが
4096バイト以上の時に表示しようとするバッファオーバーフローが発生して
プログラミングが停止すると思っているのですが
(この理解で合っているかも少し不安だったり・・・)、
なんでこれがセキュリティホールになるのでしょうか?
>>579
1、バッファオーバフローが起きても、普通は停止しない。
2、通常はバッファがオーバした所にはスタックの帰り番地があるので、それが書き換えられ
  不正な実行を行った事によって停止する。

3、セキュリティホールになる理由は、
 もし、コンボボックス内の文字を Webから取得した文字列をそのまま設定するような馬鹿な
 事をすれば、自由に帰り番地を書き換えられる=帰り番地をその文字列上に構築したコード
 にすれば好きなコードを実行させられるという理由による。
581579:03/10/24 12:42
>>580
丁寧なレスありがとうございます。

>2、通常はバッファがオーバした所にはスタックの帰り番地があるので、それが書き換えられ
>  不正な実行を行った事によって停止する。

という事は、やはり停止するのでは?あれ?なんか勘違いしてますね、私(^^;

足りない頭でなんとかこんな風に理解しました。

コンボボックス内の4096バイトの次の4097バイト目に4098バイト目以降に作ったコードを
指す番地を入れておけば、そのコードを実行させる事が出来る。
そういう作為がなければ、多くの場合不正な番地が指定されプログラムは停止する。

という事でしょうか?
>>581
全Delphiスレを読め。これ以上書くなボケ。氏ね。
>>582
自分でも読んでないくせに説教たれんなハゲ。死ね。
584544:03/10/24 13:04
>>544です
最終的には以下のようにして実現できました
返信して下さった皆様、ありがとうございます。

 with (Sender as TTreeView).Canvas do
 begin
  if cdsSelected in State then
  begin
   Font.Color := TTreeView(Sender).Font.Color;
   Brush.Color := clRed;
  end;
 end;

そこでもう一つ質問なのですが、TShellTreeViewにも
同じような動作をさせたいのですがどこにどう書いてよいのか
わかりません・・・

TShellTreeViewのソースを見ようにも
"ファイル "ShellCtrls.pas" を見つけることができません。."
としかられてしまいます・・・

TShellTreeViewにも
同じような動作をさせたいのですがどこにどう書いてよいのか
わかりません・・・

TShellTreeViewで選択色を任意に変更できた方、
どなたかいらっしゃいますか?
>>581
コンボボックス内の4096バイトの次の4096-4099バイト目に0-4095バイト目までに作ったコードを
指す番地を入れておけば、そのコードを実行させる事が出来る。

多くの場合不正な番地が指定されプログラムは異常動作をするか停止する
586579:03/10/24 13:14
>>585
やっと理解できました。
ありがとうございました。
勉強になるかもと思って、使えそうなVCLをいろいろみてます。
JEDIのEnhancedモノを実際に使用されているかたおられますか?
ご感想をお聞きしたいのですが・・・。

あと、他にフリーのVCLで有名どころがあったら教えて頂きたいの
ですが、よろしくお願いします。
いちおう、IndyやCompanionDiskに入っていたVCLあたりは目を
通しました。今後の参考のためによろしくお願いします。
588名無し:03/10/24 17:08
delphiとC++Builderの利用者ってどっちが多いんですか?
>>588
Delphiだとおもうが。

590デフォルトの名無しさん:03/10/24 17:27
Delphiってなんですか?
>>590
Dellが作るパソコンのキッズ向け製品のブランド名
592デフォルトの名無しさん:03/10/24 18:20
メインのForm1を「X」ボタン等で閉じたとき、
form2を表示させて、OKを押せばプログラム終了、キャンセルなら
Form2を消して元に戻す、というようなことがやりたいんですが
どうすればよいのでしょう?
>>592
OnCloseQuery
594593:03/10/24 18:27
OK・キャンセル程度ならMessageBoxを使うのもいいかと。
595592:03/10/24 18:29
>>593
レスありがとうございます。
OnCloseQueryを使うらしいことは分かったんですが
どう書くのかがよく分かりません・・。
delphi閉じるときのように、保存しますか「はい」「いいえ」「キャンセル」
だけでいいんですが・・。
596593:03/10/24 18:43
>>595
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean)
begin
 if(Application.MessageBox('終わるよ?','終了確認',MB_OKCANCEL)=IDCANCEL) then
  CanClose := False;
end;

実行してないからデバッグは自分でしてください。
597592:03/10/24 18:48
>>596
ウホッ!ありがとうございます!できますた!
ほんと助かりました。
ぬるぽ
ガッ
ガッ
601577:03/10/24 18:59
全部破棄したいとき、
for i:=0 to Length(AAC)-1 do SetLength(AAC[i],0);
SetLength(AAC,0);
と、それぞれの要素を破棄してからにすべきですか?
それともSetLength(AAC,0);だけで全部消えちゃうんですか?
602551:03/10/24 19:57
>>558
えっ?そうなの?
Stringlistはtryの中でcreateして、finallyでfreeがメモリリークを起こさない
鉄則と認識してたんだけどこれって間違い?
603デフォルトの名無しさん:03/10/24 20:38
ModifiedってのはなぜListboxに使えないんでしょう?
Listboxに変更があったかどうか判断するのはどうすればいいんでしょう?
>>602
とても間違いです。
>>603
変更があるということはつまり、イベントが発生しますよね。
そこで適当なフラグを建ててやればいいのではないでしょうか?

Modifiedのようなものがあるかも知れませんが知りません・・・
>>602
Createに失敗したらどうなる?
>>606
try内でのエラーあればexceptもしくはfinallyに飛んでくれます。
608575:03/10/24 22:05
>>576
遅くなりましたが的確なアドバイスありがとうございました。
おかげさまでTStream系の使い勝手が格段に向上しました
>>607
>クラス参照により呼び出されたコンストラクタの実行中に
>例外が生成された場合,Destroy デストラクタが自動的に
>呼び出されて未完成のオブジェクトが破棄されます。
610551:03/10/24 22:47
>>604
出来ましたら、お馬鹿な私にご教授を・・・

>>606
finallyに飛んで・・・、freeを実行しようとしてエラーになっちゃいますね・・・
ということはどうすれば良いのでしょうか?
>>610 流れ読んでくれ。
>>558
var
  Strings: TStringList;
begin
  Strings:=TStringList.Create;
  try
    ほにゃらら
  finally
    Strings.Free;
  end;
end;
>>602
警告が出るだろ…。
つか、try....finallyって、そんなに重要?
デバッグレベルではエラーあったりするから重要だと思うけど、
完成したもので、エラーがあったらまずいよね・・・・

予期せぬエラーがあったとき、そのメモリリークが予想以上に
激しいということです?それとも、エラーにはなってないけど、
Freeできないことがよくあるってことです?

try...finallyをする意味はわかるんだけど、その重要性がいまいち
わかってないのかも。
ド素人で申し訳ないですが、誰か教えてください。

Delphi7 Personal つかってます.。
パーソナル版でもMsAccsessのmdbに接続できることを知り、試してみました。

var
Aff: OleVariant;
Rst: Recordset;
begin
Connection1.Open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDb.mdb;Persist Security Info=False', '', '',adConnectUnspecified);
try

な感じで、たとえば
Rst:= Connection1.Execute('DELETE * FROM MyTbl;', Aff, 0); とか
Rst:= Connection1.Execute('SELECT * FROM MyTbl;', Aff, 0); とか
単純なのは出来ることが分かったんですが、追加クエリや更新クエリなんかで、
Delphiフォーム上のテキストボックスをパラメータにすることは、たぶん出来ないんですよね。
それはひとまずあきらめるとして(いや、出来ることならあきらめたくないんですが)
まずは、レコードセットを「Open」して、ごちゃごちゃいじくり回す書き方が知りたいな、と。
Rstと書いてドット入れると、選択リストの中にOpenってのがあるんで、たぶん行ける
んだろうと思い

Rst.Open(MyTbl,Connection1, adOpenKeyset, adLockOptimistic,0)

とか、適当に書いてみたんですけど全然ダメです
>>614
try...finaly する意味を教えて!
ファイルを保存しようとしたとき、そのファイルが書き込み禁止になっていたらどうなる?
ファイルを保存しようとしたとき、そのファイルが別のソフトに排他モードで開かれていた場合は?
ファイルを保存しようとしたとき、ディスク容量が足らなくなってしまったら?

もちろんこういうエラーが出ないように対策する方法もあるけど、
起きえるエラーを想定して全部対策するの?
>>614
例えば、ファイルを開こうとしても開くのに失敗したら例外起きちゃうでしょ。
そういう時finallyで終了処理したりする。
とりあえず失敗する可能性のある時は保護しとけ。
自分の知らないコードやクラスの呼び出しなどても常に保護する習慣を身に着ける。
例外処理は自分のバグを見つけるためのものではなく、予期しない実行時の問題を
片付けるための仕組みだよ。

て、書いてるうちに、617にかぶったが書きこ。
>>614
エラーと例外は違うよ。
>>615
やぁ!君はGoogleって知ってるかい?
試しに「delphi OLEDB RecordSet Connection」で検索したらこんなのが引っかかったんだ。
ttp://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list46.shtml

どうだい、Googleって面白いだろ?
>>615
やぁ!君はGoogleって知ってるかい?
試しに「delphi OLEDB RecordSet Connection」で検索したらこんなのが引っかかったんだ。
ttp://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list46.shtml
このページの下のほうに、君の知りたい情報が書かれてたよ。

どうだい、Googleって面白いだろ?
622614:03/10/25 12:34
>>617-619
なるほど〜それは言えますね。
自分は、いちいちファイルの存在とか確かめてました。
その他にも問題がある可能性を考えると、確かに意味ありますね。
ありがとう。

では、finallyで後処理を行うのはもちろんとして、関数を呼び出した側
でも、例外が発生したかどうかをfunctionでbooleanや、エラーコードが
返る場合はエラーコードを返して、その後の処理をさせるのですよね?

そうすると、try...finalltはいろんなところで使えそうだから、ほとんど
procedureは使用せずにfunctionでokなのか・・・
BringToFrontの逆をやりたいのですがどのようにすればできるでしょうか?
ヘルプでBringToFrontを探して「参照」を押せ
>>615

Delphi6 Personalでテストしたときのコードです。

var
 cn: variant;  // ADO Connection
 rs: variant;  // ADO Recode Set
 
{ DB Open データーベースと接続しデーターベースを開きます。}
function DBOpen(dns, dbf: string): boolean;
begin
 result := true;
 try
  cn := CreateOleObject('ADODB.Connection');
 except
  cn := unassigned;
  result := false;
  ShowMessage('ADOオブジェクトでエラーが発生しました。');
  exit;
 end;
 // DB Open
 try
  cn.open(dns + dbf);
 except
  cn.close;
  cn := unassigned;
  result := false;
  ShowMessage('データーベースと接続できません。');
  exit;
 end;
end;
>>615
つづき
{ DB Close データーベースを閉じます。}
function DBClose: boolean;
begin
 try
  cn.close;
  cn := unassigned;
  result := true;
 except
  cn := unassigned;
  result := false;
 end;
end;
>>615
つづき
{ DB Execute データーベースの命令を実行します。}
function DBExecute(SQL: string): variant;
begin
 try
  rs := CreateOleObject('ADODB.Recordset');
  rs := cn.execute(SQL);
  result := rs;
 except
  rs := unassigned;
  result := unassigned;
  ShowMessage('cn.execute:SQLでエラーが発生しました。');
 end;
end;

{ DB Save データーベースにデータを保存します。}
function DBSave(SQL: string): boolean;
begin
 try
  cn.BeginTrans;     // トランザクション開始
  cn.execute(SQL);
  cn.CommitTrans;    // トランザクション終了
  result := true;
 except
  cn.RollbackTrans;   // ロールバック
  result := false;
  ShowMessage('DBSave:SQLでエラーが発生しました。');
 end;
end;
>>615
つづき
{ Recode Set Open レコードセットを開きます。}
function RSOpen(SQL: string): variant;
begin
 { レコードセットのカーソルタイプとロックタイプ
  open(Source, Connection, CursorType, LockType);
  rs.CursorType := adOpenDynamic  = 3 動的なカーソル
  rs.LockType  := adLockOptimistic = 3 オプティミスティック }
 try
  rs := CreateOleObject('ADODB.Recordset');
  rs.open(SQL, cn, 3, 3);
  result := rs;
 except
  rs := unassigned;
  result := unassigned;
  ShowMessage('rs.open:SQLでエラーが発生しました。');
 end;
end;
>>615
{ Recode Set Close レコードセットを閉じます。}
function RSClose: boolean;
begin
 try
  rs.close;
  rs := unassigned;
  result := true;
 except
  rs := unassigned;
  result := false;
 end;
end;
>>615
test.mdbのテーブル構造
[data]
No  数値型  (長整数)インデックス重複なし
Text テキスト型(255)

SQL := 'select * from data';

Edit1.Text := rs.fields.item[0].name;    フィールド名 -> "No"
Edit1.Text := rs.fields.item[1].name;    フィールド名 -> "Text"
Edit1.Text := rs.fields[0].name;       itemを省略可
Edit1.Text := rs.fields.count;        フィールド数
Edit1.Text := rs.fields[0].value;      Noの値
Edit1.Text := rs.fields[1].value;      Textの値
Edit1.Text := rs.fields['No'].value;     Noの値
Edit1.Text := rs.fields['Text'].value;    Textの値
Edit1.Text := IntToStr(rs.RecordCount);   レコード数
Edit1.Text := IntToStr(rs.AbsolutePosition); レコードの位置
>>615
これを忘れていた。
{ メインフォーム表示のときにDBと接続 }
procedure TMainForm.FormShow(Sender: TObject);
var
 DNS: string;
 DBF: string;
begin
 DNS := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=';
 DBF := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName));
 DBF := DBF + 'test.mdb';
 if not dbOpen(DNS, DBF) then
 begin
  ShowMessage('データーベースに接続できません。');
 end;
end;

長々と、くそコードで板を汚してすみません。
632615:03/10/25 23:53
>>620,621
すみません。
検索のさいの単語選びがめちゃめちゃ不器用でした。
いただいた情報、こちらが欲していたものほぼそのまんまです。
レコードセットオープン、データ書き換え、ともに見事成功しました。
感謝です。

>>625-631
この一連のファンクション、ざっと試したらそのまんま使えちゃったんですけど、
たぶんオリジナルですよね。
いただいちゃっていいんでしょうか。
(てか、もういただいたも同然なんですけど)

超未熟なトーシロにここまでしていただいて、何か涙出そう。
633デフォルトの名無しさん:03/10/26 00:04
>>632
ロジックはともかく、変数名ぐらいかえとけ
>>632
オリジナルです。
自由に使ってください。
私もnetでずいぶん助けられているので、自分の知っていることぐらいは公開
します。といってもたいしたものじゃ無いけど。
635635:03/10/26 03:09
プログラミングのプの字も知らないような者が、
delphiを始めるにあたり、
読むべき書籍や見るべきサイトなどを教えてください。
636635 ◆hEpdoZ.tHU :03/10/26 03:10
>>635
DelphiMLの過去ログを何ヶ月かかっても全部読みなさい。
638 :03/10/26 04:16
>>635
まず、「何か自分の作りたいソフト」を決める(オレの場合は、こっちが
先だった)。
そしたら、いろいろ試行錯誤してソレを目指して作ってみる。
当然分からないことが出てくる。
ソレを検索して探す。

これが一番いいと、オレは思う。
639デフォルトの名無しさん:03/10/26 05:30
dsfadsf
640615:03/10/26 08:47
面白くてやめられなくなり、ついに夜を明かしてしまった。。。
明日からの仕事大丈夫かな

Delphi買って数ヶ月、単純なスロットマシンや使い物にもならないお絵かきソフトを作ったきり、「やっぱりちょっと無理してでもPro版買っときゃよかったかな」とかぼやきつつそのまま放置。でもmdbいじれることが分かって俄然やる気が出てきました。
>>620,620
>>625-63
両氏にあらためて感謝します。

それから
>>633
'cn' は 'MyConn' に
'rs' は'MyRst' に
それぞれ変えときます(あんまり意味ないかな)

では、おやすみなさい
>>622
意味不明。なんでtry .. finally とprocedureやらfunctionが関係あるの?


後始末が必要な処理;
try
 例外が発生するかもしれない処理;
finally
 後始末;
end;


と覚えておけば問題なし。


if 例外が発生しないことを確認 then begin
 後始末が必要な処理;
 例外が発生するかもしれない処理;
 後始末;
end;


って書くより楽でしょ。
そもそも「何が起こるか判らない」のが例外なんだから、事前にifで回避しようなどと
考えずに、例外で一元的に扱いましょう、という設計思想なんだが。
Image1.Canvas.TextOut(0,0,'aaa');
'aaa'の色はどのように変えたらよいのでしょうか、
Pen.ColorやBrush.Colorでは出来ませんでした

アホですいません
643:03/10/26 16:32
Font.Colorで変更できました
アホなこと書いてすいません無視しておいてください
Delphiは、配列の宣言と同時に初期化を指定することは無理なのですかね?
645初心者:03/10/26 18:32
>>644
「宣言」と「文」はまた別だと思うから・・・。
>>644
出来ません。

ただしオブジェクトのフィールドは初期化可能。
ついでに言えば、Delは配列型の定数やレコード型の定数を宣言できますが何か?
初期値は代入文とは別だと思うから・・・。
変数の性質によるんじゃないかと。
var
Form1: TForm1;
aiueo:array[1..5] of char=(#$30,#$31,#$32,#$33,#$34);

この場所ならできちゃうよ。
649デフォルトの名無しさん:03/10/27 16:16
サーバープログラムを少し弄ってるのですが
サーバー機がスワップする前に自動でPCを
再起動させたいのですが・・・・・・・
よろしければ教えてください。

環境
WinXP Delphi7
スワップとは何のこと?
それとお前は何を知りたいのだ?
651デフォルトの名無しさん:03/10/27 16:50
ShellExecute(0, nil, PChar(AppPath), PChar(FilePath), nil, SW_NORMAL);
でパラメータのFilePathが"Document and Setting"のように間にスペースが
入ると"Document"、"and"、"settings"という3つのパラメータと解釈
されてしまうのですが、どうすればよいでしょうか
>>651
DOS窓でのコマンド入力と同様にすればよいのです。
653デフォルトの名無しさん:03/10/27 17:04
>>652
Delphiユーザーだとわからない人もいるかも。
654デフォルトの名無しさん:03/10/27 17:17
Indy_9_00_14_src.zipをダウンロードしたのですけど、インストールの仕方がまったくわかりません。
Delphi6へのインストールはどういう手順でやればいいでしょうか?
655デフォルトの名無しさん:03/10/27 17:24
>>652
Tmp := AppPath + ' "' + FilePath + '"';
ShellExecute(0, nil, PChar(Tmp), nil, nil, SW_NORMAL);
無理でした。
監視窓からTmpの値をコピーしてコマンドプロンプト
で実行したらちゃんとできるのに。
>>655
引数の指定が間違っている。
これでできました。
ShellExecute(0, 'open', PChar(AppPath), PChar('"' + FilePath + '"'), nil, SW_NORMAL);
2ch互換のトリップ扱いたいんですがDelphiのソースって落ちてないもんですね(´・ω・`)
(´・ω・`)他言語のソースなんて読めねぇょ(´・ω・`)
>>658
Cのソースがあるでしょ? それを一つにまとめて BCC55でobjにしてリンクすりゃいいでしょ。

って・・・ソース読めないならそういう作業も出来ないか・・・Cくらいは読めるようになりなよ。
そういうのが勉強の動機として良いと思うよ。
TreeViewの項目名編集時に表示されるエディットコントロールを
移動させたいのですが、TreeView_GetEditControlで取得した
ハンドルをMoveWindowに渡しても移動してくれません。
どうすればよいでしょうか?
661デフォルトの名無しさん:03/10/27 19:33
Delphi6を使いサンプルプログラムを動かそうとしているのですが、
SHDocVw,DCPsha1のファイルがありませんというエラーが出ます。
これらのファイルを読み込むためのコンポーネント・設定方法などが
あるのでしたら教えてもらいたいです。
ShDocVw.pasあるいはShDocVw.dcu
DCPsha1.pasあるいはDcpsha1.dcuをパスの通ったところにおきましょう。
プロジェクトフォルダと同じところに放り込めば問題なし。
>>660
そのエディットコントロールのハンドルは正常に取得出来ているんだよね?
出来るかどうかわからんけど、サブクラス化してみ。
なんでこんな簡単なこともわかんないんだろうなぁ。
だからDel厨って言われるわけだ。まじ馬鹿なんじゃね。
>>658
Delphi製でソース公開している2ちゃんねるブラウザでトリップを変換して
プレビューする機能のあるやつもあるね。ソース見てないからしらねーけど。
2ch のトリップは crypt / DES でしょ?
Indy に DES のコードがあるからそれを使えるかと。

どこかにトリップ算出のコード(他言語でよし)あるなら教えて。
コンバートしてあげよう
669デフォルトの名無しさん:03/10/28 12:54
デルファイでプリンタの紙切れを検知する部分のコードの書き方を教えて下さい。
宜しくお願いします。
>>665
そういうお前がレベル低いと思うがな。
>>669
GetPrinter APIを使う。
NT系は検知不可。
672669:03/10/28 13:20
>>671
レスありがとうございます。
NT系では出来ないんですね〜。
どうしよ・・・
紙がなければOS(ドライバ)が、紙がねーぞゴラァ メッセージ出るだろ。
674669:03/10/28 13:50
>>673
そのメッセージが出ないので困ってるのです。
675デフォルトの名無しさん:03/10/28 13:58
前から分からなかったのですが、except節は
例外時に実行されるとのことですが、以下の場合
開放処理が2つになるのが普通なのでしょうか。
それともexcept内では、開放する必要も
ないのでしょうか。

Obj := ***.Create;
try

except
FreeAndNil(Obj);
end;
FreeAndNil(Obj);
>>675
1、FreeAndNilを使うのは後から開放する場合があるからですか?
2、確実に開放したいなら

Obj := ***.Create;
with Obj do try
 try
  処理
 except
 FreeAndNil(Obj);
 end;
finally free end;

とやってはどうですか?
677676:03/10/28 14:03
ああ間違った 上のコードではfree が2度呼ばれてしまいますね。
1度目にnil が入っているので悪さはしないけど 無意味ですね

Obj := ***.Create;
with Obj do try
 try
  処理
 except
エラー処理
 end;
finally free end;
>>677
tryを入れ子にすればよいのですね。
ありがとうございました。
679デフォルトの名無しさん:03/10/28 14:20
>>678
いや 違うだろ・・・・
初期化処理;
try
  try
    処理;
  except
    例外処理;
  end;
finally
  解放処理;
end;
681デフォルトの名無しさん:03/10/28 17:26
661で質問させていただいたものですが
ShDocVw.pasというファイルは、タイプライブラリのインストールで
ファイルそのものが出来る事がわかったのですが、
DCPsha1.pasあるいはDcpsha1.dcuは何かコンポーネントのインストール・
Delphiの設定をすればファイルそのものができるのでしょうか?
今現在ではDCPsha1.pasあるいはDcpsha1.dcuはファイル自体が存在しないため
困っています。誰かわかる方がいましたら教えていただきたいです。
682デフォルトの名無しさん:03/10/28 17:53
質問です。

Memo.Lines.Add('1');
Memo.Lines.Add('2');
Memo.Lines.Add('3');



Memo.CommaText := '1,2,3,';

では どっちが処理早いですか?
>>682
自分で試せヴァカ
>>682
何千回かまわしてみれ
んで、比較時間を出力してみれ
>>681
Delphiのインストールからやり直せ。単にパスが通ってないだけだろ。
きちんとインストールされていれば何もしなくてもコンパイルは通る。
686チンポ:03/10/28 18:28
チンポ
687デフォルトの名無しさん:03/10/28 18:41
既存のデータベースを新しい別のデータベースに移植するユーティリティーを
作成しようとしています。

しかしデータベース(例えばParadox)のフィールド名の取得方法は分かったのですが、
そのフィールドの型が何か分かりません。

フィールドの型を取得するにはどうすれば良いのでしょうか?

宜しくお願いします。
FAQかもしれませんが、よろしくお願いします。

MainFormから、モードレスなFormを表示しようとしています。
このFormは、いつ起きるかわからないイベントによって表示
されるため、複数のFormが表示されてしまうことがあります。

なので、Form := TForm2.Create(Form1);のように開きたいの
ですが、こういう場合、オブジェクトが入る変数Formを、皆さん
は、どこにどういう形で設置しておられますか?

いま考えているのは、グローバル変数FormをArrayで宣言し、
使用されていない配列のところにCreateする方法なのですが、
もっとすっきりしたやり方があるのかと思い調べたところ、それ
らしき方法が見あたらず、お聞きした次第です。

配列を用いると、使用されない無駄の宣言の分や、宣言した
配列の数以上のイベントが発生すると、それ以上のフォーム
は表示できませんし、少し考えています。
どなたか、ご存じのかたおられましたら、よろしくお願いいたし
ます。




689デフォルトの名無しさん:03/10/28 18:48
>>668
 TListじゃだめ?
>>689
TObjectListの方がソースがすっきりするかも。
質問があります。
同じようなメソッドのRepaintとRefreshって何がどう違うのでしょうかね?
>>690
FormならTComponentListの方がよくねーか?
おお、そういうのがあるんですね。
皆さん、ありがとうございます。

ところで、早速実験でやってみたのですが、

Form := TForm2.Create(Form1);
Index := ObjectList.Add(Form);
ObjectList.Items[Index].Visible := True;

とかやっても、うまくいかないのですが、
どうすればいいのでしょう・・・・

サイトにも載ってないし、開発者ガイドには、
そんなクラス名すらでてこないです。

んー

694658 ◆vlEl4mu1uA :03/10/28 20:12
>>666
貴重な情報ありがとぅございまし。どうやらJaneにあるようです。
・・・ですが、肝心のトリップ関連っぽぃところが見つからない(´・ω・`)
ソフトつついてみてもどこにそんな機能あるのかわからんし
Main.pasにもないし、トリップシミュレータに利用されているというUcrypt.pasがUsesすらされてないし・・・
Ucrypt.pasの中には関数が一つ function crypt(const pw, salt: string): string;
saltは生成用文字列として、、、pwは明らかにパスワード・・これが分からないとどうしようもなぃ、で小一時間。
何とかして発見。とりあえずは
ということで何とかなりそうでし。
>>667
お気持ちだけでもありがたく受け取りますでし。
もしできちゃってたなら、ごむんなさぃ(´・ω・`)
Upしていただけたら使いますでし

そしてトリップ照合てすと
695658 ◆5IvwmMJfng :03/10/28 20:13
あるぇ?全然違う・・・
696658 ◆/JExiA7.Yc :03/10/28 20:23
全角英数が入ってると2chと全く別物になるっぽぃでしね。
2ch側で半角に修正とかしてくれてるのかな?
スレ汚しスマソ・・・
>>693
(ObjectList.Items[Index] as TForm2).Visible := True;
ではダメかい?
>>693
(List[Index] as TForm).Visible:=True;
>>697-698さん、本当にありがとう!!
連続で申し訳ないのですが、もう一つ・・・・・

実際に、教えていたたいたようにやってみて、Addしたときに
帰ってくるIndexで管理しようとしたのですが、Index番号で
0、1、2とオブジェクトがあるとき、1を消去すると、番号が
切りつめられ0、1(2が1に切りつめられた)になってしまうため、
番号での管理ができないことがわかりました。

そこで、(varはしょってます)
procedure TTestClass.Open();
begin
 Form := TForm3.Create(Form1);
 Index := ObjectList.Add(Form);
 (ObjectList[Index] as TForm3).Visible := True;
end;

procedure TTestClass.Close(ObjForm: TObject);
begin
 ObjectList.Remove(ObjForm);
end;

とし、閉じられるフォームで
TestClass.Close(Self);
と呼び出したところ、1枚目と2枚目のフォームはうまくいくの
ですが、3枚目に必ずエラーが、2枚でも何回かやると、
なぜかエラーになります・・・・。

本当になさけないですが、これはどこがいけないのでしょうか。
申し訳ないですが、おわかりの方おられましたら、よろしくお願い
いたします。
//ObjectList.Remove(ObjForm);
Index := ObjectList.IndexOf(ObjForm);
(ObjectList[Index] as TForm3).Release;
ObjectList[Index] := nil;
ではダメかい?
701デフォルトの名無しさん:03/10/28 21:17
(ObjectList[Index] as TForm3).Release;

ObjForm.Release;
でいいか。
fs : TFileStream;
このfsがCreateされたかどうかを外部から見分ける方法はどうしたら
よいのでしょうか?
>>702
見分ける方法はないから、自分で管理するしかない。
>>700
んー、それでもエラーになったんですよね・・・・
ちょっと、もう少し実験してみます。

駄目だったら、またご教授いただければと
思いますので、よろしくお願いします。
まずフォームはReleaseで解放しなくてはいけない。
だからTObjectListの使用はお勧めしない。
代わりのTList使ってフォームを閉じる場合。
TForm(List[Index]).Release;
List.Delete(Index);
で良い。
>>705
ならば TObjectList.Create(False) とするのみ。
>>706
TObjectListを使う意味がないような気がするが。
708デフォルトの名無しさん:03/10/29 03:52
簡単なバイナリエディタを作ろうと思ってますが、
全くどうしたらいいのか解らないです。

ファイルを読み込み、16進数で表示し、それを保存するには
どういった流れでいけばいいのでしょうか?
とりあえず、文字列と16進数の相互変換などはどのようにしたら出来るのですか

わかる方手助けお願いします
>>708
BinToHex, HexToBin, StrToInt, IntToHex, Formatなど参照

function Dump(mem: TMemoryStream; pos: Int64): string;
var
 buf: array[$0..$F] of Byte;
 n: Integer;
begin
 Result := Format('%.8X: ', [pos]);
 mem.Position := pos;
 for n := 0 to mem.Read(buf, $10) - 1 do
  Result := Result + Format('%.2X ', [buf[n]]);
end;

var
 mem: TMemoryStream;
 path: string;
begin
 mem := TMemoryStream.Create;
 try
  mem.LoadFromFile(path); // 読み込み
 //Dump(mem, 0); // 表示
  mem.SaveToFile(path); // 保存
 finally
  mem.Free;
 end;
end;
>>707
痛い所突くなあw

ただのポインタにオブジェクトを持たせたくないだけで、自動解放はおまけだと
思ってる、という理由では納得してもらえないだろうな。
711デフォルトの名無しさん:03/10/29 10:33
IDEのクラス補完で自動作成されるコードは末尾に追加されますが位置の指定はできないのですか?
>>711

あれ?名前でソートされた順に作られないの?
713デフォルトの名無しさん:03/10/29 11:04
ImageListにアイコンをいくつか登録しておいて
それをタスクトレイアイコンとして使いたいのですが、
ImageListからアイコンのハンドルを得るには
どうすればよいでしょうか?
調べてみたのですが、よくわからないので質問させてください。
フォーム、を閉じるとき方法として、

Form1.Free;
Form1.Close;
Form1.Action:=caFree;
Form1:=nil;

とありますが、それぞれどれとどれの組み合わせで使用すれば
Formが完全にメモリから消去されるのかいまいちつかめません。

例えば、
Form:=TForm.Create(Self);
Form.Visible:=True;
Form.Free;
とやるとフォームも消えますが、Freeしてしまえば、Visible:=Falseはしなくてもいいもんなのでしょうか。
皆さんはFormを破棄するのに、どのような方法を利用しておられますか?

また、procedure内でvar Form:TFormを宣言し、TForm.Createし、
Freeせずに関数が終了したとします。
このとき、Formは画面上に表示されたままですが、
Formにはもうアクセスできないので、オブジェクトを操作できないですよね。
これは、どういった理由からそうなってしまうのでしょうか。
これがいわゆるメモリに残って解放されないゴミと考えていいということですか?
>>714
フォームではFreeを使わずReleaseを使う。
Closeは閉じるだけ。Showを使えば再度表示できる。

>これは、どういった理由からそうなってしまうのでしょうか。
Formがフォームの実体を指している。Formが消えてフォームの実体を
指さなくなっても、フォームの実体は残ったまま。

>これがいわゆるメモリに残って解放されないゴミと考えていいということですか?
いいと思う。
>>715
ありがとうございます。Releaseを使うんですね。
イベントハンドラが終了するのを待つ・・・ですか。

ReleaseすればcaFreeとnilは必要ありませんか?
たぶん状況によっても異なると思うのですが、
caFreeとnilを使用しなければならない、
または使用したほうが便利というときも存在するのでしょうか。
717デフォルトの名無しさん:03/10/29 12:21
テーブルのフィールドの型を知るにはどうすれば良いのですか?

FieldName := Query1.Fields.Fields[i].FieldName;
上記と同じような感じで
FieldType := Query1.Fields.Fields[i].FieldType;
こんな風に取得できれば嬉しいのですが・・・。
>>716
nilの代入自体は必要じゃない。ただしnilであればフォームの実体は
存在しない(=解放済)と判断したい場合などは便利。

caFreeは使ったことがないので、誰か解説よろ。
>>717
DataTypeではダメかい?
720デフォルトの名無しさん:03/10/29 12:49
listViewのreport表示で
1 2   3
1 黒  青
2 黒  赤
3 黒  赤
のように個別に色を変えたいんですが
どうしたらいいのでしょうか?
Del厨はそんなことも出来ないのか?(驚
722717:03/10/29 13:05
>>719
おおおお!!
こんなのがあったんですね。
ありがとうございます。
>>721
くだすれだからな
pascalつかいは、伝統的に親切なんだよw
>>718
なるほどーありがとうございます。
もっと勉強しないといけないですね・・・・
たすかりました!
>>720
OwnerDrawプロパティからたどってみて。
726デフォルトの名無しさん:03/10/29 13:42
SetLength で 動的配列を指定しているのですが、
配列の長さを途中で変更することは出来ないのでしょうか?
727デフォルトの名無しさん:03/10/29 13:56
redim
728デフォルトの名無しさん:03/10/29 13:59
データベースのテーブルのフィールドがプライマリーキーかどうか調べるには
どうすれば良いでしょうか?
>>717みたいに
PrimaryKeyFlg := Query1.Fields.Fields[i].PrimaryKeyFlg
こんな感じ使えたらベストなのですが・・・。
>>726
SetLengthでできるはずだが。
>>723
うけけけ。
>>723
Del使いがさらにレベルが低いと思われるような
レスするなよ。
>>723
親切といっておきながら教えない所が
厨房だよね。
>>728
ヘルプ眺めてもわからんかった。


荒れてきたし、マナーを守らん香具師も出てきたので撤収。
734699:03/10/29 14:32
>>700-701 >>705-707さんありがとうございました

こんな感じでできました。ポインタのほうが意味が掴みやすかったので、
TListでやってみました。グローバルでListを作成し、Classで
procedure TTestClass.Open();
begin
 ObjForm := TForm2.Create(Form1);
 Index := List.Add(Pointer(ObjForm));
 TForm2(List.Items[Index]).Visible := True;
end;
procedure TTestClass.Close(ObjForm: TForm2);
 Index := List.IndexOd(Pointer(ObjForm));
 TForm2(List.Items[Index]).Release;
 List.Remove(Pointer(ObjForm));
end;

作成する側で、TestClass.Open;
閉じる側でTestClass.Close(Self);

とやっています。自信ないですが、さしあたり、こんな感じでよいでしょうか。
いままでFormを入れる変数に困っていましたが、これでよいようであれば、
なんとかなりそうです。TListを使うとポインタで管理できるので、どんな
コンポーネントでも管理できそうで便利ですね。これ一つあれば、なんでも
出来そうです。本当にありがとうございました。
>>733
わざわざ調べて頂いて、ありがとうございました。
私もヘルプを見たのですが分かりませんでした。
それっぽい項目がないので、何か別の方法でやるのかもしれませんね。
736720:03/10/29 15:22
>>725
レスありがとうございます。
OwnerDrawを調べたら、できました!こんな感じです。

procedure TServerForm.ListView1CustomDrawSubItem(Sender: TCustomListView;
  Item: TListItem; SubItem: Integer; State: TCustomDrawState;
  var DefaultDraw: Boolean);
var
    s1: String;
begin
    s1 := Item.SubItems.Strings[1];
  case SubItem of
    0 : Sender.Canvas.Font.Color := clBlack;
    1 : Sender.Canvas.Font.Color := clBlack;
    2 :
    begin
     if(s1 = '青') then
             ListView1.Canvas.Font.Color := clBlue
     else
            ListView1.Canvas.Font.Color := clRed;
    end;
  end;
end;

ありがとうございました!!
737708:03/10/29 15:27
>>709
ぅぉーーー。出来ましたよ。
試行錯誤の上書き換えて保存も出来ました。
これでようやく…ニヤリ
738デフォルトの名無しさん:03/10/29 15:30
>>736
 おめでと。
 がんばったね。マルチポストは嫌われるからやめたほうがいいよ。
739720:03/10/29 15:42
>>738
???
俺ですか?
ここにしか、投稿していませんが。。。
>>736
↓一行で書ける
ListView1.Canvas.Font.Color := IfThen(s1 = '青', clBlue, clRed);
741720:03/10/29 15:57
>>740
レスありがとうございます。
非常にすっきり見やすくなりました!
ご教示ありがとうございます。
742デフォルトの名無しさん:03/10/29 16:02
>>737
なんだ?なにを作ろうとしているんだ!!
>>742
はげしく気になるねw
744デフォルトの名無しさん:03/10/29 16:35
フォームの上の部分(メニューバーというんでしょうか)で
左上のアイコンを表示させて、右上のボタンをひとつも無し
にするにはどうしたらよいでしょうか。BorderIconsプロパティ
など切り替えてみたりしたのですが、どうしてもうまくいきません。
自作
746デフォルトの名無しさん:03/10/29 17:38
>>745 そうですか サンクスです
解法@
1.非クライアント領域ごと消し去る。(bsNone
2.PanelをalTopで貼り付け。Bevelは二つともNone。Colorもそれっぽく
3.Panel上にImage(擬似Icon用)、Label(擬似Caption用)をおく。詳細はお好みで。
4.ImageのOnClickにポップアップメニューを設定しておく。PanelのOnMouseDownで移動できるようにしておく
bsNoneだと縁がなくなるのでそれが気に入らない場合はどでかぃPanelを最初に一個設置。Bevelを調整。
とりあえずハリボテ完成。
解法A
オナニー
748デフォルトの名無しさん:03/10/29 20:55
>>747
解法@は難しそうなので今回はやめときます。
結局BorderIconsを[biSystemMenu]だけにして
右上の×印ボタンが押されたとき、本当に終了するか
ダイアログを表示するようにしたいのですが、
イベントをどうやって捕らえたらよいですか?
OnCloseやOnDestroyだとできませんでした。
>>748
OnCloseQuery
Indyって何って読むのですかね?
751インディ:03/10/29 23:34
あい・えぬ・でぃ・わい
752インディジューンズ:03/10/29 23:42
わい・えむ・しぃ・えぃ
名前の由来は”インディアン”から来ていると聞いた事があるけれど、
果たして本当なのだろうかね。
このスレを読んでレスを付けるのはDel厨以外にいったい誰がいるのだろう?
>>728
ixPrimary が IndexDefs[x].Options にあるか調べれ。
756728:03/10/30 10:19
>>755
レスありがとうございます。
TSQLDataSetの使い方が分からず苦戦しておりますが、
なんとかなりそうです。
Delphiの宿題丸投げスレはココでいいんでしょうか?

現在ループのところを勉強してるんですが、サッパリ分かりません。
@繰り返しを利用して、九九の表を表示するプログラムを作成せよ。
A自然数nを入力すると、各i(i=1,2,・・・,n)に対して、1+2+・・・+nを計算するプログラムを作成せよ。
B自然数同士の乗算を加算の繰り返しで計算するプログラムを作成せよ。
C配列に格納された数値データを昇順に並べ替えるプログラムを作成せよ。
というかんじで4問出されたのですが・・・
どなたか助けてください。゚(゚´Д`゚)゜。
758デフォルトの名無しさん:03/10/30 11:26
>>757
うわー、思いっきり初心者の課題だなー
@繰り返しを利用して、九九の表を表示するプログラムを作成せよ。
 for 文を2つ書きなさい。そのためには変数が2つ必要です。

A自然数nを入力すると、各i(i=1,2,・・・,n)に対して、1+2+・・・+nを計算するプログラムを作成せよ。
 Σn はn*(n+1)/2 でも計算出来ます

B自然数同士の乗算を加算の繰り返しで計算するプログラムを作成せよ。
  2倍しながら、処理するのが普通です

C配列に格納された数値データを昇順に並べ替えるプログラムを作成せよ
  クイックソートと言いたいけど、普通にfor文2つで処理してみてはどうですか?
>>757
(a) 考え方を教えろ。
(b) なんでもいいから動くソースをよこせ。
どっち?
761758:03/10/30 11:49
初心者の課題って煽っただけでレスつくから面白いなー
762757:03/10/30 11:52
>>760
あの、丸投げなのでコピペで提出できる形でお願いします。
ソースでお願いします。
763728:03/10/30 11:54
>>756
TSQLDataSetは使いませんでした。
TTableで出来ました。
こんな感じでプライマリキーを取得できました。
なにかおかしければご教授下さい。

for i := 0 to Table1.IndexDefs.Count - 1 do begin
  s := Table1.IndexDefs.Items[i].Fields;
  for j := low(Field) to high(Field) do begin
    if Pos(Field[j].Name,s) <> 0 then begin
      Field[j].PrimaryKeyFlg := true;
    end else begin
      Field[j].PrimaryKeyFlg := false;
    end;
  end;
end;
>>757
これが宿題文そのままだったら、つっこみどころ満載かも。

@九九の表って、表示の仕方がわからん。
たぶんTStringGridあたりを使うのだろうが、見出しはいる?いらない?とか
Bこれも入出力がよくわからん。
[]*[]と入力させて、[]+[]+[]と表示させて、結果も出せばokなのかしら。
Cこれも入出力がわからん。
ランダムで勝手にいれて、ソートした数字はどこに出力すれば??

ロジックだけを見せればいいなら、問題ないけどね。
とりあえず、担当の教授に通報しますた!
765デフォルトの名無しさん:03/10/30 11:55
質問があります。

SetScrollPos(Memo1.Handle, SS_LEFT, 100, True);

を実行すると、水平スクロールボックスの位置が100に移動しますが、
メモ内のテキストはスクロールされません。
メモ内のテキストもスクロールするにはどうすればいいでしょうか。
766755:03/10/30 12:25
PrimaryKeyでなくても反応しないか?>>763
PrimaryKeyは1つだけなので漏れはこうしてるよ。
for i := 0 to Table1.IndexDefs.Count - 1 do begin
  if ixPrimary in IndexDefs[x].Options then begin
    s := Table1.IndexDefs.Items[i].Fields;
    for j := low(Field) to high(Field) do begin
      if Pos(Field[j].Name,s) <> 0 then begin
        Field[j].PrimaryKeyFlg := true;
      end else begin
        Field[j].PrimaryKeyFlg := false;
      end;
    end;
    break;
  end;
end;
767>757:03/10/30 12:29
uses SysUtils, Windows;
//B自然数同士の乗算を加算の繰り返しで計算するプログラムを作成せよ。
function mul(a,b:Cardinal):Cardinal;
var i:Integer;
begin
Result:=0;
 for i:=0 to 31 do begin if (a and (1 shl i))<>0 then Result:=Result+b; b:=b+b;  end;
end;
procedure sort(var b:array of Integer);
 var i,j:Integer;
 begin
  for i:=0 to High(b)-1 do
  for j:=i+1 to High(b) do
  if b[i]<b[j]
  then begin b[i]:=b[i] xor b[j];b[j]:=b[i] xor b[j];b[i]:=b[i] xor b[j];end
 end;
 var i,j:Integer; c:Char;  dt,ans:array of Integer;
begin AllocConsole;
// @繰り返しを利用して、九九の表を表示するプログラムを作成せよ。
for i:=1 to 9 do begin
for j:=1 to 9 do write(i*j:3);writeln;
end;
//A自然数nを入力すると、各i(i=1,2,・・・,n)に対して、1+2+・・・+nを計算
write('自然数nを入れてね');readln(j);writeln('Σn=',j*(j+1) div 2);
write('掛算aを入れてね');readln(i);
write('掛算bを入れてね');readln(j);
writeln('a*b=',mul(i,j));
//C配列に格納された数値データを昇順に並べ替えるプログラムを作成せよ
Setlength(dt,10);
for i:=0 to High(dt) do dt[i]:=Random(100);  ans:=copy(dt,0,length(dt));  sort(ans);
for i:=0 to High(dt) do writeln(i:5,dt[i]:5,ans[i]:5);
end.
もうそろそろネタばれしたらどうか?
なんか可哀想になってきたw
>>764
TStringGridなんて使わんだろ。
つーかDelじゃなくて、単なるPascalの課題じゃないの?
{$APPTYPE CONSOLE}でやるみたいな。
>>769
あーそういうことね
Delphiでもっと複雑なことやってんのかとおもてたよ
771デフォルトの名無しさん:03/10/30 19:19
ショートカットアイコンにD&Dしたファイルのパスを取得する
方法を教えて下さい。お願いします。


ParamStr
>>771
ファイル1個だけなら >>772 つまり コンソールで引数に入れたのと同じです。
ファイル数個でも同じ。

ファイルとても沢山だと シェルエクステンションでやるしかないのかな?
>>772
>>773
ファイルひとつだけだからParamStrでうまく取得出来ました。
色々とありがとう
775デフォノレトの名無しさん:03/10/30 21:51
CRC算出しようとしています。
いろいろ調べて、
ttp://forum.nifty.com/fdelphi/samples/00229.html
のユニットを使い、
crc(0,PByte(string),Length(string))
という形で文字列(テキストファイル)は成功しました。
しかし、exeファイル等だと(EOFコードが入ってるから?)どうもうまくいきません。
そこで、MemStreamやFileStreamを使ってやってみようとしましたが、エラーが起きてだめです。
どうしたらいいでしょうか。教えてください。お願いします。
777デフォルトの名無しさん:03/10/30 22:31
Usesを整理しようとひとつづつ消していったらBeep;が鳴らなくなった。。。
コンパイル時にエラーはないです。何か足りませんでしょうか。

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, ComCtrls, Buttons, ExtCtrls, Menus, IniFiles, Math,
ShellAPI, FileCtrl, ActnList, ImgList;
>>777
名前が衝突してんじゃないの?
SysUtils.Beep;
としてみれば?
779デフォルトの名無しさん:03/10/30 22:45
>>778
だめでした。ごみ箱を空にするとか
普通のWindowsの操作ではビープ音は鳴るのですが・・・。
Delphiで新規プロジェクトでボタンひとつ置いてテストしたの
ですがDelで作ったプログラムは鳴りませんでした。
780775:03/10/30 22:46
非常に簡単に解決しました。
PByte(string)をStream.Memoryにすればいいだけでした…。
コード補完って便利だねぇ。
781デフォルトの名無しさん:03/10/30 23:55
スクロールボックスの水平スクロールバーが表示されているか、表示
されていないかを取得するには、どうすればいいでしょうか
>>781
GetWindowLong
>>779
MessageBeep
784デフォルトの名無しさん:03/10/31 00:27
すいません、GetWindowLong が良くわからないです。
恐縮ですが、表示されているか、されていないかのコードをお願できないでしょうか?
785デフォルトの名無しさん:03/10/31 00:32
786763:03/10/31 10:11
>>766
ああ、なるほど。そこに
ixPrimary in ParadoxT.IndexDefs[i].Options
これを入れたら良いんですね。
勉強になりました。
ありがとうございました。
>>783
MessageBeepでもだめでした。
sndPlaySoundを使ってサウンドファイルを見つからない状態に
するとデフォルト音としてのビープ音がなるようになりました。
不本意ですが、これで我慢することにします。

        /::::)(:::)(:::::::::::)(::::::^::::::::::\
      (::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::\
     /::::::::::/ノ::::::::ノ::::::::ヽ:人::::::::::ヽ:::::::::::::::)
     (::::::::::/  ):::ノ::::ノ ) ソ ヾ::::::::::::丶::::ヽ
    (:::::::::/ 彡  ノ   ノ  :: 彡:/)) ::::::::::)   
   (::::::::::/彡彡彡彡彡   ミミミミミミミ :::::::::::)
   ( :::::::// ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ |:::::::::)
     | =ロ   -=・=-  ‖ ‖ -=・=-   ロ===
     |:/ ‖    / /ノ  ヽ \     ‖ ヽ|ヽ
     |/  ヽ`======/ .⌒ ` ========ノ.   ..| |   
    .( 。 ・:・‘。c .(●  ●) ;”・u。*@・:、‘)ノ
   ( 。;・0”*・o; / :::::l l::: ::: \ :。・;%:・。o )
    (; 8@ ・。:// ̄ ̄ ̄ ̄\:\.”・:。;・’0.)
   .\。・:%,: )::::|.  ̄ ̄ ̄ ̄  | ::::(: o`*:c /
    \ ::: o :::::::::\____/  ::::::::::   /
      (ヽ  ヽ:::: _- ::::: ⌒:: :::::::: -_    ノ
       \丶\_::_:::::_:::: :::::_/::::  /
        | \ \ ::::::::::: :::::::::: ::: ::__/ |
    ̄ ̄\ 丶  ̄ ̄ ̄ ̄ ̄ ̄ ̄    / ̄ ̄
      /::::::::::::::::::::::::::::::::::::::::::::::: ::::::::\
      (::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::\
     /:::::::::::/ノ::::::::ノ::::::::ヽ:人::::::::::ヽ::::::::::::::::)
    (::::::::::/:::ハ):::ノ::::ノ ) ノノヾ::::::::::::丶::::ヽ
     (:::::::::/ 彡  ノ   ノ  :: 彡:/)) ::::::::::)
    (::::::::::/彡彡彡彡彡   ミミミミミミミ :::::::::::)
    (:::::::// ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ |:::::::::)
     | =ロ   -=・=- ‖ ‖ -=・=-   ロ===
     |:/ ‖    //ノ  ヽ \      ‖ ヽ|ヽ
     |/  ヽ`======/ .⌒ ` ========ノ.   ..| |
    .(        (●  ●)        ‘)ノ
   (        / :::::l l::: ::: \         . )
    (      // ̄ ̄ ̄ ̄\:\.      .)
    \    )::::|.  ̄ ̄ ̄ ̄  | ::::(:    / 
     \ :::  :::::::::\____/  ::::::::::  /
      (ヽ  ヽ:::: _- ::::: ⌒:: :::::::: -_    ノ
       \丶\_::_:::::_:::: :::::_/::::  /
        | \ \ ::::::::::: :::::::::: ::: :: __/
    ̄ ̄\ 丶  ̄ ̄ ̄ ̄ ̄ ̄ ̄    / ̄ ̄
童貞捨ててすっきりしてきたか?
      /::::::::::::::::::::::::::::::::::::::::::::::: ::::::::\
      (::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::\
     /:::::::::::/ノ::::::::ノ::::::::ヽ:人::::::::::ヽ::::::::::::::::)
    (::::::::::/:::ハ):::ノ::::ノ ) ノノヾ::::::::::::丶::::ヽ
     (:::::::::/ 彡  ノ   ノ  :: 彡:/)) ::::::::::)
    (::::::::::/彡彡彡彡彡   ミミミミミミミ :::::::::::)
    (:::::::// ̄ ̄ ̄ ̄ヽ===/ ̄ ̄ ̄ ̄ヽ |:::::::::)
     | =ロ   -=●=- ‖ ‖ -=●=-  ロ===
     |:/ ‖    //ノ  ヽ \      ‖ ヽ|ヽ
     |/  ヽ`======/ .⌒ ` ========ノ.   ..| |
    .(        (○  ○)        ‘)ノ
   (        /   l l   \         )
    (      // ̄ ̄ ̄ ̄\ \       )
    \    )  |   ̄ ̄ ̄ ̄  |  (     / 
     \      \____/       /
      (ヽ  ヽ                 ノ
       \丶\_ _  _   _/    /
        | \ \            __/
    ̄ ̄\ 丶  ̄ ̄ ̄ ̄ ̄ ̄ ̄    / ̄ ̄
プログラマって、本当に↑こんなキモイ感じの風貌の人が多い職業なのですかね?
毎日毎日PCの前に座って臭い息吐いているよ。
実数型の変数を使ってるんですが、
小数点第二位以下を切り捨てるのってどうすればできますか。
10倍して整数化して10で割る。
うわ頭悪そうな解法。
>>796
頭良さそうな解法を知ってるなら教えてください。
798794 ◆jG/Re6aTC. :03/10/31 22:43
鳥つけておきます。
>>795でもいいかな、と思うのですが、
他になにか良い関数などありますでしょうか。
ListViewの項目をドラッグアンドドロップで入れ替える方法が分かりません。

とりあえず、ListViewのDragModeをdmAutomaticにして、
OnDragOverにAccept:= Source is TListViewと書いて、
OnDragDropに何か書くということまでは分かりました。
あと、どうやるのでしょう・・・・。
dll内のグローバルフックプロシジャから
外部ファイル読み書きする方法はありませんか?
Reset・Rewriteやファイルストリームだと
どうやっても止まってしまうんですが。
>>800
実行されるスレッドは別ということに気づけ
Checkbox付きのTreeViewを使いたいんですが、どのようにしたらいいのでしょうか?
>>798
そういう関数を作れば? 1行で書ける関数だけど、キミにとって判り難さを解消されるなら意味がある分割だよ。
>>799
D&Dで入れ替えたいのは、 他のアプリから? それとも自分のアプリの要素?
とりあえず、ドロップで挿入するだけの場合こんな感じかな
procedure TForm1.ListViewxDragDrop(Sender, Source: TObject; X, Y: Integer);
var s,d:TListView;
it: TListItem;
begin
s:=Source as TListView;
d:=Sender as TListView;
it:=d.GetItemAt(X, Y);
if it=nil
then with d.Items.Add do Assign(s.Selected)
else with it.Owner.Add do Assign(s.Selected);
end;
805デフォルトの名無しさん:03/11/01 11:03
引数 : char*, 返り値 : booleanを持つ、VC++のDLLを使おうとしています。
(実行時ステータスは返り値で、実際の関数からの応答文はchar*に入る)

まず、DLLに渡す引数を設定するため、
type CharP = ^Char; で、Charのポインタ型を宣言して、
var test_char : CharP; で、CharP型の変数を宣言して、

function Hoge(test_char:charP): boolean; cdecl; external 'X.dll';
として呼び出す関数を宣言して

Hoge(test_char);
として関数を呼び出しました。ここまでは成功して、返り値もtrue。

次に、test_char^ で応答文の先頭文字にアクセスしたのですが、二文字目を見ようとして
inc(test_char); とやったら無効なポインタ操作と怒られてしまいました。
この操作を行った直後に test_char^ を見ると、二文字目が出てきているんですが、
何かまずいのでしょうか・・・?
>type CharP = ^Char; で、Charのポインタ型を宣言して、
"PChar型"でヘルプを引くと幸せになれるぞ…
そのDLL関数は引数で与えたポインタが示すメモリ上に何らかの情報を書き込むのですか?

それならば関数を呼び出す前に、関数によって書き込まれるデータ長よりも長いメモリを
Delphi側で確保してますか?

あとBooleanよりもLongboolを使った方が適切かもしれません。
>>806
・・・・・なるほど!。・゚・(ノД`)・゚・。
Delphiでポインタを扱うはめになるとは思いもせず、軽く読み飛ばしてました。

>>807
あぁ、これもです・・・領域は前もって確保しないといけないんですね。
255文字まで返るはずが、5文字目あたりで文字列が破綻してマシタ。
ありがとうございます。試してみます。
809デフォルトの名無しさん:03/11/01 11:56
構造体のメンバーを0で初期化したいのですが、皆さんはどんな方法でされてますか?
810 :03/11/01 11:58
>>809
Fillchar


でもやっぱ遅いのかな
811デフォルトの名無しさん:03/11/01 12:06
>>810
ありがとうございます。
参考になりました。
>>809
zeromemory
>>802
1メッセージを送る
2オーナードロー
814794 ◆jG/Re6aTC. :03/11/01 13:51
>>794っす。

>>803
レスども。
>>795氏に倣ってこういう感じにしたらうまくいきました。

Round(変数 * 100) / 100
し、四捨五入だったのか――!?
RoundToかSimpleRoundTo使っとけ
切り捨てだったら
Integer(I * 100) div 100
だろ
>>816
Delphiの実数型は Integerには収まらない場合もあるから
Int関数 を使った方がいいね。 ・・・負数の場合別けが必要かも
818794 ◆jG/Re6aTC. :03/11/01 14:16
Roundは四捨五入だったのですね・・・。
>>817氏のでやってみます。
サンクスです。
>Roundは四捨五入だったのですね・・・。
違う。
ヘルプ嫁。
820デフォルトの名無しさん:03/11/01 14:42
馬鹿だなあコイツ(笑
チンポ チンポチンポ チンポチンポ チンポチンポ チンポチンポ チンポチンポ チンポ
マンコ マンコマンコ マンコマンコ マンコマンコ マンコマンコ マンコマンコ マンコマンコ マンコ
ウンコ
824デフォルトの名無しさん:03/11/01 18:23
Delphi7のProfessional版ってWebサービスのサーバは作れましたっけ?
>>824
作れます。それなりの知識も必要ですけど。
826824:03/11/01 19:04
>>825
レスありがとうございます。
いま、Webサービスのサーバを作って、それをクライアントから利用しようと
しているのですが、WSDLインポートウィザードでURLを指定すると
「モジュール'dclsoap70.bpl'のアドレス****でアドレス****に対する読み込み違反がおきました。」
というエラーメッセージが表示されてしまいます。

一応、ブラウザからURLを指定するとXMLの記述が見えます。
しかし、Excelのマクロ→VBEditorのWebServiceでURLを指定しても
何も見つかりませんでしたになりますので、サーバのDLLを作った時点で
何か失敗しているのかもしれません。

これはどこに原因があるのでしょうか?
827824:03/11/01 19:16
ごめんなさい。自己解決しました。
サーバの方でインターフェースのとこに何も書かず、
実装部でのみコードを書いていたからでした。
お騒がせしてスマソ。
Delphi用のobfuscatorってないんですかねぇ
obfuscator かけるなら UPX みたいな実行圧縮の方がいいかもね
>>818
銀行家の丸め。
ファイル送信ソフト作ろうとしてるんですが
自身(exe)が使用している帯域幅の取得はどのようにすればよいでしょうか?
単数の場合はStreamの位置の変化を経過時間で割ればいいと思いますが
複数になると複雑になる上、めんどくさそうです。

もっとスマートに
自身が使用している帯域全部を取得する方法があればご教示お願いします。
>>831
それは実装法がばっちいから、複数になると複雑になるんでないの?
singletonでthread safeな帯域算出オブジェクトを用意すればいいだけじゃないのか。
834799 ◆2z2Cftw3Ig :03/11/01 22:22
>>804さん、レスありがとうございます。
ドロップの対象は自身のListViewです。
一応、OnDragDropイベントに Listview.MoveSelection(ListView);
の一行を書けば入れ替えできるんですが、動きが変です。

「ドラッグした項目をドロップしたIndexに挿入して、ドラッグする前の項目を消す」
みたいな感じにしたいのです。
OnStartDragイベントにも何か書かなきゃダメかなぁ。
835 ◆tQoZX1KNPg :03/11/02 08:16
RichEditのIMEの色を変えたいと思います

imecolor[0].crText := clBlack;
imecolor[0].crBackground := $00FFC0A0;
imecolor[0].dwEffects := CFE_AUTOCOLOR;
imecolor[1].crText := clBlack;
imecolor[1].crBackground := clWhite;
imecolor[1].dwEffects := CFE_AUTOCOLOR;
imecolor[2].crText := clBlack;
imecolor[2].crBackground := clAqua;
imecolor[2].dwEffects:= CFE_AUTOCOLOR;
imecolor[3].crText := clBlack;
imecolor[3].crBackground := $00C0D0C0;
imecolor[3].dwEffects := CFE_AUTOCOLOR;
SendMessage(RichEdit1.Handle,EM_SETIMECOLOR, 0,imecolor[3]);

どうも配列で指定の仕方がおかしいらしく最後の文で止まります。
どうすると色を変えられるでしょうか?
imecolor[3] てのは どういう意味だと思って使ってるの? 前に書いたのをコピペするよ。

http://hp.vector.co.jp/authors/VA009712/take/delphi/kabedel.htm は間違い。

var
CompColor:array[0..3] of TCompColor;
begin
  SendMessage(Handle, EM_GETIMECOLOR, 0, Integer(@CompColor));
--- 必要な個所を変更 -------
CompColor[0] 入力中
CompColor[1] 変換中
CompColor[2] 変換文字列
CompColor[3] 変換後再変換


  SendMessage(RichEdit1.Handle, EM_SETIMECOLOR, 0, Integer(@CompColor));
end;

TCompColor;
  crText: TColorRef;
  crBackground: TColorRef;
  dwEffects: Longint;

http://yokohama.cool.ne.jp/chokuto/urawaza/struct/CHARFORMAT.html
このdwEffects と同じです。
837 ◆tQoZX1KNPg :03/11/02 09:37
>>836
配列の使い方分かってませんでした。
ありがとうございます。
DelはCとは違って配列をポインタとしては扱えないよ。
Memo1とRichEdit1を両隣に配置すると行間が違うのがわかります。
RichEdit1の行間をMemo1と同じにしたいのですが、プロパティにはなさそうです。
APIとか使うんでしょうか?
よろしくお願いします。
cocolcloak
841デフォルトの名無しさん:03/11/02 23:01
TComponentから派生させたコンポーネントで
OnMouseWheel、OnMouseWheelDown、OnMouseWheelUp
を受け取りたいのですが再定義しただけではイベントが受け取れません。
誰か知ってる方がいましたら教えてください。
>>841
出来ません。TComponentは不可視のコントロールです。
TWinControlから派生させてください。
>>841
TCustomControl からの派生でした^^;
>>842さん知ってたら教えて下さい。
844842:03/11/03 00:13
フォーカス取得状態じゃないと動きませんよ。
非フォーカス状態でも動かしたいと言ってもWindowsの仕様なので出来ません。
842>>
言われてみればフォーカス取得してなかったかも・・・
ありがとうございます、早速試してみます。
>>842さん、
無事取得できました、
どうもありがとうございました。
>>839
Windowsのメモコントロールやリッチエディットコントロールには行間を調整する機能はないようです.
メモコンポの代わりにリッチエディットコンポを使うことを検討してみてください.
リッチエディットコンポのPlainTextプロパティをTrueにすることで単純なテキストを編集する事ができます.

(なおリッチエディットコントロールの行間隔はWindowsのバージョンによって異なります.
 (メモコントロールはわかりません)
 行間隔が変わると困るようなプログラムは書かないようにしなければなりません.)
848504 ◆9ReLyaxCFw :03/11/03 07:54
非常に遅レスですが、あれから色々やってみたところデータ読み取りになんとか成功しました。
今更ながらですが皆様お世話になりました。
ありがとうございました。
あのう、ググってみたんですが判らなかったのですが
DelphiでTObjectから派生しない完全に新規のクラスってどう作るのでしょうか
無理。軽いのが作りたいならobject使え。
851デフォルトの名無しさん:03/11/03 11:05
ボーランドのdelphi parsonalで
フリーカーソルモード(っていうんでしょうか?)って解除できるんでしょうか?
何も無いところに行くのはちょっと気になるので
852デフォルトの名無しさん:03/11/03 11:26
>>851
フリーカーソルの話は荒れるので禁句
禁止するより、アドインのリンク示した方がいいのでは?
といいつつ俺もあまりのFAQに 探してやるのも億劫に・・すまんな。
まあリンク出さなくても
Delphi フリーカーソル の2つキーワードがあればgoogle検索すればいいだけでしょ。 

アドインも追加したら間違いなく出る筈だ。
855851:03/11/03 11:42
レスどうもです、検索したら見つかりました
この件は禁句でしたか・・・すんませんでした
856849:03/11/03 11:57
>>850
勉強になりました。ありがとう。
ボーランドのIDEって使いづらいね。
>>851
フリーカーソルのアドインについては、ここ見てごらん。
ただし、貴殿の書き込みにDelのバージョンが書いていなかったので、
これが使用できるかどうかは未確認。
ttp://homepage1.nifty.com/fuu/
859デフォルトの名無しさん:03/11/03 21:50
フォームにドラッグアンドドロップされたファイルのパスを取得するにはどうすれば良いのでしょうか?
>>859
それを実現するコンポなら山ほどあります。
技術を知りたいならShellAPIのDragAcceptFiles、DragQueryFile、DragFinishを調べてみるとよい。
861デフォルトの名無しさん:03/11/03 23:29
任意のファイルの内容を変数に入れるにはどうすればよいのでしょうか?
TFileStream
テキストファイルだけならTStringList.LoadFromFile
863861:03/11/04 00:17
>>862
上手く出来ました。ありがとうございました。

TStringをStringにするにはどうすればよいのでしょうか?
864 :03/11/04 00:22
ここって>>863みたいのにも「ヒントもらったんだから、検索ぐらいしろ」
って言うのはタブー?
865864:03/11/04 01:07
>>863
って、よく読んだら質問内容が違うのか…。失敬。

でも、質問が意味不明。
なんでいきなりTStringが?TStringlistのtext?
hoge.FormCreate(self)とするとプロシージャの中でhogeを作れますが、
このhogeを.FormCloseさせたいときはどうしたらいいのでしょうか?
867デフォルトの名無しさん:03/11/04 06:52
janeとか、そのほかDelphiで作られてたソフトを使っていて、自分もDelphiのプログラミングやってみたくなりました。
インストールしてみてヘルプ見たいんですけど、いまいちよく分からないし、プログラミングやるのが全く初めてなので、何か参考書を買おうと思います。
何も知らないところから最初の一冊として長く使えるもののお勧めはないでしょうか?
インターネットで注文しようと思います。

どうかよろしくお願いします。
>>867
1冊ではムリ。

使い方の段階から -> ポトペタの段階から->こんにちは、プログラミングの段階から->コンポ作りの段階

この4段階に応じてそれぞれ自分で探しなさいな。
後の方の専門書と違って、
入門書は、相性が大きいから、お勧めは難しいんだよ。
869デフォルトの名無しさん:03/11/04 11:23
テキストファイルの内容を読み込んで、
文字列の中から1文字目から「??」という文字までを取り出すにはどうすればよいのでしょうか?
>テキストファイルの内容を読み込んで
 色んな方法があると思うよ TStringList.LoadFromFile とか
 http://pc2.2ch.net/test/read.cgi/tech/1009080085/22 とか

2番目はAnsiPos か Pos で??の位置を検索して copy
Pos関数とCopy関数を使う。あとは頑張ってヘルプでしらべてね。
>>867
>インストールしてみてヘルプ見たいんですけど、いまいちよく分からないし

とりあえずインストールしてみてヘルプ見てみれば?
タダでもできるんだし。
その及び腰な所が、最大の問題かと…
873デフォルトの名無しさん:03/11/04 12:40
Soapを使ってWebサービスのサンプルを作ろうとしているのですが、
クライアント側で「ドキュメントの最上位では無効です。」という
例外が出ます。

環境はDelphi7Professional サーバはWindows2000ServerでIISを使っています。
http://LocalHost/Scripts/Project1.dll/wsdl/ISoapSample
にアクセスすると、XMLの文章が表示されます。
(一行目はこんなのです→<?xml version="1.0" encoding="utf-8" ?> )

クライアント側のWSDLインポートで上記URLを入れると
ISoapSample1.pasというファイルが出来て、それをUnit1に追加して
label1.Caption := a.HelloText; //aはISoapSampleオブジェクト
と書いてコンパイル、実行すると動きます。
ボタンを押すとHelloとLabel1に出るはずなのですが、
上記例外が出て止まってしまいます。

文字コードがデフォルトでutf-8になっているのと、
サーバ側のTWSDLHTMLPublishコンポーネントの
TargetNamespaceがデフォルトのままになっているのが
原因かなと思うのですが、ヘルプを見ても意味が分かりません。
どうかお助け下さい。宜しくお願いします。m(_ _)m
874869:03/11/04 13:06
var
Detail : TStringList ;
Tex1,Tex2 : String ;
i : Integer ;
begin
if OpenDialog1.Execute then
Detail := TStringList.Create ;
Detail.LoadFromFile( OpenDialog1.FileName ) ;
//
Tex1 := Detail.Text ;
Tex1 := StringReplace(Tex1,#13#10,'',[rfReplaceAll]);
Tex2 := 'Apple';
i := Pos(Tex1,Tex2);
//
showmessage(IntToStr(i));
end;

こうしてみたのですが、文字位置が返ってきません。
何故なのでしょうか?
>>874
「文字位置が返ってきません」ではなく、「最後のShowMessageで××と
表示されます」と書くべきではないのか?
あと、Posのヘルプを読んだのかと小1時間(ry

i := Pos(Tex2,Tex1);
>>863
Str := StringList.Strings[i];
だな。TStringListでヘルプをみて、プロパティやメソッドをみれば、この手のはすぐわかるぞ。
あとdelの補完機能でも、だいたい想像がつく。Strings : [Index: Integer] : Stringとでてくれば、
数字を引数で渡すとString型の何かが帰ってくるということがわかる。

>>866
フォームのオブジェクトを作って開くことかな?なら
開くなら、hoge.Create(Self);hoge.Visible := True;
閉じるなら、hoge.Release;

>>867
>>868の言う通り。良くも悪くも最初から最後まで末永く使えるのは、梱包されてるヘルプのみ。
1)何にもわからんから、IDEの使い方から、ダイアログでこんにちわ世界を表示させて、住所録
作るような、よくある入門書が欲しくなる。
2)ちょっとしたテクニック知りたくなって、Tips系の本が欲しくなる。
3)うざい解説はいらんから、プロパティとメソッドとイベントの使い方だけ知りたくなって
コンポーネントのリファレンス本が欲しくなる。
4)慣れてきて、コンポーネント開発の本が欲しくなる。
と、だいたい4冊ぐらい買うと思われ。

>>873
www.wwlnk.com/boheme/delphi/techdoc/index.html
ここを参照してみたらどうでしょう。私も時間があったら、SOAPやってみたいです。
877866:03/11/04 13:53
>>876
ありがとうございます。
悩んでましたが.Releaseなんですね。
Delphiで作ったソフト同士で、ファイルのやりとりをしたいんですが、
(メッセンジャーのファイル送信のような感じです)
これを実現できるコンポーネントや、
もしゼロから作らなければいけないとしたら、使うと便利な
コンポーネントって、どのようなものがあるでしょうか。

環境はDelphi7Proで、いまIndyあたりをみています。
どなたかご存じでしたらよろしくお願いします。
>>875
申し訳ありませんでした。逆になっていました・・・(汗
上手くできました、ありがとうございました。
>>878
FTPかHTTPでいんじゃない?
881873:03/11/04 16:50
>>876
レスどうもです。

そこを見ても結局分からず、途方に暮れていたのですが、
DelphiMLの過去ログで検索してみると

サーバのプロジェクトソースの uses 節で
ISAPIApp ユニットを ISAPIThreadPool ユニットより 前に
移動させれば良い

という記述を見かけたので、さっそくやってみると、
速攻なおりました。

なんぢゃこりゃ!
882デフォルトの名無しさん:03/11/04 17:10
ファイルの内容を読み込んだ後に
バイナリエディタで開いた時のアドレスを指定して
そのアドレス部分だけを取り出すにはどのようにすればよいのでしょうか?
ReadBufferかな?
884デフォルトの名無しさん:03/11/04 17:21
Delphi6のPersonalとProfessionalでは何が違うのでしょうか?
今Personalを使ってるのですが違いが分かる方、教えて下さい。
>>880
IdHttpでも、P2Pのファイル送信可能なんですか!
ちとみてみます。

他にも情報ご存じのかたおられましたら、ご教授ください。
よろしくお願いします。
>>886
ServerSocket
ClientSocket
888デフォルトの名無しさん:03/11/04 19:12
>>868
レスありがとうございます。
一冊で済ませるのは無理のようですね。
やはり遠出してでもちゃんと本屋さんにいって自分の目で見て決めてみます。
どうもありがとうございました。
漏れは一冊も買ってないがな。
海外まで回れば大体目的の情報は見つかる。
>>889
ま、人それぞれでしょ。
やりたいことや、わからないことをピンポイントで探すだけなら、
Web上の知識でいいかもしれないけど、なにげに眺めていたり、
調べていてふと目にとまったページで使えそうな方法や、新しい
関数、コンポーネント、プロパティ、メソッドを発見することもある。

Del7の分厚い、あんま役にたたないマニュアルでも、目を通すと
役立ちそうな部分があったりするようなもんだね。

あると何かと重宝なのは間違いない。
891888:03/11/04 21:00
>>889
なるほど…言葉が分かれば有効な方法ですね。
とりあえず私はプログラム自体取り組むのが初めてなので、日本語で書かれた本を頼ってみます…
ありがとうございます。
Delphiは最初に覚える言語としては環境が悪いからなぁ。
本が全然無い。その本が読む人の理解力に合っていればいいけど
そうでなくても変わりの本がない。
>>889
俺は立ち読みだけで初心者卒業しましたが。

>>892
ObjectPascal自体はは初心者にも安心して教えられる言語なんだがなぁ。
教育環境が整ってないっていうか。
TIdSMTPでメールを送ろうとしているのですが、
以下のような例外が発生します。
'<[email protected]>:Recipient address rejected:Relay access denied'.

しかも、そのSMTPサーバのメールはちゃんと送信してくれます。
つまり、SMTPサーバがmail.delphi.comとすると、[email protected]
メールは送れるのですが、[email protected]だと例外がでます。

これだけみると、SMTPサーバがそのメールアドレスのリレーを
拒否するような設定になっているんじゃないかとサーバ側を疑って
しまいますが、普通にメールクライアント(Outlook)で送信すると、
ちゃんと送信できるんですよね・・・・。


なので、プログラム側の問題だと思うのですが、どなたか
わかりますでしょうか??

hoge.comのサーバがmail.hoge.comとかじゃなくて?
896デフォルトの名無しさん:03/11/04 22:52
>>882
TMemoryStreamを使う方法も。
LoadFromFile()
Seek()
Read()
の順で呼ぶ。


例えばedit1の中身はedit1.textに入ってますね。
ではform1にドロップしたファイルエントリはどこに入ってるんでしょう?
Memo1.Lines[0] := ('通報しますた');
Memo1.Lines[1] := ('やっぱりやめますた');

こう書いたが0行目しか表示されない...
どこでポカやってまつか
line.add
>>895
ありがとうございます。

現状では
TIdSMTP(アドレスは[email protected])→mail.delphi.com→hoge.com(アドレスは[email protected]
というようにメールを送信したいと思っています。
mail.delphi.comは、プロバイダにあるような普通のSMTPサーバです。
どうも、mail.delphi.comからhoge.comのサーバにリレーできないようです。

このときリレーとは、From側のアドレスを任意に設定できる状態のことをいいます。
つまり、本来ならばmail.delphi.comのユーザは*@delphi.comですから、
メアドが@delphi.comでないとメール送信できないのが理想です。
しかし、場合によっては、この差出人のメアドを任意に設定したいこともあり、
それができるSMTPサーバのことをリレーサーバといいます。

通常のメールクライアントからは正常に送信できるため、たぶん何らかの設定が
足りないのではと思っていますが、それがわからずにおります。
おわかりのかたおられましたら、よろしくおねがいします。

>899
ありがd
ドロップファイルのエントリが入ってるプロパティは無いんでつね。
DragQueryFileでやりますた。
>>900
Relay Access Denied.を訳してよく噛み締めれ。
ヒント:踏み台防止のため、この頃のSMTPサーバは「何か」をしないと使えないようにしていることが多い。
903デフォルトの名無しさん:03/11/05 10:48
ものすごくあほな質問だと思いますが、
Delphiで作ったEXEってランタイムいらないのですか?

というかDelphiにはランタイムってものがないのかしら?
>>903
無いとも言い切れない点もあるが、フツーに作られたEXEに関しては無い。
>>903
いらん
906デフォルトの名無しさん:03/11/05 11:16
Delphiを使いはじめたばかりですが、
いまいちコツが分かりません。
文法は分かって、ファイル操作やDBの入出力など
ある程度簡単な物は出来るのですが
ソケット通信などをしようと思っても
どこに情報があるのか分かりません。
どこかにまとまった情報サイトはないでしょうか?
MLの過去ログはいつもありがたく検索しています。
ちなみにコンポーネントがまとまっているサイトは見つけました。
http://www.gnomehome.demon.nl/uddf/
他にもこういうところはないでしょうか?
907ぬるぽ:03/11/05 12:28
>>906は、英語が読めるんだね。
漏れがよく逝くサイトはこちら。参考にしてください。
◆VCL
・Torry Delphi Pages
http://www.torry.net/
・Delphi Super Page
http://delphi.icm.edu.pl/
◆Tips(漏れのお気に入りに入っていたヤツ。あまり使用していないけど)
http://www2.big.or.jp/~osamu/Delphi/index.html(Delphi ML過去ログ検索@日本語)
http://home.iae.nl/users/kray/tips/delpt.htm
http://hp.vector.co.jp/authors/VA009712/take/delphi/kabesys.htm
http://homepage1.nifty.com/ht_deko/techalgo.html
なんだかんだいって、Delphi ML過去ログ一番使ってるなぁ。
ほかにも死ぬほどあるけど、識者の方々がURL貼ってくれるだろうから見て。
>>902
ありがとうございます。
一通りためしてみたのですが、やはりうまくいかないです
もう少しヒントを・・・
>>904
>>905
外部コンポーネント(ODBCドライバとか)を使っているなら
その部分のものはいるけど、
使わなければ、そのままEXEをコピーで使えるって事ね。

ありがとうございます。
910デフォルトの名無しさん:03/11/05 13:40
DCPsha1, DCPrc5,DCPmd5 これらの3つのファイルは
コンポーネントをインストールすれば出来るのでしょうか?
これらのファイルが存在しませんという、致命的エラーが出て
先に進めないので教えていただきたいです。
お願いします。
>DCPsha1, DCPrc5,DCPmd5 これらの3つのファイルは
>コンポーネントをインストールすれば出来るのでしょうか?
いいえできません。

いったい何のコンポーネントをインストールしようとしているの?
Readme とかに何か書いていませんか?
>>910
dcpcrypt2.zip でぐぐれ
913デフォルトの名無しさん:03/11/05 13:56
>>911
知らないことに対して無理にレスする必要はないよ。
914デフォルトの名無しさん:03/11/05 13:59
>>911
↑結局質問に答えられない癖に妙に偉そうにしてるこういう奴ほんとウザイ。
>>915
それは言い過ぎかと。まあ911が読み違えてるのは事実だけど。
DCPシリーズはDelphi Super Pageにおいてたな。
919デフォルトの名無しさん:03/11/05 17:07
正直、書籍みたいなものを買わずに、ひたすらWeb上を駆け回って、
Delphi使いこなせるようになった人ってどれぐらいいるの?
920デフォルトの名無しさん:03/11/05 17:26
910 で質問したものですが、返答ありがとうございます。
Delphi Super Pageを見てみたのですが、よくわかりませんでした。
DCPシリ〜ズというのは、どのような名前のものをダウンロード
したらいいのか教えていただければ、うれしいです。
何度も質問してすみません。
これ?
www.cityinthesky.co.uk/cgi-bin/schlabo/dl.pl?dcpcrypt2
922デフォルトの名無しさん:03/11/05 17:58
TZipStreamはどこで入手できますか?
あるformのpopupmenuをmouseでclickせず、sendmessageを
使って表示させる事はできますか?
WM_CONTEXTMENU
>>919
WEBじゃないけど、評判の悪いヘルプを中心に勉強してたが。
コツは

・「目次」の順に読むこと。
・[Object Pascal 言語ガイド]から読み始めること。
・キレそうになっても堪えること。

かな?
>>926
追加です。

・「目次」の順に読むこと。
・[Object Pascal 言語ガイド]から読み始めること。
・キレそうになっても堪えること。
・読み飛ばしたくても堪えること。
既存のTLabelを縦書きにさせたいのですが、
フォントを作成してCanvasに直接描く以外に方法ってありますか?
海外を駆け回ってVertical Labelを探したけど、それらしいVCLは見つかりませんでした・・・。
>>928
フォントを作成して描くと、TTフォントしか描けないよ。
他の方法で、ビットマップフォントでもOKな方法しては、
TBitmapをheight/widthを逆にしたサイズで作って、そこに文字を描いてから90度回転する
>>929
なるほど、サンクスです。TTのみで構わないので、直接描くかな。
>>930
日本のサイトでどっかで見た記憶があるから、探してみたら?
俺は自分でも作ったけど、結局、フォントを作る関数を作った方ばかり使ってる。
932912:03/11/05 22:37
>>920
俺のレスは無視ですか。そうですか。
>>927
それ何時間(何日と聞きたいが延べ時間を聞きたいのであえて)かかる?
集合型の変数に、目的とするデータが含まれているかどうか
簡単に判断する構造化文ってないですかね。

わざわざ、すべてif nantoka in NantokaSet thenとかやるの
めんどいんだけどなぁ
集合型の変数が NantokaSet なのか? そのNantokaSet に nantoka があるかどうかなら

nantoka in NantokaSet 以上に簡単にはならないと思うが?
>>919
使いこなせるというほどではないが、それなりのレベルにはなってると思う。
必要だけど分からない情報があれば探せばいいしね。
世界最大の情報媒体、インターネッツわしょーぃ
>>935
例えば、case文みたいに

case NantokaSet of
 in Nantoka1:
 in Nantoka2:
 end;

とかできれば便利だなぁと思って。
>>937

for i := Low(NantokaSet) to High(NantokaSet) do
if i in NantokaSet then case i of
  Nantoka1:
  Nantoka2:
end;
>>938
おお、素晴らしい。ありがとう!!
こんなの思いつかなかったです。すばらしぃ。
940デフォルトの名無しさん:03/11/06 21:04
ゲームのセーブデータの値を変えるプログラム作りたいんだけど
どうしていいか全然わからないのよね。
VB製のものはソースとか公開されてるから分かりやすいんだけど
Delphi製のモノで公開されてるの見たこと無いのよね。
だれか作って。
>>940
コメントすら出来ない・・・
×どうしていいか全然わからないのよね。
○どうしていいか考えようともしたこと無いのよね。
>940
program saveedit;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
FL_RW : string = ファイル名;
DATA_W : char = 書き換えバイナリ;
ADD_W : integer = 書き換えアドレス;
WFL_RW : file;

begin
AssignFile(WFL_RW,FL_RW);
Seek(WFL_RW,ADD_W);
BlockWrite(WFL_RW,DATA_W,Length(DATA_W));
CloseFile(WFL_RW);
end.

コンパイルは通ったGAあとは知らん。だれかヨロ
>>940
まずはバイナリエディタと電卓でできるようにがんばればいい。

あとはそのアルゴリズム?をプログラムとして書くだけ。
VBのそのまんま移植すればいいじゃん。
みんな荒らし目的のネタ質問にレスしてあげて親切だな。
TServerSocketとTClientSocketを使ってファイルの送受信ソフトつくってるんですが
ファイル名とかってどうやって送ればいいんでしょうか?
今はCS→SSの場合、
OnClientConnectでFS:=TFileStream.Create('適当な名前',fmCreate);
CS側からButton1OnClickでファイル選択〜(**)SendStream。
OnClientReadでReceiveBuf、FSに書き込み
OnClientDisconnectでFS.Free;
といった風に何とかやってます。でもファイル名が・・・
で、ファイル名を(**)の辺りでSendText(FileName+#13#10);して
procedure TForm1.SSClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
if Pos(#13#10,SS.Socket.Connections[0].ReceiveText)<>0 then begin
RecFileName:=SS.Socket.Connections[0].ReceiveText;
FS:= TFileStream.Create(RecFileName,fmCreate or fmOpenRead);
end
else begin
SS1.Socket.Connections[0].ReceiveBuf(RecBuf^,SizeOf(RecBuf^));
FS.Write(RecBuf^,SizeOf(RecBuf));
end;
end;
こんな感じでやってみたんですがダメですた(´・ω・`)
ファイルサイズ送ったりもできなぃんで困ってます(´・ω・`)
あれ?化けてる。何とかすらできてない(´・ω・`)
>>948
お、漏れもちょうどそういうのつくらなきゃいけない。
いま違うことやってるけど、そろそろとりかからないと・・・・

自分はテキストで情報をやりとりした後にファイルを送ろうと
思ってますた。

接続要求→ファイル情報をテキスト送信→サーバのOKが
帰ってきたらファイル送信 みたいな感じ。
まだコンポーネントみてないから、これが実現できるかどうかは
不明だけど・・・・
新スレでつ

くだすれDelphi Part8 (超初心者向け)
http://pc2.2ch.net/test/read.cgi/tech/1068201045/
Delphiって文字列の置換処理遅い?
>>952
置換処理って・・・あ! D7で増えた関数か。 ああいうの使っちゃそりゃ遅いよ。

言語に関わらず、
・長さの変わる置換処理は出来るだけしない。
・それをする場合は、コピーをしながら全て一度に行う。

というのが普通のアルゴリズムだよ。
>>948
よく分からんが、
レスポンスヘッダに適当に必要な情報を加えてやればいいんでないの?
File-Name: Hoge.txt
とか、自分で定義して。
955デフォルトの名無しさん:03/11/08 00:19
誰かMouseWheelを使ったコンポーネントのソースのある場所しらないですか?
>>955
Controls.pas
957948:03/11/08 01:03
>>954
レスポンスヘッダってのゎ…HTTPですヵ?
そっちのほうも調べてみまつ。
958948:03/11/08 01:21
ウホッ、BCBだけどこんなのハケーソ。
読めないけど似てる感じなのでノリで読んでみまつ。
http://flex.ee.uec.ac.jp/japanese/riron/tool/builder5/scrncapt2/socket.html
ふぅ、今日はもやすみ(*´∀`)
959デフォルトの名無しさん:03/11/08 10:31
助けてください。

フォーム1(メインフォーム)についてはSetWindowPosを使って
常に前面に表示できるようになったのですが、フォーム2
(フォーム1のボタンを押すと作成される)を前面に表示させることが
できません。
SetWindowPosのハンドルを記入するところにForm2.handleと書いたら
アクセスバイオレーションエラーが出るし、Self.handleと書くと
前面に表示できませんでした・・・
なお、フォーム1については、SetWindowPos(Form1.handle・・・)として
前面に表示できています。

お時間があれば、よろしくお願いします。
>>859
そのフォーム2 の作成した結果はちゃんと Form2に入れてるの?

そこの作成場所のコードを書いてみて
961959:03/11/08 10:58
>>960
早速のレスありがとうございます。
Form2(SubForm)の作成は、以下のコードで行っています。

procedure TMainForm.SubFormOpen;
var
NewWin:TSubForm;
begin
if ArticleFind then
begin
{サブフォームを表示}
NewWin:=TSubForm.Create(Application);
NewWin.Show;
end;
end;

そして、SubForm上のTopMostBtnを押すと、前面に表示するようにしたいのです。
{常に前面に表示}
procedure TSubForm.TopMost;
begin
if TopMostBtn.Down then
begin
SetWindowPos(SubForm.handle,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE);
end else
begin
SetWindowPos(SubForm.handle,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOACTIVATE);
end;
end;

お手数をおかけしますが、お願いします。
とあるコントロールつくっているんでつが、
ParentのColorを取得したいんですが、
TContorlのColorはProtectedなため取得できません。

かといっていちいちTFormかTGroupBoxか判別してキャストするのも効率悪いと思うのですが、
強引にParentのColorを取得するほうほうって無いでつか?
>>961
やはりね。
NewWin というローカル変数で作成して、インスタンスを永続的に示すポインタを作ってないわけだ。
これ自身は問題というほどでもない。


でも、SubForm.handle と SubFormという変数を利用している。
これは Self.Hndleにするべきだ。

それから HWND_TOPMOST にするなら、そのまえに HWND_TOPMOSTだった ものを解除した方がいいと思うよ。
だから、TopMostを管理するユニットを別に作って、そこで統一して管理すべきだよ。
964959:03/11/08 11:29
>>963
ありがとうございます。

え〜、自分のつたない知識でまとめると、
・SubFormのインスタンス(?)を永続的に示すポインタを作っていないため、
 SubForm.handleとしても、どのフォームのハンドルを指すのかをWindowsが
 判断できず、エラーが出ていた。
・SubForm.handleは、Self.handleとする。
・Self.handleとしても前面に表示できなかったのは、既にTopMostになっている
 フォーム(MainForm)があったため。
ということでしょうか。

とりあえず、もう一度Self.handleでやってみます。
965959:03/11/08 11:58
連投すみません。

MainFormのTopMostを解除して、SubFormでSetWindowPos(Slef.handle・・・
をしたら、ちゃんと前面に表示できました。
あとは、サブフォームは一度アクティブでなくなるとTopMostが解除されるって
ところが問題になるんですよね・・・
これは、どこかでApplicationEventを使ってうまい事やればいいって読んだ
ので、いろいろやってみます。

ただ、TopMostが重複するとだめということは、MainFormとSubFormを同時に
TopMostに事は出来ないのでしょうか。
それとも、MainFormをTopMostにしておいて、何らかの方法で
SubFormをMainFormのさらに前に出すことができるのでしょうか。

スレの終わり際にめんどくさい質問してすみませんです。
BringToFront使えよ
>>962
適当にクラスを定義してキャストする。
セーブダイアログの「保存(&S)」キャプションを「&O K」に変える方法を教えてください。
969デフォルトの名無しさん:03/11/08 15:25
コーディングの質問じゃないんですけど、
Delphiってどんな意味なんですか?
970デフォルトの名無しさん:03/11/08 15:26
>>969
神殿の名前
>>969
無知の知というのはご存知ですか? 知らなければ検索してみて下さい。

あなたが Delphiについて知らないという事を知っているという意味で、Delphiについて一番良くしっているのです。
>>971
ここはネタスレではないので、電波の放出は電波板でお願いします。
973デフォルトの名無しさん:03/11/08 15:38
>>970
ありがとうございます。
>>971
ごめんなさい、よくわかりません。
私はDelphiではないので、成り立たないと思います。
974デフォルトの名無しさん:03/11/08 15:42
「クラクラ(((*´д`*)))エアエア」ってなんかきもい
>>968
procedure TForm1.SaveDialog1Show(Sender: TObject);
begin
SetDlgItemText(GetParent(SaveDialog1.Handle), 1, 'OK');
end;
ようするに アテネイのソクラテスが デルポイの神託 を授かった
・・・話の デルポイ から採った名前って事さ
ごめん、ごヴぁくです。
978デフォルトの名無しさん:03/11/08 22:56
Delphi6 Personalを無料ということで使い始めたんですが、
これってChartが無いですよね?
グラフを描くにはどうしたらいいんでしょうか。
もしかして無理?
無理とは人聞きの悪い。あなたはDelphiの評判を貶めるために放たれた刺客ですか?
DelphiにはChartコンポーネントを作成することを妨げる技術的要因は存在しません。
すなわち可能であるということです。
Personal版にはChartコンポーネントを作成してはいけないという決まりがある
981デフォルトの名無しさん:03/11/08 23:09
Delphi6Proを以前購入したんだけど
取っ付きにくいんだよね。
まだ、C言語の方が分かりやすいような、、
書籍も少ないような気がするし。
5万以上も出して買ったので是非使い回したいんだが
いいウェブサイトとか無いですかね?
ちなみに押入れに閉まったままです。
実践向けの本はDelphiの方が多いよ(^-^=)♪
983 :03/11/08 23:25
どんな本屋でも1〜2冊くらいはdelphiの本があるもんだが、
某品川区の某デパートの本屋には一切置いてませんでした…。
それはもう見事なくらい無かった…。
どうやら、delphiの本は置かない方針のようだ。
トホホ。
>>983
大井町のマルイか?
普通に支店などで買う奴は・・・(ry
winnyなどwinmxなどで普通に落とせるのでは・・と。
5万ですか・・もったいね・・
>>981
根性なしには何も作れません

>>985
氏ね
987デフォルトの名無しさん:03/11/08 23:48
(´-`)。o ○ (「C言語やっとけ」ってのは言っちゃダメ?)
ループのやりかたとか変数の型とかそういう構文をマニュアルで覚えたら
後はコンポーネントを貼り付けて構文補充と悪評高いヘルプを調べながら
やっていけばなんとかなる。
989978:03/11/09 01:43
>>979
すみませんでした。精進します。

>>980
なんと。そんな決まりがあるとは・・・。
やはりProを買わなきゃいけないってことですか。
無料で済まそうと思ってた自分が甘かったです。
ありがとうございます。
990デフォルトの名無しさん:03/11/09 01:50
あいかわらずDel厨はレベルが低いのぉ
991デフォルトの名無しさん:03/11/09 02:17
超初心者向けって書いてるんだがな

この辺でもう一度、次スレへのリンクでも貼っておくか。

  http://pc2.2ch.net/test/read.cgi/tech/1068201045/

993デフォルトの名無しさん:03/11/09 02:33
記念カキコ v(^-^*)
クダスレと言うことで、私がのんびり埋めるよ〜。
>>993
ごくろうさまなのだよ。
>>1さんもごくろうさまなのだよ。
Delphiは懐かしいのだよ。でも好きだったりするのだよ。
まぁ、私はどの開発も好きだったりするのだけどw
先ほどまでは別の板にのんびり常駐していたのだよ。

997ゲト〜。
そうだ。えと、2ちゃんねるの管理者さん。ごめんなさい。
発言は違うかったりするけれど、連続で書き込んでいるのには違いないので。
1000ゲトがしたくて、こそこそと書き込んでいます。ここが終わったら寝ます。
さてと、そろそろ気合を入れるのだよ。999ゲト〜
ちゃんと選挙逝けよ>>1-999
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。