喫茶XRAYトップページ

[スレッド全体
]

[7692] コンポーネントをフォームに配置すると返信 削除
2014/7/3 (木) 23:23:57 Mr.XRAY
念のために,追記しておきます.

> EIdHTTPProtocolException も Form1.EIdHTTPProtocolException
> ということになります.
> ところが,Form1 には EIdHTTPProtocolException が定義されていません.
> これは IdHTTTP ユニットで定義されています.
> つまり,uses に IdHTTP が必要です.そうすれば,Delphi は,


これは,
EIdHTTPProtocolException が,IdHTTP.pas で定義されているからです.

もし,質問された方が提示したコードを,Form1 のユニットで実行した場合は,
未定義のエラーにはなりません.
なぜかというと,Form1 のユニットの uses には IdHTTP があるからです.
これは,質問された方の発言内容から判定できます.

Delphi XE の場合ですが,新規にプロジェクトを作成すると,
以下のようになっています.


interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 

TIdHTTP コンポをフォームに配置して,コンパイルすると,次のように,
uses に自動で IdHTTP が追加されます.
このように,コンポーネントをフォームに配置すると,自動的に,
必要なユニット名が追加される仕組みになっています.


interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;
 


[7693] コンポーネントを実行時に生成する場合は返信 削除
2014/7/3 (木) 23:36:12 Mr.XRAY
> このように,コンポーネントをフォームに配置すると,自動的に,
> 必要なユニット名が追加される仕組みになっています.


コンポーネントを実行時に生成する場合,動的に生成する,とも言いますが,
その場合は,自動では uses 部に必要なユニット名は追加されません.
次のコードは,以下のコンパイルエラーとなります.

[DCC エラー] Unit1.pas(28): E2003 未定義の識別子 : 'TIdHTTP'


procedure TForm1.Button1Click(Sender: TObject);
var
  HTTP : TIdHTTP;
begin
  HTTP := TIdHTTP.Create(Self);
  try
    //何かの処理
  finally
    FreeAndNil(HTTP);
  end;
end;

実行時に生成する場合でも,
もし,フォームに TIdHTTP コンパが配置してあれば,エラーとはなりません.


[7694] ファイルが見つかりませんと未定義のエラー返信 削除
2014/7/4 (金) 12:55:05 Mr.XRAY
Delphi XE で新規にプロジェクトを作成すると,ユニットの uses 部は
次のようになっています.
これらはユニット名と呼ばれています.ファイル名から,
拡張子 .pas あるいは .dcu を除いたものです.

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;


また,プロジェクトのよって,[プロジェクトの追加]で,プロジェクト
にファイルを追加することがあります.
 
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  VCLImageUtils in '..\VCLImageUtils.pas';  //ここ

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
 
コンパイル時に,Delphi は,パスの通ったフォルダから,これらの
ファイルを探します.
もし,ファイルがないと,「ファイルが見つかりません」という
エラーとなります.

未定義のエラーは,これらのファイル内に該当する関数等がない場合に
発生することになります.

uses 部に書いてあるユニット内でも当然 uses 部があります.
そのユニットの uses 部のユニット(ファイル)も探すわけです.
そして,該当ファイルがなければ,やはり,ファイルが見つかりません.
ということになります.
未定義のエラーも現象は同じです.


[7695] Re:ファイルが見つかりませんと未定義のエラー返信 削除
2014/7/4 (金) 16:01:54 Mr.XRAY
> 未定義のエラーも現象は同じです.

たとえ,uses 部やプロジェクトのソースコードで指定したファイル内にあっても,
未定義のエラーは,コンポーネント(つまり,クラスです)内のアクセスできない
位置にあると未定義になります.

それは,例えば,interface 部の Protected 部や Private 部にある場合です.
implementation 部にはアクセスできません.


[7703] Re2:ファイルが見つかりませんと未定義のエラー返信 削除
2014/7/8 (火) 11:44:34 Mr.XRAY
また,同じバターンか...


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82