5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :デフォルトの名無しさん:2009/12/01(火) 20:41:37
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を
勇気を持って書き込むスレッドです。
Delphi使いが優しくコメントを返しますが
お礼はDelphiの布教と初心者の救済をお願いします。

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

<過去スレ>
DelWiki避難所(Delphi 関連の過去スレッド)
http://delwiki.info/?%E3%83%AA%E3%83%B3%E3%82%AF%2F%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%83%86%E3%82%A3%2FDelphi%20%E9%96%A2%E9%80%A3%E3%81%AE%E9%81%8E%E5%8E%BB%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89

2 :デフォルトの名無しさん:2009/12/01(火) 20:43:51
<関連スレ>
【Delphi】 Indyコンポーネント 【C++Builder】
http://pc11.2ch.net/test/read.cgi/tech/1093654251/
Delphi初心者のための寺子屋
http://pc11.2ch.net/test/read.cgi/tech/1132756268/
delphiで作った有名ソフトって何があるの?
http://pc11.2ch.net/test/read.cgi/tech/1135654787/
Delphi持ってるならGLSceneを使え
http://pc11.2ch.net/test/read.cgi/tech/1163269079/
【Delphi互換!?】FreePascal【GPL】
http://pc11.2ch.net/test/read.cgi/tech/1137051510/

【Delphi】 ゲームつくるぞ(゚Д゚)ゴルァ 2【Delphi】
http://pc11.2ch.net/test/read.cgi/gamedev/1097836469/
Delphiでアクションゲームが作りたい!! Part2
http://pc11.2ch.net/test/read.cgi/gamedev/1027482533/
ネットワークゲーム作成のお勉強(Delphi専用スレ)
http://pc11.2ch.net/test/read.cgi/gamedev/1028278884/
delphiでMMO
http://pc11.2ch.net/test/read.cgi/gamedev/1072515100/

では質問どうぞ。

3 :デフォルトの名無しさん:2009/12/02(水) 00:39:08
>>1
乙です

4 :デフォルトの名無しさん:2009/12/02(水) 02:50:09
待ってました 乙〜

5 :デフォルトの名無しさん:2009/12/02(水) 14:26:09
質問です。
XP SP3 IE8
Delphi6 Personal にて
メインFormにTWebBrowserを張り
WebBrowser1.Navigate('http://www.ugtop.com/spill.shtml');すると
使用ブラウザに、
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;
と表示され、IE8の互換モードであると出てきます。
IE8で表示すると、ちゃんと
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;
となります。
TWebBrowserを使うと、互換モードになってしまうみたいですが
IE8モードにするにはどうすれば良いでしょうか。


6 :デフォルトの名無しさん:2009/12/02(水) 16:14:32
>>5
今までWebBrowserコントロールを使っていたソフトがちゃんと動くように互換モードが規定値になってて、
IE8モードを指定するためには自分のソフトのファイル名をレジストリに登録する必要があるみたい
詳しくはMSDN参照
http://msdn.microsoft.com/ja-jp/ie/cc787976.aspx

7 :デフォルトの名無しさん:2009/12/02(水) 16:17:55
IE8モードは色々と動かないサイトが多すぎる

8 :デフォルトの名無しさん:2009/12/03(木) 13:35:45
AvastアンチウィルスがDelphi製ソフトの一斉検出祭りらしいぞ!

9 :デフォルトの名無しさん:2009/12/03(木) 20:39:51
Delphi製以外でも大量誤検知らしい

10 :デフォルトの名無しさん:2009/12/04(金) 11:29:07
Delphi6 PersonalをWindows7 x64に入れたいんだがインストール出来ない・・・
回避策はありませんか?

11 :デフォルトの名無しさん:2009/12/04(金) 11:31:56
動かないんならエミュるしかないんじゃね

12 :デフォルトの名無しさん:2009/12/04(金) 14:15:14
7上のXPで動かせばいいじゃん

13 :デフォルトの名無しさん:2009/12/05(土) 20:14:45
タイトルバーにアプリケーションの名前と一緒に、
アプリケーションをコンパイルした日付を表示したいのですが、
アプリケーションをコンパイルした日付を取得する方法ってあるのでしょうか?

毎回手作業で入力するのが面倒なので、プログラム的に何か方法が無いかなー?と思ってます。

hogehoge [ver.3.2.1.20091205]

みたいな感じです。
バージョンの取得は出来ているので後は日付だけなのですが…。

どなたかご存知の方よろしくお願いします。m(_ _)m



14 :デフォルトの名無しさん:2009/12/05(土) 20:22:02
ファイルタイムスタンプからとれば。

15 :デフォルトの名無しさん:2009/12/05(土) 20:22:19
>>13
ファイルの作成日時を取得すればいいんじゃね?

16 :デフォルトの名無しさん:2009/12/05(土) 21:05:15
>>14
>>15

レスどーもです!

更新日時を使えばいけそうな気がしてきました。

一つ気になったのは人に配布する時、
一度zipかなんかで圧縮すると思うのですが、
解凍した時のタイムスタンプってどうなるのでしょう?

自分のPCの中にある圧縮解凍ソフトでは
作成日時は変更になるけど更新日時は問題ないみたいですが…
ソフトによって違いってあるのでしょうか?


17 :デフォルトの名無しさん:2009/12/05(土) 21:15:19
自分なら
version.pas
に文字列リテラル埋め込んでスクリプトで更新するかな。
リリースビルドはコマンドラインからやるようにしているから間にそういうのを挟むのも簡単だし。
実際は日付なんてつけずにバージョン番号のビルド番号の自動更新に任せてるけど。
GExpertだかJEDIだかに__DATE__もどきがあったような気もしたけど忘れた。

18 :デフォルトの名無しさん:2009/12/06(日) 21:35:39
Delphi2010の体験版のIDEのツールバーがバグってるんですが直す方法ないですか?
具体的には http://up.ultra-zone.net/up3706.jpg.html みたいな感じで縦に伸びたり
ツールバー同士が重なってしまう状態です。
うろ覚えですが、インストール直後は大きさは普通で一部重なっているだけだったと
思うんですが、使ってるうちにだんだんと大きくなってきてますw

環境はXPSP3+IE8です。

19 :デフォルトの名無しさん:2009/12/08(火) 09:40:56
>Delphi2010の体験版のIDEのツールバーがバグってる
私も XPSP3/IE8 ですがこのような問題には出会っていません。

記憶では、ツールバーの不具合はビデオドライバが古い場合に出るように思います。

ツールバーを右クリック、カスタマイズダイアログの「戻す」ボタンを、個々のツールバーに対して押していったら
どうなりますか?リセットできるかもしれません

20 :デフォルトの名無しさん:2009/12/08(火) 10:20:04
>>18
これ見てワンワン
http://andy.jgknet.de/blog/?page_id=246
治るかも


21 :デフォルトの名無しさん:2009/12/08(火) 17:21:26
Win7にDel7インスコできるのかな?
以降、自分で試せは無しの方向で

22 :デフォルトの名無しさん:2009/12/08(火) 19:26:34
自分の手で試せ

23 :デフォルトの名無しさん:2009/12/08(火) 21:19:44
>>19,20
ありがとうございます、一応自己解決できましたので報告です。
修復インストールとか色々試したんですが、レジストリを弄ってなんとか直りました。
HKEY_CURRENT_USER\Software\CodeGear\BDS\7.0\Toolbars
のキーの中身を全部消したら大きさは元に戻りましたが、重なるのは相変わらずみたいです…
多分、一時凌ぎで根本的な解決にはなってないと思うのでビデオドライバの更新やパッチ当て
等もやってみようと思います。

D7から乗り換えの評価目的で入れて10日位ですが、なんか相変わらずバギーなIDEだなぁと言う印象
VSみたいにモッサリしてないのはいいんですけどね
ただ、言語仕様の拡張は結構魅力的なんですよね

24 :デフォルトの名無しさん:2009/12/08(火) 21:26:09
コード補完がもっさりしてるんだよなぁ。頻繁に使うだけあって、気になる。


25 :デフォルトの名無しさん:2009/12/09(水) 03:32:58
>23
ビデオ系ハードウェアの情報とかが無いと、これ以上は分かりませんね
ただ5年くらい前ならしも、最近はツールバーがらみのバグを聞いたことは無いので
かなりレアケースなのでは。とも思います。

画像とハード/ソフトウェア情報込みで、Embarcadero 本家フォーラムに投稿してみたら?

https://forums.embarcadero.com/forum.jspa?forumID=14

26 :デフォルトの名無しさん:2009/12/14(月) 17:07:50
開発環境はDelphi6で使用データベースはInterBaseです。
伝票入力画面にて得意先参照フォームを表示して得意先コードを設定しています。
伝票登録後、前回選択した得意先を選択状態にするためにLocateを使用して得意先参照フォームを表示しています。
得意先コードが得意先参照フォーム内のDBGridに表示されている場合はうまくいくのですが(例:得意先コードが
1から35でDBGridの表示行数が12行の場合で前回選択得意先コードが10の場合)、
DBGridから隠れている部分の場合(例:得意先コードが14)、「グリッドインデックスが範囲を超えています。]という
エラーメッセージが表示されます。
そのときDBGridの最終行には空のレコードが追加されています。Locateの戻り値はTrueです。
Googleで検索した結果、フォームのOnShowイベントにてDBGrid1.DataSource := DataSource1;
という記述をすればいいという検索結果がありましたので、試してみましたが効果はありませんでした。
なにがよい対処法はあるのでしょうか。よろしくお願いします。
(読みづらい文章ですみません。)

27 :デフォルトの名無しさん:2009/12/14(月) 17:51:33
こういうの見ていつも思うんだが、読みづらい文章だと自分で気付いてるなら
免罪符みたいに「読みづらい文章ですみません」なんて書かずに直せよ

28 :デフォルトの名無しさん:2009/12/14(月) 17:58:57
>>26
えーとなんだっけ?
delphiやめて5年ぐらいたつけどたしかbookmark系の処理で幸せになれるはず

29 :デフォルトの名無しさん:2009/12/15(火) 13:29:36
ちょっと特殊な環境なんですけど、英語版のWinXP(職場)と日本語版のVista(自宅)で、
ソースを持ってきたり帰ったりしながら開発しています。Delphiは7の英語版です。
それぞれ、新規にプロジェクトを作成して、TLabel等のCaptionに日本語を入力すると、
問題なく日本語で表示されるのですが、このソースをそのままもう片方のPCに持ってきて、
プロジェクトを開くと、Captionが文字化けしてしまいます。
ちなみに、dfmファイルを通常のテキストエディタで開くと、
object Button1: TButton
 省略
Caption = #381#192#141's'
 省略
end
このような感じになっています。
Delphiでフォームをテキストで表示した場合は、
object Button1: TButton
 省略
Caption = '実行'
 省略
end
このように文字化けせずに表示されます。
現状は、フォームをテキストで表示しクリップボードにコピーして、それをテキストエディタで
貼り付けて持って帰るようにしているのですが、大変面倒です。
何か良い解決方法はありますでしょうか。


30 :デフォルトの名無しさん:2009/12/15(火) 13:39:17
ん?何がしたいの?
文字化けはParent(Form側)のエンコードを固定させればいいだけな気がするけど

31 :デフォルトの名無しさん:2009/12/15(火) 13:50:23
>>30
フォームのフォントの文字セットはどちらの環境でも日本語になっています。
エンコードって、どこか別のところで設定できるのですか?


32 :デフォルトの名無しさん:2009/12/15(火) 14:01:24
使った事ないけどこういうの使うとか
ttp://www.geocities.jp/ht_deko/oldjunk.html#DFMCONV

33 :デフォルトの名無しさん:2009/12/15(火) 14:23:13
>>32
すみません。これで解決するような問題ではないような気がします。
どちらもDelphi7ですし…


34 :デフォルトの名無しさん:2009/12/15(火) 14:28:47
>>33
それで解決するからやってみろ
ったくしょうがねぇな
これも提示してやるから後は自分でやれ
ttp://homepage1.nifty.com/ht_deko/tech032.html

35 :デフォルトの名無しさん:2009/12/15(火) 15:00:20
procedure TForm1.Button1Click(Sender: TObject);
begin
IdHttp1.Request.ContentRangeStart := 100;
memo1.Lines.Text := IdHttp1.Get(edit1.Text);
end;

とやっても指定した位置から読み込みできないのですがどのようにすればいいのでしょうか?
現象としてはHTMLの先頭から表示されてしまいます。

環境はDelphi7 + Indy10.0.52です
どなたかわかる方よろしくお願いします。

36 :デフォルトの名無しさん:2009/12/15(火) 15:12:37
まずはリクエストヘッダを確認
Content-Range: bytes 100-/ほにゃらら
みたいになってるか?
なってないならカスタムヘッダつけろ
なってるならレスポンスコードを確認しろ
206以外が来たら鯖が対応してねぇ

つーかdelphi使ってもないのに何で俺しかいねぇんだよw

37 :デフォルトの名無しさん:2009/12/15(火) 15:27:43
>>36
うおーありがとうございます
リクエストヘッダ見たら付いてなかったのでカスタムヘッダ付けてみました
見事に成功しました感謝です

38 :デフォルトの名無しさん:2009/12/15(火) 15:31:24
>>34
どちらもDelphi 7なんですが、どういう事??
どう設定すればいいんですか?


39 :デフォルトの名無しさん:2009/12/15(火) 16:22:36
バイナリDFMにしたら?

40 :デフォルトの名無しさん:2009/12/19(土) 02:54:07
DBGridの仕様の問題でしょ。エラー出るならtryでトラップすればいい

41 :デフォルトの名無しさん:2009/12/20(日) 18:21:33
del7のコンソールアプリでたまに

---------------------------
test.exe - アプリケーション エラー
---------------------------
アプリケーションを正しく初期化できませんでした (0xc0000142)。[OK] をクリックしてアプリケーションを終了してください。
---------------------------
OK
---------------------------

というエラーが出るんだけどこれってunitのinitialization〜メインブロックより前の段階で出るメッセージ?

42 :デフォルトの名無しさん:2009/12/20(日) 23:03:47
ブレークポイント張ってみればいいじゃない

43 :デフォルトの名無しさん:2009/12/21(月) 06:09:30
OS が出す、.exe ローダーのエラーなので普通の人はブレークポイントは置けない。

エラーメッセージの英語版は
"Application failed to initalize properly (0xc0000142)"

ttp://systemwalker.fujitsu.com/jp/man/job/operationmgr/v5.0/old/document/trb-4/trbal05/trbal270.html
ttp://www.tomshardware.com/forum/217729-46-application-failed-initialize-properly-0xc0000142
あたりをみるに、システムの DLL の初期化に失敗。
「たまに」でるエラー。ということから
デスクトップヒープが足りない。ということかな。

もしそうだとしたら
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems
あたりを調整する必要がある。

まず、イベントビューアで OS のログを確認してみたら?

44 :デフォルトの名無しさん:2009/12/21(月) 12:32:04
そこまで言うならお前がやってよ

45 :デフォルトの名無しさん:2009/12/21(月) 15:40:44
初心者ってコンソールアプリ作りたがるけどコンソールのほうがデバッグ面倒臭そう

46 :デフォルトの名無しさん:2009/12/21(月) 17:57:13
>デバッグ面倒臭そう
そんなことはありませんよ

47 :デフォルトの名無しさん:2009/12/24(木) 22:45:10
FreePascal/Lazarus のスレは結局消滅して終わりか?

48 :デフォルトの名無しさん:2009/12/26(土) 23:55:38
Delphiで構造体を引数にとるDLLを作って、VC++から呼び出そうとおもったんですが、値の渡し方としては

void func1( TRec* rec );
void func2( TRec& rec );

のように参照渡し、ポインタ渡し、どちらのほうがいいんでしょうか?

49 :デフォルトの名無しさん:2009/12/27(日) 00:40:54
どっちでもいいが、NULLあるいはnilを渡したいときもあるだろうからポインタがおすすめ

50 :デフォルトの名無しさん:2009/12/27(日) 16:47:26
>>49
ありがとうございます。ポインタ渡しでいこうと思います

51 :デフォルトの名無しさん:2010/01/03(日) 02:32:26
すみません教えてください
日経ソフトウエアのTurboDelphiで始めるWindowsプログラムの本で
ジャンケンプログラムでラジオグループのイベントハンドラを作ろうとすると
エラーが出て作れません。
対策はあるでしょうか?
よろしくお願いいたします。

52 :デフォルトの名無しさん:2010/01/03(日) 02:34:41
エスパーさんは今休みじゃないかな?

53 :51:2010/01/03(日) 03:41:33
使ってるバージョンはDelphi2010です。
よろしくお願いいたします。

54 :デフォルトの名無しさん:2010/01/03(日) 04:12:48
ソースぐらいうpしろksg

55 :デフォルトの名無しさん:2010/01/03(日) 04:42:53
宣言部分無しで実装部分だけ書いちゃったんじゃないかとエスパーしてみる
とりあえずエラー出たならエラー内容も書こうよksg

56 :51:2010/01/03(日) 08:49:41
すみませんでした。

ジャンケンプログラムを入力してコンパイルすると、
本には書いてませんが、セミコロンが必要と表示されて
コンパイルすることができません。

57 :デフォルトの名無しさん:2010/01/03(日) 09:28:51
(´ρ`)そうなのかー

58 :デフォルトの名無しさん:2010/01/03(日) 09:30:12
( ゚д゚ )そうなんすか!

59 :51:2010/01/03(日) 09:37:57
すいません自己解決しました。
お騒がせいたしました。

60 :デフォルトの名無しさん:2010/01/04(月) 00:08:23
メモ帳を編集中にF2キーを押したら自前アプリで音を鳴らす という動作をするアプリを自作したいんですが
ぐぐってもくそ難しいページしか出てきません。

他アプリにフォーカスがある状態でキーイベントが発生したらそれを取得するサンプルコード下さい。
明日の朝までに欲しいので早くしてくれ。

間に合わなくなっても知らんぞ?

61 :デフォルトの名無しさん:2010/01/04(月) 00:14:09
ああ、ガムやるよ

62 :60:2010/01/04(月) 02:21:17
というかソース貼られてもわかんねぇからもういいや。ソース貼りたい奴はここ見ろ。
http://www2.biglobe.ne.jp/~sakai/usehook.htm

>>61
くっちゃくっちゃくっちゃ・・・・ぺっ

63 :デフォルトの名無しさん:2010/01/04(月) 04:32:43
結局何が言いたいんだ?

64 :60:2010/01/04(月) 04:44:15
>>63
質問取り消しな。俺には無理だ。

65 :60:2010/01/04(月) 05:31:20
もう見に来ないから売買

66 :デフォルトの名無しさん:2010/01/04(月) 17:04:55
delphi2010で、コード整形について質問です。

if then begin
1
end else begin
2
end;

のように、endとelseのあいだに改行の入らないようにしたいのです。

67 :デフォルトの名無しさん:2010/01/04(月) 17:13:25
>>66
ttp://edn.embarcadero.com/article/10280#8.2.3

うそん。(><)

// INCORRECT
end else begin
// CORRECT
end
else
begin

おじさん泣いちゃうぞ。

68 :デフォルトの名無しさん:2010/01/04(月) 20:01:25
>>66
delphi2010でそれできなくなったの?

69 :66:2010/01/04(月) 20:35:09
>>68
いままでのdel5しか使ったこと無かったので、ソースの整形は初めてですわ。
end else
begin
みたく、elseとbeginのあいだの改行がどう設定しても取れなくて。
前からそうだったのかな?

70 :デフォルトの名無しさん:2010/01/04(月) 21:08:42
>>69
俺の使ったことある物の記憶ではdelphi6,7,2007,2009はそんなことなかったと思う
俺も同じ書き方だからそれは不便だなー

71 :デフォルトの名無しさん:2010/01/04(月) 22:28:09
Delphi2010のエディタで、コメント等日本語を入力していると
時々バグって(文字化けみたくなる)落ちるのは、うちだけでしょうか?

72 :デフォルトの名無しさん:2010/01/04(月) 23:32:11
落ちるのは無いけど、コメント削除中とかにカーソルが変なとこ飛んで文字化けになるのはたまに起きる


73 :デフォルトの名無しさん:2010/01/05(火) 23:07:53
>>72
おおよそ、同じような現象だと思います。
コメントの途中で挿入したり消したりしてると、
変なところで改行されたり文字化けしたり。
最新アップデートでも直ってなかったので
諦めるしかないかな…

74 :デフォルトの名無しさん:2010/01/06(水) 07:21:02
あきらめられても。ねぇ。

再現できるデータとか何か無いかな。> エディタ周りバグ


75 :デフォルトの名無しさん:2010/01/06(水) 07:21:51
化けた直後の画面とかだけでも有れば助けになるかとおもう。

76 :デフォルトの名無しさん:2010/01/06(水) 17:56:21
つ キーロガー

でも、うちはIDEfix入れてるからかわからんけど
そいうことないなぁ。

77 :デフォルトの名無しさん:2010/01/07(木) 17:37:32
用語の使い方が良く分からないので難解なところはエスパーしてください。

Application.CreateForm(TForm2, Form2);
これを、ですね。

procedure TEST00(h:TComponentClass; f:TForm)
begin
Application.CreateForm(h, f);
end;

な感じにフォームを引数にした関数にして

TEST00(TForm2, Form2);

みたいな呼び出し方をすることはできませんか。
ちなみに上のやり方はペケです。
コンパイルはとおりますけど、実行すると激しく長いエラー文で怒られます。







78 :デフォルトの名無しさん:2010/01/07(木) 17:52:53
動作確認済み。

procedure test(InstanceClass: TComponentClass; var Reference);
begin
 Application.CreateForm(InstanceClass, Reference);
end;

第二引数に Var がついていないので
 TEST00(TForm2, Form2);
の呼び出しで Form2 の内容が更新されないことが、実行時エラーの直接の原因です

79 :デフォルトの名無しさん:2010/01/07(木) 18:12:49
動きます、たしかに。
これで朝から夕方まで悩んでました。
ありがとうございました。

80 :デフォルトの名無しさん:2010/01/07(木) 20:35:58
それをやる意味にすごく興味があるんだけど、
なぜそんなことをしようと思ったの?

81 :71:2010/01/07(木) 22:28:18
来週開発環境がXP→7になるのでそれで直るかもしれないし
まあいいやと思いつつ、参考までにエディタが文字化けした
ときの画像を貼っておきます(モザイクの箇所はすべて正常です)。
ブレークポイントが張られていますが、これも私が張ったのではなく、
エラー発生時に勝手にこうなります。
ttp://convini.ddo.jp/imguploader/src/up1650.png

日本語部分の途中で挿入や削除をしようとすると
発生する気はします。IME(MS-IME2003)との
相性とかでしょうか…。
ttp://andy.jgknet.de/?page_id=246
に置いてあったIDE Fixも当ててみましたが、変わらずでした。

82 :デフォルトの名無しさん:2010/01/08(金) 04:41:55
文字列入力中に文字化けが起きて
勝手にブレークポイントのマークが付く。と。
メモリ上のエディタバッファが壊れているように見えますね。

ここまでひどいとバグレポートが他にも有っても良いような.....


83 :デフォルトの名無しさん:2010/01/08(金) 09:59:10
あの超つかいにくいエディタを使っている人っているんだね。
基本的に日本語処理部分は十分なテストは行われていないから
避けられるものなら、避けた方が無難。
使い慣れた外部エディタ使えば問題は一気に解決。
Indyの日本語処理もひどかったなぁ。


84 :デフォルトの名無しさん:2010/01/08(金) 11:02:37
>Indyの日本語処理もひどかったなぁ。
Indy に関しては、あきらめずに、バグレポートを送り続けるしかないでしょう。

85 :72:2010/01/08(金) 17:01:34
>>81
うちではATOK使ってそうなってるから、IMEとの相性はあまり関係ないかも
何となくだけど、2バイト文字の片方のバイトだけ削除したりして化けてる気がする
あとブレークポイントが勝手に張られたことはないなぁ

86 :デフォルトの名無しさん:2010/01/08(金) 18:56:24
>>80
えと、ですね。
職場用のアプリを作っているんですが、いくつものアプリ(プロジェクト?)
に分けなきゃならないほど、いっぱいフォームがあって、ついでに似たような
処理のフォームがやけにいっぱいあるので、その処理をどこかにまとめて書いて
おけないかなと(「フォームを開く」ってのもその似たような処理のひとつ)

87 :デフォルトの名無しさん:2010/01/09(土) 23:25:17
>>86
TFrameとか使うのかも知れない

88 :デフォルトの名無しさん:2010/01/10(日) 05:48:30
>>86
それだとちょっとおかしくないかな?
あの処理はフォームを「開く」処理じゃなくてフォームを「作る」処理だよ
そもそもApplication.CreateFormは自分で呼ぶことはあまりない関数だし

89 :デフォルトの名無しさん:2010/01/10(日) 08:48:58
何でそんなところに絡みたがるのかがよくわからん

90 :デフォルトの名無しさん:2010/01/10(日) 11:33:17
無料のdelphiって無いですか?
昔personal6ってのがあったのですが・・・

91 :デフォルトの名無しさん:2010/01/10(日) 11:40:02
Turbo Delphi Explorerってのがあったけどそれもなくなった。
今あるのは期間限定のトライアルのみ。
新会社の方針として完全にアマチュアそっちのけになったのだろう。
某が潰れる前にDel6Per認証解除パッチでも出してくれればよかったのに。

92 :デフォルトの名無しさん:2010/01/10(日) 12:10:38
ボーランド終わったな

93 :デフォルトの名無しさん:2010/01/10(日) 13:06:54
もうとっくにEmbarcaderoに身売り済みですが


94 :デフォルトの名無しさん:2010/01/10(日) 15:10:16
del6personalって認証しないでも一応使えるぞ
いいのか悪いのか別としてw

95 :デフォルトの名無しさん:2010/01/10(日) 15:25:13
そもそもダウンロード出来るところがなくなっちゃった

96 :デフォルトの名無しさん:2010/01/10(日) 15:28:01
どっかの大学がサイトに置いて無かったっけ

97 :デフォルトの名無しさん:2010/01/10(日) 15:30:39
もう無いよ

98 :デフォルトの名無しさん:2010/01/10(日) 16:14:27
CodeGearからダウンロードしたのがあったなと思って、
ディスクのなかを探してみたら
Turbo Pascal 3.0
が出てきた。なつかしい・・・・


99 :デフォルトの名無しさん:2010/01/10(日) 16:18:01
delphi6personalとturbodelphiどっちもあるけど再配布とかしたらウルサイこと言われんのかな?

100 :デフォルトの名無しさん:2010/01/10(日) 16:45:21
俺は言わないよ

101 :デフォルトの名無しさん:2010/01/10(日) 16:52:02
そういえば大学の図書館のdelphi6の本で付属CD-ROMに入ってたぞpersonal
大きい図書館で探せばあるかもね

102 :デフォルトの名無しさん:2010/01/10(日) 18:42:38
>>88
おかしいと言われ、もしかしてと不安になって、ちょっとだけ実験。
ああやっぱりとショック受けてます。

フォームは全部visible、起動時クリエイトはform1だけにしてました
作業を始めたとき、かなりの数のフォームになりそうだってことで
起動時の一気生成は絶対無茶だって思ったんです。
でもけっきょく分割しなきゃならなくなり、一アプリあたりのフォーム数はせいぜい10.
10個の一気生成ってのもそれはそれは不安を誘いますけど
メインフォーム以外のクリエイト時プロシージャをコメントアウトしたうえ
実験してみたら、まったくどうってことありませんでした。
(起動時間もメモリ消費も違いがなさ過ぎて唖然)

書き直したほうがいいですか?

>>87
助言ありがとうございます
落ち着いたら調べてみます(いまかなりあせってる)

103 :デフォルトの名無しさん:2010/01/10(日) 21:23:12
turboはあるから6が欲しいなぁ

104 :デフォルトの名無しさん:2010/01/10(日) 23:05:37
>>102
10個程度は全然大した数じゃないよ
例え100個作ってもOnCreate内の処理(時間)が少しだけならほとんど変わらない
素直にIDEが自動生成したコードでフォーム作ればOKだと思う

105 :デフォルトの名無しさん:2010/01/11(月) 00:44:12
基本となるフォームひとつだけ作って、条件ごとに変化するようにすればいい
似たようなフォームをたくさん作るなんてアホすぎる・・・

106 :デフォルトの名無しさん:2010/01/11(月) 11:49:08
とりあえず10個のフォームにどんな違いがあるのかさらしたら?
些細なものならCreate時に対応
何せ基本はいるときに作って使ったらすぐに消すことだよ

107 :デフォルトの名無しさん:2010/01/11(月) 18:30:14
>>条件ごとに変化するようにすればいい
ごめんなさい、そのやりかたは、何ていうかイヤなんです。
使っているうちに機能追加が出てくるのは分かりきっているので。
複雑になりすぎてわけわかんなくなります(前にMSAccsessで痛い目にあってる)

>>10個のフォームにどんな違いがあるのかさらしたら
10個ってのは似てる物の数じゃないです。アプリを分割して一アプリあたり
それぐらいにとどめようかなと。
最終的にいくになるかは分かりません。

ところで
>>基本はいるときに作って使ったらすぐに消すことだよ
これは、フォームの立ち上げ方のことですか。
Show,Hideじゃなく、Create,Releaseでもいいと?
だとすると助かるんですけど(書き直そうと思ってた、というかすでに一部
書き直しに入って早くも泥沼)

108 :デフォルトの名無しさん:2010/01/11(月) 19:26:30
VBプログラマぽい考え方だねw AccessでVBAやってたんでしょ

109 :デフォルトの名無しさん:2010/01/11(月) 19:36:28
はい
というかちょっと前まではそれしかいじったことがないです。
プログラマなんてものではないです。

110 :デフォルトの名無しさん:2010/01/11(月) 20:30:05
>>>基本はいるときに作って使ったらすぐに消すことだよ?
>これは、フォームの立ち上げ方のことですか。
俺も基本は必要になったら、フォームをCreateしていらなくなったらRelease。

111 :デフォルトの名無しさん:2010/01/11(月) 22:02:14
なんとなくだけど「はい・いいえ・キャンセル」程度のダイアログもフォームで自作してそうだなw

112 :デフォルトの名無しさん:2010/01/12(火) 13:50:38
delphi 6 personal見つけてインスコしたけど
special launchのソース読み込むと
txpmanifestが見つかりません。とかエラーが出るおorz

113 :デフォルトの名無しさん:2010/01/12(火) 13:52:15
personalにXPManifestはなかった筈

114 :デフォルトの名無しさん:2010/01/12(火) 14:30:01
personalかどうかは関係ないだろ
そもそも6には存在しないんだから

115 :デフォルトの名無しさん:2010/01/12(火) 14:32:29
そうだった勘違いしてた

116 :デフォルトの名無しさん:2010/01/12(火) 14:38:12
えー
special launchって6じゃないのかorz

117 :デフォルトの名無しさん:2010/01/12(火) 15:45:13
delphi 7ください!

118 :デフォルトの名無しさん:2010/01/12(火) 15:53:41
>>111
版権物のソフトだと全部のダイアログにイラスト出せとか無理言われる

119 :デフォルトの名無しさん:2010/01/12(火) 19:42:35
>>118
その程度ならいちいちフォームを設計しなくても、CreateMessageDialogで取得したTFormのインスタンスに
動的にTImage等を作成して乗っけてやればいい
むしろ全部に出さないといけないならコードでやった方が楽

120 :デフォルトの名無しさん:2010/01/12(火) 21:45:50
SetLengthで確保した領域は次回SetLengthの時に勝手に解放してくれますか?


121 :デフォルトの名無しさん:2010/01/12(火) 23:08:24
やってみれば分かるが解放される

122 :デフォルトの名無しさん:2010/01/13(水) 02:41:37
>>120
ソースが見れるならSystem.pasの該当箇所を見ればSetLengthが内部では何やってるか分かる

123 :デフォルトの名無しさん:2010/01/13(水) 02:44:31
ソースは読めるのにスレタイは読めないのか

124 :デフォルトの名無しさん:2010/01/13(水) 03:20:57
>>121>>122
ありがとうございます
system.pas覗いてみますわ

125 :デフォルトの名無しさん:2010/01/13(水) 11:29:02
del7で簡単なCGIを作りたくてdelを使ったCGI作成は
ググって大体分かったのですが、フォームの内容を
メール送信する時ってどうすればいいか、教えてください。
sendmaneとか見つけたのですが、利用制限があるので
(個人使用なので引っかかることはないのですが)
出来れば制限のない方法があれば教えて欲しいです。
よろしくお願いします。

126 :デフォルトの名無しさん:2010/01/13(水) 11:45:51
普通にindy使えばよくね?


127 :デフォルトの名無しさん:2010/01/13(水) 12:05:34
dです。
Indyスレ行ってきます。

128 :デフォルトの名無しさん:2010/01/14(木) 22:01:40
indyは正直使えない

129 :デフォルトの名無しさん:2010/01/14(木) 23:26:35
わけでもない

130 :デフォルトの名無しさん:2010/01/14(木) 23:42:18
男は黙って

131 :デフォルトの名無しさん:2010/01/15(金) 00:04:48
indy

132 :デフォルトの名無しさん:2010/01/15(金) 07:53:00
TIdMessageは腐っているが
それ以外は、まあまあ使える


133 :デフォルトの名無しさん:2010/01/15(金) 08:31:16
Synapse最高!

134 :デフォルトの名無しさん:2010/01/15(金) 11:08:43
メールくらいソケット通信でやればよし

135 :デフォルトの名無しさん:2010/01/15(金) 13:11:36
というわけでもない

136 :デフォルトの名無しさん:2010/01/15(金) 21:19:11
匿名関数をWin32APIのコールバックとして渡すことは可能でしょうか?
例えば次のようなことがしたいです
EnumWindows(
 function(hwnd: HWND; lParam: LPARAM): BOOL
 begin
  // 処理
 end, 0
);
MakeObjectInstanceのようなものがあればよいのですが…。
バージョンは2010です。

137 :デフォルトの名無しさん:2010/01/16(土) 18:18:21
これから試してみるけど
全力わはー
ttp://d.hatena.ne.jp/tales/20100105
これが参考になるだろうか。

138 :デフォルトの名無しさん:2010/01/16(土) 18:44:49
無名関数に STDCALL つけられないから、コールバックにはそのままでは使えないな。


139 :デフォルトの名無しさん:2010/01/18(月) 01:04:17
>>138
俺、delphi2010使ってないからよく分かんないけど、できたのかな?
ttp://d.hatena.ne.jp/tales/20100117

ってゆうかもしかして、本人様?

140 :デフォルトの名無しさん:2010/01/18(月) 01:14:18
stdcallを指定してもまだコールバックとしては使えないみたいですね…。

141 :デフォルトの名無しさん:2010/01/18(月) 08:17:12
stdcall 指定した無名関数から、関数のポインタだけを取り出す。
無名関数が親関数が終了するまで存在し続ける

この二つを実装、確認しないといけないですね
もう少し時間が必要です


142 :デフォルトの名無しさん:2010/01/18(月) 14:43:06
>>137
2010持ってないから何やってるのかわからないんだけど、これってすごいの?

143 :デフォルトの名無しさん:2010/01/18(月) 15:06:53
すごいっていうかもうlambdaはあって当たり前の機能

144 :デフォルトの名無しさん:2010/01/18(月) 17:38:44
TStringListのCustomSortに無名関数が渡せない俺

145 :デフォルトの名無しさん:2010/01/18(月) 23:03:13
Delphi 2010についてるQA検査を何となく使ってみたところ、
parameter 'XX' でCamel記法を使用、というのが警告の対象になったんですが、
Camel記法ってDelphiの推奨の命名法じゃなかったでしたっけ。
サンプルコードも大体Camelになってますし。
試しに変数名を小文字開始にしたら、警告対象外にはなったんですが。
新しめのコーディング規約とか、どこかにまとまってますか?

146 :デフォルトの名無しさん:2010/01/18(月) 23:13:52
Pascalは昔からPascal記法だろ
言語名が記法の名前になってるくらいで新しくも何ともない
まとめ探す前に基本を勉強し直してこい

147 :145:2010/01/18(月) 23:24:02
>>146
あぁ。camelっていうと先頭小文字を呼び分けるときにも使うんでしたっけ。

引数をPascal記法(InfixCaps、先頭大文字、単語の頭大文字)で記述しているにもかかわらず、
QA検査にかけると、「parameter 'XX' でCamel記法を使用」という警告が出てきて、
引数の頭文字が大文字なのは普通だろ、なんで警告出すんだ、と思ったので、
まさかどこかで推奨の命名法が先頭小文字に変わった? と思って質問した次第です。

「昔からPascal」なのは知ってるので、それで警告出されて不思議に思ったってことですね。


148 :デフォルトの名無しさん:2010/01/18(月) 23:38:48
プログラミングでcamelっていったら普通はlower camel caseを指すと思うが

149 :デフォルトの名無しさん:2010/01/18(月) 23:46:12
>>147
検査項目をクリックする時間の方がここで回答を待つ時間より早いと思いませんか?

150 :デフォルトの名無しさん:2010/01/19(火) 00:45:45
>>147
試してみたら確かに警告出たが、そもそもこんな機能あることすら知らなかったぞ
[Camel記法を使用]って、使用しろ、なのか使用しているから警告、なのかこの日本語だと分からんな

>>149
警告の内容が妥当かどうかの質問なんじゃないのか?
警告が出たのに意味も分からずにOffにするってのはナンセンスだと思うが。
しかし警告自体がナンセンスだからOffにしとけ>>147

Javaとかだとcamelっていうと大体lowerを指すけれど、
DelphiでCamelっていうとUpperだと思ってる俺って古いのかな。
http://edn.embarcadero.com/article/10280
古いドキュメントだが、これにもThis is known as InfixCaps, or Camel Caps.
って書いてあるんだよな。
最近読んだものだと、cakephpとかのマニュアルもupperを単にcamelって書いてあった気がする。
影響力だか呼び分けだかでlower > upperなのは同意

151 :デフォルトの名無しさん:2010/01/19(火) 03:02:11
PByteArrayの長さを取得するにはどうすればいいでしょうか。
Lengthは文字列しか受け付けてくれないみたいで……

152 :デフォルトの名無しさん:2010/01/19(火) 03:04:37
それは質問自体が破綻している。
ソースで示さないとわからない。

153 :デフォルトの名無しさん:2010/01/19(火) 03:41:49
Length(PByteArray)みたいな形で一発取得出来る関数があるものとばかり思い込んでいました。恥ずかしい
ソースで示さないとということは、中身に合わせて一桁ずつ中身があるかどうかを確認してカウントしないといけない、
ということでよろしいでしょうか?

Delphi全然慣れていないので型周りの把握が全然です。

154 :デフォルトの名無しさん:2010/01/19(火) 04:04:33
慣れてないならPByteArrayは尚更使用すべきじゃないと思う
>>152のいうようにまずどういう状態かソースで示せ

155 :デフォルトの名無しさん:2010/01/19(火) 10:03:53
Byteは0〜255の何を入れても構わないので「中身があるかどうかの確認」なんてやりようがない。
PByteArrayが何を指しているのかわからないので、サイズを一般的に求める方法はない。
だからみなさんがソースを出せと言ってる。

文字列や配列でLengthが使えるのは、内部的にサイズを記録してあるから。

156 :デフォルトの名無しさん:2010/01/19(火) 10:40:14
くだすれだし、もう少し優しい言い方でも良いかなぁ。とおもいつつ。

Length (組み込み)関数が使えるのは「長い文字列型 (AnsiString, WideString, UnicodeString)」 と
「動的配列 (array of 〜)」です。

PByteArray の定義上の型は 「TByteArray へのポインタ」で
TByteArray は Byte 型の「静的」配列となっています。

この TByteArray型は動的配列が Delphi 言語に導入される前に使われていた、長さ不定の Byte 配列を
参照するための便宜的な型です。範囲チェックをオフにすることで任意のインデックスの場所を参照できました。
もちろん配列の領域確保と正しい場所へのアクセスはプログラム自身が保証する必要があります

現在は動的配列が導入されたため、領域確保に関しては動的配列を使えば解決できます。
Length または High を使えば実行時に配列の大きさを知ることもできます。

PByteArray 型は、キャストすることによって任意のポインタを Byte の配列として扱えるため
動的配列が導入された後もよく使われます。

PByteArray 型単体では、単なるポインタなのでコンパイラも(回答者も)それ以上のことは何も判りません。
PByteArray 型の指す実体が、何によって確保されているかによって、その実体の大きさを取得する方法は異なります。
PByteArray 型として格納されているポインタが不定なのであれば、そのポインタの指す「何か」の大きさを
知る方法は、まずありません。設計から見直しましょう。

157 :デフォルトの名無しさん:2010/01/19(火) 12:42:04
あの、、、そんなこと長々と言われても分からないので。。。。
慣れてないって言ってるでしょう。。。

158 :デフォルトの名無しさん:2010/01/19(火) 14:37:34
Delphi6 personalを使用しています
IDEでファイルを複数開いていて、IDEを再起動したとき
ファイルが1つしか開いてない状態になるんですが、
ファイルが複数開いたまま起動するにはどうしたらいいでしょうか?

159 :デフォルトの名無しさん:2010/01/19(火) 14:57:04
D7なのでD6とはメニューの名前は違うかもしれないけど
ツール→環境オプション→設定タブ
自動保存の設定 内の プロジェクトデスクトップ にチェック

160 :158:2010/01/19(火) 17:03:24
>>159
できました、ありがとうございます

161 :デフォルトの名無しさん:2010/01/21(木) 16:08:30
そうそう それぐらいの答えやすい質問をしろ ポインタ配列なんか難しくてわかんないから

162 :デフォルトの名無しさん:2010/01/21(木) 17:19:01
知らないならレスしないでいいです >161

163 :デフォルトの名無しさん:2010/01/21(木) 17:24:53
>>161の頭を初期化しようとしたのですが、
「回復不能なエラーです」
という表示が出て初期化できません。
これはバグでしょうか?

164 :デフォルトの名無しさん:2010/01/21(木) 18:25:57
初期化ではなくFreeAndNilをご利用ください。

165 :デフォルトの名無しさん:2010/01/21(木) 18:30:14
>>162
間違ってるぞお前
正しくは「知らないならレスしないでください。ウザイだけです。」だ

166 :デフォルトの名無しさん:2010/01/21(木) 19:17:26
わかりました。

>>165
知らないならレスしないでください。ウザイだけです。

167 :151:2010/01/21(木) 22:56:51
>>154-155
メモリ確保したり解放したりガチャガチャやっているので、PByteArrayを使っています。
Delphi内部で扱う分には出来るだけ安全な型で処理したいものですが、
DLLファイルでポインタを受けたり投げたりもしているので、その辺りはポインタを生で扱っています。
はっきり把握出来ている部分だと速度の為に直接メモリ弄ったりビット演算したりもするんですけれど……。

>>156
どうもありがとうございます。別で長さを管理して、ポインタ代入時やデータ更新時に併せて更新するように書き直しました。

少しDelphiにも慣れてきたのでテストコード一杯書きながら色々確認しています。
答えて貰えるだけでもありがたいですし、ソースを出せ、というのもわざわざ確認してくれようという思いからでしょうし、
ありがたい限りです。どうもありがとうございます。

しかしくだすれでも偽物って沸くんですね……。回答遅くなった私が悪いのか。


168 :デフォルトの名無しさん:2010/01/21(木) 23:35:26
分かってるのに聞いたの?
タチ悪いね

169 :デフォルトの名無しさん:2010/01/22(金) 03:46:38
はいはい。素直に負けをみとめろや > 168

>くだすれでも偽物って沸く
2ch ですから。必要に応じてトリップ使いましょう

170 :デフォルトの名無しさん:2010/01/22(金) 10:11:16
Delphi2010でCtrl+Dを押すとコードが整形されてしまうので
これを抑止したいのですが可能でしょうか?

あるいは、コードフォーマッタの設定で、
{$REGION 'ほにゃ'}
{$ENDREGION}
の前後に空行を入れる設定はあるでしょうか?
どちらかできればよいのですが…

171 :デフォルトの名無しさん:2010/01/22(金) 10:51:28
リファクタリングのショートカットの Ctrl-D を抑止することはできません。

{$REGION を含むコメントの前後に空白を入れる機能はありません

Ctrl-D に関しては、カスタム拡張モジュールを作成できれば抑制できるかもしれません。

コードフォーマッターそのものを停止して良いのであれば
bin\Embarcadero.Modeling.Formatter.dll
を別の名前にリネームして再起動すれば Ctrl-D のキーアサインごと消えて無くなります。

レジストリでコントロールできない。のかな?だれか知ってるひといないかな?

172 :170:2010/01/22(金) 11:40:17
>>171
ありがとうございます。
フォーマッタ自体を使えなくしたかったので、
DLLのリネームで事足りました。
Ctrl+SとかCtrl+Cを押し間違えたとき勝手に
整形されるのでイライラしておりました。

173 :デフォルトの名無しさん:2010/01/22(金) 12:59:56
>>169
厨ってすぐに勝ち負けとか言い出すよね
何かトラウマでもあるのかな?かわいそう

174 :デフォルトの名無しさん:2010/01/22(金) 14:00:13
64bitのバイナリ出力できるようになるのは次のバージョンからですか?

175 :デフォルトの名無しさん:2010/01/22(金) 15:31:21
>>174
迷子ですか?新スレ立ってますよ
http://pc12.2ch.net/test/read.cgi/tech/1264114906/

176 :デフォルトの名無しさん:2010/01/24(日) 22:58:15
ポップアップメニューを表示してそれを選ぶなりキャンセルするなりしたら即終了する
フォームを一切出さないフォームアプリってどうやって作ればいいんですか?

177 :名無し募集中。。。:2010/01/24(日) 23:30:35
メインウィンドウ非表示&スプラッシュウィンドウで

178 :デフォルトの名無しさん:2010/01/25(月) 15:09:59
ポップアップ出すだけなら、非表示どころかそもそも作る必要すらない
スプラッシュウィンドウも然り
TPopupMenuとTMenuItemを動的生成するだけでいい

179 :デフォルトの名無しさん:2010/01/29(金) 19:48:25
DMonkeyってやたらexeのサイズが大きくなるけど
マイナーな機能取っ払ってサイズを劇的に小さくする技ってないの?

180 :デフォルトの名無しさん:2010/01/30(土) 03:00:37
あの程度のサイズ増加を気にするのはお前だけ

181 :デフォルトの名無しさん:2010/01/31(日) 06:57:17
>>179
あるよ

182 :デフォルトの名無しさん:2010/02/01(月) 15:02:08
>>179
ないよ

183 :デフォルトの名無しさん:2010/02/01(月) 23:30:50
>>99
TurboDelphiお願いします

184 :デフォルトの名無しさん:2010/02/02(火) 01:25:39
いくら出せますか?

185 :デフォルトの名無しさん:2010/02/02(火) 02:31:12
>>183
http://turbomirror.com/
他にもググればいくらでも出てくる

186 :デフォルトの名無しさん:2010/02/02(火) 02:40:57
はいおつかれw
予想どうりw

187 :デフォルトの名無しさん:2010/02/05(金) 15:30:54
??

188 :デフォルトの名無しさん:2010/02/05(金) 21:39:13
質問です。
あるツールのフロントエンドを作っています。
そのツールがパスの通っているディレクトリのどこかに存在するか否か確認する方法を教えてください。
ツールの実行ファイル名はわかっています。

189 :デフォルトの名無しさん:2010/02/05(金) 21:41:17
SearchPath

190 :188:2010/02/05(金) 21:46:13
>>189
ありがとうございます!

191 :デフォルトの名無しさん:2010/02/10(水) 13:38:38
はじめまして。
以前から興味があったのですが、今回思い切って初めてDelphi2010Proを購入してしまいました。
頑張って勉強していきたいと思います。
じつは、IDEの挙動について気になった事があり、お尋ねしたいと思います。
VCLその他の機能などをツールバーボタンに並べてみたのですが、マウスカーソルをボタンに持っていってもツールチップが表示されません。
ぼんやりとした記憶なのですが、インストール直後はちゃんと表示されていたような気がするのです。
まだまだボタンのアイコンと機能が頭の中で繋がらないため、ツールチップが表示されると大変助かるのですが(とくにVCL)…元々表示されないものでしたでしょうか。
ぐぐっても答えになりそうなページが見つからず、ご助言頂ければ幸いです。よろしくお願いいたします。
追伸 オプション内ツールパレット→「ボタンのキャプションを表示」にはチェックを入れてあります。

192 :デフォルトの名無しさん:2010/02/10(水) 16:23:04
チェックしないで下さい

193 :デフォルトの名無しさん:2010/02/11(木) 09:47:17
>>191
ShowHintプロパティ
ttp://docwiki.embarcadero.com/VCL/ja/Controls.TControl.ShowHint

194 :191:2010/02/11(木) 11:31:15
>>192さん、
チェックの有無では変化ありませんでした。ツールバーカスタマイズメニュー下のツールチップON/OFFでも効果ありませんでした。
>>193さん、
アプリではなくIDEそのもののチップなので…でも紹介下さったページ勉強になりました。

再インストールとか色々調べてみましたら、やっと原因が判りました。
犯人は同時起動しているタブブラウザのタブ数でした。
60個近く開いているタブ数を減らしましたらチップが表示されるようになりました。
タブ数何個以下とは決まっていないみたいなので、よく分かりませんがリソースを食い合いしてたって事なんでしょうか。
IEコンポーネントベースだからなのかプログラム自体の問題なのかXPの問題なのか…勉強不足でわからないのですが、とりあえず自分の環境の所為と言う事がわかりました。

変な原因ですみません。ご回答頂きありがとうございました。



195 :デフォルトの名無しさん:2010/02/13(土) 02:25:36

ツールバーのカスタマイズの実装方法について教えてください。

CustomizableプロパティをTRUEに設定して、
OnCustomizeCanDeleteとかOnCustomizeNewButtonとかのイベントを使うのだと思うのですが、
具体的にどのようなプログラムを書けばいいのでしょうか?

196 :デフォルトの名無しさん:2010/02/13(土) 15:06:15
まず自分で分からないなりに書いてみたの?

197 :デフォルトの名無しさん:2010/02/15(月) 09:01:02
TCollectionから派生させたTGraphItemのItemsに、TCollectionItemから派生させたTGraphItemsをリストするのはできました。

で、質問なのですが、
TGraphItemから派生させたTGraphBox,TGraphAxsis,TGraphLegend,TGraphDataなどの子クラスを同じTGraphItems.Itemに
リストしたいのですが、どうすればいいのでしょうか?
同じクラスしかリストできない?

ちなみにD6です。
よろしくお願いします。



198 :デフォルトの名無しさん:2010/02/15(月) 09:05:00
あ、間違いです。

TCollectionから派生させたTGraphCollectionのItemsに、TCollectionItemから派生させたTGraphItemをリストするのはできました。
で、質問なのですが、
TGraphItemから派生させたTGraphBox,TGraphAxsis,TGraphLegend,TGraphDataなどの子クラスを同じTGraphColection.Itemsに
リストしたいのですが、どうすればいいのでしょうか?

です。
よろしくお願いします。


199 :デフォルトの名無しさん:2010/02/15(月) 14:00:40
つD2010

200 :デフォルトの名無しさん:2010/02/15(月) 14:04:43
D2010だと簡単にできるのですか?

D2006だっけ(?)は持ってるけど使ってないんです。


201 :デフォルトの名無しさん:2010/02/15(月) 14:23:51
つかTListを委譲したクラスを作ればいいじゃん。
TCollectionから派生させるいみがわからん。

202 :デフォルトの名無しさん:2010/02/15(月) 14:52:42
オブジェクトインスペクタに出すならTCollectionの方が向いてるとかじゃないの?
コンポ作らないからよくわかってないけど。

203 :デフォルトの名無しさん:2010/02/15(月) 15:09:29
TListなりに放り込んで、各子クラス用のプロパティエディタを作ったほうが簡単だって事?



204 :デフォルトの名無しさん:2010/02/15(月) 15:26:29
201みたいに答えわからない奴は書き込まなきゃいいのに。

って思う。
まぁ、俺もそうだけど…


205 :デフォルトの名無しさん:2010/02/15(月) 16:16:42
>>198
リストしたいのですがって、派生クラスならできるでしょ
結局のところ何がしたいの?

206 :デフォルトの名無しさん:2010/02/15(月) 16:47:50
>>205

要はグラフのコンポーネントなんですが、軸だとか凡例だとか項目名の子クラスをリストして、
リスト順に描画しようかと思ったわけです。

簡単そうではないので、仕方ないので各子クラス用のTCollectionを拵えて、
描画順は固定でいくようにします。



207 :デフォルトの名無しさん:2010/02/15(月) 17:13:24
TListやTCollectionを継承する人はdelphi初心者というよりプログラム初心者な感じがするな

208 :デフォルトの名無しさん:2010/02/15(月) 17:23:34
じゃぁ、今は何使うの?


209 :デフォルトの名無しさん:2010/02/15(月) 17:25:16
>>206
描画順用のTCollection作って、個別のTCollectionと中身共有すればいいだけじゃないの?
簡単そうではないという判断基準はどこから出たの?

>>207
自分はバカだという新手の自己紹介ですか?

210 :デフォルトの名無しさん:2010/02/15(月) 17:27:43
初心者かどうかはともかく10年以上も前のテクニックだとは思う

211 :デフォルトの名無しさん:2010/02/15(月) 17:30:20
なぜだ

212 :デフォルトの名無しさん:2010/02/15(月) 17:35:30
>>209
>描画順用のTCollection作って、個別のTCollectionと中身共有すればいいだけじゃないの?
なるほど、描画順はほかのリストで管理って言うのはいいですね。

>簡単そうではないという判断基準はどこから出たの?
そのCollectionにItemを追加する時に、どの子クラスを追加するかを指定する術をオブジェクトインスペクタが持っていないので
追加するときは規定クラスを追加して、その基底クラスのKindプロパティみたいな物を弄ると、そのプロパティに沿った子クラス
が作られる。みたいなものを考えていたのですが・・・

単一のCollectionにそんな機能を盛り込むよりも、一つの子クラスに一つのCollectionを与えたほうが簡単かなっと。
あとは描画順だけの問題なので、描画順のリストなりCollectionで対応しようと思います。

昔、「Visualこんぼ」っていうActivXコントロールがあったのですが、そのグラフ機能を模倣しようとしていたわけです。
だれか使ったことがある人いますか?



213 :デフォルトの名無しさん:2010/02/15(月) 17:37:20
>>210

リストすることが10年前のテクニックなのか?
古いも何も、リストする事は普通だろ?配列とか使わないの?あなたは。

どこを指して古いと言っているのかわからないからおせーて。


214 :デフォルトの名無しさん:2010/02/15(月) 17:47:12
元質問者そっちのけで申し訳ないけど、俺もその今時だか中級車向けだかのテクニックを教えてほしい。
煽りとかでなく、自分が古い知識のまま止まってる気がするので。

215 :デフォルトの名無しさん:2010/02/15(月) 17:55:28
今はジェネリッククラスの時代だ

216 :デフォルトの名無しさん:2010/02/15(月) 17:56:11
まさか、動的配列とか言わないですよね。


217 :デフォルトの名無しさん:2010/02/15(月) 17:56:50
>>212
そういうことならオブジェクトインスペクタでボタン押した時に、
独自の編集フォームを表示するようにして、そこで追加クラス選べるようにすればいいんじゃない?
ぱっと思いつく範囲ではGLSceneがそういうことしてたと思う
描画順を別にしておいた方が実装は楽だろうけど

>その基底クラスのKindプロパティみたいな物を弄ると、
>そのプロパティに沿った子クラスが作られる。みたいなものを考えていたのですが・・・
子クラスが作られるという処理自体は簡単に作れるけど、
子クラスだけ持ってるプロパティがオブジェクトインスペクタに表示されるわけはないよね
さすがに発想からしてちょっと無理があると思う
基底クラスに派生で使われるプロパティが全部乗ってるとかならできると思うけど、
それだったらわざわざクラスを派生させずに単一のクラス内部で分岐すればいいだけになっちゃうし

218 :デフォルトの名無しさん:2010/02/15(月) 18:05:41
>>217

どうもありがとうです。

>それだったらわざわざクラスを派生させずに単一のクラス内部で分岐すればいいだけになっちゃうし

そうなんですよね。
で、先ほど書いたように、各々の子クラス用のCollectionを用意しました。
あとは、描画順のコードを足してどうにかしようと思います。



219 :デフォルトの名無しさん:2010/02/15(月) 18:20:21
コレクション系のクラスを継承してAddにobjectを指定する糞コード書く奴は間違いなくPG歴1ヶ月未満。

220 :デフォルトの名無しさん:2010/02/15(月) 23:40:44
>>219でスレが止まってるの見てこのAA思い出したw
http://society6.2ch.net/test/read.cgi/gline/1242395187/1n

221 :デフォルトの名無しさん:2010/02/18(木) 02:25:50
クリエイトプロセスについての質問です。
win2k pro, Delphi 6 personalを使用しており、
ボタンをクリックするとエディタが起動するようにしておりますが、以下のコードによって
エディタが終了する前にshowmessageの'ok'が表示されてしまいます。
ググッてみたもののだいたい同じ内容のものしかヒットしませんでした。
エディタが終了した後に、残りの処理をする場合はどのようにすればよいのでしょうか?
教えてください。
パソコンが2コアだからとかは、関係ありますか?

procedure TForm1.Button1Click(Sender: TObject);
Var
PI : TProcessInformation;
SI : TStartupInfo;
begin
GetStartupInfo(SI);

CreateProcess(Nil,
'D:\Wintools\Dana\Dana.EXE test',
Nil,
Nil,
False,
0,
Nil,
Nil,
SI,
PI);

while WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT do
Application.ProcessMessages;
showmessage('ok');
end;

222 :デフォルトの名無しさん:2010/02/18(木) 02:30:26
状況としては、エディタが終了した後にshowmessageを表示したいのです。
現在は、エディタが起動したすぐ後にshowmessageが実行されてしまいます。


223 :デフォルトの名無しさん:2010/02/18(木) 03:58:00
CreateProcessの2行目を
'notepad.exe',
にしたら待機できました。

なぜ、
'D:\Wintools\Dana\Dana.EXE test',
ではだめなのか、もう少し調べてみます。

224 :デフォルトの名無しさん:2010/02/18(木) 04:08:03
あー、わかりました。
danaが常駐モードで起動していたため、うまく動いていませんでした。
常駐モードを切って、通常に起動すれば、待機するようになりました。

225 :デフォルトの名無しさん:2010/02/18(木) 14:30:53
うん

226 :デフォルトの名無しさん:2010/02/18(木) 19:09:22
だな

227 :221:2010/02/18(木) 19:51:40
うーん、かなり初心者的なつまずきをしています。

テキストファイルの管理ソフトを作っているのですが、テキスト編集機能を自前で持つのではなく、
すでに優秀なエディタソフトがあるので、テキスト編集については、その外部ソフトで編集し、
編集した結果を管理ソフト側に持ってきたいと思っています。

Createprocessで起動していないソフトであれば、待機するということができるのが確認できたのですが、
常駐機能のあるDanaというエディタの場合は、待機できないことがわかりました。
(以降の処理が待機できない。)

こういう場合、外部のソフトで編集した結果を自分のソフト側に持ってくるとしたら、どういう機能を
使ったらよいのでしょうか?


228 :デフォルトの名無しさん:2010/02/18(木) 20:00:33
ファイル更新監視

229 :デフォルトの名無しさん:2010/02/18(木) 20:03:07
もう少し、わかりやすく説明した方がいいですね。

テキストデータ管理ソフトは、データベース(sqlite3)上にデータを格納しようと考えております。
管理ソフト側では、Memoコンポーネントをビューワーにして、新規作成および編集については、
外部のエディターソフトに任せて、その編集結果をMemoコンポーネントに取り込みたいと思っています。
現在は、管理ソフト側でtestというファイルを作成し、外部ソフト側はそのtestファイルを読み込み、
編集結果をtestファイルに書き込んだ後、管理ソフト側でtestファイルを読み込むということを
想定しています。

外部ソフトと管理ソフトとで、データのやりとりをしたいのですが、通常どのようにデータのやりとりを
するのでしょうか?

230 :デフォルトの名無しさん:2010/02/18(木) 20:05:51
>>228
おー、ありがとうございます。
findfirstchangenotificationというのを調べておりました。
ファイルの更新をやはり監視して変更があった場合に、取り込みすればいいのですね。
ありがとうございます。
その手順で考えていきたいと思います。

231 :デフォルトの名無しさん:2010/02/18(木) 20:58:44
JVCLにコンポーネント化されたものがあったはず。ところでCtrl-Sで頻繁に保存をするような
人もいるので一回きりじゃない動作を考えておくべきかも。たとえばプロセスの終了までは
監視を続けるとか。

232 :デフォルトの名無しさん:2010/02/18(木) 21:07:24
>>231
どーもです。
そうですね。今いろいろとテストしていたんですけど、外部プロセスが終了していない間に
ファイルの削除(今回でいえば、test)とかをした場合など、困りますね。
外部プロセスの状態(起動中か終了しているのか)とか調べることも必要ですね。
教えていただいたjvclも調べてみます。ありがとうございます。

私のやりたいことは、CreateProcessとWaitForSingleObjectでそのまま動けば、
簡単なんですけど、常駐しているエディタもあることを考えるとそのまま使えないんですね。
ちょっと難しくなっちゃったな。とほほ。

233 :デフォルトの名無しさん:2010/02/18(木) 21:14:01
そのエディタが編集中のファイルをロックしてるなら
Timerで1秒ごとに排他オープンを試みて成功したら処理するというのも出来るかも
タイムスタンプ監視で大体はうまくいくと思うけどね

234 :デフォルトの名無しさん:2010/02/18(木) 22:58:57
>>233
そのエディタは、開いているだけの状態では、ファイルをロックしてませんでした。
ファイルの削除とか外部からできちゃいました。
ファイルの更新自体だけだと、エディタで処理が終わってファイルを書き込んだのか、
編集途中でファイルを書き込みをして、続けて処理しているのかが、はっきりわかりませんね。
困ったな。

プロセスの監視も実は、常駐モードだと常に起動状態なので、それだけだと状態の監視ができないです。
そうなると、エディタのWindowの状態を見て、testという文字列が表示されているかどうかを確認すれば、
良いのかな?
もう少し考えてみます。アドバイスありがとうございます。

235 :デフォルトの名無しさん:2010/02/19(金) 00:36:26
エディタなんて星の数ほどあるのにプロセスの監視をするのは現実的じゃない
キャプションにファイル名等が表示されないエディタだってある
エディタ以外のプロセスが一時的にロックすることもある(アンチウイルスとか)

236 :デフォルトの名無しさん:2010/02/19(金) 01:03:55
>>235
そうなんですよね。
vectorのサイトでeditorのレビューで一通りエディター画面見てみたんですけど、タイトルバーに
今編集してるファイル名が表示されてないのもある(9割以上は表示してる。)し、今使ってるDanaでさえも
複数ファイル編集していて、違うファイル開いているとタイトルバーがそのファイル名に
なってしまっているので、すべてのパターンに対応できないですね。

考えが浅はかだったかな?エディター部分を自分で作るよりは、すでにあるアプリで対応して、
ビューアー部分(将来的にはブラウザで表示しようとしてました。)とデータの格納部分だけ
作り込めばいいかなと思ってました。

ちょっと設計自体考え直す必要がありますね。
エディター部分の作り込みはあまりしたくないんだけどなぁ。自分の能力だと大した物できそうにないし。

237 :デフォルトの名無しさん:2010/02/19(金) 04:32:50
なんで監視だけじゃだめなんだよ

238 :デフォルトの名無しさん:2010/02/19(金) 06:32:00
>>237
何の監視ですか?
プロセスの監視は、常駐機能のあるエディタだと、ファイルの編集が終了した後でも、
起動したままですし、ファイルの更新状況の監視は、そのファイルが編集継続中であるのか、
すでに編集が終わっているのかの判断がつかないからです。

エディタで編集中であるのに、管理ソフト側を終了してしまうと、保存されないデータが出てくると
思われます。確実にファイルの編集が終わっている状況というのを管理ソフト側で把握できないと
確実なデータの受け渡しは難しいのではないかと思っています。

以上の点から、プロセスの監視もファイル更新の監視も、今の私の知識では無理じゃないかと思って
いるのですが、何か良い案をお持ちでしょうか?

239 :デフォルトの名無しさん:2010/02/19(金) 09:22:56
文字列型と違い動的配列はコピーオンライトじゃないとだけは認識してたが、
SetLengthで長さ変えるとコピーされるんだ・・・
var
 A, B: array of Byte;
begin
 SetLength(A, 10);
 B := A;
 SetLength(B, 5); // コピーされて、AとBは別物
end;
ずっと、コピーされないと思ってたよ・・・


240 :デフォルトの名無しさん:2010/02/19(金) 09:35:21
メモリ確保するためポインタ使う代わりに動的配列使ってたけど、
TClassA = class
FArray: array of Byte;
procedure TClassA.Method;
begin
 SetLength(A, 10);
end;
そうすると、FArrayが他の変数によって参照されてるか否か意識しなきゃいけんのか・・
素直にポインタ使ったほうが安全なのかな。

241 :デフォルトの名無しさん:2010/02/19(金) 09:48:42
まぁ、型にうるさい言語だから
FArray: array of Byte;
とか単独で宣言すれば、まちがっても他の変数によって参照されることはコンパイルエラーが
でるからありえないけど、例えば、Typesユニットで定義されているTByteDynArrayとか使って
FArray: TByteDynArray;
とすると危険か。まぁ、いっか。普通に使うか。


242 :デフォルトの名無しさん:2010/02/19(金) 11:02:46
すいません質問です
Delphi-MLの過去ログ検索のサイトが無くなっていたんですが
引き継ぎ先などの情報をお持ちの方おられるでしょうか?


243 :デフォルトの名無しさん:2010/02/19(金) 11:04:57
過去ログブラウザおすすめ
C#はさらにおすすめ

244 :デフォルトの名無しさん:2010/02/19(金) 11:07:42
サービス止まってるね
面白そうだし引き継ぎ挑戦してみようかな

245 :デフォルトの名無しさん:2010/02/19(金) 11:28:30
「私の投稿メールを削除していただけませんか」
メールが来るから覚悟しておいた方が良いぞ > 244

246 :デフォルトの名無しさん:2010/02/19(金) 11:30:02
ならやめたw


247 :242:2010/02/19(金) 11:42:15
あの過去ログは宝の山でした・・・
あそこで使っていた過去ログって2008/05が最終なんでしょうか?

248 :デフォルトの名無しさん:2010/02/19(金) 12:15:25
google の方に過去ログ追加しようかねぇ

249 :デフォルトの名無しさん:2010/02/19(金) 12:18:10
2006/11 以降は http://groups.google.co.jp/group/delphicbuilder-ml-archive/about にもバックアップされている。

250 :デフォルトの名無しさん:2010/02/19(金) 13:17:03
>>239-241
ジェネリクス利用したコピーオンライト配列使えば問題なし

251 :デフォルトの名無しさん:2010/02/23(火) 12:07:40
TQueryに新規作成した参照項目を元に整列表示させることはできないですか?
SQLのOrder節には入れられないし

252 :デフォルトの名無しさん:2010/02/23(火) 13:53:52
Delphi6 ProとDelphi7 Pro、今使うならどっちがいいと思う?

253 :デフォルトの名無しさん:2010/02/23(火) 13:59:20
7

254 :デフォルトの名無しさん:2010/02/23(火) 14:15:25
7は6のマイナーチェンジな感じだからあえて6を選ぶ理由は少ないと思う。
6はXPのマニフェスト対応にも難有りだし。

255 :デフォルトの名無しさん:2010/02/23(火) 22:08:08
難の前に未対応じゃん
XP出る前なんだから

256 :デフォルトの名無しさん:2010/02/23(火) 22:31:21
del7使いなんだけど、最新のDelにしたら
マルチコアなCPUに対応したアプリって
簡単に作れるの?

257 :デフォルトの名無しさん:2010/02/23(火) 22:46:01
>>255
難ってのはTheme Managerのことだろ
それにD2010はWin7出る前なのにWin7対応を謳ってますが

>>256
マルチスレッドじゃあかんの?

258 :デフォルトの名無しさん:2010/02/23(火) 22:48:12
マルチスレッドなプログラム書けば特に意識しなくても複数のコア使うようになる。
簡単かは別。排他処理とかやらないと普通に死ぬ。

259 :デフォルトの名無しさん:2010/02/24(水) 00:37:25
>>257
Del6の発売はXPの存在自体が発表される前なんですけど?
Win7はDel2010開発の段階でβ出てるじゃん
頭悪いね

260 :デフォルトの名無しさん:2010/02/24(水) 00:39:02
>>258
明示的にAPIで指定しない限り複数のコアを使うとは限らない
嘘書くのはやめよう

261 :デフォルトの名無しさん:2010/02/24(水) 01:46:31
>>260
>>258は別に嘘では無い。

262 :デフォルトの名無しさん:2010/02/24(水) 03:11:00
本当でもないだけ。

263 :デフォルトの名無しさん:2010/02/24(水) 03:28:30
OpenJaneのソース、HogeTextView#1839行より

Move(#13#10[1], result[Position], 2);

とあるのですが、この1つめの引数にある『#13#10[1]』とはどういう意味なのでしょうか?
ついでに、同じ意味になる別の表記方法もあるのであれば、教えて頂けると助かります。

264 :デフォルトの名無しさん:2010/02/24(水) 04:13:54
VBでいうところの vbCR, vbLF 、 まぁ改行コードのことやね

265 :デフォルトの名無しさん:2010/02/24(水) 09:26:24
明示的にAPIで指定するとどのコアでスレッドを動かすかなどを細かくコントロールできる。
明示指定してない場合でも、複数のコアをプロセスに割り当てる。
いくつ割り当てるかは、OS の種類によって細かく違いがある。
ただし一般的なコンシューマ版(Vista とか Windows7) ではデフォルトですべてのコアが
利用可能となる。

そんだけだ


266 :デフォルトの名無しさん:2010/02/24(水) 11:27:56
private
function GetHoge(const Index: Integer; Idx: Integer): String;
procedure SetHoge(const Index: Integer; Idx: Integer; const Value: String);
public
property hogeA[Idx: Integer]: String index 0 read GetHoge write SetHoge;
property hogeB[Idx: Integer]: String index 1 read GetHoge write SetHoge;

こんなPropertyが使いたいのですが read GetHoge で"互換性の無い型です"って怒られます。
hogeA,hogeB毎に read write の関数作らないと駄目なんですかね。

ちなみにfunction GetHogeとprocedreu SetHogeはCtrl+Shift+Cで自動生成したものです。


267 :デフォルトの名無しさん:2010/02/24(水) 11:34:30
266です。自己解決しました。

自動生成された
function GetHoge(const Index: Integer; Idx: Integer): String;
procedure SetHoge(const Index: Integer; Idx: Integer; const Value: String);

を下記に書き換えたら通りました。
function GetHoge(Idx: Integer; const Index: Integer): String;
procedure SetHoge(Idx: Integer; const Index: Integer; const Value: String);

自動生成だと、配列の添え字とインデックス値が逆になって、値の渡し方の問題でエラーになるみたいです。


268 :デフォルトの名無しさん:2010/02/24(水) 14:12:06
配列プロパティにはデフォルト値与えられない??
property Items[Index: Integer = 0]: Integer read Get....


269 :デフォルトの名無しさん:2010/02/24(水) 14:30:48
そんなことをするような設計が悪い

270 :デフォルトの名無しさん:2010/02/24(水) 15:14:41
配列コピーの高速化って無理だよね

インラインアセンブラでMMX命令で32bitコピーとかやってもちっとも速くならねぇ

271 :デフォルトの名無しさん:2010/02/24(水) 15:21:32
fastcode projectにmoveがあったような

272 :デフォルトの名無しさん:2010/02/24(水) 20:37:10
>>264
理解できました。 thx!

273 :デフォルトの名無しさん:2010/02/25(木) 07:22:20
>>260
あほか

274 :デフォルトの名無しさん:2010/02/25(木) 08:46:15
あほです



このすれにまじめなこと書くはずないだろ

275 :デフォルトの名無しさん:2010/02/25(木) 12:49:24
>>262
本当だし

276 :デフォルトの名無しさん:2010/02/25(木) 14:36:43
はいはい知らなかったなら素直に言おうね

277 :デフォルトの名無しさん:2010/02/25(木) 14:57:45
Windowsのスレッド配分アルゴリズムは同一プロセス内のスレッドは物理的に同じプロセッサに優先的に割り当てるようになってる。
これはダイ間の通信がコア間の通信に比べて顕著に遅延が発生する等、別個に割り当てると問題が生じるからで、
割当先候補が減っている分、その時の処理状態によっては同一コアに複数スレッドが割り当てられるという事態は普通に発生する。
つまり「明示的にAPIで指定しない限り複数のコアを使うとは限らない」は真。
Delphiには並列ライブラリがないからこういった情報の浸透が遅れているんだろうね。

278 :デフォルトの名無しさん:2010/02/25(木) 15:45:17
それ、完全にお前の誤解。

スレッド A が Core 1 に割り当てられたときに、
タスク切り替えやスレッド休止後の再起床時に
同じ Core を「優先」して使う。

および同じプロセスに所属するスレッドは、できるだけ「有利」なコアを使う。
というだけ。

この場合の「有利」は、キャッシュを共有しているコアとかが選ばれる。

スレッドが二つ、A と B があったときに、
A と B が「かならず」物理的にひとつのコアしか使わない。のだとしたら
マルチスレッドの利点なんか残らないだろう?

それくらい実験すればすぐわかるのに...

279 :デフォルトの名無しさん:2010/02/25(木) 16:01:25
Win32APIスレ池

280 :デフォルトの名無しさん:2010/02/25(木) 17:49:09
こんなクズども寄越さないでください

281 :デフォルトの名無しさん:2010/02/25(木) 17:52:40
>>278
必ずなんて一言も書いてないんだけど
OSに任せると必ず分散するとは限らないってだけ
お前はまず日本語を勉強してこい

282 :デフォルトの名無しさん:2010/02/25(木) 18:03:22
その辺はMSDNにも
「スレッドの割り当ては考えてやってるから、分散してなくてもSetProcessAffinityMask使うのはあんまりおすすめしないよ」
みたいに書いてある
XPにはあまり賢くないアルゴリズムが載ってたからある程度自分でやった方が良かったけど

283 :デフォルトの名無しさん:2010/02/25(木) 18:04:04
SetThreadAffinityMaskだった

284 :デフォルトの名無しさん:2010/02/25(木) 18:06:27
         ノ´⌒ヽ,,
     γ⌒´      ヽ,
    // ""⌒⌒\  )
     i /::::::::: ノ  \ ヽ )
     !:::::::::::(・ )` ´( ・) i/
     |:::::::::::::::(__人_)  |
    \:::::::::::::`ー'  / チッ うっせーな…
    /:::::::::::::::::::::::::::\

285 :デフォルトの名無しさん:2010/02/25(木) 18:07:18
使うとしたらこっちだな。SetThreadIdealProcessor


286 :デフォルトの名無しさん:2010/02/25(木) 18:21:52
みなさん。
実験すればわかることなので、煽りは無視して自分で検証してみましょう。

一般向けの CPU では、物理的に存在する CPU コアのすべてが
プロセス内のスレッドに割り振られます。

個別にコントロールする API は別途ありますが、通常は OS に任せておいて
問題ありません。


287 :デフォルトの名無しさん:2010/02/25(木) 19:58:17
>>286
何となく興味あったから実験してみたけど、
中でsleepするスレッド4つ作って動かしたら全部一緒になったよ
環境はXP SP3 Core2 Quad
なんで?

288 :デフォルトの名無しさん:2010/02/25(木) 19:59:32
         ノ´⌒ヽ,,
     γ⌒´      ヽ,
    // ""⌒⌒\  )
     i /::::::::: ノ  \ ヽ )
     !:::::::::::(・ )` ´( ・) i/
     |:::::::::::::::(__人_)  |
    \:::::::::::::`ー'  / チッ うっせーな…
    /:::::::::::::::::::::::::::\

289 :デフォルトの名無しさん:2010/02/25(木) 20:05:57
>>287
sleepしてるスレッドがどのコアで動いてるか分かるの?

290 :デフォルトの名無しさん:2010/02/25(木) 20:34:33
タロット占いをするソフトを作りたいと思います。(実際に当たるかどうかは別にして)

TEditにタロットのカード名(魔術師とか、女教皇とか、愚者とか)
を表示させようと思うのですが、
Edit1〜Edit6に表示させる際
それぞれが重複しない値にさせるに
はどうすればいいでしょうか。

単純にrandom(22)を使うと
重複してしまう場合があります。

291 :デフォルトの名無しさん:2010/02/25(木) 20:44:26
リアルでのやり方と同じ。
カード全部を配列に突っ込んでシャッフルして頭から6枚取得する。
配列 シャッフルで検索かければそのコードが見つかるからDelphiに書き直せばいい。

292 :デフォルトの名無しさん:2010/02/25(木) 21:07:56
WinXp+D7で質問です。
trunc関数で誤差が出るようなのですが何がいけないのでしょうか。
フォームにEdit1,2,3とButton1を配置し以下の計算をしますとEdit3だけが769になります。
Trunc内で計算せずにEdit1のようにすれば大丈夫なのでしょうか。

procedure TForm1.Button1Click(Sender: TObject);
var
Su : double;
Kin : double;
kei : double;
begin
Su := 1.4;
Kin := 550;
kei := Su * Kin;
Edit1.Text := Floattostr(trunc(kei));
Edit2.Text := Floattostr(trunc(1.4*550));
Edit3.Text := Floattostr(trunc(Su * Kin));
end;

293 :290:2010/02/25(木) 21:12:22
>>291
アドバイスありがとうございます。
検索したらFisher-Yatesという方法も見つかりました。
これでやってみます。

294 :デフォルトの名無しさん:2010/02/25(木) 21:31:36
>>292
参考になるかどうかわからないけど、過去ログからコピペ。

857 :826 :2008/03/02(日) 20:57:07
SimpleRoundToの個人的まとめ。
正解かどうかわからないので、必要な人は追試してください。

・SimpleRoundToは意図した結果が得られない場合(ADigit<0 ?)がある。

・Truncは引数に変数を使った式を与えると意図した結果が得られない場合がある。
 ○a := 10; Trunc(0.25 * a + 0.5) / a;
 ○Trunc(0.25 / 0.1 + 0.5) * 0.1;
 ×a := 0.1; Trunc(0.25 / a + 0.5) * a; //SimpleRoundToの中がこれ
・引数に指定する計算式の結果を一度変数に代入してから、Truncに与えれば大丈夫そう。
 ○a := 0.1; b := 0.25 / a + 0.5; Trunc(b) * a;

・Floorも内部でTruncを使ってるので同様。
・Ceilは内部でTruncを使っているものの大丈夫そう??


295 :デフォルトの名無しさん:2010/02/25(木) 23:01:02
>>289
APIも知らないの?

296 :デフォルトの名無しさん:2010/02/25(木) 23:01:54
>292
おもしろいね。時間があったら追試してみたいけど、気になったポイントを。
Edit1は計算結果が一旦Double型に代入されてそれがTruncに渡されている。
Edit2は予めコンパイラが計算した浮動小数点数の定数値をTruncに渡している。
Edit3は式の値がおそらくExtendedで一時的に保持されてそれがそのままTruncに渡されている。
CPUウィンドウでコンパイル結果がどのようなアセンブル命令に展開されているのかを見ると違いが
わかるのかも。

297 :デフォルトの名無しさん:2010/02/25(木) 23:02:22
         ノ´⌒ヽ,,
     γ⌒´      ヽ,
    // ""⌒⌒\  )
     i /::::::::: ノ  \ ヽ )
     !:::::::::::(・ )` ´( ・) i/
     |:::::::::::::::(__人_)  |
    \:::::::::::::`ー'  / チッ うっせーな…
    /:::::::::::::::::::::::::::\

298 :デフォルトの名無しさん:2010/02/25(木) 23:29:53
>>295
どれ使うか分からんので教えて。

299 :デフォルトの名無しさん:2010/02/26(金) 00:08:58
>>290
procedure TForm1.Button1Click(Sender: TObject);
const
 CARD : array [0..5] of string = ('THE FOOL','THE MAGICIAN','THE HIGH PRIESTESS',
                    'THE EMPEROR','THE LOVERS','The HIEROPHANT');
 function tekitou(a,b:integer):TPoint;
 begin
  result.X := b;
  result.Y := a;
 end;
var
 CardNum: array [0..5] of Integer;
 i,r1,r2 : integer;
 p : TPoint;
begin
 Memo1.Clear;
 for i := 0 to 5 do
  CardNum[i] := i;
 for i := 0 to 999 do begin
  r1 := random(6);
  r2 := random(6);
  p := tekitou(CardNum[r1],CardNum[r2]);
  CardNum[r1] := p.X;
  CardNum[r2] := p.Y;
 end;
 for i := 0 to 5 do
  Memo1.Lines.Add(CARD[CardNum[i]]);
end;

駄目な例

300 :デフォルトの名無しさん:2010/02/26(金) 00:44:44
>>298
http://msdn.microsoft.com/

301 :デフォルトの名無しさん:2010/02/26(金) 06:39:48
OSに任せておけばいいだけやん。あほか。

302 :デフォルトの名無しさん:2010/02/26(金) 07:10:59
>>287
GetCurrentProcessorNumberやCPUIDで調べる方法は知ってるけど、
Sleepしてる最中に調べるのは無理だろって話さ。
ThrreadIDと違って、コアは実行途中でも入れ替わるんだし、
SleepしてたらCPUはつかんでないだろ。


303 :デフォルトの名無しさん:2010/02/26(金) 07:43:33
sleep したスレッドが1000個あったとして、それに意味があるの?

それこそ「特殊な」プログラムだと思うのだが。

304 :デフォルトの名無しさん:2010/02/26(金) 12:54:02
>>302-303
だからいい加減出て行けよ
バカに噛みつくのもバカ
必死にしか見えない

305 :デフォルトの名無しさん:2010/02/26(金) 12:54:45
はいはい本人乙

306 :デフォルトの名無しさん:2010/02/26(金) 12:56:05
馬鹿というのは鳩山のAAを張ってる奴だな
いい迷惑だ

307 :デフォルトの名無しさん:2010/02/26(金) 12:57:17
即レスとかどんだけ張り付いてるんだよw
そんなに悔しかったのか

308 :デフォルトの名無しさん:2010/02/26(金) 12:59:29
>>302
そんなことしなくても外部からいくらでも観測する方法あるだろ…
必死になるあまり視野が狭くなってないか?落ち着けよ

309 :デフォルトの名無しさん:2010/02/26(金) 13:02:13
本日も質問者不在のままおっさん鬱病患者達が頑張っていますね

310 :デフォルトの名無しさん:2010/02/26(金) 13:06:52
必死必死うるせえんだよ
必死って言う方が必死なんだよばーーーーーーーーーーーーかwwwwwwwwwwwwwwwww
もうこんな気持ち悪いところ来ないから一人で勝手に喋ってろwwwwwwwwwwきめえwwwwww

311 :デフォルトの名無しさん:2010/02/26(金) 13:08:47
これで静かになるな
ありがたやありがたや

312 :デフォルトの名無しさん:2010/02/26(金) 13:16:25
TBase = class
public
  class const Value: Integer; abstract;
end;
TBaseClass = class of TBase;

TExtend1 = class(TBase)
public
  class const Value: Integer = 1;
end;

TExtend2 = class(TBase)
public
  class const Value: Integer = 2;
end;

var
  cls: TBaseClass;

cls := TExtend1;
a := cls.Value; //1が入って欲しい


もちろんこんなコードは書けないんですけど、
上記のようなクラス定数(もしくはクラス変数)の継承みたいなことって何かで代用できますかね

313 :デフォルトの名無しさん:2010/02/26(金) 13:38:23
代替にはならないと思うがReadプロパティで対応するのが一般的だと思う。

314 :デフォルトの名無しさん:2010/02/26(金) 18:44:42
引数なしの関数は変数にも見えるから

function Value : Integer; virtual;

を使う手もある





315 :312:2010/02/26(金) 19:01:32
>>313-314
ありがとうございます
そうなんですよね、実装部に書くことを許容すればできるんですけど、
宣言部だけで継承先の振る舞いを変えられたらと思ったんですが、やはり仕様上難しそうですね…

316 :デフォルトの名無しさん:2010/02/26(金) 22:52:20
Delphi、VisualStudioに付いてくるやつ以外で
TAnimateで使えるようなAVIファイルを集めた
市販の素材集はないでしょうか?

317 :デフォルトの名無しさん:2010/02/26(金) 22:56:51
TStringListの内容をINIファイルの一行データとして安全に書き込んだり読み込んだりするための変換処理ってどう書けばいいですか?

318 :デフォルトの名無しさん:2010/02/26(金) 23:29:37
具体的にどういう変換をしたいのかが見えない

319 :デフォルトの名無しさん:2010/02/26(金) 23:37:10
ini[0] = TStringList.Parse(sl[0]);
sl[0] = TIniFile.Parse(ini[0]);

320 :デフォルトの名無しさん:2010/02/26(金) 23:41:10
>>317
例えば、iniファイルに
key=aaa;bbb;ccc
と書かれていた場合に、

その値を
aaa
bbb
ccc

と、変換して取得したい。
または、逆変換してiniファイルに書き込みたい。ってこと?

単純にTStrings#DelimitedTextプロパティを通せば、自動的に変換してくれる。
ただし落とし穴があって、スペースもデリミタとして扱ってしまう。(Del 7の場合。以降のDelphiは使用したことないのでシラネ)

厳密に指定したデリミタのみで分割したい場合、JCL(ttp://jcl.delphi-jedi.org/)に含まれる、JclStrings#StringsToStrやJclStrings#StrToStringsを使用してます。

iniファイルへの読み書きはTIniFile使えばいいじゃね?。安全にが何を指してるか知らないけど。


321 :デフォルトの名無しさん:2010/02/26(金) 23:42:39
mailto:sage てs


322 :デフォルトの名無しさん:2010/02/26(金) 23:47:32
正直な話、オレだったらTStringlistの内容をinifileに保存なんてしない。
何を目指してるのかは分からないけど。

323 :デフォルトの名無しさん:2010/02/27(土) 03:53:55
>>320
個々にAnsiQuotedStr(読み込み時は逆にAnsiDequotedStr)を適用すれば外部ライブラリはいらない

324 :デフォルトの名無しさん:2010/02/27(土) 09:18:11
マルチコアの話に便乗なんですが、要は1つのスレッドを
OSが適当に割り振るからあんまり考えなくて良いよって解釈しました。
言い方変えると1スレッドを複数のコアで処理はしないってこと?
マルチコア対応とか書いてあるアプリって、重い処理でも1スレッドに書いたほうが
プログラムが簡単なのにマルチスレッドに出来るだけ分けてるって事?

325 :デフォルトの名無しさん:2010/02/27(土) 09:44:07
>>323
TStringListの個々の要素であるStringは#0-#20(当然#13#10も)なんかも格納できるバイナリコンテナだからもうひとひねり必要だな。
標準でやるには例えばURL Encode/Decodeとかできっちり処理しないと破綻する。

326 :デフォルトの名無しさん:2010/02/27(土) 10:26:53
だがほとんどの処理で #0 以降の文字は欠落するから
もう忘れてもいいんじゃないかな?

327 :292:2010/02/27(土) 14:37:50
どの程度誤差が発生するのかちょっと調べてみました。
memo1,2,3を配置して誤差が出たとき追加していきます。

procedure TForm1.Button3Click(Sender: TObject);
var
Su : double ;
Kin ,sux : integer;
kei ,ans : double;
a1,a2,a3 : double;
t :string;
const
sucon = 0.00000001;
begin
memo1.Clear;
memo2.Clear;
memo3.Clear;
for Sux := 1 to 1000 do
begin
su := sux / 10;
for Kin := 1 to 1000 do
begin
kei := Su * Kin ;
a1 := trunc(kei);
a2 := trunc( Kin * su);
a3 := trunc( Kin * su+ sucon);
ans := trunc((sux * kin / 10)) ;

328 :292:2010/02/27(土) 14:40:31
if a1<>ans then
begin
t := Floattostr(kin) + ' , ' + Floattostr(su) + ' , ' + Floattostr(ans) + ' , ' + Floattostr(a1) + ' , ' + Floattostr(a2) + ' , ' + Floattostr(a3);
memo1.Lines.Add(t);
end;
if a2<>ans then
begin
t := Floattostr(kin) + ' , ' + Floattostr(su) + ' , ' + Floattostr(ans) + ' , ' + Floattostr(a1) + ' , ' + Floattostr(a2) + ' , ' + Floattostr(a3);
memo2.Lines.Add(t);
end;
if (a3<>ans) then
begin
t := Floattostr(kin) + ' , ' + Floattostr(su) + ' , ' + Floattostr(ans) + ' , ' + Floattostr(a1) + ' , ' + Floattostr(a2) + ' , ' + Floattostr(a3);
memo3.Lines.Add(t);
end;
end;
end;
memo1.Lines.SaveToFile('c:\memo1.csv');
memo2.Lines.SaveToFile('c:\memo2.csv');
memo3.Lines.SaveToFile('c:\memo3.csv');
end;


どうやら単に計算してからtruncしただけでは発生頻度が減るだけで完全な対策にはならなそうです。
小さい数を足してやって切り捨てるのが良いようです。

329 :デフォルトの名無しさん:2010/02/27(土) 14:58:05
問題の所在を理解していないような希ガス…

330 :デフォルトの名無しさん:2010/02/28(日) 07:34:09
やべー、俺も>>292の原因知りてぇ。
>>296さんのExtendedになぜなるのかが知りてぇ。

こういう場合、Edit1の方法で計算しないと間違った答えが出ることもあるってことだよね。

331 :デフォルトの名無しさん:2010/02/28(日) 07:47:13
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200310/200310_03100025.html

↑ここに同じようなやりとりがあった。

332 :デフォルトの名無しさん:2010/02/28(日) 07:52:04
つーことで、実数型使うときはdoubleを使わないでextendedを使えってこと?

333 :デフォルトの名無しさん:2010/02/28(日) 08:02:36
おー、すまん。一人でとっちらかっていた。
http://homepage1.nifty.com/MADIA/delphi/delphi_bbs/200607/200607_06070011.html
ここ読んでわかったけど、
Trunc(X: Extended): Int64;
で型変換してる。
Trunc使うときは、Extended型で使わないと誤差がでるってこと。

もしくは小数点移動させて、整数にしてから処理すればいいね。

334 :330-333:2010/02/28(日) 08:20:53
浮動小数って、意味がわかりました。そういうものなんですね。
使ったことなかったものですから、、、今回よくわかりました。
332も違うつーことで。

335 :デフォルトの名無しさん:2010/02/28(日) 18:43:16
それは不動少数

336 :デフォルトの名無しさん:2010/02/28(日) 20:36:04
すみません教えて下さい。
Form1 に直接 Image1 を置いていたのですが後から Panel1 を追加して Image1 の親コントロールを Panel1 に変更したいのですが、IDE でやる方法はありませんか?

337 :デフォルトの名無しさん:2010/02/28(日) 20:53:34
floatとdoubleで結果が異なる例は見たことあったけど
doubleとextendedで差が出る実例は初めて見た。
64bit厨はどうするのだろうか。

338 :デフォルトの名無しさん:2010/02/28(日) 21:14:15
それ 64bit 関係ないし
x64 なら 128bit 浮動小数点数が必ず使えるし


339 :デフォルトの名無しさん:2010/02/28(日) 21:51:41
337は64ビットネイティブバイナリでFPU命令が使えないと思っているんじゃないだろうか

340 :デフォルトの名無しさん:2010/02/28(日) 22:00:26
>>336 切り取って貼り付ける。


341 :デフォルトの名無しさん:2010/02/28(日) 22:02:28
>>340

なるほど!ありがとうございます!

342 :337:2010/02/28(日) 23:33:39
>>338, 339
ごめん、知らなかった。
>128bit浮動小数点と、64bitネイティブでFPU
エンバカスレに帰るよ。

343 :デフォルトの名無しさん:2010/03/01(月) 01:26:40
>>338
64bit2個をまとめて扱えるだけであって128bitが1個じゃないから

344 :デフォルトの名無しさん:2010/03/01(月) 02:02:25
実装がどうなってるかは関係ないだろ
扱えることに変わりはないし

345 :デフォルトの名無しさん:2010/03/01(月) 17:58:10
実装は関係ないだろキリッ!って言われてもなぁ

346 :デフォルトの名無しさん:2010/03/01(月) 19:12:48
はいはい

347 :デフォルトの名無しさん:2010/03/01(月) 19:25:15
>>345
お前がそう思うんならなんやらかんやら

348 :デフォルトの名無しさん:2010/03/01(月) 19:25:56
delphi2011っていつでるの?

349 :デフォルトの名無しさん:2010/03/01(月) 20:00:32
さあ

350 :デフォルトの名無しさん:2010/03/01(月) 20:56:48
>>348
もうすぐじゃないの? ただし32ビット

351 :デフォルトの名無しさん:2010/03/02(火) 21:21:42
特定の位置からバイナリを読み取って、違うファイルとして保存するというプログラムを書いています。
fileopen関数で開いて、FileRead(F, Buff^, Size);でバッファに格納はできたのですが、
この格納したものはテキストでならstringですので取り出せますが、バイナリとして保存する場合はどのように取り出せばよいのでしょうか?
お力をお貸しください。

352 :デフォルトの名無しさん:2010/03/02(火) 21:35:10
そのままでいいだろ

353 :デフォルトの名無しさん:2010/03/02(火) 21:36:16
>>344
実装がどうとか以前に扱えないし
SSE2が四倍精度浮動小数点数扱えると思ってんの?

354 :デフォルトの名無しさん:2010/03/02(火) 21:41:13
>>352
バッファはテキストとして保存可能ですが、そのバイナリがテキストでない画像とかを
どうやってバイナリとして保存するかがわからなくて・・・。


355 :デフォルトの名無しさん:2010/03/02(火) 21:49:37
>>354
MemoryStream


356 :デフォルトの名無しさん:2010/03/02(火) 21:57:44
>>355
それやろうと思ったんだけど、うまくいかなくて・・・
var
ms:tmemorystream;
begin
ms := tmemorystream.create;
ms.loadfromfile('TEST.dat');
//このseekがよくわからない。例えばSizeが300の地点から500までを読む場合の位置設定がわからないところ

ms.seek(?);

ms.read(Buff^,sizeof(buff));
ms.savetofile('TEST2.dat');
ms.free;

これでできなかったんです・・・。



357 :デフォルトの名無しさん:2010/03/02(火) 22:05:49
>351
ファイルストリームで元ファイルを開く→所定の位置にseekする→メモリストリームにコピーする
→メモリストリームのPositionを0に戻す→メモリストリームをファイルに書き込む

358 :デフォルトの名無しさん:2010/03/02(火) 22:13:33
>>357
レスありがと。
メモリストリームにコピーとは?どのような関数ですか?

359 :デフォルトの名無しさん:2010/03/02(火) 22:34:57
CB_SETCURSELってチェンジイベントみたいなのって起きないのかな。
他アプリのコンボボックスを操作するのに、CB_SETCURSELで選択項目を
変えるんだけど、一回コンボボックスにクリックメッセージを送らないと
認識しないみたいなんだ。
これって、相手のアプリの作りの問題?
別のAPIがあるの?

360 :デフォルトの名無しさん:2010/03/02(火) 22:50:08
>>354
意味分からん
何もしてないのにバッファが書き換わるとでも言いたいのか

361 :デフォルトの名無しさん:2010/03/02(火) 22:51:47
>>360
簡単にいうとどうやってこの格納されたバッファをファイルとして保存するかなんです。

362 :デフォルトの名無しさん:2010/03/02(火) 23:11:16
ファイルストリームでもメモリストリームでも好きなの使えば素敵やん

363 :デフォルトの名無しさん:2010/03/02(火) 23:43:28
>>361
b: array[0..4095] of byte;
MS: TMemoryStream;
begin
for i:= 0 to 4095 do b[i] := $FF;
MS:= TMemoryStream.Create;
MS.Write(b, 4096);
MS.SaveToFile('c:\gomi.dat');
MS.Free;

364 :デフォルトの名無しさん:2010/03/02(火) 23:58:58
>>363
書き込むだけの用途ならTFileStream使え
Create-Freeはtry-finallyで囲め
ハードコーディングすんな

365 :デフォルトの名無しさん:2010/03/03(水) 00:07:55
>>364
うわ…

366 :デフォルトの名無しさん:2010/03/03(水) 00:30:48
>>358
とりあえず、マニュアル(ヘルプ)読んでから、質問しろ

function CopyFrom(Source: TStream; Count: Int64): Int64;

ってのが見つかるはずだから


367 :デフォルトの名無しさん:2010/03/03(水) 13:06:15
Windows7が動くDelphiはどのバージョンまで対応していますか
Delphi2以降は一応動くと思うのですが

368 :デフォルトの名無しさん:2010/03/03(水) 13:36:48
Delphi上でOSを動かそうというのはなかなか難しいのではないかと。

369 :デフォルトの名無しさん:2010/03/03(水) 13:59:04
>>351 単純な手があるんじゃないの ファイルAとBを開き、Aのファイルポインタを
移動してから、あとは全部AをBへコピー メモリに覚える必要とかまったくないと思う

370 :デフォルトの名無しさん:2010/03/03(水) 15:37:49
>>368
Delphiで仮想マシン作れってことか

371 :デフォルトの名無しさん:2010/03/03(水) 15:53:45
対応の意味によるんじゃね。
厳密な意味で対応してるのは最新の奴だけだろうし
Vista以前のDelphiだとVistaでウィンドウのプレビューがうまくとれないなんて細かい不具合があったし。

372 :デフォルトの名無しさん:2010/03/04(木) 10:10:42
超初心者です。
Delphi2005 プログラミングテクニックVOL4
に載っていた簡単なイメージビューワを作ってみましたが
作成中にフォームのOpenPictureDialogをクリックすると、
すべてのファイル(*jpg,*jpeg,*bmp・・・)と正しく表示されるのに
実行すると、jpegがすべてのファイルの中に出てきません。
bmp、ico、emf、ぐらいしか表示されません
フィールターも見たのですが・・・・

コードはメニュー開く(&O)...の中に
if OpenPictureDialog. Execute then
begin
Image.Picture.Bitmap.LoadFromFile(OpenPictureDialog.FileName);
MainForm.Caption := OpenPictureDialog.FileName;
end;

ご教授頂ければ幸いです。

373 :デフォルトの名無しさん:2010/03/04(木) 10:28:30
uses
jpeg;

374 :351:2010/03/04(木) 18:50:43
とりあえずfilestreamで読み込み、指定の位置へ移動、バッファいれるためのメモリ確保までは問題なく動作しているようです。
ですが、readが間違えているのかうまくいかず、指定の位置からではなく、そのままファイルをコピーするものになったしまいました。
やりたいことは指定した位置から最後まで読み込んで、その読み込んだ部分だけをファイルとして書き出すことです。以下がソースになります。
ms := tmemorystream.Create;
fs:= TFileStream.Create('C:\AAA.dat',fmOpenRead);
try
fs.Seek(targetposition, 0);
Buff := AllocMem(SrcSize + 1);
fs.Read(buff^,srcsize);
ms.LoadFromStream(fs);
ms.SaveToFile('C:\ABC.dat');
finally
FreeMem(Buff);
ms.Free;
fs.Free;
end;
どうかご回答の程、よろしくおねがいします。Copyfromよりこちらの方が楽そうに思いしようしました。

375 :デフォルトの名無しさん:2010/03/04(木) 19:16:24
buffは何のために確保してるの?

376 :デフォルトの名無しさん:2010/03/04(木) 19:20:26
>>374
君がやっていることを例えると、

本を借りてきて、
メモ用紙に必要な事項だけ書き写して、
本をコピー機で全部複製して、
メモ用紙を捨てて、
本を返してる

377 :デフォルトの名無しさん:2010/03/04(木) 20:32:46
>>375
部分的に読み取ったものを格納して・・・と思ったんですが、違うんですか?
>>376
その例えの必要な事項だけ書き写したのを欲しいんですが、余計なコード書きすぎとかですか?
この指定した位置から読み取ったバッファ=fsという理解ではないのでしょうか?

378 :デフォルトの名無しさん:2010/03/04(木) 21:18:41
buffに格納したものを利用せずに捨ててる

379 :デフォルトの名無しさん:2010/03/04(木) 21:51:23
>>378
この読み取ったバッファをファイル保存するために、
ms.LoadFromStream(fs);
ms.SaveToFile('C:\ABC.dat');
としたんですが、どうもうまくいかないのです。
何か良い手はございますか?

380 :デフォルトの名無しさん:2010/03/04(木) 22:37:23
msにbuffを書き込めよw

381 :デフォルトの名無しさん:2010/03/04(木) 22:49:54
>>380
レスありがとうございます。
言われた通りにしたらうまくいきました。
これまでお付き合いくださった方、ありがとうございました。
そしてお騒がせ致しました。

382 :デフォルトの名無しさん:2010/03/05(金) 00:02:09
いいねぇくだすれらしくてw


383 :デフォルトの名無しさん:2010/03/05(金) 02:27:05
もどかしいが嫌いじゃないぜ、この流れw

384 :デフォルトの名無しさん:2010/03/05(金) 12:06:52
無意味なエラートラップならやらないほうがいい

385 :デフォルトの名無しさん:2010/03/05(金) 12:51:14
無意味なエラートラップはない

386 :デフォルトの名無しさん:2010/03/05(金) 15:07:49
try
 abort;
except
 abort;
end;


387 :デフォルトの名無しさん:2010/03/05(金) 15:16:16
それは無意味なエラートラップじゃなくて無意味なコード

388 :デフォルトの名無しさん:2010/03/10(水) 18:08:50
よく改造サイトでエミュでチートを・・・とか書いてありますが、これを(チートを)そのエミュ上で行うのではなく、
自作のプログラムで行おうとする場合どのような流れになるのでしょうか?
簡単にいうと、エミュでチートを行わずに、自作のプログラムでいま起動されてるエミュ上のゲームのデータを書き換える
というものを作りたいのです。


389 :デフォルトの名無しさん:2010/03/10(水) 20:23:01
ガキ臭いやつだなぁw

390 :デフォルトの名無しさん:2010/03/10(水) 22:33:19
>389
素直に「答えられません」と降伏宣言したらだどうだ?。嫌ならゴミレスするな

391 :デフォルトの名無しさん:2010/03/10(水) 22:38:14
答えられません
ですから諦めて下さい

392 :デフォルトの名無しさん:2010/03/11(木) 02:50:49
改造板行けよ

393 :デフォルトの名無しさん:2010/03/11(木) 06:39:25
Delphi6まで使っていましたが、最近またDelphiで開発する
はめになりました。
で、Delphi2010の購入を考えております。

そこでお聞きしたいのですが、Delphi2010は、Delphi6
と比較して、何が良くなっているのでしょうか?
特にエディタの使い易さなどはどうでしょうか。

メーカが出している機能比較のPDFなどは見ておりますが、
実際の開発者さんの感想をお聞きしたいです。

作成するアプリは、SQLServerおよびAccessMDBを使う業務
アプリです。

よろしくお願い申し上げます。

394 :デフォルトの名無しさん:2010/03/11(木) 06:53:43
使い勝手は人によるので。

>特にエディタの使い易さ
となれば、D6 でどこが不満だったのかをまとめれば答えやすいと思うよ


395 :デフォルトの名無しさん:2010/03/11(木) 09:28:58
Delphi 2010 Architect - 30 day trial
https://downloads.embarcadero.com/free/delphi

396 :デフォルトの名無しさん:2010/03/11(木) 13:57:05
>>393
エディタはコードの折りたたみ等必要ないなら外した方がいい。
若干バギーな部分もあるが実用できるとは思う。
ただしvimなど外部エディタに慣れてるならそっちで環境整えた方がいいっていうレベル。
でもリファクタリングは便利。

生産性は上がってる。ジェネリクスがあるのでコードの記述量が劇的に減る。
C++でテンプレートを使えていたなら何も考えずに使えるはず。
テンプレートもよく分からないのなら、Delphi2009Handbookを読めば解説がある。

397 : [―{}@{}@{}-] デフォルトの名無しさん:2010/03/11(木) 16:03:34
ジェネリクスはバグだらけ。とナカムラセンセが言っていますよ?


398 :デフォルトの名無しさん:2010/03/11(木) 16:18:15
中村先生が指摘してたバグはすでに修正されてますが?
何年前の話を持ち出してるんだよ情弱

399 :デフォルトの名無しさん:2010/03/11(木) 16:22:41
「Delphi ジェネリクス バグ」で検索すると中村の指摘が真っ先に引っかかるからな。
一番上のネタを持ってくる辺り、検索して知ったにわか知識ということがよくわかる。

400 :デフォルトの名無しさん:2010/03/11(木) 22:54:43
なんかごめん・・・・

401 :デフォルトの名無しさん:2010/03/12(金) 13:01:50
ジェネリクスなどのコンパイラの新機能にエディタは追いついてないので
古いバージョンからアップグレードすると既存の機能でいらいらする事結構ある。
前できた宣言の検索(Ctrl+Shift+上下キー)とか動かない部分とかあるし。
仕方なく通常のCtrl+F2の文字列の検索でソース追うはめになったり。

402 :デフォルトの名無しさん:2010/03/13(土) 04:21:43
Delphi 2010のlicense_ja.rtfに書かれている
「指名ユーザーが本製品の使用を許可された唯一の個人である場合、
 適正な数のコンピュータに本製品をインストールすることができます。」
というのは、
「俺だけが使うのなら、自宅のデスクトップPCと、カバンに入れている俺資産のノートPCと、
 XPmode上の仮想PCの3つにインストールできるじゃん」
という認識でOKでしょうか?

自宅でも出先でも開発したいのよ。

403 :デフォルトの名無しさん:2010/03/13(土) 07:01:11
その認識で良いと思いますが
ライセンス関連の質問は Embarcadero サポートに問い合わせることを勧めます。


404 :デフォルトの名無しさん:2010/03/13(土) 08:48:25
へー グーグルってあてにならないんだな、ヤフーサーチ使おうっと

405 :デフォルトの名無しさん:2010/03/13(土) 09:47:15
>>402
その認識で良いです。

確か「ナンセンス」でない「ライセンス」という考え方で、有名な
ライセンス形態だったはずです。

406 :デフォルトの名無しさん:2010/03/13(土) 10:02:52
古き良き時代の「ナンセンスではないライセンス」は、かなり以前に撤廃されています。
当時はデジタルコピーを配布することが、今よりは大変だったため、ライセンス所有者でなくても
(複数の人が同時に使うので無い限り)利用可能でした。

その後ネットワーク速度の向上により、CD 一枚くらいなら気兼ねなく複製をコピーできるようになって、
ライセンス所有者でないと利用できないように変わりました。

実際には、インストール後にアクティベーションを行い、ユーザー名とシリアル番号とコンピューターを
結びつける作業を行います。

「適正な数のコンピュータ」というのは、アクティベーションの回数に上限があることを意味しています。
普通に使う分には問題にならないはずですが、もし上限に達したらサポートにメール/電話すれば
解除してもらえます。実際の値は10回か20回くらいらしいです。


407 :405:2010/03/13(土) 10:38:29
>>406
そうだったのですか、それは大変失礼しました。間違った
書き込みをしてすみませんでした。

408 :デフォルトの名無しさん:2010/03/13(土) 11:01:41
>406
今は上限はwebからincrementできる。名義変更は電話する必要があるけど。

409 :デフォルトの名無しさん:2010/03/13(土) 14:28:16
incrementは1回ずつしか増やしてくれないのが面倒といえば面倒な現在

410 :402:2010/03/13(土) 16:24:40
>>403,405,406,408,409
ありがとうございます。
週明けにでもEmbacarderoさんのサポート窓口に聞いてみます。
結果が分かったら報告しますね。

411 :393:2010/03/13(土) 20:00:14
>>394,395,396
回答ありがとうございます。


>D6 でどこが不満だったのかをまとめれば答えやすいと思うよ

エディタに関して言えば、
 ・フリーカーソルモードが不便(ふつうのエディタみたいなほうがいい)
 ・次を検索はF3でOKだが、前を検索はShift+F3でできて欲しい。

IDEに関して言えば、
 登録したコンポーネントを探しにくい
 
VCLに関しては、
 TListViewがショボい(.NETの方が格段に高機能)

こんなところです。
Delphi2010ではどうなんでしょうか?

412 :デフォルトの名無しさん:2010/03/13(土) 22:35:40
フリーカーソルはD6の時点で無効化方法あっただろ
少しは自分で調べろよ…
Shift+F3は可能、コンポーネントは名前で探せる
TListViewはそもそもListViewのラッパーで
コモンコントロールのバージョン(OSのバージョン)によって機能が違う
D6のメインターゲットOSは2000だし機能が少なくて当然

413 :デフォルトの名無しさん:2010/03/14(日) 09:44:30
>>412
Delphi 2009のVCL機能
http://www.codegear.com/tw/article/38604
TListViewは、Windows XP/Vistaで追加された機能が使えるようになった。

414 :デフォルトの名無しさん:2010/03/14(日) 09:56:13
それってExplorerのグループで表示みたいなのもできる?

415 :デフォルトの名無しさん:2010/03/14(日) 13:37:52
>>414
まさしくそれが追加された。


416 :デフォルトの名無しさん:2010/03/14(日) 13:46:43
SHBrowseForFolderでフォルダー選択ダイアログを出すようにしているのですが、
ダイアログを表示させる時に過去に選択されたフォルダーがある場合、そのフォルダーを
選択した状態で表示させるにはどうすればいいでしょうか?

ググってサンプルコードをコピペして試しているのですが、BrowseInfo構造体で
lpfn := @FolderCallback;
lParam := LongInt(PChar(FolderPath)); //初期フォルダ指定
って、設定してもlParamの設定がおかしいらしくコンパイルエラーになってしまいます。

Dlphi7とXPの環境です。
よろしくお願いします。

417 :デフォルトの名無しさん:2010/03/14(日) 14:33:29
そのコンパイルエラーの内容を書こうぜ

418 :デフォルトの名無しさん:2010/03/14(日) 15:16:18
すみません。
解決しました。
lpfn := @FolderCallback;
の@を消して

lpfn := FolderCallback;
lParam := LongInt(FolderPath);

これで動きました。
でも、ここの設定はコールバック関数を指定するから
@っているはずですよね?
ググったサンプルコードも皆@付いてました。

419 :デフォルトの名無しさん:2010/03/14(日) 15:28:13
FolderCallbackが(名前で推測できるとはいえ)何を表してるのか書いてないのに、どう回答しろと?

http://homepage1.nifty.com/MADIA/delphi/Win32API/SHopenFolder.htm

420 :デフォルトの名無しさん:2010/03/14(日) 15:29:05
>>412

>フリーカーソルはD6の時点で無効化方法あっただろ
>少しは自分で調べろよ…

D6にフリーカーソルモードの無効化方法があるのですか?
調べても見つかりません。
済みませんが教えていただけないでしょうか。


421 :デフォルトの名無しさん:2010/03/14(日) 15:33:56
Delphi6 フリーカーソル 無効 に一致する日本語のページ 約 5,280 件中 1 - 100 件目 (0.57 秒)

422 :デフォルトの名無しさん:2010/03/14(日) 17:20:50
>>420
逆に何を調べたら情報が見つからないのか教えて欲しい

423 :デフォルトの名無しさん:2010/03/14(日) 17:25:56
あなたには聞いてません。黙っててください。

424 :デフォルトの名無しさん:2010/03/14(日) 17:33:39
またヴビ厨の自作自演か。さっさとハローワーク行ってこい。

425 :デフォルトの名無しさん:2010/03/14(日) 21:55:58
>>423は偽善です。私が本物です。

426 :デフォルトの名無しさん:2010/03/15(月) 09:13:44
フリーカーソル無効化のソースをいじくってDelphi2009、2010でも
うごくようにして使ってるぞ

基本的にはコンパイルエラーを取り除くだけで動く
メモリリークしているかもしれないがw

427 :デフォルトの名無しさん:2010/03/15(月) 10:19:32
>>414
ttp://www.gesource.jp/programming/bcb/75.html#listview_group

428 :デフォルトの名無しさん:2010/03/15(月) 12:01:32
アプリケーションの実行フォルダにできるdel01.mbっていうファイルは何ですかね。

429 :デフォルトの名無しさん:2010/03/15(月) 13:35:29
最近のって例えばTStringsにShuffleメソッドを後付けするような機能ってつきました?
古いのでも無理やりできない事もなかったけどオフィシャルな機能として。

430 :デフォルトの名無しさん:2010/03/15(月) 17:38:45
いい加減秋田
本当に知りたいなら体験版で試せば?

431 :デフォルトの名無しさん:2010/03/15(月) 17:51:49
海の水はどうしてですか?

432 :デフォルトの名無しさん:2010/03/15(月) 18:10:44
はい

433 :デフォルトの名無しさん:2010/03/15(月) 18:20:00
TListViewのSubItemがダブルクリックされた時に
いい感じに編集エリアを出す方法を教えれ。

434 :デフォルトの名無しさん:2010/03/15(月) 21:09:34
>428
そんなファイルができたのみたことないわ。

>429
クラスヘルパ

435 :292:2010/03/15(月) 23:22:02
>>428
DBアプリでBDEが作るテンポラリーファイルだったと思う。
アプリ終了しても残ってたら削除しちゃって大丈夫のはず。

436 :デフォルトの名無しさん:2010/03/16(火) 14:22:20
>>433
ダブルクリックされたら動的に生成すれば素敵やん

437 :デフォルトの名無しさん:2010/03/16(火) 17:15:17
編集エリアって何??

438 :デフォルトの名無しさん:2010/03/16(火) 19:08:45
ああもう説明めんどくさい
こんな感じ
ttp://www1.axfc.net/uploader/Sc/so/93094.zip

ttp://www.codeproject.com/KB/list/ListViewCellEditors.aspx
これをサル移植したけど、いんだかわるいんだか。

439 :デフォルトの名無しさん:2010/03/16(火) 19:18:20
わるい

440 :デフォルトの名無しさん:2010/03/16(火) 19:49:02
がっかり

441 :デフォルトの名無しさん:2010/03/16(火) 20:49:37
わかる

442 :433:2010/03/16(火) 22:33:14
くそう
せっかく作った(?)のだがウケが悪かったか。

443 :デフォルトの名無しさん:2010/03/17(水) 02:35:29
がんばれ!ベアーズ

444 :デフォルトの名無しさん:2010/03/17(水) 09:32:14
ふるぅ

445 :デフォルトの名無しさん:2010/03/17(水) 15:11:13
それゆけ!レッドビッキーズ

446 :デフォルトの名無しさん:2010/03/17(水) 20:31:10
コンボボックスのOnMouseLeaveがなんだか変で困っています。
コンボボックス上でマウスを動かすたびにすさまじい
回数OnMouseLeaveイベントが発生します。
エディット等ではなりません。

フォームにコンボボックスとメモだけ貼り付けて、
コンボボックス上でマウスを動かすと、
メモの行数がどんどこ増えていきます。
procedure TForm1.ComboBox1MouseLeave(Sender: TObject);
begin
Memo1.Lines.Add(IntToStr(Memo1.Lines.Count));
end;

環境はDelphi2010です。
なにかうまい対処法はないでしょうか…?

447 :デフォルトの名無しさん:2010/03/17(水) 21:18:44
ほんとだ、MouseMove並みに呼ばれるなw
飛んでくるウィンドウメッセージ調べたら実際に大量に飛んできてるからVCLのバグとかではなさそうだが・・・・

448 :デフォルトの名無しさん:2010/03/18(木) 05:12:59
とりあえずの対処としてはイベントの中でFindVCLWindow(Mouse.CursorPos)<>Senderをチェックするのが手っ取り早そう。

449 :デフォルトの名無しさん:2010/03/18(木) 15:27:19
>>446
とりあえず原因はわかったけど書くと長くなるので対処法だけ
StyleをcsDropDownListにする、これだけ
csDropDownで使う必要がある場合はちょっと面倒なことになるけど

>>448
当たり前だけど全部TComboBox宛の正規のメッセージだから意味がない
違うコントロール宛のメッセージが誤配されてるわけじゃないからね

450 :446:2010/03/18(木) 16:08:58
ありがとうございます。
やりたかったのは、「自作コンボボックスでMouseLeave時にヒントを隠す」
というものでしたので、無駄にメッセージは飛んできますが、対症療法的に
↓みたいな感じにしてみました。

procedure TMyComboBox.WndProc(var AMsg: TMessage);
begin
 if (AMsg.Msg = CM_MOUSELEAVE) then
 begin
  // 自分自身の上にカーソルがあるときは捨てる
  if (FindVCLWindow(Mouse.CursorPos) = Self) then
  begin
   Exit;
  end;

  // ヒント隠す処理
  :
 end;

 inherited;
end;

ちなみに気が付いたのは、コンボボックスのCustomHintにTBalloonHintを
割り当てたときに、激しくヒントがちらついたためです。
仮にバグではないにしても、実用上問題があるような…。

>>449
ユーザーの入力で絞込み、みたいなことをする必要があるので、
csDropDownにしなくてはならないのです…ジレンマです。
エディット部分が何か悪さしているのでしょうか?

451 :デフォルトの名無しさん:2010/03/18(木) 17:12:30
Delphi で書かれたアプリがあるんですが
PC 環境を入れ替えたら一部(かつメイン)のファイル出力が出来なくなってしまいました
それ自体は '06-07 ぐらいで開発が止まっています
自分の環境は XP で、最近クリーンインストールしたばかりです
ファイアウォールでの出力禁止はしていません

症状は
「ファイル」メニューから「別名でファイル保存」を選択
ファイル出力のダイアログは出ず、メニューの「別名で…」が選択不能の状態になる
エラーメッセージやイベントログへの吐き出しはありません

替わりになるようなソフトが他にないため、バージョンを遡って試したり
関連情報をググったりしていますが正直お手上げ状態です…
スレ違いかと思いますが、少しでもヒントいただければ助かります

452 :デフォルトの名無しさん:2010/03/18(木) 18:20:56
>>450
本筋とは外れるけど、フィルタリングみたいなことするならComboBox不向きじゃね?
TEditとTListBoxの方がいい気が

453 :デフォルトの名無しさん:2010/03/18(木) 21:14:18
>>451
MLで聞いた方が早い気がする。
作者が参加している確率高いだろうし。

454 :デフォルトの名無しさん:2010/03/18(木) 23:07:43
>451
互換モードでWin2kなり何なり指定してみては?あとは作者に聞くしかなかろう。
Delphiだからどうこういう問題じゃないと思うが。

455 :451:2010/03/19(金) 00:07:39
>>453-454
レスありがとうございます

そうですね、作者とやりとりできれば最善なんでしょうが
東欧の人だし自分も英語に自信がなく…
ソースは公開されているので、もうちょっとやれるとこまでやってみます

456 :デフォルトの名無しさん:2010/03/19(金) 07:20:27
ソース公開されてるならリンク書いておけば見てもいいと思う奴もいるだろうに

457 :デフォルトの名無しさん:2010/03/19(金) 08:58:12
オープンソースなら自分で直せよ

458 :デフォルトの名無しさん:2010/03/19(金) 10:18:39
>>451
その手の問題って大抵互換モードで解決できるがダメか?
そもそもオープンソースでファイル出力に問題あるとわかっているなら
そこ書き換えるだけじゃないか?

459 :デフォルトの名無しさん:2010/03/19(金) 22:52:13
あーそうですね

460 :451:2010/03/19(金) 23:20:30
件のソフトは初代氏と後継氏の二人?がメインで
最新版ソースには初代氏オリジナル部分は含まれず「必要だからここでDLしてくれ」的指示が入っていました
しかし指定サイトは消滅済み
結局、初代氏サイトの旧版ソース(丸ごと)に行き着きました
そこから必要部分をきれいに引き抜けるかどうかは、いまのところ不明
ちなみに初代氏exeのファイル出力はOKでした…。使い勝手も初代と最新で一長一短

とまあ、オープンでも時間が経っていると色々あるんだなぁと思った次第です
以上報告でした。以後名無しに戻ります

461 :デフォルトの名無しさん:2010/03/20(土) 00:40:52
なんか突っこむ気も起きない
帰ってくれるようだから何も言わないけれども

462 :デフォルトの名無しさん:2010/03/20(土) 11:05:05
コンポーネントのあるイベントに引数を追加したい時って
コンポーネントを継承した新たなコンポーネントを作らないといけない?
それとも、イベントをオーバーライドして普通のプロシージャーみたいな
使い方って出来る?

463 :デフォルトの名無しさん:2010/03/20(土) 11:35:48
そのイベントってそのクラス内から呼ばれるんだろ?
だったら持たせたい引数をクラスのメンバーにしてやればいいんじゃないの?

464 :デフォルトの名無しさん:2010/03/20(土) 11:52:46
>使い方って出来る?
無理です。

OnClick(Sender)に引数追加しようとしたら
呼び出し側もOnClick(Sender, data)とやらないといけないから
どうしてもコンポ側にも手を入れないといけないので。

465 :デフォルトの名無しさん:2010/03/20(土) 16:36:32
Sender に無理やりポインタ渡すとかの話かと思った。

466 :デフォルトの名無しさん:2010/03/20(土) 19:25:03
>>462
呼び出し元コンポがそのイベントを呼ぶためにClickやDoClickなどのメソッドを定義していて、
なおかつそれがvirtual、dynamic、messageで宣言されているならオーバーライドできると言えなくもない

実際にClickやDblClickなどのメソッドは仮想メソッドだから、
事実上OnClickやOnDblClickなどの呼び出しはオーバーライドできるし、
それがなくてもウィンドウメッセージがイベントの起点となっているような場合は
そのメッセージハンドラをオーバーライドしてやれば同じことができる

467 :デフォルトの名無しさん:2010/03/21(日) 11:59:23
>>462
コンポーネントのイベントハンドラから、引数を追加したイベントを発行するってのは?

れい
type TNotifyEventEx = procedure (Sender, Option : TObject) of object;

...

property OnNotifyEx : TNotifyEventEx;

...

procedure THoge.HogeNotifyEvent(Sender : TObject);
var
uge : TUge;
begin
if Assigned(Self.OnNotifyEx) then begin
uge := TUge.Create;
Self.OnNotifyEx(Sender, uge);
uge.Free;
end;
end;



468 :462:2010/03/21(日) 12:36:02
皆さん、レス有り難うございます。
自分にはレベルの高い話の気がしないでもないですが、
出来る前提で色々試そうとも思います。


469 :デフォルトの名無しさん:2010/03/21(日) 17:18:14
具体的に何したいんよ
それによっては引数なんか追加しなくてもいい気がする

470 :デフォルトの名無しさん:2010/03/21(日) 18:15:39
普通に Sender だけで何が不足なのかな?
イベントハンドラ内で Sender を通してそのオブジェクトが特定できれば、public な
プロパティーやらフィールドにアクセスするのは簡単だろうに・・

471 :デフォルトの名無しさん:2010/03/21(日) 22:16:51
あなたには聞いてませんからw

472 :462:2010/03/21(日) 23:10:05
ListViewのSubItemの編集をしたくてググったり
MLの過去ログ見たりしたんだけど、編集するセルの
ところにEditを出す方法しか見あたらないんで、
Draw系のイベントにstringの引数を追加したら
簡単に出来ないかなと思って。

473 :デフォルトの名無しさん:2010/03/21(日) 23:11:13
あなたに回答してませんから

474 :デフォルトの名無しさん:2010/03/21(日) 23:53:45
あなたに答えてませんから

475 :デフォルトの名無しさん:2010/03/22(月) 08:02:06
DelphiのGUIアプリから、ApacheHTTPサーバにアクセスし、様々な情報を
やりとりしたいです。

使えそうなコンポーネントありますでしょうか?
(Delphi2010 Pro版を使っています)

476 :デフォルトの名無しさん:2010/03/22(月) 08:43:55
>>476
Indy?

477 :デフォルトの名無しさん:2010/03/22(月) 08:44:42
安価違い。>>475だた

478 :デフォルトの名無しさん:2010/03/22(月) 09:02:02
>>476

説明不足ですみません。
私が探しているのは、Indy(など)の上位層になり、例えばフォームにあるTStringGridのデータとか
TEdit.TextなどをまとめてXMLエンコードしIndyに渡すようなコンポを探しています。
フォームとIndyの中間に位置するようなコンポです。

479 :デフォルトの名無しさん:2010/03/22(月) 12:25:26
冗談だよね

480 :デフォルトの名無しさん:2010/03/22(月) 13:20:03
いったい何がしたいんだw

481 :433:2010/03/22(月) 16:24:22
>>462
>ListViewのSubItemの編集をしたくてググったり
おまえは俺か。
ttp://cc.embarcadero.com/item/23873
ここのは、キャプションの編集を横取りするタイプ。
BCCの文法が混じっていてコンパイル通らないという
サンプルとしていいんだかわるいんだか。


482 :デフォルトの名無しさん:2010/03/22(月) 17:26:51
>>478
渡すだけとかそんなの自分でコーディングすればええやん
10行もあれば書けるでしょ…

483 :402:2010/03/22(月) 21:43:34
すみません。サポート窓口に聞くまでもなく自己解決しました。
結局、店頭で購入した場合は「指名ユーザ使用権」であり、
このライセンスなら、自分の所有する複数のPCにインストールOKでした。

定義されていたのは、下記の3カ所。

License_ja.rtfの第2条
「(略)使用証書で他の種類の権利の取得が特定されていない限り、
お客様の取得した権利は指名ユーザー使用権です。(略)」

License_ja.rtfの第2条第3項
「(略)指名ユーザーが本製品の使用を許可された唯一の個人である場合、
適正な数のコンピュータに本製品をインストールすることができます。(略)」

Database Software and Developer Tools Licensing
ttp://www.embarcadero.com/jp/services/embarcadero-licensing-options
「指名ユーザー ライセンスは、特定の個人に使用権が与えられるライセンスです。
ソフトウェアは複数のコンピューターにインストールして使用することができますが、
同時に 使用できるのは1つのみです。指名ユーザーライセンスを、
複数のユーザーで共有したり譲渡することはできません。
現在、多くのCodeGear開発ツール が、このライセンス形態を採用しています。」

これで安心してノートPCにもXPmodeにもインストールできます。

みなさんコメントありがとうございました。
では名無しに戻ります。

484 :デフォルトの名無しさん:2010/03/22(月) 22:32:58


485 :デフォルトの名無しさん:2010/03/25(木) 14:15:19
TPrinterを使用して印刷しているのですがこの場合印刷データを
ファイルに保存することは出来ないのでしょうか?

TPrinterはBeginDocの時にヌルクリアしたDocInfoを使って
StartDocを呼び出しているのでlpszOutputを指定する方法が無く困っています。
なにかいい案がありましたらお願いします。

486 :デフォルトの名無しさん:2010/03/25(木) 15:19:48
dekimasu

487 :デフォルトの名無しさん:2010/03/26(金) 01:19:42
TPrinterから派生したクラスを作って、そのインスタンスをSetPrinterで設定するとか。

488 :485:2010/03/26(金) 08:42:22
>>487
それも考えたのですがTPrinterを使う他のコンポーネントが存在しており
TPrinterは1プログラム1インスタンスで動作するので躊躇していました
(印刷処理以外でもプリンタの状態確認にTPrinter()を使ってます)

派生したクラスを同時に使っても問題無いのでしょうか?

489 :デフォルトの名無しさん:2010/03/26(金) 15:05:04
質問です。Delphi2010にて、"Generics.Collections"をusesして
ジェネリクスなオブジェクトのリストのコレクションのメンバにアクセスしたとき、
コンパイルは正しくとおって実行してもエラーなく動作するんですが、左上のエラーが消えません。
例えば TObjectList<TForm> だと、

FL:=TObjectList<TForm>.Create;
FL.Add(Form1);
FL[0].Caption:='abc';

というようにメンバにアクセスすると、コンパイルは正しく通るのですが左上のエラーの欄で

!'TObejectList<TForm>'hは'Caption'という名前のメンバを含んでいません。

というようなエラーが消えません。
どういう理由があってこのような状況になってるか、どなたかご教示いただけないでしょうか?

490 :デフォルトの名無しさん:2010/03/26(金) 20:15:43
コンパイラは最新だがIDEは最新じゃない、と思っておいた方がいい

491 :デフォルトの名無しさん:2010/03/27(土) 00:07:38
行き詰っているので相談させてください
環境はDeklphi2007です。
delphiでDBの操作ソフトの修正に関わっているのですが、コンパイルすると
SrtingtoTdatabaseは互換性がありません
とエラーがでてとまります。
変数(A,B,C,D)
という行があり、Aは同じソースファイルの中でString宣言、BはTdatabese
宣言、C,Dは不明でA,Bの宣言を書き換えても駄目でした。
元々はDelphi6で前任者が作成したものを小生がXpで使用する為に2007で
コンパイルしています。6の環境は残っておらず、前任者とも連絡が取れません。
C、Dの宣言を探す以外になにかよい解決は無いでしょうか?

492 :デフォルトの名無しさん:2010/03/27(土) 01:06:58
>488
普通に印刷するときは通常の(デフォルトの)TPrinterのインスタンスを、ファイルに出力するときは
それ用のTPrinterからの派生クラスのインスタンスを、それぞれとっかえひっかえでSetPrinterすれば
いいんじゃないの?

>489
普通にコンパイルするときとエラーインサイトやコードナビゲーションで使用するコンパイラは
違うものなのでそういう現象がおきる。

>491
プログラミングとかDelphiとかそういうものを理解してる?わからないならわからないって上司に
相談したほうがいいと思うが。できなければソフト屋に外注に出すとか。さもなきゃここに
晒すしかない。すくなくとも
> 変数(A,B,C,D)
> という行があり、
とか
> C、Dの宣言を探す以外になにかよい解決は無いでしょうか?
とか意味不明にもほどがある。

493 :デフォルトの名無しさん:2010/03/27(土) 03:37:29
うるせーばか

494 :デフォルトの名無しさん:2010/03/27(土) 11:06:13
>>492
上司に相談して解決するなら最初からここにくる訳が無い。
1の書き込みを鵜呑みにしてここに書いた俺が馬鹿だったって事だな。
金輪際来ませんのでご安心ください。。


495 :デフォルトの名無しさん:2010/03/27(土) 16:15:22
よかった。もう来ないんだって。

誰だって気違いの相手はしたくないもんね。

496 :デフォルトの名無しさん:2010/03/27(土) 21:12:04
マジレスすると、おそらく関数のパラメータ並びが変更されているのでそれを直す必要がある。
必要な情報は関数のパラメータそれぞれの型とその意味、現在指定されている(エラーになっている)
パラメータそれぞれの型とその意味(内容)。だからCとDの型とその内容は必須な情報。でも
Ctrl+クリックで探せないか?

497 :デフォルトの名無しさん:2010/03/28(日) 01:06:08
>>489 明示的にTFormにキャストすれば?

498 :デフォルトの名無しさん:2010/03/28(日) 03:32:37
それやったらジェネリクスの意味ないだろ
馬鹿か?

499 :デフォルトの名無しさん:2010/03/28(日) 07:55:03
と、馬鹿が申しております。

500 :デフォルトの名無しさん:2010/03/28(日) 13:17:30
ジェネリクスとTObjectListの区別がつかない

501 :デフォルトの名無しさん:2010/03/28(日) 14:17:23
>>499
それ本気で言ってるとしたら頭疑うわ
ジェネリクスって何だか分かってる?

502 :489:2010/03/28(日) 22:37:31
>>497
はじめはTListやTObjectListに入れてキャストしたのをpropertyにしてたんですけど、
ダウンキャストをしたくないのと、getter setterを一々書くのが面倒なんでジェネリクスを使ってるんですよ。

とりあえず割り切ってエラーは見ないように割り切る他ないんでしょうかね。

503 :デフォルトの名無しさん:2010/03/28(日) 22:39:27
いろいろ書き直してたら日本語おかしいまま書きこんでしまった・・・
最後の行は脳内修正して読んでください・・・

504 :デフォルトの名無しさん:2010/03/28(日) 23:11:19
まぁエラーインサイトとかは他でも誤動作するし、気にしすぎないほうがいいと思う。

505 :デフォルトの名無しさん:2010/03/29(月) 02:38:37
エラーインサイトは実装当時から切ってるな
役に立った試しがない

506 :デフォルトの名無しさん:2010/03/29(月) 21:54:11
お世話になります。
TMemoで行や桁があふれたときだけスクロールバーを出すにはどうしたら良いのでしょうか。
ScrollBarsをBothに設定すると常に出っぱなしで見苦しいのです。
他のコントロールだと自動で出したり引っ込めたりするのに、なぜ?

507 :デフォルトの名無しさん:2010/03/29(月) 22:02:16
んー自分でOnChangeイベントあたりで制御するしかないんじゃないかなぁ。何でそうなっているかって?
WindowsのEDITコントロールがそう作られているからだな。

508 :デフォルトの名無しさん:2010/03/29(月) 22:57:00
>>506
SynEditなんてどう?などと適当なことを言ってみる。

509 :デフォルトの名無しさん:2010/03/30(火) 01:27:19
>>507
そうなんですか…。
Delphiの構文さえ理解してないレベルの自分には難しそうです。
>>508
SynEdit調べましたが、ちょっと用途が違うような。
ただシンプルにテキストが入出力できれば良いので。

ふと思い立って、TRichEditならどうかと。
これはMemoと違い、あふれたときだけスクロールバーが出るじゃありませんか!
これでヨシ!と思ったんですが、今度はポップアップメニューが出ません orz

510 :デフォルトの名無しさん:2010/03/30(火) 02:43:38
PopupMenuを設定すれば?

511 :デフォルトの名無しさん:2010/03/30(火) 09:01:56
>>510
やってみます。スクロールバーを出すよりは難しくなさそうなので。

512 :デフォルトの名無しさん:2010/03/30(火) 22:44:01
Delphi6 Personalを使用中
ヘルプが変です
キーワード検索すれば出てくるけど、VCLリファレンス目次のルーチン一覧(カテゴリ別)には
見当たらない項目がいっぱいあるんですけど、これは仕様でしょうか
FileAge関数とか、カテゴリMBCSユーティリティの全部とか

MBCSユーティリティは重要視されてないのかな

AnsiCompareFileName関数の説明もよく分かりません
・ AnsiCompareFileName 関数は,大文字と小文字を区別しないで S1 と S2 を比較します。比較演算は,現在のロケールに基づいて行われます。
AnsiCompareText('AA','aa') { 0 を返す }
AnsiCompareFileName('AA','aa') { 0 ではなく 1 を返す }
大文字と小文字を区別しないはずなのに…?

AnsiLastChar関数は、文字列処理ルーチン(ヌルで終わる)に入れるべきかと

513 :デフォルトの名無しさん:2010/03/31(水) 10:58:29
最小化した時も処理を続けていて、その時のデータに応じて
タスクバーに表示される文字を変更したいんだけど
どうしたらいいですか?


514 :デフォルトの名無しさん:2010/03/31(水) 11:11:06
フォームのCaptionかApplication.Titleを変更する。

515 :デフォルトの名無しさん:2010/03/31(水) 13:31:53
>>512
そんな10年も前の終わったバージョンに対して文句言うとか頭おかしいんじゃないでしょうか

516 :デフォルトの名無しさん:2010/03/31(水) 18:19:57
デザイン時にTPageControlを右クリックすると
「ページ新規作成」や「ページの削除」といった
メニューが表示され、追加・削除が出来ますが
これはどのように実現したらよいのでしょうか?

「子・孫を持つパネル」のような自作コンポーネントを
作成していて、その子・孫パネルを追加するのに、
メニューでやりたいなと思った次第です。

517 :デフォルトの名無しさん:2010/03/31(水) 19:32:09
目で見たものを真似できない人は何も作れないと思う

518 :デフォルトの名無しさん:2010/03/31(水) 21:33:33
つまり>>517は自分は何も作れないと宣言したかったんですね、わかります
わかりますがそういうのはチラシの裏にでも書いて下さい

519 :デフォルトの名無しさん:2010/04/01(木) 02:43:49
>>518
わざわざ自己紹介ご苦労さん

520 :デフォルトの名無しさん:2010/04/01(木) 03:42:49
顔真っ赤だよ?どうしたの?

521 :デフォルトの名無しさん:2010/04/01(木) 06:50:33
と、顔を真っ赤にして申しております。


522 :デフォルトの名無しさん:2010/04/01(木) 09:14:51
>>520
つ 鏡

523 :デフォルトの名無しさん:2010/04/01(木) 12:10:51
ListViewのことで質問です。
セルをクリックした時に何行目何列のセルかを知りたくて
下記のサンプルを見つけました。
Item部のCaption文字列の上とSubItemの部分をクリックした時はいいのですが、
Item部の余白部分をクリックすると何も取得出来ません。
Item部のどこをクリックしても取得出来るようにするにはどうしたらいいですか?

var
wCtrl : TListView;
wStruct: TLVHitTestInfo;

begin
 wCtrl:= (Sender as TListView);
FillChar(wStruct, SizeOf(TLVHitTestInfo), 0);

// マウスカーソルの座標を取得
GetCursorPos(wStruct.pt);
// スクリーン座標からクライアント座標に変換
wStruct.pt:= wCtrl.ScreenToClient(wStruct.pt);

//repeat
wStruct.pt.X:=10;
// 選択された項目の判定
if wCtrl.Perform(LVM_SUBITEMHITTEST, 0, LPARAM(@wStruct)) >= 0 then
with wStruct do
begin
Item:=(Sender as TListView).Items.Item[iItem];
end;


524 :520:2010/04/01(木) 13:33:09
>>521-522
>>518に向けて書いたんだけど、ひょっとして思い当たる節でもあったの?

525 :デフォルトの名無しさん:2010/04/01(木) 13:36:00
結局>516が分からない馬鹿しかいないんですね
レベル低いですねもう来ません

526 :デフォルトの名無しさん:2010/04/01(木) 17:07:10
逆ギレ乙です

527 :デフォルトの名無しさん:2010/04/02(金) 01:27:09
なんつーか、回答する気も起こらないつまらん質問ってあるよね。
PopupMenu の使い方を知らんのか、動的にコンポつくる方法が知らんのか
こっちが勝手に想像するのも面倒くさいような質問とか。

528 :デフォルトの名無しさん:2010/04/02(金) 04:22:45
527 はこのスレの意義を理解できないのか?

>Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
>もしくは質問者自身何が何だか分からない質問を
>勇気を持って書き込むスレッドです。

回答する気にならないのなら、黙っていなさい。無理にコメントを書くことは無い。

529 :デフォルトの名無しさん:2010/04/02(金) 07:08:59
>516が知りたいのはToolsAPI(OTA)の話だと思う。ListViewとかTreeViewのように
デザイナ上でそのコンポーネントのカスタム項目を使えるようにしたい、とか。Inside Delphi
あたりに載ってたような。

530 :デフォルトの名無しさん:2010/04/02(金) 08:01:18
>>528
拍手ーー

531 :516:2010/04/02(金) 09:01:08
>>529
仰るとおりです。デザイン時の話です。
ToolsAPIというのは初めて聞きました。ググって見た感じでは
まさにそれっぽいのですが、ちょっと私には敷居が高そうだなあ…。

とりあえず子パネルのSetParentと親パネルのValidateInsertを
overrideして他のコンポーネントを(に)置けないようにして
デザイナ上で貼り付けさせるとかしてお茶を濁すことにします。

532 :デフォルトの名無しさん:2010/04/02(金) 10:35:21
Source\ToolsAPIとSource\Win32\Property Editorsを参考に(場所はDelphiの
バージョンで違ってくるかも)。

533 :デフォルトの名無しさん:2010/04/02(金) 13:02:05
もう少しちゃんと説明して下さい

534 :516:2010/04/02(金) 13:33:33
IDが出ないのをいいことに質問者のフリをして煽る人がいるみたいですね。
まあ句読点とかの文体が違うので、皆さんも分かってるとは思いますけど…。

535 :デフォルトの名無しさん:2010/04/02(金) 14:41:00
13:33:33

536 :デフォルトの名無しさん:2010/04/02(金) 15:15:12
>>534
そんなのどうでもいいし
帰れ

537 :523:2010/04/02(金) 23:12:57
また、Listviewで質問なんだけどmousedownとかうpを
受け付けてもらえないんだけど、なんか設定とかある?

538 :デフォルトの名無しさん:2010/04/04(日) 20:53:06
エクセルオートシェイプの矢印をTImageやTFormに描き、
bmpで保存したいのですが、それは加納ですか?
というか、滑らかで綺麗な矢印がTImageに描ければ
いいだけなんですけど・・・
誰かソース書いてもらえません?

539 :デフォルトの名無しさん:2010/04/04(日) 21:04:59
化膿です

540 :デフォルトの名無しさん:2010/04/04(日) 22:53:11
適当なグラフィックツールで2倍とか4倍に描いたものを縮小してBMP形式で保存して
取り込めばいいんじゃね?

541 :デフォルトの名無しさん:2010/04/06(火) 11:56:00
オートシェイプをPrtScnキーで取り込んでMSペイントで保存してTImageでStretchする。

542 :デフォルトの名無しさん:2010/04/06(火) 23:29:32
フォームの上にパネルを1個置き、パネルのボーダースタイルをbsSingleにします。
そのパネルの上にボタンを置きます。ボタンのアンカープロパティを[akRight,akBottom]に設定します。
で、フォームの右クリックメニューから「エディタで表示」して、「フォームを表示」で元に戻します。
これを繰り返すとボタンの位置がどんどんずれていきます。マジで堪りません。
プロジェクトを開くたびにどんどんおかしくなっていきます。


543 :デフォルトの名無しさん:2010/04/06(火) 23:35:15
パネル以外のコンテナでもページコントロールのBorderWidthを設定したり、
スクロールボックスでも発生します。アンカーはデフォルト以外に設定すると
位置がずれていたり、サイズが変わったりします。
ポトペタが売りの製品で基本の部分でバグるなんてあまりにもひどすぎます。
クソツールのようです。



544 :デフォルトの名無しさん:2010/04/07(水) 01:53:38
そういうのはオッチャスレでやってください
ここは質問スレです

545 :デフォルトの名無しさん:2010/04/07(水) 02:00:21
一応手持ちの歴代Delphi(6〜2010)で試してみたけど発生しないなw
捏造もオッチャスレの受け持ちなんでやっぱりあっちでどうぞ
バージョン書いてない時点で結構怪しかったけど
もしくはパッチあててないだけという情けない落ち?

546 :デフォルトの名無しさん:2010/04/07(水) 09:52:03
>>545
まじで言ってます?2010でも2005でも発生しますよ。それ以前は試してません。
「エディタで表示」ってのはフォームのDFMをテキスト形式でみるメニューのことです。
で、「フォームを表示」で元に戻すと、1回やるたびに4ピクセル分ずれます。
4ピクセルってボーダーの幅(GetSystemMetrics(SM_CXBOARDER)で、その分、クライアント領域が
小さくなるのにAnchorsなどの配置処理で考慮に入れてないんじゃ?と思ってます。
ソース追っかけ中。

547 :デフォルトの名無しさん:2010/04/07(水) 10:01:07
環境によって変わるのでわ?

自分もPanelの中に貼り付けたコンポをalclientにしているのに高さが追随してくれない現象を体験しているので。
この現象が出るのはXPでW2Kは問題なしだが、自分以外のXPマシンでどうだかは知らない。
(Del7pro/W2Kでコンパイル/パッチは全部当ててるはず)

548 :デフォルトの名無しさん:2010/04/07(水) 10:07:20
自分の試した環境ではWinXPモードとWin7とWin2000で発生します。
ここではボタンを配置しましたが、Anchorsプロパティをデフォルトの[akLeft,akTop]以外に
設定したコントロールすべての位置、サイズがどんどんずれていきます。
コンテナの方はパネル、スクロールボックス、ページコントールのタブシートなどです。



549 :デフォルトの名無しさん:2010/04/07(水) 13:17:22
2k+D7Pro発生せず。
他のコンポでも試したがなんもおこらんよ。
手順は>>542の通りやった。


550 :デフォルトの名無しさん:2010/04/07(水) 13:42:02
XP+2010で発生せずだなー。
Turboもあるけど試してない

551 :デフォルトの名無しさん:2010/04/07(水) 14:47:13
よほど特殊な環境なんだろうな
なのに環境情報は後出し、しかも小出し
解決する気のないただのアホにしか見えない

552 :デフォルトの名無しさん:2010/04/07(水) 16:41:28
http://www1.axfc.net/uploader/Sc/
のコメントDelのSc_100990.zipでアップロードしておきました。5秒で再現できるんですが。
上記の操作を繰り返すとボタンの位置がずれていきます。


553 :デフォルトの名無しさん:2010/04/07(水) 18:38:24
2k+D6Per発生せず。
手順は>>542の通りやった。

554 :デフォルトの名無しさん:2010/04/07(水) 19:23:08
xp(sp3)+d7ent(sp1)だけど発生しなかった。

HDDを交換でXPをクリーンインストールしたいんだけど
D7のライブラリパスとかを一発で元に戻す事ってできる?

555 :デフォルトの名無しさん:2010/04/07(水) 20:24:04
>>553
んー。発生しませんか。お手数おかけました。ありがとうございます。
しばらくもうちょっと調べてみます。


556 :デフォルトの名無しさん:2010/04/07(水) 22:17:01
>554
該当レジストリを持っていくっていう手もあると思うが>設定の引っ越し。

557 :デフォルトの名無しさん:2010/04/07(水) 22:55:14
xp sp3+turbo delphiで発生しますた

558 :デフォルトの名無しさん:2010/04/08(木) 10:51:28
発生してた奴はOSとDのバージョンだけじゃなくて
ウィンドウ周りに関する環境設定情報を全部書き出せ

559 :デフォルトの名無しさん:2010/04/08(木) 10:55:20
そんな書き方じゃまともな情報は上がってこないぞ

560 :デフォルトの名無しさん:2010/04/08(木) 17:14:14
今のところ再現画像、再現動画等なし

561 :デフォルトの名無しさん:2010/04/08(木) 19:32:37
オレのところでも発生したわ。
557と同じXPSP3+Turboだけど。

bsSingleとかで検索したら、似て非なる事例が何個か出てくる。

562 :デフォルトの名無しさん:2010/04/09(金) 11:22:49
自演、乙。
オッチャ盛況だよ。

563 :デフォルトの名無しさん:2010/04/09(金) 16:00:49
何個かしかないなら挙げればいいのに、しないのは何故なんだろうね

564 :561:2010/04/09(金) 16:55:56
Win98+Del6Per(XPSP3上のVirtual PC 2007)では発生しなかったわ。
アンカーの両側がオンだと、繰り返すたびにボタンが縮んでいくのが笑える。

まあ確かに、くだすれの話題ではないか。

565 :デフォルトの名無しさん:2010/04/11(日) 13:25:46
Del7のVCLに直接手を入れて使ってる人いる?
VCLってリコンパイルできるのかな。

566 :191:2010/04/11(日) 14:21:39
超初心者スレなのにみんなレベル高すぎでついていけませんT_T

567 :デフォルトの名無しさん:2010/04/11(日) 14:39:48
途中で書き込んじゃった。
最近のバージョンって書籍でリファレンスって出てないんでしょうか。
自分としては首っ引きでページ捲り捲り勉強する方がしっくり来るのですが…
昔はパッケージにちゃんと含まれてたんですよね?

568 :デフォルトの名無しさん:2010/04/11(日) 15:30:19
>>565
できる
>>566-567
印刷

569 :デフォルトの名無しさん:2010/04/11(日) 20:14:09
コミュニケーションのとれないおっさんだなw

570 :デフォルトの名無しさん:2010/04/12(月) 00:41:45
おっさんきもい

571 :デフォルトの名無しさん:2010/04/12(月) 13:10:21
おっさんかっこいい

572 :デフォルトの名無しさん:2010/04/12(月) 14:25:42
あっちゃんかっこいい

573 :デフォルトの名無しさん:2010/04/13(火) 11:51:03
>>569

574 :554:2010/04/13(火) 22:35:55
ライブラリパスって普通にテキストでコピーしとけば良かったのね。

575 :デフォルトの名無しさん:2010/04/14(水) 12:56:06
Javascriptはやたら柔軟です。

ブックマークレットの例
Javascript:for(var I=0;I<3;++I){alert(['One!','Two!!','Three!!!'][I]);};

Delphi言語では上記の ['One!','Two!!','Three!!!'][I] みたいなお手軽な書き方はないでしょうか?
オープン配列コンストラクタというのが近いかなと思ったんですが、違ったようです。

576 :デフォルトの名無しさん:2010/04/14(水) 13:10:11
function getarr(arr: array of string): TStringDynArray;
var
i: Integer;
begin
setlength(result, length(arr));
for i := 0 to high(arr) do Result[i] := arr[i];
end;

getarr(['a', 'b', 'c'])[0]というのはできなくもないけど
今の処理系では手軽表記はないと思う。

いつの日か'one'[2]と同様 ['One!','Two!!','Three!!!'][I] が通るようになるかもしれないけどな。

577 :デフォルトの名無しさん:2010/04/14(水) 13:29:46
Cだと通るよね

578 :デフォルトの名無しさん:2010/04/14(水) 13:44:23
>>575
ttp://d.hatena.ne.jp/tales/20091020
ttp://d.hatena.ne.jp/tales/20100319
この辺を応用すると一応書ける

uses .., Types;

var
 s: string;
 i: Integer;
begin
 for s in TStringDynArray.Create('One!','Two!!','Three!!!') do
  ShowMessage(s);
 for i := 0 to 2 do
  ShowMessage(TStringDynArray.Create('One!','Two!!','Three!!!')[i]);
end;

579 :デフォルトの名無しさん:2010/04/16(金) 12:32:54
教えてください。D6パーソナル使用です。
EXE自身のアイコンをTImageに表示しています。
アイコンの透過色が透明になってくれるのは良いのですが、白色まで透明になってしまいます。
何がいけないのでしょうか。それとも全部間違っているのでしょうか。
プロジェクトのオプションに設定しているicoファイルはこんな感じです。
http://www1.axfc.net/uploader/File/so/42162

var
Icon:TIcon;
begin
Icon:=TIcon.Create;
Icon.Handle:=Application.Icon.Handle;
if Icon.Handle<>0 then
Image1.Canvas.Draw(0,0,Icon);
Icon.Free;
end;

580 :デフォルトの名無しさん:2010/04/16(金) 13:46:07
transparent

581 :デフォルトの名無しさん:2010/04/16(金) 15:39:26
Transparentが関わってそうなことは想像できるのですが、2色が透過してしまうという上記例の場合
どのようにすれば良いのか分かりませんでした。もしよろしければご教示下さい。

結局ですが自己解決しました。以下のように修正。
Image1.Canvas.Draw(0,0,Icon); → Image1.Picture.Icon:=Icon;
やり方が根本的に間違っていたということでした。
しかし、こんな方法↓でもOkでした。
Image1.Picture.Icon.Handle:=Icon.Handle;
Image1.Picture.Icon.Assign(Icon);
一体どれが正しいのか??

さらに、Handleってなんなんだ?と思ったので調べると、32bit整数だと。ならば、
var
Icon:Integer;
begin
Icon:=Application.Icon.Handle;
if Icon<>0 then
Image1.Picture.Icon.Handle:=Icon;
end;
と、やってみたら大丈夫でした。
こんなコードでいいんでしょうか???

582 :デフォルトの名無しさん:2010/04/18(日) 00:36:03
ListBox.Items.Selectedが画面外の時、
その項目が表示されるようにスクロールするやり方教えてください

583 :デフォルトの名無しさん:2010/04/18(日) 04:35:59
はい

584 :デフォルトの名無しさん:2010/04/18(日) 06:47:12
>>582 TopIndex

585 :デフォルトの名無しさん:2010/04/18(日) 06:51:43
>>581
Image1.Picture.Assign(Application.Icon);
これだけでいいと思う。(D6パーは持ってない

586 :デフォルトの名無しさん:2010/04/18(日) 16:59:50
>>582
MakeVisible

587 :デフォルトの名無しさん:2010/04/18(日) 23:10:54
キャプチャーを作ってみたんだけど、ウィンドハンドルからデバイスコンテキストを
取得して指定の画面のキャプチャーを取ってるつもりなんだけど、わざと取りたい画面の上に
別のウィンド置いとくとその別のウィンドもキャプチャーされるんだけどそんなもの?


588 :デフォルトの名無しさん:2010/04/19(月) 00:14:15
XP以降なら個別にとれる
詳細はググれ

589 :587:2010/04/19(月) 02:37:57
ググったらで来た。
ありがとう

590 :デフォルトの名無しさん:2010/04/19(月) 07:57:21
>>589
興味有るから、やり方教えて

591 :デフォルトの名無しさん:2010/04/19(月) 09:51:25
printwindowを使うんだって。
使い方はググった方が早い。
簡単だよ。

592 :デフォルトの名無しさん:2010/04/19(月) 14:00:11
>>585
D6パーソナルでもOkでした。正解はスッキリ簡単でしたね。
リソースからアイコン削除してApplication.Iconが無い状態(有り得ないけど)にしても
表示されないだけでエラー無し。
教えてもらってから理解したけど、IDEでImage1.Pictureに画像をセットするのとほぼ同じ動作ということですね。
ありがとうございました。

593 :デフォルトの名無しさん:2010/04/19(月) 17:55:06
>>591
ありがとう!
がんばってみる

594 :デフォルトの名無しさん:2010/04/20(火) 23:58:23
IDEのエディタマクロ書きたいんだけどそういう情報ってどこにあるの?

595 :デフォルトの名無しさん:2010/04/26(月) 17:46:07
RichEditにDephiのソースコードを着色した状態で表示する
サンプルなりコンポなりがあったら教えてください。

596 :デフォルトの名無しさん:2010/04/26(月) 19:50:22
TParser使え

597 :デフォルトの名無しさん:2010/04/26(月) 22:45:23
RichEditの使い方が分かりません。
単純に任意の色で文字を書いて、改行を付加する/しない が選べるようにしたいだけ
なのですが、どのようにしたら良いのか分かりません。
こんなイメージで使えるprocedureを作りたいです。
const
CRLF=#$0D#$0A;

RichWrite('エン', clBlue);
RichWrite('バカ', clRed);
RichWrite('デロ', clYellow);
RichWrite('☆', clGreen);
RichWrite('Delphi'+CRLF, clBlack);
RichWrite('Hello'+CRLF, clAqua);

RichEdit1に書かれる結果:
エンバカデロ☆Delphi // 青色赤色黄色緑黒色
Hello // 水色

これを実現するための材料だけでも良いので教えてください。よろしくお願いします。
一応ですが、私は>>595とは無関係です。

598 :デフォルトの名無しさん:2010/04/26(月) 23:01:57
SelAttribute(ただし遅い)

599 :デフォルトの名無しさん:2010/04/26(月) 23:34:48
>>598 ありがとうございます。
SelAttributesはヘルプによると、
>テキストを新規に挿入するときには,SelAttributes のフォント属性が適用されます。
とのことなので良さそうなのですが、改行無しで文字列を追加したい場合はどのように
すれば良いのでしょうか?

600 :デフォルトの名無しさん:2010/04/26(月) 23:36:49
seltext

601 :デフォルトの名無しさん:2010/04/27(火) 00:06:58
>>600 うーん分からないです。
SelTextプロパティを使ったサンプルをいただけないでしょうか。

602 :デフォルトの名無しさん:2010/04/27(火) 00:10:21
つ ttp://www.google.co.jp/search?hl=ja&q=delphi+seltext+SelAttributes

603 :デフォルトの名無しさん:2010/04/27(火) 00:50:57
ああっ、分かりました!
SelStart := GetTextLen;
SelText := 'ABC';
ですね!
「Delphi SelText SelAttributes」でググると一番最初に出てくる
http://delphi.about.com/od/delphitips2008/qt/format_richedit.htm
の記事が分かりやすいです。
今までさんざん探してたんですが、こういう単純で基本的な内容のサンプルは初めて見ました。
ようするに、
with RichEdit1 do
begin
SelStart := GetTextLen;
SelAttributes.Color := clBlue;
SelText := 'エンバカデロ';
SelAttributes.Color := clBlack;
SelText := 'Delphi'+CRLF;
end;
みたいな感じにすればOkですね。これをprocedureにしてみます。
ありがとうございました。

604 :デフォルトの名無しさん:2010/04/27(火) 08:53:22
グループボックスのCaptionがCheckBoxになっているコンポーネントってないでしょうか?

605 :デフォルトの名無しさん:2010/04/27(火) 09:06:16
グループボックスのキャプションをなしにして、キャプションの位置にチェックボックスを置けば?

606 :デフォルトの名無しさん:2010/04/27(火) 16:29:52
>>604
ググって一発で出てきたんだけど
ttp://www.delphidabbler.com/tips/112

607 :デフォルトの名無しさん:2010/04/27(火) 20:18:13


608 :604:2010/04/27(火) 23:56:33
>>605,606
トンです。
でけました。

609 :デフォルトの名無しさん:2010/05/02(日) 08:17:35
del標準の関数でbitmapをjpegに変換すると、低圧縮でも汚いのできれいに変換できるコンポとかってないですか?


610 :デフォルトの名無しさん:2010/05/02(日) 08:23:04
ないです

611 :デフォルトの名無しさん:2010/05/02(日) 13:29:03
>>609
JPEGが何なのか調べてくるといいですよ^^

612 :デフォルトの名無しさん:2010/05/03(月) 15:08:57
正しいことが何なのか、この胸にわかるまで〜

613 :609:2010/05/03(月) 23:15:23
Jpegへ綺麗に変換できるコンポがあって説明を読むと、
delphiのはサンプリングが4:1:1だから汚いと書いてありました。
del7proなんですが、このサンプリングレートを変えることは出来ませんか?

614 :デフォルトの名無しさん:2010/05/04(火) 00:40:48
c言語の
float range_0[] = { 0, 256 };
float* ranges[] = { range_0 };

をDelphiで書き換えたいのですが
var
range_0: array[0..1] of Float = (0, 255);
ranges: array[0..0] of PFloat;
begin
  ranges[0] := @range_0;
・・・・・・
end;
でいいのでしょうか?

Floatは
type
Float = Single;
PFloat = ^Float;
で作ってあります。

どなたかわかる方おられましたらよろしくお願いします。

615 :デフォルトの名無しさん:2010/05/04(火) 03:06:22
なんで数字まで変わっちゃうんでしょうか

616 :デフォルトの名無しさん:2010/05/04(火) 03:41:13
>>613
jpeglib.hのjpeg_component_infoをjpeg.pasに定義してcomp_infoを^jpeg_component_infoにして
TJPEGImage.Compressで
for i:= 0 to 2 do begin
jc.c.comp_info[i].h_samp_factor:=1;
jc.c.comp_info[i].v_samp_factor:=1;
end;
とかすればイケるのかな

つーか、そのコンポとやらを使えば良いんじゃないかな
酔ってるし寝るのであとは知らん

617 :614:2010/05/04(火) 08:24:11
>>615
レスありがとうございます。
数字は素で間違えました;

618 :デフォルトの名無しさん:2010/05/04(火) 08:37:43
Cうろ覚えだけど愚直に移すならこんな感じか。

type
Float = Single;
PFLoat = ^Single;
TFloatArray = array [0..High(Integer) div SizeOf(FLoat)-1] of Float;
PFloatArray = ^TFloatArray;

var
range_0: array [0..1] of Float = (0,255);
ranges: array[0..0] of PFloatArray = (@range_0);

ranges[0][0] ==> 0
ranges[0][1] ==> 255


619 :614:2010/05/04(火) 15:27:34
>>618
こういった書き方は、初めて知りました。
とても勉強になりました。ありがとうございます。

620 :デフォルトの名無しさん:2010/05/05(水) 09:59:28
>>618
そこまでこだわるならHigh(Integer)じゃなくて(High(Integer)+1)じゃね?
もしくはせっかく定数が用意されてるんだからMaxInt+1でもいいかと

621 :デフォルトの名無しさん:2010/05/05(水) 14:11:06
ranges: array [0..255] of Single; とどう違うかさっぱりワカンネ

622 :デフォルトの名無しさん:2010/05/05(水) 23:27:13
何で1足すんだよ

623 :デフォルトの名無しさん:2010/05/06(木) 01:25:46
>>621
どう違うかどころか全然違うよw
実際に計算してみたら?
>>622
High(Integer) div SizeOf(Float)じゃなくてHigh(Integer) / SizeOf(Float)を計算すれば分かる

624 :デフォルトの名無しさん:2010/05/06(木) 01:55:41
相変わらずどうでもいい頑張り方だな

625 :デフォルトの名無しさん:2010/05/06(木) 04:02:03
そのどうでもいいレスよりマシじゃない?

626 :デフォルトの名無しさん:2010/05/07(金) 10:01:09
WindowsXP SP3
DELPHI7
SQLSERVER2000
BDE

画像ファイル(JPG)を読み込み
SQLServerの画像項目(IMAGE型)に格納したいんですが


AFileName:='IMAGE.jpg';
jp :=TJPEGImage.Create;
jp.LoadFromFile(AFileName);

BDEの画像項目.Assign(jp);

上記を実行すると
「〜型が一致しません。VarBytesに対してBlobが渡されました」とエラーが出てしまいます。

blobからVarBytesに変換する処理が必要なのかと思い調べたのですがよくわかりませんでした。

ADOを使用した場合はネットから引用したソースでうまく動いたのですが、
該当システムはBDEで統一させたいので質問させていただきました。
宜しくお願い致します。

627 :デフォルトの名無しさん:2010/05/07(金) 11:37:45
BDE からの接続形態は?
ODBC ? SQL-Link ?

628 :デフォルトの名無しさん:2010/05/07(金) 12:08:57
>>627 ODBCです

629 :デフォルトの名無しさん:2010/05/09(日) 17:07:02
a-zから10桁の文字列生成をしてみようと思って
'', 'a'..'z'の配列から文字列を取り出してつなげていくプログラムを組んでみたのですが、
forを10重にしたコード書いたけど
ぐぐってみたらX種類の文字のN重ループは
for i := 0 to Power(X, N)-1 do begin
 for j := 0 to N-1 do begin
で代用出来ると書かれていたのですが、
文字列の取り出し方がわかりません。
str := mojiretsu[Trunc(i / j) mod High(mojiretsu)] + str;
としてみたらなんとなくそれっぽい感じだったんだけど文字列がループしてしまいました。

mojiretsuにアクセスする式はどうかけばいいのでしょうか?

630 :629:2010/05/09(日) 17:07:43
コードはこんな感じにしてみました
uses
SysUtils, Math, Windows;

const
StrLenMax = 27;
keta = 10;
var
i : LongWord;
j, k : Integer;
str : String;
mojiretsu : array[0..StrLenMax-1] of string;
begin
{ TODO -oUser -cConsole Main : ここにプログラムコードを書いてください }
mojiretsu[0] := '';
for k := Low(mojiretsu) + 1 to High(mojiretsu) do begin
mojiretsu[k] := Chr(97+k-1);
end;

for i := 0 to Trunc(Power(High(mojiretsu), keta))-1 do begin
str := '';
for j := 0 to keta-1 do begin
str := mojiretsu[Trunc(i / j) mod High(mojiretsu)] + str;
end;
Writeln(str);
Sleep(100);
end;
end.


631 :デフォルトの名無しさん:2010/05/10(月) 01:55:29
なんで乱数を使わないのかと小一時間

632 :629:2010/05/10(月) 04:10:41
>>631
期待している動作としては
a, b, c, d ... z, aa, ab, ac .. az, ba, bb
みたいな感じで指定した桁数の文字列を生成したいです。

633 :デフォルトの名無しさん:2010/05/10(月) 05:36:27
テストとか学校の課題?

>ぐぐってみたらX種類の文字のN重ループは
>for i := 0 to Power(X, N)-1 do begin
> for j := 0 to N-1 do begin
>で代用出来ると書かれていたのですが

元 URL を出していただけるか、元 URL のところに相談を持ち込んだほうがよいかも。

このアルゴリズム断片は、整数を26進数表記で処理するアイデアです。
i が対象となる全整数、j が 26進数変換の変換対象桁数。
i が 32 なら、
32 / 26 -> 1 余り 6 -> 'g'
1 / 26 -> 0 余り 1 -> 'b'
文字列として 'bg' を得る。
となります。

アルゴリズムとしては簡単なほうですが、
* 全組み合わせを整数から生成しているけど 26進数10桁だと 16進で 806406972400 で
32bit に収まらないから int64 にしないと。
* 0-9 が 10進で、a-z で 26進。'a' が 0 を意味するので、このアルゴリズムを単純実装
したときは aaaaaaaaaa から zzzzzzzzzz が生成されます。頭の a を消去(ゼロサプレス)
しても a,b ... y ときて z の次は aa ではなく ba です。
* おそらく、遅い。


634 :629:2010/05/10(月) 05:58:41
>>633
いえ、ブルートフォースもどきなプログラムを作ろうと思ってまずは文字列生成部分を作ってみようとしました。
参考URLはhttp://dobon.net/vb/bbs/log3-38/23321.htmlです。
同じように26進数のことをいわれていたのですけど、
結局わからなかったです。
まさか32bitに収まらないとは・・・
なんとなく10桁って書いたので6桁でも8桁でもいいのですが・・・

635 :デフォルトの名無しさん:2010/05/10(月) 09:00:01
var table: array [#0..#255] of char;

procedure init;
var i: char;
begin
    for i := #0 to #255 do
        case i of
            'a'..'y': table[i] := succ(i);
            'z': table[i] := 'a';
            else table[i] := #0;
        end;
end;

function getnext(s: string): string;
var
    i: integer;
    c: char;
begin
    result := s;
    for i := length(result) downto 1 do
    begin
        c := table[result[i]];
        result[i] := c;
        if c <> 'a' then break;
    end;
end;


636 :デフォルトの名無しさん:2010/05/10(月) 09:00:54
init;
getnext('aaa') ==> 'aab'
getnext('zzz') ==> 'aaa'

var s: string;
begin
    init;
    s := 'aaa';
    while true do
    begin
        writeln(s);
        if s = 'zzz' then break;
    end;
end;

最速狙いたいなら普通にCでDLL書いたほうがいい。

637 :デフォルトの名無しさん:2010/05/10(月) 15:34:26
別にCなんか使わなくてもインラインアセンブラで十分じゃん

638 :629:2010/05/10(月) 16:20:22
http://www.ss.u-tokai.ac.jp/~ooya/Program/Console/NShinhou1.txt
ここを参考にしたらなんとかいけそうでした。
ご協力ありがとうございました。

639 :デフォルトの名無しさん:2010/05/11(火) 14:28:43
Delphi7だけどバグの修正これでいいかな
Quality Centralの33496
http://qc.embarcadero.com/wc/qcmain.aspx?d=33496

procedure TMenuItem.DoDrawText(ACanvas: TCanvas; const ACaption: string;
.


  with ACanvas do
  begin
    if Text = cLineCaption then//追加2010.05.11 QC33496
      exit;//追加2010.05.11 QC33496
    if IsLine then
    begin
       if Flags and DT_CALCRECT = 0 then
      begin
        R := Rect;
        Inc(R.Top, 4);
        DrawEdge(Handle, R, EDGE_ETCHED, BF_TOP);
      end;
    end

2箇所追加してみたけど(新しいの2010も治っていないけど)

640 :デフォルトの名無しさん:2010/05/12(水) 01:08:13
//if Text = cLineCaption then
if IsLine then
でしょ

641 :デフォルトの名無しさん:2010/05/12(水) 10:44:10
フォームのAlphaBlendを使った時に特定のコンポだけは透明化されないようには出来ないでしょうか?

642 :デフォルトの名無しさん:2010/05/12(水) 12:15:46
AlphaBlendなフォームの上に
Transparentなフォームをぴったり重ねればできそうだけど
アホっぽいなw

643 :デフォルトの名無しさん:2010/05/12(水) 13:04:26
バイナリデータを文字変数を使って処理しています
以下のようにすると、バイナリ状態のUTF-16LE文字列をWideString文字列に出来ることが分かりました
var
Bytes: AnsiString;
WStr: WideString;
begin
// BytesにUTF-16LEのバイナリを入れる処理が入る…
// 例:バイナリ 71 67 AC 4E 30 00 33 00

WStr:=WideString(PWideChar(Bytes));
// 結果:WStrに「東京03」が入る

質問:

1. コンパイル時に警告が出るんですが、このやり方で問題ないですか?
[警告] Unit1.pas(174): String から PWideChar への型キャストは間違っている可能性があります

2. この逆(WideString → AnsiStringにバイナリ状態のUTF-16LE)の変換は、1文字ずつループを回せば
出来ましたが、もっと簡単に出来ますか?

よろしくお願いします

644 :デフォルトの名無しさん:2010/05/12(水) 13:11:55
なんでAnsiStringなんかに入れるの・・・
Byte配列でええやん

645 :デフォルトの名無しさん:2010/05/12(水) 13:34:12
警告ごまかしたいなら
w := WideString(PWideChar(Pointer(s)));
w := WideString(PWideChar(@s[1]));
で行けるんじゃね。
Stringをバイナリコンテナとして使う場合
別に文字コードなんて関知しないから問題ないはず。

646 :デフォルトの名無しさん:2010/05/12(水) 18:04:55
>>644
何をどうすれば出来て、何が最善なのか分からないんです
実は当初、Byte型の動的配列で検索とかいろいろやってました
TByteDynArrayとかオープン配列パラメータとか使ってみたり
勉強にはなったんですが、配列要素を切ったりつなげたりのやり方が
よく分からなかったのと、いちいちSetLengthするくらいならStringの方が
簡単かつオールマイティで良いではないかと考えたんです
ちなみに配列版の試作途中ソースは誤って削除してしまいました(アホ)

>>645 ありがとうございます
WStr:=WideString(PWideChar(Pointer(Bytes)))
とすることで警告が出なくなりました
さらに、
WStr:=WideString(Pointer(Bytes)) でもOkでした
ということはと考えて、
Bytes:=AnsiString(Pointer(WStr)) とすると逆変換も出来ました
空文字やヌル付きでもそのまんま、ありのまま相互変換するようなので分かりやすいです

ポインタとかの理解度5%程度なのでよく分かってませんが、このPointer(文字型変数)
というのは単なるポインタじゃなくてポインタ型、文字列の長さ情報をも含んでいるんですね
ヘルプ見ても断片的に「型なしポインタ型」としか書いてないし…

配列でなく、オールマイティな?Stringをバイナリコンテナ(カッコ良い言葉なのでこれも拝借)
として使うのは、方向性として間違ってはいませんよね?
それともやはり配列使うべきでしょうか? 配列の利点があれば教えてください

647 :デフォルトの名無しさん:2010/05/12(水) 19:05:45
>>646
あんたなかなかセンスいいw

648 :デフォルトの名無しさん:2010/05/12(水) 20:50:44
>>642
それやったことあるw
よっぽど重いアプリでも作らない限り無難に理想の動作はしてくれるよ。
リサイズさせない移動させないサブフォームでなら普通に使える。

649 :デフォルトの名無しさん:2010/05/12(水) 21:59:47
Del7を使っています。
WinSight32である特定のウィンドハンドルを見たら、そのウィンドウを隠した(スライドさせる)時に
hidden となるのですが、この hidden になっているかどうかはどうすれば分かるでしょうか?

650 :デフォルトの名無しさん:2010/05/12(水) 22:57:03
IsWindowVisibleとか

651 :デフォルトの名無しさん:2010/05/12(水) 23:58:52
>>646
使ってるDelphiのバージョンが分からないけど、そのバージョンを一生使い続けるならそれも可
でも乗り換えることがあるなら、string型はすでに仕様が2回ほど変わった過去があるので
そのキャストが今後も使えるとは限らないし、配列を使った方が確実にいいと思う
だからそのコードは偶然動いた程度に考えた方がいいかと
あと利点云々は変換した後何するかによるし、もう少し情報出してくれないと・・・

652 :649:2010/05/13(木) 00:17:33
ありがとうございました。
状態の取得が出来ました。

新たな質問なのですが、
他のソフトのテキスト描画色を取得したくて、ググったらGetTextColorというのにたどり着きました。

var
CL: TColor;
begin
CL:=GetTextColor(DC);

と、やってもCLには「0」が入ります。
DCの取得は出来ています。
TColorをTColorRefとしてもダメでした。

どなたかよろしくお願いします。

653 :デフォルトの名無しさん:2010/05/13(木) 01:01:48
0は黒だが

654 :デフォルトの名無しさん:2010/05/13(木) 01:10:32
WStr:=WideString(PWideChar(Pointer(Bytes)))
による PWideChar->WideString の変換は、
#$0000 が出現するまでのデータを (_WStrFromPWChar によって)
WideString データに変換するけど、

WStr:=WideString(Pointer(Bytes))

Bytes:=AnsiString(Pointer(WStr))
は、ポインタ型のつじつま合わせを行った後に代入(_WStrAsg/_LStrAsg)
するので、後々トラブルが発生するかも。
前者は、バージョンによって、危険な場合があり、、
特に後者は、確実に refCnt いじってメモリーリークしているので危険。


655 :デフォルトの名無しさん:2010/05/13(木) 06:47:59
>>653
レスありがとうございます。
その描画色はなん色か時間によって変わっていって黒は使われていないんです。
描画されている文字列を取得すると正しく取得できるし、WinSightで見てもハンドルは
間違ってはいないので、デバイスコンテキストも間違ってはいないと思うのですが。


656 :デフォルトの名無しさん:2010/05/13(木) 07:35:18
>>654
>特に後者は、確実に refCnt いじってメモリーリークしているので危険。

w: WideString;
s: String;

w := '幹事';
s := AnsiString(Pointer(w));

がリークするの?
FastMM4は沈黙してるけど。


657 :654:2010/05/13(木) 12:26:30
Windows では、WideString は、OLE 文字列や BSTR 互換なので、
AnsiSting とは、メモリ管理方法が異なる。
WideString は、SysAllocStringLen などで
領域確保しているので FastMM4 の管理外。

WideString のオフセット -4 には、長さに相当するバイト数が
格納されていて、それ以外はしらん。
しかし、AnsiString を代入するときは参照カウントが格納されている
オフセット -8 の refCnt フィールドを調べたり、いじったりする。


658 :デフォルトの名無しさん:2010/05/13(木) 12:39:38
WideString (BSTR) は参照カウンタ管理されていないので、ストリングのコピーが複製になるため「遅い」
という問題を回避するために導入されたのが参照カウンタ付き UnicodeString なわけなので

WideString 側には refCnt なんてフィールドはありませんよ。
UnicodeString と混ざってしまっているかな?

659 :デフォルトの名無しさん:2010/05/13(木) 13:47:46
なんか疑問だな バイナリを入れるなら byte の配列を用意したほうが自然
Bytes: array of byte; で、WStr := WideString(Pointer(Bytes)); でどうなのか

660 :デフォルトの名無しさん:2010/05/13(木) 14:14:50
WStr := WideString(Pointer(Bytes))
だと、Bytes配列はヌル終端してる必要ある?


661 :デフォルトの名無しさん:2010/05/13(木) 14:22:08
>>659
バイト配列の話なんて誰もしてないから

662 :646:2010/05/13(木) 16:31:53
>>647
どういう点がセンスいいのか言ってもらわないとw 怖いもの知らずっていう意味ですか

>>651 ご意見感謝します
バージョンは6のPersonalです
作成中のアプリのコードを現代のバージョンに持って行くことはまず考えられません
しかし気持ちとしては、現代のバージョンにも転用可能なコードを書きたいと思いますし、
理解できていない・正体のハッキリしないモノ=ポインタ絡みの操作や原理不明のキャスト
も出来れば使用したくない、というのが本音です キャスト成功で手放しで喜んでいるわけではないです
なお、最近のバージョンではTEncodingとかRawByteStringとか、良さそうなものがあるようですね

>乗り換えることがあるなら、string型はすでに仕様が2回ほど変わった過去があるので
すごく承知してます
Stringでなく、AnsiStringと記述してるのは上記のような気持ちからです(あまり意味有りませんが)
自分が調べた限りではこんな感じですが、だいたい合ってますよね
■AnsiStringの系譜  D1:ShortString → D2:AnsiString → D2009:AnsiString(コードページ指定可能)
■Stringのデフォルト D1:ShortString → D2:AnsiString → D2009:UnicodeString
※ UnicodeString=AnsiString(1200)
※ D2:AnsiString、D2009:AnsiString/コードページ指定なし のコードページはシステムのロケールに依存
※ D2009:AnsiString(コードページ指定)では変数ごとに複数のコードページを保持できる
※ RawByteString=AnsiString(65535) コードページの変換をしない

やりたいことは、バイナリファイルを読み込み、特定条件の文字列や数値を検索して抜き出し、
変更を加え再構成して新たなファイルを作成、という操作です ゲーム改造みたいな感じでしょうか
いったんバラバラにしたデータを再構成する、つまり切ったりつなげたりをスマートに行う方法が
分からず、こんなことで悩むなら足し算引き算自由の文字列を使うべきかと結論付けました
配列だと、array[0..n] of Charまたはパック文字列型、StrPCopy、StrPas、Move
このあたりを使用するんでしょうか?

663 :646:2010/05/13(木) 16:34:38
>>654 ありがとうございます
WStr:=WideString(PWideChar(Pointer(Bytes))) ではヌル除去、
WStr:=WideString(Pointer(Bytes)) だとヌル保存を確認しました
少しだけナルホド、です

でも高度に技術的なお話はちょっと分からないです…
確かにSystem.pasにはそういうのがありますね、としか…
procedure _WStrFromPWChar(var Dest: WideString; Source: PWideChar);
procedure _WStrAsg(var Dest: WideString; const Source: WideString);
procedure _LStrAsg(var dest; const source);
procedure _WStrFromLStr(var Dest: WideString; const Source: AnsiString);
procedure _LStrFromWStr(var Dest: AnsiString; const Source: WideString);


みなさんのご意見をまとめると、「これらのキャストはすべて危険、未来も無いからやめとけ」
ってことですね?
しかし、配列優位とも思えませんので、文字列型を使いつつキャストもしない、という方針で
やってみようかと思います


>>659
えーと、私もそう考えて、というかByte型という名前に惹かれて、当初はTByteDynArrayでした
あと、1byte=Byte型配列の要素1個 というのも気持ち良い感じがしたんですが…
やはりバラバラにして再構成というのが配列の用法と合わないと思いました
>>661
いえ、話の発端の私がしておりますので…

664 :654:2010/05/13(木) 16:44:54
>660
PWideChar じゃないから危険だって。

PWideChar -> WideString はヌル終端までを変換するけど、
Pointer -> WideString はただの型キャスト。

PChar/PAnsiChar/PWideChar -> AnsiString/WideString/UnicodeString
=> ヌル終端までを変換

AnsiString/WideString/UnicodeString -> PChar/PAnsiChar/PWideChar
=> ヌル終端を保証

PAnsiChar/PWideChar/AnsiString/WideString -> Pointer
=> 型キャスト

Pointer -> PAnsiChar/PWideChar/AnsiString/WideString
=> 型キャスト


665 :654:2010/05/13(木) 16:52:06
ついで。
Dynamic Array -> Pointer
=> 型キャスト

Pointer -> Dynamic Array
=> 型キャスト


666 :デフォルトの名無しさん:2010/05/13(木) 21:33:15
>「これらのキャストはすべて危険、未来も無いからやめとけ」

んなこたない。
生ポインタをC文字列とみなしてDelphiの文字列に変換する機能は
Win32APIを叩く際の根幹的な機能だからそんな簡単に仕様変更なんてあるわけがない。
いくらなんでも脅かされすぎ。

667 :646:2010/05/14(金) 02:20:53
あれ、今までのレスをよく見直すと、
WStr:=WideString(Pointer(Bytes))
は危険な可能性有りだけど、
WStr:=WideString(PWideChar(Pointer(Bytes)))
は問題無いと言う見解ですかね?

>>666
仕様変更は無いだろうというご意見も覚えておきます
どちらにせよ、もうキャストはしないと決めました
「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、
使うべきではないと思いました

668 :646:2010/05/14(金) 02:23:12
こんな感じの関数で十分でした
これなら不明な点はありませんから問題無いですよね

function BytesToUTF16LE(Bytes: AnsiString):WideString;
var
  I:    Integer;
  WOrd: Integer;
begin
  Result:='';
  for I:=1 to Length(Bytes) div 2 do begin
    WOrd:=(Ord(Bytes[I*2]) shl 8)+Ord(Bytes[I*2-1]);
    if WOrd=0 then break;           // ヌルを含めるならこの行を外す ※ヌルは複数組の可能性もあり
    Result:=Result+WideChar(WOrd);
  end;
end;


function UTF16LEToBytes(WStr: WideString):String;
var
  I: Integer;
begin
  Result:='';
  for I:=1 to Length(WStr) do begin
    Result:=Result+Char(Lo(Ord(WStr[I])))+        // and $00FF
                   Char(Hi(Ord(WStr[I])));        // Shr 8
  end;
end;

キャスト方法のアドバイスをくれた方、ご意見下さった方、ありがとうございました
大変勉強になりました

669 :デフォルトの名無しさん:2010/05/14(金) 03:12:16
>>666
今までに変更があったという事実は無視なの?

670 :デフォルトの名無しさん:2010/05/14(金) 04:43:03
コーディングスタイルは人それぞれだね
1行だけのforならbeginもendも不要なのに

671 :デフォルトの名無しさん:2010/05/14(金) 04:46:14
エンバグの元なのに?

672 :デフォルトの名無しさん:2010/05/14(金) 06:40:31
既に決着済みではあるけど一言だけ。

>>667
>「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、
明らかに間違った使い方は示されたけど
Delphiの仕様の抜け道を使ったような未定義のやり方はないよ。
少なくともそんな指摘はまったく出ていないように思うが。

曖昧論やらべき論は出てきたが。

673 :652:2010/05/14(金) 08:14:15
GetTextColorについて質問をしたものです。
あれから色々試していたのですが、例えば赤で描かれたテキストがあって、
その色を取得しようと、GetDCPenColor、GetDCBrushColor、GetBKColorとか
やってみたのですが、赤の値が取れませんでした。
何か他にやり方ってあるのでしょうか。
それとも、アキラメロンなのでしょうか。


674 :デフォルトの名無しさん:2010/05/14(金) 10:29:38
>>673
座標を取ってGetPixelしてみるとかはどう?

675 :デフォルトの名無しさん:2010/05/14(金) 21:57:57
描かれてしまったものは単なる絵だから。
描いたときのペンやブラシやテキストカラーの設定が現在も残ってると期待するのは無理

676 :652:2010/05/14(金) 23:43:02
>>674
ありがとうございました。
GetPixelで何とか出来ました。

>>675
そういうことなんですね。
納得しました。
ありがとうございました。

677 :デフォルトの名無しさん:2010/05/15(土) 00:08:51
Form1の他にForm2を作ってメニューからForm2の表示、非表示させてるんだけど、
Form2を表示中にメインのForm1を最小化させると一緒に画面から消えちゃうの何とかならん?

678 :デフォルトの名無しさん:2010/05/15(土) 15:35:35
今デルヒで一番安く手に入る環境(違法じゃないの、新品の)でお願いします?

679 :デフォルトの名無しさん:2010/05/15(土) 16:10:05
>>678
http://kaidoku.ocn.ne.jp/shopping/nv/member/item/detail/_/item_id/1090901509/

コンポーネントを一緒に買う気があるなら
http://www.componentsource.co.jp/products/delphi-2010-j/prices.html

680 :デフォルトの名無しさん:2010/05/15(土) 16:13:24
あ、直販の方が安いのか
http://www.embarcadero.com/jp/radoffer

681 :デフォルトの名無しさん:2010/05/15(土) 22:29:59
頼む 日本語で

682 :デフォルトの名無しさん:2010/05/18(火) 11:26:08
Delphi7ですけどIDE終了時AVなるのでコード変更してみました
これでいいでしょうか
_LStrClr関連で調べていたら_LStrFromPWCharLenのBuffersが悪さしてるみたいので
procedure _LStrFromPWCharLen(var Dest: AnsiString; Source: PWideChar; Length: Integer);
var
  DestLen: Integer;
begin
  if Length <= 0 then
  begin
    _LStrClr(Dest);
    Exit;
  end;
  DestLen := CharFromWChar(nil, 0, Source, Length);
  SetLength(Dest, DestLen);
  if DestLen > 0 then
  begin
    CharFromWChar(Pointer(Dest), DestLen, Source, Length);
  end
  else
    _LStrClr(Dest);
end;


683 :デフォルトの名無しさん:2010/05/18(火) 12:02:46
こっちも変えてみました
procedure _WStrFromPCharLen(var Dest: WideString; Source: PAnsiChar; Length: Integer);
var
  DestLen: Integer;
begin
  if Length <= 0 then
  begin
    _WStrClr(Dest);
    Exit;
  end;
  DestLen := WCharFromChar(nil, 0, Source, Length);
  SetLength(Dest, DestLen);
  if DestLen > 0 then
  begin
    WCharFromChar(Pointer(Dest), DestLen, Source, Length);
  end
  else
    _WStrClr(Dest);
end;


684 :デフォルトの名無しさん:2010/05/18(火) 22:30:32
カード占いをするソフトを作りたいと思っています。

(1)カードの使用枚数と配置を決める
(2)カードを配置して裏返し、表示させる。

(1)でカードの位置を、マウスでクリックした位置に決めて
カードの裏向きの画像ファイルを表示させたい
のですが、どうすればいいでしょうか。




685 :デフォルトの名無しさん:2010/05/18(火) 23:04:57
ActiveXのWindowsMediaPlayerコンポーネントで、
動画再生時にビデオの明るさを変更する方法はありますか?

WindowsMediaPlayerの「拡張設定」の「ビデオ設定」にある「明るさ」を変更できる方法があればいいのですが。

686 :デフォルトの名無しさん:2010/05/19(水) 00:51:54
>>684
その通りにやればいいだけじゃ?
どこで詰まったのかもっと具体的に言わないと答えようがないだろ
一から手取り足取り教えてもらいたいなら金払ってサポートしてもらえ

687 :デフォルトの名無しさん:2010/05/19(水) 03:56:58
>もしくは質問者自身何が何だか分からない質問を
>勇気を持って書き込むスレッドです。
>Delphi使いが優しくコメントを返しますが

トランプの裏向きの画像は手に入れているとして。

フォームに CardImage という名前の TImage を作成。
Picture プロパティに画像を設定。
Visible プロパティを False に。

*クリックしたら
From の OnMouseDown イベントメソッドを作成

*位置を決めて
引数の X と Y を使う。

* 画像ファイルを表示
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
I : TImage;
begin
I := TImage.Create(self);
I.Parent := self;
I.Picture.Assign(Image1.Picture);
I.Width := Image1.Width;
I.Height:= Image1.Height;
I.Left := X;
I.Top := Y;
end;


688 :デフォルトの名無しさん:2010/05/19(水) 12:06:14
マルチスレッドのデバッグってどうすればいいでしょうか?
1つのスレッドを動的に複数Createして同時に実行した時に、ブレークポイントで止めていると
Delphiが固まってしまいます。
Del7です。
よろしくお願いします。

689 :デフォルトの名無しさん:2010/05/19(水) 15:55:47
>ブレークポイントで止めていると Delphiが固まってしまいます。
D7 が現役の頃にはそんな経験無いですけどね。

>Del7です
OS は? CPU は?

Vista/Win7 だとあきらめるしかないかも。

690 :デフォルトの名無しさん:2010/05/19(水) 16:35:03
起動中のアプリケーションでコマンドラインを受け取るにはどうすればいいのでしょうか?

a.exe -hoge -piyo
が何度か呼び出される感じ(引数は変わる)なのですが・・・
多重起動は禁止にしてます。

691 :デフォルトの名無しさん:2010/05/19(水) 16:55:10
すでに起動中のアプリケーションに、後から起動された(同一)アプリケーションのコマンドラインオプションを
渡すのかな?

Windows はマルチタスク/マルチインスタンスサポートの OS なので、別々に起動されたアプリケーションは
別々のインスタンスとして管理されます。何らかのアプリケーション間通信をおこなう必要があります。

擬似コードとしては

program A;

begin
if 俺は起動中かな then
begin
  起動中のインスタンスにコマンドラインを渡す( paramstr(1), paramstr(2)...)
end
else
通常実行開始
end;

後から起動されたアプリケーション A2 から、すでに起動しているアプリケーション A1 にデータを送るには、
sendmessage がつかえますが、メッセージを受信するためのウィンドウが必要(非表示でよし)なので
純粋なコマンドラインツールだと余計な手間がかかるでしょう。

692 :688:2010/05/19(水) 17:05:30
>>689
レスありがとうございます。
説明不足でした。
ブレークポイントで止まってるだけなら何ともないのですが、ステップ実行を何行かすると
フリーズしてPCのリセットボタンを押さないといけなくなります。
マルチスレッドが1つだけの時は、正常です。
ヘルプを見るとマルチスレッドのデバッグの項目はあるのですが、イマイチよく分からないです。


693 :デフォルトの名無しさん:2010/05/19(水) 17:14:22
>>292
XP+Turbo(2005)のわたしも同じ状況に見舞われてます。
以前わたしも、ここか雑談スレで相談しましたが、解決方法はわかりませんでした。

一応、めちゃくちゃ反応は鈍いですが、操作は可能です(時間的には、リセットで再起動の方が早いと思いますが)。
こちらでは、頻度は低いですが、マルチスレッドというか、シングルスレッドでも起こりますので、
スレッドをデバッグした時になるのだと思います(といっても、メインスレッドは別だから、結局はマルチスレッドなのだろうけど)。

おそらくデバッガーの問題かと。こちらでは、なるべくブレークポイントは使用しないという消極的な回避策で対処してます。

694 :デフォルトの名無しさん:2010/05/19(水) 17:28:09
>>691
ですです。
だいたいおんなじことを考えていたのですが、
>  起動中のインスタンスにコマンドラインを渡す( paramstr(1), paramstr(2)...)
ここがわかりませんでした。
後出しですみません。

作ってるアプリはGUIアプリです。

695 :デフォルトの名無しさん:2010/05/19(水) 17:32:15
>>694
あと、コマンドラインを渡したあと、どうやって受け取るのかもわからなかったです。。。

696 :デフォルトの名無しさん:2010/05/19(水) 18:54:34
>>687
やっぱりああやって書くとレス付きやすいですねw
あざーすww

697 :デフォルトの名無しさん:2010/05/19(水) 18:57:28
>>694
SendMessageが使えるって書いてあるじゃん
よく読めよ

698 :684:2010/05/19(水) 21:08:27
>>686,687
ありがとうございます。
やってみます。


699 :デフォルトの名無しさん:2010/05/19(水) 22:25:41
>>696はいかにもゆとり

700 :デフォルトの名無しさん:2010/05/20(木) 00:51:52
マルチスレッドのデバッグっていくつか前に書いてなかったか。
俺も参考にさせてもらった。
今は忘れた。w

701 :これかな?:2010/05/20(木) 01:10:29
178 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/12(水) 10:30:13
OutputDebugString使いまくる

179 名前:デフォルトの名無しさん[sage] 投稿日:2009/08/12(水) 10:38:37
>>175
現状では各スレッドに固有の番号を持たせて(多少面倒だがThreadId等でもいい)、
条件付きブレークでその番号をセットすれば任意のスレッドだけブレークさせることが可能

180 名前:175[sage] 投稿日:2009/08/12(水) 13:48:14
>>178-179、レスありがとうございました。
Delphiがフリーズせずにデバッグできるようになりました。
勉強になりました。

702 :デフォルトの名無しさん:2010/05/20(木) 05:00:38
>あと、コマンドラインを渡したあと、どうやって受け取るのかもわからなかったです。。。

Google で以下のキーワードで検索。
sendmessage プロセス間通信 Delphi

Delphi では無いが http://yokohama.cool.ne.jp/chokuto/advanced/copydata.html はよくまとまっていてよろしい。

それと、目的は複数のプロセスが同じデータを参照すること。と見なせば、
共通のファイルやレジストリにコマンドラインを記録し、
通常起動しているプロセス側がポーリング(定期的に見に行く)する。
という手法も使えます。


703 :デフォルトの名無しさん:2010/05/20(木) 05:11:24
XP の頃、 MS-IME とデバッガの相性の問題があったはず。

ttp://www2.atwiki.jp/lunatips/pages/10.html

ttp://d.hatena.ne.jp/rabbithutch/20050211

試してみてくださいな

704 :デフォルトの名無しさん:2010/05/20(木) 10:38:55
if文の書き方で

if A=B then・・・・・・・・@
if C=D then・・・・・・・・・T
E:=F;
else if A<B then・・・・A
E:=G
else A>B then・・・・・・B
E:=H;

@ABを条件分岐のグループで@の時だけ、入れ子のifを実行するつもりなんですが、
どうも、DelphiはTとABをグループと見るみたいで 「E:=F;」 の「;」がだめってコンパイルエラーが
出ます。
begin〜endで囲んでいけば欲しい動きにはなるのですが、単純な構文なので無意味に行数を増やしたくないのですが、
ifの中にifを入れる時はbegin〜endで囲むのがルールなんでしょうか?

705 :デフォルトの名無しさん:2010/05/20(木) 10:40:13
インデントしたつもりがされなかったです。
これでどうだ

   if regCurrent=Current then
    if lblCurrent.Font.Color=clWhite then
     lblCurrent.Font.Color:=clYellow;
   else if regCurrent<Current then
    lblCurrent.Font.Color:=clRed
   else if regCurrent>Current then
    lblCurrent.Font.Color:=clLime;


706 :デフォルトの名無しさん:2010/05/20(木) 11:03:39
素直に begin end でくくれ。


707 :デフォルトの名無しさん:2010/05/20(木) 11:11:39
>>705
余計な話ですが、最後のelse、意味通りのインデントになってる?

708 :デフォルトの名無しさん:2010/05/20(木) 11:16:11
; が文の終わりを表す C 系の規則と
; が文の区切りを表す Algol/Pascal の規則の差なのですが、
そういう物だと納得して先に進む方が賢いです。

それとネストした if/else 構造は、どの言語でも分かりにくい表記をすることができる物で、
C 言語でも

if (A)
 if (B)
  process1();
else
 process2(); // A に対する else ? B に対する else ?

さらに変なインデントがついていたりすると、予想外のミスを呼び込むかもしれません。

20年くらい前の構造化言語の導入時には、else がどの if に対応するべきかが議論対象になり、
else にオプションをつけて対応する if を(必要な時は)明示指定したらどうか?という試験的な言語も存在しました。
現在は、単純に直近の if を対象にする。という規則が一般的です。
数行を惜しんで分かりづらくするよりは、begin - end を明示的に入れてあげた方がコードの保守性という見地からも
得策でしょう。
なお、「else は直近の if に対応する」というルールを使って空の else 節を挿入する。というトリックもあり得ます。

 if A=B then
  if C=D then
   E:=F
  else
 else if A<B then
  E:=G
 else if A>B then
  E:=H;

これが「美しい」「わかりやすい」かどうかは、また別の話ですね。

709 :デフォルトの名無しさん:2010/05/20(木) 11:27:41
皆さん、ありがとうございます。
基本的には begin〜end は保守性の面から入れるのですが
今回の質問のような単純で短い構文で、狙った動きにならないので
びっくりしたのと納得できなかったので質問しました。

>直近のifに対応する
こんな規則で動いていたんですね。
納得しました。

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

710 :デフォルトの名無しさん:2010/05/20(木) 11:47:07
綺麗さ、かつ Pascal の特性を活用するなら、入れ子関数を作って、
関数名をコメントがいらないくらい分かりやすいものにしてしまう。
というのも実用性の高い手法です。

新しめの処理系なら、日本語関数名も使えますしね。

  procedure SetFontColor(originalColor, modifiedColor: TColor)
  begin
   if lblCurrent.Font.Color = originalColor then
   lblCurrent.Font.Color:=modifiedColor;
  end;

 if regCurrent=Current then
  SetFontColor(clWhite, clYellow)
 else if regCurrent<Current then
  lblCurrent.Font.Color:=clRed
 else if regCurrent>Current then
  lblCurrent.Font.Color:=clLime;



711 :デフォルトの名無しさん:2010/05/20(木) 12:29:21
なるほど。
ちょっとの手間でスマートですね。
まだ、この辺の手間をかけた方が後々いいのか、どうかの判断が
出来ないレベルなので参考にさせてもらいます。

712 :デフォルトの名無しさん:2010/05/20(木) 17:43:30
>>697,702
ありがとうございます。
ググりつつコピペしつつ改変しながら
http://eggrice.no.land.to/up/src/tohoh0403.txt
と言うふうに書いてみたんですが、
二度目に起動したときに前のウィンドウがアクティブになるだけで
メッセージの処理は行われませんでした。

winexpでメッセージ監視してみたら
TMainFormじゃなくてTApplicationにメッセージが飛んでいたので
これが問題かな?と思ってFindWindowでハンドル取得してみてもうまくいきませんでした。

どこか間違えているでしょうか?

713 :デフォルトの名無しさん:2010/05/21(金) 12:56:44
>>704 これあきらかにおかしいじゃん

if A=B then if C=D then E:=F; ここまで1行とコンパイラは理解するから次の else if が文法上間違い

714 :デフォルトの名無しさん:2010/05/21(金) 14:33:18
質問が紛らわしくてすんません。
@ABの条件分岐のつもりで、@の時にTを実行する意図なのですが
「F;」の「;」を取ると
TABがグループと認識して@の入れ子と処理されてしまいます。
Tは単独のif文にする意図で「;」を付けるとコンパイルエラーになるので
「何で?」と言う意味でした。

715 :デフォルトの名無しさん:2010/05/21(金) 15:00:07
だいじょうぶ。意図を理解している人もいるよ。


716 :デフォルトの名無しさん:2010/05/21(金) 17:01:10
自作アプリをプログラムから最小化してタスクバーに入れるにはどうすればいいですか。
WindwStataだとタスクバーの上に表示されてしまいます。

717 :716:2010/05/21(金) 17:07:39
出来ました。

718 :デフォルトの名無しさん:2010/05/24(月) 07:52:47
Continueってバグを起こしますか?
for i:=0 to max do
begin
if hoge then
begin
continue;
end;
end;

デバッグしているとi = maxの時にcontinueが実行されるとループが進んでしまうのですが・・・

719 :デフォルトの名無しさん:2010/05/24(月) 12:26:05
あなたの頭がバグを起こしているだけです

720 :デフォルトの名無しさん:2010/05/24(月) 12:32:28
デバッグしろ

721 :デフォルトの名無しさん:2010/05/24(月) 14:16:18
max-1が正しかったという罠

722 :デフォルトの名無しさん:2010/05/24(月) 18:43:28
マルチスレッドが存在するかしていないかって、分かる関数とかってあります?
Createした時に覚えておいて、解放する時はメインの方から明示的にFreeするしかないんでしょうか?

723 :デフォルトの名無しさん:2010/05/24(月) 19:01:08
>718
ブロック内で、変数Iを使っていないので、最適化されて減少カウンタとして利用されている予感。

724 :デフォルトの名無しさん:2010/05/24(月) 19:57:31
>722
スレッド終了時に自分で自分を解放

>718
>723のいうとおりだと思う。コンパイルオプションで最適化を外すとデバッグしやすくなる。

725 :デフォルトの名無しさん:2010/05/25(火) 12:47:56
最後に判定しに行くだけだろ?
Cで書けばfor(i=0;i<=max;i++)なんだからmaxの次に判定があるのは当たり前
アホか

726 :デフォルトの名無しさん:2010/05/25(火) 17:11:33
>>722
一応IsMultiThreadってグローバル変数が存在してるけど。ソースみりゃわかるけど、
直接Win32のCreateThreadとか呼んだら駄目ぽだけど。BeginThreadかTThreadクラスだけを
使ってる場合だけオk。

727 :デフォルトの名無しさん:2010/05/25(火) 17:14:10
ああでも、ダメポそうだな。ごめん。

728 :デフォルトの名無しさん:2010/05/26(水) 00:04:05
>>722
WaitForと言うのがあるらしい。
使い方は分からない。

お知恵をお借りしたいのですが。
今、複数起動が前提のアプリを作っているのですが、
一斉に最小化や復元をしたいと思って共有メモリを
使うところまでは出来たのですが、例えば一斉に最小化の場合は
メニューをクリックされたソフトで共有メモリに「1」を入れる。

他のソフトはその「1」がたったかどうかで最小化すればいいのですが、
お知恵を借りたいのは「1」をどのタイミングで「0」にすればいいかです。
全部が最小化されたかどうかを知るにはどうすればいいかって事です。

考えたのは複数起動した数を共有メモリに記録しておいて、メニューをクリック
されたら「1」ではなく、起動数を入れて(例えば「10」)で最小化したら 
-1 していくと言うやり方です。

他にもっとスマートなやり方があれば教えて下さい。 


729 :デフォルトの名無しさん:2010/05/26(水) 00:46:32
HWND_BROADCAST

730 :デフォルトの名無しさん:2010/05/26(水) 13:33:42
e?

731 :728:2010/05/26(水) 14:07:31
レス、ありがとうございます。

>HWND_BROADCAST
ググってみます

732 :728:2010/05/26(水) 18:53:43
ググったけど、よう分からんかったです。
SendMessageやPostMessageでHWND_BROADCASTを送ると
関係ないアプリまで最小化や終了をさせてしまうことになりませんか?


733 :デフォルトの名無しさん:2010/05/26(水) 19:28:16
RegisterWindowMessageって知ってるか?

734 :デフォルトの名無しさん:2010/05/26(水) 21:25:07
>>733
> RegisterWindowMessageって知ってるか?
おぉ、ありがとうございます。
ググって来ました。
確認させて下さい。

例えば、WM_APP+100は一斉に最小化、WM_APP+101は一斉に終了みたいに決めておいて
アプリ起動時に
RegisterWindowMessage(WM_APP+100);
とかやって登録して
一斉に最小化させたい時は SendMessage(HWND_BROADCAST , WM_APP+100 , 0 , 0);
とやればいいって事ですか?

受け取りは WndProc(ググった先で出てきたので、よく分かってないです。)を使って送られて来た
メッセージによって処理する

こんな感じで良いでしょうか?

735 :デフォルトの名無しさん:2010/05/26(水) 21:42:18
RegisterWindowMessageの引数は文字列

RegisterWindowMessage(自分だけの文字列)

SendMessage(HWND_BROADCAST, RegisterWindowMessageの戻り値, ここ, とここは自分で決めて振り分ける);

736 :728:2010/05/27(木) 00:41:49
>>735
思い通りの動きが出来ました。(;゚∀゚)=3
ありがとうございました。

737 :デフォルトの名無しさん:2010/05/28(金) 23:12:46
var
Form1: TForm1;
days:double;
procedure TForm1.Button1Click(Sender: TObject);
begin
days :=VarToDateTime('28/5/2010') - VarToDateTime('27/4/2010');
showmessage(FloatTostr(days));
end;

これは2010年4月27日と2010年5月28日の日数の差として「31」が表示されます
こんな感じで2010年4月27日から31日経つと「2010年5月28日」のような処理をしたいのですが、どうすればよいのでしょうか?

要はTDateTime 型から日付を求めたいのです


738 :737:2010/05/29(土) 00:01:44
ごめんなさい自己解決しました

739 :デフォルトの名無しさん:2010/05/29(土) 20:46:03
>>712ですが、
結局TMainFormというインスタンス名が他のアプリケーションで使われていたようでうまくいかなかったので
メッセージ受信専用ウィンドウを利用する方法を使いました。

メッセージ用ウィンドウプロシージャは
特定のメッセージがきたときだけMainFormにDispatchするようにして
あとはDefWindowProcに渡すようにしたのですが、
処理としてはあっているのでしょうか?
初めはディスパッチのみでDefWindowsProcを呼び出さずにしていたら
終了時にエラーがでました。

740 :デフォルトの名無しさん:2010/05/29(土) 22:19:45
名前変えればいいだけじゃ・・・

741 :デフォルトの名無しさん:2010/06/06(日) 20:53:51
下のソースをJavaに移植したいのですが、内容が理解できなくて困っています。
下から7行ほど前からが理解できないので・・・、別言語に書き換えて教えて頂けないでしょうか?
java, c, perl , php, vb, javascript 辺りの書き方であれば理解できます。

function EncodeB32(s: String): String;
const
B32Char: array[0..31] of Char =
('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',
'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V');
var
i: Integer;
len: Integer;
begin
if s = '' then begin
Result :='';
Exit;
end;
len := (Length(s) * 8 - 1) div 5 + 1;
s := s + StringOfChar(#0, (len * 5 - 1) div 8 + 1 - length(s));
SetLength(Result, len);
for i:=0 to len - 1 do
Result[i + 1] := B32Char[(MakeWord(Byte(s[(i * 5) div 8 + 1]), Byte(s[(i * 5) div 8 + 2]))
shr ((i * 5) mod 8)) and 31];
end;

742 :E- ?:2010/06/06(日) 21:31:21
BASE32 だから、検索すれば仕様書があるはず。仕様書から作ったほうが早いよ。私はCで作った。
function EncodeB32(s: String): String;
const
    B32Char: array[0..31] of Char =
        ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',
        'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V');
var
    i: Integer;
    len: Integer;
begin
    if s = '' then begin
        Result :='';
        Exit;
    end;
    len := (Length(s) * 8 - 1) div 5 + 1;
    s := s + StringOfChar(#0, (len * 5 - 1) div 8 + 1 - length(s));
    SetLength(Result, len);
    for i:=0 to len - 1 do
        Result[i + 1] := B32Char[(MakeWord(Byte(s[(i * 5) div 8 + 1]),
                                   Byte(s[(i * 5) div 8 + 2])
                                  ) shr  ((i * 5) mod 8)
                                 ) and 31];
end;

743 :デフォルトの名無しさん:2010/06/06(日) 21:38:01
Javaならライブラリあるだろうに。

744 :デフォルトの名無しさん:2010/06/06(日) 21:39:03
これで事足りないというなら出直して来るんだ
つttp://www.google.co.jp/codesearch?hl=ja&q=base32+lang:java


745 :デフォルトの名無しさん:2010/06/06(日) 23:49:13
あれ、関数名はBase32だったので、そう思って組んでみたんですが、結果が違ったので・・・

1. そのソースコードが使われいるexe
$ exec "1c68ee574965514ec9c27a57972719ea"
4NDXFOSLFKFHMTQT2K6LSOGPK

2. Base32エンコード
$ echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode
S0QSUB595BKSK4B0QRLEPJ43A7

>>742
整形ありがとうございます。
やってることは似てそうなんですが、定数が違ってそうなのでもう少し弄ってみます。

746 :デフォルトの名無しさん:2010/06/07(月) 03:58:40
4NDX と、X が出てくる理由が不明だ。
B595 と、9 が出てくる理由が不明だ。
こうなるはず、
8bit区切り
1c 68 ee 57 49 65 51 4e c9 c2 7a 57 97 27 19 ea
5bit区切り
3 11 14 E 1C 15 1A 9 C 15 8 14 1D 12 E 2 F 9 B 19 E 9 18 19 1D 8

747 :デフォルトの名無しさん:2010/06/07(月) 09:04:15
Base32(WXYZが使われてる)と、Base32hex(0189が使われてる)があるそうですね。
面白そうなので作ってみたら >>746と同じ結果に。
Base32: DRUO4V2JMVIU5SOCPJLZOJYZ5I======
Base32hex: 3HKESLQ9CL8KTIE2F9BPE9OPT8======
>>745と全然違うなあ。
しかしBase32って超マイナーですね。

748 :748:2010/06/07(月) 20:34:22
> 1. そのソースコードが使われいるexe
> $ exec "1c68ee574965514ec9c27a57972719ea"
> 4NDXFOSLFKFHMTQT2K6LSOGPK
>
アナタの自作プログラム↑ソース↓
http://pc12.2ch.net/test/read.cgi/tech/1274617383/328
>
> 2. Base32エンコード
> $ echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode
> S0QSUB595BKSK4B0QRLEPJ43A7
こっちのソース、またはソースのURLくれ。

749 :748:2010/06/07(月) 22:36:19
shr ((i * 5) mod 8)) and 31];
 ↓に変更(再コンパイル可能なら、だけど)
shr (11 - ((i * 5) mod 8))) and 31];


750 :デフォルトの名無しさん:2010/06/08(火) 01:00:38
>>748
今確認したら結果が逆でした・・・汗

1. 移植したいプログラム ( Delphi )
ttp://jane.s89.xrea.com/test/read.cgi/kakolog/1090658524/583-585
> nghash.exe "1c68ee574965514ec9c27a57972719ea"
S0QSUB595BKSK4BOQRLEPJ43A7

2. 自作したプログラム ( Java )
ttp://pc12.2ch.net/test/read.cgi/tech/1274617383/328
% echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode
4NDXFOSLFKFHMTQT2K6LSOGPK

Jane2chのNSFiles.txtで使われる、MD5をエンコードした無視画像リストを、
システムに組み込みたくて、移植してる次第です。・・・なんですが、力不足で全く移植できず

751 :デフォルトの名無しさん:2010/06/08(火) 09:57:52
S0Q..L..はナンチャラは何なの?という疑問 0とL が混じってる。
1.Base32HEX エンコードだけをしてもこの値にはならないので、
  その部分だけのDelphiでは足りない。ソースは受け取ったが、
  ソース全部読む必要があるので、時間と人手がいる。
> nghash.exe "1c68ee574965514ec9c27a57972719ea"
S0QSUB595BKSK4BOQRLEPJ43A7

2.Base32HEX エンコードだけのソースなら、ネット検索すればあるはず。
  1.に関連して、>>749 はバグだと思ったけど、そのソースを生かすなら
  Base32HEXではない。逆にその部分だけを修正すればBase32HEX のソース
  を直せばいい。
また、>>749 shr の使い方を誰かDelphiで合ってるか確認してほしい。

752 :747:2010/06/08(火) 10:53:30
>>750
やっぱり。どうも変だなと思ってた。あと、ソースの頭にしっかり
//5bitエンコーディング関数 Base32ではない。
って書いてあるじゃない。最初は見落としてたの?

>>751
>>741の function EncodeB32 だけでちゃんと
S0QSUB595BKSK4BOQRLEPJ43A7
になるのを確認したので、これはBase32でもBase32hexでもないと思います。

>また、>>749 shr の使い方を誰かDelphiで合ってるか確認してほしい。
どう確認すればいいのか分かりませんが、そこだけ差し替えたら
D0N6FIA5A575IGMQATBLF69A03
になりましたよ。

Delphi始めて数ヶ月の初心者が頭突っ込んでスマソでした

753 :デフォルトの名無しさん:2010/06/08(火) 16:32:22
いやいや、可能性が無いなら参考になった。>>752
以下の修正で目的の文字列になった。
参考になるURLがどこかに有ると思うが省略させてもらう。

MakeWord(byte1,byte2) の定義は byte1 | byte2 << 8
それと、shr ((i * 5) div 8)

BASE32の場合は
MakeWord(byte1,byte2) の定義を以下にする byte1 << 8 | byte2
それと、shr (11 - ((i * 5) div 8))

754 : ◆/91kCCQXBo :2010/06/08(火) 17:41:05
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
char*EncodeB32(char*s){const char B32Char[32]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'
,'L','M','N','O','P','Q','R','S','T','U','V'};int i,len;char*sa,*Result;if(s==NULL||*s==(char)NULL){return NULL;}len=(strlen(s)*8-
1)/5+1;sa=s;Result=calloc(len+1,1);for(i=0;i<=len-1;i++){Result[i]=B32Char[(((sa[(i*5)/8+0]&0xFF)|(sa[(i*5)/8+1]&0xFF)<<8)>>(((i*5
)%8)))&31];}return Result;}
int main(void){char*ans;ans=EncodeB32("\x1c\x68\xee\x57\x49\x65\x51\x4e\xc9\xc2\x7a\x57\x97\x27\x19\xea");if(ans)puts(ans);free(ans);}

755 :747:2010/06/08(火) 23:02:43
私も勉強がてらJavascriptに翻訳してみました。
出来る限り元ソースに忠実にしました。
http://ideone.com/bNeGf
DelphiもJavascriptもよく分かっていない初心者が書いてるので、激しいツッコミはご容赦下さい。

一応、ブックマークレット版。もちろん、末尾改行は全部除去して使ってね。
Javascript:function EncodeB32(s){function StringOfChar(C,N){var I,Z='';for(I=1;I<=N;++I)
{Z+=C;}return Z;}function MakeWord(H,L){return H|L<<8;}var i,len,B32Char=['0','1','2','3',
'4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V'],
Result=[];if(s==''){return '';}len=(s.length*8-1)/5+1;s+=StringOfChar('\x00',(len*5-1)/8+1-s.length);
for(i=0;i<=len-1;++i){Result[i+1-1]=B32Char[(MakeWord(s.charCodeAt((i*5)/8+1-1),
s.charCodeAt((i*5)/8+2-1))>>>((i*5)%8))&31];}return Result.join('');}
function HexToStr(H){var I,Result='';for(I=0;I<=H.length/2-1;++I)
{Result+=String.fromCharCode(parseInt(H.substr(I*2,2),16));}return Result;}
alert(EncodeB32(HexToStr('1c68ee574965514ec9c27a57972719ea')));

普段はごく簡単なブックマークレットしか作らないので、functionすら滅多に使いません。。。

756 :747:2010/06/09(水) 07:20:10
DelphiスレなのにJavaやらCやらJavascriptもなんなので、
ideone.comのPascal(FPC:Free Pascal)でDelphiできるか?試してみました。
http://ideone.com/5Q6ky
結果:プログラム本体の書き換えは一切せずに動作しました。
追加したこと
 1. コンパイラモードをDelphi互換に指定 → {$MODE DELPHI}
 2. Uses節を追加、StrToIntのためにsysutilsを指定
 3. function MakeWordをWindows.pasからパクってきた

以上、初心者の研究コーナーでした
スレ汚しまくってスマソ

757 :デフォルトの名無しさん:2010/06/09(水) 09:40:11
>>756 君は毎回誤るんかい。
>>745
S0QSUB595BKSK4B0QRLEPJ43A7 誤り
S0QSUB595BKSK4BOQRLEPJ43A7 正しい
だね?

右から左への場合は入力を5の倍数ワード、出力を8の倍数にしなければならないが、
Base32HEX (WXYZを使わない) でエンコードする場合。

Base32を使って、左から右に5ビットで区切ってエンコード
1 c 6 8 e e 5 7 4 9 6 5 5 1 4 e c 9 c 2 7 a 5 7 9 7 2 7 1 9 e a 0 0 0 0 0 0 0 0
3 11 14 E 1C 15 1A 9 C 15 8 14 1D 12 E 2 F 9 B 19 E 9 18 19 1D 8 0 0 0 0 0 0
3HKESLQ9CL8KTIE2F9BPE9OPT8

Encode32を使って、左から右に5ビットで区切ってエンコード
1 c 6 8 e e 5 7 4 9 6 5 5 1 4 e c 9 c 2 7 a 5 7 9 7 2 7 1 9 e a 0 0 0 0 0 0 0 0
1C 0 1A 1C 1E B 5 9 5 B 14 1C 14 4 B 18 1A 1B 15 E 19 13 4 3 A 7 0 0 0 0 0 0
S0QSUB595BKSK4BOQRLEPJ43A7

Base32を使って、右から左に5ビットで区切ってエンコード
0 0 0 0 0 0 0 0 e a 1 9 2 7 9 7 5 7 7 a c 2 c 9 4 e 5 1 6 5 4 9 5 7 e e 6 8 1 c
0 0 0 0 0 0 7 A 3 4 13 19 E 15 1B 1A 18 B 4 14 1C 14 B 5 9 5 B 1E 1C 1A 0 1C
0000007A34JPELRQOB4KSKB595BUSQ0S

Encode32を使って、右から左に5ビットで区切ってエンコード
0 0 0 0 0 0 0 0 e a 1 9 2 7 9 7 5 7 7 a c 2 c 9 4 e 5 1 6 5 4 9 5 7 e e 6 8 1 c
0000008TPO9EPB9F2EITK8LC9QLSEKH3
0 0 0 0 0 0 8 1D 19 18 9 E 19 B 9 F 2 E 12 1D 14 8 15 C 9 1A 15 1C E 14 11 3

758 :こまった??:2010/06/09(水) 11:40:16
Delphi5 から Delphi2010 に一気に移行したものですが、
たとえば、 TMemo などの既存コンポーネントを継承して、
新しいコンポーネントを作成したとき、
TEST用プロジェクトで動作確認はできるのですが、
いざ、コンポーネントタブ(たとえばsample)に登録しようとしたとき
Delphi5にはあった「コンポーネント」=>「コンポーネントのインストール」
メニューがDelphi2010メニューにありません。
どうやってインストールするのでしょうか?
それとも、プロフェッショナル版ではできない?


759 :デフォルトの名無しさん:2010/06/09(水) 13:55:35
>>758
http://mrxray.on.coocan.jp/Delphi/CompoInstall/index.htm

760 :デフォルトの名無しさん:2010/06/09(水) 22:19:20
TOpenDialogとかにボタンを追加したいときはどうするべきなのでしょうか。

761 :デフォルトの名無しさん:2010/06/09(水) 23:49:42
TOpenPictureDialogのコードが参考になると思う。

762 :デフォルトの名無しさん:2010/06/10(木) 12:59:36
Synchronizeで実行するプロシージャーで引数が使いたい時って皆さんはどうしていますか?

763 :デフォルトの名無しさん:2010/06/10(木) 15:02:32
匿名メソッドでいいじゃん

764 :デフォルトの名無しさん:2010/06/10(木) 16:35:12
>>762
そのためにわざわざフィールド変数を用意して、それ経由してる。


765 :デフォルトの名無しさん:2010/06/10(木) 17:16:57
mixiにログインして情報をとってくるようなアプリケーションを作りたいと思っています。
そこで、TIdHTTPコンポーネントを使用してログイン部分をいま作成中なのですが、Cookieが無効
になっているため、ログインできませんと言われてしまいます。
(http://mixi.jp/check.pl?n=%2Fhome.plが返ってくる)

TIdHTTPコンポーネントのCookieManagerには該当のTIdCookieManagerを指定し、
AllowCookiesはtrueの状態にしています。

IdHTTP1.Postの第一引数は以下の通りです。
'http://mixi.jp/login.pl'

IdHTTP1.Postの第二引数にはstringlistで以下のようなデータを渡しています。
'next_url=/home.pl'
'email=メールアドレス'
'password=パスワード'

TIdHTTPコンポーネントを使用して、mixiへのログインに成功した方、どのようにされたかアドバ
イスいただけないですか?

766 :デフォルトの名無しさん:2010/06/10(木) 21:38:02
オミトロンとかLiveHTTPHeaderなんかで
ブラウザでログインしたときの状況を確認したほうが早いと思ふ

767 :デフォルトの名無しさん:2010/06/11(金) 11:13:50
>>764
無名メソッドを使えば、わざわざフィールド変数を用意する必要はない。
http://edn.embarcadero.com/article/39701

procedure TNewThread.Execute;
var
i: Integer;
A,B: Integer;
begin
{ スレッドとして実行したいコードをここに記述してください }
for i := 0 to 99 do
begin
A := Random(10000);
B := Random(10000);
Synchronize(procedure
begin
Form1.Memo1.Lines.Add('NT : ' + FormatFloat('#,##0',A-B));
end);
end;
end;


768 :765:2010/06/11(金) 11:26:33
>>766
LiveHTTPHeaderで確認したところ、POSTする情報は765の3つでした。
試しにブラウザからcokieを一度削除し、最初のログインでどのようなものを渡しているか確認。
それと同じ内容をIdHTTP1.Request.CustomHeaders.Addで渡してみたのですが、やはり
ttp://mixi.jp/check.pl?n=home.plのアドレスが返ってきます・・・。

なんか根本的に設定を間違えているんでしょうか・・・。

769 :デフォルトの名無しさん:2010/06/11(金) 11:40:09
ssl だったり?

770 :769:2010/06/11(金) 11:43:19
>>769
あんまり関係ないか。

771 :765:2010/06/11(金) 12:00:48
>>769
C#とかのサンプルみる限りはSSLじゃなくてもログインできるようなんですよね。
Indyの情報すくなすぐる・・・泣ける・・・。

772 :デフォルトの名無しさん:2010/06/11(金) 13:34:24
Indyは自力でソース見て解決できないバカが使うものじゃないから、
おとなしくTWebBrowserを操作してログインしておけ

773 :デフォルトの名無しさん:2010/06/11(金) 13:35:31
cookiemanagerにsessionはいってるのか?

774 :デフォルトの名無しさん:2010/06/11(金) 20:25:06
IdHTTPのProxyにオミトロン通してブラウザと挙動を比較するとか。

http://mixi.jp/check.pl?n=home.plは普通にログインしてても通過するみたいだから
内容がどうかだね。

775 :デフォルトの名無しさん:2010/06/11(金) 20:45:00
url := 'http://mixi.jp/login.pl';
contents := TStringList.Create;
contents.Text := 'next_url=%2Fhome.pl&email=hogehoge%40yahoo.co.jp&password=00000000&x=0&y=0';

res := IdHTTP1.Post(url, contents);

で実行したら
<html><head><meta http-equiv="refresh" content="0;url=/check.pl?n=%2Fhome.pl"></head></html>
が返ってきた。
たぶんこれが成功じゃないかな。
LiveHTTPHeadersからコピペしたからエンコード済みの文字列だったから
IdHTTPのHTTPOptionsのhoForceEncodeParamsはFalseにしたけど。

776 :デフォルトの名無しさん:2010/06/11(金) 20:45:59
クッキーマネージャは何もいじってないよ

777 :デフォルトの名無しさん:2010/06/11(金) 20:46:20
DSPack 2.3.3

destructor TFilterGraph.Destroy;
var
  i:integer;
begin
  SetActive(False);
  DeallocateHWnd(FHandle);
  if FFilters<>nil then//追加2010.06.11
    FFilters.Free;
  FGraphEvents.Free; //追加2010.06.11
  inherited Destroy;
end;
destructor TDSVideoWindowEx2.Destroy;
begin
  FFullScreenControl.Free;//追加2010.06.11
  if DesktopPlayback then
    NormalPlayback;

  if FDDXM <> nil then
    FDDXM.SetCallbackInterface(nil, 0);
  OverlayCallback := nil;
  FOverlayMixer := nil;
  FFilterGraph := nil;
  FVideoWindow := nil;
  FVideoRenderer := nil;
  FCaps.Free;
  FColorControl.Free;
  inherited Destroy;
end;



778 :デフォルトの名無しさん:2010/06/11(金) 20:52:58
>>777  続き

procedure TDSVideoWindowEx2.ClearBack;//変更2010.06.11
var
  DC, MemDC: HDC;
  MemBitmap, OldBitmap: HBITMAP;
  BackBrush, OverlayBrush: HBrush;
begin
*
*
*

  finally
    SelectObject(MemDC, OldBitmap);
    DeleteDC(MemDC);
    DeleteObject(MemBitmap);
    DeleteObject(BackBrush);
    DeleteObject(OverlayBrush);
    ReleaseDC(Handle, DC);
  end;
  上記を下記の順番に変更
  finally
    DeleteObject(OverlayBrush);
    DeleteObject(BackBrush);
    ReleaseDC(Handle, DC);
    SelectObject(MemDC, OldBitmap);
    DeleteDC(MemDC);
    DeleteObject(MemBitmap);
  end;
end;


779 :デフォルトの名無しさん:2010/06/11(金) 23:24:48
TStringListのSaveToFileって同時に同じ名前のファイルで行われると共有違反とか起きますか?

780 :デフォルトの名無しさん:2010/06/12(土) 04:08:26
起きる起きない以前にそんなクソコード書かないで下さい

781 :デフォルトの名無しさん:2010/06/12(土) 08:04:10
「同時に」の意味は?本当に同時にはできないから、先にSaveToFileしたほうは
成功して、後のほうは失敗するんだけどね。

782 :デフォルトの名無しさん:2010/06/12(土) 09:56:46
あとの方で上書きされると思ってたが違うのか?w

783 :デフォルトの名無しさん:2010/06/12(土) 10:12:36
>>777
2.3.4の間違いだよね?

784 :デフォルトの名無しさん:2010/06/12(土) 12:58:15
><html><head><meta http-equiv="refresh" content="0;url=/check.pl?n=%2Fhome.pl"></head></html>
>が返ってきた。
>たぶんこれが成功じゃないかな。

ミクシィに詳しくない俺でもこれは失敗だとわかる・・・
リファラが不足してるかもしれないよ サーバーがクライアントを蹴る理由は
UA、リファラ、IP、クッキーのいずれか

785 :781:2010/06/12(土) 18:23:37
>782
ああ、先のほうの保存が終了てから後の保存が行われるならその通りだね。
「同時に」って言葉に引っぱられすぎだ。

786 :デフォルトの名無しさん:2010/06/12(土) 19:31:59
>>784
失敗したときは違うHTMLがかえってくるよ。
check.plを経由してhome.plにいくみたい。

787 :デフォルトの名無しさん:2010/06/12(土) 20:17:10
ミクシィに詳しくない俺でもこれは失敗だとわかる・・・(キリッ



うわあ・・・これは恥ずかしい
こいつに足りないのはリファラじゃなくて頭だな

788 :デフォルトの名無しさん:2010/06/12(土) 21:14:20
>UA、リファラ、IP、クッキーのいずれか

他のヘッダで弾いてるところもいっぱいあるよ
成功したかどうかの確認は帰ってくるURLとかじゃなくてクッキー見たほうがいい

789 :デフォルトの名無しさん:2010/06/12(土) 22:17:16
オミトロンなりWireSharkなりを使って、ブラウザで認証OKだったときの挙動をキャプチャしてみると
何か見つかると思うよ。

790 :デフォルトの名無しさん:2010/06/13(日) 00:18:37
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := true;
Timer2.Enabled := true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
sl : TStringList;
begin
sl := TStringList.Create;
with sl do begin
clear;
add(TTimer(sender).Name);
savetofile(extractFilepath(Application.ExeName)+'test.txt');
free
end;
sl := nil;
TTimer(sender).Enabled := false;
end;

保存されたテキストの中身はTimer1だった

791 :デフォルトの名無しさん:2010/06/13(日) 01:42:01
さすがにTimer使っといて同時はねーだろ。別スレッドとか別プロセスじゃないと。
同一スレッド上ではシーケンシャルにしか処理は動かないんだから。

792 :デフォルトの名無しさん:2010/06/13(日) 02:52:43
>>790
ばかだねー(´・∀・`)

793 :デフォルトの名無しさん:2010/06/13(日) 13:51:21
いやそうじゃなくって・・・
>>791
だから中身はtimer2になるはずでしょ?
間違ってたらスマンが。

794 :デフォルトの名無しさん:2010/06/13(日) 14:15:28
>>793
Timer1のイベントが先に実行されるって決まってるんですか?

795 :デフォルトの名無しさん:2010/06/13(日) 14:46:53
無知なのは別にいいがそれをあたかも常識のように言うのはやめていただきたい

796 :デフォルトの名無しさん:2010/06/13(日) 15:01:52
Timer2のイベントが存在していないのに、Timer2になるって脳内お花畑か。
まあそれより、ず〜っと以前の問題なんだけどな。


797 :デフォルトの名無しさん:2010/06/13(日) 16:17:28
えっ?

798 :デフォルトの名無しさん:2010/06/13(日) 20:29:08
イベントはTimer1とTimer2で共有ってことだろ。
>>794
決まってないと思うが、どちらのタイマイベントが先に発生するにせよ、
そのイベントハンドラの実行は同時に実行される事はない。だから、
後の方で上書きされるだけ。
タイマー使ってもマルチスレッドにはならんよ。

799 :デフォルトの名無しさん:2010/06/13(日) 20:35:01

明らかな間違いだぜ
イベントが共通だったとしても
Timer2になることは無いのだよ。
ヒント:タイマーはひとつだけ!


800 :デフォルトの名無しさん:2010/06/13(日) 21:28:47
1個のformには1個のTimerしか使えない。理由はWindowsの仕様だから。
ハイ、次の質問。

801 :デフォルトの名無しさん:2010/06/13(日) 21:56:43
>>800
では次の質問。

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Memo1.Lines.Add((Sender as TTimer).Name);
end;

Timer1とTimer2が交互に追加されて表示されるのですが、なぜですか?

802 :デフォルトの名無しさん:2010/06/13(日) 21:59:00
うそはよくない。TTimerは別々にウィンドウを保持してるので独立して動作する。
ただしメッセージループが動作していないといけないし、Windowsのタイマはもともと
指定時間を経過したことを示すフラグなのでそのあたりも注意が必要だが。

803 :デフォルトの名無しさん:2010/06/14(月) 00:34:30
>>800
ばかだねー(´・∀・`)

804 :デフォルトの名無しさん:2010/06/14(月) 00:46:36
>>790 ファイル保存するときに排他処理やってないとかいうオチ?

805 :デフォルトの名無しさん:2010/06/14(月) 01:23:22
>>804
お前は何を言ってるんだ?

806 :756:2010/06/14(月) 12:02:13
みなさん、レスありがとうございます。
あれから色々やってみたのですが、相変わらず
<meta http-equiv="refresh" content="0;url=/check.pl?n=%2Fhome.pl">
が返ってきます。

今はLive HTTP headersを火狐に入れて、正常にログインできたときの情報を確認しています
が、オミトロンを使用し、ブラウザとIdHTTP両方で確認してみます。

Indy使ったことがないので、勉強がてらやってみたのですが、俺にはてごわすぎる・・・。

807 :デフォルトの名無しさん:2010/06/14(月) 14:21:55
それが正しいんじゃないの? ほんとにブラウザの動きを確認してる?

808 :デフォルトの名無しさん:2010/06/14(月) 20:59:05
>>806
ブラウザの動き的にはそれであってるんじゃないの?
次にそのHTMLから/check.pl?n=%2Fhome.plにアクセスして
その次にhome.plに行けば成功じゃない?

809 :デフォルトの名無しさん:2010/06/15(火) 04:36:11
>>806
(´・∀・`)

810 :デフォルトの名無しさん:2010/06/15(火) 08:49:21
>765
漏れはこれで成功してる

MixiURL = 'http://mixi.jp/';
MixiLoginURL = MixiURL+'login.pl';





IdHTTP1.CookieManager.CookieCollection.Clear;

{ ==> Login }
PostData.Add('next_url=/home.pl');
PostData.Add('email='+email);
PostData.Add('password='+passwd);
PostData.Add('x=0');
PostData.Add('y=0');

IdHTTP1.Post(MixiLoginURL,PostData,Req);

そうすると
IdHTTP1.CookieManager.CookieCollection

SESSIONとSTAMPがセットされる。
あとは普通に他のページを取得できる

811 :765:2010/06/15(火) 11:30:14
>>810
コードの具体例ありがとうございます!

x=0とy=0を765のコードに加えpostしたところ、
IdHTTP1.CookieManager.CookieCollection.Cookie['BF_SESSION','mixi.jp'].Value

IdHTTP1.CookieManager.CookieCollection.Cookie['BF_STAMP','mixi.jp'].Value
に値が入っている事が確認できました。

が、この状態でIdHTTP1.Get('http://mixi.jp/home.pl')を行ったのですが、ログイ
ン前の画面しか取得する事ができませんでした・・。
(ログインされていない状態)

もしよければ、最初のpost以降どのようなロジックでログイン後の画面を取得され
ているかアドバイスいただけないでしょうか?

812 :デフォルトの名無しさん:2010/06/15(火) 12:18:50
>>811
もう数年前のコードで、内容をすっかり忘れてるし、今のmixiにログインできるかどうかすら解らないです

暇になったらDebugしながらどうなっているか確認してみます

が、期待しないでね

813 :デフォルトの名無しさん:2010/06/15(火) 12:38:29
>>812
OSをWindows7にした時にDelphiをインストールし直したらコンポーネント不足でもうコンパイルすら出来なくなってたorz

なので自力で頑張ってくれ

確認だけどPostしてCookieもらってGetする前に
IdHTTP1.Request.ContentType:='';
ってやってる?

それくらいかな?
ほんとにCookieもらったあとは読みたいページを直で読みに行ってるだけだから

814 :デフォルトの名無しさん:2010/06/15(火) 13:10:14
>>813

即興で作ってみた。
これでMemo1にはhome.plの内容が出ました。

procedure TForm1.Button1Click(Sender: TObject);
var
email:String;
passwd:String;
Buf:String;
PostData:TStringList;
Req:TStringStream;
begin
PostData:=TStringList.Create;
Req:=TStringStream.Create('');

IdHTTP1.CookieManager.CookieCollection.Clear;

email:='メールアドレス';
passwd:='パスワード';



815 :デフォルトの名無しさん:2010/06/15(火) 13:13:10
>>814
続き

{ ==> Login }
PostData.Add('next_url=/home.pl');
PostData.Add('email='+email);
PostData.Add('password='+passwd);
PostData.Add('x=0');
PostData.Add('y=0');

IdHTTP1.Post('http://mixi.jp/login.pl?from=login1',PostData,Req);

IdHTTP1.Request.ContentType:='';

Buf:=IdHTTP1.Get('http://mixi.jp/home.pl');

Memo1.Text:=Buf;

PostData.Free;
Req.Free;

end;

816 :765:2010/06/15(火) 13:54:33
>>814
コードありがとうございます。

が、なぜか同じコードを実行してみても、自分の環境ではログインされていない状態になるよう
です(ユーザー名とパスワード入力画面が表示される)。
TIdHTTP1でcookieを扱うために特にしなければいけない事はTCookieManagerの登録以外に
何かありますでしょうか?

うーん、まだPOSTしきれていない情報があるのか・・・?

817 :デフォルトの名無しさん:2010/06/15(火) 14:24:07
>>816
一度新規にProjectを作ってやってみたらどうですかね?

と言うのは、IdHTTP等のプロパティの値が違うと取得できないケースがあります

ちなみに私のコードはDelphi起動、Project作成後に何も考えずにコンポーネントをペタペタやっただけです。
ちなみにDelphi2007です。

818 :765:2010/06/15(火) 18:06:06
>>817
新規で作ってみましたが、やはりログイン前のmixi.jp/home.plの画面が表示されますね・・。
(パスワードとIDの入力画面)
postでIDとパスワードを送っているにもかかわらず、ログインできていないという事か・・?

ちなみにIndyはD2009/2010版の最新のものを入れています。

819 :デフォルトの名無しさん:2010/06/15(火) 18:54:38
del2006だけど成功したよ。>>814-815

820 :デフォルトの名無しさん:2010/06/15(火) 19:55:13
>>818
Delphi2010はStringのエンコードがややこしいので普段使ってないのですが、Delphi2010でやってみたけど出来ました。

何が違うんでしょうね

821 :デフォルトの名無しさん:2010/06/16(水) 02:19:57
頭・・・ですかね

822 :デフォルトの名無しさん:2010/06/16(水) 08:33:05
>>821
お前の?

823 :デフォルトの名無しさん:2010/06/16(水) 13:30:08
>>822の。

824 :デフォルトの名無しさん:2010/06/16(水) 14:09:14
他のアプリのウィンド内の文字列を取得するアプリを作っているのですが、
文字列を取得する時に、そのウィンドがアクティブになっていれば正常に取得できるのですが、
非アクティプの時に取得しようとすると ?Main と言う文字列が返ってきます。
目的のウィンド内の別のところの文字列は非アクティブでも取得できます。

どういう情報を書けばいいかよく分からないので、分かりにくい質問とは思いますがよろしくお願いします。









825 :デフォルトの名無しさん:2010/06/16(水) 17:50:46
なんてソフトの
どんなところを
どうやって取得しているのか?

826 :デフォルトの名無しさん:2010/06/16(水) 23:01:31
VCLベースアプリの可能性が高い感じ。
メインフォームの他に隠しウィンドウ持ってるから。

827 :765:2010/06/17(木) 10:24:12
>>819、820
ひとつ確認させてください。
同じhome.plでもログイン前とログイン後の両方があります。
みなさんはログイン後のhome.plが表示されましたか?

828 :765:2010/06/17(木) 10:28:55
ちなみにログイン前のhome.plだった場合、getで取得された情報の中に、「いますぐ利用す
る(無料)」や「すでに登録済みの方は、こちらからログインしてください」などの文字列が
入っています。 ログインされていない状態のhome.plですね。

俺がやると、なぜかこっちになるんだよね・・・。

829 :デフォルトの名無しさん:2010/06/17(木) 10:58:30
いい加減、httpでアクセスして自分の送ってるパケットぐらい調べろ
httpsonlyだったり正常ならレスポンス時のカスタムヘッダを列挙しろ
それも駄目ならリクエスト時のカスタムヘッダに直接クッキー押し込め
それでも駄目ならアカウントが死んでる

クッキーコレクションだったか?あれはヘッダからクッキーを抜いて保持しとくだけの物なんだよ
使えなかったら直接ヘッダにぶち込め

つかな、もうこれdelphiスレで何度も何度もいってるんだよ
デバッグが出来ないならネットワークのプログラミングはやるな
つかRFC読んで仕組みを勉強しろ!

830 :デフォルトの名無しさん:2010/06/17(木) 11:17:53

スレタイさえ読めないおバカさんですか?
このスレのタイトルは、
くだすれDelphi(超初心者用)その51
>Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
>もしくは質問者自身何が何だか分からない質問を
>勇気を持って書き込むスレッドです。
>Delphi使いが優しくコメントを返しますが
>お礼はDelphiの布教と初心者の救済をお願いします。


831 :デフォルトの名無しさん:2010/06/17(木) 11:26:27
>>829
不快にさせて、申し訳ございません。

いままでの思考錯誤をまとめると。
httpでアクセスした際のパケッットはLive HTTP Headersで取得し、POSTしているデータは
next_url/email/password/x/yであると確認済みです。

受け取るcookieはBF_SESSION/BF_STAMPで、CookieManagerに入ってきている事も確認
しました(cookieの値は同じものであると確認)。

IdHTTP1.Request.CustomHeaders.Add('Cookie:BF_SESSION=' + BF_SESSIONの内容);
IdHTTP1.Request.CustomHeaders.Add('Cookie:BF_STAMP=' + BF_STAMP);
で、Cookieをヘッダーに送ったりもしていますが、やはり同じ結果(ログオンされていない状態に
なる)になるのです・・・。

ログインからの流れとしては
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/326cookie/cookie.html
を参考にしています。 受け取ったcookieを持ってれば認証が必要なページにアクセス可能になる
ようですので、当方のCookieManagerの使い方がおかしいのか?と悩んでいるところです。
(他の方は成功しているようですので)

832 :デフォルトの名無しさん:2010/06/17(木) 17:39:38
プロジェクト一式上げろよ

833 :デフォルトの名無しさん:2010/06/18(金) 10:56:15
エクセルのファイルそのものを削除するにはどうすればいいのか誰か教えてくれないか
DeleteFile('C:\ファイル名'); でやるとTXTファイルなら削除できるのにエクセルだとなぜか削除されないんだ・・・

834 :デフォルトの名無しさん:2010/06/18(金) 11:17:22
追記

別の名前で保存はできるが、名前を変更して保存(リネーム)もできない


835 :デフォルトの名無しさん:2010/06/18(金) 12:14:20
D3のQuickReportのパッチのd3qrupd.lzhをお持ちの方居りましたらメールで送っていただけませんか?
サポート終了と言うことで本家から落とせなくて困っています。


836 :デフォルトの名無しさん:2010/06/18(金) 12:22:27
>>832
うpローダー探してのちほどうpしてみます。
今日午後〜火曜まで出張のため、来週半ばぐらいになるかもしれません。

837 :833:2010/06/18(金) 15:14:23
すみません。自己解決しました。お騒がせしました。

838 :デフォルトの名無しさん:2010/06/21(月) 17:47:50
bitmapのことで質問させてください。
canvas.draw(intX, intY, 別のビットマップ)
で画像コピーができることはわかったのですが、
これって受け手側の座標しか指定できないんですか。

100X100の大きさの受け手に対して、送り手の101, 201, 200, 300から
100X100だけ持ってくるにはどうしたらいいんでしょう。

839 :デフォルトの名無しさん:2010/06/21(月) 18:31:51
ヘルプでTCanvasについて調べなさい

840 :デフォルトの名無しさん:2010/06/21(月) 19:09:39
ありがとうございます。
メソッドにCopyRectってのがあったので、もしかしてこれかなと
思ってやってみたら、以下あっさりできました。
送り手.Canvas.CopyRect(Rect(0, 0, 100, 100), 受け手.Canvas, Rect(30, 30, 130, 130));

841 :デフォルトの名無しさん:2010/06/22(火) 01:33:11
>>840
できたならいいけど受け手と送り手勘違いしてない?
あとDrawでもマイナス指定すればできるけど

842 :デフォルトの名無しさん:2010/06/22(火) 22:06:48
ゲーム作っている人教えて。スーパーマリオなどのゲームって
スクロールしたとき、マリオをも背景も再描写させてるの?

843 :デフォルトの名無しさん:2010/06/22(火) 22:22:30
そもそも昔のゲーム機はPCとは異なる概念で描画してるから
PCでは参考にならないと思うぜ

画面全体がタイル上に分割されていて、
どこにどのタイルを貼るかを指定する感じで描画する
背景は全体的にスクロールできて、
キャラは背景とは別に置けたんじゃなかったかな(所謂スプライト)
GBAの知識だからFCやSFCくらい古くなるとどうなってんのか知らないが

最近のゲーム機なら毎回レンダリングしてるんじゃないの
カメラが固定ならさぼってるかもしんないけど

844 :デフォルトの名無しさん:2010/06/23(水) 09:37:41
最近、Delphi7のデータベースを使ったプログラムを作った時の
配布方法について教えて下さい。

データベースを使ったプログラム自体初めてなので、これから
本とか買って調べるのですが、データベースアプリってデータベースも含めて
Zipとかで配布できますか?
インストーラーとかよく分からないので、解凍して終わりな感じにしたいです。



845 :デフォルトの名無しさん:2010/06/23(水) 09:40:18
>>844
そんな知識レベルで配布とかすんな。

846 :デフォルトの名無しさん:2010/06/23(水) 09:51:04
Delphi は複数の DB 接続技術を利用できますから、あなたのアプリがどれを使うかによって
話は変わってしまいます。

まず、データベースアプリを作りましょう。
配布の話はそれからで十分だと思います。


847 :デフォルトの名無しさん:2010/06/23(水) 10:22:34
>>845
答えてくれてありがとうなんだけど、ケチ付ける前に日本語読めるか?
これから調べて作るんだよ。
すっこんどけ。ヽ(`Д´)ノプンプン

>>846
了解しました。


848 :デフォルトの名無しさん:2010/06/23(水) 10:38:27
あと、せめてどのデータベースにつなげたいのかくらいは書いてね。
そういうのもまだ決まっていないならどうしようも無いけど



849 :844:2010/06/23(水) 11:27:58
>>848
> あと、せめてどのデータベースにつなげたいのかくらいは書いてね。
> そういうのもまだ決まっていないならどうしようも無いけど

なにぶん、初めてでどのデータベースに繋げようかとか決まってないです。
一応、「Delphi DB&Webプログラミング」って本が手に入りそうなので、
それで調べようかなと思っています。

逆に、簡単に配布出来るものってあるんでしょうか?


850 :デフォルトの名無しさん:2010/06/23(水) 11:54:09
デルファイでマリオ作ろうとしてるやつっておめでたいな・・・

851 :デフォルトの名無しさん:2010/06/23(水) 12:07:02
>>849
何を構築しようとしてるのか知らないけど、多分、君にDBは必要無いと思うよ。

852 :デフォルトの名無しさん:2010/06/23(水) 13:09:16
7をWindows7で使ってます。

TRicheditの背景色についてですが、
いったん表示されてから、Windowsのテーマ変更で背景色が変わった場合
TRicheditは背景色がclWindowに追随してくれません。(ほかにTTrackbarも)
テーマ変更時のイベントを捕捉できればいいのですが、eventにはそれらしき
ものが見当たりません。
ためしにonChangeイベントで
reRichedit.color := clWindow;
とやってみましたが、テーマ変更後の色に変わりませんでした。
いったんコンポごと消して再生成するしかないのでしょうか?


853 :デフォルトの名無しさん:2010/06/23(水) 15:14:26
まぁ、確かに要らないかも何ですが・・・
あるデータを溜め込んで、andやorで抽出する必要があるんで
何かのデータベースを使った方が楽かと。
データリスト自前で作っても良いんですけどね。

854 :デフォルトの名無しさん:2010/06/23(水) 15:18:23
・自分でフィルタリングするの面倒だからDB使う。
・インストール面倒だからzipでファイルだけ配布。
・調べるの面倒だから2chで丸投げ。

855 :デフォルトの名無しさん:2010/06/23(水) 15:38:43
854 どれも立派な理由だと思います。

856 :デフォルトの名無しさん:2010/06/23(水) 15:41:06
いやいや別に丸投げって、そんんぁ。
インストーラーみたいなのをやらないといけないかどうかだけだよ知りたいのは。
データベースによるわ、ヴォケ!ってなら ヾ(゚∀゚)ノ ハイ で終わり

857 :デフォルトの名無しさん:2010/06/23(水) 15:45:26
リレーショナル DB である必要がなく、データ件数が高々数万でよいなら
ClientDataSet を MidasLib ユニット経由で使えば、アプリケーションに
組み込み(追加の配布ファイルなし)で作れます。

一般の(リレーショナル)DB を使う場合には、そのサーバーそのもの以外に
DB メーカー提供のミドルウェア(接続用 DLL)が必要になります。
多くの場合、アプリケーションと同じディレクトリに置けば動く場合が多いですが
そうでない場合もあります。


858 :856:2010/06/23(水) 15:52:28
>>857
ありがとうございました。
調べる的が絞れました。

859 :デフォルトの名無しさん:2010/06/24(木) 02:31:28
ちょいちょい挟んでくるAAがイラッと来るなw
分かってやってるのかもしれんが

860 :デフォルトの名無しさん:2010/06/24(木) 08:11:08
朝から引っ込んで炉よ、クズβακα..._φ(゚∀゚ )アヒャ

861 :デフォルトの名無しさん:2010/06/24(木) 16:06:04
SHFileOperationって、いわゆる非同期というやつなんでしょうか?

大量のファイル(フォルダ)をバックグラウンドでコピーするために
FOF_SILENTを指定してSHFileOperationを使ってみたのですが、
処理が終わるまで画面が固まってしまいます。
そこで↓みたいなワークスレッドを作ってその中で実行させてみたのですが
今度はすべてのファイルがコピーされないまま、SHFileOperationから抜けて
スレッドが終了してしまいます。

procedure TWorkThread.Execute;
begin
ShellAPI.SHFileOperation(ShellParam);
end;

こっち立てればあっち立たずな感じで困っています...
こういうときにDelphiでうまい対処法みたいなものがあるのでしょうか?

862 :デフォルトの名無しさん:2010/06/24(木) 17:10:41
Outlook Expressの保存フォルダ(dbxファイル)の場所を取得するには?

863 :デフォルトの名無しさん:2010/06/24(木) 17:46:25
>>858
分かってるとは思うけどDBのライセンスに注意してね
付属のIntereBaseも再配布不可どころか開発専用のライセンスだし。

Delphiの場合だとIBX+組み込み版Firebirdが手っ取り早いと思うけど

864 :デフォルトの名無しさん:2010/06/24(木) 19:01:39
うるせーハゲ^^

865 :デフォルトの名無しさん:2010/06/24(木) 19:59:16
>>861
画面の見た目にこだわらないのであれば
処理の進捗を表示するフォームを作成してからCopyFileExを呼び出して、
コールバック関数内で画面を更新させる手もある

866 :デフォルトの名無しさん:2010/06/25(金) 09:09:38
>>861
TSHFileOpStructのウィンドウハンドルに0を指定でいいんじゃね。

867 :デフォルトの名無しさん:2010/06/25(金) 11:48:40
他のアプリのフォントの色を取得するにはどうすればいいですか?
目的のアプリのコントロール?のハンドルは取得できています。
GetDCでデバイスコンテキストを取得して、

Label1.Font.Color := GetTextColor(DC);

みたいにしているんですが、「0」が返ってきてしまいます。
よろしくお願いします。


868 :デフォルトの名無しさん:2010/06/25(金) 11:54:56
全く同じ質問を見たような気がするが気のせいか?

869 :デフォルトの名無しさん:2010/06/25(金) 11:58:16
失礼しました。
675にアキラメロンがありました。

870 :デフォルトの名無しさん:2010/06/25(金) 15:40:43
数年前にDelphi6をやっていてある程度マスターしていたのですが
ひさしぶりにプログラミングをやろうとしたら全然状況が変わっていて
どの言語をやろうか迷っています。
Delphi経験者が今から趣味でプログラミングを始めるならどの言語がいいですか?

871 :デフォルトの名無しさん:2010/06/25(金) 15:57:52
>>870
Object C

872 :デフォルトの名無しさん:2010/06/25(金) 16:54:59
>>870
C#

873 :デフォルトの名無しさん:2010/06/25(金) 21:47:02
>>870
Prism

874 :デフォルトの名無しさん:2010/06/25(金) 22:03:33
>870
趣味?お金をかけたくないならC#、お金に余裕があるならDelphiかPrism。
C#はEEならただだから。

875 :765:2010/06/26(土) 12:09:21
>>832
すいません、やっと出張から帰ってこれました・・・。

遅くなりましたが、うpローダーにうpしてみました。
ttp://www.dotup.org/uploda/www.dotup.org988294.zip.html

確認用に取得したHTMLをtest.htmlとしてexeと同じ位置に保存し、それを再度TWebBrowserに
取り込んでいます(ランタイムエラーでますが)。
TWebbrowserの画面でいますぐ利用する(無料)ボタンが表示されている場合、ログインできて
いないhome.pl画面です。
ログインできている場合は、該当アカウントのhome画面になるはずです。

よろしくお願いします。

来週からまた出張・・・orz

876 :765:2010/06/26(土) 12:10:15
しまった書き忘れ・・・。
うpローダーのダウンロードパスはdelphiです。

877 :デフォルトの名無しさん:2010/06/26(土) 13:36:05
Delphiってもう無料版はないの?

878 :デフォルトの名無しさん:2010/06/26(土) 14:16:33
ない

879 :デフォルトの名無しさん:2010/06/27(日) 00:56:09
処理中にマウスのカーソルを砂時計にしたいのですが、
各コントロールのCursorを全部設定していかないと
いけないのでしょうか?

880 :デフォルトの名無しさん:2010/06/27(日) 03:16:10
Screen.Cursor := crDefault;

881 :デフォルトの名無しさん:2010/06/27(日) 18:52:36
>>875
何度も言われていることなのにバカなの?
login.pl→check.pl→home.plっていう流れなのに
いきなりhome.plアクセスしてるじゃん。
いろんな人がいろんなアドバイスしてくれてるのに
全く聞く耳持ってないじゃん。

login.plでちゃんとログインできたらメタタグだけでcheck.plに行けって返ってくるから
そこにアクセスしてからhome.plにアクセスしてみなよ。
一度目のPOSTのレスポンスを表示しようと思わなかったのはなんでだろうか。

882 :デフォルトの名無しさん:2010/06/27(日) 19:45:37
聞いてる時点でやる気も調べる気も行動する気も最後までやり遂げる気も無い

883 :デフォルトの名無しさん:2010/06/28(月) 02:03:47
釣れた釣れたw

884 :デフォルトの名無しさん:2010/06/28(月) 05:34:07
釣られちゃった
てへっ

885 :デフォルトの名無しさん:2010/06/28(月) 09:44:58
恥ずかしい後釣り宣言来ました

886 :デフォルトの名無しさん:2010/06/28(月) 14:00:40
恥ずかしい後釣り宣言来ました宣言来ました

887 :デフォルトの名無しさん:2010/06/28(月) 14:47:30
自動ログインしたいという根性そのものがいけすかない。
手動でやれ手動で。ビシっと。

888 :デフォルトの名無しさん:2010/06/28(月) 14:55:47
そういうのはC#でやるのが簡単なのに

889 :デフォルトの名無しさん:2010/06/28(月) 16:35:18
Del7のListViewの事で質問です。
ListViewの左端(ItemのCaption?)に入力されている文字列と
これから追加しようとする文字列が重複していないか確認をしたいのですが、

for i:=0 to ListView1.Items.Count-1 do
if ListView1.Items.Item[i].Caption<>stringData then
  ・・・・

みたいにするしかないでしょうか?
よろしくおねがいします。

890 :デフォルトの名無しさん:2010/06/28(月) 19:25:46
ListView1.Items.IndexOf(stringData) >= 0
とか
ListView1.FindCaption(0,stringData,False,True,False) = nil
とか

891 :デフォルトの名無しさん:2010/06/28(月) 19:29:14
ListView1.Items.IndexOf(stringData) < 0
だった

892 :889:2010/06/29(火) 10:20:41
質問した時のプログラム例が間違ってる。
恥ずかしい。orz

>>890
ありがどうございます。
しかし、ItemsのIndexOfはTListItemを探すものらしいです。

ListView1.FindCaption(0,stringData,False,True,False) = nil
こっちでいいみたいです。

893 :デフォルトの名無しさん:2010/06/29(火) 10:24:06
VirtualListViewでやれば好きなように出来る。

894 :765:2010/06/29(火) 11:14:01
>>881
当初Live HTTP headersで確認したところ、login.plのあとにcheck.pl?n=/home.plにアクセス
していることがわかりましたので、
IdHTTP1.Get('http://mixi.jp/check.pl?n=home.pl');

IdHTTP1.Get('http://mixi.jp/check.pl');
を試した事もありました
が、双方ともに302 Foundがでるので(ブラウザからはアクセスできる)、それ以上の調査はして
おりませんでした。

アップロードにうpしているファイルは、上の方でログインに成功されている方の例をそのまま
使って作り直したものです。

>>881さんはcheck.plにアクセスした際に、302 Foundエラーはでませんでしたか?
もしでている場合、どのように回避されましたか?

実はIndyのバージョンを2009梱包版のものではなく、最新にあげてしまっているので、そのあた
りが影響していないか心配です。

895 :765:2010/06/29(火) 11:27:51
追加
POSTから返ってきた文字列に関しては>>768で触れております。
が、この時点でこのアドレスはクッキーが無効であるという失敗を表すものだという勘違いをして
しまい(>>784さんも同意見だったため)、しばらく迷走しておりました。
で、その後再度Live HTTP headersを追ってみたところ、「http://mixi.jp/check.pl?n=%2Fhome.pl
へのGETを発見しました。

今改めてみてみましたが、ブラウザでもcheck.plへのアクセスのあと、一度「HTTP/1.1 302 Found」
がでていますね・・・。

896 :デフォルトの名無しさん:2010/06/29(火) 16:33:24
D3のSQLエクスプローラーで二つのInterbaseファイル間のテーブルの比較って出来ますか?
片方で削除されたレコードを抽出したいのです。



897 :デフォルトの名無しさん:2010/06/29(火) 23:44:12
win7でターボデルフィは動かせますか?

898 :デフォルトの名無しさん:2010/06/30(水) 01:18:54
302がエラーだとしか思わない人がネットツール作れるのかよ・・・・・・

899 :デフォルトの名無しさん:2010/06/30(水) 03:07:49
>>895
もう続きはチラ裏でいいと思うよ

900 :765:2010/06/30(水) 09:49:43
>>898
超初心者ですので、勉強のつもりでやってます・・・。
用語もそれほど知らないので、どう皆さんにうまく説明していいかわからず、エラーと表現して
しまい申し訳ございません。

>>881さんがどのように302 Foundを回避されているのか、アドバイスいただければ幸いです。

>>899
自分自身Delphiはおろかプログラミングもはじめたばかりですので、このスレに来たのですが、
もっと初心者向けのスレがあるという事でしょうか?
ここでも場違いなようでしたら、どちらかのスレに誘導していただければ嬉しいです。

901 :デフォルトの名無しさん:2010/06/30(水) 10:25:11
Delphi7+Firebird+IBXで開発したものをDelphi2009で再構築しています。
データベースのテーブル一覧を取得するために下記SQLを発行していますが、
テーブル名が10文字分しか返ってきません。何か対処法ご存じでしたらご教授願います。

select rdb$relation_name from rdb$relations
where (rdb$view_source is null) and (rdb$system_flag=0)


902 :デフォルトの名無しさん:2010/06/30(水) 10:32:54
本当に勉強したいなら、匿名無料掲示板で相談するのではなく経験を持っている人に教わった方が
速いです。身近に相談できるような人はいませんか?

>もっと初心者向けのスレが
「知らないこと」には限界が無いので、初心者とひとくくりにすることができないのですよ
あなたがどこまで何を知っているか。によって答え(や参考資料の出し方など)は変わっていくのです。
どこかにもっと初心者向けのスレがあるかもしれませんが、それは誰にもわかりません。

多くの回答者は暇なときにしか対応できませんからどうしても時間がかかります。だから「出直してこい」「ちょっとは
自分で調べろ」と言うしか無いのですよ。

今回の件では、プログラムする前に何が正しい動作、期待する動作なのかを知る必要が有るでしょう。
まずブラウザとサーバーの会話を分析、理解するべきだと思います。

簡単にはパケットキャプチャ。Safari や Chrome などのブラウザ組み込み開発ツールも役に立つでしょう。
ここから先は、まずはネットワーク関連のスレに移動した方が、より専門的な解説、説明、罵倒が待っていると
おもいます。行ってらっしゃい




903 :765:2010/06/30(水) 11:46:21
>>902
このスレですでに二人ほど、ログインに成功している方がいるので、できればその方たちから
のヒントを聞かせていただければなと思っておりました。(´・ω・`)
もちろんヒマな時の回答でも、すごく嬉しいです!

DelphiでIndyを使用してMIXIにログインする例が見あたらなかったので、今後トライしようと
する人の為にも成功例がコードと共にあった方がいいかなと思って質問を続けてきましたが、
他のスレに行った方がよさげですね・・・。

とりあえずネットワーク関連のスレの方をみてみます。
こちらでも何かヒント等ありましたら、引き続きアドバイスいただければ幸いです。

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

904 :765:2010/06/30(水) 12:28:13
XRayさんのところに302回避の良いサンプルがありました。 Redirectを使って処理すればいいようです。

ちら裏になりますが、現在の状況です。
まだ解決にはほど通りので、引き続きがんばります。

ログイン情報をPOST

Cookieとhttp://mixi.jp/check.plへ行けとの指示ゲット

302Found

Redirectで処理し、http://mixi.jp/home.plが返ってくる

http://mixi.jp/home.plへ移動

ログイン前のホームが依然表示される

905 :デフォルトの名無しさん:2010/06/30(水) 12:40:52
だからブラウザだって302を受け取って処理してんの。それと同じにやればいいんだよ

906 :765:2010/06/30(水) 12:55:21
>>905
>>904のRedirect処理部分で、同じように処理いたしました(XRayさんのサイト参照)。

(Live HTTP Headersで確認したところ)正しい動きとしてはhome.plで無事ログイン済みになり
あらたにemidというCookieをもらえるはずですが、上記の通りでやはりログイン前の画面に
なってしまうので、引き続き調査中です。



907 :デフォルトの名無しさん:2010/06/30(水) 14:00:32
そもそも認証は面倒だからIEでいいならIEコンポ(WebBrowser)でやったほうが早くて確実だけど
INDYにこだわる必要があるのかな
WebBrowserで自動ログインする部分が多少面倒だけどそれさえクリアすれば後は簡単

908 :765:2010/06/30(水) 14:13:21
>>907
WebBrowserは別の練習アプリで使ったので(その時にIndyでも認証ができると知りました)今回は
Indyに挑戦してみようと思いまして。
だが、資料が少なすぎて、今の俺のスキルでは無茶すぎた・・・! と後悔しつつも、せっかくだか
ら最後までやりたいと思っております。

909 :デフォルトの名無しさん:2010/06/30(水) 14:41:41
302回避とか書いている時点でなにも理解できてない。
Delphiとは関係ない知識が足りてない。

910 :765:2010/06/30(水) 15:13:50
>>909
知識不足というのは、自分でも痛感しています。 なにぶんプログラムを勉強し始めたばかりで
すのでご容赦ください。
現在の時点では、ググった結果さえ理解できない事も多く、このスレの回答者の皆さんみた
いになるには、かなりの時間が必要そうです。

回避というのは、302が返ってくるのでどのように処理すればいいのかという意味のつもり
だったのですが、適切な言い方ではなかったようで、申し訳ないです。

Live HTTP Headersでの確認では、check.plにアクセスしたあと、「HTTP/1.1 302 Found」が返っ
てきており、その後home.plにアクセスしているので(おそらく>>905さんがおっしゃる通り、ブラウ
ザが302をこの時点で処理している)、やり方としては今Delphiでやっている事と同じような気も
するのですが。
今日は一日休みですので、もう少しLive HTTP Headersを確認しつつがんばってみます。
上で、すでにログインに成功している人がいるし、見落としている部分に答えがありそうです。

911 :デフォルトの名無しさん:2010/06/30(水) 16:12:08
なぜDelphiなんだろうC#のがいいのに

912 :765:2010/06/30(水) 16:40:50
>>911
ちら裏になりますが、会社の自分の前任者(元プログラマ、退職済)が2009を購入してもらって、
ちょこちょこ便利ツールを作ってたみたいで、後任の自分も使ってみたら?と渡された。

もともとプログラムできる奴カッケー!!と思っていたので、仕事の合間や自宅にノートPC持っ
て帰ってに勉強しています(セキュリティが緩いので・・・)。
職種はまったくPCと関係ない上、社内でその手の知識がある奴も皆無なのがつらいところ。

913 :デフォルトの名無しさん:2010/06/30(水) 19:17:26
なぜDelphiなんだろう

914 :デフォルトの名無しさん:2010/06/30(水) 21:23:52
Webアプリ作りたいんならまずRFC2616くらいは読んどいたほうがいい。

とりあえず、「HTTP/1.1 302 Found」は必ずしもエラーを意味しない。それによりリダイレクト
させることが目的である場合もあるから。
Indyのバージョンによるのかもしれないけど、プロパティで302を自動でリダイレクトさせる
ことができるし、実際自分はそれを使ってる。

915 :765:2010/06/30(水) 22:33:34
>>914
実はRFC2616を説明しているサイトで302 Foundについてすでに調べたのですが・・・・
さっぱり意味わかんねえええええw orz

他も色々みてみて、どうやら一時的なページの移動か、CGIが返す場合があるという事
として今は理解しています(検討外れだったらすいません・・・)。

Indyのバージョンは最新のはずなので、もしかしたら自動でリダイレクトさせるプロパティ
があったのかもしれないですが、とりあえず現在はRedirectイベントで処理いたしました。

今日は力つきたので、ここまででw

916 :デフォルトの名無しさん:2010/06/30(水) 23:06:41
Delphiと関係ないことは理解できましたか?

917 :デフォルトの名無しさん:2010/07/01(木) 04:20:03
 BDEでODBC経由でSQL Serverに接続しています。(TDateBaseクラスを使用)
複数のプロセスでDB接続している際、その中の1つのプロセスを強制終了
(クラッシュ)しては再起動ということを繰り返していると、何度かいったところで
「この操作に必要なメモリがありません」と出て、DB接続できなくなります。
DB接続しているプロセスをいったん全て終了させると、正常に戻ります。
 見たところではリソースのリークのようなのですが、改善することはできますで
しょうか。

918 :デフォルトの名無しさん:2010/07/01(木) 04:28:35
プロセスの強制終了が直接の原因でしょ
BDE は共有メモリモデルで動いているから異なるプロセス間で共有しているメモリブロックが解放されず
不足したのでしょう。

強制終了しないように直し、仮に例外が発生しても正しくアプリケーションを終了させるようにするのが正道。


919 :デフォルトの名無しさん:2010/07/01(木) 04:42:57
BDE 使い続けている人は多いなぁ

920 :デフォルトの名無しさん:2010/07/01(木) 09:41:07
BDE経由だとoracleでもそんな感じだし。

921 :デフォルトの名無しさん:2010/07/01(木) 09:55:45
>>765
C++Builder2010だけど、>>814 のコードでログインできた。

>>814 のコードの
IdHTTP1.Post('http://mixi.jp/login.pl?from=login1',PostData,Req);
で、Reqにサーバーからのレスポンスが入っている。

とりあえずReqのデータをSaveToFileでファイルに保存してファイルの内容を教えろ。

ログインできていれば、あとは >>814 の次のコードでログイン後のページが表示される。
IdHTTP1.Request.ContentType:='';
Buf:=IdHTTP1.Get('http://mixi.jp/home.pl');

302 Foundとかで躓く理由がない。


922 :デフォルトの名無しさん:2010/07/01(木) 11:36:04
Indyってnegotiate認証に対応しているのでしょうか?NTLS認証は対応してるっぽい
ですけど、Kerberos認証は対応してます?

923 :デフォルトの名無しさん:2010/07/01(木) 12:03:02
Delphi2010(Rad Studio)の
逆アセンブル/レジスタなどのペイン(メニューだと表示→デバッグ→CPUウィンドウ以下)
のフォントサイズが6?7?なのか不明ですが、文字が小さすぎて見えません

CPU全体というものを選べばフォントサイズはでかくて見易いのですが、この項目はエディタウィンドウと重なってしまい、使い勝手が悪いです

特にこれらの項目のフォントサイズを変更する項目が見あたらないのですが、文字を大きくすることは不可能なのでしょうか…

924 :デフォルトの名無しさん:2010/07/01(木) 13:04:34
日付の比較がしたいのですが、

2010年1月1日,aaa,bbb,ccc
2010年1月2日,ddd,eee,fff
       ・
       ・
       ・
2010年7月1日,111,222,333

の様なリストがあって、ユーザーからは「2010年2月1日から2010年5月6日まで」みたいに指定されます。
今考えているのは、年月日の漢字を消して 201021 と言う数字にして比較しようと思っているのですが、
もっと良い方法があれば教えて欲しいです。

よろしくお願いします。



925 :デフォルトの名無しさん:2010/07/01(木) 13:07:09
TDateTime型に変換する

926 :デフォルトの名無しさん:2010/07/01(木) 18:50:02
>>924
> 今考えているのは、年月日の漢字を消して 201021 と言う数字にして比較しようと思っているのですが、
それだと2010年1月11日と2010年11月1日の区別ができないのでは。

927 :デフォルトの名無しさん:2010/07/01(木) 19:25:17
StrToDateTimeでTDateTimeにして比較する

928 :デフォルトの名無しさん:2010/07/01(木) 19:26:19
ごめん、こっちの方
VarToDateTime


929 :924:2010/07/01(木) 23:06:28
皆さん、ありがとうございました。
VarToDateTimeを使って、上手くできました。

また、よろしくお願いします。

930 :765:2010/07/02(金) 10:16:26
>>921
Reqのデータですが、こちらでは
<html><head><meta http-equiv="refresh" content="0;url=/check.pl?n=home.pl"></head></html>
となっています。

>>921さんはどのようなデータを取得できましたか?

931 :デフォルトの名無しさん:2010/07/02(金) 13:17:35
あれだけ言われてまだここでやるんだ

932 :デフォルトの名無しさん:2010/07/02(金) 14:46:08
>>930
そのレスポンスなら、mixiの認証は通っている。
ここまでは正しい動作だ。

では次に >>815 の次の部分を下のコードのように変更してほしい。

これを

Buf:=IdHTTP1.Get('http://mixi.jp/home.pl');

こうする

Req.Clear();
IdHTTP1.Get('http://mixi.jp/home.pl', Req);

Reqにサーバーからのレスポンスが入っている。
これをSaveToFileでファイルに保存して内容を確認してほしい。
なお文字コードはeuc-jpなので、euc-jpに対応しているエディタで開く必要がある。


933 :765:2010/07/02(金) 16:49:20
>>932
Reqの中身はログイン前の画面でした。
「すでに登録済みの方は、
こちらからログインしてください」
と共にログインメールアドレスとパスワードの入力を施す画面です。

>>932さんや>>814さんはこれでログインできているようですので、もしや、Indyのアップデータを
行ったのが問題なのか?
週末にでも一度削除し、インスロールを一からやり直してみます。

934 :デフォルトの名無しさん:2010/07/02(金) 17:45:30
>>933
これ使え。
http://yuukiremix.s33.xrea.com/chirashi/

935 :デフォルトの名無しさん:2010/07/02(金) 19:01:55
ここまでやってパスかメアド間違えてるとかだったら殺意すら湧く

936 :デフォルトの名無しさん:2010/07/02(金) 20:26:11
var
  X: Cardinal;
としておいて、
  X:=32768*32768;
  X:=X*2;
とか、
  X:=2147483648;
だと問題ないのですが、
  X:=32768*65536;
では、コンパイル時に「[エラー] 〜: 数値演算のオーバーフロー」となってしまいます
どうしてなのでしょうか

937 :デフォルトの名無しさん:2010/07/02(金) 20:41:12
0..4294967295

938 :デフォルトの名無しさん:2010/07/02(金) 21:00:16
>>937
4294967295 ?
32768*65536は
2147483648
ですから、あふれてないように思うのですが

939 :デフォルトの名無しさん:2010/07/02(金) 21:26:45
ヘルプの「真の定数」によると、定数式が整数の場合はその値によって型が決まり
32768〜65535 ⇒ WORD
65536〜2147483647 ⇒ 0..2147483647
となる。この場合 (WORD)*(0..2147483647) の演算だから
式全体の型は 0..2147483647 となり、結果がこの範囲に収まらないとエラー
という理屈になるのかな。何だか納得いかないけど、とりあえず
X := 32768*Cardinal(655356) とでもすればコンパイルは通るだろ。

940 :デフォルトの名無しさん:2010/07/02(金) 22:26:25
>>939
「真の定数」読みました
なるほど、65536..2147483647は、ほぼInteger(Longint)ですね
X:=Cardinal(32768)*65536;
でもOkでしたので、その解釈は当たりだと思います
分かりましたー、と言いたいところですが、それなら
X:=32768*32768;
でもオーバーフローになるはずでは???
やっぱりなんか変ですよね

941 :デフォルトの名無しさん:2010/07/02(金) 23:09:09
>>940
あとは、整数型同士の演算の場合
どちらかがInt64なら結果もInt64、そうでなければ結果はInteger
という規則があるから、これにひっかかるのかな。(ヘルプだと「算術演算子」のところ)

Cardinalが入った場合の規則が書かれていないからよくわからないけど、
Integerの範囲には収まらないはずだからInt64扱いになるのかもしれない。

942 :デフォルトの名無しさん:2010/07/03(土) 00:29:21
>もしや、Indyのアップデータを行ったのが問題なのか?
>週末にでも一度削除し、インスロールを一からやり直してみます。

ワロタwww アップデータをインスロールしてくださいね(笑)


943 :デフォルトの名無しさん:2010/07/03(土) 01:39:16
定数の型を指定したい場合はこうすればいい
const foo = Cardinal(1);

944 :デフォルトの名無しさん:2010/07/03(土) 08:46:20
計算時に
i := Cardinal(1) * 10;
でいいやん。

945 :デフォルトの名無しさん:2010/07/03(土) 12:29:36
仕事に忙殺されてるうちにすっかり取り残されてしまい、いまだに D6 Pro ですが、
職場では Win7 を使っています。
少々余裕も出てきた&ネイティブコードも必要になりそうなので、職場のマシンに
インスコしてみました。今のところ動いています。

せっかくなので Win7 のタスクバーの新機能を使ってみたいのですが、D6 Pro で
ITaskbarList3 を使うにはどうしたらいいんでしょうか。タイプライブラリの取り込みで
ExplorerFrame.dll を指定してもエラーになってしまいます。さすがに古すぎるんでしょうか。

946 :デフォルトの名無しさん:2010/07/03(土) 12:44:42
>>944
定数の話してるのになんでマジックナンバーにするの?馬鹿なの?

947 :946:2010/07/03(土) 12:45:56
僕が馬鹿でした

948 :944:2010/07/03(土) 12:47:03
分かればいいよw

949 :デフォルトの名無しさん:2010/07/03(土) 12:48:35
const foo:Cardinal=1;
でいいやん。

950 :デフォルトの名無しさん:2010/07/03(土) 13:02:41
>>949しか知らんかったわ。
>>943今度使ってみよう。
些細なことで偶に勉強になるな。役立つかは別にして。

951 :デフォルトの名無しさん:2010/07/03(土) 15:25:44
厳密に言えば>>949は一度だけ書き替え可能な変数
>>944が本当の定数
>>944はコンパイル時に実際に数値と置き換わるけど、>>949は変数と同じく参照として扱われるから、
その展開がない分>>944の方が高速になる
知らないことは誰だってあるけど、いいやんとか言って違いも調べず思考停止するやつは向上心もう少し持とうぜ

952 :デフォルトの名無しさん:2010/07/04(日) 03:30:07
もっと!もっと熱くなれよ!!

953 :765:2010/07/05(月) 14:22:54
IndyのバージョンをDelphiインストール時のものに戻してテストしてみたところ、こちらの
バージョンではログイン後の画面が表示されました。
よって、バージョンアップをしてしまうと、なんらかの原因で正常なログインができなくなる
ようです。
Proxomitronを使って、両者のPOSTおよびGETの内容を確認してみましたが、全く同じデー
タでした。

旧バージョンで新バージョンのunitを開くとRequest.Ranges.Unitsが無いというエラーがでた
ので、そのあたりのプロパティかと思い、わからないならがも色々やってみたのですが改善
することができませんでした。
ソースを追って、原因追及といきたいところですが、自分にはまだまだ無理ですので、とり
あえず旧バージョンに戻す事で対応したいと思っています。

新バージョンで実装されているRequest.CharSetを使いたくてバージョンアップしたのですが、
残念です・・・。

色々教えていただき、ありがとうございました。
また自分の書き込みでご気分を害された方、申し訳ございませんでした。

954 :デフォルトの名無しさん:2010/07/05(月) 17:05:21
そういうときはIndyのバージョンも書けよ

955 :デフォルトの名無しさん:2010/07/05(月) 17:31:55
Double, Integer, Byte, Word, ShortIntなどの2値を比較し、その結果を返すような関数を作りたいのですが、

function TCompareClass.chkValProc<TypeID>( const srcVal, dstVal : TypeID ): Boolean;
begin
if ( srcVal < dstVal) then begin
Result := False;
end else begin
Result := True;
end;
end;

イメージ的にこういう感じのメソッドを作る方法ってないもんでしょうか。
↑だと、型が限定されないからか、コンパイルが通りません。

function TCompareClass.chkValProc<TypeID>( const srcVal, dstVal : Double ): Boolean;
function TCompareClass.chkValProc<TypeID>( const srcVal, dstVal : ): Boolean;
function TCompareClass.chkValProc<TypeID>( const srcVal, dstVal : TypeID ): Boolean;


956 :デフォルトの名無しさん:2010/07/05(月) 17:33:11
失礼しました。後半あやまって送信してしまいました

function TCompareClass.chkValProc( const srcVal, dstVal : Double): Boolean;
function TCompareClass.chkValProc( const srcVal, dstVal : Integer ): Boolean;
function TCompareClass.chkValProc( const srcVal, dstVal : Byte ): Boolean;
function TCompareClass.chkValProc( const srcVal, dstVal : Word ): Boolean;
function TCompareClass.chkValProc( const srcVal, dstVal : ShortInt ): Boolean;

こういう風に全部用意してやれば一応目的は達成できるのですが、1つにまとめたく思います。

957 :デフォルトの名無しさん:2010/07/05(月) 17:56:55
>>954
自分の無能さをライブラリのせいにして逃げる口実なんだからわざと書いてないんだよ
言わせんな恥ずかしい

958 :デフォルトの名無しさん:2010/07/05(月) 18:02:31
>>955-956
TComparer<T>.Defaultの実装が参考になるというかそのまま使えると思う

959 :デフォルトの名無しさん:2010/07/05(月) 18:14:50
>>954,>>957
バージョンについては>>818に書いたのですが、最初の書き込み時に書くべきでしたね。
申し訳ございません。

960 :デフォルトの名無しさん:2010/07/05(月) 19:09:23
「最新」なんてバージョンはない

961 :デフォルトの名無しさん:2010/07/05(月) 20:55:58
最初から最後までここまでぐだぐだになれるのもある意味才能だろうな・・・

962 :デフォルトの名無しさん:2010/07/05(月) 23:49:35
ume

963 :765:2010/07/06(火) 11:10:56
>>960
同じようにアップデートしてしまって以前と同じような動きができなくなった方の為に、参考ま
でに書いておきますね。
バージョンは10.5.7で(2009に同梱のものは10.2.5)昨日の時点ではr4270のものを使用しまし
た(changelog.txtでの確認)。
最初に試したものはr4258です。

>>961
PCやプログラムについての知識がなさすぎて、皆様を不快な気持ちをさせてしまいました。
申し訳ございません。

964 :デフォルトの名無しさん:2010/07/06(火) 13:14:00
いいよ^^

965 :デフォルトの名無しさん:2010/07/09(金) 18:38:37
匿名関数使ったサンプル集みたいなサイトや本って無い?

966 :デフォルトの名無しさん:2010/07/09(金) 21:25:28
WebBrowserをフォームに貼ってサイトを表示させてるとkeypreviewをtrueにしてもonkeydownでキーを拾ってくれないんですがどうすればよいのでしょうか?

967 :デフォルトの名無しさん:2010/07/12(月) 17:50:49
ローソク足のチャートが書ける日本語のコンポーネントってありませんか?
有料でも良いです。

968 :デフォルトの名無しさん:2010/07/12(月) 17:54:02
条件をひとつ削ってもいいなら腐るほどあると思うけど

969 :デフォルトの名無しさん:2010/07/12(月) 17:54:17
http://page13.auctions.yahoo.co.jp/jp/auction/r66957338


970 :デフォルトの名無しさん:2010/07/12(月) 17:58:25
>>967
ありますよ

971 :デフォルトの名無しさん:2010/07/12(月) 19:57:43
>965
omnithreadlibrary - Project Hosting on Google Code
ttp://code.google.com/p/omnithreadlibrary/
のデモの30番とか。

972 :デフォルトの名無しさん:2010/07/15(木) 11:51:15
どちらもinteger型の配列、hairetu1[0..5] と hairetu2[0..3] を
繋げ合わす事って出来ますか?
hairetu1[10]とした時に、hairetu2[3]のデータを取り出したいのですが・・・。


973 :デフォルトの名無しさん:2010/07/15(木) 14:07:02
はい

974 :デフォルトの名無しさん:2010/07/15(木) 17:41:33
いいえ

975 :デフォルトの名無しさん:2010/07/15(木) 23:54:45
キャンセル

976 :デフォルトの名無しさん:2010/07/16(金) 00:10:28
エラー報告を送信する

977 :デフォルトの名無しさん:2010/07/16(金) 00:15:03
(Y) はい
(N) いいえ
(C) キャンセル
(S) エラー報告を送信する
(X) 閉じる

978 :デフォルトの名無しさん:2010/07/16(金) 01:21:19
「はい」と「いいえ」がある時にEsc押しても「いいえ」にならないのは納得いかない

>972
それ10じゃなくて9じゃね? 無理矢理くっつけてみたけど
素直に動的配列でも使っとけ

procedure test;
var a: record case Integer of
 0: (hairetu1: array[0..5] of Integer; hairetsu2: array[0..3] of Integer);
 1: (gattai: array[0..9] of Integer);
 end;
begin
 a.hairetsu2[3] := 10;
 ShowMessage(IntToStr(a.gattai[9])); // ←hairetsu2[3]の値が表示される
end;

979 :デフォルトの名無しさん:2010/07/17(土) 13:37:27
hairetu1[0..5]と定義したものをhairetu1[0..10]へ後から拡大できたっけ

どうせ配列の個数を変化させるなら hairetu1: Array of Integer; とだけ定義して
その都度SetLengthすりゃいいんじゃないの

980 :デフォルトの名無しさん:2010/07/17(土) 13:50:33
hairetu1のポインタを求めて、Integerの個数分後ろへズラせばいい気もする

981 :デフォルトの名無しさん:2010/07/17(土) 14:16:48
そもそも最初の要求がろくでもないんだからそんなに真面目に考えなくても…

982 :デフォルトの名無しさん:2010/07/17(土) 14:29:29
できないんですね。わかりました・・・。
Delphiって使えないですね・・・。

983 :972:2010/07/17(土) 14:45:31
>>978
そんなやり方があるんですね。チャレンジしてみます。
ご返答ありがとうございました。

984 :デフォルトの名無しさん:2010/07/17(土) 21:09:18
Delphi7 をXp-proに入れたんだけど、終了するとDelphi32.exe が生き残って
エラーだしまくるときがあるんだけど、7.1updateとかで治るの?
なんか対策があったら教えてくだされ。

985 :デフォルトの名無しさん:2010/07/17(土) 21:49:58
まず試せよ

986 :デフォルトの名無しさん:2010/07/17(土) 23:06:39
対策はリリースノートを見ることだ。

987 :デフォルトの名無しさん:2010/07/18(日) 14:18:03
ごめん全くの初心者です、Delphi最新版(無償版)ダウンロードしたいんだけどどこにいけば落とせる?
ボーランド行ったけどmicrofocusっていうサイトに飛ばされてよく分かりません・・・・

988 :デフォルトの名無しさん:2010/07/18(日) 14:23:38
もう公開していない

989 :デフォルトの名無しさん:2010/07/18(日) 14:26:08
ミラーとかないんですか?

990 :デフォルトの名無しさん:2010/07/18(日) 15:15:12
>>988の意味が分からない外国の方ですか?

991 :デフォルトの名無しさん:2010/07/18(日) 15:22:48
kylixってまだ生きてんの?

992 :デフォルトの名無しさん:2010/07/18(日) 16:21:34
>>989
http://www.turbomirror.com/

993 :デフォルトの名無しさん:2010/07/18(日) 16:29:32
>>989
http://www.soft32.com/

994 :デフォルトの名無しさん:2010/07/18(日) 18:35:06
日経ソフトウェアの付録になってたんで、それを入手するっていう手はあるかも
たしか新宿のジュンク堂にはまだあったような希ガス

995 :デフォルトの名無しさん:2010/07/18(日) 19:39:13
穴埋め995

996 :デフォルトの名無しさん:2010/07/19(月) 07:33:15
996カカロットぉぉぉーーーーー!

997 :デフォルトの名無しさん:2010/07/19(月) 07:37:47
『DROP』

998 :デフォルトの名無しさん:2010/07/19(月) 07:39:02
『FIRE』

999 :デフォルトの名無しさん:2010/07/19(月) 07:40:13
『GEMINI』

1000 :デフォルトの名無しさん:2010/07/19(月) 07:41:44
『BURNING DIVIDE』

(0M0 )サヨゴォォォォォォォォォォォオオオオオオオオオオォォォォォーーーーーー!!!!

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

282 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)