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

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

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

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

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

# 過去スレは >>2-10 のどこかに
2デフォルトの名無しさん:2006/04/17(月) 19:02:38 BE:4555744-
3デフォルトの名無しさん:2006/04/17(月) 19:03:22 BE:5125829-
4デフォルトの名無しさん:2006/04/17(月) 19:04:01 BE:10249294-
訂正

<前スレ>
くだすれDelphi(超初心者)その31
http://pc8.2ch.net/test/read.cgi/tech/1142594051/
5デフォルトの名無しさん:2006/04/17(月) 20:55:34
テンプレにこのスレが抜けてるぞ。

バカボンのDelphi不買談話室その28
http://pc8.2ch.net/test/read.cgi/tech/1134668922/

あ、もう不買の必要もないのか。IDE事業売却しちゃったから。(ゲラ
6デフォルトの名無しさん:2006/04/17(月) 21:28:03
>>1
7デフォルトの名無しさん:2006/04/18(火) 01:05:49
ここで質問して回答して頂いた者です。そのときは1週間ほど苦しんで、
もうどうしようもなくてわらにもすがる思いでしたが、なんとも的確な
回答を頂いてホントに助かりました。回答者様には本当に感謝しています。
(ぶっきらぼうな回答でしたが…)delphi は最初はなじめませんでしたが、
今になってみるととっても憎らしくてかわいい奴で、
すんげーいい奴っぽいです。
すみません、ちょっと書いてみました。
8デフォルトの名無しさん:2006/04/18(火) 01:32:42
delphi だとドキュメントが不足してるから、無駄に苦しむけどね。
好きなら、長くつきあってやってください。
9デフォルトの名無しさん:2006/04/18(火) 12:35:41
>>8
そうなんです。
だから、貴方達のアドバイスが必要なんです。
なので決して氏ね!なんていわないでね。
10デフォルトの名無しさん:2006/04/18(火) 13:23:14
氏ね!
11デフォルトの名無しさん:2006/04/18(火) 17:06:38
ま、他人に頼ってるうちはダメだろ、何事も
12デフォルトの名無しさん:2006/04/18(火) 23:51:01
書籍出した人って最初どうやって勉強したんだろね?
裏技とか・・・・
昔のハード知り尽くしたマシン語使いとか・・・やはり天才肌なんだろうか
13デフォルトの名無しさん:2006/04/19(水) 17:51:51
( ゚Д゚)?
14デフォルトの名無しさん:2006/04/19(水) 21:22:00
チュートリアル付マニュアルが付いてくるんだけどね。
15デフォルトの名無しさん:2006/04/20(木) 16:04:03
TListViewのOwnerDataをTrueにしてアイテムを追加すると、終了時にメモリーリークが起きるんだけど、どうすれば直りますか?
del6 personal
winxp

procedure TForm1.Button1Click(Sender: TObject);
begin
ListView1.Items.Add;
end;
16デフォルトの名無しさん:2006/04/20(木) 16:13:08
スマン解決した
追加も全部自前でやらなきゃだめなのね
17デフォルトの名無しさん:2006/04/20(木) 16:22:18
まあええことよ
18デフォルトの名無しさん:2006/04/20(木) 20:47:48
いままでDelphi6を使っててやっと2005にうpしたんだけど、古いプロジェクトを開いたら.netにするかWin32に
するかどっちか選べってダイアログが表示されます。

これってどういう違いなんでしょうか?
.netっていまいち意味がよく分からないのですが・・・
19デフォルトの名無しさん:2006/04/20(木) 20:49:05
ちなみにHelpにはプロジェクトをアップグレードしますとしか出てこないっす。。。
両者の違いを知りたいのに・・・
20デフォルトの名無しさん:2006/04/20(木) 20:53:12
.NETは.NETマネージドコードなアプリ、
Win32は従来通りのWindowsネイティブなアプリ。
よく分からなければ、Win32を選んでおけば今まで通り。
21デフォルトの名無しさん:2006/04/21(金) 01:07:25
この板で最近、2005使ってるなら絶対2006買え、というのを見て買いました。感謝してます。

ところで、BDS2006のdelphi IDEで、「ユニットの表示」のアイコンをクリックすると
ユニットのコードが出ずにフォームが出てしまいます。まあ切り替えれば終わりなん
ですが。
何がいけないのでしょうか? それともバグ??
22デフォルトの名無しさん:2006/04/21(金) 07:54:59
ユニットの表示を押すとユニットの表示ウィンドウが表示されると思うんだけど、
そこでユニットを選択したときの話?
23デフォルトの名無しさん:2006/04/21(金) 18:42:14
整数値とオブジェクトを関連付けるためにTBucketListを使っているんですが、質問があります。

例えば、100とObjAを関連付ける時は、bucketlist.Add(Pointer(100), ObjA);とやっています。
で、100をキーにObjAを取り出す時なんですが、
p := bucketlist.Data[Pointer(100)];
のようにDataプロパティを使うやり方だとうまくいくのですが、Findメソッドを使って、
bucketlist.Find(Pointer(100), p);
とやると、
変数実パラメータと変数仮パラメータとは同一の型でなければなりません
というエラーになってしまいます。
Findを使って取り出すにはどうすれいいのでしょうか?
24デフォルトの名無しさん:2006/04/21(金) 19:06:53
p は Pointer 型じゃないとダメだよ?
必要なら Pointer 型の p で受けた後、必要な型にキャストするべし。
25デフォルトの名無しさん:2006/04/21(金) 19:10:05
var
 bl: TBucketList;
 p: Pointer;
begin
 bl.Find(Pointer(100), p)

なら通るが。pはなにもの?
2623:2006/04/21(金) 19:25:30
おかげで分かりました。
ちなみにpはTObject型。
Pointer(100)がエラーの原因だとばかり思っていました。
27デフォルトの名無しさん:2006/04/21(金) 20:36:44
exeファイルを作るにはどうしたらいいんでしょう
28デフォルトの名無しさん:2006/04/21(金) 20:38:26
プロジェクトをビルドすると通常.dprと同じディレクトリに.exeができる。
29デフォルトの名無しさん:2006/04/21(金) 20:38:33
コンパイルスすれ
3027:2006/04/21(金) 20:54:58
>>28-29
ありがとうございました。
31デフォルトの名無しさん:2006/04/22(土) 00:05:47
>>22 そうです。ユニットの表示ウィンドウでユニットを選択したときです。
ユニットのコードが出るのは、フォームをもたないユニットを選択したときだけです。

他にこんな人はいないのかなあ・・
32デフォルトの名無しさん:2006/04/22(土) 00:38:24
あまりグダグダ言うと、またアンチ扱いされるぞ。BDS へ
33デフォルトの名無しさん:2006/04/22(土) 01:30:03
>>31
Ctrl+F12使ってる?
34デフォルトの名無しさん:2006/04/22(土) 01:44:59
デフォルトの挙動がおかしーんじゃねーの?って話だろ
35デフォルトの名無しさん:2006/04/22(土) 02:45:08
ParamCount=1の時
p := PChar(ParamStr(10)); // ''を期待
Win32APIの何か(p);
ってやっても大丈夫ですか?
3631:2006/04/22(土) 02:54:15
>>33 Ctrl+F12でも同じです。2005まではそんなことはなかったのですが。
でも落ちないだけありがたいです。
37デフォルトの名無しさん:2006/04/22(土) 07:14:16
>>35
ソース見ると、今の所大丈夫みたいだね。
38デフォルトの名無しさん:2006/04/22(土) 07:29:58
ブラウザでテキストをコピーしたときにそれを関知してメモにペーストするために
以下のように記述したのですがうまくいきません。どこが悪いのでしょう?
(WinXp+DElphi5)
 private  { Private 宣言 }
  //クリップボードビューアチェーン内の次のウィンドウのハンドル
  hNextChain:HWND;
  //クリップボードの変更時に受け取るメッセージ
  procedure ClipChange(var Msg:TMessage);
    Message WM_DRAWCLIPBOARD;
  procedure ChangeChain(var Msg:TWMChangeCBChain);
    Message WM_CHANGECBCHAIN;

procedure TForm1.ClipChange(var Msg: TMessage);
begin
 if Clipboard.HasFormat(CF_TEXT) then
   Memo1.Lines.Add(Clipboard.AsText);
 //ビューア内の次のウィンドウに同じメッセージを送る
 SendMessage(hNextChain,WM_DRAWCLIPBOARD,0,0);
end;

//ビューワチェインのうちの次のものが自分よりはやく
//抜ける場合を考慮して、WM_CHANGECBCHAIN メッセージも処理
procedure TForm1.ChangeChain(var Msg:TWMChangeCBChain);
begin
 if Msg.Remove = hNextChain then
 begin
  hNextChain := Msg.Next;
  Msg.Result := 0;
 end else
  Msg.Result := SendMessage(hNextChain,WM_CHANGECBCHAIN,Msg.Remove,Msg.Next);
end;
39デフォルトの名無しさん:2006/04/22(土) 07:47:09
どう うまくいかないわけ?

hNextChain:= SetClipboardViewer(Handle);

をしてないとか?

ところで、トロイの木馬作ろうとしてないよね? 
40デフォルトの名無しさん:2006/04/22(土) 09:55:58
つ NkClipDetector
41デフォルトの名無しさん:2006/04/22(土) 10:05:12
 Windows XP でスラッシュ"/"を組み合わせたショットカットキーを設定しても機能し
ません。たとえば

mnFindAll.ShortCut := TextToShortCut('Shift+Ctrl+/');
(※mnFindAll はメニュー項目)

とした場合 Win98 ではOKですが XP ではだめです。
 メニュー項目のShortCutプロパティにはShift+Ctrl+/が設定されますがこのキーを
押しても XP では機能しないのです。なぜでしょうか?
42デフォルトの名無しさん:2006/04/22(土) 10:12:16
TBitmapについて質問です。

何らかの画像がロードされているTBitmapオブジェクトがあるんだけど、
今は必要ないから、オブジェクト自体はFreeしないで画像データ等だけ
アンロードしておきたいんですが、具体的にどういう処理をすればいいの
でしょうか?

画像データの解放は、タスクマネージャを観察する限り、Widthまたは
Heightプロパティを0にすればいいみたいですが、他にやっておいた
方がいいことはあれば、教えてください。ReleaseHandleもやっておいた
方がいいんでしょうかね?

ちなみに画像が必要になったら、LoadFromFile等で再度ロードします。
43デフォルトの名無しさん:2006/04/22(土) 11:06:28
>>41 テンキーの方の / なら大丈夫なんじゃない?
4441:2006/04/22(土) 11:16:56
確かにテンキーの / なら大丈夫です。
45デフォルトの名無しさん:2006/04/22(土) 12:41:33
>>42 必要なときに LoadFromFile するんなら、必要なくなったら Free すりゃ
いいんじゃないの? 何で Free したくないんでしょう?
46デフォルトの名無しさん:2006/04/22(土) 12:44:15
プロパティかなんかなんだろ
47デフォルトの名無しさん:2006/04/22(土) 12:47:51
FreeImaegするだけでいいんじゃないの。
48デフォルトの名無しさん:2006/04/22(土) 16:53:59
Delphi7 Pro ですが、長い時間立ち上げて作業していると、Windows の
タスクバーに、Delphi の本体のアイコンだけでなく、ソースのエディタなど
のアイコンも出てくるときがあります。これって、何らかの操作で消したり
逆に表示したりするって出来るんでしょうか。
49デフォルトの名無しさん:2006/04/22(土) 17:37:20
PersonalでAccessやOracleやPosgreのDBに接続する方法はないんでしょうか?
50デフォルトの名無しさん:2006/04/22(土) 17:57:44
つ ADO
5150:2006/04/22(土) 18:08:29
でもタイプライブラリを解読できる人のみかな。
52デフォルトの名無しさん:2006/04/22(土) 18:30:11
まだDelphiほとんど触ったことないので無理かなぁ。
プロフェッショナル買ってもいいんだけど高いので、
それよかVisualStudio買う方がよさげだし。
5349:2006/04/22(土) 18:30:57
>>52 = >>49 です。
54デフォルトの名無しさん:2006/04/22(土) 18:45:57
DBアプリなら VisualStudio買うよりお得で楽だと思うけど、まあVisualStudioで苦労するのも修行だし
55デフォルトの名無しさん:2006/04/22(土) 20:20:47
ひさしぶりにDelphi MLの過去ログを見ようとしたら、まったくアクセスできないんだけど、
これって一時的な障害なの?
56デフォルトの名無しさん:2006/04/22(土) 22:09:49
GlobalMemoryStatusは使えるんですが
GlobalMemoryStatusExだと未定義の識別子となって使えません

win2k,D6personalです
5756:2006/04/22(土) 22:18:18
言葉足らずだったので補足します

API関数なのは分かってますが
ぐぐってもwin2k以降なら普通に使えるようにしか出てこないのに
自分の環境だと上記のようになって使えないのでここで質問してみました
58デフォルトの名無しさん:2006/04/22(土) 22:30:02
自分で定義しましょう
59デフォルトの名無しさん:2006/04/22(土) 22:33:01
>>57
単純に windows.pas で定義されていないだけなので
どうしても使いたいなら自分で定義して使うという事になると思いますよ
60デフォルトの名無しさん:2006/04/22(土) 23:24:29
>>55
なおったみたい。
61デフォルトの名無しさん:2006/04/23(日) 06:22:26
>>43
ノートPCではどうにもならんな・・・・
しかし、なんでだろう?
62デフォルトの名無しさん:2006/04/23(日) 07:05:47
まさかシフトすると ? だから / と ? で混乱しないように禁止したとか
63デフォルトの名無しさん:2006/04/23(日) 07:42:38
>>61
たいていのノートはNumLockでテンキー側の/も入力できるようになるから、
どうにもならんてことはないと思うけど。
ストロークが増えて面倒だと思うなら、キーアサインを見直すしかないだろうね。
6456:2006/04/23(日) 10:33:14
>>58 >>59
ありがとうございます。
定義したら関数は呼べるようになりました。
しかし変な値が帰ってきます。

DWORDLONG(符合なし64ビット整数)はdelphiでどのように定義したらいいでしょうか?
今はInt64にしてるんですが、恐らくこれが悪いんですよね。
65デフォルトの名無しさん:2006/04/23(日) 10:37:26
入門書を見ながら
Delphi 6 Personalで
StringGridで簡易家計簿プログラムを作っています。

OnCreateハンドラに
Cells[0,0]:='月\項目';
等とかいてセルに文字列を出すことは
できたんですが、

OnDrawCellハンドラに
Data[i,j]:=StrToInt(Cells[i,j+1]);
などと書いても
未定義の識別子:"Cells"
といわれてしまいます。

何が間違っているのでしょうか?
入門書で使っているDellphiのバージョンは4のようです。
66デフォルトの名無しさん:2006/04/23(日) 10:38:44
>>64 Cardinal
67デフォルトの名無しさん:2006/04/23(日) 10:42:02
検索したらヒットしたのはココだな
http://podgoretsky.com/ftp/Docs/Delphi/Memory/virtual/TMemoryStatusEx.html
なんか漢字の国にどんどん負けてゆきそうな雰囲気

TMemoryStatusEx = record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: Int64;
ullAvailPhys: Int64;
ullTotalPageFile: Int64;
ullAvailPageFile: Int64;
ullTotalVirtual: Int64;
ullAvailVirtual: Int64;
ullAvailExtendedVirtual: Int64;
end;

function GlobalMemoryStatusEx( var lpBuffer: TMemoryStatusEx ): Boolean; stdcall;
procedure GlobalMemoryStatusExexternal kernel32 name 'GlobalMemoryStatusEx';
68デフォルトの名無しさん:2006/04/23(日) 10:44:50
>>64
OnDrawCell はフォームのメソッドで受け取ってますから

with Sender as TStringGrid do begin
Data[i,j]:=StrToInt(Cells[i,j+1]);
end;
のようにしてやる必要があります。 あるいは直接
Data[i,j]:=StrToInt( StringGrid1. Cells[i,j+1]);  
6965:2006/04/23(日) 10:59:35
>>68
できました。ありがとうございます。
7064(=56):2006/04/23(日) 11:20:28
DWORDLONGをCardinalにすると、>>67の構造体が上から順に

 1
 655343
 65536
 65536
 2147418111
 1
 13673473
 0
 1072496640

Int64だと

 0
 0
 58224486
 156250
 655229
 655343
 65536
 1
 0

のように帰ってきます。自分のメモリは2.5Gのはずなんですが……。
71デフォルトの名無しさん:2006/04/23(日) 11:45:20
type TMemoryStatusEx = record
dwLength: DWORD;
dwMemoryLoad: DWORD;
ullTotalPhys: Int64;
ullAvailPhys: Int64;
ullTotalPageFile: Int64;
ullAvailPageFile: Int64;
ullTotalVirtual: Int64;
ullAvailVirtual: Int64;
ullAvailExtendedVirtual: Int64;
end;

function GlobalMemoryStatusEx( var lpBuffer: TMemoryStatusEx ): Boolean; stdcall; external kernel32 name 'GlobalMemoryStatusEx';

procedure TForm1.Button2Click(Sender: TObject);
var b: TMemoryStatusEx;
begin
b.dwLength:=sizeof (TMemoryStatusEx);
GlobalMemoryStatusEx( b );
allocConsole;
writeln(' dwMemoryLoad ',b.dwMemoryLoad :12,'%');
writeln(' ullTotalPhys ',b.ullTotalPhys div 1000000:12,'Mb');
writeln(' ullAvailPhys ',b.ullAvailPhys div 1000000:12,'Mb');
writeln(' ullTotalPageFile ',b.ullTotalPageFile div 1000000:12,'Mb');
writeln(' ullAvailPageFile ',b.ullAvailPageFile div 1000000:12,'Mb');
writeln(' ullTotalVirtual ',b.ullTotalVirtual div 1000000:12,'Mb');
writeln(' ullAvailVirtual ',b.ullAvailVirtual div 1000000:12,'Mb');
writeln(' ullAvailExtendedVirtual ',b.ullAvailExtendedVirtual div 1000000:12,'Mb');
end;
72デフォルトの名無しさん:2006/04/23(日) 12:16:05
RS232接続(GP-IBは高いので)の実験装置(ポテンショスタットと呼ばれるモノです)の制御用プログラムを作りたいのですが
2006Trialと2005personalはどちらがいいのでしょうか?(貧乏学生でお金無いので)無理ならKylixでもかまいませんが

使いたい機能は,測定装置との通信,タブによるメニュー切り替え,測定結果のcsv形式でのファイル出力,Table(表)での表示などです
外部に公開する予定はありませんが,それがライセンス条件ならソースコードごと公開してもかまいません

ごく簡単なExcelのマクロと,VBでHello Worldプログラムを書いてみたことがある程度の超初心者のため
要領を得ない質問で申し訳ありませんが,宜しくお願い致します
7370:2006/04/23(日) 12:16:09
>>71
sugeeeeeeeeeeeeeeeeeeeeeeeeee

なんか、自分がいろいろ間違ってたようです。人生とか。
71さんを始め考えてくれた皆様、ありがとうございました。
74デフォルトの名無しさん:2006/04/23(日) 12:54:01
>>72 そりゃ 2005personal がいいだろ。ドイツ語の勉強にもなるし(藁
7572:2006/04/23(日) 13:01:18
ドイツ語!?
76デフォルトの名無しさん:2006/04/23(日) 18:00:04
>>75
2005Personalは日本語版が無い。
雑誌付録が配布のメインだったので今でもWebで手に入るのはドイツ語版なのだ。
77デフォルトの名無しさん:2006/04/23(日) 18:43:54
ドイツ語版だけ出とるのかワロス
ひどい対応だなw
7872:2006/04/23(日) 20:50:00
ありがとうございました
6か7のPersonalを探してみます

2005は日経ソフトウェアあたりのバックナンバーを探せば
日本語版があるのだろうか……
79デフォルトの名無しさん:2006/04/23(日) 22:34:27
ない
80デフォルトの名無しさん:2006/04/23(日) 22:42:13
>>72 きみは、Delphi を取り巻く現状をまず認識することが重要だな
81デフォルトの名無しさん:2006/04/24(月) 00:14:21
> Delphi を取り巻く現状
ニートの荒らしアンチが365日24時間
2ch に粘着して暴れてるって事?
82デフォルトの名無しさん:2006/04/24(月) 00:29:16
オブジェクト指向ってのがどの部分を指すのかよくわからないんですが・・

proceder ごとに区切ってソースを書くあたりですか?
83デフォルトの名無しさん:2006/04/24(月) 00:47:29
つ class
84デフォルトの名無しさん:2006/04/24(月) 01:07:51
久しぶりにDelphi関連のサイトとかスレとか見てみたんだけど、
Delphiマガジンって廃刊になったの?最近出ていないようだけど。
85デフォルトの名無しさん:2006/04/24(月) 03:49:30
>>81 チミの世界は2chだけのようだな、かわいそうに。(藁
86デフォルトの名無しさん:2006/04/24(月) 03:53:40
本当にかわいそうなのは粘着し続けるオッサンだけどな
87デフォルトの名無しさん:2006/04/24(月) 04:01:35
>>85>>81の言うところの粘着
88デフォルトの名無しさん:2006/04/24(月) 07:00:06
>>82
 まあドットがオブジェクト指向だと思えば大きな間違いじゃないよ。
 form1.Canvas.Font.Name
とか書く時のドットね。
89デフォルトの名無しさん:2006/04/24(月) 07:46:23
フォームをテキストとして表示してみて!
objectがいっぱいあるから。
90デフォルトの名無しさん:2006/04/24(月) 08:08:01
>82
レコード型(Cなら構造体)に、そのレコードを操作する専用の関数がもてるようになった物と考えれば良いかと。
91デフォルトの名無しさん:2006/04/24(月) 11:41:46
StringからWideStringやWideStringからStringをキャストする場合、自動変換されますが、
これを自動変換されないようにキャストしたいのですが、どうすればいいのでしょうか?
92デフォルトの名無しさん:2006/04/24(月) 11:51:41
あらかじめSetLengthしておいてstrcopyしたら。
93デフォルトの名無しさん:2006/04/24(月) 11:53:27
イマイチやりたいことが分からないのだが
とりあえずWideCharToString or StringToWideChar
94デフォルトの名無しさん:2006/04/24(月) 13:00:34
>>92 >>93
ありがとうございます。レスを参考にいろいろ試してみたところとりあえずこれで出来ました。
PCharとPWideCharを通してのキャストだけでも出来そうだったのですがWideCharには#0が使われるので
WideStringに戻すときがうまく行きませんでした。

function StringToWideString(Str: String):WideString;
var
Len: Integer;
begin
Len := Length(Str) div 2 + 1;
SetLength(Result,Len);
StrCopy(PChar(PWideChar(Result)),PChar(Str));
end;

function WideStringToString(Str: WideString):String;
var
Len: Integer;
begin
Len := Length(Str)*2;
SetLength(Result,Len);
StrCopy(PChar(Result),Pchar(PWideChar(Str)));
end;
95デフォルトの名無しさん:2006/04/24(月) 15:13:41
function StringToWideString(const Str: String): WideString;
begin
  Result := WideString(Str);
end;

function WideStringToString(const Str: WideString): String;
begin
  Result := String(Str);
end;

いったいこれで何が不満なんだ。
96デフォルトの名無しさん:2006/04/24(月) 15:15:02
せめて質問の意図を理解しろよ
97デフォルトの名無しさん:2006/04/24(月) 15:26:34
なら質問の意図を説明してくれ。
>>91では自動変換をしたくないと言いつつ、
>>94ではPChar <-> PWideChar のキャストなんて意味不明なことをやろうとしているし、
何がしたいのか全くわからん。
98デフォルトの名無しさん:2006/04/24(月) 15:27:40
わからないならもう黙ってていいよ。解決したみたいだし。
99デフォルトの名無しさん:2006/04/24(月) 17:15:54
D7でPCA給与のようなボタンメニュー画面を作るにはどうしたらいいですか。
具体的には、あるボタンを押すと、右側にサブメニューのボタンがいくつか表示される
といった具合に順々に選択ボタンが表示されるメニュー画面を作りたいです。
100デフォルトの名無しさん:2006/04/24(月) 17:49:30
ボタンが押れたら、右側にサブメニューのボタンをいくつか表示すればいいんじゃない?
101デフォルトの名無しさん:2006/04/24(月) 18:49:29
TPanelにそのサブメニューのボタン群を載せておいて、Visibleプロパティで制御するとか。
102デフォルトの名無しさん:2006/04/24(月) 19:40:59
VBの
For Each A in B
hoge
Next
をDelphiに置き換える方法って無いでしょうか?
for i:=0 to j
begin
hoge
end;
で置き換えようとしたのですが、型がVariantなどの特殊なために出来ないのではまってます。

どなたか教えてください。
103デフォルトの名無しさん:2006/04/24(月) 19:55:02
>>102 お使いのバージョンは?
104デフォルトの名無しさん:2006/04/24(月) 19:57:33
2005です。

For each OleValiant1 in OleValiant2
hoge
next
ってのがどうしてもうまくいかないので・・・
105デフォルトの名無しさん:2006/04/24(月) 20:39:18
ああ、OLEVariantのままでって事か

1次元配列なら
for i := VarArrayLowBound(OleValiant2 , 1 ) to VarArrayHighBound(OleValiant2 , 1) do hoge

でいいんだけどねえ
106デフォルトの名無しさん:2006/04/24(月) 20:49:29
>>105
レスありがとうございます。
やってみたのですが、iのままでは駄目でした。
そこで、Olevariant1に代入してみたのですが、順序型では駄目と怒られました。

hogeの部分で
fnchogehoge (Olevariant1.Value(2), Olevariant1.CellValue(3));
とprocedureにデータを渡したいのですが、こういう場合はどうすればいいのでしょうか?
107デフォルトの名無しさん:2006/04/24(月) 20:53:29
だから1次元配列なら

for i := VarArrayLowBound(OleValiant2 , 1 ) to VarArrayHighBound(OleValiant2 , 1) do begin
 Olevariant1:=Olevariant2[i];
fnchogehoge (Olevariant1.Value(2), Olevariant1.CellValue(3));

2次元かもしれないし、3次元かもしれないと厄介なのよ
108デフォルトの名無しさん:2006/04/24(月) 20:56:20
>>107
1次元配列です。
 Olevariant1:=Olevariant2[i];
この形で簡単に持って来れないので困ってます。。。orz
109デフォルトの名無しさん:2006/04/24(月) 21:00:46
allocConsole;
writeln(VarArrayLowBound(OleValiant2 , 1 ) )
writeln(VarArrayDimCount(Olevariant2) )
writeln(VarArrayHighBound(OleValiant2 , 1) )

は何を返す?
110デフォルトの名無しさん:2006/04/24(月) 21:45:50
答えがないので、
writeln(VarArrayDimCount(V) ) ; がゼロを返すなら

writeln( V.length ) ;を試してみて。 これはコレクションだから

for i := 0 to V.Length-1 do begin V1:=V.item(i); みたいにアクセス出来る
111デフォルトの名無しさん:2006/04/24(月) 22:10:01
image.Picture.LoadFromFile();がファイルが存在しない等の理由でファイルの読み込みに失敗したとき
どのようにすればエラー処理がだせるのでしょうか?
112デフォルトの名無しさん:2006/04/24(月) 22:20:34
↑がなんか分かりにくい文章になってますが、C言語で言うところの
ファイルポインタ fpがあったときの

if (fp==NULL)
{
printf("読み込みエラー");
}


みたいなことがしたいのです
113デフォルトの名無しさん:2006/04/24(月) 22:20:49
何もしなくても例外が出ると思うけど

try
  image.Picture.LoadFromFile();
except
  on E:Exception do MyErr(E.Message );
end;
114デフォルトの名無しさん:2006/04/24(月) 22:22:26
>>109
移動していたので、返事が遅れてすみません。

やってみたのですが、不正な引数が渡されました。とエラーになってしまいます。
115デフォルトの名無しさん:2006/04/24(月) 22:31:01
>>114
という事は、配列型じゃなくて、コレクション型なのでは?
実行させて

OleValiant2.length と OleValiant2.Count

を読み出してみたらどう? lengthがあるなら>>110 OleValiant1:=OleValiant2.Count.item(i); と出来る
116デフォルトの名無しさん:2006/04/24(月) 22:32:32
>>113
ポップアップが出るのが気持ち悪くて

ありがとうございました
117デフォルトの名無しさん:2006/04/24(月) 22:58:46
>>97
文字コードを変えないでString<->WideStringの型変換をしたかったので。
118デフォルトの名無しさん:2006/04/24(月) 23:03:04
>>115
やってみたのですが、両方とも無いです。
Helpを色々と見ているのですが・・・

VBのソースをどっかにうpしたほうがいいでしょうか?
119デフォルトの名無しさん:2006/04/24(月) 23:03:08
質問です。DirectShowを使用して動画ファイルの各フレームをビットマップとして切り出そうとしています。

DSPackをインストールして、FilterGraphとSampleGrabberを使用し動画を再生させながら
各フレームの画像を切り出すことはできました。
これを動画を画面上で再生させずに各フレームのデータを切り出すにはどうしたらよいのでしょうか?
120デフォルトの名無しさん:2006/04/24(月) 23:13:20
>>119
DirectXスレに行ってください
121デフォルトの名無しさん:2006/04/24(月) 23:38:54
118です。

http://makegumi.no-ip.info/loader/src/makegumi0155.zip.html
こちらにVBソースとHelpFileをうpしました。
DL Key:hogehoge
です。

このソースの
For Each oRow In oOffersTable.Rows


fncGetRate oRow.CellValue(2), oRow.CellValue(3), oRow.CellValue(4)

If oRow.CellValue(17) > dtLastDate Then dtLastDate = oRow.CellValue(17)

Me.lblDDEStatus.Caption = "Latest Update: " & oRow.CellValue(2) & " - " & dtLastDate

Next


の部分を移植したいのですが・・・
122119:2006/04/25(火) 00:12:20
pfRendererにNull レンダリング フィルタを指定するだけだった。。。。。orz
123デフォルトの名無しさん:2006/04/25(火) 00:42:20
>>117
> 文字コードを変えないでString<->WideStringの型変換をしたかったので

文字コードを変えなければ型変換はできませんよ。
たんにメモリイメージをコピーしただけだし、それをしたかったんでしょ。
124デフォルトの名無しさん:2006/04/25(火) 02:00:55
>>121
自己解決しました。ありがとうございました。
125デフォルトの名無しさん:2006/04/25(火) 13:35:35
マルチスレッドに初めてチャレンジしたいのですが、勉強できるサイトがありましたら、教えてください。
バージョンは7です。
126デフォルトの名無しさん:2006/04/25(火) 13:38:51
127デフォルトの名無しさん:2006/04/25(火) 13:42:21
>>126
Thanks!
128デフォルトの名無しさん:2006/04/25(火) 13:44:53
開発者ガイド嫁
129デフォルトの名無しさん:2006/04/25(火) 13:50:08
Delphi2005で実行するとモジュールのロードって表示されて関係ないモジュールまで読まれてしまうのですが、
これって回避する方法は無いのでしょうか?

具体的にはマウ筋のMauHook.dllが読み込まれてしまいます。
それだけなら何も問題ないのですが、このファイルを削除することが出来なくなってしまいます。
Delphiを終了させたあとでも同じです。
削除するにはいまのところリブートしかありません。

マウ筋は持ち運び環境なので定期的に削除したいのですが、これを回避する方法は無いでしょうか。
130デフォルトの名無しさん:2006/04/25(火) 16:37:25
>>129
無償のVB 2005に乗り換えるのがいいと思います。
131デフォルトの名無しさん:2006/04/25(火) 16:46:48
何気にエミュもハードル高いよな
132デフォルトの名無しさん:2006/04/25(火) 16:52:27
ハードルは高ければ高いほどくぐりやすいよ
133デフォルトの名無しさん:2006/04/25(火) 17:02:11
>>132 オマエ頭いいな。 そうだな。 別に誰かと勝負してるわけじゃなし、くぐりゃいんだよな
134デフォルトの名無しさん:2006/04/25(火) 20:07:57
Delphi6でμ秒単位で時間を取り出す方法がありましたら、教えてください。
135デフォルトの名無しさん:2006/04/25(火) 20:08:29
>>129
フックを行うdllは全プロセスに侵入してるので、Delphiだけなんとかしてもどうにもならんが?
136デフォルトの名無しさん:2006/04/25(火) 20:10:24
Windowsだと、QueryPerformanceCounterが最高精度かな?
いやよく知らんが。
137デフォルトの名無しさん:2006/04/25(火) 20:16:53
Del6は無理だろ。

WinCE-T-EngineハイブリッドO$/Delドトネト
なら可能性あるだろうけど。

Winはミリセカンド。
138デフォルトの名無しさん:2006/04/25(火) 20:35:37
つまり.NETの方が優れてるということですね。
139デフォルトの名無しさん:2006/04/25(火) 20:39:48
>>134
function RDTSC: int64;
asm
DW $310F
end;

この関数の帰り値は、たとえばクロックが2GHzなら、1uSECに 2000づつカウントアップするから
これでなんとかならない?
140デフォルトの名無しさん:2006/04/25(火) 20:59:01
>>134
>>136の言うとおり QueryPerformanceCounterかと
141デフォルトの名無しさん:2006/04/26(水) 08:16:45
Del7

ListViewとImageListで32bitビットマップまたは32bitアイコンを
綺麗に表示する方法ありますか。
142デフォルトの名無しさん:2006/04/26(水) 16:51:21
コンポーネントを配列にすることはできますか?
imageコンポーネントの処理をするときにいちいちimage1,image2,・・・の処理を
image[i]でできるようなふうに
143デフォルトの名無しさん:2006/04/26(水) 17:00:07
array[0..num]  of コンポーネント
TList
144デフォルトの名無しさん:2006/04/26(水) 17:03:53
//変数を用意して

FImageArray: array[0..5] of TImage; 
//FormのonCreateイベントで関連付ける
FImageArray[0] := Image1;
FImageArray[1] := Image2;
FImageArray[2] := Image3;
//これでFImageArray[i]を使ってのアクセスが可能となる

変数を準備するのが面倒なら
//Image1〜5の初期化例
for i := 1 to 5 do
TImage(FindComponent('Image' + IntToStr(i) )).Picture := nil
145デフォルトの名無しさん:2006/04/26(水) 17:08:03
>>144
なるほど、ありがとうございました。
>>143
イマイチ理解しかねます・・
146デフォルトの名無しさん:2006/04/26(水) 17:25:08
sendbufの用途を教えていただけないでしょうか
147デフォルトの名無しさん:2006/04/26(水) 17:36:48
Delphi7 Professional 使っています。
VB6 の Event と RaiseEvent の処理を移植しようとしています。
これを置き換えられそうな関数はあるのでしょうか?
148デフォルトの名無しさん:2006/04/26(水) 17:46:06
DelphiのVCL見れば分かるけどイベントハンドラは、
メソッドポインタを直接コールだお。


procedure TSizeConstraints.Change;
begin
if Assigned(FOnChange) then FOnChange(Self);
end;


で、コントロールの親のイベントハンドラコールするなら、
ParentForm := (TForm)self.Parent;

ifAssigned(ParentForm.OnCreate)
then ParentForm.OnCreate(self);

みたいな感じじゃね?
149デフォルトの名無しさん:2006/04/26(水) 17:57:50
Delphi2005で株のチャート表示をやろうとおもっているのですが、できるだけ簡単に表示できる
コンポーネントがありましたら、教えてください。

今まで数値演算系のプログラムは作成したことはありますが、Graphicsは初めてです。
150148:2006/04/26(水) 18:00:03
で、クラスメソッド=イベント、の関数型宣言はVCLの通り、
TNotifyEvent = procedure(Sender: TObject) of object;
というようにクラスメソッドの型を宣言するか、
TNotifyEventのように既にある型を使うかのどちらか。
151デフォルトの名無しさん:2006/04/26(水) 20:32:45
>>125です。
スレッドの作成は成功したのですが、もう一歩成長したいので教えてください。
スレッドにパラメーターを渡すにはどうしたらいいでしょうか?
あと、Executeメソッドは>>126のサイトには
>Execute メソッドはスレッドが生成された直後に実行されるメソッドです ( 引数により直後に実行するかどうかを指定できます )
と書いてあるのですが、直後に実行しない方法と言うのはどうすればいいのでしょうか?
152デフォルトの名無しさん:2006/04/26(水) 20:38:53
>>151
>スレッドにパラメーターを渡すにはどうしたらいいでしょうか?
例えばスレッドオブジェクト側にプロパティを作って、作成後実行する前に書いておくとか。
スレッド実行中に書き換えるならTCriticalSectionで保護しておく。

>直後に実行しない方法
t:=THogeThread.Create(True);
・・・
t.Resume; //ここで実行
153デフォルトの名無しさん:2006/04/26(水) 20:45:14
>>152
プロパティを作るってやったことないので、チャレンジしてみます。ありがとうございました。
154デフォルトの名無しさん:2006/04/26(水) 22:28:08
Delphi 2005とVB 2005でどちらが優れてますか?
155154:2006/04/26(水) 22:29:22
すいません。スレ間違えました。
156149:2006/04/26(水) 22:54:47
どなた様かアドバイスの儀よろしくお願いします。
157デフォルトの名無しさん:2006/04/26(水) 23:01:34
2005ってことはPro以上だよな?
TChartっていうチャートコンポーネントが付属しているはず。
或いはExcelのActiveXを貼りつけてもよいかもしれない。

158デフォルトの名無しさん:2006/04/26(水) 23:56:51
>>157
ありがと。やってみる。
159デフォルトの名無しさん:2006/04/27(木) 00:17:29
ファイルの ctime/mtime/atime を変更したい場合はどうしたら良いでしょうか?
160デフォルトの名無しさん:2006/04/27(木) 00:23:55
Windows.SetFileTime
161デフォルトの名無しさん:2006/04/27(木) 00:50:30
Singleなどの実数を0.00015とかの形でLabelのCaptionに入れたい場合はどうすればいいのでしょうか?
162デフォルトの名無しさん:2006/04/27(木) 00:58:11
Label.Caption := FloatToStr(0.000015);
163デフォルトの名無しさん:2006/04/27(木) 03:20:17
DOSプロンプトに命令を飛ばすどんな関数を使えばいいのでしょうか?

DOSプロンプトをCreateProcessで起動し
PostMessageで終了させるところまでは作りましたが
制御するための検索キーワードが思いつかず適当な関数が発見できませでした

プログラム中でJavaコンパイル用のBatファイルを作成してるのでそれを実行させたいのです
よろしくお願いします
164デフォルトの名無しさん:2006/04/27(木) 03:23:52
TDosComman
165デフォルトの名無しさん:2006/04/27(木) 03:53:58
>>160
ありがとう。試してみます。
166デフォルトの名無しさん:2006/04/27(木) 06:24:02
>>163 バッチファイルを作ってるなら、そのバッチファイルの内容で制御したらどう?
167デフォルトの名無しさん:2006/04/27(木) 07:45:50
Delphiの言語仕様がVBより優れてる部分って何でしょう?
168デフォルトの名無しさん:2006/04/27(木) 07:48:06
ありません。
169デフォルトの名無しさん:2006/04/27(木) 07:54:21
>>167
asm 文  低レベルな所も好きなように書ける
170デフォルトの名無しさん:2006/04/27(木) 08:21:40
>>163
引数を指定すれば任意のbatを実行できると思ったけど
CreateProcess(nil, PChar('cmd.exe hoge.bat'), ・・・

だめならkeybd_eventdで1バイトずつ送るとか
171デフォルトの名無しさん:2006/04/27(木) 08:41:08
>>162
説明が足りませんでしたすみません。
あるSingle変数をキャプションに代入しようとしているのですが、
変数の中身が0.000015とかの場合はそのままきちんと表示されますが、
8.55E-6などとなっているときがあります。
このデータを0.0000000855と表示したいのですが、これはどうすればいいのでしょうか?
172デフォルトの名無しさん:2006/04/27(木) 08:53:49
>>171
つformat
173デフォルトの名無しさん:2006/04/27(木) 08:54:16
SingleじゃなくてDoubleで受けろ
174デフォルトの名無しさん:2006/04/27(木) 08:54:42
>>125です。
マルチスレッドでメインスレッドではファイルへの書き込み、もう一つではファイルを
読み出して計算をやらせているのですが、ファイルが使用中とのエラーが出てしまいます。
これを回避する方法ってないでしょうか?
175デフォルトの名無しさん:2006/04/27(木) 08:56:40
>>174
排他制御して、待つ
176デフォルトの名無しさん:2006/04/27(木) 08:59:51
TFileStreamなら同時アクセスもできたはず
177デフォルトの名無しさん:2006/04/27(木) 09:02:58
>>171
FormatFloat('0.####################', 0.0000000855)

もうすこしスマートなやり方もありそうだけど・・
178デフォルトの名無しさん:2006/04/27(木) 09:05:59
>>175
それか、Synchronizeでどうよ
179デフォルトの名無しさん:2006/04/27(木) 09:09:32
>>175
それってどうやるのでしょうか?

>>176
他のサイトでそれを読んだのですが、使い方を解説してるところがなくて・・・

>>178
Synchronizeでファイルを開いて計算してって処理をすべて書くとなるとマルチスレッドの
意味がなくなるのでやりたくないです。
180デフォルトの名無しさん:2006/04/27(木) 09:14:02
>>179
使用中じゃ無くなるまで待てばいいだけ
181デフォルトの名無しさん:2006/04/27(木) 09:15:07
>>177
だから、Format('%*.*f', [12, 10, 0.123456789012]);
182デフォルトの名無しさん:2006/04/27(木) 09:15:30
>マルチスレッドでメインスレッドではファイルへの書き込み、もう一つではファイルを

同じファイルなんだったら、
TMemoryStreamにしてカキコするのはSaveToFile、
読み込む方はTMemoryStreamのMemory読めば良いんでない?


183デフォルトの名無しさん:2006/04/27(木) 09:22:20
TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone)
184デフォルトの名無しさん:2006/04/27(木) 09:25:45
そもそも、出力中のファイルを計算対象のファイルにするのなら
同じスレッドで計算すればいいのではないかとおもうのだけど?
対象が大量で再計算頻発するのか?
それとも、同じ名前のファイルに書込み続けるのか?
185デフォルトの名無しさん:2006/04/27(木) 10:45:30
>>182-183
ぐぐってからやってみます。

>>184
永遠とデータが追加されながら再計算をするソフトです。
なので、途中経過を画面に表示したいのですよ。
再計算が色々とあるので別スレッドにチャレンジしました。
186デフォルトの名無しさん:2006/04/27(木) 12:00:20
>>185
じゃあ、182の方法がいいんじゃね?
187デフォルトの名無しさん:2006/04/27(木) 13:28:03
ファイルいらないんじゃね?
188デフォルトの名無しさん:2006/04/27(木) 13:54:41
入力→メモリ→計算・描画→ファイル
という形にならないのかな?
189デフォルトの名無しさん:2006/04/27(木) 13:58:29
>>187 >>188
マルチスレッドプログラミングへのチャレンジなんだから、
それは言わない約束でわ?
190デフォルトの名無しさん:2006/04/27(木) 14:00:47
TFileMappingStream を自作するといいと思うよ
ファイル マッピングを使えばメモリとファイルは等価になるから
191デフォルトの名無しさん:2006/04/27(木) 14:08:18
性能を問題にするなら、TMemoryStreamの保持するメモリで全部処理。
で、アプリが終るときにSaveToFile。

メモリが足りなくなるようだったら、メモリマップトファイルか?OSがファイルスワップするんだから、どっちでも一緒かな?
192デフォルトの名無しさん:2006/04/27(木) 14:34:49
私が馬鹿なのでみんないじめんと相手してくださいorz

>>182の方法でやろうとしたのですが、ちょっと難しそうです。
あと、CSVフィアルを読み込んで処理しているのですが、FileStreamやMemorystreamで
やろうとすると、CSVの処理がめんどくさいです。

こうなるとデータベース化しないと無理なのでしょうか。

>>187
それってどういう意味ですか?

>>190
すみません難しいこと分からないです。。。
193デフォルトの名無しさん:2006/04/27(木) 14:57:12
時間をテキストファイルに格納してるんだけど、それを取り出して日付時刻計算するのがめんどくさい。
今はhhmmss形式で保存して読み出して日付時刻計算するときは
hh*3600+mm*60+ssとやってるんだが、日付が入ると面倒なことになる。
String形式からDatetime形式に簡単に変更する方法かString形式の日付時刻を簡単に計算する
方法ってない?
194デフォルトの名無しさん:2006/04/27(木) 15:00:56
CSVを再度スキャンしてるの? 何か効率悪そうだな。
内部データは1行の内容のレコード型を作って、それを動的配列にして使えばいいんじゃないの?
195デフォルトの名無しさん:2006/04/27(木) 15:05:11
>>193
俺様書式なら面倒なのは当然で、
俺様書式じゃなくて StrToDateTimeで処理出来る形式にしたらいいんじゃないの?

俺様書式なら TRUNC(TDateTime*3600*24) をファイルに書き出すとか
196デフォルトの名無しさん:2006/04/27(木) 15:07:24
>>192
CSVファイルとくればTStringListの出番ですよと思ったけどバイナリだから無理か
>>194の方法が一番スマートかと

>>193
FormatDateTime使えば少しは簡単にならないかな
197デフォルトの名無しさん:2006/04/27(木) 15:14:58
for ii:=0 to 4 do
begin
s[ii]:='';
hoge
end;

s[ii]:='';にBPを設定してF8を一回押す。
次にiiの部分にマウスを持っていくと5の表示が出るんだだがこれって何?
ちなみにXP ProSP2 Delphi2005 Pro
こんな症状初めてで不気味。
198デフォルトの名無しさん:2006/04/27(木) 15:31:56
F8?ならforに入る前なんじゃないの?
199デフォルトの名無しさん:2006/04/27(木) 15:41:44
>>198
F9で実行してBPで止まった後の話ね。
赤くなってるのはhogeの部分
200デフォルトの名無しさん:2006/04/27(木) 15:48:18
>>189
>>188だと例えば入力→メモリとメモリ→計算・描画→ファイルで2つのスレッドにわければいいと思う。

>>197
最適化をOFFにしてみれば?
201デフォルトの名無しさん:2006/04/27(木) 15:50:19
最初にbreakしたときは?
hogeに入る前は?
202デフォルトの名無しさん:2006/04/27(木) 16:25:01
最適化のチェックを外しても変化なし。
forに入る前ii=0
forに入った直後ii=5 orz
203デフォルトの名無しさん:2006/04/27(木) 16:30:58
>>202
リセットしたら直ったとか言わないよなぁ・・・
204デフォルトの名無しさん:2006/04/27(木) 16:59:25
>>200
kwsk!
あとできるだけ優しく!!!
205デフォルトの名無しさん:2006/04/27(木) 17:44:38
>>203
リセットってどういう意味?
ちなみにforの直前にii:=0入れても変化なsアッー!

何この仕様。。。
206デフォルトの名無しさん:2006/04/27(木) 17:46:13
>>197
最適化OFFでも最適化してるのかfor ii:=5 downto 1 doみたいな動きしてるなw
しかもforに戻ってiiがデクリメントされた時点でテーブルがクリアされてる
207デフォルトの名無しさん:2006/04/27(木) 17:49:27
どうやらループ内で使ってないものはどうでもいいや的な動きをしてる
s[ii]:='';
showmessage(inttostr(ii)+'('+s[ii]+')');
hoge
ならちゃんとした動作になる
208デフォルトの名無しさん:2006/04/27(木) 18:09:52
>>204
んなこと言われても、そっちの仕様がよくわからないんだが・・・。
とりあえず俺がやったことある方法ね。

・スレッドオブジェクト側で入力データをrecordなりclassなりに保存し、それをリスト(TList等)に追加する。
・ある程度(100個とか)リストに追加したら、PostMessageでメインスレッドにメッセージを送る。

・メインスレッド側がメッセージを受けたら、リストのItem数を確認し入力データを取得。
・そのデータを計算なり描画に使うなりする。
・TFileStreamでそのデータをファイルに出力。

これで1つのファイルを読み書きに使うようなことはなくなる。
リストはどちらからも読み書きするのでTCriticalSection等で排他制御する必要あり。
209デフォルトの名無しさん:2006/04/27(木) 18:21:13
いっそタスクに別けた方がトラブルが少ないかもよ
データを読む側は、起動時にファイルがあれば読み表示 
データを作る側はファイルに書き出した後PostMessage

完全に別けて作成しておいて
一体の方がいいなら、後で合体させればいい
210デフォルトの名無しさん:2006/04/27(木) 18:38:03
>>208
record
classなり
TFileStream
TCriticalSection

これらをまったく使ったことが無いしぐぐってもサンプルソースが無かったので諦めます。
DBにTryしてみます。
211デフォルトの名無しさん:2006/04/27(木) 18:47:49
初心者ですがすみません。
タスクトレイに収納されたアプリケーションを閉じる方法を教えていただけないでしょうか。
(トレイ外のウィンドウハンドルでキルするのは出来てます。)
212デフォルトの名無しさん:2006/04/27(木) 18:59:51
213デフォルトの名無しさん:2006/04/27(木) 19:19:16
>>166
バッチファイルで制御するためにその起動方法が知りたかったんです><

>>170
CreateProcess( nil, Pchar('cmd.exe /c "'+workfolder.Text+'"\make.bat"'), nil, nil, False,CREATE_DEFAULT_ERROR_MODE, nil, nil, StInfo, PrInfo);
で無事起動できましたありがとうございますm(_ _)m
214208:2006/04/27(木) 19:21:11
「使ったことないからやめます」って・・・脱力しましたw
215デフォルトの名無しさん:2006/04/27(木) 19:26:07
DelphiでW-ZERO3のアプリ作れたんですね

ttp://blog.goo.ne.jp/marts_ishikawa/c/76e71d1234f83f4a6b214f4ea4f21ad7
216デフォルトの名無しさん:2006/04/27(木) 19:45:32
ウィンドウ右上の「×」を押して終了されたのをトリガーにする方法はありますか?
217デフォルトの名無しさん:2006/04/27(木) 19:46:57
WM_SYSCOMMAND
WM_CLOSE
218デフォルトの名無しさん:2006/04/27(木) 19:50:25
>>212>>214
ごめんなさい。
読んでもちょっと理解できなかったのですよ。
再チャレンジしてみます。
219デフォルトの名無しさん:2006/04/27(木) 19:53:57
たぶんヘルプは全く見ていないんでしょう。
220211:2006/04/27(木) 20:00:11
211です。
先ほどのはすこしわかり辛い質問の仕方かと思いますので、改めて質問しなおさせてください。

タスクトレイ内に登録されているアプリのハンドルを知る上手い方法をご存じないでしょうか。
221デフォルトの名無しさん:2006/04/27(木) 21:00:33
タスクトレイに収納されてるかどうかなんか、なんも関係ないだろ。
222デフォルトの名無しさん:2006/04/27(木) 21:01:16
「アプリのハンドル」ってなに?
223デフォルトの名無しさん:2006/04/27(木) 21:10:30
Application.Handle
224211:2006/04/27(木) 21:25:02
えとつまり
通常ウィンドウハンドルは
FindWindow(nil,'hoge.exe');
等で目的のアプリケーションのウィンドウハンドルが取得できるわけですが
タスクトレイに収納されてるものはこの方法では取得できません。
なにかよい方法は無いでしょうか
225デフォルトの名無しさん:2006/04/27(木) 21:26:08
>>224
そんなこたあない
226デフォルトの名無しさん:2006/04/27(木) 21:30:06
タスクトレイはただアイコンを表示するだけの領域です。
タスクトレイにウィンドウを収納することはできません。
従って「タスクトレイに収納されてるウィンドウ」という概念は成立し得ません。
227デフォルトの名無しさん:2006/04/27(木) 21:31:28
>>224
つEnumProcesses
228211:2006/04/27(木) 21:35:15
なるほどです。自分が勘違いしてるみたいですね。
もうすこし自分で調べてみます。有難うございます。

EnumProcesses
ググって見たら出来そうな気がしてきました。サンクスです。
229デフォルトの名無しさん:2006/04/27(木) 22:25:00
>>219
ヘルプは一応読んでます。
ただ検索にあまりにもひっかからないのでぐぐるほうが多いです。
文字列を浮動小数点に変換するFunctionがstrtodoubleだったか何だったか忘れたので、
strtoで検索しても何一つひっかからないとか使い勝手が悪いんですよね。
コマンドが分かってる人じゃないと使えない。
部分一致がもっとまともに機能すればいいのですが。。。

ご迷惑をおかけしてすみません。
230デフォルトの名無しさん:2006/04/27(木) 22:34:07
>>229
回答でrecord、class、TFileStream、TCriticalSectionなどのキーワードを教えて貰ったんだから
それぐらいはヘルプで調べて読みなさいな
231デフォルトの名無しさん:2006/04/27(木) 23:49:06
ちょっと前に株価チャートを表示できるコンポとしてTCHARTを教えてもらったのですが、
これってX軸を反転させることはできますか?

具体的には一番右のデータが0で一番左の数字が大きくなるのですが、どうしても左端が
小さな数字になってしまいます。
AddXY以外に何か軸を反転させる方法があるのでしょうか?
232デフォルトの名無しさん:2006/04/27(木) 23:55:54
>>229
ヘルプがイマイチなのは認めるが、ヘルプのテキスト検索で「浮動小数点」と
入力したらなんとか探し出せると思う。

ところでDBやるとか言ってるけど、使ったことある?
recordもclassも調べる気がありませんでは、とても無理な気がする。
233デフォルトの名無しさん:2006/04/28(金) 00:35:18
ButtonPicClick(sender);
としてみたところ
「未定義の識別子:'sender'」
というエラーがでて動きません。
一体何事なんでしょうか?
234デフォルトの名無しさん:2006/04/28(金) 01:12:11
スコープ内に sender がないんじゃないの?
235デフォルトの名無しさん:2006/04/28(金) 01:24:07
無い変数は使えない。呪文じゃないんだから。
236デフォルトの名無しさん:2006/04/28(金) 02:18:42
>>215
マジですか?本当なら禿げしくW-ZERO3に乗り換えたい。
237デフォルトの名無しさん:2006/04/28(金) 05:19:22
無い呪文も使えんと思うが
238デフォルトの名無しさん:2006/04/28(金) 06:59:55
無い呪文でも となえた事にして、女にモテモテ
239デフォルトの名無しさん:2006/04/28(金) 08:25:11
VirtualRDってDelphi製ですか?
240デフォルトの名無しさん:2006/04/28(金) 08:43:00
>>239
こっちで判定ソフトを作ってる。
http://pc8.2ch.net/test/read.cgi/tech/1135654787/l50
241デフォルトの名無しさん:2006/04/28(金) 08:46:05
ttp://www.borland.co.jp/vclscanner/

VCL Scannerが消えてる。。。
242デフォルトの名無しさん:2006/04/28(金) 09:26:11
> こっちで判定ソフトを作ってる。

ソフト自体はDelphi製じゃないけど
243デフォルトの名無しさん:2006/04/28(金) 09:33:28
>>242
なにか問題でも?
244231:2006/04/28(金) 09:43:05
誰か相手してください。。。

他にもグラフを表示したらグラフがギザギザになってしまう問題があるんだけど、ぐぐっても
http://72.14.203.104/search?q=cache:lIJa5h0aIbEJ:leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/article/042/042072.html+TCHART+delphi%E3%80%80%E3%82%AE%E3%82%B6%E3%82%AE%E3%82%B6&hl=ja&gl=jp&ct=clnk&cd=1
こんなのしか出てこないし。。。
245デフォルトの名無しさん:2006/04/28(金) 10:12:25
TChartを右クリックして「チャートの編集...」を選びじっくり見てみる
246デフォルトの名無しさん:2006/04/28(金) 11:02:28
株価チャートなら、どうせ出来高とか、5日平均とか色々欲しくなるんだから
表示[関数]を作って自前表示した方がいいよ
247デフォルトの名無しさん:2006/04/28(金) 11:37:21
>>245
編集→軸→スケールのところにY軸を逆転させるのはあるけど、X軸を反転させるのは無いですだ。

>>246
これが成功したら移動平均Functionとかを作って、計算後にTCHARTの表示ルーチンに投げる予定
だったんだけど、それよりもTImageを使って1から作ったほうがいいってことけ?
248デフォルトの名無しさん:2006/04/28(金) 11:53:13
>>247
軸を下にしてスケールの反転をチェックすると?
249デフォルトの名無しさん:2006/04/28(金) 12:41:53
レコードのリストって作れましたっけ?
クラスはTlistで出し入れできるのですが
レコードの場合は配列しか無理?
250デフォルトの名無しさん:2006/04/28(金) 12:46:43
ポインタにすべし

PHoge = ^THoge;
THoge = record

end;
251デフォルトの名無しさん:2006/04/28(金) 12:53:14
前方参照を許さないDelphi唯一の例外ですね
252デフォルトの名無しさん:2006/04/28(金) 13:04:20
>>247
こんな感じでデータ型を作って
type TKabuka4Item= record
sday,eday :TDateTime;
hajime:Integer;
takane:Integer;
yasune:Integer;
owari :Integer;
end;

TAKabuka=array of TKabuka4Item;
TCharProp = record
DtMax :Integer; //グラフの最大値
DtMin :Integer; //グラフの最小値
HigePen :TPen ; //ローソクを描く時のペン
InBrush :TBrush ; //陰線を描く時
YoBrush :TBrush ; //陽線 
end;

procedure DrawKabuChart(cvs:TCanvas;rect:TRect;dt:array of TKabuka4Item;prop:TCharProp);

とTCanvasに描画する関数を作っておけば
TImage でも Bitmapでも、プリンタでも、フォームでも表示可能
253デフォルトの名無しさん:2006/04/28(金) 14:30:34
>>248>>252
神と呼ばせてくだせえ。
254デフォルトの名無しさん:2006/04/28(金) 19:00:15
delphi6のエディタには行数を表示する機能はないのですか?
255デフォルトの名無しさん:2006/04/28(金) 19:18:16
ステータスバーが見えないなら無い
256デフォルトの名無しさん:2006/04/28(金) 20:24:44
>>250
やっと打開できましたありがとうございます

ポインタむずかしいですね
監視式で監視しても数値が変わらなかったんで動かないのかと思ったのですが
実装したらなぜか正常動作

バグが起きても絶対発見できないなと思いつつも次段階へ進みました
257デフォルトの名無しさん:2006/04/28(金) 21:23:42
>>256
寝かせとけ(w
258デフォルトの名無しさん:2006/04/29(土) 01:51:01
VB 2005は無償だそうですが、Delphi 2005にはVBよりも勝る点がありますか?
259デフォルトの名無しさん:2006/04/29(土) 01:59:51
弱い者いじめはよしましょう
260デフォルトの名無しさん:2006/04/29(土) 07:41:35
>>258 道具というのは使う人の能力によるものなんで、
勝るかどうかを知るには貴方の事をもっと知る必要があります。
261デフォルトの名無しさん:2006/04/29(土) 11:34:53
死ねよ気違い
262デフォルトの名無しさん:2006/04/29(土) 12:29:26
VB VC++ VC# 全部無料バージョンがあるのか。早速ダウンしとこう
しかもボーランドはIDEから撤退予定と・・・・

業界2位が頑張らなきゃ面白くないぞ!!
263デフォルトの名無しさん:2006/04/29(土) 12:55:41
変な独り言だな
264デフォルトの名無しさん:2006/04/29(土) 13:07:30
スレタイ読めない人が多いですね
他者を貶めることで自分の優位を誇ることがどんなにくだらないかわかんねぇの?
わかんねぇから>>258みたいなやつがいるんだろうけどな
パソコン使える程度の頭があるんだから、もちっと想像力働かせろよ

とマヅレス
265デフォルトの名無しさん:2006/04/29(土) 13:43:20
スルーできないなら一言「スレ違い」と書いとけ。
266デフォルトの名無しさん:2006/04/29(土) 14:26:07
>パソコン使える程度の頭

これもホント、ピンキリだからなぁ…
267デフォルトの名無しさん:2006/04/29(土) 15:34:14
でもさ、Delphiが爆発的に普及したのは
言語・環境のすばらしさもさることながら
Parsnal版の無料配布が大かったんじゃね?
268デフォルトの名無しさん:2006/04/29(土) 16:29:30
で、爆発的にユーザ減少したのは、D8 D2005 があまりにひどかったからなんだな。
269デフォルトの名無しさん:2006/04/29(土) 16:57:02
スレタイが読めませんか?
270デフォルトの名無しさん:2006/04/29(土) 17:11:48
Delphi超初心者です。

「Delphi はじめの一歩」(ttp://delphi.sakura.vg/index2.html)というページを参考に
Delphi6でオリジナルブラウザを開発するのに試行錯誤しております。

このページの作者は「Acty」というブラウザを開発した方で
その「Acty」のブックマークパネルの挙動が、ドッキングウィンドウというのでしょうか?
VisualStudioやEclipseなどのIDEでよく見られる、画面の端に持っていくと
吸い付くような感じでドッキングするといった挙動をするのですが、
これは、どのように実装しているのでしょうか?

「Delphi はじめの一歩」で、ブックマークパネルのソースをダウンロードできるにはできるのですが
サンプルのブラウザと「Acty」ではブックマークパネルの仕様が異なっており
このドッキングウィンドウをどうやって実装してるのかがわからないのです。

簡単に実装できるのか?あるいは、この作者だからこそなせる業なのか?
どなたか、Delphiに詳しい方、教えてください。
よろしくお願いいたします。
271デフォルトの名無しさん:2006/04/29(土) 17:15:08
C:\Program Files\Borland\Delphi6\Demos\Docking

がしかし、これをアプリに組み込んでいる実例は未だ見たことがない。
272デフォルトの名無しさん:2006/04/29(土) 17:35:15
Delphi の IDE で使ってるやん。
273デフォルトの名無しさん:2006/04/29(土) 17:54:51
>>271
俺も使ってるよ
ほかにドッキングウィンドウの実装方法ってあるの?
274270:2006/04/29(土) 20:46:26
>>271
>C:\Program Files\Borland\Delphi6\Demos\Docking

すばやいレスありがとうございます!
これを応用すれば、うまく実装できそうな感じですね
275デフォルトの名無しさん:2006/04/30(日) 01:37:58
    ∧,,∧  
   ミ,,゚Д゚彡
    ミ つ旦)~~

Delphi 2005南下と比べると
VB 2005の方が実は優れてるんじゃないかと思う京子のゴロ

いずれにしても某はもうだめですね。
ブビ坊の言ってることは実は正しかったような希ガス。
276デフォルトの名無しさん:2006/04/30(日) 01:45:35
フサまでそんなこと言うのか・・・
277デフォルトの名無しさん:2006/04/30(日) 01:50:38
つか、気づくの遅すぎだろ、いまごろ・・・
278デフォルトの名無しさん:2006/04/30(日) 01:53:34
現状ではVS2005>>>BDS2006と言われてしょうがないと思う
両方使うとわかるけどテンプレートの選ばせ方とかはマイクロソフトの方が上手
あと・・・今更ながら画面のセンス。
279デフォルトの名無しさん:2006/04/30(日) 02:07:44
ヒント:トリップ
280デフォルトの名無しさん:2006/04/30(日) 06:45:35
うっかり信じちゃったよ!
281デフォルトの名無しさん:2006/04/30(日) 09:17:00
.netって某を潰すためのM$の罠だったの?
282デフォルトの名無しさん:2006/04/30(日) 09:33:27
むしろ某潰し以上にMS社内を混乱させた欠陥兵器
283デフォルトの名無しさん:2006/04/30(日) 10:52:39
.NET って、CPUパワーがあと3倍10Gくらいになったら、素晴らしい技術になるだろう。
ネイティブマンセーなDel厨の言うことは、信じちゃダメ
284デフォルトの名無しさん:2006/04/30(日) 11:09:26
つーかVC2005も無料なのにVB2005使う意味無いじゃん
285デフォルトの名無しさん:2006/04/30(日) 11:16:02
CPUパワーが3倍になったらOSやミドルウェアの重さも3倍になる
286デフォルトの名無しさん:2006/04/30(日) 13:29:33
>>284は大根切るのにも斧を使うタイプ
287デフォルトの名無しさん:2006/04/30(日) 15:05:11
>>285
今のマシンにWin95とか走らせたら快適なんだろうか
実際はドライバなどの問題から無理だろうけど
288デフォルトの名無しさん:2006/04/30(日) 16:09:12
Win95 でしか使えないアプリに限定されるだろ。BDS なんかは使えない。

環境とはそういうものなんだよ。いつもでもネイティブマンセーなんていってると
Del厨と同じになるよ。快適さは、軽いことだけじゃないんだ。
289デフォルトの名無しさん:2006/04/30(日) 16:10:22
軽快動作が第一条件なら、D7 からもうバージョンアップする必要なしだね。以後無視。
290デフォルトの名無しさん:2006/04/30(日) 19:57:09
.netマンセー
291デフォルトの名無しさん:2006/04/30(日) 20:35:52
確かに残念ながらWIN95はUSBが使えないというたった一つの欠点によって今では使えない。
でもVMWareで WIN95走らせると、とても快適
292デフォルトの名無しさん:2006/04/30(日) 22:37:01
API の互換性がないから、多くの環境でサポート外なんだな。Win95 っていうか
非NT系はもう無視される運命。ITune でも2000とXpだけだもんね。
293Delフサギコ ◆A6VzDeLphI :2006/05/01(月) 13:17:06
 ∧,,∧
ミσ゚Д゚ミσ

>>275
おまいさん誰だい。
294デフォルトの名無しさん:2006/05/01(月) 14:52:16
    ∧,,∧  
   ミ,,゚Д゚彡 <プビフサギコだお
    ミ つ旦)~~

295デフォルトの名無しさん:2006/05/01(月) 15:00:35
完全にコンパイラが消滅する世界が正しいと?

ttp://www.microsoft.com/japan/msdn/vbasic/support/vistasupport.aspx

>Visual Basic チームは、Visual Basic 6.0 アプリケーションが WindowsR Vista でも
>"そのまま" 動作する互換性を提供することを表明します。」

>サードパーティ コンポーネント
>マイクロソフトでは、OCX コントロールや ActiveX コントロールなど、
>サードパーティ コンポーネントに関するサポートは提供できません。
>サードパーティ コンポーネントに関するサポートの詳細については、
>コントロールの製造元に問い合わせることをお勧めします。

>Visual Basic 6.0 のサポート ライフサイクル
>Windows Vista には Visual Basic 6.0 のバイナリ ファイルが同梱されますが、
>Visual Basic 6.0 IDE や Visual Studio 6.0 自体のサポート ポリシーに変更はありません。
>これらの製品の延長サポートは 2008 年 3 月で終了します。
296デフォルトの名無しさん:2006/05/01(月) 17:40:50
BDS2006(アップデート1)のDelphi for Win32でActiveXコントロールを作ろうと思って、
マニュアルに書いてある通りActiveXライブラリのプロジェクトに
ActiveFormを追加したのですが、プロジェクトメニューにWeb配布オプションが現れません。
どうして?
297デフォルトの名無しさん:2006/05/01(月) 19:08:45
無くなりました。

代わりにこんなものが・・・
http://blogs.borland.com/chewy/archive/2005/12/01/22285.aspx
298デフォルトの名無しさん:2006/05/01(月) 19:10:55
299デフォルトの名無しさん:2006/05/01(月) 19:37:29
いろんな屁理屈があるみたいだけど結局サクサク動く軽いアプリが一番

特に仕事で使うカスタムアプリとかでモッサリとしか動かないやつは金返せといいたくなる
こっちは残業するかしないかの瀬戸際なのに画面ひとつ表示するのに何万年かかってんだょと…

ドトネトごときに10年も待てん
ネーティブでもなんでもいいから今すぐ何とかしてけろ
300デフォルトの名無しさん:2006/05/01(月) 19:58:16
> いろんな屁理屈があるみたいだけど結局サクサク動く軽いアプリが一番

ずーーーーーと、Delphi2 あたりを使ってたらいいじゃないの。
301デフォルトの名無しさん:2006/05/01(月) 22:04:12
そんなことよりもハローワーク行けよ。
302デフォルトの名無しさん:2006/05/02(火) 00:38:06
すれ違い
303デフォルトの名無しさん:2006/05/02(火) 01:14:34
delphi6 と 7 では どっちがバグ少ないのでしょうか?
304デフォルトの名無しさん:2006/05/02(火) 01:22:12
6
イントラウェブ使わないなら6で十分
7での追加はサードパーティのツールど考えてよしだよ
あと追加のレポートツールはバグだらけ
少なくとも日本語版はダメダメ
305デフォルトの名無しさん:2006/05/02(火) 01:26:32
Delphi高い。VBの方が無償で高機能で安定してて高速で、選ばない理由がない。
306デフォルトの名無しさん:2006/05/02(火) 01:41:27
そうだけど、ま、いろいろ好きずきやら因縁があるから・・・
307デフォルトの名無しさん:2006/05/02(火) 01:51:26
delphi7のComCtrls にある Listviewって スクロールバーが 
無効リージョンを描画しなおす時、 無効じゃなかったところだけは
拝啓で塗りつぶされてちゃんと描画されないことがあるのですが 
これって バグなのでしょうか
308デフォルトの名無しさん:2006/05/02(火) 01:52:53
>> 307 拝啓 → 背景 
訂正するまでも無いことですが一応 
309デフォルトの名無しさん:2006/05/02(火) 04:58:22
そんなこと指摘する前に質問に答えてやればいいのに
310デフォルトの名無しさん:2006/05/02(火) 04:59:17
7にはXPマニフェストがついている。
これ大事。
311デフォルトの名無しさん:2006/05/02(火) 07:13:14
VCが無料なのにVBを選ぶ理由も理解しがたいがな
312デフォルトの名無しさん:2006/05/02(火) 08:22:18
>>300
?
313デフォルトの名無しさん:2006/05/02(火) 14:03:58
文字の縁を綺麗にするのってどうすればいいんでしょうか。
ペイントソフトの文字入れ機能に良くあるオプションのことです
314デフォルトの名無しさん:2006/05/02(火) 14:30:40
自前で実装するならビットマップに4倍のサイズで描画しておいて
4点の平均を1点に縮小して使うとか
315デフォルトの名無しさん:2006/05/02(火) 16:57:04
TLogFont で、lfQuality := ANTIALIASED_QUALITY;
316デフォルトの名無しさん:2006/05/02(火) 21:36:10
この方法はXPでしか使えないな。他の種類は自分でやるしかない。
317デフォルトの名無しさん:2006/05/02(火) 21:38:21
そんなことはない。Win98以降ならば普通に使える(正確にはWin95OSR2以降)
もっとも、日本語フォントではほとんどアンチエイリアス効果がないけどな。


318デフォルトの名無しさん:2006/05/03(水) 00:51:28
5個の整数型変数のうち一番大きなものを取り出す関数がありましたら教えてください。
319デフォルトの名無しさん:2006/05/03(水) 01:04:15
>>318
MaxIntValue
320デフォルトの名無しさん:2006/05/03(水) 07:02:24
>>319
配列ならね・・・
321デフォルトの名無しさん:2006/05/03(水) 07:37:09
オープン配列引数にすればいいんだから無問題でしょ
322デフォルトの名無しさん:2006/05/03(水) 07:41:51
MaxIntValue([a, b, c, d, e])
323デフォルトの名無しさん:2006/05/03(水) 07:50:09
>>322
ガ━━(゚Д゚;)━━ン!オープン配列知らなかった。こんなのあったのかよ(w
324デフォルトの名無しさん:2006/05/03(水) 07:52:00
>>323
あ”Formatとかと同じってことか?
325デフォルトの名無しさん:2006/05/03(水) 08:10:34
procedure TForm1.Button1Click(Sender: TObject);
type
PData = ^TData;
TData = record
s:string;
end;

POwner = ^TOwner;
TOwner = record
Data : Pointer;
end;
var
P: POwner;
begin
GetMem(P,Sizeof(TOwner));
GetMem(P.Data,sizeof(TData));
PData(P.Data).s := 'test';
ShowMessage(PData(P.Data).s);
FreeMem(P.Data);
FreeMem(P);
end;
これをやるとメモリリークしますが、Stringを持つ構造体のポインタを確保するって駄目なんでしょうか?
参照カウントあたりでミスってると思うんですが。素直にクラスにするべきですか?
326デフォルトの名無しさん:2006/05/03(水) 08:32:16
new/dispose使っとけ。うまいことやってくれる。
327デフォルトの名無しさん:2006/05/03(水) 08:49:12
ありがとうございます。マジ感謝です。
328デフォルトの名無しさん:2006/05/03(水) 09:06:17
>>325
FreeMemのヘルプ
「Pが長い文字列またはバリアントを含む構造を指す場合は
 Freemem を呼び出す前に Finalize を呼び出します。」

FreeMemはメモリを破棄するだけなのでレコードや動的変数の中身は検知しない
Finalizeを使うかあるいはFreeMemの前に
PData(P.Data).s := ''と書いて参照先をnilにするか処理が必要

まあ、>>326が言うようにNew/Dispose使えばこんな面倒臭いことしなくていいんだけどね
329デフォルトの名無しさん:2006/05/03(水) 09:16:18
勝手につくられたはずのpdrユニットでコンパイルエラーが出る。
作った当初はコンパイル出来てEXEも吐き出した。
ちょっと直そうと思ってMain.pasを修正し実行しようとしたらこれだ・・・・
なんなんでしょう?この融通のきかないプロジェクトファイルってのは?
del7perです。


program ProjectTest3d;

uses
Forms,
Main in 'Main.pas' {Form1},


{$R *.res}

begin ←[エラー] ProjectTest3d.dpr(10): 識別子 が必要な場所に 'BEGIN' があります
Application.Initialize;
Application.Title := 'Test3D';
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
330デフォルトの名無しさん:2006/05/03(水) 09:17:02
Main in 'Main.pas' {Form1},
Main in 'Main.pas' {Form1};
331329:2006/05/03(水) 09:27:05
?わかりません
Main.pasはありますよ(未修正のやつ)
332デフォルトの名無しさん:2006/05/03(水) 09:31:08
というかunit Mainだけでコンパイルしたいのだが
勝手に出来たprogram ProjectTest3d;のユニットを切り離したい。
333329:2006/05/03(水) 09:37:55
Main in 'Main.pas' {Form1}; ←セミコロン
わかりました、ありがとうございます。

そうだ、わけわからんタイプライブラリ読み込んでたから1行消したまま保存してたんだ。
334デフォルトの名無しさん:2006/05/03(水) 13:30:27
Delphi で、複数のディレクトリなどのパスを結合する場合には、どうしたら良いですか?
IncludeTrailingBackslash 関数
IncludeTrailingPathDelimiter 関数
などの関数でデリミタを付加して、文字列を結合するのが普通なのでしょうか?
335デフォルトの名無しさん:2006/05/03(水) 13:39:39
たんなる文字列操作。すきにやればよし。
336デフォルトの名無しさん:2006/05/03(水) 13:53:40
>>335
そうですか。
最近の他の言語は、面倒みてくれるんですけどねぇ。
真面目に対処しようと思うと、結構わずらわしいと思うのですが。
移植などの時も、下手にやると書き換えなきゃならなくなりそ。
Delphi こういった部分がおそまつだったり、マニュアルが酷かったりと、
これじゃぁ、新規の人が増えないだろうなぁ。
まぁ、探せばコンポがあるのかな。
337デフォルトの名無しさん:2006/05/03(水) 13:55:08
JCLにいろいろ関数があったような。
ま、335の言うとおり
単なる文字列操作だから好きにやればよいと思うけど。
338デフォルトの名無しさん:2006/05/03(水) 14:26:38
339デフォルトの名無しさん:2006/05/03(水) 15:58:24
煩わしくは無いと思うが?>>336 いったいどういう所で悩んでるの?
340デフォルトの名無しさん:2006/05/03(水) 16:37:36
>>338
うげー、いつの間にかドメイン取ってDelWiki名乗ってるし。
使いにくいからPukiWikiにしろよ。
341デフォルトの名無しさん:2006/05/03(水) 17:15:02
>>339 「真面目に対処」したくないから悩んでるんだと思う。
342デフォルトの名無しさん:2006/05/03(水) 18:38:07
言語に付いてないと何もできない、ってのはゆとり教育のせいかな?
343デフォルトの名無しさん:2006/05/03(水) 18:57:57
今日も時代遅れの出がらし君大活躍だなw
344デフォルトの名無しさん:2006/05/03(水) 19:04:56
つまらない疑問かもしれませんが教えて下さい
一つのpasファイルの中を複数のスレッドからほぼ同時に走らせる事は並列処理として成り立つのでしょうか?
345デフォルトの名無しさん:2006/05/03(水) 19:42:55
意味が分からん
複数のスレッドが1つのpasファイル内のProcedureなりFunctionを呼ぶってことか?
それならそのProcedureやFunctionをスレッド内に記述するべきだと
346デフォルトの名無しさん:2006/05/03(水) 19:49:32
>>345
1票
347デフォルトの名無しさん:2006/05/03(水) 19:55:36
>>344
人はそれをマルチスレッドと呼ぶ。
348デフォルトの名無しさん:2006/05/03(水) 20:39:59
最近Delphi界に復帰してきました。

うろ覚えなんですけど、
hoge1,hoge2,hoge3,hoge4…
てな文字列があった場合、これをhoge1 hoge2 hoge3 とかって切り離す手続きか何かなかったですか?
あったような気がしたんだがな〜と思ってHelpを見てたらCommaTextみたいなプロパティがあって、これのことを勘違いしてたのかな?
って、思案しています。

なかったですか?
349デフォルトの名無しさん:2006/05/03(水) 20:46:17
TStringList.CommaText
350デフォルトの名無しさん:2006/05/03(水) 20:51:16
var
 sList: TStringList;
begin
 sList := TStringList.Create;
 try
  sList.CommaText := 'hoge1,hoge2,hoge3,hoge4';
 finally
  sList.Free;
 end;
end;

これでsList.Strings[0]にhoge1, Strings[1]にhoge2・・・Strings[3]にhoge4が入ります
CSVファイルを解析する時なんかに便利ですがスペースを含む文字列がある場合は要注意

CommaTextはスペースまたはカンマで区切るので(””で文字列を囲まれていれば大丈夫)
スペースで区切りたくない場合は一度スペースをStringReplaceなんかで置換して
CommaTextにブチ込んだ後で元に戻す
351デフォルトの名無しさん:2006/05/03(水) 21:23:24
テストしてない。
function StringSplit(Text: string; const SubStr: string; List: TStringList): Integer;
var
  Count, Len: Integer;
  S, P, U: PChar;
  V: string;
begin
  Count := 0;
  Len := Length(SubStr);
  List.Clear;

  S := PChar(Text);
  U := PChar(SubStr);
  P := StrPos(S, U);
  while P <> nil do
  begin
    SetString(V, S, P - S);
    List.Add(V);
    S := P + Len;
    Inc(Count);
    P := StrPos(S, U);
  end;
  List.Add(string(S));
  Inc(Count);

  Result := Count;
end;
352348:2006/05/03(水) 22:19:12
>>349-351
サンクスです!やっぱCommaTextってこういう使い方するんですね。
やっぱDelphiいいわ。細かいことができる。

まだ.NETのほうは試してないですけどねー。
353Delフサギコ ◆A6VzDeLphI :2006/05/03(水) 23:20:50
 ∫,,,,,,,,,∧,,∧  便乗質問です。
⊂,,,,,,,,,つ,,゚Д゚ミつ

>>325-326>>328
TRecordってのがあったとして
type PRecord = ^TRecord;
var p:PRecord; Item: TRecord;
begin
 New(p);
 p^ := Item;
っていうのは
begin
 GetMem(p,SizeOf(Item));
 Initialize(p^);
 p^ := Item;
と、等価

begin
 Dispose(p);
っていうのは
begin
 Finalize(p^);
 FreeMem(p);
と、等価

って理解でいいのかしら?
354Delフサギコ ◆A6VzDeLphI :2006/05/03(水) 23:36:05
>>336
 ∫,,,,,,,,,∧,,∧  まあもれも
⊂,,,,,,,,,つ,,゚Д゚ミつ

「CharToByteIndexだとかのWideString版がネエ!
嫌だ嫌だ、標準でナキャイヤダ。
VCLは.NETみたいに膨らみまくってなんでも標準であるべきだ」
と騒ぐタイプなので、少し共感はするんだけど、

実際には
[最近の他の言語はどういうことを面倒みてくれるのか]
[結構わずらわしいのを、どんなに楽にしてくれるのか]
[移植のときはどういう楽なのか]
を伝えておいてくれれば、共感したら誰か作ってくれるかもよ。

単なる文字列処理になるわけで漏れでも作れるレベルだろうから。


.....>>352
いや、おそらく多分確かうろ覚えだけど、ことこの処理に限れば
.NETの方が全然いいかと、、、、

いい加減、TStringListは何かに置き換わったりしないかな、
widestring対応じゃないし、改行コードはCRLF前提だし......
String or WideString の動的配列か、
もしくはTList派生で本当にStringのListを作るとか。

まあ、漏れは昔いらついてTList系でWideStringとかつくったり
Split関数も作ったりしたので別にいいんだけど、
VCL標準でもどんどん成長してって欲しいな。
355デフォルトの名無しさん:2006/05/04(木) 01:06:48
Delphi は文字列処理には向いてない環境である、と思った方がいいよ。
自前で文字列処理のライブラリをつくるくらいの気構えがいるくらい、Delphi で
まじめに文字列処理するのは覚悟がいる。Perl や Python でやった方がはるかに簡単。
356デフォルトの名無しさん:2006/05/04(木) 01:12:42
>>355
string型があるんだし、Cよりは文字列処理に向いているとは思うが。
要するにライブラリが整備されていないってことでしょう?
357デフォルトの名無しさん:2006/05/04(木) 01:14:43
そゆこと
358デフォルトの名無しさん:2006/05/04(木) 02:51:43
ようするにダメだということだな。


>>342

その次
>>343, >>336
359デフォルトの名無しさん:2006/05/04(木) 03:30:00
MD5やSHA1やSHA2を手軽に求められるコンポーネントってありますか?
SHA1だけでも良いので、知っている方がいらっしゃたら教えて下さい。
360デフォルトの名無しさん:2006/05/04(木) 05:16:11
探したのか?
361デフォルトの名無しさん:2006/05/04(木) 05:18:32
362デフォルトの名無しさん:2006/05/04(木) 06:07:22
例文や使い方などは付いてないのでしょうか?
363デフォルトの名無しさん:2006/05/04(木) 07:01:02
読めばわかる
364デフォルトの名無しさん:2006/05/04(木) 07:51:22
365デフォルトの名無しさん:2006/05/04(木) 08:12:44
>>356
スクリプト厨は昔から張り付いてる奴だから相手にすんな
366デフォルトの名無しさん:2006/05/04(木) 08:35:14
C にもインタプリタあるだろw
素直になれよw
367デフォルトの名無しさん:2006/05/04(木) 08:42:07
368デフォルトの名無しさん:2006/05/04(木) 08:54:01
a^2-b^2=(a+b)(a-b)
369デフォルトの名無しさん:2006/05/04(木) 08:54:27
出がらしが毎日毎日張り付いてるだけだなこのスレ
370デフォルトの名無しさん:2006/05/04(木) 09:34:12
質問する → 馬鹿にする → 人が去る → Delphi 死亡
371デフォルトの名無しさん:2006/05/04(木) 09:39:28
× 馬鹿にする
○ 愛しのDelphiタソが馬鹿にされたと逆切れ
372デフォルトの名無しさん:2006/05/04(木) 09:39:46
Delphi はこんなことすら簡単にできないの?
→ ○○すればできるでしょ
→ Delphi 糞のまま化石化

Delphi はこんなことすら用意されたないの?
→ ○○すればできるでしょ
→ Delphi 糞のまま化石化

Delphi ××するにはどうした良いの?
→ 質問には答えず、馬鹿にしておなにー
→ Delphi 糞のまま化石化
373デフォルトの名無しさん:2006/05/04(木) 10:21:42
今日はハローワークも休みなんだっけ
374デフォルトの名無しさん:2006/05/04(木) 10:33:17
>>367
検索かければいくら出てくるだろ、C にもインタプリタはある。
しかも、スクリプト言語には、単体で実行可能なバイナリの生成が可能なものも多い。
というか、実行バイナリを生成するかどうかなんて、文字列処理とは関係ないだろ。
C# は、文字列も処理しやすくなってるし。
スクリプト厨呼ばわりした逃げ口上にしてはお粗末。
単に、言語が貧弱なだけ。
何時までたってもスクリプトだからと叩いてたりするから、化石時代の出涸らしと言われるんだよ。
JavaScript ですら見直され、非常に熱いこの御時世だぞ。
375デフォルトの名無しさん:2006/05/04(木) 10:37:35
文字列処理は、みんな好きなスタイルでやってるよ。
Delphi 用 TP Lex/Yacc を使ってコードを生成して利用するのが好きな人もいれば
自前で状態遷移を表現しやすいクラスを作って処理してる人もいれば
ひたすら copy と deleteと+の人もいる状態。

縛られる必要はない。
みんな自分のスタイルで書けばいいんだよ。
376デフォルトの名無しさん:2006/05/04(木) 10:47:40
標準関数が貧弱の一言ですむことをよくもまあ長々と
377デフォルトの名無しさん:2006/05/04(木) 10:50:07
標準関数は強力すぎるくらい強力だが? 何が欲しいの?
378デフォルトの名無しさん:2006/05/04(木) 10:51:32
時代遅れで無知な出がらし君に聞きたいことは特にありません。
379デフォルトの名無しさん:2006/05/04(木) 11:43:06
>>368 文字列レベルでその変換をする方法が知りたいわけ?
面白そうだね。


>>378 だったら、質問スレに出没しなけりゃいいのに・・・・
380デフォルトの名無しさん:2006/05/04(木) 11:47:28
「標準関数が貧弱の一言ですむこと」なんだよなぁ。

フリーのコンポやユニットでできる、とかいうのと、標準でできる、ってことは
実に大きな隔たりがあるんだよね。

努力すると何でも出来る、のは Delphi についてはそのとおりだが、簡単にできる
ようになぜ進化しないのか、そこらへんに近頃の衰退の理由がありそうだよね。
381デフォルトの名無しさん:2006/05/04(木) 11:49:10
>>375
>ひたすら copy と deleteと+の人もいる状態。
俺のことかぁぁぁ!!!
382デフォルトの名無しさん:2006/05/04(木) 12:00:23
> 標準関数が貧弱の一言ですむこと

Delphi は GUI 以外は、ライブラリが貧弱。これほんと。
383デフォルトの名無しさん:2006/05/04(木) 12:05:14
>>380
なんか、マニュアル最近読まないからアレだけど、最近のDelphiは文字列操作の関数は
イヤンなるくらい増えてるみたいよ。知らないのが100以上あって驚いた。
もしかすると探せば、大抵あるのかもしれないね。
でも、あのヘルプじゃ探せないって事なのかもしれない。

話は違うけどさ、
最近の1チップマイコンはハードに色んな内蔵周辺回路が付いていて、とても強力だけど
だけど使おうとしたらマニュアルの解読がとてもメンドクサイ作業になる。

232Cでのシリアル通信なんか、内蔵UART使うの逆に面倒で
タイマー割り込みか、エッジ割り込みで命令数数えて作る方が楽。

でも、そう思わない人も当然いて、なんでこんな安い仕事で、こんな面倒なコード書いてるの?
と不思議そうに聞く。 安いから、マニュアル読むのも時間のロスって事なんだけどさ。
384デフォルトの名無しさん:2006/05/04(木) 12:33:40
豊富な機能、優れたマニュアル、これに優るもの無し。Delphi にはどっちもない・・・
385デフォルトの名無しさん:2006/05/04(木) 12:43:30
豊富な機能も優れたマニュアルも、入門時には確かに必要だな。
でも、Delphiには、このスレのように24時間webサポートが付いてるから問題ないけどな。

という事で、このスレの機能を破壊するのが目的なのか? 暗黒だな
386デフォルトの名無しさん:2006/05/04(木) 12:47:07
>>384
Netがあるじゃないか
387デフォルトの名無しさん:2006/05/04(木) 12:47:59
かぶった(w
388デフォルトの名無しさん:2006/05/04(木) 13:16:16
質問ある人は臆せずどうぞ。 雑談してても質問は最優先で受け付けますから
389デフォルトの名無しさん:2006/05/04(木) 13:26:24
初心者も減ったんだろ・・
390デフォルトの名無しさん:2006/05/04(木) 13:33:29
> でも、Delphiには、このスレのように24時間webサポートが付いてるから問題ないけどな。

優れたマニュアルのかわりには、2chの初心者スレじゃ無理だろ。妄想もいい加減にしろよ。
ふらっとC#すれの方が100倍ましだな
391デフォルトの名無しさん:2006/05/04(木) 13:35:48
>>390 だから、どこで悩んでるの? それをチャンと表現してよ。

さすがにどこで悩んでるのかまでは超能力者じゃないから判らんのよ。
392デフォルトの名無しさん:2006/05/04(木) 14:53:56
>>389
しかしAboutDelphiの検索数は去年が最低で今年は少し回復傾向にある
393デフォルトの名無しさん:2006/05/04(木) 15:29:10
>>353から>>393まで透明あぼーん推奨
394デフォルトの名無しさん:2006/05/04(木) 16:29:58
ファイルを現在他のプログラムが利用中かどうかを調べる方法がありましたら教えてください。
395デフォルトの名無しさん:2006/05/04(木) 16:39:01
Delphiの問題というより windows-APIの問題という所だね

リネームが可能なら使われていなうと思うが・・・
396デフォルトの名無しさん:2006/05/04(木) 16:47:42
ロックモードでファイルを開いて失敗したら使用中とか・・・
397デフォルトの名無しさん:2006/05/04(木) 16:54:59
ちょっと前にmaxintvalueを教えてもらったのですが、
どの変数が一番大きな値を保持しているのかを出す
方法って無いでしょうか?

今は値を取り出した後でforで回して検索しています。
398デフォルトの名無しさん:2006/05/04(木) 17:10:57
>>395
これでやってみます。ありがとうございました。
399デフォルトの名無しさん:2006/05/04(木) 17:52:33
文字列処理房は結局何がいいたいの?
欲しいものを素直にいってみなよ。
それともただの暇人?
400デフォルトの名無しさん:2006/05/04(木) 17:53:24
消えろ基地外
401デフォルトの名無しさん:2006/05/04(木) 18:03:19
ユニコード房=スクリプト房=文字列房=標準房=インライン房
402デフォルトの名無しさん:2006/05/04(木) 18:24:04
>>397
for で回して検索という事は配列なんだよね?
なら

function MaxValueAdr(const Data: array of Integer): Integer;
var I: Integer;
begin
Result := Low(Data);
for I := Low(Data) + 1 to High(Data) do
if Data[Result] < Data[I] then Result := I;
end;

としてインデックスを返してもらって、配列を参照したらどう?
403デフォルトの名無しさん:2006/05/04(木) 18:28:54
> しかしAboutDelphiの検索数は去年が最低で今年は少し回復傾向にある

ミラーが閉鎖したから、一方に合計されただけ。ここ数年は単調減少。
404デフォルトの名無しさん:2006/05/04(木) 21:40:45
TShellListViewとTShellComboBoxを使ってるんですが
コードの中で新しいパスを指定する方法が分かりません。

一応、TShellComboBoxのPathにパスを指定すると
TShellComboBoxは新しいパスに切り替わるんですが
TShellListViewが連動してくれません。(もちろん、マウスで
操作すれば無問題です)

このような場合、どうすればいいのでしょうか?
よろしくお願いします。
405デフォルトの名無しさん:2006/05/04(木) 22:43:07
外部のDLLからもらうイベントのデバッグ時の不自然な挙動について教えてください。
DLLはネット通信をしているもので、通信が成功したらデータを流してもらうものです。

約1秒ごとに発生するイベントで呼ばれるプロセスにブレークポイントを設定して
デバッグをしているのですが、
hogehoge1;
hogehoge2;
hogehoge3;
とあり、1から2へF8キーで移動して次に3に行かないといけないのになぜかhogehoge1に行ってしまいます。
毎回同じように1へ行くわけではなく行ったり行かなかったりします。

これって新しいイベントが発生したからそれを処理してるってことでしょうか?

それともこんなことはありえませんか?
406デフォルトの名無しさん:2006/05/04(木) 23:31:36
>>404
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellComboBox1.Path:='C:\';
ShellListView1.Root:=ShellComboBox1.Path;
end;
みたいな事がやりたいわけ?

>>405
スレッドIDは同じ? 違うならマルチスレッドで処理してるんじゃないの?
407デフォルトの名無しさん:2006/05/04(木) 23:37:20
ShellListViewのShellComboBoxを設定してるなら(相互参照だから、逆でも同じ)

 ShellComboBox1.Path:='C:\';
 ShellListView1.Root:=ShellComboBox1.Path;

と両方に設定しなくても
ShellListView1.Rootに代入すれば ShellComboBox1.Pathは自動設定される。
408デフォルトの名無しさん:2006/05/04(木) 23:38:51
>>406
はい。DLLは別のプログラムですが、マルチスレッドも使っています。
409デフォルトの名無しさん:2006/05/04(木) 23:43:06
Label1からLabel10まで値を順々に代入していきたいんだけど、
for i:=1 to 10 do
begin
Label(i).Caption:=hoge[i];
end;
じゃエラーになります。
これはどうすれば出来ますか?
410デフォルトの名無しさん:2006/05/04(木) 23:52:19
>>409
ポトペタで貼り付けたコンポーネントは、フォームが所有している
だから、フォームのメソッドで

   (FindComponent( 'Label'+IntToStr(i) ) as TLabel ) .Caption:=hoge[i];

とやればいい。 
 これを何度も繰り返すなら、あらかじめ配列に代入しておくといい。
 コンポーネントを代入してもコピーではなく参照だから

411デフォルトの名無しさん:2006/05/05(金) 00:16:52
>>410
ありがとうございます。Labelではきちんと動作しました。
同じことをStringlsitでやろうとしたらエラーになるのですがこちらの場合はどうすれば出来ますか?
412デフォルトの名無しさん:2006/05/05(金) 00:30:34
その質問にはエスパーでもない限り答えられないな
もっと詳しく
413デフォルトの名無しさん:2006/05/05(金) 00:35:54
>>412
tmplist0,tmplist1,tmplist2とあるのですが、
これに
for i:=0 to 2 do
begin
tmplist(i).insert(0,hoge);
end;
みたいなのをやりたいのですが、findcomponentではTComponentと互換性が無いとエラーになってしまいます。
tmplist+inttostr(i).insertでも無理でした。
414デフォルトの名無しさん:2006/05/05(金) 00:49:50
そりゃそうだろう。

var
  templist: array[0..2] of TStringList;

みたいにするのが一番分かりやすいかな。

for i := 0 to 2 do
  tmplist[i] := TStringlist.Create;

みたくすれば良し。
使うときは

for i := 0 to 2 do
  tmplist[i].Insert(0, hoge);


使い終わったらちゃんと解放しようね。
415デフォルトの名無しさん:2006/05/05(金) 00:52:25
Stringlistでも配列が使えるなんて考えもしませんでした。
ありがとうございました。
416デフォルトの名無しさん:2006/05/05(金) 07:06:56
>>408という事は>>405でブレークした時のスレッドIDを確認してみてはどう?
417デフォルトの名無しさん:2006/05/05(金) 08:41:59
>>410 回数繰り返すなら予め配列に代入する他に

for i:=1 to 10 do
FindComponent( 'Label'+IntToStr(i) ) . Tag := i;
と Tagに初期化しておいて (プロパティで設定しておく方法も)


var i:Integer;
begin
for i:=0 to ControlCount-1 do
if (Controls[i] is TLabel ) then
if Controls[i].Tag>0 then TLabel(Controls[i]).Caption := hoge[ Controls[i].tag ];
end;

という手もある
418デフォルトの名無しさん:2006/05/05(金) 10:42:09
メインスレッドでStringとTListをグローバル変数として宣言しました。
これを別スレッドで読み書きすることは出来ないのでしょうか。

もし無理なのでしたら、他に出来る方法がありましたら教えてください。
419デフォルトの名無しさん:2006/05/05(金) 10:49:46
メインスレッドで宣言ってのは、ちょっと用語的にアレだな。

ローカル変数として宣言したら、当然だめ
スタック領域はスレッド毎に異なるから、将来アクセス違反になるかもしれない。

グローバル(関数の外側)で宣言してるなら、どのスレッドの持ち物って事じゃない。

ただし、両方のスレッドから読み書きするというのはダメ
片方から主に書いて、書き終わったら 別の参照変数に代入して
参照変数をセマファ代わりに使うなら大丈夫
420デフラグさん ◆WaDYW8eWxU :2006/05/05(金) 11:00:09

   [ ゚д゚]y-~~~~~ デフラグ
   /[へへ      カンリョウシマシタ
、、、、、、。。。いいいいううかかかかききししししししじすた
たただだだちちっっっっててててててででとととどななななななな
ににににににのののののののはははみめもゃょらららららららりる
るるるれわわをァアアイカククグススススススセセタダッッッッッ
ドドドドバフマメメルルレレレレレロロンーー丈両主事代代使側入
別参参反域変変変外大夫宣宣宣将当持数数数数方方書書書来毎然照
照片物用異的終言言言語読違関領()
421デフォルトの名無しさん:2006/05/05(金) 11:18:42
>>419
グローバル変数の場所に書いてるのですが、中身が得られないんですよ。
implementationの前です。

メインスレッド側では書き込み専用として使い、もう一つのスレッドは読み出し専用として使うつもりです。
422デフォルトの名無しさん:2006/05/05(金) 11:35:36
それでも同期処理はしないとダメだよ。
423デフォルトの名無しさん:2006/05/05(金) 11:47:21
>>422
シンクロナイズ部でグローバル変数の読み書きをしないと動作しないと言う意味でしょうか?
424デフォルトの名無しさん:2006/05/05(金) 11:57:06
文字列のように複数のリソースを使う場合、
片方が書いてる途中に片方が読むとマズイ事になる
だからリソース一つだけの何かを使って排他処理をする必要がある

そのあたり判らないならクリティカル セクションを使うといい。

それも面倒というか待機させたくないなら、

文字列を簡単に渡したいなら
文字列配列を用意するといい
var buf: array [0..100] of string;
var RdAdr:Integer=0;
var WtAdr:Integer=0;

書き込むスレッドでは buf[WtAdr]:=文字列;
inc(WtAdr); if WtAdr>High(buf) then WtAdr:=0; とし

読み込むスレッドでは
if WtAdr<>RdAdr then begin
 //
  buf[RdAdr] を文字列として使い
 //
inc(RdAdr); if RdAdr>High(buf) then RdAdr:=0; 
end;
425デフォルトの名無しさん:2006/05/05(金) 12:29:28
>>424
まず、Form1.Create部でTLIST.Createしています。
TLISTの解放はFORM1.DESTORYでやっています。
次にメインスレッドでTLISTにデータを書き込み、別スレッドで
showmessage(inttostr(hogelist.count));
とやると、Canvasに描画できません、とのエラーになってしまいます。
Showmessageでこんなエラーが出る意味が分からないものでドツボにはまってます。

424を参考に全面的にソースを見直してみます。
426デフォルトの名無しさん:2006/05/05(金) 12:35:55
>>406,407
レス遅くなり、申し訳ありません。

そうですか、ShellListView1.Rootに
入力すればいいんですか。

ありがとうございました。
427デフォルトの名無しさん:2006/05/05(金) 12:40:54
>>416
>>>408という事は>>405でブレークした時のスレッドIDを確認してみてはどう?
ブレークしたときのスレッドIDはどこで確認できますか?

またこのような症状をデバッグ中に一時的にでも無くす方法って無いでしょうか?
428デフォルトの名無しさん:2006/05/05(金) 12:44:05
>>425
それの問題は、別スレッドでShowMessage してる事かもよ
ShowMessageは内部でVCLコンポーネントを作成するから
MessageBoxに換えてみたらどう?
429デフォルトの名無しさん:2006/05/05(金) 12:45:20
>>427 CPU窓で確認するか 表示 -> デバッグ -> スレッド で
430デフォルトの名無しさん:2006/05/05(金) 13:41:09
>>424
やってみたのですが、アドレス00000000への読み込み違反が発生しました。ってのが出るようになり
結局駄目でした。
bufの数値を上げてもエラーになるまでの時間が若干増えるだけでした。
クリティカルセクションでやってみます。

>>428
出来ました。ありがとうございました。
431デフォルトの名無しさん:2006/05/05(金) 14:31:53
>>430

bufの数値が配列サイズの事なら、書き込み側が非常に頻繁に書き込んでいて
読み込み側が滅多に読まない状態なのだと思える。

クリティカルセクションでロックすると、
書き込み側がロックされてしまうよ。

だから、逆にバッファを小さくして、
書き込み側で、

if not WtAdr<>RdAdr then begin //と読み込み側をロックする
  buf[WtAdr]:=を文字列 と書き換える
 if WtAdr>High(buf) then WtAdr:=0;
end;
とやって、読み込み側が読んでいないなら書き換え無いのがいいんじゃないの?
432デフォルトの名無しさん:2006/05/05(金) 15:10:20
時間を5分単位で切り捨てる方法って無いですか?
15時9分59秒を15時5分に切り捨てたいのですが、いい方法が見つからないので。
433デフォルトの名無しさん:2006/05/05(金) 15:20:18
Encode/DecodeTime
434デフォルトの名無しさん:2006/05/05(金) 15:26:07
>>432
TDateTimeなら 実体は24時間を 0〜1で表現したものだから
24*12 倍して切り捨てればいい
435デフォルトの名無しさん:2006/05/05(金) 16:48:34
>>434
これもらいます。ありがとうございました。
436デフォルトの名無しさん:2006/05/06(土) 03:06:13
常に全画面表示させているフォームをアクティブで無い時に透過させたいんですが
何か良い方法ないですか?
437デフォルトの名無しさん:2006/05/06(土) 03:09:19
ひどい仕様だな・・・
438436:2006/05/06(土) 03:30:59
http://internet.watch.impress.co.jp/cda/parts/image_for_link/23578-11640-2-1.html
こんな感じで注文入力する時以外は透過してる&タスク常駐型にしたいのですが
どなたか教えてください
439デフォルトの名無しさん:2006/05/06(土) 07:33:01
>>436
WM_ACTIVATE

それにしても、ひどい仕様だ
440デフォルトの名無しさん:2006/05/06(土) 07:50:42
それにしても、ひどいレスだ

TForm.OnActivateで
begin
 AlphaBlend := False;
end;

TForm.OnDeactivateで
begin
 AlphaBlend := True;
 AlphaBlendValue := 100; // 0..255
end
441デフォルトの名無しさん:2006/05/06(土) 09:43:03
質問です。

Timer で、10秒おきにある処理を実行するように設定して、
その処理が15秒かかるとき、
前の処理と次の処理が同時に行われてしまう様ですが、
前の処理がまだ終わってない場合は、次の処理を待つなりスキップさせて、
重複しないようにするには、どうしたら良いのでしょうか?
442デフォルトの名無しさん:2006/05/06(土) 09:48:30
大体10秒間隔で動けばいいって程度ならOnTimerイベントハンドラで
begin
 try
  処理
 finally
  Timer1.Enabled := False;
  Timer1.Enabled := True; // この時点から10秒後にタイマイベント発生
 end;
end;
443デフォルトの名無しさん:2006/05/06(土) 10:04:10
他に時計を見て、10秒以上経過してたら処理しないとか
時計は now を引き算して 10/(24*3600) が10秒だから
444デフォルトの名無しさん:2006/05/06(土) 10:56:25
>>440
すべてのOSのバージョンで有効な手段じゃないけどね
445441:2006/05/06(土) 11:03:07
>>442-443
あっ、そうか (^^;
ありがとうございます、参考になりました。
446436:2006/05/06(土) 11:37:08
みなさんレスありがとう!特に440さんありがとう!
やってみます!
447デフォルトの名無しさん:2006/05/06(土) 12:19:08
Delphi7 Proで文字列をUTF8に変換するにはどうすればいいのでしょうか?

ぐぐったらskUnicode.pasというのがあるみたいなのですが、見つからないでした。
448436:2006/05/06(土) 12:40:53
すいません。またまた失礼します
procedure TForm1.FormActivate(Sender: TObject);
begin
AlphaBlend:=False;
end;

procedure TForm1.FormDeactivate(Sender: TObject);
begin
AlphaBlend:=True;
AlphaBlendValue:=100;
end;

のような感じで記述してみたんですが何も起きません。
記述の仕方が間違っているのでしょうか?
449デフォルトの名無しさん:2006/05/06(土) 12:57:20
>>447 ヘルプで UTF8まで打てば、そっから調べられると思うよ

>>448
定義部がprivateになってない?
なってるなら、一度消して
フォームのイベントから書くとといいよ

そうでないなら、やりたい事はもしかして TApplicationのイベントの方でやりたいのかな?
450デフォルトの名無しさん:2006/05/06(土) 13:01:13
Form1て大本のフォームじゃないのか。
透明化したい小さい方のフォームのイベントハンドラに書くんだぞ。
451436:2006/05/06(土) 13:03:31
>>449さん
レスありがとうございます!
定義部はprivateにはなってないですと思います。今こんな感じです

type
procedure FormActivate(Sender: TObject);
procedure FormDeactivate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;

var
Form1: TForm1;

すいませんTApplicationというものについては勉強不足でわかりかねます(;;)
452436:2006/05/06(土) 13:06:25
>>450さん
大本の方のフォームをアクティブに応じて透過させたいんですがそれは無理ですか?
>>438のような感じのソフトを作りたいんですがいかんせんうまくいかなくて悩んでいます
453436:2006/05/06(土) 13:12:35
あ!ちなみにツールはdelphi6です!
454デフォルトの名無しさん:2006/05/06(土) 13:22:32
Borlandが死滅したそうですがこれからどうすればいいですか?
VBが無償らしいのでそちらに乗り換えた方がいいですか?
455デフォルトの名無しさん:2006/05/06(土) 13:31:50
>>454
好きにしてください。そしてVBスレに移行してください。
456デフォルトの名無しさん:2006/05/06(土) 13:36:54
>>447

ヒント:AnsiToUtf8
457デフォルトの名無しさん:2006/05/06(土) 13:39:08
全画面なのにアクティブじゃないってどんなソフトだ?
458デフォルトの名無しさん:2006/05/06(土) 13:39:43
早々にJavaに乗り換えた俺は勝ち組
459デフォルトの名無しさん:2006/05/06(土) 13:39:58
ブビ厨の断末魔イタス
460デフォルトの名無しさん:2006/05/06(土) 13:50:18
osがXP/2000以外だったらぬっころ
461デフォルトの名無しさん:2006/05/06(土) 14:21:15
MeってまだM$サポート範囲内だっけ?
まぁ98以前は考慮に入れなくても、ぬっころされる筋合いはないな。
これが、大儲けできるM$のやり方。
462デフォルトの名無しさん:2006/05/06(土) 14:29:11
>>452
 やっぱり、ApplicationのActiveに反応させたんだね。

だから TApplicationの方のOnActivate OnDeactivateにすればいい。

今のコードのまま

Aprocedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnActivate :=FormActivate;
Application.OnDeactivate:=FormDeactivate;
end;

と入れてみて、それが希望のようなら、
FormActivate/FormDeactivateeを フォームのイベントから外せばいい。
463436:2006/05/06(土) 14:37:07
キタ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─ !!
>>462さんありがとう!神です!出来ました!
ほんとに感謝!!
464デフォルトの名無しさん:2006/05/06(土) 14:49:47
特定のサイトまでの通信時間を測定する方法は無いでしょうか。
一日のうちで通信速度のばらつきが多く、酷いときにはGoogleは開けるけどYahooは開けないほどなので、
NTTかプロバイダーのNiftyにクレームを入れようと思っています。

一度NTTの調査は入ったのですが考えられない・・・の一言だったので証拠を揃えたいと思いまして。

Del7Pro,非ny厨です。
465デフォルトの名無しさん:2006/05/06(土) 14:54:18
>>464 無理に作らなくても コマンドプロンプトから

ping google.com

と打てばいいだけでは? ファイルにリダイレクトさせるバッチ作って 結果をメールで送ればいいだろ
466デフォルトの名無しさん:2006/05/06(土) 15:11:35
tracert google.com も。
467デフォルトの名無しさん:2006/05/06(土) 15:18:26
そんなものに証拠能力は無いけどな
468デフォルトの名無しさん:2006/05/06(土) 15:41:33
プロバイダ変えればいい
469デフォルトの名無しさん:2006/05/06(土) 17:39:16
>>465
pingで結果をテキストとかで受け取ることはできますか?
結果を受け取る方法が分からないので画面に張り付いていちいちコピペするしかないと
思ってたのですが。。。
470デフォルトの名無しさん:2006/05/06(土) 17:42:01
IdIcmpClientでも使えばいいと思うよ
471デフォルトの名無しさん:2006/05/06(土) 17:43:50
>>469
>ファイルにリダイレクトさせるバッチ作って
472デフォルトの名無しさん:2006/05/06(土) 17:46:24
>>469
Indy9 のデモにPingGui って奴がある。
473デフォルトの名無しさん:2006/05/06(土) 17:53:33
Javaに浮気してみて改めてDelphiの良さを理解した
ポインタ弄れるDelphiサイコーおまけでC/C++もイイ
474デフォルトの名無しさん:2006/05/06(土) 18:00:30
本当はVBがやりたいくせに(ワラ
475デフォルトの名無しさん:2006/05/06(土) 18:36:29
>>471
ぐぐってやっと分かったばい。
ありがとうばい。
476デフォルトの名無しさん:2006/05/06(土) 20:03:00
JAVAは遅いから江戸っ子の俺はイライラするんだよ
477デフォルトの名無しさん:2006/05/06(土) 21:30:26
BDS は遅いから江戸っ子の俺はイライラするんだよな。Del3 で十分。
478デフォルトの名無しさん:2006/05/06(土) 21:38:01
delphiではfor文のカウンタに
i+=3とか+=1以外を指定きないんですか?
479デフォルトの名無しさん:2006/05/06(土) 21:47:37
できません
480デフォルトの名無しさん:2006/05/06(土) 22:33:34
i := 0
whlie i < 15 do
begin

inc(i , 3);
end;
しかなかったっけ。
481デフォルトの名無しさん:2006/05/06(土) 22:59:18
うわ、だせーw
それぐらいVBでもできるのに
482デフォルトの名無しさん:2006/05/06(土) 23:00:14
for i := 1 to do
begin
j :=i * 3
hogehoge jで

end;
483デフォルトの名無しさん:2006/05/06(土) 23:03:19
>>481
出来ないからいいんだよ。

1刻みしか出来ないから、そういうコードを書くからね。
484デフォルトの名無しさん:2006/05/06(土) 23:07:13
HELPメニューにwindowsSDKの奴があるのって標準だったっけ?
なんかで追加した記憶もあるんだがHELPフォルダにも入ってないし
どっからリンクしてるかわからない
リンクのさせ方も忘れたしどうするんだったっけ?
485デフォルトの名無しさん:2006/05/06(土) 23:12:12
>>484
バージョンによって カスタマイズとかでOpenHelpが起動するんだろうけど
あんまり色々入れると鬱陶しいよ
SDKはスタートメニューにでも置いておいた方がましだな
486デフォルトの名無しさん:2006/05/06(土) 23:25:38
ああ、スタートメニューに突っ込むと反映されるんだったか
ありがとう
487デフォルトの名無しさん:2006/05/06(土) 23:37:18
>>483
そーいやループ変数を別の事に使おうとしても怒られるよな。
488デフォルトの名無しさん:2006/05/07(日) 03:23:50
他の言語でもループ出たらループ変数は保証されないだろ?
489デフォルトの名無しさん:2006/05/07(日) 09:47:29
いや、C言語はブレーク時のカウンタは後で使えば保持してくれると思うが
490デフォルトの名無しさん:2006/05/07(日) 10:10:52
forのスコープ内で変更できないってのも特徴じゃね?
491490:2006/05/07(日) 10:11:47
すまん。
俺、寝ぼけてるわ
492デフォルトの名無しさん:2006/05/07(日) 12:11:10
ふつーに、できる言語とできない言語があるだろ。
できない言語は、その代わりに、境界値ぎりぎりまでループできたり、コンテナからループ範囲を得たり、ループに閉じたスコープでループ変数を提供したり、いろいろ特典もある。
Pascalの場合は最初のしかありがたみ無いけど、#0から#$ffまでのループをChar型でできたりするのは案外大きい。(C式だと無限ループになる)
493デフォルトの名無しさん:2006/05/07(日) 13:28:49
DelphiでUnixtimeからJSTは計算できるのですが、ロンドンタイムやNYタイムの夏時間冬時間を
簡単に計算する方法って何か無いでしょうか?
自分で換算関数作っていちいち計算させないと駄目でしょうか?
494デフォルトの名無しさん:2006/05/07(日) 13:31:31
ダメですね。
495デフォルトの名無しさん:2006/05/07(日) 14:34:48
意図的にエラー(例外)を発生させる手続きはないですかね?
496デフォルトの名無しさん:2006/05/07(日) 14:36:46
abort が例外を発生するよ

でも なんで raise を発行しないの?
497デフォルトの名無しさん:2006/05/07(日) 15:41:21
コンパイル中・・

リンク中・・

っていうのを待ってると江戸ッ子の俺はイライラするんだよ。
やっぱコンパイル爆速のDelphiだよなぁ

おっと、相撲がはじまるぜ?
498デフォルトの名無しさん:2006/05/07(日) 16:13:45
>>495
EMyErrorを投げるprivateメソッドはよく作るな。
private
procedure Error(msg: String = ''); overload;
procedure Error(fmt: String; args: array of const); overload;

procedure TMyClass.Error(msg: String);
begin
 raise EMyError.Create(msg);
end;
procedure TMyError(fmt: String; args: array of const);
begin
 Error(Format(fmt, args));
end;
499vbから:2006/05/07(日) 18:40:08
今度Delphiを使って会社の受注ソフトを作ろうと思い、professionalの購入を考えています。
価格が安い2005を買おうと思ってるのですが、2006との大きな違いって
ありますか?
そんなに高度なことはしません。
pc何台かでネットワークで使えたらいいです。

500デフォルトの名無しさん:2006/05/07(日) 18:44:05
直接borlandに聞いたほうが速いし正確
501デフォルトの名無しさん:2006/05/07(日) 19:23:48
契約関係は、さすがに個人的問題だからなあ
502デフォルトの名無しさん:2006/05/07(日) 19:54:14
Delphi7以降はシラネ
503デフォルトの名無しさん:2006/05/07(日) 19:54:52
2005,2006使ったことない奴らは黙っとけ
504デフォルトの名無しさん:2006/05/07(日) 20:25:32
真面目な質問をくだらないスレでするのもどうかと思いますよ
505デフォルトの名無しさん:2006/05/07(日) 20:32:48
……2005…か…
506デフォルトの名無しさん:2006/05/07(日) 20:34:17
2007使ったことない奴らも黙っとけ
507デフォルトの名無しさん:2006/05/07(日) 22:29:43
ってか、いまどき Delphi で新規案件なんてどうかしてる
508デフォルトの名無しさん:2006/05/07(日) 22:38:08
VBで半年かかって動いてなくて、納期まで7日しかない状態でもDelphiなら
使い手によっては間に合う事があるからなあ・・・・・そんな感じの状態じゃないの?
509デフォルトの名無しさん:2006/05/07(日) 22:47:36
>499
普通に2006にしとけ。
510デフォルトの名無しさん:2006/05/08(月) 00:49:34
本当はDelphi7のほうがいいけど、もう売ってないさそうだからな……
自分も2006のほうが良いと思う
511デフォルトの名無しさん:2006/05/08(月) 00:58:28
Delで一週間で組めるスキルがあるプログラマなら、
VB使っても一週間で組めると思うのですよ。
512デフォルトの名無しさん:2006/05/08(月) 01:08:14
VBはAPIの宣言をコピーするのが面倒だよ
513デフォルトの名無しさん:2006/05/08(月) 01:40:10
>>499
2005はバグバグでクソだから、普通に2006にしとけ
514デフォルトの名無しさん:2006/05/08(月) 02:36:08
Delで一週間で組めるスキルがあるプログラマなら、初めから Del 使ってるだろ。
というわけで、>>508 のような状況はあり得ない。
515デフォルトの名無しさん:2006/05/08(月) 02:50:18
納期まで半年あったのに何やってたの?
516デフォルトの名無しさん:2006/05/08(月) 03:16:02
プレステでもやってたんだろ
517デフォルトの名無しさん:2006/05/08(月) 09:22:06
1週間のボリュームを半年って・・・おいしいなぁ(w
公共事業からみかや?
518デフォルトの名無しさん:2006/05/08(月) 10:08:07
そういうのは既にお金を前任者が食いつぶしてしまっていて、泣いてくれっていうパターン。
オイシクない事が多いよ
519デフォルトの名無しさん:2006/05/08(月) 10:11:51
スレタイも読めないのかこいつらは
520デフォルトの名無しさん:2006/05/08(月) 10:46:07
質問があったでしょ。スレタイ読めないのは >>519
521デフォルトの名無しさん:2006/05/08(月) 14:42:55
スレタイのどこにも質問スレとは書かれていない件
522デフォルトの名無しさん:2006/05/08(月) 14:48:25
スレタイ読めるからDelphiについてくだらないことを書き込んでる件
523デフォルトの名無しさん:2006/05/08(月) 15:23:05
このスレのいいところはどんなに話がそれても
コードの質問にはちゃんと答えが返ってくること
524デフォルトの名無しさん:2006/05/08(月) 15:24:49
しっかし、超初心者も減ったな
525デフォルトの名無しさん:2006/05/08(月) 15:26:03
では、次の質問者どうぞ↓
526デフォルトの名無しさん:2006/05/08(月) 15:49:21
else if 文があるならcase文なんていらねーだろ?
527デフォルトの名無しさん:2006/05/08(月) 15:51:31
PascalというかDelphiの文法は 制御文は貧弱なんだけど
それでも唯一強力なのが case なんで、それくれいは許してやって下さい
528デフォルトの名無しさん:2006/05/08(月) 15:55:12
caseは条件に順序型が使えるからかなり使い勝手いいよ
529デフォルトの名無しさん:2006/05/08(月) 15:56:52
範囲も使えるし
530デフォルトの名無しさん:2006/05/08(月) 16:00:20
順序型しか使えないところが貧弱。C# は文字列も使える
531デフォルトの名無しさん:2006/05/08(月) 16:05:08
case節で文字列リテラルを使うこと自体アレだと思うが
532デフォルトの名無しさん:2006/05/08(月) 16:14:14
文字列として分岐するなら、ストリームから 正規表現でマッチさせて
最初にマッチしたものから その文字列を取れるというのが期待だと思うけどなあ

中途半端だと、C#で書かれたコードを他のC系に移植する障壁になるだけ
533デフォルトの名無しさん:2006/05/08(月) 16:20:32
RegCase str in stream of
'[0..9]*' :
'[A..Z]*' :
....
みたいに書けたらなあ
534デフォルトの名無しさん:2006/05/08(月) 16:27:58
正規表現で文字列比較できる言語って、結局、正規表現のライブラリを持っているか
いないかの違いだと思う。言語で規定する問題じゃないと思うな。
535デフォルトの名無しさん:2006/05/08(月) 16:28:21
タイプライブラリってなんぞや?
消してしまっても問題ない?
DAOとかACCESSとかデータベース絡みのありそうだけどパーソナル版じゃ使えんのでしょ?
536デフォルトの名無しさん:2006/05/08(月) 16:35:24
OCXを使うだけなら、普通は消しても問題ない。
タイプライブラリは埋め込まれていて、それを読み出してるだけだから
欲しければまた作れるから

タイプライブラリが別に提供されていると困るけど
537デフォルトの名無しさん:2006/05/08(月) 16:43:41
Personal版でもデータベース使えるよ
直接DAOのAPIを叩けば
538デフォルトの名無しさん:2006/05/08(月) 16:47:50
ありがとう
全部消そう
d3d9.dllとか追加しても駄目だったんでいつも気になってたんだ。
でもコンポーネントとかいろいろ追加したい今日この頃
539デフォルトの名無しさん:2006/05/08(月) 16:53:32
>>537
む?ほんとですか
それ関係残しとくか
そういえば基本のwindowsAPIのタイプライブラリって見当たらないね?
まぁそれはSDKHELPから書式引っ張ってくれば済むけど・・・・
いまいちタイプライブラリやらコンポーネントやらパッケージやらの区別がよくわからない。
540デフォルトの名無しさん:2006/05/08(月) 17:03:04
もしかして、消そうとしてるのは タイプライブラリじゃなくて

xxx_TLB.pas

みたいなファイルじゃないのかな?
コンポーネントを既に作成してるなら消してもいいには違いないけど
541デフォルトの名無しさん:2006/05/08(月) 17:13:30
> いまいちタイプライブラリやらコンポーネントやらパッケージやらの区別がよくわからない。

まず、ヘルプ嫁。はなしはそれからだ。
542デフォルトの名無しさん:2006/05/08(月) 17:15:54
こういうのは、どう?
CのCASE文のように使えて、
条件(変数も)は、何でも使える(書ける)。
repeat --- until文を必ず1回のみ実行させて。

write('INPUT J:');
readln(j);
repeat {SELECT CASE}
{case} if j = 1 then begin
writeln('melon');
break;
end;
{case} if j>1 then writeln('apple');

{case} if j = 3 then begin
writeln('Peach');
break;
end;
{case default}
writeln('pink',j-100);
until true; {END SELECT}
543デフォルトの名無しさん:2006/05/08(月) 17:29:58
CreateOleObjectを使ってCOM経由でDAOオブジェクト作ればデータベース扱えるよ
Personalでデータベース使えないってのはBDE経由で接続出来ないってこと
DAOの実体はdao36.dllってファイルだからそれがあればOK

↓こんな感じ
procedure Func1;
var
 objDBEngine, objWorkspace, objDatabase, objRecord: Olevariant;
 sSQL, sTemp: String;
begin
 objDBEngine := CreateOleObject(DAO.DBEngine.36);
 try
  objWorkSpace := objDBEngine.Workspaces[0];
  objDatabase := objWorkSpace.OpenDatabase('hoge.mdb', False, False);
  sSQL := 'SELECT Name FROM Hogehoge';
  objRecord := objDatabase.OpenRecordset(sSQL);
  sTemp := VarToStr(objRecord.Fields['Name'].Value);
 finally
  objRecord := Unassinged;
  objDatabase := Unassigned;
  objWorkspace:= Unassigned;
  objDBEngine := Unassigned;
 end;
end;
544デフォルトの名無しさん:2006/05/08(月) 18:03:24
>>543
ありがとうございます、勉強します。
545デフォルトの名無しさん:2006/05/08(月) 19:21:59
Delphiのbeginにも
行頭派と文末派の宗派ってあるんですか?
546デフォルトの名無しさん:2006/05/08(月) 19:24:04
好きにすればよし。過去にくさるほど議論された。
547デフォルトの名無しさん:2006/05/08(月) 19:53:21
object Pascalで不思議なのは、objectを宣言するときに、

type
aaa=class(bbb)
...
end;

になるのだけれど、このendはどれと対になっているわけ?
548デフォルトの名無しさん:2006/05/08(月) 19:55:39
Delphiの最高のコンポーネントは、TDBNavigatorだと思うが、VBやら.net系に
このコンポーネントが実装されたら、俺はDelphiを捨てるだろうなぁ。
549デフォルトの名無しさん:2006/05/08(月) 20:11:50
1
object Pascalで不思議なのは、unitを宣言するときに、

unit aaa;
interface
...
implementation
...
end.

になるのだけれど、このendはどれと対になっているわけ?
550デフォルトの名無しさん:2006/05/08(月) 20:16:07
>>547
強いていえば class と対になってるのだと思うよ
class(bbb) の後に セミコロンでなければ end;までというふうになってるんだと思うよ
551デフォルトの名無しさん:2006/05/08(月) 20:20:30
>>550
おかしいのは、end; のインデントが、どれともかみ合わないこと。
C++のように{}が対になっていないのに、どうしてどこまでがclassの
宣言だと分かるの?

type begin
end;
なら話はよく分かるのだが...
552デフォルトの名無しさん:2006/05/08(月) 20:22:33
>>549
end.は特殊なstatementでしょ。
ここで終わりという意味。end;とは意味合いが違うと思うけれど。
553デフォルトの名無しさん:2006/05/08(月) 20:25:35
>>551
結局delphiは出来損ないということだろう。
とても洗練された言語とはいえないじゃろ
554デフォルトの名無しさん:2006/05/08(月) 20:29:21
case文は最初不自然だと思ったけどもう慣れた
555デフォルトの名無しさん:2006/05/08(月) 20:33:13
適当にend;とかend.ってつけとけば動くんじゃないの?
556デフォルトの名無しさん:2006/05/08(月) 20:44:31
dllウイザードでDLLを作ろうかと思いますが、
DLLの中でFormを表示させるにはどうしたらいいですか?
というかこんな初歩的なことを書いてる参考書とかってないですかね?
何処の本屋にいってもDelの本って本当に少なくて・・・。
ネットで検索してもそれらしい本は絶版になってたり・・・OTL
だから誰かコード書いてくれませんか

library Project2;
uses
SysUtils,
Classes;
{$R *.res}
begin
end.
557デフォルトの名無しさん:2006/05/08(月) 20:53:01
dllでフォーム?何を言っておるのだね君は
558デフォルトの名無しさん:2006/05/08(月) 21:02:32
>>556
フォームは、Createしてやれば作成出来るが
どこかでメッセージポンプを回してやらないといけない。
といってDLL側で勝手にスレッド作って独自にメッセージポンプを回していいのかどうか
559デフォルトの名無しさん:2006/05/08(月) 21:08:03
>>551 インデントを考えると aaa と対になってる事になるね

type
aaa=class;

aaaはクラスです。 という文で

aaa=class(bbb)
...
end;
aaaはbbbを継承するクラスで、メンバーは・・・を持ちます。終わり。

てな感じなんだろうな。
560デフォルトの名無しさん:2006/05/08(月) 21:21:45
ヘルプの言語ガイドの文法嫁
何と対になっているとかどうでもいい
ただどう書くかを覚えとけ
561558:2006/05/08(月) 21:28:06
とりあえず、 DLLの呼び出し側としてコンソールアプリを作って。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure ShowExec ;external 'Project2.dll' name 'ShowExec' ;
begin
ShowExec;
readln;
end.

DLLウイザードでプロジェクトをつくり、フォームを1個新規作成して
562558:2006/05/08(月) 21:29:02
library Project2;
uses
SysUtils,
Classes,
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
procedure ShowExec;
begin
{ こっちでメッセージポンプを作れば普通に動く
Application.Initialize; 
Application.CreateForm(TForm1, Form1);
Application.Run;
}
Form1:=TForm1.Create(nil);
  Form1.ShowModal; //<--- これをShowにするなら次のCloseを消してみる
Form1.Close;
end;
exports ShowExec; //<----------- これで外部から呼べるようにする
begin
end.

とやれば、フォームは表示される
563558:2006/05/08(月) 21:34:44
つまり、ダイアログ的にアプリの動作を止めて動くものはDLl側でも作れるけど
メイン側とは独立にフォームを作るなら別スレッドとして作らなければいけない。
でも、だったらDLLにするより EXEにし プロセス間通信でやりとりした方がいろんな面で楽だと思うよ
564デフォルトの名無しさん:2006/05/08(月) 21:38:50
マウスのプロパティでポインタを規定のボタンにジャンプをチェックしているのですが
Delphiで作ったプログラムのDefaultプロパティをTrueにしたボタンにポインタがジャンプしてくれません。
どうして?ジャンプするように出来ます?
565デフォルトの名無しさん:2006/05/08(月) 22:18:44
> メイン側とは独立にフォームを作るなら別スレッドとして作らなければいけない。

そんなことはないよ。呼び出し側が GUI アプリなら、Show で表示するフォームを
つくるのになんの問題もない。メッセージポンプはスレッドに一つあれば十分。
566デフォルトの名無しさん:2006/05/08(月) 22:31:53
> どうして?

フォーカスを得るのはキーボード。マウスは関係なし。
567デフォルトの名無しさん:2006/05/08(月) 22:47:44
>メイン側とは独立にフォームを作るなら別スレッドとして作らなければいけない。

(笑)
568556:2006/05/08(月) 22:49:52
>>562
懇切丁寧な回答あり画多雨ございます。
またご指導のほどおねがいします。
569564:2006/05/08(月) 23:01:23
>>566
いやでもね、うちではインテリポイント使ってるんですけど、規定のボタンに移動するって項目がある訳ですよ。
ポインタを勝手に動かすのはインテリポイントのソフトだとは思いますが
表示されたウィンドウに規定のボタンがあるかどうかインテリポイント(長いので以下インポ)がチェックし、
かつジャンプオプションがONならそこにポインタを移動するんだと思うんです。
つまりDelphiのボタンのDefaultプロパティはWindowsに対して通知すべき何かが抜けているのではないのか?と。
普通の多くのソフトはフォーム表示直後に規定のボタンにちゃんとポインタが移動するので
Delphiには何か抜けている点があり、それをコードを追加する事で直せないのか、ということです。
570デフォルトの名無しさん:2006/05/08(月) 23:24:49
571デフォルトの名無しさん:2006/05/09(火) 00:13:45
結局ポインタ移動アプリ次第。
SetWindowsHookEx()で表示を察知すると仮定すると
1. Dialogクラスに DM_GETDEFID を送って調べる
2. 'Button'クラスの BS_DEFPUSHBUTTON を調べる
3. WM_GETDLGCODE の戻り値でボタン属性を調べる
あたりが思い浮かぶ
572564:2006/05/09(火) 00:49:33
>>570
おお、まさしくそれですね。Delphiのウィンドウって普通じゃなかったんですね。
>>571
おっしゃるようなメッセージを捕まえて「デフォルトボタンがあるーよ」って返すんですかね?私には無理ですねw

という事で答えて下さった皆さん、ありがとうございました。
573デフォルトの名無しさん:2006/05/09(火) 08:42:38
>(長いので以下インポ)
使ってねーじゃんw
574デフォルトの名無しさん:2006/05/09(火) 09:23:11
delphiで、(今使ってるのは6)
リリースビルド(VS2005とかみたいに)って出来るのですか?
出来るとしたら、どこをいじれば??
575デフォルトの名無しさん:2006/05/09(火) 10:32:20
delphi6でVSみたいに簡単には出来ないよ
もしやりたいならスクリプトとかコンパイルオプションとかで切り替える。
576デフォルトの名無しさん:2006/05/09(火) 10:35:06
577デフォルトの名無しさん:2006/05/09(火) 11:06:36
>>574
デバッグビルドでリリースしても何も困らないお。
578デフォルトの名無しさん:2006/05/09(火) 12:17:24
>>575-577 さんくす

デバッグビルドでも、VSのリリースビルドと同等な処理速度だが、
さらに、何%程度の処理速度の向上とサイズのスリム化が出来るのだろうか?
579デフォルトの名無しさん:2006/05/09(火) 12:19:46
というか、VSがデバックビルドだと、2,3倍も遅くなるのは、
(遅くなるにもほどがある?)
なぜなんだろう?
580デフォルトの名無しさん:2006/05/09(火) 12:22:00
>>578
サイズならDownXとかで・・・ただしそれによる速度への弊害は解らん。
てか、サイズ気にしても意味ないと思うんだけど
581デフォルトの名無しさん:2006/05/09(火) 12:22:16
>>579
V$はデバッグビルドだとランダムな値でメモリを濁すというやっちゃいけないことをやってる。
582デフォルトの名無しさん:2006/05/09(火) 12:38:22
>>578 VC++ は
MFCxx.DLLを使わないと、
Delphiで作った実行ファイルよりもサイズでっかいよ。
583デフォルトの名無しさん:2006/05/09(火) 13:00:27
>>581 ランダムではなく
auto 0xcccccccc
heapBottom 0xfdfdfdfd
Freed 0xdddddddd
notuse0xcdcdcdcd
584デフォルトの名無しさん:2006/05/09(火) 14:43:49
>>582
そうなの?
自作Delphiアプリがやたらファイルサイズでかいので
公開するのが恥ずかしいって思ってた頃があった。
585デフォルトの名無しさん:2006/05/09(火) 14:47:30
Delphiで言うところのパッケージファイルをOSが持ってるから
VCは実行ファイルを小さくできるだけ
586デフォルトの名無しさん:2006/05/09(火) 14:50:50
そんなこと言っても、小さくなるのは事実だろ
587デフォルトの名無しさん:2006/05/09(火) 15:36:01
そんなあなたに .NET
588デフォルトの名無しさん:2006/05/09(火) 15:50:07
VCL はイベント委譲主体でMFCはクラス継承主体だから、MFCの方がどっちかいうと
要らないもの色々リンクしてしまうんだろうな。
589デフォルトの名無しさん:2006/05/09(火) 15:52:40
いや、色々リンクは許せるよ。

許せないのはMFCはクラスライブラリでありながら、
巨大なスケルトンコードを吐き出すところ。

クラスライブラリの場合、差分だけ小さく記述でよい筈だろ!
590デフォルトの名無しさん:2006/05/09(火) 16:06:11
またv.s.か
もううんざり
591デフォルトの名無しさん:2006/05/09(火) 17:15:04
Delphiもランタイム切り離せば小さくなるやん
592デフォルトの名無しさん:2006/05/09(火) 17:16:40
いや、大きさは問題ない。

それよか、Exeが起動しなかったときのウザさと逝ったら。
593デフォルトの名無しさん:2006/05/09(火) 18:26:33
その点Delphiは1ファイル完結だから安心だよな
594デフォルトの名無しさん:2006/05/09(火) 20:55:25
自称PCフリークとかのちょっと知識ある素人さんには
EXEの他にDLLが一杯同梱されているとか、
EXEサイズが小さくないと手が込んでいるソフトとみなされないようです。
ドデカイEXEが一個だけ納品だと手抜きすぎナメテンノカ?状態みたいですよ。
595デフォルトの名無しさん:2006/05/09(火) 21:37:07
そうですか。 珍しい人がいますね。 出合った事はありません。
今度Delphiを教えて上げて下さい、
596デフォルトの名無しさん:2006/05/09(火) 22:30:18
いっぱいDLLに押し込むのは簡単だわな。
597デフォルトの名無しさん:2006/05/09(火) 22:31:48
ひょっとして使わないDLLたくさん入れとくだけでもその相手は満足してくれるのかな。w
598デフォルトの名無しさん:2006/05/09(火) 22:35:09
使わないのがバレるぞ、そんなことやれば。Dependency なんとかでみればすぐ分かる。
ちゃんと使う関数やらなにやらDLLに押し込め。
599デフォルトの名無しさん:2006/05/09(火) 22:39:45
何もしない関数作って適当に呼んどけばおk
600デフォルトの名無しさん:2006/05/09(火) 22:44:26
夜分、すみません。
ちょびっとずつ、ポインタの勉強なんか始めた素人ですが、自作のクラスにTBitmapのポインタを返す関数をつけようと考えたんです。
そこでPublicのとこに

function getBMPPoint: ^TBitmap;
て宣言して Result := @FBitmap; みたいにしようとしたんですが、
[エラー]識別子が必要なところに'^'があります。
となってコンパイルできません。

Bitmapのポインタを返す関数をつくるときはどうしたらいいですか?
^TBitmapの代わりに汎用ポインタであるPointerを返すように書いてみたけどダメですた。

教えてください。夜分すいません・・
601デフォルトの名無しさん:2006/05/09(火) 22:51:48
>>600 Delphiの場合、classの代入は 実体の複製ではなく参照の複製です。

つまり、Tbitmapをそのまま返せば、ポインタで渡したのと同じなのです
602デフォルトの名無しさん:2006/05/09(火) 22:53:34
TBitmapをそのまま返せばおk
603600:2006/05/09(火) 22:57:36
ありがとうございます。
ヘルプ読んでたんですが、Classにすると自動的にポインタになるので・・
っていうようなことが書いてたので、ポインタからポインタ返すのはな・・って思ってたんです。

ありがとうございます。夜分、すみません・・
604デフォルトの名無しさん:2006/05/10(水) 01:13:32
Borlandの日本語サイトが変わってるのに今気がついた。
日本語のDelphiのサポート情報が見つからなくて焦った。
とりあえず、次のURLでSub-Categoriesのあたりをクリックすると
以前の日本語サポート情報が見つかったので貼っとく。

ttp://support.borland.com/kbcategory.jspa?categoryID=39
605604:2006/05/10(水) 01:29:51
Sub-Categoriesだけど、次のSub-Categoriesは日本語のリンク先があった。

Installation & Registration
Programming
Database

リンク先が英語ばかりのSub-Categoriesが、少なくなかったので書いておくね。
606デフォルトの名無しさん:2006/05/10(水) 01:47:44
>>604-605
乙です。
googleからの検索で読んでいたから気がつかなかったyo!
607デフォルトの名無しさん:2006/05/10(水) 01:53:22
もうdelphi7proって売ってないの?
608デフォルトの名無しさん:2006/05/10(水) 07:21:37
店に在庫があれば買えるかも!
609デフォルトの名無しさん:2006/05/10(水) 14:55:35
新しいバージョンが出たら古いの手に入れるのは困難だね。
ラオックスとかの量販店にすらないし、屋台みたいなとこで海賊版みたいの売ってる奴らのとこにもない。

ヤフオクとかで出回ってなければ、割れものでもさがすか中国人のコピーでも買うしかないのかな?
今使う予定がなくても、案外、買い置きしとくべきなのかな?
610デフォルトの名無しさん:2006/05/10(水) 15:10:05
ボーランドに直接問い合わせれば買えるよ
俺は2005が出てる時に7を買った
611デフォルトの名無しさん:2006/05/10(水) 15:22:57
kakakuで調べても売ってるとこ見つかんないの?
俺は去年の春にSEshopで叩き売られているのを買ったよ。
612デフォルトの名無しさん:2006/05/10(水) 15:23:18
>>610
まじで! 聞いてみるよ!
613デフォルトの名無しさん:2006/05/10(水) 15:25:00
そういえばDelphi8を買えば7が付いてるよ。
探せばまだまだあるはず。
614デフォルトの名無しさん:2006/05/10(水) 16:07:20
nyで普通に流れてるYO
615デフォルトの名無しさん:2006/05/10(水) 16:30:03
Delphi2005にIndy10をインスコしたんだけど、Indy9に変更するにはどうすればいいの?
インスコ時にはあとからでも変更可能って表示があったけど、糞Helpで検索しても出てこないっす。
616デフォルトの名無しさん:2006/05/10(水) 17:01:14
プロジェクトのオプションでIndy10のパッケージを削除して
Indy9のパッケージをインスコ。
ライブラリぱすを変更すればおしまい。

詳しくはReadMe 嫁。
617デフォルトの名無しさん:2006/05/10(水) 18:24:33
Dmonkeyを使って実行形式のファイルつくるにはどうしたらいいですか?
618デフォルトの名無しさん:2006/05/10(水) 18:35:57
DMonkey初期化してスクリプトソース食わせて実行するコード書いてビルドするだけ。
619デフォルトの名無しさん:2006/05/10(水) 22:01:48
>>618
どうもありがとう。
ちっとも使い方がわからない初心者なんでつが
DMSコンポーネントをフォームに貼り付けてからどうしたらいいんですか。
もうちょい教えてもらえないですか。
620デフォルトの名無しさん:2006/05/10(水) 23:01:27
>>619
DMonkeyに同梱されてるデモプロジェクトのソースは読んだ?
621デフォルトの名無しさん:2006/05/10(水) 23:13:18
ボーランドから買うときは定価じゃなかった?
622デフォルトの名無しさん:2006/05/10(水) 23:46:01
定価でも欲しい。
623デフォルトの名無しさん:2006/05/10(水) 23:55:20
Delphiで"ステップ数"はどうやってわかりますか?
コンパイル対象の行数とは違うのですか?
624デフォルトの名無しさん:2006/05/11(木) 04:28:02
DelphiのIDEみたいな移動できるツールバー作るには、
どのコンポーネント使えばいいんでしょうか。
ActionManagerを使った場合は、どうしたらいいんだろうか。
ActionToolBarだと、移動できないし・・・。
625デフォルトの名無しさん:2006/05/11(木) 04:30:26
>>619
DMS.Compile(文字列)
DMS.Run
で駄目?
626デフォルトの名無しさん:2006/05/11(木) 05:15:56
>>624
ControlBar
627デフォルトの名無しさん:2006/05/11(木) 15:34:30
Delphi7 Professional WinXP-Pro です。
時間のかかるDBアクセスやSOAP通信を途中でキャンセルさせたくて
通信部分をスレッド化したまではいいのですが
実際キャンセルするにはどうすればいいんでしょう?

[メイン]
th := 通信スレッド.create
while th.通信中 do
Application.ProcessMessages;

[通信スレッド]
procedure 通信スレッド.execute()
begin
通信中 := True;
処理結果 := SOAP通信するメソッド(); ←この途中でスレッドを強制終了したい
通信中 := False;
end;

キャンセラー用のスレッドを作って、
通信スレッドに 通信中 := Trueをセットすることで
メイン処理側を先に進めることはできるのですが
裏で動き続けてるのが気持ち悪くて。
いい案があればお願いします。
628デフォルトの名無しさん:2006/05/11(木) 15:36:18
× 通信スレッドに 通信中 := Trueをセット
○ 通信スレッドに擬似的に 通信中 := False をセット

です。すみません。
629デフォルトの名無しさん:2006/05/11(木) 15:44:54
Excuteメソッド内で止めたいならSuspend
630デフォルトの名無しさん:2006/05/11(木) 15:45:21
Delphi2005でデバッグ中にBPを設定してF8を押していると空白の行や
End;などでは止まるのに、肝心のShowMessageやhogehoge.free;の行が赤くならずに、
1〜2行上下の行が赤くなったときにその処理が行われることがあります。

たぶんコピペミスか何かだと思うのですが、どこがおかしいのかが分かる方法がありましたら教えてください。
631デフォルトの名無しさん:2006/05/11(木) 15:52:35
最適化切ってみれ
632デフォルトの名無しさん:2006/05/11(木) 16:18:58
一次元配列の
test: array[0..5]of integer = (0,0,0,0,0,0);

のように二次元配列に初期値を与えるにはどうすればいいんでしょうか?
633デフォルトの名無しさん:2006/05/11(木) 16:32:24
>>631
レスありがとうございます。
何も変化がありませんでした。
634デフォルトの名無しさん:2006/05/11(木) 16:46:10
>>632
無理
やり方あるかもしれんが俺は知らない
635デフォルトの名無しさん:2006/05/11(木) 16:50:32
>>634
起動時にforか何かでやるしかないってことですね
ありがとうございました
636デフォルトの名無しさん:2006/05/11(木) 16:58:12
>>633
じゃあdcuファイル全部消してプロジェクト再構築
637デフォルトの名無しさん:2006/05/11(木) 17:03:47
>>632
Typeにすれば出来るけどね
638デフォルトの名無しさん:2006/05/11(木) 17:13:24
hoge: array[0..1, 0..1] of Integer = ((0,0), (0,0));
639デフォルトの名無しさん:2006/05/11(木) 17:22:30
>>636
*.dcuで検索かけてすべて削除、Shift+F9で再構築しましたが駄目でした。

if hoge then
 if hoge then
 begin
  if hoge_boolean then  ここから
   begin
    hoge
   end
   else
   begin
    hoge
   end;
 end;
end
else   なぜかここへ飛ぶ
begin


;の打ちもれを徹底チェックしてるのですが、どうしても分からなくて・・・
640デフォルトの名無しさん:2006/05/11(木) 17:23:15
バカはbeginとendを省略するなよ
641デフォルトの名無しさん:2006/05/11(木) 17:31:44
>>640
あっ、ごめん。
1行目のIFと2行目のIFの間にBEGINはもちろん入れてます。
失礼。
642デフォルトの名無しさん:2006/05/11(木) 17:38:35
たしか、デバッグしたいところの処理の前にブレーク置かないといけないんじゃなかったっけ?
643デフォルトの名無しさん:2006/05/11(木) 17:54:35
オプションのソースを表示のチェックボックスをすべてチェックしたら問題の場所で
改行の文字が緑色のEみたいな文字じゃなくてEnterKeyに刻印してある矢印を
半時計方向に90度回したものに縦線が入ったマークになっています。
これを普通の改行に変えてみたいのですが、
同じ位置や上下の位置で改行しても同じマークが出てしまいます。
他の行からコピーしてきても駄目です。

これってどういう意味の記号でどうしてこんな症状が出てしまうのでしょうか。
644デフォルトの名無しさん:2006/05/11(木) 17:55:34
時々あるんだよ >>630
コメントの位置を変えたり、定義の位置を変えたり、してみたら?

例えば>>639 なら if で 番号 を返す関数内関数定義して
case で実行するようにするとか

645デフォルトの名無しさん:2006/05/11(木) 18:22:26
>>643
行の終わりに改行マーク付けるようにしたのかな?
それなら見た目に何も書いていなくても、
消し忘れや打ち間違いで空白文字が入ってるのをチェックするのに役たつけど。
646デフォルトの名無しさん:2006/05/11(木) 18:55:16
>>639 ソースダンプしてみたら? CR/LFで改行されてる?
647デフォルトの名無しさん:2006/05/11(木) 19:37:47
ServerSocketコンポーネントで待ち受けてる時、
複数から接続してきたら、どういう挙動になるんですか?
一度一台と繋がったら、そのポートに2台目が接続してきた時、
どういうことになるのかお伺いしたいのです。
648デフォルトの名無しさん:2006/05/11(木) 20:08:54
普通に繋がる。
649デフォルトの名無しさん:2006/05/11(木) 20:19:41
エディタの質問が出ていたので便乗して教えて。
Delphi7を使ってるんだけど、改行のあとの空白部分にカーソルが行かないように
する方法ってないかな?

あと、空白行の改行コードの部分で←カーソルキーを押したらエディタみたいに
上の行の最後に移動して欲しいんだけど、こんな機能って設定できないよね?
650デフォルトの名無しさん:2006/05/11(木) 20:20:37
>ALL
改行が0d 0aになってないといけないのに、0dのみになっていました。
ありがとうございました。
651デフォルトの名無しさん:2006/05/11(木) 20:22:44
>>638
Σ
652デフォルトの名無しさん:2006/05/11(木) 20:27:31
>>648
じゃあクライアントにsendtextしたら同じ内容が
2台に送られるってこと?
653デフォルトの名無しさん:2006/05/11(木) 21:30:13
>>652
接続クライアントごとに自分で管理しないと・・・
654デフォルトの名無しさん:2006/05/11(木) 21:56:09
管理って具体的にはなにをすればいいのですか?
655デフォルトの名無しさん:2006/05/11(木) 21:59:06
>>654
ttp://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/network/ServerSocket.htm
検索すればサンプルはいくらでもあると思うんだが
656デフォルトの名無しさん:2006/05/11(木) 22:27:25
つまりIndex値0が最初につないできたClient、
1がその次につないできたclientってことでおk?

あーもうよく分からない
657デフォルトの名無しさん:2006/05/11(木) 22:30:41
まだDelphiやってる奴なんているのか。
時代はPS3 Linuxでgccだろ。
658デフォルトの名無しさん:2006/05/11(木) 22:41:17
>>656
もうちょっと頭柔らかくなってから出直せ
659デフォルトの名無しさん:2006/05/11(木) 23:18:56
異なるユニットに書かれた二つのクラスで、
それぞれがお互いのインスタンスをメンバ変数として持つことは可能ですか?
C++では、
//foo.h
class bar;
class foo
{
bar m_bar;
}

// bar.h
#include "foo.h"
class bar
{
foo m_foo;
}

// foo.cpp
#include "bar.h"

とすればできたはずですが(即興で書いたので間違ってるかもしれませんが)
660デフォルトの名無しさん:2006/05/11(木) 23:20:38
できない
661デフォルトの名無しさん:2006/05/11(木) 23:28:13
循環参照になるからブリッジするユニットが必要だな。
(と書いてみたが実際どうするんだろ?片方をforward宣言?)
662デフォルトの名無しさん:2006/05/11(木) 23:34:45
>時代はPS3 Linuxでgccだろ。

え?出るって?
663デフォルトの名無しさん:2006/05/11(木) 23:37:54
こんな方法しかないかな…。
unit a; interface uses b; type foo = class fbar: bar; end; implementation ... end.
unit b; interface type bar = class end; implementation uses a; type barimpl = class(bar) ffoo: foo; end; end.
ちなみにbar.createで実はbarimplを、みたいな細工は別途可能。

どうでもいいが>>659はm_barかm_fooのどっちかをポインタにでもしないとコンパイルできないんじゃなかろうか
664デフォルトの名無しさん:2006/05/11(木) 23:39:02
数ヶ月前のインタビューでPS3のHDDにLinux標準搭載を明言してる。
E3でPS3にHDD標準搭載を発表。
くったりじゃなければLinuxプリインストールのBDプレイヤーがなんとたったの62,790円(税込み)

おまえらこれがPS3って名前じゃなければ大喜びで買ってただろw
665デフォルトの名無しさん:2006/05/11(木) 23:39:19
やっぱ同一ユニット内で宣言、実装した方が手っ取り早いかも。
666デフォルトの名無しさん:2006/05/11(木) 23:49:27
S○NYのGPか?
開発に必要なのそろえたら逆に高いだろw
667デフォルトの名無しさん:2006/05/12(金) 01:15:21
ファイルが増えても大変だし、 同一ユニットが良いよ。
頻繁に使わないなら、 TObjectで宣言してキャストして使う。
668デフォルトの名無しさん:2006/05/12(金) 01:53:04
GPって何よ。
669デフォルトの名無しさん:2006/05/12(金) 02:42:31
Great Programer
670デフォルトの名無しさん:2006/05/12(金) 03:50:14
Garbage Programmer
671デフォルトの名無しさん:2006/05/12(金) 03:52:33
>>668-670
またクソうぜえ流れになってる
672デフォルトの名無しさん:2006/05/12(金) 03:55:53
>>668-670
またクソうぜえ流れになってる
673デフォルトの名無しさん:2006/05/12(金) 03:58:58
別ファイルにするといろんな意味で管理が楽だからね
自分は$Iでインクルードして作ってる。
674デフォルトの名無しさん:2006/05/12(金) 04:06:39
>>664
キーボードを標準搭載してください><
675デフォルトの名無しさん:2006/05/12(金) 05:43:16
PS3にカイリックソでも入れるか。
676デフォルトの名無しさん:2006/05/12(金) 06:46:30
Delphi 7で作ったGUIのプログラムってVistaで動きますかね?
677デフォルトの名無しさん:2006/05/12(金) 08:25:09
ベータで試してみた限りだと6, 7, 2006はフォーム一枚のプログラムすら起動しなかったよ。
VB6.0やVB.NETは普通に動くのにこの現象はとても不思議。
Borlandが互換性向上に対する技術協力を拒んでいるのかな。
678デフォルトの名無しさん:2006/05/12(金) 08:31:50
そうそう、gccやBASIC/98やCOBOL.NETすら動かなかった。他社製品軒並み全滅。
逆にMSの開発言語だと16ビット版のVB2.0すら動く。
なんなんだろうな。
679デフォルトの名無しさん:2006/05/12(金) 08:36:19
>>632
FillChar(test,SizeOf(test),0);
680デフォルトの名無しさん:2006/05/12(金) 08:37:18
あ、寝ぼけてたw
>>679はあぼーんしといてねと
681デフォルトの名無しさん:2006/05/12(金) 08:43:51
普通に>>638が正解
682デフォルトの名無しさん:2006/05/12(金) 08:53:53
DelphiはVistaでは動かないのか・・・
VB2005やっているからVistaはそっちでやろうかな。
683デフォルトの名無しさん:2006/05/12(金) 09:19:53
>>677
VB信者必死の工作
ネイティブ捨てられたのがそんなに悔しいのかw

>>682
http://itpro.nikkeibp.co.jp/article/NEWS/20060302/231632/
684デフォルトの名無しさん:2006/05/12(金) 09:38:27
Vistaが出たら2006を投げ捨てて2007買いかえればいいということですね。
685デフォルトの名無しさん:2006/05/12(金) 09:40:43
DelアプリがXPで不安定だって書き続けてたブビ厨が板。

ウソを書き始めると歯止めが利かなくなると思うだけど。
つまり半在予備軍。
686682:2006/05/12(金) 09:45:48
>>683
読みました、ちょっと安心しました。
687デフォルトの名無しさん:2006/05/12(金) 09:56:27
Vistaはネイティブじゃなくて.netが主体になってくるから
遅かれ早かれWin32アプリは動かなくなるだろね
DelphiだろうとVCだろうがそれは変わらない

MSの口車に乗るのは悔しいけど
688デフォルトの名無しさん:2006/05/12(金) 10:00:18
つ Delphiドトネト
689デフォルトの名無しさん:2006/05/12(金) 10:02:26
誰か>>649の相手してけれ!
690デフォルトの名無しさん:2006/05/12(金) 10:11:00
>>689
なんとかExpertとかいう外部ツールをつかわないとエディタのフリーカーソルは
変更できないよ
691デフォルトの名無しさん:2006/05/12(金) 10:16:22
692デフォルトの名無しさん:2006/05/12(金) 10:16:57
693692:2006/05/12(金) 10:17:28
かぶった orz
694デフォルトの名無しさん:2006/05/12(金) 10:26:30
みんな教えてくれてありがとうだっぺ。
これで安心して裏の畑で糞にいけるっぺ。
695デフォルトの名無しさん:2006/05/12(金) 12:48:08
も、もしかして14時間も我慢してたのか?
696デフォルトの名無しさん:2006/05/12(金) 13:30:29
>>687
   ∩___∩     /
   | ノ      ヽ  /
  /  >   < |/ そんな餌パクッ
  | //// ( _●_)/ミ
 彡、     l⌒l  ノ
 / __  \ \ヽ
. (___)   \__)
. O|       /
  |  /\ \
  | /    )  )
  ∪    (  \
        \,,_)
697法の下の名無し:2006/05/12(金) 17:03:42
基本的なことを教えて欲しいんだけど
uses
hogehoge;
A
private
B
public
C
end
D
とあるけど、それぞれには何を書くの?
Bが内部用、Cが外部からも見えるってのは今まで理解してたんだが、AとDの区別がよく分からんもので。
698デフォルトの名無しさん:2006/05/12(金) 17:22:00
ヘルプ持ってないの?
699デフォルトの名無しさん:2006/05/12(金) 17:29:19
>>698
ヘルプで検索しても禿しく意味不明なのばかりヒットするもんで。
700デフォルトの名無しさん:2006/05/12(金) 17:38:32
A はpublishedだよ。IDE が自動的に永続化してくれる部分。イベントハンドラが
自動で書き込まれる。ユーザがここを使う必要はまずない。

D 単なる関数とか定数宣言やグローバル変数の定義場所。

ヘルプに詳しく書いてあるけど
701デフォルトの名無しさん:2006/05/12(金) 17:40:49
> ヘルプで検索しても

検索じゃなくて目次からの方が速い。ユニットファイルの構造とか、可視性とか
702不明なデバイスさん:2006/05/12(金) 17:45:26
PCの時間を0.01秒単位で修正する方法って無いですか?

出来るだけ正確にあわせたいのですが、Windows標準のタイムサーバーとこまめに同期しても
動機直後に0.5秒ぐらいずれてることがあるので。
703デフォルトの名無しさん:2006/05/12(金) 17:54:16
>>702
サーバをmfeed辺りに変えれば良いという話ではないのか?
704デフォルトの名無しさん:2006/05/12(金) 17:58:04
>>697>>125に見えて仕方がない。
705デフォルトの名無しさん:2006/05/12(金) 19:55:04
>>700
ありがとうございました。

>>704
このスレで書いたのは>>630が最初だよ。
706デフォルトの名無しさん:2006/05/12(金) 21:54:16
「特定のアドレスの特定のポートに発信するプログラム」
を特定するプログラムを作りたいのですが、
どのような方法があるでしょうか?
707デフォルトの名無しさん:2006/05/12(金) 22:23:23
ファイヤーウォールとかパケットモニターを参考にしる
708デフォルトの名無しさん:2006/05/13(土) 01:59:33
imageコンポーネントに表示させてる画像を左右反転させたり上下逆にしたりできるでしょうか?
709デフォルトの名無しさん:2006/05/13(土) 02:01:33
できます。
710デフォルトの名無しさん:2006/05/13(土) 02:50:12
どのようにすればいいのでしょうか?
711デフォルトの名無しさん:2006/05/13(土) 03:06:53
ScanLineプロパティを使って画像処理すればok
712デフォルトの名無しさん:2006/05/13(土) 03:27:00
無限ループ突入↓
713デフォルトの名無しさん:2006/05/13(土) 03:39:07
どのようにすればいいのでしょうか?
714デフォルトの名無しさん:2006/05/13(土) 03:41:18
procedure TForm1.Button1Click(Sender: TObject);
var
 i,j:integer;
begin
 for i:=0 to j do
 begin
  j := i+1;
  showmessage('m9(^Д^)プギャー');
 end;
end;
715デフォルトの名無しさん:2006/05/13(土) 03:41:42
716デフォルトの名無しさん:2006/05/13(土) 03:50:43
>>714
何がしたいんだ
717デフォルトの名無しさん:2006/05/13(土) 04:13:06
>>710-715
ありがとうございました
718デフォルトの名無しさん:2006/05/13(土) 10:31:32
> imageコンポーネントに表示させてる画像を左右反転させたり上下逆にしたりできるでしょうか?

ttp://junki.main.jp/delphigr/005Flip.htm
719デフォルトの名無しさん:2006/05/13(土) 11:12:23
スペースで区切られた文字列を分解したいのですが
Posでスペースを探して、自分で区切る以外に
なにか方法はありますか?
720デフォルトの名無しさん:2006/05/13(土) 11:49:20
DelimitedText で出来そうだが
721719:2006/05/13(土) 12:09:18
ありがとうございます。

> DelimitedText で出来そうだが
StringList のことでしょうか?

SList := TStringList.Create;
SList.Add(Text);
SList.Delimiter := ' ';

としても SList.Count は1のままです。
722デフォルトの名無しさん:2006/05/13(土) 12:28:48
>>719
p:=PChar(s);

while p^ <>#0 do begin
while p^ = ' ' do inc(p);
SetLength(w,length(s));
n:=1;
while p^ <> ' ' do begin
w[n]:=p^;
inc(p);
inc(n);
end;
SetLength(w,n);
wを使う
end;
723719:2006/05/13(土) 12:35:28
ありがとうございます。>>722
Pos より速そうですね。
724デフォルトの名無しさん:2006/05/13(土) 13:05:47
ふつうにDelimitedTextでできるでしょ
725722:2006/05/13(土) 13:06:50
よほど巨大な行を読み込む可能性がなければ 速度的な効果はないよ。
ただ、状態遷移型も慣れておいた方がいいとも思う。
そんなに長くないから、テンプレート的に使うクセを付ければいい

それと、 SetLength(w,n);  は間違い SetLength(w,n-1); だな
726デフォルトの名無しさん:2006/05/13(土) 13:08:12
ふつうにDelimitedTextでできるでしょ
727デフォルトの名無しさん:2006/05/13(土) 13:18:56
ちょっとしたユーティリティ関数。速くはないけど。

s := 'Foo Bar Baz';
repeat
   t := Strip(s, ' ');
   ShowMessage(t);
until s <> '';

function Strip(var s: String; Delimiter: String): String;
var
   idx: Integer;
begin
   idx := AnsiPos(Delimiter, s);
   if idx = 0 then
   begin
       Result := s;
       s := '';
   end
   else
   begin
       Result := Copy(s, 1, idx-1);
       s := Copy(s, idx+1);
   end;
end;
728デフォルトの名無しさん:2006/05/13(土) 13:48:32
ダウンロードした画像からアイコンを作って
タスクトレイにアイコンを表示しているのですが
元の画像が横長なので、つぶれてしまいます。

この画像の両端は無地なので
切り落とせば多少ましになると思うのですが、どうしたら良いでしょう。
729デフォルトの名無しさん:2006/05/13(土) 13:51:34
StringReplaceだとすげぇ楽だけど遅いの?
730デフォルトの名無しさん:2006/05/13(土) 14:00:20
Stringと便利関数使って切り貼りすると大概遅い。
遅いなと思ったらPCharとC言語系の文字列処理関数の出番。
731719:2006/05/13(土) 14:34:42
勉強になりました。
皆さん、ありがとうございました。
732デフォルトの名無しさん:2006/05/13(土) 15:52:55
>>728
無地の判定をしなくていいなら
元となる画像から適当な範囲をコピーして
アイコンを作ればよい。

with NewBmp do
begin
 Width := 24;
 Height := 24;
 for y := 0 to 23 do
  for x := 0 to 23 do
   Canvas.Pixels[x,y] := MotoBmp.Canvas.Pixels[x + 10, y + 5];
end;
733デフォルトの名無しさん:2006/05/13(土) 15:55:14
>>729
一般的に文字列処理で切り貼りするアルゴリズムは O^2 アルゴリズムで
操作するサイズが2倍になれば4倍の時間がかかる。

パソコンの性能が上がると、速度も速くなるけど処理するデータも大きくなるわけで
それに応じてデータサイズが大きくなるような場合逆に遅くなるわけ

ただし、1行のサイズが80行に限られているような場合は、別にそこまで拘る必要はない
734デフォルトの名無しさん:2006/05/13(土) 21:42:32
Delphi7proでIndyのSMTPコンポを使ってるのですが、
Indyの色々なバージョンを試してたら
>[致命的エラー] Main.pas(8): ユニット IdSMTPBase は異なるバージョン IdEMailAddress.TIdEMailAddressItem によりコンパイルされています

と言うようなエラーが出てくるようになってしまいました。

Indyのサイトにある4つのバージョンをすべて試したのですがすべて駄目でした。
これを回避する方法かIdEMailAddressとTIdEMailAddressItemのバージョンを確認する方法は
無いでしょうか。

IdEMailAddress.TIdEMailAddressItemは私自身は使ってないのですが、孫引きされてるみたいで、
他のものに入れ替える方法が無いので。
735Delフサギコ ◆A6VzDeLphI :2006/05/13(土) 21:42:58
   ∧,,∧
   ミ,,゚Д゚彡  コロコロ
   ⊂  ∪ミ  
g,,, (~,,(~,,,ミ@   

imageエディタってのがなくなったんですが
コンポーネントパレットのアイコンを編集したいので
dcrを扱えるソフトがほしいのですが

お勧めはありますか?

736デフォルトの名無しさん:2006/05/13(土) 21:57:19
>>735
お勧めかどうかは分からんが
パートナーDVDに XN Resource Editor が入ってる。
737デフォルトの名無しさん:2006/05/13(土) 21:59:50
> 1行のサイズが80行に
そいつは難しいなぁ。





ごめん。
738デフォルトの名無しさん:2006/05/13(土) 22:02:38
> これを回避する方法
Indyをアンインストール
Delphi7のbplフォルダにあるIndy系のパッケージを全部消して
ライブラリぱすにあるゴミを片付けて
Indyをインストール。

自分のプロジェクトのdcuを全部消して
再コンパイル。
739デフォルトの名無しさん:2006/05/13(土) 22:47:29
>>738
1 D7プロジェクト-オプションからIndyを削除
2 D7フォルダ内の*.Indy*.*で検索してすべて削除
3 ライブラリパスは見たけどゴミは無し。
4 Indy10.1.5を落としてきてインスコしようとしたら古いバージョンがまだ入ってると警告が出るけど無視してインスコ
5 自分のプロジェクトのDCUすべて消してプロジェクト開いてF9

これだけやったのですが、エラーでした。
740デフォルトの名無しさん:2006/05/13(土) 23:35:45
AnsiPosで部分文字列の位置を求める場合、返り値の位置が2バイト文字の
2バイト目かどうかチェックする必要はありますか?
マルチバイト文字セットをサポートするとあるので、その辺は関数内でやって
くれているのでしょうか?
741デフォルトの名無しさん:2006/05/13(土) 23:37:52
心配無用
よきに計らってくれるよ
742デフォルトの名無しさん:2006/05/13(土) 23:40:25
どうもです。
743デフォルトの名無しさん:2006/05/14(日) 00:02:13
>>739
bpl フォルダはMy Document だったかも。
744デフォルトの名無しさん:2006/05/14(日) 00:13:36
>>743
たびたびありがとうございます。
Cドライブをすべて検索しましたけど、スタートメニューとsystem32に二つファイルがあっただけでした。
745Delフサギコ ◆A6VzDeLphI :2006/05/14(日) 00:26:19
    ∧,,∧  コロコロ
    ミ゚Д゚,,彡 
  σ⊂  ∪ミ  
┳┳ (~,,(~,,,ミ@   

>>736
レス、紹介ありがとう。
XN Resource Editorを
インストールしてみました。

ランゲージのところにFont指定が文字化けしてますね。
それは仕方ないとしよう。
dcrファイルをSaveAsすることができない
なんていいかげんなつくりなんだ、、、、

で、結果は、アイコン、変わってくれないんだ....
TTrayIconってのがBDS2006で標準のクラス名とかぶっちゃって
TTrayIcoって名前に変更して使おうとしてるんだけど
Taskbar.dcrを編集してもアイコンが反映されないな。

わかんないや、、、、悲しい。

こういう時BDSが一歩、嫌いになる........
746デフォルトの名無しさん:2006/05/14(日) 00:42:14
>>745
うぅ、なんか変なアプリを紹介してしまったのかも orz

XN Resource Editor はrc ファイルを作れないらしい。
自分でNotepad を使って作らないと駄目とか。

もう少しマシな物を探してみます orz
747デフォルトの名無しさん:2006/05/14(日) 00:50:39
748デフォルトの名無しさん:2006/05/14(日) 01:05:54
>>739
> 2 D7フォルダ内の*.Indy*.*で検索してすべて削除
ここが問題なのかも。Idで始まるファイルも多いから。
Lib フォルダに古いdcuが残っているとマズイらしい。
749Delフサギコ ◆A6VzDeLphI :2006/05/14(日) 01:09:00
    ∧,,∧  キニシナイデ
    ミ,,゚Д゚彡 
  σ⊂  ∪ミ  
┳┳ (~,,(~,,,ミ@   

いや、むしろ、BDSの何かの関係かもしれないから
あんまりきにしないでください。

今、D6インストールしてみました。
イメージエディタで昔のやり方どおり設定して
新しいコンポーネント作成しても
やっぱり、なんかアイコン更新されない、、、、、

ユーザー数少ないと、
問題に出会う人も少なくなって、、、


と、、、、カキコしてから
BDS2006を再起動すればアイコンが更新されることがわかった
.......BDS........orz...........


750デフォルトの名無しさん:2006/05/14(日) 01:09:00
Indy のパッケージを自分でコンパイルして
dcu をLib フォルダにコピーすると良いらしい。
751デフォルトの名無しさん:2006/05/14(日) 01:13:32
>>749
> BDS2006を再起動すればアイコンが更新されることがわかった
> .......BDS........orz...........

それってD6でも同じじゃね?
752デフォルトの名無しさん:2006/05/14(日) 02:46:59
imageコンポーネントを複数横に並べて(左からimage1,image2・・)
いずれかがクリックされたときにどれがクリックされたか判定したいのですが、どのようにすればいいのでしょうか?
753デフォルトの名無しさん:2006/05/14(日) 03:59:31
人様のコードを眺めて勉強中ですが、ふに落ちない点があるので教えてください。
例えば

function hogehoge(strhoge: string): string;
var
P: PChar;
str: string;
begin
Result := '';        ←ここでResultって書いちゃってる。

str := str + hoge;
 ・
  ・
素人見解ですと、これって、Resultのとこで処理が終わって、このケースでは''(空白?)を返しちゃうんじゃないかって思うんですが、こういう関数をよく見ます。
関数の最初の方の行でResultに代入するワケを教えてくれませんでしょうか?
754デフォルトの名無しさん:2006/05/14(日) 04:12:11
エスパーな俺が推測するに
753はCやJavaを齧ったことがあり、
そしてResultとreturnを混同しているのであろう
755デフォルトの名無しさん:2006/05/14(日) 04:17:29
>>754
いや、学生でそんなキャリアないです!
平行してC++もやってるんですけど、returnとは違うんですか?
756デフォルトの名無しさん:2006/05/14(日) 04:25:41
難しいこと考えずに「関数の途中で無駄だったらexitって記述するだけで済むから」
って理由はダメなの?
もちろん「無駄なら空白返す」ってお約束前提で。
757デフォルトの名無しさん:2006/05/14(日) 04:29:37
>無駄なら空白返す

じゃ、「関数の処理ができなかったときに返すべき値を初めにいれておいた」ってことでいいんですか?
どのResultを返すかはコンパイラが判断してくれると?
758デフォルトの名無しさん:2006/05/14(日) 04:46:37
関数は全部走り終わって呼び出し元にResultを返す
Resultに代入するだけじゃ処理は終わらんよ
759デフォルトの名無しさん:2006/05/14(日) 06:30:17
>関数は全部走り終わって

なーる。そうだったんですか。
returnとは違うわけだ。

ありがとうございます。
760デフォルトの名無しさん:2006/05/14(日) 07:44:17
Delphi起動時にForm1とUnit1を
起動させないようにするにはどうすればいいの?
761デフォルトの名無しさん:2006/05/14(日) 07:48:08
なにをしたいの?
762デフォルトの名無しさん:2006/05/14(日) 07:56:42
プロジェクトから削除
763デフォルトの名無しさん:2006/05/14(日) 08:11:03
/np
764デフォルトの名無しさん:2006/05/14(日) 08:19:23
>>762
フォームをプロジェクトから削除したい
つ プロジェクト -> プロジェクトから削除

メインフォームを変えたい
つ プロジェクトオプション -> フォームで変更

起動時に出てくるのがうざい
つ ツール -> オプション -> どこか。デスクトップの保存をOFF
765デフォルトの名無しさん:2006/05/14(日) 09:09:03
オレはランチャーの引数に/npを設定して起動してる
766デフォルトの名無しさん:2006/05/14(日) 10:10:42
ランチャー(誤)
ショートカット(正)
767デフォルトの名無しさん:2006/05/14(日) 10:22:17
>>748>>750
1 Delphiを削除
2 Indyのソースのみ退避
3 Delphiフォルダを削除&SYSTEM32フォルダに残ってたIndyのファイルを削除
4 DelphiをIndy抜きで再インストール。LibパスにIndyソースフォルダを追加
5 Indyのソースを一つのフォルダにまとめてIndyProtocols40.bplを開いてコンパイル

[エラー] IdStreamRandomAccess.pas(23): 未定義の識別子 : 'TIdStream'

[エラー] IdStreamRandomAccess.pas(25): forward または external 宣言された 'TIdStreamRandomAccess.GetPosition' が見つかりません

[エラー] IdStreamRandomAccess.pas(26): forward または external 宣言された 'TIdStreamRandomAccess.GetSize' が見つかりません

[エラー] IdStreamRandomAccess.pas(27): forward または external 宣言された 'TIdStreamRandomAccess.SetSize' が見つかりません

[エラー] IdStreamRandomAccess.pas(28): forward または external 宣言された 'TIdStreamRandomAccess.SetPosition' が見つかりません

[エラー] IdStreamRandomAccess.pas(32): forward または external 宣言された 'TIdStreamRandomAccess.Skip' が見つかりません

[致命的エラー] IndySystem40.dpk(48): 'IdStreamRandomAccess.pas' ユニットはコンパイルできませんでした


となってしまいます。

もちろんIdStream.pasはソースフォルダにありますし、エラーの出たファイルのusesにはIdstreamがあります。
768デフォルトの名無しさん:2006/05/14(日) 10:59:15
delphi6 Personalで勉強を始めましたのですが、
デバッガについてですけどVBのローカルウインド
に相当するものはありますか?
ブレークポイントを設定して変数に
どんな値が入ってるか確認したいのですが。
769デフォルトの名無しさん:2006/05/14(日) 11:02:32
[V|D|L]
770デフォルトの名無しさん:2006/05/14(日) 11:04:36
>>768
たぶん
表示 -> デバッグ -> ローカル変数
771デフォルトの名無しさん:2006/05/14(日) 11:11:18
>>769
Lがありませんが、
カスタムインストールか何かをするとあわられるのですか?
772デフォルトの名無しさん:2006/05/14(日) 11:22:06
> IndyProtocols40.bpl
Delphi 4用なんてある?
773デフォルトの名無しさん:2006/05/14(日) 11:23:48
>>771
じゃあwatchするかマウスカーソルエディタ上の変数に合わせてインスペクトするしかない
Del6Perの機能制限は結構極悪なんだよな。
774デフォルトの名無しさん:2006/05/14(日) 11:33:49
>>773
そうですか有難うございmす。
ということはper盤はVer7とかでもやはり同じですか?
775デフォルトの名無しさん:2006/05/14(日) 13:50:22
>>772
レジストリの動的パッケージに追加されているとか。
776デフォルトの名無しさん:2006/05/14(日) 16:14:18
今、コンソールアプリケーションでプログラミングをしているんですが
var a,
b,
c:integer;
begin
{ TODO -oUser -cConsole Main : この下にコードを記述してください }
c:=a*b;
write('1000になるように2つの数字をかけてください。');
writeln('数字を入力してください');
readln(a);
writeln('aに値が代入されました');
writeln('次にその数字にかける数字を入力してください');
readln(b);
writeln('bに値が代入されました');
writeln('計算の結果',c,'の値が出ました');
case c of
1000..1000:write('正解です');
1..999 :write('数字が足りません');
1001..10000:write('数字が大きいです');
end.
実行すると、case c ofのところが表示できずにプログラムが終了します
どこが間違っているか指摘してくれませんか?
お願いします
777デフォルトの名無しさん:2006/05/14(日) 16:19:15
778デフォルトの名無しさん:2006/05/14(日) 16:37:53
>>777
writeln('計算の結果',c,'の値が出ました');
の後にreadln;を挿入したところ
case c of の前までは表示されるんですが、その後が表示せずに
終わってしまいます。
また一番最後にreadln;を追加してみたところ
[エラー] Project2.dpr(30): 'END' が必要な場所に ファイルの末尾 があります
になってしまいます。
何がおかしいかわからないです
779デフォルトの名無しさん:2006/05/14(日) 16:38:26
>>777
お礼忘れていました。
レスありがとうございます。
780デフォルトの名無しさん:2006/05/14(日) 16:52:10
>>776
コンソールアプリで練習する場合も
普通にGUIアプリとして作って
ボタンを一つおいて、ダブルクリック
その最初に AllocConsole; を入れておけば
そのコードを実行する事が出来るよ
781デフォルトの名無しさん:2006/05/14(日) 16:58:32
>>778
case c of
1000..1000:write('正解です');
1..999 :write('数字が足りません');
1001..10000:write('数字が大きいです');
end;
readln;
end.
782デフォルトの名無しさん:2006/05/14(日) 17:06:08
>>780
レスありがとうございます。
でもはじめたばかりの私には少し難しくてわかりません。
すいません。
>>781
ありがとうございます。
実行したところ、できましたが
適当な数字を入力してやってみたところ何故か
0になってしまいます。
c:=a*b; のところを+やーに変えたところ
すごい数字になってしまいます。
重ね重ねすみませんが、何がいけないのでしょうか?
783デフォルトの名無しさん:2006/05/14(日) 17:08:24
>>782
c:=a*b;
の位置を変えたところ、できました。
レスしてくださった皆さんありがとうございます。
784デフォルトの名無しさん:2006/05/14(日) 17:20:29
>>782
一番最初は Demoフォルダの EathPngあたりを開いて、コードを見ながら
速すぎる動きを遅くする改造からやるといいよ
785デフォルトの名無しさん:2006/05/14(日) 17:57:02
>>784
これはゲームか何かですか?
すごく早い動きでとてもゲームといえるレベルではないですね。
というか私自身、コンソールアプリケーションでプログラミング
始めたばかりでまったく無知なんですよね。
どこをいじっていいかというのがまったくわからない状況です。

pascalの予約語も6つぐらいしか使えないのでorz

786デフォルトの名無しさん:2006/05/14(日) 17:58:22
>>776
if DebugHook <> 0 then Readln;
787デフォルトの名無しさん:2006/05/14(日) 19:08:02
TStringListを継承した自前クラスを作ろうかとおもってるんですが

TMyStringList = class(TStringList)
   ・
   ・
public
 constructor Create;
 destructor Destroy; override;
  ・
  ・
このconstructorには「override;」をつけなくても大丈夫なんでしょうか?

788デフォルトの名無しさん:2006/05/14(日) 19:17:51
overrideする必要があるのはメソッド同様、親constructorにvirtual, overrideが付いている場合のみ。
というわけでTStringList継承クラスにつける必要はない。
もし必要あるけどつけ忘れた場合コンパイラが警告してくれるから警告チェックしておけばいい。
789デフォルトの名無しさん:2006/05/14(日) 19:38:28
>>788
ありがとうございます。そうします。
つけるのはdestructorだけでいいんですね?
790デフォルトの名無しさん:2006/05/14(日) 21:34:56
>>789
少しはヘルプ読め

下位オブジェクトのクラスで Destroy メソッドを宣言するときには必ず override 指令を追加し,
継承された Destroy メソッドをオーバーライドするメソッドの最後の文として呼び出します。
Destroy メソッドは仮想メソッドなので,継承された動作が正しく実行されるようにするにはそれをオーバーライドします。
791デフォルトの名無しさん:2006/05/14(日) 22:04:28
画像のファイル形式をbmpからwmfに
したいのですがどうすればいいでしょうか?
792デフォルトの名無しさん:2006/05/14(日) 22:27:07
拾ってきたコード
http://groups.google.co.jp/group/borland.public.delphi.objectpascal/msg/c7f9a562e0c0e5a4?hl=ja&

procedure TFM_Main.SaveWMFasBMP;
var
MyBmp : TBitmap;
MyEmf : TMetaFile;

begin

MyEmf := TMetaFile.Create;
MyBmp := TBitmap.Create;

MyEmf.LoadFromFile ('metafile.wmf');
MyBmp.Width := 640;
MyBmp.Height := 480;

// This is the line you're looking for
MyBmp.Canvas.StretchDraw (Rect (0, 0, 640, 480), MyEmf);

MyBmp.SaveToFile ('bmpfile.bmp');
MyBmp.Free;
MyEmf.Free;

end;
793デフォルトの名無しさん:2006/05/14(日) 22:32:24
逆だったか。
http://groups.google.co.jp/group/borland.public.delphi.winapi/msg/f5b40c73fb550619?hl=ja&

var
bmp: TBitmap;
wmf: TMetaFile;
wmfc: TMetaFileCanvas;
begin
bmp := TBitmap.Create;
bmp.LoadFromFile('c:\copy\kingsx_small.bmp'); // Any test image

wmf := TMetafile.Create;
wmf.MMWidth := 5000;
wmf.MMHeight := 5000;
wmf.Width := bmp.Width;
wmf.Height := bmp.Height;
wmfc := TMetaFileCanvas.Create(wmf, 0);
wmfc.StretchDraw(Rect(0, 0, wmf.Width, wmf.Height), bmp);
wmfc.Free;
bmp.Free;
wmf.SaveToFile('c:\copy\small.wmf');
wmf.Free;
end;
794デフォルトの名無しさん:2006/05/14(日) 22:51:14
>>793
変換できました。
感謝!
795デフォルトの名無しさん:2006/05/15(月) 03:38:48
BVから乗り換えた者です。少し質問させてください。

TArrayRec = record
 num: array[0..2, 0..6]of integer;
end;

みたいなレコード型があるとして、
var
FArrayRec: TArrayRec;

で、
FArraRec.Num := (
(1, 2, 3, 4, 5, 6, 7),
(1, 2, 3, 4, 5, 6, 7),
(1, 2, 3, 4, 5, 6, 7));

としても代入できません。(「.が必要な個所に)があります」というようなエラー)
ループで1個ずつなら入るはずですが、一発で代入することは無理なんでしょうか?
796デフォルトの名無しさん:2006/05/15(月) 04:36:51
無理
797795:2006/05/15(月) 04:48:58
いろいろ調べてみたんですが、無理みたいですね。
配列の宣言時に入れてしまう方法はあるみたいですが。

ありがとうございます。
798デフォルトの名無しさん:2006/05/15(月) 05:59:09
constとかで事前に定義しておけば代入出来るけど
799795:2006/05/15(月) 06:06:04
みたいっすね。ネットでconstに二次元配列を宣言してあるのを見ました。
functionの戻り値で二次元配列を返すクラスを作成しとこうと思ってたんですよ。

ちょっとやり方工夫しなければならないみたいです。
800デフォルトの名無しさん:2006/05/15(月) 07:21:16
デlpヒ6のパーソナルを使い出して気になったのだが、
for i:=1 to 10 do のiは、
デバグ時なんで10からカウントダウンしていくの?
801デフォルトの名無しさん:2006/05/15(月) 07:34:36
>>800
最適化してるからじゃないですか? iの順番に関係ないようなコードを使ってるんでしょ?
802デフォルトの名無しさん:2006/05/15(月) 09:22:34
>>799
setarray(arr: array of integer);
setarray([1,2,3]);
というのは可能だから工夫の足しになるかも
803デフォルトの名無しさん:2006/05/15(月) 14:50:50
Delphiを使ったグラフィックスを学べるサイトがあったら教えてください。
804デフォルトの名無しさん:2006/05/15(月) 14:53:59
>>803
ないよ。
805デフォルトの名無しさん:2006/05/15(月) 14:54:52
中村の里かな
初心者にはやや敷居が高いけど
806デフォルトの名無しさん:2006/05/15(月) 14:57:28
pdf版買え
807デフォルトの名無しさん:2006/05/15(月) 15:36:20
>>803
C#とDelphi の両方を学べてお得。
http://junki.main.jp/kako01.html
808デフォルトの名無しさん:2006/05/15(月) 18:05:22
>>800
iを使用していないときは、最適化により逆から数える
他のコンパイラでもこういう最適化するのははある。
809デフォルトの名無しさん:2006/05/15(月) 18:08:45
ClientSocketとServerSocketのことだけど、
非同期ソケットエラーは、try except構文で取得できないんですかね?
exceptのエラーメッセージじゃなくて、Windowsのメッセージが出てくるので
困ってます。

あと、同じprocedure内で一気にOpenとSendtextを使うと
接続はできますが送信した文字列を認識しません。
接続した後にSleepを入れてもだめなのに、
Buttonとかで後から送信すると認識します。
(でもそのprocedureからButton1.click;としてもうまくいきません)
何か回避方法はないでしょうか?
よろしくお願いします。
810デフォルトの名無しさん:2006/05/15(月) 20:19:48
イベントドリブンの考え方を正面から否定されても困るんですが
811デフォルトの名無しさん:2006/05/15(月) 20:35:55
>>807
すげぇ。ありがとう。
812デフォルトの名無しさん:2006/05/15(月) 21:12:34
>>809
通信が確立してからじゃないとだめだったと思うので
Connected以降でないと送信出来なかった気がする
813デフォルトの名無しさん:2006/05/16(火) 01:20:32
>>752お願いします
814デフォルトの名無しさん:2006/05/16(火) 01:29:51
>>752
OnClickイベントを共通にして、
Tagで判別するのはどうか?
815デフォルトの名無しさん:2006/05/16(火) 01:29:54
自作のクラスの中でMyRect: TRect;と書き、uses節にWindowsを追加し、コードのなかでMyRect:=Rect(10,10,100,100);としても
(未定義の識別子'Rect'と出て、コンパイルできません><
げんいんとしては何がかんがえられますか?
816デフォルトの名無しさん:2006/05/16(火) 01:31:12
>>815
RectはGraphicsじゃない?
817デフォルトの名無しさん:2006/05/16(火) 01:46:29
>>816
ヘルプを見たらWindowsでした。ちなみにGraphicsはすでにusesに追加してました><
どうしてコンパイル通らないのかわかりません。
818デフォルトの名無しさん:2006/05/16(火) 01:56:11
function Rect(ALeft, ATop, ARight, ABottom: Integer): TRect;はClassesで宣言されているから。
819デフォルトの名無しさん:2006/05/16(火) 01:58:21
>>818
サンクスです!(^^
Classesを追加したら通りました!
820816:2006/05/16(火) 03:11:32
Classesが勘違いスマソ
821デフォルトの名無しさん:2006/05/16(火) 04:08:08
Double 型が取り得るすべての値(±Infinity, NaN, 0.0 を含む)の範囲から乱数を得たいのですが、
どのようにしたらようでしょうか?
822デフォルトの名無しさん:2006/05/16(火) 06:59:29
>>821 64bitの乱数ビット列を作ってそれをdoubleとして読みたいという事?
823デフォルトの名無しさん:2006/05/16(火) 07:09:18
>>812
てことはOnconnectに
処理を書いていけばおk?
connected以降って何?
824デフォルトの名無しさん:2006/05/16(火) 07:18:59
デルポイ
825デフォルトの名無しさん:2006/05/16(火) 09:35:46
>>823
そんな単純じゃないと思われ・・・
あるきっかけ(ボタンを押す?)から接続、送信、切断をしたいんでしょ?
だったら、接続完了後、送信(完了後?)、切断って流れになるわけで
まぁ、きっかけが一個しかないのならconnectedに処理を書けばうまく行くかも
826デフォルトの名無しさん:2006/05/16(火) 09:39:42
>>825
すまん、ClientSocketとServerSocketだった。connected -> Onconnect?で
827デフォルトの名無しさん:2006/05/16(火) 14:53:10
( ^ω^)・・・
828デフォルトの名無しさん:2006/05/16(火) 16:47:26
>>826
ありがとうございます。やってみます
829デフォルトの名無しさん:2006/05/16(火) 17:36:02
830デフォルトの名無しさん:2006/05/16(火) 17:49:01
Case hoge of
1:begin
end;
のような条件分岐を文字列でやる方法は無いでしょうか?
hoge='abc'などです。
今はIF文で大量に分岐させてるのでソースがとても醜く、困ってます。
831デフォルトの名無しさん:2006/05/16(火) 17:54:19
hash値に変換とかアホなことやらない限りはない。

あとはRegisterHandler('foo', @HandleFoo);
とか個別に処理関数を登録とか。
832デフォルトの名無しさん:2006/05/16(火) 18:19:17
TStringList と IndexOf() メソッドをつかえば簡単にできるでしょ。
833デフォルトの名無しさん:2006/05/16(火) 22:59:31
>>814
うまくいきました、ありがとうございました
834デフォルトの名無しさん:2006/05/16(火) 23:01:33
ポインタの指すアドレスの値を16進数で表示したいのですが、
文字列への変換がわかりません。

procedure TMainForm.ABC(Sender: TObject)
Label1.Caption:=XXX(Sender);

XXXのところが変換する関数になると思うのですが、
見つけられませんでした。すみませんがお助けください。
835デフォルトの名無しさん:2006/05/16(火) 23:04:22
Label1.Caption:=IntToHex(DWORD(Sender),8);
836デフォルトの名無しさん:2006/05/16(火) 23:10:57
だいたい文字列の比較にはいろんな方法がある。
大文字小文字を区別するかしないかとかね。
837デフォルトの名無しさん:2006/05/16(火) 23:34:57
>>835
ありがとうございます。DWORDだとなぜかうまくいかなかったので
longwordとしたらうまくいきました。
838デフォルトの名無しさん:2006/05/17(水) 00:55:18
自作したAのアプリで処理がファイルコピーなどの処理が終わったときに、
Bと言う別の自作アプリに処理が終わった信号を方法って無いでしょうか?
Handleを使えばできそうなのですが良く分からないもので教えてください。
839デフォルトの名無しさん:2006/05/17(水) 00:57:30
IPC
840デフォルトの名無しさん:2006/05/17(水) 04:45:24
>>838
PostMessage
841デフォルトの名無しさん:2006/05/17(水) 05:34:41
Delphi2006でデータベースをやろうとしていますが、
お勧めの解説サイトや本はないでしょうか。
842デフォルトの名無しさん:2006/05/17(水) 06:39:24
Delphiって本ないんだよな…
843デフォルトの名無しさん:2006/05/17(水) 09:19:38
ファイル読み書きで、
BlockWriteで書くやり方と、
ファイルストリームによるやり方があるけど、
これらの使い分けがよくわかりません。
844デフォルトの名無しさん:2006/05/17(水) 09:26:41
>>843
TStream系使っとけばよい。
845デフォルトの名無しさん:2006/05/17(水) 18:06:48
GoogleがDelphiを引き取ってくれる可能性はありますか?
846デフォルトの名無しさん:2006/05/17(水) 18:14:30
すれ違い
847デフォルトの名無しさん:2006/05/17(水) 18:20:02
>>844
はいわかいりました。
でもその理由はなんでしょう。
848デフォルトの名無しさん:2006/05/17(水) 18:23:36
古ーい Pascal からの I/O と、OOP な TStream 派生クラスで、両方でできることなら
TStream で済ますのは正解


ってことだ、と思う。
849デフォルトの名無しさん:2006/05/17(水) 18:38:46
>>848
そうですか。ありごとうごせいます。
オブジェクト指向になれるためにもクラスをつかうようにします。
850デフォルトの名無しさん:2006/05/17(水) 21:37:14
Cloneするメソッドを作りたいのですが、ClassTypeからCreateしちゃって大丈夫なんでしょうか・・・。
ちょっと自信がありません。

procedure THoge.Clone: THoge;
begin
 Result := THoge(ClassType.Create);
 Result.Assign(Self);
end;
851850:2006/05/17(水) 21:45:48
実験しましたが、THogeで、Createを再定義していると駄目ですね。
852850:2006/05/17(水) 21:46:21
駄目というか正確には、再定義したCreateが呼ばれないです。
853850:2006/05/17(水) 21:47:54
いけました!

 THogeClass = class of THoge;

としておいて、

function THoge.Clone: THoge;
begin
 Result := THogeClass(ClassType).Create
end;

とすれば、再定義したCreateも呼ばれますね
854デフォルトの名無しさん:2006/05/17(水) 21:50:53
>>839
IPCって何ですか?

>>841
Delphi DB&Webプログラミング
おいらはこれを使いました。

でも内容はなんとも言いづらいから立ち読みの上ドゾー
855デフォルトの名無しさん:2006/05/17(水) 21:57:34
最近VB荒らしが来なくて寂しいね
856デフォルトの名無しさん:2006/05/17(水) 22:22:25
VB厨からも見捨てられたとか・・
857デフォルトの名無しさん:2006/05/17(水) 22:37:52
>>854
>Delphi DB&Webプログラミング
どもー。参考にさせてもらいますー
858デフォルトの名無しさん:2006/05/17(水) 23:20:47
>>850
Result := THoge.Create;
じゃなんで駄目なの?
859デフォルトの名無しさん:2006/05/17(水) 23:56:16
>>858
あ、いや、サブクラスでもCloneの再定義なしに使いたいと思いまして・・・。
そういうことも書いておくべきでした orz
860デフォルトの名無しさん:2006/05/18(木) 02:39:27
BDSのドッキングウインドウってどうやって作ってるんだろ・・・
同じウインドウにドッキングするとタブ化しますよね?
これを実現するコンポーネントないすかね?

ToolBar2000+TBXがかなりいい感じなんですが、
タブ化できないみたいです・・・

標準のTDockTabSetはなんか違うみたいですし・・・
861デフォルトの名無しさん:2006/05/18(木) 02:57:04
あと、BDSのIDEのドッキングされているウインドウって、虫ピンアイコンとかありますよね。
あれも標準だとできないですよね。
コンポーネントないんだろうか・・・
862デフォルトの名無しさん:2006/05/18(木) 07:13:36
昔から某はIDE作ってる部品は公開してないよな・・・
863デフォルトの名無しさん:2006/05/18(木) 07:35:54
TDockTabSet でしょ。
虫ピンアイコンも出るよ。
http://www.ipentec.com/delphi/delphi2005/docktabset/index.html
864デフォルトの名無しさん:2006/05/18(木) 09:26:47
>>863
あ、ほんとだ出るっぽいですね。あとは、いかにIDEに近づけるか・・・
BDNにも記事ありました。
http://bdn.borland.com/article/0,1410,33446,00.html

同じウインドウだけタブでまとめるのってどうやるのがいいんだろ・・・

>>862
そうですねー、それが残念
865デフォルトの名無しさん:2006/05/18(木) 16:40:55
ユニットテストに興味を持って、どういうものか検索してみた。
ttp://www.hexe19.net/dunit/
で、読んだ限りassertと同じ事をわざわざやってるように見えるんだが。
>つづく…。
の後に、assertでは出来ないすばらしいデバッグ技法が書かれる予定だったはず。
dunitはわけもわからず使いたいので、assertでは不十分な事例とか教えてくれ。
866デフォルトの名無しさん:2006/05/18(木) 16:48:40
ちょっと前にPostmessageを教えてもらったものですけど、これの
BOOL PostMessage( HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);

UINTの部分って数値とか文字列とか何でもいいの?
色々ぐぐってもWM_Closeとかの決まったものばかりなんだけど。

あと受け取りかたはどうすればいいのかもすみませんが、教えてください。
867デフォルトの名無しさん:2006/05/18(木) 16:55:53
>>864
記事試してみましたら、TDockTabSetって、虫ピン用のコンポーネントなんですね。
868デフォルトの名無しさん:2006/05/18(木) 16:57:16
UINTに入るのは符号なしの整数のみです。
でも、数字のままではわかりにくいので、
WM_CLOSEなどと数字に名前を付けています。
これが定数というものです。
869デフォルトの名無しさん:2006/05/18(木) 17:54:13
>>866
VCLのソースがあるならMessage.pasを参照するべき
WM_CLOSE = $0010;
と定義されているから
870デフォルトの名無しさん:2006/05/18(木) 18:12:27
で、受け取り方だけど
受け取りたい方のフォームにpublicに
procedure rcvMyMsg(var Message: TMessage);message WM_USER + 1と定義

実装部はこんな感じ
procedure TForm1.ReceiveMyMessage(var Message: TMessage);
begin
 ShowMessage('受信したのさ')
end;

送る方はFindWindowで送り先のフォームのハンドルを取得してメッセージ送信
こんな感じ
procedure TForm1.Button1Click(Sender: TObject);
var
 hndl: THandle;
begin
 hndl := FindWindow(nil, 'rcv-test');
 PostMessage(hndl, WM_USER+1, 0, 0);
end;
871デフォルトの名無しさん:2006/05/18(木) 21:12:35
.identcacheって必要なファイルなんですかね?
バージョン管理ソフトの無視リストに加えようと思ってるんですが・・・
872デフォルトの名無しさん:2006/05/18(木) 22:02:10
>>870
ありがとうございますた。
873Delフサギコ ◆A6VzDeLphI :2006/05/19(金) 00:08:59
     ∧,,∧
     ミ,,゚Д゚彡  
     ミ つ且~~
     ミ,,__ ヾ
 ⊂二二二UU二二⊃

DUnitについてはよーわからんのだが

Delphi界は世界が狭すぎてエクストリームプログラミング人口も
激少なので、情報もないので、自信もないが

ユニットテストってのはたぶん

if A = B then
ShowMessage=正しいよ
else
ShowMessage=まちがっとるよ;

の、程度の応用だと思われ。

で、その応用がエクストリームなプログラミングなので
爆発的にプログラムコードの品質が高まるという。

世にも素敵な方法論だったりする。




874デフォルトの名無しさん:2006/05/19(金) 01:15:12
Delphiで、ユニットテストしてる俺がきましたよ。
DUnitじゃないが自作のGUIのユニットテストランナー使ってるけど。

ユニットテストはあくまでテストの手法なので、
assertでできてるんならそれでも別にいいよ。
結局、内部ではTestメソッドから発生させた、例外捕まえてるだけだし。
でも、既存のDUnitとかのフレームワークにあわせた方がやりやすいってだけのことよ。

グイーンと伸びるバーとか見てハァハァできるようになったりするとしめたもの。
あとは、リファクタリングもあわせてできると生産性がアップする。
ユニットテストは慣れると、いいよー。
ちょっとの機能追加でも、バグでても一発でわかるし。

俺は、いまんところ、GUIソフトのユニットテストがやり方わからなくてこまってる。
いい方法ないかね。
875デフォルトの名無しさん:2006/05/19(金) 01:18:23
あ、あとコツだけど、わざとエラーを出させて例外が出なかったらテスト失敗!
みたいにエラー処理がうまくいっているかもユニットテストでチェックすると、
よりアプリが強固になる。
ただ、けっこう面倒なんだよね。
たいてい、本体より、テストをかいたunitの方がサイズがでかくなる傾向にある。
876デフォルトの名無しさん:2006/05/19(金) 08:28:46
> たいてい、本体より、テストをかいたunitの方がサイズがでかくなる傾向にある。

テストユニットのためのテストユニットとか、、無限連鎖しそうだな
877デフォルトの名無しさん:2006/05/19(金) 11:22:30
DelphiでVBのIIf関数や、Cの?演算子のような

if A then begin
 Hoge := 'あいうえお';
end else begin
 Hoge := 'アイウエオ'
end;

上記のコードを1行でできるようになる関数か演算子ってありませんか?
878デフォルトの名無しさん:2006/05/19(金) 11:32:21
IfThen
879デフォルトの名無しさん:2006/05/19(金) 13:12:50
>>878
こんな関数があったのか。
これで無駄にコードの行が増えなくてすみます。ありがとう!
880デフォルトの名無しさん:2006/05/19(金) 13:54:55
var
 a,b: Integer;
begin
 a := 10;
 b := 20;
 if a = b then ShowMessage('a=b') else ShowMessage('a<>b');
end;

一行で済むんだけど。
881デフォルトの名無しさん:2006/05/19(金) 13:59:38
>>879
その関数のソースを見てみると・・・
882デフォルトの名無しさん:2006/05/19(金) 14:05:57
マクロみたいなもん。便利とおもうならいいじゃないの
883デフォルトの名無しさん:2006/05/19(金) 16:17:24
注意点としては、C言語の?演算子と違って、両方とも評価されてから、IfThenに渡されることな。


IfThen(True, A(), B());

としたら、A()とB()が両方とも実行される。
副作用をともなう関数の場合、注意する必要あり。
まあ、見りゃわかるが。
884デフォルトの名無しさん:2006/05/19(金) 16:18:42
>>860
JVCLのJvDockingっがそれっぽいかも。
ドッキングしてタブ化もできるし、虫ピンもついてるみたい。
885デフォルトの名無しさん:2006/05/19(金) 16:18:46
>>881
そういうふうにソース追いかける方法を教えてください
886デフォルトの名無しさん:2006/05/19(金) 16:21:39
ソースついてるバージョンかってGrepするか定義の検索
887デフォルトの名無しさん:2006/05/19(金) 16:24:33
( д ) ゚ ゚
perじゃ駄目っすね? 
888デフォルトの名無しさん:2006/05/19(金) 16:44:03
ifthenで検索したら…
★クライアントサイド最強の Delphi に物申す★
http://pc.2ch.net/tech/kako/1001/10014/1001442200.html
889デフォルトの名無しさん:2006/05/19(金) 17:46:11
IfThen って書いて、Ctrl押しながらクリックしたらソース出るけどなあ。
890デフォルトの名無しさん:2006/05/19(金) 18:11:35
>>889
?
891デフォルトの名無しさん:2006/05/19(金) 18:42:32
>>888

はー、5年前もほとんど同じ議論の山。

186 名前: デフォルトの名無しさん 投稿日: 01/10/11 23:25

そこまでしてDelphiにこだわるのは
はっきり言って怠慢以外の何ものでもない。
C#が良いならC#に移ればよい。
今後Delphiに出来るのはC#の後追いだけ。


これはそうなったな・・・・
892デフォルトの名無しさん:2006/05/19(金) 18:47:05
Cと比べる事自体がナンセンス
893デフォルトの名無しさん:2006/05/19(金) 19:05:41
>>887

入信したいならPro版くらい買え。
いろいろできるぞ。
894デフォルトの名無しさん:2006/05/19(金) 19:17:12
>>888
そいつら余程暇なんだろうな。
自分が糞だと思ったら使わなければいいだけの話なのに。
余程鬱憤が溜まってるか暇か或いはその両方なんだろうな。
895デフォルトの名無しさん:2006/05/19(金) 19:17:56
他所でやれ
896894:2006/05/19(金) 19:18:23
勿論情報提供し合うのは良いけどね。
ただ批判するだけのクズに言ってる。
897デフォルトの名無しさん:2006/05/19(金) 19:31:33
他所でやれ
898デフォルトの名無しさん:2006/05/19(金) 20:09:21
いつのスレにレスしてんだよw
899デフォルトの名無しさん:2006/05/19(金) 20:34:34
自前のコントロールをホイール対応にしたいのですが、どうしたらよいでしょうか・・・
900デフォルトの名無しさん:2006/05/19(金) 20:40:06
DoMouseWheelDownと、DoMouseWheelUpのoverrideでいけました。サンクス。
901デフォルトの名無しさん:2006/05/19(金) 20:41:14
5年前にレスに興奮してる人がいるようだな・・・
902デフォルトの名無しさん:2006/05/19(金) 21:59:39
Delphiなんかやってる場合じゃないぞ!VBの時代が来たようだ。
http://www.atmarkit.co.jp/fdotnet/vblab/vbinterview_01/vbinterview_01_01.html
903デフォルトの名無しさん:2006/05/19(金) 22:16:02
>>901
今でも批判ばっかする奴はいるけどな
904デフォルトの名無しさん:2006/05/19(金) 22:35:09
配列が等しいかどうかチェックするのに = は使えないみたいですが、
どうしたら良いのでしょうか?
for で各要素を比較したりするのでしょうか?
905デフォルトの名無しさん:2006/05/19(金) 23:08:24
>>904
もし、配列の要素が基本的な型もしくは、packedな構造体なら、CompareMemでいけると思う。
普通の構造体なら、forでいちいち比較かな
906デフォルトの名無しさん:2006/05/19(金) 23:47:43
packedって何に使うの?
ヘルプ読むと「データを圧縮して格納」としか書いてなくて意味わからんちん
圧縮すると速度が低下するらしいけど、そのかわりに何か得るものがあるんだろうか
907デフォルトの名無しさん:2006/05/19(金) 23:54:45
XP+Delphi6を使ってます。
今、Form1とForm2を表示させて(Form2はForm1からForm2.Show;で表示)Form2のみ

private
procedure CreateParams(var Params: TCreateParams);override;

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent := Application.MainForm.Handle;
end;

にて最前面表示にする事は出来たのですが、
Form2の背後に他の最前面表示のソフト「aaa」がある場合の時に
Form1を選択しアクティブにした場合Form2がこの「aaa」の後ろに隠れてしまいます。
これを回避する術はありますでしょうか?宜しくお願いします。
908907:2006/05/20(土) 00:00:45
すみません、Form2を最前面表示にする為に以下のコードも使ってます。
procedure TForm2.FormCreate(Sender: TObject);
begin
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE);
end;
909デフォルトの名無しさん:2006/05/20(土) 00:15:49
>>906
record A:Byte; B:Integer; end;みたいな場合、普通だとAとBの間に3バイトの空きが入る。32ビットCPUでは4バイトごとに区切って扱う方が高速だから。勿論Aも4バイトの変数だと空きは入らない。
これがpackedだとどんな風にデータを並べても空きが入らない。バイナリファイルのフォーマットに従って要素を並べて一気読みとかできるし、空きのゴミデータを気にしなくていいからCompareMemで比較もできる。
910デフォルトの名無しさん:2006/05/20(土) 00:19:29
>>909
すげえ
ものすごくよくわかった
thx
911デフォルトの名無しさん:2006/05/20(土) 00:20:07
>960
たとえば15Byte x 40要素の配列を定義したとすると、
非packedな方は8バイト境界に揃えられるため、実際のメモリ消費量は16x40=640Byteになるが、
packedだと600Byteになる。
912904:2006/05/20(土) 01:00:49
>>905
ありがとうございました。

>>906-
ついでに、packed も勉強になりました。どうもです。
913Delフサギコ ◆A6VzDeLphI :2006/05/20(土) 01:51:20
           _________
   ∧,,∧∩  / 
  ミ,,゚Д゚彡 < こんばわ。
   ミつ旦.ミ   \ 
 @ミ   ミ     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ∪''∪  >>874、いいねー
ユニットテストしている漏まえがきてうれしいです。
> ユニットテストはあくまでテストの手法なので、
> assertでできてるんならそれでも別にいいよ。
そっそっそ。

いやあ、ホント楽しくなくて平行線をたどるだけの議論を
どうして繰り返すかしら、、、、、みなさん。

C#でもDelでもいいからファーストテストや
ユニットテストを学べっつーの。

そrで、漏れにDUnitの使い方を教えるために
猫でもわかるような解説ページ作ってください。>>誰か。

漏れはすでにリファクタリングできない開発
(よく人のコードを引き継ぐとあるよね〜)
は、できない体になってしもた。

> 俺は、いまんところ、GUIソフトのユニットテストがやり方わからなくてこまってる。
> いい方法ないかね。
まあ、それは永遠に近いテーマだが、library部分のテストの場合
サンプルプロジェクトを作っておくってのは大事よね。やっぱり。

>>876、無限連鎖はしないよ。
914デフォルトの名無しさん:2006/05/20(土) 08:40:47
くだすれでユニットテストがどうのって
915デフォルトの名無しさん:2006/05/20(土) 09:47:27
>>913
リファクタリングできるバージョンのDelphiだというなら、
ヘルプをDUnitで検索してみてね。
>>865よりもわかりやすい。

俺の理解した範囲では、プロジェクトグループにテストプロジェクトを追加し、
本体プロジェクトで使用するユニットをテストプロジェクトでもusesすることで、
関数に外部から値を送って戻り値をassertできるみたいな話だな。
実際はassertじゃなくて、うまくいったかどうかをGUIで表示するんだがね。
たしかに、本体にやたらassertを書かなくても良いし、
リリース版だけassert無効とかしなくて良いので、便利といえば便利かも。
916デフォルトの名無しさん:2006/05/20(土) 10:11:27
>>915
日本語でおk


なんか英語よりややこしいね
プログラム系の会話って
917デフォルトの名無しさん:2006/05/20(土) 10:32:45
でも予約語はアルファベットで書かないとよけい分からんべよ
918デフォルトの名無しさん:2006/05/20(土) 10:37:59
英語で書かれたXPの話だとさらにわからんぞ。
919デフォルトの名無しさん:2006/05/20(土) 10:39:49
つまりはその意味に沿った日本語がないっちゅうことなのでしょうか
920デフォルトの名無しさん:2006/05/20(土) 14:11:56
921デフォルトの名無しさん:2006/05/20(土) 14:16:04
ハッシュ(連想配列)を使うには、どうしたら良いのでしょうか
922デフォルトの名無しさん:2006/05/20(土) 14:22:52
コードを書く
923デフォルトの名無しさん:2006/05/20(土) 15:51:29
真面目に質問してるんですけれど……
924デフォルトの名無しさん:2006/05/20(土) 16:08:06
Delphi 連想配列 でググルと真面目に質問するより早いと思うけど・・・
925デフォルトの名無しさん:2006/05/20(土) 16:43:39
TStringListのValues使うんだっけ?
文字列以外も代入したくなって
結局俺は自作してしまった・・・。
926デフォルトの名無しさん:2006/05/20(土) 16:50:07
THashedStringList というのもあるけど、自作が一番使い易いのも確かだね
927デフォルトの名無しさん:2006/05/20(土) 18:17:56
record配列にしておけばいいやん・・・
928デフォルトの名無しさん:2006/05/20(土) 18:24:38
>>927
kwsk
929デフォルトの名無しさん:2006/05/20(土) 18:32:12
>>921
JEDIのJCLにHashMapがある
930デフォルトの名無しさん:2006/05/20(土) 19:06:20
>>929
それを先に知っていれば、自作せずにすんだのに・・・
931デフォルトの名無しさん:2006/05/20(土) 19:15:07
VB.NETにも標準であるよ
932デフォルトの名無しさん:2006/05/20(土) 19:31:33
VCL.NETで使えるね。
933デフォルトの名無しさん:2006/05/21(日) 01:02:51
>>907
所有されているウィンドウ(Form2)はHWND_TOPMOSTになることを
想定していなかったと思うけど、どうかな?

単にForm1がアクティブになった時は、 Form2 を手前に持ってくれば良いかもね。
934デフォルトの名無しさん:2006/05/21(日) 01:10:44
間違えました。
http://msdn.microsoft.com/library/ja/jpwinui/html/_win32_setwindowpos.asp?frame=true

>非最前面ウィンドウが最前面ウィンドウを所有することはありますが、

最前面同士のZ-Orderは別に管理されているのかな。
935907:2006/05/21(日) 02:29:47
>>933
レスありがとうございます。
うまく説明出来てるといいんですがもう少し詳しく書いてみると
Form1,Form2どちらも自動作成の対象に入れて
Form1からForm2の呼び出しはForm2.Show;のみ行ってます。
FormStyleプロパティはForm1,Form2どちらもfsNormal
Form2のみ>>907>>908のコードで最前面表示にしてます

>>単にForm1がアクティブになった時は、 Form2 を手前に持ってくれば良いかもね。
Form1のOnActivate 又は Form2のOnDeactivateでForm2を最前面表示にするコードを書くとForm1の操作が出来なくなってしまいます

Form2は最前面に表示したままForm1の操作は出来ない物でしょうか・・・
936デフォルトの名無しさん:2006/05/21(日) 02:48:31
>>935
外してるような気がするけど、一応書いてみる。

procedure TForm2.FormCreate(Sender: TObject);
begin
form2.ParentWindow:=form1.Handle;
end;

ってやるとform2がbsDialogだとform1の後ろへは行かない。
ただし、form1はform2の前へは行けない。
937デフォルトの名無しさん:2006/05/21(日) 03:20:41
>>936
ありがとうございます。書き忘れすみません、Form2のBorderStyleはbsNoneに設定しています。
さっそくやってみたのですが、BorderStyle(Form2)がbsNoneの場合だと
Form2がForm1の子コントロール(Form1の中のMemo1みたいな感じに)
になってしまい最前面表示も解除されてしまいました。
書いて下さってる通り、BorderStyleがbsDialogの場合だと上の様な状態にはならないのですが
Form2が他の最前面表示のソフト「aaa」より上に表示されてる状態で
Form1をアクティブ状態にすると、やはりForm2が「aaa」の後ろに隠れてしまいます。
938936:2006/05/21(日) 03:29:40
よく読み返してみたら、オレが思ってた質問と違った(汗
失敬。
939937:2006/05/21(日) 03:50:52
いえ、ParentWindow知らなかったので為になりました。
940デフォルトの名無しさん:2006/05/21(日) 05:15:54
意味不明だけど、Handle が再生成されてない?
もしそうなら、 HWND_TOPMOST も再設定する必要があるよ。
941デフォルトの名無しさん:2006/05/21(日) 05:39:48
確認しました。
Form1がアクティブになると、Form1よりaaaが手前に表示されているから、
Form2もaaaの後ろに表示されるという解釈かな。
でも、Form2がForm1に所有されていなくても変わらないよね。
942デフォルトの名無しさん:2006/05/21(日) 05:56:02
これかな。
>または最も前面ではないウィンドウの後ろに再配置されると、
>最も前面ではなくなります。このとき、 そのオーナー ウィンドウ、
>およびそのウィンドウが所有するウィンドウもすべて最も前面ではなくなります。

つまり、Form1はaaaより後ろにあるから、Form1が所有するForm2は前面で無くなる。

所有していなければ、Form1がアクティブな状態で Form2 は aaa より前に表示できます。
943デフォルトの名無しさん:2006/05/21(日) 06:04:45
うーむ上の >の説明は HWND_TOPMOST フラグがクリアされると言うかな…。

Form1がForm2を所有している場合は
Form1をアクティブにすると、Form2は必ず他のTopMostウィンドウより後ろに表示されるみたい。

Form1がForm2を所有していない場合は
Form2がアクティブな時にForm1をアクティブにすると、aaaがForm2より手前になる。
他のウィンドウがアクティブな時にForm1をアクティブにすると、Form2がaaaより手前になる。
944907:2006/05/21(日) 07:37:37
沢山のレスありがとうございます
改めて自分の無知さを実感してます。
Form2を所有してると言う部分が良く分からず、これをキーワードに検索してみると

Form2.ParentWindow := GetDesktopWindow();
Form2.Show();

上記のコードを見つけ、実際に組んでみると
>>907 のコードは削除し、>>908 のコードを OnShowの方に移動)
Form2がアクティブ、ノンアクティブに関係なくForm1をアクティブにしても
Form2が「aaa」に隠れる事無く、Form1も問題なく操作出来ました。
ParentWindow(Form2の所有権?)が、鍵だったんですね。
本当にありがとうございました。
945907:2006/05/21(日) 07:38:12
自動作成の対象:Form1, Form2

//Form1
BorderStyle = bsSizeable
FormStyle = fsNormal

procedure TForm1.Form2Show;
begin
Form2.ParentWindow := GetDesktopWindow();
Form2.Show;
end;

//Form2
BorderStyle = bsNone
FormStyle = fsNormal

procedure TForm2.FormShow(Sender: TObject);
begin
SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE);
end;
946デフォルトの名無しさん:2006/05/21(日) 19:19:40
Borland社員の人へ。
サポートページの画像が、borland.co.jpのままになってますよ。
直してください。
例えば、ここ
http://support.borland.com/entry.jspa?externalID=4360
947デフォルトの名無しさん:2006/05/21(日) 22:24:19
すれ違い
948デフォルトの名無しさん:2006/05/21(日) 23:19:48
>>945
Form1がForm2を所有したままでやるなら、これで解決するよ。
procedure TForm2.WMActivateApp(var Message: TWMActivateApp);
begin
 inherited;
 if Message.Active then
  SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);

所有云々は日本語APIヘルプの「ウィンドウの概要」に詳しい。
949デフォルトの名無しさん:2006/05/22(月) 17:21:09
TClientSocketとTServerSocketでソケット通信を行っており、ClientTypeはstNonBlockingなのにサーバーが落ちているときにソケットエラーを起こしてくれません。
SendTextの戻り値も正常(送信バイト数)で、データが浮いてしまうのですが原因としてなにが考えられますか?
950デフォルトの名無しさん:2006/05/22(月) 20:53:19
Delphi2006で、演算子オーバーロードをやりたいんですが、
ヘルプに記述が見当たりません。
やり方を解説したサイトとかってないですか?
951デフォルトの名無しさん:2006/05/22(月) 20:56:05
952デフォルトの名無しさん:2006/05/22(月) 20:59:53
Add という名前と + という演算子の関係づけがわからんな、その例見ても。
953デフォルトの名無しさん:2006/05/22(月) 21:00:40
> ヘルプに記述が見当たりません。

ひどいね
954デフォルトの名無しさん:2006/05/22(月) 21:00:50
>>951
ありがとう。みました。

C:\Program Files\Borland\BDS\4.0\Demos\DelphiWin32\VCLWin32\ComplexNumbers\
にサンプルがありました。
でも、ヘルプには、全然ないのね。
955デフォルトの名無しさん:2006/05/22(月) 21:05:27
ComplexNumbersのサンプル面白ですね。
strict privateとか、staticとか新機能使いまくり。

staticは、ヘルプによると静的クラスメソッドだそうですが、クラスメソッドとどう違うんだろ
956デフォルトの名無しさん:2006/05/22(月) 21:12:42
ヘルプに説明ないのか?
957デフォルトの名無しさん:2006/05/22(月) 21:14:30
つ 静的クラスメソッド
958デフォルトの名無しさん:2006/05/22(月) 21:20:53
TMemoの最後の部分にスクロールバーを持ってくるにはどうしたらよいのでしょうか?
959デフォルトの名無しさん:2006/05/22(月) 21:31:52
SendMessage(Memo1.handle, WM_VSCROLL, SB_BOTTOM, 0);
960デフォルトの名無しさん:2006/05/22(月) 21:32:04
Memo1.PerForm(EM_SCROLLCARET, SB_BOTTOM, 0);

でどうよ
961デフォルトの名無しさん:2006/05/22(月) 21:34:16
> クラスメソッドとどう違うんだろ
通常のクラスメソッドとは異なり,静的クラスメソッドには
Self パラメータがまったくありません。

また,インスタンスメンバーにもアクセスできません。

また,クラスメソッドとは異なり,静的クラスメソッドは,virtual として宣言できません。

クラスプロパティのアクセッサは,静的クラスとして宣言する必要がある
962デフォルトの名無しさん:2006/05/22(月) 21:37:10
>>959-960
ありがとう!
963デフォルトの名無しさん:2006/05/22(月) 21:45:19
>>960

ヘルプより

EM_SCROLLCARET
wParam = 0 ; // not used now; reserved for future use; must be zero
lParam = 0 ; // not used now; reserved for future use; must be zero

SB_BOTTOM はなんで?
964デフォルトの名無しさん:2006/05/22(月) 21:46:35
そもそも末尾にキャレットあるとはかぎらんし
965デフォルトの名無しさん:2006/05/22(月) 21:47:58
>>961
なるほどー
つまり、クラスメンバ(class var)用なのか?
966デフォルトの名無しさん:2006/05/22(月) 23:12:21
自己流でdelphiをいじっているプログラマです。
複数のアプリケーションを立ち上げている状態で、タイマーで順次特定のボタンやリストボックスを
押下する機能を作りたいと思っています。

この場合、

アプリケーションのウインドウをアクティブにする
       ↓
マウスカーソルをボタンに移動
       ↓
クリックという手順で行うのでしょうか?

ヘルプや検索でタイマーは何とか実装することが出来ましたがここで躓いています。

参考になるソース等教えてもらえないでしょうか?
967デフォルトの名無しさん:2006/05/22(月) 23:20:59
APIのSleepを使うとフォームが固まってしまいます。
フォームを固まらせずに一定時間待機するにはどうすれば良いでしょうか?
何か良いAPIはありますか?

#タイマーコンポやスレッドを使うのは最終手段としたいです。
968デフォルトの名無しさん:2006/05/22(月) 23:26:46
>>967
スレッドを使わずにかー。
指定時間まで、ループ回して、
ループ内で、
Sleep(1);
Application.ProcessMessages;
って手もあるが。
969デフォルトの名無しさん:2006/05/22(月) 23:31:44
何をどれ位待つかにもよって、最適な手段が変わる。
もっと具体的に処理を示せ。

Application.ProcessMessageという物もあるが、
これは時間のかかる処理をしている間にフォームを固まらせないための処理で、
一定時間待つという用途にはあまり向いてない(予期しない挙動する可能性が増える)
970デフォルトの名無しさん:2006/05/22(月) 23:43:51
971デフォルトの名無しさん:2006/05/22(月) 23:47:56
>>966
> ボタンやリストボックスを押下する機能を作りたいと思っています。

別にアクティブにする必要はない。

1)ウィンドウハンドルを取得
2)動作させたいメッセージを送る。

これだけ。でも 1)が一番難しい。
972デフォルトの名無しさん:2006/05/22(月) 23:54:57
>>968
なるほど!ありがとうございます。

>>969
すいません。具体的にはクライアント/サーバ アプリを作成中で、
クライアントからサーバに連続でデータを取りにいく際、接続開始を
一定時間(200ms程度)待機する際に使いたいと思っています。
973966:2006/05/23(火) 00:06:10
>>970,971

早速のお答え有難うございます。
今日は遅いので明日拝見してみますね。
974ミ,,゚Д゚ミノ ◆A6VzDeLphI :2006/05/23(火) 00:43:40
procedure SleepProcessMessages(Milliseconds: Cardinal);
var
 StartTime, NowTime: Cardinal;
begin
 StartTime := GetTickCount;
 while true do
 begin
  NowTime := GetTickCount;
  if Milliseconds <= (NowTime - StartTime) then
   Break;
  Application.ProcessMessages;
 end;
end;
ただし、連続で呼び出すと挙動がおかしくなる。

ほかにあったら俺にも教えてくれ。
975デフォルトの名無しさん:2006/05/23(火) 00:54:28
>972
それなら悪いこと言わん。スレッドの使い方覚えた方が良い。後々簡単だから。
976デフォルトの名無しさん:2006/05/23(火) 01:01:36
ネットワークで待つ場合、スレッド必須だとおも。
スレッド覚えといたほうがいいよ・・・。
977967:2006/05/23(火) 01:40:35
皆さん助言ありがとうございます。
今回はスレッドを使ってみようと思います。
978デフォルトの名無しさん:2006/05/23(火) 08:30:21
200msって固まるって感覚じゃぁないと思うけど・・・
まぁ、長くするかも知れないのなら漏れもスレッド勧める
979デフォルトの名無しさん:2006/05/23(火) 11:58:17
TLogFont.lfWeightに対応するプロパティは何でしょうか?
TCanvas、TFont、TPen一通り探しましたがそれらしいものはなかったです。
980デフォルトの名無しさん:2006/05/23(火) 12:59:57
TFont.Style の fsBold 。 細かい設定はできない。
981デフォルトの名無しさん:2006/05/23(火) 13:24:49
他のアプリを監視して応答が無くなったら強制終了させるアプリを作りたいのですが、
終了ボタンを押しても終了しないアプリを強制終了させる方法がありましたら教えてください。
postmessageのWM_Closeだけでは無理でした。
982デフォルトの名無しさん:2006/05/23(火) 13:36:20
WM_TERMINATE
983デフォルトの名無しさん:2006/05/23(火) 13:38:24
>>979
API直接呼び出せばいいじゃない。 回転も出来るし
http://www2.big.or.jp/~osamu/Delphi/Tips/edit.cgi?file=0137.txt

>>981
窓ハンドルから相手のプロセスIDをGetWindowThreadProcessIdで手にいれて
OpenProcess で プロセスIDから プロセスハンドルを手に入れれば
 TerminateProcess で終了出来るかも
984デフォルトの名無しさん:2006/05/23(火) 14:05:56
TIdHTTP.ResponseCodeに対する処理って皆さんはどの程度されていますか?
ちなみに私は下に書いてるのみです。
200:; //正常処理
403:; //Forbidden
404:; //NotFound
500:; //InternalServerError
503:; //ServiceUnavailable
985デフォルトの名無しさん:2006/05/23(火) 16:04:28
実行中アプリのフルパスからトップレベルウィンドウのハンドルを得るにはどうすればいいでしょうか?
986デフォルトの名無しさん:2006/05/23(火) 16:11:34
>>985
日本語でOKよ。
987デフォルトの名無しさん:2006/05/23(火) 16:36:14
>>986
しね
988985:2006/05/23(火) 17:03:59
987は私ではないですよ。
んで、日本語じゃないらしいのでもうちっと詳しく書くと
テキストファイルにアプリのパスをずらずらっと書いてだ
そやつらにWM_CLOSEを送って終了させたい訳だ。
んでWM_CLOSEをPostMessageする為にはウィンドウハンドルがいると。
あらかじめクラス名とかを調べておくのは面倒なのでフルパスからなんとかトップレベルウィンドウのハンドルが得られないかと。
EnumWindowsとかやってみたんだがどれがトップレベルウィンドウかコードから判別する方法が知りたい訳だ。
パスが一致する物全てにWM_CLOSE送ってもいいんだが、かっちょ悪いっしょ?
989名無し募集中。。。:2006/05/23(火) 17:14:50
テキストファイルにずらずらっと書いたアプリを
CreateProccess使って自前で起動したのなら
プロセスIDからウィンドウハンドル取得が出来る

そうでないなら俺もやり方知らんから
知ってる人いたら教えて欲しい
990デフォルトの名無しさん:2006/05/23(火) 17:18:56
CreateToolhelp32Snapshot は使えないかな
991デフォルトの名無しさん:2006/05/23(火) 17:21:14
だいいち、一つのフルパスから複数起動されている場合だってあるだろうし。
992デフォルトの名無しさん:2006/05/23(火) 17:22:24
>あらかじめクラス名とかを調べておくのは面倒なので

こっちの方がずっと簡単だわな。FindWindow() つかえるから。
993デフォルトの名無しさん:2006/05/23(火) 17:23:28
どうでもいいが、他のアプリを勝手にKILLするって・・・・作成罪が成立したら気を付けろよ
994デフォルトの名無しさん:2006/05/23(火) 17:32:10
どうせ、まともなアプリじゃないんだろなぁ・・
995デフォルトの名無しさん:2006/05/23(火) 18:22:23
埋め995
996デフォルトの名無しさん:2006/05/23(火) 18:38:32
Cardinal や Int64 を IntToStr みたいに文字列にしたいのですが、
どうしたら良いのでしょうか?
997デフォルトの名無しさん:2006/05/23(火) 18:44:14
intToStr は複数定義されて overloadされてるから、心配ない

Caption:=IntToStr(Cardinal(-1)); 
Caption:=IntToStr(-1);
は違う結果になる
998デフォルトの名無しさん:2006/05/23(火) 18:52:46
ヘルプより

function IntToStr(Value: Integer): string; overload;
function IntToStr(Value: Int64): string; overload;

つかえるんじゃないの?
999デフォルトの名無しさん:2006/05/23(火) 19:01:58
すいません上で書いた者ですが、サーバーが繋がっていない時にSocket.SendTextで例外が発生しないのは仕様なんでしょうか?D5です。
1000デフォルトの名無しさん:2006/05/23(火) 19:03:59
1000だとかわいくて素直な彼女が出来る
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。