676 :
デフォルトの名無しさん :
2006/05/12(金) 06:46:30 Delphi 7で作ったGUIのプログラムってVistaで動きますかね?
ベータで試してみた限りだと6, 7, 2006はフォーム一枚のプログラムすら起動しなかったよ。 VB6.0やVB.NETは普通に動くのにこの現象はとても不思議。 Borlandが互換性向上に対する技術協力を拒んでいるのかな。
そうそう、gccやBASIC/98やCOBOL.NETすら動かなかった。他社製品軒並み全滅。 逆にMSの開発言語だと16ビット版のVB2.0すら動く。 なんなんだろうな。
>>632 FillChar(test,SizeOf(test),0);
あ、寝ぼけてたw
>>679 はあぼーんしといてねと
DelphiはVistaでは動かないのか・・・ VB2005やっているからVistaはそっちでやろうかな。
Vistaが出たら2006を投げ捨てて2007買いかえればいいということですね。
DelアプリがXPで不安定だって書き続けてたブビ厨が板。 ウソを書き始めると歯止めが利かなくなると思うだけど。 つまり半在予備軍。
686 :
682 :2006/05/12(金) 09:45:48
Vistaはネイティブじゃなくて.netが主体になってくるから 遅かれ早かれWin32アプリは動かなくなるだろね DelphiだろうとVCだろうがそれは変わらない MSの口車に乗るのは悔しいけど
つ Delphiドトネト
>>689 なんとかExpertとかいう外部ツールをつかわないとエディタのフリーカーソルは
変更できないよ
693 :
692 :2006/05/12(金) 10:17:28
かぶった orz
みんな教えてくれてありがとうだっぺ。 これで安心して裏の畑で糞にいけるっぺ。
も、もしかして14時間も我慢してたのか?
>>687 ∩___∩ /
| ノ ヽ /
/ > < |/ そんな餌パクッ
| //// ( _●_)/ミ
彡、 l⌒l ノ
/ __ \ \ヽ
. (___) \__)
. O| /
| /\ \
| / ) )
∪ ( \
\,,_)
基本的なことを教えて欲しいんだけど uses hogehoge; A private B public C end D とあるけど、それぞれには何を書くの? Bが内部用、Cが外部からも見えるってのは今まで理解してたんだが、AとDの区別がよく分からんもので。
ヘルプ持ってないの?
>>698 ヘルプで検索しても禿しく意味不明なのばかりヒットするもんで。
A はpublishedだよ。IDE が自動的に永続化してくれる部分。イベントハンドラが 自動で書き込まれる。ユーザがここを使う必要はまずない。 D 単なる関数とか定数宣言やグローバル変数の定義場所。 ヘルプに詳しく書いてあるけど
> ヘルプで検索しても 検索じゃなくて目次からの方が速い。ユニットファイルの構造とか、可視性とか
PCの時間を0.01秒単位で修正する方法って無いですか? 出来るだけ正確にあわせたいのですが、Windows標準のタイムサーバーとこまめに同期しても 動機直後に0.5秒ぐらいずれてることがあるので。
>>702 サーバをmfeed辺りに変えれば良いという話ではないのか?
「特定のアドレスの特定のポートに発信するプログラム」 を特定するプログラムを作りたいのですが、 どのような方法があるでしょうか?
ファイヤーウォールとかパケットモニターを参考にしる
imageコンポーネントに表示させてる画像を左右反転させたり上下逆にしたりできるでしょうか?
できます。
どのようにすればいいのでしょうか?
ScanLineプロパティを使って画像処理すればok
無限ループ突入↓
どのようにすればいいのでしょうか?
procedure TForm1.Button1Click(Sender: TObject); var i,j:integer; begin for i:=0 to j do begin j := i+1; showmessage('m9(^Д^)プギャー'); end; end;
スペースで区切られた文字列を分解したいのですが Posでスペースを探して、自分で区切る以外に なにか方法はありますか?
DelimitedText で出来そうだが
721 :
719 :2006/05/13(土) 12:09:18
ありがとうございます。 > DelimitedText で出来そうだが StringList のことでしょうか? SList := TStringList.Create; SList.Add(Text); SList.Delimiter := ' '; としても SList.Count は1のままです。
>>719 p:=PChar(s);
while p^ <>#0 do begin
while p^ = ' ' do inc(p);
SetLength(w,length(s));
n:=1;
while p^ <> ' ' do begin
w[n]:=p^;
inc(p);
inc(n);
end;
SetLength(w,n);
wを使う
end;
723 :
719 :2006/05/13(土) 12:35:28
ありがとうございます。
>>722 Pos より速そうですね。
ふつうにDelimitedTextでできるでしょ
725 :
722 :2006/05/13(土) 13:06:50
よほど巨大な行を読み込む可能性がなければ 速度的な効果はないよ。 ただ、状態遷移型も慣れておいた方がいいとも思う。 そんなに長くないから、テンプレート的に使うクセを付ければいい それと、 SetLength(w,n); は間違い SetLength(w,n-1); だな
ふつうにDelimitedTextでできるでしょ
ちょっとしたユーティリティ関数。速くはないけど。 s := 'Foo Bar Baz'; repeat t := Strip(s, ' '); ShowMessage(t); until s <> ''; function Strip(var s: String; Delimiter: String): String; var idx: Integer; begin idx := AnsiPos(Delimiter, s); if idx = 0 then begin Result := s; s := ''; end else begin Result := Copy(s, 1, idx-1); s := Copy(s, idx+1); end; end;
ダウンロードした画像からアイコンを作って タスクトレイにアイコンを表示しているのですが 元の画像が横長なので、つぶれてしまいます。 この画像の両端は無地なので 切り落とせば多少ましになると思うのですが、どうしたら良いでしょう。
StringReplaceだとすげぇ楽だけど遅いの?
Stringと便利関数使って切り貼りすると大概遅い。 遅いなと思ったらPCharとC言語系の文字列処理関数の出番。
731 :
719 :2006/05/13(土) 14:34:42
勉強になりました。 皆さん、ありがとうございました。
>>728 無地の判定をしなくていいなら
元となる画像から適当な範囲をコピーして
アイコンを作ればよい。
with NewBmp do
begin
Width := 24;
Height := 24;
for y := 0 to 23 do
for x := 0 to 23 do
Canvas.Pixels[x,y] := MotoBmp.Canvas.Pixels[x + 10, y + 5];
end;
>>729 一般的に文字列処理で切り貼りするアルゴリズムは O^2 アルゴリズムで
操作するサイズが2倍になれば4倍の時間がかかる。
パソコンの性能が上がると、速度も速くなるけど処理するデータも大きくなるわけで
それに応じてデータサイズが大きくなるような場合逆に遅くなるわけ
ただし、1行のサイズが80行に限られているような場合は、別にそこまで拘る必要はない
734 :
デフォルトの名無しさん :2006/05/13(土) 21:42:32
Delphi7proでIndyのSMTPコンポを使ってるのですが、 Indyの色々なバージョンを試してたら >[致命的エラー] Main.pas(8): ユニット IdSMTPBase は異なるバージョン IdEMailAddress.TIdEMailAddressItem によりコンパイルされています と言うようなエラーが出てくるようになってしまいました。 Indyのサイトにある4つのバージョンをすべて試したのですがすべて駄目でした。 これを回避する方法かIdEMailAddressとTIdEMailAddressItemのバージョンを確認する方法は 無いでしょうか。 IdEMailAddress.TIdEMailAddressItemは私自身は使ってないのですが、孫引きされてるみたいで、 他のものに入れ替える方法が無いので。
∧,,∧ ミ,,゚Д゚彡 コロコロ ⊂ ∪ミ g,,, (~,,(~,,,ミ@ imageエディタってのがなくなったんですが コンポーネントパレットのアイコンを編集したいので dcrを扱えるソフトがほしいのですが お勧めはありますか?
>>735 お勧めかどうかは分からんが
パートナーDVDに XN Resource Editor が入ってる。
> 1行のサイズが80行に そいつは難しいなぁ。 ごめん。
> これを回避する方法 Indyをアンインストール Delphi7のbplフォルダにあるIndy系のパッケージを全部消して ライブラリぱすにあるゴミを片付けて Indyをインストール。 自分のプロジェクトのdcuを全部消して 再コンパイル。
739 :
デフォルトの名無しさん :2006/05/13(土) 22:47:29
>>738 1 D7プロジェクト-オプションからIndyを削除
2 D7フォルダ内の*.Indy*.*で検索してすべて削除
3 ライブラリパスは見たけどゴミは無し。
4 Indy10.1.5を落としてきてインスコしようとしたら古いバージョンがまだ入ってると警告が出るけど無視してインスコ
5 自分のプロジェクトのDCUすべて消してプロジェクト開いてF9
これだけやったのですが、エラーでした。
AnsiPosで部分文字列の位置を求める場合、返り値の位置が2バイト文字の 2バイト目かどうかチェックする必要はありますか? マルチバイト文字セットをサポートするとあるので、その辺は関数内でやって くれているのでしょうか?
心配無用 よきに計らってくれるよ
どうもです。
>>739 bpl フォルダはMy Document だったかも。
>>743 たびたびありがとうございます。
Cドライブをすべて検索しましたけど、スタートメニューとsystem32に二つファイルがあっただけでした。
∧,,∧ コロコロ
ミ゚Д゚,,彡
σ⊂ ∪ミ
┳┳ (~,,(~,,,ミ@
>>736 レス、紹介ありがとう。
XN Resource Editorを
インストールしてみました。
ランゲージのところにFont指定が文字化けしてますね。
それは仕方ないとしよう。
dcrファイルをSaveAsすることができない
なんていいかげんなつくりなんだ、、、、
で、結果は、アイコン、変わってくれないんだ....
TTrayIconってのがBDS2006で標準のクラス名とかぶっちゃって
TTrayIcoって名前に変更して使おうとしてるんだけど
Taskbar.dcrを編集してもアイコンが反映されないな。
わかんないや、、、、悲しい。
こういう時BDSが一歩、嫌いになる........
>>745 うぅ、なんか変なアプリを紹介してしまったのかも orz
XN Resource Editor はrc ファイルを作れないらしい。
自分でNotepad を使って作らないと駄目とか。
もう少しマシな物を探してみます orz
>>739 > 2 D7フォルダ内の*.Indy*.*で検索してすべて削除
ここが問題なのかも。Idで始まるファイルも多いから。
Lib フォルダに古いdcuが残っているとマズイらしい。
∧,,∧ キニシナイデ ミ,,゚Д゚彡 σ⊂ ∪ミ ┳┳ (~,,(~,,,ミ@ いや、むしろ、BDSの何かの関係かもしれないから あんまりきにしないでください。 今、D6インストールしてみました。 イメージエディタで昔のやり方どおり設定して 新しいコンポーネント作成しても やっぱり、なんかアイコン更新されない、、、、、 ユーザー数少ないと、 問題に出会う人も少なくなって、、、 と、、、、カキコしてから BDS2006を再起動すればアイコンが更新されることがわかった .......BDS........orz...........
Indy のパッケージを自分でコンパイルして dcu をLib フォルダにコピーすると良いらしい。
>>749 > BDS2006を再起動すればアイコンが更新されることがわかった
> .......BDS........orz...........
それってD6でも同じじゃね?
imageコンポーネントを複数横に並べて(左からimage1,image2・・) いずれかがクリックされたときにどれがクリックされたか判定したいのですが、どのようにすればいいのでしょうか?
人様のコードを眺めて勉強中ですが、ふに落ちない点があるので教えてください。 例えば function hogehoge(strhoge: string): string; var P: PChar; str: string; begin Result := ''; ←ここでResultって書いちゃってる。 str := str + hoge; ・ ・ 素人見解ですと、これって、Resultのとこで処理が終わって、このケースでは''(空白?)を返しちゃうんじゃないかって思うんですが、こういう関数をよく見ます。 関数の最初の方の行でResultに代入するワケを教えてくれませんでしょうか?
エスパーな俺が推測するに 753はCやJavaを齧ったことがあり、 そしてResultとreturnを混同しているのであろう
>>754 いや、学生でそんなキャリアないです!
平行してC++もやってるんですけど、returnとは違うんですか?
難しいこと考えずに「関数の途中で無駄だったらexitって記述するだけで済むから」 って理由はダメなの? もちろん「無駄なら空白返す」ってお約束前提で。
>無駄なら空白返す じゃ、「関数の処理ができなかったときに返すべき値を初めにいれておいた」ってことでいいんですか? どのResultを返すかはコンパイラが判断してくれると?
関数は全部走り終わって呼び出し元にResultを返す Resultに代入するだけじゃ処理は終わらんよ
>関数は全部走り終わって なーる。そうだったんですか。 returnとは違うわけだ。 ありがとうございます。
760 :
デフォルトの名無しさん :2006/05/14(日) 07:44:17
Delphi起動時にForm1とUnit1を 起動させないようにするにはどうすればいいの?
なにをしたいの?
プロジェクトから削除
/np
>>762 フォームをプロジェクトから削除したい
つ プロジェクト -> プロジェクトから削除
メインフォームを変えたい
つ プロジェクトオプション -> フォームで変更
起動時に出てくるのがうざい
つ ツール -> オプション -> どこか。デスクトップの保存をOFF
オレはランチャーの引数に/npを設定して起動してる
ランチャー(誤) ショートカット(正)
>>748 >>750 1 Delphiを削除
2 Indyのソースのみ退避
3 Delphiフォルダを削除&SYSTEM32フォルダに残ってたIndyのファイルを削除
4 DelphiをIndy抜きで再インストール。LibパスにIndyソースフォルダを追加
5 Indyのソースを一つのフォルダにまとめてIndyProtocols40.bplを開いてコンパイル
[エラー] IdStreamRandomAccess.pas(23): 未定義の識別子 : 'TIdStream'
[エラー] IdStreamRandomAccess.pas(25): forward または external 宣言された 'TIdStreamRandomAccess.GetPosition' が見つかりません
[エラー] IdStreamRandomAccess.pas(26): forward または external 宣言された 'TIdStreamRandomAccess.GetSize' が見つかりません
[エラー] IdStreamRandomAccess.pas(27): forward または external 宣言された 'TIdStreamRandomAccess.SetSize' が見つかりません
[エラー] IdStreamRandomAccess.pas(28): forward または external 宣言された 'TIdStreamRandomAccess.SetPosition' が見つかりません
[エラー] IdStreamRandomAccess.pas(32): forward または external 宣言された 'TIdStreamRandomAccess.Skip' が見つかりません
[致命的エラー] IndySystem40.dpk(48): 'IdStreamRandomAccess.pas' ユニットはコンパイルできませんでした
となってしまいます。
もちろんIdStream.pasはソースフォルダにありますし、エラーの出たファイルのusesにはIdstreamがあります。
768 :
デフォルトの名無しさん :2006/05/14(日) 10:59:15
delphi6 Personalで勉強を始めましたのですが、 デバッガについてですけどVBのローカルウインド に相当するものはありますか? ブレークポイントを設定して変数に どんな値が入ってるか確認したいのですが。
[V|D|L]
>>768 たぶん
表示 -> デバッグ -> ローカル変数
771 :
デフォルトの名無しさん :2006/05/14(日) 11:11:18
>>769 Lがありませんが、
カスタムインストールか何かをするとあわられるのですか?
> IndyProtocols40.bpl Delphi 4用なんてある?
>>771 じゃあwatchするかマウスカーソルエディタ上の変数に合わせてインスペクトするしかない
Del6Perの機能制限は結構極悪なんだよな。
774 :
デフォルトの名無しさん :2006/05/14(日) 11:33:49
>>773 そうですか有難うございmす。
ということはper盤はVer7とかでもやはり同じですか?
>>772 レジストリの動的パッケージに追加されているとか。
今、コンソールアプリケーションでプログラミングをしているんですが var a, b, c:integer; begin { TODO -oUser -cConsole Main : この下にコードを記述してください } c:=a*b; write('1000になるように2つの数字をかけてください。'); writeln('数字を入力してください'); readln(a); writeln('aに値が代入されました'); writeln('次にその数字にかける数字を入力してください'); readln(b); writeln('bに値が代入されました'); writeln('計算の結果',c,'の値が出ました'); case c of 1000..1000:write('正解です'); 1..999 :write('数字が足りません'); 1001..10000:write('数字が大きいです'); end. 実行すると、case c ofのところが表示できずにプログラムが終了します どこが間違っているか指摘してくれませんか? お願いします
>>777 writeln('計算の結果',c,'の値が出ました');
の後にreadln;を挿入したところ
case c of の前までは表示されるんですが、その後が表示せずに
終わってしまいます。
また一番最後にreadln;を追加してみたところ
[エラー] Project2.dpr(30): 'END' が必要な場所に ファイルの末尾 があります
になってしまいます。
何がおかしいかわからないです
>>777 お礼忘れていました。
レスありがとうございます。
>>776 コンソールアプリで練習する場合も
普通にGUIアプリとして作って
ボタンを一つおいて、ダブルクリック
その最初に AllocConsole; を入れておけば
そのコードを実行する事が出来るよ
>>778 case c of
1000..1000:write('正解です');
1..999 :write('数字が足りません');
1001..10000:write('数字が大きいです');
end;
readln;
end.
>>780 レスありがとうございます。
でもはじめたばかりの私には少し難しくてわかりません。
すいません。
>>781 ありがとうございます。
実行したところ、できましたが
適当な数字を入力してやってみたところ何故か
0になってしまいます。
c:=a*b; のところを+やーに変えたところ
すごい数字になってしまいます。
重ね重ねすみませんが、何がいけないのでしょうか?
>>782 c:=a*b;
の位置を変えたところ、できました。
レスしてくださった皆さんありがとうございます。
>>782 一番最初は Demoフォルダの EathPngあたりを開いて、コードを見ながら
速すぎる動きを遅くする改造からやるといいよ
>>784 これはゲームか何かですか?
すごく早い動きでとてもゲームといえるレベルではないですね。
というか私自身、コンソールアプリケーションでプログラミング
始めたばかりでまったく無知なんですよね。
どこをいじっていいかというのがまったくわからない状況です。
pascalの予約語も6つぐらいしか使えないのでorz
>>776 if DebugHook <> 0 then Readln;
TStringListを継承した自前クラスを作ろうかとおもってるんですが TMyStringList = class(TStringList) ・ ・ public constructor Create; destructor Destroy; override; ・ ・ このconstructorには「override;」をつけなくても大丈夫なんでしょうか?
overrideする必要があるのはメソッド同様、親constructorにvirtual, overrideが付いている場合のみ。 というわけでTStringList継承クラスにつける必要はない。 もし必要あるけどつけ忘れた場合コンパイラが警告してくれるから警告チェックしておけばいい。
>>788 ありがとうございます。そうします。
つけるのはdestructorだけでいいんですね?
>>789 少しはヘルプ読め
下位オブジェクトのクラスで Destroy メソッドを宣言するときには必ず override 指令を追加し,
継承された Destroy メソッドをオーバーライドするメソッドの最後の文として呼び出します。
Destroy メソッドは仮想メソッドなので,継承された動作が正しく実行されるようにするにはそれをオーバーライドします。
791 :
デフォルトの名無しさん :2006/05/14(日) 22:04:28
画像のファイル形式をbmpからwmfに したいのですがどうすればいいでしょうか?
逆だったか。
http://groups.google.co.jp/group/borland.public.delphi.winapi/msg/f5b40c73fb550619?hl=ja& var
bmp: TBitmap;
wmf: TMetaFile;
wmfc: TMetaFileCanvas;
begin
bmp := TBitmap.Create;
bmp.LoadFromFile('c:\copy\kingsx_small.bmp'); // Any test image
wmf := TMetafile.Create;
wmf.MMWidth := 5000;
wmf.MMHeight := 5000;
wmf.Width := bmp.Width;
wmf.Height := bmp.Height;
wmfc := TMetaFileCanvas.Create(wmf, 0);
wmfc.StretchDraw(Rect(0, 0, wmf.Width, wmf.Height), bmp);
wmfc.Free;
bmp.Free;
wmf.SaveToFile('c:\copy\small.wmf');
wmf.Free;
end;
BVから乗り換えた者です。少し質問させてください。 TArrayRec = record num: array[0..2, 0..6]of integer; end; みたいなレコード型があるとして、 var FArrayRec: TArrayRec; で、 FArraRec.Num := ( (1, 2, 3, 4, 5, 6, 7), (1, 2, 3, 4, 5, 6, 7), (1, 2, 3, 4, 5, 6, 7)); としても代入できません。(「.が必要な個所に)があります」というようなエラー) ループで1個ずつなら入るはずですが、一発で代入することは無理なんでしょうか?
無理
797 :
795 :2006/05/15(月) 04:48:58
いろいろ調べてみたんですが、無理みたいですね。 配列の宣言時に入れてしまう方法はあるみたいですが。 ありがとうございます。
constとかで事前に定義しておけば代入出来るけど
799 :
795 :2006/05/15(月) 06:06:04
みたいっすね。ネットでconstに二次元配列を宣言してあるのを見ました。 functionの戻り値で二次元配列を返すクラスを作成しとこうと思ってたんですよ。 ちょっとやり方工夫しなければならないみたいです。
800 :
デフォルトの名無しさん :2006/05/15(月) 07:21:16
デlpヒ6のパーソナルを使い出して気になったのだが、 for i:=1 to 10 do のiは、 デバグ時なんで10からカウントダウンしていくの?
>>800 最適化してるからじゃないですか? iの順番に関係ないようなコードを使ってるんでしょ?
>>799 setarray(arr: array of integer);
setarray([1,2,3]);
というのは可能だから工夫の足しになるかも
803 :
デフォルトの名無しさん :2006/05/15(月) 14:50:50
Delphiを使ったグラフィックスを学べるサイトがあったら教えてください。
中村の里かな 初心者にはやや敷居が高いけど
pdf版買え
>>800 iを使用していないときは、最適化により逆から数える
他のコンパイラでもこういう最適化するのははある。
809 :
デフォルトの名無しさん :2006/05/15(月) 18:08:45
ClientSocketとServerSocketのことだけど、 非同期ソケットエラーは、try except構文で取得できないんですかね? exceptのエラーメッセージじゃなくて、Windowsのメッセージが出てくるので 困ってます。 あと、同じprocedure内で一気にOpenとSendtextを使うと 接続はできますが送信した文字列を認識しません。 接続した後にSleepを入れてもだめなのに、 Buttonとかで後から送信すると認識します。 (でもそのprocedureからButton1.click;としてもうまくいきません) 何か回避方法はないでしょうか? よろしくお願いします。
イベントドリブンの考え方を正面から否定されても困るんですが
>>809 通信が確立してからじゃないとだめだったと思うので
Connected以降でないと送信出来なかった気がする
>>752 OnClickイベントを共通にして、
Tagで判別するのはどうか?
自作のクラスの中でMyRect: TRect;と書き、uses節にWindowsを追加し、コードのなかでMyRect:=Rect(10,10,100,100);としても (未定義の識別子'Rect'と出て、コンパイルできません>< げんいんとしては何がかんがえられますか?
>>816 ヘルプを見たらWindowsでした。ちなみにGraphicsはすでにusesに追加してました><
どうしてコンパイル通らないのかわかりません。
function Rect(ALeft, ATop, ARight, ABottom: Integer): TRect;はClassesで宣言されているから。
>>818 サンクスです!(^^
Classesを追加したら通りました!
820 :
816 :2006/05/16(火) 03:11:32
Classesが勘違いスマソ
821 :
デフォルトの名無しさん :2006/05/16(火) 04:08:08
Double 型が取り得るすべての値(±Infinity, NaN, 0.0 を含む)の範囲から乱数を得たいのですが、 どのようにしたらようでしょうか?
>>821 64bitの乱数ビット列を作ってそれをdoubleとして読みたいという事?
>>812 てことはOnconnectに
処理を書いていけばおk?
connected以降って何?
デルポイ
>>823 そんな単純じゃないと思われ・・・
あるきっかけ(ボタンを押す?)から接続、送信、切断をしたいんでしょ?
だったら、接続完了後、送信(完了後?)、切断って流れになるわけで
まぁ、きっかけが一個しかないのならconnectedに処理を書けばうまく行くかも
>>825 すまん、ClientSocketとServerSocketだった。connected -> Onconnect?で
( ^ω^)・・・
830 :
デフォルトの名無しさん :2006/05/16(火) 17:49:01
Case hoge of 1:begin end; のような条件分岐を文字列でやる方法は無いでしょうか? hoge='abc'などです。 今はIF文で大量に分岐させてるのでソースがとても醜く、困ってます。
hash値に変換とかアホなことやらない限りはない。 あとはRegisterHandler('foo', @HandleFoo); とか個別に処理関数を登録とか。
TStringList と IndexOf() メソッドをつかえば簡単にできるでしょ。
>>814 うまくいきました、ありがとうございました
ポインタの指すアドレスの値を16進数で表示したいのですが、 文字列への変換がわかりません。 procedure TMainForm.ABC(Sender: TObject) Label1.Caption:=XXX(Sender); XXXのところが変換する関数になると思うのですが、 見つけられませんでした。すみませんがお助けください。
Label1.Caption:=IntToHex(DWORD(Sender),8);
だいたい文字列の比較にはいろんな方法がある。 大文字小文字を区別するかしないかとかね。
>>835 ありがとうございます。DWORDだとなぜかうまくいかなかったので
longwordとしたらうまくいきました。
自作したAのアプリで処理がファイルコピーなどの処理が終わったときに、 Bと言う別の自作アプリに処理が終わった信号を方法って無いでしょうか? Handleを使えばできそうなのですが良く分からないもので教えてください。
IPC
841 :
デフォルトの名無しさん :2006/05/17(水) 05:34:41
Delphi2006でデータベースをやろうとしていますが、 お勧めの解説サイトや本はないでしょうか。
Delphiって本ないんだよな…
843 :
デフォルトの名無しさん :2006/05/17(水) 09:19:38
ファイル読み書きで、 BlockWriteで書くやり方と、 ファイルストリームによるやり方があるけど、 これらの使い分けがよくわかりません。
GoogleがDelphiを引き取ってくれる可能性はありますか?
すれ違い
>>844 はいわかいりました。
でもその理由はなんでしょう。
古ーい Pascal からの I/O と、OOP な TStream 派生クラスで、両方でできることなら TStream で済ますのは正解 ってことだ、と思う。
>>848 そうですか。ありごとうごせいます。
オブジェクト指向になれるためにもクラスをつかうようにします。
850 :
デフォルトの名無しさん :2006/05/17(水) 21:37:14
Cloneするメソッドを作りたいのですが、ClassTypeからCreateしちゃって大丈夫なんでしょうか・・・。 ちょっと自信がありません。 procedure THoge.Clone: THoge; begin Result := THoge(ClassType.Create); Result.Assign(Self); end;
851 :
850 :2006/05/17(水) 21:45:48
実験しましたが、THogeで、Createを再定義していると駄目ですね。
852 :
850 :2006/05/17(水) 21:46:21
駄目というか正確には、再定義したCreateが呼ばれないです。
853 :
850 :2006/05/17(水) 21:47:54
いけました! THogeClass = class of THoge; としておいて、 function THoge.Clone: THoge; begin Result := THogeClass(ClassType).Create end; とすれば、再定義したCreateも呼ばれますね
854 :
デフォルトの名無しさん :2006/05/17(水) 21:50:53
>>839 IPCって何ですか?
>>841 Delphi DB&Webプログラミング
おいらはこれを使いました。
でも内容はなんとも言いづらいから立ち読みの上ドゾー
最近VB荒らしが来なくて寂しいね
VB厨からも見捨てられたとか・・
>>854 >Delphi DB&Webプログラミング
どもー。参考にさせてもらいますー
>>850 Result := THoge.Create;
じゃなんで駄目なの?
>>858 あ、いや、サブクラスでもCloneの再定義なしに使いたいと思いまして・・・。
そういうことも書いておくべきでした orz
BDSのドッキングウインドウってどうやって作ってるんだろ・・・ 同じウインドウにドッキングするとタブ化しますよね? これを実現するコンポーネントないすかね? ToolBar2000+TBXがかなりいい感じなんですが、 タブ化できないみたいです・・・ 標準のTDockTabSetはなんか違うみたいですし・・・
あと、BDSのIDEのドッキングされているウインドウって、虫ピンアイコンとかありますよね。 あれも標準だとできないですよね。 コンポーネントないんだろうか・・・
昔から某はIDE作ってる部品は公開してないよな・・・
ユニットテストに興味を持って、どういうものか検索してみた。
ttp://www.hexe19.net/dunit/ で、読んだ限りassertと同じ事をわざわざやってるように見えるんだが。
>つづく…。
の後に、assertでは出来ないすばらしいデバッグ技法が書かれる予定だったはず。
dunitはわけもわからず使いたいので、assertでは不十分な事例とか教えてくれ。
866 :
デフォルトの名無しさん :2006/05/18(木) 16:48:40
ちょっと前にPostmessageを教えてもらったものですけど、これの BOOL PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); UINTの部分って数値とか文字列とか何でもいいの? 色々ぐぐってもWM_Closeとかの決まったものばかりなんだけど。 あと受け取りかたはどうすればいいのかもすみませんが、教えてください。
>>864 記事試してみましたら、TDockTabSetって、虫ピン用のコンポーネントなんですね。
UINTに入るのは符号なしの整数のみです。 でも、数字のままではわかりにくいので、 WM_CLOSEなどと数字に名前を付けています。 これが定数というものです。
>>866 VCLのソースがあるならMessage.pasを参照するべき
WM_CLOSE = $0010;
と定義されているから
で、受け取り方だけど 受け取りたい方のフォームにpublicに procedure rcvMyMsg(var Message: TMessage);message WM_USER + 1と定義 実装部はこんな感じ procedure TForm1.ReceiveMyMessage(var Message: TMessage); begin ShowMessage('受信したのさ') end; 送る方はFindWindowで送り先のフォームのハンドルを取得してメッセージ送信 こんな感じ procedure TForm1.Button1Click(Sender: TObject); var hndl: THandle; begin hndl := FindWindow(nil, 'rcv-test'); PostMessage(hndl, WM_USER+1, 0, 0); end;
871 :
デフォルトの名無しさん :2006/05/18(木) 21:12:35
.identcacheって必要なファイルなんですかね? バージョン管理ソフトの無視リストに加えようと思ってるんですが・・・
∧,,∧ ミ,,゚Д゚彡 ミ つ且~~ ミ,,__ ヾ ⊂二二二UU二二⊃ DUnitについてはよーわからんのだが Delphi界は世界が狭すぎてエクストリームプログラミング人口も 激少なので、情報もないので、自信もないが ユニットテストってのはたぶん if A = B then ShowMessage=正しいよ else ShowMessage=まちがっとるよ; の、程度の応用だと思われ。 で、その応用がエクストリームなプログラミングなので 爆発的にプログラムコードの品質が高まるという。 世にも素敵な方法論だったりする。
874 :
デフォルトの名無しさん :2006/05/19(金) 01:15:12
Delphiで、ユニットテストしてる俺がきましたよ。 DUnitじゃないが自作のGUIのユニットテストランナー使ってるけど。 ユニットテストはあくまでテストの手法なので、 assertでできてるんならそれでも別にいいよ。 結局、内部ではTestメソッドから発生させた、例外捕まえてるだけだし。 でも、既存のDUnitとかのフレームワークにあわせた方がやりやすいってだけのことよ。 グイーンと伸びるバーとか見てハァハァできるようになったりするとしめたもの。 あとは、リファクタリングもあわせてできると生産性がアップする。 ユニットテストは慣れると、いいよー。 ちょっとの機能追加でも、バグでても一発でわかるし。 俺は、いまんところ、GUIソフトのユニットテストがやり方わからなくてこまってる。 いい方法ないかね。
875 :
デフォルトの名無しさん :2006/05/19(金) 01:18:23
あ、あとコツだけど、わざとエラーを出させて例外が出なかったらテスト失敗! みたいにエラー処理がうまくいっているかもユニットテストでチェックすると、 よりアプリが強固になる。 ただ、けっこう面倒なんだよね。 たいてい、本体より、テストをかいたunitの方がサイズがでかくなる傾向にある。
> たいてい、本体より、テストをかいたunitの方がサイズがでかくなる傾向にある。 テストユニットのためのテストユニットとか、、無限連鎖しそうだな
DelphiでVBのIIf関数や、Cの?演算子のような if A then begin Hoge := 'あいうえお'; end else begin Hoge := 'アイウエオ' end; 上記のコードを1行でできるようになる関数か演算子ってありませんか?
IfThen
>>878 こんな関数があったのか。
これで無駄にコードの行が増えなくてすみます。ありがとう!
var a,b: Integer; begin a := 10; b := 20; if a = b then ShowMessage('a=b') else ShowMessage('a<>b'); end; 一行で済むんだけど。
マクロみたいなもん。便利とおもうならいいじゃないの
883 :
デフォルトの名無しさん :2006/05/19(金) 16:17:24
注意点としては、C言語の?演算子と違って、両方とも評価されてから、IfThenに渡されることな。 IfThen(True, A(), B()); としたら、A()とB()が両方とも実行される。 副作用をともなう関数の場合、注意する必要あり。 まあ、見りゃわかるが。
884 :
デフォルトの名無しさん :2006/05/19(金) 16:18:42
>>860 JVCLのJvDockingっがそれっぽいかも。
ドッキングしてタブ化もできるし、虫ピンもついてるみたい。
>>881 そういうふうにソース追いかける方法を教えてください
ソースついてるバージョンかってGrepするか定義の検索
( д ) ゚ ゚ perじゃ駄目っすね?
IfThen って書いて、Ctrl押しながらクリックしたらソース出るけどなあ。
>>888 はー、5年前もほとんど同じ議論の山。
186 名前: デフォルトの名無しさん 投稿日: 01/10/11 23:25
そこまでしてDelphiにこだわるのは
はっきり言って怠慢以外の何ものでもない。
C#が良いならC#に移ればよい。
今後Delphiに出来るのはC#の後追いだけ。
これはそうなったな・・・・
Cと比べる事自体がナンセンス
>>887 入信したいならPro版くらい買え。
いろいろできるぞ。
>>888 そいつら余程暇なんだろうな。
自分が糞だと思ったら使わなければいいだけの話なのに。
余程鬱憤が溜まってるか暇か或いはその両方なんだろうな。
他所でやれ
896 :
894 :2006/05/19(金) 19:18:23
勿論情報提供し合うのは良いけどね。 ただ批判するだけのクズに言ってる。
他所でやれ
いつのスレにレスしてんだよw
自前のコントロールをホイール対応にしたいのですが、どうしたらよいでしょうか・・・
DoMouseWheelDownと、DoMouseWheelUpのoverrideでいけました。サンクス。
5年前にレスに興奮してる人がいるようだな・・・
902 :
デフォルトの名無しさん :2006/05/19(金) 21:59:39
配列が等しいかどうかチェックするのに = は使えないみたいですが、 どうしたら良いのでしょうか? for で各要素を比較したりするのでしょうか?
>>904 もし、配列の要素が基本的な型もしくは、packedな構造体なら、CompareMemでいけると思う。
普通の構造体なら、forでいちいち比較かな
packedって何に使うの? ヘルプ読むと「データを圧縮して格納」としか書いてなくて意味わからんちん 圧縮すると速度が低下するらしいけど、そのかわりに何か得るものがあるんだろうか
XP+Delphi6を使ってます。 今、Form1とForm2を表示させて(Form2はForm1からForm2.Show;で表示)Form2のみ private procedure CreateParams(var Params: TCreateParams);override; procedure TForm2.CreateParams(var Params: TCreateParams); begin inherited; Params.WndParent := Application.MainForm.Handle; end; にて最前面表示にする事は出来たのですが、 Form2の背後に他の最前面表示のソフト「aaa」がある場合の時に Form1を選択しアクティブにした場合Form2がこの「aaa」の後ろに隠れてしまいます。 これを回避する術はありますでしょうか?宜しくお願いします。
908 :
907 :2006/05/20(土) 00:00:45
すみません、Form2を最前面表示にする為に以下のコードも使ってます。 procedure TForm2.FormCreate(Sender: TObject); begin SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE); end;
>>906 record A:Byte; B:Integer; end;みたいな場合、普通だとAとBの間に3バイトの空きが入る。32ビットCPUでは4バイトごとに区切って扱う方が高速だから。勿論Aも4バイトの変数だと空きは入らない。
これがpackedだとどんな風にデータを並べても空きが入らない。バイナリファイルのフォーマットに従って要素を並べて一気読みとかできるし、空きのゴミデータを気にしなくていいからCompareMemで比較もできる。
>>909 すげえ
ものすごくよくわかった
thx
>960 たとえば15Byte x 40要素の配列を定義したとすると、 非packedな方は8バイト境界に揃えられるため、実際のメモリ消費量は16x40=640Byteになるが、 packedだと600Byteになる。
912 :
904 :2006/05/20(土) 01:00:49
>>905 ありがとうございました。
>>906-
ついでに、packed も勉強になりました。どうもです。
_________
∧,,∧∩ /
ミ,,゚Д゚彡 < こんばわ。
ミつ旦.ミ \
@ミ ミ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∪''∪
>>874 、いいねー
ユニットテストしている漏まえがきてうれしいです。
> ユニットテストはあくまでテストの手法なので、
> assertでできてるんならそれでも別にいいよ。
そっそっそ。
いやあ、ホント楽しくなくて平行線をたどるだけの議論を
どうして繰り返すかしら、、、、、みなさん。
C#でもDelでもいいからファーストテストや
ユニットテストを学べっつーの。
そrで、漏れにDUnitの使い方を教えるために
猫でもわかるような解説ページ作ってください。>>誰か。
漏れはすでにリファクタリングできない開発
(よく人のコードを引き継ぐとあるよね〜)
は、できない体になってしもた。
> 俺は、いまんところ、GUIソフトのユニットテストがやり方わからなくてこまってる。
> いい方法ないかね。
まあ、それは永遠に近いテーマだが、library部分のテストの場合
サンプルプロジェクトを作っておくってのは大事よね。やっぱり。
>>876 、無限連鎖はしないよ。
くだすれでユニットテストがどうのって
>>913 リファクタリングできるバージョンのDelphiだというなら、
ヘルプをDUnitで検索してみてね。
>>865 よりもわかりやすい。
俺の理解した範囲では、プロジェクトグループにテストプロジェクトを追加し、
本体プロジェクトで使用するユニットをテストプロジェクトでもusesすることで、
関数に外部から値を送って戻り値をassertできるみたいな話だな。
実際はassertじゃなくて、うまくいったかどうかをGUIで表示するんだがね。
たしかに、本体にやたらassertを書かなくても良いし、
リリース版だけassert無効とかしなくて良いので、便利といえば便利かも。
>>915 日本語でおk
なんか英語よりややこしいね
プログラム系の会話って
でも予約語はアルファベットで書かないとよけい分からんべよ
英語で書かれたXPの話だとさらにわからんぞ。
つまりはその意味に沿った日本語がないっちゅうことなのでしょうか
ハッシュ(連想配列)を使うには、どうしたら良いのでしょうか
コードを書く
真面目に質問してるんですけれど……
Delphi 連想配列 でググルと真面目に質問するより早いと思うけど・・・
TStringListのValues使うんだっけ? 文字列以外も代入したくなって 結局俺は自作してしまった・・・。
THashedStringList というのもあるけど、自作が一番使い易いのも確かだね
record配列にしておけばいいやん・・・
>>921 JEDIのJCLにHashMapがある
>>929 それを先に知っていれば、自作せずにすんだのに・・・
VB.NETにも標準であるよ
VCL.NETで使えるね。
>>907 所有されているウィンドウ(Form2)はHWND_TOPMOSTになることを
想定していなかったと思うけど、どうかな?
単にForm1がアクティブになった時は、 Form2 を手前に持ってくれば良いかもね。
935 :
907 :2006/05/21(日) 02:29:47
>>933 レスありがとうございます。
うまく説明出来てるといいんですがもう少し詳しく書いてみると
Form1,Form2どちらも自動作成の対象に入れて
Form1からForm2の呼び出しはForm2.Show;のみ行ってます。
FormStyleプロパティはForm1,Form2どちらもfsNormal
Form2のみ
>>907 >>908 のコードで最前面表示にしてます
>>単にForm1がアクティブになった時は、 Form2 を手前に持ってくれば良いかもね。
Form1のOnActivate 又は Form2のOnDeactivateでForm2を最前面表示にするコードを書くとForm1の操作が出来なくなってしまいます
Form2は最前面に表示したままForm1の操作は出来ない物でしょうか・・・
>>935 外してるような気がするけど、一応書いてみる。
procedure TForm2.FormCreate(Sender: TObject);
begin
form2.ParentWindow:=form1.Handle;
end;
ってやるとform2がbsDialogだとform1の後ろへは行かない。
ただし、form1はform2の前へは行けない。
>>936 ありがとうございます。書き忘れすみません、Form2のBorderStyleはbsNoneに設定しています。
さっそくやってみたのですが、BorderStyle(Form2)がbsNoneの場合だと
Form2がForm1の子コントロール(Form1の中のMemo1みたいな感じに)
になってしまい最前面表示も解除されてしまいました。
書いて下さってる通り、BorderStyleがbsDialogの場合だと上の様な状態にはならないのですが
Form2が他の最前面表示のソフト「aaa」より上に表示されてる状態で
Form1をアクティブ状態にすると、やはりForm2が「aaa」の後ろに隠れてしまいます。
938 :
936 :2006/05/21(日) 03:29:40
よく読み返してみたら、オレが思ってた質問と違った(汗 失敬。
939 :
937 :2006/05/21(日) 03:50:52
いえ、ParentWindow知らなかったので為になりました。
意味不明だけど、Handle が再生成されてない? もしそうなら、 HWND_TOPMOST も再設定する必要があるよ。
確認しました。 Form1がアクティブになると、Form1よりaaaが手前に表示されているから、 Form2もaaaの後ろに表示されるという解釈かな。 でも、Form2がForm1に所有されていなくても変わらないよね。
これかな。 >または最も前面ではないウィンドウの後ろに再配置されると、 >最も前面ではなくなります。このとき、 そのオーナー ウィンドウ、 >およびそのウィンドウが所有するウィンドウもすべて最も前面ではなくなります。 つまり、Form1はaaaより後ろにあるから、Form1が所有するForm2は前面で無くなる。 所有していなければ、Form1がアクティブな状態で Form2 は aaa より前に表示できます。
うーむ上の >の説明は HWND_TOPMOST フラグがクリアされると言うかな…。 Form1がForm2を所有している場合は Form1をアクティブにすると、Form2は必ず他のTopMostウィンドウより後ろに表示されるみたい。 Form1がForm2を所有していない場合は Form2がアクティブな時にForm1をアクティブにすると、aaaがForm2より手前になる。 他のウィンドウがアクティブな時にForm1をアクティブにすると、Form2がaaaより手前になる。
944 :
907 :2006/05/21(日) 07:37:37
沢山のレスありがとうございます
改めて自分の無知さを実感してます。
Form2を所有してると言う部分が良く分からず、これをキーワードに検索してみると
Form2.ParentWindow := GetDesktopWindow();
Form2.Show();
上記のコードを見つけ、実際に組んでみると
(
>>907 のコードは削除し、
>>908 のコードを OnShowの方に移動)
Form2がアクティブ、ノンアクティブに関係なくForm1をアクティブにしても
Form2が「aaa」に隠れる事無く、Form1も問題なく操作出来ました。
ParentWindow(Form2の所有権?)が、鍵だったんですね。
本当にありがとうございました。
945 :
907 :2006/05/21(日) 07:38:12
自動作成の対象:Form1, Form2 //Form1 BorderStyle = bsSizeable FormStyle = fsNormal procedure TForm1.Form2Show; begin Form2.ParentWindow := GetDesktopWindow(); Form2.Show; end; //Form2 BorderStyle = bsNone FormStyle = fsNormal procedure TForm2.FormShow(Sender: TObject); begin SetWindowPos(Handle,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE or SWP_NOMOVE); end;
すれ違い
>>945 Form1がForm2を所有したままでやるなら、これで解決するよ。
procedure TForm2.WMActivateApp(var Message: TWMActivateApp);
begin
inherited;
if Message.Active then
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOACTIVATE);
所有云々は日本語APIヘルプの「ウィンドウの概要」に詳しい。
949 :
デフォルトの名無しさん :2006/05/22(月) 17:21:09
TClientSocketとTServerSocketでソケット通信を行っており、ClientTypeはstNonBlockingなのにサーバーが落ちているときにソケットエラーを起こしてくれません。 SendTextの戻り値も正常(送信バイト数)で、データが浮いてしまうのですが原因としてなにが考えられますか?
950 :
デフォルトの名無しさん :2006/05/22(月) 20:53:19
Delphi2006で、演算子オーバーロードをやりたいんですが、 ヘルプに記述が見当たりません。 やり方を解説したサイトとかってないですか?
Add という名前と + という演算子の関係づけがわからんな、その例見ても。
> ヘルプに記述が見当たりません。 ひどいね
954 :
デフォルトの名無しさん :2006/05/22(月) 21:00:50
>>951 ありがとう。みました。
C:\Program Files\Borland\BDS\4.0\Demos\DelphiWin32\VCLWin32\ComplexNumbers\
にサンプルがありました。
でも、ヘルプには、全然ないのね。
955 :
デフォルトの名無しさん :2006/05/22(月) 21:05:27
ComplexNumbersのサンプル面白ですね。 strict privateとか、staticとか新機能使いまくり。 staticは、ヘルプによると静的クラスメソッドだそうですが、クラスメソッドとどう違うんだろ
ヘルプに説明ないのか?
つ 静的クラスメソッド
TMemoの最後の部分にスクロールバーを持ってくるにはどうしたらよいのでしょうか?
SendMessage(Memo1.handle, WM_VSCROLL, SB_BOTTOM, 0);
Memo1.PerForm(EM_SCROLLCARET, SB_BOTTOM, 0); でどうよ
> クラスメソッドとどう違うんだろ 通常のクラスメソッドとは異なり,静的クラスメソッドには Self パラメータがまったくありません。 また,インスタンスメンバーにもアクセスできません。 また,クラスメソッドとは異なり,静的クラスメソッドは,virtual として宣言できません。 クラスプロパティのアクセッサは,静的クラスとして宣言する必要がある
>>960 ヘルプより
EM_SCROLLCARET
wParam = 0 ; // not used now; reserved for future use; must be zero
lParam = 0 ; // not used now; reserved for future use; must be zero
SB_BOTTOM はなんで?
そもそも末尾にキャレットあるとはかぎらんし
>>961 なるほどー
つまり、クラスメンバ(class var)用なのか?
自己流でdelphiをいじっているプログラマです。 複数のアプリケーションを立ち上げている状態で、タイマーで順次特定のボタンやリストボックスを 押下する機能を作りたいと思っています。 この場合、 アプリケーションのウインドウをアクティブにする ↓ マウスカーソルをボタンに移動 ↓ クリックという手順で行うのでしょうか? ヘルプや検索でタイマーは何とか実装することが出来ましたがここで躓いています。 参考になるソース等教えてもらえないでしょうか?
APIのSleepを使うとフォームが固まってしまいます。 フォームを固まらせずに一定時間待機するにはどうすれば良いでしょうか? 何か良いAPIはありますか? #タイマーコンポやスレッドを使うのは最終手段としたいです。
>>967 スレッドを使わずにかー。
指定時間まで、ループ回して、
ループ内で、
Sleep(1);
Application.ProcessMessages;
って手もあるが。
何をどれ位待つかにもよって、最適な手段が変わる。 もっと具体的に処理を示せ。 Application.ProcessMessageという物もあるが、 これは時間のかかる処理をしている間にフォームを固まらせないための処理で、 一定時間待つという用途にはあまり向いてない(予期しない挙動する可能性が増える)
>>966 > ボタンやリストボックスを押下する機能を作りたいと思っています。
別にアクティブにする必要はない。
1)ウィンドウハンドルを取得
2)動作させたいメッセージを送る。
これだけ。でも 1)が一番難しい。
>>968 なるほど!ありがとうございます。
>>969 すいません。具体的にはクライアント/サーバ アプリを作成中で、
クライアントからサーバに連続でデータを取りにいく際、接続開始を
一定時間(200ms程度)待機する際に使いたいと思っています。
973 :
966 :2006/05/23(火) 00:06:10
>>970 ,971
早速のお答え有難うございます。
今日は遅いので明日拝見してみますね。
procedure SleepProcessMessages(Milliseconds: Cardinal); var StartTime, NowTime: Cardinal; begin StartTime := GetTickCount; while true do begin NowTime := GetTickCount; if Milliseconds <= (NowTime - StartTime) then Break; Application.ProcessMessages; end; end; ただし、連続で呼び出すと挙動がおかしくなる。 ほかにあったら俺にも教えてくれ。
>972 それなら悪いこと言わん。スレッドの使い方覚えた方が良い。後々簡単だから。
ネットワークで待つ場合、スレッド必須だとおも。 スレッド覚えといたほうがいいよ・・・。
977 :
967 :2006/05/23(火) 01:40:35
皆さん助言ありがとうございます。 今回はスレッドを使ってみようと思います。
200msって固まるって感覚じゃぁないと思うけど・・・ まぁ、長くするかも知れないのなら漏れもスレッド勧める
979 :
デフォルトの名無しさん :2006/05/23(火) 11:58:17
TLogFont.lfWeightに対応するプロパティは何でしょうか? TCanvas、TFont、TPen一通り探しましたがそれらしいものはなかったです。
TFont.Style の fsBold 。 細かい設定はできない。
981 :
デフォルトの名無しさん :2006/05/23(火) 13:24:49
他のアプリを監視して応答が無くなったら強制終了させるアプリを作りたいのですが、 終了ボタンを押しても終了しないアプリを強制終了させる方法がありましたら教えてください。 postmessageのWM_Closeだけでは無理でした。
WM_TERMINATE
TIdHTTP.ResponseCodeに対する処理って皆さんはどの程度されていますか? ちなみに私は下に書いてるのみです。 200:; //正常処理 403:; //Forbidden 404:; //NotFound 500:; //InternalServerError 503:; //ServiceUnavailable
実行中アプリのフルパスからトップレベルウィンドウのハンドルを得るにはどうすればいいでしょうか?
988 :
985 :2006/05/23(火) 17:03:59
987は私ではないですよ。 んで、日本語じゃないらしいのでもうちっと詳しく書くと テキストファイルにアプリのパスをずらずらっと書いてだ そやつらにWM_CLOSEを送って終了させたい訳だ。 んでWM_CLOSEをPostMessageする為にはウィンドウハンドルがいると。 あらかじめクラス名とかを調べておくのは面倒なのでフルパスからなんとかトップレベルウィンドウのハンドルが得られないかと。 EnumWindowsとかやってみたんだがどれがトップレベルウィンドウかコードから判別する方法が知りたい訳だ。 パスが一致する物全てにWM_CLOSE送ってもいいんだが、かっちょ悪いっしょ?
テキストファイルにずらずらっと書いたアプリを CreateProccess使って自前で起動したのなら プロセスIDからウィンドウハンドル取得が出来る そうでないなら俺もやり方知らんから 知ってる人いたら教えて欲しい
CreateToolhelp32Snapshot は使えないかな
だいいち、一つのフルパスから複数起動されている場合だってあるだろうし。
>あらかじめクラス名とかを調べておくのは面倒なので こっちの方がずっと簡単だわな。FindWindow() つかえるから。
どうでもいいが、他のアプリを勝手にKILLするって・・・・作成罪が成立したら気を付けろよ
どうせ、まともなアプリじゃないんだろなぁ・・
埋め995
Cardinal や Int64 を IntToStr みたいに文字列にしたいのですが、 どうしたら良いのでしょうか?
intToStr は複数定義されて overloadされてるから、心配ない Caption:=IntToStr(Cardinal(-1)); Caption:=IntToStr(-1); は違う結果になる
ヘルプより function IntToStr(Value: Integer): string; overload; function IntToStr(Value: Int64): string; overload; つかえるんじゃないの?
999 :
デフォルトの名無しさん :2006/05/23(火) 19:01:58
すいません上で書いた者ですが、サーバーが繋がっていない時にSocket.SendTextで例外が発生しないのは仕様なんでしょうか?D5です。
1000だとかわいくて素直な彼女が出来る
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。