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

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


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

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

★ご注意
・質問者は捨てで良いのでなるべくトリップを付けましょう。
・煽り荒らし騙りは放置してください。悪質な場合は削除依頼へ。
2デフォルトの名無しさん:03/11/07 19:43
またか・・・
3ゲト
いや、久々に1000ゲットが出来たよ。あげ
http://pc2.2ch.net/test/read.cgi/tech/1065195699/992-1000

>桑谷夏子大好き♪

アホ過ぎ。
7デフォルトの名無しさん:03/11/09 08:13
>>6
そいつが常駐してたのはこれっぽい。

VNC使ってますか?
http://pc2.2ch.net/test/read.cgi/software/1018166669/l50
9デフォルトの名無しさん:03/11/09 10:20
GetTickCountを使って秒数をカウントするプログラムを作ったんですが、
出来たら、3:00 > 2:59 > 2:58 と時計タイプのフォーマットで、カウントさせたいんですが
どうしたらいいでしょうか?

>>9
GetTickCountではなくてTTimerを使え。
11デフォルトの名無しさん:03/11/09 12:06
>>10
dekita---
ありがとうございます
>>10
Del厨じゃ精度の悪い方法しか思いつけんか(w
                             . - _
              _,..,_         ノ´//⌒ ミヾヽ、_
    _____  ,r'´   ``'' - 、ーニ三彡´〃   ! ゙ゞヾ、_`ヽ
  [|<|____├{             /´  {  l  | // ヽ`ーr' }
    ″       !    `、     '   ノ  l. ||l     i l / l   ああっ、つ、つらいです...
              ',      | ̄``''''ー―- ,'´l  l |!` ‐--| l l l
              ',    |             l  l  |    リ,! l
              ',   |          | | ,!    ' リ
  ,.r''ヽ、        _ ',   |          |. |
 ,'    ` ' ' ' ' ' ' ´  `ヽ   !            | |
/ ,.r'´ ̄ '''''' ─−-........__ ,.r'             | '''"''‐-、
~´                            ̄ ̄ ̄
14:03/11/09 13:56
9です。
Windows2000でコンパイルしたんですが、XPだと正常に動かないってことあるんでしょうか?
実行ファイルをクリックしても、最小化の状態になったまま、画面が出てきません

2000ではきちんと動きます。
環境変わって発現したバグという可能性もある。もちろんお前のな。
16デフォルトの名無しさん:03/11/10 00:11
>>14
起動周りあたりで何してるかだけでも書いてみたら?
何かやってるから最小化してんじゃないの?
17デフォルトの名無しさん:03/11/10 11:48
関連付けられていないファイルをダブルクリックすると、
ファイルを開くアプリケーションの選択の画面が表示されますが、
ShellExecuteの"open"でファイルを開くとその画面が表示されません。
関連付けられていないファイルを開いた場合、その画面を
表示させたいのですが、どうすればよいでしょうか?
ShellExecuteExを使います。
19デフォルトの名無しさん:03/11/10 17:35
BCBでいうところのmemsetはDelphiでは何でしか?
FillChar
FillCharですか?そうですか
FillMemory

BCB、Delphi両方で使用可能
onClickイベントで
新しいフォームを開くにはどうすればいいですか?
大体のソフトではツール→環境設定で設定一覧のフォームがでますよね?
そういうのがやりたいんです。
ShowModal
Javaの「あなたは〜ですか?Yes.Noどっちかのボタン押せ」
みたいなアプレットウィンドウがあると仮定して、
「あなたは〜ですか?」という部分の文字列を取得するには
どうしたら良いでしょうか?
>>25
「あなた」「ですか?」の文字列位置を探して、substring等でその間の文字列を抜き取る。
ほんとうに申し訳ないのですが、
その文字列位置を探す方法をご教授お願いできませんか?
2826:03/11/10 23:08
IndexOf…
っていうかここはDelスレだ。(・∀・)カエレ
他ウィンドウの文字列を取得するという話じゃないの?
3025:03/11/10 23:21
私はDelphiを使ってJavaで表示されたウィンドウの中の
文字列を取得したいのですが…。
プログラミングは一ヶ月前にDelphiで初めました。
正直、Javaはおろか、他の言語は触ったことすらありません。
タイトルバーの文字列は簡単に取得できたのですが、
その中身がどうしても取得できず、3日ほど悩んでます。

わかりにくい文章で26,27氏に誤解を招いたようで、
申し訳ありません。
3125:03/11/10 23:23
間違えた。27は自分だ。28氏です。
何度もすいません。
>>24
いくらやっても「表示されているウィンドウをモーダルにすることはできません」です・・・
ぐぐっていろいろ試したのですがだめでした。。
>>32

with T23Form.Create(nil) do
try
ShowModal;
finally
Free;
end;

こういうことでないなら、もっとわかりやすく状況を書け。俺には質問の内容を予測できん。
>>30
ウィンドウが存在していれば取得ができるが、存在しなければ実現はとても難しい。
まず調査からしてみれば? spy++あたりでゴニョゴニョと。
Google Toolbar 使ってないやつなんているの?
ttp://toolbar.google.com/
3832:03/11/10 23:59
procedure TForm1.menu21Click(Sender: TObject);
var
T23Form: TForm;
begin
with T23Form.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;


こうやったら「コンポーネント名Edit1はすでに使われています。」って出る・・・

ぜんぜん基礎が分かってないっぽいです・・・
関数、構文が網羅してある本とかありませんか?
友達から「基礎からわかるDelphi5」っての借りたんですが、
コンポーネントの説明(どんな機能か、というくらい。あとはデータベース)しかなかったので・・・
良本あれば教えていただけませんか?
いまはデスクバーの時代ですからね。
ttp://toolbar.google.com/deskbar/index.html
>>38
申し訳ないが、そのエラーはそこが問題で出てるんじゃないと思うが…。
4125,30:03/11/11 00:17
>>35
ウィンドウは存在しています。
タスクバーにそのウィンドウのキャプションが表示されてます

多分、Delphiでshowmessage('Hello')と表示させて、
別に起動させたDelphiでそのHello部分を抜き出せれば
それがJavaでも抜き出せると思うんです。

そこで問題なのが、どうやってHelloを抜き出すか、です。
どなたか、教えていただけませんか?
それは出来ない可能性が高いと言っておこう。

テキストボックスやスタティックテキストなどは、
ウィンドウコントロールなのでGetWindowTextで取得可能だが、

直接ウィンドウに文字列の形をしたベクタデータとして
書き込んでいるようなコントロールもある。(DelでいうTLabelとか)
こういうのはコントロールオブジェクトの内部変数を無理矢理取り出す以外取得は不可能です。
GetDlgItemText

EnumChildWindows
GetWindowText

好きなの使って取得しやがれ。条件は自分で調査しろ。
44デフォルトの名無しさん:03/11/11 00:37
>>38
表示したいフォームの名前をForm2としよう。
プロジェクト→オプション→フォームで、Form2を「自動作成の対象」に入れる。
後は Form2.ShowModal; だけでOK。

とりあえずヘルプに付いてるチュートリアルを一通りやってみるとよろし。
4525:03/11/11 01:09
うう…。できない…。
42氏が仰っるとおりなんでしょうね…。
GetDlgItemTextやEnumChildWindows、GetWindowText等
43氏が挙げてくださった関数も使用してみましたが、
結局、タスクバーに表示されるキャプションしか
取得できませんでした。
構想を一から練り直します…。
お騒がせしてすみませんでした…。
4632:03/11/11 01:23
>>44
Form2ってのが一覧にない・・・
もうこのレベルだめぽ。本買って出直します。
(´-`)。o ○ (動的に作りたい話なのでは?だから>>44のレスは…)
>>46
[ファイル]→[新規作成]→[フォーム]
で新しいフォームを事前に作ってください。
4944じゃないけど:03/11/11 01:43
>>47
32に動的作成↓
Form2:=TForm2.Create(Self);
Form2.ShowModal;
Form2.Release;
なんてレスでいいんだろか?
>>48
ああ、そういう段階か…なるほどなるほど
今、delphiで連結リストをつくっています。
ノードをリストの最後尾に挿入するにはどうしたら良いのでしょうか?
連結リストって
type
 PNode = ^TNode;
 TNode = record
  Item: THogeHoge;
  Next: PNode;
 end;

とかやるやつ?
普通に先頭から検索していって、末尾のノードのNextに連結したいノードのアドレスをぶち込む。
以上。
53デフォルトの名無しさん:03/11/11 02:26
TimerとTDateTime を使って、3分間をカウントするプログラムを作りました。

TIME:TDateTime;
TIME:=StrToTime('00:03:00');
TIME:=TIME - StrToDateTime('00:00:01');

こんな感じです。
表示する時だけは、0:03:00ではなく、3:00 と表示させたいんですが、何か方法はあるのでしょうか?

現在表示させるときは
label1.Caption:=TimeToStr(TIME);
としています。

TIME:=StrToTime('3:00'); こう試してみたんですが、3:00:00 からカウントしてしまいました。

54デフォルトの名無しさん:03/11/11 02:42
>>53
よく分からんが、こういうことがしたいの?
label1.Caption := FormatDateTime('n:ss', TIME);
5551:03/11/11 02:43
>>52
ありがとうございました!なんとかなりました!
5653:03/11/11 03:26
>>54
ありがとうございます!!
思い通りに出来ました
デルファイとかC++でもなんでもいいんだけど、プログラムを作るコツを教えて!
アルゴリズム(?)定石かな?
センス
慣れと向上心
60デフォルトの名無しさん:03/11/11 09:54
Delphiのことは全く知りません。多少C言語はわかります。
最初のとっかかりの書籍を一冊教えてください。
61デフォルトの名無しさん:03/11/11 12:24
他のアプリのEditなどに文字を書き込むにはどうすれば良いのでしょうか?
WM_SETTEXT
割とループだよなぁ<何から学べばいいですか話
>>60
とりあえず自分が作りたいと思う物を作れ
書籍テンプレでも作ればいいじゃん。
漏れは質問をウザイと思わないし、テンプレ作る気力も無いから無理。
>>65
よっ!一般人!
もはや忘れ去られた存在だが・・・。
http://onigiri.s3.xrea.com:8080/delphi/
推奨テンプレ(嘘

kakinotane.s7.xrea.com/dirDelphi/mainmenu.html ここで
一通り練習してみよう。
まずは「基礎から学ぶDelphi講座」を最初から最後まで、実際に入力しながらやってみる。
その後、自作コンポーネントの道の「はじめに」から「クラス参照型について」までやってみよう。
そしたら一通りは動かせるようになるので、
「3分で作ろうアプリケーション」の出来上がりをみて、ソースを見ず考えて作ってみよう。

そしたら、それぞれのVCLの使い方、役立つ関数を覚えていこう
VCLの使い方はココ www.geocities.jp/takamori700/index_03.html
関数はココ www.borland.co.jp/tips/delphi/dh002/index.html

これを全部こなせば、とりあえず一通りのことはできるようになるぞ
69デフォルトの名無しさん:03/11/12 16:26
Delphi6のマニュアルを格安で手に入れたいのですが
Personalにもpdf付いてなかったっけ…
Vectorから6のパーソナルをおとせば、
ついてくるんじゃないの?
72デフォルトの名無しさん:03/11/12 17:05
>>18
サンクス。CSVファイルをデータベースとして使いたいのですが、
そういったことに使えるコンポーネントってありますか?
ADOにぶち込むとか…
紙のマニュアルか? Delphi2以降ほとんど見てないな。邪魔で仕方がない。
入力支援機能に限って言えばDelphiはEclipseに負けているとおもた。

最初のカッコを書いたら自動的に閉じるカッコが出たり、
シングルクォーテーションを一つ入れたら、カーソルの後ろにもう一つ出たら
最高なのに・・・。
Freeソフトに負けてるなんて・・・。

質問じゃないのでサゲ。

でもみんなもそう思わない?
76デフォルトの名無しさん:03/11/12 19:19
エクセルにBoolean型を送りたいのですが、どうすればいいか教えてください。

var
Excel:OLEVariant;
begin
Excel:=CreateOleObject('EXCEL.Application');
excel.Visible:=true;
//画面の描画禁止がしたい。
Excel.ScreenUpdating:=False; ←ここでエラー。構文も合っているか分からないので、
                      違うなら教えてください。

宜しくお願いします。

>>75
フリーソフトだからこそ負けてるのさ。
>>75
そんなの Eclipse 以前の、古の EMacs からある機能なんだが。

最初は便利に思うんだけどね。
じきに邪魔に感じてくるのも事実。
タスクバーに表示されているツールバーの種類と位置を、取得および復元したいです。
たぶんレジストリのどこかに情報があるんだろうなと思い、
適当なフォルダを新規ツールバーで登録し、フォルダ名でレジストリを検索したのですが、
引っかかりませんでした。
関連情報に詳しい方、ぜひ教えてください。
80デフォルトの名無しさん:03/11/13 10:05
イベントにあるメソッドが割り当てられているかどうかはどう書けばいいでしょうか?
if obj.OnChange = Button1Click then
と書くと 引数が足りませんとエラーが出ます


>>79
私のパソコンではマウスの右ボタンを押してプロパティを出すと
C:\Documents and Settings\xxxx\Application Data\Microsoft\Internet Explorer\Quick Launch
にあると出ます。
8180:03/11/13 10:24
自己解決しました。

どうも片方がメソッドのままだと比較できないので

function cmpNotifyEvent(s,d:TNotifyEvent):boolean;
begin
Result:= @s = @d;
end;

と関数を作りました。
8269:03/11/13 10:35
pdfありました。
ありがとうございます。
紙のマニュアルは買わないとだめですかね?
(Delphi7は¥8000とHPにあります)
8379:03/11/13 12:26
うちのパソコンではクイックランチしかありませんでした。

@Button1Click
>>81
間違っている。
TMethodでキャストとしてCodeとDataを比較せよ。
×TMethodでキャストとしてCodeとDataを比較せよ。
○TMethodでキャストしてCodeとDataを比較せよ。
8680:03/11/13 18:14
>>83
レジストリではなく、フォルダ上にある筈ですよ。探してみて下さい。

>>84
了解です。
Result:= @s = @d; は
Result:= TMethod(s).Code = TMethod(d).Code ; と同じコードを吐き出しました。



function cmpNotifyEvent(s,d:TNotifyEvent):boolean;
begin
Result:= (TMethod(s).Code = TMethod(d).Code)
  and (TMethod(s).Data = TMethod(d).Data);
end;
以下のようなコードで保存したテキストファイルを開くとなぜか文字化け
の状態で表示されてしまいます。どこが悪いのか教えてください。

(一部)
var
 Path: String;
 TextBuf: String;
 Len: Integer;
 FileStream: TFileStream;
begin
Len := StrLen(PChar(TextBuf));
FileStream := TFileStream.Create(Path, fmCreate or fmShareExclusive);
try
 FileStream.Write(TextBuf, Len);
finally
 FileStream.Free;
end;
end;

TextBufの内容は1バイト英字のみで、TextBuf、Len、Pathの内容がおかしくないのは
確認しています。

環境はWinXP、Delphi6 Personalです。
88デフォルトの名無しさん:03/11/13 19:59
>>87
何のアプリでテキストファイルを開いてる?
逆に開くコード書いてみてDelで確認してみたらどうだろうか?
8988:03/11/13 20:05
といったものの、漏れの環境でも化けるなw
Pro買ってソース嫁
>FileStream.Write(TextBuf, Len);
FileStream.Write(TextBuf[1], Len);
9287:03/11/13 20:22
>>88
メモ帳でもterapadでも化けてしまうんですよねー。とりあえず、開くコード書いてみます。
添え字が1からなのに激しく違和(ry
9587:03/11/13 20:32
>>91
うまくいきました。ありがとうございました。m(__)m
delphiってなんて読むんですか?
デルヒでいいですか?
出るフィーです
98デフォルトの名無しさん:03/11/13 21:47
>>96
デルフィ。
99デフォルトの名無しさん:03/11/13 21:50
デルファイ
Del7ProとDel6Proを持っているのだけど、何か7の動きがもたつくし、
自分のマシンは400MHzなのだけど、やっぱりDel6の方がいいのかな。

Del8は買います。6と7のどちらかを知人にやるので、ネイティブが
使える処理系を手元に残しておくとしたら、あなたはどちらを選びますか?
>6と7のどちらかを知人にやるので
文盲?
Del8を買う前にPCを代える
>>96
http://dictionary.goo.ne.jp/search.php?MT=delphi&kind=&mode=0&ej.x=49&ej.y=8
ほれここで発音聴けるぞ。スピーカーアイコンクリックな、。
>>100
買い換えろ。そんな古いほうから世代を数えたほうが早いPCなんか使うなよ。
XPsp1にDel6Personal + RTL#2入れてる人に質問

http://www.borland.co.jp/delphi/readme_d6_variants_jp.txt

↑のファイルって全部ある?
106100:03/11/13 22:11
Del7のツールバーのアイコンって、クリックしたらそのまま
プッシュされた状態を維持し続けるものですか?

スピードバーのアイコンは青を基調としたもので違和感があります。
OSは2000Proなのですがこれだけ浮いています。
107デフォルトの名無しさん:03/11/13 22:26
誰かキー入力の処理教えてください
>>107
教えてあげるから質問をかいてください。
Delphiの開発にブルースリーが参加していたとは。。。(ワラタ
>>107
質問というより要求が漠然としすぎ
もちっと明確に相手に意思を伝えられるようにならなきゃいいパパ、もとい、いいプログラマになれないぞ
→を押したら自機が右へスペースを押したら弾がでるようにしたいんですが。
>>111
ゲーム製作スレに逝け。ちなみにそういう目的なら色々な実装方法がある。
113デフォルトの名無しさん:03/11/14 17:39
>>111一番簡単な方法は
Form1のOnKeyDownで
case key of
 VK_RIGHT : begin
  //自機右
 end;
 VK_SPACE : begin
  //弾出す
 end;
end;
でたぶんできます。
(違ってたらゴメンなさい)
------------------------------
ここからは自分の質問です。

MySQLにアクセスする時ログインプロンプトを出さないようにしたいのですが、
パスワードの設定の仕方が分かりません。
TDatabaseのLoginPromptをFalseにすれば出来るというのは知っているのですが、
TDatabaseのParamsにPASSWORD=abcd と記述しても出来ませんでした。

宜しくお願いします。
114デフォルトの名無しさん:03/11/14 18:34
Database ExplorerってDelphi7に付いていますか?
もし付いていないとすると、その理由はなんでしょうか?

宜しくお願いします。
>>113
こんな感じになってるか?

USER NAME=aaaa
PASSWORD=abcd
大きなファイルって一度に送信できないんでバッファに分割してSendBufしますよね?
なんかうまいことReceiveBufできない(同期取れてない?)んですが、サンプルみたいなのありませんか?
>>114
付いています。
理由は知りません。
>>116
UNIX&C&BSDソケットライブラリで最低一年修行しとけ。
119113:03/11/15 13:46
>>115
なってます。
もしパスワードが必要ないデータベースにアクセスする時に
PASSWORD=abcd
ってやると例外が出ますよね?
それが、何も出ずにアクセスできてしまうんです。
120デフォルトの名無しさん:03/11/15 14:42
デルファイでゲームを作れるようになるにはどのくらいの時間が必要ですか
121デフォルトの名無しさん:03/11/15 15:11
>>120
デルファイ -> そのバージョンは?
ゲーム -> ジャンルは?
作れるようになるには -> 君が作るの? 私に君の実力を評価する手段があるとでも?
どのくらいの時間 -> 延べ時間で答えればいいの?

回答:約 1時間〜3年
>>120
       , --- 、_                 
      /ミミミヾヾヽ、_           
   ∠ヾヾヾヾヾヾjj┴彡ニヽ
  / , -ー‐'"´´´    ヾ.三ヽ
  ,' /            ヾ三ヽ
  j |             / }ミ i
  | |              / /ミ  !
  } | r、          l ゙iミ __」
  |]ムヽ、_    __∠二、__,ィ|/ ィ }
  |    ̄`ミl==r'´     / |lぅ lj諦めましょう〜♪ 諦めましょう〜♪
  「!ヽ、_____j ヽ、_  -'  レ'r'/  リ〜セットしましょ〜う パッパッパラッパ♪
   `!     j  ヽ        j_ノ
   ',    ヽァ_ '┘     ,i
    ヽ  ___'...__   i   ハ__
     ヽ ゙二二 `  ,' // 八  
      ヽ        /'´   / ヽ       
      |ヽ、__, '´ /   /   \  

123デフォルトの名無しさん:03/11/15 15:44
>>120
ボタンを押すと文字列が表示されるだけのゲームなら、10分程度だな。
ドラッグイメージを表示しないようにするにはどうすればいいですか?
>>124
ドラッグしなければいい
>>120
じゃんけんゲームなら、君の場合3時間程度だな。
127デフォルトの名無しさん:03/11/15 18:21
TEditのMaxLengthプロパティについて教えてください。

入力文字数を15文字までに制限したいので、
TEdit.MaxLength := 15;
に設定しました。
ところが全角で入力した際に7文字までしか入力することができませんでした。
希望としては全角半角関係なく15文字までしか入力できないようにしたいのです。

全角でも半角でも全角半角込みでも15文字までしか入力できないように
することはできないのでしょうか?

Win2000,Delphi6を使用しています。
低レベルすぎてすみません、よろしくお願いします・・・。
>>127
実現するにはDelphi8を待つかUnicodeコントロールを探してくるか、OnChangeあたりで無理やり削るか
メッセージが処理される前に入力後文字数を計算し入力処理をされないようにするなど。
デルフィではなくデルファイだったんですね。今日知りました。
コードエディタのフォントを、設定ダイアログに表示されているもの以外にしたいときはどうすればよいですか。
Win2000 + Delphi6 Personal です。
131デフォルトの名無しさん:03/11/16 20:41
今日からDelphiをはじめました。
そこで質問なのですが、配列というのがよくわかりません。
説明には「変数の列」だと書いてあって、意味はわかるのですが、
なぜ配列などということをわざわざ使うのかわからないです。
単純に別の変数を作ってしまえばいいのではないかと思います。
つまり、たとえば、
var
IntArray: array[0..1] of Integer;
などと書かずに、
var
i1, i2: Integer;
と書いて、
begin以下で用いるときも
IntArray[0]やIntArray[1]の代わりに、i1やi2を使ってしまえば良いのではないですか?


お忙しいところ申し訳ありません。教えてください。
>>131
10個の変数を1を代入するコードですが、どちらが簡単ですか?

var
 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9:as integer;
begin
i0 := 1;
i1 := 1;
i2 := 1;
i3 := 1;
i4 := 1;
i5 := 1;
i6 := 1;
i7 := 1;
i8 := 1;
i9 := 1;
----------------------------------
var
 iary[0..9] as integer;
 lp as integer;
begin
 for lp:=0 to 9 do iary[i] := 1;


133デフォルトの名無しさん:03/11/16 21:02
>>132
なるほど…、後者のほうがスマートに見えます。
まとめて何かしたい場合はグループ分けしておいたほうがいいということですね。
もうちょっと勉強すれば便利な点が見えてくるのかもしれないです。もっと勉強します。

わかりやすい説明ありがとうございました。
134132:03/11/16 21:05
var
 iary[0..9] as integer;
 lp as integer;
begin
 for lp:=0 to 9 do iary[lp] := 1;

が正解…吊ってくる。

おー、ちなみに、レコード型(構造体)やオブジェクト(クラス)なんてのも
データ類を束ねるという考え方では似ている。

では改めて吊ってくる。
var
 iary: array[0..9] of Integer;
 lp: Integer;
begin
 for lp:=0 to 9 do iary[lp] := 1;

が本当の正解です。
では改めて吊ってくださいませ>>134
・配列
・ローカル変数
・関数

この辺の利点が理解できて効果的に使えるようになれば、そろそろ初心者卒業かもね。
ポインタも入れたいとこだが、最近の言語はポインタなかったりするからな。
137デフォルトの名無しさん:03/11/16 21:52
>>136
そのかわり継承とオーバーライドについて理解が必要に・・・
138デフォルトの名無しさん:03/11/17 00:25
空のWAVEファイルをEXEのあるフォルダに作りたいのですが、どう記述したら
よいのでしょうか?教えてください。
>>138
全く同じ文面を他の所で読んで「(゚д゚)ハァ?」と思ったんだが。
騙りじゃないなら、あっちで聞け。
WAVEファイルのフォーマットを読んでください。

作成したデータはTMemoryStream.SaveToFile等で保存してください。
141デフォルトの名無しさん:03/11/17 00:45
>>140さん ありがとうございました。
>>141
マルチポスト先にお詫び入れてこいよ。この糞野郎。
>>142 いやいや、発言しなくていいから・・・まったく
>>142 そーいうやつが社会でうまくやっていけないのだよ。ふふ
情けない…。
0KBで壊れてるWAVEファイルならできた
まえから疑問におもっていたのだけど、マルチポストって同一郵便物を
複数のあて先に郵送することだよね。それと2ちゃんねるってどんな関係が
あるのだろう????プログラム一般板とは関係ないのでは???
プログラム技術板のまちがいでした。
149デフォルトの名無しさん:03/11/17 08:33
>>147
マルチポストはもともとはそういう意味だったのかはよくわからないけど、ネットでは複数の同一内容の投稿を複数の場所で行うことをいうから
2ちゃんねる限定の言葉ではないよ。
ネット用語として、他の掲示板とかでも普通に使われてるよ。

複数スレッドや板がある掲示板でも起こりうるし、MLと掲示板両方で聞く香具師に対しても「マルチポストするなヴォケ!」って使い方できると思う。
>>147
自分で調べもせずに「ム板と関係ない」とは参るね。
HTTPのメソッドにPOSTってのがあるね
152デフォルトの名無しさん:03/11/17 09:08
>>151
まったく関係ない。
153デフォルトの名無しさん:03/11/17 09:51
ある変数の値が数値か文字列か調べるにはどうしたらよいですか
IsNan(MyVar)を使うと変数が文字列だとエラーが起きてしまいます。
>>150
どこに参るの?
ところでアジ(鯵)ってどうしてさかなへんに参るの?
155デフォルトの名無しさん:03/11/17 09:57
超初心者です。

メニューの背景色をシステムの設定とは別に独自に設定できないで
しょうか?またそれを可能にするコンポーネントをご存知の方
いませんか?
156裕美子 ◆h8lIp1b.Ek :03/11/17 09:59
裕美子といいます。群馬からアクセをしています。今日は公欠で午後から
入学試験にいきます。すでに試験は2つ失敗しました。

Cの老師を目指していますが、Delphiのプロふぇっしょナル番を譲ってもらったから
これから勉強します。バージョンは7です。どうかよろしく御願いします。

謎の前置詞さんというDelphiの老師がアットニフティにいるそうですが、もし
個人のHPをおもちでしたら、アドレスを教えてください。
157裕美子 ◆h8lIp1b.Ek :03/11/17 10:00
プロフェッショナル版の間違いです。
タスク常駐ソフトでショートカットキー(ctrl+w等)を監視して
フォームを表示(show)、非表示(hide)させるにはどうやったら良いのでしょうか?
フォームがアクティブのときはショートカットキーで非表示にすることが
出来るのですがアクティブでないときにショートカットキーを押しても
全く無反応です。。
良い方法をお知りの方おられましたら宜しくお願いします。
>>154
>鯵の一番美味しい季節が旧暦の3月なので数字の『参』が使われたといわれています。
160デフォルトの名無しさん:03/11/17 11:12
>>153
161デフォルトの名無しさん:03/11/17 11:33

なんか感じ悪いヤシが紛れ込んでるな。

>>160
例外使えばいいんじゃない?
オーバーロードしてみるとか
>>147,149
NetNews、マルチポスト、クロスポスト、あたり調べれば元々の意味がわかるよ.
164デフォルトの名無しさん:03/11/17 17:04
Delphiの練習に簡単なWebブラウザを作ろうとしています。
TButtonの「Button1」とTWebBrowserの「WebBrowser1」のみを置いたプログラムで下のようなソースを書いてみたところ、
「プロジェクト Project1.exe が EAccessViolation クラスの例外を生成しました。」
というエラーが出てしまいます。
どうやら、ShockWaveやJavaを置いてあるページを読み込もうとすると発生するようです。
いろいろ調べてみましたが、力及ばず解決することができませんでした。
アドバイスをいただけると嬉しいです。

・問題のソースです。
--------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://www.cartoonnetwork.co.jp/game/27_jack.asp');
end;
--------------------

・環境は以下の通りです。
 Delphi6 Professional
 WindowsXP HomeEdition
自分が作ったソフトをソースの形で他のDelphiユーザに使ってもらうときに
配布する必要がないファイルを教えてください。

ざっと見たところ、プロジェクトフォルダの中で

・拡張子にチルダが挿入されたファイル
・(プロジェクト名).cfg
・(プロジェクト名).dsk

はいらないように思えるのですが、(プロジェクト名).dof とかはどうなんでしょう?

自分が使ってるのはver.6 Personalです。
166デフォルトの名無しさん:03/11/17 18:19
プロクシの作り方が書かれたサイト教えて下さい。
>>166
ぐぐれヴァカ
>>164
俺の環境では問題は発生しない。たぶんソフトウェアの相性かと。
EAccessViolation(AV)が出るならそのアドレスからどこで発生しているかわかるのでは?
自分側(Delphiで作った側)でなければその可能性が高い。
一応Delphi6とDelphi7で実験してみました。

環境
Delphi6 Professional
Delphi7 Professional
Microsoft Windows XP Professional Service Pack 1 (Build 2600)
Internet Explorer 6.0
JRE 1.4.2 Java HotSpot(TM) Client VM <- Sunのです。というかSunの入れてないと落ちるページが多いっす。
169デフォルトの名無しさん:03/11/17 19:06
>>167
ぐぐっても見つからないんでお前が教えて
オープンソースのプロキシパクれば良い。
171デフォルトの名無しさん:03/11/17 19:12
Z80アセンブラ教えてください
172デフォルトの名無しさん:03/11/17 19:20
サンプルプログラムTest8.z80を参考にして、
8個のLEDが一斉に一定時間間隔で点滅するプログラム

をおしえてください
173デフォルトの名無しさん:03/11/17 19:21
キチガイが寄ってくるから上げるなよ。
.
177デフォルトの名無しさん:03/11/17 20:12
>>156
裕美子ちゃんこんばんは
Cの調子はどうだい?
謎の前置詞さんは知らんな。ごめんよ。

DelphiはCと似てるし、すぐ覚えられると思うよ。
178デフォルトの名無しさん:03/11/17 20:37
ShowMessageって実行されない条件みたいなのってありますか?
Case文のなかでShowMessage('7');って書いても実行されないので困ってます。
ステップ実行してもスルーされてしまうので対処法が無くお手上げ状態です。

対処法を知っていたら教えてください。
1)そもそもDelphiってなんですか?
2)読み方はデルファイとデルフィのどっちですか?
180164:03/11/17 20:46
>168
ご回答ありがとうございます。

J2SE v 1.4.2_02を入れてみましたが解決できませんでした。
また別パソコンのWindowsXP Professionalでも試したところ、やはり同じく次のように例外が発生します。
-------------------
'Access violation at address 77BB11C7 in module 'VERSION.dll'. Read of address 00000004'
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。
-------------------

ところがWindows98で動作させると問題なく動きます。
やはり相性の問題で、これは仕方ないのでしょうか。

Delphi MLの過去ログにちょうど同じ記述があったのですが、解決策のコメントはないようでした・・・。
ttp://130.158.124.192/~takeuchi/delphi/browse.cgi?index=047989
オープンダイアログにテンプレートを使ったのですが、
プレースバーが表示されないOSでは位置がずれてしまいます。
また、システムフォントの違いでもずれるんじゃないかと不安です。
どうやって調節すればいいですか?
>>180
ActiveXの取り込みからSHDocVwを作ってみるのはどうだろうか
>>178
実行されないのは条件を満たしていないからです。
自分のコードをもう一度よく見直してみましょう。
184178:03/11/17 21:45
>>183
どんな条件があるのでしょうか?
ヘルプにも書いてないので。
ちなみに2つ同じ文を書くときちんと実行できます。1個だけですが。
>>178
そんなバグは聞いたことないから、コード貼らなきゃ分からんな
>>178
QDialogsの使ってるオチはないだろうな
>>156

裕美子へ

「謎の前置詞」ではなく、「謎の全知師」だ。

俺も詳しいことは知らないが、1995年当時、Delphi1の発売と同時にDelphiは
ちょっとしたブームになった。当時、インターネットは普及し始めた頃で、
ほとんどの人間はパソコン通信を楽しみ、「ニフティーサーブ」という通信サービス
が一番人気が高かった。FDelphiやFBorlandといった板(ニフティでは会議室といった)
に出没して的確なアドバイスを与えてくれたのは「謎の全知師」という人物らしい。
ひょっとしたら「フサギコ」という、この板(ム板)の常連が知っているかもしれないので、
彼(彼女?)に聞いてみてはどうだろう?

しかし、プログラミングをする暇があったら勉強しなさい。受験生だろ?
がんばれ。
>>181
ダイアログボックスのWndProcでWM_SIZEなどのサイズ変更タイミングでコントロールを再配置する。
初期化時でもかまわないけど。なにかのコントロールに位置を揃えたいなら、そのコントロール名が
わかっていれば問題ないだろう。もちろんそれは自分で調べれ。spy++とか使ってな。
ここは質問も回答もグダグダですね。
謎の全知師・・・服部誠 氏

ASCIIから発売している、「Borland Delphi7オフィシャルコースウエア」の
基礎編を執筆している。4,5,6と一連のバージョンの基礎編を執筆しているが
書籍の内容はほとんど同じ。巻末に著者略歴が記載されているので参考にして
ください。
191164:03/11/17 22:55
>182

Delphi6 Professionalにはじめから入っているSHDocVw(TWebBrowser)を削除して、
ActiveXの取り込みからSHDocVw_TLBを作ってみました。
TWebBrowser_V1というものも同時に取り込まれましたが、TWebBrowserもこちらも
同じくEAccessViolationクラスの例外が発生してしまいました。
もしかするとIEのバージョンが影響するのでしょうか。
ちなみにIE6.02ですけれど・・・。
また、WebBrowser1のプロパティなどはデフォルトで使用しています。
TWebBrowser_V1ってのは「忘れていい存在」らしいど。
オレも使ってないし。
ほかの可能性としてアンチウイルス系のソフトが悪さしてるとか。セキュリティ周りの制限で初期化に失敗しているとか。
俺のところは、そんなソフトは一切入れていないし、セキュリティも普通の状態で使っている。

あまりいい方法じゃないけど、自分以外のモジュールで起きたAVを無視してしまうのはどうだろうか。
自分が原因で引き起こしたAVかどうか区別できないのがちょっと問題だけどね。
194164:03/11/18 00:40
>>192
>>193
ご回答ありがとうございます。

WindowsXPの方はAVGアンチウイルスを入れてありますが、WindowsXP Professional
やWindows98の方はウイルス対策やファイアウォール系のソフトは使用していない
です。
ファイアウォール機能のあるルータを使用していますが、WindowsXP Professional
とWindows98は同じルータを使ってインターネットとつながっています。
それぞれのどのPCでもIEを使うと問題のShockWaveやJavaのページを表示すること
ができます。

AVというのは例外という意味でよろしいでしょうか。
うまく動くのであれば、無視してしまっても良いのですが少し怖いかも・・・。

気長に調べてみることにしますので、またアドバイスをいただけると嬉しいです。
もし僕の方で解決できれば、その結果を書き込ませていただきます。
195164:03/11/18 00:43
「WindowsXPの方はAVGアンチウイルスを・・・」は、
「WindowsXP HomeEditionの方はAVGアンチウイルスを・・・」
です。失礼しました。
AVってのは、修練続けてればそのうちすぐ出会うよ(藁
「実際には無いもん」にアクセスしようとしたとか。
Access Violation (EAccessViolation)
イパーン人には通じない言葉なので取り扱いについては注意するように。
198デフォルトの名無しさん:03/11/18 05:52
WebBrowserコントロールの垂直スクロールバーの現在位置を取得したいのですけど、

GetScrollPos(WebBrowser1.Handle, SB_VERT)

としても0が返されるだけなのですが、どうすれば正確に取得できますか?
199裕美子 ◆h8lIp1b.Ek :03/11/18 08:00
>>177>>187>>190

ありがとうございました。VBっぽいので何とかとっかかりは簡単そうです。
Cの老師をめざしつつ、Delphiのコンパニオンを可能なら目指します。
今からダッシュで登校するので、これで失礼します。
200デフォルトの名無しさん:03/11/18 13:16
Form1 にぺたぺたと部品を貼り付けて、簡単なプリを作ったんですが、ボタンなどを押したときに、別に作ったもう1つのForm2を開きたいのですが、
どうやるのでしょうか?
Form2.Visible := True;
202デフォルトの名無しさん:03/11/18 13:47
フォーム内の複数のコンポーネントを一度に入力不可にするには
どうしたらよいでしょうか?

テキストボックスA,B,C,D,E,Fのうち
A=1 のときは B,Fは入力不可
A=2 のときは B-Fまで入力不可

と、こう言ったことをやりたいのですが、パターン毎にいちいち
B.enabled := false;
F.enabled := false; と一つずつ書くしか方法はありませんか?

グループボックスやパネルなどのコンポーネントは出来れば使いたくありません。
コードだけでキレイに書く方法があれば嬉しいです。
TEditがA〜Iまでの9個、それぞれの場合分けが最高で3つと仮定して、

type
TEditType = record
Edit: TEdit;
ArrBoolean:[0..9,0..2] of Boolean;
ArrEqual:[0..2]of String;
end;

EditType: Array[0..9]of TEditType

を作成。
AのEditが1のとき、EditType[0].ArrEqual[0] := 1;
のとき、EditType[0].ArrBoolean[?.0]を参照すると、
?が0〜9までに、それぞれのTrue、Falseが入ってる
というのはだめ?

もっとスマートなやり方があるかも・・
204デフォルトの名無しさん:03/11/18 14:44
>>202
コントロール名が連番で並んでいる(TextA〜TextFや、Text10〜Text20など)事が条件です。

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  //一旦すべて有効
  for i := Ord('A') to Ord('F') do
    (FindComponent('Text' + Chr(i)) as TEdit).Enabled := True;

  case StrToInt(TextA.Text) of
    1: //A=1 のときは B,Fは入力不可
    begin
      TextB.Enabled := False;
      TextF.Enabled := False;
    end;
    2: //A=2 のときは B-Fまで入力不可
      for i := Ord('B') to Ord('F') do
      //引数と同じNameプロパティを持つコントロールにアクセス
      (FindComponent('Text' + Chr(i)) as TEdit).Enabled := False;
  end;
end;
205203:03/11/18 15:00
追記 注視するEditが決まっているとして、203は以下のように
実現できまつ。

for i:=0 to 2 do
begin
 if EditType[0].ArrEqual[i] := EditType[0].Edit.Text then
 begin
  for j:=0 to 9 do
  begin
   EditType[j].Edit.Enabled := EditType[0].ArrBoolean[j,i];
  end;
 end;
end;

ただ、これだとそれぞれTrue、Falseの入力が面倒かも。
現実的には、>>204さんのが、わかりやすいソースになりまつね。
//インスウ flag:表示フラグ; TEditList:変えたいTEditのリスト;
procedure TextVisible(Flag:Boolean;TEditList:array of Char);
var
i:Integer;
begin
for i := 0 to high(TEditList) do
begin
(FindComponent(TEditList[i]) as TEdit).Visible := flag;
end;
end;

と言うセキスウを使うのはどうだい。
>>202
いくつか考えてみましたが一番短そうなコード.
A,B,C,D,E,Fの6つのエディットコンポがあるとして…

// AのOnChangeイベントハンドラ
procedure TForm1.AChange(Sender: TObject);
begin
Update_Controls;
end;

// Aに合わせてB〜Fを使用可能にしたり不可能にしたりする.
procedure TForm1.Update_Controls;
var
A_Value: integer;
begin
A_Value := StrToIntDef(A.Text, -1);
B.Enabled := not ((A_Value = 1) or (A_Value = 2));
C.Enabled := not (A_Value = 1);
D.Enabled := C.Enabled;
E.Enabled := C.Enabled;
F.Enabled := B.Enabled;
end;
208デフォルトの名無しさん:03/11/18 16:49
実行ファイル自身にデータを書き込むにはどうすれば良いのでしょうか?

例えばa.exeが10秒うごいたら、「10」という情報をa.exe自身で
持っておきたいのです。
(つまりa.exeを再起動したら「前回10秒間起動していました」と表示出来る。)
(他のファイルを参照する事なしにです。)

宜しくお願いします。
209202:03/11/18 17:08
>>203-207
当初>>202さんのような方法を考えていて煮詰まっていました。
コントロールの名前は不定なので>>204さんの方法では難しそうです。
先に書いておくべきでした。

今回の用途には>>207さんのアプローチが適していそうですのでこれを
ベースにいろいろ試行してみます。

みなさんありがとうございました。
210202:03/11/18 17:09
>当初>>202さんのような ×
>当初>>203さんのような ○

でした。
>>204
>for i := Ord('B') to Ord('F') do
>//引数と同じNameプロパティを持つコントロールにアクセス
>(FindComponent('Text' + Chr(i)) as TEdit).Enabled := False;

Char型は順序型の一種だから、Integerを介さなくてもループに使えるぞ。

var
c: Char;
〜〜 中略 〜〜
for c := 'B' to 'F' do
//引数と同じNameプロパティを持つコントロールにアクセス
(FindComponent('Text' + c) as TEdit).Enabled := False;
212デフォルトの名無しさん:03/11/18 18:29
TStringListみたいにバイナリデータを簡単にファイルに
保存したり読み込んだりできるクラスがあれば教えてください。

宜しくお願いします。
TFileStream
TFuckStream
215デフォルトの名無しさん:03/11/18 21:50
aとbと言うfloat変数があって、
if a<>b then
begin
c
end
とやると、a,b両方とも0.1なのにcの処理が始まってしまいます。
これを回避する方法ってないでしょうか?

やっぱりDel厨は馬鹿だなぁぁ。
const e = 0.01;

if a-b < e then
218訂正:03/11/18 21:54
const e = 0.01;

if abs(a-b) < e then
>>217-218
お前には荷が重過ぎる。
やめとけ。回答すんな。
215はうちでは再現しない(cの処理は起きない)けど。
数値をトレースしてくれよ。本当に0.1になってるか。
221デフォルトの名無しさん:03/11/18 23:23
>>215
float変数?float型ってのはないけど…。

procedure TForm1.Button1Click(Sender: TObject);
var
 a, b: double;
begin
 a := 0.1;
 b := 0.1;
 if a <> b then
  ShowMessage('different')
 else
  ShowMessage('same');
end;

これでsameが表示されるけど。なんかもっと複雑な処理してんじゃないの?
計算誤差
a := 0.1;
b := a / 10 * 10;
浮動小数点を等号で比較しとってかんわ。
引き算して機械イプシロンと比較するのが限界だでよ。
224デフォルトの名無しさん:03/11/18 23:28
>>212
TMemoryStream
LoadFormFile(),SaveToFile()が使える。
225デフォルトの名無しさん:03/11/19 00:38
TBitBtnの絵の部分をアニメーションにしたコンポーネントはないでしょうか?

現在、TButtonにTAnimateを上に重ねて、
procedure TForm1.Button1Click(Sender: TObject);
begin
Animate1.CommonAVI := aviFindFile;
Animate1.Active:= True;
//時間のかかる処理・・・
Animate1.Active:= False;
end;
という処理をさせています。

TAnimateにOnClickがないため、ボタン全体がクリックの対象にならない。
ボタンを追加するために、2つのコンポーネントを追加するのがめんどい。

と不満があるのですが、なにか対応方法がありましたら教えてください。

また、TAnimateで使用するAVIファイルを作成したいのですが、
どのようにして作成するのでしょうか?
bitmapのデータ数枚は用意してあります。

宜しくお願いします。
ImageListとTimerでビットマップ更新しろ
何度も使うならコンポーネント化しろ
227デフォルトの名無しさん:03/11/19 00:41
Delphi6 Entなんですが

Splitter1の Width が初期値 100 なんですが 初期値を1に変更できませんか?

Delphi 5 では 1 だったと思うのですが・・・
コンポーネントテンプレートに登録しろ
229デフォルトの名無しさん:03/11/19 01:52
それがどんなに時間がかかって大変かはべつとして、
DelphiでRPGゲームを作るのは可能ですか?
「可能か?可能じゃないか?」「出来るか?出来ないか?」
この質問するヤツは馬鹿。
よく覚えておけ。
232デフォルトの名無しさん:03/11/19 01:58
>>230
サンクス。
とりあえずそこの住民になってみようかな…
>>231
馬鹿なのはお前みたいな回答者。小学生並みの読解力だな。
>>233
何がどうなってそうなるのか知らんが、言いたいことは同じ。
「出来るか?」って聞くなっての。

つーか、233は幼稚園児。
>>231
別に馬鹿ではないと思うが。
もしも不可能なら無駄な努力をしたくないから聞いているんだろ。
>>234
もっと煽り方を勉強汁
>>235
自分で努力しないでどうすんだ。
無駄な努力って何だ。
ただの横着か?
>>237
できないことをしようとするのが無駄ではないと?
まぁ、一生「出来ますかぁ?」って人に聞いてくんだな。
何でも。
240229:03/11/19 02:25
私の質問のせいで荒れてしまったようで、本当に申し訳ありません。
ちなみに私は>>229>>232しか書いていません。
荒れてはいないよ。議論しただけで。
>>215-
SameValueつう関数がMathユニットに有りますぜ旦那。
俺は荒らしているのだが(w
>>225
Rx Library というパッケージの中に入ってる AnimatedImage か RxGIFAnimator は
どうでしょうか?
http://sourceforge.net/projects/rxlib/

どちらも GraphicControl なので、キーボードでは操作できませんし、親にならない
WinControl の上に乗せることはできません。

押したらへこむようにするには SpeedButton あたりのソースを使って枠の部分だけ
自分で描けばできるかもしれません。(試してません)
245215:03/11/19 09:04
>>220-222
レスありがとう。
実際は120-119.9と119.9-119.8等の計算をやっています。
そして、bは配列変数でb array of doubleとしています。
ためしにif not a=b then・・・
とやってみたらエラーになってしまいました。
>>245
「演算子の優先順位」を調べるように。
247215:03/11/19 09:09
>>245
単純ミスで>>245のコードは通るようになりましたが、結局cの処理が始まって
しまいます。

回避策or確認するべきところがあったら教えてください。
procedure TForm1.Button1Click(Sender: TObject);
var
a,b:Double;
c :array of Double;
begin
SetLength(c,1);
a := 120 - 119.9;
c[0] := 119.9 - 119.8;
if a <> c[0] then
begin
ShowMessage('c');
end;
end;

これでも c は表示されませんよ。
c が始まる時、本当に同じ値なのか、トレースしてよ。

それとも >>223 が何か言ってることがネックなのかな。
等号じゃなくて不等号だけど。
249デフォルトの名無しさん:03/11/19 11:35
実行ファイルにデータを書き込んだり、読み込んだりするには
どうすれば良いのでしょうか?

例えば text.exe を起動して「ああああ」とEditに入力して、保存を押して、
再起動して読み込みを押せば「ああああ」と表示されるプログラムを
作りたいのですが、exe以外にファイルを作りたくありません。
レジストリも使いたくありません。

宜しくお願いします。
NT系限定でリソースを更新するAPIがあったような
他にはNTFSだとファイルが複数ストリームを持てたような
>>248
<> は等号比較の否定( != )なので本質的には同じこと。
浮動小数点の比較は < か > を使うべき。

どうしても0.1という値じゃないと(より大でもより小でも)だめというのなら
10倍して整数同士の比較に持ち込む。
実行中に書き換えるのは無理だと思います。
だからやるとすれば、

 自分のコピーを作って、それの後ろにでも追加書き込みして、

 自分の終了時にコピーした方を立ち上げて、そのコピーした方で自分を削除してもらう。
という感じでしょうね。
>>248
フツーの計算機は全部二進数で表されているから、小数も二進数の小数として
表され、10進数で割り切れる小数も循環小数になることがある。
Double型では52ビット目で切り捨てるので、ここで誤差が生じる。
(参考:ヘルプ→目次→ObjectPascal言語ガイド→メモリ管理→実数型)

そんなわけで、この誤差のせいで、同じ値のはずの実数が = で比較すると
違う値として扱われる可能性がある。
偶然同じ値となる場合ももちろんある。

だから実数の比較はSameValue関数、IsZero関数などを用いるべし。
254248:03/11/19 12:53
浮動小数点というのは、なかなかややこしいですね。
SameValue なら
if not SameValue(a,b) then
という形になるのかな。
0.1がまさに二進数の無限小数になってしまう例なのですよね.
Delphi6以降にはBCD型があったと思うのでこれを使うのも良いかも知れません.

(BCD=二進化十進数.4ビット=二進数の4桁に10進数の1桁を入れたもの)
一つのprocedureやfunction、class内のローカル変数としてインスタンスを
生成するのはいいのですが、例えばTTimeのインスタンスを持つような
クラスを作った場合、それが必要なくなるまでインスタンスを保持してなけれ
ばならないですよね。

TFormあたりのprivateあたりにつくってあげればいいと思いますが、
使いもしない可能性があるのに、そういうところにインスタンスを生成する
変数を用意しておくのってイヤじゃないですか?
皆さんはどうしています?

個人的には、TListでポインタを格納し、必要なときそこに入れてあげれば
いいような気がするのですが、皆さんはどのように実装してます?
>>256
たかが4バイト。管理しやすい方法を取るのが一番いいだろ。
つーかTListで保持するとしてもTList分余計にリソース食うわけだし意味ないよな。
可変長のリストを保持するなら、最初からTListや配列を使うだろうし。

>使いもしない可能性があるのに、そういうところにインスタンスを生成する
>変数を用意しておくのってイヤじゃないですか?
お前だけ。
>>257
漏れだけでつかw
これからじゃんじゃん宣言して使います。
259215:03/11/19 19:57
>>222,223
あたりです。floatで比較をやっていたのが原因でした。
文字列に変えて比較をしたらきちんと動作しました。
文字列に変えて比較をしたら
261デフォルトの名無しさん:03/11/19 23:17
長文テキストをある文字数で折り返して表示させたいと思いました。
非プロポーショナルなフォントを使って、Memoに表示させたら
目的は達成しました。(文字数はMemoの幅で決めちゃう)

ただ、例えば秀丸のような、ウィンドウ幅(コンポーネント幅)に関係なく
文字を折り返す方法があれば、後々のために知っておきたいです。
よろしくおねがいします。
ない
GetTextExtentExPointで数えて適当な場所で切る
264261:03/11/19 23:52
>262
いやん

>263
なるほど、必要な文字長は取得できるんですね。
でも改行を挿入しちゃうと、純粋データではなくなるから苦しいですね。
VIEW目的だけならOKなんですが。

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

freeについて質問
マニュアルを読むとメモリを解放するとか書いてあるが
いまいちピンとこない
これをやらないとどうなるのか
誰か教えてください
死ぬほどcreateを繰り返してfreeしなきゃいいんじゃない?
いっぺんやってみ。
どうなるか分かるだろうが、責任はとらんよ。
>>265
プロセス実行中に使えるメモリが増えない。
しょっちゅうハングするんだがfree書いてないことが
原因だったのかな
freeを書くタイミングはフォームを閉じる時でいいのかな
>>268
オイ…。マジレスなんだろうな?釣りじゃないだろうな?
つーか、釣りじゃないなら…

オオオーーーーイ(藁
マジだよマジ
freeについては気になってるんだが意味がわからないので全く使ったことないんだ
Delphi勉強しはじめて一週間。何本か小さいプログラム作ったけど
まだFreeを使ったこと無いのだ
だめかな?
>>270
えーと「意味分かんなきゃヘルプ読んどけ」という言葉を送りますので、
この辺で。
一応「超初心者向け」とついているんだから答えてやれよ。

プログラムってのは基本的に指示したことしかやらないんだよ。
メモリを確保しろって指示して確保した後、
使い終わって必要なくなったらどうするかってのは
指示されなきゃプログラムには分からん。指示しなきゃ確保しっぱなし。
確保されているメモリは他のプログラムからは使えないから、
開放しないで終了したら、そのメモリは使えないまま残る。

それから、確保したメモリは使い終わったら即座に開放するのが礼儀。
>>270
ところでCreateは使ったことある?
Create(稀にCreate以外のもあるけど)をまだ使ったことないならFreeは不要。

逆に、Createを一回使ったら、どっかで一回Freeを使わないといけない。
これも例外はあるけど。
(´-`)。o ○ (でも自分で「メモリを解放」って書いてるしなぁ…)
借りたものは返さないといけないでしょ。
それと同じ事。
現実世界でも Create や GetMem しっぱなしだと
いろいろ問題があるからな。

#はやく6千円返してくれ>某氏
SetForegroundWindowを使っていろんな窓を前面に出してるのですが、
その窓が、モード付きダイアログを開いている場合は、
そのダイアログをさらに前面に出したいです。
モード付きダイアログを出しているかと、そのハンドルを調べられたらできそうです。
どうやって調べますか?
メインフォームのクラス名(TForm1)を変更する方法を教えて下さい。
dprファイルとpasファイル中の名前をすべて置換しただけでは、コン
パイル不能になってしまいます。

なぜこんなことをしたいかというと、FindWindow APIで自分と同じアプ
リのウィンドウだけを見つけたいのですが、タイトルバーのキャプショ
ンがころころ変わるため、キャプションでは検索できないんです。

「TForm1」というクラス名では他のDelphi製のアプリも引っかかってし
まう気がします。
formのname変えれ
280デフォルトの名無しさん:03/11/20 13:57
作成したexeファイルをDelphiをインストールしてないパソコンで実行すると、
「必要な DLL ファイル RTL60.BPL が見つかりませんでした。」
というエラーが出ます。
どうすれば実行できるようにできるのでしょうか。
プロジェクト>オプション>パッケージ の
実行時パッケージを使って構築のチェックを外してコンパイル。
>>279
ありがd! You are God !
>>281

ありがとう!
三日悩んでたのが解決しました。
ADODataSetでXMLファイルを読み込んで、
そのデータでSQL Serverに新規テーブルを作成したいのですが、
どうすればいいのでしょうか…

最初はsp_xml_preparedocumentでXMLファイルを読もうとしたのですが、
SQL ServerとXMLファイルが別々のPCなので。
SQL ServerのPCにXMLを移す方が簡単なのは分かるんですが、
何かいい方法はありませんか?
ここの人たちって、割れの人はともかく、正規でちゃんと買ってる人はどのバージョンかってますか?
俺の場合、とりあえずボーランドからただで落とせたDelphi6パーソナルを使ってるけど。
データベースと連携の機能をよりたくさん使うには、プロ版が必要とか、いろいろ聴くけど、プロ版への乗り換え時期ってどのくらいが妥当なんだろうか。

ちなみにエンタープライズはいくら機能が良かったとしても買えんな。
正直Proはそれこそ業務用アプリ作るときくらいしか要らないと思われるが。
ちなみにDBは詳しい?
>プロ版への乗り換え時期
このスレくらいのレベルを卒業したときじゃないかな?
まぁ利用目的によっては、データベースとかPro版以上のみの機能には興味がない人もいるだろうけど。

あとVCLのソースだけが目的でPro版を買うなら、C++Builderを買ったほうが得、という考え方もある。
>>288
このスレっていっても、質問のレベルは様々だと思うのだが・・・
このスレの全部の質問に答えられないとだめ??
290デフォルトの名無しさん:03/11/20 23:17
>>285
Delphiの内部をのぞいてみたいとき。
もっとDelphiについて知りたいとき。
コーディングをより最適化したいとき。

あとはDelphiの機能比較表を見て欲しい機能があったとき。
291277:03/11/21 00:00
むずかしいですか?
292 :03/11/21 00:05
>>291
冗談でも茶々でも無く、日本語が難しい。
>>287
> ちなみにDBは詳しい?
GT以外なら
294285:03/11/21 00:15
>>287
DBに特に詳しいわけじゃないよ。ただ性能比較表で確かそっち系が優れてた気がするし、データベースアプリを作るエンジンがパーソナルには付属してないということだったので言ってみた。
やっぱシェアウェアとか作るためにはプロを買わなきゃいけないんだよね。
>>288
なるほど。
それじゃあ基礎を固めて本格的にやろうって時が乗り換えどきなのか
こんなこと人に聞いてる俺はまだ、まだまだだなぁ…
>>290
なるほど…やっぱりプロ版のほうが合理的なのか…
295285:03/11/21 00:17
とりあえずみんなに言われたことを判断材料にして、自分で時が来たと思ったら乗り換えることにします。
それが判断できない今は時期尚早すぎるということかもしれない。
それまでdelphiには生き延びていて欲しい。
みんなどうもありがとうございました。
296277:03/11/21 00:21
日本語がわかりにくいならがんばってもう一度書き直します。

Alt+Tabでは切り替えれないウィンドウが存在します。
例えばコントロールパネルの要素などがそうです。
そこで、タスクの切り替えが出来るようなソフトを目指しています。
エクスプローラのウィンドウを捕まえて、全面に出したとき、
このエクスプローラが、バージョン情報などダイアログを出していた場合、
操作できないウィンドウが操作できるウィンドウを隠してしまい、どうにもならなくなります。
そこで、捕まえたエクスプローラを前面に出した後、
そのエクスプローラがモードつきダイアログを開いているかを判別し、
必要ならダイアログも前に出そうということです。
あるいは、自動でモードつきダイアログも全面に出てくれたらなお良いです。

伝わりましたか?


何カ所か誤変換されてますが、「全面」ではなくすべて「前面」です。
>>285
訳もなくプロ版欲しくなるよな。
何がいいのか他人に聞きたくなるよな。
プロが必要なのではなく、買うための理由が欲しいんだよな。
買うとか買わないとか言ってるのが楽しいんだよな。
それって物欲なんだよな。
そういうわけで、金貯まったときが買い時。
スキルや動機は関係なし。
買わなきゃ同じこと何度も人に聞く運命だぞ。
>>296
SetForegroundWindow(GetLastActivePopup(wnd));
>>285
卒研の材料費で7Proを買った
301277:03/11/21 01:36
やってみます
302デフォルトの名無しさん:03/11/21 01:42
>>294
>データベースアプリを作るエンジンがパーソナルには付属してない

確かにBorland Database Engine(BDE)は付属してないけど、これのサポートはすでに終了した。
Proで魅力的なのはデータベース対応のコンポーネント群だよ。あとBDEに代わるADOのコンポーネント。
SQL ServerやAccessに接続するのに使える(ODBCも過去の技術になってしまった)。
もっとも、ADOだけならパーソナルでも接続できるけどね。ビジュアルに開発したいならPro必須。
>>285
つーわけで結論

proじゃなきゃできないことがでてきたら買え
バージョンあげないと辛いことがでてきたら、バージョンあげろ

以上
Personalでも機能としては作成可能なシェアウェアを作りたいなら、
ソフトそのものを完成させてから、公開する前日にPro買って
コンパイルするべし。

Proを買うことを目標にコーディングに励むのだ!
>>304
カコイイ
306304:03/11/21 03:00
>>305
まぁね。
それ言うとダサい
308デフォルトの名無しさん:03/11/21 09:37
あるファイルをDelphiで作ったソフトで編集したいのですが、
そのファイルを他から読み書きできない状態で読んだり書いたりする方法は
どのようにすればよいのでしょうか?
TFileSteream.Create(Filename, fmOpenReadWrite or fmShareDenyNone);
>>309 間違えた
×fmShareDenyNone
○fmShareExclusive
無料で使えると聞いてDelphiやってみたくなったんだけど、みんなは
Delphiのどんなとこが良くて使ってるの?
>>311
ネイティブコンパイルできる
VCLが優秀
オブジェクト指向
RAD環境として優れている
>>311
ランタイム不要
ライブラリが使いやすい
言語仕様がc++よりはるかにすっきりしている
コンパイル早くて快適




と同じことをいってみるテスト
マジな話、C++のコンパイル時間が長くてたばこがどんどん減る。
VCLつかわないものでもDelphiでやるようになった。
>コンパイル早くて快適
これに尽きる。

今OpenGLをいじってるが、OpenGL1.2のヘッダと初期設定周りの
サンプルが少なくてすんげー時間がかかった。それさえ済めば
他言語のサンプルでも理解できるのだが。
Delphiの資料の少なさに苦労したのは久しぶり。
APIレベルになってしまえばどの言語も同じだが、
だからこそコンパイル速いのがストレスたまらない。
ヘッダのコンバートさえあればDelphiの方が効率がいい。
本当に個人的な意見だけど。
Exitした後でも、finallyを書いておくと、それも実行されるのを
最近知った
・・・・鬱

あと、HomeとEndで行頭と、行末に移動できるのも最近知った
・・・・鬱

でも、そのおかげで便利になった。
普通のエディタにも、ctrl、home、End移動がないと辛い今日この頃。
>>317
Home・EndってWindowsアプリの標準ですが。
メモ帳でもWordでもExcelでも、その辺のエディットボックスでも。
319317:03/11/21 17:53
>>318
ガガーンw
ところでGExpertsって使ってる?
>>317
try内でExitすればtry内での最後にとぶってのは常識だと思ってたが
322デフォルトの名無しさん:03/11/21 19:43
ぷろし〜じゃ なんとか
try
 if a=b then exit;
 finally
 ほにゃらら
 end;
ほにゃらら2
end;

こんなプログラムだと、exitする場合にはほにゃらら2も実行されちゃう?
>>322
されない。つーか、自分で試しなさい。
324308:03/11/21 20:36
>>309
レスありがとうございます。

今まですべてStringListを使ってファイルの入出力をしていました。
3000行あるプログラムをすべてfilestreamを使うために大規模な変更を
しないといけないのか・・・_| ̄|○

あと、もう一つ教えてください。
高速なファイル入出力もFileStreamで大丈夫ですか?
それとも他に良い方法があるのでしたらどなたか教えてください。
>>324
あまり褒められたやり方ではないかもしれないが、
TStringListのSaveToFile の代わりにSaveToStreamを使って
TFileStream経由で保存するという手もなくはない。

高速化の件は下を見て判断。
ttp://www.asahi-net.or.jp/~HA3T-NKMR/tips020.htm
今delphiを独学ではじめたばかりですが、まずは初級用の解説書で基本事項を覚える
→あとはコンポーネントや、関数などの使い方を勉強していく・いろいろなテクニックを身につける

って感じで大丈夫ですか?
327デフォルトの名無しさん:03/11/21 21:38
>>326
とにかくなんかソフト作れ。まねっこで構わん。
何でもいいから作らないと覚えないよ。
>>326
人それぞれ。俺は解説書は読まず、コンポをポトペタしながら
コンポのヘルプを読み、言語リファレンスを何回も読んだ。
大事なのはコンポのヘルプは使いたいプロパティ・メソッドを
調べた後、他のプロパティ・メソッドもざっと目を通すこと。

まだ先でもいいが、C/C++を読めるようにしよう。書けなくてもいい。
メモ帳付くってみれ
次が画像ビューアー

漏れは、言語仕様の次はTStringsとか、TStreamとか
学ぶと後が楽だと思うけど、これも人それぞれだな。
330デフォルトの名無しさん:03/11/21 22:12
TMemoでAlignをalClientにすると、Linesで頭にスペースがある場合
表示位置が乱れます。

なにか対策はないでしょうか?

Delphi6
>>317-319
ご存じない方が多いから
最近のキーボードからは独立した[Home][End]キーがなくなってしまうのでしょうね.

>>324-325
テキストファイルでしたらTStringListで
LoadFromStream(ファイルストリーム)/SaveToStream(同)でよろしいのではないでしょうか.
ソースを見る限りどちらも丸ごと読み書きしているので,
実行環境で丸ごとメモリの読み込めるなら(目安としてファイルサイズが数メガバイトくらいまでなら)
この方法が最速ではないかと思います.
332308:03/11/21 23:19
>>325,331
レスありがとう。
とりあえず教えてもらったLoadFromStream&SabeToStreamを使ってみます。

なんか色々と探していたらFDELPHIにLightStringsというのを見つけたのですが、
教えてもらった方法でも遅いようでしたらチャレンジしてみます。
自分はまだVCLの使い方と、基本的なPascalの文法を覚えたくらいのものです。
そこで質問したいことがあるのですが、皆さんはソフトを作る時にどんな工程を取りますか?

いきなり書き始めて、コードをとっかえひっかえしながら完成に近づけていくのか、
それとも一度机の上で(テキストファイルでもいいですが)しっかりと仕様なんかを
固めてから作り始めるか…

そのあたりの経験的な話を聞かせてもらえたらうれしいです。
334裕美子 ◆h8lIp1b.Ek :03/11/22 07:55
私の場合は、まず大きめのスケッチブックを用意して、画面構成のラフスケッチをします。
そしてここのボタンを押したらこんな動作をする。ここのエディットをクリックしたら
こんな動作をして・・・、と詳しく挙動を箇条書きにして、あとはDelphiを使えるひとに
渡してコーディングしてもらいます。
つまり机上での仕様設計が先です。

LSIC試食版を使うときはいきなり書き始めます。
335裕美子 ◆h8lIp1b.Ek :03/11/22 07:58
挙動の箇条書きはスケッチブックのイラストの余白に書いて、四角で囲み、
引き出し線を(矢印の線を)つけて関係するコンポーネントまで引きます。
>>320
おそレスだけど、使ってるよ。ちゅうか、これがないと生きていけない体になってしまった。
職場の同僚のPCにGExpertsが入っていなかったので、一緒にコーディングしていると
とてもやりにくい。。。
ちなみに、漏れが主に使っているのは、以下の機能。
・Grep Search/Result
・IDEの拡張。とくにVCLタブが複数行になってくれるのは非常に便利。
・Backup Project
・Replace Components
・Perfect Layout
>>333
受注の場合は、客先の要望を聞いて、要求定義書を作り、
それをもとに仕様書を作成して、両方とも客のokもらってから
開発してるので、ある程度きっちりしてる。
コーディングの段階になると、今度は機能に従ってクラスを
どのように作るか設計してから作り始める。

勉強のために作るなら、べつに頭に思い浮かべるぐらい
でいいんじゃね?
作っていくと、この機能はよく使うからクラスにしとけばよかった
とか、この機能があると便利とかでてくるから、それを次に
生かせばいい。
339デフォルトの名無しさん:03/11/22 17:22
if StringList1.Count=0 then exit;
って書くとエラーになっちゃうんだけどなして?
その前には
StringList1:=StringList2;
と書いてるだけです。
エラーの種類くらい書くべきだ。
StringList1.Assign(StringList2);
342339:03/11/22 17:28
アドレス7468に対する読み込み違反です。
343339:03/11/22 17:31
>>341
やってみたらAssignするときにまた他のアドレスに対する読み込み違反
になってしまいます。
StringList2がちゃんと初期化されていないからだろ
345339:03/11/22 17:40
>>344
途中でStringList2をfreeしてた。_| ̄|○
つか、こーすればFreeしちゃうなんてことないだろ

procedure TForm1.Button1Click(Sender: TObject);
var
 StringList1: TStringList;
 StringList2: TStringList;
begin
 try
  StringList1 := TStringList.Create;
  StringList2 := TStringList.Create;
  StringList1.Add('test');
  StringList2.Assign(StringList1);
  if StringList2.Count = 1 then
   ShowMessage(StringList2.Strings[0])
  else
   ShowMessage('NoText');
 finally
  StringList1.Free;
  StringList2.Free;
end;
end;
347308:03/11/22 19:48
>>325,331
StringListのLoadFromFileとSavetofileをLoadFromStreamと
SavetoStreamに置き換えたら、
StringとStreamには互換性が無い、と怒られてしまいます。

やっぱり大規模な改造をしないと駄目なのでしょうか?
StringList.SaveToStream('c:\test.tst');とかやってるに100ペリカ。
349308:03/11/22 21:25
>>348
えっ?やっちゃまずいの???(汗)
レベル低すぎ
>>350
まーくだすれだからなw

>>349
入力補完機能で表示されるメソッド(関数)の引数みれば、
Buffer:TStreamとかってなってて、文字列かいちゃいかんこと
がわかる。
異なる変数の型同士で代入しようとすると、そういうエラーがでる。

TStreamの使い方教えてくださいってのはナシね。
TFileStream、TMemoryStream、TStringStreamあたりで検索したり、
ヘルプで使い方を調べて、その上でわからないことがあったら
またおいで。
352デフォルトの名無しさん:03/11/22 21:42
del6とdel8の違いを端的に述べよ。お願い。変わらないなら、もうやめるから。
CLR対応
>>352
さっさとやめろ。ついでに氏ね。
355デフォルトの名無しさん:03/11/22 22:14
TListboxの各列にボタンを貼り付けることは可能でしょうか?
TCheckListboxのチェックボックスがボタンに変わる感じです。
可能
>>356
ありがとうございました。
>>357
どうしたしまして。

次の質問ドゾー↓
>>358
357のメル欄が可愛かったので、
やり方もおしえてあげてw

つか、できるんだね・・しらなかった
360デフォルトの名無しさん:03/11/22 22:44
いつdel9出ますか。怒らないで教えてください。
迷える子羊に愛のお手をください。
実現方法としては、普通にボタンをリストボックスにそのまんま乗っけてスクロールメッセージを拾って
それに合わせて位置を更新する方法もあるけど、スムーズスクロールが入ったりすると上手く処理する方法がない。
オーナードローでボタンを描くのが一番楽。MouseDownあたりで座標で判別しボタンをクリックしたことにするっと。
まあTCheckListBoxと同じ実装方法だな。簡単だよね。
>>361
なるほどーそしてオリジナルコンポーネントが一つ完成でつね
そういうやり方は知らなかった・・
今度勉強してみます
364デフォルトの名無しさん:03/11/22 23:33
del10は幾らですか。安いのかな。怒らないで教えてください。
>>364
あなたの能力によってお金の価値観が変わってくるから
なんともいえんな。

安ほうがいいのは確かだが、あなたが年1億の給料を
もらえるぐらいの能力があれば、例えDelphiが10万円でも
高くはないだろ。

Borlandの価格設定については、彼らに聞いてくれ。
ココにいるだれもが、なんでその価格で販売しているのか
知るよしもない。
>>366
自信があるのならしょうもない屁理屈など書かずに値段をすぱっと書けば良かろう。
空気嫁
369333:03/11/23 01:25
>>334-335
>>338
ありがとうございました。まずは数を多く作ることが大事ですね。
日曜プログラマ(オレ)なら、好きにやればいいんじゃないかなぁ。
特に他人を意識することも無いし。
スパゲッティミートソースで困ることになるのはザラよ(ワラ

最初の頃に作ったツールをずーいぶん後になって見直してみると、
「うわ!なんでこんなことしてたんだぁ?」って思うから面白いよ。
オレだけかもしれんけど。いや、オレだけか。
>>367
マジレスすると、今と物価が変わらないとして定価6万8000円ぐらいだろ。
それが安いか高いかは、価値をどこに見いだすかでそ。
漏れは会社で使っているけど、個人でも買った。
それだけ価値があると思ってる。

>>369
ちなみに、要求定義書も仕様書も、客先とのトラブルを回避するため。
契約で、客も開発者も、それらに同意することなしに次に進めない手はず
になってる。なぜなら、ソフト開発は後から客があれこれ要求を追加して
くることが多いから(もちろん逆もある)。

とはいえ、最初から仕様ががっちり固まっていて、その通りに開発すれば
いいということは皆無だから、勉強のためなら、それほど気にする必要は
ないと思われ。ただ、実際のコーディングの段階で、どうすれば楽に
コーディングできるかとか、後に流用できそうなロジックをいかに汎用的に
作るかということを考えて作るのは重要だと思う。

例えば、iniファイルとか、レジストリに保存したりとか、ファイルを作ったり
とかよくあることなので、そういうのを非ビジュアルコンポーネントとはいわ
ないけど、せめてクラスで汎用的に使えるように作成しておくと便利。

と、言葉でいってもたぶん伝わらないから、結果的にはいろいろ作ってみる
しかないと思う・・・・。


372デフォルトの名無しさん:03/11/23 05:25
もう、delは保守状態に置いた。高すぎ。もう、川ねーよ。
>>370
その通り、趣味なら好きなようにやればいい。
仕事で趣味を持ち込もうとする奴は死んだ方が良いが。
なんか、Tryいつもかかなきゃいけなくて、気持ち悪いね。
どうせなら、言語仕様を変更して

Procedure THoge.Execute();
type
ver
begin
except
finally
end;

にしたらどうよ。もちろん部分で使うことも考慮して、
try〜は残すとして。


びっくりするほどちょーがいしゅつ
procedure TForm1.Button4Click(Sender: TObject);
var
i: Integer;
begin
 for i:=0 to 10 do
 begin
  TabControl.TabIndex := i;
  TabControlChange(sender);
  Button3Click(sender);
end;
end;

全てのタブで同じイベントがしたくてこういう風に書いたのですが
一回目のButton3Clickのイベントが終わる前に、二回目が始まってしまいます。
どうすれば一回目のButton3Clickが完全に終わった後に、
二回目のfor文が始まるようにできますか?
トレースして実行の流れをしっかり確認汁
378デフォルトの名無しさん:03/11/23 20:54
「常に前面に表示」について教えてください。
メインフォームの「常に前面に表示」はSetWindowPos(Slef.handle・・・で
できたのですが、サブフォームを「常に前面に表示」にしようと同じ事を
しても、アプリケーション内でのZOrderしか変更できないようなのです。

もし、サブフォームを常に前面に表示するために、SetWindowPos以外に
やらなければならないことがあれば、教えていただけませんでしょうか。
なお、前面に表示したいサブフォームは複数あります。
>>374
構造化例外を捨て、排泄物VBのエラー機構をまねろと。
雑誌の付録CDに
Borland Delphi 6 Personal
が入っていて、フリーで利用できる、との説明があったのですが
インストールしてみようとすると「インストール番号」「キー」を
問い合わせて来ます。

どうしたらいいの?
>>380
borlandから取得して下さい。
と言うか説明が絶対どこかにある。
読まない雑誌になんの意味があるというのか。
>>378
FormStyle
>>381

_| ̄|○ ども、すいません おこっちゃいやっ

でも、書いてないんだもん。 絶対書いてないんだもん。

ボーランドも引越し中だし...  ・゚・(ノД`)・゚・。

雑誌はだいたい広告を眺めるんです。

 
>>383
サイトが引っ越し中なのは痛いねw
そこまでして苦労したからには、最後まで
あきらめるなよw

>>376
なんかよくわからんけど、
Button3Clickの処理をprocedureにして
結果が帰ってくるまで待つってのはだめなの?
というか、イベントのところには、そんなに長い処理は
かかないほうがいいと思われるが・・・
>>376
ちょっとこれだけじゃ想像力が要りますね。
問題を再現できる最小単位のソースを提示してくれたら結構答えられる人いるかもしれませんね。
  TabControlChange(sender);
  Button3Click(sender);
中身が気になります。
フォームが最大化の時に最大化前のWidth,Heightを取得するにはどうすればいいですか?
>>387
GetWindowPlacement
かな。
検索すればTIPSあるよ。オレの場合はdelphiのが見つからんかったが…。昔の話。
応用すれば。
みなさん、創ったアプリの動作検証は
どのくらいの精度でやってるんですか?

とりあえずアプリの目的範囲内においては
問題ないとの心証を得たのですが、
目的外の用途に使われた場合には保証しかねてます。
変な使い方されて、それでバグ発生して、相手に損害発生、
恨みメールが来て…とか想像すると怖くなります。
>>389
どちらかというと、
http://pc.2ch.net/test/read.cgi/prog/1064399807/
で聞いた方がいいのではないか?
>>389
公開しなきゃ良いんでは?
よもや自分が必要と思わないソフトなんて作らんだろうし。
>>389
目的外使用の部分が、どういう使用をするのかによるけど、
ユーザはとにかくとてつもないことを何でもするから、
ユーザがデータを少しでもいじれる部分、

例えばEditとか、ファイルとか、その他の入出力部分に
関しては、とにかくTry〜Exceptを設定しておいて、
想定するエラーのときは、すべてはじくような形にして
おいたほうがいいと思う。
393389:03/11/24 08:05
>>390
そうですね。若干スレ違いでした。すいません。

>>391,392
レスありがとうございます。
付き合いの関係で公開(?)せざるを得ないのですが、
なにせ相手がソフト等の説明書読まないのは当たり前の上に
「何もしていない」のにzipがワードに関連付けられているなど
若干危険な香りがする人なので…。
とりあえず入力まわりをガチガチに固めてみます。
ご意見ありがとうございました。
394デフォルトの名無しさん:03/11/24 15:41
for i:=0 to 100 do ・・・・
の i の増え方を2ずつとかにしたい場合って、
Whileとか代用するしかなかったですかね?
です
step -1とかやりてーよね・・
downtoつかえ
>>393
>「何もしていない」のにzipがワードに関連付けられているなど
ワラタw
若干どころじゃねぇw
399デフォルトの名無しさん:03/11/24 19:28
エディットコンポでブロックカーソル使いたい。
....使いたい。
不可
・゚・(ノД`)・゚・。
Windows用のゲームとかで自動連射ツールを作りたいのですが、
アプリケーションを起動しているだけでキーボードの特定のキーを押しっぱなしにするのは
どうやるのでしょうか?

ボタンを一個置いて、ボタンを押すとBが押しっぱなしとか
Delphiでは出来ません。
>>402
AttachThreadInput
SetKeyboardState
keybd_event
SendInput

>>403
氏ね
>>401
出来たはずだぞ。エディットボックスのメッセージとかキャレット関係のAPI調べな。

>>404
お前餓死ね。
>>405
確かにキャレットをコントロールするAPIはあるがエディットコントロールに対しては効かないよ。
407デフォルトの名無しさん:03/11/25 01:16
PageControlのtabのCaptionを変えるにはどうすればいいの?
PageControlにCaptionプロパティが見当たらないっす。
408399 = 401:03/11/25 01:20
>>405
できますた  サンクスコ

CreateCaret(Edit1.Handle,0,12,Abs(Edit1.Font.Height));
ShowCaret(Edit1.Handle);
409デフォルトの名無しさん:03/11/25 01:22
>>404-405
>403みたく、根拠を示さずに「できません」などというやつは
Delphiを数時間だけ触ったか、思い込みか、嫉妬に狂ったやつだろう。
どうせVB使ってもVC++使ったとしてもろくな物しか作れないようなレベルの
能力しか持ち合わせていないだろうから、今後一切相手にするな。
できないならできないで、>406のようにいくらかの根拠を示してみるべき。
410 :03/11/25 01:36
>>407
右クリックで「ページ新規作成(W)」
TabSheetが出来るからそれのキャプションを変える。
for
 while
  ここでfor文の外に一気に出るのって、一文じゃ無理ですか?('A`)
 end;
end;
>>409
>>できないならできないで、>406のようにいくらかの根拠を示してみるべき。

いや、出来たってば…
413400=404=406:03/11/25 01:54
>>409
スマン。できた>キャレット
実は簡単な検証してからカキコしたのだけれど、あまりに簡単だったので判断ミスをしてしまった。

403は、ひょっとしたらOS騙すようなより低レベルの制御について言っているのかもしれない。
まあ、俺は完全にできないわけではないのでツッコミを入れたのだけれど。
質問が明確じゃないので手がかり程度は教えたつもりだ。
>>411
goto
>>411
exit for
416デフォルトの名無しさん:03/11/25 03:35
アホな質問で申し訳ありません。
Borlandの Delphi 6 Personal をインストールしたくて
下のページの下の方にある「Delphi 6 Personalのライセンスキーの取得」
って所から、インストールのために必要なインストールキーを発行してもらおうと
何度も登録に挑戦したのですが、
「登録の最終確認のメールを **********@***.co.jp に送信しました」
というメッセージが画面に出るだけで、メール自体は全く送られてこず途方にくれています。
インストール番号とキーの取得方法を知っておられる方がおられたら
何かアドバイスを頂けないでしょうか。よろしくお願いいたします。

http://www.borland.co.jp/delphi/personal/
>>416
待つ。
418416:03/11/25 04:26
とりあえず待ってみます・・・
でも、Borland Mail Newsってメール配信の方に登録したら
数秒後には登録完了メールが到着するんです。
どうしてインストールキー発行の方のメールは届かないのやら・・・
参ったな・・・
>>409
コンピュータに関しては「できない」には理由はないと思うぞ。
仕様とか。
420デフォルトの名無しさん:03/11/25 06:39
>>416

アホな返答で申し訳ないけど、現在(11/25、午前9:00まで)は
日本のBorlandは事業所移転のため、すべてのサービスは停止しているはず、
ネットニュースもアプリのユーザー登録もすべて停止しているのは
ご存知ですよね。アメリカのBorlandコミュニティにアクセスして認証するアプリは
大丈夫のようですけど。
停止していないから、メッセージが出るわけだが。
> ご存知ですよね。
ボーランド社員キターーーーーーーーーーー
>>422
朝からお前は本当にアホですね。
>>423
アホはお前だYO!
停止するのは電話とFAXだけだYO!

http://www.borland.co.jp/about/message/office_relocation.html
> 移転に伴い、弊社への電話、FAXでのお問い合せを一旦打ち切らせていただきます。
>>424
釣れた(藁
Del厨のレベルの低さを象徴する流れですね(藁
なんだ。アホアンチか(藁
アホ社員のせいでクソスレ化しているな(藁
>>416
マジレスすると登録には時間がかかるよ。
俺のときは一週間ぐらいかかったかな。
Del厨はネタも見抜けんのか(藁
メールのプロバイダによって登録されるスピードが違う気がする
ほぼ同時にいくつか登録してみたけど即日だったり数日かかったりする
432416:03/11/25 09:28
ご回答ありがとうございます。
気長に待ってみます。
それと、私のせいで少しスレが荒れてしまったようで申し訳ないです。m(_ _)m
俺はDel6もDel7も、買って一回目のアクチだけは正規にやったが、
二回目以降はキージェネで済ましてる。
ページコントロールで表示するページにCloseQueryがどうしても必要になり、
TFrameではなくTFormをページに使うように変更したのですが、
そのせいで、子TForm内のEditコントロールが、標準の右クリックメニューを出さなくなりました。
OnContextPopupは来てます。
どうにか右クリックメニューが出るようになりませんか?
標準の右クリックメニューもどきのPopUpMenuをつくる
つまりどうして右クリックメニューが出なくなるのか原因を追及しないってか
くだすれだし
>>434

裏技

type
TWinControlCast = class(TWinControl);

procedure TForm1.Edit1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
Handled := True;
with TWinControlCast(Sender) do
CallWindowProc(DefWndProc, Handle, WM_CONTEXTMENU, Handle,
Longint(PointToSmallPoint(ClientToScreen(MousePos))));
end;

Delphi的にはAutoPopup=Falseで、座標判定してTPopupMenu.Popupを呼び出すほうがいいのかもしれない。

procedure TForm1.FormContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
begin
with TWinControl(Sender) do
if not (ControlAtPos(MousePos, True, True) is TEdit) then
with ClientToScreen(MousePos) do
PopupMenu1.Popup(X, Y);
end;

というか、CloseQueryがほしければフレームに同等のメソッドを定義して、親のフォームから呼びだせば済む話なんだが。
438434:03/11/25 17:01
あぁ、この通りパクったらコンテクストメニューは出ました。
でもなぜそうなったのかわからないものを実装したくないので、
CloseQueryとCloseはあきらめます。
>>438
氏ね
単にコンテキストメニュー出せってメッセージを送っているだけだぞ。
分からない部分があるならぐぐりながら読んでいけば理解できる。
プログラムは基本的に知っているか知らないかだと思っているので
あきらめたらいかんぜよ。
441434:03/11/25 18:58
たとえば、なんでwith TWincontrol do じゃだめなのか、
TControlやTCustumEditじゃなんでだめなのか、
なんでEditのDefWndProcはコンテクスト出すのに、ComboBoxは出してくれないのか。
全部理由があると思うんですよ。
でも、TFormとTFrameの違いをひたすら追いかけても理由がわかりそうもないし、
自分のコードに自分でわからないコードが点在するって気持ち悪いじゃないですか。
それよりはTFrameの拡張のほうが自分のレベルにあってる気がするってだけです。
442416:03/11/25 20:19
16時間経ってようやく登録確認メールが届きました
アドバイスをくださった方々、ありがとうございました。
これからがんばってDelphi勉強します(`・ω・´)シャキーン
443デフォルトの名無しさん:03/11/25 21:12
キーボードをエミュレートするときに例えばVキーを押したいときは
keybd_event(Ord('V'), 0, 0, 0);
keybd_event(Ord('V'), 0,KEYEVENTF_KEYUP, 0);
としますよね。
このVの部分を変数に置き換えたいのですが、こういう場合はどうすれば良いのでしょうか>
('V')の部分を(verkey)などとやってみたのですが、うまく出来ません。
>>443
#define VERKEY_V V

でいいんじゃない?

もしくは
int c=0;

c = V;


フォームにボタンを一つ配置して
そのボタンを押すとウィンドウズキー+Mキーが押したのと同じ動作をする
のはどうやるんですか?
>>444
スレタイ読め
>>441
そのまえに>どうにか右クリックメニューが出るようになりませんか?
に答えてくれた人にお礼を言うのが先決だろ

実装したくなければしなければいいが、あえてここで書く必要が
あるのか?質問に答えてくれた人に失礼だろ
>>444
Delphi知らないなら黙ってろよ。つーかカエレ。
449443:03/11/25 21:31
>>444
int c=0の意味が良くわからないのですが、
verkeyの中身は数字で毎回変化するのですよ。
なのでdefineは使えないのです。
450434:03/11/25 21:36
なんで怒っているんだ?
なんかまずいこと言ったか?
for文に複数の文をいれることはどうやるんでしょうか。
for i=0 to 9
  for j=0 to 9

  next j
next i
for(i=0;i<=9;i++)
{
  for(j=0;j<=9;j++)
  {

  }
}
for i=0 to 9 do
begin
  for j=0 to 9 do
  begin

  end;
end;
>>454
×i=0 j=0
○i := 0 j := 0
おちえてください。
OLE Drag&Dropを監視するプログラムを作りたいのですが
OLE Dragの監視って何を監視したら良いのでしょうか?
要は色々なアプリ上でOLE Dragが開始された際にヒョコッと小窓を出したいのです。
よろしくお願いします。
怒ってるヤツはどうでもいいが、それより434の症状を再現出来ん。
シーケンサーみたいなのを作ってます。
ApplicationEvents.OnIdleでループさせてるのですが、
これだと曲の再生中にウィンドウをドラッグして移動しようとするときに
アプリの動作が止まってしまい、再生中の曲も止まってしまいます。
TTimerだと精度が悪いし、他に良いループのさせ方があればご教授いただけませんか。
459443:03/11/25 22:20
どなたかよろしくお願いします。
>>458
スレッド使え
>>445
ttp://hp.vector.co.jp/authors/VA009712/take/delphi/kabesys.htm#allminimize

APIかインターフェイスかなにかあると思ったが見つからん。あったら俺も知りたい。
ちなみに自前で同様のことをするだけならば、列挙して最小化するだけです。
>>443
a, b, c: Byte;
好きなの使え。
>>443
Edit1,Memo1,Button1を貼って

procedure TForm1.Button1Click(Sender: TObject);
var vkey:Char;
begin
Memo1.SetFocus;
vkey:=Edit1.Text[1];
keybd_event(Ord(vkey), 0, 0, 0);
keybd_event(Ord(vkey), 0,KEYEVENTF_KEYUP, 0);
end;

でいいっすか?
464443:03/11/25 22:43
>>463殿
ありがとうございます。これでいいっす。
でも、すみませんがもう一つ教えてください。
StringsあるいはintegerをCharに代入するにはどうしたらよいのでしょうか?
helpを見たのですが、見当たらないっす。
どなたかよろしくお願いします。
465443:03/11/25 22:46
Chr()でくくったらできたっす。ありがとうございました。
>>456
SetWinEventHookなど。
Accessibilityについて調べると幸せになれるかも。
467443:03/11/25 23:20
はれれ???出来たと思ったのにできていなかったっす。

var
slip:integer;
slipkey:Char;

begin
Slip:=5;
Slipkey:=Chr(Slip);
keybd_event(Ord(Slipkey), 0, 0, 0);
keybd_event(Ord(Slipkey), 0,KEYEVENTF_KEYUP, 0);
end;
とやっても5は入力されないっす。
>>466
情報どもです。
調べたとたん激しく欝になりました…
使いこなせたら幸せになるんでしょうけど…
世界を見てもDelphiでの利用を公開している人少ないし… (T-T
現在解読中ですが、引き続き情報お待ちしています。
>>467
var i:integer;
iが0〜9なら //10以上は自分で考えてね
if (i=>0) and (i<10) then
vkey:=inttostr(i)[1];
470443:03/11/25 23:39
>>469
できました。ありがとうございました。
Delphiって、VBのようなデバッグ用トレース窓って無いんでしょうか?(*゚∀゚)
472458:03/11/26 00:41
>>458っす

>>460
ども。
http://www.borland.co.jp/tips/delphi/dh004/thread_1.html
http://www.wwlnk.com/boheme/delphi/techdoc/dad0010.html

この辺りを見て実際に作ってみましたが希望する動作が得られませんでした。
自分のコーディングが不味いのかなと思い、下のURLのサンプルを実際に作ってみましたが
やはりウィンドウのドラッグ中は処理が止まっているようです。
残念・・・。
>>自分のコーディングが不味い
460じゃないですが、
スレッド使うしかないでしょう。
でも初心者がスレッドが使えるようになるには少々高い壁が有りマス。
ご希望の動作は正しくスレッドが動作すれば実現しますんでがんばってみてちょ。
>>472
つか、スレッドの定義と、音をならすprocedureの中身ぐらいなら
短いと思うし、ここでさらしてみそ。

ただ、 リンクにあった例そのままSynchronizeを使っていると、
やっぱりドラッグ中に停止しちゃうんじゃないかな。
Thread.Executeのところで音を鳴らしてみそ。
>>471
イベントログはPro以上だったかな。
まあ、AllocConsoleしてWriteLnで問題無かろう
特定のTRichEditが挿入モードになっているか上書きモードに
なっているかを判定する方法を教えてください。
478デフォルトの名無しさん:03/11/26 12:09
StringにRecord型を代入したいのですが
やり方が解りません
だれか教えて〜

TEEE = record
aaa: String;
bbb: String;
end;

var
EEE:TEEE;
KKK:String;

KKK := EEE;????

>>478
なんじゃそりゃ・・

単純に

kkk := EEE.aaa;
じゃだめなのか?
>>478
KKKにはいったい何が入る予定なのでしょうか(^^;

aaa+bbbという文字列が入ればいいなら
KKK:=EEE.aaa+EEE.bbbですし
KKK[0].aaa、KKK[1].bbbなどのようにコンテナ代わりに使うのであれば
KKKにStringを使うのは間違いでTListを使います

EEE:TEEE;
KKK:TList;

KKK:=TList.Create;
KKK.add(EEE);
481477:03/11/26 12:38
>>477
すみません。解決しました。

デフォルトが挿入モードなので、Insertキーの押し下げをチェックしておけば
いいんですね。
起動後に最大化や最小化した場合ではなく、
ユーザーが実行ファイルへのショートカットを作成し、
最小化起動や最大化起動を指定したときのデバッグをしたいのですが、
どう設定すればいいんですか?
CmdShow
484新規:03/11/26 16:40
>>468書いてみましたがうまくいきませんでした。
EVENT_SYSTEM_MENUSTARTは反応しますが、
EVENT_SYSTEM_DRAGDROPSTARTは反応がありません。
詳しい方よろしくお願いします。
library DragStart;
uses Windows, SysUtils;
var Handle: THandle;
procedure WinEventProc(hWinEventHook: THandle; event: DWORD; hwnd: HWND;
idObject, idChild: Longint; idEventThread, dwmsEventTime: DWORD); stdcall;
begin
case event of
EVENT_SYSTEM_MENUSTART: Beep;
EVENT_SYSTEM_DRAGDROPSTART: Beep;
end;
end;
function SetHook: Boolean;
begin
Result := False;
Handle := SetWinEventHook(
EVENT_MIN,EVENT_MAX, 0, @WinEventProc, 0, 0,
WINEVENT_OUTOFCONTEXT or WINEVENT_SKIPOWNPROCESS );
if Handle > 0 then Result := True;
end;
function UnHook: Boolean;
begin
Result := UnhookWinEvent(Handle);
end;
exports SetHook,UnHook;
begin
end.
usedefchar:=false;
SetLength(s,WideCharToMultiByte(CP_UTF7,WC_SEPCHARS or WC_DEFAULTCHAR,pwchar(Text),Length(Text),nil,0,nil,@usedefchar));
WideCharToMultiByte(CP_UTF7,WC_SEPCHARS or WC_DEFAULTCHAR,pwchar(Text),Length(Text),pchar(s),length(s),nil,@usedefchar);

UTF7変換をしようとしているのですが、sが空っぽです。
上記三行目にブレークポイントを置いてみたのですが、
SetLengthでsはぐちゃぐちゃの値になってるはずなのに、''のままです。
パラメーターが間違っているのかとおもいますが、どこがおかしいですか?
>>461
>列挙して最小化するだけです。
漏れはkeybd_eventでWindowsキー+Mキーを押してやればいいだけのもんだと思ったんだが。
>ウィンドウズキー+Mキーが押したのと同じ動作を
手でキー押す代わりにボタンクリックしてキーイベント起こすってこってしょ
>>485
MSDNの英語のヘルプ嫁。原因が書かれているよ。
>>376
ひょっとしてTabControlChangeかButton3ClickからButton4Clickが呼び出されたりしてたりして.

>>467 = >>443
Chr(5)は文字コード5の文字を返します(ちなみに'5'の文字コードは53です).
5という数を'5'という文字に変換するにはIntToStrで文字列に変換してその先頭1文字を代入.
slipkey := IntToStr(Slip)[1]
>>488
と思ったら>469にレスあるじゃん.あほだ.
TThreadを継承したunitから外部のユニットまたはdllの関数をよびだしたら
スレッドはTThreadを継承したunitとはべつのものになるんですか?
491485:03/11/26 19:02
>>487
なんて書いてありますか?
VS.netのヘルプが手元にあるんですが、どこが違っているのか気づけません。
>TThreadを継承したunit
??意味不明。「TThreadを継承したクラスのメソッド」の間違いでは?
unitってのは単なるソースファイルの概念ですよ。

>べつのものになるんですか?
なりません。
>>484
そんな馬鹿な! 色々試してみました。だめでした。
SDKのほうのToolでも試してみたけど反応ないですね。
というわけで、この方法では無理ぽい。

素直にOLE周りで通知を受け取る方法がないかのう。
>>491
とりあえず、お前はエラーが起きていることに気づけ。というか調べろ。
そんでもって、dwFlagsの説明をちゃんと読む。否、全部読め。
ちゃんと解説が書かれているんだから、読めばわかる。
495485:03/11/26 19:49
どうやら私には無理みたいです。
あきらめます。
496484:03/11/26 20:15
>>493
オプションを弄っても変化なしですよね。
Dragの開始時にアプリケーションから送られる
って書いてあるんですけどねー。
うーん分かりません。

これさえ分かれば

ttp://www.ki.rim.or.jp/~kami/
ってソフトと同じことができるんですが・・・。
ひょっとしてOLE D&Dをやりたいだけなのか? それなら簡単だぞ。
俺はてっきり外部からOLE D&Dを検知して何かをするものを作りたいと思っていた。
リストのインデックスが範囲を超えているというエラーがでます。
恐らくStringListのindexが範囲外の数値になっているので
エラーになっていると思うのですが、StringLisrは他でも多く使用
しているので、実際にどのStringListのインスタンスでエラーが発生
しているか突き止めることが困難です。

こういう場合、どこに着目すれば範囲外の数値をしている箇所を
求めることができるのでしょうか。
よろしくお願いいたします。
呼び出し履歴
500484:03/11/26 20:52
>>497
>外部からOLE D&Dを検知して何かをするものを作りたい

それです。

紙にはその機能が実装されていて、
テキストなどをDragすると小窓が現れます。
早速のレスありがとうございます。

>>TThreadを継承したunit
>??意味不明。「TThreadを継承したクラスのメソッド」の間違いでは?
>unitってのは単なるソースファイルの概念ですよ。
あー、そうですね。ものすごく基本的な勘違いをしてしまいました。

>>べつのものになるんですか?
>なりません。
ということは、DLLとかから関数を呼び出しても呼び出した側と同じスレッドで命令が実行されるということですね。
>>456 引き続き…

>>484 あと一息のソース

MSDN
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msaa/msaapndx_5k53.asp
ここに下記のことが書かれています。
The events
EVENT_SYSTEM_DRAGDROPSTART,
EVENT_SYSTEM_DRAGDROPEND,
EVENT_OBJECT_HIDE, and
EVENT_OBJECT_PARENTCHANGE
are not sent by the window object.
This is a known issue and is being addressed.

not sent by the window object.
とありますがこれはDLLで持てって事でいいんですよね?
This is a known issue and is being addressed.
でここの意味を訳せるかたいますか?(直訳ぢゃなくって
デルファイで、別のプログラムを実行するにはどうやるのでしょうか。
ランチャーみたいなのを作りたいんですけど。
>>503
ShellExecuteEx
505458:03/11/26 23:34
>>458ッス

>>474
>>475
ども。

Thread.Executeの中で音を鳴らしたら希望する動作が得られました。
うーむ、Form1に置いてあるTDDSDの手続きを実行してるんだけど、大丈夫なんかな?
どういうときにSynchronizeを使えばいいのかがいまいちわからん・・・。
もっと勉強しまつ

ありがdございました
>>500
オレもOLE D&Dをいろいろ検索したけど、なかなか無いよ。
ここで聞いてすぐに情報が入手出来るほど甘くないと思うんだが…。

グーグルの「英語のページを検索」で探せば無くは無いと思う。
だけど、ソレを読む力&理解出来る力が必要…なのは言うまでもない話。
実際、オレも読もうとするけどなかなか気力が(藁

もっと簡単に事を運びたいなら、本を買うことかな。
たっかい本を。オレみたいな貧乏人は買えないヤツ(藁
>>505
やっぱりSynchronizeしてたのかw
例えばフォーム上に存在するオブジェクトに何かしらの
イベントや、変更があったとして、そこに、そのフォームと
はまったく同期して動作していないスレッドがちょっかいを
だしたらどうなる?

同期していないが故に音が途切れず成るのだが、逆に
そのために変な挙動を起こすことがある。

フォームの動きやイベントとは関係ないところ、大きな間違い
かもしれないけど、Create時に親を指定しなければならない
ようなインスタンスをいじくるときには、Synchronizeすればいい。
508484,500:03/11/27 01:29
>>506
>ここで聞いてすぐに情報が入手出来るほど甘くないと思うんだが…。
確かにそう思います。
メーリングリスト入ろうかなー。

と言うかその前に私は質問主じゃないですよ。
>>484に新規って書いてあるのは新しく入ってきたって
意味で書いたんですけど、分かりづらかったかなー。

>もっと簡単に事を運びたいなら、本を買うことかな。
もしお勧めの本がありましたら教えてください。
私は高い本でピンポイントで知りたい場合は国会図書館を利用しています。

>>502
リンクがうまく飛べなかったので張りなおしておきます。
http://msdn.microsoft.com/library/en-us/msaa/msaapndx_5k53.asp

>>484を書くときに参考にしたところ
http://www.microsoft.com/japan/msdn/accessibility/general/atg_consoleaccessibility.asp


509500:03/11/27 01:33
>>508
ありゃ、勘違いしたか…。失敬。

本は…人それぞれだからなー。
すいません。
昔「Borland C++ Builder」のスレで見かけたのですが
コードエディタを変更できるソフトってDelphiでもありませんでしょうか?

標準のエディタですとカーソルがどこにでも行ってしまうじゃないですか。
「秀丸」みたいに改行すれば行毎に印が入って便利ですよね。
>>508
どうでもいいけど、SetWinEventHookは無理と書いてるのでこれ以上それについては深追いする必要なし。
現在、OLE周りを追ってたりするけど、疲れてきたので放置しちゃうかも。
一番はいいのは作者本人にお聞きするのがいいかと。

OLE Drag Event Notification Notify などで検索しているけど、ぴったりな方法が見つかってない。

で、発想をまたまた変えて、こんな方法で実現してみました。

procedure TForm1.Timer1Timer(Sender: TObject);
const
QueryWndName = 'CLIPBRDWNDCLASS';
var
Info: TGUIThreadinfo;
Buf: array[0..255] of char;
begin
Info.cbSize := SizeOf(TGUIThreadinfo);
if not GetGUIThreadInfo(0, Info) then
Exit;

if Info.hwndCapture <> 0 then
begin
GetClassName(Info.hwndCapture, Buf, 256);
if StrComp(QueryWndName, Buf) = 0 then
begin
Caption := 'Dragging';
Exit;
end;
end;
Caption := '';
end;
サンプルですが、つまりドラッグするとき必ずキャプチャー状態になり、OLE D&Dを管理している
ウィンドウにキャプチャーが設定されるわけです。それを検出する。
この例ではクラス名で判定していますが、実行ファイルまたはDLL名で判定するともっと精度が高まるかな。
それよりも、XPで試しただけなので、他のOSでも使えるかどうかわかりません。
ちょっと裏技気味な方法ですしね。でも使えるならこれが楽かなあ。
あたり前だけど、タイマよりメッセージフックで適当なタイミングでチェックしたほうが負荷が少なくていいよ。
Kami.dllの解析によると、おそらくグローバルフックで、GetCaptureとGetClassNameAで判定しているぽい。
やっぱり、キャプチャでやる方法でよかったようです。
>>511
おおおっ凄いです!
この2日間、仕事を適度にサボりつつ色々模索していたのですが
私が想像してた以上にスマートな解ですね。(マウスカーソルで判別したりとか検討してました…鬱
今晩でも全てのOS環境で動作確認してみます。
本当にありがとうございました。
PS.私が質問者ですが、この問題に興味を持ってレスくれた方って数名いるんですよね?
リッチエディット2.0をラップしたコンポが昔あったようなのですが、
もう手に入らないんですか?

>>511のソースで動作確認しました
× windows95 IE3.0
○ windows98 IE5.0 以降
windows95用のIE4.0が入手できないのでこれ以上詳しく調べられません。
このソースで動作保障するのであれば98以降と表記するのが妥当そうです。
>>511
こんな方法が。
WH_MOUSEでHOOKをかけて
ダウンでタイマー開始アップでタイマー加除でいいのかな?
もっとスマートなやり方があったら教えてください。

>>513
DLLの解析ってどうやるのでしょうか?

>>514
多分書き込んでいたのは4人かなー。

>>516
ちょうど今組み込めそうなソフトが98以降だったんでありがたい。
>>516
きちっと教えたのに、理解してくれないとはこれ如何に!

95で動かないのはAPIが対応していないだけ。511はあくまで検知のサンプル。
実装は513で挙げたように、SetWindowsHookEx GetCapture で行えばどんなOSでも動く。
というか、この方法で実装するしか美しい方法はない。
タイマでループするなんてダサダサじゃん。そんなのは三流のすることだよ。
512で動くか動かないと言ったのは、クラス名がCLIPBRDWNDCLASSがすべてのOSで
同じかどうかと言ったまで。各OSが同じかどうかは調べないとわからない。
>>516 です。
私が馬鹿でした T-T
下のソースで全ての環境で動作確認しました。
ごめんちゃい…
var
Hook:HHOOK;
TargetWnd:HWND;
Form1: TForm1;
implementation
{$R *.dfm}
function JournalRecordProc(nCode:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
var
pEvent: pEVENTMSG;
h:HWND;
Buf: array[0..255] of char;
begin
if nCode < 0 then begin
result := CallNextHookEx(Hook,nCode,wParam,lParam)
end else begin
h:=GetCapture;
if h>0 then
begin
GetClassName(h, Buf, 256);
Form1.Caption:=Buf;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Hook := SetWindowsHookEx(WH_JOURNALRECORD,@JournalRecordProc,hInstance,0);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(Hook);
end;
end.
GetCapture は自スレッドのみ。
はい次。
↑そう思ったんだが
>>520はなんかできてる。
タブが切り替わったりパネル間でフォーカス移動してもどったときに、
自分の子コントロールのうちどれが最後にフォーカス持ってたかっていうプロパティはないの?
>>513
DLLをクイックビューア・・・は今は付属していないので
ディスアセンブラやExeScopeで覗いてみれ
>>523
勝手に記録して下さい。
>>510
フリーカーソルは
http://homepage1.nifty.com/fuu/software/nonfreecursor.htm
で無効にできると思います(試していない)
あと、上検索とGexpertsを入れておくと便利かも。
はずしてたらごめん。
フリーカーソルネタも定期的に出るね。

>DLLの解析
ソレってリバースエ(略)
>>524
DLL解析やってみました。
APIをみるだけなら意外と簡単!
引数を見れるのがあったのですが、なんだか見当はずれ。
WH_KEYBOARDじゃないだろさすがに。
基地外の作者に通報しますよ?
繰り返しの途中で脱出ってどうやればいいんですか?
HSPの:breakみたいなやつです。
531break;:03/11/28 00:47
break;
みなさん、Winnyの次のソフト作るときが来ましたよ!
>>530

ありがとうございます。
>>529
ごめん調子に乗ってた。彼だけは・・・。
>>515
『RichEdit98』のことでしょうか.
数年前に使ったときはちょこちょこ(割と単純な)バグがあって(レポートすればよかったですね)
何カ所かソースを直して使ったものです.
『Torry's Delphi Pages』でダウンロードできるようですよ.
>>527
テンプレ化希望…って前に書いたような気がします.でじゃびゅ?
次のスレを立てる方,よろしくお願いします.
Text1.txtとText2.txtの文字列の違いを発見するプログラムの作り方を教えて

たとえば
Text1.txt=あいうえおかきくけこさしすせそ で
Text2.txt=あいうえおかきくけこさしせすそ だったら
「す」と「せ」が違うってでてくる
お世話になります。
http://forum.nifty.com/fdelphi/samples/01398.html
に"IEのキャッシュファイルを列挙" のサンプルプログラムがあるのですが
使い方が分かりません…
例えばListBoxに「ローカルファイルの名前から、元の URLを取得する」にはどうしたら良いのでしょうか?
ListBox内「ローカルファイル名,元URL」

TEnumCacheFilesProc = function(lpCacheEntry: PInternetCacheEntryInfo;
  Param: Pointer): Boolean; //列挙を続けるには Trueを返すこと。
これを見ただけで??なレベルの者です;;
>>536 後は適当にどぞ
function CompareStrWS(strA,strB:WideString):string;
var i,p:integer;
bufstr:string;
begin
if Length(strA)>Length(strB) then
i:=Length(strA)
else
i:=Length(strB);
bufstr:='';
for p:=1 to i do
begin
if strA[p]<>strB[p] then
bufstr:=bufstr+strA[p];
end;
result:=bufstr;
end;

procedure TForm1.Button1Click(Sender: TObject);
var strA,strB:WideString;
begin
strA:='あいうえおかきくけこさしすせそ';
strB:='あいうえおかきくけこさしせすそ';
button1.Caption:=CompareStrWS(strA,strB);
end;
539デフォルトの名無しさん:03/11/28 15:03
二つのmp3ファイルをくっつけて、一つのmp3ファイルにするには
どうすれば良いのでしょうか?
Delphi7でIdFtpを使っているのですが、
Putの時にエラーが出て、それがtry 〜 exceptで拾うことが出来ません。

try
 IdFTP.Put(SendFile, ExtractFileName(ifo.FileList[i]), False);
except
 on e:Exception do begin
  例外処理
 end;
end;

エラーダイアログは「Can't open data connection.」と出るのですが、
IndyのソースをGrepしてもRSFTPCantOpenDataConnリソース文字列の定義を確認しただけで、
RSFTPCantOpenDataConnがどこで使われているのか分かりません。

どうすれば、このエラーを拾うことが出来るのでしょうか?
よろしくお願いいたします
>>537
そこにあるCacheFileNameToSourceUrlを使えばいいいのでは?
丸い形のウィンドウとか△の形のウィンドウとかを作るにはどうやればいいんでしょうか?
>>542
リージョン
「アサートの使用」について、ヘルプを読んでもよくわかりません。
デバッグ時はチェックし、リリース時は外すということらしいのですが、
はじめから外しておいた場合、デバッグ時には何が出来なくなるんですか?
ジャニオタの盛り上がりはいつみてもすげえな
うわあ、誤爆した。すまん
548名無しさん:03/11/28 20:37
フリーのpersonal版って会社のパソコンに入れても問題ないんですよね?
「aaa ! bbb」という文字列があったとして
「!」以下をカットして「aaa」にするには
どうしたら良いのでしょうか?
あのな関数を聞くヤツが多いが、関数こそヘルプで一発でわかる。
調べるのが面倒くさいからといって、ここで聞くな。

まず
http://www.borland.co.jp/tips/delphi/dh002/index.html
で調べてみろ
他のアプリケーションをSleep状態にするにはどうすればいいですか?
>>499さんありがとう
>>498で質問したものですが、
エラーがでて止まるところが
Application.Run;
となっているところで、ブレークポイントをどこに設定していいかわからず、
結局デバッグできずじまいです。

Indexの範囲を超えているとのことですので、StringList等のIndexが
範囲を超えて選択してしまっていると思うのですが、
未だに場所が特定できません。
どなたか、こういう場合のデバッグについてご存じのカタられましたら、
教えてください。
>>550
どれに対するレス??
>>544
Delphiヘルプの『Assert 手続き』の項をご覧ください.
『キーワード検索』タブで"Assert"と打ち込めばこの項がヒットすると思います.

>>548
入れるだけなら問題ないと思われます.
作ったプログラムをお仕事で使うのは×.
555552:03/11/28 22:08
連続投稿すいません・・

ひょっとしてエラーのありそうなところに
try〜exceptを書いて、何か表示させたり(例えばshowmessage)すれば、
場所が特定できますか?それでも、それは無理ぽ?

もうどこをみたらいいのかわからんので、片っ端から書いてみようかと
思っているのですが、他の方法なんかあるのでしょうか。
>>552
呼び出し履歴 の機能なかった? なければすまん。proでは使える。
この機能を使えば、呼び出し元がだいたいわかるので、複雑なコーディングをしていない限り、
原因が見つけるのは容易です。

なければ、地道に探していくしか方法はなし!
>>551
テバッガで停止させる以外は、恐らく方法はない。
無理やりスレッドを停止させることはできないわけではないけれど
その場合プロセス空間が同じである必要がある。
>>552
恐らく
> Application.Run;
の行の色が変わっていると思いますが,実際にはその直前の行からの呼び出しで例外が発生しています.
直前の行にブレークポイントを置いて,そこからトレースしてみてください.

>>553
恐らく>549
(1)'!'の場所を探して(2)そこから最後までを削除して(3)残りの末尾の空白を切り捨てる.
オンラインヘルプでVCLリファレンス→ルーチン一覧(カテゴリ別)→文字列処理ルーチン,で
どんな関数や手続きがあるかざーっとでいいから見てみてください.
>>548
問題あるよ。
勤務時間内で作成したものは仕事で作成したと通常はみなされる。
よって仕事中に使うのはperでは×。
仕事に使わないものを会社のPCに入れるのは普通は×。
私物のPCに入れて休み時間や勤務時間外に使うのは○。

>>552
焼畑デバッグをすれ。地道に探すときは、BPをケチっちゃいかん。
よほど巨大なプログラムじゃなければ30個も仕掛ければだいたいつかめる。
560デフォルトの名無しさん:03/11/29 00:45
質問させてください。

文字列の中に半角かながあるかどうかを調べるプログラムを
書きたいのですが、どのようなロジックがお勧めですか?

561デフォルトの名無しさん:03/11/29 00:51
562552:03/11/29 01:21
皆さんありがとうございます。
がんばってみます。

>>559さん
焼畑デバッグをすれ。地道に探すときは、BPをケチっちゃいかん。

す、すいません、意味がよく・・・・
詳しく教えてください。
>>552
具体的なエラーの発生箇所がわかっていないということなのか?
普通インデックスのエラーで例外投げられたらのその行でデバッガが停止するだろ。
ちゃんとデバッグ情報生成してるか?
564552:03/11/29 01:32
>>563さんありがとうございます

普通はそうなんだと思うのですが、
例えばProject1.exeを作っているとして、project1.dprのところで
止まってしまうんです。

例の
program Project1;

から始まって、
Application.Run;
End.
で終わるヤツです。

なので、どこをみればいいのかさっぱりなんです。

>>558さんに教えて頂いた方法をやってみようと思っています。
いまは、ソースがないので、せっかく教えて頂いたのですが、
まだ試していません・・・・

ああー、自分で作成したところのバグならいいのですが、
他から購入したコンポーネントなんかも使っているので、
そうでなければ・・・と思っています。
このコンポが利用できないとなると、もうどうすればいいやら・・
非常にかっこうわるい方法だが、

「疑わしいと思う所」に
ShowMessage( 'ここは通過したぞ!' );

って書いていちいち動かしてみたらどーだろうか?
↑が出る所までは、ちゃんと動いてるってことになる(突き止められるまで
徐々に挿入する箇所を動かしていく)。
だめ?(藁
566552:03/11/29 01:43
>>565さんありがとう

めぼしいところではそれをやってみました。
でも、ひっかからなかった・・・・

あと、try〜exceptを利用して、発生源と思われるところで
エラーがでたらShowMessageで「ここだよ」と表示させるように
してみることもしてみたのですが、それでもうまくいかなかった・・・。

そのめぼしいところがズレているんでしょぅねきっと・・・。
いくらtry〜exceptをいろんなところに設置して、
試してみてもひっかからないので、本当に、exceptの処理で
確実に例外が処理されるのかなぁなんて、不安になっていたり
してすます。ウワワワン

>>566
改めてレスを読み返してみたけど(オレが思ってたのと、ちょっと違った(^^;)
、エラーメッセージがどんなか書いてないよね?
何て出てるの?
正確なメッセージ(一字一句正確に)書いてみた方がいいような…。

あと、「Application.Run;」の前には何があるの?
フォームの生成で引っかかってそうだな
パソナルにも呼び出し履歴はあるけど、それは試してみたの?
569デフォルトの名無しさん:03/11/29 10:12
トランスレーションツールを使うと、
VCL内部のエラー文字列は別言語に変わるんですか?
どういう仕掛けか教えて下さい。
自分の持ってるエディションにはツールが無いので。
resourcestring
571559:03/11/29 12:12
>>552
焼畑デバッグというのは言葉通り。
畑を焼くように正常に動く箇所をどんどんはずしていくやり方。
ソース中のfor文やif分岐、変数をいじっているところ、
オブジェクトを作成しているところ、削除しているところ、などなどに
片っ端からBP仕掛けてプログラムを実行する。
変数の中身とか、ポインタ使っているならポインタアドレスとかをチェック。
ループ内に仕掛けたBPはループを完全に抜けるまではずさない。
2回以上呼ばれる関数に仕掛けたBPははずさない。
んで、正常に動いているところのBPからはずしていく。
了解。>>569

リソースDLLウィザードはコード吐き出すんですが、
>[RC エラー] Project1_DRC.rc(281): Invalid escape sequence
>[RC 致命的エラー] Project1_DRC.rc(1): Compile
>[警告] Project1.dpr(10): ファイル 'Project1_DRC.res' が見つかりません
>[エラー] ファイル 'Project1_DRC.res' が見つかりません
です。
rcファイルは、あるんですが、resファイルは無いですが、どうしましょう。
>>572
それリソーススクリプトの文法エラー
その通りですた。>>573

もう一回やり直したら、リソースコンパイルがエラーってるようです。
>コンパイル
> [RC エラー] Project1_DRC.rc(311): Invalid escape sequence
> [RC 致命的エラー] Project1_DRC.rc(1): Compile
> [警告] Project1.dpr(10): ファイル 'Project1_DRC.res' が見つかりません
> [エラー] ファイル 'Project1_DRC.res' が見つかりません

こんなこと言われても、ウィザードに従っただけなんだけど。。。
575574:03/11/29 15:41
よく見たら、572も574も同じエラーメッセージだ...
576574:03/11/29 16:01
英語(米国)のリソースに日本語が入っているところで、エラーしてました。
リソースファイルは、その国のWindowsで編集するべき?

教えてください。
OwnerDrawでListViewのHeaderの色を変えようとがんばってるんですが
Columns[0]のTextがColumns[1]にも入ったり、その逆もあったりでもうだめぽ
ちなみにここを参考にしてます。
http://forum.nifty.com/fdelphi/samples/01281.html

当然のことながらカラムを全部他の色に統一したいんで試行錯誤してるんでしけど
(クリックとか関係なしに起動から終了までずっと

もう頭の中こんがりです。
OwnerDraw以外に方法あればそちらもご教示お願いしま
インターネット経由でparadoxファイルの更新は可能ですか?
579いなむらきよし:03/11/29 17:58
キケー!
ゲームなんだが、実行中に不定な位置でaccess violationとかinvalid pointerとか
言いながらCPUウインドウがデデンと出てくる・・・。

せめて、普通の例外みたいに「ここでコケましたとか」提示してくれればいいのに・・・。

デバッグどうしよう・・・  _| ̄|○
>>580
・・・・

忠告するとしたら、

「日頃からスマートかつ堅牢なソースを書くように心がけること」

くらいかな。
ソースとか汚いでしょ?
1個のバグを潰したと思ったら、2個バグが増えましたみたいな状況と思われる。
>>580
ちょっと上にスクロールしたらメソッド名とかでなかったか?
どっちにしろ、ぬるぽを探してがっ!するのが先決だね。
>>581
ソースが汚いといえば、どこかにそういう書き方を紹介したページってないですかね。
できればDelphiの。

私は普段、ある程度のまとまった機能をClassとして作っています。
んで、やることも細分化。一つのprocedureの中で入出力一回だけあるように
書いてる。んで、それらを集めて実行するExecuteプロシージャをつくって、
細分化させたprocedureを集めて実行させてる。

フォームのイベントなんかは、だいたい
hoge := Thoge.Create();
hoge.execute();
FreeAndNil(hoge)
でおしまい。
>>583
>hoge := Thoge.Create();
>hoge.execute();
>FreeAndNil(hoge)

メリットを教えて下さい。
ただのスレッド化とか言ってみるテスト
>>585
ご苦労様でした。
>>583
とりあえずObserver, DataModuleあたりを調べてみるといいかも。
見てくれとデータ構造を分離するための技。
588580:03/11/29 21:58
ありがとう、数行追加したら頻発するようになったから、ブロック単位で消してチェックしてる _| ̄|○

たまにソースでエラー位置を指示されるんだけど、全くエラーのない部分(if文とか)を指して
無効なポインタとか言ってるんで、メモリの内容が崩壊してるのかなぁ・・・。・゚・(ノД`)・゚・。
>>588
でしょうね。
590デフォルトの名無しさん:03/11/29 22:05
Delphi Developer's Dayへ行ってきたが藤井等ってなんであんなにかっこいいの?
592デフォルトの名無しさん:03/11/30 08:28
Delphiで動画を表示させた後その上にビットマップを重ねて表示させる
方法はあるのでしょうか?あるのならその方法を教えてもらいたいです。
>>592
マスクとANDとって画像とXOR
594デフォルトの名無しさん:03/11/30 13:43
レコード型はCreate、Freeしなくていいですよね?
595594:03/11/30 13:55
自己解決しました。
Create,Freeしなくても問題無く動作しました。

動的に生成したいときは、レコード型のポインタ変数に対してNew,Disposeすれば
良いということも直感的に理解しました。
596デフォルトの名無しさん:03/11/30 13:57
メインフォームのOnCloseQuery時に設定情報をINIファイルに
書き込むという作業をしているのですが、メインフォームを閉じずに
再起動して終了すると設定は保存されず前回起動時の設定になってしまいます。
再起動して終了したとき、OnCloseQueryではイベントが発生しないのでしょうか?
また、強制終了したときに発生するイベントはあるのでしょうか?
597596:03/11/30 14:09
自己解決しました。
アプリ終了時に実行させたいなら、OnDestroy の方が適切でした。
OnCloseQuery は閉じてよいか問い合わせるためにあるみたいですね。
>>596
Windowsのシャットダウンのことだったら、
WM_QUERYENDSESSIONのハンドラを作ればよろし。
ActiveXコンポーネントの取り込みでMS Winsockをインストールしてそれを使おうとして居るんですが

GetDataを使う部分で
[エラー] Unit1.pas(60): 指定された引数で呼び出すことのできるオーバーロード関数 'GetData' が定義されていません
となり止まってしまいます。どうすればよいのでしょうか?
>>599
Indy使え
>>597
なるほど、ナイス自己解決
>>598
WM_QUERYENDSESSION試してみますありがとうございました。

                                   596
c++のソースをDel6perに移植してるんだけど
int hoge(byte *Para1)→function hoge(Para1: ^Byte) :Integer
int hage(byte &Para2)→function hage (Para2: @Byte) :Integer
がコンパイル通らないんだが、通すにはどうすればいいの?

int hoge(byte *Para1)→function hoge(Para1: PByte) :Integer;
にすれば通るのはなぜなんだ。
>>602
http://hp.vector.co.jp/authors/VA009712/take/delphi/pointer.htm
http://hp.vector.co.jp/authors/VA014436/prg_memo/delphi/c_d.html
詳しくはココとか見るとイイ

ポインタは PByte で表せられるんだな。
まぁ、お目当ての型が用意されてなければ、typeで宣言して作るのもアリ。
コンパイル済みバイナリにメッセージを入れたいんだけど

const Message : PChar = 'Hello World!!'
ってコード中に入れてもバイナリの中に入ってないようなんだけど…

C言語で言う
static char str= "Hello World!!"
見たいな感じにしたいわけ

どうやったらバイナリにメッセージが残るの?
>>604
Delのリンカは使ってない変数なんかを削除しちゃうから
unitのinitializationで無理やり使うとか。
サブフォームを表示してる間はメインフォーム触れないようにしたいんですが
どのようにすればいいですか?
607デフォルトの名無しさん:03/11/30 19:20
>606

if SubForm.visible = true then
MainFrm.enable := False;

これじゃだめ?
ShowModalでいいんじゃね?
>>607-608
Thanks!!
>>580です。
不定な場所で落ちるぜコノヤローの続報なんですが、

描画可能なら do begin
 test := Rect(A,B,C,D);
 領域testにbitmapをCopyRect
end;

の、Rect生成をMainFormのCreateに持ってきたら落ちなくなりました。('A`) ← バカ

該当変数に直接リテラルが出来ると思っていたんですが、もしかして
もの凄い数のRectがメモリ上に出来ていたのでしょうか・・・。
しかも、リテラルの使い方間違えてるし.... _| ̄|○
>>610
Canvasのアクセスで排他処理しなかったから落ちただけじゃないかな。
Lock Unlock で解決するかもしれない。
--- DelphiでWinamp3 --- (環境: WinXP-home, Delphi6-pro, Winamp3)

Winamp3の表示情報取得は、
procedure ... ;
var
 hWinampWnd: HWnd;
 TextChar: Array[0..255] of Char;
 TextString: String;
begin
 hWinampWnd := FindWindow('STUDIO', nil); //'STUDIO'=Winamp3のクラスネーム
 If GetWindowText(hWinampWnd, TextChar, 255) <> 0 then TextString := (Format('%s', [TextChar]));
 Label1.Caption := TextString; //[トラック#- アーティスト名 - 曲名 (時間) (演奏状態)]の型
end;

現在選択されているファイル名('C:\Music\Song01.mp3'など)を取得する方法がわからないので、
のんびりと教えてください。
Winampのスレでも行くべきだな。
もしくはSpy++とか使って探すとか。
>>610
なんでそれで不定な場所で落ちるぜコノヤローが解決するのか
いまいちわからないけど。。。

いや >>610 氏のなかで解決済みなんだったら別にいいんですが。
>>603
thx。
メソッドの引数で定義じゃ駄目で、type節で定義してからなら使えるのね。
そして今度はポインタ変数[i]で配列みたいに扱えなくてつまる。
先は長いな、こりゃ。
よさげなページハケーン
ttp://www.delphibasics.co.uk/
英語だけど...
>>590
藤井?ここ数年の Borland マーケットの迷走の原因だぞ。
619デフォルトの名無しさん:03/12/01 18:01
Delphi,データベース初心者です。
Delphi6でBDEを使ってAccessので作ったデータベースを操作したいのですがBDE Administratorの使い方が良くわかりません。
情報が乏しいのでよろしくお願いします。
まず、マニュアル読んで。
BDE Administrator なんか使う必要ないとおもったけどなぁ?
Access使うならADOExpressをお勧めする。
622デフォルトの名無しさん:03/12/01 21:55
うむ。AccessならADOコンポーネント使った方がいいよ。
BDEだと確かAccess95か97にしか対応してないし。古いし。
623デフォルトの名無しさん:03/12/01 22:35
C言語のソースの行番号を示す__LINE__に
あたるのはDelphiではなんでしょうか
624デフォルトの名無しさん:03/12/01 22:39
TeamSouresの使い方を紹介しているサイトはないでしょうか?(日本語で)
Help見ても意味がわかりません。

1人で使っているのでソースのバージョン管理に使いたいと思っているのですが、
なにをどうすればよいのやら。。。
>>618
迷走はInprise…じゃなくてBorlandの専売特許ですが。
627デフォルトの名無しさん:03/12/01 23:50
TeamSouresって何?聞いたこと無い。
ググっても、0件。
マウスカーソルが当たったら色が変わるっていうのを、自前で実装したいのですが、
OnEnterとOnExitだと、フォームがアクティブでないときに反応しません。
何をやればいいですか?
>>628
CM_MOUSEENTER、CM_MOUSELEAVE
で、コンポ作る…
かな?
違ったらスマソ。
キーボードで任意の文字列をいくつか打たせ、
その入力順に連結リストを作りたいんですが、
どうすればできますか?
TIdTCPServerとClientで、ファイルをやりとりするプログラムを作成しています。
現在のところ、FileStreamでファイルを読み込んで、TIdTCPClientのWriteStream
でファイルをやりとりしているのですが、送信側がCPU使用率が100%になり、
AntiFreezeを入れてもFormが操作できなくなるのと、どうも送信速度が遅いような
気がします。LAN内で50Mに5分程度かかる。

TThreadで動作させればFormの操作等は可能になると思うのですが、このような
ファイル送信を行う場合は、このような形で行うものなのでしょうか。
通常のやり方を知らないので、いろいろな場所をみたのですが、どうも納得のいく
答えが得られませんでした。
どなたか、ご存じのかたおられましたらご教授ください。
考えれば出来ます。
633624:03/12/02 00:33
>>627

失礼、正しくは
TeamSource です。
634627:03/12/02 00:37
>>633
そか。いや、こっちも別にあげあしとりではないので。

で、
Google 検索: TeamSource 約141件
↑コレには分かりやすい例は無かったとゆーことかな?
635624:03/12/02 00:58
>>634

紹介の記事がほとんどで、どのように使うという How To ものは見つかりません出した。
Delphiの掲示板関係も見てみましたがHitしませんでした。

よろしくお願いします。
インターネット上の画像を取得し、表示
その画像を毎回保存
というようなことをやりたいのですが、Socket通信についてくわしいサイト教えてください。
>>636
「やりたい」の?それとも「作りたい」の?
「やりたい」なら、そーゆーソフト探した方が早いし。
「作りたい」なら丹念に検索したら?
638631:03/12/02 01:09
実験をしていたら、自己解決しました・・
TIdTCPClient.WriteStreamの前後で、OpenWriteBuffer、CloseWriteBufferを
していたのが、低速度の原因だったようです。
これを取り除くだけで、700Mでも1分以内に転送でき、CPUの処理速度も
スペックによりますが、かなり落ち着いてきました。

ただ、相変わらずFormが固まったままなので、TThreadの実装は避けられそう
もありません。

いやあ、本当にDelphiとVCLは優秀ですね。こんなに、こういうものが簡単に
実装できるなんて・・・。
また何かお聞きすることがあるかもしれませんが、よろしくお願いします。
>>637
作りたいんです。
検索してもなかなか出てこなくて・・・
ほとんど、forループとか、言語の基本の入門サイトみたいなのしかないんです・・・
>>626 THK!
>>639
インターネット上の画像を閲覧、自動保存っていっても、
どういう場面を想定しているのかわからんから、なんとも
答えようがない・・・・

例えば、あるURLをぶちこむと、htmlで表示される画像を
一枚、一枚、表示して、かつそれをローカルに一括保存
できるようにするとか、やりたい具体的なことかかないと。
>>639
そんなら「IEコンポ」とかの方面の方がいいかも。
どっちも「簡単」では無いけど。
はっきり言って「Socket通信で」って言うのは茨の道かと個人的には思う。
>>637
「作りたい」じゃなきゃここに書くはずがないし。
検索出来るようになったら初心者卒業だし。
初心者スレなのでもどかしいことは多々あるが、
そのストレスを発散するにもちょっとは考えようや。
と、たまには叱っておく。
>「作りたい」じゃなきゃここに書くはずがないし。
 ↑
そうでもないんだな、これが。
>>642
TIdHTTPで、htmlそのもののソースを取得。
<img src="./hoge/hoge.jpg">
の括弧の部分を抽出して、上手い具合に画像のURLを作成。
TIdHttpのGetでFileStreamに取り込んで、画像を表示すると
共に、ファイルとして保存ってのはだめかな。

いや、思いつきだから、実現できるかどうかわからんけど。
>>641
.jpgというURLをぶち込んで、表示する。「自動保存」は、その画像が更新されるたびに、**1.jpg,**2.jpgとしたいのです。
それと、もう一つはhtml読み込んで、その文字列を読み取る、たとえると、「ボード一覧の取得」みたいなもんです。

こういうのがしたいです。
IEコンポーネントでやるのが簡単ですか?
誤解を招きそうなので修正・・・
.jpgというURLを

http://hoge.com/aaa.jpgというURLを
いや、あくまで例だし<IEコンポ
オレの浅い経験で言うのもアレだけどSocketは個人的にちょっと…。
ソースもってくる方法はいくつかあるよね。
ただ、どの方法でやるかはあなた次第だし(固まるのがイヤとか)。
リンク出したいなら自分でパーサ書くって話まで行っちゃったりするし。
えっと、
ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/2088/
このソフトをDelphiで作ってみたいんです。
>>648
いや、漏れもSocketではどうかと思ったので、
TIdHttpで取得するのはどうかなとお聞きしたかったのでつ。

あおってるようでごめんね。

>>647
TIdHttpで、どのぐらいまでできるかわからんけど、
*.htmlのURLが入力されたら、
1)htmlのソースを取得、上手い具合に<img src="">のを絶対パスに変換する方法
を書いて、StringListあたりに入れておく。
ソースを解析し終わったあとに、2)ディレクトリを参照して、00?.jpgの数値の最大値を取得
StringList.Countの数だけループさせて3)画像表示と00?+1.jpgとして画像を保存する機能をつくる。
*.jpgのURLが入力されたら、2)と3)の処理だけ行うようにする。

これじゃだめけ?つか、嘘かいてたらごめん。

>>650
いえいえ。何とも思ってないですよ。

えっと…(トリップ付けて無いからレス番号が混乱してくるな…)>>質問者へ
http://www.monazilla.org/document/index.html
のTIPSとか、他のTIPSを検索しつついろいろとじっくり考察してみて…。
652651:03/12/02 02:06
ああ、追加。
個人的に「Wininet.dll」をおすすめしときます。
653636:03/12/02 02:09
いろいろありがとうございます。
実は、当方・・・
perlしか経験がなくて、RAD形式?の環境は初めてでして。。
オブジェクト指向も難しい、、
ここは素直に本買うべきでしょうか?
・基本
・関数(オブジェクト?命令?)を網羅している
・いろんな例題がある
こんな本ないでしょうか?
>>652
ほーう
個人的興味ですが、Wininet.dllなのですか?
使ったことないので、もし利点があれば挑戦してみたいです。

検索しただけでも、結構ありますね。

ttp://member.nifty.ne.jp/toshi-o/wininet.htm
ttp://forum.nifty.com/fdelphi/samples/01085.html
>>653
Perlしかやってないとはいっても、Web系なら多少は
JavaScriptの知識はあるでしょ。
まったく同じとはいわないけど、似てるから入り易いと
思うが。

>>68を参考にPersonalで試してみれば?
それでもわからなければ、本を買えばいい。
また「テンプレ話」だが、本を買うよりネットで調べる方がいいと思うのだが。
タダだし。
でも「つっこんだこと」をやろうと思ったら本は有効だと。
ただし、「デッカイ本」じゃないとダメだけど(藁

つってもオレ的には「オフィシャルコースウェア」はいらなかったかな…と思っている(藁
買った本ってソレとTIPS本だけだなぁ。
657636:03/12/02 02:22
>>655
多少は・・・、ありますが。
何か、Perlとは次元が違うというか、、上から順番に処理しておわり〜って単純なものじゃないでしょ?Delphiとか、VBとか、VCって・・・
なんていうか、とっつきにくいって言うんでしょうか。
命令が何かに代入されてたり(Set fso=CreateObject("Scripting.FileSystemObject") )
もう、こんなのが全然分からなくて・・
Perlなんか処理だって
処理;だから単純でしたが・・・
とりあえず>>68のを見てがんばってみます。
どうでもいいけど、他のスレで叩かれるのがいやだからといって、初心者とは
言えないような質問が多くないか?
だれか初心者ガイドライン作らん?

もっとも興味のある分野によって知識の深さは変わるだろうから、
10項目中5項目をパスしたら脱初心者みたいな感じで。
>>657
コンソールアプリなら上から順に処理して終わり、です。
Delphiでもできます。

もちろん、そこにサブルーチンやオブジェクトや別ユニットが関わってくれば話は別だが。
Perlでも同じことか。
>>657
基本的に、上から順番にはかわりがないと思うが。
VBとか、VBSの、そのFileSystemObjectの例は、
Delphiのインスタンス作成と、ほぼまったく一緒だね。

たとえば、htmlでポストするとき、

<input type="text" name="UserName">
とかやって、
$UserName = $_POST['UserNamer']; //PHP
UserName = Request.Form("UserName") //ASP
document.form.UserName.value; //JavaScript
で変数の受け渡しをするのと一緒。
同じ、<input type="test">だと名前を付けられないと区別つかんでしょ。

それをDelphiなんかだと、
MyEdit := TMyEdit;
として変数のように自由に作ることができるって感じ。
document.form.UserName.Value;
のように、
Form1.Edit.Text;
のようにテキスト部品を文字を操作することができる。

Delphi3を使っているので超初心者なのか微妙ですが
中級以上ではないのでこのスレで質問します。
(一応Delphi5と6も持ってるんですが、なんとなく3を愛用)

ゲームなど、別のプロセスで動いているソフトが使っている
メモリの中身を取得したり書き換えたりしたいのですが、
どこから手をつけたらよいのか見当もつかない状態です。
概念というか「大まかな処理の流れ」と、
ココはハズせない「肝の部分」
などを簡単に説明していただける方、
いらっしゃいましたらよろしくお願いします。
このキーワードで検索しろ、だけでも大歓迎です。
キーワードすら思いつかないので・・・
まず何をすればいい??お導きください
662661:03/12/02 06:16
すみません捕捉します。
できればDelphi3で作りたい、
なるべく、できあいのコンポーネントは使いたくない、
という条件でよろしくお願いいたします。
663619:03/12/02 09:33
みなさん、ありがとうございます

>>620
読んでみます。それでも分からなかったらまた聞きます。

>>621,622
BDEを使ってと言われたので。

>Access95か97にしか対応してないし
えっ。そうなんですか。
Access2000なんですけど。
>661
まあ君のいうようにDelphiはエリート言語だからそんじょそこらの糞
言語と比較しては行けないという意見は同意するが、君ちょっと
別プロセスの目盛りを操作しようとする発想がいただけないね。
つうかよ、そんなのOSでプロテクトしてるだろーが。
ん?初心者用でない質問スレもあるの?
3.1std、4std、6pro、7proとやってるので出来れば中級を自称したいくらいだけどここに書く。
D7に移行してみたんだけど、ヘルプ周りがおかしくなってる。
うちのヘルプだけ壊れてる?
それともみんなのヘルプもおかしい?

症状は、ヘルプファイルのパスから¥記号がとれて見つかりませんって出たりとか、
関数を同じジャンルから探すとき、ヘルプの左に出る黄色いウィンドウがリンクされなかったり、
トピック検索で二項目くらいズレて、たとえばVCLのTFormを探したのに、
開発者ガイドのTFormが表示されたり、もう一個ズレてTFontStyleいったりもうさんざん。
667デフォルトの名無しさん:03/12/02 10:13
>>657
君のような人間は何やっても身につかないよ。
Perlでイベント処理すら勉強してないし、
DBもUNIXも勉強してないみたいだな。
その程度の能力では何しても無駄だよ。
>>665
アップデートした?
しても変だけど。
>>665
仕様です。
D6はどしどしアップデートするんだがD7はしないからバグ目立つ
>>667
その言葉、誰かに言われたの?(ワラ
>>671
その誰かもまた違う誰かに言われたかもな。
673デフォルトの名無しさん:03/12/02 21:35
>>663
ごめん。ヘルプが古かった。試してみたけど大丈夫だった。
お詫びに…
http://t-sakamoto.hp.infoseek.co.jp/D00300.html
ListViewで選択した項目の背景を設定したいんですけど
OnCustomDrawItemで
if Item.Selected then
LsvTalk.Canvas.Brush.Color := clLime;
とやってもデフォルトの(?)紫っぽいのに負けてるんですが・・・
それに、選択した時に縁に現れるブツブツが嫌なんです。
どうにかならないもんでしょぅか?
675デフォルトの名無しさん:03/12/02 23:17
IndyのAntiFreeze具体的にどんなことをしてくれるのさ?
俺入れてないんだけどだめなの?入れたほうがいいの?
Application.ProcessMessages飛ばしまくり
677デフォルトの名無しさん:03/12/02 23:28
>>674
On(Custom)DrawItemを使いましょう。
>>677
それじゃーブツブツは消えなかったとおもうけど
以前、漏れが色々やったときは無理と断言しました。
「いや俺ならできる」という方、お待ちしてます。
679デフォルトの名無しさん:03/12/03 07:57
Delphiでテキストファイルの「<」を「<」にしたり、
「&」を「&」に変換してHTML形式にしたいのですが、
どうすればよいでしょうか。
StringReplace
>>679
こんな感じで置換すればいいと思うよ。

function EncodeStr(const s:string):string;
 var i:integer;
begin
Result:='';
i:=1;
 while i<=length(s) do begin
  case s[i]of
  '&': Result:=Result+'&';
  '>': Result:=Result+'<';
  else
    Result:=Result+s[i];
  end;
   inc(i);
 end;
end;
ごめん 文字列の中は &AMP; とか &LT; &GT; ね
683デフォルトの名無しさん:03/12/03 12:11
複数フォームに同じ様なデザインがある場合、
フレームを使った方がメモリ効率いいのですか?
(コードは全て異なります)
同様なデザインというだけでインスタンスを複数作るなら
メモリ効率は変わらないだろ。
せいぜいコード分の効率はよくなるだろうけど。
685デフォルトの名無しさん:03/12/03 15:32
>>681
ありがとう
686619:03/12/03 15:49
XP+Delphiでやっているのですが
フォームにコンポーネントを貼り付けようとおもって
マウスをコンポーネントに持っていっても
説明がでないことがあるんです。
(出る時もある)
はじめたばかりで、コンポーネントを覚えていないので
少し困っています。何が悪いのでしょうか?
687デフォルトの名無しさん:03/12/03 15:55
APIの timeGettime を使用したいんですけど、
Delphiでは宣言済みのAPIでは無いらしく、

uses
  ShellApi;

を記述しても駄目っぽいです・・・
このようなAPIは、どの様に宣言すれば宜しいのでしょうか?
688687:03/12/03 16:03
自己解決・・・

function timeGetTime() : Integer;
stdcall external 'winmm';

"#"を含んだ文字列定数を使ったコードを実行すると、
バグってプログラムが停止してしまいます。

代わりに「#35」だとか「Chr(35)」だとか「\#」などとしても
駄目でした。

"#"を含められるようにするには、どうすればいいか
教えていただけないでしょうか。
>>688
timeGetTimeはMMSystemで定義されている。

uses MMSystem;

\Delphi6\Source\Rtl\ に定義済みのAPI宣言がすべてあるっぽい。
つまり、ここにない物は、(本当に自分で)宣言しなければならない。
>>689
どういうコードなの?

procedure TForm1.Button1Click(Sender: TObject);
const SHARP = '#3YO == BYD =! SANYO';
begin
ShowMessage(SHARP);
end;

これは通るけど。
>>679-682
ただ681の方法だと恐ろしく遅いので、大量のデータを処理するならばお勧めしません。
そのような場合は、まず一回オリジナル文字列をスキャンして出力の文字列長だけを
求めてSetLengthをし、2回目で変換後の文字列を求める、というほうが断然早いと
思われます。



htmlspacialchars関数使え…とか言ってみる。
timeGetTime使う奴はアホ。QueryPerformanceCounter/Frequency使え。
694689:03/12/03 17:22
>>691

たとえば、

if Flag = 1 then
begin
FoundIdx := AnsiPos('*', Lines[Idx + I]);// こっちは大丈夫
end
else
begin
FoundIdx := AnsiPos('#deffunc', Lines[Idx + I]);// こっちは駄目
end;

という感じです。
>>694
ついでにエラーメッセージも。
696689:03/12/03 19:24
>691 >695 さん

すみません、バグの原因は全然別のところにあったようです。

こちらはWin XP上のver.6 Personalなんですが、作っているアプリのメニュー項目に
F12のショートカットを割り当てておいて実行時にF12キーを押すと、"CPU"ウィンドウ
が出て、フリーズしたようにOSごと動作が遅くなってしまいます。

作成中のアプリだけでなく、新規にフォームとメニューだけのプロジェクトで試しても
発生しました。

またDelphi自体や他のソフトではF12を押しても異常は起こりませんでした。

まだ釈然としないところはありますが、ともかくお騒がせしてすみませんでした。
697689:03/12/03 19:39
たびたびすみません。

IDE上での実行中には作成中アプリのショートカットうんぬんに関係なくF12を
押すと"CPU"ウィンドウが表示されてしまうようです。(ちなみにIDEのメニュー
には違うショートカットが表示されています)

たまたまF12を作成中アプリのショートカットに割り当てている場合になぜか
OS(?)の動作が極端に遅くなってしまうようです。

では今度こそ消えます。m(__)m
F12 はNT OS 組み込みデバッガ起動キー。
699デフォルトの名無しさん:03/12/03 21:30
最近データベースを使い始めたんですが
dbExpressを使う必要性があるときってどんなときですか?
700デフォルトの名無しさん:03/12/03 21:41
>>699
Kylixと互換性とりたいとき
ありがとうございます。
あ、そうなんですか。
ならWinでしか使わないソフト作るときはわざわざ使う必要ないですよね?
>>701
喧嘩売ってんのかコラ?

俺ならADO使うけどな〜
703デフォルトの名無しさん:03/12/03 22:07
ファイルの排他ロックをしたいのです。
AssignFileで開いてRewriteするとロックがかかると
あるサイトに書いてあったのですが、
Reset→読み込み→Rewriteでモード変更→書き込み
までの過程全体でロックをしたいです。何か
よい方法はありますでしょうか
704デフォルトの名無しさん:03/12/03 22:08
dbexpress使うとDB変更するとき楽チンだよ。
>>703
CreateFileEx?
>>704
ADOだって楽ちんだよ。
707デフォルトの名無しさん:03/12/03 22:13
Webカメラからリアルタイムに動画を表示させ、
その表示させた動画の上に画像を重ねて表示する
方法ってあるのでしょうか?
普通にImageを重ねてみても、動画のほうが上にきて
画像は見えません。
何かいい方法があれば教えてもらいたいです。
>>707
DirectShow
709701:03/12/03 22:53
>>702
そんなつもり無いです。。
すいません。。
>>704
なるほどそういう利点もあるんですね。

いまいろいろ見てたらmybeseというのを見つけたんですが
これなんてどうなんでしょうか?ヘルプに書いてある言葉難しくてよく分からない。。
読んだ感じでは配布とデータの管理とか楽そうな感じ?
710デフォルトの名無しさん:03/12/04 00:09
Delhixでゲーム作っているのですが、プレイヤー名など文字の入力の所で
全角入力中の文字の表示をする方法がわかりません
Editなどを使うと普通に出てくるのですが
ゲームなのでEditなどを使用したくないもので・・・

スレ違いでしたらすみません
>>709
MyBaseはSQLも使えない(よね?)し、まともなDBとは考えないほうがいいと思うよ。
おいらの場合、
ユーザーの選択などをDBと絡ませたいときに(DBLookupComboBoxとかで)使うことが多いな。
713701:03/12/04 01:36
>>712
え、MyBaseそうなんすか。
SQL使えないのならあんまいくないね。
てことはテーブルの結合とかできないんですよね?


SendMessage(hHandle, WM_SYSCOMMAND, SC_RESTORE, 0);
で開いてから、
SendMessage(hHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
で閉じようとしてるのに、閉じなくなってしまいました。(SC_MINIMIZEとかは効きます)
これ以外に閉じる方法ありませんか? (D6でXPです)
素直にメソッド使えよ
716デフォルトの名無しさん:03/12/04 10:08
DirectDraw.pas
というファイルに
IDirectDraw = interface;
という記述を見つけたのですが、
これは一体なにをしているのでしょうか?
>>703
FileModeという定義済みグローバル変数に然るべき値を代入してからResetを呼べばOK。
718デフォルトの名無しさん:03/12/04 15:20
DBGridのスクロールバーが出てくる時(Recordが複数行の時)に
何かしたいのですが、メッセージを捕まえることは出来ますか?
Recordが複数行の時と言うのならデータセットのOpen時にRecordCountで判定するのは?
720デフォルトの名無しさん:03/12/04 18:47
>>717
ありがとうございます。
FileModeを設定してファイルをロックする目的は果たせたのですが、
別のプロセスにファイルハンドルを取得できるまで待機させたいです。
以下のコードを書いてみましたが、エラーが出てコンパイルができません
でした。なにかよい方法はありますでしょうか。

Repeat
try
AssignFile(MyF, 'NmThread.txt');
except

end;
until Assigned(MyF);
721674:03/12/04 18:50
>>678
あの忌々しいブツブツに勝利しますた
Sender.Canvas.FrameRect(rFocus);
722718:03/12/04 19:34
>>719
現在解決策としてAfterOpen,AfterPost,AfterDeleteの時に
RecordCountで判断してます。

しかし、データモジュールでは出来る限りデータのみをあつかいたいのですが
何かいい方法はないのでしょうか?
(フォームのビジュアル的な要素は、フォーム側で行いたい)
>>720
Assinged関数は、ポインタ値がNilか否かを判定するだけだから、
PascalのFile型とは無縁。

そもそもAssignFileはファイル変数とファイル名をリンクさせるだけで、
この時点でロック云々の処理は不適です。

AssignFile(F,'hoge.dat');
repeat
 try
  flag := True;
  FileMode := fmShareExclusive or fmOpenReadWrite;
  Reset(F);
 except
  on E:EInOutError do begin
   if E.ErrorCode <> 32 then raise;
   Sleep(100); //一応過剰な負荷がかからないように。
   flag := False;
  end;
  else raise;
 end;
until flag;

一応こんな感じかな?結構面倒だ。
実用上はタイムアウトの設定をしたり、Application.ProcessMessagesを挟んで
固まらないように配慮したり、そのためのデータの整合性を考えたり、さらに面倒。
コンパイラ指令で例外を飛ばすようにする必要があるかも。
724710:03/12/04 20:05
駄目ですDelphiでのサンプルはIMEのON、OFFや入力後の文字の取得ばかりで
全角入力中(確定前)の文字の表示をやってる物がみつかりません(><

助けて〜えらい人〜
725デフォルトの名無しさん:03/12/04 20:37
>>709
おまえはいったいどういうデータベースを望んでるのだ?
ひとりごとみたいに同意を求めるなよ
データベースの話したいならDB板へ行きなさい
>>724
imm
ポインタをいじくっているのですが・・・とある関数hogeが、
引数で指定したポインタからbyte型を8個格納するものとするとき、アクセス方法は

getmem(byteP,8); ← byteへのポインタ
hoge(byteP);

for i:=0 to 7 do begin
 byte(byteP^) ← ここで出てきた値を回収する
 inc(byteP);
end;

freemem(byteP);

無い頭を捻って考えたのがコレなんですが・・・壮絶に間違ってますか?(;´Д`)
俺はエスパーじゃないから、お前のコードじゃ判断できねえな。
getmem(byteP, 8);
Inc(byteP, 8);
freemem(byteP); {おぼーん}
何がやりたいのか、イマイチ理解できないよ。
出されてる例文読む限り、無理にポインタ型を使う
必要はないんじゃない?byte 型の動的配列とか
を使った方が安全。
関数hogeを呼び出すと、返り値のかわりに指定した場所にデータを書いてくれるという奴なんですが、
(VC++で書かれたDLLなんでこういう挙動)
要は、ポインタというのはあるデータの先頭を指している矢印みたいなモノですよね。
渡した場所から+8byte内に目的のデータがある場合、どうやったらアクセスできるのか・・・と思いまして。
732デフォルトの名無しさん:03/12/05 08:54
number1,number2,John Lennon,str1,

というようなCSV形式のファイルをTStringListのcommatext
で読みこむのですが、読み込むとJohnとLennonの間の
スペースでも区切られてしまいます。調べてみたらDelimiterというの
がありましたのでそれを","にセットしたのですが、やはり
うまくいきません。なにか方法はありますでしょうか
733デフォルトの名無しさん:03/12/05 09:19
>>723
コードまで書いていただいて勉強になりました。
ありがとうございました。
>>723
ロック解除ってShellChangeNotifierで検出できないの?
>>732
CSV形式のファイルに問題があるんじゃないの?
普通ならダブルクォーテーションで囲まれると思うけど
736デフォルトの名無しさん:03/12/05 18:34
PageControlにTabSheetが1つあって、後からTabSheet
をプログラムで追加する時、既にあるTabSheetの前に追加したいのですが、
どうすればいいか教えてください。
ただ単に追加することはできます。
Delでマルチスレッドアプリケーション作る場合、
自分で同期する必要ある?
738デフォルトの名無しさん:03/12/05 23:23
タイピングソフトを作ろうと思って、練習用にラベル2つにそれぞれ対応する仮名とローマ字を、
ランダムに1秒ずつ呼び出すプログラムを作りました。
でも、以下のプログラムを起動させると“お”のところだけ文字化けしてしまいます。
試しに“か”まで登録すると、“お”は文字化けせず、“か”だけが文字化けしてしまいます。
何か間違ったところがありますでしょうか。
Delphi 6 Pasonal使用です。
↓は、タイマーのイベント

procedure TForm1.Timer1Timer(Sender: TObject);
var kana,roma : Array [1..5] of string;
no : integer;
begin
kana[1] := 'あ';
kana[2] := 'い';
kana[3] := 'う';
kana[4] := 'え';
kana[5] := 'お';
roma[1] := 'a';
roma[2] := 'i';
roma[3] := 'u';
roma[4] := 'e';
roma[5] := 'o';
Randomize;
no :=Random(5);
Label1.Caption := kana[no];
Label2.Caption := roma[no];
end;
Random(5)の返す値は 0, 1, 2, 3, 4。
740738:03/12/05 23:59
>>739
お〜っ!
Array [1..5] →Array [0..4]
kana、roma共に、0からはじめたらうまくいきました。
ってこれ基本ですよね。
よく叩き込んでおきます。

質問ついでに、このような配列の場合の、
効率のいい書き方を教えていただきたいのですが…
Copy('あいうえお', Random(5)*2+1, 2)
それからRandomizeはFormCreateで一度だけ呼ぶべし
743738:03/12/06 00:38
>>741
>>742

なるほど!
上記のプログラムだと、
toi := Copy('あaいiうuえeおo', Random(5)*3+1, 3);
という風にしてさらに、
Label1.Caption := Copy (toi,1,2);
Label2.Caption := Copy (toi,3,1);
やってみるとうまくいきました。

Randomizeを、1度だけというのは、Helpに書いてあったのですが、
どこに書くのか分からなかったので、助かりました。

ありがとうございました。
744738:03/12/06 00:46
743よりも、
delete (toi,1,2);
Label2.Caption := toi;
って書いたほうが、後々便利なことに気づきました。
>>743-744
そんなややこしいことしないで
idx := Random(5);
Label1.Caption := Copy('あいうえお', idx*2+1, 2);
Label2.Caption := Copy('aiueo', idx, 1);
のが読みやすいだろ
746738:03/12/06 00:50
やっぱダメだ。
“かきくけこ”ができない…
先のことはまた考えてみます…
ありがとうございました。
>>745
あっ、なるほど…
頭悪くてスマソ…
今日のところは寝て、また明日にします。
ありがとうございました。
WideChar...
>>731
もう解決したかもしれないけど。
一応目的の動作はするはず。
var
 ByteP:Pointer;
 i:Integer;
 BytesResult:Array[0..7] of Byte; //結果を格納する
begin
 getmem(byteP,8); //← byteへのポインタ
 hoge(byteP);
 for i:=0 to 7 do begin
  BytesResult[i] := PByteArray(ByteP)[i]; //← ここで出てきた値を回収する
 end;
 freemem(byteP);
end;
>>736
もうか(ry
TTabSheet の PageIndex プロパティを
目標の物より小さい値にすれば良いみたい。
「前に追加」ではなく、「後ろに追加した後、前に移動する」
と言うことになるようだけど。
PageControl プロパティ を決めた後に設定しないと駄目みたい。
751デフォルトの名無しさん:03/12/06 05:30
CGIを使ったpearlについて聞きたいのですがどの板でしょうか?
752デフォルトの名無しさん:03/12/06 05:31
ファイルを送受信するソフトが作りたくて
ぐぐっていたらこんなものを見つけたのですが
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=074871

>複数のファイルを送信できるように、プライベートメソッドを作成します。
>メソッドの引数にはTStrings型を利用し、複数ファイルを受け付けて送信するこ
>とが出来るようにしておきます。

↑の意味がよく分かりません。
Delphiを始めたばかりの私にはまだ早いのでしょうか?
754デフォルトの名無しさん:03/12/06 05:35
>>753
ありがとうございました。
>>752
IndyのTIdTCPClient、TIdTCPServerを使うと楽よ。

FormCreateで以下の設定
TCPServer.DefaultPort := 9999;
TCPServer.Active := True;

//送信
procedure TForm1.TCPServerExecute(AThread: TIdPeerThread);
begin
 AThread.Connection.ReadStream(Test.FileStream,-1,True);
end;

//受信
procedure TFileSend.Execute();
var
 TCPClient: TIdTCPClient;
begin
 TCPClient := TIdTCPClient.Create(nil);
 TCPClient.Port := 9999;
 TCPClient.Host := '127.0.0.1';
 TCPClient.Connect();
 TCPClient.WriteStream(fFileStream,True,False,fFileStream.Size);
 TCPClient.Disconnect;
 TCPClient.Free;
end;

これだけでファイル送信はできる。あとは、プログレスバーなどの
進捗表示と、中断処理、エラーに対する処理など。
756デフォルトの名無しさん:03/12/06 14:21
>>755
返信ありがとうございます。
さっそくやって見ます。
>>756
受信と送信が逆だった スマソ
758デフォルトの名無しさん:03/12/06 15:30
>>757
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=074871
↑にあるソースといろいろ組み合わせてやってみたらできました!
まだ、一つのPCでテストしてみただけですけど・・・
今度、友達のPCとでやってみます。(これでエラー出たらやだな・・・)
ありがとうございました!
UWSCを使ってマクロを組んでるのですが、マクロを作動させている合間に他の事をしたいんです。(ブラウジングとか)
でもマクロってアクティブなWindowにしか動作しないじゃないですか、そこでアクティブで無いWindowにもマクロが動作するようにしたいんです。

ttp://seraphy.freeservers.com/

↑ここのホームページで公開されている「まっくろ2」の裏マクロのように動作させたいんです。
具体的にはWindowsキーというものを取得してやっているらしいんですが、UWSCにもWindowsキーを取得させてアクティブで無いWindowでもマクロを実行できないものでしょうか?
もしくは代用でできそうなツールを知っていたら教えてください。
>>758
リンク先ソースのOpenWriteBufferをつけると、CPU使用率
あがりまくりの、通信速度落ちまくりなので、つけないほうが
いいかも。(それによる弊害まで検証してないけど)。

あと、受信側はAntiFreezeポトペで固まらないと思うけど、
送信側は送信部分をTThread化したほうがいいと思う。
じゃないと、Form自体が操作できなくなる。

ファイル送信の進捗については、OnWorkイベントを使う。
ここもスレッド化した記憶があるけど、詳細は覚えてないや。

LAN内で700MBytesのファイルが2分(1分だったかな?)以内に
終了し、実験ファイルのZIPも無事解凍できますた。
761759:03/12/06 16:30
WindowsキーじゃなくてWindowsのハンドルでした。
762デフォルトの名無しさん:03/12/06 19:00
delphiでフォームを透明にした時に、フォームに貼ってある
イメージも一緒に透明になってしまうのですが、フォームだけ
透明にして、イメージはそのまま表示する方法ってあるのでしょうか?
わかる人がいれば教えてもらいたいです
スレッドを二つ走らせているとき、サブからメインのVCLに直接アクセスするとコケる、
というのは知っているのですが、これが変数の場合はどうなんでしょうか?

「サブスレッドで計算結果をグローバル変数に書いて、メインスレッドでそれを読む」と
いう動作を続けてると、不具合は起きるんでしょうか・・?
何が何でもSynchronizeさせないとダメですか?
>>762
直接実現する方法はたぶん無いので
リージョンで無理やり実現するかC#に乗り換えるかするしかない。
765752:03/12/06 19:21
>>760
レスありがとうございます
そうなんですよ・・・
最初に3Mぐらいのファイルを送信してみてうまくいったので
次に50Mのファイルを送信しようとしたらメモリ使用率が90Mまで上がりました。。

で、 OpenWriteBufferをはずしてやってみましたが送信を押した瞬間にフォームが固まってしまいました。

>LAN内で700MBytesのファイルが2分(1分だったかな?)以内に
>終了し、実験ファイルのZIPも無事解凍できますた。

すごいですね・・・
そのソースここで公開できませんかね?
それかあぷろだにアップしてくれませんか?
http://cgi.mediamix.ne.jp/~t3142/user-cgi/upload/upload.cgi?page=0&lm=6こことかにでも・・・人があまりいません
くれくれ房ですいません。。
>>763
変数にメイン→メイン→サブ→サブ→メインとアクセスすることも十分ありえるが
それで問題ないんなら無理に同期させる必要は無い。
767デフォルトの名無しさん:03/12/06 20:28
エクセルをOLEで操作してデータ記入をしたりしているのですが、
OLEで起動させたエクセルで他のファイルを扱ったりしていると
OLEエラーとかいうのが起きてしまいます。
OLEをやったのは初めてなのでこういう物なのか、
何か対処法があるのか教えて下さい。
>>765
>送信を押した瞬間にフォームが固まってしまいました
>>760より
>送信側は送信部分をTThread化したほうがいいと思う。
>じゃないと、Form自体が操作できなくなる。
769デフォルトの名無しさん:03/12/06 20:32
>>763
だめ。スレッド違えばメモリ空間も違う。
違うメモリ空間にはアクセスできないから、変数のやりとりは出来ない。
(だからこそ、メモリ空間が干渉せずに安定が保たれる)

どうしてもしたいなら、メモリマップドファイルを使う。
↑ネタならフサスレでどうぞ
771デフォルトの名無しさん:03/12/06 20:35
>>767
そんだけじゃわからん
>>766
サンクスです。VCLに直接アクセスしてしまってエラーが出まくったんですが、
それを除去しても希に出るので、もしや変数でも矛盾でも起きるのかと思ってしまいまして。

>>769
あ、すみません。TThreadじゃなくて、MMSystemを使ってタイマを実行すると
コールバック関数が別スレッドで実行される、という奴です。
(timeSetEventとtimeKillEventで関数作ってます)
グローバル変数はどっちからでも読めたので、何かあるのかも・・・。

・・・うっ、タイマー止めたら発生しなくなりました・・・。
>>769
もう一度嘘書いたら、殺すぞ
774767:03/12/06 21:55
えっとですね、どう書けばいいのかもあんまりわかってないのですが。
OLEでエクセルを立ち上げ、ブックを作成しセルにデータを記入する、ということを
Delからやっています。
で、OLEで立ち上げている最中に他のブックを読み込んで手作業で
なんかやっているとそのうちOLEエラーっていうメッセージが出て、固まってしまいます。
手作業でなんかやっている時も、Delから作ったブックは生きています。

こんな書き方で分かってもらえるでしょうか?
>>768
補足サンクスでつ

>>765
リンク先のソースそのまま利用したとすると、
MemoryStreamだから、メモリに貯まる一方
ではないかと思われ。(未検証だからわからん)

FileStreamにすれば、こまめにディスクに落として
くれるからメモリ消費もまったくしないはず。
固まる件については、768氏指摘の通り。

AntiFreeze導入でだめだったら、スレッド化すれば
よいよ。
>>763
くりちかるせくちょん。
777763:03/12/06 22:22
なるほど、手動でロックしてしまうわけですか。

もしオブジェクトに鍵がかかってる最中にアクセス要求が来たら・・・・・って、
実査にコード書いてみた方が早いですね。もちっと勉強してみます。
778デフォルトの名無しさん:03/12/07 00:58
DELPHIで小規模システム(10台以下)を組む場合、
最良と思われるデータベースは何でしょうか?<WIN>
1.レスポンスが良い。
2.参考書籍がそこそこある。
3.トラブルが少ない。
4.専用の管理者無しでも運用可。
779デフォルトの名無しさん:03/12/07 01:00
>>775
MemoryStreamをFileStreamやStringStreamなどに変えると
なぜか未定義の識別子になってしまいます。
また、これをどこにどう定義すればいいのかわからなくて困ってます。。
ああ、こんなに親切に教えてもらってるのにうまく出来ないのが情けない・・・はぁ・・

あとAntiFreezeって何ですか?
>>779
煽りでも何でも無いけど、もう少し後退することをおすすめする。
分からないってんなら、分かることから前進することも重要。
>>779
未定義の識別子ってのはTがついてないからなのか
TMemoryStreamの関数(savetofileとか)をそのまま使ってるから知らんが、おそらくどちらか。
前者なら不勉強すぎ。いや、やっぱ後者でも。書いてることが少なすぎてこれ以上はいえない。
問題を正確に把握して切り分ける能力は今後も必要だからがんがれ。

>あとAntiFreezeって何ですか?
Indyに含まれるコンポ。

>>780氏が言うように君にはまだこの段階は早いんじゃなかろうか。知らないことがちと多いような。
あと、分からないことがあったらまず調べる癖をつけておこう。ヘルプだってあるんだし。
>>778
>2.参考書籍がそこそこある。
Firebird(Interbase)はDelphiにはぴったりだし管理者要らずだけど
普通に手に入る参考書籍は2〜3冊、やっぱ「そこそこ」もないものね。
783デフォルトの名無しさん:03/12/07 02:21
>>778
MSDE2000+ADOにしとけ。
MSDE入れるサーバーはNT4/2000/2003Serverが必要だが。
>>780-781補足サンクスでつ

>>779
AntiFreezeについては、日本語検索でも1件は見つかるはず。
その(掲示板の)スレを読めば、どういうことをしてくれるかも理解できる。

FileStream、StringStream、MemoryStreamも、TStreamという基底クラスを
継承しているので、TStreamに詳しくなれば、それぞれのコンポーネントにも対応できる。

780-781氏のおっしゃる通り、少し立ち止まることが必要かもしれない。
FileStreamに悩んだら、ファイルの送受信はさておき、まず、FileStreamを使ったファイル
の入出力について勉強してみよう。AntiFreezeがわからなければ、AntiFreezeの利点がわかるまで、
とことん考えてみよう。

ソースを載っけるのは簡単だけど、あれこれ悩んで、解決に至るまでの過程のほうが大事だと思う。

ヒント
type
 TFileSend = class(TThread)
 private
  fFileName: String;
  fFileStream: TFileStream;
 published
  property FileName: String read fFileName write fFileName;
 protected
  procedure Execute; override;
  procedure OnWork (Sender:TObject; AWorkMode:TWorkMode; const AWorkCount:Integer);
 public
  constructor Create(FileName: String; AOwner: TComponent);
  destructor Destroy(); override;
 end;
>>780
>>781
忠告どうも有り難うございます。
少し自分の中でなぜかあせっていたようです。
本などでもっと基本を学習してきます。
>>784
あ・・・
ありがとうございます。
やはり悩むことが大切ですよね。
迷惑おかけしました。

ヒント、参考にさせていただきます。
787デフォルトの名無しさん:03/12/07 09:43
del7proを使っていますが、8にアップするメリットって何でしょうか?
私のやっていることっていったら、del3.1でも事足りるようなことです。
そんなレベルならアップする必要って無いですか?
788デフォルトの名無しさん:03/12/07 10:28
漢字の曜日を返す関数って無いでしょうか?
以前ヘルプを読んでいて有ったような気がしたのですが、
探してみても見つかりません。
みなさんは曜日の番号を取得してやってますか?
>>788
確か言語の設定に激しく依存したはずなので自前でやるなら曜日コードとってきてそれを漢字名にマッピング。
790788:03/12/07 11:27
やはりそうですか。ありがとうございました。
>>787
新機能が必要ないと感じたならば、わざわざ金払ってバージョンアップする必要も無い。
別に恥ずかしいことでもなんでもありませんが。
792デフォルトの名無しさん:03/12/07 14:43
テキスト文字列中に含まれるHTMLのURL部のみを
取り出してリンク文字列に変換したいです。

ここがhttp://www.www.co.jp/リンク部

のような文字列の場合難しかったりするのですが、
なにかよい方法はありませんでしょうか。
それくらいで難しいと言われてもねえ。お前考えること放棄してるだろ?
Delphiじゃ出来ません。正規表現が無いから。
なお、.Netなら標準装備です。
795デフォルトの名無しさん:03/12/07 15:06
>>792
おまえの書いた判定コードを見せろ。話はそれからだ。
796787:03/12/07 15:06
ボーランドのホームページ見てもDel8の新機能がよくわからんのですよ。
.NETって何が良いの?ってレベルだもんで。
ただ今回エンタへのバージョンアップがいつもより安いのでちょっと気になったんです。
でも、もし正規表現が使えるならそれだけでも買ってずーと使い続けるかな。
>>794
Delphiで出来ないのはお前のスキルと脳味噌が足りないから。
798デフォルトの名無しさん:03/12/07 15:28
>>792
正規表現ライブラリで検索なり置換なりすれば簡単にできるぞ。
いろいろあるが、おすすめは、
"TRegExpr"
http://onigiri.s3.xrea.com:8080/delphi/index.php?%5B%5BTRegExpr%5D%5D
799デフォルトの名無しさん:03/12/07 15:30
>>796
Longhorn発売(2年後)になれば、APIが.net frameworkに置き変わる。
2年後見越すなら、D8買っといてもいいんじゃないの?
そうでなくて今の環境で十分なら不要。
Longhornなんて買う奴いないだろ。
あの糞OSなんか。
Longhornの次期OSあっただろ?あっちが本命だな
>>797
もてぃつけ。>794は取るに足らない低脳か、MSお抱えの似非雑誌評論家。
Longhornが出るときにはDel Xが出ている予感。
803デフォルトの名無しさん:03/12/07 19:32
>>800
新しく買うPCにデフォルトで付いてくるわけだが。
俺は2000で十分と思ってたが、今やXP全盛だ。
プレインストールの威力はすごいぞ。
XPはいいだろ。あなたは2000に慣れているからそう思うだけ。

まぁ、XPと2000の糞戦争は今に始まったことじゃないけどな
>>788
FormatDateTime('ddd',Date)
じゃダメですか。

Del歴数ヶ月の未熟なトーシロなんで、間違ってたらごめんなさい。
(このスレでは何度か質問したことがあるきりで、答えるのは初めてです)
806デフォルトの名無しさん:03/12/07 22:58
Delphi 勉強したい超初心者向けの、
これは良い、これなら間違いないという参考書を2〜3冊紹介してください。

_| ̄|○ <お願いすます。

>>806
勉強する気があるならどれでも可。だとなんだから、とりあえず
1.Delphiパーソナルプログラミング
それと、Delphi付属のヘルプがまったく駄目なので
2.Borland Delphiリファレンスガイド―6&7 Personal対応
も買っておくと吉。
3.Delphi 6 プログラミングバイブル
があると楽できるが、内容が高度なので
1. 2.で不足が出てからでもいい(確実に出るんだけどね)。

あとはDelphiはウェブに初心者講座がたくさんあるから
それを読みつつ勉強していくべし。
まぁ勉強するのは自分なんだから、自分を信じてコリコリやるしかない。
確実にレスがループしてるので、次スレ立てる人はテンプレよろしく↓
最近またDel7のダイレクトメールが来てた。
Del7はいらないからさっさとDel8を出せよ>某
810デフォルトの名無しさん:03/12/08 01:36
海外の比較的マイナーな文学作品を翻訳出版する
小さな出版社がある。そして文学ファンはこういった出版社を
潰さないため、今後も翻訳を続けてもらうために
1人で同じ本を2・3冊買うことが良くある。

我々もこういう時だからこそDelphi7を買って
Borlandを支えるべきなんじゃないだろうか。
Delphi7の売り上げはDelphi on Win32の開発資金となるし、
Delphi.NETの今後に大きな影響をもたらすだろう。

Delphi7の出来のみを云々するのは
あまりにも近視眼的ではないだろうか?

>>808
むしろレスがループしてないスレなんて、2ch全体を見渡してもほとんど無いんだけどね。
>>810
ビンボー人には無理でし。
ny
814710:03/12/08 14:57
710です
未だに入力中の全角入力を拾う方法がわかりません
Immを使うのは分かったのですが
いいサンプルが見当たらなくて・・・
お手柔らかにお願いします・・・
815デフォルトの名無しさん:03/12/08 17:11
Delphi8でネイティブはきださなくなると
Indyとかちゃんとうごくんですか?

.NETは食わず嫌いだったんで、
Delphi8になってVirtualTreeViewとかIndyとかの
重要なコンポーネントがどうなっちゃうのかわかんなくて
心配で。
D8 Net の機能一覧に Indy 入ってるよ。
817デフォルトの名無しさん:03/12/08 20:47
マルチスレッドの中で、エクセルをOLEで起動終了させるだけの単純な物を作って
テストしてみたら、
Excel.Qui; でちゃんと画面から消えるのですが、タスクマネージャーで見ると
残っているんです。
裏でOLEは使えないんでしょうか?
818デフォルトの名無しさん:03/12/08 20:47
817です。環境はDel7PROとWIN2000です。
>>817
Delphiのバグ
820817:03/12/08 20:53
>>819
まじっすか!
どうしたらいいか教えて下さい。
お願いします。
Delphiを捨てる。
822817:03/12/08 20:57
>>821
すっこんどいてくだい。
>>817
WordやExcelはしっかり終了処理して参照切ってやらないとゾンビが残ると思ったが。
えーと、昔やったけど忘れた。

…Quitに続けてDisconnect、かな?
824817:03/12/08 21:50
>>823
ありがとうございます。
調べてみます。
>>716
激しく化石レスですが…

『IDirectDrawという名前のインターフェイス型を宣言します.でも宣言の中身は後から書くよ』
という記述です.

同じユニットのその宣言より後にIDirectDraw = interface…で始まる記述があるはずです.

インターフェイス型というのはおおざっぱに言うと
Windowsが用意しているオブジェクトを扱うための型です.
(正確には違うのですが主にそういう用途のものです)
なおユニットファイルの最初の方にあるキーワードinterfaceとは別物です.
>>817
>>823の前半にある通りで、VBでもNothingしないと残るよ。
DelならCreateOleObjectした変数にUnassignedをセット。

>>819
(・∀・)ニヤニヤ
827デフォルトの名無しさん:03/12/09 08:33
RTTI(実行時型情報)は、”じっこうじかたじょうほう”なのですかね?
それとも、”じっこうじけいじょうほう”なのですか?
じっこうじ(Run Time)・かたじょうほう(Type Idenification)だろ
>>827
Railway Technical Research Institute です。
>>829
いい加減なこと書くなよ。
何が Railway Technical Research Institute じゃ。

RunTime Type Information であってるよ。
831デフォルトの名無しさん:03/12/09 11:10
客先のPCでもParadoxのテーブルを確認&編集したいのですが、
データベースデスクトップと同じような機能を持ったフリーウェアって
ありませんか?
832ビギナ:03/12/09 11:17
質問です。
フォーム上のコントロールのロックを行うprocedureを作成しています。
パラメータでTFromを受け取り、ControlsでTContorolを取得し、
Enabledプロパティを設定するようにしているのですが、
MenuItemがTContorolでない為、設定する事ができません。
TComponentでやればいいかもと思ったのですが、
TComponentにはEnabledプロパティがないので駄目でした。
どのようにすれば良いのでしょうか?
お願いします。
>>832
よくわからんけど、
TForm(sender).Enabled := False;
じゃダメなの?
835デフォルトの名無しさん:03/12/09 13:12
exeファイルにドラッグされたファイル名を取得したいんですが、
どのようにしたらいいのでしょうか?
ファイルドラッグ→アプリ起動→ファイル名取得
解凍ソフトの様な振る舞いをしたいのです・・・
どなたか、ご教授お願いします。
以前貼ってあったDelphiのリンク集サイトのURLを教えてください。
ちょっと忘れました。
837835:03/12/09 13:31
すみません。出来ました。
838831:03/12/09 13:47
>>834
情報ありがとうございます。
このJEDI DatabaseDesktopって会員登録しないと
ダウンロードできないんですか?
>>837
自己解決とはいえ、くだすれだし、みていて興味を持った人のために、
ぜひどうやって解決できたか、ぐらいは書いて欲しいな。
840832:03/12/09 14:01
>>833
レスどうもです。
これってフォーム全体のロックですよね?
フォームの一部をロック対象から外したいので、以下のようにしています。
よろしくお願いします。


procedure Lock_AllControl(TargetForm: TForm; const UpdateOkFlag: boolean);
var
 i: integer;
 Obj: TControl;
const
 SKIP_CONTROL_NAME01 = 'Btn_Exit';
 SKIP_CONTROL_NAME02 = 'Btn_Cancel';
begin
 //これではメニューアイテムを取得することができない
 for i := 0 to TargetForm.ControlCount - 1 do begin
  Obj := TargetForm.Controls[i];
  with Obj do begin
   if (not ((Name = SKIP_CONTROL_NAME01) or
        (Name = SKIP_CONTROL_NAME02))) then begin
    Enabled := UpdateOkFlag;
   end;
  end;
 end;
end;
841837:03/12/09 14:40
>>839
すみません・・・
こんな感じでした。

var
 C : Integer; //受け取ったコマンドラインのパラメータ数
 FileName : String; //ファイル名保管用
 i : Integer;
begin
 C := ParamCount;
 For i:=1 to C do
 begin
  FileName := ParamStr(i);

 end;
end;
842833:03/12/09 14:49
いつも質問してる側で、回答するの初めてなのでドキドキでつ。

>>840

TMenuItem(obj).Enabled := false;

これじゃだめ?
843832=840:03/12/09 15:28
>>842
どうもです。
えーとビギナーなもんでアレなんですけど、
引数にTMenuItem(TMainMenu)を追加して操作せよって意味ですか?

そうでしたら今やってみてできました。
ありがとうございます。

で、TMenuItemのEnabledはTFormから操作できないってことでしょうか?
Form1.MainMenu1.Items[0].Items[0].Enabled := False;
こういうこと?

それより、Form1にPropertyを作って、そこでやりとりしたほうがいいと思うけど。
アクションリスト使うのが一番楽だろ
設計時ListViewのカラム幅の設定って
Object Inspectorかコードで直いじりしかないの?
ポトペタ感覚じゃ無理ぽ(´・ω・`)
いっつもユーザーが変更できるようにしてINIファイルに保存してるから設計時にはまじめに設定しなかったり。
848832=840=843:03/12/09 19:24
>>844
正しく動作しているので今のままで構わないのですが、引数にTFromをセットしているのに、
その子供?であるTMainMenuもセットするのはイマイチかなと思ったもんで。

ちなみにこのprocedureは複数の画面からコールされます。
で、自分はVBを主にやってきましたので、標準モジュールのように各プログラムの
共通Unitを作成し、そこにこのprocedureを書き、各画面から呼び出しています。
こういうコーディングの仕方がマズイかも。

どうもありがとうございました。
>>848
ちと意味が違う
その複数にコールされる可能性があるprocedureが共通ユニットにあるのは
いいとして、じゃあ、それがEnableがTrueか、Falseかどこで判断すんの?
まさか、TrueであるかFalseか決めウチで書くわけじゃあるまいし、そんな
変数をグローバルで持つとでも?

Form1にプロパティとして書いておけば、もしTrueならFalse、FalseならTrue
にするだけなら
Form1.MenuEnable := not(Form1.MenuEnable);
で済むし、わざわざTMainMenuのインスタンスも渡す必要がないでそ。

Form1上にあるオブジェクトを操作するんであれば、Form1上に作成した
インスタンスを直接操作するんじゃなく、TForm1のメソッドに任せるべきだと
思うけどな。

あと

>で、TMenuItemのEnabledはTFormから操作できないってことでしょうか?

に対する回答が

Form1.MainMenu1.Items[0].Items[0].Enabled := False;

なんだけど、これは理解してもらったのかな????
TMemIniFileを使っているのですが、
文字列で単引用符が除去されずに困っています。
どうすれば除去できるのでしょうか?
すみません。こちらのスレ向けの質問かどうか分からないのですが、
非常にくだらない事で悩んでいるので質問させて下さい。

現在、Delphi7Pro+WindowsXPでプログラムを組んでいます
で、処理を省略すると大体以下の様なプログラムになるのですが。

prodcecdure TForm1.btnEntryClick(Sender: TObject);
begin
MessageDlg('メッセージ1', mtInformation, [mbOk], 0);
// 1、2分掛かる処理。Sleep無しのForループでも良いと思います
MessageDlg('メッセージ2', mtInformation, [mbOk], 0);
end;

これを実行し、btnEntryをクリックして「メッセージ1」が出た所で
OKボタンを押してMessageDlgを閉じてから、「メッセージ2」が
出るまでにTForm1ウィンドウのバー?(上の所)を鬼連射クリックすると、
何故か「メッセージ2」がTForm1の上に出ずに下に隠れてしまい、
更にTFormが操作可能になってしまいます。

不思議に思ってVCL?のソースを覗いてみたのですが、おおざっぱに見て

TMessageForm.CreateNew(TApplication);
//ウィンドウにメッセージを設定したり位置を調整したり色々と
Result := ShowModal;

くらいしかやってなくて、ヘタレの当方にはちゃんとShowModalできていない
ようにしか思えません。

この状況でもちゃんとMessageDlg「メッセージ2」をShowModalするには
どうすれば良いでしょうか?
(´-`)。o ○ (「鬼連射クリック」なんてするヤツが悪いに1票)
(´-`)。o ○ (それだけが生き甲斐な香具師もいるんだよ>>853
MessageBox使えば?
またはフォームをあらかじめ、Enabled=Falseにしとく。
>>852
不思議だね。win2Kで試したけど再現しない。自分の連射力が不足してるのかな。

原因は何だろ?
 1、メッセージキューが一杯になっていて ShowModal内で発行したメッセージが処理されない
 2、ShowModal内で発行したメッセージの間にタイミング良く割り込まれた

Application.OnModalBegin で
ShowModalの前にPeekMessageでたまってるメッセージを全部読んで記録しておいて
OnModalEndでそれをPostしてしまったらどうかな?
857848:03/12/10 13:07
>>849-850
うーん。正直あまり理解できません。
自分のやりたい事を整理しますと、

処理は全てフォームで行ってます。
1.データを検索
2.データを分析し、更新可能か否かを判断。
3.更新可能なら入力コントロールをロック解除、
不可ならロックする(一部のコントロールは処理しない)。
※フォーム上の入力コントロール数は多いもので150

自分の考え
1.コントロール数が多いのでフォーム内でロックの処理をするのはたいへん。
2.ロックしないコントロール名は各フォーム共通なので、この処理を共通化できるのでは。
で、考えついたのが >>840 です。

「Form1.MainMenu1.Items[0].Items[0].Enabled := False;」を840で行おうとすると
TargetForm.MyMainMenu.Items[0].Items[0].Enabled := UpdateOkFlag; ですか?
メニューのところでコンパイルエラーになりますが・・・
>>846
『オブジェクト インスペクタ』でプロパティColumnsをダブルクリック
(またはリストビューで右クリックして『カラムの設定』をクリック)
するとカラム一覧のウィンドウが出てくるので長さを変えたいカラムをクリック.
すると『オブジェクト インスペクタ』にそのカラムのプロパティが出てきます.
長さはWidthプロパティが示しているのでこれを編集します.

>>851
AnsiExtractQuotedStr関数を使います.ただしこの関数は
『ナントカでくくられていれば取り除き,くくられていなければそのまま返す関数』ではありません(要注意!).
指定した半角文字でくくられていない場合は単に空の文字列が返ってくるだけです.
そこで文字列の先頭が目的の引用符かどうかを調べて引用符ならこの関数を使い,
さもなければ元の文字列をそのまま使うようにします.
実際にはいちいち場合分けのコードを書くと面倒でソースも見づらくなるので以下のような関数を作ってしまうのが手っ取り早いかと.
function AnsiExtractQuote2ch(const s: string; Quote: char): string; // sに目的の文字列,Quoteに引用符の半角文字
var
ps: PChar;
begin
ps := PChar(s);
if ps^ = Quote then
Result := AnsiExtractQuotedStr(ps, Quote)
else
Result := s;
end;
(…ってTStrings.CommaTextのソースコードと同じことをしているだけなのですが)
>>857
オブジェクト指向をもっと勉強汁

各コンポのTagに0か1でも入れといて、1だったらロックするコンポとか
にすれば楽じゃね?

Formのオブジェクトから辿っていってMenuItemのEnabledをFalseにする
方法だと思うから、そのソースにそっくり当てはめてもエラーになるのは
当たり前だろ

860857:03/12/10 17:11
>>859
最初の質問 >>832 に戻ったような。

"MainMenu1".Items[0].Items[0].Enabledの方法でやる場合は、
結局procedureに操作対象のTMainMenuを渡さないとできないのでは?
可能なら、それを最初にお聞きしたつもりなのですが。
>>860
普通にポトペでMainMenuを設置してるなら、Form1.MainMenuでインスタンスに
アクセスできるだろが
それができないってことは、何かが悪いか、手動でインスタンスを生成していて、
それがTForm1のクラスとして記述されてないからだろ

そういうインスタンスを渡す方法ばかりのprocedureを書いてると、こんがらがって
くるから、それぞれのTForm1クラス内で処理させるの。
そのFormがたくさんあるなら、TFormからの派生クラスを作るか、別クラスとして
関数を作成して、TForm1のローカル変数にインスタンスをもたせればいいだけ。
Indy のコンポーネント内メッセージ(エラーとか)って日本語化されていましたっけ?
結局のところ、

if Obj is TMainMenu then
 メニューアイテム用の処理

だけの話じゃねーの?
>>858
結局数字を直いじりしかないんですヵ(´・ω・`)
マウスでドラッグして幅調節できるのが理想なんだよね(´・ω・`)
そんなに大変な作業じゃないからいいけど(´・ω・`)
>>863
そういう次元の話じゃないでしょ。
実験してみたが、Form1.MainMenu1.Items[0].Items[0].Enabled := False;でちゃんとアクセスできる。
MainMenuの変数をTForm1のパブリックに記述してないだけでしょ。
だってさ、>>840ってControlでアクセスしてるから
TComponentから派生したTMenuItemは捕捉できない。
だからTMainMeniの時はそのItemsプロパティを見に行って
TMenuItem用の処理をすればいいと思ったんだけど。

ポトペタならふつーpublishになるから
>MainMenuの変数をTForm1のパブリックに記述してないだけでしょ。
ってことはないと思う。もしそうなら元質問者の説明不足。
リテラルで
Form1.MainMenu1.Items[0].Items[0].
こんなのを渡すのは嫌だという話だと思うけど。
Delphiで他のユニットからフォームへ指令を出したいんだけど
PostMessageでオリジナルのメッセージを送りたいと思うわけ
でもどうやってそれをフォームで捕まえたらいいかわからない
だれか助けてください
csDropDown設定のComboBoxのClickイベント時に、
Textプロパティを書き換えたのですが、
画面上では選択したリストの文字列が表示されたままでした。
特定の文字列を選択した時に、文字列を加工・表示するには
どうすればいいでしょうか?
>>868
1.メッセージハンドラを作る
2.WndProcをオーバーライドする。


>>868
なんでPostMessageよ。
そうしなければならない理由がなければ、他の方法を利用しる。

>>869
なんの文字列の加工、表示よ。
やりたい現象をちゃんと主語をつけて説明しる。
>>871
循環参照エラーが(汗
>>872
何を操作したいのかわからんが、
直接のClassじゃなく、TObjectかTComponentを引数で
渡せばいいじゃん。
>>872
uses 節を implementation 部へ
>>874
いぁそれは知ってるんですけど.
循環参照エラーがでるユニットの分け方はあまりよろしくない
と聞いたもので…
876869:03/12/10 22:36
>871

すみません、余計なこと書いて分かりにくくなってましたね。

やりたいことはズバリ、
「ComboBox1のClickイベント時にComboBox1.Textを更新する」
です。

Clickイベントにそのまま書いても画面上では反映されないので…。
Reflashも効果なし。
フォーカスを持っているのがマズイのかも…。
>>876
確かにItemIndexを-1にしても、Textの内容は表示されないみたい。

根本的な解決法は調査してみないとわからないけど、
姑息な手段としては、表示したい文字列をAddして、それを
選択させることで、とりあえずComboBoxに表示される文字列を
任意なものに変更できるけど、これじゃあかんのかな。
>877
試してみたらVBは普通に出来るんですよね…くやしい。

Addしてってのは目から鱗ですが、
Items.Countが一時的に変わるのにはちょっと抵抗がありますね…
むむむ。
>>875
そう考えるならUnitの作り方がまずいんでしょ。
そう認識してるなら、なんでそれを変更しようとせず、
PostMessageとかでお茶を濁そうとするか意味不明。

VCLを実装するUnitはClassで使うからinterface部で
usesするけど、自作のunitはすべてimplementation部
で宣言させるぐらいのほうが本来の姿だと思うけど。

オブジェクトを引数に使用するにも、TObjectやTComponent
で渡せば十分でしょ。インスタンスを引数でやりとり
しようとするからそうなるんじゃないかと思うが。
880852 ◆njzwqda.pM :03/12/10 23:25
>>853-856氏、回答有り難うございます。
鬼連射は....ユーザが何をするか解らないという想定での総合試験なので
どうしようもなく(涙)

>不思議だね。win2Kで試したけど再現しない。自分の連射力が不足してるのかな。

XPだけアプリがメッセージを処理していなくてもOSがメッセージを処理している?ようなので
(フリーズに近い状態のアプリのウィンドウでもXPならドラッグできたりしますし)
XP特有の現象なのかもしれません。

>>856氏の方法が一番綺麗に実装出来そうなのですが、なにぶん今のヘタレな自分の実力では
理解して実装するまでに丸3日はかかりそうなので、MessageBoxで逃げる事にしました。
で、今度はダイアログ中にキャンセルボタンがないと右上の×ボタンが無効になる事について
文句を言われてますが....

....本当に、開発ツールの仕様&バグを許せないのなら、開発ツールに
DELPHI+VCLやVBを使わせるんじゃないと小一時間問いつめたい....まったく。
ええと、スレ違いなのでこの辺にしておきます。

皆様、回答していただきありがとうございました。
>>880
メッセージを表示する前に、そのFormに対する
クリックイベントを、すべて破棄するようにすれば
いいんでないの?
882デフォルトの名無しさん:03/12/10 23:33
Delphiについて教えてくださいまし・・・
別のフォルダにある、DOSのプログラムを
コマンドラインオプション付きで実行したいのですが、
いい方法ありますか?
(´-`)。o ○ (茶々を入れるワケじゃないが、「鬼連射なんて馬鹿なことするユーザ」は
何が起きてもお前が悪いワケで。起きたことは、そのユーザが始末すりゃいいと…)
>>878
TComboBoxを継承する新しいClassを作成すれば
うまくできると思うけど。
あと、表示用とは別のComboBoxをVisible:=Falseで
作成しておいて、Countはそっちを参照するとか。
一時的にフォーカスを移動させればできるんかなぁ。
それとも、うまく表示させることのできるメソッドが
ComboBoxにあるんかなぁ。

>>882
ShellExecute
>>880
根本の問題はGUIアプリで数秒以上固まるようなコードを書くことだろ。
ユーザーから見たら固まること自体不具合といえるだろ。
(´-`)。o ○ (鬼連射しなくても固まるのか?鬼連射しなかったら
固まんないならいいんじゃないの?)
887882:03/12/10 23:51
>>884
どうもです。
それってAPIですか?
>>887
頼むから検索ぐらいしてくれ
>>886
操作不能と固まるのは待った区別の話だ。
>>852嫁。そして後者を避けるのは開発の基本。
(´-`)。o ○ (だから鬼連射しなきゃいいんだっつーの)
>>890
連射とは別のそれ以前の話しだっつうの。
馬鹿は消えな。
            _____________
     ∧,,∧   / 質問っす。
    ミ,,゚Д゚彡< 
   'ミ つ旦)~~  \___________
  ⊂ミ",, ,,ミ つ

ValueListEditor使っていて、激しく疑問に思うことがあるです。

TStringListのNamesとかValuesの使い方全般ですが
A=10
B=20
C=30
A=40
というデータを扱っていて
4つめの、"40"という値を取得するには
どうすればいいのでしょうか?

よろしくお願いします。
>>891
( ´_ゝ`)フーン
>>892
線形探索(バカサーチ)
>>893
お前らのつくったのは、
想定外の操作させたらエラーでまくりそうだなw

設定ファイルをいじるユーザが悪い、
そんな操作は想定してない、
そんなことするユーザが悪い

大変ですね ププ
>>895
お前が作ったのは凄そうだな。
漢字くらい使えよ。
なんだ「つくったのは」って(ププ
>>896
あ、漢字読めるんだ。
ごめんごめん。
>>892
Valuesは重複項目は想定外だろ。
INIファイルで同一キー、同一セクションが複数あった場合に後ろの項目が無視されるのと一緒。
897は書けないけどな。
鬼連打するユーザが悪い、ユーザに勝手に処理させろとか
言ってるからだろ。

何らかの操作で不具合がでてしまう場合、作成側としては
何とか回避しようとするのが当然だろ。
気づいたから対処しようとしているだけで、それをユーザの
責任にして何もしないとしたら最悪だろ。

その姿勢は単なるタイプミスや変換ミスの揚げ足を取って
他人を批判するのと全く同様だな。
現実問題として「つくった」なんて書いてるヤツはアホだろ。
文書で出してみろよ。馬鹿にされるから。
>>901
また本質とは違うところに持って行くのですねw
文章に関して馬鹿にしたいら、いくらでもどうぞ。

そんで、アンタは鬼連射で不具合がでる事象に
気づいたら対処すんの?それともしないの?
鬼連射は問題の本質ではないと何度言わせれば・・・
>>902
アンタが気を付ければいいんじゃないの?
他人にとやかく言うなら言葉を選べ。
>>904
また意味のない発言をw
鬼連射の問題じゃなくても、俺は不具合があったら対処するよ。

アンタは気付いた不具合に対して対処しないの?w
>>905
だからアンタが気を付けたいんなら、アンタは気を付けてればいいってこと。
他人は他人。
「本質、本質」書いてるけど、質問の本質を逸脱してるのはそっち。
馬鹿ばっか
>>906
なるほど了解。

あなたは対処しないということですね。
別に対処しなくても「他人」だから文句いいません。

ただ、私はそういう人はプログラマとしては最低だと
思っています。別に「他人」のことだからどうでもいいですが。
お約束の言葉:
「どうでもいいなら書くなよ」(藁
またVB神様降臨かな?
910=VB神様
>>909
確かにね。
でも「他人は他人。」と結論だすなら、
鬼連射によって発生する問題をなんとかしたいと思って、
(鬼連射は本質的な問題じゃないかもしれないけど)
ここにカキコしに来ている人に対して、
「鬼連射するユーザが悪い」とするのは失礼じゃない?

自分が気にしないなら、私は気にしないと書くか、
書き込みしなければいい。
>>912
「どうでもいい」割には、まだ続けるの?
それより、質問者に的確なレス書いてやった方がいいんじゃないの?
空気読めてないね
906氏の「気を付けたいなら気を付けろ」の発言に対して
908、912氏は「気を付けたい人が書き込みしてるのに、
茶々いれるな。他人は他人なんだろ?」と返答してるわけだ。
それを揶揄して「どうでもいい」と書き込みしてるだけだろ。
>>914
別にあなたの意見は知りたく無いんですが。
本人でも無いのに代弁する必要は無いと思うが。
それとも本人?w
ああ、「どうでもいい」って書いちゃったから、
レス出来ないんだ。
で、自作自演と。
ご苦労さん。

     ∧,,∧  ハフー
    ミ,゚Д゚,彡     
   ⊂ミU,,Uミ⊃ −3

>>898
ちょとがっくり。

重複の許可/不許可の選択に
対応するクラスじゃないと困るときが多いなぁ
ゲームのメインループをOnIdleで作っているんですが、
処理するメッセージとかが無いときに設定した関数が呼ばれるんですよね。
で、今まではOnIdleで指定した関数内で描画とかなにやらやってたんですが、
CPUは常に100%。ここまではokなんですが・・・

描画が間に合ってるときは、判定して描画を実行せずに関数をexitさせてたんですが、
このとき sleep(1) とかを挟むと、CPUが一気に開放されるのは何故なんでしょうか。
sleepしなくても、関数内で何もしないんだったら100%負荷になんてならないんじゃ?と思ったもので・・・。
そりゃSleepしている間はCPUが寝てるからだろ。
メインループの処理が寝てる時間より短ければCPUが遊んでるように見える。
なるほど・・・負荷が減って描画能力上がる(゚∀゚)ジャンとか思ったんですが、
ということは、実際のパフォーマンスは上がってないってことなんでしょうか(;´Д`)?
下がっている。
ついでに、処理内容にもよるがCPUを常にブン回す設計は避けたほうがいい。
ハイエンドがPen3時代ならともかく、現状ではCPUが電気食いすぎて
PCが落ちる可能性もある。
>>919
>そりゃSleepしている間はCPUが寝てるからだろ。

いいえ、別のスレッドなりプロセスを処理しています。
働き者ですよ。CPUは。
>>921
アホか・・・。
と言うかPCに金をかけなさい。
ちゃんと熱設計されたメーカ製の10万以上する奴ね。


>>923
電気代は?
925デフォルトの名無しさん:03/12/11 08:17
232cのコンポーネントで、例えばCRが来たら受信イベントが起きるとか、
データを区切るキャラクターを指定すると、勝手に何かのリストに
溜めていってくれるとか、やってくれる物知りませんか。?
Del6のフリーの奴を使ってます。
>>710
どんな感じで表示したいの?
Windowsベースのゲームで
ユーザの任意の場所に文字を入力するインターフェースを
実装しているものを見たことが無いんだけど・・・

TEditを背景に溶け込ませる方法ではだめかな?
927デフォルトの名無しさん:03/12/11 12:08
Xp+D6でデータベース(Access2000+ADO)に
SQLを使ってアクセスしているのですが
次のエラーメッセジが出ました。
初心者で何が何か分かりません。

---------------------------
デバッガ例外が発生
---------------------------
プロジェクト Project1.exe が EOleException クラスの例外を生成しました。
'現在のプロバイダは単一の実行から複数の Recordset を返すことをサポートしていません。'
プロセスは停止しています。再開するにはステップ実行または実行を選択してください。
です。

やったことは
 (1)SELECT * FROM xxxx
 (2)DELETE FROM xxxx WHERE xxxxxxxx='10'
で、単純に表示して削除したいんです。

どうやって調べたらいいのかも分かりません。
よろしくお願いします。
>>927

ADOで抽出を行うときはテーブル名を付けないとエラーになります。
SQL := 'select フィールド名 from テーブル名 where テーブル名.フィールド名=値';
^^^^^^^^^^
これかな?
>>928

^^^^^^^がずれた。

where テーブル名のテーブル名です。
930デフォルトの名無しさん:03/12/11 14:42
フォームの継承でコンストラクタをオーバーロードして引数を拡張
元のコンストラクタは引数を拡張したコンストラクタで呼び出すため
隠したいのですがうまくいきません
下記の記述では、何か足りないのでしょうか?

type
 TFormA = class(TForm)
 private
  constructor Create(AOwner: TComponent); overload; override;
 public
  constructor Create(AOwner: TComponent;
   const Value: Integer); reintroduce; overload;
 end;
932927:03/12/11 15:11
SELECTは上手くいくのですがDELETEやINSERTが上手くいきません。
933927:03/12/11 15:28
>>928,>>929
ExecSQLを使えば上手くいきました
どうもです
934デフォルトの名無しさん:03/12/11 15:41
>>931
ありがとうございます

>>930の文でコンパイルは通るのですが
他のUnitでこのクラスを使用した場合
なぜか、privateにあるCreateが使用出来てしまうのです。
お分かりの方、引き続きお願いします

http://www.borland.co.jp/delphi/papers/d4guide/d4guide07.htmlの内容
大変参考になりました
935デフォルトの名無しさん:03/12/11 15:43
Windowsのマウスポインタをプログラム上から移動させたり
クリックしたりするにはどうやればいいでしょうか?
自動作業TOOLみたいなのを作りたいのですが・・
OLE Drag&Dropについてですが
http://www2.odn.ne.jp/takao-n/download/index.html
からOleDnD Ver1.02を落として利用しています。
これでIEからURLリンクを取得しようとしているのですが
FormatNameを「FileContents」にしてもDrag&Dropの受け入れが始まりません。
このソースを読んでも理解できない程度のレベルですが分かる方いたら教えてください。

無理してoverloadする必要がないと思うが。
というより、そもそもpublicからprivateに変更するとかできないと思う。
うむ930の例だったら、const Value: Integerの値はプロパティ
として渡すこともできるし、Create時に渡したいだけだったら、
overrideして、inheritedでCreate(AOwner: TComponent);
してあげればよさげ。
>>939
936じゃなくて
>>935
に対してのレスです。
スンマソン。
941デフォルトの名無しさん:03/12/11 16:56
Editボックスの先頭6文字をチェックしたいのですが
コンパイルエラーになります。


コード
var p1,p2 :PChar;
 str1,str2 :String;

str1:= Edit1.text;
p1 := @str1;
str2 := 'xxxxxx';
p2 := @str2;

if StrLComp(p1,p2,6) = True then //コンパイルエラーになる

エラーメッセージ
 [エラー] 互換性の無い型です

初歩だと思いますがよろしくお願いします。
>>941
>if StrLComp(p1,p2,6) = True then
整数とTrueを比較したらあかんやろ。
つーか、まずヘルプ見れ。
943941:03/12/11 17:13
>>942
どうもです。(パニクってるんですみません)
944デフォルトの名無しさん:03/12/11 17:19
>>937,938
返信ありがとうございます

>inheritedでCreate(AOwner: TComponent);
これはCreate(AOwner: TComponent; const Value: Integer);
の実装部で行ってまして、
constructor TFormA.Create(AOwner: TComponent;
begin
 inherited Create(AOwner);
end;

constructor TFormA.Create(AOwner: TComponent;
 const Value: Integer);
begin
 Self.Create(AOwner); 

 case Value of
 //何たら、こうたら。。。
 end;
end;
となっています。

これを使用している別ユニットで
元のCreateを隠したかったのですが
可視性を低下させることは出来ないのですね・・・
ついでだが、p1・p2がStrLCompに渡すためだけに使ってるなら
StrLComp(PChar(str1), PChar(str2), 6)
と書いた方がいいと思う。個人的な感性だが。
946941:03/12/11 17:25
))945
ありがとうございます。すっきりとしたコードになりました。
947930:03/12/11 17:25
あ、今>>938氏のおっしゃってることが理解できました

前の返信は忘れてください(^^;

下記に変更した内容を記述します

type
 TFormA = class(TForm)
 public
  constructor Create(AOwner: TComponent;
   const Value: Integer); reintroduce;
 end;

実装部
constructor TFormA.Create(AOwner: TComponent;
 const Value: Integer);
begin
 inherited .Create(AOwner); 

 case Value of
 //何たら、こうたら。。。
 end;
end;
>>947
reintroduceってVirtualなメソッドをoverloadするときに使用するんじゃなかったっけ。
この場合はreintroduceじゃなく、overrideだけでいいんじゃないの?
>>948
なんでヘルプ見ないかな?
950930:03/12/11 17:51
>>948
継承がTComponent>...TCustomForm>TForm>TFormAとなっていまして
TComponentでCreateはvirtualで宣言されているようです

もしかしたら、また私の理解が不足してるのかも。。。
間違っていたらごめんなさい。

面倒くさいから
952デフォルトの名無しさん:03/12/11 18:10
OLEで起動させたエクセルのウィンドウの Xマークを
無効にしたのですが、どうすればいいのでしょうか?
どなたか教えて下さい。
Pure型のP2Pソフトを作ろうと思っています。//IndyのTcpServerとTcpClientを使う予定です。
相互にリンクを張り、ネットワークを形成します。3台以上
鯖側ソケットは多接続可能なので1つでいいと思いますが
鞍側は1ソケット辺り1つしか接続張れませんよね?
そうなると、やはり鞍側ソケットは接続したい数だけ設計時にあらかじめ作成しておかねばなりませんか?
動的に必要な分だけ作成できればいいのですが、イベントの関連付け(?)方が分かりません。

なお、当然のことながら全ての鞍ソケでのイベントは同じです。
954953:03/12/11 18:36

http://forum.nifty.com/fdelphi/faq/00117.htm
ども、これ参考にやってみま
955デフォルトの名無しさん:03/12/11 18:37
音を重ねて鳴らす方法を教えて下さい。
今は一つの音を鳴らしている間に他の音を鳴らすと最初の音が消えてしまいます。
やらしくおねがいします。m(_ _)m
956952:03/12/11 19:03
952です。
質問の訂正です。
OLEで起動させたエクセルをDelで作ったソフトからのみ
閉じるようにするにはどうすればいいのでしょうか、ってことです。
Del7+Win2000です。
宜しくお願いします。
>>953
OnChange := 適当;
958デフォルトの名無しさん:03/12/11 23:00
>>956
無理を言ってはいけません。
959デフォルトの名無しさん:03/12/11 23:03
>>955
MIDI使へ
>>955
WaveMix.dll
DirectX…とつぶやいてみる。
962956:03/12/12 08:02
>>958
はっ!りょうかいすますた!
963デフォルトの名無しさん:03/12/12 20:26
エクセルのファイルを印刷したいと思い下記のようにしたのですが、
これだと、シートが複数枚有っても1ページ目しか印刷されないようなのですが、
全ページ印刷させるには、どうすればいいでしょうか?
if OpenDialog1.Execute then
ShellExecute(Handle,'print',pchar(OpenDialog1.FileName),nil,nil,SWP_HIDEWINDOW);

WIN2000+デルファイ7PROです
宜しくお願いします。
>>963
1.スタートメニューをクリック
2.[ファイル名を指定して実行]をクリック
3.[名前(O):]にExcelの実行ファイルとオプション指定(オプションはExcelのヘルプファイル参照)
4.[OK]をクリック。
5.正常に起動したら、名前欄をクリップボードにコピー
6.ShellExecuteの第2パラメータに'open',第3パラメータに先ほどの名前をペースト。
965 ◆w/GbaCetvo :03/12/12 20:39
MD5を生成する http://forum.nifty.com/fdelphi/samples/01242.html を参考に
コードを書いてみたのですが、バイナリファイルの md5 値が実行する度に変わってしまいます。

どうも TFileStream の使い方を誤っているかか、キャストの方法が悪いような気がします。
string(buffer) としてバッファを一度 string にキャストしているのがいけないんでしょうか?
Array of Char を PBYTE に変換するやり方がこれしか思い浮かばなかったので、
この方法を使っているんですが、どうするのが良いのでしょうか?
966965 ◆w/GbaCetvo :03/12/12 20:39
インデントを再現するために、半角スペース2個を全角スペース1個に変換しています。
function MD5String(FileName: string): string;
const
 BufferSize = 512; // 根拠はないけど、512 くらい?
var
 ctx: MD5Context;
 digest: array[0..15]of Char;
 buffer: array[0..BufferSize -1] of Char;
 i, DataSize: Integer;
 Stream: TFileStream ;
begin
 Stream := TFileStream.Create(FileName, fmShareDenyWrite);
 try
  Stream.Position := 0;
  MD5Init(ctx);
  while TRUE do begin
   DataSize := Stream.Read(Buffer, BufferSize);
   if DataSize = 0 then break;
    MD5Update(ctx, PBYTE(PCHAR(string(buffer))), DataSize);
  end;
  MD5Final(ctx, digest);
 finally
  Stream.Free;
 end;

 Result := '';
 for i := 0 to 15 do
  Result := Result +
   LowerCase(IntToHex(BYTE(digest[i]), 2));
end;
buf: array[] of byte;
にしてSizeOf使え。
つか問題の切り分けくらいしとけ。
968 ◆w/GbaCetvo :03/12/12 21:17
>>967
var
buffer: array of byte;
(略)
DataSize := Stream.Read(Buffer, SizeOf(buffer));
if DataSize = 0 then break;
MD5Update(ctx, PByte(buffer), DataSize);

としてみましたが、EAccessViolation クラスの例外が発生してしまいます。
969 ◆w/GbaCetvo :03/12/12 21:36
>>965-968
以下のように記述することで解決しました。ありがとうございました。

const
BufferSize = 512;
var
(略)
buffer: array[0..BufferSize -1] of byte;
(略)
begin
(略)
DataSize := Stream.Read(buffer, BufferSize);
if DataSize = 0 then break;
MD5Update(ctx, buffer, DataSize);
970963:03/12/12 22:08
964さん、ありがとうございます。
起動オプションが分かりません。
ヘルプを見たり、ぐぐって見ましたが目的の物が見つけられませんでした。
どなたか、ヒントだけでもお願いします。
971 ◆le/tHonREI :03/12/13 00:56
メインウィンドウ以外の新しいウィンドウをメインウィンドウのメニューバーから開きたいのですが、どのようにすればよいのでしょう?
また、メニューバーの項目で「アプリケーションの終了」を行う事はできるのでしょうか?
できるのなら、そちらのやり方も教えて下さい。お願いします。
また自分はプログラミング超初心者なので、delphiを勉強する上で役立つサイト等ありましたら教えて下さい。
お願いします。
972デフォルトの名無しさん:03/12/13 01:00
また「愛ちゅん、シゲさん、ガキさん」がいないのか…。
ちょっとヒドくね?
あんまりだなぁ…。

よっすぃー優勝ってのは…。
973972:03/12/13 01:01
誤…誤爆…。
>>970
ネタのつもりだったんだけどな…
アプリ板でも逝ってコマンドラインからやる方法を聞いた上でShellExecuteにコピペしる。

>>971
>新しいウィンドウをメインウィンドウのメニューバーから開きたい
大さっぱに説明すると以下の通り。

1.新規作成から新しいフォームを作る。
2.フォームのNameプロパティに適切な名前を付ける。
3.フォームのユニットファイルに名前を付けて保存する。
4.メインフォームのinterface部の下にあるusesに、3.で保存したファイルの名前(拡張子無し)を挿入。
5.適切なメニューイベントを作る。
6.2のフォーム名.show メソッドで表示させる。

>メニューバーの項目で「アプリケーションの終了」を行う事はできるのでしょうか?
基本的にはメインウィンドウを閉じれば自動的にアプリケーションは終了する。
Closeメソッドを使えばよい。
例えば、TabControl.Canvas.Font.Color := cl赤; ってやるのと
SetTextColor(TabControl.Canvas.Handle, RGB(赤)); ってやるのとでは
メリット/デメリットってあるんでつかの?
>>975
別に移植するつもりは無くても、意味も無く環境依存なコードを書くのもどうかと思うが。
>>976
了解しますた
978デフォルトの名無しさん:03/12/13 01:58
最近Delphiいらないんじゃないかと思ってきたんですが
気のせいでしょうか?
どなたか次スレおながいします。
>MD5Update(ctx, PBYTE(PCHAR(string(buffer))), DataSize);

bufferの最後に#0が無いかもしれないね。
自身を削除するプログラムを作ろうとしているのですが.
うまくいかず困っています.

1.自身を削除するバッチを作成
2.CloseHandle(Application.Handle);にて自身の開放準備
3.自身を削除するバッチを実行
4.すかさず自身を終了

の四ステップを考えています.
ところがこれうまくいかないのです(TT
3をFormCloseに書いてみたりいろいろ試してみたのですが
どうしてもうまくいきません
何方が解決策お持ちでしたらご伝授くださいm(_ _)m
@echo off
MyApp
del MyApp
983デフォルトの名無しさん:03/12/13 11:34
OLEでエクセルを起動させ
Excel.Quit;
Excel.Unassigned;
として終了しているのですが、
実際は、フォームを閉じないとエクセルのプロセスが
消えないのですが、何か対処法はありますでしょうか?
デルファイの文法ってどういうのですか?
985971 ◆le/tHonREI :03/12/13 11:59
>>974
showメソッドでぐぐって "unit6.show;"を付加して実行しようとするんですけど、
[エラー] Unit1.pas(77): 未定義の識別子 : 'show'って出るんです。
開きたいウィンドウ名はunit6、イベントは下記の通りです。
procedure TForm1.N2Click(Sender: TObject);
begin
end;
また、closeメソッドについても上のイベントとボタンの名前以外は同じなので
上のイベントを使って説明してくだされば幸いです。宜しくお願いします。
>>984
Object Pascalに非常に類似しています。

>>985
Form1.show();
987971 ◆le/tHonREI :03/12/13 13:49
>>986
ありがとうございました。おかげで少し形になってきました。

皆さんでDelphi入門書のおすすめありますか?
今日か明日くらいに書店で購入してこようかと考えているのですが、
どうせ買うなら「これ一冊」という感じのを購入したいので先人の皆さんのお役に立った本を紹介してください。
988971 ◆le/tHonREI :03/12/13 13:54
すいません、追加で質問よろしいでしょうか?
現在メニュー関係を弄りだしたのですが、ショートカットが思ったようになりません。
Alt+Oなどを任意で設定できるのでしょうか?
また、Alt+Oに付加的にCtrl+Oも追加できますか?
追加質問になり大変申し訳ありませんが、やりかたのご指導お願いします。
>>987
>>68のサイトをみれば、困ることはほとんどないと思うが・・・

あとはコンポーネントのリファレンス、
Borland Delphiリファレンスガイド―6&7 Personal対応
が、初めてコンポを使うときに判りやすくてよかった。
あと、慣れてくるとDelphi6プログラミングバイブルが役立つ。
Delphi7のコースウェアと魔法のTipsも持ってるけど、俺はあんま見ないな・・・

あと個人的にDelphiコンポーネント設計&開発完全解説
の内容は時間があれば熟読してみたいとオモタヨ

>>988
TMenuItemのショートカットのことなら、ShortCutプロパティのヘルプをみれ。
複数のショートカットが割り当てられるかはわからない。
990971 ◆le/tHonREI :03/12/13 14:15
>>989
色々とご指導ありがとうございます。
ショートカットも欲しい機能だったのですが、
メニューでファイルだったらAlt+Fで開く"Flie(F)"ってのを作りたいのですが、
この場合はどうすればよいのでしょうか?

あと、次スレ必要でしたら立てますがいかがしましょうか?
>>990
http://www.geocities.jp/takamori700/faq/idx03_vcl_TMainMenu.html
このように設定して、オブジェクトインスペクタのショートカットプロパティを設定

でいい?
992971 ◆le/tHonREI :03/12/13 14:42
>>991
即レスありがとうございます。
ちょっと自分の考えとは違うんですが、詳細は以下のSS見ながら説明します。
ttp://up.isp.2ch.net/up/8e44c4fe1a3a.jpg
今この状態だと、ファイルがファイル(W)になってしまっています。
これをAlt+Fで開くファイル(F)にしたいのですが…
ShortCut全部取っ払ってメニューのキャプションを"ファイル(&F)"にしとけ
994971 ◆le/tHonREI :03/12/13 14:54
>>993
ありがとうございました。おかげでうまくいきました。
あと、次スレ立てました。
くだすれDelphi Part9 (超初心者向け)
http://pc2.2ch.net/test/read.cgi/tech/1071294733/
function MD5FileHash(Stream: TFileStream):string;
const
BufSize = 32768;
var
ctx: MD5Context;
digest: array[0..15]of Char;
buffer: pByte;
i, datasize: Integer;
begin
Getmem(buffer,BufSize);
try
MD5Init(ctx);
while true do begin
DataSize :=Stream.Read(buffer^,BufSize);
if DataSize = 0 then break;
MD5Update(ctx, Buffer, DataSize);
end;
MD5Final(ctx, digest);
finally
FreeMem(buffer);
end;
for i := 0 to 15 do
Result := Result +
LowerCase(IntToHex(BYTE(digest[j]), 2));
end;
996デフォルトの名無しさん:03/12/13 19:23
1000!
997
998
999

もそもそと1000ゲットするとはぞっとしない由。

次は http://pc2.2ch.net/test/read.cgi/tech/1071294733/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。