[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 03/27 14:57 / Filesize : 277 KB / Number-of Response : 972
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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

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番とか。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<277KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef