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

952デフォルトの名無しさん:2006/05/22(月) 20:59:53
Add という名前と + という演算子の関係づけがわからんな、その例見ても。
953デフォルトの名無しさん:2006/05/22(月) 21:00:40
> ヘルプに記述が見当たりません。

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

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

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

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

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

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

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

ヘルプより

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

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

この場合、

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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