くだすれDelphi(超初心者用)その51at TECH
くだすれDelphi(超初心者用)その51 - 暇つぶし2ch751:デフォルトの名無しさん
10/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
10/06/08 10:53:30
>>750
やっぱり。どうも変だなと思ってた。あと、ソースの頭にしっかり
//5bitエンコーディング関数 Base32ではない。
って書いてあるじゃない。最初は見落としてたの?

>>751
>>741の function EncodeB32 だけでちゃんと
S0QSUB595BKSK4BOQRLEPJ43A7
になるのを確認したので、これはBase32でもBase32hexでもないと思います。

>また、>>749 shr の使い方を誰かDelphiで合ってるか確認してほしい。
どう確認すればいいのか分かりませんが、そこだけ差し替えたら
D0N6FIA5A575IGMQATBLF69A03
になりましたよ。

Delphi始めて数ヶ月の初心者が頭突っ込んでスマソでした

753:デフォルトの名無しさん
10/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
10/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
10/06/08 23:02:43
私も勉強がてらJavascriptに翻訳してみました。
出来る限り元ソースに忠実にしました。
URLリンク(ideone.com)
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
10/06/09 07:20:10
DelphiスレなのにJavaやらCやらJavascriptもなんなので、
ideone.comのPascal(FPC:Free Pascal)でDelphiできるか?試してみました。
URLリンク(ideone.com)
結果:プログラム本体の書き換えは一切せずに動作しました。
追加したこと
 1. コンパイラモードをDelphi互換に指定 → {$MODE DELPHI}
 2. Uses節を追加、StrToIntのためにsysutilsを指定
 3. function MakeWordをWindows.pasからパクってきた

以上、初心者の研究コーナーでした
スレ汚しまくってスマソ

757:デフォルトの名無しさん
10/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:こまった??
10/06/09 11:40:16
Delphi5 から Delphi2010 に一気に移行したものですが、
たとえば、 TMemo などの既存コンポーネントを継承して、
新しいコンポーネントを作成したとき、
TEST用プロジェクトで動作確認はできるのですが、
いざ、コンポーネントタブ(たとえばsample)に登録しようとしたとき
Delphi5にはあった「コンポーネント」=>「コンポーネントのインストール」
メニューがDelphi2010メニューにありません。
どうやってインストールするのでしょうか?
それとも、プロフェッショナル版ではできない?


759:デフォルトの名無しさん
10/06/09 13:55:35
>>758
URLリンク(mrxray.on.coocan.jp)

760:デフォルトの名無しさん
10/06/09 22:19:20
TOpenDialogとかにボタンを追加したいときはどうするべきなのでしょうか。

761:デフォルトの名無しさん
10/06/09 23:49:42
TOpenPictureDialogのコードが参考になると思う。

762:デフォルトの名無しさん
10/06/10 12:59:36
Synchronizeで実行するプロシージャーで引数が使いたい時って皆さんはどうしていますか?

763:デフォルトの名無しさん
10/06/10 15:02:32
匿名メソッドでいいじゃん

764:デフォルトの名無しさん
10/06/10 16:35:12
>>762
そのためにわざわざフィールド変数を用意して、それ経由してる。


765:デフォルトの名無しさん
10/06/10 17:16:57
mixiにログインして情報をとってくるようなアプリケーションを作りたいと思っています。
そこで、TIdHTTPコンポーネントを使用してログイン部分をいま作成中なのですが、Cookieが無効
になっているため、ログインできませんと言われてしまいます。
(URLリンク(mixi.jp)が返ってくる)

TIdHTTPコンポーネントのCookieManagerには該当のTIdCookieManagerを指定し、
AllowCookiesはtrueの状態にしています。

IdHTTP1.Postの第一引数は以下の通りです。
'URLリンク(mixi.jp)'

IdHTTP1.Postの第二引数にはstringlistで以下のようなデータを渡しています。
'next_url=/home.pl'
'email=メールアドレス'
'password=パスワード'

TIdHTTPコンポーネントを使用して、mixiへのログインに成功した方、どのようにされたかアドバ
イスいただけないですか?

766:デフォルトの名無しさん
10/06/10 21:38:02
オミトロンとかLiveHTTPHeaderなんかで
ブラウザでログインしたときの状況を確認したほうが早いと思ふ

767:デフォルトの名無しさん
10/06/11 11:13:50
>>764
無名メソッドを使えば、わざわざフィールド変数を用意する必要はない。
URLリンク(edn.embarcadero.com)

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
10/06/11 11:26:33
>>766
LiveHTTPHeaderで確認したところ、POSTする情報は765の3つでした。
試しにブラウザからcokieを一度削除し、最初のログインでどのようなものを渡しているか確認。
それと同じ内容をIdHTTP1.Request.CustomHeaders.Addで渡してみたのですが、やはり
URLリンク(mixi.jp)のアドレスが返ってきます・・・。

なんか根本的に設定を間違えているんでしょうか・・・。

769:デフォルトの名無しさん
10/06/11 11:40:09
ssl だったり?

770:769
10/06/11 11:43:19
>>769
あんまり関係ないか。

771:765
10/06/11 12:00:48
>>769
C#とかのサンプルみる限りはSSLじゃなくてもログインできるようなんですよね。
Indyの情報すくなすぐる・・・泣ける・・・。

772:デフォルトの名無しさん
10/06/11 13:34:24
Indyは自力でソース見て解決できないバカが使うものじゃないから、
おとなしくTWebBrowserを操作してログインしておけ

773:デフォルトの名無しさん
10/06/11 13:35:31
cookiemanagerにsessionはいってるのか?

774:デフォルトの名無しさん
10/06/11 20:25:06
IdHTTPのProxyにオミトロン通してブラウザと挙動を比較するとか。

URLリンク(mixi.jp)は普通にログインしてても通過するみたいだから
内容がどうかだね。

775:デフォルトの名無しさん
10/06/11 20:45:00
url := 'URLリンク(mixi.jp)';
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:デフォルトの名無しさん
10/06/11 20:45:59
クッキーマネージャは何もいじってないよ

777:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/11 23:24:48
TStringListのSaveToFileって同時に同じ名前のファイルで行われると共有違反とか起きますか?

780:デフォルトの名無しさん
10/06/12 04:08:26
起きる起きない以前にそんなクソコード書かないで下さい

781:デフォルトの名無しさん
10/06/12 08:04:10
「同時に」の意味は?本当に同時にはできないから、先にSaveToFileしたほうは
成功して、後のほうは失敗するんだけどね。

782:デフォルトの名無しさん
10/06/12 09:56:46
あとの方で上書きされると思ってたが違うのか?w

783:デフォルトの名無しさん
10/06/12 10:12:36
>>777
2.3.4の間違いだよね?

784:デフォルトの名無しさん
10/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
10/06/12 18:23:37
>782
ああ、先のほうの保存が終了てから後の保存が行われるならその通りだね。
「同時に」って言葉に引っぱられすぎだ。

786:デフォルトの名無しさん
10/06/12 19:31:59
>>784
失敗したときは違うHTMLがかえってくるよ。
check.plを経由してhome.plにいくみたい。

787:デフォルトの名無しさん
10/06/12 20:17:10
ミクシィに詳しくない俺でもこれは失敗だとわかる・・・(キリッ



うわあ・・・これは恥ずかしい
こいつに足りないのはリファラじゃなくて頭だな

788:デフォルトの名無しさん
10/06/12 21:14:20
>UA、リファラ、IP、クッキーのいずれか

他のヘッダで弾いてるところもいっぱいあるよ
成功したかどうかの確認は帰ってくるURLとかじゃなくてクッキー見たほうがいい

789:デフォルトの名無しさん
10/06/12 22:17:16
オミトロンなりWireSharkなりを使って、ブラウザで認証OKだったときの挙動をキャプチャしてみると
何か見つかると思うよ。

790:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/13 01:42:01
さすがにTimer使っといて同時はねーだろ。別スレッドとか別プロセスじゃないと。
同一スレッド上ではシーケンシャルにしか処理は動かないんだから。

792:デフォルトの名無しさん
10/06/13 02:52:43
>>790
ばかだねー(´・∀・`)

793:デフォルトの名無しさん
10/06/13 13:51:21
いやそうじゃなくって・・・
>>791
だから中身はtimer2になるはずでしょ?
間違ってたらスマンが。

794:デフォルトの名無しさん
10/06/13 14:15:28
>>793
Timer1のイベントが先に実行されるって決まってるんですか?

795:デフォルトの名無しさん
10/06/13 14:46:53
無知なのは別にいいがそれをあたかも常識のように言うのはやめていただきたい

796:デフォルトの名無しさん
10/06/13 15:01:52
Timer2のイベントが存在していないのに、Timer2になるって脳内お花畑か。
まあそれより、ず~っと以前の問題なんだけどな。


797:デフォルトの名無しさん
10/06/13 16:17:28
えっ?

798:デフォルトの名無しさん
10/06/13 20:29:08
イベントはTimer1とTimer2で共有ってことだろ。
>>794
決まってないと思うが、どちらのタイマイベントが先に発生するにせよ、
そのイベントハンドラの実行は同時に実行される事はない。だから、
後の方で上書きされるだけ。
タイマー使ってもマルチスレッドにはならんよ。

799:デフォルトの名無しさん
10/06/13 20:35:01

明らかな間違いだぜ
イベントが共通だったとしても
Timer2になることは無いのだよ。
ヒント:タイマーはひとつだけ!


800:デフォルトの名無しさん
10/06/13 21:28:47
1個のformには1個のTimerしか使えない。理由はWindowsの仕様だから。
ハイ、次の質問。

801:デフォルトの名無しさん
10/06/13 21:56:43
>>800
では次の質問。

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Memo1.Lines.Add((Sender as TTimer).Name);
end;

Timer1とTimer2が交互に追加されて表示されるのですが、なぜですか?

802:デフォルトの名無しさん
10/06/13 21:59:00
うそはよくない。TTimerは別々にウィンドウを保持してるので独立して動作する。
ただしメッセージループが動作していないといけないし、Windowsのタイマはもともと
指定時間を経過したことを示すフラグなのでそのあたりも注意が必要だが。

803:デフォルトの名無しさん
10/06/14 00:34:30
>>800
ばかだねー(´・∀・`)

804:デフォルトの名無しさん
10/06/14 00:46:36
>>790 ファイル保存するときに排他処理やってないとかいうオチ?

805:デフォルトの名無しさん
10/06/14 01:23:22
>>804
お前は何を言ってるんだ?

806:756
10/06/14 12:02:13
みなさん、レスありがとうございます。
あれから色々やってみたのですが、相変わらず
<meta http-equiv="refresh" content="0;url=/check.pl?n=%2Fhome.pl">
が返ってきます。

今はLive HTTP headersを火狐に入れて、正常にログインできたときの情報を確認しています
が、オミトロンを使用し、ブラウザとIdHTTP両方で確認してみます。

Indy使ったことがないので、勉強がてらやってみたのですが、俺にはてごわすぎる・・・。

807:デフォルトの名無しさん
10/06/14 14:21:55
それが正しいんじゃないの? ほんとにブラウザの動きを確認してる?

808:デフォルトの名無しさん
10/06/14 20:59:05
>>806
ブラウザの動き的にはそれであってるんじゃないの?
次にそのHTMLから/check.pl?n=%2Fhome.plにアクセスして
その次にhome.plに行けば成功じゃない?

809:デフォルトの名無しさん
10/06/15 04:36:11
>>806
(´・∀・`)

810:デフォルトの名無しさん
10/06/15 08:49:21
>765
漏れはこれで成功してる

MixiURL = 'URLリンク(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
10/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('URLリンク(mixi.jp)')を行ったのですが、ログイ
ン前の画面しか取得する事ができませんでした・・。
(ログインされていない状態)

もしよければ、最初のpost以降どのようなロジックでログイン後の画面を取得され
ているかアドバイスいただけないでしょうか?

812:デフォルトの名無しさん
10/06/15 12:18:50
>>811
もう数年前のコードで、内容をすっかり忘れてるし、今のmixiにログインできるかどうかすら解らないです

暇になったらDebugしながらどうなっているか確認してみます

が、期待しないでね

813:デフォルトの名無しさん
10/06/15 12:38:29
>>812
OSをWindows7にした時にDelphiをインストールし直したらコンポーネント不足でもうコンパイルすら出来なくなってたorz

なので自力で頑張ってくれ

確認だけどPostしてCookieもらってGetする前に
IdHTTP1.Request.ContentType:='';
ってやってる?

それくらいかな?
ほんとにCookieもらったあとは読みたいページを直で読みに行ってるだけだから

814:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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('URLリンク(mixi.jp)',PostData,Req);

IdHTTP1.Request.ContentType:='';

Buf:=IdHTTP1.Get('URLリンク(mixi.jp)');

Memo1.Text:=Buf;

PostData.Free;
Req.Free;

end;

816:765
10/06/15 13:54:33
>>814
コードありがとうございます。

が、なぜか同じコードを実行してみても、自分の環境ではログインされていない状態になるよう
です(ユーザー名とパスワード入力画面が表示される)。
TIdHTTP1でcookieを扱うために特にしなければいけない事はTCookieManagerの登録以外に
何かありますでしょうか?

うーん、まだPOSTしきれていない情報があるのか・・・?

817:デフォルトの名無しさん
10/06/15 14:24:07
>>816
一度新規にProjectを作ってやってみたらどうですかね?

と言うのは、IdHTTP等のプロパティの値が違うと取得できないケースがあります

ちなみに私のコードはDelphi起動、Project作成後に何も考えずにコンポーネントをペタペタやっただけです。
ちなみにDelphi2007です。

818:765
10/06/15 18:06:06
>>817
新規で作ってみましたが、やはりログイン前のmixi.jp/home.plの画面が表示されますね・・。
(パスワードとIDの入力画面)
postでIDとパスワードを送っているにもかかわらず、ログインできていないという事か・・?

ちなみにIndyはD2009/2010版の最新のものを入れています。

819:デフォルトの名無しさん
10/06/15 18:54:38
del2006だけど成功したよ。>>814-815

820:デフォルトの名無しさん
10/06/15 19:55:13
>>818
Delphi2010はStringのエンコードがややこしいので普段使ってないのですが、Delphi2010でやってみたけど出来ました。

何が違うんでしょうね

821:デフォルトの名無しさん
10/06/16 02:19:57
頭・・・ですかね

822:デフォルトの名無しさん
10/06/16 08:33:05
>>821
お前の?

823:デフォルトの名無しさん
10/06/16 13:30:08
>>822の。

824:デフォルトの名無しさん
10/06/16 14:09:14
他のアプリのウィンド内の文字列を取得するアプリを作っているのですが、
文字列を取得する時に、そのウィンドがアクティブになっていれば正常に取得できるのですが、
非アクティプの時に取得しようとすると ?Main と言う文字列が返ってきます。
目的のウィンド内の別のところの文字列は非アクティブでも取得できます。

どういう情報を書けばいいかよく分からないので、分かりにくい質問とは思いますがよろしくお願いします。









825:デフォルトの名無しさん
10/06/16 17:50:46
なんてソフトの
どんなところを
どうやって取得しているのか?

826:デフォルトの名無しさん
10/06/16 23:01:31
VCLベースアプリの可能性が高い感じ。
メインフォームの他に隠しウィンドウ持ってるから。

827:765
10/06/17 10:24:12
>>819、820
ひとつ確認させてください。
同じhome.plでもログイン前とログイン後の両方があります。
みなさんはログイン後のhome.plが表示されましたか?

828:765
10/06/17 10:28:55
ちなみにログイン前のhome.plだった場合、getで取得された情報の中に、「いますぐ利用す
る(無料)」や「すでに登録済みの方は、こちらからログインしてください」などの文字列が
入っています。 ログインされていない状態のhome.plですね。

俺がやると、なぜかこっちになるんだよね・・・。

829:デフォルトの名無しさん
10/06/17 10:58:30
いい加減、httpでアクセスして自分の送ってるパケットぐらい調べろ
httpsonlyだったり正常ならレスポンス時のカスタムヘッダを列挙しろ
それも駄目ならリクエスト時のカスタムヘッダに直接クッキー押し込め
それでも駄目ならアカウントが死んでる

クッキーコレクションだったか?あれはヘッダからクッキーを抜いて保持しとくだけの物なんだよ
使えなかったら直接ヘッダにぶち込め

つかな、もうこれdelphiスレで何度も何度もいってるんだよ
デバッグが出来ないならネットワークのプログラミングはやるな
つかRFC読んで仕組みを勉強しろ!

830:デフォルトの名無しさん
10/06/17 11:17:53

スレタイさえ読めないおバカさんですか?
このスレのタイトルは、
くだすれDelphi(超初心者用)その51
>Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、
>もしくは質問者自身何が何だか分からない質問を
>勇気を持って書き込むスレッドです。
>Delphi使いが優しくコメントを返しますが
>お礼はDelphiの布教と初心者の救済をお願いします。


831:デフォルトの名無しさん
10/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をヘッダーに送ったりもしていますが、やはり同じ結果(ログオンされていない状態に
なる)になるのです・・・。

ログインからの流れとしては
URLリンク(www.atmarkit.co.jp)
を参考にしています。 受け取ったcookieを持ってれば認証が必要なページにアクセス可能になる
ようですので、当方のCookieManagerの使い方がおかしいのか?と悩んでいるところです。
(他の方は成功しているようですので)

832:デフォルトの名無しさん
10/06/17 17:39:38
プロジェクト一式上げろよ

833:デフォルトの名無しさん
10/06/18 10:56:15
エクセルのファイルそのものを削除するにはどうすればいいのか誰か教えてくれないか
DeleteFile('C:\ファイル名'); でやるとTXTファイルなら削除できるのにエクセルだとなぜか削除されないんだ・・・

834:デフォルトの名無しさん
10/06/18 11:17:22
追記

別の名前で保存はできるが、名前を変更して保存(リネーム)もできない


835:デフォルトの名無しさん
10/06/18 12:14:20
D3のQuickReportのパッチのd3qrupd.lzhをお持ちの方居りましたらメールで送っていただけませんか?
サポート終了と言うことで本家から落とせなくて困っています。


836:デフォルトの名無しさん
10/06/18 12:22:27
>>832
うpローダー探してのちほどうpしてみます。
今日午後~火曜まで出張のため、来週半ばぐらいになるかもしれません。

837:833
10/06/18 15:14:23
すみません。自己解決しました。お騒がせしました。

838:デフォルトの名無しさん
10/06/21 17:47:50
bitmapのことで質問させてください。
canvas.draw(intX, intY, 別のビットマップ)
で画像コピーができることはわかったのですが、
これって受け手側の座標しか指定できないんですか。

100X100の大きさの受け手に対して、送り手の101, 201, 200, 300から
100X100だけ持ってくるにはどうしたらいいんでしょう。

839:デフォルトの名無しさん
10/06/21 18:31:51
ヘルプでTCanvasについて調べなさい

840:デフォルトの名無しさん
10/06/21 19:09:39
ありがとうございます。
メソッドにCopyRectってのがあったので、もしかしてこれかなと
思ってやってみたら、以下あっさりできました。
送り手.Canvas.CopyRect(Rect(0, 0, 100, 100), 受け手.Canvas, Rect(30, 30, 130, 130));

841:デフォルトの名無しさん
10/06/22 01:33:11
>>840
できたならいいけど受け手と送り手勘違いしてない?
あとDrawでもマイナス指定すればできるけど

842:デフォルトの名無しさん
10/06/22 22:06:48
ゲーム作っている人教えて。スーパーマリオなどのゲームって
スクロールしたとき、マリオをも背景も再描写させてるの?

843:デフォルトの名無しさん
10/06/22 22:22:30
そもそも昔のゲーム機はPCとは異なる概念で描画してるから
PCでは参考にならないと思うぜ

画面全体がタイル上に分割されていて、
どこにどのタイルを貼るかを指定する感じで描画する
背景は全体的にスクロールできて、
キャラは背景とは別に置けたんじゃなかったかな(所謂スプライト)
GBAの知識だからFCやSFCくらい古くなるとどうなってんのか知らないが

最近のゲーム機なら毎回レンダリングしてるんじゃないの
カメラが固定ならさぼってるかもしんないけど

844:デフォルトの名無しさん
10/06/23 09:37:41
最近、Delphi7のデータベースを使ったプログラムを作った時の
配布方法について教えて下さい。

データベースを使ったプログラム自体初めてなので、これから
本とか買って調べるのですが、データベースアプリってデータベースも含めて
Zipとかで配布できますか?
インストーラーとかよく分からないので、解凍して終わりな感じにしたいです。



845:デフォルトの名無しさん
10/06/23 09:40:18
>>844
そんな知識レベルで配布とかすんな。

846:デフォルトの名無しさん
10/06/23 09:51:04
Delphi は複数の DB 接続技術を利用できますから、あなたのアプリがどれを使うかによって
話は変わってしまいます。

まず、データベースアプリを作りましょう。
配布の話はそれからで十分だと思います。


847:デフォルトの名無しさん
10/06/23 10:22:34
>>845
答えてくれてありがとうなんだけど、ケチ付ける前に日本語読めるか?
これから調べて作るんだよ。
すっこんどけ。ヽ(`Д´)ノプンプン

>>846
了解しました。


848:デフォルトの名無しさん
10/06/23 10:38:27
あと、せめてどのデータベースにつなげたいのかくらいは書いてね。
そういうのもまだ決まっていないならどうしようも無いけど



849:844
10/06/23 11:27:58
>>848
> あと、せめてどのデータベースにつなげたいのかくらいは書いてね。
> そういうのもまだ決まっていないならどうしようも無いけど

なにぶん、初めてでどのデータベースに繋げようかとか決まってないです。
一応、「Delphi DB&Webプログラミング」って本が手に入りそうなので、
それで調べようかなと思っています。

逆に、簡単に配布出来るものってあるんでしょうか?


850:デフォルトの名無しさん
10/06/23 11:54:09
デルファイでマリオ作ろうとしてるやつっておめでたいな・・・

851:デフォルトの名無しさん
10/06/23 12:07:02
>>849
何を構築しようとしてるのか知らないけど、多分、君にDBは必要無いと思うよ。

852:デフォルトの名無しさん
10/06/23 13:09:16
7をWindows7で使ってます。

TRicheditの背景色についてですが、
いったん表示されてから、Windowsのテーマ変更で背景色が変わった場合
TRicheditは背景色がclWindowに追随してくれません。(ほかにTTrackbarも)
テーマ変更時のイベントを捕捉できればいいのですが、eventにはそれらしき
ものが見当たりません。
ためしにonChangeイベントで
reRichedit.color := clWindow;
とやってみましたが、テーマ変更後の色に変わりませんでした。
いったんコンポごと消して再生成するしかないのでしょうか?


853:デフォルトの名無しさん
10/06/23 15:14:26
まぁ、確かに要らないかも何ですが・・・
あるデータを溜め込んで、andやorで抽出する必要があるんで
何かのデータベースを使った方が楽かと。
データリスト自前で作っても良いんですけどね。

854:デフォルトの名無しさん
10/06/23 15:18:23
・自分でフィルタリングするの面倒だからDB使う。
・インストール面倒だからzipでファイルだけ配布。
・調べるの面倒だから2chで丸投げ。

855:デフォルトの名無しさん
10/06/23 15:38:43
854 どれも立派な理由だと思います。

856:デフォルトの名無しさん
10/06/23 15:41:06
いやいや別に丸投げって、そんんぁ。
インストーラーみたいなのをやらないといけないかどうかだけだよ知りたいのは。
データベースによるわ、ヴォケ!ってなら ヾ(゚∀゚)ノ ハイ で終わり

857:デフォルトの名無しさん
10/06/23 15:45:26
リレーショナル DB である必要がなく、データ件数が高々数万でよいなら
ClientDataSet を MidasLib ユニット経由で使えば、アプリケーションに
組み込み(追加の配布ファイルなし)で作れます。

一般の(リレーショナル)DB を使う場合には、そのサーバーそのもの以外に
DB メーカー提供のミドルウェア(接続用 DLL)が必要になります。
多くの場合、アプリケーションと同じディレクトリに置けば動く場合が多いですが
そうでない場合もあります。


858:856
10/06/23 15:52:28
>>857
ありがとうございました。
調べる的が絞れました。

859:デフォルトの名無しさん
10/06/24 02:31:28
ちょいちょい挟んでくるAAがイラッと来るなw
分かってやってるのかもしれんが

860:デフォルトの名無しさん
10/06/24 08:11:08
朝から引っ込んで炉よ、クズβακα..._φ(゚∀゚ )アヒャ

861:デフォルトの名無しさん
10/06/24 16:06:04
SHFileOperationって、いわゆる非同期というやつなんでしょうか?

大量のファイル(フォルダ)をバックグラウンドでコピーするために
FOF_SILENTを指定してSHFileOperationを使ってみたのですが、
処理が終わるまで画面が固まってしまいます。
そこで↓みたいなワークスレッドを作ってその中で実行させてみたのですが
今度はすべてのファイルがコピーされないまま、SHFileOperationから抜けて
スレッドが終了してしまいます。

procedure TWorkThread.Execute;
begin
ShellAPI.SHFileOperation(ShellParam);
end;

こっち立てればあっち立たずな感じで困っています...
こういうときにDelphiでうまい対処法みたいなものがあるのでしょうか?

862:デフォルトの名無しさん
10/06/24 17:10:41
Outlook Expressの保存フォルダ(dbxファイル)の場所を取得するには?

863:デフォルトの名無しさん
10/06/24 17:46:25
>>858
分かってるとは思うけどDBのライセンスに注意してね
付属のIntereBaseも再配布不可どころか開発専用のライセンスだし。

Delphiの場合だとIBX+組み込み版Firebirdが手っ取り早いと思うけど

864:デフォルトの名無しさん
10/06/24 19:01:39
うるせーハゲ^^

865:デフォルトの名無しさん
10/06/24 19:59:16
>>861
画面の見た目にこだわらないのであれば
処理の進捗を表示するフォームを作成してからCopyFileExを呼び出して、
コールバック関数内で画面を更新させる手もある

866:デフォルトの名無しさん
10/06/25 09:09:38
>>861
TSHFileOpStructのウィンドウハンドルに0を指定でいいんじゃね。

867:デフォルトの名無しさん
10/06/25 11:48:40
他のアプリのフォントの色を取得するにはどうすればいいですか?
目的のアプリのコントロール?のハンドルは取得できています。
GetDCでデバイスコンテキストを取得して、

Label1.Font.Color := GetTextColor(DC);

みたいにしているんですが、「0」が返ってきてしまいます。
よろしくお願いします。


868:デフォルトの名無しさん
10/06/25 11:54:56
全く同じ質問を見たような気がするが気のせいか?

869:デフォルトの名無しさん
10/06/25 11:58:16
失礼しました。
675にアキラメロンがありました。

870:デフォルトの名無しさん
10/06/25 15:40:43
数年前にDelphi6をやっていてある程度マスターしていたのですが
ひさしぶりにプログラミングをやろうとしたら全然状況が変わっていて
どの言語をやろうか迷っています。
Delphi経験者が今から趣味でプログラミングを始めるならどの言語がいいですか?

871:デフォルトの名無しさん
10/06/25 15:57:52
>>870
Object C

872:デフォルトの名無しさん
10/06/25 16:54:59
>>870
C#

873:デフォルトの名無しさん
10/06/25 21:47:02
>>870
Prism

874:デフォルトの名無しさん
10/06/25 22:03:33
>870
趣味?お金をかけたくないならC#、お金に余裕があるならDelphiかPrism。
C#はEEならただだから。

875:765
10/06/26 12:09:21
>>832
すいません、やっと出張から帰ってこれました・・・。

遅くなりましたが、うpローダーにうpしてみました。
URLリンク(www.dotup.org)

確認用に取得したHTMLをtest.htmlとしてexeと同じ位置に保存し、それを再度TWebBrowserに
取り込んでいます(ランタイムエラーでますが)。
TWebbrowserの画面でいますぐ利用する(無料)ボタンが表示されている場合、ログインできて
いないhome.pl画面です。
ログインできている場合は、該当アカウントのhome画面になるはずです。

よろしくお願いします。

来週からまた出張・・・orz

876:765
10/06/26 12:10:15
しまった書き忘れ・・・。
うpローダーのダウンロードパスはdelphiです。

877:デフォルトの名無しさん
10/06/26 13:36:05
Delphiってもう無料版はないの?

878:デフォルトの名無しさん
10/06/26 14:16:33
ない

879:デフォルトの名無しさん
10/06/27 00:56:09
処理中にマウスのカーソルを砂時計にしたいのですが、
各コントロールのCursorを全部設定していかないと
いけないのでしょうか?

880:デフォルトの名無しさん
10/06/27 03:16:10
Screen.Cursor := crDefault;

881:デフォルトの名無しさん
10/06/27 18:52:36
>>875
何度も言われていることなのにバカなの?
login.pl→check.pl→home.plっていう流れなのに
いきなりhome.plアクセスしてるじゃん。
いろんな人がいろんなアドバイスしてくれてるのに
全く聞く耳持ってないじゃん。

login.plでちゃんとログインできたらメタタグだけでcheck.plに行けって返ってくるから
そこにアクセスしてからhome.plにアクセスしてみなよ。
一度目のPOSTのレスポンスを表示しようと思わなかったのはなんでだろうか。

882:デフォルトの名無しさん
10/06/27 19:45:37
聞いてる時点でやる気も調べる気も行動する気も最後までやり遂げる気も無い

883:デフォルトの名無しさん
10/06/28 02:03:47
釣れた釣れたw

884:デフォルトの名無しさん
10/06/28 05:34:07
釣られちゃった
てへっ

885:デフォルトの名無しさん
10/06/28 09:44:58
恥ずかしい後釣り宣言来ました

886:デフォルトの名無しさん
10/06/28 14:00:40
恥ずかしい後釣り宣言来ました宣言来ました

887:デフォルトの名無しさん
10/06/28 14:47:30
自動ログインしたいという根性そのものがいけすかない。
手動でやれ手動で。ビシっと。

888:デフォルトの名無しさん
10/06/28 14:55:47
そういうのはC#でやるのが簡単なのに

889:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/28 19:25:46
ListView1.Items.IndexOf(stringData) >= 0
とか
ListView1.FindCaption(0,stringData,False,True,False) = nil
とか

891:デフォルトの名無しさん
10/06/28 19:29:14
ListView1.Items.IndexOf(stringData) < 0
だった

892:889
10/06/29 10:20:41
質問した時のプログラム例が間違ってる。
恥ずかしい。orz

>>890
ありがどうございます。
しかし、ItemsのIndexOfはTListItemを探すものらしいです。

ListView1.FindCaption(0,stringData,False,True,False) = nil
こっちでいいみたいです。

893:デフォルトの名無しさん
10/06/29 10:24:06
VirtualListViewでやれば好きなように出来る。

894:765
10/06/29 11:14:01
>>881
当初Live HTTP headersで確認したところ、login.plのあとにcheck.pl?n=/home.plにアクセス
していることがわかりましたので、
IdHTTP1.Get('URLリンク(mixi.jp)');

IdHTTP1.Get('URLリンク(mixi.jp)');
を試した事もありました
が、双方ともに302 Foundがでるので(ブラウザからはアクセスできる)、それ以上の調査はして
おりませんでした。

アップロードにうpしているファイルは、上の方でログインに成功されている方の例をそのまま
使って作り直したものです。

>>881さんはcheck.plにアクセスした際に、302 Foundエラーはでませんでしたか?
もしでている場合、どのように回避されましたか?

実はIndyのバージョンを2009梱包版のものではなく、最新にあげてしまっているので、そのあた
りが影響していないか心配です。

895:765
10/06/29 11:27:51
追加
POSTから返ってきた文字列に関しては>>768で触れております。
が、この時点でこのアドレスはクッキーが無効であるという失敗を表すものだという勘違いをして
しまい(>>784さんも同意見だったため)、しばらく迷走しておりました。
で、その後再度Live HTTP headersを追ってみたところ、「URLリンク(mixi.jp)
へのGETを発見しました。

今改めてみてみましたが、ブラウザでもcheck.plへのアクセスのあと、一度「HTTP/1.1 302 Found」
がでていますね・・・。

896:デフォルトの名無しさん
10/06/29 16:33:24
D3のSQLエクスプローラーで二つのInterbaseファイル間のテーブルの比較って出来ますか?
片方で削除されたレコードを抽出したいのです。



897:デフォルトの名無しさん
10/06/29 23:44:12
win7でターボデルフィは動かせますか?

898:デフォルトの名無しさん
10/06/30 01:18:54
302がエラーだとしか思わない人がネットツール作れるのかよ・・・・・・

899:デフォルトの名無しさん
10/06/30 03:07:49
>>895
もう続きはチラ裏でいいと思うよ

900:765
10/06/30 09:49:43
>>898
超初心者ですので、勉強のつもりでやってます・・・。
用語もそれほど知らないので、どう皆さんにうまく説明していいかわからず、エラーと表現して
しまい申し訳ございません。

>>881さんがどのように302 Foundを回避されているのか、アドバイスいただければ幸いです。

>>899
自分自身Delphiはおろかプログラミングもはじめたばかりですので、このスレに来たのですが、
もっと初心者向けのスレがあるという事でしょうか?
ここでも場違いなようでしたら、どちらかのスレに誘導していただければ嬉しいです。

901:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/06/30 10:32:54
本当に勉強したいなら、匿名無料掲示板で相談するのではなく経験を持っている人に教わった方が
速いです。身近に相談できるような人はいませんか?

>もっと初心者向けのスレが
「知らないこと」には限界が無いので、初心者とひとくくりにすることができないのですよ
あなたがどこまで何を知っているか。によって答え(や参考資料の出し方など)は変わっていくのです。
どこかにもっと初心者向けのスレがあるかもしれませんが、それは誰にもわかりません。

多くの回答者は暇なときにしか対応できませんからどうしても時間がかかります。だから「出直してこい」「ちょっとは
自分で調べろ」と言うしか無いのですよ。

今回の件では、プログラムする前に何が正しい動作、期待する動作なのかを知る必要が有るでしょう。
まずブラウザとサーバーの会話を分析、理解するべきだと思います。

簡単にはパケットキャプチャ。Safari や Chrome などのブラウザ組み込み開発ツールも役に立つでしょう。
ここから先は、まずはネットワーク関連のスレに移動した方が、より専門的な解説、説明、罵倒が待っていると
おもいます。行ってらっしゃい




903:765
10/06/30 11:46:21
>>902
このスレですでに二人ほど、ログインに成功している方がいるので、できればその方たちから
のヒントを聞かせていただければなと思っておりました。(´・ω・`)
もちろんヒマな時の回答でも、すごく嬉しいです!

DelphiでIndyを使用してMIXIにログインする例が見あたらなかったので、今後トライしようと
する人の為にも成功例がコードと共にあった方がいいかなと思って質問を続けてきましたが、
他のスレに行った方がよさげですね・・・。

とりあえずネットワーク関連のスレの方をみてみます。
こちらでも何かヒント等ありましたら、引き続きアドバイスいただければ幸いです。

ありがとうございました。

904:765
10/06/30 12:28:13
XRayさんのところに302回避の良いサンプルがありました。 Redirectを使って処理すればいいようです。

ちら裏になりますが、現在の状況です。
まだ解決にはほど通りので、引き続きがんばります。

ログイン情報をPOST

CookieとURLリンク(mixi.jp)へ行けとの指示ゲット

302Found

Redirectで処理し、URLリンク(mixi.jp)が返ってくる

URLリンク(mixi.jp)へ移動

ログイン前のホームが依然表示される

905:デフォルトの名無しさん
10/06/30 12:40:52
だからブラウザだって302を受け取って処理してんの。それと同じにやればいいんだよ

906:765
10/06/30 12:55:21
>>905
>>904のRedirect処理部分で、同じように処理いたしました(XRayさんのサイト参照)。

(Live HTTP Headersで確認したところ)正しい動きとしてはhome.plで無事ログイン済みになり
あらたにemidというCookieをもらえるはずですが、上記の通りでやはりログイン前の画面に
なってしまうので、引き続き調査中です。



907:デフォルトの名無しさん
10/06/30 14:00:32
そもそも認証は面倒だからIEでいいならIEコンポ(WebBrowser)でやったほうが早くて確実だけど
INDYにこだわる必要があるのかな
WebBrowserで自動ログインする部分が多少面倒だけどそれさえクリアすれば後は簡単

908:765
10/06/30 14:13:21
>>907
WebBrowserは別の練習アプリで使ったので(その時にIndyでも認証ができると知りました)今回は
Indyに挑戦してみようと思いまして。
だが、資料が少なすぎて、今の俺のスキルでは無茶すぎた・・・! と後悔しつつも、せっかくだか
ら最後までやりたいと思っております。

909:デフォルトの名無しさん
10/06/30 14:41:41
302回避とか書いている時点でなにも理解できてない。
Delphiとは関係ない知識が足りてない。

910:765
10/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:デフォルトの名無しさん
10/06/30 16:12:08
なぜDelphiなんだろうC#のがいいのに

912:765
10/06/30 16:40:50
>>911
ちら裏になりますが、会社の自分の前任者(元プログラマ、退職済)が2009を購入してもらって、
ちょこちょこ便利ツールを作ってたみたいで、後任の自分も使ってみたら?と渡された。

もともとプログラムできる奴カッケー!!と思っていたので、仕事の合間や自宅にノートPC持っ
て帰ってに勉強しています(セキュリティが緩いので・・・)。
職種はまったくPCと関係ない上、社内でその手の知識がある奴も皆無なのがつらいところ。

913:デフォルトの名無しさん
10/06/30 19:17:26
なぜDelphiなんだろう

914:デフォルトの名無しさん
10/06/30 21:23:52
Webアプリ作りたいんならまずRFC2616くらいは読んどいたほうがいい。

とりあえず、「HTTP/1.1 302 Found」は必ずしもエラーを意味しない。それによりリダイレクト
させることが目的である場合もあるから。
Indyのバージョンによるのかもしれないけど、プロパティで302を自動でリダイレクトさせる
ことができるし、実際自分はそれを使ってる。

915:765
10/06/30 22:33:34
>>914
実はRFC2616を説明しているサイトで302 Foundについてすでに調べたのですが・・・・
さっぱり意味わかんねえええええw orz

他も色々みてみて、どうやら一時的なページの移動か、CGIが返す場合があるという事
として今は理解しています(検討外れだったらすいません・・・)。

Indyのバージョンは最新のはずなので、もしかしたら自動でリダイレクトさせるプロパティ
があったのかもしれないですが、とりあえず現在はRedirectイベントで処理いたしました。

今日は力つきたので、ここまででw

916:デフォルトの名無しさん
10/06/30 23:06:41
Delphiと関係ないことは理解できましたか?

917:デフォルトの名無しさん
10/07/01 04:20:03
 BDEでODBC経由でSQL Serverに接続しています。(TDateBaseクラスを使用)
複数のプロセスでDB接続している際、その中の1つのプロセスを強制終了
(クラッシュ)しては再起動ということを繰り返していると、何度かいったところで
「この操作に必要なメモリがありません」と出て、DB接続できなくなります。
DB接続しているプロセスをいったん全て終了させると、正常に戻ります。
 見たところではリソースのリークのようなのですが、改善することはできますで
しょうか。

918:デフォルトの名無しさん
10/07/01 04:28:35
プロセスの強制終了が直接の原因でしょ
BDE は共有メモリモデルで動いているから異なるプロセス間で共有しているメモリブロックが解放されず
不足したのでしょう。

強制終了しないように直し、仮に例外が発生しても正しくアプリケーションを終了させるようにするのが正道。


919:デフォルトの名無しさん
10/07/01 04:42:57
BDE 使い続けている人は多いなぁ

920:デフォルトの名無しさん
10/07/01 09:41:07
BDE経由だとoracleでもそんな感じだし。

921:デフォルトの名無しさん
10/07/01 09:55:45
>>765
C++Builder2010だけど、>>814 のコードでログインできた。

>>814 のコードの
IdHTTP1.Post('URLリンク(mixi.jp)',PostData,Req);
で、Reqにサーバーからのレスポンスが入っている。

とりあえずReqのデータをSaveToFileでファイルに保存してファイルの内容を教えろ。

ログインできていれば、あとは >>814 の次のコードでログイン後のページが表示される。
IdHTTP1.Request.ContentType:='';
Buf:=IdHTTP1.Get('URLリンク(mixi.jp)');

302 Foundとかで躓く理由がない。


922:デフォルトの名無しさん
10/07/01 11:36:04
Indyってnegotiate認証に対応しているのでしょうか?NTLS認証は対応してるっぽい
ですけど、Kerberos認証は対応してます?

923:デフォルトの名無しさん
10/07/01 12:03:02
Delphi2010(Rad Studio)の
逆アセンブル/レジスタなどのペイン(メニューだと表示→デバッグ→CPUウィンドウ以下)
のフォントサイズが6?7?なのか不明ですが、文字が小さすぎて見えません

CPU全体というものを選べばフォントサイズはでかくて見易いのですが、この項目はエディタウィンドウと重なってしまい、使い勝手が悪いです

特にこれらの項目のフォントサイズを変更する項目が見あたらないのですが、文字を大きくすることは不可能なのでしょうか…

924:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/07/01 13:07:09
TDateTime型に変換する

926:デフォルトの名無しさん
10/07/01 18:50:02
>>924
> 今考えているのは、年月日の漢字を消して 201021 と言う数字にして比較しようと思っているのですが、
それだと2010年1月11日と2010年11月1日の区別ができないのでは。

927:デフォルトの名無しさん
10/07/01 19:25:17
StrToDateTimeでTDateTimeにして比較する

928:デフォルトの名無しさん
10/07/01 19:26:19
ごめん、こっちの方
VarToDateTime


929:924
10/07/01 23:06:28
皆さん、ありがとうございました。
VarToDateTimeを使って、上手くできました。

また、よろしくお願いします。

930:765
10/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:デフォルトの名無しさん
10/07/02 13:17:35
あれだけ言われてまだここでやるんだ

932:デフォルトの名無しさん
10/07/02 14:46:08
>>930
そのレスポンスなら、mixiの認証は通っている。
ここまでは正しい動作だ。

では次に >>815 の次の部分を下のコードのように変更してほしい。

これを

Buf:=IdHTTP1.Get('URLリンク(mixi.jp)');

こうする

Req.Clear();
IdHTTP1.Get('URLリンク(mixi.jp)', Req);

Reqにサーバーからのレスポンスが入っている。
これをSaveToFileでファイルに保存して内容を確認してほしい。
なお文字コードはeuc-jpなので、euc-jpに対応しているエディタで開く必要がある。


933:765
10/07/02 16:49:20
>>932
Reqの中身はログイン前の画面でした。
「すでに登録済みの方は、
こちらからログインしてください」
と共にログインメールアドレスとパスワードの入力を施す画面です。

>>932さんや>>814さんはこれでログインできているようですので、もしや、Indyのアップデータを
行ったのが問題なのか?
週末にでも一度削除し、インスロールを一からやり直してみます。

934:デフォルトの名無しさん
10/07/02 17:45:30
>>933
これ使え。
URLリンク(yuukiremix.s33.xrea.com)

935:デフォルトの名無しさん
10/07/02 19:01:55
ここまでやってパスかメアド間違えてるとかだったら殺意すら湧く

936:デフォルトの名無しさん
10/07/02 20:26:11
var
  X: Cardinal;
としておいて、
  X:=32768*32768;
  X:=X*2;
とか、
  X:=2147483648;
だと問題ないのですが、
  X:=32768*65536;
では、コンパイル時に「[エラー] ~: 数値演算のオーバーフロー」となってしまいます
どうしてなのでしょうか

937:デフォルトの名無しさん
10/07/02 20:41:12
0..4294967295

938:デフォルトの名無しさん
10/07/02 21:00:16
>>937
4294967295 ?
32768*65536は
2147483648
ですから、あふれてないように思うのですが

939:デフォルトの名無しさん
10/07/02 21:26:45
ヘルプの「真の定数」によると、定数式が整数の場合はその値によって型が決まり
32768~65535 ⇒ WORD
65536~2147483647 ⇒ 0..2147483647
となる。この場合 (WORD)*(0..2147483647) の演算だから
式全体の型は 0..2147483647 となり、結果がこの範囲に収まらないとエラー
という理屈になるのかな。何だか納得いかないけど、とりあえず
X := 32768*Cardinal(655356) とでもすればコンパイルは通るだろ。

940:デフォルトの名無しさん
10/07/02 22:26:25
>>939
「真の定数」読みました
なるほど、65536..2147483647は、ほぼInteger(Longint)ですね
X:=Cardinal(32768)*65536;
でもOkでしたので、その解釈は当たりだと思います
分かりましたー、と言いたいところですが、それなら
X:=32768*32768;
でもオーバーフローになるはずでは???
やっぱりなんか変ですよね

941:デフォルトの名無しさん
10/07/02 23:09:09
>>940
あとは、整数型同士の演算の場合
どちらかがInt64なら結果もInt64、そうでなければ結果はInteger
という規則があるから、これにひっかかるのかな。(ヘルプだと「算術演算子」のところ)

Cardinalが入った場合の規則が書かれていないからよくわからないけど、
Integerの範囲には収まらないはずだからInt64扱いになるのかもしれない。

942:デフォルトの名無しさん
10/07/03 00:29:21
>もしや、Indyのアップデータを行ったのが問題なのか?
>週末にでも一度削除し、インスロールを一からやり直してみます。

ワロタwww アップデータをインスロールしてくださいね(笑)


943:デフォルトの名無しさん
10/07/03 01:39:16
定数の型を指定したい場合はこうすればいい
const foo = Cardinal(1);

944:デフォルトの名無しさん
10/07/03 08:46:20
計算時に
i := Cardinal(1) * 10;
でいいやん。

945:デフォルトの名無しさん
10/07/03 12:29:36
仕事に忙殺されてるうちにすっかり取り残されてしまい、いまだに D6 Pro ですが、
職場では Win7 を使っています。
少々余裕も出てきた&ネイティブコードも必要になりそうなので、職場のマシンに
インスコしてみました。今のところ動いています。

せっかくなので Win7 のタスクバーの新機能を使ってみたいのですが、D6 Pro で
ITaskbarList3 を使うにはどうしたらいいんでしょうか。タイプライブラリの取り込みで
ExplorerFrame.dll を指定してもエラーになってしまいます。さすがに古すぎるんでしょうか。

946:デフォルトの名無しさん
10/07/03 12:44:42
>>944
定数の話してるのになんでマジックナンバーにするの?馬鹿なの?

947:946
10/07/03 12:45:56
僕が馬鹿でした

948:944
10/07/03 12:47:03
分かればいいよw

949:デフォルトの名無しさん
10/07/03 12:48:35
const foo:Cardinal=1;
でいいやん。

950:デフォルトの名無しさん
10/07/03 13:02:41
>>949しか知らんかったわ。
>>943今度使ってみよう。
些細なことで偶に勉強になるな。役立つかは別にして。

951:デフォルトの名無しさん
10/07/03 15:25:44
厳密に言えば>>949は一度だけ書き替え可能な変数
>>944が本当の定数
>>944はコンパイル時に実際に数値と置き換わるけど、>>949は変数と同じく参照として扱われるから、
その展開がない分>>944の方が高速になる
知らないことは誰だってあるけど、いいやんとか言って違いも調べず思考停止するやつは向上心もう少し持とうぜ

952:デフォルトの名無しさん
10/07/04 03:30:07
もっと!もっと熱くなれよ!!

953:765
10/07/05 14:22:54
IndyのバージョンをDelphiインストール時のものに戻してテストしてみたところ、こちらの
バージョンではログイン後の画面が表示されました。
よって、バージョンアップをしてしまうと、なんらかの原因で正常なログインができなくなる
ようです。
Proxomitronを使って、両者のPOSTおよびGETの内容を確認してみましたが、全く同じデー
タでした。

旧バージョンで新バージョンのunitを開くとRequest.Ranges.Unitsが無いというエラーがでた
ので、そのあたりのプロパティかと思い、わからないならがも色々やってみたのですが改善
することができませんでした。
ソースを追って、原因追及といきたいところですが、自分にはまだまだ無理ですので、とり
あえず旧バージョンに戻す事で対応したいと思っています。

新バージョンで実装されているRequest.CharSetを使いたくてバージョンアップしたのですが、
残念です・・・。

色々教えていただき、ありがとうございました。
また自分の書き込みでご気分を害された方、申し訳ございませんでした。

954:デフォルトの名無しさん
10/07/05 17:05:21
そういうときはIndyのバージョンも書けよ

955:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/07/05 17:56:55
>>954
自分の無能さをライブラリのせいにして逃げる口実なんだからわざと書いてないんだよ
言わせんな恥ずかしい

958:デフォルトの名無しさん
10/07/05 18:02:31
>>955-956
TComparer<T>.Defaultの実装が参考になるというかそのまま使えると思う

959:デフォルトの名無しさん
10/07/05 18:14:50
>>954,>>957
バージョンについては>>818に書いたのですが、最初の書き込み時に書くべきでしたね。
申し訳ございません。

960:デフォルトの名無しさん
10/07/05 19:09:23
「最新」なんてバージョンはない

961:デフォルトの名無しさん
10/07/05 20:55:58
最初から最後までここまでぐだぐだになれるのもある意味才能だろうな・・・

962:デフォルトの名無しさん
10/07/05 23:49:35
ume

963:765
10/07/06 11:10:56
>>960
同じようにアップデートしてしまって以前と同じような動きができなくなった方の為に、参考ま
でに書いておきますね。
バージョンは10.5.7で(2009に同梱のものは10.2.5)昨日の時点ではr4270のものを使用しまし
た(changelog.txtでの確認)。
最初に試したものはr4258です。

>>961
PCやプログラムについての知識がなさすぎて、皆様を不快な気持ちをさせてしまいました。
申し訳ございません。

964:デフォルトの名無しさん
10/07/06 13:14:00
いいよ^^

965:デフォルトの名無しさん
10/07/09 18:38:37
匿名関数使ったサンプル集みたいなサイトや本って無い?

966:デフォルトの名無しさん
10/07/09 21:25:28
WebBrowserをフォームに貼ってサイトを表示させてるとkeypreviewをtrueにしてもonkeydownでキーを拾ってくれないんですがどうすればよいのでしょうか?

967:デフォルトの名無しさん
10/07/12 17:50:49
ローソク足のチャートが書ける日本語のコンポーネントってありませんか?
有料でも良いです。

968:デフォルトの名無しさん
10/07/12 17:54:02
条件をひとつ削ってもいいなら腐るほどあると思うけど

969:デフォルトの名無しさん
10/07/12 17:54:17
URLリンク(page13.auctions.yahoo.co.jp)


970:デフォルトの名無しさん
10/07/12 17:58:25
>>967
ありますよ

971:デフォルトの名無しさん
10/07/12 19:57:43
>965
omnithreadlibrary - Project Hosting on Google Code
URLリンク(code.google.com)
のデモの30番とか。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch