delphi2010


有田  2009-12-18 09:31:24  No: 36476

turboから2010に変更したときに2つのエラーがでます。
turboでは正常稼動していたプログラムです。

http://hogehoge.com/hoge.txtの中身のhttp://yahoo.co.jpというテキストを読み取ってナビゲートしたいのですが、文字化けで漢字になってしまします。http://hogehoge.com/hoge.txt側のエンコードはイロイロ試しましたが全て文字化けでした

②Application.ProcessMessages;
の  ProcessMe  までに赤い斜線がはいります、どうしてでしょうか?

以下ソースです。
-----------------------------

  //接続の確立
  hSession :=InternetOpen(nil, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
  if Assigned(hSession) then
  begin
    //URLのハンドルを取得
    hReqUrl :=InternetOpenUrl(hSession,PChar(http://hogehoge.com/hoge.txt), nil, 0,INTERNET_FLAG_RELOAD, 0);
    try
    if Assigned(hReqUrl) then
    begin
      while true do begin
       //URLハンドルを元にBufferに読み込む(ファイル最後まで繰り返す)
       InternetReadFile(hReqUrl, @Buffer, Sizeof(Buffer), ReadCount);
       //ファイルの最後までいったら抜ける
       if ReadCount = 0 then Break;
       HtmlStr :=HtmlStr + string(Buffer);
      end;
        //HtmlStr確認用のアレ
        ShowMessage(HtmlStr);
    //Memo1.Text :=HtmlStr;
    Label1.Caption := HtmlStr;
    Label2.Caption := '[1]';
    WebBrowser1.Navigate(HtmlStr);
    HtmlStr := '';
    end;
    finally
      InternetCloseHandle(hReqUrl);
    end;
  end;
  finally
    InternetCloseHandle(hSession);
  end;

Buffer :='';
HtmlStr := '';
{URL1 部分終了}/////////////////////////////////////////////////////////////////
  WaitTime := 2/24/60/60; //2秒待つ
  StartTime := Now;
  while True do begin
    Application.ProcessMessages;
    if StartTime + WaitTime < Now then Break;
  end;


通りすがり  2009-12-19 19:26:53  No: 36477

せっかくソースを公開しているのに変数の宣言部までカットしている
ものだからそのままでは動かないどころかいちいちhSessionとかの型を
調べなきゃいけなくて面倒だから試していない。
だから下記の内容は予想。

Delphiは2009からUnicodeに変わってる。
だからString、Charと宣言した場合
turboではAnsiString、AnsiChar(1バイト)になるが
Delphi2010ではUnicodeString、WideChar(2バイト)になる。

とりあえずHtmlStrとBufferをAnsiStringやAnsiCharで宣言してあげないと
文字化けすると思う。
もちろん↓の行も 〜AnsiString(Buffer); にする必要がある。
HtmlStr :=HtmlStr + string(Buffer);

Delphi2010の基本がUnicodeStringなのにHtmlStrがAnsiStringになって
しまうが、他のstring型に代入した時はDelphiが文字コードを変換しながら
代入してくれるから気にしない。


有田  2009-12-21 02:53:42  No: 36478

通りすがり様ありがとうございます。

HtmlStrとBufferをAnsiStringやAnsiCharにしたら解説いたしました、
また宣言部分の不記載失礼いたしました。

後一つ
②Application.ProcessMessages;
の  ProcessMe  までに赤い斜線がはいります、どうしてでしょうか?

の部分はどうしてでしょうか?


通りすがり  2009-12-21 06:46:00  No: 36479

無事解決したようでなにより。

でも
>②Application.ProcessMessages;
>の  ProcessMe  までに赤い斜線がはいります、どうしてでしょうか?
に関してはわからない。自分の環境ではそうならないから。

自作のコンポーネントを変更して.pasと.dcuの内容がズレているときに
よくこうなっていた事を考えると、もしかしたらプロジェクトの再構築を
実行してからDelphiを再起動すると直るかもしれないけど自信は無し。

コンパイルしてもエラーにならないなら無視してもいいかと思う。


有田  2009-12-22 01:07:02  No: 36480

プロジェクトの再構築  はどのようにするのでしょうか?


有田  2009-12-22 01:11:09  No: 36481

あ、すいませんできました、がエラーでとまってしまいますねぇ。
コンパイル時にはエラーはでません、もうしばらくがんばってみます。

ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加