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

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

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

<その他>
ボーランド
http://www.borland.co.jp/
DelWiki
http://onigiri.s3.xrea.com:8080/delphi/
2デフォルトの名無しさん:04/10/11 09:30:09
3デフォルトの名無しさん:04/10/11 10:44:33
4デフォルトの名無しさん:04/10/11 11:03:44
>3 はブラクラ。踏まないように。
5デフォルトの名無しさん:04/10/12 08:29:41
TStringListのLoadFromFileメソッドで「ファイルXXXXXは開けません」というメッセージがでます。

それは使用中のファイルなのですが、これを回避して開きたいのですがどうしたらいいでしょうか?

メモ帳など他のソフトではそのまま開けるので完全?にロックされているわけじゃないようなので
ファイルオープンの方法が変わればいけるんだと思うんですが
こういう場合はどういった命令で読めばよろしいでしょうか?
6デフォルトの名無しさん:04/10/12 08:38:10
TFileStreamで開いてTStringListのLoadFromStreamじゃダメかな?
75:04/10/12 08:58:41
ありがとうございます
さっそくTFileStreamで開いてみましたが同様のエラーがでてしまいました
85:04/10/12 10:07:23
開けるはずなので色々調べたんですがどうしてもDelphiの命令で開けません。

あきらめ半分でWin32APIを使ったら・・・なんとすんなり開けてしまいました。
以下が結果で、ヘルプを見た感じだとどっちも同じことをするようにしか見えないのにできない。
D6Personalゆえソース見えないんですが内部でどのAPI呼んでるんですか?
FileStream.Createがどうしてダメなのか、わかる方いませんか?


//開けない
TFileStream.Create('test.txt', fmOpenRead, fmShareDenyNone );

//fmShareCompatFCB によりファイルを開く方法と互換性がある
//fmShareExclusive他のアプリケーションはファイルを開くことができない
//fmShareDenyWrite他のアプリケーションは読み出し用にファイルを開くことはできるが,書き込み用に開くことはできない
//fmShareDenyRead他のアプリケーションは書き込み用にファイルを開くことはできるが,読み出し用に開くことはできない
//fmShareDenyNone他のアプリケーションからのファイルの読み出しおよび書き込みを妨げる処理は行われない

//開ける Win32API
CreateFile('test.txt', GENERIC_READ, 3, nil, OPEN_EXISTING, 0, 0);

//0 共有しない 他のアプリケーションからオープン出来ない
//FILE_SHARE_READ = 1 他のアプリケーションから読み込み可能
//FILE_SHARE_WRITE = 2 他のアプリケーションから書き込み可能
//READとWRITEをあわせて 3 (定義はなし)
9デフォルトの名無しさん:04/10/12 10:34:17
>>8
もしかして「読み書き属性」のままファイルを開こうとしているじゃない?
読み書き属性なら「書き込めないと困る」からエラーが出ても不思議じゃ
ないんだけど。

LoadFromFileの前にFileMode=0を入れてエラーが出るか確認してみて。
105:04/10/12 11:20:36
>>9
FileMode は Reset 手続きでしか使わないのでは?
TFileStream.Create('test.txt', fmOpenRead, fmShareDenyNone );
の命令文でEFOpenErrorになります。
直前にFileMode := 0 にしてもやはり変わりませんでした。
11デフォルトの名無しさん:04/10/12 12:00:01
ん? TFileStream.Createの3番目の引数はWindowsでは使わないはずだが。
TFileStream.Create('test.txt', fmOpenRead or fmShareDenyNone );
じゃないかな?
125:04/10/12 13:09:23
>>11
勘違いしてました_| ̄|○
指摘の通りorで指定しなおしたのですが、やはりEFOpenErrorになりました
135:04/10/12 13:16:11
ごめんなさい、前のEXEファイル動かしてました
動きました!!

引数指定ミスだったとは・・・・・・ご迷惑おかけしました。
回答くださったみなさんありがとうございました。
149:04/10/12 16:38:15
>>10
あ、ほんとだ。前ここで引っかかったことがあったから、
てっきりそうだと思ってた。
15デフォルトの名無しさん:04/10/12 18:17:40
くだスレらしくてよいな、ここまでの流れ。
16デフォルトの名無しさん:04/10/12 20:21:55
くだらしいとき、くだらしく、くだらした
17デフォルトの名無しさん:04/10/12 20:58:48
IDEを拡張するやつで、
関数一覧を表示してオブジェクトツリーにドッキング出来るの
あったら教えて。(D6パーソナル)
18デフォルトの名無しさん:04/10/12 23:05:20
Personal には無い。
19デフォルトの名無しさん:04/10/13 01:52:22
文字列データが扱いたいのですが、TStringsプロパティを作るとコンパイラに怒られます。
string型でもいいのですが、LoadFromFileとかのメソッドが使えたほうが便利なんです。
仕方がないので、TMemoを非表示にして、TMemo.Linesにデータを入れてるんですが、
何かもっと普通の方法があるはずだと思うのですが。。
どなたか教えてくださいませ m_ _m
20デフォルトの名無しさん:04/10/13 02:03:23
コンパイラは何て言ってる?
21テレパス名無しさん:04/10/13 02:22:04
× TStrings.Create
○ TStringList.Create
22デフォルトの名無しさん:04/10/13 02:23:51
>>19
TStringlist
23デフォルトの名無しさん:04/10/13 02:25:45
くれぐれも
「SL.Create」としないように。

経験者談w
2419:04/10/13 10:20:56
TStringListでできましたー。
ありがとうございます。^o^

>>20
「警告」抽象メソッドを含む'TStrings'のインスタンスを作成しています。
といわれました。
25デフォルトの名無しさん:04/10/13 10:54:03
フォーム上の全てのコントロールのフォント名を指定されたものに置き換えるには
どうすればいいですか?
26デフォルトの名無しさん:04/10/13 11:07:28
フォームのフォントを変える
>>25
設計時の話だと思いますのでその前提で.

フォーム上のコントロールのフォント設定はどうなっていますか?
全くいじっていない場合はコントロールはその親となるコントロールの設定に合わせますので,
フォームのフォント設定を変更すればすべてのコントロールの設定も同様に変わります.

いじっている場合には個別に変換することになるでしょうが,
フォームをテキスト形式で表示させれば
ユニットファイルのソースコードと同じように文字列置換できます.

フォームがテキスト形式で表示するには
対象となるフォームを右クリックして『エディタで編集』をクリックします
(または対象となるフォームがアクティブな状態で[Alt]+[F12])

ソースコード中の Font.Name というところでフォント名を指定しているので
ここの既存のフォント名を任意のフォント名に置き換えます.
フォント名がデフォルトだとこの記述がないので自分で書き足す必要があるかもしれません.
念のため,あらかじめバックアップを取ってください.

※テキスト形式の表示をやめるには[Alt]+[F12]です.
2825:04/10/13 14:08:51
>26
いやそうじゃなくって…

プログラムで行うにはどうすればいいかな?っていう質問です。
ParentFontを使うのも無しでお願いします。

下のようにすればいいのかなあと思ったけど、エラーが出るので‥‥。

procedure SetFont( TheControl: TControl );
var
i: Integer;
begin
TheControl.Font.Charset := DEFAULT_CHARSET;
TheControl.Font.Name := "MS 明朝"; //ここはフォントにするとか
for i:= 0 to TheControl.ControlCount - 1 do
begin
SetFont( TheControl.Control[i] );
end;
end;
29デフォルトの名無しさん:04/10/13 14:26:53
> プログラムで行うにはどうすればいいかな?っていう質問です。

Form1.Font.Name :=

TControl では Font プロパティーにアクセスできない。protected だから
30デフォルトの名無しさん:04/10/13 14:34:50
TEditorを使って、行間にいろいろ表示できるようにしようとしています。
Paintメソッドをoverrideして、そこに描画命令を書くと、一応表示はされるのですが、
スクロールすると、残像が残ってうまく描画できません。
リサイズすると、きれいに再描画はされるのですが、スクロール量に
関係なく、canvasの原点から描画されるので、テキストの途中が
表示されてても、ページの先頭が描画されてしまいます。

スクロールされているときに、
実際に表示されている領域の原点が、(隠れている部分を含めた)
画像全体の原点から何ピクセルずれているのか
取得する方法がありますか?
31デフォルトの名無しさん:04/10/13 14:44:59
フォントの大きさにも依存するし。
作者は日本人なんだし、サポート掲示板もあるし、そっちで訊いたら
32デフォルトの名無しさん:04/10/13 15:03:16
なんで ParentFont を True じゃだめなの?
33デフォルトの名無しさん:04/10/13 15:05:37
あ。自分で全部コントロールしたい。って話なのかな?
29 さんのがヒント。

あなたの SetFont 関数の引数を TWinControl にし、
子コントロールをなめるときに、TWinControl またはそれの子孫のクラスかどうかを
判定して再起呼び出しすればよい。
34デフォルトの名無しさん:04/10/13 15:16:59
>TWinControl またはそれの子孫のクラスかどうかを

ラベルのフォントが変更できないでしょ
35デフォルトの名無しさん:04/10/13 15:19:27
D6のヘルプだと TWinControl でも Font プロパティーないけど
36デフォルトの名無しさん:04/10/13 15:23:35
RTTIでFontプロパティを持ってるかどうかを判断しとけ
37デフォルトの名無しさん:04/10/13 15:58:54
再帰プログラムの練習でしょ? 実用性からみて ParentFont を使わないってことはない。
3825:04/10/13 16:39:10
知り合いから相談された質問なんで詳しいことは分からないけど、
なぜParentFontを使わないのかというと「フォントサイズは
デザイン時のを使いたいから」らしい‥‥。

んで、>36の言うようなFontプロパティの有無を確認するっていう
方法は探したら下のように出てました。
http://130.158.124.192/~takeuchi/delphi/browse.cgi?index=068731

これと再帰と組み合わせれば実現可能ですね。
勉強になりました。
39デフォルトの名無しさん:04/10/13 19:28:37
何故Delphiってよくバカにされたり嫌われたりするんですか??
40デフォルトの名無しさん:04/10/13 21:21:36
>>39
ソースが分からんと答えようがない
41デフォルトの名無しさん:04/10/13 21:35:30
42デフォルトの名無しさん:04/10/14 02:22:22
つまり、>>39がDelphiをバカにして嫌っているのだから、
理由は>39の胸に手を当てて聞いてみるとよい。
43デフォルトの名無しさん:04/10/14 11:29:19
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
44デフォルトの名無しさん:04/10/14 12:29:31
lnkファイルの参照先を取得したいのですが
どうすればいいでしょうか?
45デフォルトの名無しさん:04/10/14 13:55:28
DrawGridにサムネイルを表示させているんですが
スクロールして再描写している最中に更にスクロールすると残像が残ってしまいます
再描写の部分をスレッド化すれば防げますか?
46デフォルトの名無しさん:04/10/14 14:25:08
>>44

http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=018949

のパクリだけど

uses
  ComObj,ActiveX,ShlObj,ShellApi;

function GetLinkedFilePath(LinkFile:string):string;
var
  PersistFile:IPersistFile;
  ShellLink:IShellLink;
  wsz:array[0..MAX_PATH] of WideChar;
  pfd:TWin32FindData;
begin
  ShellLink:=CreateComObject(CLSID_ShellLink) As IShellLink;
  OleCheck(ShellLink.QueryInterface(IPersistFile,PersistFile));
  Assert(Assigned(PersistFile));
  MultiByteToWideChar(CP_ACP,0,pChar(LinkFile),-1,wsz,MAX_PATH);
  OleCheck(PersistFile.Load(wsz,0));
  result := StringOfChar(#0,MAX_PATH);
  OleCheck(ShellLink.GetPath(PChar(result),MAX_PATH,pfd,SLGP_SHORTPATH));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := GetLinkedFilePath('C:\Documents and Settings\All Users\デスクトップ\+Lhaca.lnk');
end;
47デフォルトの名無しさん:04/10/14 14:28:51
> 再描写の部分をスレッド化すれば防げますか?

いいえ。

> スクロールして再描写している最中に更にスクロールすると残像が残ってしまいます

うーむ、シングルスレッドで再描画しながら同時にスクロールするってことがあるとは思えないが
48デフォルトの名無しさん:04/10/14 14:30:45
> 再描写の部分をスレッド化すれば防げますか?

いいえ。

> スクロールして再描写している最中に更にスクロールすると残像が残ってしまいます

うーむ、シングルスレッドで再描画しながら同時にスクロールするってことがあるとは思えないが
49デフォルトの名無しさん:04/10/14 14:31:36
あ、二重投稿すまん
50デフォルトの名無しさん:04/10/14 17:00:20
Delphiで、とあるクラスのメンバ関数を、同じクラス内で宣言している関数ポインタ配列にセットしたいんですけど、
どうすればよいのでしょうか?
51デフォルトの名無しさん:04/10/14 17:42:27
type TMyEvent = procedure(a, b: Integer) of object;
type TMyClass = class
MyMethods: array [0..99] of TMyEvent;
procedure MyMethod(a, b: Integer);
end;

var obj: TMyClass;
obj := TMyClass.Create;
obj.MyMethods[0] := obj.MyMethod;
52デフォルトの名無しさん:04/10/14 18:53:01
>>51
よくわかりました。ありがとうございました。
この場合、クラス生成後に自分で配列に関数を登録しますよね。
(見たまんまですが)
初期化付き?(というんでしたっけ?)で宣言する事はできないですか?
53デフォルトの名無しさん:04/10/14 18:56:49
52です。
初期化付きと言っているのは

aaa:array [0..6-1] of integer = (
0, 1, 2, 3, 4, 5
);

みたいな感じで。この0〜5が、要はクラスのメンバ関数にしたいんです。
とりあえず格納する配列はクラス外でもいいんですけど・・。
54デフォルトの名無しさん:04/10/14 19:55:57
無理
基本的にメソッドポインタはクラスインスタンスに従属してるから。
全部クラスメソッドにすれば可能かもしれないけど。
55デフォルトの名無しさん:04/10/14 21:40:30
配列プロパティにすればそれっぽく見えるけど…多分使い物にならない可能性大。
使い道よくわからんけど。
56デフォルトの名無しさん:04/10/15 01:51:14
皆さんは以下のような機能を実装したい場合にはどうしますか?

「ディレクトリにあるファイルをすべてにたいして適切な加工を施す。」
と言うプログラムを作りたいとします。

これをメインスレッドでやってしまうととんでもないことになるので、別途
ディレクトリの中のファイルを読み出し、適切な加工を施す処理を行う専用スレッドを作って、メインスレッドから
そのスレッドを起動して、処理させるという方法をとりました。

ところが仕様上である制約があるのです。

作業状態をこと細かくメインスレッドのForm上のLabelに報告せねばならない。(ユーザーがなにをしているか分かるように)
たとえば今〜フォルダの〜というファイルを処理しています。
処理結果は進行状態は何%ですといった具合にです。

ところがこれを実装しようとすると、処理専用スレッドの中で、いたるところでSynchronizeメゾットを呼び出さねばならず
スレッドの中はSynchronizeだらけになってしまいます。

これでは大変効率が悪いと思うのですが。皆さんならどのように実装しますか?
お知恵を拝借したいと思います。
長文失礼いたしましたm(_ _)m

57デフォルトの名無しさん:04/10/15 02:00:53
進捗の更新のタイミング=Synchronizeなんだからしょうがない。

進捗表示がいい加減でいいなら
スレッドセーフなCurrentDir, Positionプロパティを用意して
Timer使って一秒毎にラベルを更新するとか。
5856:04/10/15 02:03:35
レスありがとうございます


なんか自分のコードを見てですね。 Synchronizeばかり呼び出しているのをみて。
「かっこわるいコードだなぁ…」とおもっていたものですから…

やはりこれは仕方が無いのですね。もっとエレガントな実装方法があるのかなぁなんて思ったものですから…
59デフォルトの名無しさん:04/10/15 02:10:20
>もっとエレガントな実装方法
アスペクト指向であれば指定した一連のメソッドを抜ける際に
自動的にSynchronizeを呼び出すってできるんだけどね。
Delphiじゃサポートしてないけど。
60デフォルトの名無しさん:04/10/15 03:24:30
>>56
1:
Synchronizeを呼び出す別のメソッドを定義すればよい。
ファイル名や進行状況の値をクラスの変数などにして。

2:
ファイル名など排他制御が必要なものだけSynchronizeまたはクリティカルセクションで保護して更新。(取得時も保護ね)
進行状況の値は32bitの変数などで保護なしで更新もあり。
GUIの更新はタイマで定期的にそれらの値を参照して行う。
こっちの方法はGUIの更新頻度を一定にできるので負荷が少ない。

被ってる内容だが2が個人的にお勧め。1だと大抵の場合処理が遅くなるし負荷も高い。
61デフォルトの名無しさん:04/10/15 09:21:40
基本は子スレッドにファイル処理だけをやらせて、VCLの更新はメインスレッドにやらせる事ですな。
62デフォルトの名無しさん:04/10/15 10:57:07
ヘルプを見ると、配列の記憶域が2GBと書いてありますが、
これは例えば、
A[0..100,0..100]という配列があった場合、Aの中身全てを総合して2GBが限度ということですか?
6356:04/10/15 11:53:26
みなさんありがとうございます
>>60さんの二番でアプローチしてみたいと思います。


次いで質問で申し訳ないのですが…
>進行状況の値は32bitの変数などで保護なしで更新もあり。
integer型はクリティカルセクションの保護が必要ないのですか!?
64デフォルトの名無しさん:04/10/15 12:05:16
>ヘルプを見ると、配列の記憶域が2GBと
2G byte は Windows の制限/制約ですから、乗り越えることは大変ですよ。

配列は、実体を宣言した時点でメモリを確保されますから、
A[1..256, 1..256] の2次元配列は 64K (65536) 個の要素を格納します。
ひとつの要素の大きさが 1K (1024) byte だとしたら全体で 64M の(連続した)
メモリ領域が必要となります。

Delphi では、このトータルの最大値が 2G.

ビジネスアプリなどではめったに 2G の制限に達することはありませんが、
科学計算などで三次元配列とか使うと、限界に到達するのは早いです。
65デフォルトの名無しさん:04/10/15 12:44:00
>>62
SizeOf(A)が2G以上になったらコンパイルエラー。
66デフォルトの名無しさん:04/10/15 13:13:41
>>63
Windowsの動いているPCは大抵32bit以上だから、32bitの変数は1命令で変更される。(4バイトがバラバラに取得変更されることはない)
この特性から、変数書きこみが1スレッドだけならば保護しなくてもただしく値を取得できる。
67デフォルトの名無しさん:04/10/15 13:26:14
>>64
迅速な対応に感謝します。確かに、普通に使っていて2Gを超えることは無いと思うのですけど、
今回、2次元配列をサイズが448×448のビットマップ型で宣言しているんですよ。
それで、その変数がA[400,400]くらいのでかい配列なので。無理かな、と。
というか、普通はやんないことですよね・・。
68デフォルトの名無しさん:04/10/15 13:36:42
4バイト×448×448×400×400って100Gバイトを簡単に超えますけど・・・。
69デフォルトの名無しさん:04/10/15 13:52:03
>>68
ええと、ビットマップのサイズは、ファイルサイズではなくて画像の大きさです。
いずれにしろ、無駄なことをやってるには違いないんですが。
横着なことやってないで、Byte型で宣言して、
それに対応した画像描画プロシージャを呼び出すようにします。
70デフォルトの名無しさん:04/10/15 14:48:13
>>66
SMP環境でバグるけどな
71デフォルトの名無しさん:04/10/15 14:49:38
64bit CPU ならまた別だが、拡張されていない IA32 アーキテクチャそのものが
一度に 4G byte までしかアクセスできません。さらにその空間を OS や各種データ
でやりくりしなきゃいけないわけだから..

物理メモリの半分以上をひとつのデータで確保しなきゃいけなくなったら、何か間違っている。
と思わないと。

なお、フォトショップとかの画像処理アプリケーションでは、自前でメモリ管理をするのが定番です。
72デフォルトの名無しさん:04/10/15 14:51:02
>>70
>書きこみが1スレッドだけならば
って予防線張ってるじゃん
73デフォルトの名無しさん:04/10/15 14:52:15
>>72
それは関係ない
74デフォルトの名無しさん:04/10/15 15:39:05
>>71
参考になります。重いデータを扱うなら相応の気配りが必要ですね。

処理上のことで、もう一つ質問がしたいんですが、
単純な四則演算や、if文は一度に(単位時間あたり)どれくらいの演算ができるんでしょうか。
変な質問ですみません。演算量の多いプログラムを組んでいまして、処理落ちを心配しています。
試しに秒間数十万回の四則演算、数万回の条件文を組み込んだプログラムを回してみました。
そうしてもCPU使用率はほぼゼロ%になるんですが、ほとんど際限なく演算ができると考えていいのでしょうか?
(完璧なのかどうかは分かりませんでしたが、処理が行われてることも確認しました。)
演算の処理上、CPU使用率を参考にしていいのかどうかもわかっていないので、恐らくおかしなことを言ってるんだと思います。
また指摘していただければ幸いです。
75デフォルトの名無しさん:04/10/15 15:42:33
はじめましてハイパー初心者です。
エディタ部とブラウザ部に分かれた
HTMLエディタを作成しています。

エディタ部に書き込んだソースを
リアルタイム(エディタ部が変更されたときに対応)で
ブラウザ部に反映(更新)させているのですが
「ブラウザに表示される内容が縦長になった」場合
ブラウザの縦スクロールバーを一番下まで下ろしておいて
その状態でエディタにソースを書きたすと
ブラウザの縦スクロールバーが一番上に勝手に上がって更新されます。

これを回避し、ページを更新する方法がありましたら
教えていただきたいのです。


   スクロールバーの位置を記憶させておいて
   更新と同時にそこに飛ばす
   (記憶させたところにスクロールバーを戻す)
   という感じ・・ですか?
76デフォルトの名無しさん:04/10/15 17:19:34
>>74
CPUによるっしょ。際限無く、ってのはあり得ない
77デフォルトの名無しさん:04/10/15 17:28:20
>>70
SMPでも問題ない。マルチプロセッサのメモリアクセスについて勉強したほうがいいよ。
78デフォルトの名無しさん:04/10/15 17:37:22
atomicity
79デフォルトの名無しさん:04/10/15 19:56:36
SMP ネタは、別のスレでよろしくお願い。
80デフォルトの名無しさん:04/10/15 20:05:11
>>74
あなたのコードによるので、実測するしかない。

が、ものすごく大雑把に。クロック 1G の P3 クラスの CPU を考える。
1秒間に 1000 * 1000 * 1000 クロック存在する。
32bit の四則演算をキャッシュアクセスできたとして4クロックで処理できるとする。

そうすると一秒間に 250,000,000 / 2億5千回の単純計算が可能だ。

「秒間数十万回の四則演算」は、データがキャッシュ等 CPU の近傍に存在するうちは
CPU の能力の1%も使わずに処理できる。わけだ。

大雑把な数字でいいから、だいたいの目安を一度計算、会得しておくと、異常な結果に
気づきやすいぞ。
81デフォルトの名無しさん:04/10/15 20:28:50
9個のボタンを作って、それぞれクリックすると
キーボードの「1」「2」「3」〜
が押されたことにするようにするのはどのように書けばよいのでしょうか。

procedure TForm1.Button1Click(Sender: TObject);
begin
(ここに、キーボードの数字の「1」が押されたことにするように書きたい)
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key =('1') then
  showmessage:=('1が押されました')
8281:04/10/15 20:34:56
ごめんなさい自己解決しました。
83デフォルトの名無しさん:04/10/15 20:45:56
>>81
解決したようですけど、せっかくやったので・・・
Form1 の KeyPreview を true にし、Button1〜9 の OnClick イベントハンドラを
共有して、

procedure TForm1.Button1Click(Sender: TObject);
var
  KeyCode:Byte;
  Caption:string;
begin
  If Sender is TButton then begin
    Caption := TButton(Sender).Name;
    KeyCode := $30+StrToInt(Copy(Caption,Length(Caption),1));
    keybd_event(KeyCode,0,0,0);
    keybd_event(KeyCode,0,KEYEVENTF_KEYUP,0);
  end;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Ord(Key) of
    Ord('1')..Ord('9'):ShowMessage(Format('%d キー が押されました',[Ord(Key)-$30]));
  end;
end;
8481:04/10/15 20:55:27
>>83
すいません。ほんとにありがとうございました。
私は

procedure TForm1.Button1Click(Sender: TObject);
var c : Char;
begin
c := '1';
  form1.KeyPress(c);
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key =('1') then
   showmessage:=('1が押されました')
end;

一応これでやりたいことは出来ました。
82さんのは私の知識を遥かに超えていて良く分らない・・
85デフォルトの名無しさん:04/10/15 21:12:12
>>70
釣られないよw
86デフォルトの名無しさん:04/10/15 21:29:58
>>84

それはキーを押してることにはならない。ただ、ハンドラを呼び出してるだけ。
それが目的ならいいけど。

> form1.KeyPress(c);

これじゃコンパイルできないとおもうけどなぁ。

FormKeyPress(Sender,C);

だと思う。
87デフォルトの名無しさん:04/10/15 21:38:47
>>84
ハンドラを呼び出すだけでいいにしても、ButtonClick のイベントハンドラを
9つも書くのは無駄です。Button2〜Button9 までを選択して、OnClick イベント
ハンドラを Button1Click に設定すると一つですみます。

procedure TForm1.Button1Click(Sender: TObject);
var
  KeyCode:Byte;
  Caption:string;
  c:Char;
begin
  If Sender is TButton then begin
    Caption := TButton(Sender).Name;
    KeyCode := $30+StrToInt(Copy(Caption,Length(Caption),1));
    c := Chr(KeyCode);
    FormKeyPress(Sender,c);
  end;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Ord(Key) of
    Ord('1')..Ord('9'):ShowMessage(Format('%d キー が押されました',[Ord(Key)-$30]));
  end;
end;
88デフォルトの名無しさん:04/10/15 22:05:57
Delphi6 Personalで作成したソフトは無償なら配布可能でしょうか?
89デフォルトの名無しさん:04/10/15 22:22:47
オープンソースの2ちゃんブラウザのほとんどはDelphi6 Personalでもビルドできる。
90デフォルトの名無しさん:04/10/15 22:23:14
もちろんDelphi製のやつね。
91デフォルトの名無しさん:04/10/15 23:08:46
RPGやシミュレーションなどを作る場合にはHSPよりDelphiの方が向いてるんですか?
92デフォルトの名無しさん:04/10/15 23:23:19
>>91
RPGツクールに汁!
93デフォルトの名無しさん:04/10/15 23:40:34
>>91
Delphiの方が細かい事ができる。
難易度は変わらない。 後は好みの問題。
94デフォルトの名無しさん:04/10/15 23:43:57
SLGなど大量のデータ扱う場合はその手段が豊富なDelphiの方が有利だと思う。
95デフォルトの名無しさん:04/10/16 00:58:11
type
 THoge = record
96デフォルトの名無しさん:04/10/16 01:02:53
すいません間違えて途中で送信してしまいました

type
 PHoge = ^THoge;
 THoge = record
  Child : array of THoge; TArratHoge
 end;

 PArrayHoge = ^TArrayHoge;
 TArrayHoge = array of THoge;

THogeのChildをPArrayHogeにしたいのですができるでしょうか?
9796:04/10/16 01:04:47

  Child : array of THoge; TArratHoge

  Child : array of THoge; //TArrayHoge
です
9896:04/10/16 01:31:27
Child : array of THoge;
これ自体だめだったみたいですね
他の方法で実装することにします
99デフォルトの名無しさん:04/10/16 01:46:52
ていうかrecordなんて使うな
10075:04/10/16 14:05:54
>>75

ないんですね。
101デフォルトの名無しさん:04/10/16 15:07:52
TUIWebBrowserって、Delphi6パーソナルじゃぁインストできないんでしょうか?
本家いっても記述がないし、BBSもないので。。。
102デフォルトの名無しさん:04/10/16 15:55:03
103デフォルトの名無しさん:04/10/16 16:08:19
APIで、SetForegroundWindowの逆ってありませんか。
最前面から最後面に送るやつ。
104デフォルトの名無しさん:04/10/16 16:16:22
SetWindowPos
105デフォルトの名無しさん:04/10/16 16:26:42
>>104
できますたサンクスです
106デフォルトの名無しさん:04/10/16 17:10:47
>>102
ありがとうございました
107デフォルトの名無しさん:04/10/16 17:33:18
>>91
ツクールより自由でDelphiより高性能
でもDelphi製なんだけどな

【2D】ゲーム作成ツールGameMaker【マンセー】
http://pc5.2ch.net/test/read.cgi/gamedev/1087068523/
108101:04/10/16 19:20:19
>>102
vclieってのがないとDelphiに怒られて、やっぱりインストできませんでした。・゚・(ノД`)・゚・。
109デフォルトの名無しさん:04/10/16 21:45:44
質問です
override指令とoverload指令を同時に使用することはできませんか?
110デフォルトの名無しさん:04/10/16 22:06:40
override して引数変更できるわけないでしょ
111デフォルトの名無しさん:04/10/16 22:15:10
overload; virtual; がついているメソッドは reintroduce; overload; で
下位クラスで overload できるけど、override したことにはならない。
112デフォルトの名無しさん:04/10/16 22:22:19
引数ってヒキスウって読むんですね。ずっとインスウだと思ってた…
113デフォルトの名無しさん:04/10/16 22:47:37
引数で変数Rectが使われているときに関数Rectはどうやって使えばいいのでしょう?
114デフォルトの名無しさん:04/10/16 22:58:33
>>113
何も考えずにそのまま使っても、
関数として使われているか変数として使われているか
コンパイラが自動的に判断してくれる。

逆に言い換えれば変数か関数か識別できない構文は使えないと。
115デフォルトの名無しさん:04/10/16 23:08:20
>>114
即レスありがとうございました!
116109:04/10/16 23:12:57
レスありがとうございました
とりあえずReintroduceで解決しました。
117デフォルトの名無しさん:04/10/17 00:38:48
>>113
ユニット名を明示する
SysUtils.Rect(Rect.X, ...)
とか。SysUtilsじゃなかったような気もするけど。
118デフォルトの名無しさん:04/10/17 03:14:47
>>117
Classesにある。
で、ClassesのRect関数はTypesのRect関数を呼び出してる。
Point関数なんかも同じようになっている。
119デフォルトの名無しさん:04/10/17 05:41:40
変わりにBoundsを使えばいいかも。
120デフォルトの名無しさん:04/10/17 06:18:37
114ってあってんの?
121デフォルトの名無しさん:04/10/17 06:25:06
あってる
122デフォルトの名無しさん:04/10/17 06:49:52
114 はあっているけど、117 にあるように名前空間を指定することで区別することも
できる。ということ。
123デフォルトの名無しさん:04/10/17 10:38:08
勇気を出して質問します。

ディレクトリが空かどうかを調べたいのです。
具体的にはワールドカードでディレクトリをfindfirstで検索して見つかったファイルの数が0ならTRUEという手順なのですが、空ディレクトリを調べても絶対2になってしまいます。

なにかいい方法はありませんか?
124デフォルトの名無しさん:04/10/17 10:40:48
.
..
だろ、2なら空で良いんじゃねぇか?
125デフォルトの名無しさん:04/10/17 10:48:26
>>123-124
使い方を間違えてないか?
126デフォルトの名無しさん:04/10/17 11:02:21
.
..

があるんだろ
127デフォルトの名無しさん:04/10/17 11:30:53
>>123
拡張子がないファイルは必ずディレクトリとは限らないのでワイルドカードで引っかけてはダメ。
Pathは"*.*"にして、AttrにfaDirectoryを使うべき。

それと"."".."というディレクトリをカウントに含めない。
128デフォルトの名無しさん:04/10/17 11:32:01
おお、オレも同じようなことで悩んでたんだ。

.と..を取り除く方法って
(F.Name = '.')or(F.Name = '..')でifにかけるだけでいいの?

なんか原因不明のバグがあってこのifが原因かなぁと疑っているのだが
129デフォルトの名無しさん:04/10/17 11:56:15
>>127
faAnyFileじゃないとだめだろ。

>>128
それでいいよ。
処理はしょってF[1]='.'で原因不明のバグを生んだことがあったけどw
130デフォルトの名無しさん:04/10/17 12:18:02
良い初心者的質問ですね。>>123
2ch は匿名掲示板ですから、恥ずかしさは脇においといて聞くだけ聞いてみましょう。

コマンドラインで DIR やった場合にも

04/10/17 11:12 <DIR> .
04/10/17 11:12 <DIR> ..
0 個のファイル 0 バイト
2 個のディレクトリ 1,540,747,264 バイトの空き領域

と出ますね? . と .. は必ず存在します。これらの意味、利用方法がわからない
場合は google で「親ディレクトリ カレントディレクトリ」のキーワードで調べて
みましょう。
131デフォルトの名無しさん:04/10/17 12:24:46
そのまんまじゃねーかw
132デフォルトの名無しさん:04/10/17 12:43:39
つーか、FindFirstのサンプルをぐぐれば出てくるだろ
133デフォルトの名無しさん:04/10/17 12:43:46
ルートディレクトリでやったら . も .. もなかった。
.. は知ってたけど、. もないとは意外なり。
134デフォルトの名無しさん:04/10/17 12:55:49
>>133
ルートディレクトリはカレントディレクトリとする意味ないし。
親ディレクトリがないのはあたりまえ。
135デフォルトの名無しさん:04/10/17 12:57:51
>ルートディレクトリはカレントディレクトリとする意味ないし。
いみふめ
136デフォルトの名無しさん:04/10/17 20:15:06
TInifile.ReadStringでキーが存在しなかった場合ってどうやって処理するの?
DefaultValueに変な値入れとくとかはなしで。
137デフォルトの名無しさん:04/10/17 20:22:57
>>136
どうやってってデフォルト値がセットされてるとして処理するだけだろ
138デフォルトの名無しさん:04/10/17 20:23:29
>>136
DefaultValueに変な値入れといて、変な値であったら存在しなかったと判断する。
139デフォルトの名無しさん:04/10/17 21:04:53
ReadSectionしてNamesで拾ってけ
140デフォルトの名無しさん:04/10/17 21:45:32
>>135
.はカレント、..はペアレント
141デフォルトの名無しさん:04/10/17 22:55:05
delphi5に付属しているInstallShieldについて教えてください。
BDEも一緒にインストールさせたいのですが、どうしても、BDEがインストールできません。

この辺のやり方を解説しているサイトがあったら教えていただけないでしょうか?

具体的にはインストールしたマシンで実行しようとするとそんなデータベースは無いと怒られてしまいます。
142デフォルトの名無しさん:04/10/17 23:08:54
Delphiインストールしたときにフルインストールしてあるのか?
143141:04/10/18 00:19:56
>>142
即レスありがとうございます。
はい。きちんとインストールしてます。

すみません、私の質問の意味がきちんと伝わってないといけないので書きますと、
Delphi環境の入っていないマシンに自分の実行ファイルとBDEをインストールするように
InstallShieldで設定しているのに、InstallShieldを実行した後で、自分の作った
プログラムを実行するとそんなデーターベースソースは無いって怒られるんです。
144デフォルトの名無しさん:04/10/18 03:05:43
Delphi製オープンソースアプリってどのくらいあるの
まとめサイトとかあればプリーズ
145デフォルトの名無しさん:04/10/18 05:33:05
146デフォルトの名無しさん:04/10/18 06:41:49
Visual Basic (1951 projects)
が意外ですね。
147デフォルトの名無しさん:04/10/18 07:38:33
ユーザー数の多さから言えば妥当だと思われ。
すでに C#にも抜かれているんだな。
> C# (1879 projects)
もうそろそDelphiから手を引くのには良い潮時か。
148デフォルトの名無しさん:04/10/18 10:58:47
宣言する奴って停めて欲しいのかなw
ばかだなw
149デフォルトの名無しさん:04/10/18 11:22:32
なんの宣言?
なんでも宣言に読める奴もばかだなw
150デフォルトの名無しさん:04/10/18 12:10:33
ユーザー数だけで決めたいのなら、C# より C/C++/Java となりますが?>>147
151141=143:04/10/18 12:28:02
色々とチェックするところがあって答えずらいかも知れませんがどなたかお願いします。
152ググってきた。:04/10/18 12:59:11

269 :デフォルトの名無しさん :04/09/09 00:22
 BDEは付属のInstall Shieldでインストーラを作成し配布する。
 その他、BDEのディレクトリにあるBDEINST.CABを使ってWebで
 配布する方法もある。同じディレクトリにあるBDEINST.TXTを参照の事。
153141=143:04/10/18 13:10:44
>>152
たぶんそれはくだすれの過去ログだと思いますが、その質問をしたのは私です。
で、そのアドバイスに従ってやってみてBDEはたぶんきちんとインストールできたのですが、
どうもデータソース絡みの設定がきちんとできてないみたいでしてデータソース絡みが
きちんとインストールされていないようです。

一月悩んでもまだ解決しないのでどなたかお知恵を貸してください。
154デフォルトの名無しさん:04/10/18 13:39:56
>InstallShieldで設定しているのに、InstallShieldを実行した後で、自分の作った
>プログラムを実行するとそんなデーターベースソースは無いって怒られるんです。

じゃいくつか質問。
・ファイルは展開されていますか?(展開後の BDE ファイルがどれかはわかりますね?)
・BDE アドミニストレーターはコントロールパネルにありますか?それは起動できますか?

この二つがクリアされていれば、問題は BDE インストーラーではなく(おそらく)データベースの
Alias が定義されていないだけ。でしょう。

とりあえず、ここまで確認を
155141=143:04/10/18 17:27:27
>>154
レスありがとうございます。

>展開後の BDE ファイルがどれかはわかりますね?
がはっきりとは分からないのですが、実行ファイルはきちんと展開してあります。

あと、BDEもコンパネにあります。しかし、インストールしたいdatasourceは
表示されないです。
156デフォルトの名無しさん:04/10/18 19:43:54
>function TCustomActionList.IsShortCut(var Message: TWMKey): Boolean;

F5キーを押すとこのメソッドでエラーになるんですが、何でかな。
ショートカットキーは割り当ててないし。

ビジュアルコンポーネントをFreeした後にだけ発生します。
157156:04/10/18 19:55:59
エラーはEAccessVaiolationで、また、エラーが起きるときのself.nameは空っぽです。
158156:04/10/18 19:59:59
それと、F5キーを押すと、
>function TCustomActionList.IsShortCut(var Message: TWMKey): Boolean;
2回目でエラーが出ます。

エラーが出ない場合は5回ほど飛んできます。

self.nameに値が入ってる場合は、「ActionList1」です。
159デフォルトの名無しさん:04/10/18 22:24:17
質問させて下さい。

あるアプリを起動させ、そのアプリのあるウィンドウが終了するのを待ちたいと思ってます。
アプリ自体の終了を待つならばWaitForSingleObjectでできるみたいですが、
そのアプリの特定のウィンドウの終了を待つにはどうしたら良いのでしょうか?

宜しくお願いします。
160デフォルトの名無しさん:04/10/18 22:58:42
>>159
簡単にやるならウインドウハンドルが有効かどうかポーリングする。

一瞬の隙も見逃すわけに行かないなら
SetWindowLong関数を使ってウインドウプロシージャを書き換えてWM_CLOSEを拾う。
161デフォルトの名無しさん:04/10/19 00:30:52
>>156
そのビジュアルコンポーネントのオーナーを
TCustomActionListのオーナーと同じものにすれば良いかと。
162159:04/10/19 00:42:58
>>160
ありがとうございます。前者の方法でできました。
163156:04/10/19 10:42:11
サンクス>>161
正常に動作するときにTCustomActionListのオーナーみてたら、
Freeされるフレームが混ざってました。

でも、ActionListのOwner差し替えしてなさそうなんだけどな...

とりあえず、アドレス違反を起こすコンポーネントが特定できたので、
サイアクの事態は回避しました。
164156:04/10/19 10:50:17
ついでに知識として知っておきたいのですが、
ActionListによって、
>function TCustomActionList.IsShortCut(var Message: TWMKey): Boolean;
がコールされるものとされないものと、どこで分かれるんでしょうか。
ソースをざっと見たところ、ショートカットは設定されてないし...
いくらDelphiでも、アドレス違反エラーが出る場合の対処は(´・ω・`)ショボーン
165デフォルトの名無しさん:04/10/19 11:38:18
IsShortCut はメニューアイテムに関連付けられた Action に対して、
フォーム等で押されたキーが TAction で処理されるべきかどうかを判定するための
メソッド。
TForm (かその祖先クラス)のメッセージハンドラ近辺から読んでいくと呼び出している
コードが見つかるだろう。
166デフォルトの名無しさん:04/10/19 11:44:00
その「ビジュアルコンポーネント」が TActionlist を持っているのでは?
あと、Free じゃなくて FreeAndNil を使ってみたら?

167デフォルトの名無しさん:04/10/19 11:44:29
サンクス>>165
なるほど、ショートカットを割り当ててるからコールされるんでなくてショートカットの割り当てを判定してるんですね。

じゃぁ、毎回コールされるのかな思って、幾つかあるフレームクラス(これらのCreate/Freeが繰り返される)を見直してみたら、アクションリストがあるのはアドレス違反起こすフレームにだけありました。
つまり、フレームクラスにアクションリスト貼り付けない方が良いのかな。
168デフォルトの名無しさん:04/10/19 11:48:58
TFrame にメニューを貼るのは珍しいことではなく、よってアクションリストが貼りつくのも
問題ないと思うけど、頻繁に Create/Free? そいうコードはあまり経験ないなぁ。
多分、Free の方に何か問題があるのだと思うけど、ここから先はコードがないと何ともいえない。
169デフォルトの名無しさん:04/10/19 14:34:52
メッセージでポストして遅延してFreeすれば大抵のFreeでのバグは回避される。
アクションとか使って、そのアクションのターゲット自体が破棄される時、
ターゲット自体にまだ実行されるコードが残っているとAVが発生する。
これは仕様だ。唯一の回避方法は正しい使い方をすること。
Releaseなんてのがあるのはそういった問題の回避のためなんだよね。
170デフォルトの名無しさん:04/10/19 16:10:10
>>169
なるほど、参考になりました。

AVが発生するというより、
アクションリストが破棄されてるのにアクションリストのキーチェック処理がレジストされたまま、
みたいな感じなんで、もしかしたら今回の件は若干違うかもしれませんが。
テスト結果は今日明日にこのスレに報告致します。
171デフォルトの名無しさん:04/10/19 19:07:09
TThreadを継承したオブジェクトで,Executeは完走しているのにWaitForから制御が戻りません。
故にデストラクタから制御が戻らず困ってるのですが,原因として何が考えられるでしょうか。
172デフォルトの名無しさん:04/10/19 19:40:33
ちゃんとoverrideしているか?
173171:04/10/19 19:45:47
procedure Execute; override;
としています。純粋仮想なのでinheritedは書いていませんが。
デストラクタが呼ばれた時Terminatedを見てExecuteのループから抜けてるのは確認しています。
174171:04/10/19 19:52:40
あ,書き込んだあとで気付いたけどデストラクタの方のことですよね。
オーバーライドして,基底のデストラクタも呼んでます。
TThread.Destroyの
Terminate;
if FCreateSuspended then
Resume;
WaitFor;
この部分で止まってしまう訳なのです。
175デフォルトの名無しさん:04/10/19 20:17:30
もう一度自分のコードを見直せ。
まさかデッドロックを引き起こす様なコードは書いてないだろうな?
WaitFor中にはSynchronizeの処理が行われたりするのだが、その時待機状態になるコードがある場合そこで止まる可能性がある。
いづれにしても、自分でトレースすればわかることだ。
176デフォルトの名無しさん:04/10/20 00:04:47
フラグで止まってるヨカーン。
オレの経験上w
177171:04/10/20 02:02:37
原因
 finalizationの中でスレッドを終了しようとした時,EndThreadが呼ばれてもスレッドが走行中のまま終了しなかった。
 故にシグナル状態にならず,MsgWaitForMultipleObjectsのあたりのループをぐるぐるしてた。
対策
 TThread派生オブジェクトのフィールドにExecute実行中かどうかを表すフラグを追加。
 (イベントオブジェクトだとResetしてもWaitForSingleObjectが返ってこなかったから)
 finalizationではTerminateを呼んだ後そのフラグを監視。
 実行中フラグが外れたらTerminateThread呼んだ後Free。

finalization中ではカーネルオブジェクトの扱いはやめた方がいいのかな。
お騒がせしました。
178デフォルトの名無しさん:04/10/20 05:58:07
type
TTestThread = class(TThread)
protected
procedure Execute; override;
end;

procedure TTestThread.Execute;
begin
Sleep(3000);
end;

var
Thread: TTestThread;

initialization
Thread := TTestThread.Create(False);
finalization
Thread.Free;

現象を再現できない。バグの原因は違うところだと思う。もう一度自分のコードを見直せ。
179デフォルトの名無しさん:04/10/20 10:39:24
すみません。質問させて下さい。
MessageDlgでボタン[mbYes,mbNo]を使用しているのですが、
ダイアログが表示された際にフォーカスが必ずmbYesに当たっているので
これをデフォルトでmbNoにフォーカスを当てたいのですが、方法が分かりません.
どなたかご教授ください。
180デフォルトの名無しさん:04/10/20 12:11:16
CreateMessageDialog でダイアログを作成し、
FindChildControl で 'No' {No ボタンの Name}
を取得して、SetFocusedControl で上のコント
ロールを TWinControl にキャストしてフォーカ
スし、 ShowModal で返り値を得る。

泥臭い方法の一つ。
181デフォルトの名無しさん:04/10/20 12:13:47
VCL ソースコードを持っているのなら、MessageDlg 丸ごとコピーして好きに改造。
これが一番早い
182デフォルトの名無しさん:04/10/20 13:03:39
>>179
TApplication.MessageBox使え。
flagにMB_DEFBUTTON2。
API直でもいいけど。
183180:04/10/20 13:15:54
やっぱスマートな方法はあるもんだなぁ。
いつも感心するぜ。
184171:04/10/20 14:17:19
>>178
失礼。説明が足りないばかりに話を長引かせてしまって。
解放するのはDLLファイルなのです。
ホストアプリとしてボタンを2個持つアプリケーションを作成,一方を
 module := LoadLibrary('Project2.dll')
他方を
 FreeLibrary(module);
を行うよう設定
DLL側はTThreadから派生するクラスTMyThreadでExecuteだけをオーバーライド
グローバルにMyThread: TMyThreadを確保してプロジェクトのbegin〜end;で生成
他は下に示すようなものを作って検証
procedure TMyThread.Execute;
begin
 while not Terminated do
  Sleep(100);
end;

initialization
finalization
 if Mythread <> nil then
  Mythread.Free;
結果同様の現象が起こりました
185デフォルトの名無しさん:04/10/20 23:13:05
>>184
確認できました。そんでもって調べました。Windowsの仕様です。結論としてはそのような使い方をしてはいけない。

参考
ttp://www.numeric.co.jp/Win32.htm#Q0004

DLL_PROCESS_DETACHが呼ばれた状態でスレッドが存在しないようにしましょう。
まあ開始終了の関数をエクスポートしておけば無事解決。
186デフォルトの名無しさん:04/10/21 08:28:32
フォーム内でパネル1、パネル2 と分割し、パネル2 に Edit1 を配置しています。
実行すると、パネル2 からはみ出した、パネル1 内での位置っぽい感じで Edit1 が表示されます。
オブジェクトツリーでは Edit1 は間違いなくパネル2 の下にあります。

新たにパネル2 上に別の Edit2 を追加すると、そのように表示されるので、Edit1 が
何からおかしいようなのですが、その理由がわかりません。

何か思い当たることはあるでしょうか?
コードで位置を変更したりはしていません。
187デフォルトの名無しさん:04/10/21 09:15:42
ソースコード持っていないのですが、TPanelコンポーネントのCaption
プロパティのWriteに使われているメソッドの書式を教えてください。
188デフォルトの名無しさん:04/10/21 11:06:23
>>187 ご所望の Delphi のバージョンは?
189デフォルトの名無しさん:04/10/21 11:10:54
>>187 ご所望の Delphi のバージョンは?
Delphi6 でも Doc ディレクトリに公開されているインターフェースのソースが公開されていますが
そちらは確認済みですよね?
190デフォルトの名無しさん:04/10/21 11:32:45
MEMOコンポーネントに、URLリンクを貼ることは可能なのでしょうか?
もしくは、代替で実現できるコンポーネントはあるのでしょうか?
初心者すぎてすみません・・・
Delphi6使用です。
191デフォルトの名無しさん:04/10/21 11:36:40
ListView(vsReport) で行ごとや項目ごとに文字色を変えるにはどうしたらいいのでしょうか?

VBのListItemsにはそんな感じのプロパティがあった気がするんですが
Delphiでみあたりません、教えてください
192デフォルトの名無しさん:04/10/21 11:47:28
>>190
TEdit

>>191
OwnerDraw
193デフォルトの名無しさん:04/10/21 12:00:33
>>187
こういうこと?
procedure TCustomPanel.SetText(const Value: TCaption);

>>188-189
答える気がないならレスしなくていいよ。ここはそういうスレだから。
194デフォルトの名無しさん:04/10/21 12:03:43
>>193はCLXだった。
procedure TControl.SetText(const Value: TCaption);
195デフォルトの名無しさん:04/10/21 12:08:39
>>186
TPanel でフォームの領域分割をする場合はTPanet.Align を
片方のパネルを alBottom、alLeft、alRight、alTop のいづれか
もう片方を alClient とする。
196デフォルトの名無しさん:04/10/21 12:19:07
>>192
レスありがとうございます。
どこで使えるのか探してみていますが、TEdit内で
「○○はここです \\サーバ名\フォルダ...」のように、
通常文字とリンクを混合させた場合でも、リンクははれるのでしょうか?

要は、コメント欄を作って、その中でファイルへのリンクを貼りたいのです。
クリックすると、ファイルが開くような・・・
197デフォルトの名無しさん:04/10/21 12:29:23
Delphi5Proにて…

ClientSocketのHostプロパティに無効なURLを入力すると
OnErrorイベントが発生しないで
「'ASync Lookup' APIでWindows ソケットエラー:そのようなホストは不明です。(11001)」
というメッセージが表示されちゃうのはなんとかできないのでしょうか?
198デフォルトの名無しさん:04/10/21 17:06:44
そんなバナナ
199デフォルトの名無しさん:04/10/21 17:30:31
>>192
あ〜、DelphiはItemにそういう項目はなくてListViewのCanvasをそこでいじるんですね
解決しましたー、ありがとう
200デフォルトの名無しさん:04/10/21 18:18:52
OnAdvancedCustomDrawItem あたりで変えれますよ。ヘルプくらい読めよ。
201デフォルトの名無しさん:04/10/21 18:25:02
TEditでリンクを貼る方法が見つからない・・・
ヘルプとか参照してみたんですが分からないです・・・orz
202デフォルトの名無しさん:04/10/21 20:02:57
>201
TRichEdit
203デフォルトの名無しさん:04/10/21 23:19:02
TThread.OnTreminate のヘルプに
> OnTerminate イベントハンドラは,メイン VCL スレッドのコンテキスト内で呼び出され,
> VCL メソッドおよびプロパティを自由に呼び出せるようにします。
とありますが、これは Synchronize を使用したときのようにスレッドセーフでないオブジェクトも気にせず扱えるということですか?
204デフォルトの名無しさん:04/10/22 01:23:07
TThread.DoTerminate; のコード見ろよw
205デフォルトの名無しさん:04/10/22 08:26:22
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
206デフォルトの名無しさん:04/10/22 14:34:07
TFrameをダイアログにして表示する方法を教えて下さい。
207デフォルトの名無しさん:04/10/22 14:46:45
Frame.Show;

じゃ表示されないんだYO!
208デフォルトの名無しさん:04/10/22 15:05:02
ダイアログフォームにはっつけて表示
209デフォルトの名無しさん:04/10/22 15:29:56
FrameのScreenに対するRectのとり方教えて下さいでつ。
210デフォルトの名無しさん:04/10/22 18:33:28
まったくここの奴らは使えないな。
211デフォルトの名無しさん:04/10/22 19:35:34
やり手のDelユーザはもうめっきり少なくなったからね
回答の質のレベルダウンは目を覆うばかりだな。あちこちのBBSも同じ状況
212デフォルトの名無しさん:04/10/22 19:36:44
Formが表示されたり消えたりするとき、

Form.ManualFloat(Rect)

したくて、かつ、Formの位置を変えずに表示させたいんですが、
Rectには何を入れたら良いですか?
213デフォルトの名無しさん:04/10/23 13:34:03
TStringsをStringで表示するにはどうすればいいのですか?
214デフォルトの名無しさん:04/10/23 13:40:45
>>213
Textプロパティ
215デフォルトの名無しさん:04/10/23 13:43:59
Delphiのプログラム中から指定のURLで新規にブラウザ(IE)を起動させたいのですが

WinExec('IEXPLORE.EXE' ,SW_SHOW);
ShellExecute(0, 'OPEN', Pchar('http://www.yahoo.co.jp/'),nil, nil, SW_SHOWNORMAL);

このようにやっていて一応目的は果たせているのですが、
環境によってはブラウザ起動後ホームに設定してあるページが1,2秒表示され、やっとyahooへ飛ぶといった挙動になってしまいます

HTMLのリンクをクリックした時のように最初からURLをセットした状態で新規に起動したいのですが、何か解決方法はありますでしょうか?
216デフォルトの名無しさん:04/10/23 13:52:12
>>215
ん?1行目要るか?
217デフォルトの名無しさん:04/10/23 13:55:38
>>216
一行目を入れないとすでに開いているブラウザにURLをセットしてしまいます
新規に起動させたブラウザにyahooをセットしたいのです
218デフォルトの名無しさん:04/10/23 14:00:19
>>213
CommaTextつうのもある
>>197
TClientSocket 11001 でぐぐってみたら一発目にこんなのが出てきましたよ.
http://www.talkaboutprogramming.com/group/comp.lang.pascal.delphi.misc/messages/242762.html
220デフォルトの名無しさん:04/10/23 14:28:39
>>215
これでは駄目ですか?
ShellExecute(0, 'OPEN','IEXPLORE.EXE' ,'http://www.yahoo.co.jp/', nil, SW_SHOWNORMAL);
221215:04/10/23 14:37:49
>>220
できました!
ありがとうございます
222デフォルトの名無しさん:04/10/23 14:39:45
ShellExecute(0,nil,nil,...で十分。明示はダサい。
223デフォルトの名無しさん:04/10/23 15:17:32
そのurlにこだわるのは孫さんとこの雇われグラマ?あんまり世間に迷惑かけないでね。
224初心者:04/10/23 16:00:48
Delphiを使い始めて間もない者です。

テキストファイルに保存してある文字列を、
ComboBoxやMemoに読み込んで表示させたいのです。

テキストファイルの中身を、
a1,a2,a3,a4,a5,a6
b1,b2,b3,b4,b5,b6
c1,c2,c3,c4,c5,c6
と仮定して、
a1,b1,c1をComboBoxに
a2,b2,c2をMemo1に
a3,b3,c3をMemo2に
・・・
a6,b6,c6をMemo5に
というふうに、コンマごとに区切って表示させたいんです。
さらに、ComboBoxで選ばれた文字に対応するデータをMemoに表示させたいんです。
例えば、
ComboBoxで、a1を選んだとすると、
Memo1はa2、Memo2はa3、Memo3はa4、Memo4はa5、Memo5はa6が、
とこんな感じで。

LoadFromFileメソッドを使うってのは分かるんですが、
イマイチ良く分からないんです・・・。
よろしくお願いします。
225デフォルトの名無しさん:04/10/23 16:37:30
個人的には設計をやり直した方がいいと思うぞ。
そんな処理、かなり強引なコード書くしかないと思う
226デフォルトの名無しさん:04/10/23 16:53:47
代案すら出さない代案厨乙
227デフォルトの名無しさん:04/10/23 16:56:01
目的もわからないのに代案が出せるか
228デフォルトの名無しさん:04/10/23 17:21:20
目的がわからないのに代案を提案したくせにw
229215:04/10/23 17:27:05
マターリおしえてやれ
230デフォルトの名無しさん:04/10/23 17:27:48
にるぽ
231デフォルトの名無しさん:04/10/23 18:17:31
>>224
丸投げイクナイ
もう少しポイントを絞って質問しなよ
232デフォルトの名無しさん:04/10/23 18:36:27
>>224
正直お勧めはしない
procedure TForm1.FormCreate(Sender: TObject);
const
  TextFile = 'test.txt';
var
  str : TStringList;
  i,j,k : integer;
  tmpstr,substr : string;
  Control : array [0..5] of TWinControl;
begin
  Control[0] := ComboBox1;
  for i := 0 to 4 do
    Control[i+1] := TWincontrol(FindComponent('Memo'+inttostr(i+1)));
  str := TStringList.Create;
  try
    str.LoadFromFile(TextFile);
    for i := 0 to str.Count-1 do
    begin
      tmpstr := str[i];
      for j := 0 to 5 do
      begin
        k := pos(',',tmpstr);
        if k = 0 then
          k := Length(tmpstr)+1;
        substr := Copy(tmpstr,1,k-1);
        if Control[j] is TMemo then
          TMemo(Control[j]).Lines.Add(substr)
        else if Control[j] is TComboBox then
          TComboBox(Control[j]).Items.Add(substr);
        Delete(tmpstr,1,k);
      end;
233232:04/10/23 18:37:54
    end;
  finally
    str.Free;
  end;
234デフォルトの名無しさん:04/10/23 18:49:56
TStringListのCommaText使えばもっと簡単に出来ねえか?
235デフォルトの名無しさん:04/10/23 19:03:24
CommaTextでやってみました。

procedure TForm1.FormCreate(Sender: TObject);
const
  TextFile = 'test.txt';
var
  str,str2 : TStringList;
  i,j : integer;
  Control : array [0..5] of TWinControl;
begin
  Control[0] := ComboBox1;
  for i := 0 to 4 do
    Control[i+1] := TWincontrol(FindComponent('Memo'+inttostr(i+1)));
  str := TStringList.Create;
  try
    str.LoadFromFile(TextFile);
    str2 := TStringList.Create;
    try
      for i := 0 to str.Count-1 do
      begin
        str2.Clear;
        str2.CommaText := str[i];
        for j := Low(Control) to High(Control) do
        begin
          if Control[j] is TMemo then
            TMemo(Control[j]).Lines.Add(str2[j])
          else if Control[j] is TComboBox then
            TComboBox(Control[j]).Items.Add(str2[j]);
        end;
236デフォルトの名無しさん:04/10/23 19:03:45
      end;
    finally
      str2.Free;
    end;
  finally
    str.Free;
  end;
end;
237デフォルトの名無しさん:04/10/23 19:25:03
コンボボックスのリストをセレクタとしてMemoの内容を切り替えるのだから、クラスやレコードの配列に保持しておくのだと思う。
238デフォルトの名無しさん:04/10/23 21:26:23
そうそう、一回限りセットしても駄目
239デフォルトの名無しさん:04/10/23 23:19:57
TStringGrid を使うのはどぉ?
240デフォルトの名無しさん:04/10/23 23:28:43
TStringGridのRowsのCommaTextに入れて
ColsのCommaTextで読み出すのが一番簡単かな
241初心者:04/10/24 01:33:14
返事が遅れて、すいません。
出掛けていたもので・・・。
質問の丸投げなんてとんでもないです。
ほんとスイマセン。
確かに強引なのは分かっているんですけど、
237でおっしゃっておられるように、
ComboBoxのリストをセレクタとしてMemoに表示させる内容を変更させるのが目的なんです。
教えていただいた方法で試してみます。
で、238でおっしゃっておられるように、
ComboBoxのリストのセレクタを変更させる毎に、
Memoに表示させる内容を変更させたいんですよね。
240でおっしゃっておられる方法ですれば、上手くいくのでしょうかね?
試してみたいと思います。
また行き詰まったら、質問してもいいでしょうかね?
よろしくお願いします。
242デフォルトの名無しさん:04/10/24 03:39:30
string型の二次元配列つくって、ファイルから読み込んで、代入する。
あとはどうとでもできる。既出の TStringList の CommaText の使い方を
覚えるのがポイント。
243240:04/10/24 11:35:59
Form上にComboBox,Button,Memoを5個,StringGridをポトペタ。
Cドライブに>>224の内容をtest.txtいうテキストファイルを用意。
Buttonをダブルクリックしてイベントハンドラに以下を記述。
procedure TForm1.Button1Click(Sender: TObject);
var
 SL,SL2: TStringList;
 i: Integer;
begin
 SL := TStringList.Create;
 SL2 := TStringList.Create;
 try
  SL.LoadFromFile('c:\test.txt');
  StringGrid1.RowCount := SL.Count;
  SL2.CommaText := SL.Strings[0];
  StringGrid1.ColCount := SL2.Count;
  for i := 0 to SL.Count - 1 do
   StringGrid1.Rows[i].CommaText := SL.Strings[i];
  ComboBox1.Items.CommaText := StringGrid1.Cols[0].CommaText;
  Memo1.Lines.Add(StringGrid1.Cols[1].CommaText);
  Memo2.Lines.Add(StringGrid1.Cols[2].CommaText);
  Memo3.Lines.Add(StringGrid1.Cols[3].CommaText);
  Memo4.Lines.Add(StringGrid1.Cols[4].CommaText);
  Memo5.Lines.Add(StringGrid1.Cols[5].CommaText);
 finally
  FreeAndNil(SL2);
  FreeAndNil(SL);
 end;
end;
244240:04/10/24 11:36:43
続いてComboBox1をダブルクリックして以下を記述。
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 Memo1.Lines.Add(StringGrid1.Cells[1,ComboBox1.ItemIndex]);
 Memo2.Lines.Add(StringGrid1.Cells[2,ComboBox1.ItemIndex]);
 Memo3.Lines.Add(StringGrid1.Cells[3,ComboBox1.ItemIndex]);
 Memo4.Lines.Add(StringGrid1.Cells[4,ComboBox1.ItemIndex]);
 Memo5.Lines.Add(StringGrid1.Cells[5,ComboBox1.ItemIndex]);
end;
あとは実行してみれ。
245240:04/10/24 11:37:51
エラー処理やもっとスマートな記述方法については自分で考えれ>>241
246デフォルトの名無しさん:04/10/24 15:12:38
procedure Hoge(var X);
こういう手続きを宣言したとき引数の型を調べるにはどうすればいいのでしょうか?
247デフォルトの名無しさん:04/10/24 15:12:41
二次元配列にGUIコンポを使うのは最低
248デフォルトの名無しさん:04/10/24 15:17:37
>>246
無理
249デフォルトの名無しさん:04/10/24 15:36:03
New Disposeは特殊で同等のものはユーザーは作れないと言ってみる
250デフォルトの名無しさん:04/10/24 16:08:13
Move() とか TStream.Write とかなら、アドレスからポインタに変換してつくれそうだな。
New Dispose は難しそう。
251246:04/10/24 16:25:45
>>248-250
ありがとうございました。
型によって一部の処理を変えたかったのですが素直にoverloadすることにします。
252初心者:04/10/24 18:00:31
教えていただいた皆さん、ありがとうございました。
253デフォルトの名無しさん:04/10/24 18:27:47
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
254デフォルトの名無しさん:04/10/24 18:45:11
ファームを常に前に表示したいのですがどうすればよいのでしょうか?
255デフォルトの名無しさん:04/10/24 19:35:02
FormStyleを一番下に
256254:04/10/24 19:37:23
>>255
・・・すいません。見逃してました。。
ありがとうございます。
257デフォルトの名無しさん:04/10/24 21:30:06
どうでもいいが、ファーム違う。フォーム。
258デフォルトの名無しさん:04/10/24 23:56:23
>>254
SetWindowPosを使った方法もあります。
こっちの方が強力です。

SetWindowPos、HWND_TOPMOST
あたりを検索してみてください。
259デフォルトの名無しさん:04/10/25 00:06:43
FormStyleのだと一瞬フォームが消えるけど
>>258だと消えないという違いもあるな。
260デフォルトの名無しさん:04/10/25 00:16:27
>>251
recordなどの代わりにclassで実装するのも手だよ。
261デフォルトの名無しさん:04/10/25 01:53:50
やたら前面に居座るフォームがあると、うざいんだよな。
初心者ほど使いたがるが。
262デフォルトの名無しさん:04/10/25 02:00:53
>>261
感想は書かなくていいよ。スレ違い。
263デフォルトの名無しさん:04/10/25 04:29:28
はたして、そうかな?
264デフォルトの名無しさん:04/10/25 10:33:12
>>261

禿同。ユーザの立場からはそういえるね。
265デフォルトの名無しさん:04/10/25 13:36:39
TMemoなんかにWindows標準のポップアップメニューが付いてますよね。

そのポップアップメニューを差し替えるのではなくて、追加メニューしたい場合はどうしますか?
266デフォルトの名無しさん:04/10/25 14:59:38
TSpeedButtonのGraphにTImageListのImageをセットする方法を教えて下さいでつ。
267デフォルトの名無しさん:04/10/25 15:23:40
>>265
無理でした
268デフォルトの名無しさん:04/10/25 16:07:27
Visual Basicにてあるレーベルの上にカーソルを合わせた時にボタンコントロールを表示させたい
のですが、どのイベントプロシージャを使えば良いですか?
269デフォルトの名無しさん:04/10/25 16:13:44
OnMouseMove
270268:04/10/25 16:20:40
>>269
早い返事ありがとうございます。ついでにカーソルをはずした時のイベントプロシージャも
教えていただければ幸いです。
271デフォルトの名無しさん:04/10/25 16:50:01
>>266

ImageList1.GetBitmap(0,SpeedButton1.Glyph);
272デフォルトの名無しさん:04/10/25 16:57:10
フリーのDelphi 6.0を使ってプログラムの勉強中です。
練習でデスクトップのキャプチャーを作ってみたのですが、思うように動作しません。

  bmp:=Tbitmap.Create;
  bmp.width:=screen.Width;
  bmp.height:=screen.Height;
  dc:=getdc(0);
  hide;
  sleep(500);   {←※}
  bitblt(bmp.canvas.handle,0,0,bmp.width,bmp.height,dc,0,0,srccopy);
  show;

フォームにボタンを貼り付け、
ボタンを押したら自分自身を隠してからキャプチャーしようと思ったのですが、
※の行がないと、ウィンドウが消える前の状態がキャプチャーされてしまいます。
これだとマシンの処理速度によっては待ち時間が無駄になってしまうので、
もっとスマートに、hideの処理が終わったら次に進むようにするには
どう書けばよいのでしょう?
273デフォルトの名無しさん:04/10/25 17:28:40
よくスクリーンセーバーで画面の左上隅にマウスを持って行ったり緊急起動キーを
押したら自動的にスクリーンセーバーが立ち上がるソフトがありますよね。

あれって、タスクトレイにアイコンも無くてタスクバーにもアプリのタブが無いソフトが
時々ありますけど、ああいうのってどうやって作るのでしょうか?
参考になるサイトなどありましたら教えてください。
274デフォルトの名無しさん:04/10/25 17:29:43
半角カナを全角カナへ変換する関数はありますか?
275デフォルトの名無しさん:04/10/25 17:44:52
>>273
普通にプロジェクトを作ればタスクトレイには何も出ない。
Hide;と書けば自分自身のウィンドウも消える。
タスクバーからも消すにはちょっと手間がかかる。
http://pc3.2ch.net/tech/kako/1022/10229/1022921598.html
ここの22以降を見るべし。
276デフォルトの名無しさん:04/10/25 17:49:15
>>274
Windows APIを呼ぶとコンパクトにできる。
ttp://www.wwlnk.com/boheme/delphi/tips/tec1310.htm
277デフォルトの名無しさん:04/10/25 17:50:16
>>272

オレのところでは Sleep なくてもいいけどね。
かわりに

while IsWindowVisible(Handle) do;

とかしておけばいいんでは? API使うのはOSにききたいからだけど。
278272:04/10/25 18:01:19
>>277
ありがとうございます。さっそく試してみたのですが、
残念ながらその方法ではダメでした。

どうやら、Hideメソッドが呼ばれると、まずVisibleプロパティをクリアしてから
デスクトップを再描画しているみたいです。

Slot 1のセレロン300という化石のようなマシンなので、ものすごく遅いんです。
ウィンドウも上下左右の枠を順番に描画しているのがわかるぐらいなのです。
279デフォルトの名無しさん:04/10/25 18:07:37
Application.ProcessMessages
または
PostMessageして遅延させろ
280デフォルトの名無しさん:04/10/25 19:05:40
>>278
Sleep なしでもうまくいく環境もあることからアプリ内のメッセージ処理の問題ではない。
デスクトップの再描画の速度の問題だから、アプリ内で本質的な遅延時間を決めることはで
きない、と思われ。タイマやSleepなどで逃げるしかない。
281デフォルトの名無しさん:04/10/25 19:14:46
コンポーネントのParentを設定すると、Ownerも差し替えられるんでつか?

なんか迷惑だな。
282272:04/10/25 19:20:57
>>279-280
いただいたヒントでぐぐって調べてみたのですが、PostMessage等は
いったん別のプロセスに制御を渡して(?)、待ち時間を有効に使う手段のようですね。

つまり、GDIで再描画の完了を検出する方法はないということなのでしょうか?
283281:04/10/25 19:39:43
あれ、勘違いでだったかも。

FormのParentがFreeされても、Formの実態はFreeされませんね。
Formの場合だけ???
284デフォルトの名無しさん:04/10/25 19:59:42
今さらというか今日気付いたことなんですけど
TEditってAlignmentプロパティ無いんですね。
意外でした・・。
285デフォルトの名無しさん:04/10/25 20:34:20
VBのコレクションのようなことはできますか?
(たとえば複数のTEDITを配列のように扱うなど)
286デフォルトの名無しさん:04/10/25 20:37:15
今、Windowsから送られてくるMessageをきっかけに動くプログラムを改良中なんですけど
あるメッセージが送られてきたときに特定のキーが押されているかどうかを調べるにはどうすればいいのでしょうか?

ぶっちゃけて言うと、WM_LBUTTONDOWNを受け取ったときにShiftキーが押されているどうかを調べたいんですけど
287286:04/10/25 20:48:24
すんません
GetKeyStateを使ったらアホみたいに簡単にできました。
お騒がせしてすんません。
288デフォルトの名無しさん:04/10/25 21:53:23
> コンポーネントのParentを設定すると、Ownerも差し替えられるんでつか?

何言ってるの?
例えば、Form1 の Panel1 に Button1 をのせたら Button1 の Owner は Form1、
Parent は Panel1。
289デフォルトの名無しさん:04/10/25 21:56:30
> FormのParentがFreeされても、Formの実態はFreeされませんね。

TForm にはふつう parent はない。無理に設定すると、親が Free するとき
ウィンドウは破棄されて、言語上のオブジェクトが生き残る、という珍妙な状況になる。
290デフォルトの名無しさん:04/10/25 23:44:10
その状況で、はたしてオブジェクトは生きているのかな?
291デフォルトの名無しさん:04/10/26 01:14:49
画面の再描画が必要になると、デスクトップや他のウィンドウにWM_PAINTとWM_NCPAINTが
PostMessageで送られると思われるので、BitBlt実行時にはまだ WM_PAINTの処理が
終っていないのかも知れませんね。

RedrawWindow で強制的に再描画させる事は出来ないかな?
292デフォルトの名無しさん:04/10/26 01:16:59
>>289は TWinControl.Parentと親ハンドルを混同している。
293デフォルトの名無しさん:04/10/26 04:55:59
>>241
一個分のデータ構造を自前で定義しておいて TComboBox の Items.Objects に
つっこんでおいたらどうですか?
データの部分は TStringList を使うとか、array[] of PChar へのポインタとか
お好みのものでどうぞ。
いずれの場合も、Items はデータ自身を所有しないので、自分で確保したものは
適切な方法で解放する必要があります。

>>289
Form には Owner があり、自動生成なら Application グローバル変数。
Application グローバル変数が廃棄されるときに Form も廃棄されます。
オブジェクトが存在しないとウィンドウは存在できないけど、オブジェクトが
存在するからといってウィンドウが存在するとは限りません。
294デフォルトの名無しさん:04/10/26 05:45:07
>>293

289 です。そう、そのとおり。それを言っている。TForm の Owner はデフォルトで
Application であり、Parent はない。 SetParent(Handle) で無理矢理設定すると
Windows の仕組みによって、Parent が破棄されるとき Form のウィンドウは破棄され
るけど、インスタンスの破棄の権利はVCLの仕組みによって Owner が持っている。
295デフォルトの名無しさん:04/10/26 05:49:16
>>291
> RedrawWindow で強制的に再描画させる事は出来ないかな?

いや、だから再描画をトリガすることはできるけど、一般にそれが終わったことを
検出するのが難しい、ということ。とくに他アプリでは。前面のウィンドウを最小化
したり、Hide したりするだけで自動的に再描画されるし。
296デフォルトの名無しさん:04/10/26 05:53:24
>>292
>TWinControl.Parentと親ハンドルを混同している。

そうなの? Parent のウィンドウハンドルと、その「親ハンドル」とはどこが違うの?
297デフォルトの名無しさん:04/10/26 09:42:33
配列型について質問させてください。
格納されるデータ数が同じだとしたら、次元を増やしても問題ないでしょうか?
配列内で同一の性質を持つデータ間で演算を行いたいのですが、
例えばデータを二次元配列で定義していると、条件判断文を相当な回数行わなければならなくて、
その条件事態を配列の数値で判断してしまえば(つまり性質を配列の数字で定義します)
if文やらを使う必要は無くなるのですが、その場合五次元以上の配列になってしまいます。
単純に演算回数だけを見れば後者のほうが少ないのですが、
あまり配列を複雑にするのはマズイような気がしました。
分かりにいうえ、つまらなくて申し訳ないですが、どなたかアドバイス頂けると助かります。
298297:04/10/26 10:12:26
すいません、少し説明が抜けました。配列はレコードで定義してます。
ですので、次元を下げた場合、レコードの中で性質を定義する変数が増えます。
条件判断文はそのプロパティを使用して行うということです。
299デフォルトの名無しさん:04/10/26 10:26:22
if 文の数が多くなっても、配列の構造が単純なほうを選ぶと、バグの少ない、
メンテが楽な、そして、ロジックが見えやすいコードになると思います。
300297:04/10/26 10:47:48
>>299
ありがとうございます。
やはり配列が複雑だとバグの危険性が伴うのですね。
三次元配列くらいなら、極端に条件判断が増えることもないので、ひとまずはそれで組んでみます。
301194:04/10/26 11:07:06
>>219
 いろいろありがとうございました。
 なにぶん…いろいろあってレス返せない環境にいたもので反応遅れてすみませんでした
 今後はきをつけます
302デフォルトの名無しさん:04/10/26 19:21:56
配列を一気にクリアする方法ってないですか?
文字列は''、数値は0になるだけでいいんですが
303デフォルトの名無しさん:04/10/26 19:43:13
>>302
FillChar
304デフォルトの名無しさん:04/10/26 19:51:32
>>303
サンクス!早速試してみます
305デフォルトの名無しさん:04/10/26 20:18:02
すみません。
Delphiは複数インストールすることはできないのでしょうか、、
Delphi6において、Update Pack2を当てているとエラーがでるソースがあるので
当てているものと当てていないものと、二つ環境を作りたいのですが。。
306デフォルトの名無しさん:04/10/26 20:20:53
ソースを修正すべきだろ
307デフォルトの名無しさん:04/10/26 20:22:36
自分が作ったものではないのでまだあまり弄れないという状況なので。。
できればDelphiを複数用意したいのです。。(´Д`;
308デフォルトの名無しさん:04/10/26 20:23:56
vmware体験版
309デフォルトの名無しさん:04/10/26 20:32:52
>>305
それはUpdatePackを当てていないものならエラーはでない。という保証はあるの?

漏れの場合、OSをMeからXPにしたところ
ActiveXの取り込みを使ってるプロジェクトが、終了時に原因不明のエラーを吐く様になった。
わざわざOSのクリーンインストール(途中で致命的ミスがあったため結局こうするしかなくなった泣)から
UpdatePackの当てなおしやら、いろいろやりなおしたけど、結局解消しなかった。
今でも解消してないけどデバッグ・プログラミングには影響ないから我慢してそのまま使ってる。
310デフォルトの名無しさん:04/10/26 23:37:48
コンソールアプリケーションでRandom関数使うと、
吐き出される乱数が整数なんです・・・
実数の乱数を吐かせるにはRandG関数を使うのでしょうか?
GUIだと範囲指定しなくても使えるけど、
コンソールだと範囲指定しれ!ってコンパイラさんに怒られるんですぅ('A`)
311テレパス名無しさん:04/10/27 02:02:36
× Random()
○ Random
312デフォルトの名無しさん:04/10/27 03:25:00
レベルが低くて申し訳ないと思うのですが質問させてください。

あるtxtファイルの、最後の行の内容を変数に代入して使いたいのですが、
どうすればいいでしょうか。

(a.txt)
あいうえお
かきくけこ
さしすせそ

というものがあったとして、
さしすせそを変数に入れたいということです。

書き込むときには、
TStringList.CreateしてLoadFromFileで読み込み、Add→SaveToFileとしています。

応用で、
(b.txt)
あ,い,う,え,お
か,き,く,け,こ
さ,し,す,せ,そ

という、各行が,区切りになっているものがあったとして、
さ,し,す,せ,そをそれぞれ別の変数に入れたいのですが
これはどうでしょうか?
これも最後の行だけでいいのですが。
313デフォルトの名無しさん:04/10/27 05:09:07
>>296
知りたければVCLソースを読みなさい。
314デフォルトの名無しさん:04/10/27 05:21:16
>>312
宿題ですか? ではヒントだけ。
ヘルプでTStringListとTStringsのプロパティーを全部見れば解かる。
315デフォルトの名無しさん:04/10/27 08:39:14
>>312
>>243-244を見てね
316デフォルトの名無しさん:04/10/27 10:55:27
>>313
VCLソースに「親ハンドル」の定義が書いてあるのか?
317デフォルトの名無しさん:04/10/27 11:00:03
親ハンドルってなに? 親のハンドルなら Parent = TWinControl.Handle と同じじゃないの?
318デフォルトの名無しさん:04/10/27 11:08:19
D6personal のヘルプ

TControl.Parent

Parent プロパティは,コントロールの親の名前を示します。

property Parent: TWinControl;

これって、間違いだよな。「親の名前」が TWinControl なわけないし。
ヘルプ書いた人は、インスタンスと「インスタンス変数の名前」を混同してるな
319デフォルトの名無しさん:04/10/27 11:19:18
広場、落ちてるな。このまま閉鎖ってことはないだろな、たのむよ、管理人さん・・・・
320デフォルトの名無しさん:04/10/27 11:26:46
動的配列を扱っていて、
●●●○○○○

●△△●●○○
ということをやっています。
○は空、●は既存データ、△は挿入したデータです。
データの数は数百から数千ほどを想定しています。
●を移動するのに、二つ方法を考えています。
1、forで一つずつコピーする
2、データ挿入後SetLengthで切る
どちらが高速ですか?またはもっとマシな方法ありますか?
321デフォルトの名無しさん:04/10/27 11:28:10
List 関係のクラスを使うと自動的に insert できる
322デフォルトの名無しさん:04/10/27 11:40:00
>>320

挿入や途中の要素の削除などをする場合は、動的配列は面倒だし、有効データの数も管理してくれない。
どんなデータかわからないけど、TObject の派生クラスにして、TObjectList を使うのが
おすすめ。インスタンス管理も自動化されるし。欠点は、いちいちコンストラクタを実行しなければ
ならないことと、データの入出力部分をキャストしなければならないこと。専用のリストクラスを
つくれば、どちらも解消される。ファイルアクセスのメソッドも作れるし。
323デフォルトの名無しさん:04/10/27 13:26:46
>>321-322
現在、TList使ってますが、楽したいんじゃなくて速くしたいんです。
面倒でも高速な方法をとりたいということで考えてるところです。
要素が増えたり減ったりするたびにメモリを確保したり解放したりしない方法で
何とか速くできないかと思い、その一つのアイデアとして上のように想像してます。
324デフォルトの名無しさん:04/10/27 13:55:01
>>320
System.Moveをつかうとよろし。
範囲チェックしてくれないから自分でいろいろ管理する必要があるけど
325デフォルトの名無しさん:04/10/27 14:11:03
実行中、Formの右上の×で閉じた時
「はい」「いいえ」のダイアログをMessageDlgで出して
「いいえ」が選択された場合フォームは閉じないようにしたいのですがどうしたら良いですか?

それとイベントのOnCloseとOnCloseQueryはどちらに書いたほうがよいですか?
326デフォルトの名無しさん:04/10/27 15:16:17
>>323
>要素が増えたり減ったりするたびにメモリを確保したり解放したりしない方法

それなら、はじめから必要最大限の要素を作っておけば、並び替えは TList でも
TObjectList でもポインタだけだから高速なはず。動的配列のように、内容をすべて
コピーしなおすのはスピード重視なら愚の骨頂。
327デフォルトの名無しさん:04/10/27 15:31:16
自分でポインタのリストを管理したいなら、ポインタの動的配列にしたらいいんでは。
自分で Move してずらすこともできるし。実体は別に確保する必要があるが。

それでも TList の方が使い勝手がいいと思うけど
328デフォルトの名無しさん:04/10/27 15:32:28
USBに接続するバーコードリーダから読みとった値をプログラム内で
処理しようとしています。
このバーコードリーダはキーボードとして動作する為、読みとった値を
あたかもキーボードから入力したかのごとくPCに送り込んできます。
そのため、バーコード内にキーコード外のデータ(漢字など)が含まれて
いると、正しく値を読みとれません。

Keydownイベントで値を読みとろうとしてみたのですが、仮想キーコードに
変換済みの値しか読みとれず、上手くいきません。
キーコードが何であろうと関係なく送られてきたデータを読みとりたいの
ですが、何か良い方法はないでしょうか?
329デフォルトの名無しさん:04/10/27 15:38:55
>TCustomForm::FormStyle
>実行時に FormStyle の値をなるべく変更しないでください。

とありますが、実行時にfsStayOnTopしたい場合はどうしますか?
330デフォルトの名無しさん:04/10/27 15:46:52
「なるべく」なんだから、変更してもいいんでは
331デフォルトの名無しさん:04/10/27 15:51:41
>仮想キーコードに変換済みの値しか読みとれず、上手くいきません。

うまくいかない例(漢字など)をあげてください。どのようにうまくいきませんか。
332329:04/10/27 15:51:47
変更しましたが、StayOnTopになりませんですた。
333329:04/10/27 15:55:38
ごめんなさい、コーディングのバグですた。StayOnTopになりますた。
334デフォルトの名無しさん:04/10/27 16:22:00
StayOnTopウィンドウの下に、エラーダイアログやShowMessageダイアログが隠れますが、回避する方法はありまつか?
335334:04/10/27 16:24:03
別ウィンドウのオープンをフックできれば...
336デフォルトの名無しさん:04/10/27 16:32:54
>>334
回避って、それが普通では?
337334:04/10/27 16:35:33
>>336
エラーメッセージウィンドウが出たときだけはStayOnTopをオフにしたいでつぅ
338デフォルトの名無しさん:04/10/27 16:38:15
StayOnTopになっているウィンドウのハンドルを指定してMesssageBox APIでメッセージを表示。
339デフォルトの名無しさん:04/10/27 18:35:04
1つのPopupMenuを複数のコンポに割り当てて、
PopupMenuのクリックイベントでどのコンポで発生したのか判断で期末か?
340デフォルトの名無しさん:04/10/27 19:37:13
TMemoのタブ幅はどうやって設定しますか?
341デフォルトの名無しさん:04/10/27 19:37:40
>>325
OnCloseQueryをヘルプで検索して説明をよく読めば
あなたの疑問は解決するだろう
342デフォルトの名無しさん:04/10/27 19:38:04
>>325
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 CanClose := MessageDlg('閉じる?', mtConfirmation, [mbYes, mbNo], 0) = mrYes;
end;

>>339
PopupComponentってのがそれな希ガス
343デフォルトの名無しさん:04/10/27 19:49:13
>>340
EM_SETTABSTOPS
344デフォルトの名無しさん:04/10/27 21:50:35
>320
インデックスによる参照がいらないなら、
リンクリストを自作すると移動が不要なので理論上は最速。
>329,334
正しくはNormalizeTopMostsとRestoreTopMostsを使う。
エラーってのが例外の事ならApplication.OnExceptionに
ShowExceptionをNormalizeTopMostsとRestoreTopMostsで挟んだ
自作の例外ハンドラを指定する。
345デフォルトの名無しさん:04/10/27 22:06:58
> リンクリストを自作すると移動が不要なので理論上は最速。

それは、削除や挿入はそうですけど、たとえば1000番目の項目にアクセスするときは
リンクを辿って行かなければならないでしょ。
346デフォルトの名無しさん:04/10/27 22:10:48
じゃあ好きなようにしたら?
347デフォルトの名無しさん:04/10/27 22:13:37
TApplication.NormalizeTopMosts

NormalizeTopMosts メソッドは,一番上のフォームとして指定した
フォーム(FormStyle が fsStayOnTop のフォーム)の上に別のフ
ォームを重ねて表示できるようにします。

だから、とにかく fsStayOnTop をフォームに設定するところは同じなんでは?
348デフォルトの名無しさん:04/10/27 22:59:59
>たとえば1000番目の項目にアクセスするときは

いや、1000番目に挿入するときも削除するときもそう。追加するときは大変。

リンクリストはシークエンシャルアクセス以外は使い道なさそう。そもそもインデックス
でアクセス出来なければ、挿入や削除もあんまり意味ないし
349デフォルトの名無しさん:04/10/27 23:25:34
配列でって前提で話してるんだから代案不要
350デフォルトの名無しさん:04/10/28 00:05:00
そんなことはないだろ。

>またはもっとマシな方法ありますか?
351デフォルトの名無しさん:04/10/28 00:07:52
挿入するのに配列つかって全部実体コピーして後ろにずらすのはアホだけだろ

まっ、ポインタと同じサイズのintegerなんかの配列だったらそれでもいいけど。
352325:04/10/28 00:12:32
>>341-342
ありがとうございます
なかなかレスがつかなかったのでくだすれにすらふさわしくないくだらない質問だったのかと思って過去ログ漁ってたら同じような質問があって解決しました
353デフォルトの名無しさん:04/10/28 00:57:26
>>350
配列というランダムアクセスがO(1), 挿入・削除がO(n)なデータ構造選んでるんだから
そこを覆すような代案するなんてアホだろ。
オーダー変えずにオーバーヘッドの削減する方法を聞いてるんだろ。
354デフォルトの名無しさん:04/10/28 01:02:17
> オーダー変えずにオーバーヘッドの削減する方法を聞いてるんだろ。

で回答は?
355デフォルトの名無しさん:04/10/28 01:04:45
> オーダー変えずにオーバーヘッドの削減する方法を聞いてるんだろ。

TList も TObjectList も同じオーダー。実体コピーかポインタコピーかの違い。
356デフォルトの名無しさん:04/10/28 01:55:38
TObjectListってAssignを使って実体コピーしてたの?
知らなかった。
357デフォルトの名無しさん:04/10/28 02:04:20
>>289-294

Parent は GetParent(Form.Handle) で得られるウィンドウの事で、
Free は DestroyWindow の事だったのか!

それなら正しい。
358デフォルトの名無しさん:04/10/28 02:36:40
>>356
違う。TList も TObjectList も挿入・削除ではポインタコピー。
配列なら実体コピーだろ、て意味。
359デフォルトの名無しさん:04/10/28 03:23:04
ちょっとでも速くしたいのなら、思い付いたやり方を全部測定するべき。
360334:04/10/28 08:43:22
サンクスでつ>>347

ShowModalなウィンドウが開く前後をトラップというか監視できれば、
>Application->NormalizeTopMosts();
>Application->MessageBox("This should be on top.", "Look", MB_OK);
>Application->RestoreTopMosts();
で回避できますね。

FormクラスとApplicationクラス調べてみまつ。
361334:04/10/28 08:51:50
やっぱ、ShowModalに色々種類があるので、
>Application->ShowException(E);
の前後で、NormalizeTopMosts/RestoreTopMostsしてみまつ。
362334:04/10/28 09:56:49
テストプログラム作っててわかったんですが、
MainFormの場合はShowModalやエラーダイアログがTopMostウィンドウより上に来てくれますね。
その時点のMainFormみたいなのを設定できないんだろうか。

NormalizeTopMostsの中のソース見ましたが、ちょっと追い難いでつ。
363デフォルトの名無しさん:04/10/28 10:31:53
FormParent: TFormの中で、

>FormChild.Parent := FormParent;
>FormChild.Show;

とすると、フォームの中にフォームが入りますが、
FormChild上のMomoコンポーネントがマウス受け付けません。
タブキーでFocusがくるとキーボードは受け付ける、みたいな。
どうすれば普通に動作しますか?
364デフォルトの名無しさん:04/10/28 10:40:13
MDIにする
365デフォルトの名無しさん:04/10/28 11:16:25
やっぱMDI以外では無理で塚。
366334:04/10/28 11:33:03
他ダイアログのShowModalメソッドコールをイベントで受け取れないでしょうか?
367デフォルトの名無しさん:04/10/28 11:37:18
ShowModal を呼ぶ前にフラグ立てるなり、メソッドを呼ぶなり、好きにできるでしょ
368デフォルトの名無しさん:04/10/28 11:40:15
イベントにしたいなら、PostMessage() で適当にメッセージ投げるとか
369334:04/10/28 11:43:05
自分で呼ぶShowModalじゃなくて、エラーダイアログ等のイベントを取りたいで津。
370デフォルトの名無しさん:04/10/28 11:45:44
TApplication.OnException

OnException イベントは,アプリケーション内で処理されない例外が生成されたときに発生します。
371デフォルトの名無しさん:04/10/28 11:57:35
>>334

fsStayOnTop を使いたい気持ちはわかるけど、君みたいなプログラマがたくさんいて、
他のアプリでも同じようなことしてたら、君のフォームが最前面にくる保証はないよ。
372334:04/10/28 13:12:17
>>371
他アプリじゃなくて、自アプリ内でつ。
フォームが変わる度に、それらについてくる付箋紙みたいな画面、みたいな。
373372:04/10/28 13:49:37
MDIにすると、チャイルド画面が親画面と親画面のコントロールの間に挟まれてへんなんなっちゃうし。
374372:04/10/28 13:50:17

334の間違いでつ。
375デフォルトの名無しさん:04/10/28 13:51:12
DLLで他のプロセスをフックしたフックプロシージャをブレークポイントに設定しても止まってくれません。
他のプロセスのフックプロシージャを止めるのは無理なのでしょうか?
376:04/10/28 13:54:26
いいえ
377375:04/10/28 14:05:07
>>376
レスありがとうございます。
やりかたをおしえてもらえないでしょうか?
378デフォルトの名無しさん:04/10/28 15:14:13
>親画面のコントロール

MDIの親フォームにメニューとステータスバー以外のコントロールをおくのは間違い
379334:04/10/28 15:54:10
NormalizeTopMostsもNormalizeAllTopMosts効かないけどなんでだろ。

>ChildForm.Parent := ParentForm;
>ChildForm.ManualFloat(Rect);
>ChildForm.Show();

みたいなことしてまして、ManualFloatでParentがNilになってます。
parentがnilのFormだと駄目なんかな?
380デフォルトの名無しさん:04/10/28 16:02:14
ttp://koti.mbnet.fi/jutanu/pics/foorumit/ffdshow.jpg
みたいな挙動をするソフトを作るには、どうすればいいか、ヒントとかを教えてください。
(リンク先のは、DelphiでいえばTreeViewコンポーネントみたいなものだけど、実際に自分が聞きたいのは、ListBoxを使った時の
実装方法のヒントとかを教えてください。)
381デフォルトの名無しさん:04/10/28 16:20:55
ShowMessageしたとき、Disableなのに、Enabledを見るとTrueになりますでつ。

正しく判断する方法はありますか?
Win32APIのIsWindowEnabledでも駄目ですた。
382デフォルトの名無しさん:04/10/28 17:13:35
>>380
TCustomListBoxを継承して作ればいいんじゃないのかな。
実装方法はTCheckListBoxが参考になるとおもう。
383デフォルトの名無しさん:04/10/28 17:29:44
重なったウィンドウをMoveして重ならなくするライブラリとかコードは無いで塚?
384デフォルトの名無しさん:04/10/28 18:25:18
最大化してたり、スクリーンのサイズが実行環境によって違うし。
385デフォルトの名無しさん:04/10/28 19:41:59
ここで聞いていいのかな?
「Delphi オブジェクト指向プログラミング」技術評論者からでていた本ですが
他に同等のおすすめ本ありませんか? 去年復刊したときに買い逃した
386デフォルトの名無しさん:04/10/28 20:34:23
なさそう。Delphi本自体が少ないし。
387デフォルトの名無しさん:04/10/28 20:41:56
>>385
在庫僅少、今すぐに注文しろよ。Amazon はじめ、品切れ続出のようだ。
http://bookweb.kinokuniya.co.jp/htm/4774104272.html
388デフォルトの名無しさん:04/10/28 21:12:32
この本、去年復刊される前はヤフオクとかですごい高値(一万以上とか)で出品
されてたよな。「人の足下見やがって...」と出品者を呪ったもんだ。
復刊されたから俺でも入手できた訳だが、復刊.com と (このスレにも多数いるで
あろう)賛同者の皆様方には、ほんと感謝してる。ありがとう。
389デフォルトの名無しさん:04/10/28 23:50:28
>>381
VCLソースのShowModalを見なさい。
390224:04/10/29 00:57:35
前日はいろいろとありがとうございました。
で、実行してみたのですが、どうも上手くいきません。
テキストファイルに入っている文字列は、スペースを含むものがあるのですが、
スペースで言葉が区切られてしまいます。
例えば、
a b,のような文字列があるとすると、a bを一つの文字で扱いたいのに、
aとbが区切られてMemoに表示されてしまいます。
aがMemo1に、bがMemo2にと言う感じです。
ComboBoxにも同じ現象が起きています。

さらに、ComboBoxで選んだ文字列に関連する文字列だけが
Memoに表示されるのではなく、全て表示されてしまいます。
テキストファイルを前回と同じで
a1,a2,a3,a4,a5,a6
b1,b2,b3,b4,b5,b6
c1,c2,c3,c4,c5,c6
と仮定して、
ComboBoxでa1をえらんだところ、
Memo1にa2,b2,c2を
Memo2にa3,b3,c3を
・・・
Memo5にa6,b6,c6を
と全て表示されてしまうんです。
なぜでしょう?
お手数ですが、またご教授願います。
391デフォルトの名無しさん:04/10/29 02:42:19
前にも回答したけど、表示するのと文字列を保持する配列を分離すること。
配列に代入出来さえすると、なんでもできる。それから、TStringList の
CommaText は空白も区切りにするから、"" で囲むなどの工夫が必要。
392デフォルトの名無しさん:04/10/29 09:21:07
>>389
ShowModalん中で無限ループでメッセージ読み続けてるだけで、
親フォームには何にも通知されないんだね。
393デフォルトの名無しさん:04/10/29 09:45:46
親フォームって何のこと?

> 無限ループでメッセージ読み続けてるだけで、

モーダルループっていう。
自分以外はちゃんと EnableWindow( ,false) にされてるでしょ
モーダルダイアログが TCustomForm の派生クラスなら、Screen.ActiveCustomForm
の FormState に fsModal が入ってるから分かる
394デフォルトの名無しさん:04/10/29 10:35:27
ウィンドウハンドルで、それが自分のアプリ内のウィンドウかどうか判断できましたっけ?
395224:04/10/29 10:45:41
テキストデータの文字列のスペース部分は、アンダースコアを入れることにします。
また、ご教授いただいた通り、テキストファイルから取り出すのに使用した配列から、
さらに必要な部分だけを取り出して保存させる別配列も作成してみます。
ありがとうございました。
396デフォルトの名無しさん:04/10/29 10:57:25
>>393
にしては、他ウィンドウのEnabledを見てみたらtrueなんだけど?
397デフォルトの名無しさん:04/10/29 11:14:30
>fsStayOnTop を使いたい気持ちはわかるけど、君みたいなプログラマがたくさんいて、

fsStayOnTopを使わずに、自アプリ内でいつもトップウィンドウにする方法教えて下さいでつ。
398デフォルトの名無しさん:04/10/29 11:25:57
試したわけでもないが、FormのOnActivateでSetWindowPosしてZオーダー変えれば?
399デフォルトの名無しさん:04/10/29 11:43:49
>>394

EnumThreadWindows で列挙した中に入ってるかどうか。
あるいは、もっと簡単に GetWindowThreadProcessId を使って ThreadID か
ProcessID が Application.Handle のそれと一致するかどうかでわかる
400デフォルトの名無しさん:04/10/29 11:49:50
>>393
>他ウィンドウのEnabledを見てみたらtrueなんだけど?

いまソースが見られないところにいるんだけど
VCL のプロパティーに EnableWindow API の結果が反映されてないだけでは?
IsWindowEnabled API だとどうなる?
401デフォルトの名無しさん:04/10/29 11:52:51
>>398
>FormのOnActivateでSetWindowPosしてZオーダー変えれば?

TScreen.OnActiveFormChange イベントのほうがいいと思う
402380:04/10/29 12:17:07
>>382
ありがとうございます。ちなみにそれは自分でコンポーネントを作る必要があると
解釈してよろしいのでしょうか?
継承とか使わないところは調べていないのでイマイチ意味がわかりませんが、
もう少し自分で勉強してみます。ありがとうございました。
P.S.レス遅くなってすみませんでした。
403デフォルトの名無しさん:04/10/29 13:22:21
アプリケーションを起動するとすでに起動されているかどうかをチェックして
起動されていなければそのまま実行し、
起動されていればParamStrを渡して終了というのをやりたいんですが、
どうやればいいのでしょうか?
404デフォルトの名無しさん:04/10/29 13:25:48
mutex in google
405デフォルトの名無しさん:04/10/29 13:27:32
サンクス>>400
勘違いしてたけど、APIだとfalseになってる。これで判定しやすくなった。
406405:04/10/29 13:33:48
>VCL のプロパティーに EnableWindow API の結果が反映されてない
ということは、イベントハンドラとかメソッドは期待できないんだな。
変更を監視しとかなきゃならんのか。Timerしかないんか。
407デフォルトの名無しさん:04/10/29 13:46:30
Delphiで作ったコントロールをOCXにコンパイルしたいのですが、
やさしく教えてくれるサイトとかありませんか?
ちなみにTCustomControl派生です。
408デフォルトの名無しさん:04/10/29 14:26:44
409405:04/10/29 14:28:58
ごめんなさい、読み落としてマスタ>>408
410405:04/10/29 16:01:06
>TScreen.OnActiveFormChange イベントのほうがいいと思う

TApplicationEventsアイコンみたく、Screenアイコンは無いんでつか?
411デフォルトの名無しさん:04/10/29 16:31:16
GetActiveWindowでアクティブなウィンドウのハンドルを取ったとして、
どうやったらVCLオブジェクトを参照できるんでしょうか。
412デフォルトの名無しさん:04/10/29 16:43:10
>>410
ないから、型を調べて Form1 のメソッドにして代入する。
413デフォルトの名無しさん:04/10/29 16:45:16
TForm.Handle全検索
414デフォルトの名無しさん:04/10/29 16:49:39
>>411
>GetActiveWindowでアクティブなウィンドウのハンドルを取ったとして

Screen.ActiveCustomForm.Handle と比較して一致したら好きにキャストしてつかう。
一致しなかったら、VCL のフォームじゃなく、API やコモンダイアログのウィンドウだから
VCLオブジェクトとウィンドウは無関係かもしれない
415デフォルトの名無しさん:04/10/29 16:51:19
>TApplicationEventsアイコンみたく、

アイコンって・・・・
コンポーネントだろ。
416デフォルトの名無しさん:04/10/29 16:53:01
ValueOf(>>415)=0
417デフォルトの名無しさん:04/10/29 17:02:39
ValueOf(>>416-417)<0
418デフォルトの名無しさん:04/10/29 17:04:17
>Screenアイコンは無いんでつか?

なんか馬鹿っぽくて、教えた句ねー
419デフォルトの名無しさん:04/10/29 17:12:02
サンクス>>412-414
GetActiveWindowをやめて、Screen.ActiveCustomFormを使い待つ。
420デフォルトの名無しさん:04/10/30 03:08:35
DelphiでDAOの使い方書いてあるサイトとかないでしょうか?
コンポーネント使わずCreateOleObjectでから始めたいのですが
421デフォルトの名無しさん:04/10/30 03:33:13
TPaint を使って描画をしているのですが、激しくちらついてしまいます。
OnPaint イベントで Paint.Canvas に描き込むだけでは駄目なのでしょうか?
422デフォルトの名無しさん:04/10/30 03:33:43
×TPaint
○TPaintBox

です。
すみません。
423デフォルトの名無しさん:04/10/30 04:01:22
つたない知識ですが

>>421
Refreshメソッドは×
あれは背景色で塗りつぶしたあとPaintをメソッドを呼ぶからどうしてもちらつく

プロパティでcsOpaqueを追加すると領域をクリアしないでベタッと描画する
ただし領域全体を塗りつぶさない場合じゃない前の色のがゴミとなって残るので使えない
424デフォルトの名無しさん:04/10/30 04:14:51
TPaintBox.OnPaint だけで描画してちらつくことはないですよ。移動させない限り。
425デフォルトの名無しさん:04/10/30 04:33:53
>>395=224
>テキストデータの文字列のスペース部分は、アンダースコアを入れることにします。

スペースを生かすために "" で囲むのは簡単だよ。
こんな感じ。

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  sl:TStringList;
begin
  s := 'a b,c d,efg h,i j,klm';
  sl := TStringList.Create;
  try
    sl.CommaText := '"' + StringReplace(s,',','","',[rfReplaceAll]) + '"';
    Memo1.Lines.Assign(sl);
  finally
    sl.Free;
  end;
end;
426375,377:04/10/30 19:24:57
やはり無理なのでしょうか?
427デフォルトの名無しさん:04/10/30 21:33:06
428デフォルトの名無しさん:04/10/30 23:50:10
>>427
これだけわかれば十分です
ありがとうございました
429デフォルトの名無しさん:04/10/31 02:20:41
>>187さんでも書かれているTPanelのCaption(正確にはTControl.Captionですかね)の
プロパティのアクセスメソッドの詳細を知りたいのですけど、???の部分のメソッド名とプ
ロトタイプをどなたか教えてください。

バージョンはDelphi6 Personalです。

property Caption: TCaption read ??? write ??? ;
430デフォルトの名無しさん:04/10/31 04:52:07
TControl = class(TComponent)
property Caption: TCaption read GetText write SetText stored IsCaptionStored;
つうか*.intで調べろ。
431デフォルトの名無しさん:04/10/31 04:59:51
>>430
controls.int の記述?
パーソ版には無いっぽい。
432デフォルトの名無しさん:04/10/31 06:38:31
delphiでXML操作にTXMLDocumentを使ってるのですが、xpathを利用する方法はないですか?
特定のパスの集合をとってきたいのですが。
433デフォルトの名無しさん:04/10/31 15:24:16
学生なのですがDelphi6Personalにはまりました
それでDelphi8のアカデミック版を購入しようと思っているのですが見当たりません
どこに行けば購入できるのでしょうか?
434デフォルトの名無しさん:04/10/31 15:25:39
435デフォルトの名無しさん:04/10/31 20:24:09
usesに書いたユニット名にマウスカーソルをあわせたとき出るヒントに、
最後にカッコ数字がでるけど、何を表してるの?
Windows.pas (12)っていうやつ
436デフォルトの名無しさん:04/10/31 20:28:02
unit 宣言の行番号。

unit Windows;
とかの。
437デフォルトの名無しさん:04/10/31 22:52:44
ラベルのCaptionに改行を入れたいのですが、
コードを書いて入れるしか無いのですか?(プロパティエディタとかから入れる事は出来ないのですか?)
438デフォルトの名無しさん:04/10/31 23:02:07
>>433
ぐぐったら
http://store.nttx.co.jp/_II_BOL1112JDL
あったけど
439デフォルトの名無しさん:04/10/31 23:35:07
>>437
.dfm を直接編集すれば出来る
440デフォルトの名無しさん:04/10/31 23:58:04
タスクトレイに
NID : TNotifyIconData;
NID.cbSize :=Sizeof(TNotifyIconData);
NID.uID := 1;
NID.hIcon := Application.Icon.Handle;
NID.Wnd :=Form1.Handle;
NID.szTip :='Test';
NID.uCallbackMessage :=WM_USER + 100;
NID.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP ;
Shell_NotifyIcon(NIM_ADD, @NID);

としてうまくタスクトレイに入ったのですが
そのアイコン上で右クリックしても
タスクバーを右クリックしたようなメニューがたまに出て
反応が悪いんです
左クリックの反応はちゃんと出るんですが
おそらくタスクバー上で左クリックしても何もならないからたまたまかなっと思っております

これってどうやったらなおるんですかね?

クリックしたときの処理は
SetForegroundWindow(Handle);
GetCursorPos(Point);
if (Msg.wParam = WM_LBUTTONDOWN) then
PopupMenu1.Popup(Point.x, Point.y)
else if(Msg.wParam = WM_RBUTTONDOWN) then
PopupMenu2.Popup(Point.x, Point.y);
です
441デフォルトの名無しさん:04/11/01 00:27:43
>>438
サンクスです
442デフォルトの名無しさん:04/11/01 00:36:42
>>440
漏れのプログラムで動いている同じようなコード

procedure TForm1.WndProc(var Message: TMessage);
begin
 case Message.Msg of
     WM_LBUTTONDOWN:
      PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
     WM_RBUTTONDOWN:
      PopupMenu2.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
 end;
  inherited;
end;
443デフォルトの名無しさん:04/11/01 00:59:53
>> case Message.Msg of

じゃなくて

if Message.Msg = WM_USER + 100 then
case Message.LParam of

だろな、この場合。
444デフォルトの名無しさん:04/11/01 01:28:12
>>440
> if (Msg.wParam = WM_LBUTTONDOWN) then

wParam と lParam を間違えてるよ。
445440:04/11/01 01:35:18
>>442
>>443
>>444
情報ありがとうございます。

>>442
>>443
受け取りがTMessageにしてますが
ソース上部での
procedure宣言の部分はどうしてるんですか?

>>444
lParamにするとメニューが出なくなりました・・・。
ソースコピー元は
ttp://homepage1.nifty.com/MADIA/delphi/Win32API/Tasktray.htm
です。

引き続きよろしくお願いします。
446デフォルトの名無しさん:04/11/01 02:15:15
> procedure宣言の部分はどうしてるんですか?

WndProc の override でしょ。

WM_USER+100 なら procedure(var Msg:TMessage);message WM_USER+100;
を TForm1 のメソッドにするのでは?

> lParamにするとメニューが出なくなりました・・・。

MSDN の NOTIFYICONDATA Structure のところでは

The wParam parameter of the message contains the identifier of the
taskbar icon in which the event occurred. The lParam parameter holds
the mouse or keyboard message associated with the event.

だから、メッセージID は LParam だよ。
447440:04/11/01 09:23:16
>>446
ん〜やってみましたが
依然変わらずですねぇ

メニュー出す処理自体は
TMsg型で受けてるのでwParamなのでいいと思うんですが

ポップアップメニューを出してから
他の部分をクリックするとメニューが消えるように
SetForegroundWindow(Handle);
をやってまして
>>440で書いてますけど)

それをコメントにすると
誤反応がなくなりましたので
もしかしたらSetForegroundWindow(Handle);の部分が悪いのかな?っと思ったり・・・。

>>442さんは
SetForegroundWindow(Handle);
を書いても誤反応とかしないですか?
448デフォルトの名無しさん:04/11/01 10:17:19
フォームの再描画無理やりとめるのってどうやるの?
449デフォルトの名無しさん:04/11/01 10:30:04
>433
ここのところのBorland製品は、ライセンスがけちで、
アカデミック版に関してはDelphi7以降、プログラミング学習用途以外の禁止を
利用規程で明確に記している。
で、MSのVisual Studio系とは違ってアカデミック版では商用利用は確実にできないし、
下手するとフリーソフト公開も危ういライセンスなので気を付けろ。
450デフォルトの名無しさん:04/11/01 11:05:57
>>447
>TMsg型で受けてるのでwParamなのでいいと思うんですが

ソースは?
451デフォルトの名無しさん:04/11/01 11:08:29
>>447
原理がわかってないんだろ?
それ用のコンポがいっぱいあるから、DLして使ったほうがいい
452440:04/11/01 12:03:56
453デフォルトの名無しさん:04/11/01 14:07:26
>>452

それ、メッセージハンドラ で TMsg 型で受け取ってるのが間違いのもと。
TMessage 型で受け取るべき。そうするとドキュメントと一致する。

TMessage 型の lParam の領域が TMsg 型の wParam の領域に相当してる。
ウィンドウメッセージを受け取るときは TMessage 型にするように。
454デフォルトの名無しさん:04/11/01 14:08:12
delphiでp2pソフトって作れますか?
455デフォルトの名無しさん:04/11/01 14:12:32
>>448
LockWindowUpdate
456デフォルトの名無しさん:04/11/01 14:12:48
Share(仮称)はDelphi7製
457デフォルトの名無しさん:04/11/01 17:19:29
>>433
8は.NET用だぞ。ProfessionalにはDel7Studioもついてるけどマニュアルは無い。
458デフォルトの名無しさん:04/11/01 17:38:39
来月Delphi 2005も出るしな
459デフォルトの名無しさん:04/11/01 18:39:23
いまからDel8買うのは狂気の沙汰。
460デフォルトの名無しさん:04/11/01 20:14:36
今Delphi 8を買えば無償でDelphi 2005にアップグレードできる。
461デフォルトの名無しさん:04/11/01 20:38:48
Del8Pro買えば同封されているDel7でネイティブアプリが作れて、Del8で.NETアプリや既存アプリ(プロジェクト)の.NET化ができるということで合っていますよね?
2005のことは全く知らないけどどうなるんでしょう?
462デフォルトの名無しさん:04/11/01 20:40:07
ny1はVC++でny2はBCBだっけか?
463デフォルトの名無しさん:04/11/01 21:17:31
PageControlで作ったタブを右クリックでも切り替わるようにしたいのですがどうしたら良いのでしょうか?
464デフォルトの名無しさん:04/11/01 22:20:44
>>463
こんな感じ

uses
  CommCtrl;

procedure TForm1.PageControl1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  hti:TTCHitTestInfo;
  ret:integer;
begin
  if Button = mbRight then begin
    hti.pt := Point(X,Y);
    ret := TabCtrl_HitTest(PageControl1.Handle,@hti);
    if ret <> -1 then
      PageControl1.ActivePage := PageControl1.Pages[ret];
  end;
end;
465デフォルトの名無しさん:04/11/01 23:40:45
>>460
詳しく
466463:04/11/02 01:02:34
>>464
ソースまでつけてもらってありがとうございます
明日試してみます
467440:04/11/02 01:03:34
>>453
TMessage型に変更しましたが変わりませんでした

しかし開発環境はWinXP(SP2)なのですが
Win2000(SP4)上でコンパイルしたプログラムで確かめると
誤動作をしなくなりました

しかし同じプログラムをWinXP(SP2)上で実行すると
やはり誤動作を確認できました

もうちょっと頑張ってみます・・・。
468デフォルトの名無しさん:04/11/02 04:24:25
インラインアセンブラでMMX使うと浮動小数点のエラ−が出ます。
なにか宣言しないと使えないんでしたっけ?
DELPHIは6、CPUは当然MMX有効。
469デフォルトの名無しさん:04/11/02 05:03:53
>>468自己レス
emmsを書き忘れてました・・・

別な質問ですが、BITMAPはSCANLINEで調べるとY方向が連続してない
ようなのですが、これをきれいにメモリ上に連続した状態にする方法はありませんでしょうか。
for文でY方向のSCANLINEをやると遅くなるので、インラインアセンブラ内の
演算だけでアドレスを計算したいのですが・・・
470デフォルトの名無しさん:04/11/02 08:43:32
>>469
Windowsのビットマップはメモリ内だと上下がひっくり返って格納されてる。
左下ピクセルのアドレスを先頭にw*bpp*hバイトのサイズで連続した領域になってたはず。
471デフォルトの名無しさん:04/11/02 08:45:31
ビットマップの一部だけを処理するならScanline[y]を事前に配列に突っ込んでキャッシュしておく方法もあり。
472デフォルトの名無しさん:04/11/02 14:06:31
>>468
もっとMMXを勉強しろ。それはMMXの仕様を知っていない証拠だ。
473デフォルトの名無しさん:04/11/02 15:27:29
>>468
FPUレジスタとMMXレジスタは共用です
474デフォルトの名無しさん:04/11/02 23:28:56
>>469
ビットマップのサイズを8の倍数にしる。
475デフォルトの名無しさん:04/11/03 12:11:51
VBAでいうところの、
On Error Resume Next
にあたる命令ってある?
476デフォルトの名無しさん:04/11/03 12:19:26
ない。例外処理使え。
477デフォルトの名無しさん:04/11/03 13:51:06
>>476
d
478385:04/11/03 18:28:56
>>387

遅レスになってしまったがそこでなんとか買えました
情報thx
479デフォルトの名無しさん:04/11/04 07:26:25
Delphiのデフォルトアイコンって、どのファイルを参照すればいいの?

一度変えたものの元に戻そうと思ったらファイルがどれだかわからなくなっちゃった。
480デフォルトの名無しさん:04/11/04 09:23:04
TStringGridのコンポーネントを作っているのですが、
ColCountを変更したときに、ある動きをさせたいと思っています。

ところが、VCLでColCountプロパティのSetColCountメソッドが
privateになっているので、overrideすることができません。
ColCountが変更されたことを取得するイベントもみあたらないよう
なのですが、列数を変更された場合に処理を行うにはどうすれば
いいでしょうか?
481デフォルトの名無しさん:04/11/04 12:42:23
>>480
TCustomGrid.SizeChangedをオーバーライド
482デフォルトの名無しさん:04/11/04 12:47:13
>>481
おお、こんなのあるんすね。
ちとみてみます。また、あとで報告します。
483デフォルトの名無しさん:04/11/04 12:51:45
>>481
バッチリです。できました。ありがとうございました。
しかし、SizeChangedて・・・、てっきりコンポの幅かと思って見過ごしてました。
今度からは引数もちゃんとみまつ・・・・
484デフォルトの名無しさん:04/11/04 14:16:56
またコイツかぁ
485デフォルトの名無しさん:04/11/04 14:35:54
Delphiでボタンをクリックすると僕の口座にお金が振り込まれるようなソフトって出来ないでしょうか。
486デフォルトの名無しさん:04/11/04 15:34:38
デバッグ中は二重起動防止しない、ミューテクスも作らない、
単独動作中は二重起動防止する、という動作をさせて楽したいのですが、
アプリの側からデバッガ接続の有無を知るにはどうしますか?
487デフォルトの名無しさん:04/11/04 15:34:59
できるよ。Button1Click にそのようなコードを書くだけ
488デフォルトの名無しさん:04/11/04 15:51:58
>>486

function IsDebuggerPresent:bool; stdcall; external 'kernel32.dll' name 'IsDebuggerPresent';

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsDebuggerPresent then
    ShowMessage('Debugger is Present')
  else
    ShowMessage('Debugger is not Present');
end;
489デフォルトの名無しさん:04/11/04 16:01:47
>>488
ありがとうございます。
Windows.pasにはなくて、宣言しなきゃいけないみたいですね。
490デフォルトの名無しさん:04/11/04 16:06:11
DebugHook
491デフォルトの名無しさん:04/11/04 16:08:25
>>489

Win95 では使えない。VCL に相当するシンボル定数がありそうだけどしらない。
リリース版では、宣言消して

const
IsDebuggerPresent = false;

みたいにしておけば完璧かな
492デフォルトの名無しさん:04/11/05 15:22:27
>432
>delphiでXML操作にTXMLDocumentを使ってるのですが、xpathを利用する方法はないですか?
>特定のパスの集合をとってきたいのですが。

ヘルプ見てもないような感じですね。。
自分もこの機能がほしかったのですが、、
しょうがないからまたMSのパーサにまたお世話になるか、、
493デフォルトの名無しさん:04/11/05 18:39:49
propertyのdefaultに文字を指定する方法を教えてください
494デフォルトの名無しさん:04/11/05 18:59:40
StringGridの行をタブ区切りテキストにして
クリップボードにコピーしたいんですが、
タブ区切りテキストの作り方がよくわからなくて・・・
何を挿入すればタブになるんですか?
495デフォルトの名無しさん:04/11/05 18:59:49
昨日2005のup案内のハガキ来たけど悩むなぁ。。。
496デフォルトの名無しさん:04/11/05 19:14:01
>>494
タブじゃないのか?
VK_TAB、またはChar(9)、または#9
497デフォルトの名無しさん:04/11/05 19:37:40
>>496
仮想キーコードで良かったのですね。
早速やってみます。ありがとう。
498デフォルトの名無しさん:04/11/05 20:36:00
> 仮想キーコードで良かったのですね。

えっと、普通文字列のなかに挿入するときは Char(9)、または#9 の方をつかいますよ。
499デフォルトの名無しさん:04/11/05 21:42:13
>>493
ヘルプくらい嫁

>default 指令と nodefault 指令は,集合の基本型の上限と下限が 0 〜 31 の範囲の順序値である順序型と集合型のみサポートしています。

つまり不可能
500デフォルトの名無しさん:04/11/07 14:55:33
>>499
エエー
VCLだとキャプションとか表示されてるのに・・・・・
無理なのかぁぁ さんくす
501デフォルトの名無しさん:04/11/07 15:46:59
Caption にはデフォルトはないでしょ。dfm に必ず保存されるし。
コンストラクタで設定してるだけじゃないの
502デフォルトの名無しさん:04/11/07 15:48:10
ってかIDEが設定してるのか。動的につくると設定されないし、Button1 とか。
503デフォルトの名無しさん:04/11/07 20:20:43
>>495
エディタとかinline展開とか小技は効いている。
個人的にはローカルで履歴が持ててDiff取れるのがいい。
(プロジェクトごとではないような気がしたが半分寝てたので)

で、半分寝てたのでx86-64(EM64T)に対応したかどうか聞き忘れた。
どうだったか教えてエロイ人!
504デフォルトの名無しさん:04/11/07 20:31:46
>個人的にはローカルで履歴が持ててDiff取れるのがいい。
これプロジェクトの管理機能としてはかなりお粗末だよな。
旧IDEでも外部ツールのやりくりで簡単に実現できるレベル。
505デフォルトの名無しさん:04/11/07 20:41:51
個人の趣味で適当に作るツールまで外部ツールを使えと
506デフォルトの名無しさん:04/11/07 20:41:57
拡張子に番号付けする程度かよ
507デフォルトの名無しさん:04/11/07 20:42:42
個人の趣味で適当に作るツールには履歴なんかいらんだろ
508デフォルトの名無しさん:04/11/07 20:44:27
つまり金出して、重いIDE使いたくもないのにVerUpする価値はない
509デフォルトの名無しさん:04/11/07 20:45:10
> で、半分寝てたのでx86-64(EM64T)に対応したかどうか聞き忘れた。

してない。
510デフォルトの名無しさん:04/11/07 20:47:56
おんめら、そげな話題わ談話室でやってけろ
511デフォルトの名無しさん:04/11/07 20:48:11
>>507
Explorerでプロジェクトフォルダごとバックアップとって
WinDiffにSendToで渡して比較するのはめちゃ便利だぞ。
512デフォルトの名無しさん:04/11/07 20:52:36
>>510

枯れ木も山のにぎわい。近頃ここすたれすぎだから景気づけ。
513デフォルトの名無しさん:04/11/07 22:36:40
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
514デフォルトの名無しさん:04/11/07 22:46:05
超低レベルDelphiユーザの在庫僅少ってことだ
515デフォルトの名無しさん:04/11/07 23:32:32
>>512 >>514
たしかに初心者レベルの質問がいたるところで激減してる・・・・・・
なんか地殻変動があったのかな?
Delphi入門者が減ったのか? みんなGoogle使いがうまくなったのかな・・・・・
516デフォルトの名無しさん:04/11/08 03:08:12
入門者が減ったんではなく、初心者がいなくなっただけ。こだわりがない分、
沈みかけた船から逃げ出すのも早いってことだ
517デフォルトの名無しさん:04/11/08 07:43:26
ネガティブ思考は禿るよ
518デフォルトの名無しさん:04/11/08 09:18:13
現実をみなきゃ。戦わなきゃ。 > アポジカ 禿対策
519デフォルトの名無しさん:04/11/08 10:03:45
AOwnerってどうして必要なんでしょ?
Parent Windowだけあればいい気がします。
何にも考えないで常にCreate(Self)って書いてますが、
Selfじゃなければなにか問題あるのかと。
520デフォルトの名無しさん:04/11/08 10:25:55
AOwner のほうは解放の責任も負ってくれるんじゃない?
521デフォルトの名無しさん:04/11/08 11:12:29
perl、php、delでcgiを作ったらどれが一番実行速度が早いの?
当然、Windows上のwebサーバーで実行するとして。
522デフォルトの名無しさん:04/11/08 11:43:34
速度で言ったらコンパイラが速いだろ。
523デフォルトの名無しさん:04/11/08 13:48:13
mod_perl, mod_php > Delphi > perl, PHP
DelでApacheモジュール作れるならそれが最速
524デフォルトの名無しさん:04/11/08 15:33:47
あるコンポを作っていて、そのconstructorで以下をすると、
コントロール''は親ウィンドウを持っていますってエラーになるんだけどなぜ??
Formatを指定しなければ、エラーにならず、FormのOnCreateに書いても
エラーにならないのに!!

fDateTimePicker := TDateTimePicker.Create(Self);
fDateTimePicker.Parent := Self;
fDateTimePicker.Format := 'yyyy';
525デフォルトの名無しさん:04/11/08 16:20:59
constructorの時点でまだWindowハンドルが割り当てられていない。
ハンドルが割り当てられていないとParentになれない。
割り当てられているかどうかはHandleAllocatedで確認できる。
CreateHandleをオーバーライドしてブレークポイントを置いてみればわかりやすい。
526デフォルトの名無しさん:04/11/08 16:41:11
98系のpcしかないんだけどプロ版どれ買えば良い?
527デフォルトの名無しさん:04/11/08 16:56:34
PC買え
528デフォルトの名無しさん:04/11/08 17:05:35
4文字かよ
529デフォルトの名無しさん:04/11/08 17:41:20
パーソナルコンピューターをお買いあげになってくださいませ
530デフォルトの名無しさん:04/11/08 17:46:18
>>526
PCカエ
531デフォルトの名無しさん:04/11/08 18:09:36
7買ったら駄目なああああああああああああん?
532デフォルトの名無しさん:04/11/08 19:14:38
>>531
普通に8カエヨ 7ツイテクル
533デフォルトの名無しさん:04/11/08 19:25:52
PC買うのが正解だろ
534デフォルトの名無しさん:04/11/08 20:24:19
delphi7買ってC#は他でやろうと思ったんだけど
535デフォルトの名無しさん:04/11/08 20:33:27
学生ならJ、C++、C#、VB全部で5kだよ
ただし.net 2003だけど

と布教してみる
536デフォルトの名無しさん:04/11/08 21:00:15
いや、だから98系のPCで今から始めるのは駄目。
まず、PC買え。
537デフォルトの名無しさん:04/11/08 21:13:50
98系ってのはWin98系だよね?
まさかPC98じゃないよね?
538デフォルトの名無しさん:04/11/08 21:21:14
いくらなんでもそれはないだろ・・・
539デフォルトの名無しさん:04/11/09 00:06:42
>>534
Del2005カエヨ Win32、.netデツカエルシ、.netナラC#モツカエル
540デフォルトの名無しさん:04/11/09 00:13:14
PC-9801VM21しかないんですがどれを買えばいいのでしょうか?
541デフォルトの名無しさん:04/11/09 00:34:16
TurboPascal
542デフォルトの名無しさん:04/11/09 01:07:37
つーか、ただでさえ安定しないDelphiで開発し、
ブルーバック出したくないならNT系買え。
543デフォルトの名無しさん:04/11/09 01:33:32
Delphi オブジェクト指向プログラミング 
ってオブジェクト指向を学ぶもの?それともDelphiを学ぶもの?
オブジェクト指向については他の専門書籍あったよね?
544デフォルトの名無しさん:04/11/09 01:39:42
Delphiにおけるオブジェクト指向を学ぶもの。

あの本がでた当時、ポインタを意識しなくていいけど、
そのかわりに、クラス変数がデフォルトで参照渡しな、オブジェクト指向言語が
他にあんまりなかったので、あの本は有用だったと思うよ。
今読んでも、Delphiのオブジェクト指向の知識は、JAVAやC#にかなり流用できるしね。
545544:04/11/09 01:44:57
あ、でもやっぱり、オブジェクト志向の習得には、本読むだけじゃだめで、
基本的な知識を本読んで得た後、
上手く書かれた他言語のオブジェクト指向を取り込んだソースコードを
Delphiなりなんなりに移植してみるのが、一番勉強になると思う。
546デフォルトの名無しさん:04/11/09 01:51:49
OOPL なら Java から入門しれ ただだし 本もいっぱいある
547デフォルトの名無しさん:04/11/09 01:57:12
Delphi はOOPLとしては中途半端。グローバル変数やら、ただの関数やらがあって
手続き型言語との中間。Java や C# のような言語が入門にはいいだろう。
548デフォルトの名無しさん:04/11/09 02:02:50
> Java や C# のような言語が入門にはいいだろう。

当分死滅しないしな
549デフォルトの名無しさん:04/11/09 07:38:35
確かに他の言語のこととかもわかるようになってくると
中途半端間は否めないな・・
今ではDelphiの中途半端感に慣れてしまったのでDelphiが一番使いやすいけど
これからプログラミングを学んでいくなら
完全OOPL型の言語の方が学びなおす手間がかからなくていいかもね
550デフォルトの名無しさん:04/11/09 08:15:50
>>542
安定しないのはおまえが組んだプログラムだけだろ(大爆笑)
551デフォルトの名無しさん:04/11/09 10:49:49
まあ、Delphi本にしろ、他の言語にしろ、
オブジェクト指向に関しては、
塚越本は、なかなかいいよ。
552デフォルトの名無しさん:04/11/09 11:52:31
いくらなんでも内容古すぎ
553デフォルトの名無しさん:04/11/09 16:20:53
ホットキーが押されたらフォームを最前面に表示したいのですが
どのようにすればよいでしょうか?
サンプルなどあったら教えてください。よろしくです。
554デフォルトの名無しさん:04/11/09 17:11:59
>>553 CTRL+A

  public
    id:ATOM;
    procedure WMHotkey(var Msg:TWMHotkey);message WM_HOTKEY;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  id := GlobalAddAtom('HogeHogeHotkey');
  RegisterHotkey(Handle,id,MOD_CONTROL,Ord('A'));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnregisterHotKey(Handle,id);
  GlobalDeleteAtom(id);
end;
555デフォルトの名無しさん:04/11/09 17:12:47
つづき

procedure TForm1.WMHotkey(var Msg: TWMHotkey);
var
  ThreadID1,ThreadID2: DWORD;
begin
  if Msg.HotKey = id then begin
    ThreadID1 := GetWindowThreadProcessId(GetForegroundWindow,nil);
    ThreadID2 := GetCurrentThreadId;
    AttachThreadInput(ThreadID2,ThreadID1,true);
    SetForegroundWindow(Handle);
    AttachThreadInput(ThreadID2,ThreadID1,false);
    BringWindowToTop(Handle);
  end;
end;
556デフォルトの名無しさん:04/11/09 18:47:12
for構文の処理なんですが、
Memo1〜Memo8までを対象とした処理を書くときに、

var
i:integer;
begin
for i:=1 to 8 do
begin
{処理内容}
end;
end;

となりますよね?
このときに、MemoiもMemo[i]もコンパイルされないんですが、
どういう表記をすればコンパイルされますか?
557デフォルトの名無しさん:04/11/09 18:55:38
FindComponent('Memo'+IntToStr(i)) as TMemo
558デフォルトの名無しさん:04/11/09 18:58:18
ColorBoxの表記を日本語ではなく英語にすることはできないでしょうか?(´Д`;
559553:04/11/09 19:31:27
>>554
すぺしゃるさんくす。
後ほど試して見ます。
560556:04/11/09 19:32:23
Memo1.Textや、
Memo1.Color:=clRed
を557さんの方法でやると、エラーが出ます。

FindComponent('Memo'+IntToStr(i)) as TMemo.Textや,
FindComponent('Memo'+IntToStr(i)) as TMemo.Color:=clRedは、
コンパイルされません。
どうすれば良いですか???
ほんとくだらない質問ですいません;;
561デフォルトの名無しさん:04/11/09 19:38:06
>>560
おぬし、OOPの勉強しなおし

FindComponent('Memo'+IntToStr(i)) as TMemo までが TMemo のインスタンス
だから

(FindComponent('Memo'+IntToStr(i)) as TMemo).Text := 'おぬし、OOPの勉強しなおし';

な感じ
562556:04/11/09 19:41:30
はい、勉強しなおしますw
563デフォルトの名無しさん:04/11/09 22:03:46
delphiで作ったソフトがメモリーリークを起こしているみたいなのですが、
本当にメモリーリークを起こしているか確認するソフトは無いでしょうか?
564デフォルトの名無しさん:04/11/09 22:04:23
標準でついてるユニットから使わない部分を削除すれば実行形式ファイルは小さくなりますか?
たとえばuses FileCtrl;としてもSelectDirectory()しか使わない場合、他の関数を残しておくと何か無駄が生じたりしませんか?
565デフォルトの名無しさん:04/11/09 22:06:25
>>563
MemCheck使え。
566デフォルトの名無しさん:04/11/09 22:07:49
>>564
unitのinitialization/finalization部分にコードが記述されてるユニットはusesするだけで
強制的に一定のコードがリンクされる。
記述されてないユニットは明示的に使っていない関数・変数・クラスは削除される。
567デフォルトの名無しさん:04/11/09 22:11:54
>>566
お答えありがとうございます。よくわかりました。あまり気にしないことにします。
568デフォルトの名無しさん:04/11/10 03:01:40
http://www.monazilla.org/document/directwrite.html

この内容通りやってうまく表示されたのですが再び表示しようとすると真っ白になってしまいます。
どうすればうまく表示できるでしょうか?
569デフォルトの名無しさん:04/11/10 10:29:15
>>568
「再び表示しようとすると」って、Refresh のこと? 動的に書き込んだ内容は
表示してるだけでどこにもドキュメントがないので Refresh したら、書き込む
前の空白が表示されるんでは
570デフォルトの名無しさん:04/11/10 22:25:00
ここは低レベルなDelphoiですね。
571デフォルトの名無しさん:04/11/10 22:35:56
超初心者用ってスレ見に来るくらいだから低レベルで当たり前。
もちろん答えてる側のレベルの話だよな。
572568:04/11/10 22:45:02
>>569
いえ、新しくHTMLを作成しそれを表示した場合です。
言い換えますと>>568の方法では一度表示したら内容を変更することができません。
(直接 HTML を表示するのではなく一度htmlファイルを作りそれを表示した場合はうまくいきます。)
573デフォルトの名無しさん:04/11/10 22:47:51
詳細忘れたけどなんかのイベントハンドラで再度HTML書き込めばいいんじゃないの。
574デフォルトの名無しさん:04/11/11 08:51:09
ページプロデューサーで透過タグを複数使いたい時って、
どうすれば良いんでしょうか?
ヘルプ読むと、ページプロデューサーからページプロデューサーへ、
コンテンツを引き継ぐことが出来るようなことは書いてあるんですが、
分からん。
575デフォルトの名無しさん:04/11/11 11:22:32
571 名前:デフォルトの名無しさん [sage] 投稿日:04/11/10 22:35:56
超初心者用ってスレ見に来るくらいだから低レベルで当たり前。
もちろん答えてる側のレベルの話だよな。
576デフォルトの名無しさん:04/11/11 15:47:00
>>565
563ではないけど、MemCheckでSystemユニットやらGraphicsユニットでリーク出る。
なにを信じればいいのかわからん。
577デフォルトの名無しさん:04/11/11 19:02:47
使い方間違ってるかパッチ当ててないか新種のバグを発見したか放置されてるバグのどれかだな。
578デフォルトの名無しさん:04/11/11 19:20:27
readすげーなw
memoにいったん書き出してから保存だと死ねたけどread,readlnなら一瞬だなw
579デフォルトの名無しさん:04/11/11 19:52:48
なぜにmemoと比較するか
580デフォルトの名無しさん:04/11/11 20:19:43
ListBoxで選択された内容をボタンを押したときにクリップボードに格納したいのですがどうしたらいいでしょうか?
581デフォルトの名無しさん:04/11/11 20:20:59
はじめのうちは意味不明な事をするものさ
582デフォルトの名無しさん:04/11/11 20:26:08
583デフォルトの名無しさん:04/11/11 20:46:22
>>582
ありがとうございます
さっき検索していたときの一番にそこに辿りついたのですが見逃してました
584デフォルトの名無しさん:04/11/11 22:18:25
delphiXの使い方を解説しているサイトってありませんか?
インストールしてサンプル読んだけど、さっぱり使い方がわかりませぬ。
585デフォルトの名無しさん:04/11/11 22:20:00
書籍があったような。
586デフォルトの名無しさん:04/11/11 23:38:07
iniファイルが64KBを超えたらどうなってしまうのですか?
587デフォルトの名無しさん:04/11/11 23:41:31
>>586
俺も知りたいので5分で試して報告しなさい。
588デフォルトの名無しさん:04/11/11 23:51:43
現状でDelphiX使用する場合の優位点って、
Direct Drawだけかな?
589デフォルトの名無しさん:04/11/11 23:58:24
>>587
PCが爆発しそうでできません(><
590デフォルトの名無しさん:04/11/12 00:18:00
何と比べた優位?
591デフォルトの名無しさん:04/11/12 00:27:50
恐らくQuadruple D
592デフォルトの名無しさん:04/11/12 00:29:55
そうだな、例えばQD3系に関してならDirectDrawだろうし、
WDirectXなら日本語対応だろうし、
QD2に対してなら、Inside DirectXの存在かね、優位な点って。

UnDelphiXがあんまり盛り上がって無さそうなのが気がかりだな。
593592:04/11/12 00:30:38
Inside DelphiXの誤りね。スマソ。
594デフォルトの名無しさん:04/11/12 00:53:28
>>586
500KBのIniファイルつくって試したが別に問題なく読み書きできた。
595デフォルトの名無しさん:04/11/12 01:17:12
盛り上がってるのでDirectXラッパーの一覧表を貼っておきますね。
http://turbo.gamedev.net/wrappers.asp
596568:04/11/12 01:32:28
>>573
すいません、もうちょっとヒントいただけないでしょうか。
一通り試してみたのですがイベントハンドラで再度HTML書き込むだけではうまくいきませんでした。
597デフォルトの名無しさん:04/11/12 01:38:13
>>596
余計なお世話かもしれんが、「なぜ再表示する必要があるのか」を書くと
もちっとレス付くかも。
598568:04/11/12 01:40:45
>>597
2ちゃんねる専用ブラウザを作っているのですが一度スレを表示した後
別のスレを表示したいからです。
599デフォルトの名無しさん:04/11/12 01:54:00
んん?「Navigate」ではダメな理由は?
600568:04/11/12 02:18:57
>>599
一度、HDDにファイルを作らないといけないから。
601デフォルトの名無しさん:04/11/12 02:21:10
んんん???
ソレは「何か処理して動的に表示するから」ってこと?
602デフォルトの名無しさん:04/11/12 02:23:50
603568:04/11/12 03:32:48
うまくいきました!

about:blankを表示 → OnNavigateComplete2でHTMLを書き込み
とすることで何度でも表示できるようになりました。
about:blank以外ではうまくいったりいかなかったりすることがありました。
ありがとうございました。
604デフォルトの名無しさん:04/11/12 09:27:57
IE系2chブラは飽和状態で需要なし。
605デフォルトの名無しさん:04/11/12 10:10:10
p2以外は雑魚
606デフォルトの名無しさん:04/11/12 10:17:44
TFormのonCreateイベントについて質問です

ヘルプを見るとonCreateはFormが作成される'とき'呼ばれるとあります
ということはonCreateイベント内ではForm内のコンポーネント
(ボタン、ラベル等)の実体がないこともあるのでしょうか?

だとするとonCreateイベント内でコンポーネントのプロパティを
変更するような処理はEAccessViolationを引き起こす恐れがあるので
onShowイベント内で記述した方がいいですか?
607デフォルトの名無しさん:04/11/12 11:45:58
いいえ
608デフォルトの名無しさん:04/11/12 11:49:52
>>606
OldCreateOrderがtrueだとそうなる。
falseだとAfterConstructionで呼ばれるから貼ったコンポーネントはできあがってる。
609デフォルトの名無しさん:04/11/12 13:06:52
>>608
ありがとうございます
TCustomForm.OldCreateOrderをヘルプで調べて
より理解が深まりますた

便乗質問なんですが
Formのコンストラクタをオーバーロードした時には
inherited Create(AOwner);と継承元コンストラクタを呼び出す必要があり
それによってonCreate→オーバーロードしたコンストラクタ
という順番で呼ばれるのでしょうか

610デフォルトの名無しさん:04/11/12 13:41:47
Window生成やイベント発生のタイミングなど、
深く追い求めるならどうしてもVCLソースが必要になる。
Pro版以上買って読め。
611デフォルトの名無しさん:04/11/12 14:02:52
TPageControlのTabSheetにTWebBrowserを貼り付けて
あるページを表示しました。
その中の「ウィンドウを閉じる」ボタンを押したら
TWebBrowserが消えてしまいました。
TWebBrowserが消えたらTabSheetも消したいのですが
どのイベントを拾えばいいのでしょうか?
612デフォルトの名無しさん:04/11/12 18:32:54
デスクトップでマウスをクリックしながら動かすと矩形領域ができるじゃないですか。
あれをDelphiでやるにはどうしたらいいですか?
613デフォルトの名無しさん:04/11/12 19:49:50
機能は、同等でTMOStringGridよりよさげなグリッドコントロールはありませんか?
//TStringGridEXは×

フォーカス周りでバグがあって使いにくいのです。
バグの修正は今試みているのですが、なんとも・・・
614デフォルトの名無しさん:04/11/12 19:50:25
> クリックしながら動かす
> クリックしながら動かす
> クリックしながら動かす
615デフォルトの名無しさん:04/11/12 19:50:39
いつものダメ回答者は今日は元気ないね
616デフォルトの名無しさん:04/11/12 19:53:26
>>613
機能が同等なら何を以って「良い」とするのか
617デフォルトの名無しさん:04/11/12 19:55:15
困ったことがあり、質問があります。

自分でコンポーネントを作成中なのですが、コンポーネントをパレットから
フォームに追加してコンパイルすると、コンポーネントのユニットがUSES節
に追加されますが、コンポーネントのユニットだけではなく、特定のユニット
(ComCtrlsとか)も同時に自動的に追加されるようにしたいのですが、どう
すればいいでしょうか?
618613:04/11/12 19:56:26
>>616
ぶっちゃけ、バグ直して欲しいだけです。
おなじようなの、ないですかねぇ
619613:04/11/12 20:02:30
元がバグってやがった
あーあ
620デフォルトの名無しさん:04/11/12 20:10:17
Delphi で inline 関数を定義することはできないのですか?
621デフォルトの名無しさん:04/11/12 20:21:24
622デフォルトの名無しさん:04/11/12 20:51:37
>611
WindowClosing Event
623デフォルトの名無しさん:04/11/12 21:16:50
>>617
できません
>>586
調べてみたところではWin9x系でWindows APIで読み書きする場合は
64kBを超えるとうまく動作しないという情報もあるようです.

TIniFileは内部で上記APIを呼び出していますのでこの制限を受けると思われますが,
TMemIniFileではこれは使われず,自力で読み書きしているのでこの制限を受けません.
要はTMemIniFileを使えばOK.

>>612
クリック:押した直後にその場で離す
ドラッグ:押しっぱなし

たとえばペイントツールでドラッグによって画像の処理範囲を指定する場合は,
一般的なやり方は知りませんが,
私はキャンバスに直接点線の矩形を描画したり消したりしています.
(キャンバスのDrawFocusRectメソッドで描画すると消すのが楽でしょう.)
625デフォルトの名無しさん:04/11/13 00:09:54
>>617
publishedなプロパティに影響される。
例えばTFont型のFontプロパティが公開されていれば、
TFontを定義してあるGraphicsユニットも自動で追加される。
ComCtrlsが追加されると言うことは、
ComCtrlsで定義された型がpublishedなプロパティにあるはず。
626612:04/11/13 00:19:00
>>624
でけた!thk
627617:04/11/13 06:06:25
>>625さん
>ComCtrlsが追加されると言うことは、
>ComCtrlsで定義された型がpublishedなプロパティにあるはず。
試してみたのですけど、>ComCtrlsは追加されず無理でした。

因みに、新規作成してプロジェクトを起動したときに、初めからUSES
節にあるGraphicsを削除してからFontプロパティがあるTLabelを追加し
てコンパイルしても、Graphicsユニットは追加されませんでした。
628デフォルトの名無しさん:04/11/13 09:48:07
SQL Server 2000の一時テーブルをTTableで使いたいのですが
グローバル一時テーブルはOK、ローカル一時テーブルでは
Open時に無いと言われてしまう。
一時テーブルはOpen直前のTQueryで
CREATE TABLE #TableA ・・・ してます。




629デフォルトの名無しさん:04/11/13 10:36:52
>>628
ふーん、それで?
学校の宿題は先生に聞いた方が早いよ。
以上。
630デフォルトの名無しさん:04/11/13 11:01:23
>>629
わからなかったら書かなきゃいいのに。w
631デフォルトの名無しさん:04/11/13 13:42:10
超初心者が見るスレだからそんな物だということで
632デフォルトの名無しさん:04/11/13 14:33:05
>>628
セッションが終了しているか、別セッションで使用しようとしてません?
633デフォルトの名無しさん:04/11/13 14:45:52
>>632
どうもです。
こんな感じで直後にOpenしてます。
もちろんTDataBaseも同じです。

Query1.ExecSQL; [CREATE TABLE #TableA (aaa int null)]
Table1.Open; [Table1.TableName:#TableA]

Query1.Open (SELECT * FROM #TableA) だと問題なしです。
634デフォルトの名無しさん:04/11/13 15:05:11
Commitしてみたら?
635デフォルトの名無しさん:04/11/13 15:23:53
>>634
Commitでもダメでした。


636デフォルトの名無しさん:04/11/13 16:10:14
と言う事はTable1とQuery1は別のセッションに続しているとみるのが妥当。
てかなんでTQueryじゃ駄目なの?
637デフォルトの名無しさん:04/11/13 16:11:55
ステータスバーを付けるとでてくる、
右下の//←こんなようなウィンドウサイズを変える部分が描画できるコンポーネントってないですか?
どっかで見かけたような気がするんですが。
638デフォルトの名無しさん:04/11/13 16:34:53
>>636
複雑な処理でのワークファイルに使いたいのでTTableじゃないとダメなんです。
勘違いしてグローバル一時ファイルで作りまくってしまい、本番前テストしたら
他のユーザーとぶつかってしまい慌てているところです。w

ローカルの寿命:作ったユーザーのセッションが切れるまで。
グローバルの寿命:使っているユーザーのセッションが切れるまで。
TDataBaseを使ってセッションも明確にしているのに
グローバルができてローカルができないのは?です。

639デフォルトの名無しさん:04/11/13 16:35:04
>>637
APIで自分で書いたら?
640デフォルトの名無しさん:04/11/13 16:37:08
641デフォルトの名無しさん:04/11/13 16:47:07
TQueryを使ってファイル名を動的に変更してテーブルを
作りたいんですけど下記の方法ではダメでした。
何故なんでしょう?

Query1.ParamByName('TableName').AsString := 'Table1';
Query1.ExecSQL;・・・・CREATE TABLE :TableName (Field1 varchar(1) null)
642デフォルトの名無しさん:04/11/13 16:50:11
>>639さん>>640さん、ありがとうございます。
さっそくやってみます。
643デフォルトの名無しさん:04/11/13 16:56:44
MainMenuの(&T)とかを表示しないようにするにはどうしたら良いですか?
キャプションに(&T)とつけなくても実行すると勝手についてしまうので・・・
644デフォルトの名無しさん:04/11/13 17:08:13
>>643
「メニュー&」って書いたら消えた
645デフォルトの名無しさん:04/11/13 17:14:45
AutoHotKeysをFalseにしろ
646644:04/11/13 17:18:11


適当なこと言ってごめんなさい
647デフォルトの名無しさん:04/11/13 17:20:07
>>644
それだと「_」だけ残りました

>>645
AutoHotKeysのプロパティはmaParent,maManual,maAutomaticでどれを選んでも変化ありませんでした
648デフォルトの名無しさん:04/11/13 17:23:49
>>647
そんなはずはない.
大元の TMenu.AutoHotKeys を maManual に設定すれば勝手にホットキーが付加されることはない.
649デフォルトの名無しさん:04/11/13 17:26:08
>>648
あ、大元をmaManualにしていませんでした
できました、ありがとうございました
650デフォルトの名無しさん:04/11/13 18:19:25
>>638
ログを採取するかSQLモニタで投げられるSQLを監視してみたら。

>>641
テーブル名はリテラルじゃないからねえ・・・素直にクライアント側でSQLを編集すれ。
651初心者:04/11/13 18:40:08
あの質問なんですけど、テキストファイルの拡張子がdatとなっているのですが、
変なプログラムに関連付けてしまって、テキストが見れなくなってしまいました。
もとのテキストを見るには、どのプログラムから開けばいいですか?
652デフォルトの名無しさん:04/11/13 18:44:54
notepad
653初心者:04/11/13 18:50:09
ありがとうございまつ。
654デフォルトの名無しさん:04/11/13 21:31:07
Delphiっていうより、Windows の初心者だな。
655デフォルトの名無しさん:04/11/13 22:23:51
Delphi6Personalでいわゆる「XPスタイルのボタン」を使うにはどうすればいいですか?
それとも無理?
656デフォルトの名無しさん:04/11/13 22:27:11
657655:04/11/13 22:32:55
>>656
マニフェストファイルを自動生成するソフトを使って
なんとか目的は達成できました。
ちょっと自分のイメージと違ったけど
658デフォルトの名無しさん:04/11/13 22:51:19
ファイルの指定した場所から指定された終わりの場所までの内容をbit反転したいのですが、
どのようにしたらいいのでしょうか?
659デフォルトの名無しさん:04/11/13 23:06:00
>>658
ファイルをメモリに読み込んで反転したい場所をNOTしてまたファイルに書き込む。
660デフォルトの名無しさん:04/11/13 23:11:31
assignfile, reset, seel, read, write
Win32APIのメモリマップファイル使っても簡単。
661デフォルトの名無しさん:04/11/13 23:28:52
>>659
notじゃなく、$ffffとのxorだろ
662デフォルトの名無しさん:04/11/14 01:34:52
not でOK。
663デフォルトの名無しさん:04/11/14 01:53:54
そうか?
少なくともnotじゃないと思うぞ
664デフォルトの名無しさん:04/11/14 02:08:07
とりあえずつくってみてれば?
665デフォルトの名無しさん:04/11/14 02:16:09
xor は別のビットパターンとの演算だからnotでいいよ。

00110101
↓not↑
11001010

01110011
xor ↑
10111001
↓ xor
11001010

666デフォルトの名無しさん:04/11/14 02:20:33
ていうかどっからxorが出てくるんだ?
667デフォルトの名無しさん:04/11/14 02:29:08
恐らく勘違いだろ。
A := B xor $FFFF;

A := not B;
も結果的には一緒だが。
668デフォルトの名無しさん:04/11/14 02:56:11
たのむからデルファイ以前にビット演算ぐらいまともにしてくれ
669デフォルトの名無しさん:04/11/14 03:15:06
面倒なことやってないで言いたい事があるならはっきり言いなさい。
670デフォルトの名無しさん:04/11/14 03:19:36
>>661
わざわざひねくれるのはなぜ?
普通に反転ならnotだろ
671デフォルトの名無しさん:04/11/14 10:01:54
delは型でビット演算用のnotと論理演算用のnotを使い分けます。
672デフォルトの名無しさん:04/11/14 12:26:40
で?
673デフォルトの名無しさん:04/11/14 12:54:17
サンプルプログラムをUPしてみようか?
674デフォルトの名無しさん:04/11/14 13:25:07
まぁ勝手にがんばっておくれ
675デフォルトの名無しさん:04/11/14 13:39:16
レベル低すぎ
プログラム以前
676デフォルトの名無しさん:04/11/14 15:10:58
658もこれ以上なにも無いようだからこの話題はこれにて終了。
677デフォルトの名無しさん:04/11/14 16:58:35
質問よろしいかしら。
TMedeaPlayerを扱うような感じで、Flashを組み込みたいと思っているのですが、
できるのでしょうか。できるとしたら、どのようにすればよろしいのでしょうか。
678デフォルトの名無しさん:04/11/14 17:17:05
アクチヴXコントロールの取り込み
679デフォルトの名無しさん:04/11/14 17:20:12
>>677
変な口調。(w
それはさておき、TShockwaveFlashをタイプライブラリ取り込みする。
680デフォルトの名無しさん:04/11/14 17:32:13
100個くらいあるテキストファイルの各一行目だけを取得するには、
どうするのが効率的な処理なのでしょうか?
現在はとりあえずStringListでファイルを読み込み、
Strings[0]で読み込んでいますが、非常に非効率的な気がします
681デフォルトの名無しさん:04/11/14 18:32:16
AssignFile, Reset, Readln
682デフォルトの名無しさん:04/11/14 19:59:33
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
683デフォルトの名無しさん:04/11/14 22:18:09
>>681
ありがとうございます
それでやってみます
684デフォルトの名無しさん:04/11/15 13:03:38
>>622
遅レス申し訳ありません。
ShDocVwだとだめなんですね。
ActiveXのインストールでShDocVw_TLBを作ってusesを変えたら
CTRL+SPACEで選べるようになりました。
ヒントをいただき大変助かりました。ありがとうございました。
685デフォルトの名無しさん:04/11/15 18:17:27
ファイル読み込みはread
書き込みはwrite
686デフォルトの名無しさん:04/11/16 15:25:57
ファイルもフォルダも選択できるダイアログってありますか?
687デフォルトの名無しさん:04/11/16 15:27:31
あ、同時にではなく、例えばフォルダを選択すればフォルダ、ファイルを選択すればファイル、という動作とか。
688デフォルトの名無しさん:04/11/16 15:30:27
>>687
OpenDialogでFileNameを'(フォルダの選択)'にしといて
ExtractFilePathでパス(フォルダ名)を取得とかやったことはある。
ファイル選びたければ選べるし。
689デフォルトの名無しさん:04/11/16 15:42:55
>>688さん早速にありがとうございます。
なるほど!それは思いつきませんでした。やってみます。
690デフォルトの名無しさん:04/11/16 15:45:47
IBDataSetの使い方を教えてほしいのですが、
取得したレコードの項目を更新したいのです。

IBDataSetのプロパティに
SelectSQL には SELECT文
ModifySQL には UPDATE文 設定していた場合、
このUPDATE文を実行する方法はどのようにしたらいいのでしょうか?

環境はFirebird1.5 Delphi7です。
691デフォルトの名無しさん:04/11/16 16:49:50
>>690
よーわからんが、
CasheUpdatesをTrueにして
OnAfterPostイベントで
ApplyUpdatesして、トランザクションのCommitRetainingを実行汁。
692690:04/11/16 17:31:19
>>691 さん、ありがとうございます。
CasheUpdatesをTrueにしていませんでした。
693デフォルトの名無しさん:04/11/16 18:23:08
>>686
[Delphi-ML:76040] フォルダもファイルも選べるダイアログ
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=076040
694デフォルトの名無しさん:04/11/16 19:35:18
へ〜っ。すげぇ
確かに「ショートカットの作成」の「参照」ってファイルもフォルダも選べるな。
想像もしてみなかった。
695デフォルトの名無しさん:04/11/16 21:45:59
>>693さんありがとうございます。
おおー、これも面白いですね。
696デフォルトの名無しさん:04/11/16 23:47:31
おもしろいつーか、ピンポイント的にファイル選ぶときは、TOpenDialog より便利かも
697デフォルトの名無しさん:04/11/17 00:06:42
C++オンリー(と少しだけJava)でしたが、Delphi始めてみようと思ってます。
Delphiの欠点って何ですか?
698デフォルトの名無しさん:04/11/17 00:11:29
スルーよろ。
699デフォルトの名無しさん:04/11/17 00:12:46
欠点を認めない信者
700デフォルトの名無しさん:04/11/17 00:13:20
ここの人間
701デフォルトの名無しさん:04/11/17 00:14:30
その欠点ってのは具体的になに?
702デフォルトの名無しさん:04/11/17 00:15:35
>>697
そのネタは荒れやすいので釣りじゃないならこっちで聞きなよ。
質問が漠然としすぎだから、やりたいことがあるならそこらへんも詳しく書いてさ。
ミ,,゚Д゚彡フサギコのフサフサDelphi談話室その17
http://pc5.2ch.net/test/read.cgi/tech/1099706362/
703デフォルトの名無しさん:04/11/17 00:15:42
Delphiの欠点って何ですか?
704デフォルトの名無しさん:04/11/17 00:17:17
しょぼい最適化
705デフォルトの名無しさん:04/11/17 00:19:40
変な言語。
706デフォルトの名無しさん:04/11/17 00:23:35
chromeみたいに変数宣言できればいいのに
707デフォルトの名無しさん:04/11/17 00:26:02
将来性
708デフォルトの名無しさん:04/11/17 00:59:05
厨が多い事
709デフォルトの名無しさん:04/11/17 01:07:59
定期的に煽られること
710デフォルトの名無しさん:04/11/17 01:47:23
信者がくさいこと
711デフォルトの名無しさん:04/11/17 02:22:05
すいません、質問です。
あるコントロール(例えばパネル)にマウスポインタが入ってきた、
もしくは出て行った事を感知するにはどうすれば良いのでしょうか。
712デフォルトの名無しさん:04/11/17 02:26:37
CM_MOUSEENTER
713デフォルトの名無しさん:04/11/17 02:27:23
出ていったもあったか。
CM_MOUSELEAVE
714デフォルトの名無しさん:04/11/17 02:42:07
>>712,713
速レスありがとうございます。
ぐぐって調べつついろいろ試したいと思います。

というか、質問する前に検索するの忘れてました。すみません。
715デフォルトの名無しさん:04/11/17 14:50:31
オブジェクトインスペクタのコンポはパーソにはないんですか?
716デフォルトの名無しさん:04/11/17 14:52:40
全バージョンにありません
717デフォルトの名無しさん:04/11/17 15:01:04
DelphiはDelphiじゃ作れないんですか?
718デフォルトの名無しさん:04/11/17 15:12:07
Delphiの中の人はDelphiです
719デフォルトの名無しさん:04/11/17 15:13:34
>>717
BorlandのDelphiはDelphi自身でできています
720デフォルトの名無しさん:04/11/17 15:33:48
BorlandのDelphi2005の一部はMSのC#コンパイラをつかってつくられています
721デフォルトの名無しさん:04/11/17 15:35:30
つくれるかどうかと、標準のコンポでついてくるかどうか、は関係ない
722デフォルトの名無しさん:04/11/17 15:38:45
.NETアプリはすべてMSのJITコンパイラでコンパイルされる
723デフォルトの名無しさん:04/11/17 15:50:14
C# コード → MSIL へ変換する csc.exe はコンパイラではないと?
724デフォルトの名無しさん:04/11/17 15:53:35
そういった高度な議論はフサスレで
725デフォルトの名無しさん:04/11/17 17:35:16
DelphiはDelphiで作られてるってよく聞くけど・・・
最初のDelphiは何で作られたの?
726デフォルトの名無しさん:04/11/17 17:36:23
初心者激減
727デフォルトの名無しさん:04/11/17 17:47:59
Delphiは信者の愛でできてます。
728デフォルトの名無しさん:04/11/17 18:33:53
Delphiなど存在しない!
729デフォルトの名無しさん:04/11/17 19:46:57
半分はやさしさで出来てるらしいぞ。
730デフォルトの名無しさん:04/11/17 22:05:06
タスクバー上のタスクウィンドウ?を右クリックしたときに出るメニューを変えたい・編集したいときは
なにをいじればよいのでしょうか?
731デフォルトの名無しさん:04/11/17 22:31:39
>>725
IDEがDelphi製、dcc32はDelとは別の言語らしい。
732デフォルトの名無しさん:04/11/17 23:50:10
>>730
「Delphi システムメニュー」でぐぐれ
733デフォルトの名無しさん:04/11/18 02:17:32
TFileStreamの使い方で質問します

type
TRec = record
tree:TTreeNodes;
files: string;
end;

var
fst:TFileStream;
rec:Trec;
この前提の元

Rec.tree := TreeView1.Items;
Rec.files := 'aaaaaa';

fst := TFileStream.Create(ExtractFileDir( Application.ExeName ) +'\aa.txt', fmCreate);
fst.Write(Rec,sizeof(Rec));
fst.Free;

と実行したのですが出力されたファイルはたった8バイトのサイズでした
どこが悪いのでしょうか?
734デフォルトの名無しさん:04/11/18 02:28:10
>733
そりゃ、TTreeNodesもstringもポインタ保持だからだろう。

参照型変数と値型変数で調べてみな。
他の言語のリファレンスが多いと思うが、それでも勉強になるだろう。
735デフォルトの名無しさん:04/11/18 02:36:38
ちょっとかみ砕いてやると、
用は、おまいさんのしたいことをするためには、
値型変数じゃなきゃいけないんよ。バッファは。

だから、stringはchar配列に、TTreeNodesは各メンバーをintegerとかchar配列にして
Filestreameで書き込んでみな
736デフォルトの名無しさん:04/11/18 02:47:22
>type
>TRec = record
>tree:TTreeNodes;
>files: string;
>end;
こういった複合型のデータをファイルに読み書きするには
recordではなくclass(TComponent)にして
TStream.Read/WriteCompoenentすればいいんだけど
ちょっと難しいかも。まあ調べてみなよ。
737デフォルトの名無しさん:04/11/18 11:45:22
お尋ねします。イメージコンポーネントにピクセル単位で色を付けたいのですがうまくいきません。
TThreadを利用して次の方法で描画を試みているのですがどこか間違っているでしょうか。

Form1.Image1.Canvas.Pixels[x, y] := $00000000; //右辺は任意のCardinal値。

738デフォルトの名無しさん:04/11/18 12:00:28
>>737
Canvas プロパティは,Picture プロパティが TBitmap オブジェクトを表しているときのみ有効です。
Picture プロパティが TBitmap以外のほかのグラフィックイメージを表しているときに
Canvas プロパティを読み出そうとすると,TImage は EInvalidOperation 例外を生成します。
739デフォルトの名無しさん:04/11/18 12:37:52
>>738
ありがとうございます。TBitmap.Createを試みます。
740デフォルトの名無しさん:04/11/18 13:46:12
巨大なビットマップをBeginDoc/EndDocで連続印刷してると、
印刷されなくなってしまい、PCを再起動しないと回復しなくなります。

こんな症状はどうやって回避すれば良いでしょうか?
741740:04/11/18 14:01:39
http://www.asahi-net.or.jp/~HA3T-NKMR/tips004.htm
ビットマップがプリンタに印刷できないを参考にしてたんですが、
よく読むと、
>この問題は以下のコードのように ビットマップを
>Device Independent Bitmap に変換し StretchDIBits API で印刷すれば、
>かなり成功率を高めることができます。
>但しこれは完璧では有りません。
>いぜんとして印刷に失敗することがあります。
となってる...
742デフォルトの名無しさん:04/11/18 14:08:55
Delphi 2005とVB 2005でどっちが優秀なんですか?
743デフォルトの名無しさん:04/11/18 14:15:04
どなたかDelphiに詳しくて下らない質問に一丁答えてあげようか
って人お願いすます。

Delphi2005でC#を使ってMDIアプリケーションを作れるでしょうか?
それと、DBCtrlGridはC#で使えるでしょうか?
それが出来ればDBのフロントエンドに使おうとおもってます。
744デフォルトの名無しさん:04/11/18 14:29:42
>>743
くだらなくないのでお答えできません。
745デフォルトの名無しさん:04/11/18 14:45:01
>>744
そうですか。ボーランドのHPを見ても詳しいことが分かりません。
といって会員登録してまで資料を見るのもなんだし...。
困ったな...。
746デフォルトの名無しさん:04/11/18 14:54:13
OnIdleすげーなwwwwwwwwwww
5000fpsキターちっこい円の描画だけどwwwwwwwwww
CPU死ぬけどwwwwwwww
747デフォルトの名無しさん:04/11/18 15:16:28
sleep使うとCPUしなねぇええwwwwwwwwwwwww
748デフォルトの名無しさん:04/11/18 15:51:43
>743
Delphi2005のC#でできることは、VC#でも殆ど出来ることなんだから、
既存のVC#文献や.NET Framework SDKのドキュメントを読め。
749デフォルトの名無しさん:04/11/18 16:17:29
既存のC#と既存のDelphiをまとめて起動するが、
同時にはどれか一つしか使えないのがDelphi2005なわけで、
当然C#からDelphi機能は使えないし、DelphiからもC#機能は使えない。
VSと一緒だね。
750デフォルトの名無しさん:04/11/18 16:57:47
質問させて下さい
サイズ変更可能なタイトルバーなしのフォームを作りたく思い、
検索してサンプルなども見つかって動作するのですが、不満な点があります。

探したところCreateParamsをoverrideしてWS_THICKFRAMEを指定してあげる方法しか
見つからなかったのですが、これだと当然ながらフォームの縁に太い線が出来てしまいます。
出来れば縁がないものを作りたいのですが、良い方法がありますでしょうか?
※BorderStyleでbsNoneにしたときのような外観にしたいのです。
751デフォルトの名無しさん:04/11/18 17:13:39
>>748>>749
有難うございます。
どうも私はDelphiでコーディングする時にObjectPascalの
代りにC#が使えると勘違いしてました。
単にC#BuilderとDelphiの機能が合体しただけなんですね。
お騒がせして済みませんでした。
752デフォルトの名無しさん:04/11/18 18:12:53
753デフォルトの名無しさん:04/11/18 18:30:30
>>740-741 もヨロ

TBigBitmapで何が良くなりますか?
754デフォルトの名無しさん:04/11/18 18:33:45
Printer.PageWidth
とは、紙全体でつか?
マージンを除いた範囲で塚?
755デフォルトの名無しさん:04/11/18 18:46:13
>>754
印刷可能領域の幅。
てか試せばわかるだろうに・・・
756デフォルトの名無しさん:04/11/18 18:48:34
>>753
特定のOS固有の問題なのか特定のマシン固有の問題なのか
Delphiアプリの問題なのかの切り分けはできてるのか?
757デフォルトの名無しさん:04/11/18 18:53:04
サンクス>>755
いや、紙全体と思ってプログラム作ったら、印刷可能領域の幅のように印刷されたんです。

で、そう理解してプログラムして、あるプリンタだとマージンが0になったりしたらアウトだし、
念のため確認させて貰わないと怖かったんで津。
758デフォルトの名無しさん:04/11/18 19:11:11
>>757
GetDeviceCaps使えよ。
759デフォルトの名無しさん:04/11/18 19:45:06
TDataSetにデータベースから取得したデータをいれてるんですが、
これを他のTDataSetの変数にコピーするって可能ですか?
たとえば、TStringList.Assign()のように。

デストラクタとコンストラクタの関係で、データの中身だけをコピー
したいのですが、そういう関数ってあるのでしょうか?
760デフォルトの名無しさん:04/11/18 19:58:18
>>757
TNkPrinter使え
761デフォルトの名無しさん:04/11/18 20:23:18
Delphier と VBer(+.NETによるOO能力) ってどちらが優秀なんですか?
762デフォルトの名無しさん:04/11/18 20:39:09
とりあえずDelphier代表として中村タンを推してみようか
763デフォルトの名無しさん:04/11/18 21:52:30
webアプリケーションデバッガでCGIのテストをすると、
ブラウザに「404ファイル未検出」って出ます。
環境はXP SP2です。
2000 sp4だとデバッグ出来ます。
おおざっぱな質問で申し訳ないですが、どなたかヒント下さい。
webアプリケーションデバッガ自体の設定は何も変えていません。
よろしくお願いします。

764デフォルトの名無しさん:04/11/18 23:05:30
>>763
404ファイル未検出
765デフォルトの名無しさん:04/11/18 23:07:03
> 環境はXP SP2です。

......
766デフォルトの名無しさん:04/11/18 23:28:24
ドラッグして並べ替え出来るメニューって実現出来ませんか?
767デフォルトの名無しさん:04/11/19 00:43:38
出来る。 がんばれ。
768デフォルトの名無しさん:04/11/19 00:45:31
描画のちらつきおさえるのってDoubleBuffered以外にどんなのがあるの?
769デフォルトの名無しさん:04/11/19 00:53:14
何の描画?
770デフォルトの名無しさん:04/11/19 01:48:03
VSYNC同期。
771デフォルトの名無しさん:04/11/19 01:48:58
VSYNCで垂直同期だから、同期は不要だった。
>>756
>>741のリンク先の中村拓男氏の本によるとWindowsでは
巨大なビットマップの拡大縮小,さらにそれが印刷と絡むとかなり厄介みたいです.
で,それを回避したのがTBigBitmapみたい.
773デフォルトの名無しさん:04/11/19 08:46:02
TBigBitmap使ってる人いまつか?

TBitmapをそれに置き換えたいのでつが、クラス宣言差し替えるだけ?
特殊なプロパティやメソッドを使っていなければ置き換えだけで行けると思います.

・uses節にユニット名を追加 BigBitmap
・変数宣言 FNantokaBitmap: TBitmap → FNantokaBitmap: TBigBitmap
・実体(インスタンス)を生成しているところ.FNantokaBitmap := TBitmap.Create → FNantokaBitmap := TBigBitmap.Create
775デフォルトの名無しさん:04/11/19 10:36:52
>プリンタにビットマップを印刷するには、以下のことを守る必要があります
>DIBの拡大は4倍以下にとどめ、それ以上の拡大が必要な場合は、Scanlineプロパティなどを使ってアプリケーション側で拡大処理を行う。

単純にTBitmap上で拡大して、それをStretchDIBitsすれば無問題なんかな???
776デフォルトの名無しさん:04/11/19 14:31:24
Timerがこわれた・・・10倍!?????
10000で1秒だよorz
777デフォルトの名無しさん:04/11/19 15:13:23
StringにNULL入りバイナリデータを入れる方法教えて下さい。
778デフォルトの名無しさん:04/11/19 15:14:52
SetLength(s, 100);
s[10] := #0;
move(PChar(s), p, 100);
779デフォルトの名無しさん:04/11/19 15:24:35
サンクス>>778

BCBの場合はどうなりまつか?
780デフォルトの名無しさん:04/11/19 17:41:42
>>779
すれ違い
781デフォルトの名無しさん:04/11/19 23:58:56
>>779
めんどくさくなるだけだからやめておけ。
char配列では出来ない理由でもあるのか?
782デフォルトの名無しさん:04/11/20 02:36:01
ファイルがあろうとなかろうと強制的にフォルダを削除する命令はありませんか?
783デフォルトの名無しさん:04/11/20 02:48:01
ない
784デフォルトの名無しさん:04/11/20 03:17:50
ないのか_| ̄|○

中のファイルを削除しようとするといつも削除失敗するわけですが・・・
属性や使用中の問題はないはずなんですが、なんでだ・・・
785デフォルトの名無しさん:04/11/20 03:42:45
786デフォルトの名無しさん:04/11/20 08:36:58
>>785
うまくいきました。ありがとうございました。
787デフォルトの名無しさん:04/11/20 09:48:09
既出かもしれませんが、検索してもでてこなかったので、書きます。
TShellListViewで、 '*.txt'のように拡張子で限定して表示させたのですが、どのプロパティに設定すればいいのでしょうか。
オブジェクトインスペクタを見ても該当のプロパティが見当たりません。
ソースを解析するしかないのでしょうか。

直接の情報でなくても、このサイトに詳しい情報があるということでもかまいませんので、よろしくお願いします。
788デフォルトの名無しさん:04/11/20 14:04:32
意味がわからない
789787:04/11/20 14:58:31
すみません。書き方が不十分でした。
たとえば、ファイルリストボックスだと、MASKというプロパティがあって、その値は、デフォルトで’*.*'になっています。
これを
  FileListBox1.Mask := '*.txt'
と記述すると、拡張子がTXTのファイルだけが表示されます。これをTShellListViewでも行いたいのです。
よろしくお願いします。
790デフォルトの名無しさん:04/11/20 17:32:36
>>787

OnAddFolder イベントで ファイル名により CanAdd 引数を False にする
791デフォルトの名無しさん:04/11/20 17:56:16
SetFocusを実行しても、適応されない時があります。
timer を使ってやると必ず実行されるのですが・・・
792787:04/11/20 19:25:11
>>790
ありがとうございます。早速試してみます。
793デフォルトの名無しさん:04/11/20 21:57:35
>>791
タイマーを使うと確実にできるけど、使わないとできないというなら、
考えられるのは、SetFocusの次のコードで意図せずにフォーカスを
動かしてしまっている場合だけど、具体的なことがわからないので
これ以上は答えられない。
もう少し詳しく書いて。できれば当該個所のコードを書いてもらったほうがいい。
794デフォルトの名無しさん:04/11/20 22:24:01
delphiのエディタって16色しかつかえないの?
795デフォルトの名無しさん:04/11/20 23:01:05
>>794
エディタって統合環境のこと?16色あれば十分だと思うが。8色でもいいくらいだ。
796デフォルトの名無しさん:04/11/20 23:01:26
残念ながら使えないっぽい。
797デフォルトの名無しさん:04/11/20 23:27:33
画面のプロパティでシステムカラー変えれば?背景色だけは変えられたよ。
798デフォルトの名無しさん:04/11/20 23:29:22
できないならできないとはっきりいえばいいのに。
そんなに負けを認めたくないの?
799デフォルトの名無しさん:04/11/20 23:31:07
そんなに勝ちにこだわりたいの?一体何と競ってるの?
800デフォルトの名無しさん:04/11/20 23:40:48
イメージエディタのことじゃね?
801デフォルトの名無しさん:04/11/20 23:49:53
イメージエディタなら256色使えるぞ。
802デフォルトの名無しさん:04/11/20 23:58:23
イメージエディタでもフォームエディタでもなく、コードエディタの話だろ?
[デフォルトを使用]にチェックを入れた項目はWindowsのシステム色と同じになる。
803デフォルトの名無しさん:04/11/21 01:16:34
フォーム本体は表示しつつ、タスクバーには非表示にしたい。
ということは出来ますか?
804デフォルトの名無しさん:04/11/21 02:05:00
Application のウィンドウを消すんじゃなかったかな
805デフォルトの名無しさん:04/11/21 02:37:35
キー入力があったかなかったかだけを取得するには
どうやるのが一番簡単でしょう。大昔のIOポートをずっと見てる
みたいなイメージなのですが。
入力の内容には全く用はなく、他のアプリへの入力も感知したいのですが。
806デフォルトの名無しさん:04/11/21 02:43:52
キーロガー? ぁゃιぃ。



807デフォルトの名無しさん:04/11/21 02:49:14
ちちちちがいます
スクリーンセーバーみたいに長いこと入力がないと
動くようなプログラム書きたいんです。

808デフォルトの名無しさん:04/11/21 02:59:32
じゃあ、いっそのことスクリーンセイバー形式にしてしまったら。
809デフォルトの名無しさん:04/11/21 02:59:51
意外と難しそう。
システムフックか、GetAsyncKeyStateで全キーを頻繁に調べる。
810デフォルトの名無しさん:04/11/21 04:00:40
> スクリーンセーバーみたいに長いこと入力がないと

マウスは動かしても関係ないの?

[Delphi-ML:79020] windows がアイドル状態を検知
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=079020
811デフォルトの名無しさん:04/11/21 04:05:51
あ、そうかそっちでいいんだ。<アイドル状態
812デフォルトの名無しさん:04/11/21 04:21:50
犯罪を幇助するとその人も罪になるからアホな真似だけはしないように。
813デフォルトの名無しさん:04/11/21 07:03:22
>>810
マウスでやってるんですが、それだとキーボードだけでやってる間に起動しちゃうんです。
参考にさせていただきます。

>>812
だから違いますって_| ̄|○

814デフォルトの名無しさん:04/11/21 07:44:47
WM_KEYDOWN というのを使えないでしょうか。
なんだかよくわかってませんが・・・
815デフォルトの名無しさん:04/11/21 10:32:10
つかえないだろ。システムレベルなんだから
816デフォルトの名無しさん:04/11/21 13:01:32
つくったexe起動したら5000kぐらいメモリ使ってるんだけど
いったん最小化してから元のサイズに戻すと半分以下になるよ
なんで?
817デフォルトの名無しさん:04/11/21 13:32:47
そういうもん。気にするな
>>794
レジストリエディタでいじれば…と思ったら,
Delphi 5は0〜15の値で記録してた(´・ω・`).
DWORD値を使って4ビットの値なんか書き込むなよなぁ.
システムの文字色と背景色を使うオプションで何とかするしかないようです.
(Delphi 7は違うらしいのですが持っていないので未確認)

>>814
WM_KEYDOWNを,どうしたいのですか?
やりたいことを具体的に書いた方がレスはつきやすいですよ.
ちなみにDelphiで使えます.
819デフォルトの名無しさん:04/11/21 15:21:21
>>804
ありがとうございます、
Application のウィンドウを消すとは具体的にはどうすればいいですか?
820814:04/11/21 17:26:38
>>818
失礼しました>>814>>813>>805です。
結局ENTERやBSといった良く使うキーを拾ってお茶を濁しました。皆さんサンクスですー
821デフォルトの名無しさん:04/11/21 18:24:02
>>820
意味がわかりません。そんなことで >>805 の内容が実現できるの?
822デフォルトの名無しさん:04/11/21 18:26:32
>>819

ShowWindow(Application.Handle,SW_HIDE);
823デフォルトの名無しさん:04/11/21 19:01:09
なんかもう本当にキーロガー作るのが目的だったんじゃないかと思えてくるな
824デフォルトの名無しさん:04/11/21 22:13:05
TWebBrowserのPaintToメゾットを使いたいんだけど上手くいかないです。
ヘルプ読むとPaintToメゾット使う前にキャンバスをロックしろって書いてあるけど
TWebBrowserにはそんなメゾット無いみたいだし…。
分かる方いませんか?
825デフォルトの名無しさん:04/11/21 23:54:06
(´-`)。o ○ (ツッコミ入れるべきかなぁ… それとも濁点付いてんのが正しいのかなぁ…)
826デフォルトの名無しさん:04/11/21 23:54:40
(´-`)。o ○ (って、見直してみたら「ト」に濁点付いて無いし…)
827デフォルトの名無しさん:04/11/22 00:01:06
>>824
ワロタ
828デフォルトの名無しさん:04/11/22 00:06:55
829デフォルトの名無しさん:04/11/22 00:11:34
広げて済まない。
本当済まない。
が、
>>828
その中に「メゾット」ってタイトルで、ファイル名に「mezotto.html」と
付けてるのが…。
ああああああ。

>>824
早めに訂正してくれ。済まんな。
830デフォルトの名無しさん:04/11/22 00:16:46
method
だから、イタリア語読みとかすると、メゾットになるのだろうか。

そういや
はじめてのObject Pascalプログラミング テクニカルマスターシリーズ
って本で、英単語系のふりがなが、一般的なものとめちゃくちゃかけはなれて
笑ってしまった記憶があるなあ。
831デフォルトの名無しさん:04/11/22 00:19:30
キノコメゾット
832デフォルトの名無しさん:04/11/22 01:42:22
>>830 の本
ChangeFileExt (チェンジファイルエクステンション)、
WriteLn (ライトライン) …てことか?まぁ確かに。
でも俺はあの本で "Width" の読みを知ったよ。10年以上「ワイズ」と読んできたが
「ウィドス」が正しいのな。 ハァ?と思って辞書を引いたら _| ̄|○

更に話がそれるが、プログラミング入門書には Procedure と 引数 の読み方
ぐらいは書く事にしておいても良いと思うんだが。 ぷろせでゅあ〜 マンセー♪
833830:04/11/22 02:21:16
>832
俺が一番笑ったのが、そのプロセデュアーなんだけど。
記憶違いじゃなかったら、確かあの青い本もそう書いてあったよね?

一応 dictionary.goo.ne.jp/search.php?kind=ej&MT=procedure
で確認したが、多分プロシージャが普通だよなあ。
834830:04/11/22 02:23:16
いや、プラシージャかな。自己レスすまん。
ネイティブな人の発音を聞いてみたいやね。
835デフォルトの名無しさん:04/11/22 02:34:02
ニッポンジンには「てつづき」でよかんべぇ。

↓次の質問か、>>824の続きか
836デフォルトの名無しさん:04/11/22 02:40:39
プロシージャ の検索結果のうち 日本語のページ 約 90,900 件中 1 - 100 件目 (0.39 秒)


プラシージャに該当するページが見つかりませんでした。
"プラシージャ"を含むページは見つかりませんでした。
837デフォルトの名無しさん:04/11/22 02:45:31
プロセデュアー の検索結果のうち 日本語のページ 約 5 件中 1 - 4 件目 (0.29 秒)
てつづき の検索結果のうち 日本語のページ 約 3,580 件中 1 - 30 件目 (0.35 秒)
838デフォルトの名無しさん:04/11/22 06:42:19
Procedureは、たぶん「プラージャー」が英語の発音に一番近そう。
「プロセデュア」というのは、経営学の方面でよく使われる読み方。
世間一般には、プロセデュアのほうがとおりがよさそう。
839デフォルトの名無しさん:04/11/22 07:27:17
ちょうどいいから聞くけどinheritedてなんて読めばいいの?
インハリテッドって読んでるけどちょっと違う気がする
840デフォルトの名無しさん:04/11/22 07:36:49
インハーライテッド。
841デフォルトの名無しさん:04/11/22 09:20:17
>>831
それはリゾット
842デフォルトの名無しさん:04/11/22 10:07:28
843824:04/11/22 10:54:26
うわ!ずっとメゾットだと思ってました。
メソッドでしたか…。道理でATOKが一発で変換してくれないわけだ…。
失礼しました。
844デフォルトの名無しさん:04/11/22 12:50:00
>>839
インヘリテッド
Heritec -> ヘリテック
845デフォルトの名無しさん:04/11/22 12:50:27
辞書引けよ。
846デフォルトの名無しさん:04/11/22 14:01:39
RichEditで折り返し文字数を設定できますか?
どこかの掲示板にSendMessageで出来ると書いてあったので調べたんですが、
全くわかりませんでした。漏れの目が節穴なのは承知ですが、どなたかご教示ください。
847デフォルトの名無しさん:04/11/22 15:28:13
incとdecは?
俺はインクリメント、デクリメントと心で読んで打っている。
でもインクリーズ、デクリーズかもしれないので人には言えずにいた。
848デフォルトの名無しさん:04/11/22 15:41:03
radioGroupのItemsの1項目内の文字列を
改行コード等で区切って2行で表示するとかいうことはできますでしょうか?
849デフォルトの名無しさん:04/11/22 16:28:08
>>848

procedure TForm1.Button1Click(Sender: TObject);
var
  hRadio:HWND;
  ctrl:TControl;
  Style:LongInt;
  s:string;
begin
  hRadio := TWinControl(RadioGroup1.Controls[0]).Handle;
  Style := GetWindowLong(hRadio,GWL_STYLE);
  SetWindowLong(hRadio,GWL_STYLE,Style or BS_MULTILINE);
  s := '1111111111'+#13#10+'22222222';
  SetWindowText(hRadio,PChar(s));
end;
850デフォルトの名無しさん:04/11/22 16:29:21
sLineBreak使え
851デフォルトの名無しさん:04/11/22 16:40:02
Kylix 使う予定なし
852デフォルトの名無しさん:04/11/22 16:42:46
>>850
D5以下ではつかえません
853デフォルトの名無しさん:04/11/22 18:49:14
DelphiでJava作れるの?
854デフォルトの名無しさん:04/11/22 18:54:24
そりゃ Windows 上の Java VM ならつくれるだろうさ。可不可だけならね。
855848:04/11/22 19:12:10
どうもです。 
やはりプロパティ上ではなく、コードでなんとかしろということですね。
856デフォルトの名無しさん:04/11/22 20:07:00
procedureとかfunction宣言してなんかキー押したら実現部にコードのテンプレート自動生成されるってホント?
ホンとならやり方教えて♪
857デフォルトの名無しさん:04/11/22 20:11:05
プロ版以上なら右クリック→定義の補完
858750:04/11/22 20:17:28
申し訳ありませんが上級スレの方でも聞かせて頂きます。
859デフォルトの名無しさん:04/11/22 20:59:02
Shift + Ctrl + C
860デフォルトの名無しさん:04/11/22 21:13:31
”超”初心者はDelphiの勉強よりもコンポの勉強をしたがっている。
コンポで出来るか出来ないかが重要で、出来ないことはあきらめる。
コンポで出来ないことはDelphiでは出来ないことになる。
861デフォルトの名無しさん:04/11/22 21:31:43
862デフォルトの名無しさん:04/11/22 22:59:35
>>860

ふーむ、そうだね。背後にある原理とかは興味がないんだね。残念。
863デフォルトの名無しさん:04/11/22 23:12:09
エディットボックスにファイル名を入力させたいのですが・・・。
ファイル名には特定の文字が使用できませんよね。[*]とか[:]とか[?]とか・・。
で、エディットボックスのKeyPressイベントで入力制限をしているのですけど、
コピペされたとき、どんな文字でも入ってしまいます。
もし、コピペする文字に無効な文字が入っていたらコピペ不可!
という処理をしたいのですが、どうすればよいのでしょうか?

864832:04/11/22 23:15:36
>>833 & >>ALL
すまん、俺の書き方がまずかった。>>830の本に『プロセデュアー』と書いてあった
訳ではない(表記は「手続き」、読み仮名はなし)。正しい読みを知るまで *俺は*
「プロセ…」と読んでしまっていたぞ、というだけの話。 <だから読みも欲しい、と。

スレ違いを更に広げてしまい、スマンかった。
865デフォルトの名無しさん:04/11/22 23:24:03
>>863
コピペ処理を自分で書き直せば良い。
TMainMenuをフォームに置いて「貼り付け」メニューを作成。
キーボードショートカットはCtrl+Vに設定。
procedure TForm1.Paste1Click(Sender: TObject)の中で貼り付けされる前のクリップボードの中を検閲。
クリップボードについてはヘルプのTClipboardの項のプロパティとかメソッドとかを色々調べること。
866デフォルトの名無しさん:04/11/22 23:34:52
MaskEditじゃあるまいし、完璧に余計な文字が入るのを防ぐコードを書くより
アクション時に不正な文字がないかチェックした方が早いんとちゃう?
867デフォルトの名無しさん:04/11/22 23:37:51
>>863
こんな。usesは自分で調べて追加してな。

procedure TForm1.Paste1Click(Sender: TObject)
var
  str: String;
begin
  if Clipboard.HasFormat(CF_TEXT) then
    str := Clipboard.AsText
  else
    Exit;

  if AnsiPos(str, '*') > 0 then
    Exit
  else if AnsiPos(str, ':') > then
    Exit
  else if AnsiPos(str, '?') > 0 then
    Exit
  else
    Memo1.SelText := str;
end;
868デフォルトの名無しさん:04/11/22 23:40:14
>>866
同意。実際はWin32APIに頼るのが一番確実。
未来永劫ドライブレター付のFAT/NTFSでアプリが動くとは限らないし。
869デフォルトの名無しさん:04/11/22 23:41:22
OnChangeとかなかったっけ?
870デフォルトの名無しさん:04/11/22 23:41:26
結局コンポのプロパティーではできないと・・・・・・
871デフォルトの名無しさん:04/11/22 23:44:53
コンポのプロパティーではできないことを工夫してできるようにすることがプログラミングの面白さだと思うそ。
872デフォルトの名無しさん:04/11/22 23:50:57
つか、[*]とか[:]とか[?]とかだけ入力不可能なエディットボックスって見たことあるか?
もしあったとしてもかえって使いにくいと思うが
873デフォルトの名無しさん:04/11/22 23:54:08
とかいいながらこの前の「ファイルもフォルダも選択できるダイアログ」に驚いてた奴>872
874デフォルトの名無しさん:04/11/22 23:54:31
>>871
なんが違う気がするぅ〜
875833:04/11/23 00:01:27
>>864

あれ? と思ったので、今日あの本を買ってみた。
(以前読んだときは会社の備品だったので)
……どこにもプロセドゥアーなんて無かった。著者さん、すまんす。
どこでこんな記憶が入り込んだんだろう。

┃━┏┃。oO(……でも、exitはイグザットじゃないと思う)

スレ違いスマソ。
876デフォルトの名無しさん:04/11/23 00:03:09
みなさんありがとうござーます。
確かに、[*]とか[:]とか[?]とかだけ入力不可能なエディットボックスて見たことありません。
けど、winXPでエキスプローラ起動して、新規ファイルを作成して名前を変更しようとして[*]をペーストするとペーストされませんよね。
で、ちょっと作ってみたくなったんです。
>>865さんと
>>867さんの方法で、いろいろさぐってみます。ありがとうございました。
877デフォルトの名無しさん:04/11/23 00:05:16
ありがとうござーます
ありがとうござーます
ありがとうござーます
ありがとうござーます
878872:04/11/23 00:13:36
>winXPでエキスプローラ起動して、新規ファイルを作成して名前を変更しようとして[*]をペーストするとペーストされませんよね。

!・・・OTZ
これからはもう少し謙虚に生きようと思います。
879デフォルトの名無しさん:04/11/23 04:47:08
スズキメソードと言いますから、メソードでしょ。
880デフォルトの名無しさん:04/11/23 04:57:27
エキスプローラなのか
エクスプローラだと思ってた
881デフォルトの名無しさん:04/11/23 05:21:35
マジで悩んでるんだけどFalseってなんて発音するのが正しいの?
882デフォルトの名無しさん:04/11/23 05:28:36
ふぁるす?
883デフォルトの名無しさん:04/11/23 05:31:02
>>881
http://dictionary.goo.ne.jp/search.php?MT=False&kind=ej&mode=0&base=1&row=1
「フォース」って感じかな。
音声聞けるから聞いてみれ。
884デフォルトの名無しさん:04/11/23 05:35:08
>>883
うぉぉぉサンクス。
自分の発音とも職場の発音とも違うぜ〜
885デフォルトの名無しさん:04/11/23 05:44:40
でも現場ではふぁるすといわなければ通じない罠。。。
886デフォルトの名無しさん:04/11/23 06:38:44
うちの職場では ふぉーるす って発音するな。
887デフォルトの名無しさん:04/11/23 06:55:41
>>881
「フォルス」だけど、「ル」は、はっきり聞こえない。
888デフォルトの名無しさん:04/11/23 07:39:02
889デフォルトの名無しさん:04/11/23 10:20:01
そこでバルスですよ
890デフォルトの名無しさん:04/11/23 10:38:09
日本では「ウソ」「ホント」で統一すべき。
891デフォルトの名無しさん:04/11/23 12:34:47
「真」「偽」でええやん。
発音記号風に書くと"tru:", "fo:ls" な。
892デフォルトの名無しさん:04/11/23 12:42:17
情報処理用語の読み方を確認するスレ
http://pc5.2ch.net/test/read.cgi/tech/1056173956/
893デフォルトの名無しさん:04/11/23 14:15:13
のっととぅるぅだろ?
894デフォルトの名無しさん:04/11/23 14:30:31
>>887
>「フォルス」だけど
大丈夫か?
895デフォルトの名無しさん:04/11/23 14:36:13
うわintegerよりrealの方が精度いいんだなw
入力はintegerでも計算するときはrealの変数に代入してから計算したほうがいいの?
896デフォルトの名無しさん:04/11/23 14:38:47
用途次第。スクリーン上の真ん中の座標を算出するのにわざわざRealに変換する奴はいない。
897デフォルトの名無しさん:04/11/23 14:59:49
>>895
そのかわり計算速度が遅いよ。メモリも余計に喰うよ。
898デフォルトの名無しさん:04/11/23 15:35:42
精度がいいというか、表現できる幅が広いわけですよ。
試しに、今のDelphiなら、
自分で$7FFFFFFFに1を足すコードを書くとよくわかる。

integerは、OSやCPUといった環境ごとで、一番速度が速くなるように
使用バイト長が変わるんだけど、(現在のWindows環境だとほぼ4バイト長)
将来それが問題になる可能性もあるところでは、
4バイト長固定のlongintを使った方がいいよ。
899デフォルトの名無しさん:04/11/23 15:42:35
Win64でもsizeof(int)は4
900898:04/11/23 16:08:07
>899
10年後くらいには、integerは8バイト長とかになってるのかなー?
というかDelphi自体が無くなっていませんように。
901デフォルトの名無しさん:04/11/23 18:36:06
うぁぁああおもしれえぇえええ
10億回計算してみたよ
GetTickCountで時間計ってみたよ
単位はミリ秒

初期値
a:=1
       real    integer
a:=a+1   13389   2103

a:=a-1   13259   2143

a:=a*1   15411   2644

a:=a/1   19448   2114
a:=a div 1
902デフォルトの名無しさん:04/11/23 18:49:18
整数が速いのは常識なんだが、お前は何を言いたいんだ?
903デフォルトの名無しさん:04/11/23 19:02:31
>>901
どうせならIntegerとCardinalで比べれば面白いのに。
904デフォルトの名無しさん:04/11/23 19:03:02
realのほうが時間かかるってのをただ数値として出した
ということだろう
何を言いたいとか意味のわからない質問されても困るねぇ
905デフォルトの名無しさん:04/11/23 19:03:50
最近は裏が白いチラシが少なくてのう。
906デフォルトの名無しさん:04/11/23 19:13:53
[Delphi-ML:55751] Re: タブ文字の変換
ttp://130.158.124.192/~takeuchi/delphi/article/055/055751.html

というのをちょっと使わせてもらっているのですが
Result := Result + Copy(S, 1, Index - 1) + ' ';
この部分で
'String' と 'TAction' には互換性がありません
というエラーが出てしまいます

どうしたらよいのでしょうか?
907デフォルトの名無しさん:04/11/23 19:19:12
S はなんの型かな? ハンドラ全体を見ないと誰にもワカラン
908デフォルトの名無しさん:04/11/23 19:26:44
いまなら StringReplace() で一発でできる
909デフォルトの名無しさん:04/11/23 19:30:30
>>907
SはStringです

>>908
ありがとうございます、試してみます
910デフォルトの名無しさん:04/11/23 19:30:36
function TabSpace(S: string; TabSize: Integer): string;
begin
  result := StringReplace(s,#9,StringOfChar(' ',TabSize),[rfReplaceAll]);
end;
911デフォルトの名無しさん:04/11/23 19:32:14
>>910
それだけじゃダメだろ
\tX\tXX\tXXX\tXXXX\t
でそれぞれ展開するサイズが違う。
英語の読みはGooなりエキサイトなどで確認するのがよさそうですね.
>>847
私は単純に「いんく」「でっく」って読んでますが,
動詞ならincrease/decrease,でも名詞ならincrement/decrementかな?
意味的にはどちらでも合っているから大丈夫だと思います.
913デフォルトの名無しさん:04/11/23 21:08:01
あっ、そうか。そうだね。(TabSize の整数倍)+1にそろえるわけね。
ところで過去ログどおりに動作するね。Pos は AnsiPos を使うべきだと思うけど。

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
begin
  s := #9'1'#9'22'#9'333'#9'4444'#9'55555'#9'666666';
  s := TabSpace(s,4);
  Memo1.Lines.Add(s);
end;
914デフォルトの名無しさん:04/11/23 21:24:51
substrが#9だから結果として無問題>Pos
ただ他人に余計な突っ込みと不安を生まないために
AnsiPosにするというのもひとつの見識では歩けど。
915デフォルトの名無しさん:04/11/23 21:33:11
> substrが#9だから結果として無問題>Pos

なるほど。二バイト文字の二バイト目に #9 が来ることはないのね。ありがとう。
916デフォルトの名無しさん:04/11/24 09:43:18
お、面白い。
俺も無駄にタブ展開してみようかな。
917デフォルトの名無しさん:04/11/24 11:57:59
MDBからデータを読んでExcelファイルに書き込むPGを組んでるんですが、
書き込んだセルの文字色を変えるのは可能でしょうか?
918デフォルトの名無しさん:04/11/24 12:08:42
セルのフォントオブジェクトのカラープロパティをいじる
919デフォルトの名無しさん:04/11/24 13:22:27
>>918
XlsApp.Cells.Font.color で合ってますか?
ちなみに設定値はどうなりますでしょうか。
920デフォルトの名無しさん:04/11/24 16:08:41
インデックスでセルを指定する必要があるんじゃないかな。
Cellsでは、レンジオブジェクトが参照できないのでは。
921デフォルトの名無しさん:04/11/24 17:21:10
とりあえず、単一のセルだけでも文字色を変える方法を知りたいです。

PGが冗長って言うか、面倒になっても構わないので……
922デフォルトの名無しさん:04/11/24 21:58:58
アクティブウインドウにkeybd_event()を使って「,」(カンマ)を
送りたいのですが、

keybd_event(44, 0, 0, 0);

とやっても出来ません。
アルファベットやスペースなんかはできるんですが、
どうやってら出来るんでしょうか?
923デフォルトの名無しさん:04/11/25 02:08:43
>>922
「VK_SEPARATOR」では。
924922:04/11/25 07:14:51
>>923
返答ありがとうございます。
それも駄目でした。


今、Excelのセルに入力したX,Y座標の値を読み取って、
CADソフトに自動的に線を書くソフトを作ってます。

ALT(VK_MENU)、ENTER(VK_RETURN)、数値を
CADソフトに送ることは出来ているんですが
唯一カンマを送ることが出来ません…
925デフォルトの名無しさん:04/11/25 07:20:24
CADソフトはカンマを受け取れるようになってるの?
926デフォルトの名無しさん:04/11/25 08:36:25
Delphi6(無料) をダウンロードして使ってみました。
マニュアルが微妙なんですが、製品版はどうなんでしょうか?
927デフォルトの名無しさん:04/11/25 11:08:29
a,b,c,を入力しaX²+bX+cの解を計算。
二次方程式を判別するプログラムおねがいします
928デフォルトの名無しさん:04/11/25 11:12:44
いやです
929デフォルトの名無しさん:04/11/25 11:19:40
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。
930デフォルトの名無しさん:04/11/25 11:44:01
根の公式に代入するだけ。複素数かどうかも判断できる。
プログラミングの要素としてはくだらなすぎ
931デフォルトの名無しさん:04/11/25 11:48:38
=0 が抜けてるから解はない、が正解
932シスシス:04/11/25 12:02:39
文字列のAND検索はどうすればいいの?(VB.NET)
933デフォルトの名無しさん:04/11/25 12:08:18
すれ違い
934922:04/11/25 12:33:30
925

受け付けます。もともとX、Y座標をカンマで区切るので。
試しにメモ帳でやってみても、カンマは送れないです。
とりあえず、他の方法も考えてみます。

一応、環境は
Win2000
Delphi7Pro
935デフォルトの名無しさん:04/11/25 13:06:38
44 は VK_SNAPSHOT だね。コンマのほかにも中括弧とかコロンとかどうやるのかな?
936デフォルトの名無しさん:04/11/25 14:07:05
>>926
クイックスタート、言語ガイド、開発者ガイドのPDFのことなら全く同じ。
937デフォルトの名無しさん:04/11/25 15:33:05
AnsiPosとかで文字列内の最後部にある位置を知りたいんですけど方法ありますか?

abcabcで二つ目(一番後ろ)のaの位置を取得したいっす
AnsiPosだと1しか返ってこないけど、他に関数とか用意されてるんでしょうか?

一応、先頭が見つかるごとに検索開始位置をずらしてやってみたりしたんですけど文字数が多いととてつもなく時間食ってしまいます
938デフォルトの名無しさん:04/11/25 15:37:05
StrRScan
939デフォルトの名無しさん:04/11/25 15:37:33
訂正:AnsiRScan
940デフォルトの名無しさん:04/11/25 15:40:54
>>939
即レスサンクスです
調べてみます
941デフォルトの名無しさん:04/11/25 16:15:06
StringGrid1.Rows[StringGrid1.Row].Delimiter:=#9;
Text:=StringGrid1.Rows[StringGrid1.Row].DelimitedText;

とやると、セルの内容に半角スペースが含まれるときに、そこが
ダブルコーテーションで囲まれちゃうんですが、これをしないように
する方法はありますか?
942デフォルトの名無しさん:04/11/25 16:22:19
>>941
QuoteChar := ''でいけるかも
943デフォルトの名無しさん:04/11/25 16:36:50
>>942
即レスありがとうです。やってみたんですが、
QouteChar:=''だと、StringとCharに互換性がないと言われます。
#0ではエラーが出ました。
944デフォルトの名無しさん:04/11/25 16:43:48
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
i := -1;
if i in [-1, 0] then ShowMessage('');
end;

コンパイルエラーが出るのは何故ですか?
945デフォルトの名無しさん:04/11/25 16:57:27
>>944
集合型は負数の指定は不可。
InRange使え。
946デフォルトの名無しさん:04/11/25 17:34:08
文字をS-JISからEUCに変換したいのですが、
HenkanJ.pasの使い方を教えていただけないでしょうか。

len := Length(Line);
for ch := 1 to len do
begin
moji := SJisToEUC(ord(Line[ch]));
mojis := mojis + chr(moji);
end;

何故かデータが難しい漢字ばかりになってしまいます。
947デフォルトの名無しさん:04/11/25 18:16:01
レイブレポートの使い方を教えてくれる学校とかないですか?
948デフォルトの名無しさん:04/11/25 18:26:37
がっこう・・・
949デフォルトの名無しさん:04/11/25 19:55:39
>>946
二バイト文字の判断をしなくちゃだめでしょ。文字ごとじゃなくて文字列で変換してくれる
HenkanJ2.pas というのを使ったらいい

http://forum.nifty.com/fdelphi/samples/00959.html
950デフォルトの名無しさん:04/11/25 20:55:28
>>949
凄い助かった。ありがとう。
後から二バイトの判断には気づいたんだが、
その後の処理がめちゃくちゃだった。

これで家に帰れる。
951デフォルトの名無しさん:04/11/25 20:58:07
Delphi2005トライアルで作ったソフトは配布してもいいですか?
952デフォルトの名無しさん:04/11/25 20:59:59
Delphi2005トライアルの規約をお読みください
953922:04/11/25 21:10:47
これでカンマを送ることが出来ました。
keybd_event(188, 0, 0, 0);

お騒がせしました。


>>935

コロンは「186」
中括弧は不明です。
954デフォルトの名無しさん:04/11/25 21:41:27
>>953
ありがとう。こっちでも試してみた。virtual-key code が Windows.pas で未定義な 166 から 228 の間で

keybd_event(Code, 0, 0, 0);
keybd_event(Code, 0, KEYEVENTF_KEYUP, 0);

で意味ある「文字」を送れるのは

186 : :
187 : ;
188 : ,
189 : -
190 : .
191 : /
192 : @
219 : [
220 : \
221 : ]
222 : ^
226 : \
228 : 00 (?)

たとえばキーボードを見ると { は shift + [ だから

keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(219, 0, 0, 0);
keybd_event(219, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);

でOK。以下おなじ。
955922:04/11/25 22:13:22
>>954
なるほど。
956デフォルトの名無しさん:04/11/25 22:24:05
WM_CHARでも送っとけ
957デフォルトの名無しさん:04/11/25 23:05:00
keybd_event() のとこを話すと必ず一人は現れるね > WM_CHAR
958デフォルトの名無しさん:04/11/26 00:02:46
>>922
カンマとかのキーコードはキーボードレイアウトによって変わる。
VkKeyScanを使えば、任意の文字に対応する仮想キーコードと修飾キーを調べられるよ。
959デフォルトの名無しさん:04/11/26 02:16:16
>>958

>>922 じゃないけど試してみた。ありがとう。

function GetVirtualKey(ch:Char):string;
var
  ret: word;
  func,code: byte;
begin
  ret := VkKeyScan(ch);
  func := HIBYTE(ret);
  code := LOBYTE(ret);
  if (func = $FF) and (code = $FF) then
  begin
    result := 'not found';
    exit;
  end;
  result := '';
  if (func and $01 <> 0) then result := 'SHIFT + ';
  if (func and $02 <> 0) then result := result + 'CTRL + ';
  if (func and $04 <> 0) then result := result + 'ALT + ';
  result := result + IntToStr(code);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add(GetVirtualKey('a'));
  Memo1.Lines.Add(GetVirtualKey('A'));
  Memo1.Lines.Add(GetVirtualKey(','));
  Memo1.Lines.Add(GetVirtualKey('['));
  Memo1.Lines.Add(GetVirtualKey('{'));
end;
960デフォルトの名無しさん:04/11/26 02:17:30
つづき

結果

65
SHIFT + 65
188
219
SHIFT + 219

うまくいった!
961デフォルトの名無しさん:04/11/26 02:21:23
実際に使うときは文字列じゃなくて、結果をフラグと数値にして

keybd_event()

を SHIFT を押すかどうかなどを判断するようにコードを書けばいいね。
962デフォルトの名無しさん:04/11/26 03:13:31
やってみた

function KeybrdEvent(ch: Char; CtrlCode:Boolean=false):Boolean;
var
  ret: word;
  func,code: byte;
  fShift,fCtrl,fAlt:Boolean;
begin
  result := false;
  if CtrlCode then
  begin
    keybd_event(byte(ch), 0, 0, 0);
    keybd_event(byte(ch), 0, KEYEVENTF_KEYUP, 0);
  end
  else
  begin
    ret := VkKeyScan(ch);
    func := HIBYTE(ret);
    code := LOBYTE(ret);
    if (func = $FF) and (code = $FF) then exit;

    fShift := (func and $01 <> 0);
    fCtrl := (func and $02 <> 0);
    fAlt := (func and $04 <> 0);
963デフォルトの名無しさん:04/11/26 03:15:20
つづき

    if fShift then keybd_event(VK_SHIFT, 0, 0, 0);
    if fCtrl then keybd_event(VK_CONTROL, 0, 0, 0);
    if fAlt then keybd_event(VK_MENU, 0, 0, 0);
    keybd_event(code, 0, 0, 0);
    keybd_event(code, 0, KEYEVENTF_KEYUP, 0);
    if FAlt then keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
    if FCtrl then keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    if FShift then keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
  end;
  result := true;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  KeybrdEvent('D');
  KeybrdEvent('e');
  KeybrdEvent('l');
  KeybrdEvent('p');
  KeybrdEvent('h');
  KeybrdEvent('i');
  KeybrdEvent(Char(VK_RETURN),true);
  KeybrdEvent('@');
  KeybrdEvent('<');
  KeybrdEvent('|');
  KeybrdEvent('8');
  KeybrdEvent('_');
  KeybrdEvent(Char(VK_LEFT),true);
  KeybrdEvent(Char(VK_LEFT),true);
end;
964デフォルトの名無しさん:04/11/26 03:17:00
結果

Delphi
@<|8_

となって、期待通りキャレットが8の前に来る
965デフォルトの名無しさん:04/11/26 03:38:14
D6パソナルで作ったexeを配布したらどうなるとですか?
966デフォルトの名無しさん:04/11/26 03:50:03
対価を得なければいいんじゃないの。フリーソフトなら。
967デフォルトの名無しさん:04/11/26 03:51:14
あわわ、overload を使った方がきれいだね。

function KeybrdEvent(VKey: Byte):Boolean;overload;
begin
  keybd_event(VKey, 0, 0, 0);
  keybd_event(VKey, 0, KEYEVENTF_KEYUP, 0);
end;

function KeybrdEvent(ch: Char):Boolean;overload;
var
  ret: word;
  func,code: byte;
  fShift,fCtrl,fAlt:Boolean;
begin
  result := false;
  ret := VkKeyScan(ch);
     省略
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  KeybrdEvent('D');
  KeybrdEvent('e');
  KeybrdEvent('l');
  KeybrdEvent('p');
  KeybrdEvent('h');
  KeybrdEvent('i');
  KeybrdEvent(VK_RETURN); // 見かけ上同じに書ける
  KeybrdEvent('@');
以下略
968デフォルトの名無しさん:04/11/26 04:40:49
Server/Clientプログラムで、Serverに接続した際にパスワード認証を行いたいのですが、
どのように書けば良いでしょうか。
969デフォルトの名無しさん:04/11/26 15:53:41
下のようなテキストファイルがあるとき、
文字列 name から adress までに含まれる
文章1だけ指定するにはどうしたらいいんでしょうか?


name
 文章1
adress
 文章2
proffile
 文章3
end       
970デフォルトの名無しさん:04/11/26 16:16:13
sl := TStringList.Create;
sl.LoadFromFile('foo.txt');
idx1 := sl.IndexOf('name');
idx2 := sl.IndexOf('address');
for i := idx1+1 to idx2-1 do
 Writeln(sl[i]);
971デフォルトの名無しさん:04/11/26 16:16:45
AnsiPosでnameの位置とadressの位置を見つけて引き算する。
あとはCopyで文章1を抜き出す。
972デフォルトの名無しさん:04/11/26 18:17:58
>>970さん
>>971さん
素早い回答ありがとうございます。
今から試してみたいと思います。
では・・
973デフォルトの名無しさん:04/11/26 19:19:54
>>970-971
素晴らしい連携だな、おい
974デフォルトの名無しさん:04/11/26 19:34:26
このスレでさえレベルの違う自分が嫌になってきたorz

ttp://hp.vector.co.jp/authors/VA015669/
ここのUIDHTMLEdっていうのをインストールしようとしたんですが、
どうもActiveXの初期化(?)の部分でエラーがでます。
未定義の識別子 action.UIEditon みたいな感じのです。
必要なコンポーネントはインストールしたんですけど全く駄目でした。
サポートもHPも死んでるみたいなので、どなたか対処法をご存じの方、
ご教示下さい。

>>973
同一人物では?
975デフォルトの名無しさん:04/11/26 19:52:30
同一人物じゃないだろ。970は文字列単位で、971は文字単位で抜き出す方法。
前者が正解に近い
976デフォルトの名無しさん:04/11/26 20:02:38
>>974
1週間前に更新してるから生きてるんじゃないの?
ttp://www33.ocn.ne.jp/~takoyakusi/index.html
977デフォルトの名無しさん:04/11/26 21:36:43
簡単なシミュレーションを作りたいと思っています。
それにあたって、
プログラム内で、○日目○時○分という形で、
独自の時間を動かしたいのです。
現実の1秒=プログラム内の1秒ではなく、
速度を早めたりできるようにしたい。

今の知識で思いついたのは、
day,time,minuteという3つの変数をIntegerで定義して、
Timerコンポーネントの中に、
time=23 minute=59 なら time=0 minute=0 day+1
time=23 でなく minute=59 なら minute=0 time+1
それ以外なら minute+1
というような内容を書き込んで
時間を経過させていくというものです。
Timer.intervalによって速度も変えられますよね。

ただどうも原始的というかスマートではないですよね。
他にこういう時の定石みたいなものがあるのではと思ったんですが、
何かないでしょうか。
978デフォルトの名無しさん:04/11/26 21:52:24
>>977
TDateTime型とIncSecond関数とかどうよ?
979デフォルトの名無しさん:04/11/26 22:15:18
PAnsicharの変数をstringに変更するにはどうしたらいいですか?
980デフォルトの名無しさん:04/11/26 22:25:40
>>978
難しそうで諦めたんですが
もう一度見てみます。
981デフォルトの名無しさん:04/11/26 22:28:42
>>979
PAnsiCharが指す文字をString型に代入するという意味なら

a: PAnsiChar;
b: String;

b := a^;
982デフォルトの名無しさん:04/11/26 22:58:31
>>980
独自の時間を秒単位で持つ変数をtとすると
second := t mod 60;
minute := t div 60 mod 60;
hour := t div 3600 mod 24;
day := t div 86400;
983デフォルトの名無しさん:04/11/27 01:02:30
>>981
ありがとうございます
984デフォルトの名無しさん:04/11/27 01:43:46
TMyRec = record
  aa : string[10];
  bb : Integer;
  cc : Boolean;
end;

こんな型で宣言時に値をつめたいと思っているのですが、
どうもうまくいきません。よろしくお願いいたします。

var
 MyRec : array [0..0] of TMyRec =
     ( (aa:'テスト'),(bb:0),(cc:True) );

こんな風にすると、要素数が異なるって怒られます
985高野聖:04/11/27 01:51:40
  MyRec : array [0..0] of TMyRec =
   ((aa:'テスト';bb:0;cc:True));
986裏高野:04/11/27 01:53:39
>>985
高野聖がこんな所で何をしておる!
987デフォルトの名無しさん:04/11/27 01:59:52
>>985
できた!ありがとう
98820用テンプレ:04/11/27 03:05:34
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが、
お礼はDelphiの布教と初心者の救済をお願いします。

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

<その他>
ボーランド
http://www.borland.co.jp/
DelWiki
http://onigiri.s3.xrea.com:8080/delphi/
98920用テンプレ:04/11/27 03:06:37
990デフォルトの名無しさん:04/11/27 13:43:33
くだすれDelphi(超初心者用)その20
http://pc5.2ch.net/test/read.cgi/tech/1101530485/
991デフォルトの名無しさん:04/11/27 15:09:11
あれ?
同じ引数を取る、別の型を返す同じ名前のfunctionって作れなかったっけ?

オーバーロードしようとしたら怒られたんだけど

function GetInput(const Prompt: string): string; overload;
function GetInput(const Prompt: string): integer; overload;
992デフォルトの名無しさん
無理だよ。

SetInput(GetInput('xxx'));

でSetInputがoverloadされてたらあいまいさを解決できないから。