1 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 20:41:37 ] Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を 勇気を持って書き込むスレッドです。 Delphi使いが優しくコメントを返しますが お礼はDelphiの布教と初心者の救済をお願いします。 <前スレ> くだすれDelphi(超初心者用)その50 pc12.2ch.net/test/read.cgi/tech/1246340765/ <過去スレ> DelWiki避難所(Delphi 関連の過去スレッド) 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
492 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 01:06:58 ] >488 普通に印刷するときは通常の(デフォルトの)TPrinterのインスタンスを、ファイルに出力するときは それ用のTPrinterからの派生クラスのインスタンスを、それぞれとっかえひっかえでSetPrinterすれば いいんじゃないの? >489 普通にコンパイルするときとエラーインサイトやコードナビゲーションで使用するコンパイラは 違うものなのでそういう現象がおきる。 >491 プログラミングとかDelphiとかそういうものを理解してる?わからないならわからないって上司に 相談したほうがいいと思うが。できなければソフト屋に外注に出すとか。さもなきゃここに 晒すしかない。すくなくとも > 変数(A,B,C,D) > という行があり、 とか > C、Dの宣言を探す以外になにかよい解決は無いでしょうか? とか意味不明にもほどがある。
493 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 03:37:29 ] うるせーばか
494 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:06:13 ] >>492 上司に相談して解決するなら最初からここにくる訳が無い。 1の書き込みを鵜呑みにしてここに書いた俺が馬鹿だったって事だな。 金輪際来ませんのでご安心ください。。
495 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 16:15:22 ] よかった。もう来ないんだって。 誰だって気違いの相手はしたくないもんね。
496 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 21:12:04 ] マジレスすると、おそらく関数のパラメータ並びが変更されているのでそれを直す必要がある。 必要な情報は関数のパラメータそれぞれの型とその意味、現在指定されている(エラーになっている) パラメータそれぞれの型とその意味(内容)。だからCとDの型とその内容は必須な情報。でも Ctrl+クリックで探せないか?
497 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:06:08 ] >>489 明示的にTFormにキャストすれば?
498 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 03:32:37 ] それやったらジェネリクスの意味ないだろ 馬鹿か?
499 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 07:55:03 ] と、馬鹿が申しております。
500 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:17:30 ] ジェネリクスとTObjectListの区別がつかない
501 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:17:23 ] >>499 それ本気で言ってるとしたら頭疑うわ ジェネリクスって何だか分かってる?
502 名前:489 mailto:sage [2010/03/28(日) 22:37:31 ] >>497 はじめはTListやTObjectListに入れてキャストしたのをpropertyにしてたんですけど、 ダウンキャストをしたくないのと、getter setterを一々書くのが面倒なんでジェネリクスを使ってるんですよ。 とりあえず割り切ってエラーは見ないように割り切る他ないんでしょうかね。
503 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 22:39:27 ] いろいろ書き直してたら日本語おかしいまま書きこんでしまった・・・ 最後の行は脳内修正して読んでください・・・
504 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 23:11:19 ] まぁエラーインサイトとかは他でも誤動作するし、気にしすぎないほうがいいと思う。
505 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 02:38:37 ] エラーインサイトは実装当時から切ってるな 役に立った試しがない
506 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:54:11 ] お世話になります。 TMemoで行や桁があふれたときだけスクロールバーを出すにはどうしたら良いのでしょうか。 ScrollBarsをBothに設定すると常に出っぱなしで見苦しいのです。 他のコントロールだと自動で出したり引っ込めたりするのに、なぜ?
507 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:02:16 ] んー自分でOnChangeイベントあたりで制御するしかないんじゃないかなぁ。何でそうなっているかって? WindowsのEDITコントロールがそう作られているからだな。
508 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:57:00 ] >>506 SynEditなんてどう?などと適当なことを言ってみる。
509 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 01:27:19 ] >>507 そうなんですか…。 Delphiの構文さえ理解してないレベルの自分には難しそうです。 >>508 SynEdit調べましたが、ちょっと用途が違うような。 ただシンプルにテキストが入出力できれば良いので。 ふと思い立って、TRichEditならどうかと。 これはMemoと違い、あふれたときだけスクロールバーが出るじゃありませんか! これでヨシ!と思ったんですが、今度はポップアップメニューが出ません orz
510 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 02:43:38 ] PopupMenuを設定すれば?
511 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 09:01:56 ] >>510 やってみます。スクロールバーを出すよりは難しくなさそうなので。
512 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 10:58:29 ] 最小化した時も処理を続けていて、その時のデータに応じて タスクバーに表示される文字を変更したいんだけど どうしたらいいですか?
514 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 11:11:06 ] フォームのCaptionかApplication.Titleを変更する。
515 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 13:31:53 ] >>512 そんな10年も前の終わったバージョンに対して文句言うとか頭おかしいんじゃないでしょうか
516 名前:デフォルトの名無しさん [2010/03/31(水) 18:19:57 ] デザイン時にTPageControlを右クリックすると 「ページ新規作成」や「ページの削除」といった メニューが表示され、追加・削除が出来ますが これはどのように実現したらよいのでしょうか? 「子・孫を持つパネル」のような自作コンポーネントを 作成していて、その子・孫パネルを追加するのに、 メニューでやりたいなと思った次第です。
517 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 19:32:09 ] 目で見たものを真似できない人は何も作れないと思う
518 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 21:33:33 ] つまり>>517 は自分は何も作れないと宣言したかったんですね、わかります わかりますがそういうのはチラシの裏にでも書いて下さい
519 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 02:43:49 ] >>518 わざわざ自己紹介ご苦労さん
520 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 03:42:49 ] 顔真っ赤だよ?どうしたの?
521 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 06:50:33 ] と、顔を真っ赤にして申しております。
522 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 09:14:51 ] >>520 つ 鏡
523 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [2010/04/01(木) 13:33:09 ] >>521-522 >>518 に向けて書いたんだけど、ひょっとして思い当たる節でもあったの?
525 名前:デフォルトの名無しさん [2010/04/01(木) 13:36:00 ] 結局>516が分からない馬鹿しかいないんですね レベル低いですねもう来ません
526 名前:デフォルトの名無しさん mailto:sage [2010/04/01(木) 17:07:10 ] 逆ギレ乙です
527 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 01:27:09 ] なんつーか、回答する気も起こらないつまらん質問ってあるよね。 PopupMenu の使い方を知らんのか、動的にコンポつくる方法が知らんのか こっちが勝手に想像するのも面倒くさいような質問とか。
528 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 04:22:45 ] 527 はこのスレの意義を理解できないのか? >Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 >もしくは質問者自身何が何だか分からない質問を >勇気を持って書き込むスレッドです。 回答する気にならないのなら、黙っていなさい。無理にコメントを書くことは無い。
529 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 07:08:59 ] >516が知りたいのはToolsAPI(OTA)の話だと思う。ListViewとかTreeViewのように デザイナ上でそのコンポーネントのカスタム項目を使えるようにしたい、とか。Inside Delphi あたりに載ってたような。
530 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 08:01:18 ] >>528 拍手ーー
531 名前:516 [2010/04/02(金) 09:01:08 ] >>529 仰るとおりです。デザイン時の話です。 ToolsAPIというのは初めて聞きました。ググって見た感じでは まさにそれっぽいのですが、ちょっと私には敷居が高そうだなあ…。 とりあえず子パネルのSetParentと親パネルのValidateInsertを overrideして他のコンポーネントを(に)置けないようにして デザイナ上で貼り付けさせるとかしてお茶を濁すことにします。
532 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 10:35:21 ] Source\ToolsAPIとSource\Win32\Property Editorsを参考に(場所はDelphiの バージョンで違ってくるかも)。
533 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 13:02:05 ] もう少しちゃんと説明して下さい
534 名前:516 [2010/04/02(金) 13:33:33 ] IDが出ないのをいいことに質問者のフリをして煽る人がいるみたいですね。 まあ句読点とかの文体が違うので、皆さんも分かってるとは思いますけど…。
535 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 14:41:00 ] 13:33:33
536 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 15:15:12 ] >>534 そんなのどうでもいいし 帰れ
537 名前:523 mailto:sage [2010/04/02(金) 23:12:57 ] また、Listviewで質問なんだけどmousedownとかうpを 受け付けてもらえないんだけど、なんか設定とかある?
538 名前:デフォルトの名無しさん [2010/04/04(日) 20:53:06 ] エクセルオートシェイプの矢印をTImageやTFormに描き、 bmpで保存したいのですが、それは加納ですか? というか、滑らかで綺麗な矢印がTImageに描ければ いいだけなんですけど・・・ 誰かソース書いてもらえません?
539 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 21:04:59 ] 化膿です
540 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 22:53:11 ] 適当なグラフィックツールで2倍とか4倍に描いたものを縮小してBMP形式で保存して 取り込めばいいんじゃね?
541 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 11:56:00 ] オートシェイプをPrtScnキーで取り込んでMSペイントで保存してTImageでStretchする。
542 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 23:29:32 ] フォームの上にパネルを1個置き、パネルのボーダースタイルをbsSingleにします。 そのパネルの上にボタンを置きます。ボタンのアンカープロパティを[akRight,akBottom]に設定します。 で、フォームの右クリックメニューから「エディタで表示」して、「フォームを表示」で元に戻します。 これを繰り返すとボタンの位置がどんどんずれていきます。マジで堪りません。 プロジェクトを開くたびにどんどんおかしくなっていきます。
543 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 23:35:15 ] パネル以外のコンテナでもページコントロールのBorderWidthを設定したり、 スクロールボックスでも発生します。アンカーはデフォルト以外に設定すると 位置がずれていたり、サイズが変わったりします。 ポトペタが売りの製品で基本の部分でバグるなんてあまりにもひどすぎます。 クソツールのようです。
544 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 01:53:38 ] そういうのはオッチャスレでやってください ここは質問スレです
545 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 02:00:21 ] 一応手持ちの歴代Delphi(6〜2010)で試してみたけど発生しないなw 捏造もオッチャスレの受け持ちなんでやっぱりあっちでどうぞ バージョン書いてない時点で結構怪しかったけど もしくはパッチあててないだけという情けない落ち?
546 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 09:52:03 ] >>545 まじで言ってます?2010でも2005でも発生しますよ。それ以前は試してません。 「エディタで表示」ってのはフォームのDFMをテキスト形式でみるメニューのことです。 で、「フォームを表示」で元に戻すと、1回やるたびに4ピクセル分ずれます。 4ピクセルってボーダーの幅(GetSystemMetrics(SM_CXBOARDER)で、その分、クライアント領域が 小さくなるのにAnchorsなどの配置処理で考慮に入れてないんじゃ?と思ってます。 ソース追っかけ中。
547 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 10:01:07 ] 環境によって変わるのでわ? 自分もPanelの中に貼り付けたコンポをalclientにしているのに高さが追随してくれない現象を体験しているので。 この現象が出るのはXPでW2Kは問題なしだが、自分以外のXPマシンでどうだかは知らない。 (Del7pro/W2Kでコンパイル/パッチは全部当ててるはず)
548 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 10:07:20 ] 自分の試した環境ではWinXPモードとWin7とWin2000で発生します。 ここではボタンを配置しましたが、Anchorsプロパティをデフォルトの[akLeft,akTop]以外に 設定したコントロールすべての位置、サイズがどんどんずれていきます。 コンテナの方はパネル、スクロールボックス、ページコントールのタブシートなどです。
549 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 13:17:22 ] 2k+D7Pro発生せず。 他のコンポでも試したがなんもおこらんよ。 手順は>>542 の通りやった。
550 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 13:42:02 ] XP+2010で発生せずだなー。 Turboもあるけど試してない
551 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 14:47:13 ] よほど特殊な環境なんだろうな なのに環境情報は後出し、しかも小出し 解決する気のないただのアホにしか見えない
552 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 16:41:28 ] www1.axfc.net/uploader/Sc/ のコメントDelのSc_100990.zipでアップロードしておきました。5秒で再現できるんですが。 上記の操作を繰り返すとボタンの位置がずれていきます。
553 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 18:38:24 ] 2k+D6Per発生せず。 手順は>>542 の通りやった。
554 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 19:23:08 ] xp(sp3)+d7ent(sp1)だけど発生しなかった。 HDDを交換でXPをクリーンインストールしたいんだけど D7のライブラリパスとかを一発で元に戻す事ってできる?
555 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 20:24:04 ] >>553 んー。発生しませんか。お手数おかけました。ありがとうございます。 しばらくもうちょっと調べてみます。
556 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 22:17:01 ] >554 該当レジストリを持っていくっていう手もあると思うが>設定の引っ越し。
557 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 22:55:14 ] xp sp3+turbo delphiで発生しますた
558 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 10:51:28 ] 発生してた奴はOSとDのバージョンだけじゃなくて ウィンドウ周りに関する環境設定情報を全部書き出せ
559 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 10:55:20 ] そんな書き方じゃまともな情報は上がってこないぞ
560 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 17:14:14 ] 今のところ再現画像、再現動画等なし
561 名前:デフォルトの名無しさん mailto:sage [2010/04/08(木) 19:32:37 ] オレのところでも発生したわ。 557と同じXPSP3+Turboだけど。 bsSingleとかで検索したら、似て非なる事例が何個か出てくる。
562 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 11:22:49 ] 自演、乙。 オッチャ盛況だよ。
563 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 16:00:49 ] 何個かしかないなら挙げればいいのに、しないのは何故なんだろうね
564 名前:561 mailto:sage [2010/04/09(金) 16:55:56 ] Win98+Del6Per(XPSP3上のVirtual PC 2007)では発生しなかったわ。 アンカーの両側がオンだと、繰り返すたびにボタンが縮んでいくのが笑える。 まあ確かに、くだすれの話題ではないか。
565 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 13:25:46 ] Del7のVCLに直接手を入れて使ってる人いる? VCLってリコンパイルできるのかな。
566 名前:191 mailto:sage [2010/04/11(日) 14:21:39 ] 超初心者スレなのにみんなレベル高すぎでついていけませんT_T
567 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 14:39:48 ] 途中で書き込んじゃった。 最近のバージョンって書籍でリファレンスって出てないんでしょうか。 自分としては首っ引きでページ捲り捲り勉強する方がしっくり来るのですが… 昔はパッケージにちゃんと含まれてたんですよね?
568 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 15:30:19 ] >>565 できる >>566-567 印刷
569 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 20:14:09 ] コミュニケーションのとれないおっさんだなw
570 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 00:41:45 ] おっさんきもい
571 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 13:10:21 ] おっさんかっこいい
572 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 14:25:42 ] あっちゃんかっこいい
573 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 11:51:03 ] >>569 △
574 名前:554 mailto:sage [2010/04/13(火) 22:35:55 ] ライブラリパスって普通にテキストでコピーしとけば良かったのね。
575 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 13:29:46 ] Cだと通るよね
578 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 12:32:54 ] 教えてください。D6パーソナル使用です。 EXE自身のアイコンをTImageに表示しています。 アイコンの透過色が透明になってくれるのは良いのですが、白色まで透明になってしまいます。 何がいけないのでしょうか。それとも全部間違っているのでしょうか。 プロジェクトのオプションに設定しているicoファイルはこんな感じです。 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 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 13:46:07 ] transparent
581 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 00:36:03 ] ListBox.Items.Selectedが画面外の時、 その項目が表示されるようにスクロールするやり方教えてください
583 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 04:35:59 ] はい
584 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 06:47:12 ] >>582 TopIndex
585 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 06:51:43 ] >>581 Image1.Picture.Assign(Application.Icon); これだけでいいと思う。(D6パーは持ってない
586 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 16:59:50 ] >>582 MakeVisible
587 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 23:10:54 ] キャプチャーを作ってみたんだけど、ウィンドハンドルからデバイスコンテキストを 取得して指定の画面のキャプチャーを取ってるつもりなんだけど、わざと取りたい画面の上に 別のウィンド置いとくとその別のウィンドもキャプチャーされるんだけどそんなもの?
588 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 00:14:15 ] XP以降なら個別にとれる 詳細はググれ
589 名前:587 mailto:sage [2010/04/19(月) 02:37:57 ] ググったらで来た。 ありがとう
590 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 07:57:21 ] >>589 興味有るから、やり方教えて
591 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 09:51:25 ] printwindowを使うんだって。 使い方はググった方が早い。 簡単だよ。
592 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 14:00:11 ] >>585 D6パーソナルでもOkでした。正解はスッキリ簡単でしたね。 リソースからアイコン削除してApplication.Iconが無い状態(有り得ないけど)にしても 表示されないだけでエラー無し。 教えてもらってから理解したけど、IDEでImage1.Pictureに画像をセットするのとほぼ同じ動作ということですね。 ありがとうございました。
593 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 17:55:06 ] >>591 ありがとう! がんばってみる
594 名前:デフォルトの名無しさん mailto:sage [2010/04/20(火) 23:58:23 ] IDEのエディタマクロ書きたいんだけどそういう情報ってどこにあるの?
595 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 17:46:07 ] RichEditにDephiのソースコードを着色した状態で表示する サンプルなりコンポなりがあったら教えてください。
596 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 19:50:22 ] TParser使え
597 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:01:57 ] SelAttribute(ただし遅い)
599 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:34:48 ] >>598 ありがとうございます。 SelAttributesはヘルプによると、 >テキストを新規に挿入するときには,SelAttributes のフォント属性が適用されます。 とのことなので良さそうなのですが、改行無しで文字列を追加したい場合はどのように すれば良いのでしょうか?
600 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 23:36:49 ] seltext
601 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 00:06:58 ] >>600 うーん分からないです。 SelTextプロパティを使ったサンプルをいただけないでしょうか。
602 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 00:10:21 ] つ ttp://www.google.co.jp/search?hl=ja&q=delphi+seltext+SelAttributes
603 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 00:50:57 ] ああっ、分かりました! SelStart := GetTextLen; SelText := 'ABC'; ですね! 「Delphi SelText SelAttributes」でググると一番最初に出てくる 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 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 08:53:22 ] グループボックスのCaptionがCheckBoxになっているコンポーネントってないでしょうか?
605 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 09:06:16 ] グループボックスのキャプションをなしにして、キャプションの位置にチェックボックスを置けば?
606 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 16:29:52 ] >>604 ググって一発で出てきたんだけど ttp://www.delphidabbler.com/tips/112
607 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 20:18:13 ] ?
608 名前:604 mailto:sage [2010/04/27(火) 23:56:33 ] >>605 ,606 トンです。 でけました。
609 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 08:17:35 ] del標準の関数でbitmapをjpegに変換すると、低圧縮でも汚いのできれいに変換できるコンポとかってないですか?
610 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 08:23:04 ] ないです
611 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 13:29:03 ] >>609 JPEGが何なのか調べてくるといいですよ^^
612 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 15:08:57 ] 正しいことが何なのか、この胸にわかるまで〜
613 名前:609 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 03:06:22 ] なんで数字まで変わっちゃうんでしょうか
616 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [2010/05/04(火) 08:24:11 ] >>615 レスありがとうございます。 数字は素で間違えました;
618 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [2010/05/04(火) 15:27:34 ] >>618 こういった書き方は、初めて知りました。 とても勉強になりました。ありがとうございます。
620 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 09:59:28 ] >>618 そこまでこだわるならHigh(Integer)じゃなくて(High(Integer)+1)じゃね? もしくはせっかく定数が用意されてるんだからMaxInt+1でもいいかと
621 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:11:06 ] ranges: array [0..255] of Single; とどう違うかさっぱりワカンネ
622 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 23:27:13 ] 何で1足すんだよ
623 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 01:25:46 ] >>621 どう違うかどころか全然違うよw 実際に計算してみたら? >>622 High(Integer) div SizeOf(Float)じゃなくてHigh(Integer) / SizeOf(Float)を計算すれば分かる
624 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 01:55:41 ] 相変わらずどうでもいい頑張り方だな
625 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 04:02:03 ] そのどうでもいいレスよりマシじゃない?
626 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 11:37:45 ] BDE からの接続形態は? ODBC ? SQL-Link ?
628 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 12:08:57 ] >>627 ODBCです
629 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 01:55:29 ] なんで乱数を使わないのかと小一時間
632 名前:629 mailto:sage [2010/05/10(月) 04:10:41 ] >>631 期待している動作としては a, b, c, d ... z, aa, ab, ac .. az, ba, bb みたいな感じで指定した桁数の文字列を生成したいです。
633 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [2010/05/10(月) 05:58:41 ] >>633 いえ、ブルートフォースもどきなプログラムを作ろうと思ってまずは文字列生成部分を作ってみようとしました。 参考URLはdobon.net/vb/bbs/log3-38/23321.html です。 同じように26進数のことをいわれていたのですけど、 結局わからなかったです。 まさか32bitに収まらないとは・・・ なんとなく10桁って書いたので6桁でも8桁でもいいのですが・・・
635 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 15:34:26 ] 別にCなんか使わなくてもインラインアセンブラで十分じゃん
638 名前:629 mailto:sage [2010/05/10(月) 16:20:22 ] www.ss.u-tokai.ac.jp/~ooya/Program/Console/NShinhou1.txt ここを参考にしたらなんとかいけそうでした。 ご協力ありがとうございました。
639 名前:デフォルトの名無しさん [2010/05/11(火) 14:28:43 ] Delphi7だけどバグの修正これでいいかな Quality Centralの33496 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 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 01:08:13 ] //if Text = cLineCaption then if IsLine then でしょ
641 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 10:44:10 ] フォームのAlphaBlendを使った時に特定のコンポだけは透明化されないようには出来ないでしょうか?
642 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 12:15:46 ] AlphaBlendなフォームの上に Transparentなフォームをぴったり重ねればできそうだけど アホっぽいなw
643 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:11:55 ] なんでAnsiStringなんかに入れるの・・・ Byte配列でええやん
645 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:34:12 ] 警告ごまかしたいなら w := WideString(PWideChar(Pointer(s))); w := WideString(PWideChar(@s[1])); で行けるんじゃね。 Stringをバイナリコンテナとして使う場合 別に文字コードなんて関知しないから問題ないはず。
646 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 19:05:45 ] >>646 あんたなかなかセンスいいw
648 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 20:50:44 ] >>642 それやったことあるw よっぽど重いアプリでも作らない限り無難に理想の動作はしてくれるよ。 リサイズさせない移動させないサブフォームでなら普通に使える。
649 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 21:59:47 ] Del7を使っています。 WinSight32である特定のウィンドハンドルを見たら、そのウィンドウを隠した(スライドさせる)時に hidden となるのですが、この hidden になっているかどうかはどうすれば分かるでしょうか?
650 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 22:57:03 ] IsWindowVisibleとか
651 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 23:58:52 ] >>646 使ってるDelphiのバージョンが分からないけど、そのバージョンを一生使い続けるならそれも可 でも乗り換えることがあるなら、string型はすでに仕様が2回ほど変わった過去があるので そのキャストが今後も使えるとは限らないし、配列を使った方が確実にいいと思う だからそのコードは偶然動いた程度に考えた方がいいかと あと利点云々は変換した後何するかによるし、もう少し情報出してくれないと・・・
652 名前:649 mailto:sage [2010/05/13(木) 00:17:33 ] ありがとうございました。 状態の取得が出来ました。 新たな質問なのですが、 他のソフトのテキスト描画色を取得したくて、ググったらGetTextColorというのにたどり着きました。 var CL: TColor; begin CL:=GetTextColor(DC); と、やってもCLには「0」が入ります。 DCの取得は出来ています。 TColorをTColorRefとしてもダメでした。 どなたかよろしくお願いします。
653 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 01:01:48 ] 0は黒だが
654 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 06:47:59 ] >>653 レスありがとうございます。 その描画色はなん色か時間によって変わっていって黒は使われていないんです。 描画されている文字列を取得すると正しく取得できるし、WinSightで見てもハンドルは 間違ってはいないので、デバイスコンテキストも間違ってはいないと思うのですが。
656 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 07:35:18 ] >>654 >特に後者は、確実に refCnt いじってメモリーリークしているので危険。 w: WideString; s: String; w := '幹事'; s := AnsiString(Pointer(w)); がリークするの? FastMM4は沈黙してるけど。
657 名前:654 mailto:sage [2010/05/13(木) 12:26:30 ] Windows では、WideString は、OLE 文字列や BSTR 互換なので、 AnsiSting とは、メモリ管理方法が異なる。 WideString は、SysAllocStringLen などで 領域確保しているので FastMM4 の管理外。 WideString のオフセット -4 には、長さに相当するバイト数が 格納されていて、それ以外はしらん。 しかし、AnsiString を代入するときは参照カウントが格納されている オフセット -8 の refCnt フィールドを調べたり、いじったりする。
658 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 12:39:38 ] WideString (BSTR) は参照カウンタ管理されていないので、ストリングのコピーが複製になるため「遅い」 という問題を回避するために導入されたのが参照カウンタ付き UnicodeString なわけなので WideString 側には refCnt なんてフィールドはありませんよ。 UnicodeString と混ざってしまっているかな?
659 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 13:47:46 ] なんか疑問だな バイナリを入れるなら byte の配列を用意したほうが自然 Bytes: array of byte; で、WStr := WideString(Pointer(Bytes)); でどうなのか
660 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 14:14:50 ] WStr := WideString(Pointer(Bytes)) だと、Bytes配列はヌル終端してる必要ある?
661 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 14:22:08 ] >>659 バイト配列の話なんて誰もしてないから
662 名前:646 mailto:sage [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 mailto:sage [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 mailto:sage [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 mailto:sage [2010/05/13(木) 16:52:06 ] ついで。 Dynamic Array -> Pointer => 型キャスト Pointer -> Dynamic Array => 型キャスト
666 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 21:33:15 ] >「これらのキャストはすべて危険、未来も無いからやめとけ」 んなこたない。 生ポインタをC文字列とみなしてDelphiの文字列に変換する機能は Win32APIを叩く際の根幹的な機能だからそんな簡単に仕様変更なんてあるわけがない。 いくらなんでも脅かされすぎ。
667 名前:646 mailto:sage [2010/05/14(金) 02:20:53 ] あれ、今までのレスをよく見直すと、 WStr:=WideString(Pointer(Bytes)) は危険な可能性有りだけど、 WStr:=WideString(PWideChar(Pointer(Bytes))) は問題無いと言う見解ですかね? >>666 仕様変更は無いだろうというご意見も覚えておきます どちらにせよ、もうキャストはしないと決めました 「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、 使うべきではないと思いました
668 名前:646 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 03:12:16 ] >>666 今までに変更があったという事実は無視なの?
670 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 04:43:03 ] コーディングスタイルは人それぞれだね 1行だけのforならbeginもendも不要なのに
671 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 04:46:14 ] エンバグの元なのに?
672 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 06:40:31 ] 既に決着済みではあるけど一言だけ。 >>667 >「キャスト」なる仕組みは完全に明らかである、という状況ではない以上、 明らかに間違った使い方は示されたけど Delphiの仕様の抜け道を使ったような未定義のやり方はないよ。 少なくともそんな指摘はまったく出ていないように思うが。 曖昧論やらべき論は出てきたが。
673 名前:652 mailto:sage [2010/05/14(金) 08:14:15 ] GetTextColorについて質問をしたものです。 あれから色々試していたのですが、例えば赤で描かれたテキストがあって、 その色を取得しようと、GetDCPenColor、GetDCBrushColor、GetBKColorとか やってみたのですが、赤の値が取れませんでした。 何か他にやり方ってあるのでしょうか。 それとも、アキラメロンなのでしょうか。
674 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 10:29:38 ] >>673 座標を取ってGetPixelしてみるとかはどう?
675 名前:デフォルトの名無しさん [2010/05/14(金) 21:57:57 ] 描かれてしまったものは単なる絵だから。 描いたときのペンやブラシやテキストカラーの設定が現在も残ってると期待するのは無理
676 名前:652 mailto:sage [2010/05/14(金) 23:43:02 ] >>674 ありがとうございました。 GetPixelで何とか出来ました。 >>675 そういうことなんですね。 納得しました。 ありがとうございました。
677 名前:デフォルトの名無しさん mailto:sage [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 kaidoku.ocn.ne.jp/shopping/nv/member/item/detail/_/item_id/1090901509/ コンポーネントを一緒に買う気があるなら www.componentsource.co.jp/products/delphi-2010-j/prices.html
680 名前:デフォルトの名無しさん [2010/05/15(土) 16:13:24 ] あ、直販の方が安いのか www.embarcadero.com/jp/radoffer
681 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:30:32 ] カード占いをするソフトを作りたいと思っています。 (1)カードの使用枚数と配置を決める (2)カードを配置して裏返し、表示させる。 (1)でカードの位置を、マウスでクリックした位置に決めて カードの裏向きの画像ファイルを表示させたい のですが、どうすればいいでしょうか。
685 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 23:04:57 ] ActiveXのWindowsMediaPlayerコンポーネントで、 動画再生時にビデオの明るさを変更する方法はありますか? WindowsMediaPlayerの「拡張設定」の「ビデオ設定」にある「明るさ」を変更できる方法があればいいのですが。
686 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 00:51:54 ] >>684 その通りにやればいいだけじゃ? どこで詰まったのかもっと具体的に言わないと答えようがないだろ 一から手取り足取り教えてもらいたいなら金払ってサポートしてもらえ
687 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:06:14 ] マルチスレッドのデバッグってどうすればいいでしょうか? 1つのスレッドを動的に複数Createして同時に実行した時に、ブレークポイントで止めていると Delphiが固まってしまいます。 Del7です。 よろしくお願いします。
689 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 15:55:47 ] >ブレークポイントで止めていると Delphiが固まってしまいます。 D7 が現役の頃にはそんな経験無いですけどね。 >Del7です OS は? CPU は? Vista/Win7 だとあきらめるしかないかも。
690 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 16:35:03 ] 起動中のアプリケーションでコマンドラインを受け取るにはどうすればいいのでしょうか? a.exe -hoge -piyo が何度か呼び出される感じ(引数は変わる)なのですが・・・ 多重起動は禁止にしてます。
691 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [2010/05/19(水) 17:05:30 ] >>689 レスありがとうございます。 説明不足でした。 ブレークポイントで止まってるだけなら何ともないのですが、ステップ実行を何行かすると フリーズしてPCのリセットボタンを押さないといけなくなります。 マルチスレッドが1つだけの時は、正常です。 ヘルプを見るとマルチスレッドのデバッグの項目はあるのですが、イマイチよく分からないです。
693 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 17:14:22 ] >>292 XP+Turbo(2005)のわたしも同じ状況に見舞われてます。 以前わたしも、ここか雑談スレで相談しましたが、解決方法はわかりませんでした。 一応、めちゃくちゃ反応は鈍いですが、操作は可能です(時間的には、リセットで再起動の方が早いと思いますが)。 こちらでは、頻度は低いですが、マルチスレッドというか、シングルスレッドでも起こりますので、 スレッドをデバッグした時になるのだと思います(といっても、メインスレッドは別だから、結局はマルチスレッドなのだろうけど)。 おそらくデバッガーの問題かと。こちらでは、なるべくブレークポイントは使用しないという消極的な回避策で対処してます。
694 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 17:28:09 ] >>691 ですです。 だいたいおんなじことを考えていたのですが、 > 起動中のインスタンスにコマンドラインを渡す( paramstr(1), paramstr(2)...) ここがわかりませんでした。 後出しですみません。 作ってるアプリはGUIアプリです。
695 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 17:32:15 ] >>694 あと、コマンドラインを渡したあと、どうやって受け取るのかもわからなかったです。。。
696 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 18:54:34 ] >>687 やっぱりああやって書くとレス付きやすいですねw あざーすww
697 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 18:57:28 ] >>694 SendMessageが使えるって書いてあるじゃん よく読めよ
698 名前:684 mailto:sage [2010/05/19(水) 21:08:27 ] >>686 ,687 ありがとうございます。 やってみます。
699 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 22:25:41 ] >>696 はいかにもゆとり
700 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 00:51:52 ] マルチスレッドのデバッグっていくつか前に書いてなかったか。 俺も参考にさせてもらった。 今は忘れた。w
701 名前:これかな? mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 05:00:38 ] >あと、コマンドラインを渡したあと、どうやって受け取るのかもわからなかったです。。。 Google で以下のキーワードで検索。 sendmessage プロセス間通信 Delphi Delphi では無いが yokohama.cool.ne.jp/chokuto/advanced/copydata.html はよくまとまっていてよろしい。 それと、目的は複数のプロセスが同じデータを参照すること。と見なせば、 共通のファイルやレジストリにコマンドラインを記録し、 通常起動しているプロセス側がポーリング(定期的に見に行く)する。 という手法も使えます。
703 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 11:03:39 ] 素直に begin end でくくれ。
707 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 11:11:39 ] >>705 余計な話ですが、最後のelse、意味通りのインデントになってる?
708 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 11:27:41 ] 皆さん、ありがとうございます。 基本的には begin〜end は保守性の面から入れるのですが 今回の質問のような単純で短い構文で、狙った動きにならないので びっくりしたのと納得できなかったので質問しました。 >直近のifに対応する こんな規則で動いていたんですね。 納得しました。 ありがとうございました。
710 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 12:29:21 ] なるほど。 ちょっとの手間でスマートですね。 まだ、この辺の手間をかけた方が後々いいのか、どうかの判断が 出来ないレベルなので参考にさせてもらいます。
712 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 17:43:30 ] >>697 ,702 ありがとうございます。 ググりつつコピペしつつ改変しながら eggrice.no.land.to/up/src/tohoh0403.txt と言うふうに書いてみたんですが、 二度目に起動したときに前のウィンドウがアクティブになるだけで メッセージの処理は行われませんでした。 winexpでメッセージ監視してみたら TMainFormじゃなくてTApplicationにメッセージが飛んでいたので これが問題かな?と思ってFindWindowでハンドル取得してみてもうまくいきませんでした。 どこか間違えているでしょうか?
713 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 12:56:44 ] >>704 これあきらかにおかしいじゃん if A=B then if C=D then E:=F; ここまで1行とコンパイラは理解するから次の else if が文法上間違い
714 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 14:33:18 ] 質問が紛らわしくてすんません。 @ABの条件分岐のつもりで、@の時にTを実行する意図なのですが 「F;」の「;」を取ると TABがグループと認識して@の入れ子と処理されてしまいます。 Tは単独のif文にする意図で「;」を付けるとコンパイルエラーになるので 「何で?」と言う意味でした。
715 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 15:00:07 ] だいじょうぶ。意図を理解している人もいるよ。
716 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 17:01:10 ] 自作アプリをプログラムから最小化してタスクバーに入れるにはどうすればいいですか。 WindwStataだとタスクバーの上に表示されてしまいます。
717 名前:716 mailto:sage [2010/05/21(金) 17:07:39 ] 出来ました。
718 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 12:26:05 ] あなたの頭がバグを起こしているだけです
720 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 12:32:28 ] デバッグしろ
721 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 14:16:18 ] max-1が正しかったという罠
722 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 18:43:28 ] マルチスレッドが存在するかしていないかって、分かる関数とかってあります? Createした時に覚えておいて、解放する時はメインの方から明示的にFreeするしかないんでしょうか?
723 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 19:01:08 ] >718 ブロック内で、変数Iを使っていないので、最適化されて減少カウンタとして利用されている予感。
724 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 19:57:31 ] >722 スレッド終了時に自分で自分を解放 >718 >723のいうとおりだと思う。コンパイルオプションで最適化を外すとデバッグしやすくなる。
725 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 12:47:56 ] 最後に判定しに行くだけだろ? Cで書けばfor(i=0;i<=max;i++)なんだからmaxの次に判定があるのは当たり前 アホか
726 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 17:11:33 ] >>722 一応IsMultiThreadってグローバル変数が存在してるけど。ソースみりゃわかるけど、 直接Win32のCreateThreadとか呼んだら駄目ぽだけど。BeginThreadかTThreadクラスだけを 使ってる場合だけオk。
727 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 17:14:10 ] ああでも、ダメポそうだな。ごめん。
728 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:04:05 ] >>722 WaitForと言うのがあるらしい。 使い方は分からない。 お知恵をお借りしたいのですが。 今、複数起動が前提のアプリを作っているのですが、 一斉に最小化や復元をしたいと思って共有メモリを 使うところまでは出来たのですが、例えば一斉に最小化の場合は メニューをクリックされたソフトで共有メモリに「1」を入れる。 他のソフトはその「1」がたったかどうかで最小化すればいいのですが、 お知恵を借りたいのは「1」をどのタイミングで「0」にすればいいかです。 全部が最小化されたかどうかを知るにはどうすればいいかって事です。 考えたのは複数起動した数を共有メモリに記録しておいて、メニューをクリック されたら「1」ではなく、起動数を入れて(例えば「10」)で最小化したら -1 していくと言うやり方です。 他にもっとスマートなやり方があれば教えて下さい。
729 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:46:32 ] HWND_BROADCAST
730 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 13:33:42 ] e?
731 名前:728 mailto:sage [2010/05/26(水) 14:07:31 ] レス、ありがとうございます。 >HWND_BROADCAST ググってみます
732 名前:728 mailto:sage [2010/05/26(水) 18:53:43 ] ググったけど、よう分からんかったです。 SendMessageやPostMessageでHWND_BROADCASTを送ると 関係ないアプリまで最小化や終了をさせてしまうことになりませんか?
733 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 19:28:16 ] RegisterWindowMessageって知ってるか?
734 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 21:42:18 ] RegisterWindowMessageの引数は文字列 RegisterWindowMessage(自分だけの文字列) ↓ SendMessage(HWND_BROADCAST, RegisterWindowMessageの戻り値, ここ, とここは自分で決めて振り分ける);
736 名前:728 mailto:sage [2010/05/27(木) 00:41:49 ] >>735 思い通りの動きが出来ました。(;゚∀゚)=3 ありがとうございました。
737 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [2010/05/29(土) 00:01:44 ] ごめんなさい自己解決しました
739 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 20:46:03 ] >>712 ですが、 結局TMainFormというインスタンス名が他のアプリケーションで使われていたようでうまくいかなかったので メッセージ受信専用ウィンドウを利用する方法を使いました。 メッセージ用ウィンドウプロシージャは 特定のメッセージがきたときだけMainFormにDispatchするようにして あとはDefWindowProcに渡すようにしたのですが、 処理としてはあっているのでしょうか? 初めはディスパッチのみでDefWindowsProcを呼び出さずにしていたら 終了時にエラーがでました。
740 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 22:19:45 ] 名前変えればいいだけじゃ・・・
741 名前:デフォルトの名無しさん mailto:sage [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- ? mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 23:49:13 ] あれ、関数名はBase32だったので、そう思って組んでみたんですが、結果が違ったので・・・ 1. そのソースコードが使われいるexe $ exec "1c68ee574965514ec9c27a57972719ea" 4NDXFOSLFKFHMTQT2K6LSOGPK 2. Base32エンコード $ echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode S0QSUB595BKSK4B0QRLEPJ43A7 >>742 整形ありがとうございます。 やってることは似てそうなんですが、定数が違ってそうなのでもう少し弄ってみます。
746 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 09:04:15 ] Base32(WXYZが使われてる)と、Base32hex(0189が使われてる)があるそうですね。 面白そうなので作ってみたら >>746 と同じ結果に。 Base32: DRUO4V2JMVIU5SOCPJLZOJYZ5I====== Base32hex: 3HKESLQ9CL8KTIE2F9BPE9OPT8====== >>745 と全然違うなあ。 しかしBase32って超マイナーですね。
748 名前:748 mailto:sage [2010/06/07(月) 20:34:22 ] > 1. そのソースコードが使われいるexe > $ exec "1c68ee574965514ec9c27a57972719ea" > 4NDXFOSLFKFHMTQT2K6LSOGPK > アナタの自作プログラム↑ソース↓ pc12.2ch.net/test/read.cgi/tech/1274617383/328 > > 2. Base32エンコード > $ echo "1c68ee574965514ec9c27a57972719ea" | java Base32encode > S0QSUB595BKSK4B0QRLEPJ43A7 こっちのソース、またはソースのURLくれ。
749 名前:748 mailto:sage [2010/06/07(月) 22:36:19 ] shr ((i * 5) mod 8)) and 31]; ↓に変更(再コンパイル可能なら、だけど) shr (11 - ((i * 5) mod 8))) and 31];
750 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [2010/06/08(火) 10:53:30 ] >>750 やっぱり。どうも変だなと思ってた。あと、ソースの頭にしっかり //5bitエンコーディング関数 Base32ではない。 って書いてあるじゃない。最初は見落としてたの? >>751 >>741 の function EncodeB32 だけでちゃんと S0QSUB595BKSK4BOQRLEPJ43A7 になるのを確認したので、これはBase32でもBase32hexでもないと思います。 >また、>>749 shr の使い方を誰かDelphiで合ってるか確認してほしい。 どう確認すればいいのか分かりませんが、そこだけ差し替えたら D0N6FIA5A575IGMQATBLF69A03 になりましたよ。 Delphi始めて数ヶ月の初心者が頭突っ込んでスマソでした
753 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 mailto:sage [2010/06/08(火) 23:02:43 ] 私も勉強がてらJavascriptに翻訳してみました。 出来る限り元ソースに忠実にしました。 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 mailto:sage [2010/06/09(水) 07:20:10 ] DelphiスレなのにJavaやらCやらJavascriptもなんなので、 ideone.comのPascal(FPC:Free Pascal)でDelphiできるか?試してみました。 ideone.com/5Q6ky 結果:プログラム本体の書き換えは一切せずに動作しました。 追加したこと 1. コンパイラモードをDelphi互換に指定 → {$MODE DELPHI} 2. Uses節を追加、StrToIntのためにsysutilsを指定 3. function MakeWordをWindows.pasからパクってきた 以上、初心者の研究コーナーでした スレ汚しまくってスマソ
757 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 13:55:35 ] >>758 mrxray.on.coocan.jp/Delphi/CompoInstall/index.htm
760 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 22:19:20 ] TOpenDialogとかにボタンを追加したいときはどうするべきなのでしょうか。
761 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 23:49:42 ] TOpenPictureDialogのコードが参考になると思う。
762 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:59:36 ] Synchronizeで実行するプロシージャーで引数が使いたい時って皆さんはどうしていますか?
763 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 15:02:32 ] 匿名メソッドでいいじゃん
764 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 16:35:12 ] >>762 そのためにわざわざフィールド変数を用意して、それ経由してる。
765 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 17:16:57 ] mixiにログインして情報をとってくるようなアプリケーションを作りたいと思っています。 そこで、TIdHTTPコンポーネントを使用してログイン部分をいま作成中なのですが、Cookieが無効 になっているため、ログインできませんと言われてしまいます。 (mixi.jp/check.pl?n=%2Fhome.pl が返ってくる) TIdHTTPコンポーネントのCookieManagerには該当のTIdCookieManagerを指定し、 AllowCookiesはtrueの状態にしています。 IdHTTP1.Postの第一引数は以下の通りです。 'mixi.jp/login.pl ' IdHTTP1.Postの第二引数にはstringlistで以下のようなデータを渡しています。 'next_url=/home.pl' 'email=メールアドレス' 'password=パスワード' TIdHTTPコンポーネントを使用して、mixiへのログインに成功した方、どのようにされたかアドバ イスいただけないですか?
766 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:38:02 ] オミトロンとかLiveHTTPHeaderなんかで ブラウザでログインしたときの状況を確認したほうが早いと思ふ
767 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 11:13:50 ] >>764 無名メソッドを使えば、わざわざフィールド変数を用意する必要はない。 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 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 11:40:09 ] ssl だったり?
770 名前:769 mailto:sage [2010/06/11(金) 11:43:19 ] >>769 あんまり関係ないか。
771 名前:765 mailto:sage [2010/06/11(金) 12:00:48 ] >>769 C#とかのサンプルみる限りはSSLじゃなくてもログインできるようなんですよね。 Indyの情報すくなすぐる・・・泣ける・・・。
772 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 13:34:24 ] Indyは自力でソース見て解決できないバカが使うものじゃないから、 おとなしくTWebBrowserを操作してログインしておけ
773 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 13:35:31 ] cookiemanagerにsessionはいってるのか?
774 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:25:06 ] IdHTTPのProxyにオミトロン通してブラウザと挙動を比較するとか。 mixi.jp/check.pl?n=home.pl は普通にログインしてても通過するみたいだから 内容がどうかだね。
775 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:45:00 ] url := '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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 23:24:48 ] TStringListのSaveToFileって同時に同じ名前のファイルで行われると共有違反とか起きますか?
780 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 04:08:26 ] 起きる起きない以前にそんなクソコード書かないで下さい
781 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 08:04:10 ] 「同時に」の意味は?本当に同時にはできないから、先にSaveToFileしたほうは 成功して、後のほうは失敗するんだけどね。
782 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 09:56:46 ] あとの方で上書きされると思ってたが違うのか?w
783 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:12:36 ] >>777 2.3.4の間違いだよね?
784 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [2010/06/12(土) 18:23:37 ] >782 ああ、先のほうの保存が終了てから後の保存が行われるならその通りだね。 「同時に」って言葉に引っぱられすぎだ。
786 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 19:31:59 ] >>784 失敗したときは違うHTMLがかえってくるよ。 check.plを経由してhome.plにいくみたい。
787 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 20:17:10 ] ミクシィに詳しくない俺でもこれは失敗だとわかる・・・(キリッ うわあ・・・これは恥ずかしい こいつに足りないのはリファラじゃなくて頭だな
788 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 21:14:20 ] >UA、リファラ、IP、クッキーのいずれか 他のヘッダで弾いてるところもいっぱいあるよ 成功したかどうかの確認は帰ってくるURLとかじゃなくてクッキー見たほうがいい
789 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 22:17:16 ] オミトロンなりWireSharkなりを使って、ブラウザで認証OKだったときの挙動をキャプチャしてみると 何か見つかると思うよ。
790 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 01:42:01 ] さすがにTimer使っといて同時はねーだろ。別スレッドとか別プロセスじゃないと。 同一スレッド上ではシーケンシャルにしか処理は動かないんだから。
792 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 02:52:43 ] >>790 ばかだねー(´・∀・`)
793 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 13:51:21 ] いやそうじゃなくって・・・ >>791 だから中身はtimer2になるはずでしょ? 間違ってたらスマンが。
794 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:15:28 ] >>793 Timer1のイベントが先に実行されるって決まってるんですか?
795 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 14:46:53 ] 無知なのは別にいいがそれをあたかも常識のように言うのはやめていただきたい
796 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 15:01:52 ] Timer2のイベントが存在していないのに、Timer2になるって脳内お花畑か。 まあそれより、ず〜っと以前の問題なんだけどな。
797 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 16:17:28 ] えっ?
798 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 20:29:08 ] イベントはTimer1とTimer2で共有ってことだろ。 >>794 決まってないと思うが、どちらのタイマイベントが先に発生するにせよ、 そのイベントハンドラの実行は同時に実行される事はない。だから、 後の方で上書きされるだけ。 タイマー使ってもマルチスレッドにはならんよ。
799 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 20:35:01 ] ↑ 明らかな間違いだぜ イベントが共通だったとしても Timer2になることは無いのだよ。 ヒント:タイマーはひとつだけ!
800 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 21:28:47 ] 1個のformには1個のTimerしか使えない。理由はWindowsの仕様だから。 ハイ、次の質問。
801 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 21:56:43 ] >>800 では次の質問。 procedure TForm1.Timer1Timer(Sender: TObject); begin Memo1.Lines.Add((Sender as TTimer).Name); end; Timer1とTimer2が交互に追加されて表示されるのですが、なぜですか?
802 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 21:59:00 ] うそはよくない。TTimerは別々にウィンドウを保持してるので独立して動作する。 ただしメッセージループが動作していないといけないし、Windowsのタイマはもともと 指定時間を経過したことを示すフラグなのでそのあたりも注意が必要だが。
803 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 00:34:30 ] >>800 ばかだねー(´・∀・`)
804 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 00:46:36 ] >>790 ファイル保存するときに排他処理やってないとかいうオチ?
805 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 01:23:22 ] >>804 お前は何を言ってるんだ?
806 名前:756 mailto:sage [2010/06/14(月) 12:02:13 ] みなさん、レスありがとうございます。 あれから色々やってみたのですが、相変わらず <meta http-equiv="refresh" content="0;url=/check.pl?n=%2Fhome.pl"> が返ってきます。 今はLive HTTP headersを火狐に入れて、正常にログインできたときの情報を確認しています が、オミトロンを使用し、ブラウザとIdHTTP両方で確認してみます。 Indy使ったことがないので、勉強がてらやってみたのですが、俺にはてごわすぎる・・・。
807 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 14:21:55 ] それが正しいんじゃないの? ほんとにブラウザの動きを確認してる?
808 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 20:59:05 ] >>806 ブラウザの動き的にはそれであってるんじゃないの? 次にそのHTMLから/check.pl?n=%2Fhome.plにアクセスして その次にhome.plに行けば成功じゃない?
809 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 04:36:11 ] >>806 (´・∀・`)
810 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 08:49:21 ] >765 漏れはこれで成功してる MixiURL = '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 mailto:sage [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('mixi.jp/home.pl ')を行ったのですが、ログイ ン前の画面しか取得する事ができませんでした・・。 (ログインされていない状態) もしよければ、最初のpost以降どのようなロジックでログイン後の画面を取得され ているかアドバイスいただけないでしょうか?
812 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 12:18:50 ] >>811 もう数年前のコードで、内容をすっかり忘れてるし、今のmixiにログインできるかどうかすら解らないです 暇になったらDebugしながらどうなっているか確認してみます が、期待しないでね
813 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 12:38:29 ] >>812 OSをWindows7にした時にDelphiをインストールし直したらコンポーネント不足でもうコンパイルすら出来なくなってたorz なので自力で頑張ってくれ 確認だけどPostしてCookieもらってGetする前に IdHTTP1.Request.ContentType:=''; ってやってる? それくらいかな? ほんとにCookieもらったあとは読みたいページを直で読みに行ってるだけだから
814 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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('mixi.jp/login.pl?from=login1 ',PostData,Req); IdHTTP1.Request.ContentType:=''; Buf:=IdHTTP1.Get('mixi.jp/home.pl '); Memo1.Text:=Buf; PostData.Free; Req.Free; end;
816 名前:765 mailto:sage [2010/06/15(火) 13:54:33 ] >>814 コードありがとうございます。 が、なぜか同じコードを実行してみても、自分の環境ではログインされていない状態になるよう です(ユーザー名とパスワード入力画面が表示される)。 TIdHTTP1でcookieを扱うために特にしなければいけない事はTCookieManagerの登録以外に 何かありますでしょうか? うーん、まだPOSTしきれていない情報があるのか・・・?
817 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 14:24:07 ] >>816 一度新規にProjectを作ってやってみたらどうですかね? と言うのは、IdHTTP等のプロパティの値が違うと取得できないケースがあります ちなみに私のコードはDelphi起動、Project作成後に何も考えずにコンポーネントをペタペタやっただけです。 ちなみにDelphi2007です。
818 名前:765 mailto:sage [2010/06/15(火) 18:06:06 ] >>817 新規で作ってみましたが、やはりログイン前のmixi.jp/home.plの画面が表示されますね・・。 (パスワードとIDの入力画面) postでIDとパスワードを送っているにもかかわらず、ログインできていないという事か・・? ちなみにIndyはD2009/2010版の最新のものを入れています。
819 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 18:54:38 ] del2006だけど成功したよ。>>814-815
820 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 19:55:13 ] >>818 Delphi2010はStringのエンコードがややこしいので普段使ってないのですが、Delphi2010でやってみたけど出来ました。 何が違うんでしょうね
821 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 02:19:57 ] 頭・・・ですかね
822 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 08:33:05 ] >>821 お前の?
823 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 13:30:08 ] >>822 の。
824 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 14:09:14 ] 他のアプリのウィンド内の文字列を取得するアプリを作っているのですが、 文字列を取得する時に、そのウィンドがアクティブになっていれば正常に取得できるのですが、 非アクティプの時に取得しようとすると ?Main と言う文字列が返ってきます。 目的のウィンド内の別のところの文字列は非アクティブでも取得できます。 どういう情報を書けばいいかよく分からないので、分かりにくい質問とは思いますがよろしくお願いします。
825 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:50:46 ] なんてソフトの どんなところを どうやって取得しているのか?
826 名前:デフォルトの名無しさん [2010/06/16(水) 23:01:31 ] VCLベースアプリの可能性が高い感じ。 メインフォームの他に隠しウィンドウ持ってるから。
827 名前:765 mailto:sage [2010/06/17(木) 10:24:12 ] >>819 、820 ひとつ確認させてください。 同じhome.plでもログイン前とログイン後の両方があります。 みなさんはログイン後のhome.plが表示されましたか?
828 名前:765 mailto:sage [2010/06/17(木) 10:28:55 ] ちなみにログイン前のhome.plだった場合、getで取得された情報の中に、「いますぐ利用す る(無料)」や「すでに登録済みの方は、こちらからログインしてください」などの文字列が 入っています。 ログインされていない状態のhome.plですね。 俺がやると、なぜかこっちになるんだよね・・・。
829 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 10:58:30 ] いい加減、httpでアクセスして自分の送ってるパケットぐらい調べろ httpsonlyだったり正常ならレスポンス時のカスタムヘッダを列挙しろ それも駄目ならリクエスト時のカスタムヘッダに直接クッキー押し込め それでも駄目ならアカウントが死んでる クッキーコレクションだったか?あれはヘッダからクッキーを抜いて保持しとくだけの物なんだよ 使えなかったら直接ヘッダにぶち込め つかな、もうこれdelphiスレで何度も何度もいってるんだよ デバッグが出来ないならネットワークのプログラミングはやるな つかRFC読んで仕組みを勉強しろ!
830 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 11:17:53 ] ↑ スレタイさえ読めないおバカさんですか? このスレのタイトルは、 くだすれDelphi(超初心者用)その51 >Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、 >もしくは質問者自身何が何だか分からない質問を >勇気を持って書き込むスレッドです。 >Delphi使いが優しくコメントを返しますが >お礼はDelphiの布教と初心者の救済をお願いします。
831 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 17:39:38 ] プロジェクト一式上げろよ
833 名前:デフォルトの名無しさん [2010/06/18(金) 10:56:15 ] エクセルのファイルそのものを削除するにはどうすればいいのか誰か教えてくれないか DeleteFile('C:\ファイル名'); でやるとTXTファイルなら削除できるのにエクセルだとなぜか削除されないんだ・・・
834 名前:デフォルトの名無しさん [2010/06/18(金) 11:17:22 ] 追記 別の名前で保存はできるが、名前を変更して保存(リネーム)もできない
835 名前:デフォルトの名無しさん mailto:delphipatch@gmail.com sage [2010/06/18(金) 12:14:20 ] D3のQuickReportのパッチのd3qrupd.lzhをお持ちの方居りましたらメールで送っていただけませんか? サポート終了と言うことで本家から落とせなくて困っています。
836 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 12:22:27 ] >>832 うpローダー探してのちほどうpしてみます。 今日午後〜火曜まで出張のため、来週半ばぐらいになるかもしれません。
837 名前:833 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 01:33:11 ] >>840 できたならいいけど受け手と送り手勘違いしてない? あとDrawでもマイナス指定すればできるけど
842 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 22:06:48 ] ゲーム作っている人教えて。スーパーマリオなどのゲームって スクロールしたとき、マリオをも背景も再描写させてるの?
843 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 22:22:30 ] そもそも昔のゲーム機はPCとは異なる概念で描画してるから PCでは参考にならないと思うぜ 画面全体がタイル上に分割されていて、 どこにどのタイルを貼るかを指定する感じで描画する 背景は全体的にスクロールできて、 キャラは背景とは別に置けたんじゃなかったかな(所謂スプライト) GBAの知識だからFCやSFCくらい古くなるとどうなってんのか知らないが 最近のゲーム機なら毎回レンダリングしてるんじゃないの カメラが固定ならさぼってるかもしんないけど
844 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 09:37:41 ] 最近、Delphi7のデータベースを使ったプログラムを作った時の 配布方法について教えて下さい。 データベースを使ったプログラム自体初めてなので、これから 本とか買って調べるのですが、データベースアプリってデータベースも含めて Zipとかで配布できますか? インストーラーとかよく分からないので、解凍して終わりな感じにしたいです。
845 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 09:40:18 ] >>844 そんな知識レベルで配布とかすんな。
846 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 09:51:04 ] Delphi は複数の DB 接続技術を利用できますから、あなたのアプリがどれを使うかによって 話は変わってしまいます。 まず、データベースアプリを作りましょう。 配布の話はそれからで十分だと思います。
847 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 10:22:34 ] >>845 答えてくれてありがとうなんだけど、ケチ付ける前に日本語読めるか? これから調べて作るんだよ。 すっこんどけ。ヽ(`Д´)ノプンプン >>846 了解しました。
848 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 10:38:27 ] あと、せめてどのデータベースにつなげたいのかくらいは書いてね。 そういうのもまだ決まっていないならどうしようも無いけど
849 名前:844 mailto:sage [2010/06/23(水) 11:27:58 ] >>848 > あと、せめてどのデータベースにつなげたいのかくらいは書いてね。 > そういうのもまだ決まっていないならどうしようも無いけど なにぶん、初めてでどのデータベースに繋げようかとか決まってないです。 一応、「Delphi DB&Webプログラミング」って本が手に入りそうなので、 それで調べようかなと思っています。 逆に、簡単に配布出来るものってあるんでしょうか?
850 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 11:54:09 ] デルファイでマリオ作ろうとしてるやつっておめでたいな・・・
851 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 12:07:02 ] >>849 何を構築しようとしてるのか知らないけど、多分、君にDBは必要無いと思うよ。
852 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 13:09:16 ] 7をWindows7で使ってます。 TRicheditの背景色についてですが、 いったん表示されてから、Windowsのテーマ変更で背景色が変わった場合 TRicheditは背景色がclWindowに追随してくれません。(ほかにTTrackbarも) テーマ変更時のイベントを捕捉できればいいのですが、eventにはそれらしき ものが見当たりません。 ためしにonChangeイベントで reRichedit.color := clWindow; とやってみましたが、テーマ変更後の色に変わりませんでした。 いったんコンポごと消して再生成するしかないのでしょうか?
853 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 15:14:26 ] まぁ、確かに要らないかも何ですが・・・ あるデータを溜め込んで、andやorで抽出する必要があるんで 何かのデータベースを使った方が楽かと。 データリスト自前で作っても良いんですけどね。
854 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 15:18:23 ] ・自分でフィルタリングするの面倒だからDB使う。 ・インストール面倒だからzipでファイルだけ配布。 ・調べるの面倒だから2chで丸投げ。
855 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 15:38:43 ] 854 どれも立派な理由だと思います。
856 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 15:41:06 ] いやいや別に丸投げって、そんんぁ。 インストーラーみたいなのをやらないといけないかどうかだけだよ知りたいのは。 データベースによるわ、ヴォケ!ってなら ヾ(゚∀゚)ノ ハイ で終わり
857 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 15:45:26 ] リレーショナル DB である必要がなく、データ件数が高々数万でよいなら ClientDataSet を MidasLib ユニット経由で使えば、アプリケーションに 組み込み(追加の配布ファイルなし)で作れます。 一般の(リレーショナル)DB を使う場合には、そのサーバーそのもの以外に DB メーカー提供のミドルウェア(接続用 DLL)が必要になります。 多くの場合、アプリケーションと同じディレクトリに置けば動く場合が多いですが そうでない場合もあります。
858 名前:856 mailto:sage [2010/06/23(水) 15:52:28 ] >>857 ありがとうございました。 調べる的が絞れました。
859 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 02:31:28 ] ちょいちょい挟んでくるAAがイラッと来るなw 分かってやってるのかもしれんが
860 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 17:46:25 ] >>858 分かってるとは思うけどDBのライセンスに注意してね 付属のIntereBaseも再配布不可どころか開発専用のライセンスだし。 Delphiの場合だとIBX+組み込み版Firebirdが手っ取り早いと思うけど
864 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 19:01:39 ] うるせーハゲ^^
865 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 19:59:16 ] >>861 画面の見た目にこだわらないのであれば 処理の進捗を表示するフォームを作成してからCopyFileExを呼び出して、 コールバック関数内で画面を更新させる手もある
866 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 09:09:38 ] >>861 TSHFileOpStructのウィンドウハンドルに0を指定でいいんじゃね。
867 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 11:48:40 ] 他のアプリのフォントの色を取得するにはどうすればいいですか? 目的のアプリのコントロール?のハンドルは取得できています。 GetDCでデバイスコンテキストを取得して、 Label1.Font.Color := GetTextColor(DC); みたいにしているんですが、「0」が返ってきてしまいます。 よろしくお願いします。
868 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 11:54:56 ] 全く同じ質問を見たような気がするが気のせいか?
869 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 11:58:16 ] 失礼しました。 675にアキラメロンがありました。
870 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 15:40:43 ] 数年前にDelphi6をやっていてある程度マスターしていたのですが ひさしぶりにプログラミングをやろうとしたら全然状況が変わっていて どの言語をやろうか迷っています。 Delphi経験者が今から趣味でプログラミングを始めるならどの言語がいいですか?
871 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 15:57:52 ] >>870 Object C
872 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 16:54:59 ] >>870 C#
873 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 21:47:02 ] >>870 Prism
874 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 22:03:33 ] >870 趣味?お金をかけたくないならC#、お金に余裕があるならDelphiかPrism。 C#はEEならただだから。
875 名前:765 mailto:sage [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 mailto:sage [2010/06/26(土) 12:10:15 ] しまった書き忘れ・・・。 うpローダーのダウンロードパスはdelphiです。
877 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 13:36:05 ] Delphiってもう無料版はないの?
878 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 14:16:33 ] ない
879 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 00:56:09 ] 処理中にマウスのカーソルを砂時計にしたいのですが、 各コントロールのCursorを全部設定していかないと いけないのでしょうか?
880 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 03:16:10 ] Screen.Cursor := crDefault;
881 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 18:52:36 ] >>875 何度も言われていることなのにバカなの? login.pl→check.pl→home.plっていう流れなのに いきなりhome.plアクセスしてるじゃん。 いろんな人がいろんなアドバイスしてくれてるのに 全く聞く耳持ってないじゃん。 login.plでちゃんとログインできたらメタタグだけでcheck.plに行けって返ってくるから そこにアクセスしてからhome.plにアクセスしてみなよ。 一度目のPOSTのレスポンスを表示しようと思わなかったのはなんでだろうか。
882 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:45:37 ] 聞いてる時点でやる気も調べる気も行動する気も最後までやり遂げる気も無い
883 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 02:03:47 ] 釣れた釣れたw
884 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 05:34:07 ] 釣られちゃった てへっ
885 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 09:44:58 ] 恥ずかしい後釣り宣言来ました
886 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 14:00:40 ] 恥ずかしい後釣り宣言来ました宣言来ました
887 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 14:47:30 ] 自動ログインしたいという根性そのものがいけすかない。 手動でやれ手動で。ビシっと。
888 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 14:55:47 ] そういうのはC#でやるのが簡単なのに
889 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 19:25:46 ] ListView1.Items.IndexOf(stringData) >= 0 とか ListView1.FindCaption(0,stringData,False,True,False) = nil とか
891 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 19:29:14 ] ListView1.Items.IndexOf(stringData) < 0 だった
892 名前:889 mailto:sage [2010/06/29(火) 10:20:41 ] 質問した時のプログラム例が間違ってる。 恥ずかしい。orz >>890 ありがどうございます。 しかし、ItemsのIndexOfはTListItemを探すものらしいです。 ListView1.FindCaption(0,stringData,False,True,False) = nil こっちでいいみたいです。
893 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 10:24:06 ] VirtualListViewでやれば好きなように出来る。
894 名前:765 mailto:sage [2010/06/29(火) 11:14:01 ] >>881 当初Live HTTP headersで確認したところ、login.plのあとにcheck.pl?n=/home.plにアクセス していることがわかりましたので、 IdHTTP1.Get('mixi.jp/check.pl?n=home.pl '); や IdHTTP1.Get('mixi.jp/check.pl '); を試した事もありました が、双方ともに302 Foundがでるので(ブラウザからはアクセスできる)、それ以上の調査はして おりませんでした。 アップロードにうpしているファイルは、上の方でログインに成功されている方の例をそのまま 使って作り直したものです。 >>881 さんはcheck.plにアクセスした際に、302 Foundエラーはでませんでしたか? もしでている場合、どのように回避されましたか? 実はIndyのバージョンを2009梱包版のものではなく、最新にあげてしまっているので、そのあた りが影響していないか心配です。
895 名前:765 mailto:sage [2010/06/29(火) 11:27:51 ] 追加 POSTから返ってきた文字列に関しては>>768 で触れております。 が、この時点でこのアドレスはクッキーが無効であるという失敗を表すものだという勘違いをして しまい(>>784 さんも同意見だったため)、しばらく迷走しておりました。 で、その後再度Live HTTP headersを追ってみたところ、「mixi.jp/check.pl?n=%2Fhome.pl 」 へのGETを発見しました。 今改めてみてみましたが、ブラウザでもcheck.plへのアクセスのあと、一度「HTTP/1.1 302 Found」 がでていますね・・・。
896 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 16:33:24 ] D3のSQLエクスプローラーで二つのInterbaseファイル間のテーブルの比較って出来ますか? 片方で削除されたレコードを抽出したいのです。
897 名前:デフォルトの名無しさん [2010/06/29(火) 23:44:12 ] win7でターボデルフィは動かせますか?
898 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 01:18:54 ] 302がエラーだとしか思わない人がネットツール作れるのかよ・・・・・・
899 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 03:07:49 ] >>895 もう続きはチラ裏でいいと思うよ
900 名前:765 [2010/06/30(水) 09:49:43 ] >>898 超初心者ですので、勉強のつもりでやってます・・・。 用語もそれほど知らないので、どう皆さんにうまく説明していいかわからず、エラーと表現して しまい申し訳ございません。 >>881 さんがどのように302 Foundを回避されているのか、アドバイスいただければ幸いです。 >>899 自分自身Delphiはおろかプログラミングもはじめたばかりですので、このスレに来たのですが、 もっと初心者向けのスレがあるという事でしょうか? ここでも場違いなようでしたら、どちらかのスレに誘導していただければ嬉しいです。
901 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 10:32:54 ] 本当に勉強したいなら、匿名無料掲示板で相談するのではなく経験を持っている人に教わった方が 速いです。身近に相談できるような人はいませんか? >もっと初心者向けのスレが 「知らないこと」には限界が無いので、初心者とひとくくりにすることができないのですよ あなたがどこまで何を知っているか。によって答え(や参考資料の出し方など)は変わっていくのです。 どこかにもっと初心者向けのスレがあるかもしれませんが、それは誰にもわかりません。 多くの回答者は暇なときにしか対応できませんからどうしても時間がかかります。だから「出直してこい」「ちょっとは 自分で調べろ」と言うしか無いのですよ。 今回の件では、プログラムする前に何が正しい動作、期待する動作なのかを知る必要が有るでしょう。 まずブラウザとサーバーの会話を分析、理解するべきだと思います。 簡単にはパケットキャプチャ。Safari や Chrome などのブラウザ組み込み開発ツールも役に立つでしょう。 ここから先は、まずはネットワーク関連のスレに移動した方が、より専門的な解説、説明、罵倒が待っていると おもいます。行ってらっしゃい
903 名前:765 mailto:sage [2010/06/30(水) 11:46:21 ] >>902 このスレですでに二人ほど、ログインに成功している方がいるので、できればその方たちから のヒントを聞かせていただければなと思っておりました。(´・ω・`) もちろんヒマな時の回答でも、すごく嬉しいです! DelphiでIndyを使用してMIXIにログインする例が見あたらなかったので、今後トライしようと する人の為にも成功例がコードと共にあった方がいいかなと思って質問を続けてきましたが、 他のスレに行った方がよさげですね・・・。 とりあえずネットワーク関連のスレの方をみてみます。 こちらでも何かヒント等ありましたら、引き続きアドバイスいただければ幸いです。 ありがとうございました。
904 名前:765 mailto:sage [2010/06/30(水) 12:28:13 ] XRayさんのところに302回避の良いサンプルがありました。 Redirectを使って処理すればいいようです。 ちら裏になりますが、現在の状況です。 まだ解決にはほど通りので、引き続きがんばります。 ログイン情報をPOST ↓ Cookieとmixi.jp/check.pl へ行けとの指示ゲット ↓ 302Found ↓ Redirectで処理し、mixi.jp/home.pl が返ってくる ↓ mixi.jp/home.pl へ移動 ↓ ログイン前のホームが依然表示される
905 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 14:00:32 ] そもそも認証は面倒だからIEでいいならIEコンポ(WebBrowser)でやったほうが早くて確実だけど INDYにこだわる必要があるのかな WebBrowserで自動ログインする部分が多少面倒だけどそれさえクリアすれば後は簡単
908 名前:765 mailto:sage [2010/06/30(水) 14:13:21 ] >>907 WebBrowserは別の練習アプリで使ったので(その時にIndyでも認証ができると知りました)今回は Indyに挑戦してみようと思いまして。 だが、資料が少なすぎて、今の俺のスキルでは無茶すぎた・・・! と後悔しつつも、せっかくだか ら最後までやりたいと思っております。
909 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 14:41:41 ] 302回避とか書いている時点でなにも理解できてない。 Delphiとは関係ない知識が足りてない。
910 名前:765 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 16:12:08 ] なぜDelphiなんだろうC#のがいいのに
912 名前:765 mailto:sage [2010/06/30(水) 16:40:50 ] >>911 ちら裏になりますが、会社の自分の前任者(元プログラマ、退職済)が2009を購入してもらって、 ちょこちょこ便利ツールを作ってたみたいで、後任の自分も使ってみたら?と渡された。 もともとプログラムできる奴カッケー!!と思っていたので、仕事の合間や自宅にノートPC持っ て帰ってに勉強しています(セキュリティが緩いので・・・)。 職種はまったくPCと関係ない上、社内でその手の知識がある奴も皆無なのがつらいところ。
913 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 19:17:26 ] なぜDelphiなんだろう
914 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 21:23:52 ] Webアプリ作りたいんならまずRFC2616くらいは読んどいたほうがいい。 とりあえず、「HTTP/1.1 302 Found」は必ずしもエラーを意味しない。それによりリダイレクト させることが目的である場合もあるから。 Indyのバージョンによるのかもしれないけど、プロパティで302を自動でリダイレクトさせる ことができるし、実際自分はそれを使ってる。
915 名前:765 mailto:sage [2010/06/30(水) 22:33:34 ] >>914 実はRFC2616を説明しているサイトで302 Foundについてすでに調べたのですが・・・・ さっぱり意味わかんねえええええw orz 他も色々みてみて、どうやら一時的なページの移動か、CGIが返す場合があるという事 として今は理解しています(検討外れだったらすいません・・・)。 Indyのバージョンは最新のはずなので、もしかしたら自動でリダイレクトさせるプロパティ があったのかもしれないですが、とりあえず現在はRedirectイベントで処理いたしました。 今日は力つきたので、ここまででw
916 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 23:06:41 ] Delphiと関係ないことは理解できましたか?
917 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 04:20:03 ] BDEでODBC経由でSQL Serverに接続しています。(TDateBaseクラスを使用) 複数のプロセスでDB接続している際、その中の1つのプロセスを強制終了 (クラッシュ)しては再起動ということを繰り返していると、何度かいったところで 「この操作に必要なメモリがありません」と出て、DB接続できなくなります。 DB接続しているプロセスをいったん全て終了させると、正常に戻ります。 見たところではリソースのリークのようなのですが、改善することはできますで しょうか。
918 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 04:28:35 ] プロセスの強制終了が直接の原因でしょ BDE は共有メモリモデルで動いているから異なるプロセス間で共有しているメモリブロックが解放されず 不足したのでしょう。 強制終了しないように直し、仮に例外が発生しても正しくアプリケーションを終了させるようにするのが正道。
919 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 04:42:57 ] BDE 使い続けている人は多いなぁ
920 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 09:41:07 ] BDE経由だとoracleでもそんな感じだし。
921 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 09:55:45 ] >>765 C++Builder2010だけど、>>814 のコードでログインできた。 >>814 のコードの IdHTTP1.Post('mixi.jp/login.pl?from=login1 ',PostData,Req); で、Reqにサーバーからのレスポンスが入っている。 とりあえずReqのデータをSaveToFileでファイルに保存してファイルの内容を教えろ。 ログインできていれば、あとは >>814 の次のコードでログイン後のページが表示される。 IdHTTP1.Request.ContentType:=''; Buf:=IdHTTP1.Get('mixi.jp/home.pl '); 302 Foundとかで躓く理由がない。
922 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 11:36:04 ] Indyってnegotiate認証に対応しているのでしょうか?NTLS認証は対応してるっぽい ですけど、Kerberos認証は対応してます?
923 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 12:03:02 ] Delphi2010(Rad Studio)の 逆アセンブル/レジスタなどのペイン(メニューだと表示→デバッグ→CPUウィンドウ以下) のフォントサイズが6?7?なのか不明ですが、文字が小さすぎて見えません CPU全体というものを選べばフォントサイズはでかくて見易いのですが、この項目はエディタウィンドウと重なってしまい、使い勝手が悪いです 特にこれらの項目のフォントサイズを変更する項目が見あたらないのですが、文字を大きくすることは不可能なのでしょうか…
924 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 13:07:09 ] TDateTime型に変換する
926 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 18:50:02 ] >>924 > 今考えているのは、年月日の漢字を消して 201021 と言う数字にして比較しようと思っているのですが、 それだと2010年1月11日と2010年11月1日の区別ができないのでは。
927 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 19:25:17 ] StrToDateTimeでTDateTimeにして比較する
928 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 19:26:19 ] ごめん、こっちの方 VarToDateTime
929 名前:924 mailto:sage [2010/07/01(木) 23:06:28 ] 皆さん、ありがとうございました。 VarToDateTimeを使って、上手くできました。 また、よろしくお願いします。
930 名前:765 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 13:17:35 ] あれだけ言われてまだここでやるんだ
932 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 14:46:08 ] >>930 そのレスポンスなら、mixiの認証は通っている。 ここまでは正しい動作だ。 では次に >>815 の次の部分を下のコードのように変更してほしい。 これを Buf:=IdHTTP1.Get('mixi.jp/home.pl '); こうする Req.Clear(); IdHTTP1.Get('mixi.jp/home.pl ', Req); Reqにサーバーからのレスポンスが入っている。 これをSaveToFileでファイルに保存して内容を確認してほしい。 なお文字コードはeuc-jpなので、euc-jpに対応しているエディタで開く必要がある。
933 名前:765 mailto:sage [2010/07/02(金) 16:49:20 ] >>932 Reqの中身はログイン前の画面でした。 「すでに登録済みの方は、 こちらからログインしてください」 と共にログインメールアドレスとパスワードの入力を施す画面です。 >>932 さんや>>814 さんはこれでログインできているようですので、もしや、Indyのアップデータを 行ったのが問題なのか? 週末にでも一度削除し、インスロールを一からやり直してみます。
934 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 17:45:30 ] >>933 これ使え。 yuukiremix.s33.xrea.com/chirashi/
935 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 19:01:55 ] ここまでやってパスかメアド間違えてるとかだったら殺意すら湧く
936 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 20:26:11 ] var X: Cardinal; としておいて、 X:=32768*32768; X:=X*2; とか、 X:=2147483648; だと問題ないのですが、 X:=32768*65536; では、コンパイル時に「[エラー] 〜: 数値演算のオーバーフロー」となってしまいます どうしてなのでしょうか
937 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 20:41:12 ] 0..4294967295
938 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 21:00:16 ] >>937 4294967295 ? 32768*65536は 2147483648 ですから、あふれてないように思うのですが
939 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 21:26:45 ] ヘルプの「真の定数」によると、定数式が整数の場合はその値によって型が決まり 32768〜65535 ⇒ WORD 65536〜2147483647 ⇒ 0..2147483647 となる。この場合 (WORD)*(0..2147483647) の演算だから 式全体の型は 0..2147483647 となり、結果がこの範囲に収まらないとエラー という理屈になるのかな。何だか納得いかないけど、とりあえず X := 32768*Cardinal(655356) とでもすればコンパイルは通るだろ。
940 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 22:26:25 ] >>939 「真の定数」読みました なるほど、65536..2147483647は、ほぼInteger(Longint)ですね X:=Cardinal(32768)*65536; でもOkでしたので、その解釈は当たりだと思います 分かりましたー、と言いたいところですが、それなら X:=32768*32768; でもオーバーフローになるはずでは??? やっぱりなんか変ですよね
941 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 23:09:09 ] >>940 あとは、整数型同士の演算の場合 どちらかがInt64なら結果もInt64、そうでなければ結果はInteger という規則があるから、これにひっかかるのかな。(ヘルプだと「算術演算子」のところ) Cardinalが入った場合の規則が書かれていないからよくわからないけど、 Integerの範囲には収まらないはずだからInt64扱いになるのかもしれない。
942 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 00:29:21 ] >もしや、Indyのアップデータを行ったのが問題なのか? >週末にでも一度削除し、インスロールを一からやり直してみます。 ワロタwww アップデータをインスロールしてくださいね(笑)
943 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 01:39:16 ] 定数の型を指定したい場合はこうすればいい const foo = Cardinal(1);
944 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 08:46:20 ] 計算時に i := Cardinal(1) * 10; でいいやん。
945 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 12:29:36 ] 仕事に忙殺されてるうちにすっかり取り残されてしまい、いまだに D6 Pro ですが、 職場では Win7 を使っています。 少々余裕も出てきた&ネイティブコードも必要になりそうなので、職場のマシンに インスコしてみました。今のところ動いています。 せっかくなので Win7 のタスクバーの新機能を使ってみたいのですが、D6 Pro で ITaskbarList3 を使うにはどうしたらいいんでしょうか。タイプライブラリの取り込みで ExplorerFrame.dll を指定してもエラーになってしまいます。さすがに古すぎるんでしょうか。
946 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 12:44:42 ] >>944 定数の話してるのになんでマジックナンバーにするの?馬鹿なの?
947 名前:946 mailto:sage [2010/07/03(土) 12:45:56 ] 僕が馬鹿でした
948 名前:944 mailto:sage [2010/07/03(土) 12:47:03 ] 分かればいいよw
949 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 12:48:35 ] const foo:Cardinal=1; でいいやん。
950 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 13:02:41 ] >>949 しか知らんかったわ。 >>943 今度使ってみよう。 些細なことで偶に勉強になるな。役立つかは別にして。
951 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 15:25:44 ] 厳密に言えば>>949 は一度だけ書き替え可能な変数 >>944 が本当の定数 >>944 はコンパイル時に実際に数値と置き換わるけど、>>949 は変数と同じく参照として扱われるから、 その展開がない分>>944 の方が高速になる 知らないことは誰だってあるけど、いいやんとか言って違いも調べず思考停止するやつは向上心もう少し持とうぜ
952 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 03:30:07 ] もっと!もっと熱くなれよ!!
953 名前:765 mailto:sage [2010/07/05(月) 14:22:54 ] IndyのバージョンをDelphiインストール時のものに戻してテストしてみたところ、こちらの バージョンではログイン後の画面が表示されました。 よって、バージョンアップをしてしまうと、なんらかの原因で正常なログインができなくなる ようです。 Proxomitronを使って、両者のPOSTおよびGETの内容を確認してみましたが、全く同じデー タでした。 旧バージョンで新バージョンのunitを開くとRequest.Ranges.Unitsが無いというエラーがでた ので、そのあたりのプロパティかと思い、わからないならがも色々やってみたのですが改善 することができませんでした。 ソースを追って、原因追及といきたいところですが、自分にはまだまだ無理ですので、とり あえず旧バージョンに戻す事で対応したいと思っています。 新バージョンで実装されているRequest.CharSetを使いたくてバージョンアップしたのですが、 残念です・・・。 色々教えていただき、ありがとうございました。 また自分の書き込みでご気分を害された方、申し訳ございませんでした。
954 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 17:05:21 ] そういうときはIndyのバージョンも書けよ
955 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 17:56:55 ] >>954 自分の無能さをライブラリのせいにして逃げる口実なんだからわざと書いてないんだよ 言わせんな恥ずかしい
958 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 18:02:31 ] >>955-956 TComparer<T>.Defaultの実装が参考になるというかそのまま使えると思う
959 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 18:14:50 ] >>954 ,>>957 バージョンについては>>818 に書いたのですが、最初の書き込み時に書くべきでしたね。 申し訳ございません。
960 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 19:09:23 ] 「最新」なんてバージョンはない
961 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 20:55:58 ] 最初から最後までここまでぐだぐだになれるのもある意味才能だろうな・・・
962 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:49:35 ] ume
963 名前:765 mailto:sage [2010/07/06(火) 11:10:56 ] >>960 同じようにアップデートしてしまって以前と同じような動きができなくなった方の為に、参考ま でに書いておきますね。 バージョンは10.5.7で(2009に同梱のものは10.2.5)昨日の時点ではr4270のものを使用しまし た(changelog.txtでの確認)。 最初に試したものはr4258です。 >>961 PCやプログラムについての知識がなさすぎて、皆様を不快な気持ちをさせてしまいました。 申し訳ございません。
964 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 13:14:00 ] いいよ^^
965 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 18:38:37 ] 匿名関数使ったサンプル集みたいなサイトや本って無い?
966 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 21:25:28 ] WebBrowserをフォームに貼ってサイトを表示させてるとkeypreviewをtrueにしてもonkeydownでキーを拾ってくれないんですがどうすればよいのでしょうか?
967 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 17:50:49 ] ローソク足のチャートが書ける日本語のコンポーネントってありませんか? 有料でも良いです。
968 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 17:54:02 ] 条件をひとつ削ってもいいなら腐るほどあると思うけど
969 名前:デフォルトの名無しさん [2010/07/12(月) 17:54:17 ] page13.auctions.yahoo.co.jp/jp/auction/r66957338
970 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 17:58:25 ] >>967 ありますよ
971 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 19:57:43 ] >965 omnithreadlibrary - Project Hosting on Google Code ttp://code.google.com/p/omnithreadlibrary/ のデモの30番とか。